@kontur.candy/tools 2.201.0 → 2.202.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"CacheAssetsPlugin.js","names":["path","_interopRequireWildcard","require","_fsExtra","_md","_interopRequireDefault","_pLimit","_nodeFetch","_BuildCacheMode","_TypingUtils","_StaticLogger","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","singleLimit","pLimit","CacheAssetsPlugin","constructor","options","apply","compiler","hooks","emit","tapPromise","compilation","cacheItems","assetName","keys","assets","_compilation$assets$a","_compilation$assets$a2","source","reject","Buffer","type","base64content","toString","updateFile","filePath","resolve","cacheFile","content","pathExists","JSON","parse","readFile","ensureDir","dirname","writeFile","stringify","exports","BuildCache","farmDirectory","mode","logger","getLogger","withPrefix","extract","generatorSource","gfv","depsHash","resourcesDirectory","Error","getCacheFilePath","version","assetPath","_content$assetPath","contentElement","normalizedAssetPath","join","split","from","exists","BuildCacheMode","Disabled","ForceUpdate","cachedFilePath","existsFileCacheOrDownload","undefined","setContent","fileName","fileContent","cacheFilePath","createWebpackPlugin","ReadOnly","generatorVersion","md5","log","filename","basename","response","fetch","status","buffer","error"],"sources":["../../../../src/FormWebpackConfiguration/CacheAssetsPlugin.ts"],"sourcesContent":["import * as path from \"path\";\n\nimport { ensureDir, pathExists, readFile, writeFile } from \"fs-extra\";\nimport md5 from \"md5\";\nimport pLimit from \"p-limit\";\nimport webpack from \"webpack\";\nimport fetch from \"node-fetch\";\n\nimport { GeneratorSource } from \"../BuildTasks/Generator/AcquireFormGenerator\";\nimport { BuildCacheMode } from \"../CLICommands/BuildForms/BuildCacheMode\";\nimport { reject } from \"../../../Common/TypingUtils\";\nimport { ILogger } from \"../Commons/Logging/ILogger\";\nimport { getLogger } from \"../Commons/Logging/StaticLogger\";\n\ninterface CacheAssetsPluginOptions {\n cacheFile: string;\n}\n\nexport interface FormBuildCacheOptions {\n farmDirectory: string;\n mode: BuildCacheMode;\n generatorVersion: string;\n gfv: string;\n depsHash: string;\n}\n\nconst singleLimit = pLimit(1);\n\ninterface BuildResultsSerialized {\n [path: string]: string | { type: \"Buffer\"; base64content: string };\n}\n\nexport class CacheAssetsPlugin {\n private readonly options: CacheAssetsPluginOptions;\n\n public constructor(options: CacheAssetsPluginOptions) {\n this.options = options;\n }\n\n public async apply(compiler: webpack.Compiler): Promise<void> {\n compiler.hooks.emit.tapPromise(\"CacheAssetsPlugin\", compilation =>\n singleLimit(async () => {\n const cacheItems: BuildResultsSerialized = {};\n // tslint:disable-next-line no-unsafe-any\n for (const assetName of Object.keys(compilation.assets)) {\n // tslint:disable-next-line no-unsafe-any\n const source: string | Buffer = compilation.assets[assetName]?.source() ?? reject();\n if (source instanceof Buffer) {\n cacheItems[assetName] = { type: \"Buffer\", base64content: source.toString(\"base64\") };\n } else {\n cacheItems[assetName] = source;\n }\n }\n await this.updateFile(cacheItems);\n })\n );\n }\n\n private async updateFile(cacheItems: BuildResultsSerialized): Promise<void> {\n const filePath = path.resolve(this.options.cacheFile);\n let content: BuildResultsSerialized = (await pathExists(filePath))\n ? // tslint:disable-next-line no-unsafe-any\n JSON.parse(await readFile(filePath, \"utf-8\"))\n : {};\n content = {\n ...content,\n ...cacheItems,\n };\n await ensureDir(path.dirname(filePath));\n await writeFile(filePath, JSON.stringify(content), \"utf-8\");\n }\n}\n\nexport class BuildCache {\n private readonly farmDirectory: string;\n private readonly mode: BuildCacheMode;\n private readonly logger: ILogger;\n\n public constructor(farmDirectory: string, mode: BuildCacheMode) {\n this.farmDirectory = farmDirectory;\n this.mode = mode;\n this.logger = getLogger().withPrefix(\"BUILD_CACHE\");\n }\n\n public async extract(\n generatorSource: GeneratorSource,\n gfv: string,\n depsHash: string,\n resourcesDirectory: string\n ): Promise<void> {\n if (generatorSource.type === \"GeneratorSources\") {\n throw new Error(\"Local generator does not supports caching\");\n }\n // tslint:disable-next-line no-unsafe-any\n const content: BuildResultsSerialized = JSON.parse(\n await readFile(this.getCacheFilePath(gfv, generatorSource.version, depsHash), \"utf-8\")\n );\n for (const assetPath of Object.keys(content)) {\n const contentElement = content[assetPath] ?? reject();\n const normalizedAssetPath = path.join(...assetPath.split(/[\\\\\\/]/));\n const filePath = path.join(resourcesDirectory, normalizedAssetPath);\n await ensureDir(path.dirname(filePath));\n if (typeof contentElement === \"string\") {\n await writeFile(filePath, contentElement, \"utf8\");\n } else {\n await writeFile(filePath, Buffer.from(contentElement.base64content, \"base64\"));\n }\n }\n }\n\n public async exists(generatorSource: GeneratorSource, gfv: string, depsHash: string): Promise<boolean> {\n if (generatorSource.type === \"GeneratorSources\") {\n throw new Error(\"Local generator does not supports caching\");\n }\n if (this.mode === BuildCacheMode.Disabled || this.mode === BuildCacheMode.ForceUpdate) {\n return false;\n }\n const cachedFilePath = await this.existsFileCacheOrDownload(gfv, generatorSource.version, depsHash);\n return cachedFilePath != undefined;\n }\n\n public async setContent(\n generatorSource: string,\n gfv: string,\n depsHash: string,\n resourcesDirectory: string,\n fileName: string,\n fileContent: string\n ): Promise<void> {\n const cacheFilePath = this.getCacheFilePath(gfv, generatorSource, depsHash);\n if (!(await pathExists(cacheFilePath))) {\n return;\n }\n // tslint:disable-next-line no-unsafe-any\n let content: BuildResultsSerialized = JSON.parse(await readFile(cacheFilePath, \"utf-8\"));\n content = {\n ...content,\n [fileName]: fileContent,\n };\n await ensureDir(path.dirname(cacheFilePath));\n await writeFile(cacheFilePath, JSON.stringify(content), \"utf-8\");\n }\n\n public async createWebpackPlugin(options: FormBuildCacheOptions): Promise<CacheAssetsPlugin | undefined> {\n if (options.mode === BuildCacheMode.Disabled || options.mode === BuildCacheMode.ReadOnly) {\n return undefined;\n }\n const cachedFilePath = this.getCacheFilePath(options.gfv, options.generatorVersion, options.depsHash);\n return new CacheAssetsPlugin({\n cacheFile: cachedFilePath,\n });\n }\n\n private getCacheFilePath(gfv: string, generatorVersion: string, depsHash: string): string {\n const fileName = `${md5(gfv)}-${md5(generatorVersion)}-${depsHash}.zip`;\n return path.join(this.farmDirectory, \".build-cache\", \"compile\", fileName);\n }\n\n private async existsFileCacheOrDownload(\n gfv: string,\n generatorVersion: string,\n depsHash: string\n ): Promise<string | undefined> {\n const filePath = this.getCacheFilePath(gfv, generatorVersion, depsHash);\n this.logger.log(`Start search file locally: ${filePath}`);\n const filename = path.basename(filePath);\n await ensureDir(path.dirname(filePath));\n if (await pathExists(filePath)) {\n this.logger.log(\"Found file in local directory\");\n return filePath;\n } else {\n try {\n this.logger.log(`Cache file was not found locally: ${filePath}`);\n this.logger.log(`Looking for cache in drive storage: ${filename}`);\n const response = await fetch(`https://api.kontur.ru/drive/v1/public/${filename}`);\n this.logger.log(`Drive response status code: ${response.status.toString()}`);\n if (response.status === 200) {\n await writeFile(filePath, await response.buffer(), \"utf-8\");\n return filePath;\n } else {\n if (response.status === 404) {\n this.logger.error(\n `Cache file not found in drive storage: ${filename}. GFV: ${gfv}, GeneratorVersion: ${generatorVersion}, DependenciesHash: ${depsHash}`\n );\n } else {\n this.logger.error(\n `Drive storage sent ${response.status} status code, I don't process it in any way`\n );\n }\n return undefined;\n }\n } catch (e) {\n this.logger.error(\"Drive storage responded with an error\");\n this.logger.error(\"The build will continue without a cache\");\n this.logger.error(e);\n return undefined;\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"CacheAssetsPlugin.js","names":["path","_interopRequireWildcard","require","_fsExtra","_md","_interopRequireDefault","_pLimit","_nodeFetch","_admZip","_BuildCacheMode","_TypingUtils","_StaticLogger","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","singleLimit","pLimit","CacheAssetsPlugin","constructor","options","apply","compiler","hooks","emit","tapPromise","compilation","cacheItems","assetName","keys","assets","_compilation$assets$a","_compilation$assets$a2","source","reject","Buffer","type","base64content","toString","updateFile","filePath","resolve","cacheFile","content","pathExists","CacheFile","read","ensureDir","dirname","write","exports","BuildCache","farmDirectory","mode","logger","getLogger","withPrefix","extract","generatorSource","gfv","depsHash","resourcesDirectory","Error","getCacheFilePath","version","assetPath","_content$assetPath","contentElement","normalizedAssetPath","join","split","writeFile","from","exists","BuildCacheMode","Disabled","ForceUpdate","cachedFilePath","existsFileCacheOrDownload","undefined","setContent","fileName","fileContent","cacheFilePath","createWebpackPlugin","ReadOnly","generatorVersion","log","filename","basename","response","fetch","status","buffer","error","md5","zip","AdmZip","addFile","contentFilename","JSON","stringify","writeZip","readAsText","parse","warning","readFile"],"sources":["../../../../src/FormWebpackConfiguration/CacheAssetsPlugin.ts"],"sourcesContent":["import * as path from \"path\";\n\nimport { ensureDir, pathExists, readFile, writeFile } from \"fs-extra\";\nimport md5 from \"md5\";\nimport pLimit from \"p-limit\";\nimport webpack from \"webpack\";\nimport fetch from \"node-fetch\";\nimport AdmZip from \"adm-zip\";\n\nimport { GeneratorSource } from \"../BuildTasks/Generator/AcquireFormGenerator\";\nimport { BuildCacheMode } from \"../CLICommands/BuildForms/BuildCacheMode\";\nimport { reject } from \"../../../Common/TypingUtils\";\nimport { ILogger } from \"../Commons/Logging/ILogger\";\nimport { getLogger } from \"../Commons/Logging/StaticLogger\";\n\ninterface CacheAssetsPluginOptions {\n cacheFile: string;\n}\n\nexport interface FormBuildCacheOptions {\n farmDirectory: string;\n mode: BuildCacheMode;\n generatorVersion: string;\n gfv: string;\n depsHash: string;\n}\n\nconst singleLimit = pLimit(1);\n\ninterface BuildResultsSerialized {\n [path: string]: string | { type: \"Buffer\"; base64content: string };\n}\n\nexport class CacheAssetsPlugin {\n private readonly options: CacheAssetsPluginOptions;\n\n public constructor(options: CacheAssetsPluginOptions) {\n this.options = options;\n }\n\n public async apply(compiler: webpack.Compiler): Promise<void> {\n compiler.hooks.emit.tapPromise(\"CacheAssetsPlugin\", compilation =>\n singleLimit(async () => {\n const cacheItems: BuildResultsSerialized = {};\n // tslint:disable-next-line no-unsafe-any\n for (const assetName of Object.keys(compilation.assets)) {\n // tslint:disable-next-line no-unsafe-any\n const source: string | Buffer = compilation.assets[assetName]?.source() ?? reject();\n if (source instanceof Buffer) {\n cacheItems[assetName] = { type: \"Buffer\", base64content: source.toString(\"base64\") };\n } else {\n cacheItems[assetName] = source;\n }\n }\n await this.updateFile(cacheItems);\n })\n );\n }\n\n private async updateFile(cacheItems: BuildResultsSerialized): Promise<void> {\n const filePath = path.resolve(this.options.cacheFile);\n let content: BuildResultsSerialized = (await pathExists(filePath))\n ? // tslint:disable-next-line no-unsafe-any\n await CacheFile.read(filePath)\n : {};\n content = {\n ...content,\n ...cacheItems,\n };\n await ensureDir(path.dirname(filePath));\n await CacheFile.write(filePath, content);\n }\n}\n\nexport class BuildCache {\n private readonly farmDirectory: string;\n private readonly mode: BuildCacheMode;\n private readonly logger: ILogger;\n\n public constructor(farmDirectory: string, mode: BuildCacheMode) {\n this.farmDirectory = farmDirectory;\n this.mode = mode;\n this.logger = getLogger().withPrefix(\"BUILD_CACHE\");\n }\n\n public async extract(\n generatorSource: GeneratorSource,\n gfv: string,\n depsHash: string,\n resourcesDirectory: string\n ): Promise<void> {\n if (generatorSource.type === \"GeneratorSources\") {\n throw new Error(\"Local generator does not supports caching\");\n }\n // tslint:disable-next-line no-unsafe-any\n const content: BuildResultsSerialized = await CacheFile.read(\n CacheFile.getCacheFilePath(this.farmDirectory, gfv, generatorSource.version, depsHash)\n );\n for (const assetPath of Object.keys(content)) {\n const contentElement = content[assetPath] ?? reject();\n const normalizedAssetPath = path.join(...assetPath.split(/[\\\\\\/]/));\n const filePath = path.join(resourcesDirectory, normalizedAssetPath);\n await ensureDir(path.dirname(filePath));\n if (typeof contentElement === \"string\") {\n await writeFile(filePath, contentElement, \"utf8\");\n } else {\n await writeFile(filePath, Buffer.from(contentElement.base64content, \"base64\"));\n }\n }\n }\n\n public async exists(generatorSource: GeneratorSource, gfv: string, depsHash: string): Promise<boolean> {\n if (generatorSource.type === \"GeneratorSources\") {\n throw new Error(\"Local generator does not supports caching\");\n }\n if (this.mode === BuildCacheMode.Disabled || this.mode === BuildCacheMode.ForceUpdate) {\n return false;\n }\n const cachedFilePath = await this.existsFileCacheOrDownload(gfv, generatorSource.version, depsHash);\n return cachedFilePath != undefined;\n }\n\n public async setContent(\n generatorSource: string,\n gfv: string,\n depsHash: string,\n resourcesDirectory: string,\n fileName: string,\n fileContent: string\n ): Promise<void> {\n const cacheFilePath = CacheFile.getCacheFilePath(this.farmDirectory, gfv, generatorSource, depsHash);\n if (!(await pathExists(cacheFilePath))) {\n return;\n }\n // tslint:disable-next-line no-unsafe-any\n let content: BuildResultsSerialized = await CacheFile.read(cacheFilePath);\n content = {\n ...content,\n [fileName]: fileContent,\n };\n await ensureDir(path.dirname(cacheFilePath));\n await CacheFile.write(cacheFilePath, content);\n }\n\n public async createWebpackPlugin(options: FormBuildCacheOptions): Promise<CacheAssetsPlugin | undefined> {\n if (options.mode === BuildCacheMode.Disabled || options.mode === BuildCacheMode.ReadOnly) {\n return undefined;\n }\n const cachedFilePath = CacheFile.getCacheFilePath(\n this.farmDirectory,\n options.gfv,\n options.generatorVersion,\n options.depsHash\n );\n return new CacheAssetsPlugin({\n cacheFile: cachedFilePath,\n });\n }\n\n private async existsFileCacheOrDownload(\n gfv: string,\n generatorVersion: string,\n depsHash: string\n ): Promise<string | undefined> {\n const filePath = CacheFile.getCacheFilePath(this.farmDirectory, gfv, generatorVersion, depsHash);\n this.logger.log(`Start search file locally: ${filePath}`);\n const filename = path.basename(filePath);\n await ensureDir(path.dirname(filePath));\n if (await pathExists(filePath)) {\n this.logger.log(\"Found file in local directory\");\n return filePath;\n } else {\n try {\n this.logger.log(`Cache file was not found locally: ${filePath}`);\n this.logger.log(`Looking for cache in drive storage: ${filename}`);\n const response = await fetch(`https://api.kontur.ru/drive/v1/public/${filename}`);\n this.logger.log(`Drive response status code: ${response.status.toString()}`);\n if (response.status === 200) {\n await writeFile(filePath, await response.buffer(), \"utf-8\");\n return filePath;\n } else {\n if (response.status === 404) {\n this.logger.error(\n `Cache file not found in drive storage: ${filename}. GFV: ${gfv}, GeneratorVersion: ${generatorVersion}, DependenciesHash: ${depsHash}`\n );\n } else {\n this.logger.error(\n `Drive storage sent ${response.status} status code, I don't process it in any way`\n );\n }\n return undefined;\n }\n } catch (e) {\n this.logger.error(\"Drive storage responded with an error\");\n this.logger.error(\"The build will continue without a cache\");\n this.logger.error(e);\n return undefined;\n }\n }\n }\n}\n\nclass CacheFile {\n private static readonly contentFilename = \"content.json\";\n private static readonly logger = getLogger().withPrefix(\"BUILD_CACHE\");\n\n public static getCacheFilePath(\n farmDirectory: string,\n gfv: string,\n generatorVersion: string,\n depsHash: string\n ): string {\n const fileName = `${md5(gfv)}-${md5(generatorVersion)}-${depsHash}.zip`;\n return path.join(farmDirectory, \".build-cache\", \"compile\", fileName);\n }\n\n public static async write(cacheFilePath: string, content: BuildResultsSerialized): Promise<void> {\n const zip = new AdmZip();\n zip.addFile(CacheFile.contentFilename, Buffer.from(JSON.stringify(content), \"utf8\"));\n zip.writeZip(cacheFilePath);\n }\n\n public static async read(cacheFilePath: string): Promise<BuildResultsSerialized> {\n try {\n const zip = new AdmZip(cacheFilePath);\n const fileContent = zip.readAsText(CacheFile.contentFilename, \"utf-8\");\n return JSON.parse(fileContent) as BuildResultsSerialized;\n } catch (e) {\n CacheFile.logger.warning(`Failed to unzip: ${cacheFilePath}`);\n CacheFile.logger.warning(`${e}`);\n const fileContent = await readFile(cacheFilePath, \"utf-8\");\n return JSON.parse(fileContent) as BuildResultsSerialized;\n }\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,IAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,GAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAD,sBAAA,CAAAH,OAAA;AAEA,IAAAK,UAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,OAAA,GAAAH,sBAAA,CAAAH,OAAA;AAGA,IAAAO,eAAA,GAAAP,OAAA;AACA,IAAAQ,YAAA,GAAAR,OAAA;AAEA,IAAAS,aAAA,GAAAT,OAAA;AAA4D,SAAAU,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAZ,wBAAAY,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAc5D,MAAMW,WAAW,GAAG,IAAAC,eAAM,EAAC,CAAC,CAAC;AAMtB,MAAMC,iBAAiB,CAAC;EAGpBC,WAAWA,CAACC,OAAiC,EAAE;IAAA,KAFrCA,OAAO;IAGpB,IAAI,CAACA,OAAO,GAAGA,OAAO;EAC1B;EAEA,MAAaC,KAAKA,CAACC,QAA0B,EAAiB;IAC1DA,QAAQ,CAACC,KAAK,CAACC,IAAI,CAACC,UAAU,CAAC,mBAAmB,EAAEC,WAAW,IAC3DV,WAAW,CAAC,YAAY;MACpB,MAAMW,UAAkC,GAAG,CAAC,CAAC;MAC7C;MACA,KAAK,MAAMC,SAAS,IAAIpB,MAAM,CAACqB,IAAI,CAACH,WAAW,CAACI,MAAM,CAAC,EAAE;QAAA,IAAAC,qBAAA,EAAAC,sBAAA;QACrD;QACA,MAAMC,MAAuB,IAAAF,qBAAA,IAAAC,sBAAA,GAAGN,WAAW,CAACI,MAAM,CAACF,SAAS,CAAC,cAAAI,sBAAA,uBAA7BA,sBAAA,CAA+BC,MAAM,CAAC,CAAC,cAAAF,qBAAA,cAAAA,qBAAA,GAAI,IAAAG,mBAAM,EAAC,CAAC;QACnF,IAAID,MAAM,YAAYE,MAAM,EAAE;UAC1BR,UAAU,CAACC,SAAS,CAAC,GAAG;YAAEQ,IAAI,EAAE,QAAQ;YAAEC,aAAa,EAAEJ,MAAM,CAACK,QAAQ,CAAC,QAAQ;UAAE,CAAC;QACxF,CAAC,MAAM;UACHX,UAAU,CAACC,SAAS,CAAC,GAAGK,MAAM;QAClC;MACJ;MACA,MAAM,IAAI,CAACM,UAAU,CAACZ,UAAU,CAAC;IACrC,CAAC,CACL,CAAC;EACL;EAEA,MAAcY,UAAUA,CAACZ,UAAkC,EAAiB;IACxE,MAAMa,QAAQ,GAAGxD,IAAI,CAACyD,OAAO,CAAC,IAAI,CAACrB,OAAO,CAACsB,SAAS,CAAC;IACrD,IAAIC,OAA+B,GAAG,CAAC,MAAM,IAAAC,mBAAU,EAACJ,QAAQ,CAAC;IAC3D;IACA,MAAMK,SAAS,CAACC,IAAI,CAACN,QAAQ,CAAC,GAC9B,CAAC,CAAC;IACRG,OAAO,GAAG;MACN,GAAGA,OAAO;MACV,GAAGhB;IACP,CAAC;IACD,MAAM,IAAAoB,kBAAS,EAAC/D,IAAI,CAACgE,OAAO,CAACR,QAAQ,CAAC,CAAC;IACvC,MAAMK,SAAS,CAACI,KAAK,CAACT,QAAQ,EAAEG,OAAO,CAAC;EAC5C;AACJ;AAACO,OAAA,CAAAhC,iBAAA,GAAAA,iBAAA;AAEM,MAAMiC,UAAU,CAAC;EAKbhC,WAAWA,CAACiC,aAAqB,EAAEC,IAAoB,EAAE;IAAA,KAJ/CD,aAAa;IAAA,KACbC,IAAI;IAAA,KACJC,MAAM;IAGnB,IAAI,CAACF,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACC,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACC,MAAM,GAAG,IAAAC,uBAAS,EAAC,CAAC,CAACC,UAAU,CAAC,aAAa,CAAC;EACvD;EAEA,MAAaC,OAAOA,CAChBC,eAAgC,EAChCC,GAAW,EACXC,QAAgB,EAChBC,kBAA0B,EACb;IACb,IAAIH,eAAe,CAACtB,IAAI,KAAK,kBAAkB,EAAE;MAC7C,MAAM,IAAI0B,KAAK,CAAC,2CAA2C,CAAC;IAChE;IACA;IACA,MAAMnB,OAA+B,GAAG,MAAME,SAAS,CAACC,IAAI,CACxDD,SAAS,CAACkB,gBAAgB,CAAC,IAAI,CAACX,aAAa,EAAEO,GAAG,EAAED,eAAe,CAACM,OAAO,EAAEJ,QAAQ,CACzF,CAAC;IACD,KAAK,MAAMK,SAAS,IAAIzD,MAAM,CAACqB,IAAI,CAACc,OAAO,CAAC,EAAE;MAAA,IAAAuB,kBAAA;MAC1C,MAAMC,cAAc,IAAAD,kBAAA,GAAGvB,OAAO,CAACsB,SAAS,CAAC,cAAAC,kBAAA,cAAAA,kBAAA,GAAI,IAAAhC,mBAAM,EAAC,CAAC;MACrD,MAAMkC,mBAAmB,GAAGpF,IAAI,CAACqF,IAAI,CAAC,GAAGJ,SAAS,CAACK,KAAK,CAAC,QAAQ,CAAC,CAAC;MACnE,MAAM9B,QAAQ,GAAGxD,IAAI,CAACqF,IAAI,CAACR,kBAAkB,EAAEO,mBAAmB,CAAC;MACnE,MAAM,IAAArB,kBAAS,EAAC/D,IAAI,CAACgE,OAAO,CAACR,QAAQ,CAAC,CAAC;MACvC,IAAI,OAAO2B,cAAc,KAAK,QAAQ,EAAE;QACpC,MAAM,IAAAI,kBAAS,EAAC/B,QAAQ,EAAE2B,cAAc,EAAE,MAAM,CAAC;MACrD,CAAC,MAAM;QACH,MAAM,IAAAI,kBAAS,EAAC/B,QAAQ,EAAEL,MAAM,CAACqC,IAAI,CAACL,cAAc,CAAC9B,aAAa,EAAE,QAAQ,CAAC,CAAC;MAClF;IACJ;EACJ;EAEA,MAAaoC,MAAMA,CAACf,eAAgC,EAAEC,GAAW,EAAEC,QAAgB,EAAoB;IACnG,IAAIF,eAAe,CAACtB,IAAI,KAAK,kBAAkB,EAAE;MAC7C,MAAM,IAAI0B,KAAK,CAAC,2CAA2C,CAAC;IAChE;IACA,IAAI,IAAI,CAACT,IAAI,KAAKqB,8BAAc,CAACC,QAAQ,IAAI,IAAI,CAACtB,IAAI,KAAKqB,8BAAc,CAACE,WAAW,EAAE;MACnF,OAAO,KAAK;IAChB;IACA,MAAMC,cAAc,GAAG,MAAM,IAAI,CAACC,yBAAyB,CAACnB,GAAG,EAAED,eAAe,CAACM,OAAO,EAAEJ,QAAQ,CAAC;IACnG,OAAOiB,cAAc,IAAIE,SAAS;EACtC;EAEA,MAAaC,UAAUA,CACnBtB,eAAuB,EACvBC,GAAW,EACXC,QAAgB,EAChBC,kBAA0B,EAC1BoB,QAAgB,EAChBC,WAAmB,EACN;IACb,MAAMC,aAAa,GAAGtC,SAAS,CAACkB,gBAAgB,CAAC,IAAI,CAACX,aAAa,EAAEO,GAAG,EAAED,eAAe,EAAEE,QAAQ,CAAC;IACpG,IAAI,EAAE,MAAM,IAAAhB,mBAAU,EAACuC,aAAa,CAAC,CAAC,EAAE;MACpC;IACJ;IACA;IACA,IAAIxC,OAA+B,GAAG,MAAME,SAAS,CAACC,IAAI,CAACqC,aAAa,CAAC;IACzExC,OAAO,GAAG;MACN,GAAGA,OAAO;MACV,CAACsC,QAAQ,GAAGC;IAChB,CAAC;IACD,MAAM,IAAAnC,kBAAS,EAAC/D,IAAI,CAACgE,OAAO,CAACmC,aAAa,CAAC,CAAC;IAC5C,MAAMtC,SAAS,CAACI,KAAK,CAACkC,aAAa,EAAExC,OAAO,CAAC;EACjD;EAEA,MAAayC,mBAAmBA,CAAChE,OAA8B,EAA0C;IACrG,IAAIA,OAAO,CAACiC,IAAI,KAAKqB,8BAAc,CAACC,QAAQ,IAAIvD,OAAO,CAACiC,IAAI,KAAKqB,8BAAc,CAACW,QAAQ,EAAE;MACtF,OAAON,SAAS;IACpB;IACA,MAAMF,cAAc,GAAGhC,SAAS,CAACkB,gBAAgB,CAC7C,IAAI,CAACX,aAAa,EAClBhC,OAAO,CAACuC,GAAG,EACXvC,OAAO,CAACkE,gBAAgB,EACxBlE,OAAO,CAACwC,QACZ,CAAC;IACD,OAAO,IAAI1C,iBAAiB,CAAC;MACzBwB,SAAS,EAAEmC;IACf,CAAC,CAAC;EACN;EAEA,MAAcC,yBAAyBA,CACnCnB,GAAW,EACX2B,gBAAwB,EACxB1B,QAAgB,EACW;IAC3B,MAAMpB,QAAQ,GAAGK,SAAS,CAACkB,gBAAgB,CAAC,IAAI,CAACX,aAAa,EAAEO,GAAG,EAAE2B,gBAAgB,EAAE1B,QAAQ,CAAC;IAChG,IAAI,CAACN,MAAM,CAACiC,GAAG,CAAC,8BAA8B/C,QAAQ,EAAE,CAAC;IACzD,MAAMgD,QAAQ,GAAGxG,IAAI,CAACyG,QAAQ,CAACjD,QAAQ,CAAC;IACxC,MAAM,IAAAO,kBAAS,EAAC/D,IAAI,CAACgE,OAAO,CAACR,QAAQ,CAAC,CAAC;IACvC,IAAI,MAAM,IAAAI,mBAAU,EAACJ,QAAQ,CAAC,EAAE;MAC5B,IAAI,CAACc,MAAM,CAACiC,GAAG,CAAC,+BAA+B,CAAC;MAChD,OAAO/C,QAAQ;IACnB,CAAC,MAAM;MACH,IAAI;QACA,IAAI,CAACc,MAAM,CAACiC,GAAG,CAAC,qCAAqC/C,QAAQ,EAAE,CAAC;QAChE,IAAI,CAACc,MAAM,CAACiC,GAAG,CAAC,uCAAuCC,QAAQ,EAAE,CAAC;QAClE,MAAME,QAAQ,GAAG,MAAM,IAAAC,kBAAK,EAAC,yCAAyCH,QAAQ,EAAE,CAAC;QACjF,IAAI,CAAClC,MAAM,CAACiC,GAAG,CAAC,+BAA+BG,QAAQ,CAACE,MAAM,CAACtD,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC5E,IAAIoD,QAAQ,CAACE,MAAM,KAAK,GAAG,EAAE;UACzB,MAAM,IAAArB,kBAAS,EAAC/B,QAAQ,EAAE,MAAMkD,QAAQ,CAACG,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC;UAC3D,OAAOrD,QAAQ;QACnB,CAAC,MAAM;UACH,IAAIkD,QAAQ,CAACE,MAAM,KAAK,GAAG,EAAE;YACzB,IAAI,CAACtC,MAAM,CAACwC,KAAK,CACb,0CAA0CN,QAAQ,UAAU7B,GAAG,uBAAuB2B,gBAAgB,uBAAuB1B,QAAQ,EACzI,CAAC;UACL,CAAC,MAAM;YACH,IAAI,CAACN,MAAM,CAACwC,KAAK,CACb,sBAAsBJ,QAAQ,CAACE,MAAM,6CACzC,CAAC;UACL;UACA,OAAOb,SAAS;QACpB;MACJ,CAAC,CAAC,OAAOlF,CAAC,EAAE;QACR,IAAI,CAACyD,MAAM,CAACwC,KAAK,CAAC,uCAAuC,CAAC;QAC1D,IAAI,CAACxC,MAAM,CAACwC,KAAK,CAAC,yCAAyC,CAAC;QAC5D,IAAI,CAACxC,MAAM,CAACwC,KAAK,CAACjG,CAAC,CAAC;QACpB,OAAOkF,SAAS;MACpB;IACJ;EACJ;AACJ;AAAC7B,OAAA,CAAAC,UAAA,GAAAA,UAAA;AAED,MAAMN,SAAS,CAAC;EAIZ,OAAckB,gBAAgBA,CAC1BX,aAAqB,EACrBO,GAAW,EACX2B,gBAAwB,EACxB1B,QAAgB,EACV;IACN,MAAMqB,QAAQ,GAAG,GAAG,IAAAc,WAAG,EAACpC,GAAG,CAAC,IAAI,IAAAoC,WAAG,EAACT,gBAAgB,CAAC,IAAI1B,QAAQ,MAAM;IACvE,OAAO5E,IAAI,CAACqF,IAAI,CAACjB,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE6B,QAAQ,CAAC;EACxE;EAEA,aAAoBhC,KAAKA,CAACkC,aAAqB,EAAExC,OAA+B,EAAiB;IAC7F,MAAMqD,GAAG,GAAG,IAAIC,eAAM,CAAC,CAAC;IACxBD,GAAG,CAACE,OAAO,CAACrD,SAAS,CAACsD,eAAe,EAAEhE,MAAM,CAACqC,IAAI,CAAC4B,IAAI,CAACC,SAAS,CAAC1D,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IACpFqD,GAAG,CAACM,QAAQ,CAACnB,aAAa,CAAC;EAC/B;EAEA,aAAoBrC,IAAIA,CAACqC,aAAqB,EAAmC;IAC7E,IAAI;MACA,MAAMa,GAAG,GAAG,IAAIC,eAAM,CAACd,aAAa,CAAC;MACrC,MAAMD,WAAW,GAAGc,GAAG,CAACO,UAAU,CAAC1D,SAAS,CAACsD,eAAe,EAAE,OAAO,CAAC;MACtE,OAAOC,IAAI,CAACI,KAAK,CAACtB,WAAW,CAAC;IAClC,CAAC,CAAC,OAAOrF,CAAC,EAAE;MACRgD,SAAS,CAACS,MAAM,CAACmD,OAAO,CAAC,oBAAoBtB,aAAa,EAAE,CAAC;MAC7DtC,SAAS,CAACS,MAAM,CAACmD,OAAO,CAAC,GAAG5G,CAAC,EAAE,CAAC;MAChC,MAAMqF,WAAW,GAAG,MAAM,IAAAwB,iBAAQ,EAACvB,aAAa,EAAE,OAAO,CAAC;MAC1D,OAAOiB,IAAI,CAACI,KAAK,CAACtB,WAAW,CAAC;IAClC;EACJ;AACJ;AAhCMrC,SAAS,CACasD,eAAe,GAAG,cAAc;AADtDtD,SAAS,CAEaS,MAAM,GAAG,IAAAC,uBAAS,EAAC,CAAC,CAACC,UAAU,CAAC,aAAa,CAAC","ignoreList":[]}