@nipe-solutions/flex-layout-codemod 2.0.0-beta.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.
- package/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/README.md +100 -0
- package/dist/cli.js +6205 -0
- package/dist/cli.js.map +1 -0
- package/package.json +102 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/ignore/index.js","../src/cli/run-cli.ts","../package.json","../src/logger.ts","../src/adapter/tailwind/tailwind-value.parser.ts","../src/adapter/tailwind/directives/layout.strategy.ts","../src/adapter/tailwind/directives/layout-gap.strategy.ts","../src/adapter/tailwind/directives/flex-item.strategy.ts","../src/adapter/tailwind/directives/flex-offset.strategy.ts","../src/adapter/tailwind/directives/layout-align.strategy.ts","../src/adapter/tailwind/directives/flex-align.strategy.ts","../src/adapter/tailwind/directives/flex-fill.strategy.ts","../src/adapter/tailwind/directives/flex-order.strategy.ts","../src/adapter/tailwind/independent-directive.registry.ts","../src/template/template-attribute.ts","../src/analyzer/flex-layout.catalog.ts","../src/breakpoint/breakpoint-catalog.ts","../src/adapter/tailwind/tailwind-arbitrary-syntax.ts","../src/adapter/tailwind/extended/css-property-ownership.ts","../src/adapter/tailwind/extended/tailwind-arbitrary-value-ownership.ts","../src/adapter/tailwind/tailwind-class-conflict.ts","../src/adapter/tailwind/responsive-variant.emitter.ts","../src/adapter/tailwind/responsive-plan.ts","../src/adapter/tailwind/responsive-family.planner.ts","../src/adapter/tailwind/visibility/visibility.emitter.ts","../src/adapter/tailwind/visibility/display-composition.planner.ts","../src/adapter/tailwind/visibility/visibility-value.parser.ts","../src/adapter/tailwind/visibility/visibility-state.planner.ts","../src/adapter/tailwind/visibility/literal-style-display.ts","../src/adapter/tailwind/visibility/visible-display.resolver.ts","../src/edit/html-attribute-value.ts","../src/adapter/tailwind/extended/tailwind-arbitrary-property.encoder.ts","../src/adapter/tailwind/extended/responsive-style-value.parser.ts","../src/adapter/tailwind/extended/extended-family.planner.ts","../src/adapter/tailwind/extended/tailwind-candidate-classifier.ts","../src/adapter/tailwind/extended/extended-display-composition.planner.ts","../src/adapter/tailwind/extended/extended-responsive.emitter.ts","../src/adapter/tailwind/extended/responsive-class-value.parser.ts","../src/adapter/tailwind/extended/extended-responsive.planner.ts","../src/adapter/tailwind/extended/generated-property-composition.planner.ts","../src/adapter/tailwind/tailwind.adapter.ts","../src/adapter/adapter.factory.ts","../src/migrator/migrator.ts","../src/lib/gitignore.helper.ts","../src/report/migration-report.builder.ts","../src/util/compare-code-units.ts","../src/migrator/file.migrator.ts","../src/analyzer/flex-layout-attribute.analyzer.ts","../src/analyzer/template.analyzer.ts","../src/edit/source-editor.ts","../src/lib/atomic-file.writer.ts","../src/planner/conversion-planner.ts","../src/template/angular-template.parser.ts","../src/migrator/base.migrator.ts","../src/migrator/folder.migrator.ts","../src/report/json-report.writer.ts","../src/report/terminal.presenter.ts","../src/util/error.util.ts","../src/cli/exit-policy.ts","../src/cli/report-path.validator.ts","../src/main.ts"],"sourcesContent":["// A simple implementation of make-array\nfunction makeArray (subject) {\n return Array.isArray(subject)\n ? subject\n : [subject]\n}\n\nconst EMPTY = ''\nconst SPACE = ' '\nconst ESCAPE = '\\\\'\nconst REGEX_TEST_BLANK_LINE = /^\\s+$/\nconst REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\\\]|^)\\\\$/\nconst REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/\nconst REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/\nconst REGEX_SPLITALL_CRLF = /\\r?\\n/g\n// /foo,\n// ./foo,\n// ../foo,\n// .\n// ..\nconst REGEX_TEST_INVALID_PATH = /^\\.*\\/|^\\.+$/\n\nconst SLASH = '/'\n\n// Do not use ternary expression here, since \"istanbul ignore next\" is buggy\nlet TMP_KEY_IGNORE = 'node-ignore'\n/* istanbul ignore else */\nif (typeof Symbol !== 'undefined') {\n TMP_KEY_IGNORE = Symbol.for('node-ignore')\n}\nconst KEY_IGNORE = TMP_KEY_IGNORE\n\nconst define = (object, key, value) =>\n Object.defineProperty(object, key, {value})\n\nconst REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g\n\nconst RETURN_FALSE = () => false\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nconst sanitizeRange = range => range.replace(\n REGEX_REGEXP_RANGE,\n (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)\n ? match\n // Invalid range (out of order) which is ok for gitignore rules but\n // fatal for JavaScript regular expression, so eliminate it.\n : EMPTY\n)\n\n// See fixtures #59\nconst cleanRangeBackSlash = slashes => {\n const {length} = slashes\n return slashes.slice(0, length - length % 2)\n}\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// > (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n// you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nconst REPLACERS = [\n\n // > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n [\n // (a\\ ) -> (a )\n // (a ) -> (a)\n // (a \\ ) -> (a )\n /\\\\?\\s+$/,\n match => match.indexOf('\\\\') === 0\n ? SPACE\n : EMPTY\n ],\n\n // replace (\\ ) with ' '\n [\n /\\\\\\s/g,\n () => SPACE\n ],\n\n // Escape metacharacters\n // which is written down by users but means special for regular expressions.\n\n // > There are 12 characters with special meanings:\n // > - the backslash \\,\n // > - the caret ^,\n // > - the dollar sign $,\n // > - the period or dot .,\n // > - the vertical bar or pipe symbol |,\n // > - the question mark ?,\n // > - the asterisk or star *,\n // > - the plus sign +,\n // > - the opening parenthesis (,\n // > - the closing parenthesis ),\n // > - and the opening square bracket [,\n // > - the opening curly brace {,\n // > These special characters are often called \"metacharacters\".\n [\n /[\\\\$.|*+(){^]/g,\n match => `\\\\${match}`\n ],\n\n [\n // > a question mark (?) matches a single character\n /(?!\\\\)\\?/g,\n () => '[^/]'\n ],\n\n // leading slash\n [\n\n // > A leading slash matches the beginning of the pathname.\n // > For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n // A leading slash matches the beginning of the pathname\n /^\\//,\n () => '^'\n ],\n\n // replace special metacharacter slash after the leading slash\n [\n /\\//g,\n () => '\\\\/'\n ],\n\n [\n // > A leading \"**\" followed by a slash means match in all directories.\n // > For example, \"**/foo\" matches file or directory \"foo\" anywhere,\n // > the same as pattern \"foo\".\n // > \"**/foo/bar\" matches file or directory \"bar\" anywhere that is directly\n // > under directory \"foo\".\n // Notice that the '*'s have been replaced as '\\\\*'\n /^\\^*\\\\\\*\\\\\\*\\\\\\//,\n\n // '**/foo' <-> 'foo'\n () => '^(?:.*\\\\/)?'\n ],\n\n // starting\n [\n // there will be no leading '/'\n // (which has been replaced by section \"leading slash\")\n // If starts with '**', adding a '^' to the regular expression also works\n /^(?=[^^])/,\n function startingReplacer () {\n // If has a slash `/` at the beginning or middle\n return !/\\/(?!$)/.test(this)\n // > Prior to 2.22.1\n // > If the pattern does not contain a slash /,\n // > Git treats it as a shell glob pattern\n // Actually, if there is only a trailing slash,\n // git also treats it as a shell glob pattern\n\n // After 2.22.1 (compatible but clearer)\n // > If there is a separator at the beginning or middle (or both)\n // > of the pattern, then the pattern is relative to the directory\n // > level of the particular .gitignore file itself.\n // > Otherwise the pattern may also match at any level below\n // > the .gitignore level.\n ? '(?:^|\\\\/)'\n\n // > Otherwise, Git treats the pattern as a shell glob suitable for\n // > consumption by fnmatch(3)\n : '^'\n }\n ],\n\n // two globstars\n [\n // Use lookahead assertions so that we could match more than one `'/**'`\n /\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n\n // Zero, one or several directories\n // should not use '*', or it will be replaced by the next replacer\n\n // Check if it is not the last `'/**'`\n (_, index, str) => index + 6 < str.length\n\n // case: /**/\n // > A slash followed by two consecutive asterisks then a slash matches\n // > zero or more directories.\n // > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n // '/**/'\n ? '(?:\\\\/[^\\\\/]+)*'\n\n // case: /**\n // > A trailing `\"/**\"` matches everything inside.\n\n // #21: everything inside but it should not include the current folder\n : '\\\\/.+'\n ],\n\n // normal intermediate wildcards\n [\n // Never replace escaped '*'\n // ignore rule '\\*' will match the path '*'\n\n // 'abc.*/' -> go\n // 'abc.*' -> skip this rule,\n // coz trailing single wildcard will be handed by [trailing wildcard]\n /(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,\n\n // '*.js' matches '.js'\n // '*.js' doesn't match 'abc'\n (_, p1, p2) => {\n // 1.\n // > An asterisk \"*\" matches anything except a slash.\n // 2.\n // > Other consecutive asterisks are considered regular asterisks\n // > and will match according to the previous rules.\n const unescaped = p2.replace(/\\\\\\*/g, '[^\\\\/]*')\n return p1 + unescaped\n }\n ],\n\n [\n // unescape, revert step 3 except for back slash\n // For example, if a user escape a '\\\\*',\n // after step 3, the result will be '\\\\\\\\\\\\*'\n /\\\\\\\\\\\\(?=[$.|*+(){^])/g,\n () => ESCAPE\n ],\n\n [\n // '\\\\\\\\' -> '\\\\'\n /\\\\\\\\/g,\n () => ESCAPE\n ],\n\n [\n // > The range notation, e.g. [a-zA-Z],\n // > can be used to match one of the characters in a range.\n\n // `\\` is escaped by step 3\n /(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,\n (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE\n // '\\\\[bar]' -> '\\\\\\\\[bar\\\\]'\n ? `\\\\[${range}${cleanRangeBackSlash(endEscape)}${close}`\n : close === ']'\n ? endEscape.length % 2 === 0\n // A normal case, and it is a range notation\n // '[bar]'\n // '[bar\\\\\\\\]'\n ? `[${sanitizeRange(range)}${endEscape}]`\n // Invalid range notaton\n // '[bar\\\\]' -> '[bar\\\\\\\\]'\n : '[]'\n : '[]'\n ],\n\n // ending\n [\n // 'js' will not match 'js.'\n // 'ab' will not match 'abc'\n /(?:[^*])$/,\n\n // WTF!\n // https://git-scm.com/docs/gitignore\n // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n // which re-fixes #24, #38\n\n // > If there is a separator at the end of the pattern then the pattern\n // > will only match directories, otherwise the pattern can match both\n // > files and directories.\n\n // 'js*' will not match 'a.js'\n // 'js/' will not match 'a.js'\n // 'js' will match 'a.js' and 'a.js/'\n match => /\\/$/.test(match)\n // foo/ will not match 'foo'\n ? `${match}$`\n // foo matches 'foo' and 'foo/'\n : `${match}(?=$|\\\\/$)`\n ],\n\n // trailing wildcard\n [\n /(\\^|\\\\\\/)?\\\\\\*$/,\n (_, p1) => {\n const prefix = p1\n // '\\^':\n // '/*' does not match EMPTY\n // '/*' does not match everything\n\n // '\\\\\\/':\n // 'abc/*' does not match 'abc/'\n ? `${p1}[^/]+`\n\n // 'a*' matches 'a'\n // 'a*' matches 'aa'\n : '[^/]*'\n\n return `${prefix}(?=$|\\\\/$)`\n }\n ],\n]\n\n// A simple cache, because an ignore rule only has only one certain meaning\nconst regexCache = Object.create(null)\n\n// @param {pattern}\nconst makeRegex = (pattern, ignoreCase) => {\n let source = regexCache[pattern]\n\n if (!source) {\n source = REPLACERS.reduce(\n (prev, current) => prev.replace(current[0], current[1].bind(pattern)),\n pattern\n )\n regexCache[pattern] = source\n }\n\n return ignoreCase\n ? new RegExp(source, 'i')\n : new RegExp(source)\n}\n\nconst isString = subject => typeof subject === 'string'\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nconst checkPattern = pattern => pattern\n && isString(pattern)\n && !REGEX_TEST_BLANK_LINE.test(pattern)\n && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)\n\n // > A line starting with # serves as a comment.\n && pattern.indexOf('#') !== 0\n\nconst splitPattern = pattern => pattern.split(REGEX_SPLITALL_CRLF)\n\nclass IgnoreRule {\n constructor (\n origin,\n pattern,\n negative,\n regex\n ) {\n this.origin = origin\n this.pattern = pattern\n this.negative = negative\n this.regex = regex\n }\n}\n\nconst createRule = (pattern, ignoreCase) => {\n const origin = pattern\n let negative = false\n\n // > An optional prefix \"!\" which negates the pattern;\n if (pattern.indexOf('!') === 0) {\n negative = true\n pattern = pattern.substr(1)\n }\n\n pattern = pattern\n // > Put a backslash (\"\\\") in front of the first \"!\" for patterns that\n // > begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n // > Put a backslash (\"\\\") in front of the first hash for patterns that\n // > begin with a hash.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')\n\n const regex = makeRegex(pattern, ignoreCase)\n\n return new IgnoreRule(\n origin,\n pattern,\n negative,\n regex\n )\n}\n\nconst throwError = (message, Ctor) => {\n throw new Ctor(message)\n}\n\nconst checkPath = (path, originalPath, doThrow) => {\n if (!isString(path)) {\n return doThrow(\n `path must be a string, but got \\`${originalPath}\\``,\n TypeError\n )\n }\n\n // We don't know if we should ignore EMPTY, so throw\n if (!path) {\n return doThrow(`path must not be empty`, TypeError)\n }\n\n // Check if it is a relative path\n if (checkPath.isNotRelative(path)) {\n const r = '`path.relative()`d'\n return doThrow(\n `path should be a ${r} string, but got \"${originalPath}\"`,\n RangeError\n )\n }\n\n return true\n}\n\nconst isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)\n\ncheckPath.isNotRelative = isNotRelative\ncheckPath.convert = p => p\n\nclass Ignore {\n constructor ({\n ignorecase = true,\n ignoreCase = ignorecase,\n allowRelativePaths = false\n } = {}) {\n define(this, KEY_IGNORE, true)\n\n this._rules = []\n this._ignoreCase = ignoreCase\n this._allowRelativePaths = allowRelativePaths\n this._initCache()\n }\n\n _initCache () {\n this._ignoreCache = Object.create(null)\n this._testCache = Object.create(null)\n }\n\n _addPattern (pattern) {\n // #32\n if (pattern && pattern[KEY_IGNORE]) {\n this._rules = this._rules.concat(pattern._rules)\n this._added = true\n return\n }\n\n if (checkPattern(pattern)) {\n const rule = createRule(pattern, this._ignoreCase)\n this._added = true\n this._rules.push(rule)\n }\n }\n\n // @param {Array<string> | string | Ignore} pattern\n add (pattern) {\n this._added = false\n\n makeArray(\n isString(pattern)\n ? splitPattern(pattern)\n : pattern\n ).forEach(this._addPattern, this)\n\n // Some rules have just added to the ignore,\n // making the behavior changed.\n if (this._added) {\n this._initCache()\n }\n\n return this\n }\n\n // legacy\n addPattern (pattern) {\n return this.add(pattern)\n }\n\n // | ignored : unignored\n // negative | 0:0 | 0:1 | 1:0 | 1:1\n // -------- | ------- | ------- | ------- | --------\n // 0 | TEST | TEST | SKIP | X\n // 1 | TESTIF | SKIP | TEST | X\n\n // - SKIP: always skip\n // - TEST: always test\n // - TESTIF: only test if checkUnignored\n // - X: that never happen\n\n // @param {boolean} whether should check if the path is unignored,\n // setting `checkUnignored` to `false` could reduce additional\n // path matching.\n\n // @returns {TestResult} true if a file is ignored\n _testOne (path, checkUnignored) {\n let ignored = false\n let unignored = false\n\n this._rules.forEach(rule => {\n const {negative} = rule\n if (\n unignored === negative && ignored !== unignored\n || negative && !ignored && !unignored && !checkUnignored\n ) {\n return\n }\n\n const matched = rule.regex.test(path)\n\n if (matched) {\n ignored = !negative\n unignored = negative\n }\n })\n\n return {\n ignored,\n unignored\n }\n }\n\n // @returns {TestResult}\n _test (originalPath, cache, checkUnignored, slices) {\n const path = originalPath\n // Supports nullable path\n && checkPath.convert(originalPath)\n\n checkPath(\n path,\n originalPath,\n this._allowRelativePaths\n ? RETURN_FALSE\n : throwError\n )\n\n return this._t(path, cache, checkUnignored, slices)\n }\n\n _t (path, cache, checkUnignored, slices) {\n if (path in cache) {\n return cache[path]\n }\n\n if (!slices) {\n // path/to/a.js\n // ['path', 'to', 'a.js']\n slices = path.split(SLASH)\n }\n\n slices.pop()\n\n // If the path has no parent directory, just test it\n if (!slices.length) {\n return cache[path] = this._testOne(path, checkUnignored)\n }\n\n const parent = this._t(\n slices.join(SLASH) + SLASH,\n cache,\n checkUnignored,\n slices\n )\n\n // If the path contains a parent directory, check the parent first\n return cache[path] = parent.ignored\n // > It is not possible to re-include a file if a parent directory of\n // > that file is excluded.\n ? parent\n : this._testOne(path, checkUnignored)\n }\n\n ignores (path) {\n return this._test(path, this._ignoreCache, false).ignored\n }\n\n createFilter () {\n return path => !this.ignores(path)\n }\n\n filter (paths) {\n return makeArray(paths).filter(this.createFilter())\n }\n\n // @returns {TestResult}\n test (path) {\n return this._test(path, this._testCache, true)\n }\n}\n\nconst factory = options => new Ignore(options)\n\nconst isPathValid = path =>\n checkPath(path && checkPath.convert(path), path, RETURN_FALSE)\n\nfactory.isPathValid = isPathValid\n\n// Fixes typescript\nfactory.default = factory\n\nmodule.exports = factory\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore if */\nif (\n // Detect `process` so that it can run in browsers.\n typeof process !== 'undefined'\n && (\n process.env && process.env.IGNORE_TEST_WIN32\n || process.platform === 'win32'\n )\n) {\n /* eslint no-control-regex: \"off\" */\n const makePosix = str => /^\\\\\\\\\\?\\\\/.test(str)\n || /[\"<>|\\u0000-\\u001F]+/u.test(str)\n ? str\n : str.replace(/\\\\/g, '/')\n\n checkPath.convert = makePosix\n\n // 'C:\\\\foo' <- 'C:\\\\foo' has been converted to 'C:/'\n // 'd:\\\\foo'\n const REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i\n checkPath.isNotRelative = path =>\n REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path)\n || isNotRelative(path)\n}\n","import { Command, CommanderError, Option } from 'commander';\nimport packageJson from '../../package.json' with { type: 'json' };\nimport { AdapterFactory } from '../adapter/adapter.factory';\nimport { logger } from '../logger';\nimport { Migrator } from '../migrator/migrator';\nimport { JsonReportWriter } from '../report/json-report.writer';\nimport { TerminalPresenter, type TextOutput } from '../report/terminal.presenter';\nimport { getErrorMessage } from '../util/error.util';\nimport { resolveExitCode } from './exit-policy';\nimport { validateReportPath } from './report-path.validator';\n\ninterface ProgramOptions {\n readonly output?: string;\n readonly target: string;\n readonly dryRun: boolean;\n readonly report?: string;\n readonly allowUnresolved: boolean;\n readonly debug: boolean;\n}\n\nexport interface CliOutput {\n readonly stdout: TextOutput;\n readonly stderr: TextOutput;\n}\n\nconst processOutput: CliOutput = {\n stdout: process.stdout,\n stderr: process.stderr,\n};\n\nexport async function runCli(argv: readonly string[], output: CliOutput = processOutput): Promise<0 | 1 | 2> {\n let exitCode: 0 | 1 | 2 = 0;\n let debug = false;\n const program = new Command();\n\n program\n .name('flex-layout-codemod')\n .version(packageJson.version)\n .description('Migrate Angular Flex-Layout attributes to Tailwind CSS utilities')\n .exitOverride()\n .configureOutput({\n writeOut: text => output.stdout.write(text),\n writeErr: text => output.stderr.write(text),\n })\n .argument('<input>', 'input HTML file or folder')\n .option(\n '-o, --output <path>',\n 'output HTML file or folder; single-file output must end in .html; defaults to input',\n )\n .addOption(\n new Option('-t, --target <target>', 'conversion target; currently tailwind')\n .choices(['tailwind'])\n .default('tailwind'),\n )\n .option('--dry-run', 'analyze and plan without writing templates', false)\n .option('--report <path>', 'atomically write a JSON report; path must end in .json')\n .option('--allow-unresolved', 'return success when unresolved inputs remain', false)\n .option('-d, --debug', 'enable debug logging', false)\n .action(async (input: string, options: ProgramOptions) => {\n debug = options.debug;\n logger.level = debug ? 'debug' : 'warn';\n\n const destination = options.output ?? input;\n const adapter = AdapterFactory.create(options.target);\n if (options.report !== undefined) {\n validateReportPath(options.report);\n }\n const report = await new Migrator(adapter, input, destination).migrate({ dryRun: options.dryRun });\n const reportOutput = report.summary.parseErrors > 0 ? output.stderr : output.stdout;\n\n new TerminalPresenter().present(report, reportOutput);\n if (options.report !== undefined) {\n await new JsonReportWriter().write(options.report, report);\n }\n\n exitCode = resolveExitCode(report, options.allowUnresolved);\n });\n\n try {\n await program.parseAsync([...argv]);\n return exitCode;\n } catch (error: unknown) {\n if (error instanceof CommanderError) {\n return error.exitCode === 0 ? 0 : 1;\n }\n\n output.stderr.write(`Error: ${getErrorMessage(error)}\\n`);\n if (debug && error instanceof Error && error.stack) {\n output.stderr.write(`${error.stack}\\n`);\n }\n return 1;\n }\n}\n","{\n \"name\": \"@nipe-solutions/flex-layout-codemod\",\n \"version\": \"2.0.0-beta.1\",\n \"description\": \"A safety-first codemod for migrating Angular Flex-Layout templates to native CSS or Tailwind CSS.\",\n \"type\": \"module\",\n \"engines\": {\n \"node\": \">=24\"\n },\n \"packageManager\": \"npm@11.19.0\",\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\",\n \"CHANGELOG.md\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"clean\": \"rimraf dist coverage\",\n \"build\": \"tsup\",\n \"typecheck\": \"tsc --noEmit\",\n \"start\": \"ts-node ./src/main.ts\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"lint\": \"eslint .\",\n \"lint:fix\": \"eslint . --fix\",\n \"format\": \"prettier --check .\",\n \"format:write\": \"prettier --write .\",\n \"verify\": \"npm run format && npm run lint && npm run typecheck && npm run test:coverage && npm run build && npm run package:check\",\n \"package:check\": \"node scripts/verify-package.mjs\",\n \"changeset\": \"changeset add\",\n \"version-packages\": \"changeset version\",\n \"release:prepare\": \"node scripts/release-artifact.mjs\",\n \"release:verify\": \"node scripts/release-artifact.mjs --verify-retained\",\n \"release:version\": \"changeset version && npm install --package-lock-only --ignore-scripts\",\n \"prepare\": \"husky\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/NIPE-Solutions/flex-layout-migrator.git\"\n },\n \"keywords\": [\n \"angular\",\n \"flex-layout\",\n \"migration\",\n \"tailwindcss\"\n ],\n \"author\": \"Nicholas Petrasek\",\n \"license\": \"MIT\",\n \"bugs\": {\n \"url\": \"https://github.com/NIPE-Solutions/flex-layout-migrator/issues\"\n },\n \"homepage\": \"https://github.com/NIPE-Solutions/flex-layout-migrator#readme\",\n \"dependencies\": {\n \"@angular/compiler\": \"21.2.22\",\n \"commander\": \"^15.0.0\",\n \"fs-extra\": \"^11.4.0\",\n \"winston\": \"^3.19.0\"\n },\n \"bin\": {\n \"flex-layout-codemod\": \"./dist/cli.js\"\n },\n \"devDependencies\": {\n \"@changesets/cli\": \"^3.0.1\",\n \"@eslint/js\": \"^10.0.1\",\n \"@tailwindcss/cli\": \"4.3.3\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/mock-fs\": \"^4.13.4\",\n \"@types/node\": \"^26.4.0\",\n \"@vitest/coverage-v8\": \"^4.1.11\",\n \"eslint\": \"^10.9.1\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"husky\": \"^9.1.7\",\n \"lint-staged\": \"^17.4.1\",\n \"mock-fs\": \"^5.5.0\",\n \"postcss\": \"^8.5.26\",\n \"prettier\": \"^3.9.6\",\n \"rimraf\": \"^6.1.3\",\n \"tailwindcss\": \"4.3.3\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^6.0.3\",\n \"typescript-eslint\": \"^8.68.0\",\n \"vitest\": \"^4.1.11\",\n \"yaml\": \"^2.9.0\"\n },\n \"husky\": {\n \"hooks\": {\n \"pre-commit\": \"lint-staged\"\n }\n },\n \"lint-staged\": {\n \"*.{js,mjs,ts}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"*.{json,md,yml,yaml}\": [\n \"prettier --write\"\n ]\n }\n}\n","import { createLogger, format, transports } from 'winston';\n\nconst { combine, timestamp, printf, colorize, splat } = format;\n\nconst myFormat = printf(({ timestamp, level, message, label, lineNumber }) => {\n const timestampValue =\n typeof timestamp === 'string' || typeof timestamp === 'number' || timestamp instanceof Date\n ? timestamp\n : Date.now();\n const formattedTimestamp = new Date(timestampValue)\n .toISOString()\n .replace('T', ' ')\n .replace(/\\.\\d{3}Z$/, 'Z');\n const fileLineInfo = label && lineNumber ? `(${label}:${lineNumber})` : '';\n return `[${formattedTimestamp}] ${level}: ${message} ${fileLineInfo}`;\n});\n\nexport const logger = createLogger({\n level: 'info',\n format: combine(splat(), colorize(), timestamp(), myFormat),\n transports: [new transports.Console()],\n});\n","import type { CssLength, ParsedValue } from './tailwind-semantic.model';\n\nconst NUMBER = String.raw`-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)`;\nconst LENGTH = new RegExp(`^${NUMBER}(?:%|px|r?em|v(?:w|h|min|max)|ch|ex|cm|mm|in|pt|pc)$`);\nconst UNITLESS = new RegExp(`^${NUMBER}$`);\nconst CSS_FUNCTION = /^(?:calc|clamp|min|max|var)\\([a-zA-Z0-9_%+*/.,()\\-\\s]+\\)$/;\n\nexport interface CssLengthOptions {\n readonly fallbackUnit: 'px' | '%';\n}\n\nexport function parseCssLength(source: string, options: CssLengthOptions): ParsedValue<CssLength> {\n const value = source.trim();\n if (UNITLESS.test(value)) {\n return { ok: true, value: `${value}${options.fallbackUnit}` as CssLength };\n }\n if (LENGTH.test(value) || CSS_FUNCTION.test(value)) {\n return { ok: true, value: value as CssLength };\n }\n return { ok: false };\n}\n\nexport function arbitraryValue(value: string): string {\n return `[${value.replaceAll(/\\s+/g, '_')}]`;\n}\n","import type { ParsedValue } from '../tailwind-semantic.model';\n\nexport type LayoutDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';\nexport type LayoutWrap = 'nowrap' | 'wrap' | 'wrap-reverse';\n\nexport interface LayoutValue {\n readonly direction: LayoutDirection;\n readonly wrap: LayoutWrap;\n readonly explicitWrap: boolean;\n readonly inline: boolean;\n}\n\nexport interface TailwindClassPlan {\n readonly classNames: readonly string[];\n}\n\nconst directions = new Set<LayoutDirection>(['row', 'row-reverse', 'column', 'column-reverse']);\nconst wraps = new Set<LayoutWrap>(['nowrap', 'wrap', 'wrap-reverse']);\n\nexport function parseLayout(value: string): ParsedValue<LayoutValue> {\n const tokens = value.split(/\\s+/).filter(Boolean);\n const direction = (tokens.shift() ?? 'row') as LayoutDirection;\n if (!directions.has(direction)) return { ok: false };\n\n const wrapTokens = tokens.filter(token => wraps.has(token as LayoutWrap));\n if (wrapTokens.length > 1) return { ok: false };\n let wrap: LayoutWrap = 'nowrap';\n let inline = false;\n for (const token of tokens) {\n if (wraps.has(token as LayoutWrap)) {\n wrap = token as LayoutWrap;\n } else if (token === 'inline' && !inline) {\n inline = true;\n } else {\n return { ok: false };\n }\n }\n\n return { ok: true, value: { direction, wrap, explicitWrap: wrapTokens.length === 1, inline } };\n}\n\nexport function layoutClassNames(layout: LayoutValue): readonly string[] {\n const direction = {\n row: 'flex-row',\n 'row-reverse': 'flex-row-reverse',\n column: 'flex-col',\n 'column-reverse': 'flex-col-reverse',\n }[layout.direction];\n const wrap = layout.explicitWrap ? [`flex-${layout.wrap}`] : [];\n return [layout.inline ? 'inline-flex' : 'flex', direction, ...wrap, 'box-border'];\n}\n\nexport function planLayout(value: string): ParsedValue<TailwindClassPlan> {\n const parsed = parseLayout(value);\n return parsed.ok ? { ok: true, value: { classNames: layoutClassNames(parsed.value) } } : parsed;\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport { arbitraryValue, parseCssLength } from '../tailwind-value.parser';\nimport { parseLayout } from './layout.strategy';\n\nexport function planLayoutGap(value: string, layoutValue: string | undefined): TailwindStrategyResult {\n const normalized = value.trim();\n if (!normalized) return { status: 'invalid', code: 'invalid-value' };\n\n if (normalized.endsWith(' grid')) {\n return {\n status: 'review',\n code: 'semantic-unsupported',\n reason: 'The Flex-Layout grid gap mode changes child padding and compensating host margins.',\n suggestion: 'Replace the grid gap manually after reviewing the child padding behavior.',\n };\n }\n\n const gap = parseCssLength(normalized, { fallbackUnit: 'px' });\n if (!gap.ok) return { status: 'invalid', code: 'invalid-value' };\n if (gap.value.startsWith('-')) {\n return {\n status: 'review',\n code: 'semantic-unsupported',\n reason: 'Flex-Layout accepts a negative margin gap, but CSS gap does not accept negative values.',\n suggestion: 'Preserve the margin-based spacing or migrate the child margins manually.',\n };\n }\n if (gap.value.includes('(')) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'The computed gap may resolve to a negative value that CSS gap cannot represent.',\n suggestion: 'Prove the value is nonnegative or migrate the margin-based spacing manually.',\n };\n }\n if (layoutValue === undefined) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'The active flex direction and wrapping behavior depend on a dynamic layout.',\n suggestion: 'Make the layout static or migrate the gap and responsive layout together.',\n };\n }\n\n const layout = parseLayout(layoutValue);\n if (!layout.ok) return { status: 'invalid', code: 'invalid-value' };\n if (layout.value.wrap !== 'nowrap') {\n return {\n status: 'review',\n code: 'semantic-unsupported',\n reason: 'Flex-Layout margins and CSS gap differ when flex items wrap across lines.',\n suggestion: 'Verify the wrapped layout and migrate its spacing manually.',\n };\n }\n\n return { status: 'converted', classNames: [`gap-${arbitraryValue(gap.value)}`] };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport { parseCssLength } from '../tailwind-value.parser';\nimport { parseLayout } from './layout.strategy';\n\nexport interface FlexItemInput {\n readonly basis: string;\n readonly grow?: string;\n readonly shrink?: string;\n readonly layout: string | undefined;\n}\n\nconst FACTOR = /^\\d+(?:\\.\\d+)?$/;\nfunction property(name: string, value: string): string {\n return `[${name}:${value.replaceAll(/\\s+/g, '_')}]`;\n}\n\nexport function planFlexItem(input: FlexItemInput): TailwindStrategyResult {\n if (input.layout === undefined) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'Flex sizing depends on a dynamic parent direction or wrapping mode.',\n suggestion: 'Make the parent layout static or migrate this flex item manually.',\n };\n }\n const layout = parseLayout(input.layout);\n if (!layout.ok) return { status: 'invalid', code: 'invalid-value' };\n\n let grow = input.grow?.trim() || '1';\n let shrink = input.shrink?.trim() || '1';\n let basis = input.basis.trim();\n const shorthand = basis.startsWith('calc(') ? undefined : basis.match(/^(\\S+)\\s+(\\S+)\\s+(.+)$/);\n if (shorthand) {\n grow = shorthand[1] ?? grow;\n shrink = shorthand[2] ?? shrink;\n basis = shorthand[3] ?? basis;\n } else if (basis.split(/\\s+/).length > 1 && !basis.startsWith('calc(')) {\n return { status: 'invalid', code: 'invalid-value' };\n }\n if (!FACTOR.test(grow) || !FACTOR.test(shrink)) return { status: 'invalid', code: 'invalid-value' };\n\n const direction = layout.value.direction.startsWith('column') ? 'height' : 'width';\n let isValue = false;\n let usingCalc = false;\n\n if (!basis) {\n basis = direction === 'width' ? '0%' : '0.000000001px';\n } else if (basis === 'initial' || basis === 'nogrow') {\n grow = '0';\n basis = 'auto';\n } else if (basis === 'grow') {\n basis = '100%';\n } else if (basis === 'noshrink') {\n shrink = '0';\n basis = 'auto';\n } else if (basis === 'none') {\n grow = '0';\n shrink = '0';\n basis = 'auto';\n } else if (basis !== 'auto') {\n const parsed = parseCssLength(basis, { fallbackUnit: '%' });\n if (!parsed.ok) return { status: 'invalid', code: 'invalid-value' };\n basis = parsed.value;\n usingCalc = basis.startsWith('calc(');\n isValue = usingCalc || !basis.endsWith('%');\n if (basis === '0px') basis = '0%';\n }\n\n const fixed = grow === '0' && shrink === '0';\n const min =\n !['0%', '0px', '0.000000001px', 'auto'].includes(basis) && (fixed || (isValue && grow !== '0')) ? basis : undefined;\n const max =\n !['0%', '0px', '0.000000001px', 'auto'].includes(basis) && (fixed || (!usingCalc && shrink !== '0'))\n ? basis\n : undefined;\n\n const effectiveBasis =\n min || max ? (layout.value.wrap === 'wrap' ? (max ?? min ?? basis) : isValue ? basis : '100%') : basis;\n const flexClasses = usingCalc\n ? [property('flex-grow', grow), property('flex-shrink', shrink), property('flex-basis', effectiveBasis)]\n : [property('flex', `${grow} ${shrink} ${effectiveBasis}`)];\n return {\n status: 'converted',\n classNames: [\n ...flexClasses,\n ...(min ? [property(`min-${direction}`, min)] : []),\n ...(max ? [property(`max-${direction}`, max)] : []),\n 'box-border',\n ],\n };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\nimport { arbitraryValue, parseCssLength } from '../tailwind-value.parser';\nimport { parseLayout } from './layout.strategy';\n\nexport function planFlexOffset(value: string, layoutValue: string | undefined): TailwindStrategyResult {\n const offset = parseCssLength(value.trim() || '0', { fallbackUnit: '%' });\n if (!offset.ok) return { status: 'invalid', code: 'invalid-value' };\n if (layoutValue === undefined) {\n return {\n status: 'review',\n code: 'context-unverified',\n reason: 'The offset margin axis depends on a dynamic parent layout.',\n suggestion: 'Make the parent layout static or migrate the offset manually.',\n };\n }\n const layout = parseLayout(layoutValue);\n if (!layout.ok) return { status: 'invalid', code: 'invalid-value' };\n const prefix = layout.value.direction.startsWith('column') ? 'mt' : 'ms';\n return { status: 'converted', classNames: [`${prefix}-${arbitraryValue(offset.value)}`] };\n}\n","import type { ParsedValue } from '../tailwind-semantic.model';\nimport { layoutClassNames, parseLayout, type TailwindClassPlan } from './layout.strategy';\n\nconst mainAxis = {\n start: 'start',\n 'flex-start': 'start',\n center: 'center',\n end: 'end',\n 'flex-end': 'end',\n 'space-around': 'around',\n 'space-between': 'between',\n 'space-evenly': 'evenly',\n} as const;\n\nconst crossAxis = {\n start: ['start', 'start'],\n 'flex-start': ['start', 'start'],\n center: ['center', 'center'],\n end: ['end', 'end'],\n 'flex-end': ['end', 'end'],\n 'space-between': ['stretch', 'between'],\n 'space-around': ['stretch', 'around'],\n baseline: ['baseline', 'stretch'],\n stretch: ['stretch', 'stretch'],\n} as const;\n\nexport function planLayoutAlign(value: string, layoutValue: string): ParsedValue<TailwindClassPlan> {\n const values = value.split(/\\s+/).filter(Boolean);\n if (values.length > 2) return { ok: false };\n const main = mainAxis[(values[0] ?? 'start') as keyof typeof mainAxis];\n const crossKey = (values[1] ?? 'stretch') as keyof typeof crossAxis;\n const cross = crossAxis[crossKey];\n const layout = parseLayout(layoutValue);\n if (!main || !cross || !layout.ok) return { ok: false };\n\n const sizing =\n crossKey !== 'stretch' ? [] : layout.value.direction.startsWith('row') ? ['max-h-full'] : ['max-w-full'];\n return {\n ok: true,\n value: {\n classNames: [\n `justify-${main}`,\n `items-${cross[0]}`,\n `content-${cross[1]}`,\n ...layoutClassNames(layout.value),\n ...sizing,\n ],\n },\n };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\n\nconst values = new Set(['auto', 'start', 'end', 'center', 'baseline', 'stretch']);\n\nexport function planFlexAlign(value: string): TailwindStrategyResult {\n const normalized = value.trim() || 'stretch';\n if (!values.has(normalized)) return { status: 'invalid', code: 'invalid-value' };\n return { status: 'converted', classNames: [`self-${normalized}`] };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\n\nexport function planFlexFill(): TailwindStrategyResult {\n return {\n status: 'converted',\n classNames: ['m-0', 'w-full', 'h-full', 'min-w-full', 'min-h-full'],\n };\n}\n","import type { TailwindStrategyResult } from '../tailwind-semantic.model';\n\nexport function planFlexOrder(value: string): TailwindStrategyResult {\n const order = Number.parseInt(value.trim(), 10);\n return {\n status: 'converted',\n classNames: order ? [`[order:${order}]`] : [],\n };\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport { planFlexAlign } from './directives/flex-align.strategy';\nimport { planFlexFill } from './directives/flex-fill.strategy';\nimport { planFlexOrder } from './directives/flex-order.strategy';\nimport type { TailwindStrategyResult } from './tailwind-semantic.model';\n\ntype IndependentDirective = 'fxFlexAlign' | 'fxFlexFill' | 'fxFill' | 'fxFlexOrder';\ntype IndependentPlanner = (value: string) => TailwindStrategyResult;\n\nconst planners = new Map<IndependentDirective, IndependentPlanner>([\n ['fxFlexAlign', planFlexAlign],\n ['fxFlexFill', planFlexFill],\n ['fxFill', planFlexFill],\n ['fxFlexOrder', planFlexOrder],\n]);\n\nexport function planIndependentDirective(input: LocatedFlexLayoutInput): TailwindStrategyResult | undefined {\n return planners.get(input.directive as IndependentDirective)?.(input.value);\n}\n","import type { TemplateAttribute } from './template.model';\n\nexport function templateAttributeKeys(attribute: TemplateAttribute): ReadonlySet<string> {\n const semanticKey = attribute.name.toLowerCase();\n const rawName = attribute.rawName.toLowerCase();\n const rawKey =\n attribute.binding !== 'property'\n ? rawName\n : rawName.startsWith('[') && rawName.endsWith(']')\n ? rawName.slice(1, -1)\n : rawName.startsWith('bind-')\n ? rawName.slice('bind-'.length)\n : rawName;\n return new Set([rawKey, semanticKey]);\n}\n","export const FLEX_LAYOUT_DIRECTIVES = [\n 'fxLayout',\n 'fxLayoutAlign',\n 'fxLayoutGap',\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexAlign',\n 'fxFlexFill',\n 'fxFill',\n 'fxFlexOffset',\n 'fxFlexOrder',\n 'fxShow',\n 'fxHide',\n 'gdAlignColumns',\n 'gdAlignRows',\n 'gdArea',\n 'gdAreas',\n 'gdAuto',\n 'gdColumn',\n 'gdColumns',\n 'gdGap',\n 'gdGridAlign',\n 'gdRow',\n 'gdRows',\n 'class',\n 'ngClass',\n 'style',\n 'ngStyle',\n 'imgSrc',\n] as const;\n\nexport type FlexLayoutDirective = (typeof FLEX_LAYOUT_DIRECTIVES)[number];\n\nexport const DEFAULT_BREAKPOINTS = [\n 'xs',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n 'lt-sm',\n 'lt-md',\n 'lt-lg',\n 'lt-xl',\n 'gt-xs',\n 'gt-sm',\n 'gt-md',\n 'gt-lg',\n] as const;\n\nexport type DefaultBreakpoint = (typeof DEFAULT_BREAKPOINTS)[number];\n\nexport const ORIENTATION_BREAKPOINTS = [\n 'handset',\n 'handset.portrait',\n 'handset.landscape',\n 'tablet',\n 'tablet.portrait',\n 'tablet.landscape',\n 'web',\n 'web.portrait',\n 'web.landscape',\n] as const;\n\nexport const SPECIAL_BREAKPOINTS = ['print'] as const;\n\nexport type KnownBreakpoint =\n DefaultBreakpoint | (typeof ORIENTATION_BREAKPOINTS)[number] | (typeof SPECIAL_BREAKPOINTS)[number];\n\nconst directiveNames = new Set<string>(FLEX_LAYOUT_DIRECTIVES);\nconst breakpointNames = new Set<string>([...DEFAULT_BREAKPOINTS, ...ORIENTATION_BREAKPOINTS, ...SPECIAL_BREAKPOINTS]);\n\nexport function isFlexLayoutDirective(value: string): value is FlexLayoutDirective {\n return directiveNames.has(value);\n}\n\nexport function isKnownBreakpoint(value: string): value is KnownBreakpoint {\n return breakpointNames.has(value);\n}\n","import { ORIENTATION_BREAKPOINTS, type DefaultBreakpoint } from '../analyzer/flex-layout.catalog';\n\nexport interface MediaRange {\n readonly min?: number;\n readonly max?: number;\n}\n\nexport interface BreakpointDefinition {\n readonly alias: DefaultBreakpoint;\n readonly range: MediaRange;\n readonly priority: number;\n}\n\nexport type BreakpointClassification =\n | { readonly kind: 'verified'; readonly definition: BreakpointDefinition }\n | { readonly kind: 'optional'; readonly alias: string }\n | { readonly kind: 'print'; readonly alias: 'print' }\n | { readonly kind: 'custom'; readonly alias: string };\n\nfunction freezeDefinition(definition: BreakpointDefinition): BreakpointDefinition {\n return Object.freeze({\n ...definition,\n range: Object.freeze({ ...definition.range }),\n });\n}\n\nconst breakpointDefinitions: readonly BreakpointDefinition[] = [\n { alias: 'xs', range: { min: 0, max: 599.98 }, priority: 1000 },\n { alias: 'sm', range: { min: 600, max: 959.98 }, priority: 900 },\n { alias: 'md', range: { min: 960, max: 1279.98 }, priority: 800 },\n { alias: 'lg', range: { min: 1280, max: 1919.98 }, priority: 700 },\n { alias: 'xl', range: { min: 1920, max: 4999.98 }, priority: 600 },\n { alias: 'lt-sm', range: { min: undefined, max: 599.98 }, priority: 950 },\n { alias: 'lt-md', range: { min: undefined, max: 959.98 }, priority: 850 },\n { alias: 'lt-lg', range: { min: undefined, max: 1279.98 }, priority: 750 },\n { alias: 'lt-xl', range: { min: undefined, max: 1919.98 }, priority: 650 },\n { alias: 'gt-xs', range: { min: 600, max: undefined }, priority: -950 },\n { alias: 'gt-sm', range: { min: 960, max: undefined }, priority: -850 },\n { alias: 'gt-md', range: { min: 1280, max: undefined }, priority: -750 },\n { alias: 'gt-lg', range: { min: 1920, max: undefined }, priority: -650 },\n];\n\nconst definitions = Object.freeze(breakpointDefinitions.map(freezeDefinition));\n\nconst definitionsByAlias = new Map(definitions.map(definition => [definition.alias, definition]));\nconst optionalAliases = new Set<string>(ORIENTATION_BREAKPOINTS);\n\nexport class BreakpointCatalog {\n classify(alias: string): BreakpointClassification {\n const definition = definitionsByAlias.get(alias as DefaultBreakpoint);\n\n if (definition) {\n return { kind: 'verified', definition };\n }\n\n if (optionalAliases.has(alias)) {\n return { kind: 'optional', alias };\n }\n\n if (alias === 'print') {\n return { kind: 'print', alias };\n }\n\n return { kind: 'custom', alias };\n }\n}\n\nexport function mediaRangesIntersect(left: MediaRange, right: MediaRange): boolean {\n const leftMin = left.min ?? Number.NEGATIVE_INFINITY;\n const leftMax = left.max ?? Number.POSITIVE_INFINITY;\n const rightMin = right.min ?? Number.NEGATIVE_INFINITY;\n const rightMax = right.max ?? Number.POSITIVE_INFINITY;\n\n return leftMin <= rightMax && rightMin <= leftMax;\n}\n","export interface TailwindArbitrarySyntax {\n readonly important: boolean;\n}\n\nconst closingByOpening = new Map([\n ['(', ')'],\n ['[', ']'],\n ['{', '}'],\n]);\n\nexport function analyzeTailwindArbitrarySyntax(value: string): TailwindArbitrarySyntax | undefined {\n if (!value.startsWith('[') || !value.endsWith(']')) return undefined;\n const inner = value.slice(1, -1);\n if (inner.trim().length === 0) return undefined;\n\n const stack: string[] = [];\n let quote: '\"' | \"'\" | undefined;\n let typedSeparator = -1;\n let topLevelValue = '';\n\n for (let index = 0; index < inner.length; index += 1) {\n const character = inner[index];\n if (character === undefined) return undefined;\n const codePoint = character.codePointAt(0);\n if (codePoint === undefined || codePoint <= 0x1f || codePoint === 0x7f) return undefined;\n\n if (quote !== undefined) {\n if (character === '\\\\') {\n if (inner[index + 1] === undefined) return undefined;\n index += 1;\n } else if (character === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (character === '/' && inner[index + 1] === '*') {\n const commentEnd = inner.indexOf('*/', index + 2);\n if (commentEnd < 0) return undefined;\n if (stack.length === 0) topLevelValue += ' ';\n index = commentEnd + 1;\n continue;\n }\n\n if (character === '\\\\') {\n const escaped = inner[index + 1];\n if (escaped === undefined || escaped === '\\n' || escaped === '\\r' || escaped === '\\f') return undefined;\n if (stack.length === 0) topLevelValue += escaped === '_' ? '_' : 'x';\n index += 1;\n continue;\n }\n\n if (character === '\"' || character === \"'\") {\n if (stack.length === 0) topLevelValue += 'x';\n quote = character;\n continue;\n }\n\n const closing = closingByOpening.get(character);\n if (closing !== undefined) {\n if (stack.length === 0) topLevelValue += 'x';\n stack.push(closing);\n continue;\n }\n if ([')', ']', '}'].includes(character)) {\n if (stack.pop() !== character) return undefined;\n continue;\n }\n if (stack.length !== 0) continue;\n\n if (character === ';') return undefined;\n if (character === ':' && typedSeparator < 0) typedSeparator = index;\n topLevelValue += character === '_' ? ' ' : character;\n }\n\n if (quote !== undefined || stack.length !== 0) return undefined;\n if (\n typedSeparator >= 0 &&\n (inner.slice(0, typedSeparator).trim().length === 0 || inner.slice(typedSeparator + 1).trim().length === 0)\n ) {\n return undefined;\n }\n\n return { important: /!\\s*important\\s*$/iu.test(topLevelValue) };\n}\n\nexport function hasValidTailwindArbitrarySyntax(value: string): boolean {\n return analyzeTailwindArbitrarySyntax(value) !== undefined;\n}\n","type CssPropertyOwnership =\n | { readonly kind: 'universal' }\n | { readonly kind: 'known'; readonly longhands: ReadonlySet<string> }\n | { readonly kind: 'unknown'; readonly property: string }\n | { readonly kind: 'custom'; readonly property: string };\n\nconst edges = ['top', 'right', 'bottom', 'left'] as const;\n\nfunction edgeLonghands(prefix: string, suffix?: string): readonly string[] {\n return edges.map(edge => `${prefix}-${edge}${suffix === undefined ? '' : `-${suffix}`}`);\n}\n\nconst physicalBorderWidths = edgeLonghands('border', 'width');\nconst physicalBorderStyles = edgeLonghands('border', 'style');\nconst physicalBorderColors = edgeLonghands('border', 'color');\nconst logicalBorderWidths = [\n 'border-inline-start-width',\n 'border-inline-end-width',\n 'border-block-start-width',\n 'border-block-end-width',\n] as const;\nconst logicalBorderStyles = [\n 'border-inline-start-style',\n 'border-inline-end-style',\n 'border-block-start-style',\n 'border-block-end-style',\n] as const;\nconst logicalBorderColors = [\n 'border-inline-start-color',\n 'border-inline-end-color',\n 'border-block-start-color',\n 'border-block-end-color',\n] as const;\nconst borderWidths = [...physicalBorderWidths, ...logicalBorderWidths];\nconst borderStyles = [...physicalBorderStyles, ...logicalBorderStyles];\nconst borderColors = [...physicalBorderColors, ...logicalBorderColors];\nconst borderImage = [\n 'border-image-source',\n 'border-image-slice',\n 'border-image-width',\n 'border-image-outset',\n 'border-image-repeat',\n] as const;\n\nconst shorthandLonghands = new Map<string, readonly string[]>([\n [\n 'margin',\n [...edgeLonghands('margin'), 'margin-inline-start', 'margin-inline-end', 'margin-block-start', 'margin-block-end'],\n ],\n ['margin-inline', ['margin-inline-start', 'margin-inline-end', 'margin-left', 'margin-right']],\n ['margin-block', ['margin-block-start', 'margin-block-end', 'margin-top', 'margin-bottom']],\n ['margin-inline-start', ['margin-inline-start', 'margin-left', 'margin-right']],\n ['margin-inline-end', ['margin-inline-end', 'margin-left', 'margin-right']],\n [\n 'padding',\n [\n ...edgeLonghands('padding'),\n 'padding-inline-start',\n 'padding-inline-end',\n 'padding-block-start',\n 'padding-block-end',\n ],\n ],\n ['padding-inline', ['padding-inline-start', 'padding-inline-end', 'padding-left', 'padding-right']],\n ['padding-block', ['padding-block-start', 'padding-block-end', 'padding-top', 'padding-bottom']],\n ['padding-inline-start', ['padding-inline-start', 'padding-left', 'padding-right']],\n ['padding-inline-end', ['padding-inline-end', 'padding-left', 'padding-right']],\n ['inset', [...edges, 'inset-inline-start', 'inset-inline-end', 'inset-block-start', 'inset-block-end']],\n ['inset-inline', ['inset-inline-start', 'inset-inline-end', 'left', 'right']],\n ['inset-block', ['inset-block-start', 'inset-block-end', 'top', 'bottom']],\n ['gap', ['row-gap', 'column-gap']],\n [\n 'font',\n [\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'font-stretch',\n 'font-size',\n 'line-height',\n 'font-family',\n 'font-size-adjust',\n 'font-kerning',\n 'font-optical-sizing',\n 'font-feature-settings',\n 'font-variation-settings',\n 'font-language-override',\n ],\n ],\n [\n 'background',\n [\n 'background-image',\n 'background-position',\n 'background-size',\n 'background-repeat',\n 'background-origin',\n 'background-clip',\n 'background-attachment',\n 'background-color',\n ],\n ],\n ['border', [...borderWidths, ...borderStyles, ...borderColors, ...borderImage]],\n ['border-top', ['border-top-width', 'border-top-style', 'border-top-color']],\n ['border-right', ['border-right-width', 'border-right-style', 'border-right-color']],\n ['border-bottom', ['border-bottom-width', 'border-bottom-style', 'border-bottom-color']],\n ['border-left', ['border-left-width', 'border-left-style', 'border-left-color']],\n ['border-width', borderWidths],\n [\n 'border-inline-width',\n ['border-inline-start-width', 'border-inline-end-width', 'border-left-width', 'border-right-width'],\n ],\n ['border-block-width', ['border-block-start-width', 'border-block-end-width', ...physicalBorderWidths]],\n ['border-inline-start-width', ['border-inline-start-width', 'border-left-width', 'border-right-width']],\n ['border-inline-end-width', ['border-inline-end-width', 'border-left-width', 'border-right-width']],\n ['border-block-start-width', ['border-block-start-width', ...physicalBorderWidths]],\n ['border-block-end-width', ['border-block-end-width', ...physicalBorderWidths]],\n ['border-style', borderStyles],\n [\n 'border-inline-style',\n ['border-inline-start-style', 'border-inline-end-style', 'border-left-style', 'border-right-style'],\n ],\n ['border-block-style', ['border-block-start-style', 'border-block-end-style', ...physicalBorderStyles]],\n ['border-inline-start-style', ['border-inline-start-style', 'border-left-style', 'border-right-style']],\n ['border-inline-end-style', ['border-inline-end-style', 'border-left-style', 'border-right-style']],\n ['border-block-start-style', ['border-block-start-style', ...physicalBorderStyles]],\n ['border-block-end-style', ['border-block-end-style', ...physicalBorderStyles]],\n ['border-color', borderColors],\n [\n 'border-inline-color',\n ['border-inline-start-color', 'border-inline-end-color', 'border-left-color', 'border-right-color'],\n ],\n ['border-block-color', ['border-block-start-color', 'border-block-end-color', ...physicalBorderColors]],\n ['border-inline-start-color', ['border-inline-start-color', 'border-left-color', 'border-right-color']],\n ['border-inline-end-color', ['border-inline-end-color', 'border-left-color', 'border-right-color']],\n ['border-block-start-color', ['border-block-start-color', ...physicalBorderColors]],\n ['border-block-end-color', ['border-block-end-color', ...physicalBorderColors]],\n [\n 'border-radius',\n [\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-bottom-right-radius',\n 'border-bottom-left-radius',\n 'border-start-start-radius',\n 'border-start-end-radius',\n 'border-end-start-radius',\n 'border-end-end-radius',\n ],\n ],\n ['border-image', borderImage],\n ['overflow', ['overflow-x', 'overflow-y']],\n ['flex', ['flex-grow', 'flex-shrink', 'flex-basis']],\n [\n 'transition',\n [\n 'transition-property',\n 'transition-duration',\n 'transition-timing-function',\n 'transition-delay',\n 'transition-behavior',\n ],\n ],\n ['grid-template', ['grid-template-rows', 'grid-template-columns', 'grid-template-areas']],\n ['grid-column', ['grid-column-start', 'grid-column-end']],\n ['grid-row', ['grid-row-start', 'grid-row-end']],\n [\n 'grid',\n [\n 'grid-template-rows',\n 'grid-template-columns',\n 'grid-template-areas',\n 'grid-auto-rows',\n 'grid-auto-columns',\n 'grid-auto-flow',\n ],\n ],\n ['list-style', ['list-style-type', 'list-style-position', 'list-style-image']],\n ['columns', ['column-width', 'column-count']],\n ['column-rule', ['column-rule-width', 'column-rule-style', 'column-rule-color']],\n ['outline', ['outline-width', 'outline-style', 'outline-color']],\n [\n 'text-decoration',\n ['text-decoration-line', 'text-decoration-style', 'text-decoration-color', 'text-decoration-thickness'],\n ],\n ['place-content', ['align-content', 'justify-content']],\n ['place-items', ['align-items', 'justify-items']],\n ['place-self', ['align-self', 'justify-self']],\n [\n 'animation',\n [\n 'animation-name',\n 'animation-duration',\n 'animation-timing-function',\n 'animation-delay',\n 'animation-iteration-count',\n 'animation-direction',\n 'animation-fill-mode',\n 'animation-play-state',\n 'animation-timeline',\n 'animation-range-start',\n 'animation-range-end',\n ],\n ],\n]);\n\nconst knownIndependentProperties = new Set([\n ...[...shorthandLonghands.values()].flatMap(longhands => [...longhands]),\n 'display',\n 'box-sizing',\n 'flex-direction',\n 'flex-wrap',\n 'justify-items',\n 'justify-self',\n 'width',\n 'height',\n 'min-width',\n 'min-height',\n 'max-width',\n 'max-height',\n 'color',\n 'text-align',\n 'text-wrap',\n 'background-blend-mode',\n 'background-size',\n 'background-attachment',\n 'background-clip',\n 'background-origin',\n 'background-position',\n 'background-repeat',\n 'box-shadow',\n 'opacity',\n 'position',\n 'transform',\n 'translate',\n 'rotate',\n 'scale',\n 'transform-origin',\n 'order',\n 'grid-column-start',\n 'grid-column-end',\n 'grid-row-start',\n 'grid-row-end',\n 'grid-auto-columns',\n 'grid-auto-rows',\n 'table-layout',\n 'object-fit',\n 'object-position',\n 'cursor',\n 'pointer-events',\n 'visibility',\n 'clip',\n 'clip-path',\n 'white-space',\n 'text-overflow',\n 'content',\n 'z-index',\n]);\n\nfunction ownership(property: string): CssPropertyOwnership {\n if (property.startsWith('--')) return { kind: 'custom', property };\n\n const normalized = property.toLowerCase();\n if (normalized === 'all') return { kind: 'universal' };\n const expanded = shorthandLonghands.get(normalized);\n if (expanded !== undefined) return { kind: 'known', longhands: new Set(expanded) };\n if (knownIndependentProperties.has(normalized)) {\n return { kind: 'known', longhands: new Set([normalized]) };\n }\n return { kind: 'unknown', property: normalized };\n}\n\nexport function cssPropertiesOverlap(leftProperty: string, rightProperty: string): boolean {\n const left = ownership(leftProperty);\n const right = ownership(rightProperty);\n\n if (left.kind === 'custom' || right.kind === 'custom') {\n return left.kind === 'custom' && right.kind === 'custom' && left.property === right.property;\n }\n if (left.kind === 'universal' || right.kind === 'universal') return true;\n if (left.kind === 'unknown' || right.kind === 'unknown') return true;\n return [...left.longhands].some(longhand => right.longhands.has(longhand));\n}\n\nexport function cssPropertyOwnershipCovers(ownerProperty: string, targetProperty: string): boolean {\n const owner = ownership(ownerProperty);\n const target = ownership(targetProperty);\n\n if (owner.kind === 'custom' || target.kind === 'custom') {\n return owner.kind === 'custom' && target.kind === 'custom' && owner.property === target.property;\n }\n if (owner.kind === 'universal') return true;\n if (target.kind === 'universal') return false;\n if (owner.kind === 'unknown' || target.kind === 'unknown') {\n return owner.kind === 'unknown' && target.kind === 'unknown' && owner.property === target.property;\n }\n return [...target.longhands].every(longhand => owner.longhands.has(longhand));\n}\n","const cssLengthUnits = new Set([\n 'cm',\n 'mm',\n 'Q',\n 'in',\n 'pc',\n 'pt',\n 'px',\n 'em',\n 'ex',\n 'ch',\n 'rem',\n 'lh',\n 'rlh',\n 'vw',\n 'vh',\n 'vmin',\n 'vmax',\n 'vb',\n 'vi',\n 'svw',\n 'svh',\n 'lvw',\n 'lvh',\n 'dvw',\n 'dvh',\n 'cqw',\n 'cqh',\n 'cqi',\n 'cqb',\n 'cqmin',\n 'cqmax',\n]);\n\nconst cssColorKeywords = new Set(\n `black silver gray white maroon red purple fuchsia green lime olive yellow navy blue teal aqua aliceblue\n antiquewhite aquamarine azure beige bisque blanchedalmond blueviolet brown burlywood cadetblue chartreuse\n chocolate coral cornflowerblue cornsilk crimson cyan darkblue darkcyan darkgoldenrod darkgray darkgreen darkgrey\n darkkhaki darkmagenta darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen darkslateblue\n darkslategray darkslategrey darkturquoise darkviolet deeppink deepskyblue dimgray dimgrey dodgerblue firebrick\n floralwhite forestgreen gainsboro ghostwhite gold goldenrod greenyellow grey honeydew hotpink indianred indigo ivory\n khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral lightcyan lightgoldenrodyellow lightgray\n lightgreen lightgrey lightpink lightsalmon lightseagreen lightskyblue lightslategray lightslategrey lightsteelblue\n lightyellow limegreen linen magenta mediumaquamarine mediumblue mediumorchid mediumpurple mediumseagreen\n mediumslateblue mediumspringgreen mediumturquoise mediumvioletred midnightblue mintcream mistyrose moccasin\n navajowhite oldlace olivedrab orange orangered orchid palegoldenrod palegreen paleturquoise palevioletred papayawhip\n peachpuff peru pink plum powderblue rebeccapurple rosybrown royalblue saddlebrown salmon sandybrown seagreen\n seashell sienna skyblue slateblue slategray slategrey snow springgreen steelblue tan thistle tomato turquoise violet\n wheat whitesmoke yellowgreen transparent currentcolor canvas canvastext linktext visitedtext activetext buttonface\n buttontext buttonborder field fieldtext highlight highlighttext selecteditem selecteditemtext mark marktext graytext\n accentcolor accentcolortext`\n .split(/\\s+/u)\n .filter(Boolean),\n);\n\nconst absoluteFontSizes = new Set([\n 'xx-small',\n 'x-small',\n 'small',\n 'medium',\n 'large',\n 'x-large',\n 'xx-large',\n 'xxx-large',\n]);\nconst relativeFontSizes = new Set(['larger', 'smaller']);\nconst defaultTailwindColorNames = new Set([\n 'red',\n 'orange',\n 'amber',\n 'yellow',\n 'lime',\n 'green',\n 'emerald',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose',\n 'slate',\n 'gray',\n 'zinc',\n 'neutral',\n 'stone',\n]);\nconst defaultTailwindColorShades = new Set([\n '50',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n '950',\n]);\n\nconst unsignedDecimal = /^(?:(?:\\d+(?:\\.\\d+)?)|(?:\\.\\d+))$/u;\nconst signedCssNumber = /^[+-]?(?:\\d*\\.)?\\d+(?:e[+-]?\\d+)?$/iu;\nconst mathFunction = /(?:calc|min|max|clamp|mod|rem|sin|cos|tan|asin|acos|atan|atan2|pow|sqrt|hypot|log|exp|round)\\(/u;\nconst colorFunction = /^(?:rgba?|hsla?|hwb|color|(?:ok)?(?:lab|lch)|light-dark|color-mix|--alpha)\\(/iu;\n\ninterface ArbitraryValue {\n readonly hint?: string;\n readonly payload: string;\n}\n\nfunction arbitraryValue(value: string): ArbitraryValue | undefined {\n if (!value.startsWith('[') || !value.endsWith(']')) return undefined;\n const inner = value.slice(1, -1);\n const hinted = inner.match(/^([a-z][a-z-]*):([\\s\\S]+)$/u);\n return hinted === null ? { payload: inner } : { hint: hinted[1], payload: hinted[2] ?? '' };\n}\n\nfunction splitNumberAndUnit(value: string): { readonly number: string; readonly unit?: string } | undefined {\n const match = value.match(/^((?:(?:\\d+(?:\\.\\d+)?)|(?:\\.\\d+)))([a-zA-Z%]+)?$/u);\n if (match === null) return undefined;\n return { number: match[1] ?? '', unit: match[2] };\n}\n\nfunction isUnsignedLength(value: string, allowPercentage: boolean, allowUnitless: boolean): boolean {\n const parsed = splitNumberAndUnit(value);\n if (parsed === undefined || !unsignedDecimal.test(parsed.number)) return false;\n if (parsed.unit === undefined) return allowUnitless;\n return (allowPercentage && parsed.unit === '%') || cssLengthUnits.has(parsed.unit);\n}\n\nexport function isConservativelyAdmittedTextLength(value: string): boolean {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return false;\n if (arbitrary.hint !== undefined && arbitrary.hint !== 'length') return false;\n if (arbitrary.hint === 'length' && arbitrary.payload === '0') return true;\n return isUnsignedLength(arbitrary.payload, true, false);\n}\n\nexport function isConservativelyAdmittedBorderWidth(value: string): boolean {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return false;\n if (arbitrary.hint !== undefined && arbitrary.hint !== 'length') return false;\n if (arbitrary.hint === 'length' && arbitrary.payload === '0') return true;\n return isUnsignedLength(arbitrary.payload, false, arbitrary.hint === undefined);\n}\n\nfunction isTailwindLength(value: string): boolean {\n if (/^--spacing\\(/iu.test(value)) return true;\n if (mathFunction.test(value)) return true;\n const match = value.match(/^([+-]?(?:\\d*\\.)?\\d+(?:e[+-]?\\d+)?)([a-zA-Z]+)$/iu);\n return match !== null && signedCssNumber.test(match[1] ?? '') && cssLengthUnits.has(match[2] ?? '');\n}\n\nfunction isTailwindPercentage(value: string): boolean {\n return /^[+-]?(?:\\d*\\.)?\\d+(?:e[+-]?\\d+)?%$/iu.test(value) || mathFunction.test(value);\n}\n\nfunction decodedInferenceValue(value: string): string | undefined {\n if (value.includes('\\\\')) return undefined;\n return value.replaceAll('_', ' ');\n}\n\ntype TailwindDataType = 'color' | 'length' | 'percentage' | 'absolute-size' | 'relative-size' | 'line-width';\n\nfunction inferTailwindDataType(value: string, types: readonly TailwindDataType[]): TailwindDataType | undefined {\n if (value.startsWith('var(')) return undefined;\n\n for (const type of types) {\n if (\n type === 'color' &&\n (value.startsWith('#') || colorFunction.test(value) || cssColorKeywords.has(value.toLowerCase()))\n ) {\n return type;\n }\n if (type === 'length' && isTailwindLength(value)) return type;\n if (type === 'percentage' && isTailwindPercentage(value)) return type;\n if (type === 'absolute-size' && absoluteFontSizes.has(value)) return type;\n if (type === 'relative-size' && relativeFontSizes.has(value)) return type;\n if (type === 'line-width') {\n const parts = value.split(' ');\n if (\n parts.length > 0 &&\n parts.every(\n part =>\n part.length > 0 &&\n (isTailwindLength(part) || signedCssNumber.test(part) || ['thin', 'medium', 'thick'].includes(part)),\n )\n ) {\n return type;\n }\n }\n }\n return undefined;\n}\n\nexport function isPinnedTailwindColorToken(value: string): boolean {\n const [color, opacity, remainder] = value.split('/');\n if (remainder !== undefined || color === undefined) return false;\n const standard = ['inherit', 'current', 'transparent', 'black', 'white'].includes(color);\n const [name, shade, extra] = color.split('-');\n const palette =\n extra === undefined &&\n name !== undefined &&\n shade !== undefined &&\n defaultTailwindColorNames.has(name) &&\n defaultTailwindColorShades.has(shade);\n if (!standard && !palette) return false;\n if (opacity === undefined) return true;\n if (!/^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/u.test(opacity)) return false;\n const numericOpacity = Number(opacity);\n return numericOpacity >= 0 && numericOpacity <= 100;\n}\n\nexport function tailwindArbitraryTextKind(value: string): 'color' | 'font-size' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (['size', 'length', 'percentage', 'absolute-size', 'relative-size'].includes(arbitrary.hint ?? '')) {\n return 'font-size';\n }\n if (arbitrary.hint === 'color') return 'color';\n if (arbitrary.hint !== undefined) return 'unknown';\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n const inferred = inferTailwindDataType(payload, ['color', 'length', 'percentage', 'absolute-size', 'relative-size']);\n return inferred !== undefined && inferred !== 'color' ? 'font-size' : 'color';\n}\n\nfunction isTailwindBackgroundPosition(value: string): boolean {\n let recognized = 0;\n for (const part of value.split(' ')) {\n if (['center', 'top', 'right', 'bottom', 'left'].includes(part)) {\n recognized += 1;\n continue;\n }\n if (part.startsWith('var(')) continue;\n if (!isTailwindLength(part) && !isTailwindPercentage(part)) return false;\n recognized += 1;\n }\n return recognized > 0;\n}\n\nfunction isTailwindBackgroundSize(value: string): boolean {\n let recognized = 0;\n for (const layer of value.split(',')) {\n if (layer === 'cover' || layer === 'contain') {\n recognized += 1;\n continue;\n }\n const parts = layer.split(' ');\n if (\n (parts.length !== 1 && parts.length !== 2) ||\n !parts.every(part => part === 'auto' || isTailwindLength(part) || isTailwindPercentage(part))\n ) {\n return false;\n }\n recognized += 1;\n }\n return recognized > 0;\n}\n\nfunction splitTopLevelCommas(value: string): readonly string[] | undefined {\n const closingByOpening = new Map([\n ['(', ')'],\n ['[', ']'],\n ['{', '}'],\n ]);\n const stack: string[] = [];\n const parts: string[] = [];\n let quote: '\"' | \"'\" | undefined;\n let start = 0;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n if (character === undefined) return undefined;\n if (quote !== undefined) {\n if (character === '\\\\') index += 1;\n else if (character === quote) quote = undefined;\n continue;\n }\n if (character === '\\\\') {\n index += 1;\n continue;\n }\n if (character === '\"' || character === \"'\") {\n quote = character;\n continue;\n }\n const closing = closingByOpening.get(character);\n if (closing !== undefined) {\n stack.push(closing);\n continue;\n }\n if ([')', ']', '}'].includes(character)) {\n if (stack.pop() !== character) return undefined;\n continue;\n }\n if (character === ',' && stack.length === 0) {\n parts.push(value.slice(start, index));\n start = index + 1;\n }\n }\n if (quote !== undefined || stack.length > 0) return undefined;\n parts.push(value.slice(start));\n return parts;\n}\n\nfunction isTailwindBackgroundImage(value: string): boolean {\n const layers = splitTopLevelCommas(value);\n if (layers === undefined) return false;\n let recognized = 0;\n for (const layer of layers) {\n const normalized = layer.trim();\n if (normalized.startsWith('var(')) continue;\n if (\n !/^(?:url|(?:repeating-)?(?:linear|radial|conic)-gradient|element|image|cross-fade|image-set)\\([\\s\\S]*\\)$/u.test(\n normalized,\n )\n ) {\n return false;\n }\n recognized += 1;\n }\n return recognized > 0;\n}\n\nexport function tailwindArbitraryBackgroundKind(\n value: string,\n): 'background-color' | 'background-image' | 'background-position' | 'background-size' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (arbitrary.hint === 'percentage' || arbitrary.hint === 'position') return 'background-position';\n if (['bg-size', 'length', 'size'].includes(arbitrary.hint ?? '')) return 'background-size';\n if (arbitrary.hint === 'image' || arbitrary.hint === 'url') return 'background-image';\n if (arbitrary.hint === 'color') return 'background-color';\n if (arbitrary.hint !== undefined) return 'unknown';\n\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n if (payload.startsWith('var(')) return 'unknown';\n if (isTailwindBackgroundImage(payload)) return 'background-image';\n if (inferTailwindDataType(payload, ['color']) === 'color') return 'background-color';\n\n const position = isTailwindBackgroundPosition(payload);\n const size = isTailwindBackgroundSize(payload);\n if (position === size) return 'unknown';\n return position ? 'background-position' : 'background-size';\n}\n\nexport function tailwindArbitraryBorderKind(value: string): 'border-color' | 'border-width' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (arbitrary.hint === 'length' || arbitrary.hint === 'line-width') return 'border-width';\n if (arbitrary.hint === 'color') return 'border-color';\n if (arbitrary.hint !== undefined) return 'unknown';\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n const inferred = inferTailwindDataType(payload, ['color', 'line-width', 'length']);\n return inferred === 'line-width' || inferred === 'length' ? 'border-width' : 'border-color';\n}\n\nexport function tailwindArbitraryShadowKind(value: string): 'shadow-color' | 'shadow-geometry' | 'unknown' {\n const arbitrary = arbitraryValue(value);\n if (arbitrary === undefined) return 'unknown';\n if (arbitrary.hint === 'color') return 'shadow-color';\n if (arbitrary.hint !== undefined) return 'unknown';\n const payload = decodedInferenceValue(arbitrary.payload);\n if (payload === undefined || payload.length === 0) return 'unknown';\n return inferTailwindDataType(payload, ['color']) === 'color' ? 'shadow-color' : 'shadow-geometry';\n}\n","import { mediaRangesIntersect, type MediaRange } from '../../breakpoint/breakpoint-catalog';\nimport { analyzeTailwindArbitrarySyntax } from './tailwind-arbitrary-syntax';\nimport { cssPropertiesOverlap } from './extended/css-property-ownership';\nimport {\n isPinnedTailwindColorToken,\n tailwindArbitraryBackgroundKind,\n tailwindArbitraryBorderKind,\n tailwindArbitraryShadowKind,\n tailwindArbitraryTextKind,\n} from './extended/tailwind-arbitrary-value-ownership';\n\nexport type TailwindActivation = { readonly kind: 'base' } | { readonly kind: 'media'; readonly range: MediaRange };\n\nexport interface TailwindDisplayUtility {\n readonly token: string;\n readonly utility: string;\n readonly activation: TailwindActivation;\n readonly important: boolean;\n}\n\nexport interface TailwindUtilityDescriptor {\n readonly token: string;\n readonly variants: readonly string[];\n readonly utility: string;\n readonly cssProperties: readonly string[];\n readonly hasUnknownCssAuthority?: true;\n readonly activation: TailwindActivation;\n readonly hasGeneratedMediaVariant: boolean;\n readonly important: boolean;\n}\n\nconst displayUtilities = new Set([\n 'inline',\n 'block',\n 'inline-block',\n 'flow-root',\n 'flex',\n 'inline-flex',\n 'grid',\n 'inline-grid',\n 'contents',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'list-item',\n 'hidden',\n]);\n\nconst generatedMediaVariant =\n /^\\[@media_screen_and_(?:(?:\\(min-width:_(\\d+(?:\\.\\d+)?)px\\))(?:_and_\\(max-width:_(\\d+(?:\\.\\d+)?)px\\))?|\\(max-width:_(\\d+(?:\\.\\d+)?)px\\))\\]$/u;\n\nfunction splitVariants(\n className: string,\n): { readonly variants: readonly string[]; readonly utility: string } | undefined {\n let bracketDepth = 0;\n let escaped = false;\n let segmentStart = 0;\n const segments: string[] = [];\n\n for (let index = 0; index < className.length; index += 1) {\n const character = className[index];\n if (escaped) {\n escaped = false;\n continue;\n }\n if (character === '\\\\') {\n escaped = true;\n } else if (character === '[') {\n bracketDepth += 1;\n } else if (character === ']') {\n if (bracketDepth === 0) return undefined;\n bracketDepth -= 1;\n } else if (character === ':' && bracketDepth === 0) {\n const segment = className.slice(segmentStart, index);\n if (segment.length === 0) return undefined;\n segments.push(segment);\n segmentStart = index + 1;\n }\n }\n\n if (escaped || bracketDepth !== 0) return undefined;\n\n const utility = className.slice(segmentStart);\n if (utility.length === 0) return undefined;\n return { variants: Object.freeze(segments), utility };\n}\n\nfunction activation(variants: readonly string[]): TailwindActivation {\n for (const variant of variants) {\n const match = variant.match(generatedMediaVariant);\n if (!match) continue;\n const min = match[1] === undefined ? undefined : Number(match[1]);\n const maxValue = match[2] ?? match[3];\n const max = maxValue === undefined ? undefined : Number(maxValue);\n if (min !== undefined && max !== undefined && min > max) continue;\n return { kind: 'media', range: { min, max } };\n }\n\n return { kind: 'base' };\n}\n\nfunction hasGeneratedMediaVariant(variants: readonly string[]): boolean {\n return variants.some(variant => variant.startsWith('[@media_screen_and_'));\n}\n\nfunction hasInternalDeclarationImportance(utility: string): boolean {\n const arbitraryStart = utility.indexOf('[');\n if (arbitraryStart < 0) return false;\n return analyzeTailwindArbitrarySyntax(utility.slice(arbitraryStart))?.important ?? false;\n}\n\ntype CssAuthority = readonly string[] | 'unknown';\n\nconst textSizes = new Set(['xs', 'sm', 'base', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', '8xl', '9xl']);\nconst shadowGeometryNames = new Set(['2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', 'none']);\nconst insetShadowGeometryNames = new Set(['2xs', 'xs', 'sm', 'none']);\n\ninterface BorderFamilyOwnership {\n readonly namespace: string;\n readonly width: readonly string[];\n readonly color: readonly string[];\n}\n\nconst borderFamilies: readonly BorderFamilyOwnership[] = [\n {\n namespace: 'border-bs',\n width: ['border-block-start-style', 'border-block-start-width'],\n color: ['border-block-start-color'],\n },\n {\n namespace: 'border-be',\n width: ['border-block-end-style', 'border-block-end-width'],\n color: ['border-block-end-color'],\n },\n {\n namespace: 'border-x',\n width: ['border-inline-style', 'border-inline-width'],\n color: ['border-inline-color'],\n },\n {\n namespace: 'border-y',\n width: ['border-block-style', 'border-block-width'],\n color: ['border-block-color'],\n },\n {\n namespace: 'border-s',\n width: ['border-inline-start-style', 'border-inline-start-width'],\n color: ['border-inline-start-color'],\n },\n {\n namespace: 'border-e',\n width: ['border-inline-end-style', 'border-inline-end-width'],\n color: ['border-inline-end-color'],\n },\n { namespace: 'border-t', width: ['border-top-style', 'border-top-width'], color: ['border-top-color'] },\n { namespace: 'border-r', width: ['border-right-style', 'border-right-width'], color: ['border-right-color'] },\n { namespace: 'border-b', width: ['border-bottom-style', 'border-bottom-width'], color: ['border-bottom-color'] },\n { namespace: 'border-l', width: ['border-left-style', 'border-left-width'], color: ['border-left-color'] },\n { namespace: 'border', width: ['border-style', 'border-width'], color: ['border-color'] },\n];\n\nconst recognizedTailwindAuthorityNamespaces = [\n '@container',\n 'accent',\n 'align',\n 'animate',\n 'appearance',\n 'aspect',\n 'auto-cols',\n 'auto-rows',\n 'backdrop',\n 'backface',\n 'basis',\n 'bg',\n 'block',\n 'blur',\n 'border',\n 'box-decoration',\n 'break',\n 'brightness',\n 'caption',\n 'caret',\n 'clear',\n 'col',\n 'columns',\n 'contain',\n 'content',\n 'contrast',\n 'decoration',\n 'delay',\n 'divide',\n 'drop-shadow',\n 'duration',\n 'ease',\n 'end',\n 'field-sizing',\n 'fill',\n 'filter',\n 'float',\n 'font',\n 'forced-color-adjust',\n 'from',\n 'gradient',\n 'grid',\n 'grid-flow',\n 'grayscale',\n 'hue-rotate',\n 'hyphens',\n 'indent',\n 'inline',\n 'inset-ring',\n 'inset-shadow',\n 'invert',\n 'isolate',\n 'isolation',\n 'justify-items',\n 'justify-self',\n 'leading',\n 'line-clamp',\n 'list',\n 'list-image',\n 'mask',\n 'max-block',\n 'max-inline',\n 'mbe',\n 'mbs',\n 'min-block',\n 'min-inline',\n 'mix-blend',\n 'object',\n 'opacity',\n 'order',\n 'origin',\n 'outline',\n 'overflow',\n 'overscroll',\n 'place-content',\n 'place-items',\n 'place-self',\n 'placeholder',\n 'pbe',\n 'pbs',\n 'perspective',\n 'perspective-origin',\n 'resize',\n 'ring',\n 'rotate',\n 'rounded',\n 'row',\n 'saturate',\n 'scale',\n 'scheme',\n 'scroll',\n 'scrollbar',\n 'select',\n 'sepia',\n 'shadow',\n 'skew',\n 'snap',\n 'space',\n 'start',\n 'stroke',\n 'tab',\n 'table',\n 'text',\n 'to',\n 'touch',\n 'tracking',\n 'transform',\n 'transition',\n 'translate',\n 'underline-offset',\n 'via',\n 'whitespace',\n 'will-change',\n 'wrap',\n 'z',\n 'zoom',\n] as const;\n\nconst recognizedTailwindAuthorityTokens = new Set([\n 'antialiased',\n 'border-collapse',\n 'border-separate',\n 'capitalize',\n 'container',\n 'diagonal-fractions',\n 'italic',\n 'line-through',\n 'lining-nums',\n 'lowercase',\n 'no-underline',\n 'normal-case',\n 'normal-nums',\n 'not-italic',\n 'oldstyle-nums',\n 'ordinal',\n 'outline',\n 'overline',\n 'proportional-nums',\n 'slashed-zero',\n 'stacked-fractions',\n 'subpixel-antialiased',\n 'tabular-nums',\n 'truncate',\n 'underline',\n 'uppercase',\n]);\n\nfunction isCanonicalInteger(value: string): boolean {\n return /^(?:0|[1-9]\\d*)$/u.test(value);\n}\n\nfunction isCssVariableShorthand(value: string): boolean {\n return /^\\(--[A-Za-z_][A-Za-z0-9_-]*\\)$/u.test(value);\n}\n\nfunction borderCssAuthority(utility: string): CssAuthority | undefined {\n const family = borderFamilies.find(\n current => utility === current.namespace || utility.startsWith(`${current.namespace}-`),\n );\n if (family === undefined) return undefined;\n const suffix = utility === family.namespace ? '' : utility.slice(family.namespace.length + 1);\n if (suffix.length === 0 || isCanonicalInteger(suffix)) return family.width;\n if (family.namespace === 'border' && ['solid', 'dashed', 'dotted', 'double', 'hidden', 'none'].includes(suffix)) {\n return ['--tw-border-style', 'border-style'];\n }\n if (suffix.startsWith('[') && suffix.endsWith(']')) {\n const kind = tailwindArbitraryBorderKind(suffix);\n if (kind === 'border-width') return family.width;\n if (kind === 'border-color') return family.color;\n return 'unknown';\n }\n if (isCssVariableShorthand(suffix) || isPinnedTailwindColorToken(suffix)) return family.color;\n return 'unknown';\n}\n\nfunction shadowCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'shadow') return ['--tw-shadow', 'box-shadow'];\n if (!utility.startsWith('shadow-')) return undefined;\n const suffix = utility.slice('shadow-'.length);\n if (suffix.startsWith('[') && suffix.endsWith(']')) {\n const kind = tailwindArbitraryShadowKind(suffix);\n if (kind === 'shadow-color') return ['--tw-shadow-color'];\n if (kind === 'shadow-geometry') return ['--tw-shadow', 'box-shadow'];\n return 'unknown';\n }\n if (isCssVariableShorthand(suffix) || shadowGeometryNames.has(suffix)) return ['--tw-shadow', 'box-shadow'];\n if (isPinnedTailwindColorToken(suffix)) return ['--tw-shadow-color'];\n return 'unknown';\n}\n\nfunction ringCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'ring') return ['--tw-ring-shadow', 'box-shadow'];\n if (utility === 'ring-inset') return ['--tw-ring-inset'];\n if (!utility.startsWith('ring-')) return undefined;\n const suffix = utility.slice('ring-'.length);\n if (isCanonicalInteger(suffix)) return ['--tw-ring-shadow', 'box-shadow'];\n if (isPinnedTailwindColorToken(suffix)) return ['--tw-ring-color'];\n return 'unknown';\n}\n\nfunction insetShadowCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'inset-shadow') return 'unknown';\n if (!utility.startsWith('inset-shadow-')) return undefined;\n const suffix = utility.slice('inset-shadow-'.length);\n if (insetShadowGeometryNames.has(suffix)) return ['--tw-inset-shadow', 'box-shadow'];\n if (suffix === 'initial' || isPinnedTailwindColorToken(suffix)) return ['--tw-inset-shadow-color'];\n return 'unknown';\n}\n\nfunction insetRingCssAuthority(utility: string): CssAuthority | undefined {\n if (utility === 'inset-ring') return ['--tw-inset-ring-shadow', 'box-shadow'];\n if (!utility.startsWith('inset-ring-')) return undefined;\n const suffix = utility.slice('inset-ring-'.length);\n if (isCanonicalInteger(suffix)) return ['--tw-inset-ring-shadow', 'box-shadow'];\n if (isPinnedTailwindColorToken(suffix)) return ['--tw-inset-ring-color'];\n return 'unknown';\n}\n\nfunction arbitraryBackgroundCssAuthority(value: string): CssAuthority {\n const arbitrary = value.match(/^\\[([\\s\\S]+)\\](?:\\/[\\s\\S]+)?$/u)?.[1];\n if (arbitrary === undefined) return 'unknown';\n const property = tailwindArbitraryBackgroundKind(`[${arbitrary}]`);\n return property === 'unknown' ? property : [property];\n}\n\nfunction isRecognizedTailwindAuthority(utility: string): boolean {\n const normalized = utility.startsWith('-') ? utility.slice(1) : utility;\n return (\n recognizedTailwindAuthorityTokens.has(normalized) ||\n recognizedTailwindAuthorityNamespaces.some(\n namespace => normalized === namespace || normalized.startsWith(`${namespace}-`),\n )\n );\n}\n\nfunction cssProperties(utility: string): CssAuthority | undefined {\n const arbitraryProperty = utility.match(/^\\[([^:]+):/u)?.[1];\n if (arbitraryProperty) return [arbitraryProperty];\n if (displayUtilities.has(utility)) return ['display'];\n if (/^flex-(?:row|row-reverse|col|col-reverse)$/u.test(utility)) return ['flex-direction'];\n if (/^flex-(?:wrap|wrap-reverse|nowrap)$/u.test(utility)) return ['flex-wrap'];\n if (/^flex-.+$/u.test(utility)) return ['flex'];\n if (/^grow(?:-.+)?$/u.test(utility)) return ['flex-grow'];\n if (/^shrink(?:-.+)?$/u.test(utility)) return ['flex-shrink'];\n if (/^basis-.+$/u.test(utility)) return ['flex-basis'];\n if (/^box-(?:border|content)$/u.test(utility)) return ['box-sizing'];\n if (/^justify-items-/u.test(utility)) return ['justify-items'];\n if (/^justify-self-/u.test(utility)) return ['justify-self'];\n if (/^justify-/u.test(utility)) return ['justify-content'];\n if (/^items-/u.test(utility)) return ['align-items'];\n if (utility === 'content-none') return ['--tw-content', 'content'];\n if (/^content-\\[/u.test(utility)) return ['--tw-content', 'content'];\n if (/^content-/u.test(utility)) return ['align-content'];\n if (/^self-/u.test(utility)) return ['align-self'];\n if (/^gap-x-/u.test(utility)) return ['column-gap'];\n if (/^gap-y-/u.test(utility)) return ['row-gap'];\n if (/^gap-/u.test(utility)) return ['gap'];\n if (/^order-/u.test(utility)) return ['order'];\n if (/^-?m-/u.test(utility)) return ['margin'];\n if (/^-?mx-/u.test(utility)) return ['margin-inline'];\n if (/^-?my-/u.test(utility)) return ['margin-block'];\n if (/^-?mt-/u.test(utility)) return ['margin-top'];\n if (/^-?mr-/u.test(utility)) return ['margin-right'];\n if (/^-?mb-/u.test(utility)) return ['margin-bottom'];\n if (/^-?ml-/u.test(utility)) return ['margin-left'];\n if (/^-?ms-/u.test(utility)) return ['margin-inline-start'];\n if (/^-?me-/u.test(utility)) return ['margin-inline-end'];\n if (/^p-/u.test(utility)) return ['padding'];\n if (/^px-/u.test(utility)) return ['padding-inline'];\n if (/^py-/u.test(utility)) return ['padding-block'];\n if (/^pt-/u.test(utility)) return ['padding-top'];\n if (/^pr-/u.test(utility)) return ['padding-right'];\n if (/^pb-/u.test(utility)) return ['padding-bottom'];\n if (/^pl-/u.test(utility)) return ['padding-left'];\n if (/^ps-/u.test(utility)) return ['padding-inline-start'];\n if (/^pe-/u.test(utility)) return ['padding-inline-end'];\n if (/^size-/u.test(utility)) return ['width', 'height'];\n if (/^w-/u.test(utility)) return ['width'];\n if (/^h-/u.test(utility)) return ['height'];\n if (/^min-w-/u.test(utility)) return ['min-width'];\n if (/^min-h-/u.test(utility)) return ['min-height'];\n if (/^max-w-/u.test(utility)) return ['max-width'];\n if (/^max-h-/u.test(utility)) return ['max-height'];\n const textValue = utility.match(/^text-([\\s\\S]+)$/u)?.[1];\n const [textBaseValue] = textValue?.split('/') ?? [];\n if (textBaseValue !== undefined && textSizes.has(textBaseValue)) return ['font-size', 'line-height'];\n const arbitraryText = utility.match(/^text-(\\[[\\s\\S]+\\])(?:\\/[^\\s]+)?$/u)?.[1];\n if (arbitraryText !== undefined) {\n const kind = tailwindArbitraryTextKind(arbitraryText);\n if (kind === 'color') return ['color'];\n if (kind === 'font-size') return utility.includes(']/') ? ['font-size', 'line-height'] : ['font-size'];\n return 'unknown';\n }\n if (/^text-(?:left|right|center|justify|start|end)$/u.test(utility)) return ['text-align'];\n if (/^text-(?:wrap|nowrap|balance|pretty)$/u.test(utility)) return ['text-wrap'];\n if (/^text-(?:ellipsis|clip)$/u.test(utility)) return ['text-overflow'];\n if (textValue !== undefined && isPinnedTailwindColorToken(textValue)) return ['color'];\n if (/^text-/u.test(utility)) return 'unknown';\n if (/^bg-(?:auto|cover|contain)$/u.test(utility)) return ['background-size'];\n if (/^bg-(?:fixed|local|scroll)$/u.test(utility)) return ['background-attachment'];\n if (/^bg-clip-/u.test(utility)) return ['background-clip'];\n if (/^bg-origin-/u.test(utility)) return ['background-origin'];\n if (/^bg-(?:bottom|center|left|left-bottom|left-top|right|right-bottom|right-top|top)$/u.test(utility)) {\n return ['background-position'];\n }\n if (/^bg-(?:repeat|no-repeat|repeat-x|repeat-y|repeat-round|repeat-space)$/u.test(utility)) {\n return ['background-repeat'];\n }\n if (/^bg-blend-/u.test(utility)) return ['background-blend-mode'];\n if (utility === 'bg-none') return ['background-image'];\n const backgroundValue = utility.match(/^bg-([\\s\\S]+)$/u)?.[1];\n if (backgroundValue?.startsWith('[')) return arbitraryBackgroundCssAuthority(backgroundValue);\n if (isCssVariableShorthand(backgroundValue ?? '')) return 'unknown';\n if (backgroundValue !== undefined && isPinnedTailwindColorToken(backgroundValue)) return ['background-color'];\n if (/^bg-/u.test(utility)) return 'unknown';\n const borderAuthority = borderCssAuthority(utility);\n if (borderAuthority !== undefined) return borderAuthority;\n if (/^rounded(?:-|$)/u.test(utility)) return ['border-radius'];\n const shadowAuthority = shadowCssAuthority(utility);\n if (shadowAuthority !== undefined) return shadowAuthority;\n const ringAuthority = ringCssAuthority(utility);\n if (ringAuthority !== undefined) return ringAuthority;\n const insetShadowAuthority = insetShadowCssAuthority(utility);\n if (insetShadowAuthority !== undefined) return insetShadowAuthority;\n const insetRingAuthority = insetRingCssAuthority(utility);\n if (insetRingAuthority !== undefined) return insetRingAuthority;\n if (utility === 'truncate') return ['overflow', 'text-overflow', 'white-space'];\n if (/^opacity-/u.test(utility)) return ['opacity'];\n if (/^overflow(?:-|$)/u.test(utility)) return ['overflow'];\n if (['static', 'fixed', 'absolute', 'relative', 'sticky'].includes(utility)) return ['position'];\n if (/^-?inset-x-/u.test(utility)) return ['inset-inline'];\n if (/^-?inset-y-/u.test(utility)) return ['inset-block'];\n if (/^-?inset-/u.test(utility)) return ['inset'];\n if (/^-?top-/u.test(utility)) return ['top'];\n if (/^-?right-/u.test(utility)) return ['right'];\n if (/^-?bottom-/u.test(utility)) return ['bottom'];\n if (/^-?left-/u.test(utility)) return ['left'];\n if (/^-?rotate-z-/u.test(utility)) return ['--tw-rotate-z', 'transform'];\n if (/^-?rotate-(?:x|y)-/u.test(utility)) return 'unknown';\n if (/^-?rotate-/u.test(utility)) return ['rotate'];\n if (/^scale-(?:x|y|z)-/u.test(utility)) return 'unknown';\n if (/^scale-(?:\\[|\\()/u.test(utility)) return ['scale'];\n if (/^scale-/u.test(utility)) return ['--tw-scale-x', '--tw-scale-y', '--tw-scale-z', 'scale'];\n if (/^-?translate-z-/u.test(utility)) return 'unknown';\n if (/^-?translate-x-/u.test(utility)) return ['--tw-translate-x', 'translate'];\n if (/^-?translate-y-/u.test(utility)) return ['--tw-translate-y', 'translate'];\n if (/^-?translate-/u.test(utility)) return ['--tw-translate-x', '--tw-translate-y', 'translate'];\n if (utility === 'transition-none') return ['transition-property'];\n if (utility === 'transition-discrete' || utility === 'transition-normal') return ['transition-behavior'];\n if (/^transition(?:-|$)/u.test(utility)) {\n return ['transition-property', 'transition-timing-function', 'transition-duration'];\n }\n if (/^duration-/u.test(utility)) return ['--tw-duration', 'transition-duration'];\n if (/^delay-/u.test(utility)) return ['transition-delay'];\n if (/^ease-/u.test(utility)) return ['--tw-ease', 'transition-timing-function'];\n if (/^grid-cols(?:-|$)/u.test(utility)) return ['grid-template-columns'];\n if (/^auto-cols(?:-|$)/u.test(utility)) return ['grid-auto-columns'];\n if (/^grid-rows(?:-|$)/u.test(utility)) return ['grid-template-rows'];\n if (/^auto-rows(?:-|$)/u.test(utility)) return ['grid-auto-rows'];\n if (/^col-(?:span-|auto$)/u.test(utility)) return ['grid-column'];\n if (/^col-start-/u.test(utility)) return ['grid-column-start'];\n if (/^col-end-/u.test(utility)) return ['grid-column-end'];\n if (/^row-(?:span-|auto$)/u.test(utility)) return ['grid-row'];\n if (/^row-start-/u.test(utility)) return ['grid-row-start'];\n if (/^row-end-/u.test(utility)) return ['grid-row-end'];\n if (/^table-(?:auto|fixed)$/u.test(utility)) return ['table-layout'];\n if (/^list-(?:disc|decimal|none)$/u.test(utility)) return ['list-style-type'];\n if (/^list-(?:inside|outside)$/u.test(utility)) return ['list-style-position'];\n if (/^object-(?:contain|cover|fill|none|scale-down)$/u.test(utility)) return ['object-fit'];\n if (/^object-/u.test(utility)) return ['object-position'];\n if (/^cursor-/u.test(utility)) return ['cursor'];\n if (/^pointer-events-/u.test(utility)) return ['pointer-events'];\n if (['visible', 'invisible', 'collapse'].includes(utility)) return ['visibility'];\n if (utility === 'sr-only') {\n return ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space', 'border-width'];\n }\n if (utility === 'not-sr-only') {\n return ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space'];\n }\n return isRecognizedTailwindAuthority(utility) ? 'unknown' : undefined;\n}\n\nexport function describeTailwindUtility(token: string): TailwindUtilityDescriptor | undefined {\n const split = splitVariants(token);\n if (split === undefined) return undefined;\n const { variants, utility: modifiedUtility } = split;\n const leadingImportant = modifiedUtility.startsWith('!');\n const trailingImportant = modifiedUtility.endsWith('!');\n if (leadingImportant && trailingImportant) return undefined;\n const utility = modifiedUtility.replace(/^!/u, '').replace(/!$/u, '');\n if (utility.length === 0) return undefined;\n const important = leadingImportant || trailingImportant || hasInternalDeclarationImportance(utility);\n const authority = cssProperties(utility);\n return {\n token,\n variants,\n utility,\n cssProperties: authority === undefined || authority === 'unknown' ? [] : authority,\n ...(authority === 'unknown' ? { hasUnknownCssAuthority: true } : {}),\n activation: activation(variants),\n hasGeneratedMediaVariant: hasGeneratedMediaVariant(variants),\n important,\n };\n}\n\nexport function describeTailwindDisplay(token: string): TailwindDisplayUtility | undefined {\n const descriptor = describeTailwindUtility(token);\n if (descriptor === undefined) return undefined;\n if (!descriptor.cssProperties.includes('display')) return undefined;\n return {\n token: descriptor.token,\n utility: descriptor.utility,\n activation: descriptor.activation,\n important: descriptor.important,\n };\n}\n\nfunction activationsIntersect(left: TailwindActivation, right: TailwindActivation): boolean {\n return left.kind === 'base' || right.kind === 'base' || mediaRangesIntersect(left.range, right.range);\n}\n\nexport function findTailwindClassConflicts(\n existingClassNames: readonly string[],\n generatedClassNames: readonly string[],\n): ReadonlySet<string> {\n const generatedTokens = new Set(generatedClassNames);\n const existing = existingClassNames\n .filter(token => !generatedTokens.has(token))\n .map(describeTailwindUtility)\n .filter(descriptor => descriptor !== undefined);\n const conflicts = new Set<string>();\n\n for (const generated of generatedClassNames\n .map(describeTailwindUtility)\n .filter(descriptor => descriptor !== undefined)) {\n const generatedProperties = generated.cssProperties;\n if (generatedProperties.length === 0) continue;\n if (\n existing.some(\n current =>\n activationsIntersect(current.activation, generated.activation) &&\n (current.hasUnknownCssAuthority === true ||\n generated.hasUnknownCssAuthority === true ||\n current.cssProperties.some(currentProperty =>\n generatedProperties.some(generatedProperty => cssPropertiesOverlap(currentProperty, generatedProperty)),\n )),\n )\n ) {\n conflicts.add(generated.token);\n }\n }\n\n return conflicts;\n}\n\nexport function hasTailwindClassConflict(\n existingClassNames: readonly string[],\n generatedClassNames: readonly string[],\n): boolean {\n return findTailwindClassConflicts(existingClassNames, generatedClassNames).size > 0;\n}\n","import type { BreakpointDefinition, MediaRange } from '../../breakpoint/breakpoint-catalog';\nimport { describeTailwindUtility } from './tailwind-class-conflict';\n\nexport class ResponsiveVariantEmitter {\n emit(definition: BreakpointDefinition, utility: string): string {\n const descriptor = describeTailwindUtility(utility);\n if (descriptor === undefined) {\n throw new Error('Cannot decorate a malformed Tailwind utility');\n }\n if (descriptor.variants.length > 0) {\n throw new Error('Cannot decorate an already-variant utility');\n }\n\n return `[${this.mediaQuery(definition.range)}]:${utility}`;\n }\n\n emitCandidate(definition: BreakpointDefinition, candidate: string): string {\n const descriptor = describeTailwindUtility(candidate);\n if (descriptor === undefined) {\n throw new Error('Cannot decorate a malformed Tailwind candidate');\n }\n if (descriptor.hasGeneratedMediaVariant) {\n throw new Error('Cannot decorate a candidate containing a generated media variant');\n }\n\n return `[${this.mediaQuery(definition.range)}]:${candidate}`;\n }\n\n private mediaQuery(range: MediaRange): string {\n const conditions = [\n range.min === undefined ? undefined : `(min-width:_${range.min}px)`,\n range.max === undefined ? undefined : `(max-width:_${range.max}px)`,\n ].filter((condition): condition is string => condition !== undefined);\n\n return `@media_screen_and_${conditions.join('_and_')}`;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog } from '../../breakpoint/breakpoint-catalog';\nimport { ResponsiveVariantEmitter } from './responsive-variant.emitter';\nimport type { TailwindStrategyResult } from './tailwind-semantic.model';\n\nexport function planResponsiveClasses(\n input: LocatedFlexLayoutInput,\n classNames: readonly string[],\n catalog: BreakpointCatalog,\n emitter: ResponsiveVariantEmitter,\n): TailwindStrategyResult {\n if (input.binding === 'property') {\n return {\n status: 'review',\n code: 'dynamic-binding',\n reason: 'Angular property bindings may depend on runtime state.',\n suggestion: 'Replace the binding manually or make it a literal before migration.',\n };\n }\n\n if (!input.breakpoint) return { status: 'converted', classNames };\n\n const classification = catalog.classify(input.breakpoint);\n if (classification.kind === 'verified') {\n return {\n status: 'converted',\n classNames: classNames.map(className => emitter.emit(classification.definition, className)),\n };\n }\n\n if (classification.kind === 'custom') {\n return {\n status: 'review',\n code: 'custom-breakpoint',\n reason: `The breakpoint alias ${classification.alias} may be registered by the project.`,\n suggestion: 'Provide its media query or migrate this responsive input manually.',\n };\n }\n\n const alias = classification.alias;\n const kind = classification.kind === 'print' ? 'print' : 'optional';\n return {\n status: 'review',\n code: 'breakpoint-unverified',\n reason: `Exact media-query output for the ${kind} breakpoint alias ${alias} is not implemented.`,\n suggestion: 'Keep the responsive directive until exact breakpoint support is available.',\n };\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog, mediaRangesIntersect, type MediaRange } from '../../breakpoint/breakpoint-catalog';\nimport type { ConversionContext, PlannedConversion } from '../conversion-adapter';\nimport { planResponsiveClasses } from './responsive-plan';\nimport { ResponsiveVariantEmitter } from './responsive-variant.emitter';\nimport type { TailwindStrategyResult } from './tailwind-semantic.model';\n\nexport type DirectiveFamily =\n | 'layout'\n | 'layout-gap'\n | 'layout-align'\n | 'flex-item'\n | 'flex-align'\n | 'flex-fill'\n | 'flex-offset'\n | 'flex-order'\n | 'visibility'\n | 'extended-class'\n | 'extended-style';\n\nexport type PlanOne = (input: LocatedFlexLayoutInput, context: ConversionContext) => PlannedConversion;\nexport type PlanExtendedFamily = (\n family: 'extended-class' | 'extended-style',\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n) => readonly PlannedConversion[];\n\nconst familyByDirective = new Map<LocatedFlexLayoutInput['directive'], DirectiveFamily>([\n ['fxLayout', 'layout'],\n ['fxLayoutGap', 'layout-gap'],\n ['fxLayoutAlign', 'layout-align'],\n ['fxFlex', 'flex-item'],\n ['fxGrow', 'flex-item'],\n ['fxShrink', 'flex-item'],\n ['fxFlexAlign', 'flex-align'],\n ['fxFlexFill', 'flex-fill'],\n ['fxFill', 'flex-fill'],\n ['fxFlexOffset', 'flex-offset'],\n ['fxFlexOrder', 'flex-order'],\n ['fxShow', 'visibility'],\n ['fxHide', 'visibility'],\n ['class', 'extended-class'],\n ['ngClass', 'extended-class'],\n ['style', 'extended-style'],\n ['ngStyle', 'extended-style'],\n]);\n\nconst localLayoutDependents = new Set<DirectiveFamily>(['layout-gap', 'layout-align']);\nconst parentLayoutDependents = new Set<DirectiveFamily>(['flex-item', 'flex-offset']);\n\ninterface NumericRange {\n readonly min: number;\n readonly max: number;\n}\n\nfunction converted(input: LocatedFlexLayoutInput, classNames: readonly string[]): PlannedConversion {\n return { status: 'converted', input, classNames };\n}\n\nfunction fromStrategyResult(input: LocatedFlexLayoutInput, result: TailwindStrategyResult): PlannedConversion {\n if (result.status === 'converted') return converted(input, result.classNames);\n if (result.status === 'invalid') {\n return {\n status: 'invalid',\n input,\n code: result.code,\n reason: `${input.value} is not a supported ${input.directive} value.`,\n suggestion: 'Correct the value or migrate this directive manually.',\n };\n }\n return { ...result, input };\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput, reason: string): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason,\n suggestion: 'Migrate the responsive context and its dependent directive families together manually.',\n };\n}\n\nfunction canonicalClasses(plan: PlannedConversion): readonly string[] | undefined {\n return plan.status === 'converted' ? [...new Set(plan.classNames)].sort() : undefined;\n}\n\nfunction sameClasses(left: PlannedConversion, right: PlannedConversion): boolean {\n const leftClasses = canonicalClasses(left);\n const rightClasses = canonicalClasses(right);\n return (\n leftClasses !== undefined &&\n rightClasses !== undefined &&\n leftClasses.length === rightClasses.length &&\n leftClasses.every((className, index) => className === rightClasses[index])\n );\n}\n\nfunction numericRange(range: MediaRange): NumericRange {\n return {\n min: range.min ?? Number.NEGATIVE_INFINITY,\n max: range.max ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction mediaRange(range: NumericRange): MediaRange {\n return {\n min: range.min === Number.NEGATIVE_INFINITY ? undefined : range.min,\n max: range.max === Number.POSITIVE_INFINITY ? undefined : range.max,\n };\n}\n\nfunction nextBelow(value: number): number {\n return value - Math.max(1, Math.abs(value)) * Number.EPSILON;\n}\n\nfunction nextAbove(value: number): number {\n return value + Math.max(1, Math.abs(value)) * Number.EPSILON;\n}\n\nfunction subtractRange(source: NumericRange, excluded: NumericRange): readonly NumericRange[] {\n if (source.max < excluded.min || excluded.max < source.min) return [source];\n const remaining: NumericRange[] = [];\n if (source.min < excluded.min) remaining.push({ min: source.min, max: nextBelow(excluded.min) });\n if (excluded.max < source.max) remaining.push({ min: nextAbove(excluded.max), max: source.max });\n return remaining;\n}\n\nfunction effectiveRanges(\n input: LocatedFlexLayoutInput,\n familyInputs: readonly LocatedFlexLayoutInput[],\n catalog: BreakpointCatalog,\n): readonly NumericRange[] {\n if (input.breakpoint) {\n const classification = catalog.classify(input.breakpoint);\n return classification.kind === 'verified' ? [numericRange(classification.definition.range)] : [];\n }\n\n let ranges: readonly NumericRange[] = [{ min: Number.NEGATIVE_INFINITY, max: Number.POSITIVE_INFINITY }];\n for (const sibling of familyInputs) {\n if (!sibling.breakpoint || sibling.binding !== 'literal') continue;\n const classification = catalog.classify(sibling.breakpoint);\n if (classification.kind !== 'verified') continue;\n const excluded = numericRange(classification.definition.range);\n ranges = ranges.flatMap(range => subtractRange(range, excluded));\n }\n return ranges;\n}\n\nfunction rangesCover(target: NumericRange, ranges: readonly NumericRange[]): boolean {\n const clipped = ranges\n .map(range => ({ min: Math.max(target.min, range.min), max: Math.min(target.max, range.max) }))\n .filter(range => range.min <= range.max)\n .sort((left, right) => left.min - right.min);\n if (!clipped.length || clipped[0]?.min !== target.min) return false;\n\n let coveredUntil = clipped[0].max;\n for (const range of clipped.slice(1)) {\n if (range.min > coveredUntil) return false;\n coveredUntil = Math.max(coveredUntil, range.max);\n }\n return coveredUntil >= target.max;\n}\n\nexport class ResponsiveFamilyPlanner {\n constructor(\n private readonly catalog = new BreakpointCatalog(),\n private readonly emitter = new ResponsiveVariantEmitter(),\n ) {}\n\n plan(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n planExtendedFamily?: PlanExtendedFamily,\n ): readonly PlannedConversion[] {\n return this.planWithDependencies(inputs, context, planOne, true, true, planExtendedFamily);\n }\n\n closeDependencies(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n ): readonly PlannedConversion[] {\n return this.planWithDependencies(inputs, context, planOne, false, false);\n }\n\n private planWithDependencies(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n decorate: boolean,\n validateResponsivePrecedence: boolean,\n planExtendedFamily?: PlanExtendedFamily,\n ): readonly PlannedConversion[] {\n const groups = new Map<DirectiveFamily, LocatedFlexLayoutInput[]>();\n const ungrouped: LocatedFlexLayoutInput[] = [];\n for (const input of inputs) {\n const family = familyByDirective.get(input.directive);\n if (!family) {\n ungrouped.push(input);\n continue;\n }\n const members = groups.get(family) ?? [];\n members.push(input);\n groups.set(family, members);\n }\n\n const completeContext: ConversionContext = { ...context, inputs };\n const rawPlansByFamily = new Map<DirectiveFamily, readonly PlannedConversion[]>();\n const layoutInputs = groups.get('layout') ?? [];\n const layoutPlans = this.planFamily(layoutInputs, completeContext, planOne, validateResponsivePrecedence);\n if (layoutInputs.length) rawPlansByFamily.set('layout', layoutPlans);\n\n const parentLayoutInputs = context.parentInputs?.filter(input => input.directive === 'fxLayout');\n const parentLayoutSafe =\n parentLayoutInputs === undefined ||\n this.isLayoutContextSafe(\n context.parentInputs ?? [],\n {\n ...context,\n element: context.parent ?? context.element,\n inputs: context.parentInputs,\n parent: undefined,\n parentInputs: undefined,\n },\n planOne,\n validateResponsivePrecedence,\n );\n const localLayoutSafe = layoutPlans.every(plan => plan.status === 'converted');\n\n for (const [family, familyInputs] of groups) {\n if (family === 'layout') continue;\n\n let plans: readonly PlannedConversion[];\n if ((family === 'extended-class' || family === 'extended-style') && planExtendedFamily) {\n plans = planExtendedFamily(family, familyInputs, completeContext);\n } else if (localLayoutDependents.has(family)) {\n plans = localLayoutSafe\n ? this.planContextualFamily(\n familyInputs,\n completeContext,\n layoutInputs,\n 'activeLayout',\n planOne,\n validateResponsivePrecedence,\n )\n : this.planBlockedContextFamily(\n familyInputs,\n completeContext,\n planOne,\n 'The responsive layout family contains an unresolved member.',\n !validateResponsivePrecedence,\n );\n } else if (parentLayoutDependents.has(family)) {\n plans = parentLayoutSafe\n ? this.planContextualFamily(\n familyInputs,\n completeContext,\n parentLayoutInputs ?? [],\n 'activeParentLayout',\n planOne,\n validateResponsivePrecedence,\n )\n : this.planBlockedContextFamily(\n familyInputs,\n completeContext,\n planOne,\n 'The responsive parent layout family contains an unresolved member.',\n !validateResponsivePrecedence,\n );\n } else {\n plans = this.planFamily(familyInputs, completeContext, planOne, validateResponsivePrecedence);\n }\n rawPlansByFamily.set(family, plans);\n }\n\n const localFamilies = ['layout', 'layout-gap', 'layout-align'] as const;\n const localContextUnresolved = localFamilies.some(family =>\n rawPlansByFamily.get(family)?.some(plan => plan.status !== 'converted'),\n );\n if (localContextUnresolved) {\n for (const family of localFamilies) {\n const plans = rawPlansByFamily.get(family);\n if (!plans) continue;\n rawPlansByFamily.set(\n family,\n plans.map(plan =>\n plan.status === 'converted'\n ? contextUnverified(\n plan.input,\n 'The element layout context contains an unresolved dependent directive family.',\n )\n : plan,\n ),\n );\n }\n }\n\n const plansById = new Map<string, PlannedConversion>();\n for (const [family, plans] of rawPlansByFamily) {\n const shouldDecorate = decorate && family !== 'extended-class' && family !== 'extended-style';\n for (const plan of plans) plansById.set(plan.input.id, shouldDecorate ? this.decorate(plan) : plan);\n }\n for (const input of ungrouped) {\n const plan = planOne(input, completeContext);\n plansById.set(input.id, decorate ? this.decorate(plan) : plan);\n }\n return inputs.map(input => {\n const planned = plansById.get(input.id);\n if (planned) return planned;\n const plan = planOne(input, completeContext);\n return decorate ? this.decorate(plan) : plan;\n });\n }\n\n private planContextualFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n layoutInputs: readonly LocatedFlexLayoutInput[],\n contextKey: 'activeLayout' | 'activeParentLayout',\n planOne: PlanOne,\n validateResponsivePrecedence: boolean,\n ): readonly PlannedConversion[] {\n const semanticPlans = inputs.map(input => {\n const breakpointPlan = this.planBreakpoint(input, context, planOne);\n if (breakpointPlan.status !== 'converted') return breakpointPlan;\n const layoutValues = this.layoutValuesFor(input, inputs, layoutInputs);\n if (!layoutValues.length) {\n return contextUnverified(input, 'The active responsive layout cannot be resolved for this input.');\n }\n const candidates = layoutValues.map(value => planOne(input, { ...context, [contextKey]: value }));\n const unresolved = candidates.find(candidate => candidate.status !== 'converted');\n if (unresolved) return unresolved;\n const first = candidates[0];\n if (!first || candidates.some(candidate => !sameClasses(first, candidate))) {\n return contextUnverified(\n input,\n 'This directive emits different utilities across its active responsive layout contexts.',\n );\n }\n return first;\n });\n return this.validateFamily(inputs, semanticPlans, validateResponsivePrecedence);\n }\n\n private isLayoutContextSafe(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n validateResponsivePrecedence: boolean,\n ): boolean {\n const layoutInputs = inputs.filter(input => input.directive === 'fxLayout');\n if (\n this.planFamily(layoutInputs, context, planOne, validateResponsivePrecedence).some(\n plan => plan.status !== 'converted',\n )\n ) {\n return false;\n }\n\n return (['fxLayoutGap', 'fxLayoutAlign'] as const).every(directive => {\n const familyInputs = inputs.filter(input => input.directive === directive);\n return this.planContextualFamily(\n familyInputs,\n context,\n layoutInputs,\n 'activeLayout',\n planOne,\n validateResponsivePrecedence,\n ).every(plan => plan.status === 'converted');\n });\n }\n\n private planBlockedContextFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n reason: string,\n preserveExistingDiagnostics = false,\n ): readonly PlannedConversion[] {\n return inputs.map(input => {\n const breakpointPlan = this.planBreakpoint(input, context, planOne);\n if (breakpointPlan.status !== 'converted') return breakpointPlan;\n const existingPlan = preserveExistingDiagnostics ? planOne(input, context) : breakpointPlan;\n return existingPlan.status === 'converted' ? contextUnverified(input, reason) : existingPlan;\n });\n }\n\n private planBreakpoint(\n input: LocatedFlexLayoutInput,\n context: ConversionContext,\n planOne: PlanOne,\n ): PlannedConversion {\n return input.binding === 'literal' ? this.validateBreakpoint(converted(input, [])) : planOne(input, context);\n }\n\n private layoutValuesFor(\n input: LocatedFlexLayoutInput,\n familyInputs: readonly LocatedFlexLayoutInput[],\n layoutInputs: readonly LocatedFlexLayoutInput[],\n ): readonly string[] {\n const baseLayouts = layoutInputs.filter(layout => !layout.breakpoint);\n const responsiveLayouts = layoutInputs.flatMap(layout => {\n if (!layout.breakpoint) return [];\n const classification = this.catalog.classify(layout.breakpoint);\n return classification.kind === 'verified'\n ? [{ value: layout.value, range: numericRange(classification.definition.range) }]\n : [];\n });\n const values = new Set<string>();\n\n for (const target of effectiveRanges(input, familyInputs, this.catalog)) {\n const activeResponsive = responsiveLayouts.filter(layout =>\n mediaRangesIntersect(mediaRange(target), mediaRange(layout.range)),\n );\n for (const layout of activeResponsive) values.add(layout.value);\n if (\n !rangesCover(\n target,\n activeResponsive.map(layout => layout.range),\n )\n ) {\n if (baseLayouts.length) {\n for (const layout of baseLayouts) values.add(layout.value);\n } else {\n values.add('row');\n }\n }\n }\n return [...values];\n }\n\n private planFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n planOne: PlanOne,\n validateResponsivePrecedence: boolean,\n ): readonly PlannedConversion[] {\n return this.validateFamily(\n inputs,\n inputs.map(input => planOne(input, context)),\n validateResponsivePrecedence,\n );\n }\n\n private validateFamily(\n inputs: readonly LocatedFlexLayoutInput[],\n semanticPlans: readonly PlannedConversion[],\n validateResponsivePrecedence: boolean,\n ): readonly PlannedConversion[] {\n if (inputs.some(input => input.binding !== 'literal')) {\n return inputs.map((input, index) => {\n const semanticPlan =\n semanticPlans[index] ??\n contextUnverified(input, 'The dynamic member of this directive family cannot be planned.');\n if (input.binding !== 'literal') return semanticPlan;\n const breakpointPlan = this.validateBreakpoint(semanticPlan);\n if (\n breakpointPlan.status !== 'converted' &&\n (breakpointPlan.code === 'breakpoint-unverified' || breakpointPlan.code === 'custom-breakpoint')\n ) {\n return breakpointPlan;\n }\n return contextUnverified(input, 'Another member of this responsive directive family is dynamic.');\n });\n }\n const supportedPlans = semanticPlans.map(plan => this.validateBreakpoint(plan));\n if (supportedPlans.some(plan => plan.status !== 'converted')) {\n return supportedPlans.map(plan =>\n plan.status === 'converted'\n ? contextUnverified(plan.input, 'Another member of this responsive directive family is unresolved.')\n : plan,\n );\n }\n\n if (!validateResponsivePrecedence) return supportedPlans;\n\n for (let leftIndex = 0; leftIndex < inputs.length; leftIndex += 1) {\n const leftInput = inputs[leftIndex];\n const leftPlan = supportedPlans[leftIndex];\n if (!leftInput?.breakpoint || !leftPlan) continue;\n const leftClassification = this.catalog.classify(leftInput.breakpoint);\n if (leftClassification.kind !== 'verified') continue;\n\n for (let rightIndex = leftIndex + 1; rightIndex < inputs.length; rightIndex += 1) {\n const rightInput = inputs[rightIndex];\n const rightPlan = supportedPlans[rightIndex];\n if (!rightInput?.breakpoint || !rightPlan) continue;\n const rightClassification = this.catalog.classify(rightInput.breakpoint);\n if (\n rightClassification.kind === 'verified' &&\n mediaRangesIntersect(leftClassification.definition.range, rightClassification.definition.range) &&\n !sameClasses(leftPlan, rightPlan)\n ) {\n return inputs.map(input => ({\n status: 'review',\n input,\n code: 'responsive-precedence-unverified',\n reason: 'Overlapping responsive ranges emit different utilities for the same directive family.',\n suggestion: 'Simplify the overlapping declarations or migrate this directive family manually.',\n }));\n }\n }\n }\n return supportedPlans;\n }\n\n private validateBreakpoint(plan: PlannedConversion): PlannedConversion {\n if (plan.status !== 'converted' || !plan.input.breakpoint) return plan;\n const classification = this.catalog.classify(plan.input.breakpoint);\n if (classification.kind === 'verified') return plan;\n const result = planResponsiveClasses(plan.input, plan.classNames, this.catalog, this.emitter);\n return result.status === 'converted' ? plan : fromStrategyResult(plan.input, result);\n }\n\n private decorate(plan: PlannedConversion): PlannedConversion {\n if (plan.status !== 'converted') return plan;\n const result = planResponsiveClasses(plan.input, plan.classNames, this.catalog, this.emitter);\n return fromStrategyResult(plan.input, result);\n }\n}\n","import { ResponsiveVariantEmitter } from '../responsive-variant.emitter';\nimport type { VisibilityState } from './visibility.model';\n\nexport class VisibilityEmitter {\n constructor(private readonly responsiveEmitter = new ResponsiveVariantEmitter()) {}\n\n emit(state: VisibilityState, restorationUtility: string | undefined): readonly string[] {\n const utility = state.intent === 'hidden' ? 'hidden' : restorationUtility;\n if (utility === undefined) return [];\n if (state.activation.kind === 'base') return [utility];\n return [this.responsiveEmitter.emit(state.activation.definition, utility)];\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog, mediaRangesIntersect, type MediaRange } from '../../../breakpoint/breakpoint-catalog';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport { describeTailwindDisplay, type TailwindActivation } from '../tailwind-class-conflict';\nimport { VisibilityEmitter } from './visibility.emitter';\nimport type { VisibilityState } from './visibility.model';\nimport type { VisibilityFamilyPlan } from './visibility-state.planner';\nimport type { VisibleDisplayResolution } from './visible-display.resolver';\n\nexport interface DisplayCompositionRequest {\n readonly visibilityPlan: VisibilityFamilyPlan;\n readonly displayResolution: VisibleDisplayResolution;\n readonly layoutPlans: readonly PlannedConversion[];\n}\n\nexport type DisplayCompositionResult =\n | { readonly status: 'converted'; readonly plans: readonly PlannedConversion[] }\n | { readonly status: 'unresolved'; readonly plans: readonly PlannedConversion[] };\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\ninterface NumericRange {\n readonly min: number;\n readonly max: number;\n}\n\nfunction mediaRange(activation: TailwindActivation): MediaRange {\n return activation.kind === 'base' ? {} : activation.range;\n}\n\nfunction numericRange(range: MediaRange): NumericRange {\n return {\n min: range.min ?? Number.NEGATIVE_INFINITY,\n max: range.max ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction rangesCover(target: MediaRange, ranges: readonly MediaRange[]): boolean {\n const numericTarget = numericRange(target);\n const clipped = ranges\n .filter(range => mediaRangesIntersect(target, range))\n .map(range => {\n const numeric = numericRange(range);\n return {\n min: Math.max(numericTarget.min, numeric.min),\n max: Math.min(numericTarget.max, numeric.max),\n };\n })\n .sort((left, right) => left.min - right.min);\n const first = clipped[0];\n if (!first || first.min !== numericTarget.min) return false;\n\n let coveredUntil = first.max;\n for (const range of clipped.slice(1)) {\n if (range.min > coveredUntil) return false;\n coveredUntil = Math.max(coveredUntil, range.max);\n }\n return coveredUntil >= numericTarget.max;\n}\n\nfunction isConvertedLayoutDisplay(className: string): boolean {\n const descriptor = describeTailwindDisplay(className);\n return (\n descriptor !== undefined &&\n (descriptor.utility === 'flex' || descriptor.utility === 'inline-flex') &&\n !descriptor.important &&\n (descriptor.activation.kind === 'media' || descriptor.token === descriptor.utility)\n );\n}\n\nfunction restorationUnverified(input: LocatedFlexLayoutInput, reason: string): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'display-restoration-unverified',\n reason,\n suggestion: 'Provide one unambiguous visible display value or migrate this visibility family manually.',\n };\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Partially overlapping responsive layout and visibility displays have unverified cascade precedence.',\n suggestion: 'Migrate the coupled layout and visibility ranges together manually.',\n };\n}\n\nexport class DisplayCompositionPlanner {\n constructor(\n private readonly catalog = new BreakpointCatalog(),\n private readonly emitter = new VisibilityEmitter(),\n ) {}\n\n compose(request: DisplayCompositionRequest): DisplayCompositionResult {\n const layoutPlans = [...request.layoutPlans].sort((left, right) => this.compareInputs(left.input, right.input));\n if (request.visibilityPlan.status === 'unresolved') {\n return {\n status: 'unresolved',\n plans: [\n ...layoutPlans,\n ...[...request.visibilityPlan.plans].sort((left, right) => this.compareInputs(left.input, right.input)),\n ],\n };\n }\n\n const states = [...request.visibilityPlan.states].sort((left, right) => this.compareStates(left, right));\n const displayResolution = request.displayResolution;\n if (displayResolution.status === 'unverified') {\n return {\n status: 'unresolved',\n plans: [...layoutPlans, ...states.map(state => restorationUnverified(state.input, displayResolution.reason))],\n };\n }\n\n if (this.hasUnsafePartialOverlap(layoutPlans, states)) {\n return {\n status: 'unresolved',\n plans: [\n ...layoutPlans.map(plan =>\n plan.status === 'converted' && plan.input.directive === 'fxLayout' ? contextUnverified(plan.input) : plan,\n ),\n ...states.map(state => contextUnverified(state.input)),\n ],\n };\n }\n\n const composedLayouts = layoutPlans.map(plan => this.composeLayout(plan, states));\n const visibilityClassNames = [\n ...new Set(states.flatMap(state => this.emitter.emit(state, displayResolution.utility))),\n ];\n const visibilityPlans = states.map((state, index): PlannedConversion => ({\n status: 'converted',\n input: state.input,\n classNames: index === 0 ? visibilityClassNames : [],\n }));\n const plans = [...composedLayouts, ...visibilityPlans];\n return {\n status: plans.every(plan => plan.status === 'converted') ? 'converted' : 'unresolved',\n plans,\n };\n }\n\n private hasUnsafePartialOverlap(\n layoutPlans: readonly PlannedConversion[],\n states: readonly VisibilityState[],\n ): boolean {\n const baseIsHidden = states.some(state => state.activation.kind === 'base' && state.intent === 'hidden');\n if (baseIsHidden) return false;\n\n const hiddenRanges = states.flatMap(state =>\n state.intent === 'hidden' && state.activation.kind === 'media' ? [state.activation.definition.range] : [],\n );\n if (!hiddenRanges.length) return false;\n\n return layoutPlans.some(plan => {\n if (plan.status !== 'converted' || plan.input.directive !== 'fxLayout') return false;\n return plan.classNames.some(className => {\n if (!isConvertedLayoutDisplay(className)) return false;\n const descriptor = describeTailwindDisplay(className);\n if (!descriptor || descriptor.activation.kind !== 'media') return false;\n const target = descriptor.activation.range;\n return hiddenRanges.some(range => mediaRangesIntersect(target, range)) && !rangesCover(target, hiddenRanges);\n });\n });\n }\n\n private composeLayout(plan: PlannedConversion, states: readonly VisibilityState[]): PlannedConversion {\n if (plan.status !== 'converted' || plan.input.directive !== 'fxLayout') return plan;\n return {\n ...plan,\n classNames: plan.classNames.filter(className => !this.visibilityOwnsHiddenActivation(className, states)),\n };\n }\n\n private visibilityOwnsHiddenActivation(className: string, states: readonly VisibilityState[]): boolean {\n if (!isConvertedLayoutDisplay(className)) return false;\n const descriptor = describeTailwindDisplay(className);\n if (!descriptor) return false;\n const target = mediaRange(descriptor.activation);\n const baseStates = states.filter(state => state.activation.kind === 'base');\n const responsiveStates = states.filter(\n (state): state is VisibilityState & { readonly activation: { readonly kind: 'media' } } =>\n state.activation.kind === 'media',\n );\n const baseIsHidden = baseStates.length > 0 && baseStates.every(state => state.intent === 'hidden');\n if (baseIsHidden) {\n return !responsiveStates.some(\n state => state.intent === 'shown' && mediaRangesIntersect(target, state.activation.definition.range),\n );\n }\n\n return rangesCover(\n target,\n responsiveStates.filter(state => state.intent === 'hidden').map(state => state.activation.definition.range),\n );\n }\n\n private compareStates(left: VisibilityState, right: VisibilityState): number {\n if (left.activation.kind === 'base' && right.activation.kind !== 'base') return -1;\n if (left.activation.kind !== 'base' && right.activation.kind === 'base') return 1;\n if (left.activation.kind === 'media' && right.activation.kind === 'media') {\n if (left.activation.definition.priority !== right.activation.definition.priority) {\n return right.activation.definition.priority - left.activation.definition.priority;\n }\n const aliasOrder = compareText(left.activation.definition.alias, right.activation.definition.alias);\n if (aliasOrder) return aliasOrder;\n }\n return compareText(left.input.id, right.input.id);\n }\n\n private compareInputs(left: LocatedFlexLayoutInput, right: LocatedFlexLayoutInput): number {\n const leftIsBase = left.breakpoint === undefined;\n const rightIsBase = right.breakpoint === undefined;\n if (leftIsBase && !rightIsBase) return -1;\n if (!leftIsBase && rightIsBase) return 1;\n\n const leftPriority = this.breakpointPriority(left.breakpoint);\n const rightPriority = this.breakpointPriority(right.breakpoint);\n if (leftPriority !== rightPriority) return rightPriority - leftPriority;\n\n const aliasOrder = compareText(left.breakpoint ?? '', right.breakpoint ?? '');\n return aliasOrder || compareText(left.id, right.id);\n }\n\n private breakpointPriority(alias: string | undefined): number {\n if (alias === undefined) return Number.POSITIVE_INFINITY;\n const classification = this.catalog.classify(alias);\n return classification.kind === 'verified' ? classification.definition.priority : Number.NEGATIVE_INFINITY;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport type { VisibilityIntent } from './visibility.model';\n\nconst invariantMessage = 'Visibility value parser requires a literal fxShow or fxHide input.';\n\nexport function parseVisibilityValue(input: LocatedFlexLayoutInput): VisibilityIntent {\n if (input.binding !== 'literal' || (input.directive !== 'fxShow' && input.directive !== 'fxHide')) {\n throw new Error(invariantMessage);\n }\n\n const shown = input.value !== 'false';\n return input.directive === 'fxHide' ? (shown ? 'hidden' : 'shown') : shown ? 'shown' : 'hidden';\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport {\n BreakpointCatalog,\n mediaRangesIntersect,\n type BreakpointClassification,\n} from '../../../breakpoint/breakpoint-catalog';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport type { VisibilityState } from './visibility.model';\nimport { parseVisibilityValue } from './visibility-value.parser';\n\nexport type VisibilityFamilyPlan =\n | { readonly status: 'converted'; readonly states: readonly VisibilityState[] }\n | { readonly status: 'unresolved'; readonly plans: readonly PlannedConversion[] };\n\ntype ClassifiedMember =\n | { readonly input: LocatedFlexLayoutInput; readonly state: VisibilityState }\n | { readonly input: LocatedFlexLayoutInput; readonly plan: PlannedConversion };\n\ntype ClassifiedState = Extract<ClassifiedMember, { readonly state: VisibilityState }>;\n\nfunction dynamicBinding(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'dynamic-binding',\n reason: 'Angular property bindings may depend on runtime state.',\n suggestion: 'Replace the binding manually or make it a literal before migration.',\n };\n}\n\nfunction unresolvedBreakpoint(\n input: LocatedFlexLayoutInput,\n classification: Exclude<BreakpointClassification, { readonly kind: 'verified' }>,\n): PlannedConversion {\n if (classification.kind === 'custom') {\n return {\n status: 'review',\n input,\n code: 'custom-breakpoint',\n reason: `The breakpoint alias ${classification.alias} may be registered by the project.`,\n suggestion: 'Provide its media query or migrate this responsive input manually.',\n };\n }\n\n const kind = classification.kind === 'print' ? 'print' : 'optional';\n return {\n status: 'review',\n input,\n code: 'breakpoint-unverified',\n reason: `Exact media-query output for the ${kind} breakpoint alias ${classification.alias} is not implemented.`,\n suggestion: 'Keep the responsive directive until exact breakpoint support is available.',\n };\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Another member of this visibility family is unresolved.',\n suggestion: 'Migrate the complete visibility family together manually.',\n };\n}\n\nfunction responsivePrecedenceUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'responsive-precedence-unverified',\n reason: 'The visibility family contains conflicting base or overlapping responsive states.',\n suggestion: 'Simplify the conflicting declarations or migrate this visibility family manually.',\n };\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nexport class VisibilityStatePlanner {\n constructor(private readonly catalog = new BreakpointCatalog()) {}\n\n plan(inputs: readonly LocatedFlexLayoutInput[]): VisibilityFamilyPlan {\n const members = inputs\n .map(input => this.classify(input))\n .sort((left, right) => this.compare(left.input, right.input));\n\n if (!members.every((member): member is ClassifiedState => 'state' in member)) {\n return {\n status: 'unresolved',\n plans: members.map(member => ('plan' in member ? member.plan : contextUnverified(member.input))),\n };\n }\n\n const states = members.map(member => member.state);\n if (this.hasConflictingStates(states)) {\n return {\n status: 'unresolved',\n plans: states.map(state => responsivePrecedenceUnverified(state.input)),\n };\n }\n\n return { status: 'converted', states };\n }\n\n private classify(input: LocatedFlexLayoutInput): ClassifiedMember {\n if (input.binding !== 'literal') return { input, plan: dynamicBinding(input) };\n\n if (input.breakpoint === undefined) {\n return {\n input,\n state: { input, intent: parseVisibilityValue(input), activation: { kind: 'base' } },\n };\n }\n\n const classification = this.catalog.classify(input.breakpoint);\n if (classification.kind !== 'verified') {\n return { input, plan: unresolvedBreakpoint(input, classification) };\n }\n\n return {\n input,\n state: {\n input,\n intent: parseVisibilityValue(input),\n activation: { kind: 'media', definition: classification.definition },\n },\n };\n }\n\n private hasConflictingStates(states: readonly VisibilityState[]): boolean {\n const baseStates = states.filter(state => state.activation.kind === 'base');\n if (baseStates.some(state => state.intent !== baseStates[0]?.intent)) return true;\n\n const responsiveStates = states.filter(\n (state): state is VisibilityState & { readonly activation: { readonly kind: 'media' } } =>\n state.activation.kind === 'media',\n );\n return responsiveStates.some((left, leftIndex) =>\n responsiveStates\n .slice(leftIndex + 1)\n .some(\n right =>\n left.intent !== right.intent &&\n mediaRangesIntersect(left.activation.definition.range, right.activation.definition.range),\n ),\n );\n }\n\n private compare(left: LocatedFlexLayoutInput, right: LocatedFlexLayoutInput): number {\n const leftIsBase = left.breakpoint === undefined;\n const rightIsBase = right.breakpoint === undefined;\n if (leftIsBase && !rightIsBase) return -1;\n if (!leftIsBase && rightIsBase) return 1;\n\n const leftPriority = this.breakpointPriority(left.breakpoint);\n const rightPriority = this.breakpointPriority(right.breakpoint);\n if (leftPriority !== rightPriority) return rightPriority - leftPriority;\n\n const aliasOrder = compareText(left.breakpoint ?? '', right.breakpoint ?? '');\n return aliasOrder || compareText(left.id, right.id);\n }\n\n private breakpointPriority(alias: string | undefined): number {\n if (alias === undefined) return Number.POSITIVE_INFINITY;\n const classification = this.catalog.classify(alias);\n return classification.kind === 'verified' ? classification.definition.priority : Number.NEGATIVE_INFINITY;\n }\n}\n","const cssWhitespace = /[\\t\\n\\f\\r ]/u;\nconst hexDigit = /[\\da-f]/iu;\n\nexport interface LiteralStyleDeclaration {\n readonly property: string;\n readonly value: string;\n}\n\nexport type LiteralStyleParseResult =\n | { readonly status: 'parsed'; readonly declarations: readonly LiteralStyleDeclaration[] }\n | { readonly status: 'unverified'; readonly reason: string };\n\nfunction splitDeclarations(value: string): readonly string[] | undefined {\n const declarations: string[] = [];\n let current = '';\n let quote: '\"' | \"'\" | undefined;\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n const next = value[index + 1];\n if (character === undefined) continue;\n\n if (quote) {\n current += character;\n if (character === '\\\\') {\n if (next === undefined) return undefined;\n current += next;\n index += 1;\n } else if (character === quote) {\n quote = undefined;\n }\n continue;\n }\n\n if (character === '/' && next === '*') {\n const commentEnd = value.indexOf('*/', index + 2);\n if (commentEnd < 0) return undefined;\n current += ' ';\n index = commentEnd + 1;\n continue;\n }\n if (character === '\"' || character === \"'\") {\n quote = character;\n current += character;\n continue;\n }\n if (character === '\\\\') {\n if (next === undefined || next === '\\n' || next === '\\r' || next === '\\f') return undefined;\n current += character + next;\n index += 1;\n continue;\n }\n\n if (character === '(') parentheses += 1;\n else if (character === ')') {\n if (parentheses === 0) return undefined;\n parentheses -= 1;\n } else if (character === '[') brackets += 1;\n else if (character === ']') {\n if (brackets === 0) return undefined;\n brackets -= 1;\n } else if (character === '{') braces += 1;\n else if (character === '}') {\n if (braces === 0) return undefined;\n braces -= 1;\n }\n\n if (character === ';' && parentheses === 0 && brackets === 0 && braces === 0) {\n declarations.push(current);\n current = '';\n } else {\n current += character;\n }\n }\n\n if (quote || parentheses !== 0 || brackets !== 0 || braces !== 0) return undefined;\n declarations.push(current);\n return declarations;\n}\n\nfunction declarationColon(declaration: string): number | undefined {\n let quote: '\"' | \"'\" | undefined;\n let parentheses = 0;\n let brackets = 0;\n let braces = 0;\n\n for (let index = 0; index < declaration.length; index += 1) {\n const character = declaration[index];\n if (character === undefined) continue;\n if (quote) {\n if (character === '\\\\') index += 1;\n else if (character === quote) quote = undefined;\n continue;\n }\n if (character === '\"' || character === \"'\") {\n quote = character;\n continue;\n }\n if (character === '\\\\') {\n index += 1;\n continue;\n }\n if (character === '(') parentheses += 1;\n else if (character === ')') parentheses -= 1;\n else if (character === '[') brackets += 1;\n else if (character === ']') brackets -= 1;\n else if (character === '{') braces += 1;\n else if (character === '}') braces -= 1;\n else if (character === ':' && parentheses === 0 && brackets === 0 && braces === 0) return index;\n }\n return undefined;\n}\n\nfunction decodeIdentifier(value: string): string | undefined {\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n\n let decoded = '';\n for (let index = 0; index < trimmed.length; index += 1) {\n const character = trimmed[index];\n if (character === undefined) continue;\n if (cssWhitespace.test(character)) return undefined;\n if (character !== '\\\\') {\n decoded += character;\n continue;\n }\n\n const next = trimmed[index + 1];\n if (next === undefined || next === '\\n' || next === '\\r' || next === '\\f') return undefined;\n let hex = '';\n let cursor = index + 1;\n while (hex.length < 6 && cursor < trimmed.length && hexDigit.test(trimmed[cursor] ?? '')) {\n hex += trimmed[cursor];\n cursor += 1;\n }\n if (hex) {\n const codePoint = Number.parseInt(hex, 16);\n decoded +=\n codePoint === 0 || codePoint > 0x10ffff || (codePoint >= 0xd800 && codePoint <= 0xdfff)\n ? '\\uFFFD'\n : String.fromCodePoint(codePoint);\n if (cssWhitespace.test(trimmed[cursor] ?? '')) {\n if (trimmed[cursor] === '\\r' && trimmed[cursor + 1] === '\\n') cursor += 1;\n cursor += 1;\n }\n index = cursor - 1;\n continue;\n }\n\n decoded += next;\n index += 1;\n }\n return decoded;\n}\n\nexport function literalStyleMayControlDisplay(value: string): boolean {\n const result = parseLiteralStyleDeclarations(value);\n if (result.status === 'unverified') return true;\n\n return result.declarations.some(declaration => declaration.property.toLowerCase() === 'display');\n}\n\nexport function parseLiteralStyleDeclarations(value: string): LiteralStyleParseResult {\n const segments = splitDeclarations(value);\n if (!segments) {\n return { status: 'unverified', reason: 'The literal style has malformed or unbalanced delimiters.' };\n }\n\n const declarations: LiteralStyleDeclaration[] = [];\n\n for (const segment of segments) {\n if (!segment.trim()) continue;\n const colon = declarationColon(segment);\n if (colon === undefined) {\n return { status: 'unverified', reason: 'A literal style declaration is missing its property separator.' };\n }\n const property = decodeIdentifier(segment.slice(0, colon));\n if (!property) {\n return { status: 'unverified', reason: 'A literal style declaration has an ambiguous property name.' };\n }\n declarations.push({ property, value: segment.slice(colon + 1).trim() });\n }\n\n return { status: 'parsed', declarations };\n}\n","import type { PlannedConversion } from '../../conversion-adapter';\nimport type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { mediaRangesIntersect } from '../../../breakpoint/breakpoint-catalog';\nimport type { TemplateAttribute } from '../../../template/template.model';\nimport { templateAttributeKeys } from '../../../template/template-attribute';\nimport {\n describeTailwindDisplay,\n type TailwindActivation,\n type TailwindDisplayUtility,\n} from '../tailwind-class-conflict';\nimport type { VisibilityActivation, VisibilityState } from './visibility.model';\nimport { literalStyleMayControlDisplay } from './literal-style-display';\n\nexport type VisibleDisplayResolution =\n | { readonly status: 'resolved'; readonly utility?: string }\n | { readonly status: 'unverified'; readonly reason: string };\n\nexport interface VisibleDisplayRequest {\n readonly states: readonly VisibilityState[];\n readonly layoutPlans: readonly PlannedConversion[];\n readonly existingClassNames: readonly string[];\n readonly attributes: readonly TemplateAttribute[];\n readonly responsiveStyleInputs?: readonly LocatedFlexLayoutInput[];\n}\n\nconst restorationUtilities = new Set([\n 'inline',\n 'block',\n 'inline-block',\n 'flow-root',\n 'flex',\n 'inline-flex',\n 'grid',\n 'inline-grid',\n 'contents',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'list-item',\n]);\n\nconst unverifiedStyleReason = 'A literal or bound style may control the element display value.';\nconst unverifiedClassReason = 'Generated visibility classes cannot be merged safely with a bound class value.';\nconst unverifiedDisplayReason = 'The visible display value cannot be proven from one unambiguous source.';\n\nfunction controlsDisplay(attribute: TemplateAttribute): boolean {\n const keys = templateAttributeKeys(attribute);\n if (attribute.binding === 'literal') {\n return keys.has('style') && literalStyleMayControlDisplay(attribute.value);\n }\n\n return [...keys].some(\n key => key === 'style' || key === 'ngstyle' || key === 'style.display' || key.startsWith('style.display.'),\n );\n}\n\nfunction controlsClasses(attribute: TemplateAttribute): boolean {\n if (attribute.binding !== 'property') return false;\n return [...templateAttributeKeys(attribute)].some(\n key => key === 'class' || key === 'ngclass' || key.startsWith('class.') || key.startsWith('ngclass.'),\n );\n}\n\nfunction sameActivation(left: TailwindActivation, right: VisibilityActivation): boolean {\n if (left.kind !== right.kind) return false;\n if (left.kind === 'base' || right.kind === 'base') return true;\n return left.range.min === right.definition.range.min && left.range.max === right.definition.range.max;\n}\n\nfunction isPlainBase(descriptor: TailwindDisplayUtility): boolean {\n return descriptor.activation.kind === 'base' && !descriptor.important && descriptor.token === descriptor.utility;\n}\n\nfunction layoutDisplays(plans: readonly PlannedConversion[]): readonly TailwindDisplayUtility[] {\n return plans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> =>\n plan.status === 'converted' && plan.input.directive === 'fxLayout',\n )\n .flatMap(plan => plan.classNames.map(describeTailwindDisplay).filter(descriptor => descriptor !== undefined))\n .filter(\n descriptor =>\n (descriptor.utility === 'flex' || descriptor.utility === 'inline-flex') &&\n !descriptor.important &&\n (descriptor.activation.kind === 'media' || descriptor.token === descriptor.utility),\n );\n}\n\nfunction matchingLayoutUtility(\n displays: readonly TailwindDisplayUtility[],\n state: VisibilityState,\n): string | null | undefined {\n if (state.activation.kind === 'media') {\n const stateRange = state.activation.definition.range;\n const hasOverlappingLayout = displays.some(\n display =>\n display.activation.kind === 'media' &&\n !sameActivation(display.activation, state.activation) &&\n mediaRangesIntersect(display.activation.range, stateRange),\n );\n if (hasOverlappingLayout) return null;\n }\n\n const exact = displays.filter(display => sameActivation(display.activation, state.activation));\n const applicable = exact.length > 0 ? exact : displays.filter(display => display.activation.kind === 'base');\n if (applicable.length === 0) return undefined;\n const utilities = [...new Set(applicable.map(display => display.utility))];\n return utilities.length === 1 ? utilities[0] : null;\n}\n\nfunction existingRestorationUtility(descriptors: readonly TailwindDisplayUtility[]): string | undefined {\n if (descriptors.length !== 1) return undefined;\n const descriptor = descriptors[0];\n if (!descriptor || !isPlainBase(descriptor) || !restorationUtilities.has(descriptor.utility)) return undefined;\n return descriptor.utility;\n}\n\nexport class VisibleDisplayResolver {\n resolve(request: VisibleDisplayRequest): VisibleDisplayResolution {\n if (request.responsiveStyleInputs?.length || request.attributes.some(controlsDisplay)) {\n return { status: 'unverified', reason: unverifiedStyleReason };\n }\n\n const baseIsHidden = request.states.some(state => state.activation.kind === 'base' && state.intent === 'hidden');\n const shownOverrides = baseIsHidden\n ? request.states.filter(state => state.activation.kind === 'media' && state.intent === 'shown')\n : [];\n const displayDescriptors = request.existingClassNames\n .map(describeTailwindDisplay)\n .filter(descriptor => descriptor !== undefined);\n const hasEffectiveShownRange = !baseIsHidden || request.states.some(state => state.intent === 'shown');\n const classOutputRequired =\n request.states.some(state => state.intent === 'hidden') ||\n (hasEffectiveShownRange && displayDescriptors.some(descriptor => descriptor.utility === 'hidden'));\n\n if (classOutputRequired && request.attributes.some(controlsClasses)) {\n return { status: 'unverified', reason: unverifiedClassReason };\n }\n\n if (displayDescriptors.some(descriptor => descriptor.utility === 'hidden')) {\n return hasEffectiveShownRange\n ? { status: 'unverified', reason: unverifiedDisplayReason }\n : { status: 'resolved', utility: undefined };\n }\n\n if (shownOverrides.length === 0) return { status: 'resolved', utility: undefined };\n\n const displays = layoutDisplays(request.layoutPlans);\n const existingUtility = existingRestorationUtility(displayDescriptors);\n const utilities = shownOverrides.map(state => {\n const layoutUtility = matchingLayoutUtility(displays, state);\n return layoutUtility === undefined ? existingUtility : layoutUtility;\n });\n const distinctUtilities = [...new Set(utilities)];\n const utility = distinctUtilities[0];\n if (distinctUtilities.length !== 1 || typeof utility !== 'string') {\n return { status: 'unverified', reason: unverifiedDisplayReason };\n }\n\n return { status: 'resolved', utility };\n }\n}\n","import type { TemplateAttribute, TemplateElement } from '../template/template.model';\nimport type { SourceEdit } from './source-edit';\n\nconst htmlSourceWhitespace = /[\\t\\n\\f\\r ]/u;\nconst htmlReferencePrefix = /&(?:#|[a-z\\d])/iu;\n\n/**\n * Tailwind scans template bytes without first decoding HTML. A generated class\n * token is therefore safe only when the same bytes survive Angular's HTML\n * parsing and can be placed in both quote styles without entity escaping.\n */\nexport function isByteExactHtmlClassToken(token: string): boolean {\n return (\n token.length > 0 &&\n ![...token].some(character => htmlSourceWhitespace.test(character)) &&\n !/[\"'<]/u.test(token) &&\n !htmlReferencePrefix.test(token)\n );\n}\n\nfunction appendedRawValue(rawValue: string, missingClassNames: readonly string[]): string {\n const separator = rawValue.length > 0 && !htmlSourceWhitespace.test(rawValue.at(-1) ?? '') ? ' ' : '';\n return `${rawValue}${separator}${missingClassNames.join(' ')}`;\n}\n\nexport function appendLiteralClassNames(\n source: string,\n element: TemplateElement,\n classAttribute: TemplateAttribute | undefined,\n generatedClassNames: readonly string[],\n inputId: string,\n): SourceEdit | undefined {\n const uniqueGenerated = [...new Set(generatedClassNames)];\n // Deduplicate only against byte-identical source candidates. An entity-decoded\n // equivalent has the same Angular token but remains invisible to Tailwind's\n // raw source scanner, so the generated spelling must still be appended.\n const existingRawClassNames = classAttribute?.rawValue.split(/[\\t\\n\\f\\r ]+/u).filter(Boolean) ?? [];\n const missingClassNames = uniqueGenerated.filter(className => !existingRawClassNames.includes(className));\n if (missingClassNames.length === 0) return undefined;\n\n if (!missingClassNames.every(isByteExactHtmlClassToken)) {\n throw new Error('Generated class names must be byte-exact HTML source tokens before editing.');\n }\n\n if (classAttribute !== undefined) {\n if (classAttribute.valueSource === undefined) {\n return {\n range: classAttribute.source,\n text: `${classAttribute.rawName}=\"${missingClassNames.join(' ')}\"`,\n inputId,\n };\n }\n\n const value = appendedRawValue(classAttribute.rawValue, missingClassNames);\n const delimiter = source[classAttribute.valueSource.start - 1];\n if (delimiter === '\"' || delimiter === \"'\") {\n return { range: classAttribute.valueSource, text: value, inputId };\n }\n\n return {\n range: classAttribute.source,\n text: `${classAttribute.rawName}=\"${value}\"`,\n inputId,\n };\n }\n\n const startTag = source.slice(element.startTag.start, element.startTag.end);\n const selfClosing = startTag.endsWith('/>');\n const insertionOffset = element.startTag.end - (selfClosing ? 2 : 1);\n const hasClosingWhitespace = htmlSourceWhitespace.test(source[insertionOffset - 1] ?? '');\n const classAttributeText = `class=\"${missingClassNames.join(' ')}\"`;\n return {\n range: { start: insertionOffset, end: insertionOffset },\n text: selfClosing && hasClosingWhitespace ? `${classAttributeText} ` : ` ${classAttributeText}`,\n inputId,\n };\n}\n","import type { LiteralStyleDeclaration } from '../visibility/literal-style-display';\nimport { isByteExactHtmlClassToken } from '../../../edit/html-attribute-value';\n\nconst ordinaryProperty = /^-?[a-z][a-z\\d-]*$/iu;\nconst customProperty = /^--[a-z\\d_-]+$/iu;\n\nfunction containsControl(value: string): boolean {\n return [...value].some(character => {\n const codePoint = character.codePointAt(0);\n return codePoint !== undefined && (codePoint < 0x20 || codePoint === 0x7f);\n });\n}\n\nfunction isEncodable(declaration: LiteralStyleDeclaration): boolean {\n const propertyIsValid = ordinaryProperty.test(declaration.property) || customProperty.test(declaration.property);\n return (\n propertyIsValid &&\n declaration.value.length > 0 &&\n !containsControl(declaration.value) &&\n !/[\\\\[\\]{}]/u.test(declaration.value)\n );\n}\n\nexport class TailwindArbitraryPropertyEncoder {\n encode(declaration: LiteralStyleDeclaration): string {\n if (!isEncodable(declaration)) {\n throw new Error('The style declaration cannot be encoded as an exact Tailwind arbitrary property.');\n }\n\n const value = declaration.value.replaceAll('_', '\\\\_').replaceAll(' ', '_');\n const candidate = `[${declaration.property}:${value}]`;\n if (!isByteExactHtmlClassToken(candidate)) {\n throw new Error('The style declaration cannot be encoded as a byte-exact HTML source candidate.');\n }\n return candidate;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog } from '../../../breakpoint/breakpoint-catalog';\nimport type { LiteralStyleDeclaration, ResponsiveStyleValueResult } from './responsive-style.model';\nimport { TailwindArbitraryPropertyEncoder } from './tailwind-arbitrary-property.encoder';\nimport { cssPropertiesOverlap } from './css-property-ownership';\nimport { analyzeTailwindArbitrarySyntax } from '../tailwind-arbitrary-syntax';\n\nconst interpolation = /\\{\\{[\\s\\S]*\\}\\}/u;\nconst dashedOrdinaryProperty = /^-?[a-z][a-z\\d-]*$/iu;\nconst rendererProperty = /^[a-z][a-z\\d]*$/u;\nconst customProperty = /^--[a-z\\d_-]+$/iu;\nconst unitSuffixes = new Set(['px', '%', 'em', 'rem', 'vw', 'vh', 'vmin', 'vmax', 'deg', 's', 'ms']);\nconst unitlessNumber = /^[+-]?(?:(?:\\d+(?:\\.\\d*)?)|(?:\\.\\d+))(?:e[+-]?\\d+)?$/iu;\nconst sanitizerSensitiveFunction = /(?:^|[^a-z\\d_-])(?:url|expression|image|(?:-webkit-)?image-set)\\s*\\(/iu;\nconst tailwindBuildFunction = /(?:^|[^a-z\\d_-])(?:--alpha|--theme|--spacing|theme)\\s*\\(/iu;\nconst urlScheme = /(?:https?|data|blob|file|javascript):/iu;\n\ninterface NormalizedProperty {\n readonly property: string;\n readonly unit?: string;\n}\n\nexport const responsiveStyleExactKeyAliasReason =\n \"Distinct exact ngStyle keys alias the same browser CSS property, so Angular's activation-history-dependent removal order cannot be represented exactly.\";\n\nfunction normalizeProperty(property: string): NormalizedProperty | undefined {\n if (property.startsWith('--')) {\n return customProperty.test(property) ? { property } : undefined;\n }\n\n const parts = property.split('.');\n if (parts.length > 2) return undefined;\n const sourceName = parts[0] ?? '';\n const name = sourceName.includes('-')\n ? dashedOrdinaryProperty.test(sourceName)\n ? sourceName.toLowerCase()\n : undefined\n : rendererProperty.test(sourceName)\n ? sourceName\n : undefined;\n if (name === undefined) return undefined;\n\n const unit = parts[1];\n if (unit === undefined) return { property: name };\n const normalizedUnit = unit.toLowerCase();\n return unitSuffixes.has(normalizedUnit) ? { property: name, unit: normalizedUnit } : undefined;\n}\n\nfunction transformUpstreamRawList(value: string): ResponsiveStyleValueResult {\n const rawDeclarations = String(value)\n .trim()\n .split(';')\n .map(item => item.trim())\n .filter(item => item !== '');\n const declarationsByExactProperty = new Map<string, LiteralStyleDeclaration>();\n\n for (const rawDeclaration of rawDeclarations) {\n const [rawKey, ...rawValues] = rawDeclaration.split(':');\n if (rawValues.length === 0) {\n return {\n status: 'unverified',\n reason: 'Upstream semicolon splitting produced a style entry without a property separator.',\n };\n }\n\n const property = (rawKey ?? '').replace(/['\"]/gu, '').trim();\n const transformedValue = rawValues.join(':').replace(/['\"]/gu, '').trim().replace(/;/u, '');\n if (!property || !transformedValue) {\n return {\n status: 'unverified',\n reason: 'Upstream raw-string transformation produced an empty style key or value.',\n };\n }\n // Flex-Layout reduces its raw string into a plain object first. Updating an\n // exact key keeps that key's original insertion position, while a\n // differently-cased key is applied later as a distinct renderer entry.\n declarationsByExactProperty.set(property, { property, value: transformedValue });\n }\n\n return { status: 'parsed', value: { declarations: [...declarationsByExactProperty.values()] } };\n}\n\nfunction declarationsHaveExactKeyAliases(declarations: readonly LiteralStyleDeclaration[]): boolean {\n const exactKeyByAppliedProperty = new Map<string, string>();\n\n for (const declaration of declarations) {\n const normalized = normalizeProperty(declaration.property);\n if (normalized === undefined) continue;\n\n const previous = exactKeyByAppliedProperty.get(normalized.property);\n if (previous !== undefined && previous !== declaration.property) return true;\n exactKeyByAppliedProperty.set(normalized.property, declaration.property);\n }\n\n return false;\n}\n\nexport function responsiveStyleValuesHaveExactKeyAliases(values: readonly string[]): boolean {\n const declarations: LiteralStyleDeclaration[] = [];\n for (const value of values) {\n const transformed = transformUpstreamRawList(value);\n if (transformed.status === 'parsed') declarations.push(...transformed.value.declarations);\n }\n return declarationsHaveExactKeyAliases(declarations);\n}\n\nfunction normalizeDeclaration(\n declaration: LiteralStyleDeclaration,\n encoder: TailwindArbitraryPropertyEncoder,\n): LiteralStyleDeclaration | undefined {\n const normalized = normalizeProperty(declaration.property);\n if (!normalized || !declaration.value) return undefined;\n\n if (\n sanitizerSensitiveFunction.test(declaration.value) ||\n tailwindBuildFunction.test(declaration.value) ||\n urlScheme.test(declaration.value)\n ) {\n return undefined;\n }\n\n const value =\n normalized.unit === undefined\n ? declaration.value\n : unitlessNumber.test(declaration.value)\n ? `${declaration.value}${normalized.unit}`\n : undefined;\n if (value === undefined) return undefined;\n\n const result = { property: normalized.property, value };\n try {\n const candidate = encoder.encode(result);\n const arbitrary = analyzeTailwindArbitrarySyntax(candidate);\n if (arbitrary === undefined || arbitrary.important) return undefined;\n } catch {\n return undefined;\n }\n return result;\n}\n\nexport function parseLiteralResponsiveStyleValue(value: string): ResponsiveStyleValueResult {\n const transformed = transformUpstreamRawList(value);\n if (transformed.status === 'unverified') return transformed;\n if (declarationsHaveExactKeyAliases(transformed.value.declarations)) {\n return {\n status: 'unverified',\n reason: responsiveStyleExactKeyAliasReason,\n };\n }\n\n const declarationsByProperty = new Map<string, LiteralStyleDeclaration>();\n const encoder = new TailwindArbitraryPropertyEncoder();\n\n for (const declaration of transformed.value.declarations) {\n const normalized = normalizeDeclaration(declaration, encoder);\n if (!normalized) {\n const importantCandidate = (() => {\n try {\n return analyzeTailwindArbitrarySyntax(encoder.encode(declaration))?.important === true;\n } catch {\n return false;\n }\n })();\n return {\n status: 'unverified',\n reason: importantCandidate\n ? `The declaration for ${JSON.stringify(declaration.property)} contains priority text that Angular NgStyle does not apply.`\n : `The declaration for ${JSON.stringify(declaration.property)} cannot be sanitized and encoded exactly.`,\n };\n }\n declarationsByProperty.set(normalized.property, normalized);\n }\n\n const declarations = [...declarationsByProperty.values()];\n for (const [index, declaration] of declarations.entries()) {\n const overlapping = declarations\n .slice(index + 1)\n .find(candidate => cssPropertiesOverlap(declaration.property, candidate.property));\n if (overlapping !== undefined) {\n return {\n status: 'unverified',\n reason: `The properties ${JSON.stringify(declaration.property)} and ${JSON.stringify(overlapping.property)} have overlapping CSS property ownership.`,\n };\n }\n }\n\n return { status: 'parsed', value: { declarations } };\n}\n\nexport function parseResponsiveStyleValue(input: LocatedFlexLayoutInput): ResponsiveStyleValueResult {\n if (input.binding !== 'literal') {\n return { status: 'unverified', reason: 'Responsive style property bindings may depend on runtime state.' };\n }\n if (input.directive !== 'ngStyle') {\n return { status: 'unverified', reason: 'Deprecated responsive style aliases are not converted.' };\n }\n if (input.breakpoint === undefined || new BreakpointCatalog().classify(input.breakpoint).kind !== 'verified') {\n return { status: 'unverified', reason: 'The responsive style breakpoint is not a verified viewport alias.' };\n }\n if (interpolation.test(input.value)) {\n return { status: 'unverified', reason: 'Responsive style interpolation may depend on runtime state.' };\n }\n\n return parseLiteralResponsiveStyleValue(input.value);\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport {\n BreakpointCatalog,\n mediaRangesIntersect,\n type BreakpointClassification,\n} from '../../../breakpoint/breakpoint-catalog';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport type {\n ExtendedFamilyPlan,\n ExtendedFamilyPlanRequest,\n ExtendedResponsiveKind,\n ExtendedResponsiveState,\n} from './responsive-class.model';\nimport {\n responsiveStyleExactKeyAliasReason,\n responsiveStyleValuesHaveExactKeyAliases,\n} from './responsive-style-value.parser';\n\ntype ClassifiedMember<T> =\n | { readonly input: LocatedFlexLayoutInput; readonly state: ExtendedResponsiveState<T> }\n | { readonly input: LocatedFlexLayoutInput; readonly plan: PlannedConversion };\n\ntype ClassifiedState<T> = Extract<ClassifiedMember<T>, { readonly state: ExtendedResponsiveState<T> }>;\n\nfunction dynamicBinding(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'dynamic-binding',\n reason: 'Angular property bindings and interpolation may depend on runtime state.',\n suggestion: 'Replace the binding manually or make it a literal before migration.',\n };\n}\n\nfunction deprecatedAlias(input: LocatedFlexLayoutInput, kind: ExtendedResponsiveKind): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'semantic-unsupported',\n reason: `Deprecated responsive ${kind} aliases have version-dependent behavior.`,\n suggestion: `Keep the deprecated alias or migrate the complete responsive ${kind} family manually.`,\n };\n}\n\nfunction unresolvedBreakpoint(\n input: LocatedFlexLayoutInput,\n classification: Exclude<BreakpointClassification, { readonly kind: 'verified' }>,\n): PlannedConversion {\n if (classification.kind === 'custom') {\n return {\n status: 'review',\n input,\n code: 'custom-breakpoint',\n reason: `The breakpoint alias ${classification.alias} may be registered by the project.`,\n suggestion: 'Provide its media query or migrate this responsive family manually.',\n };\n }\n\n const kind = classification.kind === 'print' ? 'print' : 'optional';\n return {\n status: 'review',\n input,\n code: 'breakpoint-unverified',\n reason: `Exact media-query output for the ${kind} breakpoint alias ${classification.alias} is not implemented.`,\n suggestion: 'Keep the responsive directive until exact breakpoint support is available.',\n };\n}\n\nfunction unverifiedValue(\n input: LocatedFlexLayoutInput,\n kind: ExtendedResponsiveKind,\n token: string | undefined,\n reason: string,\n): PlannedConversion {\n if (kind === 'style') {\n return {\n status: 'review',\n input,\n code: 'style-value-unverified',\n reason,\n suggestion: 'Keep the complete responsive style family or replace unsafe declarations before migration.',\n };\n }\n\n return {\n status: 'review',\n input,\n code: 'tailwind-candidate-unverified',\n reason:\n token === undefined\n ? reason\n : `The first unverified token is ${JSON.stringify(token)}. It may be an application or plugin class. ${reason}`,\n suggestion: 'Keep the complete responsive class family or replace unverified classes before migration.',\n };\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Another member of this responsive family is unresolved.',\n suggestion: 'Migrate the complete responsive family together manually.',\n };\n}\n\nfunction responsivePrecedenceUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'responsive-precedence-unverified',\n reason: 'The responsive family contains different values in intersecting activation ranges.',\n suggestion: 'Make intersecting values identical or migrate the complete responsive family manually.',\n };\n}\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nexport class ExtendedFamilyPlanner {\n constructor(private readonly catalog = new BreakpointCatalog()) {}\n\n plan<T>(request: ExtendedFamilyPlanRequest<T>): ExtendedFamilyPlan<T> {\n const members = request.inputs\n .map(input => this.classify(input, request.kind, request.valueParser))\n .sort((left, right) => this.compare(left.input, right.input));\n\n if (!members.every((member): member is ClassifiedState<T> => 'state' in member)) {\n return {\n status: 'unresolved',\n plans: members.map(member => ('plan' in member ? member.plan : contextUnverified(member.input))),\n };\n }\n\n const states = members.map(member => member.state);\n if (request.kind === 'style' && responsiveStyleValuesHaveExactKeyAliases(states.map(state => state.input.value))) {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n unverifiedValue(state.input, request.kind, undefined, responsiveStyleExactKeyAliasReason),\n ),\n };\n }\n if (this.hasConflictingStates(states, request.equals)) {\n return {\n status: 'unresolved',\n plans: states.map(state => responsivePrecedenceUnverified(state.input)),\n };\n }\n\n return { status: 'converted', states };\n }\n\n private classify<T>(\n input: LocatedFlexLayoutInput,\n kind: ExtendedResponsiveKind,\n valueParser: ExtendedFamilyPlanRequest<T>['valueParser'],\n ): ClassifiedMember<T> {\n if (input.binding !== 'literal' || /\\{\\{[\\s\\S]*\\}\\}/u.test(input.value)) {\n return { input, plan: dynamicBinding(input) };\n }\n const expectedDirective = kind === 'class' ? 'ngClass' : 'ngStyle';\n if (input.directive !== expectedDirective) return { input, plan: deprecatedAlias(input, kind) };\n if (input.breakpoint === undefined) return { input, plan: deprecatedAlias(input, kind) };\n\n const breakpoint = this.catalog.classify(input.breakpoint);\n if (breakpoint.kind !== 'verified') return { input, plan: unresolvedBreakpoint(input, breakpoint) };\n\n const parsed = valueParser(input);\n if (parsed.status === 'unverified') {\n return { input, plan: unverifiedValue(input, kind, parsed.token, parsed.reason) };\n }\n\n return {\n input,\n state: {\n input,\n activation: { kind: 'media', definition: breakpoint.definition },\n value: parsed.value,\n },\n };\n }\n\n private hasConflictingStates<T>(\n states: readonly ExtendedResponsiveState<T>[],\n equals: (left: T, right: T) => boolean,\n ): boolean {\n return states.some((left, leftIndex) =>\n states\n .slice(leftIndex + 1)\n .some(\n right =>\n !equals(left.value, right.value) &&\n mediaRangesIntersect(left.activation.definition.range, right.activation.definition.range),\n ),\n );\n }\n\n private compare(left: LocatedFlexLayoutInput, right: LocatedFlexLayoutInput): number {\n const leftPriority = this.breakpointPriority(left.breakpoint);\n const rightPriority = this.breakpointPriority(right.breakpoint);\n if (leftPriority !== rightPriority) return rightPriority - leftPriority;\n\n const aliasOrder = compareText(left.breakpoint ?? '', right.breakpoint ?? '');\n return aliasOrder || compareText(left.id, right.id);\n }\n\n private breakpointPriority(alias: string | undefined): number {\n if (alias === undefined) return Number.NEGATIVE_INFINITY;\n const classification = this.catalog.classify(alias);\n return classification.kind === 'verified' ? classification.definition.priority : Number.NEGATIVE_INFINITY;\n }\n}\n","import { describeTailwindUtility, type TailwindUtilityDescriptor } from '../tailwind-class-conflict';\nimport { hasValidTailwindArbitrarySyntax } from '../tailwind-arbitrary-syntax';\nimport { isByteExactHtmlClassToken } from '../../../edit/html-attribute-value';\nimport {\n isConservativelyAdmittedBorderWidth,\n isConservativelyAdmittedTextLength,\n} from './tailwind-arbitrary-value-ownership';\n\nexport type TailwindCandidateClassification =\n | { readonly status: 'verified'; readonly descriptor: TailwindUtilityDescriptor }\n | { readonly status: 'unverified'; readonly reason: string };\n\ntype CssProperties = readonly string[] | ((value: string) => readonly string[] | undefined);\n\ninterface NamespaceRule {\n readonly namespace: string;\n readonly cssProperties: CssProperties;\n readonly negative?: boolean;\n readonly accepts: (value: string) => boolean;\n readonly acceptsNegative?: (value: string) => boolean;\n}\n\nconst exactTokenRegistry = Object.freeze([\n ['inline', ['display']],\n ['block', ['display']],\n ['inline-block', ['display']],\n ['flow-root', ['display']],\n ['flex', ['display']],\n ['inline-flex', ['display']],\n ['grid', ['display']],\n ['inline-grid', ['display']],\n ['contents', ['display']],\n ['table', ['display']],\n ['inline-table', ['display']],\n ['list-item', ['display']],\n ['hidden', ['display']],\n ['flex-row', ['flex-direction']],\n ['flex-row-reverse', ['flex-direction']],\n ['flex-col', ['flex-direction']],\n ['flex-col-reverse', ['flex-direction']],\n ['flex-wrap', ['flex-wrap']],\n ['flex-wrap-reverse', ['flex-wrap']],\n ['flex-nowrap', ['flex-wrap']],\n ['static', ['position']],\n ['fixed', ['position']],\n ['absolute', ['position']],\n ['relative', ['position']],\n ['sticky', ['position']],\n ['border', ['border-style', 'border-width']],\n ['shadow', ['--tw-shadow', 'box-shadow']],\n ['transition', ['transition-property', 'transition-timing-function', 'transition-duration']],\n ['visible', ['visibility']],\n ['invisible', ['visibility']],\n ['collapse', ['visibility']],\n [\n 'sr-only',\n ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space', 'border-width'],\n ],\n ['not-sr-only', ['position', 'width', 'height', 'padding', 'margin', 'overflow', 'clip-path', 'white-space']],\n] as const);\n\nconst defaultColorNames = Object.freeze([\n 'inherit',\n 'current',\n 'transparent',\n 'black',\n 'white',\n 'red',\n 'orange',\n 'amber',\n 'yellow',\n 'lime',\n 'green',\n 'emerald',\n 'teal',\n 'cyan',\n 'sky',\n 'blue',\n 'indigo',\n 'violet',\n 'purple',\n 'fuchsia',\n 'pink',\n 'rose',\n 'slate',\n 'gray',\n 'zinc',\n 'neutral',\n 'stone',\n] as const);\nconst defaultColorShades = Object.freeze(['50', '100', '200', '300', '400', '500', '600', '700', '800', '900', '950']);\nconst textSizes = Object.freeze([\n 'xs',\n 'sm',\n 'base',\n 'lg',\n 'xl',\n '2xl',\n '3xl',\n '4xl',\n '5xl',\n '6xl',\n '7xl',\n '8xl',\n '9xl',\n]);\n\nfunction isNumber(value: string): boolean {\n return /^(?:0|[1-9]\\d*)(?:\\.\\d+)?$/u.test(value);\n}\n\nfunction isInteger(value: string): boolean {\n return /^(?:0|[1-9]\\d*)$/u.test(value);\n}\n\nfunction isPercentage(value: string): boolean {\n if (!isNumber(value)) return false;\n const number = Number(value);\n return number >= 0 && number <= 100;\n}\n\nfunction hasValidArbitrarySyntax(value: string): boolean {\n return hasValidTailwindArbitrarySyntax(value);\n}\n\nfunction hasCompilerMeaningfulArbitraryValue(value: string): boolean {\n if (!hasValidArbitrarySyntax(value)) return false;\n\n const payload = value\n .slice(1, -1)\n .replace(/\\/\\*[\\s\\S]*?\\*\\//gu, '')\n .replace(/^[a-z][a-z-]*:/iu, '')\n .replace(/[\\s_()[\\]{}'\"`]/gu, '');\n return payload.length > 0;\n}\n\nfunction isCssVariableValue(value: string): boolean {\n return /^\\(--[A-Za-z_][A-Za-z0-9_-]*\\)$/u.test(value);\n}\n\nfunction isArbitraryOrVariable(value: string): boolean {\n return hasCompilerMeaningfulArbitraryValue(value) || isCssVariableValue(value);\n}\n\nfunction isFraction(value: string): boolean {\n const [numerator, denominator, remainder] = value.split('/');\n return remainder === undefined && isInteger(numerator ?? '') && /^[1-9]\\d*$/u.test(denominator ?? '');\n}\n\nfunction isSpacing(value: string): boolean {\n return isNumber(value) || value === 'px' || isArbitraryOrVariable(value);\n}\n\nfunction isMargin(value: string): boolean {\n return isSpacing(value) || value === 'auto';\n}\n\nfunction isFractionalSpacing(value: string): boolean {\n return isSpacing(value) || isFraction(value) || value === 'full';\n}\n\nfunction isInset(value: string): boolean {\n return isFractionalSpacing(value) || value === 'auto';\n}\n\nfunction isDimension(value: string): boolean {\n return (\n isFractionalSpacing(value) ||\n value === 'auto' ||\n ['screen', 'dvh', 'dvw', 'lvh', 'lvw', 'svh', 'svw', 'min', 'max', 'fit'].includes(value)\n );\n}\n\nfunction isWidth(value: string): boolean {\n return isDimension(value) || /^(?:3xs|2xs|xs|sm|md|lg|xl|[2-7]xl)$/u.test(value);\n}\n\nfunction isArbitraryColor(value: string): boolean {\n if (!hasCompilerMeaningfulArbitraryValue(value)) return false;\n const color = value.slice(1, -1);\n return /^(?:color:|#|(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|light-dark|color-mix|var)\\()/u.test(color);\n}\n\nfunction isBackgroundImage(value: string): boolean {\n if (!hasCompilerMeaningfulArbitraryValue(value)) return false;\n const image = value.slice(1, -1);\n return /^(?:image:|url\\(|(?:linear|radial|conic)-gradient\\()/u.test(image);\n}\n\nfunction isColor(value: string): boolean {\n const [color, opacity, remainder] = value.split('/');\n if (remainder !== undefined) return false;\n\n const isDefault =\n ['inherit', 'current', 'transparent', 'black', 'white'].includes(color ?? '') ||\n (defaultColorNames.includes((color?.split('-')[0] ?? '') as (typeof defaultColorNames)[number]) &&\n defaultColorShades.includes((color?.split('-')[1] ?? '') as (typeof defaultColorShades)[number]) &&\n color?.split('-').length === 2);\n if (!isDefault && !isArbitraryColor(color ?? '') && !isCssVariableValue(color ?? '')) return false;\n return opacity === undefined || isPercentage(opacity) || isArbitraryOrVariable(opacity);\n}\n\nfunction isBackgroundColor(value: string): boolean {\n const [color] = value.split('/');\n if (isCssVariableValue(color ?? '')) return false;\n if (/^\\[var\\(/u.test(color ?? '')) return false;\n return isColor(value);\n}\n\nfunction textCssProperties(value: string): readonly string[] | undefined {\n const [size, lineHeight, remainder] = value.split('/');\n const hasVerifiedLineHeight =\n remainder === undefined && (lineHeight === undefined || isNumber(lineHeight) || isArbitraryOrVariable(lineHeight));\n if (textSizes.includes((size ?? '') as (typeof textSizes)[number])) {\n return hasVerifiedLineHeight ? ['font-size', 'line-height'] : undefined;\n }\n const arbitrarySize = size ?? '';\n const hasUnambiguousArbitrarySize =\n hasCompilerMeaningfulArbitraryValue(arbitrarySize) && isConservativelyAdmittedTextLength(arbitrarySize);\n if (hasUnambiguousArbitrarySize) {\n if (!hasVerifiedLineHeight) return undefined;\n return lineHeight === undefined ? ['font-size'] : ['font-size', 'line-height'];\n }\n if (hasCompilerMeaningfulArbitraryValue(value) && /^\\[color:[\\s\\S]+\\]$/u.test(value)) return ['color'];\n if (isColor(value)) return ['color'];\n return undefined;\n}\n\nfunction acceptsText(value: string): boolean {\n return textCssProperties(value) !== undefined;\n}\n\nfunction borderCssProperties(value: string): readonly string[] | undefined {\n if (isInteger(value) || (hasCompilerMeaningfulArbitraryValue(value) && isConservativelyAdmittedBorderWidth(value))) {\n return ['border-style', 'border-width'];\n }\n if (oneOf(['solid', 'dashed', 'dotted', 'double', 'hidden', 'none'])(value)) {\n return ['--tw-border-style', 'border-style'];\n }\n if (isColor(value) || isCssVariableValue(value) || /^\\[(?:color:|var\\()/u.test(value)) {\n return ['border-color'];\n }\n return undefined;\n}\n\nfunction transitionCssProperties(value: string): readonly string[] {\n return value === 'none'\n ? ['transition-property']\n : ['transition-property', 'transition-timing-function', 'transition-duration'];\n}\n\nfunction scaleCssProperties(value: string): readonly string[] | undefined {\n if (isInteger(value)) return ['--tw-scale-x', '--tw-scale-y', '--tw-scale-z', 'scale'];\n return isArbitraryOrVariable(value) ? ['scale'] : undefined;\n}\n\nfunction oneOf(values: readonly string[]): (value: string) => boolean {\n return value => values.includes(value);\n}\n\nconst namespaceRegistry: readonly NamespaceRule[] = Object.freeze([\n {\n namespace: 'items',\n cssProperties: ['align-items'],\n accepts: oneOf(['start', 'end', 'center', 'baseline', 'stretch']),\n },\n { namespace: 'gap', cssProperties: ['gap'], accepts: value => isNumber(value) || isArbitraryOrVariable(value) },\n {\n namespace: 'gap-x',\n cssProperties: ['column-gap'],\n accepts: value => isNumber(value) || isArbitraryOrVariable(value),\n },\n { namespace: 'gap-y', cssProperties: ['row-gap'], accepts: value => isNumber(value) || isArbitraryOrVariable(value) },\n { namespace: 'm', cssProperties: ['margin'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mx', cssProperties: ['margin-inline'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'my', cssProperties: ['margin-block'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mt', cssProperties: ['margin-top'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mr', cssProperties: ['margin-right'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'mb', cssProperties: ['margin-bottom'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n { namespace: 'ml', cssProperties: ['margin-left'], negative: true, accepts: isMargin, acceptsNegative: isSpacing },\n {\n namespace: 'ms',\n cssProperties: ['margin-inline-start'],\n negative: true,\n accepts: isMargin,\n acceptsNegative: isSpacing,\n },\n {\n namespace: 'me',\n cssProperties: ['margin-inline-end'],\n negative: true,\n accepts: isMargin,\n acceptsNegative: isSpacing,\n },\n {\n namespace: 'p',\n cssProperties: ['padding'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'px',\n cssProperties: ['padding-inline'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'py',\n cssProperties: ['padding-block'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pt',\n cssProperties: ['padding-top'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pr',\n cssProperties: ['padding-right'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pb',\n cssProperties: ['padding-bottom'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pl',\n cssProperties: ['padding-left'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'ps',\n cssProperties: ['padding-inline-start'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n {\n namespace: 'pe',\n cssProperties: ['padding-inline-end'],\n accepts: value => isNumber(value) || value === 'px' || isArbitraryOrVariable(value),\n },\n { namespace: 'w', cssProperties: ['width'], accepts: isWidth },\n { namespace: 'h', cssProperties: ['height'], accepts: isDimension },\n { namespace: 'min-w', cssProperties: ['min-width'], accepts: isWidth },\n { namespace: 'min-h', cssProperties: ['min-height'], accepts: isDimension },\n { namespace: 'max-w', cssProperties: ['max-width'], accepts: value => value !== 'auto' && isWidth(value) },\n { namespace: 'max-h', cssProperties: ['max-height'], accepts: value => value !== 'auto' && isDimension(value) },\n { namespace: 'text', cssProperties: textCssProperties, accepts: acceptsText },\n { namespace: 'bg', cssProperties: ['background-color'], accepts: isBackgroundColor },\n { namespace: 'bg', cssProperties: ['background-image'], accepts: isBackgroundImage },\n {\n namespace: 'border',\n cssProperties: borderCssProperties,\n accepts: value => borderCssProperties(value) !== undefined,\n },\n {\n namespace: 'rounded',\n cssProperties: ['border-radius'],\n accepts: value =>\n oneOf(['none', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', 'full'])(value) || isArbitraryOrVariable(value),\n },\n {\n namespace: 'shadow',\n cssProperties: ['--tw-shadow', 'box-shadow'],\n accepts: value => oneOf(['2xs', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', 'none'])(value) || isCssVariableValue(value),\n },\n {\n namespace: 'opacity',\n cssProperties: ['opacity'],\n accepts: value => isPercentage(value) || isArbitraryOrVariable(value),\n },\n {\n namespace: 'overflow',\n cssProperties: ['overflow'],\n accepts: oneOf(['auto', 'hidden', 'clip', 'visible', 'scroll']),\n },\n {\n namespace: 'inset',\n cssProperties: ['inset'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'inset-x',\n cssProperties: ['inset-inline'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'inset-y',\n cssProperties: ['inset-block'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n { namespace: 'top', cssProperties: ['top'], negative: true, accepts: isInset, acceptsNegative: isFractionalSpacing },\n {\n namespace: 'right',\n cssProperties: ['right'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'bottom',\n cssProperties: ['bottom'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'left',\n cssProperties: ['left'],\n negative: true,\n accepts: isInset,\n acceptsNegative: isFractionalSpacing,\n },\n {\n namespace: 'rotate',\n cssProperties: ['rotate'],\n negative: true,\n accepts: value => isInteger(value) || isArbitraryOrVariable(value),\n },\n {\n namespace: 'scale',\n cssProperties: scaleCssProperties,\n accepts: value => scaleCssProperties(value) !== undefined,\n },\n {\n namespace: 'translate',\n cssProperties: ['--tw-translate-x', '--tw-translate-y', 'translate'],\n negative: true,\n accepts: isFractionalSpacing,\n },\n {\n namespace: 'transition',\n cssProperties: transitionCssProperties,\n accepts: oneOf(['all', 'colors', 'opacity', 'shadow', 'transform', 'none']),\n },\n {\n namespace: 'grid-cols',\n cssProperties: ['grid-template-columns'],\n accepts: value => /^[1-9]\\d*$/u.test(value) || oneOf(['none', 'subgrid'])(value) || isArbitraryOrVariable(value),\n },\n { namespace: 'table', cssProperties: ['table-layout'], accepts: oneOf(['auto', 'fixed']) },\n {\n namespace: 'list',\n cssProperties: value => [['disc', 'decimal', 'none'].includes(value) ? 'list-style-type' : 'list-style-position'],\n accepts: oneOf(['disc', 'decimal', 'none', 'inside', 'outside']),\n },\n {\n namespace: 'object',\n cssProperties: value => [\n ['contain', 'cover', 'fill', 'none', 'scale-down'].includes(value) ? 'object-fit' : 'object-position',\n ],\n accepts: oneOf([\n 'contain',\n 'cover',\n 'fill',\n 'none',\n 'scale-down',\n 'bottom',\n 'center',\n 'left',\n 'left-bottom',\n 'left-top',\n 'right',\n 'right-bottom',\n 'right-top',\n 'top',\n ]),\n },\n {\n namespace: 'cursor',\n cssProperties: ['cursor'],\n accepts: oneOf([\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n ]),\n },\n { namespace: 'pointer-events', cssProperties: ['pointer-events'], accepts: oneOf(['auto', 'none']) },\n]);\n\nconst exactVariantRegistry = Object.freeze([\n 'hover',\n 'focus',\n 'focus-within',\n 'focus-visible',\n 'active',\n 'visited',\n 'target',\n 'first',\n 'last',\n 'only',\n 'odd',\n 'even',\n 'disabled',\n 'enabled',\n 'checked',\n 'indeterminate',\n 'required',\n 'valid',\n 'invalid',\n 'dark',\n 'motion-safe',\n 'motion-reduce',\n 'contrast-more',\n 'contrast-less',\n 'portrait',\n 'landscape',\n 'print',\n 'sm',\n 'md',\n 'lg',\n 'xl',\n '2xl',\n] as const);\n\nfunction variantIsVerified(variant: string): boolean {\n return exactVariantRegistry.includes(variant as (typeof exactVariantRegistry)[number]);\n}\n\nfunction parseArbitraryProperty(utility: string): string | undefined {\n if (!hasValidArbitrarySyntax(utility)) return undefined;\n const inner = utility.slice(1, -1);\n const separator = inner.indexOf(':');\n if (separator <= 0) return undefined;\n\n const property = inner.slice(0, separator);\n const value = inner.slice(separator + 1);\n if (!/^(?:--[A-Za-z_][A-Za-z0-9_-]*|[A-Za-z][A-Za-z0-9-]*)$/u.test(property)) return undefined;\n if (value.trim().length === 0) return undefined;\n return property;\n}\n\nfunction registryCssProperties(utility: string): readonly string[] | undefined {\n const exact = exactTokenRegistry.find(([token]) => token === utility);\n if (exact !== undefined) return exact[1];\n\n const negative = utility.startsWith('-');\n const value = negative ? utility.slice(1) : utility;\n for (const rule of namespaceRegistry) {\n const separator = `${rule.namespace}-`;\n if (!value.startsWith(separator)) continue;\n const suffix = value.slice(separator.length);\n if (suffix.length === 0) continue;\n if (negative) {\n if (rule.negative !== true || !(rule.acceptsNegative ?? rule.accepts)(suffix)) continue;\n } else if (!rule.accepts(suffix)) continue;\n return typeof rule.cssProperties === 'function' ? rule.cssProperties(suffix) : rule.cssProperties;\n }\n\n return undefined;\n}\n\nexport class TailwindCandidateClassifier {\n classify(token: string): TailwindCandidateClassification {\n if (!isByteExactHtmlClassToken(token)) {\n return {\n status: 'unverified',\n reason: 'The decoded candidate cannot be emitted as the same raw HTML source token.',\n };\n }\n\n if (token.includes('\\\\')) {\n return { status: 'unverified', reason: 'Source escapes make the Tailwind candidate ambiguous.' };\n }\n\n const descriptor = describeTailwindUtility(token);\n if (descriptor === undefined) {\n return { status: 'unverified', reason: 'The Tailwind candidate has malformed variant or bracket structure.' };\n }\n if (descriptor.hasGeneratedMediaVariant) {\n return {\n status: 'unverified',\n reason: 'Generated exact-media variants cannot be supplied as source candidates.',\n };\n }\n if (!descriptor.variants.every(variantIsVerified)) {\n return {\n status: 'unverified',\n reason: 'The Tailwind candidate contains an unverified or target-changing variant.',\n };\n }\n\n const arbitraryProperty = parseArbitraryProperty(descriptor.utility);\n const cssProperties =\n arbitraryProperty === undefined ? registryCssProperties(descriptor.utility) : [arbitraryProperty];\n if (cssProperties === undefined || cssProperties.length === 0) {\n return { status: 'unverified', reason: 'The utility is not in the compiler-proven built-in registry.' };\n }\n\n return { status: 'verified', descriptor: { ...descriptor, cssProperties } };\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog, mediaRangesIntersect, type MediaRange } from '../../../breakpoint/breakpoint-catalog';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport {\n describeTailwindDisplay,\n describeTailwindUtility,\n type TailwindActivation,\n type TailwindDisplayUtility,\n type TailwindUtilityDescriptor,\n} from '../tailwind-class-conflict';\nimport { parseLiteralStyleDeclarations } from '../visibility/literal-style-display';\nimport type { VisibilityState } from '../visibility/visibility.model';\nimport type { VisibilityFamilyPlan } from '../visibility/visibility-state.planner';\nimport type { VisibleDisplayResolution } from '../visibility/visible-display.resolver';\nimport { TailwindCandidateClassifier } from './tailwind-candidate-classifier';\nimport { cssPropertiesOverlap } from './css-property-ownership';\n\nconst extendedClassDirectives = new Set<LocatedFlexLayoutInput['directive']>(['class', 'ngClass']);\nconst extendedStyleDirectives = new Set<LocatedFlexLayoutInput['directive']>(['style', 'ngStyle']);\nconst extendedDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n ...extendedClassDirectives,\n ...extendedStyleDirectives,\n]);\nconst visibleDisplayUtilities = new Set([\n 'inline',\n 'block',\n 'inline-block',\n 'flow-root',\n 'flex',\n 'inline-flex',\n 'grid',\n 'inline-grid',\n 'contents',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'list-item',\n]);\n\ninterface NumericRange {\n readonly min: number;\n readonly max: number;\n}\n\nexport interface ExtendedDisplayComposition {\n readonly strategyPlans: readonly PlannedConversion[];\n readonly visibilityPlan: VisibilityFamilyPlan;\n}\n\nfunction activationRange(activation: TailwindActivation): MediaRange {\n return activation.kind === 'base' ? {} : activation.range;\n}\n\nfunction stateRange(state: VisibilityState): MediaRange {\n return state.activation.kind === 'base' ? {} : state.activation.definition.range;\n}\n\nfunction shownVisibilityRanges(states: readonly VisibilityState[]): readonly MediaRange[] {\n const ranges = states.filter(state => state.intent === 'shown').map(stateRange);\n return states.some(state => state.activation.kind === 'base') ? ranges : [{}, ...ranges];\n}\n\nfunction numericRange(range: MediaRange): NumericRange {\n return {\n min: range.min ?? Number.NEGATIVE_INFINITY,\n max: range.max ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction rangesCover(target: MediaRange, ranges: readonly MediaRange[]): boolean {\n const numericTarget = numericRange(target);\n const clipped = ranges\n .filter(range => mediaRangesIntersect(target, range))\n .map(range => {\n const numeric = numericRange(range);\n return {\n min: Math.max(numericTarget.min, numeric.min),\n max: Math.min(numericTarget.max, numeric.max),\n };\n })\n .sort((left, right) => left.min - right.min);\n const first = clipped[0];\n if (!first || first.min !== numericTarget.min) return false;\n\n let coveredUntil = first.max;\n for (const range of clipped.slice(1)) {\n if (range.min > coveredUntil) return false;\n coveredUntil = Math.max(coveredUntil, range.max);\n }\n return coveredUntil >= numericTarget.max;\n}\n\nfunction displayIntent(descriptor: TailwindDisplayUtility): 'hidden' | 'shown' | 'unverified' {\n if (descriptor.utility === 'hidden') return 'hidden';\n if (visibleDisplayUtilities.has(descriptor.utility)) return 'shown';\n\n const arbitraryValue = descriptor.utility.match(/^\\[display:([^\\]]+)\\]$/u)?.[1];\n if (arbitraryValue === 'none') return 'hidden';\n return arbitraryValue !== undefined && visibleDisplayUtilities.has(arbitraryValue) ? 'shown' : 'unverified';\n}\n\nfunction describeDisplayOwnership(token: string): TailwindUtilityDescriptor | undefined {\n const descriptor = describeTailwindUtility(token);\n return descriptor?.cssProperties.some(property => cssPropertiesOverlap(property, 'display')) ? descriptor : undefined;\n}\n\nfunction ownsOnlyDisplay(descriptor: TailwindUtilityDescriptor): boolean {\n return descriptor.cssProperties.length === 1 && descriptor.cssProperties[0]?.toLowerCase() === 'display';\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput, reason: string): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason,\n suggestion: 'Migrate the coupled responsive families together manually.',\n };\n}\n\nexport class ExtendedDisplayCompositionPlanner {\n constructor(\n private readonly breakpointCatalog = new BreakpointCatalog(),\n private readonly classifier = new TailwindCandidateClassifier(),\n ) {}\n\n composeWithLayout(plans: readonly PlannedConversion[]): readonly PlannedConversion[] {\n const extendedComposed = this.composeExtendedFamilies(plans);\n const layoutPlans = extendedComposed.filter(plan => plan.input.directive === 'fxLayout');\n const layoutRanges = layoutPlans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> => plan.status === 'converted',\n )\n .flatMap(plan =>\n plan.classNames.flatMap(className => {\n const descriptor = describeTailwindDisplay(className);\n return descriptor !== undefined &&\n !descriptor.important &&\n (descriptor.utility === 'flex' || descriptor.utility === 'inline-flex')\n ? [activationRange(descriptor.activation)]\n : [];\n }),\n );\n const unresolvedLayout = layoutPlans.some(plan => plan.status !== 'converted');\n const unresolvedExtendedDisplay = extendedComposed.some(\n plan =>\n extendedDirectives.has(plan.input.directive) &&\n plan.status !== 'converted' &&\n this.inputMayControlDisplay(plan.input),\n );\n\n const affectedFamilies = new Set<'extended-class' | 'extended-style'>();\n let layoutOverlapIsUnsafe = false;\n const composed = extendedComposed.map(plan => {\n if (plan.status !== 'converted' || !extendedDirectives.has(plan.input.directive)) return plan;\n\n const displayDescriptors = plan.classNames\n .map(describeDisplayOwnership)\n .filter(descriptor => descriptor !== undefined);\n if (displayDescriptors.length === 0) return plan;\n\n const family = extendedClassDirectives.has(plan.input.directive) ? 'extended-class' : 'extended-style';\n if (unresolvedLayout) affectedFamilies.add(family);\n for (const descriptor of displayDescriptors) {\n const target = activationRange(descriptor.activation);\n if (!ownsOnlyDisplay(descriptor) && layoutRanges.some(range => mediaRangesIntersect(target, range))) {\n layoutOverlapIsUnsafe = true;\n affectedFamilies.add(family);\n continue;\n }\n if (family === 'extended-style' && layoutRanges.some(range => mediaRangesIntersect(target, range))) {\n layoutOverlapIsUnsafe = true;\n affectedFamilies.add(family);\n continue;\n }\n if (descriptor.important && layoutRanges.some(range => mediaRangesIntersect(target, range))) {\n layoutOverlapIsUnsafe = true;\n affectedFamilies.add(family);\n continue;\n }\n if (rangesCover(target, layoutRanges)) continue;\n if (layoutRanges.some(range => mediaRangesIntersect(target, range))) {\n layoutOverlapIsUnsafe = true;\n affectedFamilies.add(family);\n }\n }\n if (affectedFamilies.has(family)) return plan;\n\n return {\n ...plan,\n classNames: plan.classNames.filter(className => {\n const descriptor = describeTailwindDisplay(className);\n return (\n descriptor === undefined ||\n descriptor.important ||\n !rangesCover(activationRange(descriptor.activation), layoutRanges)\n );\n }),\n };\n });\n\n if (!affectedFamilies.size && !unresolvedExtendedDisplay && !layoutOverlapIsUnsafe) return composed;\n\n return composed.map(plan => {\n const family = this.extendedFamily(plan.input.directive);\n if (plan.status === 'converted' && family !== undefined && affectedFamilies.has(family)) {\n return contextUnverified(\n plan.input,\n 'The responsive layout and extended display ranges do not have one provable ownership order.',\n );\n }\n if (\n plan.status === 'converted' &&\n plan.input.directive === 'fxLayout' &&\n (unresolvedExtendedDisplay || layoutOverlapIsUnsafe)\n ) {\n return contextUnverified(\n plan.input,\n 'An unresolved or partially overlapping responsive class/style family may control display.',\n );\n }\n return plan;\n });\n }\n\n compose(plans: readonly PlannedConversion[], visibilityPlan: VisibilityFamilyPlan): ExtendedDisplayComposition {\n const layoutComposed = this.composeWithLayout(plans);\n const extendedDisplayFamilies = new Set<'extended-class' | 'extended-style'>();\n for (const plan of layoutComposed) {\n if (plan.status !== 'converted') continue;\n if (plan.classNames.some(className => describeDisplayOwnership(className) !== undefined)) {\n const family = this.extendedFamily(plan.input.directive);\n if (family !== undefined) extendedDisplayFamilies.add(family);\n }\n }\n\n if (visibilityPlan.status === 'unresolved') {\n if (!extendedDisplayFamilies.size) return { strategyPlans: layoutComposed, visibilityPlan };\n return {\n strategyPlans: layoutComposed.map(plan => {\n const family = this.extendedFamily(plan.input.directive);\n return plan.status === 'converted' && family !== undefined && extendedDisplayFamilies.has(family)\n ? contextUnverified(plan.input, 'The visibility family is unresolved and may override display.')\n : plan;\n }),\n visibilityPlan,\n };\n }\n\n const states = visibilityPlan.states;\n const baseIsHidden = states.some(state => state.activation.kind === 'base' && state.intent === 'hidden');\n const responsiveHiddenRanges = states.flatMap(state =>\n state.intent === 'hidden' && state.activation.kind === 'media' ? [state.activation.definition.range] : [],\n );\n const shownRanges = states.filter(state => state.intent === 'shown').map(stateRange);\n const visibilityRanges = states.map(stateRange);\n const unsafeFamilies = new Set<'extended-class' | 'extended-style'>();\n\n const strategyPlans = layoutComposed.map(plan => {\n if (plan.status !== 'converted') return plan;\n const family = this.extendedFamily(plan.input.directive);\n if (family === undefined) return plan;\n\n const retainedDisplayOwners = (plan.retainedClassNames ?? [])\n .map(describeDisplayOwnership)\n .filter(owner => owner !== undefined);\n if (\n retainedDisplayOwners.some(owner =>\n visibilityRanges.some(range => mediaRangesIntersect(activationRange(owner.activation), range)),\n )\n ) {\n unsafeFamilies.add(family);\n }\n\n const classNames = plan.classNames.filter(className => {\n const owner = describeDisplayOwnership(className);\n if (owner === undefined) return true;\n const target = activationRange(owner.activation);\n if (family === 'extended-style' && visibilityRanges.some(range => mediaRangesIntersect(target, range))) {\n unsafeFamilies.add(family);\n return true;\n }\n if (!ownsOnlyDisplay(owner)) {\n if (visibilityRanges.some(range => mediaRangesIntersect(target, range))) unsafeFamilies.add(family);\n return true;\n }\n const descriptor = describeTailwindDisplay(className);\n if (descriptor === undefined) return true;\n if (descriptor.important && visibilityRanges.some(range => mediaRangesIntersect(target, range))) {\n unsafeFamilies.add(family);\n return true;\n }\n if (this.visibilityOwnsHiddenRange(target, states)) return false;\n\n const partiallyHidden =\n !baseIsHidden &&\n responsiveHiddenRanges.some(range => mediaRangesIntersect(target, range)) &&\n !rangesCover(target, responsiveHiddenRanges);\n const shownOverridesHiddenCandidate =\n displayIntent(descriptor) !== 'shown' && shownRanges.some(range => mediaRangesIntersect(target, range));\n if (partiallyHidden || shownOverridesHiddenCandidate) unsafeFamilies.add(family);\n return true;\n });\n return classNames.length === plan.classNames.length ? plan : { ...plan, classNames };\n });\n\n if (!unsafeFamilies.size) return { strategyPlans, visibilityPlan };\n\n return {\n strategyPlans: strategyPlans.map(plan => {\n const family = this.extendedFamily(plan.input.directive);\n return plan.status === 'converted' && family !== undefined && unsafeFamilies.has(family)\n ? contextUnverified(\n plan.input,\n 'The responsive class/style display range and visibility range only partially agree on ownership.',\n )\n : plan;\n }),\n visibilityPlan: {\n status: 'unresolved',\n plans: states.map(state =>\n contextUnverified(\n state.input,\n 'The responsive class/style display range and visibility range only partially agree on ownership.',\n ),\n ),\n },\n };\n }\n\n resolveVisibleDisplay(\n current: VisibleDisplayResolution,\n plans: readonly PlannedConversion[],\n visibilityPlan: VisibilityFamilyPlan,\n ): VisibleDisplayResolution {\n if (visibilityPlan.status === 'unresolved') return current;\n\n const descriptors = plans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> =>\n plan.status === 'converted' && extendedDirectives.has(plan.input.directive),\n )\n .flatMap(plan => {\n const family = this.extendedFamily(plan.input.directive);\n if (family === undefined) return [];\n return plan.classNames\n .map(describeTailwindDisplay)\n .filter(descriptor => descriptor !== undefined)\n .map(descriptor => ({ descriptor, family }));\n })\n .filter(\n ({ descriptor, family }) =>\n family === 'extended-style' ||\n descriptor.important ||\n !this.visibilityOwnsHiddenRange(activationRange(descriptor.activation), visibilityPlan.states),\n );\n if (!descriptors.length) return current;\n\n const shownRanges = shownVisibilityRanges(visibilityPlan.states);\n if (\n descriptors.some(\n ({ descriptor }) =>\n displayIntent(descriptor) !== 'shown' &&\n shownRanges.some(range => mediaRangesIntersect(activationRange(descriptor.activation), range)),\n )\n ) {\n return {\n status: 'unverified',\n reason: 'A responsive class/style hidden utility overlaps a visibility state that must be shown.',\n };\n }\n\n if (\n descriptors.some(({ descriptor }) =>\n shownRanges.some(range => mediaRangesIntersect(activationRange(descriptor.activation), range)),\n )\n ) {\n return {\n status: 'unverified',\n reason:\n 'Flex-Layout captures the original display during initialization, before responsive ownership is stable.',\n };\n }\n return current;\n }\n\n inputMayControlDisplay(input: LocatedFlexLayoutInput): boolean {\n if (extendedClassDirectives.has(input.directive)) {\n if (input.binding !== 'literal') return true;\n const tokens = input.value.split(/[\\t\\n\\f\\r ]+/u).filter(Boolean);\n return tokens.some(token => {\n const classification = this.classifier.classify(token);\n return (\n classification.status === 'unverified' ||\n classification.descriptor.cssProperties.some(property => cssPropertiesOverlap(property, 'display'))\n );\n });\n }\n\n if (!extendedStyleDirectives.has(input.directive)) return false;\n if (input.binding !== 'literal') return true;\n const parsed = parseLiteralStyleDeclarations(input.value);\n return (\n parsed.status === 'unverified' ||\n parsed.declarations.some(declaration => cssPropertiesOverlap(declaration.property, 'display'))\n );\n }\n\n private composeExtendedFamilies(plans: readonly PlannedConversion[]): readonly PlannedConversion[] {\n const convertedDisplayRanges = (\n directives: ReadonlySet<LocatedFlexLayoutInput['directive']>,\n ): readonly MediaRange[] =>\n plans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> =>\n plan.status === 'converted' && directives.has(plan.input.directive),\n )\n .flatMap(plan =>\n plan.classNames.flatMap(className => {\n const descriptor = describeTailwindDisplay(className);\n return descriptor === undefined ? [] : [activationRange(descriptor.activation)];\n }),\n );\n const classRanges = convertedDisplayRanges(extendedClassDirectives);\n const styleRanges = convertedDisplayRanges(extendedStyleDirectives);\n const importantClassRanges = plans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> =>\n plan.status === 'converted' && extendedClassDirectives.has(plan.input.directive),\n )\n .flatMap(plan =>\n plan.classNames.flatMap(className => {\n const descriptor = describeTailwindDisplay(className);\n return descriptor?.important ? [activationRange(descriptor.activation)] : [];\n }),\n );\n const unresolvedRanges = (directives: ReadonlySet<LocatedFlexLayoutInput['directive']>): readonly MediaRange[] =>\n plans.flatMap(plan => {\n if (\n plan.status === 'converted' ||\n !directives.has(plan.input.directive) ||\n !this.inputMayControlDisplay(plan.input)\n ) {\n return [];\n }\n if (plan.input.breakpoint === undefined) return [{}];\n const classification = this.breakpointCatalog.classify(plan.input.breakpoint);\n return classification.kind === 'verified' ? [classification.definition.range] : [{}];\n });\n const unresolvedClassRanges = unresolvedRanges(extendedClassDirectives);\n const unresolvedStyleRanges = unresolvedRanges(extendedStyleDirectives);\n const classPartiallyOverlapsStyle = classRanges.some(\n target => styleRanges.some(range => mediaRangesIntersect(target, range)) && !rangesCover(target, styleRanges),\n );\n const affectedFamilies = new Set<'extended-class' | 'extended-style'>();\n const importantClassOverlapsStyle = importantClassRanges.some(target =>\n styleRanges.some(range => mediaRangesIntersect(target, range)),\n );\n if (classPartiallyOverlapsStyle || importantClassOverlapsStyle) {\n affectedFamilies.add('extended-class');\n affectedFamilies.add('extended-style');\n }\n if (styleRanges.some(target => unresolvedClassRanges.some(range => mediaRangesIntersect(target, range)))) {\n affectedFamilies.add('extended-style');\n }\n if (classRanges.some(target => unresolvedStyleRanges.some(range => mediaRangesIntersect(target, range)))) {\n affectedFamilies.add('extended-class');\n }\n\n return plans.map(plan => {\n const family = this.extendedFamily(plan.input.directive);\n if (plan.status !== 'converted' || family === undefined) return plan;\n if (affectedFamilies.has(family)) {\n return contextUnverified(\n plan.input,\n 'Responsive class and style display ownership cannot be proven for every overlapping activation range.',\n );\n }\n if (family === 'extended-style') return plan;\n return {\n ...plan,\n classNames: plan.classNames.filter(className => {\n const descriptor = describeTailwindDisplay(className);\n return (\n descriptor === undefined ||\n descriptor.important ||\n !rangesCover(activationRange(descriptor.activation), styleRanges)\n );\n }),\n };\n });\n }\n\n private visibilityOwnsHiddenRange(target: MediaRange, states: readonly VisibilityState[]): boolean {\n const baseStates = states.filter(state => state.activation.kind === 'base');\n const responsiveStates = states.filter(\n (state): state is VisibilityState & { readonly activation: { readonly kind: 'media' } } =>\n state.activation.kind === 'media',\n );\n const baseIsHidden = baseStates.length > 0 && baseStates.every(state => state.intent === 'hidden');\n if (baseIsHidden) {\n return !responsiveStates.some(\n state => state.intent === 'shown' && mediaRangesIntersect(target, state.activation.definition.range),\n );\n }\n return rangesCover(\n target,\n responsiveStates.filter(state => state.intent === 'hidden').map(state => state.activation.definition.range),\n );\n }\n\n private extendedFamily(\n directive: LocatedFlexLayoutInput['directive'],\n ): 'extended-class' | 'extended-style' | undefined {\n if (extendedClassDirectives.has(directive)) return 'extended-class';\n if (extendedStyleDirectives.has(directive)) return 'extended-style';\n return undefined;\n }\n}\n","import { ResponsiveVariantEmitter } from '../responsive-variant.emitter';\nimport { describeTailwindUtility } from '../tailwind-class-conflict';\nimport type { ExtendedResponsiveState, ResponsiveClassValue } from './responsive-class.model';\nimport type { ResponsiveStyleValue } from './responsive-style.model';\nimport { TailwindArbitraryPropertyEncoder } from './tailwind-arbitrary-property.encoder';\nimport { TailwindCandidateClassifier } from './tailwind-candidate-classifier';\n\nexport class ExtendedResponsiveEmitter {\n constructor(\n private readonly responsiveEmitter = new ResponsiveVariantEmitter(),\n private readonly styleEncoder = new TailwindArbitraryPropertyEncoder(),\n private readonly classifier = new TailwindCandidateClassifier(),\n ) {}\n\n emitClass(state: ExtendedResponsiveState<ResponsiveClassValue>): readonly string[] {\n const emitted: string[] = [];\n const seen = new Set<string>();\n\n for (const token of state.value.tokens) {\n if (seen.has(token)) continue;\n seen.add(token);\n\n const classification = this.classifier.classify(token);\n if (classification.status !== 'verified' || classification.descriptor.cssProperties.length === 0) {\n throw new Error('Cannot emit an unverified or ungrouped Tailwind class candidate.');\n }\n emitted.push(this.responsiveEmitter.emitCandidate(state.activation.definition, token));\n }\n\n return emitted;\n }\n\n emitStyle(state: ExtendedResponsiveState<ResponsiveStyleValue>): readonly string[] {\n const emitted: string[] = [];\n const seen = new Set<string>();\n\n for (const declaration of state.value.declarations) {\n const candidate = this.styleEncoder.encode(declaration);\n if (seen.has(candidate)) continue;\n seen.add(candidate);\n\n const descriptor = describeTailwindUtility(candidate);\n if (descriptor === undefined || descriptor.cssProperties.length === 0) {\n throw new Error('Cannot emit an ungrouped Tailwind arbitrary-property candidate.');\n }\n emitted.push(this.responsiveEmitter.emitCandidate(state.activation.definition, candidate));\n }\n\n return emitted;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog } from '../../../breakpoint/breakpoint-catalog';\nimport type { ResponsiveClassValueResult } from './responsive-class.model';\nimport type { TailwindCandidateClassifier } from './tailwind-candidate-classifier';\n\nconst angularNgClassWhitespace = /\\s+/u;\nconst interpolation = /\\{\\{[\\s\\S]*\\}\\}/u;\n\nexport function parseLiteralResponsiveClassValue(\n value: string,\n classifier: TailwindCandidateClassifier,\n): ResponsiveClassValueResult {\n if (interpolation.test(value)) {\n return { status: 'unverified', reason: 'Responsive class interpolation may depend on runtime state.' };\n }\n\n const tokens = [...new Set(value.split(angularNgClassWhitespace).filter(token => token.length > 0))];\n for (const token of tokens) {\n const classification = classifier.classify(token);\n if (classification.status === 'unverified') {\n return {\n status: 'unverified',\n token,\n reason: `The class token ${JSON.stringify(token)} is not a compiler-proven built-in Tailwind utility and may be an application or plugin class. ${classification.reason}`,\n };\n }\n }\n\n return { status: 'parsed', value: { tokens } };\n}\n\nexport function parseResponsiveClassValue(\n input: LocatedFlexLayoutInput,\n classifier: TailwindCandidateClassifier,\n): ResponsiveClassValueResult {\n if (input.binding !== 'literal') {\n return { status: 'unverified', reason: 'Responsive class property bindings may depend on runtime state.' };\n }\n if (input.directive !== 'ngClass') {\n return { status: 'unverified', reason: 'Deprecated responsive class aliases are not converted.' };\n }\n if (input.breakpoint === undefined || new BreakpointCatalog().classify(input.breakpoint).kind !== 'verified') {\n return { status: 'unverified', reason: 'The responsive class breakpoint is not a verified viewport alias.' };\n }\n return parseLiteralResponsiveClassValue(input.value, classifier);\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport type { TemplateAttribute } from '../../../template/template.model';\nimport { templateAttributeKeys } from '../../../template/template-attribute';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport {\n describeTailwindUtility,\n findTailwindClassConflicts,\n type TailwindUtilityDescriptor,\n} from '../tailwind-class-conflict';\nimport { parseLiteralStyleDeclarations } from '../visibility/literal-style-display';\nimport { ExtendedResponsiveEmitter } from './extended-responsive.emitter';\nimport type { ExtendedFamilyPlan, ExtendedResponsiveState, ResponsiveClassValue } from './responsive-class.model';\nimport type { ResponsiveStyleValue } from './responsive-style.model';\nimport { TailwindCandidateClassifier } from './tailwind-candidate-classifier';\nimport { cssPropertiesOverlap } from './css-property-ownership';\nimport { parseLiteralResponsiveClassValue } from './responsive-class-value.parser';\nimport {\n parseLiteralResponsiveStyleValue,\n responsiveStyleExactKeyAliasReason,\n responsiveStyleValuesHaveExactKeyAliases,\n} from './responsive-style-value.parser';\n\ninterface ExtendedResponsiveRequestBase {\n readonly existingClassNames: readonly string[];\n readonly attributes: readonly TemplateAttribute[];\n}\n\nexport type ExtendedResponsivePlanRequest =\n | (ExtendedResponsiveRequestBase & {\n readonly kind: 'class';\n readonly familyPlan: ExtendedFamilyPlan<ResponsiveClassValue>;\n })\n | (ExtendedResponsiveRequestBase & {\n readonly kind: 'style';\n readonly familyPlan: ExtendedFamilyPlan<ResponsiveStyleValue>;\n });\n\nexport type ExtendedResponsivePlan =\n | { readonly status: 'converted'; readonly plans: readonly PlannedConversion[] }\n | { readonly status: 'unresolved'; readonly plans: readonly PlannedConversion[] };\n\ntype OwnedTailwindUtilityDescriptor = TailwindUtilityDescriptor;\n\ninterface EmittedCandidate {\n readonly token: string;\n readonly descriptor: OwnedTailwindUtilityDescriptor;\n readonly input: LocatedFlexLayoutInput;\n}\n\ntype AnyExtendedState = ExtendedResponsiveState<ResponsiveClassValue> | ExtendedResponsiveState<ResponsiveStyleValue>;\n\ntype EmissionResult =\n | { readonly status: 'emitted'; readonly candidates: readonly EmittedCandidate[] }\n | {\n readonly status: 'unverified';\n readonly input: LocatedFlexLayoutInput;\n readonly code: 'tailwind-candidate-unverified' | 'style-value-unverified';\n readonly reason: string;\n };\n\nfunction compareText(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n\nfunction boundClassAuthority(attribute: TemplateAttribute): boolean {\n if (attribute.binding !== 'property') return false;\n if (attribute.bindingTarget === 'class') return true;\n\n return [...templateAttributeKeys(attribute)].some(\n key =>\n key === 'class' ||\n key === 'ngclass' ||\n key === 'attr.class' ||\n key.startsWith('class.') ||\n key.startsWith('ngclass.') ||\n key.startsWith('attr.class.'),\n );\n}\n\nfunction boundStyleAuthority(attribute: TemplateAttribute): boolean {\n if (attribute.binding !== 'property') return false;\n if (attribute.bindingTarget === 'style') return true;\n\n return [...templateAttributeKeys(attribute)].some(\n key =>\n key === 'style' ||\n key === 'ngstyle' ||\n key === 'attr.style' ||\n key.startsWith('style.') ||\n key.startsWith('ngstyle.') ||\n key.startsWith('attr.style.'),\n );\n}\n\nfunction literalStyleAuthority(attribute: TemplateAttribute): boolean {\n return attribute.binding === 'literal' && templateAttributeKeys(attribute).has('style');\n}\n\nfunction unsuffixedAuthority(\n attributes: readonly TemplateAttribute[],\n key: 'ngclass' | 'ngstyle',\n): TemplateAttribute | undefined {\n return attributes.find(attribute => templateAttributeKeys(attribute).has(key));\n}\n\nfunction equalClassValues(left: ResponsiveClassValue, right: ResponsiveClassValue): boolean {\n return (\n left.tokens.length === right.tokens.length && left.tokens.every((token, index) => token === right.tokens[index])\n );\n}\n\nfunction hasPropertyOwnership(\n descriptor: TailwindUtilityDescriptor | undefined,\n): descriptor is OwnedTailwindUtilityDescriptor {\n return descriptor !== undefined && descriptor.cssProperties.length > 0;\n}\n\nfunction sameCssProperties(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((property, index) => property === right[index]);\n}\n\nfunction diagnostic(\n input: LocatedFlexLayoutInput,\n code: 'bound-class' | 'class-conflict' | 'tailwind-candidate-unverified' | 'style-value-unverified',\n reason: string,\n suggestion: string,\n): PlannedConversion {\n return { status: 'review', input, code, reason, suggestion };\n}\n\nexport class ExtendedResponsivePlanner {\n constructor(\n private readonly emitter = new ExtendedResponsiveEmitter(),\n private readonly classifier = new TailwindCandidateClassifier(),\n ) {}\n\n plan(request: ExtendedResponsivePlanRequest): ExtendedResponsivePlan {\n if (request.familyPlan.status === 'unresolved') {\n return { status: 'unresolved', plans: request.familyPlan.plans };\n }\n\n let states: readonly AnyExtendedState[];\n let emission: EmissionResult;\n if (request.kind === 'class') {\n const classStates = this.canonicalStates(request.familyPlan.states);\n states = classStates;\n const fallback = this.classFallback(classStates, request.attributes);\n if (fallback !== undefined) return fallback;\n emission = this.emitClass(classStates);\n } else {\n const styleStates = this.canonicalStates(request.familyPlan.states);\n states = styleStates;\n if (responsiveStyleValuesHaveExactKeyAliases(styleStates.map(state => state.input.value))) {\n return {\n status: 'unresolved',\n plans: styleStates.map(state =>\n diagnostic(\n state.input,\n 'style-value-unverified',\n responsiveStyleExactKeyAliasReason,\n 'Keep the complete responsive style family or normalize its exact property key before migration.',\n ),\n ),\n };\n }\n const fallback = this.styleFallback(styleStates, request.attributes);\n if (fallback !== undefined) return fallback;\n emission = this.emitStyle(styleStates);\n }\n if (emission.status === 'unverified') {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n diagnostic(\n state.input,\n emission.code,\n emission.reason,\n 'Keep the complete responsive family or replace the unverified value before migration.',\n ),\n ),\n };\n }\n\n const candidates = emission.candidates;\n const generatedClassNames = [...new Set(candidates.map(candidate => candidate.token))];\n if (generatedClassNames.length > 0 && request.attributes.some(boundClassAuthority)) {\n return this.unresolved(\n states,\n 'bound-class',\n 'Generated responsive classes cannot be merged safely with a bound class value.',\n 'Merge the generated classes into the class binding manually.',\n );\n }\n\n if (request.kind === 'style' && generatedClassNames.length > 0) {\n if (request.attributes.some(boundStyleAuthority)) {\n return this.unresolved(\n states,\n 'class-conflict',\n 'A bound style authority may control a property generated by this responsive style family.',\n 'Remove or reconcile the bound style before migrating this family.',\n );\n }\n\n const generatedProperties = new Set(\n request.familyPlan.states.flatMap(state => state.value.declarations.map(declaration => declaration.property)),\n );\n if (this.literalStyleConflicts(request.attributes, generatedProperties)) {\n return this.unresolved(\n states,\n 'class-conflict',\n 'A literal fallback style may control a property generated by this responsive style family.',\n 'Remove or reconcile the overlapping fallback declaration before migrating this family.',\n );\n }\n }\n\n if (findTailwindClassConflicts(request.existingClassNames, generatedClassNames).size > 0) {\n return this.unresolved(\n states,\n 'class-conflict',\n 'An existing Tailwind utility controls a CSS property generated by this responsive family.',\n 'Remove or reconcile the conflicting utility before migrating this family.',\n );\n }\n\n const existing = new Set(request.existingClassNames);\n const classNames = generatedClassNames.filter(className => !existing.has(className));\n const plans = states.map((state, index): PlannedConversion => ({\n status: 'converted',\n input: state.input,\n classNames: index === 0 ? classNames : [],\n }));\n return { status: 'converted', plans };\n }\n\n private canonicalStates<T>(states: readonly ExtendedResponsiveState<T>[]): readonly ExtendedResponsiveState<T>[] {\n return [...states].sort((left, right) => {\n const priority = right.activation.definition.priority - left.activation.definition.priority;\n if (priority) return priority;\n const alias = compareText(left.activation.definition.alias, right.activation.definition.alias);\n return alias || compareText(left.input.id, right.input.id);\n });\n }\n\n private emitClass(states: readonly ExtendedResponsiveState<ResponsiveClassValue>[]): EmissionResult {\n const candidates: EmittedCandidate[] = [];\n\n for (const state of states) {\n const uniqueTokens = [...new Set(state.value.tokens)];\n const descriptors: OwnedTailwindUtilityDescriptor[] = [];\n for (const token of uniqueTokens) {\n const classification = this.classifier.classify(token);\n if (classification.status !== 'verified' || !hasPropertyOwnership(classification.descriptor)) {\n return {\n status: 'unverified',\n input: state.input,\n code: 'tailwind-candidate-unverified',\n reason: `The class token ${JSON.stringify(token)} is not a verified Tailwind candidate with stable property ownership.`,\n };\n }\n descriptors.push(classification.descriptor);\n }\n\n const classNames = this.emitter.emitClass({ ...state, value: { tokens: uniqueTokens } });\n for (const [index, token] of classNames.entries()) {\n const sourceDescriptor = descriptors[index];\n const generatedDescriptor = describeTailwindUtility(token);\n if (\n sourceDescriptor === undefined ||\n !hasPropertyOwnership(generatedDescriptor) ||\n !sameCssProperties(generatedDescriptor.cssProperties, sourceDescriptor.cssProperties)\n ) {\n return {\n status: 'unverified',\n input: state.input,\n code: 'tailwind-candidate-unverified',\n reason: 'Responsive class emission lost its verified property descriptor.',\n };\n }\n candidates.push({ token, descriptor: generatedDescriptor, input: state.input });\n }\n }\n\n return { status: 'emitted', candidates };\n }\n\n private classFallback(\n states: readonly ExtendedResponsiveState<ResponsiveClassValue>[],\n attributes: readonly TemplateAttribute[],\n ): ExtendedResponsivePlan | undefined {\n const fallback = unsuffixedAuthority(attributes, 'ngclass');\n if (fallback === undefined) return undefined;\n if (fallback.binding !== 'literal') {\n return this.unresolved(\n states,\n 'bound-class',\n 'A bound unsuffixed ngClass value is the runtime fallback for this responsive family.',\n 'Make the complete ngClass family literal or migrate its replacement behavior manually.',\n );\n }\n\n const parsed = parseLiteralResponsiveClassValue(fallback.value, this.classifier);\n if (parsed.status === 'unverified') {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n diagnostic(\n state.input,\n 'tailwind-candidate-unverified',\n `The unsuffixed ngClass fallback cannot be translated exactly. ${parsed.reason}`,\n 'Keep the complete ngClass family or replace the fallback with proven Tailwind candidates.',\n ),\n ),\n };\n }\n if (parsed.value.tokens.length === 0) return undefined;\n if (states.every(state => equalClassValues(state.value, parsed.value))) {\n return this.convertedWithoutOutput(states, parsed.value.tokens);\n }\n return this.unresolved(\n states,\n 'class-conflict',\n 'The literal unsuffixed ngClass fallback is replaced, not merged, when a responsive value activates.',\n 'Migrate the complete ngClass fallback and responsive replacement family manually.',\n );\n }\n\n private styleFallback(\n states: readonly ExtendedResponsiveState<ResponsiveStyleValue>[],\n attributes: readonly TemplateAttribute[],\n ): ExtendedResponsivePlan | undefined {\n const fallback = unsuffixedAuthority(attributes, 'ngstyle');\n if (fallback === undefined) return undefined;\n if (fallback.binding !== 'literal') {\n return this.unresolved(\n states,\n 'class-conflict',\n 'A bound unsuffixed ngStyle value is the runtime fallback for this responsive family.',\n 'Make the complete ngStyle family literal or migrate its replacement behavior manually.',\n );\n }\n\n const parsed = parseLiteralResponsiveStyleValue(fallback.value);\n if (parsed.status === 'unverified') {\n return {\n status: 'unresolved',\n plans: states.map(state =>\n diagnostic(\n state.input,\n 'style-value-unverified',\n `The unsuffixed ngStyle fallback cannot be translated exactly. ${parsed.reason}`,\n 'Keep the complete ngStyle family or replace the fallback with an exact literal style map.',\n ),\n ),\n };\n }\n if (parsed.value.declarations.length === 0 && fallback.value.length === 0) return undefined;\n return this.unresolved(\n states,\n 'class-conflict',\n 'The literal unsuffixed ngStyle raw-string fallback is replaced at runtime and cannot remain after Flex-Layout is removed.',\n 'Translate and remove the complete ngStyle fallback together with its responsive replacement family.',\n );\n }\n\n private convertedWithoutOutput(\n states: readonly AnyExtendedState[],\n retainedClassNames: readonly string[] = [],\n ): ExtendedResponsivePlan {\n return {\n status: 'converted',\n plans: states.map((state, index) => ({\n status: 'converted',\n input: state.input,\n classNames: [],\n ...(index === 0 && retainedClassNames.length > 0 ? { retainedClassNames } : {}),\n })),\n };\n }\n\n private emitStyle(states: readonly ExtendedResponsiveState<ResponsiveStyleValue>[]): EmissionResult {\n const candidates: EmittedCandidate[] = [];\n\n for (const state of states) {\n for (const token of this.emitter.emitStyle(state)) {\n const descriptor = describeTailwindUtility(token);\n if (!hasPropertyOwnership(descriptor)) {\n return {\n status: 'unverified',\n input: state.input,\n code: 'style-value-unverified',\n reason: 'Responsive style emission lost its verified property descriptor.',\n };\n }\n candidates.push({ token, descriptor, input: state.input });\n }\n }\n\n return { status: 'emitted', candidates };\n }\n\n private literalStyleConflicts(\n attributes: readonly TemplateAttribute[],\n generatedProperties: ReadonlySet<string>,\n ): boolean {\n return attributes.filter(literalStyleAuthority).some(attribute => {\n const parsed = parseLiteralStyleDeclarations(attribute.value);\n if (parsed.status === 'unverified') return true;\n\n return parsed.declarations.some(declaration =>\n [...generatedProperties].some(property => cssPropertiesOverlap(declaration.property, property)),\n );\n });\n }\n\n private unresolved(\n states: readonly AnyExtendedState[],\n code: 'bound-class' | 'class-conflict',\n reason: string,\n suggestion: string,\n ): ExtendedResponsivePlan {\n return {\n status: 'unresolved',\n plans: states.map(state => diagnostic(state.input, code, reason, suggestion)),\n };\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../../analyzer/flex-layout-attribute.analyzer';\nimport { BreakpointCatalog, mediaRangesIntersect, type MediaRange } from '../../../breakpoint/breakpoint-catalog';\nimport type { PlannedConversion } from '../../conversion-adapter';\nimport { describeTailwindUtility, type TailwindActivation } from '../tailwind-class-conflict';\nimport { parseLiteralStyleDeclarations } from '../visibility/literal-style-display';\nimport { cssPropertiesOverlap, cssPropertyOwnershipCovers } from './css-property-ownership';\nimport { TailwindCandidateClassifier } from './tailwind-candidate-classifier';\n\nconst extendedClassDirectives = new Set<LocatedFlexLayoutInput['directive']>(['class', 'ngClass']);\nconst extendedStyleDirectives = new Set<LocatedFlexLayoutInput['directive']>(['style', 'ngStyle']);\nconst extendedDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n ...extendedClassDirectives,\n ...extendedStyleDirectives,\n]);\nconst inlineWriterDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'style',\n 'ngStyle',\n 'fxLayout',\n 'fxLayoutAlign',\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexAlign',\n 'fxFlexFill',\n 'fxFill',\n 'fxFlexOffset',\n 'fxFlexOrder',\n 'fxShow',\n 'fxHide',\n]);\n\nexport type GeneratedPropertyAuthority = 'source-class' | 'source-inline' | 'semantic-replacement';\n\nexport function generatedPropertyAuthority(directive: LocatedFlexLayoutInput['directive']): GeneratedPropertyAuthority {\n if (extendedClassDirectives.has(directive)) return 'source-class';\n return inlineWriterDirectives.has(directive) ? 'source-inline' : 'semantic-replacement';\n}\n\ninterface NumericRange {\n readonly min: number;\n readonly max: number;\n}\n\ninterface GeneratedCandidate {\n readonly plan: Extract<PlannedConversion, { readonly status: 'converted' }>;\n readonly token: string;\n readonly properties: readonly string[];\n readonly range: MediaRange;\n readonly important: boolean;\n readonly family: string;\n readonly authority: GeneratedPropertyAuthority;\n readonly suppressible: boolean;\n}\n\nfunction activationRange(activation: TailwindActivation): MediaRange {\n return activation.kind === 'base' ? {} : activation.range;\n}\n\nfunction propertySetsOverlap(left: readonly string[], right: readonly string[]): boolean {\n return left.some(leftProperty => right.some(rightProperty => cssPropertiesOverlap(leftProperty, rightProperty)));\n}\n\nfunction numericRange(range: MediaRange): NumericRange {\n return {\n min: range.min ?? Number.NEGATIVE_INFINITY,\n max: range.max ?? Number.POSITIVE_INFINITY,\n };\n}\n\nfunction rangesCover(target: MediaRange, ranges: readonly MediaRange[]): boolean {\n const numericTarget = numericRange(target);\n const clipped = ranges\n .filter(range => mediaRangesIntersect(target, range))\n .map(range => {\n const numeric = numericRange(range);\n return {\n min: Math.max(numericTarget.min, numeric.min),\n max: Math.min(numericTarget.max, numeric.max),\n };\n })\n .sort((left, right) => left.min - right.min);\n const first = clipped[0];\n if (!first || first.min !== numericTarget.min) return false;\n\n let coveredUntil = first.max;\n for (const range of clipped.slice(1)) {\n if (range.min > coveredUntil) return false;\n coveredUntil = Math.max(coveredUntil, range.max);\n }\n return coveredUntil >= numericTarget.max;\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Generated responsive families have overlapping CSS ownership without one provable precedence.',\n suggestion: 'Migrate the coupled responsive families together manually.',\n };\n}\n\nexport class GeneratedPropertyCompositionPlanner {\n constructor(\n private readonly breakpointCatalog = new BreakpointCatalog(),\n private readonly classifier = new TailwindCandidateClassifier(),\n ) {}\n\n compose(plans: readonly PlannedConversion[]): readonly PlannedConversion[] {\n const candidates = this.generatedCandidates(plans);\n const unsafeFamilies = new Set<string>();\n const suppressedTokensByPlan = new Map<string, Set<string>>();\n\n this.closeUnresolvedAuthorities(plans, candidates, unsafeFamilies);\n\n for (const candidate of candidates.filter(candidate => candidate.authority === 'source-class')) {\n const writers = candidates.filter(\n writer =>\n writer.authority !== 'source-class' &&\n writer.family !== candidate.family &&\n mediaRangesIntersect(writer.range, candidate.range) &&\n propertySetsOverlap(writer.properties, candidate.properties),\n );\n if (!writers.length) continue;\n\n if (writers.some(writer => writer.authority === 'semantic-replacement')) {\n unsafeFamilies.add(candidate.family);\n for (const writer of writers) unsafeFamilies.add(writer.family);\n continue;\n }\n\n const ownerFamilies = new Set(writers.map(owner => owner.family));\n const ownershipIsProven =\n !candidate.important &&\n ownerFamilies.size === 1 &&\n candidate.properties.every(property =>\n rangesCover(\n candidate.range,\n writers\n .filter(owner =>\n owner.properties.some(ownerProperty => cssPropertyOwnershipCovers(ownerProperty, property)),\n )\n .map(owner => owner.range),\n ),\n );\n if (ownershipIsProven) {\n if (!candidate.suppressible) {\n unsafeFamilies.add(candidate.family);\n for (const owner of writers) unsafeFamilies.add(owner.family);\n continue;\n }\n const suppressed = suppressedTokensByPlan.get(candidate.plan.input.id) ?? new Set<string>();\n suppressed.add(candidate.token);\n suppressedTokensByPlan.set(candidate.plan.input.id, suppressed);\n continue;\n }\n\n unsafeFamilies.add(candidate.family);\n for (const owner of writers) unsafeFamilies.add(owner.family);\n }\n\n this.closeCompetingWriters(candidates, unsafeFamilies);\n\n return plans.map(plan => {\n if (plan.status !== 'converted') return plan;\n if (unsafeFamilies.has(this.planFamily(plan.input.directive))) return contextUnverified(plan.input);\n const suppressed = suppressedTokensByPlan.get(plan.input.id);\n return suppressed?.size ? { ...plan, classNames: plan.classNames.filter(token => !suppressed.has(token)) } : plan;\n });\n }\n\n private generatedCandidates(plans: readonly PlannedConversion[]): readonly GeneratedCandidate[] {\n return plans\n .filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> => plan.status === 'converted',\n )\n .flatMap(plan => {\n const family = this.planFamily(plan.input.directive);\n const authority = generatedPropertyAuthority(plan.input.directive);\n const describe = (token: string, suppressible: boolean): readonly GeneratedCandidate[] => {\n const descriptor = describeTailwindUtility(token);\n return descriptor === undefined || descriptor.cssProperties.length === 0\n ? []\n : [\n {\n plan,\n token,\n properties: descriptor.cssProperties,\n range: activationRange(descriptor.activation),\n important: descriptor.important,\n family,\n authority,\n suppressible,\n } satisfies GeneratedCandidate,\n ];\n };\n return [\n ...plan.classNames.flatMap(token => describe(token, true)),\n ...(plan.retainedClassNames ?? []).flatMap(token => describe(token, false)),\n ];\n });\n }\n\n private closeUnresolvedAuthorities(\n plans: readonly PlannedConversion[],\n candidates: readonly GeneratedCandidate[],\n unsafeFamilies: Set<string>,\n ): void {\n for (const unresolved of plans.filter(\n plan => plan.status !== 'converted' && extendedDirectives.has(plan.input.directive),\n )) {\n const properties = this.unresolvedProperties(unresolved.input);\n const range = this.inputRange(unresolved.input);\n for (const candidate of candidates) {\n if (\n mediaRangesIntersect(range, candidate.range) &&\n (properties === undefined || propertySetsOverlap(properties, candidate.properties))\n ) {\n unsafeFamilies.add(candidate.family);\n }\n }\n }\n }\n\n private closeCompetingWriters(candidates: readonly GeneratedCandidate[], unsafeFamilies: Set<string>): void {\n const writers = candidates.filter(candidate => candidate.authority !== 'source-class');\n for (let leftIndex = 0; leftIndex < writers.length; leftIndex += 1) {\n const left = writers[leftIndex];\n if (left === undefined) continue;\n for (const right of writers.slice(leftIndex + 1)) {\n if (\n left.family === right.family ||\n (!left.family.startsWith('extended-') && !right.family.startsWith('extended-')) ||\n !mediaRangesIntersect(left.range, right.range) ||\n !propertySetsOverlap(left.properties, right.properties) ||\n (left.authority === 'source-inline' && right.authority === 'source-inline' && left.token === right.token)\n ) {\n continue;\n }\n unsafeFamilies.add(left.family);\n unsafeFamilies.add(right.family);\n }\n }\n }\n\n private planFamily(directive: LocatedFlexLayoutInput['directive']): string {\n if (['fxFlex', 'fxGrow', 'fxShrink'].includes(directive)) return 'flex-item';\n if (directive === 'fxFlexFill' || directive === 'fxFill') return 'flex-fill';\n if (extendedClassDirectives.has(directive)) return 'extended-class';\n if (extendedStyleDirectives.has(directive)) return 'extended-style';\n return directive;\n }\n\n private inputRange(input: LocatedFlexLayoutInput): MediaRange {\n if (input.breakpoint === undefined) return {};\n const classification = this.breakpointCatalog.classify(input.breakpoint);\n return classification.kind === 'verified' ? classification.definition.range : {};\n }\n\n private unresolvedProperties(input: LocatedFlexLayoutInput): readonly string[] | undefined {\n if (input.binding !== 'literal') return undefined;\n if (extendedClassDirectives.has(input.directive)) {\n const classifications = input.value\n .split(/[\\t\\n\\f\\r ]+/u)\n .filter(Boolean)\n .map(token => this.classifier.classify(token));\n if (classifications.some(classification => classification.status === 'unverified')) return undefined;\n return classifications.flatMap(classification =>\n classification.status === 'verified' ? classification.descriptor.cssProperties : [],\n );\n }\n if (!extendedStyleDirectives.has(input.directive)) return [];\n const parsed = parseLiteralStyleDeclarations(input.value);\n return parsed.status === 'parsed' ? parsed.declarations.map(declaration => declaration.property) : undefined;\n }\n}\n","import type { LocatedFlexLayoutInput } from '../../analyzer/flex-layout-attribute.analyzer';\nimport type { ConversionAdapter, ConversionContext, PlannedConversion } from '../conversion-adapter';\nimport { planLayoutGap } from './directives/layout-gap.strategy';\nimport { planFlexItem } from './directives/flex-item.strategy';\nimport { planFlexOffset } from './directives/flex-offset.strategy';\nimport type { TailwindStrategyResult } from './tailwind-semantic.model';\nimport { planLayoutAlign } from './directives/layout-align.strategy';\nimport { planIndependentDirective } from './independent-directive.registry';\nimport type { TemplateAttribute } from '../../template/template.model';\nimport { templateAttributeKeys } from '../../template/template-attribute';\nimport { planLayout } from './directives/layout.strategy';\nimport { describeTailwindDisplay, findTailwindClassConflicts } from './tailwind-class-conflict';\nimport { BreakpointCatalog } from '../../breakpoint/breakpoint-catalog';\nimport { ResponsiveVariantEmitter } from './responsive-variant.emitter';\nimport { planResponsiveClasses } from './responsive-plan';\nimport { ResponsiveFamilyPlanner } from './responsive-family.planner';\nimport { DisplayCompositionPlanner } from './visibility/display-composition.planner';\nimport { VisibilityStatePlanner } from './visibility/visibility-state.planner';\nimport { VisibleDisplayResolver } from './visibility/visible-display.resolver';\nimport { ExtendedFamilyPlanner } from './extended/extended-family.planner';\nimport { ExtendedDisplayCompositionPlanner } from './extended/extended-display-composition.planner';\nimport { ExtendedResponsivePlanner } from './extended/extended-responsive.planner';\nimport { parseResponsiveClassValue } from './extended/responsive-class-value.parser';\nimport type { ResponsiveClassValue } from './extended/responsive-class.model';\nimport { parseResponsiveStyleValue } from './extended/responsive-style-value.parser';\nimport type { ResponsiveStyleValue } from './extended/responsive-style.model';\nimport { TailwindCandidateClassifier } from './extended/tailwind-candidate-classifier';\nimport { GeneratedPropertyCompositionPlanner } from './extended/generated-property-composition.planner';\n\nconst flexItemDirectives = new Set<LocatedFlexLayoutInput['directive']>(['fxFlex', 'fxGrow', 'fxShrink']);\nconst visibilityDirectives = new Set<LocatedFlexLayoutInput['directive']>(['fxShow', 'fxHide']);\nconst responsiveDisplayAuthorityDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'class',\n 'ngClass',\n 'style',\n 'ngStyle',\n]);\nconst responsiveStyleAuthorityDirectives = new Set<LocatedFlexLayoutInput['directive']>(['style', 'ngStyle']);\nconst extendedClassDirectives = new Set<LocatedFlexLayoutInput['directive']>(['class', 'ngClass']);\nconst extendedStyleDirectives = new Set<LocatedFlexLayoutInput['directive']>(['style', 'ngStyle']);\nconst extendedDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n ...extendedClassDirectives,\n ...extendedStyleDirectives,\n]);\n\nconst supportedDirectives = new Set<LocatedFlexLayoutInput['directive']>([\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexAlign',\n 'fxFlexFill',\n 'fxFill',\n 'fxFlexOffset',\n 'fxFlexOrder',\n 'fxLayout',\n 'fxLayoutAlign',\n 'fxLayoutGap',\n]);\n\nfunction toPlannedConversion(input: LocatedFlexLayoutInput, result: TailwindStrategyResult): PlannedConversion {\n if (result.status === 'converted') return { status: 'converted', input, classNames: result.classNames };\n if (result.status === 'invalid') {\n return {\n status: 'invalid',\n input,\n code: result.code,\n reason: `${input.value} is not a supported ${input.directive} value.`,\n suggestion: 'Correct the value or migrate this directive manually.',\n };\n }\n return { ...result, input };\n}\n\nfunction toResponsivePlannedConversion(\n input: LocatedFlexLayoutInput,\n result: TailwindStrategyResult,\n catalog: BreakpointCatalog,\n emitter: ResponsiveVariantEmitter,\n): PlannedConversion {\n return toPlannedConversion(\n input,\n result.status === 'converted' ? planResponsiveClasses(input, result.classNames, catalog, emitter) : result,\n );\n}\n\nfunction staticLayoutContext(attributes: readonly TemplateAttribute[]): string | undefined {\n const layouts = attributes.filter(\n attribute => attribute.name === 'fxLayout' || attribute.name.startsWith('fxLayout.'),\n );\n if (!layouts.length) return 'row';\n if (layouts.length !== 1) return undefined;\n const layout = layouts[0];\n return layout?.name === 'fxLayout' && layout.binding === 'literal' ? layout.value : undefined;\n}\n\nfunction isBoundClassAttribute(attribute: TemplateAttribute): boolean {\n if (attribute.binding !== 'property') return false;\n return [...templateAttributeKeys(attribute)].some(\n key => key === 'class' || key === 'ngclass' || key.startsWith('class.') || key.startsWith('ngclass.'),\n );\n}\n\nfunction contextUnverified(input: LocatedFlexLayoutInput, reason: string): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason,\n suggestion: 'Migrate the complete layout and visibility context together manually.',\n };\n}\n\nfunction compatibleVisibilityClasses(\n plan: Extract<PlannedConversion, { readonly status: 'converted' }>,\n existingClassNames: readonly string[],\n): readonly string[] {\n if (!visibilityDirectives.has(plan.input.directive)) return existingClassNames;\n\n const generatedDisplays = plan.classNames.map(describeTailwindDisplay).filter(descriptor => descriptor !== undefined);\n const hasBaseHidden = generatedDisplays.some(\n descriptor => descriptor.activation.kind === 'base' && descriptor.utility === 'hidden',\n );\n\n return existingClassNames.filter(className => {\n const existing = describeTailwindDisplay(className);\n if (\n !existing ||\n existing.activation.kind !== 'base' ||\n existing.important ||\n existing.token !== existing.utility ||\n existing.utility === 'hidden'\n ) {\n return true;\n }\n\n const suppliesResponsiveVisibility = hasBaseHidden\n ? generatedDisplays.some(\n generated => generated.activation.kind === 'media' && generated.utility === existing.utility,\n )\n : generatedDisplays.length > 0 && generatedDisplays.every(generated => generated.activation.kind === 'media');\n return !suppliesResponsiveVisibility;\n });\n}\n\nfunction equalClassValues(left: ResponsiveClassValue, right: ResponsiveClassValue): boolean {\n return (\n left.tokens.length === right.tokens.length && left.tokens.every((token, index) => token === right.tokens[index])\n );\n}\n\nfunction equalStyleValues(left: ResponsiveStyleValue, right: ResponsiveStyleValue): boolean {\n return (\n left.declarations.length === right.declarations.length &&\n left.declarations.every(\n (declaration, index) =>\n declaration.property === right.declarations[index]?.property &&\n declaration.value === right.declarations[index]?.value,\n )\n );\n}\n\nexport class TailwindAdapter implements ConversionAdapter {\n readonly name = 'tailwind' as const;\n private readonly breakpointCatalog = new BreakpointCatalog();\n private readonly responsiveEmitter = new ResponsiveVariantEmitter();\n private readonly responsiveFamilyPlanner = new ResponsiveFamilyPlanner(\n this.breakpointCatalog,\n this.responsiveEmitter,\n );\n private readonly visibilityStatePlanner = new VisibilityStatePlanner(this.breakpointCatalog);\n private readonly visibleDisplayResolver = new VisibleDisplayResolver();\n private readonly displayCompositionPlanner = new DisplayCompositionPlanner(this.breakpointCatalog);\n private readonly extendedFamilyPlanner = new ExtendedFamilyPlanner(this.breakpointCatalog);\n private readonly extendedResponsivePlanner = new ExtendedResponsivePlanner();\n private readonly tailwindCandidateClassifier = new TailwindCandidateClassifier();\n private readonly extendedDisplayCompositionPlanner = new ExtendedDisplayCompositionPlanner(\n this.breakpointCatalog,\n this.tailwindCandidateClassifier,\n );\n private readonly generatedPropertyCompositionPlanner = new GeneratedPropertyCompositionPlanner(\n this.breakpointCatalog,\n this.tailwindCandidateClassifier,\n );\n\n resolveClassConflicts(\n plans: readonly PlannedConversion[],\n existingClassNames: readonly string[],\n ): readonly PlannedConversion[] {\n const convertedPlans = plans.filter(\n (plan): plan is Extract<PlannedConversion, { readonly status: 'converted' }> => plan.status === 'converted',\n );\n const sharedConflictingTokens = findTailwindClassConflicts(\n existingClassNames,\n convertedPlans.flatMap(plan => plan.classNames),\n );\n const conflictingFamilies = new Set(\n convertedPlans\n .filter(plan => {\n if (!visibilityDirectives.has(plan.input.directive)) {\n return plan.classNames.some(className => sharedConflictingTokens.has(className));\n }\n const conflictingTokens = findTailwindClassConflicts(\n compatibleVisibilityClasses(plan, existingClassNames),\n plan.classNames,\n );\n return plan.classNames.some(className => conflictingTokens.has(className));\n })\n .map(plan => this.directiveFamily(plan.input.directive)),\n );\n return plans.map(plan =>\n plan.status === 'converted' && conflictingFamilies.has(this.directiveFamily(plan.input.directive))\n ? {\n status: 'review',\n input: plan.input,\n code: 'class-conflict',\n reason: 'An existing Tailwind utility controls a CSS property generated by this conversion.',\n suggestion: 'Remove or reconcile the conflicting utility before migrating this directive.',\n }\n : plan,\n );\n }\n\n closePlanDependencies(\n plans: readonly PlannedConversion[],\n context: ConversionContext,\n plansByInputId: ReadonlyMap<string, PlannedConversion>,\n ): readonly PlannedConversion[] {\n const inputs = plans.map(plan => plan.input);\n const closeResponsiveDependencies = (current: readonly PlannedConversion[]): readonly PlannedConversion[] => {\n const currentPlans = new Map(current.map(plan => [plan.input.id, plan]));\n return this.responsiveFamilyPlanner.closeDependencies(\n inputs,\n { ...context, inputs },\n (input, itemContext) =>\n currentPlans.get(input.id) ?? plansByInputId.get(input.id) ?? this.planSemantic(input, itemContext),\n );\n };\n\n let closed = closeResponsiveDependencies(plans);\n closed = this.closeDisplayDependencies(closed);\n closed = closeResponsiveDependencies(closed);\n return this.closeDisplayDependencies(closed);\n }\n\n private directiveFamily(directive: LocatedFlexLayoutInput['directive']): string {\n if (flexItemDirectives.has(directive)) return 'flex-item';\n if (directive === 'fxFlexFill' || directive === 'fxFill') return 'flex-fill';\n if (visibilityDirectives.has(directive)) return 'visibility';\n if (extendedClassDirectives.has(directive)) return 'extended-class';\n if (extendedStyleDirectives.has(directive)) return 'extended-style';\n return directive;\n }\n\n planElement(inputs: readonly LocatedFlexLayoutInput[], context: ConversionContext): readonly PlannedConversion[] {\n const visibilityInputs = inputs.filter(input => visibilityDirectives.has(input.directive));\n const strategyInputs = inputs.filter(input => !visibilityDirectives.has(input.directive));\n const plannedStrategies = this.responsiveFamilyPlanner.plan(\n strategyInputs,\n { ...context, inputs },\n (input, itemContext) => this.planSemantic(input, itemContext),\n (family, familyInputs, itemContext) => this.planExtendedFamily(family, familyInputs, itemContext),\n );\n const initialStrategyPlans = this.generatedPropertyCompositionPlanner.compose(plannedStrategies);\n if (!visibilityInputs.length) {\n return this.extendedDisplayCompositionPlanner.composeWithLayout(initialStrategyPlans);\n }\n\n const initialVisibilityPlan = this.visibilityStatePlanner.plan(visibilityInputs);\n const extendedComposition = this.extendedDisplayCompositionPlanner.compose(\n initialStrategyPlans,\n initialVisibilityPlan,\n );\n const strategyPlans = extendedComposition.strategyPlans;\n const visibilityPlan = extendedComposition.visibilityPlan;\n const layoutPlans = strategyPlans.filter(plan => plan.input.directive === 'fxLayout');\n const plansByStrategyInputId = new Map(strategyPlans.map(plan => [plan.input.id, plan]));\n const responsiveStyleInputs = strategyInputs.filter(\n input =>\n responsiveStyleAuthorityDirectives.has(input.directive) &&\n plansByStrategyInputId.get(input.id)?.status !== 'converted' &&\n this.extendedDisplayCompositionPlanner.inputMayControlDisplay(input),\n );\n const baseDisplayResolution =\n visibilityPlan.status === 'converted'\n ? this.visibleDisplayResolver.resolve({\n states: visibilityPlan.states,\n layoutPlans,\n existingClassNames: context.existingClassNames ?? [],\n attributes: (context.attributeEvidence ?? context.element.attributes).filter(\n attribute => !isBoundClassAttribute(attribute),\n ),\n responsiveStyleInputs,\n })\n : { status: 'resolved' as const, utility: undefined };\n const displayResolution = this.extendedDisplayCompositionPlanner.resolveVisibleDisplay(\n baseDisplayResolution,\n strategyPlans,\n visibilityPlan,\n );\n const composed = this.displayCompositionPlanner.compose({\n visibilityPlan,\n displayResolution,\n layoutPlans,\n });\n const plansById = new Map(\n [...strategyPlans.filter(plan => plan.input.directive !== 'fxLayout'), ...composed.plans].map(plan => [\n plan.input.id,\n plan,\n ]),\n );\n return inputs.map(input => plansById.get(input.id) ?? this.planSemantic(input, context));\n }\n\n plan(input: LocatedFlexLayoutInput, context: ConversionContext): PlannedConversion {\n if (visibilityDirectives.has(input.directive)) {\n const family = this.visibilityStatePlanner.plan([input]);\n if (family.status === 'unresolved')\n return family.plans[0] ?? contextUnverified(input, 'Visibility is unresolved.');\n return contextUnverified(input, 'Visibility requires complete element-family context before conversion.');\n }\n\n if (extendedDirectives.has(input.directive)) {\n const family = extendedClassDirectives.has(input.directive) ? 'extended-class' : 'extended-style';\n const plans = this.planExtendedFamily(family, [input], { ...context, inputs: [input] });\n const intrinsic = plans[0];\n if (intrinsic?.status !== 'converted') {\n return intrinsic ?? contextUnverified(input, 'The responsive extended family is unresolved.');\n }\n return contextUnverified(\n input,\n 'Responsive class and style conversion requires complete element-family context.',\n );\n }\n\n const semantic = this.planSemantic(input, context);\n if (semantic.status !== 'converted') return semantic;\n return toResponsivePlannedConversion(\n input,\n { status: 'converted', classNames: semantic.classNames },\n this.breakpointCatalog,\n this.responsiveEmitter,\n );\n }\n\n private planSemantic(input: LocatedFlexLayoutInput, context: ConversionContext): PlannedConversion {\n if (input.binding === 'property') {\n return toPlannedConversion(\n input,\n planResponsiveClasses(input, [], this.breakpointCatalog, this.responsiveEmitter),\n );\n }\n\n if (!supportedDirectives.has(input.directive)) {\n return {\n status: 'unsupported',\n input,\n code: 'target-unsupported',\n reason: `The Tailwind target does not support ${input.directive}.`,\n suggestion: 'Keep the directive and migrate it manually.',\n };\n }\n\n if (input.directive === 'fxLayoutGap') {\n const layoutValue = context.activeLayout ?? staticLayoutContext(context.element.attributes);\n const gap = planLayoutGap(input.value, layoutValue);\n return toPlannedConversion(input, gap);\n }\n\n if (flexItemDirectives.has(input.directive)) {\n const flexInputs = (context.inputs ?? [input]).filter(item => flexItemDirectives.has(item.directive));\n const sameBreakpoint = (item: LocatedFlexLayoutInput) => item.breakpoint === input.breakpoint;\n const atBreakpoint = (directive: LocatedFlexLayoutInput['directive']) =>\n flexInputs.filter(item => item.directive === directive && sameBreakpoint(item));\n const atBase = (directive: LocatedFlexLayoutInput['directive']) =>\n flexInputs.filter(item => item.directive === directive && item.breakpoint === undefined);\n const exactFlex = atBreakpoint('fxFlex');\n const baseFlex = atBase('fxFlex');\n const basis = exactFlex[0] ?? (input.breakpoint ? baseFlex[0] : undefined);\n const exactGrow = atBreakpoint('fxGrow');\n const exactShrink = atBreakpoint('fxShrink');\n const grow = exactGrow[0] ?? (input.breakpoint ? atBase('fxGrow')[0] : undefined);\n const shrink = exactShrink[0] ?? (input.breakpoint ? atBase('fxShrink')[0] : undefined);\n const duplicateMember = [exactFlex, exactGrow, exactShrink].some(items => items.length > 1);\n if (!basis || duplicateMember) {\n return {\n status: 'invalid',\n input,\n code: 'invalid-value',\n reason: basis\n ? 'Multiple flex sizing inputs define the same responsive state.'\n : `${input.directive} requires an active fxFlex value.`,\n suggestion: 'Keep one flex sizing value per breakpoint or migrate this group manually.',\n };\n }\n const flex = planFlexItem({\n basis: basis.value,\n grow: grow?.value,\n shrink: shrink?.value,\n layout: context.activeParentLayout ?? staticLayoutContext(context.parent?.attributes ?? []),\n });\n if (flex.status === 'converted') {\n return toPlannedConversion(input, flex);\n }\n if (flex.status === 'invalid') {\n return {\n status: 'invalid',\n input,\n code: flex.code,\n reason: `${input.value} is not a supported fxFlex value.`,\n suggestion: 'Correct the value or migrate this directive manually.',\n };\n }\n return { ...flex, input };\n }\n\n const independent = planIndependentDirective(input);\n if (independent) return toPlannedConversion(input, independent);\n if (input.directive === 'fxFlexOffset') {\n const layout = context.activeParentLayout ?? staticLayoutContext(context.parent?.attributes ?? []);\n return toPlannedConversion(input, planFlexOffset(input.value, layout));\n }\n if (input.directive === 'fxLayoutAlign') {\n const layout = context.activeLayout ?? staticLayoutContext(context.element.attributes);\n if (layout === undefined) {\n return {\n status: 'review',\n input,\n code: 'context-unverified',\n reason: 'Alignment sizing and direction depend on a dynamic or responsive layout.',\n suggestion: 'Make the layout static or migrate layout and alignment together manually.',\n };\n }\n const alignment = planLayoutAlign(input.value, layout);\n if (alignment.ok) {\n return toPlannedConversion(input, { status: 'converted', classNames: alignment.value.classNames });\n }\n return {\n status: 'invalid',\n input,\n code: 'invalid-value',\n reason: `${input.value} is not a supported fxLayoutAlign value.`,\n suggestion: 'Correct the value or migrate this directive manually.',\n };\n }\n\n if (input.directive === 'fxLayout') {\n const layout = planLayout(input.value);\n if (layout.ok) {\n return toPlannedConversion(input, { status: 'converted', classNames: layout.value.classNames });\n }\n }\n return {\n status: 'invalid',\n input,\n code: 'invalid-value',\n reason: `${input.value} is not a supported ${input.directive} value.`,\n suggestion: 'Correct the value or migrate this directive manually.',\n };\n }\n\n private planExtendedFamily(\n family: 'extended-class' | 'extended-style',\n inputs: readonly LocatedFlexLayoutInput[],\n context: ConversionContext,\n ): readonly PlannedConversion[] {\n if (family === 'extended-class') {\n const familyPlan = this.extendedFamilyPlanner.plan<ResponsiveClassValue>({\n kind: 'class',\n inputs,\n valueParser: input => parseResponsiveClassValue(input, this.tailwindCandidateClassifier),\n equals: equalClassValues,\n });\n return this.extendedResponsivePlanner.plan({\n kind: 'class',\n familyPlan,\n existingClassNames: [],\n attributes: context.attributeEvidence ?? context.element.attributes,\n }).plans;\n }\n\n const familyPlan = this.extendedFamilyPlanner.plan<ResponsiveStyleValue>({\n kind: 'style',\n inputs,\n valueParser: parseResponsiveStyleValue,\n equals: equalStyleValues,\n });\n return this.extendedResponsivePlanner.plan({\n kind: 'style',\n familyPlan,\n existingClassNames: [],\n attributes: context.attributeEvidence ?? context.element.attributes,\n }).plans;\n }\n\n private closeDisplayDependencies(plans: readonly PlannedConversion[]): readonly PlannedConversion[] {\n const layoutPlans = plans.filter(plan => plan.input.directive === 'fxLayout');\n const visibilityPlans = plans.filter(plan => visibilityDirectives.has(plan.input.directive));\n const authorityPlans = plans.filter(\n plan =>\n responsiveDisplayAuthorityDirectives.has(plan.input.directive) &&\n this.extendedDisplayCompositionPlanner.inputMayControlDisplay(plan.input),\n );\n const visibilityIsNoOp =\n visibilityPlans.length > 0 &&\n visibilityPlans.every(plan => plan.status === 'converted' && plan.classNames.length === 0);\n if ((!layoutPlans.length && !authorityPlans.length) || !visibilityPlans.length || visibilityIsNoOp) return plans;\n\n const displayContextIsUnresolved = [...layoutPlans, ...visibilityPlans, ...authorityPlans].some(\n plan => plan.status !== 'converted',\n );\n if (!displayContextIsUnresolved) return plans;\n return plans.map(plan =>\n plan.status === 'converted' &&\n (plan.input.directive === 'fxLayout' ||\n visibilityDirectives.has(plan.input.directive) ||\n (responsiveDisplayAuthorityDirectives.has(plan.input.directive) &&\n this.extendedDisplayCompositionPlanner.inputMayControlDisplay(plan.input)))\n ? contextUnverified(\n plan.input,\n 'The element display context contains an unresolved layout or visibility family.',\n )\n : plan,\n );\n }\n}\n","import { logger } from '../logger';\nimport type { ConversionAdapter } from './conversion-adapter';\nimport { TailwindAdapter } from './tailwind/tailwind.adapter';\n\nexport class AdapterFactory {\n static create(target: string): ConversionAdapter {\n logger.info(`Creating adapter [${target}]`);\n if (target === 'tailwind') return new TailwindAdapter();\n throw new Error(`Adapter [${target}] not found`);\n }\n}\n","import { stat } from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { ConversionAdapter } from '../adapter/conversion-adapter';\nimport { loadGitIgnore } from '../lib/gitignore.helper';\nimport { MigrationReportBuilder } from '../report/migration-report.builder';\nimport type { MigrationReport } from '../report/migration-report';\nimport type { FileMigrationResult } from './file-migration-result';\nimport { FileMigrator } from './file.migrator';\nimport { FolderMigrator } from './folder.migrator';\n\nexport interface MigrationOptions {\n readonly dryRun: boolean;\n}\n\nexport class Migrator {\n constructor(\n private readonly adapter: ConversionAdapter,\n private readonly inputPath: string,\n private readonly outputPath: string,\n private readonly now: () => number = Date.now,\n ) {}\n\n public async migrate(options: MigrationOptions = { dryRun: false }): Promise<MigrationReport> {\n if (this.adapter.name !== 'tailwind') {\n throw new Error(`Unsupported migration target: ${this.adapter.name}`);\n }\n\n const startedAt = this.now();\n const inputStat = await stat(this.inputPath);\n\n await loadGitIgnore(this.inputPath);\n\n let files: readonly FileMigrationResult[];\n if (inputStat.isFile()) {\n if (path.extname(this.inputPath).toLowerCase() !== '.html') {\n throw new Error(`Unsupported file type: ${this.inputPath}`);\n }\n if (path.extname(this.outputPath).toLowerCase() !== '.html') {\n throw new Error('Single-file output path must have a .html extension.');\n }\n files = [\n await new FileMigrator(this.adapter, this.inputPath, this.outputPath).migrate({ write: !options.dryRun }),\n ];\n } else if (inputStat.isDirectory()) {\n files = await new FolderMigrator(this.adapter, this.inputPath, this.outputPath).migrate({\n write: !options.dryRun,\n });\n } else {\n throw new Error(`Unsupported input type: ${this.inputPath}`);\n }\n\n return new MigrationReportBuilder().build(\n this.inputPath,\n this.outputPath,\n this.adapter.name,\n options.dryRun,\n this.now() - startedAt,\n files,\n );\n }\n}\n","import fs from 'fs-extra';\nimport ignore from 'ignore';\nimport { Ignore } from 'ignore';\nimport path from 'path';\nimport { logger } from '../logger';\n\nlet gitignoreCache: Ignore | undefined;\n\n/**\n * Loads the .gitignore file from the input folder and returns an instance of the ignore library.\n * @param inputFolder path to the input folder\n * @returns an instance of the ignore library\n */\nexport async function loadGitIgnore(inputFolder: string): Promise<void> {\n if (gitignoreCache) {\n return;\n }\n const gitignorePath = path.join(inputFolder, '.gitignore');\n\n gitignoreCache = ignore();\n\n if (await fs.pathExists(gitignorePath)) {\n const gitignoreContent = await fs.readFile(gitignorePath, 'utf-8');\n gitignoreCache.add(gitignoreContent);\n logger.debug(`Loaded .gitignore file from ${gitignorePath}`);\n }\n}\n\n/**\n * Checks if the given path should be ignored.\n * @param ig an instance of the ignore library\n * @param baseFolder the base folder\n * @param targetPath the path to check\n * @returns true if the path should be ignored, false otherwise\n */\nexport function shouldIgnore(baseFolder: string, targetPath: string): boolean {\n if (!gitignoreCache) {\n return false;\n }\n const relativePath = path.relative(baseFolder, targetPath);\n return gitignoreCache.ignores(relativePath);\n}\n","import path from 'node:path';\nimport type { ConversionResult } from '../analyzer/conversion-result';\nimport type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport type { FileMigrationResult } from '../migrator/file-migration-result';\nimport { compareCodeUnits } from '../util/compare-code-units';\nimport type { FileReport, MigrationReport, MigrationSummary, ReportResult } from './migration-report';\n\ntype PathApi = typeof path.posix;\n\nexport class MigrationReportBuilder {\n public build(\n inputRoot: string,\n outputRoot: string,\n target: 'tailwind',\n dryRun: boolean,\n durationMs: number,\n files: readonly FileMigrationResult[],\n ): MigrationReport {\n const pathApi = this.pathApi(inputRoot, ...files.map(file => file.inputPath));\n const singleFile = files.length === 1 && this.samePath(pathApi, inputRoot, files[0]?.inputPath ?? '');\n const fileReports = files\n .map(file => this.fileReport(pathApi, inputRoot, singleFile, file))\n .sort((left, right) => compareCodeUnits(left.path, right.path));\n const reportPaths = this.reportPaths(pathApi, inputRoot, outputRoot, singleFile);\n\n return {\n schemaVersion: 1,\n target,\n dryRun,\n input: reportPaths.input,\n output: reportPaths.output,\n durationMs: Math.trunc(durationMs),\n summary: this.summary(fileReports),\n files: fileReports,\n };\n }\n\n private pathApi(...values: readonly string[]): PathApi {\n if (values.some(value => /^[A-Za-z]:[\\\\/]/.test(value) || value.includes('\\\\'))) return path.win32;\n if (values.some(value => value.includes('/'))) return path.posix;\n return path;\n }\n\n private samePath(pathApi: PathApi, left: string, right: string): boolean {\n return pathApi.normalize(left) === pathApi.normalize(right);\n }\n\n private fileReport(pathApi: PathApi, inputRoot: string, singleFile: boolean, file: FileMigrationResult): FileReport {\n const relativePath = singleFile ? pathApi.basename(file.inputPath) : pathApi.relative(inputRoot, file.inputPath);\n return {\n path: this.forwardSlashes(pathApi, relativePath),\n changed: file.changed,\n results: file.results.map(result => this.result(result)),\n };\n }\n\n private result(result: ConversionResult): ReportResult {\n if (result.status === 'parse-error') {\n return {\n status: result.status,\n offset: result.source.start,\n code: result.code,\n reason: result.reason,\n };\n }\n\n const input = result.input as LocatedFlexLayoutInput;\n if (result.status === 'converted') {\n return {\n status: result.status,\n directive: input.directive,\n sourceName: input.sourceName,\n offset: input.source.start,\n };\n }\n\n return {\n status: result.status,\n directive: input.directive,\n sourceName: input.sourceName,\n offset: input.source.start,\n code: result.code,\n reason: result.reason,\n suggestion: result.suggestion,\n };\n }\n\n private reportPaths(\n pathApi: PathApi,\n inputRoot: string,\n outputRoot: string,\n singleFile: boolean,\n ): { readonly input: string; readonly output: string } {\n const base = singleFile ? pathApi.dirname(inputRoot) : inputRoot;\n const input = singleFile ? pathApi.basename(inputRoot) : '.';\n const relativeOutput = pathApi.relative(base, outputRoot);\n const output = pathApi.isAbsolute(relativeOutput) ? pathApi.basename(outputRoot) : relativeOutput || '.';\n\n return {\n input: this.forwardSlashes(pathApi, input),\n output: this.forwardSlashes(pathApi, output),\n };\n }\n\n private forwardSlashes(pathApi: PathApi, value: string): string {\n return value.split(pathApi.sep).join('/');\n }\n\n private summary(files: readonly FileReport[]): MigrationSummary {\n const resultCounts = {\n converted: 0,\n review: 0,\n unsupported: 0,\n invalid: 0,\n parseErrors: 0,\n };\n\n for (const result of files.flatMap(file => file.results)) {\n if (result.status === 'parse-error') resultCounts.parseErrors += 1;\n else resultCounts[result.status] += 1;\n }\n\n return {\n filesScanned: files.length,\n filesChanged: files.filter(file => file.changed).length,\n ...resultCounts,\n };\n }\n}\n","export function compareCodeUnits(left: string, right: string): number {\n if (left < right) return -1;\n if (left > right) return 1;\n return 0;\n}\n","import { readFile } from 'node:fs/promises';\nimport type { ConversionAdapter } from '../adapter/conversion-adapter';\nimport type { ConversionResult } from '../analyzer/conversion-result';\nimport { TemplateAnalyzer } from '../analyzer/template.analyzer';\nimport { SourceEditor } from '../edit/source-editor';\nimport { AtomicFileWriter } from '../lib/atomic-file.writer';\nimport { ConversionPlanner } from '../planner/conversion-planner';\nimport { AngularTemplateParser } from '../template/angular-template.parser';\nimport { BaseMigrator } from './base.migrator';\nimport type { FileMigrationOptions, FileMigrationResult } from './file-migration-result';\n\nexport class FileMigrator extends BaseMigrator<FileMigrationResult> {\n constructor(\n private readonly adapter: ConversionAdapter,\n private readonly input: string,\n private readonly output: string,\n private readonly writer: AtomicFileWriter = new AtomicFileWriter(),\n ) {\n super();\n }\n\n public async migrate(options: FileMigrationOptions = { write: true }): Promise<FileMigrationResult> {\n const source = await readFile(this.input, 'utf8');\n const parsed = new AngularTemplateParser().parse(source, this.input);\n if (parsed.status === 'parse-error') {\n const results: readonly ConversionResult[] = parsed.diagnostics.map(diagnostic => ({\n status: 'parse-error',\n fileName: this.input,\n code: 'template-parse-error',\n reason: diagnostic.message,\n source: diagnostic.source,\n }));\n return this.result(false, results);\n }\n\n const inputs = new TemplateAnalyzer().analyze(this.input, parsed.elements);\n if (!inputs.length) {\n return this.result(false, []);\n }\n\n const plan = new ConversionPlanner().plan(source, parsed.elements, inputs, this.adapter);\n const edited = new SourceEditor().apply(source, plan.edits);\n if (edited.status === 'invalid') {\n throw new Error(\n `Invalid edit plan for ${this.input}: ${edited.diagnostics.map(item => item.message).join('; ')}`,\n );\n }\n\n const changed = edited.output !== source;\n if (changed && options.write) {\n await this.writer.write(this.output, edited.output);\n }\n\n return this.result(changed, plan.results);\n }\n\n private result(changed: boolean, results: readonly ConversionResult[]): FileMigrationResult {\n return {\n inputPath: this.input,\n outputPath: this.output,\n changed,\n results: [...results],\n };\n }\n}\n","import { FLEX_LAYOUT_DIRECTIVES, FlexLayoutDirective, isFlexLayoutDirective } from './flex-layout.catalog';\nimport type { SourceRange } from '../template/template.model';\n\nexport type BindingKind = 'literal' | 'property';\n\nexport interface FlexLayoutInput {\n sourceName: string;\n directive: FlexLayoutDirective;\n value: string;\n binding: BindingKind;\n breakpoint: string | undefined;\n}\n\nexport interface LocatedFlexLayoutInput extends FlexLayoutInput {\n readonly id: string;\n readonly fileName: string;\n readonly elementId: string;\n readonly source: SourceRange;\n readonly nameSource: SourceRange;\n readonly valueSource?: SourceRange;\n}\n\nconst responsiveOnlyDirectives = new Set<FlexLayoutDirective>(['class', 'ngClass', 'style', 'ngStyle']);\nconst directivesByLength = [...FLEX_LAYOUT_DIRECTIVES].sort((left, right) => right.length - left.length);\n\nexport function analyzeFlexLayoutAttribute(sourceName: string, value: string): FlexLayoutInput | undefined {\n const startsWithBracket = sourceName.startsWith('[');\n const endsWithBracket = sourceName.endsWith(']');\n\n if (startsWithBracket !== endsWithBracket) return undefined;\n\n const binding: BindingKind = startsWithBracket ? 'property' : 'literal';\n const normalizedName = startsWithBracket ? sourceName.slice(1, -1) : sourceName;\n const directive = directivesByLength.find(\n candidate => normalizedName === candidate || normalizedName.startsWith(`${candidate}.`),\n );\n\n if (!directive || !isFlexLayoutDirective(directive)) return undefined;\n\n const breakpoint = normalizedName === directive ? undefined : normalizedName.slice(directive.length + 1);\n if (responsiveOnlyDirectives.has(directive) && !breakpoint) return undefined;\n\n return {\n sourceName,\n value,\n directive,\n breakpoint,\n binding,\n };\n}\n","import type { TemplateElement } from '../template/template.model';\nimport { analyzeFlexLayoutAttribute, LocatedFlexLayoutInput } from './flex-layout-attribute.analyzer';\nimport { isKnownBreakpoint } from './flex-layout.catalog';\n\nfunction sourceNameFor(attribute: TemplateElement['attributes'][number]): string | undefined {\n if (attribute.binding === 'literal') return attribute.name;\n if (attribute.bindingTarget === 'property' || attribute.bindingTarget === 'two-way') return `[${attribute.name}]`;\n if (\n (attribute.bindingTarget === 'class' || attribute.bindingTarget === 'style') &&\n isKnownBreakpoint(attribute.name)\n ) {\n return `[${attribute.bindingTarget}.${attribute.name}]`;\n }\n return undefined;\n}\n\nexport class TemplateAnalyzer {\n analyze(fileName: string, elements: readonly TemplateElement[]): readonly LocatedFlexLayoutInput[] {\n const inputs: LocatedFlexLayoutInput[] = [];\n\n for (const element of elements) {\n for (const attribute of element.attributes) {\n const sourceName = sourceNameFor(attribute);\n if (!sourceName) continue;\n const input = analyzeFlexLayoutAttribute(sourceName, attribute.value);\n if (!input) continue;\n\n inputs.push({\n ...input,\n id: `${fileName}:${attribute.source.start}`,\n fileName,\n elementId: element.id,\n source: attribute.source,\n nameSource: attribute.nameSource,\n ...(attribute.valueSource ? { valueSource: attribute.valueSource } : {}),\n });\n }\n }\n\n return inputs.sort((left, right) => left.source.start - right.source.start);\n }\n}\n","import type { EditDiagnostic, EditResult, SourceEdit } from './source-edit';\nimport { compareCodeUnits } from '../util/compare-code-units';\n\nexport class SourceEditor {\n apply(source: string, edits: readonly SourceEdit[]): EditResult {\n const diagnostics = this.validate(source, edits);\n if (diagnostics.length) return { status: 'invalid', diagnostics };\n\n const orderedEdits = [...edits].sort(\n (left, right) => right.range.start - left.range.start || compareCodeUnits(right.inputId, left.inputId),\n );\n\n let output = source;\n for (const edit of orderedEdits) {\n output = output.slice(0, edit.range.start) + edit.text + output.slice(edit.range.end);\n }\n\n return { status: 'applied', output };\n }\n\n private validate(source: string, edits: readonly SourceEdit[]): EditDiagnostic[] {\n const invalidRanges = edits\n .filter(\n edit =>\n !Number.isInteger(edit.range.start) ||\n !Number.isInteger(edit.range.end) ||\n edit.range.start < 0 ||\n edit.range.end < edit.range.start ||\n edit.range.end > source.length,\n )\n .map(edit => ({\n code: 'invalid-range' as const,\n message: `Edit ${edit.inputId} has a range outside the source.`,\n inputIds: [edit.inputId],\n }));\n\n if (invalidRanges.length) return invalidRanges;\n\n const byStart = [...edits].sort(\n (left, right) => left.range.start - right.range.start || left.range.end - right.range.end,\n );\n\n for (let index = 0; index < byStart.length; index++) {\n const left = byStart[index];\n if (!left) continue;\n\n for (let nextIndex = index + 1; nextIndex < byStart.length; nextIndex++) {\n const right = byStart[nextIndex];\n if (!right || right.range.start > left.range.end) break;\n\n if (left.range.start < right.range.end && right.range.start < left.range.end) {\n const inputIds = [left.inputId, right.inputId].sort();\n return [\n {\n code: 'overlapping-edits',\n message: `Edits ${inputIds[0]} and ${inputIds[1]} overlap.`,\n inputIds,\n },\n ];\n }\n }\n }\n\n return [];\n }\n}\n","import { randomUUID } from 'node:crypto';\nimport { mkdir, open, rename, unlink } from 'node:fs/promises';\nimport { basename, dirname, join } from 'node:path';\n\nexport interface AtomicFileOperations {\n readonly mkdir: typeof mkdir;\n readonly open: typeof open;\n readonly rename: typeof rename;\n readonly unlink: typeof unlink;\n}\n\nconst defaultOperations: AtomicFileOperations = { mkdir, open, rename, unlink };\n\nexport class AtomicFileWriter {\n constructor(private readonly operations: AtomicFileOperations = defaultOperations) {}\n\n async write(targetPath: string, contents: string): Promise<void> {\n const directory = dirname(targetPath);\n const temporaryPath = join(directory, `.${basename(targetPath)}.${randomUUID()}.tmp`);\n\n await this.operations.mkdir(directory, { recursive: true });\n let temporaryFile: Awaited<ReturnType<typeof open>> | undefined;\n try {\n temporaryFile = await this.operations.open(temporaryPath, 'wx');\n await temporaryFile.writeFile(contents, 'utf8');\n await temporaryFile.sync();\n await temporaryFile.close();\n temporaryFile = undefined;\n await this.operations.rename(temporaryPath, targetPath);\n } catch (error) {\n await temporaryFile?.close().catch(() => undefined);\n await this.operations.unlink(temporaryPath).catch(() => undefined);\n throw error;\n }\n }\n}\n","import type { ConversionAdapter, ConversionContext, PlannedConversion } from '../adapter/conversion-adapter';\nimport type { ConversionResult } from '../analyzer/conversion-result';\nimport type { LocatedFlexLayoutInput } from '../analyzer/flex-layout-attribute.analyzer';\nimport type { SourceEdit } from '../edit/source-edit';\nimport { templateAttributeKeys } from '../template/template-attribute';\nimport type { SourceRange, TemplateElement } from '../template/template.model';\nimport { appendLiteralClassNames } from '../edit/html-attribute-value';\n\nexport interface FilePlan {\n readonly edits: readonly SourceEdit[];\n readonly results: readonly ConversionResult[];\n}\n\ninterface ElementConversions {\n readonly element: TemplateElement;\n readonly inputs: LocatedFlexLayoutInput[];\n readonly classPlans: Array<{\n readonly input: LocatedFlexLayoutInput;\n readonly classNames: readonly string[];\n }>;\n}\n\nconst directiveOrder = new Map(\n [\n 'fxLayout',\n 'fxLayoutGap',\n 'fxLayoutAlign',\n 'fxFlex',\n 'fxGrow',\n 'fxShrink',\n 'fxFlexAlign',\n 'fxFlexFill',\n 'fxFill',\n 'fxFlexOffset',\n 'fxFlexOrder',\n 'ngClass',\n 'class',\n 'ngStyle',\n 'style',\n 'fxShow',\n 'fxHide',\n ].map((directive, index) => [directive, index]),\n);\n\nfunction boundClassBlocked(input: LocatedFlexLayoutInput): PlannedConversion {\n return {\n status: 'review',\n input,\n code: 'bound-class',\n reason: 'Generated classes cannot be merged safely with a bound class value.',\n suggestion: 'Merge the generated classes into the binding manually.',\n };\n}\n\nfunction isBoundClassAttribute(attribute: TemplateElement['attributes'][number]): boolean {\n if (attribute.binding !== 'property') return false;\n return [...templateAttributeKeys(attribute)].some(\n key => key === 'class' || key === 'ngclass' || key.startsWith('class.') || key.startsWith('ngclass.'),\n );\n}\n\nfunction literalClassAttribute(element: TemplateElement) {\n return element.attributes.find(\n attribute => attribute.binding === 'literal' && templateAttributeKeys(attribute).has('class'),\n );\n}\n\nfunction removalRange(source: string, input: LocatedFlexLayoutInput): SourceRange {\n const start =\n input.source.start > 0 && /[\\t ]/.test(source[input.source.start - 1] ?? '')\n ? input.source.start - 1\n : input.source.start;\n return { start, end: input.source.end };\n}\n\nexport class ConversionPlanner {\n plan(\n source: string,\n elements: readonly TemplateElement[],\n inputs: readonly LocatedFlexLayoutInput[],\n adapter: ConversionAdapter,\n ): FilePlan {\n const elementById = new Map(elements.map(element => [element.id, element]));\n const inputsByElementId = new Map<string, LocatedFlexLayoutInput[]>();\n for (const input of inputs) {\n const elementInputs = inputsByElementId.get(input.elementId) ?? [];\n elementInputs.push(input);\n inputsByElementId.set(input.elementId, elementInputs);\n }\n const conversionsByElement = new Map<string, ElementConversions>();\n const results: ConversionResult[] = [];\n const plansByInputId = new Map<string, PlannedConversion>();\n const plansByElementId = new Map<string, readonly PlannedConversion[]>();\n const contextsByElementId = new Map<string, ConversionContext>();\n\n for (const element of elements) {\n const elementInputs = inputsByElementId.get(element.id) ?? [];\n if (!elementInputs.length) continue;\n const parent = element.parentId ? elementById.get(element.parentId) : undefined;\n const literalClass = literalClassAttribute(element);\n const existingClassNames = literalClass?.value.split(/\\s+/).filter(Boolean) ?? [];\n const context: ConversionContext = {\n element,\n inputs: elementInputs,\n existingClassNames,\n attributeEvidence: element.attributes,\n ...(parent\n ? { parent, parentInputs: inputsByElementId.get(parent.id) ?? [] }\n : { parentInputs: [] as readonly LocatedFlexLayoutInput[] }),\n };\n let plans =\n adapter.planElement?.(elementInputs, context) ?? elementInputs.map(input => adapter.plan(input, context));\n const hasBoundClass = element.attributes.some(isBoundClassAttribute);\n if (hasBoundClass) {\n plans = plans.map(plan =>\n plan.status === 'converted' && plan.classNames.length > 0 ? boundClassBlocked(plan.input) : plan,\n );\n }\n plans = adapter.resolveClassConflicts?.(plans, existingClassNames) ?? plans;\n contextsByElementId.set(element.id, context);\n plansByElementId.set(element.id, plans);\n for (const planned of plans) plansByInputId.set(planned.input.id, planned);\n }\n\n if (adapter.closePlanDependencies) {\n for (const element of elements) {\n const plans = plansByElementId.get(element.id);\n const context = contextsByElementId.get(element.id);\n if (!plans || !context) continue;\n const closedPlans = adapter.closePlanDependencies(plans, context, plansByInputId);\n for (const planned of closedPlans) plansByInputId.set(planned.input.id, planned);\n }\n }\n\n for (const input of inputs) {\n const element = elementById.get(input.elementId);\n if (!element) continue;\n const planned = plansByInputId.get(input.id);\n if (!planned) continue;\n\n if (planned.status !== 'converted') {\n results.push(planned);\n continue;\n }\n\n const conversion = conversionsByElement.get(element.id) ?? {\n element,\n inputs: [],\n classPlans: [],\n };\n conversion.inputs.push(input);\n conversion.classPlans.push({ input, classNames: planned.classNames });\n conversionsByElement.set(element.id, conversion);\n results.push({ status: 'converted', input });\n }\n\n const edits: SourceEdit[] = [];\n for (const conversion of conversionsByElement.values()) {\n const generatedClassNames = [...conversion.classPlans]\n .sort(\n (left, right) =>\n (directiveOrder.get(left.input.directive) ?? Number.MAX_SAFE_INTEGER) -\n (directiveOrder.get(right.input.directive) ?? Number.MAX_SAFE_INTEGER) ||\n (left.input.breakpoint ?? '').localeCompare(right.input.breakpoint ?? '') ||\n left.input.source.start - right.input.source.start,\n )\n .flatMap(plan => plan.classNames);\n edits.push(\n ...conversion.inputs.map(input => ({\n range: removalRange(source, input),\n text: '',\n inputId: input.id,\n })),\n );\n\n const classEdit = appendLiteralClassNames(\n source,\n conversion.element,\n literalClassAttribute(conversion.element),\n generatedClassNames,\n `${conversion.element.id}:classes`,\n );\n if (classEdit !== undefined) edits.push(classEdit);\n }\n\n return { edits, results };\n }\n}\n","import {\n BindingType,\n parseTemplate,\n TmplAstBoundAttribute,\n TmplAstElement,\n TmplAstRecursiveVisitor,\n TmplAstTextAttribute,\n tmplAstVisitAll,\n} from '@angular/compiler';\nimport { SourceRange, TemplateAttribute, TemplateElement, TemplateParseResult } from './template.model';\n\nfunction range(start: number, end: number): SourceRange {\n return { start, end };\n}\n\nfunction attributeNameRange(source: string, attribute: TmplAstTextAttribute | TmplAstBoundAttribute): SourceRange {\n const start = attribute.sourceSpan.start.offset;\n const rawAttribute = source.slice(start, attribute.sourceSpan.end.offset);\n const equalsIndex = rawAttribute.indexOf('=');\n const rawName = (equalsIndex === -1 ? rawAttribute : rawAttribute.slice(0, equalsIndex)).trimEnd();\n return range(start, start + rawName.length);\n}\n\nfunction normalizeAttribute(\n source: string,\n attribute: TmplAstTextAttribute | TmplAstBoundAttribute,\n binding: TemplateAttribute['binding'],\n): TemplateAttribute {\n const nameSource = attributeNameRange(source, attribute);\n const valueSource = attribute.valueSpan\n ? range(attribute.valueSpan.start.offset, attribute.valueSpan.end.offset)\n : undefined;\n const rawValue = valueSource ? source.slice(valueSource.start, valueSource.end) : '';\n\n return {\n name: attribute.name,\n rawName: source.slice(nameSource.start, nameSource.end),\n rawValue,\n value: attribute instanceof TmplAstTextAttribute ? attribute.value : rawValue,\n binding,\n ...(attribute instanceof TmplAstBoundAttribute ? { bindingTarget: boundTarget(attribute.type) } : {}),\n source: range(attribute.sourceSpan.start.offset, attribute.sourceSpan.end.offset),\n nameSource,\n ...(valueSource ? { valueSource } : {}),\n };\n}\n\nfunction boundTarget(type: BindingType): NonNullable<TemplateAttribute['bindingTarget']> {\n switch (type) {\n case BindingType.Attribute:\n return 'attribute';\n case BindingType.Class:\n return 'class';\n case BindingType.Style:\n return 'style';\n case BindingType.LegacyAnimation:\n case BindingType.Animation:\n return 'animation';\n case BindingType.TwoWay:\n return 'two-way';\n case BindingType.Property:\n default:\n return 'property';\n }\n}\n\nclass ElementCollector extends TmplAstRecursiveVisitor {\n readonly elements: TemplateElement[] = [];\n private readonly parents: string[] = [];\n\n constructor(private readonly source: string) {\n super();\n }\n\n override visitElement(element: TmplAstElement): void {\n const id = String(element.sourceSpan.start.offset);\n const attributes = [\n ...element.attributes.map(attribute => normalizeAttribute(this.source, attribute, 'literal')),\n ...element.inputs.map(attribute => normalizeAttribute(this.source, attribute, 'property')),\n ].sort((left, right) => left.source.start - right.source.start);\n\n this.elements.push({\n id,\n name: element.name,\n startTag: range(element.startSourceSpan.start.offset, element.startSourceSpan.end.offset),\n attributes,\n ...(this.parents.at(-1) ? { parentId: this.parents.at(-1) } : {}),\n });\n\n this.parents.push(id);\n super.visitElement(element);\n this.parents.pop();\n }\n}\n\nexport class AngularTemplateParser {\n parse(source: string, fileName: string): TemplateParseResult {\n const parsed = parseTemplate(source, fileName, {\n enableBlockSyntax: true,\n preserveLineEndings: true,\n preserveWhitespaces: true,\n });\n\n if (parsed.errors?.length) {\n return {\n status: 'parse-error',\n diagnostics: parsed.errors.map(error => ({\n message: error.msg,\n source: range(error.span.start.offset, error.span.end.offset),\n })),\n };\n }\n\n const collector = new ElementCollector(source);\n tmplAstVisitAll(collector, parsed.nodes);\n return { status: 'parsed', elements: collector.elements };\n }\n}\n","import type { ConversionResult } from '../analyzer/conversion-result';\n\nexport interface IMigrator<TResult = readonly ConversionResult[]> {\n migrate(): Promise<TResult>;\n}\n\nabstract class BaseMigrator<TResult = readonly ConversionResult[]> implements IMigrator<TResult> {\n /**\n * Migrates the file. This method should be implemented by the subclass.\n */\n public abstract migrate(): Promise<TResult>;\n}\n\nexport { BaseMigrator };\n","import { readdir, stat } from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { ConversionAdapter } from '../adapter/conversion-adapter';\nimport { shouldIgnore } from '../lib/gitignore.helper';\nimport { logger } from '../logger';\nimport { compareCodeUnits } from '../util/compare-code-units';\nimport { BaseMigrator } from './base.migrator';\nimport type { FileMigrationOptions, FileMigrationResult } from './file-migration-result';\nimport { FileMigrator } from './file.migrator';\n\ninterface FileEntry {\n readonly input: string;\n readonly relativePath: string;\n}\n\nexport class FolderMigrator extends BaseMigrator<readonly FileMigrationResult[]> {\n constructor(\n private readonly adapter: ConversionAdapter,\n private readonly inputFolder: string,\n private readonly outputFolder: string,\n ) {\n super();\n }\n\n public async migrate(options: FileMigrationOptions = { write: true }): Promise<readonly FileMigrationResult[]> {\n const files = await this.collectFiles(this.inputFolder, '');\n files.sort((left, right) => compareCodeUnits(path.normalize(left.input), path.normalize(right.input)));\n\n const results: FileMigrationResult[] = [];\n for (const file of files) {\n const output = path.join(this.outputFolder, file.relativePath);\n const fileMigrator = new FileMigrator(this.adapter, file.input, output);\n results.push(await fileMigrator.migrate(options));\n }\n\n return results;\n }\n\n private async collectFiles(directory: string, relativeDirectory: string): Promise<FileEntry[]> {\n const names = await readdir(directory);\n names.sort(compareCodeUnits);\n const files: FileEntry[] = [];\n\n for (const name of names) {\n const input = path.join(directory, name);\n logger.debug(`Processing ${input}`);\n if (shouldIgnore(this.inputFolder, input)) continue;\n\n const inputStat = await stat(input);\n if (inputStat.isDirectory()) {\n files.push(...(await this.collectFiles(input, path.join(relativeDirectory, name))));\n } else if (inputStat.isFile() && path.extname(name).toLowerCase() === '.html') {\n files.push({ input, relativePath: path.join(relativeDirectory, name) });\n }\n }\n\n return files;\n }\n}\n","import { AtomicFileWriter } from '../lib/atomic-file.writer';\nimport type { MigrationReport } from './migration-report';\n\ntype ReportFileWriter = Pick<AtomicFileWriter, 'write'>;\n\nexport class JsonReportWriter {\n constructor(private readonly writer: ReportFileWriter = new AtomicFileWriter()) {}\n\n public async write(path: string, report: MigrationReport): Promise<void> {\n const contents = `${JSON.stringify(report, null, 2)}\\n`;\n await this.writer.write(path, contents);\n }\n}\n","import type { MigrationReport, ReportResult } from './migration-report';\n\nexport interface TextOutput {\n write(text: string): void;\n readonly isTTY?: boolean;\n}\n\nexport class TerminalPresenter {\n public present(report: MigrationReport, output: TextOutput): void {\n const { summary } = report;\n const outcome = `${summary.filesScanned} files scanned, ${summary.filesChanged} ${\n report.dryRun ? 'would change' : 'changed'\n }`;\n const totals = `Converted ${summary.converted} | Review ${summary.review} | Unsupported ${summary.unsupported} | Invalid ${summary.invalid} | Parse errors ${summary.parseErrors}`;\n const diagnostics = report.files.flatMap(file =>\n file.results\n .filter((result): result is Exclude<ReportResult, { status: 'converted' }> => result.status !== 'converted')\n .map(result => `${file.path}:${result.offset} [${result.code}] ${result.reason}`),\n );\n\n output.write([report.dryRun ? `Dry run: ${outcome}` : outcome, totals, ...diagnostics, ''].join('\\n'));\n }\n}\n","type ErrorWithMessage = {\n message: string;\n};\n\n/**\n * Returns true if the error object has a message property. Otherwise false.\n * @param error error object or any other object\n * @returns true if the error object has a message property. Otherwise false.\n */\nfunction isErrorWithMessage(error: unknown): error is ErrorWithMessage {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n typeof (error as Record<string, unknown>).message === 'string'\n );\n}\n\n/**\n * Returns an error object with a message. If the error object is not an error, it will be converted to an error object.\n * @param maybeError error object or any other object\n * @returns error object\n */\nfunction toErrorWithMessage(maybeError: unknown): ErrorWithMessage {\n if (isErrorWithMessage(maybeError)) return maybeError;\n\n try {\n return new Error(JSON.stringify(maybeError));\n } catch {\n // fallback in case there's an error stringifying the maybeError\n // like with circular references for example.\n return new Error(String(maybeError));\n }\n}\n\n/**\n * Returns the error message from an error object. If the error object is not an error, it will be converted to an error object.\n * @param error error object or any other object\n * @returns error message\n */\nfunction getErrorMessage(error: unknown) {\n return toErrorWithMessage(error).message;\n}\n\nexport { getErrorMessage };\n","import type { MigrationReport } from '../report/migration-report';\n\nexport function resolveExitCode(report: MigrationReport, allowUnresolved: boolean): 0 | 1 | 2 {\n if (report.summary.parseErrors > 0) return 1;\n\n const hasUnresolved = report.summary.review > 0 || report.summary.unsupported > 0 || report.summary.invalid > 0;\n\n return hasUnresolved && !allowUnresolved ? 2 : 0;\n}\n","import path from 'node:path';\n\nexport function validateReportPath(reportPath: string): void {\n if (reportPath.trim().length === 0) {\n throw new Error('Report path must not be empty.');\n }\n\n if (path.extname(reportPath).toLowerCase() !== '.json') {\n throw new Error('Report path must have a .json extension.');\n }\n}\n","import { runCli } from './cli/run-cli';\nimport { getErrorMessage } from './util/error.util';\n\nasync function main(): Promise<void> {\n process.exitCode = await runCli(process.argv);\n}\n\nvoid main().catch((error: unknown) => {\n process.stderr.write(`Error: ${getErrorMessage(error)}\\n`);\n process.exitCode = 1;\n});\n"],"mappings":"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EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,oCAAoC,oBAAI,IAAI;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,mBAAmB,OAAwB;AAClD,SAAO,oBAAoB,KAAK,KAAK;AACvC;AAEA,SAAS,uBAAuB,OAAwB;AACtD,SAAO,mCAAmC,KAAK,KAAK;AACtD;AAEA,SAAS,mBAAmB,SAA2C;AACrE,QAAM,SAAS,eAAe;AAAA,IAC5B,aAAW,YAAY,QAAQ,aAAa,QAAQ,WAAW,GAAG,QAAQ,SAAS,GAAG;AAAA,EACxF;AACA,MAAI,WAAW,OAAW,QAAO;AACjC,QAAM,SAAS,YAAY,OAAO,YAAY,KAAK,QAAQ,MAAM,OAAO,UAAU,SAAS,CAAC;AAC5F,MAAI,OAAO,WAAW,KAAK,mBAAmB,MAAM,EAAG,QAAO,OAAO;AACrE,MAAI,OAAO,cAAc,YAAY,CAAC,SAAS,UAAU,UAAU,UAAU,UAAU,MAAM,EAAE,SAAS,MAAM,GAAG;AAC/G,WAAO,CAAC,qBAAqB,cAAc;AAAA,EAC7C;AACA,MAAI,OAAO,WAAW,GAAG,KAAK,OAAO,SAAS,GAAG,GAAG;AAClD,UAAM,OAAO,4BAA4B,MAAM;AAC/C,QAAI,SAAS,eAAgB,QAAO,OAAO;AAC3C,QAAI,SAAS,eAAgB,QAAO,OAAO;AAC3C,WAAO;AAAA,EACT;AACA,MAAI,uBAAuB,MAAM,KAAK,2BAA2B,MAAM,EAAG,QAAO,OAAO;AACxF,SAAO;AACT;AAEA,SAAS,mBAAmB,SAA2C;AACrE,MAAI,YAAY,SAAU,QAAO,CAAC,eAAe,YAAY;AAC7D,MAAI,CAAC,QAAQ,WAAW,SAAS,EAAG,QAAO;AAC3C,QAAM,SAAS,QAAQ,MAAM,UAAU,MAAM;AAC7C,MAAI,OAAO,WAAW,GAAG,KAAK,OAAO,SAAS,GAAG,GAAG;AAClD,UAAM,OAAO,4BAA4B,MAAM;AAC/C,QAAI,SAAS,eAAgB,QAAO,CAAC,mBAAmB;AACxD,QAAI,SAAS,kBAAmB,QAAO,CAAC,eAAe,YAAY;AACnE,WAAO;AAAA,EACT;AACA,MAAI,uBAAuB,MAAM,KAAK,oBAAoB,IAAI,MAAM,EAAG,QAAO,CAAC,eAAe,YAAY;AAC1G,MAAI,2BAA2B,MAAM,EAAG,QAAO,CAAC,mBAAmB;AACnE,SAAO;AACT;AAEA,SAAS,iBAAiB,SAA2C;AACnE,MAAI,YAAY,OAAQ,QAAO,CAAC,oBAAoB,YAAY;AAChE,MAAI,YAAY,aAAc,QAAO,CAAC,iBAAiB;AACvD,MAAI,CAAC,QAAQ,WAAW,OAAO,EAAG,QAAO;AACzC,QAAM,SAAS,QAAQ,MAAM,QAAQ,MAAM;AAC3C,MAAI,mBAAmB,MAAM,EAAG,QAAO,CAAC,oBAAoB,YAAY;AACxE,MAAI,2BAA2B,MAAM,EAAG,QAAO,CAAC,iBAAiB;AACjE,SAAO;AACT;AAEA,SAAS,wBAAwB,SAA2C;AAC1E,MAAI,YAAY,eAAgB,QAAO;AACvC,MAAI,CAAC,QAAQ,WAAW,eAAe,EAAG,QAAO;AACjD,QAAM,SAAS,QAAQ,MAAM,gBAAgB,MAAM;AACnD,MAAI,yBAAyB,IAAI,MAAM,EAAG,QAAO,CAAC,qBAAqB,YAAY;AACnF,MAAI,WAAW,aAAa,2BAA2B,MAAM,EAAG,QAAO,CAAC,yBAAyB;AACjG,SAAO;AACT;AAEA,SAAS,sBAAsB,SAA2C;AACxE,MAAI,YAAY,aAAc,QAAO,CAAC,0BAA0B,YAAY;AAC5E,MAAI,CAAC,QAAQ,WAAW,aAAa,EAAG,QAAO;AAC/C,QAAM,SAAS,QAAQ,MAAM,cAAc,MAAM;AACjD,MAAI,mBAAmB,MAAM,EAAG,QAAO,CAAC,0BAA0B,YAAY;AAC9E,MAAI,2BAA2B,MAAM,EAAG,QAAO,CAAC,uBAAuB;AACvE,SAAO;AACT;AAEA,SAAS,gCAAgC,OAA6B;AACpE,QAAM,YAAY,MAAM,MAAM,gCAAgC,IAAI,CAAC;AACnE,MAAI,cAAc,OAAW,QAAO;AACpC,QAAME,YAAW,gCAAgC,IAAI,SAAS,GAAG;AACjE,SAAOA,cAAa,YAAYA,YAAW,CAACA,SAAQ;AACtD;AAEA,SAAS,8BAA8B,SAA0B;AAC/D,QAAM,aAAa,QAAQ,WAAW,GAAG,IAAI,QAAQ,MAAM,CAAC,IAAI;AAChE,SACE,kCAAkC,IAAI,UAAU,KAChD,sCAAsC;AAAA,IACpC,eAAa,eAAe,aAAa,WAAW,WAAW,GAAG,SAAS,GAAG;AAAA,EAChF;AAEJ;AAEA,SAAS,cAAc,SAA2C;AAChE,QAAM,oBAAoB,QAAQ,MAAM,cAAc,IAAI,CAAC;AAC3D,MAAI,kBAAmB,QAAO,CAAC,iBAAiB;AAChD,MAAI,iBAAiB,IAAI,OAAO,EAAG,QAAO,CAAC,SAAS;AACpD,MAAI,8CAA8C,KAAK,OAAO,EAAG,QAAO,CAAC,gBAAgB;AACzF,MAAI,uCAAuC,KAAK,OAAO,EAAG,QAAO,CAAC,WAAW;AAC7E,MAAI,aAAa,KAAK,OAAO,EAAG,QAAO,CAAC,MAAM;AAC9C,MAAI,kBAAkB,KAAK,OAAO,EAAG,QAAO,CAAC,WAAW;AACxD,MAAI,oBAAoB,KAAK,OAAO,EAAG,QAAO,CAAC,aAAa;AAC5D,MAAI,cAAc,KAAK,OAAO,EAAG,QAAO,CAAC,YAAY;AACrD,MAAI,4BAA4B,KAAK,OAAO,EAAG,QAAO,CAAC,YAAY;AACnE,MAAI,mBAAmB,KAAK,OAAO,EAAG,QAAO,CAAC,eAAe;AAC7D,MAAI,kBAAkB,KAAK,OAAO,EAAG,QAAO,CAAC,cAAc;AAC3D,MAAI,aAAa,KAAK,OAAO,EAAG,QAAO,CAAC,iBAAiB;AACzD,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO,CAAC,aAAa;AACnD,MAAI,YAAY,eAAgB,QAAO,CAAC,gBAAgB,SAAS;AACjE,MAAI,eAAe,KAAK,OAAO,EAAG,QAAO,CAAC,gBAAgB,SAAS;AACnE,MAAI,aAAa,KAAK,OAAO,EAAG,QAAO,CAAC,eAAe;AACvD,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO,CAAC,YAAY;AACjD,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO,CAAC,YAAY;AAClD,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO,CAAC,SAAS;AAC/C,MAAI,SAAS,KAAK,OAAO,EAAG,QAAO,CAAC,KAAK;AACzC,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO,CAAC,OAAO;AAC7C,MAAI,SAAS,KAAK,OAAO,EAAG,QAAO,CAAC,QAAQ;AAC5C,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO,CAAC,eAAe;AACpD,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO,CAAC,cAAc;AACnD,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO,CAAC,YAAY;AACjD,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO,CAAC,cAAc;AACnD,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO,CAAC,eAAe;AACpD,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO,CAAC,aAAa;AAClD,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO,CAAC,qBAAqB;AAC1D,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO,CAAC,mBAAmB;AACxD,MAAI,OAAO,KAAK,OAAO,EAAG,QAAO,CAAC,SAAS;AAC3C,MAAI,QAAQ,KAAK,OAAO,EAAG,QAAO,CAAC,gBAAgB;AACnD,MAAI,QAAQ,KAAK,OAAO,EAAG,QAAO,CAAC,eAAe;AAClD,MAAI,QAAQ,KAAK,OAAO,EAAG,QAAO,CAAC,aAAa;AAChD,MAAI,QAAQ,KAAK,OAAO,EAAG,QAAO,CAAC,eAAe;AAClD,MAAI,QAAQ,KAAK,OAAO,EAAG,QAAO,CAAC,gBAAgB;AACnD,MAAI,QAAQ,KAAK,OAAO,EAAG,QAAO,CAAC,cAAc;AACjD,MAAI,QAAQ,KAAK,OAAO,EAAG,QAAO,CAAC,sBAAsB;AACzD,MAAI,QAAQ,KAAK,OAAO,EAAG,QAAO,CAAC,oBAAoB;AACvD,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO,CAAC,SAAS,QAAQ;AACtD,MAAI,OAAO,KAAK,OAAO,EAAG,QAAO,CAAC,OAAO;AACzC,MAAI,OAAO,KAAK,OAAO,EAAG,QAAO,CAAC,QAAQ;AAC1C,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO,CAAC,WAAW;AACjD,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO,CAAC,YAAY;AAClD,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO,CAAC,WAAW;AACjD,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO,CAAC,YAAY;AAClD,QAAM,YAAY,QAAQ,MAAM,mBAAmB,IAAI,CAAC;AACxD,QAAM,CAAC,aAAa,IAAI,WAAW,MAAM,GAAG,KAAK,CAAC;AAClD,MAAI,kBAAkB,UAAa,UAAU,IAAI,aAAa,EAAG,QAAO,CAAC,aAAa,aAAa;AACnG,QAAM,gBAAgB,QAAQ,MAAM,oCAAoC,IAAI,CAAC;AAC7E,MAAI,kBAAkB,QAAW;AAC/B,UAAM,OAAO,0BAA0B,aAAa;AACpD,QAAI,SAAS,QAAS,QAAO,CAAC,OAAO;AACrC,QAAI,SAAS,YAAa,QAAO,QAAQ,SAAS,IAAI,IAAI,CAAC,aAAa,aAAa,IAAI,CAAC,WAAW;AACrG,WAAO;AAAA,EACT;AACA,MAAI,kDAAkD,KAAK,OAAO,EAAG,QAAO,CAAC,YAAY;AACzF,MAAI,yCAAyC,KAAK,OAAO,EAAG,QAAO,CAAC,WAAW;AAC/E,MAAI,4BAA4B,KAAK,OAAO,EAAG,QAAO,CAAC,eAAe;AACtE,MAAI,cAAc,UAAa,2BAA2B,SAAS,EAAG,QAAO,CAAC,OAAO;AACrF,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO;AACpC,MAAI,+BAA+B,KAAK,OAAO,EAAG,QAAO,CAAC,iBAAiB;AAC3E,MAAI,+BAA+B,KAAK,OAAO,EAAG,QAAO,CAAC,uBAAuB;AACjF,MAAI,aAAa,KAAK,OAAO,EAAG,QAAO,CAAC,iBAAiB;AACzD,MAAI,eAAe,KAAK,OAAO,EAAG,QAAO,CAAC,mBAAmB;AAC7D,MAAI,qFAAqF,KAAK,OAAO,GAAG;AACtG,WAAO,CAAC,qBAAqB;AAAA,EAC/B;AACA,MAAI,yEAAyE,KAAK,OAAO,GAAG;AAC1F,WAAO,CAAC,mBAAmB;AAAA,EAC7B;AACA,MAAI,cAAc,KAAK,OAAO,EAAG,QAAO,CAAC,uBAAuB;AAChE,MAAI,YAAY,UAAW,QAAO,CAAC,kBAAkB;AACrD,QAAM,kBAAkB,QAAQ,MAAM,iBAAiB,IAAI,CAAC;AAC5D,MAAI,iBAAiB,WAAW,GAAG,EAAG,QAAO,gCAAgC,eAAe;AAC5F,MAAI,uBAAuB,mBAAmB,EAAE,EAAG,QAAO;AAC1D,MAAI,oBAAoB,UAAa,2BAA2B,eAAe,EAAG,QAAO,CAAC,kBAAkB;AAC5G,MAAI,QAAQ,KAAK,OAAO,EAAG,QAAO;AAClC,QAAM,kBAAkB,mBAAmB,OAAO;AAClD,MAAI,oBAAoB,OAAW,QAAO;AAC1C,MAAI,mBAAmB,KAAK,OAAO,EAAG,QAAO,CAAC,eAAe;AAC7D,QAAM,kBAAkB,mBAAmB,OAAO;AAClD,MAAI,oBAAoB,OAAW,QAAO;AAC1C,QAAM,gBAAgB,iBAAiB,OAAO;AAC9C,MAAI,kBAAkB,OAAW,QAAO;AACxC,QAAM,uBAAuB,wBAAwB,OAAO;AAC5D,MAAI,yBAAyB,OAAW,QAAO;AAC/C,QAAM,qBAAqB,sBAAsB,OAAO;AACxD,MAAI,uBAAuB,OAAW,QAAO;AAC7C,MAAI,YAAY,WAAY,QAAO,CAAC,YAAY,iBAAiB,aAAa;AAC9E,MAAI,aAAa,KAAK,OAAO,EAAG,QAAO,CAAC,SAAS;AACjD,MAAI,oBAAoB,KAAK,OAAO,EAAG,QAAO,CAAC,UAAU;AACzD,MAAI,CAAC,UAAU,SAAS,YAAY,YAAY,QAAQ,EAAE,SAAS,OAAO,EAAG,QAAO,CAAC,UAAU;AAC/F,MAAI,eAAe,KAAK,OAAO,EAAG,QAAO,CAAC,cAAc;AACxD,MAAI,eAAe,KAAK,OAAO,EAAG,QAAO,CAAC,aAAa;AACvD,MAAI,aAAa,KAAK,OAAO,EAAG,QAAO,CAAC,OAAO;AAC/C,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO,CAAC,KAAK;AAC3C,MAAI,aAAa,KAAK,OAAO,EAAG,QAAO,CAAC,OAAO;AAC/C,MAAI,cAAc,KAAK,OAAO,EAAG,QAAO,CAAC,QAAQ;AACjD,MAAI,YAAY,KAAK,OAAO,EAAG,QAAO,CAAC,MAAM;AAC7C,MAAI,gBAAgB,KAAK,OAAO,EAAG,QAAO,CAAC,iBAAiB,WAAW;AACvE,MAAI,sBAAsB,KAAK,OAAO,EAAG,QAAO;AAChD,MAAI,cAAc,KAAK,OAAO,EAAG,QAAO,CAAC,QAAQ;AACjD,MAAI,qBAAqB,KAAK,OAAO,EAAG,QAAO;AAC/C,MAAI,oBAAoB,KAAK,OAAO,EAAG,QAAO,CAAC,OAAO;AACtD,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO,CAAC,gBAAgB,gBAAgB,gBAAgB,OAAO;AAC7F,MAAI,mBAAmB,KAAK,OAAO,EAAG,QAAO;AAC7C,MAAI,mBAAmB,KAAK,OAAO,EAAG,QAAO,CAAC,oBAAoB,WAAW;AAC7E,MAAI,mBAAmB,KAAK,OAAO,EAAG,QAAO,CAAC,oBAAoB,WAAW;AAC7E,MAAI,iBAAiB,KAAK,OAAO,EAAG,QAAO,CAAC,oBAAoB,oBAAoB,WAAW;AAC/F,MAAI,YAAY,kBAAmB,QAAO,CAAC,qBAAqB;AAChE,MAAI,YAAY,yBAAyB,YAAY,oBAAqB,QAAO,CAAC,qBAAqB;AACvG,MAAI,sBAAsB,KAAK,OAAO,GAAG;AACvC,WAAO,CAAC,uBAAuB,8BAA8B,qBAAqB;AAAA,EACpF;AACA,MAAI,cAAc,KAAK,OAAO,EAAG,QAAO,CAAC,iBAAiB,qBAAqB;AAC/E,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO,CAAC,kBAAkB;AACxD,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO,CAAC,aAAa,4BAA4B;AAC9E,MAAI,qBAAqB,KAAK,OAAO,EAAG,QAAO,CAAC,uBAAuB;AACvE,MAAI,qBAAqB,KAAK,OAAO,EAAG,QAAO,CAAC,mBAAmB;AACnE,MAAI,qBAAqB,KAAK,OAAO,EAAG,QAAO,CAAC,oBAAoB;AACpE,MAAI,qBAAqB,KAAK,OAAO,EAAG,QAAO,CAAC,gBAAgB;AAChE,MAAI,wBAAwB,KAAK,OAAO,EAAG,QAAO,CAAC,aAAa;AAChE,MAAI,eAAe,KAAK,OAAO,EAAG,QAAO,CAAC,mBAAmB;AAC7D,MAAI,aAAa,KAAK,OAAO,EAAG,QAAO,CAAC,iBAAiB;AACzD,MAAI,wBAAwB,KAAK,OAAO,EAAG,QAAO,CAAC,UAAU;AAC7D,MAAI,eAAe,KAAK,OAAO,EAAG,QAAO,CAAC,gBAAgB;AAC1D,MAAI,aAAa,KAAK,OAAO,EAAG,QAAO,CAAC,cAAc;AACtD,MAAI,0BAA0B,KAAK,OAAO,EAAG,QAAO,CAAC,cAAc;AACnE,MAAI,gCAAgC,KAAK,OAAO,EAAG,QAAO,CAAC,iBAAiB;AAC5E,MAAI,6BAA6B,KAAK,OAAO,EAAG,QAAO,CAAC,qBAAqB;AAC7E,MAAI,mDAAmD,KAAK,OAAO,EAAG,QAAO,CAAC,YAAY;AAC1F,MAAI,YAAY,KAAK,OAAO,EAAG,QAAO,CAAC,iBAAiB;AACxD,MAAI,YAAY,KAAK,OAAO,EAAG,QAAO,CAAC,QAAQ;AAC/C,MAAI,oBAAoB,KAAK,OAAO,EAAG,QAAO,CAAC,gBAAgB;AAC/D,MAAI,CAAC,WAAW,aAAa,UAAU,EAAE,SAAS,OAAO,EAAG,QAAO,CAAC,YAAY;AAChF,MAAI,YAAY,WAAW;AACzB,WAAO,CAAC,YAAY,SAAS,UAAU,WAAW,UAAU,YAAY,aAAa,eAAe,cAAc;AAAA,EACpH;AACA,MAAI,YAAY,eAAe;AAC7B,WAAO,CAAC,YAAY,SAAS,UAAU,WAAW,UAAU,YAAY,aAAa,aAAa;AAAA,EACpG;AACA,SAAO,8BAA8B,OAAO,IAAI,YAAY;AAC9D;AAEO,SAAS,wBAAwB,OAAsD;AAC5F,QAAM,QAAQ,cAAc,KAAK;AACjC,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,EAAE,UAAU,SAAS,gBAAgB,IAAI;AAC/C,QAAM,mBAAmB,gBAAgB,WAAW,GAAG;AACvD,QAAM,oBAAoB,gBAAgB,SAAS,GAAG;AACtD,MAAI,oBAAoB,kBAAmB,QAAO;AAClD,QAAM,UAAU,gBAAgB,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE;AACpE,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,QAAM,YAAY,oBAAoB,qBAAqB,iCAAiC,OAAO;AACnG,QAAM,YAAY,cAAc,OAAO;AACvC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,cAAc,UAAa,cAAc,YAAY,CAAC,IAAI;AAAA,IACzE,GAAI,cAAc,YAAY,EAAE,wBAAwB,KAAK,IAAI,CAAC;AAAA,IAClE,YAAY,WAAW,QAAQ;AAAA,IAC/B,0BAA0B,yBAAyB,QAAQ;AAAA,IAC3D;AAAA,EACF;AACF;AAEO,SAAS,wBAAwB,OAAmD;AACzF,QAAM,aAAa,wBAAwB,KAAK;AAChD,MAAI,eAAe,OAAW,QAAO;AACrC,MAAI,CAAC,WAAW,cAAc,SAAS,SAAS,EAAG,QAAO;AAC1D,SAAO;AAAA,IACL,OAAO,WAAW;AAAA,IAClB,SAAS,WAAW;AAAA,IACpB,YAAY,WAAW;AAAA,IACvB,WAAW,WAAW;AAAA,EACxB;AACF;AAEA,SAAS,qBAAqB,MAA0B,OAAoC;AAC1F,SAAO,KAAK,SAAS,UAAU,MAAM,SAAS,UAAU,qBAAqB,KAAK,OAAO,MAAM,KAAK;AACtG;AAEO,SAAS,2BACd,oBACA,qBACqB;AACrB,QAAM,kBAAkB,IAAI,IAAI,mBAAmB;AACnD,QAAM,WAAW,mBACd,OAAO,WAAS,CAAC,gBAAgB,IAAI,KAAK,CAAC,EAC3C,IAAI,uBAAuB,EAC3B,OAAO,gBAAc,eAAe,MAAS;AAChD,QAAM,YAAY,oBAAI,IAAY;AAElC,aAAW,aAAa,oBACrB,IAAI,uBAAuB,EAC3B,OAAO,gBAAc,eAAe,MAAS,GAAG;AACjD,UAAM,sBAAsB,UAAU;AACtC,QAAI,oBAAoB,WAAW,EAAG;AACtC,QACE,SAAS;AAAA,MACP,aACE,qBAAqB,QAAQ,YAAY,UAAU,UAAU,MAC5D,QAAQ,2BAA2B,QAClC,UAAU,2BAA2B,QACrC,QAAQ,cAAc;AAAA,QAAK,qBACzB,oBAAoB,KAAK,uBAAqB,qBAAqB,iBAAiB,iBAAiB,CAAC;AAAA,MACxG;AAAA,IACN,GACA;AACA,gBAAU,IAAI,UAAU,KAAK;AAAA,IAC/B;AAAA,EACF;AAEA,SAAO;AACT;;;AC3mBO,IAAM,2BAAN,MAA+B;AAAA,EACpC,KAAK,YAAkC,SAAyB;AAC9D,UAAM,aAAa,wBAAwB,OAAO;AAClD,QAAI,eAAe,QAAW;AAC5B,YAAM,IAAI,MAAM,8CAA8C;AAAA,IAChE;AACA,QAAI,WAAW,SAAS,SAAS,GAAG;AAClC,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAC9D;AAEA,WAAO,IAAI,KAAK,WAAW,WAAW,KAAK,CAAC,KAAK,OAAO;AAAA,EAC1D;AAAA,EAEA,cAAc,YAAkC,WAA2B;AACzE,UAAM,aAAa,wBAAwB,SAAS;AACpD,QAAI,eAAe,QAAW;AAC5B,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AACA,QAAI,WAAW,0BAA0B;AACvC,YAAM,IAAI,MAAM,kEAAkE;AAAA,IACpF;AAEA,WAAO,IAAI,KAAK,WAAW,WAAW,KAAK,CAAC,KAAK,SAAS;AAAA,EAC5D;AAAA,EAEQ,WAAWC,QAA2B;AAC5C,UAAM,aAAa;AAAA,MACjBA,OAAM,QAAQ,SAAY,SAAY,eAAeA,OAAM,GAAG;AAAA,MAC9DA,OAAM,QAAQ,SAAY,SAAY,eAAeA,OAAM,GAAG;AAAA,IAChE,EAAE,OAAO,CAAC,cAAmC,cAAc,MAAS;AAEpE,WAAO,qBAAqB,WAAW,KAAK,OAAO,CAAC;AAAA,EACtD;AACF;;;AC/BO,SAAS,sBACd,OACA,YACA,SACA,SACwB;AACxB,MAAI,MAAM,YAAY,YAAY;AAChC,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,YAAY;AAAA,IACd;AAAA,EACF;AAEA,MAAI,CAAC,MAAM,WAAY,QAAO,EAAE,QAAQ,aAAa,WAAW;AAEhE,QAAM,iBAAiB,QAAQ,SAAS,MAAM,UAAU;AACxD,MAAI,eAAe,SAAS,YAAY;AACtC,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,YAAY,WAAW,IAAI,eAAa,QAAQ,KAAK,eAAe,YAAY,SAAS,CAAC;AAAA,IAC5F;AAAA,EACF;AAEA,MAAI,eAAe,SAAS,UAAU;AACpC,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ,wBAAwB,eAAe,KAAK;AAAA,MACpD,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,QAAQ,eAAe;AAC7B,QAAM,OAAO,eAAe,SAAS,UAAU,UAAU;AACzD,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,oCAAoC,IAAI,qBAAqB,KAAK;AAAA,IAC1E,YAAY;AAAA,EACd;AACF;;;ACpBA,IAAM,oBAAoB,oBAAI,IAA0D;AAAA,EACtF,CAAC,YAAY,QAAQ;AAAA,EACrB,CAAC,eAAe,YAAY;AAAA,EAC5B,CAAC,iBAAiB,cAAc;AAAA,EAChC,CAAC,UAAU,WAAW;AAAA,EACtB,CAAC,UAAU,WAAW;AAAA,EACtB,CAAC,YAAY,WAAW;AAAA,EACxB,CAAC,eAAe,YAAY;AAAA,EAC5B,CAAC,cAAc,WAAW;AAAA,EAC1B,CAAC,UAAU,WAAW;AAAA,EACtB,CAAC,gBAAgB,aAAa;AAAA,EAC9B,CAAC,eAAe,YAAY;AAAA,EAC5B,CAAC,UAAU,YAAY;AAAA,EACvB,CAAC,UAAU,YAAY;AAAA,EACvB,CAAC,SAAS,gBAAgB;AAAA,EAC1B,CAAC,WAAW,gBAAgB;AAAA,EAC5B,CAAC,SAAS,gBAAgB;AAAA,EAC1B,CAAC,WAAW,gBAAgB;AAC9B,CAAC;AAED,IAAM,wBAAwB,oBAAI,IAAqB,CAAC,cAAc,cAAc,CAAC;AACrF,IAAM,yBAAyB,oBAAI,IAAqB,CAAC,aAAa,aAAa,CAAC;AAOpF,SAAS,UAAU,OAA+B,YAAkD;AAClG,SAAO,EAAE,QAAQ,aAAa,OAAO,WAAW;AAClD;AAEA,SAAS,mBAAmB,OAA+B,QAAmD;AAC5G,MAAI,OAAO,WAAW,YAAa,QAAO,UAAU,OAAO,OAAO,UAAU;AAC5E,MAAI,OAAO,WAAW,WAAW;AAC/B,WAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,MAAM,OAAO;AAAA,MACb,QAAQ,GAAG,MAAM,KAAK,uBAAuB,MAAM,SAAS;AAAA,MAC5D,YAAY;AAAA,IACd;AAAA,EACF;AACA,SAAO,EAAE,GAAG,QAAQ,MAAM;AAC5B;AAEA,SAAS,kBAAkB,OAA+B,QAAmC;AAC3F,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAEA,SAAS,iBAAiB,MAAwD;AAChF,SAAO,KAAK,WAAW,cAAc,CAAC,GAAG,IAAI,IAAI,KAAK,UAAU,CAAC,EAAE,KAAK,IAAI;AAC9E;AAEA,SAAS,YAAY,MAAyB,OAAmC;AAC/E,QAAM,cAAc,iBAAiB,IAAI;AACzC,QAAM,eAAe,iBAAiB,KAAK;AAC3C,SACE,gBAAgB,UAChB,iBAAiB,UACjB,YAAY,WAAW,aAAa,UACpC,YAAY,MAAM,CAAC,WAAW,UAAU,cAAc,aAAa,KAAK,CAAC;AAE7E;AAEA,SAAS,aAAaC,QAAiC;AACrD,SAAO;AAAA,IACL,KAAKA,OAAM,OAAO,OAAO;AAAA,IACzB,KAAKA,OAAM,OAAO,OAAO;AAAA,EAC3B;AACF;AAEA,SAAS,WAAWA,QAAiC;AACnD,SAAO;AAAA,IACL,KAAKA,OAAM,QAAQ,OAAO,oBAAoB,SAAYA,OAAM;AAAA,IAChE,KAAKA,OAAM,QAAQ,OAAO,oBAAoB,SAAYA,OAAM;AAAA,EAClE;AACF;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,OAAO;AACvD;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,OAAO;AACvD;AAEA,SAAS,cAAc,QAAsB,UAAiD;AAC5F,MAAI,OAAO,MAAM,SAAS,OAAO,SAAS,MAAM,OAAO,IAAK,QAAO,CAAC,MAAM;AAC1E,QAAM,YAA4B,CAAC;AACnC,MAAI,OAAO,MAAM,SAAS,IAAK,WAAU,KAAK,EAAE,KAAK,OAAO,KAAK,KAAK,UAAU,SAAS,GAAG,EAAE,CAAC;AAC/F,MAAI,SAAS,MAAM,OAAO,IAAK,WAAU,KAAK,EAAE,KAAK,UAAU,SAAS,GAAG,GAAG,KAAK,OAAO,IAAI,CAAC;AAC/F,SAAO;AACT;AAEA,SAAS,gBACP,OACA,cACA,SACyB;AACzB,MAAI,MAAM,YAAY;AACpB,UAAM,iBAAiB,QAAQ,SAAS,MAAM,UAAU;AACxD,WAAO,eAAe,SAAS,aAAa,CAAC,aAAa,eAAe,WAAW,KAAK,CAAC,IAAI,CAAC;AAAA,EACjG;AAEA,MAAI,SAAkC,CAAC,EAAE,KAAK,OAAO,mBAAmB,KAAK,OAAO,kBAAkB,CAAC;AACvG,aAAW,WAAW,cAAc;AAClC,QAAI,CAAC,QAAQ,cAAc,QAAQ,YAAY,UAAW;AAC1D,UAAM,iBAAiB,QAAQ,SAAS,QAAQ,UAAU;AAC1D,QAAI,eAAe,SAAS,WAAY;AACxC,UAAM,WAAW,aAAa,eAAe,WAAW,KAAK;AAC7D,aAAS,OAAO,QAAQ,CAAAA,WAAS,cAAcA,QAAO,QAAQ,CAAC;AAAA,EACjE;AACA,SAAO;AACT;AAEA,SAAS,YAAY,QAAsB,QAA0C;AACnF,QAAM,UAAU,OACb,IAAI,CAAAA,YAAU,EAAE,KAAK,KAAK,IAAI,OAAO,KAAKA,OAAM,GAAG,GAAG,KAAK,KAAK,IAAI,OAAO,KAAKA,OAAM,GAAG,EAAE,EAAE,EAC7F,OAAO,CAAAA,WAASA,OAAM,OAAOA,OAAM,GAAG,EACtC,KAAK,CAAC,MAAM,UAAU,KAAK,MAAM,MAAM,GAAG;AAC7C,MAAI,CAAC,QAAQ,UAAU,QAAQ,CAAC,GAAG,QAAQ,OAAO,IAAK,QAAO;AAE9D,MAAI,eAAe,QAAQ,CAAC,EAAE;AAC9B,aAAWA,UAAS,QAAQ,MAAM,CAAC,GAAG;AACpC,QAAIA,OAAM,MAAM,aAAc,QAAO;AACrC,mBAAe,KAAK,IAAI,cAAcA,OAAM,GAAG;AAAA,EACjD;AACA,SAAO,gBAAgB,OAAO;AAChC;AAEO,IAAM,0BAAN,MAA8B;AAAA,EACnC,YACmB,UAAU,IAAI,kBAAkB,GAChC,UAAU,IAAI,yBAAyB,GACxD;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,KACE,QACA,SACA,SACA,oBAC8B;AAC9B,WAAO,KAAK,qBAAqB,QAAQ,SAAS,SAAS,MAAM,MAAM,kBAAkB;AAAA,EAC3F;AAAA,EAEA,kBACE,QACA,SACA,SAC8B;AAC9B,WAAO,KAAK,qBAAqB,QAAQ,SAAS,SAAS,OAAO,KAAK;AAAA,EACzE;AAAA,EAEQ,qBACN,QACA,SACA,SACA,UACA,8BACA,oBAC8B;AAC9B,UAAM,SAAS,oBAAI,IAA+C;AAClE,UAAM,YAAsC,CAAC;AAC7C,eAAW,SAAS,QAAQ;AAC1B,YAAM,SAAS,kBAAkB,IAAI,MAAM,SAAS;AACpD,UAAI,CAAC,QAAQ;AACX,kBAAU,KAAK,KAAK;AACpB;AAAA,MACF;AACA,YAAM,UAAU,OAAO,IAAI,MAAM,KAAK,CAAC;AACvC,cAAQ,KAAK,KAAK;AAClB,aAAO,IAAI,QAAQ,OAAO;AAAA,IAC5B;AAEA,UAAM,kBAAqC,EAAE,GAAG,SAAS,OAAO;AAChE,UAAM,mBAAmB,oBAAI,IAAmD;AAChF,UAAM,eAAe,OAAO,IAAI,QAAQ,KAAK,CAAC;AAC9C,UAAM,cAAc,KAAK,WAAW,cAAc,iBAAiB,SAAS,4BAA4B;AACxG,QAAI,aAAa,OAAQ,kBAAiB,IAAI,UAAU,WAAW;AAEnE,UAAM,qBAAqB,QAAQ,cAAc,OAAO,WAAS,MAAM,cAAc,UAAU;AAC/F,UAAM,mBACJ,uBAAuB,UACvB,KAAK;AAAA,MACH,QAAQ,gBAAgB,CAAC;AAAA,MACzB;AAAA,QACE,GAAG;AAAA,QACH,SAAS,QAAQ,UAAU,QAAQ;AAAA,QACnC,QAAQ,QAAQ;AAAA,QAChB,QAAQ;AAAA,QACR,cAAc;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACF,UAAM,kBAAkB,YAAY,MAAM,UAAQ,KAAK,WAAW,WAAW;AAE7E,eAAW,CAAC,QAAQ,YAAY,KAAK,QAAQ;AAC3C,UAAI,WAAW,SAAU;AAEzB,UAAI;AACJ,WAAK,WAAW,oBAAoB,WAAW,qBAAqB,oBAAoB;AACtF,gBAAQ,mBAAmB,QAAQ,cAAc,eAAe;AAAA,MAClE,WAAW,sBAAsB,IAAI,MAAM,GAAG;AAC5C,gBAAQ,kBACJ,KAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,IACA,KAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC;AAAA,QACH;AAAA,MACN,WAAW,uBAAuB,IAAI,MAAM,GAAG;AAC7C,gBAAQ,mBACJ,KAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA,sBAAsB,CAAC;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,QACF,IACA,KAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC;AAAA,QACH;AAAA,MACN,OAAO;AACL,gBAAQ,KAAK,WAAW,cAAc,iBAAiB,SAAS,4BAA4B;AAAA,MAC9F;AACA,uBAAiB,IAAI,QAAQ,KAAK;AAAA,IACpC;AAEA,UAAM,gBAAgB,CAAC,UAAU,cAAc,cAAc;AAC7D,UAAM,yBAAyB,cAAc;AAAA,MAAK,YAChD,iBAAiB,IAAI,MAAM,GAAG,KAAK,UAAQ,KAAK,WAAW,WAAW;AAAA,IACxE;AACA,QAAI,wBAAwB;AAC1B,iBAAW,UAAU,eAAe;AAClC,cAAM,QAAQ,iBAAiB,IAAI,MAAM;AACzC,YAAI,CAAC,MAAO;AACZ,yBAAiB;AAAA,UACf;AAAA,UACA,MAAM;AAAA,YAAI,UACR,KAAK,WAAW,cACZ;AAAA,cACE,KAAK;AAAA,cACL;AAAA,YACF,IACA;AAAA,UACN;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAAY,oBAAI,IAA+B;AACrD,eAAW,CAAC,QAAQ,KAAK,KAAK,kBAAkB;AAC9C,YAAM,iBAAiB,YAAY,WAAW,oBAAoB,WAAW;AAC7E,iBAAW,QAAQ,MAAO,WAAU,IAAI,KAAK,MAAM,IAAI,iBAAiB,KAAK,SAAS,IAAI,IAAI,IAAI;AAAA,IACpG;AACA,eAAW,SAAS,WAAW;AAC7B,YAAM,OAAO,QAAQ,OAAO,eAAe;AAC3C,gBAAU,IAAI,MAAM,IAAI,WAAW,KAAK,SAAS,IAAI,IAAI,IAAI;AAAA,IAC/D;AACA,WAAO,OAAO,IAAI,WAAS;AACzB,YAAM,UAAU,UAAU,IAAI,MAAM,EAAE;AACtC,UAAI,QAAS,QAAO;AACpB,YAAM,OAAO,QAAQ,OAAO,eAAe;AAC3C,aAAO,WAAW,KAAK,SAAS,IAAI,IAAI;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAEQ,qBACN,QACA,SACA,cACA,YACA,SACA,8BAC8B;AAC9B,UAAM,gBAAgB,OAAO,IAAI,WAAS;AACxC,YAAM,iBAAiB,KAAK,eAAe,OAAO,SAAS,OAAO;AAClE,UAAI,eAAe,WAAW,YAAa,QAAO;AAClD,YAAM,eAAe,KAAK,gBAAgB,OAAO,QAAQ,YAAY;AACrE,UAAI,CAAC,aAAa,QAAQ;AACxB,eAAO,kBAAkB,OAAO,iEAAiE;AAAA,MACnG;AACA,YAAM,aAAa,aAAa,IAAI,WAAS,QAAQ,OAAO,EAAE,GAAG,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC;AAChG,YAAM,aAAa,WAAW,KAAK,eAAa,UAAU,WAAW,WAAW;AAChF,UAAI,WAAY,QAAO;AACvB,YAAM,QAAQ,WAAW,CAAC;AAC1B,UAAI,CAAC,SAAS,WAAW,KAAK,eAAa,CAAC,YAAY,OAAO,SAAS,CAAC,GAAG;AAC1E,eAAO;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AACD,WAAO,KAAK,eAAe,QAAQ,eAAe,4BAA4B;AAAA,EAChF;AAAA,EAEQ,oBACN,QACA,SACA,SACA,8BACS;AACT,UAAM,eAAe,OAAO,OAAO,WAAS,MAAM,cAAc,UAAU;AAC1E,QACE,KAAK,WAAW,cAAc,SAAS,SAAS,4BAA4B,EAAE;AAAA,MAC5E,UAAQ,KAAK,WAAW;AAAA,IAC1B,GACA;AACA,aAAO;AAAA,IACT;AAEA,WAAQ,CAAC,eAAe,eAAe,EAAY,MAAM,eAAa;AACpE,YAAM,eAAe,OAAO,OAAO,WAAS,MAAM,cAAc,SAAS;AACzE,aAAO,KAAK;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,MAAM,UAAQ,KAAK,WAAW,WAAW;AAAA,IAC7C,CAAC;AAAA,EACH;AAAA,EAEQ,yBACN,QACA,SACA,SACA,QACA,8BAA8B,OACA;AAC9B,WAAO,OAAO,IAAI,WAAS;AACzB,YAAM,iBAAiB,KAAK,eAAe,OAAO,SAAS,OAAO;AAClE,UAAI,eAAe,WAAW,YAAa,QAAO;AAClD,YAAM,eAAe,8BAA8B,QAAQ,OAAO,OAAO,IAAI;AAC7E,aAAO,aAAa,WAAW,cAAc,kBAAkB,OAAO,MAAM,IAAI;AAAA,IAClF,CAAC;AAAA,EACH;AAAA,EAEQ,eACN,OACA,SACA,SACmB;AACnB,WAAO,MAAM,YAAY,YAAY,KAAK,mBAAmB,UAAU,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,OAAO,OAAO;AAAA,EAC7G;AAAA,EAEQ,gBACN,OACA,cACA,cACmB;AACnB,UAAM,cAAc,aAAa,OAAO,YAAU,CAAC,OAAO,UAAU;AACpE,UAAM,oBAAoB,aAAa,QAAQ,YAAU;AACvD,UAAI,CAAC,OAAO,WAAY,QAAO,CAAC;AAChC,YAAM,iBAAiB,KAAK,QAAQ,SAAS,OAAO,UAAU;AAC9D,aAAO,eAAe,SAAS,aAC3B,CAAC,EAAE,OAAO,OAAO,OAAO,OAAO,aAAa,eAAe,WAAW,KAAK,EAAE,CAAC,IAC9E,CAAC;AAAA,IACP,CAAC;AACD,UAAMC,UAAS,oBAAI,IAAY;AAE/B,eAAW,UAAU,gBAAgB,OAAO,cAAc,KAAK,OAAO,GAAG;AACvE,YAAM,mBAAmB,kBAAkB;AAAA,QAAO,YAChD,qBAAqB,WAAW,MAAM,GAAG,WAAW,OAAO,KAAK,CAAC;AAAA,MACnE;AACA,iBAAW,UAAU,iBAAkB,CAAAA,QAAO,IAAI,OAAO,KAAK;AAC9D,UACE,CAAC;AAAA,QACC;AAAA,QACA,iBAAiB,IAAI,YAAU,OAAO,KAAK;AAAA,MAC7C,GACA;AACA,YAAI,YAAY,QAAQ;AACtB,qBAAW,UAAU,YAAa,CAAAA,QAAO,IAAI,OAAO,KAAK;AAAA,QAC3D,OAAO;AACL,UAAAA,QAAO,IAAI,KAAK;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AACA,WAAO,CAAC,GAAGA,OAAM;AAAA,EACnB;AAAA,EAEQ,WACN,QACA,SACA,SACA,8BAC8B;AAC9B,WAAO,KAAK;AAAA,MACV;AAAA,MACA,OAAO,IAAI,WAAS,QAAQ,OAAO,OAAO,CAAC;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,eACN,QACA,eACA,8BAC8B;AAC9B,QAAI,OAAO,KAAK,WAAS,MAAM,YAAY,SAAS,GAAG;AACrD,aAAO,OAAO,IAAI,CAAC,OAAO,UAAU;AAClC,cAAM,eACJ,cAAc,KAAK,KACnB,kBAAkB,OAAO,gEAAgE;AAC3F,YAAI,MAAM,YAAY,UAAW,QAAO;AACxC,cAAM,iBAAiB,KAAK,mBAAmB,YAAY;AAC3D,YACE,eAAe,WAAW,gBACzB,eAAe,SAAS,2BAA2B,eAAe,SAAS,sBAC5E;AACA,iBAAO;AAAA,QACT;AACA,eAAO,kBAAkB,OAAO,gEAAgE;AAAA,MAClG,CAAC;AAAA,IACH;AACA,UAAM,iBAAiB,cAAc,IAAI,UAAQ,KAAK,mBAAmB,IAAI,CAAC;AAC9E,QAAI,eAAe,KAAK,UAAQ,KAAK,WAAW,WAAW,GAAG;AAC5D,aAAO,eAAe;AAAA,QAAI,UACxB,KAAK,WAAW,cACZ,kBAAkB,KAAK,OAAO,mEAAmE,IACjG;AAAA,MACN;AAAA,IACF;AAEA,QAAI,CAAC,6BAA8B,QAAO;AAE1C,aAAS,YAAY,GAAG,YAAY,OAAO,QAAQ,aAAa,GAAG;AACjE,YAAM,YAAY,OAAO,SAAS;AAClC,YAAM,WAAW,eAAe,SAAS;AACzC,UAAI,CAAC,WAAW,cAAc,CAAC,SAAU;AACzC,YAAM,qBAAqB,KAAK,QAAQ,SAAS,UAAU,UAAU;AACrE,UAAI,mBAAmB,SAAS,WAAY;AAE5C,eAAS,aAAa,YAAY,GAAG,aAAa,OAAO,QAAQ,cAAc,GAAG;AAChF,cAAM,aAAa,OAAO,UAAU;AACpC,cAAM,YAAY,eAAe,UAAU;AAC3C,YAAI,CAAC,YAAY,cAAc,CAAC,UAAW;AAC3C,cAAM,sBAAsB,KAAK,QAAQ,SAAS,WAAW,UAAU;AACvE,YACE,oBAAoB,SAAS,cAC7B,qBAAqB,mBAAmB,WAAW,OAAO,oBAAoB,WAAW,KAAK,KAC9F,CAAC,YAAY,UAAU,SAAS,GAChC;AACA,iBAAO,OAAO,IAAI,YAAU;AAAA,YAC1B,QAAQ;AAAA,YACR;AAAA,YACA,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,YAAY;AAAA,UACd,EAAE;AAAA,QACJ;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,mBAAmB,MAA4C;AACrE,QAAI,KAAK,WAAW,eAAe,CAAC,KAAK,MAAM,WAAY,QAAO;AAClE,UAAM,iBAAiB,KAAK,QAAQ,SAAS,KAAK,MAAM,UAAU;AAClE,QAAI,eAAe,SAAS,WAAY,QAAO;AAC/C,UAAM,SAAS,sBAAsB,KAAK,OAAO,KAAK,YAAY,KAAK,SAAS,KAAK,OAAO;AAC5F,WAAO,OAAO,WAAW,cAAc,OAAO,mBAAmB,KAAK,OAAO,MAAM;AAAA,EACrF;AAAA,EAEQ,SAAS,MAA4C;AAC3D,QAAI,KAAK,WAAW,YAAa,QAAO;AACxC,UAAM,SAAS,sBAAsB,KAAK,OAAO,KAAK,YAAY,KAAK,SAAS,KAAK,OAAO;AAC5F,WAAO,mBAAmB,KAAK,OAAO,MAAM;AAAA,EAC9C;AACF;;;ACtgBO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,oBAAoB,IAAI,yBAAyB,GAAG;AAApD;AAAA,EAAqD;AAAA,EAElF,KAAK,OAAwB,oBAA2D;AACtF,UAAM,UAAU,MAAM,WAAW,WAAW,WAAW;AACvD,QAAI,YAAY,OAAW,QAAO,CAAC;AACnC,QAAI,MAAM,WAAW,SAAS,OAAQ,QAAO,CAAC,OAAO;AACrD,WAAO,CAAC,KAAK,kBAAkB,KAAK,MAAM,WAAW,YAAY,OAAO,CAAC;AAAA,EAC3E;AACF;;;ACOA,SAAS,YAAY,MAAc,OAAuB;AACxD,MAAI,OAAO,MAAO,QAAO;AACzB,MAAI,OAAO,MAAO,QAAO;AACzB,SAAO;AACT;AAOA,SAASC,YAAWC,aAA4C;AAC9D,SAAOA,YAAW,SAAS,SAAS,CAAC,IAAIA,YAAW;AACtD;AAEA,SAASC,cAAaC,QAAiC;AACrD,SAAO;AAAA,IACL,KAAKA,OAAM,OAAO,OAAO;AAAA,IACzB,KAAKA,OAAM,OAAO,OAAO;AAAA,EAC3B;AACF;AAEA,SAASC,aAAY,QAAoB,QAAwC;AAC/E,QAAM,gBAAgBF,cAAa,MAAM;AACzC,QAAM,UAAU,OACb,OAAO,CAAAC,WAAS,qBAAqB,QAAQA,MAAK,CAAC,EACnD,IAAI,CAAAA,WAAS;AACZ,UAAM,UAAUD,cAAaC,MAAK;AAClC,WAAO;AAAA,MACL,KAAK,KAAK,IAAI,cAAc,KAAK,QAAQ,GAAG;AAAA,MAC5C,KAAK,KAAK,IAAI,cAAc,KAAK,QAAQ,GAAG;AAAA,IAC9C;AAAA,EACF,CAAC,EACA,KAAK,CAAC,MAAM,UAAU,KAAK,MAAM,MAAM,GAAG;AAC7C,QAAM,QAAQ,QAAQ,CAAC;AACvB,MAAI,CAAC,SAAS,MAAM,QAAQ,cAAc,IAAK,QAAO;AAEtD,MAAI,eAAe,MAAM;AACzB,aAAWA,UAAS,QAAQ,MAAM,CAAC,GAAG;AACpC,QAAIA,OAAM,MAAM,aAAc,QAAO;AACrC,mBAAe,KAAK,IAAI,cAAcA,OAAM,GAAG;AAAA,EACjD;AACA,SAAO,gBAAgB,cAAc;AACvC;AAEA,SAAS,yBAAyB,WAA4B;AAC5D,QAAM,aAAa,wBAAwB,SAAS;AACpD,SACE,eAAe,WACd,WAAW,YAAY,UAAU,WAAW,YAAY,kBACzD,CAAC,WAAW,cACX,WAAW,WAAW,SAAS,WAAW,WAAW,UAAU,WAAW;AAE/E;AAEA,SAAS,sBAAsB,OAA+B,QAAmC;AAC/F,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAEA,SAASE,mBAAkB,OAAkD;AAC3E,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;AAEO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YACmB,UAAU,IAAI,kBAAkB,GAChC,UAAU,IAAI,kBAAkB,GACjD;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,QAAQ,SAA8D;AACpE,UAAM,cAAc,CAAC,GAAG,QAAQ,WAAW,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,OAAO,MAAM,KAAK,CAAC;AAC9G,QAAI,QAAQ,eAAe,WAAW,cAAc;AAClD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG,CAAC,GAAG,QAAQ,eAAe,KAAK,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,KAAK,OAAO,MAAM,KAAK,CAAC;AAAA,QACxG;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,CAAC,GAAG,QAAQ,eAAe,MAAM,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,cAAc,MAAM,KAAK,CAAC;AACvG,UAAM,oBAAoB,QAAQ;AAClC,QAAI,kBAAkB,WAAW,cAAc;AAC7C,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,CAAC,GAAG,aAAa,GAAG,OAAO,IAAI,WAAS,sBAAsB,MAAM,OAAO,kBAAkB,MAAM,CAAC,CAAC;AAAA,MAC9G;AAAA,IACF;AAEA,QAAI,KAAK,wBAAwB,aAAa,MAAM,GAAG;AACrD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,UACL,GAAG,YAAY;AAAA,YAAI,UACjB,KAAK,WAAW,eAAe,KAAK,MAAM,cAAc,aAAaA,mBAAkB,KAAK,KAAK,IAAI;AAAA,UACvG;AAAA,UACA,GAAG,OAAO,IAAI,WAASA,mBAAkB,MAAM,KAAK,CAAC;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,kBAAkB,YAAY,IAAI,UAAQ,KAAK,cAAc,MAAM,MAAM,CAAC;AAChF,UAAM,uBAAuB;AAAA,MAC3B,GAAG,IAAI,IAAI,OAAO,QAAQ,WAAS,KAAK,QAAQ,KAAK,OAAO,kBAAkB,OAAO,CAAC,CAAC;AAAA,IACzF;AACA,UAAM,kBAAkB,OAAO,IAAI,CAAC,OAAO,WAA8B;AAAA,MACvE,QAAQ;AAAA,MACR,OAAO,MAAM;AAAA,MACb,YAAY,UAAU,IAAI,uBAAuB,CAAC;AAAA,IACpD,EAAE;AACF,UAAM,QAAQ,CAAC,GAAG,iBAAiB,GAAG,eAAe;AACrD,WAAO;AAAA,MACL,QAAQ,MAAM,MAAM,UAAQ,KAAK,WAAW,WAAW,IAAI,cAAc;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,wBACN,aACA,QACS;AACT,UAAM,eAAe,OAAO,KAAK,WAAS,MAAM,WAAW,SAAS,UAAU,MAAM,WAAW,QAAQ;AACvG,QAAI,aAAc,QAAO;AAEzB,UAAM,eAAe,OAAO;AAAA,MAAQ,WAClC,MAAM,WAAW,YAAY,MAAM,WAAW,SAAS,UAAU,CAAC,MAAM,WAAW,WAAW,KAAK,IAAI,CAAC;AAAA,IAC1G;AACA,QAAI,CAAC,aAAa,OAAQ,QAAO;AAEjC,WAAO,YAAY,KAAK,UAAQ;AAC9B,UAAI,KAAK,WAAW,eAAe,KAAK,MAAM,cAAc,WAAY,QAAO;AAC/E,aAAO,KAAK,WAAW,KAAK,eAAa;AACvC,YAAI,CAAC,yBAAyB,SAAS,EAAG,QAAO;AACjD,cAAM,aAAa,wBAAwB,SAAS;AACpD,YAAI,CAAC,cAAc,WAAW,WAAW,SAAS,QAAS,QAAO;AAClE,cAAM,SAAS,WAAW,WAAW;AACrC,eAAO,aAAa,KAAK,CAAAF,WAAS,qBAAqB,QAAQA,MAAK,CAAC,KAAK,CAACC,aAAY,QAAQ,YAAY;AAAA,MAC7G,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEQ,cAAc,MAAyB,QAAuD;AACpG,QAAI,KAAK,WAAW,eAAe,KAAK,MAAM,cAAc,WAAY,QAAO;AAC/E,WAAO;AAAA,MACL,GAAG;AAAA,MACH,YAAY,KAAK,WAAW,OAAO,eAAa,CAAC,KAAK,+BAA+B,WAAW,MAAM,CAAC;AAAA,IACzG;AAAA,EACF;AAAA,EAEQ,+BAA+B,WAAmB,QAA6C;AACrG,QAAI,CAAC,yBAAyB,SAAS,EAAG,QAAO;AACjD,UAAM,aAAa,wBAAwB,SAAS;AACpD,QAAI,CAAC,WAAY,QAAO;AACxB,UAAM,SAASJ,YAAW,WAAW,UAAU;AAC/C,UAAM,aAAa,OAAO,OAAO,WAAS,MAAM,WAAW,SAAS,MAAM;AAC1E,UAAM,mBAAmB,OAAO;AAAA,MAC9B,CAAC,UACC,MAAM,WAAW,SAAS;AAAA,IAC9B;AACA,UAAM,eAAe,WAAW,SAAS,KAAK,WAAW,MAAM,WAAS,MAAM,WAAW,QAAQ;AACjG,QAAI,cAAc;AAChB,aAAO,CAAC,iBAAiB;AAAA,QACvB,WAAS,MAAM,WAAW,WAAW,qBAAqB,QAAQ,MAAM,WAAW,WAAW,KAAK;AAAA,MACrG;AAAA,IACF;AAEA,WAAOI;AAAA,MACL;AAAA,MACA,iBAAiB,OAAO,WAAS,MAAM,WAAW,QAAQ,EAAE,IAAI,WAAS,MAAM,WAAW,WAAW,KAAK;AAAA,IAC5G;AAAA,EACF;AAAA,EAEQ,cAAc,MAAuB,OAAgC;AAC3E,QAAI,KAAK,WAAW,SAAS,UAAU,MAAM,WAAW,SAAS,OAAQ,QAAO;AAChF,QAAI,KAAK,WAAW,SAAS,UAAU,MAAM,WAAW,SAAS,OAAQ,QAAO;AAChF,QAAI,KAAK,WAAW,SAAS,WAAW,MAAM,WAAW,SAAS,SAAS;AACzE,UAAI,KAAK,WAAW,WAAW,aAAa,MAAM,WAAW,WAAW,UAAU;AAChF,eAAO,MAAM,WAAW,WAAW,WAAW,KAAK,WAAW,WAAW;AAAA,MAC3E;AACA,YAAM,aAAa,YAAY,KAAK,WAAW,WAAW,OAAO,MAAM,WAAW,WAAW,KAAK;AAClG,UAAI,WAAY,QAAO;AAAA,IACzB;AACA,WAAO,YAAY,KAAK,MAAM,IAAI,MAAM,MAAM,EAAE;AAAA,EAClD;AAAA,EAEQ,cAAc,MAA8B,OAAuC;AACzF,UAAM,aAAa,KAAK,eAAe;AACvC,UAAM,cAAc,MAAM,eAAe;AACzC,QAAI,cAAc,CAAC,YAAa,QAAO;AACvC,QAAI,CAAC,cAAc,YAAa,QAAO;AAEvC,UAAM,eAAe,KAAK,mBAAmB,KAAK,UAAU;AAC5D,UAAM,gBAAgB,KAAK,mBAAmB,MAAM,UAAU;AAC9D,QAAI,iBAAiB,cAAe,QAAO,gBAAgB;AAE3D,UAAM,aAAa,YAAY,KAAK,cAAc,IAAI,MAAM,cAAc,EAAE;AAC5E,WAAO,cAAc,YAAY,KAAK,IAAI,MAAM,EAAE;AAAA,EACpD;AAAA,EAEQ,mBAAmB,OAAmC;AAC5D,QAAI,UAAU,OAAW,QAAO,OAAO;AACvC,UAAM,iBAAiB,KAAK,QAAQ,SAAS,KAAK;AAClD,WAAO,eAAe,SAAS,aAAa,eAAe,WAAW,WAAW,OAAO;AAAA,EAC1F;AACF;;;ACzOA,IAAM,mBAAmB;AAElB,SAAS,qBAAqB,OAAiD;AACpF,MAAI,MAAM,YAAY,aAAc,MAAM,cAAc,YAAY,MAAM,cAAc,UAAW;AACjG,UAAM,IAAI,MAAM,gBAAgB;AAAA,EAClC;AAEA,QAAM,QAAQ,MAAM,UAAU;AAC9B,SAAO,MAAM,cAAc,WAAY,QAAQ,WAAW,UAAW,QAAQ,UAAU;AACzF;;;ACQA,SAAS,eAAe,OAAkD;AACxE,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;AAEA,SAAS,qBACP,OACA,gBACmB;AACnB,MAAI,eAAe,SAAS,UAAU;AACpC,WAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,MAAM;AAAA,MACN,QAAQ,wBAAwB,eAAe,KAAK;AAAA,MACpD,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,OAAO,eAAe,SAAS,UAAU,UAAU;AACzD,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ,oCAAoC,IAAI,qBAAqB,eAAe,KAAK;AAAA,IACzF,YAAY;AAAA,EACd;AACF;AAEA,SAASE,mBAAkB,OAAkD;AAC3E,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;AAEA,SAAS,+BAA+B,OAAkD;AACxF,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;AAEA,SAASC,aAAY,MAAc,OAAuB;AACxD,MAAI,OAAO,MAAO,QAAO;AACzB,MAAI,OAAO,MAAO,QAAO;AACzB,SAAO;AACT;AAEO,IAAM,yBAAN,MAA6B;AAAA,EAClC,YAA6B,UAAU,IAAI,kBAAkB,GAAG;AAAnC;AAAA,EAAoC;AAAA,EAEjE,KAAK,QAAiE;AACpE,UAAM,UAAU,OACb,IAAI,WAAS,KAAK,SAAS,KAAK,CAAC,EACjC,KAAK,CAAC,MAAM,UAAU,KAAK,QAAQ,KAAK,OAAO,MAAM,KAAK,CAAC;AAE9D,QAAI,CAAC,QAAQ,MAAM,CAAC,WAAsC,WAAW,MAAM,GAAG;AAC5E,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,QAAQ,IAAI,YAAW,UAAU,SAAS,OAAO,OAAOD,mBAAkB,OAAO,KAAK,CAAE;AAAA,MACjG;AAAA,IACF;AAEA,UAAM,SAAS,QAAQ,IAAI,YAAU,OAAO,KAAK;AACjD,QAAI,KAAK,qBAAqB,MAAM,GAAG;AACrC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,OAAO,IAAI,WAAS,+BAA+B,MAAM,KAAK,CAAC;AAAA,MACxE;AAAA,IACF;AAEA,WAAO,EAAE,QAAQ,aAAa,OAAO;AAAA,EACvC;AAAA,EAEQ,SAAS,OAAiD;AAChE,QAAI,MAAM,YAAY,UAAW,QAAO,EAAE,OAAO,MAAM,eAAe,KAAK,EAAE;AAE7E,QAAI,MAAM,eAAe,QAAW;AAClC,aAAO;AAAA,QACL;AAAA,QACA,OAAO,EAAE,OAAO,QAAQ,qBAAqB,KAAK,GAAG,YAAY,EAAE,MAAM,OAAO,EAAE;AAAA,MACpF;AAAA,IACF;AAEA,UAAM,iBAAiB,KAAK,QAAQ,SAAS,MAAM,UAAU;AAC7D,QAAI,eAAe,SAAS,YAAY;AACtC,aAAO,EAAE,OAAO,MAAM,qBAAqB,OAAO,cAAc,EAAE;AAAA,IACpE;AAEA,WAAO;AAAA,MACL;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA,QAAQ,qBAAqB,KAAK;AAAA,QAClC,YAAY,EAAE,MAAM,SAAS,YAAY,eAAe,WAAW;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,qBAAqB,QAA6C;AACxE,UAAM,aAAa,OAAO,OAAO,WAAS,MAAM,WAAW,SAAS,MAAM;AAC1E,QAAI,WAAW,KAAK,WAAS,MAAM,WAAW,WAAW,CAAC,GAAG,MAAM,EAAG,QAAO;AAE7E,UAAM,mBAAmB,OAAO;AAAA,MAC9B,CAAC,UACC,MAAM,WAAW,SAAS;AAAA,IAC9B;AACA,WAAO,iBAAiB;AAAA,MAAK,CAAC,MAAM,cAClC,iBACG,MAAM,YAAY,CAAC,EACnB;AAAA,QACC,WACE,KAAK,WAAW,MAAM,UACtB,qBAAqB,KAAK,WAAW,WAAW,OAAO,MAAM,WAAW,WAAW,KAAK;AAAA,MAC5F;AAAA,IACJ;AAAA,EACF;AAAA,EAEQ,QAAQ,MAA8B,OAAuC;AACnF,UAAM,aAAa,KAAK,eAAe;AACvC,UAAM,cAAc,MAAM,eAAe;AACzC,QAAI,cAAc,CAAC,YAAa,QAAO;AACvC,QAAI,CAAC,cAAc,YAAa,QAAO;AAEvC,UAAM,eAAe,KAAK,mBAAmB,KAAK,UAAU;AAC5D,UAAM,gBAAgB,KAAK,mBAAmB,MAAM,UAAU;AAC9D,QAAI,iBAAiB,cAAe,QAAO,gBAAgB;AAE3D,UAAM,aAAaC,aAAY,KAAK,cAAc,IAAI,MAAM,cAAc,EAAE;AAC5E,WAAO,cAAcA,aAAY,KAAK,IAAI,MAAM,EAAE;AAAA,EACpD;AAAA,EAEQ,mBAAmB,OAAmC;AAC5D,QAAI,UAAU,OAAW,QAAO,OAAO;AACvC,UAAM,iBAAiB,KAAK,QAAQ,SAAS,KAAK;AAClD,WAAO,eAAe,SAAS,aAAa,eAAe,WAAW,WAAW,OAAO;AAAA,EAC1F;AACF;;;ACzKA,IAAM,gBAAgB;AACtB,IAAM,WAAW;AAWjB,SAAS,kBAAkB,OAA8C;AACvE,QAAM,eAAyB,CAAC;AAChC,MAAI,UAAU;AACd,MAAI;AACJ,MAAI,cAAc;AAClB,MAAI,WAAW;AACf,MAAI,SAAS;AAEb,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,YAAY,MAAM,KAAK;AAC7B,UAAM,OAAO,MAAM,QAAQ,CAAC;AAC5B,QAAI,cAAc,OAAW;AAE7B,QAAI,OAAO;AACT,iBAAW;AACX,UAAI,cAAc,MAAM;AACtB,YAAI,SAAS,OAAW,QAAO;AAC/B,mBAAW;AACX,iBAAS;AAAA,MACX,WAAW,cAAc,OAAO;AAC9B,gBAAQ;AAAA,MACV;AACA;AAAA,IACF;AAEA,QAAI,cAAc,OAAO,SAAS,KAAK;AACrC,YAAM,aAAa,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAChD,UAAI,aAAa,EAAG,QAAO;AAC3B,iBAAW;AACX,cAAQ,aAAa;AACrB;AAAA,IACF;AACA,QAAI,cAAc,OAAO,cAAc,KAAK;AAC1C,cAAQ;AACR,iBAAW;AACX;AAAA,IACF;AACA,QAAI,cAAc,MAAM;AACtB,UAAI,SAAS,UAAa,SAAS,QAAQ,SAAS,QAAQ,SAAS,KAAM,QAAO;AAClF,iBAAW,YAAY;AACvB,eAAS;AACT;AAAA,IACF;AAEA,QAAI,cAAc,IAAK,gBAAe;AAAA,aAC7B,cAAc,KAAK;AAC1B,UAAI,gBAAgB,EAAG,QAAO;AAC9B,qBAAe;AAAA,IACjB,WAAW,cAAc,IAAK,aAAY;AAAA,aACjC,cAAc,KAAK;AAC1B,UAAI,aAAa,EAAG,QAAO;AAC3B,kBAAY;AAAA,IACd,WAAW,cAAc,IAAK,WAAU;AAAA,aAC/B,cAAc,KAAK;AAC1B,UAAI,WAAW,EAAG,QAAO;AACzB,gBAAU;AAAA,IACZ;AAEA,QAAI,cAAc,OAAO,gBAAgB,KAAK,aAAa,KAAK,WAAW,GAAG;AAC5E,mBAAa,KAAK,OAAO;AACzB,gBAAU;AAAA,IACZ,OAAO;AACL,iBAAW;AAAA,IACb;AAAA,EACF;AAEA,MAAI,SAAS,gBAAgB,KAAK,aAAa,KAAK,WAAW,EAAG,QAAO;AACzE,eAAa,KAAK,OAAO;AACzB,SAAO;AACT;AAEA,SAAS,iBAAiB,aAAyC;AACjE,MAAI;AACJ,MAAI,cAAc;AAClB,MAAI,WAAW;AACf,MAAI,SAAS;AAEb,WAAS,QAAQ,GAAG,QAAQ,YAAY,QAAQ,SAAS,GAAG;AAC1D,UAAM,YAAY,YAAY,KAAK;AACnC,QAAI,cAAc,OAAW;AAC7B,QAAI,OAAO;AACT,UAAI,cAAc,KAAM,UAAS;AAAA,eACxB,cAAc,MAAO,SAAQ;AACtC;AAAA,IACF;AACA,QAAI,cAAc,OAAO,cAAc,KAAK;AAC1C,cAAQ;AACR;AAAA,IACF;AACA,QAAI,cAAc,MAAM;AACtB,eAAS;AACT;AAAA,IACF;AACA,QAAI,cAAc,IAAK,gBAAe;AAAA,aAC7B,cAAc,IAAK,gBAAe;AAAA,aAClC,cAAc,IAAK,aAAY;AAAA,aAC/B,cAAc,IAAK,aAAY;AAAA,aAC/B,cAAc,IAAK,WAAU;AAAA,aAC7B,cAAc,IAAK,WAAU;AAAA,aAC7B,cAAc,OAAO,gBAAgB,KAAK,aAAa,KAAK,WAAW,EAAG,QAAO;AAAA,EAC5F;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAmC;AAC3D,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,QAAS,QAAO;AAErB,MAAI,UAAU;AACd,WAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AACtD,UAAM,YAAY,QAAQ,KAAK;AAC/B,QAAI,cAAc,OAAW;AAC7B,QAAI,cAAc,KAAK,SAAS,EAAG,QAAO;AAC1C,QAAI,cAAc,MAAM;AACtB,iBAAW;AACX;AAAA,IACF;AAEA,UAAM,OAAO,QAAQ,QAAQ,CAAC;AAC9B,QAAI,SAAS,UAAa,SAAS,QAAQ,SAAS,QAAQ,SAAS,KAAM,QAAO;AAClF,QAAI,MAAM;AACV,QAAI,SAAS,QAAQ;AACrB,WAAO,IAAI,SAAS,KAAK,SAAS,QAAQ,UAAU,SAAS,KAAK,QAAQ,MAAM,KAAK,EAAE,GAAG;AACxF,aAAO,QAAQ,MAAM;AACrB,gBAAU;AAAA,IACZ;AACA,QAAI,KAAK;AACP,YAAM,YAAY,OAAO,SAAS,KAAK,EAAE;AACzC,iBACE,cAAc,KAAK,YAAY,WAAa,aAAa,SAAU,aAAa,QAC5E,WACA,OAAO,cAAc,SAAS;AACpC,UAAI,cAAc,KAAK,QAAQ,MAAM,KAAK,EAAE,GAAG;AAC7C,YAAI,QAAQ,MAAM,MAAM,QAAQ,QAAQ,SAAS,CAAC,MAAM,KAAM,WAAU;AACxE,kBAAU;AAAA,MACZ;AACA,cAAQ,SAAS;AACjB;AAAA,IACF;AAEA,eAAW;AACX,aAAS;AAAA,EACX;AACA,SAAO;AACT;AAEO,SAAS,8BAA8B,OAAwB;AACpE,QAAM,SAAS,8BAA8B,KAAK;AAClD,MAAI,OAAO,WAAW,aAAc,QAAO;AAE3C,SAAO,OAAO,aAAa,KAAK,iBAAe,YAAY,SAAS,YAAY,MAAM,SAAS;AACjG;AAEO,SAAS,8BAA8B,OAAwC;AACpF,QAAM,WAAW,kBAAkB,KAAK;AACxC,MAAI,CAAC,UAAU;AACb,WAAO,EAAE,QAAQ,cAAc,QAAQ,4DAA4D;AAAA,EACrG;AAEA,QAAM,eAA0C,CAAC;AAEjD,aAAW,WAAW,UAAU;AAC9B,QAAI,CAAC,QAAQ,KAAK,EAAG;AACrB,UAAM,QAAQ,iBAAiB,OAAO;AACtC,QAAI,UAAU,QAAW;AACvB,aAAO,EAAE,QAAQ,cAAc,QAAQ,iEAAiE;AAAA,IAC1G;AACA,UAAMC,YAAW,iBAAiB,QAAQ,MAAM,GAAG,KAAK,CAAC;AACzD,QAAI,CAACA,WAAU;AACb,aAAO,EAAE,QAAQ,cAAc,QAAQ,8DAA8D;AAAA,IACvG;AACA,iBAAa,KAAK,EAAE,UAAAA,WAAU,OAAO,QAAQ,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;AAAA,EACxE;AAEA,SAAO,EAAE,QAAQ,UAAU,aAAa;AAC1C;;;AClKA,IAAM,uBAAuB,oBAAI,IAAI;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,wBAAwB;AAC9B,IAAM,wBAAwB;AAC9B,IAAM,0BAA0B;AAEhC,SAAS,gBAAgB,WAAuC;AAC9D,QAAM,OAAO,sBAAsB,SAAS;AAC5C,MAAI,UAAU,YAAY,WAAW;AACnC,WAAO,KAAK,IAAI,OAAO,KAAK,8BAA8B,UAAU,KAAK;AAAA,EAC3E;AAEA,SAAO,CAAC,GAAG,IAAI,EAAE;AAAA,IACf,SAAO,QAAQ,WAAW,QAAQ,aAAa,QAAQ,mBAAmB,IAAI,WAAW,gBAAgB;AAAA,EAC3G;AACF;AAEA,SAAS,gBAAgB,WAAuC;AAC9D,MAAI,UAAU,YAAY,WAAY,QAAO;AAC7C,SAAO,CAAC,GAAG,sBAAsB,SAAS,CAAC,EAAE;AAAA,IAC3C,SAAO,QAAQ,WAAW,QAAQ,aAAa,IAAI,WAAW,QAAQ,KAAK,IAAI,WAAW,UAAU;AAAA,EACtG;AACF;AAEA,SAAS,eAAe,MAA0B,OAAsC;AACtF,MAAI,KAAK,SAAS,MAAM,KAAM,QAAO;AACrC,MAAI,KAAK,SAAS,UAAU,MAAM,SAAS,OAAQ,QAAO;AAC1D,SAAO,KAAK,MAAM,QAAQ,MAAM,WAAW,MAAM,OAAO,KAAK,MAAM,QAAQ,MAAM,WAAW,MAAM;AACpG;AAEA,SAAS,YAAY,YAA6C;AAChE,SAAO,WAAW,WAAW,SAAS,UAAU,CAAC,WAAW,aAAa,WAAW,UAAU,WAAW;AAC3G;AAEA,SAAS,eAAe,OAAwE;AAC9F,SAAO,MACJ;AAAA,IACC,CAAC,SACC,KAAK,WAAW,eAAe,KAAK,MAAM,cAAc;AAAA,EAC5D,EACC,QAAQ,UAAQ,KAAK,WAAW,IAAI,uBAAuB,EAAE,OAAO,gBAAc,eAAe,MAAS,CAAC,EAC3G;AAAA,IACC,iBACG,WAAW,YAAY,UAAU,WAAW,YAAY,kBACzD,CAAC,WAAW,cACX,WAAW,WAAW,SAAS,WAAW,WAAW,UAAU,WAAW;AAAA,EAC/E;AACJ;AAEA,SAAS,sBACP,UACA,OAC2B;AAC3B,MAAI,MAAM,WAAW,SAAS,SAAS;AACrC,UAAMC,cAAa,MAAM,WAAW,WAAW;AAC/C,UAAM,uBAAuB,SAAS;AAAA,MACpC,aACE,QAAQ,WAAW,SAAS,WAC5B,CAAC,eAAe,QAAQ,YAAY,MAAM,UAAU,KACpD,qBAAqB,QAAQ,WAAW,OAAOA,WAAU;AAAA,IAC7D;AACA,QAAI,qBAAsB,QAAO;AAAA,EACnC;AAEA,QAAM,QAAQ,SAAS,OAAO,aAAW,eAAe,QAAQ,YAAY,MAAM,UAAU,CAAC;AAC7F,QAAM,aAAa,MAAM,SAAS,IAAI,QAAQ,SAAS,OAAO,aAAW,QAAQ,WAAW,SAAS,MAAM;AAC3G,MAAI,WAAW,WAAW,EAAG,QAAO;AACpC,QAAM,YAAY,CAAC,GAAG,IAAI,IAAI,WAAW,IAAI,aAAW,QAAQ,OAAO,CAAC,CAAC;AACzE,SAAO,UAAU,WAAW,IAAI,UAAU,CAAC,IAAI;AACjD;AAEA,SAAS,2BAA2B,aAAoE;AACtG,MAAI,YAAY,WAAW,EAAG,QAAO;AACrC,QAAM,aAAa,YAAY,CAAC;AAChC,MAAI,CAAC,cAAc,CAAC,YAAY,UAAU,KAAK,CAAC,qBAAqB,IAAI,WAAW,OAAO,EAAG,QAAO;AACrG,SAAO,WAAW;AACpB;AAEO,IAAM,yBAAN,MAA6B;AAAA,EAClC,QAAQ,SAA0D;AAChE,QAAI,QAAQ,uBAAuB,UAAU,QAAQ,WAAW,KAAK,eAAe,GAAG;AACrF,aAAO,EAAE,QAAQ,cAAc,QAAQ,sBAAsB;AAAA,IAC/D;AAEA,UAAM,eAAe,QAAQ,OAAO,KAAK,WAAS,MAAM,WAAW,SAAS,UAAU,MAAM,WAAW,QAAQ;AAC/G,UAAM,iBAAiB,eACnB,QAAQ,OAAO,OAAO,WAAS,MAAM,WAAW,SAAS,WAAW,MAAM,WAAW,OAAO,IAC5F,CAAC;AACL,UAAM,qBAAqB,QAAQ,mBAChC,IAAI,uBAAuB,EAC3B,OAAO,gBAAc,eAAe,MAAS;AAChD,UAAM,yBAAyB,CAAC,gBAAgB,QAAQ,OAAO,KAAK,WAAS,MAAM,WAAW,OAAO;AACrG,UAAM,sBACJ,QAAQ,OAAO,KAAK,WAAS,MAAM,WAAW,QAAQ,KACrD,0BAA0B,mBAAmB,KAAK,gBAAc,WAAW,YAAY,QAAQ;AAElG,QAAI,uBAAuB,QAAQ,WAAW,KAAK,eAAe,GAAG;AACnE,aAAO,EAAE,QAAQ,cAAc,QAAQ,sBAAsB;AAAA,IAC/D;AAEA,QAAI,mBAAmB,KAAK,gBAAc,WAAW,YAAY,QAAQ,GAAG;AAC1E,aAAO,yBACH,EAAE,QAAQ,cAAc,QAAQ,wBAAwB,IACxD,EAAE,QAAQ,YAAY,SAAS,OAAU;AAAA,IAC/C;AAEA,QAAI,eAAe,WAAW,EAAG,QAAO,EAAE,QAAQ,YAAY,SAAS,OAAU;AAEjF,UAAM,WAAW,eAAe,QAAQ,WAAW;AACnD,UAAM,kBAAkB,2BAA2B,kBAAkB;AACrE,UAAM,YAAY,eAAe,IAAI,WAAS;AAC5C,YAAM,gBAAgB,sBAAsB,UAAU,KAAK;AAC3D,aAAO,kBAAkB,SAAY,kBAAkB;AAAA,IACzD,CAAC;AACD,UAAM,oBAAoB,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC;AAChD,UAAM,UAAU,kBAAkB,CAAC;AACnC,QAAI,kBAAkB,WAAW,KAAK,OAAO,YAAY,UAAU;AACjE,aAAO,EAAE,QAAQ,cAAc,QAAQ,wBAAwB;AAAA,IACjE;AAEA,WAAO,EAAE,QAAQ,YAAY,QAAQ;AAAA,EACvC;AACF;;;ACrKA,IAAM,uBAAuB;AAC7B,IAAM,sBAAsB;AAOrB,SAAS,0BAA0B,OAAwB;AAChE,SACE,MAAM,SAAS,KACf,CAAC,CAAC,GAAG,KAAK,EAAE,KAAK,eAAa,qBAAqB,KAAK,SAAS,CAAC,KAClE,CAAC,SAAS,KAAK,KAAK,KACpB,CAAC,oBAAoB,KAAK,KAAK;AAEnC;AAEA,SAAS,iBAAiB,UAAkB,mBAA8C;AACxF,QAAM,YAAY,SAAS,SAAS,KAAK,CAAC,qBAAqB,KAAK,SAAS,GAAG,EAAE,KAAK,EAAE,IAAI,MAAM;AACnG,SAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,kBAAkB,KAAK,GAAG,CAAC;AAC9D;AAEO,SAAS,wBACd,QACA,SACA,gBACA,qBACA,SACwB;AACxB,QAAM,kBAAkB,CAAC,GAAG,IAAI,IAAI,mBAAmB,CAAC;AAIxD,QAAM,wBAAwB,gBAAgB,SAAS,MAAM,eAAe,EAAE,OAAO,OAAO,KAAK,CAAC;AAClG,QAAM,oBAAoB,gBAAgB,OAAO,eAAa,CAAC,sBAAsB,SAAS,SAAS,CAAC;AACxG,MAAI,kBAAkB,WAAW,EAAG,QAAO;AAE3C,MAAI,CAAC,kBAAkB,MAAM,yBAAyB,GAAG;AACvD,UAAM,IAAI,MAAM,6EAA6E;AAAA,EAC/F;AAEA,MAAI,mBAAmB,QAAW;AAChC,QAAI,eAAe,gBAAgB,QAAW;AAC5C,aAAO;AAAA,QACL,OAAO,eAAe;AAAA,QACtB,MAAM,GAAG,eAAe,OAAO,KAAK,kBAAkB,KAAK,GAAG,CAAC;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AAEA,UAAM,QAAQ,iBAAiB,eAAe,UAAU,iBAAiB;AACzE,UAAM,YAAY,OAAO,eAAe,YAAY,QAAQ,CAAC;AAC7D,QAAI,cAAc,OAAO,cAAc,KAAK;AAC1C,aAAO,EAAE,OAAO,eAAe,aAAa,MAAM,OAAO,QAAQ;AAAA,IACnE;AAEA,WAAO;AAAA,MACL,OAAO,eAAe;AAAA,MACtB,MAAM,GAAG,eAAe,OAAO,KAAK,KAAK;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WAAW,OAAO,MAAM,QAAQ,SAAS,OAAO,QAAQ,SAAS,GAAG;AAC1E,QAAM,cAAc,SAAS,SAAS,IAAI;AAC1C,QAAM,kBAAkB,QAAQ,SAAS,OAAO,cAAc,IAAI;AAClE,QAAM,uBAAuB,qBAAqB,KAAK,OAAO,kBAAkB,CAAC,KAAK,EAAE;AACxF,QAAM,qBAAqB,UAAU,kBAAkB,KAAK,GAAG,CAAC;AAChE,SAAO;AAAA,IACL,OAAO,EAAE,OAAO,iBAAiB,KAAK,gBAAgB;AAAA,IACtD,MAAM,eAAe,uBAAuB,GAAG,kBAAkB,MAAM,IAAI,kBAAkB;AAAA,IAC7F;AAAA,EACF;AACF;;;ACzEA,IAAM,mBAAmB;AACzB,IAAM,iBAAiB;AAEvB,SAAS,gBAAgB,OAAwB;AAC/C,SAAO,CAAC,GAAG,KAAK,EAAE,KAAK,eAAa;AAClC,UAAM,YAAY,UAAU,YAAY,CAAC;AACzC,WAAO,cAAc,WAAc,YAAY,MAAQ,cAAc;AAAA,EACvE,CAAC;AACH;AAEA,SAAS,YAAY,aAA+C;AAClE,QAAM,kBAAkB,iBAAiB,KAAK,YAAY,QAAQ,KAAK,eAAe,KAAK,YAAY,QAAQ;AAC/G,SACE,mBACA,YAAY,MAAM,SAAS,KAC3B,CAAC,gBAAgB,YAAY,KAAK,KAClC,CAAC,aAAa,KAAK,YAAY,KAAK;AAExC;AAEO,IAAM,mCAAN,MAAuC;AAAA,EAC5C,OAAO,aAA8C;AACnD,QAAI,CAAC,YAAY,WAAW,GAAG;AAC7B,YAAM,IAAI,MAAM,kFAAkF;AAAA,IACpG;AAEA,UAAM,QAAQ,YAAY,MAAM,WAAW,KAAK,KAAK,EAAE,WAAW,KAAK,GAAG;AAC1E,UAAM,YAAY,IAAI,YAAY,QAAQ,IAAI,KAAK;AACnD,QAAI,CAAC,0BAA0B,SAAS,GAAG;AACzC,YAAM,IAAI,MAAM,gFAAgF;AAAA,IAClG;AACA,WAAO;AAAA,EACT;AACF;;;AC7BA,IAAM,gBAAgB;AACtB,IAAM,yBAAyB;AAC/B,IAAM,mBAAmB;AACzB,IAAMC,kBAAiB;AACvB,IAAM,eAAe,oBAAI,IAAI,CAAC,MAAM,KAAK,MAAM,OAAO,MAAM,MAAM,QAAQ,QAAQ,OAAO,KAAK,IAAI,CAAC;AACnG,IAAM,iBAAiB;AACvB,IAAM,6BAA6B;AACnC,IAAM,wBAAwB;AAC9B,IAAM,YAAY;AAOX,IAAM,qCACX;AAEF,SAAS,kBAAkBC,WAAkD;AAC3E,MAAIA,UAAS,WAAW,IAAI,GAAG;AAC7B,WAAOD,gBAAe,KAAKC,SAAQ,IAAI,EAAE,UAAAA,UAAS,IAAI;AAAA,EACxD;AAEA,QAAM,QAAQA,UAAS,MAAM,GAAG;AAChC,MAAI,MAAM,SAAS,EAAG,QAAO;AAC7B,QAAM,aAAa,MAAM,CAAC,KAAK;AAC/B,QAAM,OAAO,WAAW,SAAS,GAAG,IAChC,uBAAuB,KAAK,UAAU,IACpC,WAAW,YAAY,IACvB,SACF,iBAAiB,KAAK,UAAU,IAC9B,aACA;AACN,MAAI,SAAS,OAAW,QAAO;AAE/B,QAAM,OAAO,MAAM,CAAC;AACpB,MAAI,SAAS,OAAW,QAAO,EAAE,UAAU,KAAK;AAChD,QAAM,iBAAiB,KAAK,YAAY;AACxC,SAAO,aAAa,IAAI,cAAc,IAAI,EAAE,UAAU,MAAM,MAAM,eAAe,IAAI;AACvF;AAEA,SAAS,yBAAyB,OAA2C;AAC3E,QAAM,kBAAkB,OAAO,KAAK,EACjC,KAAK,EACL,MAAM,GAAG,EACT,IAAI,UAAQ,KAAK,KAAK,CAAC,EACvB,OAAO,UAAQ,SAAS,EAAE;AAC7B,QAAM,8BAA8B,oBAAI,IAAqC;AAE7E,aAAW,kBAAkB,iBAAiB;AAC5C,UAAM,CAAC,QAAQ,GAAG,SAAS,IAAI,eAAe,MAAM,GAAG;AACvD,QAAI,UAAU,WAAW,GAAG;AAC1B,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,UAAMA,aAAY,UAAU,IAAI,QAAQ,UAAU,EAAE,EAAE,KAAK;AAC3D,UAAM,mBAAmB,UAAU,KAAK,GAAG,EAAE,QAAQ,UAAU,EAAE,EAAE,KAAK,EAAE,QAAQ,MAAM,EAAE;AAC1F,QAAI,CAACA,aAAY,CAAC,kBAAkB;AAClC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF;AAIA,gCAA4B,IAAIA,WAAU,EAAE,UAAAA,WAAU,OAAO,iBAAiB,CAAC;AAAA,EACjF;AAEA,SAAO,EAAE,QAAQ,UAAU,OAAO,EAAE,cAAc,CAAC,GAAG,4BAA4B,OAAO,CAAC,EAAE,EAAE;AAChG;AAEA,SAAS,gCAAgC,cAA2D;AAClG,QAAM,4BAA4B,oBAAI,IAAoB;AAE1D,aAAW,eAAe,cAAc;AACtC,UAAM,aAAa,kBAAkB,YAAY,QAAQ;AACzD,QAAI,eAAe,OAAW;AAE9B,UAAM,WAAW,0BAA0B,IAAI,WAAW,QAAQ;AAClE,QAAI,aAAa,UAAa,aAAa,YAAY,SAAU,QAAO;AACxE,8BAA0B,IAAI,WAAW,UAAU,YAAY,QAAQ;AAAA,EACzE;AAEA,SAAO;AACT;AAEO,SAAS,yCAAyCC,SAAoC;AAC3F,QAAM,eAA0C,CAAC;AACjD,aAAW,SAASA,SAAQ;AAC1B,UAAM,cAAc,yBAAyB,KAAK;AAClD,QAAI,YAAY,WAAW,SAAU,cAAa,KAAK,GAAG,YAAY,MAAM,YAAY;AAAA,EAC1F;AACA,SAAO,gCAAgC,YAAY;AACrD;AAEA,SAAS,qBACP,aACA,SACqC;AACrC,QAAM,aAAa,kBAAkB,YAAY,QAAQ;AACzD,MAAI,CAAC,cAAc,CAAC,YAAY,MAAO,QAAO;AAE9C,MACE,2BAA2B,KAAK,YAAY,KAAK,KACjD,sBAAsB,KAAK,YAAY,KAAK,KAC5C,UAAU,KAAK,YAAY,KAAK,GAChC;AACA,WAAO;AAAA,EACT;AAEA,QAAM,QACJ,WAAW,SAAS,SAChB,YAAY,QACZ,eAAe,KAAK,YAAY,KAAK,IACnC,GAAG,YAAY,KAAK,GAAG,WAAW,IAAI,KACtC;AACR,MAAI,UAAU,OAAW,QAAO;AAEhC,QAAM,SAAS,EAAE,UAAU,WAAW,UAAU,MAAM;AACtD,MAAI;AACF,UAAM,YAAY,QAAQ,OAAO,MAAM;AACvC,UAAM,YAAY,+BAA+B,SAAS;AAC1D,QAAI,cAAc,UAAa,UAAU,UAAW,QAAO;AAAA,EAC7D,QAAQ;AACN,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,iCAAiC,OAA2C;AAC1F,QAAM,cAAc,yBAAyB,KAAK;AAClD,MAAI,YAAY,WAAW,aAAc,QAAO;AAChD,MAAI,gCAAgC,YAAY,MAAM,YAAY,GAAG;AACnE,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,yBAAyB,oBAAI,IAAqC;AACxE,QAAM,UAAU,IAAI,iCAAiC;AAErD,aAAW,eAAe,YAAY,MAAM,cAAc;AACxD,UAAM,aAAa,qBAAqB,aAAa,OAAO;AAC5D,QAAI,CAAC,YAAY;AACf,YAAM,sBAAsB,MAAM;AAChC,YAAI;AACF,iBAAO,+BAA+B,QAAQ,OAAO,WAAW,CAAC,GAAG,cAAc;AAAA,QACpF,QAAQ;AACN,iBAAO;AAAA,QACT;AAAA,MACF,GAAG;AACH,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ,qBACJ,uBAAuB,KAAK,UAAU,YAAY,QAAQ,CAAC,iEAC3D,uBAAuB,KAAK,UAAU,YAAY,QAAQ,CAAC;AAAA,MACjE;AAAA,IACF;AACA,2BAAuB,IAAI,WAAW,UAAU,UAAU;AAAA,EAC5D;AAEA,QAAM,eAAe,CAAC,GAAG,uBAAuB,OAAO,CAAC;AACxD,aAAW,CAAC,OAAO,WAAW,KAAK,aAAa,QAAQ,GAAG;AACzD,UAAM,cAAc,aACjB,MAAM,QAAQ,CAAC,EACf,KAAK,eAAa,qBAAqB,YAAY,UAAU,UAAU,QAAQ,CAAC;AACnF,QAAI,gBAAgB,QAAW;AAC7B,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ,kBAAkB,KAAK,UAAU,YAAY,QAAQ,CAAC,QAAQ,KAAK,UAAU,YAAY,QAAQ,CAAC;AAAA,MAC5G;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,UAAU,OAAO,EAAE,aAAa,EAAE;AACrD;AAEO,SAAS,0BAA0B,OAA2D;AACnG,MAAI,MAAM,YAAY,WAAW;AAC/B,WAAO,EAAE,QAAQ,cAAc,QAAQ,kEAAkE;AAAA,EAC3G;AACA,MAAI,MAAM,cAAc,WAAW;AACjC,WAAO,EAAE,QAAQ,cAAc,QAAQ,yDAAyD;AAAA,EAClG;AACA,MAAI,MAAM,eAAe,UAAa,IAAI,kBAAkB,EAAE,SAAS,MAAM,UAAU,EAAE,SAAS,YAAY;AAC5G,WAAO,EAAE,QAAQ,cAAc,QAAQ,oEAAoE;AAAA,EAC7G;AACA,MAAI,cAAc,KAAK,MAAM,KAAK,GAAG;AACnC,WAAO,EAAE,QAAQ,cAAc,QAAQ,8DAA8D;AAAA,EACvG;AAEA,SAAO,iCAAiC,MAAM,KAAK;AACrD;;;ACpLA,SAASC,gBAAe,OAAkD;AACxE,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;AAEA,SAAS,gBAAgB,OAA+B,MAAiD;AACvG,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ,yBAAyB,IAAI;AAAA,IACrC,YAAY,gEAAgE,IAAI;AAAA,EAClF;AACF;AAEA,SAASC,sBACP,OACA,gBACmB;AACnB,MAAI,eAAe,SAAS,UAAU;AACpC,WAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,MAAM;AAAA,MACN,QAAQ,wBAAwB,eAAe,KAAK;AAAA,MACpD,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,OAAO,eAAe,SAAS,UAAU,UAAU;AACzD,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ,oCAAoC,IAAI,qBAAqB,eAAe,KAAK;AAAA,IACzF,YAAY;AAAA,EACd;AACF;AAEA,SAAS,gBACP,OACA,MACA,OACA,QACmB;AACnB,MAAI,SAAS,SAAS;AACpB,WAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA,YAAY;AAAA,IACd;AAAA,EACF;AAEA,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QACE,UAAU,SACN,SACA,iCAAiC,KAAK,UAAU,KAAK,CAAC,+CAA+C,MAAM;AAAA,IACjH,YAAY;AAAA,EACd;AACF;AAEA,SAASC,mBAAkB,OAAkD;AAC3E,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;AAEA,SAASC,gCAA+B,OAAkD;AACxF,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;AAEA,SAASC,aAAY,MAAc,OAAuB;AACxD,MAAI,OAAO,MAAO,QAAO;AACzB,MAAI,OAAO,MAAO,QAAO;AACzB,SAAO;AACT;AAEO,IAAM,wBAAN,MAA4B;AAAA,EACjC,YAA6B,UAAU,IAAI,kBAAkB,GAAG;AAAnC;AAAA,EAAoC;AAAA,EAEjE,KAAQ,SAA8D;AACpE,UAAM,UAAU,QAAQ,OACrB,IAAI,WAAS,KAAK,SAAS,OAAO,QAAQ,MAAM,QAAQ,WAAW,CAAC,EACpE,KAAK,CAAC,MAAM,UAAU,KAAK,QAAQ,KAAK,OAAO,MAAM,KAAK,CAAC;AAE9D,QAAI,CAAC,QAAQ,MAAM,CAAC,WAAyC,WAAW,MAAM,GAAG;AAC/E,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,QAAQ,IAAI,YAAW,UAAU,SAAS,OAAO,OAAOF,mBAAkB,OAAO,KAAK,CAAE;AAAA,MACjG;AAAA,IACF;AAEA,UAAM,SAAS,QAAQ,IAAI,YAAU,OAAO,KAAK;AACjD,QAAI,QAAQ,SAAS,WAAW,yCAAyC,OAAO,IAAI,WAAS,MAAM,MAAM,KAAK,CAAC,GAAG;AAChH,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,OAAO;AAAA,UAAI,WAChB,gBAAgB,MAAM,OAAO,QAAQ,MAAM,QAAW,kCAAkC;AAAA,QAC1F;AAAA,MACF;AAAA,IACF;AACA,QAAI,KAAK,qBAAqB,QAAQ,QAAQ,MAAM,GAAG;AACrD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,OAAO,IAAI,WAASC,gCAA+B,MAAM,KAAK,CAAC;AAAA,MACxE;AAAA,IACF;AAEA,WAAO,EAAE,QAAQ,aAAa,OAAO;AAAA,EACvC;AAAA,EAEQ,SACN,OACA,MACA,aACqB;AACrB,QAAI,MAAM,YAAY,aAAa,mBAAmB,KAAK,MAAM,KAAK,GAAG;AACvE,aAAO,EAAE,OAAO,MAAMH,gBAAe,KAAK,EAAE;AAAA,IAC9C;AACA,UAAM,oBAAoB,SAAS,UAAU,YAAY;AACzD,QAAI,MAAM,cAAc,kBAAmB,QAAO,EAAE,OAAO,MAAM,gBAAgB,OAAO,IAAI,EAAE;AAC9F,QAAI,MAAM,eAAe,OAAW,QAAO,EAAE,OAAO,MAAM,gBAAgB,OAAO,IAAI,EAAE;AAEvF,UAAM,aAAa,KAAK,QAAQ,SAAS,MAAM,UAAU;AACzD,QAAI,WAAW,SAAS,WAAY,QAAO,EAAE,OAAO,MAAMC,sBAAqB,OAAO,UAAU,EAAE;AAElG,UAAM,SAAS,YAAY,KAAK;AAChC,QAAI,OAAO,WAAW,cAAc;AAClC,aAAO,EAAE,OAAO,MAAM,gBAAgB,OAAO,MAAM,OAAO,OAAO,OAAO,MAAM,EAAE;AAAA,IAClF;AAEA,WAAO;AAAA,MACL;AAAA,MACA,OAAO;AAAA,QACL;AAAA,QACA,YAAY,EAAE,MAAM,SAAS,YAAY,WAAW,WAAW;AAAA,QAC/D,OAAO,OAAO;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,qBACN,QACA,QACS;AACT,WAAO,OAAO;AAAA,MAAK,CAAC,MAAM,cACxB,OACG,MAAM,YAAY,CAAC,EACnB;AAAA,QACC,WACE,CAAC,OAAO,KAAK,OAAO,MAAM,KAAK,KAC/B,qBAAqB,KAAK,WAAW,WAAW,OAAO,MAAM,WAAW,WAAW,KAAK;AAAA,MAC5F;AAAA,IACJ;AAAA,EACF;AAAA,EAEQ,QAAQ,MAA8B,OAAuC;AACnF,UAAM,eAAe,KAAK,mBAAmB,KAAK,UAAU;AAC5D,UAAM,gBAAgB,KAAK,mBAAmB,MAAM,UAAU;AAC9D,QAAI,iBAAiB,cAAe,QAAO,gBAAgB;AAE3D,UAAM,aAAaG,aAAY,KAAK,cAAc,IAAI,MAAM,cAAc,EAAE;AAC5E,WAAO,cAAcA,aAAY,KAAK,IAAI,MAAM,EAAE;AAAA,EACpD;AAAA,EAEQ,mBAAmB,OAAmC;AAC5D,QAAI,UAAU,OAAW,QAAO,OAAO;AACvC,UAAM,iBAAiB,KAAK,QAAQ,SAAS,KAAK;AAClD,WAAO,eAAe,SAAS,aAAa,eAAe,WAAW,WAAW,OAAO;AAAA,EAC1F;AACF;;;ACjMA,IAAM,qBAAqB,OAAO,OAAO;AAAA,EACvC,CAAC,UAAU,CAAC,SAAS,CAAC;AAAA,EACtB,CAAC,SAAS,CAAC,SAAS,CAAC;AAAA,EACrB,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAAA,EAC5B,CAAC,aAAa,CAAC,SAAS,CAAC;AAAA,EACzB,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAA,EACpB,CAAC,eAAe,CAAC,SAAS,CAAC;AAAA,EAC3B,CAAC,QAAQ,CAAC,SAAS,CAAC;AAAA,EACpB,CAAC,eAAe,CAAC,SAAS,CAAC;AAAA,EAC3B,CAAC,YAAY,CAAC,SAAS,CAAC;AAAA,EACxB,CAAC,SAAS,CAAC,SAAS,CAAC;AAAA,EACrB,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAAA,EAC5B,CAAC,aAAa,CAAC,SAAS,CAAC;AAAA,EACzB,CAAC,UAAU,CAAC,SAAS,CAAC;AAAA,EACtB,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAAA,EAC/B,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;AAAA,EACvC,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAAA,EAC/B,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;AAAA,EACvC,CAAC,aAAa,CAAC,WAAW,CAAC;AAAA,EAC3B,CAAC,qBAAqB,CAAC,WAAW,CAAC;AAAA,EACnC,CAAC,eAAe,CAAC,WAAW,CAAC;AAAA,EAC7B,CAAC,UAAU,CAAC,UAAU,CAAC;AAAA,EACvB,CAAC,SAAS,CAAC,UAAU,CAAC;AAAA,EACtB,CAAC,YAAY,CAAC,UAAU,CAAC;AAAA,EACzB,CAAC,YAAY,CAAC,UAAU,CAAC;AAAA,EACzB,CAAC,UAAU,CAAC,UAAU,CAAC;AAAA,EACvB,CAAC,UAAU,CAAC,gBAAgB,cAAc,CAAC;AAAA,EAC3C,CAAC,UAAU,CAAC,eAAe,YAAY,CAAC;AAAA,EACxC,CAAC,cAAc,CAAC,uBAAuB,8BAA8B,qBAAqB,CAAC;AAAA,EAC3F,CAAC,WAAW,CAAC,YAAY,CAAC;AAAA,EAC1B,CAAC,aAAa,CAAC,YAAY,CAAC;AAAA,EAC5B,CAAC,YAAY,CAAC,YAAY,CAAC;AAAA,EAC3B;AAAA,IACE;AAAA,IACA,CAAC,YAAY,SAAS,UAAU,WAAW,UAAU,YAAY,aAAa,eAAe,cAAc;AAAA,EAC7G;AAAA,EACA,CAAC,eAAe,CAAC,YAAY,SAAS,UAAU,WAAW,UAAU,YAAY,aAAa,aAAa,CAAC;AAC9G,CAAU;AAEV,IAAM,oBAAoB,OAAO,OAAO;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAU;AACV,IAAM,qBAAqB,OAAO,OAAO,CAAC,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,CAAC;AACrH,IAAMC,aAAY,OAAO,OAAO;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,SAAS,OAAwB;AACxC,SAAO,8BAA8B,KAAK,KAAK;AACjD;AAEA,SAAS,UAAU,OAAwB;AACzC,SAAO,oBAAoB,KAAK,KAAK;AACvC;AAEA,SAAS,aAAa,OAAwB;AAC5C,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,QAAM,SAAS,OAAO,KAAK;AAC3B,SAAO,UAAU,KAAK,UAAU;AAClC;AAEA,SAAS,wBAAwB,OAAwB;AACvD,SAAO,gCAAgC,KAAK;AAC9C;AAEA,SAAS,oCAAoC,OAAwB;AACnE,MAAI,CAAC,wBAAwB,KAAK,EAAG,QAAO;AAE5C,QAAM,UAAU,MACb,MAAM,GAAG,EAAE,EACX,QAAQ,sBAAsB,EAAE,EAChC,QAAQ,oBAAoB,EAAE,EAC9B,QAAQ,qBAAqB,EAAE;AAClC,SAAO,QAAQ,SAAS;AAC1B;AAEA,SAAS,mBAAmB,OAAwB;AAClD,SAAO,mCAAmC,KAAK,KAAK;AACtD;AAEA,SAAS,sBAAsB,OAAwB;AACrD,SAAO,oCAAoC,KAAK,KAAK,mBAAmB,KAAK;AAC/E;AAEA,SAAS,WAAW,OAAwB;AAC1C,QAAM,CAAC,WAAW,aAAa,SAAS,IAAI,MAAM,MAAM,GAAG;AAC3D,SAAO,cAAc,UAAa,UAAU,aAAa,EAAE,KAAK,cAAc,KAAK,eAAe,EAAE;AACtG;AAEA,SAAS,UAAU,OAAwB;AACzC,SAAO,SAAS,KAAK,KAAK,UAAU,QAAQ,sBAAsB,KAAK;AACzE;AAEA,SAAS,SAAS,OAAwB;AACxC,SAAO,UAAU,KAAK,KAAK,UAAU;AACvC;AAEA,SAAS,oBAAoB,OAAwB;AACnD,SAAO,UAAU,KAAK,KAAK,WAAW,KAAK,KAAK,UAAU;AAC5D;AAEA,SAAS,QAAQ,OAAwB;AACvC,SAAO,oBAAoB,KAAK,KAAK,UAAU;AACjD;AAEA,SAAS,YAAY,OAAwB;AAC3C,SACE,oBAAoB,KAAK,KACzB,UAAU,UACV,CAAC,UAAU,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,EAAE,SAAS,KAAK;AAE5F;AAEA,SAAS,QAAQ,OAAwB;AACvC,SAAO,YAAY,KAAK,KAAK,wCAAwC,KAAK,KAAK;AACjF;AAEA,SAAS,iBAAiB,OAAwB;AAChD,MAAI,CAAC,oCAAoC,KAAK,EAAG,QAAO;AACxD,QAAM,QAAQ,MAAM,MAAM,GAAG,EAAE;AAC/B,SAAO,gGAAgG,KAAK,KAAK;AACnH;AAEA,SAAS,kBAAkB,OAAwB;AACjD,MAAI,CAAC,oCAAoC,KAAK,EAAG,QAAO;AACxD,QAAM,QAAQ,MAAM,MAAM,GAAG,EAAE;AAC/B,SAAO,wDAAwD,KAAK,KAAK;AAC3E;AAEA,SAAS,QAAQ,OAAwB;AACvC,QAAM,CAAC,OAAO,SAAS,SAAS,IAAI,MAAM,MAAM,GAAG;AACnD,MAAI,cAAc,OAAW,QAAO;AAEpC,QAAM,YACJ,CAAC,WAAW,WAAW,eAAe,SAAS,OAAO,EAAE,SAAS,SAAS,EAAE,KAC3E,kBAAkB,SAAU,OAAO,MAAM,GAAG,EAAE,CAAC,KAAK,EAAyC,KAC5F,mBAAmB,SAAU,OAAO,MAAM,GAAG,EAAE,CAAC,KAAK,EAA0C,KAC/F,OAAO,MAAM,GAAG,EAAE,WAAW;AACjC,MAAI,CAAC,aAAa,CAAC,iBAAiB,SAAS,EAAE,KAAK,CAAC,mBAAmB,SAAS,EAAE,EAAG,QAAO;AAC7F,SAAO,YAAY,UAAa,aAAa,OAAO,KAAK,sBAAsB,OAAO;AACxF;AAEA,SAAS,kBAAkB,OAAwB;AACjD,QAAM,CAAC,KAAK,IAAI,MAAM,MAAM,GAAG;AAC/B,MAAI,mBAAmB,SAAS,EAAE,EAAG,QAAO;AAC5C,MAAI,YAAY,KAAK,SAAS,EAAE,EAAG,QAAO;AAC1C,SAAO,QAAQ,KAAK;AACtB;AAEA,SAAS,kBAAkB,OAA8C;AACvE,QAAM,CAAC,MAAM,YAAY,SAAS,IAAI,MAAM,MAAM,GAAG;AACrD,QAAM,wBACJ,cAAc,WAAc,eAAe,UAAa,SAAS,UAAU,KAAK,sBAAsB,UAAU;AAClH,MAAIA,WAAU,SAAU,QAAQ,EAAiC,GAAG;AAClE,WAAO,wBAAwB,CAAC,aAAa,aAAa,IAAI;AAAA,EAChE;AACA,QAAM,gBAAgB,QAAQ;AAC9B,QAAM,8BACJ,oCAAoC,aAAa,KAAK,mCAAmC,aAAa;AACxG,MAAI,6BAA6B;AAC/B,QAAI,CAAC,sBAAuB,QAAO;AACnC,WAAO,eAAe,SAAY,CAAC,WAAW,IAAI,CAAC,aAAa,aAAa;AAAA,EAC/E;AACA,MAAI,oCAAoC,KAAK,KAAK,uBAAuB,KAAK,KAAK,EAAG,QAAO,CAAC,OAAO;AACrG,MAAI,QAAQ,KAAK,EAAG,QAAO,CAAC,OAAO;AACnC,SAAO;AACT;AAEA,SAAS,YAAY,OAAwB;AAC3C,SAAO,kBAAkB,KAAK,MAAM;AACtC;AAEA,SAAS,oBAAoB,OAA8C;AACzE,MAAI,UAAU,KAAK,KAAM,oCAAoC,KAAK,KAAK,oCAAoC,KAAK,GAAI;AAClH,WAAO,CAAC,gBAAgB,cAAc;AAAA,EACxC;AACA,MAAI,MAAM,CAAC,SAAS,UAAU,UAAU,UAAU,UAAU,MAAM,CAAC,EAAE,KAAK,GAAG;AAC3E,WAAO,CAAC,qBAAqB,cAAc;AAAA,EAC7C;AACA,MAAI,QAAQ,KAAK,KAAK,mBAAmB,KAAK,KAAK,uBAAuB,KAAK,KAAK,GAAG;AACrF,WAAO,CAAC,cAAc;AAAA,EACxB;AACA,SAAO;AACT;AAEA,SAAS,wBAAwB,OAAkC;AACjE,SAAO,UAAU,SACb,CAAC,qBAAqB,IACtB,CAAC,uBAAuB,8BAA8B,qBAAqB;AACjF;AAEA,SAAS,mBAAmB,OAA8C;AACxE,MAAI,UAAU,KAAK,EAAG,QAAO,CAAC,gBAAgB,gBAAgB,gBAAgB,OAAO;AACrF,SAAO,sBAAsB,KAAK,IAAI,CAAC,OAAO,IAAI;AACpD;AAEA,SAAS,MAAMC,SAAuD;AACpE,SAAO,WAASA,QAAO,SAAS,KAAK;AACvC;AAEA,IAAM,oBAA8C,OAAO,OAAO;AAAA,EAChE;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,aAAa;AAAA,IAC7B,SAAS,MAAM,CAAC,SAAS,OAAO,UAAU,YAAY,SAAS,CAAC;AAAA,EAClE;AAAA,EACA,EAAE,WAAW,OAAO,eAAe,CAAC,KAAK,GAAG,SAAS,WAAS,SAAS,KAAK,KAAK,sBAAsB,KAAK,EAAE;AAAA,EAC9G;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,YAAY;AAAA,IAC5B,SAAS,WAAS,SAAS,KAAK,KAAK,sBAAsB,KAAK;AAAA,EAClE;AAAA,EACA,EAAE,WAAW,SAAS,eAAe,CAAC,SAAS,GAAG,SAAS,WAAS,SAAS,KAAK,KAAK,sBAAsB,KAAK,EAAE;AAAA,EACpH,EAAE,WAAW,KAAK,eAAe,CAAC,QAAQ,GAAG,UAAU,MAAM,SAAS,UAAU,iBAAiB,UAAU;AAAA,EAC3G,EAAE,WAAW,MAAM,eAAe,CAAC,eAAe,GAAG,UAAU,MAAM,SAAS,UAAU,iBAAiB,UAAU;AAAA,EACnH,EAAE,WAAW,MAAM,eAAe,CAAC,cAAc,GAAG,UAAU,MAAM,SAAS,UAAU,iBAAiB,UAAU;AAAA,EAClH,EAAE,WAAW,MAAM,eAAe,CAAC,YAAY,GAAG,UAAU,MAAM,SAAS,UAAU,iBAAiB,UAAU;AAAA,EAChH,EAAE,WAAW,MAAM,eAAe,CAAC,cAAc,GAAG,UAAU,MAAM,SAAS,UAAU,iBAAiB,UAAU;AAAA,EAClH,EAAE,WAAW,MAAM,eAAe,CAAC,eAAe,GAAG,UAAU,MAAM,SAAS,UAAU,iBAAiB,UAAU;AAAA,EACnH,EAAE,WAAW,MAAM,eAAe,CAAC,aAAa,GAAG,UAAU,MAAM,SAAS,UAAU,iBAAiB,UAAU;AAAA,EACjH;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,qBAAqB;AAAA,IACrC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,mBAAmB;AAAA,IACnC,UAAU;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,SAAS;AAAA,IACzB,SAAS,WAAS,SAAS,KAAK,KAAK,UAAU,QAAQ,sBAAsB,KAAK;AAAA,EACpF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,gBAAgB;AAAA,IAChC,SAAS,WAAS,SAAS,KAAK,KAAK,UAAU,QAAQ,sBAAsB,KAAK;AAAA,EACpF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,eAAe;AAAA,IAC/B,SAAS,WAAS,SAAS,KAAK,KAAK,UAAU,QAAQ,sBAAsB,KAAK;AAAA,EACpF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,aAAa;AAAA,IAC7B,SAAS,WAAS,SAAS,KAAK,KAAK,UAAU,QAAQ,sBAAsB,KAAK;AAAA,EACpF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,eAAe;AAAA,IAC/B,SAAS,WAAS,SAAS,KAAK,KAAK,UAAU,QAAQ,sBAAsB,KAAK;AAAA,EACpF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,gBAAgB;AAAA,IAChC,SAAS,WAAS,SAAS,KAAK,KAAK,UAAU,QAAQ,sBAAsB,KAAK;AAAA,EACpF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,cAAc;AAAA,IAC9B,SAAS,WAAS,SAAS,KAAK,KAAK,UAAU,QAAQ,sBAAsB,KAAK;AAAA,EACpF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,sBAAsB;AAAA,IACtC,SAAS,WAAS,SAAS,KAAK,KAAK,UAAU,QAAQ,sBAAsB,KAAK;AAAA,EACpF;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,oBAAoB;AAAA,IACpC,SAAS,WAAS,SAAS,KAAK,KAAK,UAAU,QAAQ,sBAAsB,KAAK;AAAA,EACpF;AAAA,EACA,EAAE,WAAW,KAAK,eAAe,CAAC,OAAO,GAAG,SAAS,QAAQ;AAAA,EAC7D,EAAE,WAAW,KAAK,eAAe,CAAC,QAAQ,GAAG,SAAS,YAAY;AAAA,EAClE,EAAE,WAAW,SAAS,eAAe,CAAC,WAAW,GAAG,SAAS,QAAQ;AAAA,EACrE,EAAE,WAAW,SAAS,eAAe,CAAC,YAAY,GAAG,SAAS,YAAY;AAAA,EAC1E,EAAE,WAAW,SAAS,eAAe,CAAC,WAAW,GAAG,SAAS,WAAS,UAAU,UAAU,QAAQ,KAAK,EAAE;AAAA,EACzG,EAAE,WAAW,SAAS,eAAe,CAAC,YAAY,GAAG,SAAS,WAAS,UAAU,UAAU,YAAY,KAAK,EAAE;AAAA,EAC9G,EAAE,WAAW,QAAQ,eAAe,mBAAmB,SAAS,YAAY;AAAA,EAC5E,EAAE,WAAW,MAAM,eAAe,CAAC,kBAAkB,GAAG,SAAS,kBAAkB;AAAA,EACnF,EAAE,WAAW,MAAM,eAAe,CAAC,kBAAkB,GAAG,SAAS,kBAAkB;AAAA,EACnF;AAAA,IACE,WAAW;AAAA,IACX,eAAe;AAAA,IACf,SAAS,WAAS,oBAAoB,KAAK,MAAM;AAAA,EACnD;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,eAAe;AAAA,IAC/B,SAAS,WACP,MAAM,CAAC,QAAQ,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO,OAAO,MAAM,CAAC,EAAE,KAAK,KAAK,sBAAsB,KAAK;AAAA,EACpH;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,eAAe,YAAY;AAAA,IAC3C,SAAS,WAAS,MAAM,CAAC,OAAO,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,MAAM,CAAC,EAAE,KAAK,KAAK,mBAAmB,KAAK;AAAA,EAClH;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,SAAS;AAAA,IACzB,SAAS,WAAS,aAAa,KAAK,KAAK,sBAAsB,KAAK;AAAA,EACtE;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,UAAU;AAAA,IAC1B,SAAS,MAAM,CAAC,QAAQ,UAAU,QAAQ,WAAW,QAAQ,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,OAAO;AAAA,IACvB,UAAU;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,cAAc;AAAA,IAC9B,UAAU;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,aAAa;AAAA,IAC7B,UAAU;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA,EAAE,WAAW,OAAO,eAAe,CAAC,KAAK,GAAG,UAAU,MAAM,SAAS,SAAS,iBAAiB,oBAAoB;AAAA,EACnH;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,OAAO;AAAA,IACvB,UAAU;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,QAAQ;AAAA,IACxB,UAAU;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,MAAM;AAAA,IACtB,UAAU;AAAA,IACV,SAAS;AAAA,IACT,iBAAiB;AAAA,EACnB;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,QAAQ;AAAA,IACxB,UAAU;AAAA,IACV,SAAS,WAAS,UAAU,KAAK,KAAK,sBAAsB,KAAK;AAAA,EACnE;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe;AAAA,IACf,SAAS,WAAS,mBAAmB,KAAK,MAAM;AAAA,EAClD;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,oBAAoB,oBAAoB,WAAW;AAAA,IACnE,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe;AAAA,IACf,SAAS,MAAM,CAAC,OAAO,UAAU,WAAW,UAAU,aAAa,MAAM,CAAC;AAAA,EAC5E;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,uBAAuB;AAAA,IACvC,SAAS,WAAS,cAAc,KAAK,KAAK,KAAK,MAAM,CAAC,QAAQ,SAAS,CAAC,EAAE,KAAK,KAAK,sBAAsB,KAAK;AAAA,EACjH;AAAA,EACA,EAAE,WAAW,SAAS,eAAe,CAAC,cAAc,GAAG,SAAS,MAAM,CAAC,QAAQ,OAAO,CAAC,EAAE;AAAA,EACzF;AAAA,IACE,WAAW;AAAA,IACX,eAAe,WAAS,CAAC,CAAC,QAAQ,WAAW,MAAM,EAAE,SAAS,KAAK,IAAI,oBAAoB,qBAAqB;AAAA,IAChH,SAAS,MAAM,CAAC,QAAQ,WAAW,QAAQ,UAAU,SAAS,CAAC;AAAA,EACjE;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,WAAS;AAAA,MACtB,CAAC,WAAW,SAAS,QAAQ,QAAQ,YAAY,EAAE,SAAS,KAAK,IAAI,eAAe;AAAA,IACtF;AAAA,IACA,SAAS,MAAM;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,eAAe,CAAC,QAAQ;AAAA,IACxB,SAAS,MAAM;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,EAAE,WAAW,kBAAkB,eAAe,CAAC,gBAAgB,GAAG,SAAS,MAAM,CAAC,QAAQ,MAAM,CAAC,EAAE;AACrG,CAAC;AAED,IAAM,uBAAuB,OAAO,OAAO;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAEV,SAAS,kBAAkB,SAA0B;AACnD,SAAO,qBAAqB,SAAS,OAAgD;AACvF;AAEA,SAAS,uBAAuB,SAAqC;AACnE,MAAI,CAAC,wBAAwB,OAAO,EAAG,QAAO;AAC9C,QAAM,QAAQ,QAAQ,MAAM,GAAG,EAAE;AACjC,QAAM,YAAY,MAAM,QAAQ,GAAG;AACnC,MAAI,aAAa,EAAG,QAAO;AAE3B,QAAMC,YAAW,MAAM,MAAM,GAAG,SAAS;AACzC,QAAM,QAAQ,MAAM,MAAM,YAAY,CAAC;AACvC,MAAI,CAAC,yDAAyD,KAAKA,SAAQ,EAAG,QAAO;AACrF,MAAI,MAAM,KAAK,EAAE,WAAW,EAAG,QAAO;AACtC,SAAOA;AACT;AAEA,SAAS,sBAAsB,SAAgD;AAC7E,QAAM,QAAQ,mBAAmB,KAAK,CAAC,CAAC,KAAK,MAAM,UAAU,OAAO;AACpE,MAAI,UAAU,OAAW,QAAO,MAAM,CAAC;AAEvC,QAAM,WAAW,QAAQ,WAAW,GAAG;AACvC,QAAM,QAAQ,WAAW,QAAQ,MAAM,CAAC,IAAI;AAC5C,aAAW,QAAQ,mBAAmB;AACpC,UAAM,YAAY,GAAG,KAAK,SAAS;AACnC,QAAI,CAAC,MAAM,WAAW,SAAS,EAAG;AAClC,UAAM,SAAS,MAAM,MAAM,UAAU,MAAM;AAC3C,QAAI,OAAO,WAAW,EAAG;AACzB,QAAI,UAAU;AACZ,UAAI,KAAK,aAAa,QAAQ,EAAE,KAAK,mBAAmB,KAAK,SAAS,MAAM,EAAG;AAAA,IACjF,WAAW,CAAC,KAAK,QAAQ,MAAM,EAAG;AAClC,WAAO,OAAO,KAAK,kBAAkB,aAAa,KAAK,cAAc,MAAM,IAAI,KAAK;AAAA,EACtF;AAEA,SAAO;AACT;AAEO,IAAM,8BAAN,MAAkC;AAAA,EACvC,SAAS,OAAgD;AACvD,QAAI,CAAC,0BAA0B,KAAK,GAAG;AACrC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,QAAI,MAAM,SAAS,IAAI,GAAG;AACxB,aAAO,EAAE,QAAQ,cAAc,QAAQ,wDAAwD;AAAA,IACjG;AAEA,UAAM,aAAa,wBAAwB,KAAK;AAChD,QAAI,eAAe,QAAW;AAC5B,aAAO,EAAE,QAAQ,cAAc,QAAQ,qEAAqE;AAAA,IAC9G;AACA,QAAI,WAAW,0BAA0B;AACvC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF;AACA,QAAI,CAAC,WAAW,SAAS,MAAM,iBAAiB,GAAG;AACjD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,UAAM,oBAAoB,uBAAuB,WAAW,OAAO;AACnE,UAAMC,iBACJ,sBAAsB,SAAY,sBAAsB,WAAW,OAAO,IAAI,CAAC,iBAAiB;AAClG,QAAIA,mBAAkB,UAAaA,eAAc,WAAW,GAAG;AAC7D,aAAO,EAAE,QAAQ,cAAc,QAAQ,+DAA+D;AAAA,IACxG;AAEA,WAAO,EAAE,QAAQ,YAAY,YAAY,EAAE,GAAG,YAAY,eAAAA,eAAc,EAAE;AAAA,EAC5E;AACF;;;ACnmBA,IAAM,0BAA0B,oBAAI,IAAyC,CAAC,SAAS,SAAS,CAAC;AACjG,IAAM,0BAA0B,oBAAI,IAAyC,CAAC,SAAS,SAAS,CAAC;AACjG,IAAM,qBAAqB,oBAAI,IAAyC;AAAA,EACtE,GAAG;AAAA,EACH,GAAG;AACL,CAAC;AACD,IAAM,0BAA0B,oBAAI,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAYD,SAAS,gBAAgBC,aAA4C;AACnE,SAAOA,YAAW,SAAS,SAAS,CAAC,IAAIA,YAAW;AACtD;AAEA,SAAS,WAAW,OAAoC;AACtD,SAAO,MAAM,WAAW,SAAS,SAAS,CAAC,IAAI,MAAM,WAAW,WAAW;AAC7E;AAEA,SAAS,sBAAsB,QAA2D;AACxF,QAAM,SAAS,OAAO,OAAO,WAAS,MAAM,WAAW,OAAO,EAAE,IAAI,UAAU;AAC9E,SAAO,OAAO,KAAK,WAAS,MAAM,WAAW,SAAS,MAAM,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,MAAM;AACzF;AAEA,SAASC,cAAaC,QAAiC;AACrD,SAAO;AAAA,IACL,KAAKA,OAAM,OAAO,OAAO;AAAA,IACzB,KAAKA,OAAM,OAAO,OAAO;AAAA,EAC3B;AACF;AAEA,SAASC,aAAY,QAAoB,QAAwC;AAC/E,QAAM,gBAAgBF,cAAa,MAAM;AACzC,QAAM,UAAU,OACb,OAAO,CAAAC,WAAS,qBAAqB,QAAQA,MAAK,CAAC,EACnD,IAAI,CAAAA,WAAS;AACZ,UAAM,UAAUD,cAAaC,MAAK;AAClC,WAAO;AAAA,MACL,KAAK,KAAK,IAAI,cAAc,KAAK,QAAQ,GAAG;AAAA,MAC5C,KAAK,KAAK,IAAI,cAAc,KAAK,QAAQ,GAAG;AAAA,IAC9C;AAAA,EACF,CAAC,EACA,KAAK,CAAC,MAAM,UAAU,KAAK,MAAM,MAAM,GAAG;AAC7C,QAAM,QAAQ,QAAQ,CAAC;AACvB,MAAI,CAAC,SAAS,MAAM,QAAQ,cAAc,IAAK,QAAO;AAEtD,MAAI,eAAe,MAAM;AACzB,aAAWA,UAAS,QAAQ,MAAM,CAAC,GAAG;AACpC,QAAIA,OAAM,MAAM,aAAc,QAAO;AACrC,mBAAe,KAAK,IAAI,cAAcA,OAAM,GAAG;AAAA,EACjD;AACA,SAAO,gBAAgB,cAAc;AACvC;AAEA,SAAS,cAAc,YAAuE;AAC5F,MAAI,WAAW,YAAY,SAAU,QAAO;AAC5C,MAAI,wBAAwB,IAAI,WAAW,OAAO,EAAG,QAAO;AAE5D,QAAME,kBAAiB,WAAW,QAAQ,MAAM,yBAAyB,IAAI,CAAC;AAC9E,MAAIA,oBAAmB,OAAQ,QAAO;AACtC,SAAOA,oBAAmB,UAAa,wBAAwB,IAAIA,eAAc,IAAI,UAAU;AACjG;AAEA,SAAS,yBAAyB,OAAsD;AACtF,QAAM,aAAa,wBAAwB,KAAK;AAChD,SAAO,YAAY,cAAc,KAAK,CAAAC,cAAY,qBAAqBA,WAAU,SAAS,CAAC,IAAI,aAAa;AAC9G;AAEA,SAAS,gBAAgB,YAAgD;AACvE,SAAO,WAAW,cAAc,WAAW,KAAK,WAAW,cAAc,CAAC,GAAG,YAAY,MAAM;AACjG;AAEA,SAASC,mBAAkB,OAA+B,QAAmC;AAC3F,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAEO,IAAM,oCAAN,MAAwC;AAAA,EAC7C,YACmB,oBAAoB,IAAI,kBAAkB,GAC1C,aAAa,IAAI,4BAA4B,GAC9D;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,kBAAkB,OAAmE;AACnF,UAAM,mBAAmB,KAAK,wBAAwB,KAAK;AAC3D,UAAM,cAAc,iBAAiB,OAAO,UAAQ,KAAK,MAAM,cAAc,UAAU;AACvF,UAAM,eAAe,YAClB;AAAA,MACC,CAAC,SAA+E,KAAK,WAAW;AAAA,IAClG,EACC;AAAA,MAAQ,UACP,KAAK,WAAW,QAAQ,eAAa;AACnC,cAAM,aAAa,wBAAwB,SAAS;AACpD,eAAO,eAAe,UACpB,CAAC,WAAW,cACX,WAAW,YAAY,UAAU,WAAW,YAAY,iBACvD,CAAC,gBAAgB,WAAW,UAAU,CAAC,IACvC,CAAC;AAAA,MACP,CAAC;AAAA,IACH;AACF,UAAM,mBAAmB,YAAY,KAAK,UAAQ,KAAK,WAAW,WAAW;AAC7E,UAAM,4BAA4B,iBAAiB;AAAA,MACjD,UACE,mBAAmB,IAAI,KAAK,MAAM,SAAS,KAC3C,KAAK,WAAW,eAChB,KAAK,uBAAuB,KAAK,KAAK;AAAA,IAC1C;AAEA,UAAM,mBAAmB,oBAAI,IAAyC;AACtE,QAAI,wBAAwB;AAC5B,UAAM,WAAW,iBAAiB,IAAI,UAAQ;AAC5C,UAAI,KAAK,WAAW,eAAe,CAAC,mBAAmB,IAAI,KAAK,MAAM,SAAS,EAAG,QAAO;AAEzF,YAAM,qBAAqB,KAAK,WAC7B,IAAI,wBAAwB,EAC5B,OAAO,gBAAc,eAAe,MAAS;AAChD,UAAI,mBAAmB,WAAW,EAAG,QAAO;AAE5C,YAAM,SAAS,wBAAwB,IAAI,KAAK,MAAM,SAAS,IAAI,mBAAmB;AACtF,UAAI,iBAAkB,kBAAiB,IAAI,MAAM;AACjD,iBAAW,cAAc,oBAAoB;AAC3C,cAAM,SAAS,gBAAgB,WAAW,UAAU;AACpD,YAAI,CAAC,gBAAgB,UAAU,KAAK,aAAa,KAAK,CAAAJ,WAAS,qBAAqB,QAAQA,MAAK,CAAC,GAAG;AACnG,kCAAwB;AACxB,2BAAiB,IAAI,MAAM;AAC3B;AAAA,QACF;AACA,YAAI,WAAW,oBAAoB,aAAa,KAAK,CAAAA,WAAS,qBAAqB,QAAQA,MAAK,CAAC,GAAG;AAClG,kCAAwB;AACxB,2BAAiB,IAAI,MAAM;AAC3B;AAAA,QACF;AACA,YAAI,WAAW,aAAa,aAAa,KAAK,CAAAA,WAAS,qBAAqB,QAAQA,MAAK,CAAC,GAAG;AAC3F,kCAAwB;AACxB,2BAAiB,IAAI,MAAM;AAC3B;AAAA,QACF;AACA,YAAIC,aAAY,QAAQ,YAAY,EAAG;AACvC,YAAI,aAAa,KAAK,CAAAD,WAAS,qBAAqB,QAAQA,MAAK,CAAC,GAAG;AACnE,kCAAwB;AACxB,2BAAiB,IAAI,MAAM;AAAA,QAC7B;AAAA,MACF;AACA,UAAI,iBAAiB,IAAI,MAAM,EAAG,QAAO;AAEzC,aAAO;AAAA,QACL,GAAG;AAAA,QACH,YAAY,KAAK,WAAW,OAAO,eAAa;AAC9C,gBAAM,aAAa,wBAAwB,SAAS;AACpD,iBACE,eAAe,UACf,WAAW,aACX,CAACC,aAAY,gBAAgB,WAAW,UAAU,GAAG,YAAY;AAAA,QAErE,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,QAAI,CAAC,iBAAiB,QAAQ,CAAC,6BAA6B,CAAC,sBAAuB,QAAO;AAE3F,WAAO,SAAS,IAAI,UAAQ;AAC1B,YAAM,SAAS,KAAK,eAAe,KAAK,MAAM,SAAS;AACvD,UAAI,KAAK,WAAW,eAAe,WAAW,UAAa,iBAAiB,IAAI,MAAM,GAAG;AACvF,eAAOG;AAAA,UACL,KAAK;AAAA,UACL;AAAA,QACF;AAAA,MACF;AACA,UACE,KAAK,WAAW,eAChB,KAAK,MAAM,cAAc,eACxB,6BAA6B,wBAC9B;AACA,eAAOA;AAAA,UACL,KAAK;AAAA,UACL;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,QAAQ,OAAqC,gBAAkE;AAC7G,UAAM,iBAAiB,KAAK,kBAAkB,KAAK;AACnD,UAAM,0BAA0B,oBAAI,IAAyC;AAC7E,eAAW,QAAQ,gBAAgB;AACjC,UAAI,KAAK,WAAW,YAAa;AACjC,UAAI,KAAK,WAAW,KAAK,eAAa,yBAAyB,SAAS,MAAM,MAAS,GAAG;AACxF,cAAM,SAAS,KAAK,eAAe,KAAK,MAAM,SAAS;AACvD,YAAI,WAAW,OAAW,yBAAwB,IAAI,MAAM;AAAA,MAC9D;AAAA,IACF;AAEA,QAAI,eAAe,WAAW,cAAc;AAC1C,UAAI,CAAC,wBAAwB,KAAM,QAAO,EAAE,eAAe,gBAAgB,eAAe;AAC1F,aAAO;AAAA,QACL,eAAe,eAAe,IAAI,UAAQ;AACxC,gBAAM,SAAS,KAAK,eAAe,KAAK,MAAM,SAAS;AACvD,iBAAO,KAAK,WAAW,eAAe,WAAW,UAAa,wBAAwB,IAAI,MAAM,IAC5FA,mBAAkB,KAAK,OAAO,+DAA+D,IAC7F;AAAA,QACN,CAAC;AAAA,QACD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,eAAe;AAC9B,UAAM,eAAe,OAAO,KAAK,WAAS,MAAM,WAAW,SAAS,UAAU,MAAM,WAAW,QAAQ;AACvG,UAAM,yBAAyB,OAAO;AAAA,MAAQ,WAC5C,MAAM,WAAW,YAAY,MAAM,WAAW,SAAS,UAAU,CAAC,MAAM,WAAW,WAAW,KAAK,IAAI,CAAC;AAAA,IAC1G;AACA,UAAM,cAAc,OAAO,OAAO,WAAS,MAAM,WAAW,OAAO,EAAE,IAAI,UAAU;AACnF,UAAM,mBAAmB,OAAO,IAAI,UAAU;AAC9C,UAAM,iBAAiB,oBAAI,IAAyC;AAEpE,UAAM,gBAAgB,eAAe,IAAI,UAAQ;AAC/C,UAAI,KAAK,WAAW,YAAa,QAAO;AACxC,YAAM,SAAS,KAAK,eAAe,KAAK,MAAM,SAAS;AACvD,UAAI,WAAW,OAAW,QAAO;AAEjC,YAAM,yBAAyB,KAAK,sBAAsB,CAAC,GACxD,IAAI,wBAAwB,EAC5B,OAAO,WAAS,UAAU,MAAS;AACtC,UACE,sBAAsB;AAAA,QAAK,WACzB,iBAAiB,KAAK,CAAAJ,WAAS,qBAAqB,gBAAgB,MAAM,UAAU,GAAGA,MAAK,CAAC;AAAA,MAC/F,GACA;AACA,uBAAe,IAAI,MAAM;AAAA,MAC3B;AAEA,YAAM,aAAa,KAAK,WAAW,OAAO,eAAa;AACrD,cAAM,QAAQ,yBAAyB,SAAS;AAChD,YAAI,UAAU,OAAW,QAAO;AAChC,cAAM,SAAS,gBAAgB,MAAM,UAAU;AAC/C,YAAI,WAAW,oBAAoB,iBAAiB,KAAK,CAAAA,WAAS,qBAAqB,QAAQA,MAAK,CAAC,GAAG;AACtG,yBAAe,IAAI,MAAM;AACzB,iBAAO;AAAA,QACT;AACA,YAAI,CAAC,gBAAgB,KAAK,GAAG;AAC3B,cAAI,iBAAiB,KAAK,CAAAA,WAAS,qBAAqB,QAAQA,MAAK,CAAC,EAAG,gBAAe,IAAI,MAAM;AAClG,iBAAO;AAAA,QACT;AACA,cAAM,aAAa,wBAAwB,SAAS;AACpD,YAAI,eAAe,OAAW,QAAO;AACrC,YAAI,WAAW,aAAa,iBAAiB,KAAK,CAAAA,WAAS,qBAAqB,QAAQA,MAAK,CAAC,GAAG;AAC/F,yBAAe,IAAI,MAAM;AACzB,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,0BAA0B,QAAQ,MAAM,EAAG,QAAO;AAE3D,cAAM,kBACJ,CAAC,gBACD,uBAAuB,KAAK,CAAAA,WAAS,qBAAqB,QAAQA,MAAK,CAAC,KACxE,CAACC,aAAY,QAAQ,sBAAsB;AAC7C,cAAM,gCACJ,cAAc,UAAU,MAAM,WAAW,YAAY,KAAK,CAAAD,WAAS,qBAAqB,QAAQA,MAAK,CAAC;AACxG,YAAI,mBAAmB,8BAA+B,gBAAe,IAAI,MAAM;AAC/E,eAAO;AAAA,MACT,CAAC;AACD,aAAO,WAAW,WAAW,KAAK,WAAW,SAAS,OAAO,EAAE,GAAG,MAAM,WAAW;AAAA,IACrF,CAAC;AAED,QAAI,CAAC,eAAe,KAAM,QAAO,EAAE,eAAe,eAAe;AAEjE,WAAO;AAAA,MACL,eAAe,cAAc,IAAI,UAAQ;AACvC,cAAM,SAAS,KAAK,eAAe,KAAK,MAAM,SAAS;AACvD,eAAO,KAAK,WAAW,eAAe,WAAW,UAAa,eAAe,IAAI,MAAM,IACnFI;AAAA,UACE,KAAK;AAAA,UACL;AAAA,QACF,IACA;AAAA,MACN,CAAC;AAAA,MACD,gBAAgB;AAAA,QACd,QAAQ;AAAA,QACR,OAAO,OAAO;AAAA,UAAI,WAChBA;AAAA,YACE,MAAM;AAAA,YACN;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,sBACE,SACA,OACA,gBAC0B;AAC1B,QAAI,eAAe,WAAW,aAAc,QAAO;AAEnD,UAAM,cAAc,MACjB;AAAA,MACC,CAAC,SACC,KAAK,WAAW,eAAe,mBAAmB,IAAI,KAAK,MAAM,SAAS;AAAA,IAC9E,EACC,QAAQ,UAAQ;AACf,YAAM,SAAS,KAAK,eAAe,KAAK,MAAM,SAAS;AACvD,UAAI,WAAW,OAAW,QAAO,CAAC;AAClC,aAAO,KAAK,WACT,IAAI,uBAAuB,EAC3B,OAAO,gBAAc,eAAe,MAAS,EAC7C,IAAI,iBAAe,EAAE,YAAY,OAAO,EAAE;AAAA,IAC/C,CAAC,EACA;AAAA,MACC,CAAC,EAAE,YAAY,OAAO,MACpB,WAAW,oBACX,WAAW,aACX,CAAC,KAAK,0BAA0B,gBAAgB,WAAW,UAAU,GAAG,eAAe,MAAM;AAAA,IACjG;AACF,QAAI,CAAC,YAAY,OAAQ,QAAO;AAEhC,UAAM,cAAc,sBAAsB,eAAe,MAAM;AAC/D,QACE,YAAY;AAAA,MACV,CAAC,EAAE,WAAW,MACZ,cAAc,UAAU,MAAM,WAC9B,YAAY,KAAK,CAAAJ,WAAS,qBAAqB,gBAAgB,WAAW,UAAU,GAAGA,MAAK,CAAC;AAAA,IACjG,GACA;AACA,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,QACE,YAAY;AAAA,MAAK,CAAC,EAAE,WAAW,MAC7B,YAAY,KAAK,CAAAA,WAAS,qBAAqB,gBAAgB,WAAW,UAAU,GAAGA,MAAK,CAAC;AAAA,IAC/F,GACA;AACA,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,QACE;AAAA,MACJ;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,uBAAuB,OAAwC;AAC7D,QAAI,wBAAwB,IAAI,MAAM,SAAS,GAAG;AAChD,UAAI,MAAM,YAAY,UAAW,QAAO;AACxC,YAAM,SAAS,MAAM,MAAM,MAAM,eAAe,EAAE,OAAO,OAAO;AAChE,aAAO,OAAO,KAAK,WAAS;AAC1B,cAAM,iBAAiB,KAAK,WAAW,SAAS,KAAK;AACrD,eACE,eAAe,WAAW,gBAC1B,eAAe,WAAW,cAAc,KAAK,CAAAG,cAAY,qBAAqBA,WAAU,SAAS,CAAC;AAAA,MAEtG,CAAC;AAAA,IACH;AAEA,QAAI,CAAC,wBAAwB,IAAI,MAAM,SAAS,EAAG,QAAO;AAC1D,QAAI,MAAM,YAAY,UAAW,QAAO;AACxC,UAAM,SAAS,8BAA8B,MAAM,KAAK;AACxD,WACE,OAAO,WAAW,gBAClB,OAAO,aAAa,KAAK,iBAAe,qBAAqB,YAAY,UAAU,SAAS,CAAC;AAAA,EAEjG;AAAA,EAEQ,wBAAwB,OAAmE;AACjG,UAAM,yBAAyB,CAC7B,eAEA,MACG;AAAA,MACC,CAAC,SACC,KAAK,WAAW,eAAe,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,IACtE,EACC;AAAA,MAAQ,UACP,KAAK,WAAW,QAAQ,eAAa;AACnC,cAAM,aAAa,wBAAwB,SAAS;AACpD,eAAO,eAAe,SAAY,CAAC,IAAI,CAAC,gBAAgB,WAAW,UAAU,CAAC;AAAA,MAChF,CAAC;AAAA,IACH;AACJ,UAAM,cAAc,uBAAuB,uBAAuB;AAClE,UAAM,cAAc,uBAAuB,uBAAuB;AAClE,UAAM,uBAAuB,MAC1B;AAAA,MACC,CAAC,SACC,KAAK,WAAW,eAAe,wBAAwB,IAAI,KAAK,MAAM,SAAS;AAAA,IACnF,EACC;AAAA,MAAQ,UACP,KAAK,WAAW,QAAQ,eAAa;AACnC,cAAM,aAAa,wBAAwB,SAAS;AACpD,eAAO,YAAY,YAAY,CAAC,gBAAgB,WAAW,UAAU,CAAC,IAAI,CAAC;AAAA,MAC7E,CAAC;AAAA,IACH;AACF,UAAM,mBAAmB,CAAC,eACxB,MAAM,QAAQ,UAAQ;AACpB,UACE,KAAK,WAAW,eAChB,CAAC,WAAW,IAAI,KAAK,MAAM,SAAS,KACpC,CAAC,KAAK,uBAAuB,KAAK,KAAK,GACvC;AACA,eAAO,CAAC;AAAA,MACV;AACA,UAAI,KAAK,MAAM,eAAe,OAAW,QAAO,CAAC,CAAC,CAAC;AACnD,YAAM,iBAAiB,KAAK,kBAAkB,SAAS,KAAK,MAAM,UAAU;AAC5E,aAAO,eAAe,SAAS,aAAa,CAAC,eAAe,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC;AAAA,IACrF,CAAC;AACH,UAAM,wBAAwB,iBAAiB,uBAAuB;AACtE,UAAM,wBAAwB,iBAAiB,uBAAuB;AACtE,UAAM,8BAA8B,YAAY;AAAA,MAC9C,YAAU,YAAY,KAAK,CAAAH,WAAS,qBAAqB,QAAQA,MAAK,CAAC,KAAK,CAACC,aAAY,QAAQ,WAAW;AAAA,IAC9G;AACA,UAAM,mBAAmB,oBAAI,IAAyC;AACtE,UAAM,8BAA8B,qBAAqB;AAAA,MAAK,YAC5D,YAAY,KAAK,CAAAD,WAAS,qBAAqB,QAAQA,MAAK,CAAC;AAAA,IAC/D;AACA,QAAI,+BAA+B,6BAA6B;AAC9D,uBAAiB,IAAI,gBAAgB;AACrC,uBAAiB,IAAI,gBAAgB;AAAA,IACvC;AACA,QAAI,YAAY,KAAK,YAAU,sBAAsB,KAAK,CAAAA,WAAS,qBAAqB,QAAQA,MAAK,CAAC,CAAC,GAAG;AACxG,uBAAiB,IAAI,gBAAgB;AAAA,IACvC;AACA,QAAI,YAAY,KAAK,YAAU,sBAAsB,KAAK,CAAAA,WAAS,qBAAqB,QAAQA,MAAK,CAAC,CAAC,GAAG;AACxG,uBAAiB,IAAI,gBAAgB;AAAA,IACvC;AAEA,WAAO,MAAM,IAAI,UAAQ;AACvB,YAAM,SAAS,KAAK,eAAe,KAAK,MAAM,SAAS;AACvD,UAAI,KAAK,WAAW,eAAe,WAAW,OAAW,QAAO;AAChE,UAAI,iBAAiB,IAAI,MAAM,GAAG;AAChC,eAAOI;AAAA,UACL,KAAK;AAAA,UACL;AAAA,QACF;AAAA,MACF;AACA,UAAI,WAAW,iBAAkB,QAAO;AACxC,aAAO;AAAA,QACL,GAAG;AAAA,QACH,YAAY,KAAK,WAAW,OAAO,eAAa;AAC9C,gBAAM,aAAa,wBAAwB,SAAS;AACpD,iBACE,eAAe,UACf,WAAW,aACX,CAACH,aAAY,gBAAgB,WAAW,UAAU,GAAG,WAAW;AAAA,QAEpE,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,0BAA0B,QAAoB,QAA6C;AACjG,UAAM,aAAa,OAAO,OAAO,WAAS,MAAM,WAAW,SAAS,MAAM;AAC1E,UAAM,mBAAmB,OAAO;AAAA,MAC9B,CAAC,UACC,MAAM,WAAW,SAAS;AAAA,IAC9B;AACA,UAAM,eAAe,WAAW,SAAS,KAAK,WAAW,MAAM,WAAS,MAAM,WAAW,QAAQ;AACjG,QAAI,cAAc;AAChB,aAAO,CAAC,iBAAiB;AAAA,QACvB,WAAS,MAAM,WAAW,WAAW,qBAAqB,QAAQ,MAAM,WAAW,WAAW,KAAK;AAAA,MACrG;AAAA,IACF;AACA,WAAOA;AAAA,MACL;AAAA,MACA,iBAAiB,OAAO,WAAS,MAAM,WAAW,QAAQ,EAAE,IAAI,WAAS,MAAM,WAAW,WAAW,KAAK;AAAA,IAC5G;AAAA,EACF;AAAA,EAEQ,eACN,WACiD;AACjD,QAAI,wBAAwB,IAAI,SAAS,EAAG,QAAO;AACnD,QAAI,wBAAwB,IAAI,SAAS,EAAG,QAAO;AACnD,WAAO;AAAA,EACT;AACF;;;ACtgBO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YACmB,oBAAoB,IAAI,yBAAyB,GACjD,eAAe,IAAI,iCAAiC,GACpD,aAAa,IAAI,4BAA4B,GAC9D;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAEH,UAAU,OAAyE;AACjF,UAAM,UAAoB,CAAC;AAC3B,UAAM,OAAO,oBAAI,IAAY;AAE7B,eAAW,SAAS,MAAM,MAAM,QAAQ;AACtC,UAAI,KAAK,IAAI,KAAK,EAAG;AACrB,WAAK,IAAI,KAAK;AAEd,YAAM,iBAAiB,KAAK,WAAW,SAAS,KAAK;AACrD,UAAI,eAAe,WAAW,cAAc,eAAe,WAAW,cAAc,WAAW,GAAG;AAChG,cAAM,IAAI,MAAM,kEAAkE;AAAA,MACpF;AACA,cAAQ,KAAK,KAAK,kBAAkB,cAAc,MAAM,WAAW,YAAY,KAAK,CAAC;AAAA,IACvF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,OAAyE;AACjF,UAAM,UAAoB,CAAC;AAC3B,UAAM,OAAO,oBAAI,IAAY;AAE7B,eAAW,eAAe,MAAM,MAAM,cAAc;AAClD,YAAM,YAAY,KAAK,aAAa,OAAO,WAAW;AACtD,UAAI,KAAK,IAAI,SAAS,EAAG;AACzB,WAAK,IAAI,SAAS;AAElB,YAAM,aAAa,wBAAwB,SAAS;AACpD,UAAI,eAAe,UAAa,WAAW,cAAc,WAAW,GAAG;AACrE,cAAM,IAAI,MAAM,iEAAiE;AAAA,MACnF;AACA,cAAQ,KAAK,KAAK,kBAAkB,cAAc,MAAM,WAAW,YAAY,SAAS,CAAC;AAAA,IAC3F;AAEA,WAAO;AAAA,EACT;AACF;;;AC7CA,IAAM,2BAA2B;AACjC,IAAMI,iBAAgB;AAEf,SAAS,iCACd,OACA,YAC4B;AAC5B,MAAIA,eAAc,KAAK,KAAK,GAAG;AAC7B,WAAO,EAAE,QAAQ,cAAc,QAAQ,8DAA8D;AAAA,EACvG;AAEA,QAAM,SAAS,CAAC,GAAG,IAAI,IAAI,MAAM,MAAM,wBAAwB,EAAE,OAAO,WAAS,MAAM,SAAS,CAAC,CAAC,CAAC;AACnG,aAAW,SAAS,QAAQ;AAC1B,UAAM,iBAAiB,WAAW,SAAS,KAAK;AAChD,QAAI,eAAe,WAAW,cAAc;AAC1C,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,QAAQ,mBAAmB,KAAK,UAAU,KAAK,CAAC,kGAAkG,eAAe,MAAM;AAAA,MACzK;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,UAAU,OAAO,EAAE,OAAO,EAAE;AAC/C;AAEO,SAAS,0BACd,OACA,YAC4B;AAC5B,MAAI,MAAM,YAAY,WAAW;AAC/B,WAAO,EAAE,QAAQ,cAAc,QAAQ,kEAAkE;AAAA,EAC3G;AACA,MAAI,MAAM,cAAc,WAAW;AACjC,WAAO,EAAE,QAAQ,cAAc,QAAQ,yDAAyD;AAAA,EAClG;AACA,MAAI,MAAM,eAAe,UAAa,IAAI,kBAAkB,EAAE,SAAS,MAAM,UAAU,EAAE,SAAS,YAAY;AAC5G,WAAO,EAAE,QAAQ,cAAc,QAAQ,oEAAoE;AAAA,EAC7G;AACA,SAAO,iCAAiC,MAAM,OAAO,UAAU;AACjE;;;ACeA,SAASC,aAAY,MAAc,OAAuB;AACxD,MAAI,OAAO,MAAO,QAAO;AACzB,MAAI,OAAO,MAAO,QAAO;AACzB,SAAO;AACT;AAEA,SAAS,oBAAoB,WAAuC;AAClE,MAAI,UAAU,YAAY,WAAY,QAAO;AAC7C,MAAI,UAAU,kBAAkB,QAAS,QAAO;AAEhD,SAAO,CAAC,GAAG,sBAAsB,SAAS,CAAC,EAAE;AAAA,IAC3C,SACE,QAAQ,WACR,QAAQ,aACR,QAAQ,gBACR,IAAI,WAAW,QAAQ,KACvB,IAAI,WAAW,UAAU,KACzB,IAAI,WAAW,aAAa;AAAA,EAChC;AACF;AAEA,SAAS,oBAAoB,WAAuC;AAClE,MAAI,UAAU,YAAY,WAAY,QAAO;AAC7C,MAAI,UAAU,kBAAkB,QAAS,QAAO;AAEhD,SAAO,CAAC,GAAG,sBAAsB,SAAS,CAAC,EAAE;AAAA,IAC3C,SACE,QAAQ,WACR,QAAQ,aACR,QAAQ,gBACR,IAAI,WAAW,QAAQ,KACvB,IAAI,WAAW,UAAU,KACzB,IAAI,WAAW,aAAa;AAAA,EAChC;AACF;AAEA,SAAS,sBAAsB,WAAuC;AACpE,SAAO,UAAU,YAAY,aAAa,sBAAsB,SAAS,EAAE,IAAI,OAAO;AACxF;AAEA,SAAS,oBACP,YACA,KAC+B;AAC/B,SAAO,WAAW,KAAK,eAAa,sBAAsB,SAAS,EAAE,IAAI,GAAG,CAAC;AAC/E;AAEA,SAAS,iBAAiB,MAA4B,OAAsC;AAC1F,SACE,KAAK,OAAO,WAAW,MAAM,OAAO,UAAU,KAAK,OAAO,MAAM,CAAC,OAAO,UAAU,UAAU,MAAM,OAAO,KAAK,CAAC;AAEnH;AAEA,SAAS,qBACP,YAC8C;AAC9C,SAAO,eAAe,UAAa,WAAW,cAAc,SAAS;AACvE;AAEA,SAAS,kBAAkB,MAAyB,OAAmC;AACrF,SAAO,KAAK,WAAW,MAAM,UAAU,KAAK,MAAM,CAACC,WAAU,UAAUA,cAAa,MAAM,KAAK,CAAC;AAClG;AAEA,SAAS,WACP,OACA,MACA,QACA,YACmB;AACnB,SAAO,EAAE,QAAQ,UAAU,OAAO,MAAM,QAAQ,WAAW;AAC7D;AAEO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YACmB,UAAU,IAAI,0BAA0B,GACxC,aAAa,IAAI,4BAA4B,GAC9D;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,KAAK,SAAgE;AACnE,QAAI,QAAQ,WAAW,WAAW,cAAc;AAC9C,aAAO,EAAE,QAAQ,cAAc,OAAO,QAAQ,WAAW,MAAM;AAAA,IACjE;AAEA,QAAI;AACJ,QAAI;AACJ,QAAI,QAAQ,SAAS,SAAS;AAC5B,YAAM,cAAc,KAAK,gBAAgB,QAAQ,WAAW,MAAM;AAClE,eAAS;AACT,YAAM,WAAW,KAAK,cAAc,aAAa,QAAQ,UAAU;AACnE,UAAI,aAAa,OAAW,QAAO;AACnC,iBAAW,KAAK,UAAU,WAAW;AAAA,IACvC,OAAO;AACL,YAAM,cAAc,KAAK,gBAAgB,QAAQ,WAAW,MAAM;AAClE,eAAS;AACT,UAAI,yCAAyC,YAAY,IAAI,WAAS,MAAM,MAAM,KAAK,CAAC,GAAG;AACzF,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,OAAO,YAAY;AAAA,YAAI,WACrB;AAAA,cACE,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,YAAM,WAAW,KAAK,cAAc,aAAa,QAAQ,UAAU;AACnE,UAAI,aAAa,OAAW,QAAO;AACnC,iBAAW,KAAK,UAAU,WAAW;AAAA,IACvC;AACA,QAAI,SAAS,WAAW,cAAc;AACpC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,OAAO;AAAA,UAAI,WAChB;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SAAS;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,aAAa,SAAS;AAC5B,UAAM,sBAAsB,CAAC,GAAG,IAAI,IAAI,WAAW,IAAI,eAAa,UAAU,KAAK,CAAC,CAAC;AACrF,QAAI,oBAAoB,SAAS,KAAK,QAAQ,WAAW,KAAK,mBAAmB,GAAG;AAClF,aAAO,KAAK;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS,WAAW,oBAAoB,SAAS,GAAG;AAC9D,UAAI,QAAQ,WAAW,KAAK,mBAAmB,GAAG;AAChD,eAAO,KAAK;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA,YAAM,sBAAsB,IAAI;AAAA,QAC9B,QAAQ,WAAW,OAAO,QAAQ,WAAS,MAAM,MAAM,aAAa,IAAI,iBAAe,YAAY,QAAQ,CAAC;AAAA,MAC9G;AACA,UAAI,KAAK,sBAAsB,QAAQ,YAAY,mBAAmB,GAAG;AACvE,eAAO,KAAK;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,2BAA2B,QAAQ,oBAAoB,mBAAmB,EAAE,OAAO,GAAG;AACxF,aAAO,KAAK;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,IAAI,IAAI,QAAQ,kBAAkB;AACnD,UAAM,aAAa,oBAAoB,OAAO,eAAa,CAAC,SAAS,IAAI,SAAS,CAAC;AACnF,UAAM,QAAQ,OAAO,IAAI,CAAC,OAAO,WAA8B;AAAA,MAC7D,QAAQ;AAAA,MACR,OAAO,MAAM;AAAA,MACb,YAAY,UAAU,IAAI,aAAa,CAAC;AAAA,IAC1C,EAAE;AACF,WAAO,EAAE,QAAQ,aAAa,MAAM;AAAA,EACtC;AAAA,EAEQ,gBAAmB,QAAsF;AAC/G,WAAO,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,UAAU;AACvC,YAAM,WAAW,MAAM,WAAW,WAAW,WAAW,KAAK,WAAW,WAAW;AACnF,UAAI,SAAU,QAAO;AACrB,YAAM,QAAQD,aAAY,KAAK,WAAW,WAAW,OAAO,MAAM,WAAW,WAAW,KAAK;AAC7F,aAAO,SAASA,aAAY,KAAK,MAAM,IAAI,MAAM,MAAM,EAAE;AAAA,IAC3D,CAAC;AAAA,EACH;AAAA,EAEQ,UAAU,QAAkF;AAClG,UAAM,aAAiC,CAAC;AAExC,eAAW,SAAS,QAAQ;AAC1B,YAAM,eAAe,CAAC,GAAG,IAAI,IAAI,MAAM,MAAM,MAAM,CAAC;AACpD,YAAM,cAAgD,CAAC;AACvD,iBAAW,SAAS,cAAc;AAChC,cAAM,iBAAiB,KAAK,WAAW,SAAS,KAAK;AACrD,YAAI,eAAe,WAAW,cAAc,CAAC,qBAAqB,eAAe,UAAU,GAAG;AAC5F,iBAAO;AAAA,YACL,QAAQ;AAAA,YACR,OAAO,MAAM;AAAA,YACb,MAAM;AAAA,YACN,QAAQ,mBAAmB,KAAK,UAAU,KAAK,CAAC;AAAA,UAClD;AAAA,QACF;AACA,oBAAY,KAAK,eAAe,UAAU;AAAA,MAC5C;AAEA,YAAM,aAAa,KAAK,QAAQ,UAAU,EAAE,GAAG,OAAO,OAAO,EAAE,QAAQ,aAAa,EAAE,CAAC;AACvF,iBAAW,CAAC,OAAO,KAAK,KAAK,WAAW,QAAQ,GAAG;AACjD,cAAM,mBAAmB,YAAY,KAAK;AAC1C,cAAM,sBAAsB,wBAAwB,KAAK;AACzD,YACE,qBAAqB,UACrB,CAAC,qBAAqB,mBAAmB,KACzC,CAAC,kBAAkB,oBAAoB,eAAe,iBAAiB,aAAa,GACpF;AACA,iBAAO;AAAA,YACL,QAAQ;AAAA,YACR,OAAO,MAAM;AAAA,YACb,MAAM;AAAA,YACN,QAAQ;AAAA,UACV;AAAA,QACF;AACA,mBAAW,KAAK,EAAE,OAAO,YAAY,qBAAqB,OAAO,MAAM,MAAM,CAAC;AAAA,MAChF;AAAA,IACF;AAEA,WAAO,EAAE,QAAQ,WAAW,WAAW;AAAA,EACzC;AAAA,EAEQ,cACN,QACA,YACoC;AACpC,UAAM,WAAW,oBAAoB,YAAY,SAAS;AAC1D,QAAI,aAAa,OAAW,QAAO;AACnC,QAAI,SAAS,YAAY,WAAW;AAClC,aAAO,KAAK;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,iCAAiC,SAAS,OAAO,KAAK,UAAU;AAC/E,QAAI,OAAO,WAAW,cAAc;AAClC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,OAAO;AAAA,UAAI,WAChB;AAAA,YACE,MAAM;AAAA,YACN;AAAA,YACA,iEAAiE,OAAO,MAAM;AAAA,YAC9E;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,QAAI,OAAO,MAAM,OAAO,WAAW,EAAG,QAAO;AAC7C,QAAI,OAAO,MAAM,WAAS,iBAAiB,MAAM,OAAO,OAAO,KAAK,CAAC,GAAG;AACtE,aAAO,KAAK,uBAAuB,QAAQ,OAAO,MAAM,MAAM;AAAA,IAChE;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,cACN,QACA,YACoC;AACpC,UAAM,WAAW,oBAAoB,YAAY,SAAS;AAC1D,QAAI,aAAa,OAAW,QAAO;AACnC,QAAI,SAAS,YAAY,WAAW;AAClC,aAAO,KAAK;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,iCAAiC,SAAS,KAAK;AAC9D,QAAI,OAAO,WAAW,cAAc;AAClC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,OAAO;AAAA,UAAI,WAChB;AAAA,YACE,MAAM;AAAA,YACN;AAAA,YACA,iEAAiE,OAAO,MAAM;AAAA,YAC9E;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,QAAI,OAAO,MAAM,aAAa,WAAW,KAAK,SAAS,MAAM,WAAW,EAAG,QAAO;AAClF,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,uBACN,QACA,qBAAwC,CAAC,GACjB;AACxB,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,OAAO,OAAO,IAAI,CAAC,OAAO,WAAW;AAAA,QACnC,QAAQ;AAAA,QACR,OAAO,MAAM;AAAA,QACb,YAAY,CAAC;AAAA,QACb,GAAI,UAAU,KAAK,mBAAmB,SAAS,IAAI,EAAE,mBAAmB,IAAI,CAAC;AAAA,MAC/E,EAAE;AAAA,IACJ;AAAA,EACF;AAAA,EAEQ,UAAU,QAAkF;AAClG,UAAM,aAAiC,CAAC;AAExC,eAAW,SAAS,QAAQ;AAC1B,iBAAW,SAAS,KAAK,QAAQ,UAAU,KAAK,GAAG;AACjD,cAAM,aAAa,wBAAwB,KAAK;AAChD,YAAI,CAAC,qBAAqB,UAAU,GAAG;AACrC,iBAAO;AAAA,YACL,QAAQ;AAAA,YACR,OAAO,MAAM;AAAA,YACb,MAAM;AAAA,YACN,QAAQ;AAAA,UACV;AAAA,QACF;AACA,mBAAW,KAAK,EAAE,OAAO,YAAY,OAAO,MAAM,MAAM,CAAC;AAAA,MAC3D;AAAA,IACF;AAEA,WAAO,EAAE,QAAQ,WAAW,WAAW;AAAA,EACzC;AAAA,EAEQ,sBACN,YACA,qBACS;AACT,WAAO,WAAW,OAAO,qBAAqB,EAAE,KAAK,eAAa;AAChE,YAAM,SAAS,8BAA8B,UAAU,KAAK;AAC5D,UAAI,OAAO,WAAW,aAAc,QAAO;AAE3C,aAAO,OAAO,aAAa;AAAA,QAAK,iBAC9B,CAAC,GAAG,mBAAmB,EAAE,KAAK,CAAAC,cAAY,qBAAqB,YAAY,UAAUA,SAAQ,CAAC;AAAA,MAChG;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,WACN,QACA,MACA,QACA,YACwB;AACxB,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,OAAO,OAAO,IAAI,WAAS,WAAW,MAAM,OAAO,MAAM,QAAQ,UAAU,CAAC;AAAA,IAC9E;AAAA,EACF;AACF;;;ACraA,IAAMC,2BAA0B,oBAAI,IAAyC,CAAC,SAAS,SAAS,CAAC;AACjG,IAAMC,2BAA0B,oBAAI,IAAyC,CAAC,SAAS,SAAS,CAAC;AACjG,IAAMC,sBAAqB,oBAAI,IAAyC;AAAA,EACtE,GAAGF;AAAA,EACH,GAAGC;AACL,CAAC;AACD,IAAM,yBAAyB,oBAAI,IAAyC;AAAA,EAC1E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAIM,SAAS,2BAA2B,WAA4E;AACrH,MAAID,yBAAwB,IAAI,SAAS,EAAG,QAAO;AACnD,SAAO,uBAAuB,IAAI,SAAS,IAAI,kBAAkB;AACnE;AAkBA,SAASG,iBAAgBC,aAA4C;AACnE,SAAOA,YAAW,SAAS,SAAS,CAAC,IAAIA,YAAW;AACtD;AAEA,SAAS,oBAAoB,MAAyB,OAAmC;AACvF,SAAO,KAAK,KAAK,kBAAgB,MAAM,KAAK,mBAAiB,qBAAqB,cAAc,aAAa,CAAC,CAAC;AACjH;AAEA,SAASC,cAAaC,QAAiC;AACrD,SAAO;AAAA,IACL,KAAKA,OAAM,OAAO,OAAO;AAAA,IACzB,KAAKA,OAAM,OAAO,OAAO;AAAA,EAC3B;AACF;AAEA,SAASC,aAAY,QAAoB,QAAwC;AAC/E,QAAM,gBAAgBF,cAAa,MAAM;AACzC,QAAM,UAAU,OACb,OAAO,CAAAC,WAAS,qBAAqB,QAAQA,MAAK,CAAC,EACnD,IAAI,CAAAA,WAAS;AACZ,UAAM,UAAUD,cAAaC,MAAK;AAClC,WAAO;AAAA,MACL,KAAK,KAAK,IAAI,cAAc,KAAK,QAAQ,GAAG;AAAA,MAC5C,KAAK,KAAK,IAAI,cAAc,KAAK,QAAQ,GAAG;AAAA,IAC9C;AAAA,EACF,CAAC,EACA,KAAK,CAAC,MAAM,UAAU,KAAK,MAAM,MAAM,GAAG;AAC7C,QAAM,QAAQ,QAAQ,CAAC;AACvB,MAAI,CAAC,SAAS,MAAM,QAAQ,cAAc,IAAK,QAAO;AAEtD,MAAI,eAAe,MAAM;AACzB,aAAWA,UAAS,QAAQ,MAAM,CAAC,GAAG;AACpC,QAAIA,OAAM,MAAM,aAAc,QAAO;AACrC,mBAAe,KAAK,IAAI,cAAcA,OAAM,GAAG;AAAA,EACjD;AACA,SAAO,gBAAgB,cAAc;AACvC;AAEA,SAASE,mBAAkB,OAAkD;AAC3E,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;AAEO,IAAM,sCAAN,MAA0C;AAAA,EAC/C,YACmB,oBAAoB,IAAI,kBAAkB,GAC1C,aAAa,IAAI,4BAA4B,GAC9D;AAFiB;AACA;AAAA,EAChB;AAAA,EAEH,QAAQ,OAAmE;AACzE,UAAM,aAAa,KAAK,oBAAoB,KAAK;AACjD,UAAM,iBAAiB,oBAAI,IAAY;AACvC,UAAM,yBAAyB,oBAAI,IAAyB;AAE5D,SAAK,2BAA2B,OAAO,YAAY,cAAc;AAEjE,eAAW,aAAa,WAAW,OAAO,CAAAC,eAAaA,WAAU,cAAc,cAAc,GAAG;AAC9F,YAAM,UAAU,WAAW;AAAA,QACzB,YACE,OAAO,cAAc,kBACrB,OAAO,WAAW,UAAU,UAC5B,qBAAqB,OAAO,OAAO,UAAU,KAAK,KAClD,oBAAoB,OAAO,YAAY,UAAU,UAAU;AAAA,MAC/D;AACA,UAAI,CAAC,QAAQ,OAAQ;AAErB,UAAI,QAAQ,KAAK,YAAU,OAAO,cAAc,sBAAsB,GAAG;AACvE,uBAAe,IAAI,UAAU,MAAM;AACnC,mBAAW,UAAU,QAAS,gBAAe,IAAI,OAAO,MAAM;AAC9D;AAAA,MACF;AAEA,YAAM,gBAAgB,IAAI,IAAI,QAAQ,IAAI,WAAS,MAAM,MAAM,CAAC;AAChE,YAAM,oBACJ,CAAC,UAAU,aACX,cAAc,SAAS,KACvB,UAAU,WAAW;AAAA,QAAM,CAAAC,cACzBH;AAAA,UACE,UAAU;AAAA,UACV,QACG;AAAA,YAAO,WACN,MAAM,WAAW,KAAK,mBAAiB,2BAA2B,eAAeG,SAAQ,CAAC;AAAA,UAC5F,EACC,IAAI,WAAS,MAAM,KAAK;AAAA,QAC7B;AAAA,MACF;AACF,UAAI,mBAAmB;AACrB,YAAI,CAAC,UAAU,cAAc;AAC3B,yBAAe,IAAI,UAAU,MAAM;AACnC,qBAAW,SAAS,QAAS,gBAAe,IAAI,MAAM,MAAM;AAC5D;AAAA,QACF;AACA,cAAM,aAAa,uBAAuB,IAAI,UAAU,KAAK,MAAM,EAAE,KAAK,oBAAI,IAAY;AAC1F,mBAAW,IAAI,UAAU,KAAK;AAC9B,+BAAuB,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU;AAC9D;AAAA,MACF;AAEA,qBAAe,IAAI,UAAU,MAAM;AACnC,iBAAW,SAAS,QAAS,gBAAe,IAAI,MAAM,MAAM;AAAA,IAC9D;AAEA,SAAK,sBAAsB,YAAY,cAAc;AAErD,WAAO,MAAM,IAAI,UAAQ;AACvB,UAAI,KAAK,WAAW,YAAa,QAAO;AACxC,UAAI,eAAe,IAAI,KAAK,WAAW,KAAK,MAAM,SAAS,CAAC,EAAG,QAAOF,mBAAkB,KAAK,KAAK;AAClG,YAAM,aAAa,uBAAuB,IAAI,KAAK,MAAM,EAAE;AAC3D,aAAO,YAAY,OAAO,EAAE,GAAG,MAAM,YAAY,KAAK,WAAW,OAAO,WAAS,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,IAAI;AAAA,IAC/G,CAAC;AAAA,EACH;AAAA,EAEQ,oBAAoB,OAAoE;AAC9F,WAAO,MACJ;AAAA,MACC,CAAC,SAA+E,KAAK,WAAW;AAAA,IAClG,EACC,QAAQ,UAAQ;AACf,YAAM,SAAS,KAAK,WAAW,KAAK,MAAM,SAAS;AACnD,YAAM,YAAY,2BAA2B,KAAK,MAAM,SAAS;AACjE,YAAM,WAAW,CAAC,OAAe,iBAAyD;AACxF,cAAM,aAAa,wBAAwB,KAAK;AAChD,eAAO,eAAe,UAAa,WAAW,cAAc,WAAW,IACnE,CAAC,IACD;AAAA,UACE;AAAA,YACE;AAAA,YACA;AAAA,YACA,YAAY,WAAW;AAAA,YACvB,OAAOL,iBAAgB,WAAW,UAAU;AAAA,YAC5C,WAAW,WAAW;AAAA,YACtB;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACN;AACA,aAAO;AAAA,QACL,GAAG,KAAK,WAAW,QAAQ,WAAS,SAAS,OAAO,IAAI,CAAC;AAAA,QACzD,IAAI,KAAK,sBAAsB,CAAC,GAAG,QAAQ,WAAS,SAAS,OAAO,KAAK,CAAC;AAAA,MAC5E;AAAA,IACF,CAAC;AAAA,EACL;AAAA,EAEQ,2BACN,OACA,YACA,gBACM;AACN,eAAW,cAAc,MAAM;AAAA,MAC7B,UAAQ,KAAK,WAAW,eAAeD,oBAAmB,IAAI,KAAK,MAAM,SAAS;AAAA,IACpF,GAAG;AACD,YAAM,aAAa,KAAK,qBAAqB,WAAW,KAAK;AAC7D,YAAMI,SAAQ,KAAK,WAAW,WAAW,KAAK;AAC9C,iBAAW,aAAa,YAAY;AAClC,YACE,qBAAqBA,QAAO,UAAU,KAAK,MAC1C,eAAe,UAAa,oBAAoB,YAAY,UAAU,UAAU,IACjF;AACA,yBAAe,IAAI,UAAU,MAAM;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,sBAAsB,YAA2C,gBAAmC;AAC1G,UAAM,UAAU,WAAW,OAAO,eAAa,UAAU,cAAc,cAAc;AACrF,aAAS,YAAY,GAAG,YAAY,QAAQ,QAAQ,aAAa,GAAG;AAClE,YAAM,OAAO,QAAQ,SAAS;AAC9B,UAAI,SAAS,OAAW;AACxB,iBAAW,SAAS,QAAQ,MAAM,YAAY,CAAC,GAAG;AAChD,YACE,KAAK,WAAW,MAAM,UACrB,CAAC,KAAK,OAAO,WAAW,WAAW,KAAK,CAAC,MAAM,OAAO,WAAW,WAAW,KAC7E,CAAC,qBAAqB,KAAK,OAAO,MAAM,KAAK,KAC7C,CAAC,oBAAoB,KAAK,YAAY,MAAM,UAAU,KACrD,KAAK,cAAc,mBAAmB,MAAM,cAAc,mBAAmB,KAAK,UAAU,MAAM,OACnG;AACA;AAAA,QACF;AACA,uBAAe,IAAI,KAAK,MAAM;AAC9B,uBAAe,IAAI,MAAM,MAAM;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,WAAW,WAAwD;AACzE,QAAI,CAAC,UAAU,UAAU,UAAU,EAAE,SAAS,SAAS,EAAG,QAAO;AACjE,QAAI,cAAc,gBAAgB,cAAc,SAAU,QAAO;AACjE,QAAIN,yBAAwB,IAAI,SAAS,EAAG,QAAO;AACnD,QAAIC,yBAAwB,IAAI,SAAS,EAAG,QAAO;AACnD,WAAO;AAAA,EACT;AAAA,EAEQ,WAAW,OAA2C;AAC5D,QAAI,MAAM,eAAe,OAAW,QAAO,CAAC;AAC5C,UAAM,iBAAiB,KAAK,kBAAkB,SAAS,MAAM,UAAU;AACvE,WAAO,eAAe,SAAS,aAAa,eAAe,WAAW,QAAQ,CAAC;AAAA,EACjF;AAAA,EAEQ,qBAAqB,OAA8D;AACzF,QAAI,MAAM,YAAY,UAAW,QAAO;AACxC,QAAID,yBAAwB,IAAI,MAAM,SAAS,GAAG;AAChD,YAAM,kBAAkB,MAAM,MAC3B,MAAM,eAAe,EACrB,OAAO,OAAO,EACd,IAAI,WAAS,KAAK,WAAW,SAAS,KAAK,CAAC;AAC/C,UAAI,gBAAgB,KAAK,oBAAkB,eAAe,WAAW,YAAY,EAAG,QAAO;AAC3F,aAAO,gBAAgB;AAAA,QAAQ,oBAC7B,eAAe,WAAW,aAAa,eAAe,WAAW,gBAAgB,CAAC;AAAA,MACpF;AAAA,IACF;AACA,QAAI,CAACC,yBAAwB,IAAI,MAAM,SAAS,EAAG,QAAO,CAAC;AAC3D,UAAM,SAAS,8BAA8B,MAAM,KAAK;AACxD,WAAO,OAAO,WAAW,WAAW,OAAO,aAAa,IAAI,iBAAe,YAAY,QAAQ,IAAI;AAAA,EACrG;AACF;;;ACtPA,IAAM,qBAAqB,oBAAI,IAAyC,CAAC,UAAU,UAAU,UAAU,CAAC;AACxG,IAAM,uBAAuB,oBAAI,IAAyC,CAAC,UAAU,QAAQ,CAAC;AAC9F,IAAM,uCAAuC,oBAAI,IAAyC;AAAA,EACxF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,qCAAqC,oBAAI,IAAyC,CAAC,SAAS,SAAS,CAAC;AAC5G,IAAMU,2BAA0B,oBAAI,IAAyC,CAAC,SAAS,SAAS,CAAC;AACjG,IAAMC,2BAA0B,oBAAI,IAAyC,CAAC,SAAS,SAAS,CAAC;AACjG,IAAMC,sBAAqB,oBAAI,IAAyC;AAAA,EACtE,GAAGF;AAAA,EACH,GAAGC;AACL,CAAC;AAED,IAAM,sBAAsB,oBAAI,IAAyC;AAAA,EACvE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,oBAAoB,OAA+B,QAAmD;AAC7G,MAAI,OAAO,WAAW,YAAa,QAAO,EAAE,QAAQ,aAAa,OAAO,YAAY,OAAO,WAAW;AACtG,MAAI,OAAO,WAAW,WAAW;AAC/B,WAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,MAAM,OAAO;AAAA,MACb,QAAQ,GAAG,MAAM,KAAK,uBAAuB,MAAM,SAAS;AAAA,MAC5D,YAAY;AAAA,IACd;AAAA,EACF;AACA,SAAO,EAAE,GAAG,QAAQ,MAAM;AAC5B;AAEA,SAAS,8BACP,OACA,QACA,SACA,SACmB;AACnB,SAAO;AAAA,IACL;AAAA,IACA,OAAO,WAAW,cAAc,sBAAsB,OAAO,OAAO,YAAY,SAAS,OAAO,IAAI;AAAA,EACtG;AACF;AAEA,SAAS,oBAAoB,YAA8D;AACzF,QAAM,UAAU,WAAW;AAAA,IACzB,eAAa,UAAU,SAAS,cAAc,UAAU,KAAK,WAAW,WAAW;AAAA,EACrF;AACA,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,QAAM,SAAS,QAAQ,CAAC;AACxB,SAAO,QAAQ,SAAS,cAAc,OAAO,YAAY,YAAY,OAAO,QAAQ;AACtF;AAEA,SAAS,sBAAsB,WAAuC;AACpE,MAAI,UAAU,YAAY,WAAY,QAAO;AAC7C,SAAO,CAAC,GAAG,sBAAsB,SAAS,CAAC,EAAE;AAAA,IAC3C,SAAO,QAAQ,WAAW,QAAQ,aAAa,IAAI,WAAW,QAAQ,KAAK,IAAI,WAAW,UAAU;AAAA,EACtG;AACF;AAEA,SAASE,mBAAkB,OAA+B,QAAmC;AAC3F,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAEA,SAAS,4BACP,MACA,oBACmB;AACnB,MAAI,CAAC,qBAAqB,IAAI,KAAK,MAAM,SAAS,EAAG,QAAO;AAE5D,QAAM,oBAAoB,KAAK,WAAW,IAAI,uBAAuB,EAAE,OAAO,gBAAc,eAAe,MAAS;AACpH,QAAM,gBAAgB,kBAAkB;AAAA,IACtC,gBAAc,WAAW,WAAW,SAAS,UAAU,WAAW,YAAY;AAAA,EAChF;AAEA,SAAO,mBAAmB,OAAO,eAAa;AAC5C,UAAM,WAAW,wBAAwB,SAAS;AAClD,QACE,CAAC,YACD,SAAS,WAAW,SAAS,UAC7B,SAAS,aACT,SAAS,UAAU,SAAS,WAC5B,SAAS,YAAY,UACrB;AACA,aAAO;AAAA,IACT;AAEA,UAAM,+BAA+B,gBACjC,kBAAkB;AAAA,MAChB,eAAa,UAAU,WAAW,SAAS,WAAW,UAAU,YAAY,SAAS;AAAA,IACvF,IACA,kBAAkB,SAAS,KAAK,kBAAkB,MAAM,eAAa,UAAU,WAAW,SAAS,OAAO;AAC9G,WAAO,CAAC;AAAA,EACV,CAAC;AACH;AAEA,SAASC,kBAAiB,MAA4B,OAAsC;AAC1F,SACE,KAAK,OAAO,WAAW,MAAM,OAAO,UAAU,KAAK,OAAO,MAAM,CAAC,OAAO,UAAU,UAAU,MAAM,OAAO,KAAK,CAAC;AAEnH;AAEA,SAAS,iBAAiB,MAA4B,OAAsC;AAC1F,SACE,KAAK,aAAa,WAAW,MAAM,aAAa,UAChD,KAAK,aAAa;AAAA,IAChB,CAAC,aAAa,UACZ,YAAY,aAAa,MAAM,aAAa,KAAK,GAAG,YACpD,YAAY,UAAU,MAAM,aAAa,KAAK,GAAG;AAAA,EACrD;AAEJ;AAEO,IAAM,kBAAN,MAAmD;AAAA,EAC/C,OAAO;AAAA,EACC,oBAAoB,IAAI,kBAAkB;AAAA,EAC1C,oBAAoB,IAAI,yBAAyB;AAAA,EACjD,0BAA0B,IAAI;AAAA,IAC7C,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA,EACiB,yBAAyB,IAAI,uBAAuB,KAAK,iBAAiB;AAAA,EAC1E,yBAAyB,IAAI,uBAAuB;AAAA,EACpD,4BAA4B,IAAI,0BAA0B,KAAK,iBAAiB;AAAA,EAChF,wBAAwB,IAAI,sBAAsB,KAAK,iBAAiB;AAAA,EACxE,4BAA4B,IAAI,0BAA0B;AAAA,EAC1D,8BAA8B,IAAI,4BAA4B;AAAA,EAC9D,oCAAoC,IAAI;AAAA,IACvD,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA,EACiB,sCAAsC,IAAI;AAAA,IACzD,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AAAA,EAEA,sBACE,OACA,oBAC8B;AAC9B,UAAM,iBAAiB,MAAM;AAAA,MAC3B,CAAC,SAA+E,KAAK,WAAW;AAAA,IAClG;AACA,UAAM,0BAA0B;AAAA,MAC9B;AAAA,MACA,eAAe,QAAQ,UAAQ,KAAK,UAAU;AAAA,IAChD;AACA,UAAM,sBAAsB,IAAI;AAAA,MAC9B,eACG,OAAO,UAAQ;AACd,YAAI,CAAC,qBAAqB,IAAI,KAAK,MAAM,SAAS,GAAG;AACnD,iBAAO,KAAK,WAAW,KAAK,eAAa,wBAAwB,IAAI,SAAS,CAAC;AAAA,QACjF;AACA,cAAM,oBAAoB;AAAA,UACxB,4BAA4B,MAAM,kBAAkB;AAAA,UACpD,KAAK;AAAA,QACP;AACA,eAAO,KAAK,WAAW,KAAK,eAAa,kBAAkB,IAAI,SAAS,CAAC;AAAA,MAC3E,CAAC,EACA,IAAI,UAAQ,KAAK,gBAAgB,KAAK,MAAM,SAAS,CAAC;AAAA,IAC3D;AACA,WAAO,MAAM;AAAA,MAAI,UACf,KAAK,WAAW,eAAe,oBAAoB,IAAI,KAAK,gBAAgB,KAAK,MAAM,SAAS,CAAC,IAC7F;AAAA,QACE,QAAQ;AAAA,QACR,OAAO,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MACd,IACA;AAAA,IACN;AAAA,EACF;AAAA,EAEA,sBACE,OACA,SACA,gBAC8B;AAC9B,UAAM,SAAS,MAAM,IAAI,UAAQ,KAAK,KAAK;AAC3C,UAAM,8BAA8B,CAAC,YAAwE;AAC3G,YAAM,eAAe,IAAI,IAAI,QAAQ,IAAI,UAAQ,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC;AACvE,aAAO,KAAK,wBAAwB;AAAA,QAClC;AAAA,QACA,EAAE,GAAG,SAAS,OAAO;AAAA,QACrB,CAAC,OAAO,gBACN,aAAa,IAAI,MAAM,EAAE,KAAK,eAAe,IAAI,MAAM,EAAE,KAAK,KAAK,aAAa,OAAO,WAAW;AAAA,MACtG;AAAA,IACF;AAEA,QAAI,SAAS,4BAA4B,KAAK;AAC9C,aAAS,KAAK,yBAAyB,MAAM;AAC7C,aAAS,4BAA4B,MAAM;AAC3C,WAAO,KAAK,yBAAyB,MAAM;AAAA,EAC7C;AAAA,EAEQ,gBAAgB,WAAwD;AAC9E,QAAI,mBAAmB,IAAI,SAAS,EAAG,QAAO;AAC9C,QAAI,cAAc,gBAAgB,cAAc,SAAU,QAAO;AACjE,QAAI,qBAAqB,IAAI,SAAS,EAAG,QAAO;AAChD,QAAIJ,yBAAwB,IAAI,SAAS,EAAG,QAAO;AACnD,QAAIC,yBAAwB,IAAI,SAAS,EAAG,QAAO;AACnD,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,QAA2C,SAA0D;AAC/G,UAAM,mBAAmB,OAAO,OAAO,WAAS,qBAAqB,IAAI,MAAM,SAAS,CAAC;AACzF,UAAM,iBAAiB,OAAO,OAAO,WAAS,CAAC,qBAAqB,IAAI,MAAM,SAAS,CAAC;AACxF,UAAM,oBAAoB,KAAK,wBAAwB;AAAA,MACrD;AAAA,MACA,EAAE,GAAG,SAAS,OAAO;AAAA,MACrB,CAAC,OAAO,gBAAgB,KAAK,aAAa,OAAO,WAAW;AAAA,MAC5D,CAAC,QAAQ,cAAc,gBAAgB,KAAK,mBAAmB,QAAQ,cAAc,WAAW;AAAA,IAClG;AACA,UAAM,uBAAuB,KAAK,oCAAoC,QAAQ,iBAAiB;AAC/F,QAAI,CAAC,iBAAiB,QAAQ;AAC5B,aAAO,KAAK,kCAAkC,kBAAkB,oBAAoB;AAAA,IACtF;AAEA,UAAM,wBAAwB,KAAK,uBAAuB,KAAK,gBAAgB;AAC/E,UAAM,sBAAsB,KAAK,kCAAkC;AAAA,MACjE;AAAA,MACA;AAAA,IACF;AACA,UAAM,gBAAgB,oBAAoB;AAC1C,UAAM,iBAAiB,oBAAoB;AAC3C,UAAM,cAAc,cAAc,OAAO,UAAQ,KAAK,MAAM,cAAc,UAAU;AACpF,UAAM,yBAAyB,IAAI,IAAI,cAAc,IAAI,UAAQ,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC;AACvF,UAAM,wBAAwB,eAAe;AAAA,MAC3C,WACE,mCAAmC,IAAI,MAAM,SAAS,KACtD,uBAAuB,IAAI,MAAM,EAAE,GAAG,WAAW,eACjD,KAAK,kCAAkC,uBAAuB,KAAK;AAAA,IACvE;AACA,UAAM,wBACJ,eAAe,WAAW,cACtB,KAAK,uBAAuB,QAAQ;AAAA,MAClC,QAAQ,eAAe;AAAA,MACvB;AAAA,MACA,oBAAoB,QAAQ,sBAAsB,CAAC;AAAA,MACnD,aAAa,QAAQ,qBAAqB,QAAQ,QAAQ,YAAY;AAAA,QACpE,eAAa,CAAC,sBAAsB,SAAS;AAAA,MAC/C;AAAA,MACA;AAAA,IACF,CAAC,IACD,EAAE,QAAQ,YAAqB,SAAS,OAAU;AACxD,UAAM,oBAAoB,KAAK,kCAAkC;AAAA,MAC/D;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,WAAW,KAAK,0BAA0B,QAAQ;AAAA,MACtD;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,UAAM,YAAY,IAAI;AAAA,MACpB,CAAC,GAAG,cAAc,OAAO,UAAQ,KAAK,MAAM,cAAc,UAAU,GAAG,GAAG,SAAS,KAAK,EAAE,IAAI,UAAQ;AAAA,QACpG,KAAK,MAAM;AAAA,QACX;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO,OAAO,IAAI,WAAS,UAAU,IAAI,MAAM,EAAE,KAAK,KAAK,aAAa,OAAO,OAAO,CAAC;AAAA,EACzF;AAAA,EAEA,KAAK,OAA+B,SAA+C;AACjF,QAAI,qBAAqB,IAAI,MAAM,SAAS,GAAG;AAC7C,YAAM,SAAS,KAAK,uBAAuB,KAAK,CAAC,KAAK,CAAC;AACvD,UAAI,OAAO,WAAW;AACpB,eAAO,OAAO,MAAM,CAAC,KAAKE,mBAAkB,OAAO,2BAA2B;AAChF,aAAOA,mBAAkB,OAAO,wEAAwE;AAAA,IAC1G;AAEA,QAAID,oBAAmB,IAAI,MAAM,SAAS,GAAG;AAC3C,YAAM,SAASF,yBAAwB,IAAI,MAAM,SAAS,IAAI,mBAAmB;AACjF,YAAM,QAAQ,KAAK,mBAAmB,QAAQ,CAAC,KAAK,GAAG,EAAE,GAAG,SAAS,QAAQ,CAAC,KAAK,EAAE,CAAC;AACtF,YAAM,YAAY,MAAM,CAAC;AACzB,UAAI,WAAW,WAAW,aAAa;AACrC,eAAO,aAAaG,mBAAkB,OAAO,+CAA+C;AAAA,MAC9F;AACA,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,aAAa,OAAO,OAAO;AACjD,QAAI,SAAS,WAAW,YAAa,QAAO;AAC5C,WAAO;AAAA,MACL;AAAA,MACA,EAAE,QAAQ,aAAa,YAAY,SAAS,WAAW;AAAA,MACvD,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEQ,aAAa,OAA+B,SAA+C;AACjG,QAAI,MAAM,YAAY,YAAY;AAChC,aAAO;AAAA,QACL;AAAA,QACA,sBAAsB,OAAO,CAAC,GAAG,KAAK,mBAAmB,KAAK,iBAAiB;AAAA,MACjF;AAAA,IACF;AAEA,QAAI,CAAC,oBAAoB,IAAI,MAAM,SAAS,GAAG;AAC7C,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,MAAM;AAAA,QACN,QAAQ,wCAAwC,MAAM,SAAS;AAAA,QAC/D,YAAY;AAAA,MACd;AAAA,IACF;AAEA,QAAI,MAAM,cAAc,eAAe;AACrC,YAAM,cAAc,QAAQ,gBAAgB,oBAAoB,QAAQ,QAAQ,UAAU;AAC1F,YAAM,MAAM,cAAc,MAAM,OAAO,WAAW;AAClD,aAAO,oBAAoB,OAAO,GAAG;AAAA,IACvC;AAEA,QAAI,mBAAmB,IAAI,MAAM,SAAS,GAAG;AAC3C,YAAM,cAAc,QAAQ,UAAU,CAAC,KAAK,GAAG,OAAO,UAAQ,mBAAmB,IAAI,KAAK,SAAS,CAAC;AACpG,YAAM,iBAAiB,CAAC,SAAiC,KAAK,eAAe,MAAM;AACnF,YAAM,eAAe,CAAC,cACpB,WAAW,OAAO,UAAQ,KAAK,cAAc,aAAa,eAAe,IAAI,CAAC;AAChF,YAAM,SAAS,CAAC,cACd,WAAW,OAAO,UAAQ,KAAK,cAAc,aAAa,KAAK,eAAe,MAAS;AACzF,YAAM,YAAY,aAAa,QAAQ;AACvC,YAAM,WAAW,OAAO,QAAQ;AAChC,YAAM,QAAQ,UAAU,CAAC,MAAM,MAAM,aAAa,SAAS,CAAC,IAAI;AAChE,YAAM,YAAY,aAAa,QAAQ;AACvC,YAAM,cAAc,aAAa,UAAU;AAC3C,YAAM,OAAO,UAAU,CAAC,MAAM,MAAM,aAAa,OAAO,QAAQ,EAAE,CAAC,IAAI;AACvE,YAAM,SAAS,YAAY,CAAC,MAAM,MAAM,aAAa,OAAO,UAAU,EAAE,CAAC,IAAI;AAC7E,YAAM,kBAAkB,CAAC,WAAW,WAAW,WAAW,EAAE,KAAK,WAAS,MAAM,SAAS,CAAC;AAC1F,UAAI,CAAC,SAAS,iBAAiB;AAC7B,eAAO;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,MAAM;AAAA,UACN,QAAQ,QACJ,kEACA,GAAG,MAAM,SAAS;AAAA,UACtB,YAAY;AAAA,QACd;AAAA,MACF;AACA,YAAM,OAAO,aAAa;AAAA,QACxB,OAAO,MAAM;AAAA,QACb,MAAM,MAAM;AAAA,QACZ,QAAQ,QAAQ;AAAA,QAChB,QAAQ,QAAQ,sBAAsB,oBAAoB,QAAQ,QAAQ,cAAc,CAAC,CAAC;AAAA,MAC5F,CAAC;AACD,UAAI,KAAK,WAAW,aAAa;AAC/B,eAAO,oBAAoB,OAAO,IAAI;AAAA,MACxC;AACA,UAAI,KAAK,WAAW,WAAW;AAC7B,eAAO;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,MAAM,KAAK;AAAA,UACX,QAAQ,GAAG,MAAM,KAAK;AAAA,UACtB,YAAY;AAAA,QACd;AAAA,MACF;AACA,aAAO,EAAE,GAAG,MAAM,MAAM;AAAA,IAC1B;AAEA,UAAM,cAAc,yBAAyB,KAAK;AAClD,QAAI,YAAa,QAAO,oBAAoB,OAAO,WAAW;AAC9D,QAAI,MAAM,cAAc,gBAAgB;AACtC,YAAM,SAAS,QAAQ,sBAAsB,oBAAoB,QAAQ,QAAQ,cAAc,CAAC,CAAC;AACjG,aAAO,oBAAoB,OAAO,eAAe,MAAM,OAAO,MAAM,CAAC;AAAA,IACvE;AACA,QAAI,MAAM,cAAc,iBAAiB;AACvC,YAAM,SAAS,QAAQ,gBAAgB,oBAAoB,QAAQ,QAAQ,UAAU;AACrF,UAAI,WAAW,QAAW;AACxB,eAAO;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,YAAY;AAAA,QACd;AAAA,MACF;AACA,YAAM,YAAY,gBAAgB,MAAM,OAAO,MAAM;AACrD,UAAI,UAAU,IAAI;AAChB,eAAO,oBAAoB,OAAO,EAAE,QAAQ,aAAa,YAAY,UAAU,MAAM,WAAW,CAAC;AAAA,MACnG;AACA,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,MAAM;AAAA,QACN,QAAQ,GAAG,MAAM,KAAK;AAAA,QACtB,YAAY;AAAA,MACd;AAAA,IACF;AAEA,QAAI,MAAM,cAAc,YAAY;AAClC,YAAM,SAAS,WAAW,MAAM,KAAK;AACrC,UAAI,OAAO,IAAI;AACb,eAAO,oBAAoB,OAAO,EAAE,QAAQ,aAAa,YAAY,OAAO,MAAM,WAAW,CAAC;AAAA,MAChG;AAAA,IACF;AACA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,MAAM;AAAA,MACN,QAAQ,GAAG,MAAM,KAAK,uBAAuB,MAAM,SAAS;AAAA,MAC5D,YAAY;AAAA,IACd;AAAA,EACF;AAAA,EAEQ,mBACN,QACA,QACA,SAC8B;AAC9B,QAAI,WAAW,kBAAkB;AAC/B,YAAME,cAAa,KAAK,sBAAsB,KAA2B;AAAA,QACvE,MAAM;AAAA,QACN;AAAA,QACA,aAAa,WAAS,0BAA0B,OAAO,KAAK,2BAA2B;AAAA,QACvF,QAAQD;AAAA,MACV,CAAC;AACD,aAAO,KAAK,0BAA0B,KAAK;AAAA,QACzC,MAAM;AAAA,QACN,YAAAC;AAAA,QACA,oBAAoB,CAAC;AAAA,QACrB,YAAY,QAAQ,qBAAqB,QAAQ,QAAQ;AAAA,MAC3D,CAAC,EAAE;AAAA,IACL;AAEA,UAAM,aAAa,KAAK,sBAAsB,KAA2B;AAAA,MACvE,MAAM;AAAA,MACN;AAAA,MACA,aAAa;AAAA,MACb,QAAQ;AAAA,IACV,CAAC;AACD,WAAO,KAAK,0BAA0B,KAAK;AAAA,MACzC,MAAM;AAAA,MACN;AAAA,MACA,oBAAoB,CAAC;AAAA,MACrB,YAAY,QAAQ,qBAAqB,QAAQ,QAAQ;AAAA,IAC3D,CAAC,EAAE;AAAA,EACL;AAAA,EAEQ,yBAAyB,OAAmE;AAClG,UAAM,cAAc,MAAM,OAAO,UAAQ,KAAK,MAAM,cAAc,UAAU;AAC5E,UAAM,kBAAkB,MAAM,OAAO,UAAQ,qBAAqB,IAAI,KAAK,MAAM,SAAS,CAAC;AAC3F,UAAM,iBAAiB,MAAM;AAAA,MAC3B,UACE,qCAAqC,IAAI,KAAK,MAAM,SAAS,KAC7D,KAAK,kCAAkC,uBAAuB,KAAK,KAAK;AAAA,IAC5E;AACA,UAAM,mBACJ,gBAAgB,SAAS,KACzB,gBAAgB,MAAM,UAAQ,KAAK,WAAW,eAAe,KAAK,WAAW,WAAW,CAAC;AAC3F,QAAK,CAAC,YAAY,UAAU,CAAC,eAAe,UAAW,CAAC,gBAAgB,UAAU,iBAAkB,QAAO;AAE3G,UAAM,6BAA6B,CAAC,GAAG,aAAa,GAAG,iBAAiB,GAAG,cAAc,EAAE;AAAA,MACzF,UAAQ,KAAK,WAAW;AAAA,IAC1B;AACA,QAAI,CAAC,2BAA4B,QAAO;AACxC,WAAO,MAAM;AAAA,MAAI,UACf,KAAK,WAAW,gBACf,KAAK,MAAM,cAAc,cACxB,qBAAqB,IAAI,KAAK,MAAM,SAAS,KAC5C,qCAAqC,IAAI,KAAK,MAAM,SAAS,KAC5D,KAAK,kCAAkC,uBAAuB,KAAK,KAAK,KACxEF;AAAA,QACE,KAAK;AAAA,QACL;AAAA,MACF,IACA;AAAA,IACN;AAAA,EACF;AACF;;;ACxgBO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,OAAO,OAAO,QAAmC;AAC/C,WAAO,KAAK,qBAAqB,MAAM,GAAG;AAC1C,QAAI,WAAW,WAAY,QAAO,IAAI,gBAAgB;AACtD,UAAM,IAAI,MAAM,YAAY,MAAM,aAAa;AAAA,EACjD;AACF;;;ACVA,SAAS,QAAAG,aAAY;AACrB,YAAYC,WAAU;;;ACAtB,oBAAmB;AADnB,OAAO,QAAQ;AAGf,OAAO,UAAU;AAGjB,IAAI;AAOJ,eAAsB,cAAc,aAAoC;AACtE,MAAI,gBAAgB;AAClB;AAAA,EACF;AACA,QAAM,gBAAgB,KAAK,KAAK,aAAa,YAAY;AAEzD,uBAAiB,cAAAC,SAAO;AAExB,MAAI,MAAM,GAAG,WAAW,aAAa,GAAG;AACtC,UAAM,mBAAmB,MAAM,GAAG,SAAS,eAAe,OAAO;AACjE,mBAAe,IAAI,gBAAgB;AACnC,WAAO,MAAM,+BAA+B,aAAa,EAAE;AAAA,EAC7D;AACF;AASO,SAAS,aAAa,YAAoB,YAA6B;AAC5E,MAAI,CAAC,gBAAgB;AACnB,WAAO;AAAA,EACT;AACA,QAAM,eAAe,KAAK,SAAS,YAAY,UAAU;AACzD,SAAO,eAAe,QAAQ,YAAY;AAC5C;;;ACzCA,OAAOC,WAAU;;;ACAV,SAAS,iBAAiB,MAAc,OAAuB;AACpE,MAAI,OAAO,MAAO,QAAO;AACzB,MAAI,OAAO,MAAO,QAAO;AACzB,SAAO;AACT;;;ADKO,IAAM,yBAAN,MAA6B;AAAA,EAC3B,MACL,WACA,YACA,QACA,QACA,YACA,OACiB;AACjB,UAAM,UAAU,KAAK,QAAQ,WAAW,GAAG,MAAM,IAAI,UAAQ,KAAK,SAAS,CAAC;AAC5E,UAAM,aAAa,MAAM,WAAW,KAAK,KAAK,SAAS,SAAS,WAAW,MAAM,CAAC,GAAG,aAAa,EAAE;AACpG,UAAM,cAAc,MACjB,IAAI,UAAQ,KAAK,WAAW,SAAS,WAAW,YAAY,IAAI,CAAC,EACjE,KAAK,CAAC,MAAM,UAAU,iBAAiB,KAAK,MAAM,MAAM,IAAI,CAAC;AAChE,UAAM,cAAc,KAAK,YAAY,SAAS,WAAW,YAAY,UAAU;AAE/E,WAAO;AAAA,MACL,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA,OAAO,YAAY;AAAA,MACnB,QAAQ,YAAY;AAAA,MACpB,YAAY,KAAK,MAAM,UAAU;AAAA,MACjC,SAAS,KAAK,QAAQ,WAAW;AAAA,MACjC,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,WAAWC,SAAoC;AACrD,QAAIA,QAAO,KAAK,WAAS,kBAAkB,KAAK,KAAK,KAAK,MAAM,SAAS,IAAI,CAAC,EAAG,QAAOC,MAAK;AAC7F,QAAID,QAAO,KAAK,WAAS,MAAM,SAAS,GAAG,CAAC,EAAG,QAAOC,MAAK;AAC3D,WAAOA;AAAA,EACT;AAAA,EAEQ,SAAS,SAAkB,MAAc,OAAwB;AACvE,WAAO,QAAQ,UAAU,IAAI,MAAM,QAAQ,UAAU,KAAK;AAAA,EAC5D;AAAA,EAEQ,WAAW,SAAkB,WAAmB,YAAqB,MAAuC;AAClH,UAAM,eAAe,aAAa,QAAQ,SAAS,KAAK,SAAS,IAAI,QAAQ,SAAS,WAAW,KAAK,SAAS;AAC/G,WAAO;AAAA,MACL,MAAM,KAAK,eAAe,SAAS,YAAY;AAAA,MAC/C,SAAS,KAAK;AAAA,MACd,SAAS,KAAK,QAAQ,IAAI,YAAU,KAAK,OAAO,MAAM,CAAC;AAAA,IACzD;AAAA,EACF;AAAA,EAEQ,OAAO,QAAwC;AACrD,QAAI,OAAO,WAAW,eAAe;AACnC,aAAO;AAAA,QACL,QAAQ,OAAO;AAAA,QACf,QAAQ,OAAO,OAAO;AAAA,QACtB,MAAM,OAAO;AAAA,QACb,QAAQ,OAAO;AAAA,MACjB;AAAA,IACF;AAEA,UAAM,QAAQ,OAAO;AACrB,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO;AAAA,QACL,QAAQ,OAAO;AAAA,QACf,WAAW,MAAM;AAAA,QACjB,YAAY,MAAM;AAAA,QAClB,QAAQ,MAAM,OAAO;AAAA,MACvB;AAAA,IACF;AAEA,WAAO;AAAA,MACL,QAAQ,OAAO;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,YAAY,MAAM;AAAA,MAClB,QAAQ,MAAM,OAAO;AAAA,MACrB,MAAM,OAAO;AAAA,MACb,QAAQ,OAAO;AAAA,MACf,YAAY,OAAO;AAAA,IACrB;AAAA,EACF;AAAA,EAEQ,YACN,SACA,WACA,YACA,YACqD;AACrD,UAAM,OAAO,aAAa,QAAQ,QAAQ,SAAS,IAAI;AACvD,UAAM,QAAQ,aAAa,QAAQ,SAAS,SAAS,IAAI;AACzD,UAAM,iBAAiB,QAAQ,SAAS,MAAM,UAAU;AACxD,UAAM,SAAS,QAAQ,WAAW,cAAc,IAAI,QAAQ,SAAS,UAAU,IAAI,kBAAkB;AAErG,WAAO;AAAA,MACL,OAAO,KAAK,eAAe,SAAS,KAAK;AAAA,MACzC,QAAQ,KAAK,eAAe,SAAS,MAAM;AAAA,IAC7C;AAAA,EACF;AAAA,EAEQ,eAAe,SAAkB,OAAuB;AAC9D,WAAO,MAAM,MAAM,QAAQ,GAAG,EAAE,KAAK,GAAG;AAAA,EAC1C;AAAA,EAEQ,QAAQ,OAAgD;AAC9D,UAAM,eAAe;AAAA,MACnB,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAEA,eAAW,UAAU,MAAM,QAAQ,UAAQ,KAAK,OAAO,GAAG;AACxD,UAAI,OAAO,WAAW,cAAe,cAAa,eAAe;AAAA,UAC5D,cAAa,OAAO,MAAM,KAAK;AAAA,IACtC;AAEA,WAAO;AAAA,MACL,cAAc,MAAM;AAAA,MACpB,cAAc,MAAM,OAAO,UAAQ,KAAK,OAAO,EAAE;AAAA,MACjD,GAAG;AAAA,IACL;AAAA,EACF;AACF;;;AEhIA,SAAS,gBAAgB;;;ACsBzB,IAAM,2BAA2B,oBAAI,IAAyB,CAAC,SAAS,WAAW,SAAS,SAAS,CAAC;AACtG,IAAM,qBAAqB,CAAC,GAAG,sBAAsB,EAAE,KAAK,CAAC,MAAM,UAAU,MAAM,SAAS,KAAK,MAAM;AAEhG,SAAS,2BAA2B,YAAoB,OAA4C;AACzG,QAAM,oBAAoB,WAAW,WAAW,GAAG;AACnD,QAAM,kBAAkB,WAAW,SAAS,GAAG;AAE/C,MAAI,sBAAsB,gBAAiB,QAAO;AAElD,QAAM,UAAuB,oBAAoB,aAAa;AAC9D,QAAM,iBAAiB,oBAAoB,WAAW,MAAM,GAAG,EAAE,IAAI;AACrE,QAAM,YAAY,mBAAmB;AAAA,IACnC,eAAa,mBAAmB,aAAa,eAAe,WAAW,GAAG,SAAS,GAAG;AAAA,EACxF;AAEA,MAAI,CAAC,aAAa,CAAC,sBAAsB,SAAS,EAAG,QAAO;AAE5D,QAAM,aAAa,mBAAmB,YAAY,SAAY,eAAe,MAAM,UAAU,SAAS,CAAC;AACvG,MAAI,yBAAyB,IAAI,SAAS,KAAK,CAAC,WAAY,QAAO;AAEnE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC7CA,SAAS,cAAc,WAAsE;AAC3F,MAAI,UAAU,YAAY,UAAW,QAAO,UAAU;AACtD,MAAI,UAAU,kBAAkB,cAAc,UAAU,kBAAkB,UAAW,QAAO,IAAI,UAAU,IAAI;AAC9G,OACG,UAAU,kBAAkB,WAAW,UAAU,kBAAkB,YACpE,kBAAkB,UAAU,IAAI,GAChC;AACA,WAAO,IAAI,UAAU,aAAa,IAAI,UAAU,IAAI;AAAA,EACtD;AACA,SAAO;AACT;AAEO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,QAAQ,UAAkB,UAAyE;AACjG,UAAM,SAAmC,CAAC;AAE1C,eAAW,WAAW,UAAU;AAC9B,iBAAW,aAAa,QAAQ,YAAY;AAC1C,cAAM,aAAa,cAAc,SAAS;AAC1C,YAAI,CAAC,WAAY;AACjB,cAAM,QAAQ,2BAA2B,YAAY,UAAU,KAAK;AACpE,YAAI,CAAC,MAAO;AAEZ,eAAO,KAAK;AAAA,UACV,GAAG;AAAA,UACH,IAAI,GAAG,QAAQ,IAAI,UAAU,OAAO,KAAK;AAAA,UACzC;AAAA,UACA,WAAW,QAAQ;AAAA,UACnB,QAAQ,UAAU;AAAA,UAClB,YAAY,UAAU;AAAA,UACtB,GAAI,UAAU,cAAc,EAAE,aAAa,UAAU,YAAY,IAAI,CAAC;AAAA,QACxE,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,OAAO,KAAK,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,MAAM,OAAO,KAAK;AAAA,EAC5E;AACF;;;ACtCO,IAAM,eAAN,MAAmB;AAAA,EACxB,MAAM,QAAgB,OAA0C;AAC9D,UAAM,cAAc,KAAK,SAAS,QAAQ,KAAK;AAC/C,QAAI,YAAY,OAAQ,QAAO,EAAE,QAAQ,WAAW,YAAY;AAEhE,UAAM,eAAe,CAAC,GAAG,KAAK,EAAE;AAAA,MAC9B,CAAC,MAAM,UAAU,MAAM,MAAM,QAAQ,KAAK,MAAM,SAAS,iBAAiB,MAAM,SAAS,KAAK,OAAO;AAAA,IACvG;AAEA,QAAI,SAAS;AACb,eAAW,QAAQ,cAAc;AAC/B,eAAS,OAAO,MAAM,GAAG,KAAK,MAAM,KAAK,IAAI,KAAK,OAAO,OAAO,MAAM,KAAK,MAAM,GAAG;AAAA,IACtF;AAEA,WAAO,EAAE,QAAQ,WAAW,OAAO;AAAA,EACrC;AAAA,EAEQ,SAAS,QAAgB,OAAgD;AAC/E,UAAM,gBAAgB,MACnB;AAAA,MACC,UACE,CAAC,OAAO,UAAU,KAAK,MAAM,KAAK,KAClC,CAAC,OAAO,UAAU,KAAK,MAAM,GAAG,KAChC,KAAK,MAAM,QAAQ,KACnB,KAAK,MAAM,MAAM,KAAK,MAAM,SAC5B,KAAK,MAAM,MAAM,OAAO;AAAA,IAC5B,EACC,IAAI,WAAS;AAAA,MACZ,MAAM;AAAA,MACN,SAAS,QAAQ,KAAK,OAAO;AAAA,MAC7B,UAAU,CAAC,KAAK,OAAO;AAAA,IACzB,EAAE;AAEJ,QAAI,cAAc,OAAQ,QAAO;AAEjC,UAAM,UAAU,CAAC,GAAG,KAAK,EAAE;AAAA,MACzB,CAAC,MAAM,UAAU,KAAK,MAAM,QAAQ,MAAM,MAAM,SAAS,KAAK,MAAM,MAAM,MAAM,MAAM;AAAA,IACxF;AAEA,aAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS;AACnD,YAAM,OAAO,QAAQ,KAAK;AAC1B,UAAI,CAAC,KAAM;AAEX,eAAS,YAAY,QAAQ,GAAG,YAAY,QAAQ,QAAQ,aAAa;AACvE,cAAM,QAAQ,QAAQ,SAAS;AAC/B,YAAI,CAAC,SAAS,MAAM,MAAM,QAAQ,KAAK,MAAM,IAAK;AAElD,YAAI,KAAK,MAAM,QAAQ,MAAM,MAAM,OAAO,MAAM,MAAM,QAAQ,KAAK,MAAM,KAAK;AAC5E,gBAAM,WAAW,CAAC,KAAK,SAAS,MAAM,OAAO,EAAE,KAAK;AACpD,iBAAO;AAAA,YACL;AAAA,cACE,MAAM;AAAA,cACN,SAAS,SAAS,SAAS,CAAC,CAAC,QAAQ,SAAS,CAAC,CAAC;AAAA,cAChD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO,CAAC;AAAA,EACV;AACF;;;ACjEA,SAAS,kBAAkB;AAC3B,SAAS,OAAO,MAAM,QAAQ,cAAc;AAC5C,SAAS,UAAU,SAAS,YAAY;AASxC,IAAM,oBAA0C,EAAE,OAAO,MAAM,QAAQ,OAAO;AAEvE,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAA6B,aAAmC,mBAAmB;AAAtD;AAAA,EAAuD;AAAA,EAEpF,MAAM,MAAM,YAAoB,UAAiC;AAC/D,UAAM,YAAY,QAAQ,UAAU;AACpC,UAAM,gBAAgB,KAAK,WAAW,IAAI,SAAS,UAAU,CAAC,IAAI,WAAW,CAAC,MAAM;AAEpF,UAAM,KAAK,WAAW,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAC1D,QAAI;AACJ,QAAI;AACF,sBAAgB,MAAM,KAAK,WAAW,KAAK,eAAe,IAAI;AAC9D,YAAM,cAAc,UAAU,UAAU,MAAM;AAC9C,YAAM,cAAc,KAAK;AACzB,YAAM,cAAc,MAAM;AAC1B,sBAAgB;AAChB,YAAM,KAAK,WAAW,OAAO,eAAe,UAAU;AAAA,IACxD,SAAS,OAAO;AACd,YAAM,eAAe,MAAM,EAAE,MAAM,MAAM,MAAS;AAClD,YAAM,KAAK,WAAW,OAAO,aAAa,EAAE,MAAM,MAAM,MAAS;AACjE,YAAM;AAAA,IACR;AAAA,EACF;AACF;;;ACbA,IAAM,iBAAiB,IAAI;AAAA,EACzB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,IAAI,CAAC,WAAW,UAAU,CAAC,WAAW,KAAK,CAAC;AAChD;AAEA,SAAS,kBAAkB,OAAkD;AAC3E,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,EACd;AACF;AAEA,SAASC,uBAAsB,WAA2D;AACxF,MAAI,UAAU,YAAY,WAAY,QAAO;AAC7C,SAAO,CAAC,GAAG,sBAAsB,SAAS,CAAC,EAAE;AAAA,IAC3C,SAAO,QAAQ,WAAW,QAAQ,aAAa,IAAI,WAAW,QAAQ,KAAK,IAAI,WAAW,UAAU;AAAA,EACtG;AACF;AAEA,SAAS,sBAAsB,SAA0B;AACvD,SAAO,QAAQ,WAAW;AAAA,IACxB,eAAa,UAAU,YAAY,aAAa,sBAAsB,SAAS,EAAE,IAAI,OAAO;AAAA,EAC9F;AACF;AAEA,SAAS,aAAa,QAAgB,OAA4C;AAChF,QAAM,QACJ,MAAM,OAAO,QAAQ,KAAK,QAAQ,KAAK,OAAO,MAAM,OAAO,QAAQ,CAAC,KAAK,EAAE,IACvE,MAAM,OAAO,QAAQ,IACrB,MAAM,OAAO;AACnB,SAAO,EAAE,OAAO,KAAK,MAAM,OAAO,IAAI;AACxC;AAEO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,KACE,QACA,UACA,QACA,SACU;AACV,UAAM,cAAc,IAAI,IAAI,SAAS,IAAI,aAAW,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;AAC1E,UAAM,oBAAoB,oBAAI,IAAsC;AACpE,eAAW,SAAS,QAAQ;AAC1B,YAAM,gBAAgB,kBAAkB,IAAI,MAAM,SAAS,KAAK,CAAC;AACjE,oBAAc,KAAK,KAAK;AACxB,wBAAkB,IAAI,MAAM,WAAW,aAAa;AAAA,IACtD;AACA,UAAM,uBAAuB,oBAAI,IAAgC;AACjE,UAAM,UAA8B,CAAC;AACrC,UAAM,iBAAiB,oBAAI,IAA+B;AAC1D,UAAM,mBAAmB,oBAAI,IAA0C;AACvE,UAAM,sBAAsB,oBAAI,IAA+B;AAE/D,eAAW,WAAW,UAAU;AAC9B,YAAM,gBAAgB,kBAAkB,IAAI,QAAQ,EAAE,KAAK,CAAC;AAC5D,UAAI,CAAC,cAAc,OAAQ;AAC3B,YAAM,SAAS,QAAQ,WAAW,YAAY,IAAI,QAAQ,QAAQ,IAAI;AACtE,YAAM,eAAe,sBAAsB,OAAO;AAClD,YAAM,qBAAqB,cAAc,MAAM,MAAM,KAAK,EAAE,OAAO,OAAO,KAAK,CAAC;AAChF,YAAM,UAA6B;AAAA,QACjC;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA,mBAAmB,QAAQ;AAAA,QAC3B,GAAI,SACA,EAAE,QAAQ,cAAc,kBAAkB,IAAI,OAAO,EAAE,KAAK,CAAC,EAAE,IAC/D,EAAE,cAAc,CAAC,EAAuC;AAAA,MAC9D;AACA,UAAI,QACF,QAAQ,cAAc,eAAe,OAAO,KAAK,cAAc,IAAI,WAAS,QAAQ,KAAK,OAAO,OAAO,CAAC;AAC1G,YAAM,gBAAgB,QAAQ,WAAW,KAAKA,sBAAqB;AACnE,UAAI,eAAe;AACjB,gBAAQ,MAAM;AAAA,UAAI,UAChB,KAAK,WAAW,eAAe,KAAK,WAAW,SAAS,IAAI,kBAAkB,KAAK,KAAK,IAAI;AAAA,QAC9F;AAAA,MACF;AACA,cAAQ,QAAQ,wBAAwB,OAAO,kBAAkB,KAAK;AACtE,0BAAoB,IAAI,QAAQ,IAAI,OAAO;AAC3C,uBAAiB,IAAI,QAAQ,IAAI,KAAK;AACtC,iBAAW,WAAW,MAAO,gBAAe,IAAI,QAAQ,MAAM,IAAI,OAAO;AAAA,IAC3E;AAEA,QAAI,QAAQ,uBAAuB;AACjC,iBAAW,WAAW,UAAU;AAC9B,cAAM,QAAQ,iBAAiB,IAAI,QAAQ,EAAE;AAC7C,cAAM,UAAU,oBAAoB,IAAI,QAAQ,EAAE;AAClD,YAAI,CAAC,SAAS,CAAC,QAAS;AACxB,cAAM,cAAc,QAAQ,sBAAsB,OAAO,SAAS,cAAc;AAChF,mBAAW,WAAW,YAAa,gBAAe,IAAI,QAAQ,MAAM,IAAI,OAAO;AAAA,MACjF;AAAA,IACF;AAEA,eAAW,SAAS,QAAQ;AAC1B,YAAM,UAAU,YAAY,IAAI,MAAM,SAAS;AAC/C,UAAI,CAAC,QAAS;AACd,YAAM,UAAU,eAAe,IAAI,MAAM,EAAE;AAC3C,UAAI,CAAC,QAAS;AAEd,UAAI,QAAQ,WAAW,aAAa;AAClC,gBAAQ,KAAK,OAAO;AACpB;AAAA,MACF;AAEA,YAAM,aAAa,qBAAqB,IAAI,QAAQ,EAAE,KAAK;AAAA,QACzD;AAAA,QACA,QAAQ,CAAC;AAAA,QACT,YAAY,CAAC;AAAA,MACf;AACA,iBAAW,OAAO,KAAK,KAAK;AAC5B,iBAAW,WAAW,KAAK,EAAE,OAAO,YAAY,QAAQ,WAAW,CAAC;AACpE,2BAAqB,IAAI,QAAQ,IAAI,UAAU;AAC/C,cAAQ,KAAK,EAAE,QAAQ,aAAa,MAAM,CAAC;AAAA,IAC7C;AAEA,UAAM,QAAsB,CAAC;AAC7B,eAAW,cAAc,qBAAqB,OAAO,GAAG;AACtD,YAAM,sBAAsB,CAAC,GAAG,WAAW,UAAU,EAClD;AAAA,QACC,CAAC,MAAM,WACJ,eAAe,IAAI,KAAK,MAAM,SAAS,KAAK,OAAO,qBACjD,eAAe,IAAI,MAAM,MAAM,SAAS,KAAK,OAAO,sBACtD,KAAK,MAAM,cAAc,IAAI,cAAc,MAAM,MAAM,cAAc,EAAE,KACxE,KAAK,MAAM,OAAO,QAAQ,MAAM,MAAM,OAAO;AAAA,MACjD,EACC,QAAQ,UAAQ,KAAK,UAAU;AAClC,YAAM;AAAA,QACJ,GAAG,WAAW,OAAO,IAAI,YAAU;AAAA,UACjC,OAAO,aAAa,QAAQ,KAAK;AAAA,UACjC,MAAM;AAAA,UACN,SAAS,MAAM;AAAA,QACjB,EAAE;AAAA,MACJ;AAEA,YAAM,YAAY;AAAA,QAChB;AAAA,QACA,WAAW;AAAA,QACX,sBAAsB,WAAW,OAAO;AAAA,QACxC;AAAA,QACA,GAAG,WAAW,QAAQ,EAAE;AAAA,MAC1B;AACA,UAAI,cAAc,OAAW,OAAM,KAAK,SAAS;AAAA,IACnD;AAEA,WAAO,EAAE,OAAO,QAAQ;AAAA,EAC1B;AACF;;;AC3LA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,MAAM,OAAe,KAA0B;AACtD,SAAO,EAAE,OAAO,IAAI;AACtB;AAEA,SAAS,mBAAmB,QAAgB,WAAsE;AAChH,QAAM,QAAQ,UAAU,WAAW,MAAM;AACzC,QAAM,eAAe,OAAO,MAAM,OAAO,UAAU,WAAW,IAAI,MAAM;AACxE,QAAM,cAAc,aAAa,QAAQ,GAAG;AAC5C,QAAM,WAAW,gBAAgB,KAAK,eAAe,aAAa,MAAM,GAAG,WAAW,GAAG,QAAQ;AACjG,SAAO,MAAM,OAAO,QAAQ,QAAQ,MAAM;AAC5C;AAEA,SAAS,mBACP,QACA,WACA,SACmB;AACnB,QAAM,aAAa,mBAAmB,QAAQ,SAAS;AACvD,QAAM,cAAc,UAAU,YAC1B,MAAM,UAAU,UAAU,MAAM,QAAQ,UAAU,UAAU,IAAI,MAAM,IACtE;AACJ,QAAM,WAAW,cAAc,OAAO,MAAM,YAAY,OAAO,YAAY,GAAG,IAAI;AAElF,SAAO;AAAA,IACL,MAAM,UAAU;AAAA,IAChB,SAAS,OAAO,MAAM,WAAW,OAAO,WAAW,GAAG;AAAA,IACtD;AAAA,IACA,OAAO,qBAAqB,uBAAuB,UAAU,QAAQ;AAAA,IACrE;AAAA,IACA,GAAI,qBAAqB,wBAAwB,EAAE,eAAe,YAAY,UAAU,IAAI,EAAE,IAAI,CAAC;AAAA,IACnG,QAAQ,MAAM,UAAU,WAAW,MAAM,QAAQ,UAAU,WAAW,IAAI,MAAM;AAAA,IAChF;AAAA,IACA,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,EACvC;AACF;AAEA,SAAS,YAAY,MAAoE;AACvF,UAAQ,MAAM;AAAA,IACZ,KAAK,YAAY;AACf,aAAO;AAAA,IACT,KAAK,YAAY;AACf,aAAO;AAAA,IACT,KAAK,YAAY;AACf,aAAO;AAAA,IACT,KAAK,YAAY;AAAA,IACjB,KAAK,YAAY;AACf,aAAO;AAAA,IACT,KAAK,YAAY;AACf,aAAO;AAAA,IACT,KAAK,YAAY;AAAA,IACjB;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,mBAAN,cAA+B,wBAAwB;AAAA,EAIrD,YAA6B,QAAgB;AAC3C,UAAM;AADqB;AAAA,EAE7B;AAAA,EALS,WAA8B,CAAC;AAAA,EACvB,UAAoB,CAAC;AAAA,EAM7B,aAAa,SAA+B;AACnD,UAAM,KAAK,OAAO,QAAQ,WAAW,MAAM,MAAM;AACjD,UAAM,aAAa;AAAA,MACjB,GAAG,QAAQ,WAAW,IAAI,eAAa,mBAAmB,KAAK,QAAQ,WAAW,SAAS,CAAC;AAAA,MAC5F,GAAG,QAAQ,OAAO,IAAI,eAAa,mBAAmB,KAAK,QAAQ,WAAW,UAAU,CAAC;AAAA,IAC3F,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,MAAM,OAAO,KAAK;AAE9D,SAAK,SAAS,KAAK;AAAA,MACjB;AAAA,MACA,MAAM,QAAQ;AAAA,MACd,UAAU,MAAM,QAAQ,gBAAgB,MAAM,QAAQ,QAAQ,gBAAgB,IAAI,MAAM;AAAA,MACxF;AAAA,MACA,GAAI,KAAK,QAAQ,GAAG,EAAE,IAAI,EAAE,UAAU,KAAK,QAAQ,GAAG,EAAE,EAAE,IAAI,CAAC;AAAA,IACjE,CAAC;AAED,SAAK,QAAQ,KAAK,EAAE;AACpB,UAAM,aAAa,OAAO;AAC1B,SAAK,QAAQ,IAAI;AAAA,EACnB;AACF;AAEO,IAAM,wBAAN,MAA4B;AAAA,EACjC,MAAM,QAAgB,UAAuC;AAC3D,UAAM,SAAS,cAAc,QAAQ,UAAU;AAAA,MAC7C,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,MACrB,qBAAqB;AAAA,IACvB,CAAC;AAED,QAAI,OAAO,QAAQ,QAAQ;AACzB,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa,OAAO,OAAO,IAAI,YAAU;AAAA,UACvC,SAAS,MAAM;AAAA,UACf,QAAQ,MAAM,MAAM,KAAK,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM;AAAA,QAC9D,EAAE;AAAA,MACJ;AAAA,IACF;AAEA,UAAM,YAAY,IAAI,iBAAiB,MAAM;AAC7C,oBAAgB,WAAW,OAAO,KAAK;AACvC,WAAO,EAAE,QAAQ,UAAU,UAAU,UAAU,SAAS;AAAA,EAC1D;AACF;;;AC/GA,IAAe,eAAf,MAAiG;AAKjG;;;APAO,IAAM,eAAN,cAA2B,aAAkC;AAAA,EAClE,YACmB,SACA,OACA,QACA,SAA2B,IAAI,iBAAiB,GACjE;AACA,UAAM;AALW;AACA;AACA;AACA;AAAA,EAGnB;AAAA,EAEA,MAAa,QAAQ,UAAgC,EAAE,OAAO,KAAK,GAAiC;AAClG,UAAM,SAAS,MAAM,SAAS,KAAK,OAAO,MAAM;AAChD,UAAM,SAAS,IAAI,sBAAsB,EAAE,MAAM,QAAQ,KAAK,KAAK;AACnE,QAAI,OAAO,WAAW,eAAe;AACnC,YAAM,UAAuC,OAAO,YAAY,IAAI,CAAAC,iBAAe;AAAA,QACjF,QAAQ;AAAA,QACR,UAAU,KAAK;AAAA,QACf,MAAM;AAAA,QACN,QAAQA,YAAW;AAAA,QACnB,QAAQA,YAAW;AAAA,MACrB,EAAE;AACF,aAAO,KAAK,OAAO,OAAO,OAAO;AAAA,IACnC;AAEA,UAAM,SAAS,IAAI,iBAAiB,EAAE,QAAQ,KAAK,OAAO,OAAO,QAAQ;AACzE,QAAI,CAAC,OAAO,QAAQ;AAClB,aAAO,KAAK,OAAO,OAAO,CAAC,CAAC;AAAA,IAC9B;AAEA,UAAM,OAAO,IAAI,kBAAkB,EAAE,KAAK,QAAQ,OAAO,UAAU,QAAQ,KAAK,OAAO;AACvF,UAAM,SAAS,IAAI,aAAa,EAAE,MAAM,QAAQ,KAAK,KAAK;AAC1D,QAAI,OAAO,WAAW,WAAW;AAC/B,YAAM,IAAI;AAAA,QACR,yBAAyB,KAAK,KAAK,KAAK,OAAO,YAAY,IAAI,UAAQ,KAAK,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,MACjG;AAAA,IACF;AAEA,UAAM,UAAU,OAAO,WAAW;AAClC,QAAI,WAAW,QAAQ,OAAO;AAC5B,YAAM,KAAK,OAAO,MAAM,KAAK,QAAQ,OAAO,MAAM;AAAA,IACpD;AAEA,WAAO,KAAK,OAAO,SAAS,KAAK,OAAO;AAAA,EAC1C;AAAA,EAEQ,OAAO,SAAkB,SAA2D;AAC1F,WAAO;AAAA,MACL,WAAW,KAAK;AAAA,MAChB,YAAY,KAAK;AAAA,MACjB;AAAA,MACA,SAAS,CAAC,GAAG,OAAO;AAAA,IACtB;AAAA,EACF;AACF;;;AQhEA,SAAS,SAAS,YAAY;AAC9B,YAAYC,WAAU;AAcf,IAAM,iBAAN,cAA6B,aAA6C;AAAA,EAC/E,YACmB,SACA,aACA,cACjB;AACA,UAAM;AAJW;AACA;AACA;AAAA,EAGnB;AAAA,EAEA,MAAa,QAAQ,UAAgC,EAAE,OAAO,KAAK,GAA4C;AAC7G,UAAM,QAAQ,MAAM,KAAK,aAAa,KAAK,aAAa,EAAE;AAC1D,UAAM,KAAK,CAAC,MAAM,UAAU,iBAAsB,gBAAU,KAAK,KAAK,GAAQ,gBAAU,MAAM,KAAK,CAAC,CAAC;AAErG,UAAM,UAAiC,CAAC;AACxC,eAAW,QAAQ,OAAO;AACxB,YAAM,SAAc,WAAK,KAAK,cAAc,KAAK,YAAY;AAC7D,YAAM,eAAe,IAAI,aAAa,KAAK,SAAS,KAAK,OAAO,MAAM;AACtE,cAAQ,KAAK,MAAM,aAAa,QAAQ,OAAO,CAAC;AAAA,IAClD;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,aAAa,WAAmB,mBAAiD;AAC7F,UAAM,QAAQ,MAAM,QAAQ,SAAS;AACrC,UAAM,KAAK,gBAAgB;AAC3B,UAAM,QAAqB,CAAC;AAE5B,eAAW,QAAQ,OAAO;AACxB,YAAM,QAAa,WAAK,WAAW,IAAI;AACvC,aAAO,MAAM,cAAc,KAAK,EAAE;AAClC,UAAI,aAAa,KAAK,aAAa,KAAK,EAAG;AAE3C,YAAM,YAAY,MAAM,KAAK,KAAK;AAClC,UAAI,UAAU,YAAY,GAAG;AAC3B,cAAM,KAAK,GAAI,MAAM,KAAK,aAAa,OAAY,WAAK,mBAAmB,IAAI,CAAC,CAAE;AAAA,MACpF,WAAW,UAAU,OAAO,KAAU,cAAQ,IAAI,EAAE,YAAY,MAAM,SAAS;AAC7E,cAAM,KAAK,EAAE,OAAO,cAAmB,WAAK,mBAAmB,IAAI,EAAE,CAAC;AAAA,MACxE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;;;AZ5CO,IAAM,WAAN,MAAe;AAAA,EACpB,YACmB,SACA,WACA,YACA,MAAoB,KAAK,KAC1C;AAJiB;AACA;AACA;AACA;AAAA,EAChB;AAAA,EAEH,MAAa,QAAQ,UAA4B,EAAE,QAAQ,MAAM,GAA6B;AAC5F,QAAI,KAAK,QAAQ,SAAS,YAAY;AACpC,YAAM,IAAI,MAAM,iCAAiC,KAAK,QAAQ,IAAI,EAAE;AAAA,IACtE;AAEA,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,YAAY,MAAMC,MAAK,KAAK,SAAS;AAE3C,UAAM,cAAc,KAAK,SAAS;AAElC,QAAI;AACJ,QAAI,UAAU,OAAO,GAAG;AACtB,UAAS,cAAQ,KAAK,SAAS,EAAE,YAAY,MAAM,SAAS;AAC1D,cAAM,IAAI,MAAM,0BAA0B,KAAK,SAAS,EAAE;AAAA,MAC5D;AACA,UAAS,cAAQ,KAAK,UAAU,EAAE,YAAY,MAAM,SAAS;AAC3D,cAAM,IAAI,MAAM,sDAAsD;AAAA,MACxE;AACA,cAAQ;AAAA,QACN,MAAM,IAAI,aAAa,KAAK,SAAS,KAAK,WAAW,KAAK,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,OAAO,CAAC;AAAA,MAC1G;AAAA,IACF,WAAW,UAAU,YAAY,GAAG;AAClC,cAAQ,MAAM,IAAI,eAAe,KAAK,SAAS,KAAK,WAAW,KAAK,UAAU,EAAE,QAAQ;AAAA,QACtF,OAAO,CAAC,QAAQ;AAAA,MAClB,CAAC;AAAA,IACH,OAAO;AACL,YAAM,IAAI,MAAM,2BAA2B,KAAK,SAAS,EAAE;AAAA,IAC7D;AAEA,WAAO,IAAI,uBAAuB,EAAE;AAAA,MAClC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK,QAAQ;AAAA,MACb,QAAQ;AAAA,MACR,KAAK,IAAI,IAAI;AAAA,MACb;AAAA,IACF;AAAA,EACF;AACF;;;AavDO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAA6B,SAA2B,IAAI,iBAAiB,GAAG;AAAnD;AAAA,EAAoD;AAAA,EAEjF,MAAa,MAAMC,OAAc,QAAwC;AACvE,UAAM,WAAW,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA;AACnD,UAAM,KAAK,OAAO,MAAMA,OAAM,QAAQ;AAAA,EACxC;AACF;;;ACLO,IAAM,oBAAN,MAAwB;AAAA,EACtB,QAAQ,QAAyB,QAA0B;AAChE,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,UAAU,GAAG,QAAQ,YAAY,mBAAmB,QAAQ,YAAY,IAC5E,OAAO,SAAS,iBAAiB,SACnC;AACA,UAAM,SAAS,aAAa,QAAQ,SAAS,aAAa,QAAQ,MAAM,kBAAkB,QAAQ,WAAW,cAAc,QAAQ,OAAO,mBAAmB,QAAQ,WAAW;AAChL,UAAM,cAAc,OAAO,MAAM;AAAA,MAAQ,UACvC,KAAK,QACF,OAAO,CAAC,WAAqE,OAAO,WAAW,WAAW,EAC1G,IAAI,YAAU,GAAG,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,OAAO,IAAI,KAAK,OAAO,MAAM,EAAE;AAAA,IACpF;AAEA,WAAO,MAAM,CAAC,OAAO,SAAS,YAAY,OAAO,KAAK,SAAS,QAAQ,GAAG,aAAa,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,EACvG;AACF;;;ACbA,SAAS,mBAAmB,OAA2C;AACrE,SACE,OAAO,UAAU,YACjB,UAAU,QACV,aAAa,SACb,OAAQ,MAAkC,YAAY;AAE1D;AAOA,SAAS,mBAAmB,YAAuC;AACjE,MAAI,mBAAmB,UAAU,EAAG,QAAO;AAE3C,MAAI;AACF,WAAO,IAAI,MAAM,KAAK,UAAU,UAAU,CAAC;AAAA,EAC7C,QAAQ;AAGN,WAAO,IAAI,MAAM,OAAO,UAAU,CAAC;AAAA,EACrC;AACF;AAOA,SAAS,gBAAgB,OAAgB;AACvC,SAAO,mBAAmB,KAAK,EAAE;AACnC;;;ACxCO,SAAS,gBAAgB,QAAyB,iBAAqC;AAC5F,MAAI,OAAO,QAAQ,cAAc,EAAG,QAAO;AAE3C,QAAM,gBAAgB,OAAO,QAAQ,SAAS,KAAK,OAAO,QAAQ,cAAc,KAAK,OAAO,QAAQ,UAAU;AAE9G,SAAO,iBAAiB,CAAC,kBAAkB,IAAI;AACjD;;;ACRA,OAAOC,WAAU;AAEV,SAAS,mBAAmB,YAA0B;AAC3D,MAAI,WAAW,KAAK,EAAE,WAAW,GAAG;AAClC,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,MAAIA,MAAK,QAAQ,UAAU,EAAE,YAAY,MAAM,SAAS;AACtD,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AACF;;;A1DeA,IAAM,gBAA2B;AAAA,EAC/B,QAAQ,QAAQ;AAAA,EAChB,QAAQ,QAAQ;AAClB;AAEA,eAAsB,OAAO,MAAyB,SAAoB,eAAmC;AAC3G,MAAI,WAAsB;AAC1B,MAAI,QAAQ;AACZ,QAAM,UAAU,IAAI,QAAQ;AAE5B,UACG,KAAK,qBAAqB,EAC1B,QAAQ,gBAAY,OAAO,EAC3B,YAAY,kEAAkE,EAC9E,aAAa,EACb,gBAAgB;AAAA,IACf,UAAU,UAAQ,OAAO,OAAO,MAAM,IAAI;AAAA,IAC1C,UAAU,UAAQ,OAAO,OAAO,MAAM,IAAI;AAAA,EAC5C,CAAC,EACA,SAAS,WAAW,2BAA2B,EAC/C;AAAA,IACC;AAAA,IACA;AAAA,EACF,EACC;AAAA,IACC,IAAI,OAAO,yBAAyB,uCAAuC,EACxE,QAAQ,CAAC,UAAU,CAAC,EACpB,QAAQ,UAAU;AAAA,EACvB,EACC,OAAO,aAAa,8CAA8C,KAAK,EACvE,OAAO,mBAAmB,wDAAwD,EAClF,OAAO,sBAAsB,gDAAgD,KAAK,EAClF,OAAO,eAAe,wBAAwB,KAAK,EACnD,OAAO,OAAO,OAAe,YAA4B;AACxD,YAAQ,QAAQ;AAChB,WAAO,QAAQ,QAAQ,UAAU;AAEjC,UAAM,cAAc,QAAQ,UAAU;AACtC,UAAM,UAAU,eAAe,OAAO,QAAQ,MAAM;AACpD,QAAI,QAAQ,WAAW,QAAW;AAChC,yBAAmB,QAAQ,MAAM;AAAA,IACnC;AACA,UAAM,SAAS,MAAM,IAAI,SAAS,SAAS,OAAO,WAAW,EAAE,QAAQ,EAAE,QAAQ,QAAQ,OAAO,CAAC;AACjG,UAAM,eAAe,OAAO,QAAQ,cAAc,IAAI,OAAO,SAAS,OAAO;AAE7E,QAAI,kBAAkB,EAAE,QAAQ,QAAQ,YAAY;AACpD,QAAI,QAAQ,WAAW,QAAW;AAChC,YAAM,IAAI,iBAAiB,EAAE,MAAM,QAAQ,QAAQ,MAAM;AAAA,IAC3D;AAEA,eAAW,gBAAgB,QAAQ,QAAQ,eAAe;AAAA,EAC5D,CAAC;AAEH,MAAI;AACF,UAAM,QAAQ,WAAW,CAAC,GAAG,IAAI,CAAC;AAClC,WAAO;AAAA,EACT,SAAS,OAAgB;AACvB,QAAI,iBAAiB,gBAAgB;AACnC,aAAO,MAAM,aAAa,IAAI,IAAI;AAAA,IACpC;AAEA,WAAO,OAAO,MAAM,UAAU,gBAAgB,KAAK,CAAC;AAAA,CAAI;AACxD,QAAI,SAAS,iBAAiB,SAAS,MAAM,OAAO;AAClD,aAAO,OAAO,MAAM,GAAG,MAAM,KAAK;AAAA,CAAI;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AACF;;;A2DzFA,eAAe,OAAsB;AACnC,UAAQ,WAAW,MAAM,OAAO,QAAQ,IAAI;AAC9C;AAEA,KAAK,KAAK,EAAE,MAAM,CAAC,UAAmB;AACpC,UAAQ,OAAO,MAAM,UAAU,gBAAgB,KAAK,CAAC;AAAA,CAAI;AACzD,UAAQ,WAAW;AACrB,CAAC;","names":["range","path","timestamp","values","main","property","arbitraryValue","closingByOpening","property","range","range","values","mediaRange","activation","numericRange","range","rangesCover","contextUnverified","contextUnverified","compareText","property","stateRange","customProperty","property","values","dynamicBinding","unresolvedBreakpoint","contextUnverified","responsivePrecedenceUnverified","compareText","textSizes","values","property","cssProperties","activation","numericRange","range","rangesCover","arbitraryValue","property","contextUnverified","interpolation","compareText","property","extendedClassDirectives","extendedStyleDirectives","extendedDirectives","activationRange","activation","numericRange","range","rangesCover","contextUnverified","candidate","property","extendedClassDirectives","extendedStyleDirectives","extendedDirectives","contextUnverified","equalClassValues","familyPlan","stat","path","ignore","path","values","path","isBoundClassAttribute","diagnostic","path","stat","path","path"]}
|