@baton-dx/cli 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"src-C0c228gb.mjs","names":["util","util","util","defaultErrorMap","defaultErrorMap","util","defaultErrorMap","z.number","z.object","z.string","z\n .object","z.array","z.record","z.enum","z.object","z.string","z.union","z.array","z.record","z\n .object","z\n .union","z\n .object","z.object","z.string","z\n .object","z\n .array","z.record","z.unknown","z.array","z.boolean","z.enum","z.object","z.string","z\n .enum","z.union","z.record","z\n .string","z\n .record","tty","FOLDER","Buffer2","simpleGit","z.object","z.string","z.array","z.ZodError","loadProfileManifest","z.object","z.string","z.boolean","z.array","z\n .object","z.enum","z\n .enum","z.number","z.object","z.literal","z\n .object","z.boolean","z.array","z.string","z.object","z.string"],"sources":["../../ai-tool-paths/src/types.ts","../../ai-tool-paths/src/helpers.ts","../../core/src/errors.ts","../../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/util.js","../../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/ZodError.js","../../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/locales/en.js","../../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/errors.js","../../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js","../../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js","../../../node_modules/.bun/zod@3.25.76/node_modules/zod/v3/types.js","../../core/src/schemas/constants.ts","../../core/src/schemas/source-manifest.ts","../../core/src/schemas/profile-manifest.ts","../../core/src/schemas/project-manifest.ts","../../core/src/schemas/lockfile.ts","../../core/src/utils/yaml-parser.ts","../../core/src/utils/source-parser.ts","../../core/src/utils/frontmatter.ts","../../core/src/adapters/base-adapter.ts","../../core/src/adapters/amp.ts","../../core/src/adapters/antigravity.ts","../../core/src/adapters/claude-code.ts","../../core/src/adapters/cline.ts","../../core/src/adapters/codex.ts","../../core/src/adapters/cursor.ts","../../core/src/adapters/github-copilot.ts","../../core/src/adapters/junie.ts","../../core/src/adapters/kiro.ts","../../core/src/adapters/opencode.ts","../../core/src/adapters/roo.ts","../../core/src/adapters/trae.ts","../../core/src/adapters/windsurf.ts","../../core/src/adapters/zed.ts","../../core/src/adapters/registry.ts","../../core/src/ide/platform-registry.ts","../../core/src/utils/gitignore.ts","../../../node_modules/.bun/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/common.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/browser.js","../../../node_modules/.bun/has-flag@4.0.0/node_modules/has-flag/index.js","../../../node_modules/.bun/supports-color@7.2.0/node_modules/supports-color/index.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/node.js","../../../node_modules/.bun/debug@4.4.3/node_modules/debug/src/index.js","../../../node_modules/.bun/@kwsites+file-exists@1.1.1/node_modules/@kwsites/file-exists/dist/src/index.js","../../../node_modules/.bun/@kwsites+file-exists@1.1.1/node_modules/@kwsites/file-exists/dist/index.js","../../../node_modules/.bun/@kwsites+promise-deferred@1.1.1/node_modules/@kwsites/promise-deferred/dist/index.js","../../../node_modules/.bun/simple-git@3.30.0/node_modules/simple-git/dist/esm/index.js","../../core/src/sources/git-clone.ts","../../core/src/sources/npm-resolver.ts","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/internal/constants.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/internal/debug.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/internal/re.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/internal/parse-options.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/internal/identifiers.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/classes/semver.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/parse.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/valid.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/clean.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/inc.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/diff.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/major.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/minor.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/patch.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/prerelease.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/compare.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/rcompare.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/compare-loose.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/compare-build.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/sort.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/rsort.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/gt.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/lt.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/eq.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/neq.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/gte.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/lte.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/cmp.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/coerce.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/internal/lrucache.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/classes/range.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/classes/comparator.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/functions/satisfies.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/to-comparators.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/max-satisfying.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/min-satisfying.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/min-version.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/valid.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/outside.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/gtr.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/ltr.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/intersects.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/simplify.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/ranges/subset.js","../../../node_modules/.bun/semver@7.7.4/node_modules/semver/index.js","../../core/src/sources/version-resolver.ts","../../core/src/lockfile/manager.ts","../../core/src/lockfile/cleanup.ts","../../core/src/state/state.ts","../../core/src/sources/load-profile-safe.ts","../../core/src/sources/source-discovery.ts","../../core/src/placement/engine.ts","../../core/src/migration/legacy-paths.ts","../../core/src/inheritance/profile-chain.ts","../../core/src/inheritance/profile-support.ts","../../core/src/merge/strategies.ts","../../core/src/merge/content-parts.ts","../../core/src/merge/weight-sort.ts","../../core/src/merge/skills.ts","../../core/src/merge/rules.ts","../../core/src/merge/agents.ts","../../core/src/merge/memory.ts","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/utils.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/exception.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/helpers/if.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/helpers/log.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/helpers/with.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/helpers.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/decorators.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/logger.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/base.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/safe-string.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/runtime.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/no-conflict.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars.runtime.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js","../../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/base64.js","../../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/base64-vlq.js","../../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/util.js","../../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/array-set.js","../../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/mapping-list.js","../../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-map-generator.js","../../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/binary-search.js","../../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/quick-sort.js","../../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-map-consumer.js","../../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/lib/source-node.js","../../../node_modules/.bun/source-map@0.6.1/node_modules/source-map/source-map.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/dist/cjs/handlebars/compiler/printer.js","../../../node_modules/.bun/handlebars@4.7.8/node_modules/handlebars/lib/index.js","../../core/src/substitution/variables.ts","../../core/src/schemas/global-config.ts","../../core/src/config/global-config.ts","../../core/src/ide/detection.ts","../../core/src/intersection/compute.ts","../../core/src/preferences/preferences-schema.ts","../../core/src/preferences/preferences-io.ts","../../core/src/preferences/preferences-resolver.ts","../../core/src/self-update/detect-install-method.ts","../../core/src/self-update/check-latest-version.ts"],"sourcesContent":["/**\n * Configuration type union - represents all types of configurations\n * that can be managed by Baton\n */\nexport type ConfigType = \"skills\" | \"rules\" | \"agents\" | \"memory\" | \"commands\";\n\n/**\n * Scope for configuration items\n */\nexport type Scope = \"project\" | \"global\";\n\n/**\n * Platform identifier for platform-specific detection checks\n */\nexport type Platform = \"darwin\" | \"linux\" | \"win32\";\n\n/**\n * Check for a binary in PATH, optionally verifying its identity via version output.\n * Prevents false positives from binary name collisions (e.g., `opencode` by Litestar vs SST).\n */\nexport interface BinaryCheck {\n readonly type: \"binary\";\n readonly name: string;\n readonly versionFlag?: string;\n readonly versionPattern?: RegExp;\n readonly platforms?: readonly Platform[];\n}\n\n/**\n * Check for a directory's existence, optionally requiring a marker file.\n * Prevents false positives from leftover empty directories.\n */\nexport interface DirectoryCheck {\n readonly type: \"directory\";\n readonly path: string;\n readonly markerFile?: string;\n readonly platforms?: readonly Platform[];\n}\n\n/**\n * Check for a macOS .app bundle in /Applications or ~/Applications.\n */\nexport interface AppBundleCheck {\n readonly type: \"app\";\n readonly name: string;\n readonly searchPaths?: readonly string[];\n}\n\n/**\n * Check for a VS Code extension installed in VS Code, Cursor, or Windsurf.\n */\nexport interface VscodeExtensionCheck {\n readonly type: \"vscode-extension\";\n readonly extensionId: string;\n readonly editors?: readonly (\"vscode\" | \"cursor\" | \"windsurf\")[];\n}\n\n/**\n * Check for a JetBrains plugin installed across any JetBrains IDE version.\n */\nexport interface JetbrainsPluginCheck {\n readonly type: \"jetbrains-plugin\";\n readonly pluginId: string;\n}\n\n/**\n * Union of all detection check types.\n */\nexport type DetectionCheck =\n | BinaryCheck\n | DirectoryCheck\n | AppBundleCheck\n | VscodeExtensionCheck\n | JetbrainsPluginCheck;\n\n/**\n * Detection configuration using OR-of-ANDs logic.\n * Each group is an AND (all checks must pass).\n * Any group passing means the tool is detected (OR across groups).\n */\nexport interface DetectionConfig {\n readonly groups: readonly (readonly DetectionCheck[])[];\n}\n\n/**\n * Error thrown when an agent is not found in the registry\n */\nexport class AIToolNotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"AIToolNotFoundError\";\n }\n}\n\n/**\n * Path configuration for a single agent.\n */\nexport interface AIToolPathConfig {\n /** Unique key identifying the agent (e.g., 'claude-code', 'cursor') */\n key: string;\n /** Human-readable name of the agent */\n name: string;\n /** Paths for skills configuration */\n skills: {\n /** Project-level skills path (relative to project root) */\n project: string;\n /** Global skills path (user home directory, ~/...) */\n global: string;\n };\n /** Paths for rules configuration */\n rules: {\n /** Project-level rules path */\n project: string;\n /** Global rules path */\n global: string;\n };\n /** Paths for agents configuration */\n agents: {\n /** Project-level agents path */\n project: string;\n /** Global agents path */\n global: string;\n };\n /** Paths for memory files (e.g., CLAUDE.md, AGENTS.md) */\n memory: {\n /** Project-level memory path */\n project: string;\n /** Global memory path */\n global: string;\n };\n /** Paths for commands/workflows */\n commands: {\n /** Project-level commands path */\n project: string;\n /** Global commands path */\n global: string;\n };\n /** Structured detection configuration using OR-of-ANDs logic */\n detectionConfig?: DetectionConfig;\n /** Legacy paths for backward compatibility (e.g., .cursorrules, .windsurfrules) */\n legacy: {\n /** Legacy rules paths */\n rules?: string[];\n /** Legacy memory paths */\n memory?: string[];\n };\n}\n","import { homedir } from \"node:os\";\nimport { AI_TOOL_PATHS } from \"./registry.js\";\nimport {\n AIToolNotFoundError,\n type AIToolPathConfig,\n type ConfigType,\n type Scope,\n} from \"./types.js\";\n\n/**\n * Retrieves the full agent configuration for a given agent key.\n *\n * @param agentKey - The unique key of the agent (e.g., 'claude-code', 'cursor')\n * @returns The full AIToolPathConfig for the agent\n * @throws AIToolNotFoundError if the agent key is not found in the registry\n */\nexport function getAIToolConfig(agentKey: string): AIToolPathConfig {\n const config = AI_TOOL_PATHS.find((agent) => agent.key === agentKey);\n if (!config) {\n throw new AIToolNotFoundError(`Agent with key '${agentKey}' not found in registry`);\n }\n return config;\n}\n\n/**\n * Returns an array of all registered agent keys.\n *\n * @returns Array of all agent keys\n */\nexport function getAllAIToolKeys(): string[] {\n return AI_TOOL_PATHS.map((agent) => agent.key);\n}\n\n/**\n * Resolves a path template with tilde expansion and name placeholder replacement.\n *\n * @param template - The path template (e.g., '~/.claude/skills/{name}')\n * @param name - Optional name to replace {name} placeholder with\n * @returns Resolved path string\n */\nfunction resolvePath(template: string, name?: string): string {\n let resolved = template;\n\n // Replace {name} placeholder\n if (name) {\n resolved = resolved.replace(/\\{name\\}/g, name);\n }\n\n // Expand tilde to home directory\n if (resolved.startsWith(\"~/\")) {\n resolved = resolved.replace(/^~/, homedir());\n }\n\n return resolved;\n}\n\n/**\n * Retrieves the resolved path for a given agent, config type, scope, and optional name.\n *\n * @param agentKey - The unique key of the agent\n * @param configType - The type of configuration (skills, rules, agents, memory, commands)\n * @param scope - The scope (project or global)\n * @param name - Optional name to replace {name} placeholder\n * @returns Resolved path string\n * @throws AIToolNotFoundError if the agent key is not found\n */\nexport function getAIToolPath(\n agentKey: string,\n configType: ConfigType,\n scope: Scope,\n name?: string,\n): string {\n const config = getAIToolConfig(agentKey);\n const pathConfig: { project: string; global: string } = config[configType];\n const pathTemplate = pathConfig[scope];\n return resolvePath(pathTemplate, name);\n}\n\n/**\n * Retrieves legacy paths for a given agent and config type.\n *\n * @param agentKey - The unique key of the agent\n * @param configType - The type of configuration (only rules and memory have legacy paths)\n * @returns Array of legacy path strings (empty if none exist)\n * @throws AIToolNotFoundError if the agent key is not found\n */\nexport function getLegacyPaths(agentKey: string, configType: ConfigType): string[] {\n const config = getAIToolConfig(agentKey);\n if (configType in config.legacy) {\n const legacyPaths = config.legacy[configType as keyof typeof config.legacy];\n return legacyPaths ?? [];\n }\n return [];\n}\n","/**\n * Base error class for all Baton errors\n */\nexport class BatonError extends Error {\n readonly code: string;\n readonly cause?: unknown;\n\n constructor(code: string, message: string, cause?: unknown) {\n super(message);\n this.name = this.constructor.name;\n this.code = code;\n this.cause = cause;\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n}\n\n/**\n * Thrown when a manifest file fails validation\n */\nexport class ManifestValidationError extends BatonError {\n constructor(message: string, cause?: unknown) {\n super(\"MANIFEST_VALIDATION_ERROR\", message, cause);\n }\n}\n\n/**\n * Thrown when a Git source operation fails\n */\nexport class GitSourceError extends BatonError {\n constructor(message: string, cause?: unknown) {\n super(\"GIT_SOURCE_ERROR\", message, cause);\n }\n}\n\n/**\n * Thrown when a requested version is not found\n */\nexport class VersionNotFoundError extends BatonError {\n constructor(message: string, cause?: unknown) {\n super(\"VERSION_NOT_FOUND_ERROR\", message, cause);\n }\n}\n\n/**\n * Thrown when an adapter is not found for a given agent key\n */\nexport class AIToolAdapterNotFoundError extends BatonError {\n constructor(message: string, cause?: unknown) {\n super(\"ADAPTER_NOT_FOUND_ERROR\", message, cause);\n }\n}\n\n/**\n * Thrown when a source string cannot be parsed\n */\nexport class SourceParseError extends BatonError {\n constructor(message: string, cause?: unknown) {\n super(\"SOURCE_PARSE_ERROR\", message, cause);\n }\n}\n\n/**\n * Thrown when circular inheritance is detected in profile extends chain\n */\nexport class CircularInheritanceError extends BatonError {\n constructor(message: string, cause?: unknown) {\n super(\"CIRCULAR_INHERITANCE_ERROR\", message, cause);\n }\n}\n\n/**\n * Thrown when a file is not found\n */\nexport class FileNotFoundError extends BatonError {\n constructor(message: string, cause?: unknown) {\n super(\"FILE_NOT_FOUND_ERROR\", message, cause);\n }\n}\n\n/**\n * Thrown when a source is not found\n */\nexport class SourceNotFoundError extends BatonError {\n constructor(message: string, cause?: unknown) {\n super(\"SOURCE_NOT_FOUND_ERROR\", message, cause);\n }\n}\n\n/**\n * Thrown when Git is not installed on the system\n */\nexport class GitNotInstalledError extends BatonError {\n constructor(message: string, cause?: unknown) {\n super(\"GIT_NOT_INSTALLED_ERROR\", message, cause);\n }\n}\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","/**\n * Kebab-case validation regex for profile and source names.\n * Must start with a lowercase letter, followed by lowercase letters, digits, or hyphens.\n * No consecutive hyphens, no leading/trailing hyphens.\n */\nexport const KEBAB_CASE_REGEX = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;\n\n/**\n * Simple semver validation regex (major.minor.patch).\n */\nexport const SEMVER_REGEX = /^\\d+\\.\\d+\\.\\d+$/;\n","import { z } from \"zod\";\nimport { KEBAB_CASE_REGEX, SEMVER_REGEX } from \"./constants.js\";\n\n/**\n * Weight schema for profile prioritization during merges.\n * - 0 = default priority\n * - positive values = higher priority (wins conflicts)\n * - -1 = lock (cannot be overridden by any other profile)\n */\nexport const weightSchema = z.number().int().min(-1).default(0);\n\n/**\n * Profile entry in source manifest\n */\nexport const sourceProfileEntrySchema = z.object({\n name: z.string(),\n path: z.string(), // e.g., \"profiles/frontend\"\n description: z.string().optional(),\n weight: weightSchema.optional(),\n});\n\n/**\n * Source manifest schema\n *\n * The source manifest (baton.source.yaml) defines a source repository that\n * contains one or more profiles in the profiles/ directory.\n *\n * The profiles array is optional - if omitted, profiles will be auto-discovered\n * by scanning the profiles/ directory for baton.profile.yaml files.\n */\n/**\n * AI section in source manifest — default AI tools for all profiles in this source\n */\nconst sourceAiSectionSchema = z\n .object({\n tools: z.array(z.string()).optional(),\n })\n .optional();\n\n/**\n * IDE section in source manifest — default IDE platforms for all profiles in this source\n */\nconst sourceIdeSectionSchema = z\n .object({\n platforms: z.array(z.string()).optional(),\n })\n .optional();\n\nexport const sourceManifestSchema = z.object({\n name: z.string().regex(KEBAB_CASE_REGEX, {\n message: \"Source name must be kebab-case (e.g., my-source)\",\n }),\n version: z.string().regex(SEMVER_REGEX, {\n message: \"Version must be a valid semver string (e.g., 1.0.0)\",\n }),\n description: z.string().optional(),\n repository: z.string().optional(),\n\n // Optional: Default AI tools for all profiles in this source (can be overridden by profiles)\n ai: sourceAiSectionSchema,\n\n // Optional: Default IDE platforms for all profiles in this source\n ide: sourceIdeSectionSchema,\n\n // Optional: Auto-discovered if omitted\n profiles: z.array(sourceProfileEntrySchema).optional(),\n\n metadata: z.record(z.string(), z.string()).optional(),\n});\n","import { z } from \"zod\";\nimport { weightSchema } from \"./source-manifest.js\";\n\n/**\n * Merge strategy types for file merging\n */\nexport const mergeStrategySchema = z.enum([\n \"replace\",\n \"deep\",\n \"append\",\n \"prepend\",\n \"skip\",\n \"prompt\",\n \"directory\",\n \"import\",\n]);\n\n/**\n * Scope for configuration items\n */\nexport const scopeSchema = z.enum([\"project\", \"global\"]);\n\n/**\n * Skill item in profile manifest\n */\nexport const skillItemSchema = z.object({\n name: z.string(),\n scope: scopeSchema,\n});\n\n/**\n * Rules in profile manifest - can be either an array or an object\n */\nconst rulesSchema = z.union([\n // Array format: universal rules\n z.array(z.string()),\n // Object format: keys are \"universal\" or any AI tool key (e.g., \"claude-code\", \"cursor\")\n z.record(z.string(), z.array(z.string()).optional()),\n]);\n\n/**\n * Agents in profile manifest - can be either an array or an object\n */\nconst agentsSchema = z.union([\n // Array format: universal agents\n z.array(z.string()),\n // Object format: keys are \"universal\" or any AI tool key (e.g., \"claude-code\", \"cursor\")\n z.record(z.string(), z.array(z.string()).optional()),\n]);\n\n/**\n * Memory file configuration item\n *\n * Convention: Use \"MEMORY.md\" as source for generic memory that will be\n * automatically transformed to target-specific filenames (CLAUDE.md, AGENTS.md, etc.)\n *\n * Or use explicit filenames (CLAUDE.md, AGENTS.md) for tool-specific memory.\n */\nconst memoryItemSchema = z.object({\n source: z.string(), // e.g., \"MEMORY.md\", \"CLAUDE.md\", \"AGENTS.md\"\n merge: mergeStrategySchema,\n});\n\n/**\n * Memory section in profile manifest - array of memory items\n */\nconst memorySectionSchema = z.array(memoryItemSchema).optional();\n\n/**\n * AI section in profile manifest\n */\nconst aiSectionSchema = z\n .object({\n tools: z.array(z.string()).optional(), // Target AI tools (e.g., [\"claude-code\", \"cursor\"])\n skills: z.array(skillItemSchema).optional(),\n rules: rulesSchema.optional(),\n agents: agentsSchema.optional(),\n memory: memorySectionSchema.optional(),\n commands: z.array(z.string()).optional(),\n })\n .optional();\n\n/**\n * File configuration item with optional target mapping\n */\nconst fileConfigItemSchema = z.object({\n source: z.string(), // e.g., \"biome.json\", \"company/policy.md\"\n target: z.string().optional(), // Optional target path. If not specified, uses source as target\n merge: mergeStrategySchema,\n});\n\n/**\n * Files section in profile manifest - array of file configurations\n */\nconst filesSectionSchema = z.array(fileConfigItemSchema).optional();\n\n/**\n * IDE section in profile manifest\n * Keys are IDE platform identifiers (e.g., vscode, jetbrains, zed, fleet)\n * Values are arrays of filenames to sync for that platform\n */\nconst ideSectionSchema = z.record(z.string(), z.array(z.string())).optional();\n\n/**\n * Profile manifest schema\n */\nimport { KEBAB_CASE_REGEX, SEMVER_REGEX } from \"./constants.js\";\nexport { KEBAB_CASE_REGEX } from \"./constants.js\";\n\nexport const profileManifestSchema = z.object({\n name: z.string().regex(KEBAB_CASE_REGEX, {\n message: \"Profile name must be kebab-case (e.g., my-profile)\",\n }),\n version: z.string().regex(SEMVER_REGEX, {\n message: \"Version must be a valid semver string (e.g., 1.0.0)\",\n }),\n description: z.string().optional(),\n extends: z\n .union([z.string(), z.array(z.string())])\n .transform((val) => (typeof val === \"string\" ? [val] : val))\n .optional(),\n weight: weightSchema.optional(),\n ai: aiSectionSchema,\n files: filesSectionSchema,\n ide: ideSectionSchema,\n variables: z.record(z.string(), z.string()).optional(),\n hooks: z\n .object({\n \"post-install\": z.string().optional(),\n \"post-update\": z.string().optional(),\n })\n .optional(),\n});\n\n/**\n * Inferred TypeScript type for profile manifest\n */\nexport type ProfileManifest = z.infer<typeof profileManifestSchema>;\n\n/**\n * Inferred types for nested structures\n */\nexport type MergeStrategy = z.infer<typeof mergeStrategySchema>;\n// Scope type is exported from @baton-dx/ai-tool-paths\nexport type SkillItem = z.infer<typeof skillItemSchema>;\n","import { z } from \"zod\";\nimport { scopeSchema } from \"./profile-manifest.js\";\n\n/**\n * Profile source with optional version\n */\nconst profileSourceSchema = z.object({\n source: z.string(), // e.g., \"github:org/repo\", \"./local/path\", \"https://git.example.com/repo.git\"\n version: z.string().optional(), // e.g., \"^1.0.0\", \"@v2.0\", \"@main\", \"latest\"\n});\n\n/**\n * Extras section for individual skills and agents\n */\nconst extrasSectionSchema = z\n .object({\n skills: z\n .array(\n z.object({\n source: z.string(),\n scope: scopeSchema,\n }),\n )\n .optional(),\n })\n .optional();\n\n/**\n * Overrides section - flexible object for tooling and AI overrides\n */\nconst overridesSectionSchema = z.record(z.unknown()).optional();\n\n/**\n * Project manifest schema (baton.yaml)\n */\nexport const projectManifestSchema = z.object({\n profiles: z.array(profileSourceSchema),\n extras: extrasSectionSchema,\n overrides: overridesSectionSchema,\n variables: z.record(z.string(), z.string()).optional(),\n /** Whether baton-managed files should be added to .gitignore (defaults to true when absent) */\n gitignore: z.boolean().optional(),\n});\n\n/**\n * Inferred TypeScript type for project manifest\n */\nexport type ProjectManifest = z.infer<typeof projectManifestSchema>;\n","import { z } from \"zod\";\n\n// Canonical config type for lockfile integrity entries\nconst configTypeEnum = z.enum([\"skills\", \"rules\", \"agents\", \"memory\", \"commands\", \"files\", \"ide\"]);\n\n// Schema for file metadata in lockfile integrity entries\n// Each entry is annotated with its SHA-256 hash and canonical config type\nconst fileMetadataSchema = z.object({\n hash: z.string().describe(\"SHA-256 hash of the source content (before tool transformation)\"),\n type: configTypeEnum.optional().describe(\"Canonical config type (e.g., 'skills', 'memory')\"),\n // Legacy fields — kept for backward-compatible reading of old lockfiles\n tool: z.string().optional().describe(\"(Legacy) Tool key this file belongs to\"),\n category: z\n .enum([\"ai\", \"ide\", \"files\"])\n .optional()\n .describe(\"(Legacy) Category of the placed file\"),\n});\n\n// Backward-compatible integrity entry: accepts either a plain hash string or a metadata object\n// Plain strings are transformed to { hash: string } for uniform access\nconst integrityEntrySchema = z.union([\n z.string().transform((hash) => ({ hash, type: undefined, tool: undefined, category: undefined })),\n fileMetadataSchema,\n]);\n\n// Schema for package integrity — maps file paths to their metadata\nconst integritySchema = z.record(z.string(), integrityEntrySchema);\n\n// Schema for a single locked package entry\nconst lockedPackageSchema = z.object({\n source: z.string().describe(\"Original source URL/path\"),\n resolved: z.string().describe(\"Resolved Git URL or filesystem path\"),\n version: z.string().describe(\"Version tag, branch, or commit SHA\"),\n sha: z.string().describe(\"Git commit SHA or filesystem integrity hash\"),\n integrity: integritySchema.describe(\n \"Canonical file metadata with SHA-256 hashes of source content\",\n ),\n});\n\n// Schema for the complete lockfile\nexport const lockfileSchema = z.object({\n locked_at: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/, {\n message: \"locked_at must be an ISO 8601 datetime string\",\n })\n .describe(\"ISO 8601 timestamp when lockfile was generated\"),\n packages: z\n .record(z.string(), lockedPackageSchema)\n .describe(\"Locked package data keyed by package name\"),\n});\n\n// Exported types\nexport type LockFile = z.infer<typeof lockfileSchema>;\nexport type LockedPackage = z.infer<typeof lockedPackageSchema>;\nexport type FileMetadata = z.infer<typeof fileMetadataSchema>;\nexport type LockfileConfigType = z.infer<typeof configTypeEnum>;\n","import { readFile } from \"node:fs/promises\";\nimport { parse } from \"yaml\";\nimport type { ZodTypeAny, infer as zInfer } from \"zod\";\nimport { FileNotFoundError, ManifestValidationError } from \"../errors.js\";\n\nfunction isErrnoException(error: unknown): error is NodeJS.ErrnoException {\n return error instanceof Error && \"code\" in error;\n}\nimport type { LockFile } from \"../schemas/lockfile.js\";\nimport { lockfileSchema } from \"../schemas/lockfile.js\";\nimport type { ProfileManifest } from \"../schemas/profile-manifest.js\";\nimport { profileManifestSchema } from \"../schemas/profile-manifest.js\";\nimport type { ProjectManifest } from \"../schemas/project-manifest.js\";\nimport { projectManifestSchema } from \"../schemas/project-manifest.js\";\n\n/**\n * Generic helper to load a YAML file, parse it, and validate against a Zod schema\n */\nasync function loadAndValidateYaml<S extends ZodTypeAny>(\n filePath: string,\n schema: S,\n entityName: string,\n): Promise<zInfer<S>> {\n try {\n const content = await readFile(filePath, \"utf-8\");\n const data = parse(content);\n\n const result = schema.safeParse(data);\n if (!result.success) {\n const errorMessages = result.error.errors\n .map(\n (err: { path: Array<string | number>; message: string }) =>\n `${err.path.join(\".\")}: ${err.message}`,\n )\n .join(\"; \");\n throw new ManifestValidationError(`Invalid ${entityName}: ${errorMessages}`);\n }\n\n return result.data;\n } catch (error) {\n if (isErrnoException(error) && error.code === \"ENOENT\") {\n throw new FileNotFoundError(`${entityName} not found: ${filePath}`);\n }\n if (error instanceof ManifestValidationError) {\n throw error;\n }\n throw new ManifestValidationError(\n `Failed to parse ${entityName}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\n/**\n * Loads and validates a profile manifest from a YAML file\n */\nexport async function loadProfileManifest(filePath: string): Promise<ProfileManifest> {\n // Pre-validation: detect common schema mistakes before Zod strips unknown keys\n try {\n const content = await readFile(filePath, \"utf-8\");\n const raw = parse(content);\n if (raw && typeof raw === \"object\" && \"tools\" in raw && !raw.ai?.tools) {\n console.warn(\n `Warning: \"${filePath}\" has top-level \"tools:\" — this is ignored. Move it under \"ai:\" section:\\n\\nai:\\n tools:\\n - ...\\n`,\n );\n }\n } catch {\n // Ignore pre-validation errors — loadAndValidateYaml handles them properly\n }\n return loadAndValidateYaml(filePath, profileManifestSchema, \"profile manifest\");\n}\n\n/**\n * Loads and validates a project manifest from a YAML file\n */\nexport async function loadProjectManifest(filePath: string): Promise<ProjectManifest> {\n return loadAndValidateYaml(filePath, projectManifestSchema, \"project manifest\");\n}\n\n/**\n * Loads and validates a lockfile from a YAML file\n */\nexport async function loadLockfile(filePath: string): Promise<LockFile> {\n return loadAndValidateYaml(filePath, lockfileSchema, \"lockfile\");\n}\n","import { SourceParseError } from \"../errors.js\";\n\n/**\n * Parsed source object representing where to fetch a profile from\n */\nexport type ParsedSource =\n | {\n provider: \"github\";\n org: string;\n repo: string;\n subpath?: string;\n ref?: string;\n url: string;\n }\n | {\n provider: \"gitlab\";\n org: string;\n repo: string;\n subpath?: string;\n ref?: string;\n url: string;\n }\n | {\n provider: \"local\";\n path: string;\n }\n | {\n provider: \"git\";\n url: string;\n ref?: string;\n }\n | {\n provider: \"file\";\n path: string;\n }\n | {\n provider: \"npm\";\n package: string;\n scope?: string;\n subpath?: string;\n };\n\n/**\n * Parse various source URL formats into a normalized source object\n *\n * Supports:\n * - github:org/repo\n * - github:org/repo/subpath\n * - github:org/repo@v2.0\n * - github:org/repo@main\n * - gitlab:org/repo\n * - file:path/to/profile (relative or absolute)\n * - npm:package or npm:@scope/package\n * - npm:package/subpath\n * - ./local/path\n * - https://git.example.com/repo.git\n *\n * @param source - Source string to parse\n * @returns Parsed source object with provider, org, repo, url, etc.\n * @throws SourceParseError if the source format is invalid\n */\nexport function parseSource(source: string): ParsedSource {\n // Trim whitespace\n const trimmed = source.trim();\n\n if (!trimmed) {\n throw new SourceParseError(\"Source string cannot be empty\");\n }\n\n // Local path (starts with ./ or ../ or /)\n if (trimmed.startsWith(\"./\") || trimmed.startsWith(\"../\") || trimmed.startsWith(\"/\")) {\n return {\n provider: \"local\",\n path: trimmed,\n };\n }\n\n // GitHub shorthand: github:org/repo[@ref][/subpath]\n if (trimmed.startsWith(\"github:\")) {\n const withoutPrefix = trimmed.slice(7); // Remove \"github:\"\n return parseGitProvider(\"github\", withoutPrefix);\n }\n\n // GitLab shorthand: gitlab:org/repo[@ref][/subpath]\n if (trimmed.startsWith(\"gitlab:\")) {\n const withoutPrefix = trimmed.slice(7); // Remove \"gitlab:\"\n return parseGitProvider(\"gitlab\", withoutPrefix);\n }\n\n // File path: file:path/to/profile\n if (trimmed.startsWith(\"file:\")) {\n const path = trimmed.slice(5); // Remove \"file:\"\n if (!path) {\n throw new SourceParseError(\"Invalid file source: missing path\");\n }\n return {\n provider: \"file\",\n path,\n };\n }\n\n // NPM package: npm:[@scope/]package[/subpath]\n if (trimmed.startsWith(\"npm:\")) {\n const withoutPrefix = trimmed.slice(4); // Remove \"npm:\"\n return parseNpmPackage(withoutPrefix);\n }\n\n // Full Git URL: https://... or git@...\n if (trimmed.startsWith(\"https://\") || trimmed.startsWith(\"git@\")) {\n return {\n provider: \"git\",\n url: trimmed,\n };\n }\n\n throw new SourceParseError(\n `Invalid source format: \"${source}\". Expected formats: github:org/repo, gitlab:org/repo, file:path, npm:package, ./local/path, or https://git.example.com/repo.git`,\n );\n}\n\n/**\n * Parse GitHub or GitLab shorthand format\n * Format: org/repo[@ref][/subpath]\n */\nfunction parseGitProvider(\n provider: \"github\" | \"gitlab\",\n input: string,\n): Extract<ParsedSource, { provider: \"github\" | \"gitlab\" }> {\n // Split by @ to extract ref if present\n const [pathPart, ref] = input.split(\"@\");\n\n if (!pathPart) {\n throw new SourceParseError(`Invalid ${provider} source: missing org/repo`);\n }\n\n // Split path by / to extract org, repo, and optional subpath\n const parts = pathPart.split(\"/\");\n\n if (parts.length < 2) {\n throw new SourceParseError(`Invalid ${provider} source: expected format org/repo`);\n }\n\n const [org, repo, ...subpathParts] = parts;\n\n if (!org || !repo) {\n throw new SourceParseError(`Invalid ${provider} source: org and repo cannot be empty`);\n }\n\n const baseUrl = provider === \"github\" ? \"https://github.com\" : \"https://gitlab.com\";\n const url = `${baseUrl}/${org}/${repo}.git`;\n\n const result: Extract<ParsedSource, { provider: \"github\" | \"gitlab\" }> = {\n provider,\n org,\n repo,\n url,\n };\n\n if (subpathParts.length > 0) {\n result.subpath = subpathParts.join(\"/\");\n }\n\n if (ref) {\n result.ref = ref;\n }\n\n return result;\n}\n\n/**\n * Parse NPM package format\n * Format: [@scope/]package[/subpath]\n */\nfunction parseNpmPackage(input: string): Extract<ParsedSource, { provider: \"npm\" }> {\n if (!input) {\n throw new SourceParseError(\"Invalid npm source: missing package name\");\n }\n\n // Handle scoped packages: @scope/package[/subpath]\n if (input.startsWith(\"@\")) {\n const parts = input.split(\"/\");\n\n if (parts.length < 2) {\n throw new SourceParseError(\n \"Invalid npm source: scoped package must have format @scope/package\",\n );\n }\n\n const scope = parts[0]; // @scope\n const packageName = parts[1];\n const subpathParts = parts.slice(2);\n\n if (!scope || !packageName) {\n throw new SourceParseError(\"Invalid npm source: scope and package name cannot be empty\");\n }\n\n const result: Extract<ParsedSource, { provider: \"npm\" }> = {\n provider: \"npm\",\n package: `${scope}/${packageName}`,\n scope: scope.slice(1), // Remove @ prefix for scope field\n };\n\n if (subpathParts.length > 0) {\n result.subpath = subpathParts.join(\"/\");\n }\n\n return result;\n }\n\n // Handle non-scoped packages: package[/subpath]\n const parts = input.split(\"/\");\n const packageName = parts[0];\n const subpathParts = parts.slice(1);\n\n if (!packageName) {\n throw new SourceParseError(\"Invalid npm source: package name cannot be empty\");\n }\n\n const result: Extract<ParsedSource, { provider: \"npm\" }> = {\n provider: \"npm\",\n package: packageName,\n };\n\n if (subpathParts.length > 0) {\n result.subpath = subpathParts.join(\"/\");\n }\n\n return result;\n}\n","import { parse } from \"yaml\";\n\n/**\n * Parsed frontmatter result\n */\nexport interface ParsedFrontmatter {\n /** Parsed YAML data */\n data: Record<string, unknown>;\n /** Content after frontmatter */\n content: string;\n}\n\n/**\n * Parse YAML frontmatter from a markdown string.\n * Expects the standard `---` delimited format.\n *\n * @param raw - Raw markdown string (may or may not contain frontmatter)\n * @returns Parsed frontmatter data and remaining content\n */\nexport function parseFrontmatter(raw: string): ParsedFrontmatter {\n const trimmed = raw.trimStart();\n\n if (!trimmed.startsWith(\"---\")) {\n return { data: {}, content: raw };\n }\n\n // Find closing ---\n const endIndex = trimmed.indexOf(\"\\n---\", 3);\n if (endIndex === -1) {\n return { data: {}, content: raw };\n }\n\n const yamlBlock = trimmed.slice(4, endIndex);\n const content = trimmed.slice(endIndex + 4).trimStart();\n\n try {\n const data = parse(yamlBlock);\n return {\n data: typeof data === \"object\" && data !== null ? data : {},\n content,\n };\n } catch {\n // Invalid YAML - return raw content\n return { data: {}, content: raw };\n }\n}\n","import { getAIToolPath } from \"@baton-dx/ai-tool-paths\";\nimport type { ConfigType, Scope } from \"@baton-dx/ai-tool-paths\";\n\nimport type {\n AIToolAdapter,\n AgentFile,\n CommandFile,\n MemoryFile,\n RuleFile,\n SkillDir,\n ValidationResult,\n} from \"./types.js\";\n\n/**\n * Base adapter with default implementations for the AIToolAdapter interface.\n *\n * Provides:\n * - isInstalled() via detectInstalledAITools()\n * - getPath() via getAIToolPath()\n * - getLegacyPaths() returns []\n * - transform*() passthrough (return input unchanged)\n * - transformMemory() converts MEMORY.md to this.memoryFilename\n * - validate() with common type-specific validation\n *\n * Subclasses only need to define `key` and `name`.\n * Override `memoryFilename` for tools that don't use AGENTS.md.\n */\nexport abstract class BaseAIToolAdapter implements AIToolAdapter {\n abstract readonly key: string;\n abstract readonly name: string;\n\n /** Memory filename this tool uses. Override for non-AGENTS.md tools. */\n protected memoryFilename = \"AGENTS.md\";\n\n async isInstalled(): Promise<boolean> {\n try {\n const { detectInstalledAITools } = await import(\"../detection/ai-tool-detection.js\");\n const installed = await detectInstalledAITools();\n return installed.includes(this.key);\n } catch {\n return false;\n }\n }\n\n getPath(type: ConfigType, scope: Scope, name: string): string {\n return getAIToolPath(this.key, type, scope, name);\n }\n\n getLegacyPaths(_type: ConfigType): string[] {\n return [];\n }\n\n transformSkill(skill: SkillDir): SkillDir {\n return skill;\n }\n\n transformRule(rule: RuleFile): RuleFile {\n return rule;\n }\n\n transformAgent(agent: AgentFile): AgentFile {\n return agent;\n }\n\n transformMemory(memory: MemoryFile): MemoryFile {\n if (memory.filename === \"MEMORY.md\") {\n return {\n ...memory,\n filename: this.memoryFilename,\n };\n }\n return memory;\n }\n\n transformCommand(command: CommandFile): CommandFile {\n return command;\n }\n\n validate(type: ConfigType, file: unknown): ValidationResult {\n return this.validateCommon(type, file);\n }\n\n /**\n * Common validation logic shared across adapters.\n * Checks required fields for each config type.\n */\n protected validateCommon(type: ConfigType, file: unknown): ValidationResult {\n const errors: string[] = [];\n\n if (typeof file !== \"object\" || file === null) {\n errors.push(`${type} must be a valid object`);\n return { valid: false, errors };\n }\n\n // Safe to access properties via record after object check\n const record = file as Record<string, unknown>;\n\n switch (type) {\n case \"skills\": {\n if (!record.name) errors.push(\"Skill must have a name\");\n if (!record.skillFile) errors.push(\"Skill must have a SKILL.md file\");\n break;\n }\n\n case \"rules\": {\n if (!record.name) errors.push(\"Rule must have a name\");\n if (!record.content) errors.push(\"Rule must have content\");\n break;\n }\n\n case \"agents\": {\n if (!record.name) errors.push(\"Agent must have a name\");\n const fm = record.frontmatter as Record<string, unknown> | undefined;\n if (!fm?.name) errors.push(\"Agent must have frontmatter with name field\");\n break;\n }\n\n case \"memory\": {\n if (!record.filename) errors.push(\"Memory file must have a filename\");\n if (!record.content) errors.push(\"Memory file must have content\");\n break;\n }\n\n case \"commands\": {\n if (!record.name) errors.push(\"Command must have a name\");\n if (!record.content) errors.push(\"Command must have content\");\n break;\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n}\n","import { BaseAIToolAdapter } from \"./base-adapter.js\";\n\n/**\n * Amp adapter — uses canonical formats with AGENTS.md for memory.\n * Project paths: .agents/ | Global paths: ~/.config/agents/\n */\nexport class AmpAdapter extends BaseAIToolAdapter {\n readonly key = \"amp\";\n readonly name = \"Amp\";\n}\n","import type { ConfigType } from \"@baton-dx/ai-tool-paths\";\nimport { BaseAIToolAdapter } from \"./base-adapter.js\";\nimport type { ValidationResult } from \"./types.js\";\n\n/**\n * Antigravity adapter — Gemini-based AI tool.\n *\n * Uses GEMINI.md for memory. Custom validate() adds memory filename check.\n * Paths: .agent/skills/, .agent/rules/, .agent/agents/, .agent/workflows/\n */\nexport class AntigravityAdapter extends BaseAIToolAdapter {\n readonly key = \"antigravity\";\n readonly name = \"Antigravity\";\n protected override memoryFilename = \"GEMINI.md\";\n\n override validate(type: ConfigType, file: unknown): ValidationResult {\n const result = this.validateCommon(type, file);\n\n if (type === \"memory\") {\n const memory = file as { filename?: string };\n if (memory.filename && memory.filename !== \"GEMINI.md\") {\n result.errors.push(\"Memory file must be named GEMINI.md for Antigravity\");\n result.valid = false;\n }\n }\n\n return result;\n }\n}\n","import { BaseAIToolAdapter } from \"./base-adapter.js\";\n\n/**\n * Claude Code adapter — reference implementation for AIToolAdapter interface.\n *\n * Uses canonical formats:\n * - Skills: 1:1 copy (SKILL.md with optional scripts/)\n * - Rules: .md with optional YAML frontmatter (paths:)\n * - Agents: .md with full YAML frontmatter\n * - Memory: CLAUDE.md or .claude/CLAUDE.md\n * - Commands: .claude/commands/{name}.md\n */\nexport class ClaudeCodeAdapter extends BaseAIToolAdapter {\n readonly key = \"claude-code\";\n readonly name = \"Claude Code\";\n protected override memoryFilename = \"CLAUDE.md\";\n}\n","import { BaseAIToolAdapter } from \"./base-adapter.js\";\n\n/**\n * Cline adapter — uses canonical formats with AGENTS.md for memory.\n * Project paths: .cline/ | Global paths: ~/.cline/\n */\nexport class ClineAdapter extends BaseAIToolAdapter {\n readonly key = \"cline\";\n readonly name = \"Cline\";\n}\n","import type { ConfigType } from \"@baton-dx/ai-tool-paths\";\nimport { BaseAIToolAdapter } from \"./base-adapter.js\";\nimport type { ValidationResult } from \"./types.js\";\n\n/**\n * Codex CLI adapter.\n *\n * Uses AGENTS.md for memory. Custom validate() adds memory filename check.\n * Settings use TOML format (config.toml), not JSON.\n */\nexport class CodexAdapter extends BaseAIToolAdapter {\n readonly key = \"codex\";\n readonly name = \"Codex CLI\";\n\n override validate(type: ConfigType, file: unknown): ValidationResult {\n const result = this.validateCommon(type, file);\n\n if (type === \"memory\") {\n const memory = file as { filename?: string };\n if (memory.filename && memory.filename !== \"AGENTS.md\") {\n result.errors.push(\"Memory file must be named AGENTS.md for Codex\");\n result.valid = false;\n }\n }\n\n return result;\n }\n}\n","import type { ConfigType } from \"@baton-dx/ai-tool-paths\";\nimport { parseFrontmatter } from \"../utils/frontmatter.js\";\nimport { BaseAIToolAdapter } from \"./base-adapter.js\";\nimport type { RuleFile, ValidationResult } from \"./types.js\";\n\n/**\n * Cursor adapter — transforms rules to .mdc format.\n *\n * Overrides:\n * - getLegacyPaths(): .cursorrules\n * - transformRule(): converts to .mdc with description, globs, alwaysApply\n * - validate(): adds Cursor-specific rules + memory checks\n */\nexport class CursorAdapter extends BaseAIToolAdapter {\n readonly key = \"cursor\";\n readonly name = \"Cursor\";\n\n override getLegacyPaths(type: ConfigType): string[] {\n if (type === \"rules\") {\n return [\".cursorrules\"];\n }\n return [];\n }\n\n override transformRule(rule: RuleFile): RuleFile {\n const { name, content, frontmatter } = rule;\n\n const description = frontmatter?.description || this.extractDescription(content);\n const paths = frontmatter?.paths as string[] | undefined;\n\n const mdcFrontmatter: Record<string, unknown> = { description };\n\n if (paths && paths.length > 0) {\n mdcFrontmatter.globs = paths;\n }\n\n if (!paths || paths.length === 0) {\n mdcFrontmatter.alwaysApply = true;\n }\n\n const strippedContent = parseFrontmatter(content).content;\n const frontmatterYaml = this.buildFrontmatter(mdcFrontmatter);\n\n return {\n name,\n content: `${frontmatterYaml}\\n${strippedContent}`,\n frontmatter: mdcFrontmatter,\n };\n }\n\n override validate(type: ConfigType, file: unknown): ValidationResult {\n const result = this.validateCommon(type, file);\n\n if (type === \"rules\") {\n const rule = file as RuleFile;\n if (rule.frontmatter && !rule.frontmatter.description) {\n result.errors.push(\"Cursor rule must have a description in frontmatter\");\n result.valid = false;\n }\n }\n\n if (type === \"memory\") {\n const memory = file as { filename?: string };\n if (memory.filename && memory.filename !== \"AGENTS.md\") {\n result.errors.push(\"Cursor memory file should be AGENTS.md\");\n result.valid = false;\n }\n }\n\n return result;\n }\n\n private extractDescription(content: string): string {\n const stripped = parseFrontmatter(content).content;\n const lines = stripped.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith(\"#\")) {\n return trimmed;\n }\n }\n return \"Rule\";\n }\n\n private buildFrontmatter(obj: Record<string, unknown>): string {\n const lines = [\"---\"];\n\n for (const [key, value] of Object.entries(obj)) {\n if (Array.isArray(value)) {\n lines.push(`${key}:`);\n for (const item of value) {\n lines.push(` - \"${item}\"`);\n }\n } else if (typeof value === \"string\") {\n lines.push(`${key}: \"${value}\"`);\n } else {\n lines.push(`${key}: ${value}`);\n }\n }\n\n lines.push(\"---\");\n return lines.join(\"\\n\");\n }\n}\n","import { BaseAIToolAdapter } from \"./base-adapter.js\";\n\n/**\n * GitHub Copilot adapter — uses copilot-instructions.md for memory.\n * Memory path: .github/copilot-instructions.md\n */\nexport class GitHubCopilotAdapter extends BaseAIToolAdapter {\n readonly key = \"github-copilot\";\n readonly name = \"GitHub Copilot\";\n protected override memoryFilename = \"copilot-instructions.md\";\n}\n","import { BaseAIToolAdapter } from \"./base-adapter.js\";\n\n/**\n * Junie adapter — uses canonical formats with AGENTS.md for memory.\n * Project paths: .junie/ | Global paths: ~/.junie/\n */\nexport class JunieAdapter extends BaseAIToolAdapter {\n readonly key = \"junie\";\n readonly name = \"Junie\";\n}\n","import { BaseAIToolAdapter } from \"./base-adapter.js\";\n\n/**\n * Kiro adapter — uses canonical formats with AGENTS.md for memory.\n * Project paths: .kiro/ | Global paths: ~/.kiro/\n */\nexport class KiroAdapter extends BaseAIToolAdapter {\n readonly key = \"kiro\";\n readonly name = \"Kiro\";\n}\n","import { BaseAIToolAdapter } from \"./base-adapter.js\";\n\n/**\n * OpenCode adapter — uses canonical formats with AGENTS.md for memory.\n * Global paths: ~/.config/opencode/ (XDG Base Directory)\n */\nexport class OpenCodeAdapter extends BaseAIToolAdapter {\n readonly key = \"opencode\";\n readonly name = \"OpenCode\";\n}\n","import { BaseAIToolAdapter } from \"./base-adapter.js\";\n\n/**\n * Roo adapter — uses canonical formats with AGENTS.md for memory.\n * Project paths: .roo/ | Global paths: ~/.roo/\n */\nexport class RooAdapter extends BaseAIToolAdapter {\n readonly key = \"roo\";\n readonly name = \"Roo\";\n}\n","import { BaseAIToolAdapter } from \"./base-adapter.js\";\n\n/**\n * Trae adapter — uses canonical formats with AGENTS.md for memory.\n * Project paths: .trae/ | Global paths: ~/.trae/\n */\nexport class TraeAdapter extends BaseAIToolAdapter {\n readonly key = \"trae\";\n readonly name = \"Trae\";\n}\n","import type { ConfigType } from \"@baton-dx/ai-tool-paths\";\nimport { parseFrontmatter } from \"../utils/frontmatter.js\";\nimport { BaseAIToolAdapter } from \"./base-adapter.js\";\nimport type { RuleFile, ValidationResult } from \"./types.js\";\n\n/**\n * Windsurf adapter — strips YAML frontmatter from rules.\n *\n * Overrides:\n * - getLegacyPaths(): .windsurfrules\n * - transformRule(): removes all YAML frontmatter\n * - validate(): adds Windsurf-specific rules + memory checks\n */\nexport class WindsurfAdapter extends BaseAIToolAdapter {\n readonly key = \"windsurf\";\n readonly name = \"Windsurf\";\n\n override getLegacyPaths(type: ConfigType): string[] {\n if (type === \"rules\") {\n return [\".windsurfrules\"];\n }\n return [];\n }\n\n override transformRule(rule: RuleFile): RuleFile {\n const { name, content } = rule;\n const strippedContent = parseFrontmatter(content).content.trim();\n\n return {\n name,\n content: strippedContent,\n frontmatter: undefined,\n };\n }\n\n override validate(type: ConfigType, file: unknown): ValidationResult {\n const result = this.validateCommon(type, file);\n\n if (type === \"rules\") {\n const rule = file as RuleFile;\n if (rule.frontmatter) {\n result.errors.push(\"Windsurf rules should not have YAML frontmatter\");\n result.valid = false;\n }\n }\n\n if (type === \"memory\") {\n const memory = file as { filename?: string };\n if (memory.filename && memory.filename !== \"AGENTS.md\") {\n result.errors.push(\"Windsurf memory file should be AGENTS.md\");\n result.valid = false;\n }\n }\n\n return result;\n }\n}\n","import { BaseAIToolAdapter } from \"./base-adapter.js\";\n\n/**\n * Zed adapter — uses canonical formats with AGENTS.md for memory.\n * Project paths: .zed/ | Global paths: ~/.zed/\n */\nexport class ZedAdapter extends BaseAIToolAdapter {\n readonly key = \"zed\";\n readonly name = \"Zed\";\n}\n","import { AIToolAdapterNotFoundError } from \"../errors.js\";\nimport { AmpAdapter } from \"./amp.js\";\nimport { AntigravityAdapter } from \"./antigravity.js\";\nimport { ClaudeCodeAdapter } from \"./claude-code.js\";\nimport { ClineAdapter } from \"./cline.js\";\nimport { CodexAdapter } from \"./codex.js\";\nimport { CursorAdapter } from \"./cursor.js\";\nimport { GitHubCopilotAdapter } from \"./github-copilot.js\";\nimport { JunieAdapter } from \"./junie.js\";\nimport { KiroAdapter } from \"./kiro.js\";\nimport { OpenCodeAdapter } from \"./opencode.js\";\nimport { RooAdapter } from \"./roo.js\";\nimport { TraeAdapter } from \"./trae.js\";\nimport type { AIToolAdapter } from \"./types.js\";\nimport { WindsurfAdapter } from \"./windsurf.js\";\nimport { ZedAdapter } from \"./zed.js\";\n\n/**\n * Registry of all tool adapters\n * Singleton instances are created lazily on first access\n */\nconst aiToolAdapterInstances = new Map<string, AIToolAdapter>();\n\n/**\n * Initialize all adapters\n */\nfunction initializeAIToolAdapters(): void {\n if (aiToolAdapterInstances.size > 0) return; // Already initialized\n\n const adapters: AIToolAdapter[] = [\n new ClaudeCodeAdapter(),\n new CursorAdapter(),\n new WindsurfAdapter(),\n new CodexAdapter(),\n new AntigravityAdapter(),\n new GitHubCopilotAdapter(),\n new OpenCodeAdapter(),\n new AmpAdapter(),\n new KiroAdapter(),\n new ZedAdapter(),\n new ClineAdapter(),\n new RooAdapter(),\n new JunieAdapter(),\n new TraeAdapter(),\n ];\n\n for (const adapter of adapters) {\n aiToolAdapterInstances.set(adapter.key, adapter);\n }\n}\n\n/**\n * Get adapter instance by tool key\n * @param toolKey - Tool key (e.g., 'claude-code', 'cursor')\n * @returns Adapter instance\n * @throws AIToolAdapterNotFoundError if adapter is not registered\n */\nexport function getAIToolAdapter(toolKey: string): AIToolAdapter {\n initializeAIToolAdapters();\n\n const adapter = aiToolAdapterInstances.get(toolKey);\n if (!adapter) {\n throw new AIToolAdapterNotFoundError(\n `Adapter not found for tool: ${toolKey}. Available adapters: ${Array.from(aiToolAdapterInstances.keys()).join(\", \")}`,\n );\n }\n\n return adapter;\n}\n\n/**\n * Get all registered adapters\n * @returns Array of all adapter instances\n */\nexport function getAllAIToolAdapters(): AIToolAdapter[] {\n initializeAIToolAdapters();\n return Array.from(aiToolAdapterInstances.values());\n}\n\n/**\n * Get adapters for the given tool keys\n * @param keys - Array of tool keys\n * @returns Array of adapter instances\n */\nexport function getAIToolAdaptersForKeys(keys: string[]): AIToolAdapter[] {\n return keys.map((key) => getAIToolAdapter(key));\n}\n","/**\n * Central IDE platform registry.\n *\n * Maps IDE platform identifiers (used in baton.profile.yaml `ide:` keys)\n * to their target directories in the project root.\n */\n\nimport type { DetectionConfig } from \"@baton-dx/ai-tool-paths\";\n\nexport interface IdePlatformEntry {\n targetDir: string;\n /** Structured detection configuration using OR-of-ANDs logic */\n detectionConfig: DetectionConfig;\n}\n\n/**\n * Registry of known IDE platforms and their target directories.\n *\n * Keys are the platform identifiers used in profile manifests (e.g., `ide.vscode`).\n * Values contain the target directory relative to the project root.\n */\nexport const idePlatformRegistry: Record<string, IdePlatformEntry> = {\n vscode: {\n targetDir: \".vscode\",\n detectionConfig: {\n groups: [\n [{ type: \"binary\", name: \"code\" }],\n [{ type: \"app\", name: \"Visual Studio Code.app\" }],\n [{ type: \"directory\", path: \"~/.vscode/\", markerFile: \"extensions\" }],\n ],\n },\n },\n jetbrains: {\n targetDir: \".idea\",\n detectionConfig: {\n groups: [\n [{ type: \"binary\", name: \"idea\" }],\n [\n {\n type: \"directory\",\n path: \"~/.config/JetBrains/\",\n platforms: [\"linux\"],\n },\n ],\n [\n {\n type: \"directory\",\n path: \"~/Library/Application Support/JetBrains/\",\n platforms: [\"darwin\"],\n },\n ],\n ],\n },\n },\n cursor: {\n targetDir: \".cursor\",\n detectionConfig: {\n groups: [\n [{ type: \"binary\", name: \"cursor\" }],\n [{ type: \"app\", name: \"Cursor.app\" }],\n [{ type: \"directory\", path: \"~/.cursor/\", markerFile: \"extensions\" }],\n ],\n },\n },\n windsurf: {\n targetDir: \".windsurf\",\n detectionConfig: {\n groups: [\n [{ type: \"binary\", name: \"windsurf\" }],\n [{ type: \"app\", name: \"Windsurf.app\" }],\n [\n {\n type: \"directory\",\n path: \"~/.windsurf/\",\n markerFile: \"extensions\",\n },\n ],\n ],\n },\n },\n antigravity: {\n targetDir: \".antigravity\",\n detectionConfig: {\n groups: [\n [{ type: \"binary\", name: \"agy\" }],\n [{ type: \"binary\", name: \"antigravity\" }],\n [{ type: \"app\", name: \"Antigravity.app\" }],\n ],\n },\n },\n zed: {\n targetDir: \".config/zed\",\n detectionConfig: {\n groups: [\n [{ type: \"binary\", name: \"zed\" }],\n [{ type: \"app\", name: \"Zed.app\" }],\n [\n {\n type: \"directory\",\n path: \"~/.config/zed/\",\n markerFile: \"settings.json\",\n },\n ],\n ],\n },\n },\n};\n\n/**\n * Get the target directory for an IDE platform key.\n * Returns undefined if the key is not in the registry.\n */\nexport function getIdePlatformTargetDir(ideKey: string): string | undefined {\n return idePlatformRegistry[ideKey]?.targetDir;\n}\n\n/**\n * Check if an IDE platform key is registered.\n */\nexport function isKnownIdePlatform(ideKey: string): boolean {\n return ideKey in idePlatformRegistry;\n}\n\n/**\n * Get all registered IDE platform keys.\n */\nexport function getRegisteredIdePlatforms(): string[] {\n return Object.keys(idePlatformRegistry);\n}\n","import { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getAllAIToolAdapters } from \"../adapters/registry.js\";\nimport { getIdePlatformTargetDir, getRegisteredIdePlatforms } from \"../ide/platform-registry.js\";\n\n/**\n * Extract directory from a dynamic path and add it as a pattern.\n * For static paths (no `_probe` placeholder resolved), adds the file itself.\n *\n * E.g. \".claude/commands/_probe.md\" -> \".claude/commands/\" (dynamic)\n * E.g. \".github/copilot-instructions.md\" -> \".github/copilot-instructions.md\" (static)\n */\nfunction addDirPattern(patterns: Set<string>, path: string): void {\n const lastSlash = path.lastIndexOf(\"/\");\n if (lastSlash > 0) {\n if (path.includes(\"_probe\")) {\n patterns.add(path.substring(0, lastSlash + 1));\n } else {\n // Static path (no {name} placeholder) — add the file itself, not the parent dir\n patterns.add(path);\n }\n }\n}\n\n/**\n * Add a path pattern. Dynamic paths (containing `_probe`) are reduced to their\n * directory; static paths and root-level files are added as-is.\n *\n * E.g. \".claude/rules/_probe.md\" -> \".claude/rules/\" (dynamic)\n * E.g. \".github/copilot-instructions.md\" -> \".github/copilot-instructions.md\" (static)\n * E.g. \"CLAUDE.md\" -> \"CLAUDE.md\" (root file)\n */\nfunction addPathPattern(patterns: Set<string>, path: string): void {\n const lastSlash = path.lastIndexOf(\"/\");\n if (lastSlash > 0) {\n if (path.includes(\"_probe\")) {\n patterns.add(path.substring(0, lastSlash + 1));\n } else {\n // Static path (e.g. .github/copilot-instructions.md) — add the file itself\n patterns.add(path);\n }\n } else if (path) {\n patterns.add(path);\n }\n}\n\n/**\n * Ensures `.baton/` is listed in the project's .gitignore.\n *\n * Uses the same \"# Baton local\" format as `baton init`.\n * Idempotent: no-op if `.baton/` is already present (by any mechanism).\n */\nexport async function ensureBatonDirGitignored(projectRoot: string): Promise<void> {\n const gitignorePath = join(projectRoot, \".gitignore\");\n\n let content = \"\";\n try {\n content = await readFile(gitignorePath, \"utf-8\");\n } catch {\n // .gitignore doesn't exist yet\n }\n\n if (content.includes(\".baton/\")) {\n return;\n }\n\n const newContent = content\n ? `${content.trimEnd()}\\n\\n# Baton local\\n.baton/\\n`\n : \"# Baton local\\n.baton/\\n\";\n await writeFile(gitignorePath, newContent, \"utf-8\");\n}\n\nconst BATON_SECTION_START = \"# Baton managed\";\nconst BATON_SECTION_END = \"# End Baton managed\";\n\n/**\n * Update .gitignore with patterns for baton-managed files.\n *\n * Manages a dedicated \"# Baton managed\" section in .gitignore.\n * Idempotent: re-running with the same patterns produces no changes.\n */\nexport async function updateGitignore(projectRoot: string, patterns: string[]): Promise<boolean> {\n if (patterns.length === 0) return false;\n\n const gitignorePath = join(projectRoot, \".gitignore\");\n\n let content = \"\";\n try {\n content = await readFile(gitignorePath, \"utf-8\");\n } catch {\n // .gitignore doesn't exist yet\n }\n\n const sectionContent = patterns.join(\"\\n\");\n const newSection = `${BATON_SECTION_START}\\n${sectionContent}\\n${BATON_SECTION_END}`;\n\n // Check if section already exists\n const startIdx = content.indexOf(BATON_SECTION_START);\n const endIdx = content.indexOf(BATON_SECTION_END);\n\n let newContent: string;\n\n if (startIdx !== -1 && endIdx !== -1) {\n // Replace existing section\n const existingSection = content.substring(startIdx, endIdx + BATON_SECTION_END.length);\n if (existingSection === newSection) {\n // No changes needed\n return false;\n }\n newContent =\n content.substring(0, startIdx) +\n newSection +\n content.substring(endIdx + BATON_SECTION_END.length);\n } else {\n // Append new section\n newContent = content ? `${content.trimEnd()}\\n\\n${newSection}\\n` : `${newSection}\\n`;\n }\n\n await writeFile(gitignorePath, newContent, \"utf-8\");\n return true;\n}\n\n/**\n * Remove the \"# Baton managed ... # End Baton managed\" section from .gitignore.\n *\n * Used when the project has `gitignore: false` to clean up any previously\n * written managed section.\n *\n * @returns true if a section was removed, false if none existed\n */\nexport async function removeGitignoreManagedSection(projectRoot: string): Promise<boolean> {\n const gitignorePath = join(projectRoot, \".gitignore\");\n\n let content = \"\";\n try {\n content = await readFile(gitignorePath, \"utf-8\");\n } catch {\n return false;\n }\n\n const startIdx = content.indexOf(BATON_SECTION_START);\n const endIdx = content.indexOf(BATON_SECTION_END);\n\n if (startIdx === -1 || endIdx === -1) {\n return false;\n }\n\n const before = content.substring(0, startIdx).replace(/\\n+$/, \"\\n\");\n const after = content.substring(endIdx + BATON_SECTION_END.length).replace(/^\\n+/, \"\\n\");\n const newContent = (before + after).trim();\n\n await writeFile(gitignorePath, newContent ? `${newContent}\\n` : \"\", \"utf-8\");\n return true;\n}\n\n/**\n * Parameters for collecting comprehensive gitignore patterns.\n */\nexport interface CollectComprehensivePatternsOptions {\n /** File targets placed by sync (from profile manifests, e.g. \"biome.json\") */\n fileTargets: string[];\n}\n\n/**\n * Collect comprehensive gitignore patterns for ALL known AI tools and IDE platforms.\n *\n * Generates patterns for the entire tool and IDE registry, ensuring stable,\n * predictable .gitignore content regardless of which tools a profile supports\n * or a developer has installed.\n *\n * Returns deduplicated, sorted patterns for AI tool and IDE configurations.\n */\nexport function collectComprehensivePatterns(\n options: CollectComprehensivePatternsOptions,\n): string[] {\n const patterns = new Set<string>();\n const { fileTargets } = options;\n\n // AI tool patterns: directories, memory files, and legacy paths for ALL known adapters\n const allAdapters = getAllAIToolAdapters();\n for (const adapter of allAdapters) {\n const commandPath = adapter.getPath(\"commands\", \"project\", \"_probe\");\n addDirPattern(patterns, commandPath);\n\n const skillPath = adapter.getPath(\"skills\", \"project\", \"_probe\");\n addDirPattern(patterns, skillPath);\n\n const rulePath = adapter.getPath(\"rules\", \"project\", \"_probe\");\n addPathPattern(patterns, rulePath);\n\n const memoryPath = adapter.getPath(\"memory\", \"project\", \"_probe\");\n addPathPattern(patterns, memoryPath);\n\n const agentPath = adapter.getPath(\"agents\", \"project\", \"_probe\");\n addDirPattern(patterns, agentPath);\n\n for (const legacyPath of adapter.getLegacyPaths(\"rules\")) {\n patterns.add(legacyPath);\n }\n }\n\n // IDE patterns: directories for ALL known IDE platforms\n const allIdePlatforms = getRegisteredIdePlatforms();\n for (const ideKey of allIdePlatforms) {\n const targetDir = getIdePlatformTargetDir(ideKey);\n if (targetDir) {\n const dir = targetDir.endsWith(\"/\") ? targetDir : `${targetDir}/`;\n patterns.add(dir);\n }\n }\n\n // File targets from profiles\n for (const target of fileTargets) {\n patterns.add(target);\n }\n\n return [...patterns].sort();\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = require(\"fs\");\nconst debug_1 = __importDefault(require(\"debug\"));\nconst log = debug_1.default('@kwsites/file-exists');\nfunction check(path, isFile, isDirectory) {\n log(`checking %s`, path);\n try {\n const stat = fs_1.statSync(path);\n if (stat.isFile() && isFile) {\n log(`[OK] path represents a file`);\n return true;\n }\n if (stat.isDirectory() && isDirectory) {\n log(`[OK] path represents a directory`);\n return true;\n }\n log(`[FAIL] path represents something other than a file or directory`);\n return false;\n }\n catch (e) {\n if (e.code === 'ENOENT') {\n log(`[FAIL] path is not accessible: %o`, e);\n return false;\n }\n log(`[FATAL] %o`, e);\n throw e;\n }\n}\n/**\n * Synchronous validation of a path existing either as a file or as a directory.\n *\n * @param {string} path The path to check\n * @param {number} type One or both of the exported numeric constants\n */\nfunction exists(path, type = exports.READABLE) {\n return check(path, (type & exports.FILE) > 0, (type & exports.FOLDER) > 0);\n}\nexports.exists = exists;\n/**\n * Constant representing a file\n */\nexports.FILE = 1;\n/**\n * Constant representing a folder\n */\nexports.FOLDER = 2;\n/**\n * Constant representing either a file or a folder\n */\nexports.READABLE = exports.FILE + exports.FOLDER;\n//# sourceMappingURL=index.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./src\"));\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDeferred = exports.deferred = void 0;\n/**\n * Creates a new `DeferredPromise`\n *\n * ```typescript\n import {deferred} from '@kwsites/promise-deferred`;\n ```\n */\nfunction deferred() {\n let done;\n let fail;\n let status = 'pending';\n const promise = new Promise((_done, _fail) => {\n done = _done;\n fail = _fail;\n });\n return {\n promise,\n done(result) {\n if (status === 'pending') {\n status = 'resolved';\n done(result);\n }\n },\n fail(error) {\n if (status === 'pending') {\n status = 'rejected';\n fail(error);\n }\n },\n get fulfilled() {\n return status !== 'pending';\n },\n get status() {\n return status;\n },\n };\n}\nexports.deferred = deferred;\n/**\n * Alias of the exported `deferred` function, to help consumers wanting to use `deferred` as the\n * local variable name rather than the factory import name, without needing to rename on import.\n *\n * ```typescript\n import {createDeferred} from '@kwsites/promise-deferred`;\n ```\n */\nexports.createDeferred = deferred;\n/**\n * Default export allows use as:\n *\n * ```typescript\n import deferred from '@kwsites/promise-deferred`;\n ```\n */\nexports.default = deferred;\n//# sourceMappingURL=index.js.map","var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n};\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/lib/args/pathspec.ts\nfunction pathspec(...paths) {\n const key = new String(paths);\n cache.set(key, paths);\n return key;\n}\nfunction isPathSpec(path) {\n return path instanceof String && cache.has(path);\n}\nfunction toPaths(pathSpec) {\n return cache.get(pathSpec) || [];\n}\nvar cache;\nvar init_pathspec = __esm({\n \"src/lib/args/pathspec.ts\"() {\n \"use strict\";\n cache = /* @__PURE__ */ new WeakMap();\n }\n});\n\n// src/lib/errors/git-error.ts\nvar GitError;\nvar init_git_error = __esm({\n \"src/lib/errors/git-error.ts\"() {\n \"use strict\";\n GitError = class extends Error {\n constructor(task, message) {\n super(message);\n this.task = task;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n };\n }\n});\n\n// src/lib/errors/git-response-error.ts\nvar GitResponseError;\nvar init_git_response_error = __esm({\n \"src/lib/errors/git-response-error.ts\"() {\n \"use strict\";\n init_git_error();\n GitResponseError = class extends GitError {\n constructor(git, message) {\n super(void 0, message || String(git));\n this.git = git;\n }\n };\n }\n});\n\n// src/lib/errors/task-configuration-error.ts\nvar TaskConfigurationError;\nvar init_task_configuration_error = __esm({\n \"src/lib/errors/task-configuration-error.ts\"() {\n \"use strict\";\n init_git_error();\n TaskConfigurationError = class extends GitError {\n constructor(message) {\n super(void 0, message);\n }\n };\n }\n});\n\n// src/lib/utils/util.ts\nimport { Buffer as Buffer2 } from \"node:buffer\";\nimport { exists, FOLDER } from \"@kwsites/file-exists\";\nfunction asFunction(source) {\n if (typeof source !== \"function\") {\n return NOOP;\n }\n return source;\n}\nfunction isUserFunction(source) {\n return typeof source === \"function\" && source !== NOOP;\n}\nfunction splitOn(input, char) {\n const index = input.indexOf(char);\n if (index <= 0) {\n return [input, \"\"];\n }\n return [input.substr(0, index), input.substr(index + 1)];\n}\nfunction first(input, offset = 0) {\n return isArrayLike(input) && input.length > offset ? input[offset] : void 0;\n}\nfunction last(input, offset = 0) {\n if (isArrayLike(input) && input.length > offset) {\n return input[input.length - 1 - offset];\n }\n}\nfunction isArrayLike(input) {\n return filterHasLength(input);\n}\nfunction toLinesWithContent(input = \"\", trimmed2 = true, separator = \"\\n\") {\n return input.split(separator).reduce((output, line) => {\n const lineContent = trimmed2 ? line.trim() : line;\n if (lineContent) {\n output.push(lineContent);\n }\n return output;\n }, []);\n}\nfunction forEachLineWithContent(input, callback) {\n return toLinesWithContent(input, true).map((line) => callback(line));\n}\nfunction folderExists(path) {\n return exists(path, FOLDER);\n}\nfunction append(target, item) {\n if (Array.isArray(target)) {\n if (!target.includes(item)) {\n target.push(item);\n }\n } else {\n target.add(item);\n }\n return item;\n}\nfunction including(target, item) {\n if (Array.isArray(target) && !target.includes(item)) {\n target.push(item);\n }\n return target;\n}\nfunction remove(target, item) {\n if (Array.isArray(target)) {\n const index = target.indexOf(item);\n if (index >= 0) {\n target.splice(index, 1);\n }\n } else {\n target.delete(item);\n }\n return item;\n}\nfunction asArray(source) {\n return Array.isArray(source) ? source : [source];\n}\nfunction asCamelCase(str) {\n return str.replace(/[\\s-]+(.)/g, (_all, chr) => {\n return chr.toUpperCase();\n });\n}\nfunction asStringArray(source) {\n return asArray(source).map((item) => {\n return item instanceof String ? item : String(item);\n });\n}\nfunction asNumber(source, onNaN = 0) {\n if (source == null) {\n return onNaN;\n }\n const num = parseInt(source, 10);\n return Number.isNaN(num) ? onNaN : num;\n}\nfunction prefixedArray(input, prefix) {\n const output = [];\n for (let i = 0, max = input.length; i < max; i++) {\n output.push(prefix, input[i]);\n }\n return output;\n}\nfunction bufferToString(input) {\n return (Array.isArray(input) ? Buffer2.concat(input) : input).toString(\"utf-8\");\n}\nfunction pick(source, properties) {\n const out = {};\n properties.forEach((key) => {\n if (source[key] !== void 0) {\n out[key] = source[key];\n }\n });\n return out;\n}\nfunction delay(duration = 0) {\n return new Promise((done) => setTimeout(done, duration));\n}\nfunction orVoid(input) {\n if (input === false) {\n return void 0;\n }\n return input;\n}\nvar NULL, NOOP, objectToString;\nvar init_util = __esm({\n \"src/lib/utils/util.ts\"() {\n \"use strict\";\n init_argument_filters();\n NULL = \"\\0\";\n NOOP = () => {\n };\n objectToString = Object.prototype.toString.call.bind(Object.prototype.toString);\n }\n});\n\n// src/lib/utils/argument-filters.ts\nfunction filterType(input, filter, def) {\n if (filter(input)) {\n return input;\n }\n return arguments.length > 2 ? def : void 0;\n}\nfunction filterPrimitives(input, omit) {\n const type = isPathSpec(input) ? \"string\" : typeof input;\n return /number|string|boolean/.test(type) && (!omit || !omit.includes(type));\n}\nfunction filterPlainObject(input) {\n return !!input && objectToString(input) === \"[object Object]\";\n}\nfunction filterFunction(input) {\n return typeof input === \"function\";\n}\nvar filterArray, filterNumber, filterString, filterStringOrStringArray, filterHasLength;\nvar init_argument_filters = __esm({\n \"src/lib/utils/argument-filters.ts\"() {\n \"use strict\";\n init_pathspec();\n init_util();\n filterArray = (input) => {\n return Array.isArray(input);\n };\n filterNumber = (input) => {\n return typeof input === \"number\";\n };\n filterString = (input) => {\n return typeof input === \"string\";\n };\n filterStringOrStringArray = (input) => {\n return filterString(input) || Array.isArray(input) && input.every(filterString);\n };\n filterHasLength = (input) => {\n if (input == null || \"number|boolean|function\".includes(typeof input)) {\n return false;\n }\n return typeof input.length === \"number\";\n };\n }\n});\n\n// src/lib/utils/exit-codes.ts\nvar ExitCodes;\nvar init_exit_codes = __esm({\n \"src/lib/utils/exit-codes.ts\"() {\n \"use strict\";\n ExitCodes = /* @__PURE__ */ ((ExitCodes2) => {\n ExitCodes2[ExitCodes2[\"SUCCESS\"] = 0] = \"SUCCESS\";\n ExitCodes2[ExitCodes2[\"ERROR\"] = 1] = \"ERROR\";\n ExitCodes2[ExitCodes2[\"NOT_FOUND\"] = -2] = \"NOT_FOUND\";\n ExitCodes2[ExitCodes2[\"UNCLEAN\"] = 128] = \"UNCLEAN\";\n return ExitCodes2;\n })(ExitCodes || {});\n }\n});\n\n// src/lib/utils/git-output-streams.ts\nvar GitOutputStreams;\nvar init_git_output_streams = __esm({\n \"src/lib/utils/git-output-streams.ts\"() {\n \"use strict\";\n GitOutputStreams = class _GitOutputStreams {\n constructor(stdOut, stdErr) {\n this.stdOut = stdOut;\n this.stdErr = stdErr;\n }\n asStrings() {\n return new _GitOutputStreams(this.stdOut.toString(\"utf8\"), this.stdErr.toString(\"utf8\"));\n }\n };\n }\n});\n\n// src/lib/utils/line-parser.ts\nfunction useMatchesDefault() {\n throw new Error(`LineParser:useMatches not implemented`);\n}\nvar LineParser, RemoteLineParser;\nvar init_line_parser = __esm({\n \"src/lib/utils/line-parser.ts\"() {\n \"use strict\";\n LineParser = class {\n constructor(regExp, useMatches) {\n this.matches = [];\n this.useMatches = useMatchesDefault;\n this.parse = (line, target) => {\n this.resetMatches();\n if (!this._regExp.every((reg, index) => this.addMatch(reg, index, line(index)))) {\n return false;\n }\n return this.useMatches(target, this.prepareMatches()) !== false;\n };\n this._regExp = Array.isArray(regExp) ? regExp : [regExp];\n if (useMatches) {\n this.useMatches = useMatches;\n }\n }\n resetMatches() {\n this.matches.length = 0;\n }\n prepareMatches() {\n return this.matches;\n }\n addMatch(reg, index, line) {\n const matched = line && reg.exec(line);\n if (matched) {\n this.pushMatch(index, matched);\n }\n return !!matched;\n }\n pushMatch(_index, matched) {\n this.matches.push(...matched.slice(1));\n }\n };\n RemoteLineParser = class extends LineParser {\n addMatch(reg, index, line) {\n return /^remote:\\s/.test(String(line)) && super.addMatch(reg, index, line);\n }\n pushMatch(index, matched) {\n if (index > 0 || matched.length > 1) {\n super.pushMatch(index, matched);\n }\n }\n };\n }\n});\n\n// src/lib/utils/simple-git-options.ts\nfunction createInstanceConfig(...options) {\n const baseDir = process.cwd();\n const config = Object.assign(\n { baseDir, ...defaultOptions },\n ...options.filter((o) => typeof o === \"object\" && o)\n );\n config.baseDir = config.baseDir || baseDir;\n config.trimmed = config.trimmed === true;\n return config;\n}\nvar defaultOptions;\nvar init_simple_git_options = __esm({\n \"src/lib/utils/simple-git-options.ts\"() {\n \"use strict\";\n defaultOptions = {\n binary: \"git\",\n maxConcurrentProcesses: 5,\n config: [],\n trimmed: false\n };\n }\n});\n\n// src/lib/utils/task-options.ts\nfunction appendTaskOptions(options, commands = []) {\n if (!filterPlainObject(options)) {\n return commands;\n }\n return Object.keys(options).reduce((commands2, key) => {\n const value = options[key];\n if (isPathSpec(value)) {\n commands2.push(value);\n } else if (filterPrimitives(value, [\"boolean\"])) {\n commands2.push(key + \"=\" + value);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n if (!filterPrimitives(v, [\"string\", \"number\"])) {\n commands2.push(key + \"=\" + v);\n }\n }\n } else {\n commands2.push(key);\n }\n return commands2;\n }, commands);\n}\nfunction getTrailingOptions(args, initialPrimitive = 0, objectOnly = false) {\n const command = [];\n for (let i = 0, max = initialPrimitive < 0 ? args.length : initialPrimitive; i < max; i++) {\n if (\"string|number\".includes(typeof args[i])) {\n command.push(String(args[i]));\n }\n }\n appendTaskOptions(trailingOptionsArgument(args), command);\n if (!objectOnly) {\n command.push(...trailingArrayArgument(args));\n }\n return command;\n}\nfunction trailingArrayArgument(args) {\n const hasTrailingCallback = typeof last(args) === \"function\";\n return asStringArray(filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []));\n}\nfunction trailingOptionsArgument(args) {\n const hasTrailingCallback = filterFunction(last(args));\n return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject);\n}\nfunction trailingFunctionArgument(args, includeNoop = true) {\n const callback = asFunction(last(args));\n return includeNoop || isUserFunction(callback) ? callback : void 0;\n}\nvar init_task_options = __esm({\n \"src/lib/utils/task-options.ts\"() {\n \"use strict\";\n init_argument_filters();\n init_util();\n init_pathspec();\n }\n});\n\n// src/lib/utils/task-parser.ts\nfunction callTaskParser(parser4, streams) {\n return parser4(streams.stdOut, streams.stdErr);\n}\nfunction parseStringResponse(result, parsers12, texts, trim = true) {\n asArray(texts).forEach((text) => {\n for (let lines = toLinesWithContent(text, trim), i = 0, max = lines.length; i < max; i++) {\n const line = (offset = 0) => {\n if (i + offset >= max) {\n return;\n }\n return lines[i + offset];\n };\n parsers12.some(({ parse }) => parse(line, result));\n }\n });\n return result;\n}\nvar init_task_parser = __esm({\n \"src/lib/utils/task-parser.ts\"() {\n \"use strict\";\n init_util();\n }\n});\n\n// src/lib/utils/index.ts\nvar utils_exports = {};\n__export(utils_exports, {\n ExitCodes: () => ExitCodes,\n GitOutputStreams: () => GitOutputStreams,\n LineParser: () => LineParser,\n NOOP: () => NOOP,\n NULL: () => NULL,\n RemoteLineParser: () => RemoteLineParser,\n append: () => append,\n appendTaskOptions: () => appendTaskOptions,\n asArray: () => asArray,\n asCamelCase: () => asCamelCase,\n asFunction: () => asFunction,\n asNumber: () => asNumber,\n asStringArray: () => asStringArray,\n bufferToString: () => bufferToString,\n callTaskParser: () => callTaskParser,\n createInstanceConfig: () => createInstanceConfig,\n delay: () => delay,\n filterArray: () => filterArray,\n filterFunction: () => filterFunction,\n filterHasLength: () => filterHasLength,\n filterNumber: () => filterNumber,\n filterPlainObject: () => filterPlainObject,\n filterPrimitives: () => filterPrimitives,\n filterString: () => filterString,\n filterStringOrStringArray: () => filterStringOrStringArray,\n filterType: () => filterType,\n first: () => first,\n folderExists: () => folderExists,\n forEachLineWithContent: () => forEachLineWithContent,\n getTrailingOptions: () => getTrailingOptions,\n including: () => including,\n isUserFunction: () => isUserFunction,\n last: () => last,\n objectToString: () => objectToString,\n orVoid: () => orVoid,\n parseStringResponse: () => parseStringResponse,\n pick: () => pick,\n prefixedArray: () => prefixedArray,\n remove: () => remove,\n splitOn: () => splitOn,\n toLinesWithContent: () => toLinesWithContent,\n trailingFunctionArgument: () => trailingFunctionArgument,\n trailingOptionsArgument: () => trailingOptionsArgument\n});\nvar init_utils = __esm({\n \"src/lib/utils/index.ts\"() {\n \"use strict\";\n init_argument_filters();\n init_exit_codes();\n init_git_output_streams();\n init_line_parser();\n init_simple_git_options();\n init_task_options();\n init_task_parser();\n init_util();\n }\n});\n\n// src/lib/tasks/check-is-repo.ts\nvar check_is_repo_exports = {};\n__export(check_is_repo_exports, {\n CheckRepoActions: () => CheckRepoActions,\n checkIsBareRepoTask: () => checkIsBareRepoTask,\n checkIsRepoRootTask: () => checkIsRepoRootTask,\n checkIsRepoTask: () => checkIsRepoTask\n});\nfunction checkIsRepoTask(action) {\n switch (action) {\n case \"bare\" /* BARE */:\n return checkIsBareRepoTask();\n case \"root\" /* IS_REPO_ROOT */:\n return checkIsRepoRootTask();\n }\n const commands = [\"rev-parse\", \"--is-inside-work-tree\"];\n return {\n commands,\n format: \"utf-8\",\n onError,\n parser\n };\n}\nfunction checkIsRepoRootTask() {\n const commands = [\"rev-parse\", \"--git-dir\"];\n return {\n commands,\n format: \"utf-8\",\n onError,\n parser(path) {\n return /^\\.(git)?$/.test(path.trim());\n }\n };\n}\nfunction checkIsBareRepoTask() {\n const commands = [\"rev-parse\", \"--is-bare-repository\"];\n return {\n commands,\n format: \"utf-8\",\n onError,\n parser\n };\n}\nfunction isNotRepoMessage(error) {\n return /(Not a git repository|Kein Git-Repository)/i.test(String(error));\n}\nvar CheckRepoActions, onError, parser;\nvar init_check_is_repo = __esm({\n \"src/lib/tasks/check-is-repo.ts\"() {\n \"use strict\";\n init_utils();\n CheckRepoActions = /* @__PURE__ */ ((CheckRepoActions2) => {\n CheckRepoActions2[\"BARE\"] = \"bare\";\n CheckRepoActions2[\"IN_TREE\"] = \"tree\";\n CheckRepoActions2[\"IS_REPO_ROOT\"] = \"root\";\n return CheckRepoActions2;\n })(CheckRepoActions || {});\n onError = ({ exitCode }, error, done, fail) => {\n if (exitCode === 128 /* UNCLEAN */ && isNotRepoMessage(error)) {\n return done(Buffer.from(\"false\"));\n }\n fail(error);\n };\n parser = (text) => {\n return text.trim() === \"true\";\n };\n }\n});\n\n// src/lib/responses/CleanSummary.ts\nfunction cleanSummaryParser(dryRun, text) {\n const summary = new CleanResponse(dryRun);\n const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp;\n toLinesWithContent(text).forEach((line) => {\n const removed = line.replace(regexp, \"\");\n summary.paths.push(removed);\n (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed);\n });\n return summary;\n}\nvar CleanResponse, removalRegexp, dryRunRemovalRegexp, isFolderRegexp;\nvar init_CleanSummary = __esm({\n \"src/lib/responses/CleanSummary.ts\"() {\n \"use strict\";\n init_utils();\n CleanResponse = class {\n constructor(dryRun) {\n this.dryRun = dryRun;\n this.paths = [];\n this.files = [];\n this.folders = [];\n }\n };\n removalRegexp = /^[a-z]+\\s*/i;\n dryRunRemovalRegexp = /^[a-z]+\\s+[a-z]+\\s*/i;\n isFolderRegexp = /\\/$/;\n }\n});\n\n// src/lib/tasks/task.ts\nvar task_exports = {};\n__export(task_exports, {\n EMPTY_COMMANDS: () => EMPTY_COMMANDS,\n adhocExecTask: () => adhocExecTask,\n configurationErrorTask: () => configurationErrorTask,\n isBufferTask: () => isBufferTask,\n isEmptyTask: () => isEmptyTask,\n straightThroughBufferTask: () => straightThroughBufferTask,\n straightThroughStringTask: () => straightThroughStringTask\n});\nfunction adhocExecTask(parser4) {\n return {\n commands: EMPTY_COMMANDS,\n format: \"empty\",\n parser: parser4\n };\n}\nfunction configurationErrorTask(error) {\n return {\n commands: EMPTY_COMMANDS,\n format: \"empty\",\n parser() {\n throw typeof error === \"string\" ? new TaskConfigurationError(error) : error;\n }\n };\n}\nfunction straightThroughStringTask(commands, trimmed2 = false) {\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return trimmed2 ? String(text).trim() : text;\n }\n };\n}\nfunction straightThroughBufferTask(commands) {\n return {\n commands,\n format: \"buffer\",\n parser(buffer) {\n return buffer;\n }\n };\n}\nfunction isBufferTask(task) {\n return task.format === \"buffer\";\n}\nfunction isEmptyTask(task) {\n return task.format === \"empty\" || !task.commands.length;\n}\nvar EMPTY_COMMANDS;\nvar init_task = __esm({\n \"src/lib/tasks/task.ts\"() {\n \"use strict\";\n init_task_configuration_error();\n EMPTY_COMMANDS = [];\n }\n});\n\n// src/lib/tasks/clean.ts\nvar clean_exports = {};\n__export(clean_exports, {\n CONFIG_ERROR_INTERACTIVE_MODE: () => CONFIG_ERROR_INTERACTIVE_MODE,\n CONFIG_ERROR_MODE_REQUIRED: () => CONFIG_ERROR_MODE_REQUIRED,\n CONFIG_ERROR_UNKNOWN_OPTION: () => CONFIG_ERROR_UNKNOWN_OPTION,\n CleanOptions: () => CleanOptions,\n cleanTask: () => cleanTask,\n cleanWithOptionsTask: () => cleanWithOptionsTask,\n isCleanOptionsArray: () => isCleanOptionsArray\n});\nfunction cleanWithOptionsTask(mode, customArgs) {\n const { cleanMode, options, valid } = getCleanOptions(mode);\n if (!cleanMode) {\n return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED);\n }\n if (!valid.options) {\n return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode));\n }\n options.push(...customArgs);\n if (options.some(isInteractiveMode)) {\n return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE);\n }\n return cleanTask(cleanMode, options);\n}\nfunction cleanTask(mode, customArgs) {\n const commands = [\"clean\", `-${mode}`, ...customArgs];\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return cleanSummaryParser(mode === \"n\" /* DRY_RUN */, text);\n }\n };\n}\nfunction isCleanOptionsArray(input) {\n return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test));\n}\nfunction getCleanOptions(input) {\n let cleanMode;\n let options = [];\n let valid = { cleanMode: false, options: true };\n input.replace(/[^a-z]i/g, \"\").split(\"\").forEach((char) => {\n if (isCleanMode(char)) {\n cleanMode = char;\n valid.cleanMode = true;\n } else {\n valid.options = valid.options && isKnownOption(options[options.length] = `-${char}`);\n }\n });\n return {\n cleanMode,\n options,\n valid\n };\n}\nfunction isCleanMode(cleanMode) {\n return cleanMode === \"f\" /* FORCE */ || cleanMode === \"n\" /* DRY_RUN */;\n}\nfunction isKnownOption(option) {\n return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1));\n}\nfunction isInteractiveMode(option) {\n if (/^-[^\\-]/.test(option)) {\n return option.indexOf(\"i\") > 0;\n }\n return option === \"--interactive\";\n}\nvar CONFIG_ERROR_INTERACTIVE_MODE, CONFIG_ERROR_MODE_REQUIRED, CONFIG_ERROR_UNKNOWN_OPTION, CleanOptions, CleanOptionValues;\nvar init_clean = __esm({\n \"src/lib/tasks/clean.ts\"() {\n \"use strict\";\n init_CleanSummary();\n init_utils();\n init_task();\n CONFIG_ERROR_INTERACTIVE_MODE = \"Git clean interactive mode is not supported\";\n CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter (\"n\" or \"f\") is required';\n CONFIG_ERROR_UNKNOWN_OPTION = \"Git clean unknown option found in: \";\n CleanOptions = /* @__PURE__ */ ((CleanOptions2) => {\n CleanOptions2[\"DRY_RUN\"] = \"n\";\n CleanOptions2[\"FORCE\"] = \"f\";\n CleanOptions2[\"IGNORED_INCLUDED\"] = \"x\";\n CleanOptions2[\"IGNORED_ONLY\"] = \"X\";\n CleanOptions2[\"EXCLUDING\"] = \"e\";\n CleanOptions2[\"QUIET\"] = \"q\";\n CleanOptions2[\"RECURSIVE\"] = \"d\";\n return CleanOptions2;\n })(CleanOptions || {});\n CleanOptionValues = /* @__PURE__ */ new Set([\n \"i\",\n ...asStringArray(Object.values(CleanOptions))\n ]);\n }\n});\n\n// src/lib/responses/ConfigList.ts\nfunction configListParser(text) {\n const config = new ConfigList();\n for (const item of configParser(text)) {\n config.addValue(item.file, String(item.key), item.value);\n }\n return config;\n}\nfunction configGetParser(text, key) {\n let value = null;\n const values = [];\n const scopes = /* @__PURE__ */ new Map();\n for (const item of configParser(text, key)) {\n if (item.key !== key) {\n continue;\n }\n values.push(value = item.value);\n if (!scopes.has(item.file)) {\n scopes.set(item.file, []);\n }\n scopes.get(item.file).push(value);\n }\n return {\n key,\n paths: Array.from(scopes.keys()),\n scopes,\n value,\n values\n };\n}\nfunction configFilePath(filePath) {\n return filePath.replace(/^(file):/, \"\");\n}\nfunction* configParser(text, requestedKey = null) {\n const lines = text.split(\"\\0\");\n for (let i = 0, max = lines.length - 1; i < max; ) {\n const file = configFilePath(lines[i++]);\n let value = lines[i++];\n let key = requestedKey;\n if (value.includes(\"\\n\")) {\n const line = splitOn(value, \"\\n\");\n key = line[0];\n value = line[1];\n }\n yield { file, key, value };\n }\n}\nvar ConfigList;\nvar init_ConfigList = __esm({\n \"src/lib/responses/ConfigList.ts\"() {\n \"use strict\";\n init_utils();\n ConfigList = class {\n constructor() {\n this.files = [];\n this.values = /* @__PURE__ */ Object.create(null);\n }\n get all() {\n if (!this._all) {\n this._all = this.files.reduce((all, file) => {\n return Object.assign(all, this.values[file]);\n }, {});\n }\n return this._all;\n }\n addFile(file) {\n if (!(file in this.values)) {\n const latest = last(this.files);\n this.values[file] = latest ? Object.create(this.values[latest]) : {};\n this.files.push(file);\n }\n return this.values[file];\n }\n addValue(file, key, value) {\n const values = this.addFile(file);\n if (!Object.hasOwn(values, key)) {\n values[key] = value;\n } else if (Array.isArray(values[key])) {\n values[key].push(value);\n } else {\n values[key] = [values[key], value];\n }\n this._all = void 0;\n }\n };\n }\n});\n\n// src/lib/tasks/config.ts\nfunction asConfigScope(scope, fallback) {\n if (typeof scope === \"string\" && Object.hasOwn(GitConfigScope, scope)) {\n return scope;\n }\n return fallback;\n}\nfunction addConfigTask(key, value, append2, scope) {\n const commands = [\"config\", `--${scope}`];\n if (append2) {\n commands.push(\"--add\");\n }\n commands.push(key, value);\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return text;\n }\n };\n}\nfunction getConfigTask(key, scope) {\n const commands = [\"config\", \"--null\", \"--show-origin\", \"--get-all\", key];\n if (scope) {\n commands.splice(1, 0, `--${scope}`);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return configGetParser(text, key);\n }\n };\n}\nfunction listConfigTask(scope) {\n const commands = [\"config\", \"--list\", \"--show-origin\", \"--null\"];\n if (scope) {\n commands.push(`--${scope}`);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return configListParser(text);\n }\n };\n}\nfunction config_default() {\n return {\n addConfig(key, value, ...rest) {\n return this._runTask(\n addConfigTask(\n key,\n value,\n rest[0] === true,\n asConfigScope(rest[1], \"local\" /* local */)\n ),\n trailingFunctionArgument(arguments)\n );\n },\n getConfig(key, scope) {\n return this._runTask(\n getConfigTask(key, asConfigScope(scope, void 0)),\n trailingFunctionArgument(arguments)\n );\n },\n listConfig(...rest) {\n return this._runTask(\n listConfigTask(asConfigScope(rest[0], void 0)),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar GitConfigScope;\nvar init_config = __esm({\n \"src/lib/tasks/config.ts\"() {\n \"use strict\";\n init_ConfigList();\n init_utils();\n GitConfigScope = /* @__PURE__ */ ((GitConfigScope2) => {\n GitConfigScope2[\"system\"] = \"system\";\n GitConfigScope2[\"global\"] = \"global\";\n GitConfigScope2[\"local\"] = \"local\";\n GitConfigScope2[\"worktree\"] = \"worktree\";\n return GitConfigScope2;\n })(GitConfigScope || {});\n }\n});\n\n// src/lib/tasks/diff-name-status.ts\nfunction isDiffNameStatus(input) {\n return diffNameStatus.has(input);\n}\nvar DiffNameStatus, diffNameStatus;\nvar init_diff_name_status = __esm({\n \"src/lib/tasks/diff-name-status.ts\"() {\n \"use strict\";\n DiffNameStatus = /* @__PURE__ */ ((DiffNameStatus2) => {\n DiffNameStatus2[\"ADDED\"] = \"A\";\n DiffNameStatus2[\"COPIED\"] = \"C\";\n DiffNameStatus2[\"DELETED\"] = \"D\";\n DiffNameStatus2[\"MODIFIED\"] = \"M\";\n DiffNameStatus2[\"RENAMED\"] = \"R\";\n DiffNameStatus2[\"CHANGED\"] = \"T\";\n DiffNameStatus2[\"UNMERGED\"] = \"U\";\n DiffNameStatus2[\"UNKNOWN\"] = \"X\";\n DiffNameStatus2[\"BROKEN\"] = \"B\";\n return DiffNameStatus2;\n })(DiffNameStatus || {});\n diffNameStatus = new Set(Object.values(DiffNameStatus));\n }\n});\n\n// src/lib/tasks/grep.ts\nfunction grepQueryBuilder(...params) {\n return new GrepQuery().param(...params);\n}\nfunction parseGrep(grep) {\n const paths = /* @__PURE__ */ new Set();\n const results = {};\n forEachLineWithContent(grep, (input) => {\n const [path, line, preview] = input.split(NULL);\n paths.add(path);\n (results[path] = results[path] || []).push({\n line: asNumber(line),\n path,\n preview\n });\n });\n return {\n paths,\n results\n };\n}\nfunction grep_default() {\n return {\n grep(searchTerm) {\n const then = trailingFunctionArgument(arguments);\n const options = getTrailingOptions(arguments);\n for (const option of disallowedOptions) {\n if (options.includes(option)) {\n return this._runTask(\n configurationErrorTask(`git.grep: use of \"${option}\" is not supported.`),\n then\n );\n }\n }\n if (typeof searchTerm === \"string\") {\n searchTerm = grepQueryBuilder().param(searchTerm);\n }\n const commands = [\"grep\", \"--null\", \"-n\", \"--full-name\", ...options, ...searchTerm];\n return this._runTask(\n {\n commands,\n format: \"utf-8\",\n parser(stdOut) {\n return parseGrep(stdOut);\n }\n },\n then\n );\n }\n };\n}\nvar disallowedOptions, Query, _a, GrepQuery;\nvar init_grep = __esm({\n \"src/lib/tasks/grep.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n disallowedOptions = [\"-h\"];\n Query = Symbol(\"grepQuery\");\n GrepQuery = class {\n constructor() {\n this[_a] = [];\n }\n *[(_a = Query, Symbol.iterator)]() {\n for (const query of this[Query]) {\n yield query;\n }\n }\n and(...and) {\n and.length && this[Query].push(\"--and\", \"(\", ...prefixedArray(and, \"-e\"), \")\");\n return this;\n }\n param(...param) {\n this[Query].push(...prefixedArray(param, \"-e\"));\n return this;\n }\n };\n }\n});\n\n// src/lib/tasks/reset.ts\nvar reset_exports = {};\n__export(reset_exports, {\n ResetMode: () => ResetMode,\n getResetMode: () => getResetMode,\n resetTask: () => resetTask\n});\nfunction resetTask(mode, customArgs) {\n const commands = [\"reset\"];\n if (isValidResetMode(mode)) {\n commands.push(`--${mode}`);\n }\n commands.push(...customArgs);\n return straightThroughStringTask(commands);\n}\nfunction getResetMode(mode) {\n if (isValidResetMode(mode)) {\n return mode;\n }\n switch (typeof mode) {\n case \"string\":\n case \"undefined\":\n return \"soft\" /* SOFT */;\n }\n return;\n}\nfunction isValidResetMode(mode) {\n return typeof mode === \"string\" && validResetModes.includes(mode);\n}\nvar ResetMode, validResetModes;\nvar init_reset = __esm({\n \"src/lib/tasks/reset.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n ResetMode = /* @__PURE__ */ ((ResetMode2) => {\n ResetMode2[\"MIXED\"] = \"mixed\";\n ResetMode2[\"SOFT\"] = \"soft\";\n ResetMode2[\"HARD\"] = \"hard\";\n ResetMode2[\"MERGE\"] = \"merge\";\n ResetMode2[\"KEEP\"] = \"keep\";\n return ResetMode2;\n })(ResetMode || {});\n validResetModes = asStringArray(Object.values(ResetMode));\n }\n});\n\n// src/lib/git-logger.ts\nimport debug from \"debug\";\nfunction createLog() {\n return debug(\"simple-git\");\n}\nfunction prefixedLogger(to, prefix, forward) {\n if (!prefix || !String(prefix).replace(/\\s*/, \"\")) {\n return !forward ? to : (message, ...args) => {\n to(message, ...args);\n forward(message, ...args);\n };\n }\n return (message, ...args) => {\n to(`%s ${message}`, prefix, ...args);\n if (forward) {\n forward(message, ...args);\n }\n };\n}\nfunction childLoggerName(name, childDebugger, { namespace: parentNamespace }) {\n if (typeof name === \"string\") {\n return name;\n }\n const childNamespace = childDebugger && childDebugger.namespace || \"\";\n if (childNamespace.startsWith(parentNamespace)) {\n return childNamespace.substr(parentNamespace.length + 1);\n }\n return childNamespace || parentNamespace;\n}\nfunction createLogger(label, verbose, initialStep, infoDebugger = createLog()) {\n const labelPrefix = label && `[${label}]` || \"\";\n const spawned = [];\n const debugDebugger = typeof verbose === \"string\" ? infoDebugger.extend(verbose) : verbose;\n const key = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger);\n return step(initialStep);\n function sibling(name, initial) {\n return append(\n spawned,\n createLogger(label, key.replace(/^[^:]+/, name), initial, infoDebugger)\n );\n }\n function step(phase) {\n const stepPrefix = phase && `[${phase}]` || \"\";\n const debug2 = debugDebugger && prefixedLogger(debugDebugger, stepPrefix) || NOOP;\n const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug2);\n return Object.assign(debugDebugger ? debug2 : info, {\n label,\n sibling,\n info,\n step\n });\n }\n}\nvar init_git_logger = __esm({\n \"src/lib/git-logger.ts\"() {\n \"use strict\";\n init_utils();\n debug.formatters.L = (value) => String(filterHasLength(value) ? value.length : \"-\");\n debug.formatters.B = (value) => {\n if (Buffer.isBuffer(value)) {\n return value.toString(\"utf8\");\n }\n return objectToString(value);\n };\n }\n});\n\n// src/lib/runners/tasks-pending-queue.ts\nvar TasksPendingQueue;\nvar init_tasks_pending_queue = __esm({\n \"src/lib/runners/tasks-pending-queue.ts\"() {\n \"use strict\";\n init_git_error();\n init_git_logger();\n TasksPendingQueue = class _TasksPendingQueue {\n constructor(logLabel = \"GitExecutor\") {\n this.logLabel = logLabel;\n this._queue = /* @__PURE__ */ new Map();\n }\n withProgress(task) {\n return this._queue.get(task);\n }\n createProgress(task) {\n const name = _TasksPendingQueue.getName(task.commands[0]);\n const logger = createLogger(this.logLabel, name);\n return {\n task,\n logger,\n name\n };\n }\n push(task) {\n const progress = this.createProgress(task);\n progress.logger(\"Adding task to the queue, commands = %o\", task.commands);\n this._queue.set(task, progress);\n return progress;\n }\n fatal(err) {\n for (const [task, { logger }] of Array.from(this._queue.entries())) {\n if (task === err.task) {\n logger.info(`Failed %o`, err);\n logger(\n `Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`\n );\n } else {\n logger.info(\n `A fatal exception occurred in a previous task, the queue has been purged: %o`,\n err.message\n );\n }\n this.complete(task);\n }\n if (this._queue.size !== 0) {\n throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`);\n }\n }\n complete(task) {\n const progress = this.withProgress(task);\n if (progress) {\n this._queue.delete(task);\n }\n }\n attempt(task) {\n const progress = this.withProgress(task);\n if (!progress) {\n throw new GitError(void 0, \"TasksPendingQueue: attempt called for an unknown task\");\n }\n progress.logger(\"Starting task\");\n return progress;\n }\n static getName(name = \"empty\") {\n return `task:${name}:${++_TasksPendingQueue.counter}`;\n }\n static {\n this.counter = 0;\n }\n };\n }\n});\n\n// src/lib/runners/git-executor-chain.ts\nimport { spawn } from \"child_process\";\nfunction pluginContext(task, commands) {\n return {\n method: first(task.commands) || \"\",\n commands\n };\n}\nfunction onErrorReceived(target, logger) {\n return (err) => {\n logger(`[ERROR] child process exception %o`, err);\n target.push(Buffer.from(String(err.stack), \"ascii\"));\n };\n}\nfunction onDataReceived(target, name, logger, output) {\n return (buffer) => {\n logger(`%s received %L bytes`, name, buffer);\n output(`%B`, buffer);\n target.push(buffer);\n };\n}\nvar GitExecutorChain;\nvar init_git_executor_chain = __esm({\n \"src/lib/runners/git-executor-chain.ts\"() {\n \"use strict\";\n init_git_error();\n init_task();\n init_utils();\n init_tasks_pending_queue();\n GitExecutorChain = class {\n constructor(_executor, _scheduler, _plugins) {\n this._executor = _executor;\n this._scheduler = _scheduler;\n this._plugins = _plugins;\n this._chain = Promise.resolve();\n this._queue = new TasksPendingQueue();\n }\n get cwd() {\n return this._cwd || this._executor.cwd;\n }\n set cwd(cwd) {\n this._cwd = cwd;\n }\n get env() {\n return this._executor.env;\n }\n get outputHandler() {\n return this._executor.outputHandler;\n }\n chain() {\n return this;\n }\n push(task) {\n this._queue.push(task);\n return this._chain = this._chain.then(() => this.attemptTask(task));\n }\n async attemptTask(task) {\n const onScheduleComplete = await this._scheduler.next();\n const onQueueComplete = () => this._queue.complete(task);\n try {\n const { logger } = this._queue.attempt(task);\n return await (isEmptyTask(task) ? this.attemptEmptyTask(task, logger) : this.attemptRemoteTask(task, logger));\n } catch (e) {\n throw this.onFatalException(task, e);\n } finally {\n onQueueComplete();\n onScheduleComplete();\n }\n }\n onFatalException(task, e) {\n const gitError = e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e));\n this._chain = Promise.resolve();\n this._queue.fatal(gitError);\n return gitError;\n }\n async attemptRemoteTask(task, logger) {\n const binary = this._plugins.exec(\"spawn.binary\", \"\", pluginContext(task, task.commands));\n const args = this._plugins.exec(\n \"spawn.args\",\n [...task.commands],\n pluginContext(task, task.commands)\n );\n const raw = await this.gitResponse(\n task,\n binary,\n args,\n this.outputHandler,\n logger.step(\"SPAWN\")\n );\n const outputStreams = await this.handleTaskData(task, args, raw, logger.step(\"HANDLE\"));\n logger(`passing response to task's parser as a %s`, task.format);\n if (isBufferTask(task)) {\n return callTaskParser(task.parser, outputStreams);\n }\n return callTaskParser(task.parser, outputStreams.asStrings());\n }\n async attemptEmptyTask(task, logger) {\n logger(`empty task bypassing child process to call to task's parser`);\n return task.parser(this);\n }\n handleTaskData(task, args, result, logger) {\n const { exitCode, rejection, stdOut, stdErr } = result;\n return new Promise((done, fail) => {\n logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode);\n const { error } = this._plugins.exec(\n \"task.error\",\n { error: rejection },\n {\n ...pluginContext(task, args),\n ...result\n }\n );\n if (error && task.onError) {\n logger.info(`exitCode=%s handling with custom error handler`);\n return task.onError(\n result,\n error,\n (newStdOut) => {\n logger.info(`custom error handler treated as success`);\n logger(`custom error returned a %s`, objectToString(newStdOut));\n done(\n new GitOutputStreams(\n Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut,\n Buffer.concat(stdErr)\n )\n );\n },\n fail\n );\n }\n if (error) {\n logger.info(\n `handling as error: exitCode=%s stdErr=%s rejection=%o`,\n exitCode,\n stdErr.length,\n rejection\n );\n return fail(error);\n }\n logger.info(`retrieving task output complete`);\n done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr)));\n });\n }\n async gitResponse(task, command, args, outputHandler, logger) {\n const outputLogger = logger.sibling(\"output\");\n const spawnOptions = this._plugins.exec(\n \"spawn.options\",\n {\n cwd: this.cwd,\n env: this.env,\n windowsHide: true\n },\n pluginContext(task, task.commands)\n );\n return new Promise((done) => {\n const stdOut = [];\n const stdErr = [];\n logger.info(`%s %o`, command, args);\n logger(\"%O\", spawnOptions);\n let rejection = this._beforeSpawn(task, args);\n if (rejection) {\n return done({\n stdOut,\n stdErr,\n exitCode: 9901,\n rejection\n });\n }\n this._plugins.exec(\"spawn.before\", void 0, {\n ...pluginContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n }\n });\n const spawned = spawn(command, args, spawnOptions);\n spawned.stdout.on(\n \"data\",\n onDataReceived(stdOut, \"stdOut\", logger, outputLogger.step(\"stdOut\"))\n );\n spawned.stderr.on(\n \"data\",\n onDataReceived(stdErr, \"stdErr\", logger, outputLogger.step(\"stdErr\"))\n );\n spawned.on(\"error\", onErrorReceived(stdErr, logger));\n if (outputHandler) {\n logger(`Passing child process stdOut/stdErr to custom outputHandler`);\n outputHandler(command, spawned.stdout, spawned.stderr, [...args]);\n }\n this._plugins.exec(\"spawn.after\", void 0, {\n ...pluginContext(task, args),\n spawned,\n close(exitCode, reason) {\n done({\n stdOut,\n stdErr,\n exitCode,\n rejection: rejection || reason\n });\n },\n kill(reason) {\n if (spawned.killed) {\n return;\n }\n rejection = reason;\n spawned.kill(\"SIGINT\");\n }\n });\n });\n }\n _beforeSpawn(task, args) {\n let rejection;\n this._plugins.exec(\"spawn.before\", void 0, {\n ...pluginContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n }\n });\n return rejection;\n }\n };\n }\n});\n\n// src/lib/runners/git-executor.ts\nvar git_executor_exports = {};\n__export(git_executor_exports, {\n GitExecutor: () => GitExecutor\n});\nvar GitExecutor;\nvar init_git_executor = __esm({\n \"src/lib/runners/git-executor.ts\"() {\n \"use strict\";\n init_git_executor_chain();\n GitExecutor = class {\n constructor(cwd, _scheduler, _plugins) {\n this.cwd = cwd;\n this._scheduler = _scheduler;\n this._plugins = _plugins;\n this._chain = new GitExecutorChain(this, this._scheduler, this._plugins);\n }\n chain() {\n return new GitExecutorChain(this, this._scheduler, this._plugins);\n }\n push(task) {\n return this._chain.push(task);\n }\n };\n }\n});\n\n// src/lib/task-callback.ts\nfunction taskCallback(task, response, callback = NOOP) {\n const onSuccess = (data) => {\n callback(null, data);\n };\n const onError2 = (err) => {\n if (err?.task === task) {\n callback(\n err instanceof GitResponseError ? addDeprecationNoticeToError(err) : err,\n void 0\n );\n }\n };\n response.then(onSuccess, onError2);\n}\nfunction addDeprecationNoticeToError(err) {\n let log = (name) => {\n console.warn(\n `simple-git deprecation notice: accessing GitResponseError.${name} should be GitResponseError.git.${name}, this will no longer be available in version 3`\n );\n log = NOOP;\n };\n return Object.create(err, Object.getOwnPropertyNames(err.git).reduce(descriptorReducer, {}));\n function descriptorReducer(all, name) {\n if (name in err) {\n return all;\n }\n all[name] = {\n enumerable: false,\n configurable: false,\n get() {\n log(name);\n return err.git[name];\n }\n };\n return all;\n }\n}\nvar init_task_callback = __esm({\n \"src/lib/task-callback.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_utils();\n }\n});\n\n// src/lib/tasks/change-working-directory.ts\nfunction changeWorkingDirectoryTask(directory, root) {\n return adhocExecTask((instance) => {\n if (!folderExists(directory)) {\n throw new Error(`Git.cwd: cannot change to non-directory \"${directory}\"`);\n }\n return (root || instance).cwd = directory;\n });\n}\nvar init_change_working_directory = __esm({\n \"src/lib/tasks/change-working-directory.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/checkout.ts\nfunction checkoutTask(args) {\n const commands = [\"checkout\", ...args];\n if (commands[1] === \"-b\" && commands.includes(\"-B\")) {\n commands[1] = remove(commands, \"-B\");\n }\n return straightThroughStringTask(commands);\n}\nfunction checkout_default() {\n return {\n checkout() {\n return this._runTask(\n checkoutTask(getTrailingOptions(arguments, 1)),\n trailingFunctionArgument(arguments)\n );\n },\n checkoutBranch(branchName, startPoint) {\n return this._runTask(\n checkoutTask([\"-b\", branchName, startPoint, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n },\n checkoutLocalBranch(branchName) {\n return this._runTask(\n checkoutTask([\"-b\", branchName, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar init_checkout = __esm({\n \"src/lib/tasks/checkout.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/count-objects.ts\nfunction countObjectsResponse() {\n return {\n count: 0,\n garbage: 0,\n inPack: 0,\n packs: 0,\n prunePackable: 0,\n size: 0,\n sizeGarbage: 0,\n sizePack: 0\n };\n}\nfunction count_objects_default() {\n return {\n countObjects() {\n return this._runTask({\n commands: [\"count-objects\", \"--verbose\"],\n format: \"utf-8\",\n parser(stdOut) {\n return parseStringResponse(countObjectsResponse(), [parser2], stdOut);\n }\n });\n }\n };\n}\nvar parser2;\nvar init_count_objects = __esm({\n \"src/lib/tasks/count-objects.ts\"() {\n \"use strict\";\n init_utils();\n parser2 = new LineParser(\n /([a-z-]+): (\\d+)$/,\n (result, [key, value]) => {\n const property = asCamelCase(key);\n if (Object.hasOwn(result, property)) {\n result[property] = asNumber(value);\n }\n }\n );\n }\n});\n\n// src/lib/parsers/parse-commit.ts\nfunction parseCommitResult(stdOut) {\n const result = {\n author: null,\n branch: \"\",\n commit: \"\",\n root: false,\n summary: {\n changes: 0,\n insertions: 0,\n deletions: 0\n }\n };\n return parseStringResponse(result, parsers, stdOut);\n}\nvar parsers;\nvar init_parse_commit = __esm({\n \"src/lib/parsers/parse-commit.ts\"() {\n \"use strict\";\n init_utils();\n parsers = [\n new LineParser(/^\\[([^\\s]+)( \\([^)]+\\))? ([^\\]]+)/, (result, [branch, root, commit]) => {\n result.branch = branch;\n result.commit = commit;\n result.root = !!root;\n }),\n new LineParser(/\\s*Author:\\s(.+)/i, (result, [author]) => {\n const parts = author.split(\"<\");\n const email = parts.pop();\n if (!email || !email.includes(\"@\")) {\n return;\n }\n result.author = {\n email: email.substr(0, email.length - 1),\n name: parts.join(\"<\").trim()\n };\n }),\n new LineParser(\n /(\\d+)[^,]*(?:,\\s*(\\d+)[^,]*)(?:,\\s*(\\d+))/g,\n (result, [changes, insertions, deletions]) => {\n result.summary.changes = parseInt(changes, 10) || 0;\n result.summary.insertions = parseInt(insertions, 10) || 0;\n result.summary.deletions = parseInt(deletions, 10) || 0;\n }\n ),\n new LineParser(\n /^(\\d+)[^,]*(?:,\\s*(\\d+)[^(]+\\(([+-]))?/,\n (result, [changes, lines, direction]) => {\n result.summary.changes = parseInt(changes, 10) || 0;\n const count = parseInt(lines, 10) || 0;\n if (direction === \"-\") {\n result.summary.deletions = count;\n } else if (direction === \"+\") {\n result.summary.insertions = count;\n }\n }\n )\n ];\n }\n});\n\n// src/lib/tasks/commit.ts\nfunction commitTask(message, files, customArgs) {\n const commands = [\n \"-c\",\n \"core.abbrev=40\",\n \"commit\",\n ...prefixedArray(message, \"-m\"),\n ...files,\n ...customArgs\n ];\n return {\n commands,\n format: \"utf-8\",\n parser: parseCommitResult\n };\n}\nfunction commit_default() {\n return {\n commit(message, ...rest) {\n const next = trailingFunctionArgument(arguments);\n const task = rejectDeprecatedSignatures(message) || commitTask(\n asArray(message),\n asArray(filterType(rest[0], filterStringOrStringArray, [])),\n [\n ...asStringArray(filterType(rest[1], filterArray, [])),\n ...getTrailingOptions(arguments, 0, true)\n ]\n );\n return this._runTask(task, next);\n }\n };\n function rejectDeprecatedSignatures(message) {\n return !filterStringOrStringArray(message) && configurationErrorTask(\n `git.commit: requires the commit message to be supplied as a string/string[]`\n );\n }\n}\nvar init_commit = __esm({\n \"src/lib/tasks/commit.ts\"() {\n \"use strict\";\n init_parse_commit();\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/first-commit.ts\nfunction first_commit_default() {\n return {\n firstCommit() {\n return this._runTask(\n straightThroughStringTask([\"rev-list\", \"--max-parents=0\", \"HEAD\"], true),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar init_first_commit = __esm({\n \"src/lib/tasks/first-commit.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/hash-object.ts\nfunction hashObjectTask(filePath, write) {\n const commands = [\"hash-object\", filePath];\n if (write) {\n commands.push(\"-w\");\n }\n return straightThroughStringTask(commands, true);\n}\nvar init_hash_object = __esm({\n \"src/lib/tasks/hash-object.ts\"() {\n \"use strict\";\n init_task();\n }\n});\n\n// src/lib/responses/InitSummary.ts\nfunction parseInit(bare, path, text) {\n const response = String(text).trim();\n let result;\n if (result = initResponseRegex.exec(response)) {\n return new InitSummary(bare, path, false, result[1]);\n }\n if (result = reInitResponseRegex.exec(response)) {\n return new InitSummary(bare, path, true, result[1]);\n }\n let gitDir = \"\";\n const tokens = response.split(\" \");\n while (tokens.length) {\n const token = tokens.shift();\n if (token === \"in\") {\n gitDir = tokens.join(\" \");\n break;\n }\n }\n return new InitSummary(bare, path, /^re/i.test(response), gitDir);\n}\nvar InitSummary, initResponseRegex, reInitResponseRegex;\nvar init_InitSummary = __esm({\n \"src/lib/responses/InitSummary.ts\"() {\n \"use strict\";\n InitSummary = class {\n constructor(bare, path, existing, gitDir) {\n this.bare = bare;\n this.path = path;\n this.existing = existing;\n this.gitDir = gitDir;\n }\n };\n initResponseRegex = /^Init.+ repository in (.+)$/;\n reInitResponseRegex = /^Rein.+ in (.+)$/;\n }\n});\n\n// src/lib/tasks/init.ts\nfunction hasBareCommand(command) {\n return command.includes(bareCommand);\n}\nfunction initTask(bare = false, path, customArgs) {\n const commands = [\"init\", ...customArgs];\n if (bare && !hasBareCommand(commands)) {\n commands.splice(1, 0, bareCommand);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return parseInit(commands.includes(\"--bare\"), path, text);\n }\n };\n}\nvar bareCommand;\nvar init_init = __esm({\n \"src/lib/tasks/init.ts\"() {\n \"use strict\";\n init_InitSummary();\n bareCommand = \"--bare\";\n }\n});\n\n// src/lib/args/log-format.ts\nfunction logFormatFromCommand(customArgs) {\n for (let i = 0; i < customArgs.length; i++) {\n const format = logFormatRegex.exec(customArgs[i]);\n if (format) {\n return `--${format[1]}`;\n }\n }\n return \"\" /* NONE */;\n}\nfunction isLogFormat(customArg) {\n return logFormatRegex.test(customArg);\n}\nvar logFormatRegex;\nvar init_log_format = __esm({\n \"src/lib/args/log-format.ts\"() {\n \"use strict\";\n logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/;\n }\n});\n\n// src/lib/responses/DiffSummary.ts\nvar DiffSummary;\nvar init_DiffSummary = __esm({\n \"src/lib/responses/DiffSummary.ts\"() {\n \"use strict\";\n DiffSummary = class {\n constructor() {\n this.changed = 0;\n this.deletions = 0;\n this.insertions = 0;\n this.files = [];\n }\n };\n }\n});\n\n// src/lib/parsers/parse-diff-summary.ts\nfunction getDiffParser(format = \"\" /* NONE */) {\n const parser4 = diffSummaryParsers[format];\n return (stdOut) => parseStringResponse(new DiffSummary(), parser4, stdOut, false);\n}\nvar statParser, numStatParser, nameOnlyParser, nameStatusParser, diffSummaryParsers;\nvar init_parse_diff_summary = __esm({\n \"src/lib/parsers/parse-diff-summary.ts\"() {\n \"use strict\";\n init_log_format();\n init_DiffSummary();\n init_diff_name_status();\n init_utils();\n statParser = [\n new LineParser(\n /^(.+)\\s+\\|\\s+(\\d+)(\\s+[+\\-]+)?$/,\n (result, [file, changes, alterations = \"\"]) => {\n result.files.push({\n file: file.trim(),\n changes: asNumber(changes),\n insertions: alterations.replace(/[^+]/g, \"\").length,\n deletions: alterations.replace(/[^-]/g, \"\").length,\n binary: false\n });\n }\n ),\n new LineParser(\n /^(.+) \\|\\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,\n (result, [file, before, after]) => {\n result.files.push({\n file: file.trim(),\n before: asNumber(before),\n after: asNumber(after),\n binary: true\n });\n }\n ),\n new LineParser(\n /(\\d+) files? changed\\s*((?:, \\d+ [^,]+){0,2})/,\n (result, [changed, summary]) => {\n const inserted = /(\\d+) i/.exec(summary);\n const deleted = /(\\d+) d/.exec(summary);\n result.changed = asNumber(changed);\n result.insertions = asNumber(inserted?.[1]);\n result.deletions = asNumber(deleted?.[1]);\n }\n )\n ];\n numStatParser = [\n new LineParser(\n /(\\d+)\\t(\\d+)\\t(.+)$/,\n (result, [changesInsert, changesDelete, file]) => {\n const insertions = asNumber(changesInsert);\n const deletions = asNumber(changesDelete);\n result.changed++;\n result.insertions += insertions;\n result.deletions += deletions;\n result.files.push({\n file,\n changes: insertions + deletions,\n insertions,\n deletions,\n binary: false\n });\n }\n ),\n new LineParser(/-\\t-\\t(.+)$/, (result, [file]) => {\n result.changed++;\n result.files.push({\n file,\n after: 0,\n before: 0,\n binary: true\n });\n })\n ];\n nameOnlyParser = [\n new LineParser(/(.+)$/, (result, [file]) => {\n result.changed++;\n result.files.push({\n file,\n changes: 0,\n insertions: 0,\n deletions: 0,\n binary: false\n });\n })\n ];\n nameStatusParser = [\n new LineParser(\n /([ACDMRTUXB])([0-9]{0,3})\\t(.[^\\t]*)(\\t(.[^\\t]*))?$/,\n (result, [status, similarity, from, _to, to]) => {\n result.changed++;\n result.files.push({\n file: to ?? from,\n changes: 0,\n insertions: 0,\n deletions: 0,\n binary: false,\n status: orVoid(isDiffNameStatus(status) && status),\n from: orVoid(!!to && from !== to && from),\n similarity: asNumber(similarity)\n });\n }\n )\n ];\n diffSummaryParsers = {\n [\"\" /* NONE */]: statParser,\n [\"--stat\" /* STAT */]: statParser,\n [\"--numstat\" /* NUM_STAT */]: numStatParser,\n [\"--name-status\" /* NAME_STATUS */]: nameStatusParser,\n [\"--name-only\" /* NAME_ONLY */]: nameOnlyParser\n };\n }\n});\n\n// src/lib/parsers/parse-list-log-summary.ts\nfunction lineBuilder(tokens, fields) {\n return fields.reduce(\n (line, field, index) => {\n line[field] = tokens[index] || \"\";\n return line;\n },\n /* @__PURE__ */ Object.create({ diff: null })\n );\n}\nfunction createListLogSummaryParser(splitter = SPLITTER, fields = defaultFieldNames, logFormat = \"\" /* NONE */) {\n const parseDiffResult = getDiffParser(logFormat);\n return function(stdOut) {\n const all = toLinesWithContent(\n stdOut.trim(),\n false,\n START_BOUNDARY\n ).map(function(item) {\n const lineDetail = item.split(COMMIT_BOUNDARY);\n const listLogLine = lineBuilder(lineDetail[0].split(splitter), fields);\n if (lineDetail.length > 1 && !!lineDetail[1].trim()) {\n listLogLine.diff = parseDiffResult(lineDetail[1]);\n }\n return listLogLine;\n });\n return {\n all,\n latest: all.length && all[0] || null,\n total: all.length\n };\n };\n}\nvar START_BOUNDARY, COMMIT_BOUNDARY, SPLITTER, defaultFieldNames;\nvar init_parse_list_log_summary = __esm({\n \"src/lib/parsers/parse-list-log-summary.ts\"() {\n \"use strict\";\n init_utils();\n init_parse_diff_summary();\n init_log_format();\n START_BOUNDARY = \"\\xF2\\xF2\\xF2\\xF2\\xF2\\xF2 \";\n COMMIT_BOUNDARY = \" \\xF2\\xF2\";\n SPLITTER = \" \\xF2 \";\n defaultFieldNames = [\"hash\", \"date\", \"message\", \"refs\", \"author_name\", \"author_email\"];\n }\n});\n\n// src/lib/tasks/diff.ts\nvar diff_exports = {};\n__export(diff_exports, {\n diffSummaryTask: () => diffSummaryTask,\n validateLogFormatConfig: () => validateLogFormatConfig\n});\nfunction diffSummaryTask(customArgs) {\n let logFormat = logFormatFromCommand(customArgs);\n const commands = [\"diff\"];\n if (logFormat === \"\" /* NONE */) {\n logFormat = \"--stat\" /* STAT */;\n commands.push(\"--stat=4096\");\n }\n commands.push(...customArgs);\n return validateLogFormatConfig(commands) || {\n commands,\n format: \"utf-8\",\n parser: getDiffParser(logFormat)\n };\n}\nfunction validateLogFormatConfig(customArgs) {\n const flags = customArgs.filter(isLogFormat);\n if (flags.length > 1) {\n return configurationErrorTask(\n `Summary flags are mutually exclusive - pick one of ${flags.join(\",\")}`\n );\n }\n if (flags.length && customArgs.includes(\"-z\")) {\n return configurationErrorTask(\n `Summary flag ${flags} parsing is not compatible with null termination option '-z'`\n );\n }\n}\nvar init_diff = __esm({\n \"src/lib/tasks/diff.ts\"() {\n \"use strict\";\n init_log_format();\n init_parse_diff_summary();\n init_task();\n }\n});\n\n// src/lib/tasks/log.ts\nfunction prettyFormat(format, splitter) {\n const fields = [];\n const formatStr = [];\n Object.keys(format).forEach((field) => {\n fields.push(field);\n formatStr.push(String(format[field]));\n });\n return [fields, formatStr.join(splitter)];\n}\nfunction userOptions(input) {\n return Object.keys(input).reduce((out, key) => {\n if (!(key in excludeOptions)) {\n out[key] = input[key];\n }\n return out;\n }, {});\n}\nfunction parseLogOptions(opt = {}, customArgs = []) {\n const splitter = filterType(opt.splitter, filterString, SPLITTER);\n const format = filterPlainObject(opt.format) ? opt.format : {\n hash: \"%H\",\n date: opt.strictDate === false ? \"%ai\" : \"%aI\",\n message: \"%s\",\n refs: \"%D\",\n body: opt.multiLine ? \"%B\" : \"%b\",\n author_name: opt.mailMap !== false ? \"%aN\" : \"%an\",\n author_email: opt.mailMap !== false ? \"%aE\" : \"%ae\"\n };\n const [fields, formatStr] = prettyFormat(format, splitter);\n const suffix = [];\n const command = [\n `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`,\n ...customArgs\n ];\n const maxCount = opt.n || opt[\"max-count\"] || opt.maxCount;\n if (maxCount) {\n command.push(`--max-count=${maxCount}`);\n }\n if (opt.from || opt.to) {\n const rangeOperator = opt.symmetric !== false ? \"...\" : \"..\";\n suffix.push(`${opt.from || \"\"}${rangeOperator}${opt.to || \"\"}`);\n }\n if (filterString(opt.file)) {\n command.push(\"--follow\", pathspec(opt.file));\n }\n appendTaskOptions(userOptions(opt), command);\n return {\n fields,\n splitter,\n commands: [...command, ...suffix]\n };\n}\nfunction logTask(splitter, fields, customArgs) {\n const parser4 = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs));\n return {\n commands: [\"log\", ...customArgs],\n format: \"utf-8\",\n parser: parser4\n };\n}\nfunction log_default() {\n return {\n log(...rest) {\n const next = trailingFunctionArgument(arguments);\n const options = parseLogOptions(\n trailingOptionsArgument(arguments),\n asStringArray(filterType(arguments[0], filterArray, []))\n );\n const task = rejectDeprecatedSignatures(...rest) || validateLogFormatConfig(options.commands) || createLogTask(options);\n return this._runTask(task, next);\n }\n };\n function createLogTask(options) {\n return logTask(options.splitter, options.fields, options.commands);\n }\n function rejectDeprecatedSignatures(from, to) {\n return filterString(from) && filterString(to) && configurationErrorTask(\n `git.log(string, string) should be replaced with git.log({ from: string, to: string })`\n );\n }\n}\nvar excludeOptions;\nvar init_log = __esm({\n \"src/lib/tasks/log.ts\"() {\n \"use strict\";\n init_log_format();\n init_pathspec();\n init_parse_list_log_summary();\n init_utils();\n init_task();\n init_diff();\n excludeOptions = /* @__PURE__ */ ((excludeOptions2) => {\n excludeOptions2[excludeOptions2[\"--pretty\"] = 0] = \"--pretty\";\n excludeOptions2[excludeOptions2[\"max-count\"] = 1] = \"max-count\";\n excludeOptions2[excludeOptions2[\"maxCount\"] = 2] = \"maxCount\";\n excludeOptions2[excludeOptions2[\"n\"] = 3] = \"n\";\n excludeOptions2[excludeOptions2[\"file\"] = 4] = \"file\";\n excludeOptions2[excludeOptions2[\"format\"] = 5] = \"format\";\n excludeOptions2[excludeOptions2[\"from\"] = 6] = \"from\";\n excludeOptions2[excludeOptions2[\"to\"] = 7] = \"to\";\n excludeOptions2[excludeOptions2[\"splitter\"] = 8] = \"splitter\";\n excludeOptions2[excludeOptions2[\"symmetric\"] = 9] = \"symmetric\";\n excludeOptions2[excludeOptions2[\"mailMap\"] = 10] = \"mailMap\";\n excludeOptions2[excludeOptions2[\"multiLine\"] = 11] = \"multiLine\";\n excludeOptions2[excludeOptions2[\"strictDate\"] = 12] = \"strictDate\";\n return excludeOptions2;\n })(excludeOptions || {});\n }\n});\n\n// src/lib/responses/MergeSummary.ts\nvar MergeSummaryConflict, MergeSummaryDetail;\nvar init_MergeSummary = __esm({\n \"src/lib/responses/MergeSummary.ts\"() {\n \"use strict\";\n MergeSummaryConflict = class {\n constructor(reason, file = null, meta) {\n this.reason = reason;\n this.file = file;\n this.meta = meta;\n }\n toString() {\n return `${this.file}:${this.reason}`;\n }\n };\n MergeSummaryDetail = class {\n constructor() {\n this.conflicts = [];\n this.merges = [];\n this.result = \"success\";\n }\n get failed() {\n return this.conflicts.length > 0;\n }\n get reason() {\n return this.result;\n }\n toString() {\n if (this.conflicts.length) {\n return `CONFLICTS: ${this.conflicts.join(\", \")}`;\n }\n return \"OK\";\n }\n };\n }\n});\n\n// src/lib/responses/PullSummary.ts\nvar PullSummary, PullFailedSummary;\nvar init_PullSummary = __esm({\n \"src/lib/responses/PullSummary.ts\"() {\n \"use strict\";\n PullSummary = class {\n constructor() {\n this.remoteMessages = {\n all: []\n };\n this.created = [];\n this.deleted = [];\n this.files = [];\n this.deletions = {};\n this.insertions = {};\n this.summary = {\n changes: 0,\n deletions: 0,\n insertions: 0\n };\n }\n };\n PullFailedSummary = class {\n constructor() {\n this.remote = \"\";\n this.hash = {\n local: \"\",\n remote: \"\"\n };\n this.branch = {\n local: \"\",\n remote: \"\"\n };\n this.message = \"\";\n }\n toString() {\n return this.message;\n }\n };\n }\n});\n\n// src/lib/parsers/parse-remote-objects.ts\nfunction objectEnumerationResult(remoteMessages) {\n return remoteMessages.objects = remoteMessages.objects || {\n compressing: 0,\n counting: 0,\n enumerating: 0,\n packReused: 0,\n reused: { count: 0, delta: 0 },\n total: { count: 0, delta: 0 }\n };\n}\nfunction asObjectCount(source) {\n const count = /^\\s*(\\d+)/.exec(source);\n const delta = /delta (\\d+)/i.exec(source);\n return {\n count: asNumber(count && count[1] || \"0\"),\n delta: asNumber(delta && delta[1] || \"0\")\n };\n}\nvar remoteMessagesObjectParsers;\nvar init_parse_remote_objects = __esm({\n \"src/lib/parsers/parse-remote-objects.ts\"() {\n \"use strict\";\n init_utils();\n remoteMessagesObjectParsers = [\n new RemoteLineParser(\n /^remote:\\s*(enumerating|counting|compressing) objects: (\\d+),/i,\n (result, [action, count]) => {\n const key = action.toLowerCase();\n const enumeration = objectEnumerationResult(result.remoteMessages);\n Object.assign(enumeration, { [key]: asNumber(count) });\n }\n ),\n new RemoteLineParser(\n /^remote:\\s*(enumerating|counting|compressing) objects: \\d+% \\(\\d+\\/(\\d+)\\),/i,\n (result, [action, count]) => {\n const key = action.toLowerCase();\n const enumeration = objectEnumerationResult(result.remoteMessages);\n Object.assign(enumeration, { [key]: asNumber(count) });\n }\n ),\n new RemoteLineParser(\n /total ([^,]+), reused ([^,]+), pack-reused (\\d+)/i,\n (result, [total, reused, packReused]) => {\n const objects = objectEnumerationResult(result.remoteMessages);\n objects.total = asObjectCount(total);\n objects.reused = asObjectCount(reused);\n objects.packReused = asNumber(packReused);\n }\n )\n ];\n }\n});\n\n// src/lib/parsers/parse-remote-messages.ts\nfunction parseRemoteMessages(_stdOut, stdErr) {\n return parseStringResponse({ remoteMessages: new RemoteMessageSummary() }, parsers2, stdErr);\n}\nvar parsers2, RemoteMessageSummary;\nvar init_parse_remote_messages = __esm({\n \"src/lib/parsers/parse-remote-messages.ts\"() {\n \"use strict\";\n init_utils();\n init_parse_remote_objects();\n parsers2 = [\n new RemoteLineParser(/^remote:\\s*(.+)$/, (result, [text]) => {\n result.remoteMessages.all.push(text.trim());\n return false;\n }),\n ...remoteMessagesObjectParsers,\n new RemoteLineParser(\n [/create a (?:pull|merge) request/i, /\\s(https?:\\/\\/\\S+)$/],\n (result, [pullRequestUrl]) => {\n result.remoteMessages.pullRequestUrl = pullRequestUrl;\n }\n ),\n new RemoteLineParser(\n [/found (\\d+) vulnerabilities.+\\(([^)]+)\\)/i, /\\s(https?:\\/\\/\\S+)$/],\n (result, [count, summary, url]) => {\n result.remoteMessages.vulnerabilities = {\n count: asNumber(count),\n summary,\n url\n };\n }\n )\n ];\n RemoteMessageSummary = class {\n constructor() {\n this.all = [];\n }\n };\n }\n});\n\n// src/lib/parsers/parse-pull.ts\nfunction parsePullErrorResult(stdOut, stdErr) {\n const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]);\n return pullError.message && pullError;\n}\nvar FILE_UPDATE_REGEX, SUMMARY_REGEX, ACTION_REGEX, parsers3, errorParsers, parsePullDetail, parsePullResult;\nvar init_parse_pull = __esm({\n \"src/lib/parsers/parse-pull.ts\"() {\n \"use strict\";\n init_PullSummary();\n init_utils();\n init_parse_remote_messages();\n FILE_UPDATE_REGEX = /^\\s*(.+?)\\s+\\|\\s+\\d+\\s*(\\+*)(-*)/;\n SUMMARY_REGEX = /(\\d+)\\D+((\\d+)\\D+\\(\\+\\))?(\\D+(\\d+)\\D+\\(-\\))?/;\n ACTION_REGEX = /^(create|delete) mode \\d+ (.+)/;\n parsers3 = [\n new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => {\n result.files.push(file);\n if (insertions) {\n result.insertions[file] = insertions.length;\n }\n if (deletions) {\n result.deletions[file] = deletions.length;\n }\n }),\n new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => {\n if (insertions !== void 0 || deletions !== void 0) {\n result.summary.changes = +changes || 0;\n result.summary.insertions = +insertions || 0;\n result.summary.deletions = +deletions || 0;\n return true;\n }\n return false;\n }),\n new LineParser(ACTION_REGEX, (result, [action, file]) => {\n append(result.files, file);\n append(action === \"create\" ? result.created : result.deleted, file);\n })\n ];\n errorParsers = [\n new LineParser(/^from\\s(.+)$/i, (result, [remote]) => void (result.remote = remote)),\n new LineParser(/^fatal:\\s(.+)$/, (result, [message]) => void (result.message = message)),\n new LineParser(\n /([a-z0-9]+)\\.\\.([a-z0-9]+)\\s+(\\S+)\\s+->\\s+(\\S+)$/,\n (result, [hashLocal, hashRemote, branchLocal, branchRemote]) => {\n result.branch.local = branchLocal;\n result.hash.local = hashLocal;\n result.branch.remote = branchRemote;\n result.hash.remote = hashRemote;\n }\n )\n ];\n parsePullDetail = (stdOut, stdErr) => {\n return parseStringResponse(new PullSummary(), parsers3, [stdOut, stdErr]);\n };\n parsePullResult = (stdOut, stdErr) => {\n return Object.assign(\n new PullSummary(),\n parsePullDetail(stdOut, stdErr),\n parseRemoteMessages(stdOut, stdErr)\n );\n };\n }\n});\n\n// src/lib/parsers/parse-merge.ts\nvar parsers4, parseMergeResult, parseMergeDetail;\nvar init_parse_merge = __esm({\n \"src/lib/parsers/parse-merge.ts\"() {\n \"use strict\";\n init_MergeSummary();\n init_utils();\n init_parse_pull();\n parsers4 = [\n new LineParser(/^Auto-merging\\s+(.+)$/, (summary, [autoMerge]) => {\n summary.merges.push(autoMerge);\n }),\n new LineParser(/^CONFLICT\\s+\\((.+)\\): Merge conflict in (.+)$/, (summary, [reason, file]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, file));\n }),\n new LineParser(\n /^CONFLICT\\s+\\((.+\\/delete)\\): (.+) deleted in (.+) and/,\n (summary, [reason, file, deleteRef]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, file, { deleteRef }));\n }\n ),\n new LineParser(/^CONFLICT\\s+\\((.+)\\):/, (summary, [reason]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, null));\n }),\n new LineParser(/^Automatic merge failed;\\s+(.+)$/, (summary, [result]) => {\n summary.result = result;\n })\n ];\n parseMergeResult = (stdOut, stdErr) => {\n return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr));\n };\n parseMergeDetail = (stdOut) => {\n return parseStringResponse(new MergeSummaryDetail(), parsers4, stdOut);\n };\n }\n});\n\n// src/lib/tasks/merge.ts\nfunction mergeTask(customArgs) {\n if (!customArgs.length) {\n return configurationErrorTask(\"Git.merge requires at least one option\");\n }\n return {\n commands: [\"merge\", ...customArgs],\n format: \"utf-8\",\n parser(stdOut, stdErr) {\n const merge = parseMergeResult(stdOut, stdErr);\n if (merge.failed) {\n throw new GitResponseError(merge);\n }\n return merge;\n }\n };\n}\nvar init_merge = __esm({\n \"src/lib/tasks/merge.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_parse_merge();\n init_task();\n }\n});\n\n// src/lib/parsers/parse-push.ts\nfunction pushResultPushedItem(local, remote, status) {\n const deleted = status.includes(\"deleted\");\n const tag = status.includes(\"tag\") || /^refs\\/tags/.test(local);\n const alreadyUpdated = !status.includes(\"new\");\n return {\n deleted,\n tag,\n branch: !tag,\n new: !alreadyUpdated,\n alreadyUpdated,\n local,\n remote\n };\n}\nvar parsers5, parsePushResult, parsePushDetail;\nvar init_parse_push = __esm({\n \"src/lib/parsers/parse-push.ts\"() {\n \"use strict\";\n init_utils();\n init_parse_remote_messages();\n parsers5 = [\n new LineParser(/^Pushing to (.+)$/, (result, [repo]) => {\n result.repo = repo;\n }),\n new LineParser(/^updating local tracking ref '(.+)'/, (result, [local]) => {\n result.ref = {\n ...result.ref || {},\n local\n };\n }),\n new LineParser(/^[=*-]\\s+([^:]+):(\\S+)\\s+\\[(.+)]$/, (result, [local, remote, type]) => {\n result.pushed.push(pushResultPushedItem(local, remote, type));\n }),\n new LineParser(\n /^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,\n (result, [local, remote, remoteName]) => {\n result.branch = {\n ...result.branch || {},\n local,\n remote,\n remoteName\n };\n }\n ),\n new LineParser(\n /^([^:]+):(\\S+)\\s+([a-z0-9]+)\\.\\.([a-z0-9]+)$/,\n (result, [local, remote, from, to]) => {\n result.update = {\n head: {\n local,\n remote\n },\n hash: {\n from,\n to\n }\n };\n }\n )\n ];\n parsePushResult = (stdOut, stdErr) => {\n const pushDetail = parsePushDetail(stdOut, stdErr);\n const responseDetail = parseRemoteMessages(stdOut, stdErr);\n return {\n ...pushDetail,\n ...responseDetail\n };\n };\n parsePushDetail = (stdOut, stdErr) => {\n return parseStringResponse({ pushed: [] }, parsers5, [stdOut, stdErr]);\n };\n }\n});\n\n// src/lib/tasks/push.ts\nvar push_exports = {};\n__export(push_exports, {\n pushTagsTask: () => pushTagsTask,\n pushTask: () => pushTask\n});\nfunction pushTagsTask(ref = {}, customArgs) {\n append(customArgs, \"--tags\");\n return pushTask(ref, customArgs);\n}\nfunction pushTask(ref = {}, customArgs) {\n const commands = [\"push\", ...customArgs];\n if (ref.branch) {\n commands.splice(1, 0, ref.branch);\n }\n if (ref.remote) {\n commands.splice(1, 0, ref.remote);\n }\n remove(commands, \"-v\");\n append(commands, \"--verbose\");\n append(commands, \"--porcelain\");\n return {\n commands,\n format: \"utf-8\",\n parser: parsePushResult\n };\n}\nvar init_push = __esm({\n \"src/lib/tasks/push.ts\"() {\n \"use strict\";\n init_parse_push();\n init_utils();\n }\n});\n\n// src/lib/tasks/show.ts\nfunction show_default() {\n return {\n showBuffer() {\n const commands = [\"show\", ...getTrailingOptions(arguments, 1)];\n if (!commands.includes(\"--binary\")) {\n commands.splice(1, 0, \"--binary\");\n }\n return this._runTask(\n straightThroughBufferTask(commands),\n trailingFunctionArgument(arguments)\n );\n },\n show() {\n const commands = [\"show\", ...getTrailingOptions(arguments, 1)];\n return this._runTask(\n straightThroughStringTask(commands),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar init_show = __esm({\n \"src/lib/tasks/show.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/responses/FileStatusSummary.ts\nvar fromPathRegex, FileStatusSummary;\nvar init_FileStatusSummary = __esm({\n \"src/lib/responses/FileStatusSummary.ts\"() {\n \"use strict\";\n fromPathRegex = /^(.+)\\0(.+)$/;\n FileStatusSummary = class {\n constructor(path, index, working_dir) {\n this.path = path;\n this.index = index;\n this.working_dir = working_dir;\n if (index === \"R\" || working_dir === \"R\") {\n const detail = fromPathRegex.exec(path) || [null, path, path];\n this.from = detail[2] || \"\";\n this.path = detail[1] || \"\";\n }\n }\n };\n }\n});\n\n// src/lib/responses/StatusSummary.ts\nfunction renamedFile(line) {\n const [to, from] = line.split(NULL);\n return {\n from: from || to,\n to\n };\n}\nfunction parser3(indexX, indexY, handler) {\n return [`${indexX}${indexY}`, handler];\n}\nfunction conflicts(indexX, ...indexY) {\n return indexY.map((y) => parser3(indexX, y, (result, file) => append(result.conflicted, file)));\n}\nfunction splitLine(result, lineStr) {\n const trimmed2 = lineStr.trim();\n switch (\" \") {\n case trimmed2.charAt(2):\n return data(trimmed2.charAt(0), trimmed2.charAt(1), trimmed2.substr(3));\n case trimmed2.charAt(1):\n return data(\" \" /* NONE */, trimmed2.charAt(0), trimmed2.substr(2));\n default:\n return;\n }\n function data(index, workingDir, path) {\n const raw = `${index}${workingDir}`;\n const handler = parsers6.get(raw);\n if (handler) {\n handler(result, path);\n }\n if (raw !== \"##\" && raw !== \"!!\") {\n result.files.push(new FileStatusSummary(path, index, workingDir));\n }\n }\n}\nvar StatusSummary, parsers6, parseStatusSummary;\nvar init_StatusSummary = __esm({\n \"src/lib/responses/StatusSummary.ts\"() {\n \"use strict\";\n init_utils();\n init_FileStatusSummary();\n StatusSummary = class {\n constructor() {\n this.not_added = [];\n this.conflicted = [];\n this.created = [];\n this.deleted = [];\n this.ignored = void 0;\n this.modified = [];\n this.renamed = [];\n this.files = [];\n this.staged = [];\n this.ahead = 0;\n this.behind = 0;\n this.current = null;\n this.tracking = null;\n this.detached = false;\n this.isClean = () => {\n return !this.files.length;\n };\n }\n };\n parsers6 = new Map([\n parser3(\n \" \" /* NONE */,\n \"A\" /* ADDED */,\n (result, file) => append(result.created, file)\n ),\n parser3(\n \" \" /* NONE */,\n \"D\" /* DELETED */,\n (result, file) => append(result.deleted, file)\n ),\n parser3(\n \" \" /* NONE */,\n \"M\" /* MODIFIED */,\n (result, file) => append(result.modified, file)\n ),\n parser3(\n \"A\" /* ADDED */,\n \" \" /* NONE */,\n (result, file) => append(result.created, file) && append(result.staged, file)\n ),\n parser3(\n \"A\" /* ADDED */,\n \"M\" /* MODIFIED */,\n (result, file) => append(result.created, file) && append(result.staged, file) && append(result.modified, file)\n ),\n parser3(\n \"D\" /* DELETED */,\n \" \" /* NONE */,\n (result, file) => append(result.deleted, file) && append(result.staged, file)\n ),\n parser3(\n \"M\" /* MODIFIED */,\n \" \" /* NONE */,\n (result, file) => append(result.modified, file) && append(result.staged, file)\n ),\n parser3(\n \"M\" /* MODIFIED */,\n \"M\" /* MODIFIED */,\n (result, file) => append(result.modified, file) && append(result.staged, file)\n ),\n parser3(\"R\" /* RENAMED */, \" \" /* NONE */, (result, file) => {\n append(result.renamed, renamedFile(file));\n }),\n parser3(\"R\" /* RENAMED */, \"M\" /* MODIFIED */, (result, file) => {\n const renamed = renamedFile(file);\n append(result.renamed, renamed);\n append(result.modified, renamed.to);\n }),\n parser3(\"!\" /* IGNORED */, \"!\" /* IGNORED */, (_result, _file) => {\n append(_result.ignored = _result.ignored || [], _file);\n }),\n parser3(\n \"?\" /* UNTRACKED */,\n \"?\" /* UNTRACKED */,\n (result, file) => append(result.not_added, file)\n ),\n ...conflicts(\"A\" /* ADDED */, \"A\" /* ADDED */, \"U\" /* UNMERGED */),\n ...conflicts(\n \"D\" /* DELETED */,\n \"D\" /* DELETED */,\n \"U\" /* UNMERGED */\n ),\n ...conflicts(\n \"U\" /* UNMERGED */,\n \"A\" /* ADDED */,\n \"D\" /* DELETED */,\n \"U\" /* UNMERGED */\n ),\n [\n \"##\",\n (result, line) => {\n const aheadReg = /ahead (\\d+)/;\n const behindReg = /behind (\\d+)/;\n const currentReg = /^(.+?(?=(?:\\.{3}|\\s|$)))/;\n const trackingReg = /\\.{3}(\\S*)/;\n const onEmptyBranchReg = /\\son\\s(\\S+?)(?=\\.{3}|$)/;\n let regexResult = aheadReg.exec(line);\n result.ahead = regexResult && +regexResult[1] || 0;\n regexResult = behindReg.exec(line);\n result.behind = regexResult && +regexResult[1] || 0;\n regexResult = currentReg.exec(line);\n result.current = filterType(regexResult?.[1], filterString, null);\n regexResult = trackingReg.exec(line);\n result.tracking = filterType(regexResult?.[1], filterString, null);\n regexResult = onEmptyBranchReg.exec(line);\n if (regexResult) {\n result.current = filterType(regexResult?.[1], filterString, result.current);\n }\n result.detached = /\\(no branch\\)/.test(line);\n }\n ]\n ]);\n parseStatusSummary = function(text) {\n const lines = text.split(NULL);\n const status = new StatusSummary();\n for (let i = 0, l = lines.length; i < l; ) {\n let line = lines[i++].trim();\n if (!line) {\n continue;\n }\n if (line.charAt(0) === \"R\" /* RENAMED */) {\n line += NULL + (lines[i++] || \"\");\n }\n splitLine(status, line);\n }\n return status;\n };\n }\n});\n\n// src/lib/tasks/status.ts\nfunction statusTask(customArgs) {\n const commands = [\n \"status\",\n \"--porcelain\",\n \"-b\",\n \"-u\",\n \"--null\",\n ...customArgs.filter((arg) => !ignoredOptions.includes(arg))\n ];\n return {\n format: \"utf-8\",\n commands,\n parser(text) {\n return parseStatusSummary(text);\n }\n };\n}\nvar ignoredOptions;\nvar init_status = __esm({\n \"src/lib/tasks/status.ts\"() {\n \"use strict\";\n init_StatusSummary();\n ignoredOptions = [\"--null\", \"-z\"];\n }\n});\n\n// src/lib/tasks/version.ts\nfunction versionResponse(major = 0, minor = 0, patch = 0, agent = \"\", installed = true) {\n return Object.defineProperty(\n {\n major,\n minor,\n patch,\n agent,\n installed\n },\n \"toString\",\n {\n value() {\n return `${this.major}.${this.minor}.${this.patch}`;\n },\n configurable: false,\n enumerable: false\n }\n );\n}\nfunction notInstalledResponse() {\n return versionResponse(0, 0, 0, \"\", false);\n}\nfunction version_default() {\n return {\n version() {\n return this._runTask({\n commands: [\"--version\"],\n format: \"utf-8\",\n parser: versionParser,\n onError(result, error, done, fail) {\n if (result.exitCode === -2 /* NOT_FOUND */) {\n return done(Buffer.from(NOT_INSTALLED));\n }\n fail(error);\n }\n });\n }\n };\n}\nfunction versionParser(stdOut) {\n if (stdOut === NOT_INSTALLED) {\n return notInstalledResponse();\n }\n return parseStringResponse(versionResponse(0, 0, 0, stdOut), parsers7, stdOut);\n}\nvar NOT_INSTALLED, parsers7;\nvar init_version = __esm({\n \"src/lib/tasks/version.ts\"() {\n \"use strict\";\n init_utils();\n NOT_INSTALLED = \"installed=false\";\n parsers7 = [\n new LineParser(\n /version (\\d+)\\.(\\d+)\\.(\\d+)(?:\\s*\\((.+)\\))?/,\n (result, [major, minor, patch, agent = \"\"]) => {\n Object.assign(\n result,\n versionResponse(asNumber(major), asNumber(minor), asNumber(patch), agent)\n );\n }\n ),\n new LineParser(\n /version (\\d+)\\.(\\d+)\\.(\\D+)(.+)?$/,\n (result, [major, minor, patch, agent = \"\"]) => {\n Object.assign(result, versionResponse(asNumber(major), asNumber(minor), patch, agent));\n }\n )\n ];\n }\n});\n\n// src/lib/simple-git-api.ts\nvar simple_git_api_exports = {};\n__export(simple_git_api_exports, {\n SimpleGitApi: () => SimpleGitApi\n});\nvar SimpleGitApi;\nvar init_simple_git_api = __esm({\n \"src/lib/simple-git-api.ts\"() {\n \"use strict\";\n init_task_callback();\n init_change_working_directory();\n init_checkout();\n init_count_objects();\n init_commit();\n init_config();\n init_first_commit();\n init_grep();\n init_hash_object();\n init_init();\n init_log();\n init_merge();\n init_push();\n init_show();\n init_status();\n init_task();\n init_version();\n init_utils();\n SimpleGitApi = class {\n constructor(_executor) {\n this._executor = _executor;\n }\n _runTask(task, then) {\n const chain = this._executor.chain();\n const promise = chain.push(task);\n if (then) {\n taskCallback(task, promise, then);\n }\n return Object.create(this, {\n then: { value: promise.then.bind(promise) },\n catch: { value: promise.catch.bind(promise) },\n _executor: { value: chain }\n });\n }\n add(files) {\n return this._runTask(\n straightThroughStringTask([\"add\", ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n }\n cwd(directory) {\n const next = trailingFunctionArgument(arguments);\n if (typeof directory === \"string\") {\n return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next);\n }\n if (typeof directory?.path === \"string\") {\n return this._runTask(\n changeWorkingDirectoryTask(\n directory.path,\n directory.root && this._executor || void 0\n ),\n next\n );\n }\n return this._runTask(\n configurationErrorTask(\"Git.cwd: workingDirectory must be supplied as a string\"),\n next\n );\n }\n hashObject(path, write) {\n return this._runTask(\n hashObjectTask(path, write === true),\n trailingFunctionArgument(arguments)\n );\n }\n init(bare) {\n return this._runTask(\n initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n merge() {\n return this._runTask(\n mergeTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n mergeFromTo(remote, branch) {\n if (!(filterString(remote) && filterString(branch))) {\n return this._runTask(\n configurationErrorTask(\n `Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`\n )\n );\n }\n return this._runTask(\n mergeTask([remote, branch, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments, false)\n );\n }\n outputHandler(handler) {\n this._executor.outputHandler = handler;\n return this;\n }\n push() {\n const task = pushTask(\n {\n remote: filterType(arguments[0], filterString),\n branch: filterType(arguments[1], filterString)\n },\n getTrailingOptions(arguments)\n );\n return this._runTask(task, trailingFunctionArgument(arguments));\n }\n stash() {\n return this._runTask(\n straightThroughStringTask([\"stash\", ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n }\n status() {\n return this._runTask(\n statusTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n };\n Object.assign(\n SimpleGitApi.prototype,\n checkout_default(),\n commit_default(),\n config_default(),\n count_objects_default(),\n first_commit_default(),\n grep_default(),\n log_default(),\n show_default(),\n version_default()\n );\n }\n});\n\n// src/lib/runners/scheduler.ts\nvar scheduler_exports = {};\n__export(scheduler_exports, {\n Scheduler: () => Scheduler\n});\nimport { createDeferred } from \"@kwsites/promise-deferred\";\nvar createScheduledTask, Scheduler;\nvar init_scheduler = __esm({\n \"src/lib/runners/scheduler.ts\"() {\n \"use strict\";\n init_utils();\n init_git_logger();\n createScheduledTask = /* @__PURE__ */ (() => {\n let id = 0;\n return () => {\n id++;\n const { promise, done } = createDeferred();\n return {\n promise,\n done,\n id\n };\n };\n })();\n Scheduler = class {\n constructor(concurrency = 2) {\n this.concurrency = concurrency;\n this.logger = createLogger(\"\", \"scheduler\");\n this.pending = [];\n this.running = [];\n this.logger(`Constructed, concurrency=%s`, concurrency);\n }\n schedule() {\n if (!this.pending.length || this.running.length >= this.concurrency) {\n this.logger(\n `Schedule attempt ignored, pending=%s running=%s concurrency=%s`,\n this.pending.length,\n this.running.length,\n this.concurrency\n );\n return;\n }\n const task = append(this.running, this.pending.shift());\n this.logger(`Attempting id=%s`, task.id);\n task.done(() => {\n this.logger(`Completing id=`, task.id);\n remove(this.running, task);\n this.schedule();\n });\n }\n next() {\n const { promise, id } = append(this.pending, createScheduledTask());\n this.logger(`Scheduling id=%s`, id);\n this.schedule();\n return promise;\n }\n };\n }\n});\n\n// src/lib/tasks/apply-patch.ts\nvar apply_patch_exports = {};\n__export(apply_patch_exports, {\n applyPatchTask: () => applyPatchTask\n});\nfunction applyPatchTask(patches, customArgs) {\n return straightThroughStringTask([\"apply\", ...customArgs, ...patches]);\n}\nvar init_apply_patch = __esm({\n \"src/lib/tasks/apply-patch.ts\"() {\n \"use strict\";\n init_task();\n }\n});\n\n// src/lib/responses/BranchDeleteSummary.ts\nfunction branchDeletionSuccess(branch, hash) {\n return {\n branch,\n hash,\n success: true\n };\n}\nfunction branchDeletionFailure(branch) {\n return {\n branch,\n hash: null,\n success: false\n };\n}\nvar BranchDeletionBatch;\nvar init_BranchDeleteSummary = __esm({\n \"src/lib/responses/BranchDeleteSummary.ts\"() {\n \"use strict\";\n BranchDeletionBatch = class {\n constructor() {\n this.all = [];\n this.branches = {};\n this.errors = [];\n }\n get success() {\n return !this.errors.length;\n }\n };\n }\n});\n\n// src/lib/parsers/parse-branch-delete.ts\nfunction hasBranchDeletionError(data, processExitCode) {\n return processExitCode === 1 /* ERROR */ && deleteErrorRegex.test(data);\n}\nvar deleteSuccessRegex, deleteErrorRegex, parsers8, parseBranchDeletions;\nvar init_parse_branch_delete = __esm({\n \"src/lib/parsers/parse-branch-delete.ts\"() {\n \"use strict\";\n init_BranchDeleteSummary();\n init_utils();\n deleteSuccessRegex = /(\\S+)\\s+\\(\\S+\\s([^)]+)\\)/;\n deleteErrorRegex = /^error[^']+'([^']+)'/m;\n parsers8 = [\n new LineParser(deleteSuccessRegex, (result, [branch, hash]) => {\n const deletion = branchDeletionSuccess(branch, hash);\n result.all.push(deletion);\n result.branches[branch] = deletion;\n }),\n new LineParser(deleteErrorRegex, (result, [branch]) => {\n const deletion = branchDeletionFailure(branch);\n result.errors.push(deletion);\n result.all.push(deletion);\n result.branches[branch] = deletion;\n })\n ];\n parseBranchDeletions = (stdOut, stdErr) => {\n return parseStringResponse(new BranchDeletionBatch(), parsers8, [stdOut, stdErr]);\n };\n }\n});\n\n// src/lib/responses/BranchSummary.ts\nvar BranchSummaryResult;\nvar init_BranchSummary = __esm({\n \"src/lib/responses/BranchSummary.ts\"() {\n \"use strict\";\n BranchSummaryResult = class {\n constructor() {\n this.all = [];\n this.branches = {};\n this.current = \"\";\n this.detached = false;\n }\n push(status, detached, name, commit, label) {\n if (status === \"*\" /* CURRENT */) {\n this.detached = detached;\n this.current = name;\n }\n this.all.push(name);\n this.branches[name] = {\n current: status === \"*\" /* CURRENT */,\n linkedWorkTree: status === \"+\" /* LINKED */,\n name,\n commit,\n label\n };\n }\n };\n }\n});\n\n// src/lib/parsers/parse-branch.ts\nfunction branchStatus(input) {\n return input ? input.charAt(0) : \"\";\n}\nfunction parseBranchSummary(stdOut, currentOnly = false) {\n return parseStringResponse(\n new BranchSummaryResult(),\n currentOnly ? [currentBranchParser] : parsers9,\n stdOut\n );\n}\nvar parsers9, currentBranchParser;\nvar init_parse_branch = __esm({\n \"src/lib/parsers/parse-branch.ts\"() {\n \"use strict\";\n init_BranchSummary();\n init_utils();\n parsers9 = [\n new LineParser(\n /^([*+]\\s)?\\((?:HEAD )?detached (?:from|at) (\\S+)\\)\\s+([a-z0-9]+)\\s(.*)$/,\n (result, [current, name, commit, label]) => {\n result.push(branchStatus(current), true, name, commit, label);\n }\n ),\n new LineParser(\n /^([*+]\\s)?(\\S+)\\s+([a-z0-9]+)\\s?(.*)$/s,\n (result, [current, name, commit, label]) => {\n result.push(branchStatus(current), false, name, commit, label);\n }\n )\n ];\n currentBranchParser = new LineParser(/^(\\S+)$/s, (result, [name]) => {\n result.push(\"*\" /* CURRENT */, false, name, \"\", \"\");\n });\n }\n});\n\n// src/lib/tasks/branch.ts\nvar branch_exports = {};\n__export(branch_exports, {\n branchLocalTask: () => branchLocalTask,\n branchTask: () => branchTask,\n containsDeleteBranchCommand: () => containsDeleteBranchCommand,\n deleteBranchTask: () => deleteBranchTask,\n deleteBranchesTask: () => deleteBranchesTask\n});\nfunction containsDeleteBranchCommand(commands) {\n const deleteCommands = [\"-d\", \"-D\", \"--delete\"];\n return commands.some((command) => deleteCommands.includes(command));\n}\nfunction branchTask(customArgs) {\n const isDelete = containsDeleteBranchCommand(customArgs);\n const isCurrentOnly = customArgs.includes(\"--show-current\");\n const commands = [\"branch\", ...customArgs];\n if (commands.length === 1) {\n commands.push(\"-a\");\n }\n if (!commands.includes(\"-v\")) {\n commands.splice(1, 0, \"-v\");\n }\n return {\n format: \"utf-8\",\n commands,\n parser(stdOut, stdErr) {\n if (isDelete) {\n return parseBranchDeletions(stdOut, stdErr).all[0];\n }\n return parseBranchSummary(stdOut, isCurrentOnly);\n }\n };\n}\nfunction branchLocalTask() {\n return {\n format: \"utf-8\",\n commands: [\"branch\", \"-v\"],\n parser(stdOut) {\n return parseBranchSummary(stdOut);\n }\n };\n}\nfunction deleteBranchesTask(branches, forceDelete = false) {\n return {\n format: \"utf-8\",\n commands: [\"branch\", \"-v\", forceDelete ? \"-D\" : \"-d\", ...branches],\n parser(stdOut, stdErr) {\n return parseBranchDeletions(stdOut, stdErr);\n },\n onError({ exitCode, stdOut }, error, done, fail) {\n if (!hasBranchDeletionError(String(error), exitCode)) {\n return fail(error);\n }\n done(stdOut);\n }\n };\n}\nfunction deleteBranchTask(branch, forceDelete = false) {\n const task = {\n format: \"utf-8\",\n commands: [\"branch\", \"-v\", forceDelete ? \"-D\" : \"-d\", branch],\n parser(stdOut, stdErr) {\n return parseBranchDeletions(stdOut, stdErr).branches[branch];\n },\n onError({ exitCode, stdErr, stdOut }, error, _, fail) {\n if (!hasBranchDeletionError(String(error), exitCode)) {\n return fail(error);\n }\n throw new GitResponseError(\n task.parser(bufferToString(stdOut), bufferToString(stdErr)),\n String(error)\n );\n }\n };\n return task;\n}\nvar init_branch = __esm({\n \"src/lib/tasks/branch.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_parse_branch_delete();\n init_parse_branch();\n init_utils();\n }\n});\n\n// src/lib/responses/CheckIgnore.ts\nimport { normalize } from \"node:path\";\nfunction toPath(input) {\n const path = input.trim().replace(/^[\"']|[\"']$/g, \"\");\n return path && normalize(path);\n}\nvar parseCheckIgnore;\nvar init_CheckIgnore = __esm({\n \"src/lib/responses/CheckIgnore.ts\"() {\n \"use strict\";\n parseCheckIgnore = (text) => {\n return text.split(/\\n/g).map(toPath).filter(Boolean);\n };\n }\n});\n\n// src/lib/tasks/check-ignore.ts\nvar check_ignore_exports = {};\n__export(check_ignore_exports, {\n checkIgnoreTask: () => checkIgnoreTask\n});\nfunction checkIgnoreTask(paths) {\n return {\n commands: [\"check-ignore\", ...paths],\n format: \"utf-8\",\n parser: parseCheckIgnore\n };\n}\nvar init_check_ignore = __esm({\n \"src/lib/tasks/check-ignore.ts\"() {\n \"use strict\";\n init_CheckIgnore();\n }\n});\n\n// src/lib/tasks/clone.ts\nvar clone_exports = {};\n__export(clone_exports, {\n cloneMirrorTask: () => cloneMirrorTask,\n cloneTask: () => cloneTask\n});\nfunction disallowedCommand(command) {\n return /^--upload-pack(=|$)/.test(command);\n}\nfunction cloneTask(repo, directory, customArgs) {\n const commands = [\"clone\", ...customArgs];\n filterString(repo) && commands.push(repo);\n filterString(directory) && commands.push(directory);\n const banned = commands.find(disallowedCommand);\n if (banned) {\n return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n }\n return straightThroughStringTask(commands);\n}\nfunction cloneMirrorTask(repo, directory, customArgs) {\n append(customArgs, \"--mirror\");\n return cloneTask(repo, directory, customArgs);\n}\nvar init_clone = __esm({\n \"src/lib/tasks/clone.ts\"() {\n \"use strict\";\n init_task();\n init_utils();\n }\n});\n\n// src/lib/parsers/parse-fetch.ts\nfunction parseFetchResult(stdOut, stdErr) {\n const result = {\n raw: stdOut,\n remote: null,\n branches: [],\n tags: [],\n updated: [],\n deleted: []\n };\n return parseStringResponse(result, parsers10, [stdOut, stdErr]);\n}\nvar parsers10;\nvar init_parse_fetch = __esm({\n \"src/lib/parsers/parse-fetch.ts\"() {\n \"use strict\";\n init_utils();\n parsers10 = [\n new LineParser(/From (.+)$/, (result, [remote]) => {\n result.remote = remote;\n }),\n new LineParser(/\\* \\[new branch]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n result.branches.push({\n name,\n tracking\n });\n }),\n new LineParser(/\\* \\[new tag]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n result.tags.push({\n name,\n tracking\n });\n }),\n new LineParser(/- \\[deleted]\\s+\\S+\\s*-> (.+)$/, (result, [tracking]) => {\n result.deleted.push({\n tracking\n });\n }),\n new LineParser(\n /\\s*([^.]+)\\.\\.(\\S+)\\s+(\\S+)\\s*-> (.+)$/,\n (result, [from, to, name, tracking]) => {\n result.updated.push({\n name,\n tracking,\n to,\n from\n });\n }\n )\n ];\n }\n});\n\n// src/lib/tasks/fetch.ts\nvar fetch_exports = {};\n__export(fetch_exports, {\n fetchTask: () => fetchTask\n});\nfunction disallowedCommand2(command) {\n return /^--upload-pack(=|$)/.test(command);\n}\nfunction fetchTask(remote, branch, customArgs) {\n const commands = [\"fetch\", ...customArgs];\n if (remote && branch) {\n commands.push(remote, branch);\n }\n const banned = commands.find(disallowedCommand2);\n if (banned) {\n return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n }\n return {\n commands,\n format: \"utf-8\",\n parser: parseFetchResult\n };\n}\nvar init_fetch = __esm({\n \"src/lib/tasks/fetch.ts\"() {\n \"use strict\";\n init_parse_fetch();\n init_task();\n }\n});\n\n// src/lib/parsers/parse-move.ts\nfunction parseMoveResult(stdOut) {\n return parseStringResponse({ moves: [] }, parsers11, stdOut);\n}\nvar parsers11;\nvar init_parse_move = __esm({\n \"src/lib/parsers/parse-move.ts\"() {\n \"use strict\";\n init_utils();\n parsers11 = [\n new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => {\n result.moves.push({ from, to });\n })\n ];\n }\n});\n\n// src/lib/tasks/move.ts\nvar move_exports = {};\n__export(move_exports, {\n moveTask: () => moveTask\n});\nfunction moveTask(from, to) {\n return {\n commands: [\"mv\", \"-v\", ...asArray(from), to],\n format: \"utf-8\",\n parser: parseMoveResult\n };\n}\nvar init_move = __esm({\n \"src/lib/tasks/move.ts\"() {\n \"use strict\";\n init_parse_move();\n init_utils();\n }\n});\n\n// src/lib/tasks/pull.ts\nvar pull_exports = {};\n__export(pull_exports, {\n pullTask: () => pullTask\n});\nfunction pullTask(remote, branch, customArgs) {\n const commands = [\"pull\", ...customArgs];\n if (remote && branch) {\n commands.splice(1, 0, remote, branch);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(stdOut, stdErr) {\n return parsePullResult(stdOut, stdErr);\n },\n onError(result, _error, _done, fail) {\n const pullError = parsePullErrorResult(\n bufferToString(result.stdOut),\n bufferToString(result.stdErr)\n );\n if (pullError) {\n return fail(new GitResponseError(pullError));\n }\n fail(_error);\n }\n };\n}\nvar init_pull = __esm({\n \"src/lib/tasks/pull.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_parse_pull();\n init_utils();\n }\n});\n\n// src/lib/responses/GetRemoteSummary.ts\nfunction parseGetRemotes(text) {\n const remotes = {};\n forEach(text, ([name]) => remotes[name] = { name });\n return Object.values(remotes);\n}\nfunction parseGetRemotesVerbose(text) {\n const remotes = {};\n forEach(text, ([name, url, purpose]) => {\n if (!Object.hasOwn(remotes, name)) {\n remotes[name] = {\n name,\n refs: { fetch: \"\", push: \"\" }\n };\n }\n if (purpose && url) {\n remotes[name].refs[purpose.replace(/[^a-z]/g, \"\")] = url;\n }\n });\n return Object.values(remotes);\n}\nfunction forEach(text, handler) {\n forEachLineWithContent(text, (line) => handler(line.split(/\\s+/)));\n}\nvar init_GetRemoteSummary = __esm({\n \"src/lib/responses/GetRemoteSummary.ts\"() {\n \"use strict\";\n init_utils();\n }\n});\n\n// src/lib/tasks/remote.ts\nvar remote_exports = {};\n__export(remote_exports, {\n addRemoteTask: () => addRemoteTask,\n getRemotesTask: () => getRemotesTask,\n listRemotesTask: () => listRemotesTask,\n remoteTask: () => remoteTask,\n removeRemoteTask: () => removeRemoteTask\n});\nfunction addRemoteTask(remoteName, remoteRepo, customArgs) {\n return straightThroughStringTask([\"remote\", \"add\", ...customArgs, remoteName, remoteRepo]);\n}\nfunction getRemotesTask(verbose) {\n const commands = [\"remote\"];\n if (verbose) {\n commands.push(\"-v\");\n }\n return {\n commands,\n format: \"utf-8\",\n parser: verbose ? parseGetRemotesVerbose : parseGetRemotes\n };\n}\nfunction listRemotesTask(customArgs) {\n const commands = [...customArgs];\n if (commands[0] !== \"ls-remote\") {\n commands.unshift(\"ls-remote\");\n }\n return straightThroughStringTask(commands);\n}\nfunction remoteTask(customArgs) {\n const commands = [...customArgs];\n if (commands[0] !== \"remote\") {\n commands.unshift(\"remote\");\n }\n return straightThroughStringTask(commands);\n}\nfunction removeRemoteTask(remoteName) {\n return straightThroughStringTask([\"remote\", \"remove\", remoteName]);\n}\nvar init_remote = __esm({\n \"src/lib/tasks/remote.ts\"() {\n \"use strict\";\n init_GetRemoteSummary();\n init_task();\n }\n});\n\n// src/lib/tasks/stash-list.ts\nvar stash_list_exports = {};\n__export(stash_list_exports, {\n stashListTask: () => stashListTask\n});\nfunction stashListTask(opt = {}, customArgs) {\n const options = parseLogOptions(opt);\n const commands = [\"stash\", \"list\", ...options.commands, ...customArgs];\n const parser4 = createListLogSummaryParser(\n options.splitter,\n options.fields,\n logFormatFromCommand(commands)\n );\n return validateLogFormatConfig(commands) || {\n commands,\n format: \"utf-8\",\n parser: parser4\n };\n}\nvar init_stash_list = __esm({\n \"src/lib/tasks/stash-list.ts\"() {\n \"use strict\";\n init_log_format();\n init_parse_list_log_summary();\n init_diff();\n init_log();\n }\n});\n\n// src/lib/tasks/sub-module.ts\nvar sub_module_exports = {};\n__export(sub_module_exports, {\n addSubModuleTask: () => addSubModuleTask,\n initSubModuleTask: () => initSubModuleTask,\n subModuleTask: () => subModuleTask,\n updateSubModuleTask: () => updateSubModuleTask\n});\nfunction addSubModuleTask(repo, path) {\n return subModuleTask([\"add\", repo, path]);\n}\nfunction initSubModuleTask(customArgs) {\n return subModuleTask([\"init\", ...customArgs]);\n}\nfunction subModuleTask(customArgs) {\n const commands = [...customArgs];\n if (commands[0] !== \"submodule\") {\n commands.unshift(\"submodule\");\n }\n return straightThroughStringTask(commands);\n}\nfunction updateSubModuleTask(customArgs) {\n return subModuleTask([\"update\", ...customArgs]);\n}\nvar init_sub_module = __esm({\n \"src/lib/tasks/sub-module.ts\"() {\n \"use strict\";\n init_task();\n }\n});\n\n// src/lib/responses/TagList.ts\nfunction singleSorted(a, b) {\n const aIsNum = Number.isNaN(a);\n const bIsNum = Number.isNaN(b);\n if (aIsNum !== bIsNum) {\n return aIsNum ? 1 : -1;\n }\n return aIsNum ? sorted(a, b) : 0;\n}\nfunction sorted(a, b) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction trimmed(input) {\n return input.trim();\n}\nfunction toNumber(input) {\n if (typeof input === \"string\") {\n return parseInt(input.replace(/^\\D+/g, \"\"), 10) || 0;\n }\n return 0;\n}\nvar TagList, parseTagList;\nvar init_TagList = __esm({\n \"src/lib/responses/TagList.ts\"() {\n \"use strict\";\n TagList = class {\n constructor(all, latest) {\n this.all = all;\n this.latest = latest;\n }\n };\n parseTagList = function(data, customSort = false) {\n const tags = data.split(\"\\n\").map(trimmed).filter(Boolean);\n if (!customSort) {\n tags.sort(function(tagA, tagB) {\n const partsA = tagA.split(\".\");\n const partsB = tagB.split(\".\");\n if (partsA.length === 1 || partsB.length === 1) {\n return singleSorted(toNumber(partsA[0]), toNumber(partsB[0]));\n }\n for (let i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) {\n const diff = sorted(toNumber(partsA[i]), toNumber(partsB[i]));\n if (diff) {\n return diff;\n }\n }\n return 0;\n });\n }\n const latest = customSort ? tags[0] : [...tags].reverse().find((tag) => tag.indexOf(\".\") >= 0);\n return new TagList(tags, latest);\n };\n }\n});\n\n// src/lib/tasks/tag.ts\nvar tag_exports = {};\n__export(tag_exports, {\n addAnnotatedTagTask: () => addAnnotatedTagTask,\n addTagTask: () => addTagTask,\n tagListTask: () => tagListTask\n});\nfunction tagListTask(customArgs = []) {\n const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option));\n return {\n format: \"utf-8\",\n commands: [\"tag\", \"-l\", ...customArgs],\n parser(text) {\n return parseTagList(text, hasCustomSort);\n }\n };\n}\nfunction addTagTask(name) {\n return {\n format: \"utf-8\",\n commands: [\"tag\", name],\n parser() {\n return { name };\n }\n };\n}\nfunction addAnnotatedTagTask(name, tagMessage) {\n return {\n format: \"utf-8\",\n commands: [\"tag\", \"-a\", \"-m\", tagMessage, name],\n parser() {\n return { name };\n }\n };\n}\nvar init_tag = __esm({\n \"src/lib/tasks/tag.ts\"() {\n \"use strict\";\n init_TagList();\n }\n});\n\n// src/git.js\nvar require_git = __commonJS({\n \"src/git.js\"(exports, module) {\n \"use strict\";\n var { GitExecutor: GitExecutor2 } = (init_git_executor(), __toCommonJS(git_executor_exports));\n var { SimpleGitApi: SimpleGitApi2 } = (init_simple_git_api(), __toCommonJS(simple_git_api_exports));\n var { Scheduler: Scheduler2 } = (init_scheduler(), __toCommonJS(scheduler_exports));\n var { configurationErrorTask: configurationErrorTask2 } = (init_task(), __toCommonJS(task_exports));\n var {\n asArray: asArray2,\n filterArray: filterArray2,\n filterPrimitives: filterPrimitives2,\n filterString: filterString2,\n filterStringOrStringArray: filterStringOrStringArray2,\n filterType: filterType2,\n getTrailingOptions: getTrailingOptions2,\n trailingFunctionArgument: trailingFunctionArgument2,\n trailingOptionsArgument: trailingOptionsArgument2\n } = (init_utils(), __toCommonJS(utils_exports));\n var { applyPatchTask: applyPatchTask2 } = (init_apply_patch(), __toCommonJS(apply_patch_exports));\n var {\n branchTask: branchTask2,\n branchLocalTask: branchLocalTask2,\n deleteBranchesTask: deleteBranchesTask2,\n deleteBranchTask: deleteBranchTask2\n } = (init_branch(), __toCommonJS(branch_exports));\n var { checkIgnoreTask: checkIgnoreTask2 } = (init_check_ignore(), __toCommonJS(check_ignore_exports));\n var { checkIsRepoTask: checkIsRepoTask2 } = (init_check_is_repo(), __toCommonJS(check_is_repo_exports));\n var { cloneTask: cloneTask2, cloneMirrorTask: cloneMirrorTask2 } = (init_clone(), __toCommonJS(clone_exports));\n var { cleanWithOptionsTask: cleanWithOptionsTask2, isCleanOptionsArray: isCleanOptionsArray2 } = (init_clean(), __toCommonJS(clean_exports));\n var { diffSummaryTask: diffSummaryTask2 } = (init_diff(), __toCommonJS(diff_exports));\n var { fetchTask: fetchTask2 } = (init_fetch(), __toCommonJS(fetch_exports));\n var { moveTask: moveTask2 } = (init_move(), __toCommonJS(move_exports));\n var { pullTask: pullTask2 } = (init_pull(), __toCommonJS(pull_exports));\n var { pushTagsTask: pushTagsTask2 } = (init_push(), __toCommonJS(push_exports));\n var {\n addRemoteTask: addRemoteTask2,\n getRemotesTask: getRemotesTask2,\n listRemotesTask: listRemotesTask2,\n remoteTask: remoteTask2,\n removeRemoteTask: removeRemoteTask2\n } = (init_remote(), __toCommonJS(remote_exports));\n var { getResetMode: getResetMode2, resetTask: resetTask2 } = (init_reset(), __toCommonJS(reset_exports));\n var { stashListTask: stashListTask2 } = (init_stash_list(), __toCommonJS(stash_list_exports));\n var {\n addSubModuleTask: addSubModuleTask2,\n initSubModuleTask: initSubModuleTask2,\n subModuleTask: subModuleTask2,\n updateSubModuleTask: updateSubModuleTask2\n } = (init_sub_module(), __toCommonJS(sub_module_exports));\n var { addAnnotatedTagTask: addAnnotatedTagTask2, addTagTask: addTagTask2, tagListTask: tagListTask2 } = (init_tag(), __toCommonJS(tag_exports));\n var { straightThroughBufferTask: straightThroughBufferTask2, straightThroughStringTask: straightThroughStringTask2 } = (init_task(), __toCommonJS(task_exports));\n function Git2(options, plugins) {\n this._plugins = plugins;\n this._executor = new GitExecutor2(\n options.baseDir,\n new Scheduler2(options.maxConcurrentProcesses),\n plugins\n );\n this._trimmed = options.trimmed;\n }\n (Git2.prototype = Object.create(SimpleGitApi2.prototype)).constructor = Git2;\n Git2.prototype.customBinary = function(command) {\n this._plugins.reconfigure(\"binary\", command);\n return this;\n };\n Git2.prototype.env = function(name, value) {\n if (arguments.length === 1 && typeof name === \"object\") {\n this._executor.env = name;\n } else {\n (this._executor.env = this._executor.env || {})[name] = value;\n }\n return this;\n };\n Git2.prototype.stashList = function(options) {\n return this._runTask(\n stashListTask2(\n trailingOptionsArgument2(arguments) || {},\n filterArray2(options) && options || []\n ),\n trailingFunctionArgument2(arguments)\n );\n };\n function createCloneTask(api, task, repoPath, localPath) {\n if (typeof repoPath !== \"string\") {\n return configurationErrorTask2(`git.${api}() requires a string 'repoPath'`);\n }\n return task(repoPath, filterType2(localPath, filterString2), getTrailingOptions2(arguments));\n }\n Git2.prototype.clone = function() {\n return this._runTask(\n createCloneTask(\"clone\", cloneTask2, ...arguments),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.mirror = function() {\n return this._runTask(\n createCloneTask(\"mirror\", cloneMirrorTask2, ...arguments),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.mv = function(from, to) {\n return this._runTask(moveTask2(from, to), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.checkoutLatestTag = function(then) {\n var git = this;\n return this.pull(function() {\n git.tags(function(err, tags) {\n git.checkout(tags.latest, then);\n });\n });\n };\n Git2.prototype.pull = function(remote, branch, options, then) {\n return this._runTask(\n pullTask2(\n filterType2(remote, filterString2),\n filterType2(branch, filterString2),\n getTrailingOptions2(arguments)\n ),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.fetch = function(remote, branch) {\n return this._runTask(\n fetchTask2(\n filterType2(remote, filterString2),\n filterType2(branch, filterString2),\n getTrailingOptions2(arguments)\n ),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.silent = function(silence) {\n console.warn(\n \"simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this will be an error in version 3\"\n );\n return this;\n };\n Git2.prototype.tags = function(options, then) {\n return this._runTask(\n tagListTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.rebase = function() {\n return this._runTask(\n straightThroughStringTask2([\"rebase\", ...getTrailingOptions2(arguments)]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.reset = function(mode) {\n return this._runTask(\n resetTask2(getResetMode2(mode), getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.revert = function(commit) {\n const next = trailingFunctionArgument2(arguments);\n if (typeof commit !== \"string\") {\n return this._runTask(configurationErrorTask2(\"Commit must be a string\"), next);\n }\n return this._runTask(\n straightThroughStringTask2([\"revert\", ...getTrailingOptions2(arguments, 0, true), commit]),\n next\n );\n };\n Git2.prototype.addTag = function(name) {\n const task = typeof name === \"string\" ? addTagTask2(name) : configurationErrorTask2(\"Git.addTag requires a tag name\");\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.addAnnotatedTag = function(tagName, tagMessage) {\n return this._runTask(\n addAnnotatedTagTask2(tagName, tagMessage),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.deleteLocalBranch = function(branchName, forceDelete, then) {\n return this._runTask(\n deleteBranchTask2(branchName, typeof forceDelete === \"boolean\" ? forceDelete : false),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.deleteLocalBranches = function(branchNames, forceDelete, then) {\n return this._runTask(\n deleteBranchesTask2(branchNames, typeof forceDelete === \"boolean\" ? forceDelete : false),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.branch = function(options, then) {\n return this._runTask(\n branchTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.branchLocal = function(then) {\n return this._runTask(branchLocalTask2(), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.raw = function(commands) {\n const createRestCommands = !Array.isArray(commands);\n const command = [].slice.call(createRestCommands ? arguments : commands, 0);\n for (let i = 0; i < command.length && createRestCommands; i++) {\n if (!filterPrimitives2(command[i])) {\n command.splice(i, command.length - i);\n break;\n }\n }\n command.push(...getTrailingOptions2(arguments, 0, true));\n var next = trailingFunctionArgument2(arguments);\n if (!command.length) {\n return this._runTask(\n configurationErrorTask2(\"Raw: must supply one or more command to execute\"),\n next\n );\n }\n return this._runTask(straightThroughStringTask2(command, this._trimmed), next);\n };\n Git2.prototype.submoduleAdd = function(repo, path, then) {\n return this._runTask(addSubModuleTask2(repo, path), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.submoduleUpdate = function(args, then) {\n return this._runTask(\n updateSubModuleTask2(getTrailingOptions2(arguments, true)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.submoduleInit = function(args, then) {\n return this._runTask(\n initSubModuleTask2(getTrailingOptions2(arguments, true)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.subModule = function(options, then) {\n return this._runTask(\n subModuleTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.listRemote = function() {\n return this._runTask(\n listRemotesTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.addRemote = function(remoteName, remoteRepo, then) {\n return this._runTask(\n addRemoteTask2(remoteName, remoteRepo, getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.removeRemote = function(remoteName, then) {\n return this._runTask(removeRemoteTask2(remoteName), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.getRemotes = function(verbose, then) {\n return this._runTask(getRemotesTask2(verbose === true), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.remote = function(options, then) {\n return this._runTask(\n remoteTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.tag = function(options, then) {\n const command = getTrailingOptions2(arguments);\n if (command[0] !== \"tag\") {\n command.unshift(\"tag\");\n }\n return this._runTask(straightThroughStringTask2(command), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.updateServerInfo = function(then) {\n return this._runTask(\n straightThroughStringTask2([\"update-server-info\"]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.pushTags = function(remote, then) {\n const task = pushTagsTask2(\n { remote: filterType2(remote, filterString2) },\n getTrailingOptions2(arguments)\n );\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.rm = function(files) {\n return this._runTask(\n straightThroughStringTask2([\"rm\", \"-f\", ...asArray2(files)]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.rmKeepLocal = function(files) {\n return this._runTask(\n straightThroughStringTask2([\"rm\", \"--cached\", ...asArray2(files)]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.catFile = function(options, then) {\n return this._catFile(\"utf-8\", arguments);\n };\n Git2.prototype.binaryCatFile = function() {\n return this._catFile(\"buffer\", arguments);\n };\n Git2.prototype._catFile = function(format, args) {\n var handler = trailingFunctionArgument2(args);\n var command = [\"cat-file\"];\n var options = args[0];\n if (typeof options === \"string\") {\n return this._runTask(\n configurationErrorTask2(\"Git.catFile: options must be supplied as an array of strings\"),\n handler\n );\n }\n if (Array.isArray(options)) {\n command.push.apply(command, options);\n }\n const task = format === \"buffer\" ? straightThroughBufferTask2(command) : straightThroughStringTask2(command);\n return this._runTask(task, handler);\n };\n Git2.prototype.diff = function(options, then) {\n const task = filterString2(options) ? configurationErrorTask2(\n \"git.diff: supplying options as a single string is no longer supported, switch to an array of strings\"\n ) : straightThroughStringTask2([\"diff\", ...getTrailingOptions2(arguments)]);\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.diffSummary = function() {\n return this._runTask(\n diffSummaryTask2(getTrailingOptions2(arguments, 1)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.applyPatch = function(patches) {\n const task = !filterStringOrStringArray2(patches) ? configurationErrorTask2(\n `git.applyPatch requires one or more string patches as the first argument`\n ) : applyPatchTask2(asArray2(patches), getTrailingOptions2([].slice.call(arguments, 1)));\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.revparse = function() {\n const commands = [\"rev-parse\", ...getTrailingOptions2(arguments, true)];\n return this._runTask(\n straightThroughStringTask2(commands, true),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.clean = function(mode, options, then) {\n const usingCleanOptionsArray = isCleanOptionsArray2(mode);\n const cleanMode = usingCleanOptionsArray && mode.join(\"\") || filterType2(mode, filterString2) || \"\";\n const customArgs = getTrailingOptions2([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0));\n return this._runTask(\n cleanWithOptionsTask2(cleanMode, customArgs),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.exec = function(then) {\n const task = {\n commands: [],\n format: \"utf-8\",\n parser() {\n if (typeof then === \"function\") {\n then();\n }\n }\n };\n return this._runTask(task);\n };\n Git2.prototype.clearQueue = function() {\n return this;\n };\n Git2.prototype.checkIgnore = function(pathnames, then) {\n return this._runTask(\n checkIgnoreTask2(asArray2(filterType2(pathnames, filterStringOrStringArray2, []))),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.checkIsRepo = function(checkType, then) {\n return this._runTask(\n checkIsRepoTask2(filterType2(checkType, filterString2)),\n trailingFunctionArgument2(arguments)\n );\n };\n module.exports = Git2;\n }\n});\n\n// src/lib/api.ts\ninit_pathspec();\n\n// src/lib/errors/git-construct-error.ts\ninit_git_error();\nvar GitConstructError = class extends GitError {\n constructor(config, message) {\n super(void 0, message);\n this.config = config;\n }\n};\n\n// src/lib/api.ts\ninit_git_error();\n\n// src/lib/errors/git-plugin-error.ts\ninit_git_error();\nvar GitPluginError = class extends GitError {\n constructor(task, plugin, message) {\n super(task, message);\n this.task = task;\n this.plugin = plugin;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n};\n\n// src/lib/api.ts\ninit_git_response_error();\ninit_task_configuration_error();\ninit_check_is_repo();\ninit_clean();\ninit_config();\ninit_diff_name_status();\ninit_grep();\ninit_reset();\n\n// src/lib/plugins/abort-plugin.ts\nfunction abortPlugin(signal) {\n if (!signal) {\n return;\n }\n const onSpawnAfter = {\n type: \"spawn.after\",\n action(_data, context) {\n function kill() {\n context.kill(new GitPluginError(void 0, \"abort\", \"Abort signal received\"));\n }\n signal.addEventListener(\"abort\", kill);\n context.spawned.on(\"close\", () => signal.removeEventListener(\"abort\", kill));\n }\n };\n const onSpawnBefore = {\n type: \"spawn.before\",\n action(_data, context) {\n if (signal.aborted) {\n context.kill(new GitPluginError(void 0, \"abort\", \"Abort already signaled\"));\n }\n }\n };\n return [onSpawnBefore, onSpawnAfter];\n}\n\n// src/lib/plugins/block-unsafe-operations-plugin.ts\nfunction isConfigSwitch(arg) {\n return typeof arg === \"string\" && arg.trim().toLowerCase() === \"-c\";\n}\nfunction preventProtocolOverride(arg, next) {\n if (!isConfigSwitch(arg)) {\n return;\n }\n if (!/^\\s*protocol(.[a-z]+)?.allow/.test(next)) {\n return;\n }\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n \"Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol\"\n );\n}\nfunction preventUploadPack(arg, method) {\n if (/^\\s*--(upload|receive)-pack/.test(arg)) {\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n `Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack`\n );\n }\n if (method === \"clone\" && /^\\s*-u\\b/.test(arg)) {\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n `Use of clone with option -u is not permitted without enabling allowUnsafePack`\n );\n }\n if (method === \"push\" && /^\\s*--exec\\b/.test(arg)) {\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n `Use of push with option --exec is not permitted without enabling allowUnsafePack`\n );\n }\n}\nfunction blockUnsafeOperationsPlugin({\n allowUnsafeProtocolOverride = false,\n allowUnsafePack = false\n} = {}) {\n return {\n type: \"spawn.args\",\n action(args, context) {\n args.forEach((current, index) => {\n const next = index < args.length ? args[index + 1] : \"\";\n allowUnsafeProtocolOverride || preventProtocolOverride(current, next);\n allowUnsafePack || preventUploadPack(current, context.method);\n });\n return args;\n }\n };\n}\n\n// src/lib/plugins/command-config-prefixing-plugin.ts\ninit_utils();\nfunction commandConfigPrefixingPlugin(configuration) {\n const prefix = prefixedArray(configuration, \"-c\");\n return {\n type: \"spawn.args\",\n action(data) {\n return [...prefix, ...data];\n }\n };\n}\n\n// src/lib/plugins/completion-detection.plugin.ts\ninit_utils();\nimport { deferred } from \"@kwsites/promise-deferred\";\nvar never = deferred().promise;\nfunction completionDetectionPlugin({\n onClose = true,\n onExit = 50\n} = {}) {\n function createEvents() {\n let exitCode = -1;\n const events = {\n close: deferred(),\n closeTimeout: deferred(),\n exit: deferred(),\n exitTimeout: deferred()\n };\n const result = Promise.race([\n onClose === false ? never : events.closeTimeout.promise,\n onExit === false ? never : events.exitTimeout.promise\n ]);\n configureTimeout(onClose, events.close, events.closeTimeout);\n configureTimeout(onExit, events.exit, events.exitTimeout);\n return {\n close(code) {\n exitCode = code;\n events.close.done();\n },\n exit(code) {\n exitCode = code;\n events.exit.done();\n },\n get exitCode() {\n return exitCode;\n },\n result\n };\n }\n function configureTimeout(flag, event, timeout) {\n if (flag === false) {\n return;\n }\n (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done);\n }\n return {\n type: \"spawn.after\",\n async action(_data, { spawned, close }) {\n const events = createEvents();\n let deferClose = true;\n let quickClose = () => void (deferClose = false);\n spawned.stdout?.on(\"data\", quickClose);\n spawned.stderr?.on(\"data\", quickClose);\n spawned.on(\"error\", quickClose);\n spawned.on(\"close\", (code) => events.close(code));\n spawned.on(\"exit\", (code) => events.exit(code));\n try {\n await events.result;\n if (deferClose) {\n await delay(50);\n }\n close(events.exitCode);\n } catch (err) {\n close(events.exitCode, err);\n }\n }\n };\n}\n\n// src/lib/plugins/custom-binary.plugin.ts\ninit_utils();\nvar WRONG_NUMBER_ERR = `Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings`;\nvar WRONG_CHARS_ERR = `Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option`;\nfunction isBadArgument(arg) {\n return !arg || !/^([a-z]:)?([a-z0-9/.\\\\_-]+)$/i.test(arg);\n}\nfunction toBinaryConfig(input, allowUnsafe) {\n if (input.length < 1 || input.length > 2) {\n throw new GitPluginError(void 0, \"binary\", WRONG_NUMBER_ERR);\n }\n const isBad = input.some(isBadArgument);\n if (isBad) {\n if (allowUnsafe) {\n console.warn(WRONG_CHARS_ERR);\n } else {\n throw new GitPluginError(void 0, \"binary\", WRONG_CHARS_ERR);\n }\n }\n const [binary, prefix] = input;\n return {\n binary,\n prefix\n };\n}\nfunction customBinaryPlugin(plugins, input = [\"git\"], allowUnsafe = false) {\n let config = toBinaryConfig(asArray(input), allowUnsafe);\n plugins.on(\"binary\", (input2) => {\n config = toBinaryConfig(asArray(input2), allowUnsafe);\n });\n plugins.append(\"spawn.binary\", () => {\n return config.binary;\n });\n plugins.append(\"spawn.args\", (data) => {\n return config.prefix ? [config.prefix, ...data] : data;\n });\n}\n\n// src/lib/plugins/error-detection.plugin.ts\ninit_git_error();\nfunction isTaskError(result) {\n return !!(result.exitCode && result.stdErr.length);\n}\nfunction getErrorMessage(result) {\n return Buffer.concat([...result.stdOut, ...result.stdErr]);\n}\nfunction errorDetectionHandler(overwrite = false, isError = isTaskError, errorMessage = getErrorMessage) {\n return (error, result) => {\n if (!overwrite && error || !isError(result)) {\n return error;\n }\n return errorMessage(result);\n };\n}\nfunction errorDetectionPlugin(config) {\n return {\n type: \"task.error\",\n action(data, context) {\n const error = config(data.error, {\n stdErr: context.stdErr,\n stdOut: context.stdOut,\n exitCode: context.exitCode\n });\n if (Buffer.isBuffer(error)) {\n return { error: new GitError(void 0, error.toString(\"utf-8\")) };\n }\n return {\n error\n };\n }\n };\n}\n\n// src/lib/plugins/plugin-store.ts\ninit_utils();\nimport { EventEmitter } from \"node:events\";\nvar PluginStore = class {\n constructor() {\n this.plugins = /* @__PURE__ */ new Set();\n this.events = new EventEmitter();\n }\n on(type, listener) {\n this.events.on(type, listener);\n }\n reconfigure(type, data) {\n this.events.emit(type, data);\n }\n append(type, action) {\n const plugin = append(this.plugins, { type, action });\n return () => this.plugins.delete(plugin);\n }\n add(plugin) {\n const plugins = [];\n asArray(plugin).forEach((plugin2) => plugin2 && this.plugins.add(append(plugins, plugin2)));\n return () => {\n plugins.forEach((plugin2) => this.plugins.delete(plugin2));\n };\n }\n exec(type, data, context) {\n let output = data;\n const contextual = Object.freeze(Object.create(context));\n for (const plugin of this.plugins) {\n if (plugin.type === type) {\n output = plugin.action(output, contextual);\n }\n }\n return output;\n }\n};\n\n// src/lib/plugins/progress-monitor-plugin.ts\ninit_utils();\nfunction progressMonitorPlugin(progress) {\n const progressCommand = \"--progress\";\n const progressMethods = [\"checkout\", \"clone\", \"fetch\", \"pull\", \"push\"];\n const onProgress = {\n type: \"spawn.after\",\n action(_data, context) {\n if (!context.commands.includes(progressCommand)) {\n return;\n }\n context.spawned.stderr?.on(\"data\", (chunk) => {\n const message = /^([\\s\\S]+?):\\s*(\\d+)% \\((\\d+)\\/(\\d+)\\)/.exec(chunk.toString(\"utf8\"));\n if (!message) {\n return;\n }\n progress({\n method: context.method,\n stage: progressEventStage(message[1]),\n progress: asNumber(message[2]),\n processed: asNumber(message[3]),\n total: asNumber(message[4])\n });\n });\n }\n };\n const onArgs = {\n type: \"spawn.args\",\n action(args, context) {\n if (!progressMethods.includes(context.method)) {\n return args;\n }\n return including(args, progressCommand);\n }\n };\n return [onArgs, onProgress];\n}\nfunction progressEventStage(input) {\n return String(input.toLowerCase().split(\" \", 1)) || \"unknown\";\n}\n\n// src/lib/plugins/spawn-options-plugin.ts\ninit_utils();\nfunction spawnOptionsPlugin(spawnOptions) {\n const options = pick(spawnOptions, [\"uid\", \"gid\"]);\n return {\n type: \"spawn.options\",\n action(data) {\n return { ...options, ...data };\n }\n };\n}\n\n// src/lib/plugins/timout-plugin.ts\nfunction timeoutPlugin({\n block,\n stdErr = true,\n stdOut = true\n}) {\n if (block > 0) {\n return {\n type: \"spawn.after\",\n action(_data, context) {\n let timeout;\n function wait() {\n timeout && clearTimeout(timeout);\n timeout = setTimeout(kill, block);\n }\n function stop() {\n context.spawned.stdout?.off(\"data\", wait);\n context.spawned.stderr?.off(\"data\", wait);\n context.spawned.off(\"exit\", stop);\n context.spawned.off(\"close\", stop);\n timeout && clearTimeout(timeout);\n }\n function kill() {\n stop();\n context.kill(new GitPluginError(void 0, \"timeout\", `block timeout reached`));\n }\n stdOut && context.spawned.stdout?.on(\"data\", wait);\n stdErr && context.spawned.stderr?.on(\"data\", wait);\n context.spawned.on(\"exit\", stop);\n context.spawned.on(\"close\", stop);\n wait();\n }\n };\n }\n}\n\n// src/lib/plugins/suffix-paths.plugin.ts\ninit_pathspec();\nfunction suffixPathsPlugin() {\n return {\n type: \"spawn.args\",\n action(data) {\n const prefix = [];\n let suffix;\n function append2(args) {\n (suffix = suffix || []).push(...args);\n }\n for (let i = 0; i < data.length; i++) {\n const param = data[i];\n if (isPathSpec(param)) {\n append2(toPaths(param));\n continue;\n }\n if (param === \"--\") {\n append2(\n data.slice(i + 1).flatMap((item) => isPathSpec(item) && toPaths(item) || item)\n );\n break;\n }\n prefix.push(param);\n }\n return !suffix ? prefix : [...prefix, \"--\", ...suffix.map(String)];\n }\n };\n}\n\n// src/lib/git-factory.ts\ninit_utils();\nvar Git = require_git();\nfunction gitInstanceFactory(baseDir, options) {\n const plugins = new PluginStore();\n const config = createInstanceConfig(\n baseDir && (typeof baseDir === \"string\" ? { baseDir } : baseDir) || {},\n options\n );\n if (!folderExists(config.baseDir)) {\n throw new GitConstructError(\n config,\n `Cannot use simple-git on a directory that does not exist`\n );\n }\n if (Array.isArray(config.config)) {\n plugins.add(commandConfigPrefixingPlugin(config.config));\n }\n plugins.add(blockUnsafeOperationsPlugin(config.unsafe));\n plugins.add(suffixPathsPlugin());\n plugins.add(completionDetectionPlugin(config.completion));\n config.abort && plugins.add(abortPlugin(config.abort));\n config.progress && plugins.add(progressMonitorPlugin(config.progress));\n config.timeout && plugins.add(timeoutPlugin(config.timeout));\n config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions));\n plugins.add(errorDetectionPlugin(errorDetectionHandler(true)));\n config.errors && plugins.add(errorDetectionPlugin(config.errors));\n customBinaryPlugin(plugins, config.binary, config.unsafe?.allowUnsafeCustomBinary);\n return new Git(config, plugins);\n}\n\n// src/lib/runners/promise-wrapped.ts\ninit_git_response_error();\nvar functionNamesBuilderApi = [\"customBinary\", \"env\", \"outputHandler\", \"silent\"];\nvar functionNamesPromiseApi = [\n \"add\",\n \"addAnnotatedTag\",\n \"addConfig\",\n \"addRemote\",\n \"addTag\",\n \"applyPatch\",\n \"binaryCatFile\",\n \"branch\",\n \"branchLocal\",\n \"catFile\",\n \"checkIgnore\",\n \"checkIsRepo\",\n \"checkout\",\n \"checkoutBranch\",\n \"checkoutLatestTag\",\n \"checkoutLocalBranch\",\n \"clean\",\n \"clone\",\n \"commit\",\n \"cwd\",\n \"deleteLocalBranch\",\n \"deleteLocalBranches\",\n \"diff\",\n \"diffSummary\",\n \"exec\",\n \"fetch\",\n \"getRemotes\",\n \"init\",\n \"listConfig\",\n \"listRemote\",\n \"log\",\n \"merge\",\n \"mergeFromTo\",\n \"mirror\",\n \"mv\",\n \"pull\",\n \"push\",\n \"pushTags\",\n \"raw\",\n \"rebase\",\n \"remote\",\n \"removeRemote\",\n \"reset\",\n \"revert\",\n \"revparse\",\n \"rm\",\n \"rmKeepLocal\",\n \"show\",\n \"stash\",\n \"stashList\",\n \"status\",\n \"subModule\",\n \"submoduleAdd\",\n \"submoduleInit\",\n \"submoduleUpdate\",\n \"tag\",\n \"tags\",\n \"updateServerInfo\"\n];\nfunction gitP(...args) {\n let git;\n let chain = Promise.resolve();\n try {\n git = gitInstanceFactory(...args);\n } catch (e) {\n chain = Promise.reject(e);\n }\n function builderReturn() {\n return promiseApi;\n }\n function chainReturn() {\n return chain;\n }\n const promiseApi = [...functionNamesBuilderApi, ...functionNamesPromiseApi].reduce(\n (api, name) => {\n const isAsync = functionNamesPromiseApi.includes(name);\n const valid = isAsync ? asyncWrapper(name, git) : syncWrapper(name, git, api);\n const alternative = isAsync ? chainReturn : builderReturn;\n Object.defineProperty(api, name, {\n enumerable: false,\n configurable: false,\n value: git ? valid : alternative\n });\n return api;\n },\n {}\n );\n return promiseApi;\n function asyncWrapper(fn, git2) {\n return function(...args2) {\n if (typeof args2[args2.length] === \"function\") {\n throw new TypeError(\n \"Promise interface requires that handlers are not supplied inline, trailing function not allowed in call to \" + fn\n );\n }\n return chain.then(function() {\n return new Promise(function(resolve, reject) {\n const callback = (err, result) => {\n if (err) {\n return reject(toError(err));\n }\n resolve(result);\n };\n args2.push(callback);\n git2[fn].apply(git2, args2);\n });\n });\n };\n }\n function syncWrapper(fn, git2, api) {\n return (...args2) => {\n git2[fn](...args2);\n return api;\n };\n }\n}\nfunction toError(error) {\n if (error instanceof Error) {\n return error;\n }\n if (typeof error === \"string\") {\n return new Error(error);\n }\n return new GitResponseError(error);\n}\n\n// src/esm.mjs\nvar simpleGit = gitInstanceFactory;\nvar esm_default = gitInstanceFactory;\nexport {\n CheckRepoActions,\n CleanOptions,\n DiffNameStatus,\n GitConfigScope,\n GitConstructError,\n GitError,\n GitPluginError,\n GitResponseError,\n ResetMode,\n TaskConfigurationError,\n esm_default as default,\n gitP,\n grepQueryBuilder,\n pathspec,\n simpleGit\n};\n//# sourceMappingURL=index.js.map\n","import { createHash } from \"node:crypto\";\nimport { mkdir, rm, stat } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport simpleGit from \"simple-git\";\nimport { GitSourceError } from \"../errors.js\";\n\nexport interface CloneOptions {\n url: string;\n ref?: string;\n subpath?: string;\n useCache?: boolean;\n maxCacheAgeMs?: number;\n}\n\nexport interface ClonedSource {\n localPath: string;\n fromCache: boolean;\n sha: string;\n cachePath: string;\n sparseCheckout: boolean;\n}\n\nconst CACHE_DIR = join(homedir(), \".baton\", \"cache\");\n\n/**\n * Generates a cache key from source URL and ref\n */\nfunction getCacheKey(url: string, ref?: string): string {\n const normalized = `${url}@${ref || \"HEAD\"}`;\n return createHash(\"sha256\").update(normalized).digest(\"hex\").substring(0, 16);\n}\n\n/**\n * Gets the full cache directory path for a given source\n */\nfunction getCachePath(url: string, ref?: string): string {\n const key = getCacheKey(url, ref);\n return join(CACHE_DIR, key);\n}\n\n/**\n * Checks if a cached repository exists and is valid\n */\nasync function isCacheValid(cachePath: string): Promise<boolean> {\n try {\n const git = simpleGit(cachePath);\n // Check if the directory is a valid git repository\n await git.checkIsRepo();\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if a cached repository is stale based on FETCH_HEAD or HEAD mtime.\n * Falls back to .git/HEAD if FETCH_HEAD does not exist.\n */\nasync function isCacheStale(cachePath: string, maxAgeMs: number): Promise<boolean> {\n try {\n const fetchHeadPath = join(cachePath, \".git\", \"FETCH_HEAD\");\n const fetchHeadStat = await stat(fetchHeadPath);\n return Date.now() - fetchHeadStat.mtimeMs > maxAgeMs;\n } catch {\n // FETCH_HEAD may not exist (first clone without fetch), fall back to HEAD\n try {\n const headPath = join(cachePath, \".git\", \"HEAD\");\n const headStat = await stat(headPath);\n return Date.now() - headStat.mtimeMs > maxAgeMs;\n } catch {\n // Neither file exists — treat as stale\n return true;\n }\n }\n}\n\n/**\n * Clones a Git repository with shallow clone and optional sparse checkout\n */\nexport async function cloneGitSource(options: CloneOptions): Promise<ClonedSource> {\n const { url, ref, subpath, useCache = true, maxCacheAgeMs } = options;\n\n // Check cache first\n const cachePath = getCachePath(url, ref);\n if (useCache && (await isCacheValid(cachePath))) {\n const git = simpleGit(cachePath);\n try {\n const stale = maxCacheAgeMs !== undefined && (await isCacheStale(cachePath, maxCacheAgeMs));\n\n if (stale) {\n // Stale cache: aggressive refresh with fetch + reset\n try {\n await git.fetch([\"--depth=1\", \"origin\"]);\n await git.raw([\"reset\", \"--hard\", `origin/${ref || \"HEAD\"}`]);\n } catch {\n // Fetch failed (network issue), fall back to pull\n try {\n await git.pull([\"--depth=1\"]);\n } catch {\n // Pull also failed — use stale cache with warning\n console.warn(`[baton] Network unavailable, using stale cache for ${url}`);\n }\n }\n } else {\n // Cache is fresh or no TTL set: best-effort pull\n try {\n await git.pull([\"--depth=1\"]);\n } catch {\n // Pull failed (network issue, detached HEAD, etc.) - use cache as-is\n }\n }\n\n const sha = await git.revparse([\"HEAD\"]);\n return {\n localPath: subpath ? join(cachePath, subpath) : cachePath,\n fromCache: true,\n sha: sha.trim(),\n cachePath,\n sparseCheckout: !!subpath,\n };\n } catch (error) {\n throw new GitSourceError(\n `Failed to read cached repository: ${error instanceof Error ? error.message : String(error)}`,\n error,\n );\n }\n }\n\n // Clean up old cache directory before cloning\n try {\n await rm(cachePath, { recursive: true, force: true });\n } catch (error) {\n // Ignore errors if directory doesn't exist\n if (error instanceof Error && \"code\" in error && error.code !== \"ENOENT\") {\n throw new GitSourceError(\n `Failed to clean up cache directory: ${error instanceof Error ? error.message : String(error)}`,\n error,\n );\n }\n }\n\n // Ensure cache directory exists\n try {\n await mkdir(CACHE_DIR, { recursive: true });\n } catch (error) {\n throw new GitSourceError(\n `Failed to create cache directory: ${error instanceof Error ? error.message : String(error)}`,\n error,\n );\n }\n\n const git = simpleGit();\n\n try {\n // Clone with shallow depth\n const cloneOptions: string[] = [\"--depth=1\"];\n const isSha = ref && /^[0-9a-f]{7,40}$/i.test(ref);\n\n // If ref is a branch/tag name (not a SHA), pass it to --branch\n if (ref && !isSha && ref !== \"main\" && ref !== \"master\") {\n cloneOptions.push(\"--branch\", ref);\n }\n\n // Sparse checkout for subpath if specified\n if (subpath) {\n cloneOptions.push(\"--no-checkout\");\n }\n\n await git.clone(url, cachePath, cloneOptions);\n const repoGit = simpleGit(cachePath);\n\n // For SHA refs: fetch the specific commit then checkout\n if (isSha) {\n await repoGit.fetch([\"--depth=1\", \"origin\", ref]);\n await repoGit.checkout(\"FETCH_HEAD\");\n }\n\n // Configure sparse checkout if subpath is specified\n if (subpath) {\n await repoGit.raw([\"sparse-checkout\", \"init\", \"--cone\"]);\n await repoGit.raw([\"sparse-checkout\", \"set\", subpath]);\n if (!isSha) {\n await repoGit.checkout(ref || \"HEAD\");\n }\n } else if (ref && !isSha && ref !== \"main\" && ref !== \"master\") {\n // Checkout specific ref if needed (branch/tag, not SHA or sparse)\n await repoGit.checkout(ref);\n }\n\n // Get the current commit SHA\n const sha = await repoGit.revparse([\"HEAD\"]);\n\n return {\n localPath: subpath ? join(cachePath, subpath) : cachePath,\n fromCache: false,\n sha: sha.trim(),\n cachePath,\n sparseCheckout: !!subpath,\n };\n } catch (error) {\n throw new GitSourceError(\n `Failed to clone Git repository from ${url}: ${error instanceof Error ? error.message : String(error)}`,\n error,\n );\n }\n}\n\n/**\n * Expands sparse-checkout in a cached repository to include additional paths.\n * Uses 'git sparse-checkout add' to preserve existing checkout paths.\n */\nexport async function expandSparseCheckout(\n cachePath: string,\n additionalPaths: string[],\n): Promise<void> {\n const git = simpleGit(cachePath);\n await git.raw([\"sparse-checkout\", \"add\", ...additionalPaths]);\n}\n","import { execFile } from \"node:child_process\";\nimport { access, mkdtemp, readFile, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { FileNotFoundError, SourceNotFoundError } from \"../errors.js\";\nimport type { ParsedSource } from \"../utils/source-parser.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Validates npm package names to prevent command injection.\n * Allows scoped (@org/pkg) and unscoped names with optional version specifier.\n */\nconst NPM_PACKAGE_NAME_REGEX =\n /^(@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*(@[^@\\s;|&]+)?$/;\n\n/**\n * Validates an npm package name against the safety regex.\n * Throws if the name contains invalid characters or shell metacharacters.\n */\nexport function validateNpmPackageName(name: string): void {\n if (!NPM_PACKAGE_NAME_REGEX.test(name)) {\n throw new Error(`Invalid npm package name: \"${name}\"`);\n }\n}\n\nexport interface NpmResolverOptions {\n /**\n * Parsed NPM source (provider: \"npm\")\n */\n source: Extract<ParsedSource, { provider: \"npm\" }>;\n /**\n * Base directory for detecting package manager from lockfile\n * @default process.cwd()\n */\n basePath?: string;\n}\n\nexport interface ResolvedNpmSource {\n /**\n * Absolute path to the profile directory in node_modules\n */\n localPath: string;\n /**\n * Package manager used for installation (npm, bun, pnpm, yarn)\n */\n packageManager: string;\n /**\n * Version of the installed package\n */\n version: string;\n}\n\n/**\n * Package manager detection based on lockfile presence\n */\nexport type PackageManager = \"bun\" | \"pnpm\" | \"yarn\" | \"npm\";\n\n/**\n * Resolves an NPM source by installing the package in a temporary directory\n *\n * Features:\n * - Auto-detects package manager from lockfile (bun.lockb, pnpm-lock.yaml, yarn.lock, package-lock.json)\n * - Installs package in temp directory\n * - Searches for baton.profile.yaml in package root or under subpath\n * - Returns absolute path to profile directory\n * - Cleans up temp directory on error\n *\n * @param options - Resolver options including parsed NPM source\n * @returns Resolved source with local path and metadata\n * @throws {Error} if package not found, registry error, or no manifest\n */\nexport async function resolveNpmSource(options: NpmResolverOptions): Promise<ResolvedNpmSource> {\n const { source, basePath = process.cwd() } = options;\n\n // Validate package name to prevent command injection\n validateNpmPackageName(source.package);\n\n // Detect package manager from lockfile\n const packageManager = await detectPackageManager(basePath);\n\n // Create temporary directory for installation\n const tempDir = await mkdtemp(path.join(tmpdir(), \"baton-npm-\"));\n\n try {\n // Initialize package.json in temp dir\n await execFileAsync(\"npm\", [\"init\", \"-y\"], { cwd: tempDir });\n\n // Install the package\n const { command, args } = getInstallCommand(packageManager, source.package);\n try {\n await execFileAsync(command, args, { cwd: tempDir });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n // Enhanced error messages for common NPM issues\n if (errorMessage.includes(\"404\") || errorMessage.includes(\"Not Found\")) {\n throw new SourceNotFoundError(\n `NPM package not found: ${source.package}. Check that the package exists on the registry.`,\n error,\n );\n }\n\n if (\n errorMessage.includes(\"ENOTFOUND\") ||\n errorMessage.includes(\"network\") ||\n errorMessage.includes(\"timeout\")\n ) {\n throw new SourceNotFoundError(\n `Network error while installing ${source.package}: ${errorMessage}. Check your internet connection.`,\n error,\n );\n }\n\n if (errorMessage.includes(\"EACCES\") || errorMessage.includes(\"permission\")) {\n throw new SourceNotFoundError(\n `Permission error while installing ${source.package}: ${errorMessage}. Check directory permissions.`,\n error,\n );\n }\n\n // Re-throw original error\n throw error;\n }\n\n // Construct path to installed package\n const packagePath = path.join(tempDir, \"node_modules\", source.package);\n\n // Determine profile path (root or subpath)\n const profilePath = source.subpath ? path.join(packagePath, source.subpath) : packagePath;\n\n // Validate baton.profile.yaml exists\n const manifestPath = path.join(profilePath, \"baton.profile.yaml\");\n try {\n await access(manifestPath);\n } catch (_error) {\n throw new FileNotFoundError(\n `No baton.profile.yaml found in NPM package: ${source.package}${source.subpath ? `/${source.subpath}` : \"\"}\\nLooked in: ${profilePath}`,\n );\n }\n\n // Read package version from package.json\n const packageJsonPath = path.join(packagePath, \"package.json\");\n let version = \"unknown\";\n try {\n const packageJsonContent = await readFile(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(packageJsonContent);\n version = packageJson.version || \"unknown\";\n } catch (_error) {\n // Version read failed - continue with \"unknown\"\n }\n\n return {\n localPath: profilePath,\n packageManager,\n version,\n };\n } catch (error) {\n // Clean up temp directory on error\n try {\n await rm(tempDir, { recursive: true, force: true });\n } catch (_cleanupError) {\n // Ignore cleanup errors\n }\n throw error;\n }\n}\n\n/**\n * Detects the package manager from lockfile presence\n * Priority: bun > pnpm > yarn > npm\n */\nasync function detectPackageManager(basePath: string): Promise<PackageManager> {\n // Check for bun.lockb\n try {\n await access(path.join(basePath, \"bun.lockb\"));\n return \"bun\";\n } catch (_error) {\n // Not bun\n }\n\n // Check for pnpm-lock.yaml\n try {\n await access(path.join(basePath, \"pnpm-lock.yaml\"));\n return \"pnpm\";\n } catch (_error) {\n // Not pnpm\n }\n\n // Check for yarn.lock\n try {\n await access(path.join(basePath, \"yarn.lock\"));\n return \"yarn\";\n } catch (_error) {\n // Not yarn\n }\n\n // Default to npm\n return \"npm\";\n}\n\n/**\n * Returns the install command and arguments for the given package manager.\n * Returns structured data instead of a shell string to prevent command injection.\n */\nfunction getInstallCommand(\n packageManager: PackageManager,\n packageName: string,\n): { command: string; args: string[] } {\n switch (packageManager) {\n case \"bun\":\n return { command: \"bun\", args: [\"add\", packageName] };\n case \"pnpm\":\n return { command: \"pnpm\", args: [\"add\", packageName] };\n case \"yarn\":\n return { command: \"yarn\", args: [\"add\", packageName] };\n case \"npm\":\n return { command: \"npm\", args: [\"install\", packageName] };\n }\n}\n","'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numeric identifiers include numeric identifiers but can be longer.\n// Therefore non-numeric identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a === b ? 0 : a < b ? -1 : 1\n }\n\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n if (this.major < other.major) {\n return -1\n }\n if (this.major > other.major) {\n return 1\n }\n if (this.minor < other.minor) {\n return -1\n }\n if (this.minor > other.minor) {\n return 1\n }\n if (this.patch < other.patch) {\n return -1\n }\n if (this.patch > other.patch) {\n return 1\n }\n return 0\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are prereleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n comp = comp.replace(re[t.BUILD], '')\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If LT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","import { maxSatisfying, valid } from \"semver\";\nimport type { SimpleGit } from \"simple-git\";\nimport { simpleGit } from \"simple-git\";\nimport { VersionNotFoundError } from \"../errors.js\";\n\n/**\n * Resolves a version specification to a specific Git ref (commit SHA, tag, or branch).\n *\n * Supported version specs:\n * - Semver range: \"^1.0.0\", \"~2.3.0\", \">=1.0.0 <2.0.0\"\n * - Exact tag: \"v2.0.0\", \"2.0.0\"\n * - Branch name: \"main\", \"develop\"\n * - Commit SHA: \"abc1234567890def\"\n * - \"latest\": resolves to newest semver tag, or HEAD if no tags\n *\n * @param repoUrl - The Git repository URL\n * @param versionSpec - The version specification to resolve (default: \"latest\")\n * @returns The resolved Git ref (commit SHA)\n */\nexport async function resolveVersion(repoUrl: string, versionSpec = \"latest\"): Promise<string> {\n const git: SimpleGit = simpleGit();\n\n try {\n // Fetch all refs from remote without cloning\n const remoteRefs = await git.listRemote([\"--tags\", \"--heads\", \"--refs\", repoUrl]);\n\n // Parse remote refs into tags and branches\n const tags: string[] = [];\n const branches: Map<string, string> = new Map();\n\n for (const line of remoteRefs.split(\"\\n\")) {\n const match = line.match(/^([a-f0-9]+)\\s+refs\\/(tags|heads)\\/(.+)$/);\n if (match) {\n const [, sha, type, name] = match;\n if (type === \"tags\") {\n tags.push(name);\n } else if (type === \"heads\") {\n branches.set(name, sha);\n }\n }\n }\n\n // Handle \"latest\" - resolve to newest semver tag, or HEAD if no tags\n if (versionSpec === \"latest\") {\n const semverTags = tags.map((tag) => tag.replace(/^v/, \"\")).filter((tag) => valid(tag));\n\n if (semverTags.length > 0) {\n const latest = maxSatisfying(semverTags, \"*\");\n if (latest) {\n // Find the SHA for this tag\n const tagName = tags.find((t) => t === latest || t === `v${latest}`);\n if (tagName) {\n const tagSha = await getTagSha(git, repoUrl, tagName);\n return tagSha;\n }\n }\n }\n\n // No semver tags found, return HEAD of default branch\n const defaultBranch = branches.get(\"main\") || branches.get(\"master\");\n if (defaultBranch) {\n return defaultBranch;\n }\n\n throw new VersionNotFoundError(`No versions found in repository: ${repoUrl}`);\n }\n\n // Check if it's a commit SHA (40 hex chars) - do this before other checks\n if (/^[a-f0-9]{40}$/.test(versionSpec)) {\n return versionSpec;\n }\n\n // Check if it's a short commit SHA (7-40 hex chars) - we can't verify this without cloning\n if (/^[a-f0-9]{7,39}$/.test(versionSpec)) {\n return versionSpec; // Assume it's valid, Git will error if not\n }\n\n // Check if it's a branch name\n if (branches.has(versionSpec)) {\n return branches.get(versionSpec) as string;\n }\n\n // Check if it's an exact tag\n if (tags.includes(versionSpec) || tags.includes(`v${versionSpec}`)) {\n const tagName = tags.includes(versionSpec) ? versionSpec : `v${versionSpec}`;\n return await getTagSha(git, repoUrl, tagName);\n }\n\n // Try to interpret as semver range\n const semverTags = tags.map((tag) => tag.replace(/^v/, \"\")).filter((tag) => valid(tag));\n\n if (semverTags.length === 0) {\n throw new VersionNotFoundError(\n `No semver tags found in repository: ${repoUrl}. Available branches: ${Array.from(branches.keys()).join(\", \")}`,\n );\n }\n\n // Find the best matching version\n const matchedVersion = maxSatisfying(semverTags, versionSpec);\n\n if (!matchedVersion) {\n throw new VersionNotFoundError(\n `No version matching \"${versionSpec}\" found. Available versions: ${semverTags.join(\", \")}`,\n );\n }\n\n // Find the tag name (with or without v prefix)\n const tagName = tags.find((t) => t === matchedVersion || t === `v${matchedVersion}`);\n if (!tagName) {\n throw new VersionNotFoundError(`Tag for version ${matchedVersion} not found`);\n }\n\n return await getTagSha(git, repoUrl, tagName);\n } catch (error) {\n if (error instanceof VersionNotFoundError) {\n throw error;\n }\n throw new VersionNotFoundError(\n `Failed to resolve version \"${versionSpec}\" for ${repoUrl}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n\n/**\n * Gets the commit SHA that a tag points to.\n */\nasync function getTagSha(git: SimpleGit, repoUrl: string, tagName: string): Promise<string> {\n const result = await git.listRemote([\"--tags\", repoUrl, `refs/tags/${tagName}`]);\n const match = result.match(/^([a-f0-9]+)/);\n if (match) {\n return match[1];\n }\n throw new VersionNotFoundError(`Could not resolve tag ${tagName} to SHA`);\n}\n","import { createHash } from \"node:crypto\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { parse, stringify } from \"yaml\";\nimport { FileNotFoundError } from \"../errors.js\";\nimport type {\n FileMetadata,\n LockFile,\n LockedPackage,\n LockfileConfigType,\n} from \"../schemas/lockfile.js\";\nimport { lockfileSchema } from \"../schemas/lockfile.js\";\n\n/**\n * Metadata for a file to be recorded in the lockfile.\n * `content` is the raw source content (before tool transformation) — hashed to SHA-256.\n * `type` is the canonical config type (e.g., \"skills\", \"memory\", \"commands\").\n */\nexport interface LockFileEntry {\n content: string;\n type?: LockfileConfigType;\n}\n\n/**\n * Generates a lockfile object with locked_at timestamp and package metadata.\n *\n * Keys in the `files` map should be canonical paths (e.g., `skills/add-adapter`,\n * `memory/MEMORY.md`) — NOT tool-specific paths like `.claude/skills/add-adapter`.\n *\n * Files can be provided as plain strings (content only, backward compat)\n * or as LockFileEntry objects with canonical type annotations.\n */\nexport function generateLock(\n packages: Record<\n string,\n {\n source: string;\n resolved: string;\n version: string;\n sha: string;\n files: Record<string, string | LockFileEntry>;\n }\n >,\n): LockFile {\n const lockedPackages: Record<string, LockedPackage> = {};\n\n for (const [packageName, pkg] of Object.entries(packages)) {\n const integrity: Record<string, FileMetadata> = {};\n\n // Generate SHA-256 hashes for each file with canonical type metadata\n for (const [filename, fileData] of Object.entries(pkg.files)) {\n const isEntry = typeof fileData === \"object\";\n const content = isEntry ? fileData.content : fileData;\n const hash = createHash(\"sha256\").update(content).digest(\"hex\");\n\n integrity[filename] = {\n hash,\n type: isEntry ? fileData.type : undefined,\n };\n }\n\n lockedPackages[packageName] = {\n source: pkg.source,\n resolved: pkg.resolved,\n version: pkg.version,\n sha: pkg.sha,\n integrity,\n };\n }\n\n return {\n locked_at: new Date().toISOString(),\n packages: lockedPackages,\n };\n}\n\n/**\n * Writes a lockfile object to disk as YAML\n */\nexport async function writeLock(lockfile: LockFile, filePath: string): Promise<void> {\n const yamlContent = stringify(lockfile);\n await writeFile(filePath, yamlContent, \"utf-8\");\n}\n\n/**\n * Reads and validates an existing lockfile from disk\n */\nexport async function readLock(filePath: string): Promise<LockFile> {\n try {\n const content = await readFile(filePath, \"utf-8\");\n const parsed = parse(content);\n const result = lockfileSchema.safeParse(parsed);\n\n if (!result.success) {\n throw new Error(`Invalid lockfile: ${result.error.errors.map((e) => e.message).join(\", \")}`);\n }\n\n return result.data;\n } catch (error) {\n if (error instanceof Error && \"code\" in error && error.code === \"ENOENT\") {\n throw new FileNotFoundError(filePath);\n }\n throw error;\n }\n}\n\n/**\n * Compares current lockfile with remote state and returns list of changed packages\n */\nexport function compareLock(\n current: LockFile,\n remote: LockFile,\n): Array<{ packageName: string; reason: string }> {\n const changes: Array<{ packageName: string; reason: string }> = [];\n\n // Check for packages in current that don't exist in remote\n for (const [packageName, currentPkg] of Object.entries(current.packages)) {\n const remotePkg = remote.packages[packageName];\n\n if (!remotePkg) {\n changes.push({ packageName, reason: \"removed\" });\n continue;\n }\n\n // Check SHA mismatch\n if (currentPkg.sha !== remotePkg.sha) {\n changes.push({ packageName, reason: \"sha_mismatch\" });\n continue;\n }\n\n // Check version mismatch\n if (currentPkg.version !== remotePkg.version) {\n changes.push({ packageName, reason: \"version_changed\" });\n continue;\n }\n\n // Check integrity (file hashes)\n const currentIntegrity = currentPkg.integrity;\n const remoteIntegrity = remotePkg.integrity;\n\n let changeDetected = false;\n\n // Check if files were removed\n for (const filename of Object.keys(currentIntegrity)) {\n if (!(filename in remoteIntegrity)) {\n changes.push({\n packageName,\n reason: `file_removed: ${filename}`,\n });\n changeDetected = true;\n break;\n }\n }\n\n if (changeDetected) continue;\n\n // Check if files were added\n for (const filename of Object.keys(remoteIntegrity)) {\n if (!(filename in currentIntegrity)) {\n changes.push({ packageName, reason: `file_added: ${filename}` });\n changeDetected = true;\n break;\n }\n }\n\n if (changeDetected) continue;\n\n // Check if files have changed (compare hash field from metadata objects)\n for (const [filename, currentEntry] of Object.entries(currentIntegrity)) {\n const remoteEntry = remoteIntegrity[filename];\n if (remoteEntry.hash !== currentEntry.hash) {\n changes.push({\n packageName,\n reason: `file_changed: ${filename}`,\n });\n break; // Only report once per package\n }\n }\n }\n\n // Check for packages in remote that don't exist in current\n for (const packageName of Object.keys(remote.packages)) {\n if (!(packageName in current.packages)) {\n changes.push({ packageName, reason: \"added\" });\n }\n }\n\n return changes;\n}\n","import { readdir, rm, rmdir, stat, unlink } from \"node:fs/promises\";\nimport { dirname, isAbsolute, resolve } from \"node:path\";\n\n/**\n * Removes placed files and directories, then cleans up empty parent directories.\n *\n * Handles both files and directories (fixes EISDIR bug where unlink fails on dirs).\n * Already-deleted paths (ENOENT) are silently skipped.\n * After each removal, walks up and removes empty parent directories up to projectRoot.\n *\n * @param filePaths - Paths to remove (relative to projectRoot or absolute)\n * @param projectRoot - Project root directory (parent cleanup stops here)\n * @returns Count of successfully removed items\n */\nexport async function removePlacedFiles(filePaths: string[], projectRoot: string): Promise<number> {\n let removedCount = 0;\n\n for (const filePath of filePaths) {\n const absolutePath = isAbsolute(filePath) ? filePath : resolve(projectRoot, filePath);\n\n try {\n const fileStat = await stat(absolutePath);\n\n if (fileStat.isDirectory()) {\n await rm(absolutePath, { recursive: true, force: true });\n } else {\n await unlink(absolutePath);\n }\n\n removedCount++;\n\n // Clean up empty parent directories up to (but not including) projectRoot\n let dir = dirname(absolutePath);\n while (dir !== projectRoot && dir.startsWith(projectRoot)) {\n try {\n const entries = await readdir(dir);\n if (entries.length === 0) {\n await rmdir(dir);\n dir = dirname(dir);\n } else {\n break;\n }\n } catch {\n break;\n }\n }\n } catch (error: unknown) {\n // Already deleted (ENOENT) — silently skip\n if (\n error instanceof Error &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === \"ENOENT\"\n ) {\n continue;\n }\n // Re-throw unexpected errors\n throw error;\n }\n }\n\n return removedCount;\n}\n","import { readFile, writeFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { parse, stringify } from \"yaml\";\nimport { z } from \"zod\";\n\n/**\n * Schema for `.baton/state.yaml` — local placement state (never committed).\n *\n * Tracks which tool-specific files were placed on disk during the last sync/apply.\n * Used for orphan detection and cleanup when tools or configs change.\n */\nexport const placementStateSchema = z.object({\n synced_at: z.string().describe(\"ISO 8601 timestamp of the last sync/apply\"),\n tools: z.array(z.string()).describe(\"AI tool keys that were synced\"),\n placed_files: z.array(z.string()).describe(\"Tool-specific relative paths placed on disk\"),\n});\n\nexport type PlacementState = z.infer<typeof placementStateSchema>;\n\nconst STATE_DIR = \".baton\";\nconst STATE_FILE = \"state.yaml\";\n\n/** Resolve the absolute path to `.baton/state.yaml` for a given project root. */\nexport function getStatePath(projectRoot: string): string {\n return resolve(projectRoot, STATE_DIR, STATE_FILE);\n}\n\n/**\n * Read the local placement state from `.baton/state.yaml`.\n * Returns `null` if the file does not exist or is invalid.\n */\nexport async function readState(projectRoot: string): Promise<PlacementState | null> {\n try {\n const content = await readFile(getStatePath(projectRoot), \"utf-8\");\n const parsed = parse(content);\n const result = placementStateSchema.safeParse(parsed);\n if (!result.success) {\n return null;\n }\n return result.data;\n } catch {\n return null;\n }\n}\n\n/**\n * Write local placement state to `.baton/state.yaml`.\n * The `.baton/` directory is already gitignored by `ensureBatonDirGitignored()`.\n */\nexport async function writeState(projectRoot: string, state: PlacementState): Promise<void> {\n const { mkdir } = await import(\"node:fs/promises\");\n await mkdir(resolve(projectRoot, STATE_DIR), { recursive: true });\n const yamlContent = stringify(state);\n await writeFile(getStatePath(projectRoot), yamlContent, \"utf-8\");\n}\n","import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { z } from \"zod\";\nimport { profileManifestSchema } from \"../schemas/profile-manifest.js\";\n\n/**\n * Loads and parses a profile manifest from a given path within a source repository.\n * Returns null if the file doesn't exist (ENOENT). Logs a warning for schema\n * validation errors and other failures so they are visible to the user.\n *\n * @param sourceRoot - Absolute path to the source repository root\n * @param profilePath - Relative path to the profile (e.g., \"profiles/frontend\")\n * @returns Parsed manifest summary or null\n */\nexport async function loadProfileManifestSafe(\n sourceRoot: string,\n profilePath: string,\n): Promise<{ name: string; version: string; description?: string } | null> {\n const manifestPath = join(sourceRoot, profilePath, \"baton.profile.yaml\");\n\n try {\n const content = await readFile(manifestPath, \"utf-8\");\n const parsed = parseYaml(content);\n\n const manifest = profileManifestSchema.parse(parsed);\n\n return {\n name: manifest.name,\n version: manifest.version,\n description: manifest.description,\n };\n } catch (error) {\n // File not found — silently return null (profile directory exists but has no manifest)\n if (\n (error as NodeJS.ErrnoException).code === \"ENOENT\" ||\n (error instanceof Error && error.message.includes(\"ENOENT\"))\n ) {\n return null;\n }\n\n // Schema validation error — warn with details so the user can fix the manifest\n if (error instanceof z.ZodError) {\n const issues = error.issues.map((i) => ` - ${i.path.join(\".\")}: ${i.message}`).join(\"\\n\");\n console.warn(`Warning: Invalid profile manifest at ${manifestPath}:\\n${issues}`);\n return null;\n }\n\n // Other errors (YAML parse failure, permission issues, etc.)\n console.warn(\n `Warning: Could not load profile manifest at ${manifestPath}: ${error instanceof Error ? error.message : error}`,\n );\n return null;\n }\n}\n","import { access, readFile, readdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { sourceManifestSchema } from \"../schemas/source-manifest.js\";\nimport { loadProfileManifestSafe as loadProfileManifest } from \"./load-profile-safe.js\";\n\n/**\n * Information about a discovered profile within a source repository\n */\nexport interface SourceProfileInfo {\n /**\n * Profile name (from manifest)\n */\n name: string;\n\n /**\n * Relative path to the profile from the source root\n * e.g., \"profiles/frontend\"\n */\n path: string;\n\n /**\n * Profile version from manifest\n */\n version: string;\n\n /**\n * Profile description from manifest (optional)\n */\n description?: string;\n}\n\n/**\n * Finds and loads the source manifest (baton.source.yaml)\n *\n * @param sourceRoot - Absolute path to the source repository root\n * @returns Parsed source manifest\n * @throws Error if manifest doesn't exist or is invalid\n */\nexport async function findSourceManifest(sourceRoot: string) {\n const manifestPath = join(sourceRoot, \"baton.source.yaml\");\n\n try {\n const content = await readFile(manifestPath, \"utf-8\");\n const parsed = parseYaml(content);\n\n // Validate with Zod schema\n const manifest = sourceManifestSchema.parse(parsed);\n\n return manifest;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new Error(\n `Source manifest not found at ${manifestPath}. This directory is not a Baton source repository.`,\n );\n }\n throw new Error(`Invalid source manifest at ${manifestPath}: ${error}`);\n }\n}\n\n/**\n * Checks if a directory contains a source manifest (baton.source.yaml)\n *\n * @param sourceRoot - Absolute path to the directory to check\n * @returns true if baton.source.yaml exists, false otherwise\n */\nexport async function isSourceRepository(sourceRoot: string): Promise<boolean> {\n const manifestPath = join(sourceRoot, \"baton.source.yaml\");\n try {\n await access(manifestPath);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Discovers all profiles in a source repository by scanning the profiles/ directory\n *\n * This function:\n * 1. Scans the profiles/ directory (one level deep)\n * 2. Looks for baton.profile.yaml in each subdirectory\n * 3. Loads manifest metadata (name, version, description) for each profile\n *\n * @param sourceRoot - Absolute path to the source repository root\n * @returns Array of SourceProfileInfo objects for all discovered profiles\n * @throws Error if manifest files are invalid or cannot be read\n */\nexport async function discoverProfilesInSourceRepo(\n sourceRoot: string,\n): Promise<SourceProfileInfo[]> {\n const profiles: SourceProfileInfo[] = [];\n const profilesDir = join(sourceRoot, \"profiles\");\n\n try {\n const entries = await readdir(profilesDir, { withFileTypes: true });\n\n for (const entry of entries) {\n // Only check directories (skip files)\n if (!entry.isDirectory()) {\n continue;\n }\n\n // Skip hidden directories and common non-profile directories\n if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") {\n continue;\n }\n\n const profilePath = join(\"profiles\", entry.name);\n const manifest = await loadProfileManifest(sourceRoot, profilePath);\n\n if (manifest) {\n profiles.push({\n name: manifest.name,\n path: profilePath,\n version: manifest.version,\n description: manifest.description,\n });\n }\n }\n } catch (error) {\n // If profiles/ directory doesn't exist or cannot be read, return empty array\n // This allows source repos without profiles (e.g., documentation-only repos)\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return [];\n }\n throw error;\n }\n\n return profiles;\n}\n","import { mkdir, readFile, symlink, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\nimport type { ConfigType, Scope } from \"@baton-dx/ai-tool-paths\";\nimport type { AIToolAdapter } from \"../adapters/types.js\";\n\n/**\n * Placement mode for file placement\n * - symlink: First installation creates canonical copy, subsequent AI tools get symlinks\n * - copy: Each AI tool gets an independent copy\n */\nexport type PlacementMode = \"symlink\" | \"copy\";\n\n/**\n * Configuration for placement engine\n */\nexport interface PlacementConfig {\n /** Placement mode (default: symlink) */\n mode: PlacementMode;\n /** Project root directory (CWD) */\n projectRoot: string;\n}\n\n/**\n * File placement result\n */\nexport interface PlacementResult {\n /** Path where file was placed */\n path: string;\n /** Whether file was created or updated */\n action: \"created\" | \"updated\" | \"skipped\";\n /** Whether file is a symlink */\n isSymlink: boolean;\n /** Reason for fallback when symlink creation failed */\n fallbackReason?: string;\n}\n\n/**\n * Canonical file location tracker\n * Tracks where canonical copies are stored for symlink mode\n */\nconst canonicalFiles = new Map<string, string>();\n\n/**\n * Place a file for a specific AI tool adapter\n *\n * @param content - File content to write\n * @param adapter - AI tool adapter\n * @param type - Config type\n * @param scope - Scope (project or global)\n * @param name - File/directory name\n * @param config - Placement configuration\n * @returns Placement result\n */\nexport async function placeFile(\n content: string,\n adapter: AIToolAdapter,\n type: ConfigType,\n scope: Scope,\n name: string,\n config: PlacementConfig,\n): Promise<PlacementResult> {\n // Get target path from adapter\n const targetPath = adapter.getPath(type, scope, name);\n\n // Resolve absolute path\n const absolutePath = resolveAbsolutePath(targetPath, scope, config.projectRoot);\n\n // Ensure parent directory exists\n await mkdir(dirname(absolutePath), { recursive: true });\n\n // Check if file already exists with same content\n const existingContent = await readFileIfExists(absolutePath);\n if (existingContent === content) {\n return {\n path: absolutePath,\n action: \"skipped\",\n isSymlink: false,\n };\n }\n\n // Determine if we should use symlink or copy mode\n // Memory files have different names per agent (CLAUDE.md, AGENTS.md, GEMINI.md)\n // so they should always be independent copies\n const canSymlink = type !== \"memory\";\n const canonicalKey = `${type}:${name}`;\n const useSymlink = config.mode === \"symlink\" && canSymlink;\n\n if (useSymlink) {\n // Check if this is the first installation (canonical copy)\n const existingCanonical = canonicalFiles.get(canonicalKey);\n\n if (!existingCanonical) {\n // First installation: create canonical copy\n await writeFile(absolutePath, content, \"utf-8\");\n canonicalFiles.set(canonicalKey, absolutePath);\n\n return {\n path: absolutePath,\n action: existingContent ? \"updated\" : \"created\",\n isSymlink: false,\n };\n }\n\n // Subsequent installation: create symlink to canonical copy\n try {\n // Calculate relative path from target to canonical\n const relativePath = relative(dirname(absolutePath), existingCanonical);\n\n // Create symlink\n await symlink(relativePath, absolutePath, \"file\");\n\n return {\n path: absolutePath,\n action: \"created\",\n isSymlink: true,\n };\n } catch (error) {\n // Symlink creation failed, fall back to copy mode\n await writeFile(absolutePath, content, \"utf-8\");\n\n return {\n path: absolutePath,\n action: existingContent ? \"updated\" : \"created\",\n isSymlink: false,\n fallbackReason: `Failed to create symlink at ${absolutePath}: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n // Copy mode: write independent copy\n await writeFile(absolutePath, content, \"utf-8\");\n\n return {\n path: absolutePath,\n action: existingContent ? \"updated\" : \"created\",\n isSymlink: false,\n };\n}\n\n/**\n * Resolve absolute path based on scope and project root\n *\n * @param path - Path template (may be relative or absolute)\n * @param scope - Scope (project or global)\n * @param projectRoot - Project root directory\n * @returns Absolute path\n */\nfunction resolveAbsolutePath(path: string, scope: Scope, projectRoot: string): string {\n if (scope === \"project\") {\n // Project scope: resolve relative to project root\n if (isAbsolute(path)) {\n return path;\n }\n return resolve(projectRoot, path);\n }\n\n // Global scope: path should already be absolute\n if (isAbsolute(path)) {\n return path;\n }\n\n throw new Error(`Global scope path must be absolute, got relative path: ${path}`);\n}\n\n/**\n * Read file content if it exists, return undefined otherwise\n *\n * @param path - File path\n * @returns File content or undefined\n */\nasync function readFileIfExists(path: string): Promise<string | undefined> {\n try {\n return await readFile(path, \"utf-8\");\n } catch {\n return undefined;\n }\n}\n\n/**\n * Clear canonical file cache (for testing)\n */\nexport function clearCanonicalCache(): void {\n canonicalFiles.clear();\n}\n","import { access, copyFile, mkdir, readdir, rm, stat } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport type { ConfigType } from \"@baton-dx/ai-tool-paths\";\nimport { getAIToolAdapter, getAllAIToolAdapters } from \"../adapters/registry.js\";\n\n/**\n * Legacy file detected in the project\n */\nexport interface LegacyFile {\n /** Original legacy path */\n legacyPath: string;\n /** Suggested new path */\n newPath: string;\n /** Config type (rules, memory, etc.) */\n configType: ConfigType;\n /** AI tool key */\n toolKey: string;\n}\n\n/**\n * Migration action for a legacy file\n */\nexport type MigrationAction = \"migrate\" | \"copy\" | \"skip\";\n\n/**\n * Migration result for a legacy file\n */\nexport interface MigrationResult {\n /** Original legacy path */\n legacyPath: string;\n /** New path */\n newPath: string;\n /** Action taken */\n action: MigrationAction;\n /** Success status */\n success: boolean;\n /** Error message if failed */\n error?: string;\n}\n\n/**\n * Detect all legacy paths in the project\n *\n * @param projectRoot - Project root directory\n * @returns Array of detected legacy files\n */\nexport async function detectLegacyPaths(projectRoot: string): Promise<LegacyFile[]> {\n const legacyFiles: LegacyFile[] = [];\n\n // Get all adapters to check their legacy paths\n const adapters = getAllAIToolAdapters();\n\n for (const adapter of adapters) {\n // Check each config type for legacy paths\n const configTypes: ConfigType[] = [\"skills\", \"rules\", \"agents\", \"memory\", \"commands\"];\n\n for (const configType of configTypes) {\n const legacyPaths = adapter.getLegacyPaths(configType);\n\n for (const legacyPath of legacyPaths) {\n const absoluteLegacyPath = resolve(projectRoot, legacyPath);\n\n // Check if legacy file exists\n try {\n await access(absoluteLegacyPath);\n\n // Get new path from adapter\n // For files, extract filename from legacy path\n const filename = legacyPath.split(\"/\").pop() || legacyPath;\n const newPath = adapter.getPath(configType, \"project\", filename);\n\n legacyFiles.push({\n legacyPath: absoluteLegacyPath,\n newPath: resolve(projectRoot, newPath),\n configType,\n toolKey: adapter.key,\n });\n } catch {}\n }\n }\n }\n\n return legacyFiles;\n}\n\n/**\n * Migrate a legacy file\n *\n * @param legacyFile - Legacy file to migrate\n * @param action - Migration action (migrate, copy, skip)\n * @returns Migration result\n */\nexport async function migrateLegacyFile(\n legacyFile: LegacyFile,\n action: MigrationAction,\n): Promise<MigrationResult> {\n if (action === \"skip\") {\n return {\n legacyPath: legacyFile.legacyPath,\n newPath: legacyFile.newPath,\n action: \"skip\",\n success: true,\n };\n }\n\n try {\n // Check if legacy file is a directory or file\n const legacyStats = await stat(legacyFile.legacyPath);\n const isDirectory = legacyStats.isDirectory();\n\n if (isDirectory) {\n // Copy entire directory\n await copyDirectory(legacyFile.legacyPath, legacyFile.newPath);\n } else {\n // Ensure parent directory exists\n const parentDir = legacyFile.newPath.split(\"/\").slice(0, -1).join(\"/\");\n await mkdir(parentDir, { recursive: true });\n\n // Copy file to new location\n await copyFile(legacyFile.legacyPath, legacyFile.newPath);\n }\n\n // If action is migrate (not copy), remove the old file\n if (action === \"migrate\") {\n await rm(legacyFile.legacyPath, { recursive: true, force: true });\n }\n\n return {\n legacyPath: legacyFile.legacyPath,\n newPath: legacyFile.newPath,\n action,\n success: true,\n };\n } catch (error) {\n return {\n legacyPath: legacyFile.legacyPath,\n newPath: legacyFile.newPath,\n action,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Copy a directory recursively\n *\n * @param src - Source directory\n * @param dest - Destination directory\n */\nasync function copyDirectory(src: string, dest: string): Promise<void> {\n // Create destination directory\n await mkdir(dest, { recursive: true });\n\n // Read source directory\n const entries = await readdir(src, { withFileTypes: true });\n\n for (const entry of entries) {\n const srcPath = join(src, entry.name);\n const destPath = join(dest, entry.name);\n\n if (entry.isDirectory()) {\n // Recursively copy subdirectory\n await copyDirectory(srcPath, destPath);\n } else {\n // Copy file\n await copyFile(srcPath, destPath);\n }\n }\n}\n\n/**\n * Get the most conservative migration action (copy)\n * Used when --yes flag is set\n *\n * @returns Copy action\n */\nexport function getConservativeAction(): MigrationAction {\n return \"copy\";\n}\n\n/**\n * Migrate specific legacy paths\n * Handles common legacy paths like .cursorrules and .windsurfrules\n *\n * @param projectRoot - Project root directory\n * @returns Array of migration results\n */\nexport async function migrateCommonLegacyPaths(projectRoot: string): Promise<MigrationResult[]> {\n const results: MigrationResult[] = [];\n\n // .cursorrules -> .cursor/rules/\n const cursorrules = resolve(projectRoot, \".cursorrules\");\n try {\n await access(cursorrules);\n const cursorAdapter = getAIToolAdapter(\"cursor\");\n const newPath = cursorAdapter.getPath(\"rules\", \"project\", \"cursorrules.md\");\n\n const result = await migrateLegacyFile(\n {\n legacyPath: cursorrules,\n newPath: resolve(projectRoot, newPath),\n configType: \"rules\",\n toolKey: \"cursor\",\n },\n \"copy\",\n );\n results.push(result);\n } catch {\n // .cursorrules doesn't exist, skip\n }\n\n // .windsurfrules -> .windsurf/rules/\n const windsurfrules = resolve(projectRoot, \".windsurfrules\");\n try {\n await access(windsurfrules);\n const windsurfAdapter = getAIToolAdapter(\"windsurf\");\n const newPath = windsurfAdapter.getPath(\"rules\", \"project\", \"windsurfrules.md\");\n\n const result = await migrateLegacyFile(\n {\n legacyPath: windsurfrules,\n newPath: resolve(projectRoot, newPath),\n configType: \"rules\",\n toolKey: \"windsurf\",\n },\n \"copy\",\n );\n results.push(result);\n } catch {\n // .windsurfrules doesn't exist, skip\n }\n\n return results;\n}\n","import { relative, resolve } from \"node:path\";\nimport { CircularInheritanceError, FileNotFoundError } from \"../errors.js\";\nimport type { ProfileManifest } from \"../schemas/profile-manifest.js\";\nimport { cloneGitSource, expandSparseCheckout } from \"../sources/git-clone.js\";\nimport { parseSource } from \"../utils/source-parser.js\";\nimport { loadProfileManifest } from \"../utils/yaml-parser.js\";\n\n/**\n * Context for sparse-checkout aware profile chain resolution\n */\nexport interface CloneContext {\n /** Git repo root (cache directory) */\n cachePath: string;\n /** Whether the repo uses sparse-checkout */\n sparseCheckout: boolean;\n}\n\n/**\n * Maximum depth for profile inheritance chain\n */\nconst MAX_CHAIN_DEPTH = 10;\n\n/**\n * Profile with its source information\n */\nexport interface ResolvedProfile {\n /** Profile manifest */\n manifest: ProfileManifest;\n /** Source URL or path */\n source: string;\n /** Profile name */\n name: string;\n /** Resolved local directory path (set for local/file/cloned-git sources) */\n localPath?: string;\n}\n\n/**\n * Resolve profile inheritance chain\n * Loads all profiles in the extends chain recursively\n *\n * @param manifest - Root profile manifest\n * @param source - Source URL or path of root profile\n * @param baseDir - Base directory for resolving relative paths\n * @param cloneContext - Optional clone context for sparse-checkout expansion\n * @returns Array of resolved profiles in merge order (base first, overrides last)\n */\nexport async function resolveProfileChain(\n manifest: ProfileManifest,\n source: string,\n baseDir: string,\n cloneContext?: CloneContext,\n): Promise<ResolvedProfile[]> {\n const chain: ResolvedProfile[] = [];\n const visited = new Set<string>();\n\n // Start with the root profile\n await resolveChainRecursive(\n manifest,\n source,\n baseDir,\n chain,\n visited,\n [],\n undefined,\n cloneContext,\n );\n\n return chain;\n}\n\n/**\n * Recursively resolve profile chain\n *\n * @param manifest - Current profile manifest\n * @param source - Source URL or path\n * @param baseDir - Base directory for resolving relative paths\n * @param chain - Accumulator for resolved profiles\n * @param visited - Set of visited sources (for circular detection)\n * @param path - Current path (for error messages)\n * @param localPath - Resolved local directory path for this profile\n * @param cloneContext - Optional clone context for sparse-checkout expansion\n */\nasync function resolveChainRecursive(\n manifest: ProfileManifest,\n source: string,\n baseDir: string,\n chain: ResolvedProfile[],\n visited: Set<string>,\n path: string[],\n localPath?: string,\n cloneContext?: CloneContext,\n): Promise<void> {\n // Check for maximum depth\n if (path.length >= MAX_CHAIN_DEPTH) {\n throw new Error(\n `Profile inheritance chain exceeds maximum depth of ${MAX_CHAIN_DEPTH}. Chain: ${path.join(\" -> \")} -> ${manifest.name}`,\n );\n }\n\n // Check for circular inheritance in the current path\n if (visited.has(source)) {\n const cycle = [...path, manifest.name].join(\" -> \");\n throw new CircularInheritanceError(`Circular profile inheritance detected: ${cycle}`);\n }\n\n // Create a new visited set for this subtree (allows diamond inheritance)\n const currentVisited = new Set(visited);\n currentVisited.add(source);\n path.push(manifest.name);\n\n // Process extends (parent profiles) first\n if (manifest.extends && manifest.extends.length > 0) {\n for (const extendSource of manifest.extends) {\n try {\n // Load parent profile\n const { manifest: parentManifest, localPath: parentLocalPath } =\n await loadProfileFromSource(extendSource, baseDir, cloneContext);\n\n // Recursively resolve parent chain with current visited set\n await resolveChainRecursive(\n parentManifest,\n extendSource,\n baseDir,\n chain,\n currentVisited,\n [...path],\n parentLocalPath,\n cloneContext,\n );\n } catch (error) {\n // Re-throw critical errors that should not be swallowed\n if (error instanceof CircularInheritanceError) {\n throw error;\n }\n if (error instanceof Error && error.message.includes(\"exceeds maximum depth\")) {\n throw error;\n }\n // Re-throw all other errors with enhanced context\n const cause = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Failed to resolve extends '${extendSource}' from profile '${manifest.name}': ${cause}`,\n );\n }\n }\n }\n\n // Add current profile to chain (after parents)\n chain.push({\n manifest,\n source,\n name: manifest.name,\n localPath,\n });\n\n // Remove from path for sibling processing\n path.pop();\n}\n\n/**\n * Load a profile from a source (Git URL or local path)\n *\n * When operating inside a sparse-checkout repo and the profile is not found,\n * expands the sparse-checkout to include the profile path and retries.\n *\n * @param source - Source URL or path\n * @param baseDir - Base directory for resolving relative paths\n * @param cloneContext - Optional clone context for sparse-checkout expansion\n * @returns Loaded profile manifest and resolved local directory path\n */\nasync function loadProfileFromSource(\n source: string,\n baseDir: string,\n cloneContext?: CloneContext,\n): Promise<{ manifest: ProfileManifest; localPath: string }> {\n const parsed = parseSource(source);\n\n if (parsed.provider === \"local\") {\n // Local source: resolve relative to baseDir\n const absolutePath = resolve(baseDir, parsed.path);\n const manifestPath = resolve(absolutePath, \"baton.profile.yaml\");\n\n try {\n return { manifest: await loadProfileManifest(manifestPath), localPath: absolutePath };\n } catch (error) {\n // If sparse-checkout is active and file not found, expand and retry\n if (error instanceof FileNotFoundError && cloneContext?.sparseCheckout) {\n const relativePath = relative(cloneContext.cachePath, absolutePath);\n await expandSparseCheckout(cloneContext.cachePath, [relativePath]);\n return { manifest: await loadProfileManifest(manifestPath), localPath: absolutePath };\n }\n throw error;\n }\n }\n\n if (parsed.provider === \"file\") {\n // File source: resolve path (can be relative or absolute)\n const absolutePath = parsed.path.startsWith(\"/\") ? parsed.path : resolve(baseDir, parsed.path);\n const manifestPath = resolve(absolutePath, \"baton.profile.yaml\");\n\n try {\n return { manifest: await loadProfileManifest(manifestPath), localPath: absolutePath };\n } catch (error) {\n // If sparse-checkout is active and file not found, expand and retry\n if (error instanceof FileNotFoundError && cloneContext?.sparseCheckout) {\n const relativePath = relative(cloneContext.cachePath, absolutePath);\n await expandSparseCheckout(cloneContext.cachePath, [relativePath]);\n return { manifest: await loadProfileManifest(manifestPath), localPath: absolutePath };\n }\n throw error;\n }\n }\n\n if (parsed.provider === \"npm\") {\n // NPM source: not yet implemented\n throw new Error(\"NPM sources are not yet implemented in inheritance chain\");\n }\n\n // Git source (github, gitlab, git): clone and load\n const subpath = parsed.provider !== \"git\" ? parsed.subpath : undefined;\n const cloned = await cloneGitSource({\n url: parsed.url,\n ref: parsed.ref,\n subpath,\n });\n\n const manifestPath = resolve(cloned.localPath, \"baton.profile.yaml\");\n return { manifest: await loadProfileManifest(manifestPath), localPath: cloned.localPath };\n}\n","import type { z } from \"zod\";\nimport type { ProfileManifest } from \"../schemas/profile-manifest.js\";\nimport type { sourceManifestSchema } from \"../schemas/source-manifest.js\";\n\n/**\n * Inferred type for source manifest\n */\nexport type SourceManifest = z.infer<typeof sourceManifestSchema>;\n\n/**\n * Resolved profile support — the effective AI tools and IDE platforms\n * after applying inheritance from source to profile.\n */\nexport interface ResolvedProfileSupport {\n /** Resolved AI tools (from profile if defined, otherwise from source) */\n aiTools: string[];\n /** Resolved IDE platforms (from profile if defined, otherwise from source) */\n idePlatforms: string[];\n}\n\n/**\n * Resolve the effective AI tools and IDE platforms for a profile,\n * applying inheritance from the source manifest.\n *\n * Inheritance rules:\n * - If the profile defines ai.tools, use them (even if empty array)\n * - Otherwise, fall back to sourceManifest.ai.tools\n * - If the profile defines an ide section (keys = platform names), use those keys\n * - Otherwise, fall back to sourceManifest.ide.platforms\n *\n * Profile-level tools/IDEs can be a subset of source-level declarations.\n *\n * @param profileManifest - The profile's manifest\n * @param sourceManifest - The source's manifest (parent defaults)\n * @returns Resolved support with effective tools and platforms\n */\nexport function resolveProfileSupport(\n profileManifest: ProfileManifest,\n sourceManifest: SourceManifest,\n): ResolvedProfileSupport {\n // AI Tools: profile overrides source if defined\n const aiTools = resolveAiTools(profileManifest, sourceManifest);\n\n // IDE Platforms: profile overrides source if defined\n const idePlatforms = resolveIdePlatforms(profileManifest, sourceManifest);\n\n return { aiTools, idePlatforms };\n}\n\n/**\n * Resolve AI tools: prefer profile's ai.tools, fall back to source's ai.tools\n */\nfunction resolveAiTools(\n profileManifest: ProfileManifest,\n sourceManifest: SourceManifest,\n): string[] {\n // If profile explicitly defines ai.tools (even empty array), use it\n if (profileManifest.ai?.tools !== undefined) {\n return profileManifest.ai.tools;\n }\n\n // Fall back to source's ai.tools\n if (sourceManifest.ai?.tools !== undefined) {\n return sourceManifest.ai.tools;\n }\n\n return [];\n}\n\n/**\n * Resolve IDE platforms: prefer profile's ide keys, fall back to source's ide.platforms\n *\n * Note: Profile IDE section is Record<string, string[]> where keys are platform names.\n * Source IDE section is { platforms: string[] }. These are structurally different,\n * but both express \"which platforms are supported\".\n */\nfunction resolveIdePlatforms(\n profileManifest: ProfileManifest,\n sourceManifest: SourceManifest,\n): string[] {\n // If profile has an ide section, extract platform keys\n if (profileManifest.ide !== undefined) {\n return Object.keys(profileManifest.ide);\n }\n\n // Fall back to source's ide.platforms\n if (sourceManifest.ide?.platforms !== undefined) {\n return sourceManifest.ide.platforms;\n }\n\n return [];\n}\n","/**\n * File merge strategies for combining configuration files from multiple profiles.\n * Reference: docs/KONZEPT.md Section 7.2\n */\n\nimport { parse, stringify } from \"yaml\";\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Merge strategy: replace\n * Target file is completely replaced with source content.\n */\nexport function mergeReplace(source: string, _target: string): string {\n return source;\n}\n\n/**\n * Merge strategy: deep\n * JSON/YAML objects are deep-merged. Source keys override target keys.\n * Uses object spreading for deep merging.\n */\nexport function mergeDeep(source: string, target: string): string {\n try {\n const sourceObj = parse(source);\n const targetObj = parse(target);\n\n if (!isPlainObject(sourceObj) || !isPlainObject(targetObj)) {\n // If either is not a plain object, replace\n return source;\n }\n\n const merged = deepMergeObjects(targetObj, sourceObj);\n return stringify(merged);\n } catch (_error) {\n // If parsing fails, replace\n return source;\n }\n}\n\n/**\n * Recursively merge two objects. Source keys override target keys.\n * Arrays are replaced (not merged).\n */\nfunction deepMergeObjects(\n target: Record<string, unknown>,\n source: Record<string, unknown>,\n): Record<string, unknown> {\n const result = { ...target };\n\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n if (isPlainObject(sourceValue) && isPlainObject(targetValue)) {\n // Both are plain objects, merge recursively\n result[key] = deepMergeObjects(targetValue, sourceValue);\n } else {\n // Replace with source value (includes arrays)\n result[key] = sourceValue;\n }\n }\n\n return result;\n}\n\n/**\n * Merge strategy: append\n * Source content is appended to target with separator line and profile attribution comment.\n */\nexport function mergeAppend(source: string, target: string, profileName?: string): string {\n const attribution = profileName ? `# From profile: ${profileName}` : \"# From profile\";\n const separator = \"---\";\n\n return `${target}\\n\\n${separator}\\n${attribution}\\n\\n${source}`;\n}\n\n/**\n * Merge strategy: prepend\n * Source content is prepended to target with separator line and profile attribution comment.\n */\nexport function mergePrepend(source: string, target: string, profileName?: string): string {\n const attribution = profileName ? `# From profile: ${profileName}` : \"# From profile\";\n const separator = \"---\";\n\n return `${attribution}\\n\\n${source}\\n\\n${separator}\\n\\n${target}`;\n}\n\n/**\n * Merge strategy: skip\n * Source is only written if target file does not exist.\n * Returns target content if it exists, source content if target is empty/missing.\n */\nexport function mergeSkip(source: string, target: string): string {\n return target ? target : source;\n}\n\n/**\n * Merge strategy: prompt\n * User is interactively asked what to do (replace, skip, diff).\n * This function returns the source by default - interactive prompting happens at a higher level.\n */\nexport function mergePrompt(source: string, _target: string): string {\n // Interactive prompting is handled by the CLI layer\n // This function just returns source as default behavior\n return source;\n}\n\n/**\n * Merge strategy: directory\n * For directory-based configs (like skills):\n * - New files are added\n * - Existing files are overwritten with source content\n * - Non-source existing files are kept\n *\n * This is a marker function - directory merging is handled at the file system level.\n */\nexport function mergeDirectory(source: string, _target: string): string {\n // Directory merge is handled at the placement engine level\n // Individual files within directories use replace strategy\n return source;\n}\n\n/**\n * Merge strategy: import\n * @import-style reference line is added to target file.\n * Used for CLAUDE.md to reference other profile memory files.\n */\nexport function mergeImport(\n _source: string,\n target: string,\n profileName: string,\n fileName: string,\n): string {\n const importLine = `@.baton/profiles/${profileName}/memory/${fileName}`;\n\n // Check if import already exists\n if (target.includes(importLine)) {\n return target;\n }\n\n // Add import at the top of the file\n return target ? `${importLine}\\n\\n${target}` : importLine;\n}\n","/**\n * Merge content parts according to the specified merge strategy.\n *\n * @param parts - Non-empty array of content strings to merge\n * @param strategy - Merge strategy: \"append\", \"prepend\", \"skip\", or \"replace\" (default)\n * @returns Merged content string\n */\nexport function mergeContentParts(parts: string[], strategy: string): string {\n switch (strategy) {\n case \"append\":\n return parts.join(\"\\n\\n\");\n case \"prepend\":\n return [...parts].reverse().join(\"\\n\\n\");\n case \"skip\":\n return parts[0];\n default:\n // \"replace\" — last one wins\n return parts[parts.length - 1];\n }\n}\n","import type { ResolvedProfile } from \"../inheritance/profile-chain.js\";\n\n/** Weight value that marks a profile as locked (non-overridable) */\nexport const WEIGHT_LOCK = -1;\n\n/**\n * Get the effective weight for a resolved profile.\n * Weight defaults to 0 if not set.\n */\nexport function getProfileWeight(profile: ResolvedProfile): number {\n return profile.manifest.weight ?? 0;\n}\n\n/**\n * Check if a profile is locked (weight === -1).\n * Locked profiles' entries cannot be overridden by any other profile.\n */\nexport function isLockedProfile(profile: ResolvedProfile): boolean {\n return getProfileWeight(profile) === WEIGHT_LOCK;\n}\n\n/**\n * Sort profiles by weight for merge ordering.\n *\n * Profiles are sorted ascending by weight so that higher-weight profiles\n * appear later in the array. Since merge functions use \"last-wins\" semantics,\n * higher-weight profiles will take precedence in conflict resolution.\n *\n * The sort is stable: profiles with the same weight retain their original\n * order (declaration order in baton.yaml / inheritance chain order).\n *\n * @param profiles - Array of resolved profiles (already chain-resolved)\n * @returns New array sorted by weight (ascending)\n */\nexport function sortProfilesByWeight(profiles: ResolvedProfile[]): ResolvedProfile[] {\n return [...profiles].sort((a, b) => {\n const weightA = getProfileWeight(a);\n const weightB = getProfileWeight(b);\n return weightA - weightB;\n });\n}\n\n/**\n * Represents a merge conflict warning when two profiles with the same weight\n * define conflicting values for the same key.\n */\nexport interface WeightConflictWarning {\n key: string;\n category: \"skill\" | \"rule\" | \"memory\" | \"command\" | \"file\" | \"ide\" | \"agent\";\n profileA: string;\n profileB: string;\n weight: number;\n}\n","import type { ResolvedProfile } from \"../inheritance/profile-chain.js\";\nimport type { SkillItem } from \"../schemas/profile-manifest.js\";\nimport { getProfileWeight, isLockedProfile } from \"./weight-sort.js\";\nimport type { WeightConflictWarning } from \"./weight-sort.js\";\n\n/**\n * Merged skill item with profile attribution\n */\nexport interface MergedSkillItem extends SkillItem {\n profileName: string;\n}\n\n/**\n * Result of merging skills with optional conflict warnings\n */\nexport interface MergeSkillsResult {\n skills: MergedSkillItem[];\n warnings: WeightConflictWarning[];\n}\n\n/**\n * Merge skills from multiple profiles in an inheritance chain.\n * Skills with the same name in a more specific profile replace the entire skill directory.\n *\n * Lock behavior: Skills from profiles with weight -1 cannot be overridden.\n * Same-weight warnings: When two profiles with the same weight define the same skill,\n * a warning is emitted (the last one still wins per stable sort order).\n *\n * @param profiles - Array of resolved profiles in merge order (base first, overrides last)\n * @returns Deduplicated array of skills with most specific versions and profile attribution\n */\nexport function mergeSkills(profiles: ResolvedProfile[]): MergedSkillItem[] {\n return mergeSkillsWithWarnings(profiles).skills;\n}\n\n/**\n * Merge skills with detailed conflict warnings.\n *\n * @param profiles - Array of resolved profiles in merge order (base first, overrides last)\n * @returns Skills and any same-weight conflict warnings\n */\nexport function mergeSkillsWithWarnings(profiles: ResolvedProfile[]): MergeSkillsResult {\n const skillMap = new Map<string, MergedSkillItem>();\n const lockedKeys = new Set<string>();\n const warnings: WeightConflictWarning[] = [];\n\n // Track which profile set each key for same-weight conflict detection\n const keyOwner = new Map<string, { profileName: string; weight: number }>();\n\n for (const profile of profiles) {\n const skills = profile.manifest.ai?.skills || [];\n const weight = getProfileWeight(profile);\n const locked = isLockedProfile(profile);\n\n for (const skill of skills) {\n // Skip if this key is locked by a previous profile\n if (lockedKeys.has(skill.name)) {\n continue;\n }\n\n // Check for same-weight conflict\n const existing = keyOwner.get(skill.name);\n if (existing && existing.weight === weight && existing.profileName !== profile.name) {\n warnings.push({\n key: skill.name,\n category: \"skill\",\n profileA: existing.profileName,\n profileB: profile.name,\n weight,\n });\n }\n\n skillMap.set(skill.name, { ...skill, profileName: profile.name });\n keyOwner.set(skill.name, { profileName: profile.name, weight });\n\n if (locked) {\n lockedKeys.add(skill.name);\n }\n }\n }\n\n return {\n skills: Array.from(skillMap.values()),\n warnings,\n };\n}\n","import type { ResolvedProfile } from \"../inheritance/profile-chain.js\";\nimport { getProfileWeight, isLockedProfile } from \"./weight-sort.js\";\nimport type { WeightConflictWarning } from \"./weight-sort.js\";\n\n/**\n * Represents a rule entry that can be agent-specific or universal\n */\nexport interface RuleEntry {\n name: string; // Rule filename (e.g., \"coding-standards\", \"frontend/react\")\n agents: string[]; // Target agent keys (empty array = universal)\n profileName: string; // Source profile name for file resolution\n}\n\n/**\n * Result of merging rules with optional conflict warnings\n */\nexport interface MergeRulesResult {\n rules: RuleEntry[];\n warnings: WeightConflictWarning[];\n}\n\n/**\n * Merge rules from multiple profiles in an inheritance chain.\n * Rules are merged additively - all rules from all profiles are collected.\n * Name conflicts: more specific profile wins (later in chain overrides earlier).\n *\n * Lock behavior: Rules from profiles with weight -1 cannot be overridden.\n * Same-weight warnings: When two profiles with the same weight define the same rule key,\n * a warning is emitted.\n *\n * @param profiles - Array of resolved profiles in merge order (base first, overrides last)\n * @returns Array of unique rule entries with their target agents\n */\nexport function mergeRules(profiles: ResolvedProfile[]): RuleEntry[] {\n return mergeRulesWithWarnings(profiles).rules;\n}\n\n/**\n * Merge rules with detailed conflict warnings.\n *\n * @param profiles - Array of resolved profiles in merge order (base first, overrides last)\n * @returns Rules and any same-weight conflict warnings\n */\nexport function mergeRulesWithWarnings(profiles: ResolvedProfile[]): MergeRulesResult {\n const ruleMap = new Map<string, RuleEntry>();\n const lockedKeys = new Set<string>();\n const warnings: WeightConflictWarning[] = [];\n\n // Track which profile set each key for same-weight conflict detection\n const keyOwner = new Map<string, { profileName: string; weight: number }>();\n\n for (const profile of profiles) {\n const rules = profile.manifest.ai?.rules;\n\n if (!rules) {\n continue;\n }\n\n const weight = getProfileWeight(profile);\n const locked = isLockedProfile(profile);\n\n if (Array.isArray(rules)) {\n for (const ruleName of rules) {\n const key = `universal:${ruleName}`;\n\n if (lockedKeys.has(key)) {\n continue;\n }\n\n const existing = keyOwner.get(key);\n if (existing && existing.weight === weight && existing.profileName !== profile.name) {\n warnings.push({\n key: ruleName,\n category: \"rule\",\n profileA: existing.profileName,\n profileB: profile.name,\n weight,\n });\n }\n\n ruleMap.set(key, {\n name: ruleName,\n agents: [],\n profileName: profile.name,\n });\n keyOwner.set(key, { profileName: profile.name, weight });\n\n if (locked) {\n lockedKeys.add(key);\n }\n }\n } else {\n for (const [agentKey, ruleNames] of Object.entries(rules)) {\n if (!ruleNames) continue;\n\n for (const ruleName of ruleNames) {\n const isUniversal = agentKey === \"universal\";\n const key = `${agentKey}:${ruleName}`;\n\n if (lockedKeys.has(key)) {\n continue;\n }\n\n const existing = keyOwner.get(key);\n if (existing && existing.weight === weight && existing.profileName !== profile.name) {\n warnings.push({\n key: `${agentKey}:${ruleName}`,\n category: \"rule\",\n profileA: existing.profileName,\n profileB: profile.name,\n weight,\n });\n }\n\n ruleMap.set(key, {\n name: ruleName,\n agents: isUniversal ? [] : [agentKey],\n profileName: profile.name,\n });\n keyOwner.set(key, { profileName: profile.name, weight });\n\n if (locked) {\n lockedKeys.add(key);\n }\n }\n }\n }\n }\n\n return {\n rules: Array.from(ruleMap.values()),\n warnings,\n };\n}\n","import type { ResolvedProfile } from \"../inheritance/profile-chain.js\";\nimport { getProfileWeight, isLockedProfile } from \"./weight-sort.js\";\nimport type { WeightConflictWarning } from \"./weight-sort.js\";\n\n/**\n * Represents an agent entry that can be tool-specific or universal\n */\nexport interface AgentEntry {\n name: string; // Agent filename (e.g., \"code-reviewer\", \"test-writer\")\n agents: string[]; // Target agent keys (empty array = universal)\n profileName: string; // Source profile name for file resolution\n}\n\n/**\n * Result of merging agents with optional conflict warnings\n */\nexport interface MergeAgentsResult {\n agents: AgentEntry[];\n warnings: WeightConflictWarning[];\n}\n\n/**\n * Merge agents from multiple profiles in an inheritance chain.\n * Agents are merged additively - all agents from all profiles are collected.\n * Name conflicts: more specific profile wins (later in chain overrides earlier).\n *\n * Lock behavior: Agents from profiles with weight -1 cannot be overridden.\n * Same-weight warnings: When two profiles with the same weight define the same agent key,\n * a warning is emitted.\n *\n * @param profiles - Array of resolved profiles in merge order (base first, overrides last)\n * @returns Array of unique agent entries with their target tools\n */\nexport function mergeAgents(profiles: ResolvedProfile[]): AgentEntry[] {\n return mergeAgentsWithWarnings(profiles).agents;\n}\n\n/**\n * Merge agents with detailed conflict warnings.\n *\n * @param profiles - Array of resolved profiles in merge order (base first, overrides last)\n * @returns Agents and any same-weight conflict warnings\n */\nexport function mergeAgentsWithWarnings(profiles: ResolvedProfile[]): MergeAgentsResult {\n const agentMap = new Map<string, AgentEntry>();\n const lockedKeys = new Set<string>();\n const warnings: WeightConflictWarning[] = [];\n\n // Track which profile set each key for same-weight conflict detection\n const keyOwner = new Map<string, { profileName: string; weight: number }>();\n\n for (const profile of profiles) {\n const agents = profile.manifest.ai?.agents;\n\n if (!agents) {\n continue;\n }\n\n const weight = getProfileWeight(profile);\n const locked = isLockedProfile(profile);\n\n if (Array.isArray(agents)) {\n for (const agentName of agents) {\n const key = `universal:${agentName}`;\n\n if (lockedKeys.has(key)) {\n continue;\n }\n\n const existing = keyOwner.get(key);\n if (existing && existing.weight === weight && existing.profileName !== profile.name) {\n warnings.push({\n key: agentName,\n category: \"agent\",\n profileA: existing.profileName,\n profileB: profile.name,\n weight,\n });\n }\n\n agentMap.set(key, {\n name: agentName,\n agents: [],\n profileName: profile.name,\n });\n keyOwner.set(key, { profileName: profile.name, weight });\n\n if (locked) {\n lockedKeys.add(key);\n }\n }\n } else {\n for (const [agentKey, agentNames] of Object.entries(agents)) {\n if (!agentNames) continue;\n\n for (const agentName of agentNames) {\n const isUniversal = agentKey === \"universal\";\n const key = `${agentKey}:${agentName}`;\n\n if (lockedKeys.has(key)) {\n continue;\n }\n\n const existing = keyOwner.get(key);\n if (existing && existing.weight === weight && existing.profileName !== profile.name) {\n warnings.push({\n key: `${agentKey}:${agentName}`,\n category: \"agent\",\n profileA: existing.profileName,\n profileB: profile.name,\n weight,\n });\n }\n\n agentMap.set(key, {\n name: agentName,\n agents: isUniversal ? [] : [agentKey],\n profileName: profile.name,\n });\n keyOwner.set(key, {\n profileName: profile.name,\n weight,\n });\n\n if (locked) {\n lockedKeys.add(key);\n }\n }\n }\n }\n }\n\n return {\n agents: Array.from(agentMap.values()),\n warnings,\n };\n}\n","import type { ResolvedProfile } from \"../inheritance/profile-chain.js\";\nimport type { MergeStrategy } from \"../schemas/profile-manifest.js\";\nimport { getProfileWeight, isLockedProfile } from \"./weight-sort.js\";\nimport type { WeightConflictWarning } from \"./weight-sort.js\";\n\n/**\n * A single profile's contribution to a memory file\n */\nexport interface MemoryContribution {\n profileName: string;\n mergeStrategy: MergeStrategy;\n}\n\n/**\n * Represents a memory file entry with all contributing profiles.\n * The most-specific profile (last in chain) determines the final merge strategy.\n */\nexport interface MemoryEntry {\n filename: string; // e.g., \"CLAUDE.md\", \"AGENTS.md\", \"GEMINI.md\"\n mergeStrategy: MergeStrategy; // from the most-specific (last) profile\n contributions: MemoryContribution[]; // all profiles, in merge order (base first)\n}\n\n/**\n * Result of merging memory files with optional conflict warnings\n */\nexport interface MergeMemoryResult {\n entries: MemoryEntry[];\n warnings: WeightConflictWarning[];\n}\n\n/**\n * Merge memory files from multiple profiles in an inheritance chain.\n * Collects ALL contributions per filename so content can be merged at placement time.\n * The merge strategy of the most-specific profile determines how content is combined.\n *\n * Lock behavior: Memory strategy from profiles with weight -1 cannot be overridden.\n * Contributions are always collected, but the governing merge strategy stays locked.\n *\n * @param profiles - Array of resolved profiles in merge order (base first, overrides last)\n * @returns Array of memory file entries with all contributions\n */\nexport function mergeMemory(profiles: ResolvedProfile[]): MemoryEntry[] {\n return mergeMemoryWithWarnings(profiles).entries;\n}\n\n/**\n * Merge memory files with detailed conflict warnings.\n *\n * @param profiles - Array of resolved profiles in merge order (base first, overrides last)\n * @returns Memory entries and any same-weight conflict warnings\n */\nexport function mergeMemoryWithWarnings(profiles: ResolvedProfile[]): MergeMemoryResult {\n const memoryMap = new Map<string, MemoryEntry>();\n const lockedKeys = new Set<string>();\n const warnings: WeightConflictWarning[] = [];\n\n // Track which profile set each key's strategy for same-weight conflict detection\n const strategyOwner = new Map<string, { profileName: string; weight: number }>();\n\n for (const profile of profiles) {\n const memory = profile.manifest.ai?.memory;\n\n if (!memory || !Array.isArray(memory)) {\n continue;\n }\n\n const weight = getProfileWeight(profile);\n const locked = isLockedProfile(profile);\n\n for (const item of memory) {\n const existing = memoryMap.get(item.source);\n const contribution: MemoryContribution = {\n profileName: profile.name,\n mergeStrategy: item.merge,\n };\n\n if (existing) {\n // Always add contribution (all profiles contribute content)\n existing.contributions.push(contribution);\n\n // Only update governing strategy if not locked\n if (!lockedKeys.has(item.source)) {\n // Check for same-weight conflict on strategy\n const owner = strategyOwner.get(item.source);\n if (owner && owner.weight === weight && owner.profileName !== profile.name) {\n warnings.push({\n key: item.source,\n category: \"memory\",\n profileA: owner.profileName,\n profileB: profile.name,\n weight,\n });\n }\n\n existing.mergeStrategy = item.merge;\n strategyOwner.set(item.source, { profileName: profile.name, weight });\n\n if (locked) {\n lockedKeys.add(item.source);\n }\n }\n } else {\n memoryMap.set(item.source, {\n filename: item.source,\n mergeStrategy: item.merge,\n contributions: [contribution],\n });\n strategyOwner.set(item.source, { profileName: profile.name, weight });\n\n if (locked) {\n lockedKeys.add(item.source);\n }\n }\n }\n }\n\n return {\n entries: Array.from(memoryMap.values()),\n warnings,\n };\n}\n","'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '`': '&#x60;',\n '=': '&#x3D;'\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n endLineNumber = undefined,\n column = undefined,\n endColumn = undefined;\n\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (typeof Symbol === 'function' && context[Symbol.iterator]) {\n var newContext = [];\n var iterator = context[Symbol.iterator]();\n for (var it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (var j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n (function () {\n var priorKey = undefined;\n\n Object.keys(context).forEach(function (key) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n })();\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbkUsWUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFlBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUM1QyxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBjb250ZXh0W1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IFtdO1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGNvbnRleHRbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICBmb3IgKGxldCBpdCA9IGl0ZXJhdG9yLm5leHQoKTsgIWl0LmRvbmU7IGl0ID0gaXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgbmV3Q29udGV4dC5wdXNoKGl0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0ID0gbmV3Q29udGV4dDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbnRleHQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBjb250ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgdGhlIGl0ZXJhdGlvbnMgb25lIHN0ZXAgb3V0IG9mIHN5bmMgc28gd2UgY2FuIGRldGVjdFxuICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAvLyBhbiBpdGVybWVkaWF0ZSBrZXlzIGFycmF5LlxuICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW9yS2V5ID0ga2V5O1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihwcmlvcktleSwgaSAtIDEsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIHJldCA9IGludmVyc2UodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#if requires exactly one argument');\n }\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#unless requires exactly one argument');\n }\n return instance.helpers['if'].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field, options) {\n if (!obj) {\n // Note for 5.0: Change to \"obj == null\" in 5.0\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#with requires exactly one argument');\n }\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.createNewLookupObject = createNewLookupObject;\n\nvar _utils = require('../utils');\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\n\nfunction createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _createNewLookupObject = require('./create-new-lookup-object');\n\nvar _logger = require('../logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n var defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === 'function') {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n _logger2['default'].log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n }\n}\n\nfunction resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function (propertyName) {\n delete loggedProperties[propertyName];\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMvQyxXQUFXOzs7O0FBRTlCLElBQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFdEMsU0FBUyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUU7QUFDdkQsTUFBSSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELHdCQUFzQixDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM5Qyx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFbkQsTUFBSSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUVuRCwwQkFBd0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRTlDLFNBQU87QUFDTCxjQUFVLEVBQUU7QUFDVixlQUFTLEVBQUUsNkNBQ1Qsd0JBQXdCLEVBQ3hCLGNBQWMsQ0FBQyxzQkFBc0IsQ0FDdEM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQyw2QkFBNkI7S0FDM0Q7QUFDRCxXQUFPLEVBQUU7QUFDUCxlQUFTLEVBQUUsNkNBQ1Qsc0JBQXNCLEVBQ3RCLGNBQWMsQ0FBQyxtQkFBbUIsQ0FDbkM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQywwQkFBMEI7S0FDeEQ7R0FDRixDQUFDO0NBQ0g7O0FBRU0sU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRTtBQUN4RSxNQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUNoQyxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDakUsTUFBTTtBQUNMLFdBQU8sY0FBYyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztHQUNwRTtDQUNGOztBQUVELFNBQVMsY0FBYyxDQUFDLHlCQUF5QixFQUFFLFlBQVksRUFBRTtBQUMvRCxNQUFJLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDbkUsV0FBTyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDO0dBQ25FO0FBQ0QsTUFBSSx5QkFBeUIsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO0FBQ3hELFdBQU8seUJBQXlCLENBQUMsWUFBWSxDQUFDO0dBQy9DO0FBQ0QsZ0NBQThCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0MsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFRCxTQUFTLDhCQUE4QixDQUFDLFlBQVksRUFBRTtBQUNwRCxNQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUMzQyxvQkFBZ0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsd0JBQU8sR0FBRyxDQUNSLE9BQU8sRUFDUCxpRUFBK0QsWUFBWSxvSUFDSCxvSEFDMkMsQ0FDcEgsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxxQkFBcUIsR0FBRztBQUN0QyxRQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsWUFBWSxFQUFJO0FBQ3BELFdBQU8sZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7R0FDdkMsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoicHJvdG8tYWNjZXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlTmV3TG9va3VwT2JqZWN0IH0gZnJvbSAnLi9jcmVhdGUtbmV3LWxvb2t1cC1vYmplY3QnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBsb2dnZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChydW50aW1lT3B0aW9ucykge1xuICBsZXQgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ2NvbnN0cnVjdG9yJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19kZWZpbmVHZXR0ZXJfXyddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lU2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2xvb2t1cEdldHRlcl9fJ10gPSBmYWxzZTtcblxuICBsZXQgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG4gIGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdFsnX19wcm90b19fJ10gPSBmYWxzZTtcblxuICByZXR1cm4ge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHdoaXRlbGlzdDogY3JlYXRlTmV3TG9va3VwT2JqZWN0KFxuICAgICAgICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b1Byb3BlcnRpZXNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9Qcm9wZXJ0aWVzQnlEZWZhdWx0XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCxcbiAgICAgICAgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvTWV0aG9kc1xuICAgICAgKSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b01ldGhvZHNCeURlZmF1bHRcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN1bHRJc0FsbG93ZWQocmVzdWx0LCBwcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkge1xuICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjaGVja1doaXRlTGlzdChwcm90b0FjY2Vzc0NvbnRyb2wubWV0aG9kcywgcHJvcGVydHlOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLnByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZSwgcHJvcGVydHlOYW1lKSB7XG4gIGlmIChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKSB7XG4gIGlmIChsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gIT09IHRydWUpIHtcbiAgICBsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlO1xuICAgIGxvZ2dlci5sb2coXG4gICAgICAnZXJyb3InLFxuICAgICAgYEhhbmRsZWJhcnM6IEFjY2VzcyBoYXMgYmVlbiBkZW5pZWQgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydHkgXCIke3Byb3BlcnR5TmFtZX1cIiBiZWNhdXNlIGl0IGlzIG5vdCBhbiBcIm93biBwcm9wZXJ0eVwiIG9mIGl0cyBwYXJlbnQuXFxuYCArXG4gICAgICAgIGBZb3UgY2FuIGFkZCBhIHJ1bnRpbWUgb3B0aW9uIHRvIGRpc2FibGUgdGhlIGNoZWNrIG9yIHRoaXMgd2FybmluZzpcXG5gICtcbiAgICAgICAgYFNlZSBodHRwczovL2hhbmRsZWJhcnNqcy5jb20vYXBpLXJlZmVyZW5jZS9ydW50aW1lLW9wdGlvbnMuaHRtbCNvcHRpb25zLXRvLWNvbnRyb2wtcHJvdG90eXBlLWFjY2VzcyBmb3IgZGV0YWlsc2BcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldExvZ2dlZFByb3BlcnRpZXMoKSB7XG4gIE9iamVjdC5rZXlzKGxvZ2dlZFByb3BlcnRpZXMpLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcbiAgICBkZWxldGUgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICB9KTtcbn1cbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nvar VERSION = '4.7.8';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n },\n /**\n * Reset the memory of illegal property accesses that have already been logged.\n * @deprecated should only be used in handlebars test-cases\n */\n resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy44JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\n","// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\nexports.wrapHelper = wrapHelper;\n\nfunction wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== 'function') {\n // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n return helper;\n }\n var wrapper = function wrapper() /* dynamic arguments */{\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nvar _internalWrapHelper = require('./internal/wrapHelper');\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n\n if (templateSpec.usePartial) {\n // Use mergeIfNeeded here to prevent compiling global partials multiple times\n container.partials = container.mergeIfNeeded(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl; // internal option\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = _base.createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function (helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function (options) {\n return Utils.extend({ lookupProperty: lookupProperty }, options);\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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QUFDbkMsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xELENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGV4dGVuZGVkT3B0aW9ucyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgaG9va3M6IHRoaXMuaG9va3MsXG4gICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICBwYXJ0aWFsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGV4dGVuZGVkT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVGhlIHBhcnRpYWwgJyArXG4gICAgICAgICAgb3B0aW9ucy5uYW1lICtcbiAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgfSxcbiAgICBsb29rdXBQcm9wZXJ0eTogZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIGxldCByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRlcHRoc1tpXSAmJiBjb250YWluZXIubG9va3VwUHJvcGVydHkoZGVwdGhzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBmbixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlY2xhcmVkQmxvY2tQYXJhbXMsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2VJZk5lZWRlZDogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9XG4gICAgICAgICAgY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXVxuICAgICAgICAgICAgPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKVxuICAgICAgICAgICAgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0ZW1wbGF0ZVNwZWMubWFpbihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnMoXG4gICAgICB0ZW1wbGF0ZVNwZWMubWFpbixcbiAgICAgIG1haW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBvcHRpb25zLmRlcHRocyB8fCBbXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtc1xuICAgICk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGxldCBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgIGxldCBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV0gPSBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gIGNvbnN0IGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICByZXR1cm4gd3JhcEhlbHBlcihoZWxwZXIsIG9wdGlvbnMgPT4ge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eSB9LCBvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=\n","/* global globalThis */\n'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n // https://mathiasbynens.be/notes/globalthis\n (function () {\n if (typeof globalThis === 'object') return;\n Object.prototype.__defineGetter__('__magic__', function () {\n return this;\n });\n __magic__.globalThis = __magic__; // eslint-disable-line no-undef\n delete Object.prototype.__magic__;\n })();\n\n var $Handlebars = globalThis.Handlebars;\n\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (globalThis.Handlebars === Handlebars) {\n globalThis.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOzs7QUFHbEMsR0FBQyxZQUFXO0FBQ1YsUUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsT0FBTztBQUMzQyxVQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxZQUFXO0FBQ3hELGFBQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQyxDQUFDO0FBQ0gsYUFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDakMsV0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztHQUNuQyxDQUFBLEVBQUcsQ0FBQzs7QUFFTCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDOzs7QUFHMUMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDeEMsZ0JBQVUsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQ3JDO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGdsb2JhbFRoaXMgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKEhhbmRsZWJhcnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2dsb2JhbHRoaXNcbiAgKGZ1bmN0aW9uKCkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oJ19fbWFnaWNfXycsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSk7XG4gICAgX19tYWdpY19fLmdsb2JhbFRoaXMgPSBfX21hZ2ljX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICBkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX21hZ2ljX187XG4gIH0pKCk7XG5cbiAgY29uc3QgJEhhbmRsZWJhcnMgPSBnbG9iYWxUaGlzLkhhbmRsZWJhcnM7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgSGFuZGxlYmFycy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGdsb2JhbFRoaXMuSGFuZGxlYmFycyA9PT0gSGFuZGxlYmFycykge1xuICAgICAgZ2xvYmFsVGhpcy5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgfVxuICAgIHJldHVybiBIYW5kbGViYXJzO1xuICB9O1xufVxuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nvar AST = {\n // Public API used to evaluate derived attributes regarding AST nodes\n helpers: {\n // a mustache is definitely a helper if:\n // * it is an eligible helper, and\n // * it has at least one parameter or hash segment\n helperExpression: function helperExpression(node) {\n return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);\n },\n\n scopedId: function scopedId(path) {\n return (/^\\.|this\\b/.test(path.original)\n );\n },\n\n // an ID is simple if it only has one part, and that part is not\n // `..` or `this`.\n simpleId: function simpleId(path) {\n return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;\n }\n }\n};\n\n// Must be exported as an object rather than the root of the module as the jison lexer\n// must modify the object to operate properly.\nexports['default'] = AST;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJLEdBQUcsR0FBRzs7QUFFUixTQUFPLEVBQUU7Ozs7QUFJUCxvQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsYUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFDNUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixJQUNqQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFBLElBQzlCLENBQUMsRUFBRSxBQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUssSUFBSSxDQUFDLElBQUksQ0FBQSxBQUFDLEFBQUMsQ0FDdkQ7S0FDSDs7QUFFRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQU8sYUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQUM7S0FDekM7Ozs7QUFJRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNyRTtLQUNIO0dBQ0Y7Q0FDRixDQUFDOzs7O3FCQUlhLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbm9kZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbicgfHxcbiAgICAgICAgKChub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcgfHxcbiAgICAgICAgICBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpICYmXG4gICAgICAgICAgISEoKG5vZGUucGFyYW1zICYmIG5vZGUucGFyYW1zLmxlbmd0aCkgfHwgbm9kZS5oYXNoKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIHNjb3BlZElkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gL15cXC58dGhpc1xcYi8udGVzdChwYXRoLm9yaWdpbmFsKTtcbiAgICB9LFxuXG4gICAgLy8gYW4gSUQgaXMgc2ltcGxlIGlmIGl0IG9ubHkgaGFzIG9uZSBwYXJ0LCBhbmQgdGhhdCBwYXJ0IGlzIG5vdFxuICAgIC8vIGAuLmAgb3IgYHRoaXNgLlxuICAgIHNpbXBsZUlkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXRoLnBhcnRzLmxlbmd0aCA9PT0gMSAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQocGF0aCkgJiYgIXBhdGguZGVwdGhcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuXG4vLyBNdXN0IGJlIGV4cG9ydGVkIGFzIGFuIG9iamVjdCByYXRoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgbW9kdWxlIGFzIHRoZSBqaXNvbiBsZXhlclxuLy8gbXVzdCBtb2RpZnkgdGhlIG9iamVjdCB0byBvcGVyYXRlIHByb3Blcmx5LlxuZXhwb3J0IGRlZmF1bHQgQVNUO1xuIl19\n","// File ignored in coverage tests via setting in .istanbul.yml\n/* Jison generated parser */\n\"use strict\";\n\nexports.__esModule = true;\nvar handlebars = (function () {\n var parser = { trace: function trace() {},\n yy: {},\n symbols_: { \"error\": 2, \"root\": 3, \"program\": 4, \"EOF\": 5, \"program_repetition0\": 6, \"statement\": 7, \"mustache\": 8, \"block\": 9, \"rawBlock\": 10, \"partial\": 11, \"partialBlock\": 12, \"content\": 13, \"COMMENT\": 14, \"CONTENT\": 15, \"openRawBlock\": 16, \"rawBlock_repetition0\": 17, \"END_RAW_BLOCK\": 18, \"OPEN_RAW_BLOCK\": 19, \"helperName\": 20, \"openRawBlock_repetition0\": 21, \"openRawBlock_option0\": 22, \"CLOSE_RAW_BLOCK\": 23, \"openBlock\": 24, \"block_option0\": 25, \"closeBlock\": 26, \"openInverse\": 27, \"block_option1\": 28, \"OPEN_BLOCK\": 29, \"openBlock_repetition0\": 30, \"openBlock_option0\": 31, \"openBlock_option1\": 32, \"CLOSE\": 33, \"OPEN_INVERSE\": 34, \"openInverse_repetition0\": 35, \"openInverse_option0\": 36, \"openInverse_option1\": 37, \"openInverseChain\": 38, \"OPEN_INVERSE_CHAIN\": 39, \"openInverseChain_repetition0\": 40, \"openInverseChain_option0\": 41, \"openInverseChain_option1\": 42, \"inverseAndProgram\": 43, \"INVERSE\": 44, \"inverseChain\": 45, \"inverseChain_option0\": 46, \"OPEN_ENDBLOCK\": 47, \"OPEN\": 48, \"mustache_repetition0\": 49, \"mustache_option0\": 50, \"OPEN_UNESCAPED\": 51, \"mustache_repetition1\": 52, \"mustache_option1\": 53, \"CLOSE_UNESCAPED\": 54, \"OPEN_PARTIAL\": 55, \"partialName\": 56, \"partial_repetition0\": 57, \"partial_option0\": 58, \"openPartialBlock\": 59, \"OPEN_PARTIAL_BLOCK\": 60, \"openPartialBlock_repetition0\": 61, \"openPartialBlock_option0\": 62, \"param\": 63, \"sexpr\": 64, \"OPEN_SEXPR\": 65, \"sexpr_repetition0\": 66, \"sexpr_option0\": 67, \"CLOSE_SEXPR\": 68, \"hash\": 69, \"hash_repetition_plus0\": 70, \"hashSegment\": 71, \"ID\": 72, \"EQUALS\": 73, \"blockParams\": 74, \"OPEN_BLOCK_PARAMS\": 75, \"blockParams_repetition_plus0\": 76, \"CLOSE_BLOCK_PARAMS\": 77, \"path\": 78, \"dataName\": 79, \"STRING\": 80, \"NUMBER\": 81, \"BOOLEAN\": 82, \"UNDEFINED\": 83, \"NULL\": 84, \"DATA\": 85, \"pathSegments\": 86, \"SEP\": 87, \"$accept\": 0, \"$end\": 1 },\n terminals_: { 2: \"error\", 5: \"EOF\", 14: \"COMMENT\", 15: \"CONTENT\", 18: \"END_RAW_BLOCK\", 19: \"OPEN_RAW_BLOCK\", 23: \"CLOSE_RAW_BLOCK\", 29: \"OPEN_BLOCK\", 33: \"CLOSE\", 34: \"OPEN_INVERSE\", 39: \"OPEN_INVERSE_CHAIN\", 44: \"INVERSE\", 47: \"OPEN_ENDBLOCK\", 48: \"OPEN\", 51: \"OPEN_UNESCAPED\", 54: \"CLOSE_UNESCAPED\", 55: \"OPEN_PARTIAL\", 60: \"OPEN_PARTIAL_BLOCK\", 65: \"OPEN_SEXPR\", 68: \"CLOSE_SEXPR\", 72: \"ID\", 73: \"EQUALS\", 75: \"OPEN_BLOCK_PARAMS\", 77: \"CLOSE_BLOCK_PARAMS\", 80: \"STRING\", 81: \"NUMBER\", 82: \"BOOLEAN\", 83: \"UNDEFINED\", 84: \"NULL\", 85: \"DATA\", 87: \"SEP\" },\n productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {\n\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n break;\n case 2:\n this.$ = yy.prepareProgram($$[$0]);\n break;\n case 3:\n this.$ = $$[$0];\n break;\n case 4:\n this.$ = $$[$0];\n break;\n case 5:\n this.$ = $$[$0];\n break;\n case 6:\n this.$ = $$[$0];\n break;\n case 7:\n this.$ = $$[$0];\n break;\n case 8:\n this.$ = $$[$0];\n break;\n case 9:\n this.$ = {\n type: 'CommentStatement',\n value: yy.stripComment($$[$0]),\n strip: yy.stripFlags($$[$0], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 10:\n this.$ = {\n type: 'ContentStatement',\n original: $$[$0],\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 11:\n this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 12:\n this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };\n break;\n case 13:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n break;\n case 14:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n break;\n case 15:\n this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 16:\n this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 17:\n this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n break;\n case 18:\n this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };\n break;\n case 19:\n var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n program.chained = true;\n\n this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };\n\n break;\n case 20:\n this.$ = $$[$0];\n break;\n case 21:\n this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };\n break;\n case 22:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 23:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 24:\n this.$ = {\n type: 'PartialStatement',\n name: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n indent: '',\n strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 25:\n this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 26:\n this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };\n break;\n case 27:\n this.$ = $$[$0];\n break;\n case 28:\n this.$ = $$[$0];\n break;\n case 29:\n this.$ = {\n type: 'SubExpression',\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n loc: yy.locInfo(this._$)\n };\n\n break;\n case 30:\n this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 31:\n this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 32:\n this.$ = yy.id($$[$0 - 1]);\n break;\n case 33:\n this.$ = $$[$0];\n break;\n case 34:\n this.$ = $$[$0];\n break;\n case 35:\n this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };\n break;\n case 36:\n this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };\n break;\n case 37:\n this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };\n break;\n case 38:\n this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };\n break;\n case 39:\n this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };\n break;\n case 40:\n this.$ = $$[$0];\n break;\n case 41:\n this.$ = $$[$0];\n break;\n case 42:\n this.$ = yy.preparePath(true, $$[$0], this._$);\n break;\n case 43:\n this.$ = yy.preparePath(false, $$[$0], this._$);\n break;\n case 44:\n $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];\n break;\n case 45:\n this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];\n break;\n case 46:\n this.$ = [];\n break;\n case 47:\n $$[$0 - 1].push($$[$0]);\n break;\n case 48:\n this.$ = [];\n break;\n case 49:\n $$[$0 - 1].push($$[$0]);\n break;\n case 50:\n this.$ = [];\n break;\n case 51:\n $$[$0 - 1].push($$[$0]);\n break;\n case 58:\n this.$ = [];\n break;\n case 59:\n $$[$0 - 1].push($$[$0]);\n break;\n case 64:\n this.$ = [];\n break;\n case 65:\n $$[$0 - 1].push($$[$0]);\n break;\n case 70:\n this.$ = [];\n break;\n case 71:\n $$[$0 - 1].push($$[$0]);\n break;\n case 78:\n this.$ = [];\n break;\n case 79:\n $$[$0 - 1].push($$[$0]);\n break;\n case 82:\n this.$ = [];\n break;\n case 83:\n $$[$0 - 1].push($$[$0]);\n break;\n case 86:\n this.$ = [];\n break;\n case 87:\n $$[$0 - 1].push($$[$0]);\n break;\n case 90:\n this.$ = [];\n break;\n case 91:\n $$[$0 - 1].push($$[$0]);\n break;\n case 94:\n this.$ = [];\n break;\n case 95:\n $$[$0 - 1].push($$[$0]);\n break;\n case 98:\n this.$ = [$$[$0]];\n break;\n case 99:\n $$[$0 - 1].push($$[$0]);\n break;\n case 100:\n this.$ = [$$[$0]];\n break;\n case 101:\n $$[$0 - 1].push($$[$0]);\n break;\n }\n },\n table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }],\n defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] },\n parseError: function parseError(str, hash) {\n throw new Error(str);\n },\n parse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null],\n lstack = [],\n table = this.table,\n yytext = \"\",\n yylineno = 0,\n yyleng = 0,\n recovering = 0,\n TERROR = 2,\n EOF = 1;\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n this.yy.parser = this;\n if (typeof this.lexer.yylloc == \"undefined\") this.lexer.yylloc = {};\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n var ranges = this.lexer.options && this.lexer.options.ranges;\n if (typeof this.yy.parseError === \"function\") this.parseError = this.yy.parseError;\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = self.lexer.lex() || 1;\n if (typeof token !== \"number\") {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol,\n preErrorSymbol,\n state,\n action,\n a,\n r,\n yyval = {},\n p,\n len,\n newState,\n expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n if (!recovering) {\n expected = [];\n for (p in table[state]) if (this.terminals_[p] && p > 2) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n if (this.lexer.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1 ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected });\n }\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(this.lexer.yytext);\n lstack.push(this.lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n if (recovering > 0) recovering--;\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column };\n if (ranges) {\n yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n }\n r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n /* Jison generated lexer */\n var lexer = (function () {\n var lexer = { EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n setInput: function setInput(input) {\n this._input = input;\n this._more = this._less = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 };\n if (this.options.ranges) this.yylloc.range = [0, 0];\n this.offset = 0;\n return this;\n },\n input: function input() {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) this.yylloc.range[1]++;\n\n this._input = this._input.slice(1);\n return ch;\n },\n unput: function unput(ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) this.yylineno -= lines.length - 1;\n var r = this.yylloc.range;\n\n this.yylloc = { first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n return this;\n },\n more: function more() {\n this._more = true;\n return this;\n },\n less: function less(n) {\n this.unput(this.match.slice(n));\n },\n pastInput: function pastInput() {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n },\n upcomingInput: function upcomingInput() {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n showPosition: function showPosition() {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n next: function next() {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) this.done = true;\n\n var token, match, tempMatch, index, col, lines;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (!this.options.flex) break;\n }\n }\n if (match) {\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) this.yylineno += lines.length;\n this.yylloc = { first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) this.done = false;\n if (token) return token;else return;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), { text: \"\", token: null, line: this.yylineno });\n }\n },\n lex: function lex() {\n var r = this.next();\n if (typeof r !== 'undefined') {\n return r;\n } else {\n return this.lex();\n }\n },\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n popState: function popState() {\n return this.conditionStack.pop();\n },\n _currentRules: function _currentRules() {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n },\n topState: function topState() {\n return this.conditionStack[this.conditionStack.length - 2];\n },\n pushState: function begin(condition) {\n this.begin(condition);\n } };\n lexer.options = {};\n lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n\n function strip(start, end) {\n return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n }\n\n var YYSTATE = YY_START;\n switch ($avoiding_name_collisions) {\n case 0:\n if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n strip(0, 1);\n this.begin(\"mu\");\n } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n strip(0, 1);\n this.begin(\"emu\");\n } else {\n this.begin(\"mu\");\n }\n if (yy_.yytext) return 15;\n\n break;\n case 1:\n return 15;\n break;\n case 2:\n this.popState();\n return 15;\n\n break;\n case 3:\n this.begin('raw');return 15;\n break;\n case 4:\n this.popState();\n // Should be using `this.topState()` below, but it currently\n // returns the second top instead of the first top. Opened an\n // issue about it at https://github.com/zaach/jison/issues/291\n if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n return 15;\n } else {\n strip(5, 9);\n return 'END_RAW_BLOCK';\n }\n\n break;\n case 5:\n return 15;\n break;\n case 6:\n this.popState();\n return 14;\n\n break;\n case 7:\n return 65;\n break;\n case 8:\n return 68;\n break;\n case 9:\n return 19;\n break;\n case 10:\n this.popState();\n this.begin('raw');\n return 23;\n\n break;\n case 11:\n return 55;\n break;\n case 12:\n return 60;\n break;\n case 13:\n return 29;\n break;\n case 14:\n return 47;\n break;\n case 15:\n this.popState();return 44;\n break;\n case 16:\n this.popState();return 44;\n break;\n case 17:\n return 34;\n break;\n case 18:\n return 39;\n break;\n case 19:\n return 51;\n break;\n case 20:\n return 48;\n break;\n case 21:\n this.unput(yy_.yytext);\n this.popState();\n this.begin('com');\n\n break;\n case 22:\n this.popState();\n return 14;\n\n break;\n case 23:\n return 48;\n break;\n case 24:\n return 73;\n break;\n case 25:\n return 72;\n break;\n case 26:\n return 72;\n break;\n case 27:\n return 87;\n break;\n case 28:\n // ignore whitespace\n break;\n case 29:\n this.popState();return 54;\n break;\n case 30:\n this.popState();return 33;\n break;\n case 31:\n yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');return 80;\n break;\n case 32:\n yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");return 80;\n break;\n case 33:\n return 85;\n break;\n case 34:\n return 82;\n break;\n case 35:\n return 82;\n break;\n case 36:\n return 83;\n break;\n case 37:\n return 84;\n break;\n case 38:\n return 81;\n break;\n case 39:\n return 75;\n break;\n case 40:\n return 77;\n break;\n case 41:\n return 72;\n break;\n case 42:\n yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');return 72;\n break;\n case 43:\n return 'INVALID';\n break;\n case 44:\n return 5;\n break;\n }\n };\n lexer.rules = [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/];\n lexer.conditions = { \"mu\": { \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], \"inclusive\": false }, \"emu\": { \"rules\": [2], \"inclusive\": false }, \"com\": { \"rules\": [6], \"inclusive\": false }, \"raw\": { \"rules\": [3, 4, 5], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 44], \"inclusive\": true } };\n return lexer;\n })();\n parser.lexer = lexer;\n function Parser() {\n this.yy = {};\n }Parser.prototype = parser;parser.Parser = Parser;\n return new Parser();\n})();exports[\"default\"] = handlebars;\nmodule.exports = exports[\"default\"];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQUksVUFBVSxHQUFHLENBQUMsWUFBVTtBQUM1QixRQUFJLE1BQU0sR0FBRyxFQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssR0FBSSxFQUFHO0FBQzFDLFVBQUUsRUFBRSxFQUFFO0FBQ04sZ0JBQVEsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsMEJBQTBCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFB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RUFBRSxFQUFDLEtBQUssRUFBQztBQUM1ZSxvQkFBWSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFB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QUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckksMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9FLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0gsd0JBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQzdFLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RCwyQkFBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7O0FBRXZCLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDOztBQUV0RSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQzFFLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEgsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0SCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUNILHdCQUFJLENBQUMsQ0FBQyxHQUFHO0FBQ1AsNEJBQUksRUFBRSxrQkFBa0I7QUFDeEIsNEJBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLDhCQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7QUFDaEIsNEJBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLDhCQUFNLEVBQUUsRUFBRTtBQUNWLDZCQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QywyQkFBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztxQkFDekIsQ0FBQzs7QUFFTiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3RSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlHLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0gsd0JBQUksQ0FBQyxDQUFDLEdBQUc7QUFDUCw0QkFBSSxFQUFFLGVBQWU7QUFDckIsNEJBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLDhCQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7QUFDaEIsNEJBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLDJCQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3FCQUN6QixDQUFDOztBQUVOLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDekUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDbkcsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDcEcsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ3BILDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDM0gsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDN0csMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQzlGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEQsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBRSxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxBQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUMzRCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEdBQUc7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxHQUFHO0FBQUMsc0JBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLDBCQUFNO0FBQUEsYUFDTDtTQUNBO0FBQ0QsYUFBSyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQy8vVixzQkFBYyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQztBQUNsTSxrQkFBVSxFQUFFLFNBQVMsVUFBVSxDQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFD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QUNOLHFCQUFLLENBQUM7QUFBRSwyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFDMkIsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQix3QkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQiwyQkFBTyxFQUFFLENBQUM7O0FBRTVDLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0wsd0JBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsd0JBQUksQ0FBQyxL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QyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLFNBQVMsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLElBQUksRUFBQyxFQUFDLENBQUM7QUFDM1UsZUFBTyxLQUFLLENBQUM7S0FBQyxDQUFBLEVBQUcsQ0FBQTtBQUNqQixVQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixhQUFTLE1BQU0sR0FBSTtBQUFFLFlBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckYsV0FBTyxJQUFJLE1BQU0sRUFBQSxDQUFDO0NBQ2pCLENBQUEsRUFBRyxDQUFDLHFCQUFlLFVBQVUiLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRmlsZSBpZ25vcmVkIGluIGNvdmVyYWdlIHRlc3RzIHZpYSBzZXR0aW5nIGluIC5pc3RhbmJ1bC55bWxcbi8qIEppc29uIGdlbmVyYXRlZCBwYXJzZXIgKi9cbnZhciBoYW5kbGViYXJzID0gKGZ1bmN0aW9uKCl7XG52YXIgcGFyc2VyID0ge3RyYWNlOiBmdW5jdGlvbiB0cmFjZSAoKSB7IH0sXG55eToge30sXG5zeW1ib2xzXzoge1wiZXJyb3JcIjoyLFwicm9vdFwiOjMsXCJwcm9ncmFtXCI6NCxcIkVPRlwiOjUsXCJwcm9ncmFtX3JlcGV0aXRpb24wXCI6NixcInN0YXRlbWVudFwiOjcsXCJtdXN0YWNoZVwiOjgsXCJibG9ja1wiOjksXCJyYXdCbG9ja1wiOjEwLFwicGFydGlhbFwiOjExLFwicGFydGlhbEJsb2NrXCI6MTIsXCJjb250ZW50XCI6MTMsXCJDT01NRU5UXCI6MTQsXCJDT05URU5UXCI6MTUsXCJvcGVuUmF3QmxvY2tcIjoxNixcInJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MTcsXCJFTkRfUkFXX0JMT0NLXCI6MTgsXCJPUEVOX1JBV19CTE9DS1wiOjE5LFwiaGVscGVyTmFtZVwiOjIwLFwib3BlblJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MjEsXCJvcGVuUmF3QmxvY2tfb3B0aW9uMFwiOjIyLFwiQ0xPU0VfUkFXX0JMT0NLXCI6MjMsXCJvcGVuQmxvY2tcIjoyNCxcImJsb2NrX29wdGlvbjBcIjoyNSxcImNsb3NlQmxvY2tcIjoyNixcIm9wZW5JbnZlcnNlXCI6MjcsXCJibG9ja19vcHRpb24xXCI6MjgsXCJPUEVOX0JMT0NLXCI6MjksXCJvcGVuQmxvY2tfcmVwZXRpdGlvbjBcIjozMCxcIm9wZW5CbG9ja19vcHRpb24wXCI6MzEsXCJvcGVuQmxvY2tfb3B0aW9uMVwiOjMyLFwiQ0xPU0VcIjozMyxcIk9QRU5fSU5WRVJTRVwiOjM0LFwib3BlbkludmVyc2VfcmVwZXRpdGlvbjBcIjozNSxcIm9wZW5JbnZlcnNlX29wdGlvbjBcIjozNixcIm9wZW5JbnZlcnNlX29wdGlvbjFcIjozNyxcIm9wZW5JbnZlcnNlQ2hhaW5cIjozOCxcIk9QRU5fSU5WRVJTRV9DSEFJTlwiOjM5LFwib3BlbkludmVyc2VDaGFpbl9yZXBldGl0aW9uMFwiOjQwLFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24wXCI6NDEsXCJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjFcIjo0MixcImludmVyc2VBbmRQcm9ncmFtXCI6NDMsXCJJTlZFUlNFXCI6NDQsXCJpbnZlcnNlQ2hhaW5cIjo0NSxcImludmVyc2VDaGFpbl9vcHRpb24wXCI6NDYsXCJPUEVOX0VOREJMT0NLXCI6NDcsXCJPUEVOXCI6NDgsXCJtdXN0YWNoZV9yZXBldGl0aW9uMFwiOjQ5LFwibXVzdGFjaGVfb3B0aW9uMFwiOjUwLFwiT1BFTl9VTkVTQ0FQRURcIjo1MSxcIm11c3RhY2hlX3JlcGV0aXRpb24xXCI6NTIsXCJtdXN0YWNoZV9vcHRpb24xXCI6NTMsXCJDTE9TRV9VTkVTQ0FQRURcIjo1NCxcIk9QRU5fUEFSVElBTFwiOjU1LFwicGFydGlhbE5hbWVcIjo1NixcInBhcnRpYWxfcmVwZXRpdGlvbjBcIjo1NyxcInBhcnRpYWxfb3B0aW9uMFwiOjU4LFwib3BlblBhcnRpYWxCbG9ja1wiOjU5LFwiT1BFTl9QQVJUSUFMX0JMT0NLXCI6NjAsXCJvcGVuUGFydGlhbEJsb2NrX3JlcGV0aXRpb24wXCI6NjEsXCJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjBcIjo2MixcInBhcmFtXCI6NjMsXCJzZXhwclwiOjY0LFwiT1BFTl9TRVhQUlwiOjY1LFwic2V4cHJfcmVwZXRpdGlvbjBcIjo2NixcInNleHByX29wdGlvbjBcIjo2NyxcIkNMT1NFX1NFWFBSXCI6NjgsXCJoYXNoXCI6NjksXCJoYXNoX3JlcGV0aXRpb25fcGx1czBcIjo3MCxcImhhc2hTZWdtZW50XCI6NzEsXCJJRFwiOjcyLFwiRVFVQUxTXCI6NzMsXCJibG9ja1BhcmFtc1wiOjc0LFwiT1BFTl9CTE9DS19QQVJBTVNcIjo3NSxcImJsb2NrUGFyYW1zX3JlcGV0aXRpb25fcGx1czBcIjo3NixcIkNMT1NFX0JMT0NLX1BBUkFNU1wiOjc3LFwicGF0aFwiOjc4LFwiZGF0YU5hbWVcIjo3OSxcIlNUUklOR1wiOjgwLFwiTlVNQkVSXCI6ODEsXCJCT09MRUFOXCI6ODIsXCJVTkRFRklORURcIjo4MyxcIk5VTExcIjo4NCxcIkRBVEFcIjo4NSxcInBhdGhTZWdtZW50c1wiOjg2LFwiU0VQXCI6ODcsXCIkYWNjZXB0XCI6MCxcIiRlbmRcIjoxfSxcbnRlcm1pbmFsc186IHsyOlwiZXJyb3JcIiw1OlwiRU9GXCIsMTQ6XCJDT01NRU5UXCIsMTU6XCJDT05URU5UXCIsMTg6XCJFTkRfUkFXX0JMT0NLXCIsMTk6XCJPUEVOX1JBV19CTE9DS1wiLDIzOlwiQ0xPU0VfUkFXX0JMT0NLXCIsMjk6XCJPUEVOX0JMT0NLXCIsMzM6XCJDTE9TRVwiLDM0OlwiT1BFTl9JTlZFUlNFXCIsMzk6XCJPUEVOX0lOVkVSU0VfQ0hBSU5cIiw0NDpcIklOVkVSU0VcIiw0NzpcIk9QRU5fRU5EQkxPQ0tcIiw0ODpcIk9QRU5cIiw1MTpcIk9QRU5fVU5FU0NBUEVEXCIsNTQ6XCJDTE9TRV9VTkVTQ0FQRURcIiw1NTpcIk9QRU5fUEFSVElBTFwiLDYwOlwiT1BFTl9QQVJUSUFMX0JMT0NLXCIsNjU6XCJPUEVOX1NFWFBSXCIsNjg6XCJDTE9TRV9TRVhQUlwiLDcyOlwiSURcIiw3MzpcIkVRVUFMU1wiLDc1OlwiT1BFTl9CTE9DS19QQVJBTVNcIiw3NzpcIkNMT1NFX0JMT0NLX1BBUkFNU1wiLDgwOlwiU1RSSU5HXCIsODE6XCJOVU1CRVJcIiw4MjpcIkJPT0xFQU5cIiw4MzpcIlVOREVGSU5FRFwiLDg0OlwiTlVMTFwiLDg1OlwiREFUQVwiLDg3OlwiU0VQXCJ9LFxucHJvZHVjdGlvbnNfOiBbMCxbMywyXSxbNCwxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbMTMsMV0sWzEwLDNdLFsxNiw1XSxbOSw0XSxbOSw0XSxbMjQsNl0sWzI3LDZdLFszOCw2XSxbNDMsMl0sWzQ1LDNdLFs0NSwxXSxbMjYsM10sWzgsNV0sWzgsNV0sWzExLDVdLFsxMiwzXSxbNTksNV0sWzYzLDFdLFs2MywxXSxbNjQsNV0sWzY5LDFdLFs3MSwzXSxbNzQsM10sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFs1NiwxXSxbNTYsMV0sWzc5LDJdLFs3OCwxXSxbODYsM10sWzg2LDFdLFs2LDBdLFs2LDJdLFsxNywwXSxbMTcsMl0sWzIxLDBdLFsyMSwyXSxbMjIsMF0sWzIyLDFdLFsyNSwwXSxbMjUsMV0sWzI4LDBdLFsyOCwxXSxbMzAsMF0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMyLDBdLFszMiwxXSxbMzUsMF0sWzM1LDJdLFszNiwwXSxbMzYsMV0sWzM3LDBdLFszNywxXSxbNDAsMF0sWzQwLDJdLFs0MSwwXSxbNDEsMV0sWzQyLDBdLFs0MiwxXSxbNDYsMF0sWzQ2LDFdLFs0OSwwXSxbNDksMl0sWzUwLDBdLFs1MCwxXSxbNTIsMF0sWzUyLDJdLFs1MywwXSxbNTMsMV0sWzU3LDBdLFs1NywyXSxbNTgsMF0sWzU4LDFdLFs2MSwwXSxbNjEsMl0sWzYyLDBdLFs2MiwxXSxbNjYsMF0sWzY2LDJdLFs2NywwXSxbNjcsMV0sWzcwLDFdLFs3MCwyXSxbNzYsMV0sWzc2LDJdXSxcbnBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQseXlsZW5nLHl5bGluZW5vLHl5LHl5c3RhdGUsJCQsXyRcbikge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSB5eS5wcmVwYXJlUHJvZ3JhbSgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDM6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDU6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDY6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDc6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDk6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTp0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDEyOnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuICAgIHZhciBpbnZlcnNlID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBhcmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAtMV0ubG9jKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDIwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgbmFtZTogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBpbmRlbnQ6ICcnLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAyNTp0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMjg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI5OlxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6dGhpcy4kID0ge3R5cGU6ICdIYXNoJywgcGFpcnM6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzNDp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzU6dGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjp0aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSB7dHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmlnaW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTp0aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0MTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgNDI6dGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0Mzp0aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0NDogJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDU6dGhpcy4kID0gW3twYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdfV07XG5icmVhaztcbmNhc2UgNDY6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNDc6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDQ4OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDQ5OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA1MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA1MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDY0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDY1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA3MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA3MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDgyOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDgzOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4Njp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4NzokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgOTA6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgOTE6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDk1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5ODp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5OTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMTAwOnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDEwMTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDZdLDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE6WzNdfSx7NTpbMSw0XX0sezU6WzIsMl0sNzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDE0OlsxLDEyXSwxNTpbMSwyMF0sMTY6MTcsMTk6WzEsMjNdLDI0OjE1LDI3OjE2LDI5OlsxLDIxXSwzNDpbMSwyMl0sMzk6WzIsMl0sNDQ6WzIsMl0sNDc6WzIsMl0sNDg6WzEsMTNdLDUxOlsxLDE0XSw1NTpbMSwxOF0sNTk6MTksNjA6WzEsMjRdfSx7MTpbMiwxXX0sezU6WzIsNDddLDE0OlsyLDQ3XSwxNTpbMiw0N10sMTk6WzIsNDddLDI5OlsyLDQ3XSwzNDpbMiw0N10sMzk6WzIsNDddLDQ0OlsyLDQ3XSw0NzpbMiw0N10sNDg6WzIsNDddLDUxOlsyLDQ3XSw1NTpbMiw0N10sNjA6WzIsNDddfSx7NTpbMiwzXSwxNDpbMiwzXSwxNTpbMiwzXSwxOTpbMiwzXSwyOTpbMiwzXSwzNDpbMiwzXSwzOTpbMiwzXSw0NDpbMiwzXSw0NzpbMiwzXSw0ODpbMiwzXSw1MTpbMiwzXSw1NTpbMiwzXSw2MDpbMiwzXX0sezU6WzIsNF0sMTQ6WzIsNF0sMTU6WzIsNF0sMTk6WzIsNF0sMjk6WzIsNF0sMzQ6WzIsNF0sMzk6WzIsNF0sNDQ6WzIsNF0sNDc6WzIsNF0sNDg6WzIsNF0sNTE6WzIsNF0sNTU6WzIsNF0sNjA6WzIsNF19LHs1OlsyLDVdLDE0OlsyLDVdLDE1OlsyLDVdLDE5OlsyLDVdLDI5OlsyLDVdLDM0OlsyLDVdLDM5OlsyLDVdLDQ0OlsyLDVdLDQ3OlsyLDVdLDQ4OlsyLDVdLDUxOlsyLDVdLDU1OlsyLDVdLDYwOlsyLDVdfSx7NTpbMiw2XSwxNDpbMiw2XSwxNTpbMiw2XSwxOTpbMiw2XSwyOTpbMiw2XSwzNDpbMiw2XSwzOTpbMiw2XSw0NDpbMiw2XSw0NzpbMiw2XSw0ODpbMiw2XSw1MTpbMiw2XSw1NTpbMiw2XSw2MDpbMiw2XX0sezU6WzIsN10sMTQ6WzIsN10sMTU6WzIsN10sMTk6WzIsN10sMjk6WzIsN10sMzQ6WzIsN10sMzk6WzIsN10sNDQ6WzIsN10sNDc6WzIsN10sNDg6WzIsN10sNTE6WzIsN10sNTU6WzIsN10sNjA6WzIsN119LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhdLDE5OlsyLDhdLDI5OlsyLDhdLDM0OlsyLDhdLDM5OlsyLDhdLDQ0OlsyLDhdLDQ3OlsyLDhdLDQ4OlsyLDhdLDUxOlsyLDhdLDU1OlsyLDhdLDYwOlsyLDhdfSx7NTpbMiw5XSwxNDpbMiw5XSwxNTpbMiw5XSwxOTpbMiw5XSwyOTpbMiw5XSwzNDpbMiw5XSwzOTpbMiw5XSw0NDpbMiw5XSw0NzpbMiw5XSw0ODpbMiw5XSw1MTpbMiw5XSw1NTpbMiw5XSw2MDpbMiw5XX0sezIwOjI1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjM2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6MzcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sMzk6WzIsNDZdLDQ0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NDozOCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE1OlsyLDQ4XSwxNzozOSwxODpbMiw0OF19LHsyMDo0MSw1Njo0MCw2NDo0Miw2NTpbMSw0M10sNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NDo0NCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NTpbMiwxMF0sMTQ6WzIsMTBdLDE1OlsyLDEwXSwxODpbMiwxMF0sMTk6WzIsMTBdLDI5OlsyLDEwXSwzNDpbMiwxMF0sMzk6WzIsMTBdLDQ0OlsyLDEwXSw0NzpbMiwxMF0sNDg6WzIsMTBdLDUxOlsyLDEwXSw1NTpbMiwxMF0sNjA6WzIsMTBdfSx7MjA6NDUsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDYsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDcsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDEsNTY6NDgsNjQ6NDIsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsyLDc4XSw0OTo0OSw2NTpbMiw3OF0sNzI6WzIsNzhdLDgwOlsyLDc4XSw4MTpbMiw3OF0sODI6WzIsNzhdLDgzOlsyLDc4XSw4NDpbMiw3OF0sODU6WzIsNzhdfSx7MjM6WzIsMzNdLDMzOlsyLDMzXSw1NDpbMiwzM10sNjU6WzIsMzNdLDY4OlsyLDMzXSw3MjpbMiwzM10sNzU6WzIsMzNdLDgwOlsyLDMzXSw4MTpbMiwzM10sODI6WzIsMzNdLDgzOlsyLDMzXSw4NDpbMiwzM10sODU6WzIsMzNdfSx7MjM6WzIsMzRdLDMzOlsyLDM0XSw1NDpbMiwzNF0sNjU6WzIsMzRdLDY4OlsyLDM0XSw3MjpbMiwzNF0sNzU6WzIsMzRdLDgwOlsyLDM0XSw4MTpbMiwzNF0sODI6WzIsMzRdLDgzOlsyLDM0XSw4NDpbMiwzNF0sODU6WzIsMzRdfSx7MjM6WzIsMzVdLDMzOlsyLDM1XSw1NDpbMiwzNV0sNjU6WzIsMzVdLDY4OlsyLDM1XSw3MjpbMiwzNV0sNzU6WzIsMzVdLDgwOlsyLDM1XSw4MTpbMiwzNV0sODI6WzIsMzVdLDgzOlsyLDM1XSw4NDpbMiwzNV0sODU6WzIsMzVdfSx7MjM6WzIsMzZdLDMzOlsyLDM2XSw1NDpbMiwzNl0sNjU6WzIsMzZdLDY4OlsyLDM2XSw3MjpbMiwzNl0sNzU6WzIsMzZdLDgwOlsyLDM2XSw4MTpbMiwzNl0sODI6WzIsMzZdLDgzOlsyLDM2XSw4NDpbMiwzNl0sODU6WzIsMzZdfSx7MjM6WzIsMzddLDMzOlsyLDM3XSw1NDpbMiwzN10sNjU6WzIsMzddLDY4OlsyLDM3XSw3MjpbMiwzN10sNzU6WzIsMzddLDgwOlsyLDM3XSw4MTpbMiwzN10sODI6WzIsMzddLDgzOlsyLDM3XSw4NDpbMiwzN10sODU6WzIsMzddfSx7MjM6WzIsMzhdLDMzOlsyLDM4XSw1NDpbMiwzOF0sNjU6WzIsMzhdLDY4OlsyLDM4XSw3MjpbMiwzOF0sNzU6WzIsMzhdLDgwOlsyLDM4XSw4MTpbMiwzOF0sODI6WzIsMzhdLDgzOlsyLDM4XSw4NDpbMiwzOF0sODU6WzIsMzhdfSx7MjM6WzIsMzldLDMzOlsyLDM5XSw1NDpbMiwzOV0sNjU6WzIsMzldLDY4OlsyLDM5XSw3MjpbMiwzOV0sNzU6WzIsMzldLDgwOlsyLDM5XSw4MTpbMiwzOV0sODI6WzIsMzldLDgzOlsyLDM5XSw4NDpbMiwzOV0sODU6WzIsMzldfSx7MjM6WzIsNDNdLDMzOlsyLDQzXSw1NDpbMiw0M10sNjU6WzIsNDNdLDY4OlsyLDQzXSw3MjpbMiw0M10sNzU6WzIsNDNdLDgwOlsyLDQzXSw4MTpbMiw0M10sODI6WzIsNDNdLDgzOlsyLDQzXSw4NDpbMiw0M10sODU6WzIsNDNdLDg3OlsxLDUwXX0sezcyOlsxLDM1XSw4Njo1MX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHs1Mjo1Miw1NDpbMiw4Ml0sNjU6WzIsODJdLDcyOlsyLDgyXSw4MDpbMiw4Ml0sODE6WzIsODJdLDgyOlsyLDgyXSw4MzpbMiw4Ml0sODQ6WzIsODJdLDg1OlsyLDgyXX0sezI1OjUzLDM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6NTQsNDc6WzIsNTRdfSx7Mjg6NTksNDM6NjAsNDQ6WzEsNThdLDQ3OlsyLDU2XX0sezEzOjYyLDE1OlsxLDIwXSwxODpbMSw2MV19LHszMzpbMiw4Nl0sNTc6NjMsNjU6WzIsODZdLDcyOlsyLDg2XSw4MDpbMiw4Nl0sODE6WzIsODZdLDgyOlsyLDg2XSw4MzpbMiw4Nl0sODQ6WzIsODZdLDg1OlsyLDg2XX0sezMzOlsyLDQwXSw2NTpbMiw0MF0sNzI6WzIsNDBdLDgwOlsyLDQwXSw4MTpbMiw0MF0sODI6WzIsNDBdLDgzOlsyLDQwXSw4NDpbMiw0MF0sODU6WzIsNDBdfSx7MzM6WzIsNDFdLDY1OlsyLDQxXSw3MjpbMiw0MV0sODA6WzIsNDFdLDgxOlsyLDQxXSw4MjpbMiw0MV0sODM6WzIsNDFdLDg0OlsyLDQxXSw4NTpbMiw0MV19LHsyMDo2NCw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo2NSw0NzpbMSw2Nl19LHszMDo2NywzMzpbMiw1OF0sNjU6WzIsNThdLDcyOlsyLDU4XSw3NTpbMiw1OF0sODA6WzIsNThdLDgxOlsyLDU4XSw4MjpbMiw1OF0sODM6WzIsNThdLDg0OlsyLDU4XSw4NTpbMiw1OF19LHszMzpbMiw2NF0sMzU6NjgsNjU6WzIsNjRdLDcyOlsyLDY0XSw3NTpbMiw2NF0sODA6WzIsNjRdLDgxOlsyLDY0XSw4MjpbMiw2NF0sODM6WzIsNjRdLDg0OlsyLDY0XSw4NTpbMiw2NF19LHsyMTo2OSwyMzpbMiw1MF0sNjU6WzIsNTBdLDcyOlsyLDUwXSw4MDpbMiw1MF0sODE6WzIsNTBdLDgyOlsyLDUwXSw4MzpbMiw1MF0sODQ6WzIsNTBdLDg1OlsyLDUwXX0sezMzOlsyLDkwXSw2MTo3MCw2NTpbMiw5MF0sNzI6WzIsOTBdLDgwOlsyLDkwXSw4MTpbMiw5MF0sODI6WzIsOTBdLDgzOlsyLDkwXSw4NDpbMiw5MF0sODU6WzIsOTBdfSx7MjA6NzQsMzM6WzIsODBdLDUwOjcxLDYzOjcyLDY0Ojc1LDY1OlsxLDQzXSw2OTo3Myw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs3MjpbMSw3OV19LHsyMzpbMiw0Ml0sMzM6WzIsNDJdLDU0OlsyLDQyXSw2NTpbMiw0Ml0sNjg6WzIsNDJdLDcyOlsyLDQyXSw3NTpbMiw0Ml0sODA6WzIsNDJdLDgxOlsyLDQyXSw4MjpbMiw0Ml0sODM6WzIsNDJdLDg0OlsyLDQyXSw4NTpbMiw0Ml0sODc6WzEsNTBdfSx7MjA6NzQsNTM6ODAsNTQ6WzIsODRdLDYzOjgxLDY0Ojc1LDY1OlsxLDQzXSw2OTo4Miw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo4Myw0NzpbMSw2Nl19LHs0NzpbMiw1NV19LHs0Ojg0LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ3OlsyLDIwXX0sezIwOjg1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6ODYsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezI2Ojg3LDQ3OlsxLDY2XX0sezQ3OlsyLDU3XX0sezU6WzIsMTFdLDE0OlsyLDExXSwxNTpbMiwxMV0sMTk6WzIsMTFdLDI5OlsyLDExXSwzNDpbMiwxMV0sMzk6WzIsMTFdLDQ0OlsyLDExXSw0NzpbMiwxMV0sNDg6WzIsMTFdLDUxOlsyLDExXSw1NTpbMiwxMV0sNjA6WzIsMTFdfSx7MTU6WzIsNDldLDE4OlsyLDQ5XX0sezIwOjc0LDMzOlsyLDg4XSw1ODo4OCw2Mzo4OSw2NDo3NSw2NTpbMSw0M10sNjk6OTAsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NjU6WzIsOTRdLDY2OjkxLDY4OlsyLDk0XSw3MjpbMiw5NF0sODA6WzIsOTRdLDgxOlsyLDk0XSw4MjpbMiw5NF0sODM6WzIsOTRdLDg0OlsyLDk0XSw4NTpbMiw5NF19LHs1OlsyLDI1XSwxNDpbMiwyNV0sMTU6WzIsMjVdLDE5OlsyLDI1XSwyOTpbMiwyNV0sMzQ6WzIsMjVdLDM5OlsyLDI1XSw0NDpbMiwyNV0sNDc6WzIsMjVdLDQ4OlsyLDI1XSw1MTpbMiwyNV0sNTU6WzIsMjVdLDYwOlsyLDI1XX0sezIwOjkyLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMxOjkzLDMzOlsyLDYwXSw2Mzo5NCw2NDo3NSw2NTpbMSw0M10sNjk6OTUsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDYwXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMzOlsyLDY2XSwzNjo5Niw2Mzo5Nyw2NDo3NSw2NTpbMSw0M10sNjk6OTgsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDY2XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDIyOjk5LDIzOlsyLDUyXSw2MzoxMDAsNjQ6NzUsNjU6WzEsNDNdLDY5OjEwMSw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo3NCwzMzpbMiw5Ml0sNjI6MTAyLDYzOjEwMyw2NDo3NSw2NTpbMSw0M10sNjk6MTA0LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDEwNV19LHszMzpbMiw3OV0sNjU6WzIsNzldLDcyOlsyLDc5XSw4MDpbMiw3OV0sODE6WzIsNzldLDgyOlsyLDc5XSw4MzpbMiw3OV0sODQ6WzIsNzldLDg1OlsyLDc5XX0sezMzOlsyLDgxXX0sezIzOlsyLDI3XSwzMzpbMiwyN10sNTQ6WzIsMjddLDY1OlsyLDI3XSw2ODpbMiwyN10sNzI6WzIsMjddLDc1OlsyLDI3XSw4MDpbMiwyN10sODE6WzIsMjddLDgyOlsyLDI3XSw4MzpbMiwyN10sODQ6WzIsMjddLDg1OlsyLDI3XX0sezIzOlsyLDI4XSwzMzpbMiwyOF0sNTQ6WzIsMjhdLDY1OlsyLDI4XSw2ODpbMiwyOF0sNzI6WzIsMjhdLDc1OlsyLDI4XSw4MDpbMiwyOF0sODE6WzIsMjhdLDgyOlsyLDI4XSw4MzpbMiwyOF0sODQ6WzIsMjhdLDg1OlsyLDI4XX0sezIzOlsyLDMwXSwzMzpbMiwzMF0sNTQ6WzIsMzBdLDY4OlsyLDMwXSw3MToxMDYsNzI6WzEsMTA3XSw3NTpbMiwzMF19LHsyMzpbMiw5OF0sMzM6WzIsOThdLDU0OlsyLDk4XSw2ODpbMiw5OF0sNzI6WzIsOThdLDc1OlsyLDk4XX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDczOlsxLDEwOF0sNzU6WzIsNDVdLDgwOlsyLDQ1XSw4MTpbMiw0NV0sODI6WzIsNDVdLDgzOlsyLDQ1XSw4NDpbMiw0NV0sODU6WzIsNDVdLDg3OlsyLDQ1XX0sezIzOlsyLDQ0XSwzMzpbMiw0NF0sNTQ6WzIsNDRdLDY1OlsyLDQ0XSw2ODpbMiw0NF0sNzI6WzIsNDRdLDc1OlsyLDQ0XSw4MDpbMiw0NF0sODE6WzIsNDRdLDgyOlsyLDQ0XSw4MzpbMiw0NF0sODQ6WzIsNDRdLDg1OlsyLDQ0XSw4NzpbMiw0NF19LHs1NDpbMSwxMDldfSx7NTQ6WzIsODNdLDY1OlsyLDgzXSw3MjpbMiw4M10sODA6WzIsODNdLDgxOlsyLDgzXSw4MjpbMiw4M10sODM6WzIsODNdLDg0OlsyLDgzXSw4NTpbMiw4M119LHs1NDpbMiw4NV19LHs1OlsyLDEzXSwxNDpbMiwxM10sMTU6WzIsMTNdLDE5OlsyLDEzXSwyOTpbMiwxM10sMzQ6WzIsMTNdLDM5OlsyLDEzXSw0NDpbMiwxM10sNDc6WzIsMTNdLDQ4OlsyLDEzXSw1MTpbMiwxM10sNTU6WzIsMTNdLDYwOlsyLDEzXX0sezM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6MTExLDQ2OjExMCw0NzpbMiw3Nl19LHszMzpbMiw3MF0sNDA6MTEyLDY1OlsyLDcwXSw3MjpbMiw3MF0sNzU6WzIsNzBdLDgwOlsyLDcwXSw4MTpbMiw3MF0sODI6WzIsNzBdLDgzOlsyLDcwXSw4NDpbMiw3MF0sODU6WzIsNzBdfSx7NDc6WzIsMThdfSx7NTpbMiwxNF0sMTQ6WzIsMTRdLDE1OlsyLDE0XSwxOTpbMiwxNF0sMjk6WzIsMTRdLDM0OlsyLDE0XSwzOTpbMiwxNF0sNDQ6WzIsMTRdLDQ3OlsyLDE0XSw0ODpbMiwxNF0sNTE6WzIsMTRdLDU1OlsyLDE0XSw2MDpbMiwxNF19LHszMzpbMSwxMTNdfSx7MzM6WzIsODddLDY1OlsyLDg3XSw3MjpbMiw4N10sODA6WzIsODddLDgxOlsyLDg3XSw4MjpbMiw4N10sODM6WzIsODddLDg0OlsyLDg3XSw4NTpbMiw4N119LHszMzpbMiw4OV19LHsyMDo3NCw2MzoxMTUsNjQ6NzUsNjU6WzEsNDNdLDY3OjExNCw2ODpbMiw5Nl0sNjk6MTE2LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDExN119LHszMjoxMTgsMzM6WzIsNjJdLDc0OjExOSw3NTpbMSwxMjBdfSx7MzM6WzIsNTldLDY1OlsyLDU5XSw3MjpbMiw1OV0sNzU6WzIsNTldLDgwOlsyLDU5XSw4MTpbMiw1OV0sODI6WzIsNTldLDgzOlsyLDU5XSw4NDpbMiw1OV0sODU6WzIsNTldfSx7MzM6WzIsNjFdLDc1OlsyLDYxXX0sezMzOlsyLDY4XSwzNzoxMjEsNzQ6MTIyLDc1OlsxLDEyMF19LHszMzpbMiw2NV0sNjU6WzIsNjVdLDcyOlsyLDY1XSw3NTpbMiw2NV0sODA6WzIsNjVdLDgxOlsyLDY1XSw4MjpbMiw2NV0sODM6WzIsNjVdLDg0OlsyLDY1XSw4NTpbMiw2NV19LHszMzpbMiw2N10sNzU6WzIsNjddfSx7MjM6WzEsMTIzXX0sezIzOlsyLDUxXSw2NTpbMiw1MV0sNzI6WzIsNTFdLDgwOlsyLDUxXSw4MTpbMiw1MV0sODI6WzIsNTFdLDgzOlsyLDUxXSw4NDpbMiw1MV0sODU6WzIsNTFdfSx7MjM6WzIsNTNdfSx7MzM6WzEsMTI0XX0sezMzOlsyLDkxXSw2NTpbMiw5MV0sNzI6WzIsOTFdLDgwOlsyLDkxXSw4MTpbMiw5MV0sODI6WzIsOTFdLDgzOlsyLDkxXSw4NDpbMiw5MV0sODU6WzIsOTFdfSx7MzM6WzIsOTNdfSx7NTpbMiwyMl0sMTQ6WzIsMjJdLDE1OlsyLDIyXSwxOTpbMiwyMl0sMjk6WzIsMjJdLDM0OlsyLDIyXSwzOTpbMiwyMl0sNDQ6WzIsMjJdLDQ3OlsyLDIyXSw0ODpbMiwyMl0sNTE6WzIsMjJdLDU1OlsyLDIyXSw2MDpbMiwyMl19LHsyMzpbMiw5OV0sMzM6WzIsOTldLDU0OlsyLDk5XSw2ODpbMiw5OV0sNzI6WzIsOTldLDc1OlsyLDk5XX0sezczOlsxLDEwOF19LHsyMDo3NCw2MzoxMjUsNjQ6NzUsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjNdLDE0OlsyLDIzXSwxNTpbMiwyM10sMTk6WzIsMjNdLDI5OlsyLDIzXSwzNDpbMiwyM10sMzk6WzIsMjNdLDQ0OlsyLDIzXSw0NzpbMiwyM10sNDg6WzIsMjNdLDUxOlsyLDIzXSw1NTpbMiwyM10sNjA6WzIsMjNdfSx7NDc6WzIsMTldfSx7NDc6WzIsNzddfSx7MjA6NzQsMzM6WzIsNzJdLDQxOjEyNiw2MzoxMjcsNjQ6NzUsNjU6WzEsNDNdLDY5OjEyOCw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzU6WzIsNzJdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NTpbMiwyNF0sMTQ6WzIsMjRdLDE1OlsyLDI0XSwxOTpbMiwyNF0sMjk6WzIsMjRdLDM0OlsyLDI0XSwzOTpbMiwyNF0sNDQ6WzIsMjRdLDQ3OlsyLDI0XSw0ODpbMiwyNF0sNTE6WzIsMjRdLDU1OlsyLDI0XSw2MDpbMiwyNF19LHs2ODpbMSwxMjldfSx7NjU6WzIsOTVdLDY4OlsyLDk1XSw3MjpbMiw5NV0sODA6WzIsOTVdLDgxOlsyLDk1XSw4MjpbMiw5NV0sODM6WzIsOTVdLDg0OlsyLDk1XSw4NTpbMiw5NV19LHs2ODpbMiw5N119LHs1OlsyLDIxXSwxNDpbMiwyMV0sMTU6WzIsMjFdLDE5OlsyLDIxXSwyOTpbMiwyMV0sMzQ6WzIsMjFdLDM5OlsyLDIxXSw0NDpbMiwyMV0sNDc6WzIsMjFdLDQ4OlsyLDIxXSw1MTpbMiwyMV0sNTU6WzIsMjFdLDYwOlsyLDIxXX0sezMzOlsxLDEzMF19LHszMzpbMiw2M119LHs3MjpbMSwxMzJdLDc2OjEzMX0sezMzOlsxLDEzM119LHszMzpbMiw2OV19LHsxNTpbMiwxMl0sMTg6WzIsMTJdfSx7MTQ6WzIsMjZdLDE1OlsyLDI2XSwxOTpbMiwyNl0sMjk6WzIsMjZdLDM0OlsyLDI2XSw0NzpbMiwyNl0sNDg6WzIsMjZdLDUxOlsyLDI2XSw1NTpbMiwyNl0sNjA6WzIsMjZdfSx7MjM6WzIsMzFdLDMzOlsyLDMxXSw1NDpbMiwzMV0sNjg6WzIsMzFdLDcyOlsyLDMxXSw3NTpbMiwzMV19LHszMzpbMiw3NF0sNDI6MTM0LDc0OjEzNSw3NTpbMSwxMjBdfSx7MzM6WzIsNzFdLDY1OlsyLDcxXSw3MjpbMiw3MV0sNzU6WzIsNzFdLDgwOlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4NDpbMiw3MV0sODU6WzIsNzFdfSx7MzM6WzIsNzNdLDc1OlsyLDczXX0sezIzOlsyLDI5XSwzMzpbMiwyOV0sNTQ6WzIsMjldLDY1OlsyLDI5XSw2ODpbMiwyOV0sNzI6WzIsMjldLDc1OlsyLDI5XSw4MDpbMiwyOV0sODE6WzIsMjldLDgyOlsyLDI5XSw4MzpbMiwyOV0sODQ6WzIsMjldLDg1OlsyLDI5XX0sezE0OlsyLDE1XSwxNTpbMiwxNV0sMTk6WzIsMTVdLDI5OlsyLDE1XSwzNDpbMiwxNV0sMzk6WzIsMTVdLDQ0OlsyLDE1XSw0NzpbMiwxNV0sNDg6WzIsMTVdLDUxOlsyLDE1XSw1NTpbMiwxNV0sNjA6WzIsMTVdfSx7NzI6WzEsMTM3XSw3NzpbMSwxMzZdfSx7NzI6WzIsMTAwXSw3NzpbMiwxMDBdfSx7MTQ6WzIsMTZdLDE1OlsyLDE2XSwxOTpbMiwxNl0sMjk6WzIsMTZdLDM0OlsyLDE2XSw0NDpbMiwxNl0sNDc6WzIsMTZdLDQ4OlsyLDE2XSw1MTpbMiwxNl0sNTU6WzIsMTZdLDYwOlsyLDE2XX0sezMzOlsxLDEzOF19LHszMzpbMiw3NV19LHszMzpbMiwzMl19LHs3MjpbMiwxMDFdLDc3OlsyLDEwMV19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE5OlsyLDE3XSwyOTpbMiwxN10sMzQ6WzIsMTddLDM5OlsyLDE3XSw0NDpbMiwxN10sNDc6WzIsMTddLDQ4OlsyLDE3XSw1MTpbMiwxN10sNTU6WzIsMTddLDYwOlsyLDE3XX1dLFxuZGVmYXVsdEFjdGlvbnM6IHs0OlsyLDFdLDU0OlsyLDU1XSw1NjpbMiwyMF0sNjA6WzIsNTddLDczOlsyLDgxXSw4MjpbMiw4NV0sODY6WzIsMThdLDkwOlsyLDg5XSwxMDE6WzIsNTNdLDEwNDpbMiw5M10sMTEwOlsyLDE5XSwxMTE6WzIsNzddLDExNjpbMiw5N10sMTE5OlsyLDYzXSwxMjI6WzIsNjldLDEzNTpbMiw3NV0sMTM2OlsyLDMyXX0sXG5wYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yIChzdHIsIGhhc2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbn0sXG5wYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgdGhpcy5sZXhlci5zZXRJbnB1dChpbnB1dCk7XG4gICAgdGhpcy5sZXhlci55eSA9IHRoaXMueXk7XG4gICAgdGhpcy55eS5sZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgdGhpcy55eS5wYXJzZXIgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhpcy5sZXhlci55eWxsb2MgPSB7fTtcbiAgICB2YXIgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgdmFyIHJhbmdlcyA9IHRoaXMubGV4ZXIub3B0aW9ucyAmJiB0aGlzLmxleGVyLm9wdGlvbnMucmFuZ2VzO1xuICAgIGlmICh0eXBlb2YgdGhpcy55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRoaXMueXkucGFyc2VFcnJvcjtcbiAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gc2VsZi5sZXhlci5sZXgoKSB8fCAxO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKCFyZWNvdmVyaW5nKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyB0aGlzLmxleGVyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gMT9cImVuZCBvZiBpbnB1dFwiOlwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHt0ZXh0OiB0aGlzLmxleGVyLm1hdGNoLCB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLCBsaW5lOiB0aGlzLmxleGVyLnl5bGluZW5vLCBsb2M6IHl5bG9jLCBleHBlY3RlZDogZXhwZWN0ZWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2godGhpcy5sZXhlci55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2godGhpcy5sZXhlci55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICB5eWxlbmcgPSB0aGlzLmxleGVyLnl5bGVuZztcbiAgICAgICAgICAgICAgICB5eXRleHQgPSB0aGlzLmxleGVyLnl5dGV4dDtcbiAgICAgICAgICAgICAgICB5eWxpbmVubyA9IHRoaXMubGV4ZXIueXlsaW5lbm87XG4gICAgICAgICAgICAgICAgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApXG4gICAgICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7Zmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLCBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLCBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLCBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtbn07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwoeXl2YWwsIHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgdGhpcy55eSwgYWN0aW9uWzFdLCB2c3RhY2ssIGxzdGFjayk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG59O1xuLyogSmlzb24gZ2VuZXJhdGVkIGxleGVyICovXG52YXIgbGV4ZXIgPSAoZnVuY3Rpb24oKXtcbnZhciBsZXhlciA9ICh7RU9GOjEsXG5wYXJzZUVycm9yOmZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICB9LFxuc2V0SW5wdXQ6ZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gWydJTklUSUFMJ107XG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsMF07XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmlucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG51bnB1dDpmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcblxuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aC1sZW4tMSk7XG4gICAgICAgIC8vdGhpcy55eWxlbmcgLT0gbGVuO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoLTEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGgtMSk7XG5cbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aC0xKSB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aC0xO1xuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuXG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID9cbiAgICAgICAgICAgICAgKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aDpcbiAgICAgICAgICAgICAgdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubW9yZTpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubGVzczpmdW5jdGlvbiAobikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgIH0sXG5wYXN0SW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcbnVwY29taW5nSW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMC1uZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLDIwKSsobmV4dC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG5zaG93UG9zaXRpb246ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYytcIl5cIjtcbiAgICB9LFxubmV4dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICAgIHZhciB0b2tlbixcbiAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgdGVtcE1hdGNoLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICBsaW5lcztcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpPTA7aSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgICAgIGlmIChsaW5lcykgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8rMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGgtMV0ubGVuZ3RoLWxpbmVzW2xpbmVzLmxlbmd0aC0xXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aH07XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBydWxlc1tpbmRleF0sdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0b2tlbikgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJysodGhpcy55eWxpbmVubysxKSsnLiBVbnJlY29nbml6ZWQgdGV4dC5cXG4nK3RoaXMuc2hvd1Bvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgIHt0ZXh0OiBcIlwiLCB0b2tlbjogbnVsbCwgbGluZTogdGhpcy55eWxpbmVub30pO1xuICAgICAgICB9XG4gICAgfSxcbmxleDpmdW5jdGlvbiBsZXggKCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgfSxcbnBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0YXRlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgfSxcbl9jdXJyZW50UnVsZXM6ZnVuY3Rpb24gX2N1cnJlbnRSdWxlcyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICB9fSk7XG5sZXhlci5vcHRpb25zID0ge307XG5sZXhlci5wZXJmb3JtQWN0aW9uID0gZnVuY3Rpb24gYW5vbnltb3VzKHl5LHl5XywkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLFlZX1NUQVJUXG4pIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHJpbmcoc3RhcnQsIHl5Xy55eWxlbmcgLSBlbmQgKyBzdGFydCk7XG59XG5cblxudmFyIFlZU1RBVEU9WVlfU1RBUlRcbnN3aXRjaCgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG5jYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQuc2xpY2UoLTIpID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHl5Xy55eXRleHQuc2xpY2UoLTEpID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcImVtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dCkgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTpyZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAzOnRoaXMuYmVnaW4oJ3JhdycpOyByZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGJlIHVzaW5nIGB0aGlzLnRvcFN0YXRlKClgIGJlbG93LCBidXQgaXQgY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0aGUgc2Vjb25kIHRvcCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCB0b3AuIE9wZW5lZCBhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzc3VlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS96YWFjaC9qaXNvbi9pc3N1ZXMvMjkxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0gPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDUsIDkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFTkRfUkFXX0JMT0NLJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSA1OiByZXR1cm4gMTU7IFxuYnJlYWs7XG5jYXNlIDY6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgNzpyZXR1cm4gNjU7XG5icmVhaztcbmNhc2UgODpyZXR1cm4gNjg7XG5icmVhaztcbmNhc2UgOTogcmV0dXJuIDE5OyBcbmJyZWFrO1xuY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbigncmF3Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTE6cmV0dXJuIDU1O1xuYnJlYWs7XG5jYXNlIDEyOnJldHVybiA2MDtcbmJyZWFrO1xuY2FzZSAxMzpyZXR1cm4gMjk7XG5icmVhaztcbmNhc2UgMTQ6cmV0dXJuIDQ3O1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE3OnJldHVybiAzNDtcbmJyZWFrO1xuY2FzZSAxODpyZXR1cm4gMzk7XG5icmVhaztcbmNhc2UgMTk6cmV0dXJuIDUxO1xuYnJlYWs7XG5jYXNlIDIwOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyMTpcbiAgdGhpcy51bnB1dCh5eV8ueXl0ZXh0KTtcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICB0aGlzLmJlZ2luKCdjb20nKTtcblxuYnJlYWs7XG5jYXNlIDIyOlxuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHJldHVybiAxNDtcblxuYnJlYWs7XG5jYXNlIDIzOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyNDpyZXR1cm4gNzM7XG5icmVhaztcbmNhc2UgMjU6cmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDI2OnJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSAyNzpyZXR1cm4gODc7XG5icmVhaztcbmNhc2UgMjg6Ly8gaWdub3JlIHdoaXRlc3BhY2VcbmJyZWFrO1xuY2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA1NDtcbmJyZWFrO1xuY2FzZSAzMDp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAzMztcbmJyZWFrO1xuY2FzZSAzMTp5eV8ueXl0ZXh0ID0gc3RyaXAoMSwyKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKTsgcmV0dXJuIDgwO1xuYnJlYWs7XG5jYXNlIDMyOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFwnL2csXCInXCIpOyByZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzM6cmV0dXJuIDg1O1xuYnJlYWs7XG5jYXNlIDM0OnJldHVybiA4MjtcbmJyZWFrO1xuY2FzZSAzNTpyZXR1cm4gODI7XG5icmVhaztcbmNhc2UgMzY6cmV0dXJuIDgzO1xuYnJlYWs7XG5jYXNlIDM3OnJldHVybiA4NDtcbmJyZWFrO1xuY2FzZSAzODpyZXR1cm4gODE7XG5icmVhaztcbmNhc2UgMzk6cmV0dXJuIDc1O1xuYnJlYWs7XG5jYXNlIDQwOnJldHVybiA3NztcbmJyZWFrO1xuY2FzZSA0MTpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgNDI6eXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csJyQxJyk7IHJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSA0MzpyZXR1cm4gJ0lOVkFMSUQnO1xuYnJlYWs7XG5jYXNlIDQ0OnJldHVybiA1O1xuYnJlYWs7XG59XG59O1xubGV4ZXIucnVsZXMgPSBbL14oPzpbXlxceDAwXSo/KD89KFxce1xceykpKS8sL14oPzpbXlxceDAwXSspLywvXig/OlteXFx4MDBdezIsfT8oPz0oXFx7XFx7fFxcXFxcXHtcXHt8XFxcXFxcXFxcXHtcXHt8JCkpKS8sL14oPzpcXHtcXHtcXHtcXHsoPz1bXi9dKSkvLC9eKD86XFx7XFx7XFx7XFx7XFwvW15cXHMhXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dKyg/PVs9fVxcc1xcLy5dKVxcfVxcfVxcfVxcfSkvLC9eKD86W15cXHgwMF0rPyg/PShcXHtcXHtcXHtcXHspKSkvLC9eKD86W1xcc1xcU10qPy0tKH4pP1xcfVxcfSkvLC9eKD86XFwoKS8sL14oPzpcXCkpLywvXig/Olxce1xce1xce1xceykvLC9eKD86XFx9XFx9XFx9XFx9KS8sL14oPzpcXHtcXHsofik/PikvLC9eKD86XFx7XFx7KH4pPyM+KS8sL14oPzpcXHtcXHsofik/I1xcKj8pLywvXig/Olxce1xceyh+KT9cXC8pLywvXig/Olxce1xceyh+KT9cXF5cXHMqKH4pP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xccyplbHNlXFxzKih+KT9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXF4pLywvXig/Olxce1xceyh+KT9cXHMqZWxzZVxcYikvLC9eKD86XFx7XFx7KH4pP1xceykvLC9eKD86XFx7XFx7KH4pPyYpLywvXig/Olxce1xceyh+KT8hLS0pLywvXig/Olxce1xceyh+KT8hW1xcc1xcU10qP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xcKj8pLywvXig/Oj0pLywvXig/OlxcLlxcLikvLC9eKD86XFwuKD89KFs9fn1cXHNcXC8uKXxdKSkpLywvXig/OltcXC8uXSkvLC9eKD86XFxzKykvLC9eKD86XFx9KH4pP1xcfVxcfSkvLC9eKD86KH4pP1xcfVxcfSkvLC9eKD86XCIoXFxcXFtcIl18W15cIl0pKlwiKS8sL14oPzonKFxcXFxbJ118W14nXSkqJykvLC9eKD86QCkvLC9eKD86dHJ1ZSg/PShbfn1cXHMpXSkpKS8sL14oPzpmYWxzZSg/PShbfn1cXHMpXSkpKS8sL14oPzp1bmRlZmluZWQoPz0oW359XFxzKV0pKSkvLC9eKD86bnVsbCg/PShbfn1cXHMpXSkpKS8sL14oPzotP1swLTldKyg/OlxcLlswLTldKyk/KD89KFt+fVxccyldKSkpLywvXig/OmFzXFxzK1xcfCkvLC9eKD86XFx8KS8sL14oPzooW15cXHMhXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dKyg/PShbPX59XFxzXFwvLil8XSkpKSkvLC9eKD86XFxbKFxcXFxcXF18W15cXF1dKSpcXF0pLywvXig/Oi4pLywvXig/OiQpL107XG5sZXhlci5jb25kaXRpb25zID0ge1wibXVcIjp7XCJydWxlc1wiOls3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NF0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJlbXVcIjp7XCJydWxlc1wiOlsyXSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcImNvbVwiOntcInJ1bGVzXCI6WzZdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwicmF3XCI6e1wicnVsZXNcIjpbMyw0LDVdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiSU5JVElBTFwiOntcInJ1bGVzXCI6WzAsMSw0NF0sXCJpbmNsdXNpdmVcIjp0cnVlfX07XG5yZXR1cm4gbGV4ZXI7fSkoKVxucGFyc2VyLmxleGVyID0gbGV4ZXI7XG5mdW5jdGlvbiBQYXJzZXIgKCkgeyB0aGlzLnl5ID0ge307IH1QYXJzZXIucHJvdG90eXBlID0gcGFyc2VyO3BhcnNlci5QYXJzZXIgPSBQYXJzZXI7XG5yZXR1cm4gbmV3IFBhcnNlcjtcbn0pKCk7ZXhwb3J0IGRlZmF1bHQgaGFuZGxlYmFycztcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nfunction Visitor() {\n this.parents = [];\n}\n\nVisitor.prototype = {\n constructor: Visitor,\n mutating: false,\n\n // Visits a given value. If mutating, will replace the value if necessary.\n acceptKey: function acceptKey(node, name) {\n var value = this.accept(node[name]);\n if (this.mutating) {\n // Hacky sanity check: This may have a few false positives for type for the helper\n // methods but will generally do the right thing without a lot of overhead.\n if (value && !Visitor.prototype[value.type]) {\n throw new _exception2['default']('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\n }\n node[name] = value;\n }\n },\n\n // Performs an accept operation with added sanity check to ensure\n // required keys are not removed.\n acceptRequired: function acceptRequired(node, name) {\n this.acceptKey(node, name);\n\n if (!node[name]) {\n throw new _exception2['default'](node.type + ' requires ' + name);\n }\n },\n\n // Traverses a given array. If mutating, empty respnses will be removed\n // for child elements.\n acceptArray: function acceptArray(array) {\n for (var i = 0, l = array.length; i < l; i++) {\n this.acceptKey(array, i);\n\n if (!array[i]) {\n array.splice(i, 1);\n i--;\n l--;\n }\n }\n },\n\n accept: function accept(object) {\n if (!object) {\n return;\n }\n\n /* istanbul ignore next: Sanity code */\n if (!this[object.type]) {\n throw new _exception2['default']('Unknown type: ' + object.type, object);\n }\n\n if (this.current) {\n this.parents.unshift(this.current);\n }\n this.current = object;\n\n var ret = this[object.type](object);\n\n this.current = this.parents.shift();\n\n if (!this.mutating || ret) {\n return ret;\n } else if (ret !== false) {\n return object;\n }\n },\n\n Program: function Program(program) {\n this.acceptArray(program.body);\n },\n\n MustacheStatement: visitSubExpression,\n Decorator: visitSubExpression,\n\n BlockStatement: visitBlock,\n DecoratorBlock: visitBlock,\n\n PartialStatement: visitPartial,\n PartialBlockStatement: function PartialBlockStatement(partial) {\n visitPartial.call(this, partial);\n\n this.acceptKey(partial, 'program');\n },\n\n ContentStatement: function ContentStatement() /* content */{},\n CommentStatement: function CommentStatement() /* comment */{},\n\n SubExpression: visitSubExpression,\n\n PathExpression: function PathExpression() /* path */{},\n\n StringLiteral: function StringLiteral() /* string */{},\n NumberLiteral: function NumberLiteral() /* number */{},\n BooleanLiteral: function BooleanLiteral() /* bool */{},\n UndefinedLiteral: function UndefinedLiteral() /* literal */{},\n NullLiteral: function NullLiteral() /* literal */{},\n\n Hash: function Hash(hash) {\n this.acceptArray(hash.pairs);\n },\n HashPair: function HashPair(pair) {\n this.acceptRequired(pair, 'value');\n }\n};\n\nfunction visitSubExpression(mustache) {\n this.acceptRequired(mustache, 'path');\n this.acceptArray(mustache.params);\n this.acceptKey(mustache, 'hash');\n}\nfunction visitBlock(block) {\n visitSubExpression.call(this, block);\n\n this.acceptKey(block, 'program');\n this.acceptKey(block, 'inverse');\n}\nfunction visitPartial(partial) {\n this.acceptRequired(partial, 'name');\n this.acceptArray(partial.params);\n this.acceptKey(partial, 'hash');\n}\n\nexports['default'] = Visitor;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztBQUVwQyxTQUFTLE9BQU8sR0FBRztBQUNqQixNQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztDQUNuQjs7QUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLGFBQVcsRUFBRSxPQUFPO0FBQ3BCLFVBQVEsRUFBRSxLQUFLOzs7QUFHZixXQUFTLEVBQUUsbUJBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUM5QixRQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFFBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs7O0FBR2pCLFVBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDM0MsY0FBTSwyQkFDSix3QkFBd0IsR0FDdEIsS0FBSyxDQUFDLElBQUksR0FDVix5QkFBeUIsR0FDekIsSUFBSSxHQUNKLE1BQU0sR0FDTixJQUFJLENBQUMsSUFBSSxDQUNaLENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDcEI7R0FDRjs7OztBQUlELGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNuQyxRQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFM0IsUUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNmLFlBQU0sMkJBQWMsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDdEQ7R0FDRjs7OztBQUlELGFBQVcsRUFBRSxxQkFBUyxLQUFLLEVBQUU7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FB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QztBQUNsQyxNQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtBQUN6QixvQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUVyQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUM3QixNQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxNQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNqQzs7cUJBRWMsT0FBTyIsImZpbGUiOiJ2aXNpdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5mdW5jdGlvbiBWaXNpdG9yKCkge1xuICB0aGlzLnBhcmVudHMgPSBbXTtcbn1cblxuVmlzaXRvci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBWaXNpdG9yLFxuICBtdXRhdGluZzogZmFsc2UsXG5cbiAgLy8gVmlzaXRzIGEgZ2l2ZW4gdmFsdWUuIElmIG11dGF0aW5nLCB3aWxsIHJlcGxhY2UgdGhlIHZhbHVlIGlmIG5lY2Vzc2FyeS5cbiAgYWNjZXB0S2V5OiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5hY2NlcHQobm9kZVtuYW1lXSk7XG4gICAgaWYgKHRoaXMubXV0YXRpbmcpIHtcbiAgICAgIC8vIEhhY2t5IHNhbml0eSBjaGVjazogVGhpcyBtYXkgaGF2ZSBhIGZldyBmYWxzZSBwb3NpdGl2ZXMgZm9yIHR5cGUgZm9yIHRoZSBoZWxwZXJcbiAgICAgIC8vIG1ldGhvZHMgYnV0IHdpbGwgZ2VuZXJhbGx5IGRvIHRoZSByaWdodCB0aGluZyB3aXRob3V0IGEgbG90IG9mIG92ZXJoZWFkLlxuICAgICAgaWYgKHZhbHVlICYmICFWaXNpdG9yLnByb3RvdHlwZVt2YWx1ZS50eXBlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAgICdVbmV4cGVjdGVkIG5vZGUgdHlwZSBcIicgK1xuICAgICAgICAgICAgdmFsdWUudHlwZSArXG4gICAgICAgICAgICAnXCIgZm91bmQgd2hlbiBhY2NlcHRpbmcgJyArXG4gICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICcgb24gJyArXG4gICAgICAgICAgICBub2RlLnR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5vZGVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gUGVyZm9ybXMgYW4gYWNjZXB0IG9wZXJhdGlvbiB3aXRoIGFkZGVkIHNhbml0eSBjaGVjayB0byBlbnN1cmVcbiAgLy8gcmVxdWlyZWQga2V5cyBhcmUgbm90IHJlbW92ZWQuXG4gIGFjY2VwdFJlcXVpcmVkOiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgdGhpcy5hY2NlcHRLZXkobm9kZSwgbmFtZSk7XG5cbiAgICBpZiAoIW5vZGVbbmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24obm9kZS50eXBlICsgJyByZXF1aXJlcyAnICsgbmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRyYXZlcnNlcyBhIGdpdmVuIGFycmF5LiBJZiBtdXRhdGluZywgZW1wdHkgcmVzcG5zZXMgd2lsbCBiZSByZW1vdmVkXG4gIC8vIGZvciBjaGlsZCBlbGVtZW50cy5cbiAgYWNjZXB0QXJyYXk6IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0S2V5KGFycmF5LCBpKTtcblxuICAgICAgaWYgKCFhcnJheVtpXSkge1xuICAgICAgICBhcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGktLTtcbiAgICAgICAgbC0tO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhY2NlcHQ6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IFNhbml0eSBjb2RlICovXG4gICAgaWYgKCF0aGlzW29iamVjdC50eXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0eXBlOiAnICsgb2JqZWN0LnR5cGUsIG9iamVjdCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudCkge1xuICAgICAgdGhpcy5wYXJlbnRzLnVuc2hpZnQodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50ID0gb2JqZWN0O1xuXG4gICAgbGV0IHJldCA9IHRoaXNbb2JqZWN0LnR5cGVdKG9iamVjdCk7XG5cbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnBhcmVudHMuc2hpZnQoKTtcblxuICAgIGlmICghdGhpcy5tdXRhdGluZyB8fCByZXQpIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBlbHNlIGlmIChyZXQgIT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5hY2NlcHRBcnJheShwcm9ncmFtLmJvZHkpO1xuICB9LFxuXG4gIE11c3RhY2hlU3RhdGVtZW50OiB2aXNpdFN1YkV4cHJlc3Npb24sXG4gIERlY29yYXRvcjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIEJsb2NrU3RhdGVtZW50OiB2aXNpdEJsb2NrLFxuICBEZWNvcmF0b3JCbG9jazogdmlzaXRCbG9jayxcblxuICBQYXJ0aWFsU3RhdGVtZW50OiB2aXNpdFBhcnRpYWwsXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIHZpc2l0UGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwpO1xuXG4gICAgdGhpcy5hY2NlcHRLZXkocGFydGlhbCwgJ3Byb2dyYW0nKTtcbiAgfSxcblxuICBDb250ZW50U3RhdGVtZW50OiBmdW5jdGlvbigvKiBjb250ZW50ICovKSB7fSxcbiAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24oLyogY29tbWVudCAqLykge30sXG5cbiAgU3ViRXhwcmVzc2lvbjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIFBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbigvKiBwYXRoICovKSB7fSxcblxuICBTdHJpbmdMaXRlcmFsOiBmdW5jdGlvbigvKiBzdHJpbmcgKi8pIHt9LFxuICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbigvKiBudW1iZXIgKi8pIHt9LFxuICBCb29sZWFuTGl0ZXJhbDogZnVuY3Rpb24oLyogYm9vbCAqLykge30sXG4gIFVuZGVmaW5lZExpdGVyYWw6IGZ1bmN0aW9uKC8qIGxpdGVyYWwgKi8pIHt9LFxuICBOdWxsTGl0ZXJhbDogZnVuY3Rpb24oLyogbGl0ZXJhbCAqLykge30sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIHRoaXMuYWNjZXB0QXJyYXkoaGFzaC5wYWlycyk7XG4gIH0sXG4gIEhhc2hQYWlyOiBmdW5jdGlvbihwYWlyKSB7XG4gICAgdGhpcy5hY2NlcHRSZXF1aXJlZChwYWlyLCAndmFsdWUnKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdmlzaXRTdWJFeHByZXNzaW9uKG11c3RhY2hlKSB7XG4gIHRoaXMuYWNjZXB0UmVxdWlyZWQobXVzdGFjaGUsICdwYXRoJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkobXVzdGFjaGUucGFyYW1zKTtcbiAgdGhpcy5hY2NlcHRLZXkobXVzdGFjaGUsICdoYXNoJyk7XG59XG5mdW5jdGlvbiB2aXNpdEJsb2NrKGJsb2NrKSB7XG4gIHZpc2l0U3ViRXhwcmVzc2lvbi5jYWxsKHRoaXMsIGJsb2NrKTtcblxuICB0aGlzLmFjY2VwdEtleShibG9jaywgJ3Byb2dyYW0nKTtcbiAgdGhpcy5hY2NlcHRLZXkoYmxvY2ssICdpbnZlcnNlJyk7XG59XG5mdW5jdGlvbiB2aXNpdFBhcnRpYWwocGFydGlhbCkge1xuICB0aGlzLmFjY2VwdFJlcXVpcmVkKHBhcnRpYWwsICduYW1lJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkocGFydGlhbC5wYXJhbXMpO1xuICB0aGlzLmFjY2VwdEtleShwYXJ0aWFsLCAnaGFzaCcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaXNpdG9yO1xuIl19\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _visitor = require('./visitor');\n\nvar _visitor2 = _interopRequireDefault(_visitor);\n\nfunction WhitespaceControl() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n this.options = options;\n}\nWhitespaceControl.prototype = new _visitor2['default']();\n\nWhitespaceControl.prototype.Program = function (program) {\n var doStandalone = !this.options.ignoreStandalone;\n\n var isRoot = !this.isRootSeen;\n this.isRootSeen = true;\n\n var body = program.body;\n for (var i = 0, l = body.length; i < l; i++) {\n var current = body[i],\n strip = this.accept(current);\n\n if (!strip) {\n continue;\n }\n\n var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n openStandalone = strip.openStandalone && _isPrevWhitespace,\n closeStandalone = strip.closeStandalone && _isNextWhitespace,\n inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n\n if (strip.close) {\n omitRight(body, i, true);\n }\n if (strip.open) {\n omitLeft(body, i, true);\n }\n\n if (doStandalone && inlineStandalone) {\n omitRight(body, i);\n\n if (omitLeft(body, i)) {\n // If we are on a standalone node, save the indent info for partials\n if (current.type === 'PartialStatement') {\n // Pull out the whitespace from the final line\n current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n }\n }\n }\n if (doStandalone && openStandalone) {\n omitRight((current.program || current.inverse).body);\n\n // Strip out the previous content node if it's whitespace only\n omitLeft(body, i);\n }\n if (doStandalone && closeStandalone) {\n // Always strip the next node\n omitRight(body, i);\n\n omitLeft((current.inverse || current.program).body);\n }\n }\n\n return program;\n};\n\nWhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {\n this.accept(block.program);\n this.accept(block.inverse);\n\n // Find the inverse program that is involed with whitespace stripping.\n var program = block.program || block.inverse,\n inverse = block.program && block.inverse,\n firstInverse = inverse,\n lastInverse = inverse;\n\n if (inverse && inverse.chained) {\n firstInverse = inverse.body[0].program;\n\n // Walk the inverse chain to find the last inverse that is actually in the chain.\n while (lastInverse.chained) {\n lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n }\n }\n\n var strip = {\n open: block.openStrip.open,\n close: block.closeStrip.close,\n\n // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n // so our parent can determine if we actually are standalone\n openStandalone: isNextWhitespace(program.body),\n closeStandalone: isPrevWhitespace((firstInverse || program).body)\n };\n\n if (block.openStrip.close) {\n omitRight(program.body, null, true);\n }\n\n if (inverse) {\n var inverseStrip = block.inverseStrip;\n\n if (inverseStrip.open) {\n omitLeft(program.body, null, true);\n }\n\n if (inverseStrip.close) {\n omitRight(firstInverse.body, null, true);\n }\n if (block.closeStrip.open) {\n omitLeft(lastInverse.body, null, true);\n }\n\n // Find standalone else statments\n if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n omitLeft(program.body);\n omitRight(firstInverse.body);\n }\n } else if (block.closeStrip.open) {\n omitLeft(program.body, null, true);\n }\n\n return strip;\n};\n\nWhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n return mustache.strip;\n};\n\nWhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n /* istanbul ignore next */\n var strip = node.strip || {};\n return {\n inlineStandalone: true,\n open: strip.open,\n close: strip.close\n };\n};\n\nfunction isPrevWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = body.length;\n }\n\n // Nodes that end with newlines are considered whitespace (but are special\n // cased for strip operations)\n var prev = body[i - 1],\n sibling = body[i - 2];\n if (!prev) {\n return isRoot;\n }\n\n if (prev.type === 'ContentStatement') {\n return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(prev.original);\n }\n}\nfunction isNextWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = -1;\n }\n\n var next = body[i + 1],\n sibling = body[i + 2];\n if (!next) {\n return isRoot;\n }\n\n if (next.type === 'ContentStatement') {\n return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(next.original);\n }\n}\n\n// Marks the node to the right of the position as omitted.\n// I.e. {{foo}}' ' will mark the ' ' node as omitted.\n//\n// If i is undefined, then the first child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitRight(body, i, multiple) {\n var current = body[i == null ? 0 : i + 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n return;\n }\n\n var original = current.value;\n current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n current.rightStripped = current.value !== original;\n}\n\n// Marks the node to the left of the position as omitted.\n// I.e. ' '{{foo}} will mark the ' ' node as omitted.\n//\n// If i is undefined then the last child will be marked as such.\n//\n// If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitLeft(body, i, multiple) {\n var current = body[i == null ? body.length - 1 : i - 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n return;\n }\n\n // We omit the last node if it's whitespace only and not preceded by a non-content node.\n var original = current.value;\n current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n current.leftStripped = current.value !== original;\n return current.leftStripped;\n}\n\nexports['default'] = WhitespaceControl;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3VCQUFvQixXQUFXOzs7O0FBRS9CLFNBQVMsaUJBQWlCLEdBQWU7TUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ3JDLE1BQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3hCO0FBQ0QsaUJBQWlCLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRTVDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDdEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUVwRCxNQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsTUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O0FBRXZCLE1BQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUUvQixRQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YsZUFBUztLQUNWOztBQUVELFFBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDdkQsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDckQsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksaUJBQWlCO1FBQzFE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QUFDLE9BQU8sSUFDUixPQUFPLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUNsQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsWUFBWSxBQUFDLEVBQ25DO0FBQ0EsV0FBTztHQUNSOzs7QUFHRCxNQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzdCLFNBQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekUsU0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNsRCxTQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUM7Q0FDN0I7O3FCQUVjLGlCQUFpQiIsImZpbGUiOiJ3aGl0ZXNwYWNlLWNvbnRyb2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5mdW5jdGlvbiBXaGl0ZXNwYWNlQ29udHJvbChvcHRpb25zID0ge30pIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbn1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZSA9IG5ldyBWaXNpdG9yKCk7XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24ocHJvZ3JhbSkge1xuICBjb25zdCBkb1N0YW5kYWxvbmUgPSAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmU7XG5cbiAgbGV0IGlzUm9vdCA9ICF0aGlzLmlzUm9vdFNlZW47XG4gIHRoaXMuaXNSb290U2VlbiA9IHRydWU7XG5cbiAgbGV0IGJvZHkgPSBwcm9ncmFtLmJvZHk7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgY3VycmVudCA9IGJvZHlbaV0sXG4gICAgICBzdHJpcCA9IHRoaXMuYWNjZXB0KGN1cnJlbnQpO1xuXG4gICAgaWYgKCFzdHJpcCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IF9pc1ByZXZXaGl0ZXNwYWNlID0gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuICAgICAgX2lzTmV4dFdoaXRlc3BhY2UgPSBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCksXG4gICAgICBvcGVuU3RhbmRhbG9uZSA9IHN0cmlwLm9wZW5TdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlLFxuICAgICAgY2xvc2VTdGFuZGFsb25lID0gc3RyaXAuY2xvc2VTdGFuZGFsb25lICYmIF9pc05leHRXaGl0ZXNwYWNlLFxuICAgICAgaW5saW5lU3RhbmRhbG9uZSA9XG4gICAgICAgIHN0cmlwLmlubGluZVN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UgJiYgX2lzTmV4dFdoaXRlc3BhY2U7XG5cbiAgICBpZiAoc3RyaXAuY2xvc2UpIHtcbiAgICAgIG9taXRSaWdodChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KGJvZHksIGksIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgaW5saW5lU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KGJvZHksIGkpO1xuXG4gICAgICBpZiAob21pdExlZnQoYm9keSwgaSkpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3RhbmRhbG9uZSBub2RlLCBzYXZlIHRoZSBpbmRlbnQgaW5mbyBmb3IgcGFydGlhbHNcbiAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gJ1BhcnRpYWxTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgZmluYWwgbGluZVxuICAgICAgICAgIGN1cnJlbnQuaW5kZW50ID0gLyhbIFxcdF0rJCkvLmV4ZWMoYm9keVtpIC0gMV0ub3JpZ2luYWwpWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgb3BlblN0YW5kYWxvbmUpIHtcbiAgICAgIG9taXRSaWdodCgoY3VycmVudC5wcm9ncmFtIHx8IGN1cnJlbnQuaW52ZXJzZSkuYm9keSk7XG5cbiAgICAgIC8vIFN0cmlwIG91dCB0aGUgcHJldmlvdXMgY29udGVudCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5XG4gICAgICBvbWl0TGVmdChib2R5LCBpKTtcbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBjbG9zZVN0YW5kYWxvbmUpIHtcbiAgICAgIC8vIEFsd2F5cyBzdHJpcCB0aGUgbmV4dCBub2RlXG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSk7XG5cbiAgICAgIG9taXRMZWZ0KChjdXJyZW50LmludmVyc2UgfHwgY3VycmVudC5wcm9ncmFtKS5ib2R5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvZ3JhbTtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudCA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsQmxvY2tTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgYmxvY2tcbikge1xuICB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgdGhpcy5hY2NlcHQoYmxvY2suaW52ZXJzZSk7XG5cbiAgLy8gRmluZCB0aGUgaW52ZXJzZSBwcm9ncmFtIHRoYXQgaXMgaW52b2xlZCB3aXRoIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLlxuICBsZXQgcHJvZ3JhbSA9IGJsb2NrLnByb2dyYW0gfHwgYmxvY2suaW52ZXJzZSxcbiAgICBpbnZlcnNlID0gYmxvY2sucHJvZ3JhbSAmJiBibG9jay5pbnZlcnNlLFxuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UsXG4gICAgbGFzdEludmVyc2UgPSBpbnZlcnNlO1xuXG4gIGlmIChpbnZlcnNlICYmIGludmVyc2UuY2hhaW5lZCkge1xuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UuYm9keVswXS5wcm9ncmFtO1xuXG4gICAgLy8gV2FsayB0aGUgaW52ZXJzZSBjaGFpbiB0byBmaW5kIHRoZSBsYXN0IGludmVyc2UgdGhhdCBpcyBhY3R1YWxseSBpbiB0aGUgY2hhaW4uXG4gICAgd2hpbGUgKGxhc3RJbnZlcnNlLmNoYWluZWQpIHtcbiAgICAgIGxhc3RJbnZlcnNlID0gbGFzdEludmVyc2UuYm9keVtsYXN0SW52ZXJzZS5ib2R5Lmxlbmd0aCAtIDFdLnByb2dyYW07XG4gICAgfVxuICB9XG5cbiAgbGV0IHN0cmlwID0ge1xuICAgIG9wZW46IGJsb2NrLm9wZW5TdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBibG9jay5jbG9zZVN0cmlwLmNsb3NlLFxuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBzdGFuZGFsb25lIGNhbmRpYWN5LiBCYXNpY2FsbHkgZmxhZyBvdXIgY29udGVudCBhcyBiZWluZyBwb3NzaWJseSBzdGFuZGFsb25lXG4gICAgLy8gc28gb3VyIHBhcmVudCBjYW4gZGV0ZXJtaW5lIGlmIHdlIGFjdHVhbGx5IGFyZSBzdGFuZGFsb25lXG4gICAgb3BlblN0YW5kYWxvbmU6IGlzTmV4dFdoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSxcbiAgICBjbG9zZVN0YW5kYWxvbmU6IGlzUHJldldoaXRlc3BhY2UoKGZpcnN0SW52ZXJzZSB8fCBwcm9ncmFtKS5ib2R5KVxuICB9O1xuXG4gIGlmIChibG9jay5vcGVuU3RyaXAuY2xvc2UpIHtcbiAgICBvbWl0UmlnaHQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChpbnZlcnNlKSB7XG4gICAgbGV0IGludmVyc2VTdHJpcCA9IGJsb2NrLmludmVyc2VTdHJpcDtcblxuICAgIGlmIChpbnZlcnNlU3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZVN0cmlwLmNsb3NlKSB7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChsYXN0SW52ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHN0YW5kYWxvbmUgZWxzZSBzdGF0bWVudHNcbiAgICBpZiAoXG4gICAgICAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmUgJiZcbiAgICAgIGlzUHJldldoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSAmJlxuICAgICAgaXNOZXh0V2hpdGVzcGFjZShmaXJzdEludmVyc2UuYm9keSlcbiAgICApIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSk7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChibG9jay5jbG9zZVN0cmlwLm9wZW4pIHtcbiAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmlwO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvciA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKFxuICBtdXN0YWNoZVxuKSB7XG4gIHJldHVybiBtdXN0YWNoZS5zdHJpcDtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsU3RhdGVtZW50ID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkNvbW1lbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgbm9kZVxuKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCBzdHJpcCA9IG5vZGUuc3RyaXAgfHwge307XG4gIHJldHVybiB7XG4gICAgaW5saW5lU3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBvcGVuOiBzdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBzdHJpcC5jbG9zZVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHtcbiAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSBib2R5Lmxlbmd0aDtcbiAgfVxuXG4gIC8vIE5vZGVzIHRoYXQgZW5kIHdpdGggbmV3bGluZXMgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSAoYnV0IGFyZSBzcGVjaWFsXG4gIC8vIGNhc2VkIGZvciBzdHJpcCBvcGVyYXRpb25zKVxuICBsZXQgcHJldiA9IGJvZHlbaSAtIDFdLFxuICAgIHNpYmxpbmcgPSBib2R5W2kgLSAyXTtcbiAgaWYgKCFwcmV2KSB7XG4gICAgcmV0dXJuIGlzUm9vdDtcbiAgfVxuXG4gIGlmIChwcmV2LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gL1xccj9cXG5cXHMqPyQvIDogLyhefFxccj9cXG4pXFxzKj8kLykudGVzdChcbiAgICAgIHByZXYub3JpZ2luYWxcbiAgICApO1xuICB9XG59XG5mdW5jdGlvbiBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IC0xO1xuICB9XG5cbiAgbGV0IG5leHQgPSBib2R5W2kgKyAxXSxcbiAgICBzaWJsaW5nID0gYm9keVtpICsgMl07XG4gIGlmICghbmV4dCkge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAobmV4dC50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/IC9eXFxzKj9cXHI/XFxuLyA6IC9eXFxzKj8oXFxyP1xcbnwkKS8pLnRlc3QoXG4gICAgICBuZXh0Lm9yaWdpbmFsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBNYXJrcyB0aGUgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIHBvc2l0aW9uIGFzIG9taXR0ZWQuXG4vLyBJLmUuIHt7Zm9vfX0nICcgd2lsbCBtYXJrIHRoZSAnICcgbm9kZSBhcyBvbWl0dGVkLlxuLy9cbi8vIElmIGkgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoLlxuLy9cbi8vIElmIG11bGl0cGxlIGlzIHRydXRoeSB0aGVuIGFsbCB3aGl0ZXNwYWNlIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHVudGlsIG5vbi13aGl0ZXNwYWNlXG4vLyBjb250ZW50IGlzIG1ldC5cbmZ1bmN0aW9uIG9taXRSaWdodChib2R5LCBpLCBtdWx0aXBsZSkge1xuICBsZXQgY3VycmVudCA9IGJvZHlbaSA9PSBudWxsID8gMCA6IGkgKyAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQucmlnaHRTdHJpcHBlZClcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShcbiAgICBtdWx0aXBsZSA/IC9eXFxzKy8gOiAvXlsgXFx0XSpcXHI/XFxuPy8sXG4gICAgJydcbiAgKTtcbiAgY3VycmVudC5yaWdodFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSBsZWZ0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiAnICd7e2Zvb319IHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdExlZnQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IGJvZHkubGVuZ3RoIC0gMSA6IGkgLSAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQubGVmdFN0cmlwcGVkKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBXZSBvbWl0IHRoZSBsYXN0IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHkgYW5kIG5vdCBwcmVjZWRlZCBieSBhIG5vbi1jb250ZW50IG5vZGUuXG4gIGxldCBvcmlnaW5hbCA9IGN1cnJlbnQudmFsdWU7XG4gIGN1cnJlbnQudmFsdWUgPSBjdXJyZW50LnZhbHVlLnJlcGxhY2UobXVsdGlwbGUgPyAvXFxzKyQvIDogL1sgXFx0XSskLywgJycpO1xuICBjdXJyZW50LmxlZnRTdHJpcHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsO1xuICByZXR1cm4gY3VycmVudC5sZWZ0U3RyaXBwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdoaXRlc3BhY2VDb250cm9sO1xuIl19\n","'use strict';\n\nexports.__esModule = true;\nexports.SourceLocation = SourceLocation;\nexports.id = id;\nexports.stripFlags = stripFlags;\nexports.stripComment = stripComment;\nexports.preparePath = preparePath;\nexports.prepareMustache = prepareMustache;\nexports.prepareRawBlock = prepareRawBlock;\nexports.prepareBlock = prepareBlock;\nexports.prepareProgram = prepareProgram;\nexports.preparePartialBlock = preparePartialBlock;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nfunction validateClose(open, close) {\n close = close.path ? close.path.original : close;\n\n if (open.path.original !== close) {\n var errorNode = { loc: open.path.loc };\n\n throw new _exception2['default'](open.path.original + \" doesn't match \" + close, errorNode);\n }\n}\n\nfunction SourceLocation(source, locInfo) {\n this.source = source;\n this.start = {\n line: locInfo.first_line,\n column: locInfo.first_column\n };\n this.end = {\n line: locInfo.last_line,\n column: locInfo.last_column\n };\n}\n\nfunction id(token) {\n if (/^\\[.*\\]$/.test(token)) {\n return token.substring(1, token.length - 1);\n } else {\n return token;\n }\n}\n\nfunction stripFlags(open, close) {\n return {\n open: open.charAt(2) === '~',\n close: close.charAt(close.length - 3) === '~'\n };\n}\n\nfunction stripComment(comment) {\n return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n}\n\nfunction preparePath(data, parts, loc) {\n loc = this.locInfo(loc);\n\n var original = data ? '@' : '',\n dig = [],\n depth = 0;\n\n for (var i = 0, l = parts.length; i < l; i++) {\n var part = parts[i].part,\n\n // If we have [] syntax then we do not treat path references as operators,\n // i.e. foo.[this] resolves to approximately context.foo['this']\n isLiteral = parts[i].original !== part;\n original += (parts[i].separator || '') + part;\n\n if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n if (dig.length > 0) {\n throw new _exception2['default']('Invalid path: ' + original, { loc: loc });\n } else if (part === '..') {\n depth++;\n }\n } else {\n dig.push(part);\n }\n }\n\n return {\n type: 'PathExpression',\n data: data,\n depth: depth,\n parts: dig,\n original: original,\n loc: loc\n };\n}\n\nfunction prepareMustache(path, params, hash, open, strip, locInfo) {\n // Must use charAt to support IE pre-10\n var escapeFlag = open.charAt(3) || open.charAt(2),\n escaped = escapeFlag !== '{' && escapeFlag !== '&';\n\n var decorator = /\\*/.test(open);\n return {\n type: decorator ? 'Decorator' : 'MustacheStatement',\n path: path,\n params: params,\n hash: hash,\n escaped: escaped,\n strip: strip,\n loc: this.locInfo(locInfo)\n };\n}\n\nfunction prepareRawBlock(openRawBlock, contents, close, locInfo) {\n validateClose(openRawBlock, close);\n\n locInfo = this.locInfo(locInfo);\n var program = {\n type: 'Program',\n body: contents,\n strip: {},\n loc: locInfo\n };\n\n return {\n type: 'BlockStatement',\n path: openRawBlock.path,\n params: openRawBlock.params,\n hash: openRawBlock.hash,\n program: program,\n openStrip: {},\n inverseStrip: {},\n closeStrip: {},\n loc: locInfo\n };\n}\n\nfunction prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n if (close && close.path) {\n validateClose(openBlock, close);\n }\n\n var decorator = /\\*/.test(openBlock.open);\n\n program.blockParams = openBlock.blockParams;\n\n var inverse = undefined,\n inverseStrip = undefined;\n\n if (inverseAndProgram) {\n if (decorator) {\n throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);\n }\n\n if (inverseAndProgram.chain) {\n inverseAndProgram.program.body[0].closeStrip = close.strip;\n }\n\n inverseStrip = inverseAndProgram.strip;\n inverse = inverseAndProgram.program;\n }\n\n if (inverted) {\n inverted = inverse;\n inverse = program;\n program = inverted;\n }\n\n return {\n type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n path: openBlock.path,\n params: openBlock.params,\n hash: openBlock.hash,\n program: program,\n inverse: inverse,\n openStrip: openBlock.strip,\n inverseStrip: inverseStrip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n}\n\nfunction prepareProgram(statements, loc) {\n if (!loc && statements.length) {\n var firstLoc = statements[0].loc,\n lastLoc = statements[statements.length - 1].loc;\n\n /* istanbul ignore else */\n if (firstLoc && lastLoc) {\n loc = {\n source: firstLoc.source,\n start: {\n line: firstLoc.start.line,\n column: firstLoc.start.column\n },\n end: {\n line: lastLoc.end.line,\n column: lastLoc.end.column\n }\n };\n }\n }\n\n return {\n type: 'Program',\n body: statements,\n strip: {},\n loc: loc\n };\n}\n\nfunction preparePartialBlock(open, program, close, locInfo) {\n validateClose(open, close);\n\n return {\n type: 'PartialBlockStatement',\n name: open.path,\n params: open.params,\n hash: open.hash,\n program: program,\n openStrip: open.strip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBQXNCLGNBQWM7Ozs7QUFFcEMsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxPQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7O0FBRWpELE1BQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO0FBQ2hDLFFBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7O0FBRXZDLFVBQU0sMkJBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxFQUM5QyxTQUFTLENBQ1YsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM5QyxNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixNQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsUUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3hCLFVBQU0sRUFBRSxPQUFPLENBQUMsWUFBWTtHQUM3QixDQUFDO0FBQ0YsTUFBSSxDQUFDLEdBQUcsR0FBRztBQUNULFFBQUksRUFBRSxPQUFPLENBQUMsU0FBUztBQUN2QixVQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVc7R0FDNUIsQ0FBQztDQUNIOztBQUVNLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRTtBQUN4QixNQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUIsV0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzdD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R0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7OztBQUdsRCxRQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDdkIsU0FBRyxHQUFHO0FBQ0osY0FBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQ3ZCLGFBQUssRUFBRTtBQUNMLGNBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDekIsZ0JBQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDOUI7QUFDRCxXQUFHLEVBQUU7QUFDSCxjQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQ3RCLGdCQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1NBQzNCO09BQ0YsQ0FBQztLQUNIO0dBQ0Y7O0FBRUQsU0FBTztBQUNMLFFBQUksRUFBRSxTQUFTO0FBQ2YsUUFBSSxFQUFFLFVBQVU7QUFDaEIsU0FBSyxFQUFFLEVBQUU7QUFDVCxPQUFHLEVBQUUsR0FBRztHQUNULENBQUM7Q0FDSDs7QUFFTSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNqRSxlQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUUzQixTQUFPO0FBQ0wsUUFBSSxFQUFFLHVCQUF1QjtBQUM3QixRQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixVQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDbkIsUUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2YsV0FBTyxFQUFQLE9BQU87QUFDUCxhQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUs7QUFDckIsY0FBVSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSztBQUNoQyxPQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7R0FDM0IsQ0FBQztDQUNIIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpIHtcbiAgY2xvc2UgPSBjbG9zZS5wYXRoID8gY2xvc2UucGF0aC5vcmlnaW5hbCA6IGNsb3NlO1xuXG4gIGlmIChvcGVuLnBhdGgub3JpZ2luYWwgIT09IGNsb3NlKSB7XG4gICAgbGV0IGVycm9yTm9kZSA9IHsgbG9jOiBvcGVuLnBhdGgubG9jIH07XG5cbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgb3Blbi5wYXRoLm9yaWdpbmFsICsgXCIgZG9lc24ndCBtYXRjaCBcIiArIGNsb3NlLFxuICAgICAgZXJyb3JOb2RlXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnN0YXJ0ID0ge1xuICAgIGxpbmU6IGxvY0luZm8uZmlyc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8uZmlyc3RfY29sdW1uXG4gIH07XG4gIHRoaXMuZW5kID0ge1xuICAgIGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5sYXN0X2NvbHVtblxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWQodG9rZW4pIHtcbiAgaWYgKC9eXFxbLipcXF0kLy50ZXN0KHRva2VuKSkge1xuICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEZsYWdzKG9wZW4sIGNsb3NlKSB7XG4gIHJldHVybiB7XG4gICAgb3Blbjogb3Blbi5jaGFyQXQoMikgPT09ICd+JyxcbiAgICBjbG9zZTogY2xvc2UuY2hhckF0KGNsb3NlLmxlbmd0aCAtIDMpID09PSAnfidcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50KSB7XG4gIHJldHVybiBjb21tZW50LnJlcGxhY2UoL15cXHtcXHt+PyEtPy0/LywgJycpLnJlcGxhY2UoLy0/LT9+P1xcfVxcfSQvLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGF0aChkYXRhLCBwYXJ0cywgbG9jKSB7XG4gIGxvYyA9IHRoaXMubG9jSW5mbyhsb2MpO1xuXG4gIGxldCBvcmlnaW5hbCA9IGRhdGEgPyAnQCcgOiAnJyxcbiAgICBkaWcgPSBbXSxcbiAgICBkZXB0aCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgcGFydCA9IHBhcnRzW2ldLnBhcnQsXG4gICAgICAvLyBJZiB3ZSBoYXZlIFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0b3JzLFxuICAgICAgLy8gaS5lLiBmb28uW3RoaXNdIHJlc29sdmVzIHRvIGFwcHJveGltYXRlbHkgY29udGV4dC5mb29bJ3RoaXMnXVxuICAgICAgaXNMaXRlcmFsID0gcGFydHNbaV0ub3JpZ2luYWwgIT09IHBhcnQ7XG4gICAgb3JpZ2luYWwgKz0gKHBhcnRzW2ldLnNlcGFyYXRvciB8fCAnJykgKyBwYXJ0O1xuXG4gICAgaWYgKCFpc0xpdGVyYWwgJiYgKHBhcnQgPT09ICcuLicgfHwgcGFydCA9PT0gJy4nIHx8IHBhcnQgPT09ICd0aGlzJykpIHtcbiAgICAgIGlmIChkaWcubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHBhdGg6ICcgKyBvcmlnaW5hbCwgeyBsb2MgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlnLnB1c2gocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGF0aEV4cHJlc3Npb24nLFxuICAgIGRhdGEsXG4gICAgZGVwdGgsXG4gICAgcGFydHM6IGRpZyxcbiAgICBvcmlnaW5hbCxcbiAgICBsb2NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIG9wZW4sIHN0cmlwLCBsb2NJbmZvKSB7XG4gIC8vIE11c3QgdXNlIGNoYXJBdCB0byBzdXBwb3J0IElFIHByZS0xMFxuICBsZXQgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpLFxuICAgIGVzY2FwZWQgPSBlc2NhcGVGbGFnICE9PSAneycgJiYgZXNjYXBlRmxhZyAhPT0gJyYnO1xuXG4gIGxldCBkZWNvcmF0b3IgPSAvXFwqLy50ZXN0KG9wZW4pO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3InIDogJ011c3RhY2hlU3RhdGVtZW50JyxcbiAgICBwYXRoLFxuICAgIHBhcmFtcyxcbiAgICBoYXNoLFxuICAgIGVzY2FwZWQsXG4gICAgc3RyaXAsXG4gICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSYXdCbG9jayhvcGVuUmF3QmxvY2ssIGNvbnRlbnRzLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW5SYXdCbG9jaywgY2xvc2UpO1xuXG4gIGxvY0luZm8gPSB0aGlzLmxvY0luZm8obG9jSW5mbyk7XG4gIGxldCBwcm9ncmFtID0ge1xuICAgIHR5cGU6ICdQcm9ncmFtJyxcbiAgICBib2R5OiBjb250ZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NJbmZvXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5SYXdCbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlblJhd0Jsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuUmF3QmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDoge30sXG4gICAgaW52ZXJzZVN0cmlwOiB7fSxcbiAgICBjbG9zZVN0cmlwOiB7fSxcbiAgICBsb2M6IGxvY0luZm9cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVCbG9jayhcbiAgb3BlbkJsb2NrLFxuICBwcm9ncmFtLFxuICBpbnZlcnNlQW5kUHJvZ3JhbSxcbiAgY2xvc2UsXG4gIGludmVydGVkLFxuICBsb2NJbmZvXG4pIHtcbiAgaWYgKGNsb3NlICYmIGNsb3NlLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNsb3NlKG9wZW5CbG9jaywgY2xvc2UpO1xuICB9XG5cbiAgbGV0IGRlY29yYXRvciA9IC9cXCovLnRlc3Qob3BlbkJsb2NrLm9wZW4pO1xuXG4gIHByb2dyYW0uYmxvY2tQYXJhbXMgPSBvcGVuQmxvY2suYmxvY2tQYXJhbXM7XG5cbiAgbGV0IGludmVyc2UsIGludmVyc2VTdHJpcDtcblxuICBpZiAoaW52ZXJzZUFuZFByb2dyYW0pIHtcbiAgICBpZiAoZGVjb3JhdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVW5leHBlY3RlZCBpbnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsXG4gICAgICAgIGludmVyc2VBbmRQcm9ncmFtXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnZlcnNlQW5kUHJvZ3JhbS5jaGFpbikge1xuICAgICAgaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbS5ib2R5WzBdLmNsb3NlU3RyaXAgPSBjbG9zZS5zdHJpcDtcbiAgICB9XG5cbiAgICBpbnZlcnNlU3RyaXAgPSBpbnZlcnNlQW5kUHJvZ3JhbS5zdHJpcDtcbiAgICBpbnZlcnNlID0gaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbTtcbiAgfVxuXG4gIGlmIChpbnZlcnRlZCkge1xuICAgIGludmVydGVkID0gaW52ZXJzZTtcbiAgICBpbnZlcnNlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtID0gaW52ZXJ0ZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3JCbG9jaycgOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5CbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlbkJsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuQmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIGludmVyc2UsXG4gICAgb3BlblN0cmlwOiBvcGVuQmxvY2suc3RyaXAsXG4gICAgaW52ZXJzZVN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUHJvZ3JhbShzdGF0ZW1lbnRzLCBsb2MpIHtcbiAgaWYgKCFsb2MgJiYgc3RhdGVtZW50cy5sZW5ndGgpIHtcbiAgICBjb25zdCBmaXJzdExvYyA9IHN0YXRlbWVudHNbMF0ubG9jLFxuICAgICAgbGFzdExvYyA9IHN0YXRlbWVudHNbc3RhdGVtZW50cy5sZW5ndGggLSAxXS5sb2M7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmaXJzdExvYyAmJiBsYXN0TG9jKSB7XG4gICAgICBsb2MgPSB7XG4gICAgICAgIHNvdXJjZTogZmlyc3RMb2Muc291cmNlLFxuICAgICAgICBzdGFydDoge1xuICAgICAgICAgIGxpbmU6IGZpcnN0TG9jLnN0YXJ0LmxpbmUsXG4gICAgICAgICAgY29sdW1uOiBmaXJzdExvYy5zdGFydC5jb2x1bW5cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgbGluZTogbGFzdExvYy5lbmQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGxhc3RMb2MuZW5kLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1Byb2dyYW0nLFxuICAgIGJvZHk6IHN0YXRlbWVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGFydGlhbEJsb2NrKG9wZW4sIHByb2dyYW0sIGNsb3NlLCBsb2NJbmZvKSB7XG4gIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1BhcnRpYWxCbG9ja1N0YXRlbWVudCcsXG4gICAgbmFtZTogb3Blbi5wYXRoLFxuICAgIHBhcmFtczogb3Blbi5wYXJhbXMsXG4gICAgaGFzaDogb3Blbi5oYXNoLFxuICAgIHByb2dyYW0sXG4gICAgb3BlblN0cmlwOiBvcGVuLnN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\nexports.parseWithoutProcessing = parseWithoutProcessing;\nexports.parse = parse;\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _parser = require('./parser');\n\nvar _parser2 = _interopRequireDefault(_parser);\n\nvar _whitespaceControl = require('./whitespace-control');\n\nvar _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);\n\nvar _helpers = require('./helpers');\n\nvar Helpers = _interopRequireWildcard(_helpers);\n\nvar _utils = require('../utils');\n\nexports.parser = _parser2['default'];\n\nvar yy = {};\n_utils.extend(yy, Helpers);\n\nfunction parseWithoutProcessing(input, options) {\n // Just return if an already-compiled AST was passed in.\n if (input.type === 'Program') {\n return input;\n }\n\n _parser2['default'].yy = yy;\n\n // Altering the shared object here, but this is ok as parser is a sync operation\n yy.locInfo = function (locInfo) {\n return new yy.SourceLocation(options && options.srcName, locInfo);\n };\n\n var ast = _parser2['default'].parse(input);\n\n return ast;\n}\n\nfunction parse(input, options) {\n var ast = parseWithoutProcessing(input, options);\n var strip = new _whitespaceControl2['default'](options);\n\n return strip.accept(ast);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztzQkFBbUIsVUFBVTs7OztpQ0FDQyxzQkFBc0I7Ozs7dUJBQzNCLFdBQVc7O0lBQXhCLE9BQU87O3FCQUNJLFVBQVU7O1FBRXhCLE1BQU07O0FBRWYsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1osY0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRWIsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUVyRCxNQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQzVCLFdBQU8sS0FBSyxDQUFDO0dBQ2Q7O0FBRUQsc0JBQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQzs7O0FBR2YsSUFBRSxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUM3QixXQUFPLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNuRSxDQUFDOztBQUVGLE1BQUksR0FBRyxHQUFHLG9CQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFOUIsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLE1BQUksR0FBRyxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRCxNQUFJLEtBQUssR0FBRyxtQ0FBc0IsT0FBTyxDQUFDLENBQUM7O0FBRTNDLFNBQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJiYXNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhcnNlciBmcm9tICcuL3BhcnNlcic7XG5pbXBvcnQgV2hpdGVzcGFjZUNvbnRyb2wgZnJvbSAnLi93aGl0ZXNwYWNlLWNvbnRyb2wnO1xuaW1wb3J0ICogYXMgSGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgeyBwYXJzZXIgfTtcblxubGV0IHl5ID0ge307XG5leHRlbmQoeXksIEhlbHBlcnMpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VXaXRob3V0UHJvY2Vzc2luZyhpbnB1dCwgb3B0aW9ucykge1xuICAvLyBKdXN0IHJldHVybiBpZiBhbiBhbHJlYWR5LWNvbXBpbGVkIEFTVCB3YXMgcGFzc2VkIGluLlxuICBpZiAoaW5wdXQudHlwZSA9PT0gJ1Byb2dyYW0nKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgcGFyc2VyLnl5ID0geXk7XG5cbiAgLy8gQWx0ZXJpbmcgdGhlIHNoYXJlZCBvYmplY3QgaGVyZSwgYnV0IHRoaXMgaXMgb2sgYXMgcGFyc2VyIGlzIGEgc3luYyBvcGVyYXRpb25cbiAgeXkubG9jSW5mbyA9IGZ1bmN0aW9uKGxvY0luZm8pIHtcbiAgICByZXR1cm4gbmV3IHl5LlNvdXJjZUxvY2F0aW9uKG9wdGlvbnMgJiYgb3B0aW9ucy5zcmNOYW1lLCBsb2NJbmZvKTtcbiAgfTtcblxuICBsZXQgYXN0ID0gcGFyc2VyLnBhcnNlKGlucHV0KTtcblxuICByZXR1cm4gYXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMpIHtcbiAgbGV0IGFzdCA9IHBhcnNlV2l0aG91dFByb2Nlc3NpbmcoaW5wdXQsIG9wdGlvbnMpO1xuICBsZXQgc3RyaXAgPSBuZXcgV2hpdGVzcGFjZUNvbnRyb2wob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHN0cmlwLmFjY2VwdChhc3QpO1xufVxuIl19\n","/* eslint-disable new-cap */\n\n'use strict';\n\nexports.__esModule = true;\nexports.Compiler = Compiler;\nexports.precompile = precompile;\nexports.compile = compile;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _utils = require('../utils');\n\nvar _ast = require('./ast');\n\nvar _ast2 = _interopRequireDefault(_ast);\n\nvar slice = [].slice;\n\nfunction Compiler() {}\n\n// the foundHelper register will disambiguate helper lookup from finding a\n// function in a context. This is necessary for mustache compatibility, which\n// requires that context functions in blocks are evaluated by blockHelperMissing,\n// and then proceed as if the resulting value was provided to blockHelperMissing.\n\nCompiler.prototype = {\n compiler: Compiler,\n\n equals: function equals(other) {\n var len = this.opcodes.length;\n if (other.opcodes.length !== len) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n var opcode = this.opcodes[i],\n otherOpcode = other.opcodes[i];\n if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {\n return false;\n }\n }\n\n // We know that length is the same between the two arrays because they are directly tied\n // to the opcode behavior above.\n len = this.children.length;\n for (var i = 0; i < len; i++) {\n if (!this.children[i].equals(other.children[i])) {\n return false;\n }\n }\n\n return true;\n },\n\n guid: 0,\n\n compile: function compile(program, options) {\n this.sourceNode = [];\n this.opcodes = [];\n this.children = [];\n this.options = options;\n this.stringParams = options.stringParams;\n this.trackIds = options.trackIds;\n\n options.blockParams = options.blockParams || [];\n\n options.knownHelpers = _utils.extend(Object.create(null), {\n helperMissing: true,\n blockHelperMissing: true,\n each: true,\n 'if': true,\n unless: true,\n 'with': true,\n log: true,\n lookup: true\n }, options.knownHelpers);\n\n return this.accept(program);\n },\n\n compileProgram: function compileProgram(program) {\n var childCompiler = new this.compiler(),\n // eslint-disable-line new-cap\n result = childCompiler.compile(program, this.options),\n guid = this.guid++;\n\n this.usePartial = this.usePartial || result.usePartial;\n\n this.children[guid] = result;\n this.useDepths = this.useDepths || result.useDepths;\n\n return guid;\n },\n\n accept: function accept(node) {\n /* istanbul ignore next: Sanity code */\n if (!this[node.type]) {\n throw new _exception2['default']('Unknown type: ' + node.type, node);\n }\n\n this.sourceNode.unshift(node);\n var ret = this[node.type](node);\n this.sourceNode.shift();\n return ret;\n },\n\n Program: function Program(program) {\n this.options.blockParams.unshift(program.blockParams);\n\n var body = program.body,\n bodyLength = body.length;\n for (var i = 0; i < bodyLength; i++) {\n this.accept(body[i]);\n }\n\n this.options.blockParams.shift();\n\n this.isSimple = bodyLength === 1;\n this.blockParams = program.blockParams ? program.blockParams.length : 0;\n\n return this;\n },\n\n BlockStatement: function BlockStatement(block) {\n transformLiteralToPath(block);\n\n var program = block.program,\n inverse = block.inverse;\n\n program = program && this.compileProgram(program);\n inverse = inverse && this.compileProgram(inverse);\n\n var type = this.classifySexpr(block);\n\n if (type === 'helper') {\n this.helperSexpr(block, program, inverse);\n } else if (type === 'simple') {\n this.simpleSexpr(block);\n\n // now that the simple mustache is resolved, we need to\n // evaluate it by executing `blockHelperMissing`\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n this.opcode('emptyHash');\n this.opcode('blockValue', block.path.original);\n } else {\n this.ambiguousSexpr(block, program, inverse);\n\n // now that the simple mustache is resolved, we need to\n // evaluate it by executing `blockHelperMissing`\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n this.opcode('emptyHash');\n this.opcode('ambiguousBlockValue');\n }\n\n this.opcode('append');\n },\n\n DecoratorBlock: function DecoratorBlock(decorator) {\n var program = decorator.program && this.compileProgram(decorator.program);\n var params = this.setupFullMustacheParams(decorator, program, undefined),\n path = decorator.path;\n\n this.useDecorators = true;\n this.opcode('registerDecorator', params.length, path.original);\n },\n\n PartialStatement: function PartialStatement(partial) {\n this.usePartial = true;\n\n var program = partial.program;\n if (program) {\n program = this.compileProgram(partial.program);\n }\n\n var params = partial.params;\n if (params.length > 1) {\n throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);\n } else if (!params.length) {\n if (this.options.explicitPartialContext) {\n this.opcode('pushLiteral', 'undefined');\n } else {\n params.push({ type: 'PathExpression', parts: [], depth: 0 });\n }\n }\n\n var partialName = partial.name.original,\n isDynamic = partial.name.type === 'SubExpression';\n if (isDynamic) {\n this.accept(partial.name);\n }\n\n this.setupFullMustacheParams(partial, program, undefined, true);\n\n var indent = partial.indent || '';\n if (this.options.preventIndent && indent) {\n this.opcode('appendContent', indent);\n indent = '';\n }\n\n this.opcode('invokePartial', isDynamic, partialName, indent);\n this.opcode('append');\n },\n PartialBlockStatement: function PartialBlockStatement(partialBlock) {\n this.PartialStatement(partialBlock);\n },\n\n MustacheStatement: function MustacheStatement(mustache) {\n this.SubExpression(mustache);\n\n if (mustache.escaped && !this.options.noEscape) {\n this.opcode('appendEscaped');\n } else {\n this.opcode('append');\n }\n },\n Decorator: function Decorator(decorator) {\n this.DecoratorBlock(decorator);\n },\n\n ContentStatement: function ContentStatement(content) {\n if (content.value) {\n this.opcode('appendContent', content.value);\n }\n },\n\n CommentStatement: function CommentStatement() {},\n\n SubExpression: function SubExpression(sexpr) {\n transformLiteralToPath(sexpr);\n var type = this.classifySexpr(sexpr);\n\n if (type === 'simple') {\n this.simpleSexpr(sexpr);\n } else if (type === 'helper') {\n this.helperSexpr(sexpr);\n } else {\n this.ambiguousSexpr(sexpr);\n }\n },\n ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {\n var path = sexpr.path,\n name = path.parts[0],\n isBlock = program != null || inverse != null;\n\n this.opcode('getContext', path.depth);\n\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n\n path.strict = true;\n this.accept(path);\n\n this.opcode('invokeAmbiguous', name, isBlock);\n },\n\n simpleSexpr: function simpleSexpr(sexpr) {\n var path = sexpr.path;\n path.strict = true;\n this.accept(path);\n this.opcode('resolvePossibleLambda');\n },\n\n helperSexpr: function helperSexpr(sexpr, program, inverse) {\n var params = this.setupFullMustacheParams(sexpr, program, inverse),\n path = sexpr.path,\n name = path.parts[0];\n\n if (this.options.knownHelpers[name]) {\n this.opcode('invokeKnownHelper', params.length, name);\n } else if (this.options.knownHelpersOnly) {\n throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);\n } else {\n path.strict = true;\n path.falsy = true;\n\n this.accept(path);\n this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));\n }\n },\n\n PathExpression: function PathExpression(path) {\n this.addDepth(path.depth);\n this.opcode('getContext', path.depth);\n\n var name = path.parts[0],\n scoped = _ast2['default'].helpers.scopedId(path),\n blockParamId = !path.depth && !scoped && this.blockParamIndex(name);\n\n if (blockParamId) {\n this.opcode('lookupBlockParam', blockParamId, path.parts);\n } else if (!name) {\n // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`\n this.opcode('pushContext');\n } else if (path.data) {\n this.options.data = true;\n this.opcode('lookupData', path.depth, path.parts, path.strict);\n } else {\n this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);\n }\n },\n\n StringLiteral: function StringLiteral(string) {\n this.opcode('pushString', string.value);\n },\n\n NumberLiteral: function NumberLiteral(number) {\n this.opcode('pushLiteral', number.value);\n },\n\n BooleanLiteral: function BooleanLiteral(bool) {\n this.opcode('pushLiteral', bool.value);\n },\n\n UndefinedLiteral: function UndefinedLiteral() {\n this.opcode('pushLiteral', 'undefined');\n },\n\n NullLiteral: function NullLiteral() {\n this.opcode('pushLiteral', 'null');\n },\n\n Hash: function Hash(hash) {\n var pairs = hash.pairs,\n i = 0,\n l = pairs.length;\n\n this.opcode('pushHash');\n\n for (; i < l; i++) {\n this.pushParam(pairs[i].value);\n }\n while (i--) {\n this.opcode('assignToHash', pairs[i].key);\n }\n this.opcode('popHash');\n },\n\n // HELPERS\n opcode: function opcode(name) {\n this.opcodes.push({\n opcode: name,\n args: slice.call(arguments, 1),\n loc: this.sourceNode[0].loc\n });\n },\n\n addDepth: function addDepth(depth) {\n if (!depth) {\n return;\n }\n\n this.useDepths = true;\n },\n\n classifySexpr: function classifySexpr(sexpr) {\n var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);\n\n var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);\n\n // a mustache is an eligible helper if:\n // * its id is simple (a single part, not `this` or `..`)\n var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr);\n\n // if a mustache is an eligible helper but not a definite\n // helper, it is ambiguous, and will be resolved in a later\n // pass or at runtime.\n var isEligible = !isBlockParam && (isHelper || isSimple);\n\n // if ambiguous, we can possibly resolve the ambiguity now\n // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.\n if (isEligible && !isHelper) {\n var _name = sexpr.path.parts[0],\n options = this.options;\n if (options.knownHelpers[_name]) {\n isHelper = true;\n } else if (options.knownHelpersOnly) {\n isEligible = false;\n }\n }\n\n if (isHelper) {\n return 'helper';\n } else if (isEligible) {\n return 'ambiguous';\n } else {\n return 'simple';\n }\n },\n\n pushParams: function pushParams(params) {\n for (var i = 0, l = params.length; i < l; i++) {\n this.pushParam(params[i]);\n }\n },\n\n pushParam: function pushParam(val) {\n var value = val.value != null ? val.value : val.original || '';\n\n if (this.stringParams) {\n if (value.replace) {\n value = value.replace(/^(\\.?\\.\\/)*/g, '').replace(/\\//g, '.');\n }\n\n if (val.depth) {\n this.addDepth(val.depth);\n }\n this.opcode('getContext', val.depth || 0);\n this.opcode('pushStringParam', value, val.type);\n\n if (val.type === 'SubExpression') {\n // SubExpressions get evaluated and passed in\n // in string params mode.\n this.accept(val);\n }\n } else {\n if (this.trackIds) {\n var blockParamIndex = undefined;\n if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {\n blockParamIndex = this.blockParamIndex(val.parts[0]);\n }\n if (blockParamIndex) {\n var blockParamChild = val.parts.slice(1).join('.');\n this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);\n } else {\n value = val.original || value;\n if (value.replace) {\n value = value.replace(/^this(?:\\.|$)/, '').replace(/^\\.\\//, '').replace(/^\\.$/, '');\n }\n\n this.opcode('pushId', val.type, value);\n }\n }\n this.accept(val);\n }\n },\n\n setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {\n var params = sexpr.params;\n this.pushParams(params);\n\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n\n if (sexpr.hash) {\n this.accept(sexpr.hash);\n } else {\n this.opcode('emptyHash', omitEmpty);\n }\n\n return params;\n },\n\n blockParamIndex: function blockParamIndex(name) {\n for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {\n var blockParams = this.options.blockParams[depth],\n param = blockParams && _utils.indexOf(blockParams, name);\n if (blockParams && param >= 0) {\n return [depth, param];\n }\n }\n }\n};\n\nfunction precompile(input, options, env) {\n if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);\n }\n\n options = options || {};\n if (!('data' in options)) {\n options.data = true;\n }\n if (options.compat) {\n options.useDepths = true;\n }\n\n var ast = env.parse(input, options),\n environment = new env.Compiler().compile(ast, options);\n return new env.JavaScriptCompiler().compile(environment, options);\n}\n\nfunction compile(input, options, env) {\n if (options === undefined) options = {};\n\n if (input == null || typeof input !== 'string' && input.type !== 'Program') {\n throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);\n }\n\n options = _utils.extend({}, options);\n if (!('data' in options)) {\n options.data = true;\n }\n if (options.compat) {\n options.useDepths = true;\n }\n\n var compiled = undefined;\n\n function compileInput() {\n var ast = env.parse(input, options),\n environment = new env.Compiler().compile(ast, options),\n templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);\n return env.template(templateSpec);\n }\n\n // Template is only compiled on first use and cached after that point.\n function ret(context, execOptions) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled.call(this, context, execOptions);\n }\n ret._setup = function (setupOptions) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled._setup(setupOptions);\n };\n ret._child = function (i, data, blockParams, depths) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled._child(i, data, blockParams, depths);\n };\n return ret;\n}\n\nfunction argEquals(a, b) {\n if (a === b) {\n return true;\n }\n\n if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {\n for (var i = 0; i < a.length; i++) {\n if (!argEquals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n}\n\nfunction transformLiteralToPath(sexpr) {\n if (!sexpr.path.parts) {\n var literal = sexpr.path;\n // Casting to string here to make false and 0 literal values play nicely with the rest\n // of the system.\n sexpr.path = {\n type: 'PathExpression',\n data: false,\n depth: 0,\n parts: [literal.original + ''],\n original: literal.original + '',\n loc: literal.loc\n };\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozt5QkFFc0IsY0FBYzs7OztxQkFDSyxVQUFVOzttQkFDbkMsT0FBTzs7OztBQUV2QixJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDOztBQUVoQixTQUFTLFFBQVEsR0FBRyxFQUFFOzs7Ozs7O0FBTzdCLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDbkIsVUFBUSxFQUFFLFFBQVE7O0FBRWxCLFFBQU0sRUFBRSxnQkFBUyxLQUFLLEVBQUU7QUFDdEIsUUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDOUIsUUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFDaEMsYUFBTyxLQUFLLENBQUM7S0FDZDs7QUFFRCxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFVBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQzFCLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFVBQ0UsTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsTUFBTSxJQUNwQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFDekM7QUFDQSxlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7Ozs7QUFJRCxPQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QixVQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEs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LENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMxQixlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiO0NBQ0Y7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7QUFDckMsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3JCLFFBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7OztBQUd6QixTQUFLLENBQUMsSUFBSSxHQUFHO0FBQ1gsVUFBSSxFQUFFLGdCQUFnQjtBQUN0QixVQUFJLEVBQUUsS0FBSztBQUNYLFdBQUssRUFBRSxDQUFDO0FBQ1IsV0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDOUIsY0FBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRTtBQUMvQixTQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7S0FDakIsQ0FBQztHQUNIO0NBQ0YiLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7IGlzQXJyYXksIGluZGV4T2YsIGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBBU1QgZnJvbSAnLi9hc3QnO1xuXG5jb25zdCBzbGljZSA9IFtdLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tcGlsZXIoKSB7fVxuXG4vLyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUgaGVscGVyIGxvb2t1cCBmcm9tIGZpbmRpbmcgYVxuLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFjaGUgY29tcGF0aWJpbGl0eSwgd2hpY2hcbi8vIHJlcXVpcmVzIHRoYXQgY29udGV4dCBmdW5jdGlvbnMgaW4gYmxvY2tzIGFyZSBldmFsdWF0ZWQgYnkgYmxvY2tIZWxwZXJNaXNzaW5nLFxuLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBpZiB0aGUgcmVzdWx0aW5nIHZhbHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3NpbmcuXG5cbkNvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgY29tcGlsZXI6IENvbXBpbGVyLFxuXG4gIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5vcGNvZGVzLmxlbmd0aDtcbiAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sXG4gICAgICAgIG90aGVyT3Bjb2RlID0gb3RoZXIub3Bjb2Rlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgb3Bjb2RlLm9wY29kZSAhPT0gb3RoZXJPcGNvZGUub3Bjb2RlIHx8XG4gICAgICAgICFhcmdFcXVhbHMob3Bjb2RlLmFyZ3MsIG90aGVyT3Bjb2RlLmFyZ3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIGtub3cgdGhhdCBsZW5ndGggaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgdHdvIGFycmF5cyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IHRpZWRcbiAgICAvLyB0byB0aGUgb3Bjb2RlIGJlaGF2aW9yIGFib3ZlLlxuICAgIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy5jaGlsZHJlbltpXS5lcXVhbHMob3RoZXIuY2hpbGRyZW5baV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICBndWlkOiAwLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKHByb2dyYW0sIG9wdGlvbnMpIHtcbiAgICB0aGlzLnNvdXJjZU5vZGUgPSBbXTtcbiAgICB0aGlzLm9wY29kZXMgPSBbXTtcbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IG9wdGlvbnMuc3RyaW5nUGFyYW1zO1xuICAgIHRoaXMudHJhY2tJZHMgPSBvcHRpb25zLnRyYWNrSWRzO1xuXG4gICAgb3B0aW9ucy5ibG9ja1BhcmFtcyA9IG9wdGlvbnMuYmxvY2tQYXJhbXMgfHwgW107XG5cbiAgICBvcHRpb25zLmtub3duSGVscGVycyA9IGV4dGVuZChcbiAgICAgIE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICB7XG4gICAgICAgIGhlbHBlck1pc3Npbmc6IHRydWUsXG4gICAgICAgIGJsb2NrSGVscGVyTWlzc2luZzogdHJ1ZSxcbiAgICAgICAgZWFjaDogdHJ1ZSxcbiAgICAgICAgaWY6IHRydWUsXG4gICAgICAgIHVubGVzczogdHJ1ZSxcbiAgICAgICAgd2l0aDogdHJ1ZSxcbiAgICAgICAgbG9nOiB0cnVlLFxuICAgICAgICBsb29rdXA6IHRydWVcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmtub3duSGVscGVyc1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5hY2NlcHQocHJvZ3JhbSk7XG4gIH0sXG5cbiAgY29tcGlsZVByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICBsZXQgY2hpbGRDb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuICAgICAgcmVzdWx0ID0gY2hpbGRDb21waWxlci5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyksXG4gICAgICBndWlkID0gdGhpcy5ndWlkKys7XG5cbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0aGlzLnVzZVBhcnRpYWwgfHwgcmVzdWx0LnVzZVBhcnRpYWw7XG5cbiAgICB0aGlzLmNoaWxkcmVuW2d1aWRdID0gcmVzdWx0O1xuICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgcmVzdWx0LnVzZURlcHRocztcblxuICAgIHJldHVybiBndWlkO1xuICB9LFxuXG4gIGFjY2VwdDogZnVuY3Rpb24obm9kZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqL1xuICAgIGlmICghdGhpc1tub2RlLnR5cGVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHR5cGU6ICcgKyBub2RlLnR5cGUsIG5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlTm9kZS51bnNoaWZ0KG5vZGUpO1xuICAgIGxldCByZXQgPSB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gICAgdGhpcy5zb3VyY2VOb2RlLnNoaWZ0KCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnVuc2hpZnQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYm9keSA9IHByb2dyYW0uYm9keSxcbiAgICAgIGJvZHlMZW5ndGggPSBib2R5Lmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnNoaWZ0KCk7XG5cbiAgICB0aGlzLmlzU2ltcGxlID0gYm9keUxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gcHJvZ3JhbS5ibG9ja1BhcmFtcyA/IHByb2dyYW0uYmxvY2tQYXJhbXMubGVuZ3RoIDogMDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihibG9jaykge1xuICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoYmxvY2spO1xuXG4gICAgbGV0IHByb2dyYW0gPSBibG9jay5wcm9ncmFtLFxuICAgICAgaW52ZXJzZSA9IGJsb2NrLmludmVyc2U7XG5cbiAgICBwcm9ncmFtID0gcHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKHByb2dyYW0pO1xuICAgIGludmVyc2UgPSBpbnZlcnNlICYmIHRoaXMuY29tcGlsZVByb2dyYW0oaW52ZXJzZSk7XG5cbiAgICBsZXQgdHlwZSA9IHRoaXMuY2xhc3NpZnlTZXhwcihibG9jayk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2hlbHBlcicpIHtcbiAgICAgIHRoaXMuaGVscGVyU2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NpbXBsZScpIHtcbiAgICAgIHRoaXMuc2ltcGxlU2V4cHIoYmxvY2spO1xuXG4gICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2BcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7XG4gICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScsIGJsb2NrLnBhdGgub3JpZ2luYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFtYmlndW91c1NleHByKGJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlKTtcblxuICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0b1xuICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgXG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FtYmlndW91c0Jsb2NrVmFsdWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG5cbiAgRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb2dyYW0gPSBkZWNvcmF0b3IucHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGRlY29yYXRvci5wcm9ncmFtKTtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhkZWNvcmF0b3IsIHByb2dyYW0sIHVuZGVmaW5lZCksXG4gICAgICBwYXRoID0gZGVjb3JhdG9yLnBhdGg7XG5cbiAgICB0aGlzLnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgIHRoaXMub3Bjb2RlKCdyZWdpc3RlckRlY29yYXRvcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWwpO1xuICB9LFxuXG4gIFBhcnRpYWxTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0cnVlO1xuXG4gICAgbGV0IHByb2dyYW0gPSBwYXJ0aWFsLnByb2dyYW07XG4gICAgaWYgKHByb2dyYW0pIHtcbiAgICAgIHByb2dyYW0gPSB0aGlzLmNvbXBpbGVQcm9ncmFtKHBhcnRpYWwucHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmFtcyA9IHBhcnRpYWwucGFyYW1zO1xuICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1Vuc3VwcG9ydGVkIG51bWJlciBvZiBwYXJ0aWFsIGFyZ3VtZW50czogJyArIHBhcmFtcy5sZW5ndGgsXG4gICAgICAgIHBhcnRpYWxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghcGFyYW1zLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBsaWNpdFBhcnRpYWxDb250ZXh0KSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICd1bmRlZmluZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKHsgdHlwZTogJ1BhdGhFeHByZXNzaW9uJywgcGFydHM6IFtdLCBkZXB0aDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcGFydGlhbE5hbWUgPSBwYXJ0aWFsLm5hbWUub3JpZ2luYWwsXG4gICAgICBpc0R5bmFtaWMgPSBwYXJ0aWFsLm5hbWUudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nO1xuICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgIHRoaXMuYWNjZXB0KHBhcnRpYWwubmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhwYXJ0aWFsLCBwcm9ncmFtLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgbGV0IGluZGVudCA9IHBhcnRpYWwuaW5kZW50IHx8ICcnO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucHJldmVudEluZGVudCAmJiBpbmRlbnQpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRDb250ZW50JywgaW5kZW50KTtcbiAgICAgIGluZGVudCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdpbnZva2VQYXJ0aWFsJywgaXNEeW5hbWljLCBwYXJ0aWFsTmFtZSwgaW5kZW50KTtcbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbEJsb2NrKSB7XG4gICAgdGhpcy5QYXJ0aWFsU3RhdGVtZW50KHBhcnRpYWxCbG9jayk7XG4gIH0sXG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gICAgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKTtcblxuICAgIGlmIChtdXN0YWNoZS5lc2NhcGVkICYmICF0aGlzLm9wdGlvbnMubm9Fc2NhcGUpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRFc2NhcGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTtcbiAgICB9XG4gIH0sXG4gIERlY29yYXRvcihkZWNvcmF0b3IpIHtcbiAgICB0aGlzLkRlY29yYXRvckJsb2NrKGRlY29yYXRvcik7XG4gIH0sXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24oY29udGVudCkge1xuICAgIGlmIChjb250ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kQ29udGVudCcsIGNvbnRlbnQudmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBDb21tZW50U3RhdGVtZW50OiBmdW5jdGlvbigpIHt9LFxuXG4gIFN1YkV4cHJlc3Npb246IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgdHJhbnNmb3JtTGl0ZXJhbFRvUGF0aChzZXhwcik7XG4gICAgbGV0IHR5cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoc2V4cHIpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzaW1wbGUnKSB7XG4gICAgICB0aGlzLnNpbXBsZVNleHByKHNleHByKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdoZWxwZXInKSB7XG4gICAgICB0aGlzLmhlbHBlclNleHByKHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbWJpZ3VvdXNTZXhwcihzZXhwcik7XG4gICAgfVxuICB9LFxuICBhbWJpZ3VvdXNTZXhwcjogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHtcbiAgICBsZXQgcGF0aCA9IHNleHByLnBhdGgsXG4gICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXSxcbiAgICAgIGlzQmxvY2sgPSBwcm9ncmFtICE9IG51bGwgfHwgaW52ZXJzZSAhPSBudWxsO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBwYXRoLmRlcHRoKTtcblxuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuXG4gICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2ludm9rZUFtYmlndW91cycsIG5hbWUsIGlzQmxvY2spO1xuICB9LFxuXG4gIHNpbXBsZVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBwYXRoID0gc2V4cHIucGF0aDtcbiAgICBwYXRoLnN0cmljdCA9IHRydWU7XG4gICAgdGhpcy5hY2NlcHQocGF0aCk7XG4gICAgdGhpcy5vcGNvZGUoJ3Jlc29sdmVQb3NzaWJsZUxhbWJkYScpO1xuICB9LFxuXG4gIGhlbHBlclNleHByOiBmdW5jdGlvbihzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSkge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSxcbiAgICAgIHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgbmFtZSA9IHBhdGgucGFydHNbMF07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtub3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1lvdSBzcGVjaWZpZWQga25vd25IZWxwZXJzT25seSwgYnV0IHVzZWQgdGhlIHVua25vd24gaGVscGVyICcgKyBuYW1lLFxuICAgICAgICBzZXhwclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgICAgcGF0aC5mYWxzeSA9IHRydWU7XG5cbiAgICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgICAgdGhpcy5vcGNvZGUoXG4gICAgICAgICdpbnZva2VIZWxwZXInLFxuICAgICAgICBwYXJhbXMubGVuZ3RoLFxuICAgICAgICBwYXRoLm9yaWdpbmFsLFxuICAgICAgICBBU1QuaGVscGVycy5zaW1wbGVJZChwYXRoKVxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICB0aGlzLmFkZERlcHRoKHBhdGguZGVwdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICBsZXQgbmFtZSA9IHBhdGgucGFydHNbMF0sXG4gICAgICBzY29wZWQgPSBBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSxcbiAgICAgIGJsb2NrUGFyYW1JZCA9ICFwYXRoLmRlcHRoICYmICFzY29wZWQgJiYgdGhpcy5ibG9ja1BhcmFtSW5kZXgobmFtZSk7XG5cbiAgICBpZiAoYmxvY2tQYXJhbUlkKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JZCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmICghbmFtZSkge1xuICAgICAgLy8gQ29udGV4dCByZWZlcmVuY2UsIGkuZS4gYHt7Zm9vIC59fWAgb3IgYHt7Zm9vIC4ufX1gXG4gICAgICB0aGlzLm9wY29kZSgncHVzaENvbnRleHQnKTtcbiAgICB9IGVsc2UgaWYgKHBhdGguZGF0YSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cERhdGEnLCBwYXRoLmRlcHRoLCBwYXRoLnBhcnRzLCBwYXRoLnN0cmljdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKFxuICAgICAgICAnbG9va3VwT25Db250ZXh0JyxcbiAgICAgICAgcGF0aC5wYXJ0cyxcbiAgICAgICAgcGF0aC5mYWxzeSxcbiAgICAgICAgcGF0aC5zdHJpY3QsXG4gICAgICAgIHNjb3BlZFxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmcnLCBzdHJpbmcudmFsdWUpO1xuICB9LFxuXG4gIE51bWJlckxpdGVyYWw6IGZ1bmN0aW9uKG51bWJlcikge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsIG51bWJlci52YWx1ZSk7XG4gIH0sXG5cbiAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uKGJvb2wpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBib29sLnZhbHVlKTtcbiAgfSxcblxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAndW5kZWZpbmVkJyk7XG4gIH0sXG5cbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICdudWxsJyk7XG4gIH0sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnMsXG4gICAgICBpID0gMCxcbiAgICAgIGwgPSBwYWlycy5sZW5ndGg7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaEhhc2gnKTtcblxuICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnB1c2hQYXJhbShwYWlyc1tpXS52YWx1ZSk7XG4gICAgfVxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhc3NpZ25Ub0hhc2gnLCBwYWlyc1tpXS5rZXkpO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgncG9wSGFzaCcpO1xuICB9LFxuXG4gIC8vIEhFTFBFUlNcbiAgb3Bjb2RlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdGhpcy5vcGNvZGVzLnB1c2goe1xuICAgICAgb3Bjb2RlOiBuYW1lLFxuICAgICAgYXJnczogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgbG9jOiB0aGlzLnNvdXJjZU5vZGVbMF0ubG9jXG4gICAgfSk7XG4gIH0sXG5cbiAgYWRkRGVwdGg6IGZ1bmN0aW9uKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfSxcblxuICBjbGFzc2lmeVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBpc1NpbXBsZSA9IEFTVC5oZWxwZXJzLnNpbXBsZUlkKHNleHByLnBhdGgpO1xuXG4gICAgbGV0IGlzQmxvY2tQYXJhbSA9IGlzU2ltcGxlICYmICEhdGhpcy5ibG9ja1BhcmFtSW5kZXgoc2V4cHIucGF0aC5wYXJ0c1swXSk7XG5cbiAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjpcbiAgICAvLyAqIGl0cyBpZCBpcyBzaW1wbGUgKGEgc2luZ2xlIHBhcnQsIG5vdCBgdGhpc2Agb3IgYC4uYClcbiAgICBsZXQgaXNIZWxwZXIgPSAhaXNCbG9ja1BhcmFtICYmIEFTVC5oZWxwZXJzLmhlbHBlckV4cHJlc3Npb24oc2V4cHIpO1xuXG4gICAgLy8gaWYgYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgYnV0IG5vdCBhIGRlZmluaXRlXG4gICAgLy8gaGVscGVyLCBpdCBpcyBhbWJpZ3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXJcbiAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuXG4gICAgbGV0IGlzRWxpZ2libGUgPSAhaXNCbG9ja1BhcmFtICYmIChpc0hlbHBlciB8fCBpc1NpbXBsZSk7XG5cbiAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNhbiBwb3NzaWJseSByZXNvbHZlIHRoZSBhbWJpZ3VpdHkgbm93XG4gICAgLy8gQW4gZWxpZ2libGUgaGVscGVyIGlzIG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb21wbGV4IHBhdGgsIGkuZS4gYHRoaXMuZm9vYCwgYC4uL2Zvb2AgZXRjLlxuICAgIGlmIChpc0VsaWdpYmxlICYmICFpc0hlbHBlcikge1xuICAgICAgbGV0IG5hbWUgPSBzZXhwci5wYXRoLnBhcnRzWzBdLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgaWYgKG9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdKSB7XG4gICAgICAgIGlzSGVscGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7XG4gICAgICAgIGlzRWxpZ2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNIZWxwZXIpIHtcbiAgICAgIHJldHVybiAnaGVscGVyJztcbiAgICB9IGVsc2UgaWYgKGlzRWxpZ2libGUpIHtcbiAgICAgIHJldHVybiAnYW1iaWd1b3VzJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdzaW1wbGUnO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW1zOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHVzaFBhcmFtKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2hQYXJhbTogZnVuY3Rpb24odmFsKSB7XG4gICAgbGV0IHZhbHVlID0gdmFsLnZhbHVlICE9IG51bGwgPyB2YWwudmFsdWUgOiB2YWwub3JpZ2luYWwgfHwgJyc7XG5cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIGlmICh2YWx1ZS5yZXBsYWNlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXihcXC4/XFwuXFwvKSovZywgJycpLnJlcGxhY2UoL1xcLy9nLCAnLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsLmRlcHRoKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwdGgodmFsLmRlcHRoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgdmFsLmRlcHRoIHx8IDApO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmdQYXJhbScsIHZhbHVlLCB2YWwudHlwZSk7XG5cbiAgICAgIGlmICh2YWwudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nKSB7XG4gICAgICAgIC8vIFN1YkV4cHJlc3Npb25zIGdldCBldmFsdWF0ZWQgYW5kIHBhc3NlZCBpblxuICAgICAgICAvLyBpbiBzdHJpbmcgcGFyYW1zIG1vZGUuXG4gICAgICAgIHRoaXMuYWNjZXB0KHZhbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICAgIGxldCBibG9ja1BhcmFtSW5kZXg7XG4gICAgICAgIGlmICh2YWwucGFydHMgJiYgIUFTVC5oZWxwZXJzLnNjb3BlZElkKHZhbCkgJiYgIXZhbC5kZXB0aCkge1xuICAgICAgICAgIGJsb2NrUGFyYW1JbmRleCA9IHRoaXMuYmxvY2tQYXJhbUluZGV4KHZhbC5wYXJ0c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrUGFyYW1JbmRleCkge1xuICAgICAgICAgIGxldCBibG9ja1BhcmFtQ2hpbGQgPSB2YWwucGFydHMuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCAnQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JbmRleCwgYmxvY2tQYXJhbUNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbC5vcmlnaW5hbCB8fCB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXnRoaXMoPzpcXC58JCkvLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC5cXC8vLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC4kLywgJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCB2YWwudHlwZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjY2VwdCh2YWwpO1xuICAgIH1cbiAgfSxcblxuICBzZXR1cEZ1bGxNdXN0YWNoZVBhcmFtczogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UsIG9taXRFbXB0eSkge1xuICAgIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXM7XG4gICAgdGhpcy5wdXNoUGFyYW1zKHBhcmFtcyk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIGlmIChzZXhwci5oYXNoKSB7XG4gICAgICB0aGlzLmFjY2VwdChzZXhwci5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcsIG9taXRFbXB0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSxcblxuICBibG9ja1BhcmFtSW5kZXg6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBmb3IgKFxuICAgICAgbGV0IGRlcHRoID0gMCwgbGVuID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLmxlbmd0aDtcbiAgICAgIGRlcHRoIDwgbGVuO1xuICAgICAgZGVwdGgrK1xuICAgICkge1xuICAgICAgbGV0IGJsb2NrUGFyYW1zID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zW2RlcHRoXSxcbiAgICAgICAgcGFyYW0gPSBibG9ja1BhcmFtcyAmJiBpbmRleE9mKGJsb2NrUGFyYW1zLCBuYW1lKTtcbiAgICAgIGlmIChibG9ja1BhcmFtcyAmJiBwYXJhbSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBbZGVwdGgsIHBhcmFtXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlKGlucHV0LCBvcHRpb25zLCBlbnYpIHtcbiAgaWYgKFxuICAgIGlucHV0ID09IG51bGwgfHxcbiAgICAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyAmJiBpbnB1dC50eXBlICE9PSAnUHJvZ3JhbScpXG4gICkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAnWW91IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGViYXJzIEFTVCB0byBIYW5kbGViYXJzLnByZWNvbXBpbGUuIFlvdSBwYXNzZWQgJyArXG4gICAgICAgIGlucHV0XG4gICAgKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBhc3QgPSBlbnYucGFyc2UoaW5wdXQsIG9wdGlvbnMpLFxuICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKGlucHV0LCBvcHRpb25zID0ge30sIGVudikge1xuICBpZiAoXG4gICAgaW5wdXQgPT0gbnVsbCB8fFxuICAgICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMuY29tcGlsZS4gWW91IHBhc3NlZCAnICtcbiAgICAgICAgaW5wdXRcbiAgICApO1xuICB9XG5cbiAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XG4gIGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkge1xuICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY29tcGF0KSB7XG4gICAgb3B0aW9ucy51c2VEZXB0aHMgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGNvbXBpbGVkO1xuXG4gIGZ1bmN0aW9uIGNvbXBpbGVJbnB1dCgpIHtcbiAgICBsZXQgYXN0ID0gZW52LnBhcnNlKGlucHV0LCBvcHRpb25zKSxcbiAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKSxcbiAgICAgIHRlbXBsYXRlU3BlYyA9IG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICByZXR1cm4gZW52LnRlbXBsYXRlKHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICAvLyBUZW1wbGF0ZSBpcyBvbmx5IGNvbXBpbGVkIG9uIGZpcnN0IHVzZSBhbmQgY2FjaGVkIGFmdGVyIHRoYXQgcG9pbnQuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBleGVjT3B0aW9ucykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5jYWxsKHRoaXMsIGNvbnRleHQsIGV4ZWNPcHRpb25zKTtcbiAgfVxuICByZXQuX3NldHVwID0gZnVuY3Rpb24oc2V0dXBPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9zZXR1cChzZXR1cE9wdGlvbnMpO1xuICB9O1xuICByZXQuX2NoaWxkID0gZnVuY3Rpb24oaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5fY2hpbGQoaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGFyZ0VxdWFscyhhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNBcnJheShhKSAmJiBpc0FycmF5KGIpICYmIGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFhcmdFcXVhbHMoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKHNleHByKSB7XG4gIGlmICghc2V4cHIucGF0aC5wYXJ0cykge1xuICAgIGxldCBsaXRlcmFsID0gc2V4cHIucGF0aDtcbiAgICAvLyBDYXN0aW5nIHRvIHN0cmluZyBoZXJlIHRvIG1ha2UgZmFsc2UgYW5kIDAgbGl0ZXJhbCB2YWx1ZXMgcGxheSBuaWNlbHkgd2l0aCB0aGUgcmVzdFxuICAgIC8vIG9mIHRoZSBzeXN0ZW0uXG4gICAgc2V4cHIucGF0aCA9IHtcbiAgICAgIHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsXG4gICAgICBkYXRhOiBmYWxzZSxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgcGFydHM6IFtsaXRlcmFsLm9yaWdpbmFsICsgJyddLFxuICAgICAgb3JpZ2luYWw6IGxpdGVyYWwub3JpZ2luYWwgKyAnJyxcbiAgICAgIGxvYzogbGl0ZXJhbC5sb2NcbiAgICB9O1xuICB9XG59XG4iXX0=\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 === null) {\n return 1; // aStr2 !== null\n }\n\n if (aStr2 === null) {\n return -1; // aStr1 !== null\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n sourceURL = sourceURL || '';\n\n if (sourceRoot) {\n // This follows what Chrome does.\n if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n sourceRoot += '/';\n }\n // The spec says:\n // Line 4: An optional source root, useful for relocating source\n // files on a server or removing repeated values in the\n // “sources” entry. This value is prepended to the individual\n // entries in the “source” field.\n sourceURL = sourceRoot + sourceURL;\n }\n\n // Historically, SourceMapConsumer did not take the sourceMapURL as\n // a parameter. This mode is still somewhat supported, which is why\n // this code block is conditional. However, it's preferable to pass\n // the source map URL to SourceMapConsumer, so that this function\n // can implement the source URL resolution algorithm as outlined in\n // the spec. This block is basically the equivalent of:\n // new URL(sourceURL, sourceMapURL).toString()\n // ... except it avoids using URL, which wasn't available in the\n // older releases of node still supported by this library.\n //\n // The spec says:\n // If the sources are not absolute URLs after prepending of the\n // “sourceRoot”, the sources are resolved relative to the\n // SourceMap (like resolving script src in a html document).\n if (sourceMapURL) {\n var parsed = urlParse(sourceMapURL);\n if (!parsed) {\n throw new Error(\"sourceMapURL could not be parsed\");\n }\n if (parsed.path) {\n // Strip the last path component, but keep the \"/\".\n var index = parsed.path.lastIndexOf('/');\n if (index >= 0) {\n parsed.path = parsed.path.substring(0, index + 1);\n }\n }\n sourceURL = join(urlGenerate(parsed), sourceURL);\n }\n\n return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var sourceRelative = sourceFile;\n if (sourceRoot !== null) {\n sourceRelative = util.relative(sourceRoot, sourceFile);\n }\n\n if (!generator._sources.has(sourceRelative)) {\n generator._sources.add(sourceRelative);\n }\n\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number is 1-based.\n * - column: Optional. the column number in the original source.\n * The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n needle.source = this._findSourceIndex(needle.source);\n if (needle.source < 0) {\n return [];\n }\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n if (sourceRoot) {\n sourceRoot = util.normalize(sourceRoot);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this._absoluteSources = this._sources.toArray().map(function (s) {\n return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n });\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this._sourceMapURL = aSourceMapURL;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source. Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n if (this._sources.has(relativeSource)) {\n return this._sources.indexOf(relativeSource);\n }\n\n // Maybe aSource is an absolute URL as returned by |sources|. In\n // this case we can't simply undo the transform.\n var i;\n for (i = 0; i < this._absoluteSources.length; ++i) {\n if (this._absoluteSources[i] == aSource) {\n return i;\n }\n }\n\n return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @param String aSourceMapURL\n * The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n smc._sourceMapURL = aSourceMapURL;\n smc._absoluteSources = smc._sources.toArray().map(function (s) {\n return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n });\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._absoluteSources.slice();\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n var index = this._findSourceIndex(aSource);\n if (index >= 0) {\n return this.sourcesContent[index];\n }\n\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + relativeSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n source = this._findSourceIndex(source);\n if (source < 0) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based. \n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = null;\n if (mapping.name) {\n name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n }\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex] || '';\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex] || '';\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n","/* global define, require */\n'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nvar SourceNode = undefined;\n\ntry {\n /* istanbul ignore next */\n if (typeof define !== 'function' || !define.amd) {\n // We don't support this in AMD environments. For these environments, we assume that\n // they are running on the browser and thus have no need for the source-map library.\n var SourceMap = require('source-map');\n SourceNode = SourceMap.SourceNode;\n }\n} catch (err) {}\n/* NOP */\n\n/* istanbul ignore if: tested but not covered in istanbul due to dist build */\nif (!SourceNode) {\n SourceNode = function (line, column, srcFile, chunks) {\n this.src = '';\n if (chunks) {\n this.add(chunks);\n }\n };\n /* istanbul ignore next */\n SourceNode.prototype = {\n add: function add(chunks) {\n if (_utils.isArray(chunks)) {\n chunks = chunks.join('');\n }\n this.src += chunks;\n },\n prepend: function prepend(chunks) {\n if (_utils.isArray(chunks)) {\n chunks = chunks.join('');\n }\n this.src = chunks + this.src;\n },\n toStringWithSourceMap: function toStringWithSourceMap() {\n return { code: this.toString() };\n },\n toString: function toString() {\n return this.src;\n }\n };\n}\n\nfunction castChunk(chunk, codeGen, loc) {\n if (_utils.isArray(chunk)) {\n var ret = [];\n\n for (var i = 0, len = chunk.length; i < len; i++) {\n ret.push(codeGen.wrap(chunk[i], loc));\n }\n return ret;\n } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {\n // Handle primitives that the SourceNode will throw up on\n return chunk + '';\n }\n return chunk;\n}\n\nfunction CodeGen(srcFile) {\n this.srcFile = srcFile;\n this.source = [];\n}\n\nCodeGen.prototype = {\n isEmpty: function isEmpty() {\n return !this.source.length;\n },\n prepend: function prepend(source, loc) {\n this.source.unshift(this.wrap(source, loc));\n },\n push: function push(source, loc) {\n this.source.push(this.wrap(source, loc));\n },\n\n merge: function merge() {\n var source = this.empty();\n this.each(function (line) {\n source.add([' ', line, '\\n']);\n });\n return source;\n },\n\n each: function each(iter) {\n for (var i = 0, len = this.source.length; i < len; i++) {\n iter(this.source[i]);\n }\n },\n\n empty: function empty() {\n var loc = this.currentLocation || { start: {} };\n return new SourceNode(loc.start.line, loc.start.column, this.srcFile);\n },\n wrap: function wrap(chunk) {\n var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];\n\n if (chunk instanceof SourceNode) {\n return chunk;\n }\n\n chunk = castChunk(chunk, this, loc);\n\n return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);\n },\n\n functionCall: function functionCall(fn, type, params) {\n params = this.generateList(params);\n return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);\n },\n\n quotedString: function quotedString(str) {\n return '\"' + (str + '').replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\u2028/g, '\\\\u2028') // Per Ecma-262 7.3 + 7.8.4\n .replace(/\\u2029/g, '\\\\u2029') + '\"';\n },\n\n objectLiteral: function objectLiteral(obj) {\n // istanbul ignore next\n\n var _this = this;\n\n var pairs = [];\n\n Object.keys(obj).forEach(function (key) {\n var value = castChunk(obj[key], _this);\n if (value !== 'undefined') {\n pairs.push([_this.quotedString(key), ':', value]);\n }\n });\n\n var ret = this.generateList(pairs);\n ret.prepend('{');\n ret.add('}');\n return ret;\n },\n\n generateList: function generateList(entries) {\n var ret = this.empty();\n\n for (var i = 0, len = entries.length; i < len; i++) {\n if (i) {\n ret.add(',');\n }\n\n ret.add(castChunk(entries[i], this));\n }\n\n return ret;\n },\n\n generateArray: function generateArray(entries) {\n var ret = this.generateList(entries);\n ret.prepend('[');\n ret.add(']');\n\n return ret;\n }\n};\n\nexports['default'] = CodeGen;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUN3QixVQUFVOztBQUVsQyxJQUFJLFVBQVUsWUFBQSxDQUFDOztBQUVmLElBQUk7O0FBRUYsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFOzs7QUFHL0MsUUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLGNBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0dBQ25DO0NBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUViOzs7O0FBQUEsQUFHRCxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsWUFBVSxHQUFHLFVBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ25ELFFBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBSSxNQUFNLEVBQUU7QUFDVixVQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xCO0dBQ0YsQ0FBQzs7QUFFRixZQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3JCLE9BQUcsRUFBRSxhQUFTLE1BQU0sRUFBRTtBQUNwQixVQUFJLGVBQVEsTUFBTSxDQUFDLEVBQUU7QUFDbkIsY0FBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDMUI7QUFDRCxVQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNwQjtBQUNELFdBQU8sRUFBRSxpQkFBUyxNQUFNLEVBQUU7QUFDeEIsVUFBSSxlQUFRLE1BQU0sQ0FBQyxFQUFFO0FBQ25CLGNBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQzFCO0FBQ0QsVUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztLQUM5QjtBQUNELHlCQUFxQixFQUFFLGlDQUFXO0FBQ2hDLGFBQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7S0FDbEM7QUFDRCxZQUFRLEVBQUUsb0JBQVc7QUFDbkIsYUFBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0tBQ2pCO0dBQ0YsQ0FBQztDQUNIOztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO0FBQ3RDLE1BQUksZUFBUSxLQUFLLENBQUMsRUFBRTtBQUNsQixRQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7O0FBRWIsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxTQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDdkM7QUFDRCxXQUFPLEdBQUcsQ0FBQztHQUNaLE1BQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFOztBQUVsRSxXQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7R0FDbkI7QUFDRCxTQUFPLEtBQUssQ0FBQztDQUNkOztBQUVELFNBQVMsT0FBTyxDQUFDLE9BQU8sRUFBRTtBQUN4QixNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN2QixNQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztDQUNsQjs7QUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLFNBQU8sRUFBQSxtQkFBRztBQUNSLFdBQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztHQUM1QjtBQUNELFNBQU8sRUFBRSxpQkFBUyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQzdCLFFBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDN0M7QUFDRCxNQUFJLEVBQUUsY0FBUyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQzFCLFFBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDMUM7O0FBRUQsT0FBSyxFQUFFLGlCQUFXO0FBQ2hCLFFBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMxQixRQUFJLENBQUMsSUFBSSxDQUFDLFVBQVMsSUFBSSxFQUFFO0FBQ3ZCLFlBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDaEMsQ0FBQyxDQUFDO0FBQ0gsV0FBTyxNQUFNLENBQUM7R0FDZjs7QUFFRCxNQUFJLEVBQUUsY0FBUyxJQUFJLEVBQUU7QUFDbkIsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEQsVUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0QjtHQUNGOztBQUVELE9BQUssRUFBRSxpQkFBVztBQUNoQixRQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2hELFdBQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0dBQ3ZFO0FBQ0QsTUFBSSxFQUFFLGNBQVMsS0FBSyxFQUErQztRQUE3QyxHQUFHLHlEQUFHLElBQUksQ0FBQyxlQUFlLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFOztBQUMvRCxRQUFJLEtBQUssWUFBWSxVQUFVLEVBQUU7QUFDL0IsYUFBTyxLQUFLLENBQUM7S0FDZDs7QUFFRCxTQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7O0FBRXBDLFdBQU8sSUFBSSxVQUFVLENBQ25CLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUNkLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUNoQixJQUFJLENBQUMsT0FBTyxFQUNaLEtBQUssQ0FDTixDQUFDO0dBQ0g7O0FBRUQsY0FBWSxFQUFFLHNCQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3ZDLFVBQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25DLFdBQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQ3BFOztBQUVELGNBQVksRUFBRSxzQkFBUyxHQUFHLEVBQUU7QUFDMUIsV0FDRSxHQUFHLEdBQ0gsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFBLENBQ04sT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FDcEIsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FDckIsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FDckIsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7S0FDN0IsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FDaEMsR0FBRyxDQUNIO0dBQ0g7O0FBRUQsZUFBYSxFQUFFLHVCQUFTLEdBQUcsRUFBRTs7Ozs7QUFDM0IsUUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDOztBQUVmLFVBQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRyxFQUFJO0FBQzlCLFVBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQU8sQ0FBQztBQUN0QyxVQUFJLEtBQUssS0FBSyxXQUFXLEVBQUU7QUFDekIsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQUssWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO09BQ2xEO0tBQ0YsQ0FBQyxDQUFDOztBQUVILFFBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsT0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixPQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsV0FBTyxHQUFHLENBQUM7R0FDWjs7QUFFRCxjQUFZLEVBQUUsc0JBQVMsT0FBTyxFQUFFO0FBQzlCLFFBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7QUFFdkIsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsRCxVQUFJLENBQUMsRUFBRTtBQUNMLFdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDZDs7QUFFRCxTQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUN0Qzs7QUFFRCxXQUFPLEdBQUcsQ0FBQztHQUNaOztBQUVELGVBQWEsRUFBRSx1QkFBUyxPQUFPLEVBQUU7QUFDL0IsUUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxPQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLE9BQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRWIsV0FBTyxHQUFHLENBQUM7R0FDWjtDQUNGLENBQUM7O3FCQUVhLE9BQU8iLCJmaWxlIjoiY29kZS1nZW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5sZXQgU291cmNlTm9kZTtcblxudHJ5IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicgfHwgIWRlZmluZS5hbWQpIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgaW4gQU1EIGVudmlyb25tZW50cy4gRm9yIHRoZXNlIGVudmlyb25tZW50cywgd2UgYXNzdW1lIHRoYXRcbiAgICAvLyB0aGV5IGFyZSBydW5uaW5nIG9uIHRoZSBicm93c2VyIGFuZCB0aHVzIGhhdmUgbm8gbmVlZCBmb3IgdGhlIHNvdXJjZS1tYXAgbGlicmFyeS5cbiAgICBsZXQgU291cmNlTWFwID0gcmVxdWlyZSgnc291cmNlLW1hcCcpO1xuICAgIFNvdXJjZU5vZGUgPSBTb3VyY2VNYXAuU291cmNlTm9kZTtcbiAgfVxufSBjYXRjaCAoZXJyKSB7XG4gIC8qIE5PUCAqL1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWY6IHRlc3RlZCBidXQgbm90IGNvdmVyZWQgaW4gaXN0YW5idWwgZHVlIHRvIGRpc3QgYnVpbGQgICovXG5pZiAoIVNvdXJjZU5vZGUpIHtcbiAgU291cmNlTm9kZSA9IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbiwgc3JjRmlsZSwgY2h1bmtzKSB7XG4gICAgdGhpcy5zcmMgPSAnJztcbiAgICBpZiAoY2h1bmtzKSB7XG4gICAgICB0aGlzLmFkZChjaHVua3MpO1xuICAgIH1cbiAgfTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgYWRkOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICAgIGlmIChpc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgKz0gY2h1bmtzO1xuICAgIH0sXG4gICAgcHJlcGVuZDogZnVuY3Rpb24oY2h1bmtzKSB7XG4gICAgICBpZiAoaXNBcnJheShjaHVua3MpKSB7XG4gICAgICAgIGNodW5rcyA9IGNodW5rcy5qb2luKCcnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3JjID0gY2h1bmtzICsgdGhpcy5zcmM7XG4gICAgfSxcbiAgICB0b1N0cmluZ1dpdGhTb3VyY2VNYXA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgY29kZTogdGhpcy50b1N0cmluZygpIH07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjYXN0Q2h1bmsoY2h1bmssIGNvZGVHZW4sIGxvYykge1xuICBpZiAoaXNBcnJheShjaHVuaykpIHtcbiAgICBsZXQgcmV0ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2h1bmsubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHJldC5wdXNoKGNvZGVHZW4ud3JhcChjaHVua1tpXSwgbG9jKSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNodW5rID09PSAnbnVtYmVyJykge1xuICAgIC8vIEhhbmRsZSBwcmltaXRpdmVzIHRoYXQgdGhlIFNvdXJjZU5vZGUgd2lsbCB0aHJvdyB1cCBvblxuICAgIHJldHVybiBjaHVuayArICcnO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cblxuZnVuY3Rpb24gQ29kZUdlbihzcmNGaWxlKSB7XG4gIHRoaXMuc3JjRmlsZSA9IHNyY0ZpbGU7XG4gIHRoaXMuc291cmNlID0gW107XG59XG5cbkNvZGVHZW4ucHJvdG90eXBlID0ge1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiAhdGhpcy5zb3VyY2UubGVuZ3RoO1xuICB9LFxuICBwcmVwZW5kOiBmdW5jdGlvbihzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnVuc2hpZnQodGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG4gIHB1c2g6IGZ1bmN0aW9uKHNvdXJjZSwgbG9jKSB7XG4gICAgdGhpcy5zb3VyY2UucHVzaCh0aGlzLndyYXAoc291cmNlLCBsb2MpKTtcbiAgfSxcblxuICBtZXJnZTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IHNvdXJjZSA9IHRoaXMuZW1wdHkoKTtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgc291cmNlLmFkZChbJyAgJywgbGluZSwgJ1xcbiddKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9LFxuXG4gIGVhY2g6IGZ1bmN0aW9uKGl0ZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5zb3VyY2UubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGl0ZXIodGhpcy5zb3VyY2VbaV0pO1xuICAgIH1cbiAgfSxcblxuICBlbXB0eTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGxvYyA9IHRoaXMuY3VycmVudExvY2F0aW9uIHx8IHsgc3RhcnQ6IHt9IH07XG4gICAgcmV0dXJuIG5ldyBTb3VyY2VOb2RlKGxvYy5zdGFydC5saW5lLCBsb2Muc3RhcnQuY29sdW1uLCB0aGlzLnNyY0ZpbGUpO1xuICB9LFxuICB3cmFwOiBmdW5jdGlvbihjaHVuaywgbG9jID0gdGhpcy5jdXJyZW50TG9jYXRpb24gfHwgeyBzdGFydDoge30gfSkge1xuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShcbiAgICAgIGxvYy5zdGFydC5saW5lLFxuICAgICAgbG9jLnN0YXJ0LmNvbHVtbixcbiAgICAgIHRoaXMuc3JjRmlsZSxcbiAgICAgIGNodW5rXG4gICAgKTtcbiAgfSxcblxuICBmdW5jdGlvbkNhbGw6IGZ1bmN0aW9uKGZuLCB0eXBlLCBwYXJhbXMpIHtcbiAgICBwYXJhbXMgPSB0aGlzLmdlbmVyYXRlTGlzdChwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLndyYXAoW2ZuLCB0eXBlID8gJy4nICsgdHlwZSArICcoJyA6ICcoJywgcGFyYW1zLCAnKSddKTtcbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiAoXG4gICAgICAnXCInICtcbiAgICAgIChzdHIgKyAnJylcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJ1xcXFxyJylcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpIC8vIFBlciBFY21hLTI2MiA3LjMgKyA3LjguNFxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5JykgK1xuICAgICAgJ1wiJ1xuICAgICk7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGNhc3RDaHVuayhvYmpba2V5XSwgdGhpcyk7XG4gICAgICBpZiAodmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBhaXJzLnB1c2goW3RoaXMucXVvdGVkU3RyaW5nKGtleSksICc6JywgdmFsdWVdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7XG4gICAgcmV0LnByZXBlbmQoJ3snKTtcbiAgICByZXQuYWRkKCd9Jyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBnZW5lcmF0ZUxpc3Q6IGZ1bmN0aW9uKGVudHJpZXMpIHtcbiAgICBsZXQgcmV0ID0gdGhpcy5lbXB0eSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChpKSB7XG4gICAgICAgIHJldC5hZGQoJywnKTtcbiAgICAgIH1cblxuICAgICAgcmV0LmFkZChjYXN0Q2h1bmsoZW50cmllc1tpXSwgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgZ2VuZXJhdGVBcnJheTogZnVuY3Rpb24oZW50cmllcykge1xuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChlbnRyaWVzKTtcbiAgICByZXQucHJlcGVuZCgnWycpO1xuICAgIHJldC5hZGQoJ10nKTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvZGVHZW47XG4iXX0=\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _base = require('../base');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _utils = require('../utils');\n\nvar _codeGen = require('./code-gen');\n\nvar _codeGen2 = _interopRequireDefault(_codeGen);\n\nfunction Literal(value) {\n this.value = value;\n}\n\nfunction JavaScriptCompiler() {}\n\nJavaScriptCompiler.prototype = {\n // PUBLIC API: You can override these methods in a subclass to provide\n // alternative compiled forms for name lookup and buffering semantics\n nameLookup: function nameLookup(parent, name /*, type */) {\n return this.internalNameLookup(parent, name);\n },\n depthedLookup: function depthedLookup(name) {\n return [this.aliasable('container.lookup'), '(depths, ', JSON.stringify(name), ')'];\n },\n\n compilerInfo: function compilerInfo() {\n var revision = _base.COMPILER_REVISION,\n versions = _base.REVISION_CHANGES[revision];\n return [revision, versions];\n },\n\n appendToBuffer: function appendToBuffer(source, location, explicit) {\n // Force a source as this simplifies the merge logic.\n if (!_utils.isArray(source)) {\n source = [source];\n }\n source = this.source.wrap(source, location);\n\n if (this.environment.isSimple) {\n return ['return ', source, ';'];\n } else if (explicit) {\n // This is a case where the buffer operation occurs as a child of another\n // construct, generally braces. We have to explicitly output these buffer\n // operations to ensure that the emitted code goes in the correct location.\n return ['buffer += ', source, ';'];\n } else {\n source.appendToBuffer = true;\n return source;\n }\n },\n\n initializeBuffer: function initializeBuffer() {\n return this.quotedString('');\n },\n // END PUBLIC API\n internalNameLookup: function internalNameLookup(parent, name) {\n this.lookupPropertyFunctionIsUsed = true;\n return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];\n },\n\n lookupPropertyFunctionIsUsed: false,\n\n compile: function compile(environment, options, context, asObject) {\n this.environment = environment;\n this.options = options;\n this.stringParams = this.options.stringParams;\n this.trackIds = this.options.trackIds;\n this.precompile = !asObject;\n\n this.name = this.environment.name;\n this.isChild = !!context;\n this.context = context || {\n decorators: [],\n programs: [],\n environments: []\n };\n\n this.preamble();\n\n this.stackSlot = 0;\n this.stackVars = [];\n this.aliases = {};\n this.registers = { list: [] };\n this.hashes = [];\n this.compileStack = [];\n this.inlineStack = [];\n this.blockParams = [];\n\n this.compileChildren(environment, options);\n\n this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat;\n this.useBlockParams = this.useBlockParams || environment.useBlockParams;\n\n var opcodes = environment.opcodes,\n opcode = undefined,\n firstLoc = undefined,\n i = undefined,\n l = undefined;\n\n for (i = 0, l = opcodes.length; i < l; i++) {\n opcode = opcodes[i];\n\n this.source.currentLocation = opcode.loc;\n firstLoc = firstLoc || opcode.loc;\n this[opcode.opcode].apply(this, opcode.args);\n }\n\n // Flush any trailing content that might be pending.\n this.source.currentLocation = firstLoc;\n this.pushSource('');\n\n /* istanbul ignore next */\n if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {\n throw new _exception2['default']('Compile completed with content left on stack');\n }\n\n if (!this.decorators.isEmpty()) {\n this.useDecorators = true;\n\n this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\\n']);\n this.decorators.push('return fn;');\n\n if (asObject) {\n this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]);\n } else {\n this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\\n');\n this.decorators.push('}\\n');\n this.decorators = this.decorators.merge();\n }\n } else {\n this.decorators = undefined;\n }\n\n var fn = this.createFunctionContext(asObject);\n if (!this.isChild) {\n var ret = {\n compiler: this.compilerInfo(),\n main: fn\n };\n\n if (this.decorators) {\n ret.main_d = this.decorators; // eslint-disable-line camelcase\n ret.useDecorators = true;\n }\n\n var _context = this.context;\n var programs = _context.programs;\n var decorators = _context.decorators;\n\n for (i = 0, l = programs.length; i < l; i++) {\n if (programs[i]) {\n ret[i] = programs[i];\n if (decorators[i]) {\n ret[i + '_d'] = decorators[i];\n ret.useDecorators = true;\n }\n }\n }\n\n if (this.environment.usePartial) {\n ret.usePartial = true;\n }\n if (this.options.data) {\n ret.useData = true;\n }\n if (this.useDepths) {\n ret.useDepths = true;\n }\n if (this.useBlockParams) {\n ret.useBlockParams = true;\n }\n if (this.options.compat) {\n ret.compat = true;\n }\n\n if (!asObject) {\n ret.compiler = JSON.stringify(ret.compiler);\n\n this.source.currentLocation = { start: { line: 1, column: 0 } };\n ret = this.objectLiteral(ret);\n\n if (options.srcName) {\n ret = ret.toStringWithSourceMap({ file: options.destName });\n ret.map = ret.map && ret.map.toString();\n } else {\n ret = ret.toString();\n }\n } else {\n ret.compilerOptions = this.options;\n }\n\n return ret;\n } else {\n return fn;\n }\n },\n\n preamble: function preamble() {\n // track the last context pushed into place to allow skipping the\n // getContext opcode when it would be a noop\n this.lastContext = 0;\n this.source = new _codeGen2['default'](this.options.srcName);\n this.decorators = new _codeGen2['default'](this.options.srcName);\n },\n\n createFunctionContext: function createFunctionContext(asObject) {\n // istanbul ignore next\n\n var _this = this;\n\n var varDeclarations = '';\n\n var locals = this.stackVars.concat(this.registers.list);\n if (locals.length > 0) {\n varDeclarations += ', ' + locals.join(', ');\n }\n\n // Generate minimizer alias mappings\n //\n // When using true SourceNodes, this will update all references to the given alias\n // as the source nodes are reused in situ. For the non-source node compilation mode,\n // aliases will not be used, but this case is already being run on the client and\n // we aren't concern about minimizing the template size.\n var aliasCount = 0;\n Object.keys(this.aliases).forEach(function (alias) {\n var node = _this.aliases[alias];\n if (node.children && node.referenceCount > 1) {\n varDeclarations += ', alias' + ++aliasCount + '=' + alias;\n node.children[0] = 'alias' + aliasCount;\n }\n });\n\n if (this.lookupPropertyFunctionIsUsed) {\n varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();\n }\n\n var params = ['container', 'depth0', 'helpers', 'partials', 'data'];\n\n if (this.useBlockParams || this.useDepths) {\n params.push('blockParams');\n }\n if (this.useDepths) {\n params.push('depths');\n }\n\n // Perform a second pass over the output to merge content when possible\n var source = this.mergeSource(varDeclarations);\n\n if (asObject) {\n params.push(source);\n\n return Function.apply(this, params);\n } else {\n return this.source.wrap(['function(', params.join(','), ') {\\n ', source, '}']);\n }\n },\n mergeSource: function mergeSource(varDeclarations) {\n var isSimple = this.environment.isSimple,\n appendOnly = !this.forceBuffer,\n appendFirst = undefined,\n sourceSeen = undefined,\n bufferStart = undefined,\n bufferEnd = undefined;\n this.source.each(function (line) {\n if (line.appendToBuffer) {\n if (bufferStart) {\n line.prepend(' + ');\n } else {\n bufferStart = line;\n }\n bufferEnd = line;\n } else {\n if (bufferStart) {\n if (!sourceSeen) {\n appendFirst = true;\n } else {\n bufferStart.prepend('buffer += ');\n }\n bufferEnd.add(';');\n bufferStart = bufferEnd = undefined;\n }\n\n sourceSeen = true;\n if (!isSimple) {\n appendOnly = false;\n }\n }\n });\n\n if (appendOnly) {\n if (bufferStart) {\n bufferStart.prepend('return ');\n bufferEnd.add(';');\n } else if (!sourceSeen) {\n this.source.push('return \"\";');\n }\n } else {\n varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());\n\n if (bufferStart) {\n bufferStart.prepend('return buffer + ');\n bufferEnd.add(';');\n } else {\n this.source.push('return buffer;');\n }\n }\n\n if (varDeclarations) {\n this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\\n'));\n }\n\n return this.source.merge();\n },\n\n lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() {\n return '\\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\\n return parent[propertyName];\\n }\\n return undefined\\n }\\n '.trim();\n },\n\n // [blockValue]\n //\n // On stack, before: hash, inverse, program, value\n // On stack, after: return value of blockHelperMissing\n //\n // The purpose of this opcode is to take a block of the form\n // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and\n // replace it on the stack with the result of properly\n // invoking blockHelperMissing.\n blockValue: function blockValue(name) {\n var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n params = [this.contextName(0)];\n this.setupHelperArgs(name, 0, params);\n\n var blockName = this.popStack();\n params.splice(1, 0, blockName);\n\n this.push(this.source.functionCall(blockHelperMissing, 'call', params));\n },\n\n // [ambiguousBlockValue]\n //\n // On stack, before: hash, inverse, program, value\n // Compiler value, before: lastHelper=value of last found helper, if any\n // On stack, after, if no lastHelper: same as [blockValue]\n // On stack, after, if lastHelper: value\n ambiguousBlockValue: function ambiguousBlockValue() {\n // We're being a bit cheeky and reusing the options value from the prior exec\n var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),\n params = [this.contextName(0)];\n this.setupHelperArgs('', 0, params, true);\n\n this.flushInline();\n\n var current = this.topStack();\n params.splice(1, 0, current);\n\n this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']);\n },\n\n // [appendContent]\n //\n // On stack, before: ...\n // On stack, after: ...\n //\n // Appends the string value of `content` to the current buffer\n appendContent: function appendContent(content) {\n if (this.pendingContent) {\n content = this.pendingContent + content;\n } else {\n this.pendingLocation = this.source.currentLocation;\n }\n\n this.pendingContent = content;\n },\n\n // [append]\n //\n // On stack, before: value, ...\n // On stack, after: ...\n //\n // Coerces `value` to a String and appends it to the current buffer.\n //\n // If `value` is truthy, or 0, it is coerced into a string and appended\n // Otherwise, the empty string is appended\n append: function append() {\n if (this.isInline()) {\n this.replaceStack(function (current) {\n return [' != null ? ', current, ' : \"\"'];\n });\n\n this.pushSource(this.appendToBuffer(this.popStack()));\n } else {\n var local = this.popStack();\n this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);\n if (this.environment.isSimple) {\n this.pushSource(['else { ', this.appendToBuffer(\"''\", undefined, true), ' }']);\n }\n }\n },\n\n // [appendEscaped]\n //\n // On stack, before: value, ...\n // On stack, after: ...\n //\n // Escape `value` and append it to the buffer\n appendEscaped: function appendEscaped() {\n this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')']));\n },\n\n // [getContext]\n //\n // On stack, before: ...\n // On stack, after: ...\n // Compiler value, after: lastContext=depth\n //\n // Set the value of the `lastContext` compiler value to the depth\n getContext: function getContext(depth) {\n this.lastContext = depth;\n },\n\n // [pushContext]\n //\n // On stack, before: ...\n // On stack, after: currentContext, ...\n //\n // Pushes the value of the current context onto the stack.\n pushContext: function pushContext() {\n this.pushStackLiteral(this.contextName(this.lastContext));\n },\n\n // [lookupOnContext]\n //\n // On stack, before: ...\n // On stack, after: currentContext[name], ...\n //\n // Looks up the value of `name` on the current context and pushes\n // it onto the stack.\n lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) {\n var i = 0;\n\n if (!scoped && this.options.compat && !this.lastContext) {\n // The depthed query is expected to handle the undefined logic for the root level that\n // is implemented below, so we evaluate that directly in compat mode\n this.push(this.depthedLookup(parts[i++]));\n } else {\n this.pushContext();\n }\n\n this.resolvePath('context', parts, i, falsy, strict);\n },\n\n // [lookupBlockParam]\n //\n // On stack, before: ...\n // On stack, after: blockParam[name], ...\n //\n // Looks up the value of `parts` on the given block param and pushes\n // it onto the stack.\n lookupBlockParam: function lookupBlockParam(blockParamId, parts) {\n this.useBlockParams = true;\n\n this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);\n this.resolvePath('context', parts, 1);\n },\n\n // [lookupData]\n //\n // On stack, before: ...\n // On stack, after: data, ...\n //\n // Push the data lookup operator\n lookupData: function lookupData(depth, parts, strict) {\n if (!depth) {\n this.pushStackLiteral('data');\n } else {\n this.pushStackLiteral('container.data(data, ' + depth + ')');\n }\n\n this.resolvePath('data', parts, 0, true, strict);\n },\n\n resolvePath: function resolvePath(type, parts, i, falsy, strict) {\n // istanbul ignore next\n\n var _this2 = this;\n\n if (this.options.strict || this.options.assumeObjects) {\n this.push(strictLookup(this.options.strict && strict, this, parts, i, type));\n return;\n }\n\n var len = parts.length;\n for (; i < len; i++) {\n /* eslint-disable no-loop-func */\n this.replaceStack(function (current) {\n var lookup = _this2.nameLookup(current, parts[i], type);\n // We want to ensure that zero and false are handled properly if the context (falsy flag)\n // needs to have the special handling for these values.\n if (!falsy) {\n return [' != null ? ', lookup, ' : ', current];\n } else {\n // Otherwise we can use generic falsy handling\n return [' && ', lookup];\n }\n });\n /* eslint-enable no-loop-func */\n }\n },\n\n // [resolvePossibleLambda]\n //\n // On stack, before: value, ...\n // On stack, after: resolved value, ...\n //\n // If the `value` is a lambda, replace it on the stack by\n // the return value of the lambda\n resolvePossibleLambda: function resolvePossibleLambda() {\n this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);\n },\n\n // [pushStringParam]\n //\n // On stack, before: ...\n // On stack, after: string, currentContext, ...\n //\n // This opcode is designed for use in string mode, which\n // provides the string value of a parameter along with its\n // depth rather than resolving it immediately.\n pushStringParam: function pushStringParam(string, type) {\n this.pushContext();\n this.pushString(type);\n\n // If it's a subexpression, the string result\n // will be pushed after this opcode.\n if (type !== 'SubExpression') {\n if (typeof string === 'string') {\n this.pushString(string);\n } else {\n this.pushStackLiteral(string);\n }\n }\n },\n\n emptyHash: function emptyHash(omitEmpty) {\n if (this.trackIds) {\n this.push('{}'); // hashIds\n }\n if (this.stringParams) {\n this.push('{}'); // hashContexts\n this.push('{}'); // hashTypes\n }\n this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');\n },\n pushHash: function pushHash() {\n if (this.hash) {\n this.hashes.push(this.hash);\n }\n this.hash = { values: {}, types: [], contexts: [], ids: [] };\n },\n popHash: function popHash() {\n var hash = this.hash;\n this.hash = this.hashes.pop();\n\n if (this.trackIds) {\n this.push(this.objectLiteral(hash.ids));\n }\n if (this.stringParams) {\n this.push(this.objectLiteral(hash.contexts));\n this.push(this.objectLiteral(hash.types));\n }\n\n this.push(this.objectLiteral(hash.values));\n },\n\n // [pushString]\n //\n // On stack, before: ...\n // On stack, after: quotedString(string), ...\n //\n // Push a quoted version of `string` onto the stack\n pushString: function pushString(string) {\n this.pushStackLiteral(this.quotedString(string));\n },\n\n // [pushLiteral]\n //\n // On stack, before: ...\n // On stack, after: value, ...\n //\n // Pushes a value onto the stack. This operation prevents\n // the compiler from creating a temporary variable to hold\n // it.\n pushLiteral: function pushLiteral(value) {\n this.pushStackLiteral(value);\n },\n\n // [pushProgram]\n //\n // On stack, before: ...\n // On stack, after: program(guid), ...\n //\n // Push a program expression onto the stack. This takes\n // a compile-time guid and converts it into a runtime-accessible\n // expression.\n pushProgram: function pushProgram(guid) {\n if (guid != null) {\n this.pushStackLiteral(this.programExpression(guid));\n } else {\n this.pushStackLiteral(null);\n }\n },\n\n // [registerDecorator]\n //\n // On stack, before: hash, program, params..., ...\n // On stack, after: ...\n //\n // Pops off the decorator's parameters, invokes the decorator,\n // and inserts the decorator into the decorators list.\n registerDecorator: function registerDecorator(paramSize, name) {\n var foundDecorator = this.nameLookup('decorators', name, 'decorator'),\n options = this.setupHelperArgs(name, paramSize);\n\n this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']);\n },\n\n // [invokeHelper]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of helper invocation\n //\n // Pops off the helper's parameters, invokes the helper,\n // and pushes the helper's return value onto the stack.\n //\n // If the helper is not found, `helperMissing` is called.\n invokeHelper: function invokeHelper(paramSize, name, isSimple) {\n var nonHelper = this.popStack(),\n helper = this.setupHelper(paramSize, name);\n\n var possibleFunctionCalls = [];\n\n if (isSimple) {\n // direct call to helper\n possibleFunctionCalls.push(helper.name);\n }\n // call a function from the input object\n possibleFunctionCalls.push(nonHelper);\n if (!this.options.strict) {\n possibleFunctionCalls.push(this.aliasable('container.hooks.helperMissing'));\n }\n\n var functionLookupCode = ['(', this.itemsSeparatedBy(possibleFunctionCalls, '||'), ')'];\n var functionCall = this.source.functionCall(functionLookupCode, 'call', helper.callParams);\n this.push(functionCall);\n },\n\n itemsSeparatedBy: function itemsSeparatedBy(items, separator) {\n var result = [];\n result.push(items[0]);\n for (var i = 1; i < items.length; i++) {\n result.push(separator, items[i]);\n }\n return result;\n },\n // [invokeKnownHelper]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of helper invocation\n //\n // This operation is used when the helper is known to exist,\n // so a `helperMissing` fallback is not required.\n invokeKnownHelper: function invokeKnownHelper(paramSize, name) {\n var helper = this.setupHelper(paramSize, name);\n this.push(this.source.functionCall(helper.name, 'call', helper.callParams));\n },\n\n // [invokeAmbiguous]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of disambiguation\n //\n // This operation is used when an expression like `{{foo}}`\n // is provided, but we don't know at compile-time whether it\n // is a helper or a path.\n //\n // This operation emits more code than the other options,\n // and can be avoided by passing the `knownHelpers` and\n // `knownHelpersOnly` flags at compile-time.\n invokeAmbiguous: function invokeAmbiguous(name, helperCall) {\n this.useRegister('helper');\n\n var nonHelper = this.popStack();\n\n this.emptyHash();\n var helper = this.setupHelper(0, name, helperCall);\n\n var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');\n\n var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];\n if (!this.options.strict) {\n lookup[0] = '(helper = ';\n lookup.push(' != null ? helper : ', this.aliasable('container.hooks.helperMissing'));\n }\n\n this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('\"function\"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']);\n },\n\n // [invokePartial]\n //\n // On stack, before: context, ...\n // On stack after: result of partial invocation\n //\n // This operation pops off a context, invokes a partial with that context,\n // and pushes the result of the invocation back.\n invokePartial: function invokePartial(isDynamic, name, indent) {\n var params = [],\n options = this.setupParams(name, 1, params);\n\n if (isDynamic) {\n name = this.popStack();\n delete options.name;\n }\n\n if (indent) {\n options.indent = JSON.stringify(indent);\n }\n options.helpers = 'helpers';\n options.partials = 'partials';\n options.decorators = 'container.decorators';\n\n if (!isDynamic) {\n params.unshift(this.nameLookup('partials', name, 'partial'));\n } else {\n params.unshift(name);\n }\n\n if (this.options.compat) {\n options.depths = 'depths';\n }\n options = this.objectLiteral(options);\n params.push(options);\n\n this.push(this.source.functionCall('container.invokePartial', '', params));\n },\n\n // [assignToHash]\n //\n // On stack, before: value, ..., hash, ...\n // On stack, after: ..., hash, ...\n //\n // Pops a value off the stack and assigns it to the current hash\n assignToHash: function assignToHash(key) {\n var value = this.popStack(),\n context = undefined,\n type = undefined,\n id = undefined;\n\n if (this.trackIds) {\n id = this.popStack();\n }\n if (this.stringParams) {\n type = this.popStack();\n context = this.popStack();\n }\n\n var hash = this.hash;\n if (context) {\n hash.contexts[key] = context;\n }\n if (type) {\n hash.types[key] = type;\n }\n if (id) {\n hash.ids[key] = id;\n }\n hash.values[key] = value;\n },\n\n pushId: function pushId(type, name, child) {\n if (type === 'BlockParam') {\n this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : ''));\n } else if (type === 'PathExpression') {\n this.pushString(name);\n } else if (type === 'SubExpression') {\n this.pushStackLiteral('true');\n } else {\n this.pushStackLiteral('null');\n }\n },\n\n // HELPERS\n\n compiler: JavaScriptCompiler,\n\n compileChildren: function compileChildren(environment, options) {\n var children = environment.children,\n child = undefined,\n compiler = undefined;\n\n for (var i = 0, l = children.length; i < l; i++) {\n child = children[i];\n compiler = new this.compiler(); // eslint-disable-line new-cap\n\n var existing = this.matchExistingProgram(child);\n\n if (existing == null) {\n this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children\n var index = this.context.programs.length;\n child.index = index;\n child.name = 'program' + index;\n this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);\n this.context.decorators[index] = compiler.decorators;\n this.context.environments[index] = child;\n\n this.useDepths = this.useDepths || compiler.useDepths;\n this.useBlockParams = this.useBlockParams || compiler.useBlockParams;\n child.useDepths = this.useDepths;\n child.useBlockParams = this.useBlockParams;\n } else {\n child.index = existing.index;\n child.name = 'program' + existing.index;\n\n this.useDepths = this.useDepths || existing.useDepths;\n this.useBlockParams = this.useBlockParams || existing.useBlockParams;\n }\n }\n },\n matchExistingProgram: function matchExistingProgram(child) {\n for (var i = 0, len = this.context.environments.length; i < len; i++) {\n var environment = this.context.environments[i];\n if (environment && environment.equals(child)) {\n return environment;\n }\n }\n },\n\n programExpression: function programExpression(guid) {\n var child = this.environment.children[guid],\n programParams = [child.index, 'data', child.blockParams];\n\n if (this.useBlockParams || this.useDepths) {\n programParams.push('blockParams');\n }\n if (this.useDepths) {\n programParams.push('depths');\n }\n\n return 'container.program(' + programParams.join(', ') + ')';\n },\n\n useRegister: function useRegister(name) {\n if (!this.registers[name]) {\n this.registers[name] = true;\n this.registers.list.push(name);\n }\n },\n\n push: function push(expr) {\n if (!(expr instanceof Literal)) {\n expr = this.source.wrap(expr);\n }\n\n this.inlineStack.push(expr);\n return expr;\n },\n\n pushStackLiteral: function pushStackLiteral(item) {\n this.push(new Literal(item));\n },\n\n pushSource: function pushSource(source) {\n if (this.pendingContent) {\n this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));\n this.pendingContent = undefined;\n }\n\n if (source) {\n this.source.push(source);\n }\n },\n\n replaceStack: function replaceStack(callback) {\n var prefix = ['('],\n stack = undefined,\n createdStack = undefined,\n usedLiteral = undefined;\n\n /* istanbul ignore next */\n if (!this.isInline()) {\n throw new _exception2['default']('replaceStack on non-inline');\n }\n\n // We want to merge the inline statement into the replacement statement via ','\n var top = this.popStack(true);\n\n if (top instanceof Literal) {\n // Literals do not need to be inlined\n stack = [top.value];\n prefix = ['(', stack];\n usedLiteral = true;\n } else {\n // Get or create the current stack name for use by the inline\n createdStack = true;\n var _name = this.incrStack();\n\n prefix = ['((', this.push(_name), ' = ', top, ')'];\n stack = this.topStack();\n }\n\n var item = callback.call(this, stack);\n\n if (!usedLiteral) {\n this.popStack();\n }\n if (createdStack) {\n this.stackSlot--;\n }\n this.push(prefix.concat(item, ')'));\n },\n\n incrStack: function incrStack() {\n this.stackSlot++;\n if (this.stackSlot > this.stackVars.length) {\n this.stackVars.push('stack' + this.stackSlot);\n }\n return this.topStackName();\n },\n topStackName: function topStackName() {\n return 'stack' + this.stackSlot;\n },\n flushInline: function flushInline() {\n var inlineStack = this.inlineStack;\n this.inlineStack = [];\n for (var i = 0, len = inlineStack.length; i < len; i++) {\n var entry = inlineStack[i];\n /* istanbul ignore if */\n if (entry instanceof Literal) {\n this.compileStack.push(entry);\n } else {\n var stack = this.incrStack();\n this.pushSource([stack, ' = ', entry, ';']);\n this.compileStack.push(stack);\n }\n }\n },\n isInline: function isInline() {\n return this.inlineStack.length;\n },\n\n popStack: function popStack(wrapped) {\n var inline = this.isInline(),\n item = (inline ? this.inlineStack : this.compileStack).pop();\n\n if (!wrapped && item instanceof Literal) {\n return item.value;\n } else {\n if (!inline) {\n /* istanbul ignore next */\n if (!this.stackSlot) {\n throw new _exception2['default']('Invalid stack pop');\n }\n this.stackSlot--;\n }\n return item;\n }\n },\n\n topStack: function topStack() {\n var stack = this.isInline() ? this.inlineStack : this.compileStack,\n item = stack[stack.length - 1];\n\n /* istanbul ignore if */\n if (item instanceof Literal) {\n return item.value;\n } else {\n return item;\n }\n },\n\n contextName: function contextName(context) {\n if (this.useDepths && context) {\n return 'depths[' + context + ']';\n } else {\n return 'depth' + context;\n }\n },\n\n quotedString: function quotedString(str) {\n return this.source.quotedString(str);\n },\n\n objectLiteral: function objectLiteral(obj) {\n return this.source.objectLiteral(obj);\n },\n\n aliasable: function aliasable(name) {\n var ret = this.aliases[name];\n if (ret) {\n ret.referenceCount++;\n return ret;\n }\n\n ret = this.aliases[name] = this.source.wrap(name);\n ret.aliasable = true;\n ret.referenceCount = 1;\n\n return ret;\n },\n\n setupHelper: function setupHelper(paramSize, name, blockHelper) {\n var params = [],\n paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);\n var foundHelper = this.nameLookup('helpers', name, 'helper'),\n callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})');\n\n return {\n params: params,\n paramsInit: paramsInit,\n name: foundHelper,\n callParams: [callContext].concat(params)\n };\n },\n\n setupParams: function setupParams(helper, paramSize, params) {\n var options = {},\n contexts = [],\n types = [],\n ids = [],\n objectArgs = !params,\n param = undefined;\n\n if (objectArgs) {\n params = [];\n }\n\n options.name = this.quotedString(helper);\n options.hash = this.popStack();\n\n if (this.trackIds) {\n options.hashIds = this.popStack();\n }\n if (this.stringParams) {\n options.hashTypes = this.popStack();\n options.hashContexts = this.popStack();\n }\n\n var inverse = this.popStack(),\n program = this.popStack();\n\n // Avoid setting fn and inverse if neither are set. This allows\n // helpers to do a check for `if (options.fn)`\n if (program || inverse) {\n options.fn = program || 'container.noop';\n options.inverse = inverse || 'container.noop';\n }\n\n // The parameters go on to the stack in order (making sure that they are evaluated in order)\n // so we need to pop them off the stack in reverse order\n var i = paramSize;\n while (i--) {\n param = this.popStack();\n params[i] = param;\n\n if (this.trackIds) {\n ids[i] = this.popStack();\n }\n if (this.stringParams) {\n types[i] = this.popStack();\n contexts[i] = this.popStack();\n }\n }\n\n if (objectArgs) {\n options.args = this.source.generateArray(params);\n }\n\n if (this.trackIds) {\n options.ids = this.source.generateArray(ids);\n }\n if (this.stringParams) {\n options.types = this.source.generateArray(types);\n options.contexts = this.source.generateArray(contexts);\n }\n\n if (this.options.data) {\n options.data = 'data';\n }\n if (this.useBlockParams) {\n options.blockParams = 'blockParams';\n }\n return options;\n },\n\n setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) {\n var options = this.setupParams(helper, paramSize, params);\n options.loc = JSON.stringify(this.source.currentLocation);\n options = this.objectLiteral(options);\n if (useRegister) {\n this.useRegister('options');\n params.push('options');\n return ['options=', options];\n } else if (params) {\n params.push(options);\n return '';\n } else {\n return options;\n }\n }\n};\n\n(function () {\n var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' ');\n\n var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};\n\n for (var i = 0, l = reservedWords.length; i < l; i++) {\n compilerWords[reservedWords[i]] = true;\n }\n})();\n\n/**\n * @deprecated May be removed in the next major version\n */\nJavaScriptCompiler.isValidJavaScriptVariableName = function (name) {\n return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);\n};\n\nfunction strictLookup(requireTerminal, compiler, parts, i, type) {\n var stack = compiler.popStack(),\n len = parts.length;\n if (requireTerminal) {\n len--;\n }\n\n for (; i < len; i++) {\n stack = compiler.nameLookup(stack, parts[i], type);\n }\n\n if (requireTerminal) {\n return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ', ', JSON.stringify(compiler.source.currentLocation), ' )'];\n } else {\n return stack;\n }\n}\n\nexports['default'] = JavaScriptCompiler;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztvQkFBb0QsU0FBUzs7eUJBQ3ZDLGNBQWM7Ozs7cUJBQ1osVUFBVTs7dUJBQ2QsWUFBWTs7OztBQUVoQyxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDdEIsTUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDcEI7O0FBRUQsU0FBUyxrQkFBa0IsR0FBRyxFQUFFOztBQUVoQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUc7OztBQUc3QixZQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFLElBQUksZUFBZTtBQUM5QyxXQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDOUM7QUFDRCxlQUFhLEVBQUUsdUJBQVMsSUFBSSxFQUFFO0FBQzVCLFdBQU8sQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQ2xDLFdBQVcsRUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNwQixHQUFHLENBQ0osQ0FBQztHQUNIOztBQUVELGNBQVksRUFBRSx3QkFBVztBQUN2QixRQUFNLFFBQVEsMEJBQW9CO1FBQ2hDLFFBQVEsR0FBRyx1QkFBaUIsUUFBUSxDQUFDLENBQUM7QUFDeEMsV0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztHQUM3Qjs7QUFFRCxnQkFBYyxFQUFFLHdCQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFOztBQUVuRCxRQUFJLENBQUMsZUFBUSxNQUFNLENBQUMsRUFBRTtBQUNwQixZQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNuQjtBQUNELFVBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FBRTVDLFFB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LEVBQUU7QUFDbkIsU0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztHQUNwRDs7QUFFRCxNQUFJLGVBQWUsRUFBRTtBQUNuQixXQUFPLENBQ0wsUUFBUSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUN0QyxHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMvQixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUMvQyxJQUFJLENBQ0wsQ0FBQztHQUNILE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O3FCQUVjLGtCQUFrQiIsImZpbGUiOiJqYXZhc2NyaXB0LWNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ09NUElMRVJfUkVWSVNJT04sIFJFVklTSU9OX0NIQU5HRVMgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgQ29kZUdlbiBmcm9tICcuL2NvZGUtZ2VuJztcblxuZnVuY3Rpb24gTGl0ZXJhbCh2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEphdmFTY3JpcHRDb21waWxlcigpIHt9XG5cbkphdmFTY3JpcHRDb21waWxlci5wcm90b3R5cGUgPSB7XG4gIC8vIFBVQkxJQyBBUEk6IFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgbWV0aG9kcyBpbiBhIHN1YmNsYXNzIHRvIHByb3ZpZGVcbiAgLy8gYWx0ZXJuYXRpdmUgY29tcGlsZWQgZm9ybXMgZm9yIG5hbWUgbG9va3VwIGFuZCBidWZmZXJpbmcgc2VtYW50aWNzXG4gIG5hbWVMb29rdXA6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSAvKiwgIHR5cGUgKi8pIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbE5hbWVMb29rdXAocGFyZW50LCBuYW1lKTtcbiAgfSxcbiAgZGVwdGhlZExvb2t1cDogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxvb2t1cCcpLFxuICAgICAgJyhkZXB0aHMsICcsXG4gICAgICBKU09OLnN0cmluZ2lmeShuYW1lKSxcbiAgICAgICcpJ1xuICAgIF07XG4gIH0sXG5cbiAgY29tcGlsZXJJbmZvOiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OLFxuICAgICAgdmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW3JldmlzaW9uXTtcbiAgICByZXR1cm4gW3JldmlzaW9uLCB2ZXJzaW9uc107XG4gIH0sXG5cbiAgYXBwZW5kVG9CdWZmZXI6IGZ1bmN0aW9uKHNvdXJjZSwgbG9jYXRpb24sIGV4cGxpY2l0KSB7XG4gICAgLy8gRm9yY2UgYSBzb3VyY2UgYXMgdGhpcyBzaW1wbGlmaWVzIHRoZSBtZXJnZSBsb2dpYy5cbiAgICBpZiAoIWlzQXJyYXkoc291cmNlKSkge1xuICAgICAgc291cmNlID0gW3NvdXJjZV07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuc291cmNlLndyYXAoc291cmNlLCBsb2NhdGlvbik7XG5cbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkge1xuICAgICAgcmV0dXJuIFsncmV0dXJuICcsIHNvdXJjZSwgJzsnXTtcbiAgICB9IGVsc2UgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAvLyBUaGlzIGlzIGEgY2FzZSB3aGVyZSB0aGUgYnVmZmVyIG9wZXJhdGlvbiBvY2N1cnMgYXMgYSBjaGlsZCBvZiBhbm90aGVyXG4gICAgICAvLyBjb25zdHJ1Y3QsIGdlbmVyYWxseSBicmFjZXMuIFdlIGhhdmUgdG8gZXhwbGljaXRseSBvdXRwdXQgdGhlc2UgYnVmZmVyXG4gICAgICAvLyBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGF0IHRoZSBlbWl0dGVkIGNvZGUgZ29lcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi5cbiAgICAgIHJldHVybiBbJ2J1ZmZlciArPSAnLCBzb3VyY2UsICc7J107XG4gICAgfSBlbHNlIHtcbiAgICAgIHNvdXJjZS5hcHBlbmRUb0J1ZmZlciA9IHRydWU7XG4gICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgfSxcblxuICBpbml0aWFsaXplQnVmZmVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdW90ZWRTdHJpbmcoJycpO1xuICB9LFxuICAvLyBFTkQgUFVCTElDIEFQSVxuICBpbnRlcm5hbE5hbWVMb29rdXA6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSkge1xuICAgIHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCA9IHRydWU7XG4gICAgcmV0dXJuIFsnbG9va3VwUHJvcGVydHkoJywgcGFyZW50LCAnLCcsIEpTT04uc3RyaW5naWZ5KG5hbWUpLCAnKSddO1xuICB9LFxuXG4gIGxvb2t1cFByb3BlcnR5RnVuY3Rpb25Jc1VzZWQ6IGZhbHNlLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zLCBjb250ZXh0LCBhc09iamVjdCkge1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3RyaW5nUGFyYW1zID0gdGhpcy5vcHRpb25zLnN0cmluZ1BhcmFtcztcbiAgICB0aGlzLnRyYWNrSWRzID0gdGhpcy5vcHRpb25zLnRyYWNrSWRzO1xuICAgIHRoaXMucHJlY29tcGlsZSA9ICFhc09iamVjdDtcblxuICAgIHRoaXMubmFtZSA9IHRoaXMuZW52aXJvbm1lbnQubmFtZTtcbiAgICB0aGlzLmlzQ2hpbGQgPSAhIWNvbnRleHQ7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB7XG4gICAgICBkZWNvcmF0b3JzOiBbXSxcbiAgICAgIHByb2dyYW1zOiBbXSxcbiAgICAgIGVudmlyb25tZW50czogW11cbiAgICB9O1xuXG4gICAgdGhpcy5wcmVhbWJsZSgpO1xuXG4gICAgdGhpcy5zdGFja1Nsb3QgPSAwO1xuICAgIHRoaXMuc3RhY2tWYXJzID0gW107XG4gICAgdGhpcy5hbGlhc2VzID0ge307XG4gICAgdGhpcy5yZWdpc3RlcnMgPSB7IGxpc3Q6IFtdIH07XG4gICAgdGhpcy5oYXNoZXMgPSBbXTtcbiAgICB0aGlzLmNvbXBpbGVTdGFjayA9IFtdO1xuICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gW107XG5cbiAgICB0aGlzLmNvbXBpbGVDaGlsZHJlbihlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLnVzZURlcHRocyA9XG4gICAgICB0aGlzLnVzZURlcHRocyB8fFxuICAgICAgZW52aXJvbm1lbnQudXNlRGVwdGhzIHx8XG4gICAgICBlbnZpcm9ubWVudC51c2VEZWNvcmF0b3JzIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGF0O1xuICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGVudmlyb25tZW50LnVzZUJsb2NrUGFyYW1zO1xuXG4gICAgbGV0IG9wY29kZXMgPSBlbnZpcm9ubWVudC5vcGNvZGVzLFxuICAgICAgb3Bjb2RlLFxuICAgICAgZmlyc3RMb2MsXG4gICAgICBpLFxuICAgICAgbDtcblxuICAgIGZvciAoaSA9IDAsIGwgPSBvcGNvZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgb3Bjb2RlID0gb3Bjb2Rlc1tpXTtcblxuICAgICAgdGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0gb3Bjb2RlLmxvYztcbiAgICAgIGZpcnN0TG9jID0gZmlyc3RMb2MgfHwgb3Bjb2RlLmxvYztcbiAgICAgIHRoaXNbb3Bjb2RlLm9wY29kZV0uYXBwbHkodGhpcywgb3Bjb2RlLmFyZ3MpO1xuICAgIH1cblxuICAgIC8vIEZsdXNoIGFueSB0cmFpbGluZyBjb250ZW50IHRoYXQgbWlnaHQgYmUgcGVuZGluZy5cbiAgICB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb24gPSBmaXJzdExvYztcbiAgICB0aGlzLnB1c2hTb3VyY2UoJycpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodGhpcy5zdGFja1Nsb3QgfHwgdGhpcy5pbmxpbmVTdGFjay5sZW5ndGggfHwgdGhpcy5jb21waWxlU3RhY2subGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb21waWxlIGNvbXBsZXRlZCB3aXRoIGNvbnRlbnQgbGVmdCBvbiBzdGFjaycpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kZWNvcmF0b3JzLmlzRW1wdHkoKSkge1xuICAgICAgdGhpcy51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoW1xuICAgICAgICAndmFyIGRlY29yYXRvcnMgPSBjb250YWluZXIuZGVjb3JhdG9ycywgJyxcbiAgICAgICAgdGhpcy5sb29rdXBQcm9wZXJ0eUZ1bmN0aW9uVmFyRGVjbGFyYXRpb24oKSxcbiAgICAgICAgJztcXG4nXG4gICAgICBdKTtcbiAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCdyZXR1cm4gZm47Jyk7XG5cbiAgICAgIGlmIChhc09iamVjdCkge1xuICAgICAgICB0aGlzLmRlY29yYXRvcnMgPSBGdW5jdGlvbi5hcHBseSh0aGlzLCBbXG4gICAgICAgICAgJ2ZuJyxcbiAgICAgICAgICAncHJvcHMnLFxuICAgICAgICAgICdjb250YWluZXInLFxuICAgICAgICAgICdkZXB0aDAnLFxuICAgICAgICAgICdkYXRhJyxcbiAgICAgICAgICAnYmxvY2tQYXJhbXMnLFxuICAgICAgICAgICdkZXB0aHMnLFxuICAgICAgICAgIHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpXG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoXG4gICAgICAgICAgJ2Z1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBkZXB0aDAsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcXG4nXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCd9XFxuJyk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycyA9IHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlY29yYXRvcnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbGV0IGZuID0gdGhpcy5jcmVhdGVGdW5jdGlvbkNvbnRleHQoYXNPYmplY3QpO1xuICAgIGlmICghdGhpcy5pc0NoaWxkKSB7XG4gICAgICBsZXQgcmV0ID0ge1xuICAgICAgICBjb21waWxlcjogdGhpcy5jb21waWxlckluZm8oKSxcbiAgICAgICAgbWFpbjogZm5cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmRlY29yYXRvcnMpIHtcbiAgICAgICAgcmV0Lm1haW5fZCA9IHRoaXMuZGVjb3JhdG9yczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgICAgcmV0LnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgeyBwcm9ncmFtcywgZGVjb3JhdG9ycyB9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgZm9yIChpID0gMCwgbCA9IHByb2dyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAocHJvZ3JhbXNbaV0pIHtcbiAgICAgICAgICByZXRbaV0gPSBwcm9ncmFtc1tpXTtcbiAgICAgICAgICBpZiAoZGVjb3JhdG9yc1tpXSkge1xuICAgICAgICAgICAgcmV0W2kgKyAnX2QnXSA9IGRlY29yYXRvcnNbaV07XG4gICAgICAgICAgICByZXQudXNlRGVjb3JhdG9ycyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnVzZVBhcnRpYWwpIHtcbiAgICAgICAgcmV0LnVzZVBhcnRpYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICAgIHJldC51c2VEYXRhID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgICByZXQudXNlRGVwdGhzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHJldC51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdCkge1xuICAgICAgICByZXQuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhc09iamVjdCkge1xuICAgICAgICByZXQuY29tcGlsZXIgPSBKU09OLnN0cmluZ2lmeShyZXQuY29tcGlsZXIpO1xuXG4gICAgICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IHsgc3RhcnQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0gfTtcbiAgICAgICAgcmV0ID0gdGhpcy5vYmplY3RMaXRlcmFsKHJldCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3JjTmFtZSkge1xuICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoeyBmaWxlOiBvcHRpb25zLmRlc3ROYW1lIH0pO1xuICAgICAgICAgIHJldC5tYXAgPSByZXQubWFwICYmIHJldC5tYXAudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSByZXQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LmNvbXBpbGVyT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH1cbiAgfSxcblxuICBwcmVhbWJsZTogZnVuY3Rpb24oKSB7XG4gICAgLy8gdHJhY2sgdGhlIGxhc3QgY29udGV4dCBwdXNoZWQgaW50byBwbGFjZSB0byBhbGxvdyBza2lwcGluZyB0aGVcbiAgICAvLyBnZXRDb250ZXh0IG9wY29kZSB3aGVuIGl0IHdvdWxkIGJlIGEgbm9vcFxuICAgIHRoaXMubGFzdENvbnRleHQgPSAwO1xuICAgIHRoaXMuc291cmNlID0gbmV3IENvZGVHZW4odGhpcy5vcHRpb25zLnNyY05hbWUpO1xuICAgIHRoaXMuZGVjb3JhdG9ycyA9IG5ldyBDb2RlR2VuKHRoaXMub3B0aW9ucy5zcmNOYW1lKTtcbiAgfSxcblxuICBjcmVhdGVGdW5jdGlvbkNvbnRleHQ6IGZ1bmN0aW9uKGFzT2JqZWN0KSB7XG4gICAgbGV0IHZhckRlY2xhcmF0aW9ucyA9ICcnO1xuXG4gICAgbGV0IGxvY2FscyA9IHRoaXMuc3RhY2tWYXJzLmNvbmNhdCh0aGlzLnJlZ2lzdGVycy5saXN0KTtcbiAgICBpZiAobG9jYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCAnICsgbG9jYWxzLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgbWluaW1pemVyIGFsaWFzIG1hcHBpbmdzXG4gICAgLy9cbiAgICAvLyBXaGVuIHVzaW5nIHRydWUgU291cmNlTm9kZXMsIHRoaXMgd2lsbCB1cGRhdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGdpdmVuIGFsaWFzXG4gICAgLy8gYXMgdGhlIHNvdXJjZSBub2RlcyBhcmUgcmV1c2VkIGluIHNpdHUuIEZvciB0aGUgbm9uLXNvdXJjZSBub2RlIGNvbXBpbGF0aW9uIG1vZGUsXG4gICAgLy8gYWxpYXNlcyB3aWxsIG5vdCBiZSB1c2VkLCBidXQgdGhpcyBjYXNlIGlzIGFscmVhZHkgYmVpbmcgcnVuIG9uIHRoZSBjbGllbnQgYW5kXG4gICAgLy8gd2UgYXJlbid0IGNvbmNlcm4gYWJvdXQgbWluaW1pemluZyB0aGUgdGVtcGxhdGUgc2l6ZS5cbiAgICBsZXQgYWxpYXNDb3VudCA9IDA7XG4gICAgT2JqZWN0LmtleXModGhpcy5hbGlhc2VzKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgIGxldCBub2RlID0gdGhpcy5hbGlhc2VzW2FsaWFzXTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUucmVmZXJlbmNlQ291bnQgPiAxKSB7XG4gICAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCBhbGlhcycgKyArK2FsaWFzQ291bnQgKyAnPScgKyBhbGlhcztcbiAgICAgICAgbm9kZS5jaGlsZHJlblswXSA9ICdhbGlhcycgKyBhbGlhc0NvdW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCkge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsICcgKyB0aGlzLmxvb2t1cFByb3BlcnR5RnVuY3Rpb25WYXJEZWNsYXJhdGlvbigpO1xuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBbJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnaGVscGVycycsICdwYXJ0aWFscycsICdkYXRhJ107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2RlcHRocycpO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgdG8gbWVyZ2UgY29udGVudCB3aGVuIHBvc3NpYmxlXG4gICAgbGV0IHNvdXJjZSA9IHRoaXMubWVyZ2VTb3VyY2UodmFyRGVjbGFyYXRpb25zKTtcblxuICAgIGlmIChhc09iamVjdCkge1xuICAgICAgcGFyYW1zLnB1c2goc291cmNlKTtcblxuICAgICAgcmV0dXJuIEZ1bmN0aW9uLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS53cmFwKFtcbiAgICAgICAgJ2Z1bmN0aW9uKCcsXG4gICAgICAgIHBhcmFtcy5qb2luKCcsJyksXG4gICAgICAgICcpIHtcXG4gICcsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgJ30nXG4gICAgICBdKTtcbiAgICB9XG4gIH0sXG4gIG1lcmdlU291cmNlOiBmdW5jdGlvbih2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICBsZXQgaXNTaW1wbGUgPSB0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlLFxuICAgICAgYXBwZW5kT25seSA9ICF0aGlzLmZvcmNlQnVmZmVyLFxuICAgICAgYXBwZW5kRmlyc3QsXG4gICAgICBzb3VyY2VTZWVuLFxuICAgICAgYnVmZmVyU3RhcnQsXG4gICAgICBidWZmZXJFbmQ7XG4gICAgdGhpcy5zb3VyY2UuZWFjaChsaW5lID0+IHtcbiAgICAgIGlmIChsaW5lLmFwcGVuZFRvQnVmZmVyKSB7XG4gICAgICAgIGlmIChidWZmZXJTdGFydCkge1xuICAgICAgICAgIGxpbmUucHJlcGVuZCgnICArICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gbGluZTtcbiAgICAgICAgfVxuICAgICAgICBidWZmZXJFbmQgPSBsaW5lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgICAgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgICAgICBhcHBlbmRGaXJzdCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ2J1ZmZlciArPSAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gYnVmZmVyRW5kID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlU2VlbiA9IHRydWU7XG4gICAgICAgIGlmICghaXNTaW1wbGUpIHtcbiAgICAgICAgICBhcHBlbmRPbmx5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhcHBlbmRPbmx5KSB7XG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2UgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgIHRoaXMuc291cmNlLnB1c2goJ3JldHVybiBcIlwiOycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXJEZWNsYXJhdGlvbnMgKz1cbiAgICAgICAgJywgYnVmZmVyID0gJyArIChhcHBlbmRGaXJzdCA/ICcnIDogdGhpcy5pbml0aWFsaXplQnVmZmVyKCkpO1xuXG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuIGJ1ZmZlciArICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKCdyZXR1cm4gYnVmZmVyOycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICAgIHRoaXMuc291cmNlLnByZXBlbmQoXG4gICAgICAgICd2YXIgJyArIHZhckRlY2xhcmF0aW9ucy5zdWJzdHJpbmcoMikgKyAoYXBwZW5kRmlyc3QgPyAnJyA6ICc7XFxuJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc291cmNlLm1lcmdlKCk7XG4gIH0sXG5cbiAgbG9va3VwUHJvcGVydHlGdW5jdGlvblZhckRlY2xhcmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYFxuICAgICAgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBgLnRyaW0oKTtcbiAgfSxcblxuICAvLyBbYmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXR1cm4gdmFsdWUgb2YgYmxvY2tIZWxwZXJNaXNzaW5nXG4gIC8vXG4gIC8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3Bjb2RlIGlzIHRvIHRha2UgYSBibG9jayBvZiB0aGUgZm9ybVxuICAvLyBge3sjdGhpcy5mb299fS4uLnt7L3RoaXMuZm9vfX1gLCByZXNvbHZlIHRoZSB2YWx1ZSBvZiBgZm9vYCwgYW5kXG4gIC8vIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIHdpdGggdGhlIHJlc3VsdCBvZiBwcm9wZXJseVxuICAvLyBpbnZva2luZyBibG9ja0hlbHBlck1pc3NpbmcuXG4gIGJsb2NrVmFsdWU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBsZXQgYmxvY2tIZWxwZXJNaXNzaW5nID0gdGhpcy5hbGlhc2FibGUoXG4gICAgICAgICdjb250YWluZXIuaG9va3MuYmxvY2tIZWxwZXJNaXNzaW5nJ1xuICAgICAgKSxcbiAgICAgIHBhcmFtcyA9IFt0aGlzLmNvbnRleHROYW1lKDApXTtcbiAgICB0aGlzLnNldHVwSGVscGVyQXJncyhuYW1lLCAwLCBwYXJhbXMpO1xuXG4gICAgbGV0IGJsb2NrTmFtZSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICBwYXJhbXMuc3BsaWNlKDEsIDAsIGJsb2NrTmFtZSk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYW1iaWd1b3VzQmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gQ29tcGlsZXIgdmFsdWUsIGJlZm9yZTogbGFzdEhlbHBlcj12YWx1ZSBvZiBsYXN0IGZvdW5kIGhlbHBlciwgaWYgYW55XG4gIC8vIE9uIHN0YWNrLCBhZnRlciwgaWYgbm8gbGFzdEhlbHBlcjogc2FtZSBhcyBbYmxvY2tWYWx1ZV1cbiAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBsYXN0SGVscGVyOiB2YWx1ZVxuICBhbWJpZ3VvdXNCbG9ja1ZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAvLyBXZSdyZSBiZWluZyBhIGJpdCBjaGVla3kgYW5kIHJldXNpbmcgdGhlIG9wdGlvbnMgdmFsdWUgZnJvbSB0aGUgcHJpb3IgZXhlY1xuICAgIGxldCBibG9ja0hlbHBlck1pc3NpbmcgPSB0aGlzLmFsaWFzYWJsZShcbiAgICAgICAgJ2NvbnRhaW5lci5ob29rcy5ibG9ja0hlbHBlck1pc3NpbmcnXG4gICAgICApLFxuICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldO1xuICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKCcnLCAwLCBwYXJhbXMsIHRydWUpO1xuXG4gICAgdGhpcy5mbHVzaElubGluZSgpO1xuXG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLnRvcFN0YWNrKCk7XG4gICAgcGFyYW1zLnNwbGljZSgxLCAwLCBjdXJyZW50KTtcblxuICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAnaWYgKCEnLFxuICAgICAgdGhpcy5sYXN0SGVscGVyLFxuICAgICAgJykgeyAnLFxuICAgICAgY3VycmVudCxcbiAgICAgICcgPSAnLFxuICAgICAgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpLFxuICAgICAgJ30nXG4gICAgXSk7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZENvbnRlbnRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBBcHBlbmRzIHRoZSBzdHJpbmcgdmFsdWUgb2YgYGNvbnRlbnRgIHRvIHRoZSBjdXJyZW50IGJ1ZmZlclxuICBhcHBlbmRDb250ZW50OiBmdW5jdGlvbihjb250ZW50KSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnBlbmRpbmdDb250ZW50ICsgY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb24gPSB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IGNvbnRlbnQ7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8gYSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLlxuICAvL1xuICAvLyBJZiBgdmFsdWVgIGlzIHRydXRoeSwgb3IgMCwgaXQgaXMgY29lcmNlZCBpbnRvIGEgc3RyaW5nIGFuZCBhcHBlbmRlZFxuICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMgYXBwZW5kZWRcbiAgYXBwZW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aGlzLnJlcGxhY2VTdGFjayhjdXJyZW50ID0+IFsnICE9IG51bGwgPyAnLCBjdXJyZW50LCAnIDogXCJcIiddKTtcblxuICAgICAgdGhpcy5wdXNoU291cmNlKHRoaXMuYXBwZW5kVG9CdWZmZXIodGhpcy5wb3BTdGFjaygpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsb2NhbCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICdpZiAoJyxcbiAgICAgICAgbG9jYWwsXG4gICAgICAgICcgIT0gbnVsbCkgeyAnLFxuICAgICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKGxvY2FsLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAnIH0nXG4gICAgICBdKTtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlKSB7XG4gICAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICAgJ2Vsc2UgeyAnLFxuICAgICAgICAgIHRoaXMuYXBwZW5kVG9CdWZmZXIoXCInJ1wiLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAgICcgfSdcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFthcHBlbmRFc2NhcGVkXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIEVzY2FwZSBgdmFsdWVgIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZlclxuICBhcHBlbmRFc2NhcGVkOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2hTb3VyY2UoXG4gICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKFtcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5lc2NhcGVFeHByZXNzaW9uJyksXG4gICAgICAgICcoJyxcbiAgICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICAnKSdcbiAgICAgIF0pXG4gICAgKTtcbiAgfSxcblxuICAvLyBbZ2V0Q29udGV4dF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vIENvbXBpbGVyIHZhbHVlLCBhZnRlcjogbGFzdENvbnRleHQ9ZGVwdGhcbiAgLy9cbiAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYGxhc3RDb250ZXh0YCBjb21waWxlciB2YWx1ZSB0byB0aGUgZGVwdGhcbiAgZ2V0Q29udGV4dDogZnVuY3Rpb24oZGVwdGgpIHtcbiAgICB0aGlzLmxhc3RDb250ZXh0ID0gZGVwdGg7XG4gIH0sXG5cbiAgLy8gW3B1c2hDb250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dCwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbnRvIHRoZSBzdGFjay5cbiAgcHVzaENvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLmNvbnRleHROYW1lKHRoaXMubGFzdENvbnRleHQpKTtcbiAgfSxcblxuICAvLyBbbG9va3VwT25Db250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dFtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgbmFtZWAgb24gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBPbkNvbnRleHQ6IGZ1bmN0aW9uKHBhcnRzLCBmYWxzeSwgc3RyaWN0LCBzY29wZWQpIHtcbiAgICBsZXQgaSA9IDA7XG5cbiAgICBpZiAoIXNjb3BlZCAmJiB0aGlzLm9wdGlvbnMuY29tcGF0ICYmICF0aGlzLmxhc3RDb250ZXh0KSB7XG4gICAgICAvLyBUaGUgZGVwdGhlZCBxdWVyeSBpcyBleHBlY3RlZCB0byBoYW5kbGUgdGhlIHVuZGVmaW5lZCBsb2dpYyBmb3IgdGhlIHJvb3QgbGV2ZWwgdGhhdFxuICAgICAgLy8gaXMgaW1wbGVtZW50ZWQgYmVsb3csIHNvIHdlIGV2YWx1YXRlIHRoYXQgZGlyZWN0bHkgaW4gY29tcGF0IG1vZGVcbiAgICAgIHRoaXMucHVzaCh0aGlzLmRlcHRoZWRMb29rdXAocGFydHNbaSsrXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KTtcbiAgfSxcblxuICAvLyBbbG9va3VwQmxvY2tQYXJhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogYmxvY2tQYXJhbVtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgcGFydHNgIG9uIHRoZSBnaXZlbiBibG9jayBwYXJhbSBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBCbG9ja1BhcmFtOiBmdW5jdGlvbihibG9ja1BhcmFtSWQsIHBhcnRzKSB7XG4gICAgdGhpcy51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG5cbiAgICB0aGlzLnB1c2goWydibG9ja1BhcmFtc1snLCBibG9ja1BhcmFtSWRbMF0sICddWycsIGJsb2NrUGFyYW1JZFsxXSwgJ10nXSk7XG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCAxKTtcbiAgfSxcblxuICAvLyBbbG9va3VwRGF0YV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogZGF0YSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggdGhlIGRhdGEgbG9va3VwIG9wZXJhdG9yXG4gIGxvb2t1cERhdGE6IGZ1bmN0aW9uKGRlcHRoLCBwYXJ0cywgc3RyaWN0KSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdkYXRhJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnY29udGFpbmVyLmRhdGEoZGF0YSwgJyArIGRlcHRoICsgJyknKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVQYXRoKCdkYXRhJywgcGFydHMsIDAsIHRydWUsIHN0cmljdCk7XG4gIH0sXG5cbiAgcmVzb2x2ZVBhdGg6IGZ1bmN0aW9uKHR5cGUsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpY3QgfHwgdGhpcy5vcHRpb25zLmFzc3VtZU9iamVjdHMpIHtcbiAgICAgIHRoaXMucHVzaChcbiAgICAgICAgc3RyaWN0TG9va3VwKHRoaXMub3B0aW9ucy5zdHJpY3QgJiYgc3RyaWN0LCB0aGlzLCBwYXJ0cywgaSwgdHlwZSlcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxlbiA9IHBhcnRzLmxlbmd0aDtcbiAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICAgIHRoaXMucmVwbGFjZVN0YWNrKGN1cnJlbnQgPT4ge1xuICAgICAgICBsZXQgbG9va3VwID0gdGhpcy5uYW1lTG9va3VwKGN1cnJlbnQsIHBhcnRzW2ldLCB0eXBlKTtcbiAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB6ZXJvIGFuZCBmYWxzZSBhcmUgaGFuZGxlZCBwcm9wZXJseSBpZiB0aGUgY29udGV4dCAoZmFsc3kgZmxhZylcbiAgICAgICAgLy8gbmVlZHMgdG8gaGF2ZSB0aGUgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlc2UgdmFsdWVzLlxuICAgICAgICBpZiAoIWZhbHN5KSB7XG4gICAgICAgICAgcmV0dXJuIFsnICE9IG51bGwgPyAnLCBsb29rdXAsICcgOiAnLCBjdXJyZW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UgY2FuIHVzZSBnZW5lcmljIGZhbHN5IGhhbmRsaW5nXG4gICAgICAgICAgcmV0dXJuIFsnICYmICcsIGxvb2t1cF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB9XG4gIH0sXG5cbiAgLy8gW3Jlc29sdmVQb3NzaWJsZUxhbWJkYV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc29sdmVkIHZhbHVlLCAuLi5cbiAgLy9cbiAgLy8gSWYgdGhlIGB2YWx1ZWAgaXMgYSBsYW1iZGEsIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGJ5XG4gIC8vIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGxhbWJkYVxuICByZXNvbHZlUG9zc2libGVMYW1iZGE6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaChbXG4gICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxhbWJkYScpLFxuICAgICAgJygnLFxuICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgJywgJyxcbiAgICAgIHRoaXMuY29udGV4dE5hbWUoMCksXG4gICAgICAnKSdcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBzdHJpbmcsIGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gVGhpcyBvcGNvZGUgaXMgZGVzaWduZWQgZm9yIHVzZSBpbiBzdHJpbmcgbW9kZSwgd2hpY2hcbiAgLy8gcHJvdmlkZXMgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIHBhcmFtZXRlciBhbG9uZyB3aXRoIGl0c1xuICAvLyBkZXB0aCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQgaW1tZWRpYXRlbHkuXG4gIHB1c2hTdHJpbmdQYXJhbTogZnVuY3Rpb24oc3RyaW5nLCB0eXBlKSB7XG4gICAgdGhpcy5wdXNoQ29udGV4dCgpO1xuICAgIHRoaXMucHVzaFN0cmluZyh0eXBlKTtcblxuICAgIC8vIElmIGl0J3MgYSBzdWJleHByZXNzaW9uLCB0aGUgc3RyaW5nIHJlc3VsdFxuICAgIC8vIHdpbGwgYmUgcHVzaGVkIGFmdGVyIHRoaXMgb3Bjb2RlLlxuICAgIGlmICh0eXBlICE9PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnB1c2hTdHJpbmcoc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChzdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBlbXB0eUhhc2g6IGZ1bmN0aW9uKG9taXRFbXB0eSkge1xuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hJZHNcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hDb250ZXh0c1xuICAgICAgdGhpcy5wdXNoKCd7fScpOyAvLyBoYXNoVHlwZXNcbiAgICB9XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG9taXRFbXB0eSA/ICd1bmRlZmluZWQnIDogJ3t9Jyk7XG4gIH0sXG4gIHB1c2hIYXNoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCk7XG4gICAgfVxuICAgIHRoaXMuaGFzaCA9IHsgdmFsdWVzOiB7fSwgdHlwZXM6IFtdLCBjb250ZXh0czogW10sIGlkczogW10gfTtcbiAgfSxcbiAgcG9wSGFzaDogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGhhc2ggPSB0aGlzLmhhc2g7XG4gICAgdGhpcy5oYXNoID0gdGhpcy5oYXNoZXMucG9wKCk7XG5cbiAgICBpZiAodGhpcy50cmFja0lkcykge1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLmlkcykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC5jb250ZXh0cykpO1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnR5cGVzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnZhbHVlcykpO1xuICB9LFxuXG4gIC8vIFtwdXNoU3RyaW5nXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBxdW90ZWRTdHJpbmcoc3RyaW5nKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBxdW90ZWQgdmVyc2lvbiBvZiBgc3RyaW5nYCBvbnRvIHRoZSBzdGFja1xuICBwdXNoU3RyaW5nOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5xdW90ZWRTdHJpbmcoc3RyaW5nKSk7XG4gIH0sXG5cbiAgLy8gW3B1c2hMaXRlcmFsXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiB2YWx1ZSwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyBhIHZhbHVlIG9udG8gdGhlIHN0YWNrLiBUaGlzIG9wZXJhdGlvbiBwcmV2ZW50c1xuICAvLyB0aGUgY29tcGlsZXIgZnJvbSBjcmVhdGluZyBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBob2xkXG4gIC8vIGl0LlxuICBwdXNoTGl0ZXJhbDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodmFsdWUpO1xuICB9LFxuXG4gIC8vIFtwdXNoUHJvZ3JhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcHJvZ3JhbShndWlkKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBwcm9ncmFtIGV4cHJlc3Npb24gb250byB0aGUgc3RhY2suIFRoaXMgdGFrZXNcbiAgLy8gYSBjb21waWxlLXRpbWUgZ3VpZCBhbmQgY29udmVydHMgaXQgaW50byBhIHJ1bnRpbWUtYWNjZXNzaWJsZVxuICAvLyBleHByZXNzaW9uLlxuICBwdXNoUHJvZ3JhbTogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGlmIChndWlkICE9IG51bGwpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLnByb2dyYW1FeHByZXNzaW9uKGd1aWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG51bGwpO1xuICAgIH1cbiAgfSxcblxuICAvLyBbcmVnaXN0ZXJEZWNvcmF0b3JdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIFBvcHMgb2ZmIHRoZSBkZWNvcmF0b3IncyBwYXJhbWV0ZXJzLCBpbnZva2VzIHRoZSBkZWNvcmF0b3IsXG4gIC8vIGFuZCBpbnNlcnRzIHRoZSBkZWNvcmF0b3IgaW50byB0aGUgZGVjb3JhdG9ycyBsaXN0LlxuICByZWdpc3RlckRlY29yYXRvcihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICBsZXQgZm91bmREZWNvcmF0b3IgPSB0aGlzLm5hbWVMb29rdXAoJ2RlY29yYXRvcnMnLCBuYW1lLCAnZGVjb3JhdG9yJyksXG4gICAgICBvcHRpb25zID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplKTtcblxuICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKFtcbiAgICAgICdmbiA9ICcsXG4gICAgICB0aGlzLmRlY29yYXRvcnMuZnVuY3Rpb25DYWxsKGZvdW5kRGVjb3JhdG9yLCAnJywgW1xuICAgICAgICAnZm4nLFxuICAgICAgICAncHJvcHMnLFxuICAgICAgICAnY29udGFpbmVyJyxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgXSksXG4gICAgICAnIHx8IGZuOydcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgaGVscGVyJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgaGVscGVyLFxuICAvLyBhbmQgcHVzaGVzIHRoZSBoZWxwZXIncyByZXR1cm4gdmFsdWUgb250byB0aGUgc3RhY2suXG4gIC8vXG4gIC8vIElmIHRoZSBoZWxwZXIgaXMgbm90IGZvdW5kLCBgaGVscGVyTWlzc2luZ2AgaXMgY2FsbGVkLlxuICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgaXNTaW1wbGUpIHtcbiAgICBsZXQgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuXG4gICAgbGV0IHBvc3NpYmxlRnVuY3Rpb25DYWxscyA9IFtdO1xuXG4gICAgaWYgKGlzU2ltcGxlKSB7XG4gICAgICAvLyBkaXJlY3QgY2FsbCB0byBoZWxwZXJcbiAgICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKGhlbHBlci5uYW1lKTtcbiAgICB9XG4gICAgLy8gY2FsbCBhIGZ1bmN0aW9uIGZyb20gdGhlIGlucHV0IG9iamVjdFxuICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKG5vbkhlbHBlcik7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMucHVzaChcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5ob29rcy5oZWxwZXJNaXNzaW5nJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGZ1bmN0aW9uTG9va3VwQ29kZSA9IFtcbiAgICAgICcoJyxcbiAgICAgIHRoaXMuaXRlbXNTZXBhcmF0ZWRCeShwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMsICd8fCcpLFxuICAgICAgJyknXG4gICAgXTtcbiAgICBsZXQgZnVuY3Rpb25DYWxsID0gdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKFxuICAgICAgZnVuY3Rpb25Mb29rdXBDb2RlLFxuICAgICAgJ2NhbGwnLFxuICAgICAgaGVscGVyLmNhbGxQYXJhbXNcbiAgICApO1xuICAgIHRoaXMucHVzaChmdW5jdGlvbkNhbGwpO1xuICB9LFxuXG4gIGl0ZW1zU2VwYXJhdGVkQnk6IGZ1bmN0aW9uKGl0ZW1zLCBzZXBhcmF0b3IpIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0LnB1c2goaXRlbXNbMF0pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHNlcGFyYXRvciwgaXRlbXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICAvLyBbaW52b2tlS25vd25IZWxwZXJdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcmVzdWx0IG9mIGhlbHBlciBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIGlzIHVzZWQgd2hlbiB0aGUgaGVscGVyIGlzIGtub3duIHRvIGV4aXN0LFxuICAvLyBzbyBhIGBoZWxwZXJNaXNzaW5nYCBmYWxsYmFjayBpcyBub3QgcmVxdWlyZWQuXG4gIGludm9rZUtub3duSGVscGVyOiBmdW5jdGlvbihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICBsZXQgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoaGVscGVyLm5hbWUsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbaW52b2tlQW1iaWd1b3VzXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBkaXNhbWJpZ3VhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gYW4gZXhwcmVzc2lvbiBsaWtlIGB7e2Zvb319YFxuICAvLyBpcyBwcm92aWRlZCwgYnV0IHdlIGRvbid0IGtub3cgYXQgY29tcGlsZS10aW1lIHdoZXRoZXIgaXRcbiAgLy8gaXMgYSBoZWxwZXIgb3IgYSBwYXRoLlxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBlbWl0cyBtb3JlIGNvZGUgdGhhbiB0aGUgb3RoZXIgb3B0aW9ucyxcbiAgLy8gYW5kIGNhbiBiZSBhdm9pZGVkIGJ5IHBhc3NpbmcgdGhlIGBrbm93bkhlbHBlcnNgIGFuZFxuICAvLyBga25vd25IZWxwZXJzT25seWAgZmxhZ3MgYXQgY29tcGlsZS10aW1lLlxuICBpbnZva2VBbWJpZ3VvdXM6IGZ1bmN0aW9uKG5hbWUsIGhlbHBlckNhbGwpIHtcbiAgICB0aGlzLnVzZVJlZ2lzdGVyKCdoZWxwZXInKTtcblxuICAgIGxldCBub25IZWxwZXIgPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICB0aGlzLmVtcHR5SGFzaCgpO1xuICAgIGxldCBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKDAsIG5hbWUsIGhlbHBlckNhbGwpO1xuXG4gICAgbGV0IGhlbHBlck5hbWUgPSAodGhpcy5sYXN0SGVscGVyID0gdGhpcy5uYW1lTG9va3VwKFxuICAgICAgJ2hlbHBlcnMnLFxuICAgICAgbmFtZSxcbiAgICAgICdoZWxwZXInXG4gICAgKSk7XG5cbiAgICBsZXQgbG9va3VwID0gWycoJywgJyhoZWxwZXIgPSAnLCBoZWxwZXJOYW1lLCAnIHx8ICcsIG5vbkhlbHBlciwgJyknXTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIGxvb2t1cFswXSA9ICcoaGVscGVyID0gJztcbiAgICAgIGxvb2t1cC5wdXNoKFxuICAgICAgICAnICE9IG51bGwgPyBoZWxwZXIgOiAnLFxuICAgICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmhvb2tzLmhlbHBlck1pc3NpbmcnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2goW1xuICAgICAgJygnLFxuICAgICAgbG9va3VwLFxuICAgICAgaGVscGVyLnBhcmFtc0luaXQgPyBbJyksKCcsIGhlbHBlci5wYXJhbXNJbml0XSA6IFtdLFxuICAgICAgJyksJyxcbiAgICAgICcodHlwZW9mIGhlbHBlciA9PT0gJyxcbiAgICAgIHRoaXMuYWxpYXNhYmxlKCdcImZ1bmN0aW9uXCInKSxcbiAgICAgICcgPyAnLFxuICAgICAgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdoZWxwZXInLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSxcbiAgICAgICcgOiBoZWxwZXIpKSdcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlUGFydGlhbF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogY29udGV4dCwgLi4uXG4gIC8vIE9uIHN0YWNrIGFmdGVyOiByZXN1bHQgb2YgcGFydGlhbCBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIHBvcHMgb2ZmIGEgY29udGV4dCwgaW52b2tlcyBhIHBhcnRpYWwgd2l0aCB0aGF0IGNvbnRleHQsXG4gIC8vIGFuZCBwdXNoZXMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBiYWNrLlxuICBpbnZva2VQYXJ0aWFsOiBmdW5jdGlvbihpc0R5bmFtaWMsIG5hbWUsIGluZGVudCkge1xuICAgIGxldCBwYXJhbXMgPSBbXSxcbiAgICAgIG9wdGlvbnMgPSB0aGlzLnNldHVwUGFyYW1zKG5hbWUsIDEsIHBhcmFtcyk7XG5cbiAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICBuYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgZGVsZXRlIG9wdGlvbnMubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICBvcHRpb25zLmluZGVudCA9IEpTT04uc3RyaW5naWZ5KGluZGVudCk7XG4gICAgfVxuICAgIG9wdGlvbnMuaGVscGVycyA9ICdoZWxwZXJzJztcbiAgICBvcHRpb25zLnBhcnRpYWxzID0gJ3BhcnRpYWxzJztcbiAgICBvcHRpb25zLmRlY29yYXRvcnMgPSAnY29udGFpbmVyLmRlY29yYXRvcnMnO1xuXG4gICAgaWYgKCFpc0R5bmFtaWMpIHtcbiAgICAgIHBhcmFtcy51bnNoaWZ0KHRoaXMubmFtZUxvb2t1cCgncGFydGlhbHMnLCBuYW1lLCAncGFydGlhbCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnVuc2hpZnQobmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXQpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGhzID0gJ2RlcHRocyc7XG4gICAgfVxuICAgIG9wdGlvbnMgPSB0aGlzLm9iamVjdExpdGVyYWwob3B0aW9ucyk7XG4gICAgcGFyYW1zLnB1c2gob3B0aW9ucyk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdjb250YWluZXIuaW52b2tlUGFydGlhbCcsICcnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYXNzaWduVG9IYXNoXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uLCBoYXNoLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4sIGhhc2gsIC4uLlxuICAvL1xuICAvLyBQb3BzIGEgdmFsdWUgb2ZmIHRoZSBzdGFjayBhbmQgYXNzaWducyBpdCB0byB0aGUgY3VycmVudCBoYXNoXG4gIGFzc2lnblRvSGFzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgY29udGV4dCxcbiAgICAgIHR5cGUsXG4gICAgICBpZDtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBpZCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0eXBlID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgY29udGV4dCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaGFzaCA9IHRoaXMuaGFzaDtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaGFzaC5jb250ZXh0c1trZXldID0gY29udGV4dDtcbiAgICB9XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGhhc2gudHlwZXNba2V5XSA9IHR5cGU7XG4gICAgfVxuICAgIGlmIChpZCkge1xuICAgICAgaGFzaC5pZHNba2V5XSA9IGlkO1xuICAgIH1cbiAgICBoYXNoLnZhbHVlc1trZXldID0gdmFsdWU7XG4gIH0sXG5cbiAgcHVzaElkOiBmdW5jdGlvbih0eXBlLCBuYW1lLCBjaGlsZCkge1xuICAgIGlmICh0eXBlID09PSAnQmxvY2tQYXJhbScpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChcbiAgICAgICAgJ2Jsb2NrUGFyYW1zWycgK1xuICAgICAgICAgIG5hbWVbMF0gK1xuICAgICAgICAgICddLnBhdGhbJyArXG4gICAgICAgICAgbmFtZVsxXSArXG4gICAgICAgICAgJ10nICtcbiAgICAgICAgICAoY2hpbGQgPyAnICsgJyArIEpTT04uc3RyaW5naWZ5KCcuJyArIGNoaWxkKSA6ICcnKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQYXRoRXhwcmVzc2lvbicpIHtcbiAgICAgIHRoaXMucHVzaFN0cmluZyhuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdTdWJFeHByZXNzaW9uJykge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCd0cnVlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnbnVsbCcpO1xuICAgIH1cbiAgfSxcblxuICAvLyBIRUxQRVJTXG5cbiAgY29tcGlsZXI6IEphdmFTY3JpcHRDb21waWxlcixcblxuICBjb21waWxlQ2hpbGRyZW46IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zKSB7XG4gICAgbGV0IGNoaWxkcmVuID0gZW52aXJvbm1lbnQuY2hpbGRyZW4sXG4gICAgICBjaGlsZCxcbiAgICAgIGNvbXBpbGVyO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBjb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gICAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLm1hdGNoRXhpc3RpbmdQcm9ncmFtKGNoaWxkKTtcblxuICAgICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LnByb2dyYW1zLnB1c2goJycpOyAvLyBQbGFjZWhvbGRlciB0byBwcmV2ZW50IG5hbWUgY29uZmxpY3RzIGZvciBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnByb2dyYW1zLmxlbmd0aDtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGluZGV4O1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29tcGlsZXIuY29tcGlsZShcbiAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgICAgICAhdGhpcy5wcmVjb21waWxlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kZWNvcmF0b3JzW2luZGV4XSA9IGNvbXBpbGVyLmRlY29yYXRvcnM7XG4gICAgICAgIHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaW5kZXhdID0gY2hpbGQ7XG5cbiAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBjb21waWxlci51c2VEZXB0aHM7XG4gICAgICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGNvbXBpbGVyLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgICBjaGlsZC51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocztcbiAgICAgICAgY2hpbGQudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBleGlzdGluZy5pbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGV4aXN0aW5nLmluZGV4O1xuXG4gICAgICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgZXhpc3RpbmcudXNlRGVwdGhzO1xuICAgICAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdGhpcy51c2VCbG9ja1BhcmFtcyB8fCBleGlzdGluZy51c2VCbG9ja1BhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1hdGNoRXhpc3RpbmdQcm9ncmFtOiBmdW5jdGlvbihjaGlsZCkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBsZXQgZW52aXJvbm1lbnQgPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzW2ldO1xuICAgICAgaWYgKGVudmlyb25tZW50ICYmIGVudmlyb25tZW50LmVxdWFscyhjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIGVudmlyb25tZW50O1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9ncmFtRXhwcmVzc2lvbjogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGxldCBjaGlsZCA9IHRoaXMuZW52aXJvbm1lbnQuY2hpbGRyZW5bZ3VpZF0sXG4gICAgICBwcm9ncmFtUGFyYW1zID0gW2NoaWxkLmluZGV4LCAnZGF0YScsIGNoaWxkLmJsb2NrUGFyYW1zXTtcblxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICBwcm9ncmFtUGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcHJvZ3JhbVBhcmFtcy5wdXNoKCdkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ2NvbnRhaW5lci5wcm9ncmFtKCcgKyBwcm9ncmFtUGFyYW1zLmpvaW4oJywgJykgKyAnKSc7XG4gIH0sXG5cbiAgdXNlUmVnaXN0ZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMucmVnaXN0ZXJzW25hbWVdKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyc1tuYW1lXSA9IHRydWU7XG4gICAgICB0aGlzLnJlZ2lzdGVycy5saXN0LnB1c2gobmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2g6IGZ1bmN0aW9uKGV4cHIpIHtcbiAgICBpZiAoIShleHByIGluc3RhbmNlb2YgTGl0ZXJhbCkpIHtcbiAgICAgIGV4cHIgPSB0aGlzLnNvdXJjZS53cmFwKGV4cHIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5saW5lU3RhY2sucHVzaChleHByKTtcbiAgICByZXR1cm4gZXhwcjtcbiAgfSxcblxuICBwdXNoU3RhY2tMaXRlcmFsOiBmdW5jdGlvbihpdGVtKSB7XG4gICAgdGhpcy5wdXNoKG5ldyBMaXRlcmFsKGl0ZW0pKTtcbiAgfSxcblxuICBwdXNoU291cmNlOiBmdW5jdGlvbihzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nQ29udGVudCkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChcbiAgICAgICAgdGhpcy5hcHBlbmRUb0J1ZmZlcihcbiAgICAgICAgICB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcodGhpcy5wZW5kaW5nQ29udGVudCksXG4gICAgICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb25cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRoaXMucGVuZGluZ0NvbnRlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChzb3VyY2UpO1xuICAgIH1cbiAgfSxcblxuICByZXBsYWNlU3RhY2s6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgbGV0IHByZWZpeCA9IFsnKCddLFxuICAgICAgc3RhY2ssXG4gICAgICBjcmVhdGVkU3RhY2ssXG4gICAgICB1c2VkTGl0ZXJhbDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCF0aGlzLmlzSW5saW5lKCkpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ3JlcGxhY2VTdGFjayBvbiBub24taW5saW5lJyk7XG4gICAgfVxuXG4gICAgLy8gV2Ugd2FudCB0byBtZXJnZSB0aGUgaW5saW5lIHN0YXRlbWVudCBpbnRvIHRoZSByZXBsYWNlbWVudCBzdGF0ZW1lbnQgdmlhICcsJ1xuICAgIGxldCB0b3AgPSB0aGlzLnBvcFN0YWNrKHRydWUpO1xuXG4gICAgaWYgKHRvcCBpbnN0YW5jZW9mIExpdGVyYWwpIHtcbiAgICAgIC8vIExpdGVyYWxzIGRvIG5vdCBuZWVkIHRvIGJlIGlubGluZWRcbiAgICAgIHN0YWNrID0gW3RvcC52YWx1ZV07XG4gICAgICBwcmVmaXggPSBbJygnLCBzdGFja107XG4gICAgICB1c2VkTGl0ZXJhbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCBvciBjcmVhdGUgdGhlIGN1cnJlbnQgc3RhY2sgbmFtZSBmb3IgdXNlIGJ5IHRoZSBpbmxpbmVcbiAgICAgIGNyZWF0ZWRTdGFjayA9IHRydWU7XG4gICAgICBsZXQgbmFtZSA9IHRoaXMuaW5jclN0YWNrKCk7XG5cbiAgICAgIHByZWZpeCA9IFsnKCgnLCB0aGlzLnB1c2gobmFtZSksICcgPSAnLCB0b3AsICcpJ107XG4gICAgICBzdGFjayA9IHRoaXMudG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RhY2spO1xuXG4gICAgaWYgKCF1c2VkTGl0ZXJhbCkge1xuICAgICAgdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlZFN0YWNrKSB7XG4gICAgICB0aGlzLnN0YWNrU2xvdC0tO1xuICAgIH1cbiAgICB0aGlzLnB1c2gocHJlZml4LmNvbmNhdChpdGVtLCAnKScpKTtcbiAgfSxcblxuICBpbmNyU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3RhY2tTbG90Kys7XG4gICAgaWYgKHRoaXMuc3RhY2tTbG90ID4gdGhpcy5zdGFja1ZhcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0YWNrVmFycy5wdXNoKCdzdGFjaycgKyB0aGlzLnN0YWNrU2xvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRvcFN0YWNrTmFtZSgpO1xuICB9LFxuICB0b3BTdGFja05hbWU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnc3RhY2snICsgdGhpcy5zdGFja1Nsb3Q7XG4gIH0sXG4gIGZsdXNoSW5saW5lOiBmdW5jdGlvbigpIHtcbiAgICBsZXQgaW5saW5lU3RhY2sgPSB0aGlzLmlubGluZVN0YWNrO1xuICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5saW5lU3RhY2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBlbnRyeSA9IGlubGluZVN0YWNrW2ldO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoZW50cnkgaW5zdGFuY2VvZiBMaXRlcmFsKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goZW50cnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHN0YWNrID0gdGhpcy5pbmNyU3RhY2soKTtcbiAgICAgICAgdGhpcy5wdXNoU291cmNlKFtzdGFjaywgJyA9ICcsIGVudHJ5LCAnOyddKTtcbiAgICAgICAgdGhpcy5jb21waWxlU3RhY2sucHVzaChzdGFjayk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBpc0lubGluZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5saW5lU3RhY2subGVuZ3RoO1xuICB9LFxuXG4gIHBvcFN0YWNrOiBmdW5jdGlvbih3cmFwcGVkKSB7XG4gICAgbGV0IGlubGluZSA9IHRoaXMuaXNJbmxpbmUoKSxcbiAgICAgIGl0ZW0gPSAoaW5saW5lID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTtcblxuICAgIGlmICghd3JhcHBlZCAmJiBpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmICghdGhpcy5zdGFja1Nsb3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHN0YWNrIHBvcCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhY2tTbG90LS07XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gIH0sXG5cbiAgdG9wU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBzdGFjayA9IHRoaXMuaXNJbmxpbmUoKSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjayxcbiAgICAgIGl0ZW0gPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICBjb250ZXh0TmFtZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGlmICh0aGlzLnVzZURlcHRocyAmJiBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gJ2RlcHRoc1snICsgY29udGV4dCArICddJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdkZXB0aCcgKyBjb250ZXh0O1xuICAgIH1cbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcoc3RyKTtcbiAgfSxcblxuICBvYmplY3RMaXRlcmFsOiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uub2JqZWN0TGl0ZXJhbChvYmopO1xuICB9LFxuXG4gIGFsaWFzYWJsZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCByZXQgPSB0aGlzLmFsaWFzZXNbbmFtZV07XG4gICAgaWYgKHJldCkge1xuICAgICAgcmV0LnJlZmVyZW5jZUNvdW50Kys7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHJldCA9IHRoaXMuYWxpYXNlc1tuYW1lXSA9IHRoaXMuc291cmNlLndyYXAobmFtZSk7XG4gICAgcmV0LmFsaWFzYWJsZSA9IHRydWU7XG4gICAgcmV0LnJlZmVyZW5jZUNvdW50ID0gMTtcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgYmxvY2tIZWxwZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICBwYXJhbXNJbml0ID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplLCBwYXJhbXMsIGJsb2NrSGVscGVyKTtcbiAgICBsZXQgZm91bmRIZWxwZXIgPSB0aGlzLm5hbWVMb29rdXAoJ2hlbHBlcnMnLCBuYW1lLCAnaGVscGVyJyksXG4gICAgICBjYWxsQ29udGV4dCA9IHRoaXMuYWxpYXNhYmxlKFxuICAgICAgICBgJHt0aGlzLmNvbnRleHROYW1lKDApfSAhPSBudWxsID8gJHt0aGlzLmNvbnRleHROYW1lKFxuICAgICAgICAgIDBcbiAgICAgICAgKX0gOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KWBcbiAgICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwYXJhbXNJbml0OiBwYXJhbXNJbml0LFxuICAgICAgbmFtZTogZm91bmRIZWxwZXIsXG4gICAgICBjYWxsUGFyYW1zOiBbY2FsbENvbnRleHRdLmNvbmNhdChwYXJhbXMpXG4gICAgfTtcbiAgfSxcblxuICBzZXR1cFBhcmFtczogZnVuY3Rpb24oaGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcykge1xuICAgIGxldCBvcHRpb25zID0ge30sXG4gICAgICBjb250ZXh0cyA9IFtdLFxuICAgICAgdHlwZXMgPSBbXSxcbiAgICAgIGlkcyA9IFtdLFxuICAgICAgb2JqZWN0QXJncyA9ICFwYXJhbXMsXG4gICAgICBwYXJhbTtcblxuICAgIGlmIChvYmplY3RBcmdzKSB7XG4gICAgICBwYXJhbXMgPSBbXTtcbiAgICB9XG5cbiAgICBvcHRpb25zLm5hbWUgPSB0aGlzLnF1b3RlZFN0cmluZyhoZWxwZXIpO1xuICAgIG9wdGlvbnMuaGFzaCA9IHRoaXMucG9wU3RhY2soKTtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmhhc2hJZHMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmluZ1BhcmFtcykge1xuICAgICAgb3B0aW9ucy5oYXNoVHlwZXMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBvcHRpb25zLmhhc2hDb250ZXh0cyA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaW52ZXJzZSA9IHRoaXMucG9wU3RhY2soKSxcbiAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICAvLyBBdm9pZCBzZXR0aW5nIGZuIGFuZCBpbnZlcnNlIGlmIG5laXRoZXIgYXJlIHNldC4gVGhpcyBhbGxvd3NcbiAgICAvLyBoZWxwZXJzIHRvIGRvIGEgY2hlY2sgZm9yIGBpZiAob3B0aW9ucy5mbilgXG4gICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkge1xuICAgICAgb3B0aW9ucy5mbiA9IHByb2dyYW0gfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICAgIG9wdGlvbnMuaW52ZXJzZSA9IGludmVyc2UgfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICB9XG5cbiAgICAvLyBUaGUgcGFyYW1ldGVycyBnbyBvbiB0byB0aGUgc3RhY2sgaW4gb3JkZXIgKG1ha2luZyBzdXJlIHRoYXQgdGhleSBhcmUgZXZhbHVhdGVkIGluIG9yZGVyKVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gcG9wIHRoZW0gb2ZmIHRoZSBzdGFjayBpbiByZXZlcnNlIG9yZGVyXG4gICAgbGV0IGkgPSBwYXJhbVNpemU7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcGFyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBwYXJhbXNbaV0gPSBwYXJhbTtcblxuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgaWRzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICAgIHR5cGVzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgb3B0aW9ucy5hcmdzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmlkcyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoaWRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLnR5cGVzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheSh0eXBlcyk7XG4gICAgICBvcHRpb25zLmNvbnRleHRzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShjb250ZXh0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSAnZGF0YSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gJ2Jsb2NrUGFyYW1zJztcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXJBcmdzOiBmdW5jdGlvbihoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zLCB1c2VSZWdpc3Rlcikge1xuICAgIGxldCBvcHRpb25zID0gdGhpcy5zZXR1cFBhcmFtcyhoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zKTtcbiAgICBvcHRpb25zLmxvYyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbik7XG4gICAgb3B0aW9ucyA9IHRoaXMub2JqZWN0TGl0ZXJhbChvcHRpb25zKTtcbiAgICBpZiAodXNlUmVnaXN0ZXIpIHtcbiAgICAgIHRoaXMudXNlUmVnaXN0ZXIoJ29wdGlvbnMnKTtcbiAgICAgIHBhcmFtcy5wdXNoKCdvcHRpb25zJyk7XG4gICAgICByZXR1cm4gWydvcHRpb25zPScsIG9wdGlvbnNdO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zKSB7XG4gICAgICBwYXJhbXMucHVzaChvcHRpb25zKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICB9XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gIGNvbnN0IHJlc2VydmVkV29yZHMgPSAoXG4gICAgJ2JyZWFrIGVsc2UgbmV3IHZhcicgK1xuICAgICcgY2FzZSBmaW5hbGx5IHJldHVybiB2b2lkJyArXG4gICAgJyBjYXRjaCBmb3Igc3dpdGNoIHdoaWxlJyArXG4gICAgJyBjb250aW51ZSBmdW5jdGlvbiB0aGlzIHdpdGgnICtcbiAgICAnIGRlZmF1bHQgaWYgdGhyb3cnICtcbiAgICAnIGRlbGV0ZSBpbiB0cnknICtcbiAgICAnIGRvIGluc3RhbmNlb2YgdHlwZW9mJyArXG4gICAgJyBhYnN0cmFjdCBlbnVtIGludCBzaG9ydCcgK1xuICAgICcgYm9vbGVhbiBleHBvcnQgaW50ZXJmYWNlIHN0YXRpYycgK1xuICAgICcgYnl0ZSBleHRlbmRzIGxvbmcgc3VwZXInICtcbiAgICAnIGNoYXIgZmluYWwgbmF0aXZlIHN5bmNocm9uaXplZCcgK1xuICAgICcgY2xhc3MgZmxvYXQgcGFja2FnZSB0aHJvd3MnICtcbiAgICAnIGNvbnN0IGdvdG8gcHJpdmF0ZSB0cmFuc2llbnQnICtcbiAgICAnIGRlYnVnZ2VyIGltcGxlbWVudHMgcHJvdGVjdGVkIHZvbGF0aWxlJyArXG4gICAgJyBkb3VibGUgaW1wb3J0IHB1YmxpYyBsZXQgeWllbGQgYXdhaXQnICtcbiAgICAnIG51bGwgdHJ1ZSBmYWxzZSdcbiAgKS5zcGxpdCgnICcpO1xuXG4gIGNvbnN0IGNvbXBpbGVyV29yZHMgPSAoSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge30pO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcmVzZXJ2ZWRXb3Jkcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb21waWxlcldvcmRzW3Jlc2VydmVkV29yZHNbaV1dID0gdHJ1ZTtcbiAgfVxufSkoKTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBNYXkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG4gKi9cbkphdmFTY3JpcHRDb21waWxlci5pc1ZhbGlkSmF2YVNjcmlwdFZhcmlhYmxlTmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIChcbiAgICAhSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTW25hbWVdICYmXG4gICAgL15bYS16QS1aXyRdWzAtOWEtekEtWl8kXSokLy50ZXN0KG5hbWUpXG4gICk7XG59O1xuXG5mdW5jdGlvbiBzdHJpY3RMb29rdXAocmVxdWlyZVRlcm1pbmFsLCBjb21waWxlciwgcGFydHMsIGksIHR5cGUpIHtcbiAgbGV0IHN0YWNrID0gY29tcGlsZXIucG9wU3RhY2soKSxcbiAgICBsZW4gPSBwYXJ0cy5sZW5ndGg7XG4gIGlmIChyZXF1aXJlVGVybWluYWwpIHtcbiAgICBsZW4tLTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzdGFjayA9IGNvbXBpbGVyLm5hbWVMb29rdXAoc3RhY2ssIHBhcnRzW2ldLCB0eXBlKTtcbiAgfVxuXG4gIGlmIChyZXF1aXJlVGVybWluYWwpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY29tcGlsZXIuYWxpYXNhYmxlKCdjb250YWluZXIuc3RyaWN0JyksXG4gICAgICAnKCcsXG4gICAgICBzdGFjayxcbiAgICAgICcsICcsXG4gICAgICBjb21waWxlci5xdW90ZWRTdHJpbmcocGFydHNbaV0pLFxuICAgICAgJywgJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGNvbXBpbGVyLnNvdXJjZS5jdXJyZW50TG9jYXRpb24pLFxuICAgICAgJyApJ1xuICAgIF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEphdmFTY3JpcHRDb21waWxlcjtcbiJdfQ==\n","'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _handlebarsRuntime = require('./handlebars.runtime');\n\nvar _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime);\n\n// Compiler imports\n\nvar _handlebarsCompilerAst = require('./handlebars/compiler/ast');\n\nvar _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);\n\nvar _handlebarsCompilerBase = require('./handlebars/compiler/base');\n\nvar _handlebarsCompilerCompiler = require('./handlebars/compiler/compiler');\n\nvar _handlebarsCompilerJavascriptCompiler = require('./handlebars/compiler/javascript-compiler');\n\nvar _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);\n\nvar _handlebarsCompilerVisitor = require('./handlebars/compiler/visitor');\n\nvar _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\nvar _create = _handlebarsRuntime2['default'].create;\nfunction create() {\n var hb = _create();\n\n hb.compile = function (input, options) {\n return _handlebarsCompilerCompiler.compile(input, options, hb);\n };\n hb.precompile = function (input, options) {\n return _handlebarsCompilerCompiler.precompile(input, options, hb);\n };\n\n hb.AST = _handlebarsCompilerAst2['default'];\n hb.Compiler = _handlebarsCompilerCompiler.Compiler;\n hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];\n hb.Parser = _handlebarsCompilerBase.parser;\n hb.parse = _handlebarsCompilerBase.parse;\n hb.parseWithoutProcessing = _handlebarsCompilerBase.parseWithoutProcessing;\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst.Visitor = _handlebarsCompilerVisitor2['default'];\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7aUNBQW9CLHNCQUFzQjs7Ozs7O3FDQUcxQiwyQkFBMkI7Ozs7c0NBS3BDLDRCQUE0Qjs7MENBQ1csZ0NBQWdDOztvREFDL0MsMkNBQTJDOzs7O3lDQUN0RCwrQkFBK0I7Ozs7b0NBRTVCLDBCQUEwQjs7OztBQUVqRCxJQUFJLE9BQU8sR0FBRywrQkFBUSxNQUFNLENBQUM7QUFDN0IsU0FBUyxNQUFNLEdBQUc7QUFDaEIsTUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7O0FBRW5CLElBQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLFdBQU8sb0NBQVEsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztHQUNwQyxDQUFDO0FBQ0YsSUFBRSxDQUFDLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDdkMsV0FBTyx1Q0FBVyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQ3ZDLENBQUM7O0FBRUYsSUFBRSxDQUFDLEdBQUcscUNBQU0sQ0FBQztBQUNiLElBQUUsQ0FBQyxRQUFRLHVDQUFXLENBQUM7QUFDdkIsSUFBRSxDQUFDLGtCQUFrQixvREFBcUIsQ0FBQztBQUMzQyxJQUFFLENBQUMsTUFBTSxpQ0FBUyxDQUFDO0FBQ25CLElBQUUsQ0FBQyxLQUFLLGdDQUFRLENBQUM7QUFDakIsSUFBRSxDQUFDLHNCQUFzQixpREFBeUIsQ0FBQzs7QUFFbkQsU0FBTyxFQUFFLENBQUM7Q0FDWDs7QUFFRCxJQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIsa0NBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLElBQUksQ0FBQyxPQUFPLHlDQUFVLENBQUM7O0FBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O3FCQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy5ydW50aW1lJztcblxuLy8gQ29tcGlsZXIgaW1wb3J0c1xuaW1wb3J0IEFTVCBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvYXN0JztcbmltcG9ydCB7XG4gIHBhcnNlciBhcyBQYXJzZXIsXG4gIHBhcnNlLFxuICBwYXJzZVdpdGhvdXRQcm9jZXNzaW5nXG59IGZyb20gJy4vaGFuZGxlYmFycy9jb21waWxlci9iYXNlJztcbmltcG9ydCB7IENvbXBpbGVyLCBjb21waWxlLCBwcmVjb21waWxlIH0gZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyJztcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXInO1xuaW1wb3J0IFZpc2l0b3IgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3InO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG5sZXQgX2NyZWF0ZSA9IHJ1bnRpbWUuY3JlYXRlO1xuZnVuY3Rpb24gY3JlYXRlKCkge1xuICBsZXQgaGIgPSBfY3JlYXRlKCk7XG5cbiAgaGIuY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcbiAgaGIucHJlY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHByZWNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcblxuICBoYi5BU1QgPSBBU1Q7XG4gIGhiLkNvbXBpbGVyID0gQ29tcGlsZXI7XG4gIGhiLkphdmFTY3JpcHRDb21waWxlciA9IEphdmFTY3JpcHRDb21waWxlcjtcbiAgaGIuUGFyc2VyID0gUGFyc2VyO1xuICBoYi5wYXJzZSA9IHBhcnNlO1xuICBoYi5wYXJzZVdpdGhvdXRQcm9jZXNzaW5nID0gcGFyc2VXaXRob3V0UHJvY2Vzc2luZztcblxuICByZXR1cm4gaGI7XG59XG5cbmxldCBpbnN0ID0gY3JlYXRlKCk7XG5pbnN0LmNyZWF0ZSA9IGNyZWF0ZTtcblxubm9Db25mbGljdChpbnN0KTtcblxuaW5zdC5WaXNpdG9yID0gVmlzaXRvcjtcblxuaW5zdFsnZGVmYXVsdCddID0gaW5zdDtcblxuZXhwb3J0IGRlZmF1bHQgaW5zdDtcbiJdfQ==\n","/* eslint-disable new-cap */\n'use strict';\n\nexports.__esModule = true;\nexports.print = print;\nexports.PrintVisitor = PrintVisitor;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _visitor = require('./visitor');\n\nvar _visitor2 = _interopRequireDefault(_visitor);\n\nfunction print(ast) {\n return new PrintVisitor().accept(ast);\n}\n\nfunction PrintVisitor() {\n this.padding = 0;\n}\n\nPrintVisitor.prototype = new _visitor2['default']();\n\nPrintVisitor.prototype.pad = function (string) {\n var out = '';\n\n for (var i = 0, l = this.padding; i < l; i++) {\n out += ' ';\n }\n\n out += string + '\\n';\n return out;\n};\n\nPrintVisitor.prototype.Program = function (program) {\n var out = '',\n body = program.body,\n i = undefined,\n l = undefined;\n\n if (program.blockParams) {\n var blockParams = 'BLOCK PARAMS: [';\n for (i = 0, l = program.blockParams.length; i < l; i++) {\n blockParams += ' ' + program.blockParams[i];\n }\n blockParams += ' ]';\n out += this.pad(blockParams);\n }\n\n for (i = 0, l = body.length; i < l; i++) {\n out += this.accept(body[i]);\n }\n\n this.padding--;\n\n return out;\n};\n\nPrintVisitor.prototype.MustacheStatement = function (mustache) {\n return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');\n};\nPrintVisitor.prototype.Decorator = function (mustache) {\n return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');\n};\n\nPrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) {\n var out = '';\n\n out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:');\n this.padding++;\n out += this.pad(this.SubExpression(block));\n if (block.program) {\n out += this.pad('PROGRAM:');\n this.padding++;\n out += this.accept(block.program);\n this.padding--;\n }\n if (block.inverse) {\n if (block.program) {\n this.padding++;\n }\n out += this.pad('{{^}}');\n this.padding++;\n out += this.accept(block.inverse);\n this.padding--;\n if (block.program) {\n this.padding--;\n }\n }\n this.padding--;\n\n return out;\n};\n\nPrintVisitor.prototype.PartialStatement = function (partial) {\n var content = 'PARTIAL:' + partial.name.original;\n if (partial.params[0]) {\n content += ' ' + this.accept(partial.params[0]);\n }\n if (partial.hash) {\n content += ' ' + this.accept(partial.hash);\n }\n return this.pad('{{> ' + content + ' }}');\n};\nPrintVisitor.prototype.PartialBlockStatement = function (partial) {\n var content = 'PARTIAL BLOCK:' + partial.name.original;\n if (partial.params[0]) {\n content += ' ' + this.accept(partial.params[0]);\n }\n if (partial.hash) {\n content += ' ' + this.accept(partial.hash);\n }\n\n content += ' ' + this.pad('PROGRAM:');\n this.padding++;\n content += this.accept(partial.program);\n this.padding--;\n\n return this.pad('{{> ' + content + ' }}');\n};\n\nPrintVisitor.prototype.ContentStatement = function (content) {\n return this.pad(\"CONTENT[ '\" + content.value + \"' ]\");\n};\n\nPrintVisitor.prototype.CommentStatement = function (comment) {\n return this.pad(\"{{! '\" + comment.value + \"' }}\");\n};\n\nPrintVisitor.prototype.SubExpression = function (sexpr) {\n var params = sexpr.params,\n paramStrings = [],\n hash = undefined;\n\n for (var i = 0, l = params.length; i < l; i++) {\n paramStrings.push(this.accept(params[i]));\n }\n\n params = '[' + paramStrings.join(', ') + ']';\n\n hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';\n\n return this.accept(sexpr.path) + ' ' + params + hash;\n};\n\nPrintVisitor.prototype.PathExpression = function (id) {\n var path = id.parts.join('/');\n return (id.data ? '@' : '') + 'PATH:' + path;\n};\n\nPrintVisitor.prototype.StringLiteral = function (string) {\n return '\"' + string.value + '\"';\n};\n\nPrintVisitor.prototype.NumberLiteral = function (number) {\n return 'NUMBER{' + number.value + '}';\n};\n\nPrintVisitor.prototype.BooleanLiteral = function (bool) {\n return 'BOOLEAN{' + bool.value + '}';\n};\n\nPrintVisitor.prototype.UndefinedLiteral = function () {\n return 'UNDEFINED';\n};\n\nPrintVisitor.prototype.NullLiteral = function () {\n return 'NULL';\n};\n\nPrintVisitor.prototype.Hash = function (hash) {\n var pairs = hash.pairs,\n joinedPairs = [];\n\n for (var i = 0, l = pairs.length; i < l; i++) {\n joinedPairs.push(this.accept(pairs[i]));\n }\n\n return 'HASH{' + joinedPairs.join(', ') + '}';\n};\nPrintVisitor.prototype.HashPair = function (pair) {\n return pair.key + '=' + this.accept(pair.value);\n};\n/* eslint-enable new-cap */\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3ByaW50ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozt1QkFDb0IsV0FBVzs7OztBQUV4QixTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDekIsU0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN2Qzs7QUFFTSxTQUFTLFlBQVksR0FBRztBQUM3QixNQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztDQUNsQjs7QUFFRCxZQUFZLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRXZDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFVBQVMsTUFBTSxFQUFFO0FBQzVDLE1BQUksR0FBRyxHQUFHLEVBQUUsQ0FBQzs7QUFFYixPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLE9BQUcsSUFBSSxJQUFJLENBQUM7R0FDYjs7QUFFRCxLQUFHLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNyQixTQUFPLEdBQUcsQ0FBQztDQUNaLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDakQsTUFBSSxHQUFHLEdBQUcsRUFBRTtNQUNWLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSTtNQUNuQixDQUFDLFlBQUE7TUFDRCxDQUFDLFlBQUEsQ0FBQzs7QUFFSixNQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7QUFDdkIsUUFBSSxXQUFXLEdBQUcsaUJBQWlCLENBQUM7QUFDcEMsU0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMs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LElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUN6Qzs7QUFFRCxTQUFPLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUMvQyxDQUFDO0FBQ0YsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDL0MsU0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUNqRCxDQUFDIiwiZmlsZSI6InByaW50ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5pbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnQoYXN0KSB7XG4gIHJldHVybiBuZXcgUHJpbnRWaXNpdG9yKCkuYWNjZXB0KGFzdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQcmludFZpc2l0b3IoKSB7XG4gIHRoaXMucGFkZGluZyA9IDA7XG59XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUgPSBuZXcgVmlzaXRvcigpO1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLnBhZCA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBsZXQgb3V0ID0gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnBhZGRpbmc7IGkgPCBsOyBpKyspIHtcbiAgICBvdXQgKz0gJyAgJztcbiAgfVxuXG4gIG91dCArPSBzdHJpbmcgKyAnXFxuJztcbiAgcmV0dXJuIG91dDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUHJvZ3JhbSA9IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgbGV0IG91dCA9ICcnLFxuICAgIGJvZHkgPSBwcm9ncmFtLmJvZHksXG4gICAgaSxcbiAgICBsO1xuXG4gIGlmIChwcm9ncmFtLmJsb2NrUGFyYW1zKSB7XG4gICAgbGV0IGJsb2NrUGFyYW1zID0gJ0JMT0NLIFBBUkFNUzogWyc7XG4gICAgZm9yIChpID0gMCwgbCA9IHByb2dyYW0uYmxvY2tQYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBibG9ja1BhcmFtcyArPSAnICcgKyBwcm9ncmFtLmJsb2NrUGFyYW1zW2ldO1xuICAgIH1cbiAgICBibG9ja1BhcmFtcyArPSAnIF0nO1xuICAgIG91dCArPSB0aGlzLnBhZChibG9ja1BhcmFtcyk7XG4gIH1cblxuICBmb3IgKGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBvdXQgKz0gdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gIH1cblxuICB0aGlzLnBhZGRpbmctLTtcblxuICByZXR1cm4gb3V0O1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gIHJldHVybiB0aGlzLnBhZCgne3sgJyArIHRoaXMuU3ViRXhwcmVzc2lvbihtdXN0YWNoZSkgKyAnIH19Jyk7XG59O1xuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5EZWNvcmF0b3IgPSBmdW5jdGlvbihtdXN0YWNoZSkge1xuICByZXR1cm4gdGhpcy5wYWQoJ3t7IERJUkVDVElWRSAnICsgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKSArICcgfX0nKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQmxvY2tTdGF0ZW1lbnQgPSBQcmludFZpc2l0b3IucHJvdG90eXBlLkRlY29yYXRvckJsb2NrID0gZnVuY3Rpb24oXG4gIGJsb2NrXG4pIHtcbiAgbGV0IG91dCA9ICcnO1xuXG4gIG91dCArPSB0aGlzLnBhZChcbiAgICAoYmxvY2sudHlwZSA9PT0gJ0RlY29yYXRvckJsb2NrJyA/ICdESVJFQ1RJVkUgJyA6ICcnKSArICdCTE9DSzonXG4gICk7XG4gIHRoaXMucGFkZGluZysrO1xuICBvdXQgKz0gdGhpcy5wYWQodGhpcy5TdWJFeHByZXNzaW9uKGJsb2NrKSk7XG4gIGlmIChibG9jay5wcm9ncmFtKSB7XG4gICAgb3V0ICs9IHRoaXMucGFkKCdQUk9HUkFNOicpO1xuICAgIHRoaXMucGFkZGluZysrO1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgICB0aGlzLnBhZGRpbmctLTtcbiAgfVxuICBpZiAoYmxvY2suaW52ZXJzZSkge1xuICAgIGlmIChibG9jay5wcm9ncmFtKSB7XG4gICAgICB0aGlzLnBhZGRpbmcrKztcbiAgICB9XG4gICAgb3V0ICs9IHRoaXMucGFkKCd7e159fScpO1xuICAgIHRoaXMucGFkZGluZysrO1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChibG9jay5pbnZlcnNlKTtcbiAgICB0aGlzLnBhZGRpbmctLTtcbiAgICBpZiAoYmxvY2sucHJvZ3JhbSkge1xuICAgICAgdGhpcy5wYWRkaW5nLS07XG4gICAgfVxuICB9XG4gIHRoaXMucGFkZGluZy0tO1xuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhcnRpYWxTdGF0ZW1lbnQgPSBmdW5jdGlvbihwYXJ0aWFsKSB7XG4gIGxldCBjb250ZW50ID0gJ1BBUlRJQUw6JyArIHBhcnRpYWwubmFtZS5vcmlnaW5hbDtcbiAgaWYgKHBhcnRpYWwucGFyYW1zWzBdKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLnBhcmFtc1swXSk7XG4gIH1cbiAgaWYgKHBhcnRpYWwuaGFzaCkge1xuICAgIGNvbnRlbnQgKz0gJyAnICsgdGhpcy5hY2NlcHQocGFydGlhbC5oYXNoKTtcbiAgfVxuICByZXR1cm4gdGhpcy5wYWQoJ3t7PiAnICsgY29udGVudCArICcgfX0nKTtcbn07XG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhcnRpYWxCbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgbGV0IGNvbnRlbnQgPSAnUEFSVElBTCBCTE9DSzonICsgcGFydGlhbC5uYW1lLm9yaWdpbmFsO1xuICBpZiAocGFydGlhbC5wYXJhbXNbMF0pIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRoaXMuYWNjZXB0KHBhcnRpYWwucGFyYW1zWzBdKTtcbiAgfVxuICBpZiAocGFydGlhbC5oYXNoKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLmhhc2gpO1xuICB9XG5cbiAgY29udGVudCArPSAnICcgKyB0aGlzLnBhZCgnUFJPR1JBTTonKTtcbiAgdGhpcy5wYWRkaW5nKys7XG4gIGNvbnRlbnQgKz0gdGhpcy5hY2NlcHQocGFydGlhbC5wcm9ncmFtKTtcbiAgdGhpcy5wYWRkaW5nLS07XG5cbiAgcmV0dXJuIHRoaXMucGFkKCd7ez4gJyArIGNvbnRlbnQgKyAnIH19Jyk7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkNvbnRlbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihjb250ZW50KSB7XG4gIHJldHVybiB0aGlzLnBhZChcIkNPTlRFTlRbICdcIiArIGNvbnRlbnQudmFsdWUgKyBcIicgXVwiKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQ29tbWVudFN0YXRlbWVudCA9IGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMucGFkKFwie3shICdcIiArIGNvbW1lbnQudmFsdWUgKyBcIicgfX1cIik7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlN1YkV4cHJlc3Npb24gPSBmdW5jdGlvbihzZXhwcikge1xuICBsZXQgcGFyYW1zID0gc2V4cHIucGFyYW1zLFxuICAgIHBhcmFtU3RyaW5ncyA9IFtdLFxuICAgIGhhc2g7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgcGFyYW1TdHJpbmdzLnB1c2godGhpcy5hY2NlcHQocGFyYW1zW2ldKSk7XG4gIH1cblxuICBwYXJhbXMgPSAnWycgKyBwYXJhbVN0cmluZ3Muam9pbignLCAnKSArICddJztcblxuICBoYXNoID0gc2V4cHIuaGFzaCA/ICcgJyArIHRoaXMuYWNjZXB0KHNleHByLmhhc2gpIDogJyc7XG5cbiAgcmV0dXJuIHRoaXMuYWNjZXB0KHNleHByLnBhdGgpICsgJyAnICsgcGFyYW1zICsgaGFzaDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUGF0aEV4cHJlc3Npb24gPSBmdW5jdGlvbihpZCkge1xuICBsZXQgcGF0aCA9IGlkLnBhcnRzLmpvaW4oJy8nKTtcbiAgcmV0dXJuIChpZC5kYXRhID8gJ0AnIDogJycpICsgJ1BBVEg6JyArIHBhdGg7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlN0cmluZ0xpdGVyYWwgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgcmV0dXJuICdcIicgKyBzdHJpbmcudmFsdWUgKyAnXCInO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdW1iZXJMaXRlcmFsID0gZnVuY3Rpb24obnVtYmVyKSB7XG4gIHJldHVybiAnTlVNQkVSeycgKyBudW1iZXIudmFsdWUgKyAnfSc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkJvb2xlYW5MaXRlcmFsID0gZnVuY3Rpb24oYm9vbCkge1xuICByZXR1cm4gJ0JPT0xFQU57JyArIGJvb2wudmFsdWUgKyAnfSc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlVuZGVmaW5lZExpdGVyYWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICdVTkRFRklORUQnO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdWxsTGl0ZXJhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ05VTEwnO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5IYXNoID0gZnVuY3Rpb24oaGFzaCkge1xuICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzLFxuICAgIGpvaW5lZFBhaXJzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYWlycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBqb2luZWRQYWlycy5wdXNoKHRoaXMuYWNjZXB0KHBhaXJzW2ldKSk7XG4gIH1cblxuICByZXR1cm4gJ0hBU0h7JyArIGpvaW5lZFBhaXJzLmpvaW4oJywgJykgKyAnfSc7XG59O1xuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5IYXNoUGFpciA9IGZ1bmN0aW9uKHBhaXIpIHtcbiAgcmV0dXJuIHBhaXIua2V5ICsgJz0nICsgdGhpcy5hY2NlcHQocGFpci52YWx1ZSk7XG59O1xuLyogZXNsaW50LWVuYWJsZSBuZXctY2FwICovXG4iXX0=\n","// USAGE:\n// var handlebars = require('handlebars');\n/* eslint-env node */\n/* eslint-disable no-var */\n\n// var local = handlebars.create();\n\nvar handlebars = require('../dist/cjs/handlebars')['default'];\n\nvar printer = require('../dist/cjs/handlebars/compiler/printer');\nhandlebars.PrintVisitor = printer.PrintVisitor;\nhandlebars.print = printer.print;\n\nmodule.exports = handlebars;\n\n// Publish a Node.js require() handler for .handlebars and .hbs files\nfunction extension(module, filename) {\n var fs = require('fs');\n var templateString = fs.readFileSync(filename, 'utf8');\n module.exports = handlebars.compile(templateString);\n}\n/* istanbul ignore else */\nif (typeof require !== 'undefined' && require.extensions) {\n require.extensions['.handlebars'] = extension;\n require.extensions['.hbs'] = extension;\n}\n","import Handlebars from \"handlebars\";\n\n/**\n * Binary file extensions that should be skipped during substitution\n */\nconst BINARY_EXTENSIONS = new Set([\n \".png\",\n \".jpg\",\n \".jpeg\",\n \".gif\",\n \".webp\",\n \".ico\",\n \".pdf\",\n \".zip\",\n \".tar\",\n \".gz\",\n \".bz2\",\n \".7z\",\n \".rar\",\n \".exe\",\n \".dll\",\n \".so\",\n \".dylib\",\n \".bin\",\n \".woff\",\n \".woff2\",\n \".ttf\",\n \".eot\",\n \".otf\",\n \".mp3\",\n \".mp4\",\n \".avi\",\n \".mov\",\n \".wmv\",\n \".flv\",\n \".mkv\",\n]);\n\n/**\n * Check if a file path points to a binary file based on extension\n */\nexport function isBinaryFile(filePath: string): boolean {\n const ext = filePath.substring(filePath.lastIndexOf(\".\")).toLowerCase();\n return BINARY_EXTENSIONS.has(ext);\n}\n\n/**\n * Variable sources for substitution (in priority order)\n */\nexport interface VariableSources {\n manifest?: Record<string, string>;\n cli?: Record<string, string>;\n env?: Record<string, string>;\n}\n\n/**\n * Options for variable substitution\n */\nexport interface SubstitutionOptions {\n /** Variable sources in priority order: manifest > cli > env */\n sources: VariableSources;\n /** Whether to warn about undefined variables (default: true) */\n warnOnUndefined?: boolean;\n /** Callback for warnings */\n onWarning?: (message: string) => void;\n}\n\n/**\n * Merge variable sources in priority order: manifest > cli > env\n */\nfunction mergeVariables(sources: VariableSources): Record<string, string> {\n return {\n ...(sources.env ?? {}),\n ...(sources.cli ?? {}),\n ...(sources.manifest ?? {}),\n };\n}\n\n/**\n * Substitute variables in content using Handlebars\n *\n * @param content - The content to process\n * @param options - Substitution options\n * @returns Content with variables substituted\n */\nexport function substituteVariables(content: string, options: SubstitutionOptions): string {\n const variables = mergeVariables(options.sources);\n\n // Compile Handlebars template\n const template = Handlebars.compile(content, {\n noEscape: true, // Don't HTML-escape values\n strict: false, // Don't throw on undefined variables\n });\n\n // Track undefined variables for warnings\n const undefinedVars = new Set<string>();\n\n // Register helper to catch undefined variables and nested paths\n Handlebars.registerHelper(\"helperMissing\", (...args) => {\n // Last argument is the options object from Handlebars\n const handlebarsOptions = args[args.length - 1];\n const varName = handlebarsOptions.name;\n\n if (options.warnOnUndefined !== false) {\n undefinedVars.add(varName);\n }\n return `{{${varName}}}`;\n });\n\n // Perform substitution\n const result = template(variables);\n\n // Emit warnings for undefined variables\n if (options.warnOnUndefined !== false && undefinedVars.size > 0) {\n for (const varName of undefinedVars) {\n const message = `Variable {{${varName}}} is undefined and was left as-is`;\n if (options.onWarning) {\n options.onWarning(message);\n }\n }\n }\n\n return result;\n}\n\n/**\n * Process file content with variable substitution\n *\n * @param content - The file content\n * @param filePath - The file path (used for binary detection)\n * @param options - Substitution options\n * @returns Processed content or original if binary\n */\nexport function processFileContent(\n content: string,\n filePath: string,\n options: SubstitutionOptions,\n): string {\n // Skip binary files\n if (isBinaryFile(filePath)) {\n return content;\n }\n\n return substituteVariables(content, options);\n}\n","import { z } from \"zod\";\n\n/**\n * Schema for a single global source entry in ~/.baton/config.yaml\n *\n * Represents a registered source repository that can be used across projects.\n * Sources can be marked as default for auto-selection in `baton init`.\n */\nexport const globalSourceEntrySchema = z.object({\n /** Friendly name for the source (e.g., \"acme\", \"personal\") */\n name: z.string(),\n\n /** Source URL (e.g., \"github:org/repo\", \"../local/path\") */\n url: z.string(),\n\n /** Whether this source should be used by default in `baton init` */\n default: z.boolean().default(false),\n\n /** Optional description of the source purpose */\n description: z.string().optional(),\n});\n\n/**\n * Schema for ~/.baton/config.yaml - global Baton configuration\n *\n * Stores user-level settings like registered sources, cache config, and defaults.\n */\nexport const globalConfigSchema = z.object({\n /** Config file format version (for future migrations) */\n version: z.string().default(\"1.0\"),\n\n /** Registered source repositories available globally */\n sources: z.array(globalSourceEntrySchema).optional().default([]),\n\n /** Default settings for profile installation */\n defaults: z\n .object({\n /** Default scope for profile installation */\n scope: z.enum([\"project\", \"global\"]).default(\"project\"),\n\n /** Default merge strategy when conflicts occur */\n merge_strategy: z\n .enum([\"replace\", \"deep\", \"append\", \"prepend\", \"skip\", \"prompt\", \"directory\", \"import\"])\n .default(\"deep\"),\n })\n .optional(),\n\n /** AI tool configuration — persisted tool selection */\n ai: z\n .object({\n /** List of AI tool keys the developer uses (e.g., [\"claude-code\", \"cursor\"]) */\n tools: z.array(z.string()).optional().default([]),\n })\n .optional(),\n\n /** IDE platform configuration — persisted platform selection */\n ide: z\n .object({\n /** List of IDE platform keys the developer uses (e.g., [\"vscode\", \"cursor\"]) */\n platforms: z.array(z.string()).optional().default([]),\n })\n .optional(),\n\n /** Sync behavior configuration */\n sync: z\n .object({\n /** Maximum cache age in hours before a source is considered stale (default: 24) */\n cacheTtlHours: z.number().default(24),\n })\n .optional(),\n});\n\nexport type GlobalConfig = z.infer<typeof globalConfigSchema>;\nexport type GlobalSourceEntry = z.infer<typeof globalSourceEntrySchema>;\n","import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { parse, stringify } from \"yaml\";\nimport { ManifestValidationError } from \"../errors.js\";\nimport {\n type GlobalConfig,\n type GlobalSourceEntry,\n globalConfigSchema,\n} from \"../schemas/global-config.js\";\n\n/**\n * Returns the Baton home directory path.\n *\n * Respects the `BATON_HOME` environment variable for testing and custom locations.\n * Falls back to `~/.baton` when not set.\n *\n * @returns Absolute path to the Baton home directory\n */\nexport function getBatonHome(): string {\n return process.env.BATON_HOME ?? join(homedir(), \".baton\");\n}\n\n/**\n * Returns the path to the global Baton configuration file.\n *\n * @returns Absolute path to ~/.baton/config.yaml (or $BATON_HOME/config.yaml)\n */\nexport function getGlobalConfigPath(): string {\n return join(getBatonHome(), \"config.yaml\");\n}\n\n/**\n * Loads the global Baton configuration from ~/.baton/config.yaml\n *\n * If the file doesn't exist, returns a default configuration with empty sources.\n * This is not an error - it's the expected state for new users.\n *\n * @throws {ManifestValidationError} If the config file exists but contains invalid data\n * @returns The parsed and validated global configuration\n */\nexport async function loadGlobalConfig(): Promise<GlobalConfig> {\n const configPath = getGlobalConfigPath();\n\n try {\n const content = await readFile(configPath, \"utf-8\");\n const parsed = parse(content);\n\n // Validate against schema\n return globalConfigSchema.parse(parsed);\n } catch (error) {\n // File doesn't exist - return default config\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return globalConfigSchema.parse({});\n }\n\n // Validation error\n throw new ManifestValidationError(\n `Invalid global config at ${configPath}: ${(error as Error).message}`,\n { cause: error as Error },\n );\n }\n}\n\n/**\n * Saves the global configuration to ~/.baton/config.yaml\n *\n * Creates the ~/.baton directory if it doesn't exist.\n *\n * @param config - The configuration to save (will be validated)\n * @throws {ManifestValidationError} If config validation fails\n * @throws {Error} If file write fails\n */\nexport async function saveGlobalConfig(config: GlobalConfig): Promise<void> {\n // Validate before saving\n const validated = globalConfigSchema.parse(config);\n\n const configPath = getGlobalConfigPath();\n const configDir = getBatonHome();\n\n // Ensure directory exists\n await mkdir(configDir, { recursive: true });\n\n // Write as YAML\n const yamlContent = stringify(validated);\n await writeFile(configPath, yamlContent, \"utf-8\");\n}\n\n/**\n * Adds a source repository to the global configuration.\n *\n * @param url - Source URL (e.g., \"github:org/repo\", \"../local/path\")\n * @param options - Optional configuration\n * @param options.name - Custom name (defaults to inferred from URL)\n * @param options.description - Optional description\n * @param options.setAsDefault - Whether to set as default source\n *\n * @throws {Error} If a source with the same URL already exists\n */\nexport async function addGlobalSource(\n url: string,\n options?: {\n name?: string;\n description?: string;\n setAsDefault?: boolean;\n },\n): Promise<void> {\n const config = await loadGlobalConfig();\n\n // Check for duplicate URL\n const existing = config.sources?.find((s) => s.url === url);\n if (existing) {\n throw new Error(`Source with URL \"${url}\" is already registered as \"${existing.name}\"`);\n }\n\n // Generate name if not provided\n const name = options?.name ?? inferNameFromUrl(url);\n\n // Check for duplicate name\n const existingByName = config.sources?.find((s) => s.name === name);\n if (existingByName) {\n throw new Error(`Source with name \"${name}\" already exists (URL: \"${existingByName.url}\")`);\n }\n\n // If setting as default, clear other defaults\n if (options?.setAsDefault && config.sources) {\n for (const source of config.sources) {\n source.default = false;\n }\n }\n\n // Create new entry\n const newSource: GlobalSourceEntry = {\n name,\n url,\n default: options?.setAsDefault ?? false,\n description: options?.description,\n };\n\n // Add to sources\n config.sources = [...(config.sources ?? []), newSource];\n\n await saveGlobalConfig(config);\n}\n\n/**\n * Removes a source from the global configuration by name or URL.\n *\n * @param nameOrUrl - Source name or URL to remove\n * @throws {Error} If no matching source is found\n */\nexport async function removeGlobalSource(nameOrUrl: string): Promise<void> {\n const config = await loadGlobalConfig();\n\n const index = config.sources?.findIndex((s) => s.name === nameOrUrl || s.url === nameOrUrl);\n\n if (index === undefined || index === -1) {\n throw new Error(`Source \"${nameOrUrl}\" not found in global configuration`);\n }\n\n config.sources?.splice(index, 1);\n\n await saveGlobalConfig(config);\n}\n\n/**\n * Gets all registered global sources.\n *\n * @returns Array of global source entries (empty if none registered)\n */\nexport async function getGlobalSources(): Promise<GlobalSourceEntry[]> {\n const config = await loadGlobalConfig();\n return config.sources ?? [];\n}\n\n/**\n * Gets the default global source, if one is set.\n *\n * @returns The default source entry, or null if no default is set\n */\nexport async function getDefaultGlobalSource(): Promise<GlobalSourceEntry | null> {\n const sources = await getGlobalSources();\n return sources.find((s) => s.default) ?? null;\n}\n\n/**\n * Gets the list of persisted AI tools from global configuration.\n *\n * @returns Array of tool keys (empty if none configured)\n */\nexport async function getGlobalAiTools(): Promise<string[]> {\n const config = await loadGlobalConfig();\n return config.ai?.tools ?? [];\n}\n\n/**\n * Saves the list of AI tools to global configuration.\n *\n * @param tools - Array of tool keys to persist\n */\nexport async function setGlobalAiTools(tools: string[]): Promise<void> {\n const config = await loadGlobalConfig();\n config.ai = { ...config.ai, tools };\n await saveGlobalConfig(config);\n}\n\n/**\n * Gets the list of persisted IDE platforms from global configuration.\n *\n * @returns Array of platform keys (empty if none configured)\n */\nexport async function getGlobalIdePlatforms(): Promise<string[]> {\n const config = await loadGlobalConfig();\n return config.ide?.platforms ?? [];\n}\n\n/**\n * Saves the list of IDE platforms to global configuration.\n *\n * @param platforms - Array of platform keys to persist\n */\nexport async function setGlobalIdePlatforms(platforms: string[]): Promise<void> {\n const config = await loadGlobalConfig();\n config.ide = { ...config.ide, platforms };\n await saveGlobalConfig(config);\n}\n\n/**\n * Infers a friendly name from a source URL.\n *\n * Examples:\n * - \"github:acme-corp/dx-configs\" → \"acme-corp\"\n * - \"github:daniel/my-profiles\" → \"daniel\"\n * - \"../local/path\" → \"path\"\n *\n * @param url - Source URL\n * @returns Inferred name (fallback: sanitized URL)\n */\nfunction inferNameFromUrl(url: string): string {\n // Try to extract org from github:/gitlab: URLs\n const githubMatch = url.match(/^(?:github|gitlab):([^/]+)\\//);\n if (githubMatch) {\n return githubMatch[1];\n }\n\n // For file paths, use last segment\n const segments = url.split(\"/\");\n const lastSegment = segments[segments.length - 1];\n if (lastSegment) {\n return lastSegment.replace(/[^a-zA-Z0-9-_]/g, \"-\");\n }\n\n // Fallback: sanitize full URL\n return url.replace(/[^a-zA-Z0-9-_]/g, \"-\");\n}\n","import { evaluateDetection } from \"../detection/mechanisms.js\";\nimport { idePlatformRegistry } from \"./platform-registry.js\";\n\n/**\n * Cache for detected IDE platforms (valid for process lifetime)\n */\nlet cachedIdes: string[] | null = null;\n\n/**\n * Detect if a specific IDE platform is installed using structured detectionConfig.\n */\nasync function isIdeInstalled(ideKey: string): Promise<boolean> {\n const ideConfig = idePlatformRegistry[ideKey];\n if (!ideConfig) return false;\n\n return evaluateDetection(ideConfig.detectionConfig);\n}\n\n/**\n * Detect all installed IDE platforms.\n * Results are cached for the duration of the process.\n */\nexport async function detectInstalledIdes(): Promise<string[]> {\n if (cachedIdes !== null) {\n return cachedIdes;\n }\n\n const ideKeys = Object.keys(idePlatformRegistry);\n\n // Check each IDE in parallel\n const detectionPromises = ideKeys.map(async (ideKey) => {\n const isInstalled = await isIdeInstalled(ideKey);\n return isInstalled ? ideKey : null;\n });\n\n const results = await Promise.all(detectionPromises);\n\n const installedIdes = results.filter((result): result is string => result !== null);\n\n // Cache the result\n cachedIdes = installedIdes;\n\n return installedIdes;\n}\n\n/**\n * Clear the IDE detection cache.\n * Useful for testing or when IDE installation state may have changed.\n */\nexport function clearIdeCache(): void {\n cachedIdes = null;\n}\n\n/**\n * Override IDE detection with a specific list of platforms.\n * Used for testing or when platforms are explicitly configured.\n */\nexport function setDetectedIdes(ides: string[]): void {\n cachedIdes = [...ides];\n}\n","import type { ResolvedProfileSupport } from \"../inheritance/profile-support.js\";\n\n/**\n * Developer's configured tools — from ~/.baton/config.yaml\n */\nexport interface DeveloperTools {\n /** AI tool keys the developer has installed (e.g., [\"claude-code\", \"cursor\"]) */\n aiTools: string[];\n /** IDE platform keys the developer has installed (e.g., [\"vscode\", \"jetbrains\"]) */\n idePlatforms: string[];\n}\n\n/**\n * Result of a single dimension's intersection computation (AI tools or IDE platforms).\n */\nexport interface DimensionIntersection {\n /** Tools/platforms in both developer config AND profile support (will be synced) */\n synced: string[];\n /** Tools/platforms the developer has but the profile does NOT support */\n unsupported: string[];\n /** Tools/platforms the profile supports but the developer does NOT have */\n unavailable: string[];\n}\n\n/**\n * Full intersection result across both dimensions.\n */\nexport interface IntersectionResult {\n /** AI tools intersection */\n aiTools: DimensionIntersection;\n /** IDE platforms intersection */\n idePlatforms: DimensionIntersection;\n}\n\n/**\n * Compute the intersection between a developer's configured tools and a profile's declared support.\n *\n * For each dimension (AI tools, IDE platforms), computes:\n * - synced: items present in BOTH sets (developer ∩ profile)\n * - unsupported: items the developer has but the profile doesn't support (developer \\ profile)\n * - unavailable: items the profile supports but the developer doesn't have (profile \\ developer)\n *\n * @param developerTools - The developer's configured tools from global config\n * @param profileSupport - The resolved profile support (after source → profile inheritance)\n * @returns Intersection result for both AI tools and IDE platforms\n */\nexport function computeIntersection(\n developerTools: DeveloperTools,\n profileSupport: ResolvedProfileSupport,\n): IntersectionResult {\n return {\n aiTools: computeDimensionIntersection(developerTools.aiTools, profileSupport.aiTools),\n idePlatforms: computeDimensionIntersection(\n developerTools.idePlatforms,\n profileSupport.idePlatforms,\n ),\n };\n}\n\n/**\n * Compute the intersection for a single dimension (AI tools or IDE platforms).\n *\n * Uses Set operations for efficient lookup:\n * - synced = A ∩ B\n * - unsupported = A \\ B\n * - unavailable = B \\ A\n */\nfunction computeDimensionIntersection(\n developerItems: string[],\n profileItems: string[],\n): DimensionIntersection {\n const devSet = new Set(developerItems);\n const profileSet = new Set(profileItems);\n\n const synced: string[] = [];\n const unsupported: string[] = [];\n const unavailable: string[] = [];\n\n // Iterate developer items: classify as synced or unsupported\n for (const item of developerItems) {\n if (profileSet.has(item)) {\n synced.push(item);\n } else {\n unsupported.push(item);\n }\n }\n\n // Iterate profile items: find unavailable (profile has, developer doesn't)\n for (const item of profileItems) {\n if (!devSet.has(item)) {\n unavailable.push(item);\n }\n }\n\n return { synced, unsupported, unavailable };\n}\n","import { z } from \"zod\";\n\n/**\n * Schema for .baton/preferences.yaml - project-level tool and IDE preferences\n *\n * Controls which AI tools and IDE platforms Baton configures for this project.\n * Resolution chain: Detection -> Global Config -> Project Preferences\n */\nexport const projectPreferencesSchema = z.object({\n /** Config file format version */\n version: z.literal(\"1.0\"),\n\n /** AI tool preferences */\n ai: z\n .object({\n /** When true, use global config instead of project-level tools */\n useGlobal: z.boolean(),\n\n /** List of AI tool keys (e.g., [\"claude-code\", \"cursor\"]) */\n tools: z.array(z.string()).default([]),\n })\n .default({ useGlobal: true, tools: [] }),\n\n /** IDE platform preferences */\n ide: z\n .object({\n /** When true, use global config instead of project-level platforms */\n useGlobal: z.boolean(),\n\n /** List of IDE platform keys (e.g., [\"vscode\", \"cursor\"]) */\n platforms: z.array(z.string()).default([]),\n })\n .default({ useGlobal: true, platforms: [] }),\n});\n\nexport type ProjectPreferences = z.infer<typeof projectPreferencesSchema>;\n","import { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { parse, stringify } from \"yaml\";\nimport { ManifestValidationError } from \"../errors.js\";\nimport { ensureBatonDirGitignored } from \"../utils/gitignore.js\";\nimport { type ProjectPreferences, projectPreferencesSchema } from \"./preferences-schema.js\";\n\n/**\n * Returns the path to the project preferences file.\n *\n * @param projectRoot - Absolute path to the project root\n * @returns Absolute path to .baton/preferences.yaml\n */\nexport function getPreferencesPath(projectRoot: string): string {\n return join(projectRoot, \".baton\", \"preferences.yaml\");\n}\n\n/**\n * Reads project preferences from .baton/preferences.yaml\n *\n * @param projectRoot - Absolute path to the project root\n * @returns Parsed ProjectPreferences, or null if the file doesn't exist\n * @throws {ManifestValidationError} If the file exists but contains invalid data\n */\nexport async function readProjectPreferences(\n projectRoot: string,\n): Promise<ProjectPreferences | null> {\n const prefsPath = getPreferencesPath(projectRoot);\n\n try {\n const content = await readFile(prefsPath, \"utf-8\");\n const parsed = parse(content);\n return projectPreferencesSchema.parse(parsed);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return null;\n }\n\n throw new ManifestValidationError(\n `Invalid project preferences at ${prefsPath}: ${(error as Error).message}`,\n { cause: error as Error },\n );\n }\n}\n\n/**\n * Writes project preferences to .baton/preferences.yaml\n *\n * Creates the .baton/ directory if it doesn't exist.\n *\n * @param projectRoot - Absolute path to the project root\n * @param prefs - The preferences to write (will be validated)\n * @throws {ManifestValidationError} If preferences validation fails\n */\nexport async function writeProjectPreferences(\n projectRoot: string,\n prefs: ProjectPreferences,\n): Promise<void> {\n const validated = projectPreferencesSchema.parse(prefs);\n const prefsPath = getPreferencesPath(projectRoot);\n\n await mkdir(dirname(prefsPath), { recursive: true });\n await writeFile(prefsPath, stringify(validated), \"utf-8\");\n await ensureBatonDirGitignored(projectRoot);\n}\n\n/**\n * Deletes the project preferences file.\n *\n * Does not throw if the file doesn't exist.\n *\n * @param projectRoot - Absolute path to the project root\n */\nexport async function deleteProjectPreferences(projectRoot: string): Promise<void> {\n const prefsPath = getPreferencesPath(projectRoot);\n await rm(prefsPath, { force: true });\n}\n","import { getGlobalAiTools, getGlobalIdePlatforms } from \"../config/global-config.js\";\nimport { readProjectPreferences } from \"./preferences-io.js\";\n\nexport interface ResolvedPreferences {\n ai: { source: \"global\" | \"project\"; tools: string[] };\n ide: { source: \"global\" | \"project\"; platforms: string[] };\n}\n\n/**\n * Resolves the effective AI tools and IDE platforms for a project.\n *\n * Resolution chain:\n * 1. If no .baton/preferences.yaml exists → use global config\n * 2. If useGlobal: true → use global config for that dimension\n * 3. If useGlobal: false → use project-level preferences\n *\n * AI and IDE dimensions are resolved independently, allowing mixed configs\n * (e.g., AI from project, IDE from global).\n *\n * @param projectRoot - Absolute path to the project root\n * @returns Resolved preferences with source attribution\n */\nexport async function resolvePreferences(projectRoot: string): Promise<ResolvedPreferences> {\n const prefs = await readProjectPreferences(projectRoot);\n\n // No preferences file → everything comes from global\n if (!prefs) {\n const [tools, platforms] = await Promise.all([getGlobalAiTools(), getGlobalIdePlatforms()]);\n return {\n ai: { source: \"global\", tools },\n ide: { source: \"global\", platforms },\n };\n }\n\n // Resolve AI dimension\n const ai = prefs.ai.useGlobal\n ? { source: \"global\" as const, tools: await getGlobalAiTools() }\n : { source: \"project\" as const, tools: prefs.ai.tools };\n\n // Resolve IDE dimension\n const ide = prefs.ide.useGlobal\n ? { source: \"global\" as const, platforms: await getGlobalIdePlatforms() }\n : { source: \"project\" as const, platforms: prefs.ide.platforms };\n\n return { ai, ide };\n}\n","import { execFile } from \"node:child_process\";\n\nexport type InstallMethod =\n | { type: \"homebrew\"; bin: string; args: string[] }\n | { type: \"npm\"; bin: string; args: string[] }\n | { type: \"pnpm\"; bin: string; args: string[] }\n | { type: \"bun\"; bin: string; args: string[] }\n | { type: \"unknown\" };\n\n/**\n * Detect how Baton was installed by analyzing the resolved binary path.\n * Order matters: Homebrew first (may contain node_modules internally),\n * then pnpm, bun, npm.\n */\nexport async function detectInstallMethod(): Promise<InstallMethod> {\n const binPath = await resolveBinaryPath();\n if (!binPath) {\n return { type: \"unknown\" };\n }\n\n const normalized = binPath.toLowerCase();\n\n if (normalized.includes(\"cellar\") || normalized.includes(\"homebrew\")) {\n return { type: \"homebrew\", bin: \"brew\", args: [\"upgrade\", \"baton-dx\"] };\n }\n\n if (normalized.includes(\"node_modules/.pnpm\") || normalized.includes(\".pnpm\")) {\n return { type: \"pnpm\", bin: \"pnpm\", args: [\"update\", \"-g\", \"@baton-dx/cli\", \"--latest\"] };\n }\n\n if (normalized.includes(\".bun\") || normalized.includes(\"/bun/\")) {\n return { type: \"bun\", bin: \"bun\", args: [\"update\", \"-g\", \"@baton-dx/cli\", \"--latest\"] };\n }\n\n if (normalized.includes(\"node_modules\") || normalized.includes(\"npm\")) {\n return { type: \"npm\", bin: \"npm\", args: [\"install\", \"-g\", \"@baton-dx/cli@latest\"] };\n }\n\n return { type: \"unknown\" };\n}\n\n/** Format an install method as a human-readable command string. */\nexport function formatInstallCommand(method: InstallMethod): string {\n if (method.type === \"unknown\") return \"\";\n return `${method.bin} ${method.args.join(\" \")}`;\n}\n\nasync function resolveBinaryPath(): Promise<string | undefined> {\n // First try process.argv[1] which is the script being executed\n if (process.argv[1]) {\n return process.argv[1];\n }\n\n // Fallback: use `which` to find the binary\n try {\n const stdout = await new Promise<string>((resolve, reject) => {\n execFile(\"which\", [\"baton\"], (error, out) => {\n if (error) reject(error);\n else resolve(out);\n });\n });\n return stdout.trim();\n } catch {\n return undefined;\n }\n}\n","import { gt } from \"semver\";\nimport { z } from \"zod\";\n\nconst NPM_REGISTRY_URL = \"https://registry.npmjs.org/@baton-dx/cli/latest\";\n\nconst npmRegistryResponseSchema = z.object({\n version: z.string(),\n description: z.string().optional(),\n});\n\nexport interface LatestVersionResult {\n version: string;\n description?: string;\n}\n\nexport interface UpdateCheckResult {\n currentVersion: string;\n latestVersion: string;\n updateAvailable: boolean;\n}\n\n/**\n * Check if a newer version is available by comparing current vs latest.\n * Uses semver for accurate comparison.\n */\nexport function isUpdateAvailable(\n currentVersion: string,\n latestVersion: string,\n): UpdateCheckResult {\n return {\n currentVersion,\n latestVersion,\n updateAvailable: gt(latestVersion, currentVersion),\n };\n}\n\n/**\n * Fetch the latest stable version of @baton-dx/cli from the npm registry.\n * Uses Node.js native fetch (available since Node 18).\n */\nexport async function checkLatestVersion(): Promise<LatestVersionResult> {\n const response = await fetch(NPM_REGISTRY_URL, {\n headers: { Accept: \"application/json\" },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to check for updates: npm registry returned ${response.status}`);\n }\n\n const parsed = npmRegistryResponseSchema.safeParse(await response.json());\n if (!parsed.success) {\n throw new Error(\"Failed to parse version from npm registry response\");\n }\n\n return {\n version: parsed.data.version,\n description: parsed.data.description,\n };\n}\n"],"x_google_ignoreList":[3,4,5,6,7,8,9,36,37,38,39,40,41,42,43,44,45,46,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154],"mappings":"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AAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,GAAG,EAAE;IAAE,CAAC,GAAG,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;IAAE,CAAC,IAAI,EAAE;I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AG,GAAG;KAAG,IAAI;KAAG,IAAI;KAAG,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE;IAAE;KAAE,GAAG,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,GAAG,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE;IAAE;KAAE,GAAG,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE;IAAE;KAAE,GAAG,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE;IAAE;KAAE,GAAG,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE;IAAE;KAAE,GAAG,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE;IAAE;KAAE,GAAG,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE;IAAE;KAAE,GAAG,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE,IAAI,CAAC,GAAG,EAAE;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,GAAG;KAAI,GAAG;KAAG,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,GAAG;KAAI,GAAG;KAAG,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,GAAG;KAAI,GAAG;KAAG,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,GAAG,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,GAAG;KAAI,GAAG;KAAG,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,GAAG;KAAI,GAAG;KAAG,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,GAAG,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,GAAG,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI;KAAK,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI,CAAC,GAAG,IAAI;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,IAAI;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,GAAG,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI;KAAK,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,GAAG,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,IAAI;KAAI,IAAI;KAAK,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;IAAE;KAAE,IAAI;KAAK,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI,CAAC,GAAG,IAAI;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI;KAAK,IAAI,CAAC,GAAG,IAAI;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,GAAG,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;IAAE;KAAE,IAAI;KAAI,IAAI;KAAK,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,GAAG,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI;KAAK,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI,IAAI;KAAI,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAI;IAAE;KAAE,GAAG,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,GAAG,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,IAAI,CAAC,GAAG,IAAI;KAAE,IAAI;KAAK;IAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI;KAAK,IAAI;KAAK,IAAI,CAAC,GAAG,IAAI;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,IAAI;KAAE,IAAI,CAAC,GAAG,IAAI;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,IAAI;KAAE,IAAI,CAAC,GAAG,IAAI;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE;IAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE,EAAE,IAAI,CAAC,GAAG,GAAG,EAAE;IAAE;KAAE,IAAI,CAAC,GAAG,IAAI;KAAE,IAAI,CAAC,GAAG,IAAI;KAAE;IAAE;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IAAI,CAAC,GAAG,GAAG;KAAE,IA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"}