JezK
Edit File: package-hoister.js.map
{"version":3,"file":"package-hoister.js","names":["invariant","require","path","historyCounter","LINK_TYPES","Set","HoistManifest","key","parts","pkg","loc","isDirectRequire","isRequired","isIncompatible","originalKey","previousPaths","history","addHistory","isNohoist","originalParentPath","shallowPaths","isShallow","msg","push","PackageHoister","config","resolver","ignoreOptional","workspaceLayout","taintedKeys","Map","levelQueue","tree","nohoistResolver","NohoistResolver","info","existingTaint","get","set","join","patterns","prepass","dedupePatterns","pattern","_seed","queue","length","_propagateRequired","sort","aPattern","bPattern","sortAlpha","sortedQueue","availableSet","hasChanged","queueCopy","t","queueItem","getStrictResolvedPattern","peerDependencies","Object","keys","areDependenciesFulfilled","every","peerDependency","has","add","concat","parent","hoist","ref","_reference","parentParts","incompatible","isMarkedAsOptional","optional","ignore","generateModuleCachePath","name","implodeKey","initNohoist","taintKey","pushed","dependencies","depPattern","toVisit","entries","entry","shift","depinfo","_lookupDependency","depRef","hint","i","checkParts","slice","checkKey","existing","stepUp","highestHoistingPoint","fullKey","stack","pop","duplicate","hoistLoop","isValidPosition","oldKey","rawParts","getNewParts","newKey","declareRename","updateHoistHistory","_originalPath","setKey","oldParts","newParts","taintParents","processParts","start","fromPath","toKey","fromInfo","visited","occurences","visitAdd","ancestry","versions","version","ancestryPatterns","indexOf","visitedPattern","forEach","visitPkg","depAncestry","depAncestryPatterns","ancestryPattern","visitedAncestryPattern","rootPackageNames","packageName","versionOccurences","mostOccurenceCount","mostOccurencePattern","occurenceCount","size","targetWorkspace","focusedWorkspaceName","targetHoistManifest","dependentWorkspaces","Array","from","_getDependentWorkspaces","splitPath","split","isShallowDependency","some","w","treeEntry","devDependencies","unhoistedDependency","unhoistedInfo","_packageDependsOnHoistedPackage","allowDevDeps","alreadySeen","parentName","virtualManifestName","workspaces","directDependencies","ignored","workspace","workspaceVersion","manifest","startsWith","WS_ROOT_ALIAS","searchPath","p","nested","map","d","dependencyEntry","apply","directDependencyNames","filter","hoisted","checkDevDeps","checked","deps","dep","flatTree","keyParts","isWorkspaceEntry","getFolder","wspPkg","splice","modulesFolder","lockfileFolder","shallowLocs","shallowPath","shallowCopyParts","cwd","moduleFolderName","shallowLoc","newManifest","visibleFlatTree","parentNohoistList","nohoistList","_isTopPackage","_wsRootPackageName","_wsRootNohoistList","_extractNohoistList","_isNohoist","mm","any","_config","plugnplayEnabled","_makePath","result","_remote","type","pathPrefix","ws","getWorkspaces","nohoist","_resolver","getWorkspaceManifest","args","s"],"sourceRoot":"../src","sources":["package-hoister.js"],"sourcesContent":["/* @flow */\n\nimport type PackageResolver from './package-resolver.js';\nimport Config from './config.js';\nimport type {Manifest} from './types.js';\nimport {sortAlpha} from './util/misc.js';\nimport mm from 'micromatch';\nimport WorkspaceLayout from './workspace-layout.js';\n\nconst invariant = require('invariant');\nconst path = require('path');\n\ntype Parts = Array<string>;\n\nlet historyCounter = 0;\n\nconst LINK_TYPES = new Set(['workspace', 'link']);\ntype NewPartsType = {\n parts: Parts,\n duplicate: boolean,\n};\n\nexport class HoistManifest {\n constructor(\n key: string,\n parts: Parts,\n pkg: Manifest,\n loc: string,\n isDirectRequire: boolean,\n isRequired: boolean,\n isIncompatible: boolean,\n ) {\n this.isDirectRequire = isDirectRequire;\n this.isRequired = isRequired;\n this.isIncompatible = isIncompatible;\n\n this.loc = loc;\n this.pkg = pkg;\n this.key = key;\n this.parts = parts;\n this.originalKey = key;\n this.previousPaths = [];\n\n this.history = [];\n this.addHistory(`Start position = ${key}`);\n\n this.isNohoist = false;\n this.originalParentPath = '';\n\n this.shallowPaths = [];\n this.isShallow = false;\n }\n\n isRequired: boolean;\n isIncompatible: boolean;\n isDirectRequire: boolean;\n pkg: Manifest;\n loc: string;\n parts: Parts;\n previousPaths: Array<string>;\n history: Array<string>;\n key: string;\n originalKey: string;\n\n //focus\n shallowPaths: Array<?string>;\n isShallow: boolean;\n\n // nohoist info\n isNohoist: boolean;\n nohoistList: ?Array<string>;\n originalParentPath: string;\n\n addHistory(msg: string) {\n this.history.push(`${++historyCounter}: ${msg}`);\n }\n}\n\nexport default class PackageHoister {\n constructor(\n config: Config,\n resolver: PackageResolver,\n {ignoreOptional, workspaceLayout}: {ignoreOptional: ?boolean, workspaceLayout: ?WorkspaceLayout} = {},\n ) {\n this.resolver = resolver;\n this.config = config;\n\n this.ignoreOptional = ignoreOptional;\n\n this.taintedKeys = new Map();\n this.levelQueue = [];\n this.tree = new Map();\n\n this.workspaceLayout = workspaceLayout;\n\n this.nohoistResolver = new NohoistResolver(config, resolver);\n }\n\n resolver: PackageResolver;\n config: Config;\n nohoistResolver: NohoistResolver;\n\n workspaceLayout: ?WorkspaceLayout;\n\n ignoreOptional: ?boolean;\n\n levelQueue: Array<[string, HoistManifest]>;\n tree: Map<string, HoistManifest>;\n taintedKeys: Map<string, HoistManifest>;\n\n /**\n * Taint this key and prevent any modules from being hoisted to it.\n */\n\n taintKey(key: string, info: HoistManifest): boolean {\n const existingTaint = this.taintedKeys.get(key);\n if (existingTaint && existingTaint.loc !== info.loc) {\n return false;\n } else {\n this.taintedKeys.set(key, info);\n return true;\n }\n }\n\n /**\n * Implode an array of ancestry parts into a key.\n */\n\n implodeKey(parts: Parts): string {\n return parts.join('#');\n }\n\n /**\n * Seed the hoister with patterns taken from the included resolver.\n */\n\n seed(patterns: Array<string>) {\n this.prepass(patterns);\n\n for (const pattern of this.resolver.dedupePatterns(patterns)) {\n this._seed(pattern, {isDirectRequire: true});\n }\n\n while (true) {\n let queue = this.levelQueue;\n if (!queue.length) {\n this._propagateRequired();\n return;\n }\n\n this.levelQueue = [];\n\n // sort queue to get determinism between runs\n queue = queue.sort(([aPattern], [bPattern]) => {\n return sortAlpha(aPattern, bPattern);\n });\n\n // sort the queue again to hoist packages without peer dependencies first\n let sortedQueue = [];\n const availableSet = new Set();\n\n let hasChanged = true;\n while (queue.length > 0 && hasChanged) {\n hasChanged = false;\n\n const queueCopy = queue;\n queue = [];\n for (let t = 0; t < queueCopy.length; ++t) {\n const queueItem = queueCopy[t];\n const pattern = queueItem[0];\n const pkg = this.resolver.getStrictResolvedPattern(pattern);\n\n const peerDependencies = Object.keys(pkg.peerDependencies || {});\n const areDependenciesFulfilled = peerDependencies.every(peerDependency => availableSet.has(peerDependency));\n\n if (areDependenciesFulfilled) {\n // Move the package inside our sorted queue\n sortedQueue.push(queueItem);\n\n // Add it to our set, so that we know it is available\n availableSet.add(pattern);\n\n // Schedule a next pass, in case other packages had peer dependencies on this one\n hasChanged = true;\n } else {\n queue.push(queueItem);\n }\n }\n }\n\n // We might end up with some packages left in the queue, that have not been sorted. We reach this codepath if two\n // packages have a cyclic dependency, or if the peer dependency is provided by a parent package. In these case,\n // nothing we can do, so we just add all of these packages to the end of the sorted queue.\n sortedQueue = sortedQueue.concat(queue);\n\n for (const [pattern, parent] of sortedQueue) {\n const info = this._seed(pattern, {isDirectRequire: false, parent});\n if (info) {\n this.hoist(info);\n }\n }\n }\n }\n\n /**\n * Seed the hoister with a specific pattern.\n */\n\n _seed(\n pattern: string,\n {isDirectRequire, parent}: {isDirectRequire: boolean, parent?: HoistManifest},\n ): ?HoistManifest {\n //\n const pkg = this.resolver.getStrictResolvedPattern(pattern);\n const ref = pkg._reference;\n invariant(ref, 'expected reference');\n\n //\n let parentParts: Parts = [];\n\n const isIncompatible = ref.incompatible;\n const isMarkedAsOptional = ref.optional && this.ignoreOptional;\n\n let isRequired = isDirectRequire && !ref.ignore && !isIncompatible && !isMarkedAsOptional;\n\n if (parent) {\n if (!this.tree.get(parent.key)) {\n return null;\n }\n // non ignored dependencies inherit parent's ignored status\n // parent may transition from ignored to non ignored when hoisted if it is used in another non ignored branch\n if (!isDirectRequire && !isIncompatible && parent.isRequired && !isMarkedAsOptional) {\n isRequired = true;\n }\n parentParts = parent.parts;\n }\n\n //\n const loc: string = this.config.generateModuleCachePath(ref);\n const parts = parentParts.concat(pkg.name);\n const key: string = this.implodeKey(parts);\n const info: HoistManifest = new HoistManifest(key, parts, pkg, loc, isDirectRequire, isRequired, isIncompatible);\n\n this.nohoistResolver.initNohoist(info, parent);\n\n this.tree.set(key, info);\n this.taintKey(key, info);\n\n //\n const pushed = new Set();\n for (const depPattern of ref.dependencies) {\n if (!pushed.has(depPattern)) {\n this.levelQueue.push([depPattern, info]);\n pushed.add(depPattern);\n }\n }\n\n return info;\n }\n\n /**\n * Propagate inherited ignore statuses from non-ignored to ignored packages\n */\n\n _propagateRequired() {\n //\n const toVisit: Array<HoistManifest> = [];\n\n // enumerate all non-ignored packages\n for (const entry of this.tree.entries()) {\n if (entry[1].isRequired) {\n toVisit.push(entry[1]);\n }\n }\n\n // visit them\n while (toVisit.length) {\n const info = toVisit.shift();\n const ref = info.pkg._reference;\n invariant(ref, 'expected reference');\n\n for (const depPattern of ref.dependencies) {\n const depinfo = this._lookupDependency(info, depPattern);\n\n if (!depinfo) {\n continue;\n }\n\n const depRef = depinfo.pkg._reference;\n\n // If it's marked as optional, but the parent is required and the\n // dependency was not listed in `optionalDependencies`, then we mark the\n // dependency as required.\n const isMarkedAsOptional =\n depRef && depRef.optional && this.ignoreOptional && !(info.isRequired && depRef.hint !== 'optional');\n\n if (!depinfo.isRequired && !depinfo.isIncompatible && !isMarkedAsOptional) {\n depinfo.isRequired = true;\n depinfo.addHistory(`Mark as non-ignored because of usage by ${info.key}`);\n toVisit.push(depinfo);\n }\n }\n }\n }\n\n /**\n * Looks up the package a dependency resolves to\n */\n\n _lookupDependency(info: HoistManifest, depPattern: string): ?HoistManifest {\n //\n const pkg = this.resolver.getStrictResolvedPattern(depPattern);\n const ref = pkg._reference;\n invariant(ref, 'expected reference');\n\n //\n for (let i = info.parts.length; i >= 0; i--) {\n const checkParts = info.parts.slice(0, i).concat(pkg.name);\n const checkKey = this.implodeKey(checkParts);\n const existing = this.tree.get(checkKey);\n if (existing) {\n return existing;\n }\n }\n\n return null;\n }\n\n /**\n * Find the highest position we can hoist this module to.\n */\n\n getNewParts(key: string, info: HoistManifest, parts: Parts): NewPartsType {\n let stepUp = false;\n\n const highestHoistingPoint = this.nohoistResolver.highestHoistingPoint(info) || 0;\n const fullKey = this.implodeKey(parts);\n const stack = []; // stack of removed parts\n const name = parts.pop();\n\n if (info.isNohoist) {\n info.addHistory(`Marked as nohoist, will not be hoisted above '${parts[highestHoistingPoint]}'`);\n }\n\n for (let i = parts.length - 1; i >= highestHoistingPoint; i--) {\n const checkParts = parts.slice(0, i).concat(name);\n const checkKey = this.implodeKey(checkParts);\n info.addHistory(`Looked at ${checkKey} for a match`);\n\n const existing = this.tree.get(checkKey);\n\n if (existing) {\n if (existing.loc === info.loc) {\n // switch to non ignored if earlier deduped version was ignored (must be compatible)\n if (!existing.isRequired && info.isRequired) {\n existing.addHistory(`Deduped ${fullKey} to this item, marking as required`);\n existing.isRequired = true;\n } else {\n existing.addHistory(`Deduped ${fullKey} to this item`);\n }\n\n return {parts: checkParts, duplicate: true};\n } else {\n // everything above will be shadowed and this is a conflict\n info.addHistory(`Found a collision at ${checkKey}`);\n break;\n }\n }\n\n const existingTaint = this.taintedKeys.get(checkKey);\n if (existingTaint && existingTaint.loc !== info.loc) {\n info.addHistory(`Broken by ${checkKey}`);\n break;\n }\n }\n\n const peerDependencies = Object.keys(info.pkg.peerDependencies || {});\n\n // remove redundant parts that wont collide\n hoistLoop: while (parts.length > highestHoistingPoint) {\n // we must not hoist a package higher than its peer dependencies\n for (const peerDependency of peerDependencies) {\n const checkParts = parts.concat(peerDependency);\n const checkKey = this.implodeKey(checkParts);\n info.addHistory(`Looked at ${checkKey} for a peer dependency match`);\n\n const existing = this.tree.get(checkKey);\n\n if (existing) {\n info.addHistory(`Found a peer dependency requirement at ${checkKey}`);\n break hoistLoop;\n }\n }\n\n const checkParts = parts.concat(name);\n const checkKey = this.implodeKey(checkParts);\n\n //\n const existing = this.tree.get(checkKey);\n if (existing) {\n stepUp = true;\n break;\n }\n\n // check if we're trying to hoist ourselves to a previously unflattened module key,\n // this will result in a conflict and we'll need to move ourselves up\n if (key !== checkKey && this.taintedKeys.has(checkKey)) {\n stepUp = true;\n break;\n }\n\n //\n stack.push(parts.pop());\n }\n\n //\n parts.push(name);\n\n //\n const isValidPosition = (parts: Parts): boolean => {\n // nohoist package can't be hoisted to the \"root\"\n if (parts.length <= highestHoistingPoint) {\n return false;\n }\n const key = this.implodeKey(parts);\n const existing = this.tree.get(key);\n if (existing && existing.loc === info.loc) {\n return true;\n }\n\n // ensure there's no taint or the taint is us\n const existingTaint = this.taintedKeys.get(key);\n if (existingTaint && existingTaint.loc !== info.loc) {\n return false;\n }\n\n return true;\n };\n\n // we need to special case when we attempt to hoist to the top level as the `existing` logic\n // wont be hit in the above `while` loop and we could conflict\n if (!isValidPosition(parts)) {\n stepUp = true;\n }\n\n // sometimes we need to step up to a parent module to install ourselves\n while (stepUp && stack.length) {\n info.addHistory(`Stepping up from ${this.implodeKey(parts)}`);\n\n parts.pop(); // remove `name`\n parts.push(stack.pop(), name);\n\n if (isValidPosition(parts)) {\n info.addHistory(`Found valid position ${this.implodeKey(parts)}`);\n stepUp = false;\n }\n }\n\n return {parts, duplicate: false};\n }\n\n /**\n * Hoist all seeded patterns to their highest positions.\n */\n\n hoist(info: HoistManifest) {\n const {key: oldKey, parts: rawParts} = info;\n\n // remove this item from the `tree` map so we can ignore it\n this.tree.delete(oldKey);\n const {parts, duplicate} = this.getNewParts(oldKey, info, rawParts.slice());\n\n const newKey = this.implodeKey(parts);\n if (duplicate) {\n info.addHistory(`Satisfied from above by ${newKey}`);\n this.declareRename(info, rawParts, parts);\n this.updateHoistHistory(this.nohoistResolver._originalPath(info), this.implodeKey(parts));\n return;\n }\n\n // update to the new key\n if (oldKey === newKey) {\n info.addHistory(`Didn't hoist - see reason above`);\n this.setKey(info, oldKey, rawParts);\n return;\n }\n\n //\n this.declareRename(info, rawParts, parts);\n this.setKey(info, newKey, parts);\n }\n\n /**\n * Declare that a module has been hoisted and update our internal references.\n */\n\n declareRename(info: HoistManifest, oldParts: Array<string>, newParts: Array<string>) {\n // go down the tree from our new position reserving our name\n this.taintParents(info, oldParts.slice(0, -1), newParts.length - 1);\n }\n\n /**\n * Crawl upwards through a list of ancestry parts and taint a package name.\n */\n\n taintParents(info: HoistManifest, processParts: Array<string>, start: number) {\n for (let i = start; i < processParts.length; i++) {\n const parts = processParts.slice(0, i).concat(info.pkg.name);\n const key = this.implodeKey(parts);\n\n if (this.taintKey(key, info)) {\n info.addHistory(`Tainted ${key} to prevent collisions`);\n }\n }\n }\n\n updateHoistHistory(fromPath: string, toKey: string) {\n const info = this.tree.get(toKey);\n invariant(info, `expect to find hoist-to ${toKey}`);\n info.previousPaths.push(fromPath);\n }\n\n /**\n * Update the key of a module and update our references.\n */\n\n setKey(info: HoistManifest, newKey: string, parts: Array<string>) {\n const oldKey = info.key;\n\n info.key = newKey;\n info.parts = parts;\n this.tree.set(newKey, info);\n\n if (oldKey === newKey) {\n return;\n }\n\n const fromInfo = this.tree.get(newKey);\n invariant(fromInfo, `expect to find hoist-from ${newKey}`);\n info.previousPaths.push(this.nohoistResolver._originalPath(fromInfo));\n info.addHistory(`New position = ${newKey}`);\n }\n\n /**\n * Perform a prepass and if there's multiple versions of the same package, hoist the one with\n * the most dependents to the top.\n */\n\n prepass(patterns: Array<string>) {\n patterns = this.resolver.dedupePatterns(patterns).sort();\n\n const visited: Map<\n string,\n Array<{\n pkg: Manifest,\n ancestry: Array<Manifest>,\n pattern: string,\n }>,\n > = new Map();\n\n const occurences: {\n [packageName: string]: {\n [version: string]: {\n pattern: string,\n occurences: Set<Manifest>,\n },\n },\n } = {};\n\n // visitor to be used inside add() to mark occurences of packages\n const visitAdd = (pkg: Manifest, ancestry: Array<Manifest>, pattern: string) => {\n const versions = (occurences[pkg.name] = occurences[pkg.name] || {});\n const version = (versions[pkg.version] = versions[pkg.version] || {\n occurences: new Set(),\n pattern,\n });\n\n if (ancestry.length) {\n version.occurences.add(ancestry[ancestry.length - 1]);\n }\n };\n\n // add an occurring package to the above data structure\n const add = (pattern: string, ancestry: Array<Manifest>, ancestryPatterns: Array<string>) => {\n const pkg = this.resolver.getStrictResolvedPattern(pattern);\n if (ancestry.indexOf(pkg) >= 0) {\n // prevent recursive dependencies\n return;\n }\n\n let visitedPattern = visited.get(pattern);\n\n if (visitedPattern) {\n // if a package has been visited before, simply increment occurrences of packages\n // like last time this package was visited\n visitedPattern.forEach(visitPkg => {\n visitAdd(visitPkg.pkg, visitPkg.ancestry, visitPkg.pattern);\n });\n\n visitAdd(pkg, ancestry, pattern);\n\n return;\n }\n\n const ref = pkg._reference;\n invariant(ref, 'expected reference');\n\n visitAdd(pkg, ancestry, pattern);\n\n for (const depPattern of ref.dependencies) {\n const depAncestry = ancestry.concat(pkg);\n const depAncestryPatterns = ancestryPatterns.concat(depPattern);\n add(depPattern, depAncestry, depAncestryPatterns);\n }\n\n visitedPattern = visited.get(pattern) || [];\n visited.set(pattern, visitedPattern);\n visitedPattern.push({pkg, ancestry, pattern});\n\n ancestryPatterns.forEach(ancestryPattern => {\n const visitedAncestryPattern = visited.get(ancestryPattern);\n if (visitedAncestryPattern) {\n visitedAncestryPattern.push({pkg, ancestry, pattern});\n }\n });\n };\n\n // get a list of root package names since we can't hoist other dependencies to these spots!\n const rootPackageNames: Set<string> = new Set();\n for (const pattern of patterns) {\n const pkg = this.resolver.getStrictResolvedPattern(pattern);\n rootPackageNames.add(pkg.name);\n add(pattern, [], []);\n }\n\n for (const packageName of Object.keys(occurences).sort()) {\n const versionOccurences = occurences[packageName];\n const versions = Object.keys(versionOccurences);\n\n if (versions.length === 1) {\n // only one package type so we'll hoist this to the top anyway\n continue;\n }\n\n if (this.tree.get(packageName)) {\n // a transitive dependency of a previously hoisted dependency exists\n continue;\n }\n\n if (rootPackageNames.has(packageName)) {\n // can't replace top level packages\n continue;\n }\n\n let mostOccurenceCount;\n let mostOccurencePattern;\n for (const version of Object.keys(versionOccurences).sort()) {\n const {occurences, pattern} = versionOccurences[version];\n const occurenceCount = occurences.size;\n\n if (!mostOccurenceCount || occurenceCount > mostOccurenceCount) {\n mostOccurenceCount = occurenceCount;\n mostOccurencePattern = pattern;\n }\n }\n invariant(mostOccurencePattern, 'expected most occurring pattern');\n invariant(mostOccurenceCount, 'expected most occurring count');\n\n // only hoist this module if it occured more than once\n if (mostOccurenceCount > 1) {\n this._seed(mostOccurencePattern, {isDirectRequire: false});\n }\n }\n }\n\n markShallowWorkspaceEntries() {\n const targetWorkspace = this.config.focusedWorkspaceName;\n const targetHoistManifest = this.tree.get(targetWorkspace);\n invariant(targetHoistManifest, `targetHoistManifest from ${targetWorkspace} missing`);\n\n //dedupe with a set\n const dependentWorkspaces = Array.from(new Set(this._getDependentWorkspaces(targetHoistManifest)));\n\n const entries = Array.from(this.tree);\n entries.forEach(([key, info]) => {\n const splitPath = key.split('#');\n\n //mark the workspace and any un-hoisted dependencies it has for shallow installation\n const isShallowDependency = dependentWorkspaces.some(w => {\n if (splitPath[0] !== w) {\n //entry is not related to the workspace\n return false;\n }\n if (!splitPath[1]) {\n //entry is the workspace\n return true;\n }\n //don't bother marking dev dependencies or nohoist packages for shallow installation\n const treeEntry = this.tree.get(w);\n invariant(treeEntry, 'treeEntry is not defined for ' + w);\n const pkg = treeEntry.pkg;\n return !info.isNohoist && (!pkg.devDependencies || !(splitPath[1] in pkg.devDependencies));\n });\n\n if (isShallowDependency) {\n info.shallowPaths = [null];\n return;\n }\n\n //if package foo is at TARGET_WORKSPACE/node_modules/foo, the hoisted version of foo\n //should be installed under each shallow workspace that uses it\n //(unless that workspace has its own version of foo, in which case that should be installed)\n if (splitPath.length !== 2 || splitPath[0] !== targetWorkspace) {\n return;\n }\n const unhoistedDependency = splitPath[1];\n const unhoistedInfo = this.tree.get(unhoistedDependency);\n if (!unhoistedInfo) {\n return;\n }\n dependentWorkspaces.forEach(w => {\n if (this._packageDependsOnHoistedPackage(w, unhoistedDependency, false)) {\n unhoistedInfo.shallowPaths.push(w);\n }\n });\n });\n }\n\n _getDependentWorkspaces(\n parent: HoistManifest,\n allowDevDeps: boolean = true,\n alreadySeen: Set<string> = new Set(),\n ): Array<string> {\n const parentName = parent.pkg.name;\n if (alreadySeen.has(parentName)) {\n return [];\n }\n\n alreadySeen.add(parentName);\n invariant(this.workspaceLayout, 'missing workspaceLayout');\n const {virtualManifestName, workspaces} = this.workspaceLayout;\n\n const directDependencies = [];\n const ignored = [];\n Object.keys(workspaces).forEach(workspace => {\n if (alreadySeen.has(workspace) || workspace === virtualManifestName) {\n return;\n }\n\n //skip a workspace if a different version of it is already being installed under the parent workspace\n let info = this.tree.get(`${parentName}#${workspace}`);\n if (info) {\n const workspaceVersion = workspaces[workspace].manifest.version;\n if (\n info.isNohoist &&\n info.originalParentPath.startsWith(`/${WS_ROOT_ALIAS}/${parentName}`) &&\n info.pkg.version === workspaceVersion\n ) {\n //nohoist installations are exceptions\n directDependencies.push(info.key);\n } else {\n ignored.push(workspace);\n }\n return;\n }\n\n const searchPath = `/${WS_ROOT_ALIAS}/${parentName}`;\n info = this.tree.get(workspace);\n invariant(info, 'missing workspace tree entry ' + workspace);\n if (!info.previousPaths.some(p => p.startsWith(searchPath))) {\n return;\n }\n if (allowDevDeps || !parent.pkg.devDependencies || !(workspace in parent.pkg.devDependencies)) {\n directDependencies.push(workspace);\n }\n });\n\n let nested = directDependencies.map(d => {\n const dependencyEntry = this.tree.get(d);\n invariant(dependencyEntry, 'missing dependencyEntry ' + d);\n return this._getDependentWorkspaces(dependencyEntry, false, alreadySeen);\n });\n nested = [].concat.apply([], nested); //flatten\n\n const directDependencyNames = directDependencies.map(d => d.split('#').slice(-1)[0]);\n\n return directDependencyNames.concat(nested).filter(w => ignored.indexOf(w) === -1);\n }\n\n _packageDependsOnHoistedPackage(\n p: string,\n hoisted: string,\n checkDevDeps: boolean = true,\n checked: Set<string> = new Set(),\n ): boolean {\n //don't check the same package more than once, and ignore any package that has its own version of hoisted\n if (checked.has(p) || this.tree.has(`${p}#${hoisted}`)) {\n return false;\n }\n checked.add(p);\n const info = this.tree.get(p);\n if (!info) {\n return false;\n }\n\n const pkg = info.pkg;\n if (!pkg) {\n return false;\n }\n\n let deps = [];\n if (pkg.dependencies) {\n deps = deps.concat(Object.keys(pkg.dependencies));\n }\n if (checkDevDeps && pkg.devDependencies) {\n deps = deps.concat(Object.keys(pkg.devDependencies));\n }\n\n if (deps.indexOf(hoisted) !== -1) {\n return true;\n }\n return deps.some(dep => this._packageDependsOnHoistedPackage(dep, hoisted, false, checked));\n }\n\n /**\n * Produce a flattened list of module locations and manifests.\n */\n\n init(): HoistManifestTuples {\n const flatTree = [];\n\n //\n for (const [key, info] of this.tree.entries()) {\n // decompress the location and push it to the flat tree. this path could be made\n // up of modules from different registries so we need to handle this specially\n const parts: Array<string> = [];\n const keyParts = key.split('#');\n const isWorkspaceEntry = this.workspaceLayout && keyParts[0] === this.workspaceLayout.virtualManifestName;\n\n // Don't add the virtual manifest (keyParts.length === 1)\n // or ws childs which were not hoisted to the root (keyParts.length === 2).\n // If a ws child was hoisted its key would not contain the virtual manifest name\n if (isWorkspaceEntry && keyParts.length <= 2) {\n continue;\n }\n\n for (let i = 0; i < keyParts.length; i++) {\n const key = keyParts.slice(0, i + 1).join('#');\n const hoisted = this.tree.get(key);\n invariant(hoisted, `expected hoisted manifest for \"${key}\"`);\n parts.push(this.config.getFolder(hoisted.pkg));\n parts.push(keyParts[i]);\n }\n\n // Check if the destination is pointing to a sub folder of the virtualManifestName\n // e.g. _project_/node_modules/workspace-aggregator-123456/node_modules/workspaceChild/node_modules/dependency\n // This probably happened because the hoister was not able to hoist the workspace child to the root\n // So we have to change the folder to the workspace package location\n if (this.workspaceLayout && isWorkspaceEntry) {\n const wspPkg = this.workspaceLayout.workspaces[keyParts[1]];\n invariant(wspPkg, `expected workspace package to exist for \"${keyParts[1]}\"`);\n parts.splice(0, 4, wspPkg.loc);\n } else {\n if (this.config.modulesFolder) {\n // remove the first part which will be the folder name and replace it with a\n // hardcoded modules folder\n parts.splice(0, 1, this.config.modulesFolder);\n } else {\n // first part will be the registry-specific module folder\n parts.splice(0, 0, this.config.lockfileFolder);\n }\n }\n\n const shallowLocs = [];\n info.shallowPaths.forEach(shallowPath => {\n const shallowCopyParts = parts.slice();\n shallowCopyParts[0] = this.config.cwd;\n if (this.config.modulesFolder) {\n //add back the module folder name for the shallow installation\n const treeEntry = this.tree.get(keyParts[0]);\n invariant(treeEntry, 'expected treeEntry for ' + keyParts[0]);\n const moduleFolderName = this.config.getFolder(treeEntry.pkg);\n shallowCopyParts.splice(1, 0, moduleFolderName);\n }\n\n if (shallowPath) {\n const targetWorkspace = this.config.focusedWorkspaceName;\n const treeEntry = this.tree.get(`${targetWorkspace}#${shallowPath}`) || this.tree.get(shallowPath);\n invariant(treeEntry, 'expected treeEntry for ' + shallowPath);\n const moduleFolderName = this.config.getFolder(treeEntry.pkg);\n shallowCopyParts.splice(1, 0, moduleFolderName, shallowPath);\n }\n shallowLocs.push(path.join(...shallowCopyParts));\n });\n\n const loc = path.join(...parts);\n flatTree.push([loc, info]);\n shallowLocs.forEach(shallowLoc => {\n const newManifest = ({...info, isShallow: true}: any);\n flatTree.push([shallowLoc, (newManifest: HoistManifest)]);\n });\n }\n\n // remove ignored modules from the tree\n const visibleFlatTree = [];\n for (const [loc, info] of flatTree) {\n const ref = info.pkg._reference;\n invariant(ref, 'expected reference');\n if (!info.isRequired) {\n info.addHistory('Deleted as this module was ignored');\n } else {\n visibleFlatTree.push([loc, info]);\n }\n }\n return visibleFlatTree;\n }\n}\n\nconst WS_ROOT_ALIAS = '_project_';\nexport class NohoistResolver {\n constructor(config: Config, resolver: PackageResolver) {\n this._resolver = resolver;\n this._config = config;\n if (resolver.workspaceLayout) {\n this._wsRootPackageName = resolver.workspaceLayout.virtualManifestName;\n const {manifest} = resolver.workspaceLayout.getWorkspaceManifest(this._wsRootPackageName);\n this._wsRootNohoistList = this._extractNohoistList(manifest, manifest.name);\n }\n }\n _resolver: PackageResolver;\n _config: Config;\n _wsRootNohoistList: ?Array<string>;\n _wsRootPackageName: ?string;\n\n /**\n * examine the top level packages to find the root package\n */\n initNohoist = (info: HoistManifest, parent: ?HoistManifest) => {\n let parentNohoistList: ?Array<string>;\n let originalParentPath: string = info.originalParentPath;\n\n if (parent) {\n parentNohoistList = parent.nohoistList;\n originalParentPath = this._originalPath(parent);\n } else {\n invariant(this._isTopPackage(info), `${info.key} doesn't have parent nor a top package`);\n if (info.pkg.name !== this._wsRootPackageName) {\n parentNohoistList = this._wsRootNohoistList;\n originalParentPath = this._wsRootPackageName || '';\n }\n }\n\n info.originalParentPath = originalParentPath;\n let nohoistList = this._extractNohoistList(info.pkg, this._originalPath(info)) || [];\n if (parentNohoistList) {\n nohoistList = nohoistList.concat(parentNohoistList);\n }\n info.nohoistList = nohoistList.length > 0 ? nohoistList : null;\n info.isNohoist = this._isNohoist(info);\n };\n\n /**\n * find the highest hoisting point for the given HoistManifest.\n * algorithm: a nohoist package should never be hoisted beyond the top of its branch, i.e.\n * the first element of its parts. Therefore the highest possible hoisting index is 1,\n * unless the package has only 1 part (itself), in such case returns null just like any hoisted package\n *\n */\n\n highestHoistingPoint = (info: HoistManifest): ?number => {\n return info.isNohoist && info.parts.length > 1 ? 1 : null;\n };\n\n // private functions\n _isNohoist = (info: HoistManifest): boolean => {\n if (this._isTopPackage(info)) {\n return false;\n }\n if (info.nohoistList && info.nohoistList.length > 0 && mm.any(this._originalPath(info), info.nohoistList)) {\n return true;\n }\n if (this._config.plugnplayEnabled) {\n return true;\n }\n return false;\n };\n _isRootPackage = (pkg: Manifest): boolean => {\n return pkg.name === this._wsRootPackageName;\n };\n _originalPath = (info: HoistManifest): string => {\n return this._makePath(info.originalParentPath, info.pkg.name);\n };\n _makePath(...args: Array<string>): string {\n const parts = args.map(s => (s === this._wsRootPackageName ? WS_ROOT_ALIAS : s));\n const result = parts.join('/');\n return result[0] === '/' ? result : '/' + result;\n }\n _isTopPackage = (info: HoistManifest): boolean => {\n const parentParts = info.parts.slice(0, -1);\n const result =\n !parentParts ||\n parentParts.length <= 0 ||\n (parentParts.length === 1 && parentParts[0] === this._wsRootPackageName);\n return result;\n };\n _isLink = (info: HoistManifest): boolean => {\n return info.pkg._remote != null && LINK_TYPES.has(info.pkg._remote.type);\n };\n\n // extract nohoist from package.json then prefix them with branch path\n // so we can matched against the branch tree (\"originalPath\") later\n _extractNohoistList = (pkg: Manifest, pathPrefix: string): ?Array<string> => {\n let nohoistList: ?Array<string>;\n const ws = this._config.getWorkspaces(pkg);\n\n if (ws && ws.nohoist) {\n nohoistList = ws.nohoist.map(p => this._makePath(pathPrefix, p));\n }\n return nohoistList;\n };\n}\n\nexport type HoistManifestTuple = [string, HoistManifest];\nexport type HoistManifestTuples = Array<HoistManifestTuple>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAEA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAAoD;AAAA;AAAA;AAAA;AAAA;AAEpD,IAAMA,SAAS,GAAGC,OAAO,CAAC,WAAW,CAAC;AACtC,IAAMC,IAAI,GAAGD,OAAO,CAAC,MAAM,CAAC;AAI5B,IAAIE,cAAc,GAAG,CAAC;AAEtB,IAAMC,UAAU,GAAG,IAAIC,GAAG,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAAC,IAMrCC,aAAa;EACxB,uBACEC,GAAW,EACXC,KAAY,EACZC,GAAa,EACbC,GAAW,EACXC,eAAwB,EACxBC,UAAmB,EACnBC,cAAuB,EACvB;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IACA,IAAI,CAACF,eAAe,GAAGA,eAAe;IACtC,IAAI,CAACC,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACC,cAAc,GAAGA,cAAc;IAEpC,IAAI,CAACH,GAAG,GAAGA,GAAG;IACd,IAAI,CAACD,GAAG,GAAGA,GAAG;IACd,IAAI,CAACF,GAAG,GAAGA,GAAG;IACd,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACM,WAAW,GAAGP,GAAG;IACtB,IAAI,CAACQ,aAAa,GAAG,EAAE;IAEvB,IAAI,CAACC,OAAO,GAAG,EAAE;IACjB,IAAI,CAACC,UAAU,4BAAqBV,GAAG,EAAG;IAE1C,IAAI,CAACW,SAAS,GAAG,KAAK;IACtB,IAAI,CAACC,kBAAkB,GAAG,EAAE;IAE5B,IAAI,CAACC,YAAY,GAAG,EAAE;IACtB,IAAI,CAACC,SAAS,GAAG,KAAK;EACxB;EAAC;IAAA;IAAA,OAsBD,oBAAWC,GAAW,EAAE;MACtB,IAAI,CAACN,OAAO,CAACO,IAAI,WAAI,EAAEpB,cAAc,eAAKmB,GAAG,EAAG;IAClD;EAAC;EAAA;AAAA;AAAA;AAAA,IAGkBE,cAAc;EACjC,wBACEC,MAAc,EACdC,QAAyB,EAEzB;IAAA,+EADmG,CAAC,CAAC;MAApGC,cAAc,QAAdA,cAAc;MAAEC,eAAe,QAAfA,eAAe;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAEhC,IAAI,CAACF,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACD,MAAM,GAAGA,MAAM;IAEpB,IAAI,CAACE,cAAc,GAAGA,cAAc;IAEpC,IAAI,CAACE,WAAW,GAAG,IAAIC,GAAG,EAAE;IAC5B,IAAI,CAACC,UAAU,GAAG,EAAE;IACpB,IAAI,CAACC,IAAI,GAAG,IAAIF,GAAG,EAAE;IAErB,IAAI,CAACF,eAAe,GAAGA,eAAe;IAEtC,IAAI,CAACK,eAAe,GAAG,IAAIC,eAAe,CAACT,MAAM,EAAEC,QAAQ,CAAC;EAC9D;EAAC;IAAA;IAAA;IAcD;AACF;AACA;;IAEE,kBAASnB,GAAW,EAAE4B,IAAmB,EAAW;MAClD,IAAMC,aAAa,GAAG,IAAI,CAACP,WAAW,CAACQ,GAAG,CAAC9B,GAAG,CAAC;MAC/C,IAAI6B,aAAa,IAAIA,aAAa,CAAC1B,GAAG,KAAKyB,IAAI,CAACzB,GAAG,EAAE;QACnD,OAAO,KAAK;MACd,CAAC,MAAM;QACL,IAAI,CAACmB,WAAW,CAACS,GAAG,CAAC/B,GAAG,EAAE4B,IAAI,CAAC;QAC/B,OAAO,IAAI;MACb;IACF;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAIA,oBAAW3B,KAAY,EAAU;MAC/B,OAAOA,KAAK,CAAC+B,IAAI,CAAC,GAAG,CAAC;IACxB;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAIA,cAAKC,QAAuB,EAAE;MAAA;MAC5B,IAAI,CAACC,OAAO,CAACD,QAAQ,CAAC;MAAC,2CAED,IAAI,CAACd,QAAQ,CAACgB,cAAc,CAACF,QAAQ,CAAC;QAAA;MAAA;QAA5D,oDAA8D;UAAA,IAAnDG,OAAO;UAChB,IAAI,CAACC,KAAK,CAACD,OAAO,EAAE;YAAChC,eAAe,EAAE;UAAI,CAAC,CAAC;QAC9C;MAAC;QAAA;MAAA;QAAA;MAAA;MAAA,6BAEY;QACX,IAAIkC,KAAK,GAAG,KAAI,CAACd,UAAU;QAC3B,IAAI,CAACc,KAAK,CAACC,MAAM,EAAE;UACjB,KAAI,CAACC,kBAAkB,EAAE;UAAC;YAAA;UAAA;QAE5B;QAEA,KAAI,CAAChB,UAAU,GAAG,EAAE;;QAEpB;QACAc,KAAK,GAAGA,KAAK,CAACG,IAAI,CAAC,wBAA4B;UAAA;YAA1BC,QAAQ;UAAA;YAAIC,QAAQ;UACvC,OAAO,IAAAC,iBAAS,EAACF,QAAQ,EAAEC,QAAQ,CAAC;QACtC,CAAC,CAAC;;QAEF;QACA,IAAIE,WAAW,GAAG,EAAE;QACpB,IAAMC,YAAY,GAAG,IAAIhD,GAAG,EAAE;QAE9B,IAAIiD,UAAU,GAAG,IAAI;QACrB,OAAOT,KAAK,CAACC,MAAM,GAAG,CAAC,IAAIQ,UAAU,EAAE;UACrCA,UAAU,GAAG,KAAK;UAElB,IAAMC,SAAS,GAAGV,KAAK;UACvBA,KAAK,GAAG,EAAE;UACV,KAAK,IAAIW,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGD,SAAS,CAACT,MAAM,EAAE,EAAEU,CAAC,EAAE;YACzC,IAAMC,SAAS,GAAGF,SAAS,CAACC,CAAC,CAAC;YAC9B,IAAMb,QAAO,GAAGc,SAAS,CAAC,CAAC,CAAC;YAC5B,IAAMhD,GAAG,GAAG,KAAI,CAACiB,QAAQ,CAACgC,wBAAwB,CAACf,QAAO,CAAC;YAE3D,IAAMgB,gBAAgB,GAAGC,MAAM,CAACC,IAAI,CAACpD,GAAG,CAACkD,gBAAgB,IAAI,CAAC,CAAC,CAAC;YAChE,IAAMG,wBAAwB,GAAGH,gBAAgB,CAACI,KAAK,CAAC,UAAAC,cAAc;cAAA,OAAIX,YAAY,CAACY,GAAG,CAACD,cAAc,CAAC;YAAA,EAAC;YAE3G,IAAIF,wBAAwB,EAAE;cAC5B;cACAV,WAAW,CAAC7B,IAAI,CAACkC,SAAS,CAAC;;cAE3B;cACAJ,YAAY,CAACa,GAAG,CAACvB,QAAO,CAAC;;cAEzB;cACAW,UAAU,GAAG,IAAI;YACnB,CAAC,MAAM;cACLT,KAAK,CAACtB,IAAI,CAACkC,SAAS,CAAC;YACvB;UACF;QACF;;QAEA;QACA;QACA;QACAL,WAAW,GAAGA,WAAW,CAACe,MAAM,CAACtB,KAAK,CAAC;QAAC,4CAERO,WAAW;UAAA;QAAA;UAA3C,uDAA6C;YAAA;cAAjCT,SAAO;cAAEyB,MAAM;YACzB,IAAMjC,IAAI,GAAG,KAAI,CAACS,KAAK,CAACD,SAAO,EAAE;cAAChC,eAAe,EAAE,KAAK;cAAEyD,MAAM,EAANA;YAAM,CAAC,CAAC;YAClE,IAAIjC,IAAI,EAAE;cACR,KAAI,CAACkC,KAAK,CAAClC,IAAI,CAAC;YAClB;UACF;QAAC;UAAA;QAAA;UAAA;QAAA;MACH,CAAC;MA1DD,OAAO,IAAI;QAAA;QAAA;MAAA;IA2Db;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAIA,eACEQ,OAAe,SAEC;MAAA,IADfhC,eAAe,SAAfA,eAAe;QAAEyD,MAAM,SAANA,MAAM;MAExB;MACA,IAAM3D,GAAG,GAAG,IAAI,CAACiB,QAAQ,CAACgC,wBAAwB,CAACf,OAAO,CAAC;MAC3D,IAAM2B,GAAG,GAAG7D,GAAG,CAAC8D,UAAU;MAC1BvE,SAAS,CAACsE,GAAG,EAAE,oBAAoB,CAAC;;MAEpC;MACA,IAAIE,WAAkB,GAAG,EAAE;MAE3B,IAAM3D,cAAc,GAAGyD,GAAG,CAACG,YAAY;MACvC,IAAMC,kBAAkB,GAAGJ,GAAG,CAACK,QAAQ,IAAI,IAAI,CAAChD,cAAc;MAE9D,IAAIf,UAAU,GAAGD,eAAe,IAAI,CAAC2D,GAAG,CAACM,MAAM,IAAI,CAAC/D,cAAc,IAAI,CAAC6D,kBAAkB;MAEzF,IAAIN,MAAM,EAAE;QACV,IAAI,CAAC,IAAI,CAACpC,IAAI,CAACK,GAAG,CAAC+B,MAAM,CAAC7D,GAAG,CAAC,EAAE;UAC9B,OAAO,IAAI;QACb;QACA;QACA;QACA,IAAI,CAACI,eAAe,IAAI,CAACE,cAAc,IAAIuD,MAAM,CAACxD,UAAU,IAAI,CAAC8D,kBAAkB,EAAE;UACnF9D,UAAU,GAAG,IAAI;QACnB;QACA4D,WAAW,GAAGJ,MAAM,CAAC5D,KAAK;MAC5B;;MAEA;MACA,IAAME,GAAW,GAAG,IAAI,CAACe,MAAM,CAACoD,uBAAuB,CAACP,GAAG,CAAC;MAC5D,IAAM9D,KAAK,GAAGgE,WAAW,CAACL,MAAM,CAAC1D,GAAG,CAACqE,IAAI,CAAC;MAC1C,IAAMvE,GAAW,GAAG,IAAI,CAACwE,UAAU,CAACvE,KAAK,CAAC;MAC1C,IAAM2B,IAAmB,GAAG,IAAI7B,aAAa,CAACC,GAAG,EAAEC,KAAK,EAAEC,GAAG,EAAEC,GAAG,EAAEC,eAAe,EAAEC,UAAU,EAAEC,cAAc,CAAC;MAEhH,IAAI,CAACoB,eAAe,CAAC+C,WAAW,CAAC7C,IAAI,EAAEiC,MAAM,CAAC;MAE9C,IAAI,CAACpC,IAAI,CAACM,GAAG,CAAC/B,GAAG,EAAE4B,IAAI,CAAC;MACxB,IAAI,CAAC8C,QAAQ,CAAC1E,GAAG,EAAE4B,IAAI,CAAC;;MAExB;MACA,IAAM+C,MAAM,GAAG,IAAI7E,GAAG,EAAE;MAAC,4CACAiE,GAAG,CAACa,YAAY;QAAA;MAAA;QAAzC,uDAA2C;UAAA,IAAhCC,UAAU;UACnB,IAAI,CAACF,MAAM,CAACjB,GAAG,CAACmB,UAAU,CAAC,EAAE;YAC3B,IAAI,CAACrD,UAAU,CAACR,IAAI,CAAC,CAAC6D,UAAU,EAAEjD,IAAI,CAAC,CAAC;YACxC+C,MAAM,CAAChB,GAAG,CAACkB,UAAU,CAAC;UACxB;QACF;MAAC;QAAA;MAAA;QAAA;MAAA;MAED,OAAOjD,IAAI;IACb;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAIA,8BAAqB;MACnB;MACA,IAAMkD,OAA6B,GAAG,EAAE;;MAExC;MAAA,4CACoB,IAAI,CAACrD,IAAI,CAACsD,OAAO,EAAE;QAAA;MAAA;QAAvC,uDAAyC;UAAA,IAA9BC,KAAK;UACd,IAAIA,KAAK,CAAC,CAAC,CAAC,CAAC3E,UAAU,EAAE;YACvByE,OAAO,CAAC9D,IAAI,CAACgE,KAAK,CAAC,CAAC,CAAC,CAAC;UACxB;QACF;;QAEA;MAAA;QAAA;MAAA;QAAA;MAAA;MACA,OAAOF,OAAO,CAACvC,MAAM,EAAE;QACrB,IAAMX,IAAI,GAAGkD,OAAO,CAACG,KAAK,EAAE;QAC5B,IAAMlB,GAAG,GAAGnC,IAAI,CAAC1B,GAAG,CAAC8D,UAAU;QAC/BvE,SAAS,CAACsE,GAAG,EAAE,oBAAoB,CAAC;QAAC,4CAEZA,GAAG,CAACa,YAAY;UAAA;QAAA;UAAzC,uDAA2C;YAAA,IAAhCC,UAAU;YACnB,IAAMK,OAAO,GAAG,IAAI,CAACC,iBAAiB,CAACvD,IAAI,EAAEiD,UAAU,CAAC;YAExD,IAAI,CAACK,OAAO,EAAE;cACZ;YACF;YAEA,IAAME,MAAM,GAAGF,OAAO,CAAChF,GAAG,CAAC8D,UAAU;;YAErC;YACA;YACA;YACA,IAAMG,kBAAkB,GACtBiB,MAAM,IAAIA,MAAM,CAAChB,QAAQ,IAAI,IAAI,CAAChD,cAAc,IAAI,EAAEQ,IAAI,CAACvB,UAAU,IAAI+E,MAAM,CAACC,IAAI,KAAK,UAAU,CAAC;YAEtG,IAAI,CAACH,OAAO,CAAC7E,UAAU,IAAI,CAAC6E,OAAO,CAAC5E,cAAc,IAAI,CAAC6D,kBAAkB,EAAE;cACzEe,OAAO,CAAC7E,UAAU,GAAG,IAAI;cACzB6E,OAAO,CAACxE,UAAU,mDAA4CkB,IAAI,CAAC5B,GAAG,EAAG;cACzE8E,OAAO,CAAC9D,IAAI,CAACkE,OAAO,CAAC;YACvB;UACF;QAAC;UAAA;QAAA;UAAA;QAAA;MACH;IACF;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAIA,2BAAkBtD,IAAmB,EAAEiD,UAAkB,EAAkB;MACzE;MACA,IAAM3E,GAAG,GAAG,IAAI,CAACiB,QAAQ,CAACgC,wBAAwB,CAAC0B,UAAU,CAAC;MAC9D,IAAMd,GAAG,GAAG7D,GAAG,CAAC8D,UAAU;MAC1BvE,SAAS,CAACsE,GAAG,EAAE,oBAAoB,CAAC;;MAEpC;MACA,KAAK,IAAIuB,CAAC,GAAG1D,IAAI,CAAC3B,KAAK,CAACsC,MAAM,EAAE+C,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;QAC3C,IAAMC,UAAU,GAAG3D,IAAI,CAAC3B,KAAK,CAACuF,KAAK,CAAC,CAAC,EAAEF,CAAC,CAAC,CAAC1B,MAAM,CAAC1D,GAAG,CAACqE,IAAI,CAAC;QAC1D,IAAMkB,QAAQ,GAAG,IAAI,CAACjB,UAAU,CAACe,UAAU,CAAC;QAC5C,IAAMG,QAAQ,GAAG,IAAI,CAACjE,IAAI,CAACK,GAAG,CAAC2D,QAAQ,CAAC;QACxC,IAAIC,QAAQ,EAAE;UACZ,OAAOA,QAAQ;QACjB;MACF;MAEA,OAAO,IAAI;IACb;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAIA,qBAAY1F,GAAW,EAAE4B,IAAmB,EAAE3B,KAAY,EAAgB;MAAA;MACxE,IAAI0F,MAAM,GAAG,KAAK;MAElB,IAAMC,oBAAoB,GAAG,IAAI,CAAClE,eAAe,CAACkE,oBAAoB,CAAChE,IAAI,CAAC,IAAI,CAAC;MACjF,IAAMiE,OAAO,GAAG,IAAI,CAACrB,UAAU,CAACvE,KAAK,CAAC;MACtC,IAAM6F,KAAK,GAAG,EAAE,CAAC,CAAC;MAClB,IAAMvB,IAAI,GAAGtE,KAAK,CAAC8F,GAAG,EAAE;MAExB,IAAInE,IAAI,CAACjB,SAAS,EAAE;QAClBiB,IAAI,CAAClB,UAAU,yDAAkDT,KAAK,CAAC2F,oBAAoB,CAAC,OAAI;MAClG;MAEA,KAAK,IAAIN,CAAC,GAAGrF,KAAK,CAACsC,MAAM,GAAG,CAAC,EAAE+C,CAAC,IAAIM,oBAAoB,EAAEN,CAAC,EAAE,EAAE;QAC7D,IAAMC,UAAU,GAAGtF,KAAK,CAACuF,KAAK,CAAC,CAAC,EAAEF,CAAC,CAAC,CAAC1B,MAAM,CAACW,IAAI,CAAC;QACjD,IAAMkB,QAAQ,GAAG,IAAI,CAACjB,UAAU,CAACe,UAAU,CAAC;QAC5C3D,IAAI,CAAClB,UAAU,qBAAc+E,QAAQ,kBAAe;QAEpD,IAAMC,QAAQ,GAAG,IAAI,CAACjE,IAAI,CAACK,GAAG,CAAC2D,QAAQ,CAAC;QAExC,IAAIC,QAAQ,EAAE;UACZ,IAAIA,QAAQ,CAACvF,GAAG,KAAKyB,IAAI,CAACzB,GAAG,EAAE;YAC7B;YACA,IAAI,CAACuF,QAAQ,CAACrF,UAAU,IAAIuB,IAAI,CAACvB,UAAU,EAAE;cAC3CqF,QAAQ,CAAChF,UAAU,mBAAYmF,OAAO,wCAAqC;cAC3EH,QAAQ,CAACrF,UAAU,GAAG,IAAI;YAC5B,CAAC,MAAM;cACLqF,QAAQ,CAAChF,UAAU,mBAAYmF,OAAO,mBAAgB;YACxD;YAEA,OAAO;cAAC5F,KAAK,EAAEsF,UAAU;cAAES,SAAS,EAAE;YAAI,CAAC;UAC7C,CAAC,MAAM;YACL;YACApE,IAAI,CAAClB,UAAU,gCAAyB+E,QAAQ,EAAG;YACnD;UACF;QACF;QAEA,IAAM5D,aAAa,GAAG,IAAI,CAACP,WAAW,CAACQ,GAAG,CAAC2D,QAAQ,CAAC;QACpD,IAAI5D,aAAa,IAAIA,aAAa,CAAC1B,GAAG,KAAKyB,IAAI,CAACzB,GAAG,EAAE;UACnDyB,IAAI,CAAClB,UAAU,qBAAc+E,QAAQ,EAAG;UACxC;QACF;MACF;MAEA,IAAMrC,gBAAgB,GAAGC,MAAM,CAACC,IAAI,CAAC1B,IAAI,CAAC1B,GAAG,CAACkD,gBAAgB,IAAI,CAAC,CAAC,CAAC;;MAErE;MACA6C,SAAS,EAAE,OAAOhG,KAAK,CAACsC,MAAM,GAAGqD,oBAAoB,EAAE;QACrD;QAAA,4CAC6BxC,gBAAgB;UAAA;QAAA;UAA7C,uDAA+C;YAAA,IAApCK,cAAc;YACvB,IAAM8B,YAAU,GAAGtF,KAAK,CAAC2D,MAAM,CAACH,cAAc,CAAC;YAC/C,IAAMgC,UAAQ,GAAG,IAAI,CAACjB,UAAU,CAACe,YAAU,CAAC;YAC5C3D,IAAI,CAAClB,UAAU,qBAAc+E,UAAQ,kCAA+B;YAEpE,IAAMC,UAAQ,GAAG,IAAI,CAACjE,IAAI,CAACK,GAAG,CAAC2D,UAAQ,CAAC;YAExC,IAAIC,UAAQ,EAAE;cACZ9D,IAAI,CAAClB,UAAU,kDAA2C+E,UAAQ,EAAG;cACrE,MAAMQ,SAAS;YACjB;UACF;QAAC;UAAA;QAAA;UAAA;QAAA;QAED,IAAMV,WAAU,GAAGtF,KAAK,CAAC2D,MAAM,CAACW,IAAI,CAAC;QACrC,IAAMkB,SAAQ,GAAG,IAAI,CAACjB,UAAU,CAACe,WAAU,CAAC;;QAE5C;QACA,IAAMG,SAAQ,GAAG,IAAI,CAACjE,IAAI,CAACK,GAAG,CAAC2D,SAAQ,CAAC;QACxC,IAAIC,SAAQ,EAAE;UACZC,MAAM,GAAG,IAAI;UACb;QACF;;QAEA;QACA;QACA,IAAI3F,GAAG,KAAKyF,SAAQ,IAAI,IAAI,CAACnE,WAAW,CAACoC,GAAG,CAAC+B,SAAQ,CAAC,EAAE;UACtDE,MAAM,GAAG,IAAI;UACb;QACF;;QAEA;QACAG,KAAK,CAAC9E,IAAI,CAACf,KAAK,CAAC8F,GAAG,EAAE,CAAC;MACzB;;MAEA;MACA9F,KAAK,CAACe,IAAI,CAACuD,IAAI,CAAC;;MAEhB;MACA,IAAM2B,eAAe,GAAG,SAAlBA,eAAe,CAAIjG,KAAY,EAAc;QACjD;QACA,IAAIA,KAAK,CAACsC,MAAM,IAAIqD,oBAAoB,EAAE;UACxC,OAAO,KAAK;QACd;QACA,IAAM5F,GAAG,GAAG,MAAI,CAACwE,UAAU,CAACvE,KAAK,CAAC;QAClC,IAAMyF,QAAQ,GAAG,MAAI,CAACjE,IAAI,CAACK,GAAG,CAAC9B,GAAG,CAAC;QACnC,IAAI0F,QAAQ,IAAIA,QAAQ,CAACvF,GAAG,KAAKyB,IAAI,CAACzB,GAAG,EAAE;UACzC,OAAO,IAAI;QACb;;QAEA;QACA,IAAM0B,aAAa,GAAG,MAAI,CAACP,WAAW,CAACQ,GAAG,CAAC9B,GAAG,CAAC;QAC/C,IAAI6B,aAAa,IAAIA,aAAa,CAAC1B,GAAG,KAAKyB,IAAI,CAACzB,GAAG,EAAE;UACnD,OAAO,KAAK;QACd;QAEA,OAAO,IAAI;MACb,CAAC;;MAED;MACA;MACA,IAAI,CAAC+F,eAAe,CAACjG,KAAK,CAAC,EAAE;QAC3B0F,MAAM,GAAG,IAAI;MACf;;MAEA;MACA,OAAOA,MAAM,IAAIG,KAAK,CAACvD,MAAM,EAAE;QAC7BX,IAAI,CAAClB,UAAU,4BAAqB,IAAI,CAAC8D,UAAU,CAACvE,KAAK,CAAC,EAAG;QAE7DA,KAAK,CAAC8F,GAAG,EAAE,CAAC,CAAC;QACb9F,KAAK,CAACe,IAAI,CAAC8E,KAAK,CAACC,GAAG,EAAE,EAAExB,IAAI,CAAC;QAE7B,IAAI2B,eAAe,CAACjG,KAAK,CAAC,EAAE;UAC1B2B,IAAI,CAAClB,UAAU,gCAAyB,IAAI,CAAC8D,UAAU,CAACvE,KAAK,CAAC,EAAG;UACjE0F,MAAM,GAAG,KAAK;QAChB;MACF;MAEA,OAAO;QAAC1F,KAAK,EAALA,KAAK;QAAE+F,SAAS,EAAE;MAAK,CAAC;IAClC;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAIA,eAAMpE,IAAmB,EAAE;MACzB,IAAYuE,MAAM,GAAqBvE,IAAI,CAApC5B,GAAG;QAAiBoG,QAAQ,GAAIxE,IAAI,CAAvB3B,KAAK;;MAEzB;MACA,IAAI,CAACwB,IAAI,UAAO,CAAC0E,MAAM,CAAC;MACxB,wBAA2B,IAAI,CAACE,WAAW,CAACF,MAAM,EAAEvE,IAAI,EAAEwE,QAAQ,CAACZ,KAAK,EAAE,CAAC;QAApEvF,KAAK,qBAALA,KAAK;QAAE+F,SAAS,qBAATA,SAAS;MAEvB,IAAMM,MAAM,GAAG,IAAI,CAAC9B,UAAU,CAACvE,KAAK,CAAC;MACrC,IAAI+F,SAAS,EAAE;QACbpE,IAAI,CAAClB,UAAU,mCAA4B4F,MAAM,EAAG;QACpD,IAAI,CAACC,aAAa,CAAC3E,IAAI,EAAEwE,QAAQ,EAAEnG,KAAK,CAAC;QACzC,IAAI,CAACuG,kBAAkB,CAAC,IAAI,CAAC9E,eAAe,CAAC+E,aAAa,CAAC7E,IAAI,CAAC,EAAE,IAAI,CAAC4C,UAAU,CAACvE,KAAK,CAAC,CAAC;QACzF;MACF;;MAEA;MACA,IAAIkG,MAAM,KAAKG,MAAM,EAAE;QACrB1E,IAAI,CAAClB,UAAU,mCAAmC;QAClD,IAAI,CAACgG,MAAM,CAAC9E,IAAI,EAAEuE,MAAM,EAAEC,QAAQ,CAAC;QACnC;MACF;;MAEA;MACA,IAAI,CAACG,aAAa,CAAC3E,IAAI,EAAEwE,QAAQ,EAAEnG,KAAK,CAAC;MACzC,IAAI,CAACyG,MAAM,CAAC9E,IAAI,EAAE0E,MAAM,EAAErG,KAAK,CAAC;IAClC;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAIA,uBAAc2B,IAAmB,EAAE+E,QAAuB,EAAEC,QAAuB,EAAE;MACnF;MACA,IAAI,CAACC,YAAY,CAACjF,IAAI,EAAE+E,QAAQ,CAACnB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAEoB,QAAQ,CAACrE,MAAM,GAAG,CAAC,CAAC;IACrE;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAIA,sBAAaX,IAAmB,EAAEkF,YAA2B,EAAEC,KAAa,EAAE;MAC5E,KAAK,IAAIzB,CAAC,GAAGyB,KAAK,EAAEzB,CAAC,GAAGwB,YAAY,CAACvE,MAAM,EAAE+C,CAAC,EAAE,EAAE;QAChD,IAAMrF,KAAK,GAAG6G,YAAY,CAACtB,KAAK,CAAC,CAAC,EAAEF,CAAC,CAAC,CAAC1B,MAAM,CAAChC,IAAI,CAAC1B,GAAG,CAACqE,IAAI,CAAC;QAC5D,IAAMvE,GAAG,GAAG,IAAI,CAACwE,UAAU,CAACvE,KAAK,CAAC;QAElC,IAAI,IAAI,CAACyE,QAAQ,CAAC1E,GAAG,EAAE4B,IAAI,CAAC,EAAE;UAC5BA,IAAI,CAAClB,UAAU,mBAAYV,GAAG,4BAAyB;QACzD;MACF;IACF;EAAC;IAAA;IAAA,OAED,4BAAmBgH,QAAgB,EAAEC,KAAa,EAAE;MAClD,IAAMrF,IAAI,GAAG,IAAI,CAACH,IAAI,CAACK,GAAG,CAACmF,KAAK,CAAC;MACjCxH,SAAS,CAACmC,IAAI,oCAA6BqF,KAAK,EAAG;MACnDrF,IAAI,CAACpB,aAAa,CAACQ,IAAI,CAACgG,QAAQ,CAAC;IACnC;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAIA,gBAAOpF,IAAmB,EAAE0E,MAAc,EAAErG,KAAoB,EAAE;MAChE,IAAMkG,MAAM,GAAGvE,IAAI,CAAC5B,GAAG;MAEvB4B,IAAI,CAAC5B,GAAG,GAAGsG,MAAM;MACjB1E,IAAI,CAAC3B,KAAK,GAAGA,KAAK;MAClB,IAAI,CAACwB,IAAI,CAACM,GAAG,CAACuE,MAAM,EAAE1E,IAAI,CAAC;MAE3B,IAAIuE,MAAM,KAAKG,MAAM,EAAE;QACrB;MACF;MAEA,IAAMY,QAAQ,GAAG,IAAI,CAACzF,IAAI,CAACK,GAAG,CAACwE,MAAM,CAAC;MACtC7G,SAAS,CAACyH,QAAQ,sCAA+BZ,MAAM,EAAG;MAC1D1E,IAAI,CAACpB,aAAa,CAACQ,IAAI,CAAC,IAAI,CAACU,eAAe,CAAC+E,aAAa,CAACS,QAAQ,CAAC,CAAC;MACrEtF,IAAI,CAAClB,UAAU,0BAAmB4F,MAAM,EAAG;IAC7C;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAKA,iBAAQrE,QAAuB,EAAE;MAAA;MAC/BA,QAAQ,GAAG,IAAI,CAACd,QAAQ,CAACgB,cAAc,CAACF,QAAQ,CAAC,CAACQ,IAAI,EAAE;MAExD,IAAM0E,OAOL,GAAG,IAAI5F,GAAG,EAAE;MAEb,IAAM6F,UAOL,GAAG,CAAC,CAAC;;MAEN;MACA,IAAMC,QAAQ,GAAG,SAAXA,QAAQ,CAAInH,GAAa,EAAEoH,QAAyB,EAAElF,OAAe,EAAK;QAC9E,IAAMmF,QAAQ,GAAIH,UAAU,CAAClH,GAAG,CAACqE,IAAI,CAAC,GAAG6C,UAAU,CAAClH,GAAG,CAACqE,IAAI,CAAC,IAAI,CAAC,CAAE;QACpE,IAAMiD,OAAO,GAAID,QAAQ,CAACrH,GAAG,CAACsH,OAAO,CAAC,GAAGD,QAAQ,CAACrH,GAAG,CAACsH,OAAO,CAAC,IAAI;UAChEJ,UAAU,EAAE,IAAItH,GAAG,EAAE;UACrBsC,OAAO,EAAPA;QACF,CAAE;QAEF,IAAIkF,QAAQ,CAAC/E,MAAM,EAAE;UACnBiF,OAAO,CAACJ,UAAU,CAACzD,GAAG,CAAC2D,QAAQ,CAACA,QAAQ,CAAC/E,MAAM,GAAG,CAAC,CAAC,CAAC;QACvD;MACF,CAAC;;MAED;MACA,IAAMoB,GAAG,GAAG,SAANA,GAAG,CAAIvB,OAAe,EAAEkF,QAAyB,EAAEG,gBAA+B,EAAK;QAC3F,IAAMvH,GAAG,GAAG,MAAI,CAACiB,QAAQ,CAACgC,wBAAwB,CAACf,OAAO,CAAC;QAC3D,IAAIkF,QAAQ,CAACI,OAAO,CAACxH,GAAG,CAAC,IAAI,CAAC,EAAE;UAC9B;UACA;QACF;QAEA,IAAIyH,cAAc,GAAGR,OAAO,CAACrF,GAAG,CAACM,OAAO,CAAC;QAEzC,IAAIuF,cAAc,EAAE;UAClB;UACA;UACAA,cAAc,CAACC,OAAO,CAAC,UAAAC,QAAQ,EAAI;YACjCR,QAAQ,CAACQ,QAAQ,CAAC3H,GAAG,EAAE2H,QAAQ,CAACP,QAAQ,EAAEO,QAAQ,CAACzF,OAAO,CAAC;UAC7D,CAAC,CAAC;UAEFiF,QAAQ,CAACnH,GAAG,EAAEoH,QAAQ,EAAElF,OAAO,CAAC;UAEhC;QACF;QAEA,IAAM2B,GAAG,GAAG7D,GAAG,CAAC8D,UAAU;QAC1BvE,SAAS,CAACsE,GAAG,EAAE,oBAAoB,CAAC;QAEpCsD,QAAQ,CAACnH,GAAG,EAAEoH,QAAQ,EAAElF,OAAO,CAAC;QAAC,4CAER2B,GAAG,CAACa,YAAY;UAAA;QAAA;UAAzC,uDAA2C;YAAA,IAAhCC,UAAU;YACnB,IAAMiD,WAAW,GAAGR,QAAQ,CAAC1D,MAAM,CAAC1D,GAAG,CAAC;YACxC,IAAM6H,mBAAmB,GAAGN,gBAAgB,CAAC7D,MAAM,CAACiB,UAAU,CAAC;YAC/DlB,GAAG,CAACkB,UAAU,EAAEiD,WAAW,EAAEC,mBAAmB,CAAC;UACnD;QAAC;UAAA;QAAA;UAAA;QAAA;QAEDJ,cAAc,GAAGR,OAAO,CAACrF,GAAG,CAACM,OAAO,CAAC,IAAI,EAAE;QAC3C+E,OAAO,CAACpF,GAAG,CAACK,OAAO,EAAEuF,cAAc,CAAC;QACpCA,cAAc,CAAC3G,IAAI,CAAC;UAACd,GAAG,EAAHA,GAAG;UAAEoH,QAAQ,EAARA,QAAQ;UAAElF,OAAO,EAAPA;QAAO,CAAC,CAAC;QAE7CqF,gBAAgB,CAACG,OAAO,CAAC,UAAAI,eAAe,EAAI;UAC1C,IAAMC,sBAAsB,GAAGd,OAAO,CAACrF,GAAG,CAACkG,eAAe,CAAC;UAC3D,IAAIC,sBAAsB,EAAE;YAC1BA,sBAAsB,CAACjH,IAAI,CAAC;cAACd,GAAG,EAAHA,GAAG;cAAEoH,QAAQ,EAARA,QAAQ;cAAElF,OAAO,EAAPA;YAAO,CAAC,CAAC;UACvD;QACF,CAAC,CAAC;MACJ,CAAC;;MAED;MACA,IAAM8F,gBAA6B,GAAG,IAAIpI,GAAG,EAAE;MAAC,4CAC1BmC,QAAQ;QAAA;MAAA;QAA9B,uDAAgC;UAAA,IAArBG,OAAO;UAChB,IAAMlC,GAAG,GAAG,IAAI,CAACiB,QAAQ,CAACgC,wBAAwB,CAACf,OAAO,CAAC;UAC3D8F,gBAAgB,CAACvE,GAAG,CAACzD,GAAG,CAACqE,IAAI,CAAC;UAC9BZ,GAAG,CAACvB,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;QACtB;MAAC;QAAA;MAAA;QAAA;MAAA;MAAA,4CAEyBiB,MAAM,CAACC,IAAI,CAAC8D,UAAU,CAAC,CAAC3E,IAAI,EAAE;QAAA;MAAA;QAAxD,uDAA0D;UAAA,IAA/C0F,YAAW;UACpB,IAAMC,iBAAiB,GAAGhB,UAAU,CAACe,YAAW,CAAC;UACjD,IAAMZ,QAAQ,GAAGlE,MAAM,CAACC,IAAI,CAAC8E,iBAAiB,CAAC;UAE/C,IAAIb,QAAQ,CAAChF,MAAM,KAAK,CAAC,EAAE;YACzB;YACA;UACF;UAEA,IAAI,IAAI,CAACd,IAAI,CAACK,GAAG,CAACqG,YAAW,CAAC,EAAE;YAC9B;YACA;UACF;UAEA,IAAID,gBAAgB,CAACxE,GAAG,CAACyE,YAAW,CAAC,EAAE;YACrC;YACA;UACF;UAEA,IAAIE,kBAAkB;UACtB,IAAIC,oBAAoB;UAAC,6CACHjF,MAAM,CAACC,IAAI,CAAC8E,iBAAiB,CAAC,CAAC3F,IAAI,EAAE;YAAA;UAAA;YAA3D,0DAA6D;cAAA,IAAlD+E,QAAO;cAChB,4BAA8BY,iBAAiB,CAACZ,QAAO,CAAC;gBAAjDJ,WAAU,yBAAVA,UAAU;gBAAEhF,SAAO,yBAAPA,OAAO;cAC1B,IAAMmG,cAAc,GAAGnB,WAAU,CAACoB,IAAI;cAEtC,IAAI,CAACH,kBAAkB,IAAIE,cAAc,GAAGF,kBAAkB,EAAE;gBAC9DA,kBAAkB,GAAGE,cAAc;gBACnCD,oBAAoB,GAAGlG,SAAO;cAChC;YACF;UAAC;YAAA;UAAA;YAAA;UAAA;UACD3C,SAAS,CAAC6I,oBAAoB,EAAE,iCAAiC,CAAC;UAClE7I,SAAS,CAAC4I,kBAAkB,EAAE,+BAA+B,CAAC;;UAE9D;UACA,IAAIA,kBAAkB,GAAG,CAAC,EAAE;YAC1B,IAAI,CAAChG,KAAK,CAACiG,oBAAoB,EAAE;cAAClI,eAAe,EAAE;YAAK,CAAC,CAAC;UAC5D;QACF;MAAC;QAAA;MAAA;QAAA;MAAA;IACH;EAAC;IAAA;IAAA,OAED,uCAA8B;MAAA;MAC5B,IAAMqI,eAAe,GAAG,IAAI,CAACvH,MAAM,CAACwH,oBAAoB;MACxD,IAAMC,mBAAmB,GAAG,IAAI,CAAClH,IAAI,CAACK,GAAG,CAAC2G,eAAe,CAAC;MAC1DhJ,SAAS,CAACkJ,mBAAmB,qCAA8BF,eAAe,cAAW;;MAErF;MACA,IAAMG,mBAAmB,GAAGC,KAAK,CAACC,IAAI,CAAC,IAAIhJ,GAAG,CAAC,IAAI,CAACiJ,uBAAuB,CAACJ,mBAAmB,CAAC,CAAC,CAAC;MAElG,IAAM5D,OAAO,GAAG8D,KAAK,CAACC,IAAI,CAAC,IAAI,CAACrH,IAAI,CAAC;MACrCsD,OAAO,CAAC6C,OAAO,CAAC,iBAAiB;QAAA;UAAf5H,GAAG;UAAE4B,IAAI;QACzB,IAAMoH,SAAS,GAAGhJ,GAAG,CAACiJ,KAAK,CAAC,GAAG,CAAC;;QAEhC;QACA,IAAMC,mBAAmB,GAAGN,mBAAmB,CAACO,IAAI,CAAC,UAAAC,CAAC,EAAI;UACxD,IAAIJ,SAAS,CAAC,CAAC,CAAC,KAAKI,CAAC,EAAE;YACtB;YACA,OAAO,KAAK;UACd;UACA,IAAI,CAACJ,SAAS,CAAC,CAAC,CAAC,EAAE;YACjB;YACA,OAAO,IAAI;UACb;UACA;UACA,IAAMK,SAAS,GAAG,MAAI,CAAC5H,IAAI,CAACK,GAAG,CAACsH,CAAC,CAAC;UAClC3J,SAAS,CAAC4J,SAAS,EAAE,+BAA+B,GAAGD,CAAC,CAAC;UACzD,IAAMlJ,GAAG,GAAGmJ,SAAS,CAACnJ,GAAG;UACzB,OAAO,CAAC0B,IAAI,CAACjB,SAAS,KAAK,CAACT,GAAG,CAACoJ,eAAe,IAAI,EAAEN,SAAS,CAAC,CAAC,CAAC,IAAI9I,GAAG,CAACoJ,eAAe,CAAC,CAAC;QAC5F,CAAC,CAAC;QAEF,IAAIJ,mBAAmB,EAAE;UACvBtH,IAAI,CAACf,YAAY,GAAG,CAAC,IAAI,CAAC;UAC1B;QACF;;QAEA;QACA;QACA;QACA,IAAImI,SAAS,CAACzG,MAAM,KAAK,CAAC,IAAIyG,SAAS,CAAC,CAAC,CAAC,KAAKP,eAAe,EAAE;UAC9D;QACF;QACA,IAAMc,mBAAmB,GAAGP,SAAS,CAAC,CAAC,CAAC;QACxC,IAAMQ,aAAa,GAAG,MAAI,CAAC/H,IAAI,CAACK,GAAG,CAACyH,mBAAmB,CAAC;QACxD,IAAI,CAACC,aAAa,EAAE;UAClB;QACF;QACAZ,mBAAmB,CAAChB,OAAO,CAAC,UAAAwB,CAAC,EAAI;UAC/B,IAAI,MAAI,CAACK,+BAA+B,CAACL,CAAC,EAAEG,mBAAmB,EAAE,KAAK,CAAC,EAAE;YACvEC,aAAa,CAAC3I,YAAY,CAACG,IAAI,CAACoI,CAAC,CAAC;UACpC;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;EAAC;IAAA;IAAA,OAED,iCACEvF,MAAqB,EAGN;MAAA;MAAA,IAFf6F,YAAqB,uEAAG,IAAI;MAAA,IAC5BC,WAAwB,uEAAG,IAAI7J,GAAG,EAAE;MAEpC,IAAM8J,UAAU,GAAG/F,MAAM,CAAC3D,GAAG,CAACqE,IAAI;MAClC,IAAIoF,WAAW,CAACjG,GAAG,CAACkG,UAAU,CAAC,EAAE;QAC/B,OAAO,EAAE;MACX;MAEAD,WAAW,CAAChG,GAAG,CAACiG,UAAU,CAAC;MAC3BnK,SAAS,CAAC,IAAI,CAAC4B,eAAe,EAAE,yBAAyB,CAAC;MAC1D,4BAA0C,IAAI,CAACA,eAAe;QAAvDwI,mBAAmB,yBAAnBA,mBAAmB;QAAEC,UAAU,yBAAVA,UAAU;MAEtC,IAAMC,kBAAkB,GAAG,EAAE;MAC7B,IAAMC,OAAO,GAAG,EAAE;MAClB3G,MAAM,CAACC,IAAI,CAACwG,UAAU,CAAC,CAAClC,OAAO,CAAC,UAAAqC,SAAS,EAAI;QAC3C,IAAIN,WAAW,CAACjG,GAAG,CAACuG,SAAS,CAAC,IAAIA,SAAS,KAAKJ,mBAAmB,EAAE;UACnE;QACF;;QAEA;QACA,IAAIjI,IAAI,GAAG,MAAI,CAACH,IAAI,CAACK,GAAG,WAAI8H,UAAU,cAAIK,SAAS,EAAG;QACtD,IAAIrI,IAAI,EAAE;UACR,IAAMsI,gBAAgB,GAAGJ,UAAU,CAACG,SAAS,CAAC,CAACE,QAAQ,CAAC3C,OAAO;UAC/D,IACE5F,IAAI,CAACjB,SAAS,IACdiB,IAAI,CAAChB,kBAAkB,CAACwJ,UAAU,YAAKC,aAAa,cAAIT,UAAU,EAAG,IACrEhI,IAAI,CAAC1B,GAAG,CAACsH,OAAO,KAAK0C,gBAAgB,EACrC;YACA;YACAH,kBAAkB,CAAC/I,IAAI,CAACY,IAAI,CAAC5B,GAAG,CAAC;UACnC,CAAC,MAAM;YACLgK,OAAO,CAAChJ,IAAI,CAACiJ,SAAS,CAAC;UACzB;UACA;QACF;QAEA,IAAMK,UAAU,cAAOD,aAAa,cAAIT,UAAU,CAAE;QACpDhI,IAAI,GAAG,MAAI,CAACH,IAAI,CAACK,GAAG,CAACmI,SAAS,CAAC;QAC/BxK,SAAS,CAACmC,IAAI,EAAE,+BAA+B,GAAGqI,SAAS,CAAC;QAC5D,IAAI,CAACrI,IAAI,CAACpB,aAAa,CAAC2I,IAAI,CAAC,UAAAoB,CAAC;UAAA,OAAIA,CAAC,CAACH,UAAU,CAACE,UAAU,CAAC;QAAA,EAAC,EAAE;UAC3D;QACF;QACA,IAAIZ,YAAY,IAAI,CAAC7F,MAAM,CAAC3D,GAAG,CAACoJ,eAAe,IAAI,EAAEW,SAAS,IAAIpG,MAAM,CAAC3D,GAAG,CAACoJ,eAAe,CAAC,EAAE;UAC7FS,kBAAkB,CAAC/I,IAAI,CAACiJ,SAAS,CAAC;QACpC;MACF,CAAC,CAAC;MAEF,IAAIO,MAAM,GAAGT,kBAAkB,CAACU,GAAG,CAAC,UAAAC,CAAC,EAAI;QACvC,IAAMC,eAAe,GAAG,MAAI,CAAClJ,IAAI,CAACK,GAAG,CAAC4I,CAAC,CAAC;QACxCjL,SAAS,CAACkL,eAAe,EAAE,0BAA0B,GAAGD,CAAC,CAAC;QAC1D,OAAO,MAAI,CAAC3B,uBAAuB,CAAC4B,eAAe,EAAE,KAAK,EAAEhB,WAAW,CAAC;MAC1E,CAAC,CAAC;MACFa,MAAM,GAAG,EAAE,CAAC5G,MAAM,CAACgH,KAAK,CAAC,EAAE,EAAEJ,MAAM,CAAC,CAAC,CAAC;;MAEtC,IAAMK,qBAAqB,GAAGd,kBAAkB,CAACU,GAAG,CAAC,UAAAC,CAAC;QAAA,OAAIA,CAAC,CAACzB,KAAK,CAAC,GAAG,CAAC,CAACzD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MAAA,EAAC;MAEpF,OAAOqF,qBAAqB,CAACjH,MAAM,CAAC4G,MAAM,CAAC,CAACM,MAAM,CAAC,UAAA1B,CAAC;QAAA,OAAIY,OAAO,CAACtC,OAAO,CAAC0B,CAAC,CAAC,KAAK,CAAC,CAAC;MAAA,EAAC;IACpF;EAAC;IAAA;IAAA,OAED,yCACEmB,CAAS,EACTQ,OAAe,EAGN;MAAA;MAAA,IAFTC,YAAqB,uEAAG,IAAI;MAAA,IAC5BC,OAAoB,uEAAG,IAAInL,GAAG,EAAE;MAEhC;MACA,IAAImL,OAAO,CAACvH,GAAG,CAAC6G,CAAC,CAAC,IAAI,IAAI,CAAC9I,IAAI,CAACiC,GAAG,WAAI6G,CAAC,cAAIQ,OAAO,EAAG,EAAE;QACtD,OAAO,KAAK;MACd;MACAE,OAAO,CAACtH,GAAG,CAAC4G,CAAC,CAAC;MACd,IAAM3I,IAAI,GAAG,IAAI,CAACH,IAAI,CAACK,GAAG,CAACyI,CAAC,CAAC;MAC7B,IAAI,CAAC3I,IAAI,EAAE;QACT,OAAO,KAAK;MACd;MAEA,IAAM1B,GAAG,GAAG0B,IAAI,CAAC1B,GAAG;MACpB,IAAI,CAACA,GAAG,EAAE;QACR,OAAO,KAAK;MACd;MAEA,IAAIgL,IAAI,GAAG,EAAE;MACb,IAAIhL,GAAG,CAAC0E,YAAY,EAAE;QACpBsG,IAAI,GAAGA,IAAI,CAACtH,MAAM,CAACP,MAAM,CAACC,IAAI,CAACpD,GAAG,CAAC0E,YAAY,CAAC,CAAC;MACnD;MACA,IAAIoG,YAAY,IAAI9K,GAAG,CAACoJ,eAAe,EAAE;QACvC4B,IAAI,GAAGA,IAAI,CAACtH,MAAM,CAACP,MAAM,CAACC,IAAI,CAACpD,GAAG,CAACoJ,eAAe,CAAC,CAAC;MACtD;MAEA,IAAI4B,IAAI,CAACxD,OAAO,CAACqD,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;QAChC,OAAO,IAAI;MACb;MACA,OAAOG,IAAI,CAAC/B,IAAI,CAAC,UAAAgC,GAAG;QAAA,OAAI,MAAI,CAAC1B,+BAA+B,CAAC0B,GAAG,EAAEJ,OAAO,EAAE,KAAK,EAAEE,OAAO,CAAC;MAAA,EAAC;IAC7F;;IAEA;AACF;AACA;EAFE;IAAA;IAAA,OAIA,gBAA4B;MAAA;MAC1B,IAAMG,QAAQ,GAAG,EAAE;;MAEnB;MAAA,6CAC0B,IAAI,CAAC3J,IAAI,CAACsD,OAAO,EAAE;QAAA;MAAA;QAAA,+BAAE;UAAA;YAAnC/E,GAAG;YAAE4B,IAAI;UACnB;UACA;UACA,IAAM3B,KAAoB,GAAG,EAAE;UAC/B,IAAMoL,QAAQ,GAAGrL,GAAG,CAACiJ,KAAK,CAAC,GAAG,CAAC;UAC/B,IAAMqC,gBAAgB,GAAG,MAAI,CAACjK,eAAe,IAAIgK,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAI,CAAChK,eAAe,CAACwI,mBAAmB;;UAEzG;UACA;UACA;UACA,IAAIyB,gBAAgB,IAAID,QAAQ,CAAC9I,MAAM,IAAI,CAAC,EAAE;YAAA;UAE9C;UAEA,KAAK,IAAI+C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG+F,QAAQ,CAAC9I,MAAM,EAAE+C,CAAC,EAAE,EAAE;YACxC,IAAMtF,IAAG,GAAGqL,QAAQ,CAAC7F,KAAK,CAAC,CAAC,EAAEF,CAAC,GAAG,CAAC,CAAC,CAACtD,IAAI,CAAC,GAAG,CAAC;YAC9C,IAAM+I,OAAO,GAAG,MAAI,CAACtJ,IAAI,CAACK,GAAG,CAAC9B,IAAG,CAAC;YAClCP,SAAS,CAACsL,OAAO,4CAAoC/K,IAAG,QAAI;YAC5DC,KAAK,CAACe,IAAI,CAAC,MAAI,CAACE,MAAM,CAACqK,SAAS,CAACR,OAAO,CAAC7K,GAAG,CAAC,CAAC;YAC9CD,KAAK,CAACe,IAAI,CAACqK,QAAQ,CAAC/F,CAAC,CAAC,CAAC;UACzB;;UAEA;UACA;UACA;UACA;UACA,IAAI,MAAI,CAACjE,eAAe,IAAIiK,gBAAgB,EAAE;YAC5C,IAAME,MAAM,GAAG,MAAI,CAACnK,eAAe,CAACyI,UAAU,CAACuB,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3D5L,SAAS,CAAC+L,MAAM,sDAA8CH,QAAQ,CAAC,CAAC,CAAC,QAAI;YAC7EpL,KAAK,CAACwL,MAAM,CAAC,CAAC,EAAE,CAAC,EAAED,MAAM,CAACrL,GAAG,CAAC;UAChC,CAAC,MAAM;YACL,IAAI,MAAI,CAACe,MAAM,CAACwK,aAAa,EAAE;cAC7B;cACA;cACAzL,KAAK,CAACwL,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAI,CAACvK,MAAM,CAACwK,aAAa,CAAC;YAC/C,CAAC,MAAM;cACL;cACAzL,KAAK,CAACwL,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAI,CAACvK,MAAM,CAACyK,cAAc,CAAC;YAChD;UACF;UAEA,IAAMC,WAAW,GAAG,EAAE;UACtBhK,IAAI,CAACf,YAAY,CAAC+G,OAAO,CAAC,UAAAiE,WAAW,EAAI;YACvC,IAAMC,gBAAgB,GAAG7L,KAAK,CAACuF,KAAK,EAAE;YACtCsG,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAI,CAAC5K,MAAM,CAAC6K,GAAG;YACrC,IAAI,MAAI,CAAC7K,MAAM,CAACwK,aAAa,EAAE;cAC7B;cACA,IAAMrC,SAAS,GAAG,MAAI,CAAC5H,IAAI,CAACK,GAAG,CAACuJ,QAAQ,CAAC,CAAC,CAAC,CAAC;cAC5C5L,SAAS,CAAC4J,SAAS,EAAE,yBAAyB,GAAGgC,QAAQ,CAAC,CAAC,CAAC,CAAC;cAC7D,IAAMW,gBAAgB,GAAG,MAAI,CAAC9K,MAAM,CAACqK,SAAS,CAAClC,SAAS,CAACnJ,GAAG,CAAC;cAC7D4L,gBAAgB,CAACL,MAAM,CAAC,CAAC,EAAE,CAAC,EAAEO,gBAAgB,CAAC;YACjD;YAEA,IAAIH,WAAW,EAAE;cACf,IAAMpD,eAAe,GAAG,MAAI,CAACvH,MAAM,CAACwH,oBAAoB;cACxD,IAAMW,UAAS,GAAG,MAAI,CAAC5H,IAAI,CAACK,GAAG,WAAI2G,eAAe,cAAIoD,WAAW,EAAG,IAAI,MAAI,CAACpK,IAAI,CAACK,GAAG,CAAC+J,WAAW,CAAC;cAClGpM,SAAS,CAAC4J,UAAS,EAAE,yBAAyB,GAAGwC,WAAW,CAAC;cAC7D,IAAMG,iBAAgB,GAAG,MAAI,CAAC9K,MAAM,CAACqK,SAAS,CAAClC,UAAS,CAACnJ,GAAG,CAAC;cAC7D4L,gBAAgB,CAACL,MAAM,CAAC,CAAC,EAAE,CAAC,EAAEO,iBAAgB,EAAEH,WAAW,CAAC;YAC9D;YACAD,WAAW,CAAC5K,IAAI,CAACrB,IAAI,CAACqC,IAAI,OAATrC,IAAI,wCAASmM,gBAAgB,EAAC,CAAC;UAClD,CAAC,CAAC;UAEF,IAAM3L,GAAG,GAAGR,IAAI,CAACqC,IAAI,OAATrC,IAAI,EAASM,KAAK,CAAC;UAC/BmL,QAAQ,CAACpK,IAAI,CAAC,CAACb,GAAG,EAAEyB,IAAI,CAAC,CAAC;UAC1BgK,WAAW,CAAChE,OAAO,CAAC,UAAAqE,UAAU,EAAI;YAChC,IAAMC,WAAW,mCAAQtK,IAAI;cAAEd,SAAS,EAAE;YAAI,EAAO;YACrDsK,QAAQ,CAACpK,IAAI,CAAC,CAACiL,UAAU,EAAGC,WAAW,CAAiB,CAAC;UAC3D,CAAC,CAAC;QACJ,CAAC;QArED;UAAA;UAAA,0BAWI;QAAS;;QA4Db;MAAA;QAAA;MAAA;QAAA;MAAA;MACA,IAAMC,eAAe,GAAG,EAAE;MAC1B,6BAA0Bf,QAAQ,+BAAE;QAA/B;UAAOjL,GAAG;UAAEyB,IAAI;QACnB,IAAMmC,GAAG,GAAGnC,IAAI,CAAC1B,GAAG,CAAC8D,UAAU;QAC/BvE,SAAS,CAACsE,GAAG,EAAE,oBAAoB,CAAC;QACpC,IAAI,CAACnC,IAAI,CAACvB,UAAU,EAAE;UACpBuB,IAAI,CAAClB,UAAU,CAAC,oCAAoC,CAAC;QACvD,CAAC,MAAM;UACLyL,eAAe,CAACnL,IAAI,CAAC,CAACb,GAAG,EAAEyB,IAAI,CAAC,CAAC;QACnC;MACF;MACA,OAAOuK,eAAe;IACxB;EAAC;EAAA;AAAA;AAAA;AAGH,IAAM9B,aAAa,GAAG,WAAW;AAAC,IACrB1I,eAAe;EAC1B,yBAAYT,MAAc,EAAEC,QAAyB,EAAE;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA,wDAiBzC,UAACS,IAAmB,EAAEiC,MAAsB,EAAK;MAC7D,IAAIuI,iBAAiC;MACrC,IAAIxL,kBAA0B,GAAGgB,IAAI,CAAChB,kBAAkB;MAExD,IAAIiD,MAAM,EAAE;QACVuI,iBAAiB,GAAGvI,MAAM,CAACwI,WAAW;QACtCzL,kBAAkB,GAAG,MAAI,CAAC6F,aAAa,CAAC5C,MAAM,CAAC;MACjD,CAAC,MAAM;QACLpE,SAAS,CAAC,MAAI,CAAC6M,aAAa,CAAC1K,IAAI,CAAC,YAAKA,IAAI,CAAC5B,GAAG,4CAAyC;QACxF,IAAI4B,IAAI,CAAC1B,GAAG,CAACqE,IAAI,KAAK,MAAI,CAACgI,kBAAkB,EAAE;UAC7CH,iBAAiB,GAAG,MAAI,CAACI,kBAAkB;UAC3C5L,kBAAkB,GAAG,MAAI,CAAC2L,kBAAkB,IAAI,EAAE;QACpD;MACF;MAEA3K,IAAI,CAAChB,kBAAkB,GAAGA,kBAAkB;MAC5C,IAAIyL,WAAW,GAAG,MAAI,CAACI,mBAAmB,CAAC7K,IAAI,CAAC1B,GAAG,EAAE,MAAI,CAACuG,aAAa,CAAC7E,IAAI,CAAC,CAAC,IAAI,EAAE;MACpF,IAAIwK,iBAAiB,EAAE;QACrBC,WAAW,GAAGA,WAAW,CAACzI,MAAM,CAACwI,iBAAiB,CAAC;MACrD;MACAxK,IAAI,CAACyK,WAAW,GAAGA,WAAW,CAAC9J,MAAM,GAAG,CAAC,GAAG8J,WAAW,GAAG,IAAI;MAC9DzK,IAAI,CAACjB,SAAS,GAAG,MAAI,CAAC+L,UAAU,CAAC9K,IAAI,CAAC;IACxC,CAAC;IAAA,iEAUsB,UAACA,IAAmB,EAAc;MACvD,OAAOA,IAAI,CAACjB,SAAS,IAAIiB,IAAI,CAAC3B,KAAK,CAACsC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;IAC3D,CAAC;IAAA,uDAGY,UAACX,IAAmB,EAAc;MAC7C,IAAI,MAAI,CAAC0K,aAAa,CAAC1K,IAAI,CAAC,EAAE;QAC5B,OAAO,KAAK;MACd;MACA,IAAIA,IAAI,CAACyK,WAAW,IAAIzK,IAAI,CAACyK,WAAW,CAAC9J,MAAM,GAAG,CAAC,IAAIoK,wBAAE,CAACC,GAAG,CAAC,MAAI,CAACnG,aAAa,CAAC7E,IAAI,CAAC,EAAEA,IAAI,CAACyK,WAAW,CAAC,EAAE;QACzG,OAAO,IAAI;MACb;MACA,IAAI,MAAI,CAACQ,OAAO,CAACC,gBAAgB,EAAE;QACjC,OAAO,IAAI;MACb;MACA,OAAO,KAAK;IACd,CAAC;IAAA,2DACgB,UAAC5M,GAAa,EAAc;MAC3C,OAAOA,GAAG,CAACqE,IAAI,KAAK,MAAI,CAACgI,kBAAkB;IAC7C,CAAC;IAAA,0DACe,UAAC3K,IAAmB,EAAa;MAC/C,OAAO,MAAI,CAACmL,SAAS,CAACnL,IAAI,CAAChB,kBAAkB,EAAEgB,IAAI,CAAC1B,GAAG,CAACqE,IAAI,CAAC;IAC/D,CAAC;IAAA,0DAMe,UAAC3C,IAAmB,EAAc;MAChD,IAAMqC,WAAW,GAAGrC,IAAI,CAAC3B,KAAK,CAACuF,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MAC3C,IAAMwH,MAAM,GACV,CAAC/I,WAAW,IACZA,WAAW,CAAC1B,MAAM,IAAI,CAAC,IACtB0B,WAAW,CAAC1B,MAAM,KAAK,CAAC,IAAI0B,WAAW,CAAC,CAAC,CAAC,KAAK,MAAI,CAACsI,kBAAmB;MAC1E,OAAOS,MAAM;IACf,CAAC;IAAA,oDACS,UAACpL,IAAmB,EAAc;MAC1C,OAAOA,IAAI,CAAC1B,GAAG,CAAC+M,OAAO,IAAI,IAAI,IAAIpN,UAAU,CAAC6D,GAAG,CAAC9B,IAAI,CAAC1B,GAAG,CAAC+M,OAAO,CAACC,IAAI,CAAC;IAC1E,CAAC;IAAA,gEAIqB,UAAChN,GAAa,EAAEiN,UAAkB,EAAqB;MAC3E,IAAId,WAA2B;MAC/B,IAAMe,EAAE,GAAG,MAAI,CAACP,OAAO,CAACQ,aAAa,CAACnN,GAAG,CAAC;MAE1C,IAAIkN,EAAE,IAAIA,EAAE,CAACE,OAAO,EAAE;QACpBjB,WAAW,GAAGe,EAAE,CAACE,OAAO,CAAC7C,GAAG,CAAC,UAAAF,CAAC;UAAA,OAAI,MAAI,CAACwC,SAAS,CAACI,UAAU,EAAE5C,CAAC,CAAC;QAAA,EAAC;MAClE;MACA,OAAO8B,WAAW;IACpB,CAAC;IAlGC,IAAI,CAACkB,SAAS,GAAGpM,QAAQ;IACzB,IAAI,CAAC0L,OAAO,GAAG3L,MAAM;IACrB,IAAIC,QAAQ,CAACE,eAAe,EAAE;MAC5B,IAAI,CAACkL,kBAAkB,GAAGpL,QAAQ,CAACE,eAAe,CAACwI,mBAAmB;MACtE,4BAAmB1I,QAAQ,CAACE,eAAe,CAACmM,oBAAoB,CAAC,IAAI,CAACjB,kBAAkB,CAAC;QAAlFpC,QAAQ,yBAARA,QAAQ;MACf,IAAI,CAACqC,kBAAkB,GAAG,IAAI,CAACC,mBAAmB,CAACtC,QAAQ,EAAEA,QAAQ,CAAC5F,IAAI,CAAC;IAC7E;EACF;EAAC;IAAA;IAAA,OAgED,qBAA0C;MAAA;MAAA,kCAA7BkJ,IAAI;QAAJA,IAAI;MAAA;MACf,IAAMxN,KAAK,GAAGwN,IAAI,CAAChD,GAAG,CAAC,UAAAiD,CAAC;QAAA,OAAKA,CAAC,KAAK,MAAI,CAACnB,kBAAkB,GAAGlC,aAAa,GAAGqD,CAAC;MAAA,CAAC,CAAC;MAChF,IAAMV,MAAM,GAAG/M,KAAK,CAAC+B,IAAI,CAAC,GAAG,CAAC;MAC9B,OAAOgL,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,GAAGA,MAAM,GAAG,GAAG,GAAGA,MAAM;IAClD;EAAC;EAAA;AAAA;AAAA"}