@resolveio/server-lib 22.3.180 → 22.3.181
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/package.json +1 -1
- package/util/ai-run-evidence-adapters.js +2 -2
- package/util/ai-run-evidence-adapters.js.map +1 -1
- package/util/ai-run-evidence.js +1 -1
- package/util/ai-run-evidence.js.map +1 -1
- package/util/ai-runner-manager-policy.d.ts +1 -0
- package/util/ai-runner-manager-policy.js +19 -12
- package/util/ai-runner-manager-policy.js.map +1 -1
- package/util/support-runner-v5.js +4 -4
- package/util/support-runner-v5.js.map +1 -1
package/util/ai-run-evidence.js
CHANGED
|
@@ -408,7 +408,7 @@ function classifyAIRunOutcome(input) {
|
|
|
408
408
|
return {
|
|
409
409
|
outcome: 'release_blocked',
|
|
410
410
|
reason: "Hotfix cannot be treated as durable until GitHub commit proof passes: ".concat(blockedHotfixCommitGate.reason),
|
|
411
|
-
nextAction: 'Commit and push the hotfix to GitHub, record sourceCommitSha/githubCommitUrl/gitPushStatus, then rerun the smallest release gate.',
|
|
411
|
+
nextAction: 'Commit and push the hotfix to GitHub, record sourceCommitSha/githubCommitUrl/gitCommitStatus/gitPushStatus, then rerun the smallest release gate.',
|
|
412
412
|
gates: gates,
|
|
413
413
|
warnings: warnings,
|
|
414
414
|
recordedAt: now
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/ai-run-evidence.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsTA,kEAEC;AAED,kEAMC;AAED,gFAqFC;AA0ID,oCA2HC;AA6BD,oDAkQC;AAED,gCA0DC;AAED,wCA8GC;AAED,gEAWC;AA11BD,SAAS,MAAM,CAAC,KAAqB;IACpC,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IACD,IAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACpD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,SAAS,CAAC,KAAU,EAAE,GAAU;IAAV,oBAAA,EAAA,UAAU;IACxC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAU;IACnC,IAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,cAAc,CAAC,KAAU;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAM,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,SAAgB,2BAA2B,CAAC,KAA2B;IACtE,OAAO,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;AACxF,CAAC;AAED,SAAgB,2BAA2B,CAAC,KAA2B;;IACtE,IAAM,cAAc,GAAG,SAAS,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,mCAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IACvF,IAAI,cAAc,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,mCAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,kCAAkC,CAAiC,IAAc;IAAd,qBAAA,EAAA,SAAc;IAChG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACX,CAAC;IACD,IAAM,UAAU,GAAG,IAAI;SACrB,GAAG,CAAC,UAAC,GAAG,EAAE,KAAK,IAAK,OAAA,uBACjB,GAAG,KACN,UAAU,EAAE,KAAK,IAChB,EAHmB,CAGnB,CAAC;SACF,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;;QACV,IAAM,KAAK,GAAG,CAAA,MAAA,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,0CAAE,OAAO,EAAE,KAAI,CAAC,CAAC;QAC1D,IAAM,KAAK,GAAG,CAAA,MAAA,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,0CAAE,OAAO,EAAE,KAAI,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACrB,OAAO,KAAK,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,IAAM,cAAc,GAAG,SAAS,CAAC,MAAA,CAAC,CAAC,UAAU,mCAAI,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC;aAChE,aAAa,CAAC,SAAS,CAAC,MAAA,CAAC,CAAC,UAAU,mCAAI,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7D,IAAI,cAAc,EAAE,CAAC;YACpB,OAAO,cAAc,CAAC;QACvB,CAAC;QACD,IAAM,mBAAmB,GAAG,SAAS,CAAC,MAAA,CAAC,CAAC,eAAe,mCAAI,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC;aAC/E,aAAa,CAAC,SAAS,CAAC,MAAA,CAAC,CAAC,eAAe,mCAAI,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;QACvE,IAAI,mBAAmB,EAAE,CAAC;YACzB,OAAO,mBAAmB,CAAC;QAC5B,CAAC;QACD,OAAO,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IACJ,IAAM,gBAAgB,GAAG,IAAI,GAAG,EAM5B,CAAC;IACL,OAAO,UAAU,CAAC,GAAG,CAAC,UAAC,GAAG;;QACzB,IAAM,WAAW,GAAG,gBAAgB,CAAC,MAAA,GAAG,CAAC,YAAY,mCAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1E,IAAM,iBAAiB,GAAG,gBAAgB,CAAC,MAAA,GAAG,CAAC,mBAAmB,mCAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC7F,IAAM,YAAY,GAAG,gBAAgB,CAAC,MAAA,GAAG,CAAC,aAAa,mCAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QAC7E,IAAM,WAAW,GAAG,gBAAgB,CAAC,MAAA,MAAA,GAAG,CAAC,YAAY,mCAAI,GAAG,CAAC,WAAW,mCAAI,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC;QAC1G,IAAM,YAAY,GAAG,gBAAgB,CAAC,MAAA,GAAG,CAAC,aAAa,mCAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QAC7E,IAAM,SAAS,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,IAAI,qBAAqB,GAAG,WAAW,CAAC;QACxC,IAAI,2BAA2B,GAAG,iBAAiB,CAAC;QACpD,IAAI,sBAAsB,GAAG,YAAY,CAAC;QAC1C,IAAI,qBAAqB,GAAG,WAAW,CAAC;QACxC,IAAI,sBAAsB,GAAG,YAAY,CAAC;QAC1C,IAAI,SAAS,EAAE,CAAC;YACf,IAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,QAAQ;mBACR,WAAW,IAAI,QAAQ,CAAC,WAAW;mBACnC,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB;mBAC/C,YAAY,IAAI,QAAQ,CAAC,YAAY;mBACrC,WAAW,IAAI,QAAQ,CAAC,WAAW;mBACnC,YAAY,IAAI,QAAQ,CAAC,YAAY,EACvC,CAAC;gBACF,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACxE,2BAA2B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAC1F,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAC3E,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACxE,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC5E,CAAC;YACD,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE;gBAC/B,WAAW,aAAA;gBACX,iBAAiB,mBAAA;gBACjB,YAAY,cAAA;gBACZ,WAAW,aAAA;gBACX,YAAY,cAAA;aACZ,CAAC,CAAC;QACJ,CAAC;QACD,IAAM,mBAAmB,GAAG,qBAAqB,IAAI,CAAC,qBAAqB,GAAG,sBAAsB,CAAC,CAAC;QACtG,IAAM,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,sBACH,GAAG,KACN,YAAY,EAAE,qBAAqB,EACnC,WAAW,EAAE,qBAAqB,EAClC,mBAAmB,EAAE,2BAA2B,EAChD,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,sBAAsB,EACrC,YAAY,EAAE,sBAAsB,EACpC,YAAY,EAAE,mBAAmB,EACjC,WAAW,EAAE,mBAAmB,EAChC,aAAa,EAAE,oBAAoB,EACnC,YAAY,EAAE,oBAAoB,GAC7B,CAAC;IACR,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAAW,EAAE,KAAU,EAAE,GAAS;;IAArB,sBAAA,EAAA,UAAU;IAAE,oBAAA,EAAA,SAAS;IACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,IAAM,MAAM,GAAa,EAAE,CAAC;;QAC5B,KAAoB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE,CAAC;YAAxB,IAAM,KAAK,mBAAA;YACf,IAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACzC,IAAI,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC5B,MAAM;YACP,CAAC;QACF,CAAC;;;;;;;;;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAU;IACvC,IAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/E,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC9E,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAChF,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,oBAAoB,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QACjE,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAU;IACzC,IAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/E,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QAC/D,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QACjE,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,SAAS,QAAQ,CAChB,GAAW,EACX,KAAa,EACb,MAAuB,EACvB,MAAc,EACd,YAA2B,EAC3B,GAAmB,EACnB,QAA8B;IAF9B,6BAAA,EAAA,iBAA2B;IAI3B,kBACC,GAAG,KAAA,EACH,KAAK,OAAA,EACL,MAAM,QAAA,EACN,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAC/B,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,EAC9C,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,IACpB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,UAAA,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAChC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAA2C;IACnE,OAAO,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,MAAM,CAAC,MAA2C;IAC1D,OAAO,MAAM,KAAK,MAAM,CAAC;AAC1B,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAoC;IACjE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,uBACxD,KAAK,KACR,IAAI,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,GAAG,CAAC,IAAI,aAAa,EAClD,MAAM,EAAE,oBAAoB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,EAC3C,OAAO,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,IAAI,CAAC,EACxC,IAAI,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,GAAG,CAAC,IAChC,EAN0D,CAM1D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAoC;IACjE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,uBACxD,KAAK,KACR,KAAK,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,EAC1C,MAAM,EAAE,oBAAoB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,EAC3C,UAAU,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,EAAE,GAAG,CAAC,EAC7C,OAAO,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,IAAI,CAAC,EACxC,OAAO,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,IAAI,CAAC,EACxC,aAAa,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,EAAE,EAAE,EAAE,GAAG,CAAC,EACvD,aAAa,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,EAAE,EAAE,EAAE,GAAG,CAAC,IACtD,EAT0D,CAS1D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,2BAA2B,CAAC,MAA2C;IAC/E,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,uBACxD,KAAK,KACR,SAAS,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,EAAE,IAAI,CAAC,IAAI,oBAAoB,EACpE,MAAM,EAAE,oBAAoB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,EAC3C,QAAQ,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE,GAAG,CAAC,EACzC,KAAK,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,GAAG,CAAC,EACnC,MAAM,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE,GAAG,CAAC,EACrC,QAAQ,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE,IAAI,CAAC,EAC1C,QAAQ,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE,IAAI,CAAC,EAC1C,SAAS,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,EAAE,IAAI,CAAC,EAC5C,aAAa,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,EAAE,EAAE,EAAE,GAAG,CAAC,EACvD,OAAO,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,IAAI,CAAC,IACvC,EAZ0D,CAY1D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qCAAqC,CAAC,UAAmC;;IACjF,IAAM,KAAK,GAAa,EAAE,CAAC;;QAC3B,KAAwB,IAAA,eAAA,SAAA,UAAU,CAAA,sCAAA,8DAAE,CAAC;YAAhC,IAAM,SAAS,uBAAA;;gBACnB,KAA2B,IAAA,oBAAA,SAAA,SAAS,CAAC,aAAa,IAAI,EAAE,CAAA,CAAA,gBAAA,4BAAE,CAAC;oBAAtD,IAAM,YAAY,WAAA;oBACtB,IAAI,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;wBACnD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC1B,CAAC;gBACF,CAAC;;;;;;;;;QACF,CAAC;;;;;;;;;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAgB,YAAY,CAAC,KAA+B;IAA/B,sBAAA,EAAA,UAA+B;IAC3D,IAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO;QAC5B,CAAC,uBACG,KAAK,CAAC,OAAO,KAChB,MAAM,EAAE,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACpD,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,EAC9C,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,EACxD,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,IAEhD,CAAC,CAAC,SAAS,CAAC;IACb,IAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAM,kBAAkB,GAAG,2BAA2B,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACjF,IAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,IAAM,WAAW,GAAsB,EAAE,CAAC;IAE1C,IAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAA7B,CAA6B,CAAC,CAAC;IACjF,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,qEAA8D,WAAW,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,UAAG,KAAK,CAAC,IAAI,eAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAE,EAAjD,CAAiD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,EACxJ,WAAW,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,IAAI,IAAI,EAAE,EAAhB,CAAgB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAC5D,GAAG,EACH,EAAE,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,IAAI,EAAV,CAAU,CAAC,EAAE,CACzD,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACnI,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,4CAA4C,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5H,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,CAAC,EAAE,CAAC;QAClH,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,YAAY,EACZ,eAAe,EACf,MAAM,EACN,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI;YAC3D,CAAC,CAAC,oEAAoE;YACtE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,yCAAyC,CAAC,EACjE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAClD,GAAG,EACH,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAClC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACrI,CAAC;IACD,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,gCAAgC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9J,CAAC;IAED,IAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAzD,CAAyD,CAAC,CAAC;IACnH,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAC9B,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,EACN,8DAAuD,iBAAiB,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,UAAG,KAAK,CAAC,KAAK,eAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAE,EAAnE,CAAmE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,EACzK,iBAAiB,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,IAAI,EAAE,EAAtB,CAAsB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EACxE,GAAG,CACH,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACnI,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAApB,CAAoB,CAAC,EAAE,CAAC;QACvD,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,EACN,qGAAqG,EACrG,WAAW,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,IAAI,EAAE,EAAtB,CAAsB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAClE,GAAG,CACH,CAAC,CAAC;IACJ,CAAC;IAED,IAAM,wBAAwB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAC,SAAS,IAAK,OAAA,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAjC,CAAiC,CAAC,CAAC;IAC7G,IAAI,wBAAwB,CAAC,MAAM,EAAE,CAAC;QACrC,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,EACN,oDAA6C,wBAAwB,CAAC,GAAG,CAAC,UAAC,SAAS,IAAK,OAAA,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,EAA9D,CAA8D,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,EACrK,qCAAqC,CAAC,wBAAwB,CAAC,EAC/D,GAAG,CACH,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAChJ,CAAC;IAED,IAAM,wBAAwB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAC,SAAS,IAAK,OAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAxB,CAAwB,CAAC,CAAC;IACpG,IAAI,wBAAwB,CAAC,MAAM,EAAE,CAAC;QACrC,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,EACN,6DAA6D,EAC7D,qCAAqC,CAAC,wBAAwB,CAAC,EAC/D,GAAG,EACH,EAAE,iBAAiB,EAAE,wBAAwB,CAAC,GAAG,CAAC,UAAC,SAAS,IAAK,OAAA,SAAS,CAAC,SAAS,EAAnB,CAAmB,CAAC,EAAE,CACvF,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAChJ,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAApB,CAAoB,CAAC,EAAE,CAAC;QACvD,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,uBAAuB,EACvB,oBAAoB,EACpB,SAAS,EACT,gHAAgH,EAChH,EAAE,EACF,GAAG,CACH,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACtI,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,uBAAuB,EACvB,oBAAoB,EACpB,SAAS,EACT,8CAA8C,EAC9C,EAAE,EACF,GAAG,CACH,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACjI,CAAC;AAED,SAAS,cAAc,CAAC,KAAqC;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAK,KAAiB,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAE,KAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QACjF,OAAO,KAAgB,CAAC;IACzB,CAAC;IACD,OAAO,YAAY,CAAC,KAA4B,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAU;IACpC,IAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,OAAO,CAAC,CAAC,UAAU,IAAI,+FAA+F,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzI,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAU;IACpC,IAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,OAAO,CAAC,CAAC,UAAU,IAAI,gFAAgF,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1H,CAAC;AAED,SAAS,WAAW,CAAC,KAAwB,EAAE,IAAqB;IACnE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAtF,CAAsF,CAAC,EAAE,CAAC;QACnH,OAAO;IACR,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC;AAED,SAAgB,oBAAoB,CAAC,KAA6B;;IAA7B,sBAAA,EAAA,UAA6B;IACjE,IAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,0BAAK,KAAK,CAAC,KAAK,UAAE,CAAC,CAAC,EAAE,CAAC;IACjE,IAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAM,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,EAAE,EAAE,CAAC;;YACR,KAAmB,IAAA,KAAA,SAAA,EAAE,CAAC,WAAW,CAAA,gBAAA,4BAAE,CAAC;gBAA/B,IAAM,IAAI,WAAA;gBACd,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1B,CAAC;;;;;;;;;IACF,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QAClC,OAAO;YACN,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE,8BAA8B;YACtC,UAAU,EAAE,kDAAkD;YAC9D,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,uCAAuC,CAAC,IAAI,CAAC,UAAG,KAAK,CAAC,MAAM,IAAI,EAAE,cAAI,KAAK,CAAC,KAAK,IAAI,EAAE,CAAE,CAAC,EAAE,CAAC;QAC1H,OAAO;YACN,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,wDAAwD;YAChE,UAAU,EAAE,wDAAwD;YACpE,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC7B,OAAO;YACN,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,8BAA8B;YACtC,UAAU,EAAE,+CAA+C;YAC3D,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAM,uBAAuB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,qBAAqB,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,EAA3F,CAA2F,CAAC,CAAC;IAClJ,IAAI,uBAAuB,EAAE,CAAC;QAC7B,OAAO;YACN,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,gFAAyE,uBAAuB,CAAC,MAAM,CAAE;YACjH,UAAU,EAAE,mIAAmI;YAC/I,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAM,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,8BAA8B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAxE,CAAwE,CAAC,CAAC;IAC9H,IAAI,sBAAsB,EAAE,CAAC;QAC5B,OAAO;YACN,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE,wDAAiD,sBAAsB,CAAC,MAAM,CAAE;YACxF,UAAU,EAAE,4GAA4G;YACxH,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAM,uCAAuC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,iCAAiC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAA3E,CAA2E,CAAC,CAAC;IAClJ,IAAI,uCAAuC,EAAE,CAAC;QAC7C,OAAO;YACN,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE,yEAAkE,uCAAuC,CAAC,MAAM,CAAE;YAC1H,UAAU,EAAE,yJAAyJ;YACrK,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,cAAc,EAAE,CAAC;QACpC,OAAO;YACN,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,qDAAqD;YAC7D,UAAU,EAAE,qGAAqG;YACjH,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,gBAAgB,EAAE,CAAC;QACtC,OAAO;YACN,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,6CAA6C;YACrD,UAAU,EAAE,sEAAsE;YAClF,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,cAAc,EAAE,CAAC;QACpC,OAAO;YACN,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,mDAAmD;YAC3D,UAAU,EAAE,yEAAyE;YACrF,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAM,iCAAiC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,0BAA0B,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,EAAhG,CAAgG,CAAC,CAAC;IACjK,IAAI,iCAAiC,EAAE,CAAC;QACvC,IAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,KAAK,IAAI,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,iBAAiB,CAAC,UAAG,KAAK,CAAC,MAAM,IAAI,EAAE,cAAI,KAAK,CAAC,KAAK,IAAI,EAAE,CAAE,CAAC,CAAC;QACxM,OAAO;YACN,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;YACxD,MAAM,EAAE,cAAc;gBACrB,CAAC,CAAC,wEAAiE,iCAAiC,CAAC,MAAM,CAAE;gBAC7G,CAAC,CAAC,4EAAqE,iCAAiC,CAAC,MAAM,CAAE;YAClH,UAAU,EAAE,yJAAyJ;YACrK,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAM,oCAAoC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,8BAA8B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAxE,CAAwE,CAAC,CAAC;IAC5I,IACC,oCAAoC;WACjC,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,2BAA2B;WAC3C,KAAK,CAAC,eAAe,KAAK,IAAI;WAC9B,CAAC,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC,EAC3C,CAAC;QACF,OAAO;YACN,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE,uFAAgF,oCAAoC,CAAC,MAAM,CAAE;YACrI,UAAU,EAAE,0MAA0M;YACtN,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAM,qCAAqC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,gCAAgC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,EAAtG,CAAsG,CAAC,CAAC;IAC3K,IAAI,KAAK,CAAC,MAAM,KAAK,gBAAgB,IAAI,qCAAqC,EAAE,CAAC;QAChF,IAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,KAAK,IAAI;eAClD,KAAK,CAAC,eAAe,KAAK,IAAI;eAC9B,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC;eACxC,iBAAiB,CAAC,UAAG,KAAK,CAAC,MAAM,IAAI,EAAE,cAAI,KAAK,CAAC,KAAK,IAAI,EAAE,CAAE,CAAC,CAAC;QACpE,OAAO;YACN,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;YACxD,MAAM,EAAE,cAAc;gBACrB,CAAC,CAAC,8EAAuE,qCAAqC,CAAC,MAAM,CAAE;gBACvH,CAAC,CAAC,wFAAiF,qCAAqC,CAAC,MAAM,CAAE;YAClI,UAAU,EAAE,gIAAgI;YAC5I,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,iBAAiB,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,YAAY,EAAE,CAAC;QACvE,OAAO;YACN,OAAO,EAAE,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;YACxE,MAAM,EAAE,KAAK,CAAC,eAAe,KAAK,IAAI;gBACrC,CAAC,CAAC,sFAAsF;gBACxF,CAAC,CAAC,8DAA8D;YACjE,UAAU,EAAE,2FAA2F;YACvG,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,2BAA2B,EAAE,CAAC;QACjD,OAAO;YACN,OAAO,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe;YAC/D,MAAM,EAAE,2CAA2C;YACnD,UAAU,EAAE,iEAAiE;YAC7E,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAM,eAAe,GAAG,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,2BAA2B,CAAC;IACpE,IAAM,eAAe,GAAG,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACnG,IAAM,eAAe,GAAa,EAAE,CAAC;IACrC,IAAI,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3C,eAAe,CAAC,IAAI,CAAC,iBAAU,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,iBAAiB,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5C,eAAe,CAAC,IAAI,CAAC,kBAAW,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,iBAAiB,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/C,eAAe,CAAC,IAAI,CAAC,sBAAe,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,EAAE,CAAC;QACpE,WAAW,CAAC,KAAK,EAAE,QAAQ,CAC1B,SAAS,EACT,gBAAgB,EAChB,MAAM,EACN,uFAAgF,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAG,EAC7G,EAAE,EACF,GAAG,CACH,CAAC,CAAC;QACH,OAAO;YACN,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,mDAA4C,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAG;YACjF,UAAU,EAAE,6EAA6E;YACzF,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAI,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,WAAW,CAAC,KAAK,EAAE,QAAQ,CAC1B,6BAA6B,EAC7B,oBAAoB,EACpB,SAAS,EACT,gFAAgF,EAChF,EAAE,EACF,GAAG,CACH,CAAC,CAAC;QACH,OAAO;YACN,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,yCAAyC;YACjD,UAAU,EAAE,qEAAqE;YACjF,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAM,WAAW,GAAG,UAAG,KAAK,CAAC,MAAM,IAAI,EAAE,cAAI,KAAK,CAAC,KAAK,IAAI,EAAE,CAAE,CAAC;IACjE,IAAI,CAAC,KAAK,CAAC,gBAAgB,KAAK,IAAI,IAAI,iBAAiB,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,IAAI,eAAe,EAAE,CAAC;QAC/G,OAAO;YACN,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,8EAA8E;YACtF,UAAU,EAAE,4BAA4B;YACxC,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAI,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,OAAO;YACN,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,wDAAwD;YAChE,UAAU,EAAE,+DAA+D;YAC3E,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,OAAO;QACN,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,oEAAoE;QAC5E,UAAU,EAAE,8FAA8F;QAC1G,KAAK,OAAA;QACL,QAAQ,UAAA;QACR,UAAU,EAAE,GAAG;KACf,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,KAa1B;IACA,IAAM,QAAQ,GAAG,KAAK,CAAC,OAAO;QAC7B,CAAC,CAAC;YACD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;YAC9B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;YAClC,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;SAC7B;QACD,CAAC,CAAC,oBAAoB,CAAC;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,GAAG,EAAE,KAAK,CAAC,GAAG;SACd,CAAC,CAAC;IACJ,OAAO;QACN,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;QAChC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACvD,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACxB,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,OAAoC;;;IAApC,wBAAA,EAAA,YAAoC;IAClE,IAAM,IAAI,GAAc;QACvB,WAAW,EAAE,CAAC;QACd,iBAAiB,EAAE,CAAC;QACpB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,kBAAkB,EAAE,CAAC;QACrB,qBAAqB,EAAE,CAAC;QACxB,iBAAiB,EAAE,EAAE;KACrB,CAAC;;QACF,KAAoB,IAAA,KAAA,SAAA,kCAAkC,CAAC,OAAO,CAAC,CAAA,gBAAA,4BAAE,CAAC;YAA7D,IAAM,KAAK,WAAA;YACf,IAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC;YAC7D,IAAM,MAAM,GAAG,SAAS,CAAC,MAAA,KAAK,CAAC,YAAY,mCAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;YACnF,IAAM,OAAO,GAAG,SAAS,CAAC,MAAA,KAAK,CAAC,aAAa,mCAAI,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;YACtF,IAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,KAAK,cAAc,CAAC;YAClG,IAAM,WAAW,GAAG,KAAK,CAAC,YAAY,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC;YAC9E,IAAM,eAAe,GAAG,SAAS,CAAC,MAAA,KAAK,CAAC,gBAAgB,mCAAI,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YACxF,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC1C,IAAM,WAAW,GAAG,MAAM,CAAC,MAAA,MAAA,KAAK,CAAC,YAAY,mCAAI,KAAK,CAAC,WAAW,mCAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9E,IAAM,iBAAiB,GAAG,MAAM,CAAC,MAAA,MAAA,KAAK,CAAC,mBAAmB,mCAAI,KAAK,CAAC,iBAAiB,mCAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACjG,IAAM,YAAY,GAAG,MAAM,CAAC,MAAA,MAAA,KAAK,CAAC,aAAa,mCAAI,KAAK,CAAC,YAAY,mCAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACjF,IAAM,WAAW,GAAG,MAAM,CAAC,MAAA,MAAA,KAAK,CAAC,YAAY,mCAAI,KAAK,CAAC,WAAW,mCAAI,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;YACzG,IAAM,YAAY,GAAG,MAAM,CAAC,MAAA,MAAA,KAAK,CAAC,aAAa,mCAAI,KAAK,CAAC,YAAY,mCAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACjF,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;YAChC,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC;YAC5C,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC;YAClC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;YAChC,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC;YAClC,IAAI,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC;YAC/E,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC;gBACpF,IAAM,OAAO,GAAG,eAAe,IAAI,UAAG,MAAM,4DAAyD,CAAC;gBACtG,IAAI,OAAO,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,iBAAiB,0CAAE,QAAQ,CAAC,OAAO,CAAC,CAAA,EAAE,CAAC;oBAC3D,MAAA,IAAI,CAAC,iBAAiB,0CAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvC,CAAC;YACF,CAAC;YACD,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG;oBAC3B,WAAW,EAAE,CAAC;oBACd,iBAAiB,EAAE,CAAC;oBACpB,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,KAAK,EAAE,CAAC;iBACR,CAAC;YACH,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC;YACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,iBAAiB,IAAI,iBAAiB,CAAC;YACjE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC;YACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAG,MAAM,CAAC,CAAA,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAQ,CAAC,MAAM,CAAC,GAAG;oBACvB,WAAW,EAAE,CAAC;oBACd,iBAAiB,EAAE,CAAC;oBACpB,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,KAAK,EAAE,CAAC;oBACR,WAAW,EAAE,CAAC;oBACd,cAAc,EAAE,CAAC;iBACjB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,iBAAiB,IAAI,iBAAiB,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC;YAClD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC;YAClD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAChC,IAAI,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,OAAO,CAAC,CAAA,EAAE,CAAC;gBAC/B,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,GAAG;oBACzB,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,KAAK,EAAE,CAAC;iBACR,CAAC;YACH,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACnC,CAAC;;;;;;;;;IACD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;QACxF,KAAuB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA,gBAAA,4BAAE,CAAC;YAAjD,IAAM,QAAQ,WAAA;YAClB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG,CAAC;;;;;;;;;;QACD,KAAqB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA,gBAAA,4BAAE,CAAC;YAAlD,IAAM,MAAM,WAAA;YAChB,IAAI,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC;;;;;;;;;;QACD,KAAsB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA,gBAAA,4BAAE,CAAC;YAApD,IAAM,OAAO,WAAA;YACjB,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,CAAC;;;;;;;;;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAgB,0BAA0B,CAAC,OAA6B;IACvE,IAAM,MAAM,GAAG,UAAC,KAAa,IAAa,OAAA,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;SAC9D,OAAO,CAAC,oCAAoC,EAAE,sBAAsB,CAAC;SACrE,OAAO,CAAC,8CAA8C,EAAE,mBAAmB,CAAC;SAC5E,OAAO,CAAC,mDAAmD,EAAE,kBAAkB,CAAC,EAHxC,CAGwC,CAAC;IACnF,6BACI,OAAO,KACV,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAC1C,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAC5C,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAC1D;AACH,CAAC","file":"ai-run-evidence.js","sourcesContent":["export type AIRunSource =\n\t| 'support_ticket'\n\t| 'aicoder_app'\n\t| 'ai_assistant'\n\t| 'qa_runner'\n\t| 'unknown';\n\nexport type AIRunOutcomeLabel =\n\t| 'accepted'\n\t| 'rejected'\n\t| 'qa_incomplete'\n\t| 'qa_infra_failed'\n\t| 'build_failed'\n\t| 'release_blocked'\n\t| 'manual_handoff'\n\t| 'false_pass'\n\t| 'stopped'\n\t| 'unknown';\n\nexport type AIRunEventType =\n\t| 'model_call'\n\t| 'log'\n\t| 'qa_infra'\n\t| 'qa_compile'\n\t| 'qa_route_probe'\n\t| 'qa_business_assertion'\n\t| 'scorecard'\n\t| 'deploy'\n\t| 'publish'\n\t| 'hotfix'\n\t| 'assistant_message'\n\t| 'assistant_query'\n\t| 'git_commit'\n\t| 'usage'\n\t| 'human_intervention';\n\nexport type AIRunGateStatus = 'pass' | 'fail' | 'warn' | 'blocked' | 'skipped';\n\nexport type AIQaCheckStatus = 'pass' | 'fail' | 'blocked' | 'warn' | 'skipped' | 'unknown';\n\nexport type AIQaCompileStatus = 'pass' | 'fail' | 'blocked' | 'stale' | 'skipped' | 'unknown';\n\nexport type AIQaOutcome =\n\t| 'infra_failed'\n\t| 'compile_failed'\n\t| 'route_failed'\n\t| 'route_only_pass'\n\t| 'business_assertion_passed'\n\t| 'business_assertion_failed'\n\t| 'incomplete';\n\nexport interface AIRunEvent {\n\tid?: string;\n\ttype: AIRunEventType;\n\tsource?: AIRunSource | string;\n\tmessage?: string;\n\tcategory?: string;\n\tartifactPaths?: string[];\n\tmetadata?: Record<string, any>;\n\trecordedAt?: Date | string;\n}\n\nexport interface AIRunGateResult {\n\tkey: string;\n\tlabel: string;\n\tstatus: AIRunGateStatus;\n\treason: string;\n\tevidenceRefs: string[];\n\trecordedAt: string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIRunCost {\n\tinputTokens: number;\n\tcachedInputTokens: number;\n\toutputTokens: number;\n\ttotalTokens: number;\n\testimatedUsd: number;\n\tmodels: string[];\n\tcategories: Record<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tsources?: Record<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t\tmanualCount: number;\n\t\tuntrackedCount: number;\n\t}>;\n\tsurfaces?: Record<string, {\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tmanualEstimatedUsd?: number;\n\tuntrackedEstimatedUsd?: number;\n\tuntrackedWarnings?: string[];\n\twallTimeMs?: number;\n\tretries?: number;\n}\n\nexport interface OpenAIUsageCostEntry {\n\tmodel?: string;\n\tcategory?: string;\n\tid_request?: string;\n\tidRequest?: string;\n\tid_conversation?: string;\n\tidConversation?: string;\n\ttimestamp?: Date | string;\n\tinput_tokens?: number;\n\tinputTokens?: number;\n\tcached_input_tokens?: number;\n\tcachedInputTokens?: number;\n\toutput_tokens?: number;\n\toutputTokens?: number;\n\ttotal_tokens?: number;\n\ttotalTokens?: number;\n\tcost_estimate?: number;\n\testimatedUsd?: number;\n\tusage_source?: string;\n\tusageSource?: string;\n\tusage_surface?: string;\n\tusageSurface?: string;\n\tusage_phase?: string;\n\tusagePhase?: string;\n\tcost_basis?: string;\n\tcostBasis?: string;\n\tis_manual?: boolean;\n\tisManual?: boolean;\n\tis_untracked?: boolean;\n\tisUntracked?: boolean;\n\tuntracked_reason?: string;\n\tuntrackedReason?: string;\n\t[key: string]: any;\n}\n\nexport interface AIQaInfraCheck {\n\tname: string;\n\tstatus: AIQaCheckStatus;\n\tmessage?: string;\n\tpath?: string;\n\tdurationMs?: number;\n\tmetadata?: Record<string, any>;\n\tcheckedAt?: Date | string;\n}\n\nexport interface AIQaCompileResult {\n\tstatus: AIQaCompileStatus;\n\tcommand?: string;\n\tartifactPath?: string;\n\tmessage?: string;\n\tdurationMs?: number;\n\tstaleEvidence?: boolean;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaRouteProbe {\n\troute: string;\n\tstatus: AIQaCheckStatus;\n\tscreenshot?: string;\n\tcaption?: string;\n\tshellOnly?: boolean;\n\tauthenticated?: boolean;\n\tconsoleErrors?: string[];\n\tnetworkErrors?: string[];\n\tmessage?: string;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaBusinessAssertion {\n\tassertion: string;\n\tstatus: AIQaCheckStatus;\n\tworkflow?: string;\n\troute?: string;\n\taction?: string;\n\texpected?: string;\n\tobserved?: string;\n\tdataProof?: string;\n\tmongoDelta?: Record<string, any>;\n\tartifactPaths?: string[];\n\tmessage?: string;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaArtifact {\n\ttype: 'screenshot' | 'trace' | 'console_log' | 'network_log' | 'coverage_matrix' | 'seed_data' | 'script' | 'other';\n\tpath?: string;\n\turl?: string;\n\ttitle?: string;\n\tcaption?: string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaRun {\n\toutcome: AIQaOutcome;\n\tinfraChecks: AIQaInfraCheck[];\n\tcompile?: AIQaCompileResult;\n\trouteProbes: AIQaRouteProbe[];\n\tbusinessAssertions: AIQaBusinessAssertion[];\n\tartifacts: AIQaArtifact[];\n\tgateResults: AIRunGateResult[];\n\tupdatedAt: string;\n}\n\nexport interface AIRun {\n\tid?: string;\n\tsource: AIRunSource;\n\tsourceIds: Record<string, string>;\n\ttitle?: string;\n\tstatus?: string;\n\tphase?: string;\n\tstartedAt?: Date | string;\n\tcompletedAt?: Date | string;\n\toutcome: AIRunOutcomeLabel;\n\tevents: AIRunEvent[];\n\tgates: AIRunGateResult[];\n\tqa?: AIQaRun;\n\tcost?: AIRunCost;\n\tnextAction?: string;\n\twarnings?: string[];\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIRunTrainingExample {\n\trunId: string;\n\tsource: AIRunSource;\n\tinputSummary: string;\n\tactionSummary: string;\n\toutcome: AIRunOutcomeLabel;\n\tevidence: string[];\n\tcost?: AIRunCost;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaEvaluationInput {\n\tinfraChecks?: AIQaInfraCheck[];\n\tcompile?: AIQaCompileResult;\n\trouteProbes?: AIQaRouteProbe[];\n\tbusinessAssertions?: AIQaBusinessAssertion[];\n\tartifacts?: AIQaArtifact[];\n\tnow?: Date | string;\n}\n\nexport interface AIRunOutcomeInput {\n\tsource?: AIRunSource;\n\tstatus?: string;\n\tphase?: string;\n\tqa?: AIQaRun | AIQaEvaluationInput;\n\tgates?: AIRunGateResult[];\n\tscorecardPassed?: boolean;\n\tscorecardStatus?: string;\n\tdeployStatus?: string;\n\tpublishStatus?: string;\n\tsampleDataStatus?: string;\n\tmanualHandoff?: boolean;\n\tstopped?: boolean;\n\trejected?: boolean;\n\texplicitAccepted?: boolean;\n\tterminal?: boolean;\n\tnow?: Date | string;\n}\n\nexport interface AIRunOutcomeDecision {\n\toutcome: AIRunOutcomeLabel;\n\treason: string;\n\tnextAction: string;\n\tgates: AIRunGateResult[];\n\twarnings: string[];\n\trecordedAt: string;\n}\n\nfunction isoNow(value?: Date | string): string {\n\tif (value instanceof Date) {\n\t\treturn value.toISOString();\n\t}\n\tconst parsed = value ? new Date(value) : new Date();\n\tif (Number.isFinite(parsed.getTime())) {\n\t\treturn parsed.toISOString();\n\t}\n\treturn new Date().toISOString();\n}\n\nfunction cleanText(value: any, max = 1000): string {\n\treturn String(value || '').replace(/\\s+/g, ' ').trim().slice(0, max);\n}\n\nfunction cleanUsageNumber(value: any): number {\n\tconst parsed = Number(value);\n\treturn Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction cleanUsageDate(value: any): Date | undefined {\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\tconst date = value instanceof Date ? value : new Date(value);\n\treturn Number.isFinite(date.getTime()) ? date : undefined;\n}\n\nexport function isCumulativeCodexUsageEntry(entry: OpenAIUsageCostEntry): boolean {\n\treturn cleanText(entry?.category, 180).toLowerCase().startsWith('ai-dashboard-codex:');\n}\n\nexport function resolveOpenAIUsageThreadKey(entry: OpenAIUsageCostEntry): string {\n\tconst conversationId = cleanText(entry?.id_conversation ?? entry?.idConversation, 240);\n\tif (conversationId) {\n\t\treturn conversationId;\n\t}\n\treturn cleanText(entry?.id_request ?? entry?.idRequest, 240);\n}\n\nexport function normalizeOpenAIUsageRowsForCosting<T extends OpenAIUsageCostEntry>(rows: T[] = []): T[] {\n\tif (!Array.isArray(rows) || !rows.length) {\n\t\treturn [];\n\t}\n\tconst sortedRows = rows\n\t\t.map((row, index) => ({\n\t\t\t...row,\n\t\t\t_sortIndex: index\n\t\t}))\n\t\t.sort((a, b) => {\n\t\t\tconst timeA = cleanUsageDate(a.timestamp)?.getTime() || 0;\n\t\t\tconst timeB = cleanUsageDate(b.timestamp)?.getTime() || 0;\n\t\t\tif (timeA !== timeB) {\n\t\t\t\treturn timeA - timeB;\n\t\t\t}\n\t\t\tconst requestCompare = cleanText(a.id_request ?? a.idRequest, 240)\n\t\t\t\t.localeCompare(cleanText(b.id_request ?? b.idRequest, 240));\n\t\t\tif (requestCompare) {\n\t\t\t\treturn requestCompare;\n\t\t\t}\n\t\t\tconst conversationCompare = cleanText(a.id_conversation ?? a.idConversation, 240)\n\t\t\t\t.localeCompare(cleanText(b.id_conversation ?? b.idConversation, 240));\n\t\t\tif (conversationCompare) {\n\t\t\t\treturn conversationCompare;\n\t\t\t}\n\t\t\treturn cleanUsageNumber(a._sortIndex) - cleanUsageNumber(b._sortIndex);\n\t\t});\n\tconst previousByThread = new Map<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t}>();\n\treturn sortedRows.map((row) => {\n\t\tconst inputTokens = cleanUsageNumber(row.input_tokens ?? row.inputTokens);\n\t\tconst cachedInputTokens = cleanUsageNumber(row.cached_input_tokens ?? row.cachedInputTokens);\n\t\tconst outputTokens = cleanUsageNumber(row.output_tokens ?? row.outputTokens);\n\t\tconst totalTokens = cleanUsageNumber(row.total_tokens ?? row.totalTokens ?? (inputTokens + outputTokens));\n\t\tconst estimatedUsd = cleanUsageNumber(row.cost_estimate ?? row.estimatedUsd);\n\t\tconst threadKey = isCumulativeCodexUsageEntry(row) ? resolveOpenAIUsageThreadKey(row) : '';\n\t\tlet normalizedInputTokens = inputTokens;\n\t\tlet normalizedCachedInputTokens = cachedInputTokens;\n\t\tlet normalizedOutputTokens = outputTokens;\n\t\tlet normalizedTotalTokens = totalTokens;\n\t\tlet normalizedEstimatedUsd = estimatedUsd;\n\t\tif (threadKey) {\n\t\t\tconst previous = previousByThread.get(threadKey);\n\t\t\tif (previous\n\t\t\t\t&& inputTokens >= previous.inputTokens\n\t\t\t\t&& cachedInputTokens >= previous.cachedInputTokens\n\t\t\t\t&& outputTokens >= previous.outputTokens\n\t\t\t\t&& totalTokens >= previous.totalTokens\n\t\t\t\t&& estimatedUsd >= previous.estimatedUsd\n\t\t\t) {\n\t\t\t\tnormalizedInputTokens = Math.max(0, inputTokens - previous.inputTokens);\n\t\t\t\tnormalizedCachedInputTokens = Math.max(0, cachedInputTokens - previous.cachedInputTokens);\n\t\t\t\tnormalizedOutputTokens = Math.max(0, outputTokens - previous.outputTokens);\n\t\t\t\tnormalizedTotalTokens = Math.max(0, totalTokens - previous.totalTokens);\n\t\t\t\tnormalizedEstimatedUsd = Math.max(0, estimatedUsd - previous.estimatedUsd);\n\t\t\t}\n\t\t\tpreviousByThread.set(threadKey, {\n\t\t\t\tinputTokens,\n\t\t\t\tcachedInputTokens,\n\t\t\t\toutputTokens,\n\t\t\t\ttotalTokens,\n\t\t\t\testimatedUsd\n\t\t\t});\n\t\t}\n\t\tconst resolvedTotalTokens = normalizedTotalTokens || (normalizedInputTokens + normalizedOutputTokens);\n\t\tconst resolvedEstimatedUsd = Number(normalizedEstimatedUsd.toFixed(6));\n\t\treturn {\n\t\t\t...row,\n\t\t\tinput_tokens: normalizedInputTokens,\n\t\t\tinputTokens: normalizedInputTokens,\n\t\t\tcached_input_tokens: normalizedCachedInputTokens,\n\t\t\tcachedInputTokens: normalizedCachedInputTokens,\n\t\t\toutput_tokens: normalizedOutputTokens,\n\t\t\toutputTokens: normalizedOutputTokens,\n\t\t\ttotal_tokens: resolvedTotalTokens,\n\t\t\ttotalTokens: resolvedTotalTokens,\n\t\t\tcost_estimate: resolvedEstimatedUsd,\n\t\t\testimatedUsd: resolvedEstimatedUsd\n\t\t} as T;\n\t});\n}\n\nfunction cleanList(values: any, limit = 20, max = 500): string[] {\n\tif (!Array.isArray(values)) {\n\t\treturn [];\n\t}\n\tconst result: string[] = [];\n\tfor (const value of values) {\n\t\tconst normalized = cleanText(value, max);\n\t\tif (normalized && !result.includes(normalized)) {\n\t\t\tresult.push(normalized);\n\t\t}\n\t\tif (result.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction normalizeCheckStatus(value: any): AIQaCheckStatus {\n\tconst normalized = cleanText(value, 40).toLowerCase().replace(/[_\\s-]+/g, '_');\n\tif (normalized === 'passed' || normalized === 'ok' || normalized === 'ready') {\n\t\treturn 'pass';\n\t}\n\tif (normalized === 'failed' || normalized === 'error' || normalized === 'fail') {\n\t\treturn 'fail';\n\t}\n\tif (normalized === 'blocked' || normalized === 'dependency_blocked') {\n\t\treturn 'blocked';\n\t}\n\tif (normalized === 'warning') {\n\t\treturn 'warn';\n\t}\n\tif (normalized === 'skipped' || normalized === 'not_applicable') {\n\t\treturn 'skipped';\n\t}\n\treturn normalized === 'pass' || normalized === 'warn' ? normalized : 'unknown';\n}\n\nfunction normalizeCompileStatus(value: any): AIQaCompileStatus {\n\tconst normalized = cleanText(value, 40).toLowerCase().replace(/[_\\s-]+/g, '_');\n\tif (normalized === 'passed' || normalized === 'ok') {\n\t\treturn 'pass';\n\t}\n\tif (normalized === 'failed' || normalized === 'error') {\n\t\treturn 'fail';\n\t}\n\tif (normalized === 'blocked') {\n\t\treturn 'blocked';\n\t}\n\tif (normalized === 'stale' || normalized === 'stale_evidence') {\n\t\treturn 'stale';\n\t}\n\tif (normalized === 'skipped' || normalized === 'not_applicable') {\n\t\treturn 'skipped';\n\t}\n\treturn normalized === 'pass' || normalized === 'fail' ? normalized : 'unknown';\n}\n\nfunction makeGate(\n\tkey: string,\n\tlabel: string,\n\tstatus: AIRunGateStatus,\n\treason: string,\n\tevidenceRefs: string[] = [],\n\tnow?: Date | string,\n\tmetadata?: Record<string, any>\n): AIRunGateResult {\n\treturn {\n\t\tkey,\n\t\tlabel,\n\t\tstatus,\n\t\treason: cleanText(reason, 1400),\n\t\tevidenceRefs: cleanList(evidenceRefs, 20, 500),\n\t\trecordedAt: isoNow(now),\n\t\t...(metadata ? { metadata } : {})\n\t};\n}\n\nfunction failedOrBlocked(status: AIQaCheckStatus | AIQaCompileStatus): boolean {\n\treturn status === 'fail' || status === 'blocked';\n}\n\nfunction passed(status: AIQaCheckStatus | AIQaCompileStatus): boolean {\n\treturn status === 'pass';\n}\n\nfunction normalizeInfraChecks(values: AIQaInfraCheck[] | undefined): AIQaInfraCheck[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\tname: cleanText(entry?.name, 120) || 'infra_check',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tmessage: cleanText(entry?.message, 1000),\n\t\tpath: cleanText(entry?.path, 500)\n\t}));\n}\n\nfunction normalizeRouteProbes(values: AIQaRouteProbe[] | undefined): AIQaRouteProbe[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\troute: cleanText(entry?.route, 500) || '/',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tscreenshot: cleanText(entry?.screenshot, 500),\n\t\tcaption: cleanText(entry?.caption, 1000),\n\t\tmessage: cleanText(entry?.message, 1000),\n\t\tconsoleErrors: cleanList(entry?.consoleErrors, 30, 500),\n\t\tnetworkErrors: cleanList(entry?.networkErrors, 30, 500)\n\t}));\n}\n\nfunction normalizeBusinessAssertions(values: AIQaBusinessAssertion[] | undefined): AIQaBusinessAssertion[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\tassertion: cleanText(entry?.assertion, 1000) || 'business assertion',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tworkflow: cleanText(entry?.workflow, 400),\n\t\troute: cleanText(entry?.route, 500),\n\t\taction: cleanText(entry?.action, 500),\n\t\texpected: cleanText(entry?.expected, 1000),\n\t\tobserved: cleanText(entry?.observed, 1000),\n\t\tdataProof: cleanText(entry?.dataProof, 1400),\n\t\tartifactPaths: cleanList(entry?.artifactPaths, 30, 500),\n\t\tmessage: cleanText(entry?.message, 1000)\n\t}));\n}\n\nfunction collectBusinessAssertionArtifactPaths(assertions: AIQaBusinessAssertion[]): string[] {\n\tconst paths: string[] = [];\n\tfor (const assertion of assertions) {\n\t\tfor (const artifactPath of assertion.artifactPaths || []) {\n\t\t\tif (artifactPath && !paths.includes(artifactPath)) {\n\t\t\t\tpaths.push(artifactPath);\n\t\t\t}\n\t\t}\n\t}\n\treturn paths;\n}\n\nexport function buildAIQaRun(input: AIQaEvaluationInput = {}): AIQaRun {\n\tconst now = isoNow(input.now);\n\tconst infraChecks = normalizeInfraChecks(input.infraChecks);\n\tconst compile = input.compile\n\t\t? {\n\t\t\t...input.compile,\n\t\t\tstatus: normalizeCompileStatus(input.compile.status),\n\t\t\tcommand: cleanText(input.compile.command, 500),\n\t\t\tartifactPath: cleanText(input.compile.artifactPath, 500),\n\t\t\tmessage: cleanText(input.compile.message, 1000)\n\t\t}\n\t\t: undefined;\n\tconst routeProbes = normalizeRouteProbes(input.routeProbes);\n\tconst businessAssertions = normalizeBusinessAssertions(input.businessAssertions);\n\tconst artifacts = Array.isArray(input.artifacts) ? input.artifacts : [];\n\tconst gateResults: AIRunGateResult[] = [];\n\n\tconst failedInfra = infraChecks.filter((check) => failedOrBlocked(check.status));\n\tif (failedInfra.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_infra',\n\t\t\t'QA infrastructure',\n\t\t\t'blocked',\n\t\t\t`QA infrastructure failed before model/business validation: ${failedInfra.map((check) => `${check.name}: ${check.message || check.status}`).join('; ')}`,\n\t\t\tfailedInfra.map((check) => check.path || '').filter(Boolean),\n\t\t\tnow,\n\t\t\t{ failed_checks: failedInfra.map((check) => check.name) }\n\t\t));\n\t\treturn { outcome: 'infra_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (infraChecks.length) {\n\t\tgateResults.push(makeGate('qa_infra', 'QA infrastructure', 'pass', 'QA infrastructure preflight checks passed.', [], now));\n\t}\n\n\tif (compile && (failedOrBlocked(compile.status) || compile.status === 'stale' || compile.staleEvidence === true)) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_compile',\n\t\t\t'Compile/build',\n\t\t\t'fail',\n\t\t\tcompile.status === 'stale' || compile.staleEvidence === true\n\t\t\t\t? 'Compile/build evidence is stale and cannot be used for acceptance.'\n\t\t\t\t: (compile.message || 'Compile/build failed before browser QA.'),\n\t\t\tcompile.artifactPath ? [compile.artifactPath] : [],\n\t\t\tnow,\n\t\t\t{ command: compile.command || '' }\n\t\t));\n\t\treturn { outcome: 'compile_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (compile && passed(compile.status)) {\n\t\tgateResults.push(makeGate('qa_compile', 'Compile/build', 'pass', 'Compile/build evidence passed.', compile.artifactPath ? [compile.artifactPath] : [], now));\n\t}\n\n\tconst failedRouteProbes = routeProbes.filter((probe) => failedOrBlocked(probe.status) || probe.shellOnly === true);\n\tif (failedRouteProbes.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_route_probe',\n\t\t\t'Browser route probe',\n\t\t\t'fail',\n\t\t\t`Browser route probe failed or showed shell-only UI: ${failedRouteProbes.map((probe) => `${probe.route}: ${probe.message || probe.caption || probe.status}`).join('; ')}`,\n\t\t\tfailedRouteProbes.map((probe) => probe.screenshot || '').filter(Boolean),\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'route_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (routeProbes.some((probe) => passed(probe.status))) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_route_probe',\n\t\t\t'Browser route probe',\n\t\t\t'pass',\n\t\t\t'Browser route reached authenticated application content. This is not business acceptance by itself.',\n\t\t\trouteProbes.map((probe) => probe.screenshot || '').filter(Boolean),\n\t\t\tnow\n\t\t));\n\t}\n\n\tconst failedBusinessAssertions = businessAssertions.filter((assertion) => failedOrBlocked(assertion.status));\n\tif (failedBusinessAssertions.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'fail',\n\t\t\t`Issue-specific workflow assertion failed: ${failedBusinessAssertions.map((assertion) => assertion.message || assertion.observed || assertion.assertion).join('; ')}`,\n\t\t\tcollectBusinessAssertionArtifactPaths(failedBusinessAssertions),\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'business_assertion_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tconst passedBusinessAssertions = businessAssertions.filter((assertion) => passed(assertion.status));\n\tif (passedBusinessAssertions.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'pass',\n\t\t\t'At least one issue-specific workflow/data assertion passed.',\n\t\t\tcollectBusinessAssertionArtifactPaths(passedBusinessAssertions),\n\t\t\tnow,\n\t\t\t{ passed_assertions: passedBusinessAssertions.map((assertion) => assertion.assertion) }\n\t\t));\n\t\treturn { outcome: 'business_assertion_passed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tif (routeProbes.some((probe) => passed(probe.status))) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'blocked',\n\t\t\t'Browser route loaded, but no issue-specific business assertion passed. Route-only proof cannot accept the run.',\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'route_only_pass', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tgateResults.push(makeGate(\n\t\t'qa_business_assertion',\n\t\t'Business assertion',\n\t\t'blocked',\n\t\t'No issue-specific QA assertion was recorded.',\n\t\t[],\n\t\tnow\n\t));\n\treturn { outcome: 'incomplete', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n}\n\nfunction normalizeQaRun(input?: AIQaRun | AIQaEvaluationInput): AIQaRun | undefined {\n\tif (!input) {\n\t\treturn undefined;\n\t}\n\tif ((input as AIQaRun).outcome && Array.isArray((input as AIQaRun).gateResults)) {\n\t\treturn input as AIQaRun;\n\t}\n\treturn buildAIQaRun(input as AIQaEvaluationInput);\n}\n\nfunction statusLooksFailed(value: any): boolean {\n\tconst normalized = cleanText(value, 120).toLowerCase();\n\treturn !!normalized && /(fail|failed|error|blocked|missing|empty|stale|skipped|not ready|not_ready|could not|cannot)/i.test(normalized);\n}\n\nfunction statusLooksPassed(value: any): boolean {\n\tconst normalized = cleanText(value, 120).toLowerCase();\n\treturn !!normalized && /(pass|passed|success|complete|completed|ready|published|deployed|live|merged)/i.test(normalized);\n}\n\nfunction addGateOnce(gates: AIRunGateResult[], gate: AIRunGateResult): void {\n\tif (gates.some((entry) => entry.key === gate.key && entry.status === gate.status && entry.reason === gate.reason)) {\n\t\treturn;\n\t}\n\tgates.push(gate);\n}\n\nexport function classifyAIRunOutcome(input: AIRunOutcomeInput = {}): AIRunOutcomeDecision {\n\tconst now = isoNow(input.now);\n\tconst gates = Array.isArray(input.gates) ? [...input.gates] : [];\n\tconst warnings: string[] = [];\n\tconst qa = normalizeQaRun(input.qa);\n\tif (qa) {\n\t\tfor (const gate of qa.gateResults) {\n\t\t\taddGateOnce(gates, gate);\n\t\t}\n\t}\n\n\tif (input.manualHandoff === true) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: 'Run requires manual handoff.',\n\t\t\tnextAction: 'Ask a human operator to resolve the blocked run.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (input.stopped === true || /stop|stopped|cancel|cancelled|paused/i.test(`${input.status || ''} ${input.phase || ''}`)) {\n\t\treturn {\n\t\t\toutcome: 'stopped',\n\t\t\treason: 'Run was stopped before accepted evidence was recorded.',\n\t\t\tnextAction: 'Resume or restart only if the request is still active.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (input.rejected === true) {\n\t\treturn {\n\t\t\toutcome: 'rejected',\n\t\t\treason: 'Run was explicitly rejected.',\n\t\t\tnextAction: 'Start a repair run from the failing evidence.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst blockedHotfixCommitGate = gates.find((gate) => gate.key === 'hotfix_commit_proof' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (blockedHotfixCommitGate) {\n\t\treturn {\n\t\t\toutcome: 'release_blocked',\n\t\t\treason: `Hotfix cannot be treated as durable until GitHub commit proof passes: ${blockedHotfixCommitGate.reason}`,\n\t\t\tnextAction: 'Commit and push the hotfix to GitHub, record sourceCommitSha/githubCommitUrl/gitPushStatus, then rerun the smallest release gate.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedNoBlindLoopGate = gates.find((gate) => gate.key === 'manager_no_blind_loop_policy' && gate.status === 'blocked');\n\tif (blockedNoBlindLoopGate) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Manager parked the run to avoid a blind loop: ${blockedNoBlindLoopGate.reason}`,\n\t\t\tnextAction: 'Collect new material evidence or approve the specific recovery decision before any more model/code repair.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportDiagnosisBeforeRepairGate = gates.find((gate) => gate.key === 'support_diagnosis_before_repair' && gate.status === 'blocked');\n\tif (blockedSupportDiagnosisBeforeRepairGate) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Support repair is parked until root-cause diagnosis validates: ${blockedSupportDiagnosisBeforeRepairGate.reason}`,\n\t\t\tnextAction: 'Run read-only support diagnosis, record support_diagnosis_gate with owner_files and before/action/after proof, then retry only the owner-scoped repair.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (qa?.outcome === 'infra_failed') {\n\t\treturn {\n\t\t\toutcome: 'qa_infra_failed',\n\t\t\treason: 'QA infrastructure failed before product validation.',\n\t\t\tnextAction: 'Repair QA harness dependencies, ports, browser, Mongo, or startup before another model repair loop.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'compile_failed') {\n\t\treturn {\n\t\t\toutcome: 'build_failed',\n\t\t\treason: 'Compile/build evidence failed or was stale.',\n\t\t\tnextAction: 'Repair compile/build first, then rerun QA from the same failed step.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'route_failed') {\n\t\treturn {\n\t\t\toutcome: 'qa_incomplete',\n\t\t\treason: 'Browser route probe failed before business proof.',\n\t\t\tnextAction: 'Repair route/auth/startup issue and rerun the same browser route probe.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedAICoderJourneyContractGate = gates.find((gate) => gate.key === 'aicoder_journey_contract' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (blockedAICoderJourneyContractGate) {\n\t\tconst claimedSuccess = input.explicitAccepted === true || input.scorecardPassed === true || statusLooksPassed(input.scorecardStatus) || statusLooksPassed(`${input.status || ''} ${input.phase || ''}`);\n\t\treturn {\n\t\t\toutcome: claimedSuccess ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: claimedSuccess\n\t\t\t\t? `AICoder run claimed success without a valid Journey Contract: ${blockedAICoderJourneyContractGate.reason}`\n\t\t\t\t: `AICoder workflow is blocked until the Journey Contract validates: ${blockedAICoderJourneyContractGate.reason}`,\n\t\t\tnextAction: 'Generate or repair docs/APP_JOURNEY_CONTRACT.md, validate first/next/last workflow/data story/QA assertions, then rerun workflow build and workflow QA.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportNextActionContractGate = gates.find((gate) => gate.key === 'support_next_action_contract' && gate.status === 'blocked');\n\tif (\n\t\tblockedSupportNextActionContractGate\n\t\t&& qa?.outcome !== 'business_assertion_passed'\n\t\t&& input.scorecardPassed !== true\n\t\t&& !statusLooksPassed(input.scorecardStatus)\n\t) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Support manager cannot safely continue without a valid next-action contract: ${blockedSupportNextActionContractGate.reason}`,\n\t\t\tnextAction: 'Record one validated next-action contract with safeToAutoRun, canRunWithoutCodexMonitor, codexFallbackRequired, preconditions, stop conditions, and success evidence before another autonomous recovery.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportIssueClassProbePlanGate = gates.find((gate) => gate.key === 'support_issue_class_probe_plan' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (input.source === 'support_ticket' && blockedSupportIssueClassProbePlanGate) {\n\t\tconst claimedSuccess = input.explicitAccepted === true\n\t\t\t|| input.scorecardPassed === true\n\t\t\t|| statusLooksPassed(input.scorecardStatus)\n\t\t\t|| statusLooksPassed(`${input.status || ''} ${input.phase || ''}`);\n\t\treturn {\n\t\t\toutcome: claimedSuccess ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: claimedSuccess\n\t\t\t\t? `Support run claimed success without a valid issue-class probe plan: ${blockedSupportIssueClassProbePlanGate.reason}`\n\t\t\t\t: `Support business proof is blocked until the issue-class probe plan validates: ${blockedSupportIssueClassProbePlanGate.reason}`,\n\t\t\tnextAction: 'Generate or repair the Support IssueClassProbePlan from the diagnosis proof_plan, then rerun issue-specific business proof QA.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'route_only_pass' || qa?.outcome === 'incomplete') {\n\t\treturn {\n\t\t\toutcome: input.scorecardPassed === true ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: input.scorecardPassed === true\n\t\t\t\t? 'Scorecard or workflow status passed without issue-specific business assertion proof.'\n\t\t\t\t: 'QA has not recorded issue-specific business assertion proof.',\n\t\t\tnextAction: 'Add before/action/after workflow proof with screenshot/data assertions before acceptance.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'business_assertion_failed') {\n\t\treturn {\n\t\t\toutcome: input.terminal === true ? 'rejected' : 'qa_incomplete',\n\t\t\treason: 'Issue-specific business assertion failed.',\n\t\t\tnextAction: 'Repair the product/data defect and rerun the failing assertion.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst hasBusinessPass = qa?.outcome === 'business_assertion_passed';\n\tconst scorecardPassed = input.scorecardPassed === true || statusLooksPassed(input.scorecardStatus);\n\tconst releaseBlockers: string[] = [];\n\tif (statusLooksFailed(input.deployStatus)) {\n\t\treleaseBlockers.push(`deploy=${cleanText(input.deployStatus, 120)}`);\n\t}\n\tif (statusLooksFailed(input.publishStatus)) {\n\t\treleaseBlockers.push(`publish=${cleanText(input.publishStatus, 120)}`);\n\t}\n\tif (statusLooksFailed(input.sampleDataStatus)) {\n\t\treleaseBlockers.push(`sample_data=${cleanText(input.sampleDataStatus, 120)}`);\n\t}\n\tif (releaseBlockers.length && (scorecardPassed || hasBusinessPass)) {\n\t\taddGateOnce(gates, makeGate(\n\t\t\t'release',\n\t\t\t'Release/deploy',\n\t\t\t'fail',\n\t\t\t`Final acceptance is blocked after QA/scorecard because release gates failed: ${releaseBlockers.join(', ')}.`,\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn {\n\t\t\toutcome: 'release_blocked',\n\t\t\treason: `Release gates failed after QA/scorecard: ${releaseBlockers.join(', ')}.`,\n\t\t\tnextAction: 'Repair deploy/publish/sample-data coverage before marking the run accepted.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (scorecardPassed && !hasBusinessPass) {\n\t\twarnings.push('scorecard_pass_without_business_assertion');\n\t\taddGateOnce(gates, makeGate(\n\t\t\t'business_assertion_required',\n\t\t\t'Business assertion',\n\t\t\t'blocked',\n\t\t\t'Scorecard passed, but no issue-specific business assertion proof was recorded.',\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn {\n\t\t\toutcome: 'false_pass',\n\t\t\treason: 'Scorecard-only proof is not acceptance.',\n\t\t\tnextAction: 'Record issue-specific workflow/data proof, then reclassify the run.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst statusPhase = `${input.status || ''} ${input.phase || ''}`;\n\tif ((input.explicitAccepted === true || statusLooksPassed(statusPhase) || scorecardPassed) && hasBusinessPass) {\n\t\treturn {\n\t\t\toutcome: 'accepted',\n\t\t\treason: 'Run has terminal success signal and issue-specific business assertion proof.',\n\t\t\tnextAction: 'No repair action required.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (statusLooksFailed(statusPhase)) {\n\t\treturn {\n\t\t\toutcome: 'rejected',\n\t\t\treason: 'Run ended with a failure status and no accepted proof.',\n\t\t\tnextAction: 'Classify the failing gate and rerun the smallest repair step.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\treturn {\n\t\toutcome: 'unknown',\n\t\treason: 'Run does not have enough normalized evidence for a terminal label.',\n\t\tnextAction: 'Ingest QA, deploy, assistant, usage, and commit evidence before using this run for training.',\n\t\tgates,\n\t\twarnings,\n\t\trecordedAt: now\n\t};\n}\n\nexport function buildAIRun(input: Omit<AIRun, 'outcome' | 'gates'> & {\n\toutcome?: AIRunOutcomeLabel;\n\tgates?: AIRunGateResult[];\n\tscorecardPassed?: boolean;\n\tdeployStatus?: string;\n\tpublishStatus?: string;\n\tsampleDataStatus?: string;\n\tmanualHandoff?: boolean;\n\tstopped?: boolean;\n\trejected?: boolean;\n\texplicitAccepted?: boolean;\n\tterminal?: boolean;\n\tnow?: Date | string;\n}): AIRun {\n\tconst decision = input.outcome\n\t\t? {\n\t\t\toutcome: input.outcome,\n\t\t\tgates: input.gates || [],\n\t\t\twarnings: input.warnings || [],\n\t\t\tnextAction: input.nextAction || '',\n\t\t\treason: '',\n\t\t\trecordedAt: isoNow(input.now)\n\t\t}\n\t\t: classifyAIRunOutcome({\n\t\t\tsource: input.source,\n\t\t\tstatus: input.status,\n\t\t\tphase: input.phase,\n\t\t\tqa: input.qa,\n\t\t\tgates: input.gates,\n\t\t\tscorecardPassed: input.scorecardPassed,\n\t\t\tdeployStatus: input.deployStatus,\n\t\t\tpublishStatus: input.publishStatus,\n\t\t\tsampleDataStatus: input.sampleDataStatus,\n\t\t\tmanualHandoff: input.manualHandoff,\n\t\t\tstopped: input.stopped,\n\t\t\trejected: input.rejected,\n\t\t\texplicitAccepted: input.explicitAccepted,\n\t\t\tterminal: input.terminal,\n\t\t\tnow: input.now\n\t\t});\n\treturn {\n\t\tid: input.id,\n\t\tsource: input.source || 'unknown',\n\t\tsourceIds: input.sourceIds || {},\n\t\ttitle: input.title,\n\t\tstatus: input.status,\n\t\tphase: input.phase,\n\t\tstartedAt: input.startedAt,\n\t\tcompletedAt: input.completedAt,\n\t\toutcome: decision.outcome,\n\t\tevents: Array.isArray(input.events) ? input.events : [],\n\t\tgates: decision.gates,\n\t\tqa: normalizeQaRun(input.qa),\n\t\tcost: input.cost,\n\t\tnextAction: decision.nextAction,\n\t\twarnings: decision.warnings,\n\t\tmetadata: input.metadata\n\t};\n}\n\nexport function buildAIRunCost(entries: OpenAIUsageCostEntry[] = []): AIRunCost {\n\tconst cost: AIRunCost = {\n\t\tinputTokens: 0,\n\t\tcachedInputTokens: 0,\n\t\toutputTokens: 0,\n\t\ttotalTokens: 0,\n\t\testimatedUsd: 0,\n\t\tmodels: [],\n\t\tcategories: {},\n\t\tsources: {},\n\t\tsurfaces: {},\n\t\tmanualEstimatedUsd: 0,\n\t\tuntrackedEstimatedUsd: 0,\n\t\tuntrackedWarnings: []\n\t};\n\tfor (const entry of normalizeOpenAIUsageRowsForCosting(entries)) {\n\t\tconst category = cleanText(entry.category, 120) || 'unknown';\n\t\tconst source = cleanText(entry.usage_source ?? entry.usageSource, 80) || 'unknown';\n\t\tconst surface = cleanText(entry.usage_surface ?? entry.usageSurface, 80) || 'unknown';\n\t\tconst isManual = entry.is_manual === true || entry.isManual === true || source === 'manual_codex';\n\t\tconst isUntracked = entry.is_untracked === true || entry.isUntracked === true;\n\t\tconst untrackedReason = cleanText(entry.untracked_reason ?? entry.untrackedReason, 500);\n\t\tconst model = cleanText(entry.model, 120);\n\t\tconst inputTokens = Number(entry.input_tokens ?? entry.inputTokens ?? 0) || 0;\n\t\tconst cachedInputTokens = Number(entry.cached_input_tokens ?? entry.cachedInputTokens ?? 0) || 0;\n\t\tconst outputTokens = Number(entry.output_tokens ?? entry.outputTokens ?? 0) || 0;\n\t\tconst totalTokens = Number(entry.total_tokens ?? entry.totalTokens ?? (inputTokens + outputTokens)) || 0;\n\t\tconst estimatedUsd = Number(entry.cost_estimate ?? entry.estimatedUsd ?? 0) || 0;\n\t\tcost.inputTokens += inputTokens;\n\t\tcost.cachedInputTokens += cachedInputTokens;\n\t\tcost.outputTokens += outputTokens;\n\t\tcost.totalTokens += totalTokens;\n\t\tcost.estimatedUsd += estimatedUsd;\n\t\tif (isManual) {\n\t\t\tcost.manualEstimatedUsd = Number(cost.manualEstimatedUsd || 0) + estimatedUsd;\n\t\t}\n\t\tif (isUntracked) {\n\t\t\tcost.untrackedEstimatedUsd = Number(cost.untrackedEstimatedUsd || 0) + estimatedUsd;\n\t\t\tconst warning = untrackedReason || `${source} usage is an estimate outside managed runner telemetry.`;\n\t\t\tif (warning && !cost.untrackedWarnings?.includes(warning)) {\n\t\t\t\tcost.untrackedWarnings?.push(warning);\n\t\t\t}\n\t\t}\n\t\tif (model && !cost.models.includes(model)) {\n\t\t\tcost.models.push(model);\n\t\t}\n\t\tif (!cost.categories[category]) {\n\t\t\tcost.categories[category] = {\n\t\t\t\tinputTokens: 0,\n\t\t\t\tcachedInputTokens: 0,\n\t\t\t\toutputTokens: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t}\n\t\tcost.categories[category].inputTokens += inputTokens;\n\t\tcost.categories[category].cachedInputTokens += cachedInputTokens;\n\t\tcost.categories[category].outputTokens += outputTokens;\n\t\tcost.categories[category].totalTokens += totalTokens;\n\t\tcost.categories[category].estimatedUsd += estimatedUsd;\n\t\tcost.categories[category].count += 1;\n\t\tif (!cost.sources?.[source]) {\n\t\t\tcost.sources![source] = {\n\t\t\t\tinputTokens: 0,\n\t\t\t\tcachedInputTokens: 0,\n\t\t\t\toutputTokens: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0,\n\t\t\t\tmanualCount: 0,\n\t\t\t\tuntrackedCount: 0\n\t\t\t};\n\t\t}\n\t\tcost.sources[source].inputTokens += inputTokens;\n\t\tcost.sources[source].cachedInputTokens += cachedInputTokens;\n\t\tcost.sources[source].outputTokens += outputTokens;\n\t\tcost.sources[source].totalTokens += totalTokens;\n\t\tcost.sources[source].estimatedUsd += estimatedUsd;\n\t\tcost.sources[source].count += 1;\n\t\tif (isManual) {\n\t\t\tcost.sources[source].manualCount += 1;\n\t\t}\n\t\tif (isUntracked) {\n\t\t\tcost.sources[source].untrackedCount += 1;\n\t\t}\n\t\tif (!cost.surfaces?.[surface]) {\n\t\t\tcost.surfaces![surface] = {\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t}\n\t\tcost.surfaces[surface].totalTokens += totalTokens;\n\t\tcost.surfaces[surface].estimatedUsd += estimatedUsd;\n\t\tcost.surfaces[surface].count += 1;\n\t}\n\tcost.estimatedUsd = Number(cost.estimatedUsd.toFixed(6));\n\tcost.manualEstimatedUsd = Number(Number(cost.manualEstimatedUsd || 0).toFixed(6));\n\tcost.untrackedEstimatedUsd = Number(Number(cost.untrackedEstimatedUsd || 0).toFixed(6));\n\tfor (const category of Object.keys(cost.categories)) {\n\t\tcost.categories[category].estimatedUsd = Number(cost.categories[category].estimatedUsd.toFixed(6));\n\t}\n\tfor (const source of Object.keys(cost.sources || {})) {\n\t\tcost.sources![source].estimatedUsd = Number(cost.sources![source].estimatedUsd.toFixed(6));\n\t}\n\tfor (const surface of Object.keys(cost.surfaces || {})) {\n\t\tcost.surfaces![surface].estimatedUsd = Number(cost.surfaces![surface].estimatedUsd.toFixed(6));\n\t}\n\treturn cost;\n}\n\nexport function redactAIRunTrainingExample(example: AIRunTrainingExample): AIRunTrainingExample {\n\tconst redact = (value: string): string => cleanText(value, 5000)\n\t\t.replace(/mongodb(?:\\+srv)?:\\/\\/[^\\s\"'<>]+/ig, '[redacted-mongo-url]')\n\t\t.replace(/\\b(?:sk|ghp|xoxb|AKIA)[A-Za-z0-9_\\-]{12,}\\b/g, '[redacted-secret]')\n\t\t.replace(/\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z]{2,}\\b/ig, '[redacted-email]');\n\treturn {\n\t\t...example,\n\t\tinputSummary: redact(example.inputSummary),\n\t\tactionSummary: redact(example.actionSummary),\n\t\tevidence: cleanList(example.evidence, 80, 5000).map(redact)\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/util/ai-run-evidence.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsTA,kEAEC;AAED,kEAMC;AAED,gFAqFC;AA0ID,oCA2HC;AA6BD,oDAkQC;AAED,gCA0DC;AAED,wCA8GC;AAED,gEAWC;AA11BD,SAAS,MAAM,CAAC,KAAqB;IACpC,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IACD,IAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACpD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,SAAS,CAAC,KAAU,EAAE,GAAU;IAAV,oBAAA,EAAA,UAAU;IACxC,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAU;IACnC,IAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,cAAc,CAAC,KAAU;IACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAM,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,SAAgB,2BAA2B,CAAC,KAA2B;IACtE,OAAO,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;AACxF,CAAC;AAED,SAAgB,2BAA2B,CAAC,KAA2B;;IACtE,IAAM,cAAc,GAAG,SAAS,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,mCAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IACvF,IAAI,cAAc,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,mCAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,EAAE,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,kCAAkC,CAAiC,IAAc;IAAd,qBAAA,EAAA,SAAc;IAChG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACX,CAAC;IACD,IAAM,UAAU,GAAG,IAAI;SACrB,GAAG,CAAC,UAAC,GAAG,EAAE,KAAK,IAAK,OAAA,uBACjB,GAAG,KACN,UAAU,EAAE,KAAK,IAChB,EAHmB,CAGnB,CAAC;SACF,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;;QACV,IAAM,KAAK,GAAG,CAAA,MAAA,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,0CAAE,OAAO,EAAE,KAAI,CAAC,CAAC;QAC1D,IAAM,KAAK,GAAG,CAAA,MAAA,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,0CAAE,OAAO,EAAE,KAAI,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACrB,OAAO,KAAK,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,IAAM,cAAc,GAAG,SAAS,CAAC,MAAA,CAAC,CAAC,UAAU,mCAAI,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC;aAChE,aAAa,CAAC,SAAS,CAAC,MAAA,CAAC,CAAC,UAAU,mCAAI,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7D,IAAI,cAAc,EAAE,CAAC;YACpB,OAAO,cAAc,CAAC;QACvB,CAAC;QACD,IAAM,mBAAmB,GAAG,SAAS,CAAC,MAAA,CAAC,CAAC,eAAe,mCAAI,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC;aAC/E,aAAa,CAAC,SAAS,CAAC,MAAA,CAAC,CAAC,eAAe,mCAAI,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;QACvE,IAAI,mBAAmB,EAAE,CAAC;YACzB,OAAO,mBAAmB,CAAC;QAC5B,CAAC;QACD,OAAO,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IACJ,IAAM,gBAAgB,GAAG,IAAI,GAAG,EAM5B,CAAC;IACL,OAAO,UAAU,CAAC,GAAG,CAAC,UAAC,GAAG;;QACzB,IAAM,WAAW,GAAG,gBAAgB,CAAC,MAAA,GAAG,CAAC,YAAY,mCAAI,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1E,IAAM,iBAAiB,GAAG,gBAAgB,CAAC,MAAA,GAAG,CAAC,mBAAmB,mCAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC7F,IAAM,YAAY,GAAG,gBAAgB,CAAC,MAAA,GAAG,CAAC,aAAa,mCAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QAC7E,IAAM,WAAW,GAAG,gBAAgB,CAAC,MAAA,MAAA,GAAG,CAAC,YAAY,mCAAI,GAAG,CAAC,WAAW,mCAAI,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC;QAC1G,IAAM,YAAY,GAAG,gBAAgB,CAAC,MAAA,GAAG,CAAC,aAAa,mCAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QAC7E,IAAM,SAAS,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,IAAI,qBAAqB,GAAG,WAAW,CAAC;QACxC,IAAI,2BAA2B,GAAG,iBAAiB,CAAC;QACpD,IAAI,sBAAsB,GAAG,YAAY,CAAC;QAC1C,IAAI,qBAAqB,GAAG,WAAW,CAAC;QACxC,IAAI,sBAAsB,GAAG,YAAY,CAAC;QAC1C,IAAI,SAAS,EAAE,CAAC;YACf,IAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,QAAQ;mBACR,WAAW,IAAI,QAAQ,CAAC,WAAW;mBACnC,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB;mBAC/C,YAAY,IAAI,QAAQ,CAAC,YAAY;mBACrC,WAAW,IAAI,QAAQ,CAAC,WAAW;mBACnC,YAAY,IAAI,QAAQ,CAAC,YAAY,EACvC,CAAC;gBACF,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACxE,2BAA2B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAC1F,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAC3E,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACxE,sBAAsB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;YAC5E,CAAC;YACD,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE;gBAC/B,WAAW,aAAA;gBACX,iBAAiB,mBAAA;gBACjB,YAAY,cAAA;gBACZ,WAAW,aAAA;gBACX,YAAY,cAAA;aACZ,CAAC,CAAC;QACJ,CAAC;QACD,IAAM,mBAAmB,GAAG,qBAAqB,IAAI,CAAC,qBAAqB,GAAG,sBAAsB,CAAC,CAAC;QACtG,IAAM,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,sBACH,GAAG,KACN,YAAY,EAAE,qBAAqB,EACnC,WAAW,EAAE,qBAAqB,EAClC,mBAAmB,EAAE,2BAA2B,EAChD,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,sBAAsB,EACrC,YAAY,EAAE,sBAAsB,EACpC,YAAY,EAAE,mBAAmB,EACjC,WAAW,EAAE,mBAAmB,EAChC,aAAa,EAAE,oBAAoB,EACnC,YAAY,EAAE,oBAAoB,GAC7B,CAAC;IACR,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAAW,EAAE,KAAU,EAAE,GAAS;;IAArB,sBAAA,EAAA,UAAU;IAAE,oBAAA,EAAA,SAAS;IACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,IAAM,MAAM,GAAa,EAAE,CAAC;;QAC5B,KAAoB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE,CAAC;YAAxB,IAAM,KAAK,mBAAA;YACf,IAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACzC,IAAI,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC5B,MAAM;YACP,CAAC;QACF,CAAC;;;;;;;;;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAU;IACvC,IAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/E,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC9E,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAChF,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,oBAAoB,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QACjE,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAU;IACzC,IAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/E,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QAC/D,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QACjE,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,SAAS,QAAQ,CAChB,GAAW,EACX,KAAa,EACb,MAAuB,EACvB,MAAc,EACd,YAA2B,EAC3B,GAAmB,EACnB,QAA8B;IAF9B,6BAAA,EAAA,iBAA2B;IAI3B,kBACC,GAAG,KAAA,EACH,KAAK,OAAA,EACL,MAAM,QAAA,EACN,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAC/B,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,EAC9C,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,IACpB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,UAAA,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAChC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAA2C;IACnE,OAAO,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,MAAM,CAAC,MAA2C;IAC1D,OAAO,MAAM,KAAK,MAAM,CAAC;AAC1B,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAoC;IACjE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,uBACxD,KAAK,KACR,IAAI,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,GAAG,CAAC,IAAI,aAAa,EAClD,MAAM,EAAE,oBAAoB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,EAC3C,OAAO,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,IAAI,CAAC,EACxC,IAAI,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,GAAG,CAAC,IAChC,EAN0D,CAM1D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAoC;IACjE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,uBACxD,KAAK,KACR,KAAK,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,EAC1C,MAAM,EAAE,oBAAoB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,EAC3C,UAAU,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,EAAE,GAAG,CAAC,EAC7C,OAAO,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,IAAI,CAAC,EACxC,OAAO,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,IAAI,CAAC,EACxC,aAAa,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,EAAE,EAAE,EAAE,GAAG,CAAC,EACvD,aAAa,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,EAAE,EAAE,EAAE,GAAG,CAAC,IACtD,EAT0D,CAS1D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,2BAA2B,CAAC,MAA2C;IAC/E,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,uBACxD,KAAK,KACR,SAAS,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,EAAE,IAAI,CAAC,IAAI,oBAAoB,EACpE,MAAM,EAAE,oBAAoB,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,EAC3C,QAAQ,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE,GAAG,CAAC,EACzC,KAAK,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,EAAE,GAAG,CAAC,EACnC,MAAM,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE,GAAG,CAAC,EACrC,QAAQ,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE,IAAI,CAAC,EAC1C,QAAQ,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,EAAE,IAAI,CAAC,EAC1C,SAAS,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,EAAE,IAAI,CAAC,EAC5C,aAAa,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,aAAa,EAAE,EAAE,EAAE,GAAG,CAAC,EACvD,OAAO,EAAE,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,EAAE,IAAI,CAAC,IACvC,EAZ0D,CAY1D,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qCAAqC,CAAC,UAAmC;;IACjF,IAAM,KAAK,GAAa,EAAE,CAAC;;QAC3B,KAAwB,IAAA,eAAA,SAAA,UAAU,CAAA,sCAAA,8DAAE,CAAC;YAAhC,IAAM,SAAS,uBAAA;;gBACnB,KAA2B,IAAA,oBAAA,SAAA,SAAS,CAAC,aAAa,IAAI,EAAE,CAAA,CAAA,gBAAA,4BAAE,CAAC;oBAAtD,IAAM,YAAY,WAAA;oBACtB,IAAI,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;wBACnD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC1B,CAAC;gBACF,CAAC;;;;;;;;;QACF,CAAC;;;;;;;;;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAgB,YAAY,CAAC,KAA+B;IAA/B,sBAAA,EAAA,UAA+B;IAC3D,IAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO;QAC5B,CAAC,uBACG,KAAK,CAAC,OAAO,KAChB,MAAM,EAAE,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACpD,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,EAC9C,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,EACxD,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,IAEhD,CAAC,CAAC,SAAS,CAAC;IACb,IAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5D,IAAM,kBAAkB,GAAG,2BAA2B,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACjF,IAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACxE,IAAM,WAAW,GAAsB,EAAE,CAAC;IAE1C,IAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,EAA7B,CAA6B,CAAC,CAAC;IACjF,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,qEAA8D,WAAW,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,UAAG,KAAK,CAAC,IAAI,eAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAE,EAAjD,CAAiD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,EACxJ,WAAW,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,IAAI,IAAI,EAAE,EAAhB,CAAgB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAC5D,GAAG,EACH,EAAE,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,IAAI,EAAV,CAAU,CAAC,EAAE,CACzD,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACnI,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,4CAA4C,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5H,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,CAAC,EAAE,CAAC;QAClH,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,YAAY,EACZ,eAAe,EACf,MAAM,EACN,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI;YAC3D,CAAC,CAAC,oEAAoE;YACtE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,yCAAyC,CAAC,EACjE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAClD,GAAG,EACH,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAClC,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACrI,CAAC;IACD,IAAI,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,gCAAgC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9J,CAAC;IAED,IAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAzD,CAAyD,CAAC,CAAC;IACnH,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAC9B,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,EACN,8DAAuD,iBAAiB,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,UAAG,KAAK,CAAC,KAAK,eAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAE,EAAnE,CAAmE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,EACzK,iBAAiB,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,IAAI,EAAE,EAAtB,CAAsB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EACxE,GAAG,CACH,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACnI,CAAC;IACD,IAAI,WAAW,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAApB,CAAoB,CAAC,EAAE,CAAC;QACvD,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,EACN,qGAAqG,EACrG,WAAW,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,UAAU,IAAI,EAAE,EAAtB,CAAsB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAClE,GAAG,CACH,CAAC,CAAC;IACJ,CAAC;IAED,IAAM,wBAAwB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAC,SAAS,IAAK,OAAA,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,EAAjC,CAAiC,CAAC,CAAC;IAC7G,IAAI,wBAAwB,CAAC,MAAM,EAAE,CAAC;QACrC,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,EACN,oDAA6C,wBAAwB,CAAC,GAAG,CAAC,UAAC,SAAS,IAAK,OAAA,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,EAA9D,CAA8D,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,EACrK,qCAAqC,CAAC,wBAAwB,CAAC,EAC/D,GAAG,CACH,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAChJ,CAAC;IAED,IAAM,wBAAwB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAC,SAAS,IAAK,OAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAxB,CAAwB,CAAC,CAAC;IACpG,IAAI,wBAAwB,CAAC,MAAM,EAAE,CAAC;QACrC,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,uBAAuB,EACvB,oBAAoB,EACpB,MAAM,EACN,6DAA6D,EAC7D,qCAAqC,CAAC,wBAAwB,CAAC,EAC/D,GAAG,EACH,EAAE,iBAAiB,EAAE,wBAAwB,CAAC,GAAG,CAAC,UAAC,SAAS,IAAK,OAAA,SAAS,CAAC,SAAS,EAAnB,CAAmB,CAAC,EAAE,CACvF,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,2BAA2B,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAChJ,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAApB,CAAoB,CAAC,EAAE,CAAC;QACvD,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,uBAAuB,EACvB,oBAAoB,EACpB,SAAS,EACT,gHAAgH,EAChH,EAAE,EACF,GAAG,CACH,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IACtI,CAAC;IAED,WAAW,CAAC,IAAI,CAAC,QAAQ,CACxB,uBAAuB,EACvB,oBAAoB,EACpB,SAAS,EACT,8CAA8C,EAC9C,EAAE,EACF,GAAG,CACH,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,aAAA,EAAE,OAAO,SAAA,EAAE,WAAW,aAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAE,WAAW,aAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACjI,CAAC;AAED,SAAS,cAAc,CAAC,KAAqC;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAK,KAAiB,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAE,KAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QACjF,OAAO,KAAgB,CAAC;IACzB,CAAC;IACD,OAAO,YAAY,CAAC,KAA4B,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAU;IACpC,IAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,OAAO,CAAC,CAAC,UAAU,IAAI,+FAA+F,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzI,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAU;IACpC,IAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,OAAO,CAAC,CAAC,UAAU,IAAI,gFAAgF,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1H,CAAC;AAED,SAAS,WAAW,CAAC,KAAwB,EAAE,IAAqB;IACnE,IAAI,KAAK,CAAC,IAAI,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAtF,CAAsF,CAAC,EAAE,CAAC;QACnH,OAAO;IACR,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC;AAED,SAAgB,oBAAoB,CAAC,KAA6B;;IAA7B,sBAAA,EAAA,UAA6B;IACjE,IAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,0BAAK,KAAK,CAAC,KAAK,UAAE,CAAC,CAAC,EAAE,CAAC;IACjE,IAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAM,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,EAAE,EAAE,CAAC;;YACR,KAAmB,IAAA,KAAA,SAAA,EAAE,CAAC,WAAW,CAAA,gBAAA,4BAAE,CAAC;gBAA/B,IAAM,IAAI,WAAA;gBACd,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1B,CAAC;;;;;;;;;IACF,CAAC;IAED,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;QAClC,OAAO;YACN,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE,8BAA8B;YACtC,UAAU,EAAE,kDAAkD;YAC9D,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,IAAI,uCAAuC,CAAC,IAAI,CAAC,UAAG,KAAK,CAAC,MAAM,IAAI,EAAE,cAAI,KAAK,CAAC,KAAK,IAAI,EAAE,CAAE,CAAC,EAAE,CAAC;QAC1H,OAAO;YACN,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,wDAAwD;YAChE,UAAU,EAAE,wDAAwD;YACpE,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC7B,OAAO;YACN,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,8BAA8B;YACtC,UAAU,EAAE,+CAA+C;YAC3D,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAM,uBAAuB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,qBAAqB,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,EAA3F,CAA2F,CAAC,CAAC;IAClJ,IAAI,uBAAuB,EAAE,CAAC;QAC7B,OAAO;YACN,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,gFAAyE,uBAAuB,CAAC,MAAM,CAAE;YACjH,UAAU,EAAE,mJAAmJ;YAC/J,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAM,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,8BAA8B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAxE,CAAwE,CAAC,CAAC;IAC9H,IAAI,sBAAsB,EAAE,CAAC;QAC5B,OAAO;YACN,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE,wDAAiD,sBAAsB,CAAC,MAAM,CAAE;YACxF,UAAU,EAAE,4GAA4G;YACxH,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAM,uCAAuC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,iCAAiC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAA3E,CAA2E,CAAC,CAAC;IAClJ,IAAI,uCAAuC,EAAE,CAAC;QAC7C,OAAO;YACN,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE,yEAAkE,uCAAuC,CAAC,MAAM,CAAE;YAC1H,UAAU,EAAE,yJAAyJ;YACrK,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,cAAc,EAAE,CAAC;QACpC,OAAO;YACN,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,qDAAqD;YAC7D,UAAU,EAAE,qGAAqG;YACjH,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,gBAAgB,EAAE,CAAC;QACtC,OAAO;YACN,OAAO,EAAE,cAAc;YACvB,MAAM,EAAE,6CAA6C;YACrD,UAAU,EAAE,sEAAsE;YAClF,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,cAAc,EAAE,CAAC;QACpC,OAAO;YACN,OAAO,EAAE,eAAe;YACxB,MAAM,EAAE,mDAAmD;YAC3D,UAAU,EAAE,yEAAyE;YACrF,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAM,iCAAiC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,0BAA0B,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,EAAhG,CAAgG,CAAC,CAAC;IACjK,IAAI,iCAAiC,EAAE,CAAC;QACvC,IAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,KAAK,IAAI,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,iBAAiB,CAAC,UAAG,KAAK,CAAC,MAAM,IAAI,EAAE,cAAI,KAAK,CAAC,KAAK,IAAI,EAAE,CAAE,CAAC,CAAC;QACxM,OAAO;YACN,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;YACxD,MAAM,EAAE,cAAc;gBACrB,CAAC,CAAC,wEAAiE,iCAAiC,CAAC,MAAM,CAAE;gBAC7G,CAAC,CAAC,4EAAqE,iCAAiC,CAAC,MAAM,CAAE;YAClH,UAAU,EAAE,yJAAyJ;YACrK,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAM,oCAAoC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,8BAA8B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAxE,CAAwE,CAAC,CAAC;IAC5I,IACC,oCAAoC;WACjC,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,2BAA2B;WAC3C,KAAK,CAAC,eAAe,KAAK,IAAI;WAC9B,CAAC,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC,EAC3C,CAAC;QACF,OAAO;YACN,OAAO,EAAE,gBAAgB;YACzB,MAAM,EAAE,uFAAgF,oCAAoC,CAAC,MAAM,CAAE;YACrI,UAAU,EAAE,0MAA0M;YACtN,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAM,qCAAqC,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,GAAG,KAAK,gCAAgC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,EAAtG,CAAsG,CAAC,CAAC;IAC3K,IAAI,KAAK,CAAC,MAAM,KAAK,gBAAgB,IAAI,qCAAqC,EAAE,CAAC;QAChF,IAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,KAAK,IAAI;eAClD,KAAK,CAAC,eAAe,KAAK,IAAI;eAC9B,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC;eACxC,iBAAiB,CAAC,UAAG,KAAK,CAAC,MAAM,IAAI,EAAE,cAAI,KAAK,CAAC,KAAK,IAAI,EAAE,CAAE,CAAC,CAAC;QACpE,OAAO;YACN,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;YACxD,MAAM,EAAE,cAAc;gBACrB,CAAC,CAAC,8EAAuE,qCAAqC,CAAC,MAAM,CAAE;gBACvH,CAAC,CAAC,wFAAiF,qCAAqC,CAAC,MAAM,CAAE;YAClI,UAAU,EAAE,gIAAgI;YAC5I,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,iBAAiB,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,YAAY,EAAE,CAAC;QACvE,OAAO;YACN,OAAO,EAAE,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;YACxE,MAAM,EAAE,KAAK,CAAC,eAAe,KAAK,IAAI;gBACrC,CAAC,CAAC,sFAAsF;gBACxF,CAAC,CAAC,8DAA8D;YACjE,UAAU,EAAE,2FAA2F;YACvG,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IACD,IAAI,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,2BAA2B,EAAE,CAAC;QACjD,OAAO;YACN,OAAO,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe;YAC/D,MAAM,EAAE,2CAA2C;YACnD,UAAU,EAAE,iEAAiE;YAC7E,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAM,eAAe,GAAG,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,OAAO,MAAK,2BAA2B,CAAC;IACpE,IAAM,eAAe,GAAG,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACnG,IAAM,eAAe,GAAa,EAAE,CAAC;IACrC,IAAI,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3C,eAAe,CAAC,IAAI,CAAC,iBAAU,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,iBAAiB,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5C,eAAe,CAAC,IAAI,CAAC,kBAAW,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,iBAAiB,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/C,eAAe,CAAC,IAAI,CAAC,sBAAe,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,EAAE,CAAC;QACpE,WAAW,CAAC,KAAK,EAAE,QAAQ,CAC1B,SAAS,EACT,gBAAgB,EAChB,MAAM,EACN,uFAAgF,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAG,EAC7G,EAAE,EACF,GAAG,CACH,CAAC,CAAC;QACH,OAAO;YACN,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EAAE,mDAA4C,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAG;YACjF,UAAU,EAAE,6EAA6E;YACzF,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAI,eAAe,IAAI,CAAC,eAAe,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,WAAW,CAAC,KAAK,EAAE,QAAQ,CAC1B,6BAA6B,EAC7B,oBAAoB,EACpB,SAAS,EACT,gFAAgF,EAChF,EAAE,EACF,GAAG,CACH,CAAC,CAAC;QACH,OAAO;YACN,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,yCAAyC;YACjD,UAAU,EAAE,qEAAqE;YACjF,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAM,WAAW,GAAG,UAAG,KAAK,CAAC,MAAM,IAAI,EAAE,cAAI,KAAK,CAAC,KAAK,IAAI,EAAE,CAAE,CAAC;IACjE,IAAI,CAAC,KAAK,CAAC,gBAAgB,KAAK,IAAI,IAAI,iBAAiB,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,IAAI,eAAe,EAAE,CAAC;QAC/G,OAAO;YACN,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,8EAA8E;YACtF,UAAU,EAAE,4BAA4B;YACxC,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,IAAI,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,OAAO;YACN,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,wDAAwD;YAChE,UAAU,EAAE,+DAA+D;YAC3E,KAAK,OAAA;YACL,QAAQ,UAAA;YACR,UAAU,EAAE,GAAG;SACf,CAAC;IACH,CAAC;IAED,OAAO;QACN,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,oEAAoE;QAC5E,UAAU,EAAE,8FAA8F;QAC1G,KAAK,OAAA;QACL,QAAQ,UAAA;QACR,UAAU,EAAE,GAAG;KACf,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,KAa1B;IACA,IAAM,QAAQ,GAAG,KAAK,CAAC,OAAO;QAC7B,CAAC,CAAC;YACD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;YAC9B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;YAClC,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;SAC7B;QACD,CAAC,CAAC,oBAAoB,CAAC;YACtB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,GAAG,EAAE,KAAK,CAAC,GAAG;SACd,CAAC,CAAC;IACJ,OAAO;QACN,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;QAChC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACvD,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACxB,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,OAAoC;;;IAApC,wBAAA,EAAA,YAAoC;IAClE,IAAM,IAAI,GAAc;QACvB,WAAW,EAAE,CAAC;QACd,iBAAiB,EAAE,CAAC;QACpB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,kBAAkB,EAAE,CAAC;QACrB,qBAAqB,EAAE,CAAC;QACxB,iBAAiB,EAAE,EAAE;KACrB,CAAC;;QACF,KAAoB,IAAA,KAAA,SAAA,kCAAkC,CAAC,OAAO,CAAC,CAAA,gBAAA,4BAAE,CAAC;YAA7D,IAAM,KAAK,WAAA;YACf,IAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC;YAC7D,IAAM,MAAM,GAAG,SAAS,CAAC,MAAA,KAAK,CAAC,YAAY,mCAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;YACnF,IAAM,OAAO,GAAG,SAAS,CAAC,MAAA,KAAK,CAAC,aAAa,mCAAI,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;YACtF,IAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,KAAK,cAAc,CAAC;YAClG,IAAM,WAAW,GAAG,KAAK,CAAC,YAAY,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC;YAC9E,IAAM,eAAe,GAAG,SAAS,CAAC,MAAA,KAAK,CAAC,gBAAgB,mCAAI,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YACxF,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC1C,IAAM,WAAW,GAAG,MAAM,CAAC,MAAA,MAAA,KAAK,CAAC,YAAY,mCAAI,KAAK,CAAC,WAAW,mCAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9E,IAAM,iBAAiB,GAAG,MAAM,CAAC,MAAA,MAAA,KAAK,CAAC,mBAAmB,mCAAI,KAAK,CAAC,iBAAiB,mCAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACjG,IAAM,YAAY,GAAG,MAAM,CAAC,MAAA,MAAA,KAAK,CAAC,aAAa,mCAAI,KAAK,CAAC,YAAY,mCAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACjF,IAAM,WAAW,GAAG,MAAM,CAAC,MAAA,MAAA,KAAK,CAAC,YAAY,mCAAI,KAAK,CAAC,WAAW,mCAAI,CAAC,WAAW,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;YACzG,IAAM,YAAY,GAAG,MAAM,CAAC,MAAA,MAAA,KAAK,CAAC,aAAa,mCAAI,KAAK,CAAC,YAAY,mCAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACjF,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;YAChC,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC;YAC5C,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC;YAClC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC;YAChC,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC;YAClC,IAAI,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC;YAC/E,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC;gBACpF,IAAM,OAAO,GAAG,eAAe,IAAI,UAAG,MAAM,4DAAyD,CAAC;gBACtG,IAAI,OAAO,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,iBAAiB,0CAAE,QAAQ,CAAC,OAAO,CAAC,CAAA,EAAE,CAAC;oBAC3D,MAAA,IAAI,CAAC,iBAAiB,0CAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvC,CAAC;YACF,CAAC;YACD,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG;oBAC3B,WAAW,EAAE,CAAC;oBACd,iBAAiB,EAAE,CAAC;oBACpB,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,KAAK,EAAE,CAAC;iBACR,CAAC;YACH,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC;YACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,iBAAiB,IAAI,iBAAiB,CAAC;YACjE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC;YACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAG,MAAM,CAAC,CAAA,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAQ,CAAC,MAAM,CAAC,GAAG;oBACvB,WAAW,EAAE,CAAC;oBACd,iBAAiB,EAAE,CAAC;oBACpB,YAAY,EAAE,CAAC;oBACf,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,KAAK,EAAE,CAAC;oBACR,WAAW,EAAE,CAAC;oBACd,cAAc,EAAE,CAAC;iBACjB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,iBAAiB,IAAI,iBAAiB,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC;YAClD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC;YAClD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAChC,IAAI,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC;YAC1C,CAAC;YACD,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAG,OAAO,CAAC,CAAA,EAAE,CAAC;gBAC/B,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,GAAG;oBACzB,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,KAAK,EAAE,CAAC;iBACR,CAAC;YACH,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACnC,CAAC;;;;;;;;;IACD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;QACxF,KAAuB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA,gBAAA,4BAAE,CAAC;YAAjD,IAAM,QAAQ,WAAA;YAClB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG,CAAC;;;;;;;;;;QACD,KAAqB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA,gBAAA,4BAAE,CAAC;YAAlD,IAAM,MAAM,WAAA;YAChB,IAAI,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC;;;;;;;;;;QACD,KAAsB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA,gBAAA,4BAAE,CAAC;YAApD,IAAM,OAAO,WAAA;YACjB,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,CAAC;;;;;;;;;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAgB,0BAA0B,CAAC,OAA6B;IACvE,IAAM,MAAM,GAAG,UAAC,KAAa,IAAa,OAAA,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC;SAC9D,OAAO,CAAC,oCAAoC,EAAE,sBAAsB,CAAC;SACrE,OAAO,CAAC,8CAA8C,EAAE,mBAAmB,CAAC;SAC5E,OAAO,CAAC,mDAAmD,EAAE,kBAAkB,CAAC,EAHxC,CAGwC,CAAC;IACnF,6BACI,OAAO,KACV,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAC1C,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAC5C,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAC1D;AACH,CAAC","file":"ai-run-evidence.js","sourcesContent":["export type AIRunSource =\n\t| 'support_ticket'\n\t| 'aicoder_app'\n\t| 'ai_assistant'\n\t| 'qa_runner'\n\t| 'unknown';\n\nexport type AIRunOutcomeLabel =\n\t| 'accepted'\n\t| 'rejected'\n\t| 'qa_incomplete'\n\t| 'qa_infra_failed'\n\t| 'build_failed'\n\t| 'release_blocked'\n\t| 'manual_handoff'\n\t| 'false_pass'\n\t| 'stopped'\n\t| 'unknown';\n\nexport type AIRunEventType =\n\t| 'model_call'\n\t| 'log'\n\t| 'qa_infra'\n\t| 'qa_compile'\n\t| 'qa_route_probe'\n\t| 'qa_business_assertion'\n\t| 'scorecard'\n\t| 'deploy'\n\t| 'publish'\n\t| 'hotfix'\n\t| 'assistant_message'\n\t| 'assistant_query'\n\t| 'git_commit'\n\t| 'usage'\n\t| 'human_intervention';\n\nexport type AIRunGateStatus = 'pass' | 'fail' | 'warn' | 'blocked' | 'skipped';\n\nexport type AIQaCheckStatus = 'pass' | 'fail' | 'blocked' | 'warn' | 'skipped' | 'unknown';\n\nexport type AIQaCompileStatus = 'pass' | 'fail' | 'blocked' | 'stale' | 'skipped' | 'unknown';\n\nexport type AIQaOutcome =\n\t| 'infra_failed'\n\t| 'compile_failed'\n\t| 'route_failed'\n\t| 'route_only_pass'\n\t| 'business_assertion_passed'\n\t| 'business_assertion_failed'\n\t| 'incomplete';\n\nexport interface AIRunEvent {\n\tid?: string;\n\ttype: AIRunEventType;\n\tsource?: AIRunSource | string;\n\tmessage?: string;\n\tcategory?: string;\n\tartifactPaths?: string[];\n\tmetadata?: Record<string, any>;\n\trecordedAt?: Date | string;\n}\n\nexport interface AIRunGateResult {\n\tkey: string;\n\tlabel: string;\n\tstatus: AIRunGateStatus;\n\treason: string;\n\tevidenceRefs: string[];\n\trecordedAt: string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIRunCost {\n\tinputTokens: number;\n\tcachedInputTokens: number;\n\toutputTokens: number;\n\ttotalTokens: number;\n\testimatedUsd: number;\n\tmodels: string[];\n\tcategories: Record<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tsources?: Record<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t\tmanualCount: number;\n\t\tuntrackedCount: number;\n\t}>;\n\tsurfaces?: Record<string, {\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t\tcount: number;\n\t}>;\n\tmanualEstimatedUsd?: number;\n\tuntrackedEstimatedUsd?: number;\n\tuntrackedWarnings?: string[];\n\twallTimeMs?: number;\n\tretries?: number;\n}\n\nexport interface OpenAIUsageCostEntry {\n\tmodel?: string;\n\tcategory?: string;\n\tid_request?: string;\n\tidRequest?: string;\n\tid_conversation?: string;\n\tidConversation?: string;\n\ttimestamp?: Date | string;\n\tinput_tokens?: number;\n\tinputTokens?: number;\n\tcached_input_tokens?: number;\n\tcachedInputTokens?: number;\n\toutput_tokens?: number;\n\toutputTokens?: number;\n\ttotal_tokens?: number;\n\ttotalTokens?: number;\n\tcost_estimate?: number;\n\testimatedUsd?: number;\n\tusage_source?: string;\n\tusageSource?: string;\n\tusage_surface?: string;\n\tusageSurface?: string;\n\tusage_phase?: string;\n\tusagePhase?: string;\n\tcost_basis?: string;\n\tcostBasis?: string;\n\tis_manual?: boolean;\n\tisManual?: boolean;\n\tis_untracked?: boolean;\n\tisUntracked?: boolean;\n\tuntracked_reason?: string;\n\tuntrackedReason?: string;\n\t[key: string]: any;\n}\n\nexport interface AIQaInfraCheck {\n\tname: string;\n\tstatus: AIQaCheckStatus;\n\tmessage?: string;\n\tpath?: string;\n\tdurationMs?: number;\n\tmetadata?: Record<string, any>;\n\tcheckedAt?: Date | string;\n}\n\nexport interface AIQaCompileResult {\n\tstatus: AIQaCompileStatus;\n\tcommand?: string;\n\tartifactPath?: string;\n\tmessage?: string;\n\tdurationMs?: number;\n\tstaleEvidence?: boolean;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaRouteProbe {\n\troute: string;\n\tstatus: AIQaCheckStatus;\n\tscreenshot?: string;\n\tcaption?: string;\n\tshellOnly?: boolean;\n\tauthenticated?: boolean;\n\tconsoleErrors?: string[];\n\tnetworkErrors?: string[];\n\tmessage?: string;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaBusinessAssertion {\n\tassertion: string;\n\tstatus: AIQaCheckStatus;\n\tworkflow?: string;\n\troute?: string;\n\taction?: string;\n\texpected?: string;\n\tobserved?: string;\n\tdataProof?: string;\n\tmongoDelta?: Record<string, any>;\n\tartifactPaths?: string[];\n\tmessage?: string;\n\trecordedAt?: Date | string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaArtifact {\n\ttype: 'screenshot' | 'trace' | 'console_log' | 'network_log' | 'coverage_matrix' | 'seed_data' | 'script' | 'other';\n\tpath?: string;\n\turl?: string;\n\ttitle?: string;\n\tcaption?: string;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaRun {\n\toutcome: AIQaOutcome;\n\tinfraChecks: AIQaInfraCheck[];\n\tcompile?: AIQaCompileResult;\n\trouteProbes: AIQaRouteProbe[];\n\tbusinessAssertions: AIQaBusinessAssertion[];\n\tartifacts: AIQaArtifact[];\n\tgateResults: AIRunGateResult[];\n\tupdatedAt: string;\n}\n\nexport interface AIRun {\n\tid?: string;\n\tsource: AIRunSource;\n\tsourceIds: Record<string, string>;\n\ttitle?: string;\n\tstatus?: string;\n\tphase?: string;\n\tstartedAt?: Date | string;\n\tcompletedAt?: Date | string;\n\toutcome: AIRunOutcomeLabel;\n\tevents: AIRunEvent[];\n\tgates: AIRunGateResult[];\n\tqa?: AIQaRun;\n\tcost?: AIRunCost;\n\tnextAction?: string;\n\twarnings?: string[];\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIRunTrainingExample {\n\trunId: string;\n\tsource: AIRunSource;\n\tinputSummary: string;\n\tactionSummary: string;\n\toutcome: AIRunOutcomeLabel;\n\tevidence: string[];\n\tcost?: AIRunCost;\n\tmetadata?: Record<string, any>;\n}\n\nexport interface AIQaEvaluationInput {\n\tinfraChecks?: AIQaInfraCheck[];\n\tcompile?: AIQaCompileResult;\n\trouteProbes?: AIQaRouteProbe[];\n\tbusinessAssertions?: AIQaBusinessAssertion[];\n\tartifacts?: AIQaArtifact[];\n\tnow?: Date | string;\n}\n\nexport interface AIRunOutcomeInput {\n\tsource?: AIRunSource;\n\tstatus?: string;\n\tphase?: string;\n\tqa?: AIQaRun | AIQaEvaluationInput;\n\tgates?: AIRunGateResult[];\n\tscorecardPassed?: boolean;\n\tscorecardStatus?: string;\n\tdeployStatus?: string;\n\tpublishStatus?: string;\n\tsampleDataStatus?: string;\n\tmanualHandoff?: boolean;\n\tstopped?: boolean;\n\trejected?: boolean;\n\texplicitAccepted?: boolean;\n\tterminal?: boolean;\n\tnow?: Date | string;\n}\n\nexport interface AIRunOutcomeDecision {\n\toutcome: AIRunOutcomeLabel;\n\treason: string;\n\tnextAction: string;\n\tgates: AIRunGateResult[];\n\twarnings: string[];\n\trecordedAt: string;\n}\n\nfunction isoNow(value?: Date | string): string {\n\tif (value instanceof Date) {\n\t\treturn value.toISOString();\n\t}\n\tconst parsed = value ? new Date(value) : new Date();\n\tif (Number.isFinite(parsed.getTime())) {\n\t\treturn parsed.toISOString();\n\t}\n\treturn new Date().toISOString();\n}\n\nfunction cleanText(value: any, max = 1000): string {\n\treturn String(value || '').replace(/\\s+/g, ' ').trim().slice(0, max);\n}\n\nfunction cleanUsageNumber(value: any): number {\n\tconst parsed = Number(value);\n\treturn Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction cleanUsageDate(value: any): Date | undefined {\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\tconst date = value instanceof Date ? value : new Date(value);\n\treturn Number.isFinite(date.getTime()) ? date : undefined;\n}\n\nexport function isCumulativeCodexUsageEntry(entry: OpenAIUsageCostEntry): boolean {\n\treturn cleanText(entry?.category, 180).toLowerCase().startsWith('ai-dashboard-codex:');\n}\n\nexport function resolveOpenAIUsageThreadKey(entry: OpenAIUsageCostEntry): string {\n\tconst conversationId = cleanText(entry?.id_conversation ?? entry?.idConversation, 240);\n\tif (conversationId) {\n\t\treturn conversationId;\n\t}\n\treturn cleanText(entry?.id_request ?? entry?.idRequest, 240);\n}\n\nexport function normalizeOpenAIUsageRowsForCosting<T extends OpenAIUsageCostEntry>(rows: T[] = []): T[] {\n\tif (!Array.isArray(rows) || !rows.length) {\n\t\treturn [];\n\t}\n\tconst sortedRows = rows\n\t\t.map((row, index) => ({\n\t\t\t...row,\n\t\t\t_sortIndex: index\n\t\t}))\n\t\t.sort((a, b) => {\n\t\t\tconst timeA = cleanUsageDate(a.timestamp)?.getTime() || 0;\n\t\t\tconst timeB = cleanUsageDate(b.timestamp)?.getTime() || 0;\n\t\t\tif (timeA !== timeB) {\n\t\t\t\treturn timeA - timeB;\n\t\t\t}\n\t\t\tconst requestCompare = cleanText(a.id_request ?? a.idRequest, 240)\n\t\t\t\t.localeCompare(cleanText(b.id_request ?? b.idRequest, 240));\n\t\t\tif (requestCompare) {\n\t\t\t\treturn requestCompare;\n\t\t\t}\n\t\t\tconst conversationCompare = cleanText(a.id_conversation ?? a.idConversation, 240)\n\t\t\t\t.localeCompare(cleanText(b.id_conversation ?? b.idConversation, 240));\n\t\t\tif (conversationCompare) {\n\t\t\t\treturn conversationCompare;\n\t\t\t}\n\t\t\treturn cleanUsageNumber(a._sortIndex) - cleanUsageNumber(b._sortIndex);\n\t\t});\n\tconst previousByThread = new Map<string, {\n\t\tinputTokens: number;\n\t\tcachedInputTokens: number;\n\t\toutputTokens: number;\n\t\ttotalTokens: number;\n\t\testimatedUsd: number;\n\t}>();\n\treturn sortedRows.map((row) => {\n\t\tconst inputTokens = cleanUsageNumber(row.input_tokens ?? row.inputTokens);\n\t\tconst cachedInputTokens = cleanUsageNumber(row.cached_input_tokens ?? row.cachedInputTokens);\n\t\tconst outputTokens = cleanUsageNumber(row.output_tokens ?? row.outputTokens);\n\t\tconst totalTokens = cleanUsageNumber(row.total_tokens ?? row.totalTokens ?? (inputTokens + outputTokens));\n\t\tconst estimatedUsd = cleanUsageNumber(row.cost_estimate ?? row.estimatedUsd);\n\t\tconst threadKey = isCumulativeCodexUsageEntry(row) ? resolveOpenAIUsageThreadKey(row) : '';\n\t\tlet normalizedInputTokens = inputTokens;\n\t\tlet normalizedCachedInputTokens = cachedInputTokens;\n\t\tlet normalizedOutputTokens = outputTokens;\n\t\tlet normalizedTotalTokens = totalTokens;\n\t\tlet normalizedEstimatedUsd = estimatedUsd;\n\t\tif (threadKey) {\n\t\t\tconst previous = previousByThread.get(threadKey);\n\t\t\tif (previous\n\t\t\t\t&& inputTokens >= previous.inputTokens\n\t\t\t\t&& cachedInputTokens >= previous.cachedInputTokens\n\t\t\t\t&& outputTokens >= previous.outputTokens\n\t\t\t\t&& totalTokens >= previous.totalTokens\n\t\t\t\t&& estimatedUsd >= previous.estimatedUsd\n\t\t\t) {\n\t\t\t\tnormalizedInputTokens = Math.max(0, inputTokens - previous.inputTokens);\n\t\t\t\tnormalizedCachedInputTokens = Math.max(0, cachedInputTokens - previous.cachedInputTokens);\n\t\t\t\tnormalizedOutputTokens = Math.max(0, outputTokens - previous.outputTokens);\n\t\t\t\tnormalizedTotalTokens = Math.max(0, totalTokens - previous.totalTokens);\n\t\t\t\tnormalizedEstimatedUsd = Math.max(0, estimatedUsd - previous.estimatedUsd);\n\t\t\t}\n\t\t\tpreviousByThread.set(threadKey, {\n\t\t\t\tinputTokens,\n\t\t\t\tcachedInputTokens,\n\t\t\t\toutputTokens,\n\t\t\t\ttotalTokens,\n\t\t\t\testimatedUsd\n\t\t\t});\n\t\t}\n\t\tconst resolvedTotalTokens = normalizedTotalTokens || (normalizedInputTokens + normalizedOutputTokens);\n\t\tconst resolvedEstimatedUsd = Number(normalizedEstimatedUsd.toFixed(6));\n\t\treturn {\n\t\t\t...row,\n\t\t\tinput_tokens: normalizedInputTokens,\n\t\t\tinputTokens: normalizedInputTokens,\n\t\t\tcached_input_tokens: normalizedCachedInputTokens,\n\t\t\tcachedInputTokens: normalizedCachedInputTokens,\n\t\t\toutput_tokens: normalizedOutputTokens,\n\t\t\toutputTokens: normalizedOutputTokens,\n\t\t\ttotal_tokens: resolvedTotalTokens,\n\t\t\ttotalTokens: resolvedTotalTokens,\n\t\t\tcost_estimate: resolvedEstimatedUsd,\n\t\t\testimatedUsd: resolvedEstimatedUsd\n\t\t} as T;\n\t});\n}\n\nfunction cleanList(values: any, limit = 20, max = 500): string[] {\n\tif (!Array.isArray(values)) {\n\t\treturn [];\n\t}\n\tconst result: string[] = [];\n\tfor (const value of values) {\n\t\tconst normalized = cleanText(value, max);\n\t\tif (normalized && !result.includes(normalized)) {\n\t\t\tresult.push(normalized);\n\t\t}\n\t\tif (result.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn result;\n}\n\nfunction normalizeCheckStatus(value: any): AIQaCheckStatus {\n\tconst normalized = cleanText(value, 40).toLowerCase().replace(/[_\\s-]+/g, '_');\n\tif (normalized === 'passed' || normalized === 'ok' || normalized === 'ready') {\n\t\treturn 'pass';\n\t}\n\tif (normalized === 'failed' || normalized === 'error' || normalized === 'fail') {\n\t\treturn 'fail';\n\t}\n\tif (normalized === 'blocked' || normalized === 'dependency_blocked') {\n\t\treturn 'blocked';\n\t}\n\tif (normalized === 'warning') {\n\t\treturn 'warn';\n\t}\n\tif (normalized === 'skipped' || normalized === 'not_applicable') {\n\t\treturn 'skipped';\n\t}\n\treturn normalized === 'pass' || normalized === 'warn' ? normalized : 'unknown';\n}\n\nfunction normalizeCompileStatus(value: any): AIQaCompileStatus {\n\tconst normalized = cleanText(value, 40).toLowerCase().replace(/[_\\s-]+/g, '_');\n\tif (normalized === 'passed' || normalized === 'ok') {\n\t\treturn 'pass';\n\t}\n\tif (normalized === 'failed' || normalized === 'error') {\n\t\treturn 'fail';\n\t}\n\tif (normalized === 'blocked') {\n\t\treturn 'blocked';\n\t}\n\tif (normalized === 'stale' || normalized === 'stale_evidence') {\n\t\treturn 'stale';\n\t}\n\tif (normalized === 'skipped' || normalized === 'not_applicable') {\n\t\treturn 'skipped';\n\t}\n\treturn normalized === 'pass' || normalized === 'fail' ? normalized : 'unknown';\n}\n\nfunction makeGate(\n\tkey: string,\n\tlabel: string,\n\tstatus: AIRunGateStatus,\n\treason: string,\n\tevidenceRefs: string[] = [],\n\tnow?: Date | string,\n\tmetadata?: Record<string, any>\n): AIRunGateResult {\n\treturn {\n\t\tkey,\n\t\tlabel,\n\t\tstatus,\n\t\treason: cleanText(reason, 1400),\n\t\tevidenceRefs: cleanList(evidenceRefs, 20, 500),\n\t\trecordedAt: isoNow(now),\n\t\t...(metadata ? { metadata } : {})\n\t};\n}\n\nfunction failedOrBlocked(status: AIQaCheckStatus | AIQaCompileStatus): boolean {\n\treturn status === 'fail' || status === 'blocked';\n}\n\nfunction passed(status: AIQaCheckStatus | AIQaCompileStatus): boolean {\n\treturn status === 'pass';\n}\n\nfunction normalizeInfraChecks(values: AIQaInfraCheck[] | undefined): AIQaInfraCheck[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\tname: cleanText(entry?.name, 120) || 'infra_check',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tmessage: cleanText(entry?.message, 1000),\n\t\tpath: cleanText(entry?.path, 500)\n\t}));\n}\n\nfunction normalizeRouteProbes(values: AIQaRouteProbe[] | undefined): AIQaRouteProbe[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\troute: cleanText(entry?.route, 500) || '/',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tscreenshot: cleanText(entry?.screenshot, 500),\n\t\tcaption: cleanText(entry?.caption, 1000),\n\t\tmessage: cleanText(entry?.message, 1000),\n\t\tconsoleErrors: cleanList(entry?.consoleErrors, 30, 500),\n\t\tnetworkErrors: cleanList(entry?.networkErrors, 30, 500)\n\t}));\n}\n\nfunction normalizeBusinessAssertions(values: AIQaBusinessAssertion[] | undefined): AIQaBusinessAssertion[] {\n\treturn (Array.isArray(values) ? values : []).map((entry) => ({\n\t\t...entry,\n\t\tassertion: cleanText(entry?.assertion, 1000) || 'business assertion',\n\t\tstatus: normalizeCheckStatus(entry?.status),\n\t\tworkflow: cleanText(entry?.workflow, 400),\n\t\troute: cleanText(entry?.route, 500),\n\t\taction: cleanText(entry?.action, 500),\n\t\texpected: cleanText(entry?.expected, 1000),\n\t\tobserved: cleanText(entry?.observed, 1000),\n\t\tdataProof: cleanText(entry?.dataProof, 1400),\n\t\tartifactPaths: cleanList(entry?.artifactPaths, 30, 500),\n\t\tmessage: cleanText(entry?.message, 1000)\n\t}));\n}\n\nfunction collectBusinessAssertionArtifactPaths(assertions: AIQaBusinessAssertion[]): string[] {\n\tconst paths: string[] = [];\n\tfor (const assertion of assertions) {\n\t\tfor (const artifactPath of assertion.artifactPaths || []) {\n\t\t\tif (artifactPath && !paths.includes(artifactPath)) {\n\t\t\t\tpaths.push(artifactPath);\n\t\t\t}\n\t\t}\n\t}\n\treturn paths;\n}\n\nexport function buildAIQaRun(input: AIQaEvaluationInput = {}): AIQaRun {\n\tconst now = isoNow(input.now);\n\tconst infraChecks = normalizeInfraChecks(input.infraChecks);\n\tconst compile = input.compile\n\t\t? {\n\t\t\t...input.compile,\n\t\t\tstatus: normalizeCompileStatus(input.compile.status),\n\t\t\tcommand: cleanText(input.compile.command, 500),\n\t\t\tartifactPath: cleanText(input.compile.artifactPath, 500),\n\t\t\tmessage: cleanText(input.compile.message, 1000)\n\t\t}\n\t\t: undefined;\n\tconst routeProbes = normalizeRouteProbes(input.routeProbes);\n\tconst businessAssertions = normalizeBusinessAssertions(input.businessAssertions);\n\tconst artifacts = Array.isArray(input.artifacts) ? input.artifacts : [];\n\tconst gateResults: AIRunGateResult[] = [];\n\n\tconst failedInfra = infraChecks.filter((check) => failedOrBlocked(check.status));\n\tif (failedInfra.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_infra',\n\t\t\t'QA infrastructure',\n\t\t\t'blocked',\n\t\t\t`QA infrastructure failed before model/business validation: ${failedInfra.map((check) => `${check.name}: ${check.message || check.status}`).join('; ')}`,\n\t\t\tfailedInfra.map((check) => check.path || '').filter(Boolean),\n\t\t\tnow,\n\t\t\t{ failed_checks: failedInfra.map((check) => check.name) }\n\t\t));\n\t\treturn { outcome: 'infra_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (infraChecks.length) {\n\t\tgateResults.push(makeGate('qa_infra', 'QA infrastructure', 'pass', 'QA infrastructure preflight checks passed.', [], now));\n\t}\n\n\tif (compile && (failedOrBlocked(compile.status) || compile.status === 'stale' || compile.staleEvidence === true)) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_compile',\n\t\t\t'Compile/build',\n\t\t\t'fail',\n\t\t\tcompile.status === 'stale' || compile.staleEvidence === true\n\t\t\t\t? 'Compile/build evidence is stale and cannot be used for acceptance.'\n\t\t\t\t: (compile.message || 'Compile/build failed before browser QA.'),\n\t\t\tcompile.artifactPath ? [compile.artifactPath] : [],\n\t\t\tnow,\n\t\t\t{ command: compile.command || '' }\n\t\t));\n\t\treturn { outcome: 'compile_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (compile && passed(compile.status)) {\n\t\tgateResults.push(makeGate('qa_compile', 'Compile/build', 'pass', 'Compile/build evidence passed.', compile.artifactPath ? [compile.artifactPath] : [], now));\n\t}\n\n\tconst failedRouteProbes = routeProbes.filter((probe) => failedOrBlocked(probe.status) || probe.shellOnly === true);\n\tif (failedRouteProbes.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_route_probe',\n\t\t\t'Browser route probe',\n\t\t\t'fail',\n\t\t\t`Browser route probe failed or showed shell-only UI: ${failedRouteProbes.map((probe) => `${probe.route}: ${probe.message || probe.caption || probe.status}`).join('; ')}`,\n\t\t\tfailedRouteProbes.map((probe) => probe.screenshot || '').filter(Boolean),\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'route_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\tif (routeProbes.some((probe) => passed(probe.status))) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_route_probe',\n\t\t\t'Browser route probe',\n\t\t\t'pass',\n\t\t\t'Browser route reached authenticated application content. This is not business acceptance by itself.',\n\t\t\trouteProbes.map((probe) => probe.screenshot || '').filter(Boolean),\n\t\t\tnow\n\t\t));\n\t}\n\n\tconst failedBusinessAssertions = businessAssertions.filter((assertion) => failedOrBlocked(assertion.status));\n\tif (failedBusinessAssertions.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'fail',\n\t\t\t`Issue-specific workflow assertion failed: ${failedBusinessAssertions.map((assertion) => assertion.message || assertion.observed || assertion.assertion).join('; ')}`,\n\t\t\tcollectBusinessAssertionArtifactPaths(failedBusinessAssertions),\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'business_assertion_failed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tconst passedBusinessAssertions = businessAssertions.filter((assertion) => passed(assertion.status));\n\tif (passedBusinessAssertions.length) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'pass',\n\t\t\t'At least one issue-specific workflow/data assertion passed.',\n\t\t\tcollectBusinessAssertionArtifactPaths(passedBusinessAssertions),\n\t\t\tnow,\n\t\t\t{ passed_assertions: passedBusinessAssertions.map((assertion) => assertion.assertion) }\n\t\t));\n\t\treturn { outcome: 'business_assertion_passed', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tif (routeProbes.some((probe) => passed(probe.status))) {\n\t\tgateResults.push(makeGate(\n\t\t\t'qa_business_assertion',\n\t\t\t'Business assertion',\n\t\t\t'blocked',\n\t\t\t'Browser route loaded, but no issue-specific business assertion passed. Route-only proof cannot accept the run.',\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn { outcome: 'route_only_pass', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n\t}\n\n\tgateResults.push(makeGate(\n\t\t'qa_business_assertion',\n\t\t'Business assertion',\n\t\t'blocked',\n\t\t'No issue-specific QA assertion was recorded.',\n\t\t[],\n\t\tnow\n\t));\n\treturn { outcome: 'incomplete', infraChecks, compile, routeProbes, businessAssertions, artifacts, gateResults, updatedAt: now };\n}\n\nfunction normalizeQaRun(input?: AIQaRun | AIQaEvaluationInput): AIQaRun | undefined {\n\tif (!input) {\n\t\treturn undefined;\n\t}\n\tif ((input as AIQaRun).outcome && Array.isArray((input as AIQaRun).gateResults)) {\n\t\treturn input as AIQaRun;\n\t}\n\treturn buildAIQaRun(input as AIQaEvaluationInput);\n}\n\nfunction statusLooksFailed(value: any): boolean {\n\tconst normalized = cleanText(value, 120).toLowerCase();\n\treturn !!normalized && /(fail|failed|error|blocked|missing|empty|stale|skipped|not ready|not_ready|could not|cannot)/i.test(normalized);\n}\n\nfunction statusLooksPassed(value: any): boolean {\n\tconst normalized = cleanText(value, 120).toLowerCase();\n\treturn !!normalized && /(pass|passed|success|complete|completed|ready|published|deployed|live|merged)/i.test(normalized);\n}\n\nfunction addGateOnce(gates: AIRunGateResult[], gate: AIRunGateResult): void {\n\tif (gates.some((entry) => entry.key === gate.key && entry.status === gate.status && entry.reason === gate.reason)) {\n\t\treturn;\n\t}\n\tgates.push(gate);\n}\n\nexport function classifyAIRunOutcome(input: AIRunOutcomeInput = {}): AIRunOutcomeDecision {\n\tconst now = isoNow(input.now);\n\tconst gates = Array.isArray(input.gates) ? [...input.gates] : [];\n\tconst warnings: string[] = [];\n\tconst qa = normalizeQaRun(input.qa);\n\tif (qa) {\n\t\tfor (const gate of qa.gateResults) {\n\t\t\taddGateOnce(gates, gate);\n\t\t}\n\t}\n\n\tif (input.manualHandoff === true) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: 'Run requires manual handoff.',\n\t\t\tnextAction: 'Ask a human operator to resolve the blocked run.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (input.stopped === true || /stop|stopped|cancel|cancelled|paused/i.test(`${input.status || ''} ${input.phase || ''}`)) {\n\t\treturn {\n\t\t\toutcome: 'stopped',\n\t\t\treason: 'Run was stopped before accepted evidence was recorded.',\n\t\t\tnextAction: 'Resume or restart only if the request is still active.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (input.rejected === true) {\n\t\treturn {\n\t\t\toutcome: 'rejected',\n\t\t\treason: 'Run was explicitly rejected.',\n\t\t\tnextAction: 'Start a repair run from the failing evidence.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst blockedHotfixCommitGate = gates.find((gate) => gate.key === 'hotfix_commit_proof' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (blockedHotfixCommitGate) {\n\t\treturn {\n\t\t\toutcome: 'release_blocked',\n\t\t\treason: `Hotfix cannot be treated as durable until GitHub commit proof passes: ${blockedHotfixCommitGate.reason}`,\n\t\t\tnextAction: 'Commit and push the hotfix to GitHub, record sourceCommitSha/githubCommitUrl/gitCommitStatus/gitPushStatus, then rerun the smallest release gate.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedNoBlindLoopGate = gates.find((gate) => gate.key === 'manager_no_blind_loop_policy' && gate.status === 'blocked');\n\tif (blockedNoBlindLoopGate) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Manager parked the run to avoid a blind loop: ${blockedNoBlindLoopGate.reason}`,\n\t\t\tnextAction: 'Collect new material evidence or approve the specific recovery decision before any more model/code repair.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportDiagnosisBeforeRepairGate = gates.find((gate) => gate.key === 'support_diagnosis_before_repair' && gate.status === 'blocked');\n\tif (blockedSupportDiagnosisBeforeRepairGate) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Support repair is parked until root-cause diagnosis validates: ${blockedSupportDiagnosisBeforeRepairGate.reason}`,\n\t\t\tnextAction: 'Run read-only support diagnosis, record support_diagnosis_gate with owner_files and before/action/after proof, then retry only the owner-scoped repair.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (qa?.outcome === 'infra_failed') {\n\t\treturn {\n\t\t\toutcome: 'qa_infra_failed',\n\t\t\treason: 'QA infrastructure failed before product validation.',\n\t\t\tnextAction: 'Repair QA harness dependencies, ports, browser, Mongo, or startup before another model repair loop.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'compile_failed') {\n\t\treturn {\n\t\t\toutcome: 'build_failed',\n\t\t\treason: 'Compile/build evidence failed or was stale.',\n\t\t\tnextAction: 'Repair compile/build first, then rerun QA from the same failed step.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'route_failed') {\n\t\treturn {\n\t\t\toutcome: 'qa_incomplete',\n\t\t\treason: 'Browser route probe failed before business proof.',\n\t\t\tnextAction: 'Repair route/auth/startup issue and rerun the same browser route probe.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedAICoderJourneyContractGate = gates.find((gate) => gate.key === 'aicoder_journey_contract' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (blockedAICoderJourneyContractGate) {\n\t\tconst claimedSuccess = input.explicitAccepted === true || input.scorecardPassed === true || statusLooksPassed(input.scorecardStatus) || statusLooksPassed(`${input.status || ''} ${input.phase || ''}`);\n\t\treturn {\n\t\t\toutcome: claimedSuccess ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: claimedSuccess\n\t\t\t\t? `AICoder run claimed success without a valid Journey Contract: ${blockedAICoderJourneyContractGate.reason}`\n\t\t\t\t: `AICoder workflow is blocked until the Journey Contract validates: ${blockedAICoderJourneyContractGate.reason}`,\n\t\t\tnextAction: 'Generate or repair docs/APP_JOURNEY_CONTRACT.md, validate first/next/last workflow/data story/QA assertions, then rerun workflow build and workflow QA.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportNextActionContractGate = gates.find((gate) => gate.key === 'support_next_action_contract' && gate.status === 'blocked');\n\tif (\n\t\tblockedSupportNextActionContractGate\n\t\t&& qa?.outcome !== 'business_assertion_passed'\n\t\t&& input.scorecardPassed !== true\n\t\t&& !statusLooksPassed(input.scorecardStatus)\n\t) {\n\t\treturn {\n\t\t\toutcome: 'manual_handoff',\n\t\t\treason: `Support manager cannot safely continue without a valid next-action contract: ${blockedSupportNextActionContractGate.reason}`,\n\t\t\tnextAction: 'Record one validated next-action contract with safeToAutoRun, canRunWithoutCodexMonitor, codexFallbackRequired, preconditions, stop conditions, and success evidence before another autonomous recovery.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tconst blockedSupportIssueClassProbePlanGate = gates.find((gate) => gate.key === 'support_issue_class_probe_plan' && (gate.status === 'blocked' || gate.status === 'fail'));\n\tif (input.source === 'support_ticket' && blockedSupportIssueClassProbePlanGate) {\n\t\tconst claimedSuccess = input.explicitAccepted === true\n\t\t\t|| input.scorecardPassed === true\n\t\t\t|| statusLooksPassed(input.scorecardStatus)\n\t\t\t|| statusLooksPassed(`${input.status || ''} ${input.phase || ''}`);\n\t\treturn {\n\t\t\toutcome: claimedSuccess ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: claimedSuccess\n\t\t\t\t? `Support run claimed success without a valid issue-class probe plan: ${blockedSupportIssueClassProbePlanGate.reason}`\n\t\t\t\t: `Support business proof is blocked until the issue-class probe plan validates: ${blockedSupportIssueClassProbePlanGate.reason}`,\n\t\t\tnextAction: 'Generate or repair the Support IssueClassProbePlan from the diagnosis proof_plan, then rerun issue-specific business proof QA.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'route_only_pass' || qa?.outcome === 'incomplete') {\n\t\treturn {\n\t\t\toutcome: input.scorecardPassed === true ? 'false_pass' : 'qa_incomplete',\n\t\t\treason: input.scorecardPassed === true\n\t\t\t\t? 'Scorecard or workflow status passed without issue-specific business assertion proof.'\n\t\t\t\t: 'QA has not recorded issue-specific business assertion proof.',\n\t\t\tnextAction: 'Add before/action/after workflow proof with screenshot/data assertions before acceptance.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\tif (qa?.outcome === 'business_assertion_failed') {\n\t\treturn {\n\t\t\toutcome: input.terminal === true ? 'rejected' : 'qa_incomplete',\n\t\t\treason: 'Issue-specific business assertion failed.',\n\t\t\tnextAction: 'Repair the product/data defect and rerun the failing assertion.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst hasBusinessPass = qa?.outcome === 'business_assertion_passed';\n\tconst scorecardPassed = input.scorecardPassed === true || statusLooksPassed(input.scorecardStatus);\n\tconst releaseBlockers: string[] = [];\n\tif (statusLooksFailed(input.deployStatus)) {\n\t\treleaseBlockers.push(`deploy=${cleanText(input.deployStatus, 120)}`);\n\t}\n\tif (statusLooksFailed(input.publishStatus)) {\n\t\treleaseBlockers.push(`publish=${cleanText(input.publishStatus, 120)}`);\n\t}\n\tif (statusLooksFailed(input.sampleDataStatus)) {\n\t\treleaseBlockers.push(`sample_data=${cleanText(input.sampleDataStatus, 120)}`);\n\t}\n\tif (releaseBlockers.length && (scorecardPassed || hasBusinessPass)) {\n\t\taddGateOnce(gates, makeGate(\n\t\t\t'release',\n\t\t\t'Release/deploy',\n\t\t\t'fail',\n\t\t\t`Final acceptance is blocked after QA/scorecard because release gates failed: ${releaseBlockers.join(', ')}.`,\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn {\n\t\t\toutcome: 'release_blocked',\n\t\t\treason: `Release gates failed after QA/scorecard: ${releaseBlockers.join(', ')}.`,\n\t\t\tnextAction: 'Repair deploy/publish/sample-data coverage before marking the run accepted.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (scorecardPassed && !hasBusinessPass) {\n\t\twarnings.push('scorecard_pass_without_business_assertion');\n\t\taddGateOnce(gates, makeGate(\n\t\t\t'business_assertion_required',\n\t\t\t'Business assertion',\n\t\t\t'blocked',\n\t\t\t'Scorecard passed, but no issue-specific business assertion proof was recorded.',\n\t\t\t[],\n\t\t\tnow\n\t\t));\n\t\treturn {\n\t\t\toutcome: 'false_pass',\n\t\t\treason: 'Scorecard-only proof is not acceptance.',\n\t\t\tnextAction: 'Record issue-specific workflow/data proof, then reclassify the run.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tconst statusPhase = `${input.status || ''} ${input.phase || ''}`;\n\tif ((input.explicitAccepted === true || statusLooksPassed(statusPhase) || scorecardPassed) && hasBusinessPass) {\n\t\treturn {\n\t\t\toutcome: 'accepted',\n\t\t\treason: 'Run has terminal success signal and issue-specific business assertion proof.',\n\t\t\tnextAction: 'No repair action required.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\tif (statusLooksFailed(statusPhase)) {\n\t\treturn {\n\t\t\toutcome: 'rejected',\n\t\t\treason: 'Run ended with a failure status and no accepted proof.',\n\t\t\tnextAction: 'Classify the failing gate and rerun the smallest repair step.',\n\t\t\tgates,\n\t\t\twarnings,\n\t\t\trecordedAt: now\n\t\t};\n\t}\n\n\treturn {\n\t\toutcome: 'unknown',\n\t\treason: 'Run does not have enough normalized evidence for a terminal label.',\n\t\tnextAction: 'Ingest QA, deploy, assistant, usage, and commit evidence before using this run for training.',\n\t\tgates,\n\t\twarnings,\n\t\trecordedAt: now\n\t};\n}\n\nexport function buildAIRun(input: Omit<AIRun, 'outcome' | 'gates'> & {\n\toutcome?: AIRunOutcomeLabel;\n\tgates?: AIRunGateResult[];\n\tscorecardPassed?: boolean;\n\tdeployStatus?: string;\n\tpublishStatus?: string;\n\tsampleDataStatus?: string;\n\tmanualHandoff?: boolean;\n\tstopped?: boolean;\n\trejected?: boolean;\n\texplicitAccepted?: boolean;\n\tterminal?: boolean;\n\tnow?: Date | string;\n}): AIRun {\n\tconst decision = input.outcome\n\t\t? {\n\t\t\toutcome: input.outcome,\n\t\t\tgates: input.gates || [],\n\t\t\twarnings: input.warnings || [],\n\t\t\tnextAction: input.nextAction || '',\n\t\t\treason: '',\n\t\t\trecordedAt: isoNow(input.now)\n\t\t}\n\t\t: classifyAIRunOutcome({\n\t\t\tsource: input.source,\n\t\t\tstatus: input.status,\n\t\t\tphase: input.phase,\n\t\t\tqa: input.qa,\n\t\t\tgates: input.gates,\n\t\t\tscorecardPassed: input.scorecardPassed,\n\t\t\tdeployStatus: input.deployStatus,\n\t\t\tpublishStatus: input.publishStatus,\n\t\t\tsampleDataStatus: input.sampleDataStatus,\n\t\t\tmanualHandoff: input.manualHandoff,\n\t\t\tstopped: input.stopped,\n\t\t\trejected: input.rejected,\n\t\t\texplicitAccepted: input.explicitAccepted,\n\t\t\tterminal: input.terminal,\n\t\t\tnow: input.now\n\t\t});\n\treturn {\n\t\tid: input.id,\n\t\tsource: input.source || 'unknown',\n\t\tsourceIds: input.sourceIds || {},\n\t\ttitle: input.title,\n\t\tstatus: input.status,\n\t\tphase: input.phase,\n\t\tstartedAt: input.startedAt,\n\t\tcompletedAt: input.completedAt,\n\t\toutcome: decision.outcome,\n\t\tevents: Array.isArray(input.events) ? input.events : [],\n\t\tgates: decision.gates,\n\t\tqa: normalizeQaRun(input.qa),\n\t\tcost: input.cost,\n\t\tnextAction: decision.nextAction,\n\t\twarnings: decision.warnings,\n\t\tmetadata: input.metadata\n\t};\n}\n\nexport function buildAIRunCost(entries: OpenAIUsageCostEntry[] = []): AIRunCost {\n\tconst cost: AIRunCost = {\n\t\tinputTokens: 0,\n\t\tcachedInputTokens: 0,\n\t\toutputTokens: 0,\n\t\ttotalTokens: 0,\n\t\testimatedUsd: 0,\n\t\tmodels: [],\n\t\tcategories: {},\n\t\tsources: {},\n\t\tsurfaces: {},\n\t\tmanualEstimatedUsd: 0,\n\t\tuntrackedEstimatedUsd: 0,\n\t\tuntrackedWarnings: []\n\t};\n\tfor (const entry of normalizeOpenAIUsageRowsForCosting(entries)) {\n\t\tconst category = cleanText(entry.category, 120) || 'unknown';\n\t\tconst source = cleanText(entry.usage_source ?? entry.usageSource, 80) || 'unknown';\n\t\tconst surface = cleanText(entry.usage_surface ?? entry.usageSurface, 80) || 'unknown';\n\t\tconst isManual = entry.is_manual === true || entry.isManual === true || source === 'manual_codex';\n\t\tconst isUntracked = entry.is_untracked === true || entry.isUntracked === true;\n\t\tconst untrackedReason = cleanText(entry.untracked_reason ?? entry.untrackedReason, 500);\n\t\tconst model = cleanText(entry.model, 120);\n\t\tconst inputTokens = Number(entry.input_tokens ?? entry.inputTokens ?? 0) || 0;\n\t\tconst cachedInputTokens = Number(entry.cached_input_tokens ?? entry.cachedInputTokens ?? 0) || 0;\n\t\tconst outputTokens = Number(entry.output_tokens ?? entry.outputTokens ?? 0) || 0;\n\t\tconst totalTokens = Number(entry.total_tokens ?? entry.totalTokens ?? (inputTokens + outputTokens)) || 0;\n\t\tconst estimatedUsd = Number(entry.cost_estimate ?? entry.estimatedUsd ?? 0) || 0;\n\t\tcost.inputTokens += inputTokens;\n\t\tcost.cachedInputTokens += cachedInputTokens;\n\t\tcost.outputTokens += outputTokens;\n\t\tcost.totalTokens += totalTokens;\n\t\tcost.estimatedUsd += estimatedUsd;\n\t\tif (isManual) {\n\t\t\tcost.manualEstimatedUsd = Number(cost.manualEstimatedUsd || 0) + estimatedUsd;\n\t\t}\n\t\tif (isUntracked) {\n\t\t\tcost.untrackedEstimatedUsd = Number(cost.untrackedEstimatedUsd || 0) + estimatedUsd;\n\t\t\tconst warning = untrackedReason || `${source} usage is an estimate outside managed runner telemetry.`;\n\t\t\tif (warning && !cost.untrackedWarnings?.includes(warning)) {\n\t\t\t\tcost.untrackedWarnings?.push(warning);\n\t\t\t}\n\t\t}\n\t\tif (model && !cost.models.includes(model)) {\n\t\t\tcost.models.push(model);\n\t\t}\n\t\tif (!cost.categories[category]) {\n\t\t\tcost.categories[category] = {\n\t\t\t\tinputTokens: 0,\n\t\t\t\tcachedInputTokens: 0,\n\t\t\t\toutputTokens: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t}\n\t\tcost.categories[category].inputTokens += inputTokens;\n\t\tcost.categories[category].cachedInputTokens += cachedInputTokens;\n\t\tcost.categories[category].outputTokens += outputTokens;\n\t\tcost.categories[category].totalTokens += totalTokens;\n\t\tcost.categories[category].estimatedUsd += estimatedUsd;\n\t\tcost.categories[category].count += 1;\n\t\tif (!cost.sources?.[source]) {\n\t\t\tcost.sources![source] = {\n\t\t\t\tinputTokens: 0,\n\t\t\t\tcachedInputTokens: 0,\n\t\t\t\toutputTokens: 0,\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0,\n\t\t\t\tmanualCount: 0,\n\t\t\t\tuntrackedCount: 0\n\t\t\t};\n\t\t}\n\t\tcost.sources[source].inputTokens += inputTokens;\n\t\tcost.sources[source].cachedInputTokens += cachedInputTokens;\n\t\tcost.sources[source].outputTokens += outputTokens;\n\t\tcost.sources[source].totalTokens += totalTokens;\n\t\tcost.sources[source].estimatedUsd += estimatedUsd;\n\t\tcost.sources[source].count += 1;\n\t\tif (isManual) {\n\t\t\tcost.sources[source].manualCount += 1;\n\t\t}\n\t\tif (isUntracked) {\n\t\t\tcost.sources[source].untrackedCount += 1;\n\t\t}\n\t\tif (!cost.surfaces?.[surface]) {\n\t\t\tcost.surfaces![surface] = {\n\t\t\t\ttotalTokens: 0,\n\t\t\t\testimatedUsd: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t}\n\t\tcost.surfaces[surface].totalTokens += totalTokens;\n\t\tcost.surfaces[surface].estimatedUsd += estimatedUsd;\n\t\tcost.surfaces[surface].count += 1;\n\t}\n\tcost.estimatedUsd = Number(cost.estimatedUsd.toFixed(6));\n\tcost.manualEstimatedUsd = Number(Number(cost.manualEstimatedUsd || 0).toFixed(6));\n\tcost.untrackedEstimatedUsd = Number(Number(cost.untrackedEstimatedUsd || 0).toFixed(6));\n\tfor (const category of Object.keys(cost.categories)) {\n\t\tcost.categories[category].estimatedUsd = Number(cost.categories[category].estimatedUsd.toFixed(6));\n\t}\n\tfor (const source of Object.keys(cost.sources || {})) {\n\t\tcost.sources![source].estimatedUsd = Number(cost.sources![source].estimatedUsd.toFixed(6));\n\t}\n\tfor (const surface of Object.keys(cost.surfaces || {})) {\n\t\tcost.surfaces![surface].estimatedUsd = Number(cost.surfaces![surface].estimatedUsd.toFixed(6));\n\t}\n\treturn cost;\n}\n\nexport function redactAIRunTrainingExample(example: AIRunTrainingExample): AIRunTrainingExample {\n\tconst redact = (value: string): string => cleanText(value, 5000)\n\t\t.replace(/mongodb(?:\\+srv)?:\\/\\/[^\\s\"'<>]+/ig, '[redacted-mongo-url]')\n\t\t.replace(/\\b(?:sk|ghp|xoxb|AKIA)[A-Za-z0-9_\\-]{12,}\\b/g, '[redacted-secret]')\n\t\t.replace(/\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z]{2,}\\b/ig, '[redacted-email]');\n\treturn {\n\t\t...example,\n\t\tinputSummary: redact(example.inputSummary),\n\t\tactionSummary: redact(example.actionSummary),\n\t\tevidence: cleanList(example.evidence, 80, 5000).map(redact)\n\t};\n}\n"]}
|
|
@@ -311,6 +311,7 @@ export interface ResolveIOAIManagerHotfixEvidenceRecord {
|
|
|
311
311
|
validation: ResolveIOAIManagerHotfixEvidenceValidation;
|
|
312
312
|
sourceCommitSha: string;
|
|
313
313
|
githubCommitUrl: string;
|
|
314
|
+
gitCommitStatus: string;
|
|
314
315
|
gitPushStatus: string;
|
|
315
316
|
githubCommitRequired: boolean;
|
|
316
317
|
githubCommitProofPassed: boolean;
|
|
@@ -514,7 +514,7 @@ function githubCommitProofBlockers(value, channel) {
|
|
|
514
514
|
var gitPushStatus = cleanText(value.gitPushStatus, 160);
|
|
515
515
|
var urlCommitSha = extractGithubCommitSha(githubCommitUrl);
|
|
516
516
|
if (!sourceCommitSha || !githubCommitUrl) {
|
|
517
|
-
blockers.push("".concat(channel, " hotfix requires sourceCommitSha, githubCommitUrl, and passed gitPushStatus so live hotfixes are backed by a
|
|
517
|
+
blockers.push("".concat(channel, " hotfix requires sourceCommitSha, githubCommitUrl, passed gitCommitStatus, and passed gitPushStatus so live hotfixes are backed by a committed and pushed GitHub change before continuation."));
|
|
518
518
|
return blockers;
|
|
519
519
|
}
|
|
520
520
|
if (!isFullGitCommitSha(sourceCommitSha)) {
|
|
@@ -526,15 +526,18 @@ function githubCommitProofBlockers(value, channel) {
|
|
|
526
526
|
else if (isFullGitCommitSha(sourceCommitSha) && urlCommitSha !== sourceCommitSha.toLowerCase()) {
|
|
527
527
|
blockers.push("".concat(channel, " hotfix githubCommitUrl commit SHA must match sourceCommitSha."));
|
|
528
528
|
}
|
|
529
|
+
if (!gitCommitStatus) {
|
|
530
|
+
blockers.push("".concat(channel, " hotfix requires passed gitCommitStatus so the manager records that the hotfix diff was committed before continuation."));
|
|
531
|
+
}
|
|
532
|
+
else if (!hotfixStatusPassed(gitCommitStatus)) {
|
|
533
|
+
blockers.push("".concat(channel, " hotfix gitCommitStatus must be passed before continuation."));
|
|
534
|
+
}
|
|
529
535
|
if (!gitPushStatus) {
|
|
530
536
|
blockers.push("".concat(channel, " hotfix requires passed gitPushStatus so the manager knows the hotfix commit is present on GitHub before continuation."));
|
|
531
537
|
}
|
|
532
538
|
else if (!hotfixStatusPassed(gitPushStatus)) {
|
|
533
539
|
blockers.push("".concat(channel, " hotfix gitPushStatus must be passed before continuation."));
|
|
534
540
|
}
|
|
535
|
-
if (gitCommitStatus && !hotfixStatusPassed(gitCommitStatus)) {
|
|
536
|
-
blockers.push("".concat(channel, " hotfix gitCommitStatus must be passed when provided."));
|
|
537
|
-
}
|
|
538
541
|
return blockers;
|
|
539
542
|
}
|
|
540
543
|
function evaluateResolveIOAIManagerHotfixGitProof(value, channelHint) {
|
|
@@ -560,7 +563,7 @@ function evaluateResolveIOAIManagerHotfixGitProof(value, channelHint) {
|
|
|
560
563
|
: [];
|
|
561
564
|
var status = !required
|
|
562
565
|
? 'not_required'
|
|
563
|
-
: (!sourceCommitSha || !githubCommitUrl || !gitPushStatus)
|
|
566
|
+
: (!sourceCommitSha || !githubCommitUrl || !gitCommitStatus || !gitPushStatus)
|
|
564
567
|
? 'missing'
|
|
565
568
|
: blockers.length
|
|
566
569
|
? 'invalid'
|
|
@@ -582,7 +585,7 @@ function evaluateResolveIOAIManagerHotfixGitProof(value, channelHint) {
|
|
|
582
585
|
? ['commit_and_push_hotfix_to_github', 'verify_github_commit_url_and_push_status', 'record_hotfix_evidence']
|
|
583
586
|
: [],
|
|
584
587
|
requiredEvidence: required
|
|
585
|
-
? ['full 40-character sourceCommitSha', 'matching GitHub commit URL', 'passed gitPushStatus']
|
|
588
|
+
? ['full 40-character sourceCommitSha', 'matching GitHub commit URL', 'passed gitCommitStatus', 'passed gitPushStatus']
|
|
586
589
|
: []
|
|
587
590
|
};
|
|
588
591
|
}
|
|
@@ -787,7 +790,7 @@ function mergeHotfixEvidenceRecordInput(input) {
|
|
|
787
790
|
function resolveHotfixEvidenceRequiredFields(channel) {
|
|
788
791
|
var fields = ['channel'];
|
|
789
792
|
if (hotfixRequiresGithubCommit(channel)) {
|
|
790
|
-
fields.push('sourceCommitSha', 'githubCommitUrl', 'gitPushStatus');
|
|
793
|
+
fields.push('sourceCommitSha', 'githubCommitUrl', 'gitCommitStatus', 'gitPushStatus');
|
|
791
794
|
}
|
|
792
795
|
if (channel === 'backend_js') {
|
|
793
796
|
fields.push('compiledArtifactPath', 'target.host', 'target.path', 'remoteChecksumAfter', 'restartEvidence', 'healthCheckStatus', 'selfTestStatus');
|
|
@@ -833,6 +836,8 @@ function hotfixEvidenceFieldPresent(evidence, field) {
|
|
|
833
836
|
return isFullGitCommitSha(evidence.sourceCommitSha || '');
|
|
834
837
|
case 'githubCommitUrl':
|
|
835
838
|
return !!extractGithubCommitSha(evidence.githubCommitUrl || '');
|
|
839
|
+
case 'gitCommitStatus':
|
|
840
|
+
return hotfixStatusPassed(evidence.gitCommitStatus);
|
|
836
841
|
case 'gitPushStatus':
|
|
837
842
|
return hotfixStatusPassed(evidence.gitPushStatus);
|
|
838
843
|
case 'compiledArtifactPath':
|
|
@@ -923,6 +928,7 @@ function buildResolveIOAIManagerHotfixEvidenceRecord(input) {
|
|
|
923
928
|
validation: validation,
|
|
924
929
|
sourceCommitSha: githubCommitGuard.sourceCommitSha,
|
|
925
930
|
githubCommitUrl: githubCommitGuard.githubCommitUrl,
|
|
931
|
+
gitCommitStatus: githubCommitGuard.gitCommitStatus,
|
|
926
932
|
gitPushStatus: githubCommitGuard.gitPushStatus,
|
|
927
933
|
githubCommitRequired: githubCommitGuard.required,
|
|
928
934
|
githubCommitProofPassed: githubCommitGuard.passed,
|
|
@@ -959,7 +965,7 @@ function decideResolveIOAIManagerHotfixContinuation(input) {
|
|
|
959
965
|
action = 'record_hotfix_evidence';
|
|
960
966
|
reason = githubCommitGuard.blockers.length
|
|
961
967
|
? "Manager hotfix cannot continue until the hotfix is committed and pushed: ".concat(githubCommitGuard.blockers.join('; '))
|
|
962
|
-
: 'Manager hotfix cannot continue until sourceCommitSha, githubCommitUrl, and passed gitPushStatus prove the hotfix is
|
|
968
|
+
: 'Manager hotfix cannot continue until sourceCommitSha, githubCommitUrl, passed gitCommitStatus, and passed gitPushStatus prove the hotfix is committed and pushed to GitHub.';
|
|
963
969
|
nextCommands.push.apply(nextCommands, __spreadArray(__spreadArray([], __read(githubCommitGuard.nextCommands), false), ['rerun_hotfix_evidence_validator'], false));
|
|
964
970
|
try {
|
|
965
971
|
for (var _d = __values(githubCommitGuard.blockers), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
@@ -1063,7 +1069,7 @@ function decideResolveIOAIManagerHotfixCommitGuard(input) {
|
|
|
1063
1069
|
reason: blocked
|
|
1064
1070
|
? (blockers.length
|
|
1065
1071
|
? "Hotfix continuation is blocked until GitHub commit proof is recorded: ".concat(blockers.join('; '))
|
|
1066
|
-
: 'Hotfix continuation is blocked until sourceCommitSha, githubCommitUrl, and passed gitPushStatus prove the hotfix is pushed to GitHub.')
|
|
1072
|
+
: 'Hotfix continuation is blocked until sourceCommitSha, githubCommitUrl, passed gitCommitStatus, and passed gitPushStatus prove the hotfix is committed and pushed to GitHub.')
|
|
1067
1073
|
: (active ? 'Hotfix GitHub commit proof is recorded.' : 'No hotfix commit guard is active.'),
|
|
1068
1074
|
nextAction: blocked ? 'record_hotfix_evidence' : 'continue',
|
|
1069
1075
|
channel: validation.channel || githubCommitGuard.channel || '',
|
|
@@ -1215,16 +1221,16 @@ function buildHotfixFirstReleasePlan(input) {
|
|
|
1215
1221
|
steps: [
|
|
1216
1222
|
hotfixStep('static_ui_hotfix', 'Static UI hotfix', 'static_ui', {
|
|
1217
1223
|
safeToAutoRun: true,
|
|
1218
|
-
requiredEvidence: ['sourceCommitSha, githubCommitUrl, and passed gitPushStatus', 'built dist path', 'target S3 bucket and CloudFront distribution', 'changed frontend bundle or asset list'],
|
|
1224
|
+
requiredEvidence: ['sourceCommitSha, githubCommitUrl, passed gitCommitStatus, and passed gitPushStatus', 'built dist path', 'target S3 bucket and CloudFront distribution', 'changed frontend bundle or asset list'],
|
|
1219
1225
|
successEvidence: ['GitHub commit and push proof', 'S3 upload result', 'CloudFront invalidation id', 'public bundle contains expected hotfix marker']
|
|
1220
1226
|
}),
|
|
1221
1227
|
hotfixStep('backend_js_hotfix', 'Backend JS hotfix', 'backend_js', {
|
|
1222
|
-
requiredEvidence: ['sourceCommitSha, githubCommitUrl, and passed gitPushStatus', 'compiled JS artifact path', 'target backend host', 'diff limited to runner/operator code'],
|
|
1228
|
+
requiredEvidence: ['sourceCommitSha, githubCommitUrl, passed gitCommitStatus, and passed gitPushStatus', 'compiled JS artifact path', 'target backend host', 'diff limited to runner/operator code'],
|
|
1223
1229
|
successEvidence: ['GitHub commit and push proof', 'remote file checksum', 'service restart or process reload evidence', 'self-test passes']
|
|
1224
1230
|
}),
|
|
1225
1231
|
hotfixStep('config_seed_cache_restart', 'Config, seed, cache, or restart repair', 'config', {
|
|
1226
1232
|
safeToAutoRun: true,
|
|
1227
|
-
requiredEvidence: ['sourceCommitSha, githubCommitUrl, and passed gitPushStatus', 'exact config/seed/cache key or process name', 'why no product artifact changed'],
|
|
1233
|
+
requiredEvidence: ['sourceCommitSha, githubCommitUrl, passed gitCommitStatus, and passed gitPushStatus', 'exact config/seed/cache key or process name', 'why no product artifact changed'],
|
|
1228
1234
|
successEvidence: ['GitHub commit and push proof', 'release gate rerun result', 'operator console release snapshot refreshed']
|
|
1229
1235
|
})
|
|
1230
1236
|
],
|
|
@@ -1747,6 +1753,7 @@ function recoveryReleaseRequiredEvidence(policy) {
|
|
|
1747
1753
|
return Array.from(new Set(__spreadArray(__spreadArray(__spreadArray([], __read(policy.requiredEvidence), false), __read(stepEvidence), false), __read((policy.hotfixPreferred ? [
|
|
1748
1754
|
'full 40-character sourceCommitSha',
|
|
1749
1755
|
'matching githubCommitUrl',
|
|
1756
|
+
'passed gitCommitStatus before any live hotfix is treated as durable',
|
|
1750
1757
|
'passed gitPushStatus before any live hotfix is treated as durable'
|
|
1751
1758
|
] : [])), false).map(function (entry) { return cleanText(entry, 500); }).filter(Boolean))).slice(0, 30);
|
|
1752
1759
|
}
|