pnpm-catalog-updates 0.7.19 → 1.0.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/formatters/outputFormatter.ts","../../../packages/utils/src/config/config.ts","../../../packages/utils/src/config/packageFilterConfig.ts","../../../packages/utils/src/config/configLoader.ts","../../../packages/utils/src/error-handling/errorTracker.ts","../../../packages/utils/src/logger/logger.ts","../../../packages/utils/src/error-handling/userFriendlyErrorHandler.ts","../../../packages/utils/src/utils/versionChecker.ts","../../../packages/core/src/domain/value-objects/version.ts","../../../packages/core/src/domain/value-objects/workspacePath.ts","../../../packages/core/src/infrastructure/utils/npmrcParser.ts","../../../packages/core/src/infrastructure/external-services/npmRegistryService.ts","../../../packages/core/src/application/services/catalogUpdateService.ts","../../../packages/core/src/application/services/workspaceService.ts","../../../packages/core/src/domain/entities/catalog.ts","../../../packages/core/src/domain/entities/package.ts","../../../packages/core/src/domain/entities/workspace.ts","../../../packages/core/src/domain/value-objects/catalogCollection.ts","../../../packages/core/src/domain/value-objects/packageCollection.ts","../../../packages/core/src/domain/value-objects/workspaceConfig.ts","../../../packages/core/src/domain/value-objects/workspaceId.ts","../../../packages/core/src/infrastructure/cache/cache.ts","../../../packages/core/src/infrastructure/file-system/fileSystemService.ts","../../../packages/core/src/infrastructure/repositories/fileWorkspaceRepository.ts","../src/cli/themes/colorTheme.ts","../src/cli/commands/checkCommand.ts","../src/cli/commands/initCommand.ts","../src/cli/formatters/progressBar.ts","../src/cli/commands/securityCommand.ts","../src/cli/interactive/interactivePrompts.ts","../src/cli/commands/updateCommand.ts","../src/cli/index.ts"],"names":["chalk","riskColor","path","join","existsSync","readFileSync","resolve","fs","homedir","semver","mkdirSync","writeFileSync","YAML","dirname","packageJson","path4","fileURLToPath","config"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,IAAM,WAAA,GAAc,MAAA,CAAO,YAAA,CAAa,EAAE,CAAA;AAC1C,IAAM,YAAoB,IAAI,MAAA,CAAO,CAAA,EAAG,WAAW,eAAe,GAAG,CAAA;AAE9D,IAAM,kBAAN,MAAsB;AAAA,EAC3B,WAAA,CACmB,MAAA,GAAuB,OAAA,EACvB,QAAA,GAAoB,IAAA,EACrC;AAFiB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKH,qBAAqB,MAAA,EAAgC;AACnD,IAAA,QAAQ,KAAK,MAAA;AAAQ,MACnB,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,MACvC,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,MAC9B,KAAK,SAAA;AACH,QAAA,OAAO,IAAA,CAAK,sBAAsB,MAAM,CAAA;AAAA,MAC1C,KAAK,OAAA;AAAA,MACL;AACE,QAAA,OAAO,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA;AAC1C,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,MAAA,EAA8B;AAC/C,IAAA,QAAQ,KAAK,MAAA;AAAQ,MACnB,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,MACvC,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,MAC9B,KAAK,SAAA;AACH,QAAA,OAAO,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA,MACxC,KAAK,OAAA;AAAA,MACL;AACE,QAAA,OAAO,IAAA,CAAK,kBAAkB,MAAM,CAAA;AAAA;AACxC,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB,QAAA,EAAkC;AACrD,IAAA,QAAQ,KAAK,MAAA;AAAQ,MACnB,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA;AAAA,MACzC,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,UAAU,QAAQ,CAAA;AAAA,MAChC,KAAK,SAAA;AACH,QAAA,OAAO,IAAA,CAAK,oBAAoB,QAAQ,CAAA;AAAA,MAC1C,KAAK,OAAA;AAAA,MACL;AACE,QAAA,OAAO,IAAA,CAAK,kBAAkB,QAAQ,CAAA;AAAA;AAC1C,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAuB,MAAA,EAA2C;AAChE,IAAA,QAAQ,KAAK,MAAA;AAAQ,MACnB,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,MACvC,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,MAC9B,KAAK,SAAA;AACH,QAAA,OAAO,IAAA,CAAK,wBAAwB,MAAM,CAAA;AAAA,MAC5C,KAAK,OAAA;AAAA,MACL;AACE,QAAA,OAAO,IAAA,CAAK,sBAAsB,MAAM,CAAA;AAAA;AAC5C,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB,KAAA,EAA+B;AAClD,IAAA,QAAQ,KAAK,MAAA;AAAQ,MACnB,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAAA,MACtC,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,MAC7B,KAAK,SAAA;AACH,QAAA,OAAO,IAAA,CAAK,mBAAmB,KAAK,CAAA;AAAA,MACtC,KAAK,OAAA;AAAA,MACL;AACE,QAAA,OAAO,IAAA,CAAK,iBAAiB,KAAK,CAAA;AAAA;AACtC,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAqB,MAAA,EAAgC;AACnD,IAAA,QAAQ,KAAK,MAAA;AAAQ,MACnB,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAA;AAAA,MACvC,KAAK,MAAA;AACH,QAAA,OAAO,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,MAC9B,KAAK,SAAA;AACH,QAAA,OAAO,IAAA,CAAK,sBAAsB,MAAM,CAAA;AAAA,MAC1C,KAAK,OAAA;AAAA,MACL;AACE,QAAA,OAAO,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA;AAC1C,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,CAAc,OAAA,EAAiB,IAAA,GAAiD,MAAA,EAAgB;AAC9F,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,SAAA;AACH,QAAA,OAAOA,MAAA,CAAM,MAAM,OAAO,CAAA;AAAA,MAC5B,KAAK,OAAA;AACH,QAAA,OAAOA,MAAA,CAAM,IAAI,OAAO,CAAA;AAAA,MAC1B,KAAK,SAAA;AACH,QAAA,OAAOA,MAAA,CAAM,OAAO,OAAO,CAAA;AAAA,MAC7B,KAAK,MAAA;AAAA,MACL;AACE,QAAA,OAAOA,MAAA,CAAM,KAAK,OAAO,CAAA;AAAA;AAC7B,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,MAAA,EAAgC;AAC1D,IAAA,MAAM,QAAkB,EAAC;AAGzB,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM;AAAA,qBAAA,EAAmB,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,CAAE,CAAC,CAAA;AAChF,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,SAAS,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,CAAE,CAAC,CAAA;AAEtE,IAAA,IAAI,CAAC,OAAO,UAAA,EAAY;AACtB,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,KAAA,EAAO,mDAA8C,CAAC,CAAA;AACrF,MAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACxB;AAEA,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,MAAA,EAAQ;AAAA,gBAAA,EAAc,OAAO,aAAa,CAAA;AAAA,CAA0B;AAAA,KAC1F;AAEA,IAAA,KAAA,MAAW,WAAA,IAAe,OAAO,QAAA,EAAU;AACzC,MAAA,IAAI,WAAA,CAAY,kBAAkB,CAAA,EAAG;AAErC,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,QAAA,CAASA,MAAA,CAAM,MAAM,CAAA,mBAAA,EAAe,WAAA,CAAY,WAAW,CAAA,CAAE,CAAC,CAAA;AAE9E,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,QACtB,IAAA,EAAM,KAAK,eAAA,CAAgB,CAAC,WAAW,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,UAAU,CAAC,CAAA;AAAA,QAC/E,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,QAC9B,WAAW,CAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,GAAG,EAAE;AAAA,OAC9B,CAAA;AAED,MAAA,KAAA,MAAW,GAAA,IAAO,YAAY,oBAAA,EAAsB;AAClD,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,UAAU,CAAA;AACxD,QAAA,MAAM,YAAA,GAAe,GAAA,CAAI,gBAAA,GAAmB,YAAA,GAAQ,EAAA;AAGpD,QAAA,MAAM,EAAE,cAAA,EAAgB,aAAA,EAAc,GAAI,IAAA,CAAK,mBAAA;AAAA,UAC7C,GAAA,CAAI,cAAA;AAAA,UACJ,GAAA,CAAI,aAAA;AAAA,UACJ,GAAA,CAAI;AAAA,SACN;AAEA,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,CAAA,EAAG,YAAY,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,CAAA;AAAA,UACjC,cAAA;AAAA,UACA,aAAA;AAAA,UACA,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,GAAA,CAAI,UAAU,CAAA;AAAA,UACvC,CAAA,EAAG,GAAA,CAAI,gBAAA,CAAiB,MAAM,CAAA,WAAA;AAAA,SAC/B,CAAA;AAAA,MACH;AAEA,MAAA,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAA;AAC3B,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsB,MAAA,EAAgC;AAC5D,IAAA,IAAI,CAAC,OAAO,UAAA,EAAY;AACtB,MAAA,OAAO,6BAAA;AAAA,IACT;AAGA,IAAA,MAAM,UAKD,EAAC;AAEN,IAAA,KAAA,MAAW,WAAA,IAAe,OAAO,QAAA,EAAU;AACzC,MAAA,KAAA,MAAW,GAAA,IAAO,YAAY,oBAAA,EAAsB;AAClD,QAAA,MAAM,YAAA,GAAe,GAAA,CAAI,gBAAA,GAAmB,YAAA,GAAQ,EAAA;AACpD,QAAA,MAAM,EAAE,cAAA,EAAgB,aAAA,EAAc,GAAI,IAAA,CAAK,mBAAA;AAAA,UAC7C,GAAA,CAAI,cAAA;AAAA,UACJ,GAAA,CAAI,aAAA;AAAA,UACJ,GAAA,CAAI;AAAA,SACN;AACA,QAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,UACX,YAAA;AAAA,UACA,aAAa,GAAA,CAAI,WAAA;AAAA,UACjB,cAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF;AAGA,IAAA,MAAM,eAAe,IAAA,CAAK,GAAA;AAAA,MACxB,GAAG,QAAQ,GAAA,CAAI,CAAC,SAAS,GAAA,CAAI,YAAA,GAAe,GAAA,CAAI,WAAA,EAAa,MAAM;AAAA,KACrE;AAGA,IAAA,MAAM,YAAY,CAAC,GAAA,KAAgB,GAAA,CAAI,OAAA,CAAQ,WAAW,EAAE,CAAA;AAC5D,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,GAAA,CAAI,GAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ,SAAA,CAAU,GAAA,CAAI,cAAc,CAAA,CAAE,MAAM,CAAC,CAAA;AAG9F,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,MAAA,MAAM,YAAA,GAAe,GAAA,CAAI,YAAA,GAAe,GAAA,CAAI,WAAA;AAC5C,MAAA,MAAM,UAAA,GAAa,YAAA,CAAa,MAAA,CAAO,YAAY,CAAA;AAGnD,MAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,GAAA,CAAI,cAAc,CAAA;AACnD,MAAA,MAAM,cAAA,GAAiB,kBAAkB,cAAA,CAAe,MAAA;AACxD,MAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,cAAA,GAAiB,GAAA,CAAI,OAAO,cAAc,CAAA;AAEpE,MAAA,KAAA,CAAM,IAAA,CAAK,GAAG,UAAU,CAAA,EAAA,EAAK,aAAa,CAAA,QAAA,EAAM,GAAA,CAAI,aAAa,CAAA,CAAE,CAAA;AAAA,IACrE;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,MAAA,EAA8B;AACtD,IAAA,MAAM,QAAkB,EAAC;AAGzB,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM;AAAA,qBAAA,EAAmB,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,CAAE,CAAC,CAAA;AAEhF,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,KAAA,EAAO,uCAAkC,CAAC,CAAA;AAAA,IAC3E,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,GAAA,EAAK,qCAAgC,CAAC,CAAA;AAAA,IACvE;AAEA,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,IAAA,IAAI,MAAA,CAAO,mBAAA,CAAoB,MAAA,GAAS,CAAA,EAAG;AACzC,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,QAAA,CAASA,MAAA,CAAM,OAAO,CAAA,kBAAA,EAAc,MAAA,CAAO,YAAY,CAAA,cAAA,CAAgB,CAAC,CAAA;AAExF,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,QACtB,IAAA,EAAM,KAAK,eAAA,CAAgB,CAAC,WAAW,SAAA,EAAW,MAAA,EAAQ,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,QACvE,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,QAC9B,WAAW,CAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,CAAC;AAAA,OAC9B,CAAA;AAED,MAAA,KAAA,MAAW,GAAA,IAAO,OAAO,mBAAA,EAAqB;AAC5C,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,UAAU,CAAA;AAGxD,QAAA,MAAM,EAAE,cAAA,EAAgB,aAAA,EAAc,GAAI,IAAA,CAAK,mBAAA;AAAA,UAC7C,GAAA,CAAI,WAAA;AAAA,UACJ,GAAA,CAAI,SAAA;AAAA,UACJ,GAAA,CAAI;AAAA,SACN;AAEA,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,GAAA,CAAI,WAAA;AAAA,UACJ,GAAA,CAAI,WAAA;AAAA,UACJ,cAAA;AAAA,UACA,aAAA;AAAA,UACA,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,GAAA,CAAI,UAAU;AAAA,SACxC,CAAA;AAAA,MACH;AAEA,MAAA,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAA;AAC3B,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAGA,IAAA,IAAI,MAAA,CAAO,mBAAA,CAAoB,MAAA,GAAS,CAAA,EAAG;AACzC,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,QAAA,CAASA,MAAA,CAAM,QAAQ,CAAA,sBAAA,EAAe,MAAA,CAAO,YAAY,CAAA,cAAA,CAAgB,CAAC,CAAA;AAE1F,MAAA,KAAA,MAAW,GAAA,IAAO,OAAO,mBAAA,EAAqB;AAC5C,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,GAAA,CAAI,WAAW,CAAA,CAAA,EAAI,IAAI,WAAW,CAAA,GAAA,EAAM,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAAA,MACtE;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAGA,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,QAAA,CAASA,MAAA,CAAM,KAAK,CAAA,OAAA,EAAK,MAAA,CAAO,WAAW,CAAA,iBAAA,CAAmB,CAAC,CAAA;AAE/E,MAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,QAAA,MAAM,MAAA,GAAS,KAAA,CAAM,KAAA,GAAQ,WAAA,GAAO,eAAA;AACpC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,WAAW,CAAA,CAAA,EAAI,KAAA,CAAM,WAAW,CAAA,GAAA,EAAM,KAAA,CAAM,KAAK,CAAA,CAAE,CAAA;AAAA,MACrF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,MAAA,EAA8B;AACxD,IAAA,MAAM,QAAkB,EAAC;AAEzB,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,MAAA,CAAO,YAAY,CAAA,aAAA,CAAe,CAAA;AAAA,IAC1D,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,mBAAA,EAAsB,MAAA,CAAO,WAAW,CAAA,OAAA,CAAS,CAAA;AAAA,IAC9D;AAEA,IAAA,IAAI,MAAA,CAAO,mBAAA,CAAoB,MAAA,GAAS,CAAA,EAAG;AAEzC,MAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,mBAAA,CAAoB,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC/D,QAAA,MAAM,EAAE,cAAA,EAAgB,aAAA,EAAc,GAAI,IAAA,CAAK,mBAAA;AAAA,UAC7C,GAAA,CAAI,WAAA;AAAA,UACJ,GAAA,CAAI,SAAA;AAAA,UACJ,GAAA,CAAI;AAAA,SACN;AACA,QAAA,OAAO;AAAA,UACL,aAAa,GAAA,CAAI,WAAA;AAAA,UACjB,cAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,GAAG,gBAAA,CAAiB,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,WAAA,CAAY,MAAM,CAAC,CAAA;AAEtF,MAAA,MAAM,YAAY,CAAC,GAAA,KAAgB,GAAA,CAAI,OAAA,CAAQ,WAAW,EAAE,CAAA;AAC5D,MAAA,MAAM,kBAAkB,IAAA,CAAK,GAAA;AAAA,QAC3B,GAAG,iBAAiB,GAAA,CAAI,CAAC,QAAQ,SAAA,CAAU,GAAA,CAAI,cAAc,CAAA,CAAE,MAAM;AAAA,OACvE;AAEA,MAAA,KAAA,MAAW,OAAO,gBAAA,EAAkB;AAClC,QAAA,MAAM,UAAA,GAAa,GAAA,CAAI,WAAA,CAAY,MAAA,CAAO,YAAY,CAAA;AAGtD,QAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,GAAA,CAAI,cAAc,CAAA;AACnD,QAAA,MAAM,cAAA,GAAiB,kBAAkB,cAAA,CAAe,MAAA;AACxD,QAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,cAAA,GAAiB,GAAA,CAAI,OAAO,cAAc,CAAA;AAEpE,QAAA,KAAA,CAAM,IAAA,CAAK,GAAG,UAAU,CAAA,EAAA,EAAK,aAAa,CAAA,QAAA,EAAM,GAAA,CAAI,aAAa,CAAA,CAAE,CAAA;AAAA,MACrE;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,QAAA,EAAkC;AAC1D,IAAA,MAAM,QAAkB,EAAC;AAGzB,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM;AAAA,2BAAA,EAAyB,QAAA,CAAS,WAAW,CAAA,CAAE,CAAC,CAAA;AACrF,IAAA,KAAA,CAAM,IAAA,CAAK,KAAK,QAAA,CAASA,MAAA,CAAM,MAAM,CAAA,SAAA,EAAY,QAAA,CAAS,WAAW,CAAA,CAAE,CAAC,CAAA;AACxE,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,CAAA,QAAA,EAAW,SAAS,cAAc,CAAA,QAAA,EAAM,QAAA,CAAS,eAAe,CAAA,CAAE;AAAA,KAC9F;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,KAAK,QAAA,CAASA,MAAA,CAAM,MAAM,CAAA,MAAA,EAAS,QAAA,CAAS,UAAU,CAAA,CAAE,CAAC,CAAA;AAGpE,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,YAAA,CAAa,QAAA,CAAS,SAAS,CAAA;AACtD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,SAAA,EAAW,CAAA,YAAA,EAAe,SAAS,SAAA,CAAU,WAAA,EAAa,CAAA,CAAE,CAAC,CAAA;AACtF,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,IAAA,IAAI,QAAA,CAAS,gBAAA,CAAiB,MAAA,GAAS,CAAA,EAAG;AACxC,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,8BAAuB,CAAC,CAAA;AAE7D,MAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,QACtB,IAAA,EAAM,KAAK,eAAA,CAAgB,CAAC,WAAW,MAAA,EAAQ,iBAAA,EAAmB,MAAM,CAAC,CAAA;AAAA,QACzE,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,QAC9B,SAAA,EAAW,CAAC,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE;AAAA,OAC3B,CAAA;AAED,MAAA,KAAA,MAAW,GAAA,IAAO,SAAS,gBAAA,EAAkB;AAC3C,QAAA,MAAMC,UAAAA,GAAY,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,iBAAiB,CAAA;AACzD,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,GAAA,CAAI,WAAA;AAAA,UACJ,GAAA,CAAI,WAAA;AAAA,UACJ,GAAA,CAAI,cAAA;AAAA,UACJ,IAAA,CAAK,QAAA,CAASA,UAAAA,EAAW,GAAA,CAAI,iBAAiB;AAAA,SAC/C,CAAA;AAAA,MACH;AAEA,MAAA,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAA;AAC3B,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAGA,IAAA,IAAI,QAAA,CAAS,eAAe,kBAAA,EAAoB;AAC9C,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASD,MAAA,CAAM,IAAA,EAAM,4BAAqB,CAAC,CAAA;AAE3D,MAAA,IAAI,QAAA,CAAS,cAAA,CAAe,oBAAA,GAAuB,CAAA,EAAG;AACpD,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,IAAA,CAAK,QAAA;AAAA,YACHA,MAAA,CAAM,KAAA;AAAA,YACN,CAAA,eAAA,EAAa,QAAA,CAAS,cAAA,CAAe,oBAAoB,CAAA,gBAAA;AAAA;AAC3D,SACF;AAAA,MACF;AAEA,MAAA,IAAI,QAAA,CAAS,cAAA,CAAe,kBAAA,GAAqB,CAAA,EAAG;AAClD,QAAA,KAAA,CAAM,IAAA;AAAA,UACJ,IAAA,CAAK,QAAA;AAAA,YACHA,MAAA,CAAM,GAAA;AAAA,YACN,CAAA,2BAAA,EAAoB,QAAA,CAAS,cAAA,CAAe,kBAAkB,CAAA,gBAAA;AAAA;AAChE,SACF;AAAA,MACF;AAEA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAGA,IAAA,IAAI,QAAA,CAAS,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACvC,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,4BAAqB,CAAC,CAAA;AAC3D,MAAA,KAAA,MAAW,GAAA,IAAO,SAAS,eAAA,EAAiB;AAC1C,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AAAA,MACvB;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,QAAA,EAAkC;AAC5D,IAAA,OAAO;AAAA,MACL,CAAA,EAAG,SAAS,WAAW,CAAA,EAAA,EAAK,SAAS,cAAc,CAAA,QAAA,EAAM,SAAS,eAAe,CAAA,CAAA;AAAA,MACjF,CAAA,MAAA,EAAS,SAAS,SAAS,CAAA,CAAA;AAAA,MAC3B,CAAA,UAAA,EAAa,QAAA,CAAS,gBAAA,CAAiB,MAAM,CAAA,SAAA;AAAA,KAC/C,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsB,MAAA,EAA2C;AACvE,IAAA,MAAM,QAAkB,EAAC;AAGzB,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,GAAU,QAAA,GAAM,QAAA;AAC1C,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,GAAUA,MAAA,CAAM,QAAQA,MAAA,CAAM,GAAA;AAEzD,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM;AAAA,EAAK,UAAU,uBAAuB,CAAC,CAAA;AAC5E,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,WAAA,EAAa,CAAA,QAAA,EAAW,OAAO,OAAA,GAAU,OAAA,GAAU,SAAS,CAAA,CAAE,CAAC,CAAA;AACxF,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,IAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,kCAA2B,CAAC,CAAA;AACjE,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,CAAE,CAAA;AAC7C,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA,CAAE,CAAA;AAC7C,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,MAAA,CAAO,SAAA,CAAU,YAAY,CAAA,CAAE,CAAA;AACzD,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,MAAA,CAAO,SAAA,CAAU,YAAY,CAAA,CAAE,CAAA;AACzD,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAGb,IAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,GAAA,EAAK,gBAAW,CAAC,CAAA;AAChD,MAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAO,KAAK,CAAA,CAAE,CAAA;AAAA,MAC3B;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAGA,IAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,MAAA,EAAQ,yBAAe,CAAC,CAAA;AACvD,MAAA,KAAA,MAAW,OAAA,IAAW,OAAO,QAAA,EAAU;AACrC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAO,OAAO,CAAA,CAAE,CAAA;AAAA,MAC7B;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,IACf;AAGA,IAAA,IAAI,MAAA,CAAO,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACrC,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,4BAAqB,CAAC,CAAA;AAC3D,MAAA,KAAA,MAAW,GAAA,IAAO,OAAO,eAAA,EAAiB;AACxC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAO,GAAG,CAAA,CAAE,CAAA;AAAA,MACzB;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,wBAAwB,MAAA,EAA2C;AACzE,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,OAAA,GAAU,SAAA;AAC1C,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,CAAO,MAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,CAAS,MAAA;AAEjC,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,MAAM,YAAY,QAAQ,CAAA,UAAA,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,KAAA,EAA+B;AACtD,IAAA,MAAM,QAAkB,EAAC;AAEzB,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM;AAAA,8BAAA,CAA2B,CAAC,CAAA;AACjE,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,cAAc,KAAA,CAAM,SAAA,CAAU,IAAI,CAAA,CAAE,CAAC,CAAA;AAC1E,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAEb,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,MACtB,MAAM,IAAA,CAAK,eAAA,CAAgB,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAAA,MAC9C,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,MAC9B,SAAA,EAAW,CAAC,EAAA,EAAI,EAAE;AAAA,KACnB,CAAA;AAED,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,gBAAA,EAAkB,KAAA,CAAM,SAAS,KAAA,CAAM,QAAA,EAAU,CAAC,CAAA;AAC9D,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,4BAAA,EAA8B,KAAA,CAAM,SAAS,qBAAA,CAAsB,QAAA,EAAU,CAAC,CAAA;AAC1F,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,gBAAA,EAAkB,KAAA,CAAM,SAAS,KAAA,CAAM,QAAA,EAAU,CAAC,CAAA;AAC9D,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,iBAAA,EAAmB,KAAA,CAAM,SAAS,YAAA,CAAa,QAAA,EAAU,CAAC,CAAA;AACtE,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,oBAAA,EAAsB,KAAA,CAAM,aAAa,KAAA,CAAM,QAAA,EAAU,CAAC,CAAA;AACtE,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,oBAAA,EAAsB,KAAA,CAAM,aAAa,iBAAA,CAAkB,QAAA,EAAU,CAAC,CAAA;AAClF,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,cAAA,EAAgB,KAAA,CAAM,aAAa,MAAA,CAAO,YAAA,CAAa,QAAA,EAAU,CAAC,CAAA;AAC9E,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,kBAAA,EAAoB,KAAA,CAAM,aAAa,MAAA,CAAO,eAAA,CAAgB,QAAA,EAAU,CAAC,CAAA;AACrF,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,mBAAA,EAAqB,KAAA,CAAM,aAAa,MAAA,CAAO,gBAAA,CAAiB,QAAA,EAAU,CAAC,CAAA;AACvF,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,uBAAA;AAAA,MACA,KAAA,CAAM,YAAA,CAAa,MAAA,CAAO,oBAAA,CAAqB,QAAA;AAAS,KACzD,CAAA;AAED,IAAA,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAA;AAE3B,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,KAAA,EAA+B;AACxD,IAAA,OAAO;AAAA,MACL,CAAA,UAAA,EAAa,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,MACjC,CAAA,UAAA,EAAa,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,MACjC,CAAA,cAAA,EAAiB,KAAA,CAAM,YAAA,CAAa,KAAK,CAAA;AAAA,KAC3C,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,MAAA,EAAgC;AAC1D,IAAA,MAAM,QAAkB,EAAC;AAGzB,IAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,6BAAsB,CAAC,CAAA;AAC5D,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,cAAc,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA,CAAE,CAAC,CAAA;AACnF,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,CAAA,WAAA,EAAc,IAAI,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,CAAE,cAAA,EAAgB,CAAA,CAAE;AAAA,KAC/F;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,CAAA,OAAA,EAAU,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,EAAE,CAAC,CAAA;AAGtF,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,oBAAa,CAAC,CAAA;AAEnD,IAAA,MAAM,YAAA,GAAe,IAAI,KAAA,CAAM;AAAA,MAC7B,MAAM,IAAA,CAAK,eAAA,CAAgB,CAAC,UAAA,EAAY,OAAO,CAAC,CAAA;AAAA,MAChD,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,MAC9B,SAAA,EAAW,CAAC,EAAA,EAAI,EAAE;AAAA,KACnB,CAAA;AAED,IAAA,YAAA,CAAa,IAAA,CAAK,CAAC,UAAA,EAAY,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,GAAA,EAAK,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,QAAA,EAAU,CAAC,CAAC,CAAA;AAC5F,IAAA,YAAA,CAAa,IAAA,CAAK,CAAC,MAAA,EAAQ,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,CAAC,CAAC,CAAA;AACvF,IAAA,YAAA,CAAa,IAAA,CAAK,CAAC,UAAA,EAAY,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,QAAA,EAAU,CAAC,CAAC,CAAA;AAC7F,IAAA,YAAA,CAAa,IAAA,CAAK,CAAC,KAAA,EAAO,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,QAAA,EAAU,CAAC,CAAC,CAAA;AACpF,IAAA,YAAA,CAAa,IAAA,CAAK,CAAC,MAAA,EAAQ,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,CAAC,CAAC,CAAA;AACrF,IAAA,YAAA,CAAa,IAAA,CAAK;AAAA,MAChB,OAAA;AAAA,MACA,IAAA,CAAK,SAASA,MAAA,CAAM,IAAA,EAAM,OAAO,OAAA,CAAQ,oBAAA,CAAqB,UAAU;AAAA,KACzE,CAAA;AAED,IAAA,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,QAAA,EAAU,CAAA;AAGlC,IAAA,IAAI,MAAA,CAAO,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACrC,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,4BAAqB,CAAC,CAAA;AAE3D,MAAA,MAAM,SAAA,GAAY,IAAI,KAAA,CAAM;AAAA,QAC1B,IAAA,EAAM,KAAK,eAAA,CAAgB,CAAC,WAAW,UAAA,EAAY,OAAA,EAAS,eAAe,CAAC,CAAA;AAAA,QAC5E,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,QAC9B,SAAA,EAAW,CAAC,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE;AAAA,OAC3B,CAAA;AAED,MAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,eAAA,EAAiB;AACzC,QAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,QAAQ,CAAA;AACzD,QAAA,MAAM,SAAA,GAAY,KAAK,YAAA,GACnB,OAAO,KAAK,YAAA,KAAiB,QAAA,GAC3B,IAAA,CAAK,YAAA,GACL,KAAA,GACF,IAAA;AAEJ,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,IAAA,CAAK,OAAA;AAAA,UACL,KAAK,QAAA,CAAS,aAAA,EAAe,IAAA,CAAK,QAAA,CAAS,aAAa,CAAA;AAAA,UACxD,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,CAAA,EAAG,EAAE,CAAA,GAAI,KAAA,GAAQ,IAAA,CAAK,KAAA;AAAA,UACpE;AAAA,SACD,CAAA;AAAA,MACH;AAEA,MAAA,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,QAAA,EAAU,CAAA;AAAA,IACjC;AAGA,IAAA,IAAI,MAAA,CAAO,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACrC,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,QAAA,CAASA,MAAA,CAAM,IAAA,EAAM,4BAAqB,CAAC,CAAA;AAE3D,MAAA,KAAA,MAAW,GAAA,IAAO,OAAO,eAAA,EAAiB;AACxC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,GAAA,CAAI,OAAO,CAAA,EAAA,EAAK,IAAI,cAAc,CAAA,QAAA,EAAM,GAAA,CAAI,kBAAkB,CAAA,CAAE,CAAA;AAChF,QAAA,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,GAAA,CAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,MAChD;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsB,MAAA,EAAgC;AAC5D,IAAA,MAAM,eAAA,GAAkB,OAAO,OAAA,CAAQ,oBAAA;AACvC,IAAA,IAAI,oBAAoB,CAAA,EAAG;AACzB,MAAA,OAAO,0BAAA;AAAA,IACT;AAEA,IAAA,OAAO;AAAA,MACL,GAAG,eAAe,CAAA,uBAAA,CAAA;AAAA,MAClB,CAAA,YAAA,EAAe,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CAAA;AAAA,MACtC,CAAA,QAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,MAC9B,CAAA,YAAA,EAAe,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,CAAA;AAAA,MACtC,CAAA,OAAA,EAAU,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA;AAAA,KAC9B,CAAE,KAAK,IAAI,CAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,QAAA,EAAgC;AACvD,IAAA,QAAQ,QAAA,CAAS,aAAY;AAAG,MAC9B,KAAK,UAAA;AACH,QAAA,OAAOA,MAAA,CAAM,GAAA;AAAA,MACf,KAAK,MAAA;AACH,QAAA,OAAOA,MAAA,CAAM,MAAA;AAAA,MACf,KAAK,UAAA;AACH,QAAA,OAAOA,MAAA,CAAM,IAAA;AAAA,MACf,KAAK,KAAA;AACH,QAAA,OAAOA,MAAA,CAAM,KAAA;AAAA,MACf;AACE,QAAA,OAAOA,MAAA,CAAM,IAAA;AAAA;AACjB,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,QAAA,CAAS,SAAuB,IAAA,EAAsB;AAC5D,IAAA,OAAO,IAAA,CAAK,QAAA,GAAW,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,OAAA,EAA6B;AACnD,IAAA,OAAO,IAAA,CAAK,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAMA,MAAA,CAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA,GAAI,OAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,UAAA,EAAkC;AAC3D,IAAA,QAAQ,UAAA;AAAY,MAClB,KAAK,OAAA;AACH,QAAA,OAAOA,MAAA,CAAM,GAAA;AAAA,MACf,KAAK,OAAA;AACH,QAAA,OAAOA,MAAA,CAAM,MAAA;AAAA,MACf,KAAK,OAAA;AACH,QAAA,OAAOA,MAAA,CAAM,KAAA;AAAA,MACf;AACE,QAAA,OAAOA,MAAA,CAAM,IAAA;AAAA;AACjB,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,SAAA,EAAiC;AACpD,IAAA,QAAQ,SAAA;AAAW,MACjB,KAAK,MAAA;AACH,QAAA,OAAOA,MAAA,CAAM,GAAA;AAAA,MACf,KAAK,QAAA;AACH,QAAA,OAAOA,MAAA,CAAM,MAAA;AAAA,MACf,KAAK,KAAA;AACH,QAAA,OAAOA,MAAA,CAAM,KAAA;AAAA,MACf;AACE,QAAA,OAAOA,MAAA,CAAM,IAAA;AAAA;AACjB,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAA,CACN,OAAA,EACA,MAAA,EACA,UAAA,EAIA;AACA,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,MAAA,OAAO,EAAE,cAAA,EAAgB,OAAA,EAAS,aAAA,EAAe,MAAA,EAAO;AAAA,IAC1D;AAGA,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,KAAoB;AAExC,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;AACrD,MAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAA,CAAM,GAAG,CAAA;AACpC,MAAA,OAAO;AAAA,QACL,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,IAAK,GAAA;AAAA,QACnB,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,IAAK,GAAA;AAAA,QACnB,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA,IAAK,GAAA;AAAA,QACnB,OAAO,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,QAC9B,QAAQ,OAAA,CAAQ,SAAA,CAAU,GAAG,OAAA,CAAQ,MAAA,GAAS,aAAa,MAAM;AAAA,OACnE;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,aAAa,OAAO,CAAA;AACzC,IAAA,MAAM,WAAA,GAAc,aAAa,MAAM,CAAA;AAGvC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,kBAAA,CAAmB,UAAU,CAAA;AAGpD,IAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,EAAc,UAAA,EAAoB,SAAA,KAAuB;AACjF,MAAA,IAAI,SAAA,IAAa,SAAS,UAAA,EAAY;AACpC,QAAA,OAAOA,MAAA,CAAM,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAAA,MAC7B;AACA,MAAA,OAAOA,MAAA,CAAM,MAAM,IAAI,CAAA;AAAA,IACzB,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,IAAA,EAAc,WAAA,EAAqB,SAAA,KAAuB;AACjF,MAAA,IAAI,SAAA,IAAa,SAAS,WAAA,EAAa;AACrC,QAAA,OAAO,UAAU,IAAI,CAAA;AAAA,MACvB;AACA,MAAA,OAAOA,MAAA,CAAM,MAAM,IAAI,CAAA;AAAA,IACzB,CAAA;AAGA,IAAA,MAAM,YAAA,GAAe,YAAA,CAAa,KAAA,KAAU,WAAA,CAAY,KAAA;AACxD,IAAA,MAAM,YAAA,GAAe,YAAA,CAAa,KAAA,KAAU,WAAA,CAAY,KAAA;AACxD,IAAA,MAAM,YAAA,GAAe,YAAA,CAAa,KAAA,KAAU,WAAA,CAAY,KAAA;AACxD,IAAA,MAAM,YAAA,GAAe,YAAA,CAAa,KAAA,KAAU,WAAA,CAAY,KAAA;AAGxD,IAAA,IAAI,iBAAiB,YAAA,CAAa,MAAA;AAClC,IAAA,cAAA,IAAkB,gBAAA,CAAiB,YAAA,CAAa,KAAA,EAAO,WAAA,CAAY,OAAO,YAAY,CAAA;AACtF,IAAA,cAAA,IAAkB,GAAA;AAClB,IAAA,cAAA,IAAkB,gBAAA,CAAiB,YAAA,CAAa,KAAA,EAAO,WAAA,CAAY,OAAO,YAAY,CAAA;AACtF,IAAA,cAAA,IAAkB,GAAA;AAClB,IAAA,cAAA,IAAkB,gBAAA,CAAiB,YAAA,CAAa,KAAA,EAAO,WAAA,CAAY,OAAO,YAAY,CAAA;AACtF,IAAA,IAAI,aAAa,KAAA,EAAO;AACtB,MAAA,cAAA,IAAkB,MAAM,gBAAA,CAAiB,YAAA,CAAa,KAAA,EAAO,WAAA,CAAY,OAAO,YAAY,CAAA;AAAA,IAC9F;AAGA,IAAA,IAAI,gBAAgB,WAAA,CAAY,MAAA;AAChC,IAAA,aAAA,IAAiB,eAAA,CAAgB,WAAA,CAAY,KAAA,EAAO,YAAA,CAAa,OAAO,YAAY,CAAA;AACpF,IAAA,aAAA,IAAiB,GAAA;AACjB,IAAA,aAAA,IAAiB,eAAA,CAAgB,WAAA,CAAY,KAAA,EAAO,YAAA,CAAa,OAAO,YAAY,CAAA;AACpF,IAAA,aAAA,IAAiB,GAAA;AACjB,IAAA,aAAA,IAAiB,eAAA,CAAgB,WAAA,CAAY,KAAA,EAAO,YAAA,CAAa,OAAO,YAAY,CAAA;AACpF,IAAA,IAAI,YAAY,KAAA,EAAO;AACrB,MAAA,aAAA,IAAiB,MAAM,eAAA,CAAgB,WAAA,CAAY,KAAA,EAAO,YAAA,CAAa,OAAO,YAAY,CAAA;AAAA,IAC5F;AAEA,IAAA,OAAO,EAAE,gBAAgB,aAAA,EAAc;AAAA,EACzC;AACF,CAAA;AC5vBO,IAAM,cAAA,GAA4B;AAAA,EACvC,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,4BAAA;AAAA,IACL,OAAA,EAAS,GAAA;AAAA,IACT,OAAA,EAAS,CAAA;AAAA,IACT,KAAA,EAAO,IAAA;AAAA,IACP,QAAA,EAAU;AAAA;AAAA,GACZ;AAAA,EAEA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,iBAAA,EAAmB,KAAA;AAAA,IACnB,WAAA,EAAa,KAAA;AAAA,IACb,YAAA,EAAc,KAAA;AAAA,IACd,KAAA,EAAO;AAAA,GACT;AAAA,EAEA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,OAAA;AAAA,IACR,KAAA,EAAO,IAAA;AAAA,IACP,OAAA,EAAS,KAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACV;AAAA,EAEA,SAAA,EAAW;AAAA,IACT,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,CAAC,YAAA,EAAc,QAAQ,CAAA;AAAA,IACjC,eAAA,EAAiB,CAAC,oBAAA,EAAsB,YAAA,EAAc,aAAa;AAAA,GACrE;AAAA,EAEA,YAAA,EAAc;AAAA,IACZ,OAAA,EAAS,KAAA;AAAA,IACT,SAAA,EAAW,IAAA;AAAA,IACX,OAAA,EAAS,IAAA;AAAA,IACT,OAAA,EAAS,CAAC,SAAS;AAAA,GACrB;AAAA,EAEA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU;AAAA;AAEd,CAAA;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACjB,MAAA;AAAA,EACA,UAAA;AAAA,EAER,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,EAAE,GAAG,cAAA,EAAe;AAClC,IAAA,IAAA,CAAK,UAAA,EAAW;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAiC;AAC/B,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,IAAaE,KAAAA,EAAiB;AAC5B,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQA,KAAI,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,GAAA,CAAIA,OAAc,KAAA,EAAkB;AAClC,IAAA,IAAA,CAAK,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQA,KAAAA,EAAM,KAAK,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,gBACE,OAAA,EAgBM;AACN,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,GAAA,GAAM,OAAA,CAAQ,QAAA;AAAA,IACrC;AACA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,OAAA,GAAU,OAAA,CAAQ,OAAA;AAAA,IACzC;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,OAAA,CAAQ,MAAA;AAAA,IACtC;AACA,IAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,EAAW;AACpC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,iBAAA,GAAoB,OAAA,CAAQ,UAAA;AAAA,IACjD;AACA,IAAA,IAAI,OAAA,CAAQ,gBAAgB,MAAA,EAAW;AACrC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,WAAA,GAAc,OAAA,CAAQ,WAAA;AAAA,IAC3C;AACA,IAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA,GAAQ,OAAA,CAAQ,KAAA;AAAA,IACrC;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,OAAA,CAAQ,MAAA;AAAA,IACtC;AACA,IAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA,GAAQ,OAAA,CAAQ,KAAA;AAAA,IACrC;AACA,IAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,OAAA,GAAU,OAAA,CAAQ,OAAA;AAAA,IACvC;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW;AAChC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,OAAA,CAAQ,MAAA;AAAA,IACtC;AACA,IAAA,IAAI,QAAQ,OAAA,EAAS;AAEnB,MAAA,IAAA,CAAK,OAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,QAAQ,OAAO,CAAA;AAAA,IACxD;AACA,IAAA,IAAI,QAAQ,OAAA,EAAS;AAEnB,MAAA,IAAA,CAAK,OAAO,SAAA,CAAU,eAAA,CAAgB,IAAA,CAAK,GAAG,QAAQ,OAAO,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,GAAmB;AAEzB,IAAA,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,cAAA,EAAgB,CAAA;AAGvC,IAAA,IAAA,CAAK,mBAAA,EAAoB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,GAAqC;AAC3C,IAAA,MAAM,cAAc,CAAC,QAAA,EAAU,aAAA,EAAe,WAAA,EAAa,iBAAiB,iBAAiB,CAAA;AAG7F,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AAC5C,MAAA,IAAI,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,QAAA,OAAO,QAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,EAAQ,EAAG,IAAI,CAAA;AACrC,MAAA,IAAI,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxB,QAAA,OAAO,QAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,QAAA,EAAyB;AAC5C,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,UAAA,CAAW,QAAQ,CAAA,EAAG;AACtC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,IAAI,UAAA;AAEJ,MAAA,IAAI,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,EAAG;AAE5B,QAAA,OAAO,SAAA,CAAQ,KAAA,CAAM,SAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAC9C,QAAA,UAAA,GAAa,UAAQ,QAAQ,CAAA;AAG7B,QAAA,IAAI,UAAA,IAAc,OAAO,UAAA,KAAe,QAAA,IAAY,aAAa,UAAA,EAAY;AAC3E,UAAA,UAAA,GAAc,UAAA,CAAmB,OAAA;AAAA,QACnC;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,OAAA,GAAU,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AAC9C,QAAA,UAAA,GAAa,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,MACjC;AAGA,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,QAAQ,UAAU,CAAA;AACpD,MAAA,IAAA,CAAK,UAAA,GAAa,QAAA;AAAA,IACpB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,2BAAA,EAA8B,QAAQ,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAA,GAA4B;AAClC,IAAA,MAAM,YAAgC,EAAC;AAGvC,IAAA,IAAI,OAAA,CAAQ,IAAI,gBAAA,EAAkB;AAChC,MAAA,SAAA,CAAU,QAAA,GAAW,EAAE,GAAG,IAAA,CAAK,OAAO,QAAA,EAAU,GAAA,EAAK,OAAA,CAAQ,GAAA,CAAI,gBAAA,EAAiB;AAAA,IACpF;AACA,IAAA,IAAI,OAAA,CAAQ,IAAI,oBAAA,EAAsB;AACpC,MAAA,SAAA,CAAU,QAAA,GAAW;AAAA,QACnB,GAAI,SAAA,CAAU,QAAA,IAAY,IAAA,CAAK,MAAA,CAAO,QAAA;AAAA,QACtC,OAAA,EAAS,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,sBAAsB,EAAE;AAAA,OACxD;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,CAAQ,IAAI,iBAAA,EAAmB;AACjC,MAAA,SAAA,CAAU,MAAA,GAAS;AAAA,QACjB,GAAG,KAAK,MAAA,CAAO,MAAA;AAAA,QACf,MAAA,EAAQ,QAAQ,GAAA,CAAI;AAAA,OACtB;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,IAAI,qBAAA,EAAuB;AACrC,MAAA,SAAA,CAAU,MAAA,GAAS;AAAA,QACjB,GAAI,SAAA,CAAU,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,MAAA;AAAA,QACpC,iBAAA,EAAmB,OAAA,CAAQ,GAAA,CAAI,qBAAA,KAA0B;AAAA,OAC3D;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,CAAQ,IAAI,iBAAA,EAAmB;AACjC,MAAA,SAAA,CAAU,MAAA,GAAS;AAAA,QACjB,GAAG,KAAK,MAAA,CAAO,MAAA;AAAA,QACf,MAAA,EAAQ,QAAQ,GAAA,CAAI;AAAA,OACtB;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,IAAI,gBAAA,EAAkB;AAChC,MAAA,SAAA,CAAU,MAAA,GAAS;AAAA,QACjB,GAAI,SAAA,CAAU,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,MAAA;AAAA,QACpC,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,gBAAA,KAAqB;AAAA,OAC1C;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,CAAQ,IAAI,aAAA,EAAe;AAC7B,MAAA,SAAA,CAAU,OAAA,GAAU;AAAA,QAClB,GAAG,KAAK,MAAA,CAAO,OAAA;AAAA,QACf,KAAA,EAAO,QAAQ,GAAA,CAAI;AAAA,OACrB;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,IAAI,YAAA,EAAc;AAC5B,MAAA,SAAA,CAAU,OAAA,GAAU;AAAA,QAClB,GAAI,SAAA,CAAU,OAAA,IAAW,IAAA,CAAK,MAAA,CAAO,OAAA;AAAA,QACrC,IAAA,EAAM,QAAQ,GAAA,CAAI;AAAA,OACpB;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,QAAQ,SAAS,CAAA;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,CAAe,KAAUA,KAAAA,EAAmB;AAClD,IAAA,OAAOA,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,OAAA,EAAS,GAAA,KAAQ,OAAA,GAAU,GAAG,CAAA,EAAG,GAAG,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,CAAe,GAAA,EAAUA,KAAAA,EAAc,KAAA,EAAkB;AAC/D,IAAA,MAAM,IAAA,GAAOA,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC3B,IAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AAGzB,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,KAAQ,eAAe,GAAA,KAAQ,aAAA,IAAiB,GAAA,KAAQ,WAAW,CAAA,EAAG;AAC3F,MAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,IAC1E;AAEA,IAAA,IAAI,OAAA,KAAY,WAAA,IAAe,OAAA,KAAY,aAAA,IAAiB,YAAY,WAAA,EAAa;AACnF,MAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,IACrE;AAEA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,SAAS,GAAA,KAAQ;AAE3C,MAAA,IAAI,GAAA,KAAQ,WAAA,IAAe,GAAA,KAAQ,aAAA,IAAiB,QAAQ,WAAA,EAAa;AACvE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,GAAG,CAAA,CAAE,CAAA;AAAA,MAC/C;AAEA,MAAA,IAAI,EAAE,OAAO,OAAA,CAAA,EAAU;AAErB,QAAA,MAAA,CAAO,cAAA,CAAe,SAAS,GAAA,EAAK;AAAA,UAClC,KAAA,kBAAO,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,UACzB,QAAA,EAAU,IAAA;AAAA,UACV,UAAA,EAAY,IAAA;AAAA,UACZ,YAAA,EAAc;AAAA,SACf,CAAA;AAAA,MACH;AACA,MAAA,OAAO,QAAQ,GAAG,CAAA;AAAA,IACpB,GAAG,GAAG,CAAA;AAGN,IAAA,MAAA,CAAO,cAAA,CAAe,QAAQ,OAAA,EAAS;AAAA,MACrC,KAAA;AAAA,MACA,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY,IAAA;AAAA,MACZ,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAA,CAAU,QAAa,MAAA,EAAkB;AAC/C,IAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA,EAAU;AACzC,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,EAAE,GAAG,MAAA,EAAO;AAE3B,IAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AAExB,MAAA,IAAI,GAAA,KAAQ,WAAA,IAAe,GAAA,KAAQ,aAAA,IAAiB,QAAQ,WAAA,EAAa;AACvE,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,GAAG,CAAA,EAAG;AAC9B,QAAA,IAAI,MAAA,CAAO,GAAG,CAAA,IAAK,OAAO,OAAO,GAAG,CAAA,KAAM,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAC,CAAA,EAAG;AACjF,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,GAAG,CAAA,IAAK,EAAC,EAAG,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,QAC7D,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAoC;AAClC,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAAmD;AACjD,IAAA,MAAM,SAAmB,EAAC;AAG1B,IAAA,IAAI;AACF,MAAA,IAAI,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA;AAAA,IAClC,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,CAAO,KAAK,sBAAsB,CAAA;AAAA,IACpC;AAGA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,OAAA,IAAW,CAAA,EAAG;AACrC,MAAA,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAAA,IACjD;AAGA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,QAAA,IAAY,CAAA,EAAG;AACtC,MAAA,MAAA,CAAO,KAAK,4BAA4B,CAAA;AAAA,IAC1C;AAGA,IAAA,MAAM,eAAe,CAAC,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,SAAS,QAAQ,CAAA;AACtE,IAAA,IAAI,CAAC,YAAA,CAAa,QAAA,CAAS,KAAK,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAG;AACrD,MAAA,MAAA,CAAO,KAAK,CAAA,uBAAA,EAA0B,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,IACnE;AAGA,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,EAAS,MAAA,EAAQ,QAAQ,SAAS,CAAA;AACxD,IAAA,IAAI,CAAC,YAAA,CAAa,QAAA,CAAS,KAAK,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,EAAG;AACrD,MAAA,MAAA,CAAO,KAAK,CAAA,uBAAA,EAA0B,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,IACnE;AAGA,IAAA,MAAM,WAAA,GAAc,CAAC,OAAA,EAAS,MAAA,EAAQ,QAAQ,OAAO,CAAA;AACrD,IAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AACpD,MAAA,MAAA,CAAO,KAAK,CAAA,mBAAA,EAAsB,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AAAA,IAC/D;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,OAAO,MAAA,KAAW,CAAA;AAAA,MAC3B;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CAAa,QAAA,EAAkB,MAAA,GAAwB,MAAA,EAAuB;AAClF,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,OAAO,aAAa,CAAA;AAEhD,IAAA,IAAI,OAAA;AAEJ,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,OAAA,GAAU,oBAAoB,IAAA,CAAK,SAAA,CAAU,KAAK,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,IACpE,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,IAC/C;AAEA,IAAA,MAAM,SAAA,CAAU,QAAA,EAAU,OAAA,EAAS,OAAO,CAAA;AAAA,EAC5C;AACF,CAAA;AAGA,IAAI,cAAA;AAKG,SAAS,SAAA,GAA2B;AACzC,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,cAAA,GAAiB,IAAI,aAAA,EAAc;AAAA,EACrC;AACA,EAAA,OAAO,cAAA;AACT;;;AC1bO,IAAM,6BAAA,GAA+D;AAAA,EAC1E,SAAS,EAAC;AAAA,EACV,SAAS,EAAC;AAAA,EACV,QAAA,EAAU;AAAA,IACR,MAAA,EAAQ,QAAA;AAAA,IACR,iBAAA,EAAmB,KAAA;AAAA,IACnB,WAAA,EAAa,KAAA;AAAA,IACb,MAAA,EAAQ,KAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,YAAA,EAAc;AAAA;AAAA,IAEZ;AAAA,MACE,QAAA,EAAU,CAAC,OAAA,EAAS,WAAW,CAAA;AAAA,MAC/B,MAAA,EAAQ,OAAA;AAAA,MACR,UAAA,EAAY,KAAA;AAAA,MACZ,mBAAA,EAAqB,IAAA;AAAA,MACrB,WAAA,EAAa,IAAA;AAAA,MACb,eAAA,EAAiB,CAAC,cAAA,EAAgB,kBAAkB;AAAA,KACtD;AAAA;AAAA,IAEA;AAAA,MACE,QAAA,EAAU,CAAC,KAAK,CAAA;AAAA,MAChB,MAAA,EAAQ,OAAA;AAAA,MACR,UAAA,EAAY,KAAA;AAAA,MACZ,mBAAA,EAAqB,IAAA;AAAA,MACrB,WAAA,EAAa,KAAA;AAAA,MACb,eAAA,EAAiB,CAAC,mBAAA,EAAqB,mBAAmB;AAAA,KAC5D;AAAA;AAAA,IAEA;AAAA,MACE,QAAA,EAAU,CAAC,aAAa,CAAA;AAAA,MACxB,MAAA,EAAQ,OAAA;AAAA,MACR,UAAA,EAAY,KAAA;AAAA,MACZ,mBAAA,EAAqB,IAAA;AAAA,MACrB,WAAA,EAAa;AAAA,KACf;AAAA;AAAA,IAEA;AAAA,MACE,QAAA,EAAU,CAAC,UAAU,CAAA;AAAA,MACrB,MAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAY,IAAA;AAAA,MACZ,mBAAA,EAAqB,KAAA;AAAA,MACrB,WAAA,EAAa;AAAA,KACf;AAAA;AAAA,IAEA;AAAA,MACE,UAAU,CAAC,SAAA,EAAW,UAAA,EAAY,sBAAA,EAAwB,UAAU,MAAM,CAAA;AAAA,MAC1E,MAAA,EAAQ,OAAA;AAAA,MACR,UAAA,EAAY,KAAA;AAAA,MACZ,mBAAA,EAAqB,KAAA;AAAA,MACrB,WAAA,EAAa;AAAA,KACf;AAAA;AAAA,IAEA;AAAA,MACE,QAAA,EAAU,CAAC,YAAA,EAAc,UAAA,EAAY,SAAS,SAAS,CAAA;AAAA,MACvD,MAAA,EAAQ,OAAA;AAAA,MACR,UAAA,EAAY,KAAA;AAAA,MACZ,mBAAA,EAAqB,IAAA;AAAA,MACrB,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR,sBAAA,EAAwB,IAAA;AAAA,IACxB,qBAAA,EAAuB,IAAA;AAAA,IACvB,sBAAA,EAAwB;AAAA,GAC1B;AAAA,EACA,QAAA,EAAU;AAAA,IACR,WAAA,EAAa,CAAA;AAAA,IACb,OAAA,EAAS,GAAA;AAAA,IACT,OAAA,EAAS,CAAA;AAAA,IACT,oBAAA,EAAsB,EAAA;AAAA,IACtB,eAAA,EAAiB;AAAA,GACnB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,cAAc,EAAC;AAAA,IACf,eAAA,EAAiB,CAAC,SAAS;AAAA;AAE/B,CAAA;AAKO,IAAM,iBAAA,GAAoB,CAAC,aAAA,EAAe,WAAA,EAAa,mBAAmB,eAAe,CAAA;;;AC9HzF,IAAM,eAAN,MAAmB;AAAA,EACxB,OAAe,KAAA,mBAAQ,IAAI,GAAA,EAAiC;AAAA;AAAA;AAAA;AAAA,EAK5D,OAAO,UAAA,CAAW,aAAA,GAAwB,OAAA,CAAQ,KAAI,EAAwB;AAC5E,IAAA,MAAM,QAAA,GAAW,aAAA;AACjB,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC5B,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AAAA,IAChC;AAEA,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,qBAAA,CAAsB,aAAa,CAAA;AAC3D,IAAA,MAAM,eAAe,IAAA,CAAK,YAAA,CAAa,6BAAA,EAA+B,UAAA,IAAc,EAAE,CAAA;AAEtF,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAA,EAAU,YAAY,CAAA;AACrC,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAA,GAAmB;AACxB,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,sBAAsB,aAAA,EAAmD;AACtF,IAAA,KAAA,MAAW,YAAY,iBAAA,EAAmB;AACxC,MAAA,MAAM,UAAA,GAAaC,IAAAA,CAAK,aAAA,EAAe,QAAQ,CAAA;AAC/C,MAAA,IAAIC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,QAAA,IAAI;AACF,UAAA,OAAO,IAAA,CAAK,eAAe,UAAU,CAAA;AAAA,QACvC,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,oCAAA,EAAuC,UAAU,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AACxE,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,eAAe,UAAA,EAAyC;AACrE,IAAA,MAAM,OAAA,GAAUC,YAAAA,CAAa,UAAA,EAAY,OAAO,CAAA;AAEhD,IAAA,IAAI,UAAA,CAAW,QAAA,CAAS,OAAO,CAAA,EAAG;AAChC,MAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC3B;AAEA,IAAA,IAAI,UAAA,CAAW,QAAA,CAAS,KAAK,CAAA,EAAG;AAG9B,MAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,IACjE;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,UAAU,CAAA,CAAE,CAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,YAAA,CACb,aAAA,EACA,UAAA,EACqB;AACrB,IAAA,MAAM,SAA8B,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAA;AAG5E,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,MAAA,CAAO,OAAA,GAAU,CAAC,GAAI,MAAA,CAAO,WAAW,EAAC,EAAI,GAAG,UAAA,CAAW,OAAO,CAAA;AAAA,IACpE;AAEA,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,MAAA,CAAO,OAAA,GAAU,CAAC,GAAI,MAAA,CAAO,WAAW,EAAC,EAAI,GAAG,UAAA,CAAW,OAAO,CAAA;AAAA,IACpE;AAEA,IAAA,IAAI,WAAW,QAAA,EAAU;AACvB,MAAA,MAAA,CAAO,WAAW,EAAE,GAAG,OAAO,QAAA,EAAU,GAAG,WAAW,QAAA,EAAS;AAAA,IACjE;AAEA,IAAA,IAAI,WAAW,QAAA,EAAU;AACvB,MAAA,MAAA,CAAO,WAAW,EAAE,GAAG,OAAO,QAAA,EAAU,GAAG,WAAW,QAAA,EAAS;AAAA,IACjE;AAEA,IAAA,IAAI,WAAW,QAAA,EAAU;AACvB,MAAA,MAAA,CAAO,WAAW,EAAE,GAAG,OAAO,QAAA,EAAU,GAAG,WAAW,QAAA,EAAS;AAAA,IACjE;AAEA,IAAA,IAAI,WAAW,QAAA,EAAU;AACvB,MAAA,MAAA,CAAO,WAAW,EAAE,GAAG,OAAO,QAAA,EAAU,GAAG,WAAW,QAAA,EAAS;AAG/D,MAAA,IAAI,UAAA,CAAW,SAAS,YAAA,EAAc;AACpC,QAAA,MAAA,CAAO,QAAA,CAAU,YAAA,GAAe,UAAA,CAAW,QAAA,CAAS,YAAA;AAAA,MACtD;AACA,MAAA,IAAI,UAAA,CAAW,SAAS,eAAA,EAAiB;AACvC,QAAA,MAAA,CAAO,QAAA,CAAU,eAAA,GAAkB,UAAA,CAAW,QAAA,CAAS,eAAA;AAAA,MACzD;AAAA,IACF;AAGA,IAAA,IAAI,WAAW,YAAA,EAAc;AAC3B,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,YAAA,IAAgB,EAAC;AAC7C,MAAA,MAAM,YAAY,UAAA,CAAW,YAAA;AAG7B,MAAA,MAAM,uBAAuB,YAAA,CAAa,MAAA;AAAA,QACxC,CAAC,WAAA,KACC,CAAC,SAAA,CAAU,IAAA;AAAA,UAAK,CAAC,QAAA;AAAA;AAAA,YAEf,SAAS,QAAA,CAAS,IAAA;AAAA,cAAK,CAAC,WAAA,KACtB,WAAA,CAAY,QAAA,CAAS,IAAA;AAAA,gBACnB,CAAC,mBACC,WAAA,KAAgB,cAAA,IACf,YAAY,QAAA,CAAS,GAAG,KACvB,IAAA,CAAK,eAAA,CAAgB,aAAa,cAAc,CAAA,IACjD,eAAe,QAAA,CAAS,GAAG,KAC1B,IAAA,CAAK,eAAA,CAAgB,gBAAgB,WAAW;AAAA;AACtD;AACF;AAAA;AACF,OACJ;AAGA,MAAA,MAAA,CAAO,YAAA,GAAe,CAAC,GAAG,oBAAA,EAAsB,GAAG,SAAS,CAAA;AAAA,IAC9D;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAA,CACL,WAAA,EACA,MAAA,EAOA;AAEA,IAAA,IAAI,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,CAAC,OAAA,KAAY,KAAK,cAAA,CAAe,WAAA,EAAa,OAAO,CAAC,CAAA,EAAG;AAChF,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,KAAA;AAAA,QACd,MAAA,EAAQ,MAAA,CAAO,QAAA,EAAU,MAAA,IAAU,QAAA;AAAA,QACnC,mBAAA,EAAqB,KAAA;AAAA,QACrB,UAAA,EAAY,KAAA;AAAA,QACZ,WAAA,EAAa;AAAA,OACf;AAAA,IACF;AAGA,IAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC/C,MAAA,MAAM,UAAA,GAAa,OAAO,OAAA,CAAQ,IAAA;AAAA,QAAK,CAAC,OAAA,KACtC,IAAA,CAAK,cAAA,CAAe,aAAa,OAAO;AAAA,OAC1C;AACA,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,OAAO;AAAA,UACL,YAAA,EAAc,KAAA;AAAA,UACd,MAAA,EAAQ,MAAA,CAAO,QAAA,EAAU,MAAA,IAAU,QAAA;AAAA,UACnC,mBAAA,EAAqB,KAAA;AAAA,UACrB,UAAA,EAAY,KAAA;AAAA,UACZ,WAAA,EAAa;AAAA,SACf;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,YAAA,GAAe,OAAO,YAAA,EAAc,IAAA;AAAA,MAAK,CAAC,IAAA,KAC5C,IAAA,CAAK,eAAA,EAAiB,IAAA;AAAA,QAAK,CAAC,cAAA,KAC1B,IAAA,CAAK,cAAA,CAAe,aAAa,cAAc;AAAA;AACjD,KACF;AAGA,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,YAAA,GAAe,OAAO,YAAA,EAAc,IAAA;AAAA,QAAK,CAAC,IAAA,KACxC,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAC,OAAA,KAAY,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,OAAO,CAAC;AAAA,OAC3E;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,IAAA;AAAA,QACd,MAAA,EAAQ,YAAA,CAAa,MAAA,IAAU,MAAA,CAAO,UAAU,MAAA,IAAU,QAAA;AAAA,QAC1D,mBAAA,EAAqB,aAAa,mBAAA,IAAuB,KAAA;AAAA,QACzD,UAAA,EAAY,aAAa,UAAA,IAAc,KAAA;AAAA,QACvC,WAAA,EAAa,aAAa,WAAA,IAAe;AAAA,OAC3C;AAAA,IACF;AAGA,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,IAAA;AAAA,MACd,MAAA,EAAQ,MAAA,CAAO,QAAA,EAAU,MAAA,IAAU,QAAA;AAAA,MACnC,mBAAA,EAAqB,KAAA;AAAA,MACrB,UAAA,EAAY,KAAA;AAAA,MACZ,WAAA,EAAa;AAAA,KACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,cAAA,CAAe,WAAA,EAAqB,OAAA,EAA0B;AAC3E,IAAA,MAAM,YAAA,GAAe,QAAQ,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAA,CAAE,OAAA,CAAQ,OAAO,GAAG,CAAA;AACpE,IAAA,MAAM,QAAQ,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,YAAY,KAAK,GAAG,CAAA;AACjD,IAAA,OAAO,KAAA,CAAM,KAAK,WAAW,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,eAAA,CAAgB,QAAA,EAAkB,QAAA,EAA2B;AAE1E,IAAA,OACE,KAAK,cAAA,CAAe,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,EAAG,QAAQ,CAAA,IAC1D,IAAA,CAAK,eAAe,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,GAAG,GAAG,QAAQ,CAAA;AAAA,EAE9D;AACF,CAAA;;;ACvOO,IAAM,eAAN,MAAmB;AAAA,EACxB,OAAe,kBAAoC,EAAC;AAAA,EACpD,OAAe,WAAA,GAAc;AAAA,IAC3B,QAAA,EAAU,CAAA;AAAA,IACV,OAAA,EAAS,CAAA;AAAA,IACT,YAAA,EAAc,CAAA;AAAA,IACd,QAAA,EAAU,CAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,mBAAA,CAAoB,WAAA,EAAqB,KAAA,EAAoB;AAClE,IAAA,IAAI,MAAA,GAAmC,OAAA;AAEvC,IAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,CAAS,KAAK,KAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG;AACxE,MAAA,MAAA,GAAS,WAAA;AACT,MAAA,IAAA,CAAK,WAAA,CAAY,QAAA,EAAA;AAAA,IACnB,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,gCAAgC,CAAA,EAAG;AACnE,MAAA,MAAA,GAAS,eAAA;AACT,MAAA,IAAA,CAAK,WAAA,CAAY,YAAA,EAAA;AAAA,IACnB,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,SAAS,KAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG;AACnF,MAAA,MAAA,GAAS,SAAA;AACT,MAAA,IAAA,CAAK,WAAA,CAAY,OAAA,EAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,WAAA,CAAY,KAAA,EAAA;AAAA,IACnB;AAEA,IAAA,IAAA,CAAK,gBAAgB,IAAA,CAAK;AAAA,MACxB,IAAA,EAAM,WAAA;AAAA,MACN,MAAA;AAAA,MACA,eAAe,KAAA,CAAM;AAAA,KACtB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,oBAAA,GAA6B;AAClC,IAAA,IAAA,CAAK,WAAA,CAAY,QAAA,EAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,kBAAA,GAKL;AACA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,QAAA,EAAU,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,WAAW,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MACxF,OAAA,EAAS,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,SAAS,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MACrF,YAAA,EAAc,IAAA,CAAK,eAAA,CAChB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,eAAe,CAAA,CAC1C,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,MACpB,KAAA,EAAO,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,OAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI;AAAA,KACnF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAA,GAAiD;AACtD,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,WAAA,EAAY;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,eAAA,GAA0B;AAC/B,IAAA,OAAO,KAAK,eAAA,CAAgB,MAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,KAAA,GAAc;AACnB,IAAA,IAAA,CAAK,kBAAkB,EAAC;AACxB,IAAA,IAAA,CAAK,WAAA,GAAc;AAAA,MACjB,QAAA,EAAU,CAAA;AAAA,MACV,OAAA,EAAS,CAAA;AAAA,MACT,YAAA,EAAc,CAAA;AAAA,MACd,QAAA,EAAU,CAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,qBAAA,GAA0C;AAC/C,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,eAAe,CAAA;AAAA,EACjC;AACF,CAAA;AChFO,IAAM,MAAA,GAAN,MAAM,OAAA,CAAO;AAAA,EACV,OAAA;AAAA,EACA,OAAA;AAAA,EAOR,OAAe,SAAA,mBAAY,IAAI,GAAA,EAAoB;AAAA,EAE3C,WAAA,CAAY,OAAA,EAAiB,OAAA,GAAkC,EAAC,EAAG;AACzE,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAEf,IAAA,MAAM,MAAA,GAAS,SAAA,EAAU,CAAE,SAAA,EAAU;AAErC,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,OAAA,EAAS,QAAQ,OAAA,IAAW,OAAA;AAAA,MAC5B,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,MAAA,CAAO,OAAA,CAAQ,KAAA;AAAA,MACvC,IAAA,EAAM,OAAA,CAAQ,IAAA,IAAQ,MAAA,CAAO,OAAA,CAAQ,IAAA;AAAA,MACrC,OAAA,EAAS,QAAQ,OAAA,KAAY,MAAA,GAAY,QAAQ,OAAA,GAAU,CAAC,OAAO,MAAA,CAAO,MAAA;AAAA,MAC1E,IAAA,EAAM,QAAQ,IAAA,IAAQ;AAAA,KACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAAA,CAAU,OAAA,EAAiB,OAAA,EAA0C;AAC1E,IAAA,MAAM,GAAA,GAAM,GAAG,OAAO,CAAA,CAAA,EAAI,KAAK,SAAA,CAAU,OAAA,IAAW,EAAE,CAAC,CAAA,CAAA;AAEvD,IAAA,IAAI,CAAC,OAAA,CAAO,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,EAAG;AAC9B,MAAA,OAAA,CAAO,UAAU,GAAA,CAAI,GAAA,EAAK,IAAI,OAAA,CAAO,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,OAAA,CAAO,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,CAAM,cAAsB,OAAA,EAA0C;AACpE,IAAA,MAAM,WAAA,GAAc,CAAA,EAAG,IAAA,CAAK,OAAO,IAAI,YAAY,CAAA,CAAA;AACnD,IAAA,OAAO,OAAA,CAAO,UAAU,WAAA,EAAa,EAAE,GAAG,IAAA,CAAK,OAAA,EAAS,GAAG,OAAA,EAAS,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,CAAM,OAAA,EAAiB,KAAA,EAAe,IAAA,EAAkB;AACtD,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,EAAE,GAAI,KAAA,IAAS,EAAE,KAAA,EAAM,EAAI,GAAI,IAAA,IAAQ,EAAE,IAAA,IAAS,CAAA;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,CAAK,SAAiB,IAAA,EAAkB;AACtC,IAAA,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,EAAE,MAAM,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,CAAK,SAAiB,IAAA,EAAkB;AACtC,IAAA,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,EAAE,MAAM,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,CAAM,SAAiB,IAAA,EAAkB;AACvC,IAAA,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,EAAE,MAAM,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,GAAA,CAAI,KAAA,EAAiB,OAAA,EAAiB,KAAA,GAAuC,EAAC,EAAS;AACrF,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAkB;AAAA,MACtB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,MAClC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,GAAG;AAAA,KACL;AAEA,IAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAU,KAAA,EAA0B;AAC1C,IAAA,MAAM,MAAA,GAAmC;AAAA,MACvC,KAAA,EAAO,CAAA;AAAA,MACP,IAAA,EAAM,CAAA;AAAA,MACN,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,OAAO,OAAO,KAAK,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAS,KAAA,EAAuB;AAEtC,IAAA,IAAI,IAAA,CAAK,QAAQ,OAAA,EAAS;AACxB,MAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,IAC3B;AAGA,IAAA,IAAI,IAAA,CAAK,QAAQ,IAAA,EAAM;AACrB,MAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,KAAA,EAAuB;AAC5C,IAAA,MAAM,MAAA,GAAS,SAAA,EAAU,CAAE,SAAA,EAAU;AACrC,IAAA,MAAM,SAAA,GAAY,OAAO,MAAA,CAAO,KAAA;AAEhC,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,aAAA;AAEJ,IAAA,IAAI,SAAA,EAAW;AAEb,MAAA,MAAM,MAAA,GAAS;AAAA,QACb,KAAA,EAAO,CAAC,IAAA,KAAiB,CAAA,QAAA,EAAa,IAAI,CAAA,OAAA,CAAA;AAAA;AAAA,QAC1C,IAAA,EAAM,CAAC,IAAA,KAAiB,CAAA,QAAA,EAAa,IAAI,CAAA,OAAA,CAAA;AAAA;AAAA,QACzC,IAAA,EAAM,CAAC,IAAA,KAAiB,CAAA,QAAA,EAAa,IAAI,CAAA,OAAA,CAAA;AAAA;AAAA,QACzC,KAAA,EAAO,CAAC,IAAA,KAAiB,CAAA,QAAA,EAAa,IAAI,CAAA,OAAA;AAAA;AAAA,OAC5C;AACA,MAAA,OAAA,GAAU,MAAA,CAAO,MAAM,KAAK,CAAA;AAC5B,MAAA,aAAA,GAAgB,KAAA,CAAM,KAAA,KAAU,OAAA,GAAU,KAAA,GAAQ,KAAA,CAAM,KAAA;AAAA,IAC1D,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,CAAC,IAAA,KAAiB,IAAA;AAC5B,MAAA,aAAA,GAAgB,KAAA,CAAM,KAAA,KAAU,OAAA,GAAU,KAAA,GAAQ,KAAA,CAAM,KAAA;AAAA,IAC1D;AAEA,IAAA,MAAM,YAAY,IAAI,IAAA,CAAK,KAAA,CAAM,SAAS,EAAE,kBAAA,EAAmB;AAC/D,IAAA,MAAM,WAAW,KAAA,CAAM,KAAA,CAAM,WAAA,EAAY,CAAE,OAAO,CAAC,CAAA;AACnD,IAAA,MAAM,aAAa,KAAA,CAAM,OAAA,GAAU,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAA,CAAA,CAAA,GAAM,EAAA;AAE1D,IAAA,IAAI,UAAA,GAAa,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,OAAA,CAAQ,QAAQ,CAAC,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAA,CAAA;AAGjF,IAAA,IAAI,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,KAAA,KAAU,OAAA,EAAS;AACzC,MAAA,UAAA,IAAc;AAAA,EAAK,KAAK,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA;AAAA,IACxD;AAGA,IAAA,IAAI,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO;AACpC,MAAA,UAAA,IAAc;AAAA,EAAK,KAAA,CAAM,MAAM,KAAK,CAAA,CAAA;AAAA,IACtC;AAEA,IAAA,OAAA,CAAQ,aAAa,EAAE,UAAU,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,KAAA,EAAuB;AACzC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM;AAExB,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAWC,OAAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAG1C,MAAA,MAAM,GAAA,GAAM,QAAQ,QAAQ,CAAA;AAC5B,MAAA,IAAI,CAACF,UAAAA,CAAW,GAAG,CAAA,EAAG;AACpB,QAAA,SAAA,CAAU,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,MACpC;AAGA,MAAA,IAAA,CAAK,cAAc,QAAQ,CAAA;AAG3B,MAAA,IAAI,OAAA;AAEJ,MAAA,IAAI,IAAA,CAAK,QAAQ,IAAA,EAAM;AACrB,QAAA,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,IAAA;AAAA,MACpC,CAAA,MAAO;AACL,QAAA,MAAM,YAAY,KAAA,CAAM,SAAA;AACxB,QAAA,MAAM,QAAQ,KAAA,CAAM,KAAA,CAAM,WAAA,EAAY,CAAE,OAAO,CAAC,CAAA;AAChD,QAAA,MAAM,UAAU,KAAA,CAAM,OAAA,GAAU,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAA,CAAA,CAAA,GAAM,EAAA;AAEvD,QAAA,OAAA,GAAU,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,KAAK,IAAI,OAAO,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAE3D,QAAA,IAAI,MAAM,IAAA,EAAM;AACd,UAAA,OAAA,IAAW,CAAA,SAAA,EAAY,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA;AAAA,QACnD;AAEA,QAAA,IAAI,MAAM,KAAA,EAAO;AACf,UAAA,OAAA,IAAW,CAAA,UAAA,EAAa,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA,CAAA;AAC3C,UAAA,IAAI,KAAA,CAAM,MAAM,KAAA,EAAO;AACrB,YAAA,OAAA,IAAW;AAAA,EAAK,KAAA,CAAM,MAAM,KAAK,CAAA,CAAA;AAAA,UACnC;AAAA,QACF;AAEA,QAAA,OAAA,IAAW,IAAA;AAAA,MACb;AAGA,MAAA,aAAA,CAAc,UAAU,OAAA,EAAS,EAAE,MAAM,GAAA,EAAK,QAAA,EAAU,SAAS,CAAA;AAAA,IACnE,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,KAAA,CAAM,gCAAgC,KAAK,CAAA;AACnD,MAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,QAAA,EAAwB;AAC5C,IAAA,IAAI,CAACA,UAAAA,CAAW,QAAQ,CAAA,EAAG;AAE3B,IAAA,MAAM,MAAA,GAAS,SAAA,EAAU,CAAE,SAAA,EAAU;AACrC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,QAAQ,OAAO,CAAA;AACrD,IAAA,MAAM,QAAA,GAAW,OAAO,OAAA,CAAQ,QAAA;AAEhC,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,SAAS,QAAQ,CAAA;AAE/B,MAAA,IAAI,KAAA,CAAM,OAAO,OAAA,EAAS;AACxB,QAAA;AAAA,MACF;AAGA,MAAA,KAAA,IAAS,CAAA,GAAI,QAAA,GAAW,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AACrC,QAAA,MAAM,OAAA,GAAU,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAChC,QAAA,MAAM,OAAA,GAAU,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,CAAA,CAAA;AAEpC,QAAA,IAAIA,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,UAAA,IAAI,CAAA,KAAM,WAAW,CAAA,EAAG;AAEtB,YAAA,SAAA,CAAQ,IAAI,CAAA,CAAE,UAAA,CAAW,OAAO,CAAA;AAAA,UAClC,CAAA,MAAO;AAEL,YAAA,SAAA,CAAQ,IAAI,CAAA,CAAE,UAAA,CAAW,OAAA,EAAS,OAAO,CAAA;AAAA,UAC3C;AAAA,QACF;AAAA,MACF;AAGA,MAAA,SAAA,CAAQ,IAAI,CAAA,CAAE,UAAA,CAAW,QAAA,EAAU,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAI,CAAA;AAAA,IACpD,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,8BAA8B,KAAK,CAAA;AAAA,IAClD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAU,OAAA,EAAyB;AACzC,IAAA,MAAM,KAAA,GAAgC;AAAA,MACpC,CAAA,EAAG,CAAA;AAAA,MACH,EAAA,EAAI,IAAA;AAAA,MACJ,IAAI,IAAA,GAAO,IAAA;AAAA,MACX,EAAA,EAAI,OAAO,IAAA,GAAO;AAAA,KACpB;AAEA,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,+BAA+B,CAAA;AAC3D,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAK,IAAA,GAAO,IAAA;AAAA,IACrB;AAEA,IAAA,MAAM,GAAG,IAAA,EAAM,IAAI,CAAA,GAAI,KAAA;AACvB,IAAA,MAAM,aAAa,KAAA,CAAM,IAAA,EAAM,WAAA,EAAY,IAAK,EAAE,CAAA,IAAK,CAAA;AAEvD,IAAA,OAAO,KAAK,KAAA,CAAM,UAAA,CAAW,IAAA,IAAQ,GAAG,IAAI,UAAU,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,KAAA,EAAuB;AAC9B,IAAA,IAAA,CAAK,QAAQ,KAAA,GAAQ,KAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAAqB;AACnB,IAAA,OAAO,KAAK,OAAA,CAAQ,KAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,OAAA,EAAwB;AACjC,IAAA,IAAA,CAAK,QAAQ,OAAA,GAAU,OAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,QAAA,EAAoC;AAC1C,IAAA,IAAA,CAAK,QAAQ,IAAA,GAAO,QAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,EAA2B;AAC/B,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,IAAA,IAAA,CAAK,KAAA,CAAM,CAAA,eAAA,EAAkB,KAAK,CAAA,CAAE,CAAA;AAEpC,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAC9B,MAAA,IAAA,CAAK,KAAA,CAAM,CAAA,gBAAA,EAAmB,KAAK,CAAA,EAAA,EAAK,QAAQ,CAAA,GAAA,CAAK,CAAA;AAAA,IACvD,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,cAAA,GAAuB;AAC5B,IAAA,OAAA,CAAO,UAAU,KAAA,EAAM;AAAA,EACzB;AACF,CAAA;AAGsB,MAAA,CAAO,SAAA,CAAU,KAAK;;;AClVrC,IAAM,2BAAN,MAA+B;AAAA,EACpC,OAAe,MAAA,GAAS,MAAA,CAAO,SAAA,CAAU,cAAc,CAAA;AAAA;AAAA,EAGvD,OAAe,kBAAA,mBAA4C,IAAI,GAAA,CAAI;AAAA;AAAA,IAEjE,CAAC,WAAA,EAAa,CAAC,eAAe,CAAC,CAAA;AAAA,IAC/B,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,SAAA,EAAW,CAAC,UAAU,CAAC,CAAA;AAAA,IACxB,CAAC,aAAA,EAAe,CAAC,cAAc,CAAC,CAAA;AAAA,IAChC,CAAC,cAAA,EAAgB,CAAC,eAAe,CAAC,CAAA;AAAA,IAClC,CAAC,mBAAA,EAAqB,CAAC,6BAAA,EAA+B,oBAAoB,CAAC,CAAA;AAAA,IAC3E,CAAC,cAAA,EAAgB,CAAC,kBAAkB,CAAC,CAAA;AAAA,IACrC,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA;AAAA,IACnB,CAAC,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA;AAAA;AAAA,IAGnB,CAAC,aAAA,EAAe,CAAC,eAAA,EAAiB,mBAAmB,CAAC,CAAA;AAAA,IACtD,CAAC,KAAA,EAAO,CAAC,eAAe,CAAC,CAAA;AAAA,IACzB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,YAAA,EAAc,CAAC,MAAM,CAAC,CAAA;AAAA,IACvB,CAAC,UAAA,EAAY,CAAC,SAAS,CAAC,CAAA;AAAA,IACxB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,UAAA,EAAY,CAAC,eAAe,CAAC,CAAA;AAAA,IAC9B,CAAC,eAAA,EAAiB,CAAC,eAAe,CAAC,CAAA;AAAA,IACnC,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,UAAA,EAAY,CAAC,SAAS,CAAC,CAAA;AAAA,IACxB,CAAC,OAAA,EAAS,CAAC,gBAAA,EAAkB,cAAA,EAAgB,YAAY,CAAC,CAAA;AAAA;AAAA,IAG1D,CAAC,aAAA,EAAe,CAAC,aAAa,CAAC,CAAA;AAAA,IAC/B,CAAC,UAAA,EAAY,CAAC,aAAa,CAAC,CAAA;AAAA,IAC5B,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,aAAA,EAAe,CAAC,mBAAmB,CAAC,CAAA;AAAA,IACrC,CAAC,UAAA,EAAY,CAAC,gBAAgB,CAAC,CAAA;AAAA,IAC/B,CAAC,YAAA,EAAc,CAAC,UAAU,CAAC,CAAA;AAAA;AAAA,IAG3B,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,aAAA,EAAe,CAAC,aAAa,CAAC,CAAA;AAAA,IAC/B,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,KAAA,EAAO,CAAC,WAAW,CAAC,CAAA;AAAA;AAAA,IAGrB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,YAAA,EAAc,CAAC,kBAAkB,CAAC,CAAA;AAAA,IACnC,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,UAAA,EAAY,CAAC,oBAAoB,CAAC,CAAA;AAAA,IACnC,CAAC,WAAA,EAAa,CAAC,oBAAoB,CAAC,CAAA;AAAA,IACpC,CAAC,YAAA,EAAc,CAAC,gCAAgC,CAAC,CAAA;AAAA,IACjD,CAAC,YAAA,EAAc,CAAC,2BAA2B,CAAC,CAAA;AAAA,IAC5C,CAAC,YAAA,EAAc,CAAC,4BAA4B,CAAC,CAAA;AAAA,IAC7C,CAAC,SAAA,EAAW,CAAC,cAAc,CAAC,CAAA;AAAA,IAC5B,CAAC,qBAAA,EAAuB,CAAC,+BAA+B,CAAC,CAAA;AAAA;AAAA,IAGzD,CAAC,SAAA,EAAW,CAAC,oBAAA,EAAsB,SAAS,CAAC,CAAA;AAAA,IAC7C,CAAC,iBAAA,EAAmB,CAAC,6BAA6B,CAAC,CAAA;AAAA,IACnD,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,mBAAA,EAAqB,CAAC,uBAAuB,CAAC,CAAA;AAAA,IAC/C,CAAC,OAAA,EAAS,CAAC,qBAAA,EAAuB,eAAe,CAAC,CAAA;AAAA,IAClD,CAAC,oBAAA,EAAsB,CAAC,wBAAwB,CAAC,CAAA;AAAA,IACjD,CAAC,KAAA,EAAO,CAAC,uBAAuB,CAAC,CAAA;AAAA;AAAA,IAGjC,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,QAAA,EAAU,CAAC,gBAAgB,CAAC,CAAA;AAAA,IAC7B,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,IAAA,EAAM,CAAC,IAAI,CAAC,CAAA;AAAA,IACb,CAAC,OAAA,EAAS,CAAC,QAAQ,CAAC,CAAA;AAAA,IACpB,CAAC,QAAA,EAAU,CAAC,SAAS,CAAC,CAAA;AAAA,IACtB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA;AAAA,IAGvB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,SAAA,EAAW,CAAC,QAAQ,CAAC,CAAA;AAAA,IACtB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,OAAA,EAAS,CAAC,YAAY,CAAC,CAAA;AAAA,IACxB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,SAAA,EAAW,CAAC,OAAA,EAAS,YAAY,CAAC,CAAA;AAAA,IACnC,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA;AAAA,IAG7B,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,UAAA,EAAY,CAAC,QAAQ,CAAC,CAAA;AAAA,IACvB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA;AAAA,IAGnB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,QAAA,EAAU,CAAC,kCAAkC,CAAC,CAAA;AAAA,IAC/C,CAAC,mBAAA,EAAqB,CAAC,kCAAA,EAAoC,2BAA2B,CAAC,CAAA;AAAA;AAAA,IAGvF,CAAC,YAAA,EAAc,CAAC,aAAa,CAAC,CAAA;AAAA,IAC9B,CAAC,aAAA,EAAe,CAAC,aAAa,CAAC,CAAA;AAAA,IAC/B,CAAC,aAAA,EAAe,CAAC,cAAc,CAAC,CAAA;AAAA,IAChC,CAAC,eAAA,EAAiB,CAAC,gBAAgB,CAAC,CAAA;AAAA;AAAA,IAGpC,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,WAAA,EAAa,CAAC,SAAS,CAAC,CAAA;AAAA,IACzB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,QAAA,EAAU,CAAC,cAAc,CAAC,CAAA;AAAA,IAC3B,CAAC,MAAA,EAAQ,CAAC,cAAc,CAAC,CAAA;AAAA,IACzB,CAAC,MAAA,EAAQ,CAAC,YAAY,CAAC,CAAA;AAAA;AAAA,IAGvB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA;AAAA,IAGrB,CAAC,mBAAA,EAAqB,CAAC,mBAAmB,CAAC,CAAA;AAAA,IAC3C,CAAC,kBAAA,EAAoB,CAAC,mBAAmB,CAAC,CAAA;AAAA,IAC1C,CAAC,SAAA,EAAW,CAAC,gBAAgB,CAAC,CAAA;AAAA,IAC9B,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,WAAA,EAAa,CAAC,MAAM,CAAC,CAAA;AAAA,IACtB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA;AAAA,IAGrB,CAAC,aAAA,EAAe,CAAC,gBAAA,EAAkB,0BAA0B,CAAC,CAAA;AAAA,IAC9D,CAAC,QAAA,EAAU,CAAC,gBAAgB,CAAC,CAAA;AAAA,IAC7B,CAAC,UAAA,EAAY,CAAC,kBAAkB,CAAC,CAAA;AAAA,IACjC,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA;AAAA,IAGnB,CAAC,WAAA,EAAa,CAAC,kBAAA,EAAoB,iBAAiB,CAAC,CAAA;AAAA,IACrD,CAAC,YAAA,EAAc,CAAC,kBAAkB,CAAC,CAAA;AAAA,IACnC,CAAC,SAAA,EAAW,CAAC,cAAc,CAAC,CAAA;AAAA,IAC5B,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA;AAAA,IAGvB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,OAAA,EAAS,CAAC,iBAAiB,CAAC,CAAA;AAAA,IAC7B,CAAC,MAAA,EAAQ,CAAC,IAAI,CAAC,CAAA;AAAA;AAAA,IAGf,CAAC,cAAA,EAAgB,CAAC,cAAc,CAAC,CAAA;AAAA,IACjC,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA;AAAA,IAGzB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,UAAA,EAAY,CAAC,WAAW,CAAC,CAAA;AAAA,IAC1B,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,aAAA,EAAe,CAAC,+BAA+B,CAAC,CAAA;AAAA,IACjD,CAAC,cAAA,EAAgB,CAAC,+BAA+B,CAAC,CAAA;AAAA;AAAA,IAGlD,CAAC,YAAA,EAAc,CAAC,eAAe,CAAC,CAAA;AAAA,IAChC,CAAC,MAAA,EAAQ,CAAC,SAAS,CAAC,CAAA;AAAA,IACpB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA;AAAA,IAGjB,CAAC,OAAA,EAAS,CAAC,UAAU,CAAC,CAAA;AAAA,IACtB,CAAC,SAAA,EAAW,CAAC,UAAU,CAAC,CAAA;AAAA,IACxB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,IAAA,EAAM,CAAC,IAAI,CAAC,CAAA;AAAA,IACb,CAAC,MAAA,EAAQ,CAAC,IAAI,CAAC,CAAA;AAAA,IACf,CAAC,QAAA,EAAU,CAAC,WAAW,CAAC,CAAA;AAAA,IACxB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,MAAA,EAAQ,CAAC,YAAY,CAAC,CAAA;AAAA,IACvB,CAAC,YAAA,EAAc,CAAC,oBAAoB,CAAC,CAAA;AAAA;AAAA,IAGrC,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,UAAA,EAAY,CAAC,WAAW,CAAC,CAAA;AAAA,IAC1B,CAAC,WAAA,EAAa,CAAC,IAAI,CAAC,CAAA;AAAA,IACpB,CAAC,IAAA,EAAM,CAAC,IAAI,CAAC,CAAA;AAAA,IACb,CAAC,QAAA,EAAU,CAAC,aAAa,CAAC,CAAA;AAAA,IAC1B,CAAC,MAAA,EAAQ,CAAC,QAAQ,CAAC,CAAA;AAAA,IACnB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,SAAA,EAAW,CAAC,oBAAoB,CAAC,CAAA;AAAA;AAAA,IAGlC,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA;AAAA,IACnB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,UAAA,EAAY,CAAC,QAAQ,CAAC,CAAA;AAAA,IACvB,CAAC,UAAA,EAAY,CAAC,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAAA,IAC/B,CAAC,UAAA,EAAY,CAAC,eAAe,CAAC,CAAA;AAAA,IAC9B,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,aAAA,EAAe,CAAC,wBAAwB,CAAC,CAAA;AAAA,IAC1C,CAAC,gBAAA,EAAkB,CAAC,uBAAuB,CAAC,CAAA;AAAA;AAAA,IAG5C,CAAC,YAAA,EAAc,CAAC,kBAAkB,CAAC,CAAA;AAAA,IACnC,CAAC,cAAA,EAAgB,CAAC,kBAAkB,CAAC,CAAA;AAAA,IACrC,CAAC,MAAA,EAAQ,CAAC,kBAAkB,CAAC,CAAA;AAAA,IAC7B,CAAC,OAAA,EAAS,CAAC,UAAU,CAAC,CAAA;AAAA,IACtB,CAAC,SAAA,EAAW,CAAC,UAAU,CAAC,CAAA;AAAA,IACxB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,QAAA,EAAU,CAAC,eAAe,CAAC,CAAA;AAAA;AAAA,IAG5B,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,UAAA,EAAY,CAAC,QAAQ,CAAC,CAAA;AAAA,IACvB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AAAA,IACrB,CAAC,IAAA,EAAM,CAAC,IAAI,CAAC,CAAA;AAAA,IACb,CAAC,MAAA,EAAQ,CAAC,IAAI,CAAC,CAAA;AAAA,IACf,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AAAA;AAAA,IAGrB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,UAAA,EAAY,CAAC,QAAQ,CAAC,CAAA;AAAA,IACvB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA;AAAA,IACnB,CAAC,OAAA,EAAS,CAAC,UAAU,CAAC,CAAA;AAAA,IACtB,CAAC,SAAA,EAAW,CAAC,UAAU,CAAC,CAAA;AAAA,IACxB,CAAC,KAAA,EAAO,CAAC,QAAQ,CAAC,CAAA;AAAA,IAClB,CAAC,OAAA,EAAS,CAAC,QAAQ,CAAC,CAAA;AAAA,IACpB,CAAC,MAAA,EAAQ,CAAC,QAAQ,CAAC,CAAA;AAAA,IACnB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA;AAAA,IAGrB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,UAAA,EAAY,CAAC,QAAQ,CAAC,CAAA;AAAA,IACvB,CAAC,QAAA,EAAU,CAAC,SAAS,CAAC,CAAA;AAAA,IACtB,CAAC,MAAA,EAAQ,CAAC,SAAS,CAAC,CAAA;AAAA,IACpB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,SAAA,EAAW,CAAC,WAAW,CAAC,CAAA;AAAA,IACzB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA;AAAA,IAGrB,CAAC,aAAA,EAAe,CAAC,aAAa,CAAC,CAAA;AAAA,IAC/B,CAAC,SAAA,EAAW,CAAC,aAAa,CAAC,CAAA;AAAA,IAC3B,CAAC,cAAA,EAAgB,CAAC,OAAO,CAAC,CAAA;AAAA,IAC1B,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,WAAA,EAAa,CAAC,OAAO,CAAC,CAAA;AAAA;AAAA,IAGvB,CAAC,SAAA,EAAW,CAAC,wBAAwB,CAAC,CAAA;AAAA,IACtC,CAAC,aAAA,EAAe,CAAC,wBAAwB,CAAC,CAAA;AAAA,IAC1C,CAAC,gBAAA,EAAkB,CAAC,wBAAwB,CAAC,CAAA;AAAA,IAC7C,CAAC,KAAA,EAAO,CAAC,wBAAwB,CAAC,CAAA;AAAA;AAAA,IAGlC,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,QAAA,EAAU,CAAC,WAAW,CAAC,CAAA;AAAA,IACxB,CAAC,aAAA,EAAe,CAAC,2BAA2B,CAAC,CAAA;AAAA,IAC7C,CAAC,YAAA,EAAc,CAAC,2BAA2B,CAAC,CAAA;AAAA,IAC5C,CAAC,YAAA,EAAc,CAAC,IAAI,CAAC,CAAA;AAAA,IACrB,CAAC,IAAA,EAAM,CAAC,IAAI,CAAC,CAAA;AAAA;AAAA,IAGb,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,OAAA,EAAS,CAAC,SAAS,CAAC,CAAA;AAAA,IACrB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,QAAA,EAAU,CAAC,YAAY,CAAC,CAAA;AAAA,IACzB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,eAAA,EAAiB,CAAC,eAAe,CAAC,CAAA;AAAA,IACnC,CAAC,cAAA,EAAgB,CAAC,cAAc,CAAC,CAAA;AAAA;AAAA,IAGjC,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,iBAAA,EAAmB,CAAC,iBAAiB,CAAC,CAAA;AAAA,IACvC,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,aAAA,EAAe,CAAC,aAAa,CAAC,CAAA;AAAA;AAAA,IAG/B,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AAAA,IACrB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,UAAA,EAAY,CAAC,mCAAmC,CAAC,CAAA;AAAA,IAClD,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AAAA,IACrB,CAAC,OAAA,EAAS,CAAC,UAAU,CAAC,CAAA;AAAA,IACtB,CAAC,SAAA,EAAW,CAAC,UAAU,CAAC,CAAA;AAAA,IACxB,CAAC,QAAA,EAAU,CAAC,eAAe,CAAC,CAAA;AAAA,IAC5B,CAAC,eAAA,EAAiB,CAAC,eAAe,CAAC,CAAA;AAAA;AAAA,IAGnC,CAAC,QAAA,EAAU,CAAC,gBAAgB,CAAC,CAAA;AAAA,IAC7B,CAAC,eAAA,EAAiB,CAAC,gBAAgB,CAAC,CAAA;AAAA,IACpC,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,OAAA,EAAS,CAAC,aAAa,CAAC,CAAA;AAAA,IACzB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,aAAA,EAAe,CAAC,uBAAuB,CAAC,CAAA;AAAA,IACzC,CAAC,gBAAA,EAAkB,CAAC,uBAAuB,CAAC,CAAA;AAAA;AAAA,IAG5C,CAAC,MAAA,EAAQ,CAAC,OAAO,CAAC,CAAA;AAAA,IAClB,CAAC,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AAAA,IACrB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,OAAA,EAAS,CAAC,KAAK,CAAC,CAAA;AAAA,IACjB,CAAC,SAAA,EAAW,CAAC,eAAe,CAAC,CAAA;AAAA,IAC7B,CAAC,OAAA,EAAS,CAAC,QAAQ,CAAC,CAAA;AAAA,IACpB,CAAC,SAAA,EAAW,CAAC,QAAQ,CAAC,CAAA;AAAA,IACtB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,WAAA,EAAa,CAAC,MAAM,CAAC,CAAA;AAAA,IACtB,CAAC,YAAA,EAAc,CAAC,MAAM,CAAC,CAAA;AAAA;AAAA,IAGvB,CAAC,QAAA,EAAU,CAAC,WAAW,CAAC,CAAA;AAAA,IACxB,CAAC,KAAA,EAAO,CAAC,yBAAyB,CAAC,CAAA;AAAA,IACnC,CAAC,YAAA,EAAc,CAAC,yBAAyB,CAAC,CAAA;AAAA,IAC1C,CAAC,SAAA,EAAW,CAAC,yBAAyB,CAAC,CAAA;AAAA,IACvC,CAAC,MAAA,EAAQ,CAAC,WAAW,CAAC,CAAA;AAAA,IACtB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,UAAA,EAAY,CAAC,+BAA+B,CAAC,CAAA;AAAA,IAC9C,CAAC,gBAAA,EAAkB,CAAC,eAAA,EAAiB,iBAAiB,CAAC,CAAA;AAAA,IACvD,CAAC,WAAA,EAAa,CAAC,iBAAiB,CAAC,CAAA;AAAA,IACjC,CAAC,QAAA,EAAU,CAAC,uBAAuB,CAAC,CAAA;AAAA,IACpC,CAAC,WAAA,EAAa,CAAC,qBAAqB,CAAC,CAAA;AAAA,IACrC,CAAC,SAAA,EAAW,CAAC,iBAAiB,CAAC,CAAA;AAAA,IAC/B,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,OAAA,EAAS,CAAC,YAAY,CAAC,CAAA;AAAA,IACxB,CAAC,OAAA,EAAS,CAAC,cAAc,CAAC,CAAA;AAAA;AAAA,IAG1B,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,QAAA,EAAU,CAAC,cAAA,EAAgB,eAAe,CAAC,CAAA;AAAA,IAC5C,CAAC,SAAA,EAAW,CAAC,aAAa,CAAC,CAAA;AAAA,IAC3B,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,SAAA,EAAW,CAAC,sBAAsB,CAAC,CAAA;AAAA,IACpC,CAAC,YAAA,EAAc,CAAC,aAAa,CAAC,CAAA;AAAA,IAC9B,CAAC,SAAA,EAAW,CAAC,kBAAkB,CAAC,CAAA;AAAA,IAChC,CAAC,SAAA,EAAW,CAAC,wBAAwB,CAAC,CAAA;AAAA,IACtC,CAAC,eAAA,EAAiB,CAAC,wBAAwB,CAAC,CAAA;AAAA,IAC5C,CAAC,QAAA,EAAU,CAAC,uBAAuB,CAAC,CAAA;AAAA,IACpC,CAAC,UAAA,EAAY,CAAC,mBAAmB,CAAC,CAAA;AAAA;AAAA,IAGlC,CAAC,eAAA,EAAiB,CAAC,SAAS,CAAC,CAAA;AAAA,IAC7B,CAAC,cAAA,EAAgB,CAAC,OAAO,CAAC,CAAA;AAAA,IAC1B,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,gBAAA,EAAkB,CAAC,QAAQ,CAAC,CAAA;AAAA,IAC7B,CAAC,QAAA,EAAU,CAAC,kBAAkB,CAAC,CAAA;AAAA,IAC/B,CAAC,WAAA,EAAa,CAAC,uBAAuB,CAAC,CAAA;AAAA,IACvC,CAAC,MAAA,EAAQ,CAAC,OAAO,CAAC,CAAA;AAAA,IAClB,CAAC,MAAA,EAAQ,CAAC,eAAe,CAAC,CAAA;AAAA,IAC1B,CAAC,UAAA,EAAY,CAAC,YAAY,CAAC,CAAA;AAAA;AAAA,IAG3B,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,cAAA,EAAgB,CAAC,cAAc,CAAC,CAAA;AAAA,IACjC,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,eAAA,EAAiB,CAAC,eAAe,CAAC,CAAA;AAAA,IACnC,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,WAAA,EAAa,CAAC,kBAAkB,CAAC,CAAA;AAAA;AAAA,IAGlC,CAAC,UAAA,EAAY,CAAC,SAAS,CAAC,CAAA;AAAA,IACxB,CAAC,OAAA,EAAS,CAAC,SAAS,CAAC,CAAA;AAAA,IACrB,CAAC,cAAA,EAAgB,CAAC,SAAS,CAAC,CAAA;AAAA,IAC5B,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,MAAA,EAAQ,CAAC,SAAS,CAAC,CAAA;AAAA,IACpB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,KAAA,EAAO,CAAC,QAAQ,CAAC,CAAA;AAAA;AAAA,IAGlB,CAAC,MAAA,EAAQ,CAAC,aAAa,CAAC,CAAA;AAAA,IACxB,CAAC,SAAA,EAAW,CAAC,eAAe,CAAC,CAAA;AAAA,IAC7B,CAAC,QAAA,EAAU,CAAC,WAAW,CAAC,CAAA;AAAA,IACxB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,aAAA,EAAe,CAAC,aAAa,CAAC,CAAA;AAAA,IAC/B,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA;AAAA,IAG3B,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,aAAA,EAAe,CAAC,oBAAoB,CAAC,CAAA;AAAA,IACtC,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,QAAA,EAAU,CAAC,oBAAoB,CAAC,CAAA;AAAA;AAAA,IAGjC,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,QAAA,EAAU,CAAC,WAAW,CAAC,CAAA;AAAA,IACxB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,cAAA,EAAgB,CAAC,cAAc,CAAC,CAAA;AAAA,IACjC,CAAC,KAAA,EAAO,CAAC,cAAc,CAAC,CAAA;AAAA,IACxB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,oBAAA,EAAsB,CAAC,oBAAoB,CAAC,CAAA;AAAA,IAC7C,CAAC,cAAA,EAAgB,CAAC,oBAAoB,CAAC,CAAA;AAAA,IACvC,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA;AAAA,IAGrB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,UAAA,EAAY,CAAC,gBAAgB,CAAC,CAAA;AAAA,IAC/B,CAAC,SAAA,EAAW,CAAC,YAAY,CAAC,CAAA;AAAA,IAC1B,CAAC,KAAA,EAAO,CAAC,qBAAqB,CAAC,CAAA;AAAA,IAC/B,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,UAAA,EAAY,CAAC,cAAc,CAAC,CAAA;AAAA,IAC7B,CAAC,WAAA,EAAa,CAAC,gCAAgC,CAAC,CAAA;AAAA,IAChD,CAAC,iBAAA,EAAmB,CAAC,iBAAiB,CAAC,CAAA;AAAA;AAAA,IAGvC,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,MAAA,EAAQ,CAAC,KAAK,CAAC,CAAA;AAAA;AAAA,IAChB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,MAAA,EAAQ,CAAC,iBAAiB,CAAC,CAAA;AAAA;AAAA,IAG5B,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,KAAA,EAAO,CAAC,YAAY,CAAC,CAAA;AAAA,IACtB,CAAC,QAAA,EAAU,CAAC,YAAY,CAAC,CAAA;AAAA,IACzB,CAAC,iBAAA,EAAmB,CAAC,kBAAkB,CAAC,CAAA;AAAA,IACxC,CAAC,kBAAA,EAAoB,CAAC,mCAAmC,CAAC,CAAA;AAAA,IAC1D,CAAC,gBAAA,EAAkB,CAAC,gBAAgB,CAAC,CAAA;AAAA,IACrC,CAAC,QAAA,EAAU,CAAC,cAAc,CAAC,CAAA;AAAA,IAC3B,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,KAAA,EAAO,CAAC,kBAAkB,CAAC,CAAA;AAAA;AAAA,IAG5B,CAAC,SAAA,EAAW,CAAC,MAAM,CAAC,CAAA;AAAA,IACpB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,OAAA,EAAS,CAAC,cAAc,CAAC,CAAA;AAAA,IAC1B,CAAC,UAAA,EAAY,CAAC,QAAQ,CAAC,CAAA;AAAA,IACvB,CAAC,WAAA,EAAa,CAAC,kBAAkB,CAAC,CAAA;AAAA,IAClC,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,SAAA,EAAW,CAAC,OAAO,CAAC,CAAA;AAAA,IACrB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,QAAA,EAAU,CAAC,SAAA,EAAW,gBAAgB,CAAC,CAAA;AAAA,IACxC,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,aAAA,EAAe,CAAC,IAAI,CAAC,CAAA;AAAA;AAAA;AAAA,IAGtB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,cAAA,EAAgB,CAAC,2BAA2B,CAAC,CAAA;AAAA,IAC9C,CAAC,QAAA,EAAU,CAAC,gBAAgB,CAAC,CAAA;AAAA,IAC7B,CAAC,OAAA,EAAS,CAAC,mBAAmB,CAAC,CAAA;AAAA,IAC/B,CAAC,UAAA,EAAY,CAAC,eAAe,CAAC,CAAA;AAAA,IAC9B,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA;AAAA,IAGzB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,aAAA,EAAe,CAAC,aAAa,CAAC,CAAA;AAAA,IAC/B,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,IAAA,EAAM,CAAC,IAAI,CAAC,CAAA;AAAA,IACb,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,IAAA,EAAM,CAAC,IAAI,CAAC,CAAA;AAAA,IACb,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,WAAA,EAAa,CAAC,QAAQ,CAAC,CAAA;AAAA;AAAA,IAGxB,CAAC,WAAA,EAAa,CAAC,SAAS,CAAC,CAAA;AAAA,IACzB,CAAC,SAAA,EAAW,CAAC,MAAM,CAAC,CAAA;AAAA,IACpB,CAAC,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA;AAAA,IACnB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,YAAA,EAAc,CAAC,YAAY,CAAC,CAAA;AAAA,IAC7B,CAAC,IAAA,EAAM,CAAC,YAAY,CAAC,CAAA;AAAA,IACrB,CAAC,IAAA,EAAM,CAAC,YAAY,CAAC,CAAA;AAAA,IACrB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,KAAA,EAAO,CAAC,QAAQ,CAAC,CAAA;AAAA,IAClB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,MAAA,EAAQ,CAAC,aAAa,CAAC,CAAA;AAAA,IACxB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,KAAA,EAAO,CAAC,YAAA,EAAc,WAAW,CAAC,CAAA;AAAA,IACnC,CAAC,KAAA,EAAO,CAAC,SAAA,EAAW,QAAQ,CAAC,CAAA;AAAA,IAC7B,CAAC,OAAA,EAAS,CAAC,MAAM,CAAC,CAAA;AAAA,IAClB,CAAC,MAAA,EAAQ,CAAC,SAAS,CAAC,CAAA;AAAA,IACpB,CAAC,KAAA,EAAO,CAAC,UAAU,CAAC,CAAA;AAAA,IACpB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA;AAAA,IAGjB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,SAAA,EAAW,CAAC,SAAS,CAAC,CAAA;AAAA,IACvB,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA;AAAA,IAG3B,CAAC,WAAA,EAAa,CAAC,WAAW,CAAC,CAAA;AAAA,IAC3B,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC,CAAA;AAAA,IACzB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,cAAA,EAAgB,CAAC,cAAc,CAAC,CAAA;AAAA,IACjC,CAAC,QAAA,EAAU,CAAC,QAAQ,CAAC,CAAA;AAAA,IACrB,CAAC,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AAAA,IACnB,CAAC,iBAAA,EAAmB,CAAC,iBAAiB,CAAC,CAAA;AAAA,IACvC,CAAC,MAAA,EAAQ,CAAC,MAAM,CAAC,CAAA;AAAA,IACjB,CAAC,KAAA,EAAO,CAAC,KAAK,CAAC,CAAA;AAAA,IACf,CAAC,UAAA,EAAY,CAAC,UAAU,CAAC;AAAA,GAC1B,CAAA;AAAA;AAAA;AAAA;AAAA,EAKD,OAAO,qBAAA,CAAsB,WAAA,EAAqB,OAAA,EAA8B;AAC9E,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,WAAW,CAAA;AAE3D,IAAA,IAAI,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACzC,MAAA,OAAA,CAAQ,IAAIJ,MAAAA,CAAM,MAAA,CAAO,CAAA,sBAAA,EAAU,WAAW,sBAAO,CAAC,CAAA;AACtD,MAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,qDAAA,CAAa,CAAC,CAAA;AACrC,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,UAAA,KAAe;AAClC,QAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAQ,UAAU,EAAE,CAAC,CAAA;AAAA,MAC9C,CAAC,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,MAAA,CAAO,CAAA,sBAAA,EAAU,WAAW,gDAAuB,CAAC,CAAA;AACtE,MAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,kIAAA,CAAyB,CAAC,CAAA;AAAA,IACnD;AAGA,IAAA,YAAA,CAAa,mBAAA,CAAoB,WAAA,EAAa,IAAI,KAAA,CAAM,yBAAyB,CAAC,CAAA;AAGlF,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,mBAAA,EAAqB,EAAE,WAAA,EAAa,SAAS,CAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,kBAAA,CAAmB,WAAA,EAAqB,OAAA,EAA8B;AAC3E,IAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,MAAA,CAAO,CAAA,sBAAA,EAAU,WAAW,8CAAW,CAAC,CAAA;AAC1D,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,+CAAA,CAAY,CAAC,CAAA;AACpC,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,4DAAA,CAA2B,CAAC,CAAA;AACnD,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,8EAAA,CAAyB,CAAC,CAAA;AACjD,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,2DAAA,CAA0B,CAAC,CAAA;AAGlD,IAAA,YAAA,CAAa,mBAAA,CAAoB,WAAA,EAAa,IAAI,KAAA,CAAM,gCAAgC,CAAC,CAAA;AAEzF,IAAA,IAAA,CAAK,OAAO,KAAA,CAAM,sBAAA,EAAwB,EAAE,WAAA,EAAa,SAAS,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,kBAAA,CAAmB,WAAA,EAAqB,KAAA,EAAc,OAAA,EAA8B;AACzF,IAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,MAAA,CAAO,CAAA,kCAAA,EAAY,WAAW,8CAAW,CAAC,CAAA;AAC5D,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,wFAAA,CAAkB,CAAC,CAAA;AAG1C,IAAA,YAAA,CAAa,mBAAA,CAAoB,aAAa,KAAK,CAAA;AAEnD,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,eAAA,EAAiB,EAAE,aAAa,KAAA,EAAO,KAAA,CAAM,OAAA,EAAS,OAAA,EAAS,CAAA;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAAA,CACL,WAAA,EACA,KAAA,EACA,OAAA,EACM;AAEN,IAAA,YAAA,CAAa,oBAAA,EAAqB;AAGlC,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,0BAAA,EAA6B,WAAW,CAAA,CAAA,EAAI;AAAA,MAC5D,OAAO,KAAA,CAAM,OAAA;AAAA,MACb;AAAA,KACD,CAAA;AAGD,IAAA,IAAI,OAAA,EAAS,SAAA,KAAc,QAAA,IAAY,OAAA,EAAS,cAAc,gBAAA,EAAkB;AAC9E,MAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,MAAA,CAAO,CAAA,wCAAA,EAAa,WAAW,kCAAS,CAAC,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,kBAAA,CACL,WAAA,EACA,OAAA,EACA,YACA,KAAA,EACM;AAEN,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,cAAA,EAAiB,OAAO,IAAI,UAAU,CAAA,KAAA,EAAQ,WAAW,CAAA,CAAA,EAAI;AAAA,MAC7E,OAAO,KAAA,CAAM;AAAA,KACd,CAAA;AAGD,IAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,MAAA,IAAA,CAAK,kBAAA,CAAmB,aAAa,KAAK,CAAA;AAAA,IAC5C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,kBAAA,CAAmB,WAAA,EAAqB,KAAA,EAAoB;AACjE,IAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,CAAS,KAAK,KAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG;AACxE,MAAA,IAAA,CAAK,sBAAsB,WAAW,CAAA;AAAA,IACxC,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,SAAS,KAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG;AACnF,MAAA,IAAA,CAAK,kBAAA,CAAmB,aAAa,KAAK,CAAA;AAAA,IAC5C,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,gCAAgC,CAAA,EAAG;AACnE,MAAA,IAAA,CAAK,mBAAmB,WAAW,CAAA;AAAA,IACrC,CAAA,MAAO;AAEL,MAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,MAAA,CAAO,CAAA,kCAAA,EAAY,WAAW,8BAAU,CAAC,CAAA;AAC3D,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,sBAAA,EAAwB,EAAE,aAAa,KAAA,EAAO,KAAA,CAAM,SAAS,CAAA;AAAA,IACjF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,yBAAA,CACL,WAAA,EACA,KAAA,EACA,OAAA,EACM;AAEN,IAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,CAAS,KAAK,KAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG;AACxE,MAAA,IAAA,CAAK,qBAAA,CAAsB,aAAa,OAAO,CAAA;AAAA,IACjD,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,gCAAgC,CAAA,EAAG;AACnE,MAAA,IAAA,CAAK,kBAAA,CAAmB,aAAa,OAAO,CAAA;AAAA,IAC9C,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,SAAS,KAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG;AACnF,MAAA,IAAA,CAAK,kBAAA,CAAmB,WAAA,EAAa,KAAA,EAAO,OAAO,CAAA;AAAA,IACrD,CAAA,MAAO;AAEL,MAAA,YAAA,CAAa,mBAAA,CAAoB,aAAa,KAAK,CAAA;AACnD,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,yBAAA,EAA4B,WAAW,CAAA,CAAA,EAAI;AAAA,QAC3D,OAAO,KAAA,CAAM,OAAA;AAAA,QACb;AAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAAA,GAAmC;AACxC,IAAA,MAAM,YAAA,GAAe,aAAa,eAAA,EAAgB;AAClD,IAAA,IAAI,iBAAiB,CAAA,EAAG;AAExB,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,6BAAA,EAAU,YAAY,kCAAS,CAAC,CAAA;AAEvD,IAAA,MAAM,OAAA,GAAU,aAAa,kBAAA,EAAmB;AAEhD,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC/B,MAAA,OAAA,CAAQ,GAAA;AAAA,QACNA,MAAAA,CAAM,MAAA,CAAO,CAAA,mCAAA,EAAa,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE;AAAA,OACtF;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AACnC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACNA,MAAAA,CAAM,MAAA;AAAA,UACJ,CAAA,yCAAA,EAAc,QAAQ,YAAA,CAAa,MAAM,MAAM,OAAA,CAAQ,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAChF,OACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,OAAA,CAAQ,GAAA;AAAA,QACNA,MAAAA,CAAM,MAAA,CAAO,CAAA,6BAAA,EAAY,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE;AAAA,OACnF;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC5B,MAAA,OAAA,CAAQ,GAAA;AAAA,QACNA,MAAAA,CAAM,MAAA,CAAO,CAAA,6BAAA,EAAY,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,GAAA,EAAM,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE;AAAA,OAC/E;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,aAAa,aAAA,EAAc;AACzC,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,IAAA,CAAK,4CAAc,KAAA,CAAM,QAAQ,SAAI,CAAC,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAA,GAIL;AACA,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,aAAa,eAAA,EAAgB;AAAA,MAC3C,cAAA,EAAgB,aAAa,aAAA,EAAc;AAAA,MAC3C,eAAA,EAAiB,aAAa,kBAAA;AAAmB,KACnD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAA,GAAsB;AAC3B,IAAA,YAAA,CAAa,KAAA,EAAM;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,oBAAA,CAAqB,YAAA,EAAsB,WAAA,EAA6B;AAC7E,IAAA,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,YAAA,EAAc,WAAW,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,sBAAsB,WAAA,EAA+B;AAC1D,IAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,WAAW,KAAK,EAAC;AAAA,EACtD;AACF,CAAA;ACpyBA,IAAM,SAAA,GAAY,UAAU,IAAI,CAAA;AAezB,IAAM,iBAAN,MAAqB;AAAA,EAC1B,OAAwB,eAAA,GAAkB,GAAA;AAAA;AAAA,EAC1C,OAAwB,eAAA,GAAkB,KAAA;AAAA;AAAA;AAAA;AAAA,EAK1C,aAAa,YAAA,CACX,cAAA,EACA,OAAA,GAA+B,EAAC,EACH;AAC7B,IAAA,MAAM;AAAA,MACJ,UAAA,GAAa,KAAA;AAAA,MACb,UAAU,IAAA,CAAK,eAAA;AAAA,MACf,cAAc,IAAA,CAAK;AAAA,KACrB,GAAI,OAAA;AAEJ,IAAA,IAAI;AAEF,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,OAAO,CAAA;AAEtE,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,cAAA,EAAgB,aAAa,CAAA,IAAK,CAAA;AAExE,MAAA,OAAO;AAAA,QACL,QAAA;AAAA,QACA,cAAA;AAAA,QACA,aAAA;AAAA,QACA,YAAA,EAAc,CAAC,QAAA,IAAY,CAAC;AAAA,OAC9B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAKA,MAAAA,CAAM,MAAA,CAAO,4CAAkC,GAAG,KAAK,CAAA;AACpE,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,IAAA;AAAA;AAAA,QACV,cAAA;AAAA,QACA,aAAA,EAAe,cAAA;AAAA,QACf,YAAA,EAAc;AAAA,OAChB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAA0B,aAAA,EAAyC;AACxE,IAAA,IAAI,CAAC,cAAc,YAAA,EAAc;AAC/B,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,6BAAsB,CAAC,CAAA;AAC9C,IAAA,OAAA,CAAQ,GAAA;AAAA,MACNA,MAAAA,CAAM,IAAA;AAAA,QACJ,CAAA,iBAAA,EAAoB,aAAA,CAAc,cAAc,CAAA,gBAAA,EAAc,cAAc,aAAa,CAAA;AAAA;AAC3F,KACF;AACA,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,yDAAyD,CAAC,CAAA;AACjF,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,gBAAgB,aAAA,EAAqD;AAChF,IAAA,IAAI,CAAC,cAAc,YAAA,EAAc;AAC/B,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAGF,MAAA,IAAA,CAAK,0BAA0B,aAAa,CAAA;AAG5C,MAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,MAAA,CAAO,oCAAoC,CAAC,CAAA;AAC9D,MAAA,OAAO,MAAM,KAAK,mBAAA,EAAoB;AAAA,IACxC,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,8BAA8B,GAAG,KAAK,CAAA;AAC9D,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,mBAAA,GAAwC;AACnD,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,2BAAoB,CAAC,CAAA;AAC5C,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,aAAA,EAAc;AACzB,MAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,KAAA,CAAM,0DAAqD,CAAC,CAAA;AAC9E,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,uBAAkB,GAAG,KAAK,CAAA;AAClD,MAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,yDAAyD,CAAC,CAAA;AACjF,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAqB,gBAAA,CAAiB,WAAA,EAAqB,OAAA,EAAkC;AAC3F,IAAA,MAAM,OAAA,GAAU,YAAY,WAAW,CAAA,QAAA,CAAA;AAEvC,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,IAAA,CAAK,kBAAA,CAAmB,SAAS,OAAO,CAAA;AACjE,MAAA,OAAO,OAAO,IAAA,EAAK;AAAA,IACrB,SAAS,KAAA,EAAO;AAEd,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,IAAA,CAAK,kBAAA;AAAA,UAC5B,YAAY,WAAW,CAAA,QAAA,CAAA;AAAA,UACvB;AAAA,SACF;AACA,QAAA,OAAO,OAAO,IAAA,EAAK;AAAA,MACrB,SAAS,aAAA,EAAe;AACtB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,KAAK,CAAA,CAAE,CAAA;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,aAAqB,aAAA,GAA+B;AAElD,IAAA,MAAM,QAAA,GAAW;AAAA,MACf,2BAAA;AAAA,MACA,mBAAA;AAAA,MACA,wBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,OAAO,EAAE,CAAC,CAAA;AAC/C,QAAA,MAAM,SAAA,CAAU,OAAA,EAAS,EAAE,OAAA,EAAS,KAAO,CAAA;AAC3C,QAAA;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAKA,MAAAA,CAAM,MAAA,CAAO,CAAA,gBAAA,EAAmB,OAAO,EAAE,CAAC,CAAA;AAAA,MAEzD;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,aAAqB,kBAAA,CACnB,OAAA,EACA,OAAA,EAC6C;AAC7C,IAAA,OAAO,IAAI,OAAA,CAAQ,CAACM,QAAAA,EAAS,MAAA,KAAW;AACtC,MAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,EAAS,EAAE,SAAQ,EAAG,CAAC,KAAA,EAAO,MAAA,EAAQ,MAAA,KAAW;AAClE,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAA,CAAO,KAAK,CAAA;AAAA,QACd,CAAA,MAAO;AACL,UAAAA,QAAAA,CAAQ,EAAE,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAAA,QAC5B;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,QAAA,KAAA,CAAM,IAAA,EAAK;AACX,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,OAAO,IAAI,CAAC,CAAA;AAAA,MAC1D,GAAG,OAAO,CAAA;AAEV,MAAA,KAAA,CAAM,EAAA,CAAG,QAAQ,MAAM;AACrB,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,eAAA,CAAgB,CAAA,EAAW,CAAA,EAAmB;AAC3D,IAAA,MAAM,MAAA,GAAS,EAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,CAAE,OAAA,CAAQ,YAAY,EAAE,CAAA;AACzD,IAAA,MAAM,MAAA,GAAS,EAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,CAAE,OAAA,CAAQ,YAAY,EAAE,CAAA;AAEzD,IAAA,MAAM,SAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,MAAM,CAAA;AAC3C,IAAA,MAAM,SAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,MAAM,CAAA;AAE3C,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,OAAO,MAAM,CAAA;AAEvD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,SAAA,EAAW,CAAA,EAAA,EAAK;AAClC,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AAC3B,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAC,CAAA,IAAK,CAAA;AAE3B,MAAA,IAAI,KAAA,GAAQ,OAAO,OAAO,EAAA;AAC1B,MAAA,IAAI,KAAA,GAAQ,OAAO,OAAO,CAAA;AAAA,IAC5B;AAEA,IAAA,OAAO,CAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,IAAA,GAAgB;AACrB,IAAA,OAAO,CAAC,EACN,OAAA,CAAQ,GAAA,CAAI,MACZ,OAAA,CAAQ,GAAA,CAAI,sBAAA,IACZ,OAAA,CAAQ,IAAI,YAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,MAAA,IACZ,QAAQ,GAAA,CAAI,cAAA,CAAA;AAAA,EAEhB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,qBAAA,GAAiC;AACtC,IAAA,MAAM,SAAA,GAAY,QAAQ,GAAA,CAAI,sBAAA;AAC9B,IAAA,IAAI,SAAA,KAAc,MAAA,IAAU,SAAA,KAAc,GAAA,EAAK;AAC7C,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IAAI,IAAA,CAAK,MAAK,EAAG;AACf,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;ACpPO,IAAM,OAAA,GAAN,MAAM,QAAA,CAAQ;AAAA,EACF,KAAA;AAAA,EACA,cAAA;AAAA,EAET,WAAA,CAAY,OAAe,cAAA,EAA+B;AAChE,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,WAAW,aAAA,EAAgC;AACvD,IAAA,IAAI,CAAC,aAAA,IAAiB,aAAA,CAAc,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AACvD,MAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,IAClD;AAEA,IAAA,MAAM,OAAA,GAAU,cAAc,IAAA,EAAK;AACnC,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA;AAE1C,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,aAAa,CAAA,CAAE,CAAA;AAAA,IAC5D;AAEA,IAAA,OAAO,IAAI,QAAA,CAAQ,OAAA,EAAS,aAAa,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,cAAA,CACZ,KAAA,EACA,KAAA,EACA,OACA,UAAA,EACS;AACT,IAAA,IAAI,gBAAgB,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,KAAK,IAAI,KAAK,CAAA,CAAA;AAC9C,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,aAAA,IAAiB,IAAI,UAAU,CAAA,CAAA;AAAA,IACjC;AAEA,IAAA,OAAO,QAAA,CAAQ,WAAW,aAAa,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,kBAAkB,WAAA,EAAmC;AACjE,IAAA,OAAO,YAAA,CAAa,WAAW,WAAW,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAmB;AACxB,IAAA,OAAO,KAAK,cAAA,CAAe,KAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAmB;AACxB,IAAA,OAAO,KAAK,cAAA,CAAe,KAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAmB;AACxB,IAAA,OAAO,KAAK,cAAA,CAAe,KAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKO,aAAA,GAA0B;AAC/B,IAAA,OAAO,IAAA,CAAK,eAAe,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAKO,YAAA,GAAwB;AAC7B,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,UAAA,CAAW,MAAA,GAAS,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKO,UAAU,KAAA,EAAwB;AACvC,IAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKO,YAAY,KAAA,EAAyB;AAC1C,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKO,YAAY,KAAA,EAAyB;AAC1C,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,KAAA,EAAyB;AACrC,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,KAAM,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKO,UAAU,KAAA,EAA8B;AAC7C,IAAA,OAAO,KAAA,CAAM,SAAS,IAAI,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKO,kBAAkB,KAAA,EAAqE;AAC5F,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,EAAG;AACtB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK,CAAA;AAChD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,SAAA,CAAU,MAAmC,UAAA,EAA8B;AAChF,IAAA,MAAM,cAAc,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,MAAM,UAAU,CAAA;AAC3D,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,KAAK,KAAK,CAAA,IAAA,EAAO,IAAI,CAAA,CAAE,CAAA;AAAA,IACxE;AACA,IAAA,OAAO,QAAA,CAAQ,WAAW,WAAW,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKO,MAAA,GAAiB;AACtB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,SAAS,IAAA,EAAuB;AAC5C,IAAA,OAAO,QAAA,CAAQ,WAAW,IAAI,CAAA;AAAA,EAChC;AACF,CAAA;AAOO,IAAM,YAAA,GAAN,MAAM,aAAA,CAAa;AAAA,EACP,KAAA;AAAA,EAET,YAAY,KAAA,EAAe;AACjC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,WAAW,WAAA,EAAmC;AAC1D,IAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AACnD,MAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,IACxD;AAEA,IAAA,MAAM,OAAA,GAAU,YAAY,IAAA,EAAK;AAGjC,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,WAAW,OAAO,CAAA;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,WAAW,CAAA,CAAE,CAAA;AAAA,IACzD;AAEA,IAAA,IAAI,CAAC,MAAA,CAAO,UAAA,CAAW,OAAO,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,WAAW,CAAA,CAAE,CAAA;AAAA,IACzD;AAEA,IAAA,OAAO,IAAI,cAAa,OAAO,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,SAAS,OAAA,EAA2B;AACzC,IAAA,OAAO,OAAO,SAAA,CAAU,OAAA,CAAQ,QAAA,EAAS,EAAG,KAAK,KAAK,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAiB,KAAA,EAA8B;AAEpD,IAAA,IAAI;AACF,MAAA,OAAO,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,KAAA,EAAO,MAAM,KAAK,CAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,aAAA,GAAgC;AACrC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAC/C,IAAA,OAAO,UAAA,GAAa,OAAA,CAAQ,UAAA,CAAW,UAAA,CAAW,OAAO,CAAA,GAAI,IAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAKO,aAAA,GAAgC;AAErC,IAAA,MAAM,MAAA,GAAS,KAAK,aAAA,EAAc;AAClC,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAGpB,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,EAAG;AAC9B,MAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,EAAS;AAC9B,MAAA,OAAO,OAAA,CAAQ,cAAA,CAAe,KAAA,GAAQ,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,IAC/C;AAGA,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,EAAG;AAC9B,MAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,EAAS;AAC9B,MAAA,MAAM,KAAA,GAAQ,OAAO,QAAA,EAAS;AAC9B,MAAA,OAAO,OAAA,CAAQ,cAAA,CAAe,KAAA,EAAO,KAAA,GAAQ,GAAG,CAAC,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OACE,CAAC,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IACxB,CAAC,IAAA,CAAK,KAAA,CAAM,SAAS,GAAG,CAAA,IACxB,CAAC,IAAA,CAAK,MAAM,QAAA,CAAS,GAAG,CAAA,IACxB,CAAC,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,KACxB,CAAC,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IACxB,CAAC,IAAA,CAAK,KAAA,CAAM,SAAS,GAAG,CAAA;AAAA,EAE5B;AAAA;AAAA;AAAA;AAAA,EAKO,MAAA,GAAiB;AACtB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,SAAS,IAAA,EAA4B;AACjD,IAAA,OAAO,aAAA,CAAa,WAAW,IAAI,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,KAAA,EAA8B;AAC1C,IAAA,OAAO,IAAA,CAAK,UAAU,KAAA,CAAM,KAAA;AAAA,EAC9B;AACF,CAAA;ACnTO,IAAM,aAAA,GAAN,MAAM,cAAA,CAAc;AAAA,EACR,KAAA;AAAA,EAET,YAAY,KAAA,EAAe;AACjC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,WAAW,UAAA,EAAmC;AAC1D,IAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AACjD,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAGA,IAAA,MAAM,UAAA,GAAaJ,aAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAA;AAEjD,IAAA,OAAO,IAAI,eAAc,UAAU,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,OAAA,GAAyB;AACrC,IAAA,OAAO,IAAI,cAAA,CAAc,OAAA,CAAQ,GAAA,EAAK,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,YAAY,OAAA,EAAgC;AACxD,IAAA,MAAM,QAAA,GAAW,cAAc,OAAO,CAAA;AACtC,IAAA,MAAM,SAAA,GAAYA,aAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AACvC,IAAA,OAAO,IAAI,eAAc,SAAS,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,gBAAA,GAA2B;AAChC,IAAA,OAAOA,aAAA,CAAK,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKO,QAAQ,QAAA,EAAmC;AAChD,IAAA,MAAM,SAASA,aAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,EAAO,GAAG,QAAQ,CAAA;AAChD,IAAA,OAAO,IAAI,eAAc,MAAM,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKO,SAAA,GAA2B;AAChC,IAAA,MAAM,MAAA,GAASA,aAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA;AACtC,IAAA,OAAO,IAAI,eAAc,MAAM,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAiB,KAAA,EAA+B;AACrD,IAAA,MAAM,eAAeA,aAAA,CAAK,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,KAAK,KAAK,CAAA;AAC1D,IAAA,OAAO,CAAC,aAAa,UAAA,CAAW,IAAI,KAAK,CAACA,aAAA,CAAK,WAAW,YAAY,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKO,WAAW,KAAA,EAA8B;AAC9C,IAAA,OAAOA,aAAA,CAAK,QAAA,CAAS,KAAA,CAAM,KAAA,EAAO,KAAK,KAAK,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,KAAA,EAA+B;AAC3C,IAAA,OAAOA,aAAA,CAAK,QAAQ,IAAA,CAAK,KAAK,MAAMA,aAAA,CAAK,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,MAAA,GAAiB;AACtB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,SAAS,IAAA,EAA6B;AAClD,IAAA,OAAO,cAAA,CAAc,WAAW,IAAI,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,MAAA,GAA2B;AACtC,IAAA,IAAI;AACF,MAAA,MAAMK,GAAAA,GAAK,MAAM,OAAO,aAAa,CAAA;AACrC,MAAA,MAAMA,GAAAA,CAAG,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAC1B,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,0BAAA,GAA4C;AACjD,IAAA,OAAO,IAAA,CAAK,KAAK,qBAAqB,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKO,kBAAA,GAAoC;AACzC,IAAA,OAAO,IAAA,CAAK,KAAK,cAAc,CAAA;AAAA,EACjC;AACF,CAAA;AC5HO,IAAM,cAAN,MAAkB;AAAA,EACvB,OAAwB,gBAAA,GAAmB,6BAAA;AAAA;AAAA;AAAA;AAAA,EAK3C,OAAO,KAAA,CACL,gBAAA,GAA2B,QAAQ,GAAA,EAAI,EACvC,gBAAyB,IAAA,EACZ;AACb,IAAA,MAAM,MAAA,GAAsB;AAAA,MAC1B,UAAU,IAAA,CAAK,gBAAA;AAAA,MACf,gBAAA,sBAAsB,GAAA,EAAI;AAAA,MAC1B,UAAA,sBAAgB,GAAA,EAAI;AAAA,MACpB,MAAA,sBAAY,GAAA;AAAI,KAClB;AAIA,IAAA,MAAM,cAAwB,EAAC;AAG/B,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,WAAA,CAAY,IAAA,CAAKJ,IAAAA,CAAKK,OAAAA,EAAQ,EAAG,QAAQ,CAAC,CAAA;AAC1C,MAAA,WAAA,CAAY,IAAA,CAAKL,IAAAA,CAAKK,OAAAA,EAAQ,EAAG,SAAS,CAAC,CAAA;AAAA,IAC7C;AAEA,IAAA,WAAA,CAAY,IAAA,CAAKL,IAAAA,CAAK,gBAAA,EAAkB,QAAQ,CAAC,CAAA;AACjD,IAAA,WAAA,CAAY,IAAA,CAAKA,IAAAA,CAAK,gBAAA,EAAkB,SAAS,CAAC,CAAA;AAElD,IAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,MAAA,IAAIC,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,QAAA,IAAA,CAAK,SAAA,CAAU,YAAY,MAAM,CAAA;AAAA,MACnC;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,gBAAA,CAAiB,QAAQ,aAAa,CAAA;AAE3C,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,SAAA,CAAU,QAAA,EAAkB,MAAA,EAA2B;AACpE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUC,YAAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AAC9C,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAEhC,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,WAAA,GAAc,KAAK,IAAA,EAAK;AAG9B,QAAA,IAAI,CAAC,eAAe,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,IAAK,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,EAAG;AAC9E,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,OAAA,CAAQ,GAAG,CAAA;AAC9C,QAAA,IAAI,mBAAmB,CAAA,CAAA,EAAI;AAE3B,QAAA,MAAM,MAAM,WAAA,CAAY,SAAA,CAAU,CAAA,EAAG,cAAc,EAAE,IAAA,EAAK;AAC1D,QAAA,MAAM,QAAQ,WAAA,CAAY,SAAA,CAAU,cAAA,GAAiB,CAAC,EAAE,IAAA,EAAK;AAG7D,QAAA,IAAI,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAC7B,UAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AACzC,UAAA,MAAA,CAAO,iBAAiB,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAC,CAAA;AAAA,QACrE,CAAA,MAAA,IAES,QAAQ,UAAA,EAAY;AAC3B,UAAA,MAAA,CAAO,QAAA,GAAW,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAA;AAAA,QACnD,CAAA,MAAA,IAES,IAAI,QAAA,CAAS,aAAa,KAAK,GAAA,CAAI,QAAA,CAAS,YAAY,CAAA,EAAG;AAElE,UAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,cAAc,CAAA;AACtC,UAAA,IAAI,KAAA,IAAS,KAAA,CAAM,CAAC,CAAA,EAAG;AACrB,YAAA,MAAM,YAAA,GAAe,MAAM,CAAC,CAAA;AAC5B,YAAA,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,YAAA,EAAc,KAAK,CAAA;AAAA,UAC3C;AAAA,QACF,CAAA,MAEK;AACH,UAAA,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,2BAAA,EAA8B,QAAQ,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,gBAAA,CAAiB,MAAA,EAAqB,UAAA,GAAsB,IAAA,EAAY;AACrF,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,OAAA,CAAQ,IAAI,mBAAA,EAAqB;AACnC,MAAA,MAAA,CAAO,QAAA,GAAW,IAAA,CAAK,oBAAA,CAAqB,OAAA,CAAQ,IAAI,mBAAmB,CAAA;AAAA,IAC7E;AAGA,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtD,MAAA,IAAI,IAAI,UAAA,CAAW,aAAa,KAAK,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAG9D,QAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,0BAA0B,CAAA;AAClD,QAAA,IAAI,KAAA,IAAS,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,EAAO;AAC9B,UAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAC3D,UAAA,MAAA,CAAO,iBAAiB,GAAA,CAAI,KAAA,EAAO,IAAA,CAAK,oBAAA,CAAqB,KAAK,CAAC,CAAA;AAAA,QACrE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,qBAAA,CAAsB,WAAA,EAAqB,MAAA,EAA6B;AAE7E,IAAA,IAAI,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,EAAG;AAC/B,MAAA,MAAM,QAAA,GAAW,WAAA,CAAY,OAAA,CAAQ,GAAG,CAAA;AACxC,MAAA,IAAI,aAAa,EAAA,EAAI;AACnB,QAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,SAAA,CAAU,CAAA,EAAG,QAAQ,CAAA;AAG/C,QAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAA;AACxD,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,OAAO,cAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAGA,IAAA,OAAO,MAAA,CAAO,QAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,qBAAqB,GAAA,EAAqB;AAEvD,IAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,cAAA,EAAgB,EAAE,CAAA;AAGpC,IAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACtB,MAAA,GAAA,IAAO,GAAA;AAAA,IACT;AAEA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YAAA,CAAa,WAAA,EAAqB,MAAA,EAAyC;AAChF,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,WAAW,CAAA;AAC/B,MAAA,OAAO,MAAA,CAAO,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC3C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AACF,CAAA;;;AC3IO,IAAM,qBAAN,MAAyB;AAAA,EACb,KAAA,uBAA2D,GAAA,EAAI;AAAA;AAAA,EAG/D,mBAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA;AAAA,EAGA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA;AAAA,EAGA,WAAA;AAAA,EAEjB,WAAA,CACE,cAAsB,6BAAA,EACtB,OAAA,GAA0B,EAAC,EAC3B,gBAAA,GAA2B,OAAA,CAAQ,GAAA,EAAI,EACvC;AAEA,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA,CAAY,KAAA,CAAM,gBAAgB,CAAA;AAGrD,IAAA,IAAI,CAAC,WAAA,IAAe,WAAA,KAAgB,6BAAA,EAA+B;AAEjE,MAAA,MAAM,gBAAgB,WAAA,CAAY,QAAA,CAAS,GAAG,CAAA,GAAI,cAAc,WAAA,GAAc,GAAA;AAC9E,MAAA,IAAA,CAAK,WAAA,CAAY,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,QAAA,IAAY,aAAA;AAAA,IAC3D,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,YAAY,QAAA,GAAW,WAAA,CAAY,SAAS,GAAG,CAAA,GAAI,cAAc,WAAA,GAAc,GAAA;AAAA,IACtF;AACA,IAAA,IAAA,CAAK,WAAA,GAAc,QAAQ,WAAA,IAAe,CAAA;AAC1C,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,IAAA;AAClC,IAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,OAAA,IAAW,CAAA;AAGlC,IAAA,MAAM,gBAAA,GAAmB,QAAQ,oBAAA,IAAwB,EAAA;AACzD,IAAA,IAAA,CAAK,mBAAA,GAAsB,mBAAmB,EAAA,GAAK,GAAA;AACnD,IAAA,IAAA,CAAK,uBAAA,GAA0B,gBAAA,GAAmB,CAAA,GAAI,EAAA,GAAK,GAAA;AAC3D,IAAA,IAAA,CAAK,oBAAA,GAAuB,gBAAA,GAAmB,CAAA,GAAI,EAAA,GAAK,GAAA;AAExD,IAAA,IAAA,CAAK,iBAAiB,gBAAA,GAAmB,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAA,CACZ,EAAA,EACA,OAAA,GAAkB,WAAA,EACN;AACZ,IAAA,IAAI,SAAA;AAEJ,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,IAAA,CAAK,SAAS,OAAA,EAAA,EAAW;AACxD,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,EAAA,EAAG;AAAA,MAClB,SAAS,KAAA,EAAO;AACd,QAAA,SAAA,GAAY,KAAA;AAEZ,QAAA,IAAI,OAAA,KAAY,KAAK,OAAA,EAAS;AAC5B,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,cAAA,EAAiB,KAAK,OAAO,CAAA,WAAA,EAAc,SAAA,CAAU,OAAO,CAAA,CAAE,CAAA;AAAA,QAC1F;AAGA,QAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,GAAO,IAAA,CAAK,IAAI,CAAA,EAAG,OAAA,GAAU,CAAC,CAAA,EAAG,GAAK,CAAA;AAC7D,QAAA,MAAM,IAAI,OAAA,CAAQ,CAACC,aAAY,UAAA,CAAWA,QAAAA,EAAS,KAAK,CAAC,CAAA;AAGzD,QAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,GACvC,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,CAAE,CAAC,CAAA,IAAK,iBAAA,GAC5B,iBAAA;AAEJ,QAAA,wBAAA,CAAyB,kBAAA,CAAmB,WAAA,EAAa,OAAA,EAAS,IAAA,CAAK,SAAS,SAAS,CAAA;AAAA,MAC3F;AAAA,IACF;AAEA,IAAA,MAAM,SAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsB,WAAA,EAA6B;AACzD,IAAA,OAAO,WAAA,CAAY,qBAAA,CAAsB,WAAA,EAAa,IAAA,CAAK,WAAW,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,WAAA,EAA0C;AAC9D,IAAA,MAAM,SAAA,GAAY,WAAA,CAAY,YAAA,CAAa,WAAA,EAAa,KAAK,WAAW,CAAA;AACxE,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO;AAAA,QACL,kCAAA,EAAoC,SAAA;AAAA,QACpC,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AACA,IAAA,OAAO,EAAC;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAmB,WAAA,EAMtB;AACD,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,qBAAA,CAAsB,WAAW,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAW,CAAA,iBAAA,EAAoB,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AAG/D,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA;AACzC,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,gBAAA,CAAiB,YAAY;AAE9D,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA;AACjD,MAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,SAAA,CAAU,WAAA,EAAa;AAAA,QACpD,QAAA,EAAU,WAAA;AAAA,QACV,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,YAAA,EAAc,KAAA;AAAA;AAAA,QACd,GAAG;AAAA,OACJ,CAAA;AAED,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,QAAA,IAAY,EAAE,CAAA,CAAE,IAAA,CAAKG,MAAAA,CAAO,QAAQ,CAAA;AAC3E,MAAA,MAAM,gBAAgB,SAAA,CAAU,WAAW,GAAG,MAAA,IAAU,QAAA,CAAS,CAAC,CAAA,IAAK,EAAA;AAEvE,MAAA,OAAO;AAAA,QACL,MAAM,SAAA,CAAU,IAAA;AAAA,QAChB,QAAA;AAAA,QACA,aAAA;AAAA,QACA,IAAA,EAAM,SAAA,CAAU,WAAW,CAAA,IAAK,EAAC;AAAA,QACjC,IAAA,EAAO,SAAA,CAAkB,IAAA,IAAQ;AAAC;AAAA,OACpC;AAAA,IACF,CAAA,EAAG,CAAA,8BAAA,EAAiC,WAAW,CAAA,CAAE,CAAA;AAGjD,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,IAAA,CAAK,QAAA,CAAS,UAAU,eAAe,CAAA;AAAA,IACzC;AAEA,IAAA,OAAO,eAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAe,WAAA,EAA2C;AAC9D,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,qBAAA,CAAsB,WAAW,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAW,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA;AAG3D,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA;AACzC,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,kBAAA,CAAmB,WAAW,CAAA;AAE7D,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,gBAAA,CAAiB,YAAY;AAE1D,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA;AACjD,MAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,SAAA,CAAU,WAAA,EAAa;AAAA,QACpD,QAAA,EAAU,WAAA;AAAA,QACV,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,YAAA,EAAc,IAAA;AAAA,QACd,GAAG;AAAA,OACJ,CAAA;AAED,MAAA,OAAO;AAAA,QACL,MAAM,WAAA,CAAY,IAAA;AAAA,QAClB,WAAA,EAAc,UAAkB,WAAA,IAAe,MAAA;AAAA,QAC/C,QAAA,EAAW,UAAkB,QAAA,IAAY,MAAA;AAAA,QACzC,UAAA,EAAa,UAAkB,UAAA,IAAc,MAAA;AAAA,QAC7C,OAAA,EAAU,UAAkB,OAAA,IAAW,MAAA;AAAA,QACvC,MAAA,EAAS,UAAkB,MAAA,IAAU,MAAA;AAAA,QACrC,WAAA,EAAc,UAAkB,WAAA,IAAe,MAAA;AAAA,QAC/C,QAAA,EAAW,UAAkB,QAAA,IAAY,MAAA;AAAA,QACzC,UAAU,WAAA,CAAY,QAAA;AAAA,QACtB,eAAe,WAAA,CAAY,aAAA;AAAA,QAC3B,MAAM,WAAA,CAAY,IAAA;AAAA,QAClB,IAAA,EAAM,WAAA,CAAY,IAAA,IAAQ;AAAC,OAC7B;AAAA,IACF,CAAA,EAAG,CAAA,0BAAA,EAA6B,WAAW,CAAA,CAAE,CAAA;AAG7C,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,IAAA,CAAK,QAAA,CAAS,UAAU,WAAW,CAAA;AAAA,IACrC;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,WAAA,EAAuC;AAC5D,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,kBAAA,CAAmB,WAAW,CAAA;AAC7D,MAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,WAAA,CAAY,aAAa,CAAA;AAAA,IACrD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,WAAW,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAC7E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CAAmB,WAAA,EAAqB,KAAA,EAAwC;AACpF,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,kBAAA,CAAmB,WAAW,CAAA;AAE7D,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,WAAA,CAAY,aAAa,CAAA;AAAA,MACrD;AAGA,MAAA,MAAM,kBAAA,GAAqB,WAAA,CAAY,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM;AAC5D,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,UAAA,CAAW,CAAC,CAAA;AACpC,UAAA,OAAO,OAAA,CAAQ,UAAU,KAAK,CAAA;AAAA,QAChC,CAAA,CAAA,MAAQ;AACN,UAAA,OAAO,KAAA;AAAA,QACT;AAAA,MACF,CAAC,CAAA;AAED,MAAA,IAAI,kBAAA,CAAmB,WAAW,CAAA,EAAG;AACnC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,KAAA,CAAM,QAAA,EAAU,CAAA,CAAE,CAAA;AAAA,MACjE;AAGA,MAAA,IAAI,CAAC,kBAAA,CAAmB,CAAC,CAAA,EAAG;AAC1B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,WAAW,CAAA,CAAE,CAAA;AAAA,MACnE;AACA,MAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,kBAAA,CAAmB,CAAC,CAAC,CAAA;AAAA,IACjD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,WAAW,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAC/E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkB,WAAA,EAAqB,KAAA,GAAgB,EAAA,EAAwB;AACnF,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,kBAAA,CAAmB,WAAW,CAAA;AAG7D,MAAA,MAAM,gBAAA,GAAmB,WAAA,CAAY,QAAA,CAClC,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,QACjB,OAAA;AAAA,QACA,IAAA,EAAM,WAAA,CAAY,IAAA,GAAO,OAAO,IAAI,IAAI,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,OAAO,CAAC,CAAA,mBAAI,IAAI,KAAK,CAAC;AAAA,QACpF,CAAA,CACD,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,IAAA,CAAK,OAAA,EAAQ,GAAI,EAAE,IAAA,CAAK,OAAA,EAAS,CAAA,CAClD,KAAA,CAAM,GAAG,KAAK,CAAA;AAEjB,MAAA,OAAO,gBAAA,CAAiB,IAAI,CAAC,IAAA,KAAS,QAAQ,UAAA,CAAW,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IACxE,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,WAAW,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAC9E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,4BAAA,CACJ,WAAA,EACA,OAAA,EACyB;AACzB,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,qBAAA,CAAsB,WAAW,CAAA;AAC1D,IAAA,MAAM,WAAW,CAAA,SAAA,EAAY,WAAW,CAAA,CAAA,EAAI,WAAW,IAAI,OAAO,CAAA,CAAA;AAGlE,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA;AACzC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,SAAA,GAAY;AAAA,QAChB,IAAA,EAAM,WAAA;AAAA,QACN,OAAA;AAAA,QACA,UAAU,EAAC;AAAA,QACX,cAAc;AAAC,OACjB;AAEA,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA;AACjD,MAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB,2BAAA,EAA6B;AAAA,QACnE,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAAA,QAC9B,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA,QAAA,EAAU,WAAA;AAAA,QACV,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,GAAG;AAAA,OACJ,CAAA;AAED,MAAA,MAAM,WAAA,GAAc,MAAM,QAAA,CAAS,IAAA,EAAK;AACxC,MAAA,MAAM,kBAA2C,EAAC;AAGlD,MAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,QAAA,KAAA,MAAW,QAAA,IAAY,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,UAAU,CAAA,EAAY;AACrE,UAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,YACnB,EAAA,EAAI,QAAA,CAAS,EAAA,CAAG,QAAA,EAAS;AAAA,YACzB,OAAO,QAAA,CAAS,KAAA;AAAA,YAChB,UAAU,QAAA,CAAS,QAAA;AAAA,YACnB,aAAa,QAAA,CAAS,QAAA;AAAA,YACtB,WAAW,QAAA,CAAS,GAAA;AAAA,YACpB,qBAAqB,QAAA,CAAS,mBAAA;AAAA,YAC9B,kBAAkB,QAAA,CAAS,gBAAA;AAAA,YAC3B,gBAAgB,QAAA,CAAS;AAAA,WAC1B,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,MAAM,cAAA,GAAiC;AAAA,QACrC,OAAA,EAAS,WAAA;AAAA,QACT,OAAA;AAAA,QACA,eAAA;AAAA,QACA,kBAAA,EAAoB,gBAAgB,MAAA,GAAS;AAAA,OAC/C;AAGA,MAAA,IAAA,CAAK,QAAA,CAAS,UAAU,cAAc,CAAA;AAEtC,MAAA,OAAO,cAAA;AAAA,IACT,SAAS,KAAA,EAAO;AAEd,MAAA,wBAAA,CAAyB,0BAAA,CAA2B,aAAa,KAAc,CAAA;AAE/E,MAAA,MAAM,WAAA,GAA8B;AAAA,QAClC,OAAA,EAAS,WAAA;AAAA,QACT,OAAA;AAAA,QACA,iBAAiB,EAAC;AAAA,QAClB,kBAAA,EAAoB;AAAA,OACtB;AAEA,MAAA,OAAO,WAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CACJ,QAAA,EACA,gBAAA,EACmC;AACnC,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAyB;AAC7C,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,MAAM,QAAQ,QAAA,CAAS,MAAA;AAGvB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,KAAK,WAAW,CAAA;AAEzD,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,OAAO,WAAA,KAAgB;AAChD,QAAA,IAAI;AACF,UAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,cAAA,CAAe,WAAW,CAAA;AAClD,UAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,IAAI,CAAA;AAG7B,UAAA,SAAA,EAAA;AACA,UAAA,IAAI,gBAAA,EAAkB;AACpB,YAAA,gBAAA,CAAiB,SAAA,EAAW,OAAO,WAAW,CAAA;AAAA,UAChD;AAAA,QACF,SAAS,KAAA,EAAO;AAEd,UAAA,SAAA,EAAA;AACA,UAAA,IAAI,gBAAA,EAAkB;AACpB,YAAA,gBAAA,CAAiB,SAAA,EAAW,OAAO,WAAW,CAAA;AAAA,UAChD;AACA,UAAA,wBAAA,CAAyB,yBAAA,CAA0B,aAAa,KAAc,CAAA;AAAA,QAChF;AAAA,MACF,CAAC,CAAA;AAED,MAAA,MAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAAA,IAC5B;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAA,CACJ,WAAA,EACA,WAAA,EACA,SAAA,EACkB;AAClB,IAAA,IAAI;AAGF,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,qBAAA,CAAsB,WAAW,CAAA;AAC1D,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA;AAEjD,MAAA,MAAM,eAAA,GAAkB,MAAM,MAAA,CAAO,QAAA,CAAS,GAAG,WAAW,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,EAAI;AAAA,QAC7E,QAAA,EAAU,WAAA;AAAA,QACV,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,GAAG;AAAA,OACJ,CAAA;AAED,MAAA,MAAM,aAAA,GAAgB,MAAM,MAAA,CAAO,QAAA,CAAS,GAAG,WAAW,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,EAAI;AAAA,QACzE,QAAA,EAAU,WAAA;AAAA,QACV,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,GAAG;AAAA,OACJ,CAAA;AAGD,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,eAAA,CAAiB,eAAA,CAAwB,MAAM,CAAA;AACvE,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAiB,aAAA,CAAsB,MAAM,CAAA;AAEnE,MAAA,OAAO,UAAA,KAAe,QAAA;AAAA,IACxB,SAAS,KAAA,EAAO;AAEd,MAAA,wBAAA,CAAyB,yBAAA,CAA0B,aAAa,KAAA,EAAgB;AAAA,QAC9E,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CACJ,WAAA,EACA,MAAA,GAAkD,WAAA,EACjC;AACjB,IAAA,IAAI;AACF,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,CAAA,sCAAA,EAAyC,MAAM,CAAA,CAAA,EAAI,WAAW,CAAA;AAAA,OAChE;AACA,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AAAA,MAC1D;AACA,MAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,MAAA,OAAO,KAAK,SAAA,IAAa,CAAA;AAAA,IAC3B,SAAS,KAAA,EAAO;AAEd,MAAA,wBAAA,CAAyB,yBAAA,CAA0B,aAAa,KAAA,EAAgB;AAAA,QAC9E,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAmB;AACjB,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,CAAiB,OAAyD,KAAA,EAAa;AACrF,IAAA,IAAI,SAAS,KAAA,EAAO;AAClB,MAAA,IAAA,CAAK,UAAA,EAAW;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SACJ,IAAA,KAAS,UAAA,GACL,mBAAA,GACA,IAAA,KAAS,iBACP,eAAA,GACA,WAAA;AAER,IAAA,MAAM,eAAyB,EAAC;AAChC,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK,EAAG;AACnC,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AAC1B,QAAA,YAAA,CAAa,KAAK,GAAG,CAAA;AAAA,MACvB;AAAA,IACF;AAEA,IAAA,YAAA,CAAa,QAAQ,CAAC,GAAA,KAAQ,KAAK,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAME;AACA,IAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,WAAA,EAAa,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,OAAA,EAAS,CAAA,EAAE;AAC/E,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AAErB,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,MAAM,KAAK,IAAA,CAAK,KAAA,CAAM,SAAQ,EAAG;AAChD,MAAA,KAAA,CAAM,KAAA,EAAA;AAEN,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,eAAA,CAAgB,GAAG,CAAA;AACxC,MAAA,IAAI,GAAA,GAAM,MAAA,CAAO,SAAA,GAAY,OAAA,EAAS;AACpC,QAAA,KAAA,CAAM,OAAA,EAAA;AACN,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,mBAAmB,CAAA,EAAG;AACvC,QAAA,KAAA,CAAM,QAAA,EAAA;AAAA,MACR,CAAA,MAAA,IAAW,GAAA,CAAI,UAAA,CAAW,eAAe,CAAA,EAAG;AAC1C,QAAA,KAAA,CAAM,WAAA,EAAA;AAAA,MACR,CAAA,MAAA,IAAW,GAAA,CAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AACtC,QAAA,KAAA,CAAM,QAAA,EAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,GAAA,EAAyB;AAC5C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AACjC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,eAAA,CAAgB,GAAG,CAAA;AAExC,IAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,MAAA,CAAO,YAAY,OAAA,EAAS;AAC3C,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AACrB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA,CAAO,IAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,GAAA,EAAqB;AAC3C,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,mBAAmB,CAAA,EAAG;AACvC,MAAA,OAAO,IAAA,CAAK,mBAAA;AAAA,IACd,CAAA,MAAA,IAAW,GAAA,CAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AACtC,MAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,IACd,CAAA,MAAA,IAAW,GAAA,CAAI,UAAA,CAAW,eAAe,CAAA,EAAG;AAC1C,MAAA,OAAO,IAAA,CAAK,uBAAA;AAAA,IACd;AAGA,IAAA,OAAO,IAAA,CAAK,mBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKQ,QAAA,CAAS,KAAa,IAAA,EAAiB;AAC7C,IAAA,IAAA,CAAK,KAAA,CAAM,IAAI,GAAA,EAAK;AAAA,MAClB,IAAA;AAAA,MACA,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,CAAc,OAAY,IAAA,EAAqB;AACrD,IAAA,MAAM,SAAgB,EAAC;AACvB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,IAAA,EAAM;AAC3C,MAAA,MAAA,CAAO,KAAK,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,MAAA,EAAqB;AAC3C,IAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,MAAA,OAAO,MAAA,CAAO,WAAA,EAAY,CAAE,IAAA,EAAK;AAAA,IACnC;AACA,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,EAAQ,IAAA,EAAM;AAC9C,MAAA,OAAO,MAAA,CAAO,IAAA,CAAK,WAAA,EAAY,CAAE,IAAA,EAAK;AAAA,IACxC;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AACF,CAAA;;;AC9eO,IAAM,oBAAA,GAAN,MAAM,qBAAA,CAAqB;AAAA,EAChC,WAAA,CACmB,qBACA,eAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,mBAAA,GAAA,mBAAA;AACA,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKH,OAAO,gBAAA,CACL,mBAAA,EACA,aAAA,EACsB;AACtB,IAAA,MAAM,SAAS,YAAA,CAAa,UAAA,CAAW,aAAA,IAAiB,OAAA,CAAQ,KAAK,CAAA;AAGrE,IAAA,MAAM,iBAAiC,EAAC;AAExC,IAAA,IAAI,MAAA,CAAO,QAAA,EAAU,WAAA,KAAgB,MAAA,EAAW;AAC9C,MAAA,cAAA,CAAe,WAAA,GAAc,OAAO,QAAA,CAAS,WAAA;AAAA,IAC/C;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,EAAU,OAAA,KAAY,MAAA,EAAW;AAC1C,MAAA,cAAA,CAAe,OAAA,GAAU,OAAO,QAAA,CAAS,OAAA;AAAA,IAC3C;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,EAAU,OAAA,KAAY,MAAA,EAAW;AAC1C,MAAA,cAAA,CAAe,OAAA,GAAU,OAAO,QAAA,CAAS,OAAA;AAAA,IAC3C;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,EAAU,oBAAA,KAAyB,MAAA,EAAW;AACvD,MAAA,cAAA,CAAe,oBAAA,GAAuB,OAAO,QAAA,CAAS,oBAAA;AAAA,IACxD;AAGA,IAAA,MAAM,WAAA,GAAc,6BAAA;AACpB,IAAA,MAAM,gBAAA,GAAmB,aAAA,IAAiB,OAAA,CAAQ,GAAA,EAAI;AAEtD,IAAA,MAAM,eAAA,GAAkB,IAAI,kBAAA,CAAmB,WAAA,EAAa,gBAAgB,gBAAgB,CAAA;AAE5F,IAAA,OAAO,IAAI,qBAAA,CAAqB,mBAAA,EAAqB,eAAe,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBAAA,CAA0B,OAAA,GAAwB,EAAC,EAA4B;AACnF,IAAA,MAAM,gBAAgB,aAAA,CAAc,UAAA,CAAW,QAAQ,aAAA,IAAiB,OAAA,CAAQ,KAAK,CAAA;AAGrF,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,UAAA,CAAW,aAAA,CAAc,UAAU,CAAA;AAG/D,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,mBAAA,CAAoB,WAAW,aAAa,CAAA;AACzE,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,aAAA,CAAc,QAAA,EAAU,CAAA,CAAE,CAAA;AAAA,IAC1E;AAEA,IAAA,MAAM,QAAA,GAAW,UAAU,WAAA,EAAY;AACvC,IAAA,MAAM,eAAoC,EAAC;AAC3C,IAAA,IAAI,aAAA,GAAgB,CAAA;AAGpB,IAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,WAAA,GAC5B,CAAC,SAAS,GAAA,CAAI,OAAA,CAAQ,WAAW,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GAClD,SAAS,MAAA,EAAO;AAEpB,IAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,OAAA,CAAQ,WAAA,GACJ,CAAA,SAAA,EAAY,OAAA,CAAQ,WAAW,CAAA,WAAA,CAAA,GAC/B;AAAA,OACN;AAAA,IACF;AAGA,IAAA,IAAI,aAAA,GAAgB,CAAA;AAGpB,IAAA,KAAA,MAAW,WAAW,eAAA,EAAiB;AACrC,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,MAAM,YAAA,GAAe,QAAQ,eAAA,EAAgB;AAC7C,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA;AAE5C,MAAA,MAAM,kBAAkB,YAAA,CAAa,MAAA,CAAO,CAAC,CAAC,WAAW,CAAA,KAAM;AAC7D,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,gBAAA,CAAiB,WAAA,EAAa,MAAM,CAAA;AACvE,QAAA,OAAO,aAAA,CAAc,YAAA;AAAA,MACvB,CAAC,CAAA;AAGD,MAAA,eAAA,CAAgB,OAAA,CAAQ,CAAC,CAAC,WAAA,EAAa,KAAK,CAAA,KAAM;AACK,MACvD,CAAC,CAAA;AAED,MAAA,aAAA,IAAiB,eAAA,CAAgB,MAAA;AAAA,IACnC;AAGA,IAAA,IAAI,gBAAA,GAA4C,IAAA;AAChD,IAAA,IAAI,aAAA,GAAgB,CAAA,IAAK,OAAA,CAAQ,gBAAA,EAAkB;AACjD,MAAA,gBAAA,GAAmB,OAAA,CAAQ,gBAAA;AAC3B,MAAA,gBAAA,CAAiB,KAAA,CAAM,CAAA,yBAAA,EAAQ,aAAa,CAAA,4BAAA,CAAA,EAAY,aAAa,CAAA;AAAA,IACvE;AAEA,IAAA,IAAI,SAAA,GAAY,CAAA;AAGhB,IAAA,KAAA,MAAW,WAAW,eAAA,EAAiB;AACrC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,MAAM,CAAA,SAAA,EAAY,eAAA,CAAgB,CAAC,CAAA,EAAG,OAAA,EAAQ,IAAK,SAAS,CAAA,WAAA,CAAa,CAAA;AAAA,MACrF;AACA,MAAA,MAAM,YAAA,GAAe,QAAQ,eAAA,EAAgB;AAG7C,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAA,CAAK,YAAY,CAAA;AAG5C,MAAA,MAAM,kBAAkB,YAAA,CAAa,MAAA,CAAO,CAAC,CAAC,WAAW,CAAA,KAAM;AAC7D,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,gBAAA,CAAiB,WAAA,EAAa,MAAM,CAAA;AACvE,QAAA,OAAO,aAAA,CAAc,YAAA;AAAA,MACvB,CAAC,CAAA;AAGD,MAAA,MAAM,oBAAA,GAAuB,MAAM,IAAA,CAAK,yBAAA;AAAA,QACtC,eAAA;AAAA,QACA,OAAA;AAAA,QACA,SAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,gBAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF;AAGA,MAAA,SAAA,IAAa,eAAA,CAAgB,MAAA;AAE7B,MAAA,MAAM,WAAA,GAAiC;AAAA,QACrC,WAAA,EAAa,QAAS,OAAA,EAAQ;AAAA,QAC9B,oBAAA;AAAA,QACA,eAAe,YAAA,CAAa,IAAA;AAAA,QAC5B,eAAe,oBAAA,CAAqB;AAAA,OACtC;AAEA,MAAA,YAAA,CAAa,KAAK,WAAW,CAAA;AAC7B,MAAA,aAAA,IAAiB,oBAAA,CAAqB,MAAA;AAAA,IACxC;AAGA,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,QAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAA,8CAAA,EAAc,aAAa,CAAA,iDAAA,CAAW,CAAA;AAAA,MACjE,CAAA,MAAO;AACL,QAAA,gBAAA,CAAiB,QAAQ,+FAAoB,CAAA;AAAA,MAC/C;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,cAAc,QAAA,EAAS;AAAA,QAC7B,IAAA,EAAM,cAAc,gBAAA;AAAiB,OACvC;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACV,aAAA;AAAA,MACA,YAAY,aAAA,GAAgB;AAAA,KAC9B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,OAAA,EAA6C;AAC7D,IAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,yBAAA,CAA0B,OAAO,CAAA;AAEnE,IAAA,MAAM,UAA2B,EAAC;AAClC,IAAA,MAAM,YAA+B,EAAC;AAGtC,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,aAAA,IAAiB,OAAA,CAAQ,GAAA,EAAI;AAC3D,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,UAAA,CAAW,aAAa,CAAA;AAGpD,IAAA,KAAA,MAAW,WAAA,IAAe,eAAe,QAAA,EAAU;AACjD,MAAA,KAAA,MAAW,QAAA,IAAY,YAAY,oBAAA,EAAsB;AAEvD,QAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,gBAAA,CAAiB,QAAA,CAAS,aAAa,MAAM,CAAA;AAEhF,QAAA,MAAM,MAAA,GAAwB;AAAA,UAC5B,aAAa,WAAA,CAAY,WAAA;AAAA,UACzB,aAAa,QAAA,CAAS,WAAA;AAAA,UACtB,gBAAgB,QAAA,CAAS,cAAA;AAAA,UACzB,YAAY,QAAA,CAAS,aAAA;AAAA,UACrB,YAAY,QAAA,CAAS,UAAA;AAAA,UACrB,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgB,QAAQ,CAAA;AAAA,UACrC,kBAAkB,QAAA,CAAS,gBAAA;AAAA,UAC3B,qBAAqB,aAAA,CAAc,mBAAA;AAAA,UACnC,YAAY,aAAA,CAAc,UAAA;AAAA,UAC1B,aAAa,aAAA,CAAc;AAAA,SAC7B;AAEA,QAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,MACrB;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,QAAA,EAAU,YAAA,IAAgB,OAAO,QAAA,CAAS,YAAA,CAAa,SAAS,CAAA,EAAG;AAC5E,MAAA,MAAM,gBAAA,GAAmB,aAAA,CAAc,UAAA,CAAW,aAAa,CAAA;AAC/D,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,mBAAA,CAAoB,WAAW,gBAAgB,CAAA;AAE5E,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,OAAA,CAAQ,IAAA;AAAA,UACN,GAAI,MAAM,IAAA,CAAK,wBAAA,CAAyB,OAAO,QAAA,CAAS,YAAA,EAAc,WAAW,OAAO;AAAA,SAC1F;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,iBAAA,uBAAwB,GAAA,EAA6B;AAE3D,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAC9C,QAAA,iBAAA,CAAkB,GAAA,CAAI,MAAA,CAAO,WAAA,EAAa,EAAE,CAAA;AAAA,MAC9C;AACA,MAAA,iBAAA,CAAkB,GAAA,CAAI,MAAA,CAAO,WAAW,CAAA,CAAG,KAAK,MAAM,CAAA;AAAA,IACxD;AAGA,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,cAAc,CAAA,IAAK,iBAAA,EAAmB;AAC7D,MAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,QAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,cAAA,CAAe,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAC,CAAA;AACtE,QAAA,IAAI,cAAA,CAAe,OAAO,CAAA,EAAG;AAC3B,UAAA,MAAM,mBAAmB,IAAA,CAAK,sBAAA;AAAA,YAC5B,WAAA;AAAA,YACA,cAAA;AAAA,YACA,MAAA,CAAO,QAAA,EAAU,eAAA,IAAmB,CAAC,SAAS;AAAA,WAChD;AAEA,UAAA,IAAI,gBAAA,EAAkB;AACpB,YAAA,SAAA,CAAU,KAAK,gBAAgB,CAAA;AAAA,UACjC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,WAAW,cAAA,CAAe,SAAA;AAAA,MAC1B,OAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAc,OAAA,CAAQ,MAAA;AAAA,MACtB,YAAA,EAAc,UAAU,MAAA,GAAS;AAAA,KACnC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CAAe,IAAA,EAAkB,OAAA,EAA+C;AACpF,IAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,UAAA,CAAW,IAAA,CAAK,UAAU,IAAI,CAAA;AAGlE,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,UAAA,CAAW,aAAA,CAAc,UAAU,CAAA;AAG/D,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,mBAAA,CAAoB,WAAW,aAAa,CAAA;AACzE,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,aAAA,CAAc,QAAA,EAAU,CAAA,CAAE,CAAA;AAAA,IACtE;AAEA,IAAA,MAAM,sBAA2C,EAAC;AAClD,IAAA,MAAM,sBAA2C,EAAC;AAClD,IAAA,MAAM,SAAwB,EAAC;AAG/B,IAAA,MAAM,kBAA4B,EAAC;AAGnC,IAAA,KAAA,MAAW,MAAA,IAAU,KAAK,OAAA,EAAS;AACjC,MAAA,IAAI;AAEF,QAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,CAAC,OAAA,CAAQ,KAAA,EAAO;AACvC,UAAA,MAAM,WAAA,GAAc,KAAK,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,MAAA,CAAO,WAAW,CAAA;AACnF,UAAA,IAAI,WAAA,EAAa;AACf,YAAA,mBAAA,CAAoB,IAAA,CAAK;AAAA,cACvB,aAAa,MAAA,CAAO,WAAA;AAAA,cACpB,aAAa,MAAA,CAAO,WAAA;AAAA,cACpB,gBAAgB,MAAA,CAAO,cAAA;AAAA,cACvB,MAAA,EAAQ;AAAA,aACT,CAAA;AACD,YAAA;AAAA,UACF;AAAA,QACF;AAGA,QAAA,IAAI,gBAAA,GAAmB,KAAA;AACvB,QAAA,IAAI,MAAA,CAAO,UAAU,sBAAA,EAAwB;AAC3C,UAAA,IAAI;AACF,YAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,eAAA,CAAgB,4BAAA;AAAA,cAChD,MAAA,CAAO,WAAA;AAAA,cACP,MAAA,CAAO;AAAA,aACT;AACA,YAAA,IAAI,eAAe,kBAAA,EAAoB;AACrC,cAAA,gBAAA,GAAmB,IAAA;AACnB,cAAA,eAAA,CAAgB,IAAA;AAAA,gBACd,CAAA,EAAG,OAAO,WAAW,CAAA,CAAA,EAAI,OAAO,cAAc,CAAA,QAAA,EAAM,OAAO,UAAU,CAAA;AAAA,eACvE;AAAA,YACF;AAAA,UACF,SAAS,KAAA,EAAO;AACd,YAAA,wBAAA,CAAyB,0BAAA;AAAA,cACvB,MAAA,CAAO,WAAA;AAAA,cACP,KAAA;AAAA,cACA,EAAE,WAAW,QAAA;AAAS,aACxB;AAAA,UACF;AAAA,QACF;AAGA,QAAA,SAAA,CAAU,uBAAA;AAAA,UACR,MAAA,CAAO,WAAA;AAAA,UACP,MAAA,CAAO,WAAA;AAAA,UACP,MAAA,CAAO;AAAA,SACT;AAEA,QAAA,mBAAA,CAAoB,IAAA,CAAK;AAAA,UACvB,aAAa,MAAA,CAAO,WAAA;AAAA,UACpB,aAAa,MAAA,CAAO,WAAA;AAAA,UACpB,aAAa,MAAA,CAAO,cAAA;AAAA,UACpB,WAAW,MAAA,CAAO,UAAA;AAAA,UAClB,YAAY,MAAA,CAAO;AAAA,SACpB,CAAA;AAGD,QAAA,IAAI,gBAAA,IAAoB,MAAA,CAAO,QAAA,EAAU,sBAAA,EAAwB;AAC/D,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,CAAA,6BAAA,EAA2B,OAAO,WAAW,CAAA,CAAA,EAAI,OAAO,cAAc,CAAA,QAAA,EAAM,OAAO,UAAU,CAAA;AAAA,WAC/F;AAAA,QACF;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,aAAa,MAAA,CAAO,WAAA;AAAA,UACpB,aAAa,MAAA,CAAO,WAAA;AAAA,UACpB,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,UACnB,KAAA,EAAO;AAAA,SACR,CAAA;AAAA,MACH;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,IAAU,mBAAA,CAAoB,SAAS,CAAA,EAAG;AACrD,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,SAAS,CAAA;AAG7C,QAAA,IAAI,eAAA,CAAgB,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,UAAU,sBAAA,EAAwB;AACzE,UAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,mCAAA,CAAgC,CAAA;AAC5C,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,WAAA,EAAc,eAAA,CAAgB,MAAM,CAAA,kBAAA,CAAoB,CAAA;AACpE,UAAA,eAAA,CAAgB,OAAA,CAAQ,CAAC,MAAA,KAAW,OAAA,CAAQ,IAAI,CAAA,UAAA,EAAQ,MAAM,EAAE,CAAC,CAAA;AAAA,QACnE;AAGA,QAAA,MAAM,cAAc,mBAAA,CAAoB,MAAA;AAAA,UAAO,CAAC,CAAA,KAC9C,IAAA,CAAK,OAAA,CAAQ,IAAA;AAAA,YACX,CAAC,EAAA,KACC,EAAA,CAAG,WAAA,KAAgB,CAAA,CAAE,WAAA,IACrB,EAAA,CAAG,WAAA,KAAgB,CAAA,CAAE,WAAA,IACrB,EAAA,CAAG,MAAA,CAAO,SAAS,cAAc;AAAA;AACrC,SACF;AAEA,QAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,UAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,+BAAA,CAA4B,CAAA;AACxC,UAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,WAAA,CAAY,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAC,CAAA;AACpE,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gBAAA,EAAmB,cAAA,CAAe,IAAI,CAAA,4BAAA,CAA8B,CAAA;AAGhF,UAAA,MAAM,aAAA,uBAAoB,GAAA,EAAgC;AAC1D,UAAA,WAAA,CAAY,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC9B,YAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAC1C,cAAA,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,WAAA,EAAa,EAAE,CAAA;AAAA,YAC1C;AACA,YAAA,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,WAAW,CAAA,CAAG,KAAK,MAAM,CAAA;AAAA,UACpD,CAAC,CAAA;AAED,UAAA,aAAA,CAAc,OAAA,CAAQ,CAAC,OAAA,EAAS,WAAA,KAAgB;AAC9C,YAAA,MAAM,QAAA,GAAW,QAAQ,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,WAAW,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC5D,YAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,CAAC,CAAA,EAAG,SAAA;AAC5B,YAAA,OAAA,CAAQ,IAAI,CAAA,UAAA,EAAQ,WAAW,IAAI,OAAO,CAAA,cAAA,EAAiB,QAAQ,CAAA,CAAE,CAAA;AAAA,UACvE,CAAC,CAAA;AAAA,QACH;AAGA,QAAA,IACE,IAAA,CAAK,YAAA,IACL,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,CAAe,QAAA,CAAS,kBAAkB,CAAC,CAAA,EACxE;AACA,UAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,uCAAA,CAAoC,CAAA;AAChD,UAAA,IAAA,CAAK,SAAA,CACF,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,CAAe,QAAA,CAAS,kBAAkB,CAAC,CAAA,CAC3D,OAAA,CAAQ,CAAC,QAAA,KAAa;AACrB,YAAA,OAAA,CAAQ,IAAI,CAAA,UAAA,EAAQ,QAAA,CAAS,WAAW,CAAA,EAAA,EAAK,QAAA,CAAS,cAAc,CAAA,CAAE,CAAA;AAAA,UACxE,CAAC,CAAA;AAAA,QACL;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,WAAA,EAAa,EAAA;AAAA,UACb,WAAA,EAAa,EAAA;AAAA,UACb,KAAA,EAAO,6BAA6B,KAAK,CAAA,CAAA;AAAA,UACzC,KAAA,EAAO;AAAA,SACR,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,OAAO,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAK,EAAE,MAAA,KAAW,CAAA;AAAA,MAClD,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA,MAAA;AAAA,MACA,cAAc,mBAAA,CAAoB,MAAA;AAAA,MAClC,cAAc,mBAAA,CAAoB,MAAA;AAAA,MAClC,aAAa,MAAA,CAAO;AAAA,KACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CACJ,WAAA,EACA,WAAA,EACA,YACA,aAAA,EACyB;AACzB,IAAA,MAAM,SAAS,aAAA,CAAc,UAAA,CAAW,aAAA,IAAiB,OAAA,CAAQ,KAAK,CAAA;AAGtE,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,mBAAA,CAAoB,WAAW,MAAM,CAAA;AAClE,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,MAAA,CAAO,QAAA,EAAU,CAAA,CAAE,CAAA;AAAA,IACnE;AAEA,IAAA,MAAM,OAAA,GAAU,SAAA,CAAU,WAAA,EAAY,CAAE,IAAI,WAAW,CAAA;AACvD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,WAAW,CAAA,WAAA,CAAa,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,oBAAA,CAAqB,WAAW,CAAA;AAC7D,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,WAAW,CAAA,wBAAA,EAA2B,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,IAClF;AAEA,IAAA,MAAM,cAAA,GAAiB,aAAa,QAAA,EAAS;AAC7C,IAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,UAAA,CAAW,UAAU,CAAA;AACrD,IAAA,MAAM,iBAAA,GAAoB,aAAa,aAAA,EAAc;AAErD,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,WAAW,CAAA,CAAE,CAAA;AAAA,IACvE;AAEA,IAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,iBAAA,CAAkB,eAAe,CAAA;AAGtE,IAAA,MAAM,6BAA6B,SAAA,CAAU,iCAAA;AAAA,MAC3C,WAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,iBAAkC,EAAC;AAEzC,IAAA,KAAA,MAAW,GAAA,IAAO,0BAAA,CAA2B,MAAA,EAAO,EAAG;AACrD,MAAA,MAAM,WAAA,GAAc,GAAA,CACjB,oBAAA,EAAqB,CACrB,MAAA;AAAA,QACC,CAAC,QAAQ,GAAA,CAAI,cAAA,OAAqB,WAAA,IAAe,GAAA,CAAI,gBAAe,KAAM;AAAA,OAC5E;AAEF,MAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,QAAA,MAAM,mBAAmB,UAAA,KAAe,OAAA;AACxC,QAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,uBAAA,CAAwB,UAAU,CAAA;AAEjE,QAAA,cAAA,CAAe,IAAA,CAAK;AAAA,UAClB,WAAA,EAAa,IAAI,OAAA,EAAQ;AAAA,UACzB,WAAA,EAAa,GAAA,CAAI,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,UACpC,cAAA,EAAgB,IAAI,iBAAA,EAAkB;AAAA,UACtC,gBAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF;AAGA,IAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,qBAAA;AAAA,MAChC,WAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,iBAAA,CAAkB,UAAA,EAAY,gBAAgB,cAAc,CAAA;AAGnF,IAAA,MAAM,kBAAkB,IAAA,CAAK,uBAAA;AAAA,MAC3B,UAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO;AAAA,MACL,WAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,eAAA,EAAiB,UAAA;AAAA,MACjB,UAAA;AAAA,MACA,gBAAA,EAAkB,cAAA;AAAA,MAClB,SAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,yBAAA,CACZ,eAAA,EACA,OAAA,EACA,SAAA,EACA,MAAA,EACA,OAAA,EACA,gBAAA,EACA,iBAAA,GAA4B,CAAA,EAC5B,aAAA,GAAwB,CAAA,EACW;AACnC,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,QAAA,EAAU,WAAA,IAAe,CAAA;AACpD,IAAA,MAAM,uBAAiD,EAAC;AACxD,IAAA,IAAI,SAAA,GAAY,iBAAA;AAGhB,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,UAAA,CAAW,eAAA,EAAiB,WAAW,CAAA;AAE3D,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CAAQ,GAAA;AAAA,QACjC,MAAM,GAAA,CAAI,OAAO,CAAC,WAAA,EAAa,YAAY,CAAA,KAAM;AAC/C,UAAA,IAAI;AACF,YAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,mBAAA;AAAA,cACxB,WAAA;AAAA,cACA,YAAA;AAAA,cACA,OAAA;AAAA,cACA,SAAA;AAAA,cACA,MAAA;AAAA,cACA;AAAA,aACF;AAGA,YAAA,SAAA,EAAA;AACA,YAAA,IAAI,gBAAA,IAAoB,gBAAgB,CAAA,EAAG;AACzC,cAAA,gBAAA,CAAiB,MAAA,CAAO,SAAA,EAAW,CAAA,4CAAA,EAAY,WAAW,CAAA,CAAE,CAAA;AAAA,YAC9D;AAEA,YAAA,OAAO,MAAA;AAAA,UACT,SAAS,KAAA,EAAO;AAEd,YAAA,SAAA,EAAA;AACA,YAAA,IAAI,gBAAA,IAAoB,gBAAgB,CAAA,EAAG;AACzC,cAAA,gBAAA,CAAiB,MAAA,CAAO,SAAA,EAAW,CAAA,mBAAA,EAAO,WAAW,CAAA,2BAAA,CAAS,CAAA;AAAA,YAChE;AAEA,YAAA,wBAAA,CAAyB,yBAAA,CAA0B,aAAa,KAAA,EAAgB;AAAA,cAC9E,SAAA,EAAW;AAAA,aACZ,CAAA;AACD,YAAA,OAAO,IAAA;AAAA,UACT;AAAA,QACF,CAAC;AAAA,OACH;AAGA,MAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,MAAA,KAAW;AAC/B,QAAA,IAAI,MAAA,EAAQ;AACV,UAAA,oBAAA,CAAqB,KAAK,MAAM,CAAA;AAAA,QAClC;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,oBAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAA,CACZ,WAAA,EACA,cACA,OAAA,EACA,SAAA,EACA,QACA,OAAA,EACwC;AAExC,IAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,gBAAA,CAAiB,WAAA,EAAa,MAAM,CAAA;AACvE,IAAA,MAAM,kBAAkB,aAAA,CAAc,MAAA;AAGtC,IAAA,MAAM,YAAA,GAAe,MAAM,IAAA,CAAK,kBAAA;AAAA,MAC9B,WAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA,OAAA,CAAQ,iBAAA,IAAqB,MAAA,CAAO,QAAA,EAAU,iBAAA,IAAqB;AAAA,KACrE;AAEA,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,0BAAA,GAA6B,KAAA;AACjC,IAAA,IAAI,MAAA,CAAO,UAAU,sBAAA,EAAwB;AAC3C,MAAA,IAAI;AACF,QAAA,MAAM,cAAA,GAAiB,YAAA,CAAa,aAAA,EAAc,EAAG,QAAA,EAAS;AAC9D,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,eAAA,CAAgB,4BAAA;AAAA,YAChD,WAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,0BAAA,GAA6B,cAAA,CAAe,kBAAA;AAG5C,UAAA,IAAI,0BAAA,IAA8B,MAAA,CAAO,QAAA,CAAS,qBAAA,EAAuB;AAEvE,YAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,kBAAA;AAAA,cACjC,WAAA;AAAA,cACA,YAAA;AAAA,cACA,QAAA;AAAA,cACA,OAAA,CAAQ,iBAAA,IAAqB,MAAA,CAAO,QAAA,EAAU,iBAAA,IAAqB;AAAA,aACrE;AACA,YAAA,IAAI,eAAA,EAAiB;AACnB,cAAA,MAAA,CAAO,MAAA,CAAO,cAAc,eAAe,CAAA;AAAA,YAC7C;AAAA,UACF;AAAA,QACF;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,wBAAA,CAAyB,0BAAA,CAA2B,aAAa,KAAc,CAAA;AAAA,MACjF;AAAA,IACF;AAGA,IAAA,MAAM,gBAAA,GAAmB,UACtB,iCAAA,CAAkC,OAAA,CAAQ,SAAQ,EAAG,WAAW,EAChE,eAAA,EAAgB;AAGnB,IAAA,IAAI,0BAAA,IAA8B,MAAA,CAAO,QAAA,EAAU,sBAAA,EAAwB;AACzE,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,CAAA,6CAAA,EAAyC,WAAW,CAAA,CAAA,EAAI,YAAA,CAAa,cAAc,CAAA;AAAA,OACrF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,GAAG,YAAA;AAAA,MACH,gBAAA;AAAA,MACA,gBAAA,EAAkB,8BAA8B,YAAA,CAAa;AAAA,KAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,CAAc,OAAY,SAAA,EAA0B;AAC1D,IAAA,MAAM,SAAgB,EAAC;AACvB,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,SAAA,EAAW;AAChD,MAAA,MAAA,CAAO,KAAK,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,kBAAA,CACZ,WAAA,EACA,YAAA,EACA,QACA,iBAAA,EACwC;AACxC,IAAA,IAAI;AAEF,MAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,eAAA,CAAgB,mBAAmB,WAAW,CAAA;AAE7E,MAAA,IAAI,aAAA;AAEJ,MAAA,QAAQ,MAAA;AAAQ,QACd,KAAK,QAAA;AACH,UAAA,aAAA,GAAgB,OAAA,CAAQ,UAAA,CAAW,WAAA,CAAY,aAAa,CAAA;AAC5D,UAAA;AAAA,QACF,KAAK,UAAA;AACH,UAAA,aAAA,GAAgB,MAAM,IAAA,CAAK,eAAA,CAAgB,kBAAA,CAAmB,WAAW,CAAA;AACzE,UAAA;AAAA,QACF,KAAK,QAAA;AACH,UAAA,MAAM,iBAAiB,MAAM,IAAA,CAAK,eAAA,CAAgB,iBAAA,CAAkB,aAAa,CAAC,CAAA;AAClF,UAAA,IAAI,CAAC,cAAA,CAAe,CAAC,CAAA,EAAG;AACtB,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,WAAW,CAAA,CAAE,CAAA;AAAA,UACxD;AACA,UAAA,aAAA,GAAgB,eAAe,CAAC,CAAA;AAChC,UAAA;AAAA,QACF,KAAK,OAAA;AAAA,QACL,KAAK,OAAA;AACH,UAAA,aAAA,GAAgB,MAAM,IAAA,CAAK,qBAAA,CAAsB,WAAA,EAAa,cAAc,MAAM,CAAA;AAClF,UAAA;AAAA,QACF;AACE,UAAA,aAAA,GAAgB,OAAA,CAAQ,UAAA,CAAW,WAAA,CAAY,aAAa,CAAA;AAAA;AAIhE,MAAA,IAAI,CAAC,iBAAA,IAAqB,aAAA,CAAc,YAAA,EAAa,EAAG;AACtD,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,cAAA,GAAiB,aAAa,aAAA,EAAc;AAClD,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,IAAI,CAAC,aAAA,CAAc,WAAA,CAAY,cAAc,CAAA,EAAG;AAC9C,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,UAAA,GAAa,cAAA,CAAe,iBAAA,CAAkB,aAAa,CAAA;AAGjE,MAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,eAAA,CAAgB,4BAAA;AAAA,QAChD,WAAA;AAAA,QACA,eAAe,QAAA;AAAS,OAC1B;AAEA,MAAA,OAAO;AAAA,QACL,WAAA;AAAA,QACA,cAAA,EAAgB,eAAe,QAAA,EAAS;AAAA,QACxC,aAAA,EAAe,cAAc,QAAA,EAAS;AAAA,QACtC,aAAA,EAAe,cAAc,QAAA,EAAS;AAAA,QACtC,UAAA;AAAA,QACA,kBAAkB,cAAA,CAAe,kBAAA;AAAA,QACjC,kBAAkB;AAAC;AAAA,OACrB;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,wBAAA,CAAyB,yBAAA,CAA0B,aAAa,KAAA,EAAgB;AAAA,QAC9E,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,qBAAA,CACZ,WAAA,EACA,YAAA,EACA,UAAA,EACkB;AAClB,IAAA,MAAM,cAAA,GAAiB,aAAa,aAAA,EAAc;AAClD,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,WAAW,CAAA,CAAE,CAAA;AAAA,IACvE;AAEA,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,eAAA,CAAgB,mBAAmB,WAAW,CAAA;AAG7E,IAAA,MAAM,kBAAA,GAAqB,WAAA,CAAY,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM;AAC5D,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,UAAA,CAAW,CAAC,CAAA;AACpC,QAAA,MAAM,IAAA,GAAO,cAAA,CAAe,iBAAA,CAAkB,OAAO,CAAA;AAErD,QAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,UAAA,OAAO,IAAA,KAAS,WAAW,IAAA,KAAS,MAAA;AAAA,QACtC,CAAA,MAAA,IAAW,eAAe,OAAA,EAAS;AACjC,UAAA,OAAO,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,OAAA,IAAW,IAAA,KAAS,MAAA;AAAA,QAC1D;AAEA,QAAA,OAAO,KAAA;AAAA,MACT,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,kBAAA,CAAmB,WAAW,CAAA,EAAG;AACnC,MAAA,OAAO,cAAA;AAAA,IACT;AAGA,IAAA,IAAI,CAAC,kBAAA,CAAmB,CAAC,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,WAAW,CAAA,CAAE,CAAA;AAAA,IACnE;AACA,IAAA,OAAO,OAAA,CAAQ,UAAA,CAAW,kBAAA,CAAmB,CAAC,CAAC,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,QAAA,EAA0C;AAChE,IAAA,IAAI,SAAS,gBAAA,EAAkB;AAC7B,MAAA,OAAO,2BAAA;AAAA,IACT;AAEA,IAAA,QAAQ,SAAS,UAAA;AAAY,MAC3B,KAAK,OAAA;AACH,QAAA,OAAO,gCAAA;AAAA,MACT,KAAK,OAAA;AACH,QAAA,OAAO,gCAAA;AAAA,MACT,KAAK,OAAA;AACH,QAAA,OAAO,gCAAA;AAAA,MACT;AACE,QAAA,OAAO,kBAAA;AAAA;AACX,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,qBAAA,CACZ,WAAA,EACA,cAAA,EACA,UAAA,EACyB;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,CAAC,eAAA,EAAiB,WAAW,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,QACvD,IAAA,CAAK,eAAA,CAAgB,4BAAA,CAA6B,WAAA,EAAa,cAAc,CAAA;AAAA,QAC7E,IAAA,CAAK,eAAA,CAAgB,4BAAA,CAA6B,WAAA,EAAa,UAAU;AAAA,OAC1E,CAAA;AAED,MAAA,MAAM,oBAAA,GACJ,eAAA,CAAgB,eAAA,CAAgB,MAAA,GAAS,YAAY,eAAA,CAAgB,MAAA;AACvE,MAAA,MAAM,qBAAqB,IAAA,CAAK,GAAA;AAAA,QAC9B,CAAA;AAAA,QACA,WAAA,CAAY,eAAA,CAAgB,MAAA,GAAS,eAAA,CAAgB,eAAA,CAAgB;AAAA,OACvE;AAEA,MAAA,IAAI,cAAA,GAAmD,MAAA;AACvD,MAAA,IAAI,uBAAuB,CAAA,EAAG;AAC5B,QAAA,cAAA,GAAiB,QAAA;AAAA,MACnB,CAAA,MAAA,IAAW,qBAAqB,CAAA,EAAG;AACjC,QAAA,cAAA,GAAiB,OAAA;AAAA,MACnB;AAEA,MAAA,OAAO;AAAA,QACL,kBAAA,EAAoB,eAAA,CAAgB,kBAAA,IAAsB,WAAA,CAAY,kBAAA;AAAA,QACtE,oBAAA,EAAsB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,oBAAoB,CAAA;AAAA,QACtD,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO;AAAA,QACL,kBAAA,EAAoB,KAAA;AAAA,QACpB,oBAAA,EAAsB,CAAA;AAAA,QACtB,kBAAA,EAAoB,CAAA;AAAA,QACpB,cAAA,EAAgB;AAAA,OAClB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,wBAAwB,UAAA,EAA+C;AAC7E,IAAA,QAAQ,UAAA;AAAY,MAClB,KAAK,OAAA;AACH,QAAA,OAAO,KAAA;AAAA,MACT,KAAK,OAAA;AACH,QAAA,OAAO,QAAA;AAAA,MACT,KAAK,OAAA;AACH,QAAA,OAAO,MAAA;AAAA,MACT;AACE,QAAA,OAAO,QAAA;AAAA;AACX,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAA,CACN,UAAA,EACA,cAAA,EACA,cAAA,EAC2B;AAE3B,IAAA,IAAI,cAAA,CAAe,uBAAuB,CAAA,EAAG;AAC3C,MAAA,OAAO,UAAA,KAAe,UAAU,QAAA,GAAW,KAAA;AAAA,IAC7C;AAGA,IAAA,IAAI,cAAA,CAAe,qBAAqB,CAAA,EAAG;AACzC,MAAA,OAAO,MAAA;AAAA,IACT;AAGA,IAAA,MAAM,uBAAuB,cAAA,CAAe,MAAA;AAE5C,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,OAAO,oBAAA,GAAuB,IAAI,MAAA,GAAS,QAAA;AAAA,IAC7C,CAAA,MAAA,IAAW,eAAe,OAAA,EAAS;AACjC,MAAA,OAAO,oBAAA,GAAuB,KAAK,QAAA,GAAW,KAAA;AAAA,IAChD,CAAA,MAAO;AACL,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAA,CACN,UAAA,EACA,cAAA,EACA,cAAA,EACU;AACV,IAAA,MAAM,kBAA4B,EAAC;AAEnC,IAAA,IAAI,cAAA,CAAe,uBAAuB,CAAA,EAAG;AAC3C,MAAA,eAAA,CAAgB,KAAK,qEAA8D,CAAA;AAAA,IACrF;AAEA,IAAA,IAAI,cAAA,CAAe,qBAAqB,CAAA,EAAG;AACzC,MAAA,eAAA,CAAgB,KAAK,+EAAqE,CAAA;AAAA,IAC5F;AAEA,IAAA,IAAI,eAAe,OAAA,EAAS;AAC1B,MAAA,eAAA,CAAgB,KAAK,iEAA0D,CAAA;AAC/E,MAAA,eAAA,CAAgB,KAAK,sDAA+C,CAAA;AAAA,IACtE;AAEA,IAAA,MAAM,yBAAyB,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,gBAAgB,CAAA;AAC9E,IAAA,IAAI,sBAAA,CAAuB,SAAS,CAAA,EAAG;AACrC,MAAA,eAAA,CAAgB,IAAA,CAAK,CAAA,UAAA,EAAM,sBAAA,CAAuB,MAAM,CAAA,iCAAA,CAAmC,CAAA;AAAA,IAC7F;AAEA,IAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,MAAA,eAAA,CAAgB,KAAK,iEAA0D,CAAA;AAAA,IACjF;AAEA,IAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,MAAA,eAAA,CAAgB,KAAK,0CAAqC,CAAA;AAAA,IAC5D;AAEA,IAAA,OAAO,eAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,wBAAA,CACZ,YAAA,EACA,SAAA,EACA,eAAA,EAC0B;AAC1B,IAAA,MAAM,cAA+B,EAAC;AACtC,IAAA,MAAM,QAAA,GAAW,UAAU,WAAA,EAAY;AACvC,IAAA,MAAM,WAAA,GAAc,SAAS,MAAA,EAAO;AAEpC,IAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AAEtC,MAAA,MAAM,sBAAsB,WAAA,CAAY,MAAA;AAAA,QACtC,CAAC,OAAA,KAAiB,OAAA,IAAW,OAAA,CAAQ,qBAAqB,WAAW;AAAA,OACvE;AAEA,MAAA,IAAI,mBAAA,CAAoB,UAAU,CAAA,EAAG;AACnC,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,aAAA,GAA+B,IAAA;AACnC,MAAA,IAAI,gBAAA,GAAgD,OAAA;AAGpD,MAAA,MAAM,iBAAiB,eAAA,CAAgB,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,WAAW,CAAA;AAChF,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,aAAA,GAAgB,cAAA,CAAe,UAAA;AAC/B,QAAA,gBAAA,GAAmB,cAAA,CAAe,UAAA;AAAA,MACpC,CAAA,MAAO;AAEL,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,eAAA,CAAgB,mBAAmB,WAAW,CAAA;AAC7E,UAAA,aAAA,GAAgB,WAAA,CAAY,aAAA;AAAA,QAC9B,SAAS,KAAA,EAAO;AACd,UAAA,wBAAA,CAAyB,yBAAA,CAA0B,aAAa,KAAA,EAAgB;AAAA,YAC9E,SAAA,EAAW;AAAA,WACZ,CAAA;AACD,UAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,aAAA,EAAe;AAGpB,MAAA,KAAA,MAAW,WAAW,mBAAA,EAAqB;AACzC,QAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,oBAAA,CAAqB,WAAW,CAAA;AAC7D,QAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,QAAA,MAAM,cAAA,GAAiB,aAAa,aAAA,EAAc;AAClD,QAAA,IAAI,CAAC,cAAA,EAAgB;AAErB,QAAA,MAAM,oBAAA,GAAuB,eAAe,QAAA,EAAS;AAGrD,QAAA,IAAI,yBAAyB,aAAA,EAAe;AAG5C,QAAA,MAAM,2BAA2B,eAAA,CAAgB,IAAA;AAAA,UAC/C,CAAC,MAAM,CAAA,CAAE,WAAA,KAAgB,eAAe,CAAA,CAAE,WAAA,KAAgB,QAAQ,OAAA;AAAQ,SAC5E;AAEA,QAAA,IAAI,wBAAA,EAA0B;AAE5B,UAAA,wBAAA,CAAyB,UAAA,GAAa,aAAA;AACtC,UAAA,wBAAA,CAAyB,MAAA,GAAS,CAAA,8BAAA,EAAiC,wBAAA,CAAyB,MAAM,CAAA,CAAA;AAAA,QACpG,CAAA,MAAO;AAEL,UAAA,MAAM,gBAAA,GAAmB,UACtB,iCAAA,CAAkC,OAAA,CAAQ,SAAQ,EAAG,WAAW,EAChE,eAAA,EAAgB;AAEnB,UAAA,MAAM,UAAA,GAA4B;AAAA,YAChC,WAAA,EAAa,QAAQ,OAAA,EAAQ;AAAA,YAC7B,WAAA;AAAA,YACA,cAAA,EAAgB,oBAAA;AAAA,YAChB,UAAA,EAAY,aAAA;AAAA,YACZ,UAAA,EAAY,gBAAA;AAAA,YACZ,MAAA,EAAQ,CAAA,gCAAA,CAAA;AAAA,YACR,gBAAA;AAAA,YACA,mBAAA,EAAqB,IAAA;AAAA;AAAA,YACrB,UAAA,EAAY,KAAA;AAAA,YACZ,WAAA,EAAa;AAAA,WACf;AAEA,UAAA,WAAA,CAAY,KAAK,UAAU,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,WAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAA,CACN,WAAA,EACA,cAAA,EACA,eAAA,EACwB;AAExB,IAAA,IAAI,eAAA,GAAwC,IAAA;AAE5C,IAAA,KAAA,MAAW,eAAe,eAAA,EAAiB;AACzC,MAAA,MAAM,gBAAgB,cAAA,CAAe,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,WAAW,CAAA;AAC9E,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,eAAA,GAAkB,aAAA;AAClB,QAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,eAAA,GAAkB,cAAA,CAAe,CAAC,CAAA,IAAK,IAAA;AAAA,IACzC;AAGA,IAAA,MAAM,kBAAkB,eAAA,EAAiB,UAAA;AACzC,IAAA,IAAI,mBAAmB,eAAA,EAAiB;AACtC,MAAA,KAAA,MAAW,UAAU,cAAA,EAAgB;AACnC,QAAA,IAAI,MAAA,CAAO,WAAA,KAAgB,eAAA,CAAgB,WAAA,EAAa;AACtD,UAAA,MAAA,CAAO,UAAA,GAAa,eAAA;AACpB,UAAA,MAAA,CAAO,SAAS,CAAA,qCAAA,EAAwC,eAAA,CAAgB,WAAW,CAAA,GAAA,EAAM,OAAO,MAAM,CAAA,CAAA;AAAA,QACxG;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,cAAA,GAAiB,IAAI,GAAA,CAAI,cAAA,CAAe,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAC,CAAA;AACtE,IAAA,IAAI,cAAA,CAAe,OAAO,CAAA,EAAG;AAC3B,MAAA,OAAO;AAAA,QACL,WAAA;AAAA,QACA,QAAA,EAAU,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACnC,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,gBAAgB,CAAA,CAAE,cAAA;AAAA,UAClB,iBAAiB,CAAA,CAAE;AAAA,SACrB,CAAE,CAAA;AAAA,QACF,cAAA,EAAgB,CAAA,mDAAA,EAAsD,eAAA,EAAiB,WAAW,cAAc,eAAe,CAAA,WAAA;AAAA,OACjI;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;;;ACjqCO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAA6B,mBAAA,EAA0C;AAA1C,IAAA,IAAA,CAAA,mBAAA,GAAA,mBAAA;AAAA,EAA2C;AAAA;AAAA;AAAA;AAAA,EAKxE,MAAM,kBAAkB,UAAA,EAAyC;AAC/D,IAAA,MAAMP,KAAAA,GAAO,UAAA,GAAa,aAAA,CAAc,UAAA,CAAW,UAAU,CAAA,GAAI,MAAA;AAEjE,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,mBAAA,CAAoB,kBAAkBA,KAAI,CAAA;AAEvE,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,UAAA,GACI,CAAA,oCAAA,EAAuC,UAAU,CAAA,CAAA,GACjD;AAAA,OACN;AAAA,IACF;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,aAAA,EAAgD;AACrE,IAAA,MAAMA,QAAO,aAAA,CAAc,UAAA,CAAW,aAAA,IAAiB,OAAA,CAAQ,KAAK,CAAA;AAGpE,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,mBAAA,CAAoB,WAAWA,KAAI,CAAA;AAEhE,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,OAAO;AAAA,QACL,IAAA,EAAMA,MAAK,QAAA,EAAS;AAAA,QACpB,IAAA,EAAMA,MAAK,gBAAA,EAAiB;AAAA,QAC5B,OAAA,EAAS,KAAA;AAAA,QACT,WAAA,EAAa,KAAA;AAAA,QACb,WAAA,EAAa,KAAA;AAAA,QACb,YAAA,EAAc,CAAA;AAAA,QACd,YAAA,EAAc,CAAA;AAAA,QACd,cAAc;AAAC,OACjB;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,UAAU,WAAA,EAAY;AACvC,IAAA,MAAM,QAAA,GAAW,UAAU,WAAA,EAAY;AAEvC,IAAA,OAAO;AAAA,MACL,IAAA,EAAMA,MAAK,QAAA,EAAS;AAAA,MACpB,IAAA,EAAMA,MAAK,gBAAA,EAAiB;AAAA,MAC5B,OAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa,CAAC,QAAA,CAAS,OAAA,EAAQ;AAAA,MAC/B,WAAA,EAAa,CAAC,QAAA,CAAS,OAAA,EAAQ;AAAA,MAC/B,YAAA,EAAc,SAAS,IAAA,EAAK;AAAA,MAC5B,YAAA,EAAc,SAAS,IAAA,EAAK;AAAA,MAC5B,YAAA,EAAc,SAAS,eAAA;AAAgB,KACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,aAAA,EAA4D;AAClF,IAAA,MAAMA,QAAO,aAAA,CAAc,UAAA,CAAW,aAAA,IAAiB,OAAA,CAAQ,KAAK,CAAA;AACpE,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,aAAa,CAAA;AAE/D,IAAA,IAAI,CAAC,cAAc,OAAA,EAAS;AAC1B,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,SAAA,EAAW,aAAA;AAAA,QACX,MAAA,EAAQ,CAAC,4BAA4B,CAAA;AAAA,QACrC,UAAU,EAAC;AAAA,QACX,eAAA,EAAiB;AAAA,UACf,6CAAA;AAAA,UACA,iCAAA;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,mBAAA,CAAoB,WAAWA,KAAI,CAAA;AAChE,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,IACrE;AAGA,IAAA,MAAM,gBAAA,GAAmB,UAAU,mBAAA,EAAoB;AACvD,IAAA,MAAM,kBAA4B,EAAC;AAGnC,IAAA,IAAI,CAAC,cAAc,WAAA,EAAa;AAC9B,MAAA,eAAA,CAAgB,KAAK,6DAA6D,CAAA;AAAA,IACpF;AAEA,IAAA,IAAI,aAAA,CAAc,iBAAiB,CAAA,EAAG;AACpC,MAAA,eAAA,CAAgB,IAAA;AAAA,QACd;AAAA,OACF;AAAA,IACF;AAEA,IAAA,IAAI,aAAA,CAAc,eAAe,EAAA,EAAI;AACnC,MAAA,eAAA,CAAgB,IAAA;AAAA,QACd;AAAA,OACF;AAAA,IACF;AAGA,IAAA,MAAM,iBAAA,GAAoB,SAAA,CAAU,WAAA,EAAY,CAAE,QAAA,EAAS;AAC3D,IAAA,MAAM,SAAA,GAAY,CAAC,GAAG,gBAAA,CAAiB,WAAU,EAAG,GAAG,iBAAA,CAAkB,SAAA,EAAW,CAAA;AACpF,IAAA,MAAM,WAAA,GAAc,CAAC,GAAG,gBAAA,CAAiB,aAAY,EAAG,GAAG,iBAAA,CAAkB,WAAA,EAAa,CAAA;AAE1F,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,gBAAA,CAAiB,UAAA,EAAW,IAAK,kBAAkB,UAAA,EAAW;AAAA,MACvE,SAAA,EAAW,aAAA;AAAA,MACX,MAAA,EAAQ,SAAA;AAAA,MACR,QAAA,EAAU,WAAA;AAAA,MACV;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,aAAA,EAAgD;AAChE,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,iBAAA,CAAkB,aAAa,CAAA;AAC5D,IAAA,MAAM,QAAA,GAAW,UAAU,WAAA,EAAY;AAEvC,IAAA,OAAO,QAAA,CAAS,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,OAAA,MAAa;AAAA,MACzC,IAAA,EAAM,QAAQ,OAAA,EAAQ;AAAA,MACtB,YAAA,EAAc,OAAA,CAAQ,eAAA,EAAgB,CAAE,MAAA;AAAA,MACxC,QAAA,EAAU,QAAQ,eAAA,EAAgB;AAAA,MAClC,IAAA,EAAM,QAAQ,OAAA;AAAQ,KACxB,CAAE,CAAA;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,aAAA,EAAgD;AAChE,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,iBAAA,CAAkB,aAAa,CAAA;AAC5D,IAAA,MAAM,QAAA,GAAW,UAAU,WAAA,EAAY;AAEvC,IAAA,OAAO,QAAA,CAAS,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,GAAA,KAAQ;AACpC,MAAA,MAAM,iBAAA,GAAoB,IAAI,oBAAA,EAAqB;AACnD,MAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AAGzC,MAAA,MAAM,kBAAoC,EAAC;AAC3C,MAAA,MAAM,QAAA,GAAW;AAAA,QACf,cAAA;AAAA,QACA,iBAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,QAAA,MAAM,IAAA,GAAO,YAAA,CAAa,qBAAA,CAAsB,OAAO,CAAA;AACvD,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,OAAO,CAAA,IAAK,IAAA,EAAM;AAClC,UAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,YACnB,IAAA;AAAA,YACA,OAAA;AAAA,YACA,IAAA,EAAM,OAAA;AAAA,YACN,kBAAA,EAAoB,OAAA,CAAQ,UAAA,CAAW,UAAU;AAAA,WAClD,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,IAAI,OAAA,EAAQ;AAAA,QAClB,IAAA,EAAM,GAAA,CAAI,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,QAC7B,cAAA,EAAgB,IAAA;AAAA;AAAA,QAChB,iBAAA,EAAmB,iBAAA,CAAkB,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,UACjD,WAAA,EAAa,IAAI,cAAA,EAAe;AAAA,UAChC,WAAA,EAAa,IAAI,cAAA,EAAe;AAAA,UAChC,cAAA,EAAgB,IAAI,iBAAA;AAAkB,SACxC,CAAE,CAAA;AAAA,QACF,YAAA,EAAc;AAAA,OAChB;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,aAAA,EAA0C;AAC3D,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,iBAAA,CAAkB,aAAa,CAAA;AAC5D,MAAA,OAAO,CAAC,SAAA,CAAU,WAAA,EAAY,CAAE,OAAA,EAAQ;AAAA,IAC1C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAA,CACJ,WAAA,EACA,aAAA,EACwB;AACxB,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,iBAAA,CAAkB,aAAa,CAAA;AAC5D,IAAA,MAAM,oBAAA,GAAuB,SAAA,CAAU,WAAA,EAAY,CAAE,yBAAyB,WAAW,CAAA;AAEzF,IAAA,OAAO,oBAAA,CAAqB,GAAA,CAAI,CAAC,GAAA,KAAQ;AACvC,MAAA,MAAM,iBAAA,GAAoB,GAAA,CACvB,oBAAA,EAAqB,CACrB,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,cAAA,EAAe,KAAM,WAAW,CAAA;AAEvD,MAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,MAAA,MAAM,kBAAoC,EAAC;AAC3C,MAAA,MAAM,QAAA,GAAW;AAAA,QACf,cAAA;AAAA,QACA,iBAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,QAAA,MAAM,IAAA,GAAO,YAAA,CAAa,qBAAA,CAAsB,OAAO,CAAA;AACvD,QAAA,KAAA,MAAW,CAAC,IAAA,EAAM,OAAO,CAAA,IAAK,IAAA,EAAM;AAClC,UAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,YACnB,IAAA;AAAA,YACA,OAAA;AAAA,YACA,IAAA,EAAM,OAAA;AAAA,YACN,kBAAA,EAAoB,OAAA,CAAQ,UAAA,CAAW,UAAU;AAAA,WAClD,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,IAAI,OAAA,EAAQ;AAAA,QAClB,IAAA,EAAM,GAAA,CAAI,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,QAC7B,cAAA,EAAgB,IAAA;AAAA,QAChB,iBAAA,EAAmB,iBAAA,CAAkB,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,UACjD,WAAA,EAAa,IAAI,cAAA,EAAe;AAAA,UAChC,WAAA,EAAa,IAAI,cAAA,EAAe;AAAA,UAChC,cAAA,EAAgB,IAAI,iBAAA;AAAkB,SACxC,CAAE,CAAA;AAAA,QACF,YAAA,EAAc;AAAA,OAChB;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,aAAA,EAAiD;AACvE,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,iBAAA,CAAkB,aAAa,CAAA;AAC5D,IAAA,MAAM,QAAA,GAAW,UAAU,WAAA,EAAY;AACvC,IAAA,MAAM,QAAA,GAAW,UAAU,WAAA,EAAY;AAGvC,IAAA,IAAI,iBAAA,GAAoB,CAAA;AACxB,IAAA,IAAI,mBAAA,GAAsB,CAAA;AAC1B,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,YAAA,EAAc,CAAA;AAAA,MACd,eAAA,EAAiB,CAAA;AAAA,MACjB,gBAAA,EAAkB,CAAA;AAAA,MAClB,oBAAA,EAAsB;AAAA,KACxB;AAEA,IAAA,KAAA,MAAW,GAAA,IAAO,QAAA,CAAS,MAAA,EAAO,EAAG;AACnC,MAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,MAAA,MAAM,WAAA,GAAc,IAAI,oBAAA,EAAqB;AAE7C,MAAA,mBAAA,IAAuB,WAAA,CAAY,MAAA;AAEnC,MAAA,KAAA,MAAW,OAAA,IAAW,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,EAA0C;AACzF,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,qBAAA,CAAsB,OAAO,CAAA;AACnD,QAAA,eAAA,CAAgB,OAAO,KAAK,QAAA,CAAS,IAAA;AACrC,QAAA,iBAAA,IAAqB,QAAA,CAAS,IAAA;AAAA,MAChC;AAAA,IACF;AAGA,IAAA,IAAI,mBAAA,GAAsB,CAAA;AAC1B,IAAA,KAAA,MAAW,OAAA,IAAW,QAAA,CAAS,MAAA,EAAO,EAAG;AACvC,MAAA,mBAAA,IAAuB,OAAA,CAAQ,iBAAgB,CAAE,MAAA;AAAA,IACnD;AAEA,IAAA,OAAO;AAAA,MACL,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,SAAA,CAAU,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,QACnC,IAAA,EAAM,SAAA,CAAU,OAAA,EAAQ,CAAE,gBAAA;AAAiB,OAC7C;AAAA,MACA,QAAA,EAAU;AAAA,QACR,KAAA,EAAO,SAAS,IAAA,EAAK;AAAA,QACrB,qBAAA,EAAuB,QAAA,CAAS,iCAAA,EAAkC,CAAE;AAAA,OACtE;AAAA,MACA,QAAA,EAAU;AAAA,QACR,KAAA,EAAO,SAAS,IAAA,EAAK;AAAA,QACrB,YAAA,EAAc;AAAA,OAChB;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,KAAA,EAAO,iBAAA;AAAA,QACP,iBAAA,EAAmB,mBAAA;AAAA,QACnB,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAe,UAAA,EAA8C;AAGjE,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,gBAAA,CAAiB,UAAU,CAAA;AAC5D,IAAA,OAAO,aAAA,CAAc,OAAA,GAAU,CAAC,aAAa,IAAI,EAAC;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,aAAA,EAAwD;AACxE,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,iBAAA,CAAkB,aAAa,CAAA;AAC7D,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,iBAAA,CAAkB,aAAa,CAAA;AAExD,IAAA,MAAM,SAAwB,EAAC;AAC/B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,oBAAA,CAAqB,UAAA,EAAY,OAAO,MAAM,CAAA;AAEjE,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,MAAA,EAAQ,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAA;AAAA,MAClC,UAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA,sBAAiB,IAAA;AAAK,KACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAA,CACN,UAAA,EACA,KAAA,EACA,MAAA,EACQ;AACR,IAAA,IAAI,KAAA,GAAQ,GAAA;AAGZ,IAAA,KAAA,IAAS,UAAA,CAAW,OAAO,MAAA,GAAS,EAAA;AAGpC,IAAA,KAAA,IAAS,UAAA,CAAW,SAAS,MAAA,GAAS,CAAA;AAGtC,IAAA,IAAI,CAAC,MAAM,SAAA,EAAW;AACpB,MAAA,KAAA,IAAS,EAAA;AAAA,IACX;AAEA,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,KAAA,KAAU,CAAA,EAAG;AAC9B,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,gCAAA;AAAA,QACT,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,KAAA,KAAU,CAAA,EAAG;AAC9B,MAAA,KAAA,IAAS,EAAA;AACT,MAAA,MAAA,CAAO,IAAA,CAAK;AAAA,QACV,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,qBAAA;AAAA,QACT,UAAA,EAAY;AAAA,OACb,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,KAAA,CAAM,YAAA,CAAa,iBAAA,GAAoB,CAAA,EAAG;AAC5C,MAAA,KAAA,IAAS,CAAA;AAAA,IACX;AAEA,IAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,KAAA,EAAuD;AAC7E,IAAA,IAAI,KAAA,IAAS,IAAI,OAAO,WAAA;AACxB,IAAA,IAAI,KAAA,IAAS,IAAI,OAAO,MAAA;AACxB,IAAA,IAAI,KAAA,IAAS,IAAI,OAAO,MAAA;AACxB,IAAA,OAAO,MAAA;AAAA,EACT;AACF,CAAA;;;ACjbO,IAAM,OAAA,GAAN,MAAM,QAAA,CAAQ;AAAA,EACF,EAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,IAAA;AAAA,EAET,WAAA,CACN,EAAA,EACA,IAAA,EACA,YAAA,EACA,OAAoB,QAAA,eACpB;AACA,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,GAAA,CAAI,YAAY,CAAA;AACxC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,OACZ,EAAA,EACA,IAAA,EACA,eAAuC,EAAC,EACxC,OAAoB,QAAA,eACX;AACT,IAAA,MAAM,aAAA,uBAAoB,GAAA,EAA+B;AAEzD,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,YAAY,KAAK,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA,EAAG;AACtE,MAAA,IAAI;AACF,QAAA,aAAA,CAAc,GAAA,CAAI,WAAA,EAAa,YAAA,CAAa,UAAA,CAAW,YAAY,CAAC,CAAA;AAAA,MACtE,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,mCAAA,EAAsC,WAAW,CAAA,cAAA,EAAiB,IAAI,MAAM,YAAY,CAAA;AAAA,SAC1F;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,QAAA,CAAQ,EAAA,EAAI,IAAA,EAAM,eAAe,IAAI,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKO,KAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,eAAA,GAA0D;AAC/D,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,eAAA,GAAiC;AACtC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKO,cAAc,WAAA,EAAmC;AACtD,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKO,qBAAqB,WAAA,EAA+C;AACzE,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA,IAAK,IAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKO,uBAAA,CAAwB,aAA0B,YAAA,EAA4B;AACnF,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,YAAA,CAAa,UAAA,CAAW,YAAY,CAAA;AACxD,MAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,WAAA,EAAa,WAAW,CAAA;AAAA,IAChD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,WAAW,CAAA,GAAA,EAAM,YAAY,CAAA,CAAE,CAAA;AAAA,IACvF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAiB,WAAA,EAAmC;AACzD,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,WAAW,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKO,yBAAA,CAA0B,aAA0B,gBAAA,EAAmC;AAC5F,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA;AACxD,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,GAAiB,YAAA,CAAa,UAAA,CAAW,gBAAgB,CAAA;AAC/D,MAAA,OAAO,cAAA,CAAe,iBAAiB,cAAc,CAAA;AAAA,IACvD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,qCAAA,CACL,aACA,eAAA,EACe;AACf,IAAA,IAAI,CAAC,IAAA,CAAK,aAAA,CAAc,WAAW,CAAA,EAAG;AACpC,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,YAAA,CAAa,UAAA,CAAW,eAAe,CAAA;AACxD,MAAA,MAAM,YAAA,GAAe,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA;AAGtD,MAAA,IAAI,YAAA,CAAa,gBAAA,CAAiB,QAAQ,CAAA,EAAG;AAC3C,QAAA,OAAO,EAAC;AAAA,MACV;AAIA,MAAA,OAAO,CAAC,WAAW,CAAA;AAAA,IACrB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,CAAC,WAAW,CAAA;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAoC;AACzC,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAM,WAAqB,EAAC;AAG5B,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,IAAA,KAAS,CAAA,EAAG;AAChC,MAAA,QAAA,CAAS,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,UAAA,CAAY,CAAA;AAAA,IACjD;AAGA,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,YAAY,CAAA,IAAK,KAAK,YAAA,EAAc;AAE3D,MAAA,IAAI,CAAC,IAAA,CAAK,kBAAA,CAAmB,WAAW,CAAA,EAAG;AACzC,QAAA,MAAA,CAAO,IAAA,CAAK,CAAA,uBAAA,EAA0B,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,MACtD;AAGA,MAAA,IAAI,YAAA,CAAa,QAAA,EAAS,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AACzC,QAAA,QAAA,CAAS,IAAA,CAAK,CAAA,SAAA,EAAY,WAAW,CAAA,6CAAA,CAA+C,CAAA;AAAA,MACtF;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,uBAAA,CAAwB,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,QAAQ,QAAQ,CAAA;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA,EAKO,aAAA,GAA6B;AAClC,IAAA,MAAM,eAAuC,EAAC;AAE9C,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,YAAY,CAAA,IAAK,KAAK,YAAA,EAAc;AAC3D,MAAA,YAAA,CAAa,WAAW,CAAA,GAAI,YAAA,CAAa,QAAA,EAAS;AAAA,IACpD;AAEA,IAAA,OAAO;AAAA,MACL,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,YAAA;AAAA,MACA,MAAM,IAAA,CAAK;AAAA,KACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,gBAAgB,IAAA,EAA4B;AACxD,IAAA,OAAO,QAAA,CAAQ,OAAO,IAAA,CAAK,EAAA,EAAI,KAAK,IAAA,EAAM,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,IAAI,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,WAAA,EAA8B;AAEvD,IAAA,MAAM,qBAAA,GAAwB,0DAAA;AAC9B,IAAA,OAAO,qBAAA,CAAsB,KAAK,WAAW,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,KAAA,EAAyB;AACrC,IAAA,IAAI,IAAA,CAAK,EAAA,KAAO,KAAA,CAAM,EAAA,IAAM,IAAA,CAAK,IAAA,KAAS,KAAA,CAAM,IAAA,IAAQ,IAAA,CAAK,IAAA,KAAS,KAAA,CAAM,IAAA,EAAM;AAChF,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,IAAA,KAAS,KAAA,CAAM,aAAa,IAAA,EAAM;AACtD,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,YAAY,CAAA,IAAK,KAAK,YAAA,EAAc;AAC3D,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,WAAW,CAAA;AACrD,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,YAAA,CAAa,MAAA,CAAO,UAAU,CAAA,EAAG;AACnD,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAwBO,IAAM,0BAAN,MAA8B;AAAA,EACnC,WAAA,CACmB,OAAA,EACA,MAAA,EACA,QAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAChB;AAAA,EAEI,UAAA,GAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEO,SAAA,GAAsB;AAC3B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA;AAAA,EACxB;AAAA,EAEO,WAAA,GAAwB;AAC7B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC1B;AAAA,EAEO,SAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AAAA,EAC9B;AAAA,EAEO,WAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AAAA,EAChC;AACF,CAAA;;;AC5RO,IAAM,OAAA,GAAN,MAAM,QAAA,CAAQ;AAAA,EACF,EAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EAET,YACN,EAAA,EACA,IAAA,EACAA,KAAAA,EACA,YAAA,EACA,mBACA,YAAA,EACA;AACA,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAOA,KAAAA;AACZ,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,iBAAA,GAAoB,CAAC,GAAG,iBAAiB,CAAA;AAC9C,IAAA,IAAA,CAAK,YAAA,GAAe,EAAE,GAAG,YAAA,EAAa;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,MAAA,CACZ,EAAA,EACA,IAAA,EACAA,OACA,eAAA,EACS;AACT,IAAA,MAAM,YAAA,GAAe,oBAAA,CAAqB,eAAA,CAAgB,eAAe,CAAA;AACzE,IAAA,MAAM,iBAAA,GAAoB,QAAA,CAAQ,wBAAA,CAAyB,eAAe,CAAA;AAE1E,IAAA,OAAO,IAAI,QAAA,CAAQ,EAAA,EAAI,MAAMA,KAAAA,EAAM,YAAA,EAAc,mBAAmB,eAAe,CAAA;AAAA,EACrF;AAAA;AAAA;AAAA;AAAA,EAKO,KAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAyB;AAC9B,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,eAAA,GAAwC;AAC7C,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,oBAAA,GAA2C;AAChD,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,iBAAiB,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKO,sBAAA,GAA8C;AACnD,IAAA,OAAO,KAAK,iBAAA,CAAkB,GAAA;AAAA,MAC5B,CAAC,GAAA,KACC,IAAI,iBAAA,CAAkB,GAAA,CAAI,cAAA,EAAe,EAAG,GAAA,CAAI,cAAA,EAAe,EAAG,GAAA,CAAI,iBAAA,EAAmB;AAAA,KAC7F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,qBAAA,CAAsB,aAAqB,WAAA,EAA8B;AAC9E,IAAA,OAAO,KAAK,iBAAA,CAAkB,IAAA;AAAA,MAC5B,CAAC,QAAQ,GAAA,CAAI,cAAA,OAAqB,WAAA,IAAe,GAAA,CAAI,gBAAe,KAAM;AAAA,KAC5E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,2BAAA,CACL,WAAA,EACA,WAAA,EACA,WAAA,EACM;AACN,IAAA,MAAM,SAAA,GAAY,KAAK,iBAAA,CAAkB,IAAA;AAAA,MACvC,CAAC,QAAQ,GAAA,CAAI,cAAA,OAAqB,WAAA,IAAe,GAAA,CAAI,gBAAe,KAAM;AAAA,KAC5E;AAEA,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,YAAY,IAAA,CAAK,IAAI,CAAA,sBAAA,EAAyB,WAAW,mBAAmB,WAAW,CAAA,CAAA;AAAA,OACzF;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,YAAA,CAAa,gBAAA;AAAA,MAChB,UAAU,iBAAA,EAAkB;AAAA,MAC5B,WAAA;AAAA,MACA,CAAA,QAAA,EAAW,WAAA,KAAgB,SAAA,GAAY,EAAA,GAAK,WAAW,CAAA;AAAA,KACzD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,sBAAsB,IAAA,EAA2C;AACtE,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,qBAAA,CAAsB,IAAI,CAAA;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAA,GAAqC;AAE1C,IAAA,MAAM,IAAA,GAAwB,EAAE,GAAG,IAAA,CAAK,YAAA,EAAa;AAGrD,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,WAAA,CAAY,KAAK,YAAA,CAAa,qBAAA,CAAsB,cAAc,CAAC,CAAA;AAC9F,IAAA,IAAA,CAAK,kBAAkB,MAAA,CAAO,WAAA;AAAA,MAC5B,IAAA,CAAK,YAAA,CAAa,qBAAA,CAAsB,iBAAiB;AAAA,KAC3D;AACA,IAAA,IAAA,CAAK,mBAAmB,MAAA,CAAO,WAAA;AAAA,MAC7B,IAAA,CAAK,YAAA,CAAa,qBAAA,CAAsB,kBAAkB;AAAA,KAC5D;AACA,IAAA,IAAA,CAAK,uBAAuB,MAAA,CAAO,WAAA;AAAA,MACjC,IAAA,CAAK,YAAA,CAAa,qBAAA,CAAsB,sBAAsB;AAAA,KAChE;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,yBAAyB,eAAA,EAAsD;AAC5F,IAAA,MAAM,aAAiC,EAAC;AACxC,IAAA,MAAM,eAAA,GAAoC;AAAA,MACxC,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,KAAA,MAAW,WAAW,eAAA,EAAiB;AACrC,MAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,OAAO,CAAA,IAAK,EAAC;AAE1C,MAAA,KAAA,MAAW,CAAC,WAAA,EAAa,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACzD,QAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,UAAA,CAAW,UAAU,CAAA,EAAG;AACjE,UAAA,MAAM,cAAc,OAAA,KAAY,UAAA,GAAa,SAAA,GAAY,OAAA,CAAQ,UAAU,CAAC,CAAA;AAC5E,UAAA,UAAA,CAAW,KAAK,IAAI,gBAAA,CAAiB,WAAA,EAAa,WAAA,EAAa,OAAO,CAAC,CAAA;AAAA,QACzE;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,UAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAoC;AACzC,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAM,WAAqB,EAAC;AAG5B,IAAA,IAAI,CAAC,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,EAAG;AACvC,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,uBAAA,EAA0B,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IACpD;AAGA,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,iBAAA,EAAmB;AACxC,MAAA,IAAI,CAAC,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,cAAA,EAAgB,CAAA,EAAG;AAClD,QAAA,MAAA,CAAO,IAAA,CAAK,CAAA,+CAAA,EAAkD,GAAA,CAAI,cAAA,EAAgB,CAAA,CAAA,CAAG,CAAA;AAAA,MACvF;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,uBAAA,CAAwB,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,QAAQ,QAAQ,CAAA;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,WAAA,EAA8B;AACvD,IAAA,MAAM,qBAAA,GAAwB,0DAAA;AAC9B,IAAA,OAAO,qBAAA,CAAsB,KAAK,WAAW,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,KAAA,EAAyB;AACrC,IAAA,OAAO,IAAA,CAAK,EAAA,KAAO,KAAA,CAAM,EAAA,IAAM,IAAA,CAAK,IAAA,KAAS,KAAA,CAAM,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAAA,EACxF;AACF,CAAA;AAKO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,WAAA,CACmB,WAAA,EACA,WAAA,EACA,cAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AAAA,EAChB;AAAA,EAEI,cAAA,GAAyB;AAC9B,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEO,cAAA,GAAyB;AAC9B,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEO,iBAAA,GAAoC;AACzC,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA,EAEO,OAAO,KAAA,EAAkC;AAC9C,IAAA,OACE,IAAA,CAAK,WAAA,KAAgB,KAAA,CAAM,WAAA,IAC3B,IAAA,CAAK,gBAAgB,KAAA,CAAM,WAAA,IAC3B,IAAA,CAAK,cAAA,KAAmB,KAAA,CAAM,cAAA;AAAA,EAElC;AACF,CAAA;AAKO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,WAAA,CACmB,WAAA,EACA,WAAA,EACA,cAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AACA,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AAAA,EAChB;AAAA,EAEI,cAAA,GAAyB;AAC9B,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEO,cAAA,GAAyB;AAC9B,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEO,iBAAA,GAAoC;AACzC,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AACF,CAAA;AAKO,IAAM,oBAAA,GAAN,MAAM,qBAAA,CAAqB;AAAA,EACf,YAAA;AAAA,EAET,YAAY,YAAA,EAAwD;AAC1E,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,EACtB;AAAA,EAEA,OAAc,KAAA,GAA8B;AAC1C,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAyC;AAC1D,IAAA,IAAA,CAAK,GAAA,CAAI,cAAA,kBAAgB,IAAI,GAAA,EAAK,CAAA;AAClC,IAAA,IAAA,CAAK,GAAA,CAAI,iBAAA,kBAAmB,IAAI,GAAA,EAAK,CAAA;AACrC,IAAA,IAAA,CAAK,GAAA,CAAI,kBAAA,kBAAoB,IAAI,GAAA,EAAK,CAAA;AACtC,IAAA,IAAA,CAAK,GAAA,CAAI,sBAAA,kBAAwB,IAAI,GAAA,EAAK,CAAA;AAC1C,IAAA,OAAO,IAAI,sBAAqB,IAAI,CAAA;AAAA,EACtC;AAAA,EAEA,OAAc,gBAAgB,eAAA,EAAwD;AACpF,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAyC;AAE1D,IAAA,IAAA,CAAK,GAAA,CAAI,cAAA,EAAgB,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,eAAA,CAAgB,YAAA,IAAgB,EAAE,CAAC,CAAC,CAAA;AACpF,IAAA,IAAA,CAAK,GAAA,CAAI,iBAAA,EAAmB,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,eAAA,CAAgB,eAAA,IAAmB,EAAE,CAAC,CAAC,CAAA;AAC1F,IAAA,IAAA,CAAK,GAAA,CAAI,kBAAA,EAAoB,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,eAAA,CAAgB,gBAAA,IAAoB,EAAE,CAAC,CAAC,CAAA;AAC5F,IAAA,IAAA,CAAK,GAAA;AAAA,MACH,sBAAA;AAAA,MACA,IAAI,IAAI,MAAA,CAAO,OAAA,CAAQ,gBAAgB,oBAAA,IAAwB,EAAE,CAAC;AAAA,KACpE;AAEA,IAAA,OAAO,IAAI,sBAAqB,IAAI,CAAA;AAAA,EACtC;AAAA,EAEO,sBAAsB,IAAA,EAA2C;AACtE,IAAA,OAAO,IAAI,IAAI,IAAA,CAAK,YAAA,CAAa,IAAI,IAAI,CAAA,IAAK,EAAE,CAAA;AAAA,EAClD;AAAA,EAEO,gBAAA,CAAiB,IAAA,EAAsB,WAAA,EAAqB,OAAA,EAAuB;AACxF,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AAC1C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,OAAO,CAAA;AAAA,IAClC;AAAA,EACF;AAAA,EAEO,yBAAA,CACL,cACA,YAAA,EACsB;AAGtB,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAkBO,IAAM,0BAAN,MAA8B;AAAA,EACnC,WAAA,CACmB,OAAA,EACA,MAAA,EACA,QAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAChB;AAAA,EAEI,UAAA,GAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEO,SAAA,GAAsB;AAC3B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA;AAAA,EACxB;AAAA,EAEO,WAAA,GAAwB;AAC7B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC1B;AAAA,EAEO,SAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AAAA,EAC9B;AAAA,EAEO,WAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AAAA,EAChC;AACF,CAAA;;;AC9WO,IAAM,SAAA,GAAN,MAAM,UAAA,CAAU;AAAA,EACb,WAAA,CACW,EAAA,EACAA,KAAAA,EACT,MAAA,EACA,UACS,QAAA,EACjB;AALiB,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAAA,KAAAA;AACT,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACS,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKH,OAAc,MAAA,CACZ,EAAA,EACAA,KAAAA,EACA,MAAA,EACA,UACA,QAAA,EACW;AACX,IAAA,OAAO,IAAI,UAAA,CAAU,EAAA,EAAIA,KAAAA,EAAM,MAAA,EAAQ,UAAU,QAAQ,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKO,KAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,EAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAyB;AAC9B,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,SAAA,GAA6B;AAClC,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,WAAA,GAAiC;AACtC,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,WAAA,GAAiC;AACtC,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,WAAW,WAAA,EAA8B;AAC9C,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKO,iCAAA,CACL,aACA,WAAA,EACmB;AACnB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,yBAAA,CAA0B,WAAA,EAAa,WAAW,CAAA;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,mBAAA,GAAwC;AAC7C,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAM,WAAqB,EAAC;AAG5B,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AACxC,MAAA,MAAM,WAAA,GAAc,IAAI,oBAAA,EAAqB;AAE7C,MAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,QAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,IAAI,GAAA,CAAI,cAAA,EAAgB,CAAA,EAAG;AAC5C,UAAA,MAAA,CAAO,IAAA;AAAA,YACL,YAAY,GAAA,CAAI,OAAA,EAAS,CAAA,8BAAA,EAAiC,GAAA,CAAI,gBAAgB,CAAA,CAAA;AAAA,WAChF;AAAA,QACF;AAEA,QAAA,MAAM,UAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,gBAAgB,CAAA;AACtD,QAAA,IAAI,WAAW,CAAC,OAAA,CAAQ,cAAc,GAAA,CAAI,cAAA,EAAgB,CAAA,EAAG;AAC3D,UAAA,QAAA,CAAS,IAAA;AAAA,YACP,CAAA,SAAA,EAAY,GAAA,CAAI,OAAA,EAAS,CAAA,cAAA,EAAiB,GAAA,CAAI,cAAA,EAAgB,CAAA,gBAAA,EAC3C,GAAA,CAAI,cAAA,EAAgB,CAAA,qCAAA;AAAA,WACzC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,gBAAA,CAAiB,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,QAAQ,QAAQ,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,8BAAA,GAAgE;AAG3E,IAAA,OAAO,EAAC;AAAA,EACV;AAAA;AAAA;AAAA;AAAA,EAKO,uBAAA,CACL,WAAA,EACA,WAAA,EACA,UAAA,EACM;AACN,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA;AAC7C,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,WAAW,CAAA,WAAA,CAAa,CAAA;AAAA,IACtD;AAGA,IAAA,OAAA,CAAQ,uBAAA,CAAwB,aAAa,UAAU,CAAA;AAGvD,IAAA,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,CAAO,uBAAA,CAAwB,WAAA,EAAa,aAAa,UAAU,CAAA;AAAA,EACxF;AACF,CAAA;AAKO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,WAAA,CACmB,OAAA,EACA,MAAA,EACA,QAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAChB;AAAA,EAEI,UAAA,GAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEO,SAAA,GAAsB;AAC3B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA;AAAA,EACxB;AAAA,EAEO,WAAA,GAAwB;AAC7B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC1B;AAAA,EAEO,SAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AAAA,EAC9B;AAAA,EAEO,WAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AAAA,EAChC;AACF,CAAA;;;ACzKO,IAAM,iBAAA,GAAN,MAAM,kBAAA,CAAkB;AAAA,EACZ,QAAA;AAAA,EAET,YAAY,QAAA,EAAqC;AACvD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,GAAA,CAAI,QAAQ,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,KAAA,GAA2B;AACvC,IAAA,OAAO,IAAI,kBAAA,iBAAkB,IAAI,GAAA,EAAK,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,aAAa,QAAA,EAAwC;AACjE,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAA0B;AAEjD,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,UAAA,CAAW,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAQ,EAAG,OAAO,CAAA;AAAA,IAC3C;AAEA,IAAA,OAAO,IAAI,mBAAkB,UAAU,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,QAAQ,UAAA,EAA0D;AAC9E,IAAA,OAAO,IAAI,mBAAkB,UAAU,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKO,IAAI,WAAA,EAAmC;AAC5C,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKO,IAAI,WAAA,EAA+C;AACxD,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKO,MAAA,GAAoB;AACzB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKO,eAAA,GAAiC;AACtC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKO,IAAA,GAAe;AACpB,IAAA,OAAO,KAAK,QAAA,CAAS,IAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,SAAS,IAAA,KAAS,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKO,IAAI,OAAA,EAAqC;AAC9C,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AACzC,IAAA,WAAA,CAAY,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAQ,EAAG,OAAO,CAAA;AAC1C,IAAA,OAAO,IAAI,mBAAkB,WAAW,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,WAAA,EAA6C;AACzD,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AACzC,IAAA,WAAA,CAAY,OAAO,WAAW,CAAA;AAC9B,IAAA,OAAO,IAAI,mBAAkB,WAAW,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,OAAA,EAAqC;AACjD,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAS,CAAA,EAAG;AAChC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,OAAA,CAAQ,OAAA,EAAS,CAAA,yBAAA,CAA2B,CAAA;AAAA,IAC1E;AAEA,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AACzC,IAAA,WAAA,CAAY,GAAA,CAAI,OAAA,CAAQ,OAAA,EAAQ,EAAG,OAAO,CAAA;AAC1C,IAAA,OAAO,IAAI,mBAAkB,WAAW,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKO,UAAA,GAAkC;AAEvC,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA;AAClD,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,OAAO,cAAA;AAAA,IACT;AAGA,IAAA,MAAM,eAAe,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,CAAE,MAAK,CAAE,KAAA;AACnD,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,SAAA,EAA6D;AACzE,IAAA,MAAM,gBAAA,uBAAuB,GAAA,EAA0B;AAEvD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,OAAO,CAAA,IAAK,KAAK,QAAA,EAAU;AAC3C,MAAA,IAAI,SAAA,CAAU,OAAO,CAAA,EAAG;AACtB,QAAA,gBAAA,CAAiB,GAAA,CAAI,MAAM,OAAO,CAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,mBAAkB,gBAAgB,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKO,wBAAwB,WAAA,EAAgC;AAC7D,IAAA,OAAO,IAAA,CAAK,QAAO,CAAE,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,aAAA,CAAc,WAAW,CAAC,CAAA;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA,EAKO,kBAAA,GAA+B;AACpC,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AAErC,IAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AAC5C,MAAA,KAAA,MAAW,WAAA,IAAe,OAAA,CAAQ,eAAA,EAAgB,EAAG;AACnD,QAAA,YAAA,CAAa,IAAI,WAAW,CAAA;AAAA,MAC9B;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,YAAY,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAA8C;AACnD,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAM,WAAqB,EAAC;AAG5B,IAAA,IAAI,IAAA,CAAK,SAAQ,EAAG;AAClB,MAAA,QAAA,CAAS,KAAK,gCAAgC,CAAA;AAAA,IAChD;AAGA,IAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AAC5C,MAAA,MAAM,MAAA,GAAS,QAAQ,QAAA,EAAS;AAChC,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,SAAA,GAAY,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAA,SAAA,EAAY,QAAQ,OAAA,EAAS,CAAA,GAAA,EAAM,GAAG,EAAE,CAAC,CAAA;AACxF,MAAA,QAAA,CAAS,IAAA;AAAA,QACP,GAAG,MAAA,CAAO,WAAA,EAAY,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,SAAA,EAAY,OAAA,CAAQ,OAAA,EAAS,CAAA,GAAA,EAAM,IAAI,CAAA,CAAE;AAAA,OACjF;AAAA,IACF;AAGA,IAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAsB;AAEpD,IAAA,KAAA,MAAW,OAAA,IAAW,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AAC5C,MAAA,KAAA,MAAW,WAAA,IAAe,OAAA,CAAQ,eAAA,EAAgB,EAAG;AACnD,QAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,WAAW,CAAA,EAAG;AACvC,UAAA,iBAAA,CAAkB,GAAA,CAAI,WAAA,EAAa,EAAE,CAAA;AAAA,QACvC;AACA,QAAA,iBAAA,CAAkB,IAAI,WAAW,CAAA,CAAG,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA;AAAA,MAC5D;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,YAAY,CAAA,IAAK,iBAAA,EAAmB;AAC3D,MAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,QAAA,QAAA,CAAS,IAAA;AAAA,UACP,YAAY,WAAW,CAAA,mCAAA,EAAsC,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,SACtF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,iCAAA,CAAkC,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,QAAQ,QAAQ,CAAA;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA,EAKO,KAAA,GAAmC;AACxC,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,EAAS,MAAA,CAAO,QAAQ,CAAA,GAAsC;AAC5D,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,KAAA,EAAmC;AAC/C,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,KAAM,KAAA,CAAM,MAAK,EAAG;AAChC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,OAAO,CAAA,IAAK,KAAK,QAAA,EAAU;AAC3C,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AACnC,MAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA,EAAG;AAClD,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAKO,IAAM,oCAAN,MAAwC;AAAA,EAC7C,WAAA,CACmB,OAAA,EACA,MAAA,EACA,QAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAChB;AAAA,EAEI,UAAA,GAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEO,SAAA,GAAsB;AAC3B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA;AAAA,EACxB;AAAA,EAEO,WAAA,GAAwB;AAC7B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC1B;AAAA,EAEO,SAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AAAA,EAC9B;AAAA,EAEO,WAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AAAA,EAChC;AACF,CAAA;;;AC1QO,IAAM,iBAAA,GAAN,MAAM,kBAAA,CAAkB;AAAA,EACZ,QAAA;AAAA,EAET,YAAY,QAAA,EAAqC;AACvD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,GAAA,CAAI,QAAQ,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,KAAA,GAA2B;AACvC,IAAA,OAAO,IAAI,kBAAA,iBAAkB,IAAI,GAAA,EAAK,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,aAAa,QAAA,EAAwC;AACjE,IAAA,MAAM,UAAA,uBAAiB,GAAA,EAA0B;AAEjD,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,OAAA,EAAQ,EAAG,GAAG,CAAA;AAAA,IACnC;AAEA,IAAA,OAAO,IAAI,mBAAkB,UAAU,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,QAAQ,UAAA,EAA0D;AAC9E,IAAA,OAAO,IAAI,mBAAkB,UAAU,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKO,IAAI,WAAA,EAAmC;AAC5C,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKO,IAAI,WAAA,EAA+C;AACxD,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKO,MAAA,GAAoB;AACzB,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKO,eAAA,GAAiC;AACtC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKO,IAAA,GAAe;AACpB,IAAA,OAAO,KAAK,QAAA,CAAS,IAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKO,OAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,SAAS,IAAA,KAAS,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKO,IAAI,GAAA,EAAiC;AAC1C,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AACzC,IAAA,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,OAAA,EAAQ,EAAG,GAAG,CAAA;AAClC,IAAA,OAAO,IAAI,mBAAkB,WAAW,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,WAAA,EAA6C;AACzD,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AACzC,IAAA,WAAA,CAAY,OAAO,WAAW,CAAA;AAC9B,IAAA,OAAO,IAAI,mBAAkB,WAAW,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,GAAA,EAAiC;AAC7C,IAAA,IAAI,CAAC,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,OAAA,EAAS,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,GAAA,CAAI,OAAA,EAAS,CAAA,yBAAA,CAA2B,CAAA;AAAA,IACtE;AAEA,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AACzC,IAAA,WAAA,CAAY,GAAA,CAAI,GAAA,CAAI,OAAA,EAAQ,EAAG,GAAG,CAAA;AAClC,IAAA,OAAO,IAAI,mBAAkB,WAAW,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,SAAA,EAAyD;AACrE,IAAA,MAAM,gBAAA,uBAAuB,GAAA,EAA0B;AAEvD,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,GAAG,CAAA,IAAK,KAAK,QAAA,EAAU;AACvC,MAAA,IAAI,SAAA,CAAU,GAAG,CAAA,EAAG;AAClB,QAAA,gBAAA,CAAiB,GAAA,CAAI,MAAM,GAAG,CAAA;AAAA,MAChC;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,mBAAkB,gBAAgB,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKO,yBAAA,CAA0B,aAAqB,WAAA,EAAwC;AAC5F,IAAA,OAAO,IAAA,CAAK,OAAO,CAAC,GAAA,KAAQ,IAAI,qBAAA,CAAsB,WAAA,EAAa,WAAW,CAAC,CAAA;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA,EAKO,iCAAA,GAA+C;AACpD,IAAA,OAAO,IAAA,CAAK,MAAA,EAAO,CAAE,MAAA,CAAO,CAAC,QAAQ,GAAA,CAAI,oBAAA,EAAqB,CAAE,MAAA,GAAS,CAAC,CAAA;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA,EAKO,yBAAyB,WAAA,EAAgC;AAC9D,IAAA,OAAO,IAAA,CAAK,QAAO,CAAE,MAAA;AAAA,MAAO,CAAC,GAAA,KAC3B,GAAA,CAAI,oBAAA,EAAqB,CAAE,IAAA,CAAK,CAAC,GAAA,KAAQ,GAAA,CAAI,cAAA,EAAe,KAAM,WAAW;AAAA,KAC/E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,yBAAA,GAAsC;AAC3C,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAY;AAErC,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AACxC,MAAA,KAAA,MAAW,GAAA,IAAO,GAAA,CAAI,oBAAA,EAAqB,EAAG;AAC5C,QAAA,YAAA,CAAa,GAAA,CAAI,GAAA,CAAI,cAAA,EAAgB,CAAA;AAAA,MACvC;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,YAAY,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKO,qBAAA,GAAkC;AACvC,IAAA,MAAM,eAAA,uBAAsB,GAAA,EAAY;AAExC,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AACxC,MAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AAGjC,MAAA,KAAA,MAAW,OAAA,IAAW;AAAA,QACpB,cAAA;AAAA,QACA,iBAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF,EAAY;AACV,QAAA,KAAA,MAAW,WAAW,IAAA,CAAK,qBAAA,CAAsB,OAAO,CAAA,CAAE,MAAK,EAAG;AAChE,UAAA,eAAA,CAAgB,IAAI,OAAO,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,eAAe,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKO,2BAA2B,cAAA,EAAmC;AACnE,IAAA,OAAO,IAAA,CAAK,MAAA,EAAO,CAAE,MAAA,CAAO,CAAC,GAAA,KAAQ;AACnC,MAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,MAAA,OAAO,CAAC,cAAA,EAAgB,iBAAA,EAAmB,kBAAA,EAAoB,sBAAsB,CAAA,CAAE,IAAA;AAAA,QACrF,CAAC,OAAA,KAAY,IAAA,CAAK,sBAAsB,OAAc,CAAA,CAAE,IAAI,cAAc;AAAA,OAC5E;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAA8C;AACnD,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAM,WAAqB,EAAC;AAG5B,IAAA,IAAI,IAAA,CAAK,SAAQ,EAAG;AAClB,MAAA,QAAA,CAAS,KAAK,gCAAgC,CAAA;AAAA,IAChD;AAGA,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AACxC,MAAA,MAAM,MAAA,GAAS,IAAI,QAAA,EAAS;AAC5B,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,MAAA,CAAO,SAAA,GAAY,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAA,SAAA,EAAY,IAAI,OAAA,EAAS,CAAA,GAAA,EAAM,GAAG,EAAE,CAAC,CAAA;AACpF,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,MAAA,CAAO,WAAA,GAAc,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,SAAA,EAAY,IAAI,OAAA,EAAS,CAAA,GAAA,EAAM,IAAI,EAAE,CAAC,CAAA;AAAA,IAC5F;AAGA,IAAA,MAAM,YAAA,GAAe,KAAK,eAAA,EAAgB;AAC1C,IAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAI,YAAY,CAAA;AACxC,IAAA,IAAI,YAAA,CAAa,MAAA,KAAW,WAAA,CAAY,IAAA,EAAM;AAC5C,MAAA,MAAA,CAAO,KAAK,6CAA6C,CAAA;AAAA,IAC3D;AAEA,IAAA,OAAO,IAAI,iCAAA,CAAkC,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,QAAQ,QAAQ,CAAA;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA,EAKO,oBAAA,GAA+C;AACpD,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAuB;AAE3C,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,QAAA,CAAS,MAAA,EAAO,EAAG;AACxC,MAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,EAAQ,CAAE,QAAA,EAAS;AACvC,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACzB,QAAA,OAAA,CAAQ,GAAA,CAAI,OAAA,EAAS,EAAE,CAAA;AAAA,MACzB;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAG,IAAA,CAAK,GAAG,CAAA;AAAA,IAChC;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,KAAA,GAAmC;AACxC,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,EAAS,MAAA,CAAO,QAAQ,CAAA,GAAsC;AAC5D,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,KAAA,EAAmC;AAC/C,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,KAAM,KAAA,CAAM,MAAK,EAAG;AAChC,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,GAAG,CAAA,IAAK,KAAK,QAAA,EAAU;AACvC,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AACnC,MAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,GAAA,CAAI,MAAA,CAAO,YAAY,CAAA,EAAG;AAC9C,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAKO,IAAM,oCAAN,MAAwC;AAAA,EAC7C,WAAA,CACmB,OAAA,EACA,MAAA,EACA,QAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAChB;AAAA,EAEI,UAAA,GAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEO,SAAA,GAAsB;AAC3B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA;AAAA,EACxB;AAAA,EAEO,WAAA,GAAwB;AAC7B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC1B;AAAA,EAEO,SAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AAAA,EAC9B;AAAA,EAEO,WAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AAAA,EAChC;AACF,CAAA;;;ACjTO,IAAM,eAAA,GAAN,MAAM,gBAAA,CAAgB;AAAA,EACV,WAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA;AAAA,EACA,qBAAA;AAAA,EACA,YAAA;AAAA,EAET,WAAA,CACN,WAAA,EACA,eAAA,EACA,QAAA,EACA,eAAA,GAA2B,OAC3B,qBAAA,GAA0C,IAAA,EAC1C,YAAA,GAAkC,EAAC,EACnC;AACA,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACnB,IAAA,IAAA,CAAK,eAAA,GAAkB,CAAC,GAAG,eAAe,CAAA;AAC1C,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,GAAA,CAAI,QAAQ,CAAA;AAChC,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AACvB,IAAA,IAAA,CAAK,qBAAA,GAAwB,qBAAA;AAC7B,IAAA,IAAA,CAAK,YAAA,GAAe,EAAE,GAAG,YAAA,EAAa;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,kBAAkB,IAAA,EAA0C;AACxE,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,QAAA,IAAY,EAAC;AAC1C,IAAA,MAAM,cAAc,IAAA,CAAK,WAAA,IAAA,QAAA;AAGzB,IAAA,MAAM,QAAA,uBAAe,GAAA,EAA+B;AAGpD,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,QAAA,CAAS,IAAI,SAAA,EAAW,IAAI,kBAAkB,SAAA,EAAW,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IACxE;AAGA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,KAAA,MAAW,CAAC,MAAM,YAAY,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,EAAG;AAChE,QAAA,QAAA,CAAS,IAAI,IAAA,EAAM,IAAI,iBAAA,CAAkB,IAAA,EAAM,YAAY,CAAC,CAAA;AAAA,MAC9D;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,gBAAA;AAAA,MACT,WAAA;AAAA,MACA,eAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA,CAAK,eAAA;AAAA,MACL,IAAA,CAAK,qBAAA;AAAA,MACL;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,aAAA,GAAiC;AAC7C,IAAA,MAAM,WAAA,GAAiC;AAAA,MACrC,QAAA,EAAU,CAAC,YAAY;AAAA,KACzB;AACA,IAAA,OAAO,IAAI,gBAAA;AAAA,MAAA,QAAA;AAAA,MAET,CAAC,YAAY,CAAA;AAAA,0BACT,GAAA,EAAI;AAAA,MACR,KAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,cAAA,GAA8B;AACnC,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,kBAAA,GAA+B;AACpC,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,eAAe,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKO,qBAAA,GAAwD;AAC7D,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKO,qBAAqB,IAAA,EAA6C;AACvE,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKO,WAAW,IAAA,EAAuB;AACvC,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKO,eAAA,GAA4B;AACjC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAA,GAA6B;AAClC,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,wBAAA,GAA6C;AAClD,IAAA,OAAO,IAAA,CAAK,qBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,WAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAS,IAAA,GAAO,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKO,uBAAA,CACL,WAAA,EACA,WAAA,EACA,OAAA,EACiB;AACjB,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA;AAChD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,WAAW,CAAA,WAAA,CAAa,CAAA;AAAA,IACtD;AAGA,IAAA,MAAM,iBAAA,GAAoB,UAAA,CAAW,uBAAA,CAAwB,WAAA,EAAa,OAAO,CAAA;AAGjF,IAAA,MAAM,eAAA,GAAkB,IAAI,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAC7C,IAAA,eAAA,CAAgB,GAAA,CAAI,aAAa,iBAAiB,CAAA;AAGlD,IAAA,OAAO,IAAI,gBAAA;AAAA,MACT,IAAA,CAAK,WAAA;AAAA,MACL,IAAA,CAAK,eAAA;AAAA,MACL,eAAA;AAAA,MACA,IAAA,CAAK,eAAA;AAAA,MACL,IAAA,CAAK,qBAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAA,GAAmD;AACxD,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAA4C;AACjD,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAM,WAAqB,EAAC;AAG5B,IAAA,IAAI,IAAA,CAAK,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG;AACrC,MAAA,QAAA,CAAS,KAAK,uEAAuE,CAAA;AAAA,IACvF;AAGA,IAAA,KAAA,MAAW,OAAA,IAAW,KAAK,eAAA,EAAiB;AAC1C,MAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC3C,QAAA,MAAA,CAAO,KAAK,6BAA6B,CAAA;AAAA,MAC3C;AAGA,MAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,IAAK,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,KAAM,OAAA,CAAQ,WAAA,CAAY,IAAI,CAAA,EAAG;AACjF,QAAA,QAAA,CAAS,IAAA,CAAK,CAAA,yCAAA,EAA4C,OAAO,CAAA,CAAE,CAAA;AAAA,MACrE;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,UAAU,CAAA,IAAK,KAAK,QAAA,EAAU;AAC9C,MAAA,MAAM,gBAAA,GAAmB,WAAW,QAAA,EAAS;AAC7C,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,gBAAA,CAAiB,SAAA,EAAU,CAAE,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAA,SAAA,EAAY,IAAI,CAAA,GAAA,EAAM,GAAG,EAAE,CAAC,CAAA;AACrF,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,gBAAA,CAAiB,WAAA,EAAY,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,SAAA,EAAY,IAAI,CAAA,GAAA,EAAM,IAAI,EAAE,CAAC,CAAA;AAAA,IAC7F;AAGA,IAAA,IAAI,IAAA,CAAK,WAAA,KAAA,QAAA,iBAAsC,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AACvE,MAAA,MAAA,CAAO,KAAK,6DAA6D,CAAA;AAAA,IAC3E;AAEA,IAAA,OAAO,IAAI,+BAAA,CAAgC,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,QAAQ,QAAQ,CAAA;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA,EAKO,mBAAA,GAAyC;AAE9C,IAAA,MAAM,IAAA,GAA0B,EAAE,GAAG,IAAA,CAAK,YAAA,EAAa;AAGvD,IAAA,IAAA,CAAK,WAAW,IAAA,CAAK,eAAA;AAGrB,IAAA,IAAI,KAAK,WAAA,KAAA,QAAA,eAAoC;AAC3C,MAAA,IAAA,CAAK,cAAc,IAAA,CAAK,WAAA;AAAA,IAC1B,CAAA,MAAO;AAEL,MAAA,OAAO,IAAA,CAAK,WAAA;AAAA,IACd;AAGA,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA;AAClD,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,IAAA,CAAK,OAAA,GAAU,eAAe,eAAA,EAAgB;AAAA,IAChD,CAAA,MAAO;AAEL,MAAA,OAAO,IAAA,CAAK,OAAA;AAAA,IACd;AAEA,IAAA,MAAM,gBAAwD,EAAC;AAC/D,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,UAAU,CAAA,IAAK,KAAK,QAAA,EAAU;AAC9C,MAAA,IAAI,SAAS,SAAA,EAAW;AACtB,QAAA,aAAA,CAAc,IAAI,CAAA,GAAI,UAAA,CAAW,eAAA,EAAgB;AAAA,MACnD;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,SAAS,CAAA,EAAG;AACzC,MAAA,IAAA,CAAK,QAAA,GAAW,aAAA;AAAA,IAClB,CAAA,MAAO;AAEL,MAAA,OAAO,IAAA,CAAK,QAAA;AAAA,IACd;AAGA,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,eAAA;AAAA,IAC9B,CAAA,MAAO;AAEL,MAAA,OAAO,IAAA,CAAK,eAAA;AAAA,IACd;AAEA,IAAA,IAAI,IAAA,CAAK,0BAA0B,IAAA,EAAM;AACvC,MAAA,IAAA,CAAK,wBAAwB,IAAA,CAAK,qBAAA;AAAA,IACpC,CAAA,MAAO;AAEL,MAAA,OAAO,IAAA,CAAK,qBAAA;AAAA,IACd;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,KAAA,EAAiC;AAC7C,IAAA,OACE,IAAA,CAAK,WAAA,KAAgB,KAAA,CAAM,WAAA,IAC3B,IAAA,CAAK,UAAU,IAAA,CAAK,eAAe,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,eAAe,CAAA,IAC7E,IAAA,CAAK,eAAA,KAAoB,KAAA,CAAM,eAAA,IAC/B,IAAA,CAAK,qBAAA,KAA0B,KAAA,CAAM,qBAAA,IACrC,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,QAAQ,CAAA;AAAA,EAErC;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,aAAA,EAAwD;AAC5E,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,aAAA,CAAc,IAAA,EAAM;AAC7C,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,UAAU,CAAA,IAAK,KAAK,QAAA,EAAU;AAC9C,MAAA,MAAM,eAAA,GAAkB,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA;AAC9C,MAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,UAAA,CAAW,MAAA,CAAO,eAAe,CAAA,EAAG;AAC3D,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAA;AAKO,IAAM,iBAAA,GAAN,MAAM,kBAAA,CAAkB;AAAA,EACZ,IAAA;AAAA,EACA,YAAA;AAAA,EAEjB,WAAA,CAAY,MAAc,YAAA,EAAsC;AAC9D,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,YAAA,GAAe,EAAE,GAAG,YAAA,EAAa;AAAA,EACxC;AAAA,EAEO,OAAA,GAAkB;AACvB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEO,eAAA,GAA0C;AAC/C,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,YAAA,EAAa;AAAA,EAChC;AAAA,EAEO,kBAAA,GAA+B;AACpC,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,YAAY,CAAA;AAAA,EACtC;AAAA,EAEO,cAAc,WAAA,EAA8B;AACjD,IAAA,OAAO,eAAe,IAAA,CAAK,YAAA;AAAA,EAC7B;AAAA,EAEO,qBAAqB,WAAA,EAAyC;AACnE,IAAA,OAAO,IAAA,CAAK,aAAa,WAAW,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKO,uBAAA,CAAwB,aAAqB,OAAA,EAAoC;AACtF,IAAA,MAAM,mBAAA,GAAsB,EAAE,GAAG,IAAA,CAAK,YAAA,EAAa;AACnD,IAAA,mBAAA,CAAoB,WAAW,CAAA,GAAI,OAAA;AACnC,IAAA,OAAO,IAAI,kBAAA,CAAkB,IAAA,CAAK,IAAA,EAAM,mBAAmB,CAAA;AAAA,EAC7D;AAAA,EAEO,QAAA,GAA8C;AACnD,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,MAAM,WAAqB,EAAC;AAG5B,IAAA,IAAI,CAAC,KAAK,IAAA,IAAQ,IAAA,CAAK,KAAK,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC/C,MAAA,MAAA,CAAO,KAAK,8BAA8B,CAAA;AAAA,IAC5C;AAGA,IAAA,KAAA,MAAW,CAAC,aAAa,OAAO,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA,EAAG;AACtE,MAAA,IAAI,CAAC,WAAA,IAAe,WAAA,CAAY,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AACnD,QAAA,MAAA,CAAO,KAAK,8BAA8B,CAAA;AAAA,MAC5C;AAEA,MAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC3C,QAAA,MAAA,CAAO,IAAA,CAAK,CAAA,qBAAA,EAAwB,WAAW,CAAA,iBAAA,CAAmB,CAAA;AAAA,MACpE;AAGA,MAAA,IAAI,CAAC,0DAAA,CAA2D,IAAA,CAAK,WAAW,CAAA,EAAG;AACjF,QAAA,QAAA,CAAS,IAAA,CAAK,CAAA,cAAA,EAAiB,WAAW,CAAA,kBAAA,CAAoB,CAAA;AAAA,MAChE;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,iCAAA,CAAkC,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,QAAQ,QAAQ,CAAA;AAAA,EACpF;AAAA,EAEO,OAAO,KAAA,EAAmC;AAC/C,IAAA,OACE,IAAA,CAAK,IAAA,KAAS,KAAA,CAAM,IAAA,IACpB,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,YAAY,CAAA,KAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,YAAY,CAAA;AAAA,EAE3E;AACF,CAAA;AAkBO,IAAM,kCAAN,MAAsC;AAAA,EAC3C,WAAA,CACmB,OAAA,EACA,MAAA,EACA,QAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAChB;AAAA,EAEI,UAAA,GAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEO,SAAA,GAAsB;AAC3B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA;AAAA,EACxB;AAAA,EAEO,WAAA,GAAwB;AAC7B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC1B;AAAA,EAEO,SAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AAAA,EAC9B;AAAA,EAEO,WAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AAAA,EAChC;AACF,CAAA;AAKO,IAAM,oCAAN,MAAwC;AAAA,EAC7C,WAAA,CACmB,OAAA,EACA,MAAA,EACA,QAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EAChB;AAAA,EAEI,UAAA,GAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEO,SAAA,GAAsB;AAC3B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA;AAAA,EACxB;AAAA,EAEO,WAAA,GAAwB;AAC7B,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,QAAQ,CAAA;AAAA,EAC1B;AAAA,EAEO,SAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAO,MAAA,GAAS,CAAA;AAAA,EAC9B;AAAA,EAEO,WAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,SAAS,MAAA,GAAS,CAAA;AAAA,EAChC;AACF,CAAA;;;ACxcO,IAAM,WAAA,GAAN,MAAM,YAAA,CAAY;AAAA,EACN,KAAA;AAAA,EAET,YAAY,KAAA,EAAe;AACjC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,WAAW,KAAA,EAA4B;AACnD,IAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AACvC,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,GAAA,EAAK;AACtB,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAGA,IAAA,MAAM,YAAA,GAAe,kBAAA;AACrB,IAAA,IAAI,CAAC,YAAA,CAAa,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA,EAAG;AACpC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,YAAA,CAAY,KAAA,CAAM,IAAA,EAAM,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,QAAA,GAAwB;AACpC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,EAAI,CAAE,SAAS,EAAE,CAAA;AACxC,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AACxD,IAAA,OAAO,IAAI,YAAA,CAAY,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,SAASA,KAAAA,EAA2B;AAEhD,IAAA,MAAM,cAAA,GAAiBA,KAAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA;AAC9C,IAAA,MAAM,YAAY,cAAA,CAAe,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,IAAK,WAAA;AAGpD,IAAA,MAAM,SAAA,GAAY,QAAA,CACf,OAAA,CAAQ,iBAAA,EAAmB,GAAG,CAAA,CAC9B,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAClB,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAEvB,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,aAAY,QAAA,EAAS;AAAA,IAC9B;AAEA,IAAA,OAAO,IAAI,aAAY,SAAS,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKO,OAAO,KAAA,EAA6B;AACzC,IAAA,OAAO,IAAA,CAAK,UAAU,KAAA,CAAM,KAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKO,SAAS,KAAA,EAA6B;AAC3C,IAAA,OAAO,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKO,QAAA,GAAmB;AACxB,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA;AACpC,MAAA,IAAA,GAAA,CAAQ,IAAA,IAAQ,KAAK,IAAA,GAAO,IAAA;AAC5B,MAAA,IAAA,GAAO,IAAA,GAAO,IAAA;AAAA,IAChB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKO,MAAA,GAAiB;AACtB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,SAAS,IAAA,EAA2B;AAChD,IAAA,OAAO,YAAA,CAAY,WAAW,IAAI,CAAA;AAAA,EACpC;AACF,CAAA;ACrFO,IAAM,QAAN,MAAqB;AAAA,EAClB,OAAA,uBAAc,GAAA,EAA2B;AAAA,EACzC,KAAA,GAAQ;AAAA,IACd,IAAA,EAAM,CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EAEQ,OAAA;AAAA,EAER,WAAA,CAAY,IAAA,EAAc,OAAA,GAAwB,EAAC,EAAG;AACpD,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,GAAA,EAAK,QAAQ,GAAA,IAAO,IAAA;AAAA;AAAA,MACpB,OAAA,EAAS,OAAA,CAAQ,OAAA,IAAW,EAAA,GAAK,IAAA,GAAO,IAAA;AAAA;AAAA,MACxC,UAAA,EAAY,QAAQ,UAAA,IAAc,GAAA;AAAA,MAClC,aAAA,EAAe,QAAQ,aAAA,IAAiB,KAAA;AAAA,MACxC,QAAA,EAAU,QAAQ,QAAA,IAAYC,IAAAA,CAAKK,SAAQ,EAAG,MAAA,EAAQ,SAAS,IAAI;AAAA,KACrE;AAEA,IAAA,IAAI,IAAA,CAAK,QAAQ,aAAA,EAAe;AAC9B,MAAA,IAAA,CAAK,YAAA,EAAa;AAAA,IACpB;AAGA,IAAA,WAAA,CAAY,MAAM,IAAA,CAAK,OAAA,EAAQ,EAAG,GAAM,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,GAAA,EAA4B;AAC9B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAElC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAA,CAAK,KAAA,CAAM,MAAA,EAAA;AACX,MAAA,OAAO,MAAA;AAAA,IACT;AAGA,IAAA,IAAI,KAAK,GAAA,EAAI,GAAI,KAAA,CAAM,SAAA,GAAY,MAAM,GAAA,EAAK;AAC5C,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AACvB,MAAA,IAAA,CAAK,KAAA,CAAM,MAAA,EAAA;AACX,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,IAAA,EAAA;AACX,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,GAAA,CAAI,GAAA,EAAa,KAAA,EAAU,GAAA,EAAoB;AAC7C,IAAA,MAAM,QAAA,GAAW,GAAA,IAAO,IAAA,CAAK,OAAA,CAAQ,GAAA;AACrC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,YAAA,CAAa,KAAK,CAAA;AAEpC,IAAA,MAAM,KAAA,GAAuB;AAAA,MAC3B,GAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,GAAA,EAAK,QAAA;AAAA,MACL;AAAA,KACF;AAGA,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA,EAAG;AACzB,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AAAA,IACzB;AAGA,IAAA,IAAA,CAAK,eAAe,IAAI,CAAA;AAExB,IAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAE3B,IAAA,IAAI,IAAA,CAAK,QAAQ,aAAA,EAAe;AAC9B,MAAA,IAAA,CAAK,UAAA,CAAW,KAAK,KAAK,CAAA;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,GAAA,EAAsB;AACxB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAElC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,IAAI,KAAK,GAAA,EAAI,GAAI,KAAA,CAAM,SAAA,GAAY,MAAM,GAAA,EAAK;AAC5C,MAAA,IAAA,CAAK,OAAA,CAAQ,OAAO,GAAG,CAAA;AACvB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,GAAA,EAAsB;AAC3B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AAEvC,IAAA,IAAI,OAAA,IAAW,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe;AACzC,MAAA,IAAA,CAAK,eAAe,GAAG,CAAA;AAAA,IACzB;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,QAAQ,KAAA,EAAM;AACnB,IAAA,IAAA,CAAK,MAAM,IAAA,GAAO,CAAA;AAClB,IAAA,IAAA,CAAK,MAAM,MAAA,GAAS,CAAA;AAEpB,IAAA,IAAI,IAAA,CAAK,QAAQ,aAAA,EAAe;AAC9B,MAAA,IAAA,CAAK,SAAA,EAAU;AAAA,IACjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAAuB;AACrB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,KAAK,KAAA,CAAM,MAAA;AAE3C,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,KAAK,OAAA,CAAQ,IAAA;AAAA,MAC3B,SAAA,EAAW,KAAK,YAAA,EAAa;AAAA,MAC7B,SAAS,KAAA,GAAQ,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,OAAO,KAAA,GAAQ,CAAA;AAAA,MAC/C,UAAU,KAAA,GAAQ,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,SAAS,KAAA,GAAQ,CAAA;AAAA,MAClD,IAAA,EAAM,KAAK,KAAA,CAAM,IAAA;AAAA,MACjB,MAAA,EAAQ,KAAK,KAAA,CAAM;AAAA,KACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CAAS,GAAA,EAAa,OAAA,EAA+B,GAAA,EAA0B;AACnF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA;AAE3B,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,EAAQ;AAC5B,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAA,EAAO,GAAG,CAAA;AAExB,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,OAAA,GAAgB;AACtB,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,cAAwB,EAAC;AAE/B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,KAAK,OAAA,EAAS;AACvC,MAAA,IAAI,GAAA,GAAM,KAAA,CAAM,SAAA,GAAY,KAAA,CAAM,GAAA,EAAK;AACrC,QAAA,WAAA,CAAY,KAAK,GAAG,CAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,MAAA,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,IACjB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,YAAA,EAA4B;AAEjD,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,IAAQ,IAAA,CAAK,QAAQ,UAAA,EAAY;AACnD,MAAA,IAAA,CAAK,WAAA,EAAY;AAAA,IACnB;AAGA,IAAA,OAAO,KAAK,YAAA,EAAa,GAAI,YAAA,GAAe,IAAA,CAAK,QAAQ,OAAA,EAAS;AAChE,MAAA,IAAA,CAAK,WAAA,EAAY;AAAA,IACnB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,GAAoB;AAC1B,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,eAAA,GAAkB,KAAK,GAAA,EAAI;AAE/B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,KAAK,OAAA,EAAS;AACvC,MAAA,IAAI,KAAA,CAAM,YAAY,eAAA,EAAiB;AACrC,QAAA,eAAA,GAAkB,KAAA,CAAM,SAAA;AACxB,QAAA,SAAA,GAAY,GAAA;AAAA,MACd;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAA,CAAK,OAAO,SAAS,CAAA;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,GAAuB;AAC7B,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAO,EAAG;AACzC,MAAA,SAAA,IAAa,KAAA,CAAM,IAAA;AAAA,IACrB;AACA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAa,KAAA,EAAkB;AACrC,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,CAAE,MAAA,GAAS,CAAA;AAAA,IACxC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,GAAqB;AAC3B,IAAA,IAAI;AACF,MAAA,IAAI,CAACJ,UAAAA,CAAW,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACtC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAYD,IAAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,UAAU,YAAY,CAAA;AAC1D,MAAA,IAAI,CAACC,UAAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,YAAA,GAAeC,YAAAA,CAAa,SAAA,EAAW,OAAO,CAAA;AACpD,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA;AAErC,MAAA,KAAA,MAAW,GAAA,IAAO,KAAA,CAAM,IAAA,IAAQ,EAAC,EAAG;AAClC,QAAA,IAAI;AACF,UAAA,MAAM,SAAA,GAAYF,KAAK,IAAA,CAAK,OAAA,CAAQ,UAAU,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AACnE,UAAA,IAAIC,UAAAA,CAAW,SAAS,CAAA,EAAG;AACzB,YAAA,MAAM,YAAA,GAAeC,YAAAA,CAAa,SAAA,EAAW,OAAO,CAAA;AACpD,YAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA;AAGrC,YAAA,IAAI,KAAK,GAAA,EAAI,GAAI,KAAA,CAAM,SAAA,IAAa,MAAM,GAAA,EAAK;AAC7C,cAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAAA,YAC7B;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAA,CAAW,KAAa,KAAA,EAA4B;AAC1D,IAAA,IAAI;AACF,MAAA,IAAI,CAACD,UAAAA,CAAW,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACtC,QAAAM,UAAU,IAAA,CAAK,OAAA,CAAQ,UAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,MACtD;AAEA,MAAA,MAAM,SAAA,GAAYP,KAAK,IAAA,CAAK,OAAA,CAAQ,UAAU,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AACnE,MAAAQ,cAAc,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,KAAK,GAAG,OAAO,CAAA;AAGvD,MAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,IACvB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,GAAA,EAAmB;AACxC,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAYR,KAAK,IAAA,CAAK,OAAA,CAAQ,UAAU,IAAA,CAAK,WAAA,CAAY,GAAG,CAAC,CAAA;AACnE,MAAA,IAAIC,UAAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,UAAA,CAAW,SAAS,CAAA;AAAA,MACtB;AACA,MAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,IACvB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAA,GAAkB;AACxB,IAAA,IAAI;AACF,MAAA,IAAIA,UAAAA,CAAW,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACrC,QAAA,MAAMG,GAAAA,GAAK,UAAQ,IAAI,CAAA;AACvB,QAAAA,GAAAA,CAAG,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,MACnE;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAA,GAAwB;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAYJ,IAAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,UAAU,YAAY,CAAA;AAC1D,MAAA,MAAM,KAAA,GAAQ;AAAA,QACZ,MAAM,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAAA,QACpC,WAAA,EAAa,KAAK,GAAA;AAAI,OACxB;AACA,MAAAQ,cAAc,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,KAAK,GAAG,OAAO,CAAA;AAAA,IACzD,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,GAAA,EAAqB;AAEvC,IAAA,MAAM,IAAA,GAAO,WAAW,KAAK,CAAA,CAAE,OAAO,GAAG,CAAA,CAAE,OAAO,KAAK,CAAA;AACvD,IAAA,OAAO,GAAG,IAAI,CAAA,KAAA,CAAA;AAAA,EAChB;AACF,CAAA;AAKO,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAW;AAAA,EAC5C,WAAA,CAAY,OAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAM,UAAA,EAAY;AAAA,MAChB,GAAA,EAAK,IAAA;AAAA;AAAA,MACL,OAAA,EAAS,KAAK,IAAA,GAAO,IAAA;AAAA;AAAA,MACrB,UAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAe,IAAA;AAAA,MACf,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,CAAe,WAAA,EAAqB,IAAA,EAAW,GAAA,EAAoB;AACjE,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,QAAA,EAAW,WAAW,CAAA,CAAA,EAAI,MAAM,GAAG,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,WAAA,EAAsC;AACnD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,QAAA,EAAW,WAAW,CAAA,CAAE,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,CAAY,WAAA,EAAqB,QAAA,EAAoB,GAAA,EAAoB;AACvE,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,SAAA,EAAY,WAAW,CAAA,CAAA,EAAI,UAAU,GAAG,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,WAAA,EAA2C;AACrD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,SAAA,EAAY,WAAW,CAAA,CAAE,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAA,CAAkB,WAAA,EAAqB,OAAA,EAAiB,MAAA,EAAa,GAAA,EAAoB;AACvF,IAAA,IAAA,CAAK,IAAI,CAAA,SAAA,EAAY,WAAW,IAAI,OAAO,CAAA,CAAA,EAAI,QAAQ,GAAG,CAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAA,CAAkB,aAAqB,OAAA,EAAkC;AACvE,IAAA,OAAO,KAAK,GAAA,CAAI,CAAA,SAAA,EAAY,WAAW,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AAAA,EACtD;AACF,CAAA;AAKO,IAAM,cAAA,GAAN,cAA6B,KAAA,CAAW;AAAA,EAC7C,WAAA,CAAY,OAAA,GAAwB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAM,WAAA,EAAa;AAAA,MACjB,GAAA,EAAK,GAAA;AAAA;AAAA,MACL,OAAA,EAAS,IAAI,IAAA,GAAO,IAAA;AAAA;AAAA,MACpB,UAAA,EAAY,GAAA;AAAA,MACZ,aAAA,EAAe,KAAA;AAAA;AAAA,MACf,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAA,CAAiB,aAAA,EAAuB,IAAA,EAAW,GAAA,EAAoB;AACrE,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,UAAA,EAAa,aAAa,CAAA,CAAA,EAAI,MAAM,GAAG,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,aAAA,EAAwC;AACvD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,UAAA,EAAa,aAAa,CAAA,CAAE,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,CAAe,QAAA,EAAkB,OAAA,EAAc,GAAA,EAAoB;AACjE,IAAA,IAAA,CAAK,GAAA,CAAI,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAA,EAAI,SAAS,GAAG,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,QAAA,EAAmC;AAChD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAE,CAAA;AAAA,EAC5C;AACF,CAAA;AAG6B,IAAI,aAAA;AACH,IAAI,cAAA;ACjd3B,IAAM,oBAAN,MAAwB;AAAA;AAAA;AAAA;AAAA,EAI7B,MAAM,OAAO,QAAA,EAAoC;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,CAAG,OAAO,QAAQ,CAAA;AACxB,MAAA,OAAO,IAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,OAAA,EAAmC;AACnD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,EAAA,CAAG,IAAA,CAAK,OAAO,CAAA;AAClC,MAAA,OAAO,KAAK,WAAA,EAAY;AAAA,IAC1B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,QAAA,EAAmC;AACpD,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,CAAG,QAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AAAA,IAC5C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,QAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAC7D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CAAc,QAAA,EAAkB,OAAA,EAAgC;AACpE,IAAA,IAAI;AAEF,MAAA,MAAM,EAAA,CAAG,MAAMT,aAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAC1D,MAAA,MAAM,EAAA,CAAG,SAAA,CAAU,QAAA,EAAU,OAAA,EAAS,OAAO,CAAA;AAAA,IAC/C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,QAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAC9D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAsB,QAAA,EAA8B;AACxD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA;AAChD,MAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,QAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CAAc,QAAA,EAAkB,IAAA,EAAW,SAAiB,CAAA,EAAkB;AAClF,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,MAAM,MAAM,CAAA;AACjD,MAAA,MAAM,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,OAAO,CAAA;AAAA,IAC5C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IACnE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAsB,QAAA,EAA8B;AACxD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA;AAChD,MAAA,OAAOU,IAAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,QAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CAAc,QAAA,EAAkB,IAAA,EAA0B;AAC9D,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUA,IAAAA,CAAK,SAAA,CAAU,IAAA,EAAM;AAAA,QACnC,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,MAAM,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,OAAO,CAAA;AAAA,IAC5C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,QAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IACnE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,6BAAA,CAA8B,QAAA,EAAkB,IAAA,EAA0B;AAC9E,IAAA,IAAI;AAEF,MAAA,MAAM,eAAA,GAAkB,MAAM,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAA;AAGxD,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,0BAAA,CAA2B,eAAA,EAAiB,IAAI,CAAA;AAE5E,MAAA,MAAM,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,cAAc,CAAA;AAAA,IACnD,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,sCAAsC,QAAQ,CAAA,qCAAA;AAAA,OAChD;AACA,MAAA,MAAM,IAAA,CAAK,aAAA,CAAc,QAAA,EAAU,IAAI,CAAA;AAAA,IACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,0BAAA,CAA2B,iBAAyB,OAAA,EAAsB;AAChF,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAA;AACxC,IAAA,MAAM,SAAmB,EAAC;AAC1B,IAAA,IAAI,CAAA,GAAI,CAAA;AAGR,IAAA,MAAM,aAAA,GAAgB,CAAC,WAAA,EAAqB,QAAA,KAA2B;AACrE,MAAA,IAAI,EAAE,eAAe,OAAA,CAAA,EAAU;AAC7B,QAAA,OAAO,KAAA;AAAA,MACT;AAGA,MAAA,IAAI,iBAAA,GAAoB,EAAA;AACxB,MAAA,IAAI,eAAA,GAAkB,EAAA;AACtB,MAAA,IAAI,WAAA,GAAc,CAAA;AAElB,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,QAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AACxB,QAAA,IAAI,CAAC,QAAA,EAAU;AAEf,QAAA,MAAM,IAAA,GAAO,SAAS,IAAA,EAAK;AAE3B,QAAA,IAAI,IAAA,CAAK,UAAA,CAAW,CAAA,EAAG,WAAW,GAAG,CAAA,EAAG;AACtC,UAAA,iBAAA,GAAoB,CAAA;AACpB,UAAA,WAAA,GAAc,QAAA,CAAS,MAAA,GAAS,QAAA,CAAS,SAAA,EAAU,CAAE,MAAA;AAGrD,UAAA,KAAA,IAAS,IAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACzC,YAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AACxB,YAAA,IAAI,CAAC,QAAA,EAAU;AAEf,YAAA,MAAM,eAAA,GAAkB,SAAS,IAAA,EAAK;AACtC,YAAA,MAAM,eAAA,GAAkB,QAAA,CAAS,MAAA,GAAS,QAAA,CAAS,WAAU,CAAE,MAAA;AAG/D,YAAA,IACE,eAAA,IAAmB,WAAA,IACnB,eAAA,CAAgB,QAAA,CAAS,GAAG,KAC5B,CAAC,eAAA,CAAgB,UAAA,CAAW,GAAG,CAAA,EAC/B;AACA,cAAA,eAAA,GAAkB,CAAA,GAAI,CAAA;AACtB,cAAA;AAAA,YACF;AAIA,YAAA,IAAI,eAAA,KAAoB,EAAA,IAAM,eAAA,IAAmB,WAAA,EAAa;AAC5D,cAAA,IAAI,eAAA,CAAgB,UAAA,CAAW,GAAG,CAAA,IAAK,oBAAoB,WAAA,EAAa;AAEtE,gBAAA,IAAI,kBAAA,GAAqB,KAAA;AACzB,gBAAA,KAAA,IAAS,CAAA,GAAI,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAC9B,kBAAA,MAAM,QAAA,GAAW,MAAM,CAAC,CAAA;AACxB,kBAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,IAAA,OAAW,EAAA,EAAI;AACvC,oBAAA,kBAAA,GAAqB,IAAA;AACrB,oBAAA;AAAA,kBACF;AACA,kBAAA,IAAI,QAAA,CAAS,IAAA,EAAK,KAAM,EAAA,EAAI;AAC1B,oBAAA;AAAA,kBACF;AAAA,gBACF;AACA,gBAAA,IAAI,kBAAA,EAAoB;AACtB,kBAAA,eAAA,GAAkB,CAAA,GAAI,CAAA;AACtB,kBAAA;AAAA,gBACF;AAAA,cACF,CAAA,MAAA,IAAW,CAAC,eAAA,CAAgB,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3C,gBAAA,eAAA,GAAkB,CAAA,GAAI,CAAA;AACtB,gBAAA;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAEA,UAAA,IAAI,oBAAoB,EAAA,EAAI;AAC1B,YAAA,eAAA,GAAkB,MAAM,MAAA,GAAS,CAAA;AAAA,UACnC;AACA,UAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,sBAAsB,EAAA,EAAI;AAE5B,QAAA,MAAM,iBAAiB,IAAA,CAAK,iBAAA;AAAA,UAC1B,WAAA;AAAA,UACA,QAAA;AAAA,UACA,WAAA;AAAA,UACA,KAAA;AAAA,UACA,iBAAA;AAAA,UACA;AAAA,SACF;AAGA,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,iBAAA,EAAmB,CAAA,EAAA,EAAK;AAC1C,UAAA,MAAM,WAAA,GAAc,MAAM,CAAC,CAAA;AAC3B,UAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,YAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AAAA,UACzB;AAAA,QACF;AAGA,QAAA,MAAA,CAAO,IAAA,CAAK,GAAG,cAAc,CAAA;AAG7B,QAAA,CAAA,GAAI,eAAA,GAAkB,CAAA;AACtB,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAGA,IAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,MAAA,MAAM,WAAA,GAAc,MAAM,CAAC,CAAA;AAC3B,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAA,CAAO,KAAK,EAAE,CAAA;AACd,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAO,YAAY,IAAA,EAAK;AAG9B,MAAA,IAAI,IAAA,CAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AAChC,QAAA,IAAI,aAAA,CAAc,UAAA,EAAY,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC/C,UAAA;AAAA,QACF;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG;AACtC,QAAA,IAAI,aAAA,CAAc,SAAA,EAAW,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC7C,UAAA;AAAA,QACF;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,UAAA,CAAW,WAAW,CAAA,EAAG;AACvC,QAAA,IAAI,aAAA,CAAc,UAAA,EAAY,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC/C,UAAA;AAAA,QACF;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,UAAA,CAAW,cAAc,CAAA,EAAG;AAC1C,QAAA,IAAI,iBAAiB,OAAA,EAAS;AAC5B,UAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY,WAAU,CAAE,MAAA;AAC5D,UAAA,MAAA,CAAO,IAAA,CAAK,IAAI,MAAA,CAAO,MAAM,IAAI,CAAA,aAAA,EAAgB,OAAA,CAAQ,WAAW,CAAA,CAAE,CAAA;AACtE,UAAA,CAAA,EAAA;AACA,UAAA;AAAA,QACF;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,UAAA,CAAW,kBAAkB,CAAA,EAAG;AAC9C,QAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,UAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY,WAAU,CAAE,MAAA;AAC5D,UAAA,MAAA,CAAO,IAAA,CAAK,IAAI,MAAA,CAAO,MAAM,IAAI,CAAA,iBAAA,EAAoB,OAAA,CAAQ,eAAe,CAAA,CAAE,CAAA;AAC9E,UAAA,CAAA,EAAA;AACA,UAAA;AAAA,QACF;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,UAAA,CAAW,wBAAwB,CAAA,EAAG;AACpD,QAAA,IAAI,2BAA2B,OAAA,EAAS;AACtC,UAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY,WAAU,CAAE,MAAA;AAC5D,UAAA,MAAA,CAAO,IAAA;AAAA,YACL,IAAI,MAAA,CAAO,MAAM,CAAA,GAAI,CAAA,uBAAA,EAA0B,QAAQ,qBAAqB,CAAA;AAAA,WAC9E;AACA,UAAA,CAAA,EAAA;AACA,UAAA;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAA,CAAO,KAAK,WAAW,CAAA;AACvB,MAAA,CAAA,EAAA;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKQ,kBACN,WAAA,EACA,KAAA,EACA,aAAqB,CAAA,EACrB,aAAA,EACA,cACA,UAAA,EACU;AACV,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA;AAEpC,IAAA,IAAI,WAAA,KAAgB,UAAA,IAAc,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtD,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,SAAA,CAAW,CAAA;AAC/B,MAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,MACpC;AAAA,IACF,YACG,WAAA,KAAgB,SAAA,IAAa,gBAAgB,UAAA,KAC9C,OAAO,UAAU,QAAA,EACjB;AACA,MAAA,IAAI,gBAAgB,SAAA,EAAW;AAC7B,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,QAAA,CAAU,CAAA;AAG9B,QAAA,IAAI,aAAA,IAAiB,YAAA,KAAiB,MAAA,IAAa,UAAA,KAAe,MAAA,EAAW;AAC3E,UAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA;AACzC,UAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAY;AAG1C,UAAA,KAAA,IAAS,CAAA,GAAI,YAAA,GAAe,CAAA,EAAG,CAAA,IAAK,YAAY,CAAA,EAAA,EAAK;AACnD,YAAA,MAAM,IAAA,GAAO,cAAc,CAAC,CAAA;AAC5B,YAAA,IAAI,CAAC,IAAA,EAAM;AAEX,YAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAG1B,YAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,YAAY,EAAA,EAAI;AAC7C,cAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,cAAA;AAAA,YACF;AAGA,YAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,2CAA2C,CAAA;AAC9E,YAAA,IAAI,YAAA,IAAgB,YAAA,CAAa,CAAC,CAAA,EAAG;AACnC,cAAA,MAAM,WAAA,GAAc,aAAa,CAAC,CAAA;AAClC,cAAA,MAAM,UAAA,GAAa,MAAM,WAAW,CAAA;AAEpC,cAAA,IAAI,eAAe,MAAA,EAAW;AAE5B,gBAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,WAAU,CAAE,MAAA;AACtD,gBAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,CAAC,CAAA,IAAK,EAAA;AACjC,gBAAA,KAAA,CAAM,IAAA;AAAA,kBACJ,GAAA,CAAI,MAAA,CAAO,cAAc,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,EAAG,WAAW,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,UAAU,CAAA;AAAA,iBAC5E;AACA,gBAAA,iBAAA,CAAkB,IAAI,WAAW,CAAA;AAAA,cACnC,CAAA,MAAO;AAEL,gBAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,cACjB;AAAA,YACF,CAAA,MAAO;AAEL,cAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,YACjB;AAAA,UACF;AAGA,UAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,CAAA,IAAK,YAAA,EAAc;AACzC,YAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,GAAG,CAAA,EAAG;AAC/B,cAAA,KAAA,CAAM,KAAK,CAAA,EAAG,MAAM,KAAK,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,YAC5C;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AAEL,UAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAClD,YAAA,KAAA,CAAM,KAAK,CAAA,EAAG,MAAM,KAAK,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,UAC5C;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,SAAA,CAAW,CAAA;AAE/B,QAAA,IAAI,aAAA,IAAiB,YAAA,KAAiB,MAAA,IAAa,UAAA,KAAe,MAAA,EAAW;AAE3E,UAAA,IAAA,CAAK,qBAAA;AAAA,YACH,KAAA;AAAA,YACA,KAAA;AAAA,YACA,UAAA;AAAA,YACA,aAAA;AAAA,YACA,YAAA;AAAA,YACA;AAAA,WACF;AAAA,QACF,CAAA,MAAO;AAEL,UAAA,KAAA,MAAW,CAAC,WAAA,EAAa,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,KAA4B,CAAA,EAAG;AACjF,YAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,WAAW,CAAA,CAAA,CAAG,CAAA;AACvC,YAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACpD,cAAA,KAAA,CAAM,KAAK,CAAA,EAAG,MAAM,OAAO,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,YAC9C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,sBACN,KAAA,EACA,KAAA,EACA,UAAA,EACA,aAAA,EACA,cACA,UAAA,EACM;AACN,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,UAAU,CAAA;AACpC,IAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAY;AAE1C,IAAA,IAAI,IAAI,YAAA,GAAe,CAAA;AACvB,IAAA,OAAO,KAAK,UAAA,EAAY;AACtB,MAAA,MAAM,IAAA,GAAO,cAAc,CAAC,CAAA;AAC5B,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAG1B,MAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,IAAK,YAAY,EAAA,EAAI;AAC7C,QAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,QAAA,CAAA,EAAA;AACA,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,0BAA0B,CAAA;AAC7D,MAAA,IAAI,YAAA,IAAgB,YAAA,CAAa,CAAC,CAAA,EAAG;AACnC,QAAA,MAAM,WAAA,GAAc,aAAa,CAAC,CAAA;AAClC,QAAA,MAAM,WAAA,GAAc,MAAM,WAAW,CAAA;AAErC,QAAA,IAAI,WAAA,EAAa;AAEf,UAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,WAAU,CAAE,MAAA;AACtD,UAAA,KAAA,CAAM,KAAK,GAAA,CAAI,MAAA,CAAO,cAAc,CAAA,GAAI,CAAA,EAAG,WAAW,CAAA,CAAA,CAAG,CAAA;AACzD,UAAA,iBAAA,CAAkB,IAAI,WAAW,CAAA;AAGjC,UAAA,CAAA,EAAA;AACA,UAAA,OAAO,KAAK,UAAA,EAAY;AACtB,YAAA,MAAM,WAAA,GAAc,cAAc,CAAC,CAAA;AACnC,YAAA,IAAI,CAAC,WAAA,EAAa;AAChB,cAAA,CAAA,EAAA;AACA,cAAA;AAAA,YACF;AAEA,YAAA,MAAM,cAAA,GAAiB,YAAY,IAAA,EAAK;AACxC,YAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,MAAA,GAAS,WAAA,CAAY,WAAU,CAAE,MAAA;AAGnE,YAAA,IACE,aAAA,IAAiB,kBACjB,cAAA,KAAmB,EAAA,IACnB,CAAC,cAAA,CAAe,UAAA,CAAW,GAAG,CAAA,EAC9B;AACA,cAAA;AAAA,YACF;AAGA,YAAA,IAAI,cAAA,CAAe,UAAA,CAAW,GAAG,CAAA,IAAK,mBAAmB,EAAA,EAAI;AAC3D,cAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,cAAA,CAAA,EAAA;AACA,cAAA;AAAA,YACF;AAGA,YAAA,MAAM,YAAA,GAAe,cAAA,CAAe,KAAA,CAAM,2CAA2C,CAAA;AACrF,YAAA,IAAI,YAAA,IAAgB,YAAA,CAAa,CAAC,CAAA,EAAG;AACnC,cAAA,MAAM,WAAA,GAAc,aAAa,CAAC,CAAA;AAClC,cAAA,MAAM,UAAA,GAAa,YAAY,WAAW,CAAA;AAE1C,cAAA,IAAI,eAAe,MAAA,EAAW;AAE5B,gBAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,CAAC,CAAA,IAAK,EAAA;AACjC,gBAAA,KAAA,CAAM,IAAA;AAAA,kBACJ,GAAA,CAAI,MAAA,CAAO,aAAa,CAAA,GAAI,CAAA,EAAG,KAAK,CAAA,EAAG,WAAW,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,UAAU,CAAA;AAAA,iBAC3E;AAAA,cACF,CAAA,MAAO;AAEL,gBAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AAAA,cACxB;AAAA,YACF,CAAA,MAAO;AAEL,cAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AAAA,YACxB;AAEA,YAAA,CAAA,EAAA;AAAA,UACF;AAGA,UAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxD,YAAA,IACE,CAAC,IAAA,CAAK,6BAAA;AAAA,cACJ,aAAA;AAAA,cACA,YAAA;AAAA,cACA,UAAA;AAAA,cACA,WAAA;AAAA,cACA;AAAA,aACF,EACA;AACA,cAAA,KAAA,CAAM,KAAK,CAAA,EAAG,MAAM,KAAK,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,YAC5C;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AAEL,UAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,UAAA,CAAA,EAAA;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,QAAA,CAAA,EAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,WAAW,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC9D,MAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,WAAW,CAAA,EAAG;AACvC,QAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,WAAW,CAAA,CAAA,CAAG,CAAA;AACvC,QAAA,KAAA,MAAW,CAAC,GAAA,EAAK,OAAO,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxD,UAAA,KAAA,CAAM,KAAK,CAAA,EAAG,MAAM,OAAO,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,QAC9C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,6BAAA,CACN,KAAA,EACA,YAAA,EACA,UAAA,EACA,aACA,WAAA,EACS;AACT,IAAA,IAAI,YAAA,GAAe,KAAA;AAEnB,IAAA,KAAA,IAAS,CAAA,GAAI,YAAA,GAAe,CAAA,EAAG,CAAA,IAAK,YAAY,CAAA,EAAA,EAAK;AACnD,MAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,MAAA,IAAI,CAAC,IAAA,EAAM;AAEX,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAG1B,MAAA,IAAI,OAAA,KAAY,CAAA,EAAG,WAAW,CAAA,CAAA,CAAA,EAAK;AACjC,QAAA,YAAA,GAAe,IAAA;AACf,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,YAAA,IAAgB,OAAA,CAAQ,KAAA,CAAM,wBAAwB,CAAA,EAAG;AAC3D,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,2CAA2C,CAAA;AAC9E,QAAA,IAAI,YAAA,IAAgB,YAAA,CAAa,CAAC,CAAA,KAAM,WAAA,EAAa;AACnD,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBAAwB,aAAA,EAA0D;AACtF,IAAA,MAAM,UAAA,GAAa,aAAA,CAAc,0BAAA,EAA2B,CAAE,QAAA,EAAS;AAEvE,IAAA,IAAI,CAAE,MAAM,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA,EAAI;AACpC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,UAAU,CAAA,CAAE,CAAA;AAAA,IAClE;AAEA,IAAA,OAAO,MAAM,IAAA,CAAK,YAAA,CAAgC,UAAU,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBAAA,CACJ,aAAA,EACA,MAAA,EACe;AACf,IAAA,MAAM,UAAA,GAAa,aAAA,CAAc,0BAAA,EAA2B,CAAE,QAAA,EAAS;AACvE,IAAA,MAAM,IAAA,CAAK,6BAAA,CAA8B,UAAA,EAAY,MAAM,CAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,WAAA,EAAsD;AAC1E,IAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,kBAAA,EAAmB,CAAE,QAAA,EAAS;AAElE,IAAA,IAAI,CAAE,MAAM,IAAA,CAAK,MAAA,CAAO,eAAe,CAAA,EAAI;AACzC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,eAAe,CAAA,CAAE,CAAA;AAAA,IAChE;AAEA,IAAA,OAAO,MAAM,IAAA,CAAK,YAAA,CAA8B,eAAe,CAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CAAiB,WAAA,EAA4B,WAAA,EAA6C;AAC9F,IAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,kBAAA,EAAmB,CAAE,QAAA,EAAS;AAClE,IAAA,MAAM,IAAA,CAAK,aAAA,CAAc,eAAA,EAAiB,WAAW,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAA,CAAqB,aAAA,EAA8B,QAAA,EAAuC;AAC9F,IAAA,MAAM,UAAoB,EAAC;AAE3B,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI;AAEF,QAAA,MAAM,kBAAkBV,aAAAA,CAAK,OAAA,CAAQ,cAAc,QAAA,EAAS,EAAG,SAAS,cAAc,CAAA;AACtF,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,eAAA,EAAiB;AAAA,UAC1C,MAAA,EAAQ,CAAC,oBAAoB,CAAA;AAAA,UAC7B,QAAA,EAAU;AAAA,SACX,CAAA;AACD,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,OAAO,CAAA;AAAA,MACzB,SAAS,KAAA,EAAO;AAEd,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,MAC7D;AAAA,IACF;AAGA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,CAAgB,aAAA,EAA8B,QAAA,EAAuC;AACzF,IAAA,MAAM,UAAoB,EAAC;AAE3B,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI;AACF,QAAA,MAAM,kBAAkBA,aAAAA,CAAK,OAAA,CAAQ,aAAA,CAAc,QAAA,IAAY,OAAO,CAAA;AACtE,QAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,eAAA,EAAiB;AAAA,UAC1C,MAAA,EAAQ,CAAC,oBAAoB,CAAA;AAAA,UAC7B,QAAA,EAAU;AAAA,SACX,CAAA;AACD,QAAA,OAAA,CAAQ,IAAA,CAAK,GAAG,OAAO,CAAA;AAAA,MACzB,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,0BAAA,EAA6B,OAAO,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,MAC7D;AAAA,IACF;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,OAAA,EAAmC;AACvD,IAAA,MAAM,mBAAA,GAAsBA,aAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,qBAAqB,CAAA;AACpE,IAAA,MAAM,eAAA,GAAkBA,aAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,cAAc,CAAA;AAGzD,IAAA,OAAQ,MAAM,KAAK,MAAA,CAAO,mBAAmB,KAAO,MAAM,IAAA,CAAK,OAAO,eAAe,CAAA;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAqB,SAAA,EAA2C;AACpE,IAAA,IAAI,WAAA,GAAcA,aAAAA,CAAK,OAAA,CAAQ,SAAS,CAAA;AAExC,IAAA,OAAO,WAAA,KAAgBA,aAAAA,CAAK,OAAA,CAAQ,WAAW,CAAA,EAAG;AAChD,MAAA,IAAI,MAAM,IAAA,CAAK,eAAA,CAAgB,WAAW,CAAA,EAAG;AAC3C,QAAA,OAAO,WAAA;AAAA,MACT;AACA,MAAA,WAAA,GAAcA,aAAAA,CAAK,QAAQ,WAAW,CAAA;AAAA,IACxC;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,QAAA,EAAiC;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,EAAA,CAAG,IAAA,CAAK,QAAQ,CAAA;AACnC,MAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACd,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,QAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAC7E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,QAAA,EAAmC;AACpD,IAAA,MAAM,SAAA,GAAA,qBAAgB,IAAA,EAAK,EAAE,aAAY,CAAE,OAAA,CAAQ,SAAS,GAAG,CAAA;AAC/D,IAAA,MAAM,UAAA,GAAa,CAAA,EAAG,QAAQ,CAAA,QAAA,EAAW,SAAS,CAAA,CAAA;AAElD,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,CAAG,QAAA,CAAS,QAAA,EAAU,UAAU,CAAA;AACtC,MAAA,OAAO,UAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,QAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IACpE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkB,YAAA,EAAsB,UAAA,EAAmC;AAC/E,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,CAAG,QAAA,CAAS,UAAA,EAAY,YAAY,CAAA;AAAA,IAC5C,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,YAAY,CAAA,cAAA,EAAiB,KAAK,CAAA,CAAE,CAAA;AAAA,IAC3E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,QAAA,EAAiC;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,CAAG,OAAO,QAAQ,CAAA;AAAA,IAC1B,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,QAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,OAAA,EAAoC;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAM,EAAA,CAAG,OAAA,CAAQ,SAAS,EAAE,aAAA,EAAe,MAAM,CAAA;AAC/D,MAAA,OAAO,MAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,SAASA,aAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,IAC1F,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,OAAO,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB,OAAA,EAAoC;AACxD,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAM,EAAA,CAAG,OAAA,CAAQ,SAAS,EAAE,aAAA,EAAe,MAAM,CAAA;AAC/D,MAAA,OAAO,MACJ,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,aAAa,CAAA,CACnC,GAAA,CAAI,CAAC,SAASA,aAAAA,CAAK,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,IAChD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,OAAO,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IACtE;AAAA,EACF;AACF,CAAA;ACtvBO,IAAM,0BAAN,MAA6D;AAAA,EAClE,YAA6B,iBAAA,EAAsC;AAAtC,IAAA,IAAA,CAAA,iBAAA,GAAA,iBAAA;AAAA,EAAuC;AAAA;AAAA;AAAA;AAAA,EAKpE,MAAM,WAAWA,KAAAA,EAAgD;AAC/D,IAAA,IAAI;AAEF,MAAA,IAAI,CAAE,MAAM,IAAA,CAAK,gBAAA,CAAiBA,KAAI,CAAA,EAAI;AACxC,QAAA,OAAO,IAAA;AAAA,MACT;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,iBAAA,CAAkBA,KAAI,CAAA;AAGhD,MAAA,MAAM,EAAA,GAAK,WAAA,CAAY,QAAA,CAASA,KAAAA,CAAK,UAAU,CAAA;AAG/C,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,YAAA,CAAaA,OAAM,MAAM,CAAA;AAGrD,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,YAAA,CAAa,MAAM,CAAA;AAE/C,MAAA,OAAO,UAAU,MAAA,CAAO,EAAA,EAAIA,KAAAA,EAAM,MAAA,EAAQ,UAAU,QAAQ,CAAA;AAAA,IAC9D,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,MAAM,CAAA,8BAAA,EAAiCA,KAAAA,CAAK,QAAA,EAAU,KAAK,KAAK,CAAA;AACxE,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAS,GAAA,EAA6C;AAG1D,IAAA,MAAM,IAAI,MAAM,qEAAqE,CAAA;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAK,SAAA,EAAqC;AAC9C,IAAA,IAAI;AAEF,MAAA,MAAM,KAAK,iBAAA,CAAkB,SAAA,CAAU,SAAQ,EAAG,SAAA,CAAU,WAAW,CAAA;AAGvE,MAAA,MAAM,IAAA,CAAK,YAAA,CAAa,SAAA,CAAU,WAAA,EAAa,CAAA;AAAA,IACjD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,KAAK,CAAA,CAAE,CAAA;AAAA,IACtD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkBA,KAAAA,EAA+C;AACrE,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,iBAAA,CAAkB,wBAAwBA,KAAI,CAAA;AAC/E,MAAA,OAAO,eAAA,CAAgB,kBAAkB,aAAa,CAAA;AAAA,IACxD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,CAAA,4CAAA,EAA+CA,KAAAA,CAAK,UAAU,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAC5F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkBA,KAAAA,EAAqB,MAAA,EAAwC;AACnF,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,OAAO,mBAAA,EAAoB;AACjD,MAAA,MAAM,IAAA,CAAK,iBAAA,CAAkB,wBAAA,CAAyBA,KAAAA,EAAM,aAAa,CAAA;AAAA,IAC3E,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,MAAM,CAAA,0CAAA,EAA6CA,KAAAA,CAAK,UAAU,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,IAC1F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiBA,KAAAA,EAAuC;AAC5D,IAAA,OAAO,MAAM,IAAA,CAAK,iBAAA,CAAkB,eAAA,CAAgBA,KAAAA,CAAK,UAAU,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,UAAA,EAAuD;AAC7E,IAAA,MAAM,SAAA,GAAY,UAAA,EAAY,QAAA,EAAS,IAAK,QAAQ,GAAA,EAAI;AAExD,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,iBAAA,CAAkB,qBAAqB,SAAS,CAAA;AAEjF,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,OAAO,MAAM,IAAA,CAAK,UAAA,CAAW,aAAA,CAAc,UAAA,CAAW,aAAa,CAAC,CAAA;AAAA,IACtE,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,kCAAA,EAAqC,SAAS,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AACtE,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,YAAA,CACZ,aAAA,EACA,MAAA,EAC4B;AAC5B,IAAA,IAAI;AACF,MAAA,MAAM,eAAA,GAAkB,OAAO,kBAAA,EAAmB;AAGlD,MAAA,MAAM,gBAAA,GAAmB,MAAM,IAAA,CAAK,iBAAA,CAAkB,oBAAA;AAAA,QACpD,aAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,MAAM,WAAsB,EAAC;AAE7B,MAAA,KAAA,MAAW,mBAAmB,gBAAA,EAAkB;AAC9C,QAAA,IAAI;AACF,UAAA,MAAM,UAAA,GAAaA,aAAAA,CAAK,OAAA,CAAQ,eAAe,CAAA;AAC/C,UAAA,MAAM,WAAA,GAAc,aAAA,CAAc,UAAA,CAAW,UAAU,CAAA;AAGvD,UAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,iBAAA,CAAkB,gBAAgB,WAAW,CAAA;AAG5E,UAAA,MAAM,SAAA,GAAY,CAAA,EAAG,WAAA,CAAY,IAAI,IAAI,UAAU,CAAA,CAAA;AACnD,UAAA,MAAM,MAAM,OAAA,CAAQ,MAAA,CAAO,WAAW,WAAA,CAAY,IAAA,EAAM,aAAa,WAAW,CAAA;AAEhF,UAAA,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,QACnB,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,4BAAA,EAA+B,eAAe,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAAA,QAEvE;AAAA,MACF;AAEA,MAAA,OAAO,iBAAA,CAAkB,aAAa,QAAQ,CAAA;AAAA,IAChD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,KAAK,CAAA,CAAE,CAAA;AAAA,IACrD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAa,MAAA,EAAqD;AAC9E,IAAA,IAAI;AACF,MAAA,MAAM,WAAsB,EAAC;AAC7B,MAAA,MAAM,kBAAA,GAAqB,OAAO,qBAAA,EAAsB;AAExD,MAAA,KAAA,MAAW,CAAC,WAAA,EAAa,UAAU,CAAA,IAAK,kBAAA,EAAoB;AAC1D,QAAA,MAAM,SAAA,GAAY,WAAW,WAAW,CAAA,CAAA;AACxC,QAAA,MAAM,UAAU,OAAA,CAAQ,MAAA;AAAA,UACtB,SAAA;AAAA,UACA,WAAA;AAAA,UACA,WAAW,eAAA,EAAgB;AAAA,UAC3B,OAAO,cAAA;AAAe,SACxB;AACA,QAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,MACvB;AAEA,MAAA,OAAO,iBAAA,CAAkB,aAAa,QAAQ,CAAA;AAAA,IAChD,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,KAAK,CAAA,CAAE,CAAA;AAAA,IACrD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,aAAa,QAAA,EAA4C;AACrE,IAAA,KAAA,MAAW,GAAA,IAAO,QAAA,CAAS,MAAA,EAAO,EAAG;AACnC,MAAA,IAAI;AACF,QAAA,MAAM,WAAA,GAAc,IAAI,iBAAA,EAAkB;AAC1C,QAAA,MAAM,KAAK,iBAAA,CAAkB,gBAAA,CAAiB,GAAA,CAAI,OAAA,IAAW,WAAW,CAAA;AAAA,MAC1E,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,MAAM,CAAA,uBAAA,EAA0B,GAAA,CAAI,OAAA,EAAS,KAAK,KAAK,CAAA;AAAA,MAEjE;AAAA,IACF;AAAA,EACF;AACF,CAAA;ACtKO,IAAM,eAAN,MAAmB;AAAA,EACxB,OAAe,YAAA;AAAA,EAEf,OAAO,MAAA,GAAS;AAAA,IACd,OAAA,EAAS;AAAA,MACP,SAAS,CAAC,IAAA,KAAiBF,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACpD,WAAW,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACtD,QAAQ,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAEnD,OAAA,EAAS,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MAC3C,OAAA,EAAS,CAAC,IAAA,KAAiBA,MAAAA,CAAM,OAAO,IAAI,CAAA;AAAA,MAC5C,KAAA,EAAO,CAAC,IAAA,KAAiBA,MAAAA,CAAM,IAAI,IAAI,CAAA;AAAA,MACvC,IAAA,EAAM,CAAC,IAAA,KAAiBA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MAEvC,IAAA,EAAM,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MACxC,KAAA,EAAO,CAAC,IAAA,KAAiBA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MACxC,MAAA,EAAQ,CAAC,IAAA,KAAiBA,MAAAA,CAAM,IAAI,IAAI,CAAA;AAAA,MACxC,UAAA,EAAY,CAAC,IAAA,KAAiBA,MAAAA,CAAM,QAAQ,IAAI,CAAA;AAAA,MAEhD,OAAA,EAAS,CAAC,IAAA,KAAiBA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MAC1C,UAAA,EAAY,CAAC,IAAA,KAAiBA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MAC7C,SAAA,EAAW,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MAE7C,KAAA,EAAO,CAAC,IAAA,KAAiBA,MAAAA,CAAM,IAAI,IAAI,CAAA;AAAA,MACvC,KAAA,EAAO,CAAC,IAAA,KAAiBA,MAAAA,CAAM,OAAO,IAAI,CAAA;AAAA,MAC1C,KAAA,EAAO,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MACzC,UAAA,EAAY,CAAC,IAAA,KAAiBA,MAAAA,CAAM,QAAQ,IAAI,CAAA;AAAA,MAEhD,QAAA,EAAU,CAAC,IAAA,KAAiBA,MAAAA,CAAM,IAAI,IAAI,CAAA;AAAA,MAC1C,UAAA,EAAY,CAAC,IAAA,KAAiBA,MAAAA,CAAM,OAAO,IAAI,CAAA;AAAA,MAC/C,OAAA,EAAS,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI;AAAA,KAC7C;AAAA,IAEA,MAAA,EAAQ;AAAA,MACN,SAAS,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACpD,WAAW,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACtD,QAAQ,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAEnD,SAAS,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACpD,SAAS,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACpD,OAAO,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAClD,MAAM,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAEjD,MAAM,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACjD,OAAO,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAClD,QAAQ,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACnD,YAAY,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAEvD,SAAS,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACpD,YAAY,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACvD,WAAW,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAEtD,OAAO,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAClD,OAAO,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAClD,OAAO,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAClD,YAAY,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAEvD,UAAU,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACrD,YAAY,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACvD,SAAS,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI;AAAA,KACtD;AAAA,IAEA,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MAC3C,SAAA,EAAW,CAAC,IAAA,KAAiBA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MAC5C,MAAA,EAAQ,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MAE1C,OAAA,EAAS,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MAC3C,OAAA,EAAS,CAAC,IAAA,KAAiBA,MAAAA,CAAM,OAAO,IAAI,CAAA;AAAA,MAC5C,KAAA,EAAO,CAAC,IAAA,KAAiBA,MAAAA,CAAM,IAAI,IAAI,CAAA;AAAA,MACvC,IAAA,EAAM,CAAC,IAAA,KAAiBA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MAEvC,IAAA,EAAM,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MACxC,KAAA,EAAO,CAAC,IAAA,KAAiBA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MACxC,MAAA,EAAQ,CAAC,IAAA,KAAiBA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MACzC,UAAA,EAAY,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MAE9C,OAAA,EAAS,CAAC,IAAA,KAAiBA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MAC1C,UAAA,EAAY,CAAC,IAAA,KAAiBA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MAC7C,SAAA,EAAW,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MAE7C,KAAA,EAAO,CAAC,IAAA,KAAiBA,MAAAA,CAAM,IAAI,IAAI,CAAA;AAAA,MACvC,KAAA,EAAO,CAAC,IAAA,KAAiBA,MAAAA,CAAM,OAAO,IAAI,CAAA;AAAA,MAC1C,KAAA,EAAO,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MACzC,UAAA,EAAY,CAAC,IAAA,KAAiBA,MAAAA,CAAM,QAAQ,IAAI,CAAA;AAAA,MAEhD,QAAA,EAAU,CAAC,IAAA,KAAiBA,MAAAA,CAAM,IAAI,IAAI,CAAA;AAAA,MAC1C,UAAA,EAAY,CAAC,IAAA,KAAiBA,MAAAA,CAAM,OAAO,IAAI,CAAA;AAAA,MAC/C,OAAA,EAAS,CAAC,IAAA,KAAiBA,MAAAA,CAAM,MAAM,IAAI;AAAA,KAC7C;AAAA,IAEA,IAAA,EAAM;AAAA,MACJ,SAAS,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACpD,WAAW,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACtD,QAAQ,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAEnD,SAAS,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACpD,SAAS,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACpD,OAAO,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAClD,MAAM,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAEjD,MAAM,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACjD,OAAO,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAClD,QAAQ,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACnD,YAAY,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAEvD,SAAS,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACpD,YAAY,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACvD,WAAW,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAEtD,OAAO,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAClD,OAAO,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAClD,OAAO,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAClD,YAAY,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MAEvD,UAAU,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACrD,YAAY,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI,CAAA;AAAA,MACvD,SAAS,CAAC,IAAA,KAAiBA,OAAM,GAAA,CAAI,SAAS,EAAE,IAAI;AAAA;AACtD,GACF;AAAA,EAEA,OAAO,SAAS,SAAA,EAAmD;AACjE,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAAA,EAC3C;AAAA,EAEA,OAAO,QAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,MAAA,CAAO,OAAA;AAAA,EAC1C;AAAA,EAEA,OAAO,UAAA,GAAuB;AAC5B,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,EAChC;AACF,CAAA;AAKO,IAAM,aAAN,MAAiB;AAAA,EACtB,OAAe,KAAA,GAAQ,YAAA,CAAa,QAAA,EAAS;AAAA,EAE7C,OAAO,WAAA,GAAoB;AACzB,IAAA,IAAA,CAAK,KAAA,GAAQ,aAAa,QAAA,EAAS;AAAA,EACrC;AAAA;AAAA,EAGA,OAAO,MAAM,IAAA,EAAsB;AACjC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,OAAO,UAAU,IAAA,EAAsB;AACrC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,IAAI,CAAA;AAAA,EAClC;AAAA,EAEA,OAAO,OAAO,IAAA,EAAsB;AAClC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,EAC/B;AAAA;AAAA,EAGA,OAAO,QAAQ,IAAA,EAAsB;AACnC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,OAAO,QAAQ,IAAA,EAAsB;AACnC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,OAAO,MAAM,IAAA,EAAsB;AACjC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,KAAK,IAAA,EAAsB;AAChC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,EAC7B;AAAA;AAAA,EAGA,OAAO,KAAK,IAAA,EAAsB;AAChC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,EAC7B;AAAA,EAEA,OAAO,MAAM,IAAA,EAAsB;AACjC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,OAAO,IAAA,EAAsB;AAClC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,EAC/B;AAAA;AAAA,EAGA,OAAO,QAAQ,IAAA,EAAsB;AACnC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,OAAO,WAAW,IAAA,EAAsB;AACtC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAAA,EACnC;AAAA,EAEA,OAAO,UAAU,IAAA,EAAsB;AACrC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,SAAA,CAAU,IAAI,CAAA;AAAA,EAClC;AAAA;AAAA,EAGA,OAAO,aAAa,IAAA,EAAsB;AACxC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,aAAa,IAAA,EAAsB;AACxC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,aAAa,IAAA,EAAsB;AACxC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA;AAAA,EAC9B;AAAA,EAEA,OAAO,kBAAkB,IAAA,EAAsB;AAC7C,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAAA,EACnC;AAAA;AAAA,EAGA,OAAO,SAAS,IAAA,EAAsB;AACpC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA;AAAA,EACjC;AAAA,EAEA,OAAO,WAAW,IAAA,EAAsB;AACtC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,IAAI,CAAA;AAAA,EACnC;AAAA,EAEA,OAAO,QAAQ,IAAA,EAAsB;AACnC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,EAChC;AAAA;AAAA,EAGA,OAAO,IAAA,CAAK,IAAA,EAAc,IAAA,EAAuB;AAC/C,IAAA,OAAO,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK,IAAA;AAAA,EACpC;AAAA,EAEA,OAAO,YAAY,IAAA,EAAuB;AACxC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,QAAA,EAAK,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEA,OAAO,YAAY,IAAA,EAAuB;AACxC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,cAAA,EAAM,IAAI,CAAA;AAAA,EAC7B;AAAA,EAEA,OAAO,UAAU,IAAA,EAAuB;AACtC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,QAAA,EAAK,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEA,OAAO,SAAS,IAAA,EAAuB;AACrC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,cAAA,EAAM,IAAI,CAAA;AAAA,EAC7B;AAAA,EAEA,OAAO,YAAY,IAAA,EAAuB;AACxC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,WAAA,EAAM,IAAI,CAAA;AAAA,EAC7B;AAAA,EAEA,OAAO,YAAY,IAAA,EAAuB;AACxC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,WAAA,EAAM,IAAI,CAAA;AAAA,EAC7B;AAAA,EAEA,OAAO,WAAW,IAAA,EAAuB;AACvC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,WAAA,EAAM,IAAI,CAAA;AAAA,EAC7B;AAAA,EAEA,OAAO,aAAa,IAAA,EAAuB;AACzC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,WAAA,EAAM,IAAI,CAAA;AAAA,EAC7B;AAAA,EAEA,OAAO,aAAa,IAAA,EAAuB;AACzC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,WAAA,EAAM,IAAI,CAAA;AAAA,EAC7B;AAAA,EAEA,OAAO,UAAU,IAAA,EAAuB;AACtC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,QAAA,EAAK,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEA,OAAO,aAAa,IAAA,EAAuB;AACzC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,QAAA,EAAK,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEA,OAAO,aAAa,IAAA,EAAuB;AACzC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,WAAA,EAAM,IAAI,CAAA;AAAA,EAC7B;AACF,CAAA;;;AC7SO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,oBAAA,EAA4C;AAA5C,IAAA,IAAA,CAAA,oBAAA,GAAA,oBAAA;AAAA,EAA6C;AAAA;AAAA;AAAA;AAAA,EAK1E,MAAM,OAAA,CAAQ,OAAA,GAA+B,EAAC,EAAkB;AAC9D,IAAA,IAAI;AAEF,MAAA,YAAA,CAAa,SAAS,SAAS,CAAA;AAE/B,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,YAAA,CAAa,4CAA4C,CAAC,CAAA;AACjF,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,CAAA,WAAA,EAAc,OAAA,CAAQ,aAAa,OAAA,CAAQ,GAAA,EAAK,CAAA,CAAE,CAAC,CAAA;AAEhF,QAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,UAAA,OAAA,CAAQ,IAAI,UAAA,CAAW,KAAA,CAAM,YAAY,OAAA,CAAQ,OAAO,EAAE,CAAC,CAAA;AAAA,QAC7D;AAEA,QAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA,KAAW,QAAA,EAAU;AACjD,UAAA,OAAA,CAAQ,IAAI,UAAA,CAAW,KAAA,CAAM,WAAW,OAAA,CAAQ,MAAM,EAAE,CAAC,CAAA;AAAA,QAC3D;AAEA,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,MAChB;AAGA,MAAA,MAAM,SAAS,YAAA,CAAa,UAAA,CAAW,QAAQ,SAAA,IAAa,OAAA,CAAQ,KAAK,CAAA;AAGzE,MAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,MAAA,IAAU,MAAA,CAAO,UAAU,MAAA,IAAU,OAAA;AAGrE,MAAA,MAAM,YAAY,IAAI,eAAA;AAAA,QACpB,eAAA;AAAA,QACA,QAAQ,KAAA,KAAU;AAAA,OACpB;AAGA,MAAA,MAAM,YAAA,GAA6B;AAAA,QACjC,eAAe,OAAA,CAAQ,SAAA;AAAA,QACvB,aAAa,OAAA,CAAQ,OAAA;AAAA,QACrB,MAAA,EAAQ,OAAA,CAAQ,MAAA,IAAU,MAAA,CAAO,UAAU,MAAA,IAAU,QAAA;AAAA,QACrD,iBAAA,EAAmB,OAAA,CAAQ,UAAA,IAAc,MAAA,CAAO,UAAU,iBAAA,IAAqB,KAAA;AAAA;AAAA,QAE/E,SAAS,OAAA,CAAQ,OAAA,EAAS,MAAA,GAAS,OAAA,CAAQ,UAAU,MAAA,CAAO,OAAA;AAAA,QAC5D,SAAS,OAAA,CAAQ,OAAA,EAAS,MAAA,GAAS,OAAA,CAAQ,UAAU,MAAA,CAAO;AAAA,OAC9D;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,oBAAA,CAAqB,0BAA0B,YAAY,CAAA;AAGrF,MAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,oBAAA,CAAqB,MAAM,CAAA;AAC7D,MAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAG3B,MAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,MAAA,KAAW,OAAA,EAAS;AACjD,QAAA,IAAA,CAAK,WAAA,CAAY,QAAQ,OAAO,CAAA;AAAA,MAClC;AAIA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,SAAA,CAAU,8BAA8B,CAAC,CAAA;AAClE,MAAA,OAAA,CAAQ,MAAM,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAE7C,MAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,KAAA,YAAiB,KAAA,EAAO;AAC7C,QAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,cAAc,CAAC,CAAA;AAC9C,QAAA,OAAA,CAAQ,MAAM,UAAA,CAAW,KAAA,CAAM,KAAA,CAAM,KAAA,IAAS,0BAA0B,CAAC,CAAA;AAAA,MAC3E;AAEA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,CAAY,QAAa,QAAA,EAAqC;AACpE,IAAA,MAAM,QAAkB,EAAC;AACzB,IAAA,MAAM,KAAA,GAAQ,aAAa,QAAA,EAAS;AAEpC,IAAA,IAAI,CAAC,OAAO,UAAA,EAAY;AACtB,MAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,WAAA,CAAY,0CAA0C,CAAC,CAAA;AAAA,IAC/E,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,UAAU,CAAC,CAAA;AAC1C,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAO,MAAA,CAAO,aAAa,CAAA,4BAAA,CAA8B,CAAA;AACpE,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAO,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,iBAAA,CAAmB,CAAA;AAE3D,MAAA,MAAM,aAAA,GAAgB,OAAO,QAAA,CAAS,MAAA;AAAA,QACpC,CAAC,GAAA,EAAa,GAAA,KAAa,GAAA,GAAM,GAAA,CAAI,aAAA;AAAA,QACrC;AAAA,OACF;AACA,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAO,aAAa,CAAA,sBAAA,CAAwB,CAAA;AAGvD,MAAA,MAAM,cAAc,EAAE,KAAA,EAAO,GAAG,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,EAAE;AAEnD,MAAA,KAAA,MAAW,OAAA,IAAW,OAAO,QAAA,EAAU;AACrC,QAAA,KAAA,MAAW,GAAA,IAAO,QAAQ,oBAAA,EAAsB;AAC9C,UAAA,WAAA,CAAY,IAAI,UAAsC,CAAA,EAAA;AAAA,QACxD;AAAA,MACF;AAEA,MAAA,IAAI,WAAA,CAAY,QAAQ,CAAA,EAAG;AACzB,QAAA,KAAA,CAAM,KAAK,KAAA,CAAM,KAAA,CAAM,YAAO,WAAA,CAAY,KAAK,gBAAgB,CAAC,CAAA;AAAA,MAClE;AACA,MAAA,IAAI,WAAA,CAAY,QAAQ,CAAA,EAAG;AACzB,QAAA,KAAA,CAAM,KAAK,KAAA,CAAM,KAAA,CAAM,YAAO,WAAA,CAAY,KAAK,gBAAgB,CAAC,CAAA;AAAA,MAClE;AACA,MAAA,IAAI,WAAA,CAAY,QAAQ,CAAA,EAAG;AACzB,QAAA,KAAA,CAAM,KAAK,KAAA,CAAM,KAAA,CAAM,YAAO,WAAA,CAAY,KAAK,gBAAgB,CAAC,CAAA;AAAA,MAClE;AAGA,MAAA,MAAM,kBAAkB,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,CAAC,KAAa,GAAA,KAAa;AACxE,QAAA,OAAO,GAAA,GAAM,IAAI,oBAAA,CAAqB,MAAA,CAAO,CAAC,GAAA,KAAa,GAAA,CAAI,gBAAgB,CAAA,CAAE,MAAA;AAAA,MACnF,GAAG,CAAC,CAAA;AAEJ,MAAA,IAAI,kBAAkB,CAAA,EAAG;AACvB,QAAA,KAAA,CAAM,KAAK,UAAA,CAAW,YAAA,CAAa,CAAA,EAAG,eAAe,mBAAmB,CAAC,CAAA;AAAA,MAC3E;AAEA,MAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,MAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,UAAA,CAAW,oCAAoC,CAAC,CAAA;AAEtE,MAAA,IAAI,WAAA,CAAY,QAAQ,CAAA,EAAG;AACzB,QAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,WAAA,CAAY,4CAA4C,CAAC,CAAA;AAAA,MACjF;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAgB,OAAA,EAAwC;AAC7D,IAAA,MAAM,SAAmB,EAAC;AAG1B,IAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,CAAC,CAAC,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,EAAG;AACpF,MAAA,MAAA,CAAO,KAAK,4DAA4D,CAAA;AAAA,IAC1E;AAGA,IAAA,IACE,OAAA,CAAQ,MAAA,IACR,CAAC,CAAC,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,EAC3E;AACA,MAAA,MAAA,CAAO,KAAK,wEAAwE,CAAA;AAAA,IACtF;AAGA,IAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,OAAA,KAAY,CAAC,OAAA,CAAQ,IAAA,EAAM,CAAA,EAAG;AACzE,MAAA,MAAA,CAAO,KAAK,kCAAkC,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,OAAA,KAAY,CAAC,OAAA,CAAQ,IAAA,EAAM,CAAA,EAAG;AACzE,MAAA,MAAA,CAAO,KAAK,kCAAkC,CAAA;AAAA,IAChD;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAA,GAAsB;AAC3B,IAAA,OAAO;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,EA8BT;AACF,CAAA;AC7MO,IAAM,cAAN,MAAkB;AAAA;AAAA;AAAA;AAAA,EAIvB,MAAM,OAAA,CAAQ,OAAA,GAA8B,EAAC,EAAkB;AAC7D,IAAA,IAAI;AAEF,MAAA,YAAA,CAAa,SAAS,SAAS,CAAA;AAE/B,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,GAAA,EAAI;AACvD,MAAA,MAAM,UAAA,GAAaG,IAAAA,CAAK,aAAA,EAAe,aAAa,CAAA;AACpD,MAAA,MAAM,eAAA,GAAkBA,IAAAA,CAAK,aAAA,EAAe,cAAc,CAAA;AAC1D,MAAA,MAAM,iBAAA,GAAoBA,IAAAA,CAAK,aAAA,EAAe,qBAAqB,CAAA;AAEnE,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,QAAA,CAAS,gCAAgC,CAAC,CAAA;AACjE,QAAA,OAAA,CAAQ,IAAI,UAAA,CAAW,KAAA,CAAM,CAAA,WAAA,EAAc,aAAa,EAAE,CAAC,CAAA;AAC3D,QAAA,OAAA,CAAQ,IAAI,UAAA,CAAW,KAAA,CAAM,CAAA,aAAA,EAAgB,UAAU,EAAE,CAAC,CAAA;AAC1D,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,MAChB;AAGA,MAAA,MAAM,cAAA,GAAiBC,WAAW,eAAe,CAAA;AACjD,MAAA,MAAM,gBAAA,GAAmBA,WAAW,iBAAiB,CAAA;AACrD,MAAA,MAAM,cAAc,cAAA,IAAkB,gBAAA;AAEtC,MAAA,IAAI,CAAC,WAAA,IAAe,OAAA,CAAQ,eAAA,KAAoB,KAAA,EAAO;AACrD,QAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,UAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,CAAY,uCAAuC,CAAC,CAAA;AAC3E,UAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,uBAAuB,CAAC,CAAA;AAAA,UACvD;AACA,UAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,8BAA8B,CAAC,CAAA;AAAA,UAC9D;AACA,UAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,QAChB;AAGA,QAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,UAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,QAAA,CAAS,sCAAsC,CAAC,CAAA;AAAA,QACzE;AAEA,QAAA,MAAM,IAAA,CAAK,wBAAA;AAAA,UACT,aAAA;AAAA,UACA,cAAA;AAAA,UACA,gBAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,UAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,CAAY,kCAAkC,CAAC,CAAA;AACtE,UAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,QAChB;AAAA,MACF;AAGA,MAAA,IAAIA,UAAAA,CAAW,UAAU,CAAA,IAAK,CAAC,QAAQ,KAAA,EAAO;AAC5C,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,CAAY,oCAAoC,CAAC,CAAA;AACxE,QAAA,OAAA,CAAQ,IAAI,UAAA,CAAW,KAAA,CAAM,CAAA,OAAA,EAAU,UAAU,EAAE,CAAC,CAAA;AACpD,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,iDAAiD,CAAC,CAAA;AAC/E,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAGA,MAAA,MAAM,SAAA,GAAYS,QAAQ,UAAU,CAAA;AACpC,MAAA,IAAI,CAACT,UAAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,QAAAM,SAAAA,CAAU,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,MAC1C;AAGA,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,mBAAA,CAAoB,OAAA,CAAQ,IAAI,CAAA;AAGzD,MAAAC,aAAAA,CAAc,YAAY,IAAA,CAAK,SAAA,CAAU,aAAa,IAAA,EAAM,CAAC,GAAG,OAAO,CAAA;AAGvE,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,CAAY,6CAA6C,CAAC,CAAA;AACjF,MAAA,OAAA,CAAQ,IAAI,UAAA,CAAW,KAAA,CAAM,CAAA,SAAA,EAAY,UAAU,EAAE,CAAC,CAAA;AACtD,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAGd,MAAA,IAAA,CAAK,cAAc,UAAU,CAAA;AAE7B,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,SAAA,CAAU,mCAAmC,CAAC,CAAA;AACvE,MAAA,OAAA,CAAQ,MAAM,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAE7C,MAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,KAAA,YAAiB,KAAA,EAAO;AAC7C,QAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,cAAc,CAAC,CAAA;AAC9C,QAAA,OAAA,CAAQ,MAAM,UAAA,CAAW,KAAA,CAAM,KAAA,CAAM,KAAA,IAAS,0BAA0B,CAAC,CAAA;AAAA,MAC3E;AAEA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,wBAAA,CACZ,aAAA,EACA,cAAA,EACA,kBACA,OAAA,EACe;AAEf,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,MAAM,eAAA,GAAkBR,IAAAA,CAAK,aAAA,EAAe,cAAc,CAAA;AAC1D,MAAA,MAAMW,YAAAA,GAAc,KAAK,4BAAA,EAA6B;AACtD,MAAAH,aAAAA,CAAc,iBAAiB,IAAA,CAAK,SAAA,CAAUG,cAAa,IAAA,EAAM,CAAC,GAAG,OAAO,CAAA;AAE5E,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,uBAAuB,CAAC,CAAA;AAAA,MACvD;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,MAAM,iBAAA,GAAoBX,IAAAA,CAAK,aAAA,EAAe,qBAAqB,CAAA;AACnE,MAAA,MAAM,aAAA,GAAgB,KAAK,qBAAA,EAAsB;AACjD,MAAAQ,aAAAA,CAAc,iBAAA,EAAmB,aAAA,EAAe,OAAO,CAAA;AAEvD,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,8BAA8B,CAAC,CAAA;AAAA,MAC9D;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAcR,IAAAA,CAAK,aAAA,EAAe,UAAU,CAAA;AAClD,IAAA,IAAI,CAACC,UAAAA,CAAW,WAAW,CAAA,EAAG;AAC5B,MAAAM,SAAAA,CAAU,WAAA,EAAa,EAAE,SAAA,EAAW,MAAM,CAAA;AAE1C,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,8BAA8B,CAAC,CAAA;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,4BAAA,GAAoC;AAC1C,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,cAAA;AAAA,MACN,OAAA,EAAS,OAAA;AAAA,MACT,OAAA,EAAS,IAAA;AAAA,MACT,WAAA,EAAa,mDAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,eAAA,EAAiB,WAAA;AAAA,QACjB,aAAA,EAAe,0BAAA;AAAA,QACf,gBAAA,EAAkB;AAAA,OACpB;AAAA,MACA,eAAA,EAAiB;AAAA,QACf,sBAAA,EAAwB;AAAA;AAC1B,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAA,GAAgC;AACtC,IAAA,OAAO,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAAA,EAkCT;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,IAAA,EAAqC;AAC/D,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAO,KAAK,kBAAA,EAAmB;AAAA,IACjC;AAGA,IAAA,OAAO;AAAA,MACL,QAAA,EAAU;AAAA,QACR,MAAA,EAAQ,QAAA;AAAA,QACR,YAAA,EAAc,IAAA;AAAA,QACd,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,SAAS,EAAC;AAAA,MACV,SAAS;AAAC,KACZ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAA,GAA0C;AAChD,IAAA,OAAO;AAAA,MACL,QAAA,EAAU;AAAA,QACR,MAAA,EAAQ,QAAA;AAAA,QACR,iBAAA,EAAmB,KAAA;AAAA,QACnB,WAAA,EAAa,KAAA;AAAA,QACb,MAAA,EAAQ,KAAA;AAAA,QACR,YAAA,EAAc,IAAA;AAAA,QACd,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,YAAA,EAAc;AAAA,QACZ;AAAA,UACE,QAAA,EAAU,CAAC,OAAA,EAAS,WAAW,CAAA;AAAA,UAC/B,MAAA,EAAQ,OAAA;AAAA,UACR,UAAA,EAAY,KAAA;AAAA,UACZ,mBAAA,EAAqB,IAAA;AAAA,UACrB,WAAA,EAAa,IAAA;AAAA,UACb,eAAA,EAAiB,CAAC,cAAA,EAAgB,kBAAkB;AAAA,SACtD;AAAA,QACA;AAAA,UACE,QAAA,EAAU,CAAC,UAAU,CAAA;AAAA,UACrB,MAAA,EAAQ,QAAA;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,mBAAA,EAAqB,KAAA;AAAA,UACrB,WAAA,EAAa;AAAA,SACf;AAAA,QACA;AAAA,UACE,QAAA,EAAU,CAAC,SAAA,EAAW,UAAA,EAAY,sBAAsB,CAAA;AAAA,UACxD,MAAA,EAAQ,OAAA;AAAA,UACR,UAAA,EAAY,KAAA;AAAA,UACZ,mBAAA,EAAqB,KAAA;AAAA,UACrB,WAAA,EAAa;AAAA;AACf,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,sBAAA,EAAwB,IAAA;AAAA,QACxB,qBAAA,EAAuB,IAAA;AAAA,QACvB,sBAAA,EAAwB;AAAA,OAC1B;AAAA,MACA,QAAA,EAAU;AAAA,QACR,WAAA,EAAa,CAAA;AAAA,QACb,OAAA,EAAS,GAAA;AAAA,QACT,OAAA,EAAS,CAAA;AAAA,QACT,oBAAA,EAAsB,EAAA;AAAA,QACtB,eAAA,EAAiB;AAAA,OACnB;AAAA,MACA,QAAA,EAAU;AAAA,QACR,cAAc,EAAC;AAAA,QACf,eAAA,EAAiB,CAAC,SAAS;AAAA,OAC7B;AAAA,MACA,SAAS,EAAC;AAAA,MACV,SAAS;AAAC,KACZ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,UAAA,EAA0B;AAC9C,IAAA,MAAM,QAAkB,EAAC;AAEzB,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,aAAa,CAAC,CAAA;AAC7C,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,4CAA4C,CAAC,CAAA;AACzE,IAAA,KAAA,CAAM,KAAK,UAAA,CAAW,KAAA,CAAM,CAAA,GAAA,EAAM,UAAU,EAAE,CAAC,CAAA;AAC/C,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,oCAAoC,CAAC,CAAA;AACjE,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,gDAAgD,CAAC,CAAA;AAC7E,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,cAAc,CAAC,CAAA;AAC3C,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,gDAAgD,CAAC,CAAA;AAC7E,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,iBAAiB,CAAC,CAAA;AAC9C,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,cAAc,CAAC,CAAA;AAC3C,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,uCAAuC,CAAC,CAAA;AACpE,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,6BAA6B,CAAC,CAAA;AAC1D,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,6CAA6C,CAAC,CAAA;AAC1E,IAAA,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,+BAA+B,CAAC,CAAA;AAC5D,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,UAAA,CAAW,MAAM,oEAAoE;AAAA,KACvF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAgB,OAAA,EAAuC;AAC5D,IAAA,MAAM,SAAmB,EAAC;AAG1B,IAAA,IAAI,QAAQ,SAAA,IAAa,CAACN,UAAAA,CAAW,OAAA,CAAQ,SAAS,CAAA,EAAG;AACvD,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,oCAAA,EAAuC,OAAA,CAAQ,SAAS,CAAA,CAAE,CAAA;AAAA,IACxE;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAA,GAAsB;AAC3B,IAAA,OAAO;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,EA4CT;AACF,CAAA;ACzXO,IAAM,WAAA,GAAN,MAAM,YAAA,CAAY;AAAA,EACf,aAAA,GAA8C,IAAA;AAAA,EAC9C,OAAA,GAAU,CAAA;AAAA,EACV,KAAA,GAAQ,CAAA;AAAA,EACR,IAAA,GAAO,EAAA;AAAA,EACP,SAAA,GAAoB,CAAA;AAAA,EACpB,KAAA;AAAA,EACA,SAAA;AAAA,EAER,WAAA,CAAY,OAAA,GAA8B,EAAC,EAAG;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,IAAA,IAAQ,eAAA;AAC5B,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAQ,KAAA,IAAS,CAAA;AAC9B,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAQ,KAAA,IAAS,SAAA;AAC9B,IAAA,IAAA,CAAK,SAAA,GAAY,QAAQ,SAAA,IAAa,IAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAA,EAAqB;AACzB,IAAA,IAAA,CAAK,IAAA,GAAO,QAAQ,IAAA,CAAK,IAAA;AACzB,IAAA,IAAA,CAAK,SAAA,GAAY,KAAK,GAAA,EAAI;AAG1B,IAAA,IAAA,CAAK,mBAAA,EAAoB;AAIzB,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,KAAA,GAAQ,CAAA,GAAI,KAAK,KAAA,GAAQ,CAAA;AAErD,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,qBAAA,CAAsB,EAAA,EAAI;AAAA,MACjD,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,SAAA,EAAW;AAAA;AAAA,KACZ,CAAA;AACD,IAAA,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,cAAA,EAAgB,IAAA,CAAK,IAAI,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,CAAO,IAAA,EAAc,OAAA,EAAkB,KAAA,EAAsB;AAC3D,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAI,OAAA,KAAY,MAAA,EAAW,IAAA,CAAK,OAAA,GAAU,OAAA;AAC1C,IAAA,IAAI,KAAA,KAAU,MAAA,EAAW,IAAA,CAAK,KAAA,GAAQ,KAAA;AAGtC,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,IAAA,EAAqB;AACzC,IAAA,IAAA,CAAK,OAAA,IAAW,MAAA;AAChB,IAAA,IAAI,IAAA,OAAW,IAAA,GAAO,IAAA;AAGtB,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,IAAI,CAAA;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,IAAA,EAAqB;AAE3B,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,MAAM,WAAA,GAAc,IAAA,IAAQ,IAAA,CAAK,iBAAA,EAAkB;AACnD,MAAA,IAAA,CAAK,aAAA,CAAc,SAAS,WAAW,CAAA;AACvC,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,iBAAA,CAAkB,WAAW,CAAC,CAAA;AAC/C,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,IAAA,EAAqB;AAExB,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,MAAM,QAAA,GAAW,IAAA,IAAQ,IAAA,CAAK,cAAA,EAAe;AAC7C,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAC,CAAA;AAC5C,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,IAAA,EAAsB;AAC9C,IAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AACpC,IAAA,QAAQ,KAAK,KAAA;AAAO,MAClB,KAAK,UAAA;AACH,QAAA,OAAO,CAAA,EAAGJ,MAAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,QAAG,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MAC/E,KAAK,OAAA;AACH,QAAA,OAAO,CAAA,EAAGA,OAAM,IAAA,CAAK,WAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,MAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,KAAK,WAAI,CAAC,IAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MACjG,KAAK,SAAA;AACH,QAAA,OAAOA,MAAAA,CAAM,MAAM,IAAI,CAAA;AAAA,MACzB,KAAK,SAAA;AACH,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,OAAA,CAAQ,WAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MAC3E,KAAK,MAAA;AACH,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,KAAA,CAAM,IAAA,CAAK,gBAAW,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MACrF;AACE,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA;AAC1E,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,IAAA,EAAsB;AAC9C,IAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AACpC,IAAA,QAAQ,KAAK,KAAA;AAAO,MAClB,KAAK,UAAA;AACH,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,GAAA,CAAI,IAAA,CAAK,WAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MAC1E,KAAK,OAAA;AACH,QAAA,OAAO,CAAA,EAAGA,OAAM,GAAA,CAAI,WAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAI,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAI,WAAI,CAAC,IAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MAC7F,KAAK,SAAA;AACH,QAAA,OAAOA,MAAAA,CAAM,IAAI,IAAI,CAAA;AAAA,MACvB,KAAK,SAAA;AACH,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,GAAA,CAAI,cAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MACrE,KAAK,MAAA;AACH,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,GAAA,CAAI,IAAA,CAAK,cAAS,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MAC/E;AACE,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA;AACtE,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAA,GAA4B;AAClC,IAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AACpC,IAAA,MAAM,KAAA,GAAQ,KAAK,eAAA,EAAgB;AACnC,IAAA,OAAO,GAAG,IAAA,CAAK,IAAI,CAAA,WAAA,EAAc,KAAK,IAAI,OAAO,CAAA,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,GAAyB;AAC/B,IAAA,OAAO,CAAA,EAAG,KAAK,IAAI,CAAA,OAAA,CAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAA,GAAyB;AAC/B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,SAAA;AAClC,IAAA,IAAI,OAAA,GAAU,GAAA,EAAM,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,GAAA,CAAA;AACtC,IAAA,IAAI,OAAA,GAAU,KAAO,OAAO,CAAA,CAAA,EAAA,CAAK,UAAU,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA;AAC3D,IAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,GAAK,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAO,OAAA,GAAU,GAAA,GAAS,GAAI,CAAC,CAAA,EAAA,CAAA;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAA,GAA0B;AAChC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,SAAA;AAClC,IAAA,IAAI,OAAA,KAAY,CAAA,IAAK,IAAA,CAAK,OAAA,KAAY,GAAG,OAAO,EAAA;AAChD,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA,CAAO,IAAA,CAAK,OAAA,GAAU,UAAW,GAAI,CAAA;AACxD,IAAA,OAAO,KAAA,GAAQ,CAAA,GAAI,CAAA,CAAA,EAAI,KAAK,CAAA,GAAA,CAAA,GAAQ,EAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,IAAA,EAAqB;AAExB,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,MAAM,QAAA,GAAW,QAAQ,IAAA,CAAK,IAAA;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,iBAAA,CAAkB,QAAQ,CAAC,CAAA;AAC5C,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,IAAA,EAAqB;AAExB,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,MAAM,QAAA,GAAW,QAAQ,IAAA,CAAK,IAAA;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,cAAA,CAAe,QAAQ,CAAC,CAAA;AACzC,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAkB,IAAA,EAAsB;AAC9C,IAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AACpC,IAAA,QAAQ,KAAK,KAAA;AAAO,MAClB,KAAK,UAAA;AACH,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,MAAA,CAAO,IAAA,CAAK,QAAG,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MAC/E,KAAK,OAAA;AACH,QAAA,OAAO,CAAA,EAAGA,OAAM,MAAA,CAAO,cAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,OAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,OAAO,cAAI,CAAC,IAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MACtG,KAAK,SAAA;AACH,QAAA,OAAOA,MAAAA,CAAM,OAAO,IAAI,CAAA;AAAA,MAC1B,KAAK,SAAA;AACH,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,MAAA,CAAO,cAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MAC3E,KAAK,MAAA;AACH,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,MAAA,CAAO,IAAA,CAAK,gBAAW,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MACvF;AACE,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,MAAA,CAAO,cAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA;AAC7E,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,eAAe,IAAA,EAAsB;AAC3C,IAAA,MAAM,OAAA,GAAU,KAAK,cAAA,EAAe;AACpC,IAAA,QAAQ,KAAK,KAAA;AAAO,MAClB,KAAK,UAAA;AACH,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,cAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MAC5E,KAAK,OAAA;AACH,QAAA,OAAO,CAAA,EAAGA,OAAM,IAAA,CAAK,WAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,KAAK,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,KAAK,WAAI,CAAC,IAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MAChG,KAAK,SAAA;AACH,QAAA,OAAOA,MAAAA,CAAM,KAAK,IAAI,CAAA;AAAA,MACxB,KAAK,SAAA;AACH,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,IAAA,CAAK,cAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MACvE,KAAK,MAAA;AACH,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,aAAQ,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA,MAChF;AACE,QAAA,OAAO,CAAA,EAAGA,MAAAA,CAAM,IAAA,CAAK,cAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA;AAAA;AACzE,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,GAAa;AAEX,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAA,GAA4B;AAElC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,iBAAiB,CAAA;AAAA,IACxC;AAEA,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAgB,KAAA,EAAoC;AACzD,IAAA,OAAO,IAAI,kBAAkB,KAAK,CAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,eAAe,OAAA,EAAoD;AACxE,IAAA,OAAO,IAAI,YAAA,CAAY;AAAA,MACrB,KAAA,EAAO,UAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YAAY,OAAA,EAAoD;AACrE,IAAA,OAAO,IAAI,YAAA,CAAY;AAAA,MACrB,KAAA,EAAO,OAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,cAAc,OAAA,EAAoD;AACvE,IAAA,OAAO,IAAI,YAAA,CAAY;AAAA,MACrB,KAAA,EAAO,SAAA;AAAA,MACP,SAAA,EAAW,KAAA;AAAA,MACX,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,cAAc,OAAA,EAAoD;AACvE,IAAA,OAAO,IAAI,YAAA,CAAY;AAAA,MACrB,KAAA,EAAO,SAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAW,OAAA,EAAoD;AACpE,IAAA,OAAO,IAAI,YAAA,CAAY;AAAA,MACrB,KAAA,EAAO,MAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AACF,CAAA;AAKO,IAAM,oBAAN,MAAwB;AAAA,EACrB,WAAA,GAAc,CAAA;AAAA,EACd,QAAkB,EAAC;AAAA,EAE3B,YAAY,KAAA,EAAiB;AAC3B,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,+BAAwB,CAAC,CAAA;AAChD,IAAA,IAAA,CAAK,WAAA,EAAY;AAAA,EACnB;AAAA,EAEA,KAAK,IAAA,EAAqB;AACxB,IAAA,IAAI,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ;AACxC,MAAA,MAAM,QAAA,GAAW,IAAA,IAAQ,IAAA,CAAK,KAAA,CAAM,KAAK,WAAW,CAAA;AACpD,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAKA,MAAAA,CAAM,KAAA,CAAM,QAAG,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAA;AAC/C,MAAA,IAAA,CAAK,WAAA,EAAA;AAEL,MAAA,IAAI,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ;AACxC,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAKA,MAAAA,CAAM,IAAA,CAAK,QAAG,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,WAAW,CAAC,CAAA,CAAE,CAAA;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAA,GAAiB;AACf,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,KAAA,CAAM,oCAA6B,CAAC,CAAA;AAAA,EACxD;AAAA,EAEQ,WAAA,GAAoB;AAC1B,IAAA,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAClC,MAAA,MAAM,SAAS,KAAA,KAAU,CAAA,GAAIA,MAAAA,CAAM,IAAA,CAAK,QAAG,CAAA,GAAI,IAAA;AAC/C,MAAA,MAAM,QAAQ,KAAA,GAAQ,IAAA,CAAK,WAAA,GAAcA,MAAAA,CAAM,QAAQA,MAAAA,CAAM,IAAA;AAC7D,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,MAAM,IAAI,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IAC1C,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,EAChB;AACF,CAAA;AAKO,IAAM,qBAAA,GAAN,MAAM,sBAAA,CAAsB;AAAA,EAUjC,WAAA,CACmB,KAAA,GAAQ,EAAA,EACR,OAAA,GAAwE,EAAC,EAC1F;AAFiB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAEjB,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAQ,KAAA,IAAS,UAAA;AAC9B,IAAA,IAAA,CAAK,YAAA,GAAe,QAAQ,SAAA,IAAa,IAAA;AAAA,EAC3C;AAAA,EAfQ,OAAA,GAAU,CAAA;AAAA,EACV,KAAA,GAAQ,CAAA;AAAA,EACR,IAAA,GAAO,EAAA;AAAA,EACP,UAAA,GAAa,EAAA;AAAA,EACb,SAAA,GAAY,CAAA;AAAA,EACZ,KAAA;AAAA,EACA,YAAA,GAAe,IAAA;AAAA,EACf,aAAA,GAAgB,IAAA;AAAA,EAUxB,KAAA,CAAM,OAAe,IAAA,EAAoB;AACvC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,OAAA,GAAU,CAAA;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,SAAA,GAAY,KAAK,GAAA,EAAI;AAC1B,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAGrB,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAExB,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAA,GAA2B;AAEjC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,kBAAkB,CAAA;AAAA,IACzC;AAEA,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,EAC3B;AAAA,EAEA,MAAA,CAAO,SAAiB,IAAA,EAAqB;AAC3C,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAI,IAAA,OAAW,IAAA,GAAO,IAAA;AACtB,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEA,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,IAAA,EAAqB;AACzC,IAAA,IAAA,CAAK,OAAA,IAAW,MAAA;AAChB,IAAA,IAAI,IAAA,OAAW,IAAA,GAAO,IAAA;AACtB,IAAA,IAAA,CAAK,MAAA,EAAO;AAAA,EACd;AAAA,EAEA,SAAS,IAAA,EAAqB;AAC5B,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,KAAA;AACpB,IAAA,IAAI,IAAA,OAAW,IAAA,GAAO,IAAA;AACtB,IAAA,IAAA,CAAK,MAAA,EAAO;AACZ,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,EAChB;AAAA,EAEQ,MAAA,GAAe;AACrB,IAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAO,KAAK,OAAA,GAAU,IAAA,CAAK,QAAS,GAAG,CAAA;AAC/D,IAAA,MAAM,WAAA,GAAc,KAAK,KAAA,CAAO,IAAA,CAAK,UAAU,IAAA,CAAK,KAAA,GAAS,KAAK,KAAK,CAAA;AACvE,IAAA,MAAM,UAAA,GAAa,KAAK,KAAA,GAAQ,WAAA;AAEhC,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,IAAA,CAAK,eAAA,CAAgB,UAAA,EAAY,WAAA,EAAa,UAAU,CAAA;AAAA,IAC1D,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,gBAAA,CAAiB,UAAA,EAAY,WAAA,EAAa,UAAU,CAAA;AAAA,IAC3D;AAAA,EACF;AAAA,EAEQ,eAAA,CAAgB,UAAA,EAAoB,WAAA,EAAqB,UAAA,EAA0B;AACzF,IAAA,MAAM,cAAc,CAAA,EAAG,IAAA,CAAK,iBAAiB,CAAA,CAAA,EAAI,KAAK,IAAI,CAAA,CAAA;AAG1D,IAAA,IAAI,GAAA;AACJ,IAAA,QAAQ,KAAK,KAAA;AAAO,MAClB,KAAK,UAAA;AACH,QAAA,GAAA,GAAM,IAAA,CAAK,iBAAA,CAAkB,WAAA,EAAa,UAAU,CAAA;AACpD,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,GAAA,GAAM,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,UAAU,CAAA;AACjD,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,WAAA,EAAa,UAAU,CAAA;AACnD,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,GAAA,GAAM,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,UAAU,CAAA;AACjD,QAAA;AAAA,MACF;AACE,QAAA,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,WAAA,EAAa,UAAU,CAAA;AAAA;AAGvD,IAAA,IAAI,YAAA,GAAe,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,GAAA,EAAM,GAAG,CAAA,EAAA,EAAK,IAAA,CAAK,mBAAA,CAAoB,UAAU,CAAC,CAAA,CAAA;AAGnG,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,YAAY,CAAA,EAAG;AAChD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,SAAA;AAClC,MAAA,MAAM,KAAA,GAAQ,UAAU,CAAA,GAAI,IAAA,CAAK,MAAO,IAAA,CAAK,OAAA,GAAU,OAAA,GAAW,GAAI,CAAA,GAAI,CAAA;AAC1E,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,YAAA,IAAgB,IAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,EAAG,KAAK,IAAI,CAAC,CAAA,CAAA;AAAA,MAC9C;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,aAAA,EAAe;AAEtB,MAAA,OAAA,CAAQ,IAAI,WAAW,CAAA;AACvB,MAAA,OAAA,CAAQ,IAAI,YAAY,CAAA;AACxB,MAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AAAA,IACvB,CAAA,MAAO;AAGL,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,kBAAA,GAAqB,WAAA,GAAc,IAAI,CAAA;AAE5D,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,WAAA,GAAc,YAAY,CAAA;AAAA,IACjD;AAEA,IAAA,IAAA,CAAK,UAAA,GAAa,YAAA;AAElB,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,EAAO;AAC9B,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,IAC3B;AAAA,EACF;AAAA,EAEQ,gBAAA,CAAiB,UAAA,EAAoB,WAAA,EAAqB,UAAA,EAA0B;AAC1F,IAAA,IAAI,GAAA;AACJ,IAAA,QAAQ,KAAK,KAAA;AAAO,MAClB,KAAK,UAAA;AACH,QAAA,GAAA,GAAM,IAAA,CAAK,iBAAA,CAAkB,WAAA,EAAa,UAAU,CAAA;AACpD,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,GAAA,GAAM,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,UAAU,CAAA;AACjD,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,WAAA,EAAa,UAAU,CAAA;AACnD,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,GAAA,GAAM,IAAA,CAAK,cAAA,CAAe,WAAA,EAAa,UAAU,CAAA;AACjD,QAAA;AAAA,MACF;AACE,QAAA,GAAA,GAAM,IAAA,CAAK,gBAAA,CAAiB,WAAA,EAAa,UAAU,CAAA;AAAA;AAGvD,IAAA,IAAI,YAAA,GAAe,GAAG,IAAA,CAAK,eAAA,EAAiB,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,GAAA,EAAM,GAAG,KAAK,IAAA,CAAK,mBAAA,CAAoB,UAAU,CAAC,CAAA,CAAA;AAG1I,IAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAA,IAAa,IAAA,CAAK,YAAY,CAAA,EAAG;AAChD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,SAAA;AAClC,MAAA,MAAM,KAAA,GAAQ,UAAU,CAAA,GAAI,IAAA,CAAK,MAAO,IAAA,CAAK,OAAA,GAAU,OAAA,GAAW,GAAI,CAAA,GAAI,CAAA;AAC1E,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,YAAA,IAAgB,IAAIA,MAAAA,CAAM,IAAA,CAAK,CAAA,EAAG,KAAK,IAAI,CAAC,CAAA,CAAA;AAAA,MAC9C;AAAA,IACF;AAGA,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,UAAU,CAAA;AAAA,IACjC;AAEA,IAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,YAAY,CAAA;AACjC,IAAA,IAAA,CAAK,UAAA,GAAa,YAAA;AAElB,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,KAAA,EAAO;AAC9B,MAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,IAC3B;AAAA,EACF;AAAA,EAEQ,iBAAA,CAAkB,aAAqB,UAAA,EAA4B;AACzE,IAAA,MAAM,MAAA,GAAS,CAACA,MAAAA,CAAM,GAAA,EAAKA,MAAAA,CAAM,MAAA,EAAQA,MAAAA,CAAM,KAAA,EAAOA,MAAAA,CAAM,IAAA,EAAMA,MAAAA,CAAM,IAAA,EAAMA,OAAM,OAAO,CAAA;AAE3F,IAAA,IAAI,SAAA,GAAY,EAAA;AAChB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,EAAa,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,aAAa,IAAA,CAAK,KAAA,CAAO,IAAI,IAAA,CAAK,KAAA,GAAS,OAAO,MAAM,CAAA;AAC9D,MAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,GAAA,CAAI,YAAY,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAA;AAC9D,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,SAAA,IAAa,QAAQ,QAAG,CAAA;AAAA,MAC1B;AAAA,IACF;AAEA,IAAA,MAAM,WAAWA,MAAAA,CAAM,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,UAAU,CAAC,CAAA;AAClD,IAAA,OAAO,SAAA,GAAY,QAAA;AAAA,EACrB;AAAA,EAEQ,cAAA,CAAe,aAAqB,UAAA,EAA4B;AACtE,IAAA,MAAM,YAAYA,MAAAA,CAAM,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,WAAW,CAAC,CAAA;AACpD,IAAA,MAAM,WAAWA,MAAAA,CAAM,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,UAAU,CAAC,CAAA;AAClD,IAAA,OAAO,SAAA,GAAY,QAAA;AAAA,EACrB;AAAA,EAEQ,gBAAA,CAAiB,aAAqB,UAAA,EAA4B;AACxE,IAAA,MAAM,YAAYA,MAAAA,CAAM,KAAA,CAAM,QAAA,CAAI,MAAA,CAAO,WAAW,CAAC,CAAA;AACrD,IAAA,MAAM,WAAWA,MAAAA,CAAM,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,UAAU,CAAC,CAAA;AAClD,IAAA,OAAO,SAAA,GAAY,QAAA;AAAA,EACrB;AAAA,EAEQ,cAAA,CAAe,aAAqB,UAAA,EAA4B;AACtE,IAAA,MAAM,YAAYA,MAAAA,CAAM,KAAA,CAAM,QAAA,CAAI,MAAA,CAAO,WAAW,CAAC,CAAA;AACrD,IAAA,MAAM,WAAWA,MAAAA,CAAM,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,UAAU,CAAC,CAAA;AAClD,IAAA,OAAO,SAAA,GAAY,QAAA;AAAA,EACrB;AAAA,EAEQ,gBAAA,CAAiB,aAAqB,UAAA,EAA4B;AACxE,IAAA,MAAM,YAAYA,MAAAA,CAAM,KAAA,CAAM,QAAA,CAAI,MAAA,CAAO,WAAW,CAAC,CAAA;AACrD,IAAA,MAAM,WAAWA,MAAAA,CAAM,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,UAAU,CAAC,CAAA;AAClD,IAAA,OAAO,SAAA,GAAY,QAAA;AAAA,EACrB;AAAA,EAEQ,eAAA,GAA0B;AAChC,IAAA,QAAQ,KAAK,KAAA;AAAO,MAClB,KAAK,UAAA;AACH,QAAA,OAAOA,MAAAA,CAAM,QAAQ,QAAG,CAAA;AAAA,MAC1B,KAAK,OAAA;AACH,QAAA,OAAOA,MAAAA,CAAM,KAAK,QAAG,CAAA;AAAA,MACvB,KAAK,SAAA;AACH,QAAA,OAAOA,MAAAA,CAAM,KAAK,QAAG,CAAA;AAAA,MACvB,KAAK,QAAA;AACH,QAAA,OAAOA,MAAAA,CAAM,MAAM,QAAG,CAAA;AAAA,MACxB;AACE,QAAA,OAAOA,MAAAA,CAAM,KAAK,QAAG,CAAA;AAAA;AACzB,EACF;AAAA,EAEQ,oBAAoB,UAAA,EAA4B;AACtD,IAAA,IAAI,UAAA,GAAa,IAAI,OAAOA,MAAAA,CAAM,IAAI,IAAA,CAAK,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG,CAAA;AAC3D,IAAA,IAAI,UAAA,GAAa,IAAI,OAAOA,MAAAA,CAAM,OAAO,IAAA,CAAK,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG,CAAA;AAC9D,IAAA,IAAI,UAAA,GAAa,IAAI,OAAOA,MAAAA,CAAM,KAAK,IAAA,CAAK,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG,CAAA;AAC5D,IAAA,IAAI,UAAA,GAAa,KAAK,OAAOA,MAAAA,CAAM,KAAK,IAAA,CAAK,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG,CAAA;AAC7D,IAAA,OAAOA,MAAAA,CAAM,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,UAAU,CAAA,CAAA,CAAG,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,cAAA,CAAe,KAAA,GAAQ,EAAA,EAA2B;AACvD,IAAA,OAAO,IAAI,uBAAsB,KAAA,EAAO;AAAA,MACtC,KAAA,EAAO,UAAA;AAAA,MACP,SAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAA,CAAY,KAAA,GAAQ,EAAA,EAA2B;AACpD,IAAA,OAAO,IAAI,sBAAA,CAAsB,KAAA,EAAO,EAAE,KAAA,EAAO,SAAS,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAA,CAAc,KAAA,GAAQ,EAAA,EAA2B;AACtD,IAAA,OAAO,IAAI,uBAAsB,KAAA,EAAO;AAAA,MACtC,KAAA,EAAO,SAAA;AAAA,MACP,SAAA,EAAW,KAAA;AAAA,MACX,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YAAA,CAAa,KAAA,GAAQ,EAAA,EAA2B;AACrD,IAAA,OAAO,IAAI,sBAAA,CAAsB,KAAA,EAAO,EAAE,KAAA,EAAO,UAAU,SAAA,EAAW,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,CAAA;AAAA,EAC/F;AACF,CAAA;;;ACrkBO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,eAAA,EAAkC;AAAlC,IAAA,IAAA,CAAA,eAAA,GAAA,eAAA;AAAA,EAAmC;AAAA;AAAA;AAAA;AAAA,EAKhE,MAAM,OAAA,CAAQ,OAAA,GAAkC,EAAC,EAAkB;AACjE,IAAA,IAAI,WAAA;AAEJ,IAAA,IAAI;AAEF,MAAA,YAAA,CAAa,SAAS,SAAS,CAAA;AAG/B,MAAA,WAAA,GAAc,IAAI,WAAA,CAAY;AAAA,QAC5B,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA,WAAA,CAAY,KAAA,EAAM;AAElB,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,YAAA,CAAa,iCAAiC,CAAC,CAAA;AACtE,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,KAAA,CAAM,CAAA,WAAA,EAAc,OAAA,CAAQ,aAAa,OAAA,CAAQ,GAAA,EAAK,CAAA,CAAE,CAAC,CAAA;AAChF,QAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,KAAA,CAAM,CAAA,iBAAA,EAAoB,QAAQ,QAAA,IAAY,KAAK,EAAE,CAAC,CAAA;AAC7E,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,MAChB;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,mBAAA,CAAoB,OAAO,CAAA;AAErD,MAAA,WAAA,CAAY,QAAQ,6BAA6B,CAAA;AAGjD,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,eAAA,CAAgB,oBAAA,CAAqB,MAAM,CAAA;AACxE,MAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAG3B,MAAA,IAAI,MAAA,CAAO,eAAA,CAAgB,MAAA,GAAS,CAAA,EAAG;AACrC,QAAA,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA,MACjC;AAGA,MAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,QAAA,MAAM,IAAA,CAAK,sBAAA,CAAuB,MAAA,EAAQ,OAAO,CAAA;AAAA,MACnD;AAGA,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,QAAA,GAAW,IAAI,CAAA,GAAI,CAAA;AACnD,MAAA,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IACvB,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,KAAK,0BAA0B,CAAA;AAAA,MAC7C;AAEA,MAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,SAAA,CAAU,iCAAiC,CAAC,CAAA;AACrE,MAAA,OAAA,CAAQ,MAAM,UAAA,CAAW,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAC,CAAA;AAE7C,MAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,KAAA,YAAiB,KAAA,EAAO;AAC7C,QAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,cAAc,CAAC,CAAA;AAC9C,QAAA,OAAA,CAAQ,MAAM,UAAA,CAAW,KAAA,CAAM,KAAA,CAAM,KAAA,IAAS,0BAA0B,CAAC,CAAA;AAAA,MAC3E;AAEA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,oBAAoB,OAAA,EAA0D;AAC1F,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,GAAA,EAAI;AACvD,IAAA,MAAM,kBAAmC,EAAC;AAC1C,IAAA,MAAM,kBAA4C,EAAC;AAGnD,IAAA,MAAM,eAAA,GAAuBe,IAAA,CAAA,IAAA,CAAK,aAAA,EAAe,cAAc,CAAA;AAC/D,IAAA,IAAI,CAAE,MAAS,GAAA,CAAA,UAAA,CAAW,eAAe,CAAA,EAAI;AAC3C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,aAAa,CAAA,CAAE,CAAA;AAAA,IAC7D;AAGA,IAAA,IAAI,OAAA,CAAQ,UAAU,KAAA,EAAO;AAC3B,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,CAAY,eAAe,OAAO,CAAA;AAC9D,MAAA,eAAA,CAAgB,IAAA,CAAK,GAAG,QAAQ,CAAA;AAAA,IAClC;AAGA,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,WAAA,CAAY,eAAe,OAAO,CAAA;AAC/D,MAAA,eAAA,CAAgB,IAAA,CAAK,GAAG,SAAS,CAAA;AAAA,IACnC;AAGA,IAAA,eAAA,CAAgB,IAAA,CAAK,GAAG,IAAA,CAAK,uBAAA,CAAwB,eAAe,CAAC,CAAA;AAGrE,IAAA,MAAM,uBAAA,GAA0B,OAAA,CAAQ,QAAA,GACpC,eAAA,CAAgB,MAAA;AAAA,MACd,CAAC,CAAA,KAAM,IAAA,CAAK,gBAAA,CAAiB,CAAA,CAAE,QAAQ,CAAA,IAAK,IAAA,CAAK,gBAAA,CAAiB,OAAA,CAAQ,QAAS;AAAA,KACrF,GACA,eAAA;AAEJ,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA,CAAK,eAAA,CAAgB,uBAAuB,CAAA;AAAA,MACrD,eAAA,EAAiB,uBAAA;AAAA,MACjB,eAAA;AAAA,MACA,QAAA,EAAU;AAAA,QACR,QAAA,EAAA,iBAAU,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QACjC,SAAA,EAAW,CAAC,WAAA,EAAa,GAAI,OAAA,CAAQ,OAAO,CAAC,MAAM,CAAA,GAAI,EAAG,CAAA;AAAA,QAC1D;AAAA;AACF,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,WAAA,CACZ,aAAA,EACA,OAAA,EAC0B;AAC1B,IAAA,MAAM,SAAA,GAAY,CAAC,OAAA,EAAS,QAAQ,CAAA;AAEpC,IAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,MAAA,SAAA,CAAU,KAAK,YAAY,CAAA;AAAA,IAC7B;AAEA,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,EAAO,SAAA,EAAW;AAAA,MACzC,GAAA,EAAK,aAAA;AAAA,MACL,QAAA,EAAU,MAAA;AAAA,MACV,KAAA,EAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM;AAAA,KAC/B,CAAA;AAED,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AAEvB,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAC1C,QAAA,OAAO,IAAA,CAAK,qBAAqB,SAAS,CAAA;AAAA,MAC5C,SAAS,UAAA,EAAY;AACnB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,UAAU,CAAA,CAAE,CAAA;AAAA,MACnE;AAAA,IACF,CAAA,MAAA,IAAW,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC9B,MAAA,IAAI;AACF,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAC1C,QAAA,OAAO,IAAA,CAAK,qBAAqB,SAAS,CAAA;AAAA,MAC5C,SAAS,UAAA,EAAY;AACnB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,UAAU,CAAA,CAAE,CAAA;AAAA,MACnE;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,IAAI,MAAM,CAAA,6BAAA,EAAgC,MAAA,CAAO,MAAM,CAAA,EAAA,EAAK,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,IACnF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,WAAA,CACZ,aAAA,EACA,OAAA,EAC0B;AAC1B,IAAA,IAAI;AAEF,MAAA,MAAM,aAAA,GAAgB,UAAU,MAAA,EAAQ,CAAC,WAAW,CAAA,EAAG,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA;AACxE,MAAA,IAAI,cAAc,KAAA,EAAO;AACvB,QAAA,MAAM,aAAA,CAAc,KAAA;AAAA,MACtB;AAEA,MAAA,MAAM,QAAA,GAAW,CAAC,MAAA,EAAQ,QAAQ,CAAA;AAElC,MAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,QAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,MACvB;AAEA,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,EAAQ,QAAA,EAAU;AAAA,QACzC,GAAA,EAAK,aAAA;AAAA,QACL,QAAA,EAAU,MAAA;AAAA,QACV,KAAA,EAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM;AAAA,OAC/B,CAAA;AAED,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,MAAM,MAAA,CAAO,KAAA;AAAA,MACf;AAEA,MAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,IAAK,MAAA,CAAO,WAAW,CAAA,EAAG;AAC9C,QAAA,MAAM,IAAI,MAAM,CAAA,6BAAA,EAAgC,MAAA,CAAO,MAAM,CAAA,EAAA,EAAK,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,MACnF;AAEA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AACzC,MAAA,OAAO,IAAA,CAAK,iBAAiB,QAAQ,CAAA;AAAA,IACvC,SAAS,KAAA,EAAY;AACnB,MAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,QAAA,OAAA,CAAQ,IAAA,CAAK,UAAA,CAAW,WAAA,CAAY,mDAAmD,CAAC,CAAA;AACxF,QAAA,OAAO,EAAC;AAAA,MACV;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACtD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,qBAAqB,SAAA,EAAiC;AAC5D,IAAA,MAAM,kBAAmC,EAAC;AAE1C,IAAA,IAAI,CAAC,UAAU,eAAA,EAAiB;AAC9B,MAAA,OAAO,eAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,CAAC,IAAI,IAAI,CAAA,IAAK,OAAO,OAAA,CAAQ,SAAA,CAAU,eAAe,CAAA,EAAG;AAClE,MAAA,MAAM,aAAA,GAAgB,IAAA;AAEtB,MAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,QACnB,EAAA;AAAA,QACA,SAAS,aAAA,CAAc,IAAA;AAAA,QACvB,UAAU,aAAA,CAAc,QAAA;AAAA,QACxB,KAAA,EAAO,aAAA,CAAc,KAAA,IAAS,aAAA,CAAc,IAAA;AAAA,QAC5C,GAAA,EAAK,aAAA,CAAc,GAAA,IAAO,CAAA,6BAAA,EAAgC,EAAE,CAAA,CAAA;AAAA,QAC5D,OAAO,aAAA,CAAc,KAAA;AAAA,QACrB,cAAc,aAAA,CAAc,YAAA;AAAA,QAC5B,UAAA,EAAY,aAAA,CAAc,YAAA,KAAiB,IAAA,GAAO,cAAc,YAAA,GAAe,MAAA;AAAA,QAC/E,KAAA,EAAO,aAAA,CAAc,GAAA,EAAK,GAAA,CAAI,CAAC,CAAA,KAAW,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,IAAI,CAAA,IAAK,CAAC,cAAc,IAAI,CAAA;AAAA,QACpF,KAAK,aAAA,CAAc,GAAA;AAAA,QACnB,KAAK,aAAA,CAAc;AAAA,OACpB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,eAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,QAAA,EAAgC;AACvD,IAAA,MAAM,kBAAmC,EAAC;AAE1C,IAAA,IAAI,CAAC,SAAS,eAAA,EAAiB;AAC7B,MAAA,OAAO,eAAA;AAAA,IACT;AAEA,IAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,eAAA,EAAiB;AAC3C,MAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,QACnB,IAAI,IAAA,CAAK,EAAA;AAAA,QACT,SAAS,IAAA,CAAK,WAAA;AAAA,QACd,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,OAAO,IAAA,CAAK,MAAA,EAAQ,YAAY,IAAA,CAAK,MAAM,KAAK,IAAA,CAAK,OAAA;AAAA,QACrD,YAAA,EAAc,IAAA,CAAK,OAAA,EAAS,MAAA,GAAS,CAAA;AAAA,QACrC,UAAA,EAAY,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAAA,QAC5B,KAAA,EAAO,IAAA,CAAK,IAAA,IAAQ,CAAC,KAAK,WAAW,CAAA;AAAA,QACrC,GAAA,EAAK,IAAA,CAAK,WAAA,EAAa,GAAA,IAAO,EAAC;AAAA,QAC/B,GAAA,EAAK,IAAA,CAAK,WAAA,EAAa,GAAA,IAAO;AAAC,OAChC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,eAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,wBAAwB,eAAA,EAA4D;AAC1F,IAAA,MAAM,kBAA4C,EAAC;AACnD,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAC,CAAA;AAE9D,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,MAAM,WAAW,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,GAAG,CAAA;AAChE,MAAA,MAAM,gBAAgB,QAAA,CAAS,MAAA;AAAA,QAC7B,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,KAAa,UAAA,IAAc,EAAE,QAAA,KAAa;AAAA,OACrD;AAEA,MAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,QAAA,MAAM,WAAA,GAAc;AAAA,UAClB,GAAG,IAAI,GAAA;AAAA,YACL,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,IAAK,OAAO,MAAM,QAAQ;AAAA;AACjF,SACF;AAEA,QAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,UAAA,MAAM,cAAA,GAAiB,SAAS,CAAC,CAAA,EAAG,OAAO,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,SAAA;AAC5D,UAAA,MAAM,kBAAA,GAAqB,WAAA,CAAY,CAAC,CAAA,IAAK,SAAA;AAE7C,UAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,YACnB,OAAA,EAAS,GAAA;AAAA,YACT,cAAA;AAAA,YACA,kBAAA;AAAA,YACA,IAAA,EAAM,QAAA;AAAA,YACN,MAAA,EAAQ,CAAA,EAAG,aAAA,CAAc,MAAM,CAAA,+BAAA,CAAA;AAAA,YAC/B,MAAA,EAAQ;AAAA,WACT,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAO,eAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,eAAA,EAA6D;AACnF,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,sBAAsB,eAAA,CAAgB,MAAA;AAAA,MACtC,QAAA,EAAU,CAAA;AAAA,MACV,IAAA,EAAM,CAAA;AAAA,MACN,QAAA,EAAU,CAAA;AAAA,MACV,GAAA,EAAK,CAAA;AAAA,MACL,IAAA,EAAM;AAAA,KACR;AAEA,IAAA,KAAA,MAAW,QAAQ,eAAA,EAAiB;AAClC,MAAA,MAAM,WAAW,IAAA,CAAK,QAAA;AACtB,MAAA,QAAQ,QAAA;AAAU,QAChB,KAAK,UAAA;AACH,UAAA,OAAA,CAAQ,QAAA,EAAA;AACR,UAAA;AAAA,QACF,KAAK,MAAA;AACH,UAAA,OAAA,CAAQ,IAAA,EAAA;AACR,UAAA;AAAA,QACF,KAAK,UAAA;AACH,UAAA,OAAA,CAAQ,QAAA,EAAA;AACR,UAAA;AAAA,QACF,KAAK,KAAA;AACH,UAAA,OAAA,CAAQ,GAAA,EAAA;AACR,UAAA;AAAA,QACF,KAAK,MAAA;AACH,UAAA,OAAA,CAAQ,IAAA,EAAA;AACR,UAAA;AAAA,QACF;AACE,UAAA,OAAA,CAAQ,IAAA,EAAA;AACR,UAAA;AAAA;AACJ,IACF;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,QAAA,EAA0B;AACjD,IAAA,QAAQ,QAAA;AAAU,MAChB,KAAK,UAAA;AACH,QAAA,OAAO,CAAA;AAAA,MACT,KAAK,MAAA;AACH,QAAA,OAAO,CAAA;AAAA,MACT,KAAK,UAAA;AACH,QAAA,OAAO,CAAA;AAAA,MACT,KAAK,KAAA;AACH,QAAA,OAAO,CAAA;AAAA,MACT,KAAK,MAAA;AACH,QAAA,OAAO,CAAA;AAAA,MACT;AACE,QAAA,OAAO,CAAA;AAAA;AACX,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,MAAA,EAA8B;AACxD,IAAA,IAAI,MAAA,CAAO,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG;AACvC,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,UAAA,CAAW,QAAA,CAAS,2BAA2B,CAAC,CAAA;AAEnE,IAAA,KAAA,MAAW,GAAA,IAAO,OAAO,eAAA,EAAiB;AACxC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAA,EAAK,UAAA,CAAW,WAAA,EAAa,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,EAAA,EAAK,GAAA,CAAI,cAAc,CAAA,QAAA,EAAM,GAAA,CAAI,kBAAkB,CAAA;AAAA,OACjG;AACA,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,UAAA,CAAW,MAAM,GAAA,CAAI,MAAM,CAAC,CAAA,CAAE,CAAA;AACjD,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,UAAA,CAAW,MAAM,GAAA,CAAI,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,IACnD;AAEA,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,UAAA,CAAW,+CAA+C,CAAC,CAAA;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,sBAAA,CACZ,MAAA,EACA,OAAA,EACe;AACf,IAAA,IAAI,MAAA,CAAO,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG;AACvC,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,CAAY,6BAA6B,CAAC,CAAA;AACjE,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,UAAA,CAAW,UAAA,CAAW,4BAA4B,CAAC,CAAA;AAEtE,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,GAAA,EAAI;AACvD,IAAA,MAAM,YAAA,GAAe,OAAO,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAA;AAE7E,IAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,QAAA,CAAS,8BAA8B,CAAC,CAAA;AAC/D,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,OAAA,GAAU,CAAC,OAAA,EAAS,KAAK,CAAA;AAC/B,MAAA,IAAI,CAAC,QAAQ,UAAA,EAAY;AACvB,QAAA,OAAA,CAAQ,KAAK,YAAY,CAAA;AAAA,MAC3B;AAEA,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,KAAA,EAAO,OAAA,EAAS;AAAA,QACvC,GAAA,EAAK,aAAA;AAAA,QACL,QAAA,EAAU,MAAA;AAAA,QACV,KAAA,EAAO;AAAA,OACR,CAAA;AAED,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,MAAM,MAAA,CAAO,KAAA;AAAA,MACf;AAEA,MAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,MACrE;AAEA,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,CAAY,qCAAqC,CAAC,CAAA;AAGzE,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,QAAA,CAAS,6CAA6C,CAAC,CAAA;AAC9E,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,mBAAA,CAAoB,EAAE,GAAG,OAAA,EAAS,QAAA,EAAU,KAAA,EAAO,CAAA;AAEhF,MAAA,IAAI,UAAU,OAAA,CAAQ,QAAA,KAAa,KAAK,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA,EAAG;AACpE,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,UAAA,CAAW,YAAY,iEAAiE;AAAA,SAC1F;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,UAAA,CAAW,WAAA;AAAA,YACT,GAAG,SAAA,CAAU,OAAA,CAAQ,QAAQ,CAAA,cAAA,EAAiB,SAAA,CAAU,QAAQ,IAAI,CAAA,qCAAA;AAAA;AACtE,SACF;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,SAAA,CAAU,iCAAiC,CAAC,CAAA;AACrE,MAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,IAC/C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAgB,OAAA,EAA2C;AAChE,IAAA,MAAM,SAAmB,EAAC;AAG1B,IAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,CAAC,CAAC,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,EAAG;AACpF,MAAA,MAAA,CAAO,KAAK,4DAA4D,CAAA;AAAA,IAC1E;AAGA,IAAA,IAAI,OAAA,CAAQ,QAAA,IAAY,CAAC,CAAC,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ,UAAU,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3F,MAAA,MAAA,CAAO,KAAK,iEAAiE,CAAA;AAAA,IAC/E;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAA,GAAsB;AAC3B,IAAA,OAAO;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,EA6BT;AACF,CAAA;ACviBO,IAAM,qBAAN,MAAyB;AAAA,EACtB,SAAA;AAAA,EAER,WAAA,GAAc;AACZ,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,iBAAA,EAAkB;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eACJ,QAAA,EACmB;AACnB,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MACrC,IAAA,EAAM,IAAA,CAAK,mBAAA,CAAoB,GAAG,CAAA;AAAA,MAClC,OAAO,GAAA,CAAI,IAAA;AAAA,MACX,OAAA,EAAS;AAAA,KACX,CAAE,CAAA;AAEF,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC,IAAA,EAAM,UAAA;AAAA,MACN,IAAA,EAAM,kBAAA;AAAA,MACN,OAAA,EAAS,UAAA,CAAW,WAAA,CAAY,4BAA4B,CAAA;AAAA,MAC5D,OAAA;AAAA,MACA,QAAA,EAAU,EAAA;AAAA,MACV,QAAA,EAAU,CAAC,KAAA,KAAmB;AAC5B,QAAA,MAAM,QAAA,GAAW,KAAA;AACjB,QAAA,OAAO,QAAA,CAAS,SAAS,CAAA,IAAK,oCAAA;AAAA,MAChC;AAAA,KACD,CAAA;AAED,IAAA,OAAO,OAAA,CAAQ,gBAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,QAAA,EAA4C;AAC9D,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,OAAO,QAAA,CAAS,CAAC,CAAA,IAAK,IAAA;AAAA,IACxB;AAEA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,KAAA,EAAM;AAAA,MACrC,GAAG,SAAS,GAAA,CAAI,CAAC,UAAU,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK,CAAE;AAAA,KACnD;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,UAAA,CAAW,WAAA,CAAY,2BAA2B,CAAA;AAAA,QAC3D,OAAA;AAAA,QACA,QAAA,EAAU;AAAA;AACZ,KACD,CAAA;AAED,IAAA,OAAO,OAAA,CAAQ,OAAA,KAAY,KAAA,GAAQ,IAAA,GAAO,OAAA,CAAQ,OAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAA,GAAwC;AAC5C,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,EAAE,IAAA,EAAM,sBAAA,EAAwB,KAAA,EAAO,QAAA,EAAS;AAAA,MAChD,EAAE,IAAA,EAAM,4BAAA,EAA8B,KAAA,EAAO,UAAA,EAAW;AAAA,MACxD,EAAE,IAAA,EAAM,sBAAA,EAAwB,KAAA,EAAO,OAAA,EAAQ;AAAA,MAC/C,EAAE,IAAA,EAAM,wBAAA,EAA0B,KAAA,EAAO,OAAA,EAAQ;AAAA,MACjD,EAAE,IAAA,EAAM,yBAAA,EAA2B,KAAA,EAAO,QAAA;AAAS,KACrD;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS,UAAA,CAAW,UAAA,CAAW,yBAAyB,CAAA;AAAA,QACxD,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAED,IAAA,OAAO,OAAA,CAAQ,QAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBAAA,CAA0B,SAAA,EAAmB,OAAA,EAAoC;AACrF,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,GAAA,CAAIf,MAAAA,CAAM,MAAA,CAAO,wBAAc,GAAG,OAAO,CAAA;AAAA,IACnD;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC;AAAA,QACE,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS,UAAA,CAAW,OAAA,CAAQ,CAAA,yBAAA,EAA4B,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,QACpE,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAED,IAAA,OAAO,OAAA,CAAQ,SAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CACJ,QAAA,EACA,OAAA,GAAkB,iBAAA,EACD;AACjB,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,OAAA;AAAA,QACA,OAAA,EAAS,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,MAAS,EAAE,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,GAAA,EAAI,CAAE,CAAA;AAAA,QAC1D,QAAA,EAAU;AAAA;AACZ,KACD,CAAA;AAED,IAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,GAAuC;AAC3C,IAAA,MAAM,UAAA,GAAa,QAAQ,GAAA,EAAI;AAC/B,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,EAAE,IAAA,EAAM,CAAA,mBAAA,EAAsB,UAAU,CAAA,CAAA,CAAA,EAAK,OAAO,UAAA,EAAW;AAAA,MAC/D,EAAE,IAAA,EAAM,yBAAA,EAA2B,KAAA,EAAO,QAAA;AAAS,KACrD;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,UAAA,CAAW,IAAA,CAAK,WAAA,EAAM,6BAA6B,CAAA;AAAA,QAC5D;AAAA;AACF,KACD,CAAA;AAED,IAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAC7B,MAAA,OAAO,KAAK,eAAA,EAAgB;AAAA,IAC9B;AAEA,IAAA,OAAO,OAAA,CAAQ,IAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,eAAA,CAAgB,WAAA,GAAc,OAAA,CAAQ,KAAI,EAAoB;AAC1E,IAAA,MAAM,cAAA,GAAiB,MAAM,IAAA,CAAK,SAAA,CAAU,gBAAgB,WAAW,CAAA;AACvE,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,EAAE,IAAA,EAAM,uBAAA,EAAyB,KAAA,EAAO,IAAA,EAAK;AAAA,MAC7C,EAAE,IAAA,EAAM,CAAA,YAAA,EAAe,WAAW,CAAA,CAAA,CAAA,EAAK,OAAO,GAAA,EAAI;AAAA,MAClD,GAAG,cAAA,CAAe,GAAA,CAAI,CAAC,IAAA,MAAkB;AAAA,QACvC,IAAA,EAAM,aAAM,IAAI,CAAA,CAAA;AAAA,QAChB,KAAA,EAAO,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,IAAI,CAAA;AAAA,OAC/B,CAAE;AAAA,KACJ;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS,WAAW,WAAW,CAAA,CAAA;AAAA,QAC/B,OAAA;AAAA,QACA,QAAA,EAAU;AAAA;AACZ,KACD,CAAA;AAED,IAAA,IAAI,OAAA,CAAQ,aAAa,GAAA,EAAK;AAC5B,MAAA,OAAO,WAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAA,CAAQ,aAAa,IAAA,EAAM;AAC7B,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,KAAA,CAAM,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,IAAK,GAAA;AAChE,MAAA,OAAO,IAAA,CAAK,gBAAgB,MAAM,CAAA;AAAA,IACpC;AAGA,IAAA,MAAM,cAAA,GAAiB,CAAC,qBAAA,EAAuB,oBAAoB,CAAA;AACnE,IAAA,IAAI,YAAA,GAAe,KAAA;AACnB,IAAA,KAAA,MAAW,QAAQ,cAAA,EAAgB;AACjC,MAAA,IAAI,MAAM,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,CAAA,EAAG,QAAQ,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA,EAAG;AAC9D,QAAA,YAAA,GAAe,IAAA;AACf,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,QACpC;AAAA,UACE,IAAA,EAAM,SAAA;AAAA,UACN,IAAA,EAAM,SAAA;AAAA,UACN,OAAA,EAAS,CAAA,IAAA,EAAO,OAAA,CAAQ,QAAQ,CAAA,cAAA,CAAA;AAAA,UAChC,OAAA,EAAS;AAAA;AACX,OACD,CAAA;AAED,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAO,OAAA,CAAQ,QAAA;AAAA,MACjB;AAAA,IACF;AAEA,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,OAAA,CAAQ,QAAQ,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,GAAoC;AACxC,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,sDAAgC,CAAC,CAAA;AAE7D,IAAA,MAAM,WAAA,GAAc,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACxC,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS,qBAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAA,EAAO,SAAA,EAAU;AAAA,QACtD,EAAE,IAAA,EAAM,yBAAA,EAA2B,KAAA,EAAO,QAAA,EAAS;AAAA,QACnD,EAAE,IAAA,EAAM,4BAAA,EAA8B,KAAA,EAAO,SAAA,EAAU;AAAA,QACvD,EAAE,IAAA,EAAM,sBAAA,EAAwB,KAAA,EAAO,MAAA;AAAO,OAChD;AAAA,MACA,OAAA,EAAS;AAAA,KACV,CAAA;AAED,IAAA,MAAM,iBAAA,GAAoB,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MAC9C,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,aAAA;AAAA,MACN,OAAA,EAAS,qCAAA;AAAA,MACT,OAAA,EAAS;AAAA,KACV,CAAA;AAED,IAAA,MAAM,YAAA,GAAe,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACzC,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,gCAAA;AAAA,MACT,OAAA,EAAS;AAAA,KACV,CAAA;AAED,IAAA,MAAM,cAAA,GAAiB,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MAC3C,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,gBAAA;AAAA,MACN,OAAA,EAAS,0BAAA;AAAA,MACT,OAAA,EAAS;AAAA,QACP,EAAE,IAAA,EAAM,wBAAA,EAA0B,KAAA,EAAO,QAAA,EAAS;AAAA,QAClD,EAAE,IAAA,EAAM,8BAAA,EAAgC,KAAA,EAAO,OAAA,EAAQ;AAAA,QACvD,EAAE,IAAA,EAAM,2BAAA,EAA6B,KAAA,EAAO,OAAA;AAAQ,OACtD;AAAA,MACA,OAAA,EAAS;AAAA,KACV,CAAA;AAED,IAAA,MAAM,aAAA,GAAgB,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MAC1C,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,4BAAA;AAAA,MACT,OAAA,EAAS,EAAA;AAAA,MACT,QAAA,EAAU,CAAC,KAAA,KAA8B;AACvC,QAAA,IAAI,KAAA,KAAU,QAAW,OAAO,qBAAA;AAChC,QAAA,OAAO,QAAQ,CAAA,IAAK,0BAAA;AAAA,MACtB;AAAA,KACD,CAAA;AAED,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,GAAG,WAAA;AAAA,MACH,GAAG,iBAAA;AAAA,MACH,GAAG,YAAA;AAAA,MACH,GAAG,cAAA;AAAA,MACH,GAAG;AAAA,KACL;AAEA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,MAAA,EAA+B;AACjD,IAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,IAAA,CAAK,8BAAuB,CAAC,CAAA;AAGpD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oBAAA,EAAuB,MAAA,CAAO,YAAY,CAAA,CAAE,CAAA;AACxD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAC7C,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsB,MAAA,CAAO,aAAa,CAAA,CAAE,CAAA;AAExD,IAAA,IAAI,MAAA,CAAO,kBAAkB,CAAA,EAAG;AAC9B,MAAA,OAAA,CAAQ,IAAI,UAAA,CAAW,YAAA,CAAa,GAAG,MAAA,CAAO,eAAe,mBAAmB,CAAC,CAAA;AAAA,IACnF;AAEA,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAEd,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC;AAAA,QACE,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,OAAA,EAAS,sBAAA;AAAA,QACT,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAED,IAAA,OAAO,OAAA,CAAQ,OAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAqB,KAAA,EAAgC;AACzD,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,EAAE,IAAA,EAAM,iBAAA,EAAmB,KAAA,EAAO,OAAA,EAAQ;AAAA,MAC1C,EAAE,IAAA,EAAM,mBAAA,EAAqB,KAAA,EAAO,MAAA,EAAO;AAAA,MAC3C,EAAE,IAAA,EAAM,yBAAA,EAA2B,KAAA,EAAO,UAAA,EAAW;AAAA,MACrD,EAAE,IAAA,EAAM,iBAAA,EAAmB,KAAA,EAAO,OAAA;AAAQ,KAC5C;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,UAAA,CAAW,SAAA,CAAU,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,CAAA;AAAA,QAC/C,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAED,IAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAc,OAAA,EAAmC;AACrD,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO;AAAA,MACpC;AAAA,QACE,IAAA,EAAM,SAAA;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,UAAA,CAAW,UAAA,CAAW,OAAO,CAAA;AAAA,QACtC,OAAA,EAAS;AAAA;AACX,KACD,CAAA;AAED,IAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,GAAA,EAAkB;AAC5C,IAAA,MAAM,eAAA,GAAuC;AAAA,MAC3C,OAAOA,MAAAA,CAAM,GAAA;AAAA,MACb,OAAOA,MAAAA,CAAM,MAAA;AAAA,MACb,OAAOA,MAAAA,CAAM;AAAA,KACf;AAEA,IAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,GAAA,CAAI,IAAI,KAAKA,MAAAA,CAAM,IAAA;AAErD,IAAA,OAAO,CAAA,EAAG,IAAI,IAAI,CAAA,CAAA,EAAIA,OAAM,GAAA,CAAI,GAAA,CAAI,OAAO,CAAC,CAAA,QAAA,EAAM,UAAU,GAAA,CAAI,MAAM,CAAC,CAAA,CAAA,EAAIA,MAAAA,CAAM,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,IAAI,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA;AAAA,EACvG;AACF,CAAA;;;ACpWO,IAAM,gBAAN,MAAoB;AAAA,EACR,aAAA;AAAA,EAEjB,YAAY,aAAA,EAAqC;AAC/C,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAA,CAAQ,OAAA,GAAgC,EAAC,EAAkB;AAC/D,IAAA,IAAI,WAAA;AAEJ,IAAA,IAAI;AAEF,MAAA,YAAA,CAAa,SAAS,SAAS,CAAA;AAG/B,MAAA,WAAA,GAAc,IAAI,WAAA,CAAY;AAAA,QAC5B,IAAA,EAAM,yCAAA;AAAA,QACN,KAAA,EAAO;AAAA;AAAA,OACR,CAAA;AACD,MAAA,WAAA,CAAY,MAAM,2DAAc,CAAA;AAGhC,MAAA,MAAM,SAAS,YAAA,CAAa,UAAA,CAAW,QAAQ,SAAA,IAAa,OAAA,CAAQ,KAAK,CAAA;AAGzE,MAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,MAAA,IAAU,MAAA,CAAO,UAAU,MAAA,IAAU,OAAA;AAGrE,MAAA,MAAM,YAAY,IAAI,eAAA;AAAA,QACpB,eAAA;AAAA,QACA,QAAQ,KAAA,KAAU;AAAA,OACpB;AAGA,MAAA,MAAM,aAAA,GAA+B;AAAA,QACnC,eAAe,OAAA,CAAQ,SAAA;AAAA,QACvB,aAAa,OAAA,CAAQ,OAAA;AAAA,QACrB,MAAA,EAAQ,OAAA,CAAQ,MAAA,IAAU,MAAA,CAAO,QAAA,EAAU,MAAA;AAAA,QAC3C,iBAAA,EAAmB,OAAA,CAAQ,UAAA,IAAc,MAAA,CAAO,UAAU,iBAAA,IAAqB,KAAA;AAAA;AAAA,QAE/E,SAAS,OAAA,CAAQ,OAAA,EAAS,MAAA,GAAS,OAAA,CAAQ,UAAU,MAAA,CAAO,OAAA;AAAA,QAC5D,SAAS,OAAA,CAAQ,OAAA,EAAS,MAAA,GAAS,OAAA,CAAQ,UAAU,MAAA,CAAO,OAAA;AAAA,QAC5D,WAAA,EAAa,OAAA,CAAQ,WAAA,IAAe,MAAA,CAAO,UAAU,WAAA,IAAe,KAAA;AAAA,QACpE,MAAA,EAAQ,OAAA,CAAQ,MAAA,IAAU,MAAA,CAAO,UAAU,MAAA,IAAU,KAAA;AAAA,QACrD,KAAA,EAAO,QAAQ,KAAA,IAAS,KAAA;AAAA,QACxB,YAAA,EAAc,OAAA,CAAQ,YAAA,IAAgB,MAAA,CAAO,UAAU,YAAA,IAAgB;AAAA,OACzE;AAGA,MAAA,WAAA,CAAY,MAAA,CAAO,+CAAA,EAAc,CAAA,EAAG,CAAC,CAAA;AACrC,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,aAAA,CAAc,YAAY,aAAa,CAAA;AAG/D,MAAA,WAAA,CAAY,MAAA,CAAO,yCAAA,EAAa,CAAA,EAAG,CAAC,CAAA;AAEpC,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ;AACxB,QAAA,WAAA,CAAY,QAAQ,8DAAY,CAAA;AAChC,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,CAAY,kCAAkC,CAAC,CAAA;AACtE,QAAA;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,UAAA,CAAW,WAAA;AAAA,UACT,CAAA,MAAA,EAAS,KAAK,YAAY,CAAA,OAAA,EAAU,KAAK,YAAA,KAAiB,CAAA,GAAI,KAAK,GAAG,CAAA,UAAA;AAAA;AACxE,OACF;AAGA,MAAA,IAAI,SAAA,GAAY,IAAA;AAChB,MAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,QAAA,SAAA,GAAY,MAAM,IAAA,CAAK,oBAAA,CAAqB,IAAI,CAAA;AAChD,QAAA,IAAI,CAAC,SAAA,CAAU,OAAA,CAAQ,MAAA,EAAQ;AAC7B,UAAA,WAAA,CAAY,KAAK,4CAAS,CAAA;AAC1B,UAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,WAAA,CAAY,qBAAqB,CAAC,CAAA;AACzD,UAAA;AAAA,QACF;AAAA,MACF;AAGA,MAAA,WAAA,CAAY,MAAA,CAAO,qDAAA,EAAe,CAAA,EAAG,CAAC,CAAA;AAEtC,MAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAEnB,QAAA,WAAA,CAAY,IAAA,EAAK;AACjB,QAAA,WAAA,GAAc,IAAI,WAAA,CAAY;AAAA,UAC5B,IAAA,EAAM,qBAAA;AAAA,UACN,KAAA,EAAO,UAAU,OAAA,CAAQ;AAAA,SAC1B,CAAA;AACD,QAAA,WAAA,CAAY,MAAM,yCAAW,CAAA;AAE7B,QAAA,MAAM,SAAS,MAAM,IAAA,CAAK,aAAA,CAAc,cAAA,CAAe,WAAW,aAAa,CAAA;AAC/E,QAAA,WAAA,CAAY,OAAA,CAAQ,CAAA,QAAA,EAAW,SAAA,CAAU,OAAA,CAAQ,MAAM,CAAA,QAAA,CAAU,CAAA;AAEjE,QAAA,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,MAClD,CAAA,MAAO;AACL,QAAA,WAAA,CAAY,MAAA,CAAO,yCAAA,EAAa,CAAA,EAAG,CAAC,CAAA;AACpC,QAAA,WAAA,CAAY,QAAQ,sCAAQ,CAAA;AAC5B,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,QAAA,CAAS,2BAA2B,CAAC,CAAA;AAC5D,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAChD;AAEA,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,YAAA,CAAa,2BAA2B,CAAC,CAAA;AAAA,IAClE,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,KAAK,kBAAkB,CAAA;AAAA,MACrC;AAEA,MAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,QAAA,OAAA,CAAQ,MAAM,UAAA,CAAW,SAAA,CAAU,UAAU,KAAA,CAAM,OAAO,EAAE,CAAC,CAAA;AAAA,MAC/D,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,SAAA,CAAU,wBAAwB,CAAC,CAAA;AAAA,MAC9D;AACA,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,qBAAqB,IAAA,EAAuC;AACxE,IAAA,MAAM,kBAAA,GAAqB,IAAI,kBAAA,EAAmB;AAGlD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,MAC7C,MAAM,MAAA,CAAO,WAAA;AAAA,MACb,SAAS,MAAA,CAAO,cAAA;AAAA,MAChB,QAAQ,MAAA,CAAO,UAAA;AAAA,MACf,MAAM,MAAA,CAAO;AAAA,KACf,CAAE,CAAA;AAEF,IAAA,MAAM,oBAAA,GAAuB,MAAM,kBAAA,CAAmB,cAAA,CAAe,QAAQ,CAAA;AAG7E,IAAA,MAAM,eAAA,GAAkB,KAAK,OAAA,CAAQ,MAAA;AAAA,MAAO,CAAC,MAAA,KAC3C,oBAAA,CAAqB,QAAA,CAAS,OAAO,WAAW;AAAA,KAClD;AAEA,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,OAAA,EAAS,eAAA;AAAA,MACT,cAAc,eAAA,CAAgB;AAAA,KAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAgB,OAAA,EAAyC;AAC9D,IAAA,MAAM,SAAmB,EAAC;AAG1B,IAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,CAAC,CAAC,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,EAAG;AACpF,MAAA,MAAA,CAAO,KAAK,4DAA4D,CAAA;AAAA,IAC1E;AAGA,IAAA,IACE,OAAA,CAAQ,MAAA,IACR,CAAC,CAAC,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,OAAA,EAAS,QAAQ,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,MAAM,CAAA,EAC3E;AACA,MAAA,MAAA,CAAO,KAAK,wEAAwE,CAAA;AAAA,IACtF;AAGA,IAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,OAAA,CAAQ,MAAA,EAAQ;AACzC,MAAA,MAAA,CAAO,KAAK,yCAAyC,CAAA;AAAA,IACvD;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,WAAA,GAAsB;AAC3B,IAAA,OAAO;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,EAmCT;AACF,CAAA;;;AClNA,IAAM,UAAA,GAAagB,aAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAChD,IAAM,SAAA,GAAYH,QAAQ,UAAU,CAAA;AACpC,IAAM,WAAA,GAAc,KAAK,KAAA,CAAMR,YAAAA,CAAaF,KAAK,SAAA,EAAW,iBAAiB,CAAA,EAAG,OAAO,CAAC,CAAA;AAKxF,SAAS,eAAe,aAAA,EAAwB;AAC9C,EAAA,MAAM,iBAAA,GAAoB,IAAI,iBAAA,EAAkB;AAChD,EAAA,MAAM,mBAAA,GAAsB,IAAI,uBAAA,CAAwB,iBAAiB,CAAA;AAEzE,EAAA,MAAM,uBAAuB,oBAAA,CAAqB,gBAAA;AAAA,IAChD,mBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,gBAAA,GAAmB,IAAI,gBAAA,CAAiB,mBAAmB,CAAA;AAEjE,EAAA,OAAO;AAAA,IACL,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,oBAAA;AAAA,IACA;AAAA,GACF;AACF;AAKA,eAAsB,IAAA,GAAsB;AAC1C,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAG5B,EAAA,IAAI,aAAA;AAGJ,EAAA,MAAM,cAAA,GAAiB,QAAQ,IAAA,CAAK,SAAA,CAAU,CAAC,GAAA,KAAQ,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,aAAa,CAAA;AAC5F,EAAA,IAAI,mBAAmB,EAAA,IAAM,cAAA,GAAiB,CAAA,GAAI,OAAA,CAAQ,KAAK,MAAA,EAAQ;AACrE,IAAA,aAAA,GAAgB,OAAA,CAAQ,IAAA,CAAK,cAAA,GAAiB,CAAC,CAAA;AAAA,EACjD;AAGA,EAAA,MAAM,SAAS,YAAA,CAAa,UAAA,CAAW,aAAA,IAAiB,OAAA,CAAQ,KAAK,CAAA;AAGrE,EAAA,IAAI,eAAe,qBAAA,EAAsB,IAAK,MAAA,CAAO,QAAA,EAAU,oBAAoB,KAAA,EAAO;AACxF,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,MAAM,cAAA,CAAe,YAAA,CAAa,YAAY,OAAA,EAAS;AAAA,QAC3E,UAAA,EAAY,KAAA;AAAA,QACZ,OAAA,EAAS;AAAA;AAAA,OACV,CAAA;AAED,MAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,QAAA,MAAM,SAAA,GAAY,MAAM,cAAA,CAAe,eAAA,CAAgB,aAAa,CAAA;AACpE,QAAA,IAAI,SAAA,EAAW;AAEb,UAAA,OAAA,CAAQ,GAAA,CAAIH,MAAAA,CAAM,IAAA,CAAK,2DAA2D,CAAC,CAAA;AACnF,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AAEd,MAAA,IAAI,OAAA,CAAQ,KAAK,QAAA,CAAS,IAAI,KAAK,OAAA,CAAQ,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACrE,QAAA,OAAA,CAAQ,IAAA,CAAKA,MAAAA,CAAM,MAAA,CAAO,4CAAkC,GAAG,KAAK,CAAA;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,QAAA,GAAW,eAAe,aAAa,CAAA;AAG7C,EAAA,OAAA,CACG,IAAA,CAAK,KAAK,CAAA,CACV,WAAA,CAAY,oEAAoE,CAAA,CAChF,MAAA,CAAO,WAAA,EAAa,0BAA0B,CAAA,CAC9C,MAAA,CAAO,iBAAiB,wBAAwB,CAAA,CAChD,OAAO,wBAAA,EAA0B,0BAA0B,EAC3D,MAAA,CAAO,YAAA,EAAc,wBAAwB,CAAA,CAC7C,MAAA,CAAO,cAAA,EAAgB,8BAA8B,CAAA,CACrD,MAAA,CAAO,eAAe,6BAA6B,CAAA,CACnD,OAAO,eAAA,EAAiB,+BAA+B,CAAA,CACvD,MAAA,CAAO,sBAAA,EAAwB,iCAAiC,EAChE,MAAA,CAAO,aAAA,EAAe,6BAA6B,CAAA,CACnD,MAAA,CAAO,oBAAoB,gCAAgC,CAAA,CAC3D,MAAA,CAAO,gBAAA,EAAkB,4CAA4C,CAAA;AAGxE,EAAA,OAAA,CACG,QAAQ,OAAO,CAAA,CACf,KAAA,CAAM,KAAK,EACX,WAAA,CAAY,yCAAyC,CAAA,CACrD,MAAA,CAAO,oBAAoB,6BAA6B,CAAA,CACxD,OAAO,qBAAA,EAAuB,2CAAA,EAA6C,OAAO,CAAA,CAClF,MAAA;AAAA,IACC,qBAAA;AAAA,IACA,uDAAA;AAAA,IACA;AAAA,GACF,CACC,OAAO,cAAA,EAAgB,6BAA6B,EACpD,MAAA,CAAO,qBAAA,EAAuB,qCAAqC,EAAE,EACrE,MAAA,CAAO,qBAAA,EAAuB,qCAAqC,EAAE,EACrE,MAAA,CAAO,OAAO,SAAS,OAAA,KAAY;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAK;AAC1C,MAAA,MAAM,YAAA,GAAe,IAAI,YAAA,CAAa,QAAA,CAAS,oBAAoB,CAAA;AAEnE,MAAA,MAAM,aAAa,OAAA,CAAQ;AAAA,QACzB,WAAW,aAAA,CAAc,SAAA;AAAA,QACzB,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,GAClC,OAAA,CAAQ,OAAA,GACR,CAAC,OAAA,CAAQ,OAAO,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,QACpC,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,GAClC,OAAA,CAAQ,OAAA,GACR,CAAC,OAAA,CAAQ,OAAO,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,QACpC,SAAS,aAAA,CAAc,OAAA;AAAA,QACvB,KAAA,EAAO,CAAC,aAAA,CAAc;AAAA,OACvB,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,eAAU,GAAG,KAAK,CAAA;AAC1C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,OAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,KAAA,CAAM,GAAG,EACT,WAAA,CAAY,6BAA6B,CAAA,CACzC,MAAA,CAAO,qBAAqB,oCAAoC,CAAA,CAChE,MAAA,CAAO,eAAA,EAAiB,uCAAuC,CAAA,CAC/D,MAAA;AAAA,IACC,qBAAA;AAAA,IACA,uDAAA;AAAA,IACA;AAAA,IAED,MAAA,CAAO,kBAAA,EAAoB,8BAA8B,CAAA,CACzD,OAAO,qBAAA,EAAuB,mCAAA,EAAqC,EAAE,EACrE,MAAA,CAAO,qBAAA,EAAuB,mCAAA,EAAqC,EAAE,CAAA,CACrE,MAAA,CAAO,SAAA,EAAW,6BAA6B,EAC/C,MAAA,CAAO,cAAA,EAAgB,6BAA6B,CAAA,CACpD,OAAO,qBAAA,EAAuB,qCAAqC,CAAA,CACnE,MAAA,CAAO,uBAAuB,2CAAA,EAA6C,OAAO,EAClF,MAAA,CAAO,OAAO,SAAS,OAAA,KAAY;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAK;AAC1C,MAAA,MAAM,aAAA,GAAgB,IAAI,aAAA,CAAc,QAAA,CAAS,oBAAoB,CAAA;AAErE,MAAA,MAAM,cAAc,OAAA,CAAQ;AAAA,QAC1B,WAAW,aAAA,CAAc,SAAA;AAAA,QACzB,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,GAClC,OAAA,CAAQ,OAAA,GACR,CAAC,OAAA,CAAQ,OAAO,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,QACpC,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,CAAA,GAClC,OAAA,CAAQ,OAAA,GACR,CAAC,OAAA,CAAQ,OAAO,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,QACpC,cAAc,OAAA,CAAQ,YAAA;AAAA,QACtB,SAAS,aAAA,CAAc,OAAA;AAAA,QACvB,KAAA,EAAO,CAAC,aAAA,CAAc;AAAA,OACvB,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,eAAU,GAAG,KAAK,CAAA;AAC1C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,OAAA,CACG,OAAA,CAAQ,SAAS,CAAA,CACjB,KAAA,CAAM,GAAG,CAAA,CACT,WAAA,CAAY,sDAAsD,CAAA,CAClE,QAAA,CAAS,WAAA,EAAa,cAAc,CAAA,CACpC,SAAS,WAAA,EAAa,cAAc,CAAA,CACpC,QAAA,CAAS,WAAA,EAAa,+BAA+B,CAAA,CACrD,MAAA,CAAO,uBAAuB,2CAAA,EAA6C,OAAO,CAAA,CAClF,MAAA,CAAO,OAAO,OAAA,EAAS,WAAA,EAAa,OAAA,EAAS,SAAS,OAAA,KAAY;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAK;AAC1C,MAAA,MAAM,YAAY,IAAI,eAAA;AAAA,QACpB,OAAA,CAAQ,MAAA;AAAA,QACR,CAAC,aAAA,CAAc;AAAA,OACjB;AAGA,MAAA,IAAI,aAAA,GAAgB,OAAA;AACpB,MAAA,IAAI,CAAC,aAAA,EAAe;AAElB,QAAA,MAAM,mBAAA,GAAsB,IAAI,kBAAA,EAAmB;AACnD,QAAA,aAAA,GAAA,CAAiB,MAAM,mBAAA,CAAoB,gBAAA,CAAiB,WAAW,GAAG,QAAA,EAAS;AAAA,MACrF;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,oBAAA,CAAqB,aAAA;AAAA,QACnD,OAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAA;AAAA,QACA,aAAA,CAAc;AAAA,OAChB;AAEA,MAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,oBAAA,CAAqB,QAAQ,CAAA;AAC/D,MAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAAA,IAC7B,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,eAAU,GAAG,KAAK,CAAA;AAC1C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,OAAA,CACG,OAAA,CAAQ,WAAW,CAAA,CACnB,KAAA,CAAM,GAAG,EACT,WAAA,CAAY,sCAAsC,CAAA,CAClD,MAAA,CAAO,YAAA,EAAc,kCAAkC,EACvD,MAAA,CAAO,aAAA,EAAe,2BAA2B,CAAA,CACjD,MAAA,CAAO,qBAAA,EAAuB,2CAAA,EAA6C,OAAO,CAAA,CAClF,MAAA,CAAO,OAAO,OAAA,EAAS,OAAA,KAAY;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAK;AAC1C,MAAA,MAAM,YAAY,IAAI,eAAA;AAAA,QACpB,OAAA,CAAQ,MAAA;AAAA,QACR,CAAC,aAAA,CAAc;AAAA,OACjB;AAEA,MAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,QAAA,MAAM,SAAS,MAAM,QAAA,CAAS,gBAAA,CAAiB,iBAAA,CAAkB,cAAc,SAAS,CAAA;AACxF,QAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,sBAAA,CAAuB,MAAM,CAAA;AAC/D,QAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAC3B,QAAA,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,OAAA,GAAU,CAAA,GAAI,CAAC,CAAA;AAAA,MACrC,CAAA,MAAA,IAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,QAAQ,MAAM,QAAA,CAAS,gBAAA,CAAiB,iBAAA,CAAkB,cAAc,SAAS,CAAA;AACvF,QAAA,MAAM,eAAA,GAAkB,SAAA,CAAU,oBAAA,CAAqB,KAAK,CAAA;AAC5D,QAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,MAAM,OAAO,MAAM,QAAA,CAAS,gBAAA,CAAiB,gBAAA,CAAiB,cAAc,SAAS,CAAA;AACrF,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAU,aAAA,CAAc,CAAA,WAAA,EAAc,KAAK,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,CAAA;AACtE,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAU,aAAA,CAAc,CAAA,MAAA,EAAS,KAAK,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,CAAA;AACjE,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAU,aAAA,CAAc,CAAA,UAAA,EAAa,KAAK,YAAY,CAAA,CAAA,EAAI,MAAM,CAAC,CAAA;AAC7E,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAU,aAAA,CAAc,CAAA,UAAA,EAAa,KAAK,YAAY,CAAA,CAAA,EAAI,MAAM,CAAC,CAAA;AAE7E,QAAA,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AAChC,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,SAAA,CAAU,cAAc,CAAA,eAAA,EAAkB,IAAA,CAAK,aAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,MAAM;AAAA,WAClF;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,eAAU,GAAG,KAAK,CAAA;AAC1C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,OAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,KAAA,CAAM,GAAG,EACT,WAAA,CAAY,uBAAuB,CAAA,CACnC,MAAA,CAAO,mBAAA,EAAqB,2CAA2C,EACvE,MAAA,CAAO,YAAA,EAAc,uBAAuB,CAAA,CAC5C,MAAA,CAAO,mBAAA,EAAqB,6BAA6B,CAAA,CACzD,MAAA,CAAO,OAAO,OAAA,EAAS,QAAA,KAAa;AACnC,IAAA,IAAI;AACF,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,MAAM,MAAA,GAAS,aAAa,UAAA,EAAW;AACvC,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,QAAA,CAAS,mBAAmB,CAAC,CAAA;AACpD,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AACxB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAO,KAAK,CAAA,CAAE,CAAA;AAAA,QAC5B,CAAC,CAAA;AACD,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,GAAA,EAAK;AACf,QAAA,MAAM,MAAA,GAAS,aAAa,UAAA,EAAW;AACvC,QAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,GAAG,CAAA,EAAG;AACjC,UAAA,OAAA,CAAQ,MAAM,UAAA,CAAW,SAAA,CAAU,kBAAkB,OAAA,CAAQ,GAAG,EAAE,CAAC,CAAA;AACnE,UAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,KAAA,CAAM,CAAA,kBAAA,EAAqB,OAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAC,CAAA;AACtE,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AAEA,QAAA,YAAA,CAAa,QAAA,CAAS,QAAQ,GAAG,CAAA;AACjC,QAAA,OAAA,CAAQ,IAAI,UAAA,CAAW,WAAA,CAAY,iBAAiB,OAAA,CAAQ,GAAG,EAAE,CAAC,CAAA;AAGlE,QAAA,OAAA,CAAQ,IAAI,kBAAkB,CAAA;AAC9B,QAAA,MAAM,KAAA,GAAQ,aAAa,QAAA,EAAS;AACpC,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,wBAAmB,CAAC,CAAA,CAAE,CAAA;AACrD,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,wBAAmB,CAAC,CAAA,CAAE,CAAA;AACrD,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,KAAA,CAAM,sBAAiB,CAAC,CAAA,CAAE,CAAA;AACjD,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,qBAAgB,CAAC,CAAA,CAAE,CAAA;AAC/C,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,EAAA,EAAK,KAAA,CAAM,KAAA,CAAM,cAAc,CAAC,CAAA,GAAA,EAAM,KAAA,CAAM,KAAA,CAAM,cAAc,CAAC,CAAA,GAAA,EAAM,KAAA,CAAM,KAAA,CAAM,cAAc,CAAC,CAAA;AAAA,SACpG;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,QAAA,MAAM,kBAAA,GAAqB,IAAI,kBAAA,EAAmB;AAClD,QAAA,MAAMiB,OAAAA,GAAS,MAAM,kBAAA,CAAmB,mBAAA,EAAoB;AAE5D,QAAA,IAAIA,QAAO,KAAA,EAAO;AAChB,UAAA,YAAA,CAAa,QAAA,CAASA,QAAO,KAAK,CAAA;AAClC,UAAA,OAAA,CAAQ,IAAI,UAAA,CAAW,WAAA,CAAY,qBAAqBA,OAAAA,CAAO,KAAK,EAAE,CAAC,CAAA;AAAA,QACzE;AACA,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,YAAA,GAAe,aAAa,QAAA,EAAS;AAC3C,MAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,CAAW,QAAA,CAAS,yBAAyB,CAAC,CAAA;AAC1D,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,YAAA,GAAe,QAAA,GAAW,SAAS,CAAA,CAAE,CAAA;AAC7D,MAAA,OAAA,CAAQ,IAAI,qBAAqB,CAAA;AACjC,MAAA,YAAA,CAAa,UAAA,EAAW,CAAE,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC3C,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAO,KAAK,CAAA,CAAE,CAAA;AAAA,MAC5B,CAAC,CAAA;AACD,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,UAAA,CAAW,MAAM,uEAAuE;AAAA,OAC1F;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,CAAW,SAAA,CAAU,0BAA0B,GAAG,KAAK,CAAA;AACrE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,OAAA,CACG,QAAQ,UAAU,CAAA,CAClB,KAAA,CAAM,KAAK,EACX,WAAA,CAAY,qDAAqD,CAAA,CACjE,MAAA,CAAO,uBAAuB,2CAAA,EAA6C,OAAO,EAClF,MAAA,CAAO,SAAA,EAAW,0CAA0C,IAAI,CAAA,CAChE,MAAA,CAAO,aAAA,EAAe,mCAAmC,CAAA,CACzD,MAAA,CAAO,oBAAA,EAAsB,mDAAmD,EAChF,MAAA,CAAO,eAAA,EAAiB,kCAAkC,CAAA,CAC1D,OAAO,QAAA,EAAU,uCAAuC,EACxD,MAAA,CAAO,OAAO,SAAS,OAAA,KAAY;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAK;AAC1C,MAAA,MAAM,YAAY,IAAI,eAAA;AAAA,QACpB,OAAA,CAAQ,MAAA;AAAA,QACR,CAAC,aAAA,CAAc;AAAA,OACjB;AAEA,MAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,CAAgB,SAAS,CAAA;AAErD,MAAA,MAAM,gBAAgB,OAAA,CAAQ;AAAA,QAC5B,WAAW,aAAA,CAAc,SAAA;AAAA,QACzB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,SAAS,aAAA,CAAc,OAAA;AAAA,QACvB,KAAA,EAAO,CAAC,aAAA,CAAc;AAAA,OACvB,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAMjB,MAAAA,CAAM,GAAA,CAAI,eAAU,GAAG,KAAK,CAAA;AAC1C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,KAAA,CAAM,GAAG,EACT,WAAA,CAAY,iDAAiD,CAAA,CAC7D,MAAA,CAAO,WAAW,uCAAuC,CAAA,CACzD,MAAA,CAAO,QAAA,EAAU,8CAA8C,CAAA,CAC/D,MAAA;AAAA,IACC,oBAAA;AAAA,IACA,4DAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA,CAAO,uBAAA,EAAyB,wCAAwC,CAAA,CACxE,MAAA,CAAO,qBAAA,EAAuB,2CAAA,EAA6C,OAAO,CAAA,CAClF,MAAA,CAAO,OAAO,SAAS,OAAA,KAAY;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,MAAA,CAAO,IAAA,EAAK;AAC1C,MAAA,MAAM,WAAA,GAAc,IAAI,WAAA,EAAY;AAEpC,MAAA,MAAM,YAAY,OAAA,CAAQ;AAAA,QACxB,WAAW,aAAA,CAAc,SAAA;AAAA,QACzB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,iBAAiB,OAAA,CAAQ,eAAA;AAAA,QACzB,SAAS,aAAA,CAAc,OAAA;AAAA,QACvB,KAAA,EAAO,CAAC,aAAA,CAAc;AAAA,OACvB,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,eAAU,GAAG,KAAK,CAAA;AAC1C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,OAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,KAAA,CAAM,GAAG,CAAA,CACT,QAAA,CAAS,WAAA,EAAa,yBAAyB,EAC/C,WAAA,CAAY,0BAA0B,CAAA,CACtC,MAAA,CAAO,CAAC,OAAA,KAAY;AACnB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,GAAA,GAAM,QAAQ,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAK,KAAM,OAAO,CAAA;AAC7D,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,GAAA,CAAI,IAAA,EAAK;AAAA,MACX,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAIA,MAAAA,CAAM,GAAA,CAAI,CAAA,iBAAA,EAAoB,OAAO,EAAE,CAAC,CAAA;AAAA,MACtD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA,EAAK;AAAA,IACf;AAAA,EACF,CAAC,CAAA;AAMH,EAAA,MAAM,IAAA,GAAO,CAAC,GAAG,OAAA,CAAQ,IAAI,CAAA;AAE7B,EAAA,IACE,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,IACjB,CAAC,IAAA,CAAK,IAAA;AAAA,IACJ,CAAC,CAAA,KACC,CAAA,KAAM,MAAA,IACN,CAAA,KAAM,QAAA,IACN,CAAA,KAAM,IAAA,IACN,CAAA,KAAM,UAAA,IACN,CAAA,KAAM,IAAA,IACN,CAAA,KAAM;AAAA,GACV,EACA;AACA,IAAA,MAAM,QAAQ,IAAA,CAAK,SAAA,CAAU,CAAC,GAAA,KAAQ,QAAQ,GAAG,CAAA;AACjD,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,MAAM,CAAA;AAAA,EAC9B;AAEA,EAAA,IAAI,KAAK,QAAA,CAAS,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,EAAG;AACpD,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAQ,IAAA,IAAQ,QAAQ,UAAU,CAAA;AACxE,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA;AAAA,EAChC,CAAA,MAAA,IAAA,CACG,KAAK,QAAA,CAAS,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,eAAe,CAAA,KACrD,CAAC,KAAK,IAAA,CAAK,CAAC,MAAM,CAAA,KAAM,QAAA,IAAY,MAAM,IAAA,IAAQ,CAAA,KAAM,UAAU,CAAA,EAClE;AAEA,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAQ,IAAA,IAAQ,QAAQ,eAAe,CAAA;AAE7E,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,IAAI,CAAA;AAAA,EACtC,CAAA,MAAA,IAAW,KAAK,QAAA,CAAS,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC1D,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAQ,IAAA,IAAQ,QAAQ,SAAS,CAAA;AACvE,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA;AAAA,EAC/B,CAAA,MAAA,IAAW,KAAK,QAAA,CAAS,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAC5D,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAQ,IAAA,IAAQ,QAAQ,WAAW,CAAA;AACzE,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA;AAAA,EACjC,CAAA,MAAA,IAAW,KAAK,QAAA,CAAS,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,kBAAkB,CAAA,EAAG;AACnE,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAQ,IAAA,IAAQ,QAAQ,kBAAkB,CAAA;AAChF,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,WAAW,CAAA;AAAA,EACnC,CAAA,MAAA,IAAW,KAAK,QAAA,CAAS,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA,EAAG;AAC1D,IAAA,MAAM,KAAA,GAAQ,KAAK,SAAA,CAAU,CAAC,QAAQ,GAAA,KAAQ,IAAA,IAAQ,QAAQ,SAAS,CAAA;AACvE,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA;AAAA,EAC/B,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC5C,IAAA,MAAM,QAAQ,IAAA,CAAK,SAAA,CAAU,CAAC,GAAA,KAAQ,QAAQ,kBAAkB,CAAA;AAChE,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,UAAU,CAAA;AAAA,EAClC,CAAA,MAAA,IAAW,IAAA,CAAK,QAAA,CAAS,gBAAgB,CAAA,EAAG;AAC1C,IAAA,MAAM,QAAQ,IAAA,CAAK,SAAA,CAAU,CAAC,GAAA,KAAQ,QAAQ,gBAAgB,CAAA;AAC9D,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,UAAA,EAAY,aAAa,CAAA;AAAA,EACjD;AAGA,EAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG;AACpB,IAAA,OAAA,CAAQ,IAAA,EAAK;AAAA,EACf;AAGA,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAA,CAAQ,GAAA,CAAI,YAAY,OAAO,CAAA;AAG/B,IAAA,IAAI,eAAe,qBAAA,EAAsB,IAAK,MAAA,CAAO,QAAA,EAAU,oBAAoB,KAAA,EAAO;AACxF,MAAA,IAAI;AACF,QAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,yBAAyB,CAAC,CAAA;AACjD,QAAA,MAAM,aAAA,GAAgB,MAAM,cAAA,CAAe,YAAA,CAAa,YAAY,OAAA,EAAS;AAAA,UAC3E,UAAA,EAAY,KAAA;AAAA,UACZ,OAAA,EAAS;AAAA;AAAA,SACV,CAAA;AAED,QAAA,IAAI,cAAc,YAAA,EAAc;AAC9B,UAAA,MAAM,SAAA,GAAY,MAAM,cAAA,CAAe,eAAA,CAAgB,aAAa,CAAA;AACpE,UAAA,IAAI,SAAA,EAAW;AACb,YAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAA,CAAK,2DAA2D,CAAC,CAAA;AACnF,YAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,UAChB;AAAA,QACF,CAAA,MAAA,IAAW,cAAc,QAAA,EAAU;AACjC,UAAA,OAAA,CAAQ,GAAA,CAAIA,MAAAA,CAAM,KAAA,CAAM,mCAAmC,CAAC,CAAA;AAAA,QAC9D;AAAA,MACF,SAAS,KAAA,EAAO;AAEd,QAAA,IAAI,KAAK,QAAA,CAAS,IAAI,KAAK,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AACrD,UAAA,OAAA,CAAQ,IAAA,CAAKA,MAAAA,CAAM,MAAA,CAAO,4CAAkC,GAAG,KAAK,CAAA;AAAA,QACtE;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,CAAQ,WAAW,IAAI,CAAA;AAAA,EAC/B,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,0BAAqB,GAAG,KAAK,CAAA;AACrD,IAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,KAAA,EAAO;AACzC,MAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,IACvC;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;AAGA,IAAI,YAAY,GAAA,KAAQ,CAAA,OAAA,EAAU,QAAQ,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA,EAAI;AACnD,EAAA,IAAA,EAAK,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AACtB,IAAA,OAAA,CAAQ,KAAA,CAAMA,MAAAA,CAAM,GAAA,CAAI,qBAAgB,GAAG,KAAK,CAAA;AAChD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AACH","file":"index.js","sourcesContent":["/**\n * Output Formatter\n *\n * Provides formatted output for CLI commands in various formats.\n * Supports table, JSON, YAML, and minimal output formats.\n */\n\nimport {\n ImpactAnalysis,\n OutdatedReport,\n UpdateResult,\n WorkspaceStats,\n WorkspaceValidationReport,\n} from '@pcu/core';\nimport { SecurityReport } from '../commands/securityCommand.js';\n\nimport chalk from 'chalk';\nimport Table from 'cli-table3';\nimport YAML from 'yaml';\n\nexport type OutputFormat = 'table' | 'json' | 'yaml' | 'minimal';\n\n// Build ANSI escape regex without literal control characters\nconst ANSI_ESCAPE = String.fromCharCode(27);\nconst ansiRegex: RegExp = new RegExp(`${ANSI_ESCAPE}\\\\[[0-9;]*m`, 'g');\n\nexport class OutputFormatter {\n constructor(\n private readonly format: OutputFormat = 'table',\n private readonly useColor: boolean = true\n ) {}\n\n /**\n * Format outdated dependencies report\n */\n formatOutdatedReport(report: OutdatedReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2);\n case 'yaml':\n return YAML.stringify(report);\n case 'minimal':\n return this.formatOutdatedMinimal(report);\n case 'table':\n default:\n return this.formatOutdatedTable(report);\n }\n }\n\n /**\n * Format update result\n */\n formatUpdateResult(result: UpdateResult): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(result, null, 2);\n case 'yaml':\n return YAML.stringify(result);\n case 'minimal':\n return this.formatUpdateMinimal(result);\n case 'table':\n default:\n return this.formatUpdateTable(result);\n }\n }\n\n /**\n * Format impact analysis\n */\n formatImpactAnalysis(analysis: ImpactAnalysis): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(analysis, null, 2);\n case 'yaml':\n return YAML.stringify(analysis);\n case 'minimal':\n return this.formatImpactMinimal(analysis);\n case 'table':\n default:\n return this.formatImpactTable(analysis);\n }\n }\n\n /**\n * Format workspace validation report\n */\n formatValidationReport(report: WorkspaceValidationReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2);\n case 'yaml':\n return YAML.stringify(report);\n case 'minimal':\n return this.formatValidationMinimal(report);\n case 'table':\n default:\n return this.formatValidationTable(report);\n }\n }\n\n /**\n * Format workspace statistics\n */\n formatWorkspaceStats(stats: WorkspaceStats): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(stats, null, 2);\n case 'yaml':\n return YAML.stringify(stats);\n case 'minimal':\n return this.formatStatsMinimal(stats);\n case 'table':\n default:\n return this.formatStatsTable(stats);\n }\n }\n\n /**\n * Format security report\n */\n formatSecurityReport(report: SecurityReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2);\n case 'yaml':\n return YAML.stringify(report);\n case 'minimal':\n return this.formatSecurityMinimal(report);\n case 'table':\n default:\n return this.formatSecurityTable(report);\n }\n }\n\n /**\n * Format simple message with optional styling\n */\n formatMessage(message: string, type: 'success' | 'error' | 'warning' | 'info' = 'info'): string {\n if (!this.useColor) {\n return message;\n }\n\n switch (type) {\n case 'success':\n return chalk.green(message);\n case 'error':\n return chalk.red(message);\n case 'warning':\n return chalk.yellow(message);\n case 'info':\n default:\n return chalk.blue(message);\n }\n }\n\n /**\n * Format outdated dependencies as table\n */\n private formatOutdatedTable(report: OutdatedReport): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n📦 Workspace: ${report.workspace.name}`));\n lines.push(this.colorize(chalk.gray, `Path: ${report.workspace.path}`));\n\n if (!report.hasUpdates) {\n lines.push(this.colorize(chalk.green, '\\n✅ All catalog dependencies are up to date!'));\n return lines.join('\\n');\n }\n\n lines.push(\n this.colorize(chalk.yellow, `\\n🔄 Found ${report.totalOutdated} outdated dependencies\\n`)\n );\n\n for (const catalogInfo of report.catalogs) {\n if (catalogInfo.outdatedCount === 0) continue;\n\n lines.push(this.colorize(chalk.bold, `📋 Catalog: ${catalogInfo.catalogName}`));\n\n const table = new Table({\n head: this.colorizeHeaders(['Package', 'Current', 'Latest', 'Type', 'Packages']),\n style: { head: [], border: [] },\n colWidths: [25, 15, 15, 8, 20],\n });\n\n for (const dep of catalogInfo.outdatedDependencies) {\n const typeColor = this.getUpdateTypeColor(dep.updateType);\n const securityIcon = dep.isSecurityUpdate ? '🔒 ' : '';\n\n // Colorize version differences\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.currentVersion,\n dep.latestVersion,\n dep.updateType\n );\n\n table.push([\n `${securityIcon}${dep.packageName}`,\n currentColored,\n latestColored,\n this.colorize(typeColor, dep.updateType),\n `${dep.affectedPackages.length} package(s)`,\n ]);\n }\n\n lines.push(table.toString());\n lines.push('');\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format outdated dependencies minimally (npm-check-updates style)\n */\n private formatOutdatedMinimal(report: OutdatedReport): string {\n if (!report.hasUpdates) {\n return 'All dependencies up to date';\n }\n\n // Collect all dependencies first to calculate max package name width\n const allDeps: Array<{\n securityIcon: string;\n packageName: string;\n currentColored: string;\n latestColored: string;\n }> = [];\n\n for (const catalogInfo of report.catalogs) {\n for (const dep of catalogInfo.outdatedDependencies) {\n const securityIcon = dep.isSecurityUpdate ? '🔒 ' : '';\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.currentVersion,\n dep.latestVersion,\n dep.updateType\n );\n allDeps.push({\n securityIcon,\n packageName: dep.packageName,\n currentColored,\n latestColored,\n });\n }\n }\n\n // Calculate max widths for alignment\n const maxNameWidth = Math.max(\n ...allDeps.map((dep) => (dep.securityIcon + dep.packageName).length)\n );\n\n // Calculate max version widths (need to strip color codes for accurate width calculation)\n const stripAnsi = (str: string) => str.replace(ansiRegex, '');\n const maxCurrentWidth = Math.max(...allDeps.map((dep) => stripAnsi(dep.currentColored).length));\n\n // Format lines with proper alignment\n const lines: string[] = [];\n for (const dep of allDeps) {\n const nameWithIcon = dep.securityIcon + dep.packageName;\n const paddedName = nameWithIcon.padEnd(maxNameWidth);\n\n // For current version alignment, we need to pad the visible text, not the colored version\n const currentVisible = stripAnsi(dep.currentColored);\n const currentPadding = maxCurrentWidth - currentVisible.length;\n const paddedCurrent = dep.currentColored + ' '.repeat(currentPadding);\n\n lines.push(`${paddedName} ${paddedCurrent} → ${dep.latestColored}`);\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format update result as table\n */\n private formatUpdateTable(result: UpdateResult): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n📦 Workspace: ${result.workspace.name}`));\n\n if (result.success) {\n lines.push(this.colorize(chalk.green, '✅ Update completed successfully!'));\n } else {\n lines.push(this.colorize(chalk.red, '❌ Update completed with errors'));\n }\n\n lines.push('');\n\n // Updated dependencies\n if (result.updatedDependencies.length > 0) {\n lines.push(this.colorize(chalk.green, `🎉 Updated ${result.totalUpdated} dependencies:`));\n\n const table = new Table({\n head: this.colorizeHeaders(['Catalog', 'Package', 'From', 'To', 'Type']),\n style: { head: [], border: [] },\n colWidths: [15, 25, 15, 15, 8],\n });\n\n for (const dep of result.updatedDependencies) {\n const typeColor = this.getUpdateTypeColor(dep.updateType);\n\n // Colorize version differences\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.fromVersion,\n dep.toVersion,\n dep.updateType\n );\n\n table.push([\n dep.catalogName,\n dep.packageName,\n currentColored,\n latestColored,\n this.colorize(typeColor, dep.updateType),\n ]);\n }\n\n lines.push(table.toString());\n lines.push('');\n }\n\n // Skipped dependencies\n if (result.skippedDependencies.length > 0) {\n lines.push(this.colorize(chalk.yellow, `⚠️ Skipped ${result.totalSkipped} dependencies:`));\n\n for (const dep of result.skippedDependencies) {\n lines.push(` ${dep.catalogName}:${dep.packageName} - ${dep.reason}`);\n }\n lines.push('');\n }\n\n // Errors\n if (result.errors.length > 0) {\n lines.push(this.colorize(chalk.red, `❌ ${result.totalErrors} errors occurred:`));\n\n for (const error of result.errors) {\n const prefix = error.fatal ? '💥' : '⚠️ ';\n lines.push(` ${prefix} ${error.catalogName}:${error.packageName} - ${error.error}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format update result minimally (npm-check-updates style)\n */\n private formatUpdateMinimal(result: UpdateResult): string {\n const lines: string[] = [];\n\n if (result.success) {\n lines.push(`Updated ${result.totalUpdated} dependencies`);\n } else {\n lines.push(`Update failed with ${result.totalErrors} errors`);\n }\n\n if (result.updatedDependencies.length > 0) {\n // Collect version info for alignment calculation\n const depsWithVersions = result.updatedDependencies.map((dep) => {\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.fromVersion,\n dep.toVersion,\n dep.updateType\n );\n return {\n packageName: dep.packageName,\n currentColored,\n latestColored,\n };\n });\n\n // Calculate max widths for alignment\n const maxNameWidth = Math.max(...depsWithVersions.map((dep) => dep.packageName.length));\n\n const stripAnsi = (str: string) => str.replace(ansiRegex, '');\n const maxCurrentWidth = Math.max(\n ...depsWithVersions.map((dep) => stripAnsi(dep.currentColored).length)\n );\n\n for (const dep of depsWithVersions) {\n const paddedName = dep.packageName.padEnd(maxNameWidth);\n\n // Pad current version for alignment\n const currentVisible = stripAnsi(dep.currentColored);\n const currentPadding = maxCurrentWidth - currentVisible.length;\n const paddedCurrent = dep.currentColored + ' '.repeat(currentPadding);\n\n lines.push(`${paddedName} ${paddedCurrent} → ${dep.latestColored}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format impact analysis as table\n */\n private formatImpactTable(analysis: ImpactAnalysis): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n🔍 Impact Analysis: ${analysis.packageName}`));\n lines.push(this.colorize(chalk.gray, `Catalog: ${analysis.catalogName}`));\n lines.push(\n this.colorize(chalk.gray, `Update: ${analysis.currentVersion} → ${analysis.proposedVersion}`)\n );\n lines.push(this.colorize(chalk.gray, `Type: ${analysis.updateType}`));\n\n // Risk level\n const riskColor = this.getRiskColor(analysis.riskLevel);\n lines.push(this.colorize(riskColor, `Risk Level: ${analysis.riskLevel.toUpperCase()}`));\n lines.push('');\n\n // Affected packages\n if (analysis.affectedPackages.length > 0) {\n lines.push(this.colorize(chalk.bold, '📦 Affected Packages:'));\n\n const table = new Table({\n head: this.colorizeHeaders(['Package', 'Path', 'Dependency Type', 'Risk']),\n style: { head: [], border: [] },\n colWidths: [20, 30, 15, 10],\n });\n\n for (const pkg of analysis.affectedPackages) {\n const riskColor = this.getRiskColor(pkg.compatibilityRisk);\n table.push([\n pkg.packageName,\n pkg.packagePath,\n pkg.dependencyType,\n this.colorize(riskColor, pkg.compatibilityRisk),\n ]);\n }\n\n lines.push(table.toString());\n lines.push('');\n }\n\n // Security impact\n if (analysis.securityImpact.hasVulnerabilities) {\n lines.push(this.colorize(chalk.bold, '🔒 Security Impact:'));\n\n if (analysis.securityImpact.fixedVulnerabilities > 0) {\n lines.push(\n this.colorize(\n chalk.green,\n ` ✅ Fixes ${analysis.securityImpact.fixedVulnerabilities} vulnerabilities`\n )\n );\n }\n\n if (analysis.securityImpact.newVulnerabilities > 0) {\n lines.push(\n this.colorize(\n chalk.red,\n ` ⚠️ Introduces ${analysis.securityImpact.newVulnerabilities} vulnerabilities`\n )\n );\n }\n\n lines.push('');\n }\n\n // Recommendations\n if (analysis.recommendations.length > 0) {\n lines.push(this.colorize(chalk.bold, '💡 Recommendations:'));\n for (const rec of analysis.recommendations) {\n lines.push(` ${rec}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format impact analysis minimally\n */\n private formatImpactMinimal(analysis: ImpactAnalysis): string {\n return [\n `${analysis.packageName}: ${analysis.currentVersion} → ${analysis.proposedVersion}`,\n `Risk: ${analysis.riskLevel}`,\n `Affected: ${analysis.affectedPackages.length} packages`,\n ].join('\\n');\n }\n\n /**\n * Format validation report as table\n */\n private formatValidationTable(report: WorkspaceValidationReport): string {\n const lines: string[] = [];\n\n // Header\n const statusIcon = report.isValid ? '✅' : '❌';\n const statusColor = report.isValid ? chalk.green : chalk.red;\n\n lines.push(this.colorize(chalk.bold, `\\n${statusIcon} Workspace Validation`));\n lines.push(this.colorize(statusColor, `Status: ${report.isValid ? 'VALID' : 'INVALID'}`));\n lines.push('');\n\n // Workspace info\n lines.push(this.colorize(chalk.bold, '📦 Workspace Information:'));\n lines.push(` Path: ${report.workspace.path}`);\n lines.push(` Name: ${report.workspace.name}`);\n lines.push(` Packages: ${report.workspace.packageCount}`);\n lines.push(` Catalogs: ${report.workspace.catalogCount}`);\n lines.push('');\n\n // Errors\n if (report.errors.length > 0) {\n lines.push(this.colorize(chalk.red, '❌ Errors:'));\n for (const error of report.errors) {\n lines.push(` • ${error}`);\n }\n lines.push('');\n }\n\n // Warnings\n if (report.warnings.length > 0) {\n lines.push(this.colorize(chalk.yellow, '⚠️ Warnings:'));\n for (const warning of report.warnings) {\n lines.push(` • ${warning}`);\n }\n lines.push('');\n }\n\n // Recommendations\n if (report.recommendations.length > 0) {\n lines.push(this.colorize(chalk.blue, '💡 Recommendations:'));\n for (const rec of report.recommendations) {\n lines.push(` • ${rec}`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format validation report minimally\n */\n private formatValidationMinimal(report: WorkspaceValidationReport): string {\n const status = report.isValid ? 'VALID' : 'INVALID';\n const errors = report.errors.length;\n const warnings = report.warnings.length;\n\n return `${status} (${errors} errors, ${warnings} warnings)`;\n }\n\n /**\n * Format workspace statistics as table\n */\n private formatStatsTable(stats: WorkspaceStats): string {\n const lines: string[] = [];\n\n lines.push(this.colorize(chalk.bold, `\\n📊 Workspace Statistics`));\n lines.push(this.colorize(chalk.gray, `Workspace: ${stats.workspace.name}`));\n lines.push('');\n\n const table = new Table({\n head: this.colorizeHeaders(['Metric', 'Count']),\n style: { head: [], border: [] },\n colWidths: [30, 10],\n });\n\n table.push(['Total Packages', stats.packages.total.toString()]);\n table.push(['Packages with Catalog Refs', stats.packages.withCatalogReferences.toString()]);\n table.push(['Total Catalogs', stats.catalogs.total.toString()]);\n table.push(['Catalog Entries', stats.catalogs.totalEntries.toString()]);\n table.push(['Total Dependencies', stats.dependencies.total.toString()]);\n table.push(['Catalog References', stats.dependencies.catalogReferences.toString()]);\n table.push(['Dependencies', stats.dependencies.byType.dependencies.toString()]);\n table.push(['Dev Dependencies', stats.dependencies.byType.devDependencies.toString()]);\n table.push(['Peer Dependencies', stats.dependencies.byType.peerDependencies.toString()]);\n table.push([\n 'Optional Dependencies',\n stats.dependencies.byType.optionalDependencies.toString(),\n ]);\n\n lines.push(table.toString());\n\n return lines.join('\\n');\n }\n\n /**\n * Format workspace statistics minimally\n */\n private formatStatsMinimal(stats: WorkspaceStats): string {\n return [\n `Packages: ${stats.packages.total}`,\n `Catalogs: ${stats.catalogs.total}`,\n `Dependencies: ${stats.dependencies.total}`,\n ].join(', ');\n }\n\n /**\n * Format security report as table\n */\n private formatSecurityTable(report: SecurityReport): string {\n const lines: string[] = [];\n\n // Header\n lines.push(this.colorize(chalk.bold, '\\n🔒 Security Report'));\n lines.push(this.colorize(chalk.gray, `Workspace: ${report.metadata.workspacePath}`));\n lines.push(\n this.colorize(chalk.gray, `Scan Date: ${new Date(report.metadata.scanDate).toLocaleString()}`)\n );\n lines.push(this.colorize(chalk.gray, `Tools: ${report.metadata.scanTools.join(', ')}`));\n\n // Summary\n lines.push('');\n lines.push(this.colorize(chalk.bold, '📊 Summary:'));\n\n const summaryTable = new Table({\n head: this.colorizeHeaders(['Severity', 'Count']),\n style: { head: [], border: [] },\n colWidths: [15, 10],\n });\n\n summaryTable.push(['Critical', this.colorize(chalk.red, report.summary.critical.toString())]);\n summaryTable.push(['High', this.colorize(chalk.yellow, report.summary.high.toString())]);\n summaryTable.push(['Moderate', this.colorize(chalk.blue, report.summary.moderate.toString())]);\n summaryTable.push(['Low', this.colorize(chalk.green, report.summary.low.toString())]);\n summaryTable.push(['Info', this.colorize(chalk.gray, report.summary.info.toString())]);\n summaryTable.push([\n 'Total',\n this.colorize(chalk.bold, report.summary.totalVulnerabilities.toString()),\n ]);\n\n lines.push(summaryTable.toString());\n\n // Vulnerabilities\n if (report.vulnerabilities.length > 0) {\n lines.push('');\n lines.push(this.colorize(chalk.bold, '🐛 Vulnerabilities:'));\n\n const vulnTable = new Table({\n head: this.colorizeHeaders(['Package', 'Severity', 'Title', 'Fix Available']),\n style: { head: [], border: [] },\n colWidths: [20, 12, 40, 15],\n });\n\n for (const vuln of report.vulnerabilities) {\n const severityColor = this.getSeverityColor(vuln.severity);\n const fixStatus = vuln.fixAvailable\n ? typeof vuln.fixAvailable === 'string'\n ? vuln.fixAvailable\n : 'Yes'\n : 'No';\n\n vulnTable.push([\n vuln.package,\n this.colorize(severityColor, vuln.severity.toUpperCase()),\n vuln.title.length > 35 ? vuln.title.substring(0, 35) + '...' : vuln.title,\n fixStatus,\n ]);\n }\n\n lines.push(vulnTable.toString());\n }\n\n // Recommendations\n if (report.recommendations.length > 0) {\n lines.push('');\n lines.push(this.colorize(chalk.bold, '💡 Recommendations:'));\n\n for (const rec of report.recommendations) {\n lines.push(` ${rec.package}: ${rec.currentVersion} → ${rec.recommendedVersion}`);\n lines.push(` ${rec.reason} (${rec.impact})`);\n }\n }\n\n return lines.join('\\n');\n }\n\n /**\n * Format security report minimally\n */\n private formatSecurityMinimal(report: SecurityReport): string {\n const vulnerabilities = report.summary.totalVulnerabilities;\n if (vulnerabilities === 0) {\n return 'No vulnerabilities found';\n }\n\n return [\n `${vulnerabilities} vulnerabilities found:`,\n ` Critical: ${report.summary.critical}`,\n ` High: ${report.summary.high}`,\n ` Moderate: ${report.summary.moderate}`,\n ` Low: ${report.summary.low}`,\n ].join('\\n');\n }\n\n /**\n * Get color for severity level\n */\n private getSeverityColor(severity: string): typeof chalk {\n switch (severity.toLowerCase()) {\n case 'critical':\n return chalk.red;\n case 'high':\n return chalk.yellow;\n case 'moderate':\n return chalk.blue;\n case 'low':\n return chalk.green;\n default:\n return chalk.gray;\n }\n }\n\n /**\n * Apply color if color is enabled\n */\n private colorize(colorFn: typeof chalk, text: string): string {\n return this.useColor ? colorFn(text) : text;\n }\n\n /**\n * Colorize table headers\n */\n private colorizeHeaders(headers: string[]): string[] {\n return this.useColor ? headers.map((h) => chalk.bold.cyan(h)) : headers;\n }\n\n /**\n * Get color for update type\n */\n private getUpdateTypeColor(updateType: string): typeof chalk {\n switch (updateType) {\n case 'major':\n return chalk.red;\n case 'minor':\n return chalk.yellow;\n case 'patch':\n return chalk.green;\n default:\n return chalk.gray;\n }\n }\n\n /**\n * Get color for risk level\n */\n private getRiskColor(riskLevel: string): typeof chalk {\n switch (riskLevel) {\n case 'high':\n return chalk.red;\n case 'medium':\n return chalk.yellow;\n case 'low':\n return chalk.green;\n default:\n return chalk.gray;\n }\n }\n\n /**\n * Colorize version differences between current and latest\n */\n private colorizeVersionDiff(\n current: string,\n latest: string,\n updateType: string\n ): {\n currentColored: string;\n latestColored: string;\n } {\n if (!this.useColor) {\n return { currentColored: current, latestColored: latest };\n }\n\n // Parse version numbers to identify different parts\n const parseVersion = (version: string) => {\n // Remove leading ^ or ~ or other prefix characters\n const cleanVersion = version.replace(/^[\\^~>=<]+/, '');\n const parts = cleanVersion.split('.');\n return {\n major: parts[0] || '0',\n minor: parts[1] || '0',\n patch: parts[2] || '0',\n extra: parts.slice(3).join('.'),\n prefix: version.substring(0, version.length - cleanVersion.length),\n };\n };\n\n const currentParts = parseVersion(current);\n const latestParts = parseVersion(latest);\n\n // Determine color based on update type for highlighting differences\n const diffColor = this.getUpdateTypeColor(updateType);\n\n // Build colored version strings by comparing each part\n const colorCurrentPart = (part: string, latestPart: string, isChanged: boolean) => {\n if (isChanged && part !== latestPart) {\n return chalk.dim.white(part); // Dim white for old version part\n }\n return chalk.white(part); // Unchanged parts in white\n };\n\n const colorLatestPart = (part: string, currentPart: string, isChanged: boolean) => {\n if (isChanged && part !== currentPart) {\n return diffColor(part); // Highlight the new version part with update type color\n }\n return chalk.white(part); // Unchanged parts in white\n };\n\n // Check which parts are different\n const majorChanged = currentParts.major !== latestParts.major;\n const minorChanged = currentParts.minor !== latestParts.minor;\n const patchChanged = currentParts.patch !== latestParts.patch;\n const extraChanged = currentParts.extra !== latestParts.extra;\n\n // Build colored current version\n let currentColored = currentParts.prefix;\n currentColored += colorCurrentPart(currentParts.major, latestParts.major, majorChanged);\n currentColored += '.';\n currentColored += colorCurrentPart(currentParts.minor, latestParts.minor, minorChanged);\n currentColored += '.';\n currentColored += colorCurrentPart(currentParts.patch, latestParts.patch, patchChanged);\n if (currentParts.extra) {\n currentColored += '.' + colorCurrentPart(currentParts.extra, latestParts.extra, extraChanged);\n }\n\n // Build colored latest version\n let latestColored = latestParts.prefix;\n latestColored += colorLatestPart(latestParts.major, currentParts.major, majorChanged);\n latestColored += '.';\n latestColored += colorLatestPart(latestParts.minor, currentParts.minor, minorChanged);\n latestColored += '.';\n latestColored += colorLatestPart(latestParts.patch, currentParts.patch, patchChanged);\n if (latestParts.extra) {\n latestColored += '.' + colorLatestPart(latestParts.extra, currentParts.extra, extraChanged);\n }\n\n return { currentColored, latestColored };\n }\n}\n","/**\n * Configuration System\n *\n * Handles application configuration from multiple sources:\n * - CLI arguments\n * - Configuration files (.pcurc, pcu.config.js)\n * - Environment variables\n * - Default values\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { homedir } from 'os';\nimport { join, resolve } from 'path';\n\nexport interface PcuConfig {\n // Registry settings\n registry: {\n url: string;\n timeout: number;\n retries: number;\n cache: boolean;\n cacheTtl: number; // TTL in seconds\n };\n\n // Update behavior\n update: {\n target: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n includePrerelease: boolean;\n interactive: boolean;\n createBackup: boolean;\n force: boolean;\n };\n\n // Output formatting\n output: {\n format: 'table' | 'json' | 'yaml' | 'minimal';\n color: boolean;\n verbose: boolean;\n silent: boolean;\n };\n\n // Workspace settings\n workspace: {\n autoDetect: boolean;\n patterns: string[];\n excludePatterns: string[];\n };\n\n // Notification settings\n notification: {\n enabled: boolean;\n onSuccess: boolean;\n onError: boolean;\n methods: Array<'console' | 'desktop' | 'webhook'>;\n webhook?: {\n url: string;\n method: 'POST' | 'PUT';\n headers: Record<string, string>;\n };\n };\n\n // Logging\n logging: {\n level: 'error' | 'warn' | 'info' | 'debug';\n file?: string;\n maxSize: string; // e.g., '10MB'\n maxFiles: number;\n };\n}\n\nexport const DEFAULT_CONFIG: PcuConfig = {\n registry: {\n url: 'https://registry.npmjs.org',\n timeout: 30000,\n retries: 3,\n cache: true,\n cacheTtl: 3600, // 1 hour\n },\n\n update: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n createBackup: false,\n force: false,\n },\n\n output: {\n format: 'table',\n color: true,\n verbose: false,\n silent: false,\n },\n\n workspace: {\n autoDetect: true,\n patterns: ['packages/*', 'apps/*'],\n excludePatterns: ['**/node_modules/**', '**/dist/**', '**/build/**'],\n },\n\n notification: {\n enabled: false,\n onSuccess: true,\n onError: true,\n methods: ['console'],\n },\n\n logging: {\n level: 'info',\n maxSize: '10MB',\n maxFiles: 5,\n },\n};\n\nexport class ConfigManager {\n private config: PcuConfig;\n private configPath?: string;\n\n constructor() {\n this.config = { ...DEFAULT_CONFIG };\n this.loadConfig();\n }\n\n /**\n * Get the current configuration\n */\n getConfig(): Readonly<PcuConfig> {\n return this.config;\n }\n\n /**\n * Get a specific configuration value using dot notation\n */\n get<T = any>(path: string): T {\n return this.getNestedValue(this.config, path);\n }\n\n /**\n * Set a configuration value using dot notation\n */\n set(path: string, value: any): void {\n this.setNestedValue(this.config, path, value);\n }\n\n /**\n * Merge configuration from CLI options\n */\n mergeCliOptions(\n options: Partial<{\n registry: string;\n timeout: number;\n target: string;\n prerelease: boolean;\n interactive: boolean;\n dryRun: boolean;\n force: boolean;\n format: string;\n color: boolean;\n verbose: boolean;\n silent: boolean;\n workspace: string;\n include: string[];\n exclude: string[];\n }>\n ): void {\n if (options.registry) {\n this.config.registry.url = options.registry;\n }\n if (options.timeout) {\n this.config.registry.timeout = options.timeout;\n }\n if (options.target) {\n this.config.update.target = options.target as any;\n }\n if (options.prerelease !== undefined) {\n this.config.update.includePrerelease = options.prerelease;\n }\n if (options.interactive !== undefined) {\n this.config.update.interactive = options.interactive;\n }\n if (options.force !== undefined) {\n this.config.update.force = options.force;\n }\n if (options.format) {\n this.config.output.format = options.format as any;\n }\n if (options.color !== undefined) {\n this.config.output.color = options.color;\n }\n if (options.verbose !== undefined) {\n this.config.output.verbose = options.verbose;\n }\n if (options.silent !== undefined) {\n this.config.output.silent = options.silent;\n }\n if (options.include) {\n // Add to existing patterns\n this.config.workspace.patterns.push(...options.include);\n }\n if (options.exclude) {\n // Add to existing exclude patterns\n this.config.workspace.excludePatterns.push(...options.exclude);\n }\n }\n\n /**\n * Load configuration from files and environment\n */\n private loadConfig(): void {\n // Load from files (in order of priority)\n this.loadFromFile(this.findConfigFile());\n\n // Load from environment variables\n this.loadFromEnvironment();\n }\n\n /**\n * Find configuration file\n */\n private findConfigFile(): string | undefined {\n const configNames = ['.pcurc', '.pcurc.json', '.pcurc.js', 'pcu.config.js', 'pcu.config.json'];\n\n // Check current directory\n for (const name of configNames) {\n const filePath = resolve(process.cwd(), name);\n if (existsSync(filePath)) {\n return filePath;\n }\n }\n\n // Check home directory\n for (const name of configNames) {\n const filePath = join(homedir(), name);\n if (existsSync(filePath)) {\n return filePath;\n }\n }\n\n return undefined;\n }\n\n /**\n * Load configuration from file\n */\n private loadFromFile(filePath?: string): void {\n if (!filePath || !existsSync(filePath)) {\n return;\n }\n\n try {\n let fileConfig: Partial<PcuConfig>;\n\n if (filePath.endsWith('.js')) {\n // Dynamic import for ES modules\n delete require.cache[require.resolve(filePath)];\n fileConfig = require(filePath);\n\n // Handle default export\n if (fileConfig && typeof fileConfig === 'object' && 'default' in fileConfig) {\n fileConfig = (fileConfig as any).default;\n }\n } else {\n // JSON file\n const content = readFileSync(filePath, 'utf-8');\n fileConfig = JSON.parse(content);\n }\n\n // Deep merge with current config\n this.config = this.deepMerge(this.config, fileConfig);\n this.configPath = filePath;\n } catch (error) {\n console.warn(`Failed to load config from ${filePath}:`, error);\n }\n }\n\n /**\n * Load configuration from environment variables\n */\n private loadFromEnvironment(): void {\n const envConfig: Partial<PcuConfig> = {};\n\n // Registry settings\n if (process.env.PCU_REGISTRY_URL) {\n envConfig.registry = { ...this.config.registry, url: process.env.PCU_REGISTRY_URL };\n }\n if (process.env.PCU_REGISTRY_TIMEOUT) {\n envConfig.registry = {\n ...(envConfig.registry || this.config.registry),\n timeout: parseInt(process.env.PCU_REGISTRY_TIMEOUT, 10),\n };\n }\n\n // Update settings\n if (process.env.PCU_UPDATE_TARGET) {\n envConfig.update = {\n ...this.config.update,\n target: process.env.PCU_UPDATE_TARGET as any,\n };\n }\n if (process.env.PCU_UPDATE_PRERELEASE) {\n envConfig.update = {\n ...(envConfig.update || this.config.update),\n includePrerelease: process.env.PCU_UPDATE_PRERELEASE === 'true',\n };\n }\n\n // Output settings\n if (process.env.PCU_OUTPUT_FORMAT) {\n envConfig.output = {\n ...this.config.output,\n format: process.env.PCU_OUTPUT_FORMAT as any,\n };\n }\n if (process.env.PCU_OUTPUT_COLOR) {\n envConfig.output = {\n ...(envConfig.output || this.config.output),\n color: process.env.PCU_OUTPUT_COLOR !== 'false',\n };\n }\n\n // Logging settings\n if (process.env.PCU_LOG_LEVEL) {\n envConfig.logging = {\n ...this.config.logging,\n level: process.env.PCU_LOG_LEVEL as any,\n };\n }\n if (process.env.PCU_LOG_FILE) {\n envConfig.logging = {\n ...(envConfig.logging || this.config.logging),\n file: process.env.PCU_LOG_FILE,\n };\n }\n\n // Merge environment config\n this.config = this.deepMerge(this.config, envConfig);\n }\n\n /**\n * Get nested value using dot notation\n */\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj);\n }\n\n /**\n * Set nested value using dot notation (protected against prototype pollution)\n */\n private setNestedValue(obj: any, path: string, value: any): void {\n const keys = path.split('.');\n const lastKey = keys.pop()!;\n\n // Validate that keys don't include prototype pollution attempts\n if (keys.some((key) => key === '__proto__' || key === 'constructor' || key === 'prototype')) {\n throw new Error('Invalid key path: prototype pollution attempt detected');\n }\n\n if (lastKey === '__proto__' || lastKey === 'constructor' || lastKey === 'prototype') {\n throw new Error('Invalid key: prototype pollution attempt detected');\n }\n\n const target = keys.reduce((current, key) => {\n // Additional validation for each key in the path\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n throw new Error(`Invalid key in path: ${key}`);\n }\n\n if (!(key in current)) {\n // Use Object.defineProperty for safer property creation\n Object.defineProperty(current, key, {\n value: Object.create(null),\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n return current[key];\n }, obj);\n\n // Use Object.defineProperty for safer final assignment\n Object.defineProperty(target, lastKey, {\n value: value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n\n /**\n * Deep merge two objects (protected against prototype pollution)\n */\n private deepMerge(target: any, source: any): any {\n if (!source || typeof source !== 'object') {\n return target;\n }\n\n const result = { ...target };\n\n for (const key in source) {\n // Prevent prototype pollution\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n continue;\n }\n\n if (Object.hasOwn(source, key)) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n result[key] = this.deepMerge(target[key] || {}, source[key]);\n } else {\n result[key] = source[key];\n }\n }\n }\n\n return result;\n }\n\n /**\n * Get configuration file path\n */\n getConfigPath(): string | undefined {\n return this.configPath;\n }\n\n /**\n * Validate configuration\n */\n validate(): { isValid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // Validate registry URL\n try {\n new URL(this.config.registry.url);\n } catch {\n errors.push('Invalid registry URL');\n }\n\n // Validate timeout\n if (this.config.registry.timeout <= 0) {\n errors.push('Registry timeout must be positive');\n }\n\n // Validate cache TTL\n if (this.config.registry.cacheTtl <= 0) {\n errors.push('Cache TTL must be positive');\n }\n\n // Validate update target\n const validTargets = ['latest', 'greatest', 'minor', 'patch', 'newest'];\n if (!validTargets.includes(this.config.update.target)) {\n errors.push(`Invalid update target: ${this.config.update.target}`);\n }\n\n // Validate output format\n const validFormats = ['table', 'json', 'yaml', 'minimal'];\n if (!validFormats.includes(this.config.output.format)) {\n errors.push(`Invalid output format: ${this.config.output.format}`);\n }\n\n // Validate log level\n const validLevels = ['error', 'warn', 'info', 'debug'];\n if (!validLevels.includes(this.config.logging.level)) {\n errors.push(`Invalid log level: ${this.config.logging.level}`);\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * Export current configuration to file\n */\n async exportConfig(filePath: string, format: 'json' | 'js' = 'json'): Promise<void> {\n const { writeFile } = await import('fs/promises');\n\n let content: string;\n\n if (format === 'js') {\n content = `module.exports = ${JSON.stringify(this.config, null, 2)};`;\n } else {\n content = JSON.stringify(this.config, null, 2);\n }\n\n await writeFile(filePath, content, 'utf-8');\n }\n}\n\n// Global configuration instance\nlet configInstance: ConfigManager | undefined;\n\n/**\n * Get the global configuration instance\n */\nexport function getConfig(): ConfigManager {\n if (!configInstance) {\n configInstance = new ConfigManager();\n }\n return configInstance;\n}\n\n/**\n * Reset the global configuration instance (useful for testing)\n */\nexport function resetConfig(): void {\n configInstance = undefined;\n}\n","/**\n * PCU Configuration System\n *\n * Defines configuration types and provides default configuration.\n * User configuration can override any part of the default configuration.\n */\n\nexport interface PackageRule {\n patterns: string[];\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n autoUpdate?: boolean;\n requireConfirmation?: boolean;\n groupUpdate?: boolean;\n relatedPackages?: string[]; // 相关包会自动遵循相同的版本策略\n}\n\nexport interface SecurityConfig {\n autoFixVulnerabilities?: boolean;\n allowMajorForSecurity?: boolean;\n notifyOnSecurityUpdate?: boolean;\n}\n\nexport interface DefaultsConfig {\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n includePrerelease?: boolean;\n interactive?: boolean;\n dryRun?: boolean;\n createBackup?: boolean;\n format?: 'table' | 'json' | 'yaml' | 'minimal';\n}\n\nexport interface AdvancedConfig {\n concurrency?: number;\n timeout?: number;\n retries?: number;\n cacheValidityMinutes?: number;\n checkForUpdates?: boolean;\n}\n\nexport interface MonorepoConfig {\n syncVersions?: string[];\n catalogPriority?: string[];\n}\n\nexport interface PackageFilterConfig {\n exclude?: string[];\n include?: string[];\n defaults?: DefaultsConfig;\n packageRules?: PackageRule[];\n security?: SecurityConfig;\n advanced?: AdvancedConfig;\n monorepo?: MonorepoConfig;\n}\n\n/**\n * Default built-in configuration\n */\nexport const DEFAULT_PACKAGE_FILTER_CONFIG: Required<PackageFilterConfig> = {\n exclude: [],\n include: [],\n defaults: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n dryRun: false,\n createBackup: false,\n format: 'table',\n },\n packageRules: [\n // React ecosystem - keep types in sync with main packages\n {\n patterns: ['react', 'react-dom'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: true,\n relatedPackages: ['@types/react', '@types/react-dom'],\n },\n // Vue ecosystem\n {\n patterns: ['vue'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n relatedPackages: ['@vue/compiler-sfc', '@vue/runtime-core'],\n },\n // Node.js types - be conservative\n {\n patterns: ['@types/node'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n },\n // Other type definitions - can update more freely\n {\n patterns: ['@types/*'],\n target: 'latest',\n autoUpdate: true,\n requireConfirmation: false,\n groupUpdate: false,\n },\n // Dev tools - minor updates are usually safe\n {\n patterns: ['eslint*', 'prettier', '@typescript-eslint/*', 'vitest', 'jest'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: false,\n groupUpdate: true,\n },\n // Build tools - be more conservative\n {\n patterns: ['typescript', 'webpack*', 'vite*', 'rollup*'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n },\n ],\n security: {\n autoFixVulnerabilities: true,\n allowMajorForSecurity: true,\n notifyOnSecurityUpdate: false,\n },\n advanced: {\n concurrency: 5,\n timeout: 30000,\n retries: 3,\n cacheValidityMinutes: 60,\n checkForUpdates: true,\n },\n monorepo: {\n syncVersions: [],\n catalogPriority: ['default'],\n },\n};\n\n/**\n * Configuration file names to look for\n */\nexport const CONFIG_FILE_NAMES = ['.pcurc.json', '.pcurc.js', 'pcu.config.json', 'pcu.config.js'];\n","/**\n * Configuration Loader\n *\n * Loads and merges user configuration with default configuration.\n * Supports multiple configuration file formats and locations.\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport {\n CONFIG_FILE_NAMES,\n DEFAULT_PACKAGE_FILTER_CONFIG,\n PackageFilterConfig,\n} from './packageFilterConfig.js';\n\nexport class ConfigLoader {\n private static cache = new Map<string, PackageFilterConfig>();\n\n /**\n * Load configuration from the specified directory\n */\n static loadConfig(workspacePath: string = process.cwd()): PackageFilterConfig {\n const cacheKey = workspacePath;\n if (this.cache.has(cacheKey)) {\n return this.cache.get(cacheKey)!;\n }\n\n const userConfig = this.findAndLoadUserConfig(workspacePath);\n const mergedConfig = this.mergeConfigs(DEFAULT_PACKAGE_FILTER_CONFIG, userConfig || {});\n\n this.cache.set(cacheKey, mergedConfig);\n return mergedConfig;\n }\n\n /**\n * Clear configuration cache\n */\n static clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Find and load user configuration file\n */\n private static findAndLoadUserConfig(workspacePath: string): PackageFilterConfig | null {\n for (const fileName of CONFIG_FILE_NAMES) {\n const configPath = join(workspacePath, fileName);\n if (existsSync(configPath)) {\n try {\n return this.loadConfigFile(configPath);\n } catch (error) {\n console.warn(`Warning: Failed to load config file ${configPath}:`, error);\n continue;\n }\n }\n }\n return null;\n }\n\n /**\n * Load configuration from a specific file\n */\n private static loadConfigFile(configPath: string): PackageFilterConfig {\n const content = readFileSync(configPath, 'utf-8');\n\n if (configPath.endsWith('.json')) {\n return JSON.parse(content) as PackageFilterConfig;\n }\n\n if (configPath.endsWith('.js')) {\n // For JavaScript config files, we would need dynamic import\n // For now, let's focus on JSON support\n throw new Error('JavaScript config files are not yet supported');\n }\n\n throw new Error(`Unsupported config file format: ${configPath}`);\n }\n\n /**\n * Deep merge two configuration objects\n */\n private static mergeConfigs(\n defaultConfig: Required<PackageFilterConfig>,\n userConfig: PackageFilterConfig\n ): PackageFilterConfig {\n const merged: PackageFilterConfig = JSON.parse(JSON.stringify(defaultConfig));\n\n // Merge simple arrays and objects\n if (userConfig.exclude) {\n merged.exclude = [...(merged.exclude || []), ...userConfig.exclude];\n }\n\n if (userConfig.include) {\n merged.include = [...(merged.include || []), ...userConfig.include];\n }\n\n if (userConfig.defaults) {\n merged.defaults = { ...merged.defaults, ...userConfig.defaults };\n }\n\n if (userConfig.security) {\n merged.security = { ...merged.security, ...userConfig.security };\n }\n\n if (userConfig.advanced) {\n merged.advanced = { ...merged.advanced, ...userConfig.advanced };\n }\n\n if (userConfig.monorepo) {\n merged.monorepo = { ...merged.monorepo, ...userConfig.monorepo };\n\n // For arrays in monorepo config, replace rather than merge\n if (userConfig.monorepo.syncVersions) {\n merged.monorepo!.syncVersions = userConfig.monorepo.syncVersions;\n }\n if (userConfig.monorepo.catalogPriority) {\n merged.monorepo!.catalogPriority = userConfig.monorepo.catalogPriority;\n }\n }\n\n // Package rules need special handling - user rules override default rules with same patterns\n if (userConfig.packageRules) {\n const defaultRules = merged.packageRules || [];\n const userRules = userConfig.packageRules;\n\n // Start with default rules, but remove any that would be overridden by user rules\n const filteredDefaultRules = defaultRules.filter(\n (defaultRule) =>\n !userRules.some((userRule) =>\n // Check if any user rule pattern overlaps with this default rule\n userRule.patterns.some((userPattern) =>\n defaultRule.patterns.some(\n (defaultPattern) =>\n userPattern === defaultPattern ||\n (userPattern.includes('*') &&\n this.patternsOverlap(userPattern, defaultPattern)) ||\n (defaultPattern.includes('*') &&\n this.patternsOverlap(defaultPattern, userPattern))\n )\n )\n )\n );\n\n // Combine filtered default rules with user rules (user rules take priority)\n merged.packageRules = [...filteredDefaultRules, ...userRules];\n }\n\n return merged;\n }\n\n /**\n * Get effective configuration for a specific package\n */\n static getPackageConfig(\n packageName: string,\n config: PackageFilterConfig\n ): {\n shouldUpdate: boolean;\n target: string;\n requireConfirmation: boolean;\n autoUpdate: boolean;\n groupUpdate: boolean;\n } {\n // Check if package is explicitly excluded\n if (config.exclude?.some((pattern) => this.matchesPattern(packageName, pattern))) {\n return {\n shouldUpdate: false,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n };\n }\n\n // Check if package is explicitly included (if include list exists)\n if (config.include && config.include.length > 0) {\n const isIncluded = config.include.some((pattern) =>\n this.matchesPattern(packageName, pattern)\n );\n if (!isIncluded) {\n return {\n shouldUpdate: false,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n };\n }\n }\n\n // First check if package is in relatedPackages of any rule (higher priority)\n let matchingRule = config.packageRules?.find((rule) =>\n rule.relatedPackages?.some((relatedPattern) =>\n this.matchesPattern(packageName, relatedPattern)\n )\n );\n\n // If no relatedPackages match, find direct pattern match\n if (!matchingRule) {\n matchingRule = config.packageRules?.find((rule) =>\n rule.patterns.some((pattern) => this.matchesPattern(packageName, pattern))\n );\n }\n\n if (matchingRule) {\n return {\n shouldUpdate: true,\n target: matchingRule.target || config.defaults?.target || 'latest',\n requireConfirmation: matchingRule.requireConfirmation || false,\n autoUpdate: matchingRule.autoUpdate || false,\n groupUpdate: matchingRule.groupUpdate || false,\n };\n }\n\n // Use default configuration\n return {\n shouldUpdate: true,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n };\n }\n\n /**\n * Simple glob pattern matching\n */\n private static matchesPattern(packageName: string, pattern: string): boolean {\n const regexPattern = pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.');\n const regex = new RegExp(`^${regexPattern}$`, 'i');\n return regex.test(packageName);\n }\n\n /**\n * Check if two patterns overlap (one could match packages that the other matches)\n */\n private static patternsOverlap(pattern1: string, pattern2: string): boolean {\n // Simple implementation: check if either pattern would match the other as a package name\n return (\n this.matchesPattern(pattern1.replace(/\\*/g, 'x'), pattern2) ||\n this.matchesPattern(pattern2.replace(/\\*/g, 'x'), pattern1)\n );\n }\n}\n","/**\n * Error Tracker\n *\n * Tracks skipped packages and error statistics for summary reporting.\n */\n\nexport interface SkippedPackage {\n name: string;\n reason: 'not-found' | 'network' | 'empty-version' | 'other';\n originalError?: string;\n}\n\nexport class ErrorTracker {\n private static skippedPackages: SkippedPackage[] = [];\n private static errorCounts = {\n notFound: 0,\n network: 0,\n emptyVersion: 0,\n security: 0,\n other: 0,\n };\n\n /**\n * Track a skipped package\n */\n static trackSkippedPackage(packageName: string, error: Error): void {\n let reason: SkippedPackage['reason'] = 'other';\n\n if (error.message.includes('404') || error.message.includes('Not found')) {\n reason = 'not-found';\n this.errorCounts.notFound++;\n } else if (error.message.includes('Version string cannot be empty')) {\n reason = 'empty-version';\n this.errorCounts.emptyVersion++;\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n reason = 'network';\n this.errorCounts.network++;\n } else {\n this.errorCounts.other++;\n }\n\n this.skippedPackages.push({\n name: packageName,\n reason,\n originalError: error.message,\n });\n }\n\n /**\n * Track a security check failure\n */\n static trackSecurityFailure(): void {\n this.errorCounts.security++;\n }\n\n /**\n * Get skipped packages by reason\n */\n static getSkippedPackages(): {\n notFound: string[];\n network: string[];\n emptyVersion: string[];\n other: string[];\n } {\n const grouped = {\n notFound: this.skippedPackages.filter((p) => p.reason === 'not-found').map((p) => p.name),\n network: this.skippedPackages.filter((p) => p.reason === 'network').map((p) => p.name),\n emptyVersion: this.skippedPackages\n .filter((p) => p.reason === 'empty-version')\n .map((p) => p.name),\n other: this.skippedPackages.filter((p) => p.reason === 'other').map((p) => p.name),\n };\n\n return grouped;\n }\n\n /**\n * Get error statistics\n */\n static getErrorStats(): typeof ErrorTracker.errorCounts {\n return { ...this.errorCounts };\n }\n\n /**\n * Get total skipped count\n */\n static getTotalSkipped(): number {\n return this.skippedPackages.length;\n }\n\n /**\n * Reset all tracking data\n */\n static reset(): void {\n this.skippedPackages = [];\n this.errorCounts = {\n notFound: 0,\n network: 0,\n emptyVersion: 0,\n security: 0,\n other: 0,\n };\n }\n\n /**\n * Get all skipped package details\n */\n static getAllSkippedPackages(): SkippedPackage[] {\n return [...this.skippedPackages];\n }\n}\n","/**\n * Logging System\n *\n * Provides structured logging with multiple output targets and log levels.\n * Integrates with the configuration system for runtime control.\n */\n\nimport { existsSync, mkdirSync, statSync, writeFileSync } from 'fs';\nimport { dirname, resolve } from 'path';\nimport { getConfig } from '../config/config.js';\n\nexport type LogLevel = 'error' | 'warn' | 'info' | 'debug';\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n message: string;\n context?: string;\n data?: any;\n error?: Error;\n}\n\nexport interface LoggerOptions {\n context?: string | undefined;\n level?: LogLevel | undefined;\n file?: string | undefined;\n console?: boolean | undefined;\n json?: boolean | undefined;\n}\n\nexport class Logger {\n private context: string;\n private options: {\n context: string;\n level: LogLevel;\n file: string | undefined;\n console: boolean;\n json: boolean;\n };\n private static instances = new Map<string, Logger>();\n\n private constructor(context: string, options: Partial<LoggerOptions> = {}) {\n this.context = context;\n\n const config = getConfig().getConfig();\n\n this.options = {\n context: options.context || context,\n level: options.level || config.logging.level,\n file: options.file || config.logging.file,\n console: options.console !== undefined ? options.console : !config.output.silent,\n json: options.json || false,\n } as any;\n }\n\n /**\n * Get or create logger instance for a specific context\n */\n static getLogger(context: string, options?: Partial<LoggerOptions>): Logger {\n const key = `${context}:${JSON.stringify(options || {})}`;\n\n if (!Logger.instances.has(key)) {\n Logger.instances.set(key, new Logger(context, options));\n }\n\n return Logger.instances.get(key)!;\n }\n\n /**\n * Create a child logger with additional context\n */\n child(childContext: string, options?: Partial<LoggerOptions>): Logger {\n const fullContext = `${this.context}:${childContext}`;\n return Logger.getLogger(fullContext, { ...this.options, ...options });\n }\n\n /**\n * Log error message\n */\n error(message: string, error?: Error, data?: any): void {\n this.log('error', message, { ...(error && { error }), ...(data && { data }) });\n }\n\n /**\n * Log warning message\n */\n warn(message: string, data?: any): void {\n this.log('warn', message, { data });\n }\n\n /**\n * Log info message\n */\n info(message: string, data?: any): void {\n this.log('info', message, { data });\n }\n\n /**\n * Log debug message\n */\n debug(message: string, data?: any): void {\n this.log('debug', message, { data });\n }\n\n /**\n * Log with specific level\n */\n log(level: LogLevel, message: string, extra: { error?: Error; data?: any } = {}): void {\n if (!this.shouldLog(level)) {\n return;\n }\n\n const entry: LogEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n context: this.context,\n ...extra,\n };\n\n this.writeLog(entry);\n }\n\n /**\n * Check if should log at given level\n */\n private shouldLog(level: LogLevel): boolean {\n const levels: Record<LogLevel, number> = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n };\n\n return levels[level] <= levels[this.options.level];\n }\n\n /**\n * Write log entry to configured outputs\n */\n private writeLog(entry: LogEntry): void {\n // Write to console\n if (this.options.console) {\n this.writeToConsole(entry);\n }\n\n // Write to file\n if (this.options.file) {\n this.writeToFile(entry);\n }\n }\n\n /**\n * Write to console with colors\n */\n private writeToConsole(entry: LogEntry): void {\n const config = getConfig().getConfig();\n const useColors = config.output.color;\n\n let colorFn: (text: string) => string;\n let consoleMethod: 'error' | 'warn' | 'info' | 'log';\n\n if (useColors) {\n // Simple color functions (avoiding external dependencies)\n const colors = {\n error: (text: string) => `\\u001b[31m${text}\\u001b[0m`, // Red\n warn: (text: string) => `\\u001b[33m${text}\\u001b[0m`, // Yellow\n info: (text: string) => `\\u001b[36m${text}\\u001b[0m`, // Cyan\n debug: (text: string) => `\\u001b[90m${text}\\u001b[0m`, // Gray\n };\n colorFn = colors[entry.level];\n consoleMethod = entry.level === 'debug' ? 'log' : entry.level;\n } else {\n colorFn = (text: string) => text;\n consoleMethod = entry.level === 'debug' ? 'log' : entry.level;\n }\n\n const timestamp = new Date(entry.timestamp).toLocaleTimeString();\n const levelStr = entry.level.toUpperCase().padEnd(5);\n const contextStr = entry.context ? `[${entry.context}]` : '';\n\n let logMessage = `${timestamp} ${colorFn(levelStr)} ${contextStr} ${entry.message}`;\n\n // Add data if present and in debug mode\n if (entry.data && entry.level === 'debug') {\n logMessage += `\\n${JSON.stringify(entry.data, null, 2)}`;\n }\n\n // Add error stack if present\n if (entry.error && entry.error.stack) {\n logMessage += `\\n${entry.error.stack}`;\n }\n\n console[consoleMethod](logMessage);\n }\n\n /**\n * Write to file\n */\n private writeToFile(entry: LogEntry): void {\n if (!this.options.file) return;\n\n try {\n const filePath = resolve(this.options.file);\n\n // Ensure directory exists\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n // Check file size and rotate if necessary\n this.rotateLogFile(filePath);\n\n // Format log entry\n let logLine: string;\n\n if (this.options.json) {\n logLine = JSON.stringify(entry) + '\\n';\n } else {\n const timestamp = entry.timestamp;\n const level = entry.level.toUpperCase().padEnd(5);\n const context = entry.context ? `[${entry.context}]` : '';\n\n logLine = `${timestamp} ${level} ${context} ${entry.message}`;\n\n if (entry.data) {\n logLine += ` | Data: ${JSON.stringify(entry.data)}`;\n }\n\n if (entry.error) {\n logLine += ` | Error: ${entry.error.message}`;\n if (entry.error.stack) {\n logLine += `\\n${entry.error.stack}`;\n }\n }\n\n logLine += '\\n';\n }\n\n // Append to file\n writeFileSync(filePath, logLine, { flag: 'a', encoding: 'utf-8' });\n } catch (error) {\n // Fallback to console if file writing fails\n console.error('Failed to write to log file:', error);\n this.writeToConsole(entry);\n }\n }\n\n /**\n * Rotate log file if it exceeds size limit\n */\n private rotateLogFile(filePath: string): void {\n if (!existsSync(filePath)) return;\n\n const config = getConfig().getConfig();\n const maxSize = this.parseSize(config.logging.maxSize);\n const maxFiles = config.logging.maxFiles;\n\n try {\n const stats = statSync(filePath);\n\n if (stats.size < maxSize) {\n return;\n }\n\n // Rotate files\n for (let i = maxFiles - 1; i > 0; i--) {\n const oldFile = `${filePath}.${i}`;\n const newFile = `${filePath}.${i + 1}`;\n\n if (existsSync(oldFile)) {\n if (i === maxFiles - 1) {\n // Delete oldest file\n require('fs').unlinkSync(oldFile);\n } else {\n // Rename file\n require('fs').renameSync(oldFile, newFile);\n }\n }\n }\n\n // Move current file to .1\n require('fs').renameSync(filePath, `${filePath}.1`);\n } catch (error) {\n console.warn('Failed to rotate log file:', error);\n }\n }\n\n /**\n * Parse size string (e.g., '10MB') to bytes\n */\n private parseSize(sizeStr: string): number {\n const units: Record<string, number> = {\n B: 1,\n KB: 1024,\n MB: 1024 * 1024,\n GB: 1024 * 1024 * 1024,\n };\n\n const match = sizeStr.match(/^(\\d+(?:\\.\\d+)?)\\s*([A-Z]+)$/i);\n if (!match) {\n return 10 * 1024 * 1024; // Default to 10MB\n }\n\n const [, size, unit] = match;\n const multiplier = units[unit?.toUpperCase() || ''] || 1;\n\n return Math.floor(parseFloat(size || '0') * multiplier);\n }\n\n /**\n * Set log level for this logger\n */\n setLevel(level: LogLevel): void {\n this.options.level = level;\n }\n\n /**\n * Get current log level\n */\n getLevel(): LogLevel {\n return this.options.level;\n }\n\n /**\n * Enable/disable console output\n */\n setConsole(enabled: boolean): void {\n this.options.console = enabled;\n }\n\n /**\n * Set log file path\n */\n setFile(filePath: string | undefined): void {\n this.options.file = filePath;\n }\n\n /**\n * Create a timer logger for performance measurement\n */\n timer(label: string): () => void {\n const start = Date.now();\n this.debug(`Timer started: ${label}`);\n\n return () => {\n const duration = Date.now() - start;\n this.debug(`Timer finished: ${label} (${duration}ms)`);\n };\n }\n\n /**\n * Clear all logger instances (useful for testing)\n */\n static clearInstances(): void {\n Logger.instances.clear();\n }\n}\n\n// Default logger instance\nexport const logger = Logger.getLogger('pcu');\n\n// Convenience functions\nexport const createLogger = (context: string, options?: Partial<LoggerOptions>) =>\n Logger.getLogger(context, options);\n","/**\n * User-Friendly Error Handler\n *\n * Provides user-friendly error messages instead of exposing technical details.\n * Categorizes errors and provides helpful suggestions where possible.\n */\n\nimport chalk from 'chalk';\nimport { Logger } from '../logger/logger.js';\nimport { ErrorTracker } from './errorTracker.js';\n\nexport interface ErrorContext {\n packageName?: string;\n operation?: string;\n details?: string;\n}\n\nexport interface PackageSuggestion {\n original: string;\n suggestions: string[];\n reason: string;\n}\n\nexport class UserFriendlyErrorHandler {\n private static logger = Logger.getLogger('ErrorHandler');\n\n // Common package name corrections\n private static packageSuggestions: Map<string, string[]> = new Map([\n // Framework packages\n ['sveltekit', ['@sveltejs/kit']],\n ['vue-router', ['vue-router']],\n ['vue-cli', ['@vue/cli']],\n ['angular-cli', ['@angular/cli']],\n ['angular-core', ['@angular/core']],\n ['angular-universal', ['@nguniversal/express-engine', '@angular/universal']],\n ['react-router', ['react-router-dom']],\n ['react-dom', ['react-dom']],\n ['nextjs', ['next']],\n ['nuxtjs', ['nuxt']],\n\n // UI Libraries\n ['material-ui', ['@mui/material', '@material-ui/core']],\n ['mui', ['@mui/material']],\n ['antd', ['antd']],\n ['ant-design', ['antd']],\n ['prime-ng', ['primeng']],\n ['primeng', ['primeng']],\n ['ng-zorro', ['ng-zorro-antd']],\n ['bootstrap-vue', ['bootstrap-vue']],\n ['vuetify', ['vuetify']],\n ['quasar', ['quasar']],\n ['onsen-ui', ['onsenui']],\n ['ionic', ['@ionic/angular', '@ionic/react', '@ionic/vue']],\n\n // CSS Frameworks\n ['tailwindcss', ['tailwindcss']],\n ['tailwind', ['tailwindcss']],\n ['bulma', ['bulma']],\n ['water-css', ['water.css']],\n ['holiday-css', ['@holiday-css/main']],\n ['wing-css', ['@wing-css/wing']],\n ['picnic-css', ['picnicss']],\n\n // Build Tools & Bundlers\n ['webpack', ['webpack']],\n ['webpack-cli', ['webpack-cli']],\n ['rollup', ['rollup']],\n ['vite', ['vite']],\n ['parcel', ['parcel']],\n ['esbuild', ['esbuild']],\n ['swc', ['@swc/core']],\n\n // Testing\n ['jest', ['jest']],\n ['vitest', ['vitest']],\n ['mocha', ['mocha']],\n ['chai', ['chai']],\n ['cypress', ['cypress']],\n ['playwright', ['@playwright/test']],\n ['puppeteer', ['puppeteer']],\n ['selenium', ['selenium-webdriver']],\n ['webdriver', ['selenium-webdriver']],\n ['lambdatest', ['@lambdatest/selenium-webdriver']],\n ['applitools', ['@applitools/eyes-selenium']],\n ['experitest', ['@experitest/seetest-client']],\n ['kobiton', ['@kobiton/api']],\n ['crossbrowsertesting', ['@crossbrowsertesting/selenium']],\n\n // Cloud Services\n ['aws-sdk', ['@aws-sdk/client-s3', 'aws-sdk']],\n ['aws-device-farm', ['@aws-sdk/client-device-farm']],\n ['firebase', ['firebase']],\n ['firebase-test-lab', ['@google-cloud/testing']],\n ['azure', ['@azure/storage-blob', '@azure/cosmos']],\n ['azure-devtest-labs', ['@azure/arm-devtestlabs']],\n ['gcp', ['@google-cloud/storage']],\n\n // Databases & ORMs\n ['mongoose', ['mongoose']],\n ['sequelize', ['sequelize']],\n ['typeorm', ['typeorm']],\n ['prisma', ['@prisma/client']],\n ['knex', ['knex']],\n ['pg', ['pg']],\n ['mysql', ['mysql2']],\n ['sqlite', ['sqlite3']],\n ['redis', ['redis']],\n ['mongodb', ['mongodb']],\n\n // Utilities\n ['lodash', ['lodash']],\n ['loadash', ['lodash']],\n ['underscore', ['underscore']],\n ['ramda', ['ramda']],\n ['rxjs', ['rxjs']],\n ['axios', ['axios']],\n ['axois', ['axios']],\n ['fetch', ['node-fetch']],\n ['node-fetch', ['node-fetch']],\n ['request', ['axios', 'node-fetch']],\n ['superagent', ['superagent']],\n\n // Date/Time\n ['moment', ['moment']],\n ['momentjs', ['moment']],\n ['dayjs', ['dayjs']],\n ['date-fns', ['date-fns']],\n ['luxon', ['luxon']],\n\n // Linting & Formatting\n ['eslint', ['eslint']],\n ['prettier', ['prettier']],\n ['tslint', ['@typescript-eslint/eslint-plugin']],\n ['typescript-eslint', ['@typescript-eslint/eslint-plugin', '@typescript-eslint/parser']],\n\n // Type Definitions\n ['types-node', ['@types/node']],\n ['@types-node', ['@types/node']],\n ['types-react', ['@types/react']],\n ['types-express', ['@types/express']],\n\n // Backend Frameworks\n ['express', ['express']],\n ['expressjs', ['express']],\n ['fastify', ['fastify']],\n ['koa', ['koa']],\n ['nestjs', ['@nestjs/core']],\n ['nest', ['@nestjs/core']],\n ['hapi', ['@hapi/hapi']],\n\n // State Management\n ['redux', ['redux']],\n ['mobx', ['mobx']],\n ['vuex', ['vuex']],\n ['pinia', ['pinia']],\n ['zustand', ['zustand']],\n ['recoil', ['recoil']],\n\n // Styling\n ['styled-components', ['styled-components']],\n ['styled-component', ['styled-components']],\n ['emotion', ['@emotion/react']],\n ['sass', ['sass']],\n ['node-sass', ['sass']],\n ['less', ['less']],\n ['stylus', ['stylus']],\n\n // Admin/CMS\n ['forestadmin', ['forest-express', 'forest-express-sequelize']],\n ['strapi', ['@strapi/strapi']],\n ['keystone', ['@keystone-6/core']],\n ['ghost', ['ghost']],\n\n // Documentation\n ['storybook', ['@storybook/react', '@storybook/vue3']],\n ['docusaurus', ['@docusaurus/core']],\n ['gitbook', ['@gitbook/cli']],\n ['typedoc', ['typedoc']],\n\n // Desktop Apps\n ['electron', ['electron']],\n ['tauri', ['@tauri-apps/api']],\n ['nwjs', ['nw']],\n\n // Mobile Development\n ['react-native', ['react-native']],\n ['expo', ['expo']],\n ['cordova', ['cordova']],\n ['phonegap', ['phonegap']],\n\n // Common Misspellings\n ['jquery', ['jquery']],\n ['boostrap', ['bootstrap']],\n ['bootstrap', ['bootstrap']],\n ['fontawesome', ['@fortawesome/fontawesome-free']],\n ['font-awesome', ['@fortawesome/fontawesome-free']],\n\n // Internationalization\n ['react-i18n', ['react-i18next']],\n ['i18n', ['i18next']],\n ['i18next', ['i18next']],\n ['vue-i18n', ['vue-i18n']],\n ['react-intl', ['react-intl']],\n ['intl', ['intl']],\n\n // Data Visualization & Charts\n ['chart', ['chart.js']],\n ['chartjs', ['chart.js']],\n ['chart.js', ['chart.js']],\n ['d3', ['d3']],\n ['d3js', ['d3']],\n ['plotly', ['plotly.js']],\n ['echarts', ['echarts']],\n ['highcharts', ['highcharts']],\n ['recharts', ['recharts']],\n ['victory', ['victory']],\n ['nivo', ['@nivo/core']],\n ['observable', ['@observablehq/plot']],\n\n // Real-time Communication & WebRTC\n ['socket.io', ['socket.io']],\n ['socketio', ['socket.io']],\n ['websocket', ['ws']],\n ['ws', ['ws']],\n ['webrtc', ['simple-peer']],\n ['peer', ['peerjs']],\n ['peerjs', ['peerjs']],\n ['signalr', ['@microsoft/signalr']],\n\n // Blockchain & Web3\n ['web3', ['web3']],\n ['web3js', ['web3']],\n ['ethers', ['ethers']],\n ['ethersjs', ['ethers']],\n ['ethereum', ['web3', 'ethers']],\n ['metamask', ['@metamask/sdk']],\n ['wagmi', ['wagmi']],\n ['rainbow-kit', ['@rainbow-me/rainbowkit']],\n ['wallet-connect', ['@walletconnect/client']],\n\n // Machine Learning & AI\n ['tensorflow', ['@tensorflow/tfjs']],\n ['tensorflowjs', ['@tensorflow/tfjs']],\n ['tfjs', ['@tensorflow/tfjs']],\n ['brain', ['brain.js']],\n ['brainjs', ['brain.js']],\n ['synaptic', ['synaptic']],\n ['ml-matrix', ['ml-matrix']],\n ['opencv', ['opencv4nodejs']],\n\n // Image Processing\n ['sharp', ['sharp']],\n ['jimp', ['jimp']],\n ['canvas', ['canvas']],\n ['fabric', ['fabric']],\n ['fabricjs', ['fabric']],\n ['konva', ['konva']],\n ['konvajs', ['konva']],\n ['p5', ['p5']],\n ['p5js', ['p5']],\n ['three', ['three']],\n ['threejs', ['three']],\n\n // Audio/Video Processing\n ['howler', ['howler']],\n ['howlerjs', ['howler']],\n ['tone', ['tone']],\n ['tonejs', ['tone']],\n ['video', ['video.js']],\n ['videojs', ['video.js']],\n ['hls', ['hls.js']],\n ['hlsjs', ['hls.js']],\n ['dash', ['dashjs']],\n ['dashjs', ['dashjs']],\n\n // Game Development\n ['phaser', ['phaser']],\n ['phaserjs', ['phaser']],\n ['pixijs', ['pixi.js']],\n ['pixi', ['pixi.js']],\n ['babylonjs', ['babylonjs']],\n ['babylon', ['babylonjs']],\n ['aframe', ['aframe']],\n\n // IoT & Hardware\n ['johnny-five', ['johnny-five']],\n ['arduino', ['johnny-five']],\n ['raspberry-pi', ['raspi']],\n ['raspi', ['raspi']],\n ['serialport', ['serialport']],\n ['noble', ['noble']],\n ['bluetooth', ['noble']],\n\n // Progressive Web Apps\n ['workbox', ['workbox-webpack-plugin']],\n ['sw-precache', ['workbox-webpack-plugin']],\n ['service-worker', ['workbox-webpack-plugin']],\n ['pwa', ['workbox-webpack-plugin']],\n\n // Map & Geolocation\n ['leaflet', ['leaflet']],\n ['mapbox', ['mapbox-gl']],\n ['google-maps', ['@googlemaps/js-api-loader']],\n ['googlemaps', ['@googlemaps/js-api-loader']],\n ['openlayers', ['ol']],\n ['ol', ['ol']],\n\n // Animation\n ['gsap', ['gsap']],\n ['anime', ['animejs']],\n ['animejs', ['animejs']],\n ['lottie', ['lottie-web']],\n ['lottie-web', ['lottie-web']],\n ['framer-motion', ['framer-motion']],\n ['react-spring', ['react-spring']],\n\n // Form & Validation\n ['formik', ['formik']],\n ['react-hook-form', ['react-hook-form']],\n ['yup', ['yup']],\n ['joi', ['joi']],\n ['ajv', ['ajv']],\n ['zod', ['zod']],\n ['superstruct', ['superstruct']],\n\n // Editor & Rich Text\n ['quill', ['quill']],\n ['quilljs', ['quill']],\n ['tinymce', ['tinymce']],\n ['ckeditor', ['@ckeditor/ckeditor5-build-classic']],\n ['slate', ['slate']],\n ['slatejs', ['slate']],\n ['draft', ['draft-js']],\n ['draftjs', ['draft-js']],\n ['monaco', ['monaco-editor']],\n ['monaco-editor', ['monaco-editor']],\n\n // HTTP & API\n ['apollo', ['@apollo/client']],\n ['apollo-client', ['@apollo/client']],\n ['graphql', ['graphql']],\n ['relay', ['react-relay']],\n ['urql', ['urql']],\n ['swr', ['swr']],\n ['react-query', ['@tanstack/react-query']],\n ['tanstack-query', ['@tanstack/react-query']],\n\n // More Common Typos\n ['reac', ['react']],\n ['reactjs', ['react']],\n ['veu', ['vue']],\n ['vuejs', ['vue']],\n ['angualr', ['@angular/core']],\n ['svelt', ['svelte']],\n ['sveltte', ['svelte']],\n ['typescirpt', ['typescript']],\n ['typescript', ['typescript']],\n ['javasript', ['node']],\n ['javascript', ['node']],\n\n // DevOps & CI/CD\n ['docker', ['dockerode']],\n ['k8s', ['@kubernetes/client-node']],\n ['kubernetes', ['@kubernetes/client-node']],\n ['kubectl', ['@kubernetes/client-node']],\n ['helm', ['@helm/sdk']],\n ['jenkins', ['jenkins']],\n ['circleci', ['@circleci/circleci-config-sdk']],\n ['github-actions', ['@actions/core', '@actions/github']],\n ['gitlab-ci', ['@gitbeaker/node']],\n ['travis', ['@travis-ci/travis-yml']],\n ['terraform', ['@cdktf/provider-aws']],\n ['ansible', ['@ansible/galaxy']],\n ['vagrant', ['vagrant']],\n ['consul', ['consul']],\n ['vault', ['node-vault']],\n ['nomad', ['nomad-client']],\n\n // 监控和日志\n ['winston', ['winston']],\n ['morgan', ['morgan']],\n ['pino', ['pino']],\n ['bunyan', ['bunyan']],\n ['log4js', ['log4js']],\n ['sentry', ['@sentry/node', '@sentry/react']],\n ['bugsnag', ['@bugsnag/js']],\n ['rollbar', ['rollbar']],\n ['newrelic', ['newrelic']],\n ['datadog', ['@datadog/browser-rum']],\n ['prometheus', ['prom-client']],\n ['grafana', ['@grafana/toolkit']],\n ['elastic', ['@elastic/elasticsearch']],\n ['elasticsearch', ['@elastic/elasticsearch']],\n ['kibana', ['@elastic/kibana-utils']],\n ['logstash', ['@elastic/logstash']],\n\n // 微服务架构\n ['microservices', ['express']],\n ['service-mesh', ['istio']],\n ['envoy', ['envoy']],\n ['istio', ['istio']],\n ['linkerd', ['linkerd']],\n ['consul-connect', ['consul']],\n ['eureka', ['eureka-js-client']],\n ['zookeeper', ['node-zookeeper-client']],\n ['etcd', ['etcd3']],\n ['grpc', ['@grpc/grpc-js']],\n ['protobuf', ['protobufjs']],\n\n // 缓存系统\n ['redis', ['redis']],\n ['memcached', ['memcached']],\n ['node-cache', ['node-cache']],\n ['memory-cache', ['memory-cache']],\n ['lru-cache', ['lru-cache']],\n ['cache-manager', ['cache-manager']],\n ['ioredis', ['ioredis']],\n ['hazelcast', ['hazelcast-client']],\n\n // 消息队列\n ['rabbitmq', ['amqplib']],\n ['kafka', ['kafkajs']],\n ['apache-kafka', ['kafkajs']],\n ['bull', ['bull']],\n ['bullmq', ['bullmq']],\n ['bee-queue', ['bee-queue']],\n ['kue', ['kue']],\n ['agenda', ['agenda']],\n ['amqp', ['amqplib']],\n ['mqtt', ['mqtt']],\n ['nats', ['nats']],\n ['zeromq', ['zeromq']],\n ['zmq', ['zeromq']],\n\n // 搜索引擎\n ['solr', ['solr-client']],\n ['algolia', ['algoliasearch']],\n ['sphinx', ['sphinxapi']],\n ['lucene', ['lucene']],\n ['whoosh', ['whoosh']],\n ['meilisearch', ['meilisearch']],\n ['typesense', ['typesense']],\n\n // 文件上传处理\n ['multer', ['multer']],\n ['formidable', ['formidable']],\n ['busboy', ['busboy']],\n ['multiparty', ['multiparty']],\n ['file-upload', ['express-fileupload']],\n ['cloudinary', ['cloudinary']],\n ['aws-s3', ['@aws-sdk/client-s3']],\n\n // 加密和安全\n ['bcrypt', ['bcrypt']],\n ['bcryptjs', ['bcryptjs']],\n ['crypto', ['crypto-js']],\n ['crypto-js', ['crypto-js']],\n ['jsonwebtoken', ['jsonwebtoken']],\n ['jwt', ['jsonwebtoken']],\n ['passport', ['passport']],\n ['helmet', ['helmet']],\n ['cors', ['cors']],\n ['express-rate-limit', ['express-rate-limit']],\n ['rate-limiter', ['express-rate-limit']],\n ['argon2', ['argon2']],\n ['scrypt', ['scrypt']],\n ['node-rsa', ['node-rsa']],\n ['speakeasy', ['speakeasy']],\n ['otplib', ['otplib']],\n\n // 邮件服务\n ['nodemailer', ['nodemailer']],\n ['sendgrid', ['@sendgrid/mail']],\n ['mailgun', ['mailgun.js']],\n ['ses', ['@aws-sdk/client-ses']],\n ['postmark', ['postmark']],\n ['sparkpost', ['sparkpost']],\n ['mandrill', ['mandrill-api']],\n ['mailchimp', ['@mailchimp/mailchimp_marketing']],\n ['email-templates', ['email-templates']],\n\n // 模板引擎\n ['handlebars', ['handlebars']],\n ['hbs', ['hbs']],\n ['mustache', ['mustache']],\n ['pug', ['pug']],\n ['jade', ['pug']], // jade was renamed to pug\n ['ejs', ['ejs']],\n ['nunjucks', ['nunjucks']],\n ['twig', ['twig']],\n ['dust', ['dustjs-linkedin']],\n\n // Serverless框架\n ['serverless', ['serverless']],\n ['sls', ['serverless']],\n ['lambda', ['aws-lambda']],\n ['azure-functions', ['@azure/functions']],\n ['google-functions', ['@google-cloud/functions-framework']],\n ['netlify-lambda', ['netlify-lambda']],\n ['vercel', ['@vercel/node']],\n ['claudia', ['claudia']],\n ['apex', ['apex']],\n ['sam', ['@aws-cdk/aws-sam']],\n\n // 更多数据库\n ['couchdb', ['nano']],\n ['pouchdb', ['pouchdb']],\n ['neo4j', ['neo4j-driver']],\n ['influxdb', ['influx']],\n ['cassandra', ['cassandra-driver']],\n ['rethinkdb', ['rethinkdb']],\n ['orientdb', ['orientjs']],\n ['arangodb', ['arangojs']],\n ['leveldb', ['level']],\n ['rocksdb', ['rocksdb']],\n ['sqlite', ['sqlite3', 'better-sqlite3']],\n ['mariadb', ['mariadb']],\n ['cockroachdb', ['pg']], // uses pg driver\n\n // 更多云服务\n ['heroku', ['heroku']],\n ['digitalocean', ['@digitalocean/droplet-api']],\n ['linode', ['@linode/api-v4']],\n ['vultr', ['@vultr/vultr-node']],\n ['scaleway', ['@scaleway/sdk']],\n ['ovh', ['ovh']],\n ['cloudflare', ['cloudflare']],\n ['fastly', ['fastly']],\n ['maxcdn', ['maxcdn']],\n ['bunnycdn', ['bunnycdn']],\n\n // 性能分析和优化\n ['lighthouse', ['lighthouse']],\n ['webpagetest', ['webpagetest']],\n ['clinic', ['clinic']],\n ['0x', ['0x']],\n ['autocannon', ['autocannon']],\n ['loadtest', ['loadtest']],\n ['artillery', ['artillery']],\n ['k6', ['k6']],\n ['benchmark', ['benchmark']],\n ['clinic.js', ['clinic']],\n\n // 更多拼写错误和变体\n ['expressjs', ['express']],\n ['node.js', ['node']],\n ['nodejs', ['node']],\n ['npm', ['npm']],\n ['yarn', ['yarn']],\n ['pnpm', ['pnpm']],\n ['bun', ['bun']],\n ['deno', ['deno']],\n ['typescript', ['typescript']],\n ['js', ['javascript']],\n ['ts', ['typescript']],\n ['html', ['html']],\n ['css', ['css']],\n ['json', ['json']],\n ['xml', ['xml2js']],\n ['yaml', ['yaml']],\n ['toml', ['@iarna/toml']],\n ['ini', ['ini']],\n ['csv', ['csv-parser', 'papaparse']],\n ['pdf', ['pdf2pic', 'pdfkit']],\n ['excel', ['xlsx']],\n ['word', ['mammoth']],\n ['zip', ['node-zip']],\n ['tar', ['tar']],\n ['gzip', ['zlib']],\n\n // 数据处理和转换\n ['cheerio', ['cheerio']],\n ['jsdom', ['jsdom']],\n ['xml2js', ['xml2js']],\n ['csv-parse', ['csv-parse']],\n ['papaparse', ['papaparse']],\n ['fast-csv', ['fast-csv']],\n ['xlsx', ['xlsx']],\n ['pdfkit', ['pdfkit']],\n ['jspdf', ['jspdf']],\n ['mammoth', ['mammoth']],\n ['pdf-parse', ['pdf-parse']],\n\n // CLI工具\n ['commander', ['commander']],\n ['yargs', ['yargs']],\n ['inquirer', ['inquirer']],\n ['chalk', ['chalk']],\n ['ora', ['ora']],\n ['cli-progress', ['cli-progress']],\n ['figlet', ['figlet']],\n ['boxen', ['boxen']],\n ['update-notifier', ['update-notifier']],\n ['meow', ['meow']],\n ['arg', ['arg']],\n ['minimist', ['minimist']],\n ]);\n\n /**\n * Handle package not found errors (404)\n */\n static handlePackageNotFound(packageName: string, context?: ErrorContext): void {\n const suggestions = this.packageSuggestions.get(packageName);\n\n if (suggestions && suggestions.length > 0) {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 不存在`));\n console.log(chalk.cyan(`💡 可能的正确包名:`));\n suggestions.forEach((suggestion) => {\n console.log(chalk.cyan(` • ${suggestion}`));\n });\n } else {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 在 npm registry 中不存在`));\n console.log(chalk.cyan(`💡 请检查包名是否正确,或者该包可能已被移除`));\n }\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, new Error('Package not found (404)'));\n\n // Log technical details for debugging\n this.logger.debug('Package not found', { packageName, context });\n }\n\n /**\n * Handle empty version errors\n */\n static handleEmptyVersion(packageName: string, context?: ErrorContext): void {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 的版本信息为空`));\n console.log(chalk.cyan(`💡 这可能是由于:`));\n console.log(chalk.cyan(` • 包的 package.json 配置问题`));\n console.log(chalk.cyan(` • catalog 配置中的版本格式错误`));\n console.log(chalk.cyan(` • npm registry 数据同步问题`));\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, new Error('Version string cannot be empty'));\n\n this.logger.debug('Empty version string', { packageName, context });\n }\n\n /**\n * Handle network/timeout errors\n */\n static handleNetworkError(packageName: string, error: Error, context?: ErrorContext): void {\n console.log(chalk.yellow(`⚠️ 检查包 \"${packageName}\" 时遇到网络问题`));\n console.log(chalk.cyan(`💡 请稍后重试,或检查网络连接`));\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, error);\n\n this.logger.debug('Network error', { packageName, error: error.message, context });\n }\n\n /**\n * Handle security check failures\n */\n static handleSecurityCheckFailure(\n packageName: string,\n error: Error,\n context?: ErrorContext\n ): void {\n // Track for statistics\n ErrorTracker.trackSecurityFailure();\n\n // Only show user-friendly message, don't expose technical details\n this.logger.debug(`Security check failed for ${packageName}`, {\n error: error.message,\n context,\n });\n\n // Don't spam the user with security check failures unless it's critical\n if (context?.operation === 'update' || context?.operation === 'security-audit') {\n console.log(chalk.yellow(`⚠️ 无法检查 \"${packageName}\" 的安全状态`));\n }\n }\n\n /**\n * Handle retry attempts silently\n */\n static handleRetryAttempt(\n packageName: string,\n attempt: number,\n maxRetries: number,\n error: Error\n ): void {\n // Log for debugging but don't spam users\n this.logger.debug(`Retry attempt ${attempt}/${maxRetries} for ${packageName}`, {\n error: error.message,\n });\n\n // Only show to user on final failure\n if (attempt === maxRetries) {\n this.handleFinalFailure(packageName, error);\n }\n }\n\n /**\n * Handle final failure after retries\n */\n static handleFinalFailure(packageName: string, error: Error): void {\n if (error.message.includes('404') || error.message.includes('Not found')) {\n this.handlePackageNotFound(packageName);\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n this.handleNetworkError(packageName, error);\n } else if (error.message.includes('Version string cannot be empty')) {\n this.handleEmptyVersion(packageName);\n } else {\n // Generic error handling\n console.log(chalk.yellow(`⚠️ 跳过包 \"${packageName}\" (检查失败)`));\n this.logger.debug('Package check failed', { packageName, error: error.message });\n }\n }\n\n /**\n * Handle general package query failures\n */\n static handlePackageQueryFailure(\n packageName: string,\n error: Error,\n context?: ErrorContext\n ): void {\n // Categorize the error and provide appropriate user message\n if (error.message.includes('404') || error.message.includes('Not found')) {\n this.handlePackageNotFound(packageName, context);\n } else if (error.message.includes('Version string cannot be empty')) {\n this.handleEmptyVersion(packageName, context);\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n this.handleNetworkError(packageName, error, context);\n } else {\n // For other errors, just skip silently and log for debugging\n ErrorTracker.trackSkippedPackage(packageName, error);\n this.logger.debug(`Package query failed for ${packageName}`, {\n error: error.message,\n context,\n });\n }\n }\n\n /**\n * Show summary of skipped packages\n */\n static showSkippedPackagesSummary(): void {\n const totalSkipped = ErrorTracker.getTotalSkipped();\n if (totalSkipped === 0) return;\n\n console.log();\n console.log(chalk.cyan(`📋 跳过了 ${totalSkipped} 个包的检查:`));\n\n const grouped = ErrorTracker.getSkippedPackages();\n\n if (grouped.notFound.length > 0) {\n console.log(\n chalk.yellow(` 不存在的包 (${grouped.notFound.length}): ${grouped.notFound.join(', ')}`)\n );\n }\n\n if (grouped.emptyVersion.length > 0) {\n console.log(\n chalk.yellow(\n ` 版本信息为空 (${grouped.emptyVersion.length}): ${grouped.emptyVersion.join(', ')}`\n )\n );\n }\n\n if (grouped.network.length > 0) {\n console.log(\n chalk.yellow(` 网络问题 (${grouped.network.length}): ${grouped.network.join(', ')}`)\n );\n }\n\n if (grouped.other.length > 0) {\n console.log(\n chalk.yellow(` 其他问题 (${grouped.other.length}): ${grouped.other.join(', ')}`)\n );\n }\n\n const stats = ErrorTracker.getErrorStats();\n if (stats.security > 0) {\n console.log(chalk.gray(` 安全检查失败: ${stats.security} 次`));\n }\n }\n\n /**\n * Get statistics for reporting\n */\n static getStatistics(): {\n totalSkipped: number;\n errorBreakdown: ReturnType<typeof ErrorTracker.getErrorStats>;\n skippedPackages: ReturnType<typeof ErrorTracker.getSkippedPackages>;\n } {\n return {\n totalSkipped: ErrorTracker.getTotalSkipped(),\n errorBreakdown: ErrorTracker.getErrorStats(),\n skippedPackages: ErrorTracker.getSkippedPackages(),\n };\n }\n\n /**\n * Reset error tracking (useful for testing)\n */\n static resetTracking(): void {\n ErrorTracker.reset();\n }\n\n /**\n * Add a new package suggestion\n */\n static addPackageSuggestion(originalName: string, suggestions: string[]): void {\n this.packageSuggestions.set(originalName, suggestions);\n }\n\n /**\n * Get suggestions for a package name\n */\n static getPackageSuggestions(packageName: string): string[] {\n return this.packageSuggestions.get(packageName) || [];\n }\n}\n","/**\n * Version Checker Utility\n *\n * Checks for newer versions of the PCU tool and provides update prompts.\n */\n\nimport chalk from 'chalk';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n// InteractivePrompts removed - prompting should be handled by CLI layer\n\nconst execAsync = promisify(exec);\n\nexport interface VersionCheckResult {\n isLatest: boolean;\n currentVersion: string;\n latestVersion: string;\n shouldPrompt: boolean;\n}\n\nexport interface VersionCheckOptions {\n skipPrompt?: boolean;\n timeout?: number;\n packageName?: string;\n}\n\nexport class VersionChecker {\n private static readonly DEFAULT_TIMEOUT = 5000; // 5 seconds\n private static readonly DEFAULT_PACKAGE = 'pcu';\n\n /**\n * Check if current version is the latest\n */\n static async checkVersion(\n currentVersion: string,\n options: VersionCheckOptions = {}\n ): Promise<VersionCheckResult> {\n const {\n skipPrompt = false,\n timeout = this.DEFAULT_TIMEOUT,\n packageName = this.DEFAULT_PACKAGE,\n } = options;\n\n try {\n // Get latest version from npm with timeout\n const latestVersion = await this.getLatestVersion(packageName, timeout);\n\n const isLatest = this.compareVersions(currentVersion, latestVersion) >= 0;\n\n return {\n isLatest,\n currentVersion,\n latestVersion,\n shouldPrompt: !isLatest && !skipPrompt,\n };\n } catch (error) {\n console.warn(chalk.yellow('⚠️ Failed to check for updates:'), error);\n return {\n isLatest: true, // Assume latest if check fails\n currentVersion,\n latestVersion: currentVersion,\n shouldPrompt: false,\n };\n }\n }\n\n /**\n * Display update notification (prompting should be handled by CLI layer)\n */\n static displayUpdateNotification(versionResult: VersionCheckResult): void {\n if (!versionResult.shouldPrompt) {\n return;\n }\n\n console.log();\n console.log(chalk.cyan('📦 Update Available!'));\n console.log(\n chalk.gray(\n `Current version: ${versionResult.currentVersion} → Latest: ${versionResult.latestVersion}`\n )\n );\n console.log(chalk.gray('Run with --update flag to update to the latest version.'));\n console.log();\n }\n\n /**\n * Prompt user and update if they choose to\n */\n static async promptAndUpdate(versionResult: VersionCheckResult): Promise<boolean> {\n if (!versionResult.shouldPrompt) {\n return false;\n }\n\n try {\n // For now, just display notification and don't prompt\n // This avoids adding inquirer dependency to utils package\n this.displayUpdateNotification(versionResult);\n\n // Auto-perform update for now (can be enhanced with prompting later)\n console.log(chalk.yellow('Auto-updating to latest version...'));\n return await this.performUpdateAction();\n } catch (error) {\n console.error(chalk.red('Failed to prompt and update:'), error);\n return false;\n }\n }\n\n /**\n * Perform update without prompting\n */\n static async performUpdateAction(): Promise<boolean> {\n console.log(chalk.blue('🔄 Updating pcu...'));\n try {\n await this.performUpdate();\n console.log(chalk.green('✅ Successfully updated! Please restart the command.'));\n return true;\n } catch (error) {\n console.error(chalk.red('❌ Update failed:'), error);\n console.log(chalk.gray('You can manually update with: npm install -g pcu@latest'));\n return false;\n }\n }\n\n /**\n * Get latest version from npm registry\n */\n private static async getLatestVersion(packageName: string, timeout: number): Promise<string> {\n const command = `npm view ${packageName} version`;\n\n try {\n const { stdout } = await this.executeWithTimeout(command, timeout);\n return stdout.trim();\n } catch (error) {\n // Fallback: try with different npm commands\n try {\n const { stdout } = await this.executeWithTimeout(\n `npm info ${packageName} version`,\n timeout\n );\n return stdout.trim();\n } catch (fallbackError) {\n throw new Error(`Failed to get latest version: ${error}`);\n }\n }\n }\n\n /**\n * Execute update command\n */\n private static async performUpdate(): Promise<void> {\n // Try global update first, then fallback to different methods\n const commands = [\n 'npm install -g pcu@latest',\n 'npm update -g pcu',\n 'pnpm add -g pcu@latest',\n 'yarn global add pcu@latest',\n ];\n\n for (const command of commands) {\n try {\n console.log(chalk.gray(`Executing: ${command}`));\n await execAsync(command, { timeout: 30000 });\n return; // Success\n } catch (error) {\n console.warn(chalk.yellow(`Command failed: ${command}`));\n // Continue to next command\n }\n }\n\n throw new Error('All update commands failed');\n }\n\n /**\n * Execute command with timeout\n */\n private static async executeWithTimeout(\n command: string,\n timeout: number\n ): Promise<{ stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n const child = exec(command, { timeout }, (error, stdout, stderr) => {\n if (error) {\n reject(error);\n } else {\n resolve({ stdout, stderr });\n }\n });\n\n // Additional timeout handling\n const timer = setTimeout(() => {\n child.kill();\n reject(new Error(`Command timed out after ${timeout}ms`));\n }, timeout);\n\n child.on('exit', () => {\n clearTimeout(timer);\n });\n });\n }\n\n /**\n * Compare two version strings\n * Returns: -1 if a < b, 0 if a === b, 1 if a > b\n */\n private static compareVersions(a: string, b: string): number {\n const cleanA = a.replace(/^v/, '').replace(/[^0-9.]/g, '');\n const cleanB = b.replace(/^v/, '').replace(/[^0-9.]/g, '');\n\n const partsA = cleanA.split('.').map(Number);\n const partsB = cleanB.split('.').map(Number);\n\n const maxLength = Math.max(partsA.length, partsB.length);\n\n for (let i = 0; i < maxLength; i++) {\n const partA = partsA[i] || 0;\n const partB = partsB[i] || 0;\n\n if (partA < partB) return -1;\n if (partA > partB) return 1;\n }\n\n return 0;\n }\n\n /**\n * Check if running in CI environment where prompts should be skipped\n */\n static isCI(): boolean {\n return !!(\n process.env.CI ||\n process.env.CONTINUOUS_INTEGRATION ||\n process.env.BUILD_NUMBER ||\n process.env.RUN_ID ||\n process.env.GITHUB_ACTIONS\n );\n }\n\n /**\n * Get update frequency preference from environment\n */\n static shouldCheckForUpdates(): boolean {\n const skipCheck = process.env.PCU_SKIP_VERSION_CHECK;\n if (skipCheck === 'true' || skipCheck === '1') {\n return false;\n }\n\n // Skip in CI environments by default\n if (this.isCI()) {\n return false;\n }\n\n return true;\n }\n}\n","/**\n * Version Value Object\n *\n * Represents a semantic version with comparison and validation capabilities.\n * Handles version ranges, pre-release versions, and semantic version operations.\n */\n\nimport semver from 'semver';\n\nexport class Version {\n private readonly value: string;\n private readonly semverInstance: semver.SemVer;\n\n private constructor(value: string, semverInstance: semver.SemVer) {\n this.value = value;\n this.semverInstance = semverInstance;\n }\n\n /**\n * Create a Version from a version string\n */\n public static fromString(versionString: string): Version {\n if (!versionString || versionString.trim().length === 0) {\n throw new Error('Version string cannot be empty');\n }\n\n const cleaned = versionString.trim();\n const parsedVersion = semver.parse(cleaned);\n\n if (!parsedVersion) {\n throw new Error(`Invalid version string: ${versionString}`);\n }\n\n return new Version(cleaned, parsedVersion);\n }\n\n /**\n * Create a Version from semver components\n */\n public static fromComponents(\n major: number,\n minor: number,\n patch: number,\n prerelease?: string\n ): Version {\n let versionString = `${major}.${minor}.${patch}`;\n if (prerelease) {\n versionString += `-${prerelease}`;\n }\n\n return Version.fromString(versionString);\n }\n\n /**\n * Parse a version that might include range operators\n */\n public static parseVersionRange(rangeString: string): VersionRange {\n return VersionRange.fromString(rangeString);\n }\n\n /**\n * Get the version string\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Get major version number\n */\n public getMajor(): number {\n return this.semverInstance.major;\n }\n\n /**\n * Get minor version number\n */\n public getMinor(): number {\n return this.semverInstance.minor;\n }\n\n /**\n * Get patch version number\n */\n public getPatch(): number {\n return this.semverInstance.patch;\n }\n\n /**\n * Get prerelease identifier\n */\n public getPrerelease(): string[] {\n return this.semverInstance.prerelease.map((p) => p.toString());\n }\n\n /**\n * Check if this is a prerelease version\n */\n public isPrerelease(): boolean {\n return this.semverInstance.prerelease.length > 0;\n }\n\n /**\n * Compare with another version\n */\n public compareTo(other: Version): number {\n return semver.compare(this.value, other.value);\n }\n\n /**\n * Check if this version is newer than another\n */\n public isNewerThan(other: Version): boolean {\n return this.compareTo(other) > 0;\n }\n\n /**\n * Check if this version is older than another\n */\n public isOlderThan(other: Version): boolean {\n return this.compareTo(other) < 0;\n }\n\n /**\n * Check if this version equals another\n */\n public equals(other: Version): boolean {\n return this.compareTo(other) === 0;\n }\n\n /**\n * Check if this version satisfies a range\n */\n public satisfies(range: VersionRange): boolean {\n return range.includes(this);\n }\n\n /**\n * Get the difference type compared to another version\n */\n public getDifferenceType(other: Version): 'major' | 'minor' | 'patch' | 'prerelease' | 'same' {\n if (this.equals(other)) {\n return 'same';\n }\n\n const diff = semver.diff(this.value, other.value);\n return diff as 'major' | 'minor' | 'patch' | 'prerelease';\n }\n\n /**\n * Increment version by type\n */\n public increment(type: 'major' | 'minor' | 'patch', prerelease?: string): Version {\n const incremented = semver.inc(this.value, type, prerelease);\n if (!incremented) {\n throw new Error(`Failed to increment version ${this.value} by ${type}`);\n }\n return Version.fromString(incremented);\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): Version {\n return Version.fromString(json);\n }\n}\n\n/**\n * Version Range Value Object\n *\n * Represents a version range (e.g., \"^1.2.3\", \"~2.0.0\", \">=1.0.0 <2.0.0\")\n */\nexport class VersionRange {\n private readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n /**\n * Create a VersionRange from a range string\n */\n public static fromString(rangeString: string): VersionRange {\n if (!rangeString || rangeString.trim().length === 0) {\n throw new Error('Version range string cannot be empty');\n }\n\n const cleaned = rangeString.trim();\n\n // Validate the range\n try {\n semver.validRange(cleaned);\n } catch (error) {\n throw new Error(`Invalid version range: ${rangeString}`);\n }\n\n if (!semver.validRange(cleaned)) {\n throw new Error(`Invalid version range: ${rangeString}`);\n }\n\n return new VersionRange(cleaned);\n }\n\n /**\n * Get the range string\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Check if a version satisfies this range\n */\n public includes(version: Version): boolean {\n return semver.satisfies(version.toString(), this.value);\n }\n\n /**\n * Check if this range is compatible with another range\n */\n public isCompatibleWith(other: VersionRange): boolean {\n // Check if ranges have any overlap\n try {\n return semver.intersects(this.value, other.value);\n } catch {\n return false;\n }\n }\n\n /**\n * Get the minimum version that satisfies this range\n */\n public getMinVersion(): Version | null {\n const minVersion = semver.minVersion(this.value);\n return minVersion ? Version.fromString(minVersion.version) : null;\n }\n\n /**\n * Get the maximum version that satisfies this range\n */\n public getMaxVersion(): Version | null {\n // semver doesn't have a direct maxVersion, so we approximate\n const minVer = this.getMinVersion();\n if (!minVer) return null;\n\n // For caret ranges (^1.2.3), max is < 2.0.0\n if (this.value.startsWith('^')) {\n const major = minVer.getMajor();\n return Version.fromComponents(major + 1, 0, 0);\n }\n\n // For tilde ranges (~1.2.3), max is < 1.3.0\n if (this.value.startsWith('~')) {\n const major = minVer.getMajor();\n const minor = minVer.getMinor();\n return Version.fromComponents(major, minor + 1, 0);\n }\n\n return null;\n }\n\n /**\n * Check if this is a caret range (^x.y.z)\n */\n public isCaret(): boolean {\n return this.value.startsWith('^');\n }\n\n /**\n * Check if this is a tilde range (~x.y.z)\n */\n public isTilde(): boolean {\n return this.value.startsWith('~');\n }\n\n /**\n * Check if this is an exact version\n */\n public isExact(): boolean {\n return (\n !this.value.includes('^') &&\n !this.value.includes('~') &&\n !this.value.includes('>') &&\n !this.value.includes('<') &&\n !this.value.includes('*') &&\n !this.value.includes('x')\n );\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): VersionRange {\n return VersionRange.fromString(json);\n }\n\n /**\n * Check equality with another VersionRange\n */\n public equals(other: VersionRange): boolean {\n return this.value === other.value;\n }\n}\n","/**\n * WorkspacePath Value Object\n *\n * Represents a file system path to a pnpm workspace.\n * This is an immutable value object that validates and normalizes workspace paths.\n */\n\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nexport class WorkspacePath {\n private readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n /**\n * Create a WorkspacePath from a string\n */\n public static fromString(pathString: string): WorkspacePath {\n if (!pathString || pathString.trim().length === 0) {\n throw new Error('WorkspacePath cannot be empty');\n }\n\n // Normalize the path\n const normalized = path.resolve(pathString.trim());\n\n return new WorkspacePath(normalized);\n }\n\n /**\n * Create a WorkspacePath from the current working directory\n */\n public static current(): WorkspacePath {\n return new WorkspacePath(process.cwd());\n }\n\n /**\n * Create a WorkspacePath from file URL (useful for ES modules)\n */\n public static fromFileURL(fileUrl: string): WorkspacePath {\n const filePath = fileURLToPath(fileUrl);\n const directory = path.dirname(filePath);\n return new WorkspacePath(directory);\n }\n\n /**\n * Get the absolute path as a string\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Get the directory name (last part of the path)\n */\n public getDirectoryName(): string {\n return path.basename(this.value);\n }\n\n /**\n * Join with another path segment\n */\n public join(...segments: string[]): WorkspacePath {\n const joined = path.join(this.value, ...segments);\n return new WorkspacePath(joined);\n }\n\n /**\n * Get the parent directory\n */\n public getParent(): WorkspacePath {\n const parent = path.dirname(this.value);\n return new WorkspacePath(parent);\n }\n\n /**\n * Check if this path is a subdirectory of another path\n */\n public isSubdirectoryOf(other: WorkspacePath): boolean {\n const relativePath = path.relative(other.value, this.value);\n return !relativePath.startsWith('..') && !path.isAbsolute(relativePath);\n }\n\n /**\n * Get relative path from another WorkspacePath\n */\n public relativeTo(other: WorkspacePath): string {\n return path.relative(other.value, this.value);\n }\n\n /**\n * Check equality with another WorkspacePath\n */\n public equals(other: WorkspacePath): boolean {\n return path.resolve(this.value) === path.resolve(other.value);\n }\n\n /**\n * Get the value for serialization\n */\n public getValue(): string {\n return this.value;\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): WorkspacePath {\n return WorkspacePath.fromString(json);\n }\n\n /**\n * Check if this path exists (requires async validation in infrastructure layer)\n */\n public async exists(): Promise<boolean> {\n try {\n const fs = await import('fs/promises');\n await fs.access(this.value);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Get the path to pnpm-workspace.yaml\n */\n public getPnpmWorkspaceConfigPath(): WorkspacePath {\n return this.join('pnpm-workspace.yaml');\n }\n\n /**\n * Get the path to package.json\n */\n public getPackageJsonPath(): WorkspacePath {\n return this.join('package.json');\n }\n}\n","/**\n * NPM/PNPM Configuration Parser\n *\n * Reads and parses .npmrc and .pnpmrc configuration files to extract registry settings\n * for different package scopes. Supports both npm and pnpm configuration formats.\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\nexport interface NpmrcConfig {\n // Default registry\n registry: string;\n // Scoped registries (e.g., @mycompany -> https://npm.mycompany.com)\n scopedRegistries: Map<string, string>;\n // Auth tokens for registries\n authTokens: Map<string, string>;\n // Other npm config values\n config: Map<string, string>;\n}\n\nexport class NpmrcParser {\n private static readonly DEFAULT_REGISTRY = 'https://registry.npmjs.org/';\n\n /**\n * Parse .npmrc/.pnpmrc configuration from multiple sources\n */\n static parse(\n workingDirectory: string = process.cwd(),\n includeGlobal: boolean = true\n ): NpmrcConfig {\n const config: NpmrcConfig = {\n registry: this.DEFAULT_REGISTRY,\n scopedRegistries: new Map(),\n authTokens: new Map(),\n config: new Map(),\n };\n\n // Load config files in order of precedence (later files override earlier)\n // Priority: project .pnpmrc > project .npmrc > global .pnpmrc > global .npmrc\n const configPaths: string[] = [];\n\n // Only include global configs if requested (for production use)\n if (includeGlobal) {\n configPaths.push(join(homedir(), '.npmrc')); // Global npmrc (lowest priority)\n configPaths.push(join(homedir(), '.pnpmrc')); // Global pnpmrc\n }\n\n configPaths.push(join(workingDirectory, '.npmrc')); // Project npmrc\n configPaths.push(join(workingDirectory, '.pnpmrc')); // Project pnpmrc (highest priority)\n\n for (const configPath of configPaths) {\n if (existsSync(configPath)) {\n this.parseFile(configPath, config);\n }\n }\n\n // Also check for environment variables (skip in tests if includeGlobal is false)\n this.parseEnvironment(config, includeGlobal);\n\n return config;\n }\n\n /**\n * Parse a single .npmrc file\n */\n private static parseFile(filepath: string, config: NpmrcConfig): void {\n try {\n const content = readFileSync(filepath, 'utf-8');\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n // Skip comments and empty lines\n if (!trimmedLine || trimmedLine.startsWith('#') || trimmedLine.startsWith(';')) {\n continue;\n }\n\n // Parse key=value pairs\n const separatorIndex = trimmedLine.indexOf('=');\n if (separatorIndex === -1) continue;\n\n const key = trimmedLine.substring(0, separatorIndex).trim();\n const value = trimmedLine.substring(separatorIndex + 1).trim();\n\n // Handle scoped registries (e.g., @mycompany:registry=https://npm.mycompany.com/)\n if (key.includes(':registry')) {\n const scope = key.replace(':registry', '');\n config.scopedRegistries.set(scope, this.normalizeRegistryUrl(value));\n }\n // Handle default registry\n else if (key === 'registry') {\n config.registry = this.normalizeRegistryUrl(value);\n }\n // Handle auth tokens (e.g., //registry.npmjs.org/:_authToken=...)\n else if (key.includes(':_authToken') || key.includes('_authToken')) {\n // Extract registry URL from the key\n const match = key.match(/\\/\\/(.*?)\\/:/);\n if (match && match[1]) {\n const registryHost = match[1];\n config.authTokens.set(registryHost, value);\n }\n }\n // Store other config values\n else {\n config.config.set(key, value);\n }\n }\n } catch (error) {\n // Silently ignore errors reading npmrc files\n console.debug(`Failed to parse npmrc file ${filepath}:`, error);\n }\n }\n\n /**\n * Parse npm configuration from environment variables\n */\n private static parseEnvironment(config: NpmrcConfig, includeEnv: boolean = true): void {\n if (!includeEnv) {\n return; // Skip environment parsing in tests\n }\n\n // Check for npm_config_registry\n if (process.env.npm_config_registry) {\n config.registry = this.normalizeRegistryUrl(process.env.npm_config_registry);\n }\n\n // Check for scoped registries in environment\n for (const [key, value] of Object.entries(process.env)) {\n if (key.startsWith('npm_config_') && key.includes('_registry')) {\n // Extract scope from environment variable name\n // e.g., npm_config_@mycompany_registry -> @mycompany\n const match = key.match(/npm_config_(.+)_registry/);\n if (match && match[1] && value) {\n const scope = match[1].replace(/_/g, '/').replace(/\\//, '@');\n config.scopedRegistries.set(scope, this.normalizeRegistryUrl(value));\n }\n }\n }\n }\n\n /**\n * Get the appropriate registry URL for a package\n */\n static getRegistryForPackage(packageName: string, config: NpmrcConfig): string {\n // Check if package has a scope (e.g., @mycompany/package)\n if (packageName.startsWith('@')) {\n const scopeEnd = packageName.indexOf('/');\n if (scopeEnd !== -1) {\n const scope = packageName.substring(0, scopeEnd);\n\n // Check if we have a scoped registry for this scope\n const scopedRegistry = config.scopedRegistries.get(scope);\n if (scopedRegistry) {\n return scopedRegistry;\n }\n }\n }\n\n // Fall back to default registry\n return config.registry;\n }\n\n /**\n * Normalize registry URL to ensure it has a trailing slash\n */\n private static normalizeRegistryUrl(url: string): string {\n // Remove any quotes that might be in the config\n url = url.replace(/^[\"']|[\"']$/g, '');\n\n // Ensure trailing slash\n if (!url.endsWith('/')) {\n url += '/';\n }\n\n return url;\n }\n\n /**\n * Get auth token for a registry\n */\n static getAuthToken(registryUrl: string, config: NpmrcConfig): string | undefined {\n try {\n const url = new URL(registryUrl);\n return config.authTokens.get(url.hostname);\n } catch {\n return undefined;\n }\n }\n}\n","/**\n * NPM Registry Service\n *\n * Provides access to NPM registry for package version information.\n * Handles API calls, caching, and version resolution.\n */\n\nimport npmRegistryFetch from 'npm-registry-fetch';\nimport pacote from 'pacote';\nimport semver from 'semver';\n\nimport { AdvancedConfig, UserFriendlyErrorHandler } from '@pcu/utils';\nimport { Version, VersionRange } from '../../domain/value-objects/version.js';\nimport { NpmrcConfig, NpmrcParser } from '../utils/npmrcParser.js';\n\nexport interface PackageInfo {\n name: string;\n description?: string;\n homepage?: string;\n repository?: {\n type?: string;\n url?: string;\n directory?: string;\n };\n license?: string;\n author?: string | { name: string; email?: string };\n maintainers?: Array<{ name: string; email?: string }>;\n keywords?: string[];\n versions: string[];\n latestVersion: string;\n tags: Record<string, string>;\n time?: Record<string, string>;\n}\n\nexport interface SecurityVulnerability {\n id: string;\n title: string;\n severity: 'low' | 'moderate' | 'high' | 'critical';\n description: string;\n reference: string;\n vulnerable_versions: string;\n patched_versions?: string;\n recommendation?: string;\n}\n\nexport interface SecurityReport {\n package: string;\n version: string;\n vulnerabilities: SecurityVulnerability[];\n hasVulnerabilities: boolean;\n}\n\nexport class NpmRegistryService {\n private readonly cache: Map<string, { data: any; timestamp: number }> = new Map();\n\n // Differentiated cache timeouts for different data types\n private readonly versionCacheTimeout: number;\n private readonly packageInfoCacheTimeout: number;\n private readonly securityCacheTimeout: number;\n\n // Advanced configuration with defaults\n private readonly concurrency: number;\n private readonly timeout: number;\n private readonly retries: number;\n private readonly cachingEnabled: boolean;\n\n // NPM configuration for handling multiple registries\n private readonly npmrcConfig: NpmrcConfig;\n\n constructor(\n registryUrl: string = 'https://registry.npmjs.org/',\n options: AdvancedConfig = {},\n workingDirectory: string = process.cwd()\n ) {\n // Parse npmrc configuration for scoped registries\n this.npmrcConfig = NpmrcParser.parse(workingDirectory);\n\n // Override default registry if specified in npmrc\n if (!registryUrl || registryUrl === 'https://registry.npmjs.org/') {\n // Use npmrc registry as default if no specific registry is provided\n const normalizedUrl = registryUrl.endsWith('/') ? registryUrl : registryUrl + '/';\n this.npmrcConfig.registry = this.npmrcConfig.registry || normalizedUrl;\n } else {\n // Use the provided registry URL as override\n this.npmrcConfig.registry = registryUrl.endsWith('/') ? registryUrl : registryUrl + '/';\n }\n this.concurrency = options.concurrency ?? 8; // Increased from 5 to match NCU performance\n this.timeout = options.timeout ?? 15000; // Reduced from 30s to 15s for faster failure detection\n this.retries = options.retries ?? 2; // Reduced from 3 to 2 for faster overall performance\n\n // Optimized cache timeouts for different data types\n const baseCacheMinutes = options.cacheValidityMinutes ?? 10; // Reduced from 60 to 10 minutes\n this.versionCacheTimeout = baseCacheMinutes * 60 * 1000; // Version info: 10 minutes (frequently checked)\n this.packageInfoCacheTimeout = baseCacheMinutes * 2 * 60 * 1000; // Package info: 20 minutes\n this.securityCacheTimeout = baseCacheMinutes * 6 * 60 * 1000; // Security info: 60 minutes (changes less frequently)\n\n this.cachingEnabled = baseCacheMinutes > 0; // Disable caching if set to 0\n }\n\n /**\n * Execute a function with retry logic\n */\n private async executeWithRetry<T>(\n fn: () => Promise<T>,\n context: string = 'operation'\n ): Promise<T> {\n let lastError: Error;\n\n for (let attempt = 1; attempt <= this.retries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (attempt === this.retries) {\n throw new Error(`${context} failed after ${this.retries} attempts: ${lastError.message}`);\n }\n\n // Exponential backoff: wait 1s, 2s, 4s, etc.\n const delay = Math.min(1000 * Math.pow(2, attempt - 1), 10000);\n await new Promise((resolve) => setTimeout(resolve, delay));\n\n // Extract package name from context for better error handling\n const packageName = context.includes('for ')\n ? context.split('for ')[1] || 'unknown package'\n : 'unknown package';\n\n UserFriendlyErrorHandler.handleRetryAttempt(packageName, attempt, this.retries, lastError);\n }\n }\n\n throw lastError!;\n }\n\n /**\n * Get the appropriate registry URL for a package\n */\n private getRegistryForPackage(packageName: string): string {\n return NpmrcParser.getRegistryForPackage(packageName, this.npmrcConfig);\n }\n\n /**\n * Get auth configuration for a registry\n */\n private getAuthConfig(registryUrl: string): Record<string, any> {\n const authToken = NpmrcParser.getAuthToken(registryUrl, this.npmrcConfig);\n if (authToken) {\n return {\n '//registry.npmjs.org/:_authToken': authToken,\n token: authToken,\n };\n }\n return {};\n }\n\n /**\n * Get lightweight package version information (optimized for performance)\n */\n async getPackageVersions(packageName: string): Promise<{\n name: string;\n versions: string[];\n latestVersion: string;\n tags: Record<string, string>;\n time?: Record<string, string>;\n }> {\n const registryUrl = this.getRegistryForPackage(packageName);\n const cacheKey = `package-versions:${registryUrl}:${packageName}`;\n\n // Check cache first if caching is enabled\n if (this.cachingEnabled) {\n const cached = this.getFromCache(cacheKey);\n if (cached) {\n return cached;\n }\n }\n\n const packageVersions = await this.executeWithRetry(async () => {\n // Use lightweight packument call without fullMetadata\n const authConfig = this.getAuthConfig(registryUrl);\n const packument = await pacote.packument(packageName, {\n registry: registryUrl,\n timeout: this.timeout,\n fullMetadata: false, // Key optimization: don't fetch full metadata\n ...authConfig,\n });\n\n const versions = Object.keys(packument.versions || {}).sort(semver.rcompare);\n const latestVersion = packument['dist-tags']?.latest || versions[0] || '';\n\n return {\n name: packument.name,\n versions,\n latestVersion,\n tags: packument['dist-tags'] || {},\n time: (packument as any).time || {}, // Still include time for newest versions feature\n };\n }, `Fetching package versions for ${packageName}`);\n\n // Cache the result if caching is enabled\n if (this.cachingEnabled) {\n this.setCache(cacheKey, packageVersions);\n }\n\n return packageVersions;\n }\n\n /**\n * Get package information including all versions\n * @deprecated Use getPackageVersions() for better performance\n */\n async getPackageInfo(packageName: string): Promise<PackageInfo> {\n const registryUrl = this.getRegistryForPackage(packageName);\n const cacheKey = `package-info:${registryUrl}:${packageName}`;\n\n // Check cache first if caching is enabled\n if (this.cachingEnabled) {\n const cached = this.getFromCache(cacheKey);\n if (cached) {\n return cached;\n }\n }\n\n // Use lightweight version and extend with additional metadata only if needed\n const versionInfo = await this.getPackageVersions(packageName);\n\n const packageInfo = await this.executeWithRetry(async () => {\n // Only fetch full metadata if we actually need the extended info\n const authConfig = this.getAuthConfig(registryUrl);\n const packument = await pacote.packument(packageName, {\n registry: registryUrl,\n timeout: this.timeout,\n fullMetadata: true,\n ...authConfig,\n });\n\n return {\n name: versionInfo.name,\n description: (packument as any).description || undefined,\n homepage: (packument as any).homepage || undefined,\n repository: (packument as any).repository || undefined,\n license: (packument as any).license || undefined,\n author: (packument as any).author || undefined,\n maintainers: (packument as any).maintainers || undefined,\n keywords: (packument as any).keywords || undefined,\n versions: versionInfo.versions,\n latestVersion: versionInfo.latestVersion,\n tags: versionInfo.tags,\n time: versionInfo.time || {},\n };\n }, `Fetching package info for ${packageName}`);\n\n // Cache the result if caching is enabled\n if (this.cachingEnabled) {\n this.setCache(cacheKey, packageInfo);\n }\n\n return packageInfo;\n }\n\n /**\n * Get the latest version of a package\n */\n async getLatestVersion(packageName: string): Promise<Version> {\n try {\n const versionInfo = await this.getPackageVersions(packageName);\n return Version.fromString(versionInfo.latestVersion);\n } catch (error) {\n throw new Error(`Failed to get latest version for ${packageName}: ${error}`);\n }\n }\n\n /**\n * Get the greatest version that satisfies a range\n */\n async getGreatestVersion(packageName: string, range?: VersionRange): Promise<Version> {\n try {\n const versionInfo = await this.getPackageVersions(packageName);\n\n if (!range) {\n return Version.fromString(versionInfo.latestVersion);\n }\n\n // Find the greatest version that satisfies the range\n const satisfyingVersions = versionInfo.versions.filter((v) => {\n try {\n const version = Version.fromString(v);\n return version.satisfies(range);\n } catch {\n return false;\n }\n });\n\n if (satisfyingVersions.length === 0) {\n throw new Error(`No versions satisfy range ${range.toString()}`);\n }\n\n // Return the first (greatest) version\n if (!satisfyingVersions[0]) {\n throw new Error(`No satisfying versions found for ${packageName}`);\n }\n return Version.fromString(satisfyingVersions[0]);\n } catch (error) {\n throw new Error(`Failed to get greatest version for ${packageName}: ${error}`);\n }\n }\n\n /**\n * Get versions by date (newest versions published)\n */\n async getNewestVersions(packageName: string, count: number = 10): Promise<Version[]> {\n try {\n const versionInfo = await this.getPackageVersions(packageName);\n\n // Sort versions by publication time\n const versionsWithTime = versionInfo.versions\n .map((version) => ({\n version,\n time: versionInfo.time?.[version] ? new Date(versionInfo.time[version]) : new Date(0),\n }))\n .sort((a, b) => b.time.getTime() - a.time.getTime())\n .slice(0, count);\n\n return versionsWithTime.map((item) => Version.fromString(item.version));\n } catch (error) {\n throw new Error(`Failed to get newest versions for ${packageName}: ${error}`);\n }\n }\n\n /**\n * Check for security vulnerabilities\n */\n async checkSecurityVulnerabilities(\n packageName: string,\n version: string\n ): Promise<SecurityReport> {\n const registryUrl = this.getRegistryForPackage(packageName);\n const cacheKey = `security:${registryUrl}:${packageName}@${version}`;\n\n // Check cache first\n const cached = this.getFromCache(cacheKey);\n if (cached) {\n return cached;\n }\n\n try {\n // Use npm audit API\n const auditData = {\n name: packageName,\n version: version,\n requires: {},\n dependencies: {},\n };\n\n const authConfig = this.getAuthConfig(registryUrl);\n const response = await npmRegistryFetch('/-/npm/v1/security/audits', {\n method: 'POST',\n body: JSON.stringify(auditData),\n headers: {\n 'Content-Type': 'application/json',\n },\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n });\n\n const auditResult = await response.json();\n const vulnerabilities: SecurityVulnerability[] = [];\n\n // Parse audit results\n if (auditResult.advisories) {\n for (const advisory of Object.values(auditResult.advisories) as any[]) {\n vulnerabilities.push({\n id: advisory.id.toString(),\n title: advisory.title,\n severity: advisory.severity,\n description: advisory.overview,\n reference: advisory.url,\n vulnerable_versions: advisory.vulnerable_versions,\n patched_versions: advisory.patched_versions,\n recommendation: advisory.recommendation,\n });\n }\n }\n\n const securityReport: SecurityReport = {\n package: packageName,\n version: version,\n vulnerabilities,\n hasVulnerabilities: vulnerabilities.length > 0,\n };\n\n // Cache the result\n this.setCache(cacheKey, securityReport);\n\n return securityReport;\n } catch (error) {\n // If security check fails, return empty report\n UserFriendlyErrorHandler.handleSecurityCheckFailure(packageName, error as Error);\n\n const emptyReport: SecurityReport = {\n package: packageName,\n version: version,\n vulnerabilities: [],\n hasVulnerabilities: false,\n };\n\n return emptyReport;\n }\n }\n\n /**\n * Batch query multiple packages with progress tracking\n */\n async batchQueryVersions(\n packages: string[],\n progressCallback?: (completed: number, total: number, currentPackage: string) => void\n ): Promise<Map<string, PackageInfo>> {\n const results = new Map<string, PackageInfo>();\n let completed = 0;\n const total = packages.length;\n\n // Process packages in parallel with configurable concurrency\n const chunks = this.chunkArray(packages, this.concurrency);\n\n for (const chunk of chunks) {\n const promises = chunk.map(async (packageName) => {\n try {\n const info = await this.getPackageInfo(packageName);\n results.set(packageName, info);\n\n // Update progress\n completed++;\n if (progressCallback) {\n progressCallback(completed, total, packageName);\n }\n } catch (error) {\n // Still count failed packages in progress\n completed++;\n if (progressCallback) {\n progressCallback(completed, total, packageName);\n }\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error);\n }\n });\n\n await Promise.all(promises);\n }\n\n return results;\n }\n\n /**\n * Check if package author has changed\n */\n async hasPackageAuthorChanged(\n packageName: string,\n fromVersion: string,\n toVersion: string\n ): Promise<boolean> {\n try {\n // const packageInfo = await this.getPackageInfo(packageName);\n\n const registryUrl = this.getRegistryForPackage(packageName);\n const authConfig = this.getAuthConfig(registryUrl);\n\n const fromVersionData = await pacote.manifest(`${packageName}@${fromVersion}`, {\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n });\n\n const toVersionData = await pacote.manifest(`${packageName}@${toVersion}`, {\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n });\n\n // Compare authors/maintainers\n const fromAuthor = this.normalizeAuthor((fromVersionData as any).author);\n const toAuthor = this.normalizeAuthor((toVersionData as any).author);\n\n return fromAuthor !== toAuthor;\n } catch (error) {\n // Log for debugging, don't show to user as this is not critical\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'author-check',\n });\n return false;\n }\n }\n\n /**\n * Get package download statistics\n */\n async getDownloadStats(\n packageName: string,\n period: 'last-day' | 'last-week' | 'last-month' = 'last-week'\n ): Promise<number> {\n try {\n const response = await fetch(\n `https://api.npmjs.org/downloads/point/${period}/${packageName}`\n );\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const data = (await response.json()) as any;\n return data.downloads || 0;\n } catch (error) {\n // Log for debugging, don't show to user as this is not critical\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'download-stats',\n });\n return 0;\n }\n }\n\n /**\n * Clear all cache\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * Clear cache by type\n */\n clearCacheByType(type: 'versions' | 'package-info' | 'security' | 'all' = 'all'): void {\n if (type === 'all') {\n this.clearCache();\n return;\n }\n\n const prefix =\n type === 'versions'\n ? 'package-versions:'\n : type === 'package-info'\n ? 'package-info:'\n : 'security:';\n\n const keysToDelete: string[] = [];\n for (const key of this.cache.keys()) {\n if (key.startsWith(prefix)) {\n keysToDelete.push(key);\n }\n }\n\n keysToDelete.forEach((key) => this.cache.delete(key));\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats(): {\n total: number;\n versions: number;\n packageInfo: number;\n security: number;\n expired: number;\n } {\n const stats = { total: 0, versions: 0, packageInfo: 0, security: 0, expired: 0 };\n const now = Date.now();\n\n for (const [key, cached] of this.cache.entries()) {\n stats.total++;\n\n const timeout = this.getCacheTimeout(key);\n if (now - cached.timestamp > timeout) {\n stats.expired++;\n continue;\n }\n\n if (key.startsWith('package-versions:')) {\n stats.versions++;\n } else if (key.startsWith('package-info:')) {\n stats.packageInfo++;\n } else if (key.startsWith('security:')) {\n stats.security++;\n }\n }\n\n return stats;\n }\n\n /**\n * Get item from cache if not expired\n */\n private getFromCache(key: string): any | null {\n const cached = this.cache.get(key);\n if (!cached) {\n return null;\n }\n\n // Determine timeout based on cache key type\n const timeout = this.getCacheTimeout(key);\n\n if (Date.now() - cached.timestamp > timeout) {\n this.cache.delete(key);\n return null;\n }\n\n return cached.data;\n }\n\n /**\n * Get appropriate cache timeout based on key type\n */\n private getCacheTimeout(key: string): number {\n if (key.startsWith('package-versions:')) {\n return this.versionCacheTimeout;\n } else if (key.startsWith('security:')) {\n return this.securityCacheTimeout;\n } else if (key.startsWith('package-info:')) {\n return this.packageInfoCacheTimeout;\n }\n\n // Default to version cache timeout for unknown keys\n return this.versionCacheTimeout;\n }\n\n /**\n * Set item in cache\n */\n private setCache(key: string, data: any): void {\n this.cache.set(key, {\n data,\n timestamp: Date.now(),\n });\n }\n\n /**\n * Split array into chunks\n */\n private chunkArray<T>(array: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size));\n }\n return chunks;\n }\n\n /**\n * Normalize author for comparison\n */\n private normalizeAuthor(author: any): string {\n if (typeof author === 'string') {\n return author.toLowerCase().trim();\n }\n if (typeof author === 'object' && author?.name) {\n return author.name.toLowerCase().trim();\n }\n return '';\n }\n}\n","/**\n * Catalog Update Service\n *\n * Core application service that handles catalog dependency updates.\n * Orchestrates domain objects and infrastructure services to provide\n * high-level use cases for checking and updating catalog dependencies.\n */\n\nimport { AdvancedConfig, ConfigLoader, UserFriendlyErrorHandler } from '@pcu/utils';\nimport { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js';\nimport { Version, VersionRange } from '../../domain/value-objects/version.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\nimport { NpmRegistryService } from '../../infrastructure/external-services/npmRegistryService.js';\nimport { ProgressReporter } from '../interfaces/progressReporter.js';\n\nexport interface CheckOptions {\n workspacePath?: string | undefined;\n catalogName?: string | undefined;\n target?: UpdateTarget | undefined;\n includePrerelease?: boolean | undefined;\n exclude?: string[] | undefined;\n include?: string[] | undefined;\n progressReporter?: ProgressReporter | null;\n}\n\nexport interface UpdateOptions extends CheckOptions {\n interactive?: boolean;\n dryRun?: boolean;\n force?: boolean;\n createBackup?: boolean;\n}\n\nexport interface OutdatedReport {\n workspace: {\n path: string;\n name: string;\n };\n catalogs: CatalogUpdateInfo[];\n totalOutdated: number;\n hasUpdates: boolean;\n}\n\nexport interface CatalogUpdateInfo {\n catalogName: string;\n outdatedDependencies: OutdatedDependencyInfo[];\n totalPackages: number;\n outdatedCount: number;\n}\n\nexport interface OutdatedDependencyInfo {\n packageName: string;\n currentVersion: string;\n latestVersion: string;\n wantedVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n isSecurityUpdate: boolean;\n affectedPackages: string[];\n}\n\nexport interface UpdatePlan {\n workspace: {\n path: string;\n name: string;\n };\n updates: PlannedUpdate[];\n conflicts: VersionConflict[];\n totalUpdates: number;\n hasConflicts: boolean;\n}\n\nexport interface PlannedUpdate {\n catalogName: string;\n packageName: string;\n currentVersion: string;\n newVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n reason: string;\n affectedPackages: string[];\n requireConfirmation?: boolean;\n autoUpdate?: boolean;\n groupUpdate?: boolean;\n}\n\nexport interface VersionConflict {\n packageName: string;\n catalogs: Array<{\n catalogName: string;\n currentVersion: string;\n proposedVersion: string;\n }>;\n recommendation: string;\n}\n\nexport interface UpdateResult {\n success: boolean;\n workspace: {\n path: string;\n name: string;\n };\n updatedDependencies: UpdatedDependency[];\n skippedDependencies: SkippedDependency[];\n errors: UpdateError[];\n totalUpdated: number;\n totalSkipped: number;\n totalErrors: number;\n}\n\nexport interface UpdatedDependency {\n catalogName: string;\n packageName: string;\n fromVersion: string;\n toVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n}\n\nexport interface SkippedDependency {\n catalogName: string;\n packageName: string;\n currentVersion: string;\n reason: string;\n}\n\nexport interface UpdateError {\n catalogName: string;\n packageName: string;\n error: string;\n fatal: boolean;\n}\n\nexport interface ImpactAnalysis {\n packageName: string;\n catalogName: string;\n currentVersion: string;\n proposedVersion: string;\n updateType: 'major' | 'minor' | 'patch';\n affectedPackages: PackageImpact[];\n riskLevel: 'low' | 'medium' | 'high';\n securityImpact: SecurityImpact;\n recommendations: string[];\n}\n\nexport interface PackageImpact {\n packageName: string;\n packagePath: string;\n dependencyType: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies';\n isBreakingChange: boolean;\n compatibilityRisk: 'low' | 'medium' | 'high';\n}\n\nexport interface SecurityImpact {\n hasVulnerabilities: boolean;\n fixedVulnerabilities: number;\n newVulnerabilities: number;\n severityChange: 'better' | 'worse' | 'same';\n}\n\nexport type UpdateTarget = 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n\nexport class CatalogUpdateService {\n constructor(\n private readonly workspaceRepository: WorkspaceRepository,\n private readonly registryService: NpmRegistryService\n ) {}\n\n /**\n * Create a new CatalogUpdateService with advanced configuration\n */\n static createWithConfig(\n workspaceRepository: WorkspaceRepository,\n workspacePath?: string\n ): CatalogUpdateService {\n const config = ConfigLoader.loadConfig(workspacePath || process.cwd());\n\n // Create registry service with advanced configuration\n const advancedConfig: AdvancedConfig = {};\n\n if (config.advanced?.concurrency !== undefined) {\n advancedConfig.concurrency = config.advanced.concurrency;\n }\n if (config.advanced?.timeout !== undefined) {\n advancedConfig.timeout = config.advanced.timeout;\n }\n if (config.advanced?.retries !== undefined) {\n advancedConfig.retries = config.advanced.retries;\n }\n if (config.advanced?.cacheValidityMinutes !== undefined) {\n advancedConfig.cacheValidityMinutes = config.advanced.cacheValidityMinutes;\n }\n\n // Use default registry for now, npmrc will handle scoped registries\n const registryUrl = 'https://registry.npmjs.org/';\n const workingDirectory = workspacePath || process.cwd();\n\n const registryService = new NpmRegistryService(registryUrl, advancedConfig, workingDirectory);\n\n return new CatalogUpdateService(workspaceRepository, registryService);\n }\n\n /**\n * Check for outdated catalog dependencies\n */\n async checkOutdatedDependencies(options: CheckOptions = {}): Promise<OutdatedReport> {\n const workspacePath = WorkspacePath.fromString(options.workspacePath || process.cwd());\n\n // Load configuration\n const config = ConfigLoader.loadConfig(workspacePath.toString());\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(workspacePath);\n if (!workspace) {\n throw new Error(`No pnpm workspace found at ${workspacePath.toString()}`);\n }\n\n const catalogs = workspace.getCatalogs();\n const catalogInfos: CatalogUpdateInfo[] = [];\n let totalOutdated = 0;\n\n // Filter catalogs if specific catalog requested\n const catalogsToCheck = options.catalogName\n ? [catalogs.get(options.catalogName)].filter(Boolean)\n : catalogs.getAll();\n\n if (catalogsToCheck.length === 0) {\n throw new Error(\n options.catalogName\n ? `Catalog \"${options.catalogName}\" not found`\n : 'No catalogs found in workspace'\n );\n }\n\n // Calculate total packages across all catalogs\n let totalPackages = 0;\n const allPackagesToCheck: Array<[string, any, any]> = [];\n\n for (const catalog of catalogsToCheck) {\n if (!catalog) continue;\n const dependencies = catalog.getDependencies();\n const packageArray = Array.from(dependencies);\n\n const packagesToCheck = packageArray.filter(([packageName]) => {\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config);\n return packageConfig.shouldUpdate;\n });\n\n // Add catalog info to each package for processing\n packagesToCheck.forEach(([packageName, range]) => {\n allPackagesToCheck.push([packageName, range, catalog]);\n });\n\n totalPackages += packagesToCheck.length;\n }\n\n // Create a single progress bar for all catalogs\n let progressReporter: ProgressReporter | null = null;\n if (totalPackages > 0 && options.progressReporter) {\n progressReporter = options.progressReporter;\n progressReporter.start(`正在检查 ${totalPackages} 个依赖包...`, totalPackages);\n }\n\n let completed = 0;\n\n // Check each catalog for outdated dependencies\n for (const catalog of catalogsToCheck) {\n if (!catalog) {\n throw new Error(`Catalog \"${catalogsToCheck[0]?.getName() || 'unknown'}\" not found`);\n }\n const dependencies = catalog.getDependencies();\n\n // Convert to array for parallel processing\n const packageArray = Array.from(dependencies);\n\n // Filter packages that should be updated based on configuration\n const packagesToCheck = packageArray.filter(([packageName]) => {\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config);\n return packageConfig.shouldUpdate;\n });\n\n // Process packages in parallel with concurrency control (pass progress info)\n const outdatedDependencies = await this.processPackagesInParallel(\n packagesToCheck,\n catalog,\n workspace,\n config,\n options,\n progressReporter,\n completed,\n totalPackages\n );\n\n // Update completed count\n completed += packagesToCheck.length;\n\n const catalogInfo: CatalogUpdateInfo = {\n catalogName: catalog!.getName(),\n outdatedDependencies,\n totalPackages: dependencies.size,\n outdatedCount: outdatedDependencies.length,\n };\n\n catalogInfos.push(catalogInfo);\n totalOutdated += outdatedDependencies.length;\n }\n\n // Complete the progress bar\n if (progressReporter) {\n if (totalOutdated > 0) {\n progressReporter.success(`✅ 检查完成! 发现 ${totalOutdated} 个可更新的依赖包`);\n } else {\n progressReporter.success('✅ 检查完成! 所有依赖包都是最新的');\n }\n }\n\n return {\n workspace: {\n path: workspacePath.toString(),\n name: workspacePath.getDirectoryName(),\n },\n catalogs: catalogInfos,\n totalOutdated,\n hasUpdates: totalOutdated > 0,\n };\n }\n\n /**\n * Plan catalog dependency updates\n */\n async planUpdates(options: UpdateOptions): Promise<UpdatePlan> {\n const outdatedReport = await this.checkOutdatedDependencies(options);\n\n const updates: PlannedUpdate[] = [];\n const conflicts: VersionConflict[] = [];\n\n // Load configuration for package rules and monorepo settings\n const workspacePath = options.workspacePath || process.cwd();\n const config = ConfigLoader.loadConfig(workspacePath);\n\n // Convert outdated dependencies to planned updates\n for (const catalogInfo of outdatedReport.catalogs) {\n for (const outdated of catalogInfo.outdatedDependencies) {\n // Get package-specific configuration\n const packageConfig = ConfigLoader.getPackageConfig(outdated.packageName, config);\n\n const update: PlannedUpdate = {\n catalogName: catalogInfo.catalogName,\n packageName: outdated.packageName,\n currentVersion: outdated.currentVersion,\n newVersion: outdated.latestVersion,\n updateType: outdated.updateType,\n reason: this.getUpdateReason(outdated),\n affectedPackages: outdated.affectedPackages,\n requireConfirmation: packageConfig.requireConfirmation,\n autoUpdate: packageConfig.autoUpdate,\n groupUpdate: packageConfig.groupUpdate,\n };\n\n updates.push(update);\n }\n }\n\n // Handle syncVersions - ensure packages in syncVersions list are synchronized across catalogs\n if (config.monorepo?.syncVersions && config.monorepo.syncVersions.length > 0) {\n const workspacePathObj = WorkspacePath.fromString(workspacePath);\n const workspace = await this.workspaceRepository.findByPath(workspacePathObj);\n\n if (workspace) {\n updates.push(\n ...(await this.createSyncVersionUpdates(config.monorepo.syncVersions, workspace, updates))\n );\n }\n }\n\n // Detect conflicts (same package in multiple catalogs with different versions)\n const packageCatalogMap = new Map<string, PlannedUpdate[]>();\n\n for (const update of updates) {\n if (!packageCatalogMap.has(update.packageName)) {\n packageCatalogMap.set(update.packageName, []);\n }\n packageCatalogMap.get(update.packageName)!.push(update);\n }\n\n // Handle conflicts with catalogPriority\n for (const [packageName, packageUpdates] of packageCatalogMap) {\n if (packageUpdates.length > 1) {\n const uniqueVersions = new Set(packageUpdates.map((u) => u.newVersion));\n if (uniqueVersions.size > 1) {\n const resolvedConflict = this.resolveVersionConflict(\n packageName,\n packageUpdates,\n config.monorepo?.catalogPriority || ['default']\n );\n\n if (resolvedConflict) {\n conflicts.push(resolvedConflict);\n }\n }\n }\n }\n\n return {\n workspace: outdatedReport.workspace,\n updates,\n conflicts,\n totalUpdates: updates.length,\n hasConflicts: conflicts.length > 0,\n };\n }\n\n /**\n * Execute catalog dependency updates\n */\n async executeUpdates(plan: UpdatePlan, options: UpdateOptions): Promise<UpdateResult> {\n const workspacePath = WorkspacePath.fromString(plan.workspace.path);\n\n // Load configuration for security settings\n const config = ConfigLoader.loadConfig(workspacePath.toString());\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(workspacePath);\n if (!workspace) {\n throw new Error(`Workspace not found at ${workspacePath.toString()}`);\n }\n\n const updatedDependencies: UpdatedDependency[] = [];\n const skippedDependencies: SkippedDependency[] = [];\n const errors: UpdateError[] = [];\n\n // Track security updates for notification\n const securityUpdates: string[] = [];\n\n // Execute updates\n for (const update of plan.updates) {\n try {\n // Skip if conflicts exist and force is not enabled\n if (plan.hasConflicts && !options.force) {\n const hasConflict = plan.conflicts.some((c) => c.packageName === update.packageName);\n if (hasConflict) {\n skippedDependencies.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n currentVersion: update.currentVersion,\n reason: 'Version conflict - use --force to override',\n });\n continue;\n }\n }\n\n // Check if this is a security update and track it\n let isSecurityUpdate = false;\n if (config.security?.notifyOnSecurityUpdate) {\n try {\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n update.packageName,\n update.currentVersion\n );\n if (securityReport.hasVulnerabilities) {\n isSecurityUpdate = true;\n securityUpdates.push(\n `${update.packageName}@${update.currentVersion} → ${update.newVersion}`\n );\n }\n } catch (error) {\n UserFriendlyErrorHandler.handleSecurityCheckFailure(\n update.packageName,\n error as Error,\n { operation: 'update' }\n );\n }\n }\n\n // Perform the update\n workspace.updateCatalogDependency(\n update.catalogName,\n update.packageName,\n update.newVersion\n );\n\n updatedDependencies.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n fromVersion: update.currentVersion,\n toVersion: update.newVersion,\n updateType: update.updateType,\n });\n\n // Log security update notification\n if (isSecurityUpdate && config.security?.notifyOnSecurityUpdate) {\n console.log(\n `✅ Security fix applied: ${update.packageName}@${update.currentVersion} → ${update.newVersion}`\n );\n }\n } catch (error) {\n errors.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n error: String(error),\n fatal: false,\n });\n }\n }\n\n // Save workspace if not in dry-run mode\n if (!options.dryRun && updatedDependencies.length > 0) {\n try {\n await this.workspaceRepository.save(workspace);\n\n // Show summary of security updates if any\n if (securityUpdates.length > 0 && config.security?.notifyOnSecurityUpdate) {\n console.log(`\\n🔒 Security Updates Summary:`);\n console.log(` Applied ${securityUpdates.length} security fix(es):`);\n securityUpdates.forEach((update) => console.log(` • ${update}`));\n }\n\n // Show summary of synced version updates\n const syncUpdates = updatedDependencies.filter((u) =>\n plan.updates.find(\n (pu) =>\n pu.packageName === u.packageName &&\n pu.catalogName === u.catalogName &&\n pu.reason.includes('Sync version')\n )\n );\n\n if (syncUpdates.length > 0) {\n console.log(`\\n🔄 Version Sync Summary:`);\n const syncedPackages = new Set(syncUpdates.map((u) => u.packageName));\n console.log(` Synchronized ${syncedPackages.size} package(s) across catalogs:`);\n\n // Group by package name\n const syncByPackage = new Map<string, typeof syncUpdates>();\n syncUpdates.forEach((update) => {\n if (!syncByPackage.has(update.packageName)) {\n syncByPackage.set(update.packageName, []);\n }\n syncByPackage.get(update.packageName)!.push(update);\n });\n\n syncByPackage.forEach((updates, packageName) => {\n const catalogs = updates.map((u) => u.catalogName).join(', ');\n const version = updates[0]?.toVersion;\n console.log(` • ${packageName}@${version} in catalogs: ${catalogs}`);\n });\n }\n\n // Show catalog priority resolution if any\n if (\n plan.hasConflicts &&\n plan.conflicts.some((c) => c.recommendation.includes('Priority catalog'))\n ) {\n console.log(`\\n📋 Catalog Priority Resolutions:`);\n plan.conflicts\n .filter((c) => c.recommendation.includes('Priority catalog'))\n .forEach((conflict) => {\n console.log(` • ${conflict.packageName}: ${conflict.recommendation}`);\n });\n }\n } catch (error) {\n errors.push({\n catalogName: '',\n packageName: '',\n error: `Failed to save workspace: ${error}`,\n fatal: true,\n });\n }\n }\n\n return {\n success: errors.filter((e) => e.fatal).length === 0,\n workspace: plan.workspace,\n updatedDependencies,\n skippedDependencies,\n errors,\n totalUpdated: updatedDependencies.length,\n totalSkipped: skippedDependencies.length,\n totalErrors: errors.length,\n };\n }\n\n /**\n * Analyze the impact of updating a specific dependency\n */\n async analyzeImpact(\n catalogName: string,\n packageName: string,\n newVersion: string,\n workspacePath?: string\n ): Promise<ImpactAnalysis> {\n const wsPath = WorkspacePath.fromString(workspacePath || process.cwd());\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(wsPath);\n if (!workspace) {\n throw new Error(`No pnpm workspace found at ${wsPath.toString()}`);\n }\n\n const catalog = workspace.getCatalogs().get(catalogName);\n if (!catalog) {\n throw new Error(`Catalog \"${catalogName}\" not found`);\n }\n\n const currentRange = catalog.getDependencyVersion(packageName);\n if (!currentRange) {\n throw new Error(`Package \"${packageName}\" not found in catalog \"${catalogName}\"`);\n }\n\n const currentVersion = currentRange.toString();\n const proposedVersion = Version.fromString(newVersion);\n const currentVersionObj = currentRange.getMinVersion();\n\n if (!currentVersionObj) {\n throw new Error(`Cannot determine current version for ${packageName}`);\n }\n\n const updateType = currentVersionObj.getDifferenceType(proposedVersion);\n\n // Get affected packages\n const affectedPackagesCollection = workspace.getPackagesUsingCatalogDependency(\n catalogName,\n packageName\n );\n const packageImpacts: PackageImpact[] = [];\n\n for (const pkg of affectedPackagesCollection.getAll()) {\n const catalogRefs = pkg\n .getCatalogReferences()\n .filter(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n );\n\n for (const ref of catalogRefs) {\n const isBreakingChange = updateType === 'major';\n const compatibilityRisk = this.assessCompatibilityRisk(updateType);\n\n packageImpacts.push({\n packageName: pkg.getName(),\n packagePath: pkg.getPath().toString(),\n dependencyType: ref.getDependencyType(),\n isBreakingChange,\n compatibilityRisk,\n });\n }\n }\n\n // Check security impact\n const securityImpact = await this.analyzeSecurityImpact(\n packageName,\n currentVersion,\n newVersion\n );\n\n // Assess overall risk\n const riskLevel = this.assessOverallRisk(updateType, packageImpacts, securityImpact);\n\n // Generate recommendations\n const recommendations = this.generateRecommendations(\n updateType,\n securityImpact,\n packageImpacts\n );\n\n return {\n packageName,\n catalogName,\n currentVersion,\n proposedVersion: newVersion,\n updateType: updateType as 'major' | 'minor' | 'patch',\n affectedPackages: packageImpacts,\n riskLevel,\n securityImpact,\n recommendations,\n };\n }\n\n /**\n * Process packages in parallel with concurrency control and progress tracking\n */\n private async processPackagesInParallel(\n packagesToCheck: Array<[string, any]>,\n catalog: any,\n workspace: any,\n config: any,\n options: CheckOptions,\n progressReporter: ProgressReporter | null,\n startingCompleted: number = 0,\n totalPackages: number = 0\n ): Promise<OutdatedDependencyInfo[]> {\n const concurrency = config.advanced?.concurrency || 8; // Increased from 5 to match NCU\n const outdatedDependencies: OutdatedDependencyInfo[] = [];\n let completed = startingCompleted;\n\n // Process packages in chunks with true parallelism within each chunk\n const chunks = this.chunkArray(packagesToCheck, concurrency);\n\n for (const chunk of chunks) {\n const chunkResults = await Promise.all(\n chunk.map(async ([packageName, currentRange]) => {\n try {\n const result = await this.processPackageCheck(\n packageName,\n currentRange,\n catalog,\n workspace,\n config,\n options\n );\n\n // Update progress for successful package\n completed++;\n if (progressReporter && totalPackages > 0) {\n progressReporter.update(completed, `正在检查依赖包: ${packageName}`);\n }\n\n return result;\n } catch (error) {\n // Update progress even for failed packages\n completed++;\n if (progressReporter && totalPackages > 0) {\n progressReporter.update(completed, `跳过包 ${packageName} (检查失败)`);\n }\n\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'check',\n });\n return null;\n }\n })\n );\n\n // Add successful results to the array\n chunkResults.forEach((result) => {\n if (result) {\n outdatedDependencies.push(result);\n }\n });\n }\n\n return outdatedDependencies;\n }\n\n /**\n * Process a single package check (extracted from the main loop)\n */\n private async processPackageCheck(\n packageName: string,\n currentRange: any,\n catalog: any,\n workspace: any,\n config: any,\n options: CheckOptions\n ): Promise<OutdatedDependencyInfo | null> {\n // Get package-specific configuration\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config);\n const effectiveTarget = packageConfig.target as UpdateTarget;\n\n // Defer security checks - only do them after we know the package needs updating\n const outdatedInfo = await this.checkPackageUpdate(\n packageName,\n currentRange,\n effectiveTarget,\n options.includePrerelease || config.defaults?.includePrerelease || false\n );\n\n if (!outdatedInfo) {\n return null; // Package doesn't need updating\n }\n\n // Now check for security vulnerabilities only for packages that need updating\n let hasSecurityVulnerabilities = false;\n if (config.security?.autoFixVulnerabilities) {\n try {\n const currentVersion = currentRange.getMinVersion()?.toString();\n if (currentVersion) {\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n packageName,\n currentVersion\n );\n hasSecurityVulnerabilities = securityReport.hasVulnerabilities;\n\n // Allow major updates for security fixes if configured\n if (hasSecurityVulnerabilities && config.security.allowMajorForSecurity) {\n // Re-check with 'latest' target if security fix requires it\n const securityFixInfo = await this.checkPackageUpdate(\n packageName,\n currentRange,\n 'latest',\n options.includePrerelease || config.defaults?.includePrerelease || false\n );\n if (securityFixInfo) {\n Object.assign(outdatedInfo, securityFixInfo);\n }\n }\n }\n } catch (error) {\n UserFriendlyErrorHandler.handleSecurityCheckFailure(packageName, error as Error);\n }\n }\n\n // Get affected packages\n const affectedPackages = workspace\n .getPackagesUsingCatalogDependency(catalog.getName(), packageName)\n .getPackageNames();\n\n // Log security notifications if enabled\n if (hasSecurityVulnerabilities && config.security?.notifyOnSecurityUpdate) {\n console.warn(\n `🔒 Security vulnerability detected in ${packageName}@${outdatedInfo.currentVersion}`\n );\n }\n\n return {\n ...outdatedInfo,\n affectedPackages,\n isSecurityUpdate: hasSecurityVulnerabilities || outdatedInfo.isSecurityUpdate,\n };\n }\n\n /**\n * Split array into chunks for parallel processing\n */\n private chunkArray<T>(array: T[], chunkSize: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(array.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * Check if a package needs updating\n */\n private async checkPackageUpdate(\n packageName: string,\n currentRange: VersionRange,\n target: UpdateTarget,\n includePrerelease: boolean\n ): Promise<OutdatedDependencyInfo | null> {\n try {\n // Use lightweight version API for better performance\n const versionInfo = await this.registryService.getPackageVersions(packageName);\n\n let targetVersion: Version;\n\n switch (target) {\n case 'latest':\n targetVersion = Version.fromString(versionInfo.latestVersion);\n break;\n case 'greatest':\n targetVersion = await this.registryService.getGreatestVersion(packageName);\n break;\n case 'newest':\n const newestVersions = await this.registryService.getNewestVersions(packageName, 1);\n if (!newestVersions[0]) {\n throw new Error(`No versions found for ${packageName}`);\n }\n targetVersion = newestVersions[0];\n break;\n case 'minor':\n case 'patch':\n targetVersion = await this.getConstrainedVersion(packageName, currentRange, target);\n break;\n default:\n targetVersion = Version.fromString(versionInfo.latestVersion);\n }\n\n // Skip prereleases unless explicitly requested\n if (!includePrerelease && targetVersion.isPrerelease()) {\n return null;\n }\n\n const currentVersion = currentRange.getMinVersion();\n if (!currentVersion) {\n return null;\n }\n\n // Check if update is needed\n if (!targetVersion.isNewerThan(currentVersion)) {\n return null;\n }\n\n const updateType = currentVersion.getDifferenceType(targetVersion);\n\n // Check for security vulnerabilities\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n packageName,\n currentVersion.toString()\n );\n\n return {\n packageName,\n currentVersion: currentVersion.toString(),\n latestVersion: targetVersion.toString(),\n wantedVersion: targetVersion.toString(),\n updateType: updateType as 'major' | 'minor' | 'patch',\n isSecurityUpdate: securityReport.hasVulnerabilities,\n affectedPackages: [], // Will be filled by caller\n };\n } catch (error) {\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'update-check',\n });\n return null;\n }\n }\n\n /**\n * Get version constrained by update type\n */\n private async getConstrainedVersion(\n packageName: string,\n currentRange: VersionRange,\n constraint: 'minor' | 'patch'\n ): Promise<Version> {\n const currentVersion = currentRange.getMinVersion();\n if (!currentVersion) {\n throw new Error(`Cannot determine current version for ${packageName}`);\n }\n\n const versionInfo = await this.registryService.getPackageVersions(packageName);\n\n // Filter versions based on constraint\n const compatibleVersions = versionInfo.versions.filter((v) => {\n try {\n const version = Version.fromString(v);\n const diff = currentVersion.getDifferenceType(version);\n\n if (constraint === 'patch') {\n return diff === 'patch' || diff === 'same';\n } else if (constraint === 'minor') {\n return diff === 'minor' || diff === 'patch' || diff === 'same';\n }\n\n return false;\n } catch {\n return false;\n }\n });\n\n if (compatibleVersions.length === 0) {\n return currentVersion;\n }\n\n // Return the highest compatible version\n if (!compatibleVersions[0]) {\n throw new Error(`No compatible versions found for ${packageName}`);\n }\n return Version.fromString(compatibleVersions[0]);\n }\n\n /**\n * Generate update reason description\n */\n private getUpdateReason(outdated: OutdatedDependencyInfo): string {\n if (outdated.isSecurityUpdate) {\n return 'Security update available';\n }\n\n switch (outdated.updateType) {\n case 'major':\n return 'Major version update available';\n case 'minor':\n return 'Minor version update available';\n case 'patch':\n return 'Patch version update available';\n default:\n return 'Update available';\n }\n }\n\n /**\n * Analyze security impact of version change\n */\n private async analyzeSecurityImpact(\n packageName: string,\n currentVersion: string,\n newVersion: string\n ): Promise<SecurityImpact> {\n try {\n const [currentSecurity, newSecurity] = await Promise.all([\n this.registryService.checkSecurityVulnerabilities(packageName, currentVersion),\n this.registryService.checkSecurityVulnerabilities(packageName, newVersion),\n ]);\n\n const fixedVulnerabilities =\n currentSecurity.vulnerabilities.length - newSecurity.vulnerabilities.length;\n const newVulnerabilities = Math.max(\n 0,\n newSecurity.vulnerabilities.length - currentSecurity.vulnerabilities.length\n );\n\n let severityChange: SecurityImpact['severityChange'] = 'same';\n if (fixedVulnerabilities > 0) {\n severityChange = 'better';\n } else if (newVulnerabilities > 0) {\n severityChange = 'worse';\n }\n\n return {\n hasVulnerabilities: currentSecurity.hasVulnerabilities || newSecurity.hasVulnerabilities,\n fixedVulnerabilities: Math.max(0, fixedVulnerabilities),\n newVulnerabilities,\n severityChange,\n };\n } catch {\n return {\n hasVulnerabilities: false,\n fixedVulnerabilities: 0,\n newVulnerabilities: 0,\n severityChange: 'same',\n };\n }\n }\n\n /**\n * Assess compatibility risk for update type\n */\n private assessCompatibilityRisk(updateType: string): 'low' | 'medium' | 'high' {\n switch (updateType) {\n case 'patch':\n return 'low';\n case 'minor':\n return 'medium';\n case 'major':\n return 'high';\n default:\n return 'medium';\n }\n }\n\n /**\n * Assess overall risk level\n */\n private assessOverallRisk(\n updateType: string,\n packageImpacts: PackageImpact[],\n securityImpact: SecurityImpact\n ): 'low' | 'medium' | 'high' {\n // Security fixes reduce risk\n if (securityImpact.fixedVulnerabilities > 0) {\n return updateType === 'major' ? 'medium' : 'low';\n }\n\n // New vulnerabilities increase risk\n if (securityImpact.newVulnerabilities > 0) {\n return 'high';\n }\n\n // Base risk on update type and number of affected packages\n const affectedPackageCount = packageImpacts.length;\n\n if (updateType === 'major') {\n return affectedPackageCount > 5 ? 'high' : 'medium';\n } else if (updateType === 'minor') {\n return affectedPackageCount > 10 ? 'medium' : 'low';\n } else {\n return 'low';\n }\n }\n\n /**\n * Generate recommendations based on analysis\n */\n private generateRecommendations(\n updateType: string,\n securityImpact: SecurityImpact,\n packageImpacts: PackageImpact[]\n ): string[] {\n const recommendations: string[] = [];\n\n if (securityImpact.fixedVulnerabilities > 0) {\n recommendations.push('🔒 Security update recommended - fixes known vulnerabilities');\n }\n\n if (securityImpact.newVulnerabilities > 0) {\n recommendations.push('⚠️ New vulnerabilities detected - review carefully before updating');\n }\n\n if (updateType === 'major') {\n recommendations.push('📖 Review changelog for breaking changes before updating');\n recommendations.push('🧪 Test thoroughly in development environment');\n }\n\n const breakingChangePackages = packageImpacts.filter((p) => p.isBreakingChange);\n if (breakingChangePackages.length > 0) {\n recommendations.push(`🔧 ${breakingChangePackages.length} package(s) may need code changes`);\n }\n\n if (packageImpacts.length > 5) {\n recommendations.push('📦 Many packages affected - consider updating in batches');\n }\n\n if (recommendations.length === 0) {\n recommendations.push('✅ Low risk update - safe to proceed');\n }\n\n return recommendations;\n }\n\n /**\n * Create sync version updates for packages that should be synchronized across catalogs\n */\n private async createSyncVersionUpdates(\n syncVersions: string[],\n workspace: any,\n existingUpdates: PlannedUpdate[]\n ): Promise<PlannedUpdate[]> {\n const syncUpdates: PlannedUpdate[] = [];\n const catalogs = workspace.getCatalogs();\n const allCatalogs = catalogs.getAll();\n\n for (const packageName of syncVersions) {\n // Check if this package exists in multiple catalogs\n const catalogsWithPackage = allCatalogs.filter(\n (catalog: any) => catalog && catalog.getDependencyVersion(packageName)\n );\n\n if (catalogsWithPackage.length <= 1) {\n continue; // No need to sync if package is only in one catalog\n }\n\n // Find the highest version from existing updates or determine target version\n let targetVersion: string | null = null;\n let targetUpdateType: 'major' | 'minor' | 'patch' = 'patch';\n\n // Check if this package has any existing updates\n const existingUpdate = existingUpdates.find((u) => u.packageName === packageName);\n if (existingUpdate) {\n targetVersion = existingUpdate.newVersion;\n targetUpdateType = existingUpdate.updateType;\n } else {\n // Get latest version for this package using lightweight API\n try {\n const versionInfo = await this.registryService.getPackageVersions(packageName);\n targetVersion = versionInfo.latestVersion;\n } catch (error) {\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'sync',\n });\n continue;\n }\n }\n\n if (!targetVersion) continue;\n\n // Create sync updates for all catalogs that need updating\n for (const catalog of catalogsWithPackage) {\n const currentRange = catalog.getDependencyVersion(packageName);\n if (!currentRange) continue;\n\n const currentVersion = currentRange.getMinVersion();\n if (!currentVersion) continue;\n\n const currentVersionString = currentVersion.toString();\n\n // Skip if already at target version\n if (currentVersionString === targetVersion) continue;\n\n // Check if this update already exists\n const existingUpdateForCatalog = existingUpdates.find(\n (u) => u.packageName === packageName && u.catalogName === catalog.getName()\n );\n\n if (existingUpdateForCatalog) {\n // Update the existing update to use the sync version\n existingUpdateForCatalog.newVersion = targetVersion;\n existingUpdateForCatalog.reason = `Sync version across catalogs: ${existingUpdateForCatalog.reason}`;\n } else {\n // Create new sync update\n const affectedPackages = workspace\n .getPackagesUsingCatalogDependency(catalog.getName(), packageName)\n .getPackageNames();\n\n const syncUpdate: PlannedUpdate = {\n catalogName: catalog.getName(),\n packageName: packageName,\n currentVersion: currentVersionString,\n newVersion: targetVersion,\n updateType: targetUpdateType,\n reason: `Sync version with other catalogs`,\n affectedPackages,\n requireConfirmation: true, // Sync updates should be confirmed\n autoUpdate: false,\n groupUpdate: true,\n };\n\n syncUpdates.push(syncUpdate);\n }\n }\n }\n\n return syncUpdates;\n }\n\n /**\n * Resolve version conflicts using catalog priority\n */\n private resolveVersionConflict(\n packageName: string,\n packageUpdates: PlannedUpdate[],\n catalogPriority: string[]\n ): VersionConflict | null {\n // Find the highest priority catalog with an update for this package\n let priorityCatalog: PlannedUpdate | null = null;\n\n for (const catalogName of catalogPriority) {\n const catalogUpdate = packageUpdates.find((u) => u.catalogName === catalogName);\n if (catalogUpdate) {\n priorityCatalog = catalogUpdate;\n break;\n }\n }\n\n // If no priority catalog found, use the first one\n if (!priorityCatalog) {\n priorityCatalog = packageUpdates[0] || null;\n }\n\n // Update all other catalogs to use the priority catalog's version\n const priorityVersion = priorityCatalog?.newVersion;\n if (priorityVersion && priorityCatalog) {\n for (const update of packageUpdates) {\n if (update.catalogName !== priorityCatalog.catalogName) {\n update.newVersion = priorityVersion;\n update.reason = `Using version from priority catalog (${priorityCatalog.catalogName}): ${update.reason}`;\n }\n }\n }\n\n // Create conflict record for reporting\n const uniqueVersions = new Set(packageUpdates.map((u) => u.newVersion));\n if (uniqueVersions.size > 1) {\n return {\n packageName,\n catalogs: packageUpdates.map((u) => ({\n catalogName: u.catalogName,\n currentVersion: u.currentVersion,\n proposedVersion: u.newVersion,\n })),\n recommendation: `Resolved using catalog priority. Priority catalog '${priorityCatalog?.catalogName}' version '${priorityVersion}' selected.`,\n };\n }\n\n return null;\n }\n}\n","/**\n * Workspace Service\n *\n * Application service for workspace discovery, validation, and management.\n * Provides high-level operations for working with pnpm workspaces.\n */\n\nimport { Workspace } from '../../domain/entities/workspace.js';\nimport { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\n\nexport interface WorkspaceInfo {\n path: string;\n name: string;\n isValid: boolean;\n hasPackages: boolean;\n hasCatalogs: boolean;\n packageCount: number;\n catalogCount: number;\n catalogNames: string[];\n}\n\nexport interface WorkspaceValidationReport {\n isValid: boolean;\n workspace: WorkspaceInfo;\n errors: string[];\n warnings: string[];\n recommendations: string[];\n}\n\nexport interface CatalogInfo {\n name: string;\n packageCount: number;\n packages: string[];\n mode: string;\n}\n\nexport interface PackageInfo {\n name: string;\n path: string;\n hasPackageJson: boolean;\n catalogReferences: CatalogReferenceInfo[];\n dependencies: DependencyInfo[];\n}\n\nexport interface CatalogReferenceInfo {\n catalogName: string;\n packageName: string;\n dependencyType: string;\n}\n\nexport interface DependencyInfo {\n name: string;\n version: string;\n type: string;\n isCatalogReference: boolean;\n}\n\nexport class WorkspaceService {\n constructor(private readonly workspaceRepository: WorkspaceRepository) {}\n\n /**\n * Discover workspace from current directory or specified path\n */\n async discoverWorkspace(searchPath?: string): Promise<Workspace> {\n const path = searchPath ? WorkspacePath.fromString(searchPath) : undefined;\n\n const workspace = await this.workspaceRepository.discoverWorkspace(path);\n\n if (!workspace) {\n throw new Error(\n searchPath\n ? `No pnpm workspace found at or above ${searchPath}`\n : 'No pnpm workspace found in current directory or parent directories'\n );\n }\n\n return workspace;\n }\n\n /**\n * Get workspace information\n */\n async getWorkspaceInfo(workspacePath?: string): Promise<WorkspaceInfo> {\n const path = WorkspacePath.fromString(workspacePath || process.cwd());\n\n // Try to load workspace\n const workspace = await this.workspaceRepository.findByPath(path);\n\n if (!workspace) {\n return {\n path: path.toString(),\n name: path.getDirectoryName(),\n isValid: false,\n hasPackages: false,\n hasCatalogs: false,\n packageCount: 0,\n catalogCount: 0,\n catalogNames: [],\n };\n }\n\n const packages = workspace.getPackages();\n const catalogs = workspace.getCatalogs();\n\n return {\n path: path.toString(),\n name: path.getDirectoryName(),\n isValid: true,\n hasPackages: !packages.isEmpty(),\n hasCatalogs: !catalogs.isEmpty(),\n packageCount: packages.size(),\n catalogCount: catalogs.size(),\n catalogNames: catalogs.getCatalogNames(),\n };\n }\n\n /**\n * Validate workspace integrity and configuration\n */\n async validateWorkspace(workspacePath?: string): Promise<WorkspaceValidationReport> {\n const path = WorkspacePath.fromString(workspacePath || process.cwd());\n const workspaceInfo = await this.getWorkspaceInfo(workspacePath);\n\n if (!workspaceInfo.isValid) {\n return {\n isValid: false,\n workspace: workspaceInfo,\n errors: ['Not a valid pnpm workspace'],\n warnings: [],\n recommendations: [\n 'Initialize a pnpm workspace with: pnpm init',\n 'Create pnpm-workspace.yaml file',\n 'Define package patterns in pnpm-workspace.yaml',\n ],\n };\n }\n\n // Load workspace for detailed validation\n const workspace = await this.workspaceRepository.findByPath(path);\n if (!workspace) {\n throw new Error('Workspace validation failed - workspace not found');\n }\n\n // Validate workspace consistency\n const validationResult = workspace.validateConsistency();\n const recommendations: string[] = [];\n\n // Generate recommendations based on workspace state\n if (!workspaceInfo.hasCatalogs) {\n recommendations.push('Consider using catalogs to centralize dependency management');\n }\n\n if (workspaceInfo.packageCount === 0) {\n recommendations.push(\n 'No packages found - check your package patterns in pnpm-workspace.yaml'\n );\n }\n\n if (workspaceInfo.packageCount > 20) {\n recommendations.push(\n 'Large workspace detected - consider organizing packages into logical groups'\n );\n }\n\n // Validate catalogs\n const catalogValidation = workspace.getCatalogs().validate();\n const allErrors = [...validationResult.getErrors(), ...catalogValidation.getErrors()];\n const allWarnings = [...validationResult.getWarnings(), ...catalogValidation.getWarnings()];\n\n return {\n isValid: validationResult.getIsValid() && catalogValidation.getIsValid(),\n workspace: workspaceInfo,\n errors: allErrors,\n warnings: allWarnings,\n recommendations,\n };\n }\n\n /**\n * Get detailed catalog information\n */\n async getCatalogs(workspacePath?: string): Promise<CatalogInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const catalogs = workspace.getCatalogs();\n\n return catalogs.getAll().map((catalog) => ({\n name: catalog.getName(),\n packageCount: catalog.getPackageNames().length,\n packages: catalog.getPackageNames(),\n mode: catalog.getMode(),\n }));\n }\n\n /**\n * Get detailed package information\n */\n async getPackages(workspacePath?: string): Promise<PackageInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const packages = workspace.getPackages();\n\n return packages.getAll().map((pkg) => {\n const catalogReferences = pkg.getCatalogReferences();\n const dependencies = pkg.getDependencies();\n\n // Collect all dependencies from all types\n const allDependencies: DependencyInfo[] = [];\n const depTypes = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const;\n\n for (const depType of depTypes) {\n const deps = dependencies.getDependenciesByType(depType);\n for (const [name, version] of deps) {\n allDependencies.push({\n name,\n version,\n type: depType,\n isCatalogReference: version.startsWith('catalog:'),\n });\n }\n }\n\n return {\n name: pkg.getName(),\n path: pkg.getPath().toString(),\n hasPackageJson: true, // If package was loaded, it has package.json\n catalogReferences: catalogReferences.map((ref) => ({\n catalogName: ref.getCatalogName(),\n packageName: ref.getPackageName(),\n dependencyType: ref.getDependencyType(),\n })),\n dependencies: allDependencies,\n };\n });\n }\n\n /**\n * Check if workspace uses catalogs\n */\n async usesCatalogs(workspacePath?: string): Promise<boolean> {\n try {\n const workspace = await this.discoverWorkspace(workspacePath);\n return !workspace.getCatalogs().isEmpty();\n } catch {\n return false;\n }\n }\n\n /**\n * Get packages that use a specific catalog\n */\n async getPackagesUsingCatalog(\n catalogName: string,\n workspacePath?: string\n ): Promise<PackageInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const packagesUsingCatalog = workspace.getPackages().findPackagesUsingCatalog(catalogName);\n\n return packagesUsingCatalog.map((pkg) => {\n const catalogReferences = pkg\n .getCatalogReferences()\n .filter((ref) => ref.getCatalogName() === catalogName);\n\n const dependencies = pkg.getDependencies();\n const allDependencies: DependencyInfo[] = [];\n const depTypes = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const;\n\n for (const depType of depTypes) {\n const deps = dependencies.getDependenciesByType(depType);\n for (const [name, version] of deps) {\n allDependencies.push({\n name,\n version,\n type: depType,\n isCatalogReference: version.startsWith('catalog:'),\n });\n }\n }\n\n return {\n name: pkg.getName(),\n path: pkg.getPath().toString(),\n hasPackageJson: true,\n catalogReferences: catalogReferences.map((ref) => ({\n catalogName: ref.getCatalogName(),\n packageName: ref.getPackageName(),\n dependencyType: ref.getDependencyType(),\n })),\n dependencies: allDependencies,\n };\n });\n }\n\n /**\n * Get workspace statistics\n */\n async getWorkspaceStats(workspacePath?: string): Promise<WorkspaceStats> {\n const workspace = await this.discoverWorkspace(workspacePath);\n const packages = workspace.getPackages();\n const catalogs = workspace.getCatalogs();\n\n // Count dependencies\n let totalDependencies = 0;\n let catalogDependencies = 0;\n const dependencyTypes = {\n dependencies: 0,\n devDependencies: 0,\n peerDependencies: 0,\n optionalDependencies: 0,\n };\n\n for (const pkg of packages.getAll()) {\n const deps = pkg.getDependencies();\n const catalogRefs = pkg.getCatalogReferences();\n\n catalogDependencies += catalogRefs.length;\n\n for (const depType of Object.keys(dependencyTypes) as Array<keyof typeof dependencyTypes>) {\n const typeDeps = deps.getDependenciesByType(depType);\n dependencyTypes[depType] += typeDeps.size;\n totalDependencies += typeDeps.size;\n }\n }\n\n // Count catalog definitions\n let totalCatalogEntries = 0;\n for (const catalog of catalogs.getAll()) {\n totalCatalogEntries += catalog.getPackageNames().length;\n }\n\n return {\n workspace: {\n path: workspace.getPath().toString(),\n name: workspace.getPath().getDirectoryName(),\n },\n packages: {\n total: packages.size(),\n withCatalogReferences: packages.findPackagesWithCatalogReferences().length,\n },\n catalogs: {\n total: catalogs.size(),\n totalEntries: totalCatalogEntries,\n },\n dependencies: {\n total: totalDependencies,\n catalogReferences: catalogDependencies,\n byType: dependencyTypes,\n },\n };\n }\n\n /**\n * Find workspaces in a directory tree\n */\n async findWorkspaces(searchRoot: string): Promise<WorkspaceInfo[]> {\n // This would implement a recursive search for pnpm workspaces\n // For now, we'll just check the provided directory\n const workspaceInfo = await this.getWorkspaceInfo(searchRoot);\n return workspaceInfo.isValid ? [workspaceInfo] : [];\n }\n\n /**\n * Check workspace health\n */\n async checkHealth(workspacePath?: string): Promise<WorkspaceHealthReport> {\n const validation = await this.validateWorkspace(workspacePath);\n const stats = await this.getWorkspaceStats(workspacePath);\n\n const issues: HealthIssue[] = [];\n const score = this.calculateHealthScore(validation, stats, issues);\n\n return {\n score,\n status: this.getHealthStatus(score),\n validation,\n stats,\n issues,\n lastChecked: new Date(),\n };\n }\n\n /**\n * Calculate workspace health score (0-100)\n */\n private calculateHealthScore(\n validation: WorkspaceValidationReport,\n stats: WorkspaceStats,\n issues: HealthIssue[]\n ): number {\n let score = 100;\n\n // Deduct points for errors\n score -= validation.errors.length * 20;\n\n // Deduct points for warnings\n score -= validation.warnings.length * 5;\n\n // Deduct points for workspace issues\n if (!stats.workspace) {\n score -= 30;\n }\n\n if (stats.packages.total === 0) {\n score -= 20;\n issues.push({\n type: 'warning',\n message: 'No packages found in workspace',\n suggestion: 'Check package patterns in pnpm-workspace.yaml',\n });\n }\n\n if (stats.catalogs.total === 0) {\n score -= 10;\n issues.push({\n type: 'info',\n message: 'No catalogs defined',\n suggestion: 'Consider using catalogs for better dependency management',\n });\n }\n\n // Bonus for good practices\n if (stats.dependencies.catalogReferences > 0) {\n score += 5;\n }\n\n return Math.max(0, Math.min(100, score));\n }\n\n /**\n * Get health status from score\n */\n private getHealthStatus(score: number): 'excellent' | 'good' | 'fair' | 'poor' {\n if (score >= 90) return 'excellent';\n if (score >= 70) return 'good';\n if (score >= 50) return 'fair';\n return 'poor';\n }\n}\n\nexport interface WorkspaceStats {\n workspace: {\n path: string;\n name: string;\n };\n packages: {\n total: number;\n withCatalogReferences: number;\n };\n catalogs: {\n total: number;\n totalEntries: number;\n };\n dependencies: {\n total: number;\n catalogReferences: number;\n byType: {\n dependencies: number;\n devDependencies: number;\n peerDependencies: number;\n optionalDependencies: number;\n };\n };\n}\n\nexport interface HealthIssue {\n type: 'error' | 'warning' | 'info';\n message: string;\n suggestion: string;\n}\n\nexport interface WorkspaceHealthReport {\n score: number;\n status: 'excellent' | 'good' | 'fair' | 'poor';\n validation: WorkspaceValidationReport;\n stats: WorkspaceStats;\n issues: HealthIssue[];\n lastChecked: Date;\n}\n","/**\n * Catalog Entity\n *\n * Represents a pnpm catalog that manages dependency versions centrally.\n * A catalog contains a collection of dependencies with their version ranges.\n */\n\nimport { VersionRange } from '../value-objects/version.js';\n\nexport type CatalogId = string;\nexport type PackageName = string;\nexport type CatalogName = string;\n\nexport class Catalog {\n private readonly id: CatalogId;\n private readonly name: CatalogName;\n private readonly dependencies: Map<PackageName, VersionRange>;\n private readonly mode: CatalogMode;\n\n private constructor(\n id: CatalogId,\n name: CatalogName,\n dependencies: Map<PackageName, VersionRange>,\n mode: CatalogMode = CatalogMode.MANUAL\n ) {\n this.id = id;\n this.name = name;\n this.dependencies = new Map(dependencies);\n this.mode = mode;\n }\n\n /**\n * Create a new Catalog\n */\n public static create(\n id: CatalogId,\n name: CatalogName,\n dependencies: Record<string, string> = {},\n mode: CatalogMode = CatalogMode.MANUAL\n ): Catalog {\n const dependencyMap = new Map<PackageName, VersionRange>();\n\n for (const [packageName, versionRange] of Object.entries(dependencies)) {\n try {\n dependencyMap.set(packageName, VersionRange.fromString(versionRange));\n } catch (error) {\n throw new Error(\n `Invalid version range for package \"${packageName}\" in catalog \"${name}\": ${versionRange}`\n );\n }\n }\n\n return new Catalog(id, name, dependencyMap, mode);\n }\n\n /**\n * Get catalog identifier\n */\n public getId(): CatalogId {\n return this.id;\n }\n\n /**\n * Get catalog name\n */\n public getName(): CatalogName {\n return this.name;\n }\n\n /**\n * Get catalog mode\n */\n public getMode(): CatalogMode {\n return this.mode;\n }\n\n /**\n * Get all dependencies in this catalog\n */\n public getDependencies(): ReadonlyMap<PackageName, VersionRange> {\n return this.dependencies;\n }\n\n /**\n * Get all package names in this catalog\n */\n public getPackageNames(): PackageName[] {\n return Array.from(this.dependencies.keys());\n }\n\n /**\n * Check if catalog contains a specific package\n */\n public hasDependency(packageName: PackageName): boolean {\n return this.dependencies.has(packageName);\n }\n\n /**\n * Get version range for a specific package\n */\n public getDependencyVersion(packageName: PackageName): VersionRange | null {\n return this.dependencies.get(packageName) || null;\n }\n\n /**\n * Add or update a dependency\n */\n public updateDependencyVersion(packageName: PackageName, versionRange: string): void {\n try {\n const parsedRange = VersionRange.fromString(versionRange);\n this.dependencies.set(packageName, parsedRange);\n } catch (error) {\n throw new Error(`Invalid version range for package \"${packageName}\": ${versionRange}`);\n }\n }\n\n /**\n * Remove a dependency from the catalog\n */\n public removeDependency(packageName: PackageName): boolean {\n return this.dependencies.delete(packageName);\n }\n\n /**\n * Check version compatibility for a package\n */\n public checkVersionCompatibility(packageName: PackageName, requestedVersion: string): boolean {\n const catalogVersion = this.dependencies.get(packageName);\n if (!catalogVersion) {\n return false;\n }\n\n try {\n const requestedRange = VersionRange.fromString(requestedVersion);\n return catalogVersion.isCompatibleWith(requestedRange);\n } catch {\n return false;\n }\n }\n\n /**\n * Get packages that would be affected by changing a dependency version\n */\n public getAffectedPackagesByDependencyChange(\n packageName: PackageName,\n newVersionRange: string\n ): PackageName[] {\n if (!this.hasDependency(packageName)) {\n return [];\n }\n\n try {\n const newRange = VersionRange.fromString(newVersionRange);\n const currentRange = this.dependencies.get(packageName)!;\n\n // If the ranges are compatible, no packages are affected\n if (currentRange.isCompatibleWith(newRange)) {\n return [];\n }\n\n // Return all packages that use this catalog (this would typically be resolved\n // at the aggregate level with workspace information)\n return [packageName];\n } catch {\n return [packageName];\n }\n }\n\n /**\n * Validate catalog integrity\n */\n public validate(): CatalogValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for empty catalog\n if (this.dependencies.size === 0) {\n warnings.push(`Catalog \"${this.name}\" is empty`);\n }\n\n // Validate each dependency\n for (const [packageName, versionRange] of this.dependencies) {\n // Check package name format\n if (!this.isValidPackageName(packageName)) {\n errors.push(`Invalid package name: \"${packageName}\"`);\n }\n\n // Check for common issues\n if (versionRange.toString().includes('*')) {\n warnings.push(`Package \"${packageName}\" uses wildcard version which may be unstable`);\n }\n }\n\n return new CatalogValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Convert catalog to plain object for serialization\n */\n public toPlainObject(): CatalogData {\n const dependencies: Record<string, string> = {};\n\n for (const [packageName, versionRange] of this.dependencies) {\n dependencies[packageName] = versionRange.toString();\n }\n\n return {\n id: this.id,\n name: this.name,\n dependencies,\n mode: this.mode,\n };\n }\n\n /**\n * Create catalog from plain object\n */\n public static fromPlainObject(data: CatalogData): Catalog {\n return Catalog.create(data.id, data.name, data.dependencies, data.mode);\n }\n\n /**\n * Check if a package name is valid\n */\n private isValidPackageName(packageName: string): boolean {\n // Basic npm package name validation\n const validPackageNameRegex = /^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n return validPackageNameRegex.test(packageName);\n }\n\n /**\n * Check equality with another catalog\n */\n public equals(other: Catalog): boolean {\n if (this.id !== other.id || this.name !== other.name || this.mode !== other.mode) {\n return false;\n }\n\n if (this.dependencies.size !== other.dependencies.size) {\n return false;\n }\n\n for (const [packageName, versionRange] of this.dependencies) {\n const otherRange = other.dependencies.get(packageName);\n if (!otherRange || !versionRange.equals(otherRange)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Catalog Mode Enum\n */\nexport enum CatalogMode {\n MANUAL = 'manual',\n STRICT = 'strict',\n PREFER = 'prefer',\n}\n\n/**\n * Catalog Data Interface for serialization\n */\nexport interface CatalogData {\n id: CatalogId;\n name: CatalogName;\n dependencies: Record<string, string>;\n mode: CatalogMode;\n}\n\n/**\n * Catalog Validation Result\n */\nexport class CatalogValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * Package Entity\n *\n * Represents a package in a pnpm workspace that may reference catalog dependencies.\n * Handles package.json structure and catalog dependency references.\n */\n\nimport { WorkspacePath } from '../value-objects/workspacePath.js';\n\nexport type PackageId = string;\nexport type PackageName = string;\nexport type DependencyType =\n | 'dependencies'\n | 'devDependencies'\n | 'peerDependencies'\n | 'optionalDependencies';\n\nexport class Package {\n private readonly id: PackageId;\n private readonly name: PackageName;\n private readonly path: WorkspacePath;\n private readonly dependencies: DependencyCollection;\n private readonly catalogReferences: CatalogReference[];\n private readonly originalData: PackageJsonData;\n\n private constructor(\n id: PackageId,\n name: PackageName,\n path: WorkspacePath,\n dependencies: DependencyCollection,\n catalogReferences: CatalogReference[],\n originalData: PackageJsonData\n ) {\n this.id = id;\n this.name = name;\n this.path = path;\n this.dependencies = dependencies;\n this.catalogReferences = [...catalogReferences];\n this.originalData = { ...originalData };\n }\n\n /**\n * Create a new Package\n */\n public static create(\n id: PackageId,\n name: PackageName,\n path: WorkspacePath,\n packageJsonData: PackageJsonData\n ): Package {\n const dependencies = DependencyCollection.fromPackageJson(packageJsonData);\n const catalogReferences = Package.extractCatalogReferences(packageJsonData);\n\n return new Package(id, name, path, dependencies, catalogReferences, packageJsonData);\n }\n\n /**\n * Get package identifier\n */\n public getId(): PackageId {\n return this.id;\n }\n\n /**\n * Get package name\n */\n public getName(): PackageName {\n return this.name;\n }\n\n /**\n * Get package path\n */\n public getPath(): WorkspacePath {\n return this.path;\n }\n\n /**\n * Get all dependencies\n */\n public getDependencies(): DependencyCollection {\n return this.dependencies;\n }\n\n /**\n * Get catalog references\n */\n public getCatalogReferences(): CatalogReference[] {\n return [...this.catalogReferences];\n }\n\n /**\n * Get catalog dependencies only\n */\n public getCatalogDependencies(): CatalogDependency[] {\n return this.catalogReferences.map(\n (ref) =>\n new CatalogDependency(ref.getPackageName(), ref.getCatalogName(), ref.getDependencyType())\n );\n }\n\n /**\n * Check if package uses a specific catalog dependency\n */\n public usesCatalogDependency(catalogName: string, packageName: string): boolean {\n return this.catalogReferences.some(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n );\n }\n\n /**\n * Update a dependency from catalog\n */\n public updateDependencyFromCatalog(\n catalogName: string,\n packageName: string,\n _newVersion: string\n ): void {\n const reference = this.catalogReferences.find(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n );\n\n if (!reference) {\n throw new Error(\n `Package \"${this.name}\" does not reference \"${packageName}\" from catalog \"${catalogName}\"`\n );\n }\n\n // Update the dependency in the collection\n this.dependencies.updateDependency(\n reference.getDependencyType(),\n packageName,\n `catalog:${catalogName === 'default' ? '' : catalogName}`\n );\n }\n\n /**\n * Get dependencies of a specific type\n */\n public getDependenciesByType(type: DependencyType): Map<string, string> {\n return this.dependencies.getDependenciesByType(type);\n }\n\n /**\n * Get package.json data representation\n */\n public toPackageJsonData(): PackageJsonData {\n // Start with original package.json to preserve fields like scripts, author, etc.\n const data: PackageJsonData = { ...this.originalData };\n\n // Replace dependency sections with updated versions\n data.dependencies = Object.fromEntries(this.dependencies.getDependenciesByType('dependencies'));\n data.devDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('devDependencies')\n );\n data.peerDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('peerDependencies')\n );\n data.optionalDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('optionalDependencies')\n );\n\n return data;\n }\n\n /**\n * Extract catalog references from package.json data\n */\n private static extractCatalogReferences(packageJsonData: PackageJsonData): CatalogReference[] {\n const references: CatalogReference[] = [];\n const dependencyTypes: DependencyType[] = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ];\n\n for (const depType of dependencyTypes) {\n const deps = packageJsonData[depType] || {};\n\n for (const [packageName, version] of Object.entries(deps)) {\n if (typeof version === 'string' && version.startsWith('catalog:')) {\n const catalogName = version === 'catalog:' ? 'default' : version.substring(8);\n references.push(new CatalogReference(catalogName, packageName, depType));\n }\n }\n }\n\n return references;\n }\n\n /**\n * Validate package structure\n */\n public validate(): PackageValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate package name\n if (!this.isValidPackageName(this.name)) {\n errors.push(`Invalid package name: \"${this.name}\"`);\n }\n\n // Validate catalog references\n for (const ref of this.catalogReferences) {\n if (!this.isValidPackageName(ref.getPackageName())) {\n errors.push(`Invalid dependency name in catalog reference: \"${ref.getPackageName()}\"`);\n }\n }\n\n return new PackageValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Check if package name is valid\n */\n private isValidPackageName(packageName: string): boolean {\n const validPackageNameRegex = /^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n return validPackageNameRegex.test(packageName);\n }\n\n /**\n * Check equality with another package\n */\n public equals(other: Package): boolean {\n return this.id === other.id && this.name === other.name && this.path.equals(other.path);\n }\n}\n\n/**\n * Catalog Reference Value Object\n */\nexport class CatalogReference {\n constructor(\n private readonly catalogName: string,\n private readonly packageName: string,\n private readonly dependencyType: DependencyType\n ) {}\n\n public getCatalogName(): string {\n return this.catalogName;\n }\n\n public getPackageName(): string {\n return this.packageName;\n }\n\n public getDependencyType(): DependencyType {\n return this.dependencyType;\n }\n\n public equals(other: CatalogReference): boolean {\n return (\n this.catalogName === other.catalogName &&\n this.packageName === other.packageName &&\n this.dependencyType === other.dependencyType\n );\n }\n}\n\n/**\n * Catalog Dependency Value Object\n */\nexport class CatalogDependency {\n constructor(\n private readonly packageName: string,\n private readonly catalogName: string,\n private readonly dependencyType: DependencyType\n ) {}\n\n public getPackageName(): string {\n return this.packageName;\n }\n\n public getCatalogName(): string {\n return this.catalogName;\n }\n\n public getDependencyType(): DependencyType {\n return this.dependencyType;\n }\n}\n\n/**\n * Dependency Collection Value Object\n */\nexport class DependencyCollection {\n private readonly dependencies: Map<DependencyType, Map<string, string>>;\n\n private constructor(dependencies: Map<DependencyType, Map<string, string>>) {\n this.dependencies = dependencies;\n }\n\n public static empty(): DependencyCollection {\n const deps = new Map<DependencyType, Map<string, string>>();\n deps.set('dependencies', new Map());\n deps.set('devDependencies', new Map());\n deps.set('peerDependencies', new Map());\n deps.set('optionalDependencies', new Map());\n return new DependencyCollection(deps);\n }\n\n public static fromPackageJson(packageJsonData: PackageJsonData): DependencyCollection {\n const deps = new Map<DependencyType, Map<string, string>>();\n\n deps.set('dependencies', new Map(Object.entries(packageJsonData.dependencies || {})));\n deps.set('devDependencies', new Map(Object.entries(packageJsonData.devDependencies || {})));\n deps.set('peerDependencies', new Map(Object.entries(packageJsonData.peerDependencies || {})));\n deps.set(\n 'optionalDependencies',\n new Map(Object.entries(packageJsonData.optionalDependencies || {}))\n );\n\n return new DependencyCollection(deps);\n }\n\n public getDependenciesByType(type: DependencyType): Map<string, string> {\n return new Map(this.dependencies.get(type) || []);\n }\n\n public updateDependency(type: DependencyType, packageName: string, version: string): void {\n const typeMap = this.dependencies.get(type);\n if (typeMap) {\n typeMap.set(packageName, version);\n }\n }\n\n public filterByCatalogDependency(\n _catalogName: string,\n _packageName: string\n ): DependencyCollection {\n // This would filter dependencies that match catalog references\n // Implementation would require catalog reference information\n return this;\n }\n}\n\n/**\n * Package.json Data Interface\n */\nexport interface PackageJsonData {\n name: string;\n version?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n optionalDependencies?: Record<string, string>;\n [key: string]: any;\n}\n\n/**\n * Package Validation Result\n */\nexport class PackageValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * Workspace Entity\n *\n * Represents a pnpm workspace with catalog configuration.\n * This is a core domain entity that encapsulates workspace business logic.\n */\n\nimport { CatalogCollection } from '../value-objects/catalogCollection.js';\nimport { PackageCollection } from '../value-objects/packageCollection.js';\nimport { WorkspaceConfig } from '../value-objects/workspaceConfig.js';\nimport { WorkspaceId } from '../value-objects/workspaceId.js';\nimport { WorkspacePath } from '../value-objects/workspacePath.js';\n\nexport class Workspace {\n private constructor(\n private readonly id: WorkspaceId,\n private readonly path: WorkspacePath,\n private config: WorkspaceConfig,\n private catalogs: CatalogCollection,\n private readonly packages: PackageCollection\n ) {}\n\n /**\n * Create a new Workspace instance\n */\n public static create(\n id: WorkspaceId,\n path: WorkspacePath,\n config: WorkspaceConfig,\n catalogs: CatalogCollection,\n packages: PackageCollection\n ): Workspace {\n return new Workspace(id, path, config, catalogs, packages);\n }\n\n /**\n * Get workspace identifier\n */\n public getId(): WorkspaceId {\n return this.id;\n }\n\n /**\n * Get workspace path\n */\n public getPath(): WorkspacePath {\n return this.path;\n }\n\n /**\n * Get workspace configuration\n */\n public getConfig(): WorkspaceConfig {\n return this.config;\n }\n\n /**\n * Get all catalogs in this workspace\n */\n public getCatalogs(): CatalogCollection {\n return this.catalogs;\n }\n\n /**\n * Get all packages in this workspace\n */\n public getPackages(): PackageCollection {\n return this.packages;\n }\n\n /**\n * Check if workspace has a specific catalog\n */\n public hasCatalog(catalogName: string): boolean {\n return this.catalogs.has(catalogName);\n }\n\n /**\n * Get packages that use a specific catalog dependency\n */\n public getPackagesUsingCatalogDependency(\n catalogName: string,\n packageName: string\n ): PackageCollection {\n return this.packages.filterByCatalogDependency(catalogName, packageName);\n }\n\n /**\n * Validate workspace consistency\n * Ensures all catalog references in packages exist in catalogs\n */\n public validateConsistency(): ValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check if all catalog references in packages exist\n for (const pkg of this.packages.getAll()) {\n const catalogRefs = pkg.getCatalogReferences();\n\n for (const ref of catalogRefs) {\n if (!this.catalogs.has(ref.getCatalogName())) {\n errors.push(\n `Package \"${pkg.getName()}\" references unknown catalog \"${ref.getCatalogName()}\"`\n );\n }\n\n const catalog = this.catalogs.get(ref.getCatalogName());\n if (catalog && !catalog.hasDependency(ref.getPackageName())) {\n warnings.push(\n `Package \"${pkg.getName()}\" references \"${ref.getPackageName()}\" ` +\n `from catalog \"${ref.getCatalogName()}\" but it's not defined in the catalog`\n );\n }\n }\n }\n\n return new ValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Get outdated catalog dependencies\n */\n public async getOutdatedCatalogDependencies(): Promise<OutdatedDependency[]> {\n // This would typically use a domain service to check versions\n // For now, return empty array as placeholder\n return [];\n }\n\n /**\n * Update a catalog dependency version\n */\n public updateCatalogDependency(\n catalogName: string,\n packageName: string,\n newVersion: string\n ): void {\n const catalog = this.catalogs.get(catalogName);\n if (!catalog) {\n throw new Error(`Catalog \"${catalogName}\" not found`);\n }\n\n // Update the catalog in the collection\n catalog.updateDependencyVersion(packageName, newVersion);\n\n // Also update the WorkspaceConfig to ensure consistency\n this.config = this.config.updateCatalogDependency(catalogName, packageName, newVersion);\n }\n}\n\n/**\n * Validation result value object\n */\nexport class ValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n\n/**\n * Outdated dependency value object\n */\nexport class OutdatedDependency {\n constructor(\n private readonly catalogName: string,\n private readonly packageName: string,\n private readonly currentVersion: string,\n private readonly latestVersion: string,\n private readonly updateType: 'major' | 'minor' | 'patch'\n ) {}\n\n public getCatalogName(): string {\n return this.catalogName;\n }\n\n public getPackageName(): string {\n return this.packageName;\n }\n\n public getCurrentVersion(): string {\n return this.currentVersion;\n }\n\n public getLatestVersion(): string {\n return this.latestVersion;\n }\n\n public getUpdateType(): 'major' | 'minor' | 'patch' {\n return this.updateType;\n }\n}\n","/**\n * CatalogCollection Value Object\n *\n * Represents a collection of catalogs in a workspace.\n * Provides operations for managing and querying multiple catalogs.\n */\n\nimport { Catalog, CatalogName } from '../entities/catalog.js';\n\nexport class CatalogCollection {\n private readonly catalogs: Map<CatalogName, Catalog>;\n\n private constructor(catalogs: Map<CatalogName, Catalog>) {\n this.catalogs = new Map(catalogs);\n }\n\n /**\n * Create an empty catalog collection\n */\n public static empty(): CatalogCollection {\n return new CatalogCollection(new Map());\n }\n\n /**\n * Create a catalog collection from an array of catalogs\n */\n public static fromCatalogs(catalogs: Catalog[]): CatalogCollection {\n const catalogMap = new Map<CatalogName, Catalog>();\n\n for (const catalog of catalogs) {\n catalogMap.set(catalog.getName(), catalog);\n }\n\n return new CatalogCollection(catalogMap);\n }\n\n /**\n * Create a catalog collection from a Map\n */\n public static fromMap(catalogMap: Map<CatalogName, Catalog>): CatalogCollection {\n return new CatalogCollection(catalogMap);\n }\n\n /**\n * Check if collection contains a catalog with the given name\n */\n public has(catalogName: CatalogName): boolean {\n return this.catalogs.has(catalogName);\n }\n\n /**\n * Get a catalog by name\n */\n public get(catalogName: CatalogName): Catalog | undefined {\n return this.catalogs.get(catalogName);\n }\n\n /**\n * Get all catalogs as an array\n */\n public getAll(): Catalog[] {\n return Array.from(this.catalogs.values());\n }\n\n /**\n * Get all catalog names\n */\n public getCatalogNames(): CatalogName[] {\n return Array.from(this.catalogs.keys());\n }\n\n /**\n * Get the number of catalogs\n */\n public size(): number {\n return this.catalogs.size;\n }\n\n /**\n * Check if collection is empty\n */\n public isEmpty(): boolean {\n return this.catalogs.size === 0;\n }\n\n /**\n * Add a catalog to the collection\n */\n public add(catalog: Catalog): CatalogCollection {\n const newCatalogs = new Map(this.catalogs);\n newCatalogs.set(catalog.getName(), catalog);\n return new CatalogCollection(newCatalogs);\n }\n\n /**\n * Remove a catalog from the collection\n */\n public remove(catalogName: CatalogName): CatalogCollection {\n const newCatalogs = new Map(this.catalogs);\n newCatalogs.delete(catalogName);\n return new CatalogCollection(newCatalogs);\n }\n\n /**\n * Update a catalog in the collection\n */\n public update(catalog: Catalog): CatalogCollection {\n if (!this.has(catalog.getName())) {\n throw new Error(`Catalog \"${catalog.getName()}\" not found in collection`);\n }\n\n const newCatalogs = new Map(this.catalogs);\n newCatalogs.set(catalog.getName(), catalog);\n return new CatalogCollection(newCatalogs);\n }\n\n /**\n * Get the default catalog (named 'default' or the first one)\n */\n public getDefault(): Catalog | undefined {\n // First, try to find a catalog named 'default'\n const defaultCatalog = this.catalogs.get('default');\n if (defaultCatalog) {\n return defaultCatalog;\n }\n\n // If no 'default' catalog, return the first one\n const firstCatalog = this.catalogs.values().next().value;\n return firstCatalog;\n }\n\n /**\n * Filter catalogs by a predicate function\n */\n public filter(predicate: (catalog: Catalog) => boolean): CatalogCollection {\n const filteredCatalogs = new Map<CatalogName, Catalog>();\n\n for (const [name, catalog] of this.catalogs) {\n if (predicate(catalog)) {\n filteredCatalogs.set(name, catalog);\n }\n }\n\n return new CatalogCollection(filteredCatalogs);\n }\n\n /**\n * Find catalogs that contain a specific package\n */\n public findCatalogsWithPackage(packageName: string): Catalog[] {\n return this.getAll().filter((catalog) => catalog.hasDependency(packageName));\n }\n\n /**\n * Get all unique package names across all catalogs\n */\n public getAllPackageNames(): string[] {\n const packageNames = new Set<string>();\n\n for (const catalog of this.catalogs.values()) {\n for (const packageName of catalog.getPackageNames()) {\n packageNames.add(packageName);\n }\n }\n\n return Array.from(packageNames);\n }\n\n /**\n * Validate all catalogs in the collection\n */\n public validate(): CatalogCollectionValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for empty collection\n if (this.isEmpty()) {\n warnings.push('No catalogs found in workspace');\n }\n\n // Validate each catalog\n for (const catalog of this.catalogs.values()) {\n const result = catalog.validate();\n errors.push(...result.getErrors().map((err) => `Catalog \"${catalog.getName()}\": ${err}`));\n warnings.push(\n ...result.getWarnings().map((warn) => `Catalog \"${catalog.getName()}\": ${warn}`)\n );\n }\n\n // Check for duplicate package definitions across catalogs\n const packageCatalogMap = new Map<string, string[]>();\n\n for (const catalog of this.catalogs.values()) {\n for (const packageName of catalog.getPackageNames()) {\n if (!packageCatalogMap.has(packageName)) {\n packageCatalogMap.set(packageName, []);\n }\n packageCatalogMap.get(packageName)!.push(catalog.getName());\n }\n }\n\n // Warn about packages defined in multiple catalogs\n for (const [packageName, catalogNames] of packageCatalogMap) {\n if (catalogNames.length > 1) {\n warnings.push(\n `Package \"${packageName}\" is defined in multiple catalogs: ${catalogNames.join(', ')}`\n );\n }\n }\n\n return new CatalogCollectionValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Convert to a Map for serialization\n */\n public toMap(): Map<CatalogName, Catalog> {\n return new Map(this.catalogs);\n }\n\n /**\n * Iterate over catalogs\n */\n public *[Symbol.iterator](): Iterator<[CatalogName, Catalog]> {\n yield* this.catalogs;\n }\n\n /**\n * Check equality with another catalog collection\n */\n public equals(other: CatalogCollection): boolean {\n if (this.size() !== other.size()) {\n return false;\n }\n\n for (const [name, catalog] of this.catalogs) {\n const otherCatalog = other.get(name);\n if (!otherCatalog || !catalog.equals(otherCatalog)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Catalog Collection Validation Result\n */\nexport class CatalogCollectionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * PackageCollection Value Object\n *\n * Represents a collection of packages in a workspace.\n * Provides operations for managing and querying multiple packages.\n */\n\nimport { Package, PackageName } from '../entities/package.js';\n\nexport class PackageCollection {\n private readonly packages: Map<PackageName, Package>;\n\n private constructor(packages: Map<PackageName, Package>) {\n this.packages = new Map(packages);\n }\n\n /**\n * Create an empty package collection\n */\n public static empty(): PackageCollection {\n return new PackageCollection(new Map());\n }\n\n /**\n * Create a package collection from an array of packages\n */\n public static fromPackages(packages: Package[]): PackageCollection {\n const packageMap = new Map<PackageName, Package>();\n\n for (const pkg of packages) {\n packageMap.set(pkg.getName(), pkg);\n }\n\n return new PackageCollection(packageMap);\n }\n\n /**\n * Create a package collection from a Map\n */\n public static fromMap(packageMap: Map<PackageName, Package>): PackageCollection {\n return new PackageCollection(packageMap);\n }\n\n /**\n * Check if collection contains a package with the given name\n */\n public has(packageName: PackageName): boolean {\n return this.packages.has(packageName);\n }\n\n /**\n * Get a package by name\n */\n public get(packageName: PackageName): Package | undefined {\n return this.packages.get(packageName);\n }\n\n /**\n * Get all packages as an array\n */\n public getAll(): Package[] {\n return Array.from(this.packages.values());\n }\n\n /**\n * Get all package names\n */\n public getPackageNames(): PackageName[] {\n return Array.from(this.packages.keys());\n }\n\n /**\n * Get the number of packages\n */\n public size(): number {\n return this.packages.size;\n }\n\n /**\n * Check if collection is empty\n */\n public isEmpty(): boolean {\n return this.packages.size === 0;\n }\n\n /**\n * Add a package to the collection\n */\n public add(pkg: Package): PackageCollection {\n const newPackages = new Map(this.packages);\n newPackages.set(pkg.getName(), pkg);\n return new PackageCollection(newPackages);\n }\n\n /**\n * Remove a package from the collection\n */\n public remove(packageName: PackageName): PackageCollection {\n const newPackages = new Map(this.packages);\n newPackages.delete(packageName);\n return new PackageCollection(newPackages);\n }\n\n /**\n * Update a package in the collection\n */\n public update(pkg: Package): PackageCollection {\n if (!this.has(pkg.getName())) {\n throw new Error(`Package \"${pkg.getName()}\" not found in collection`);\n }\n\n const newPackages = new Map(this.packages);\n newPackages.set(pkg.getName(), pkg);\n return new PackageCollection(newPackages);\n }\n\n /**\n * Filter packages by a predicate function\n */\n public filter(predicate: (pkg: Package) => boolean): PackageCollection {\n const filteredPackages = new Map<PackageName, Package>();\n\n for (const [name, pkg] of this.packages) {\n if (predicate(pkg)) {\n filteredPackages.set(name, pkg);\n }\n }\n\n return new PackageCollection(filteredPackages);\n }\n\n /**\n * Filter packages that use a specific catalog dependency\n */\n public filterByCatalogDependency(catalogName: string, packageName: string): PackageCollection {\n return this.filter((pkg) => pkg.usesCatalogDependency(catalogName, packageName));\n }\n\n /**\n * Find packages that have catalog references\n */\n public findPackagesWithCatalogReferences(): Package[] {\n return this.getAll().filter((pkg) => pkg.getCatalogReferences().length > 0);\n }\n\n /**\n * Find packages that reference a specific catalog\n */\n public findPackagesUsingCatalog(catalogName: string): Package[] {\n return this.getAll().filter((pkg) =>\n pkg.getCatalogReferences().some((ref) => ref.getCatalogName() === catalogName)\n );\n }\n\n /**\n * Get all unique catalog names referenced by packages\n */\n public getReferencedCatalogNames(): string[] {\n const catalogNames = new Set<string>();\n\n for (const pkg of this.packages.values()) {\n for (const ref of pkg.getCatalogReferences()) {\n catalogNames.add(ref.getCatalogName());\n }\n }\n\n return Array.from(catalogNames);\n }\n\n /**\n * Get all unique dependency names across all packages\n */\n public getAllDependencyNames(): string[] {\n const dependencyNames = new Set<string>();\n\n for (const pkg of this.packages.values()) {\n const deps = pkg.getDependencies();\n\n // Add dependencies from all types\n for (const depType of [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const) {\n for (const depName of deps.getDependenciesByType(depType).keys()) {\n dependencyNames.add(depName);\n }\n }\n }\n\n return Array.from(dependencyNames);\n }\n\n /**\n * Find packages that have a specific dependency\n */\n public findPackagesWithDependency(dependencyName: string): Package[] {\n return this.getAll().filter((pkg) => {\n const deps = pkg.getDependencies();\n return ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'].some(\n (depType) => deps.getDependenciesByType(depType as any).has(dependencyName)\n );\n });\n }\n\n /**\n * Validate all packages in the collection\n */\n public validate(): PackageCollectionValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Check for empty collection\n if (this.isEmpty()) {\n warnings.push('No packages found in workspace');\n }\n\n // Validate each package\n for (const pkg of this.packages.values()) {\n const result = pkg.validate();\n errors.push(...result.getErrors().map((err) => `Package \"${pkg.getName()}\": ${err}`));\n warnings.push(...result.getWarnings().map((warn) => `Package \"${pkg.getName()}\": ${warn}`));\n }\n\n // Check for duplicate package names (shouldn't happen with Map, but good to verify)\n const packageNames = this.getPackageNames();\n const uniqueNames = new Set(packageNames);\n if (packageNames.length !== uniqueNames.size) {\n errors.push('Duplicate package names found in collection');\n }\n\n return new PackageCollectionValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Group packages by workspace path\n */\n public groupByWorkspacePath(): Map<string, Package[]> {\n const grouped = new Map<string, Package[]>();\n\n for (const pkg of this.packages.values()) {\n const pathKey = pkg.getPath().toString();\n if (!grouped.has(pathKey)) {\n grouped.set(pathKey, []);\n }\n grouped.get(pathKey)!.push(pkg);\n }\n\n return grouped;\n }\n\n /**\n * Convert to a Map for serialization\n */\n public toMap(): Map<PackageName, Package> {\n return new Map(this.packages);\n }\n\n /**\n * Iterate over packages\n */\n public *[Symbol.iterator](): Iterator<[PackageName, Package]> {\n yield* this.packages;\n }\n\n /**\n * Check equality with another package collection\n */\n public equals(other: PackageCollection): boolean {\n if (this.size() !== other.size()) {\n return false;\n }\n\n for (const [name, pkg] of this.packages) {\n const otherPackage = other.get(name);\n if (!otherPackage || !pkg.equals(otherPackage)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Package Collection Validation Result\n */\nexport class PackageCollectionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * WorkspaceConfig Value Object\n *\n * Represents the configuration settings for a pnpm workspace.\n * Includes catalog mode, package patterns, and other workspace-specific settings.\n */\n\nimport { CatalogMode } from '../entities/catalog.js';\n\nexport class WorkspaceConfig {\n private readonly catalogMode: CatalogMode;\n private readonly packagePatterns: string[];\n private readonly catalogs: Map<string, CatalogDefinition>;\n private readonly shamefullyHoist: boolean;\n private readonly linkWorkspacePackages: boolean | 'deep';\n private readonly originalData: PnpmWorkspaceData;\n\n private constructor(\n catalogMode: CatalogMode,\n packagePatterns: string[],\n catalogs: Map<string, CatalogDefinition>,\n shamefullyHoist: boolean = false,\n linkWorkspacePackages: boolean | 'deep' = true,\n originalData: PnpmWorkspaceData = {} as PnpmWorkspaceData\n ) {\n this.catalogMode = catalogMode;\n this.packagePatterns = [...packagePatterns];\n this.catalogs = new Map(catalogs);\n this.shamefullyHoist = shamefullyHoist;\n this.linkWorkspacePackages = linkWorkspacePackages;\n this.originalData = { ...originalData };\n }\n\n /**\n * Create a WorkspaceConfig from pnpm-workspace.yaml data\n */\n public static fromWorkspaceData(data: PnpmWorkspaceData): WorkspaceConfig {\n const packagePatterns = data.packages || [];\n const catalogMode = data.catalogMode || CatalogMode.MANUAL;\n\n // Process catalogs\n const catalogs = new Map<string, CatalogDefinition>();\n\n // Add default catalog if exists\n if (data.catalog) {\n catalogs.set('default', new CatalogDefinition('default', data.catalog));\n }\n\n // Add named catalogs if they exist\n if (data.catalogs) {\n for (const [name, dependencies] of Object.entries(data.catalogs)) {\n catalogs.set(name, new CatalogDefinition(name, dependencies));\n }\n }\n\n return new WorkspaceConfig(\n catalogMode,\n packagePatterns,\n catalogs,\n data.shamefullyHoist,\n data.linkWorkspacePackages,\n data\n );\n }\n\n /**\n * Create a default WorkspaceConfig\n */\n public static createDefault(): WorkspaceConfig {\n const defaultData: PnpmWorkspaceData = {\n packages: ['packages/*'],\n };\n return new WorkspaceConfig(\n CatalogMode.MANUAL,\n ['packages/*'],\n new Map(),\n false,\n true,\n defaultData\n );\n }\n\n /**\n * Get catalog mode\n */\n public getCatalogMode(): CatalogMode {\n return this.catalogMode;\n }\n\n /**\n * Get package patterns\n */\n public getPackagePatterns(): string[] {\n return [...this.packagePatterns];\n }\n\n /**\n * Get catalog definitions\n */\n public getCatalogDefinitions(): Map<string, CatalogDefinition> {\n return new Map(this.catalogs);\n }\n\n /**\n * Get a specific catalog definition\n */\n public getCatalogDefinition(name: string): CatalogDefinition | undefined {\n return this.catalogs.get(name);\n }\n\n /**\n * Check if a catalog is defined\n */\n public hasCatalog(name: string): boolean {\n return this.catalogs.has(name);\n }\n\n /**\n * Get all catalog names\n */\n public getCatalogNames(): string[] {\n return Array.from(this.catalogs.keys());\n }\n\n /**\n * Check if shamefully hoist is enabled\n */\n public isShamefullyHoist(): boolean {\n return this.shamefullyHoist;\n }\n\n /**\n * Get link workspace packages setting\n */\n public getLinkWorkspacePackages(): boolean | 'deep' {\n return this.linkWorkspacePackages;\n }\n\n /**\n * Check if workspace has any catalogs\n */\n public hasCatalogs(): boolean {\n return this.catalogs.size > 0;\n }\n\n /**\n * Update a catalog dependency (creates a new WorkspaceConfig)\n */\n public updateCatalogDependency(\n catalogName: string,\n packageName: string,\n version: string\n ): WorkspaceConfig {\n const catalogDef = this.catalogs.get(catalogName);\n if (!catalogDef) {\n throw new Error(`Catalog \"${catalogName}\" not found`);\n }\n\n // Create updated catalog definition\n const updatedCatalogDef = catalogDef.updateDependencyVersion(packageName, version);\n\n // Create new catalogs map with the updated definition\n const updatedCatalogs = new Map(this.catalogs);\n updatedCatalogs.set(catalogName, updatedCatalogDef);\n\n // Return new WorkspaceConfig instance\n return new WorkspaceConfig(\n this.catalogMode,\n this.packagePatterns,\n updatedCatalogs,\n this.shamefullyHoist,\n this.linkWorkspacePackages,\n this.originalData\n );\n }\n\n /**\n * Get the default catalog definition\n */\n public getDefaultCatalog(): CatalogDefinition | undefined {\n return this.catalogs.get('default');\n }\n\n /**\n * Validate workspace configuration\n */\n public validate(): WorkspaceConfigValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate package patterns\n if (this.packagePatterns.length === 0) {\n warnings.push('No package patterns defined - workspace may not discover any packages');\n }\n\n // Validate package patterns format\n for (const pattern of this.packagePatterns) {\n if (!pattern || pattern.trim().length === 0) {\n errors.push('Empty package pattern found');\n }\n\n // Basic glob pattern validation\n if (pattern.includes('**') && pattern.indexOf('**') !== pattern.lastIndexOf('**')) {\n warnings.push(`Complex glob pattern may be inefficient: ${pattern}`);\n }\n }\n\n // Validate catalog definitions\n for (const [name, catalogDef] of this.catalogs) {\n const validationResult = catalogDef.validate();\n errors.push(...validationResult.getErrors().map((err) => `Catalog \"${name}\": ${err}`));\n warnings.push(...validationResult.getWarnings().map((warn) => `Catalog \"${name}\": ${warn}`));\n }\n\n // Check for conflicting settings\n if (this.catalogMode === CatalogMode.STRICT && this.catalogs.size === 0) {\n errors.push('Catalog mode is set to \"strict\" but no catalogs are defined');\n }\n\n return new WorkspaceConfigValidationResult(errors.length === 0, errors, warnings);\n }\n\n /**\n * Convert to pnpm-workspace.yaml data format\n */\n public toPnpmWorkspaceData(): PnpmWorkspaceData {\n // Start with the original data to preserve all fields\n const data: PnpmWorkspaceData = { ...this.originalData };\n\n // Update the fields that we manage\n data.packages = this.packagePatterns;\n\n // Add catalog mode if not default\n if (this.catalogMode !== CatalogMode.MANUAL) {\n data.catalogMode = this.catalogMode;\n } else {\n // Remove catalogMode if it's back to default\n delete data.catalogMode;\n }\n\n // Update catalogs\n const defaultCatalog = this.catalogs.get('default');\n if (defaultCatalog) {\n data.catalog = defaultCatalog.getDependencies();\n } else {\n // Remove catalog if it no longer exists\n delete data.catalog;\n }\n\n const namedCatalogs: Record<string, Record<string, string>> = {};\n for (const [name, catalogDef] of this.catalogs) {\n if (name !== 'default') {\n namedCatalogs[name] = catalogDef.getDependencies();\n }\n }\n\n if (Object.keys(namedCatalogs).length > 0) {\n data.catalogs = namedCatalogs;\n } else {\n // Remove catalogs if none exist\n delete data.catalogs;\n }\n\n // Update other settings\n if (this.shamefullyHoist) {\n data.shamefullyHoist = this.shamefullyHoist;\n } else {\n // Remove if false/default\n delete data.shamefullyHoist;\n }\n\n if (this.linkWorkspacePackages !== true) {\n data.linkWorkspacePackages = this.linkWorkspacePackages;\n } else {\n // Remove if true/default\n delete data.linkWorkspacePackages;\n }\n\n return data;\n }\n\n /**\n * Check equality with another WorkspaceConfig\n */\n public equals(other: WorkspaceConfig): boolean {\n return (\n this.catalogMode === other.catalogMode &&\n JSON.stringify(this.packagePatterns) === JSON.stringify(other.packagePatterns) &&\n this.shamefullyHoist === other.shamefullyHoist &&\n this.linkWorkspacePackages === other.linkWorkspacePackages &&\n this.catalogsEqual(other.catalogs)\n );\n }\n\n /**\n * Check if catalog definitions are equal\n */\n private catalogsEqual(otherCatalogs: Map<string, CatalogDefinition>): boolean {\n if (this.catalogs.size !== otherCatalogs.size) {\n return false;\n }\n\n for (const [name, catalogDef] of this.catalogs) {\n const otherCatalogDef = otherCatalogs.get(name);\n if (!otherCatalogDef || !catalogDef.equals(otherCatalogDef)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\n/**\n * Catalog Definition Value Object\n */\nexport class CatalogDefinition {\n private readonly name: string;\n private readonly dependencies: Record<string, string>;\n\n constructor(name: string, dependencies: Record<string, string>) {\n this.name = name;\n this.dependencies = { ...dependencies };\n }\n\n public getName(): string {\n return this.name;\n }\n\n public getDependencies(): Record<string, string> {\n return { ...this.dependencies };\n }\n\n public getDependencyNames(): string[] {\n return Object.keys(this.dependencies);\n }\n\n public hasDependency(packageName: string): boolean {\n return packageName in this.dependencies;\n }\n\n public getDependencyVersion(packageName: string): string | undefined {\n return this.dependencies[packageName];\n }\n\n /**\n * Update a dependency version (returns a new instance)\n */\n public updateDependencyVersion(packageName: string, version: string): CatalogDefinition {\n const updatedDependencies = { ...this.dependencies };\n updatedDependencies[packageName] = version;\n return new CatalogDefinition(this.name, updatedDependencies);\n }\n\n public validate(): CatalogDefinitionValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Validate name\n if (!this.name || this.name.trim().length === 0) {\n errors.push('Catalog name cannot be empty');\n }\n\n // Validate dependencies\n for (const [packageName, version] of Object.entries(this.dependencies)) {\n if (!packageName || packageName.trim().length === 0) {\n errors.push('Package name cannot be empty');\n }\n\n if (!version || version.trim().length === 0) {\n errors.push(`Version for package \"${packageName}\" cannot be empty`);\n }\n\n // Basic package name validation\n if (!/^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(packageName)) {\n warnings.push(`Package name \"${packageName}\" may not be valid`);\n }\n }\n\n return new CatalogDefinitionValidationResult(errors.length === 0, errors, warnings);\n }\n\n public equals(other: CatalogDefinition): boolean {\n return (\n this.name === other.name &&\n JSON.stringify(this.dependencies) === JSON.stringify(other.dependencies)\n );\n }\n}\n\n/**\n * pnpm-workspace.yaml data interface\n */\nexport interface PnpmWorkspaceData {\n packages: string[];\n catalog?: Record<string, string>;\n catalogs?: Record<string, Record<string, string>>;\n catalogMode?: CatalogMode;\n shamefullyHoist?: boolean;\n linkWorkspacePackages?: boolean | 'deep';\n [key: string]: any;\n}\n\n/**\n * Workspace Config Validation Result\n */\nexport class WorkspaceConfigValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n\n/**\n * Catalog Definition Validation Result\n */\nexport class CatalogDefinitionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid;\n }\n\n public getErrors(): string[] {\n return [...this.errors];\n }\n\n public getWarnings(): string[] {\n return [...this.warnings];\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0;\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","/**\n * WorkspaceId Value Object\n *\n * Represents a unique identifier for a pnpm workspace.\n * This is an immutable value object that ensures workspace identity.\n */\n\nexport class WorkspaceId {\n private readonly value: string;\n\n private constructor(value: string) {\n this.value = value;\n }\n\n /**\n * Create a WorkspaceId from a string value\n */\n public static fromString(value: string): WorkspaceId {\n if (!value || value.trim().length === 0) {\n throw new Error('WorkspaceId cannot be empty');\n }\n\n if (value.length > 255) {\n throw new Error('WorkspaceId cannot exceed 255 characters');\n }\n\n // Validate format - alphanumeric, hyphens, underscores only\n const validPattern = /^[a-zA-Z0-9_-]+$/;\n if (!validPattern.test(value.trim())) {\n throw new Error(\n 'WorkspaceId can only contain alphanumeric characters, hyphens, and underscores'\n );\n }\n\n return new WorkspaceId(value.trim());\n }\n\n /**\n * Generate a new unique WorkspaceId\n */\n public static generate(): WorkspaceId {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return new WorkspaceId(`workspace-${timestamp}-${random}`);\n }\n\n /**\n * Create a WorkspaceId from a workspace path\n */\n public static fromPath(path: string): WorkspaceId {\n // Extract a meaningful identifier from the path\n const normalizedPath = path.replace(/\\\\/g, '/');\n const pathParts = normalizedPath.split('/').filter(Boolean);\n const lastPart = pathParts[pathParts.length - 1] || 'workspace';\n\n // Sanitize the path part to create a valid ID\n const sanitized = lastPart\n .replace(/[^a-zA-Z0-9_-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n\n if (sanitized.length === 0) {\n return WorkspaceId.generate();\n }\n\n return new WorkspaceId(sanitized);\n }\n\n /**\n * Get the string value of this WorkspaceId\n */\n public toString(): string {\n return this.value;\n }\n\n /**\n * Get the raw value\n */\n public getValue(): string {\n return this.value;\n }\n\n /**\n * Check equality with another WorkspaceId\n */\n public equals(other: WorkspaceId): boolean {\n return this.value === other.value;\n }\n\n /**\n * Check if this WorkspaceId is the same as another\n */\n public isSameAs(other: WorkspaceId): boolean {\n return this.equals(other);\n }\n\n /**\n * Get a hash code for this WorkspaceId\n */\n public hashCode(): number {\n let hash = 0;\n for (let i = 0; i < this.value.length; i++) {\n const char = this.value.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return hash;\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value;\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): WorkspaceId {\n return WorkspaceId.fromString(json);\n }\n}\n","/**\n * Cache System\n *\n * Provides caching capabilities for NPM registry responses and other expensive operations.\n * Supports both in-memory and file-based caching with TTL and size limits.\n */\n\nimport { createHash } from 'crypto';\nimport { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'fs';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\nexport interface CacheEntry<T = any> {\n key: string;\n value: T;\n timestamp: number;\n ttl: number; // Time to live in milliseconds\n size: number; // Estimated size in bytes\n}\n\nexport interface CacheOptions {\n ttl?: number; // Default TTL in milliseconds\n maxSize?: number; // Max total cache size in bytes\n maxEntries?: number; // Max number of entries\n persistToDisk?: boolean; // Whether to persist cache to disk\n cacheDir?: string; // Directory for file-based cache\n}\n\nexport interface CacheStats {\n totalEntries: number;\n totalSize: number;\n hitRate: number;\n missRate: number;\n hits: number;\n misses: number;\n}\n\nexport class Cache<T = any> {\n private entries = new Map<string, CacheEntry<T>>();\n private stats = {\n hits: 0,\n misses: 0,\n };\n\n private options: Required<CacheOptions>;\n\n constructor(name: string, options: CacheOptions = {}) {\n this.options = {\n ttl: options.ttl || 3600000, // 1 hour default\n maxSize: options.maxSize || 50 * 1024 * 1024, // 50MB default\n maxEntries: options.maxEntries || 1000,\n persistToDisk: options.persistToDisk || false,\n cacheDir: options.cacheDir || join(homedir(), '.pcu', 'cache', name),\n };\n\n if (this.options.persistToDisk) {\n this.loadFromDisk();\n }\n\n // Setup cleanup interval\n setInterval(() => this.cleanup(), 300000); // Clean every 5 minutes\n }\n\n /**\n * Get value from cache\n */\n get(key: string): T | undefined {\n const entry = this.entries.get(key);\n\n if (!entry) {\n this.stats.misses++;\n return undefined;\n }\n\n // Check if entry has expired\n if (Date.now() - entry.timestamp > entry.ttl) {\n this.entries.delete(key);\n this.stats.misses++;\n return undefined;\n }\n\n this.stats.hits++;\n return entry.value;\n }\n\n /**\n * Set value in cache\n */\n set(key: string, value: T, ttl?: number): void {\n const entryTtl = ttl || this.options.ttl;\n const size = this.estimateSize(value);\n\n const entry: CacheEntry<T> = {\n key,\n value,\n timestamp: Date.now(),\n ttl: entryTtl,\n size,\n };\n\n // Remove old entry if exists\n if (this.entries.has(key)) {\n this.entries.delete(key);\n }\n\n // Check size limits before adding\n this.ensureCapacity(size);\n\n this.entries.set(key, entry);\n\n if (this.options.persistToDisk) {\n this.saveToDisk(key, entry);\n }\n }\n\n /**\n * Check if key exists in cache\n */\n has(key: string): boolean {\n const entry = this.entries.get(key);\n\n if (!entry) {\n return false;\n }\n\n // Check if expired\n if (Date.now() - entry.timestamp > entry.ttl) {\n this.entries.delete(key);\n return false;\n }\n\n return true;\n }\n\n /**\n * Delete entry from cache\n */\n delete(key: string): boolean {\n const deleted = this.entries.delete(key);\n\n if (deleted && this.options.persistToDisk) {\n this.deleteFromDisk(key);\n }\n\n return deleted;\n }\n\n /**\n * Clear all cache entries\n */\n clear(): void {\n this.entries.clear();\n this.stats.hits = 0;\n this.stats.misses = 0;\n\n if (this.options.persistToDisk) {\n this.clearDisk();\n }\n }\n\n /**\n * Get cache statistics\n */\n getStats(): CacheStats {\n const total = this.stats.hits + this.stats.misses;\n\n return {\n totalEntries: this.entries.size,\n totalSize: this.getTotalSize(),\n hitRate: total > 0 ? this.stats.hits / total : 0,\n missRate: total > 0 ? this.stats.misses / total : 0,\n hits: this.stats.hits,\n misses: this.stats.misses,\n };\n }\n\n /**\n * Get or set with factory function\n */\n async getOrSet(key: string, factory: () => Promise<T> | T, ttl?: number): Promise<T> {\n const cached = this.get(key);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const value = await factory();\n this.set(key, value, ttl);\n\n return value;\n }\n\n /**\n * Cleanup expired entries\n */\n private cleanup(): void {\n const now = Date.now();\n const expiredKeys: string[] = [];\n\n for (const [key, entry] of this.entries) {\n if (now - entry.timestamp > entry.ttl) {\n expiredKeys.push(key);\n }\n }\n\n for (const key of expiredKeys) {\n this.delete(key);\n }\n }\n\n /**\n * Ensure cache capacity doesn't exceed limits\n */\n private ensureCapacity(newEntrySize: number): void {\n // Check entry count limit\n while (this.entries.size >= this.options.maxEntries) {\n this.evictOldest();\n }\n\n // Check size limit\n while (this.getTotalSize() + newEntrySize > this.options.maxSize) {\n this.evictOldest();\n }\n }\n\n /**\n * Evict oldest entry\n */\n private evictOldest(): void {\n let oldestKey: string | undefined;\n let oldestTimestamp = Date.now();\n\n for (const [key, entry] of this.entries) {\n if (entry.timestamp < oldestTimestamp) {\n oldestTimestamp = entry.timestamp;\n oldestKey = key;\n }\n }\n\n if (oldestKey) {\n this.delete(oldestKey);\n }\n }\n\n /**\n * Get total cache size\n */\n private getTotalSize(): number {\n let totalSize = 0;\n for (const entry of this.entries.values()) {\n totalSize += entry.size;\n }\n return totalSize;\n }\n\n /**\n * Estimate size of value in bytes\n */\n private estimateSize(value: T): number {\n try {\n return JSON.stringify(value).length * 2; // Rough UTF-16 estimate\n } catch {\n return 1000; // Default estimate for non-serializable values\n }\n }\n\n /**\n * Load cache from disk\n */\n private loadFromDisk(): void {\n try {\n if (!existsSync(this.options.cacheDir)) {\n return;\n }\n\n const indexPath = join(this.options.cacheDir, 'index.json');\n if (!existsSync(indexPath)) {\n return;\n }\n\n const indexContent = readFileSync(indexPath, 'utf-8');\n const index = JSON.parse(indexContent);\n\n for (const key of index.keys || []) {\n try {\n const entryPath = join(this.options.cacheDir, this.getFilename(key));\n if (existsSync(entryPath)) {\n const entryContent = readFileSync(entryPath, 'utf-8');\n const entry = JSON.parse(entryContent);\n\n // Check if entry is still valid\n if (Date.now() - entry.timestamp <= entry.ttl) {\n this.entries.set(key, entry);\n }\n }\n } catch {\n // Skip corrupted entries\n }\n }\n } catch {\n // Ignore disk loading errors\n }\n }\n\n /**\n * Save entry to disk\n */\n private saveToDisk(key: string, entry: CacheEntry<T>): void {\n try {\n if (!existsSync(this.options.cacheDir)) {\n mkdirSync(this.options.cacheDir, { recursive: true });\n }\n\n const entryPath = join(this.options.cacheDir, this.getFilename(key));\n writeFileSync(entryPath, JSON.stringify(entry), 'utf-8');\n\n // Update index\n this.updateDiskIndex();\n } catch {\n // Ignore disk saving errors\n }\n }\n\n /**\n * Delete entry from disk\n */\n private deleteFromDisk(key: string): void {\n try {\n const entryPath = join(this.options.cacheDir, this.getFilename(key));\n if (existsSync(entryPath)) {\n unlinkSync(entryPath);\n }\n this.updateDiskIndex();\n } catch {\n // Ignore disk deletion errors\n }\n }\n\n /**\n * Clear disk cache\n */\n private clearDisk(): void {\n try {\n if (existsSync(this.options.cacheDir)) {\n const fs = require('fs');\n fs.rmSync(this.options.cacheDir, { recursive: true, force: true });\n }\n } catch {\n // Ignore disk clearing errors\n }\n }\n\n /**\n * Update disk index\n */\n private updateDiskIndex(): void {\n try {\n const indexPath = join(this.options.cacheDir, 'index.json');\n const index = {\n keys: Array.from(this.entries.keys()),\n lastUpdated: Date.now(),\n };\n writeFileSync(indexPath, JSON.stringify(index), 'utf-8');\n } catch {\n // Ignore index update errors\n }\n }\n\n /**\n * Get filename for cache key\n */\n private getFilename(key: string): string {\n // Use hash to create safe filename\n const hash = createHash('md5').update(key).digest('hex');\n return `${hash}.json`;\n }\n}\n\n/**\n * Registry-specific cache for NPM API responses\n */\nexport class RegistryCache extends Cache<any> {\n constructor(options: CacheOptions = {}) {\n super('registry', {\n ttl: 3600000, // 1 hour\n maxSize: 10 * 1024 * 1024, // 10MB\n maxEntries: 500,\n persistToDisk: true,\n ...options,\n });\n }\n\n /**\n * Cache package info\n */\n setPackageInfo(packageName: string, info: any, ttl?: number): void {\n this.set(`package:${packageName}`, info, ttl);\n }\n\n /**\n * Get cached package info\n */\n getPackageInfo(packageName: string): any | undefined {\n return this.get(`package:${packageName}`);\n }\n\n /**\n * Cache version list\n */\n setVersions(packageName: string, versions: string[], ttl?: number): void {\n this.set(`versions:${packageName}`, versions, ttl);\n }\n\n /**\n * Get cached versions\n */\n getVersions(packageName: string): string[] | undefined {\n return this.get(`versions:${packageName}`);\n }\n\n /**\n * Cache security report\n */\n setSecurityReport(packageName: string, version: string, report: any, ttl?: number): void {\n this.set(`security:${packageName}:${version}`, report, ttl);\n }\n\n /**\n * Get cached security report\n */\n getSecurityReport(packageName: string, version: string): any | undefined {\n return this.get(`security:${packageName}:${version}`);\n }\n}\n\n/**\n * Workspace-specific cache for file system operations\n */\nexport class WorkspaceCache extends Cache<any> {\n constructor(options: CacheOptions = {}) {\n super('workspace', {\n ttl: 300000, // 5 minutes (shorter TTL for file system)\n maxSize: 5 * 1024 * 1024, // 5MB\n maxEntries: 200,\n persistToDisk: false, // Don't persist workspace cache\n ...options,\n });\n }\n\n /**\n * Cache workspace info\n */\n setWorkspaceInfo(workspacePath: string, info: any, ttl?: number): void {\n this.set(`workspace:${workspacePath}`, info, ttl);\n }\n\n /**\n * Get cached workspace info\n */\n getWorkspaceInfo(workspacePath: string): any | undefined {\n return this.get(`workspace:${workspacePath}`);\n }\n\n /**\n * Cache package.json content\n */\n setPackageJson(filePath: string, content: any, ttl?: number): void {\n this.set(`package-json:${filePath}`, content, ttl);\n }\n\n /**\n * Get cached package.json\n */\n getPackageJson(filePath: string): any | undefined {\n return this.get(`package-json:${filePath}`);\n }\n}\n\n// Export singleton instances\nexport const registryCache = new RegistryCache();\nexport const workspaceCache = new WorkspaceCache();\n","/**\n * File System Service\n *\n * Provides abstracted file system operations for the application.\n * Handles reading/writing workspace files, package.json, and pnpm-workspace.yaml.\n */\n\nimport fs from 'fs/promises';\nimport { glob } from 'glob';\nimport path from 'path';\nimport YAML from 'yaml';\nimport { PackageJsonData } from '../../domain/entities/package.js';\nimport { PnpmWorkspaceData } from '../../domain/value-objects/workspaceConfig.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\n\nexport class FileSystemService {\n /**\n * Check if a file exists\n */\n async exists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Check if a path is a directory\n */\n async isDirectory(dirPath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(dirPath);\n return stat.isDirectory();\n } catch {\n return false;\n }\n }\n\n /**\n * Read a text file\n */\n async readTextFile(filePath: string): Promise<string> {\n try {\n return await fs.readFile(filePath, 'utf-8');\n } catch (error) {\n throw new Error(`Failed to read file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a text file\n */\n async writeTextFile(filePath: string, content: string): Promise<void> {\n try {\n // Ensure directory exists\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n await fs.writeFile(filePath, content, 'utf-8');\n } catch (error) {\n throw new Error(`Failed to write file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Read and parse a JSON file\n */\n async readJsonFile<T = any>(filePath: string): Promise<T> {\n try {\n const content = await this.readTextFile(filePath);\n return JSON.parse(content) as T;\n } catch (error) {\n throw new Error(`Failed to read JSON file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a JSON file\n */\n async writeJsonFile(filePath: string, data: any, indent: number = 2): Promise<void> {\n try {\n const content = JSON.stringify(data, null, indent);\n await this.writeTextFile(filePath, content);\n } catch (error) {\n throw new Error(`Failed to write JSON file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Read and parse a YAML file\n */\n async readYamlFile<T = any>(filePath: string): Promise<T> {\n try {\n const content = await this.readTextFile(filePath);\n return YAML.parse(content) as T;\n } catch (error) {\n throw new Error(`Failed to read YAML file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a YAML file\n */\n async writeYamlFile(filePath: string, data: any): Promise<void> {\n try {\n const content = YAML.stringify(data, {\n indent: 2,\n });\n await this.writeTextFile(filePath, content);\n } catch (error) {\n throw new Error(`Failed to write YAML file ${filePath}: ${error}`);\n }\n }\n\n /**\n * Write a YAML file while preserving comments and formatting\n */\n async writeYamlFilePreservingFormat(filePath: string, data: any): Promise<void> {\n try {\n // Read the original file to preserve comments and formatting\n const originalContent = await this.readTextFile(filePath);\n\n // Use smart YAML updating that preserves comments and formatting\n const updatedContent = this.updateYamlPreservingFormat(originalContent, data);\n\n await this.writeTextFile(filePath, updatedContent);\n } catch (error) {\n // If reading the original file fails, fall back to regular YAML writing\n console.warn(\n `Could not preserve YAML format for ${filePath}, falling back to standard formatting`\n );\n await this.writeYamlFile(filePath, data);\n }\n }\n\n /**\n * Update YAML content while preserving comments and formatting\n */\n private updateYamlPreservingFormat(originalContent: string, newData: any): string {\n const lines = originalContent.split('\\n');\n const result: string[] = [];\n let i = 0;\n\n // Helper function to update a specific section\n const updateSection = (sectionName: string, newValue: any): boolean => {\n if (!(sectionName in newData)) {\n return false;\n }\n\n // Find the section in the original content\n let sectionStartIndex = -1;\n let sectionEndIndex = -1;\n let indentLevel = 0;\n\n for (let j = i; j < lines.length; j++) {\n const fullLine = lines[j];\n if (!fullLine) continue;\n\n const line = fullLine.trim();\n\n if (line.startsWith(`${sectionName}:`)) {\n sectionStartIndex = j;\n indentLevel = fullLine.length - fullLine.trimStart().length;\n\n // Find the end of this section\n for (let k = j + 1; k < lines.length; k++) {\n const nextLine = lines[k];\n if (!nextLine) continue;\n\n const nextLineTrimmed = nextLine.trim();\n const nextIndentLevel = nextLine.length - nextLine.trimStart().length;\n\n // If we find a line with same or less indentation that defines a new section, stop\n if (\n nextIndentLevel <= indentLevel &&\n nextLineTrimmed.includes(':') &&\n !nextLineTrimmed.startsWith('#')\n ) {\n sectionEndIndex = k - 1;\n break;\n }\n\n // If we find a line that's not empty, not indented enough to be part of this section, stop\n // Special case: comments at the same level after an empty line should end the section\n if (nextLineTrimmed !== '' && nextIndentLevel <= indentLevel) {\n if (nextLineTrimmed.startsWith('#') && nextIndentLevel === indentLevel) {\n // Check if there was an empty line before this comment\n let hasEmptyLineBefore = false;\n for (let m = k - 1; m > j; m--) {\n const prevLine = lines[m];\n if (!prevLine || prevLine.trim() === '') {\n hasEmptyLineBefore = true;\n break;\n }\n if (prevLine.trim() !== '') {\n break;\n }\n }\n if (hasEmptyLineBefore) {\n sectionEndIndex = k - 1;\n break;\n }\n } else if (!nextLineTrimmed.startsWith('#')) {\n sectionEndIndex = k - 1;\n break;\n }\n }\n }\n\n if (sectionEndIndex === -1) {\n sectionEndIndex = lines.length - 1;\n }\n break;\n }\n }\n\n if (sectionStartIndex !== -1) {\n // Update the section\n const sectionContent = this.formatYamlSection(\n sectionName,\n newValue,\n indentLevel,\n lines,\n sectionStartIndex,\n sectionEndIndex\n );\n\n // Add lines before the section\n for (let j = i; j < sectionStartIndex; j++) {\n const lineContent = lines[j];\n if (lineContent !== undefined) {\n result.push(lineContent);\n }\n }\n\n // Add the updated section\n result.push(...sectionContent);\n\n // Update the position to after this section\n i = sectionEndIndex + 1;\n return true;\n }\n\n return false;\n };\n\n // Process the file line by line\n while (i < lines.length) {\n const currentLine = lines[i];\n if (!currentLine) {\n result.push('');\n i++;\n continue;\n }\n\n const line = currentLine.trim();\n\n // Handle main sections\n if (line.startsWith('packages:')) {\n if (updateSection('packages', newData.packages)) {\n continue;\n }\n } else if (line.startsWith('catalog:')) {\n if (updateSection('catalog', newData.catalog)) {\n continue;\n }\n } else if (line.startsWith('catalogs:')) {\n if (updateSection('catalogs', newData.catalogs)) {\n continue;\n }\n } else if (line.startsWith('catalogMode:')) {\n if ('catalogMode' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length;\n result.push(' '.repeat(indent) + `catalogMode: ${newData.catalogMode}`);\n i++;\n continue;\n }\n } else if (line.startsWith('shamefullyHoist:')) {\n if ('shamefullyHoist' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length;\n result.push(' '.repeat(indent) + `shamefullyHoist: ${newData.shamefullyHoist}`);\n i++;\n continue;\n }\n } else if (line.startsWith('linkWorkspacePackages:')) {\n if ('linkWorkspacePackages' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length;\n result.push(\n ' '.repeat(indent) + `linkWorkspacePackages: ${newData.linkWorkspacePackages}`\n );\n i++;\n continue;\n }\n }\n\n // Keep the original line if not updated\n result.push(currentLine);\n i++;\n }\n\n return result.join('\\n');\n }\n\n /**\n * Format a YAML section with proper indentation while preserving internal structure\n */\n private formatYamlSection(\n sectionName: string,\n value: any,\n baseIndent: number = 0,\n originalLines?: string[],\n sectionStart?: number,\n sectionEnd?: number\n ): string[] {\n const lines: string[] = [];\n const indent = ' '.repeat(baseIndent);\n\n if (sectionName === 'packages' && Array.isArray(value)) {\n lines.push(`${indent}packages:`);\n for (const pkg of value) {\n lines.push(`${indent} - \"${pkg}\"`);\n }\n } else if (\n (sectionName === 'catalog' || sectionName === 'catalogs') &&\n typeof value === 'object'\n ) {\n if (sectionName === 'catalog') {\n lines.push(`${indent}catalog:`);\n\n // Try to preserve original structure and comments if available\n if (originalLines && sectionStart !== undefined && sectionEnd !== undefined) {\n const valueEntries = Object.entries(value);\n const processedPackages = new Set<string>();\n\n // First pass: update existing packages while preserving comments\n for (let i = sectionStart + 1; i <= sectionEnd; i++) {\n const line = originalLines[i];\n if (!line) continue;\n\n const trimmed = line.trim();\n\n // Preserve comments and empty lines\n if (trimmed.startsWith('#') || trimmed === '') {\n lines.push(line);\n continue;\n }\n\n // Check if this line defines a package (with or without quotes)\n const packageMatch = trimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/);\n if (packageMatch && packageMatch[2]) {\n const packageName = packageMatch[2];\n const newVersion = value[packageName];\n\n if (newVersion !== undefined) {\n // Update with new version while preserving indentation and quotes\n const originalIndent = line.length - line.trimStart().length;\n const quote = packageMatch[1] || ''; // Preserve original quote style\n lines.push(\n ' '.repeat(originalIndent) + `${quote}${packageName}${quote}: ${newVersion}`\n );\n processedPackages.add(packageName);\n } else {\n // Keep the line as is if package not in new data\n lines.push(line);\n }\n } else {\n // Keep other lines as is\n lines.push(line);\n }\n }\n\n // Second pass: add any new packages that weren't in the original\n for (const [pkg, version] of valueEntries) {\n if (!processedPackages.has(pkg)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n } else {\n // Fallback to simple formatting\n for (const [pkg, version] of Object.entries(value)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n } else {\n // Handle catalogs section with format preservation\n lines.push(`${indent}catalogs:`);\n\n if (originalLines && sectionStart !== undefined && sectionEnd !== undefined) {\n // Try to preserve original structure for catalogs section\n this.formatCatalogsSection(\n lines,\n value,\n baseIndent,\n originalLines,\n sectionStart,\n sectionEnd\n );\n } else {\n // Fallback to simple formatting\n for (const [catalogName, catalog] of Object.entries(value as Record<string, any>)) {\n lines.push(`${indent} ${catalogName}:`);\n for (const [pkg, version] of Object.entries(catalog)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n }\n }\n }\n\n return lines;\n }\n\n /**\n * Format catalogs section while preserving structure and comments\n */\n private formatCatalogsSection(\n lines: string[],\n value: Record<string, any>,\n baseIndent: number,\n originalLines: string[],\n sectionStart: number,\n sectionEnd: number\n ): void {\n const indent = ' '.repeat(baseIndent);\n const processedCatalogs = new Set<string>();\n\n let i = sectionStart + 1;\n while (i <= sectionEnd) {\n const line = originalLines[i];\n if (!line) {\n i++;\n continue;\n }\n\n const trimmed = line.trim();\n\n // Preserve comments and empty lines\n if (trimmed.startsWith('#') || trimmed === '') {\n lines.push(line);\n i++;\n continue;\n }\n\n // Check if this line defines a catalog\n const catalogMatch = trimmed.match(/^([a-zA-Z0-9\\-_.]+):\\s*$/);\n if (catalogMatch && catalogMatch[1]) {\n const catalogName = catalogMatch[1];\n const catalogData = value[catalogName];\n\n if (catalogData) {\n // This catalog exists in the new data\n const originalIndent = line.length - line.trimStart().length;\n lines.push(' '.repeat(originalIndent) + `${catalogName}:`);\n processedCatalogs.add(catalogName);\n\n // Process packages within this catalog\n i++;\n while (i <= sectionEnd) {\n const packageLine = originalLines[i];\n if (!packageLine) {\n i++;\n continue;\n }\n\n const packageTrimmed = packageLine.trim();\n const packageIndent = packageLine.length - packageLine.trimStart().length;\n\n // If we hit another catalog or section at same/lesser indent, break\n if (\n packageIndent <= originalIndent &&\n packageTrimmed !== '' &&\n !packageTrimmed.startsWith('#')\n ) {\n break;\n }\n\n // Preserve comments and empty lines\n if (packageTrimmed.startsWith('#') || packageTrimmed === '') {\n lines.push(packageLine);\n i++;\n continue;\n }\n\n // Check if this line defines a package\n const packageMatch = packageTrimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/);\n if (packageMatch && packageMatch[2]) {\n const packageName = packageMatch[2];\n const newVersion = catalogData[packageName];\n\n if (newVersion !== undefined) {\n // Update with new version while preserving indentation and quotes\n const quote = packageMatch[1] || '';\n lines.push(\n ' '.repeat(packageIndent) + `${quote}${packageName}${quote}: ${newVersion}`\n );\n } else {\n // Keep the line as is if package not in new data\n lines.push(packageLine);\n }\n } else {\n // Keep other lines as is\n lines.push(packageLine);\n }\n\n i++;\n }\n\n // Add any new packages that weren't in the original\n for (const [pkg, version] of Object.entries(catalogData)) {\n if (\n !this.packageExistsInCatalogSection(\n originalLines,\n sectionStart,\n sectionEnd,\n catalogName,\n pkg\n )\n ) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n } else {\n // This catalog doesn't exist in new data, keep as is\n lines.push(line);\n i++;\n }\n } else {\n // Not a catalog definition, keep as is\n lines.push(line);\n i++;\n }\n }\n\n // Add any new catalogs that weren't in the original\n for (const [catalogName, catalogData] of Object.entries(value)) {\n if (!processedCatalogs.has(catalogName)) {\n lines.push(`${indent} ${catalogName}:`);\n for (const [pkg, version] of Object.entries(catalogData)) {\n lines.push(`${indent} ${pkg}: ${version}`);\n }\n }\n }\n }\n\n /**\n * Check if a package exists in a catalog section\n */\n private packageExistsInCatalogSection(\n lines: string[],\n sectionStart: number,\n sectionEnd: number,\n catalogName: string,\n packageName: string\n ): boolean {\n let foundCatalog = false;\n\n for (let i = sectionStart + 1; i <= sectionEnd; i++) {\n const line = lines[i];\n if (!line) continue;\n\n const trimmed = line.trim();\n\n // Check if we found the catalog\n if (trimmed === `${catalogName}:`) {\n foundCatalog = true;\n continue;\n }\n\n // If we found another catalog, stop\n if (foundCatalog && trimmed.match(/^[a-zA-Z0-9\\-_.]+:\\s*$/)) {\n break;\n }\n\n // If we're in the right catalog, check for the package\n if (foundCatalog) {\n const packageMatch = trimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/);\n if (packageMatch && packageMatch[2] === packageName) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Read pnpm-workspace.yaml configuration\n */\n async readPnpmWorkspaceConfig(workspacePath: WorkspacePath): Promise<PnpmWorkspaceData> {\n const configPath = workspacePath.getPnpmWorkspaceConfigPath().toString();\n\n if (!(await this.exists(configPath))) {\n throw new Error(`pnpm-workspace.yaml not found at ${configPath}`);\n }\n\n return await this.readYamlFile<PnpmWorkspaceData>(configPath);\n }\n\n /**\n * Write pnpm-workspace.yaml configuration\n */\n async writePnpmWorkspaceConfig(\n workspacePath: WorkspacePath,\n config: PnpmWorkspaceData\n ): Promise<void> {\n const configPath = workspacePath.getPnpmWorkspaceConfigPath().toString();\n await this.writeYamlFilePreservingFormat(configPath, config);\n }\n\n /**\n * Read package.json file\n */\n async readPackageJson(packagePath: WorkspacePath): Promise<PackageJsonData> {\n const packageJsonPath = packagePath.getPackageJsonPath().toString();\n\n if (!(await this.exists(packageJsonPath))) {\n throw new Error(`package.json not found at ${packageJsonPath}`);\n }\n\n return await this.readJsonFile<PackageJsonData>(packageJsonPath);\n }\n\n /**\n * Write package.json file\n */\n async writePackageJson(packagePath: WorkspacePath, packageData: PackageJsonData): Promise<void> {\n const packageJsonPath = packagePath.getPackageJsonPath().toString();\n await this.writeJsonFile(packageJsonPath, packageData);\n }\n\n /**\n * Find package.json files using glob patterns\n */\n async findPackageJsonFiles(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]> {\n const results: string[] = [];\n\n for (const pattern of patterns) {\n try {\n // Convert pattern to absolute path and look for package.json\n const absolutePattern = path.resolve(workspacePath.toString(), pattern, 'package.json');\n const matches = await glob(absolutePattern, {\n ignore: ['**/node_modules/**'],\n absolute: true,\n });\n results.push(...matches);\n } catch (error) {\n // Continue with other patterns if one fails\n console.warn(`Failed to process pattern ${pattern}:`, error);\n }\n }\n\n // Remove duplicates and return\n return Array.from(new Set(results));\n }\n\n /**\n * Find directories matching patterns\n */\n async findDirectories(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]> {\n const results: string[] = [];\n\n for (const pattern of patterns) {\n try {\n const absolutePattern = path.resolve(workspacePath.toString(), pattern);\n const matches = await glob(absolutePattern, {\n ignore: ['**/node_modules/**'],\n absolute: true,\n });\n results.push(...matches);\n } catch (error) {\n console.warn(`Failed to process pattern ${pattern}:`, error);\n }\n }\n\n return Array.from(new Set(results));\n }\n\n /**\n * Check if a directory contains a pnpm workspace\n */\n async isPnpmWorkspace(dirPath: string): Promise<boolean> {\n const workspaceConfigPath = path.join(dirPath, 'pnpm-workspace.yaml');\n const packageJsonPath = path.join(dirPath, 'package.json');\n\n // Must have both pnpm-workspace.yaml and package.json\n return (await this.exists(workspaceConfigPath)) && (await this.exists(packageJsonPath));\n }\n\n /**\n * Find the nearest pnpm workspace by traversing up the directory tree\n */\n async findNearestWorkspace(startPath: string): Promise<string | null> {\n let currentPath = path.resolve(startPath);\n\n while (currentPath !== path.dirname(currentPath)) {\n if (await this.isPnpmWorkspace(currentPath)) {\n return currentPath;\n }\n currentPath = path.dirname(currentPath);\n }\n\n return null;\n }\n\n /**\n * Get file modification time\n */\n async getModificationTime(filePath: string): Promise<Date> {\n try {\n const stat = await fs.stat(filePath);\n return stat.mtime;\n } catch (error) {\n throw new Error(`Failed to get modification time for ${filePath}: ${error}`);\n }\n }\n\n /**\n * Create a backup of a file\n */\n async createBackup(filePath: string): Promise<string> {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const backupPath = `${filePath}.backup.${timestamp}`;\n\n try {\n await fs.copyFile(filePath, backupPath);\n return backupPath;\n } catch (error) {\n throw new Error(`Failed to create backup of ${filePath}: ${error}`);\n }\n }\n\n /**\n * Restore a file from backup\n */\n async restoreFromBackup(originalPath: string, backupPath: string): Promise<void> {\n try {\n await fs.copyFile(backupPath, originalPath);\n } catch (error) {\n throw new Error(`Failed to restore ${originalPath} from backup: ${error}`);\n }\n }\n\n /**\n * Remove a file\n */\n async removeFile(filePath: string): Promise<void> {\n try {\n await fs.unlink(filePath);\n } catch (error) {\n throw new Error(`Failed to remove file ${filePath}: ${error}`);\n }\n }\n\n /**\n * List files in a directory\n */\n async listFiles(dirPath: string): Promise<string[]> {\n try {\n const items = await fs.readdir(dirPath, { withFileTypes: true });\n return items.filter((item) => item.isFile()).map((item) => path.join(dirPath, item.name));\n } catch (error) {\n throw new Error(`Failed to list files in ${dirPath}: ${error}`);\n }\n }\n\n /**\n * List directories in a directory\n */\n async listDirectories(dirPath: string): Promise<string[]> {\n try {\n const items = await fs.readdir(dirPath, { withFileTypes: true });\n return items\n .filter((item) => item.isDirectory())\n .map((item) => path.join(dirPath, item.name));\n } catch (error) {\n throw new Error(`Failed to list directories in ${dirPath}: ${error}`);\n }\n }\n}\n","/**\n * File-based Workspace Repository Implementation\n *\n * Implements WorkspaceRepository interface using the file system.\n * Handles loading and saving workspace data from pnpm-workspace.yaml and package.json files.\n */\n\nimport path from 'path';\n\nimport { Catalog } from '../../domain/entities/catalog.js';\nimport { Package } from '../../domain/entities/package.js';\nimport { Workspace } from '../../domain/entities/workspace.js';\nimport { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js';\nimport { CatalogCollection } from '../../domain/value-objects/catalogCollection.js';\nimport { PackageCollection } from '../../domain/value-objects/packageCollection.js';\nimport { WorkspaceConfig } from '../../domain/value-objects/workspaceConfig.js';\nimport { WorkspaceId } from '../../domain/value-objects/workspaceId.js';\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js';\nimport { FileSystemService } from '../file-system/fileSystemService.js';\n\nexport class FileWorkspaceRepository implements WorkspaceRepository {\n constructor(private readonly fileSystemService: FileSystemService) {}\n\n /**\n * Find a workspace by its path\n */\n async findByPath(path: WorkspacePath): Promise<Workspace | null> {\n try {\n // Check if the path contains a valid workspace\n if (!(await this.isValidWorkspace(path))) {\n return null;\n }\n\n // Load workspace configuration\n const config = await this.loadConfiguration(path);\n\n // Create workspace ID from path\n const id = WorkspaceId.fromPath(path.toString());\n\n // Load packages\n const packages = await this.loadPackages(path, config);\n\n // Load catalogs\n const catalogs = await this.loadCatalogs(config);\n\n return Workspace.create(id, path, config, catalogs, packages);\n } catch (error) {\n console.error(`Failed to load workspace from ${path.toString()}:`, error);\n return null;\n }\n }\n\n /**\n * Find a workspace by its ID\n */\n async findById(_id: WorkspaceId): Promise<Workspace | null> {\n // For file-based implementation, we would need to maintain a mapping\n // of IDs to paths. For now, this is not implemented.\n throw new Error('Finding workspace by ID is not implemented in file-based repository');\n }\n\n /**\n * Save a workspace\n */\n async save(workspace: Workspace): Promise<void> {\n try {\n // Save workspace configuration\n await this.saveConfiguration(workspace.getPath(), workspace.getConfig());\n\n // Save packages (update their package.json files)\n await this.savePackages(workspace.getPackages());\n } catch (error) {\n throw new Error(`Failed to save workspace: ${error}`);\n }\n }\n\n /**\n * Load workspace configuration from path\n */\n async loadConfiguration(path: WorkspacePath): Promise<WorkspaceConfig> {\n try {\n const workspaceData = await this.fileSystemService.readPnpmWorkspaceConfig(path);\n return WorkspaceConfig.fromWorkspaceData(workspaceData);\n } catch (error) {\n throw new Error(`Failed to load workspace configuration from ${path.toString()}: ${error}`);\n }\n }\n\n /**\n * Save workspace configuration to path\n */\n async saveConfiguration(path: WorkspacePath, config: WorkspaceConfig): Promise<void> {\n try {\n const workspaceData = config.toPnpmWorkspaceData();\n await this.fileSystemService.writePnpmWorkspaceConfig(path, workspaceData);\n } catch (error) {\n throw new Error(`Failed to save workspace configuration to ${path.toString()}: ${error}`);\n }\n }\n\n /**\n * Check if a path contains a valid pnpm workspace\n */\n async isValidWorkspace(path: WorkspacePath): Promise<boolean> {\n return await this.fileSystemService.isPnpmWorkspace(path.toString());\n }\n\n /**\n * Discover workspace from current working directory or given path\n */\n async discoverWorkspace(searchPath?: WorkspacePath): Promise<Workspace | null> {\n const startPath = searchPath?.toString() || process.cwd();\n\n try {\n const workspacePath = await this.fileSystemService.findNearestWorkspace(startPath);\n\n if (!workspacePath) {\n return null;\n }\n\n return await this.findByPath(WorkspacePath.fromString(workspacePath));\n } catch (error) {\n console.error(`Failed to discover workspace from ${startPath}:`, error);\n return null;\n }\n }\n\n /**\n * Load packages from workspace\n */\n private async loadPackages(\n workspacePath: WorkspacePath,\n config: WorkspaceConfig\n ): Promise<PackageCollection> {\n try {\n const packagePatterns = config.getPackagePatterns();\n\n // Find all package.json files matching the patterns\n const packageJsonFiles = await this.fileSystemService.findPackageJsonFiles(\n workspacePath,\n packagePatterns\n );\n\n const packages: Package[] = [];\n\n for (const packageJsonPath of packageJsonFiles) {\n try {\n const packageDir = path.dirname(packageJsonPath);\n const packagePath = WorkspacePath.fromString(packageDir);\n\n // Read package.json\n const packageData = await this.fileSystemService.readPackageJson(packagePath);\n\n // Create package\n const packageId = `${packageData.name}-${packageDir}`;\n const pkg = Package.create(packageId, packageData.name, packagePath, packageData);\n\n packages.push(pkg);\n } catch (error) {\n console.warn(`Failed to load package from ${packageJsonPath}:`, error);\n // Continue with other packages\n }\n }\n\n return PackageCollection.fromPackages(packages);\n } catch (error) {\n throw new Error(`Failed to load packages: ${error}`);\n }\n }\n\n /**\n * Load catalogs from workspace configuration\n */\n private async loadCatalogs(config: WorkspaceConfig): Promise<CatalogCollection> {\n try {\n const catalogs: Catalog[] = [];\n const catalogDefinitions = config.getCatalogDefinitions();\n\n for (const [catalogName, catalogDef] of catalogDefinitions) {\n const catalogId = `catalog-${catalogName}`;\n const catalog = Catalog.create(\n catalogId,\n catalogName,\n catalogDef.getDependencies(),\n config.getCatalogMode()\n );\n catalogs.push(catalog);\n }\n\n return CatalogCollection.fromCatalogs(catalogs);\n } catch (error) {\n throw new Error(`Failed to load catalogs: ${error}`);\n }\n }\n\n /**\n * Save packages (update their package.json files)\n */\n private async savePackages(packages: PackageCollection): Promise<void> {\n for (const pkg of packages.getAll()) {\n try {\n const packageData = pkg.toPackageJsonData();\n await this.fileSystemService.writePackageJson(pkg.getPath(), packageData);\n } catch (error) {\n console.error(`Failed to save package ${pkg.getName()}:`, error);\n // Continue with other packages\n }\n }\n }\n}\n","/**\n * Color Theme System\n *\n * Provides consistent color schemes and styling across the CLI\n */\n\nimport chalk from 'chalk';\n\nexport interface ColorTheme {\n // Brand colors\n primary: (text: string) => string;\n secondary: (text: string) => string;\n accent: (text: string) => string;\n\n // Semantic colors\n success: (text: string) => string;\n warning: (text: string) => string;\n error: (text: string) => string;\n info: (text: string) => string;\n\n // UI colors\n text: (text: string) => string;\n muted: (text: string) => string;\n border: (text: string) => string;\n background: (text: string) => string;\n\n // Status colors\n pending: (text: string) => string;\n processing: (text: string) => string;\n completed: (text: string) => string;\n\n // Version colors\n major: (text: string) => string;\n minor: (text: string) => string;\n patch: (text: string) => string;\n prerelease: (text: string) => string;\n\n // Risk levels\n riskHigh: (text: string) => string;\n riskMedium: (text: string) => string;\n riskLow: (text: string) => string;\n}\n\nexport class ThemeManager {\n private static currentTheme: ColorTheme;\n\n static themes = {\n default: {\n primary: (text: string) => chalk.hex('#0ea5e9')(text),\n secondary: (text: string) => chalk.hex('#8b5cf6')(text),\n accent: (text: string) => chalk.hex('#f59e0b')(text),\n\n success: (text: string) => chalk.green(text),\n warning: (text: string) => chalk.yellow(text),\n error: (text: string) => chalk.red(text),\n info: (text: string) => chalk.blue(text),\n\n text: (text: string) => chalk.white(text),\n muted: (text: string) => chalk.gray(text),\n border: (text: string) => chalk.dim(text),\n background: (text: string) => chalk.bgBlack(text),\n\n pending: (text: string) => chalk.cyan(text),\n processing: (text: string) => chalk.blue(text),\n completed: (text: string) => chalk.green(text),\n\n major: (text: string) => chalk.red(text),\n minor: (text: string) => chalk.yellow(text),\n patch: (text: string) => chalk.green(text),\n prerelease: (text: string) => chalk.magenta(text),\n\n riskHigh: (text: string) => chalk.red(text),\n riskMedium: (text: string) => chalk.yellow(text),\n riskLow: (text: string) => chalk.green(text),\n },\n\n modern: {\n primary: (text: string) => chalk.hex('#06b6d4')(text),\n secondary: (text: string) => chalk.hex('#ec4899')(text),\n accent: (text: string) => chalk.hex('#10b981')(text),\n\n success: (text: string) => chalk.hex('#10b981')(text),\n warning: (text: string) => chalk.hex('#f59e0b')(text),\n error: (text: string) => chalk.hex('#ef4444')(text),\n info: (text: string) => chalk.hex('#06b6d4')(text),\n\n text: (text: string) => chalk.hex('#e5e7eb')(text),\n muted: (text: string) => chalk.hex('#6b7280')(text),\n border: (text: string) => chalk.hex('#374151')(text),\n background: (text: string) => chalk.hex('#111827')(text),\n\n pending: (text: string) => chalk.hex('#06b6d4')(text),\n processing: (text: string) => chalk.hex('#3b82f6')(text),\n completed: (text: string) => chalk.hex('#10b981')(text),\n\n major: (text: string) => chalk.hex('#ef4444')(text),\n minor: (text: string) => chalk.hex('#f59e0b')(text),\n patch: (text: string) => chalk.hex('#10b981')(text),\n prerelease: (text: string) => chalk.hex('#8b5cf6')(text),\n\n riskHigh: (text: string) => chalk.hex('#ef4444')(text),\n riskMedium: (text: string) => chalk.hex('#f59e0b')(text),\n riskLow: (text: string) => chalk.hex('#10b981')(text),\n },\n\n minimal: {\n primary: (text: string) => chalk.white(text),\n secondary: (text: string) => chalk.gray(text),\n accent: (text: string) => chalk.white(text),\n\n success: (text: string) => chalk.green(text),\n warning: (text: string) => chalk.yellow(text),\n error: (text: string) => chalk.red(text),\n info: (text: string) => chalk.blue(text),\n\n text: (text: string) => chalk.white(text),\n muted: (text: string) => chalk.gray(text),\n border: (text: string) => chalk.gray(text),\n background: (text: string) => chalk.white(text),\n\n pending: (text: string) => chalk.blue(text),\n processing: (text: string) => chalk.blue(text),\n completed: (text: string) => chalk.green(text),\n\n major: (text: string) => chalk.red(text),\n minor: (text: string) => chalk.yellow(text),\n patch: (text: string) => chalk.green(text),\n prerelease: (text: string) => chalk.magenta(text),\n\n riskHigh: (text: string) => chalk.red(text),\n riskMedium: (text: string) => chalk.yellow(text),\n riskLow: (text: string) => chalk.green(text),\n },\n\n neon: {\n primary: (text: string) => chalk.hex('#00ffff')(text),\n secondary: (text: string) => chalk.hex('#ff00ff')(text),\n accent: (text: string) => chalk.hex('#ffff00')(text),\n\n success: (text: string) => chalk.hex('#00ff00')(text),\n warning: (text: string) => chalk.hex('#ffff00')(text),\n error: (text: string) => chalk.hex('#ff0000')(text),\n info: (text: string) => chalk.hex('#00ffff')(text),\n\n text: (text: string) => chalk.hex('#ffffff')(text),\n muted: (text: string) => chalk.hex('#808080')(text),\n border: (text: string) => chalk.hex('#404040')(text),\n background: (text: string) => chalk.hex('#000000')(text),\n\n pending: (text: string) => chalk.hex('#00ffff')(text),\n processing: (text: string) => chalk.hex('#0080ff')(text),\n completed: (text: string) => chalk.hex('#00ff00')(text),\n\n major: (text: string) => chalk.hex('#ff0000')(text),\n minor: (text: string) => chalk.hex('#ffff00')(text),\n patch: (text: string) => chalk.hex('#00ff00')(text),\n prerelease: (text: string) => chalk.hex('#ff00ff')(text),\n\n riskHigh: (text: string) => chalk.hex('#ff0000')(text),\n riskMedium: (text: string) => chalk.hex('#ffff00')(text),\n riskLow: (text: string) => chalk.hex('#00ff00')(text),\n },\n };\n\n static setTheme(themeName: keyof typeof ThemeManager.themes): void {\n this.currentTheme = this.themes[themeName];\n }\n\n static getTheme(): ColorTheme {\n return this.currentTheme || this.themes.default;\n }\n\n static listThemes(): string[] {\n return Object.keys(this.themes);\n }\n}\n\n/**\n * Styled text utilities\n */\nexport class StyledText {\n private static theme = ThemeManager.getTheme();\n\n static updateTheme(): void {\n this.theme = ThemeManager.getTheme();\n }\n\n // Brand styles\n static brand(text: string): string {\n return this.theme.primary(text);\n }\n\n static secondary(text: string): string {\n return this.theme.secondary(text);\n }\n\n static accent(text: string): string {\n return this.theme.accent(text);\n }\n\n // Semantic styles\n static success(text: string): string {\n return this.theme.success(text);\n }\n\n static warning(text: string): string {\n return this.theme.warning(text);\n }\n\n static error(text: string): string {\n return this.theme.error(text);\n }\n\n static info(text: string): string {\n return this.theme.info(text);\n }\n\n // UI styles\n static text(text: string): string {\n return this.theme.text(text);\n }\n\n static muted(text: string): string {\n return this.theme.muted(text);\n }\n\n static border(text: string): string {\n return this.theme.border(text);\n }\n\n // Status styles\n static pending(text: string): string {\n return this.theme.pending(text);\n }\n\n static processing(text: string): string {\n return this.theme.processing(text);\n }\n\n static completed(text: string): string {\n return this.theme.completed(text);\n }\n\n // Version styles\n static versionMajor(text: string): string {\n return this.theme.major(text);\n }\n\n static versionMinor(text: string): string {\n return this.theme.minor(text);\n }\n\n static versionPatch(text: string): string {\n return this.theme.patch(text);\n }\n\n static versionPrerelease(text: string): string {\n return this.theme.prerelease(text);\n }\n\n // Risk styles\n static riskHigh(text: string): string {\n return this.theme.riskHigh(text);\n }\n\n static riskMedium(text: string): string {\n return this.theme.riskMedium(text);\n }\n\n static riskLow(text: string): string {\n return this.theme.riskLow(text);\n }\n\n // Icons\n static icon(icon: string, text?: string): string {\n return text ? `${icon} ${text}` : icon;\n }\n\n static iconSuccess(text?: string): string {\n return this.icon('✅', text);\n }\n\n static iconWarning(text?: string): string {\n return this.icon('⚠️', text);\n }\n\n static iconError(text?: string): string {\n return this.icon('❌', text);\n }\n\n static iconInfo(text?: string): string {\n return this.icon('ℹ️', text);\n }\n\n static iconPackage(text?: string): string {\n return this.icon('📦', text);\n }\n\n static iconCatalog(text?: string): string {\n return this.icon('📋', text);\n }\n\n static iconUpdate(text?: string): string {\n return this.icon('🔄', text);\n }\n\n static iconSecurity(text?: string): string {\n return this.icon('🔒', text);\n }\n\n static iconAnalysis(text?: string): string {\n return this.icon('🔍', text);\n }\n\n static iconCheck(text?: string): string {\n return this.icon('✅', text);\n }\n\n static iconProgress(text?: string): string {\n return this.icon('⏳', text);\n }\n\n static iconComplete(text?: string): string {\n return this.icon('🎉', text);\n }\n}\n\n/**\n * Table styling utilities\n */\nexport class TableStyles {\n static createHeaderStyle(color: any) {\n return (text: string) => color.bold(text);\n }\n\n static createBorderStyle(color: any) {\n return (text: string) => color.dim(text);\n }\n\n static createCellStyle(color: any) {\n return (text: string) => color(text);\n }\n}\n\n/**\n * Theme configuration interface\n */\nexport interface ThemeConfig {\n name: string;\n colors: Partial<ColorTheme>;\n icons: Record<string, string>;\n styles: Record<string, any>;\n}\n\n/**\n * Theme presets for different use cases\n */\nexport const themePresets = {\n development: {\n name: 'development',\n description: 'Bright colors for development environments',\n theme: 'modern',\n },\n production: {\n name: 'production',\n description: 'Subtle colors for production environments',\n theme: 'minimal',\n },\n presentation: {\n name: 'presentation',\n description: 'High contrast colors for presentations',\n theme: 'neon',\n },\n default: {\n name: 'default',\n description: 'Balanced colors for general use',\n theme: 'default',\n },\n};\n","/**\n * Check Command\n *\n * CLI command to check for outdated catalog dependencies.\n * Provides detailed information about available updates.\n */\n\nimport { CatalogUpdateService, CheckOptions } from '@pcu/core';\nimport { ConfigLoader } from '@pcu/utils';\nimport { OutputFormat, OutputFormatter } from '../formatters/outputFormatter.js';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\n\nexport interface CheckCommandOptions {\n workspace?: string;\n catalog?: string;\n format?: OutputFormat;\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest';\n prerelease?: boolean;\n include?: string[];\n exclude?: string[];\n verbose?: boolean;\n color?: boolean;\n}\n\nexport class CheckCommand {\n constructor(private readonly catalogUpdateService: CatalogUpdateService) {}\n\n /**\n * Execute the check command\n */\n async execute(options: CheckCommandOptions = {}): Promise<void> {\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n if (options.verbose) {\n console.log(StyledText.iconAnalysis('Checking for outdated catalog dependencies'));\n console.log(StyledText.muted(`Workspace: ${options.workspace || process.cwd()}`));\n\n if (options.catalog) {\n console.log(StyledText.muted(`Catalog: ${options.catalog}`));\n }\n\n if (options.target && options.target !== 'latest') {\n console.log(StyledText.muted(`Target: ${options.target}`));\n }\n\n console.log('');\n }\n\n // Load configuration file first\n const config = ConfigLoader.loadConfig(options.workspace || process.cwd());\n\n // Use format from CLI options first, then config file, then default\n const effectiveFormat = options.format || config.defaults?.format || 'table';\n\n // Create output formatter with effective format\n const formatter = new OutputFormatter(\n effectiveFormat as OutputFormat,\n options.color !== false\n );\n\n // Merge CLI options with configuration file settings\n const checkOptions: CheckOptions = {\n workspacePath: options.workspace,\n catalogName: options.catalog,\n target: options.target || config.defaults?.target || 'latest',\n includePrerelease: options.prerelease ?? config.defaults?.includePrerelease ?? false,\n // CLI include/exclude options take priority over config file\n include: options.include?.length ? options.include : config.include,\n exclude: options.exclude?.length ? options.exclude : config.exclude,\n };\n\n // Execute check\n const report = await this.catalogUpdateService.checkOutdatedDependencies(checkOptions);\n\n // Format and display results\n const formattedOutput = formatter.formatOutdatedReport(report);\n console.log(formattedOutput);\n\n // Show summary\n if (options.verbose || options.format === 'table') {\n this.showSummary(report, options);\n }\n\n // Always exit with 0 since this is just a check command\n // and finding updates is not an error condition\n process.exit(0);\n } catch (error) {\n console.error(StyledText.iconError('Error checking dependencies:'));\n console.error(StyledText.error(String(error)));\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'));\n console.error(StyledText.muted(error.stack || 'No stack trace available'));\n }\n\n process.exit(1);\n }\n }\n\n /**\n * Show command summary\n */\n private showSummary(report: any, _options: CheckCommandOptions): void {\n const lines: string[] = [];\n const theme = ThemeManager.getTheme();\n\n if (!report.hasUpdates) {\n lines.push(StyledText.iconSuccess('All catalog dependencies are up to date!'));\n } else {\n lines.push(StyledText.iconInfo('Summary:'));\n lines.push(` • ${report.totalOutdated} outdated dependencies found`);\n lines.push(` • ${report.catalogs.length} catalogs checked`);\n\n const totalPackages = report.catalogs.reduce(\n (sum: number, cat: any) => sum + cat.totalPackages,\n 0\n );\n lines.push(` • ${totalPackages} total catalog entries`);\n\n // Show breakdown by update type\n const updateTypes = { major: 0, minor: 0, patch: 0 };\n\n for (const catalog of report.catalogs) {\n for (const dep of catalog.outdatedDependencies) {\n updateTypes[dep.updateType as keyof typeof updateTypes]++;\n }\n }\n\n if (updateTypes.major > 0) {\n lines.push(theme.major(` • ${updateTypes.major} major updates`));\n }\n if (updateTypes.minor > 0) {\n lines.push(theme.minor(` • ${updateTypes.minor} minor updates`));\n }\n if (updateTypes.patch > 0) {\n lines.push(theme.patch(` • ${updateTypes.patch} patch updates`));\n }\n\n // Security updates\n const securityUpdates = report.catalogs.reduce((sum: number, cat: any) => {\n return sum + cat.outdatedDependencies.filter((dep: any) => dep.isSecurityUpdate).length;\n }, 0);\n\n if (securityUpdates > 0) {\n lines.push(StyledText.iconSecurity(`${securityUpdates} security updates`));\n }\n\n lines.push('');\n lines.push(StyledText.iconUpdate('Run with --update to apply updates'));\n\n if (updateTypes.major > 0) {\n lines.push(StyledText.iconWarning('Major updates may contain breaking changes'));\n }\n }\n\n console.log(lines.join('\\n'));\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: CheckCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal');\n }\n\n // Validate target\n if (\n options.target &&\n !['latest', 'greatest', 'minor', 'patch', 'newest'].includes(options.target)\n ) {\n errors.push('Invalid target. Must be one of: latest, greatest, minor, patch, newest');\n }\n\n // Validate include/exclude patterns\n if (options.include && options.include.some((pattern) => !pattern.trim())) {\n errors.push('Include patterns cannot be empty');\n }\n\n if (options.exclude && options.exclude.some((pattern) => !pattern.trim())) {\n errors.push('Exclude patterns cannot be empty');\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nCheck for outdated catalog dependencies\n\nUsage:\n pcu check [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --catalog <name> Check specific catalog only\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --target <type> Update target: latest, greatest, minor, patch, newest (default: latest)\n --prerelease Include prerelease versions\n --include <pattern> Include packages matching pattern (can be used multiple times)\n --exclude <pattern> Exclude packages matching pattern (can be used multiple times)\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu check # Check all catalogs\n pcu check --catalog react17 # Check specific catalog\n pcu check --target minor # Check for minor updates only\n pcu check --format json # Output as JSON\n pcu check --include \"react*\" # Include only React packages\n pcu check --exclude \"@types/*\" # Exclude TypeScript types\n\nExit Codes:\n 0 All dependencies are up to date\n 1 Updates are available\n 2 Error occurred\n `;\n }\n}\n","/**\n * Init Command\n *\n * CLI command to initialize PCU configuration in a workspace.\n * Creates a basic .pcurc.json configuration file with sensible defaults.\n */\n\nimport { PackageFilterConfig } from '@pcu/utils';\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\n\nexport interface InitCommandOptions {\n workspace?: string;\n force?: boolean;\n verbose?: boolean;\n color?: boolean;\n createWorkspace?: boolean;\n full?: boolean;\n}\n\nexport class InitCommand {\n /**\n * Execute the init command\n */\n async execute(options: InitCommandOptions = {}): Promise<void> {\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n const workspacePath = options.workspace || process.cwd();\n const configPath = join(workspacePath, '.pcurc.json');\n const packageJsonPath = join(workspacePath, 'package.json');\n const workspaceYamlPath = join(workspacePath, 'pnpm-workspace.yaml');\n\n if (options.verbose) {\n console.log(StyledText.iconInfo('Initializing PCU configuration'));\n console.log(StyledText.muted(`Workspace: ${workspacePath}`));\n console.log(StyledText.muted(`Config file: ${configPath}`));\n console.log('');\n }\n\n // Check if this is a pnpm workspace\n const hasPackageJson = existsSync(packageJsonPath);\n const hasWorkspaceYaml = existsSync(workspaceYamlPath);\n const isWorkspace = hasPackageJson && hasWorkspaceYaml;\n\n if (!isWorkspace && options.createWorkspace !== false) {\n if (options.verbose) {\n console.log(StyledText.iconWarning('PNPM workspace structure not detected'));\n if (!hasPackageJson) {\n console.log(StyledText.muted('Missing: package.json'));\n }\n if (!hasWorkspaceYaml) {\n console.log(StyledText.muted('Missing: pnpm-workspace.yaml'));\n }\n console.log('');\n }\n\n // Create workspace structure\n if (options.verbose) {\n console.log(StyledText.iconInfo('Creating PNPM workspace structure...'));\n }\n\n await this.createWorkspaceStructure(\n workspacePath,\n hasPackageJson,\n hasWorkspaceYaml,\n options\n );\n\n if (options.verbose) {\n console.log(StyledText.iconSuccess('PNPM workspace structure created'));\n console.log('');\n }\n }\n\n // Check if config file already exists\n if (existsSync(configPath) && !options.force) {\n console.log(StyledText.iconWarning('Configuration file already exists!'));\n console.log(StyledText.muted(`Found: ${configPath}`));\n console.log(StyledText.muted('Use --force to overwrite existing configuration'));\n process.exit(1);\n }\n\n // Create directory if it doesn't exist\n const configDir = dirname(configPath);\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true });\n }\n\n // Generate basic configuration\n const basicConfig = this.generateBasicConfig(options.full);\n\n // Write configuration file\n writeFileSync(configPath, JSON.stringify(basicConfig, null, 2), 'utf-8');\n\n // Success message\n console.log(StyledText.iconSuccess('PCU configuration initialized successfully!'));\n console.log(StyledText.muted(`Created: ${configPath}`));\n console.log('');\n\n // Show next steps\n this.showNextSteps(configPath);\n\n process.exit(0);\n } catch (error) {\n console.error(StyledText.iconError('Error initializing configuration:'));\n console.error(StyledText.error(String(error)));\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'));\n console.error(StyledText.muted(error.stack || 'No stack trace available'));\n }\n\n process.exit(1);\n }\n }\n\n /**\n * Create PNPM workspace structure\n */\n private async createWorkspaceStructure(\n workspacePath: string,\n hasPackageJson: boolean,\n hasWorkspaceYaml: boolean,\n options: InitCommandOptions\n ): Promise<void> {\n // Create package.json if it doesn't exist\n if (!hasPackageJson) {\n const packageJsonPath = join(workspacePath, 'package.json');\n const packageJson = this.generateWorkspacePackageJson();\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8');\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: package.json'));\n }\n }\n\n // Create pnpm-workspace.yaml if it doesn't exist\n if (!hasWorkspaceYaml) {\n const workspaceYamlPath = join(workspacePath, 'pnpm-workspace.yaml');\n const workspaceYaml = this.generateWorkspaceYaml();\n writeFileSync(workspaceYamlPath, workspaceYaml, 'utf-8');\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: pnpm-workspace.yaml'));\n }\n }\n\n // Create basic directories structure\n const packagesDir = join(workspacePath, 'packages');\n if (!existsSync(packagesDir)) {\n mkdirSync(packagesDir, { recursive: true });\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: packages/ directory'));\n }\n }\n }\n\n /**\n * Generate workspace package.json\n */\n private generateWorkspacePackageJson(): any {\n return {\n name: 'my-workspace',\n version: '1.0.0',\n private: true,\n description: 'PNPM workspace with catalog dependency management',\n scripts: {\n 'check-updates': 'pcu check',\n 'update-deps': 'pcu update --interactive',\n 'security-audit': 'pcu security',\n },\n devDependencies: {\n 'pnpm-catalog-updates': 'latest',\n },\n };\n }\n\n /**\n * Generate pnpm-workspace.yaml\n */\n private generateWorkspaceYaml(): string {\n return `# PNPM Workspace Configuration\n# Learn more: https://pnpm.io/pnpm-workspace_yaml\n\npackages:\n # Include all packages in packages directory\n - 'packages/*'\n \n # Include apps directory if you have applications\n # - 'apps/*'\n \n # Include tools directory if you have development tools\n # - 'tools/*'\n\n# Catalog Configuration\n# Centrally manage dependency versions across workspace packages\n# Learn more: https://pnpm.io/catalogs\ncatalogs:\n # Default catalog for common dependencies\n default:\n # React ecosystem\n # react: ^18.2.0\n # react-dom: ^18.2.0\n # '@types/react': ^18.2.0\n # '@types/react-dom': ^18.2.0\n \n # TypeScript and Node.js\n # typescript: ^5.0.0\n # '@types/node': ^20.0.0\n \n # Development tools\n # eslint: ^8.0.0\n # prettier: ^3.0.0\n # vitest: ^1.0.0\n`;\n }\n\n /**\n * Generate basic configuration with sensible defaults\n */\n private generateBasicConfig(full?: boolean): PackageFilterConfig {\n if (full) {\n return this.generateFullConfig();\n }\n\n // Minimal configuration\n return {\n defaults: {\n target: 'latest',\n createBackup: true,\n format: 'table',\n },\n exclude: [],\n include: [],\n };\n }\n\n /**\n * Generate full configuration with all options\n */\n private generateFullConfig(): PackageFilterConfig {\n return {\n defaults: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n dryRun: false,\n createBackup: true,\n format: 'table',\n },\n packageRules: [\n {\n patterns: ['react', 'react-dom'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: true,\n relatedPackages: ['@types/react', '@types/react-dom'],\n },\n {\n patterns: ['@types/*'],\n target: 'latest',\n autoUpdate: true,\n requireConfirmation: false,\n groupUpdate: false,\n },\n {\n patterns: ['eslint*', 'prettier', '@typescript-eslint/*'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: false,\n groupUpdate: true,\n },\n ],\n security: {\n autoFixVulnerabilities: true,\n allowMajorForSecurity: true,\n notifyOnSecurityUpdate: false,\n },\n advanced: {\n concurrency: 5,\n timeout: 30000,\n retries: 3,\n cacheValidityMinutes: 60,\n checkForUpdates: true,\n },\n monorepo: {\n syncVersions: [],\n catalogPriority: ['default'],\n },\n exclude: [],\n include: [],\n };\n }\n\n /**\n * Show next steps to the user\n */\n private showNextSteps(configPath: string): void {\n const lines: string[] = [];\n\n lines.push(StyledText.iconInfo('Next steps:'));\n lines.push('');\n lines.push(StyledText.muted('1. Review and customize the configuration:'));\n lines.push(StyledText.muted(` ${configPath}`));\n lines.push('');\n lines.push(StyledText.muted('2. Add packages to your workspace:'));\n lines.push(StyledText.muted(' mkdir packages/my-app && cd packages/my-app'));\n lines.push(StyledText.muted(' pnpm init'));\n lines.push('');\n lines.push(StyledText.muted('3. Install dependencies and check for updates:'));\n lines.push(StyledText.muted(' pnpm install'));\n lines.push(StyledText.muted(' pcu check'));\n lines.push('');\n lines.push(StyledText.muted('4. Update dependencies interactively:'));\n lines.push(StyledText.muted(' pcu update --interactive'));\n lines.push('');\n lines.push(StyledText.muted('5. Learn more about PNPM workspace and PCU:'));\n lines.push(StyledText.muted(' https://pnpm.io/workspaces'));\n lines.push(\n StyledText.muted(' https://github.com/your-repo/pnpm-catalog-updates#configuration')\n );\n\n console.log(lines.join('\\n'));\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: InitCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate workspace path exists if provided\n if (options.workspace && !existsSync(options.workspace)) {\n errors.push(`Workspace directory does not exist: ${options.workspace}`);\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nInitialize PCU configuration and PNPM workspace\n\nUsage:\n pcu init [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --force Overwrite existing configuration file\n --full Generate full configuration with all options\n --create-workspace Create PNPM workspace structure if missing (default: true)\n --no-create-workspace Skip creating PNPM workspace structure\n --verbose Show detailed information\n --no-color Disable colored output\n\nDescription:\n Creates a complete PNPM workspace environment with:\n - Basic .pcurc.json configuration file with sensible defaults\n - package.json for workspace root (if missing)\n - pnpm-workspace.yaml configuration (if missing)\n - packages/ directory structure (if missing)\n \n By default, creates a minimal configuration. Use --full to generate\n a complete configuration with package rules for React, TypeScript,\n ESLint, and other common dependencies with security settings.\n\nExamples:\n pcu init # Initialize with minimal configuration\n pcu init --full # Initialize with full configuration\n pcu init --workspace ./my-project # Initialize in specific directory\n pcu init --force # Overwrite existing configuration\n pcu init --no-create-workspace # Only create .pcurc.json configuration\n\nFiles Created:\n .pcurc.json PCU configuration (minimal by default, full with --full)\n package.json Workspace root package.json (if missing)\n pnpm-workspace.yaml PNPM workspace configuration (if missing)\n packages/ Directory for workspace packages (if missing)\n\nExit Codes:\n 0 Configuration initialized successfully\n 1 Configuration already exists (use --force to overwrite)\n 2 Error occurred\n `;\n }\n}\n","/**\n * Enhanced Progress Bar\n *\n * Provides beautiful progress indicators for CLI operations\n * with multiple styles and themes.\n */\n\nimport chalk from 'chalk';\n\nexport interface ProgressBarOptions {\n text?: string;\n total?: number;\n style?: 'default' | 'gradient' | 'fancy' | 'minimal' | 'rainbow' | 'neon';\n showSpeed?: boolean;\n}\n\nexport class ProgressBar {\n private percentageBar: PercentageProgressBar | null = null;\n private current = 0;\n private total = 0;\n private text = '';\n private startTime: number = 0;\n private style: string;\n private showSpeed: boolean;\n\n constructor(options: ProgressBarOptions = {}) {\n this.text = options.text || 'Processing...';\n this.total = options.total || 0;\n this.style = options.style || 'default';\n this.showSpeed = options.showSpeed ?? true;\n }\n\n /**\n * Start the progress bar\n */\n start(text?: string): void {\n this.text = text || this.text;\n this.startTime = Date.now();\n\n // 在开始新进度条前,彻底清理可能的残留内容\n this.clearPreviousOutput();\n\n // 强制使用percentageBar,即使没有total也要创建\n // 这样可以避免spinner导致的冲突问题\n const effectiveTotal = this.total > 0 ? this.total : 1; // 如果没有total,设为1避免除零错误\n\n this.percentageBar = new PercentageProgressBar(40, {\n style: this.style,\n showStats: this.showSpeed,\n multiLine: true, // 使用多行模式减少闪烁\n });\n this.percentageBar.start(effectiveTotal, this.text);\n }\n\n /**\n * Update progress with text\n */\n update(text: string, current?: number, total?: number): void {\n this.text = text;\n if (current !== undefined) this.current = current;\n if (total !== undefined) this.total = total;\n\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar.update(this.current, text);\n }\n }\n\n /**\n * Increment progress\n */\n increment(amount = 1, text?: string): void {\n this.current += amount;\n if (text) this.text = text;\n\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar.update(this.current, text);\n }\n }\n\n /**\n * Mark as succeeded\n */\n succeed(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const successText = text || this.getCompletionText();\n this.percentageBar.complete(successText);\n console.log(this.getSuccessMessage(successText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Mark as failed\n */\n fail(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const failText = text || this.getFailureText();\n console.log(this.getFailureMessage(failText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Get styled success message\n */\n private getSuccessMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.magenta.bold('✨')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.cyan('🎉')} ${chalk.green.bold(text)} ${chalk.cyan('🎉')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.green(text);\n case 'rainbow':\n return `${chalk.magenta('🌈')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.green.bold('⚡ SUCCESS')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.green('✅')} ${chalk.green(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Get styled failure message\n */\n private getFailureMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.red.bold('💥')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.red('💔')} ${chalk.red.bold(text)} ${chalk.red('💔')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.red(text);\n case 'rainbow':\n return `${chalk.red('⚠️')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.red.bold('⚡ ERROR')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.red('❌')} ${chalk.red(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Get completion text with stats\n */\n private getCompletionText(): string {\n const elapsed = this.getElapsedTime();\n const speed = this.getAverageSpeed();\n return `${this.text} completed ${speed} ${elapsed}`;\n }\n\n /**\n * Get failure text\n */\n private getFailureText(): string {\n return `${this.text} failed`;\n }\n\n /**\n * Get elapsed time formatted\n */\n private getElapsedTime(): string {\n const elapsed = Date.now() - this.startTime;\n if (elapsed < 1000) return `(${elapsed}ms)`;\n if (elapsed < 60000) return `(${(elapsed / 1000).toFixed(1)}s)`;\n return `(${Math.floor(elapsed / 60000)}m ${Math.floor((elapsed % 60000) / 1000)}s)`;\n }\n\n /**\n * Get average processing speed\n */\n private getAverageSpeed(): string {\n const elapsed = Date.now() - this.startTime;\n if (elapsed === 0 || this.current === 0) return '';\n const speed = Math.round((this.current / elapsed) * 1000);\n return speed > 0 ? `(${speed}/s)` : '';\n }\n\n /**\n * Mark as warning\n */\n warn(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const warnText = text || this.text;\n console.log(this.getWarningMessage(warnText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Mark as info\n */\n info(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const infoText = text || this.text;\n console.log(this.getInfoMessage(infoText));\n this.percentageBar = null;\n }\n }\n\n /**\n * Get styled warning message\n */\n private getWarningMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.yellow.bold('⚡')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.yellow('⚠️')} ${chalk.yellow.bold(text)} ${chalk.yellow('⚠️')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.yellow(text);\n case 'rainbow':\n return `${chalk.yellow('⚠️')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.yellow.bold('⚡ WARNING')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.yellow('⚠️')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Get styled info message\n */\n private getInfoMessage(text: string): string {\n const elapsed = this.getElapsedTime();\n switch (this.style) {\n case 'gradient':\n return `${chalk.blue.bold('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n case 'fancy':\n return `${chalk.blue('💡')} ${chalk.blue.bold(text)} ${chalk.blue('💡')} ${chalk.gray(elapsed)}`;\n case 'minimal':\n return chalk.blue(text);\n case 'rainbow':\n return `${chalk.blue('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n case 'neon':\n return `${chalk.blue.bold('⚡ INFO')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n default:\n return `${chalk.blue('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`;\n }\n }\n\n /**\n * Stop the progress bar\n */\n stop(): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar = null;\n }\n }\n\n /**\n * Clear previous output to prevent residual progress bars\n */\n private clearPreviousOutput(): void {\n // 清理可能的残留进度条显示(最多清理5行,应该足够了)\n for (let i = 0; i < 5; i++) {\n process.stdout.write('\\x1b[1A\\r\\x1b[K'); // 上移一行并清除\n }\n // 确保光标在正确位置\n process.stdout.write('\\r');\n }\n\n /**\n * Create a multi-step progress indicator\n */\n static createMultiStep(steps: string[]): MultiStepProgress {\n return new MultiStepProgress(steps);\n }\n\n /**\n * Create a beautiful gradient progress bar\n */\n static createGradient(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'gradient',\n showSpeed: true,\n ...options,\n });\n }\n\n /**\n * Create a fancy progress bar with decorations\n */\n static createFancy(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'fancy',\n showSpeed: true,\n ...options,\n });\n }\n\n /**\n * Create a minimal clean progress bar\n */\n static createMinimal(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'minimal',\n showSpeed: false,\n ...options,\n });\n }\n\n /**\n * Create a rainbow themed progress bar\n */\n static createRainbow(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'rainbow',\n showSpeed: true,\n ...options,\n });\n }\n\n /**\n * Create a neon style progress bar\n */\n static createNeon(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'neon',\n showSpeed: true,\n ...options,\n });\n }\n}\n\n/**\n * Multi-step progress indicator\n */\nexport class MultiStepProgress {\n private currentStep = 0;\n private steps: string[] = [];\n\n constructor(steps: string[]) {\n this.steps = steps;\n }\n\n start(): void {\n console.log(chalk.bold('\\n📋 Progress Steps:\\n'));\n this.renderSteps();\n }\n\n next(text?: string): void {\n if (this.currentStep < this.steps.length) {\n const stepText = text || this.steps[this.currentStep];\n console.log(` ${chalk.green('✓')} ${stepText}`);\n this.currentStep++;\n\n if (this.currentStep < this.steps.length) {\n console.log(` ${chalk.cyan('→')} ${this.steps[this.currentStep]}`);\n }\n }\n }\n\n complete(): void {\n console.log(chalk.green('\\n🎉 All steps completed!\\n'));\n }\n\n private renderSteps(): void {\n this.steps.forEach((step, index) => {\n const prefix = index === 0 ? chalk.cyan('→') : ' ';\n const style = index < this.currentStep ? chalk.green : chalk.gray;\n console.log(` ${prefix} ${style(step)}`);\n });\n console.log('');\n }\n}\n\n/**\n * Progress bar with percentage and beautiful visual effects\n */\nexport class PercentageProgressBar {\n private current = 0;\n private total = 0;\n private text = '';\n private lastRender = '';\n private startTime = 0;\n private style: string;\n private useMultiLine = true;\n private isFirstRender = true;\n\n constructor(\n private readonly width = 40,\n private readonly options: { style?: string; showStats?: boolean; multiLine?: boolean } = {}\n ) {\n this.style = options.style || 'gradient';\n this.useMultiLine = options.multiLine ?? true; // 默认使用多行模式来减少闪烁\n }\n\n start(total: number, text: string): void {\n this.total = total;\n this.current = 0;\n this.text = text;\n this.startTime = Date.now();\n this.isFirstRender = true; // 重置首次渲染标记\n\n // 清理可能的残留输出\n this.clearPreviousLines();\n\n this.render();\n }\n\n /**\n * Clear any previous output lines to prevent conflicts\n */\n private clearPreviousLines(): void {\n // 更强力的清理:清理多行可能的残留内容\n for (let i = 0; i < 6; i++) {\n process.stdout.write('\\x1b[1A\\r\\x1b[2K'); // 上移一行并完全清除该行\n }\n // 回到起始位置\n process.stdout.write('\\r');\n }\n\n update(current: number, text?: string): void {\n this.current = current;\n if (text) this.text = text;\n this.render();\n }\n\n increment(amount = 1, text?: string): void {\n this.current += amount;\n if (text) this.text = text;\n this.render();\n }\n\n complete(text?: string): void {\n this.current = this.total;\n if (text) this.text = text;\n this.render();\n console.log(''); // New line after completion\n }\n\n private render(): void {\n const percentage = Math.round((this.current / this.total) * 100);\n const filledWidth = Math.round((this.current / this.total) * this.width);\n const emptyWidth = this.width - filledWidth;\n\n if (this.useMultiLine) {\n this.renderMultiLine(percentage, filledWidth, emptyWidth);\n } else {\n this.renderSingleLine(percentage, filledWidth, emptyWidth);\n }\n }\n\n private renderMultiLine(percentage: number, filledWidth: number, emptyWidth: number): void {\n const currentText = `${this.getStyledPrefix()} ${this.text}`;\n\n // 构建进度条\n let bar: string;\n switch (this.style) {\n case 'gradient':\n bar = this.renderGradientBar(filledWidth, emptyWidth);\n break;\n case 'fancy':\n bar = this.renderFancyBar(filledWidth, emptyWidth);\n break;\n case 'minimal':\n bar = this.renderMinimalBar(filledWidth, emptyWidth);\n break;\n case 'blocks':\n bar = this.renderBlockBar(filledWidth, emptyWidth);\n break;\n default:\n bar = this.renderDefaultBar(filledWidth, emptyWidth);\n }\n\n let progressLine = `(${this.current}/${this.total}) [${bar}] ${this.getStyledPercentage(percentage)}`;\n\n // Add stats if enabled\n if (this.options.showStats && this.startTime > 0) {\n const elapsed = Date.now() - this.startTime;\n const speed = elapsed > 0 ? Math.round((this.current / elapsed) * 1000) : 0;\n if (speed > 0) {\n progressLine += ` ${chalk.gray(`${speed}/s`)}`;\n }\n }\n\n if (this.isFirstRender) {\n // 第一次渲染:输出两行\n console.log(currentText);\n console.log(progressLine);\n this.isFirstRender = false;\n } else {\n // 后续更新:回到两行前的位置,分别更新这两行\n // 光标上移两行,清除文字行,输出新文字行\n process.stdout.write('\\x1b[2A\\r\\x1b[2K' + currentText + '\\n');\n // 清除进度条行,输出新进度条行\n process.stdout.write('\\r\\x1b[2K' + progressLine);\n }\n\n this.lastRender = progressLine;\n\n if (this.current >= this.total) {\n process.stdout.write('\\n');\n }\n }\n\n private renderSingleLine(percentage: number, filledWidth: number, emptyWidth: number): void {\n let bar: string;\n switch (this.style) {\n case 'gradient':\n bar = this.renderGradientBar(filledWidth, emptyWidth);\n break;\n case 'fancy':\n bar = this.renderFancyBar(filledWidth, emptyWidth);\n break;\n case 'minimal':\n bar = this.renderMinimalBar(filledWidth, emptyWidth);\n break;\n case 'blocks':\n bar = this.renderBlockBar(filledWidth, emptyWidth);\n break;\n default:\n bar = this.renderDefaultBar(filledWidth, emptyWidth);\n }\n\n let progressText = `${this.getStyledPrefix()} ${this.text} (${this.current}/${this.total}) [${bar}] ${this.getStyledPercentage(percentage)}`;\n\n // Add stats if enabled\n if (this.options.showStats && this.startTime > 0) {\n const elapsed = Date.now() - this.startTime;\n const speed = elapsed > 0 ? Math.round((this.current / elapsed) * 1000) : 0;\n if (speed > 0) {\n progressText += ` ${chalk.gray(`${speed}/s`)}`;\n }\n }\n\n // Clear previous line and render new one\n if (this.lastRender) {\n process.stdout.write('\\r\\x1b[K');\n }\n\n process.stdout.write(progressText);\n this.lastRender = progressText;\n\n if (this.current >= this.total) {\n process.stdout.write('\\n');\n }\n }\n\n private renderGradientBar(filledWidth: number, emptyWidth: number): string {\n const colors = [chalk.red, chalk.yellow, chalk.green, chalk.cyan, chalk.blue, chalk.magenta];\n\n let filledBar = '';\n for (let i = 0; i < filledWidth; i++) {\n const colorIndex = Math.floor((i / this.width) * colors.length);\n const colorFn = colors[Math.min(colorIndex, colors.length - 1)];\n if (colorFn) {\n filledBar += colorFn('█');\n }\n }\n\n const emptyBar = chalk.gray('░'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderFancyBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.cyan('▓'.repeat(filledWidth));\n const emptyBar = chalk.gray('░'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderMinimalBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.white('━'.repeat(filledWidth));\n const emptyBar = chalk.gray('─'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderBlockBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.green('■'.repeat(filledWidth));\n const emptyBar = chalk.gray('□'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private renderDefaultBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.green('█'.repeat(filledWidth));\n const emptyBar = chalk.gray('░'.repeat(emptyWidth));\n return filledBar + emptyBar;\n }\n\n private getStyledPrefix(): string {\n switch (this.style) {\n case 'gradient':\n return chalk.magenta('▶');\n case 'fancy':\n return chalk.cyan('★');\n case 'minimal':\n return chalk.gray('•');\n case 'blocks':\n return chalk.green('◆');\n default:\n return chalk.cyan('●');\n }\n }\n\n private getStyledPercentage(percentage: number): string {\n if (percentage < 25) return chalk.red.bold(`${percentage}%`);\n if (percentage < 50) return chalk.yellow.bold(`${percentage}%`);\n if (percentage < 75) return chalk.blue.bold(`${percentage}%`);\n if (percentage < 100) return chalk.cyan.bold(`${percentage}%`);\n return chalk.green.bold(`${percentage}%`);\n }\n\n /**\n * Create a gradient percentage progress bar\n */\n static createGradient(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, {\n style: 'gradient',\n showStats: true,\n multiLine: true,\n });\n }\n\n /**\n * Create a fancy percentage progress bar\n */\n static createFancy(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, { style: 'fancy', showStats: true, multiLine: true });\n }\n\n /**\n * Create a minimal percentage progress bar\n */\n static createMinimal(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, {\n style: 'minimal',\n showStats: false,\n multiLine: true,\n });\n }\n\n /**\n * Create a block-style percentage progress bar\n */\n static createBlocks(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, { style: 'blocks', showStats: true, multiLine: true });\n }\n}\n\n/**\n * Progress manager for batch operations\n */\nexport class BatchProgressManager {\n private bars: Map<string, ProgressBar> = new Map();\n private totalOperations = 0;\n private completedOperations = 0;\n\n createBar(id: string, options?: ProgressBarOptions): ProgressBar {\n const bar = new ProgressBar(options);\n this.bars.set(id, bar);\n return bar;\n }\n\n getBar(id: string): ProgressBar | undefined {\n return this.bars.get(id);\n }\n\n setTotal(total: number): void {\n this.totalOperations = total;\n }\n\n updateOverall(text: string): void {\n const percentage =\n this.totalOperations > 0\n ? Math.round((this.completedOperations / this.totalOperations) * 100)\n : 0;\n\n console.log(\n chalk.cyan(\n `📊 Overall Progress: ${percentage}% (${this.completedOperations}/${this.totalOperations})`\n )\n );\n if (text) {\n console.log(chalk.gray(` → ${text}`));\n }\n }\n\n completeOperation(text?: string): void {\n this.completedOperations++;\n if (text) {\n this.updateOverall(text);\n }\n }\n\n cleanup(): void {\n this.bars.forEach((bar) => bar.stop());\n this.bars.clear();\n }\n}\n","/**\n * Security Command\n *\n * CLI command to perform security vulnerability scanning and automated fixes.\n * Integrates with npm audit and snyk for comprehensive security analysis.\n */\n\nimport { spawnSync } from 'child_process';\nimport * as fs from 'fs-extra';\nimport * as path from 'path';\nimport { OutputFormat, OutputFormatter } from '../formatters/outputFormatter.js';\nimport { ProgressBar } from '../formatters/progressBar.js';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\n\nexport interface SecurityCommandOptions {\n workspace?: string;\n format?: OutputFormat;\n audit?: boolean;\n fixVulns?: boolean;\n severity?: 'low' | 'moderate' | 'high' | 'critical';\n includeDev?: boolean;\n snyk?: boolean;\n verbose?: boolean;\n color?: boolean;\n}\n\nexport interface SecurityReport {\n summary: {\n totalVulnerabilities: number;\n critical: number;\n high: number;\n moderate: number;\n low: number;\n info: number;\n };\n vulnerabilities: Vulnerability[];\n recommendations: SecurityRecommendation[];\n metadata: {\n scanDate: string;\n scanTools: string[];\n workspacePath: string;\n };\n}\n\nexport interface Vulnerability {\n id: string;\n package: string;\n severity: 'low' | 'moderate' | 'high' | 'critical';\n title: string;\n url: string;\n range: string;\n fixAvailable: boolean | string;\n fixVersion?: string;\n paths: string[];\n cwe?: string[];\n cve?: string[];\n}\n\nexport interface SecurityRecommendation {\n package: string;\n currentVersion: string;\n recommendedVersion: string;\n type: 'update' | 'remove' | 'replace';\n reason: string;\n impact: string;\n}\n\nexport class SecurityCommand {\n constructor(private readonly outputFormatter: OutputFormatter) {}\n\n /**\n * Execute the security command\n */\n async execute(options: SecurityCommandOptions = {}): Promise<void> {\n let progressBar: ProgressBar | undefined;\n\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n // Show loading with progress bar\n progressBar = new ProgressBar({\n text: 'Performing security analysis...',\n });\n progressBar.start();\n\n if (options.verbose) {\n console.log(StyledText.iconAnalysis('Security vulnerability scanning'));\n console.log(StyledText.muted(`Workspace: ${options.workspace || process.cwd()}`));\n console.log(StyledText.muted(`Severity filter: ${options.severity || 'all'}`));\n console.log('');\n }\n\n // Execute security scan\n const report = await this.performSecurityScan(options);\n\n progressBar.succeed('Security analysis completed');\n\n // Format and display results\n const formattedOutput = this.outputFormatter.formatSecurityReport(report);\n console.log(formattedOutput);\n\n // Show recommendations if available\n if (report.recommendations.length > 0) {\n this.showRecommendations(report);\n }\n\n // Auto-fix vulnerabilities if requested\n if (options.fixVulns) {\n await this.autoFixVulnerabilities(report, options);\n }\n\n // Exit with appropriate code based on findings\n const exitCode = report.summary.critical > 0 ? 1 : 0;\n process.exit(exitCode);\n } catch (error) {\n if (progressBar) {\n progressBar.fail('Security analysis failed');\n }\n\n console.error(StyledText.iconError('Error performing security scan:'));\n console.error(StyledText.error(String(error)));\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'));\n console.error(StyledText.muted(error.stack || 'No stack trace available'));\n }\n\n process.exit(1);\n }\n }\n\n /**\n * Perform comprehensive security scan\n */\n private async performSecurityScan(options: SecurityCommandOptions): Promise<SecurityReport> {\n const workspacePath = options.workspace || process.cwd();\n const vulnerabilities: Vulnerability[] = [];\n const recommendations: SecurityRecommendation[] = [];\n\n // Check if package.json exists\n const packageJsonPath = path.join(workspacePath, 'package.json');\n if (!(await fs.pathExists(packageJsonPath))) {\n throw new Error(`No package.json found in ${workspacePath}`);\n }\n\n // Run npm audit\n if (options.audit !== false) {\n const npmVulns = await this.runNpmAudit(workspacePath, options);\n vulnerabilities.push(...npmVulns);\n }\n\n // Run snyk scan if available\n if (options.snyk) {\n const snykVulns = await this.runSnykScan(workspacePath, options);\n vulnerabilities.push(...snykVulns);\n }\n\n // Generate recommendations\n recommendations.push(...this.generateRecommendations(vulnerabilities));\n\n // Filter by severity if specified\n const filteredVulnerabilities = options.severity\n ? vulnerabilities.filter(\n (v) => this.severityToNumber(v.severity) >= this.severityToNumber(options.severity!)\n )\n : vulnerabilities;\n\n return {\n summary: this.generateSummary(filteredVulnerabilities),\n vulnerabilities: filteredVulnerabilities,\n recommendations: recommendations,\n metadata: {\n scanDate: new Date().toISOString(),\n scanTools: ['npm-audit', ...(options.snyk ? ['snyk'] : [])],\n workspacePath: workspacePath,\n },\n };\n }\n\n /**\n * Run npm audit scan\n */\n private async runNpmAudit(\n workspacePath: string,\n options: SecurityCommandOptions\n ): Promise<Vulnerability[]> {\n const auditArgs = ['audit', '--json'];\n\n if (!options.includeDev) {\n auditArgs.push('--omit=dev');\n }\n\n const result = spawnSync('npm', auditArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n if (result.error) {\n throw new Error(`npm audit failed: ${result.error.message}`);\n }\n\n if (result.status === 1) {\n // npm audit returns 1 when vulnerabilities are found\n try {\n const auditData = JSON.parse(result.stdout);\n return this.parseNpmAuditResults(auditData);\n } catch (parseError) {\n throw new Error(`Failed to parse npm audit output: ${parseError}`);\n }\n } else if (result.status === 0) {\n try {\n const auditData = JSON.parse(result.stdout);\n return this.parseNpmAuditResults(auditData);\n } catch (parseError) {\n throw new Error(`Failed to parse npm audit output: ${parseError}`);\n }\n } else {\n throw new Error(`npm audit failed with status ${result.status}: ${result.stderr}`);\n }\n }\n\n /**\n * Run snyk scan\n */\n private async runSnykScan(\n workspacePath: string,\n options: SecurityCommandOptions\n ): Promise<Vulnerability[]> {\n try {\n // Check if snyk is installed\n const versionResult = spawnSync('snyk', ['--version'], { stdio: 'pipe' });\n if (versionResult.error) {\n throw versionResult.error;\n }\n\n const snykArgs = ['test', '--json'];\n\n if (!options.includeDev) {\n snykArgs.push('--dev');\n }\n\n const result = spawnSync('snyk', snykArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n if (result.error) {\n throw result.error;\n }\n\n if (result.status !== 0 && result.status !== 1) {\n throw new Error(`Snyk scan failed with status ${result.status}: ${result.stderr}`);\n }\n\n const snykData = JSON.parse(result.stdout);\n return this.parseSnykResults(snykData);\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n console.warn(StyledText.iconWarning('Snyk not found. Install with: npm install -g snyk'));\n return [];\n }\n throw new Error(`Snyk scan failed: ${error.message}`);\n }\n }\n\n /**\n * Parse npm audit results\n */\n private parseNpmAuditResults(auditData: any): Vulnerability[] {\n const vulnerabilities: Vulnerability[] = [];\n\n if (!auditData.vulnerabilities) {\n return vulnerabilities;\n }\n\n for (const [id, vuln] of Object.entries(auditData.vulnerabilities)) {\n const vulnerability = vuln as any;\n\n vulnerabilities.push({\n id: id,\n package: vulnerability.name,\n severity: vulnerability.severity,\n title: vulnerability.title || vulnerability.name,\n url: vulnerability.url || `https://npmjs.com/advisories/${id}`,\n range: vulnerability.range,\n fixAvailable: vulnerability.fixAvailable,\n fixVersion: vulnerability.fixAvailable === true ? vulnerability.fixAvailable : undefined,\n paths: vulnerability.via?.map((v: any) => v.source || v.name) || [vulnerability.name],\n cwe: vulnerability.cwe,\n cve: vulnerability.cve,\n });\n }\n\n return vulnerabilities;\n }\n\n /**\n * Parse snyk results\n */\n private parseSnykResults(snykData: any): Vulnerability[] {\n const vulnerabilities: Vulnerability[] = [];\n\n if (!snykData.vulnerabilities) {\n return vulnerabilities;\n }\n\n for (const vuln of snykData.vulnerabilities) {\n vulnerabilities.push({\n id: vuln.id,\n package: vuln.packageName,\n severity: vuln.severity,\n title: vuln.title,\n url: vuln.url,\n range: vuln.semver?.vulnerable?.join(' || ') || vuln.version,\n fixAvailable: vuln.fixedIn?.length > 0,\n fixVersion: vuln.fixedIn?.[0],\n paths: vuln.from || [vuln.packageName],\n cwe: vuln.identifiers?.CWE || [],\n cve: vuln.identifiers?.CVE || [],\n });\n }\n\n return vulnerabilities;\n }\n\n /**\n * Generate security recommendations\n */\n private generateRecommendations(vulnerabilities: Vulnerability[]): SecurityRecommendation[] {\n const recommendations: SecurityRecommendation[] = [];\n const packages = new Set(vulnerabilities.map((v) => v.package));\n\n for (const pkg of packages) {\n const pkgVulns = vulnerabilities.filter((v) => v.package === pkg);\n const criticalVulns = pkgVulns.filter(\n (v) => v.severity === 'critical' || v.severity === 'high'\n );\n\n if (criticalVulns.length > 0) {\n const fixVersions = [\n ...new Set(\n criticalVulns.map((v) => v.fixVersion).filter((v) => v && typeof v === 'string')\n ),\n ];\n\n if (fixVersions.length > 0) {\n const currentVersion = pkgVulns[0]?.range?.split(' ')[0] || 'unknown';\n const recommendedVersion = fixVersions[0] || 'unknown';\n\n recommendations.push({\n package: pkg,\n currentVersion: currentVersion,\n recommendedVersion: recommendedVersion,\n type: 'update',\n reason: `${criticalVulns.length} critical vulnerabilities found`,\n impact: 'High - Security vulnerability fix',\n });\n }\n }\n }\n\n return recommendations;\n }\n\n /**\n * Generate summary from vulnerabilities\n */\n private generateSummary(vulnerabilities: Vulnerability[]): SecurityReport['summary'] {\n const summary = {\n totalVulnerabilities: vulnerabilities.length,\n critical: 0,\n high: 0,\n moderate: 0,\n low: 0,\n info: 0,\n };\n\n for (const vuln of vulnerabilities) {\n const severity = vuln.severity as string;\n switch (severity) {\n case 'critical':\n summary.critical++;\n break;\n case 'high':\n summary.high++;\n break;\n case 'moderate':\n summary.moderate++;\n break;\n case 'low':\n summary.low++;\n break;\n case 'info':\n summary.info++;\n break;\n default:\n summary.info++;\n break;\n }\n }\n\n return summary;\n }\n\n /**\n * Convert severity string to number for filtering\n */\n private severityToNumber(severity: string): number {\n switch (severity) {\n case 'critical':\n return 4;\n case 'high':\n return 3;\n case 'moderate':\n return 2;\n case 'low':\n return 1;\n case 'info':\n return 0;\n default:\n return 0;\n }\n }\n\n /**\n * Show security recommendations\n */\n private showRecommendations(report: SecurityReport): void {\n if (report.recommendations.length === 0) {\n return;\n }\n\n console.log('\\n' + StyledText.iconInfo('Security Recommendations:'));\n\n for (const rec of report.recommendations) {\n console.log(\n ` ${StyledText.iconWarning()} ${rec.package}: ${rec.currentVersion} → ${rec.recommendedVersion}`\n );\n console.log(` ${StyledText.muted(rec.reason)}`);\n console.log(` ${StyledText.muted(rec.impact)}`);\n }\n\n console.log('');\n console.log(StyledText.iconUpdate('Run with --fix-vulns to apply automatic fixes'));\n }\n\n /**\n * Auto-fix vulnerabilities\n */\n private async autoFixVulnerabilities(\n report: SecurityReport,\n options: SecurityCommandOptions\n ): Promise<void> {\n if (report.recommendations.length === 0) {\n console.log(StyledText.iconSuccess('No security fixes available'));\n return;\n }\n\n console.log('\\n' + StyledText.iconUpdate('Applying security fixes...'));\n\n const workspacePath = options.workspace || process.cwd();\n const fixableVulns = report.recommendations.filter((r) => r.type === 'update');\n\n if (fixableVulns.length === 0) {\n console.log(StyledText.iconInfo('No automatic fixes available'));\n return;\n }\n\n try {\n // Run npm audit fix\n const fixArgs = ['audit', 'fix'];\n if (!options.includeDev) {\n fixArgs.push('--omit=dev');\n }\n\n const result = spawnSync('npm', fixArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: 'inherit',\n });\n\n if (result.error) {\n throw result.error;\n }\n\n if (result.status !== 0) {\n throw new Error(`npm audit fix failed with status ${result.status}`);\n }\n\n console.log(StyledText.iconSuccess('Security fixes applied successfully'));\n\n // Re-run scan to verify fixes\n console.log(StyledText.iconInfo('Re-running security scan to verify fixes...'));\n const newReport = await this.performSecurityScan({ ...options, fixVulns: false });\n\n if (newReport.summary.critical === 0 && newReport.summary.high === 0) {\n console.log(\n StyledText.iconSuccess('All critical and high severity vulnerabilities have been fixed!')\n );\n } else {\n console.log(\n StyledText.iconWarning(\n `${newReport.summary.critical} critical and ${newReport.summary.high} high severity vulnerabilities remain`\n )\n );\n }\n } catch (error: any) {\n console.error(StyledText.iconError('Failed to apply security fixes:'));\n console.error(StyledText.error(error.message));\n }\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: SecurityCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal');\n }\n\n // Validate severity\n if (options.severity && !['low', 'moderate', 'high', 'critical'].includes(options.severity)) {\n errors.push('Invalid severity. Must be one of: low, moderate, high, critical');\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nSecurity vulnerability scanning and automated fixes\n\nUsage:\n pcu security [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --audit Perform npm audit scan (default: true)\n --fix-vulns Automatically fix vulnerabilities\n --severity <level> Filter by severity: low, moderate, high, critical\n --include-dev Include dev dependencies in scan\n --snyk Include Snyk scan (requires snyk CLI)\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu security # Basic security scan\n pcu security --fix-vulns # Scan and fix vulnerabilities\n pcu security --severity high # Show only high severity issues\n pcu security --snyk # Include Snyk scan\n pcu security --format json # Output as JSON\n\nExit Codes:\n 0 No vulnerabilities found\n 1 Vulnerabilities found\n 2 Error occurred\n `;\n }\n}\n","/**\n * Interactive Prompts\n *\n * Provides smart prompts and auto-completion for CLI commands\n */\n\nimport { FileSystemService } from '@pcu/core';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { StyledText } from '../themes/colorTheme.js';\n\nexport interface AutoCompleteOption {\n name: string;\n value: string;\n description?: string;\n}\n\nexport class InteractivePrompts {\n private fsService: FileSystemService;\n\n constructor() {\n this.fsService = new FileSystemService();\n }\n\n /**\n * Interactive package selection with search\n */\n async selectPackages(\n packages: Array<{ name: string; current: string; latest: string; type: string }>\n ): Promise<string[]> {\n if (packages.length === 0) {\n return [];\n }\n\n const choices = packages.map((pkg) => ({\n name: this.formatPackageChoice(pkg),\n value: pkg.name,\n checked: false,\n }));\n\n const answers = await inquirer.prompt({\n type: 'checkbox',\n name: 'selectedPackages',\n message: StyledText.iconPackage('Select packages to update:'),\n choices,\n pageSize: 15,\n validate: (input: unknown) => {\n const selected = input as string[];\n return selected.length > 0 || 'Please select at least one package';\n },\n });\n\n return answers.selectedPackages;\n }\n\n /**\n * Interactive catalog selection\n */\n async selectCatalog(catalogs: string[]): Promise<string | null> {\n if (catalogs.length === 0) {\n return null;\n }\n\n if (catalogs.length === 1) {\n return catalogs[0] ?? null;\n }\n\n const choices = [\n { name: 'All catalogs', value: 'all' },\n ...catalogs.map((name) => ({ name, value: name })),\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'catalog',\n message: StyledText.iconCatalog('Select catalog to update:'),\n choices,\n pageSize: 10,\n },\n ]);\n\n return answers.catalog === 'all' ? null : answers.catalog;\n }\n\n /**\n * Update strategy selection\n */\n async selectUpdateStrategy(): Promise<string> {\n const strategies = [\n { name: 'Latest (recommended)', value: 'latest' },\n { name: 'Greatest (highest version)', value: 'greatest' },\n { name: 'Minor (non-breaking)', value: 'minor' },\n { name: 'Patch (bug fixes only)', value: 'patch' },\n { name: 'Newest (latest release)', value: 'newest' },\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'strategy',\n message: StyledText.iconUpdate('Select update strategy:'),\n choices: strategies,\n },\n ]);\n\n return answers.strategy;\n }\n\n /**\n * Confirm dangerous operations\n */\n async confirmDangerousOperation(operation: string, details?: string): Promise<boolean> {\n console.log('');\n if (details) {\n console.log(chalk.yellow('⚠️ Warning:'), details);\n }\n\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirmed',\n message: StyledText.warning(`Are you sure you want to ${operation}?`),\n default: false,\n },\n ]);\n\n return answers.confirmed;\n }\n\n /**\n * Auto-complete for package names (using list as fallback)\n */\n async autoCompletePackage(\n packages: string[],\n message: string = 'Select package:'\n ): Promise<string> {\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'package',\n message,\n choices: packages.map((pkg) => ({ name: pkg, value: pkg })),\n pageSize: 10,\n },\n ]);\n\n return answers.package;\n }\n\n /**\n * Workspace path selection with auto-complete\n */\n async selectWorkspacePath(): Promise<string> {\n const currentDir = process.cwd();\n const choices = [\n { name: `Current directory (${currentDir})`, value: currentDir },\n { name: 'Browse for directory...', value: 'browse' },\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'path',\n message: StyledText.icon('📁', 'Select workspace directory:'),\n choices,\n },\n ]);\n\n if (answers.path === 'browse') {\n return this.browseDirectory();\n }\n\n return answers.path;\n }\n\n /**\n * Browse directory structure\n */\n private async browseDirectory(currentPath = process.cwd()): Promise<string> {\n const directoryNames = await this.fsService.listDirectories(currentPath);\n const choices = [\n { name: '.. (parent directory)', value: '..' },\n { name: `. (current: ${currentPath})`, value: '.' },\n ...directoryNames.map((name: string) => ({\n name: `📁 ${name}`,\n value: `${currentPath}/${name}`,\n })),\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'selected',\n message: `Browse: ${currentPath}`,\n choices,\n pageSize: 15,\n },\n ]);\n\n if (answers.selected === '.') {\n return currentPath;\n }\n\n if (answers.selected === '..') {\n const parent = currentPath.split('/').slice(0, -1).join('/') || '/';\n return this.browseDirectory(parent);\n }\n\n // Check if this directory contains a pnpm workspace\n const workspaceFiles = ['pnpm-workspace.yaml', 'pnpm-workspace.yml'];\n let hasWorkspace = false;\n for (const file of workspaceFiles) {\n if (await this.fsService.exists(`${answers.selected}/${file}`)) {\n hasWorkspace = true;\n break;\n }\n }\n\n if (hasWorkspace) {\n const confirm = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'useThis',\n message: `Use ${answers.selected} as workspace?`,\n default: true,\n },\n ]);\n\n if (confirm.useThis) {\n return answers.selected;\n }\n }\n\n return this.browseDirectory(answers.selected);\n }\n\n /**\n * Multi-step configuration wizard\n */\n async configurationWizard(): Promise<any> {\n console.log(chalk.bold.blue('\\n🧙‍♂️ Configuration Wizard\\n'));\n\n const themeAnswer = await inquirer.prompt({\n type: 'list',\n name: 'theme',\n message: 'Select color theme:',\n choices: [\n { name: 'Default - Balanced colors', value: 'default' },\n { name: 'Modern - Vibrant colors', value: 'modern' },\n { name: 'Minimal - Clean and simple', value: 'minimal' },\n { name: 'Neon - High contrast', value: 'neon' },\n ],\n default: 'default',\n });\n\n const interactiveAnswer = await inquirer.prompt({\n type: 'confirm',\n name: 'interactive',\n message: 'Enable interactive mode by default?',\n default: true,\n });\n\n const backupAnswer = await inquirer.prompt({\n type: 'confirm',\n name: 'backup',\n message: 'Create backups before updates?',\n default: true,\n });\n\n const strategyAnswer = await inquirer.prompt({\n type: 'list',\n name: 'updateStrategy',\n message: 'Default update strategy:',\n choices: [\n { name: 'Latest stable versions', value: 'latest' },\n { name: 'Minor updates (non-breaking)', value: 'minor' },\n { name: 'Patch updates (bug fixes)', value: 'patch' },\n ],\n default: 'latest',\n });\n\n const timeoutAnswer = await inquirer.prompt({\n type: 'number',\n name: 'timeout',\n message: 'Network timeout (seconds):',\n default: 30,\n validate: (input: number | undefined) => {\n if (input === undefined) return 'Timeout is required';\n return input > 0 || 'Timeout must be positive';\n },\n });\n\n const answers = {\n ...themeAnswer,\n ...interactiveAnswer,\n ...backupAnswer,\n ...strategyAnswer,\n ...timeoutAnswer,\n };\n\n return answers;\n }\n\n /**\n * Impact preview before update\n */\n async previewImpact(impact: any): Promise<boolean> {\n console.log(chalk.bold.blue('\\n📊 Impact Preview\\n'));\n\n // Display impact summary\n console.log(`Packages to update: ${impact.totalUpdates}`);\n console.log(`Risk level: ${impact.riskLevel}`);\n console.log(`Affected packages: ${impact.affectedCount}`);\n\n if (impact.securityUpdates > 0) {\n console.log(StyledText.iconSecurity(`${impact.securityUpdates} security updates`));\n }\n\n console.log('');\n\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'proceed',\n message: 'Proceed with update?',\n default: true,\n },\n ]);\n\n return answers.proceed;\n }\n\n /**\n * Error recovery options\n */\n async errorRecoveryOptions(error: string): Promise<string> {\n const options = [\n { name: 'Retry operation', value: 'retry' },\n { name: 'Skip this package', value: 'skip' },\n { name: 'Continue with remaining', value: 'continue' },\n { name: 'Abort operation', value: 'abort' },\n ];\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'action',\n message: StyledText.iconError(`Error: ${error}`),\n choices: options,\n },\n ]);\n\n return answers.action;\n }\n\n /**\n * Confirm tool update\n */\n async confirmUpdate(message: string): Promise<boolean> {\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'update',\n message: StyledText.iconUpdate(message),\n default: true,\n },\n ]);\n\n return answers.update;\n }\n\n /**\n * Format package choice for display\n */\n private formatPackageChoice(pkg: any): string {\n const updateTypeColor: Record<string, any> = {\n major: chalk.red,\n minor: chalk.yellow,\n patch: chalk.green,\n };\n\n const typeColor = updateTypeColor[pkg.type] || chalk.gray;\n\n return `${pkg.name} ${chalk.dim(pkg.current)} → ${typeColor(pkg.latest)} ${chalk.dim(`(${pkg.type})`)}`;\n }\n}\n\n/**\n * Auto-completion utilities\n */\nexport class AutoCompleteManager {\n static async suggestWorkspaces(current: string): Promise<string[]> {\n const suggestions: string[] = [];\n\n // Common workspace patterns\n const patterns = [\n 'pnpm-workspace.yaml',\n 'pnpm-workspace.yml',\n '**/*/pnpm-workspace.yaml',\n '**/*/pnpm-workspace.yml',\n ];\n\n for (const pattern of patterns) {\n try {\n const { glob } = await import('glob');\n const matches = await glob(pattern);\n matches.forEach((match: string) => {\n const dir = match.replace(/\\/pnpm-workspace\\.ya?ml$/, '');\n if (!suggestions.includes(dir)) {\n suggestions.push(dir);\n }\n });\n } catch {\n // Ignore errors\n }\n }\n\n return suggestions.filter((s) => s.toLowerCase().includes(current.toLowerCase()));\n }\n\n static async suggestCatalogs(): Promise<string[]> {\n return [];\n }\n\n static async suggestPackages(): Promise<string[]> {\n return [];\n }\n}\n\n/**\n * Interactive command builder\n */\nexport class InteractiveCommandBuilder {\n static async buildCommand(): Promise<{\n command: string;\n options: Record<string, any>;\n }> {\n const baseCommand = await inquirer.prompt([\n {\n type: 'list',\n name: 'command',\n message: 'What would you like to do?',\n choices: [\n { name: 'Check for updates', value: 'check' },\n { name: 'Update dependencies', value: 'update' },\n { name: 'Analyze impact', value: 'analyze' },\n { name: 'Show workspace info', value: 'workspace' },\n ],\n },\n ]);\n\n const options: Record<string, any> = {};\n\n // Common options\n const common = await inquirer.prompt([\n {\n type: 'list',\n name: 'format',\n message: 'Output format:',\n choices: [\n { name: 'Table (rich)', value: 'table' },\n { name: 'JSON', value: 'json' },\n { name: 'YAML', value: 'yaml' },\n { name: 'Minimal', value: 'minimal' },\n ],\n default: 'table',\n },\n ]);\n\n options.format = common.format;\n\n // Command-specific options\n switch (baseCommand.command) {\n case 'update':\n const updateOpts = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'interactive',\n message: 'Interactive mode?',\n default: true,\n },\n {\n type: 'confirm',\n name: 'dryRun',\n message: 'Dry run mode?',\n default: false,\n },\n {\n type: 'confirm',\n name: 'backup',\n message: 'Create backup?',\n default: true,\n },\n ]);\n Object.assign(options, updateOpts);\n break;\n\n case 'check':\n const checkOpts = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'includePrerelease',\n message: 'Include pre-release versions?',\n default: false,\n },\n ]);\n options.prerelease = checkOpts.includePrerelease;\n break;\n }\n\n return {\n command: baseCommand.command,\n options,\n };\n }\n}\n","/**\n * Update Command\n *\n * CLI command to update catalog dependencies.\n * Supports interactive mode, dry-run, and various update strategies.\n */\n\nimport { CatalogUpdateService, UpdateOptions, UpdatePlan, UpdateTarget } from '@pcu/core';\nimport { ConfigLoader } from '@pcu/utils';\nimport { OutputFormat, OutputFormatter } from '../formatters/outputFormatter.js';\nimport { ProgressBar } from '../formatters/progressBar.js';\nimport { InteractivePrompts } from '../interactive/interactivePrompts.js';\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js';\n\nexport interface UpdateCommandOptions {\n workspace?: string;\n catalog?: string;\n format?: OutputFormat;\n target?: UpdateTarget;\n interactive?: boolean;\n dryRun?: boolean;\n force?: boolean;\n prerelease?: boolean;\n include?: string[];\n exclude?: string[];\n createBackup?: boolean;\n verbose?: boolean;\n color?: boolean;\n}\n\nexport class UpdateCommand {\n private readonly updateService: CatalogUpdateService;\n\n constructor(updateService: CatalogUpdateService) {\n this.updateService = updateService;\n }\n\n /**\n * Execute the update command\n */\n async execute(options: UpdateCommandOptions = {}): Promise<void> {\n let progressBar: ProgressBar | undefined;\n\n try {\n // Initialize theme\n ThemeManager.setTheme('default');\n\n // Create progress bar for the update process\n progressBar = new ProgressBar({\n text: '正在规划更新...',\n total: 4, // 4 main steps\n });\n progressBar.start('正在加载工作区配置...');\n\n // Load configuration file first\n const config = ConfigLoader.loadConfig(options.workspace || process.cwd());\n\n // Use format from CLI options first, then config file, then default\n const effectiveFormat = options.format || config.defaults?.format || 'table';\n\n // Create output formatter with effective format\n const formatter = new OutputFormatter(\n effectiveFormat as OutputFormat,\n options.color !== false\n );\n\n // Merge CLI options with configuration file settings\n const updateOptions: UpdateOptions = {\n workspacePath: options.workspace,\n catalogName: options.catalog,\n target: options.target || config.defaults?.target,\n includePrerelease: options.prerelease ?? config.defaults?.includePrerelease ?? false,\n // CLI include/exclude options take priority over config file\n include: options.include?.length ? options.include : config.include,\n exclude: options.exclude?.length ? options.exclude : config.exclude,\n interactive: options.interactive ?? config.defaults?.interactive ?? false,\n dryRun: options.dryRun ?? config.defaults?.dryRun ?? false,\n force: options.force ?? false,\n createBackup: options.createBackup ?? config.defaults?.createBackup ?? false,\n };\n\n // Step 1: Planning updates\n progressBar.update('正在检查包版本...', 1, 4);\n const plan = await this.updateService.planUpdates(updateOptions);\n\n // Step 2: Check if any updates found\n progressBar.update('正在分析更新...', 2, 4);\n\n if (!plan.updates.length) {\n progressBar.succeed('所有依赖包都是最新的');\n console.log(StyledText.iconSuccess('All dependencies are up to date!'));\n return;\n }\n\n console.log(\n StyledText.iconPackage(\n `Found ${plan.totalUpdates} update${plan.totalUpdates === 1 ? '' : 's'} available`\n )\n );\n\n // Interactive selection if enabled\n let finalPlan = plan;\n if (options.interactive) {\n finalPlan = await this.interactiveSelection(plan);\n if (!finalPlan.updates.length) {\n progressBar.warn('未选择任何更新');\n console.log(StyledText.iconWarning('No updates selected'));\n return;\n }\n }\n\n // Step 3: Apply updates\n progressBar.update('正在准备应用更新...', 3, 4);\n\n if (!options.dryRun) {\n // Replace the progress bar with one for applying updates\n progressBar.stop();\n progressBar = new ProgressBar({\n text: 'Applying updates...',\n total: finalPlan.updates.length,\n });\n progressBar.start('正在应用更新...');\n\n const result = await this.updateService.executeUpdates(finalPlan, updateOptions);\n progressBar.succeed(`Applied ${finalPlan.updates.length} updates`);\n\n console.log(formatter.formatUpdateResult(result));\n } else {\n progressBar.update('正在生成预览...', 4, 4);\n progressBar.succeed('更新预览完成');\n console.log(StyledText.iconInfo('Dry run - no changes made'));\n console.log(JSON.stringify(finalPlan, null, 2));\n }\n\n console.log(StyledText.iconComplete('Update process completed!'));\n } catch (error) {\n if (progressBar) {\n progressBar.fail('Operation failed');\n }\n\n if (error instanceof Error) {\n console.error(StyledText.iconError(`Error: ${error.message}`));\n } else {\n console.error(StyledText.iconError('Unknown error occurred'));\n }\n throw error;\n }\n }\n\n /**\n * Interactive update selection\n */\n private async interactiveSelection(plan: UpdatePlan): Promise<UpdatePlan> {\n const interactivePrompts = new InteractivePrompts();\n\n // Transform PlannedUpdate to the format expected by InteractivePrompts\n const packages = plan.updates.map((update) => ({\n name: update.packageName,\n current: update.currentVersion,\n latest: update.newVersion,\n type: update.updateType,\n }));\n\n const selectedPackageNames = await interactivePrompts.selectPackages(packages);\n\n // Filter the plan to only include selected packages\n const selectedUpdates = plan.updates.filter((update) =>\n selectedPackageNames.includes(update.packageName)\n );\n\n return {\n ...plan,\n updates: selectedUpdates,\n totalUpdates: selectedUpdates.length,\n };\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: UpdateCommandOptions): string[] {\n const errors: string[] = [];\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal');\n }\n\n // Validate target\n if (\n options.target &&\n !['latest', 'greatest', 'minor', 'patch', 'newest'].includes(options.target)\n ) {\n errors.push('Invalid target. Must be one of: latest, greatest, minor, patch, newest');\n }\n\n // Interactive and dry-run conflict\n if (options.interactive && options.dryRun) {\n errors.push('Cannot use --interactive with --dry-run');\n }\n\n return errors;\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nUpdate catalog dependencies\n\nUsage:\n pcu update [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --catalog <name> Update specific catalog only\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --target <type> Update target: latest, greatest, minor, patch, newest (default: latest)\n -i, --interactive Interactive mode to choose updates\n -d, --dry-run Preview changes without writing files\n --force Force updates even if conflicts exist\n --prerelease Include prerelease versions\n --include <pattern> Include packages matching pattern (can be used multiple times)\n --exclude <pattern> Exclude packages matching pattern (can be used multiple times)\n --create-backup Create backup files before updating\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu update # Update all catalogs\n pcu update --interactive # Interactive update selection\n pcu update --dry-run # Preview updates without applying\n pcu update --catalog react17 # Update specific catalog\n pcu update --target minor # Update to latest minor versions only\n pcu update --force # Force updates despite conflicts\n pcu update --include \"react*\" # Update only React packages\n\nExit Codes:\n 0 Updates completed successfully\n 1 Updates failed or were cancelled\n 2 Error occurred\n `;\n }\n}\n","#!/usr/bin/env node\n\n/**\n * pnpm-catalog-updates CLI Entry Point\n *\n * A CLI tool for checking and updating pnpm workspace catalog dependencies.\n * This is the main entry point that handles command parsing and execution.\n */\n\nimport { dirname, join } from 'path';\nimport { OutputFormat, OutputFormatter } from './formatters/outputFormatter.js';\n\n// Services and Dependencies\nimport {\n CatalogUpdateService,\n FileSystemService,\n FileWorkspaceRepository,\n NpmRegistryService,\n WorkspaceService,\n} from '@pcu/core';\n// CLI Commands\nimport { ConfigLoader, VersionChecker } from '@pcu/utils';\nimport chalk from 'chalk';\nimport { Command } from 'commander';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { CheckCommand } from './commands/checkCommand.js';\nimport { InitCommand } from './commands/initCommand.js';\nimport { SecurityCommand } from './commands/securityCommand.js';\nimport { UpdateCommand } from './commands/updateCommand.js';\nimport { InteractivePrompts } from './interactive/interactivePrompts.js';\nimport { StyledText, ThemeManager } from './themes/colorTheme.js';\n\n// Get package.json for version info\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));\n\n/**\n * Create service dependencies with configuration support\n */\nfunction createServices(workspacePath?: string) {\n const fileSystemService = new FileSystemService();\n const workspaceRepository = new FileWorkspaceRepository(fileSystemService);\n // Use factory method to create CatalogUpdateService with configuration\n const catalogUpdateService = CatalogUpdateService.createWithConfig(\n workspaceRepository,\n workspacePath\n );\n const workspaceService = new WorkspaceService(workspaceRepository);\n\n return {\n fileSystemService,\n workspaceRepository,\n catalogUpdateService,\n workspaceService,\n };\n}\n\n/**\n * Main CLI function\n */\nexport async function main(): Promise<void> {\n const program = new Command();\n\n // Parse arguments first to get workspace path\n let workspacePath: string | undefined;\n\n // Extract workspace path from arguments for service creation\n const workspaceIndex = process.argv.findIndex((arg) => arg === '-w' || arg === '--workspace');\n if (workspaceIndex !== -1 && workspaceIndex + 1 < process.argv.length) {\n workspacePath = process.argv[workspaceIndex + 1];\n }\n\n // Load configuration to check if version updates are enabled\n const config = ConfigLoader.loadConfig(workspacePath || process.cwd());\n\n // Check for version updates (skip in CI environments or if disabled)\n if (VersionChecker.shouldCheckForUpdates() && config.advanced?.checkForUpdates !== false) {\n try {\n const versionResult = await VersionChecker.checkVersion(packageJson.version, {\n skipPrompt: false,\n timeout: 3000, // Short timeout to not delay CLI startup\n });\n\n if (versionResult.shouldPrompt) {\n const didUpdate = await VersionChecker.promptAndUpdate(versionResult);\n if (didUpdate) {\n // Exit after successful update to allow user to restart with new version\n console.log(chalk.blue('Please run your command again to use the updated version.'));\n process.exit(0);\n }\n }\n } catch (error) {\n // Silently fail version check to not interrupt CLI usage (only show warning in verbose mode)\n if (process.argv.includes('-v') || process.argv.includes('--verbose')) {\n console.warn(chalk.yellow('⚠️ Could not check for updates:'), error);\n }\n }\n }\n\n // Create services with workspace path for configuration loading\n const services = createServices(workspacePath);\n\n // Configure the main command\n program\n .name('pcu')\n .description('A CLI tool to check and update pnpm workspace catalog dependencies')\n .option('--version', 'show version information')\n .option('-v, --verbose', 'enable verbose logging')\n .option('-w, --workspace <path>', 'workspace directory path')\n .option('--no-color', 'disable colored output')\n .option('-u, --update', 'shorthand for update command')\n .option('-c, --check', 'shorthand for check command')\n .option('-a, --analyze', 'shorthand for analyze command')\n .option('-s, --workspace-info', 'shorthand for workspace command')\n .option('-t, --theme', 'shorthand for theme command')\n .option('--security-audit', 'shorthand for security command')\n .option('--security-fix', 'shorthand for security --fix-vulns command');\n\n // Check command\n program\n .command('check')\n .alias('chk')\n .description('check for outdated catalog dependencies')\n .option('--catalog <name>', 'check specific catalog only')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .option(\n '-t, --target <type>',\n 'update target: latest, greatest, minor, patch, newest',\n 'latest'\n )\n .option('--prerelease', 'include prerelease versions')\n .option('--include <pattern>', 'include packages matching pattern', [])\n .option('--exclude <pattern>', 'exclude packages matching pattern', [])\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const checkCommand = new CheckCommand(services.catalogUpdateService);\n\n await checkCommand.execute({\n workspace: globalOptions.workspace,\n catalog: options.catalog,\n format: options.format,\n target: options.target,\n prerelease: options.prerelease,\n include: Array.isArray(options.include)\n ? options.include\n : [options.include].filter(Boolean),\n exclude: Array.isArray(options.exclude)\n ? options.exclude\n : [options.exclude].filter(Boolean),\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Update command\n program\n .command('update')\n .alias('u')\n .description('update catalog dependencies')\n .option('-i, --interactive', 'interactive mode to choose updates')\n .option('-d, --dry-run', 'preview changes without writing files')\n .option(\n '-t, --target <type>',\n 'update target: latest, greatest, minor, patch, newest',\n 'latest'\n )\n .option('--catalog <name>', 'update specific catalog only')\n .option('--include <pattern>', 'include packages matching pattern', [])\n .option('--exclude <pattern>', 'exclude packages matching pattern', [])\n .option('--force', 'force updates even if risky')\n .option('--prerelease', 'include prerelease versions')\n .option('-b, --create-backup', 'create backup files before updating')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const updateCommand = new UpdateCommand(services.catalogUpdateService);\n\n await updateCommand.execute({\n workspace: globalOptions.workspace,\n catalog: options.catalog,\n format: options.format,\n target: options.target,\n interactive: options.interactive,\n dryRun: options.dryRun,\n force: options.force,\n prerelease: options.prerelease,\n include: Array.isArray(options.include)\n ? options.include\n : [options.include].filter(Boolean),\n exclude: Array.isArray(options.exclude)\n ? options.exclude\n : [options.exclude].filter(Boolean),\n createBackup: options.createBackup,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Analyze command\n program\n .command('analyze')\n .alias('a')\n .description('analyze the impact of updating a specific dependency')\n .argument('<catalog>', 'catalog name')\n .argument('<package>', 'package name')\n .argument('[version]', 'new version (default: latest)')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (catalog, packageName, version, options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n );\n\n // Get latest version if not specified\n let targetVersion = version;\n if (!targetVersion) {\n // Create a temporary registry service for version fetching\n const tempRegistryService = new NpmRegistryService();\n targetVersion = (await tempRegistryService.getLatestVersion(packageName)).toString();\n }\n\n const analysis = await services.catalogUpdateService.analyzeImpact(\n catalog,\n packageName,\n targetVersion,\n globalOptions.workspace\n );\n\n const formattedOutput = formatter.formatImpactAnalysis(analysis);\n console.log(formattedOutput);\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Workspace command\n program\n .command('workspace')\n .alias('w')\n .description('workspace information and validation')\n .option('--validate', 'validate workspace configuration')\n .option('-s, --stats', 'show workspace statistics')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n );\n\n if (options.validate) {\n const report = await services.workspaceService.validateWorkspace(globalOptions.workspace);\n const formattedOutput = formatter.formatValidationReport(report);\n console.log(formattedOutput);\n process.exit(report.isValid ? 0 : 1);\n } else if (options.stats) {\n const stats = await services.workspaceService.getWorkspaceStats(globalOptions.workspace);\n const formattedOutput = formatter.formatWorkspaceStats(stats);\n console.log(formattedOutput);\n } else {\n const info = await services.workspaceService.getWorkspaceInfo(globalOptions.workspace);\n console.log(formatter.formatMessage(`Workspace: ${info.name}`, 'info'));\n console.log(formatter.formatMessage(`Path: ${info.path}`, 'info'));\n console.log(formatter.formatMessage(`Packages: ${info.packageCount}`, 'info'));\n console.log(formatter.formatMessage(`Catalogs: ${info.catalogCount}`, 'info'));\n\n if (info.catalogNames.length > 0) {\n console.log(\n formatter.formatMessage(`Catalog names: ${info.catalogNames.join(', ')}`, 'info')\n );\n }\n }\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Theme command\n program\n .command('theme')\n .alias('t')\n .description('configure color theme')\n .option('-s, --set <theme>', 'set theme: default, modern, minimal, neon')\n .option('-l, --list', 'list available themes')\n .option('-i, --interactive', 'interactive theme selection')\n .action(async (options, _command) => {\n try {\n if (options.list) {\n const themes = ThemeManager.listThemes();\n console.log(StyledText.iconInfo('Available themes:'));\n themes.forEach((theme) => {\n console.log(` • ${theme}`);\n });\n return;\n }\n\n if (options.set) {\n const themes = ThemeManager.listThemes();\n if (!themes.includes(options.set)) {\n console.error(StyledText.iconError(`Invalid theme: ${options.set}`));\n console.log(StyledText.muted(`Available themes: ${themes.join(', ')}`));\n process.exit(1);\n }\n\n ThemeManager.setTheme(options.set);\n console.log(StyledText.iconSuccess(`Theme set to: ${options.set}`));\n\n // Show a preview\n console.log('\\nTheme preview:');\n const theme = ThemeManager.getTheme();\n console.log(` ${theme.success('✓ Success message')}`);\n console.log(` ${theme.warning('⚠ Warning message')}`);\n console.log(` ${theme.error('✗ Error message')}`);\n console.log(` ${theme.info('ℹ Info message')}`);\n console.log(\n ` ${theme.major('Major update')} | ${theme.minor('Minor update')} | ${theme.patch('Patch update')}`\n );\n return;\n }\n\n if (options.interactive) {\n const interactivePrompts = new InteractivePrompts();\n const config = await interactivePrompts.configurationWizard();\n\n if (config.theme) {\n ThemeManager.setTheme(config.theme);\n console.log(StyledText.iconSuccess(`Theme configured: ${config.theme}`));\n }\n return;\n }\n\n // Default: show current theme and list\n const currentTheme = ThemeManager.getTheme();\n console.log(StyledText.iconInfo('Current theme settings:'));\n console.log(` Theme: ${currentTheme ? 'custom' : 'default'}`);\n console.log('\\nAvailable themes:');\n ThemeManager.listThemes().forEach((theme) => {\n console.log(` • ${theme}`);\n });\n console.log(\n StyledText.muted('\\nUse --set <theme> to change theme or --interactive for guided setup')\n );\n } catch (error) {\n console.error(StyledText.iconError('Error configuring theme:'), error);\n process.exit(1);\n }\n });\n\n // Security command\n program\n .command('security')\n .alias('sec')\n .description('security vulnerability scanning and automated fixes')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .option('--audit', 'perform npm audit scan (default: true)', true)\n .option('--fix-vulns', 'automatically fix vulnerabilities')\n .option('--severity <level>', 'filter by severity: low, moderate, high, critical')\n .option('--include-dev', 'include dev dependencies in scan')\n .option('--snyk', 'include Snyk scan (requires snyk CLI)')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n );\n\n const securityCommand = new SecurityCommand(formatter);\n\n await securityCommand.execute({\n workspace: globalOptions.workspace,\n format: options.format,\n audit: options.audit,\n fixVulns: options.fixVulns,\n severity: options.severity,\n includeDev: options.includeDev,\n snyk: options.snyk,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Init command\n program\n .command('init')\n .alias('i')\n .description('initialize PCU configuration and PNPM workspace')\n .option('--force', 'overwrite existing configuration file')\n .option('--full', 'generate full configuration with all options')\n .option(\n '--create-workspace',\n 'create PNPM workspace structure if missing (default: true)',\n true\n )\n .option('--no-create-workspace', 'skip creating PNPM workspace structure')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts();\n const initCommand = new InitCommand();\n\n await initCommand.execute({\n workspace: globalOptions.workspace,\n force: options.force,\n full: options.full,\n createWorkspace: options.createWorkspace,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n });\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error);\n process.exit(1);\n }\n });\n\n // Add help command\n program\n .command('help')\n .alias('h')\n .argument('[command]', 'command to get help for')\n .description('display help for command')\n .action((command) => {\n if (command) {\n const cmd = program.commands.find((c) => c.name() === command);\n if (cmd) {\n cmd.help();\n } else {\n console.log(chalk.red(`Unknown command: ${command}`));\n }\n } else {\n program.help();\n }\n });\n\n // Let commander handle help and version normally\n // program.exitOverride() removed to fix help/version output\n\n // Handle shorthand options and single-letter commands by rewriting arguments\n const args = [...process.argv];\n // Map single-letter command 'i' -> init (changed from interactive mode)\n if (\n args.includes('i') &&\n !args.some(\n (a) =>\n a === 'init' ||\n a === 'update' ||\n a === '-u' ||\n a === '--update' ||\n a === '-i' ||\n a === '--interactive'\n )\n ) {\n const index = args.findIndex((arg) => arg === 'i');\n args.splice(index, 1, 'init');\n }\n\n if (args.includes('-u') || args.includes('--update')) {\n const index = args.findIndex((arg) => arg === '-u' || arg === '--update');\n args.splice(index, 1, 'update');\n } else if (\n (args.includes('-i') || args.includes('--interactive')) &&\n !args.some((a) => a === 'update' || a === '-u' || a === '--update')\n ) {\n // Map standalone -i to `update -i`\n const index = args.findIndex((arg) => arg === '-i' || arg === '--interactive');\n // Replace the flag position with 'update' and keep the flag after it\n args.splice(index, 1, 'update', '-i');\n } else if (args.includes('-c') || args.includes('--check')) {\n const index = args.findIndex((arg) => arg === '-c' || arg === '--check');\n args.splice(index, 1, 'check');\n } else if (args.includes('-a') || args.includes('--analyze')) {\n const index = args.findIndex((arg) => arg === '-a' || arg === '--analyze');\n args.splice(index, 1, 'analyze');\n } else if (args.includes('-s') || args.includes('--workspace-info')) {\n const index = args.findIndex((arg) => arg === '-s' || arg === '--workspace-info');\n args.splice(index, 1, 'workspace');\n } else if (args.includes('-t') || args.includes('--theme')) {\n const index = args.findIndex((arg) => arg === '-t' || arg === '--theme');\n args.splice(index, 1, 'theme');\n } else if (args.includes('--security-audit')) {\n const index = args.findIndex((arg) => arg === '--security-audit');\n args.splice(index, 1, 'security');\n } else if (args.includes('--security-fix')) {\n const index = args.findIndex((arg) => arg === '--security-fix');\n args.splice(index, 1, 'security', '--fix-vulns');\n }\n\n // Show help if no arguments provided\n if (args.length <= 2) {\n program.help();\n }\n\n // Handle custom --version with update checking\n if (args.includes('--version')) {\n console.log(packageJson.version);\n\n // Check for updates if not in CI and enabled in config\n if (VersionChecker.shouldCheckForUpdates() && config.advanced?.checkForUpdates !== false) {\n try {\n console.log(chalk.gray('Checking for updates...'));\n const versionResult = await VersionChecker.checkVersion(packageJson.version, {\n skipPrompt: false,\n timeout: 5000, // Longer timeout for explicit version check\n });\n\n if (versionResult.shouldPrompt) {\n const didUpdate = await VersionChecker.promptAndUpdate(versionResult);\n if (didUpdate) {\n console.log(chalk.blue('Please run your command again to use the updated version.'));\n process.exit(0);\n }\n } else if (versionResult.isLatest) {\n console.log(chalk.green('You are using the latest version!'));\n }\n } catch (error) {\n // Silently fail update check for version command\n if (args.includes('-v') || args.includes('--verbose')) {\n console.warn(chalk.yellow('⚠️ Could not check for updates:'), error);\n }\n }\n }\n\n process.exit(0);\n }\n\n // Parse command line arguments\n try {\n await program.parseAsync(args);\n } catch (error) {\n console.error(chalk.red('❌ Unexpected error:'), error);\n if (error instanceof Error && error.stack) {\n console.error(chalk.gray(error.stack));\n }\n process.exit(1);\n }\n}\n\n// Run the CLI if this file is executed directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n main().catch((error) => {\n console.error(chalk.red('❌ Fatal error:'), error);\n process.exit(1);\n });\n}\n"]}
1
+ {"version":3,"sources":["../../../packages/core/src/infrastructure/ai/aiDetector.ts","../../../packages/core/src/infrastructure/ai/cache/analysisCache.ts","../../../packages/core/src/infrastructure/ai/fallback/ruleEngine.ts","../../../packages/core/src/infrastructure/ai/providers/baseProvider.ts","../../../packages/core/src/infrastructure/ai/providers/claudeProvider.ts","../../../packages/core/src/infrastructure/ai/providers/codexProvider.ts","../../../packages/core/src/infrastructure/ai/providers/geminiProvider.ts","../../../packages/core/src/infrastructure/external-services/securityAdvisoryService.ts","../../../packages/core/src/application/services/aiAnalysisService.ts","../../../packages/utils/src/config/config.ts","../../../packages/utils/src/config/packageFilterConfig.ts","../../../packages/utils/src/config/configLoader.ts","../../../packages/utils/src/config/index.ts","../../../packages/utils/src/error-handling/errorTracker.ts","../../../packages/utils/src/logger/logger.ts","../../../packages/utils/src/error-handling/userFriendlyErrorHandler.ts","../../../packages/utils/src/error-handling/index.ts","../../../packages/utils/src/logger/index.ts","../../../packages/utils/src/types/cli.ts","../../../packages/utils/src/types/core.ts","../../../packages/utils/src/types/index.ts","../../../packages/utils/src/utils/async.ts","../../../packages/utils/src/utils/format.ts","../../../packages/utils/src/utils/git.ts","../../../packages/utils/src/utils/string.ts","../../../packages/utils/src/utils/validation.ts","../../../packages/utils/src/utils/versionChecker.ts","../../../packages/utils/src/utils/index.ts","../../../packages/utils/src/index.ts","../../../packages/core/src/domain/value-objects/version.ts","../../../packages/core/src/domain/value-objects/workspacePath.ts","../../../packages/core/src/infrastructure/utils/npmrcParser.ts","../../../packages/core/src/infrastructure/external-services/npmRegistryService.ts","../../../packages/core/src/application/services/catalogUpdateService.ts","../../../packages/core/src/application/services/workspaceService.ts","../../../packages/core/src/domain/entities/catalog.ts","../../../packages/core/src/domain/entities/package.ts","../../../packages/core/src/domain/entities/workspace.ts","../../../packages/core/src/domain/value-objects/catalogCollection.ts","../../../packages/core/src/domain/value-objects/packageCollection.ts","../../../packages/core/src/domain/value-objects/workspaceConfig.ts","../../../packages/core/src/domain/value-objects/workspaceId.ts","../../../packages/core/src/infrastructure/ai/cache/index.ts","../../../packages/core/src/infrastructure/ai/fallback/index.ts","../../../packages/core/src/infrastructure/ai/providers/index.ts","../../../packages/core/src/infrastructure/ai/index.ts","../../../packages/core/src/infrastructure/cache/cache.ts","../../../packages/core/src/infrastructure/file-system/fileSystemService.ts","../../../packages/core/src/infrastructure/repositories/fileWorkspaceRepository.ts","../../../packages/core/src/index.ts","../src/cli/index.ts","../src/cli/commands/checkCommand.ts","../src/cli/formatters/outputFormatter.ts","../src/cli/themes/colorTheme.ts","../src/cli/commands/initCommand.ts","../src/cli/formatters/progressBar.ts","../src/cli/commands/securityCommand.ts","../src/cli/commands/updateCommand.ts","../src/cli/interactive/interactivePrompts.ts"],"names":["execCallback","path","join","homedir","existsSync","fs","semver","exec","promisify","resolve","readFileSync","init_config","mkdirSync","writeFileSync","chalk","init_logger","init_cache","unlinkSync","createHash","YAML","init_src","riskColor","dirname","packageJson","path4","spawnSync","fileURLToPath","config","analysisCache"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * AI Detector Service\n *\n * Automatically detects available AI CLI tools on the system.\n * Supports multiple detection strategies: which, alias, env vars, known paths.\n */\n\nimport { exec as execCallback } from 'node:child_process'\nimport { existsSync } from 'node:fs'\nimport { homedir, platform } from 'node:os'\nimport { join } from 'node:path'\nimport { promisify } from 'node:util'\n\nimport type { AIProviderInfo, AnalysisType } from '../../domain/interfaces/aiProvider.js'\n\nconst exec = promisify(execCallback)\n\n/**\n * Detection result for a single provider\n */\ninterface DetectionResult {\n found: boolean\n path?: string\n version?: string\n detectionMethod?: 'which' | 'alias' | 'envvar' | 'known-path' | 'application'\n}\n\n/**\n * Provider definition for detection\n */\ninterface ProviderDefinition {\n name: string\n command: string\n envVar?: string\n knownPaths: string[]\n applicationPaths?: string[] // For GUI applications like Cursor\n versionArg: string\n priority: number\n capabilities: AnalysisType[]\n}\n\n/**\n * AI Detector - Detects available AI CLI tools on the system\n */\nexport class AIDetector {\n private readonly providers: ProviderDefinition[]\n private readonly isWindows: boolean\n private readonly homeDir: string\n\n constructor() {\n this.isWindows = platform() === 'win32'\n this.homeDir = homedir()\n this.providers = this.initializeProviders()\n }\n\n /**\n * Initialize provider definitions\n */\n private initializeProviders(): ProviderDefinition[] {\n const npmGlobalBin = join(this.homeDir, '.npm-global', 'bin')\n const localBin = '/usr/local/bin'\n const homebrewBin = '/opt/homebrew/bin'\n // Intel Homebrew uses /usr/local/bin which is already covered by localBin\n\n // Priority order: gemini > claude > codex > cursor\n return [\n {\n name: 'gemini',\n command: 'gemini',\n envVar: 'GEMINI_PATH',\n knownPaths: [\n join(homebrewBin, 'gemini'),\n join(localBin, 'gemini'),\n join(npmGlobalBin, 'gemini'),\n join(this.homeDir, '.local', 'bin', 'gemini'),\n ],\n versionArg: '--version',\n priority: 100,\n capabilities: ['impact', 'security', 'compatibility', 'recommend'],\n },\n {\n name: 'claude',\n command: 'claude',\n envVar: 'CLAUDE_PATH',\n knownPaths: [\n join(homebrewBin, 'claude'),\n join(localBin, 'claude'),\n join(npmGlobalBin, 'claude'),\n join(this.homeDir, '.local', 'bin', 'claude'),\n ],\n versionArg: '--version',\n priority: 80,\n capabilities: ['impact', 'security', 'compatibility', 'recommend'],\n },\n {\n name: 'codex',\n command: 'codex',\n envVar: 'CODEX_PATH',\n knownPaths: [\n join(homebrewBin, 'codex'),\n join(localBin, 'codex'),\n join(npmGlobalBin, 'codex'),\n join(this.homeDir, '.local', 'bin', 'codex'),\n ],\n versionArg: '--version',\n priority: 60,\n capabilities: ['impact', 'compatibility', 'recommend'],\n },\n {\n name: 'cursor',\n command: 'cursor',\n envVar: 'CURSOR_PATH',\n knownPaths: [join(homebrewBin, 'cursor'), join(localBin, 'cursor')],\n applicationPaths: this.isWindows\n ? [join(process.env.LOCALAPPDATA || '', 'Programs', 'cursor', 'Cursor.exe')]\n : ['/Applications/Cursor.app/Contents/MacOS/Cursor'],\n versionArg: '--version',\n priority: 40,\n capabilities: ['impact', 'recommend'],\n },\n ]\n }\n\n /**\n * Detect all available AI providers\n */\n async detectAvailableProviders(): Promise<AIProviderInfo[]> {\n const results: AIProviderInfo[] = []\n\n for (const provider of this.providers) {\n const detection = await this.detectProvider(provider)\n\n results.push({\n name: provider.name,\n version: detection.version,\n path: detection.path,\n available: detection.found,\n priority: detection.found ? provider.priority : 0,\n capabilities: provider.capabilities,\n })\n }\n\n // Sort by priority (descending) and filter available\n return results.sort((a, b) => b.priority - a.priority)\n }\n\n /**\n * Get only available providers\n */\n async getAvailableProviders(): Promise<AIProviderInfo[]> {\n const all = await this.detectAvailableProviders()\n return all.filter((p) => p.available)\n }\n\n /**\n * Check if a specific provider is available\n */\n async isProviderAvailable(providerName: string): Promise<boolean> {\n const provider = this.providers.find((p) => p.name === providerName)\n if (!provider) {\n return false\n }\n\n const detection = await this.detectProvider(provider)\n return detection.found\n }\n\n /**\n * Get the best available provider\n */\n async getBestProvider(): Promise<AIProviderInfo | null> {\n const available = await this.getAvailableProviders()\n return available.length > 0 ? available[0]! : null\n }\n\n /**\n * Get provider by name\n */\n async getProvider(name: string): Promise<AIProviderInfo | null> {\n const provider = this.providers.find((p) => p.name === name)\n if (!provider) {\n return null\n }\n\n const detection = await this.detectProvider(provider)\n return {\n name: provider.name,\n version: detection.version,\n path: detection.path,\n available: detection.found,\n priority: detection.found ? provider.priority : 0,\n capabilities: provider.capabilities,\n }\n }\n\n /**\n * Detect a single provider using multiple strategies\n */\n private async detectProvider(provider: ProviderDefinition): Promise<DetectionResult> {\n // Strategy 1: Check environment variable\n if (provider.envVar) {\n const envPath = process.env[provider.envVar]\n if (envPath && this.fileExists(envPath)) {\n const version = await this.getVersion(envPath, provider.versionArg)\n return { found: true, path: envPath, version, detectionMethod: 'envvar' }\n }\n }\n\n // Strategy 2: Use 'which' command (Unix) or 'where' (Windows)\n const whichResult = await this.detectByWhich(provider.command)\n if (whichResult) {\n const version = await this.getVersion(whichResult, provider.versionArg)\n return { found: true, path: whichResult, version, detectionMethod: 'which' }\n }\n\n // Strategy 3: Check for alias (Unix only)\n if (!this.isWindows) {\n const aliasResult = await this.detectByAlias(provider.command)\n if (aliasResult) {\n const version = await this.getVersion(provider.command, provider.versionArg)\n return { found: true, path: 'alias', version, detectionMethod: 'alias' }\n }\n }\n\n // Strategy 4: Check known paths\n for (const knownPath of provider.knownPaths) {\n if (this.fileExists(knownPath)) {\n const version = await this.getVersion(knownPath, provider.versionArg)\n return { found: true, path: knownPath, version, detectionMethod: 'known-path' }\n }\n }\n\n // Strategy 5: Check application paths (for GUI apps like Cursor)\n if (provider.applicationPaths) {\n for (const appPath of provider.applicationPaths) {\n if (this.fileExists(appPath)) {\n return { found: true, path: appPath, detectionMethod: 'application' }\n }\n }\n }\n\n return { found: false }\n }\n\n /**\n * Detect using 'which' (Unix) or 'where' (Windows)\n */\n private async detectByWhich(command: string): Promise<string | null> {\n try {\n const whichCommand = this.isWindows ? 'where' : 'which'\n const { stdout } = await exec(`${whichCommand} ${command}`, { timeout: 5000 })\n const path = stdout.trim().split('\\n')[0]\n return path && path.length > 0 ? path : null\n } catch {\n return null\n }\n }\n\n /**\n * Detect by checking if command is an alias\n */\n private async detectByAlias(command: string): Promise<boolean> {\n try {\n // Check using non-interactive shell to avoid hanging\n // Note: This won't detect aliases defined in ~/.bashrc, but avoids process hanging\n const { stdout } = await exec(`type ${command} 2>/dev/null`, {\n timeout: 3000,\n shell: '/bin/bash',\n })\n return stdout.includes('alias') || stdout.includes('function')\n } catch {\n return false\n }\n }\n\n /**\n * Get version of a command\n */\n private async getVersion(commandOrPath: string, versionArg: string): Promise<string | undefined> {\n try {\n const { stdout, stderr } = await exec(`\"${commandOrPath}\" ${versionArg}`, {\n timeout: 10000,\n })\n // Version might be in stdout or stderr\n const output = stdout || stderr\n // Extract version number (e.g., \"1.2.3\", \"v1.2.3\")\n const versionMatch = output.match(/v?(\\d+\\.\\d+\\.\\d+(?:-[\\w.]+)?)/)\n return versionMatch ? versionMatch[1] : output.trim().slice(0, 50)\n } catch {\n return undefined\n }\n }\n\n /**\n * Check if a file exists\n */\n private fileExists(path: string): boolean {\n try {\n // Expand ~ to home directory\n const expandedPath = path.startsWith('~') ? join(this.homeDir, path.slice(1)) : path\n return existsSync(expandedPath)\n } catch {\n return false\n }\n }\n\n /**\n * Get detection summary for logging/display\n */\n async getDetectionSummary(): Promise<string> {\n const providers = await this.detectAvailableProviders()\n const available = providers.filter((p) => p.available)\n\n if (available.length === 0) {\n return ''\n }\n\n const lines = ['Available AI tools:']\n for (const provider of available) {\n const version = provider.version ? ` (${provider.version})` : ''\n const path = provider.path ? ` at ${provider.path}` : ''\n lines.push(` - ${provider.name}${version}${path}`)\n }\n\n return lines.join('\\n')\n }\n}\n","/**\n * AI Analysis Cache\n *\n * Provides caching for AI analysis results to avoid redundant API calls.\n * Supports TTL-based expiration and analysis type specific caching.\n */\n\nimport { createHash } from 'node:crypto'\nimport { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nimport type {\n AnalysisContext,\n AnalysisResult,\n AnalysisType,\n} from '../../../domain/interfaces/aiProvider.js'\n\n/**\n * Cache entry for analysis results\n */\ninterface AnalysisCacheEntry {\n key: string\n result: AnalysisResult\n timestamp: number\n ttl: number\n contextHash: string\n}\n\n/**\n * Cache options\n */\nexport interface AnalysisCacheOptions {\n ttl?: number // TTL in milliseconds (default: 1 hour)\n maxEntries?: number // Max cached entries\n persistToDisk?: boolean // Persist cache to disk\n cacheDir?: string // Custom cache directory\n}\n\n/**\n * Cache statistics\n */\nexport interface AnalysisCacheStats {\n totalEntries: number\n hits: number\n misses: number\n hitRate: number\n oldestEntry: number\n newestEntry: number\n}\n\n/**\n * AI Analysis Cache\n */\nexport class AnalysisCache {\n private entries = new Map<string, AnalysisCacheEntry>()\n private stats = { hits: 0, misses: 0 }\n private readonly options: Required<AnalysisCacheOptions>\n\n constructor(options: AnalysisCacheOptions = {}) {\n this.options = {\n ttl: options.ttl ?? 3600000, // 1 hour\n maxEntries: options.maxEntries ?? 500,\n persistToDisk: options.persistToDisk ?? true,\n cacheDir: options.cacheDir ?? join(homedir(), '.pcu', 'cache', 'ai-analysis'),\n }\n\n if (this.options.persistToDisk) {\n this.loadFromDisk()\n }\n\n // Cleanup expired entries every 5 minutes\n setInterval(() => this.cleanup(), 300000)\n }\n\n /**\n * Generate cache key from analysis context\n */\n private generateKey(context: AnalysisContext, provider: string): string {\n const keyData = {\n provider,\n analysisType: context.analysisType,\n packages: context.packages\n .map((p) => `${p.name}@${p.currentVersion}->${p.targetVersion}`)\n .sort(),\n workspace: context.workspaceInfo.name,\n }\n\n return createHash('md5').update(JSON.stringify(keyData)).digest('hex')\n }\n\n /**\n * Generate context hash for validation\n */\n private generateContextHash(context: AnalysisContext): string {\n return createHash('sha256').update(JSON.stringify(context)).digest('hex')\n }\n\n /**\n * Get cached analysis result\n */\n get(context: AnalysisContext, provider: string): AnalysisResult | undefined {\n const key = this.generateKey(context, provider)\n const entry = this.entries.get(key)\n\n if (!entry) {\n this.stats.misses++\n return undefined\n }\n\n // Check if expired\n if (Date.now() - entry.timestamp > entry.ttl) {\n this.entries.delete(key)\n this.stats.misses++\n return undefined\n }\n\n // Validate context hash\n const contextHash = this.generateContextHash(context)\n if (entry.contextHash !== contextHash) {\n this.entries.delete(key)\n this.stats.misses++\n return undefined\n }\n\n this.stats.hits++\n return entry.result\n }\n\n /**\n * Cache analysis result\n */\n set(context: AnalysisContext, provider: string, result: AnalysisResult, ttl?: number): void {\n const key = this.generateKey(context, provider)\n const entryTtl = ttl ?? this.getTtlForAnalysisType(context.analysisType)\n\n const entry: AnalysisCacheEntry = {\n key,\n result,\n timestamp: Date.now(),\n ttl: entryTtl,\n contextHash: this.generateContextHash(context),\n }\n\n // Ensure capacity\n this.ensureCapacity()\n\n this.entries.set(key, entry)\n\n if (this.options.persistToDisk) {\n this.saveToDisk(key, entry)\n }\n }\n\n /**\n * Check if result exists in cache\n */\n has(context: AnalysisContext, provider: string): boolean {\n const key = this.generateKey(context, provider)\n const entry = this.entries.get(key)\n\n if (!entry) {\n return false\n }\n\n // Check expiration\n if (Date.now() - entry.timestamp > entry.ttl) {\n this.entries.delete(key)\n return false\n }\n\n return true\n }\n\n /**\n * Invalidate cache for specific packages\n */\n invalidateForPackages(packageNames: string[]): void {\n const packageSet = new Set(packageNames)\n const keysToDelete: string[] = []\n\n for (const [key, entry] of this.entries) {\n // Parse the result to check packages\n const hasPackage = entry.result.recommendations.some((r) => packageSet.has(r.package))\n\n if (hasPackage) {\n keysToDelete.push(key)\n }\n }\n\n for (const key of keysToDelete) {\n this.entries.delete(key)\n if (this.options.persistToDisk) {\n this.deleteFromDisk(key)\n }\n }\n }\n\n /**\n * Clear all cache entries\n */\n clear(): void {\n this.entries.clear()\n this.stats.hits = 0\n this.stats.misses = 0\n\n if (this.options.persistToDisk) {\n this.clearDisk()\n }\n }\n\n /**\n * Get cache statistics\n */\n getStats(): AnalysisCacheStats {\n const timestamps = Array.from(this.entries.values()).map((e) => e.timestamp)\n const total = this.stats.hits + this.stats.misses\n\n return {\n totalEntries: this.entries.size,\n hits: this.stats.hits,\n misses: this.stats.misses,\n hitRate: total > 0 ? this.stats.hits / total : 0,\n oldestEntry: timestamps.length > 0 ? Math.min(...timestamps) : 0,\n newestEntry: timestamps.length > 0 ? Math.max(...timestamps) : 0,\n }\n }\n\n /**\n * Get TTL based on analysis type\n */\n private getTtlForAnalysisType(type: AnalysisType): number {\n switch (type) {\n case 'security':\n return 1800000 // 30 minutes for security (more time-sensitive)\n case 'impact':\n return 3600000 // 1 hour for impact analysis\n case 'compatibility':\n return 7200000 // 2 hours for compatibility\n case 'recommend':\n return 3600000 // 1 hour for recommendations\n default:\n return this.options.ttl\n }\n }\n\n /**\n * Ensure cache doesn't exceed max entries\n */\n private ensureCapacity(): void {\n while (this.entries.size >= this.options.maxEntries) {\n this.evictOldest()\n }\n }\n\n /**\n * Evict oldest entry\n */\n private evictOldest(): void {\n let oldestKey: string | undefined\n let oldestTimestamp = Date.now()\n\n for (const [key, entry] of this.entries) {\n if (entry.timestamp < oldestTimestamp) {\n oldestTimestamp = entry.timestamp\n oldestKey = key\n }\n }\n\n if (oldestKey) {\n this.entries.delete(oldestKey)\n if (this.options.persistToDisk) {\n this.deleteFromDisk(oldestKey)\n }\n }\n }\n\n /**\n * Cleanup expired entries\n */\n private cleanup(): void {\n const now = Date.now()\n const expiredKeys: string[] = []\n\n for (const [key, entry] of this.entries) {\n if (now - entry.timestamp > entry.ttl) {\n expiredKeys.push(key)\n }\n }\n\n for (const key of expiredKeys) {\n this.entries.delete(key)\n if (this.options.persistToDisk) {\n this.deleteFromDisk(key)\n }\n }\n }\n\n /**\n * Load cache from disk\n */\n private loadFromDisk(): void {\n try {\n if (!existsSync(this.options.cacheDir)) {\n return\n }\n\n const indexPath = join(this.options.cacheDir, 'index.json')\n if (!existsSync(indexPath)) {\n return\n }\n\n const indexContent = readFileSync(indexPath, 'utf-8')\n const index = JSON.parse(indexContent)\n\n for (const key of index.keys || []) {\n try {\n const entryPath = join(this.options.cacheDir, `${key}.json`)\n if (existsSync(entryPath)) {\n const entryContent = readFileSync(entryPath, 'utf-8')\n const entry = JSON.parse(entryContent) as AnalysisCacheEntry\n\n // Only load if not expired\n if (Date.now() - entry.timestamp <= entry.ttl) {\n // Restore Date object\n entry.result.timestamp = new Date(entry.result.timestamp)\n this.entries.set(key, entry)\n }\n }\n } catch {\n // Skip corrupted entries\n }\n }\n } catch {\n // Ignore disk loading errors\n }\n }\n\n /**\n * Save entry to disk\n */\n private saveToDisk(key: string, entry: AnalysisCacheEntry): void {\n try {\n if (!existsSync(this.options.cacheDir)) {\n mkdirSync(this.options.cacheDir, { recursive: true })\n }\n\n const entryPath = join(this.options.cacheDir, `${key}.json`)\n writeFileSync(entryPath, JSON.stringify(entry), 'utf-8')\n\n this.updateDiskIndex()\n } catch {\n // Ignore disk saving errors\n }\n }\n\n /**\n * Delete entry from disk\n */\n private deleteFromDisk(key: string): void {\n try {\n const entryPath = join(this.options.cacheDir, `${key}.json`)\n if (existsSync(entryPath)) {\n unlinkSync(entryPath)\n }\n this.updateDiskIndex()\n } catch {\n // Ignore disk deletion errors\n }\n }\n\n /**\n * Clear disk cache\n */\n private clearDisk(): void {\n try {\n if (existsSync(this.options.cacheDir)) {\n const fs = require('node:fs')\n fs.rmSync(this.options.cacheDir, { recursive: true, force: true })\n }\n } catch {\n // Ignore disk clearing errors\n }\n }\n\n /**\n * Update disk index\n */\n private updateDiskIndex(): void {\n try {\n const indexPath = join(this.options.cacheDir, 'index.json')\n const index = {\n keys: Array.from(this.entries.keys()),\n lastUpdated: Date.now(),\n }\n writeFileSync(indexPath, JSON.stringify(index), 'utf-8')\n } catch {\n // Ignore index update errors\n }\n }\n}\n\n// Export singleton instance\nexport const analysisCache = new AnalysisCache()\n","/**\n * Rule-based Analysis Engine\n *\n * Fallback engine when AI providers are not available.\n * Provides basic dependency analysis using predefined rules.\n */\n\nimport semver from 'semver'\n\nimport type {\n AnalysisContext,\n AnalysisResult,\n PackageUpdateInfo,\n Recommendation,\n RiskLevel,\n} from '../../../domain/interfaces/aiProvider.js'\n\n/**\n * Known breaking change patterns\n */\nconst BREAKING_PATTERNS: Record<string, string[]> = {\n react: ['React 17 to 18: Concurrent features', 'React 18+: Strict mode changes'],\n typescript: ['TypeScript 5.0: New decorators', 'TypeScript 4.7+: ESM changes'],\n eslint: ['ESLint 9.0: Flat config required', 'ESLint 8.0+: New rule formats'],\n webpack: ['Webpack 5: Node.js polyfills removed'],\n vite: ['Vite 5: Node.js 18+ required'],\n next: ['Next.js 13+: App router changes', 'Next.js 14+: Server components default'],\n vue: ['Vue 3: Composition API', 'Vue 3: Breaking template changes'],\n}\n\n/**\n * Known security-sensitive packages\n */\nconst SECURITY_SENSITIVE_PACKAGES = new Set([\n 'jsonwebtoken',\n 'bcrypt',\n 'crypto-js',\n 'helmet',\n 'cors',\n 'express-session',\n 'passport',\n 'oauth',\n 'jose',\n 'node-forge',\n])\n\n/**\n * Rule-based Analysis Engine\n */\nexport class RuleEngine {\n /**\n * Analyze packages using predefined rules\n */\n analyze(context: AnalysisContext): AnalysisResult {\n const startTime = Date.now()\n const { packages, analysisType } = context\n\n const recommendations = packages.map((pkg) => this.analyzePackage(pkg, analysisType))\n\n // Calculate overall risk\n const highRiskCount = recommendations.filter(\n (r) => r.riskLevel === 'high' || r.riskLevel === 'critical'\n ).length\n\n const summary = this.generateSummary(recommendations, highRiskCount)\n\n return {\n provider: 'rule-engine',\n analysisType,\n recommendations,\n summary,\n confidence: 0.6, // Rule-based analysis has moderate confidence\n warnings: highRiskCount > 0 ? [`${highRiskCount} high-risk updates detected`] : [],\n timestamp: new Date(),\n processingTimeMs: Date.now() - startTime,\n }\n }\n\n /**\n * Analyze a single package\n */\n private analyzePackage(pkg: PackageUpdateInfo, _analysisType: string): Recommendation {\n const riskLevel = this.assessRiskLevel(pkg)\n const breakingChanges = this.detectBreakingChanges(pkg)\n const securityFixes = this.detectSecurityRelevance(pkg)\n\n let action: Recommendation['action'] = 'update'\n let reason = ''\n\n // Determine action based on risk and update type\n if (riskLevel === 'critical') {\n action = 'review'\n reason = 'Critical risk level requires manual review before update'\n } else if (riskLevel === 'high' && pkg.updateType === 'major') {\n action = 'review'\n reason = 'Major version update with high risk - review breaking changes'\n } else if (pkg.updateType === 'major' && breakingChanges.length > 0) {\n action = 'review'\n reason = `Major update with ${breakingChanges.length} known breaking changes`\n } else if (pkg.updateType === 'patch') {\n action = 'update'\n reason = 'Patch update - typically safe to apply'\n } else if (pkg.updateType === 'minor') {\n action = 'update'\n reason = 'Minor update - new features, backward compatible'\n } else {\n action = 'update'\n reason = 'Update recommended based on analysis'\n }\n\n // Security-sensitive packages always need review for major updates\n if (SECURITY_SENSITIVE_PACKAGES.has(pkg.name) && pkg.updateType === 'major') {\n action = 'review'\n reason = 'Security-sensitive package - major update requires careful review'\n }\n\n return {\n package: pkg.name,\n currentVersion: pkg.currentVersion,\n targetVersion: pkg.targetVersion,\n action,\n reason,\n riskLevel,\n breakingChanges,\n securityFixes,\n estimatedEffort: this.estimateEffort(pkg, breakingChanges.length),\n }\n }\n\n /**\n * Assess risk level based on update type and package characteristics\n */\n private assessRiskLevel(pkg: PackageUpdateInfo): RiskLevel {\n // Pre-release versions are high risk\n if (pkg.targetVersion.includes('-')) {\n return 'high'\n }\n\n // Check version jump magnitude\n const current = semver.parse(pkg.currentVersion.replace(/^[\\^~]/, ''))\n const target = semver.parse(pkg.targetVersion.replace(/^[\\^~]/, ''))\n\n if (!current || !target) {\n return 'medium'\n }\n\n // Multiple major version jumps are critical\n if (target.major - current.major > 1) {\n return 'critical'\n }\n\n // Single major version jump is high risk\n if (pkg.updateType === 'major') {\n return 'high'\n }\n\n // Large minor version jumps are medium risk\n if (pkg.updateType === 'minor' && target.minor - current.minor > 5) {\n return 'medium'\n }\n\n // Patches and small updates are low risk\n if (pkg.updateType === 'patch') {\n return 'low'\n }\n\n return 'low'\n }\n\n /**\n * Detect known breaking changes for popular packages\n */\n private detectBreakingChanges(pkg: PackageUpdateInfo): string[] {\n const changes: string[] = []\n\n // Check for known breaking patterns\n const packageBase = pkg.name.split('/').pop() || pkg.name\n const knownChanges = BREAKING_PATTERNS[packageBase.toLowerCase()]\n\n if (knownChanges && pkg.updateType === 'major') {\n changes.push(...knownChanges)\n }\n\n // Generic breaking change warnings for major updates\n if (pkg.updateType === 'major' && changes.length === 0) {\n changes.push(`Major version update from ${pkg.currentVersion} to ${pkg.targetVersion}`)\n }\n\n return changes\n }\n\n /**\n * Detect security relevance of the package\n */\n private detectSecurityRelevance(pkg: PackageUpdateInfo): string[] {\n const fixes: string[] = []\n\n if (SECURITY_SENSITIVE_PACKAGES.has(pkg.name)) {\n fixes.push('Security-sensitive package - review changelog for security fixes')\n }\n\n // Check for common security package patterns\n if (pkg.name.includes('auth') || pkg.name.includes('security') || pkg.name.includes('crypto')) {\n fixes.push('Package may contain security-related changes')\n }\n\n return fixes\n }\n\n /**\n * Estimate migration effort\n */\n private estimateEffort(\n pkg: PackageUpdateInfo,\n breakingChangesCount: number\n ): 'low' | 'medium' | 'high' {\n if (pkg.updateType === 'patch') {\n return 'low'\n }\n\n if (pkg.updateType === 'major' && breakingChangesCount > 2) {\n return 'high'\n }\n\n if (pkg.updateType === 'major') {\n return 'medium'\n }\n\n return 'low'\n }\n\n /**\n * Generate summary message\n */\n private generateSummary(recommendations: Recommendation[], highRiskCount: number): string {\n const updateCount = recommendations.filter((r) => r.action === 'update').length\n const reviewCount = recommendations.filter((r) => r.action === 'review').length\n const skipCount = recommendations.filter((r) => r.action === 'skip').length\n\n const parts: string[] = []\n\n if (updateCount > 0) {\n parts.push(`${updateCount} package(s) ready to update`)\n }\n if (reviewCount > 0) {\n parts.push(`${reviewCount} package(s) need review`)\n }\n if (skipCount > 0) {\n parts.push(`${skipCount} package(s) recommended to skip`)\n }\n if (highRiskCount > 0) {\n parts.push(`${highRiskCount} high-risk update(s) detected`)\n }\n\n return parts.join('. ') || 'No updates to analyze'\n }\n}\n","/**\n * Base AI Provider\n *\n * Abstract base class for all AI providers.\n * Provides common functionality for executing CLI commands and parsing responses.\n */\n\nimport { exec as execCallback } from 'node:child_process'\nimport { promisify } from 'node:util'\n\nimport type {\n AIProvider,\n AIProviderConfig,\n AIProviderInfo,\n AnalysisContext,\n AnalysisResult,\n AnalysisType,\n Recommendation,\n RiskLevel,\n} from '../../../domain/interfaces/aiProvider.js'\n\nconst exec = promisify(execCallback)\n\n/**\n * Base configuration for providers\n */\nexport interface BaseProviderOptions {\n config?: AIProviderConfig\n timeout?: number\n maxRetries?: number\n}\n\n/**\n * Abstract base class for AI providers\n */\nexport abstract class BaseAIProvider implements AIProvider {\n abstract readonly name: string\n abstract readonly priority: number\n abstract readonly capabilities: AnalysisType[]\n\n protected readonly config: AIProviderConfig\n protected readonly timeout: number\n protected readonly maxRetries: number\n\n constructor(options: BaseProviderOptions = {}) {\n this.config = options.config ?? { enabled: true }\n this.timeout = options.timeout ?? 3000000 // 300 seconds default\n this.maxRetries = options.maxRetries ?? 2\n }\n\n /**\n * Check if the provider is available\n */\n abstract isAvailable(): Promise<boolean>\n\n /**\n * Get provider information\n */\n abstract getInfo(): Promise<AIProviderInfo>\n\n /**\n * Perform analysis\n */\n abstract analyze(context: AnalysisContext): Promise<AnalysisResult>\n\n /**\n * Execute a CLI command with timeout and retry\n */\n protected async executeCommand(\n command: string,\n args: string[],\n _input?: string\n ): Promise<{ stdout: string; stderr: string }> {\n const fullCommand = `${command} ${args.map((a) => `\"${a.replace(/\"/g, '\\\\\"')}\"`).join(' ')}`\n\n let lastError: Error | null = null\n\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\n try {\n const result = await exec(fullCommand, {\n timeout: this.timeout,\n maxBuffer: 10 * 1024 * 1024, // 10MB buffer\n env: { ...process.env, NO_COLOR: '1' },\n })\n\n return result\n } catch (error) {\n lastError = error as Error\n\n if (attempt < this.maxRetries) {\n // Exponential backoff\n await this.sleep(1000 * 2 ** (attempt - 1))\n }\n }\n }\n\n throw lastError ?? new Error('Command execution failed')\n }\n\n /**\n * Format security vulnerability data for inclusion in prompt\n */\n protected formatSecurityData(context: AnalysisContext): string {\n if (!context.securityData || context.securityData.size === 0) {\n return ''\n }\n\n const lines: string[] = []\n lines.push('\\n=== REAL-TIME SECURITY VULNERABILITY DATA (from OSV API) ===')\n lines.push('IMPORTANT: This is live data from the Open Source Vulnerabilities database.')\n lines.push('Use this information to accurately assess security risks.\\n')\n\n for (const pkg of context.packages) {\n const key = `${pkg.name}@${pkg.targetVersion}`\n const securityInfo = context.securityData.get(key)\n\n if (securityInfo && securityInfo.totalVulnerabilities > 0) {\n lines.push(\n `🚨 ${pkg.name}@${pkg.targetVersion}: ${securityInfo.totalVulnerabilities} VULNERABILITIES FOUND`\n )\n\n for (const vuln of securityInfo.vulnerabilities) {\n const cveIds = vuln.aliases.filter((a) => a.startsWith('CVE-')).join(', ') || vuln.id\n const scoreStr = vuln.cvssScore ? ` (CVSS: ${vuln.cvssScore})` : ''\n lines.push(` - [${vuln.severity}]${scoreStr} ${cveIds}: ${vuln.summary}`)\n if (vuln.fixedVersions.length > 0) {\n lines.push(` Fixed in: ${vuln.fixedVersions.join(', ')}`)\n }\n }\n\n if (securityInfo.hasCriticalVulnerabilities) {\n lines.push(` ⛔ CRITICAL: DO NOT recommend updating to this version!`)\n } else if (securityInfo.hasHighVulnerabilities) {\n lines.push(` ⚠️ HIGH RISK: Consider alternative versions.`)\n }\n\n // Include verified safe version recommendation if available\n if (securityInfo.safeVersion) {\n const sv = securityInfo.safeVersion\n const versionNote = sv.sameMajor\n ? sv.sameMinor\n ? '(same major and minor version)'\n : '(same major version)'\n : '(different major version - may require migration)'\n\n // Show skipped versions and their vulnerabilities\n if (sv.skippedVersions && sv.skippedVersions.length > 0) {\n lines.push('')\n lines.push(` ❌ SKIPPED VERSIONS (still have vulnerabilities):`)\n for (const skipped of sv.skippedVersions) {\n lines.push(` - ${pkg.name}@${skipped.version}:`)\n for (const vuln of skipped.vulnerabilities) {\n lines.push(` • [${vuln.severity}] ${vuln.id}: ${vuln.summary}`)\n }\n }\n }\n\n lines.push('')\n lines.push(` ✅ VERIFIED SAFE VERSION: ${pkg.name}@${sv.version} ${versionNote}`)\n lines.push(\n ` This version has been verified to have NO critical or high severity vulnerabilities.`\n )\n lines.push(\n ` (Checked ${sv.versionsChecked} version(s) to find this safe alternative)`\n )\n lines.push(` RECOMMENDATION: Update to ${pkg.name}@${sv.version} instead.`)\n }\n\n lines.push('')\n } else {\n lines.push(`✅ ${pkg.name}@${pkg.targetVersion}: No known vulnerabilities`)\n }\n }\n\n lines.push('=== END SECURITY DATA ===\\n')\n return lines.join('\\n')\n }\n\n /**\n * Build the analysis prompt\n */\n protected buildPrompt(context: AnalysisContext): string {\n const { packages, workspaceInfo, analysisType, options: _options } = context\n\n const packageList = packages\n .map(\n (p) =>\n `- ${p.name}: ${p.currentVersion} -> ${p.targetVersion} (${p.updateType}${p.catalogName ? `, catalog: ${p.catalogName}` : ''})`\n )\n .join('\\n')\n\n // Include security vulnerability data if available\n const securityDataSection = this.formatSecurityData(context)\n\n const prompts: Record<AnalysisType, string> = {\n impact: `Analyze the impact of updating these packages in a pnpm workspace:\n\nWorkspace: ${workspaceInfo.name}\nPackages: ${workspaceInfo.packageCount}\nCatalogs: ${workspaceInfo.catalogCount}\n\nUpdates to analyze:\n${packageList}\n${securityDataSection}\nFor each package, provide:\n1. Risk level (low/medium/high/critical) - MUST be \"critical\" if there are CRITICAL vulnerabilities\n2. Potential breaking changes\n3. Recommended action (update/skip/review/defer) - MUST be \"skip\" for versions with CRITICAL vulnerabilities\n4. Reason for recommendation\n5. Estimated migration effort\n\nIMPORTANT RULES:\n1. If security data shows CRITICAL vulnerabilities, you MUST:\n - Set riskLevel to \"critical\"\n - Set action to \"skip\"\n - Include the CVE IDs in the reason\n\n2. If NO security data is provided above OR security data shows \"No known vulnerabilities\":\n - DO NOT invent or fabricate CVE IDs, GHSA IDs, or vulnerability information\n - Set securityFixes to empty array []\n - Base your analysis ONLY on breaking changes and compatibility, NOT security\n - Be honest: say \"No known security vulnerabilities\" in the reason if applicable\n\nRespond in JSON format with this structure:\n{\n \"summary\": \"Brief overall summary\",\n \"recommendations\": [\n {\n \"package\": \"package-name\",\n \"currentVersion\": \"x.y.z\",\n \"targetVersion\": \"a.b.c\",\n \"action\": \"update|skip|review|defer\",\n \"reason\": \"explanation\",\n \"riskLevel\": \"low|medium|high|critical\",\n \"breakingChanges\": [\"change1\", \"change2\"],\n \"securityFixes\": [\"CVE-xxxx-xxxxx\"],\n \"estimatedEffort\": \"low|medium|high\"\n }\n ],\n \"warnings\": [\"warning1\", \"warning2\"]\n}`,\n\n security: `Analyze the security implications of these package updates:\n\nWorkspace: ${workspaceInfo.name}\n\nUpdates to analyze:\n${packageList}\n${securityDataSection}\nFor each package:\n1. Check if the update fixes known vulnerabilities (use the security data above)\n2. Assess if the new version introduces security risks\n3. Evaluate the package maintainer reputation\n4. Check for suspicious changes\n\nCRITICAL: Use the real-time security data provided above. If a version has CRITICAL vulnerabilities,\nyou MUST recommend \"skip\" action with riskLevel \"critical\" and list all CVE IDs.\n\nRespond in JSON format with security-focused recommendations.`,\n\n compatibility: `Analyze the compatibility of these package updates:\n\nWorkspace: ${workspaceInfo.name}\nPackages in workspace: ${workspaceInfo.packageCount}\nCatalogs: ${workspaceInfo.catalogCount}\n\nUpdates to analyze:\n${packageList}\n${securityDataSection}\nFor each package:\n1. Check peer dependency compatibility\n2. Identify potential conflicts with other packages\n3. Assess API compatibility\n4. Check for deprecated features\n5. Consider security implications from the data above\n\nRespond in JSON format with compatibility-focused recommendations.`,\n\n recommend: `Provide smart recommendations for updating these packages:\n\nWorkspace: ${workspaceInfo.name}\nContext: pnpm workspace with catalog-based dependency management\n\nUpdates available:\n${packageList}\n${securityDataSection}\nConsider:\n1. SECURITY FIRST: Never recommend versions with CRITICAL vulnerabilities\n2. Update priority based on security, features, and stability\n3. Grouping related packages for atomic updates\n4. Best practices for the specific package ecosystem\n5. Risk vs. benefit analysis\n\nCRITICAL: If security data shows vulnerabilities:\n- CRITICAL severity → action: \"skip\", riskLevel: \"critical\"\n- HIGH severity → action: \"review\", riskLevel: \"high\"\n- Include CVE IDs in the reason\n\nRespond in JSON format with prioritized recommendations.`,\n }\n\n return prompts[analysisType]\n }\n\n /**\n * Parse the AI response into structured recommendations\n */\n protected parseResponse(response: string, context: AnalysisContext): AnalysisResult {\n const startTime = Date.now()\n\n try {\n // Try to extract JSON from the response\n const jsonMatch = response.match(/\\{[\\s\\S]*\\}/)\n if (!jsonMatch) {\n return this.createFallbackResult(context, response)\n }\n\n const parsed = JSON.parse(jsonMatch[0])\n\n const recommendations: Recommendation[] = (parsed.recommendations || []).map((rec: any) => ({\n package: rec.package || rec.name,\n currentVersion: rec.currentVersion || '',\n targetVersion: rec.targetVersion || '',\n action: this.normalizeAction(rec.action),\n reason: rec.reason || '',\n riskLevel: this.normalizeRiskLevel(rec.riskLevel),\n breakingChanges: rec.breakingChanges || [],\n securityFixes: rec.securityFixes || [],\n estimatedEffort: rec.estimatedEffort || 'medium',\n }))\n\n return {\n provider: this.name,\n analysisType: context.analysisType,\n recommendations,\n summary: parsed.summary || 'Analysis completed',\n confidence: this.calculateConfidence(recommendations, context.packages.length),\n details: parsed.details,\n warnings: parsed.warnings || [],\n timestamp: new Date(),\n processingTimeMs: Date.now() - startTime,\n }\n } catch (error) {\n return this.createFallbackResult(context, response)\n }\n }\n\n /**\n * Create a fallback result when parsing fails\n */\n protected createFallbackResult(context: AnalysisContext, rawResponse: string): AnalysisResult {\n return {\n provider: this.name,\n analysisType: context.analysisType,\n recommendations: context.packages.map((pkg) => ({\n package: pkg.name,\n currentVersion: pkg.currentVersion,\n targetVersion: pkg.targetVersion,\n action: 'review' as const,\n reason: 'Unable to parse AI response, manual review recommended',\n riskLevel: 'medium' as const,\n })),\n summary: 'Analysis completed with parsing issues',\n confidence: 0.3,\n details: rawResponse,\n warnings: ['AI response could not be fully parsed'],\n timestamp: new Date(),\n }\n }\n\n /**\n * Normalize action string\n */\n private normalizeAction(action: string): Recommendation['action'] {\n const normalized = action?.toLowerCase()\n if (['update', 'skip', 'review', 'defer'].includes(normalized)) {\n return normalized as Recommendation['action']\n }\n return 'review'\n }\n\n /**\n * Normalize risk level string\n */\n private normalizeRiskLevel(level: string): RiskLevel {\n const normalized = level?.toLowerCase()\n if (['low', 'medium', 'high', 'critical'].includes(normalized)) {\n return normalized as RiskLevel\n }\n return 'medium'\n }\n\n /**\n * Calculate confidence score based on response quality\n */\n private calculateConfidence(recommendations: Recommendation[], expectedCount: number): number {\n if (recommendations.length === 0) return 0\n\n let score = 0\n\n // Coverage: how many packages have recommendations\n score += (recommendations.length / expectedCount) * 0.3\n\n // Completeness: how complete each recommendation is\n const completenessSum = recommendations.reduce((sum, rec) => {\n let complete = 0\n if (rec.package) complete += 0.2\n if (rec.action) complete += 0.2\n if (rec.reason && rec.reason.length > 10) complete += 0.3\n if (rec.riskLevel) complete += 0.15\n if (rec.breakingChanges && rec.breakingChanges.length > 0) complete += 0.15\n return sum + complete\n }, 0)\n score += (completenessSum / recommendations.length) * 0.7\n\n return Math.min(score, 1)\n }\n\n /**\n * Sleep utility\n */\n protected sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n }\n}\n","/**\n * Claude AI Provider\n *\n * Implementation of AI provider using Claude CLI.\n * Supports all analysis types with high-quality reasoning.\n */\n\nimport { exec as execCallback, spawn } from 'node:child_process'\nimport { promisify } from 'node:util'\n\nimport type {\n AIProviderInfo,\n AnalysisContext,\n AnalysisResult,\n AnalysisType,\n} from '../../../domain/interfaces/aiProvider.js'\nimport { BaseAIProvider, type BaseProviderOptions } from './baseProvider.js'\n\nconst exec = promisify(execCallback)\n\n/**\n * Claude-specific configuration\n */\nexport interface ClaudeProviderOptions extends BaseProviderOptions {\n model?: string\n dangerouslySkipPermissions?: boolean\n}\n\n/**\n * Claude AI Provider\n */\nexport class ClaudeProvider extends BaseAIProvider {\n readonly name = 'claude'\n readonly priority = 100\n readonly capabilities: AnalysisType[] = ['impact', 'security', 'compatibility', 'recommend']\n\n private readonly model: string\n private readonly dangerouslySkipPermissions: boolean\n private cachedAvailability: boolean | null = null\n private cachedInfo: AIProviderInfo | null = null\n\n constructor(options: ClaudeProviderOptions = {}) {\n super(options)\n this.model = options.model ?? 'claude-sonnet-4-20250514'\n this.dangerouslySkipPermissions = options.dangerouslySkipPermissions ?? true\n }\n\n /**\n * Check if Claude CLI is available\n */\n async isAvailable(): Promise<boolean> {\n if (this.cachedAvailability !== null) {\n return this.cachedAvailability\n }\n\n try {\n // Try to run claude --version\n await exec('claude --version', { timeout: 1500 })\n this.cachedAvailability = true\n return true\n } catch {\n try {\n // Fast PATH lookup (non-interactive, avoids hanging on shell rc files)\n const { stdout } = await exec('command -v claude 2>/dev/null', { timeout: 500 })\n const isAvailable = stdout.trim().length > 0\n this.cachedAvailability = isAvailable\n return isAvailable\n } catch {\n this.cachedAvailability = false\n return false\n }\n }\n }\n\n /**\n * Get Claude provider information\n */\n async getInfo(): Promise<AIProviderInfo> {\n if (this.cachedInfo) {\n return this.cachedInfo\n }\n\n const available = await this.isAvailable()\n let version: string | undefined\n let path: string | undefined\n\n if (available) {\n try {\n const { stdout } = await exec('claude --version', { timeout: 1500 })\n version = stdout.trim()\n } catch {\n // Version not available\n }\n\n try {\n const { stdout } = await exec('command -v claude', { timeout: 500 })\n path = stdout.trim()\n } catch {\n path = 'alias'\n }\n }\n\n const info: AIProviderInfo = {\n name: this.name,\n version,\n path,\n available,\n priority: available ? this.priority : 0,\n capabilities: this.capabilities,\n }\n this.cachedInfo = info\n\n return info\n }\n\n /**\n * Perform analysis using Claude CLI\n */\n async analyze(context: AnalysisContext): Promise<AnalysisResult> {\n const startTime = Date.now()\n\n // Check availability first\n if (!(await this.isAvailable())) {\n throw new Error('Claude CLI is not available')\n }\n\n // Build the prompt\n const prompt = this.buildPrompt(context)\n\n // Build the command arguments (options first, then prompt as positional arg)\n const args: string[] = []\n\n if (this.dangerouslySkipPermissions) {\n args.push('--dangerously-skip-permissions')\n }\n\n // Add model selection if specified\n if (this.model) {\n args.push('--model', this.model)\n }\n\n // Add output format and print mode\n args.push('--output-format', 'text', '-p')\n\n // Prompt goes last as positional argument\n args.push(prompt)\n\n // Execute Claude CLI\n try {\n const { stdout, stderr } = await this.executeClaudeCommand(args)\n\n // Parse the response\n const result = this.parseResponse(stdout || stderr, context)\n result.processingTimeMs = Date.now() - startTime\n\n return result\n } catch (error) {\n // Return a degraded result on error\n return {\n provider: this.name,\n analysisType: context.analysisType,\n recommendations: context.packages.map((pkg) => ({\n package: pkg.name,\n currentVersion: pkg.currentVersion,\n targetVersion: pkg.targetVersion,\n action: 'review' as const,\n reason: `Claude analysis failed: ${(error as Error).message}`,\n riskLevel: 'medium' as const,\n })),\n summary: 'Analysis failed, manual review recommended',\n confidence: 0.1,\n warnings: [`Claude CLI error: ${(error as Error).message}`],\n timestamp: new Date(),\n processingTimeMs: Date.now() - startTime,\n }\n }\n }\n\n /**\n * Execute Claude CLI command using spawn to avoid shell escaping issues\n */\n private async executeClaudeCommand(args: string[]): Promise<{ stdout: string; stderr: string }> {\n let lastError: Error | null = null\n\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\n try {\n const result = await this.spawnClaudeProcess(args)\n return result\n } catch (error) {\n lastError = error as Error\n\n // Check if it's a timeout error\n if ((error as Error).message.includes('timed out')) {\n throw error\n }\n\n // Retry on other errors\n if (attempt < this.maxRetries) {\n await this.sleep(1000 * 2 ** (attempt - 1))\n }\n }\n }\n\n throw lastError ?? new Error('Claude CLI execution failed')\n }\n\n /**\n * Spawn Claude process with proper argument handling\n */\n private spawnClaudeProcess(args: string[]): Promise<{ stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n const child = spawn('claude', args, {\n env: {\n ...process.env,\n NO_COLOR: '1',\n FORCE_COLOR: '0',\n },\n stdio: ['pipe', 'pipe', 'pipe'],\n })\n\n // Close stdin immediately - Claude CLI waits for stdin to close before processing\n child.stdin?.end()\n\n let stdout = ''\n let stderr = ''\n let timedOut = false\n\n const timeoutId = setTimeout(() => {\n timedOut = true\n child.kill('SIGTERM')\n reject(new Error(`Claude CLI timed out after ${this.timeout}ms`))\n }, this.timeout)\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString()\n })\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString()\n })\n\n child.on('close', (code) => {\n clearTimeout(timeoutId)\n if (timedOut) return\n\n if (code === 0) {\n resolve({ stdout, stderr })\n } else {\n reject(new Error(`Claude CLI exited with code ${code}: ${stderr || stdout}`))\n }\n })\n\n child.on('error', (error) => {\n clearTimeout(timeoutId)\n if (!timedOut) {\n reject(error)\n }\n })\n })\n }\n\n /**\n * Build a more structured prompt for Claude\n */\n protected override buildPrompt(context: AnalysisContext): string {\n const basePrompt = super.buildPrompt(context)\n\n // Add Claude-specific instructions\n return `${basePrompt}\n\nImportant:\n- Be concise and focus on actionable insights\n- Provide specific version numbers and package names\n- Consider the pnpm catalog context for shared dependency management\n- Prioritize breaking changes and security implications\n- If unsure, recommend \"review\" action with explanation`\n }\n}\n","/**\n * Codex AI Provider\n *\n * Implementation of AI provider using OpenAI Codex CLI.\n * Optimized for code analysis and technical recommendations.\n */\n\nimport { exec as execCallback } from 'node:child_process'\nimport { promisify } from 'node:util'\n\nimport type {\n AIProviderInfo,\n AnalysisContext,\n AnalysisResult,\n AnalysisType,\n} from '../../../domain/interfaces/aiProvider.js'\nimport { BaseAIProvider, type BaseProviderOptions } from './baseProvider.js'\n\nconst exec = promisify(execCallback)\n\n/**\n * Codex-specific configuration\n */\nexport interface CodexProviderOptions extends BaseProviderOptions {\n model?: string\n maxTokens?: number\n approvalMode?: 'full-auto' | 'suggest' | 'auto-edit'\n}\n\n/**\n * Codex AI Provider\n */\nexport class CodexProvider extends BaseAIProvider {\n readonly name = 'codex'\n readonly priority = 60\n readonly capabilities: AnalysisType[] = ['impact', 'security', 'compatibility', 'recommend']\n\n private readonly model: string\n private readonly maxTokens: number\n private readonly approvalMode: string\n private cachedAvailability: boolean | null = null\n private cachedInfo: AIProviderInfo | null = null\n\n constructor(options: CodexProviderOptions = {}) {\n super(options)\n this.model = options.model ?? 'o3'\n this.maxTokens = options.maxTokens ?? 4096\n this.approvalMode = options.approvalMode ?? 'full-auto'\n }\n\n /**\n * Check if Codex CLI is available\n */\n async isAvailable(): Promise<boolean> {\n if (this.cachedAvailability !== null) {\n return this.cachedAvailability\n }\n\n try {\n // Try to run codex --version\n await exec('codex --version', { timeout: 1500 })\n this.cachedAvailability = true\n return true\n } catch {\n try {\n // Fast PATH lookup (non-interactive, avoids hanging on shell rc files)\n const { stdout } = await exec('command -v codex 2>/dev/null', { timeout: 500 })\n const isAvailable = stdout.trim().length > 0\n this.cachedAvailability = isAvailable\n return isAvailable\n } catch {\n // Check for alternative command names (openai-codex, etc.)\n try {\n const { stdout } = await exec('command -v openai-codex 2>/dev/null', { timeout: 500 })\n if (!stdout.trim()) {\n throw new Error('openai-codex not found')\n }\n this.cachedAvailability = true\n return true\n } catch {\n this.cachedAvailability = false\n return false\n }\n }\n }\n }\n\n /**\n * Get Codex provider information\n */\n async getInfo(): Promise<AIProviderInfo> {\n if (this.cachedInfo) {\n return this.cachedInfo\n }\n\n const available = await this.isAvailable()\n let version: string | undefined\n let path: string | undefined\n\n if (available) {\n try {\n const { stdout } = await exec('codex --version', { timeout: 1500 })\n version = stdout.trim()\n } catch {\n // Version not available\n }\n\n try {\n const { stdout } = await exec('command -v codex', { timeout: 500 })\n path = stdout.trim()\n } catch {\n path = 'alias'\n }\n }\n\n const info: AIProviderInfo = {\n name: this.name,\n version,\n path,\n available,\n priority: available ? this.priority : 0,\n capabilities: this.capabilities,\n }\n this.cachedInfo = info\n\n return info\n }\n\n /**\n * Perform analysis using Codex CLI\n */\n async analyze(context: AnalysisContext): Promise<AnalysisResult> {\n const startTime = Date.now()\n\n // Check availability first\n if (!(await this.isAvailable())) {\n throw new Error('Codex CLI is not available')\n }\n\n // Build the prompt\n const prompt = this.buildPrompt(context)\n\n // Execute Codex CLI\n try {\n const { stdout, stderr } = await this.executeCodexCommand(prompt)\n\n // Parse the response\n const result = this.parseResponse(stdout || stderr, context)\n result.processingTimeMs = Date.now() - startTime\n\n return result\n } catch (error) {\n // Return a degraded result on error\n return {\n provider: this.name,\n analysisType: context.analysisType,\n recommendations: context.packages.map((pkg) => ({\n package: pkg.name,\n currentVersion: pkg.currentVersion,\n targetVersion: pkg.targetVersion,\n action: 'review' as const,\n reason: `Codex analysis failed: ${(error as Error).message}`,\n riskLevel: 'medium' as const,\n })),\n summary: 'Analysis failed, manual review recommended',\n confidence: 0.1,\n warnings: [`Codex CLI error: ${(error as Error).message}`],\n timestamp: new Date(),\n processingTimeMs: Date.now() - startTime,\n }\n }\n }\n\n /**\n * Execute Codex CLI command\n */\n private async executeCodexCommand(prompt: string): Promise<{ stdout: string; stderr: string }> {\n // Escape the prompt for shell\n const escapedPrompt = prompt.replace(/'/g, \"'\\\\''\")\n\n // Build command with appropriate flags\n // Codex CLI uses: codex \"prompt\" --approval-mode full-auto\n const args: string[] = []\n\n args.push(`'${escapedPrompt}'`)\n args.push('--approval-mode', this.approvalMode)\n args.push('--quiet')\n\n // Add model selection\n if (this.model) {\n args.push('--model', this.model)\n }\n\n // Add max tokens configuration\n if (this.maxTokens) {\n args.push('--max-tokens', String(this.maxTokens))\n }\n\n const command = `codex ${args.join(' ')}`\n\n let lastError: Error | null = null\n\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\n try {\n const result = await exec(command, {\n timeout: this.timeout,\n maxBuffer: 10 * 1024 * 1024, // 10MB buffer\n env: {\n ...process.env,\n NO_COLOR: '1',\n FORCE_COLOR: '0',\n },\n })\n\n return result\n } catch (error) {\n lastError = error as Error\n\n // Check if it's a timeout error\n if ((error as any).killed || (error as Error).message.includes('TIMEOUT')) {\n throw new Error(`Codex CLI timed out after ${this.timeout}ms`)\n }\n\n // Retry on other errors\n if (attempt < this.maxRetries) {\n await this.sleep(1000 * 2 ** (attempt - 1))\n }\n }\n }\n\n throw lastError ?? new Error('Codex CLI execution failed')\n }\n\n /**\n * Build a more structured prompt for Codex\n */\n protected override buildPrompt(context: AnalysisContext): string {\n const basePrompt = super.buildPrompt(context)\n\n // Add Codex-specific instructions optimized for code analysis\n return `${basePrompt}\n\nCode Analysis Guidelines:\n- Focus on code-level impact and breaking changes\n- Analyze TypeScript/JavaScript compatibility thoroughly\n- Check for API signature changes between versions\n- Identify deprecated APIs and migration paths\n- Consider build tool and bundler compatibility\n- Provide specific code migration examples when possible\n- Return only valid JSON response`\n }\n}\n","/**\n * Gemini AI Provider\n *\n * Implementation of AI provider using Gemini CLI.\n * Supports all analysis types with Google's AI capabilities.\n */\n\nimport { exec as execCallback } from 'node:child_process'\nimport { promisify } from 'node:util'\n\nimport type {\n AIProviderInfo,\n AnalysisContext,\n AnalysisResult,\n AnalysisType,\n} from '../../../domain/interfaces/aiProvider.js'\nimport { BaseAIProvider, type BaseProviderOptions } from './baseProvider.js'\n\nconst exec = promisify(execCallback)\n\n/**\n * Gemini-specific configuration\n */\nexport interface GeminiProviderOptions extends BaseProviderOptions {\n model?: string\n maxTokens?: number\n sandbox?: boolean\n}\n\n/**\n * Gemini AI Provider\n */\nexport class GeminiProvider extends BaseAIProvider {\n readonly name = 'gemini'\n readonly priority = 80\n readonly capabilities: AnalysisType[] = ['impact', 'security', 'compatibility', 'recommend']\n\n private readonly model: string\n private readonly maxTokens: number\n private readonly sandbox: boolean\n private cachedAvailability: boolean | null = null\n private cachedInfo: AIProviderInfo | null = null\n\n constructor(options: GeminiProviderOptions = {}) {\n super(options)\n this.model = options.model ?? 'gemini-2.5-pro'\n this.maxTokens = options.maxTokens ?? 4096\n this.sandbox = options.sandbox ?? true\n }\n\n /**\n * Check if Gemini CLI is available\n */\n async isAvailable(): Promise<boolean> {\n if (this.cachedAvailability !== null) {\n return this.cachedAvailability\n }\n\n try {\n // Try to run gemini --version\n await exec('gemini --version', { timeout: 1500 })\n this.cachedAvailability = true\n return true\n } catch {\n try {\n // Fast PATH lookup (non-interactive, avoids hanging on shell rc files)\n const { stdout } = await exec('command -v gemini 2>/dev/null', { timeout: 500 })\n const isAvailable = stdout.trim().length > 0\n this.cachedAvailability = isAvailable\n return isAvailable\n } catch {\n // Check for alternative command names\n try {\n const { stdout } = await exec('command -v gemini-cli 2>/dev/null', { timeout: 500 })\n if (!stdout.trim()) {\n throw new Error('gemini-cli not found')\n }\n this.cachedAvailability = true\n return true\n } catch {\n this.cachedAvailability = false\n return false\n }\n }\n }\n }\n\n /**\n * Get Gemini provider information\n */\n async getInfo(): Promise<AIProviderInfo> {\n if (this.cachedInfo) {\n return this.cachedInfo\n }\n\n const available = await this.isAvailable()\n let version: string | undefined\n let path: string | undefined\n\n if (available) {\n try {\n const { stdout } = await exec('gemini --version', { timeout: 1500 })\n version = stdout.trim()\n } catch {\n // Version not available\n }\n\n try {\n const { stdout } = await exec('command -v gemini', { timeout: 500 })\n path = stdout.trim()\n } catch {\n path = 'alias'\n }\n }\n\n const info: AIProviderInfo = {\n name: this.name,\n version,\n path,\n available,\n priority: available ? this.priority : 0,\n capabilities: this.capabilities,\n }\n this.cachedInfo = info\n\n return info\n }\n\n /**\n * Perform analysis using Gemini CLI\n */\n async analyze(context: AnalysisContext): Promise<AnalysisResult> {\n const startTime = Date.now()\n\n // Check availability first\n if (!(await this.isAvailable())) {\n throw new Error('Gemini CLI is not available')\n }\n\n // Build the prompt\n const prompt = this.buildPrompt(context)\n\n // Execute Gemini CLI\n try {\n const { stdout, stderr } = await this.executeGeminiCommand(prompt)\n\n // Parse the response\n const result = this.parseResponse(stdout || stderr, context)\n result.processingTimeMs = Date.now() - startTime\n\n return result\n } catch (error) {\n // Return a degraded result on error\n return {\n provider: this.name,\n analysisType: context.analysisType,\n recommendations: context.packages.map((pkg) => ({\n package: pkg.name,\n currentVersion: pkg.currentVersion,\n targetVersion: pkg.targetVersion,\n action: 'review' as const,\n reason: `Gemini analysis failed: ${(error as Error).message}`,\n riskLevel: 'medium' as const,\n })),\n summary: 'Analysis failed, manual review recommended',\n confidence: 0.1,\n warnings: [`Gemini CLI error: ${(error as Error).message}`],\n timestamp: new Date(),\n processingTimeMs: Date.now() - startTime,\n }\n }\n }\n\n /**\n * Execute Gemini CLI command\n */\n private async executeGeminiCommand(prompt: string): Promise<{ stdout: string; stderr: string }> {\n // Escape the prompt for shell\n const escapedPrompt = prompt.replace(/'/g, \"'\\\\''\")\n\n // Build command with appropriate flags\n // Gemini CLI typically uses: gemini -p \"prompt\" or gemini --prompt \"prompt\"\n const args: string[] = []\n\n if (this.sandbox) {\n args.push('--sandbox')\n }\n\n // Add model selection\n if (this.model) {\n args.push('--model', this.model)\n }\n\n // Add max tokens configuration\n if (this.maxTokens) {\n args.push('--max-output-tokens', String(this.maxTokens))\n }\n\n // Use -p flag for prompt\n const command = `gemini ${args.join(' ')} -p '${escapedPrompt}'`\n\n let lastError: Error | null = null\n\n for (let attempt = 1; attempt <= this.maxRetries; attempt++) {\n try {\n const result = await exec(command, {\n timeout: this.timeout,\n maxBuffer: 10 * 1024 * 1024, // 10MB buffer\n env: {\n ...process.env,\n NO_COLOR: '1',\n FORCE_COLOR: '0',\n },\n })\n\n return result\n } catch (error) {\n lastError = error as Error\n\n // Check if it's a timeout error\n if ((error as any).killed || (error as Error).message.includes('TIMEOUT')) {\n throw new Error(`Gemini CLI timed out after ${this.timeout}ms`)\n }\n\n // Retry on other errors\n if (attempt < this.maxRetries) {\n await this.sleep(1000 * 2 ** (attempt - 1))\n }\n }\n }\n\n throw lastError ?? new Error('Gemini CLI execution failed')\n }\n\n /**\n * Build a more structured prompt for Gemini\n */\n protected override buildPrompt(context: AnalysisContext): string {\n const basePrompt = super.buildPrompt(context)\n\n // Add Gemini-specific instructions\n return `${basePrompt}\n\nInstructions:\n- Provide comprehensive analysis with clear reasoning\n- Focus on practical impact and migration guidance\n- Consider the pnpm workspace catalog context\n- Be precise about version compatibility\n- Highlight any Google/GCP related package interactions if applicable\n- Return valid JSON format only`\n }\n}\n","/**\n * Security Advisory Service\n *\n * Provides real-time security vulnerability data from OSV (Open Source Vulnerabilities).\n * Uses the OSV API to query known vulnerabilities for npm packages.\n *\n * @see https://osv.dev/\n */\n\nexport interface VulnerabilityInfo {\n id: string\n aliases: string[] // CVE IDs, GHSA IDs, etc.\n summary: string\n details: string\n severity: 'CRITICAL' | 'HIGH' | 'MODERATE' | 'LOW' | 'UNKNOWN'\n cvssScore?: number\n affectedVersions: string\n fixedVersions: string[]\n references: string[]\n publishedAt?: string\n}\n\nexport interface SecurityAdvisoryReport {\n packageName: string\n version: string\n vulnerabilities: VulnerabilityInfo[]\n hasCriticalVulnerabilities: boolean\n hasHighVulnerabilities: boolean\n totalVulnerabilities: number\n queriedAt: Date\n source: 'osv' | 'npm-audit' | 'github-advisory'\n}\n\ninterface OSVQueryResponse {\n vulns?: OSVVulnerability[]\n}\n\ninterface OSVVulnerability {\n id: string\n aliases?: string[]\n summary?: string\n details?: string\n severity?: Array<{\n type: string\n score: string\n }>\n affected?: Array<{\n ranges?: Array<{\n type: string\n events: Array<{ introduced?: string; fixed?: string }>\n }>\n versions?: string[]\n }>\n references?: Array<{\n type: string\n url: string\n }>\n published?: string\n database_specific?: {\n severity?: string\n cvss?: {\n score?: number\n }\n }\n}\n\nexport class SecurityAdvisoryService {\n private readonly cache: Map<string, { data: SecurityAdvisoryReport; timestamp: number }> =\n new Map()\n private readonly cacheTimeout: number\n private readonly timeout: number\n private readonly checkEcosystem: boolean\n\n constructor(options: { cacheMinutes?: number; timeout?: number; checkEcosystem?: boolean } = {}) {\n this.cacheTimeout = (options.cacheMinutes ?? 30) * 60 * 1000 // Default 30 minutes\n this.timeout = options.timeout ?? 10000 // Default 10 seconds\n this.checkEcosystem = options.checkEcosystem ?? true // Default to checking ecosystem packages\n }\n\n /**\n * Discover related packages by:\n * 1. Inspecting the package's actual dependencies\n * 2. Finding sibling packages in the same monorepo (via repository URL)\n */\n private async discoverEcosystemPackages(packageName: string, version: string): Promise<string[]> {\n const relatedPackages: string[] = []\n\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 8000)\n\n // Fetch the package's package.json from npm registry\n const response = await fetch(\n `https://registry.npmjs.org/${encodeURIComponent(packageName)}/${encodeURIComponent(version)}`,\n { signal: controller.signal }\n )\n\n clearTimeout(timeoutId)\n\n if (response.ok) {\n const data = (await response.json()) as {\n dependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n optionalDependencies?: Record<string, string>\n repository?: { url?: string; directory?: string } | string\n }\n\n // 1. Collect all dependencies\n const allDeps = new Set<string>()\n\n if (data.dependencies) {\n for (const dep of Object.keys(data.dependencies)) {\n allDeps.add(dep)\n }\n }\n\n if (data.peerDependencies) {\n for (const dep of Object.keys(data.peerDependencies)) {\n allDeps.add(dep)\n }\n }\n\n if (data.optionalDependencies) {\n for (const dep of Object.keys(data.optionalDependencies)) {\n allDeps.add(dep)\n }\n }\n\n for (const dep of allDeps) {\n if (!relatedPackages.includes(dep)) {\n relatedPackages.push(dep)\n }\n }\n\n // 2. If this is a monorepo package (has repository.directory), find sibling packages\n const repoUrl = typeof data.repository === 'string' ? data.repository : data.repository?.url\n const repoDir = typeof data.repository === 'object' ? data.repository?.directory : undefined\n\n if (repoUrl && repoDir) {\n // This is a monorepo package, try to find siblings\n const siblingPackages = await this.findMonorepoSiblings(packageName, repoUrl, version)\n for (const sibling of siblingPackages) {\n if (!relatedPackages.includes(sibling)) {\n relatedPackages.push(sibling)\n }\n }\n }\n }\n } catch {\n // Silently ignore failures - this is best-effort discovery\n }\n\n return relatedPackages\n }\n\n /**\n * Find sibling packages in the same monorepo by:\n * 1. Searching npm for packages with related names\n * 2. Verifying they share the same repository URL\n * 3. Confirming they have the same version\n */\n private async findMonorepoSiblings(\n packageName: string,\n repoUrl: string,\n version: string\n ): Promise<string[]> {\n const siblings: string[] = []\n const normalizedRepoUrl = this.normalizeRepoUrl(repoUrl)\n\n try {\n // Search for packages using multiple search strategies to find monorepo siblings\n // These patterns cover common monorepo package naming conventions\n const searchQueries = [\n `${packageName}-dom`, // e.g., react-dom\n `${packageName}-server`, // e.g., react-server\n `${packageName}-server-dom`, // e.g., react-server-dom-webpack\n `${packageName}-native`, // e.g., react-native\n `${packageName}-test`, // e.g., react-test-renderer\n `${packageName}-reconciler`, // e.g., react-reconciler\n `${packageName}-refresh`, // e.g., react-refresh\n `${packageName}-devtools`, // e.g., react-devtools\n ]\n\n const foundPackages = new Set<string>()\n\n for (const query of searchQueries) {\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 5000)\n\n const response = await fetch(\n `https://registry.npmjs.org/-/v1/search?text=${encodeURIComponent(query)}&size=50`,\n { signal: controller.signal }\n )\n\n clearTimeout(timeoutId)\n\n if (response.ok) {\n const data = (await response.json()) as {\n objects?: Array<{ package: { name: string } }>\n }\n\n if (data.objects) {\n for (const obj of data.objects) {\n const pkgName = obj.package.name\n // Only consider packages that start with the main package name\n if (pkgName.startsWith(`${packageName}-`) && pkgName !== packageName) {\n foundPackages.add(pkgName)\n }\n }\n }\n }\n } catch {\n // Continue with next search query\n }\n }\n\n // Verify each found package:\n // 1. Has the same version\n // 2. Shares the same repository URL (confirms it's from the same monorepo)\n for (const pkgName of foundPackages) {\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), 5000)\n\n const response = await fetch(\n `https://registry.npmjs.org/${encodeURIComponent(pkgName)}/${encodeURIComponent(version)}`,\n { signal: controller.signal }\n )\n\n clearTimeout(timeoutId)\n\n if (response.ok) {\n const data = (await response.json()) as {\n repository?: { url?: string } | string\n }\n\n // Verify it's from the same repository\n const pkgRepoUrl =\n typeof data.repository === 'string' ? data.repository : data.repository?.url\n\n if (pkgRepoUrl && this.normalizeRepoUrl(pkgRepoUrl) === normalizedRepoUrl) {\n siblings.push(pkgName)\n }\n }\n } catch {\n // Skip packages we can't verify\n }\n }\n } catch {\n // Silently ignore failures\n }\n\n return siblings\n }\n\n /**\n * Normalize repository URL for comparison\n * e.g., \"git+https://github.com/facebook/react.git\" -> \"github.com/facebook/react\"\n */\n private normalizeRepoUrl(url: string): string {\n return url\n .replace(/^git\\+/, '')\n .replace(/\\.git$/, '')\n .replace(/^https?:\\/\\//, '')\n .replace(/^git:\\/\\//, '')\n .toLowerCase()\n }\n\n /**\n * Query vulnerabilities for a specific package version\n * Also checks ecosystem packages (e.g., react-server-dom-* for react) if enabled\n */\n async queryVulnerabilities(\n packageName: string,\n version: string\n ): Promise<SecurityAdvisoryReport> {\n const cacheKey = `${packageName}@${version}`\n\n // Check cache first\n const cached = this.cache.get(cacheKey)\n if (cached && Date.now() - cached.timestamp < this.cacheTimeout) {\n return cached.data\n }\n\n try {\n // Query main package\n const report = await this.queryOSV(packageName, version)\n\n // If ecosystem checking is enabled, also check related packages (dependencies)\n if (this.checkEcosystem) {\n const ecosystemPackages = await this.discoverEcosystemPackages(packageName, version)\n\n if (ecosystemPackages.length > 0) {\n // Query ecosystem packages in parallel\n const ecosystemReports = await Promise.all(\n ecosystemPackages.map(async (pkgName) => {\n try {\n return await this.queryOSV(pkgName, version)\n } catch {\n return null // Ignore individual ecosystem package failures\n }\n })\n )\n\n // Merge ecosystem vulnerabilities into main report\n for (const ecoReport of ecosystemReports) {\n if (ecoReport && ecoReport.vulnerabilities.length > 0) {\n for (const vuln of ecoReport.vulnerabilities) {\n // Add source package info to vulnerability\n const vulnWithSource = {\n ...vuln,\n summary: `[${ecoReport.packageName}] ${vuln.summary}`,\n }\n // Avoid duplicates\n if (!report.vulnerabilities.some((v) => v.id === vuln.id)) {\n report.vulnerabilities.push(vulnWithSource)\n }\n }\n }\n }\n\n // Re-sort and recalculate totals\n report.vulnerabilities.sort((a, b) => {\n const severityOrder = { CRITICAL: 0, HIGH: 1, MODERATE: 2, LOW: 3, UNKNOWN: 4 }\n return severityOrder[a.severity] - severityOrder[b.severity]\n })\n report.totalVulnerabilities = report.vulnerabilities.length\n report.hasCriticalVulnerabilities = report.vulnerabilities.some(\n (v) => v.severity === 'CRITICAL'\n )\n report.hasHighVulnerabilities = report.vulnerabilities.some(\n (v) => v.severity === 'HIGH' || v.severity === 'CRITICAL'\n )\n }\n }\n\n // Cache the result\n this.cache.set(cacheKey, {\n data: report,\n timestamp: Date.now(),\n })\n\n return report\n } catch (error) {\n // Return empty report on error, don't block the analysis\n console.error(\n `Security advisory query failed for ${packageName}@${version}:`,\n (error as Error).message\n )\n\n return {\n packageName,\n version,\n vulnerabilities: [],\n hasCriticalVulnerabilities: false,\n hasHighVulnerabilities: false,\n totalVulnerabilities: 0,\n queriedAt: new Date(),\n source: 'osv',\n }\n }\n }\n\n /**\n * Query OSV API for vulnerabilities\n * @see https://google.github.io/osv.dev/api/\n */\n private async queryOSV(packageName: string, version: string): Promise<SecurityAdvisoryReport> {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.timeout)\n\n try {\n const response = await fetch('https://api.osv.dev/v1/query', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n package: {\n name: packageName,\n ecosystem: 'npm',\n },\n version: version,\n }),\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n throw new Error(`OSV API returned ${response.status}: ${response.statusText}`)\n }\n\n const data = (await response.json()) as OSVQueryResponse\n return this.parseOSVResponse(packageName, version, data)\n } catch (error) {\n clearTimeout(timeoutId)\n\n if ((error as Error).name === 'AbortError') {\n throw new Error('OSV API request timed out')\n }\n throw error\n }\n }\n\n /**\n * Parse OSV API response into our format\n */\n private parseOSVResponse(\n packageName: string,\n version: string,\n response: OSVQueryResponse\n ): SecurityAdvisoryReport {\n const vulnerabilities: VulnerabilityInfo[] = []\n\n if (response.vulns && response.vulns.length > 0) {\n for (const vuln of response.vulns) {\n const severity = this.extractSeverity(vuln)\n const cvssScore = this.extractCVSSScore(vuln)\n\n vulnerabilities.push({\n id: vuln.id,\n aliases: vuln.aliases || [],\n summary: vuln.summary || 'No summary available',\n details: vuln.details || '',\n severity,\n cvssScore,\n affectedVersions: this.extractAffectedVersions(vuln),\n fixedVersions: this.extractFixedVersions(vuln),\n references: this.extractReferences(vuln),\n publishedAt: vuln.published,\n })\n }\n }\n\n // Sort by severity (CRITICAL first)\n vulnerabilities.sort((a, b) => {\n const severityOrder = { CRITICAL: 0, HIGH: 1, MODERATE: 2, LOW: 3, UNKNOWN: 4 }\n return severityOrder[a.severity] - severityOrder[b.severity]\n })\n\n return {\n packageName,\n version,\n vulnerabilities,\n hasCriticalVulnerabilities: vulnerabilities.some((v) => v.severity === 'CRITICAL'),\n hasHighVulnerabilities: vulnerabilities.some(\n (v) => v.severity === 'HIGH' || v.severity === 'CRITICAL'\n ),\n totalVulnerabilities: vulnerabilities.length,\n queriedAt: new Date(),\n source: 'osv',\n }\n }\n\n /**\n * Extract severity from OSV vulnerability\n */\n private extractSeverity(\n vuln: OSVVulnerability\n ): 'CRITICAL' | 'HIGH' | 'MODERATE' | 'LOW' | 'UNKNOWN' {\n // Try database_specific first\n if (vuln.database_specific?.severity) {\n const severity = vuln.database_specific.severity.toUpperCase()\n if (['CRITICAL', 'HIGH', 'MODERATE', 'LOW'].includes(severity)) {\n return severity as 'CRITICAL' | 'HIGH' | 'MODERATE' | 'LOW'\n }\n }\n\n // Try CVSS score\n const cvssScore = this.extractCVSSScore(vuln)\n if (cvssScore !== undefined) {\n if (cvssScore >= 9.0) return 'CRITICAL'\n if (cvssScore >= 7.0) return 'HIGH'\n if (cvssScore >= 4.0) return 'MODERATE'\n return 'LOW'\n }\n\n // Check severity array\n if (vuln.severity && vuln.severity.length > 0) {\n const cvss = vuln.severity.find((s) => s.type === 'CVSS_V3')\n if (cvss) {\n const score = parseFloat(cvss.score)\n if (!Number.isNaN(score)) {\n if (score >= 9.0) return 'CRITICAL'\n if (score >= 7.0) return 'HIGH'\n if (score >= 4.0) return 'MODERATE'\n return 'LOW'\n }\n }\n }\n\n return 'UNKNOWN'\n }\n\n /**\n * Extract CVSS score from OSV vulnerability\n */\n private extractCVSSScore(vuln: OSVVulnerability): number | undefined {\n // Check database_specific first\n if (vuln.database_specific?.cvss?.score !== undefined) {\n return vuln.database_specific.cvss.score\n }\n\n // Check severity array\n if (vuln.severity && vuln.severity.length > 0) {\n const cvss = vuln.severity.find((s) => s.type === 'CVSS_V3')\n if (cvss) {\n const score = parseFloat(cvss.score)\n if (!Number.isNaN(score)) {\n return score\n }\n }\n }\n\n return undefined\n }\n\n /**\n * Extract affected versions string\n */\n private extractAffectedVersions(vuln: OSVVulnerability): string {\n if (!vuln.affected || vuln.affected.length === 0) {\n return 'Unknown'\n }\n\n const ranges: string[] = []\n\n for (const affected of vuln.affected) {\n if (affected.ranges) {\n for (const range of affected.ranges) {\n if (range.events) {\n let introduced = ''\n let fixed = ''\n\n for (const event of range.events) {\n if (event.introduced) introduced = event.introduced\n if (event.fixed) fixed = event.fixed\n }\n\n if (introduced && fixed) {\n ranges.push(`>=${introduced} <${fixed}`)\n } else if (introduced) {\n ranges.push(`>=${introduced}`)\n }\n }\n }\n }\n\n if (affected.versions && affected.versions.length > 0) {\n ranges.push(affected.versions.slice(0, 5).join(', '))\n }\n }\n\n return ranges.length > 0 ? ranges.join(' || ') : 'Unknown'\n }\n\n /**\n * Extract fixed versions\n */\n private extractFixedVersions(vuln: OSVVulnerability): string[] {\n const fixedVersions: string[] = []\n\n if (vuln.affected) {\n for (const affected of vuln.affected) {\n if (affected.ranges) {\n for (const range of affected.ranges) {\n if (range.events) {\n for (const event of range.events) {\n if (event.fixed) {\n fixedVersions.push(event.fixed)\n }\n }\n }\n }\n }\n }\n }\n\n return [...new Set(fixedVersions)] // Remove duplicates\n }\n\n /**\n * Extract reference URLs\n */\n private extractReferences(vuln: OSVVulnerability): string[] {\n if (!vuln.references) {\n return []\n }\n\n return vuln.references\n .filter((ref) => ref.url)\n .map((ref) => ref.url)\n .slice(0, 5) // Limit to 5 references\n }\n\n /**\n * Batch query multiple packages\n */\n async queryMultiplePackages(\n packages: Array<{ name: string; version: string }>\n ): Promise<Map<string, SecurityAdvisoryReport>> {\n const results = new Map<string, SecurityAdvisoryReport>()\n\n // Query in parallel with concurrency limit\n const concurrency = 5\n const chunks: Array<Array<{ name: string; version: string }>> = []\n\n for (let i = 0; i < packages.length; i += concurrency) {\n chunks.push(packages.slice(i, i + concurrency))\n }\n\n for (const chunk of chunks) {\n const promises = chunk.map(async (pkg) => {\n const report = await this.queryVulnerabilities(pkg.name, pkg.version)\n results.set(`${pkg.name}@${pkg.version}`, report)\n })\n\n await Promise.all(promises)\n }\n\n return results\n }\n\n /**\n * Format vulnerabilities for AI prompt context\n */\n formatForPrompt(report: SecurityAdvisoryReport): string {\n if (report.totalVulnerabilities === 0) {\n return `No known vulnerabilities found for ${report.packageName}@${report.version}`\n }\n\n const lines: string[] = []\n lines.push(\n `⚠️ SECURITY ALERT: ${report.totalVulnerabilities} vulnerability(ies) found for ${report.packageName}@${report.version}:`\n )\n\n for (const vuln of report.vulnerabilities) {\n const cveIds = vuln.aliases.filter((a) => a.startsWith('CVE-')).join(', ') || vuln.id\n const scoreStr = vuln.cvssScore ? ` (CVSS: ${vuln.cvssScore})` : ''\n\n lines.push(` - [${vuln.severity}]${scoreStr} ${cveIds}: ${vuln.summary}`)\n\n if (vuln.fixedVersions.length > 0) {\n lines.push(` Fixed in: ${vuln.fixedVersions.join(', ')}`)\n }\n }\n\n if (report.hasCriticalVulnerabilities) {\n lines.push(\n '\\n🚨 CRITICAL: This version has CRITICAL security vulnerabilities. DO NOT recommend updating to this version!'\n )\n } else if (report.hasHighVulnerabilities) {\n lines.push(\n '\\n⚠️ HIGH RISK: This version has HIGH severity vulnerabilities. Consider alternative versions.'\n )\n }\n\n return lines.join('\\n')\n }\n\n /**\n * Clear cache\n */\n clearCache(): void {\n this.cache.clear()\n }\n\n /**\n * Find a safe version (without critical/high vulnerabilities) newer than the given version.\n * This method checks versions in order from the given version upward until it finds one\n * that has no critical or high severity vulnerabilities.\n *\n * @param packageName - The npm package name\n * @param currentVersion - The version to start searching from\n * @param maxVersionsToCheck - Maximum number of versions to check (default: 10)\n * @returns Information about the safe version found, or undefined if none found\n */\n async findSafeVersion(\n packageName: string,\n currentVersion: string,\n maxVersionsToCheck = 10\n ): Promise<\n | {\n version: string\n sameMajor: boolean\n sameMinor: boolean\n versionsChecked: number\n skippedVersions: Array<{\n version: string\n vulnerabilities: Array<{\n id: string\n severity: string\n summary: string\n }>\n }>\n }\n | undefined\n > {\n try {\n // Fetch package versions from npm registry\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.timeout)\n\n const response = await fetch(\n `https://registry.npmjs.org/${encodeURIComponent(packageName)}`,\n { signal: controller.signal }\n )\n\n clearTimeout(timeoutId)\n\n if (!response.ok) {\n return undefined\n }\n\n const data = (await response.json()) as {\n versions: Record<string, unknown>\n time?: Record<string, string>\n }\n\n // Get all versions and sort them semantically\n const allVersions = Object.keys(data.versions)\n\n // Parse current version for comparison\n const currentParts = this.parseVersion(currentVersion)\n if (!currentParts) {\n return undefined\n }\n\n // Filter to versions >= currentVersion and sort in ascending order\n const candidateVersions = allVersions\n .filter((v) => {\n const parts = this.parseVersion(v)\n if (!parts) return false\n // Only consider stable versions (no prereleases)\n if (parts.prerelease) return false\n // Must be >= currentVersion\n return this.compareVersions(parts, currentParts) > 0\n })\n .sort((a, b) => {\n const partsA = this.parseVersion(a)\n const partsB = this.parseVersion(b)\n if (!partsA || !partsB) return 0\n return this.compareVersions(partsA, partsB)\n })\n .slice(0, maxVersionsToCheck)\n\n if (candidateVersions.length === 0) {\n return undefined\n }\n\n // Track skipped versions with their vulnerabilities\n const skippedVersions: Array<{\n version: string\n vulnerabilities: Array<{\n id: string\n severity: string\n summary: string\n }>\n }> = []\n\n // Check each candidate version for vulnerabilities\n let versionsChecked = 0\n for (const candidateVersion of candidateVersions) {\n versionsChecked++\n\n // Query vulnerabilities for this version (including ecosystem packages)\n const report = await this.queryVulnerabilities(packageName, candidateVersion)\n\n // Collect all vulnerabilities (main package + ecosystem)\n const allVulnerabilities: Array<{\n id: string\n severity: string\n summary: string\n }> = report.vulnerabilities.map((v) => ({\n id: v.id,\n severity: v.severity,\n summary: v.summary,\n }))\n\n // Check if this version is safe (no critical/high vulnerabilities)\n const hasDangerousVulns = report.hasCriticalVulnerabilities || report.hasHighVulnerabilities\n\n if (!hasDangerousVulns) {\n // Found a safe version!\n const candidateParts = this.parseVersion(candidateVersion)\n if (!candidateParts) continue\n\n return {\n version: candidateVersion,\n sameMajor: candidateParts.major === currentParts.major,\n sameMinor:\n candidateParts.major === currentParts.major &&\n candidateParts.minor === currentParts.minor,\n versionsChecked,\n skippedVersions,\n }\n } else {\n // This version has vulnerabilities, add to skipped list\n skippedVersions.push({\n version: candidateVersion,\n vulnerabilities: allVulnerabilities,\n })\n }\n }\n\n // No safe version found within the limit\n return undefined\n } catch (error) {\n console.error(\n `Failed to find safe version for ${packageName}@${currentVersion}:`,\n (error as Error).message\n )\n return undefined\n }\n }\n\n /**\n * Parse a semver version string into parts\n */\n private parseVersion(\n version: string\n ): { major: number; minor: number; patch: number; prerelease?: string } | null {\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)(?:-(.+))?$/)\n if (!match || !match[1] || !match[2] || !match[3]) return null\n\n return {\n major: parseInt(match[1], 10),\n minor: parseInt(match[2], 10),\n patch: parseInt(match[3], 10),\n prerelease: match[4],\n }\n }\n\n /**\n * Compare two parsed versions\n * Returns: negative if a < b, 0 if a == b, positive if a > b\n */\n private compareVersions(\n a: { major: number; minor: number; patch: number },\n b: { major: number; minor: number; patch: number }\n ): number {\n if (a.major !== b.major) return a.major - b.major\n if (a.minor !== b.minor) return a.minor - b.minor\n return a.patch - b.patch\n }\n}\n","/**\n * AI Analysis Service\n *\n * Core application service that orchestrates AI-powered dependency analysis.\n * Handles provider selection, caching, fallback strategies, and result aggregation.\n */\n\nimport type {\n AIConfig,\n AIProvider,\n AIProviderInfo,\n AnalysisContext,\n AnalysisResult,\n AnalysisType,\n PackageUpdateInfo,\n Recommendation,\n SecurityVulnerabilityData,\n WorkspaceInfo,\n} from '../../domain/interfaces/aiProvider.js'\nimport { AIDetector } from '../../infrastructure/ai/aiDetector.js'\nimport { type AnalysisCache, analysisCache } from '../../infrastructure/ai/cache/analysisCache.js'\nimport { RuleEngine } from '../../infrastructure/ai/fallback/ruleEngine.js'\nimport { ClaudeProvider } from '../../infrastructure/ai/providers/claudeProvider.js'\nimport { CodexProvider } from '../../infrastructure/ai/providers/codexProvider.js'\nimport { GeminiProvider } from '../../infrastructure/ai/providers/geminiProvider.js'\nimport { SecurityAdvisoryService } from '../../infrastructure/external-services/securityAdvisoryService.js'\n\n/**\n * Service options\n */\nexport interface AIAnalysisServiceOptions {\n config?: Partial<AIConfig>\n cache?: AnalysisCache\n detector?: AIDetector\n /**\n * Optional preconfigured provider instances.\n * When provided, the service will not auto-initialize built-in providers.\n */\n providers?: AIProvider[]\n}\n\n/**\n * Analysis request options\n */\nexport interface AnalysisRequestOptions {\n analysisType?: AnalysisType\n provider?: string // Specific provider to use\n skipCache?: boolean\n timeout?: number\n}\n\n/**\n * Multi-provider analysis result\n */\nexport interface MultiAnalysisResult {\n primary: AnalysisResult\n secondary?: AnalysisResult\n merged?: AnalysisResult\n providers: string[]\n timestamp: Date\n}\n\n/**\n * AI Analysis Service\n *\n * Provides high-level API for AI-powered dependency analysis.\n */\nexport class AIAnalysisService {\n private readonly config: AIConfig\n private readonly cache: AnalysisCache\n private readonly detector: AIDetector\n private readonly ruleEngine: RuleEngine\n private readonly securityService: SecurityAdvisoryService\n private readonly providers: Map<string, AIProvider> = new Map()\n private providersInitialized = false\n\n constructor(options: AIAnalysisServiceOptions = {}) {\n this.config = this.buildConfig(options.config)\n this.cache = options.cache ?? analysisCache\n this.detector = options.detector ?? new AIDetector()\n this.ruleEngine = new RuleEngine()\n this.securityService = new SecurityAdvisoryService({ cacheMinutes: 30, timeout: 10000 })\n\n if (options.providers) {\n for (const provider of options.providers) {\n this.providers.set(provider.name, provider)\n }\n this.providersInitialized = true\n }\n }\n\n /**\n * Build configuration with defaults\n */\n private buildConfig(userConfig?: Partial<AIConfig>): AIConfig {\n return {\n enabled: userConfig?.enabled ?? true,\n preferredProvider: userConfig?.preferredProvider ?? 'auto',\n providers: userConfig?.providers ?? {},\n analysisTypes: userConfig?.analysisTypes ?? [\n 'impact',\n 'security',\n 'compatibility',\n 'recommend',\n ],\n cache: {\n enabled: userConfig?.cache?.enabled ?? true,\n ttl: userConfig?.cache?.ttl ?? 3600,\n },\n fallback: {\n enabled: userConfig?.fallback?.enabled ?? true,\n useRuleEngine: userConfig?.fallback?.useRuleEngine ?? true,\n },\n securityData: {\n enabled: userConfig?.securityData?.enabled ?? true,\n },\n }\n }\n\n /**\n * Initialize providers (lazy initialization)\n */\n private async initializeProviders(): Promise<void> {\n if (this.providersInitialized) {\n return\n }\n\n // Initialize Claude provider (priority: 100)\n const claudeProvider = new ClaudeProvider(this.config.providers.claude)\n if (await claudeProvider.isAvailable()) {\n this.providers.set('claude', claudeProvider)\n }\n\n // Initialize Gemini provider (priority: 80)\n const geminiProvider = new GeminiProvider(this.config.providers.gemini)\n if (await geminiProvider.isAvailable()) {\n this.providers.set('gemini', geminiProvider)\n }\n\n // Initialize Codex provider (priority: 60)\n const codexProvider = new CodexProvider(this.config.providers.codex)\n if (await codexProvider.isAvailable()) {\n this.providers.set('codex', codexProvider)\n }\n\n // Future: Initialize additional providers\n // const cursorProvider = new CursorProvider(this.config.providers.cursor);\n // const aiderProvider = new AiderProvider(this.config.providers.aider);\n\n this.providersInitialized = true\n }\n\n /**\n * Get available AI providers\n */\n async getAvailableProviders(): Promise<AIProviderInfo[]> {\n return this.detector.getAvailableProviders()\n }\n\n /**\n * Get the best available provider\n */\n async getBestProvider(): Promise<AIProvider | null> {\n await this.initializeProviders()\n\n if (this.config.preferredProvider !== 'auto') {\n const preferred = this.providers.get(this.config.preferredProvider)\n if (preferred && (await preferred.isAvailable())) {\n return preferred\n }\n }\n\n // Find highest priority available provider\n let bestProvider: AIProvider | null = null\n let highestPriority = -1\n\n for (const provider of this.providers.values()) {\n if ((await provider.isAvailable()) && provider.priority > highestPriority) {\n bestProvider = provider\n highestPriority = provider.priority\n }\n }\n\n return bestProvider\n }\n\n /**\n * Perform AI analysis on package updates\n */\n async analyzeUpdates(\n packages: PackageUpdateInfo[],\n workspaceInfo: WorkspaceInfo,\n options: AnalysisRequestOptions = {}\n ): Promise<AnalysisResult> {\n if (!this.config.enabled) {\n return this.createDisabledResult(packages, options.analysisType ?? 'impact')\n }\n\n const context: AnalysisContext = {\n packages,\n workspaceInfo,\n analysisType: options.analysisType ?? 'impact',\n options: {\n timeout: options.timeout,\n },\n }\n\n // Check cache first\n if (this.config.cache.enabled && !options.skipCache) {\n // Try specified provider first, then fallback providers\n const providersToCheck = options.provider\n ? [options.provider]\n : ['claude', 'gemini', 'codex', 'rule-engine']\n\n for (const providerName of providersToCheck) {\n const cached = this.cache.get(context, providerName)\n if (cached) {\n return {\n ...cached,\n provider: `${cached.provider} (cached)`,\n }\n }\n }\n }\n\n // Get provider\n await this.initializeProviders()\n let provider: AIProvider | null = null\n\n if (options.provider) {\n provider = this.providers.get(options.provider) ?? null\n } else {\n provider = await this.getBestProvider()\n }\n\n // Execute analysis\n let result: AnalysisResult\n let providerUsed: string\n const shouldFetchSecurityData =\n (this.config.securityData?.enabled ?? true) &&\n (provider !== null || context.analysisType === 'security')\n const contextWithSecurity: AnalysisContext = shouldFetchSecurityData\n ? { ...context, securityData: await this.fetchSecurityData(packages) }\n : context\n\n if (provider) {\n try {\n result = await provider.analyze(contextWithSecurity)\n providerUsed = provider.name\n } catch (error) {\n // Fallback on provider error\n if (this.config.fallback.enabled && this.config.fallback.useRuleEngine) {\n result = this.ruleEngine.analyze(contextWithSecurity)\n providerUsed = 'rule-engine'\n } else {\n throw error\n }\n }\n } else {\n // No provider available, use fallback\n if (this.config.fallback.enabled && this.config.fallback.useRuleEngine) {\n result = this.ruleEngine.analyze(contextWithSecurity)\n providerUsed = 'rule-engine'\n } else {\n result = this.createNoProviderResult(packages, context.analysisType)\n providerUsed = 'none'\n }\n }\n\n // Cache result (including fallback results)\n if (this.config.cache.enabled && providerUsed !== 'none') {\n this.cache.set(context, providerUsed, result)\n }\n\n return result\n }\n\n /**\n * Perform impact analysis\n */\n async analyzeImpact(\n packages: PackageUpdateInfo[],\n workspaceInfo: WorkspaceInfo,\n options: Omit<AnalysisRequestOptions, 'analysisType'> = {}\n ): Promise<AnalysisResult> {\n return this.analyzeUpdates(packages, workspaceInfo, {\n ...options,\n analysisType: 'impact',\n })\n }\n\n /**\n * Perform security analysis\n */\n async analyzeSecurity(\n packages: PackageUpdateInfo[],\n workspaceInfo: WorkspaceInfo,\n options: Omit<AnalysisRequestOptions, 'analysisType'> = {}\n ): Promise<AnalysisResult> {\n return this.analyzeUpdates(packages, workspaceInfo, {\n ...options,\n analysisType: 'security',\n })\n }\n\n /**\n * Perform compatibility analysis\n */\n async analyzeCompatibility(\n packages: PackageUpdateInfo[],\n workspaceInfo: WorkspaceInfo,\n options: Omit<AnalysisRequestOptions, 'analysisType'> = {}\n ): Promise<AnalysisResult> {\n return this.analyzeUpdates(packages, workspaceInfo, {\n ...options,\n analysisType: 'compatibility',\n })\n }\n\n /**\n * Get smart recommendations\n */\n async getRecommendations(\n packages: PackageUpdateInfo[],\n workspaceInfo: WorkspaceInfo,\n options: Omit<AnalysisRequestOptions, 'analysisType'> = {}\n ): Promise<AnalysisResult> {\n return this.analyzeUpdates(packages, workspaceInfo, {\n ...options,\n analysisType: 'recommend',\n })\n }\n\n /**\n * Perform comprehensive analysis (all types)\n */\n async analyzeComprehensive(\n packages: PackageUpdateInfo[],\n workspaceInfo: WorkspaceInfo,\n options: Omit<AnalysisRequestOptions, 'analysisType'> = {}\n ): Promise<MultiAnalysisResult> {\n const results: AnalysisResult[] = []\n const providers: string[] = []\n\n // Run all analysis types\n for (const analysisType of this.config.analysisTypes) {\n const result = await this.analyzeUpdates(packages, workspaceInfo, {\n ...options,\n analysisType,\n })\n results.push(result)\n if (!providers.includes(result.provider)) {\n providers.push(result.provider)\n }\n }\n\n // Merge results\n const merged = this.mergeResults(results)\n\n return {\n primary: results[0]!,\n secondary: results[1],\n merged,\n providers,\n timestamp: new Date(),\n }\n }\n\n /**\n * Merge multiple analysis results\n */\n private mergeResults(results: AnalysisResult[]): AnalysisResult {\n if (results.length === 0) {\n throw new Error('No results to merge')\n }\n\n if (results.length === 1) {\n return results[0]!\n }\n\n // Merge recommendations by package\n const recommendationMap = new Map<string, Recommendation>()\n\n for (const result of results) {\n for (const rec of result.recommendations) {\n const existing = recommendationMap.get(rec.package)\n\n if (!existing) {\n recommendationMap.set(rec.package, { ...rec })\n } else {\n // Merge: take higher risk level, combine reasons\n const mergedRec: Recommendation = {\n ...existing,\n riskLevel: this.higherRisk(existing.riskLevel, rec.riskLevel),\n action: this.moreConservativeAction(existing.action, rec.action),\n reason: `${existing.reason}; ${rec.reason}`,\n breakingChanges: [\n ...(existing.breakingChanges || []),\n ...(rec.breakingChanges || []),\n ].filter((v, i, a) => a.indexOf(v) === i),\n securityFixes: [...(existing.securityFixes || []), ...(rec.securityFixes || [])].filter(\n (v, i, a) => a.indexOf(v) === i\n ),\n }\n recommendationMap.set(rec.package, mergedRec)\n }\n }\n }\n\n // Calculate average confidence\n const avgConfidence = results.reduce((sum, r) => sum + r.confidence, 0) / results.length\n\n // Collect all warnings\n const allWarnings = results.flatMap((r) => r.warnings || [])\n\n // Total processing time\n const totalProcessingTime = results.reduce((sum, r) => sum + (r.processingTimeMs || 0), 0)\n\n return {\n provider: results.map((r) => r.provider).join(', '),\n analysisType: 'recommend', // Merged analysis is essentially recommendations\n recommendations: Array.from(recommendationMap.values()),\n summary: `Comprehensive analysis from ${results.length} analysis types`,\n confidence: avgConfidence,\n warnings: allWarnings.filter((v, i, a) => a.indexOf(v) === i),\n timestamp: new Date(),\n processingTimeMs: totalProcessingTime,\n }\n }\n\n /**\n * Get higher risk level\n */\n private higherRisk(\n a: Recommendation['riskLevel'],\n b: Recommendation['riskLevel']\n ): Recommendation['riskLevel'] {\n const riskOrder: Recommendation['riskLevel'][] = ['low', 'medium', 'high', 'critical']\n const aIndex = riskOrder.indexOf(a)\n const bIndex = riskOrder.indexOf(b)\n return aIndex >= bIndex ? a : b\n }\n\n /**\n * Get more conservative action\n */\n private moreConservativeAction(\n a: Recommendation['action'],\n b: Recommendation['action']\n ): Recommendation['action'] {\n const actionOrder: Recommendation['action'][] = ['update', 'defer', 'review', 'skip']\n const aIndex = actionOrder.indexOf(a)\n const bIndex = actionOrder.indexOf(b)\n return aIndex >= bIndex ? a : b\n }\n\n /**\n * Create result for disabled AI\n */\n private createDisabledResult(\n packages: PackageUpdateInfo[],\n analysisType: AnalysisType\n ): AnalysisResult {\n return {\n provider: 'none',\n analysisType,\n recommendations: packages.map((pkg) => ({\n package: pkg.name,\n currentVersion: pkg.currentVersion,\n targetVersion: pkg.targetVersion,\n action: 'review' as const,\n reason: 'AI analysis is disabled',\n riskLevel: 'medium' as const,\n })),\n summary: 'AI analysis is disabled. All updates require manual review.',\n confidence: 0,\n warnings: ['AI analysis is disabled in configuration'],\n timestamp: new Date(),\n }\n }\n\n /**\n * Create result when no provider is available\n */\n private createNoProviderResult(\n packages: PackageUpdateInfo[],\n analysisType: AnalysisType\n ): AnalysisResult {\n return {\n provider: 'none',\n analysisType,\n recommendations: packages.map((pkg) => ({\n package: pkg.name,\n currentVersion: pkg.currentVersion,\n targetVersion: pkg.targetVersion,\n action: 'review' as const,\n reason: 'No AI provider available',\n riskLevel: 'medium' as const,\n })),\n summary: 'No AI provider available. Manual review recommended.',\n confidence: 0,\n warnings: [\n 'No AI CLI tools detected. Install Claude, Gemini, or Codex for AI-powered analysis.',\n ],\n timestamp: new Date(),\n }\n }\n\n /**\n * Invalidate cache for specific packages\n */\n invalidateCache(packageNames: string[]): void {\n this.cache.invalidateForPackages(packageNames)\n }\n\n /**\n * Clear all cached analysis results\n */\n clearCache(): void {\n this.cache.clear()\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats() {\n return this.cache.getStats()\n }\n\n /**\n * Fetch real-time security vulnerability data for packages\n */\n private async fetchSecurityData(\n packages: PackageUpdateInfo[]\n ): Promise<Map<string, SecurityVulnerabilityData>> {\n const securityData = new Map<string, SecurityVulnerabilityData>()\n\n try {\n // Query security data for target versions\n const packagesToQuery = packages.map((pkg) => ({\n name: pkg.name,\n version: pkg.targetVersion,\n }))\n\n const reports = await this.securityService.queryMultiplePackages(packagesToQuery)\n\n // Convert SecurityAdvisoryReport to SecurityVulnerabilityData\n for (const [key, report] of reports) {\n // If version has critical/high vulnerabilities, find a safe version\n let safeVersion:\n | {\n version: string\n sameMajor: boolean\n sameMinor: boolean\n versionsChecked: number\n skippedVersions?: Array<{\n version: string\n vulnerabilities: Array<{\n id: string\n severity: string\n summary: string\n }>\n }>\n }\n | undefined\n if (report.hasCriticalVulnerabilities || report.hasHighVulnerabilities) {\n const foundSafeVersion = await this.securityService.findSafeVersion(\n report.packageName,\n report.version\n )\n if (foundSafeVersion) {\n safeVersion = foundSafeVersion\n }\n }\n\n securityData.set(key, {\n packageName: report.packageName,\n version: report.version,\n vulnerabilities: report.vulnerabilities.map((v) => ({\n id: v.id,\n aliases: v.aliases,\n summary: v.summary,\n severity: v.severity,\n cvssScore: v.cvssScore,\n fixedVersions: v.fixedVersions,\n })),\n hasCriticalVulnerabilities: report.hasCriticalVulnerabilities,\n hasHighVulnerabilities: report.hasHighVulnerabilities,\n totalVulnerabilities: report.totalVulnerabilities,\n safeVersion,\n })\n }\n } catch (error) {\n // Log error but don't fail the analysis - security data is supplementary\n console.error('Failed to fetch security data:', (error as Error).message)\n }\n\n return securityData\n }\n\n /**\n * Check if AI analysis is available\n */\n async isAvailable(): Promise<boolean> {\n if (!this.config.enabled) {\n return false\n }\n\n await this.initializeProviders()\n const provider = await this.getBestProvider()\n\n return provider !== null || this.config.fallback.useRuleEngine\n }\n\n /**\n * Get service status summary\n */\n async getStatus(): Promise<{\n enabled: boolean\n providers: AIProviderInfo[]\n activeProvider: string | null\n cacheEnabled: boolean\n cacheStats: ReturnType<AnalysisCache['getStats']>\n fallbackEnabled: boolean\n }> {\n await this.initializeProviders()\n const providers = await this.getAvailableProviders()\n const bestProvider = await this.getBestProvider()\n\n return {\n enabled: this.config.enabled,\n providers,\n activeProvider: bestProvider?.name ?? null,\n cacheEnabled: this.config.cache.enabled,\n cacheStats: this.cache.getStats(),\n fallbackEnabled: this.config.fallback.enabled,\n }\n }\n}\n","/**\n * Configuration System\n *\n * Handles application configuration from multiple sources:\n * - CLI arguments\n * - Configuration files (.pcurc, pcu.config.js)\n * - Environment variables\n * - Default values\n */\n\nimport { existsSync, readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\n\nexport interface PcuConfig {\n // Registry settings\n registry: {\n url: string\n timeout: number\n retries: number\n cache: boolean\n cacheTtl: number // TTL in seconds\n }\n\n // Update behavior\n update: {\n target: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest'\n includePrerelease: boolean\n interactive: boolean\n createBackup: boolean\n force: boolean\n }\n\n // Output formatting\n output: {\n format: 'table' | 'json' | 'yaml' | 'minimal'\n color: boolean\n verbose: boolean\n silent: boolean\n }\n\n // Workspace settings\n workspace: {\n autoDetect: boolean\n patterns: string[]\n excludePatterns: string[]\n }\n\n // Notification settings\n notification: {\n enabled: boolean\n onSuccess: boolean\n onError: boolean\n methods: Array<'console' | 'desktop' | 'webhook'>\n webhook?: {\n url: string\n method: 'POST' | 'PUT'\n headers: Record<string, string>\n }\n }\n\n // Logging\n logging: {\n level: 'error' | 'warn' | 'info' | 'debug'\n file?: string\n maxSize: string // e.g., '10MB'\n maxFiles: number\n }\n}\n\nexport const DEFAULT_CONFIG: PcuConfig = {\n registry: {\n url: 'https://registry.npmjs.org',\n timeout: 30000,\n retries: 3,\n cache: true,\n cacheTtl: 3600, // 1 hour\n },\n\n update: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n createBackup: false,\n force: false,\n },\n\n output: {\n format: 'table',\n color: true,\n verbose: false,\n silent: false,\n },\n\n workspace: {\n autoDetect: true,\n patterns: ['packages/*', 'apps/*'],\n excludePatterns: ['**/node_modules/**', '**/dist/**', '**/build/**'],\n },\n\n notification: {\n enabled: false,\n onSuccess: true,\n onError: true,\n methods: ['console'],\n },\n\n logging: {\n level: 'info',\n maxSize: '10MB',\n maxFiles: 5,\n },\n}\n\nexport class ConfigManager {\n private config: PcuConfig\n private configPath?: string\n\n constructor() {\n this.config = { ...DEFAULT_CONFIG }\n this.loadConfig()\n }\n\n /**\n * Get the current configuration\n */\n getConfig(): Readonly<PcuConfig> {\n return this.config\n }\n\n /**\n * Get a specific configuration value using dot notation\n */\n get<T = any>(path: string): T {\n return this.getNestedValue(this.config, path)\n }\n\n /**\n * Set a configuration value using dot notation\n */\n set(path: string, value: any): void {\n this.setNestedValue(this.config, path, value)\n }\n\n /**\n * Merge configuration from CLI options\n */\n mergeCliOptions(\n options: Partial<{\n registry: string\n timeout: number\n target: string\n prerelease: boolean\n interactive: boolean\n dryRun: boolean\n force: boolean\n format: string\n color: boolean\n verbose: boolean\n silent: boolean\n workspace: string\n include: string[]\n exclude: string[]\n }>\n ): void {\n if (options.registry) {\n this.config.registry.url = options.registry\n }\n if (options.timeout) {\n this.config.registry.timeout = options.timeout\n }\n if (options.target) {\n this.config.update.target = options.target as any\n }\n if (options.prerelease !== undefined) {\n this.config.update.includePrerelease = options.prerelease\n }\n if (options.interactive !== undefined) {\n this.config.update.interactive = options.interactive\n }\n if (options.force !== undefined) {\n this.config.update.force = options.force\n }\n if (options.format) {\n this.config.output.format = options.format as any\n }\n if (options.color !== undefined) {\n this.config.output.color = options.color\n }\n if (options.verbose !== undefined) {\n this.config.output.verbose = options.verbose\n }\n if (options.silent !== undefined) {\n this.config.output.silent = options.silent\n }\n if (options.include) {\n // Add to existing patterns\n this.config.workspace.patterns.push(...options.include)\n }\n if (options.exclude) {\n // Add to existing exclude patterns\n this.config.workspace.excludePatterns.push(...options.exclude)\n }\n }\n\n /**\n * Load configuration from files and environment\n */\n private loadConfig(): void {\n // Load from files (in order of priority)\n this.loadFromFile(this.findConfigFile())\n\n // Load from environment variables\n this.loadFromEnvironment()\n }\n\n /**\n * Find configuration file\n */\n private findConfigFile(): string | undefined {\n const configNames = ['.pcurc', '.pcurc.json', '.pcurc.js', 'pcu.config.js', 'pcu.config.json']\n\n // Check current directory\n for (const name of configNames) {\n const filePath = resolve(process.cwd(), name)\n if (existsSync(filePath)) {\n return filePath\n }\n }\n\n // Check home directory\n for (const name of configNames) {\n const filePath = join(homedir(), name)\n if (existsSync(filePath)) {\n return filePath\n }\n }\n\n return undefined\n }\n\n /**\n * Load configuration from file\n */\n private loadFromFile(filePath?: string): void {\n if (!filePath || !existsSync(filePath)) {\n return\n }\n\n try {\n let fileConfig: Partial<PcuConfig>\n\n if (filePath.endsWith('.js')) {\n // Dynamic import for ES modules\n delete require.cache[require.resolve(filePath)]\n fileConfig = require(filePath)\n\n // Handle default export\n if (fileConfig && typeof fileConfig === 'object' && 'default' in fileConfig) {\n fileConfig = (fileConfig as any).default\n }\n } else {\n // JSON file\n const content = readFileSync(filePath, 'utf-8')\n fileConfig = JSON.parse(content)\n }\n\n // Deep merge with current config\n this.config = this.deepMerge(this.config, fileConfig)\n this.configPath = filePath\n } catch (error) {\n console.warn(`Failed to load config from ${filePath}:`, error)\n }\n }\n\n /**\n * Load configuration from environment variables\n */\n private loadFromEnvironment(): void {\n const envConfig: Partial<PcuConfig> = {}\n\n // Registry settings\n if (process.env.PCU_REGISTRY_URL) {\n envConfig.registry = { ...this.config.registry, url: process.env.PCU_REGISTRY_URL }\n }\n if (process.env.PCU_REGISTRY_TIMEOUT) {\n envConfig.registry = {\n ...(envConfig.registry || this.config.registry),\n timeout: parseInt(process.env.PCU_REGISTRY_TIMEOUT, 10),\n }\n }\n\n // Update settings\n if (process.env.PCU_UPDATE_TARGET) {\n envConfig.update = {\n ...this.config.update,\n target: process.env.PCU_UPDATE_TARGET as any,\n }\n }\n if (process.env.PCU_UPDATE_PRERELEASE) {\n envConfig.update = {\n ...(envConfig.update || this.config.update),\n includePrerelease: process.env.PCU_UPDATE_PRERELEASE === 'true',\n }\n }\n\n // Output settings\n if (process.env.PCU_OUTPUT_FORMAT) {\n envConfig.output = {\n ...this.config.output,\n format: process.env.PCU_OUTPUT_FORMAT as any,\n }\n }\n if (process.env.PCU_OUTPUT_COLOR) {\n envConfig.output = {\n ...(envConfig.output || this.config.output),\n color: process.env.PCU_OUTPUT_COLOR !== 'false',\n }\n }\n\n // Logging settings\n if (process.env.PCU_LOG_LEVEL) {\n envConfig.logging = {\n ...this.config.logging,\n level: process.env.PCU_LOG_LEVEL as any,\n }\n }\n if (process.env.PCU_LOG_FILE) {\n envConfig.logging = {\n ...(envConfig.logging || this.config.logging),\n file: process.env.PCU_LOG_FILE,\n }\n }\n\n // Merge environment config\n this.config = this.deepMerge(this.config, envConfig)\n }\n\n /**\n * Get nested value using dot notation\n */\n private getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => current?.[key], obj)\n }\n\n /**\n * Set nested value using dot notation (protected against prototype pollution)\n */\n private setNestedValue(obj: any, path: string, value: any): void {\n const keys = path.split('.')\n const lastKey = keys.pop()!\n\n // Validate that keys don't include prototype pollution attempts\n if (keys.some((key) => key === '__proto__' || key === 'constructor' || key === 'prototype')) {\n throw new Error('Invalid key path: prototype pollution attempt detected')\n }\n\n if (lastKey === '__proto__' || lastKey === 'constructor' || lastKey === 'prototype') {\n throw new Error('Invalid key: prototype pollution attempt detected')\n }\n\n const target = keys.reduce((current, key) => {\n // Additional validation for each key in the path\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n throw new Error(`Invalid key in path: ${key}`)\n }\n\n if (!(key in current)) {\n // Use Object.defineProperty for safer property creation\n Object.defineProperty(current, key, {\n value: Object.create(null),\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n return current[key]\n }, obj)\n\n // Use Object.defineProperty for safer final assignment\n Object.defineProperty(target, lastKey, {\n value: value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n\n /**\n * Deep merge two objects (protected against prototype pollution)\n */\n private deepMerge(target: any, source: any): any {\n if (!source || typeof source !== 'object') {\n return target\n }\n\n const result = { ...target }\n\n for (const key in source) {\n // Prevent prototype pollution\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n continue\n }\n\n if (Object.hasOwn(source, key)) {\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n result[key] = this.deepMerge(target[key] || {}, source[key])\n } else {\n result[key] = source[key]\n }\n }\n }\n\n return result\n }\n\n /**\n * Get configuration file path\n */\n getConfigPath(): string | undefined {\n return this.configPath\n }\n\n /**\n * Validate configuration\n */\n validate(): { isValid: boolean; errors: string[] } {\n const errors: string[] = []\n\n // Validate registry URL\n try {\n new URL(this.config.registry.url)\n } catch {\n errors.push('Invalid registry URL')\n }\n\n // Validate timeout\n if (this.config.registry.timeout <= 0) {\n errors.push('Registry timeout must be positive')\n }\n\n // Validate cache TTL\n if (this.config.registry.cacheTtl <= 0) {\n errors.push('Cache TTL must be positive')\n }\n\n // Validate update target\n const validTargets = ['latest', 'greatest', 'minor', 'patch', 'newest']\n if (!validTargets.includes(this.config.update.target)) {\n errors.push(`Invalid update target: ${this.config.update.target}`)\n }\n\n // Validate output format\n const validFormats = ['table', 'json', 'yaml', 'minimal']\n if (!validFormats.includes(this.config.output.format)) {\n errors.push(`Invalid output format: ${this.config.output.format}`)\n }\n\n // Validate log level\n const validLevels = ['error', 'warn', 'info', 'debug']\n if (!validLevels.includes(this.config.logging.level)) {\n errors.push(`Invalid log level: ${this.config.logging.level}`)\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n }\n }\n\n /**\n * Export current configuration to file\n */\n async exportConfig(filePath: string, format: 'json' | 'js' = 'json'): Promise<void> {\n const { writeFile } = await import('node:fs/promises')\n\n let content: string\n\n if (format === 'js') {\n content = `module.exports = ${JSON.stringify(this.config, null, 2)};`\n } else {\n content = JSON.stringify(this.config, null, 2)\n }\n\n await writeFile(filePath, content, 'utf-8')\n }\n}\n\n// Global configuration instance\nlet configInstance: ConfigManager | undefined\n\n/**\n * Get the global configuration instance\n */\nexport function getConfig(): ConfigManager {\n if (!configInstance) {\n configInstance = new ConfigManager()\n }\n return configInstance\n}\n\n/**\n * Reset the global configuration instance (useful for testing)\n */\nexport function resetConfig(): void {\n configInstance = undefined\n}\n","/**\n * PCU Configuration System\n *\n * Defines configuration types and provides default configuration.\n * User configuration can override any part of the default configuration.\n */\n\nexport interface PackageRule {\n patterns: string[]\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest'\n autoUpdate?: boolean\n requireConfirmation?: boolean\n groupUpdate?: boolean\n relatedPackages?: string[] // 相关包会自动遵循相同的版本策略\n}\n\nexport interface SecurityConfig {\n autoFixVulnerabilities?: boolean\n allowMajorForSecurity?: boolean\n notifyOnSecurityUpdate?: boolean\n}\n\nexport interface DefaultsConfig {\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest'\n includePrerelease?: boolean\n interactive?: boolean\n dryRun?: boolean\n createBackup?: boolean\n format?: 'table' | 'json' | 'yaml' | 'minimal'\n}\n\nexport interface AdvancedConfig {\n concurrency?: number\n timeout?: number\n retries?: number\n cacheValidityMinutes?: number\n checkForUpdates?: boolean\n}\n\nexport interface MonorepoConfig {\n syncVersions?: string[]\n catalogPriority?: string[]\n}\n\nexport interface PackageFilterConfig {\n exclude?: string[]\n include?: string[]\n defaults?: DefaultsConfig\n packageRules?: PackageRule[]\n security?: SecurityConfig\n advanced?: AdvancedConfig\n monorepo?: MonorepoConfig\n}\n\n/**\n * Default built-in configuration\n */\nexport const DEFAULT_PACKAGE_FILTER_CONFIG: Required<PackageFilterConfig> = {\n exclude: [],\n include: [],\n defaults: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n dryRun: false,\n createBackup: false,\n format: 'table',\n },\n packageRules: [\n // React ecosystem - keep types in sync with main packages\n {\n patterns: ['react', 'react-dom'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: true,\n relatedPackages: ['@types/react', '@types/react-dom'],\n },\n // Vue ecosystem\n {\n patterns: ['vue'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n relatedPackages: ['@vue/compiler-sfc', '@vue/runtime-core'],\n },\n // Node.js types - be conservative\n {\n patterns: ['@types/node'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n },\n // Other type definitions - can update more freely\n {\n patterns: ['@types/*'],\n target: 'latest',\n autoUpdate: true,\n requireConfirmation: false,\n groupUpdate: false,\n },\n // Dev tools - minor updates are usually safe\n {\n patterns: ['eslint*', 'prettier', '@typescript-eslint/*', 'vitest', 'jest'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: false,\n groupUpdate: true,\n },\n // Build tools - be more conservative\n {\n patterns: ['typescript', 'webpack*', 'vite*', 'rollup*'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: false,\n },\n ],\n security: {\n autoFixVulnerabilities: true,\n allowMajorForSecurity: true,\n notifyOnSecurityUpdate: false,\n },\n advanced: {\n concurrency: 5,\n timeout: 30000,\n retries: 3,\n cacheValidityMinutes: 60,\n checkForUpdates: true,\n },\n monorepo: {\n syncVersions: [],\n catalogPriority: ['default'],\n },\n}\n\n/**\n * Configuration file names to look for\n */\nexport const CONFIG_FILE_NAMES = ['.pcurc.json', '.pcurc.js', 'pcu.config.json', 'pcu.config.js']\n","/**\n * Configuration Loader\n *\n * Loads and merges user configuration with default configuration.\n * Supports multiple configuration file formats and locations.\n */\n\nimport { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport {\n CONFIG_FILE_NAMES,\n DEFAULT_PACKAGE_FILTER_CONFIG,\n type PackageFilterConfig,\n} from './packageFilterConfig.js'\n\nexport class ConfigLoader {\n private static cache = new Map<string, PackageFilterConfig>()\n\n /**\n * Load configuration from the specified directory\n */\n static loadConfig(workspacePath: string = process.cwd()): PackageFilterConfig {\n const cacheKey = workspacePath\n if (ConfigLoader.cache.has(cacheKey)) {\n return ConfigLoader.cache.get(cacheKey)!\n }\n\n const userConfig = ConfigLoader.findAndLoadUserConfig(workspacePath)\n const mergedConfig = ConfigLoader.mergeConfigs(DEFAULT_PACKAGE_FILTER_CONFIG, userConfig || {})\n\n ConfigLoader.cache.set(cacheKey, mergedConfig)\n return mergedConfig\n }\n\n /**\n * Clear configuration cache\n */\n static clearCache(): void {\n ConfigLoader.cache.clear()\n }\n\n /**\n * Find and load user configuration file\n */\n private static findAndLoadUserConfig(workspacePath: string): PackageFilterConfig | null {\n for (const fileName of CONFIG_FILE_NAMES) {\n const configPath = join(workspacePath, fileName)\n if (existsSync(configPath)) {\n try {\n return ConfigLoader.loadConfigFile(configPath)\n } catch (error) {\n console.warn(`Warning: Failed to load config file ${configPath}:`, error)\n }\n }\n }\n return null\n }\n\n /**\n * Load configuration from a specific file\n */\n private static loadConfigFile(configPath: string): PackageFilterConfig {\n const content = readFileSync(configPath, 'utf-8')\n\n if (configPath.endsWith('.json')) {\n return JSON.parse(content) as PackageFilterConfig\n }\n\n if (configPath.endsWith('.js')) {\n // For JavaScript config files, we would need dynamic import\n // For now, let's focus on JSON support\n throw new Error('JavaScript config files are not yet supported')\n }\n\n throw new Error(`Unsupported config file format: ${configPath}`)\n }\n\n /**\n * Deep merge two configuration objects\n */\n private static mergeConfigs(\n defaultConfig: Required<PackageFilterConfig>,\n userConfig: PackageFilterConfig\n ): PackageFilterConfig {\n const merged: PackageFilterConfig = JSON.parse(JSON.stringify(defaultConfig))\n\n // Merge simple arrays and objects\n if (userConfig.exclude) {\n merged.exclude = [...(merged.exclude || []), ...userConfig.exclude]\n }\n\n if (userConfig.include) {\n merged.include = [...(merged.include || []), ...userConfig.include]\n }\n\n if (userConfig.defaults) {\n merged.defaults = { ...merged.defaults, ...userConfig.defaults }\n }\n\n if (userConfig.security) {\n merged.security = { ...merged.security, ...userConfig.security }\n }\n\n if (userConfig.advanced) {\n merged.advanced = { ...merged.advanced, ...userConfig.advanced }\n }\n\n if (userConfig.monorepo) {\n merged.monorepo = { ...merged.monorepo, ...userConfig.monorepo }\n\n // For arrays in monorepo config, replace rather than merge\n if (userConfig.monorepo.syncVersions) {\n merged.monorepo!.syncVersions = userConfig.monorepo.syncVersions\n }\n if (userConfig.monorepo.catalogPriority) {\n merged.monorepo!.catalogPriority = userConfig.monorepo.catalogPriority\n }\n }\n\n // Package rules need special handling - user rules override default rules with same patterns\n if (userConfig.packageRules) {\n const defaultRules = merged.packageRules || []\n const userRules = userConfig.packageRules\n\n // Start with default rules, but remove any that would be overridden by user rules\n const filteredDefaultRules = defaultRules.filter(\n (defaultRule) =>\n !userRules.some((userRule) =>\n // Check if any user rule pattern overlaps with this default rule\n userRule.patterns.some((userPattern) =>\n defaultRule.patterns.some(\n (defaultPattern) =>\n userPattern === defaultPattern ||\n (userPattern.includes('*') &&\n ConfigLoader.patternsOverlap(userPattern, defaultPattern)) ||\n (defaultPattern.includes('*') &&\n ConfigLoader.patternsOverlap(defaultPattern, userPattern))\n )\n )\n )\n )\n\n // Combine filtered default rules with user rules (user rules take priority)\n merged.packageRules = [...filteredDefaultRules, ...userRules]\n }\n\n return merged\n }\n\n /**\n * Get effective configuration for a specific package\n */\n static getPackageConfig(\n packageName: string,\n config: PackageFilterConfig\n ): {\n shouldUpdate: boolean\n target: string\n requireConfirmation: boolean\n autoUpdate: boolean\n groupUpdate: boolean\n } {\n // Check if package is explicitly excluded\n if (config.exclude?.some((pattern) => ConfigLoader.matchesPattern(packageName, pattern))) {\n return {\n shouldUpdate: false,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n }\n }\n\n // Check if package is explicitly included (if include list exists)\n if (config.include && config.include.length > 0) {\n const isIncluded = config.include.some((pattern) =>\n ConfigLoader.matchesPattern(packageName, pattern)\n )\n if (!isIncluded) {\n return {\n shouldUpdate: false,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n }\n }\n }\n\n // First check if package is in relatedPackages of any rule (higher priority)\n let matchingRule = config.packageRules?.find((rule) =>\n rule.relatedPackages?.some((relatedPattern) =>\n ConfigLoader.matchesPattern(packageName, relatedPattern)\n )\n )\n\n // If no relatedPackages match, find direct pattern match\n if (!matchingRule) {\n matchingRule = config.packageRules?.find((rule) =>\n rule.patterns.some((pattern) => ConfigLoader.matchesPattern(packageName, pattern))\n )\n }\n\n if (matchingRule) {\n return {\n shouldUpdate: true,\n target: matchingRule.target || config.defaults?.target || 'latest',\n requireConfirmation: matchingRule.requireConfirmation || false,\n autoUpdate: matchingRule.autoUpdate || false,\n groupUpdate: matchingRule.groupUpdate || false,\n }\n }\n\n // Use default configuration\n return {\n shouldUpdate: true,\n target: config.defaults?.target || 'latest',\n requireConfirmation: false,\n autoUpdate: false,\n groupUpdate: false,\n }\n }\n\n /**\n * Simple glob pattern matching\n */\n private static matchesPattern(packageName: string, pattern: string): boolean {\n const regexPattern = pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.')\n const regex = new RegExp(`^${regexPattern}$`, 'i')\n return regex.test(packageName)\n }\n\n /**\n * Check if two patterns overlap (one could match packages that the other matches)\n */\n private static patternsOverlap(pattern1: string, pattern2: string): boolean {\n // Simple implementation: check if either pattern would match the other as a package name\n return (\n ConfigLoader.matchesPattern(pattern1.replace(/\\*/g, 'x'), pattern2) ||\n ConfigLoader.matchesPattern(pattern2.replace(/\\*/g, 'x'), pattern1)\n )\n }\n}\n","/**\n * Configuration Module Entry Point\n */\n\nexport * from './config.js'\nexport { getConfig as default } from './config.js'\nexport * from './configLoader.js'\nexport * from './packageFilterConfig.js'\n","/**\n * Error Tracker\n *\n * Tracks skipped packages and error statistics for summary reporting.\n */\n\nexport interface SkippedPackage {\n name: string\n reason: 'not-found' | 'network' | 'empty-version' | 'other'\n originalError?: string\n}\n\nexport class ErrorTracker {\n private static skippedPackages: SkippedPackage[] = []\n private static errorCounts = {\n notFound: 0,\n network: 0,\n emptyVersion: 0,\n security: 0,\n other: 0,\n }\n\n /**\n * Track a skipped package\n */\n static trackSkippedPackage(packageName: string, error: Error): void {\n let reason: SkippedPackage['reason'] = 'other'\n\n if (error.message.includes('404') || error.message.includes('Not found')) {\n reason = 'not-found'\n ErrorTracker.errorCounts.notFound++\n } else if (error.message.includes('Version string cannot be empty')) {\n reason = 'empty-version'\n ErrorTracker.errorCounts.emptyVersion++\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n reason = 'network'\n ErrorTracker.errorCounts.network++\n } else {\n ErrorTracker.errorCounts.other++\n }\n\n ErrorTracker.skippedPackages.push({\n name: packageName,\n reason,\n originalError: error.message,\n })\n }\n\n /**\n * Track a security check failure\n */\n static trackSecurityFailure(): void {\n ErrorTracker.errorCounts.security++\n }\n\n /**\n * Get skipped packages by reason\n */\n static getSkippedPackages(): {\n notFound: string[]\n network: string[]\n emptyVersion: string[]\n other: string[]\n } {\n const grouped = {\n notFound: ErrorTracker.skippedPackages\n .filter((p) => p.reason === 'not-found')\n .map((p) => p.name),\n network: ErrorTracker.skippedPackages\n .filter((p) => p.reason === 'network')\n .map((p) => p.name),\n emptyVersion: ErrorTracker.skippedPackages\n .filter((p) => p.reason === 'empty-version')\n .map((p) => p.name),\n other: ErrorTracker.skippedPackages.filter((p) => p.reason === 'other').map((p) => p.name),\n }\n\n return grouped\n }\n\n /**\n * Get error statistics\n */\n static getErrorStats(): typeof ErrorTracker.errorCounts {\n return { ...ErrorTracker.errorCounts }\n }\n\n /**\n * Get total skipped count\n */\n static getTotalSkipped(): number {\n return ErrorTracker.skippedPackages.length\n }\n\n /**\n * Reset all tracking data\n */\n static reset(): void {\n ErrorTracker.skippedPackages = []\n ErrorTracker.errorCounts = {\n notFound: 0,\n network: 0,\n emptyVersion: 0,\n security: 0,\n other: 0,\n }\n }\n\n /**\n * Get all skipped package details\n */\n static getAllSkippedPackages(): SkippedPackage[] {\n return [...ErrorTracker.skippedPackages]\n }\n}\n","/**\n * Logging System\n *\n * Provides structured logging with multiple output targets and log levels.\n * Integrates with the configuration system for runtime control.\n */\n\nimport { existsSync, mkdirSync, statSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { getConfig } from '../config/config.js'\n\nexport type LogLevel = 'error' | 'warn' | 'info' | 'debug'\n\nexport interface LogEntry {\n timestamp: string\n level: LogLevel\n message: string\n context?: string\n data?: any\n error?: Error\n}\n\nexport interface LoggerOptions {\n context?: string | undefined\n level?: LogLevel | undefined\n file?: string | undefined\n console?: boolean | undefined\n json?: boolean | undefined\n}\n\nexport class Logger {\n private context: string\n private options: {\n context: string\n level: LogLevel\n file: string | undefined\n console: boolean\n json: boolean\n }\n private static instances = new Map<string, Logger>()\n\n private constructor(context: string, options: Partial<LoggerOptions> = {}) {\n this.context = context\n\n const config = getConfig().getConfig()\n\n this.options = {\n context: options.context || context,\n level: options.level || config.logging.level,\n file: options.file || config.logging.file,\n console: options.console !== undefined ? options.console : !config.output.silent,\n json: options.json || false,\n } as any\n }\n\n /**\n * Get or create logger instance for a specific context\n */\n static getLogger(context: string, options?: Partial<LoggerOptions>): Logger {\n const key = `${context}:${JSON.stringify(options || {})}`\n\n if (!Logger.instances.has(key)) {\n Logger.instances.set(key, new Logger(context, options))\n }\n\n return Logger.instances.get(key)!\n }\n\n /**\n * Create a child logger with additional context\n */\n child(childContext: string, options?: Partial<LoggerOptions>): Logger {\n const fullContext = `${this.context}:${childContext}`\n return Logger.getLogger(fullContext, { ...this.options, ...options })\n }\n\n /**\n * Log error message\n */\n error(message: string, error?: Error, data?: any): void {\n this.log('error', message, { ...(error && { error }), ...(data && { data }) })\n }\n\n /**\n * Log warning message\n */\n warn(message: string, data?: any): void {\n this.log('warn', message, { data })\n }\n\n /**\n * Log info message\n */\n info(message: string, data?: any): void {\n this.log('info', message, { data })\n }\n\n /**\n * Log debug message\n */\n debug(message: string, data?: any): void {\n this.log('debug', message, { data })\n }\n\n /**\n * Log with specific level\n */\n log(level: LogLevel, message: string, extra: { error?: Error; data?: any } = {}): void {\n if (!this.shouldLog(level)) {\n return\n }\n\n const entry: LogEntry = {\n timestamp: new Date().toISOString(),\n level,\n message,\n context: this.context,\n ...extra,\n }\n\n this.writeLog(entry)\n }\n\n /**\n * Check if should log at given level\n */\n private shouldLog(level: LogLevel): boolean {\n const levels: Record<LogLevel, number> = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n }\n\n return levels[level] <= levels[this.options.level]\n }\n\n /**\n * Write log entry to configured outputs\n */\n private writeLog(entry: LogEntry): void {\n // Write to console\n if (this.options.console) {\n this.writeToConsole(entry)\n }\n\n // Write to file\n if (this.options.file) {\n this.writeToFile(entry)\n }\n }\n\n /**\n * Write to console with colors\n */\n private writeToConsole(entry: LogEntry): void {\n const config = getConfig().getConfig()\n const useColors = config.output.color\n\n let colorFn: (text: string) => string\n let consoleMethod: 'error' | 'warn' | 'info' | 'log'\n\n if (useColors) {\n // Simple color functions (avoiding external dependencies)\n const colors = {\n error: (text: string) => `\\u001b[31m${text}\\u001b[0m`, // Red\n warn: (text: string) => `\\u001b[33m${text}\\u001b[0m`, // Yellow\n info: (text: string) => `\\u001b[36m${text}\\u001b[0m`, // Cyan\n debug: (text: string) => `\\u001b[90m${text}\\u001b[0m`, // Gray\n }\n colorFn = colors[entry.level]\n consoleMethod = entry.level === 'debug' ? 'log' : entry.level\n } else {\n colorFn = (text: string) => text\n consoleMethod = entry.level === 'debug' ? 'log' : entry.level\n }\n\n const timestamp = new Date(entry.timestamp).toLocaleTimeString()\n const levelStr = entry.level.toUpperCase().padEnd(5)\n const contextStr = entry.context ? `[${entry.context}]` : ''\n\n let logMessage = `${timestamp} ${colorFn(levelStr)} ${contextStr} ${entry.message}`\n\n // Add data if present and in debug mode\n if (entry.data && entry.level === 'debug') {\n logMessage += `\\n${JSON.stringify(entry.data, null, 2)}`\n }\n\n // Add error stack if present\n if (entry.error?.stack) {\n logMessage += `\\n${entry.error.stack}`\n }\n\n console[consoleMethod](logMessage)\n }\n\n /**\n * Write to file\n */\n private writeToFile(entry: LogEntry): void {\n if (!this.options.file) return\n\n try {\n const filePath = resolve(this.options.file)\n\n // Ensure directory exists\n const dir = dirname(filePath)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n // Check file size and rotate if necessary\n this.rotateLogFile(filePath)\n\n // Format log entry\n let logLine: string\n\n if (this.options.json) {\n logLine = `${JSON.stringify(entry)}\\n`\n } else {\n const timestamp = entry.timestamp\n const level = entry.level.toUpperCase().padEnd(5)\n const context = entry.context ? `[${entry.context}]` : ''\n\n logLine = `${timestamp} ${level} ${context} ${entry.message}`\n\n if (entry.data) {\n logLine += ` | Data: ${JSON.stringify(entry.data)}`\n }\n\n if (entry.error) {\n logLine += ` | Error: ${entry.error.message}`\n if (entry.error.stack) {\n logLine += `\\n${entry.error.stack}`\n }\n }\n\n logLine += '\\n'\n }\n\n // Append to file\n writeFileSync(filePath, logLine, { flag: 'a', encoding: 'utf-8' })\n } catch (error) {\n // Fallback to console if file writing fails\n console.error('Failed to write to log file:', error)\n this.writeToConsole(entry)\n }\n }\n\n /**\n * Rotate log file if it exceeds size limit\n */\n private rotateLogFile(filePath: string): void {\n if (!existsSync(filePath)) return\n\n const config = getConfig().getConfig()\n const maxSize = this.parseSize(config.logging.maxSize)\n const maxFiles = config.logging.maxFiles\n\n try {\n const stats = statSync(filePath)\n\n if (stats.size < maxSize) {\n return\n }\n\n // Rotate files\n for (let i = maxFiles - 1; i > 0; i--) {\n const oldFile = `${filePath}.${i}`\n const newFile = `${filePath}.${i + 1}`\n\n if (existsSync(oldFile)) {\n if (i === maxFiles - 1) {\n // Delete oldest file\n require('node:fs').unlinkSync(oldFile)\n } else {\n // Rename file\n require('node:fs').renameSync(oldFile, newFile)\n }\n }\n }\n\n // Move current file to .1\n require('node:fs').renameSync(filePath, `${filePath}.1`)\n } catch (error) {\n console.warn('Failed to rotate log file:', error)\n }\n }\n\n /**\n * Parse size string (e.g., '10MB') to bytes\n */\n private parseSize(sizeStr: string): number {\n const units: Record<string, number> = {\n B: 1,\n KB: 1024,\n MB: 1024 * 1024,\n GB: 1024 * 1024 * 1024,\n }\n\n const match = sizeStr.match(/^(\\d+(?:\\.\\d+)?)\\s*([A-Z]+)$/i)\n if (!match) {\n return 10 * 1024 * 1024 // Default to 10MB\n }\n\n const [, size, unit] = match\n const multiplier = units[unit?.toUpperCase() || ''] || 1\n\n return Math.floor(parseFloat(size || '0') * multiplier)\n }\n\n /**\n * Set log level for this logger\n */\n setLevel(level: LogLevel): void {\n this.options.level = level\n }\n\n /**\n * Get current log level\n */\n getLevel(): LogLevel {\n return this.options.level\n }\n\n /**\n * Enable/disable console output\n */\n setConsole(enabled: boolean): void {\n this.options.console = enabled\n }\n\n /**\n * Set log file path\n */\n setFile(filePath: string | undefined): void {\n this.options.file = filePath\n }\n\n /**\n * Create a timer logger for performance measurement\n */\n timer(label: string): () => void {\n const start = Date.now()\n this.debug(`Timer started: ${label}`)\n\n return () => {\n const duration = Date.now() - start\n this.debug(`Timer finished: ${label} (${duration}ms)`)\n }\n }\n\n /**\n * Clear all logger instances (useful for testing)\n */\n static clearInstances(): void {\n Logger.instances.clear()\n }\n}\n\n// Default logger instance\nexport const logger = Logger.getLogger('pcu')\n\n// Convenience functions\nexport const createLogger = (context: string, options?: Partial<LoggerOptions>) =>\n Logger.getLogger(context, options)\n","/**\n * User-Friendly Error Handler\n *\n * Provides user-friendly error messages instead of exposing technical details.\n * Categorizes errors and provides helpful suggestions where possible.\n */\n\nimport chalk from 'chalk'\nimport { Logger } from '../logger/logger.js'\nimport { ErrorTracker } from './errorTracker.js'\n\nexport interface ErrorContext {\n packageName?: string\n operation?: string\n details?: string\n}\n\nexport interface PackageSuggestion {\n original: string\n suggestions: string[]\n reason: string\n}\n\nexport class UserFriendlyErrorHandler {\n private static logger = Logger.getLogger('ErrorHandler')\n\n // Common package name corrections\n private static packageSuggestions: Map<string, string[]> = new Map([\n // Framework packages\n ['sveltekit', ['@sveltejs/kit']],\n ['vue-router', ['vue-router']],\n ['vue-cli', ['@vue/cli']],\n ['angular-cli', ['@angular/cli']],\n ['angular-core', ['@angular/core']],\n ['angular-universal', ['@nguniversal/express-engine', '@angular/universal']],\n ['react-router', ['react-router-dom']],\n ['react-dom', ['react-dom']],\n ['nextjs', ['next']],\n ['nuxtjs', ['nuxt']],\n\n // UI Libraries\n ['material-ui', ['@mui/material', '@material-ui/core']],\n ['mui', ['@mui/material']],\n ['antd', ['antd']],\n ['ant-design', ['antd']],\n ['prime-ng', ['primeng']],\n ['primeng', ['primeng']],\n ['ng-zorro', ['ng-zorro-antd']],\n ['bootstrap-vue', ['bootstrap-vue']],\n ['vuetify', ['vuetify']],\n ['quasar', ['quasar']],\n ['onsen-ui', ['onsenui']],\n ['ionic', ['@ionic/angular', '@ionic/react', '@ionic/vue']],\n\n // CSS Frameworks\n ['tailwindcss', ['tailwindcss']],\n ['tailwind', ['tailwindcss']],\n ['bulma', ['bulma']],\n ['water-css', ['water.css']],\n ['holiday-css', ['@holiday-css/main']],\n ['wing-css', ['@wing-css/wing']],\n ['picnic-css', ['picnicss']],\n\n // Build Tools & Bundlers\n ['webpack', ['webpack']],\n ['webpack-cli', ['webpack-cli']],\n ['rollup', ['rollup']],\n ['vite', ['vite']],\n ['parcel', ['parcel']],\n ['esbuild', ['esbuild']],\n ['swc', ['@swc/core']],\n\n // Testing\n ['jest', ['jest']],\n ['vitest', ['vitest']],\n ['mocha', ['mocha']],\n ['chai', ['chai']],\n ['cypress', ['cypress']],\n ['playwright', ['@playwright/test']],\n ['puppeteer', ['puppeteer']],\n ['selenium', ['selenium-webdriver']],\n ['webdriver', ['selenium-webdriver']],\n ['lambdatest', ['@lambdatest/selenium-webdriver']],\n ['applitools', ['@applitools/eyes-selenium']],\n ['experitest', ['@experitest/seetest-client']],\n ['kobiton', ['@kobiton/api']],\n ['crossbrowsertesting', ['@crossbrowsertesting/selenium']],\n\n // Cloud Services\n ['aws-sdk', ['@aws-sdk/client-s3', 'aws-sdk']],\n ['aws-device-farm', ['@aws-sdk/client-device-farm']],\n ['firebase', ['firebase']],\n ['firebase-test-lab', ['@google-cloud/testing']],\n ['azure', ['@azure/storage-blob', '@azure/cosmos']],\n ['azure-devtest-labs', ['@azure/arm-devtestlabs']],\n ['gcp', ['@google-cloud/storage']],\n\n // Databases & ORMs\n ['mongoose', ['mongoose']],\n ['sequelize', ['sequelize']],\n ['typeorm', ['typeorm']],\n ['prisma', ['@prisma/client']],\n ['knex', ['knex']],\n ['pg', ['pg']],\n ['mysql', ['mysql2']],\n ['sqlite', ['sqlite3']],\n ['redis', ['redis']],\n ['mongodb', ['mongodb']],\n\n // Utilities\n ['lodash', ['lodash']],\n ['loadash', ['lodash']],\n ['underscore', ['underscore']],\n ['ramda', ['ramda']],\n ['rxjs', ['rxjs']],\n ['axios', ['axios']],\n ['axois', ['axios']],\n ['fetch', ['node-fetch']],\n ['node-fetch', ['node-fetch']],\n ['request', ['axios', 'node-fetch']],\n ['superagent', ['superagent']],\n\n // Date/Time\n ['moment', ['moment']],\n ['momentjs', ['moment']],\n ['dayjs', ['dayjs']],\n ['date-fns', ['date-fns']],\n ['luxon', ['luxon']],\n\n // Linting & Formatting\n ['eslint', ['eslint']],\n ['prettier', ['prettier']],\n ['tslint', ['@typescript-eslint/eslint-plugin']],\n ['typescript-eslint', ['@typescript-eslint/eslint-plugin', '@typescript-eslint/parser']],\n\n // Type Definitions\n ['types-node', ['@types/node']],\n ['@types-node', ['@types/node']],\n ['types-react', ['@types/react']],\n ['types-express', ['@types/express']],\n\n // Backend Frameworks\n ['express', ['express']],\n ['expressjs', ['express']],\n ['fastify', ['fastify']],\n ['koa', ['koa']],\n ['nestjs', ['@nestjs/core']],\n ['nest', ['@nestjs/core']],\n ['hapi', ['@hapi/hapi']],\n\n // State Management\n ['redux', ['redux']],\n ['mobx', ['mobx']],\n ['vuex', ['vuex']],\n ['pinia', ['pinia']],\n ['zustand', ['zustand']],\n ['recoil', ['recoil']],\n\n // Styling\n ['styled-components', ['styled-components']],\n ['styled-component', ['styled-components']],\n ['emotion', ['@emotion/react']],\n ['sass', ['sass']],\n ['node-sass', ['sass']],\n ['less', ['less']],\n ['stylus', ['stylus']],\n\n // Admin/CMS\n ['forestadmin', ['forest-express', 'forest-express-sequelize']],\n ['strapi', ['@strapi/strapi']],\n ['keystone', ['@keystone-6/core']],\n ['ghost', ['ghost']],\n\n // Documentation\n ['storybook', ['@storybook/react', '@storybook/vue3']],\n ['docusaurus', ['@docusaurus/core']],\n ['gitbook', ['@gitbook/cli']],\n ['typedoc', ['typedoc']],\n\n // Desktop Apps\n ['electron', ['electron']],\n ['tauri', ['@tauri-apps/api']],\n ['nwjs', ['nw']],\n\n // Mobile Development\n ['react-native', ['react-native']],\n ['expo', ['expo']],\n ['cordova', ['cordova']],\n ['phonegap', ['phonegap']],\n\n // Common Misspellings\n ['jquery', ['jquery']],\n ['boostrap', ['bootstrap']],\n ['bootstrap', ['bootstrap']],\n ['fontawesome', ['@fortawesome/fontawesome-free']],\n ['font-awesome', ['@fortawesome/fontawesome-free']],\n\n // Internationalization\n ['react-i18n', ['react-i18next']],\n ['i18n', ['i18next']],\n ['i18next', ['i18next']],\n ['vue-i18n', ['vue-i18n']],\n ['react-intl', ['react-intl']],\n ['intl', ['intl']],\n\n // Data Visualization & Charts\n ['chart', ['chart.js']],\n ['chartjs', ['chart.js']],\n ['chart.js', ['chart.js']],\n ['d3', ['d3']],\n ['d3js', ['d3']],\n ['plotly', ['plotly.js']],\n ['echarts', ['echarts']],\n ['highcharts', ['highcharts']],\n ['recharts', ['recharts']],\n ['victory', ['victory']],\n ['nivo', ['@nivo/core']],\n ['observable', ['@observablehq/plot']],\n\n // Real-time Communication & WebRTC\n ['socket.io', ['socket.io']],\n ['socketio', ['socket.io']],\n ['websocket', ['ws']],\n ['ws', ['ws']],\n ['webrtc', ['simple-peer']],\n ['peer', ['peerjs']],\n ['peerjs', ['peerjs']],\n ['signalr', ['@microsoft/signalr']],\n\n // Blockchain & Web3\n ['web3', ['web3']],\n ['web3js', ['web3']],\n ['ethers', ['ethers']],\n ['ethersjs', ['ethers']],\n ['ethereum', ['web3', 'ethers']],\n ['metamask', ['@metamask/sdk']],\n ['wagmi', ['wagmi']],\n ['rainbow-kit', ['@rainbow-me/rainbowkit']],\n ['wallet-connect', ['@walletconnect/client']],\n\n // Machine Learning & AI\n ['tensorflow', ['@tensorflow/tfjs']],\n ['tensorflowjs', ['@tensorflow/tfjs']],\n ['tfjs', ['@tensorflow/tfjs']],\n ['brain', ['brain.js']],\n ['brainjs', ['brain.js']],\n ['synaptic', ['synaptic']],\n ['ml-matrix', ['ml-matrix']],\n ['opencv', ['opencv4nodejs']],\n\n // Image Processing\n ['sharp', ['sharp']],\n ['jimp', ['jimp']],\n ['canvas', ['canvas']],\n ['fabric', ['fabric']],\n ['fabricjs', ['fabric']],\n ['konva', ['konva']],\n ['konvajs', ['konva']],\n ['p5', ['p5']],\n ['p5js', ['p5']],\n ['three', ['three']],\n ['threejs', ['three']],\n\n // Audio/Video Processing\n ['howler', ['howler']],\n ['howlerjs', ['howler']],\n ['tone', ['tone']],\n ['tonejs', ['tone']],\n ['video', ['video.js']],\n ['videojs', ['video.js']],\n ['hls', ['hls.js']],\n ['hlsjs', ['hls.js']],\n ['dash', ['dashjs']],\n ['dashjs', ['dashjs']],\n\n // Game Development\n ['phaser', ['phaser']],\n ['phaserjs', ['phaser']],\n ['pixijs', ['pixi.js']],\n ['pixi', ['pixi.js']],\n ['babylonjs', ['babylonjs']],\n ['babylon', ['babylonjs']],\n ['aframe', ['aframe']],\n\n // IoT & Hardware\n ['johnny-five', ['johnny-five']],\n ['arduino', ['johnny-five']],\n ['raspberry-pi', ['raspi']],\n ['raspi', ['raspi']],\n ['serialport', ['serialport']],\n ['noble', ['noble']],\n ['bluetooth', ['noble']],\n\n // Progressive Web Apps\n ['workbox', ['workbox-webpack-plugin']],\n ['sw-precache', ['workbox-webpack-plugin']],\n ['service-worker', ['workbox-webpack-plugin']],\n ['pwa', ['workbox-webpack-plugin']],\n\n // Map & Geolocation\n ['leaflet', ['leaflet']],\n ['mapbox', ['mapbox-gl']],\n ['google-maps', ['@googlemaps/js-api-loader']],\n ['googlemaps', ['@googlemaps/js-api-loader']],\n ['openlayers', ['ol']],\n ['ol', ['ol']],\n\n // Animation\n ['gsap', ['gsap']],\n ['anime', ['animejs']],\n ['animejs', ['animejs']],\n ['lottie', ['lottie-web']],\n ['lottie-web', ['lottie-web']],\n ['framer-motion', ['framer-motion']],\n ['react-spring', ['react-spring']],\n\n // Form & Validation\n ['formik', ['formik']],\n ['react-hook-form', ['react-hook-form']],\n ['yup', ['yup']],\n ['joi', ['joi']],\n ['ajv', ['ajv']],\n ['zod', ['zod']],\n ['superstruct', ['superstruct']],\n\n // Editor & Rich Text\n ['quill', ['quill']],\n ['quilljs', ['quill']],\n ['tinymce', ['tinymce']],\n ['ckeditor', ['@ckeditor/ckeditor5-build-classic']],\n ['slate', ['slate']],\n ['slatejs', ['slate']],\n ['draft', ['draft-js']],\n ['draftjs', ['draft-js']],\n ['monaco', ['monaco-editor']],\n ['monaco-editor', ['monaco-editor']],\n\n // HTTP & API\n ['apollo', ['@apollo/client']],\n ['apollo-client', ['@apollo/client']],\n ['graphql', ['graphql']],\n ['relay', ['react-relay']],\n ['urql', ['urql']],\n ['swr', ['swr']],\n ['react-query', ['@tanstack/react-query']],\n ['tanstack-query', ['@tanstack/react-query']],\n\n // More Common Typos\n ['reac', ['react']],\n ['reactjs', ['react']],\n ['veu', ['vue']],\n ['vuejs', ['vue']],\n ['angualr', ['@angular/core']],\n ['svelt', ['svelte']],\n ['sveltte', ['svelte']],\n ['typescirpt', ['typescript']],\n ['typescript', ['typescript']],\n ['javasript', ['node']],\n ['javascript', ['node']],\n\n // DevOps & CI/CD\n ['docker', ['dockerode']],\n ['k8s', ['@kubernetes/client-node']],\n ['kubernetes', ['@kubernetes/client-node']],\n ['kubectl', ['@kubernetes/client-node']],\n ['helm', ['@helm/sdk']],\n ['jenkins', ['jenkins']],\n ['circleci', ['@circleci/circleci-config-sdk']],\n ['github-actions', ['@actions/core', '@actions/github']],\n ['gitlab-ci', ['@gitbeaker/node']],\n ['travis', ['@travis-ci/travis-yml']],\n ['terraform', ['@cdktf/provider-aws']],\n ['ansible', ['@ansible/galaxy']],\n ['vagrant', ['vagrant']],\n ['consul', ['consul']],\n ['vault', ['node-vault']],\n ['nomad', ['nomad-client']],\n\n // 监控和日志\n ['winston', ['winston']],\n ['morgan', ['morgan']],\n ['pino', ['pino']],\n ['bunyan', ['bunyan']],\n ['log4js', ['log4js']],\n ['sentry', ['@sentry/node', '@sentry/react']],\n ['bugsnag', ['@bugsnag/js']],\n ['rollbar', ['rollbar']],\n ['newrelic', ['newrelic']],\n ['datadog', ['@datadog/browser-rum']],\n ['prometheus', ['prom-client']],\n ['grafana', ['@grafana/toolkit']],\n ['elastic', ['@elastic/elasticsearch']],\n ['elasticsearch', ['@elastic/elasticsearch']],\n ['kibana', ['@elastic/kibana-utils']],\n ['logstash', ['@elastic/logstash']],\n\n // 微服务架构\n ['microservices', ['express']],\n ['service-mesh', ['istio']],\n ['envoy', ['envoy']],\n ['istio', ['istio']],\n ['linkerd', ['linkerd']],\n ['consul-connect', ['consul']],\n ['eureka', ['eureka-js-client']],\n ['zookeeper', ['node-zookeeper-client']],\n ['etcd', ['etcd3']],\n ['grpc', ['@grpc/grpc-js']],\n ['protobuf', ['protobufjs']],\n\n // 缓存系统\n ['redis', ['redis']],\n ['memcached', ['memcached']],\n ['node-cache', ['node-cache']],\n ['memory-cache', ['memory-cache']],\n ['lru-cache', ['lru-cache']],\n ['cache-manager', ['cache-manager']],\n ['ioredis', ['ioredis']],\n ['hazelcast', ['hazelcast-client']],\n\n // 消息队列\n ['rabbitmq', ['amqplib']],\n ['kafka', ['kafkajs']],\n ['apache-kafka', ['kafkajs']],\n ['bull', ['bull']],\n ['bullmq', ['bullmq']],\n ['bee-queue', ['bee-queue']],\n ['kue', ['kue']],\n ['agenda', ['agenda']],\n ['amqp', ['amqplib']],\n ['mqtt', ['mqtt']],\n ['nats', ['nats']],\n ['zeromq', ['zeromq']],\n ['zmq', ['zeromq']],\n\n // 搜索引擎\n ['solr', ['solr-client']],\n ['algolia', ['algoliasearch']],\n ['sphinx', ['sphinxapi']],\n ['lucene', ['lucene']],\n ['whoosh', ['whoosh']],\n ['meilisearch', ['meilisearch']],\n ['typesense', ['typesense']],\n\n // 文件上传处理\n ['multer', ['multer']],\n ['formidable', ['formidable']],\n ['busboy', ['busboy']],\n ['multiparty', ['multiparty']],\n ['file-upload', ['express-fileupload']],\n ['cloudinary', ['cloudinary']],\n ['aws-s3', ['@aws-sdk/client-s3']],\n\n // 加密和安全\n ['bcrypt', ['bcrypt']],\n ['bcryptjs', ['bcryptjs']],\n ['crypto', ['crypto-js']],\n ['crypto-js', ['crypto-js']],\n ['jsonwebtoken', ['jsonwebtoken']],\n ['jwt', ['jsonwebtoken']],\n ['passport', ['passport']],\n ['helmet', ['helmet']],\n ['cors', ['cors']],\n ['express-rate-limit', ['express-rate-limit']],\n ['rate-limiter', ['express-rate-limit']],\n ['argon2', ['argon2']],\n ['scrypt', ['scrypt']],\n ['node-rsa', ['node-rsa']],\n ['speakeasy', ['speakeasy']],\n ['otplib', ['otplib']],\n\n // 邮件服务\n ['nodemailer', ['nodemailer']],\n ['sendgrid', ['@sendgrid/mail']],\n ['mailgun', ['mailgun.js']],\n ['ses', ['@aws-sdk/client-ses']],\n ['postmark', ['postmark']],\n ['sparkpost', ['sparkpost']],\n ['mandrill', ['mandrill-api']],\n ['mailchimp', ['@mailchimp/mailchimp_marketing']],\n ['email-templates', ['email-templates']],\n\n // 模板引擎\n ['handlebars', ['handlebars']],\n ['hbs', ['hbs']],\n ['mustache', ['mustache']],\n ['pug', ['pug']],\n ['jade', ['pug']], // jade was renamed to pug\n ['ejs', ['ejs']],\n ['nunjucks', ['nunjucks']],\n ['twig', ['twig']],\n ['dust', ['dustjs-linkedin']],\n\n // Serverless框架\n ['serverless', ['serverless']],\n ['sls', ['serverless']],\n ['lambda', ['aws-lambda']],\n ['azure-functions', ['@azure/functions']],\n ['google-functions', ['@google-cloud/functions-framework']],\n ['netlify-lambda', ['netlify-lambda']],\n ['vercel', ['@vercel/node']],\n ['claudia', ['claudia']],\n ['apex', ['apex']],\n ['sam', ['@aws-cdk/aws-sam']],\n\n // 更多数据库\n ['couchdb', ['nano']],\n ['pouchdb', ['pouchdb']],\n ['neo4j', ['neo4j-driver']],\n ['influxdb', ['influx']],\n ['cassandra', ['cassandra-driver']],\n ['rethinkdb', ['rethinkdb']],\n ['orientdb', ['orientjs']],\n ['arangodb', ['arangojs']],\n ['leveldb', ['level']],\n ['rocksdb', ['rocksdb']],\n ['sqlite', ['sqlite3', 'better-sqlite3']],\n ['mariadb', ['mariadb']],\n ['cockroachdb', ['pg']], // uses pg driver\n\n // 更多云服务\n ['heroku', ['heroku']],\n ['digitalocean', ['@digitalocean/droplet-api']],\n ['linode', ['@linode/api-v4']],\n ['vultr', ['@vultr/vultr-node']],\n ['scaleway', ['@scaleway/sdk']],\n ['ovh', ['ovh']],\n ['cloudflare', ['cloudflare']],\n ['fastly', ['fastly']],\n ['maxcdn', ['maxcdn']],\n ['bunnycdn', ['bunnycdn']],\n\n // 性能分析和优化\n ['lighthouse', ['lighthouse']],\n ['webpagetest', ['webpagetest']],\n ['clinic', ['clinic']],\n ['0x', ['0x']],\n ['autocannon', ['autocannon']],\n ['loadtest', ['loadtest']],\n ['artillery', ['artillery']],\n ['k6', ['k6']],\n ['benchmark', ['benchmark']],\n ['clinic.js', ['clinic']],\n\n // 更多拼写错误和变体\n ['expressjs', ['express']],\n ['node.js', ['node']],\n ['nodejs', ['node']],\n ['npm', ['npm']],\n ['yarn', ['yarn']],\n ['pnpm', ['pnpm']],\n ['bun', ['bun']],\n ['deno', ['deno']],\n ['typescript', ['typescript']],\n ['js', ['javascript']],\n ['ts', ['typescript']],\n ['html', ['html']],\n ['css', ['css']],\n ['json', ['json']],\n ['xml', ['xml2js']],\n ['yaml', ['yaml']],\n ['toml', ['@iarna/toml']],\n ['ini', ['ini']],\n ['csv', ['csv-parser', 'papaparse']],\n ['pdf', ['pdf2pic', 'pdfkit']],\n ['excel', ['xlsx']],\n ['word', ['mammoth']],\n ['zip', ['node-zip']],\n ['tar', ['tar']],\n ['gzip', ['zlib']],\n\n // 数据处理和转换\n ['cheerio', ['cheerio']],\n ['jsdom', ['jsdom']],\n ['xml2js', ['xml2js']],\n ['csv-parse', ['csv-parse']],\n ['papaparse', ['papaparse']],\n ['fast-csv', ['fast-csv']],\n ['xlsx', ['xlsx']],\n ['pdfkit', ['pdfkit']],\n ['jspdf', ['jspdf']],\n ['mammoth', ['mammoth']],\n ['pdf-parse', ['pdf-parse']],\n\n // CLI工具\n ['commander', ['commander']],\n ['yargs', ['yargs']],\n ['inquirer', ['inquirer']],\n ['chalk', ['chalk']],\n ['ora', ['ora']],\n ['cli-progress', ['cli-progress']],\n ['figlet', ['figlet']],\n ['boxen', ['boxen']],\n ['update-notifier', ['update-notifier']],\n ['meow', ['meow']],\n ['arg', ['arg']],\n ['minimist', ['minimist']],\n ])\n\n /**\n * Handle package not found errors (404)\n */\n static handlePackageNotFound(packageName: string, context?: ErrorContext): void {\n const suggestions = UserFriendlyErrorHandler.packageSuggestions.get(packageName)\n\n if (suggestions && suggestions.length > 0) {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 不存在`))\n console.log(chalk.cyan(`💡 可能的正确包名:`))\n suggestions.forEach((suggestion) => {\n console.log(chalk.cyan(` • ${suggestion}`))\n })\n } else {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 在 npm registry 中不存在`))\n console.log(chalk.cyan(`💡 请检查包名是否正确,或者该包可能已被移除`))\n }\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, new Error('Package not found (404)'))\n\n // Log technical details for debugging\n UserFriendlyErrorHandler.logger.debug('Package not found', { packageName, context })\n }\n\n /**\n * Handle empty version errors\n */\n static handleEmptyVersion(packageName: string, context?: ErrorContext): void {\n console.log(chalk.yellow(`⚠️ 包 \"${packageName}\" 的版本信息为空`))\n console.log(chalk.cyan(`💡 这可能是由于:`))\n console.log(chalk.cyan(` • 包的 package.json 配置问题`))\n console.log(chalk.cyan(` • catalog 配置中的版本格式错误`))\n console.log(chalk.cyan(` • npm registry 数据同步问题`))\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, new Error('Version string cannot be empty'))\n\n UserFriendlyErrorHandler.logger.debug('Empty version string', { packageName, context })\n }\n\n /**\n * Handle network/timeout errors\n */\n static handleNetworkError(packageName: string, error: Error, context?: ErrorContext): void {\n console.log(chalk.yellow(`⚠️ 检查包 \"${packageName}\" 时遇到网络问题`))\n console.log(chalk.cyan(`💡 请稍后重试,或检查网络连接`))\n\n // Track for summary\n ErrorTracker.trackSkippedPackage(packageName, error)\n\n UserFriendlyErrorHandler.logger.debug('Network error', {\n packageName,\n error: error.message,\n context,\n })\n }\n\n /**\n * Handle security check failures\n */\n static handleSecurityCheckFailure(\n packageName: string,\n error: Error,\n context?: ErrorContext\n ): void {\n // Track for statistics\n ErrorTracker.trackSecurityFailure()\n\n // Only show user-friendly message, don't expose technical details\n UserFriendlyErrorHandler.logger.debug(`Security check failed for ${packageName}`, {\n error: error.message,\n context,\n })\n\n // Don't spam the user with security check failures unless it's critical\n if (context?.operation === 'update' || context?.operation === 'security-audit') {\n console.log(chalk.yellow(`⚠️ 无法检查 \"${packageName}\" 的安全状态`))\n }\n }\n\n /**\n * Handle retry attempts silently\n */\n static handleRetryAttempt(\n packageName: string,\n attempt: number,\n maxRetries: number,\n error: Error\n ): void {\n // Log for debugging but don't spam users\n UserFriendlyErrorHandler.logger.debug(\n `Retry attempt ${attempt}/${maxRetries} for ${packageName}`,\n {\n error: error.message,\n }\n )\n\n // Only show to user on final failure\n if (attempt === maxRetries) {\n UserFriendlyErrorHandler.handleFinalFailure(packageName, error)\n }\n }\n\n /**\n * Handle final failure after retries\n */\n static handleFinalFailure(packageName: string, error: Error): void {\n if (error.message.includes('404') || error.message.includes('Not found')) {\n UserFriendlyErrorHandler.handlePackageNotFound(packageName)\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n UserFriendlyErrorHandler.handleNetworkError(packageName, error)\n } else if (error.message.includes('Version string cannot be empty')) {\n UserFriendlyErrorHandler.handleEmptyVersion(packageName)\n } else {\n // Generic error handling\n console.log(chalk.yellow(`⚠️ 跳过包 \"${packageName}\" (检查失败)`))\n UserFriendlyErrorHandler.logger.debug('Package check failed', {\n packageName,\n error: error.message,\n })\n }\n }\n\n /**\n * Handle general package query failures\n */\n static handlePackageQueryFailure(\n packageName: string,\n error: Error,\n context?: ErrorContext\n ): void {\n // Categorize the error and provide appropriate user message\n if (error.message.includes('404') || error.message.includes('Not found')) {\n UserFriendlyErrorHandler.handlePackageNotFound(packageName, context)\n } else if (error.message.includes('Version string cannot be empty')) {\n UserFriendlyErrorHandler.handleEmptyVersion(packageName, context)\n } else if (error.message.includes('timeout') || error.message.includes('ETIMEDOUT')) {\n UserFriendlyErrorHandler.handleNetworkError(packageName, error, context)\n } else {\n // For other errors, just skip silently and log for debugging\n ErrorTracker.trackSkippedPackage(packageName, error)\n UserFriendlyErrorHandler.logger.debug(`Package query failed for ${packageName}`, {\n error: error.message,\n context,\n })\n }\n }\n\n /**\n * Show summary of skipped packages\n */\n static showSkippedPackagesSummary(): void {\n const totalSkipped = ErrorTracker.getTotalSkipped()\n if (totalSkipped === 0) return\n\n console.log()\n console.log(chalk.cyan(`📋 跳过了 ${totalSkipped} 个包的检查:`))\n\n const grouped = ErrorTracker.getSkippedPackages()\n\n if (grouped.notFound.length > 0) {\n console.log(\n chalk.yellow(` 不存在的包 (${grouped.notFound.length}): ${grouped.notFound.join(', ')}`)\n )\n }\n\n if (grouped.emptyVersion.length > 0) {\n console.log(\n chalk.yellow(\n ` 版本信息为空 (${grouped.emptyVersion.length}): ${grouped.emptyVersion.join(', ')}`\n )\n )\n }\n\n if (grouped.network.length > 0) {\n console.log(\n chalk.yellow(` 网络问题 (${grouped.network.length}): ${grouped.network.join(', ')}`)\n )\n }\n\n if (grouped.other.length > 0) {\n console.log(\n chalk.yellow(` 其他问题 (${grouped.other.length}): ${grouped.other.join(', ')}`)\n )\n }\n\n const stats = ErrorTracker.getErrorStats()\n if (stats.security > 0) {\n console.log(chalk.gray(` 安全检查失败: ${stats.security} 次`))\n }\n }\n\n /**\n * Get statistics for reporting\n */\n static getStatistics(): {\n totalSkipped: number\n errorBreakdown: ReturnType<typeof ErrorTracker.getErrorStats>\n skippedPackages: ReturnType<typeof ErrorTracker.getSkippedPackages>\n } {\n return {\n totalSkipped: ErrorTracker.getTotalSkipped(),\n errorBreakdown: ErrorTracker.getErrorStats(),\n skippedPackages: ErrorTracker.getSkippedPackages(),\n }\n }\n\n /**\n * Reset error tracking (useful for testing)\n */\n static resetTracking(): void {\n ErrorTracker.reset()\n }\n\n /**\n * Add a new package suggestion\n */\n static addPackageSuggestion(originalName: string, suggestions: string[]): void {\n UserFriendlyErrorHandler.packageSuggestions.set(originalName, suggestions)\n }\n\n /**\n * Get suggestions for a package name\n */\n static getPackageSuggestions(packageName: string): string[] {\n return UserFriendlyErrorHandler.packageSuggestions.get(packageName) || []\n }\n}\n","/**\n * Error Handling Module\n *\n * Provides centralized error handling for user-friendly error messages\n * and error tracking/statistics.\n */\n\nexport type { SkippedPackage } from './errorTracker.js'\nexport { ErrorTracker } from './errorTracker.js'\nexport type { ErrorContext, PackageSuggestion } from './userFriendlyErrorHandler.js'\nexport { UserFriendlyErrorHandler } from './userFriendlyErrorHandler.js'\n","/**\n * Logger Module Entry Point\n */\n\nexport * from './logger.js'\nexport { logger as default } from './logger.js'\n","/**\n * CLI-specific Type Definitions\n */\n\n/**\n * CLI command execution context\n */\nexport interface CliContext {\n command: string\n args: string[]\n options: Record<string, any>\n workingDirectory: string\n startTime: Date\n user?: string\n environment: Record<string, string>\n}\n\n/**\n * CLI command result\n */\nexport interface CliResult {\n exitCode: number\n stdout?: string\n stderr?: string\n duration: number\n command: string\n success: boolean\n}\n\n/**\n * CLI progress reporter\n */\nexport interface CliProgressReporter {\n start(message: string, total?: number): void\n update(current: number, message?: string): void\n increment(step?: number, message?: string): void\n succeed(message?: string): void\n fail(message?: string): void\n warn(message: string): void\n info(message: string): void\n stop(): void\n}\n\n/**\n * CLI input prompt options\n */\nexport interface PromptOptions {\n type: 'input' | 'confirm' | 'select' | 'multiselect' | 'password'\n message: string\n default?: any\n choices?: Array<{\n title: string\n value: any\n description?: string\n disabled?: boolean\n }>\n validate?: (value: any) => boolean | string\n format?: (value: any) => string\n initial?: any\n hint?: string\n}\n\n/**\n * CLI table column definition\n */\nexport interface TableColumn {\n header: string\n field: string\n width?: number\n align?: 'left' | 'center' | 'right'\n format?: (value: any) => string\n color?: (value: any) => string\n}\n\n/**\n * CLI table options\n */\nexport interface TableOptions {\n columns: TableColumn[]\n data: Record<string, any>[]\n title?: string\n border?: boolean\n compact?: boolean\n maxWidth?: number\n sortBy?: string\n sortDirection?: 'asc' | 'desc'\n}\n\n/**\n * CLI spinner options\n */\nexport interface SpinnerOptions {\n text: string\n color?: 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray'\n spinner?: string\n interval?: number\n stream?: NodeJS.WriteStream\n}\n\n/**\n * CLI notification\n */\nexport interface CliNotification {\n type: 'success' | 'error' | 'warning' | 'info'\n title: string\n message?: string\n actions?: Array<{\n title: string\n action: () => void | Promise<void>\n }>\n timeout?: number\n persistent?: boolean\n}\n\n/**\n * CLI error with additional context\n */\nexport interface CliError extends Error {\n code?: string\n exitCode?: number\n command?: string\n args?: string[]\n suggestions?: string[]\n helpUrl?: string\n context?: Record<string, any>\n}\n\n/**\n * CLI help section\n */\nexport interface HelpSection {\n title: string\n content: string\n order?: number\n}\n\n/**\n * CLI command definition\n */\nexport interface CommandDefinition {\n name: string\n description: string\n usage?: string\n aliases?: string[]\n options?: OptionDefinition[]\n examples?: Example[]\n subcommands?: CommandDefinition[]\n hidden?: boolean\n deprecated?: boolean\n category?: string\n}\n\n/**\n * CLI option definition\n */\nexport interface OptionDefinition {\n flags: string\n description: string\n default?: any\n choices?: string[]\n required?: boolean\n multiple?: boolean\n type?: 'string' | 'number' | 'boolean'\n env?: string\n hidden?: boolean\n deprecated?: boolean\n}\n\n/**\n * CLI example\n */\nexport interface Example {\n description: string\n command: string\n output?: string\n}\n\n/**\n * CLI theme configuration\n */\nexport interface CliTheme {\n colors: {\n primary: string\n secondary: string\n success: string\n warning: string\n error: string\n info: string\n muted: string\n bright: string\n }\n symbols: {\n success: string\n error: string\n warning: string\n info: string\n question: string\n pointer: string\n line: string\n corner: string\n }\n styles: {\n header: (text: string) => string\n subheader: (text: string) => string\n emphasis: (text: string) => string\n code: (text: string) => string\n url: (text: string) => string\n }\n}\n\n/**\n * CLI autocomplete suggestion\n */\nexport interface AutocompleteSuggestion {\n value: string\n description?: string\n type: 'command' | 'option' | 'argument' | 'file' | 'directory'\n priority?: number\n}\n\n/**\n * CLI session information\n */\nexport interface CliSession {\n id: string\n startTime: Date\n user: string\n terminal: string\n shell: string\n commands: Array<{\n command: string\n timestamp: Date\n duration: number\n exitCode: number\n }>\n environment: Record<string, string>\n}\n\n/**\n * CLI metrics\n */\nexport interface CliMetrics {\n totalCommands: number\n successfulCommands: number\n failedCommands: number\n averageExecutionTime: number\n mostUsedCommands: Array<{\n command: string\n count: number\n }>\n errorsByType: Record<string, number>\n usageByHour: number[]\n}\n\n/**\n * CLI update information\n */\nexport interface UpdateInfo {\n currentVersion: string\n latestVersion: string\n hasUpdate: boolean\n changelog?: string\n downloadUrl?: string\n releaseDate?: Date\n breaking?: boolean\n}\n\n/**\n * CLI extension information\n */\nexport interface ExtensionInfo {\n name: string\n version: string\n description: string\n author: string\n enabled: boolean\n commands?: CommandDefinition[]\n hooks?: Array<{\n event: string\n handler: string\n }>\n dependencies?: string[]\n}\n","/**\n * Core Type Definitions\n */\n\n/**\n * Generic Result type for operations that can succeed or fail\n */\nexport interface Result<T = void, E = Error> {\n success: boolean\n data?: T\n error?: E\n message?: string\n}\n\n/**\n * Success result constructor\n */\nexport function Success<T>(data?: T, message?: string): Result<T> {\n const result: Result<T> = {\n success: true,\n }\n if (data !== undefined) {\n result.data = data\n }\n if (message !== undefined) {\n result.message = message\n }\n return result\n}\n\n/**\n * Error result constructor\n */\nexport function Failure<E = Error>(error: E, message?: string): Result<never, E> {\n const result: Result<never, E> = {\n success: false,\n error,\n }\n if (message !== undefined) {\n result.message = message\n }\n return result\n}\n\n/**\n * Progress information for long-running operations\n */\nexport interface ProgressInfo {\n current: number\n total: number\n percentage: number\n message?: string\n startTime: number\n estimatedTimeRemaining?: number\n}\n\n/**\n * Statistical information\n */\nexport interface Statistics {\n count: number\n min?: number\n max?: number\n avg?: number\n sum?: number\n}\n\n/**\n * Time range\n */\nexport interface TimeRange {\n start: Date\n end: Date\n duration: number // milliseconds\n}\n\n/**\n * File information\n */\nexport interface FileInfo {\n path: string\n name: string\n extension: string\n size: number\n lastModified: Date\n isDirectory: boolean\n exists: boolean\n}\n\n/**\n * Network response information\n */\nexport interface NetworkResponse<T = any> {\n status: number\n statusText: string\n data: T\n headers: Record<string, string>\n timing: {\n start: number\n end: number\n duration: number\n }\n}\n\n/**\n * Cache metadata\n */\nexport interface CacheMetadata {\n key: string\n createdAt: Date\n expiresAt: Date\n size: number\n hitCount: number\n lastAccessed: Date\n}\n\n/**\n * Log context for structured logging\n */\nexport interface LogContext {\n operation?: string\n userId?: string\n requestId?: string\n sessionId?: string\n correlationId?: string\n tags?: string[]\n metadata?: Record<string, any>\n}\n\n/**\n * Feature flag definition\n */\nexport interface FeatureFlag {\n name: string\n enabled: boolean\n description?: string\n rolloutPercentage?: number\n conditions?: Record<string, any>\n}\n\n/**\n * Environment information\n */\nexport interface Environment {\n name: 'development' | 'staging' | 'production' | 'test'\n version: string\n buildDate: Date\n commitHash?: string\n branch?: string\n nodeVersion: string\n platform: string\n arch: string\n}\n\n/**\n * Resource usage information\n */\nexport interface ResourceUsage {\n memory: {\n used: number\n available: number\n percentage: number\n }\n cpu: {\n usage: number\n cores: number\n }\n disk?: {\n used: number\n available: number\n percentage: number\n }\n}\n\n/**\n * Pagination parameters\n */\nexport interface PaginationParams {\n page: number\n limit: number\n offset: number\n total?: number\n}\n\n/**\n * Paginated response\n */\nexport interface PaginatedResponse<T> {\n data: T[]\n pagination: PaginationParams & {\n hasNext: boolean\n hasPrevious: boolean\n totalPages: number\n }\n}\n\n/**\n * Search parameters\n */\nexport interface SearchParams {\n query: string\n filters?: Record<string, any>\n sort?: {\n field: string\n direction: 'asc' | 'desc'\n }\n pagination?: PaginationParams\n}\n\n/**\n * Diff information\n */\nexport interface Diff<T = any> {\n added: T[]\n removed: T[]\n modified: Array<{\n old: T\n new: T\n changes: string[]\n }>\n unchanged: T[]\n}\n\n/**\n * Health check status\n */\nexport interface HealthStatus {\n status: 'healthy' | 'unhealthy' | 'degraded'\n timestamp: Date\n uptime: number\n version: string\n services: Record<\n string,\n {\n status: 'up' | 'down' | 'degraded'\n responseTime?: number\n message?: string\n }\n >\n}\n\n/**\n * Event information\n */\nexport interface EventInfo {\n id: string\n type: string\n timestamp: Date\n source: string\n data: any\n metadata?: Record<string, any>\n}\n\n/**\n * Subscription information\n */\nexport interface Subscription {\n id: string\n eventType: string\n callback: (event: EventInfo) => void | Promise<void>\n filter?: (event: EventInfo) => boolean\n created: Date\n lastTriggered?: Date\n triggerCount: number\n}\n\n/**\n * Rate limit information\n */\nexport interface RateLimit {\n limit: number\n remaining: number\n reset: Date\n window: number // seconds\n}\n\n/**\n * Retry configuration\n */\nexport interface RetryConfig {\n maxAttempts: number\n baseDelay: number\n maxDelay: number\n backoffFactor: number\n shouldRetry?: (error: any) => boolean\n}\n\n/**\n * Timeout configuration\n */\nexport interface TimeoutConfig {\n connect: number\n request: number\n response: number\n}\n\n/**\n * Lock information\n */\nexport interface LockInfo {\n id: string\n owner: string\n acquired: Date\n expires: Date\n renewable: boolean\n metadata?: Record<string, any>\n}\n","/**\n * Common Types\n *\n * Project-wide TypeScript type definitions.\n */\n\nexport * from './cli.js'\nexport * from './core.js'\n","/**\n * Async Utilities\n */\n\n/**\n * Delay execution for specified milliseconds\n */\nexport function delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * Retry a function with exponential backoff\n */\nexport async function retry<T>(\n fn: () => Promise<T>,\n options: {\n maxAttempts?: number\n baseDelay?: number\n maxDelay?: number\n backoffFactor?: number\n shouldRetry?: (error: any) => boolean\n } = {}\n): Promise<T> {\n const {\n maxAttempts = 3,\n baseDelay = 1000,\n maxDelay = 30000,\n backoffFactor = 2,\n shouldRetry = () => true,\n } = options\n\n let lastError: any\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn()\n } catch (error) {\n lastError = error\n\n if (attempt === maxAttempts || !shouldRetry(error)) {\n throw error\n }\n\n const delayMs = Math.min(baseDelay * backoffFactor ** (attempt - 1), maxDelay)\n await delay(delayMs)\n }\n }\n\n throw lastError\n}\n\n/**\n * Execute functions in parallel with concurrency limit\n */\nexport async function parallelLimit<T, R>(\n items: T[],\n fn: (item: T, index: number) => Promise<R>,\n limit: number = 5\n): Promise<R[]> {\n const results: R[] = new Array(items.length)\n const executing: Promise<void>[] = []\n\n for (let i = 0; i < items.length; i++) {\n const promise = fn(items[i]!, i).then((result) => {\n results[i] = result\n })\n\n executing.push(promise)\n\n if (executing.length >= limit) {\n await Promise.race(executing)\n executing.splice(executing.indexOf(promise), 1)\n }\n }\n\n await Promise.all(executing)\n return results\n}\n\n/**\n * Race with timeout\n */\nexport async function timeout<T>(promise: Promise<T>, ms: number, message?: string): Promise<T> {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => {\n reject(new Error(message || `Operation timed out after ${ms}ms`))\n }, ms)\n })\n\n return Promise.race([promise, timeoutPromise])\n}\n\n/**\n * Debounce async function\n */\nexport function debounce<T extends (...args: any[]) => Promise<any>>(fn: T, ms: number): T {\n let timeoutId: NodeJS.Timeout\n let latestResolve: ((value: any) => void) | undefined\n let latestReject: ((reason: any) => void) | undefined\n\n return ((...args: any[]) => {\n return new Promise((resolve, reject) => {\n latestResolve = resolve\n latestReject = reject\n\n clearTimeout(timeoutId)\n timeoutId = setTimeout(async () => {\n try {\n const result = await fn(...args)\n latestResolve?.(result)\n } catch (error) {\n latestReject?.(error)\n }\n }, ms)\n })\n }) as T\n}\n\n/**\n * Throttle async function\n */\nexport function throttle<T extends (...args: any[]) => Promise<any>>(fn: T, ms: number): T {\n let inThrottle = false\n let lastResult: any\n\n return (async (...args: any[]) => {\n if (!inThrottle) {\n inThrottle = true\n lastResult = await fn(...args)\n setTimeout(() => {\n inThrottle = false\n }, ms)\n }\n return lastResult\n }) as T\n}\n\n/**\n * Create a cancelable promise\n */\nexport function cancelable<T>(promise: Promise<T>): { promise: Promise<T>; cancel: () => void } {\n let isCanceled = false\n\n const cancelablePromise = new Promise<T>((resolve, reject) => {\n promise\n .then((value) => {\n if (!isCanceled) {\n resolve(value)\n }\n })\n .catch((error) => {\n if (!isCanceled) {\n reject(error)\n }\n })\n })\n\n return {\n promise: cancelablePromise,\n cancel: () => {\n isCanceled = true\n },\n }\n}\n\n/**\n * Execute async function with circuit breaker pattern\n */\nexport class CircuitBreaker<T extends (...args: any[]) => Promise<any>> {\n private failures = 0\n private lastFailureTime = 0\n private state: 'closed' | 'open' | 'half-open' = 'closed'\n\n constructor(\n private fn: T,\n private options: {\n failureThreshold?: number\n recoveryTimeout?: number\n monitoringPeriod?: number\n } = {}\n ) {\n const { failureThreshold = 5, recoveryTimeout = 60000, monitoringPeriod = 10000 } = options\n\n this.options = { failureThreshold, recoveryTimeout, monitoringPeriod }\n }\n\n async execute(...args: Parameters<T>): Promise<ReturnType<T>> {\n if (this.state === 'open') {\n if (Date.now() - this.lastFailureTime > this.options.recoveryTimeout!) {\n this.state = 'half-open'\n } else {\n throw new Error('Circuit breaker is open')\n }\n }\n\n try {\n const result = await this.fn(...args)\n this.onSuccess()\n return result\n } catch (error) {\n this.onFailure()\n throw error\n }\n }\n\n private onSuccess(): void {\n this.failures = 0\n this.state = 'closed'\n }\n\n private onFailure(): void {\n this.failures++\n this.lastFailureTime = Date.now()\n\n if (this.failures >= this.options.failureThreshold!) {\n this.state = 'open'\n }\n }\n\n getState(): string {\n return this.state\n }\n\n reset(): void {\n this.failures = 0\n this.state = 'closed'\n this.lastFailureTime = 0\n }\n}\n\n/**\n * Async queue with concurrency control\n */\nexport class AsyncQueue<T = any> {\n private queue: Array<() => Promise<T>> = []\n private running = 0\n\n constructor(private concurrency: number = 1) {}\n\n async add<R>(fn: () => Promise<R>): Promise<R> {\n return new Promise((resolve, reject) => {\n this.queue.push(async () => {\n try {\n const result = await fn()\n resolve(result as any)\n return result as any\n } catch (error) {\n reject(error)\n throw error\n }\n })\n\n this.process()\n })\n }\n\n private async process(): Promise<void> {\n if (this.running >= this.concurrency || this.queue.length === 0) {\n return\n }\n\n this.running++\n const fn = this.queue.shift()!\n\n try {\n await fn()\n } finally {\n this.running--\n this.process()\n }\n }\n\n size(): number {\n return this.queue.length\n }\n\n clear(): void {\n this.queue.length = 0\n }\n}\n","/**\n * Format Utilities\n */\n\n/**\n * Format bytes to human readable string\n */\nexport function formatBytes(bytes: number, decimals: number = 2): string {\n if (bytes === 0) return '0 Bytes'\n\n const k = 1024\n const dm = decimals < 0 ? 0 : decimals\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`\n}\n\n/**\n * Format duration in milliseconds to human readable string\n */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`\n if (ms < 3600000) return `${(ms / 60000).toFixed(1)}m`\n return `${(ms / 3600000).toFixed(1)}h`\n}\n\n/**\n * Format number with thousands separator\n */\nexport function formatNumber(num: number, separator: string = ','): string {\n return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, separator)\n}\n\n/**\n * Format percentage\n */\nexport function formatPercentage(value: number, total: number, decimals: number = 1): string {\n if (total === 0) return '0%'\n const percentage = (value / total) * 100\n return `${percentage.toFixed(decimals)}%`\n}\n\n/**\n * Format timestamp to relative time\n */\nexport function formatRelativeTime(timestamp: number | Date): string {\n const now = Date.now()\n const time = typeof timestamp === 'number' ? timestamp : timestamp.getTime()\n const diff = now - time\n\n const seconds = Math.floor(diff / 1000)\n const minutes = Math.floor(seconds / 60)\n const hours = Math.floor(minutes / 60)\n const days = Math.floor(hours / 24)\n\n if (days > 0) return `${days} day${days === 1 ? '' : 's'} ago`\n if (hours > 0) return `${hours} hour${hours === 1 ? '' : 's'} ago`\n if (minutes > 0) return `${minutes} minute${minutes === 1 ? '' : 's'} ago`\n return `${seconds} second${seconds === 1 ? '' : 's'} ago`\n}\n\n/**\n * Format table data\n */\nexport function formatTable(\n headers: string[],\n rows: string[][],\n options: {\n padding?: number\n align?: Array<'left' | 'center' | 'right'>\n borders?: boolean\n } = {}\n): string {\n const { padding = 1, align = [], borders = true } = options\n\n if (rows.length === 0) return ''\n\n // Calculate column widths\n const widths = headers.map((header, i) => {\n const columnValues = [header, ...rows.map((row) => row[i] || '')]\n return Math.max(...columnValues.map((val) => val.length))\n })\n\n // Format row function\n const formatRow = (cells: string[], _isHeader: boolean = false) => {\n const formattedCells = cells.map((cell, i) => {\n const width = widths[i] || 0\n const alignment = align[i] || 'left'\n\n let formatted = cell\n if (alignment === 'center') {\n const totalPad = width - cell.length\n const leftPad = Math.floor(totalPad / 2)\n const rightPad = totalPad - leftPad\n formatted = ' '.repeat(leftPad) + cell + ' '.repeat(rightPad)\n } else if (alignment === 'right') {\n formatted = cell.padStart(width)\n } else {\n formatted = cell.padEnd(width)\n }\n\n return ' '.repeat(padding) + formatted + ' '.repeat(padding)\n })\n\n return borders ? `|${formattedCells.join('|')}|` : formattedCells.join(' ')\n }\n\n // Build table\n const lines: string[] = []\n\n if (borders) {\n // Top border\n const topBorder = widths.map((w) => '-'.repeat(w + padding * 2)).join('+')\n lines.push(`+${topBorder}+`)\n }\n\n // Header\n lines.push(formatRow(headers, true))\n\n if (borders) {\n // Header separator\n const headerSep = widths.map((w) => '-'.repeat(w + padding * 2)).join('+')\n lines.push(`+${headerSep}+`)\n }\n\n // Rows\n rows.forEach((row) => {\n lines.push(formatRow(row))\n })\n\n if (borders) {\n // Bottom border\n const bottomBorder = widths.map((w) => '-'.repeat(w + padding * 2)).join('+')\n lines.push(`+${bottomBorder}+`)\n }\n\n return lines.join('\\n')\n}\n","/**\n * Git Utilities\n */\n\nimport { spawnSync } from 'node:child_process'\nimport { existsSync } from 'node:fs'\nimport { join } from 'node:path'\n\n/**\n * Check if directory is a git repository\n */\nexport function isGitRepository(path: string = process.cwd()): boolean {\n try {\n return existsSync(join(path, '.git'))\n } catch {\n return false\n }\n}\n\n/**\n * Get current git branch\n */\nexport function getCurrentBranch(cwd: string = process.cwd()): string | null {\n try {\n const result = spawnSync('git', ['branch', '--show-current'], {\n cwd,\n encoding: 'utf8',\n stdio: 'pipe',\n })\n if (result.error || result.status !== 0) {\n return null\n }\n const branch = result.stdout.trim()\n return branch || null\n } catch {\n return null\n }\n}\n\n/**\n * Check if working directory is clean\n */\nexport function isWorkingDirectoryClean(cwd: string = process.cwd()): boolean {\n try {\n const result = spawnSync('git', ['status', '--porcelain'], {\n cwd,\n encoding: 'utf8',\n stdio: 'pipe',\n })\n if (result.error || result.status !== 0) {\n return false\n }\n const status = result.stdout.trim()\n return status === ''\n } catch {\n return false\n }\n}\n\n/**\n * Get last commit hash\n */\nexport function getLastCommitHash(cwd: string = process.cwd()): string | null {\n try {\n const result = spawnSync('git', ['rev-parse', 'HEAD'], {\n cwd,\n encoding: 'utf8',\n stdio: 'pipe',\n })\n if (result.error || result.status !== 0) {\n return null\n }\n const hash = result.stdout.trim()\n return hash || null\n } catch {\n return null\n }\n}\n\n/**\n * Get git repository URL\n */\nexport function getRepositoryUrl(cwd: string = process.cwd()): string | null {\n try {\n const result = spawnSync('git', ['config', '--get', 'remote.origin.url'], {\n cwd,\n encoding: 'utf8',\n stdio: 'pipe',\n })\n if (result.error || result.status !== 0) {\n return null\n }\n const url = result.stdout.trim()\n return url || null\n } catch {\n return null\n }\n}\n\n/**\n * Create git tag\n */\nexport function createTag(tag: string, message?: string, cwd: string = process.cwd()): boolean {\n try {\n const args = message ? ['tag', '-a', tag, '-m', message] : ['tag', tag]\n\n const result = spawnSync('git', args, { cwd, stdio: 'pipe' })\n return result.status === 0\n } catch {\n return false\n }\n}\n\n/**\n * Check if there are uncommitted changes\n */\nexport function hasUncommittedChanges(cwd: string = process.cwd()): boolean {\n return !isWorkingDirectoryClean(cwd)\n}\n\n/**\n * Get list of modified files\n */\nexport function getModifiedFiles(cwd: string = process.cwd()): string[] {\n try {\n const result = spawnSync('git', ['status', '--porcelain'], {\n cwd,\n encoding: 'utf8',\n stdio: 'pipe',\n })\n\n if (result.error || result.status !== 0) {\n return []\n }\n\n const output = result.stdout.trim()\n if (!output) return []\n\n return output\n .split('\\n')\n .map((line) => line.substring(3)) // Remove status indicators\n .filter(Boolean)\n } catch {\n return []\n }\n}\n\n/**\n * Stage files for commit\n */\nexport function stageFiles(files: string[], cwd: string = process.cwd()): boolean {\n try {\n const result = spawnSync('git', ['add', ...files], {\n cwd,\n stdio: 'pipe',\n })\n return result.status === 0\n } catch {\n return false\n }\n}\n\n/**\n * Commit changes\n */\nexport function commit(message: string, cwd: string = process.cwd()): boolean {\n try {\n const result = spawnSync('git', ['commit', '-m', message], {\n cwd,\n stdio: 'pipe',\n })\n return result.status === 0\n } catch {\n return false\n }\n}\n","/**\n * String Utilities\n */\n\n/**\n * Convert camelCase to kebab-case\n */\nexport function camelToKebab(str: string): string {\n return str.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2').toLowerCase()\n}\n\n/**\n * Convert kebab-case to camelCase\n */\nexport function kebabToCamel(str: string): string {\n return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\n}\n\n/**\n * Capitalize first letter\n */\nexport function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1)\n}\n\n/**\n * Truncate string with ellipsis\n */\nexport function truncate(str: string, maxLength: number, ellipsis: string = '...'): string {\n if (str.length <= maxLength) {\n return str\n }\n return str.slice(0, maxLength - ellipsis.length) + ellipsis\n}\n\n/**\n * Pad string to specified length\n */\nexport function pad(\n str: string,\n length: number,\n char: string = ' ',\n direction: 'left' | 'right' | 'both' = 'right'\n): string {\n const padding = Math.max(0, length - str.length)\n\n switch (direction) {\n case 'left':\n return char.repeat(padding) + str\n case 'both': {\n const leftPad = Math.floor(padding / 2)\n const rightPad = padding - leftPad\n return char.repeat(leftPad) + str + char.repeat(rightPad)\n }\n default:\n return str + char.repeat(padding)\n }\n}\n\n/**\n * Remove ANSI color codes from string\n */\nexport function stripAnsi(str: string): string {\n const escapeChar = String.fromCharCode(27)\n const ansiPattern = new RegExp(`${escapeChar}\\\\[[0-9;]*m`, 'g')\n return str.replace(ansiPattern, '')\n}\n\n/**\n * Pluralize word based on count\n */\nexport function pluralize(word: string, count: number, suffix: string = 's'): string {\n return count === 1 ? word : word + suffix\n}\n\n/**\n * Generate random string\n */\nexport function randomString(\n length: number,\n chars: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n): string {\n let result = ''\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length))\n }\n return result\n}\n\n/**\n * Escape string for use in regex\n */\nexport function escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * Convert string to slug (URL-friendly)\n */\nexport function slugify(str: string): string {\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '') // Remove non-word chars\n .replace(/[\\s_-]+/g, '-') // Replace spaces and underscores with hyphens\n .replace(/^-+|-+$/g, '') // Remove leading/trailing hyphens\n}\n\n/**\n * Parse boolean from string (handles various formats)\n */\nexport function parseBoolean(value: string | boolean): boolean {\n if (typeof value === 'boolean') {\n return value\n }\n\n const normalized = value.toLowerCase().trim()\n return normalized === 'true' || normalized === '1' || normalized === 'yes' || normalized === 'on'\n}\n\n/**\n * Format template string with variables\n */\nexport function template(str: string, variables: Record<string, any>): string {\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key) => {\n return variables[key] !== undefined ? String(variables[key]) : match\n })\n}\n\n/**\n * Calculate string similarity (Levenshtein distance)\n */\nexport function similarity(a: string, b: string): number {\n const matrix: number[][] = []\n\n for (let i = 0; i <= b.length; i++) {\n matrix[i] = [i]\n }\n\n for (let j = 0; j <= a.length; j++) {\n matrix[0]![j] = j\n }\n\n for (let i = 1; i <= b.length; i++) {\n for (let j = 1; j <= a.length; j++) {\n if (b.charAt(i - 1) === a.charAt(j - 1)) {\n matrix[i]![j] = matrix[i - 1]![j - 1]!\n } else {\n matrix[i]![j] = Math.min(\n matrix[i - 1]![j - 1]! + 1, // substitution\n matrix[i]![j - 1]! + 1, // insertion\n matrix[i - 1]![j]! + 1 // deletion\n )\n }\n }\n }\n\n const maxLength = Math.max(a.length, b.length)\n return maxLength === 0 ? 1 : (maxLength - matrix[b.length]![a.length]!) / maxLength\n}\n","/**\n * Validation Utilities\n */\n\n/**\n * Validation result interface\n */\nexport interface ValidationResult {\n isValid: boolean\n errors: string[]\n warnings: string[]\n}\n\n/**\n * Create validation result\n */\nexport function createValidationResult(\n isValid: boolean = true,\n errors: string[] = [],\n warnings: string[] = []\n): ValidationResult {\n return { isValid, errors, warnings }\n}\n\n/**\n * Validate email address\n */\nexport function isValidEmail(email: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(email)\n}\n\n/**\n * Validate URL\n */\nexport function isValidUrl(url: string): boolean {\n try {\n new URL(url)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Validate semver version\n */\nexport function isValidSemver(version: string): boolean {\n const semverRegex =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/\n return semverRegex.test(version)\n}\n\n/**\n * Validate package name\n */\nexport function isValidPackageName(name: string): boolean {\n // NPM package name rules\n const packageNameRegex = /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/\n return packageNameRegex.test(name) && name.length <= 214\n}\n\n/**\n * Validate file path\n */\nexport function isValidPath(path: string): boolean {\n // Basic path validation (no null bytes, etc.)\n return !path.includes('\\0') && path.length > 0 && path.length < 4096\n}\n\n/**\n * Validate JSON string\n */\nexport function isValidJson(jsonString: string): boolean {\n try {\n JSON.parse(jsonString)\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Validate YAML string\n */\nexport function isValidYaml(yamlString: string): boolean {\n try {\n // Simple YAML validation - check for basic structure\n const lines = yamlString.split('\\n')\n // let indentLevel = 0; // Reserved for future use\n\n for (const line of lines) {\n const trimmed = line.trim()\n if (trimmed === '' || trimmed.startsWith('#')) {\n continue // Skip empty lines and comments\n }\n\n const currentIndent = line.length - line.trimStart().length\n if (currentIndent % 2 !== 0) {\n return false // YAML uses 2-space indentation\n }\n\n if (trimmed.includes(':') && !trimmed.startsWith('-')) {\n // Key-value pair\n const [key] = trimmed.split(':')\n if (key?.trim() === '') {\n return false\n }\n }\n }\n\n return true\n } catch {\n return false\n }\n}\n\n/**\n * Validate glob pattern\n */\nexport function isValidGlob(pattern: string): boolean {\n try {\n // Basic glob pattern validation\n if (pattern.includes('**/**/**')) {\n return false // Too many recursive wildcards\n }\n\n if (pattern.includes('//')) {\n return false // Double slashes\n }\n\n // Check for balanced brackets\n let bracketDepth = 0\n let braceDepth = 0\n\n for (const char of pattern) {\n if (char === '[') bracketDepth++\n else if (char === ']') bracketDepth--\n else if (char === '{') braceDepth++\n else if (char === '}') braceDepth--\n\n if (bracketDepth < 0 || braceDepth < 0) {\n return false\n }\n }\n\n return bracketDepth === 0 && braceDepth === 0\n } catch {\n return false\n }\n}\n\n/**\n * Validate port number\n */\nexport function isValidPort(port: number | string): boolean {\n const portNum = typeof port === 'string' ? parseInt(port, 10) : port\n return !Number.isNaN(portNum) && portNum >= 1 && portNum <= 65535\n}\n\n/**\n * Validate timeout value\n */\nexport function isValidTimeout(timeout: number): boolean {\n return timeout > 0 && timeout <= 300000 // Max 5 minutes\n}\n\n/**\n * Validate log level\n */\nexport function isValidLogLevel(level: string): boolean {\n return ['error', 'warn', 'info', 'debug'].includes(level.toLowerCase())\n}\n\n/**\n * Validate update target\n */\nexport function isValidUpdateTarget(target: string): boolean {\n return ['latest', 'greatest', 'minor', 'patch', 'newest'].includes(target.toLowerCase())\n}\n\n/**\n * Validate output format\n */\nexport function isValidOutputFormat(format: string): boolean {\n return ['table', 'json', 'yaml', 'minimal'].includes(format.toLowerCase())\n}\n\n/**\n * Validate CLI command options\n */\nexport function validateCliOptions(options: Record<string, any>): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Validate workspace path\n if (options.workspace && !isValidPath(options.workspace)) {\n errors.push('Invalid workspace path')\n }\n\n // Validate registry URL\n if (options.registry && !isValidUrl(options.registry)) {\n errors.push('Invalid registry URL')\n }\n\n // Validate timeout\n if (options.timeout !== undefined && !isValidTimeout(options.timeout)) {\n errors.push('Invalid timeout value (must be between 1 and 300000ms)')\n }\n\n // Validate target\n if (options.target && !isValidUpdateTarget(options.target)) {\n errors.push('Invalid update target (must be: latest, greatest, minor, patch, newest)')\n }\n\n // Validate format\n if (options.format && !isValidOutputFormat(options.format)) {\n errors.push('Invalid output format (must be: table, json, yaml, minimal)')\n }\n\n // Validate include patterns\n if (options.include && Array.isArray(options.include)) {\n for (const pattern of options.include) {\n if (typeof pattern === 'string' && !isValidGlob(pattern)) {\n warnings.push(`Invalid include pattern: ${pattern}`)\n }\n }\n }\n\n // Validate exclude patterns\n if (options.exclude && Array.isArray(options.exclude)) {\n for (const pattern of options.exclude) {\n if (typeof pattern === 'string' && !isValidGlob(pattern)) {\n warnings.push(`Invalid exclude pattern: ${pattern}`)\n }\n }\n }\n\n // Validate catalog name\n if (options.catalog && typeof options.catalog === 'string') {\n if (options.catalog.trim() === '') {\n errors.push('Catalog name cannot be empty')\n }\n if (options.catalog.includes('/') || options.catalog.includes('\\\\')) {\n errors.push('Catalog name cannot contain path separators')\n }\n }\n\n return createValidationResult(errors.length === 0, errors, warnings)\n}\n\n/**\n * Validate configuration object\n */\nexport function validateConfig(config: Record<string, any>): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Validate registry settings\n if (config.registry) {\n if (config.registry.url && !isValidUrl(config.registry.url)) {\n errors.push('Invalid registry URL in configuration')\n }\n\n if (config.registry.timeout && !isValidTimeout(config.registry.timeout)) {\n errors.push('Invalid registry timeout in configuration')\n }\n\n if (config.registry.retries && (config.registry.retries < 0 || config.registry.retries > 10)) {\n warnings.push('Registry retries should be between 0 and 10')\n }\n }\n\n // Validate update settings\n if (config.update) {\n if (config.update.target && !isValidUpdateTarget(config.update.target)) {\n errors.push('Invalid update target in configuration')\n }\n }\n\n // Validate output settings\n if (config.output) {\n if (config.output.format && !isValidOutputFormat(config.output.format)) {\n errors.push('Invalid output format in configuration')\n }\n }\n\n // Validate logging settings\n if (config.logging) {\n if (config.logging.level && !isValidLogLevel(config.logging.level)) {\n errors.push('Invalid log level in configuration')\n }\n\n if (config.logging.file && !isValidPath(config.logging.file)) {\n errors.push('Invalid log file path in configuration')\n }\n }\n\n return createValidationResult(errors.length === 0, errors, warnings)\n}\n\n/**\n * Sanitize string input\n */\nexport function sanitizeString(\n input: string,\n options: {\n maxLength?: number\n allowedChars?: RegExp\n stripHtml?: boolean\n } = {}\n): string {\n let result = input\n\n // Strip HTML tags if requested with comprehensive multi-pass sanitization\n if (options.stripHtml) {\n let previousLength: number\n\n // Multi-pass sanitization to handle nested and complex patterns\n do {\n previousLength = result.length\n\n // Remove HTML tags, including malformed ones\n result = result.replace(/<[^>]*>?/g, '')\n\n // Remove HTML entities\n result = result.replace(/&[a-zA-Z0-9#]+;/g, '')\n\n // Remove any remaining < or > characters that might be part of incomplete tags\n result = result.replace(/[<>]/g, '')\n\n // Remove potentially dangerous protocol schemes\n result = result.replace(/javascript:/gi, '')\n result = result.replace(/data:/gi, '')\n result = result.replace(/vbscript:/gi, '')\n result = result.replace(/file:/gi, '')\n result = result.replace(/ftp:/gi, '')\n\n // Remove event handlers\n result = result.replace(/on\\w+\\s*=/gi, '')\n\n // Remove script-related content\n result = result.replace(/script[\\s\\S]*?\\/script/gi, '')\n result = result.replace(/style[\\s\\S]*?\\/style/gi, '')\n\n // Remove control characters and non-printable characters\n // eslint-disable-next-line no-control-regex\n result = result.replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, '')\n\n // Remove potentially dangerous CSS expressions\n result = result.replace(/expression\\s*\\(/gi, '')\n result = result.replace(/url\\s*\\(/gi, '')\n } while (result.length !== previousLength && result.length > 0)\n }\n\n // Filter allowed characters\n if (options.allowedChars) {\n result = result.replace(new RegExp(`[^${options.allowedChars.source}]`, 'g'), '')\n }\n\n // Truncate to max length\n if (options.maxLength && result.length > options.maxLength) {\n result = result.substring(0, options.maxLength)\n }\n\n return result.trim()\n}\n\n/**\n * Validate and sanitize package name\n */\nexport function sanitizePackageName(name: string): string {\n return sanitizeString(name, {\n maxLength: 214,\n allowedChars: /[a-z0-9@/._~*-]/,\n }).toLowerCase()\n}\n","/**\n * Version Checker Utility\n *\n * Checks for newer versions of the PCU tool and provides update prompts.\n */\n\nimport { exec } from 'node:child_process'\nimport { promisify } from 'node:util'\nimport chalk from 'chalk'\n\n// InteractivePrompts removed - prompting should be handled by CLI layer\n\nconst execAsync = promisify(exec)\n\nexport interface VersionCheckResult {\n isLatest: boolean\n currentVersion: string\n latestVersion: string\n shouldPrompt: boolean\n}\n\nexport interface VersionCheckOptions {\n skipPrompt?: boolean\n timeout?: number\n packageName?: string\n}\n\nexport class VersionChecker {\n private static readonly DEFAULT_TIMEOUT = 5000 // 5 seconds\n private static readonly DEFAULT_PACKAGE = 'pcu'\n\n /**\n * Check if current version is the latest\n */\n static async checkVersion(\n currentVersion: string,\n options: VersionCheckOptions = {}\n ): Promise<VersionCheckResult> {\n const {\n skipPrompt = false,\n timeout = VersionChecker.DEFAULT_TIMEOUT,\n packageName = VersionChecker.DEFAULT_PACKAGE,\n } = options\n\n try {\n // Get latest version from npm with timeout\n const latestVersion = await VersionChecker.getLatestVersion(packageName, timeout)\n\n const isLatest = VersionChecker.compareVersions(currentVersion, latestVersion) >= 0\n\n return {\n isLatest,\n currentVersion,\n latestVersion,\n shouldPrompt: !isLatest && !skipPrompt,\n }\n } catch (error) {\n console.warn(chalk.yellow('⚠️ Failed to check for updates:'), error)\n return {\n isLatest: true, // Assume latest if check fails\n currentVersion,\n latestVersion: currentVersion,\n shouldPrompt: false,\n }\n }\n }\n\n /**\n * Display update notification (prompting should be handled by CLI layer)\n */\n static displayUpdateNotification(versionResult: VersionCheckResult): void {\n if (!versionResult.shouldPrompt) {\n return\n }\n\n console.log()\n console.log(chalk.cyan('📦 Update Available!'))\n console.log(\n chalk.gray(\n `Current version: ${versionResult.currentVersion} → Latest: ${versionResult.latestVersion}`\n )\n )\n console.log(chalk.gray('Run with --update flag to update to the latest version.'))\n console.log()\n }\n\n /**\n * Prompt user and update if they choose to\n */\n static async promptAndUpdate(versionResult: VersionCheckResult): Promise<boolean> {\n if (!versionResult.shouldPrompt) {\n return false\n }\n\n try {\n // For now, just display notification and don't prompt\n // This avoids adding inquirer dependency to utils package\n VersionChecker.displayUpdateNotification(versionResult)\n\n // Auto-perform update for now (can be enhanced with prompting later)\n console.log(chalk.yellow('Auto-updating to latest version...'))\n return await VersionChecker.performUpdateAction()\n } catch (error) {\n console.error(chalk.red('Failed to prompt and update:'), error)\n return false\n }\n }\n\n /**\n * Perform update without prompting\n */\n static async performUpdateAction(): Promise<boolean> {\n console.log(chalk.blue('🔄 Updating pcu...'))\n try {\n await VersionChecker.performUpdate()\n console.log(chalk.green('✅ Successfully updated! Please restart the command.'))\n return true\n } catch (error) {\n console.error(chalk.red('❌ Update failed:'), error)\n console.log(chalk.gray('You can manually update with: npm install -g pcu@latest'))\n return false\n }\n }\n\n /**\n * Get latest version from npm registry\n */\n private static async getLatestVersion(packageName: string, timeout: number): Promise<string> {\n const command = `npm view ${packageName} version`\n\n try {\n const { stdout } = await VersionChecker.executeWithTimeout(command, timeout)\n return stdout.trim()\n } catch (error) {\n // Fallback: try with different npm commands\n try {\n const { stdout } = await VersionChecker.executeWithTimeout(\n `npm info ${packageName} version`,\n timeout\n )\n return stdout.trim()\n } catch (fallbackError) {\n throw new Error(`Failed to get latest version: ${error}`)\n }\n }\n }\n\n /**\n * Execute update command\n */\n private static async performUpdate(): Promise<void> {\n // Try global update first, then fallback to different methods\n const commands = [\n 'npm install -g pcu@latest',\n 'npm update -g pcu',\n 'pnpm add -g pcu@latest',\n 'yarn global add pcu@latest',\n ]\n\n for (const command of commands) {\n try {\n console.log(chalk.gray(`Executing: ${command}`))\n await execAsync(command, { timeout: 30000 })\n return // Success\n } catch (error) {\n console.warn(chalk.yellow(`Command failed: ${command}`))\n // Continue to next command\n }\n }\n\n throw new Error('All update commands failed')\n }\n\n /**\n * Execute command with timeout\n */\n private static async executeWithTimeout(\n command: string,\n timeout: number\n ): Promise<{ stdout: string; stderr: string }> {\n return new Promise((resolve, reject) => {\n const child = exec(command, { timeout }, (error, stdout, stderr) => {\n if (error) {\n reject(error)\n } else {\n resolve({ stdout, stderr })\n }\n })\n\n // Additional timeout handling\n const timer = setTimeout(() => {\n child.kill()\n reject(new Error(`Command timed out after ${timeout}ms`))\n }, timeout)\n\n child.on('exit', () => {\n clearTimeout(timer)\n })\n })\n }\n\n /**\n * Compare two version strings\n * Returns: -1 if a < b, 0 if a === b, 1 if a > b\n */\n private static compareVersions(a: string, b: string): number {\n const cleanA = a.replace(/^v/, '').replace(/[^0-9.]/g, '')\n const cleanB = b.replace(/^v/, '').replace(/[^0-9.]/g, '')\n\n const partsA = cleanA.split('.').map(Number)\n const partsB = cleanB.split('.').map(Number)\n\n const maxLength = Math.max(partsA.length, partsB.length)\n\n for (let i = 0; i < maxLength; i++) {\n const partA = partsA[i] || 0\n const partB = partsB[i] || 0\n\n if (partA < partB) return -1\n if (partA > partB) return 1\n }\n\n return 0\n }\n\n /**\n * Check if running in CI environment where prompts should be skipped\n */\n static isCI(): boolean {\n return !!(\n process.env.CI ||\n process.env.CONTINUOUS_INTEGRATION ||\n process.env.BUILD_NUMBER ||\n process.env.RUN_ID ||\n process.env.GITHUB_ACTIONS\n )\n }\n\n /**\n * Get update frequency preference from environment\n */\n static shouldCheckForUpdates(): boolean {\n const skipCheck = process.env.PCU_SKIP_VERSION_CHECK\n if (skipCheck === 'true' || skipCheck === '1') {\n return false\n }\n\n // Skip in CI environments by default\n if (VersionChecker.isCI()) {\n return false\n }\n\n return true\n }\n}\n","/**\n * Common Utilities\n *\n * Collection of utility functions used throughout the application.\n */\n\nexport * from './async.js'\nexport * from './format.js'\nexport * from './git.js'\nexport * from './string.js'\nexport * from './validation.js'\nexport * from './versionChecker.js'\n","// Shared utilities and types for pnpm-catalog-updates\n\n// Configuration\nexport * from './config/config'\nexport * from './config/configLoader'\nexport * from './config/index'\n// Additional specific exports that might be missed by wildcard\nexport type { AdvancedConfig } from './config/packageFilterConfig'\nexport * from './config/packageFilterConfig'\n\n// Error Handling\nexport * from './error-handling/errorTracker'\nexport * from './error-handling/index'\nexport * from './error-handling/userFriendlyErrorHandler'\n\n// Logger\nexport * from './logger/index'\nexport * from './logger/logger'\n\n// Types\nexport * from './types/cli'\nexport * from './types/core'\nexport * from './types/index'\n\n// Utilities\nexport * from './utils/async'\nexport * from './utils/format'\nexport * from './utils/git'\nexport * from './utils/index'\nexport * from './utils/string'\nexport * from './utils/validation'\nexport * from './utils/versionChecker'\n","/**\n * Version Value Object\n *\n * Represents a semantic version with comparison and validation capabilities.\n * Handles version ranges, pre-release versions, and semantic version operations.\n */\n\nimport semver from 'semver'\n\nexport class Version {\n private readonly value: string\n private readonly semverInstance: semver.SemVer\n\n private constructor(value: string, semverInstance: semver.SemVer) {\n this.value = value\n this.semverInstance = semverInstance\n }\n\n /**\n * Create a Version from a version string\n */\n public static fromString(versionString: string): Version {\n if (!versionString || versionString.trim().length === 0) {\n throw new Error('Version string cannot be empty')\n }\n\n const cleaned = versionString.trim()\n const parsedVersion = semver.parse(cleaned)\n\n if (!parsedVersion) {\n throw new Error(`Invalid version string: ${versionString}`)\n }\n\n return new Version(cleaned, parsedVersion)\n }\n\n /**\n * Create a Version from semver components\n */\n public static fromComponents(\n major: number,\n minor: number,\n patch: number,\n prerelease?: string\n ): Version {\n let versionString = `${major}.${minor}.${patch}`\n if (prerelease) {\n versionString += `-${prerelease}`\n }\n\n return Version.fromString(versionString)\n }\n\n /**\n * Parse a version that might include range operators\n */\n public static parseVersionRange(rangeString: string): VersionRange {\n return VersionRange.fromString(rangeString)\n }\n\n /**\n * Get the version string\n */\n public toString(): string {\n return this.value\n }\n\n /**\n * Get major version number\n */\n public getMajor(): number {\n return this.semverInstance.major\n }\n\n /**\n * Get minor version number\n */\n public getMinor(): number {\n return this.semverInstance.minor\n }\n\n /**\n * Get patch version number\n */\n public getPatch(): number {\n return this.semverInstance.patch\n }\n\n /**\n * Get prerelease identifier\n */\n public getPrerelease(): string[] {\n return this.semverInstance.prerelease.map((p) => p.toString())\n }\n\n /**\n * Check if this is a prerelease version\n */\n public isPrerelease(): boolean {\n return this.semverInstance.prerelease.length > 0\n }\n\n /**\n * Compare with another version\n */\n public compareTo(other: Version): number {\n return semver.compare(this.value, other.value)\n }\n\n /**\n * Check if this version is newer than another\n */\n public isNewerThan(other: Version): boolean {\n return this.compareTo(other) > 0\n }\n\n /**\n * Check if this version is older than another\n */\n public isOlderThan(other: Version): boolean {\n return this.compareTo(other) < 0\n }\n\n /**\n * Check if this version equals another\n */\n public equals(other: Version): boolean {\n return this.compareTo(other) === 0\n }\n\n /**\n * Check if this version satisfies a range\n */\n public satisfies(range: VersionRange): boolean {\n return range.includes(this)\n }\n\n /**\n * Get the difference type compared to another version\n */\n public getDifferenceType(other: Version): 'major' | 'minor' | 'patch' | 'prerelease' | 'same' {\n if (this.equals(other)) {\n return 'same'\n }\n\n const diff = semver.diff(this.value, other.value)\n return diff as 'major' | 'minor' | 'patch' | 'prerelease'\n }\n\n /**\n * Increment version by type\n */\n public increment(type: 'major' | 'minor' | 'patch', prerelease?: string): Version {\n const incremented = prerelease\n ? semver.inc(this.value, type, prerelease)\n : semver.inc(this.value, type)\n if (!incremented) {\n throw new Error(`Failed to increment version ${this.value} by ${type}`)\n }\n return Version.fromString(incremented)\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): Version {\n return Version.fromString(json)\n }\n}\n\n/**\n * Version Range Value Object\n *\n * Represents a version range (e.g., \"^1.2.3\", \"~2.0.0\", \">=1.0.0 <2.0.0\")\n */\nexport class VersionRange {\n private readonly value: string\n\n private constructor(value: string) {\n this.value = value\n }\n\n /**\n * Create a VersionRange from a range string\n */\n public static fromString(rangeString: string): VersionRange {\n if (!rangeString || rangeString.trim().length === 0) {\n throw new Error('Version range string cannot be empty')\n }\n\n const cleaned = rangeString.trim()\n\n // Validate the range\n try {\n semver.validRange(cleaned)\n } catch (error) {\n throw new Error(`Invalid version range: ${rangeString}`)\n }\n\n if (!semver.validRange(cleaned)) {\n throw new Error(`Invalid version range: ${rangeString}`)\n }\n\n return new VersionRange(cleaned)\n }\n\n /**\n * Get the range string\n */\n public toString(): string {\n return this.value\n }\n\n /**\n * Check if a version satisfies this range\n */\n public includes(version: Version): boolean {\n return semver.satisfies(version.toString(), this.value)\n }\n\n /**\n * Check if this range is compatible with another range\n */\n public isCompatibleWith(other: VersionRange): boolean {\n // Check if ranges have any overlap\n try {\n return semver.intersects(this.value, other.value)\n } catch {\n return false\n }\n }\n\n /**\n * Get the minimum version that satisfies this range\n */\n public getMinVersion(): Version | null {\n const minVersion = semver.minVersion(this.value)\n return minVersion ? Version.fromString(minVersion.version) : null\n }\n\n /**\n * Get the maximum version that satisfies this range\n */\n public getMaxVersion(): Version | null {\n // semver doesn't have a direct maxVersion, so we approximate\n const minVer = this.getMinVersion()\n if (!minVer) return null\n\n // For caret ranges (^1.2.3), max is < 2.0.0\n if (this.value.startsWith('^')) {\n const major = minVer.getMajor()\n return Version.fromComponents(major + 1, 0, 0)\n }\n\n // For tilde ranges (~1.2.3), max is < 1.3.0\n if (this.value.startsWith('~')) {\n const major = minVer.getMajor()\n const minor = minVer.getMinor()\n return Version.fromComponents(major, minor + 1, 0)\n }\n\n return null\n }\n\n /**\n * Check if this is a caret range (^x.y.z)\n */\n public isCaret(): boolean {\n return this.value.startsWith('^')\n }\n\n /**\n * Check if this is a tilde range (~x.y.z)\n */\n public isTilde(): boolean {\n return this.value.startsWith('~')\n }\n\n /**\n * Check if this is an exact version\n */\n public isExact(): boolean {\n return (\n !this.value.includes('^') &&\n !this.value.includes('~') &&\n !this.value.includes('>') &&\n !this.value.includes('<') &&\n !this.value.includes('*') &&\n !this.value.includes('x')\n )\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): VersionRange {\n return VersionRange.fromString(json)\n }\n\n /**\n * Check equality with another VersionRange\n */\n public equals(other: VersionRange): boolean {\n return this.value === other.value\n }\n}\n","/**\n * WorkspacePath Value Object\n *\n * Represents a file system path to a pnpm workspace.\n * This is an immutable value object that validates and normalizes workspace paths.\n */\n\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nexport class WorkspacePath {\n private readonly value: string\n\n private constructor(value: string) {\n this.value = value\n }\n\n /**\n * Create a WorkspacePath from a string\n */\n public static fromString(pathString: string): WorkspacePath {\n if (!pathString || pathString.trim().length === 0) {\n throw new Error('WorkspacePath cannot be empty')\n }\n\n // Normalize the path\n const normalized = path.resolve(pathString.trim())\n\n return new WorkspacePath(normalized)\n }\n\n /**\n * Create a WorkspacePath from the current working directory\n */\n public static current(): WorkspacePath {\n return new WorkspacePath(process.cwd())\n }\n\n /**\n * Create a WorkspacePath from file URL (useful for ES modules)\n */\n public static fromFileURL(fileUrl: string): WorkspacePath {\n const filePath = fileURLToPath(fileUrl)\n const directory = path.dirname(filePath)\n return new WorkspacePath(directory)\n }\n\n /**\n * Get the absolute path as a string\n */\n public toString(): string {\n return this.value\n }\n\n /**\n * Get the directory name (last part of the path)\n */\n public getDirectoryName(): string {\n return path.basename(this.value)\n }\n\n /**\n * Join with another path segment\n */\n public join(...segments: string[]): WorkspacePath {\n const joined = path.join(this.value, ...segments)\n return new WorkspacePath(joined)\n }\n\n /**\n * Get the parent directory\n */\n public getParent(): WorkspacePath {\n const parent = path.dirname(this.value)\n return new WorkspacePath(parent)\n }\n\n /**\n * Check if this path is a subdirectory of another path\n */\n public isSubdirectoryOf(other: WorkspacePath): boolean {\n const relativePath = path.relative(other.value, this.value)\n return !relativePath.startsWith('..') && !path.isAbsolute(relativePath)\n }\n\n /**\n * Get relative path from another WorkspacePath\n */\n public relativeTo(other: WorkspacePath): string {\n return path.relative(other.value, this.value)\n }\n\n /**\n * Check equality with another WorkspacePath\n */\n public equals(other: WorkspacePath): boolean {\n return path.resolve(this.value) === path.resolve(other.value)\n }\n\n /**\n * Get the value for serialization\n */\n public getValue(): string {\n return this.value\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): WorkspacePath {\n return WorkspacePath.fromString(json)\n }\n\n /**\n * Check if this path exists (requires async validation in infrastructure layer)\n */\n public async exists(): Promise<boolean> {\n try {\n const fs = await import('node:fs/promises')\n await fs.access(this.value)\n return true\n } catch {\n return false\n }\n }\n\n /**\n * Get the path to pnpm-workspace.yaml\n */\n public getPnpmWorkspaceConfigPath(): WorkspacePath {\n return this.join('pnpm-workspace.yaml')\n }\n\n /**\n * Get the path to package.json\n */\n public getPackageJsonPath(): WorkspacePath {\n return this.join('package.json')\n }\n}\n","/**\n * NPM/PNPM Configuration Parser\n *\n * Reads and parses .npmrc and .pnpmrc configuration files to extract registry settings\n * for different package scopes. Supports both npm and pnpm configuration formats.\n */\n\nimport { existsSync, readFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nexport interface NpmrcConfig {\n // Default registry\n registry: string\n // Scoped registries (e.g., @mycompany -> https://npm.mycompany.com)\n scopedRegistries: Map<string, string>\n // Auth tokens for registries\n authTokens: Map<string, string>\n // Other npm config values\n config: Map<string, string>\n}\n\nexport class NpmrcParser {\n private static readonly DEFAULT_REGISTRY = 'https://registry.npmjs.org/'\n\n /**\n * Parse .npmrc/.pnpmrc configuration from multiple sources\n */\n static parse(\n workingDirectory: string = process.cwd(),\n includeGlobal: boolean = true\n ): NpmrcConfig {\n const config: NpmrcConfig = {\n registry: NpmrcParser.DEFAULT_REGISTRY,\n scopedRegistries: new Map(),\n authTokens: new Map(),\n config: new Map(),\n }\n\n // Load config files in order of precedence (later files override earlier)\n // Priority: project .pnpmrc > project .npmrc > global .pnpmrc > global .npmrc\n const configPaths: string[] = []\n\n // Only include global configs if requested (for production use)\n if (includeGlobal) {\n configPaths.push(join(homedir(), '.npmrc')) // Global npmrc (lowest priority)\n configPaths.push(join(homedir(), '.pnpmrc')) // Global pnpmrc\n }\n\n configPaths.push(join(workingDirectory, '.npmrc')) // Project npmrc\n configPaths.push(join(workingDirectory, '.pnpmrc')) // Project pnpmrc (highest priority)\n\n for (const configPath of configPaths) {\n if (existsSync(configPath)) {\n NpmrcParser.parseFile(configPath, config)\n }\n }\n\n // Also check for environment variables (skip in tests if includeGlobal is false)\n NpmrcParser.parseEnvironment(config, includeGlobal)\n\n return config\n }\n\n /**\n * Parse a single .npmrc file\n */\n private static parseFile(filepath: string, config: NpmrcConfig): void {\n try {\n const content = readFileSync(filepath, 'utf-8')\n const lines = content.split('\\n')\n\n for (const line of lines) {\n const trimmedLine = line.trim()\n\n // Skip comments and empty lines\n if (!trimmedLine || trimmedLine.startsWith('#') || trimmedLine.startsWith(';')) {\n continue\n }\n\n // Parse key=value pairs\n const separatorIndex = trimmedLine.indexOf('=')\n if (separatorIndex === -1) continue\n\n const key = trimmedLine.substring(0, separatorIndex).trim()\n const value = trimmedLine.substring(separatorIndex + 1).trim()\n\n // Handle scoped registries (e.g., @mycompany:registry=https://npm.mycompany.com/)\n if (key.includes(':registry')) {\n const scope = key.replace(':registry', '')\n config.scopedRegistries.set(scope, NpmrcParser.normalizeRegistryUrl(value))\n }\n // Handle default registry\n else if (key === 'registry') {\n config.registry = NpmrcParser.normalizeRegistryUrl(value)\n }\n // Handle auth tokens (e.g., //registry.npmjs.org/:_authToken=...)\n else if (key.includes(':_authToken') || key.includes('_authToken')) {\n // Extract registry URL from the key\n const match = key.match(/\\/\\/(.*?)\\/:/)\n if (match?.[1]) {\n const registryHost = match[1]\n config.authTokens.set(registryHost, value)\n }\n }\n // Store other config values\n else {\n config.config.set(key, value)\n }\n }\n } catch (error) {\n // Silently ignore errors reading npmrc files\n console.debug(`Failed to parse npmrc file ${filepath}:`, error)\n }\n }\n\n /**\n * Parse npm configuration from environment variables\n */\n private static parseEnvironment(config: NpmrcConfig, includeEnv: boolean = true): void {\n if (!includeEnv) {\n return // Skip environment parsing in tests\n }\n\n // Check for npm_config_registry\n if (process.env.npm_config_registry) {\n config.registry = NpmrcParser.normalizeRegistryUrl(process.env.npm_config_registry)\n }\n\n // Check for scoped registries in environment\n for (const [key, value] of Object.entries(process.env)) {\n if (key.startsWith('npm_config_') && key.includes('_registry')) {\n // Extract scope from environment variable name\n // e.g., npm_config_@mycompany_registry -> @mycompany\n const match = key.match(/npm_config_(.+)_registry/)\n if (match?.[1] && value) {\n const scope = match[1].replace(/_/g, '/').replace(/\\//, '@')\n config.scopedRegistries.set(scope, NpmrcParser.normalizeRegistryUrl(value))\n }\n }\n }\n }\n\n /**\n * Get the appropriate registry URL for a package\n */\n static getRegistryForPackage(packageName: string, config: NpmrcConfig): string {\n // Check if package has a scope (e.g., @mycompany/package)\n if (packageName.startsWith('@')) {\n const scopeEnd = packageName.indexOf('/')\n if (scopeEnd !== -1) {\n const scope = packageName.substring(0, scopeEnd)\n\n // Check if we have a scoped registry for this scope\n const scopedRegistry = config.scopedRegistries.get(scope)\n if (scopedRegistry) {\n return scopedRegistry\n }\n }\n }\n\n // Fall back to default registry\n return config.registry\n }\n\n /**\n * Normalize registry URL to ensure it has a trailing slash\n */\n private static normalizeRegistryUrl(url: string): string {\n // Remove any quotes that might be in the config\n url = url.replace(/^[\"']|[\"']$/g, '')\n\n // Ensure trailing slash\n if (!url.endsWith('/')) {\n url += '/'\n }\n\n return url\n }\n\n /**\n * Get auth token for a registry\n */\n static getAuthToken(registryUrl: string, config: NpmrcConfig): string | undefined {\n try {\n const url = new URL(registryUrl)\n return config.authTokens.get(url.hostname)\n } catch {\n return undefined\n }\n }\n}\n","/**\n * NPM Registry Service\n *\n * Provides access to NPM registry for package version information.\n * Handles API calls, caching, and version resolution.\n */\n\nimport { type AdvancedConfig, UserFriendlyErrorHandler } from '@pcu/utils'\nimport npmRegistryFetch from 'npm-registry-fetch'\nimport pacote from 'pacote'\nimport semver from 'semver'\nimport { Version, type VersionRange } from '../../domain/value-objects/version.js'\nimport { type NpmrcConfig, NpmrcParser } from '../utils/npmrcParser.js'\n\nexport interface PackageInfo {\n name: string\n description?: string\n homepage?: string\n repository?: {\n type?: string\n url?: string\n directory?: string\n }\n license?: string\n author?: string | { name: string; email?: string }\n maintainers?: Array<{ name: string; email?: string }>\n keywords?: string[]\n versions: string[]\n latestVersion: string\n tags: Record<string, string>\n time?: Record<string, string>\n}\n\nexport interface SecurityVulnerability {\n id: string\n title: string\n severity: 'low' | 'moderate' | 'high' | 'critical'\n description: string\n reference: string\n vulnerable_versions: string\n patched_versions?: string\n recommendation?: string\n}\n\nexport interface SecurityReport {\n package: string\n version: string\n vulnerabilities: SecurityVulnerability[]\n hasVulnerabilities: boolean\n}\n\nexport class NpmRegistryService {\n private readonly cache: Map<string, { data: any; timestamp: number }> = new Map()\n\n // Differentiated cache timeouts for different data types\n private readonly versionCacheTimeout: number\n private readonly packageInfoCacheTimeout: number\n private readonly securityCacheTimeout: number\n\n // Advanced configuration with defaults\n private readonly concurrency: number\n private readonly timeout: number\n private readonly retries: number\n private readonly cachingEnabled: boolean\n\n // NPM configuration for handling multiple registries\n private readonly npmrcConfig: NpmrcConfig\n\n constructor(\n registryUrl: string = 'https://registry.npmjs.org/',\n options: AdvancedConfig = {},\n workingDirectory: string = process.cwd()\n ) {\n // Parse npmrc configuration for scoped registries\n this.npmrcConfig = NpmrcParser.parse(workingDirectory)\n\n // Override default registry if specified in npmrc\n if (!registryUrl || registryUrl === 'https://registry.npmjs.org/') {\n // Use npmrc registry as default if no specific registry is provided\n const normalizedUrl = registryUrl.endsWith('/') ? registryUrl : `${registryUrl}/`\n this.npmrcConfig.registry = this.npmrcConfig.registry || normalizedUrl\n } else {\n // Use the provided registry URL as override\n this.npmrcConfig.registry = registryUrl.endsWith('/') ? registryUrl : `${registryUrl}/`\n }\n this.concurrency = options.concurrency ?? 8 // Increased from 5 to match NCU performance\n this.timeout = options.timeout ?? 15000 // Reduced from 30s to 15s for faster failure detection\n this.retries = options.retries ?? 2 // Reduced from 3 to 2 for faster overall performance\n\n // Optimized cache timeouts for different data types\n const baseCacheMinutes = options.cacheValidityMinutes ?? 10 // Reduced from 60 to 10 minutes\n this.versionCacheTimeout = baseCacheMinutes * 60 * 1000 // Version info: 10 minutes (frequently checked)\n this.packageInfoCacheTimeout = baseCacheMinutes * 2 * 60 * 1000 // Package info: 20 minutes\n this.securityCacheTimeout = baseCacheMinutes * 6 * 60 * 1000 // Security info: 60 minutes (changes less frequently)\n\n this.cachingEnabled = baseCacheMinutes > 0 // Disable caching if set to 0\n }\n\n /**\n * Execute a function with retry logic\n */\n private async executeWithRetry<T>(\n fn: () => Promise<T>,\n context: string = 'operation'\n ): Promise<T> {\n let lastError: Error\n\n for (let attempt = 1; attempt <= this.retries; attempt++) {\n try {\n return await fn()\n } catch (error) {\n lastError = error as Error\n\n if (attempt === this.retries) {\n throw new Error(`${context} failed after ${this.retries} attempts: ${lastError.message}`)\n }\n\n // Exponential backoff: wait 1s, 2s, 4s, etc.\n const delay = Math.min(1000 * 2 ** (attempt - 1), 10000)\n await new Promise((resolve) => setTimeout(resolve, delay))\n\n // Extract package name from context for better error handling\n const packageName = context.includes('for ')\n ? context.split('for ')[1] || 'unknown package'\n : 'unknown package'\n\n UserFriendlyErrorHandler.handleRetryAttempt(packageName, attempt, this.retries, lastError)\n }\n }\n\n throw lastError!\n }\n\n /**\n * Get the appropriate registry URL for a package\n */\n private getRegistryForPackage(packageName: string): string {\n return NpmrcParser.getRegistryForPackage(packageName, this.npmrcConfig)\n }\n\n /**\n * Get auth configuration for a registry\n */\n private getAuthConfig(registryUrl: string): Record<string, any> {\n const authToken = NpmrcParser.getAuthToken(registryUrl, this.npmrcConfig)\n if (authToken) {\n return {\n '//registry.npmjs.org/:_authToken': authToken,\n token: authToken,\n }\n }\n return {}\n }\n\n /**\n * Get lightweight package version information (optimized for performance)\n */\n async getPackageVersions(packageName: string): Promise<{\n name: string\n versions: string[]\n latestVersion: string\n tags: Record<string, string>\n time?: Record<string, string>\n }> {\n const registryUrl = this.getRegistryForPackage(packageName)\n const cacheKey = `package-versions:${registryUrl}:${packageName}`\n\n // Check cache first if caching is enabled\n if (this.cachingEnabled) {\n const cached = this.getFromCache(cacheKey)\n if (cached) {\n return cached\n }\n }\n\n const packageVersions = await this.executeWithRetry(async () => {\n // Use lightweight packument call without fullMetadata\n const authConfig = this.getAuthConfig(registryUrl)\n const packument = await pacote.packument(packageName, {\n registry: registryUrl,\n timeout: this.timeout,\n fullMetadata: false, // Key optimization: don't fetch full metadata\n ...authConfig,\n })\n\n const versions = Object.keys(packument.versions || {}).sort(semver.rcompare)\n const latestVersion = packument['dist-tags']?.latest || versions[0] || ''\n\n return {\n name: packument.name,\n versions,\n latestVersion,\n tags: packument['dist-tags'] || {},\n time: (packument as any).time || {}, // Still include time for newest versions feature\n }\n }, `Fetching package versions for ${packageName}`)\n\n // Cache the result if caching is enabled\n if (this.cachingEnabled) {\n this.setCache(cacheKey, packageVersions)\n }\n\n return packageVersions\n }\n\n /**\n * Get package information including all versions\n * @deprecated Use getPackageVersions() for better performance\n */\n async getPackageInfo(packageName: string): Promise<PackageInfo> {\n const registryUrl = this.getRegistryForPackage(packageName)\n const cacheKey = `package-info:${registryUrl}:${packageName}`\n\n // Check cache first if caching is enabled\n if (this.cachingEnabled) {\n const cached = this.getFromCache(cacheKey)\n if (cached) {\n return cached\n }\n }\n\n // Use lightweight version and extend with additional metadata only if needed\n const versionInfo = await this.getPackageVersions(packageName)\n\n const packageInfo = await this.executeWithRetry(async () => {\n // Only fetch full metadata if we actually need the extended info\n const authConfig = this.getAuthConfig(registryUrl)\n const packument = await pacote.packument(packageName, {\n registry: registryUrl,\n timeout: this.timeout,\n fullMetadata: true,\n ...authConfig,\n })\n\n return {\n name: versionInfo.name,\n description: (packument as any).description || undefined,\n homepage: (packument as any).homepage || undefined,\n repository: (packument as any).repository || undefined,\n license: (packument as any).license || undefined,\n author: (packument as any).author || undefined,\n maintainers: (packument as any).maintainers || undefined,\n keywords: (packument as any).keywords || undefined,\n versions: versionInfo.versions,\n latestVersion: versionInfo.latestVersion,\n tags: versionInfo.tags,\n time: versionInfo.time || {},\n }\n }, `Fetching package info for ${packageName}`)\n\n // Cache the result if caching is enabled\n if (this.cachingEnabled) {\n this.setCache(cacheKey, packageInfo)\n }\n\n return packageInfo\n }\n\n /**\n * Get the latest version of a package\n */\n async getLatestVersion(packageName: string): Promise<Version> {\n try {\n const versionInfo = await this.getPackageVersions(packageName)\n return Version.fromString(versionInfo.latestVersion)\n } catch (error) {\n throw new Error(`Failed to get latest version for ${packageName}: ${error}`)\n }\n }\n\n /**\n * Get the greatest version that satisfies a range\n */\n async getGreatestVersion(packageName: string, range?: VersionRange): Promise<Version> {\n try {\n const versionInfo = await this.getPackageVersions(packageName)\n\n if (!range) {\n return Version.fromString(versionInfo.latestVersion)\n }\n\n // Find the greatest version that satisfies the range\n const satisfyingVersions = versionInfo.versions.filter((v) => {\n try {\n const version = Version.fromString(v)\n return version.satisfies(range)\n } catch {\n return false\n }\n })\n\n if (satisfyingVersions.length === 0) {\n throw new Error(`No versions satisfy range ${range.toString()}`)\n }\n\n // Return the first (greatest) version\n if (!satisfyingVersions[0]) {\n throw new Error(`No satisfying versions found for ${packageName}`)\n }\n return Version.fromString(satisfyingVersions[0])\n } catch (error) {\n throw new Error(`Failed to get greatest version for ${packageName}: ${error}`)\n }\n }\n\n /**\n * Get versions by date (newest versions published)\n */\n async getNewestVersions(packageName: string, count: number = 10): Promise<Version[]> {\n try {\n const versionInfo = await this.getPackageVersions(packageName)\n\n // Sort versions by publication time\n const versionsWithTime = versionInfo.versions\n .map((version) => ({\n version,\n time: versionInfo.time?.[version] ? new Date(versionInfo.time[version]) : new Date(0),\n }))\n .sort((a, b) => b.time.getTime() - a.time.getTime())\n .slice(0, count)\n\n return versionsWithTime.map((item) => Version.fromString(item.version))\n } catch (error) {\n throw new Error(`Failed to get newest versions for ${packageName}: ${error}`)\n }\n }\n\n /**\n * Check for security vulnerabilities\n */\n async checkSecurityVulnerabilities(\n packageName: string,\n version: string\n ): Promise<SecurityReport> {\n const registryUrl = this.getRegistryForPackage(packageName)\n const cacheKey = `security:${registryUrl}:${packageName}@${version}`\n\n // Check cache first\n const cached = this.getFromCache(cacheKey)\n if (cached) {\n return cached\n }\n\n try {\n // Use npm audit API\n const auditData = {\n name: packageName,\n version: version,\n requires: {},\n dependencies: {},\n }\n\n const authConfig = this.getAuthConfig(registryUrl)\n const response = await npmRegistryFetch('/-/npm/v1/security/audits', {\n method: 'POST',\n body: JSON.stringify(auditData),\n headers: {\n 'Content-Type': 'application/json',\n },\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n })\n\n const auditResult = await response.json()\n const vulnerabilities: SecurityVulnerability[] = []\n\n // Parse audit results\n if (auditResult.advisories) {\n for (const advisory of Object.values(auditResult.advisories) as any[]) {\n vulnerabilities.push({\n id: advisory.id.toString(),\n title: advisory.title,\n severity: advisory.severity,\n description: advisory.overview,\n reference: advisory.url,\n vulnerable_versions: advisory.vulnerable_versions,\n patched_versions: advisory.patched_versions,\n recommendation: advisory.recommendation,\n })\n }\n }\n\n const securityReport: SecurityReport = {\n package: packageName,\n version: version,\n vulnerabilities,\n hasVulnerabilities: vulnerabilities.length > 0,\n }\n\n // Cache the result\n this.setCache(cacheKey, securityReport)\n\n return securityReport\n } catch (error) {\n // If security check fails, return empty report\n UserFriendlyErrorHandler.handleSecurityCheckFailure(packageName, error as Error)\n\n const emptyReport: SecurityReport = {\n package: packageName,\n version: version,\n vulnerabilities: [],\n hasVulnerabilities: false,\n }\n\n return emptyReport\n }\n }\n\n /**\n * Batch query multiple packages with progress tracking\n */\n async batchQueryVersions(\n packages: string[],\n progressCallback?: (completed: number, total: number, currentPackage: string) => void\n ): Promise<Map<string, PackageInfo>> {\n const results = new Map<string, PackageInfo>()\n let completed = 0\n const total = packages.length\n\n // Process packages in parallel with configurable concurrency\n const chunks = this.chunkArray(packages, this.concurrency)\n\n for (const chunk of chunks) {\n const promises = chunk.map(async (packageName) => {\n try {\n const info = await this.getPackageInfo(packageName)\n results.set(packageName, info)\n\n // Update progress\n completed++\n if (progressCallback) {\n progressCallback(completed, total, packageName)\n }\n } catch (error) {\n // Still count failed packages in progress\n completed++\n if (progressCallback) {\n progressCallback(completed, total, packageName)\n }\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error)\n }\n })\n\n await Promise.all(promises)\n }\n\n return results\n }\n\n /**\n * Check if package author has changed\n */\n async hasPackageAuthorChanged(\n packageName: string,\n fromVersion: string,\n toVersion: string\n ): Promise<boolean> {\n try {\n // const packageInfo = await this.getPackageInfo(packageName);\n\n const registryUrl = this.getRegistryForPackage(packageName)\n const authConfig = this.getAuthConfig(registryUrl)\n\n const fromVersionData = await pacote.manifest(`${packageName}@${fromVersion}`, {\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n })\n\n const toVersionData = await pacote.manifest(`${packageName}@${toVersion}`, {\n registry: registryUrl,\n timeout: this.timeout,\n ...authConfig,\n })\n\n // Compare authors/maintainers\n const fromAuthor = this.normalizeAuthor((fromVersionData as any).author)\n const toAuthor = this.normalizeAuthor((toVersionData as any).author)\n\n return fromAuthor !== toAuthor\n } catch (error) {\n // Log for debugging, don't show to user as this is not critical\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'author-check',\n })\n return false\n }\n }\n\n /**\n * Get package download statistics\n */\n async getDownloadStats(\n packageName: string,\n period: 'last-day' | 'last-week' | 'last-month' = 'last-week'\n ): Promise<number> {\n try {\n const response = await fetch(`https://api.npmjs.org/downloads/point/${period}/${packageName}`)\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`)\n }\n const data = (await response.json()) as any\n return data.downloads || 0\n } catch (error) {\n // Log for debugging, don't show to user as this is not critical\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'download-stats',\n })\n return 0\n }\n }\n\n /**\n * Clear all cache\n */\n clearCache(): void {\n this.cache.clear()\n }\n\n /**\n * Clear cache by type\n */\n clearCacheByType(type: 'versions' | 'package-info' | 'security' | 'all' = 'all'): void {\n if (type === 'all') {\n this.clearCache()\n return\n }\n\n const prefix =\n type === 'versions'\n ? 'package-versions:'\n : type === 'package-info'\n ? 'package-info:'\n : 'security:'\n\n const keysToDelete: string[] = []\n for (const key of this.cache.keys()) {\n if (key.startsWith(prefix)) {\n keysToDelete.push(key)\n }\n }\n\n keysToDelete.forEach((key) => this.cache.delete(key))\n }\n\n /**\n * Get cache statistics\n */\n getCacheStats(): {\n total: number\n versions: number\n packageInfo: number\n security: number\n expired: number\n } {\n const stats = { total: 0, versions: 0, packageInfo: 0, security: 0, expired: 0 }\n const now = Date.now()\n\n for (const [key, cached] of this.cache.entries()) {\n stats.total++\n\n const timeout = this.getCacheTimeout(key)\n if (now - cached.timestamp > timeout) {\n stats.expired++\n continue\n }\n\n if (key.startsWith('package-versions:')) {\n stats.versions++\n } else if (key.startsWith('package-info:')) {\n stats.packageInfo++\n } else if (key.startsWith('security:')) {\n stats.security++\n }\n }\n\n return stats\n }\n\n /**\n * Get item from cache if not expired\n */\n private getFromCache(key: string): any | null {\n const cached = this.cache.get(key)\n if (!cached) {\n return null\n }\n\n // Determine timeout based on cache key type\n const timeout = this.getCacheTimeout(key)\n\n if (Date.now() - cached.timestamp > timeout) {\n this.cache.delete(key)\n return null\n }\n\n return cached.data\n }\n\n /**\n * Get appropriate cache timeout based on key type\n */\n private getCacheTimeout(key: string): number {\n if (key.startsWith('package-versions:')) {\n return this.versionCacheTimeout\n } else if (key.startsWith('security:')) {\n return this.securityCacheTimeout\n } else if (key.startsWith('package-info:')) {\n return this.packageInfoCacheTimeout\n }\n\n // Default to version cache timeout for unknown keys\n return this.versionCacheTimeout\n }\n\n /**\n * Set item in cache\n */\n private setCache(key: string, data: any): void {\n this.cache.set(key, {\n data,\n timestamp: Date.now(),\n })\n }\n\n /**\n * Split array into chunks\n */\n private chunkArray<T>(array: T[], size: number): T[][] {\n const chunks: T[][] = []\n for (let i = 0; i < array.length; i += size) {\n chunks.push(array.slice(i, i + size))\n }\n return chunks\n }\n\n /**\n * Normalize author for comparison\n */\n private normalizeAuthor(author: any): string {\n if (typeof author === 'string') {\n return author.toLowerCase().trim()\n }\n if (typeof author === 'object' && author?.name) {\n return author.name.toLowerCase().trim()\n }\n return ''\n }\n}\n","/**\n * Catalog Update Service\n *\n * Core application service that handles catalog dependency updates.\n * Orchestrates domain objects and infrastructure services to provide\n * high-level use cases for checking and updating catalog dependencies.\n */\n\nimport { type AdvancedConfig, ConfigLoader, UserFriendlyErrorHandler } from '@pcu/utils'\nimport type { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js'\nimport { Version, type VersionRange } from '../../domain/value-objects/version.js'\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js'\nimport { NpmRegistryService } from '../../infrastructure/external-services/npmRegistryService.js'\nimport type { ProgressReporter } from '../interfaces/progressReporter.js'\n\nexport interface CheckOptions {\n workspacePath?: string | undefined\n catalogName?: string | undefined\n target?: UpdateTarget | undefined\n includePrerelease?: boolean | undefined\n exclude?: string[] | undefined\n include?: string[] | undefined\n progressReporter?: ProgressReporter | null\n}\n\nexport interface UpdateOptions extends CheckOptions {\n interactive?: boolean\n dryRun?: boolean\n force?: boolean\n createBackup?: boolean\n}\n\nexport interface OutdatedReport {\n workspace: {\n path: string\n name: string\n }\n catalogs: CatalogUpdateInfo[]\n totalOutdated: number\n hasUpdates: boolean\n}\n\nexport interface CatalogUpdateInfo {\n catalogName: string\n outdatedDependencies: OutdatedDependencyInfo[]\n totalPackages: number\n outdatedCount: number\n}\n\nexport interface OutdatedDependencyInfo {\n packageName: string\n currentVersion: string\n latestVersion: string\n wantedVersion: string\n updateType: 'major' | 'minor' | 'patch'\n isSecurityUpdate: boolean\n affectedPackages: string[]\n}\n\nexport interface UpdatePlan {\n workspace: {\n path: string\n name: string\n }\n updates: PlannedUpdate[]\n conflicts: VersionConflict[]\n totalUpdates: number\n hasConflicts: boolean\n}\n\nexport interface PlannedUpdate {\n catalogName: string\n packageName: string\n currentVersion: string\n newVersion: string\n updateType: 'major' | 'minor' | 'patch'\n reason: string\n affectedPackages: string[]\n requireConfirmation?: boolean\n autoUpdate?: boolean\n groupUpdate?: boolean\n}\n\nexport interface VersionConflict {\n packageName: string\n catalogs: Array<{\n catalogName: string\n currentVersion: string\n proposedVersion: string\n }>\n recommendation: string\n}\n\nexport interface UpdateResult {\n success: boolean\n workspace: {\n path: string\n name: string\n }\n updatedDependencies: UpdatedDependency[]\n skippedDependencies: SkippedDependency[]\n errors: UpdateError[]\n totalUpdated: number\n totalSkipped: number\n totalErrors: number\n}\n\nexport interface UpdatedDependency {\n catalogName: string\n packageName: string\n fromVersion: string\n toVersion: string\n updateType: 'major' | 'minor' | 'patch'\n}\n\nexport interface SkippedDependency {\n catalogName: string\n packageName: string\n currentVersion: string\n reason: string\n}\n\nexport interface UpdateError {\n catalogName: string\n packageName: string\n error: string\n fatal: boolean\n}\n\nexport interface ImpactAnalysis {\n packageName: string\n catalogName: string\n currentVersion: string\n proposedVersion: string\n updateType: 'major' | 'minor' | 'patch'\n affectedPackages: PackageImpact[]\n riskLevel: 'low' | 'medium' | 'high'\n securityImpact: SecurityImpact\n recommendations: string[]\n}\n\nexport interface PackageImpact {\n packageName: string\n packagePath: string\n dependencyType: 'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies'\n isBreakingChange: boolean\n compatibilityRisk: 'low' | 'medium' | 'high'\n}\n\nexport interface SecurityImpact {\n hasVulnerabilities: boolean\n fixedVulnerabilities: number\n newVulnerabilities: number\n severityChange: 'better' | 'worse' | 'same'\n}\n\nexport type UpdateTarget = 'latest' | 'greatest' | 'minor' | 'patch' | 'newest'\n\nexport class CatalogUpdateService {\n constructor(\n private readonly workspaceRepository: WorkspaceRepository,\n private readonly registryService: NpmRegistryService\n ) {}\n\n /**\n * Create a new CatalogUpdateService with advanced configuration\n */\n static createWithConfig(\n workspaceRepository: WorkspaceRepository,\n workspacePath?: string\n ): CatalogUpdateService {\n const config = ConfigLoader.loadConfig(workspacePath || process.cwd())\n\n // Create registry service with advanced configuration\n const advancedConfig: AdvancedConfig = {}\n\n if (config.advanced?.concurrency !== undefined) {\n advancedConfig.concurrency = config.advanced.concurrency\n }\n if (config.advanced?.timeout !== undefined) {\n advancedConfig.timeout = config.advanced.timeout\n }\n if (config.advanced?.retries !== undefined) {\n advancedConfig.retries = config.advanced.retries\n }\n if (config.advanced?.cacheValidityMinutes !== undefined) {\n advancedConfig.cacheValidityMinutes = config.advanced.cacheValidityMinutes\n }\n\n // Use default registry for now, npmrc will handle scoped registries\n const registryUrl = 'https://registry.npmjs.org/'\n const workingDirectory = workspacePath || process.cwd()\n\n const registryService = new NpmRegistryService(registryUrl, advancedConfig, workingDirectory)\n\n return new CatalogUpdateService(workspaceRepository, registryService)\n }\n\n /**\n * Check for outdated catalog dependencies\n */\n async checkOutdatedDependencies(options: CheckOptions = {}): Promise<OutdatedReport> {\n const workspacePath = WorkspacePath.fromString(options.workspacePath || process.cwd())\n\n // Load configuration\n const config = ConfigLoader.loadConfig(workspacePath.toString())\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(workspacePath)\n if (!workspace) {\n throw new Error(`No pnpm workspace found at ${workspacePath.toString()}`)\n }\n\n const catalogs = workspace.getCatalogs()\n const catalogInfos: CatalogUpdateInfo[] = []\n let totalOutdated = 0\n\n // Filter catalogs if specific catalog requested\n const catalogsToCheck = options.catalogName\n ? [catalogs.get(options.catalogName)].filter(Boolean)\n : catalogs.getAll()\n\n if (catalogsToCheck.length === 0) {\n throw new Error(\n options.catalogName\n ? `Catalog \"${options.catalogName}\" not found`\n : 'No catalogs found in workspace'\n )\n }\n\n // Calculate total packages across all catalogs\n let totalPackages = 0\n const allPackagesToCheck: Array<[string, any, any]> = []\n\n for (const catalog of catalogsToCheck) {\n if (!catalog) continue\n const dependencies = catalog.getDependencies()\n const packageArray = Array.from(dependencies)\n\n const packagesToCheck = packageArray.filter(([packageName]) => {\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config)\n return packageConfig.shouldUpdate\n })\n\n // Add catalog info to each package for processing\n packagesToCheck.forEach(([packageName, range]) => {\n allPackagesToCheck.push([packageName, range, catalog])\n })\n\n totalPackages += packagesToCheck.length\n }\n\n // Create a single progress bar for all catalogs\n let progressReporter: ProgressReporter | null = null\n if (totalPackages > 0 && options.progressReporter) {\n progressReporter = options.progressReporter\n progressReporter.start(`正在检查 ${totalPackages} 个依赖包...`, totalPackages)\n }\n\n let completed = 0\n\n // Check each catalog for outdated dependencies\n for (const catalog of catalogsToCheck) {\n if (!catalog) {\n throw new Error(`Catalog \"${catalogsToCheck[0]?.getName() || 'unknown'}\" not found`)\n }\n const dependencies = catalog.getDependencies()\n\n // Convert to array for parallel processing\n const packageArray = Array.from(dependencies)\n\n // Filter packages that should be updated based on configuration\n const packagesToCheck = packageArray.filter(([packageName]) => {\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config)\n return packageConfig.shouldUpdate\n })\n\n // Process packages in parallel with concurrency control (pass progress info)\n const outdatedDependencies = await this.processPackagesInParallel(\n packagesToCheck,\n catalog,\n workspace,\n config,\n options,\n progressReporter,\n completed,\n totalPackages\n )\n\n // Update completed count\n completed += packagesToCheck.length\n\n const catalogInfo: CatalogUpdateInfo = {\n catalogName: catalog!.getName(),\n outdatedDependencies,\n totalPackages: dependencies.size,\n outdatedCount: outdatedDependencies.length,\n }\n\n catalogInfos.push(catalogInfo)\n totalOutdated += outdatedDependencies.length\n }\n\n // Complete the progress bar\n if (progressReporter) {\n if (totalOutdated > 0) {\n progressReporter.success(`✅ 检查完成! 发现 ${totalOutdated} 个可更新的依赖包`)\n } else {\n progressReporter.success('✅ 检查完成! 所有依赖包都是最新的')\n }\n }\n\n return {\n workspace: {\n path: workspacePath.toString(),\n name: workspacePath.getDirectoryName(),\n },\n catalogs: catalogInfos,\n totalOutdated,\n hasUpdates: totalOutdated > 0,\n }\n }\n\n /**\n * Plan catalog dependency updates\n */\n async planUpdates(options: UpdateOptions): Promise<UpdatePlan> {\n const outdatedReport = await this.checkOutdatedDependencies(options)\n\n const updates: PlannedUpdate[] = []\n const conflicts: VersionConflict[] = []\n\n // Load configuration for package rules and monorepo settings\n const workspacePath = options.workspacePath || process.cwd()\n const config = ConfigLoader.loadConfig(workspacePath)\n\n // Convert outdated dependencies to planned updates\n for (const catalogInfo of outdatedReport.catalogs) {\n for (const outdated of catalogInfo.outdatedDependencies) {\n // Get package-specific configuration\n const packageConfig = ConfigLoader.getPackageConfig(outdated.packageName, config)\n\n const update: PlannedUpdate = {\n catalogName: catalogInfo.catalogName,\n packageName: outdated.packageName,\n currentVersion: outdated.currentVersion,\n newVersion: outdated.latestVersion,\n updateType: outdated.updateType,\n reason: this.getUpdateReason(outdated),\n affectedPackages: outdated.affectedPackages,\n requireConfirmation: packageConfig.requireConfirmation,\n autoUpdate: packageConfig.autoUpdate,\n groupUpdate: packageConfig.groupUpdate,\n }\n\n updates.push(update)\n }\n }\n\n // Handle syncVersions - ensure packages in syncVersions list are synchronized across catalogs\n if (config.monorepo?.syncVersions && config.monorepo.syncVersions.length > 0) {\n const workspacePathObj = WorkspacePath.fromString(workspacePath)\n const workspace = await this.workspaceRepository.findByPath(workspacePathObj)\n\n if (workspace) {\n updates.push(\n ...(await this.createSyncVersionUpdates(config.monorepo.syncVersions, workspace, updates))\n )\n }\n }\n\n // Detect conflicts (same package in multiple catalogs with different versions)\n const packageCatalogMap = new Map<string, PlannedUpdate[]>()\n\n for (const update of updates) {\n if (!packageCatalogMap.has(update.packageName)) {\n packageCatalogMap.set(update.packageName, [])\n }\n packageCatalogMap.get(update.packageName)!.push(update)\n }\n\n // Handle conflicts with catalogPriority\n for (const [packageName, packageUpdates] of packageCatalogMap) {\n if (packageUpdates.length > 1) {\n const uniqueVersions = new Set(packageUpdates.map((u) => u.newVersion))\n if (uniqueVersions.size > 1) {\n const resolvedConflict = this.resolveVersionConflict(\n packageName,\n packageUpdates,\n config.monorepo?.catalogPriority || ['default']\n )\n\n if (resolvedConflict) {\n conflicts.push(resolvedConflict)\n }\n }\n }\n }\n\n return {\n workspace: outdatedReport.workspace,\n updates,\n conflicts,\n totalUpdates: updates.length,\n hasConflicts: conflicts.length > 0,\n }\n }\n\n /**\n * Execute catalog dependency updates\n */\n async executeUpdates(plan: UpdatePlan, options: UpdateOptions): Promise<UpdateResult> {\n const workspacePath = WorkspacePath.fromString(plan.workspace.path)\n\n // Load configuration for security settings\n const config = ConfigLoader.loadConfig(workspacePath.toString())\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(workspacePath)\n if (!workspace) {\n throw new Error(`Workspace not found at ${workspacePath.toString()}`)\n }\n\n const updatedDependencies: UpdatedDependency[] = []\n const skippedDependencies: SkippedDependency[] = []\n const errors: UpdateError[] = []\n\n // Track security updates for notification\n const securityUpdates: string[] = []\n\n // Execute updates\n for (const update of plan.updates) {\n try {\n // Skip if conflicts exist and force is not enabled\n if (plan.hasConflicts && !options.force) {\n const hasConflict = plan.conflicts.some((c) => c.packageName === update.packageName)\n if (hasConflict) {\n skippedDependencies.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n currentVersion: update.currentVersion,\n reason: 'Version conflict - use --force to override',\n })\n continue\n }\n }\n\n // Check if this is a security update and track it\n let isSecurityUpdate = false\n if (config.security?.notifyOnSecurityUpdate) {\n try {\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n update.packageName,\n update.currentVersion\n )\n if (securityReport.hasVulnerabilities) {\n isSecurityUpdate = true\n securityUpdates.push(\n `${update.packageName}@${update.currentVersion} → ${update.newVersion}`\n )\n }\n } catch (error) {\n UserFriendlyErrorHandler.handleSecurityCheckFailure(\n update.packageName,\n error as Error,\n { operation: 'update' }\n )\n }\n }\n\n // Perform the update\n workspace.updateCatalogDependency(update.catalogName, update.packageName, update.newVersion)\n\n updatedDependencies.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n fromVersion: update.currentVersion,\n toVersion: update.newVersion,\n updateType: update.updateType,\n })\n\n // Log security update notification\n if (isSecurityUpdate && config.security?.notifyOnSecurityUpdate) {\n console.log(\n `✅ Security fix applied: ${update.packageName}@${update.currentVersion} → ${update.newVersion}`\n )\n }\n } catch (error) {\n errors.push({\n catalogName: update.catalogName,\n packageName: update.packageName,\n error: String(error),\n fatal: false,\n })\n }\n }\n\n // Save workspace if not in dry-run mode\n if (!options.dryRun && updatedDependencies.length > 0) {\n try {\n await this.workspaceRepository.save(workspace)\n\n // Show summary of security updates if any\n if (securityUpdates.length > 0 && config.security?.notifyOnSecurityUpdate) {\n console.log(`\\n🔒 Security Updates Summary:`)\n console.log(` Applied ${securityUpdates.length} security fix(es):`)\n securityUpdates.forEach((update) => console.log(` • ${update}`))\n }\n\n // Show summary of synced version updates\n const syncUpdates = updatedDependencies.filter((u) =>\n plan.updates.find(\n (pu) =>\n pu.packageName === u.packageName &&\n pu.catalogName === u.catalogName &&\n pu.reason.includes('Sync version')\n )\n )\n\n if (syncUpdates.length > 0) {\n console.log(`\\n🔄 Version Sync Summary:`)\n const syncedPackages = new Set(syncUpdates.map((u) => u.packageName))\n console.log(` Synchronized ${syncedPackages.size} package(s) across catalogs:`)\n\n // Group by package name\n const syncByPackage = new Map<string, typeof syncUpdates>()\n syncUpdates.forEach((update) => {\n if (!syncByPackage.has(update.packageName)) {\n syncByPackage.set(update.packageName, [])\n }\n syncByPackage.get(update.packageName)!.push(update)\n })\n\n syncByPackage.forEach((updates, packageName) => {\n const catalogs = updates.map((u) => u.catalogName).join(', ')\n const version = updates[0]?.toVersion\n console.log(` • ${packageName}@${version} in catalogs: ${catalogs}`)\n })\n }\n\n // Show catalog priority resolution if any\n if (\n plan.hasConflicts &&\n plan.conflicts.some((c) => c.recommendation.includes('Priority catalog'))\n ) {\n console.log(`\\n📋 Catalog Priority Resolutions:`)\n plan.conflicts\n .filter((c) => c.recommendation.includes('Priority catalog'))\n .forEach((conflict) => {\n console.log(` • ${conflict.packageName}: ${conflict.recommendation}`)\n })\n }\n } catch (error) {\n errors.push({\n catalogName: '',\n packageName: '',\n error: `Failed to save workspace: ${error}`,\n fatal: true,\n })\n }\n }\n\n return {\n success: errors.filter((e) => e.fatal).length === 0,\n workspace: plan.workspace,\n updatedDependencies,\n skippedDependencies,\n errors,\n totalUpdated: updatedDependencies.length,\n totalSkipped: skippedDependencies.length,\n totalErrors: errors.length,\n }\n }\n\n /**\n * Find which catalog contains a specific package\n * Returns the first catalog found containing the package, or null if not found\n */\n async findCatalogForPackage(packageName: string, workspacePath?: string): Promise<string | null> {\n const wsPath = WorkspacePath.fromString(workspacePath || process.cwd())\n\n const workspace = await this.workspaceRepository.findByPath(wsPath)\n if (!workspace) {\n return null\n }\n\n const catalogs = workspace.getCatalogs()\n for (const catalog of catalogs.getAll()) {\n if (catalog?.getDependencyVersion(packageName)) {\n return catalog.getName()\n }\n }\n\n return null\n }\n\n /**\n * Analyze the impact of updating a specific dependency\n */\n async analyzeImpact(\n catalogName: string,\n packageName: string,\n newVersion: string,\n workspacePath?: string\n ): Promise<ImpactAnalysis> {\n const wsPath = WorkspacePath.fromString(workspacePath || process.cwd())\n\n // Load workspace\n const workspace = await this.workspaceRepository.findByPath(wsPath)\n if (!workspace) {\n throw new Error(`No pnpm workspace found at ${wsPath.toString()}`)\n }\n\n const catalog = workspace.getCatalogs().get(catalogName)\n if (!catalog) {\n throw new Error(`Catalog \"${catalogName}\" not found`)\n }\n\n const currentRange = catalog.getDependencyVersion(packageName)\n if (!currentRange) {\n throw new Error(`Package \"${packageName}\" not found in catalog \"${catalogName}\"`)\n }\n\n const currentVersion = currentRange.toString()\n const proposedVersion = Version.fromString(newVersion)\n const currentVersionObj = currentRange.getMinVersion()\n\n if (!currentVersionObj) {\n throw new Error(`Cannot determine current version for ${packageName}`)\n }\n\n const updateType = currentVersionObj.getDifferenceType(proposedVersion)\n\n // Get affected packages\n const affectedPackagesCollection = workspace.getPackagesUsingCatalogDependency(\n catalogName,\n packageName\n )\n const packageImpacts: PackageImpact[] = []\n\n for (const pkg of affectedPackagesCollection.getAll()) {\n const catalogRefs = pkg\n .getCatalogReferences()\n .filter(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n )\n\n for (const ref of catalogRefs) {\n const isBreakingChange = updateType === 'major'\n const compatibilityRisk = this.assessCompatibilityRisk(updateType)\n\n packageImpacts.push({\n packageName: pkg.getName(),\n packagePath: pkg.getPath().toString(),\n dependencyType: ref.getDependencyType(),\n isBreakingChange,\n compatibilityRisk,\n })\n }\n }\n\n // Check security impact\n const securityImpact = await this.analyzeSecurityImpact(packageName, currentVersion, newVersion)\n\n // Assess overall risk\n const riskLevel = this.assessOverallRisk(updateType, packageImpacts, securityImpact)\n\n // Generate recommendations\n const recommendations = this.generateRecommendations(updateType, securityImpact, packageImpacts)\n\n return {\n packageName,\n catalogName,\n currentVersion,\n proposedVersion: newVersion,\n updateType: updateType as 'major' | 'minor' | 'patch',\n affectedPackages: packageImpacts,\n riskLevel,\n securityImpact,\n recommendations,\n }\n }\n\n /**\n * Process packages in parallel with concurrency control and progress tracking\n */\n private async processPackagesInParallel(\n packagesToCheck: Array<[string, any]>,\n catalog: any,\n workspace: any,\n config: any,\n options: CheckOptions,\n progressReporter: ProgressReporter | null,\n startingCompleted: number = 0,\n totalPackages: number = 0\n ): Promise<OutdatedDependencyInfo[]> {\n const concurrency = config.advanced?.concurrency || 8 // Increased from 5 to match NCU\n const outdatedDependencies: OutdatedDependencyInfo[] = []\n let completed = startingCompleted\n\n // Process packages in chunks with true parallelism within each chunk\n const chunks = this.chunkArray(packagesToCheck, concurrency)\n\n for (const chunk of chunks) {\n const chunkResults = await Promise.all(\n chunk.map(async ([packageName, currentRange]) => {\n try {\n const result = await this.processPackageCheck(\n packageName,\n currentRange,\n catalog,\n workspace,\n config,\n options\n )\n\n // Update progress for successful package\n completed++\n if (progressReporter && totalPackages > 0) {\n progressReporter.update(completed, `正在检查依赖包: ${packageName}`)\n }\n\n return result\n } catch (error) {\n // Update progress even for failed packages\n completed++\n if (progressReporter && totalPackages > 0) {\n progressReporter.update(completed, `跳过包 ${packageName} (检查失败)`)\n }\n\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'check',\n })\n return null\n }\n })\n )\n\n // Add successful results to the array\n chunkResults.forEach((result) => {\n if (result) {\n outdatedDependencies.push(result)\n }\n })\n }\n\n return outdatedDependencies\n }\n\n /**\n * Process a single package check (extracted from the main loop)\n */\n private async processPackageCheck(\n packageName: string,\n currentRange: any,\n catalog: any,\n workspace: any,\n config: any,\n options: CheckOptions\n ): Promise<OutdatedDependencyInfo | null> {\n // Get package-specific configuration\n const packageConfig = ConfigLoader.getPackageConfig(packageName, config)\n const effectiveTarget = packageConfig.target as UpdateTarget\n\n // Defer security checks - only do them after we know the package needs updating\n const outdatedInfo = await this.checkPackageUpdate(\n packageName,\n currentRange,\n effectiveTarget,\n options.includePrerelease || config.defaults?.includePrerelease || false\n )\n\n if (!outdatedInfo) {\n return null // Package doesn't need updating\n }\n\n // Now check for security vulnerabilities only for packages that need updating\n let hasSecurityVulnerabilities = false\n if (config.security?.autoFixVulnerabilities) {\n try {\n const currentVersion = currentRange.getMinVersion()?.toString()\n if (currentVersion) {\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n packageName,\n currentVersion\n )\n hasSecurityVulnerabilities = securityReport.hasVulnerabilities\n\n // Allow major updates for security fixes if configured\n if (hasSecurityVulnerabilities && config.security.allowMajorForSecurity) {\n // Re-check with 'latest' target if security fix requires it\n const securityFixInfo = await this.checkPackageUpdate(\n packageName,\n currentRange,\n 'latest',\n options.includePrerelease || config.defaults?.includePrerelease || false\n )\n if (securityFixInfo) {\n Object.assign(outdatedInfo, securityFixInfo)\n }\n }\n }\n } catch (error) {\n UserFriendlyErrorHandler.handleSecurityCheckFailure(packageName, error as Error)\n }\n }\n\n // Get affected packages\n const affectedPackages = workspace\n .getPackagesUsingCatalogDependency(catalog.getName(), packageName)\n .getPackageNames()\n\n // Log security notifications if enabled\n if (hasSecurityVulnerabilities && config.security?.notifyOnSecurityUpdate) {\n console.warn(\n `🔒 Security vulnerability detected in ${packageName}@${outdatedInfo.currentVersion}`\n )\n }\n\n return {\n ...outdatedInfo,\n affectedPackages,\n isSecurityUpdate: hasSecurityVulnerabilities || outdatedInfo.isSecurityUpdate,\n }\n }\n\n /**\n * Split array into chunks for parallel processing\n */\n private chunkArray<T>(array: T[], chunkSize: number): T[][] {\n const chunks: T[][] = []\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(array.slice(i, i + chunkSize))\n }\n return chunks\n }\n\n /**\n * Check if a package needs updating\n */\n private async checkPackageUpdate(\n packageName: string,\n currentRange: VersionRange,\n target: UpdateTarget,\n includePrerelease: boolean\n ): Promise<OutdatedDependencyInfo | null> {\n try {\n // Use lightweight version API for better performance\n const versionInfo = await this.registryService.getPackageVersions(packageName)\n\n let targetVersion: Version\n\n switch (target) {\n case 'latest':\n targetVersion = Version.fromString(versionInfo.latestVersion)\n break\n case 'greatest':\n targetVersion = await this.registryService.getGreatestVersion(packageName)\n break\n case 'newest': {\n const newestVersions = await this.registryService.getNewestVersions(packageName, 1)\n if (!newestVersions[0]) {\n throw new Error(`No versions found for ${packageName}`)\n }\n targetVersion = newestVersions[0]\n break\n }\n case 'minor':\n case 'patch':\n targetVersion = await this.getConstrainedVersion(packageName, currentRange, target)\n break\n default:\n targetVersion = Version.fromString(versionInfo.latestVersion)\n }\n\n // Skip prereleases unless explicitly requested\n if (!includePrerelease && targetVersion.isPrerelease()) {\n return null\n }\n\n const currentVersion = currentRange.getMinVersion()\n if (!currentVersion) {\n return null\n }\n\n // Check if update is needed\n if (!targetVersion.isNewerThan(currentVersion)) {\n return null\n }\n\n const updateType = currentVersion.getDifferenceType(targetVersion)\n\n // Check for security vulnerabilities\n const securityReport = await this.registryService.checkSecurityVulnerabilities(\n packageName,\n currentVersion.toString()\n )\n\n return {\n packageName,\n currentVersion: currentVersion.toString(),\n latestVersion: targetVersion.toString(),\n wantedVersion: targetVersion.toString(),\n updateType: updateType as 'major' | 'minor' | 'patch',\n isSecurityUpdate: securityReport.hasVulnerabilities,\n affectedPackages: [], // Will be filled by caller\n }\n } catch (error) {\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'update-check',\n })\n return null\n }\n }\n\n /**\n * Get version constrained by update type\n */\n private async getConstrainedVersion(\n packageName: string,\n currentRange: VersionRange,\n constraint: 'minor' | 'patch'\n ): Promise<Version> {\n const currentVersion = currentRange.getMinVersion()\n if (!currentVersion) {\n throw new Error(`Cannot determine current version for ${packageName}`)\n }\n\n const versionInfo = await this.registryService.getPackageVersions(packageName)\n\n // Filter versions based on constraint\n const compatibleVersions = versionInfo.versions.filter((v) => {\n try {\n const version = Version.fromString(v)\n const diff = currentVersion.getDifferenceType(version)\n\n if (constraint === 'patch') {\n return diff === 'patch' || diff === 'same'\n } else if (constraint === 'minor') {\n return diff === 'minor' || diff === 'patch' || diff === 'same'\n }\n\n return false\n } catch {\n return false\n }\n })\n\n if (compatibleVersions.length === 0) {\n return currentVersion\n }\n\n // Return the highest compatible version\n if (!compatibleVersions[0]) {\n throw new Error(`No compatible versions found for ${packageName}`)\n }\n return Version.fromString(compatibleVersions[0])\n }\n\n /**\n * Generate update reason description\n */\n private getUpdateReason(outdated: OutdatedDependencyInfo): string {\n if (outdated.isSecurityUpdate) {\n return 'Security update available'\n }\n\n switch (outdated.updateType) {\n case 'major':\n return 'Major version update available'\n case 'minor':\n return 'Minor version update available'\n case 'patch':\n return 'Patch version update available'\n default:\n return 'Update available'\n }\n }\n\n /**\n * Analyze security impact of version change\n */\n private async analyzeSecurityImpact(\n packageName: string,\n currentVersion: string,\n newVersion: string\n ): Promise<SecurityImpact> {\n try {\n const [currentSecurity, newSecurity] = await Promise.all([\n this.registryService.checkSecurityVulnerabilities(packageName, currentVersion),\n this.registryService.checkSecurityVulnerabilities(packageName, newVersion),\n ])\n\n const fixedVulnerabilities =\n currentSecurity.vulnerabilities.length - newSecurity.vulnerabilities.length\n const newVulnerabilities = Math.max(\n 0,\n newSecurity.vulnerabilities.length - currentSecurity.vulnerabilities.length\n )\n\n let severityChange: SecurityImpact['severityChange'] = 'same'\n if (fixedVulnerabilities > 0) {\n severityChange = 'better'\n } else if (newVulnerabilities > 0) {\n severityChange = 'worse'\n }\n\n return {\n hasVulnerabilities: currentSecurity.hasVulnerabilities || newSecurity.hasVulnerabilities,\n fixedVulnerabilities: Math.max(0, fixedVulnerabilities),\n newVulnerabilities,\n severityChange,\n }\n } catch {\n return {\n hasVulnerabilities: false,\n fixedVulnerabilities: 0,\n newVulnerabilities: 0,\n severityChange: 'same',\n }\n }\n }\n\n /**\n * Assess compatibility risk for update type\n */\n private assessCompatibilityRisk(updateType: string): 'low' | 'medium' | 'high' {\n switch (updateType) {\n case 'patch':\n return 'low'\n case 'minor':\n return 'medium'\n case 'major':\n return 'high'\n default:\n return 'medium'\n }\n }\n\n /**\n * Assess overall risk level\n */\n private assessOverallRisk(\n updateType: string,\n packageImpacts: PackageImpact[],\n securityImpact: SecurityImpact\n ): 'low' | 'medium' | 'high' {\n // Security fixes reduce risk\n if (securityImpact.fixedVulnerabilities > 0) {\n return updateType === 'major' ? 'medium' : 'low'\n }\n\n // New vulnerabilities increase risk\n if (securityImpact.newVulnerabilities > 0) {\n return 'high'\n }\n\n // Base risk on update type and number of affected packages\n const affectedPackageCount = packageImpacts.length\n\n if (updateType === 'major') {\n return affectedPackageCount > 5 ? 'high' : 'medium'\n } else if (updateType === 'minor') {\n return affectedPackageCount > 10 ? 'medium' : 'low'\n } else {\n return 'low'\n }\n }\n\n /**\n * Generate recommendations based on analysis\n */\n private generateRecommendations(\n updateType: string,\n securityImpact: SecurityImpact,\n packageImpacts: PackageImpact[]\n ): string[] {\n const recommendations: string[] = []\n\n if (securityImpact.fixedVulnerabilities > 0) {\n recommendations.push('🔒 Security update recommended - fixes known vulnerabilities')\n }\n\n if (securityImpact.newVulnerabilities > 0) {\n recommendations.push('⚠️ New vulnerabilities detected - review carefully before updating')\n }\n\n if (updateType === 'major') {\n recommendations.push('📖 Review changelog for breaking changes before updating')\n recommendations.push('🧪 Test thoroughly in development environment')\n }\n\n const breakingChangePackages = packageImpacts.filter((p) => p.isBreakingChange)\n if (breakingChangePackages.length > 0) {\n recommendations.push(`🔧 ${breakingChangePackages.length} package(s) may need code changes`)\n }\n\n if (packageImpacts.length > 5) {\n recommendations.push('📦 Many packages affected - consider updating in batches')\n }\n\n if (recommendations.length === 0) {\n recommendations.push('✅ Low risk update - safe to proceed')\n }\n\n return recommendations\n }\n\n /**\n * Create sync version updates for packages that should be synchronized across catalogs\n */\n private async createSyncVersionUpdates(\n syncVersions: string[],\n workspace: any,\n existingUpdates: PlannedUpdate[]\n ): Promise<PlannedUpdate[]> {\n const syncUpdates: PlannedUpdate[] = []\n const catalogs = workspace.getCatalogs()\n const allCatalogs = catalogs.getAll()\n\n for (const packageName of syncVersions) {\n // Check if this package exists in multiple catalogs\n const catalogsWithPackage = allCatalogs.filter((catalog: any) =>\n catalog?.getDependencyVersion(packageName)\n )\n\n if (catalogsWithPackage.length <= 1) {\n continue // No need to sync if package is only in one catalog\n }\n\n // Find the highest version from existing updates or determine target version\n let targetVersion: string | null = null\n let targetUpdateType: 'major' | 'minor' | 'patch' = 'patch'\n\n // Check if this package has any existing updates\n const existingUpdate = existingUpdates.find((u) => u.packageName === packageName)\n if (existingUpdate) {\n targetVersion = existingUpdate.newVersion\n targetUpdateType = existingUpdate.updateType\n } else {\n // Get latest version for this package using lightweight API\n try {\n const versionInfo = await this.registryService.getPackageVersions(packageName)\n targetVersion = versionInfo.latestVersion\n } catch (error) {\n UserFriendlyErrorHandler.handlePackageQueryFailure(packageName, error as Error, {\n operation: 'sync',\n })\n continue\n }\n }\n\n if (!targetVersion) continue\n\n // Create sync updates for all catalogs that need updating\n for (const catalog of catalogsWithPackage) {\n const currentRange = catalog.getDependencyVersion(packageName)\n if (!currentRange) continue\n\n const currentVersion = currentRange.getMinVersion()\n if (!currentVersion) continue\n\n const currentVersionString = currentVersion.toString()\n\n // Skip if already at target version\n if (currentVersionString === targetVersion) continue\n\n // Check if this update already exists\n const existingUpdateForCatalog = existingUpdates.find(\n (u) => u.packageName === packageName && u.catalogName === catalog.getName()\n )\n\n if (existingUpdateForCatalog) {\n // Update the existing update to use the sync version\n existingUpdateForCatalog.newVersion = targetVersion\n existingUpdateForCatalog.reason = `Sync version across catalogs: ${existingUpdateForCatalog.reason}`\n } else {\n // Create new sync update\n const affectedPackages = workspace\n .getPackagesUsingCatalogDependency(catalog.getName(), packageName)\n .getPackageNames()\n\n const syncUpdate: PlannedUpdate = {\n catalogName: catalog.getName(),\n packageName: packageName,\n currentVersion: currentVersionString,\n newVersion: targetVersion,\n updateType: targetUpdateType,\n reason: `Sync version with other catalogs`,\n affectedPackages,\n requireConfirmation: true, // Sync updates should be confirmed\n autoUpdate: false,\n groupUpdate: true,\n }\n\n syncUpdates.push(syncUpdate)\n }\n }\n }\n\n return syncUpdates\n }\n\n /**\n * Resolve version conflicts using catalog priority\n */\n private resolveVersionConflict(\n packageName: string,\n packageUpdates: PlannedUpdate[],\n catalogPriority: string[]\n ): VersionConflict | null {\n // Find the highest priority catalog with an update for this package\n let priorityCatalog: PlannedUpdate | null = null\n\n for (const catalogName of catalogPriority) {\n const catalogUpdate = packageUpdates.find((u) => u.catalogName === catalogName)\n if (catalogUpdate) {\n priorityCatalog = catalogUpdate\n break\n }\n }\n\n // If no priority catalog found, use the first one\n if (!priorityCatalog) {\n priorityCatalog = packageUpdates[0] || null\n }\n\n // Update all other catalogs to use the priority catalog's version\n const priorityVersion = priorityCatalog?.newVersion\n if (priorityVersion && priorityCatalog) {\n for (const update of packageUpdates) {\n if (update.catalogName !== priorityCatalog.catalogName) {\n update.newVersion = priorityVersion\n update.reason = `Using version from priority catalog (${priorityCatalog.catalogName}): ${update.reason}`\n }\n }\n }\n\n // Create conflict record for reporting\n const uniqueVersions = new Set(packageUpdates.map((u) => u.newVersion))\n if (uniqueVersions.size > 1) {\n return {\n packageName,\n catalogs: packageUpdates.map((u) => ({\n catalogName: u.catalogName,\n currentVersion: u.currentVersion,\n proposedVersion: u.newVersion,\n })),\n recommendation: `Resolved using catalog priority. Priority catalog '${priorityCatalog?.catalogName}' version '${priorityVersion}' selected.`,\n }\n }\n\n return null\n }\n}\n","/**\n * Workspace Service\n *\n * Application service for workspace discovery, validation, and management.\n * Provides high-level operations for working with pnpm workspaces.\n */\n\nimport type { Workspace } from '../../domain/entities/workspace.js'\nimport type { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js'\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js'\n\nexport interface WorkspaceInfo {\n path: string\n name: string\n isValid: boolean\n hasPackages: boolean\n hasCatalogs: boolean\n packageCount: number\n catalogCount: number\n catalogNames: string[]\n}\n\nexport interface WorkspaceValidationReport {\n isValid: boolean\n workspace: WorkspaceInfo\n errors: string[]\n warnings: string[]\n recommendations: string[]\n}\n\nexport interface CatalogInfo {\n name: string\n packageCount: number\n packages: string[]\n mode: string\n}\n\nexport interface PackageInfo {\n name: string\n path: string\n hasPackageJson: boolean\n catalogReferences: CatalogReferenceInfo[]\n dependencies: DependencyInfo[]\n}\n\nexport interface CatalogReferenceInfo {\n catalogName: string\n packageName: string\n dependencyType: string\n}\n\nexport interface DependencyInfo {\n name: string\n version: string\n type: string\n isCatalogReference: boolean\n}\n\nexport class WorkspaceService {\n constructor(private readonly workspaceRepository: WorkspaceRepository) {}\n\n /**\n * Discover workspace from current directory or specified path\n */\n async discoverWorkspace(searchPath?: string): Promise<Workspace> {\n const path = searchPath ? WorkspacePath.fromString(searchPath) : undefined\n\n const workspace = await this.workspaceRepository.discoverWorkspace(path)\n\n if (!workspace) {\n throw new Error(\n searchPath\n ? `No pnpm workspace found at or above ${searchPath}`\n : 'No pnpm workspace found in current directory or parent directories'\n )\n }\n\n return workspace\n }\n\n /**\n * Get workspace information\n */\n async getWorkspaceInfo(workspacePath?: string): Promise<WorkspaceInfo> {\n const path = WorkspacePath.fromString(workspacePath || process.cwd())\n\n // Try to load workspace\n const workspace = await this.workspaceRepository.findByPath(path)\n\n if (!workspace) {\n return {\n path: path.toString(),\n name: path.getDirectoryName(),\n isValid: false,\n hasPackages: false,\n hasCatalogs: false,\n packageCount: 0,\n catalogCount: 0,\n catalogNames: [],\n }\n }\n\n const packages = workspace.getPackages()\n const catalogs = workspace.getCatalogs()\n\n return {\n path: path.toString(),\n name: path.getDirectoryName(),\n isValid: true,\n hasPackages: !packages.isEmpty(),\n hasCatalogs: !catalogs.isEmpty(),\n packageCount: packages.size(),\n catalogCount: catalogs.size(),\n catalogNames: catalogs.getCatalogNames(),\n }\n }\n\n /**\n * Validate workspace integrity and configuration\n */\n async validateWorkspace(workspacePath?: string): Promise<WorkspaceValidationReport> {\n const path = WorkspacePath.fromString(workspacePath || process.cwd())\n const workspaceInfo = await this.getWorkspaceInfo(workspacePath)\n\n if (!workspaceInfo.isValid) {\n return {\n isValid: false,\n workspace: workspaceInfo,\n errors: ['Not a valid pnpm workspace'],\n warnings: [],\n recommendations: [\n 'Initialize a pnpm workspace with: pnpm init',\n 'Create pnpm-workspace.yaml file',\n 'Define package patterns in pnpm-workspace.yaml',\n ],\n }\n }\n\n // Load workspace for detailed validation\n const workspace = await this.workspaceRepository.findByPath(path)\n if (!workspace) {\n throw new Error('Workspace validation failed - workspace not found')\n }\n\n // Validate workspace consistency\n const validationResult = workspace.validateConsistency()\n const recommendations: string[] = []\n\n // Generate recommendations based on workspace state\n if (!workspaceInfo.hasCatalogs) {\n recommendations.push('Consider using catalogs to centralize dependency management')\n }\n\n if (workspaceInfo.packageCount === 0) {\n recommendations.push('No packages found - check your package patterns in pnpm-workspace.yaml')\n }\n\n if (workspaceInfo.packageCount > 20) {\n recommendations.push(\n 'Large workspace detected - consider organizing packages into logical groups'\n )\n }\n\n // Validate catalogs\n const catalogValidation = workspace.getCatalogs().validate()\n const allErrors = [...validationResult.getErrors(), ...catalogValidation.getErrors()]\n const allWarnings = [...validationResult.getWarnings(), ...catalogValidation.getWarnings()]\n\n return {\n isValid: validationResult.getIsValid() && catalogValidation.getIsValid(),\n workspace: workspaceInfo,\n errors: allErrors,\n warnings: allWarnings,\n recommendations,\n }\n }\n\n /**\n * Get detailed catalog information\n */\n async getCatalogs(workspacePath?: string): Promise<CatalogInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath)\n const catalogs = workspace.getCatalogs()\n\n return catalogs.getAll().map((catalog) => ({\n name: catalog.getName(),\n packageCount: catalog.getPackageNames().length,\n packages: catalog.getPackageNames(),\n mode: catalog.getMode(),\n }))\n }\n\n /**\n * Get detailed package information\n */\n async getPackages(workspacePath?: string): Promise<PackageInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath)\n const packages = workspace.getPackages()\n\n return packages.getAll().map((pkg) => {\n const catalogReferences = pkg.getCatalogReferences()\n const dependencies = pkg.getDependencies()\n\n // Collect all dependencies from all types\n const allDependencies: DependencyInfo[] = []\n const depTypes = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const\n\n for (const depType of depTypes) {\n const deps = dependencies.getDependenciesByType(depType)\n for (const [name, version] of deps) {\n allDependencies.push({\n name,\n version,\n type: depType,\n isCatalogReference: version.startsWith('catalog:'),\n })\n }\n }\n\n return {\n name: pkg.getName(),\n path: pkg.getPath().toString(),\n hasPackageJson: true, // If package was loaded, it has package.json\n catalogReferences: catalogReferences.map((ref) => ({\n catalogName: ref.getCatalogName(),\n packageName: ref.getPackageName(),\n dependencyType: ref.getDependencyType(),\n })),\n dependencies: allDependencies,\n }\n })\n }\n\n /**\n * Check if workspace uses catalogs\n */\n async usesCatalogs(workspacePath?: string): Promise<boolean> {\n try {\n const workspace = await this.discoverWorkspace(workspacePath)\n return !workspace.getCatalogs().isEmpty()\n } catch {\n return false\n }\n }\n\n /**\n * Get packages that use a specific catalog\n */\n async getPackagesUsingCatalog(\n catalogName: string,\n workspacePath?: string\n ): Promise<PackageInfo[]> {\n const workspace = await this.discoverWorkspace(workspacePath)\n const packagesUsingCatalog = workspace.getPackages().findPackagesUsingCatalog(catalogName)\n\n return packagesUsingCatalog.map((pkg) => {\n const catalogReferences = pkg\n .getCatalogReferences()\n .filter((ref) => ref.getCatalogName() === catalogName)\n\n const dependencies = pkg.getDependencies()\n const allDependencies: DependencyInfo[] = []\n const depTypes = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const\n\n for (const depType of depTypes) {\n const deps = dependencies.getDependenciesByType(depType)\n for (const [name, version] of deps) {\n allDependencies.push({\n name,\n version,\n type: depType,\n isCatalogReference: version.startsWith('catalog:'),\n })\n }\n }\n\n return {\n name: pkg.getName(),\n path: pkg.getPath().toString(),\n hasPackageJson: true,\n catalogReferences: catalogReferences.map((ref) => ({\n catalogName: ref.getCatalogName(),\n packageName: ref.getPackageName(),\n dependencyType: ref.getDependencyType(),\n })),\n dependencies: allDependencies,\n }\n })\n }\n\n /**\n * Get workspace statistics\n */\n async getWorkspaceStats(workspacePath?: string): Promise<WorkspaceStats> {\n const workspace = await this.discoverWorkspace(workspacePath)\n const packages = workspace.getPackages()\n const catalogs = workspace.getCatalogs()\n\n // Count dependencies\n let totalDependencies = 0\n let catalogDependencies = 0\n const dependencyTypes = {\n dependencies: 0,\n devDependencies: 0,\n peerDependencies: 0,\n optionalDependencies: 0,\n }\n\n for (const pkg of packages.getAll()) {\n const deps = pkg.getDependencies()\n const catalogRefs = pkg.getCatalogReferences()\n\n catalogDependencies += catalogRefs.length\n\n for (const depType of Object.keys(dependencyTypes) as Array<keyof typeof dependencyTypes>) {\n const typeDeps = deps.getDependenciesByType(depType)\n dependencyTypes[depType] += typeDeps.size\n totalDependencies += typeDeps.size\n }\n }\n\n // Count catalog definitions\n let totalCatalogEntries = 0\n for (const catalog of catalogs.getAll()) {\n totalCatalogEntries += catalog.getPackageNames().length\n }\n\n return {\n workspace: {\n path: workspace.getPath().toString(),\n name: workspace.getPath().getDirectoryName(),\n },\n packages: {\n total: packages.size(),\n withCatalogReferences: packages.findPackagesWithCatalogReferences().length,\n },\n catalogs: {\n total: catalogs.size(),\n totalEntries: totalCatalogEntries,\n },\n dependencies: {\n total: totalDependencies,\n catalogReferences: catalogDependencies,\n byType: dependencyTypes,\n },\n }\n }\n\n /**\n * Find workspaces in a directory tree\n */\n async findWorkspaces(searchRoot: string): Promise<WorkspaceInfo[]> {\n // This would implement a recursive search for pnpm workspaces\n // For now, we'll just check the provided directory\n const workspaceInfo = await this.getWorkspaceInfo(searchRoot)\n return workspaceInfo.isValid ? [workspaceInfo] : []\n }\n\n /**\n * Check workspace health\n */\n async checkHealth(workspacePath?: string): Promise<WorkspaceHealthReport> {\n const validation = await this.validateWorkspace(workspacePath)\n const stats = await this.getWorkspaceStats(workspacePath)\n\n const issues: HealthIssue[] = []\n const score = this.calculateHealthScore(validation, stats, issues)\n\n return {\n score,\n status: this.getHealthStatus(score),\n validation,\n stats,\n issues,\n lastChecked: new Date(),\n }\n }\n\n /**\n * Calculate workspace health score (0-100)\n */\n private calculateHealthScore(\n validation: WorkspaceValidationReport,\n stats: WorkspaceStats,\n issues: HealthIssue[]\n ): number {\n let score = 100\n\n // Deduct points for errors\n score -= validation.errors.length * 20\n\n // Deduct points for warnings\n score -= validation.warnings.length * 5\n\n // Deduct points for workspace issues\n if (!stats.workspace) {\n score -= 30\n }\n\n if (stats.packages.total === 0) {\n score -= 20\n issues.push({\n type: 'warning',\n message: 'No packages found in workspace',\n suggestion: 'Check package patterns in pnpm-workspace.yaml',\n })\n }\n\n if (stats.catalogs.total === 0) {\n score -= 10\n issues.push({\n type: 'info',\n message: 'No catalogs defined',\n suggestion: 'Consider using catalogs for better dependency management',\n })\n }\n\n // Bonus for good practices\n if (stats.dependencies.catalogReferences > 0) {\n score += 5\n }\n\n return Math.max(0, Math.min(100, score))\n }\n\n /**\n * Get health status from score\n */\n private getHealthStatus(score: number): 'excellent' | 'good' | 'fair' | 'poor' {\n if (score >= 90) return 'excellent'\n if (score >= 70) return 'good'\n if (score >= 50) return 'fair'\n return 'poor'\n }\n}\n\nexport interface WorkspaceStats {\n workspace: {\n path: string\n name: string\n }\n packages: {\n total: number\n withCatalogReferences: number\n }\n catalogs: {\n total: number\n totalEntries: number\n }\n dependencies: {\n total: number\n catalogReferences: number\n byType: {\n dependencies: number\n devDependencies: number\n peerDependencies: number\n optionalDependencies: number\n }\n }\n}\n\nexport interface HealthIssue {\n type: 'error' | 'warning' | 'info'\n message: string\n suggestion: string\n}\n\nexport interface WorkspaceHealthReport {\n score: number\n status: 'excellent' | 'good' | 'fair' | 'poor'\n validation: WorkspaceValidationReport\n stats: WorkspaceStats\n issues: HealthIssue[]\n lastChecked: Date\n}\n","/**\n * Catalog Entity\n *\n * Represents a pnpm catalog that manages dependency versions centrally.\n * A catalog contains a collection of dependencies with their version ranges.\n */\n\nimport { VersionRange } from '../value-objects/version.js'\n\nexport type CatalogId = string\nexport type PackageName = string\nexport type CatalogName = string\n\nexport class Catalog {\n private readonly id: CatalogId\n private readonly name: CatalogName\n private readonly dependencies: Map<PackageName, VersionRange>\n private readonly mode: CatalogMode\n\n private constructor(\n id: CatalogId,\n name: CatalogName,\n dependencies: Map<PackageName, VersionRange>,\n mode: CatalogMode = CatalogMode.MANUAL\n ) {\n this.id = id\n this.name = name\n this.dependencies = new Map(dependencies)\n this.mode = mode\n }\n\n /**\n * Create a new Catalog\n */\n public static create(\n id: CatalogId,\n name: CatalogName,\n dependencies: Record<string, string> = {},\n mode: CatalogMode = CatalogMode.MANUAL\n ): Catalog {\n const dependencyMap = new Map<PackageName, VersionRange>()\n\n for (const [packageName, versionRange] of Object.entries(dependencies)) {\n try {\n dependencyMap.set(packageName, VersionRange.fromString(versionRange))\n } catch (error) {\n throw new Error(\n `Invalid version range for package \"${packageName}\" in catalog \"${name}\": ${versionRange}`\n )\n }\n }\n\n return new Catalog(id, name, dependencyMap, mode)\n }\n\n /**\n * Get catalog identifier\n */\n public getId(): CatalogId {\n return this.id\n }\n\n /**\n * Get catalog name\n */\n public getName(): CatalogName {\n return this.name\n }\n\n /**\n * Get catalog mode\n */\n public getMode(): CatalogMode {\n return this.mode\n }\n\n /**\n * Get all dependencies in this catalog\n */\n public getDependencies(): ReadonlyMap<PackageName, VersionRange> {\n return this.dependencies\n }\n\n /**\n * Get all package names in this catalog\n */\n public getPackageNames(): PackageName[] {\n return Array.from(this.dependencies.keys())\n }\n\n /**\n * Check if catalog contains a specific package\n */\n public hasDependency(packageName: PackageName): boolean {\n return this.dependencies.has(packageName)\n }\n\n /**\n * Get version range for a specific package\n */\n public getDependencyVersion(packageName: PackageName): VersionRange | null {\n return this.dependencies.get(packageName) || null\n }\n\n /**\n * Add or update a dependency\n */\n public updateDependencyVersion(packageName: PackageName, versionRange: string): void {\n try {\n const parsedRange = VersionRange.fromString(versionRange)\n this.dependencies.set(packageName, parsedRange)\n } catch (error) {\n throw new Error(`Invalid version range for package \"${packageName}\": ${versionRange}`)\n }\n }\n\n /**\n * Remove a dependency from the catalog\n */\n public removeDependency(packageName: PackageName): boolean {\n return this.dependencies.delete(packageName)\n }\n\n /**\n * Check version compatibility for a package\n */\n public checkVersionCompatibility(packageName: PackageName, requestedVersion: string): boolean {\n const catalogVersion = this.dependencies.get(packageName)\n if (!catalogVersion) {\n return false\n }\n\n try {\n const requestedRange = VersionRange.fromString(requestedVersion)\n return catalogVersion.isCompatibleWith(requestedRange)\n } catch {\n return false\n }\n }\n\n /**\n * Get packages that would be affected by changing a dependency version\n */\n public getAffectedPackagesByDependencyChange(\n packageName: PackageName,\n newVersionRange: string\n ): PackageName[] {\n if (!this.hasDependency(packageName)) {\n return []\n }\n\n try {\n const newRange = VersionRange.fromString(newVersionRange)\n const currentRange = this.dependencies.get(packageName)!\n\n // If the ranges are compatible, no packages are affected\n if (currentRange.isCompatibleWith(newRange)) {\n return []\n }\n\n // Return all packages that use this catalog (this would typically be resolved\n // at the aggregate level with workspace information)\n return [packageName]\n } catch {\n return [packageName]\n }\n }\n\n /**\n * Validate catalog integrity\n */\n public validate(): CatalogValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Check for empty catalog\n if (this.dependencies.size === 0) {\n warnings.push(`Catalog \"${this.name}\" is empty`)\n }\n\n // Validate each dependency\n for (const [packageName, versionRange] of this.dependencies) {\n // Check package name format\n if (!this.isValidPackageName(packageName)) {\n errors.push(`Invalid package name: \"${packageName}\"`)\n }\n\n // Check for common issues\n if (versionRange.toString().includes('*')) {\n warnings.push(`Package \"${packageName}\" uses wildcard version which may be unstable`)\n }\n }\n\n return new CatalogValidationResult(errors.length === 0, errors, warnings)\n }\n\n /**\n * Convert catalog to plain object for serialization\n */\n public toPlainObject(): CatalogData {\n const dependencies: Record<string, string> = {}\n\n for (const [packageName, versionRange] of this.dependencies) {\n dependencies[packageName] = versionRange.toString()\n }\n\n return {\n id: this.id,\n name: this.name,\n dependencies,\n mode: this.mode,\n }\n }\n\n /**\n * Create catalog from plain object\n */\n public static fromPlainObject(data: CatalogData): Catalog {\n return Catalog.create(data.id, data.name, data.dependencies, data.mode)\n }\n\n /**\n * Check if a package name is valid\n */\n private isValidPackageName(packageName: string): boolean {\n // Basic npm package name validation\n const validPackageNameRegex = /^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/\n return validPackageNameRegex.test(packageName)\n }\n\n /**\n * Check equality with another catalog\n */\n public equals(other: Catalog): boolean {\n if (this.id !== other.id || this.name !== other.name || this.mode !== other.mode) {\n return false\n }\n\n if (this.dependencies.size !== other.dependencies.size) {\n return false\n }\n\n for (const [packageName, versionRange] of this.dependencies) {\n const otherRange = other.dependencies.get(packageName)\n if (!otherRange || !versionRange.equals(otherRange)) {\n return false\n }\n }\n\n return true\n }\n}\n\n/**\n * Catalog Mode Enum\n */\nexport enum CatalogMode {\n MANUAL = 'manual',\n STRICT = 'strict',\n PREFER = 'prefer',\n}\n\n/**\n * Catalog Data Interface for serialization\n */\nexport interface CatalogData {\n id: CatalogId\n name: CatalogName\n dependencies: Record<string, string>\n mode: CatalogMode\n}\n\n/**\n * Catalog Validation Result\n */\nexport class CatalogValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid\n }\n\n public getErrors(): string[] {\n return [...this.errors]\n }\n\n public getWarnings(): string[] {\n return [...this.warnings]\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0\n }\n}\n","/**\n * Package Entity\n *\n * Represents a package in a pnpm workspace that may reference catalog dependencies.\n * Handles package.json structure and catalog dependency references.\n */\n\nimport type { WorkspacePath } from '../value-objects/workspacePath.js'\n\nexport type PackageId = string\nexport type PackageName = string\nexport type DependencyType =\n | 'dependencies'\n | 'devDependencies'\n | 'peerDependencies'\n | 'optionalDependencies'\n\nexport class Package {\n private readonly id: PackageId\n private readonly name: PackageName\n private readonly path: WorkspacePath\n private readonly dependencies: DependencyCollection\n private readonly catalogReferences: CatalogReference[]\n private readonly originalData: PackageJsonData\n\n private constructor(\n id: PackageId,\n name: PackageName,\n path: WorkspacePath,\n dependencies: DependencyCollection,\n catalogReferences: CatalogReference[],\n originalData: PackageJsonData\n ) {\n this.id = id\n this.name = name\n this.path = path\n this.dependencies = dependencies\n this.catalogReferences = [...catalogReferences]\n this.originalData = { ...originalData }\n }\n\n /**\n * Create a new Package\n */\n public static create(\n id: PackageId,\n name: PackageName,\n path: WorkspacePath,\n packageJsonData: PackageJsonData\n ): Package {\n const dependencies = DependencyCollection.fromPackageJson(packageJsonData)\n const catalogReferences = Package.extractCatalogReferences(packageJsonData)\n\n return new Package(id, name, path, dependencies, catalogReferences, packageJsonData)\n }\n\n /**\n * Get package identifier\n */\n public getId(): PackageId {\n return this.id\n }\n\n /**\n * Get package name\n */\n public getName(): PackageName {\n return this.name\n }\n\n /**\n * Get package path\n */\n public getPath(): WorkspacePath {\n return this.path\n }\n\n /**\n * Get all dependencies\n */\n public getDependencies(): DependencyCollection {\n return this.dependencies\n }\n\n /**\n * Get catalog references\n */\n public getCatalogReferences(): CatalogReference[] {\n return [...this.catalogReferences]\n }\n\n /**\n * Get catalog dependencies only\n */\n public getCatalogDependencies(): CatalogDependency[] {\n return this.catalogReferences.map(\n (ref) =>\n new CatalogDependency(ref.getPackageName(), ref.getCatalogName(), ref.getDependencyType())\n )\n }\n\n /**\n * Check if package uses a specific catalog dependency\n */\n public usesCatalogDependency(catalogName: string, packageName: string): boolean {\n return this.catalogReferences.some(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n )\n }\n\n /**\n * Update a dependency from catalog\n */\n public updateDependencyFromCatalog(\n catalogName: string,\n packageName: string,\n _newVersion: string\n ): void {\n const reference = this.catalogReferences.find(\n (ref) => ref.getCatalogName() === catalogName && ref.getPackageName() === packageName\n )\n\n if (!reference) {\n throw new Error(\n `Package \"${this.name}\" does not reference \"${packageName}\" from catalog \"${catalogName}\"`\n )\n }\n\n // Update the dependency in the collection\n this.dependencies.updateDependency(\n reference.getDependencyType(),\n packageName,\n `catalog:${catalogName === 'default' ? '' : catalogName}`\n )\n }\n\n /**\n * Get dependencies of a specific type\n */\n public getDependenciesByType(type: DependencyType): Map<string, string> {\n return this.dependencies.getDependenciesByType(type)\n }\n\n /**\n * Get package.json data representation\n */\n public toPackageJsonData(): PackageJsonData {\n // Start with original package.json to preserve fields like scripts, author, etc.\n const data: PackageJsonData = { ...this.originalData }\n\n // Replace dependency sections with updated versions\n data.dependencies = Object.fromEntries(this.dependencies.getDependenciesByType('dependencies'))\n data.devDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('devDependencies')\n )\n data.peerDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('peerDependencies')\n )\n data.optionalDependencies = Object.fromEntries(\n this.dependencies.getDependenciesByType('optionalDependencies')\n )\n\n return data\n }\n\n /**\n * Extract catalog references from package.json data\n */\n private static extractCatalogReferences(packageJsonData: PackageJsonData): CatalogReference[] {\n const references: CatalogReference[] = []\n const dependencyTypes: DependencyType[] = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ]\n\n for (const depType of dependencyTypes) {\n const deps = packageJsonData[depType] || {}\n\n for (const [packageName, version] of Object.entries(deps)) {\n if (typeof version === 'string' && version.startsWith('catalog:')) {\n const catalogName = version === 'catalog:' ? 'default' : version.substring(8)\n references.push(new CatalogReference(catalogName, packageName, depType))\n }\n }\n }\n\n return references\n }\n\n /**\n * Validate package structure\n */\n public validate(): PackageValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Validate package name\n if (!this.isValidPackageName(this.name)) {\n errors.push(`Invalid package name: \"${this.name}\"`)\n }\n\n // Validate catalog references\n for (const ref of this.catalogReferences) {\n if (!this.isValidPackageName(ref.getPackageName())) {\n errors.push(`Invalid dependency name in catalog reference: \"${ref.getPackageName()}\"`)\n }\n }\n\n return new PackageValidationResult(errors.length === 0, errors, warnings)\n }\n\n /**\n * Check if package name is valid\n */\n private isValidPackageName(packageName: string): boolean {\n const validPackageNameRegex = /^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/\n return validPackageNameRegex.test(packageName)\n }\n\n /**\n * Check equality with another package\n */\n public equals(other: Package): boolean {\n return this.id === other.id && this.name === other.name && this.path.equals(other.path)\n }\n}\n\n/**\n * Catalog Reference Value Object\n */\nexport class CatalogReference {\n constructor(\n private readonly catalogName: string,\n private readonly packageName: string,\n private readonly dependencyType: DependencyType\n ) {}\n\n public getCatalogName(): string {\n return this.catalogName\n }\n\n public getPackageName(): string {\n return this.packageName\n }\n\n public getDependencyType(): DependencyType {\n return this.dependencyType\n }\n\n public equals(other: CatalogReference): boolean {\n return (\n this.catalogName === other.catalogName &&\n this.packageName === other.packageName &&\n this.dependencyType === other.dependencyType\n )\n }\n}\n\n/**\n * Catalog Dependency Value Object\n */\nexport class CatalogDependency {\n constructor(\n private readonly packageName: string,\n private readonly catalogName: string,\n private readonly dependencyType: DependencyType\n ) {}\n\n public getPackageName(): string {\n return this.packageName\n }\n\n public getCatalogName(): string {\n return this.catalogName\n }\n\n public getDependencyType(): DependencyType {\n return this.dependencyType\n }\n}\n\n/**\n * Dependency Collection Value Object\n */\nexport class DependencyCollection {\n private readonly dependencies: Map<DependencyType, Map<string, string>>\n\n private constructor(dependencies: Map<DependencyType, Map<string, string>>) {\n this.dependencies = dependencies\n }\n\n public static empty(): DependencyCollection {\n const deps = new Map<DependencyType, Map<string, string>>()\n deps.set('dependencies', new Map())\n deps.set('devDependencies', new Map())\n deps.set('peerDependencies', new Map())\n deps.set('optionalDependencies', new Map())\n return new DependencyCollection(deps)\n }\n\n public static fromPackageJson(packageJsonData: PackageJsonData): DependencyCollection {\n const deps = new Map<DependencyType, Map<string, string>>()\n\n deps.set('dependencies', new Map(Object.entries(packageJsonData.dependencies || {})))\n deps.set('devDependencies', new Map(Object.entries(packageJsonData.devDependencies || {})))\n deps.set('peerDependencies', new Map(Object.entries(packageJsonData.peerDependencies || {})))\n deps.set(\n 'optionalDependencies',\n new Map(Object.entries(packageJsonData.optionalDependencies || {}))\n )\n\n return new DependencyCollection(deps)\n }\n\n public getDependenciesByType(type: DependencyType): Map<string, string> {\n return new Map(this.dependencies.get(type) || [])\n }\n\n public updateDependency(type: DependencyType, packageName: string, version: string): void {\n const typeMap = this.dependencies.get(type)\n if (typeMap) {\n typeMap.set(packageName, version)\n }\n }\n\n public filterByCatalogDependency(\n _catalogName: string,\n _packageName: string\n ): DependencyCollection {\n // This would filter dependencies that match catalog references\n // Implementation would require catalog reference information\n return this\n }\n}\n\n/**\n * Package.json Data Interface\n */\nexport interface PackageJsonData {\n name: string\n version?: string\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n optionalDependencies?: Record<string, string>\n [key: string]: any\n}\n\n/**\n * Package Validation Result\n */\nexport class PackageValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid\n }\n\n public getErrors(): string[] {\n return [...this.errors]\n }\n\n public getWarnings(): string[] {\n return [...this.warnings]\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0\n }\n}\n","/**\n * Workspace Entity\n *\n * Represents a pnpm workspace with catalog configuration.\n * This is a core domain entity that encapsulates workspace business logic.\n */\n\nimport type { CatalogCollection } from '../value-objects/catalogCollection.js'\nimport type { PackageCollection } from '../value-objects/packageCollection.js'\nimport type { WorkspaceConfig } from '../value-objects/workspaceConfig.js'\nimport type { WorkspaceId } from '../value-objects/workspaceId.js'\nimport type { WorkspacePath } from '../value-objects/workspacePath.js'\n\nexport class Workspace {\n private constructor(\n private readonly id: WorkspaceId,\n private readonly path: WorkspacePath,\n private config: WorkspaceConfig,\n private catalogs: CatalogCollection,\n private readonly packages: PackageCollection\n ) {}\n\n /**\n * Create a new Workspace instance\n */\n public static create(\n id: WorkspaceId,\n path: WorkspacePath,\n config: WorkspaceConfig,\n catalogs: CatalogCollection,\n packages: PackageCollection\n ): Workspace {\n return new Workspace(id, path, config, catalogs, packages)\n }\n\n /**\n * Get workspace identifier\n */\n public getId(): WorkspaceId {\n return this.id\n }\n\n /**\n * Get workspace path\n */\n public getPath(): WorkspacePath {\n return this.path\n }\n\n /**\n * Get workspace configuration\n */\n public getConfig(): WorkspaceConfig {\n return this.config\n }\n\n /**\n * Get all catalogs in this workspace\n */\n public getCatalogs(): CatalogCollection {\n return this.catalogs\n }\n\n /**\n * Get all packages in this workspace\n */\n public getPackages(): PackageCollection {\n return this.packages\n }\n\n /**\n * Check if workspace has a specific catalog\n */\n public hasCatalog(catalogName: string): boolean {\n return this.catalogs.has(catalogName)\n }\n\n /**\n * Get packages that use a specific catalog dependency\n */\n public getPackagesUsingCatalogDependency(\n catalogName: string,\n packageName: string\n ): PackageCollection {\n return this.packages.filterByCatalogDependency(catalogName, packageName)\n }\n\n /**\n * Validate workspace consistency\n * Ensures all catalog references in packages exist in catalogs\n */\n public validateConsistency(): ValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Check if all catalog references in packages exist\n for (const pkg of this.packages.getAll()) {\n const catalogRefs = pkg.getCatalogReferences()\n\n for (const ref of catalogRefs) {\n if (!this.catalogs.has(ref.getCatalogName())) {\n errors.push(\n `Package \"${pkg.getName()}\" references unknown catalog \"${ref.getCatalogName()}\"`\n )\n }\n\n const catalog = this.catalogs.get(ref.getCatalogName())\n if (catalog && !catalog.hasDependency(ref.getPackageName())) {\n warnings.push(\n `Package \"${pkg.getName()}\" references \"${ref.getPackageName()}\" ` +\n `from catalog \"${ref.getCatalogName()}\" but it's not defined in the catalog`\n )\n }\n }\n }\n\n return new ValidationResult(errors.length === 0, errors, warnings)\n }\n\n /**\n * Get outdated catalog dependencies\n */\n public async getOutdatedCatalogDependencies(): Promise<OutdatedDependency[]> {\n // This would typically use a domain service to check versions\n // For now, return empty array as placeholder\n return []\n }\n\n /**\n * Update a catalog dependency version\n */\n public updateCatalogDependency(\n catalogName: string,\n packageName: string,\n newVersion: string\n ): void {\n const catalog = this.catalogs.get(catalogName)\n if (!catalog) {\n throw new Error(`Catalog \"${catalogName}\" not found`)\n }\n\n // Update the catalog in the collection\n catalog.updateDependencyVersion(packageName, newVersion)\n\n // Also update the WorkspaceConfig to ensure consistency\n this.config = this.config.updateCatalogDependency(catalogName, packageName, newVersion)\n }\n}\n\n/**\n * Validation result value object\n */\nexport class ValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid\n }\n\n public getErrors(): string[] {\n return [...this.errors]\n }\n\n public getWarnings(): string[] {\n return [...this.warnings]\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0\n }\n}\n\n/**\n * Outdated dependency value object\n */\nexport class OutdatedDependency {\n constructor(\n private readonly catalogName: string,\n private readonly packageName: string,\n private readonly currentVersion: string,\n private readonly latestVersion: string,\n private readonly updateType: 'major' | 'minor' | 'patch'\n ) {}\n\n public getCatalogName(): string {\n return this.catalogName\n }\n\n public getPackageName(): string {\n return this.packageName\n }\n\n public getCurrentVersion(): string {\n return this.currentVersion\n }\n\n public getLatestVersion(): string {\n return this.latestVersion\n }\n\n public getUpdateType(): 'major' | 'minor' | 'patch' {\n return this.updateType\n }\n}\n","/**\n * CatalogCollection Value Object\n *\n * Represents a collection of catalogs in a workspace.\n * Provides operations for managing and querying multiple catalogs.\n */\n\nimport type { Catalog, CatalogName } from '../entities/catalog.js'\n\nexport class CatalogCollection {\n private readonly catalogs: Map<CatalogName, Catalog>\n\n private constructor(catalogs: Map<CatalogName, Catalog>) {\n this.catalogs = new Map(catalogs)\n }\n\n /**\n * Create an empty catalog collection\n */\n public static empty(): CatalogCollection {\n return new CatalogCollection(new Map())\n }\n\n /**\n * Create a catalog collection from an array of catalogs\n */\n public static fromCatalogs(catalogs: Catalog[]): CatalogCollection {\n const catalogMap = new Map<CatalogName, Catalog>()\n\n for (const catalog of catalogs) {\n catalogMap.set(catalog.getName(), catalog)\n }\n\n return new CatalogCollection(catalogMap)\n }\n\n /**\n * Create a catalog collection from a Map\n */\n public static fromMap(catalogMap: Map<CatalogName, Catalog>): CatalogCollection {\n return new CatalogCollection(catalogMap)\n }\n\n /**\n * Check if collection contains a catalog with the given name\n */\n public has(catalogName: CatalogName): boolean {\n return this.catalogs.has(catalogName)\n }\n\n /**\n * Get a catalog by name\n */\n public get(catalogName: CatalogName): Catalog | undefined {\n return this.catalogs.get(catalogName)\n }\n\n /**\n * Get all catalogs as an array\n */\n public getAll(): Catalog[] {\n return Array.from(this.catalogs.values())\n }\n\n /**\n * Get all catalog names\n */\n public getCatalogNames(): CatalogName[] {\n return Array.from(this.catalogs.keys())\n }\n\n /**\n * Get the number of catalogs\n */\n public size(): number {\n return this.catalogs.size\n }\n\n /**\n * Check if collection is empty\n */\n public isEmpty(): boolean {\n return this.catalogs.size === 0\n }\n\n /**\n * Add a catalog to the collection\n */\n public add(catalog: Catalog): CatalogCollection {\n const newCatalogs = new Map(this.catalogs)\n newCatalogs.set(catalog.getName(), catalog)\n return new CatalogCollection(newCatalogs)\n }\n\n /**\n * Remove a catalog from the collection\n */\n public remove(catalogName: CatalogName): CatalogCollection {\n const newCatalogs = new Map(this.catalogs)\n newCatalogs.delete(catalogName)\n return new CatalogCollection(newCatalogs)\n }\n\n /**\n * Update a catalog in the collection\n */\n public update(catalog: Catalog): CatalogCollection {\n if (!this.has(catalog.getName())) {\n throw new Error(`Catalog \"${catalog.getName()}\" not found in collection`)\n }\n\n const newCatalogs = new Map(this.catalogs)\n newCatalogs.set(catalog.getName(), catalog)\n return new CatalogCollection(newCatalogs)\n }\n\n /**\n * Get the default catalog (named 'default' or the first one)\n */\n public getDefault(): Catalog | undefined {\n // First, try to find a catalog named 'default'\n const defaultCatalog = this.catalogs.get('default')\n if (defaultCatalog) {\n return defaultCatalog\n }\n\n // If no 'default' catalog, return the first one\n const firstCatalog = this.catalogs.values().next().value\n return firstCatalog\n }\n\n /**\n * Filter catalogs by a predicate function\n */\n public filter(predicate: (catalog: Catalog) => boolean): CatalogCollection {\n const filteredCatalogs = new Map<CatalogName, Catalog>()\n\n for (const [name, catalog] of this.catalogs) {\n if (predicate(catalog)) {\n filteredCatalogs.set(name, catalog)\n }\n }\n\n return new CatalogCollection(filteredCatalogs)\n }\n\n /**\n * Find catalogs that contain a specific package\n */\n public findCatalogsWithPackage(packageName: string): Catalog[] {\n return this.getAll().filter((catalog) => catalog.hasDependency(packageName))\n }\n\n /**\n * Get all unique package names across all catalogs\n */\n public getAllPackageNames(): string[] {\n const packageNames = new Set<string>()\n\n for (const catalog of this.catalogs.values()) {\n for (const packageName of catalog.getPackageNames()) {\n packageNames.add(packageName)\n }\n }\n\n return Array.from(packageNames)\n }\n\n /**\n * Validate all catalogs in the collection\n */\n public validate(): CatalogCollectionValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Check for empty collection\n if (this.isEmpty()) {\n warnings.push('No catalogs found in workspace')\n }\n\n // Validate each catalog\n for (const catalog of this.catalogs.values()) {\n const result = catalog.validate()\n errors.push(...result.getErrors().map((err) => `Catalog \"${catalog.getName()}\": ${err}`))\n warnings.push(\n ...result.getWarnings().map((warn) => `Catalog \"${catalog.getName()}\": ${warn}`)\n )\n }\n\n // Check for duplicate package definitions across catalogs\n const packageCatalogMap = new Map<string, string[]>()\n\n for (const catalog of this.catalogs.values()) {\n for (const packageName of catalog.getPackageNames()) {\n if (!packageCatalogMap.has(packageName)) {\n packageCatalogMap.set(packageName, [])\n }\n packageCatalogMap.get(packageName)!.push(catalog.getName())\n }\n }\n\n // Warn about packages defined in multiple catalogs\n for (const [packageName, catalogNames] of packageCatalogMap) {\n if (catalogNames.length > 1) {\n warnings.push(\n `Package \"${packageName}\" is defined in multiple catalogs: ${catalogNames.join(', ')}`\n )\n }\n }\n\n return new CatalogCollectionValidationResult(errors.length === 0, errors, warnings)\n }\n\n /**\n * Convert to a Map for serialization\n */\n public toMap(): Map<CatalogName, Catalog> {\n return new Map(this.catalogs)\n }\n\n /**\n * Iterate over catalogs\n */\n public *[Symbol.iterator](): Iterator<[CatalogName, Catalog]> {\n yield* this.catalogs\n }\n\n /**\n * Check equality with another catalog collection\n */\n public equals(other: CatalogCollection): boolean {\n if (this.size() !== other.size()) {\n return false\n }\n\n for (const [name, catalog] of this.catalogs) {\n const otherCatalog = other.get(name)\n if (!otherCatalog || !catalog.equals(otherCatalog)) {\n return false\n }\n }\n\n return true\n }\n}\n\n/**\n * Catalog Collection Validation Result\n */\nexport class CatalogCollectionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid\n }\n\n public getErrors(): string[] {\n return [...this.errors]\n }\n\n public getWarnings(): string[] {\n return [...this.warnings]\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0\n }\n}\n","/**\n * PackageCollection Value Object\n *\n * Represents a collection of packages in a workspace.\n * Provides operations for managing and querying multiple packages.\n */\n\nimport type { Package, PackageName } from '../entities/package.js'\n\nexport class PackageCollection {\n private readonly packages: Map<PackageName, Package>\n\n private constructor(packages: Map<PackageName, Package>) {\n this.packages = new Map(packages)\n }\n\n /**\n * Create an empty package collection\n */\n public static empty(): PackageCollection {\n return new PackageCollection(new Map())\n }\n\n /**\n * Create a package collection from an array of packages\n */\n public static fromPackages(packages: Package[]): PackageCollection {\n const packageMap = new Map<PackageName, Package>()\n\n for (const pkg of packages) {\n packageMap.set(pkg.getName(), pkg)\n }\n\n return new PackageCollection(packageMap)\n }\n\n /**\n * Create a package collection from a Map\n */\n public static fromMap(packageMap: Map<PackageName, Package>): PackageCollection {\n return new PackageCollection(packageMap)\n }\n\n /**\n * Check if collection contains a package with the given name\n */\n public has(packageName: PackageName): boolean {\n return this.packages.has(packageName)\n }\n\n /**\n * Get a package by name\n */\n public get(packageName: PackageName): Package | undefined {\n return this.packages.get(packageName)\n }\n\n /**\n * Get all packages as an array\n */\n public getAll(): Package[] {\n return Array.from(this.packages.values())\n }\n\n /**\n * Get all package names\n */\n public getPackageNames(): PackageName[] {\n return Array.from(this.packages.keys())\n }\n\n /**\n * Get the number of packages\n */\n public size(): number {\n return this.packages.size\n }\n\n /**\n * Check if collection is empty\n */\n public isEmpty(): boolean {\n return this.packages.size === 0\n }\n\n /**\n * Add a package to the collection\n */\n public add(pkg: Package): PackageCollection {\n const newPackages = new Map(this.packages)\n newPackages.set(pkg.getName(), pkg)\n return new PackageCollection(newPackages)\n }\n\n /**\n * Remove a package from the collection\n */\n public remove(packageName: PackageName): PackageCollection {\n const newPackages = new Map(this.packages)\n newPackages.delete(packageName)\n return new PackageCollection(newPackages)\n }\n\n /**\n * Update a package in the collection\n */\n public update(pkg: Package): PackageCollection {\n if (!this.has(pkg.getName())) {\n throw new Error(`Package \"${pkg.getName()}\" not found in collection`)\n }\n\n const newPackages = new Map(this.packages)\n newPackages.set(pkg.getName(), pkg)\n return new PackageCollection(newPackages)\n }\n\n /**\n * Filter packages by a predicate function\n */\n public filter(predicate: (pkg: Package) => boolean): PackageCollection {\n const filteredPackages = new Map<PackageName, Package>()\n\n for (const [name, pkg] of this.packages) {\n if (predicate(pkg)) {\n filteredPackages.set(name, pkg)\n }\n }\n\n return new PackageCollection(filteredPackages)\n }\n\n /**\n * Filter packages that use a specific catalog dependency\n */\n public filterByCatalogDependency(catalogName: string, packageName: string): PackageCollection {\n return this.filter((pkg) => pkg.usesCatalogDependency(catalogName, packageName))\n }\n\n /**\n * Find packages that have catalog references\n */\n public findPackagesWithCatalogReferences(): Package[] {\n return this.getAll().filter((pkg) => pkg.getCatalogReferences().length > 0)\n }\n\n /**\n * Find packages that reference a specific catalog\n */\n public findPackagesUsingCatalog(catalogName: string): Package[] {\n return this.getAll().filter((pkg) =>\n pkg.getCatalogReferences().some((ref) => ref.getCatalogName() === catalogName)\n )\n }\n\n /**\n * Get all unique catalog names referenced by packages\n */\n public getReferencedCatalogNames(): string[] {\n const catalogNames = new Set<string>()\n\n for (const pkg of this.packages.values()) {\n for (const ref of pkg.getCatalogReferences()) {\n catalogNames.add(ref.getCatalogName())\n }\n }\n\n return Array.from(catalogNames)\n }\n\n /**\n * Get all unique dependency names across all packages\n */\n public getAllDependencyNames(): string[] {\n const dependencyNames = new Set<string>()\n\n for (const pkg of this.packages.values()) {\n const deps = pkg.getDependencies()\n\n // Add dependencies from all types\n for (const depType of [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n ] as const) {\n for (const depName of deps.getDependenciesByType(depType).keys()) {\n dependencyNames.add(depName)\n }\n }\n }\n\n return Array.from(dependencyNames)\n }\n\n /**\n * Find packages that have a specific dependency\n */\n public findPackagesWithDependency(dependencyName: string): Package[] {\n return this.getAll().filter((pkg) => {\n const deps = pkg.getDependencies()\n return ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'].some(\n (depType) => deps.getDependenciesByType(depType as any).has(dependencyName)\n )\n })\n }\n\n /**\n * Validate all packages in the collection\n */\n public validate(): PackageCollectionValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Check for empty collection\n if (this.isEmpty()) {\n warnings.push('No packages found in workspace')\n }\n\n // Validate each package\n for (const pkg of this.packages.values()) {\n const result = pkg.validate()\n errors.push(...result.getErrors().map((err) => `Package \"${pkg.getName()}\": ${err}`))\n warnings.push(...result.getWarnings().map((warn) => `Package \"${pkg.getName()}\": ${warn}`))\n }\n\n // Check for duplicate package names (shouldn't happen with Map, but good to verify)\n const packageNames = this.getPackageNames()\n const uniqueNames = new Set(packageNames)\n if (packageNames.length !== uniqueNames.size) {\n errors.push('Duplicate package names found in collection')\n }\n\n return new PackageCollectionValidationResult(errors.length === 0, errors, warnings)\n }\n\n /**\n * Group packages by workspace path\n */\n public groupByWorkspacePath(): Map<string, Package[]> {\n const grouped = new Map<string, Package[]>()\n\n for (const pkg of this.packages.values()) {\n const pathKey = pkg.getPath().toString()\n if (!grouped.has(pathKey)) {\n grouped.set(pathKey, [])\n }\n grouped.get(pathKey)!.push(pkg)\n }\n\n return grouped\n }\n\n /**\n * Convert to a Map for serialization\n */\n public toMap(): Map<PackageName, Package> {\n return new Map(this.packages)\n }\n\n /**\n * Iterate over packages\n */\n public *[Symbol.iterator](): Iterator<[PackageName, Package]> {\n yield* this.packages\n }\n\n /**\n * Check equality with another package collection\n */\n public equals(other: PackageCollection): boolean {\n if (this.size() !== other.size()) {\n return false\n }\n\n for (const [name, pkg] of this.packages) {\n const otherPackage = other.get(name)\n if (!otherPackage || !pkg.equals(otherPackage)) {\n return false\n }\n }\n\n return true\n }\n}\n\n/**\n * Package Collection Validation Result\n */\nexport class PackageCollectionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid\n }\n\n public getErrors(): string[] {\n return [...this.errors]\n }\n\n public getWarnings(): string[] {\n return [...this.warnings]\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0\n }\n}\n","/**\n * WorkspaceConfig Value Object\n *\n * Represents the configuration settings for a pnpm workspace.\n * Includes catalog mode, package patterns, and other workspace-specific settings.\n */\n\nimport { CatalogMode } from '../entities/catalog.js'\n\nexport class WorkspaceConfig {\n private readonly catalogMode: CatalogMode\n private readonly packagePatterns: string[]\n private readonly catalogs: Map<string, CatalogDefinition>\n private readonly shamefullyHoist: boolean\n private readonly linkWorkspacePackages: boolean | 'deep'\n private readonly originalData: PnpmWorkspaceData\n\n private constructor(\n catalogMode: CatalogMode,\n packagePatterns: string[],\n catalogs: Map<string, CatalogDefinition>,\n shamefullyHoist: boolean = false,\n linkWorkspacePackages: boolean | 'deep' = true,\n originalData: PnpmWorkspaceData = {} as PnpmWorkspaceData\n ) {\n this.catalogMode = catalogMode\n this.packagePatterns = [...packagePatterns]\n this.catalogs = new Map(catalogs)\n this.shamefullyHoist = shamefullyHoist\n this.linkWorkspacePackages = linkWorkspacePackages\n this.originalData = { ...originalData }\n }\n\n /**\n * Create a WorkspaceConfig from pnpm-workspace.yaml data\n */\n public static fromWorkspaceData(data: PnpmWorkspaceData): WorkspaceConfig {\n const packagePatterns = data.packages || []\n const catalogMode = data.catalogMode || CatalogMode.MANUAL\n\n // Process catalogs\n const catalogs = new Map<string, CatalogDefinition>()\n\n // Add default catalog if exists\n if (data.catalog) {\n catalogs.set('default', new CatalogDefinition('default', data.catalog))\n }\n\n // Add named catalogs if they exist\n if (data.catalogs) {\n for (const [name, dependencies] of Object.entries(data.catalogs)) {\n catalogs.set(name, new CatalogDefinition(name, dependencies))\n }\n }\n\n return new WorkspaceConfig(\n catalogMode,\n packagePatterns,\n catalogs,\n data.shamefullyHoist,\n data.linkWorkspacePackages,\n data\n )\n }\n\n /**\n * Create a default WorkspaceConfig\n */\n public static createDefault(): WorkspaceConfig {\n const defaultData: PnpmWorkspaceData = {\n packages: ['packages/*'],\n }\n return new WorkspaceConfig(\n CatalogMode.MANUAL,\n ['packages/*'],\n new Map(),\n false,\n true,\n defaultData\n )\n }\n\n /**\n * Get catalog mode\n */\n public getCatalogMode(): CatalogMode {\n return this.catalogMode\n }\n\n /**\n * Get package patterns\n */\n public getPackagePatterns(): string[] {\n return [...this.packagePatterns]\n }\n\n /**\n * Get catalog definitions\n */\n public getCatalogDefinitions(): Map<string, CatalogDefinition> {\n return new Map(this.catalogs)\n }\n\n /**\n * Get a specific catalog definition\n */\n public getCatalogDefinition(name: string): CatalogDefinition | undefined {\n return this.catalogs.get(name)\n }\n\n /**\n * Check if a catalog is defined\n */\n public hasCatalog(name: string): boolean {\n return this.catalogs.has(name)\n }\n\n /**\n * Get all catalog names\n */\n public getCatalogNames(): string[] {\n return Array.from(this.catalogs.keys())\n }\n\n /**\n * Check if shamefully hoist is enabled\n */\n public isShamefullyHoist(): boolean {\n return this.shamefullyHoist\n }\n\n /**\n * Get link workspace packages setting\n */\n public getLinkWorkspacePackages(): boolean | 'deep' {\n return this.linkWorkspacePackages\n }\n\n /**\n * Check if workspace has any catalogs\n */\n public hasCatalogs(): boolean {\n return this.catalogs.size > 0\n }\n\n /**\n * Update a catalog dependency (creates a new WorkspaceConfig)\n */\n public updateCatalogDependency(\n catalogName: string,\n packageName: string,\n version: string\n ): WorkspaceConfig {\n const catalogDef = this.catalogs.get(catalogName)\n if (!catalogDef) {\n throw new Error(`Catalog \"${catalogName}\" not found`)\n }\n\n // Create updated catalog definition\n const updatedCatalogDef = catalogDef.updateDependencyVersion(packageName, version)\n\n // Create new catalogs map with the updated definition\n const updatedCatalogs = new Map(this.catalogs)\n updatedCatalogs.set(catalogName, updatedCatalogDef)\n\n // Return new WorkspaceConfig instance\n return new WorkspaceConfig(\n this.catalogMode,\n this.packagePatterns,\n updatedCatalogs,\n this.shamefullyHoist,\n this.linkWorkspacePackages,\n this.originalData\n )\n }\n\n /**\n * Get the default catalog definition\n */\n public getDefaultCatalog(): CatalogDefinition | undefined {\n return this.catalogs.get('default')\n }\n\n /**\n * Validate workspace configuration\n */\n public validate(): WorkspaceConfigValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Validate package patterns\n if (this.packagePatterns.length === 0) {\n warnings.push('No package patterns defined - workspace may not discover any packages')\n }\n\n // Validate package patterns format\n for (const pattern of this.packagePatterns) {\n if (!pattern || pattern.trim().length === 0) {\n errors.push('Empty package pattern found')\n }\n\n // Basic glob pattern validation\n if (pattern.includes('**') && pattern.indexOf('**') !== pattern.lastIndexOf('**')) {\n warnings.push(`Complex glob pattern may be inefficient: ${pattern}`)\n }\n }\n\n // Validate catalog definitions\n for (const [name, catalogDef] of this.catalogs) {\n const validationResult = catalogDef.validate()\n errors.push(...validationResult.getErrors().map((err) => `Catalog \"${name}\": ${err}`))\n warnings.push(...validationResult.getWarnings().map((warn) => `Catalog \"${name}\": ${warn}`))\n }\n\n // Check for conflicting settings\n if (this.catalogMode === CatalogMode.STRICT && this.catalogs.size === 0) {\n errors.push('Catalog mode is set to \"strict\" but no catalogs are defined')\n }\n\n return new WorkspaceConfigValidationResult(errors.length === 0, errors, warnings)\n }\n\n /**\n * Convert to pnpm-workspace.yaml data format\n */\n public toPnpmWorkspaceData(): PnpmWorkspaceData {\n // Start with the original data to preserve all fields\n const data: PnpmWorkspaceData = { ...this.originalData }\n\n // Update the fields that we manage\n data.packages = this.packagePatterns\n\n // Add catalog mode if not default\n if (this.catalogMode !== CatalogMode.MANUAL) {\n data.catalogMode = this.catalogMode\n } else {\n // Remove catalogMode if it's back to default\n delete data.catalogMode\n }\n\n // Update catalogs\n const defaultCatalog = this.catalogs.get('default')\n if (defaultCatalog) {\n data.catalog = defaultCatalog.getDependencies()\n } else {\n // Remove catalog if it no longer exists\n delete data.catalog\n }\n\n const namedCatalogs: Record<string, Record<string, string>> = {}\n for (const [name, catalogDef] of this.catalogs) {\n if (name !== 'default') {\n namedCatalogs[name] = catalogDef.getDependencies()\n }\n }\n\n if (Object.keys(namedCatalogs).length > 0) {\n data.catalogs = namedCatalogs\n } else {\n // Remove catalogs if none exist\n delete data.catalogs\n }\n\n // Update other settings\n if (this.shamefullyHoist) {\n data.shamefullyHoist = this.shamefullyHoist\n } else {\n // Remove if false/default\n delete data.shamefullyHoist\n }\n\n if (this.linkWorkspacePackages !== true) {\n data.linkWorkspacePackages = this.linkWorkspacePackages\n } else {\n // Remove if true/default\n delete data.linkWorkspacePackages\n }\n\n return data\n }\n\n /**\n * Check equality with another WorkspaceConfig\n */\n public equals(other: WorkspaceConfig): boolean {\n return (\n this.catalogMode === other.catalogMode &&\n JSON.stringify(this.packagePatterns) === JSON.stringify(other.packagePatterns) &&\n this.shamefullyHoist === other.shamefullyHoist &&\n this.linkWorkspacePackages === other.linkWorkspacePackages &&\n this.catalogsEqual(other.catalogs)\n )\n }\n\n /**\n * Check if catalog definitions are equal\n */\n private catalogsEqual(otherCatalogs: Map<string, CatalogDefinition>): boolean {\n if (this.catalogs.size !== otherCatalogs.size) {\n return false\n }\n\n for (const [name, catalogDef] of this.catalogs) {\n const otherCatalogDef = otherCatalogs.get(name)\n if (!otherCatalogDef || !catalogDef.equals(otherCatalogDef)) {\n return false\n }\n }\n\n return true\n }\n}\n\n/**\n * Catalog Definition Value Object\n */\nexport class CatalogDefinition {\n private readonly name: string\n private readonly dependencies: Record<string, string>\n\n constructor(name: string, dependencies: Record<string, string>) {\n this.name = name\n this.dependencies = { ...dependencies }\n }\n\n public getName(): string {\n return this.name\n }\n\n public getDependencies(): Record<string, string> {\n return { ...this.dependencies }\n }\n\n public getDependencyNames(): string[] {\n return Object.keys(this.dependencies)\n }\n\n public hasDependency(packageName: string): boolean {\n return packageName in this.dependencies\n }\n\n public getDependencyVersion(packageName: string): string | undefined {\n return this.dependencies[packageName]\n }\n\n /**\n * Update a dependency version (returns a new instance)\n */\n public updateDependencyVersion(packageName: string, version: string): CatalogDefinition {\n const updatedDependencies = { ...this.dependencies }\n updatedDependencies[packageName] = version\n return new CatalogDefinition(this.name, updatedDependencies)\n }\n\n public validate(): CatalogDefinitionValidationResult {\n const errors: string[] = []\n const warnings: string[] = []\n\n // Validate name\n if (!this.name || this.name.trim().length === 0) {\n errors.push('Catalog name cannot be empty')\n }\n\n // Validate dependencies\n for (const [packageName, version] of Object.entries(this.dependencies)) {\n if (!packageName || packageName.trim().length === 0) {\n errors.push('Package name cannot be empty')\n }\n\n if (!version || version.trim().length === 0) {\n errors.push(`Version for package \"${packageName}\" cannot be empty`)\n }\n\n // Basic package name validation\n if (!/^(@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(packageName)) {\n warnings.push(`Package name \"${packageName}\" may not be valid`)\n }\n }\n\n return new CatalogDefinitionValidationResult(errors.length === 0, errors, warnings)\n }\n\n public equals(other: CatalogDefinition): boolean {\n return (\n this.name === other.name &&\n JSON.stringify(this.dependencies) === JSON.stringify(other.dependencies)\n )\n }\n}\n\n/**\n * pnpm-workspace.yaml data interface\n */\nexport interface PnpmWorkspaceData {\n packages: string[]\n catalog?: Record<string, string>\n catalogs?: Record<string, Record<string, string>>\n catalogMode?: CatalogMode\n shamefullyHoist?: boolean\n linkWorkspacePackages?: boolean | 'deep'\n [key: string]: any\n}\n\n/**\n * Workspace Config Validation Result\n */\nexport class WorkspaceConfigValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid\n }\n\n public getErrors(): string[] {\n return [...this.errors]\n }\n\n public getWarnings(): string[] {\n return [...this.warnings]\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0\n }\n}\n\n/**\n * Catalog Definition Validation Result\n */\nexport class CatalogDefinitionValidationResult {\n constructor(\n private readonly isValid: boolean,\n private readonly errors: string[],\n private readonly warnings: string[]\n ) {}\n\n public getIsValid(): boolean {\n return this.isValid\n }\n\n public getErrors(): string[] {\n return [...this.errors]\n }\n\n public getWarnings(): string[] {\n return [...this.warnings]\n }\n\n public hasErrors(): boolean {\n return this.errors.length > 0\n }\n\n public hasWarnings(): boolean {\n return this.warnings.length > 0\n }\n}\n","/**\n * WorkspaceId Value Object\n *\n * Represents a unique identifier for a pnpm workspace.\n * This is an immutable value object that ensures workspace identity.\n */\n\nexport class WorkspaceId {\n private readonly value: string\n\n private constructor(value: string) {\n this.value = value\n }\n\n /**\n * Create a WorkspaceId from a string value\n */\n public static fromString(value: string): WorkspaceId {\n if (!value || value.trim().length === 0) {\n throw new Error('WorkspaceId cannot be empty')\n }\n\n if (value.length > 255) {\n throw new Error('WorkspaceId cannot exceed 255 characters')\n }\n\n // Validate format - alphanumeric, hyphens, underscores only\n const validPattern = /^[a-zA-Z0-9_-]+$/\n if (!validPattern.test(value.trim())) {\n throw new Error(\n 'WorkspaceId can only contain alphanumeric characters, hyphens, and underscores'\n )\n }\n\n return new WorkspaceId(value.trim())\n }\n\n /**\n * Generate a new unique WorkspaceId\n */\n public static generate(): WorkspaceId {\n const timestamp = Date.now().toString(36)\n const random = Math.random().toString(36).substring(2, 8)\n return new WorkspaceId(`workspace-${timestamp}-${random}`)\n }\n\n /**\n * Create a WorkspaceId from a workspace path\n */\n public static fromPath(path: string): WorkspaceId {\n // Extract a meaningful identifier from the path\n const normalizedPath = path.replace(/\\\\/g, '/')\n const pathParts = normalizedPath.split('/').filter(Boolean)\n const lastPart = pathParts[pathParts.length - 1] || 'workspace'\n\n // Sanitize the path part to create a valid ID\n const sanitized = lastPart\n .replace(/[^a-zA-Z0-9_-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n\n if (sanitized.length === 0) {\n return WorkspaceId.generate()\n }\n\n return new WorkspaceId(sanitized)\n }\n\n /**\n * Get the string value of this WorkspaceId\n */\n public toString(): string {\n return this.value\n }\n\n /**\n * Get the raw value\n */\n public getValue(): string {\n return this.value\n }\n\n /**\n * Check equality with another WorkspaceId\n */\n public equals(other: WorkspaceId): boolean {\n return this.value === other.value\n }\n\n /**\n * Check if this WorkspaceId is the same as another\n */\n public isSameAs(other: WorkspaceId): boolean {\n return this.equals(other)\n }\n\n /**\n * Get a hash code for this WorkspaceId\n */\n public hashCode(): number {\n let hash = 0\n for (let i = 0; i < this.value.length; i++) {\n const char = this.value.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash // Convert to 32-bit integer\n }\n return hash\n }\n\n /**\n * Convert to JSON representation\n */\n public toJSON(): string {\n return this.value\n }\n\n /**\n * Create from JSON representation\n */\n public static fromJSON(json: string): WorkspaceId {\n return WorkspaceId.fromString(json)\n }\n}\n","/**\n * AI Cache Index\n *\n * Exports cache components for AI analysis.\n */\n\nexport type { AnalysisCacheOptions, AnalysisCacheStats } from './analysisCache.js'\nexport { AnalysisCache, analysisCache } from './analysisCache.js'\n","/**\n * AI Fallback Index\n *\n * Exports fallback components for when AI providers are unavailable.\n */\n\nexport { RuleEngine } from './ruleEngine.js'\n","/**\n * AI Providers Index\n *\n * Exports all AI provider implementations.\n */\n\nexport type { BaseProviderOptions } from './baseProvider.js'\nexport { BaseAIProvider } from './baseProvider.js'\nexport type { ClaudeProviderOptions } from './claudeProvider.js'\nexport { ClaudeProvider } from './claudeProvider.js'\nexport type { CodexProviderOptions } from './codexProvider.js'\nexport { CodexProvider } from './codexProvider.js'\nexport type { GeminiProviderOptions } from './geminiProvider.js'\nexport { GeminiProvider } from './geminiProvider.js'\n\n// Future providers will be exported here:\n// export { CursorProvider } from './cursorProvider.js';\n// export { AiderProvider } from './aiderProvider.js';\n","/**\n * AI Infrastructure Index\n *\n * Central export for all AI-related infrastructure components.\n * Includes providers, cache, detector, and fallback systems.\n */\n\n// AI Detector\nexport { AIDetector } from './aiDetector.js'\nexport type { AnalysisCacheOptions, AnalysisCacheStats } from './cache/index.js'\n// Cache\nexport { AnalysisCache, analysisCache } from './cache/index.js'\n// Fallback\nexport { RuleEngine } from './fallback/index.js'\nexport type {\n BaseProviderOptions,\n ClaudeProviderOptions,\n CodexProviderOptions,\n GeminiProviderOptions,\n} from './providers/index.js'\n// Providers\nexport {\n BaseAIProvider,\n ClaudeProvider,\n CodexProvider,\n GeminiProvider,\n} from './providers/index.js'\n","/**\n * Cache System\n *\n * Provides caching capabilities for NPM registry responses and other expensive operations.\n * Supports both in-memory and file-based caching with TTL and size limits.\n */\n\nimport { createHash } from 'node:crypto'\nimport { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nexport interface CacheEntry<T = any> {\n key: string\n value: T\n timestamp: number\n ttl: number // Time to live in milliseconds\n size: number // Estimated size in bytes\n}\n\nexport interface CacheOptions {\n ttl?: number // Default TTL in milliseconds\n maxSize?: number // Max total cache size in bytes\n maxEntries?: number // Max number of entries\n persistToDisk?: boolean // Whether to persist cache to disk\n cacheDir?: string // Directory for file-based cache\n}\n\nexport interface CacheStats {\n totalEntries: number\n totalSize: number\n hitRate: number\n missRate: number\n hits: number\n misses: number\n}\n\nexport class Cache<T = any> {\n private entries = new Map<string, CacheEntry<T>>()\n private stats = {\n hits: 0,\n misses: 0,\n }\n\n private options: Required<CacheOptions>\n\n constructor(name: string, options: CacheOptions = {}) {\n this.options = {\n ttl: options.ttl || 3600000, // 1 hour default\n maxSize: options.maxSize || 50 * 1024 * 1024, // 50MB default\n maxEntries: options.maxEntries || 1000,\n persistToDisk: options.persistToDisk || false,\n cacheDir: options.cacheDir || join(homedir(), '.pcu', 'cache', name),\n }\n\n if (this.options.persistToDisk) {\n this.loadFromDisk()\n }\n\n // Setup cleanup interval\n setInterval(() => this.cleanup(), 300000) // Clean every 5 minutes\n }\n\n /**\n * Get value from cache\n */\n get(key: string): T | undefined {\n const entry = this.entries.get(key)\n\n if (!entry) {\n this.stats.misses++\n return undefined\n }\n\n // Check if entry has expired\n if (Date.now() - entry.timestamp > entry.ttl) {\n this.entries.delete(key)\n this.stats.misses++\n return undefined\n }\n\n this.stats.hits++\n return entry.value\n }\n\n /**\n * Set value in cache\n */\n set(key: string, value: T, ttl?: number): void {\n const entryTtl = ttl || this.options.ttl\n const size = this.estimateSize(value)\n\n const entry: CacheEntry<T> = {\n key,\n value,\n timestamp: Date.now(),\n ttl: entryTtl,\n size,\n }\n\n // Remove old entry if exists\n if (this.entries.has(key)) {\n this.entries.delete(key)\n }\n\n // Check size limits before adding\n this.ensureCapacity(size)\n\n this.entries.set(key, entry)\n\n if (this.options.persistToDisk) {\n this.saveToDisk(key, entry)\n }\n }\n\n /**\n * Check if key exists in cache\n */\n has(key: string): boolean {\n const entry = this.entries.get(key)\n\n if (!entry) {\n return false\n }\n\n // Check if expired\n if (Date.now() - entry.timestamp > entry.ttl) {\n this.entries.delete(key)\n return false\n }\n\n return true\n }\n\n /**\n * Delete entry from cache\n */\n delete(key: string): boolean {\n const deleted = this.entries.delete(key)\n\n if (deleted && this.options.persistToDisk) {\n this.deleteFromDisk(key)\n }\n\n return deleted\n }\n\n /**\n * Clear all cache entries\n */\n clear(): void {\n this.entries.clear()\n this.stats.hits = 0\n this.stats.misses = 0\n\n if (this.options.persistToDisk) {\n this.clearDisk()\n }\n }\n\n /**\n * Get cache statistics\n */\n getStats(): CacheStats {\n const total = this.stats.hits + this.stats.misses\n\n return {\n totalEntries: this.entries.size,\n totalSize: this.getTotalSize(),\n hitRate: total > 0 ? this.stats.hits / total : 0,\n missRate: total > 0 ? this.stats.misses / total : 0,\n hits: this.stats.hits,\n misses: this.stats.misses,\n }\n }\n\n /**\n * Get or set with factory function\n */\n async getOrSet(key: string, factory: () => Promise<T> | T, ttl?: number): Promise<T> {\n const cached = this.get(key)\n\n if (cached !== undefined) {\n return cached\n }\n\n const value = await factory()\n this.set(key, value, ttl)\n\n return value\n }\n\n /**\n * Cleanup expired entries\n */\n private cleanup(): void {\n const now = Date.now()\n const expiredKeys: string[] = []\n\n for (const [key, entry] of this.entries) {\n if (now - entry.timestamp > entry.ttl) {\n expiredKeys.push(key)\n }\n }\n\n for (const key of expiredKeys) {\n this.delete(key)\n }\n }\n\n /**\n * Ensure cache capacity doesn't exceed limits\n */\n private ensureCapacity(newEntrySize: number): void {\n // Check entry count limit\n while (this.entries.size >= this.options.maxEntries) {\n this.evictOldest()\n }\n\n // Check size limit\n while (this.getTotalSize() + newEntrySize > this.options.maxSize) {\n this.evictOldest()\n }\n }\n\n /**\n * Evict oldest entry\n */\n private evictOldest(): void {\n let oldestKey: string | undefined\n let oldestTimestamp = Date.now()\n\n for (const [key, entry] of this.entries) {\n if (entry.timestamp < oldestTimestamp) {\n oldestTimestamp = entry.timestamp\n oldestKey = key\n }\n }\n\n if (oldestKey) {\n this.delete(oldestKey)\n }\n }\n\n /**\n * Get total cache size\n */\n private getTotalSize(): number {\n let totalSize = 0\n for (const entry of this.entries.values()) {\n totalSize += entry.size\n }\n return totalSize\n }\n\n /**\n * Estimate size of value in bytes\n */\n private estimateSize(value: T): number {\n try {\n return JSON.stringify(value).length * 2 // Rough UTF-16 estimate\n } catch {\n return 1000 // Default estimate for non-serializable values\n }\n }\n\n /**\n * Load cache from disk\n */\n private loadFromDisk(): void {\n try {\n if (!existsSync(this.options.cacheDir)) {\n return\n }\n\n const indexPath = join(this.options.cacheDir, 'index.json')\n if (!existsSync(indexPath)) {\n return\n }\n\n const indexContent = readFileSync(indexPath, 'utf-8')\n const index = JSON.parse(indexContent)\n\n for (const key of index.keys || []) {\n try {\n const entryPath = join(this.options.cacheDir, this.getFilename(key))\n if (existsSync(entryPath)) {\n const entryContent = readFileSync(entryPath, 'utf-8')\n const entry = JSON.parse(entryContent)\n\n // Check if entry is still valid\n if (Date.now() - entry.timestamp <= entry.ttl) {\n this.entries.set(key, entry)\n }\n }\n } catch {\n // Skip corrupted entries\n }\n }\n } catch {\n // Ignore disk loading errors\n }\n }\n\n /**\n * Save entry to disk\n */\n private saveToDisk(key: string, entry: CacheEntry<T>): void {\n try {\n if (!existsSync(this.options.cacheDir)) {\n mkdirSync(this.options.cacheDir, { recursive: true })\n }\n\n const entryPath = join(this.options.cacheDir, this.getFilename(key))\n writeFileSync(entryPath, JSON.stringify(entry), 'utf-8')\n\n // Update index\n this.updateDiskIndex()\n } catch {\n // Ignore disk saving errors\n }\n }\n\n /**\n * Delete entry from disk\n */\n private deleteFromDisk(key: string): void {\n try {\n const entryPath = join(this.options.cacheDir, this.getFilename(key))\n if (existsSync(entryPath)) {\n unlinkSync(entryPath)\n }\n this.updateDiskIndex()\n } catch {\n // Ignore disk deletion errors\n }\n }\n\n /**\n * Clear disk cache\n */\n private clearDisk(): void {\n try {\n if (existsSync(this.options.cacheDir)) {\n const fs = require('node:fs')\n fs.rmSync(this.options.cacheDir, { recursive: true, force: true })\n }\n } catch {\n // Ignore disk clearing errors\n }\n }\n\n /**\n * Update disk index\n */\n private updateDiskIndex(): void {\n try {\n const indexPath = join(this.options.cacheDir, 'index.json')\n const index = {\n keys: Array.from(this.entries.keys()),\n lastUpdated: Date.now(),\n }\n writeFileSync(indexPath, JSON.stringify(index), 'utf-8')\n } catch {\n // Ignore index update errors\n }\n }\n\n /**\n * Get filename for cache key\n */\n private getFilename(key: string): string {\n // Use hash to create safe filename\n const hash = createHash('md5').update(key).digest('hex')\n return `${hash}.json`\n }\n}\n\n/**\n * Registry-specific cache for NPM API responses\n */\nexport class RegistryCache extends Cache<any> {\n constructor(options: CacheOptions = {}) {\n super('registry', {\n ttl: 3600000, // 1 hour\n maxSize: 10 * 1024 * 1024, // 10MB\n maxEntries: 500,\n persistToDisk: true,\n ...options,\n })\n }\n\n /**\n * Cache package info\n */\n setPackageInfo(packageName: string, info: any, ttl?: number): void {\n this.set(`package:${packageName}`, info, ttl)\n }\n\n /**\n * Get cached package info\n */\n getPackageInfo(packageName: string): any | undefined {\n return this.get(`package:${packageName}`)\n }\n\n /**\n * Cache version list\n */\n setVersions(packageName: string, versions: string[], ttl?: number): void {\n this.set(`versions:${packageName}`, versions, ttl)\n }\n\n /**\n * Get cached versions\n */\n getVersions(packageName: string): string[] | undefined {\n return this.get(`versions:${packageName}`)\n }\n\n /**\n * Cache security report\n */\n setSecurityReport(packageName: string, version: string, report: any, ttl?: number): void {\n this.set(`security:${packageName}:${version}`, report, ttl)\n }\n\n /**\n * Get cached security report\n */\n getSecurityReport(packageName: string, version: string): any | undefined {\n return this.get(`security:${packageName}:${version}`)\n }\n}\n\n/**\n * Workspace-specific cache for file system operations\n */\nexport class WorkspaceCache extends Cache<any> {\n constructor(options: CacheOptions = {}) {\n super('workspace', {\n ttl: 300000, // 5 minutes (shorter TTL for file system)\n maxSize: 5 * 1024 * 1024, // 5MB\n maxEntries: 200,\n persistToDisk: false, // Don't persist workspace cache\n ...options,\n })\n }\n\n /**\n * Cache workspace info\n */\n setWorkspaceInfo(workspacePath: string, info: any, ttl?: number): void {\n this.set(`workspace:${workspacePath}`, info, ttl)\n }\n\n /**\n * Get cached workspace info\n */\n getWorkspaceInfo(workspacePath: string): any | undefined {\n return this.get(`workspace:${workspacePath}`)\n }\n\n /**\n * Cache package.json content\n */\n setPackageJson(filePath: string, content: any, ttl?: number): void {\n this.set(`package-json:${filePath}`, content, ttl)\n }\n\n /**\n * Get cached package.json\n */\n getPackageJson(filePath: string): any | undefined {\n return this.get(`package-json:${filePath}`)\n }\n}\n\n// Export singleton instances\nexport const registryCache = new RegistryCache()\nexport const workspaceCache = new WorkspaceCache()\n","/**\n * File System Service\n *\n * Provides abstracted file system operations for the application.\n * Handles reading/writing workspace files, package.json, and pnpm-workspace.yaml.\n */\n\nimport fs from 'node:fs/promises'\nimport path from 'node:path'\nimport { glob } from 'glob'\nimport YAML from 'yaml'\nimport type { PackageJsonData } from '../../domain/entities/package.js'\nimport type { PnpmWorkspaceData } from '../../domain/value-objects/workspaceConfig.js'\nimport type { WorkspacePath } from '../../domain/value-objects/workspacePath.js'\n\nexport class FileSystemService {\n /**\n * Check if a file exists\n */\n async exists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath)\n return true\n } catch {\n return false\n }\n }\n\n /**\n * Check if a path is a directory\n */\n async isDirectory(dirPath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(dirPath)\n return stat.isDirectory()\n } catch {\n return false\n }\n }\n\n /**\n * Read a text file\n */\n async readTextFile(filePath: string): Promise<string> {\n try {\n return await fs.readFile(filePath, 'utf-8')\n } catch (error) {\n throw new Error(`Failed to read file ${filePath}: ${error}`)\n }\n }\n\n /**\n * Write a text file\n */\n async writeTextFile(filePath: string, content: string): Promise<void> {\n try {\n // Ensure directory exists\n await fs.mkdir(path.dirname(filePath), { recursive: true })\n await fs.writeFile(filePath, content, 'utf-8')\n } catch (error) {\n throw new Error(`Failed to write file ${filePath}: ${error}`)\n }\n }\n\n /**\n * Read and parse a JSON file\n */\n async readJsonFile<T = any>(filePath: string): Promise<T> {\n try {\n const content = await this.readTextFile(filePath)\n return JSON.parse(content) as T\n } catch (error) {\n throw new Error(`Failed to read JSON file ${filePath}: ${error}`)\n }\n }\n\n /**\n * Write a JSON file\n */\n async writeJsonFile(filePath: string, data: any, indent: number = 2): Promise<void> {\n try {\n const content = JSON.stringify(data, null, indent)\n await this.writeTextFile(filePath, content)\n } catch (error) {\n throw new Error(`Failed to write JSON file ${filePath}: ${error}`)\n }\n }\n\n /**\n * Read and parse a YAML file\n */\n async readYamlFile<T = any>(filePath: string): Promise<T> {\n try {\n const content = await this.readTextFile(filePath)\n return YAML.parse(content) as T\n } catch (error) {\n throw new Error(`Failed to read YAML file ${filePath}: ${error}`)\n }\n }\n\n /**\n * Write a YAML file\n */\n async writeYamlFile(filePath: string, data: any): Promise<void> {\n try {\n const content = YAML.stringify(data, {\n indent: 2,\n })\n await this.writeTextFile(filePath, content)\n } catch (error) {\n throw new Error(`Failed to write YAML file ${filePath}: ${error}`)\n }\n }\n\n /**\n * Write a YAML file while preserving comments and formatting\n */\n async writeYamlFilePreservingFormat(filePath: string, data: any): Promise<void> {\n try {\n // Read the original file to preserve comments and formatting\n const originalContent = await this.readTextFile(filePath)\n\n // Use smart YAML updating that preserves comments and formatting\n const updatedContent = this.updateYamlPreservingFormat(originalContent, data)\n\n await this.writeTextFile(filePath, updatedContent)\n } catch (error) {\n // If reading the original file fails, fall back to regular YAML writing\n console.warn(\n `Could not preserve YAML format for ${filePath}, falling back to standard formatting`\n )\n await this.writeYamlFile(filePath, data)\n }\n }\n\n /**\n * Update YAML content while preserving comments and formatting\n */\n private updateYamlPreservingFormat(originalContent: string, newData: any): string {\n const lines = originalContent.split('\\n')\n const result: string[] = []\n let i = 0\n\n // Helper function to update a specific section\n const updateSection = (sectionName: string, newValue: any): boolean => {\n if (!(sectionName in newData)) {\n return false\n }\n\n // Find the section in the original content\n let sectionStartIndex = -1\n let sectionEndIndex = -1\n let indentLevel = 0\n\n for (let j = i; j < lines.length; j++) {\n const fullLine = lines[j]\n if (!fullLine) continue\n\n const line = fullLine.trim()\n\n if (line.startsWith(`${sectionName}:`)) {\n sectionStartIndex = j\n indentLevel = fullLine.length - fullLine.trimStart().length\n\n // Find the end of this section\n for (let k = j + 1; k < lines.length; k++) {\n const nextLine = lines[k]\n if (!nextLine) continue\n\n const nextLineTrimmed = nextLine.trim()\n const nextIndentLevel = nextLine.length - nextLine.trimStart().length\n\n // If we find a line with same or less indentation that defines a new section, stop\n if (\n nextIndentLevel <= indentLevel &&\n nextLineTrimmed.includes(':') &&\n !nextLineTrimmed.startsWith('#')\n ) {\n sectionEndIndex = k - 1\n break\n }\n\n // If we find a line that's not empty, not indented enough to be part of this section, stop\n // Special case: comments at the same level after an empty line should end the section\n if (nextLineTrimmed !== '' && nextIndentLevel <= indentLevel) {\n if (nextLineTrimmed.startsWith('#') && nextIndentLevel === indentLevel) {\n // Check if there was an empty line before this comment\n let hasEmptyLineBefore = false\n for (let m = k - 1; m > j; m--) {\n const prevLine = lines[m]\n if (!prevLine || prevLine.trim() === '') {\n hasEmptyLineBefore = true\n break\n }\n if (prevLine.trim() !== '') {\n break\n }\n }\n if (hasEmptyLineBefore) {\n sectionEndIndex = k - 1\n break\n }\n } else if (!nextLineTrimmed.startsWith('#')) {\n sectionEndIndex = k - 1\n break\n }\n }\n }\n\n if (sectionEndIndex === -1) {\n sectionEndIndex = lines.length - 1\n }\n break\n }\n }\n\n if (sectionStartIndex !== -1) {\n // Update the section\n const sectionContent = this.formatYamlSection(\n sectionName,\n newValue,\n indentLevel,\n lines,\n sectionStartIndex,\n sectionEndIndex\n )\n\n // Add lines before the section\n for (let j = i; j < sectionStartIndex; j++) {\n const lineContent = lines[j]\n if (lineContent !== undefined) {\n result.push(lineContent)\n }\n }\n\n // Add the updated section\n result.push(...sectionContent)\n\n // Update the position to after this section\n i = sectionEndIndex + 1\n return true\n }\n\n return false\n }\n\n // Process the file line by line\n while (i < lines.length) {\n const currentLine = lines[i]\n if (!currentLine) {\n result.push('')\n i++\n continue\n }\n\n const line = currentLine.trim()\n\n // Handle main sections\n if (line.startsWith('packages:')) {\n if (updateSection('packages', newData.packages)) {\n continue\n }\n } else if (line.startsWith('catalog:')) {\n if (updateSection('catalog', newData.catalog)) {\n continue\n }\n } else if (line.startsWith('catalogs:')) {\n if (updateSection('catalogs', newData.catalogs)) {\n continue\n }\n } else if (line.startsWith('catalogMode:')) {\n if ('catalogMode' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length\n result.push(`${' '.repeat(indent)}catalogMode: ${newData.catalogMode}`)\n i++\n continue\n }\n } else if (line.startsWith('shamefullyHoist:')) {\n if ('shamefullyHoist' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length\n result.push(`${' '.repeat(indent)}shamefullyHoist: ${newData.shamefullyHoist}`)\n i++\n continue\n }\n } else if (line.startsWith('linkWorkspacePackages:')) {\n if ('linkWorkspacePackages' in newData) {\n const indent = currentLine.length - currentLine.trimStart().length\n result.push(\n `${' '.repeat(indent)}linkWorkspacePackages: ${newData.linkWorkspacePackages}`\n )\n i++\n continue\n }\n }\n\n // Keep the original line if not updated\n result.push(currentLine)\n i++\n }\n\n return result.join('\\n')\n }\n\n /**\n * Format a YAML section with proper indentation while preserving internal structure\n */\n private formatYamlSection(\n sectionName: string,\n value: any,\n baseIndent: number = 0,\n originalLines?: string[],\n sectionStart?: number,\n sectionEnd?: number\n ): string[] {\n const lines: string[] = []\n const indent = ' '.repeat(baseIndent)\n\n if (sectionName === 'packages' && Array.isArray(value)) {\n lines.push(`${indent}packages:`)\n for (const pkg of value) {\n lines.push(`${indent} - \"${pkg}\"`)\n }\n } else if (\n (sectionName === 'catalog' || sectionName === 'catalogs') &&\n typeof value === 'object'\n ) {\n if (sectionName === 'catalog') {\n lines.push(`${indent}catalog:`)\n\n // Try to preserve original structure and comments if available\n if (originalLines && sectionStart !== undefined && sectionEnd !== undefined) {\n const valueEntries = Object.entries(value)\n const processedPackages = new Set<string>()\n\n // First pass: update existing packages while preserving comments\n for (let i = sectionStart + 1; i <= sectionEnd; i++) {\n const line = originalLines[i]\n if (!line) continue\n\n const trimmed = line.trim()\n\n // Preserve comments and empty lines\n if (trimmed.startsWith('#') || trimmed === '') {\n lines.push(line)\n continue\n }\n\n // Check if this line defines a package (with or without quotes)\n const packageMatch = trimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/)\n if (packageMatch?.[2]) {\n const packageName = packageMatch[2]\n const newVersion = value[packageName]\n\n if (newVersion !== undefined) {\n // Update with new version while preserving indentation and quotes\n const originalIndent = line.length - line.trimStart().length\n const quote = packageMatch[1] || '' // Preserve original quote style\n lines.push(\n `${' '.repeat(originalIndent)}${quote}${packageName}${quote}: ${newVersion}`\n )\n processedPackages.add(packageName)\n } else {\n // Keep the line as is if package not in new data\n lines.push(line)\n }\n } else {\n // Keep other lines as is\n lines.push(line)\n }\n }\n\n // Second pass: add any new packages that weren't in the original\n for (const [pkg, version] of valueEntries) {\n if (!processedPackages.has(pkg)) {\n lines.push(`${indent} ${pkg}: ${version}`)\n }\n }\n } else {\n // Fallback to simple formatting\n for (const [pkg, version] of Object.entries(value)) {\n lines.push(`${indent} ${pkg}: ${version}`)\n }\n }\n } else {\n // Handle catalogs section with format preservation\n lines.push(`${indent}catalogs:`)\n\n if (originalLines && sectionStart !== undefined && sectionEnd !== undefined) {\n // Try to preserve original structure for catalogs section\n this.formatCatalogsSection(\n lines,\n value,\n baseIndent,\n originalLines,\n sectionStart,\n sectionEnd\n )\n } else {\n // Fallback to simple formatting\n for (const [catalogName, catalog] of Object.entries(value as Record<string, any>)) {\n lines.push(`${indent} ${catalogName}:`)\n for (const [pkg, version] of Object.entries(catalog)) {\n lines.push(`${indent} ${pkg}: ${version}`)\n }\n }\n }\n }\n }\n\n return lines\n }\n\n /**\n * Format catalogs section while preserving structure and comments\n */\n private formatCatalogsSection(\n lines: string[],\n value: Record<string, any>,\n baseIndent: number,\n originalLines: string[],\n sectionStart: number,\n sectionEnd: number\n ): void {\n const indent = ' '.repeat(baseIndent)\n const processedCatalogs = new Set<string>()\n\n let i = sectionStart + 1\n while (i <= sectionEnd) {\n const line = originalLines[i]\n if (!line) {\n i++\n continue\n }\n\n const trimmed = line.trim()\n\n // Preserve comments and empty lines\n if (trimmed.startsWith('#') || trimmed === '') {\n lines.push(line)\n i++\n continue\n }\n\n // Check if this line defines a catalog\n const catalogMatch = trimmed.match(/^([a-zA-Z0-9\\-_.]+):\\s*$/)\n if (catalogMatch?.[1]) {\n const catalogName = catalogMatch[1]\n const catalogData = value[catalogName]\n\n if (catalogData) {\n // This catalog exists in the new data\n const originalIndent = line.length - line.trimStart().length\n lines.push(`${' '.repeat(originalIndent)}${catalogName}:`)\n processedCatalogs.add(catalogName)\n\n // Process packages within this catalog\n i++\n while (i <= sectionEnd) {\n const packageLine = originalLines[i]\n if (!packageLine) {\n i++\n continue\n }\n\n const packageTrimmed = packageLine.trim()\n const packageIndent = packageLine.length - packageLine.trimStart().length\n\n // If we hit another catalog or section at same/lesser indent, break\n if (\n packageIndent <= originalIndent &&\n packageTrimmed !== '' &&\n !packageTrimmed.startsWith('#')\n ) {\n break\n }\n\n // Preserve comments and empty lines\n if (packageTrimmed.startsWith('#') || packageTrimmed === '') {\n lines.push(packageLine)\n i++\n continue\n }\n\n // Check if this line defines a package\n const packageMatch = packageTrimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/)\n if (packageMatch?.[2]) {\n const packageName = packageMatch[2]\n const newVersion = catalogData[packageName]\n\n if (newVersion !== undefined) {\n // Update with new version while preserving indentation and quotes\n const quote = packageMatch[1] || ''\n lines.push(\n `${' '.repeat(packageIndent)}${quote}${packageName}${quote}: ${newVersion}`\n )\n } else {\n // Keep the line as is if package not in new data\n lines.push(packageLine)\n }\n } else {\n // Keep other lines as is\n lines.push(packageLine)\n }\n\n i++\n }\n\n // Add any new packages that weren't in the original\n for (const [pkg, version] of Object.entries(catalogData)) {\n if (\n !this.packageExistsInCatalogSection(\n originalLines,\n sectionStart,\n sectionEnd,\n catalogName,\n pkg\n )\n ) {\n lines.push(`${indent} ${pkg}: ${version}`)\n }\n }\n } else {\n // This catalog doesn't exist in new data, keep as is\n lines.push(line)\n i++\n }\n } else {\n // Not a catalog definition, keep as is\n lines.push(line)\n i++\n }\n }\n\n // Add any new catalogs that weren't in the original\n for (const [catalogName, catalogData] of Object.entries(value)) {\n if (!processedCatalogs.has(catalogName)) {\n lines.push(`${indent} ${catalogName}:`)\n for (const [pkg, version] of Object.entries(catalogData)) {\n lines.push(`${indent} ${pkg}: ${version}`)\n }\n }\n }\n }\n\n /**\n * Check if a package exists in a catalog section\n */\n private packageExistsInCatalogSection(\n lines: string[],\n sectionStart: number,\n sectionEnd: number,\n catalogName: string,\n packageName: string\n ): boolean {\n let foundCatalog = false\n\n for (let i = sectionStart + 1; i <= sectionEnd; i++) {\n const line = lines[i]\n if (!line) continue\n\n const trimmed = line.trim()\n\n // Check if we found the catalog\n if (trimmed === `${catalogName}:`) {\n foundCatalog = true\n continue\n }\n\n // If we found another catalog, stop\n if (foundCatalog && trimmed.match(/^[a-zA-Z0-9\\-_.]+:\\s*$/)) {\n break\n }\n\n // If we're in the right catalog, check for the package\n if (foundCatalog) {\n const packageMatch = trimmed.match(/^(['\"]?)([a-zA-Z0-9@\\-_.\\\\/]+)\\1:\\s*(.+)$/)\n if (packageMatch && packageMatch[2] === packageName) {\n return true\n }\n }\n }\n\n return false\n }\n\n /**\n * Read pnpm-workspace.yaml configuration\n */\n async readPnpmWorkspaceConfig(workspacePath: WorkspacePath): Promise<PnpmWorkspaceData> {\n const configPath = workspacePath.getPnpmWorkspaceConfigPath().toString()\n\n if (!(await this.exists(configPath))) {\n throw new Error(`pnpm-workspace.yaml not found at ${configPath}`)\n }\n\n return await this.readYamlFile<PnpmWorkspaceData>(configPath)\n }\n\n /**\n * Write pnpm-workspace.yaml configuration\n */\n async writePnpmWorkspaceConfig(\n workspacePath: WorkspacePath,\n config: PnpmWorkspaceData\n ): Promise<void> {\n const configPath = workspacePath.getPnpmWorkspaceConfigPath().toString()\n await this.writeYamlFilePreservingFormat(configPath, config)\n }\n\n /**\n * Read package.json file\n */\n async readPackageJson(packagePath: WorkspacePath): Promise<PackageJsonData> {\n const packageJsonPath = packagePath.getPackageJsonPath().toString()\n\n if (!(await this.exists(packageJsonPath))) {\n throw new Error(`package.json not found at ${packageJsonPath}`)\n }\n\n return await this.readJsonFile<PackageJsonData>(packageJsonPath)\n }\n\n /**\n * Write package.json file\n */\n async writePackageJson(packagePath: WorkspacePath, packageData: PackageJsonData): Promise<void> {\n const packageJsonPath = packagePath.getPackageJsonPath().toString()\n await this.writeJsonFile(packageJsonPath, packageData)\n }\n\n /**\n * Find package.json files using glob patterns\n */\n async findPackageJsonFiles(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]> {\n const results: string[] = []\n\n for (const pattern of patterns) {\n try {\n // Convert pattern to absolute path and look for package.json\n const absolutePattern = path.resolve(workspacePath.toString(), pattern, 'package.json')\n const matches = await glob(absolutePattern, {\n ignore: ['**/node_modules/**'],\n absolute: true,\n })\n results.push(...matches)\n } catch (error) {\n // Continue with other patterns if one fails\n console.warn(`Failed to process pattern ${pattern}:`, error)\n }\n }\n\n // Remove duplicates and return\n return Array.from(new Set(results))\n }\n\n /**\n * Find directories matching patterns\n */\n async findDirectories(workspacePath: WorkspacePath, patterns: string[]): Promise<string[]> {\n const results: string[] = []\n\n for (const pattern of patterns) {\n try {\n const absolutePattern = path.resolve(workspacePath.toString(), pattern)\n const matches = await glob(absolutePattern, {\n ignore: ['**/node_modules/**'],\n absolute: true,\n })\n results.push(...matches)\n } catch (error) {\n console.warn(`Failed to process pattern ${pattern}:`, error)\n }\n }\n\n return Array.from(new Set(results))\n }\n\n /**\n * Check if a directory contains a pnpm workspace\n */\n async isPnpmWorkspace(dirPath: string): Promise<boolean> {\n const workspaceConfigPath = path.join(dirPath, 'pnpm-workspace.yaml')\n const packageJsonPath = path.join(dirPath, 'package.json')\n\n // Must have both pnpm-workspace.yaml and package.json\n return (await this.exists(workspaceConfigPath)) && (await this.exists(packageJsonPath))\n }\n\n /**\n * Find the nearest pnpm workspace by traversing up the directory tree\n */\n async findNearestWorkspace(startPath: string): Promise<string | null> {\n let currentPath = path.resolve(startPath)\n\n while (currentPath !== path.dirname(currentPath)) {\n if (await this.isPnpmWorkspace(currentPath)) {\n return currentPath\n }\n currentPath = path.dirname(currentPath)\n }\n\n return null\n }\n\n /**\n * Get file modification time\n */\n async getModificationTime(filePath: string): Promise<Date> {\n try {\n const stat = await fs.stat(filePath)\n return stat.mtime\n } catch (error) {\n throw new Error(`Failed to get modification time for ${filePath}: ${error}`)\n }\n }\n\n /**\n * Create a backup of a file\n */\n async createBackup(filePath: string): Promise<string> {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-')\n const backupPath = `${filePath}.backup.${timestamp}`\n\n try {\n await fs.copyFile(filePath, backupPath)\n return backupPath\n } catch (error) {\n throw new Error(`Failed to create backup of ${filePath}: ${error}`)\n }\n }\n\n /**\n * Restore a file from backup\n */\n async restoreFromBackup(originalPath: string, backupPath: string): Promise<void> {\n try {\n await fs.copyFile(backupPath, originalPath)\n } catch (error) {\n throw new Error(`Failed to restore ${originalPath} from backup: ${error}`)\n }\n }\n\n /**\n * Remove a file\n */\n async removeFile(filePath: string): Promise<void> {\n try {\n await fs.unlink(filePath)\n } catch (error) {\n throw new Error(`Failed to remove file ${filePath}: ${error}`)\n }\n }\n\n /**\n * List files in a directory\n */\n async listFiles(dirPath: string): Promise<string[]> {\n try {\n const items = await fs.readdir(dirPath, { withFileTypes: true })\n return items.filter((item) => item.isFile()).map((item) => path.join(dirPath, item.name))\n } catch (error) {\n throw new Error(`Failed to list files in ${dirPath}: ${error}`)\n }\n }\n\n /**\n * List directories in a directory\n */\n async listDirectories(dirPath: string): Promise<string[]> {\n try {\n const items = await fs.readdir(dirPath, { withFileTypes: true })\n return items.filter((item) => item.isDirectory()).map((item) => path.join(dirPath, item.name))\n } catch (error) {\n throw new Error(`Failed to list directories in ${dirPath}: ${error}`)\n }\n }\n}\n","/**\n * File-based Workspace Repository Implementation\n *\n * Implements WorkspaceRepository interface using the file system.\n * Handles loading and saving workspace data from pnpm-workspace.yaml and package.json files.\n */\n\nimport path from 'node:path'\n\nimport { Catalog } from '../../domain/entities/catalog.js'\nimport { Package } from '../../domain/entities/package.js'\nimport { Workspace } from '../../domain/entities/workspace.js'\nimport type { WorkspaceRepository } from '../../domain/repositories/workspaceRepository.js'\nimport { CatalogCollection } from '../../domain/value-objects/catalogCollection.js'\nimport { PackageCollection } from '../../domain/value-objects/packageCollection.js'\nimport { WorkspaceConfig } from '../../domain/value-objects/workspaceConfig.js'\nimport { WorkspaceId } from '../../domain/value-objects/workspaceId.js'\nimport { WorkspacePath } from '../../domain/value-objects/workspacePath.js'\nimport type { FileSystemService } from '../file-system/fileSystemService.js'\n\nexport class FileWorkspaceRepository implements WorkspaceRepository {\n constructor(private readonly fileSystemService: FileSystemService) {}\n\n /**\n * Find a workspace by its path\n */\n async findByPath(path: WorkspacePath): Promise<Workspace | null> {\n try {\n // Check if the path contains a valid workspace\n if (!(await this.isValidWorkspace(path))) {\n return null\n }\n\n // Load workspace configuration\n const config = await this.loadConfiguration(path)\n\n // Create workspace ID from path\n const id = WorkspaceId.fromPath(path.toString())\n\n // Load packages\n const packages = await this.loadPackages(path, config)\n\n // Load catalogs\n const catalogs = await this.loadCatalogs(config)\n\n return Workspace.create(id, path, config, catalogs, packages)\n } catch (error) {\n console.error(`Failed to load workspace from ${path.toString()}:`, error)\n return null\n }\n }\n\n /**\n * Find a workspace by its ID\n */\n async findById(_id: WorkspaceId): Promise<Workspace | null> {\n // For file-based implementation, we would need to maintain a mapping\n // of IDs to paths. For now, this is not implemented.\n throw new Error('Finding workspace by ID is not implemented in file-based repository')\n }\n\n /**\n * Save a workspace\n */\n async save(workspace: Workspace): Promise<void> {\n try {\n // Save workspace configuration\n await this.saveConfiguration(workspace.getPath(), workspace.getConfig())\n\n // Save packages (update their package.json files)\n await this.savePackages(workspace.getPackages())\n } catch (error) {\n throw new Error(`Failed to save workspace: ${error}`)\n }\n }\n\n /**\n * Load workspace configuration from path\n */\n async loadConfiguration(path: WorkspacePath): Promise<WorkspaceConfig> {\n try {\n const workspaceData = await this.fileSystemService.readPnpmWorkspaceConfig(path)\n return WorkspaceConfig.fromWorkspaceData(workspaceData)\n } catch (error) {\n throw new Error(`Failed to load workspace configuration from ${path.toString()}: ${error}`)\n }\n }\n\n /**\n * Save workspace configuration to path\n */\n async saveConfiguration(path: WorkspacePath, config: WorkspaceConfig): Promise<void> {\n try {\n const workspaceData = config.toPnpmWorkspaceData()\n await this.fileSystemService.writePnpmWorkspaceConfig(path, workspaceData)\n } catch (error) {\n throw new Error(`Failed to save workspace configuration to ${path.toString()}: ${error}`)\n }\n }\n\n /**\n * Check if a path contains a valid pnpm workspace\n */\n async isValidWorkspace(path: WorkspacePath): Promise<boolean> {\n return await this.fileSystemService.isPnpmWorkspace(path.toString())\n }\n\n /**\n * Discover workspace from current working directory or given path\n */\n async discoverWorkspace(searchPath?: WorkspacePath): Promise<Workspace | null> {\n const startPath = searchPath?.toString() || process.cwd()\n\n try {\n const workspacePath = await this.fileSystemService.findNearestWorkspace(startPath)\n\n if (!workspacePath) {\n return null\n }\n\n return await this.findByPath(WorkspacePath.fromString(workspacePath))\n } catch (error) {\n console.error(`Failed to discover workspace from ${startPath}:`, error)\n return null\n }\n }\n\n /**\n * Load packages from workspace\n */\n private async loadPackages(\n workspacePath: WorkspacePath,\n config: WorkspaceConfig\n ): Promise<PackageCollection> {\n try {\n const packagePatterns = config.getPackagePatterns()\n\n // Find all package.json files matching the patterns\n const packageJsonFiles = await this.fileSystemService.findPackageJsonFiles(\n workspacePath,\n packagePatterns\n )\n\n const packages: Package[] = []\n\n for (const packageJsonPath of packageJsonFiles) {\n try {\n const packageDir = path.dirname(packageJsonPath)\n const packagePath = WorkspacePath.fromString(packageDir)\n\n // Read package.json\n const packageData = await this.fileSystemService.readPackageJson(packagePath)\n\n // Create package\n const packageId = `${packageData.name}-${packageDir}`\n const pkg = Package.create(packageId, packageData.name, packagePath, packageData)\n\n packages.push(pkg)\n } catch (error) {\n console.warn(`Failed to load package from ${packageJsonPath}:`, error)\n // Continue with other packages\n }\n }\n\n return PackageCollection.fromPackages(packages)\n } catch (error) {\n throw new Error(`Failed to load packages: ${error}`)\n }\n }\n\n /**\n * Load catalogs from workspace configuration\n */\n private async loadCatalogs(config: WorkspaceConfig): Promise<CatalogCollection> {\n try {\n const catalogs: Catalog[] = []\n const catalogDefinitions = config.getCatalogDefinitions()\n\n for (const [catalogName, catalogDef] of catalogDefinitions) {\n const catalogId = `catalog-${catalogName}`\n const catalog = Catalog.create(\n catalogId,\n catalogName,\n catalogDef.getDependencies(),\n config.getCatalogMode()\n )\n catalogs.push(catalog)\n }\n\n return CatalogCollection.fromCatalogs(catalogs)\n } catch (error) {\n throw new Error(`Failed to load catalogs: ${error}`)\n }\n }\n\n /**\n * Save packages (update their package.json files)\n */\n private async savePackages(packages: PackageCollection): Promise<void> {\n for (const pkg of packages.getAll()) {\n try {\n const packageData = pkg.toPackageJsonData()\n await this.fileSystemService.writePackageJson(pkg.getPath(), packageData)\n } catch (error) {\n console.error(`Failed to save package ${pkg.getName()}:`, error)\n // Continue with other packages\n }\n }\n }\n}\n","// Core domain and application exports for pnpm-catalog-updates\n\n// Application Interfaces\nexport type {\n ProgressReporter,\n ProgressReporterOptions,\n} from './application/interfaces/progressReporter'\nexport type {\n AIAnalysisServiceOptions,\n AnalysisRequestOptions,\n MultiAnalysisResult,\n} from './application/services/aiAnalysisService'\n// Application Services\nexport { AIAnalysisService } from './application/services/aiAnalysisService'\n\n// Application Service Types\nexport type {\n CheckOptions,\n ImpactAnalysis,\n OutdatedReport,\n UpdateOptions,\n UpdatePlan,\n UpdateResult,\n UpdateTarget,\n} from './application/services/catalogUpdateService'\nexport { CatalogUpdateService } from './application/services/catalogUpdateService'\nexport type {\n WorkspaceStats,\n WorkspaceValidationReport,\n} from './application/services/workspaceService'\nexport { WorkspaceService } from './application/services/workspaceService'\n// Domain Entities\nexport { Catalog } from './domain/entities/catalog'\nexport { Package } from './domain/entities/package'\nexport { Workspace } from './domain/entities/workspace'\n// AI Domain Interfaces\nexport type {\n AIConfig,\n AIProvider,\n AIProviderConfig,\n AIProviderInfo,\n AnalysisContext,\n AnalysisResult,\n AnalysisType,\n PackageUpdateInfo,\n Recommendation,\n RiskLevel,\n WorkspaceInfo,\n} from './domain/interfaces/aiProvider'\n// Repository Interface\nexport type { WorkspaceRepository } from './domain/repositories/workspaceRepository'\n// Value Objects\nexport { CatalogCollection } from './domain/value-objects/catalogCollection'\nexport { PackageCollection } from './domain/value-objects/packageCollection'\nexport { Version } from './domain/value-objects/version'\nexport { WorkspaceConfig } from './domain/value-objects/workspaceConfig'\nexport { WorkspaceId } from './domain/value-objects/workspaceId'\nexport { WorkspacePath } from './domain/value-objects/workspacePath'\nexport type {\n AnalysisCacheOptions,\n AnalysisCacheStats,\n BaseProviderOptions,\n ClaudeProviderOptions,\n CodexProviderOptions,\n GeminiProviderOptions,\n} from './infrastructure/ai/index'\n// AI Infrastructure\nexport {\n AIDetector,\n AnalysisCache,\n analysisCache,\n BaseAIProvider,\n ClaudeProvider,\n CodexProvider,\n GeminiProvider,\n RuleEngine,\n} from './infrastructure/ai/index'\n// Infrastructure\nexport { Cache } from './infrastructure/cache/cache'\nexport { NpmRegistryService } from './infrastructure/external-services/npmRegistryService'\n// Security Advisory Types\nexport type {\n SecurityAdvisoryReport,\n VulnerabilityInfo,\n} from './infrastructure/external-services/securityAdvisoryService'\nexport { SecurityAdvisoryService } from './infrastructure/external-services/securityAdvisoryService'\nexport { FileSystemService } from './infrastructure/file-system/fileSystemService'\nexport { FileWorkspaceRepository } from './infrastructure/repositories/fileWorkspaceRepository'\nexport { NpmrcParser } from './infrastructure/utils/npmrcParser'\n","#!/usr/bin/env node\n\n/**\n * pnpm-catalog-updates CLI Entry Point\n *\n * A CLI tool for checking and updating pnpm workspace catalog dependencies.\n * This is the main entry point that handles command parsing and execution.\n */\n\nimport { readFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n// Services and Dependencies\nimport type { AnalysisType } from '@pcu/core'\nimport {\n AIAnalysisService,\n AIDetector,\n CatalogUpdateService,\n FileSystemService,\n FileWorkspaceRepository,\n NpmRegistryService,\n WorkspaceService,\n} from '@pcu/core'\n// CLI Commands\nimport { ConfigLoader, VersionChecker } from '@pcu/utils'\nimport chalk from 'chalk'\nimport { Command } from 'commander'\nimport { CheckCommand } from './commands/checkCommand.js'\nimport { InitCommand } from './commands/initCommand.js'\nimport { SecurityCommand } from './commands/securityCommand.js'\nimport { UpdateCommand } from './commands/updateCommand.js'\nimport { type OutputFormat, OutputFormatter } from './formatters/outputFormatter.js'\nimport { InteractivePrompts } from './interactive/interactivePrompts.js'\nimport { StyledText, ThemeManager } from './themes/colorTheme.js'\n\n// Get package.json for version info\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = dirname(__filename)\nconst packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'))\n\n/**\n * Create service dependencies with configuration support\n */\nfunction createServices(workspacePath?: string) {\n const fileSystemService = new FileSystemService()\n const workspaceRepository = new FileWorkspaceRepository(fileSystemService)\n // Use factory method to create CatalogUpdateService with configuration\n const catalogUpdateService = CatalogUpdateService.createWithConfig(\n workspaceRepository,\n workspacePath\n )\n const workspaceService = new WorkspaceService(workspaceRepository)\n\n return {\n fileSystemService,\n workspaceRepository,\n catalogUpdateService,\n workspaceService,\n }\n}\n\nfunction parseBooleanFlag(value: unknown): boolean {\n if (value === undefined || value === null) return false\n if (typeof value === 'boolean') return value\n if (typeof value === 'number') return value !== 0\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase()\n if (normalized === '') return false\n if (['false', '0', 'no', 'off', 'n'].includes(normalized)) return false\n if (['true', '1', 'yes', 'on', 'y'].includes(normalized)) return true\n // Commander env() 会把任意非空字符串塞进来;未知字符串按“启用”处理\n return true\n }\n return Boolean(value)\n}\n\n/**\n * Main CLI function\n */\nexport async function main(): Promise<void> {\n const program = new Command()\n\n // Parse arguments first to get workspace path\n let workspacePath: string | undefined\n\n // Extract workspace path from arguments for service creation\n const workspaceIndex = process.argv.findIndex((arg) => arg === '-w' || arg === '--workspace')\n if (workspaceIndex !== -1 && workspaceIndex + 1 < process.argv.length) {\n workspacePath = process.argv[workspaceIndex + 1]\n }\n\n // Load configuration to check if version updates are enabled\n const config = ConfigLoader.loadConfig(workspacePath || process.cwd())\n\n // Check for version updates (skip in CI environments or if disabled)\n if (VersionChecker.shouldCheckForUpdates() && config.advanced?.checkForUpdates !== false) {\n try {\n const versionResult = await VersionChecker.checkVersion(packageJson.version, {\n skipPrompt: false,\n timeout: 3000, // Short timeout to not delay CLI startup\n })\n\n if (versionResult.shouldPrompt) {\n const didUpdate = await VersionChecker.promptAndUpdate(versionResult)\n if (didUpdate) {\n // Exit after successful update to allow user to restart with new version\n console.log(chalk.blue('Please run your command again to use the updated version.'))\n process.exit(0)\n }\n }\n } catch (error) {\n // Silently fail version check to not interrupt CLI usage (only show warning in verbose mode)\n if (process.argv.includes('-v') || process.argv.includes('--verbose')) {\n console.warn(chalk.yellow('⚠️ Could not check for updates:'), error)\n }\n }\n }\n\n // Create services with workspace path for configuration loading\n const services = createServices(workspacePath)\n\n // Configure the main command\n program\n .name('pcu')\n .description('A CLI tool to check and update pnpm workspace catalog dependencies')\n .option('--version', 'show version information')\n .option('-v, --verbose', 'enable verbose logging')\n .option('-w, --workspace <path>', 'workspace directory path')\n .option('--no-color', 'disable colored output')\n .option('-u, --update', 'shorthand for update command')\n .option('-c, --check', 'shorthand for check command')\n .option('-a, --analyze', 'shorthand for analyze command')\n .option('-s, --workspace-info', 'shorthand for workspace command')\n .option('-t, --theme', 'shorthand for theme command')\n .option('--security-audit', 'shorthand for security command')\n .option('--security-fix', 'shorthand for security --fix-vulns command')\n\n // Check command\n program\n .command('check')\n .alias('chk')\n .description('check for outdated catalog dependencies')\n .option('--catalog <name>', 'check specific catalog only')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .option(\n '-t, --target <type>',\n 'update target: latest, greatest, minor, patch, newest',\n 'latest'\n )\n .option('--prerelease', 'include prerelease versions')\n .option('--include <pattern>', 'include packages matching pattern', [])\n .option('--exclude <pattern>', 'exclude packages matching pattern', [])\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts()\n const checkCommand = new CheckCommand(services.catalogUpdateService)\n\n await checkCommand.execute({\n workspace: globalOptions.workspace,\n catalog: options.catalog,\n format: options.format,\n target: options.target,\n prerelease: options.prerelease,\n include: Array.isArray(options.include)\n ? options.include\n : [options.include].filter(Boolean),\n exclude: Array.isArray(options.exclude)\n ? options.exclude\n : [options.exclude].filter(Boolean),\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n })\n process.exit(0)\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error)\n process.exit(1)\n }\n })\n\n // Update command\n program\n .command('update')\n .alias('u')\n .description('update catalog dependencies')\n .option('-i, --interactive', 'interactive mode to choose updates')\n .option('-d, --dry-run', 'preview changes without writing files')\n .option(\n '-t, --target <type>',\n 'update target: latest, greatest, minor, patch, newest',\n 'latest'\n )\n .option('--catalog <name>', 'update specific catalog only')\n .option('--include <pattern>', 'include packages matching pattern', [])\n .option('--exclude <pattern>', 'exclude packages matching pattern', [])\n .option('--force', 'force updates even if risky')\n .option('--prerelease', 'include prerelease versions')\n .option('-b, --create-backup', 'create backup files before updating')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .option('--ai', 'enable AI-powered batch analysis for all updates')\n .option('--provider <name>', 'AI provider: auto, claude, gemini, codex', 'auto')\n .option(\n '--analysis-type <type>',\n 'AI analysis type: impact, security, compatibility, recommend',\n 'impact'\n )\n .option('--skip-cache', 'skip AI analysis cache')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts()\n const updateCommand = new UpdateCommand(services.catalogUpdateService)\n\n await updateCommand.execute({\n workspace: globalOptions.workspace,\n catalog: options.catalog,\n format: options.format,\n target: options.target,\n interactive: options.interactive,\n dryRun: options.dryRun,\n force: options.force,\n prerelease: options.prerelease,\n include: Array.isArray(options.include)\n ? options.include\n : [options.include].filter(Boolean),\n exclude: Array.isArray(options.exclude)\n ? options.exclude\n : [options.exclude].filter(Boolean),\n createBackup: options.createBackup,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n // AI batch analysis options\n ai: parseBooleanFlag(options.ai),\n provider: options.provider,\n analysisType: options.analysisType as AnalysisType,\n skipCache: parseBooleanFlag(options.skipCache),\n })\n process.exit(0)\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error)\n process.exit(1)\n }\n })\n\n // Analyze command\n program\n .command('analyze')\n .alias('a')\n .description('analyze the impact of updating a specific dependency')\n .argument('<package>', 'package name')\n .argument('[version]', 'new version (default: latest)')\n .option('--catalog <name>', 'catalog name (auto-detected if not specified)')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .option('--no-ai', 'disable AI-powered analysis')\n .option('--provider <name>', 'AI provider: auto, claude, gemini, codex', 'auto')\n .option(\n '--analysis-type <type>',\n 'AI analysis type: impact, security, compatibility, recommend',\n 'impact'\n )\n .option('--skip-cache', 'skip AI analysis cache')\n .action(async (packageName, version, options, command) => {\n try {\n const globalOptions = command.parent.opts()\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n )\n\n // Auto-detect catalog if not specified\n let catalog = options.catalog\n if (!catalog) {\n console.log(chalk.gray(`🔍 Auto-detecting catalog for ${packageName}...`))\n catalog = await services.catalogUpdateService.findCatalogForPackage(\n packageName,\n globalOptions.workspace\n )\n if (!catalog) {\n console.error(chalk.red(`❌ Package \"${packageName}\" not found in any catalog`))\n console.log(chalk.gray('Use --catalog <name> to specify the catalog manually'))\n process.exit(1)\n }\n console.log(chalk.gray(` Found in catalog: ${catalog}`))\n }\n\n // Get latest version if not specified\n let targetVersion = version\n if (!targetVersion) {\n const tempRegistryService = new NpmRegistryService()\n targetVersion = (await tempRegistryService.getLatestVersion(packageName)).toString()\n }\n\n // Get basic impact analysis first\n const analysis = await services.catalogUpdateService.analyzeImpact(\n catalog,\n packageName,\n targetVersion,\n globalOptions.workspace\n )\n\n // AI analysis is enabled by default (use --no-ai to disable)\n const aiEnabled = options.ai !== false\n\n if (aiEnabled) {\n console.log(chalk.blue('🤖 Running AI-powered analysis...'))\n\n const aiService = new AIAnalysisService({\n config: {\n preferredProvider: options.provider === 'auto' ? 'auto' : options.provider,\n cache: { enabled: !parseBooleanFlag(options.skipCache), ttl: 3600 },\n fallback: { enabled: true, useRuleEngine: true },\n },\n })\n\n // Get workspace info\n const workspaceInfo = await services.workspaceService.getWorkspaceInfo(\n globalOptions.workspace\n )\n\n // Build packages info for AI analysis\n const packages = [\n {\n name: packageName,\n currentVersion: analysis.currentVersion,\n targetVersion: analysis.proposedVersion,\n updateType: analysis.updateType,\n },\n ]\n\n // Build workspace info for AI\n const wsInfo = {\n name: workspaceInfo.name,\n path: workspaceInfo.path,\n packageCount: workspaceInfo.packageCount,\n catalogCount: workspaceInfo.catalogCount,\n }\n\n try {\n const aiResult = await aiService.analyzeUpdates(packages, wsInfo, {\n analysisType: options.analysisType as AnalysisType,\n skipCache: parseBooleanFlag(options.skipCache),\n })\n\n // Format and display AI analysis result\n const aiOutput = formatter.formatAIAnalysis(aiResult, analysis)\n console.log(aiOutput)\n process.exit(0)\n } catch (aiError) {\n console.warn(chalk.yellow('⚠️ AI analysis failed, showing basic analysis:'))\n if (globalOptions.verbose) {\n console.warn(chalk.gray(String(aiError)))\n }\n // Fall back to basic analysis\n const formattedOutput = formatter.formatImpactAnalysis(analysis)\n console.log(formattedOutput)\n process.exit(0)\n }\n } else {\n // Standard analysis without AI\n const formattedOutput = formatter.formatImpactAnalysis(analysis)\n console.log(formattedOutput)\n }\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error)\n process.exit(1)\n }\n })\n\n // Workspace command\n program\n .command('workspace')\n .alias('w')\n .description('workspace information and validation')\n .option('--validate', 'validate workspace configuration')\n .option('-s, --stats', 'show workspace statistics')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts()\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n )\n\n if (options.validate) {\n const report = await services.workspaceService.validateWorkspace(globalOptions.workspace)\n const formattedOutput = formatter.formatValidationReport(report)\n console.log(formattedOutput)\n process.exit(0)\n if (!report.isValid) {\n process.exit(1)\n }\n } else if (options.stats) {\n const stats = await services.workspaceService.getWorkspaceStats(globalOptions.workspace)\n const formattedOutput = formatter.formatWorkspaceStats(stats)\n console.log(formattedOutput)\n process.exit(0)\n } else {\n const info = await services.workspaceService.getWorkspaceInfo(globalOptions.workspace)\n console.log(formatter.formatMessage(`Workspace: ${info.name}`, 'info'))\n console.log(formatter.formatMessage(`Path: ${info.path}`, 'info'))\n console.log(formatter.formatMessage(`Packages: ${info.packageCount}`, 'info'))\n console.log(formatter.formatMessage(`Catalogs: ${info.catalogCount}`, 'info'))\n\n if (info.catalogNames.length > 0) {\n console.log(\n formatter.formatMessage(`Catalog names: ${info.catalogNames.join(', ')}`, 'info')\n )\n }\n process.exit(0)\n }\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error)\n process.exit(1)\n }\n })\n\n // Theme command\n program\n .command('theme')\n .alias('t')\n .description('configure color theme')\n .option('-s, --set <theme>', 'set theme: default, modern, minimal, neon')\n .option('-l, --list', 'list available themes')\n .option('-i, --interactive', 'interactive theme selection')\n .action(async (options, _command) => {\n try {\n if (options.list) {\n const themes = ThemeManager.listThemes()\n console.log(StyledText.iconInfo('Available themes:'))\n themes.forEach((theme) => {\n console.log(` • ${theme}`)\n })\n return\n }\n\n if (options.set) {\n const themes = ThemeManager.listThemes()\n if (!themes.includes(options.set)) {\n console.error(StyledText.iconError(`Invalid theme: ${options.set}`))\n console.log(StyledText.muted(`Available themes: ${themes.join(', ')}`))\n process.exit(1)\n }\n\n ThemeManager.setTheme(options.set)\n console.log(StyledText.iconSuccess(`Theme set to: ${options.set}`))\n\n // Show a preview\n console.log('\\nTheme preview:')\n const theme = ThemeManager.getTheme()\n console.log(` ${theme.success('✓ Success message')}`)\n console.log(` ${theme.warning('⚠ Warning message')}`)\n console.log(` ${theme.error('✗ Error message')}`)\n console.log(` ${theme.info('ℹ Info message')}`)\n console.log(\n ` ${theme.major('Major update')} | ${theme.minor('Minor update')} | ${theme.patch('Patch update')}`\n )\n return\n }\n\n if (options.interactive) {\n const interactivePrompts = new InteractivePrompts()\n const config = await interactivePrompts.configurationWizard()\n\n if (config.theme) {\n ThemeManager.setTheme(config.theme)\n console.log(StyledText.iconSuccess(`Theme configured: ${config.theme}`))\n }\n return\n }\n\n // Default: show current theme and list\n const currentTheme = ThemeManager.getTheme()\n console.log(StyledText.iconInfo('Current theme settings:'))\n console.log(` Theme: ${currentTheme ? 'custom' : 'default'}`)\n console.log('\\nAvailable themes:')\n ThemeManager.listThemes().forEach((theme) => {\n console.log(` • ${theme}`)\n })\n console.log(\n StyledText.muted('\\nUse --set <theme> to change theme or --interactive for guided setup')\n )\n } catch (error) {\n console.error(StyledText.iconError('Error configuring theme:'), error)\n process.exit(1)\n }\n })\n\n // Security command\n program\n .command('security')\n .alias('sec')\n .description('security vulnerability scanning and automated fixes')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .option('--audit', 'perform npm audit scan (default: true)', true)\n .option('--fix-vulns', 'automatically fix vulnerabilities')\n .option('--severity <level>', 'filter by severity: low, moderate, high, critical')\n .option('--include-dev', 'include dev dependencies in scan')\n .option('--snyk', 'include Snyk scan (requires snyk CLI)')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts()\n const formatter = new OutputFormatter(\n options.format as OutputFormat,\n !globalOptions.noColor\n )\n\n const securityCommand = new SecurityCommand(formatter)\n\n await securityCommand.execute({\n workspace: globalOptions.workspace,\n format: options.format,\n audit: options.audit,\n fixVulns: options.fixVulns,\n severity: options.severity,\n includeDev: options.includeDev,\n snyk: options.snyk,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n })\n process.exit(0)\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error)\n process.exit(1)\n }\n })\n\n // Init command\n program\n .command('init')\n .alias('i')\n .description('initialize PCU configuration and PNPM workspace')\n .option('--force', 'overwrite existing configuration file')\n .option('--full', 'generate full configuration with all options')\n .option(\n '--create-workspace',\n 'create PNPM workspace structure if missing (default: true)',\n true\n )\n .option('--no-create-workspace', 'skip creating PNPM workspace structure')\n .option('-f, --format <type>', 'output format: table, json, yaml, minimal', 'table')\n .action(async (options, command) => {\n try {\n const globalOptions = command.parent.opts()\n const initCommand = new InitCommand()\n\n await initCommand.execute({\n workspace: globalOptions.workspace,\n force: options.force,\n full: options.full,\n createWorkspace: options.createWorkspace,\n verbose: globalOptions.verbose,\n color: !globalOptions.noColor,\n })\n process.exit(0)\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error)\n process.exit(1)\n }\n })\n\n // AI command - check AI provider status and availability\n program\n .command('ai')\n .description('check AI provider status and availability')\n .option('--status', 'show status of all AI providers (default)')\n .option('--test', 'test AI analysis with a sample request')\n .option('--cache-stats', 'show AI analysis cache statistics')\n .option('--clear-cache', 'clear AI analysis cache')\n .action(async (options) => {\n try {\n const aiDetector = new AIDetector()\n\n if (options.clearCache) {\n // Import the cache singleton\n const { analysisCache } = await import('@pcu/core')\n analysisCache.clear()\n console.log(chalk.green('✅ AI analysis cache cleared'))\n process.exit(0)\n return\n }\n\n if (options.cacheStats) {\n const { analysisCache } = await import('@pcu/core')\n const stats = analysisCache.getStats()\n console.log(chalk.blue('📊 AI Analysis Cache Statistics'))\n console.log(chalk.gray('─────────────────────────────────'))\n console.log(` Total entries: ${chalk.cyan(stats.totalEntries)}`)\n console.log(` Cache hits: ${chalk.green(stats.hits)}`)\n console.log(` Cache misses: ${chalk.yellow(stats.misses)}`)\n console.log(` Hit rate: ${chalk.cyan(`${(stats.hitRate * 100).toFixed(1)}%`)}`)\n process.exit(0)\n return\n }\n\n if (options.test) {\n console.log(chalk.blue('🧪 Testing AI analysis...'))\n\n const aiService = new AIAnalysisService({\n config: {\n fallback: { enabled: true, useRuleEngine: true },\n },\n })\n\n const testPackages = [\n {\n name: 'lodash',\n currentVersion: '4.17.20',\n targetVersion: '4.17.21',\n updateType: 'patch' as const,\n },\n ]\n\n const testWorkspaceInfo = {\n name: 'test-workspace',\n path: process.cwd(),\n packageCount: 1,\n catalogCount: 1,\n }\n\n try {\n const result = await aiService.analyzeUpdates(testPackages, testWorkspaceInfo, {\n analysisType: 'impact',\n })\n console.log(chalk.green('✅ AI analysis test successful!'))\n console.log(chalk.gray('─────────────────────────────────'))\n console.log(` Provider: ${chalk.cyan(result.provider)}`)\n console.log(` Confidence: ${chalk.cyan(`${(result.confidence * 100).toFixed(0)}%`)}`)\n console.log(` Summary: ${result.summary}`)\n } catch (error) {\n console.log(chalk.yellow('⚠️ AI analysis test failed:'))\n console.log(chalk.gray(String(error)))\n }\n process.exit(0)\n return\n }\n\n // Default: show status\n console.log(chalk.blue('🤖 AI Provider Status'))\n console.log(chalk.gray('─────────────────────────────────'))\n\n const summary = await aiDetector.getDetectionSummary()\n console.log(summary)\n\n const providers = await aiDetector.detectAvailableProviders()\n console.log('')\n console.log(chalk.blue('📋 Provider Details'))\n console.log(chalk.gray('─────────────────────────────────'))\n\n for (const provider of providers) {\n const statusIcon = provider.available ? chalk.green('✓') : chalk.red('✗')\n const statusText = provider.available ? chalk.green('Available') : chalk.gray('Not found')\n const priorityText = chalk.gray(`(priority: ${provider.priority})`)\n\n console.log(\n ` ${statusIcon} ${chalk.cyan(provider.name)} - ${statusText} ${priorityText}`\n )\n\n if (provider.available && provider.path) {\n console.log(chalk.gray(` Path: ${provider.path}`))\n }\n if (provider.available && provider.version) {\n console.log(chalk.gray(` Version: ${provider.version}`))\n }\n }\n\n const best = await aiDetector.getBestProvider()\n if (best) {\n console.log('')\n console.log(chalk.green(`✨ Best available provider: ${best.name}`))\n }\n process.exit(0)\n } catch (error) {\n console.error(chalk.red('❌ Error:'), error)\n process.exit(1)\n }\n })\n\n // Add help command\n program\n .command('help')\n .alias('h')\n .argument('[command]', 'command to get help for')\n .description('display help for command')\n .action((command) => {\n if (command) {\n const cmd = program.commands.find((c) => c.name() === command)\n if (cmd) {\n cmd.help()\n } else {\n console.log(chalk.red(`Unknown command: ${command}`))\n }\n } else {\n program.help()\n }\n })\n\n // Let commander handle help and version normally\n // program.exitOverride() removed to fix help/version output\n\n // Handle shorthand options and single-letter commands by rewriting arguments\n const args = [...process.argv]\n // Map single-letter command 'i' -> init (changed from interactive mode)\n if (\n args.includes('i') &&\n !args.some(\n (a) =>\n a === 'init' ||\n a === 'update' ||\n a === '-u' ||\n a === '--update' ||\n a === '-i' ||\n a === '--interactive'\n )\n ) {\n const index = args.indexOf('i')\n args.splice(index, 1, 'init')\n }\n\n if (args.includes('-u') || args.includes('--update')) {\n const index = args.findIndex((arg) => arg === '-u' || arg === '--update')\n args.splice(index, 1, 'update')\n } else if (\n (args.includes('-i') || args.includes('--interactive')) &&\n !args.some((a) => a === 'update' || a === '-u' || a === '--update')\n ) {\n // Map standalone -i to `update -i`\n const index = args.findIndex((arg) => arg === '-i' || arg === '--interactive')\n // Replace the flag position with 'update' and keep the flag after it\n args.splice(index, 1, 'update', '-i')\n } else if (args.includes('-c') || args.includes('--check')) {\n const index = args.findIndex((arg) => arg === '-c' || arg === '--check')\n args.splice(index, 1, 'check')\n } else if (args.includes('-a') || args.includes('--analyze')) {\n const index = args.findIndex((arg) => arg === '-a' || arg === '--analyze')\n args.splice(index, 1, 'analyze')\n } else if (args.includes('-s') || args.includes('--workspace-info')) {\n const index = args.findIndex((arg) => arg === '-s' || arg === '--workspace-info')\n args.splice(index, 1, 'workspace')\n } else if (args.includes('-t') || args.includes('--theme')) {\n const index = args.findIndex((arg) => arg === '-t' || arg === '--theme')\n args.splice(index, 1, 'theme')\n } else if (args.includes('--security-audit')) {\n const index = args.indexOf('--security-audit')\n args.splice(index, 1, 'security')\n } else if (args.includes('--security-fix')) {\n const index = args.indexOf('--security-fix')\n args.splice(index, 1, 'security', '--fix-vulns')\n }\n\n // Show help if no arguments provided\n if (args.length <= 2) {\n program.help()\n }\n\n // Handle custom --version with update checking\n if (args.includes('--version')) {\n console.log(packageJson.version)\n\n // Check for updates if not in CI and enabled in config\n if (VersionChecker.shouldCheckForUpdates() && config.advanced?.checkForUpdates !== false) {\n try {\n console.log(chalk.gray('Checking for updates...'))\n const versionResult = await VersionChecker.checkVersion(packageJson.version, {\n skipPrompt: false,\n timeout: 5000, // Longer timeout for explicit version check\n })\n\n if (versionResult.shouldPrompt) {\n const didUpdate = await VersionChecker.promptAndUpdate(versionResult)\n if (didUpdate) {\n console.log(chalk.blue('Please run your command again to use the updated version.'))\n process.exit(0)\n }\n } else if (versionResult.isLatest) {\n console.log(chalk.green('You are using the latest version!'))\n }\n } catch (error) {\n // Silently fail update check for version command\n if (args.includes('-v') || args.includes('--verbose')) {\n console.warn(chalk.yellow('⚠️ Could not check for updates:'), error)\n }\n }\n }\n\n process.exit(0)\n }\n\n // Parse command line arguments\n try {\n await program.parseAsync(args)\n } catch (error) {\n console.error(chalk.red('❌ Unexpected error:'), error)\n if (error instanceof Error && error.stack) {\n console.error(chalk.gray(error.stack))\n }\n process.exit(1)\n }\n}\n\n// Run the CLI if this file is executed directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n main().catch((error) => {\n console.error(chalk.red('❌ Fatal error:'), error)\n process.exit(1)\n })\n}\n","/**\n * Check Command\n *\n * CLI command to check for outdated catalog dependencies.\n * Provides detailed information about available updates.\n */\n\nimport type { CatalogUpdateService, CheckOptions } from '@pcu/core'\nimport { ConfigLoader } from '@pcu/utils'\nimport { type OutputFormat, OutputFormatter } from '../formatters/outputFormatter.js'\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js'\n\nexport interface CheckCommandOptions {\n workspace?: string\n catalog?: string\n format?: OutputFormat\n target?: 'latest' | 'greatest' | 'minor' | 'patch' | 'newest'\n prerelease?: boolean\n include?: string[]\n exclude?: string[]\n verbose?: boolean\n color?: boolean\n}\n\nexport class CheckCommand {\n constructor(private readonly catalogUpdateService: CatalogUpdateService) {}\n\n /**\n * Execute the check command\n */\n async execute(options: CheckCommandOptions = {}): Promise<void> {\n try {\n // Initialize theme\n ThemeManager.setTheme('default')\n\n if (options.verbose) {\n console.log(StyledText.iconAnalysis('Checking for outdated catalog dependencies'))\n console.log(StyledText.muted(`Workspace: ${options.workspace || process.cwd()}`))\n\n if (options.catalog) {\n console.log(StyledText.muted(`Catalog: ${options.catalog}`))\n }\n\n if (options.target && options.target !== 'latest') {\n console.log(StyledText.muted(`Target: ${options.target}`))\n }\n\n console.log('')\n }\n\n // Load configuration file first\n const config = ConfigLoader.loadConfig(options.workspace || process.cwd())\n\n // Use format from CLI options first, then config file, then default\n const effectiveFormat = options.format || config.defaults?.format || 'table'\n\n // Create output formatter with effective format\n const formatter = new OutputFormatter(\n effectiveFormat as OutputFormat,\n options.color !== false\n )\n\n // Merge CLI options with configuration file settings\n const checkOptions: CheckOptions = {\n workspacePath: options.workspace,\n catalogName: options.catalog,\n target: options.target || config.defaults?.target || 'latest',\n includePrerelease: options.prerelease ?? config.defaults?.includePrerelease ?? false,\n // CLI include/exclude options take priority over config file\n include: options.include?.length ? options.include : config.include,\n exclude: options.exclude?.length ? options.exclude : config.exclude,\n }\n\n // Execute check\n const report = await this.catalogUpdateService.checkOutdatedDependencies(checkOptions)\n\n // Format and display results\n const formattedOutput = formatter.formatOutdatedReport(report)\n console.log(formattedOutput)\n\n // Show summary\n if (options.verbose || options.format === 'table') {\n this.showSummary(report, options)\n }\n\n // Always exit with 0 since this is just a check command\n // and finding updates is not an error condition\n process.exit(0)\n } catch (error) {\n console.error(StyledText.iconError('Error checking dependencies:'))\n console.error(StyledText.error(String(error)))\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'))\n console.error(StyledText.muted(error.stack || 'No stack trace available'))\n }\n\n process.exit(1)\n }\n }\n\n /**\n * Show command summary\n */\n private showSummary(report: any, _options: CheckCommandOptions): void {\n const lines: string[] = []\n const theme = ThemeManager.getTheme()\n\n if (!report.hasUpdates) {\n lines.push(StyledText.iconSuccess('All catalog dependencies are up to date!'))\n } else {\n lines.push(StyledText.iconInfo('Summary:'))\n lines.push(` • ${report.totalOutdated} outdated dependencies found`)\n lines.push(` • ${report.catalogs.length} catalogs checked`)\n\n const totalPackages = report.catalogs.reduce(\n (sum: number, cat: any) => sum + cat.totalPackages,\n 0\n )\n lines.push(` • ${totalPackages} total catalog entries`)\n\n // Show breakdown by update type\n const updateTypes = { major: 0, minor: 0, patch: 0 }\n\n for (const catalog of report.catalogs) {\n for (const dep of catalog.outdatedDependencies) {\n updateTypes[dep.updateType as keyof typeof updateTypes]++\n }\n }\n\n if (updateTypes.major > 0) {\n lines.push(theme.major(` • ${updateTypes.major} major updates`))\n }\n if (updateTypes.minor > 0) {\n lines.push(theme.minor(` • ${updateTypes.minor} minor updates`))\n }\n if (updateTypes.patch > 0) {\n lines.push(theme.patch(` • ${updateTypes.patch} patch updates`))\n }\n\n // Security updates\n const securityUpdates = report.catalogs.reduce((sum: number, cat: any) => {\n return sum + cat.outdatedDependencies.filter((dep: any) => dep.isSecurityUpdate).length\n }, 0)\n\n if (securityUpdates > 0) {\n lines.push(StyledText.iconSecurity(`${securityUpdates} security updates`))\n }\n\n lines.push('')\n lines.push(StyledText.iconUpdate('Run with --update to apply updates'))\n\n if (updateTypes.major > 0) {\n lines.push(StyledText.iconWarning('Major updates may contain breaking changes'))\n }\n }\n\n console.log(lines.join('\\n'))\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: CheckCommandOptions): string[] {\n const errors: string[] = []\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal')\n }\n\n // Validate target\n if (\n options.target &&\n !['latest', 'greatest', 'minor', 'patch', 'newest'].includes(options.target)\n ) {\n errors.push('Invalid target. Must be one of: latest, greatest, minor, patch, newest')\n }\n\n // Validate include/exclude patterns\n if (options.include?.some((pattern) => !pattern.trim())) {\n errors.push('Include patterns cannot be empty')\n }\n\n if (options.exclude?.some((pattern) => !pattern.trim())) {\n errors.push('Exclude patterns cannot be empty')\n }\n\n return errors\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nCheck for outdated catalog dependencies\n\nUsage:\n pcu check [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --catalog <name> Check specific catalog only\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --target <type> Update target: latest, greatest, minor, patch, newest (default: latest)\n --prerelease Include prerelease versions\n --include <pattern> Include packages matching pattern (can be used multiple times)\n --exclude <pattern> Exclude packages matching pattern (can be used multiple times)\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu check # Check all catalogs\n pcu check --catalog react17 # Check specific catalog\n pcu check --target minor # Check for minor updates only\n pcu check --format json # Output as JSON\n pcu check --include \"react*\" # Include only React packages\n pcu check --exclude \"@types/*\" # Exclude TypeScript types\n\nExit Codes:\n 0 All dependencies are up to date\n 1 Updates are available\n 2 Error occurred\n `\n }\n}\n","/**\n * Output Formatter\n *\n * Provides formatted output for CLI commands in various formats.\n * Supports table, JSON, YAML, and minimal output formats.\n */\n\nimport type {\n AnalysisResult,\n ImpactAnalysis,\n OutdatedReport,\n UpdateResult,\n WorkspaceStats,\n WorkspaceValidationReport,\n} from '@pcu/core'\nimport chalk from 'chalk'\nimport Table from 'cli-table3'\nimport YAML from 'yaml'\nimport type { SecurityReport } from '../commands/securityCommand.js'\n\nexport type OutputFormat = 'table' | 'json' | 'yaml' | 'minimal'\n\n// Build ANSI escape regex without literal control characters\nconst ANSI_ESCAPE = String.fromCharCode(27)\nconst ansiRegex: RegExp = new RegExp(`${ANSI_ESCAPE}\\\\[[0-9;]*m`, 'g')\n\nexport class OutputFormatter {\n constructor(\n private readonly format: OutputFormat = 'table',\n private readonly useColor: boolean = true\n ) {}\n\n /**\n * Format outdated dependencies report\n */\n formatOutdatedReport(report: OutdatedReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2)\n case 'yaml':\n return YAML.stringify(report)\n case 'minimal':\n return this.formatOutdatedMinimal(report)\n default:\n return this.formatOutdatedTable(report)\n }\n }\n\n /**\n * Format update result\n */\n formatUpdateResult(result: UpdateResult): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(result, null, 2)\n case 'yaml':\n return YAML.stringify(result)\n case 'minimal':\n return this.formatUpdateMinimal(result)\n default:\n return this.formatUpdateTable(result)\n }\n }\n\n /**\n * Format impact analysis\n */\n formatImpactAnalysis(analysis: ImpactAnalysis): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(analysis, null, 2)\n case 'yaml':\n return YAML.stringify(analysis)\n case 'minimal':\n return this.formatImpactMinimal(analysis)\n default:\n return this.formatImpactTable(analysis)\n }\n }\n\n /**\n * Format workspace validation report\n */\n formatValidationReport(report: WorkspaceValidationReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2)\n case 'yaml':\n return YAML.stringify(report)\n case 'minimal':\n return this.formatValidationMinimal(report)\n default:\n return this.formatValidationTable(report)\n }\n }\n\n /**\n * Format workspace statistics\n */\n formatWorkspaceStats(stats: WorkspaceStats): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(stats, null, 2)\n case 'yaml':\n return YAML.stringify(stats)\n case 'minimal':\n return this.formatStatsMinimal(stats)\n default:\n return this.formatStatsTable(stats)\n }\n }\n\n /**\n * Format security report\n */\n formatSecurityReport(report: SecurityReport): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify(report, null, 2)\n case 'yaml':\n return YAML.stringify(report)\n case 'minimal':\n return this.formatSecurityMinimal(report)\n default:\n return this.formatSecurityTable(report)\n }\n }\n\n /**\n * Format simple message with optional styling\n */\n formatMessage(message: string, type: 'success' | 'error' | 'warning' | 'info' = 'info'): string {\n if (!this.useColor) {\n return message\n }\n\n switch (type) {\n case 'success':\n return chalk.green(message)\n case 'error':\n return chalk.red(message)\n case 'warning':\n return chalk.yellow(message)\n default:\n return chalk.blue(message)\n }\n }\n\n /**\n * Format outdated dependencies as table\n */\n private formatOutdatedTable(report: OutdatedReport): string {\n const lines: string[] = []\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n📦 Workspace: ${report.workspace.name}`))\n lines.push(this.colorize(chalk.gray, `Path: ${report.workspace.path}`))\n\n if (!report.hasUpdates) {\n lines.push(this.colorize(chalk.green, '\\n✅ All catalog dependencies are up to date!'))\n return lines.join('\\n')\n }\n\n lines.push(\n this.colorize(chalk.yellow, `\\n🔄 Found ${report.totalOutdated} outdated dependencies\\n`)\n )\n\n for (const catalogInfo of report.catalogs) {\n if (catalogInfo.outdatedCount === 0) continue\n\n lines.push(this.colorize(chalk.bold, `📋 Catalog: ${catalogInfo.catalogName}`))\n\n const table = new Table({\n head: this.colorizeHeaders(['Package', 'Current', 'Latest', 'Type', 'Packages']),\n style: { head: [], border: [] },\n colWidths: [25, 15, 15, 8, 20],\n })\n\n for (const dep of catalogInfo.outdatedDependencies) {\n const typeColor = this.getUpdateTypeColor(dep.updateType)\n const securityIcon = dep.isSecurityUpdate ? '🔒 ' : ''\n\n // Colorize version differences\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.currentVersion,\n dep.latestVersion,\n dep.updateType\n )\n\n table.push([\n `${securityIcon}${dep.packageName}`,\n currentColored,\n latestColored,\n this.colorize(typeColor, dep.updateType),\n `${dep.affectedPackages.length} package(s)`,\n ])\n }\n\n lines.push(table.toString())\n lines.push('')\n }\n\n return lines.join('\\n')\n }\n\n /**\n * Format outdated dependencies minimally (npm-check-updates style)\n */\n private formatOutdatedMinimal(report: OutdatedReport): string {\n if (!report.hasUpdates) {\n return 'All dependencies up to date'\n }\n\n // Collect all dependencies first to calculate max package name width\n const allDeps: Array<{\n securityIcon: string\n packageName: string\n currentColored: string\n latestColored: string\n }> = []\n\n for (const catalogInfo of report.catalogs) {\n for (const dep of catalogInfo.outdatedDependencies) {\n const securityIcon = dep.isSecurityUpdate ? '🔒 ' : ''\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.currentVersion,\n dep.latestVersion,\n dep.updateType\n )\n allDeps.push({\n securityIcon,\n packageName: dep.packageName,\n currentColored,\n latestColored,\n })\n }\n }\n\n // Calculate max widths for alignment\n const maxNameWidth = Math.max(\n ...allDeps.map((dep) => (dep.securityIcon + dep.packageName).length)\n )\n\n // Calculate max version widths (need to strip color codes for accurate width calculation)\n const stripAnsi = (str: string) => str.replace(ansiRegex, '')\n const maxCurrentWidth = Math.max(...allDeps.map((dep) => stripAnsi(dep.currentColored).length))\n\n // Format lines with proper alignment\n const lines: string[] = []\n for (const dep of allDeps) {\n const nameWithIcon = dep.securityIcon + dep.packageName\n const paddedName = nameWithIcon.padEnd(maxNameWidth)\n\n // For current version alignment, we need to pad the visible text, not the colored version\n const currentVisible = stripAnsi(dep.currentColored)\n const currentPadding = maxCurrentWidth - currentVisible.length\n const paddedCurrent = dep.currentColored + ' '.repeat(currentPadding)\n\n lines.push(`${paddedName} ${paddedCurrent} → ${dep.latestColored}`)\n }\n\n return lines.join('\\n')\n }\n\n /**\n * Format update result as table\n */\n private formatUpdateTable(result: UpdateResult): string {\n const lines: string[] = []\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n📦 Workspace: ${result.workspace.name}`))\n\n if (result.success) {\n lines.push(this.colorize(chalk.green, '✅ Update completed successfully!'))\n } else {\n lines.push(this.colorize(chalk.red, '❌ Update completed with errors'))\n }\n\n lines.push('')\n\n // Updated dependencies\n if (result.updatedDependencies.length > 0) {\n lines.push(this.colorize(chalk.green, `🎉 Updated ${result.totalUpdated} dependencies:`))\n\n const table = new Table({\n head: this.colorizeHeaders(['Catalog', 'Package', 'From', 'To', 'Type']),\n style: { head: [], border: [] },\n colWidths: [15, 25, 15, 15, 8],\n })\n\n for (const dep of result.updatedDependencies) {\n const typeColor = this.getUpdateTypeColor(dep.updateType)\n\n // Colorize version differences\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.fromVersion,\n dep.toVersion,\n dep.updateType\n )\n\n table.push([\n dep.catalogName,\n dep.packageName,\n currentColored,\n latestColored,\n this.colorize(typeColor, dep.updateType),\n ])\n }\n\n lines.push(table.toString())\n lines.push('')\n }\n\n // Skipped dependencies\n if (result.skippedDependencies.length > 0) {\n lines.push(this.colorize(chalk.yellow, `⚠️ Skipped ${result.totalSkipped} dependencies:`))\n\n for (const dep of result.skippedDependencies) {\n lines.push(` ${dep.catalogName}:${dep.packageName} - ${dep.reason}`)\n }\n lines.push('')\n }\n\n // Errors\n if (result.errors.length > 0) {\n lines.push(this.colorize(chalk.red, `❌ ${result.totalErrors} errors occurred:`))\n\n for (const error of result.errors) {\n const prefix = error.fatal ? '💥' : '⚠️ '\n lines.push(` ${prefix} ${error.catalogName}:${error.packageName} - ${error.error}`)\n }\n }\n\n return lines.join('\\n')\n }\n\n /**\n * Format update result minimally (npm-check-updates style)\n */\n private formatUpdateMinimal(result: UpdateResult): string {\n const lines: string[] = []\n\n if (result.success) {\n lines.push(`Updated ${result.totalUpdated} dependencies`)\n } else {\n lines.push(`Update failed with ${result.totalErrors} errors`)\n }\n\n if (result.updatedDependencies.length > 0) {\n // Collect version info for alignment calculation\n const depsWithVersions = result.updatedDependencies.map((dep) => {\n const { currentColored, latestColored } = this.colorizeVersionDiff(\n dep.fromVersion,\n dep.toVersion,\n dep.updateType\n )\n return {\n packageName: dep.packageName,\n currentColored,\n latestColored,\n }\n })\n\n // Calculate max widths for alignment\n const maxNameWidth = Math.max(...depsWithVersions.map((dep) => dep.packageName.length))\n\n const stripAnsi = (str: string) => str.replace(ansiRegex, '')\n const maxCurrentWidth = Math.max(\n ...depsWithVersions.map((dep) => stripAnsi(dep.currentColored).length)\n )\n\n for (const dep of depsWithVersions) {\n const paddedName = dep.packageName.padEnd(maxNameWidth)\n\n // Pad current version for alignment\n const currentVisible = stripAnsi(dep.currentColored)\n const currentPadding = maxCurrentWidth - currentVisible.length\n const paddedCurrent = dep.currentColored + ' '.repeat(currentPadding)\n\n lines.push(`${paddedName} ${paddedCurrent} → ${dep.latestColored}`)\n }\n }\n\n return lines.join('\\n')\n }\n\n /**\n * Format impact analysis as table\n */\n private formatImpactTable(analysis: ImpactAnalysis): string {\n const lines: string[] = []\n\n // Header\n lines.push(this.colorize(chalk.bold, `\\n🔍 Impact Analysis: ${analysis.packageName}`))\n lines.push(this.colorize(chalk.gray, `Catalog: ${analysis.catalogName}`))\n lines.push(\n this.colorize(chalk.gray, `Update: ${analysis.currentVersion} → ${analysis.proposedVersion}`)\n )\n lines.push(this.colorize(chalk.gray, `Type: ${analysis.updateType}`))\n\n // Risk level\n const riskColor = this.getRiskColor(analysis.riskLevel)\n lines.push(this.colorize(riskColor, `Risk Level: ${analysis.riskLevel.toUpperCase()}`))\n lines.push('')\n\n // Affected packages\n if (analysis.affectedPackages.length > 0) {\n lines.push(this.colorize(chalk.bold, '📦 Affected Packages:'))\n\n const table = new Table({\n head: this.colorizeHeaders(['Package', 'Path', 'Dependency Type', 'Risk']),\n style: { head: [], border: [] },\n colWidths: [20, 30, 15, 10],\n })\n\n for (const pkg of analysis.affectedPackages) {\n const riskColor = this.getRiskColor(pkg.compatibilityRisk)\n table.push([\n pkg.packageName,\n pkg.packagePath,\n pkg.dependencyType,\n this.colorize(riskColor, pkg.compatibilityRisk),\n ])\n }\n\n lines.push(table.toString())\n lines.push('')\n }\n\n // Security impact\n if (analysis.securityImpact.hasVulnerabilities) {\n lines.push(this.colorize(chalk.bold, '🔒 Security Impact:'))\n\n if (analysis.securityImpact.fixedVulnerabilities > 0) {\n lines.push(\n this.colorize(\n chalk.green,\n ` ✅ Fixes ${analysis.securityImpact.fixedVulnerabilities} vulnerabilities`\n )\n )\n }\n\n if (analysis.securityImpact.newVulnerabilities > 0) {\n lines.push(\n this.colorize(\n chalk.red,\n ` ⚠️ Introduces ${analysis.securityImpact.newVulnerabilities} vulnerabilities`\n )\n )\n }\n\n lines.push('')\n }\n\n // Recommendations\n if (analysis.recommendations.length > 0) {\n lines.push(this.colorize(chalk.bold, '💡 Recommendations:'))\n for (const rec of analysis.recommendations) {\n lines.push(` ${rec}`)\n }\n }\n\n return lines.join('\\n')\n }\n\n /**\n * Format impact analysis minimally\n */\n private formatImpactMinimal(analysis: ImpactAnalysis): string {\n return [\n `${analysis.packageName}: ${analysis.currentVersion} → ${analysis.proposedVersion}`,\n `Risk: ${analysis.riskLevel}`,\n `Affected: ${analysis.affectedPackages.length} packages`,\n ].join('\\n')\n }\n\n /**\n * Format validation report as table\n */\n private formatValidationTable(report: WorkspaceValidationReport): string {\n const lines: string[] = []\n\n // Header\n const statusIcon = report.isValid ? '✅' : '❌'\n const statusColor = report.isValid ? chalk.green : chalk.red\n\n lines.push(this.colorize(chalk.bold, `\\n${statusIcon} Workspace Validation`))\n lines.push(this.colorize(statusColor, `Status: ${report.isValid ? 'VALID' : 'INVALID'}`))\n lines.push('')\n\n // Workspace info\n lines.push(this.colorize(chalk.bold, '📦 Workspace Information:'))\n lines.push(` Path: ${report.workspace.path}`)\n lines.push(` Name: ${report.workspace.name}`)\n lines.push(` Packages: ${report.workspace.packageCount}`)\n lines.push(` Catalogs: ${report.workspace.catalogCount}`)\n lines.push('')\n\n // Errors\n if (report.errors.length > 0) {\n lines.push(this.colorize(chalk.red, '❌ Errors:'))\n for (const error of report.errors) {\n lines.push(` • ${error}`)\n }\n lines.push('')\n }\n\n // Warnings\n if (report.warnings.length > 0) {\n lines.push(this.colorize(chalk.yellow, '⚠️ Warnings:'))\n for (const warning of report.warnings) {\n lines.push(` • ${warning}`)\n }\n lines.push('')\n }\n\n // Recommendations\n if (report.recommendations.length > 0) {\n lines.push(this.colorize(chalk.blue, '💡 Recommendations:'))\n for (const rec of report.recommendations) {\n lines.push(` • ${rec}`)\n }\n }\n\n return lines.join('\\n')\n }\n\n /**\n * Format validation report minimally\n */\n private formatValidationMinimal(report: WorkspaceValidationReport): string {\n const status = report.isValid ? 'VALID' : 'INVALID'\n const errors = report.errors.length\n const warnings = report.warnings.length\n\n return `${status} (${errors} errors, ${warnings} warnings)`\n }\n\n /**\n * Format workspace statistics as table\n */\n private formatStatsTable(stats: WorkspaceStats): string {\n const lines: string[] = []\n\n lines.push(this.colorize(chalk.bold, `\\n📊 Workspace Statistics`))\n lines.push(this.colorize(chalk.gray, `Workspace: ${stats.workspace.name}`))\n lines.push('')\n\n const table = new Table({\n head: this.colorizeHeaders(['Metric', 'Count']),\n style: { head: [], border: [] },\n colWidths: [30, 10],\n })\n\n table.push(['Total Packages', stats.packages.total.toString()])\n table.push(['Packages with Catalog Refs', stats.packages.withCatalogReferences.toString()])\n table.push(['Total Catalogs', stats.catalogs.total.toString()])\n table.push(['Catalog Entries', stats.catalogs.totalEntries.toString()])\n table.push(['Total Dependencies', stats.dependencies.total.toString()])\n table.push(['Catalog References', stats.dependencies.catalogReferences.toString()])\n table.push(['Dependencies', stats.dependencies.byType.dependencies.toString()])\n table.push(['Dev Dependencies', stats.dependencies.byType.devDependencies.toString()])\n table.push(['Peer Dependencies', stats.dependencies.byType.peerDependencies.toString()])\n table.push(['Optional Dependencies', stats.dependencies.byType.optionalDependencies.toString()])\n\n lines.push(table.toString())\n\n return lines.join('\\n')\n }\n\n /**\n * Format workspace statistics minimally\n */\n private formatStatsMinimal(stats: WorkspaceStats): string {\n return [\n `Packages: ${stats.packages.total}`,\n `Catalogs: ${stats.catalogs.total}`,\n `Dependencies: ${stats.dependencies.total}`,\n ].join(', ')\n }\n\n /**\n * Format security report as table\n */\n private formatSecurityTable(report: SecurityReport): string {\n const lines: string[] = []\n\n // Header\n lines.push(this.colorize(chalk.bold, '\\n🔒 Security Report'))\n lines.push(this.colorize(chalk.gray, `Workspace: ${report.metadata.workspacePath}`))\n lines.push(\n this.colorize(chalk.gray, `Scan Date: ${new Date(report.metadata.scanDate).toLocaleString()}`)\n )\n lines.push(this.colorize(chalk.gray, `Tools: ${report.metadata.scanTools.join(', ')}`))\n\n // Summary\n lines.push('')\n lines.push(this.colorize(chalk.bold, '📊 Summary:'))\n\n const summaryTable = new Table({\n head: this.colorizeHeaders(['Severity', 'Count']),\n style: { head: [], border: [] },\n colWidths: [15, 10],\n })\n\n summaryTable.push(['Critical', this.colorize(chalk.red, report.summary.critical.toString())])\n summaryTable.push(['High', this.colorize(chalk.yellow, report.summary.high.toString())])\n summaryTable.push(['Moderate', this.colorize(chalk.blue, report.summary.moderate.toString())])\n summaryTable.push(['Low', this.colorize(chalk.green, report.summary.low.toString())])\n summaryTable.push(['Info', this.colorize(chalk.gray, report.summary.info.toString())])\n summaryTable.push([\n 'Total',\n this.colorize(chalk.bold, report.summary.totalVulnerabilities.toString()),\n ])\n\n lines.push(summaryTable.toString())\n\n // Vulnerabilities\n if (report.vulnerabilities.length > 0) {\n lines.push('')\n lines.push(this.colorize(chalk.bold, '🐛 Vulnerabilities:'))\n\n const vulnTable = new Table({\n head: this.colorizeHeaders(['Package', 'Severity', 'Title', 'Fix Available']),\n style: { head: [], border: [] },\n colWidths: [20, 12, 40, 15],\n })\n\n for (const vuln of report.vulnerabilities) {\n const severityColor = this.getSeverityColor(vuln.severity)\n const fixStatus = vuln.fixAvailable\n ? typeof vuln.fixAvailable === 'string'\n ? vuln.fixAvailable\n : 'Yes'\n : 'No'\n\n vulnTable.push([\n vuln.package,\n this.colorize(severityColor, vuln.severity.toUpperCase()),\n vuln.title.length > 35 ? `${vuln.title.substring(0, 35)}...` : vuln.title,\n fixStatus,\n ])\n }\n\n lines.push(vulnTable.toString())\n }\n\n // Recommendations\n if (report.recommendations.length > 0) {\n lines.push('')\n lines.push(this.colorize(chalk.bold, '💡 Recommendations:'))\n\n for (const rec of report.recommendations) {\n lines.push(` ${rec.package}: ${rec.currentVersion} → ${rec.recommendedVersion}`)\n lines.push(` ${rec.reason} (${rec.impact})`)\n }\n }\n\n return lines.join('\\n')\n }\n\n /**\n * Format security report minimally\n */\n private formatSecurityMinimal(report: SecurityReport): string {\n const vulnerabilities = report.summary.totalVulnerabilities\n if (vulnerabilities === 0) {\n return 'No vulnerabilities found'\n }\n\n return [\n `${vulnerabilities} vulnerabilities found:`,\n ` Critical: ${report.summary.critical}`,\n ` High: ${report.summary.high}`,\n ` Moderate: ${report.summary.moderate}`,\n ` Low: ${report.summary.low}`,\n ].join('\\n')\n }\n\n /**\n * Get color for severity level\n */\n private getSeverityColor(severity: string): typeof chalk {\n switch (severity.toLowerCase()) {\n case 'critical':\n return chalk.red\n case 'high':\n return chalk.yellow\n case 'moderate':\n return chalk.blue\n case 'low':\n return chalk.green\n default:\n return chalk.gray\n }\n }\n\n /**\n * Apply color if color is enabled\n */\n private colorize(colorFn: typeof chalk, text: string): string {\n return this.useColor ? colorFn(text) : text\n }\n\n /**\n * Colorize table headers\n */\n private colorizeHeaders(headers: string[]): string[] {\n return this.useColor ? headers.map((h) => chalk.bold.cyan(h)) : headers\n }\n\n /**\n * Get color for update type\n */\n private getUpdateTypeColor(updateType: string): typeof chalk {\n switch (updateType) {\n case 'major':\n return chalk.red\n case 'minor':\n return chalk.yellow\n case 'patch':\n return chalk.green\n default:\n return chalk.gray\n }\n }\n\n /**\n * Colorize version differences between current and latest\n */\n private colorizeVersionDiff(\n current: string,\n latest: string,\n updateType: string\n ): {\n currentColored: string\n latestColored: string\n } {\n if (!this.useColor) {\n return { currentColored: current, latestColored: latest }\n }\n\n // Parse version numbers to identify different parts\n const parseVersion = (version: string) => {\n // Remove leading ^ or ~ or other prefix characters\n const cleanVersion = version.replace(/^[\\^~>=<]+/, '')\n const parts = cleanVersion.split('.')\n return {\n major: parts[0] || '0',\n minor: parts[1] || '0',\n patch: parts[2] || '0',\n extra: parts.slice(3).join('.'),\n prefix: version.substring(0, version.length - cleanVersion.length),\n }\n }\n\n const currentParts = parseVersion(current)\n const latestParts = parseVersion(latest)\n\n // Determine color based on update type for highlighting differences\n const diffColor = this.getUpdateTypeColor(updateType)\n\n // Build colored version strings by comparing each part\n const colorCurrentPart = (part: string, latestPart: string, isChanged: boolean) => {\n if (isChanged && part !== latestPart) {\n return chalk.dim.white(part) // Dim white for old version part\n }\n return chalk.white(part) // Unchanged parts in white\n }\n\n const colorLatestPart = (part: string, currentPart: string, isChanged: boolean) => {\n if (isChanged && part !== currentPart) {\n return diffColor(part) // Highlight the new version part with update type color\n }\n return chalk.white(part) // Unchanged parts in white\n }\n\n // Check which parts are different\n const majorChanged = currentParts.major !== latestParts.major\n const minorChanged = currentParts.minor !== latestParts.minor\n const patchChanged = currentParts.patch !== latestParts.patch\n const extraChanged = currentParts.extra !== latestParts.extra\n\n // Build colored current version\n let currentColored = currentParts.prefix\n currentColored += colorCurrentPart(currentParts.major, latestParts.major, majorChanged)\n currentColored += '.'\n currentColored += colorCurrentPart(currentParts.minor, latestParts.minor, minorChanged)\n currentColored += '.'\n currentColored += colorCurrentPart(currentParts.patch, latestParts.patch, patchChanged)\n if (currentParts.extra) {\n currentColored += `.${colorCurrentPart(currentParts.extra, latestParts.extra, extraChanged)}`\n }\n\n // Build colored latest version\n let latestColored = latestParts.prefix\n latestColored += colorLatestPart(latestParts.major, currentParts.major, majorChanged)\n latestColored += '.'\n latestColored += colorLatestPart(latestParts.minor, currentParts.minor, minorChanged)\n latestColored += '.'\n latestColored += colorLatestPart(latestParts.patch, currentParts.patch, patchChanged)\n if (latestParts.extra) {\n latestColored += `.${colorLatestPart(latestParts.extra, currentParts.extra, extraChanged)}`\n }\n\n return { currentColored, latestColored }\n }\n\n /**\n * Format AI analysis result\n */\n formatAIAnalysis(aiResult: AnalysisResult, basicAnalysis?: ImpactAnalysis): string {\n switch (this.format) {\n case 'json':\n return JSON.stringify({ aiAnalysis: aiResult, basicAnalysis }, null, 2)\n case 'yaml':\n return YAML.stringify({ aiAnalysis: aiResult, basicAnalysis })\n case 'minimal':\n return this.formatAIAnalysisMinimal(aiResult)\n default:\n return this.formatAIAnalysisTable(aiResult, basicAnalysis)\n }\n }\n\n /**\n * Format AI analysis as table\n */\n private formatAIAnalysisTable(aiResult: AnalysisResult, basicAnalysis?: ImpactAnalysis): string {\n const lines: string[] = []\n\n // Header with provider info\n const providerColor = this.useColor ? chalk.cyan : (s: string) => s\n const headerColor = this.useColor ? chalk.bold.white : (s: string) => s\n const successColor = this.useColor ? chalk.green : (s: string) => s\n const warningColor = this.useColor ? chalk.yellow : (s: string) => s\n const errorColor = this.useColor ? chalk.red : (s: string) => s\n const infoColor = this.useColor ? chalk.blue : (s: string) => s\n const mutedColor = this.useColor ? chalk.gray : (s: string) => s\n\n lines.push('')\n lines.push(headerColor('═══════════════════════════════════════════════════════════════'))\n lines.push(headerColor(' 🤖 AI Analysis Report'))\n lines.push(headerColor('═══════════════════════════════════════════════════════════════'))\n lines.push('')\n\n // Provider and analysis info\n lines.push(`${infoColor('Provider:')} ${providerColor(aiResult.provider)}`)\n lines.push(`${infoColor('Analysis Type:')} ${aiResult.analysisType}`)\n lines.push(`${infoColor('Confidence:')} ${this.formatConfidence(aiResult.confidence)}`)\n lines.push('')\n\n // Summary\n lines.push(headerColor('📋 Summary'))\n lines.push(headerColor('───────────────────────────────────────────────────────────────'))\n lines.push(aiResult.summary)\n lines.push('')\n\n // Recommendations table\n if (aiResult.recommendations.length > 0) {\n lines.push(headerColor('💡 Recommendations'))\n lines.push(headerColor('───────────────────────────────────────────────────────────────'))\n\n const table = new Table({\n head: ['Package', 'Version Change', 'Action', 'Risk', 'Reason'],\n style: { head: this.useColor ? ['cyan'] : [] },\n colWidths: [20, 20, 10, 10, 35],\n wordWrap: true,\n })\n\n for (const rec of aiResult.recommendations) {\n const riskColor = this.getRiskColor(rec.riskLevel)\n const actionColor = this.getActionColor(rec.action)\n\n table.push([\n rec.package,\n `${rec.currentVersion} → ${rec.targetVersion}`,\n actionColor(rec.action),\n riskColor(rec.riskLevel),\n rec.reason,\n ])\n }\n\n lines.push(table.toString())\n lines.push('')\n }\n\n // Breaking changes\n const allBreakingChanges = aiResult.recommendations\n .filter((r) => r.breakingChanges && r.breakingChanges.length > 0)\n .flatMap((r) => r.breakingChanges || [])\n\n if (allBreakingChanges.length > 0) {\n lines.push(errorColor('⚠️ Breaking Changes'))\n lines.push(headerColor('───────────────────────────────────────────────────────────────'))\n for (const change of allBreakingChanges) {\n lines.push(` ${warningColor('•')} ${change}`)\n }\n lines.push('')\n }\n\n // Security fixes\n const allSecurityFixes = aiResult.recommendations\n .filter((r) => r.securityFixes && r.securityFixes.length > 0)\n .flatMap((r) => r.securityFixes || [])\n\n if (allSecurityFixes.length > 0) {\n lines.push(successColor('🔒 Security Fixes'))\n lines.push(headerColor('───────────────────────────────────────────────────────────────'))\n for (const fix of allSecurityFixes) {\n lines.push(` ${successColor('•')} ${fix}`)\n }\n lines.push('')\n }\n\n // Warnings\n if (aiResult.warnings && aiResult.warnings.length > 0) {\n lines.push(warningColor('⚡ Warnings'))\n lines.push(headerColor('───────────────────────────────────────────────────────────────'))\n for (const warning of aiResult.warnings) {\n lines.push(` ${warningColor('•')} ${warning}`)\n }\n lines.push('')\n }\n\n // Details\n if (aiResult.details) {\n lines.push(infoColor('📝 Details'))\n lines.push(headerColor('───────────────────────────────────────────────────────────────'))\n lines.push(aiResult.details)\n lines.push('')\n }\n\n // Basic analysis info (if provided)\n if (basicAnalysis) {\n lines.push(mutedColor('📦 Affected Packages'))\n lines.push(headerColor('───────────────────────────────────────────────────────────────'))\n if (basicAnalysis.affectedPackages.length > 0) {\n for (const pkg of basicAnalysis.affectedPackages.slice(0, 10)) {\n // Handle both string and PackageImpact object types\n const pkgName = typeof pkg === 'string' ? pkg : pkg.packageName\n const pkgType =\n typeof pkg === 'object' && pkg.dependencyType ? ` (${pkg.dependencyType})` : ''\n lines.push(` ${mutedColor('•')} ${pkgName}${mutedColor(pkgType)}`)\n }\n if (basicAnalysis.affectedPackages.length > 10) {\n lines.push(\n ` ${mutedColor(` ... and ${basicAnalysis.affectedPackages.length - 10} more`)}`\n )\n }\n } else {\n lines.push(` ${mutedColor('No packages directly affected')}`)\n }\n lines.push('')\n }\n\n // Footer with metadata\n lines.push(mutedColor('───────────────────────────────────────────────────────────────'))\n const timestamp =\n aiResult.timestamp instanceof Date\n ? aiResult.timestamp.toISOString()\n : String(aiResult.timestamp)\n lines.push(mutedColor(`Generated at: ${timestamp}`))\n if (aiResult.processingTimeMs) {\n lines.push(mutedColor(`Processing time: ${aiResult.processingTimeMs}ms`))\n }\n if (aiResult.tokensUsed) {\n lines.push(mutedColor(`Tokens used: ${aiResult.tokensUsed}`))\n }\n lines.push('')\n\n return lines.join('\\n')\n }\n\n /**\n * Format AI analysis as minimal output\n */\n private formatAIAnalysisMinimal(aiResult: AnalysisResult): string {\n const lines: string[] = []\n\n lines.push(\n `[${aiResult.provider}] ${aiResult.analysisType} (${Math.round(aiResult.confidence * 100)}% confidence)`\n )\n lines.push(aiResult.summary)\n\n for (const rec of aiResult.recommendations) {\n lines.push(\n `${rec.action}: ${rec.package} ${rec.currentVersion} → ${rec.targetVersion} [${rec.riskLevel}]`\n )\n }\n\n return lines.join('\\n')\n }\n\n /**\n * Format confidence score with color\n */\n private formatConfidence(confidence: number): string {\n const percentage = Math.round(confidence * 100)\n const bar =\n '█'.repeat(Math.floor(percentage / 10)) + '░'.repeat(10 - Math.floor(percentage / 10))\n\n if (!this.useColor) {\n return `${bar} ${percentage}%`\n }\n\n if (confidence >= 0.8) {\n return chalk.green(`${bar} ${percentage}%`)\n } else if (confidence >= 0.5) {\n return chalk.yellow(`${bar} ${percentage}%`)\n } else {\n return chalk.red(`${bar} ${percentage}%`)\n }\n }\n\n /**\n * Get color for risk level\n */\n private getRiskColor(riskLevel: string): typeof chalk {\n if (!this.useColor) return chalk\n\n switch (riskLevel) {\n case 'critical':\n return chalk.red.bold\n case 'high':\n return chalk.red\n case 'medium':\n return chalk.yellow\n case 'low':\n return chalk.green\n default:\n return chalk.gray\n }\n }\n\n /**\n * Get color for action\n */\n private getActionColor(action: string): typeof chalk {\n if (!this.useColor) return chalk\n\n switch (action) {\n case 'update':\n return chalk.green\n case 'wait':\n return chalk.yellow\n case 'skip':\n return chalk.red\n case 'review':\n return chalk.cyan\n default:\n return chalk.white\n }\n }\n}\n","/**\n * Color Theme System\n *\n * Provides consistent color schemes and styling across the CLI\n */\n\nimport chalk from 'chalk'\n\nexport interface ColorTheme {\n // Brand colors\n primary: (text: string) => string\n secondary: (text: string) => string\n accent: (text: string) => string\n\n // Semantic colors\n success: (text: string) => string\n warning: (text: string) => string\n error: (text: string) => string\n info: (text: string) => string\n\n // UI colors\n text: (text: string) => string\n muted: (text: string) => string\n border: (text: string) => string\n background: (text: string) => string\n\n // Status colors\n pending: (text: string) => string\n processing: (text: string) => string\n completed: (text: string) => string\n\n // Version colors\n major: (text: string) => string\n minor: (text: string) => string\n patch: (text: string) => string\n prerelease: (text: string) => string\n\n // Risk levels\n riskHigh: (text: string) => string\n riskMedium: (text: string) => string\n riskLow: (text: string) => string\n}\n\nexport class ThemeManager {\n private static currentTheme: ColorTheme\n\n static themes = {\n default: {\n primary: (text: string) => chalk.hex('#0ea5e9')(text),\n secondary: (text: string) => chalk.hex('#8b5cf6')(text),\n accent: (text: string) => chalk.hex('#f59e0b')(text),\n\n success: (text: string) => chalk.green(text),\n warning: (text: string) => chalk.yellow(text),\n error: (text: string) => chalk.red(text),\n info: (text: string) => chalk.blue(text),\n\n text: (text: string) => chalk.white(text),\n muted: (text: string) => chalk.gray(text),\n border: (text: string) => chalk.dim(text),\n background: (text: string) => chalk.bgBlack(text),\n\n pending: (text: string) => chalk.cyan(text),\n processing: (text: string) => chalk.blue(text),\n completed: (text: string) => chalk.green(text),\n\n major: (text: string) => chalk.red(text),\n minor: (text: string) => chalk.yellow(text),\n patch: (text: string) => chalk.green(text),\n prerelease: (text: string) => chalk.magenta(text),\n\n riskHigh: (text: string) => chalk.red(text),\n riskMedium: (text: string) => chalk.yellow(text),\n riskLow: (text: string) => chalk.green(text),\n },\n\n modern: {\n primary: (text: string) => chalk.hex('#06b6d4')(text),\n secondary: (text: string) => chalk.hex('#ec4899')(text),\n accent: (text: string) => chalk.hex('#10b981')(text),\n\n success: (text: string) => chalk.hex('#10b981')(text),\n warning: (text: string) => chalk.hex('#f59e0b')(text),\n error: (text: string) => chalk.hex('#ef4444')(text),\n info: (text: string) => chalk.hex('#06b6d4')(text),\n\n text: (text: string) => chalk.hex('#e5e7eb')(text),\n muted: (text: string) => chalk.hex('#6b7280')(text),\n border: (text: string) => chalk.hex('#374151')(text),\n background: (text: string) => chalk.hex('#111827')(text),\n\n pending: (text: string) => chalk.hex('#06b6d4')(text),\n processing: (text: string) => chalk.hex('#3b82f6')(text),\n completed: (text: string) => chalk.hex('#10b981')(text),\n\n major: (text: string) => chalk.hex('#ef4444')(text),\n minor: (text: string) => chalk.hex('#f59e0b')(text),\n patch: (text: string) => chalk.hex('#10b981')(text),\n prerelease: (text: string) => chalk.hex('#8b5cf6')(text),\n\n riskHigh: (text: string) => chalk.hex('#ef4444')(text),\n riskMedium: (text: string) => chalk.hex('#f59e0b')(text),\n riskLow: (text: string) => chalk.hex('#10b981')(text),\n },\n\n minimal: {\n primary: (text: string) => chalk.white(text),\n secondary: (text: string) => chalk.gray(text),\n accent: (text: string) => chalk.white(text),\n\n success: (text: string) => chalk.green(text),\n warning: (text: string) => chalk.yellow(text),\n error: (text: string) => chalk.red(text),\n info: (text: string) => chalk.blue(text),\n\n text: (text: string) => chalk.white(text),\n muted: (text: string) => chalk.gray(text),\n border: (text: string) => chalk.gray(text),\n background: (text: string) => chalk.white(text),\n\n pending: (text: string) => chalk.blue(text),\n processing: (text: string) => chalk.blue(text),\n completed: (text: string) => chalk.green(text),\n\n major: (text: string) => chalk.red(text),\n minor: (text: string) => chalk.yellow(text),\n patch: (text: string) => chalk.green(text),\n prerelease: (text: string) => chalk.magenta(text),\n\n riskHigh: (text: string) => chalk.red(text),\n riskMedium: (text: string) => chalk.yellow(text),\n riskLow: (text: string) => chalk.green(text),\n },\n\n neon: {\n primary: (text: string) => chalk.hex('#00ffff')(text),\n secondary: (text: string) => chalk.hex('#ff00ff')(text),\n accent: (text: string) => chalk.hex('#ffff00')(text),\n\n success: (text: string) => chalk.hex('#00ff00')(text),\n warning: (text: string) => chalk.hex('#ffff00')(text),\n error: (text: string) => chalk.hex('#ff0000')(text),\n info: (text: string) => chalk.hex('#00ffff')(text),\n\n text: (text: string) => chalk.hex('#ffffff')(text),\n muted: (text: string) => chalk.hex('#808080')(text),\n border: (text: string) => chalk.hex('#404040')(text),\n background: (text: string) => chalk.hex('#000000')(text),\n\n pending: (text: string) => chalk.hex('#00ffff')(text),\n processing: (text: string) => chalk.hex('#0080ff')(text),\n completed: (text: string) => chalk.hex('#00ff00')(text),\n\n major: (text: string) => chalk.hex('#ff0000')(text),\n minor: (text: string) => chalk.hex('#ffff00')(text),\n patch: (text: string) => chalk.hex('#00ff00')(text),\n prerelease: (text: string) => chalk.hex('#ff00ff')(text),\n\n riskHigh: (text: string) => chalk.hex('#ff0000')(text),\n riskMedium: (text: string) => chalk.hex('#ffff00')(text),\n riskLow: (text: string) => chalk.hex('#00ff00')(text),\n },\n }\n\n static setTheme(themeName: keyof typeof ThemeManager.themes): void {\n ThemeManager.currentTheme = ThemeManager.themes[themeName]\n }\n\n static getTheme(): ColorTheme {\n return ThemeManager.currentTheme || ThemeManager.themes.default\n }\n\n static listThemes(): string[] {\n return Object.keys(ThemeManager.themes)\n }\n}\n\n/**\n * Styled text utilities\n */\nexport class StyledText {\n private static theme = ThemeManager.getTheme()\n\n static updateTheme(): void {\n StyledText.theme = ThemeManager.getTheme()\n }\n\n // Brand styles\n static brand(text: string): string {\n return StyledText.theme.primary(text)\n }\n\n static secondary(text: string): string {\n return StyledText.theme.secondary(text)\n }\n\n static accent(text: string): string {\n return StyledText.theme.accent(text)\n }\n\n // Semantic styles\n static success(text: string): string {\n return StyledText.theme.success(text)\n }\n\n static warning(text: string): string {\n return StyledText.theme.warning(text)\n }\n\n static error(text: string): string {\n return StyledText.theme.error(text)\n }\n\n static info(text: string): string {\n return StyledText.theme.info(text)\n }\n\n // UI styles\n static text(text: string): string {\n return StyledText.theme.text(text)\n }\n\n static muted(text: string): string {\n return StyledText.theme.muted(text)\n }\n\n static border(text: string): string {\n return StyledText.theme.border(text)\n }\n\n // Status styles\n static pending(text: string): string {\n return StyledText.theme.pending(text)\n }\n\n static processing(text: string): string {\n return StyledText.theme.processing(text)\n }\n\n static completed(text: string): string {\n return StyledText.theme.completed(text)\n }\n\n // Version styles\n static versionMajor(text: string): string {\n return StyledText.theme.major(text)\n }\n\n static versionMinor(text: string): string {\n return StyledText.theme.minor(text)\n }\n\n static versionPatch(text: string): string {\n return StyledText.theme.patch(text)\n }\n\n static versionPrerelease(text: string): string {\n return StyledText.theme.prerelease(text)\n }\n\n // Risk styles\n static riskHigh(text: string): string {\n return StyledText.theme.riskHigh(text)\n }\n\n static riskMedium(text: string): string {\n return StyledText.theme.riskMedium(text)\n }\n\n static riskLow(text: string): string {\n return StyledText.theme.riskLow(text)\n }\n\n // Icons\n static icon(icon: string, text?: string): string {\n return text ? `${icon} ${text}` : icon\n }\n\n static iconSuccess(text?: string): string {\n return StyledText.icon('✅', text)\n }\n\n static iconWarning(text?: string): string {\n return StyledText.icon('⚠️', text)\n }\n\n static iconError(text?: string): string {\n return StyledText.icon('❌', text)\n }\n\n static iconInfo(text?: string): string {\n return StyledText.icon('ℹ️', text)\n }\n\n static iconPackage(text?: string): string {\n return StyledText.icon('📦', text)\n }\n\n static iconCatalog(text?: string): string {\n return StyledText.icon('📋', text)\n }\n\n static iconUpdate(text?: string): string {\n return StyledText.icon('🔄', text)\n }\n\n static iconSecurity(text?: string): string {\n return StyledText.icon('🔒', text)\n }\n\n static iconAnalysis(text?: string): string {\n return StyledText.icon('🔍', text)\n }\n\n static iconCheck(text?: string): string {\n return StyledText.icon('✅', text)\n }\n\n static iconProgress(text?: string): string {\n return StyledText.icon('⏳', text)\n }\n\n static iconComplete(text?: string): string {\n return StyledText.icon('🎉', text)\n }\n}\n\n/**\n * Table styling utilities\n */\nexport class TableStyles {\n static createHeaderStyle(color: any) {\n return (text: string) => color.bold(text)\n }\n\n static createBorderStyle(color: any) {\n return (text: string) => color.dim(text)\n }\n\n static createCellStyle(color: any) {\n return (text: string) => color(text)\n }\n}\n\n/**\n * Theme configuration interface\n */\nexport interface ThemeConfig {\n name: string\n colors: Partial<ColorTheme>\n icons: Record<string, string>\n styles: Record<string, any>\n}\n\n/**\n * Theme presets for different use cases\n */\nexport const themePresets = {\n development: {\n name: 'development',\n description: 'Bright colors for development environments',\n theme: 'modern',\n },\n production: {\n name: 'production',\n description: 'Subtle colors for production environments',\n theme: 'minimal',\n },\n presentation: {\n name: 'presentation',\n description: 'High contrast colors for presentations',\n theme: 'neon',\n },\n default: {\n name: 'default',\n description: 'Balanced colors for general use',\n theme: 'default',\n },\n}\n","/**\n * Init Command\n *\n * CLI command to initialize PCU configuration in a workspace.\n * Creates a basic .pcurc.json configuration file with sensible defaults.\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport type { PackageFilterConfig } from '@pcu/utils'\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js'\n\nexport interface InitCommandOptions {\n workspace?: string\n force?: boolean\n verbose?: boolean\n color?: boolean\n createWorkspace?: boolean\n full?: boolean\n}\n\nexport class InitCommand {\n /**\n * Execute the init command\n */\n async execute(options: InitCommandOptions = {}): Promise<void> {\n try {\n // Initialize theme\n ThemeManager.setTheme('default')\n\n const workspacePath = options.workspace || process.cwd()\n const configPath = join(workspacePath, '.pcurc.json')\n const packageJsonPath = join(workspacePath, 'package.json')\n const workspaceYamlPath = join(workspacePath, 'pnpm-workspace.yaml')\n\n if (options.verbose) {\n console.log(StyledText.iconInfo('Initializing PCU configuration'))\n console.log(StyledText.muted(`Workspace: ${workspacePath}`))\n console.log(StyledText.muted(`Config file: ${configPath}`))\n console.log('')\n }\n\n // Check if this is a pnpm workspace\n const hasPackageJson = existsSync(packageJsonPath)\n const hasWorkspaceYaml = existsSync(workspaceYamlPath)\n const isWorkspace = hasPackageJson && hasWorkspaceYaml\n\n if (!isWorkspace && options.createWorkspace !== false) {\n if (options.verbose) {\n console.log(StyledText.iconWarning('PNPM workspace structure not detected'))\n if (!hasPackageJson) {\n console.log(StyledText.muted('Missing: package.json'))\n }\n if (!hasWorkspaceYaml) {\n console.log(StyledText.muted('Missing: pnpm-workspace.yaml'))\n }\n console.log('')\n }\n\n // Create workspace structure\n if (options.verbose) {\n console.log(StyledText.iconInfo('Creating PNPM workspace structure...'))\n }\n\n await this.createWorkspaceStructure(\n workspacePath,\n hasPackageJson,\n hasWorkspaceYaml,\n options\n )\n\n if (options.verbose) {\n console.log(StyledText.iconSuccess('PNPM workspace structure created'))\n console.log('')\n }\n }\n\n // Check if config file already exists\n if (existsSync(configPath) && !options.force) {\n console.log(StyledText.iconWarning('Configuration file already exists!'))\n console.log(StyledText.muted(`Found: ${configPath}`))\n console.log(StyledText.muted('Use --force to overwrite existing configuration'))\n process.exit(1)\n }\n\n // Create directory if it doesn't exist\n const configDir = dirname(configPath)\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true })\n }\n\n // Generate basic configuration\n const basicConfig = this.generateBasicConfig(options.full)\n\n // Write configuration file\n writeFileSync(configPath, JSON.stringify(basicConfig, null, 2), 'utf-8')\n\n // Success message\n console.log(StyledText.iconSuccess('PCU configuration initialized successfully!'))\n console.log(StyledText.muted(`Created: ${configPath}`))\n console.log('')\n\n // Show next steps\n this.showNextSteps(configPath)\n\n process.exit(0)\n } catch (error) {\n console.error(StyledText.iconError('Error initializing configuration:'))\n console.error(StyledText.error(String(error)))\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'))\n console.error(StyledText.muted(error.stack || 'No stack trace available'))\n }\n\n process.exit(1)\n }\n }\n\n /**\n * Create PNPM workspace structure\n */\n private async createWorkspaceStructure(\n workspacePath: string,\n hasPackageJson: boolean,\n hasWorkspaceYaml: boolean,\n options: InitCommandOptions\n ): Promise<void> {\n // Create package.json if it doesn't exist\n if (!hasPackageJson) {\n const packageJsonPath = join(workspacePath, 'package.json')\n const packageJson = this.generateWorkspacePackageJson()\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8')\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: package.json'))\n }\n }\n\n // Create pnpm-workspace.yaml if it doesn't exist\n if (!hasWorkspaceYaml) {\n const workspaceYamlPath = join(workspacePath, 'pnpm-workspace.yaml')\n const workspaceYaml = this.generateWorkspaceYaml()\n writeFileSync(workspaceYamlPath, workspaceYaml, 'utf-8')\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: pnpm-workspace.yaml'))\n }\n }\n\n // Create basic directories structure\n const packagesDir = join(workspacePath, 'packages')\n if (!existsSync(packagesDir)) {\n mkdirSync(packagesDir, { recursive: true })\n\n if (options.verbose) {\n console.log(StyledText.muted('Created: packages/ directory'))\n }\n }\n }\n\n /**\n * Generate workspace package.json\n */\n private generateWorkspacePackageJson(): any {\n return {\n name: 'my-workspace',\n version: '1.0.0',\n private: true,\n description: 'PNPM workspace with catalog dependency management',\n scripts: {\n 'check-updates': 'pcu check',\n 'update-deps': 'pcu update --interactive',\n 'security-audit': 'pcu security',\n },\n devDependencies: {\n 'pnpm-catalog-updates': 'latest',\n },\n }\n }\n\n /**\n * Generate pnpm-workspace.yaml\n */\n private generateWorkspaceYaml(): string {\n return `# PNPM Workspace Configuration\n# Learn more: https://pnpm.io/pnpm-workspace_yaml\n\npackages:\n # Include all packages in packages directory\n - 'packages/*'\n \n # Include apps directory if you have applications\n # - 'apps/*'\n \n # Include tools directory if you have development tools\n # - 'tools/*'\n\n# Catalog Configuration\n# Centrally manage dependency versions across workspace packages\n# Learn more: https://pnpm.io/catalogs\ncatalogs:\n # Default catalog for common dependencies\n default:\n # React ecosystem\n # react: ^18.2.0\n # react-dom: ^18.2.0\n # '@types/react': ^18.2.0\n # '@types/react-dom': ^18.2.0\n \n # TypeScript and Node.js\n # typescript: ^5.0.0\n # '@types/node': ^20.0.0\n \n # Development tools\n # eslint: ^8.0.0\n # prettier: ^3.0.0\n # vitest: ^1.0.0\n`\n }\n\n /**\n * Generate basic configuration with sensible defaults\n */\n private generateBasicConfig(full?: boolean): PackageFilterConfig {\n if (full) {\n return this.generateFullConfig()\n }\n\n // Minimal configuration\n return {\n defaults: {\n target: 'latest',\n createBackup: true,\n format: 'table',\n },\n exclude: [],\n include: [],\n }\n }\n\n /**\n * Generate full configuration with all options\n */\n private generateFullConfig(): PackageFilterConfig {\n return {\n defaults: {\n target: 'latest',\n includePrerelease: false,\n interactive: false,\n dryRun: false,\n createBackup: true,\n format: 'table',\n },\n packageRules: [\n {\n patterns: ['react', 'react-dom'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: true,\n groupUpdate: true,\n relatedPackages: ['@types/react', '@types/react-dom'],\n },\n {\n patterns: ['@types/*'],\n target: 'latest',\n autoUpdate: true,\n requireConfirmation: false,\n groupUpdate: false,\n },\n {\n patterns: ['eslint*', 'prettier', '@typescript-eslint/*'],\n target: 'minor',\n autoUpdate: false,\n requireConfirmation: false,\n groupUpdate: true,\n },\n ],\n security: {\n autoFixVulnerabilities: true,\n allowMajorForSecurity: true,\n notifyOnSecurityUpdate: false,\n },\n advanced: {\n concurrency: 5,\n timeout: 30000,\n retries: 3,\n cacheValidityMinutes: 60,\n checkForUpdates: true,\n },\n monorepo: {\n syncVersions: [],\n catalogPriority: ['default'],\n },\n exclude: [],\n include: [],\n }\n }\n\n /**\n * Show next steps to the user\n */\n private showNextSteps(configPath: string): void {\n const lines: string[] = []\n\n lines.push(StyledText.iconInfo('Next steps:'))\n lines.push('')\n lines.push(StyledText.muted('1. Review and customize the configuration:'))\n lines.push(StyledText.muted(` ${configPath}`))\n lines.push('')\n lines.push(StyledText.muted('2. Add packages to your workspace:'))\n lines.push(StyledText.muted(' mkdir packages/my-app && cd packages/my-app'))\n lines.push(StyledText.muted(' pnpm init'))\n lines.push('')\n lines.push(StyledText.muted('3. Install dependencies and check for updates:'))\n lines.push(StyledText.muted(' pnpm install'))\n lines.push(StyledText.muted(' pcu check'))\n lines.push('')\n lines.push(StyledText.muted('4. Update dependencies interactively:'))\n lines.push(StyledText.muted(' pcu update --interactive'))\n lines.push('')\n lines.push(StyledText.muted('5. Learn more about PNPM workspace and PCU:'))\n lines.push(StyledText.muted(' https://pnpm.io/workspaces'))\n lines.push(\n StyledText.muted(' https://github.com/your-repo/pnpm-catalog-updates#configuration')\n )\n\n console.log(lines.join('\\n'))\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: InitCommandOptions): string[] {\n const errors: string[] = []\n\n // Validate workspace path exists if provided\n if (options.workspace && !existsSync(options.workspace)) {\n errors.push(`Workspace directory does not exist: ${options.workspace}`)\n }\n\n return errors\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nInitialize PCU configuration and PNPM workspace\n\nUsage:\n pcu init [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --force Overwrite existing configuration file\n --full Generate full configuration with all options\n --create-workspace Create PNPM workspace structure if missing (default: true)\n --no-create-workspace Skip creating PNPM workspace structure\n --verbose Show detailed information\n --no-color Disable colored output\n\nDescription:\n Creates a complete PNPM workspace environment with:\n - Basic .pcurc.json configuration file with sensible defaults\n - package.json for workspace root (if missing)\n - pnpm-workspace.yaml configuration (if missing)\n - packages/ directory structure (if missing)\n \n By default, creates a minimal configuration. Use --full to generate\n a complete configuration with package rules for React, TypeScript,\n ESLint, and other common dependencies with security settings.\n\nExamples:\n pcu init # Initialize with minimal configuration\n pcu init --full # Initialize with full configuration\n pcu init --workspace ./my-project # Initialize in specific directory\n pcu init --force # Overwrite existing configuration\n pcu init --no-create-workspace # Only create .pcurc.json configuration\n\nFiles Created:\n .pcurc.json PCU configuration (minimal by default, full with --full)\n package.json Workspace root package.json (if missing)\n pnpm-workspace.yaml PNPM workspace configuration (if missing)\n packages/ Directory for workspace packages (if missing)\n\nExit Codes:\n 0 Configuration initialized successfully\n 1 Configuration already exists (use --force to overwrite)\n 2 Error occurred\n `\n }\n}\n","/**\n * Enhanced Progress Bar\n *\n * Provides beautiful progress indicators for CLI operations\n * with multiple styles and themes.\n */\n\nimport chalk from 'chalk'\n\nexport interface ProgressBarOptions {\n text?: string\n total?: number\n style?: 'default' | 'gradient' | 'fancy' | 'minimal' | 'rainbow' | 'neon'\n showSpeed?: boolean\n}\n\nexport class ProgressBar {\n private percentageBar: PercentageProgressBar | null = null\n private current = 0\n private total = 0\n private text = ''\n private startTime: number = 0\n private style: string\n private showSpeed: boolean\n\n constructor(options: ProgressBarOptions = {}) {\n this.text = options.text || 'Processing...'\n this.total = options.total || 0\n this.style = options.style || 'default'\n this.showSpeed = options.showSpeed ?? true\n }\n\n /**\n * Start the progress bar\n */\n start(text?: string): void {\n this.text = text || this.text\n this.startTime = Date.now()\n\n // 在开始新进度条前,彻底清理可能的残留内容\n this.clearPreviousOutput()\n\n // 强制使用percentageBar,即使没有total也要创建\n // 这样可以避免spinner导致的冲突问题\n const effectiveTotal = this.total > 0 ? this.total : 1 // 如果没有total,设为1避免除零错误\n\n this.percentageBar = new PercentageProgressBar(40, {\n style: this.style,\n showStats: this.showSpeed,\n multiLine: true, // 使用多行模式减少闪烁\n })\n this.percentageBar.start(effectiveTotal, this.text)\n }\n\n /**\n * Update progress with text\n */\n update(text: string, current?: number, total?: number): void {\n this.text = text\n if (current !== undefined) this.current = current\n if (total !== undefined) this.total = total\n\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar.update(this.current, text)\n }\n }\n\n /**\n * Increment progress\n */\n increment(amount = 1, text?: string): void {\n this.current += amount\n if (text) this.text = text\n\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar.update(this.current, text)\n }\n }\n\n /**\n * Mark as succeeded\n */\n succeed(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const successText = text || this.getCompletionText()\n this.percentageBar.complete(successText)\n console.log(this.getSuccessMessage(successText))\n this.percentageBar = null\n }\n }\n\n /**\n * Mark as failed\n */\n fail(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const failText = text || this.getFailureText()\n console.log(this.getFailureMessage(failText))\n this.percentageBar = null\n }\n }\n\n /**\n * Get styled success message\n */\n private getSuccessMessage(text: string): string {\n const elapsed = this.getElapsedTime()\n switch (this.style) {\n case 'gradient':\n return `${chalk.magenta.bold('✨')} ${chalk.green(text)} ${chalk.gray(elapsed)}`\n case 'fancy':\n return `${chalk.cyan('🎉')} ${chalk.green.bold(text)} ${chalk.cyan('🎉')} ${chalk.gray(elapsed)}`\n case 'minimal':\n return chalk.green(text)\n case 'rainbow':\n return `${chalk.magenta('🌈')} ${chalk.green(text)} ${chalk.gray(elapsed)}`\n case 'neon':\n return `${chalk.green.bold('⚡ SUCCESS')} ${chalk.green(text)} ${chalk.gray(elapsed)}`\n default:\n return `${chalk.green('✅')} ${chalk.green(text)} ${chalk.gray(elapsed)}`\n }\n }\n\n /**\n * Get styled failure message\n */\n private getFailureMessage(text: string): string {\n const elapsed = this.getElapsedTime()\n switch (this.style) {\n case 'gradient':\n return `${chalk.red.bold('💥')} ${chalk.red(text)} ${chalk.gray(elapsed)}`\n case 'fancy':\n return `${chalk.red('💔')} ${chalk.red.bold(text)} ${chalk.red('💔')} ${chalk.gray(elapsed)}`\n case 'minimal':\n return chalk.red(text)\n case 'rainbow':\n return `${chalk.red('⚠️')} ${chalk.red(text)} ${chalk.gray(elapsed)}`\n case 'neon':\n return `${chalk.red.bold('⚡ ERROR')} ${chalk.red(text)} ${chalk.gray(elapsed)}`\n default:\n return `${chalk.red('❌')} ${chalk.red(text)} ${chalk.gray(elapsed)}`\n }\n }\n\n /**\n * Get completion text with stats\n */\n private getCompletionText(): string {\n const elapsed = this.getElapsedTime()\n const speed = this.getAverageSpeed()\n return `${this.text} completed ${speed} ${elapsed}`\n }\n\n /**\n * Get failure text\n */\n private getFailureText(): string {\n return `${this.text} failed`\n }\n\n /**\n * Get elapsed time formatted\n */\n private getElapsedTime(): string {\n const elapsed = Date.now() - this.startTime\n if (elapsed < 1000) return `(${elapsed}ms)`\n if (elapsed < 60000) return `(${(elapsed / 1000).toFixed(1)}s)`\n return `(${Math.floor(elapsed / 60000)}m ${Math.floor((elapsed % 60000) / 1000)}s)`\n }\n\n /**\n * Get average processing speed\n */\n private getAverageSpeed(): string {\n const elapsed = Date.now() - this.startTime\n if (elapsed === 0 || this.current === 0) return ''\n const speed = Math.round((this.current / elapsed) * 1000)\n return speed > 0 ? `(${speed}/s)` : ''\n }\n\n /**\n * Mark as warning\n */\n warn(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const warnText = text || this.text\n console.log(this.getWarningMessage(warnText))\n this.percentageBar = null\n }\n }\n\n /**\n * Mark as info\n */\n info(text?: string): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n const infoText = text || this.text\n console.log(this.getInfoMessage(infoText))\n this.percentageBar = null\n }\n }\n\n /**\n * Get styled warning message\n */\n private getWarningMessage(text: string): string {\n const elapsed = this.getElapsedTime()\n switch (this.style) {\n case 'gradient':\n return `${chalk.yellow.bold('⚡')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`\n case 'fancy':\n return `${chalk.yellow('⚠️')} ${chalk.yellow.bold(text)} ${chalk.yellow('⚠️')} ${chalk.gray(elapsed)}`\n case 'minimal':\n return chalk.yellow(text)\n case 'rainbow':\n return `${chalk.yellow('⚠️')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`\n case 'neon':\n return `${chalk.yellow.bold('⚡ WARNING')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`\n default:\n return `${chalk.yellow('⚠️')} ${chalk.yellow(text)} ${chalk.gray(elapsed)}`\n }\n }\n\n /**\n * Get styled info message\n */\n private getInfoMessage(text: string): string {\n const elapsed = this.getElapsedTime()\n switch (this.style) {\n case 'gradient':\n return `${chalk.blue.bold('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`\n case 'fancy':\n return `${chalk.blue('💡')} ${chalk.blue.bold(text)} ${chalk.blue('💡')} ${chalk.gray(elapsed)}`\n case 'minimal':\n return chalk.blue(text)\n case 'rainbow':\n return `${chalk.blue('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`\n case 'neon':\n return `${chalk.blue.bold('⚡ INFO')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`\n default:\n return `${chalk.blue('ℹ️')} ${chalk.blue(text)} ${chalk.gray(elapsed)}`\n }\n }\n\n /**\n * Stop the progress bar\n */\n stop(): void {\n // 只使用percentageBar,不使用spinner\n if (this.percentageBar) {\n this.percentageBar = null\n }\n }\n\n /**\n * Clear previous output to prevent residual progress bars\n */\n private clearPreviousOutput(): void {\n // 清理可能的残留进度条显示(最多清理5行,应该足够了)\n for (let i = 0; i < 5; i++) {\n process.stdout.write('\\x1b[1A\\r\\x1b[K') // 上移一行并清除\n }\n // 确保光标在正确位置\n process.stdout.write('\\r')\n }\n\n /**\n * Create a multi-step progress indicator\n */\n static createMultiStep(steps: string[]): MultiStepProgress {\n return new MultiStepProgress(steps)\n }\n\n /**\n * Create a beautiful gradient progress bar\n */\n static createGradient(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'gradient',\n showSpeed: true,\n ...options,\n })\n }\n\n /**\n * Create a fancy progress bar with decorations\n */\n static createFancy(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'fancy',\n showSpeed: true,\n ...options,\n })\n }\n\n /**\n * Create a minimal clean progress bar\n */\n static createMinimal(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'minimal',\n showSpeed: false,\n ...options,\n })\n }\n\n /**\n * Create a rainbow themed progress bar\n */\n static createRainbow(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'rainbow',\n showSpeed: true,\n ...options,\n })\n }\n\n /**\n * Create a neon style progress bar\n */\n static createNeon(options?: Partial<ProgressBarOptions>): ProgressBar {\n return new ProgressBar({\n style: 'neon',\n showSpeed: true,\n ...options,\n })\n }\n}\n\n/**\n * Multi-step progress indicator\n */\nexport class MultiStepProgress {\n private currentStep = 0\n private steps: string[] = []\n\n constructor(steps: string[]) {\n this.steps = steps\n }\n\n start(): void {\n console.log(chalk.bold('\\n📋 Progress Steps:\\n'))\n this.renderSteps()\n }\n\n next(text?: string): void {\n if (this.currentStep < this.steps.length) {\n const stepText = text || this.steps[this.currentStep]\n console.log(` ${chalk.green('✓')} ${stepText}`)\n this.currentStep++\n\n if (this.currentStep < this.steps.length) {\n console.log(` ${chalk.cyan('→')} ${this.steps[this.currentStep]}`)\n }\n }\n }\n\n complete(): void {\n console.log(chalk.green('\\n🎉 All steps completed!\\n'))\n }\n\n private renderSteps(): void {\n this.steps.forEach((step, index) => {\n const prefix = index === 0 ? chalk.cyan('→') : ' '\n const style = index < this.currentStep ? chalk.green : chalk.gray\n console.log(` ${prefix} ${style(step)}`)\n })\n console.log('')\n }\n}\n\n/**\n * Progress bar with percentage and beautiful visual effects\n */\nexport class PercentageProgressBar {\n private current = 0\n private total = 0\n private text = ''\n private lastRender = ''\n private startTime = 0\n private style: string\n private useMultiLine = true\n private isFirstRender = true\n\n constructor(\n private readonly width = 40,\n private readonly options: { style?: string; showStats?: boolean; multiLine?: boolean } = {}\n ) {\n this.style = options.style || 'gradient'\n this.useMultiLine = options.multiLine ?? true // 默认使用多行模式来减少闪烁\n }\n\n start(total: number, text: string): void {\n this.total = total\n this.current = 0\n this.text = text\n this.startTime = Date.now()\n this.isFirstRender = true // 重置首次渲染标记\n\n // 清理可能的残留输出\n this.clearPreviousLines()\n\n this.render()\n }\n\n /**\n * Clear any previous output lines to prevent conflicts\n */\n private clearPreviousLines(): void {\n // 更强力的清理:清理多行可能的残留内容\n for (let i = 0; i < 6; i++) {\n process.stdout.write('\\x1b[1A\\r\\x1b[2K') // 上移一行并完全清除该行\n }\n // 回到起始位置\n process.stdout.write('\\r')\n }\n\n update(current: number, text?: string): void {\n this.current = current\n if (text) this.text = text\n this.render()\n }\n\n increment(amount = 1, text?: string): void {\n this.current += amount\n if (text) this.text = text\n this.render()\n }\n\n complete(text?: string): void {\n this.current = this.total\n if (text) this.text = text\n this.render()\n console.log('') // New line after completion\n }\n\n private render(): void {\n const percentage = Math.round((this.current / this.total) * 100)\n const filledWidth = Math.round((this.current / this.total) * this.width)\n const emptyWidth = this.width - filledWidth\n\n if (this.useMultiLine) {\n this.renderMultiLine(percentage, filledWidth, emptyWidth)\n } else {\n this.renderSingleLine(percentage, filledWidth, emptyWidth)\n }\n }\n\n private renderMultiLine(percentage: number, filledWidth: number, emptyWidth: number): void {\n const currentText = `${this.getStyledPrefix()} ${this.text}`\n\n // 构建进度条\n let bar: string\n switch (this.style) {\n case 'gradient':\n bar = this.renderGradientBar(filledWidth, emptyWidth)\n break\n case 'fancy':\n bar = this.renderFancyBar(filledWidth, emptyWidth)\n break\n case 'minimal':\n bar = this.renderMinimalBar(filledWidth, emptyWidth)\n break\n case 'blocks':\n bar = this.renderBlockBar(filledWidth, emptyWidth)\n break\n default:\n bar = this.renderDefaultBar(filledWidth, emptyWidth)\n }\n\n let progressLine = `(${this.current}/${this.total}) [${bar}] ${this.getStyledPercentage(percentage)}`\n\n // Add stats if enabled\n if (this.options.showStats && this.startTime > 0) {\n const elapsed = Date.now() - this.startTime\n const speed = elapsed > 0 ? Math.round((this.current / elapsed) * 1000) : 0\n if (speed > 0) {\n progressLine += ` ${chalk.gray(`${speed}/s`)}`\n }\n }\n\n if (this.isFirstRender) {\n // 第一次渲染:输出两行\n console.log(currentText)\n console.log(progressLine)\n this.isFirstRender = false\n } else {\n // 后续更新:回到两行前的位置,分别更新这两行\n // 光标上移两行,清除文字行,输出新文字行\n process.stdout.write(`\\x1b[2A\\r\\x1b[2K${currentText}\\n`)\n // 清除进度条行,输出新进度条行\n process.stdout.write(`\\r\\x1b[2K${progressLine}`)\n }\n\n this.lastRender = progressLine\n\n if (this.current >= this.total) {\n process.stdout.write('\\n')\n }\n }\n\n private renderSingleLine(percentage: number, filledWidth: number, emptyWidth: number): void {\n let bar: string\n switch (this.style) {\n case 'gradient':\n bar = this.renderGradientBar(filledWidth, emptyWidth)\n break\n case 'fancy':\n bar = this.renderFancyBar(filledWidth, emptyWidth)\n break\n case 'minimal':\n bar = this.renderMinimalBar(filledWidth, emptyWidth)\n break\n case 'blocks':\n bar = this.renderBlockBar(filledWidth, emptyWidth)\n break\n default:\n bar = this.renderDefaultBar(filledWidth, emptyWidth)\n }\n\n let progressText = `${this.getStyledPrefix()} ${this.text} (${this.current}/${this.total}) [${bar}] ${this.getStyledPercentage(percentage)}`\n\n // Add stats if enabled\n if (this.options.showStats && this.startTime > 0) {\n const elapsed = Date.now() - this.startTime\n const speed = elapsed > 0 ? Math.round((this.current / elapsed) * 1000) : 0\n if (speed > 0) {\n progressText += ` ${chalk.gray(`${speed}/s`)}`\n }\n }\n\n // Clear previous line and render new one\n if (this.lastRender) {\n process.stdout.write('\\r\\x1b[K')\n }\n\n process.stdout.write(progressText)\n this.lastRender = progressText\n\n if (this.current >= this.total) {\n process.stdout.write('\\n')\n }\n }\n\n private renderGradientBar(filledWidth: number, emptyWidth: number): string {\n const colors = [chalk.red, chalk.yellow, chalk.green, chalk.cyan, chalk.blue, chalk.magenta]\n\n let filledBar = ''\n for (let i = 0; i < filledWidth; i++) {\n const colorIndex = Math.floor((i / this.width) * colors.length)\n const colorFn = colors[Math.min(colorIndex, colors.length - 1)]\n if (colorFn) {\n filledBar += colorFn('█')\n }\n }\n\n const emptyBar = chalk.gray('░'.repeat(emptyWidth))\n return filledBar + emptyBar\n }\n\n private renderFancyBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.cyan('▓'.repeat(filledWidth))\n const emptyBar = chalk.gray('░'.repeat(emptyWidth))\n return filledBar + emptyBar\n }\n\n private renderMinimalBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.white('━'.repeat(filledWidth))\n const emptyBar = chalk.gray('─'.repeat(emptyWidth))\n return filledBar + emptyBar\n }\n\n private renderBlockBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.green('■'.repeat(filledWidth))\n const emptyBar = chalk.gray('□'.repeat(emptyWidth))\n return filledBar + emptyBar\n }\n\n private renderDefaultBar(filledWidth: number, emptyWidth: number): string {\n const filledBar = chalk.green('█'.repeat(filledWidth))\n const emptyBar = chalk.gray('░'.repeat(emptyWidth))\n return filledBar + emptyBar\n }\n\n private getStyledPrefix(): string {\n switch (this.style) {\n case 'gradient':\n return chalk.magenta('▶')\n case 'fancy':\n return chalk.cyan('★')\n case 'minimal':\n return chalk.gray('•')\n case 'blocks':\n return chalk.green('◆')\n default:\n return chalk.cyan('●')\n }\n }\n\n private getStyledPercentage(percentage: number): string {\n if (percentage < 25) return chalk.red.bold(`${percentage}%`)\n if (percentage < 50) return chalk.yellow.bold(`${percentage}%`)\n if (percentage < 75) return chalk.blue.bold(`${percentage}%`)\n if (percentage < 100) return chalk.cyan.bold(`${percentage}%`)\n return chalk.green.bold(`${percentage}%`)\n }\n\n /**\n * Create a gradient percentage progress bar\n */\n static createGradient(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, {\n style: 'gradient',\n showStats: true,\n multiLine: true,\n })\n }\n\n /**\n * Create a fancy percentage progress bar\n */\n static createFancy(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, { style: 'fancy', showStats: true, multiLine: true })\n }\n\n /**\n * Create a minimal percentage progress bar\n */\n static createMinimal(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, {\n style: 'minimal',\n showStats: false,\n multiLine: true,\n })\n }\n\n /**\n * Create a block-style percentage progress bar\n */\n static createBlocks(width = 40): PercentageProgressBar {\n return new PercentageProgressBar(width, { style: 'blocks', showStats: true, multiLine: true })\n }\n}\n\n/**\n * Progress manager for batch operations\n */\nexport class BatchProgressManager {\n private bars: Map<string, ProgressBar> = new Map()\n private totalOperations = 0\n private completedOperations = 0\n\n createBar(id: string, options?: ProgressBarOptions): ProgressBar {\n const bar = new ProgressBar(options)\n this.bars.set(id, bar)\n return bar\n }\n\n getBar(id: string): ProgressBar | undefined {\n return this.bars.get(id)\n }\n\n setTotal(total: number): void {\n this.totalOperations = total\n }\n\n updateOverall(text: string): void {\n const percentage =\n this.totalOperations > 0\n ? Math.round((this.completedOperations / this.totalOperations) * 100)\n : 0\n\n console.log(\n chalk.cyan(\n `📊 Overall Progress: ${percentage}% (${this.completedOperations}/${this.totalOperations})`\n )\n )\n if (text) {\n console.log(chalk.gray(` → ${text}`))\n }\n }\n\n completeOperation(text?: string): void {\n this.completedOperations++\n if (text) {\n this.updateOverall(text)\n }\n }\n\n cleanup(): void {\n this.bars.forEach((bar) => bar.stop())\n this.bars.clear()\n }\n}\n","/**\n * Security Command\n *\n * CLI command to perform security vulnerability scanning and automated fixes.\n * Integrates with npm audit and snyk for comprehensive security analysis.\n */\n\nimport { spawnSync } from 'node:child_process'\nimport * as path from 'node:path'\nimport * as fs from 'fs-extra'\nimport type { OutputFormat, OutputFormatter } from '../formatters/outputFormatter.js'\nimport { ProgressBar } from '../formatters/progressBar.js'\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js'\n\nexport interface SecurityCommandOptions {\n workspace?: string\n format?: OutputFormat\n audit?: boolean\n fixVulns?: boolean\n severity?: 'low' | 'moderate' | 'high' | 'critical'\n includeDev?: boolean\n snyk?: boolean\n verbose?: boolean\n color?: boolean\n}\n\nexport interface SecurityReport {\n summary: {\n totalVulnerabilities: number\n critical: number\n high: number\n moderate: number\n low: number\n info: number\n }\n vulnerabilities: Vulnerability[]\n recommendations: SecurityRecommendation[]\n metadata: {\n scanDate: string\n scanTools: string[]\n workspacePath: string\n }\n}\n\nexport interface Vulnerability {\n id: string\n package: string\n severity: 'low' | 'moderate' | 'high' | 'critical'\n title: string\n url: string\n range: string\n fixAvailable: boolean | string\n fixVersion?: string\n paths: string[]\n cwe?: string[]\n cve?: string[]\n}\n\nexport interface SecurityRecommendation {\n package: string\n currentVersion: string\n recommendedVersion: string\n type: 'update' | 'remove' | 'replace'\n reason: string\n impact: string\n}\n\nexport class SecurityCommand {\n constructor(private readonly outputFormatter: OutputFormatter) {}\n\n /**\n * Execute the security command\n */\n async execute(options: SecurityCommandOptions = {}): Promise<void> {\n let progressBar: ProgressBar | undefined\n\n try {\n // Initialize theme\n ThemeManager.setTheme('default')\n\n // Show loading with progress bar\n progressBar = new ProgressBar({\n text: 'Performing security analysis...',\n })\n progressBar.start()\n\n if (options.verbose) {\n console.log(StyledText.iconAnalysis('Security vulnerability scanning'))\n console.log(StyledText.muted(`Workspace: ${options.workspace || process.cwd()}`))\n console.log(StyledText.muted(`Severity filter: ${options.severity || 'all'}`))\n console.log('')\n }\n\n // Execute security scan\n const report = await this.performSecurityScan(options)\n\n progressBar.succeed('Security analysis completed')\n\n // Format and display results\n const formattedOutput = this.outputFormatter.formatSecurityReport(report)\n console.log(formattedOutput)\n\n // Show recommendations if available\n if (report.recommendations.length > 0) {\n this.showRecommendations(report)\n }\n\n // Auto-fix vulnerabilities if requested\n if (options.fixVulns) {\n await this.autoFixVulnerabilities(report, options)\n }\n\n // Exit with appropriate code based on findings\n const exitCode = report.summary.critical > 0 ? 1 : 0\n process.exit(exitCode)\n } catch (error) {\n if (progressBar) {\n progressBar.fail('Security analysis failed')\n }\n\n console.error(StyledText.iconError('Error performing security scan:'))\n console.error(StyledText.error(String(error)))\n\n if (options.verbose && error instanceof Error) {\n console.error(StyledText.muted('Stack trace:'))\n console.error(StyledText.muted(error.stack || 'No stack trace available'))\n }\n\n process.exit(1)\n }\n }\n\n /**\n * Perform comprehensive security scan\n */\n private async performSecurityScan(options: SecurityCommandOptions): Promise<SecurityReport> {\n const workspacePath = options.workspace || process.cwd()\n const vulnerabilities: Vulnerability[] = []\n const recommendations: SecurityRecommendation[] = []\n\n // Check if package.json exists\n const packageJsonPath = path.join(workspacePath, 'package.json')\n if (!(await fs.pathExists(packageJsonPath))) {\n throw new Error(`No package.json found in ${workspacePath}`)\n }\n\n // Run npm audit\n if (options.audit !== false) {\n const npmVulns = await this.runNpmAudit(workspacePath, options)\n vulnerabilities.push(...npmVulns)\n }\n\n // Run snyk scan if available\n if (options.snyk) {\n const snykVulns = await this.runSnykScan(workspacePath, options)\n vulnerabilities.push(...snykVulns)\n }\n\n // Generate recommendations\n recommendations.push(...this.generateRecommendations(vulnerabilities))\n\n // Filter by severity if specified\n const filteredVulnerabilities = options.severity\n ? vulnerabilities.filter(\n (v) => this.severityToNumber(v.severity) >= this.severityToNumber(options.severity!)\n )\n : vulnerabilities\n\n return {\n summary: this.generateSummary(filteredVulnerabilities),\n vulnerabilities: filteredVulnerabilities,\n recommendations: recommendations,\n metadata: {\n scanDate: new Date().toISOString(),\n scanTools: ['npm-audit', ...(options.snyk ? ['snyk'] : [])],\n workspacePath: workspacePath,\n },\n }\n }\n\n /**\n * Run npm audit scan\n */\n private async runNpmAudit(\n workspacePath: string,\n options: SecurityCommandOptions\n ): Promise<Vulnerability[]> {\n const auditArgs = ['audit', '--json']\n\n if (!options.includeDev) {\n auditArgs.push('--omit=dev')\n }\n\n const result = spawnSync('npm', auditArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'pipe'],\n })\n\n if (result.error) {\n throw new Error(`npm audit failed: ${result.error.message}`)\n }\n\n if (result.status === 1) {\n // npm audit returns 1 when vulnerabilities are found\n try {\n const auditData = JSON.parse(result.stdout)\n return this.parseNpmAuditResults(auditData)\n } catch (parseError) {\n throw new Error(`Failed to parse npm audit output: ${parseError}`)\n }\n } else if (result.status === 0) {\n try {\n const auditData = JSON.parse(result.stdout)\n return this.parseNpmAuditResults(auditData)\n } catch (parseError) {\n throw new Error(`Failed to parse npm audit output: ${parseError}`)\n }\n } else {\n throw new Error(`npm audit failed with status ${result.status}: ${result.stderr}`)\n }\n }\n\n /**\n * Run snyk scan\n */\n private async runSnykScan(\n workspacePath: string,\n options: SecurityCommandOptions\n ): Promise<Vulnerability[]> {\n try {\n // Check if snyk is installed\n const versionResult = spawnSync('snyk', ['--version'], { stdio: 'pipe' })\n if (versionResult.error) {\n throw versionResult.error\n }\n\n const snykArgs = ['test', '--json']\n\n if (!options.includeDev) {\n snykArgs.push('--dev')\n }\n\n const result = spawnSync('snyk', snykArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: ['pipe', 'pipe', 'pipe'],\n })\n\n if (result.error) {\n throw result.error\n }\n\n if (result.status !== 0 && result.status !== 1) {\n throw new Error(`Snyk scan failed with status ${result.status}: ${result.stderr}`)\n }\n\n const snykData = JSON.parse(result.stdout)\n return this.parseSnykResults(snykData)\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n console.warn(StyledText.iconWarning('Snyk not found. Install with: npm install -g snyk'))\n return []\n }\n throw new Error(`Snyk scan failed: ${error.message}`)\n }\n }\n\n /**\n * Parse npm audit results\n */\n private parseNpmAuditResults(auditData: any): Vulnerability[] {\n const vulnerabilities: Vulnerability[] = []\n\n if (!auditData.vulnerabilities) {\n return vulnerabilities\n }\n\n for (const [id, vuln] of Object.entries(auditData.vulnerabilities)) {\n const vulnerability = vuln as any\n\n vulnerabilities.push({\n id: id,\n package: vulnerability.name,\n severity: vulnerability.severity,\n title: vulnerability.title || vulnerability.name,\n url: vulnerability.url || `https://npmjs.com/advisories/${id}`,\n range: vulnerability.range,\n fixAvailable: vulnerability.fixAvailable,\n fixVersion: vulnerability.fixAvailable === true ? vulnerability.fixAvailable : undefined,\n paths: vulnerability.via?.map((v: any) => v.source || v.name) || [vulnerability.name],\n cwe: vulnerability.cwe,\n cve: vulnerability.cve,\n })\n }\n\n return vulnerabilities\n }\n\n /**\n * Parse snyk results\n */\n private parseSnykResults(snykData: any): Vulnerability[] {\n const vulnerabilities: Vulnerability[] = []\n\n if (!snykData.vulnerabilities) {\n return vulnerabilities\n }\n\n for (const vuln of snykData.vulnerabilities) {\n vulnerabilities.push({\n id: vuln.id,\n package: vuln.packageName,\n severity: vuln.severity,\n title: vuln.title,\n url: vuln.url,\n range: vuln.semver?.vulnerable?.join(' || ') || vuln.version,\n fixAvailable: vuln.fixedIn?.length > 0,\n fixVersion: vuln.fixedIn?.[0],\n paths: vuln.from || [vuln.packageName],\n cwe: vuln.identifiers?.CWE || [],\n cve: vuln.identifiers?.CVE || [],\n })\n }\n\n return vulnerabilities\n }\n\n /**\n * Generate security recommendations\n */\n private generateRecommendations(vulnerabilities: Vulnerability[]): SecurityRecommendation[] {\n const recommendations: SecurityRecommendation[] = []\n const packages = new Set(vulnerabilities.map((v) => v.package))\n\n for (const pkg of packages) {\n const pkgVulns = vulnerabilities.filter((v) => v.package === pkg)\n const criticalVulns = pkgVulns.filter(\n (v) => v.severity === 'critical' || v.severity === 'high'\n )\n\n if (criticalVulns.length > 0) {\n const fixVersions = [\n ...new Set(\n criticalVulns.map((v) => v.fixVersion).filter((v) => v && typeof v === 'string')\n ),\n ]\n\n if (fixVersions.length > 0) {\n const currentVersion = pkgVulns[0]?.range?.split(' ')[0] || 'unknown'\n const recommendedVersion = fixVersions[0] || 'unknown'\n\n recommendations.push({\n package: pkg,\n currentVersion: currentVersion,\n recommendedVersion: recommendedVersion,\n type: 'update',\n reason: `${criticalVulns.length} critical vulnerabilities found`,\n impact: 'High - Security vulnerability fix',\n })\n }\n }\n }\n\n return recommendations\n }\n\n /**\n * Generate summary from vulnerabilities\n */\n private generateSummary(vulnerabilities: Vulnerability[]): SecurityReport['summary'] {\n const summary = {\n totalVulnerabilities: vulnerabilities.length,\n critical: 0,\n high: 0,\n moderate: 0,\n low: 0,\n info: 0,\n }\n\n for (const vuln of vulnerabilities) {\n const severity = vuln.severity as string\n switch (severity) {\n case 'critical':\n summary.critical++\n break\n case 'high':\n summary.high++\n break\n case 'moderate':\n summary.moderate++\n break\n case 'low':\n summary.low++\n break\n case 'info':\n summary.info++\n break\n default:\n summary.info++\n break\n }\n }\n\n return summary\n }\n\n /**\n * Convert severity string to number for filtering\n */\n private severityToNumber(severity: string): number {\n switch (severity) {\n case 'critical':\n return 4\n case 'high':\n return 3\n case 'moderate':\n return 2\n case 'low':\n return 1\n case 'info':\n return 0\n default:\n return 0\n }\n }\n\n /**\n * Show security recommendations\n */\n private showRecommendations(report: SecurityReport): void {\n if (report.recommendations.length === 0) {\n return\n }\n\n console.log(`\\n${StyledText.iconInfo('Security Recommendations:')}`)\n\n for (const rec of report.recommendations) {\n console.log(\n ` ${StyledText.iconWarning()} ${rec.package}: ${rec.currentVersion} → ${rec.recommendedVersion}`\n )\n console.log(` ${StyledText.muted(rec.reason)}`)\n console.log(` ${StyledText.muted(rec.impact)}`)\n }\n\n console.log('')\n console.log(StyledText.iconUpdate('Run with --fix-vulns to apply automatic fixes'))\n }\n\n /**\n * Auto-fix vulnerabilities\n */\n private async autoFixVulnerabilities(\n report: SecurityReport,\n options: SecurityCommandOptions\n ): Promise<void> {\n if (report.recommendations.length === 0) {\n console.log(StyledText.iconSuccess('No security fixes available'))\n return\n }\n\n console.log(`\\n${StyledText.iconUpdate('Applying security fixes...')}`)\n\n const workspacePath = options.workspace || process.cwd()\n const fixableVulns = report.recommendations.filter((r) => r.type === 'update')\n\n if (fixableVulns.length === 0) {\n console.log(StyledText.iconInfo('No automatic fixes available'))\n return\n }\n\n try {\n // Run npm audit fix\n const fixArgs = ['audit', 'fix']\n if (!options.includeDev) {\n fixArgs.push('--omit=dev')\n }\n\n const result = spawnSync('npm', fixArgs, {\n cwd: workspacePath,\n encoding: 'utf8',\n stdio: 'inherit',\n })\n\n if (result.error) {\n throw result.error\n }\n\n if (result.status !== 0) {\n throw new Error(`npm audit fix failed with status ${result.status}`)\n }\n\n console.log(StyledText.iconSuccess('Security fixes applied successfully'))\n\n // Re-run scan to verify fixes\n console.log(StyledText.iconInfo('Re-running security scan to verify fixes...'))\n const newReport = await this.performSecurityScan({ ...options, fixVulns: false })\n\n if (newReport.summary.critical === 0 && newReport.summary.high === 0) {\n console.log(\n StyledText.iconSuccess('All critical and high severity vulnerabilities have been fixed!')\n )\n } else {\n console.log(\n StyledText.iconWarning(\n `${newReport.summary.critical} critical and ${newReport.summary.high} high severity vulnerabilities remain`\n )\n )\n }\n } catch (error: any) {\n console.error(StyledText.iconError('Failed to apply security fixes:'))\n console.error(StyledText.error(error.message))\n }\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: SecurityCommandOptions): string[] {\n const errors: string[] = []\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal')\n }\n\n // Validate severity\n if (options.severity && !['low', 'moderate', 'high', 'critical'].includes(options.severity)) {\n errors.push('Invalid severity. Must be one of: low, moderate, high, critical')\n }\n\n return errors\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nSecurity vulnerability scanning and automated fixes\n\nUsage:\n pcu security [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --audit Perform npm audit scan (default: true)\n --fix-vulns Automatically fix vulnerabilities\n --severity <level> Filter by severity: low, moderate, high, critical\n --include-dev Include dev dependencies in scan\n --snyk Include Snyk scan (requires snyk CLI)\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu security # Basic security scan\n pcu security --fix-vulns # Scan and fix vulnerabilities\n pcu security --severity high # Show only high severity issues\n pcu security --snyk # Include Snyk scan\n pcu security --format json # Output as JSON\n\nExit Codes:\n 0 No vulnerabilities found\n 1 Vulnerabilities found\n 2 Error occurred\n `\n }\n}\n","/**\n * Update Command\n *\n * CLI command to update catalog dependencies.\n * Supports interactive mode, dry-run, and various update strategies.\n */\n\nimport {\n AIAnalysisService,\n type AnalysisType,\n type CatalogUpdateService,\n FileSystemService,\n FileWorkspaceRepository,\n type UpdateOptions,\n type UpdatePlan,\n type UpdateTarget,\n WorkspaceService,\n} from '@pcu/core'\nimport { ConfigLoader } from '@pcu/utils'\nimport chalk from 'chalk'\nimport { type OutputFormat, OutputFormatter } from '../formatters/outputFormatter.js'\nimport { ProgressBar } from '../formatters/progressBar.js'\nimport { InteractivePrompts } from '../interactive/interactivePrompts.js'\nimport { StyledText, ThemeManager } from '../themes/colorTheme.js'\n\nexport interface UpdateCommandOptions {\n workspace?: string\n catalog?: string\n format?: OutputFormat\n target?: UpdateTarget\n interactive?: boolean\n dryRun?: boolean\n force?: boolean\n prerelease?: boolean\n include?: string[]\n exclude?: string[]\n createBackup?: boolean\n verbose?: boolean\n color?: boolean\n // AI batch analysis options\n ai?: boolean\n provider?: string\n analysisType?: AnalysisType\n skipCache?: boolean\n}\n\nexport class UpdateCommand {\n private readonly updateService: CatalogUpdateService\n\n constructor(updateService: CatalogUpdateService) {\n this.updateService = updateService\n }\n\n /**\n * Execute the update command\n */\n async execute(options: UpdateCommandOptions = {}): Promise<void> {\n let progressBar: ProgressBar | undefined\n\n try {\n // Initialize theme\n ThemeManager.setTheme('default')\n\n // Create progress bar for the update process\n progressBar = new ProgressBar({\n text: '正在规划更新...',\n total: 4, // 4 main steps\n })\n progressBar.start('正在加载工作区配置...')\n\n // Load configuration file first\n const config = ConfigLoader.loadConfig(options.workspace || process.cwd())\n\n // Use format from CLI options first, then config file, then default\n const effectiveFormat = options.format || config.defaults?.format || 'table'\n\n // Create output formatter with effective format\n const formatter = new OutputFormatter(\n effectiveFormat as OutputFormat,\n options.color !== false\n )\n\n // Merge CLI options with configuration file settings\n const updateOptions: UpdateOptions = {\n workspacePath: options.workspace,\n catalogName: options.catalog,\n target: options.target || config.defaults?.target,\n includePrerelease: options.prerelease ?? config.defaults?.includePrerelease ?? false,\n // CLI include/exclude options take priority over config file\n include: options.include?.length ? options.include : config.include,\n exclude: options.exclude?.length ? options.exclude : config.exclude,\n interactive: options.interactive ?? config.defaults?.interactive ?? false,\n dryRun: options.dryRun ?? config.defaults?.dryRun ?? false,\n force: options.force ?? false,\n createBackup: options.createBackup ?? config.defaults?.createBackup ?? false,\n }\n\n // Step 1: Planning updates\n progressBar.update('正在检查包版本...', 1, 4)\n const plan = await this.updateService.planUpdates(updateOptions)\n\n // Step 2: Check if any updates found\n progressBar.update('正在分析更新...', 2, 4)\n\n if (!plan.updates.length) {\n progressBar.succeed('所有依赖包都是最新的')\n console.log(StyledText.iconSuccess('All dependencies are up to date!'))\n return\n }\n\n console.log(\n StyledText.iconPackage(\n `Found ${plan.totalUpdates} update${plan.totalUpdates === 1 ? '' : 's'} available`\n )\n )\n\n // Interactive selection if enabled\n let finalPlan = plan\n if (options.interactive) {\n finalPlan = await this.interactiveSelection(plan)\n if (!finalPlan.updates.length) {\n progressBar.warn('未选择任何更新')\n console.log(StyledText.iconWarning('No updates selected'))\n return\n }\n }\n\n // AI batch analysis if enabled - analyze ALL packages in one request\n if (options.ai) {\n progressBar.update('🤖 正在进行 AI 批量分析...', 2.5, 4)\n progressBar.stop()\n\n console.log(\n chalk.blue(\n `\\n🤖 Running AI-powered batch analysis for ${finalPlan.updates.length} packages...`\n )\n )\n console.log(chalk.gray('This analyzes all packages in a single request for efficiency.\\n'))\n\n try {\n const aiResult = await this.performBatchAIAnalysis(finalPlan, options)\n\n // Display AI analysis results\n console.log(chalk.blue('\\n📊 AI Analysis Results:'))\n console.log(chalk.gray('─'.repeat(60)))\n console.log(chalk.cyan(`Provider: ${aiResult.provider}`))\n console.log(chalk.cyan(`Confidence: ${(aiResult.confidence * 100).toFixed(0)}%`))\n console.log(chalk.cyan(`Processing time: ${aiResult.processingTimeMs}ms`))\n console.log(chalk.gray('─'.repeat(60)))\n console.log(chalk.yellow('\\n📝 Summary:'))\n console.log(aiResult.summary)\n\n // Display recommendations for each package\n if (aiResult.recommendations.length > 0) {\n console.log(chalk.yellow('\\n📦 Package Recommendations:'))\n for (const rec of aiResult.recommendations) {\n const actionIcon = rec.action === 'update' ? '✅' : rec.action === 'skip' ? '❌' : '⚠️'\n const riskColor =\n rec.riskLevel === 'critical'\n ? chalk.red\n : rec.riskLevel === 'high'\n ? chalk.yellow\n : rec.riskLevel === 'medium'\n ? chalk.cyan\n : chalk.green\n\n console.log(\n `\\n ${actionIcon} ${chalk.bold(rec.package)}: ${rec.currentVersion} → ${rec.targetVersion}`\n )\n console.log(\n ` Action: ${chalk.bold(rec.action.toUpperCase())} | Risk: ${riskColor(rec.riskLevel)}`\n )\n console.log(` ${rec.reason}`)\n\n if (rec.breakingChanges && rec.breakingChanges.length > 0) {\n console.log(\n chalk.red(` ⚠️ Breaking changes: ${rec.breakingChanges.join(', ')}`)\n )\n }\n if (rec.securityFixes && rec.securityFixes.length > 0) {\n console.log(chalk.green(` 🔒 Security fixes: ${rec.securityFixes.join(', ')}`))\n }\n }\n }\n\n // Display warnings\n if (aiResult.warnings && aiResult.warnings.length > 0) {\n console.log(chalk.yellow('\\n⚠️ Warnings:'))\n for (const warning of aiResult.warnings) {\n console.log(chalk.yellow(` - ${warning}`))\n }\n }\n\n console.log(chalk.gray(`\\n${'─'.repeat(60)}`))\n\n // If there are critical/skip recommendations, warn the user\n const skipRecommendations = aiResult.recommendations.filter((r) => r.action === 'skip')\n if (skipRecommendations.length > 0 && !options.force) {\n console.log(\n chalk.red(\n `\\n⛔ AI recommends skipping ${skipRecommendations.length} package(s) due to risks.`\n )\n )\n console.log(chalk.yellow('Use --force to override AI recommendations.\\n'))\n }\n } catch (aiError) {\n console.warn(\n chalk.yellow('\\n⚠️ AI batch analysis failed, continuing without AI insights:')\n )\n if (options.verbose) {\n console.warn(chalk.gray(String(aiError)))\n }\n }\n\n // Restart progress bar\n progressBar = new ProgressBar({\n text: '准备应用更新...',\n total: 4,\n })\n progressBar.start('正在准备应用更新...')\n }\n\n // Step 3: Apply updates\n progressBar.update('正在准备应用更新...', 3, 4)\n\n if (!options.dryRun) {\n // Replace the progress bar with one for applying updates\n progressBar.stop()\n progressBar = new ProgressBar({\n text: 'Applying updates...',\n total: finalPlan.updates.length,\n })\n progressBar.start('正在应用更新...')\n\n const result = await this.updateService.executeUpdates(finalPlan, updateOptions)\n progressBar.succeed(`Applied ${finalPlan.updates.length} updates`)\n\n console.log(formatter.formatUpdateResult(result))\n } else {\n progressBar.update('正在生成预览...', 4, 4)\n progressBar.succeed('更新预览完成')\n console.log(StyledText.iconInfo('Dry run - no changes made'))\n console.log(JSON.stringify(finalPlan, null, 2))\n }\n\n console.log(StyledText.iconComplete('Update process completed!'))\n } catch (error) {\n if (progressBar) {\n progressBar.fail('Operation failed')\n }\n\n if (error instanceof Error) {\n console.error(StyledText.iconError(`Error: ${error.message}`))\n } else {\n console.error(StyledText.iconError('Unknown error occurred'))\n }\n throw error\n }\n }\n\n /**\n * Interactive update selection\n */\n private async interactiveSelection(plan: UpdatePlan): Promise<UpdatePlan> {\n const interactivePrompts = new InteractivePrompts()\n\n // Transform PlannedUpdate to the format expected by InteractivePrompts\n const packages = plan.updates.map((update) => ({\n name: update.packageName,\n current: update.currentVersion,\n latest: update.newVersion,\n type: update.updateType,\n }))\n\n const selectedPackageNames = await interactivePrompts.selectPackages(packages)\n\n // Filter the plan to only include selected packages\n const selectedUpdates = plan.updates.filter((update) =>\n selectedPackageNames.includes(update.packageName)\n )\n\n return {\n ...plan,\n updates: selectedUpdates,\n totalUpdates: selectedUpdates.length,\n }\n }\n\n /**\n * Perform batch AI analysis for all packages in the update plan\n * This analyzes ALL packages in a single AI request for efficiency\n */\n private async performBatchAIAnalysis(plan: UpdatePlan, options: UpdateCommandOptions) {\n const workspacePath = options.workspace || process.cwd()\n\n // Create workspace service to get workspace info\n const fileSystemService = new FileSystemService()\n const workspaceRepository = new FileWorkspaceRepository(fileSystemService)\n const workspaceService = new WorkspaceService(workspaceRepository)\n const workspaceInfo = await workspaceService.getWorkspaceInfo(workspacePath)\n\n // Create AI service\n const aiService = new AIAnalysisService({\n config: {\n preferredProvider: options.provider === 'auto' ? 'auto' : options.provider,\n cache: { enabled: !options.skipCache, ttl: 3600 },\n fallback: { enabled: true, useRuleEngine: true },\n },\n })\n\n // Convert all planned updates to PackageUpdateInfo format for batch analysis\n const packages = plan.updates.map((update) => ({\n name: update.packageName,\n currentVersion: update.currentVersion,\n targetVersion: update.newVersion,\n updateType: update.updateType,\n catalogName: update.catalogName,\n }))\n\n // Build workspace info for AI\n const wsInfo = {\n name: workspaceInfo.name,\n path: workspaceInfo.path,\n packageCount: workspaceInfo.packageCount,\n catalogCount: workspaceInfo.catalogCount,\n }\n\n // Perform single batch analysis for ALL packages\n const result = await aiService.analyzeUpdates(packages, wsInfo, {\n analysisType: options.analysisType || 'impact',\n skipCache: options.skipCache,\n })\n\n return result\n }\n\n /**\n * Validate command options\n */\n static validateOptions(options: UpdateCommandOptions): string[] {\n const errors: string[] = []\n\n // Validate format\n if (options.format && !['table', 'json', 'yaml', 'minimal'].includes(options.format)) {\n errors.push('Invalid format. Must be one of: table, json, yaml, minimal')\n }\n\n // Validate target\n if (\n options.target &&\n !['latest', 'greatest', 'minor', 'patch', 'newest'].includes(options.target)\n ) {\n errors.push('Invalid target. Must be one of: latest, greatest, minor, patch, newest')\n }\n\n // Interactive and dry-run conflict\n if (options.interactive && options.dryRun) {\n errors.push('Cannot use --interactive with --dry-run')\n }\n\n return errors\n }\n\n /**\n * Get command help text\n */\n static getHelpText(): string {\n return `\nUpdate catalog dependencies\n\nUsage:\n pcu update [options]\n\nOptions:\n --workspace <path> Workspace directory (default: current directory)\n --catalog <name> Update specific catalog only\n --format <type> Output format: table, json, yaml, minimal (default: table)\n --target <type> Update target: latest, greatest, minor, patch, newest (default: latest)\n -i, --interactive Interactive mode to choose updates\n -d, --dry-run Preview changes without writing files\n --force Force updates even if conflicts exist\n --prerelease Include prerelease versions\n --include <pattern> Include packages matching pattern (can be used multiple times)\n --exclude <pattern> Exclude packages matching pattern (can be used multiple times)\n --create-backup Create backup files before updating\n --verbose Show detailed information\n --no-color Disable colored output\n\nExamples:\n pcu update # Update all catalogs\n pcu update --interactive # Interactive update selection\n pcu update --dry-run # Preview updates without applying\n pcu update --catalog react17 # Update specific catalog\n pcu update --target minor # Update to latest minor versions only\n pcu update --force # Force updates despite conflicts\n pcu update --include \"react*\" # Update only React packages\n\nExit Codes:\n 0 Updates completed successfully\n 1 Updates failed or were cancelled\n 2 Error occurred\n `\n }\n}\n","/**\n * Interactive Prompts\n *\n * Provides smart prompts and auto-completion for CLI commands\n */\n\nimport { FileSystemService } from '@pcu/core'\nimport chalk from 'chalk'\nimport inquirer from 'inquirer'\nimport { StyledText } from '../themes/colorTheme.js'\n\nexport interface AutoCompleteOption {\n name: string\n value: string\n description?: string\n}\n\nexport class InteractivePrompts {\n private fsService: FileSystemService\n\n constructor() {\n this.fsService = new FileSystemService()\n }\n\n /**\n * Interactive package selection with search\n */\n async selectPackages(\n packages: Array<{ name: string; current: string; latest: string; type: string }>\n ): Promise<string[]> {\n if (packages.length === 0) {\n return []\n }\n\n const choices = packages.map((pkg) => ({\n name: this.formatPackageChoice(pkg),\n value: pkg.name,\n checked: false,\n }))\n\n const answers = await inquirer.prompt({\n type: 'checkbox',\n name: 'selectedPackages',\n message: StyledText.iconPackage('Select packages to update:'),\n choices,\n pageSize: 15,\n validate: (input: unknown) => {\n const selected = input as string[]\n return selected.length > 0 || 'Please select at least one package'\n },\n })\n\n return answers.selectedPackages\n }\n\n /**\n * Interactive catalog selection\n */\n async selectCatalog(catalogs: string[]): Promise<string | null> {\n if (catalogs.length === 0) {\n return null\n }\n\n if (catalogs.length === 1) {\n return catalogs[0] ?? null\n }\n\n const choices = [\n { name: 'All catalogs', value: 'all' },\n ...catalogs.map((name) => ({ name, value: name })),\n ]\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'catalog',\n message: StyledText.iconCatalog('Select catalog to update:'),\n choices,\n pageSize: 10,\n },\n ])\n\n return answers.catalog === 'all' ? null : answers.catalog\n }\n\n /**\n * Update strategy selection\n */\n async selectUpdateStrategy(): Promise<string> {\n const strategies = [\n { name: 'Latest (recommended)', value: 'latest' },\n { name: 'Greatest (highest version)', value: 'greatest' },\n { name: 'Minor (non-breaking)', value: 'minor' },\n { name: 'Patch (bug fixes only)', value: 'patch' },\n { name: 'Newest (latest release)', value: 'newest' },\n ]\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'strategy',\n message: StyledText.iconUpdate('Select update strategy:'),\n choices: strategies,\n },\n ])\n\n return answers.strategy\n }\n\n /**\n * Confirm dangerous operations\n */\n async confirmDangerousOperation(operation: string, details?: string): Promise<boolean> {\n console.log('')\n if (details) {\n console.log(chalk.yellow('⚠️ Warning:'), details)\n }\n\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirmed',\n message: StyledText.warning(`Are you sure you want to ${operation}?`),\n default: false,\n },\n ])\n\n return answers.confirmed\n }\n\n /**\n * Auto-complete for package names (using list as fallback)\n */\n async autoCompletePackage(\n packages: string[],\n message: string = 'Select package:'\n ): Promise<string> {\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'package',\n message,\n choices: packages.map((pkg) => ({ name: pkg, value: pkg })),\n pageSize: 10,\n },\n ])\n\n return answers.package\n }\n\n /**\n * Workspace path selection with auto-complete\n */\n async selectWorkspacePath(): Promise<string> {\n const currentDir = process.cwd()\n const choices = [\n { name: `Current directory (${currentDir})`, value: currentDir },\n { name: 'Browse for directory...', value: 'browse' },\n ]\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'path',\n message: StyledText.icon('📁', 'Select workspace directory:'),\n choices,\n },\n ])\n\n if (answers.path === 'browse') {\n return this.browseDirectory()\n }\n\n return answers.path\n }\n\n /**\n * Browse directory structure\n */\n private async browseDirectory(currentPath = process.cwd()): Promise<string> {\n const directoryNames = await this.fsService.listDirectories(currentPath)\n const choices = [\n { name: '.. (parent directory)', value: '..' },\n { name: `. (current: ${currentPath})`, value: '.' },\n ...directoryNames.map((name: string) => ({\n name: `📁 ${name}`,\n value: `${currentPath}/${name}`,\n })),\n ]\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'selected',\n message: `Browse: ${currentPath}`,\n choices,\n pageSize: 15,\n },\n ])\n\n if (answers.selected === '.') {\n return currentPath\n }\n\n if (answers.selected === '..') {\n const parent = currentPath.split('/').slice(0, -1).join('/') || '/'\n return this.browseDirectory(parent)\n }\n\n // Check if this directory contains a pnpm workspace\n const workspaceFiles = ['pnpm-workspace.yaml', 'pnpm-workspace.yml']\n let hasWorkspace = false\n for (const file of workspaceFiles) {\n if (await this.fsService.exists(`${answers.selected}/${file}`)) {\n hasWorkspace = true\n break\n }\n }\n\n if (hasWorkspace) {\n const confirm = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'useThis',\n message: `Use ${answers.selected} as workspace?`,\n default: true,\n },\n ])\n\n if (confirm.useThis) {\n return answers.selected\n }\n }\n\n return this.browseDirectory(answers.selected)\n }\n\n /**\n * Multi-step configuration wizard\n */\n async configurationWizard(): Promise<any> {\n console.log(chalk.bold.blue('\\n🧙‍♂️ Configuration Wizard\\n'))\n\n const themeAnswer = await inquirer.prompt({\n type: 'list',\n name: 'theme',\n message: 'Select color theme:',\n choices: [\n { name: 'Default - Balanced colors', value: 'default' },\n { name: 'Modern - Vibrant colors', value: 'modern' },\n { name: 'Minimal - Clean and simple', value: 'minimal' },\n { name: 'Neon - High contrast', value: 'neon' },\n ],\n default: 'default',\n })\n\n const interactiveAnswer = await inquirer.prompt({\n type: 'confirm',\n name: 'interactive',\n message: 'Enable interactive mode by default?',\n default: true,\n })\n\n const backupAnswer = await inquirer.prompt({\n type: 'confirm',\n name: 'backup',\n message: 'Create backups before updates?',\n default: true,\n })\n\n const strategyAnswer = await inquirer.prompt({\n type: 'list',\n name: 'updateStrategy',\n message: 'Default update strategy:',\n choices: [\n { name: 'Latest stable versions', value: 'latest' },\n { name: 'Minor updates (non-breaking)', value: 'minor' },\n { name: 'Patch updates (bug fixes)', value: 'patch' },\n ],\n default: 'latest',\n })\n\n const timeoutAnswer = await inquirer.prompt({\n type: 'number',\n name: 'timeout',\n message: 'Network timeout (seconds):',\n default: 30,\n validate: (input: number | undefined) => {\n if (input === undefined) return 'Timeout is required'\n return input > 0 || 'Timeout must be positive'\n },\n })\n\n const answers = {\n ...themeAnswer,\n ...interactiveAnswer,\n ...backupAnswer,\n ...strategyAnswer,\n ...timeoutAnswer,\n }\n\n return answers\n }\n\n /**\n * Impact preview before update\n */\n async previewImpact(impact: any): Promise<boolean> {\n console.log(chalk.bold.blue('\\n📊 Impact Preview\\n'))\n\n // Display impact summary\n console.log(`Packages to update: ${impact.totalUpdates}`)\n console.log(`Risk level: ${impact.riskLevel}`)\n console.log(`Affected packages: ${impact.affectedCount}`)\n\n if (impact.securityUpdates > 0) {\n console.log(StyledText.iconSecurity(`${impact.securityUpdates} security updates`))\n }\n\n console.log('')\n\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'proceed',\n message: 'Proceed with update?',\n default: true,\n },\n ])\n\n return answers.proceed\n }\n\n /**\n * Error recovery options\n */\n async errorRecoveryOptions(error: string): Promise<string> {\n const options = [\n { name: 'Retry operation', value: 'retry' },\n { name: 'Skip this package', value: 'skip' },\n { name: 'Continue with remaining', value: 'continue' },\n { name: 'Abort operation', value: 'abort' },\n ]\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n name: 'action',\n message: StyledText.iconError(`Error: ${error}`),\n choices: options,\n },\n ])\n\n return answers.action\n }\n\n /**\n * Confirm tool update\n */\n async confirmUpdate(message: string): Promise<boolean> {\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'update',\n message: StyledText.iconUpdate(message),\n default: true,\n },\n ])\n\n return answers.update\n }\n\n /**\n * Format package choice for display\n */\n private formatPackageChoice(pkg: any): string {\n const updateTypeColor: Record<string, any> = {\n major: chalk.red,\n minor: chalk.yellow,\n patch: chalk.green,\n }\n\n const typeColor = updateTypeColor[pkg.type] || chalk.gray\n\n return `${pkg.name} ${chalk.dim(pkg.current)} → ${typeColor(pkg.latest)} ${chalk.dim(`(${pkg.type})`)}`\n }\n}\n\n/**\n * Auto-completion utilities\n */\nexport class AutoCompleteManager {\n static async suggestWorkspaces(current: string): Promise<string[]> {\n const suggestions: string[] = []\n\n // Common workspace patterns\n const patterns = [\n 'pnpm-workspace.yaml',\n 'pnpm-workspace.yml',\n '**/*/pnpm-workspace.yaml',\n '**/*/pnpm-workspace.yml',\n ]\n\n for (const pattern of patterns) {\n try {\n const { glob } = await import('glob')\n const matches = await glob(pattern)\n matches.forEach((match: string) => {\n const dir = match.replace(/\\/pnpm-workspace\\.ya?ml$/, '')\n if (!suggestions.includes(dir)) {\n suggestions.push(dir)\n }\n })\n } catch {\n // Ignore errors\n }\n }\n\n return suggestions.filter((s) => s.toLowerCase().includes(current.toLowerCase()))\n }\n\n static async suggestCatalogs(): Promise<string[]> {\n return []\n }\n\n static async suggestPackages(): Promise<string[]> {\n return []\n }\n}\n\n/**\n * Interactive command builder\n */\nexport class InteractiveCommandBuilder {\n static async buildCommand(): Promise<{\n command: string\n options: Record<string, any>\n }> {\n const baseCommand = await inquirer.prompt([\n {\n type: 'list',\n name: 'command',\n message: 'What would you like to do?',\n choices: [\n { name: 'Check for updates', value: 'check' },\n { name: 'Update dependencies', value: 'update' },\n { name: 'Analyze impact', value: 'analyze' },\n { name: 'Show workspace info', value: 'workspace' },\n ],\n },\n ])\n\n const options: Record<string, any> = {}\n\n // Common options\n const common = await inquirer.prompt([\n {\n type: 'list',\n name: 'format',\n message: 'Output format:',\n choices: [\n { name: 'Table (rich)', value: 'table' },\n { name: 'JSON', value: 'json' },\n { name: 'YAML', value: 'yaml' },\n { name: 'Minimal', value: 'minimal' },\n ],\n default: 'table',\n },\n ])\n\n options.format = common.format\n\n // Command-specific options\n switch (baseCommand.command) {\n case 'update': {\n const updateOpts = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'interactive',\n message: 'Interactive mode?',\n default: true,\n },\n {\n type: 'confirm',\n name: 'dryRun',\n message: 'Dry run mode?',\n default: false,\n },\n {\n type: 'confirm',\n name: 'backup',\n message: 'Create backup?',\n default: true,\n },\n ])\n Object.assign(options, updateOpts)\n break\n }\n\n case 'check': {\n const checkOpts = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'includePrerelease',\n message: 'Include pre-release versions?',\n default: false,\n },\n ])\n options.prerelease = checkOpts.includePrerelease\n break\n }\n }\n\n return {\n command: baseCommand.command,\n options,\n }\n }\n}\n"]}