@cartanova/qgrid-cli 2.2.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/dist/application/qgrid/conv-routing.js +2 -6
- package/bundle/dist/application/qgrid/qgrid.dispatcher.js +64 -37
- package/bundle/dist/application/qgrid/token-subscriber.js +14 -1
- package/bundle/dist/application/qgrid/tool-emulation.js +25 -20
- package/bundle/dist/application/request-log/request-log.model.js +54 -8
- package/bundle/dist/sonamu.config.js +11 -2
- package/bundle/dist/testing/global.js +5 -2
- package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +30 -0
- package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +215 -0
- package/bundle/dist/utils/providers/anthropic/claude-session.js +220 -0
- package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +177 -0
- package/bundle/dist/utils/providers/common/model-cost.js +64 -32
- package/bundle/dist/utils/providers/openai/openai-refresh.js +21 -9
- package/bundle/src/application/qgrid/conv-routing.test.ts +85 -0
- package/bundle/src/application/qgrid/conv-routing.ts +3 -2
- package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +37 -0
- package/bundle/src/application/qgrid/qgrid.dispatcher.ts +99 -44
- package/bundle/src/application/qgrid/token-subscriber.ts +23 -1
- package/bundle/src/application/qgrid/tool-emulation.test.ts +46 -0
- package/bundle/src/application/qgrid/tool-emulation.ts +15 -3
- package/bundle/src/application/request-log/request-log.model.ts +98 -13
- package/bundle/src/sonamu.config.ts +13 -2
- package/bundle/src/testing/global.ts +16 -2
- package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +38 -0
- package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.test.ts +564 -0
- package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +365 -0
- package/bundle/src/utils/providers/anthropic/claude-session.test.ts +263 -0
- package/bundle/src/utils/providers/anthropic/claude-session.ts +327 -0
- package/bundle/src/utils/providers/anthropic/stream-json-adapter.test.ts +373 -0
- package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +344 -0
- package/bundle/src/utils/providers/common/model-cost.test.ts +39 -0
- package/bundle/src/utils/providers/common/model-cost.ts +159 -25
- package/bundle/src/utils/providers/common/provider-dispatcher.ts +13 -2
- package/bundle/src/utils/providers/openai/openai-refresh.ts +34 -9
- package/package.json +1 -1
|
@@ -33,11 +33,7 @@ function decideConvRouting(input) {
|
|
|
33
33
|
epoch: coord.epoch
|
|
34
34
|
} : void 0,
|
|
35
35
|
reuseInput: eligible ? buildDeltaInput(input) : void 0,
|
|
36
|
-
coldInput:
|
|
37
|
-
type: "text",
|
|
38
|
-
text: input.prompt,
|
|
39
|
-
text_elements: []
|
|
40
|
-
}],
|
|
36
|
+
coldInput: buildDeltaInput(input),
|
|
41
37
|
coldHistory: history,
|
|
42
38
|
systemHash: sysHash
|
|
43
39
|
};
|
|
@@ -65,4 +61,4 @@ function issueConvContext(threadCoord, decision) {
|
|
|
65
61
|
//#endregion
|
|
66
62
|
export { decideConvRouting, issueConvContext, systemHash };
|
|
67
63
|
|
|
68
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udi1yb3V0aW5nLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9xZ3JpZC9jb252LXJvdXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjb252LXJvdXRpbmcg4oCUIGNvbnZlcnNhdGlvbig9Y29kZXggdGhyZWFkKSDsnqzsgqzsmqnsnYQg7JyE7ZWcIHRocmVhZCDsooztkZwg6rKA7KadL+q1rOyEsS5cbiAqXG4gKiDrqqntkZw6IHRocmVhZCg9Y29udmVyc2F0aW9uX2lkPXByb21wdF9jYWNoZV9rZXkp66W8IOyerOyCrOyaqe2VtCBPcGVuQUkgcHJvbXB0IGNhY2hpbmcg7KCB7KSRLlxuICogLSDtm4Tsho0gdHVybjog6riw7KG0IHRocmVhZCDsl5AgZGVsdGEo66eI7KeA66eJIHVzZXIgLyB0b29sIOqysOqzvCnrp4wg67O064OEIChoaXN0b3J5IGluamVjdCDsl4bsnYwpLlxuICogLSDssqsgdHVybiAvIOqygOymnSDsi6TtjKg6IOyDiCB0aHJlYWQgKyBoaXN0b3J5IGluamVjdCAo7Y+067CxLCDsoJXtmZXshLEg67O07KG0KS5cbiAqXG4gKiDsi53rs4Q6IOyEnOuyhCDrsJzquIkg67aI7Yis66qFIHRocmVhZCDsooztkZwoUWdyaWRUaHJlYWRDb29yZCnrpbwg7YG065286rCAIOq3uOuMgOuhnCDtmozshqEuXG4gKiDqsoDspp06IHN5c3RlbUhhc2go64uk66W4IOuMgO2ZlCDsmKTsoJHsho0g7LCo64uoKSArIChkaXNwYXRjaGVy7J2YKSBlcG9jaC93b3JrZXIg7IOd7KG0LlxuICovXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJJbnB1dCB9IGZyb20gXCIuLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Vc2VySW5wdXRcIjtcbmltcG9ydCB7IHR5cGUgUmV1c2VUaHJlYWRDb29yZCB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3Byb3ZpZGVyLWRpc3BhdGNoZXJcIjtcbmltcG9ydCB7IHR5cGUgUWdyaWRUaHJlYWRDb29yZCwgdHlwZSBRdWVyeUlucHV0LCB0eXBlIFFncmlkVG9vbFJlc3VsdElucHV0IH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN5c3RlbUhhc2goc3lzdGVtPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAudXBkYXRlKHN5c3RlbSA/PyBcIlwiKVxuICAgIC5kaWdlc3QoXCJoZXhcIilcbiAgICAuc2xpY2UoMCwgMTYpO1xufVxuXG4vLyB0b29sIOqysOqzvOulvCDri6TsnYwgdHVybiDsnZggaW5wdXQgdGV4dCDroZwg67OA7ZmYIChjb2RleCB0dXJuL3N0YXJ0LmlucHV0IOydgCBVc2VySW5wdXQg66eMIOuwm+ydjCkuXG5mdW5jdGlvbiB0b29sUmVzdWx0c1RvVGV4dCh0b29sUmVzdWx0czogUWdyaWRUb29sUmVzdWx0SW5wdXRbXSk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gdG9vbFJlc3VsdHMubWFwKCh0cikgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSB0ci50b29sTmFtZSA/IGAgKCR7dHIudG9vbE5hbWV9KWAgOiBcIlwiO1xuICAgIGNvbnN0IGVyck1hcmsgPSB0ci5pc0Vycm9yID8gXCIgW2Vycm9yXVwiIDogXCJcIjtcbiAgICByZXR1cm4gYFRvb2wgcmVzdWx0IGZvciBjYWxsICR7dHIudG9vbENhbGxJZH0ke25hbWV9JHtlcnJNYXJrfTogJHt0ci5vdXRwdXR9YDtcbiAgfSk7XG4gIHJldHVybiBgJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcblxcbk5vdyBjb250aW51ZSBhbnN3ZXJpbmcgdGhlIHVzZXIncyByZXF1ZXN0IHVzaW5nIHRoZXNlIHJlc3VsdHMuYDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb252RGVjaXNpb24ge1xuICAvLyBkaXNwYXRjaGVyIOuhnCDrhJjquLggcmV1c2Ug7KKM7ZGcICjqsoDspp0g7Ya16rO8IOyLnOyXkOunjCkuIGRpc3BhdGNoZXIg6rCAIGVwb2NoL3dvcmtlciDsg53sobQg7J6s6rKA7KadIO2bhCDtj7TrsLEg6rCA64qlLlxuICByZXVzZT86IFJldXNlVGhyZWFkQ29vcmQ7XG4gIC8vIOyerOyCrOyaqSDshLHqs7Ug7IucIHR1cm4vc3RhcnQg7JeQIOuztOuCvCBpbnB1dCDigJQgZGVsdGEo66eI7KeA66eJIHVzZXIvdG9vbCDqsrDqs7wp66eMLiByZXVzZSDqsIAg7J6I7J2EIOuVjOunjCDshKTsoJUuXG4gIHJldXNlSW5wdXQ/OiBBcnJheTxVc2VySW5wdXQ+O1xuICAvLyDssqsgdHVybiAvIOyerOyCrOyaqSDtj7TrsLEg7IucIOuztOuCvCBpbnB1dCDigJQg7KCE7LK0IHByb21wdC4g7ZWt7IOBIOyEpOyglSjtj7TrsLEg7JWI7KCE66edKS5cbiAgY29sZElucHV0OiBBcnJheTxVc2VySW5wdXQ+O1xuICAvLyDsg4ggdGhyZWFkIOydvCDrlYwgaW5qZWN0IO2VoCDsoITssrQgaGlzdG9yeS4g7J6s7IKs7JqpIOyEseqztSDsi5zsl5QgZGlzcGF0Y2hlciDqsIAg7JWIIOyTtOuLpCh0aHJlYWQg6rCAIOydtOuvuCDriITsoIEpLlxuICBjb2xkSGlzdG9yeT86IEFycmF5PEpzb25WYWx1ZT47XG4gIC8vIOydtCDsmpTssq0g7Iuc7KCQ7J2YIHN5c3RlbSDtlbTsi5wgKOydkeuLteyXkOyEnCB0aHJlYWQg7KKM7ZGcIOuwnOq4iSDsi5wg7IKs7JqpKS5cbiAgc3lzdGVtSGFzaDogc3RyaW5nO1xufVxuXG4vLyB0aHJlYWQg7KKM7ZGcICsg65Ok7Ja07JioIOyalOyyreycvOuhnCBcIuyerOyCrOyaqSDqsIDriqXtlZzqsIBcIuulvCDtjJDsoJXtlZjqs6AsIHJldXNlL2NvbGQg7JaR7Kq9IHBheWxvYWQg66W8IOq1rOyEse2VnOuLpC5cbi8vIGRpc3BhdGNoZXIg64uo7J2YIGVwb2NoL3dvcmtlciDsg53sobQg6rKA7Kad7J2AIOyXrOq4sOyEnCDrqrsg7ZWY66+A66GcKOyDge2DnCDsl4bsnYwpIHJldXNlIOyijO2RnCArIOuRkCBwYXlsb2FkIOulvFxuLy8g66qo65GQIOuEmOq4sOqzoCwgZGlzcGF0Y2hlciDsnZggYWNxdWlyZVJldXNlV29ya2VyIOqysOqzvOyXkCDrlLDrnbwgcmV1c2UoZGVsdGEpIOuYkOuKlCBjb2xkKOyghOyytCkg66W8IOqzoOuluOuLpC5cbi8vIOyWkeyqveydhCDri6Qg65Ok6rOgIOqwgOyVvCByZXVzZSDqsIAg7Iuk7Yyo66GcIO2PtOuwseuPvOuPhCDsoITssrQgaGlzdG9yeSDroZwg66y466el7J2EIOuzteq1rO2VoCDsiJgg7J6I64ukLlxuZXhwb3J0IGZ1bmN0aW9uIGRlY2lkZUNvbnZSb3V0aW5nKGlucHV0OiBRdWVyeUlucHV0KTogQ29udkRlY2lzaW9uIHtcbiAgY29uc3Qgc3lzSGFzaCA9IHN5c3RlbUhhc2goaW5wdXQuc3lzdGVtKTtcbiAgY29uc3QgaGlzdG9yeTogQXJyYXk8SnNvblZhbHVlPiB8IHVuZGVmaW5lZCA9IGlucHV0Lmhpc3RvcnlcbiAgICA/IChKU09OLnBhcnNlKGlucHV0Lmhpc3RvcnkpIGFzIEFycmF5PEpzb25WYWx1ZT4pXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgY29vcmQgPSBpbnB1dC5ydW5Db250ZXh0Py50aHJlYWRDb29yZDtcblxuICAvLyDsnqzsgqzsmqkg7J6Q6rKpOiDsooztkZwg7KG07J6sICsgc3lzdGVtIOuPmeydvC4gc2Vzc2lvbktleSDqsqnrpqwgKyBzeXN0ZW1IYXNoIOuhnCDrjIDtmZQg64+Z7J287ISx7J20XG4gIC8vIOuztOyepeuQmOqzoCwg6rO17Ya1IHByZWZpeCDripQgY29kZXgg6rCAIHByb21wdF9jYWNoZV9rZXkg6rOg7KCV7Jy866GcIOyVjOyVhOyEnCDsupDsi5ztlZzri6QuXG4gIGNvbnN0IGVsaWdpYmxlID0gY29vcmQgIT09IHVuZGVmaW5lZCAmJiBjb29yZC5zeXN0ZW1IYXNoID09PSBzeXNIYXNoO1xuXG4gIHJldHVybiB7XG4gICAgcmV1c2U6XG4gICAgICBlbGlnaWJsZSAmJiBjb29yZFxuICAgICAgICA/IHsgd29ya2VySWQ6IGNvb3JkLndvcmtlcklkLCB0aHJlYWRJZDogY29vcmQudGhyZWFkSWQsIGVwb2NoOiBjb29yZC5lcG9jaCB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIC8vIOyerOyCrOyaqSB0dXJuIOydgCBkZWx0YSjrp4jsp4Drp4kgdXNlci90b29sIOqysOqzvCnrp4wg4oCUIHRocmVhZCDqsIAg7J2066+4IOydtOyghCB0dXJuIOuTpOydhCDriITsoIEuXG4gICAgcmV1c2VJbnB1dDogZWxpZ2libGUgPyBidWlsZERlbHRhSW5wdXQoaW5wdXQpIDogdW5kZWZpbmVkLFxuICAgIC8vIOyyqyB0dXJuIC8g7Y+
|
|
64
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udi1yb3V0aW5nLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9xZ3JpZC9jb252LXJvdXRpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjb252LXJvdXRpbmcg4oCUIGNvbnZlcnNhdGlvbig9Y29kZXggdGhyZWFkKSDsnqzsgqzsmqnsnYQg7JyE7ZWcIHRocmVhZCDsooztkZwg6rKA7KadL+q1rOyEsS5cbiAqXG4gKiDrqqntkZw6IHRocmVhZCg9Y29udmVyc2F0aW9uX2lkPXByb21wdF9jYWNoZV9rZXkp66W8IOyerOyCrOyaqe2VtCBPcGVuQUkgcHJvbXB0IGNhY2hpbmcg7KCB7KSRLlxuICogLSDtm4Tsho0gdHVybjog6riw7KG0IHRocmVhZCDsl5AgZGVsdGEo66eI7KeA66eJIHVzZXIgLyB0b29sIOqysOqzvCnrp4wg67O064OEIChoaXN0b3J5IGluamVjdCDsl4bsnYwpLlxuICogLSDssqsgdHVybiAvIOqygOymnSDsi6TtjKg6IOyDiCB0aHJlYWQgKyBoaXN0b3J5IGluamVjdCAo7Y+067CxLCDsoJXtmZXshLEg67O07KG0KS5cbiAqXG4gKiDsi53rs4Q6IOyEnOuyhCDrsJzquIkg67aI7Yis66qFIHRocmVhZCDsooztkZwoUWdyaWRUaHJlYWRDb29yZCnrpbwg7YG065286rCAIOq3uOuMgOuhnCDtmozshqEuXG4gKiDqsoDspp06IHN5c3RlbUhhc2go64uk66W4IOuMgO2ZlCDsmKTsoJHsho0g7LCo64uoKSArIChkaXNwYXRjaGVy7J2YKSBlcG9jaC93b3JrZXIg7IOd7KG0LlxuICovXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5pbXBvcnQgeyB0eXBlIFVzZXJJbnB1dCB9IGZyb20gXCIuLi8uLi9jb2RleC1wcm90b2NvbC92Mi9Vc2VySW5wdXRcIjtcbmltcG9ydCB7IHR5cGUgUmV1c2VUaHJlYWRDb29yZCB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3Byb3ZpZGVyLWRpc3BhdGNoZXJcIjtcbmltcG9ydCB7IHR5cGUgUWdyaWRUaHJlYWRDb29yZCwgdHlwZSBRdWVyeUlucHV0LCB0eXBlIFFncmlkVG9vbFJlc3VsdElucHV0IH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHN5c3RlbUhhc2goc3lzdGVtPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGEyNTZcIilcbiAgICAudXBkYXRlKHN5c3RlbSA/PyBcIlwiKVxuICAgIC5kaWdlc3QoXCJoZXhcIilcbiAgICAuc2xpY2UoMCwgMTYpO1xufVxuXG4vLyB0b29sIOqysOqzvOulvCDri6TsnYwgdHVybiDsnZggaW5wdXQgdGV4dCDroZwg67OA7ZmYIChjb2RleCB0dXJuL3N0YXJ0LmlucHV0IOydgCBVc2VySW5wdXQg66eMIOuwm+ydjCkuXG5mdW5jdGlvbiB0b29sUmVzdWx0c1RvVGV4dCh0b29sUmVzdWx0czogUWdyaWRUb29sUmVzdWx0SW5wdXRbXSk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gdG9vbFJlc3VsdHMubWFwKCh0cikgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSB0ci50b29sTmFtZSA/IGAgKCR7dHIudG9vbE5hbWV9KWAgOiBcIlwiO1xuICAgIGNvbnN0IGVyck1hcmsgPSB0ci5pc0Vycm9yID8gXCIgW2Vycm9yXVwiIDogXCJcIjtcbiAgICByZXR1cm4gYFRvb2wgcmVzdWx0IGZvciBjYWxsICR7dHIudG9vbENhbGxJZH0ke25hbWV9JHtlcnJNYXJrfTogJHt0ci5vdXRwdXR9YDtcbiAgfSk7XG4gIHJldHVybiBgJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcblxcbk5vdyBjb250aW51ZSBhbnN3ZXJpbmcgdGhlIHVzZXIncyByZXF1ZXN0IHVzaW5nIHRoZXNlIHJlc3VsdHMuYDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb252RGVjaXNpb24ge1xuICAvLyBkaXNwYXRjaGVyIOuhnCDrhJjquLggcmV1c2Ug7KKM7ZGcICjqsoDspp0g7Ya16rO8IOyLnOyXkOunjCkuIGRpc3BhdGNoZXIg6rCAIGVwb2NoL3dvcmtlciDsg53sobQg7J6s6rKA7KadIO2bhCDtj7TrsLEg6rCA64qlLlxuICByZXVzZT86IFJldXNlVGhyZWFkQ29vcmQ7XG4gIC8vIOyerOyCrOyaqSDshLHqs7Ug7IucIHR1cm4vc3RhcnQg7JeQIOuztOuCvCBpbnB1dCDigJQgZGVsdGEo66eI7KeA66eJIHVzZXIvdG9vbCDqsrDqs7wp66eMLiByZXVzZSDqsIAg7J6I7J2EIOuVjOunjCDshKTsoJUuXG4gIHJldXNlSW5wdXQ/OiBBcnJheTxVc2VySW5wdXQ+O1xuICAvLyDssqsgdHVybiAvIOyerOyCrOyaqSDtj7TrsLEg7IucIOuztOuCvCBpbnB1dCDigJQg7KCE7LK0IHByb21wdC4g7ZWt7IOBIOyEpOyglSjtj7TrsLEg7JWI7KCE66edKS5cbiAgY29sZElucHV0OiBBcnJheTxVc2VySW5wdXQ+O1xuICAvLyDsg4ggdGhyZWFkIOydvCDrlYwgaW5qZWN0IO2VoCDsoITssrQgaGlzdG9yeS4g7J6s7IKs7JqpIOyEseqztSDsi5zsl5QgZGlzcGF0Y2hlciDqsIAg7JWIIOyTtOuLpCh0aHJlYWQg6rCAIOydtOuvuCDriITsoIEpLlxuICBjb2xkSGlzdG9yeT86IEFycmF5PEpzb25WYWx1ZT47XG4gIC8vIOydtCDsmpTssq0g7Iuc7KCQ7J2YIHN5c3RlbSDtlbTsi5wgKOydkeuLteyXkOyEnCB0aHJlYWQg7KKM7ZGcIOuwnOq4iSDsi5wg7IKs7JqpKS5cbiAgc3lzdGVtSGFzaDogc3RyaW5nO1xufVxuXG4vLyB0aHJlYWQg7KKM7ZGcICsg65Ok7Ja07JioIOyalOyyreycvOuhnCBcIuyerOyCrOyaqSDqsIDriqXtlZzqsIBcIuulvCDtjJDsoJXtlZjqs6AsIHJldXNlL2NvbGQg7JaR7Kq9IHBheWxvYWQg66W8IOq1rOyEse2VnOuLpC5cbi8vIGRpc3BhdGNoZXIg64uo7J2YIGVwb2NoL3dvcmtlciDsg53sobQg6rKA7Kad7J2AIOyXrOq4sOyEnCDrqrsg7ZWY66+A66GcKOyDge2DnCDsl4bsnYwpIHJldXNlIOyijO2RnCArIOuRkCBwYXlsb2FkIOulvFxuLy8g66qo65GQIOuEmOq4sOqzoCwgZGlzcGF0Y2hlciDsnZggYWNxdWlyZVJldXNlV29ya2VyIOqysOqzvOyXkCDrlLDrnbwgcmV1c2UoZGVsdGEpIOuYkOuKlCBjb2xkKOyghOyytCkg66W8IOqzoOuluOuLpC5cbi8vIOyWkeyqveydhCDri6Qg65Ok6rOgIOqwgOyVvCByZXVzZSDqsIAg7Iuk7Yyo66GcIO2PtOuwseuPvOuPhCDsoITssrQgaGlzdG9yeSDroZwg66y466el7J2EIOuzteq1rO2VoCDsiJgg7J6I64ukLlxuZXhwb3J0IGZ1bmN0aW9uIGRlY2lkZUNvbnZSb3V0aW5nKGlucHV0OiBRdWVyeUlucHV0KTogQ29udkRlY2lzaW9uIHtcbiAgY29uc3Qgc3lzSGFzaCA9IHN5c3RlbUhhc2goaW5wdXQuc3lzdGVtKTtcbiAgY29uc3QgaGlzdG9yeTogQXJyYXk8SnNvblZhbHVlPiB8IHVuZGVmaW5lZCA9IGlucHV0Lmhpc3RvcnlcbiAgICA/IChKU09OLnBhcnNlKGlucHV0Lmhpc3RvcnkpIGFzIEFycmF5PEpzb25WYWx1ZT4pXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgY29vcmQgPSBpbnB1dC5ydW5Db250ZXh0Py50aHJlYWRDb29yZDtcblxuICAvLyDsnqzsgqzsmqkg7J6Q6rKpOiDsooztkZwg7KG07J6sICsgc3lzdGVtIOuPmeydvC4gc2Vzc2lvbktleSDqsqnrpqwgKyBzeXN0ZW1IYXNoIOuhnCDrjIDtmZQg64+Z7J287ISx7J20XG4gIC8vIOuztOyepeuQmOqzoCwg6rO17Ya1IHByZWZpeCDripQgY29kZXgg6rCAIHByb21wdF9jYWNoZV9rZXkg6rOg7KCV7Jy866GcIOyVjOyVhOyEnCDsupDsi5ztlZzri6QuXG4gIGNvbnN0IGVsaWdpYmxlID0gY29vcmQgIT09IHVuZGVmaW5lZCAmJiBjb29yZC5zeXN0ZW1IYXNoID09PSBzeXNIYXNoO1xuXG4gIHJldHVybiB7XG4gICAgcmV1c2U6XG4gICAgICBlbGlnaWJsZSAmJiBjb29yZFxuICAgICAgICA/IHsgd29ya2VySWQ6IGNvb3JkLndvcmtlcklkLCB0aHJlYWRJZDogY29vcmQudGhyZWFkSWQsIGVwb2NoOiBjb29yZC5lcG9jaCB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIC8vIOyerOyCrOyaqSB0dXJuIOydgCBkZWx0YSjrp4jsp4Drp4kgdXNlci90b29sIOqysOqzvCnrp4wg4oCUIHRocmVhZCDqsIAg7J2066+4IOydtOyghCB0dXJuIOuTpOydhCDriITsoIEuXG4gICAgcmV1c2VJbnB1dDogZWxpZ2libGUgPyBidWlsZERlbHRhSW5wdXQoaW5wdXQpIDogdW5kZWZpbmVkLFxuICAgIC8vIOyyqyB0dXJuIC8g7Y+067CxOiDsoITssrQgcHJvbXB0ICsgaGlzdG9yeSBpbmplY3QuIHRvb2wg6rKw6rO8IGZvbGxvdy11cCDsnbQgY29sZCDroZwg65ao7Ja07KC464+EXG4gICAgLy8g7Iuk7ZaJIHVzZXIg7KSE7JeQ64qUIFwi7J20IOqysOqzvOuhnCDqs4Tsho0g64u17ZWY6528XCLripQgY29udGludWF0aW9uIOydtCDrk6TslrTqsIDslbwg7ZWc64ukLlxuICAgIGNvbGRJbnB1dDogYnVpbGREZWx0YUlucHV0KGlucHV0KSxcbiAgICBjb2xkSGlzdG9yeTogaGlzdG9yeSxcbiAgICBzeXN0ZW1IYXNoOiBzeXNIYXNoLFxuICB9O1xufVxuXG4vLyDtm4Tsho0gdHVybiDsnZggaW5wdXQ6IHRvb2wg6rKw6rO86rCAIOyeiOycvOuptCDqt7jqsbggdGV4dCDroZwsIOyXhuycvOuptCDrp4jsp4Drp4kgdXNlcihwcm9tcHQpLlxuZnVuY3Rpb24gYnVpbGREZWx0YUlucHV0KGlucHV0OiBRdWVyeUlucHV0KTogQXJyYXk8VXNlcklucHV0PiB7XG4gIGlmIChpbnB1dC50b29sUmVzdWx0cyAmJiBpbnB1dC50b29sUmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiB0b29sUmVzdWx0c1RvVGV4dChpbnB1dC50b29sUmVzdWx0cyksIHRleHRfZWxlbWVudHM6IFtdIH1dO1xuICB9XG4gIHJldHVybiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogaW5wdXQucHJvbXB0LCB0ZXh0X2VsZW1lbnRzOiBbXSB9XTtcbn1cblxuLy8g7J2R64u1IHRocmVhZENvb3JkICsg7JqU7LKtIOyLnOygkCDsoJXrs7TroZwg64uk7J2MIHRocmVhZCDsooztkZzrpbwg67Cc6riJ7ZWc64ukLlxuZXhwb3J0IGZ1bmN0aW9uIGlzc3VlQ29udkNvbnRleHQoXG4gIHRocmVhZENvb3JkOiBSZXVzZVRocmVhZENvb3JkLFxuICBkZWNpc2lvbjogQ29udkRlY2lzaW9uLFxuKTogUWdyaWRUaHJlYWRDb29yZCB7XG4gIHJldHVybiB7XG4gICAgd29ya2VySWQ6IHRocmVhZENvb3JkLndvcmtlcklkLFxuICAgIHRocmVhZElkOiB0aHJlYWRDb29yZC50aHJlYWRJZCxcbiAgICBlcG9jaDogdGhyZWFkQ29vcmQuZXBvY2gsXG4gICAgc3lzdGVtSGFzaDogZGVjaXNpb24uc3lzdGVtSGFzaCxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQWlCQSxTQUFnQixXQUFXLFFBQXlCO0FBQ2xELFFBQU8sV0FBVyxTQUFTLENBQ3hCLE9BQU8sVUFBVSxHQUFHLENBQ3BCLE9BQU8sTUFBTSxDQUNiLE1BQU0sR0FBRyxHQUFHOztBQUlqQixTQUFTLGtCQUFrQixhQUE2QztBQU10RSxRQUFPLEdBTE8sWUFBWSxLQUFLLE9BQU87RUFDcEMsTUFBTSxPQUFPLEdBQUcsV0FBVyxLQUFLLEdBQUcsU0FBUyxLQUFLO0VBQ2pELE1BQU0sVUFBVSxHQUFHLFVBQVUsYUFBYTtBQUMxQyxTQUFPLHdCQUF3QixHQUFHLGFBQWEsT0FBTyxRQUFRLElBQUksR0FBRztHQUNyRSxDQUNjLEtBQUssS0FBSyxDQUFDOztBQW9CN0IsU0FBZ0Isa0JBQWtCLE9BQWlDO0NBQ2pFLE1BQU0sVUFBVSxXQUFXLE1BQU0sT0FBTztDQUN4QyxNQUFNLFVBQXdDLE1BQU0sVUFDL0MsS0FBSyxNQUFNLE1BQU0sUUFBUSxHQUMxQjtDQUVKLE1BQU0sUUFBUSxNQUFNLFlBQVk7Q0FJaEMsTUFBTSxXQUFXLFVBQVUsVUFBYSxNQUFNLGVBQWU7QUFFN0QsUUFBTztFQUNMLE9BQ0UsWUFBWSxRQUNSO0dBQUUsVUFBVSxNQUFNO0dBQVUsVUFBVSxNQUFNO0dBQVUsT0FBTyxNQUFNO0dBQU8sR0FDMUU7RUFFTixZQUFZLFdBQVcsZ0JBQWdCLE1BQU0sR0FBRztFQUdoRCxXQUFXLGdCQUFnQixNQUFNO0VBQ2pDLGFBQWE7RUFDYixZQUFZO0VBQ2I7O0FBSUgsU0FBUyxnQkFBZ0IsT0FBcUM7QUFDNUQsS0FBSSxNQUFNLGVBQWUsTUFBTSxZQUFZLFNBQVMsRUFDbEQsUUFBTyxDQUFDO0VBQUUsTUFBTTtFQUFRLE1BQU0sa0JBQWtCLE1BQU0sWUFBWTtFQUFFLGVBQWUsRUFBRTtFQUFFLENBQUM7QUFFMUYsUUFBTyxDQUFDO0VBQUUsTUFBTTtFQUFRLE1BQU0sTUFBTTtFQUFRLGVBQWUsRUFBRTtFQUFFLENBQUM7O0FBSWxFLFNBQWdCLGlCQUNkLGFBQ0EsVUFDa0I7QUFDbEIsUUFBTztFQUNMLFVBQVUsWUFBWTtFQUN0QixVQUFVLFlBQVk7RUFDdEIsT0FBTyxZQUFZO0VBQ25CLFlBQVksU0FBUztFQUN0QiJ9
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "../../_virtual/_rolldown/runtime.js";
|
|
2
2
|
import { decideConvRouting, issueConvContext } from "./conv-routing.js";
|
|
3
3
|
import { calculateCostUsd } from "../../utils/providers/common/model-cost.js";
|
|
4
|
+
import { canonicalAnthropicModel } from "../../utils/providers/anthropic/anthropic-constants.js";
|
|
4
5
|
import { getAccessToken, getExpiresAt, getRefreshToken } from "../../utils/providers/common/credentials.js";
|
|
5
6
|
import { strictify } from "../../utils/providers/common/strictifier.js";
|
|
6
7
|
import { ProcessError, QuotaError, TimeoutError, maskToken } from "./qgrid.types.js";
|
|
@@ -40,6 +41,7 @@ var QgridDispatcherClass = class {
|
|
|
40
41
|
rrIndex = 0;
|
|
41
42
|
subscriber = null;
|
|
42
43
|
openaiDispatcher = null;
|
|
44
|
+
anthropicDispatcher = null;
|
|
43
45
|
constructor() {
|
|
44
46
|
const settingsJson = JSON.stringify(QGRID_CLAUDE_SETTINGS, null, 2);
|
|
45
47
|
mkdirSync(`${CLAUDE_CWD}/.claude`, { recursive: true });
|
|
@@ -100,25 +102,24 @@ var QgridDispatcherClass = class {
|
|
|
100
102
|
reuseInput: decision.reuseInput
|
|
101
103
|
});
|
|
102
104
|
const issuedCoord = issueConvContext(result.threadCoord, decision);
|
|
103
|
-
return applyToolCallEmulation(
|
|
104
|
-
text: result.text,
|
|
105
|
-
tokenName: result.tokenName,
|
|
106
|
-
model: result.model,
|
|
107
|
-
usage: {
|
|
108
|
-
input_tokens: result.usage.inputTokens,
|
|
109
|
-
output_tokens: result.usage.outputTokens,
|
|
110
|
-
cache_creation_input_tokens: 0,
|
|
111
|
-
cache_read_input_tokens: result.usage.cachedInputTokens
|
|
112
|
-
},
|
|
113
|
-
durationMs: result.durationMs,
|
|
114
|
-
costUsd: calculateCostUsd(result.model, {
|
|
115
|
-
inputTokens: result.usage.inputTokens,
|
|
116
|
-
outputTokens: result.usage.outputTokens,
|
|
117
|
-
cachedInputTokens: result.usage.cachedInputTokens
|
|
118
|
-
})
|
|
119
|
-
}, input.tools, issuedCoord);
|
|
105
|
+
return applyToolCallEmulation(toEmulationResult(result), input.tools, issuedCoord);
|
|
120
106
|
}
|
|
121
107
|
}
|
|
108
|
+
if (this.anthropicDispatcher) {
|
|
109
|
+
const decision = decideConvRouting(input);
|
|
110
|
+
const result = await this.anthropicDispatcher.generate({
|
|
111
|
+
model: input.model,
|
|
112
|
+
systemPrompt: input.system,
|
|
113
|
+
outputSchema: outputSchema ? strictify(outputSchema) : void 0,
|
|
114
|
+
effort: input.effort,
|
|
115
|
+
coldInput: decision.coldInput,
|
|
116
|
+
coldHistory: decision.coldHistory,
|
|
117
|
+
reuse: decision.reuse,
|
|
118
|
+
reuseInput: decision.reuseInput
|
|
119
|
+
});
|
|
120
|
+
const issuedCoord = issueConvContext(result.threadCoord, decision);
|
|
121
|
+
return applyToolCallEmulation(toEmulationResult(result), input.tools, issuedCoord);
|
|
122
|
+
}
|
|
122
123
|
const executionInput = outputSchema && input.tools?.length ? {
|
|
123
124
|
...input,
|
|
124
125
|
jsonSchema: JSON.stringify(outputSchema)
|
|
@@ -138,11 +139,34 @@ var QgridDispatcherClass = class {
|
|
|
138
139
|
return applyToolCallEmulation({
|
|
139
140
|
...await executeClaude(executionInput, token, timeoutMs ?? DEFAULT_TIMEOUT_MS),
|
|
140
141
|
tokenName: electedToken.name,
|
|
141
|
-
model: input.model
|
|
142
|
+
model: canonicalAnthropicModel(input.model)
|
|
142
143
|
}, input.tools);
|
|
143
144
|
}
|
|
144
145
|
async queryStream(input, cb) {
|
|
145
146
|
if (!input.model?.startsWith("openai/")) {
|
|
147
|
+
if (this.anthropicDispatcher) {
|
|
148
|
+
const outputSchema = input.tools?.length ? buildToolCallSchema(input.tools) : input.jsonSchema ? JSON.parse(input.jsonSchema) : void 0;
|
|
149
|
+
const decision = decideConvRouting(input);
|
|
150
|
+
await this.anthropicDispatcher.generateStream({
|
|
151
|
+
model: input.model,
|
|
152
|
+
systemPrompt: input.system,
|
|
153
|
+
outputSchema: outputSchema ? strictify(outputSchema) : void 0,
|
|
154
|
+
effort: input.effort,
|
|
155
|
+
coldInput: decision.coldInput,
|
|
156
|
+
coldHistory: decision.coldHistory,
|
|
157
|
+
reuse: decision.reuse,
|
|
158
|
+
reuseInput: decision.reuseInput
|
|
159
|
+
}, {
|
|
160
|
+
onDelta: cb.onDelta,
|
|
161
|
+
onThreadId: cb.onThreadId,
|
|
162
|
+
onComplete: (turnResult) => {
|
|
163
|
+
const issuedCoord = issueConvContext(turnResult.threadCoord, decision);
|
|
164
|
+
cb.onComplete(applyToolCallEmulation(toEmulationResult(turnResult), input.tools, issuedCoord));
|
|
165
|
+
},
|
|
166
|
+
onError: cb.onError
|
|
167
|
+
});
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
146
170
|
const result = await this.query(input);
|
|
147
171
|
cb.onComplete(result);
|
|
148
172
|
return;
|
|
@@ -170,29 +194,32 @@ var QgridDispatcherClass = class {
|
|
|
170
194
|
onTurnId: cb.onTurnId,
|
|
171
195
|
onComplete: (turnResult) => {
|
|
172
196
|
const issuedCoord = issueConvContext(turnResult.threadCoord, decision);
|
|
173
|
-
|
|
174
|
-
text: turnResult.text,
|
|
175
|
-
tokenName: turnResult.tokenName,
|
|
176
|
-
model: turnResult.model,
|
|
177
|
-
usage: {
|
|
178
|
-
input_tokens: turnResult.usage.inputTokens,
|
|
179
|
-
output_tokens: turnResult.usage.outputTokens,
|
|
180
|
-
cache_creation_input_tokens: 0,
|
|
181
|
-
cache_read_input_tokens: turnResult.usage.cachedInputTokens
|
|
182
|
-
},
|
|
183
|
-
durationMs: turnResult.durationMs,
|
|
184
|
-
costUsd: calculateCostUsd(turnResult.model, {
|
|
185
|
-
inputTokens: turnResult.usage.inputTokens,
|
|
186
|
-
outputTokens: turnResult.usage.outputTokens,
|
|
187
|
-
cachedInputTokens: turnResult.usage.cachedInputTokens
|
|
188
|
-
})
|
|
189
|
-
}, input.tools, issuedCoord);
|
|
190
|
-
cb.onComplete(applied);
|
|
197
|
+
cb.onComplete(applyToolCallEmulation(toEmulationResult(turnResult), input.tools, issuedCoord));
|
|
191
198
|
},
|
|
192
199
|
onError: cb.onError
|
|
193
200
|
});
|
|
194
201
|
}
|
|
195
202
|
};
|
|
203
|
+
function toEmulationResult(result) {
|
|
204
|
+
return {
|
|
205
|
+
text: result.text,
|
|
206
|
+
tokenName: result.tokenName,
|
|
207
|
+
model: result.model,
|
|
208
|
+
usage: {
|
|
209
|
+
input_tokens: result.usage.inputTokens,
|
|
210
|
+
output_tokens: result.usage.outputTokens,
|
|
211
|
+
cache_creation_input_tokens: result.usage.cacheCreationInputTokens ?? 0,
|
|
212
|
+
cache_read_input_tokens: result.usage.cachedInputTokens
|
|
213
|
+
},
|
|
214
|
+
durationMs: result.durationMs,
|
|
215
|
+
costUsd: result.costUsd !== void 0 && result.costUsd > 0 ? result.costUsd : calculateCostUsd(result.model, {
|
|
216
|
+
inputTokens: result.usage.inputTokens,
|
|
217
|
+
outputTokens: result.usage.outputTokens,
|
|
218
|
+
cachedInputTokens: result.usage.cachedInputTokens,
|
|
219
|
+
cacheCreationInputTokens: result.usage.cacheCreationInputTokens ?? 0
|
|
220
|
+
})
|
|
221
|
+
};
|
|
222
|
+
}
|
|
196
223
|
async function executeClaude(input, token, timeoutMs) {
|
|
197
224
|
const rawModel = input.model ?? DEFAULT_MODEL;
|
|
198
225
|
const model = rawModel.includes("/") ? rawModel.split("/").pop() : rawModel;
|
|
@@ -318,4 +345,4 @@ const QgridDispatcher = new QgridDispatcherClass();
|
|
|
318
345
|
//#endregion
|
|
319
346
|
export { QgridDispatcher, QgridDispatcherClass };
|
|
320
347
|
|
|
321
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZGlzcGF0Y2hlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQuZGlzcGF0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJub2RlOmFzc2VydFwiO1xuLyoqXG4gKiBRZ3JpZERpc3BhdGNoZXIg4oCUIE9BdXRoIO2GoO2BsCDshKDtg50gKyBjbGF1ZGUgQ0xJIGZyZXNoIHNwYXduIOuUlOyKpO2MqOyymCDsi7HquIDthLQuXG4gKlxuICogLSDrp6Qg7JqU7LKt66eI64ukIOyDiCBjbGF1ZGUgQ0xJIO2UhOuhnOyEuOyKpCBzcGF3biDihpIg7J2R64u1IO2bhCDsooXro4xcbiAqIC0gbGVhc3QtdXNlZCByb3VuZC1yb2JpbiDsnLzroZwg7Yag7YGwIOyEoO2DnVxuICogLSDrqZTrqqjrpqwg7LqQ7IucIChNYXA8aWQsIFRva2VuU3Vic2V0QT4pIOuKlCBUb2tlblN1YnNjcmliZXIg6rCAIHBnIExJU1RFTi9OT1RJRlkg66GcIOqwseyLoFxuICogLSBxdWVyeSDsi5wgZXhwaXJlc19hdCDruYTqtZAg4oaSIOyehOuwlSDsi5wgcHJlZW1wdGl2ZSByZWZyZXNoXG4gKiAtIFF1b3RhRXJyb3Ig64qUIOq3uOuMgOuhnCDsg4HsnIQg7KCE7YyMICjsnpDrj5kgZmFpbG92ZXIg7JeG7J2MLCBVSSDsl5DshJwg7IiY64+ZIO2GoOq4gClcbiAqXG4gKiBlbnYgYWxsb3dsaXN0OiBQQVRILCBUTVBESVIsIENMQVVERV9DT0RFX09BVVRIX1RPS0VOLCBDTEFVREVfQ09ORklHX0RJUlxuICogICArIENMQVVERV9DT0RFX0RJU0FCTEVfKiArIENMQVVERV9DT0RFX0FUVFJJQlVUSU9OX0hFQURFUlxuICovXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IG1rZGlyU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5pbXBvcnQge1xuICBnZXRBY2Nlc3NUb2tlbixcbiAgZ2V0RXhwaXJlc0F0LFxuICBnZXRSZWZyZXNoVG9rZW4sXG59IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL2NyZWRlbnRpYWxzXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVDb3N0VXNkIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vbW9kZWwtY29zdFwiO1xuaW1wb3J0IHsgc3RyaWN0aWZ5IH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vc3RyaWN0aWZpZXJcIjtcbmltcG9ydCB7IHR5cGUgT3BlbkFJRGlzcGF0Y2hlciB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvb3BlbmFpL29wZW5haS1kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyB0eXBlIFRva2VuU3Vic2V0QSB9IGZyb20gXCIuLi9zb25hbXUuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyBkZWNpZGVDb252Um91dGluZywgaXNzdWVDb252Q29udGV4dCB9IGZyb20gXCIuL2NvbnYtcm91dGluZ1wiO1xuaW1wb3J0IHsgdHlwZSBRdWVyeUlucHV0LCB0eXBlIFF1ZXJ5T3V0cHV0LCB0eXBlIFRva2VuU3RhdHMgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuaW1wb3J0IHsgbWFza1Rva2VuLCBQcm9jZXNzRXJyb3IsIFF1b3RhRXJyb3IsIFRpbWVvdXRFcnJvciB9IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFRva2VuU3Vic2NyaWJlciB9IGZyb20gXCIuL3Rva2VuLXN1YnNjcmliZXJcIjtcbmltcG9ydCB7IGFwcGx5VG9vbENhbGxFbXVsYXRpb24sIGJ1aWxkVG9vbENhbGxTY2hlbWEgfSBmcm9tIFwiLi90b29sLWVtdWxhdGlvblwiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIl0pO1xuXG5jb25zdCBERUZBVUxUX01PREVMID0gXCJzb25uZXRcIjtcbmNvbnN0IERFRkFVTFRfVElNRU9VVF9NUyA9IDYwMF8wMDA7XG5jb25zdCBERUZBVUxUX0VGRk9SVCA9IFwiaGlnaFwiO1xuXG4vLyBjbGF1ZGUgQ0xJIOydmCBjd2QuIOydtCDqsr3roZzsnZggLmNsYXVkZS9zZXR0aW5ncy5qc29uIOydtCBwcm9qZWN0IHNjb3BlIOuhnCDroZzrk5zrkJjslrRcbi8vIO2YueyLnOudvOuPhCDsnojsnYQgdXNlciBzY29wZSAofi8uY2xhdWRlL3NldHRpbmdzLmpzb24p66W8IOuNruyWtOyUgCAoLS1zZXR0aW5nLXNvdXJjZXMgcHJvamVjdCDsmYAg7ZWo6ruYKS5cbmNvbnN0IENMQVVERV9DV0QgPSBcIi90bXAvcWdyaWRcIjtcblxuLy8g6riA66Gc67KMIHVzZXIgY29uZmlnIOqyqeumrCDqsr3roZwuIChDQ+yXkOyEnCDtmZjqsr3rs4DsiJjroZwg7J2964qU67OA7IiYKVxuY29uc3QgQ0xBVURFX0NPTkZJR19ESVIgPSBcIi90bXAvcWdyaWQtY29uZmlnXCI7XG5cbi8vIHFncmlkIOyghOyaqSBwcm9qZWN0L2dsb2JhbCBzZXR0aW5ncyDigJQgdXNlciBzY29wZSDqsqnrpqzsmqlcbmNvbnN0IFFHUklEX0NMQVVERV9TRVRUSU5HUyA9IHtcbiAgYWx3YXlzVGhpbmtpbmdFbmFibGVkOiBmYWxzZSwgLy8gdGhpbmtpbmcgYmxvY2sg7LCo64uoXG4gIGluY2x1ZGVHaXRJbnN0cnVjdGlvbnM6IGZhbHNlLCAvLyBzeXN0ZW0gcHJvbXB0IOydmCBnaXQg6rCA7J2065OcIOygnOqxsFxuICBjbGVhbnVwUGVyaW9kRGF5czogMSxcbn07XG5cbi8vIO2GoO2BsCDrp4zro4wg7J6E67CVIOyehOqzhOqwkiDigJQgdG9rZW4uZXhwaXJlZEF07J20IDHrtoQg7JWI7JeQIOunjOujjOuQnOuLpOuptCBxdWVyeSDsi5wg7LK07YGs7ZWY6rOgIHJlZnJlc2guXG5jb25zdCBSRUZSRVNIX1NBRkVUWV9NUyA9IDYwXzAwMDtcblxuZXhwb3J0IGNsYXNzIFFncmlkRGlzcGF0Y2hlckNsYXNzIHtcbiAgdG9rZW5zID0gbmV3IE1hcDxudW1iZXIsIFRva2VuU3Vic2V0QT4oKTtcblxuICAvLyBrZXnquLDrsJgodG9rZW5OYW1lKSDriITsoIEg7Lm07Jq07YSwLiB0b2tlbiDsnbQgT0F1dGggcmVmcmVzaCDroZwg66Gc7YWM7J207Yq465CY64+EIHRva2VuTmFtZSDsnYAg67aI67OA7J206528IOy5tOyatO2EsCDsnKDsp4DrkKhcbiAgcmVxdWVzdENvdW50cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIHJySW5kZXggPSAwO1xuXG4gIC8vIHNvbmFtdS5jb25maWcgb25TdGFydCDsl5DshJwg7LKY66as7ZWY64qUIOuzgOyImFxuICBzdWJzY3JpYmVyOiBUb2tlblN1YnNjcmliZXIgfCBudWxsID0gbnVsbDtcbiAgb3BlbmFpRGlzcGF0Y2hlcjogT3BlbkFJRGlzcGF0Y2hlciB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNldHRpbmdzSnNvbiA9IEpTT04uc3RyaW5naWZ5KFFHUklEX0NMQVVERV9TRVRUSU5HUywgbnVsbCwgMik7XG5cbiAgICBta2RpclN5bmMoYCR7Q0xBVURFX0NXRH0vLmNsYXVkZWAsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHdyaXRlRmlsZVN5bmMoYCR7Q0xBVURFX0NXRH0vLmNsYXVkZS9zZXR0aW5ncy5qc29uYCwgc2V0dGluZ3NKc29uKTtcblxuICAgIG1rZGlyU3luYyhDTEFVREVfQ09ORklHX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlU3luYyhgJHtDTEFVREVfQ09ORklHX0RJUn0vLmNsYXVkZS5qc29uYCwgXCJ7fVwiKTtcbiAgICB3cml0ZUZpbGVTeW5jKGAke0NMQVVERV9DT05GSUdfRElSfS9zZXR0aW5ncy5qc29uYCwgc2V0dGluZ3NKc29uKTtcbiAgfVxuXG4gIGNvdW50T2YobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0Q291bnRzLmdldChuYW1lKSA/PyAwO1xuICB9XG5cbiAgLy8gVG9rZW5TdWJzY3JpYmVyIOy9nOuwsSDigJQg7LqQ7IucIG11dGF0aW9uXG4gIHVwc2VydENhY2hlKGlkOiBudW1iZXIsIHJvdzogVG9rZW5TdWJzZXRBKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbnMuc2V0KGlkLCByb3cpO1xuICB9XG5cbiAgcmVtb3ZlQ2FjaGUoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudG9rZW5zLmRlbGV0ZShpZCk7XG4gIH1cblxuICByZXBsYWNlQ2FjaGUocm93czogVG9rZW5TdWJzZXRBW10pOiB2b2lkIHtcbiAgICB0aGlzLnRva2VucyA9IG5ldyBNYXAocm93cy5tYXAoKHIpID0+IFtyLmlkLCByXSkpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogVG9rZW5TdGF0c1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMudG9rZW5zLnZhbHVlcygpXS5tYXAoKHIpID0+ICh7XG4gICAgICB0b2tlbjogbWFza1Rva2VuKGdldEFjY2Vzc1Rva2VuKHIuY3JlZGVudGlhbHMpKSxcbiAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgIHByb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgcmVxdWVzdHM6IHRoaXMuY291bnRPZihyLm5hbWUpLFxuICAgIH0pKTtcbiAgfVxuXG4gIHNlbGVjdFRva2VuKHByb3ZpZGVyID0gXCJhbnRocm9waWNcIik6IFRva2VuU3Vic2V0QSB8IG51bGwge1xuICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy50b2tlbnMudmFsdWVzKCldLmZpbHRlcigocikgPT4gci5wcm92aWRlciA9PT0gcHJvdmlkZXIpO1xuICAgIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBtaW5Db3VudCA9IE1hdGgubWluKC4uLnJvd3MubWFwKChyKSA9PiB0aGlzLmNvdW50T2Yoci5uYW1lKSkpO1xuICAgIGNvbnN0IGlkbGUgPSByb3dzLmZpbHRlcigocikgPT4gdGhpcy5jb3VudE9mKHIubmFtZSkgPT09IG1pbkNvdW50KTtcbiAgICBjb25zdCBwaWNrZWQgPSBpZGxlW3RoaXMucnJJbmRleCAlIGlkbGUubGVuZ3RoXSE7XG4gICAgdGhpcy5yckluZGV4Kys7XG4gICAgcmV0dXJuIHBpY2tlZDtcbiAgfVxuXG4gIGFzeW5jIHF1ZXJ5KGlucHV0OiBRdWVyeUlucHV0LCB0aW1lb3V0TXM/OiBudW1iZXIpOiBQcm9taXNlPFF1ZXJ5T3V0cHV0PiB7XG4gICAgaWYgKGlucHV0LnRvb2xzPy5sZW5ndGggJiYgaW5wdXQuanNvblNjaGVtYSkge1xuICAgICAgdGhyb3cgbmV3IFByb2Nlc3NFcnJvcihcInRvb2xzIGFuZCBqc29uU2NoZW1hIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dFNjaGVtYSA9IGlucHV0LnRvb2xzPy5sZW5ndGhcbiAgICAgID8gYnVpbGRUb29sQ2FsbFNjaGVtYShpbnB1dC50b29scylcbiAgICAgIDogaW5wdXQuanNvblNjaGVtYVxuICAgICAgICA/IChKU09OLnBhcnNlKGlucHV0Lmpzb25TY2hlbWEpIGFzIEpzb25WYWx1ZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBwcm92aWRlciBwcmVmaXggcm91dGluZzogJ29wZW5haS9ncHQtNS40JyDihpIgT3BlbkFJRGlzcGF0Y2hlclxuICAgIGlmIChpbnB1dC5tb2RlbD8uaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICBjb25zdCBbcHJvdmlkZXIsIG1vZGVsXSA9IGlucHV0Lm1vZGVsLnNwbGl0KFwiL1wiLCAyKTtcbiAgICAgIGFzc2VydChtb2RlbCwgXCJ1bmtub3duIG1vZGVsXCIpO1xuICAgICAgaWYgKHByb3ZpZGVyID09PSBcIm9wZW5haVwiKSB7XG4gICAgICAgIGlmICghdGhpcy5vcGVuYWlEaXNwYXRjaGVyKSB0aHJvdyBuZXcgUXVvdGFFcnJvcihcIk9wZW5BSSBkaXNwYXRjaGVyIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgICAgY29uc3QgZGVjaXNpb24gPSBkZWNpZGVDb252Um91dGluZyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMub3BlbmFpRGlzcGF0Y2hlci5nZW5lcmF0ZSh7XG4gICAgICAgICAgbW9kZWw6IG1vZGVsLFxuICAgICAgICAgIHN5c3RlbVByb21wdDogaW5wdXQuc3lzdGVtLFxuICAgICAgICAgIG91dHB1dFNjaGVtYTogb3V0cHV0U2NoZW1hXG4gICAgICAgICAgICA/IChzdHJpY3RpZnkob3V0cHV0U2NoZW1hIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHN0cmljdGlmeT5bMF0pIGFzIEpzb25WYWx1ZSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVmZm9ydDogaW5wdXQuZWZmb3J0LFxuICAgICAgICAgIHZlcmJvc2l0eTogaW5wdXQudmVyYm9zaXR5LFxuICAgICAgICAgIHJlYXNvbmluZ1N1bW1hcnk6IGlucHV0LnJlYXNvbmluZ1N1bW1hcnksXG4gICAgICAgICAgc2VydmljZVRpZXI6IGlucHV0LnNlcnZpY2VUaWVyLFxuICAgICAgICAgIGNvbGRJbnB1dDogZGVjaXNpb24uY29sZElucHV0LFxuICAgICAgICAgIGNvbGRIaXN0b3J5OiBkZWNpc2lvbi5jb2xkSGlzdG9yeSxcbiAgICAgICAgICByZXVzZTogZGVjaXNpb24ucmV1c2UsXG4gICAgICAgICAgcmV1c2VJbnB1dDogZGVjaXNpb24ucmV1c2VJbnB1dCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaXNzdWVkQ29vcmQgPSBpc3N1ZUNvbnZDb250ZXh0KHJlc3VsdC50aHJlYWRDb29yZCwgZGVjaXNpb24pO1xuICAgICAgICByZXR1cm4gYXBwbHlUb29sQ2FsbEVtdWxhdGlvbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiByZXN1bHQudGV4dCxcbiAgICAgICAgICAgIHRva2VuTmFtZTogcmVzdWx0LnRva2VuTmFtZSxcbiAgICAgICAgICAgIG1vZGVsOiByZXN1bHQubW9kZWwsXG4gICAgICAgICAgICB1c2FnZToge1xuICAgICAgICAgICAgICBpbnB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5pbnB1dFRva2VucyxcbiAgICAgICAgICAgICAgb3V0cHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLm91dHB1dFRva2VucyxcbiAgICAgICAgICAgICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiAwLFxuICAgICAgICAgICAgICBjYWNoZV9yZWFkX2lucHV0X3Rva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlZElucHV0VG9rZW5zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGR1cmF0aW9uTXM6IHJlc3VsdC5kdXJhdGlvbk1zLFxuICAgICAgICAgICAgY29zdFVzZDogY2FsY3VsYXRlQ29zdFVzZChyZXN1bHQubW9kZWwsIHtcbiAgICAgICAgICAgICAgaW5wdXRUb2tlbnM6IHJlc3VsdC51c2FnZS5pbnB1dFRva2VucyxcbiAgICAgICAgICAgICAgb3V0cHV0VG9rZW5zOiByZXN1bHQudXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlZElucHV0VG9rZW5zLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbnB1dC50b29scyxcbiAgICAgICAgICBpc3N1ZWRDb29yZCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBleGVjdXRpb25JbnB1dCA9XG4gICAgICBvdXRwdXRTY2hlbWEgJiYgaW5wdXQudG9vbHM/Lmxlbmd0aFxuICAgICAgICA/IHsgLi4uaW5wdXQsIGpzb25TY2hlbWE6IEpTT04uc3RyaW5naWZ5KG91dHB1dFNjaGVtYSkgfVxuICAgICAgICA6IGlucHV0O1xuXG4gICAgLy8gQW50aHJvcGljICjquLDsobQgY2xhdWRlIC1wIOqyveuhnClcbiAgICBjb25zdCBlbGVjdGVkVG9rZW4gPSB0aGlzLnNlbGVjdFRva2VuKCk7XG4gICAgaWYgKCFlbGVjdGVkVG9rZW4pIHRocm93IG5ldyBRdW90YUVycm9yKFwiTm8gdG9rZW5zIGF2YWlsYWJsZVwiKTtcblxuICAgIC8vIGF3YWl0IOyghOyXkCBjb3VudCDshKDrsJjsmIEuIOuzkeugrCDsmpTssq3snbQg64+Z7Iuc7JeQIOuPhOywqe2VtOuPhCDqsIHsnpAg64uk66W4IO2GoO2BsOydhCDqs6DrpbTrj4TroZ0uXG4gICAgdGhpcy5yZXF1ZXN0Q291bnRzLnNldChlbGVjdGVkVG9rZW4ubmFtZSwgdGhpcy5jb3VudE9mKGVsZWN0ZWRUb2tlbi5uYW1lKSArIDEpO1xuXG4gICAgbGV0IHRva2VuID0gZ2V0QWNjZXNzVG9rZW4oZWxlY3RlZFRva2VuLmNyZWRlbnRpYWxzKTtcbiAgICAvLyBleHBpcmVzX2F0IOyehOuwleydtOuptCBwcmVlbXB0aXZlIHJlZnJlc2hcbiAgICBjb25zdCBleHBpcmVzQXQgPSBnZXRFeHBpcmVzQXQoZWxlY3RlZFRva2VuLmNyZWRlbnRpYWxzKTtcbiAgICBpZiAoXG4gICAgICBleHBpcmVzQXQgJiZcbiAgICAgIGV4cGlyZXNBdCAtIERhdGUubm93KCkgPCBSRUZSRVNIX1NBRkVUWV9NUyAmJlxuICAgICAgZ2V0UmVmcmVzaFRva2VuKGVsZWN0ZWRUb2tlbi5jcmVkZW50aWFscylcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgUWdyaWRGcmFtZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi9xZ3JpZC5mcmFtZVwiKTtcbiAgICAgICAgdG9rZW4gPSBhd2FpdCBRZ3JpZEZyYW1lLnJlZnJlc2hUb2tlbihlbGVjdGVkVG9rZW4pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihgcmVmcmVzaCBmYWlsZWQgZm9yICR7ZWxlY3RlZFRva2VuLm5hbWV9OiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKGDihpIgJHtlbGVjdGVkVG9rZW4ubmFtZX0gKG1vZGVsOiAke2lucHV0Lm1vZGVsID8/IERFRkFVTFRfTU9ERUx9KWApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZUNsYXVkZShleGVjdXRpb25JbnB1dCwgdG9rZW4sIHRpbWVvdXRNcyA/PyBERUZBVUxUX1RJTUVPVVRfTVMpO1xuICAgIHJldHVybiBhcHBseVRvb2xDYWxsRW11bGF0aW9uKFxuICAgICAgeyAuLi5yZXN1bHQsIHRva2VuTmFtZTogZWxlY3RlZFRva2VuLm5hbWUsIG1vZGVsOiBpbnB1dC5tb2RlbCA/PyBERUZBVUxUX01PREVMIH0sXG4gICAgICBpbnB1dC50b29scyxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcXVlcnlTdHJlYW0oXG4gICAgaW5wdXQ6IFF1ZXJ5SW5wdXQsXG4gICAgY2I6IHtcbiAgICAgIG9uRGVsdGE6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgICBvbkNvbXBsZXRlOiAocmVzdWx0OiBRdWVyeU91dHB1dCkgPT4gdm9pZDtcbiAgICAgIG9uRXJyb3I6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gICAgICBvblRocmVhZElkPzogKHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgICBvblR1cm5JZD86ICh0dXJuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgICB9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWlucHV0Lm1vZGVsPy5zdGFydHNXaXRoKFwib3BlbmFpL1wiKSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVyeShpbnB1dCk7XG4gICAgICBjYi5vbkNvbXBsZXRlKHJlc3VsdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgWywgbW9kZWxdID0gaW5wdXQubW9kZWwuc3BsaXQoXCIvXCIsIDIpO1xuICAgIGlmICghbW9kZWwpIHRocm93IG5ldyBQcm9jZXNzRXJyb3IoXCJ1bmtub3duIG1vZGVsXCIpO1xuICAgIGlmICghdGhpcy5vcGVuYWlEaXNwYXRjaGVyKSB0aHJvdyBuZXcgUXVvdGFFcnJvcihcIk9wZW5BSSBkaXNwYXRjaGVyIG5vdCBpbml0aWFsaXplZFwiKTtcblxuICAgIGNvbnN0IG91dHB1dFNjaGVtYSA9IGlucHV0LnRvb2xzPy5sZW5ndGhcbiAgICAgID8gYnVpbGRUb29sQ2FsbFNjaGVtYShpbnB1dC50b29scylcbiAgICAgIDogaW5wdXQuanNvblNjaGVtYVxuICAgICAgICA/IChKU09OLnBhcnNlKGlucHV0Lmpzb25TY2hlbWEpIGFzIEpzb25WYWx1ZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBkZWNpc2lvbiA9IGRlY2lkZUNvbnZSb3V0aW5nKGlucHV0KTtcbiAgICBhd2FpdCB0aGlzLm9wZW5haURpc3BhdGNoZXIuZ2VuZXJhdGVTdHJlYW0oXG4gICAgICB7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBzeXN0ZW1Qcm9tcHQ6IGlucHV0LnN5c3RlbSxcbiAgICAgICAgb3V0cHV0U2NoZW1hOiBvdXRwdXRTY2hlbWFcbiAgICAgICAgICA/IChzdHJpY3RpZnkob3V0cHV0U2NoZW1hIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHN0cmljdGlmeT5bMF0pIGFzIEpzb25WYWx1ZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZWZmb3J0OiBpbnB1dC5lZmZvcnQsXG4gICAgICAgIHZlcmJvc2l0eTogaW5wdXQudmVyYm9zaXR5LFxuICAgICAgICByZWFzb25pbmdTdW1tYXJ5OiBpbnB1dC5yZWFzb25pbmdTdW1tYXJ5LFxuICAgICAgICBzZXJ2aWNlVGllcjogaW5wdXQuc2VydmljZVRpZXIsXG4gICAgICAgIGNvbGRJbnB1dDogZGVjaXNpb24uY29sZElucHV0LFxuICAgICAgICBjb2xkSGlzdG9yeTogZGVjaXNpb24uY29sZEhpc3RvcnksXG4gICAgICAgIHJldXNlOiBkZWNpc2lvbi5yZXVzZSxcbiAgICAgICAgcmV1c2VJbnB1dDogZGVjaXNpb24ucmV1c2VJbnB1dCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9uRGVsdGE6IGNiLm9uRGVsdGEsXG4gICAgICAgIG9uVGhyZWFkSWQ6IGNiLm9uVGhyZWFkSWQsXG4gICAgICAgIG9uVHVybklkOiBjYi5vblR1cm5JZCxcbiAgICAgICAgb25Db21wbGV0ZTogKHR1cm5SZXN1bHQpID0+IHtcbiAgICAgICAgICBjb25zdCBpc3N1ZWRDb29yZCA9IGlzc3VlQ29udkNvbnRleHQodHVyblJlc3VsdC50aHJlYWRDb29yZCwgZGVjaXNpb24pO1xuICAgICAgICAgIGNvbnN0IGFwcGxpZWQgPSBhcHBseVRvb2xDYWxsRW11bGF0aW9uKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiB0dXJuUmVzdWx0LnRleHQsXG4gICAgICAgICAgICAgIHRva2VuTmFtZTogdHVyblJlc3VsdC50b2tlbk5hbWUsXG4gICAgICAgICAgICAgIG1vZGVsOiB0dXJuUmVzdWx0Lm1vZGVsLFxuICAgICAgICAgICAgICB1c2FnZToge1xuICAgICAgICAgICAgICAgIGlucHV0X3Rva2VuczogdHVyblJlc3VsdC51c2FnZS5pbnB1dFRva2VucyxcbiAgICAgICAgICAgICAgICBvdXRwdXRfdG9rZW5zOiB0dXJuUmVzdWx0LnVzYWdlLm91dHB1dFRva2VucyxcbiAgICAgICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IDAsXG4gICAgICAgICAgICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHR1cm5SZXN1bHQudXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGR1cmF0aW9uTXM6IHR1cm5SZXN1bHQuZHVyYXRpb25NcyxcbiAgICAgICAgICAgICAgY29zdFVzZDogY2FsY3VsYXRlQ29zdFVzZCh0dXJuUmVzdWx0Lm1vZGVsLCB7XG4gICAgICAgICAgICAgICAgaW5wdXRUb2tlbnM6IHR1cm5SZXN1bHQudXNhZ2UuaW5wdXRUb2tlbnMsXG4gICAgICAgICAgICAgICAgb3V0cHV0VG9rZW5zOiB0dXJuUmVzdWx0LnVzYWdlLm91dHB1dFRva2VucyxcbiAgICAgICAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogdHVyblJlc3VsdC51c2FnZS5jYWNoZWRJbnB1dFRva2VucyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5wdXQudG9vbHMsXG4gICAgICAgICAgICBpc3N1ZWRDb29yZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNiLm9uQ29tcGxldGUoYXBwbGllZCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGNiLm9uRXJyb3IsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUNsYXVkZShcbiAgaW5wdXQ6IFF1ZXJ5SW5wdXQsXG4gIHRva2VuOiBzdHJpbmcsXG4gIHRpbWVvdXRNczogbnVtYmVyLFxuKTogUHJvbWlzZTxPbWl0PFF1ZXJ5T3V0cHV0LCBcImNvbnRlbnRcIiB8IFwiZmluaXNoUmVhc29uXCI+PiB7XG4gIGNvbnN0IHJhd01vZGVsID0gaW5wdXQubW9kZWwgPz8gREVGQVVMVF9NT0RFTDtcbiAgY29uc3QgbW9kZWwgPSByYXdNb2RlbC5pbmNsdWRlcyhcIi9cIikgPyByYXdNb2RlbC5zcGxpdChcIi9cIikucG9wKCkhIDogcmF3TW9kZWw7XG4gIGNvbnN0IHRpbWVvdXQgPSBpbnB1dC50aW1lb3V0ID8/IHRpbWVvdXRNcztcbiAgY29uc3QgdXNlU3RydWN0dXJlZE91dHB1dCA9IGlucHV0Lmpzb25TY2hlbWEgJiYgaW5wdXQuanNvblNjaGVtYS5sZW5ndGggPiAwO1xuXG4gIC8vIC0tdG9vbHMgXCJcIiDroZwg66qo65OgIHRvb2wg7J2EIOq4sOuzuCDssKjri6guIHN0cnVjdHVyZWQgb3V0cHV0IOyTsOuptCBTdHJ1Y3R1cmVkT3V0cHV0IOunjCDtmZTsnbTtirjrpqzsiqTtirguXG4gIC8vIC0tdG9vbHMgXCJcIiDripQg67CY65Oc7IucIOuSpOyXkCDri6Trpbgg7ZSM656Y6re46rCAIOyZgOyVvCBDTEkg7YyM7Iux7J20IOu5iCDrrLjsnpDsl7TroZwg7J247IudXG4gIGNvbnN0IHRvb2xBcmdzID0gdXNlU3RydWN0dXJlZE91dHB1dFxuICAgID8gW1wiLS10b29sc1wiLCBcIlwiLCBcIi0tYWxsb3dlZC10b29sc1wiLCBcIlN0cnVjdHVyZWRPdXRwdXRcIl1cbiAgICA6IFtcIi0tdG9vbHNcIiwgXCJcIl07XG5cbiAgY29uc3QgYXJnczogc3RyaW5nW10gPSBbXG4gICAgXCItcFwiLFxuICAgIC4uLnRvb2xBcmdzLFxuICAgIFwiLS1kaXNhbGxvd2VkVG9vbHNcIixcbiAgICAvLyBDQ+yXkOyEnCDsnpDrj5kg7Zmc7ISx7ZmU65CY64qUIGRlZmVycmVkIOuPhOq1rC4g7Yag7YGwIOy1nOygge2ZlOulvOychO2VtCDssKjri6hcbiAgICAuLi4oW1wiTW9uaXRvclwiLCBcIlB1c2hOb3RpZmljYXRpb25cIiwgXCJSZW1vdGVUcmlnZ2VyXCJdIGFzIGNvbnN0KSxcbiAgICBcIi0tb3V0cHV0LWZvcm1hdFwiLFxuICAgIFwic3RyZWFtLWpzb25cIixcbiAgICBcIi0tdmVyYm9zZVwiLFxuICAgIC8vIC0tbWF4LXR1cm5zOiBzdHJ1Y3R1cmVkIG91dHB1dCDsnYAgdG9vbF91c2UgKyB0b29sX3Jlc3VsdCDroZwgMu2EtCDshozruYRcbiAgICBcIi0tbWF4LXR1cm5zXCIsXG4gICAgdXNlU3RydWN0dXJlZE91dHB1dCA/IFwiMlwiIDogXCIxXCIsXG4gICAgXCItLXBlcm1pc3Npb24tbW9kZVwiLFxuICAgIFwiYnlwYXNzUGVybWlzc2lvbnNcIixcbiAgICBcIi0tc2V0dGluZy1zb3VyY2VzXCIsXG4gICAgXCJwcm9qZWN0XCIsXG4gICAgXCItLW1vZGVsXCIsXG4gICAgbW9kZWwsXG4gICAgLy8gLS1zeXN0ZW0tcHJvbXB064qUIOuwmOuTnOyLnCDrqoXsi5ztlbTslbztlaguIOyYteyFmCDsg53rnrUg7IucIEND6rCAIGRlZmF1bHQgc3lzdGVtIHByb21wdOulvCDsnpDrj5nsnLzroZwg7KO87J6F7ZWoKDIzaylcbiAgICBcIi0tc3lzdGVtLXByb21wdFwiLFxuICAgIGlucHV0LnN5c3RlbSA/PyBcIlwiLFxuICAgIFwiLS10aGlua2luZ1wiLFxuICAgIFwiZGlzYWJsZWRcIixcbiAgICBcIi0tZWZmb3J0XCIsXG4gICAgaW5wdXQuZWZmb3J0ID8/IERFRkFVTFRfRUZGT1JULFxuICAgIFwiLS1uby1zZXNzaW9uLXBlcnNpc3RlbmNlXCIsXG4gICAgLy8g66qo65OgIHNraWxscyDruYTtmZzshLHtmZRcbiAgICBcIi0tZGlzYWJsZS1zbGFzaC1jb21tYW5kc1wiLFxuICBdO1xuICBpZiAodXNlU3RydWN0dXJlZE91dHB1dCkge1xuICAgIGFyZ3MucHVzaChcIi0tanNvbi1zY2hlbWFcIiwgaW5wdXQuanNvblNjaGVtYSEpO1xuICB9XG4gIGFyZ3MucHVzaChpbnB1dC5wcm9tcHQpO1xuXG4gIGNvbnN0IGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSB7XG4gICAgUEFUSDogcHJvY2Vzcy5lbnYuUEFUSCxcbiAgICBUTVBESVI6IHByb2Nlc3MuZW52LlRNUERJUixcbiAgICBDTEFVREVfQ09ERV9PQVVUSF9UT0tFTjogdG9rZW4sXG4gICAgLy8gQ0xBVURFX0NPTkZJR19ESVIg7ZmY6rK967OA7IiY66GcIOyjvOyehVxuICAgIENMQVVERV9DT05GSUdfRElSLFxuICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQVVUT19NRU1PUlk6IFwiMVwiLFxuICAgIENMQVVERV9DT0RFX0RJU0FCTEVfQURBUFRJVkVfVEhJTktJTkc6IFwiMVwiLFxuICAgIENMQVVERV9DT0RFX0RJU0FCTEVfMU1fQ09OVEVYVDogXCIxXCIsXG4gICAgQ0xBVURFX0NPREVfRElTQUJMRV9DTEFVREVfTURTOiBcIjFcIixcbiAgICBDTEFVREVfQ09ERV9BVFRSSUJVVElPTl9IRUFERVI6IFwiMFwiLFxuICB9O1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxPbWl0PFF1ZXJ5T3V0cHV0LCBcImNvbnRlbnRcIiB8IFwiZmluaXNoUmVhc29uXCI+PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY2hpbGQgPSBzcGF3bihcImNsYXVkZVwiLCBhcmdzLCB7XG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcImlnbm9yZVwiXSxcbiAgICAgIGVudixcbiAgICAgIC8vIOqyqeumrCAo65GQIOuLqOqzhCk6XG4gICAgICAvLyAxLiBDTEFVREVfQ1dEIOKAlCBwcm9qZWN0IHNjb3BlIOqyqeumrCAoY3dkIOydmCAuY2xhdWRlL3NldHRpbmdzLmpzb24pXG4gICAgICAvLyAyLiBDTEFVREVfQ09ORklHX0RJUiDigJQgdXNlciBzY29wZSDqsqnrpqwgY3dkIOqyqeumrOunjOycvOuhoCDrtoDsobEuXG4gICAgICBjd2Q6IENMQVVERV9DV0QsXG4gICAgfSk7XG5cbiAgICBsZXQgYnVmZmVyID0gXCJcIjtcbiAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICBjaGlsZC5raWxsKCk7XG4gICAgICByZWplY3QobmV3IFRpbWVvdXRFcnJvcihgVGltZW91dCBhZnRlciAke3RpbWVvdXQgLyAxMDAwfXMgKHRva2VuOiAke21hc2tUb2tlbih0b2tlbil9KWApKTtcbiAgICB9LCB0aW1lb3V0KTtcblxuICAgIGNoaWxkLnN0ZG91dD8ub24oXCJkYXRhXCIsIChkOiBCdWZmZXIpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBidWZmZXIgKz0gZC50b1N0cmluZygpO1xuICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoXCJcXG5cIik7XG4gICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSA/PyBcIlwiO1xuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGlmICghbGluZS50cmltKCkpIGNvbnRpbnVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGogPSBKU09OLnBhcnNlKGxpbmUpO1xuICAgICAgICAgIGlmIChqLnR5cGUgPT09IFwicmVzdWx0XCIgJiYgIXNldHRsZWQpIHtcbiAgICAgICAgICAgIC8vIC0tanNvbi1zY2hlbWEg7IKs7JqpIOyLnCBzdHJ1Y3R1cmVkX291dHB1dCDsl5Ag7YyM7Iux65CcIOqwneyytOqwgCDsmKjri6Qg4oaSIOyasOyEoCDsgqzsmqlcbiAgICAgICAgICAgIGxldCB0ZXh0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZiAoai5zdHJ1Y3R1cmVkX291dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShqLnN0cnVjdHVyZWRfb3V0cHV0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRleHQgPSAoai5yZXN1bHQgPz8gXCJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXmBgYCg/Ompzb24pP1xccypcXG4/L2ksIFwiXCIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcbj9gYGBcXHMqJC9pLCBcIlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRleHQuc3RhcnRzV2l0aChcIllvdSd2ZSBoaXRcIikpIHtcbiAgICAgICAgICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgUXVvdGFFcnJvcihgUXVvdGEgZXhoYXVzdGVkICh0b2tlbjogJHttYXNrVG9rZW4odG9rZW4pfSlgKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdSA9IGoudXNhZ2UgPz8ge307XG4gICAgICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgdXNhZ2U6IHtcbiAgICAgICAgICAgICAgICBpbnB1dF90b2tlbnM6IHUuaW5wdXRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgb3V0cHV0X3Rva2VuczogdS5vdXRwdXRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB1LmNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyA/PyAwLFxuICAgICAgICAgICAgICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB1LmNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGR1cmF0aW9uTXM6IGouZHVyYXRpb25fbXMgPz8gMCxcbiAgICAgICAgICAgICAgY29zdFVzZDogai50b3RhbF9jb3N0X3VzZCA/PyAwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZWplY3QobmV3IFByb2Nlc3NFcnJvcihgQ0xJIHByb2Nlc3MgY2xvc2VkIHdpdGhvdXQgcmVzdWx0ICh0b2tlbjogJHttYXNrVG9rZW4odG9rZW4pfSlgKSk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImVycm9yXCIsIChlcnIpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICByZWplY3QobmV3IFByb2Nlc3NFcnJvcihgQ0xJIHByb2Nlc3MgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9ICh0b2tlbjogJHttYXNrVG9rZW4odG9rZW4pfSlgKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgUWdyaWREaXNwYXRjaGVyID0gbmV3IFFncmlkRGlzcGF0Y2hlckNsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtDQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUVuQyxNQUFNLGdCQUFnQjtBQUN0QixNQUFNLHFCQUFxQjtBQUMzQixNQUFNLGlCQUFpQjtBQUl2QixNQUFNLGFBQWE7QUFHbkIsTUFBTSxvQkFBb0I7QUFHMUIsTUFBTSx3QkFBd0I7Q0FDNUIsdUJBQXVCO0NBQ3ZCLHdCQUF3QjtDQUN4QixtQkFBbUI7Q0FDcEI7QUFHRCxNQUFNLG9CQUFvQjtBQUUxQixJQUFhLHVCQUFiLE1BQWtDO0NBQ2hDLHlCQUFTLElBQUksS0FBMkI7Q0FHeEMsZ0NBQWdCLElBQUksS0FBcUI7Q0FDekMsVUFBVTtDQUdWLGFBQXFDO0NBQ3JDLG1CQUE0QztDQUU1QyxjQUFjO0VBQ1osTUFBTSxlQUFlLEtBQUssVUFBVSx1QkFBdUIsTUFBTSxFQUFFO0FBRW5FLFlBQVUsR0FBRyxXQUFXLFdBQVcsRUFBRSxXQUFXLE1BQU0sQ0FBQztBQUN2RCxnQkFBYyxHQUFHLFdBQVcseUJBQXlCLGFBQWE7QUFFbEUsWUFBVSxtQkFBbUIsRUFBRSxXQUFXLE1BQU0sQ0FBQztBQUNqRCxnQkFBYyxHQUFHLGtCQUFrQixnQkFBZ0IsS0FBSztBQUN4RCxnQkFBYyxHQUFHLGtCQUFr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
|
|
348
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQuZGlzcGF0Y2hlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvcWdyaWQuZGlzcGF0Y2hlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJub2RlOmFzc2VydFwiO1xuLyoqXG4gKiBRZ3JpZERpc3BhdGNoZXIg4oCUIE9BdXRoIO2GoO2BsCDshKDtg50gKyBjbGF1ZGUgQ0xJIGZyZXNoIHNwYXduIOuUlOyKpO2MqOyymCDsi7HquIDthLQuXG4gKlxuICogLSDrp6Qg7JqU7LKt66eI64ukIOyDiCBjbGF1ZGUgQ0xJIO2UhOuhnOyEuOyKpCBzcGF3biDihpIg7J2R64u1IO2bhCDsooXro4xcbiAqIC0gbGVhc3QtdXNlZCByb3VuZC1yb2JpbiDsnLzroZwg7Yag7YGwIOyEoO2DnVxuICogLSDrqZTrqqjrpqwg7LqQ7IucIChNYXA8aWQsIFRva2VuU3Vic2V0QT4pIOuKlCBUb2tlblN1YnNjcmliZXIg6rCAIHBnIExJU1RFTi9OT1RJRlkg66GcIOqwseyLoFxuICogLSBxdWVyeSDsi5wgZXhwaXJlc19hdCDruYTqtZAg4oaSIOyehOuwlSDsi5wgcHJlZW1wdGl2ZSByZWZyZXNoXG4gKiAtIFF1b3RhRXJyb3Ig64qUIOq3uOuMgOuhnCDsg4HsnIQg7KCE7YyMICjsnpDrj5kgZmFpbG92ZXIg7JeG7J2MLCBVSSDsl5DshJwg7IiY64+ZIO2GoOq4gClcbiAqXG4gKiBlbnYgYWxsb3dsaXN0OiBQQVRILCBUTVBESVIsIENMQVVERV9DT0RFX09BVVRIX1RPS0VOLCBDTEFVREVfQ09ORklHX0RJUlxuICogICArIENMQVVERV9DT0RFX0RJU0FCTEVfKiArIENMQVVERV9DT0RFX0FUVFJJQlVUSU9OX0hFQURFUlxuICovXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IG1rZGlyU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5cbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5pbXBvcnQgeyBjYW5vbmljYWxBbnRocm9waWNNb2RlbCB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvYW50aHJvcGljL2FudGhyb3BpYy1jb25zdGFudHNcIjtcbmltcG9ydCB7IHR5cGUgQW50aHJvcGljRGlzcGF0Y2hlciB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvYW50aHJvcGljL2FudGhyb3BpYy1kaXNwYXRjaGVyXCI7XG5pbXBvcnQge1xuICBnZXRBY2Nlc3NUb2tlbixcbiAgZ2V0RXhwaXJlc0F0LFxuICBnZXRSZWZyZXNoVG9rZW4sXG59IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL2NyZWRlbnRpYWxzXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVDb3N0VXNkIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3Byb3ZpZGVycy9jb21tb24vbW9kZWwtY29zdFwiO1xuaW1wb3J0IHsgdHlwZSBHZW5lcmF0ZVJlc3VsdCB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3Byb3ZpZGVyLWRpc3BhdGNoZXJcIjtcbmltcG9ydCB7IHN0cmljdGlmeSB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3N0cmljdGlmaWVyXCI7XG5pbXBvcnQgeyB0eXBlIE9wZW5BSURpc3BhdGNoZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL29wZW5haS9vcGVuYWktZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBUb2tlblN1YnNldEEgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgZGVjaWRlQ29udlJvdXRpbmcsIGlzc3VlQ29udkNvbnRleHQgfSBmcm9tIFwiLi9jb252LXJvdXRpbmdcIjtcbmltcG9ydCB7IHR5cGUgUXVlcnlJbnB1dCwgdHlwZSBRdWVyeU91dHB1dCwgdHlwZSBUb2tlblN0YXRzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcbmltcG9ydCB7IG1hc2tUb2tlbiwgUHJvY2Vzc0Vycm9yLCBRdW90YUVycm9yLCBUaW1lb3V0RXJyb3IgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBUb2tlblN1YnNjcmliZXIgfSBmcm9tIFwiLi90b2tlbi1zdWJzY3JpYmVyXCI7XG5pbXBvcnQgeyBhcHBseVRvb2xDYWxsRW11bGF0aW9uLCBidWlsZFRvb2xDYWxsU2NoZW1hIH0gZnJvbSBcIi4vdG9vbC1lbXVsYXRpb25cIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCJdKTtcblxuY29uc3QgREVGQVVMVF9NT0RFTCA9IFwic29ubmV0XCI7XG5jb25zdCBERUZBVUxUX1RJTUVPVVRfTVMgPSA2MDBfMDAwO1xuY29uc3QgREVGQVVMVF9FRkZPUlQgPSBcImhpZ2hcIjtcblxuLy8gY2xhdWRlIENMSSDsnZggY3dkLiDsnbQg6rK966Gc7J2YIC5jbGF1ZGUvc2V0dGluZ3MuanNvbiDsnbQgcHJvamVjdCBzY29wZSDroZwg66Gc65Oc65CY7Ja0XG4vLyDtmLnsi5zrnbzrj4Qg7J6I7J2EIHVzZXIgc2NvcGUgKH4vLmNsYXVkZS9zZXR0aW5ncy5qc29uKeulvCDrja7slrTslIAgKC0tc2V0dGluZy1zb3VyY2VzIHByb2plY3Qg7JmAIO2VqOq7mCkuXG5jb25zdCBDTEFVREVfQ1dEID0gXCIvdG1wL3FncmlkXCI7XG5cbi8vIOq4gOuhnOuyjCB1c2VyIGNvbmZpZyDqsqnrpqwg6rK966GcLiAoQ0Psl5DshJwg7ZmY6rK967OA7IiY66GcIOydveuKlOuzgOyImClcbmNvbnN0IENMQVVERV9DT05GSUdfRElSID0gXCIvdG1wL3FncmlkLWNvbmZpZ1wiO1xuXG4vLyBxZ3JpZCDsoITsmqkgcHJvamVjdC9nbG9iYWwgc2V0dGluZ3Mg4oCUIHVzZXIgc2NvcGUg6rKp66as7JqpXG5jb25zdCBRR1JJRF9DTEFVREVfU0VUVElOR1MgPSB7XG4gIGFsd2F5c1RoaW5raW5nRW5hYmxlZDogZmFsc2UsIC8vIHRoaW5raW5nIGJsb2NrIOywqOuLqFxuICBpbmNsdWRlR2l0SW5zdHJ1Y3Rpb25zOiBmYWxzZSwgLy8gc3lzdGVtIHByb21wdCDsnZggZ2l0IOqwgOydtOuTnCDsoJzqsbBcbiAgY2xlYW51cFBlcmlvZERheXM6IDEsXG59O1xuXG4vLyDthqDtgbAg66eM66OMIOyehOuwlSDsnoTqs4TqsJIg4oCUIHRva2VuLmV4cGlyZWRBdOydtCAx67aEIOyViOyXkCDrp4zro4zrkJzri6TrqbQgcXVlcnkg7IucIOyytO2BrO2VmOqzoCByZWZyZXNoLlxuY29uc3QgUkVGUkVTSF9TQUZFVFlfTVMgPSA2MF8wMDA7XG5cbmV4cG9ydCBjbGFzcyBRZ3JpZERpc3BhdGNoZXJDbGFzcyB7XG4gIHRva2VucyA9IG5ldyBNYXA8bnVtYmVyLCBUb2tlblN1YnNldEE+KCk7XG5cbiAgLy8ga2V56riw67CYKHRva2VuTmFtZSkg64iE7KCBIOy5tOyatO2EsC4gdG9rZW4g7J20IE9BdXRoIHJlZnJlc2gg66GcIOuhnO2FjOydtO2KuOuQmOuPhCB0b2tlbk5hbWUg7J2AIOu2iOuzgOydtOudvCDsubTsmrTthLAg7Jyg7KeA65CoXG4gIHJlcXVlc3RDb3VudHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICByckluZGV4ID0gMDtcblxuICAvLyBzb25hbXUuY29uZmlnIG9uU3RhcnQg7JeQ7IScIOyymOumrO2VmOuKlCDrs4DsiJhcbiAgc3Vic2NyaWJlcjogVG9rZW5TdWJzY3JpYmVyIHwgbnVsbCA9IG51bGw7XG4gIG9wZW5haURpc3BhdGNoZXI6IE9wZW5BSURpc3BhdGNoZXIgfCBudWxsID0gbnVsbDtcbiAgYW50aHJvcGljRGlzcGF0Y2hlcjogQW50aHJvcGljRGlzcGF0Y2hlciB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IHNldHRpbmdzSnNvbiA9IEpTT04uc3RyaW5naWZ5KFFHUklEX0NMQVVERV9TRVRUSU5HUywgbnVsbCwgMik7XG5cbiAgICBta2RpclN5bmMoYCR7Q0xBVURFX0NXRH0vLmNsYXVkZWAsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHdyaXRlRmlsZVN5bmMoYCR7Q0xBVURFX0NXRH0vLmNsYXVkZS9zZXR0aW5ncy5qc29uYCwgc2V0dGluZ3NKc29uKTtcblxuICAgIG1rZGlyU3luYyhDTEFVREVfQ09ORklHX0RJUiwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlU3luYyhgJHtDTEFVREVfQ09ORklHX0RJUn0vLmNsYXVkZS5qc29uYCwgXCJ7fVwiKTtcbiAgICB3cml0ZUZpbGVTeW5jKGAke0NMQVVERV9DT05GSUdfRElSfS9zZXR0aW5ncy5qc29uYCwgc2V0dGluZ3NKc29uKTtcbiAgfVxuXG4gIGNvdW50T2YobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0Q291bnRzLmdldChuYW1lKSA/PyAwO1xuICB9XG5cbiAgLy8gVG9rZW5TdWJzY3JpYmVyIOy9nOuwsSDigJQg7LqQ7IucIG11dGF0aW9uXG4gIHVwc2VydENhY2hlKGlkOiBudW1iZXIsIHJvdzogVG9rZW5TdWJzZXRBKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbnMuc2V0KGlkLCByb3cpO1xuICB9XG5cbiAgcmVtb3ZlQ2FjaGUoaWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudG9rZW5zLmRlbGV0ZShpZCk7XG4gIH1cblxuICByZXBsYWNlQ2FjaGUocm93czogVG9rZW5TdWJzZXRBW10pOiB2b2lkIHtcbiAgICB0aGlzLnRva2VucyA9IG5ldyBNYXAocm93cy5tYXAoKHIpID0+IFtyLmlkLCByXSkpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogVG9rZW5TdGF0c1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMudG9rZW5zLnZhbHVlcygpXS5tYXAoKHIpID0+ICh7XG4gICAgICB0b2tlbjogbWFza1Rva2VuKGdldEFjY2Vzc1Rva2VuKHIuY3JlZGVudGlhbHMpKSxcbiAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgIHByb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgcmVxdWVzdHM6IHRoaXMuY291bnRPZihyLm5hbWUpLFxuICAgIH0pKTtcbiAgfVxuXG4gIHNlbGVjdFRva2VuKHByb3ZpZGVyID0gXCJhbnRocm9waWNcIik6IFRva2VuU3Vic2V0QSB8IG51bGwge1xuICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy50b2tlbnMudmFsdWVzKCldLmZpbHRlcigocikgPT4gci5wcm92aWRlciA9PT0gcHJvdmlkZXIpO1xuICAgIGlmIChyb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBtaW5Db3VudCA9IE1hdGgubWluKC4uLnJvd3MubWFwKChyKSA9PiB0aGlzLmNvdW50T2Yoci5uYW1lKSkpO1xuICAgIGNvbnN0IGlkbGUgPSByb3dzLmZpbHRlcigocikgPT4gdGhpcy5jb3VudE9mKHIubmFtZSkgPT09IG1pbkNvdW50KTtcbiAgICBjb25zdCBwaWNrZWQgPSBpZGxlW3RoaXMucnJJbmRleCAlIGlkbGUubGVuZ3RoXSE7XG4gICAgdGhpcy5yckluZGV4Kys7XG4gICAgcmV0dXJuIHBpY2tlZDtcbiAgfVxuXG4gIGFzeW5jIHF1ZXJ5KGlucHV0OiBRdWVyeUlucHV0LCB0aW1lb3V0TXM/OiBudW1iZXIpOiBQcm9taXNlPFF1ZXJ5T3V0cHV0PiB7XG4gICAgaWYgKGlucHV0LnRvb2xzPy5sZW5ndGggJiYgaW5wdXQuanNvblNjaGVtYSkge1xuICAgICAgdGhyb3cgbmV3IFByb2Nlc3NFcnJvcihcInRvb2xzIGFuZCBqc29uU2NoZW1hIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dFNjaGVtYSA9IGlucHV0LnRvb2xzPy5sZW5ndGhcbiAgICAgID8gYnVpbGRUb29sQ2FsbFNjaGVtYShpbnB1dC50b29scylcbiAgICAgIDogaW5wdXQuanNvblNjaGVtYVxuICAgICAgICA/IChKU09OLnBhcnNlKGlucHV0Lmpzb25TY2hlbWEpIGFzIEpzb25WYWx1ZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBwcm92aWRlciBwcmVmaXggcm91dGluZzogJ29wZW5haS9ncHQtNS40JyDihpIgT3BlbkFJRGlzcGF0Y2hlclxuICAgIGlmIChpbnB1dC5tb2RlbD8uaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICBjb25zdCBbcHJvdmlkZXIsIG1vZGVsXSA9IGlucHV0Lm1vZGVsLnNwbGl0KFwiL1wiLCAyKTtcbiAgICAgIGFzc2VydChtb2RlbCwgXCJ1bmtub3duIG1vZGVsXCIpO1xuICAgICAgaWYgKHByb3ZpZGVyID09PSBcIm9wZW5haVwiKSB7XG4gICAgICAgIGlmICghdGhpcy5vcGVuYWlEaXNwYXRjaGVyKSB0aHJvdyBuZXcgUXVvdGFFcnJvcihcIk9wZW5BSSBkaXNwYXRjaGVyIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgICAgY29uc3QgZGVjaXNpb24gPSBkZWNpZGVDb252Um91dGluZyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMub3BlbmFpRGlzcGF0Y2hlci5nZW5lcmF0ZSh7XG4gICAgICAgICAgbW9kZWw6IG1vZGVsLFxuICAgICAgICAgIHN5c3RlbVByb21wdDogaW5wdXQuc3lzdGVtLFxuICAgICAgICAgIG91dHB1dFNjaGVtYTogb3V0cHV0U2NoZW1hXG4gICAgICAgICAgICA/IChzdHJpY3RpZnkob3V0cHV0U2NoZW1hIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHN0cmljdGlmeT5bMF0pIGFzIEpzb25WYWx1ZSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVmZm9ydDogaW5wdXQuZWZmb3J0LFxuICAgICAgICAgIHZlcmJvc2l0eTogaW5wdXQudmVyYm9zaXR5LFxuICAgICAgICAgIHJlYXNvbmluZ1N1bW1hcnk6IGlucHV0LnJlYXNvbmluZ1N1bW1hcnksXG4gICAgICAgICAgc2VydmljZVRpZXI6IGlucHV0LnNlcnZpY2VUaWVyLFxuICAgICAgICAgIGNvbGRJbnB1dDogZGVjaXNpb24uY29sZElucHV0LFxuICAgICAgICAgIGNvbGRIaXN0b3J5OiBkZWNpc2lvbi5jb2xkSGlzdG9yeSxcbiAgICAgICAgICByZXVzZTogZGVjaXNpb24ucmV1c2UsXG4gICAgICAgICAgcmV1c2VJbnB1dDogZGVjaXNpb24ucmV1c2VJbnB1dCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaXNzdWVkQ29vcmQgPSBpc3N1ZUNvbnZDb250ZXh0KHJlc3VsdC50aHJlYWRDb29yZCwgZGVjaXNpb24pO1xuICAgICAgICByZXR1cm4gYXBwbHlUb29sQ2FsbEVtdWxhdGlvbih0b0VtdWxhdGlvblJlc3VsdChyZXN1bHQpLCBpbnB1dC50b29scywgaXNzdWVkQ29vcmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFudGhyb3BpYyDigJQgQW50aHJvcGljRGlzcGF0Y2hlcijrqYDti7DthLQgc2Vzc2lvbiByZXN1bWUpIOqyveuhnC4gT3BlbkFJIOqyveuhnOyZgCDrj5ntmJUuXG4gICAgaWYgKHRoaXMuYW50aHJvcGljRGlzcGF0Y2hlcikge1xuICAgICAgY29uc3QgZGVjaXNpb24gPSBkZWNpZGVDb252Um91dGluZyhpbnB1dCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFudGhyb3BpY0Rpc3BhdGNoZXIuZ2VuZXJhdGUoe1xuICAgICAgICAvLyBtb2RlbCDrr7jsp4DsoJXsnbTrqbQgQW50aHJvcGljRGlzcGF0Y2hlciDqsIAgQU5USFJPUElDX0RFRkFVTFRfTU9ERUwg7KCB7JqpIOKAlCBcInNvbm5ldFwiIOuzhOy5reydhFxuICAgICAgICAvLyDqsJXsoJzroZwg64G87JuMIGRpc3BhdGNoZXIgZGVmYXVsdCDrpbwg7KO97J207KeAIOyViuuKlOuLpC4gcHJlZml4IOygleq3nO2ZlOuPhCBkaXNwYXRjaGVyIOuCtOu2gOyXkOyEnC5cbiAgICAgICAgbW9kZWw6IGlucHV0Lm1vZGVsLFxuICAgICAgICBzeXN0ZW1Qcm9tcHQ6IGlucHV0LnN5c3RlbSxcbiAgICAgICAgb3V0cHV0U2NoZW1hOiBvdXRwdXRTY2hlbWFcbiAgICAgICAgICA/IChzdHJpY3RpZnkob3V0cHV0U2NoZW1hIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHN0cmljdGlmeT5bMF0pIGFzIEpzb25WYWx1ZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZWZmb3J0OiBpbnB1dC5lZmZvcnQsXG4gICAgICAgIGNvbGRJbnB1dDogZGVjaXNpb24uY29sZElucHV0LFxuICAgICAgICBjb2xkSGlzdG9yeTogZGVjaXNpb24uY29sZEhpc3RvcnksXG4gICAgICAgIHJldXNlOiBkZWNpc2lvbi5yZXVzZSxcbiAgICAgICAgcmV1c2VJbnB1dDogZGVjaXNpb24ucmV1c2VJbnB1dCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBpc3N1ZWRDb29yZCA9IGlzc3VlQ29udkNvbnRleHQocmVzdWx0LnRocmVhZENvb3JkLCBkZWNpc2lvbik7XG4gICAgICByZXR1cm4gYXBwbHlUb29sQ2FsbEVtdWxhdGlvbih0b0VtdWxhdGlvblJlc3VsdChyZXN1bHQpLCBpbnB1dC50b29scywgaXNzdWVkQ29vcmQpO1xuICAgIH1cblxuICAgIC8vIO2PtOuwsTogQW50aHJvcGljRGlzcGF0Y2hlciDrr7jstIjquLDtmZQg7IucIOq4sOyhtCBzdGF0ZWxlc3MgY2xhdWRlIC1wIOqyveuhnCjrqYDti7DthLQg7JeG7J2MKS5cbiAgICBjb25zdCBleGVjdXRpb25JbnB1dCA9XG4gICAgICBvdXRwdXRTY2hlbWEgJiYgaW5wdXQudG9vbHM/Lmxlbmd0aFxuICAgICAgICA/IHsgLi4uaW5wdXQsIGpzb25TY2hlbWE6IEpTT04uc3RyaW5naWZ5KG91dHB1dFNjaGVtYSkgfVxuICAgICAgICA6IGlucHV0O1xuXG4gICAgY29uc3QgZWxlY3RlZFRva2VuID0gdGhpcy5zZWxlY3RUb2tlbigpO1xuICAgIGlmICghZWxlY3RlZFRva2VuKSB0aHJvdyBuZXcgUXVvdGFFcnJvcihcIk5vIHRva2VucyBhdmFpbGFibGVcIik7XG5cbiAgICAvLyBhd2FpdCDsoITsl5AgY291bnQg7ISg67CY7JiBLiDrs5HroKwg7JqU7LKt7J20IOuPmeyLnOyXkCDrj4TssKntlbTrj4Qg6rCB7J6QIOuLpOuluCDthqDtgbDsnYQg6rOg66W064+E66GdLlxuICAgIHRoaXMucmVxdWVzdENvdW50cy5zZXQoZWxlY3RlZFRva2VuLm5hbWUsIHRoaXMuY291bnRPZihlbGVjdGVkVG9rZW4ubmFtZSkgKyAxKTtcblxuICAgIGxldCB0b2tlbiA9IGdldEFjY2Vzc1Rva2VuKGVsZWN0ZWRUb2tlbi5jcmVkZW50aWFscyk7XG4gICAgLy8gZXhwaXJlc19hdCDsnoTrsJXsnbTrqbQgcHJlZW1wdGl2ZSByZWZyZXNoXG4gICAgY29uc3QgZXhwaXJlc0F0ID0gZ2V0RXhwaXJlc0F0KGVsZWN0ZWRUb2tlbi5jcmVkZW50aWFscyk7XG4gICAgaWYgKFxuICAgICAgZXhwaXJlc0F0ICYmXG4gICAgICBleHBpcmVzQXQgLSBEYXRlLm5vdygpIDwgUkVGUkVTSF9TQUZFVFlfTVMgJiZcbiAgICAgIGdldFJlZnJlc2hUb2tlbihlbGVjdGVkVG9rZW4uY3JlZGVudGlhbHMpXG4gICAgKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IFFncmlkRnJhbWUgfSA9IGF3YWl0IGltcG9ydChcIi4vcWdyaWQuZnJhbWVcIik7XG4gICAgICAgIHRva2VuID0gYXdhaXQgUWdyaWRGcmFtZS5yZWZyZXNoVG9rZW4oZWxlY3RlZFRva2VuKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYHJlZnJlc2ggZmFpbGVkIGZvciAke2VsZWN0ZWRUb2tlbi5uYW1lfTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2dnZXIuaW5mbyhg4oaSICR7ZWxlY3RlZFRva2VuLm5hbWV9IChtb2RlbDogJHtpbnB1dC5tb2RlbCA/PyBERUZBVUxUX01PREVMfSlgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVDbGF1ZGUoZXhlY3V0aW9uSW5wdXQsIHRva2VuLCB0aW1lb3V0TXMgPz8gREVGQVVMVF9USU1FT1VUX01TKTtcbiAgICByZXR1cm4gYXBwbHlUb29sQ2FsbEVtdWxhdGlvbihcbiAgICAgIC8vIG1vZGVsIOuPhCBjYW5vbmljYWwg66GcIOKAlCBmYWxsYmFjayDrj4QgY29zdC/tkZzquLDqsIAgbWFpbiDqsr3roZzsmYAg7J287LmY7ZWY6rKMLlxuICAgICAgeyAuLi5yZXN1bHQsIHRva2VuTmFtZTogZWxlY3RlZFRva2VuLm5hbWUsIG1vZGVsOiBjYW5vbmljYWxBbnRocm9waWNNb2RlbChpbnB1dC5tb2RlbCkgfSxcbiAgICAgIGlucHV0LnRvb2xzLFxuICAgICk7XG4gIH1cblxuICBhc3luYyBxdWVyeVN0cmVhbShcbiAgICBpbnB1dDogUXVlcnlJbnB1dCxcbiAgICBjYjoge1xuICAgICAgb25EZWx0YTogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgICAgIG9uQ29tcGxldGU6IChyZXN1bHQ6IFF1ZXJ5T3V0cHV0KSA9PiB2b2lkO1xuICAgICAgb25FcnJvcjogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgICAgIG9uVGhyZWFkSWQ/OiAodGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgICAgIG9uVHVybklkPzogKHR1cm5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEFudGhyb3BpYyDsiqTtirjrpqzrsI06IG9wZW5haS8gcHJlZml4IOqwgCDslYTri4jrqbQgYW50aHJvcGljIOqyveuhnC5cbiAgICBpZiAoIWlucHV0Lm1vZGVsPy5zdGFydHNXaXRoKFwib3BlbmFpL1wiKSkge1xuICAgICAgLy8gQW50aHJvcGljRGlzcGF0Y2hlciDqsIAg7J6I7Jy866m0IOyLpOygnCBkZWx0YSDsiqTtirjrpqzrsI0uIOyXhuycvOuptCDquLDsobQgcXVlcnkoKSDtj7TrsLEoZGVsdGEg7JeG7J2MKS5cbiAgICAgIGlmICh0aGlzLmFudGhyb3BpY0Rpc3BhdGNoZXIpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0U2NoZW1hID0gaW5wdXQudG9vbHM/Lmxlbmd0aFxuICAgICAgICAgID8gYnVpbGRUb29sQ2FsbFNjaGVtYShpbnB1dC50b29scylcbiAgICAgICAgICA6IGlucHV0Lmpzb25TY2hlbWFcbiAgICAgICAgICAgID8gKEpTT04ucGFyc2UoaW5wdXQuanNvblNjaGVtYSkgYXMgSnNvblZhbHVlKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGRlY2lzaW9uID0gZGVjaWRlQ29udlJvdXRpbmcoaW5wdXQpO1xuICAgICAgICBhd2FpdCB0aGlzLmFudGhyb3BpY0Rpc3BhdGNoZXIuZ2VuZXJhdGVTdHJlYW0oXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gbW9kZWwg66+47KeA7KCVIOyLnCBkaXNwYXRjaGVyIOqwgCBBTlRIUk9QSUNfREVGQVVMVF9NT0RFTCDsoIHsmqkuIHByZWZpeCDsoJXqt5ztmZTrj4Qg64K067aA7JeQ7IScLlxuICAgICAgICAgICAgbW9kZWw6IGlucHV0Lm1vZGVsLFxuICAgICAgICAgICAgc3lzdGVtUHJvbXB0OiBpbnB1dC5zeXN0ZW0sXG4gICAgICAgICAgICBvdXRwdXRTY2hlbWE6IG91dHB1dFNjaGVtYVxuICAgICAgICAgICAgICA/IChzdHJpY3RpZnkob3V0cHV0U2NoZW1hIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHN0cmljdGlmeT5bMF0pIGFzIEpzb25WYWx1ZSlcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBlZmZvcnQ6IGlucHV0LmVmZm9ydCxcbiAgICAgICAgICAgIGNvbGRJbnB1dDogZGVjaXNpb24uY29sZElucHV0LFxuICAgICAgICAgICAgY29sZEhpc3Rvcnk6IGRlY2lzaW9uLmNvbGRIaXN0b3J5LFxuICAgICAgICAgICAgcmV1c2U6IGRlY2lzaW9uLnJldXNlLFxuICAgICAgICAgICAgcmV1c2VJbnB1dDogZGVjaXNpb24ucmV1c2VJbnB1dCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9uRGVsdGE6IGNiLm9uRGVsdGEsXG4gICAgICAgICAgICBvblRocmVhZElkOiBjYi5vblRocmVhZElkLFxuICAgICAgICAgICAgb25Db21wbGV0ZTogKHR1cm5SZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNzdWVkQ29vcmQgPSBpc3N1ZUNvbnZDb250ZXh0KHR1cm5SZXN1bHQudGhyZWFkQ29vcmQsIGRlY2lzaW9uKTtcbiAgICAgICAgICAgICAgY2Iub25Db21wbGV0ZShcbiAgICAgICAgICAgICAgICBhcHBseVRvb2xDYWxsRW11bGF0aW9uKHRvRW11bGF0aW9uUmVzdWx0KHR1cm5SZXN1bHQpLCBpbnB1dC50b29scywgaXNzdWVkQ29vcmQpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRXJyb3I6IGNiLm9uRXJyb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5xdWVyeShpbnB1dCk7XG4gICAgICBjYi5vbkNvbXBsZXRlKHJlc3VsdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgWywgbW9kZWxdID0gaW5wdXQubW9kZWwuc3BsaXQoXCIvXCIsIDIpO1xuICAgIGlmICghbW9kZWwpIHRocm93IG5ldyBQcm9jZXNzRXJyb3IoXCJ1bmtub3duIG1vZGVsXCIpO1xuICAgIGlmICghdGhpcy5vcGVuYWlEaXNwYXRjaGVyKSB0aHJvdyBuZXcgUXVvdGFFcnJvcihcIk9wZW5BSSBkaXNwYXRjaGVyIG5vdCBpbml0aWFsaXplZFwiKTtcblxuICAgIGNvbnN0IG91dHB1dFNjaGVtYSA9IGlucHV0LnRvb2xzPy5sZW5ndGhcbiAgICAgID8gYnVpbGRUb29sQ2FsbFNjaGVtYShpbnB1dC50b29scylcbiAgICAgIDogaW5wdXQuanNvblNjaGVtYVxuICAgICAgICA/IChKU09OLnBhcnNlKGlucHV0Lmpzb25TY2hlbWEpIGFzIEpzb25WYWx1ZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBkZWNpc2lvbiA9IGRlY2lkZUNvbnZSb3V0aW5nKGlucHV0KTtcbiAgICBhd2FpdCB0aGlzLm9wZW5haURpc3BhdGNoZXIuZ2VuZXJhdGVTdHJlYW0oXG4gICAgICB7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBzeXN0ZW1Qcm9tcHQ6IGlucHV0LnN5c3RlbSxcbiAgICAgICAgb3V0cHV0U2NoZW1hOiBvdXRwdXRTY2hlbWFcbiAgICAgICAgICA/IChzdHJpY3RpZnkob3V0cHV0U2NoZW1hIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHN0cmljdGlmeT5bMF0pIGFzIEpzb25WYWx1ZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZWZmb3J0OiBpbnB1dC5lZmZvcnQsXG4gICAgICAgIHZlcmJvc2l0eTogaW5wdXQudmVyYm9zaXR5LFxuICAgICAgICByZWFzb25pbmdTdW1tYXJ5OiBpbnB1dC5yZWFzb25pbmdTdW1tYXJ5LFxuICAgICAgICBzZXJ2aWNlVGllcjogaW5wdXQuc2VydmljZVRpZXIsXG4gICAgICAgIGNvbGRJbnB1dDogZGVjaXNpb24uY29sZElucHV0LFxuICAgICAgICBjb2xkSGlzdG9yeTogZGVjaXNpb24uY29sZEhpc3RvcnksXG4gICAgICAgIHJldXNlOiBkZWNpc2lvbi5yZXVzZSxcbiAgICAgICAgcmV1c2VJbnB1dDogZGVjaXNpb24ucmV1c2VJbnB1dCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9uRGVsdGE6IGNiLm9uRGVsdGEsXG4gICAgICAgIG9uVGhyZWFkSWQ6IGNiLm9uVGhyZWFkSWQsXG4gICAgICAgIG9uVHVybklkOiBjYi5vblR1cm5JZCxcbiAgICAgICAgb25Db21wbGV0ZTogKHR1cm5SZXN1bHQpID0+IHtcbiAgICAgICAgICBjb25zdCBpc3N1ZWRDb29yZCA9IGlzc3VlQ29udkNvbnRleHQodHVyblJlc3VsdC50aHJlYWRDb29yZCwgZGVjaXNpb24pO1xuICAgICAgICAgIGNiLm9uQ29tcGxldGUoXG4gICAgICAgICAgICBhcHBseVRvb2xDYWxsRW11bGF0aW9uKHRvRW11bGF0aW9uUmVzdWx0KHR1cm5SZXN1bHQpLCBpbnB1dC50b29scywgaXNzdWVkQ29vcmQpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGNiLm9uRXJyb3IsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cblxuLy8gR2VuZXJhdGVSZXN1bHQocHJvdmlkZXIgZGlzcGF0Y2hlciDsnZHri7Up66W8IGFwcGx5VG9vbENhbGxFbXVsYXRpb24g7J6F66ClIHNoYXBlIOuhnCDrp6TtlZHtlZzri6QuXG4vLyBPcGVuQUkvQW50aHJvcGljLCBxdWVyeS9xdWVyeVN0cmVhbSA0IOqyveuhnOqwgCDrj5nsnbztlZjqsowg7JO064ukLlxuLy8gQW50aHJvcGljIGFkYXB0ZXIg64qUIGNhY2hlIGNyZWF0aW9uIOydhCBpbnB1dFRva2VucyDsl5Ag7Y+s7ZWo7ZW0IO2RnOykgO2ZlO2VmOqzoCwg67OE64+EIO2VhOuTnOyXkOuPhCDrs7TsobTtlZzri6QuXG4vLyBwZXItcmVxdWVzdCBjb3N0IOuKlCBDbGF1ZGUgQ29kZSDqsIAg7KSAIHRvdGFsX2Nvc3RfdXNkIOulvCDsmrDshKAg7IKs7Jqp7ZWY6rOgIGZhbGxiYWNrIOqzhOyCsOunjCDqs7XthrUgY29zdCDtlajsiJjrpbwg7JO064ukLlxuZnVuY3Rpb24gdG9FbXVsYXRpb25SZXN1bHQoXG4gIHJlc3VsdDogR2VuZXJhdGVSZXN1bHQsXG4pOiBPbWl0PFF1ZXJ5T3V0cHV0LCBcImNvbnRlbnRcIiB8IFwiZmluaXNoUmVhc29uXCIgfCBcInJ1bkNvbnRleHRcIj4ge1xuICByZXR1cm4ge1xuICAgIHRleHQ6IHJlc3VsdC50ZXh0LFxuICAgIHRva2VuTmFtZTogcmVzdWx0LnRva2VuTmFtZSxcbiAgICBtb2RlbDogcmVzdWx0Lm1vZGVsLFxuICAgIHVzYWdlOiB7XG4gICAgICBpbnB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5pbnB1dFRva2VucyxcbiAgICAgIG91dHB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5vdXRwdXRUb2tlbnMsXG4gICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMgPz8gMCxcbiAgICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiByZXN1bHQudXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMsXG4gICAgfSxcbiAgICBkdXJhdGlvbk1zOiByZXN1bHQuZHVyYXRpb25NcyxcbiAgICBjb3N0VXNkOlxuICAgICAgcmVzdWx0LmNvc3RVc2QgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQuY29zdFVzZCA+IDBcbiAgICAgICAgPyByZXN1bHQuY29zdFVzZFxuICAgICAgICA6IGNhbGN1bGF0ZUNvc3RVc2QocmVzdWx0Lm1vZGVsLCB7XG4gICAgICAgICAgICBpbnB1dFRva2VuczogcmVzdWx0LnVzYWdlLmlucHV0VG9rZW5zLFxuICAgICAgICAgICAgb3V0cHV0VG9rZW5zOiByZXN1bHQudXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVkSW5wdXRUb2tlbnM6IHJlc3VsdC51c2FnZS5jYWNoZWRJbnB1dFRva2VucyxcbiAgICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogcmVzdWx0LnVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyA/PyAwLFxuICAgICAgICAgIH0pLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlQ2xhdWRlKFxuICBpbnB1dDogUXVlcnlJbnB1dCxcbiAgdG9rZW46IHN0cmluZyxcbiAgdGltZW91dE1zOiBudW1iZXIsXG4pOiBQcm9taXNlPE9taXQ8UXVlcnlPdXRwdXQsIFwiY29udGVudFwiIHwgXCJmaW5pc2hSZWFzb25cIj4+IHtcbiAgY29uc3QgcmF3TW9kZWwgPSBpbnB1dC5tb2RlbCA/PyBERUZBVUxUX01PREVMO1xuICBjb25zdCBtb2RlbCA9IHJhd01vZGVsLmluY2x1ZGVzKFwiL1wiKSA/IHJhd01vZGVsLnNwbGl0KFwiL1wiKS5wb3AoKSEgOiByYXdNb2RlbDtcbiAgY29uc3QgdGltZW91dCA9IGlucHV0LnRpbWVvdXQgPz8gdGltZW91dE1zO1xuICBjb25zdCB1c2VTdHJ1Y3R1cmVkT3V0cHV0ID0gaW5wdXQuanNvblNjaGVtYSAmJiBpbnB1dC5qc29uU2NoZW1hLmxlbmd0aCA+IDA7XG5cbiAgLy8gLS10b29scyBcIlwiIOuhnCDrqqjrk6AgdG9vbCDsnYQg6riw67O4IOywqOuLqC4gc3RydWN0dXJlZCBvdXRwdXQg7JOw66m0IFN0cnVjdHVyZWRPdXRwdXQg66eMIO2ZlOydtO2KuOumrOyKpO2KuC5cbiAgLy8gLS10b29scyBcIlwiIOuKlCDrsJjrk5zsi5wg65Kk7JeQIOuLpOuluCDtlIzrnpjqt7jqsIAg7JmA7JW8IENMSSDtjIzsi7HsnbQg67mIIOusuOyekOyXtOuhnCDsnbjsi51cbiAgY29uc3QgdG9vbEFyZ3MgPSB1c2VTdHJ1Y3R1cmVkT3V0cHV0XG4gICAgPyBbXCItLXRvb2xzXCIsIFwiXCIsIFwiLS1hbGxvd2VkLXRvb2xzXCIsIFwiU3RydWN0dXJlZE91dHB1dFwiXVxuICAgIDogW1wiLS10b29sc1wiLCBcIlwiXTtcblxuICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtcbiAgICBcIi1wXCIsXG4gICAgLi4udG9vbEFyZ3MsXG4gICAgXCItLWRpc2FsbG93ZWRUb29sc1wiLFxuICAgIC8vIEND7JeQ7IScIOyekOuPmSDtmZzshLHtmZTrkJjripQgZGVmZXJyZWQg64+E6rWsLiDthqDtgbAg7LWc7KCB7ZmU66W87JyE7ZW0IOywqOuLqFxuICAgIC4uLihbXCJNb25pdG9yXCIsIFwiUHVzaE5vdGlmaWNhdGlvblwiLCBcIlJlbW90ZVRyaWdnZXJcIl0gYXMgY29uc3QpLFxuICAgIFwiLS1vdXRwdXQtZm9ybWF0XCIsXG4gICAgXCJzdHJlYW0tanNvblwiLFxuICAgIFwiLS12ZXJib3NlXCIsXG4gICAgLy8gLS1tYXgtdHVybnM6IHN0cnVjdHVyZWQgb3V0cHV0IOydgCB0b29sX3VzZSArIHRvb2xfcmVzdWx0IOuhnCAy7YS0IOyGjOu5hFxuICAgIFwiLS1tYXgtdHVybnNcIixcbiAgICB1c2VTdHJ1Y3R1cmVkT3V0cHV0ID8gXCIyXCIgOiBcIjFcIixcbiAgICBcIi0tcGVybWlzc2lvbi1tb2RlXCIsXG4gICAgXCJieXBhc3NQZXJtaXNzaW9uc1wiLFxuICAgIFwiLS1zZXR0aW5nLXNvdXJjZXNcIixcbiAgICBcInByb2plY3RcIixcbiAgICBcIi0tbW9kZWxcIixcbiAgICBtb2RlbCxcbiAgICAvLyAtLXN5c3RlbS1wcm9tcHTripQg67CY65Oc7IucIOuqheyLnO2VtOyVvO2VqC4g7Ji17IWYIOyDneuetSDsi5wgQ0PqsIAgZGVmYXVsdCBzeXN0ZW0gcHJvbXB066W8IOyekOuPmeycvOuhnCDso7zsnoXtlagoMjNrKVxuICAgIFwiLS1zeXN0ZW0tcHJvbXB0XCIsXG4gICAgaW5wdXQuc3lzdGVtID8/IFwiXCIsXG4gICAgXCItLXRoaW5raW5nXCIsXG4gICAgXCJkaXNhYmxlZFwiLFxuICAgIFwiLS1lZmZvcnRcIixcbiAgICBpbnB1dC5lZmZvcnQgPz8gREVGQVVMVF9FRkZPUlQsXG4gICAgXCItLW5vLXNlc3Npb24tcGVyc2lzdGVuY2VcIixcbiAgICAvLyDrqqjrk6Agc2tpbGxzIOu5hO2ZnOyEse2ZlFxuICAgIFwiLS1kaXNhYmxlLXNsYXNoLWNvbW1hbmRzXCIsXG4gIF07XG4gIGlmICh1c2VTdHJ1Y3R1cmVkT3V0cHV0KSB7XG4gICAgYXJncy5wdXNoKFwiLS1qc29uLXNjaGVtYVwiLCBpbnB1dC5qc29uU2NoZW1hISk7XG4gIH1cbiAgYXJncy5wdXNoKGlucHV0LnByb21wdCk7XG5cbiAgY29uc3QgZW52OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHtcbiAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICAgIFRNUERJUjogcHJvY2Vzcy5lbnYuVE1QRElSLFxuICAgIENMQVVERV9DT0RFX09BVVRIX1RPS0VOOiB0b2tlbixcbiAgICAvLyBDTEFVREVfQ09ORklHX0RJUiDtmZjqsr3rs4DsiJjroZwg7KO87J6FXG4gICAgQ0xBVURFX0NPTkZJR19ESVIsXG4gICAgQ0xBVURFX0NPREVfRElTQUJMRV9BVVRPX01FTU9SWTogXCIxXCIsXG4gICAgQ0xBVURFX0NPREVfRElTQUJMRV9BREFQVElWRV9USElOS0lORzogXCIxXCIsXG4gICAgQ0xBVURFX0NPREVfRElTQUJMRV8xTV9DT05URVhUOiBcIjFcIixcbiAgICBDTEFVREVfQ09ERV9ESVNBQkxFX0NMQVVERV9NRFM6IFwiMVwiLFxuICAgIENMQVVERV9DT0RFX0FUVFJJQlVUSU9OX0hFQURFUjogXCIwXCIsXG4gIH07XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPE9taXQ8UXVlcnlPdXRwdXQsIFwiY29udGVudFwiIHwgXCJmaW5pc2hSZWFzb25cIj4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKFwiY2xhdWRlXCIsIGFyZ3MsIHtcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJwaXBlXCIsIFwiaWdub3JlXCJdLFxuICAgICAgZW52LFxuICAgICAgLy8g6rKp66asICjrkZAg64uo6rOEKTpcbiAgICAgIC8vIDEuIENMQVVERV9DV0Qg4oCUIHByb2plY3Qgc2NvcGUg6rKp66asIChjd2Qg7J2YIC5jbGF1ZGUvc2V0dGluZ3MuanNvbilcbiAgICAgIC8vIDIuIENMQVVERV9DT05GSUdfRElSIOKAlCB1c2VyIHNjb3BlIOqyqeumrCBjd2Qg6rKp66as66eM7Jy866GgIOu2gOyhsS5cbiAgICAgIGN3ZDogQ0xBVURFX0NXRCxcbiAgICB9KTtcblxuICAgIGxldCBidWZmZXIgPSBcIlwiO1xuICAgIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChzZXR0bGVkKSByZXR1cm47XG4gICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgIGNoaWxkLmtpbGwoKTtcbiAgICAgIHJlamVjdChuZXcgVGltZW91dEVycm9yKGBUaW1lb3V0IGFmdGVyICR7dGltZW91dCAvIDEwMDB9cyAodG9rZW46ICR7bWFza1Rva2VuKHRva2VuKX0pYCkpO1xuICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGQ6IEJ1ZmZlcikgPT4ge1xuICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgIGJ1ZmZlciArPSBkLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdChcIlxcblwiKTtcbiAgICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpID8/IFwiXCI7XG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgaWYgKCFsaW5lLnRyaW0oKSkgY29udGludWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaiA9IEpTT04ucGFyc2UobGluZSk7XG4gICAgICAgICAgaWYgKGoudHlwZSA9PT0gXCJyZXN1bHRcIiAmJiAhc2V0dGxlZCkge1xuICAgICAgICAgICAgLy8gLS1qc29uLXNjaGVtYSDsgqzsmqkg7IucIHN0cnVjdHVyZWRfb3V0cHV0IOyXkCDtjIzsi7HrkJwg6rCd7LK06rCAIOyYqOuLpCDihpIg7Jqw7ISgIOyCrOyaqVxuICAgICAgICAgICAgbGV0IHRleHQ6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChqLnN0cnVjdHVyZWRfb3V0cHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KGouc3RydWN0dXJlZF9vdXRwdXQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGV4dCA9IChqLnJlc3VsdCA/PyBcIlwiKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eYGBgKD86anNvbik/XFxzKlxcbj8vaSwgXCJcIilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxuP2BgYFxccyokL2ksIFwiXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGV4dC5zdGFydHNXaXRoKFwiWW91J3ZlIGhpdFwiKSkge1xuICAgICAgICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBRdW90YUVycm9yKGBRdW90YSBleGhhdXN0ZWQgKHRva2VuOiAke21hc2tUb2tlbih0b2tlbil9KWApKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB1ID0gai51c2FnZSA/PyB7fTtcbiAgICAgICAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICB1c2FnZToge1xuICAgICAgICAgICAgICAgIGlucHV0X3Rva2VuczogdS5pbnB1dF90b2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICBvdXRwdXRfdG9rZW5zOiB1Lm91dHB1dF90b2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHUuY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHUuY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMgPz8gMCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZHVyYXRpb25Nczogai5kdXJhdGlvbl9tcyA/PyAwLFxuICAgICAgICAgICAgICBjb3N0VXNkOiBqLnRvdGFsX2Nvc3RfdXNkID8/IDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKFwiY2xvc2VcIiwgKCkgPT4ge1xuICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHJlamVjdChuZXcgUHJvY2Vzc0Vycm9yKGBDTEkgcHJvY2VzcyBjbG9zZWQgd2l0aG91dCByZXN1bHQgKHRva2VuOiAke21hc2tUb2tlbih0b2tlbil9KWApKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHJlamVjdChuZXcgUHJvY2Vzc0Vycm9yKGBDTEkgcHJvY2VzcyBlcnJvcjogJHtlcnIubWVzc2FnZX0gKHRva2VuOiAke21hc2tUb2tlbih0b2tlbil9KWApKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBRZ3JpZERpc3BhdGNoZXIgPSBuZXcgUWdyaWREaXNwYXRjaGVyQ2xhc3MoKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFDQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUVuQyxNQUFNLGdCQUFnQjtBQUN0QixNQUFNLHFCQUFxQjtBQUMzQixNQUFNLGlCQUFpQjtBQUl2QixNQUFNLGFBQWE7QUFHbkIsTUFBTSxvQkFBb0I7QUFHMUIsTUFBTSx3QkFBd0I7Q0FDNUIsdUJBQXVCO0NBQ3ZCLHdC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
|
|
@@ -126,6 +126,7 @@ var TokenSubscriber = class {
|
|
|
126
126
|
if (payload.op === "DELETE") {
|
|
127
127
|
this.dispatcher.removeCache(payload.id);
|
|
128
128
|
this.dispatcher.openaiDispatcher?.onTokenRemoved(payload.id).catch((e) => logger.warn(`openai worker remove failed: ${e.message}`));
|
|
129
|
+
this.dispatcher.anthropicDispatcher?.onTokenRemoved(payload.id);
|
|
129
130
|
logger.info(`NOTIFY ${payload.op} id=${payload.id} → removed from cache`);
|
|
130
131
|
return;
|
|
131
132
|
}
|
|
@@ -133,6 +134,7 @@ var TokenSubscriber = class {
|
|
|
133
134
|
if (!row) {
|
|
134
135
|
this.dispatcher.removeCache(payload.id);
|
|
135
136
|
this.dispatcher.openaiDispatcher?.onTokenRemoved(payload.id).catch((e) => logger.warn(`openai worker remove failed: ${e.message}`));
|
|
137
|
+
this.dispatcher.anthropicDispatcher?.onTokenRemoved(payload.id);
|
|
136
138
|
logger.info(`NOTIFY ${payload.op} id=${payload.id} → missing, removed from cache`);
|
|
137
139
|
return;
|
|
138
140
|
}
|
|
@@ -144,16 +146,27 @@ var TokenSubscriber = class {
|
|
|
144
146
|
this.dispatcher.openaiDispatcher?.onTokenActivated(payload.id);
|
|
145
147
|
this.dispatcher.openaiDispatcher?.onTokenUpdated(payload.id, row.name, creds).catch((e) => logger.warn(`openai worker update failed: ${e.message}`));
|
|
146
148
|
} else this.dispatcher.openaiDispatcher?.onTokenDeactivated(payload.id);
|
|
149
|
+
} else if (row.provider === "anthropic") {
|
|
150
|
+
const creds = row.credentials;
|
|
151
|
+
if (payload.op === "INSERT" && row.active) this.dispatcher.anthropicDispatcher?.onTokenAdded(payload.id, row.name, creds);
|
|
152
|
+
else if (row.active) this.dispatcher.anthropicDispatcher?.onTokenUpdated(payload.id, row.name, creds);
|
|
153
|
+
else this.dispatcher.anthropicDispatcher?.onTokenRemoved(payload.id);
|
|
147
154
|
}
|
|
148
155
|
logger.info(`NOTIFY ${payload.op} id=${payload.id} (${row.name}) active=${row.active}`);
|
|
149
156
|
}
|
|
150
157
|
async reconcile() {
|
|
151
158
|
const rows = await TokenModel.findActive("A");
|
|
152
159
|
this.dispatcher.replaceCache(rows);
|
|
160
|
+
const anthropicRows = rows.filter((r) => r.provider === "anthropic").map((r) => ({
|
|
161
|
+
id: r.id,
|
|
162
|
+
name: r.name,
|
|
163
|
+
credentials: r.credentials
|
|
164
|
+
}));
|
|
165
|
+
this.dispatcher.anthropicDispatcher?.replaceTokens(anthropicRows);
|
|
153
166
|
this.lastReconcileAt = /* @__PURE__ */ new Date();
|
|
154
167
|
}
|
|
155
168
|
};
|
|
156
169
|
//#endregion
|
|
157
170
|
export { TokenSubscriber };
|
|
158
171
|
|
|
159
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tc3Vic2NyaWJlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4tc3Vic2NyaWJlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogdG9rZW5zX2NoYW5nZWQgTElTVEVOIHN1YnNjcmliZXIuICovXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQ2xpZW50LCB0eXBlIENsaWVudENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIE9wZW5BSUNyZWRlbnRpYWxzIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFFncmlkRGlzcGF0Y2hlckNsYXNzIH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBTdWJzY3JpYmVyU3RhdHVzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwic3Vic2NyaWJlclwiXSk7XG5cbmNvbnN0IFRPS0VOU19DSEFOR0VEID0gXCJ0b2tlbnNfY2hhbmdlZFwiO1xuY29uc3QgUkVDT05DSUxFX0lOVEVSVkFMX01TID0gMTAgKiA2MCAqIDEwMDA7XG5jb25zdCBDT05ORUNUSU9OX1RJTUVPVVRfTVMgPSA1XzAwMDtcbmNvbnN0IEJBQ0tPRkZfQkFTRV9NUyA9IDUwMDtcbmNvbnN0IEJBQ0tPRkZfQ0FQX01TID0gMzBfMDAwO1xuXG50eXBlIFBheWxvYWQgPSB7IG9wOiBcIklOU0VSVFwiIHwgXCJVUERBVEVcIiB8IFwiREVMRVRFXCI7IGlkOiBudW1iZXIgfTtcblxuZXhwb3J0IGNsYXNzIFRva2VuU3Vic2NyaWJlciB7XG4gIGNsaWVudDogQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHJlY29uY2lsZVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICByZWNvbm5lY3RUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgc2h1dGRvd25SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgYXR0ZW1wdCA9IDA7XG4gIGNvbm5lY3RlZEF0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIGxhc3RSZWNvbmNpbGVBdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb25uQ29uZmlnOiBDbGllbnRDb25maWcsXG4gICAgcHVibGljIGRpc3BhdGNoZXI6IFFncmlkRGlzcGF0Y2hlckNsYXNzLFxuICApIHt9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5zaHV0ZG93blJlcXVlc3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuZW5zdXJlUmVjb25jaWxlVGltZXIoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbm5lY3RBbmRSZWNvbmNpbGUoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBzdWJzY3JpYmVyIHN0YXJ0IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX0sIHNjaGVkdWxpbmcgcmV0cnlgKTtcbiAgICAgIHRoaXMucmV0cnlMYXRlcigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zaHV0ZG93blJlcXVlc3RlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMucmVjb25jaWxlVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZWNvbmNpbGVUaW1lcik7XG4gICAgICB0aGlzLnJlY29uY2lsZVRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVjb25uZWN0VGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVyKTtcbiAgICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmNsb3NlQ2xpZW50KCk7XG4gIH1cblxuICBzdGF0dXMoKTogU3Vic2NyaWJlclN0YXR1cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbm5lY3RlZDogdGhpcy5jbGllbnQgIT09IG51bGwgJiYgdGhpcy5yZWNvbm5lY3RUaW1lciA9PT0gbnVsbCxcbiAgICAgIGNvbm5lY3RlZEF0OiB0aGlzLmNvbm5lY3RlZEF0LFxuICAgICAgbGFzdFJlY29uY2lsZUF0OiB0aGlzLmxhc3RSZWNvbmNpbGVBdCxcbiAgICAgIGF0dGVtcHQ6IHRoaXMuYXR0ZW1wdCxcbiAgICB9O1xuICB9XG5cbiAgZW5zdXJlUmVjb25jaWxlVGltZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb25jaWxlVGltZXIpIHJldHVybjtcblxuICAgIC8vIExJU1RFTi9OT1RJRlkg64qUIOuBiuq4tCDrj5nslYgg7Jyg7Iuk65CgIOyImCDsnojslrQg7KO86riw7KCB7Jy866GcIERCIOq4sOykgOycvOuhnCDrp57stpjri6QuXG4gICAgdGhpcy5yZWNvbmNpbGVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVjb25jaWxlKCkuY2F0Y2goKGUpID0+XG4gICAgICAgIGxvZ2dlci53YXJuKGBwZXJpb2RpYyByZWNvbmNpbGUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApLFxuICAgICAgKTtcbiAgICB9LCBSRUNPTkNJTEVfSU5URVJWQUxfTVMpO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdEFuZFJlY29uY2lsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3RBbmRMaXN0ZW4oKTtcbiAgICBhd2FpdCB0aGlzLnJlY29uY2lsZSgpO1xuICAgIHRoaXMuYXR0ZW1wdCA9IDA7XG4gIH1cblxuICBhc3luYyBjb25uZWN0QW5kTGlzdGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbGllbnQoe1xuICAgICAgLi4udGhpcy5jb25uQ29uZmlnLFxuICAgICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IENPTk5FQ1RJT05fVElNRU9VVF9NUyxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgIGtlZXBBbGl2ZUluaXRpYWxEZWxheU1pbGxpczogMTBfMDAwLFxuICAgICAgYXBwbGljYXRpb25fbmFtZTogXCJxZ3JpZC1saXN0ZW5lclwiLFxuICAgIH0pO1xuXG4gICAgY2xpZW50Lm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgIGxvZ2dlci53YXJuKGBzdWJzY3JpYmVyIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIHRoaXMucmV0cnlMYXRlcigpO1xuICAgIH0pO1xuICAgIGNsaWVudC5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuc2h1dGRvd25SZXF1ZXN0ZWQpIHRoaXMucmV0cnlMYXRlcigpO1xuICAgIH0pO1xuICAgIGNsaWVudC5vbihcIm5vdGlmaWNhdGlvblwiLCAobXNnKSA9PiB7XG4gICAgICBpZiAobXNnLmNoYW5uZWwgIT09IFRPS0VOU19DSEFOR0VEIHx8ICFtc2cucGF5bG9hZCkgcmV0dXJuO1xuICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb24obXNnLnBheWxvYWQpLmNhdGNoKChlKSA9PlxuICAgICAgICBsb2dnZXIud2FybihgaGFuZGxlIE5PVElGWSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KCk7XG4gICAgICBhd2FpdCBjbGllbnQucXVlcnkoXCJTRVQgc3RhdGVtZW50X3RpbWVvdXQgPSAwXCIpO1xuICAgICAgYXdhaXQgY2xpZW50LnF1ZXJ5KFwiU0VUIGlkbGVfaW5fdHJhbnNhY3Rpb25fc2Vzc2lvbl90aW1lb3V0ID0gMFwiKTtcbiAgICAgIGF3YWl0IGNsaWVudC5xdWVyeShgTElTVEVOICR7Y2xpZW50LmVzY2FwZUlkZW50aWZpZXIoVE9LRU5TX0NIQU5HRUQpfWApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNsaWVudC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5lbmQoKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMuY29ubmVjdGVkQXQgPSBuZXcgRGF0ZSgpO1xuICAgIGxvZ2dlci5pbmZvKGBzdWJzY3JpYmVkIHRvICR7VE9LRU5TX0NIQU5HRUR9YCk7XG4gIH1cblxuICByZXRyeUxhdGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNodXRkb3duUmVxdWVzdGVkKSByZXR1cm47XG4gICAgaWYgKHRoaXMucmVjb25uZWN0VGltZXIpIHJldHVybjtcblxuICAgIHZvaWQgdGhpcy5jbG9zZUNsaWVudCgpO1xuICAgIHRoaXMuYXR0ZW1wdCArPSAxO1xuICAgIGNvbnN0IGNhcCA9IE1hdGgubWluKEJBQ0tPRkZfQkFTRV9NUyAqIDIgKiogdGhpcy5hdHRlbXB0LCBCQUNLT0ZGX0NBUF9NUyk7XG4gICAgY29uc3QgZGVsYXkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjYXApO1xuICAgIGxvZ2dlci5pbmZvKGByZWNvbm5lY3RpbmcgaW4gJHtkZWxheX1tcyAoYXR0ZW1wdCAke3RoaXMuYXR0ZW1wdH0pYCk7XG4gICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG51bGw7XG4gICAgICB0aGlzLmNvbm5lY3RBbmRSZWNvbmNpbGUoKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBsb2dnZXIud2Fybihgc3Vic2NyaWJlciByZWNvbm5lY3QgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB0aGlzLnJldHJ5TGF0ZXIoKTtcbiAgICAgIH0pO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlQ2xpZW50KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuY2xpZW50O1xuICAgIGlmICghY2xpZW50KSByZXR1cm47XG5cbiAgICB0aGlzLmNsaWVudCA9IG51bGw7XG4gICAgY2xpZW50LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIGF3YWl0IGNsaWVudC5lbmQoKS5jYXRjaCgoKSA9PiB7fSk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVOb3RpZmljYXRpb24ocGF5bG9hZEpzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHBheWxvYWRKc29uKSBhcyBQYXlsb2FkO1xuICAgIGlmIChwYXlsb2FkLm9wID09PSBcIkRFTEVURVwiKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlQ2FjaGUocGF5bG9hZC5pZCk7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICA/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSB3b3JrZXIgcmVtb3ZlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICBsb2dnZXIuaW5mbyhgTk9USUZZICR7cGF5bG9hZC5vcH0gaWQ9JHtwYXlsb2FkLmlkfSDihpIgcmVtb3ZlZCBmcm9tIGNhY2hlYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJvdyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE9uZShcIkFcIiwgeyBpZDogcGF5bG9hZC5pZCB9KTtcbiAgICBpZiAoIXJvdykge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnJlbW92ZUNhY2hlKHBheWxvYWQuaWQpO1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXJcbiAgICAgICAgPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKVxuICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgd29ya2VyIHJlbW92ZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICAgICAgbG9nZ2VyLmluZm8oYE5PVElGWSAke3BheWxvYWQub3B9IGlkPSR7cGF5bG9hZC5pZH0g4oaSIG1pc3NpbmcsIHJlbW92ZWQgZnJvbSBjYWNoZWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGF0Y2hlci51cHNlcnRDYWNoZShwYXlsb2FkLmlkLCByb3cpO1xuXG4gICAgaWYgKHJvdy5wcm92aWRlciA9PT0gXCJvcGVuYWlcIikge1xuICAgICAgY29uc3QgY3JlZHMgPSByb3cuY3JlZGVudGlhbHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBpZiAocGF5bG9hZC5vcCA9PT0gXCJJTlNFUlRcIikge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICAgID8ub25Ub2tlbkFkZGVkKHBheWxvYWQuaWQsIHJvdy5uYW1lLCBjcmVkcyBhcyBPcGVuQUlDcmVkZW50aWFscylcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgd29ya2VyIHNwYXduIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICB9IGVsc2UgaWYgKHJvdy5hY3RpdmUpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXI/Lm9uVG9rZW5BY3RpdmF0ZWQocGF5bG9hZC5pZCk7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyXG4gICAgICAgICAgPy5vblRva2VuVXBkYXRlZChwYXlsb2FkLmlkLCByb3cubmFtZSwgY3JlZHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMpXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiBsb2dnZXIud2Fybihgb3BlbmFpIHdvcmtlciB1cGRhdGUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5vblRva2VuRGVhY3RpdmF0ZWQocGF5bG9hZC5pZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZ2dlci5pbmZvKGBOT1RJRlkgJHtwYXlsb2FkLm9wfSBpZD0ke3BheWxvYWQuaWR9ICgke3Jvdy5uYW1lfSkgYWN0aXZlPSR7cm93LmFjdGl2ZX1gKTtcbiAgfVxuXG4gIGFzeW5jIHJlY29uY2lsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kQWN0aXZlKFwiQVwiKTtcbiAgICB0aGlzLmRpc3BhdGNoZXIucmVwbGFjZUNhY2hlKHJvd3MpO1xuICAgIHRoaXMubGFzdFJlY29uY2lsZUF0ID0gbmV3IERhdGUoKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsYUFBYSxDQUFDO0FBRWpELE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0sd0JBQXdCLE1BQVU7QUFDeEMsTUFBTSx3QkFBd0I7QUFDOUIsTUFBTSxrQkFBa0I7QUFDeEIsTUFBTSxpQkFBaUI7QUFJdkIsSUFBYSxrQkFBYixNQUE2QjtDQUMzQixTQUF3QjtDQUN4QixpQkFBd0M7Q0FDeEMsaUJBQXdDO0NBQ3hDLG9CQUFvQjtDQUNwQixVQUFVO0NBQ1YsY0FBMkI7Q0FDM0Isa0JBQStCO0NBRS9CLFlBQ0UsWUFDQSxZQUNBO0FBRk8sT0FBQSxhQUFBO0FBQ0EsT0FBQSxhQUFBOztDQUdULE1BQU0sUUFBMEI7QUFDOUIsT0FBSyxvQkFBb0I7QUFDekIsT0FBSyxzQkFBc0I7QUFFM0IsTUFBSTtBQUNGLFNBQU0sS0FBSyxxQkFBcUI7QUFDaEMsVUFBTztXQUNBLEdBQUc7QUFDVixVQUFPLEtBQUssNEJBQTZCLEVBQVksUUFBUSxvQkFBb0I7QUFDakYsUUFBSyxZQUFZO0FBQ2pCLFVBQU87OztDQUlYLE1BQU0sT0FBc0I7QUFDMUIsT0FBSyxvQkFBb0I7QUFDekIsTUFBSSxLQUFLLGdCQUFnQjtBQUN2QixpQkFBYyxLQUFLLGVBQWU7QUFDbEMsUUFBSyxpQkFBaUI7O0FBRXhCLE1BQUksS0FBSyxnQkFBZ0I7QUFDdkIsZ0JBQWEsS0FBSyxlQUFlO0FBQ2pDLFFBQUssaUJBQWlCOztBQUV4QixRQUFNLEtBQUssYUFBYTs7Q0FHMUIsU0FBMkI7QUFDekIsU0FBTztHQUNMLFdBQVcsS0FBSyxXQUFXLFFBQVEsS0FBSyxtQkFBbUI7R0FDM0QsYUFBYSxLQUFLO0dBQ2xCLGlCQUFpQixLQUFLO0dBQ3RCLFNBQVMsS0FBSztHQUNmOztDQUdILHVCQUE2QjtBQUMzQixNQUFJLEtBQUssZUFBZ0I7QUFHekIsT0FBSyxpQkFBaUIsa0JBQWtCO0FBQ3RDLFFBQUssV0FBVyxDQUFDLE9BQU8sTUFDdEIsT0FBTyxLQUFLLDhCQUErQixFQUFZLFVBQVUsQ0FDbEU7S0FDQSxzQkFBc0I7O0NBRzNCLE1BQU0sc0JBQXFDO0FBQ3pDLFFBQU0sS0FBSyxrQkFBa0I7QUFDN0IsUUFBTSxLQUFLLFdBQVc7QUFDdEIsT0FBSyxVQUFVOztDQUdqQixNQUFNLG1CQUFrQztFQUN0QyxNQUFNLFNBQVMsSUFBSSxPQUFPO0dBQ3hCLEdBQUcsS0FBSztHQUNSLHlCQUF5QjtHQUN6QixXQUFXO0dBQ1gsNkJBQTZCO0dBQzdCLGtCQUFrQjtHQUNuQixDQUFDO0FBRUYsU0FBTyxHQUFHLFVBQVUsTUFBTTtBQUN4QixVQUFPLEtBQUsscUJBQXFCLEVBQUUsVUFBVTtBQUM3QyxRQUFLLFlBQVk7SUFDakI7QUFDRixTQUFPLEdBQUcsYUFBYTtBQUNyQixPQUFJLENBQUMsS0FBSyxrQkFBbUIsTUFBSyxZQUFZO0lBQzlDO0FBQ0YsU0FBTyxHQUFHLGlCQUFpQixRQUFRO0FBQ2pDLE9BQUksSUFBSSxZQUFZLGtCQUFrQixDQUFDLElBQUksUUFBUztBQUNwRCxRQUFLLG1CQUFtQixJQUFJLFFBQVEsQ0FBQyxPQUFPLE1BQzFDLE9BQU8sS0FBSyx5QkFBMEIsRUFBWSxVQUFVLENBQzdEO0lBQ0Q7QUFFRixNQUFJO0FBQ0YsU0FBTSxPQUFPLFNBQVM7QUFDdEIsU0FBTSxPQUFPLE1BQU0sNEJBQTRCO0FBQy9DLFNBQU0sT0FBTyxNQUFNLDhDQUE4QztBQUNqRSxTQUFNLE9BQU8sTUFBTSxVQUFVLE9BQU8saUJBQWlCLGVBQWUsR0FBRztXQUNoRSxHQUFHO0FBQ1YsVUFBTyxvQkFBb0I7QUFDM0IsU0FBTSxPQUFPLEtBQUssQ0FBQyxZQUFZLEdBQUc7QUFDbEMsU0FBTTs7QUFHUixPQUFLLFNBQVM7QUFDZCxPQUFLLDhCQUFjLElBQUksTUFBTTtBQUM3QixTQUFPLEtBQUssaUJBQWlCLGlCQUFpQjs7Q0FHaEQsYUFBbUI7QUFDakIsTUFBSSxLQUFLLGtCQUFtQjtBQUM1QixNQUFJLEtBQUssZUFBZ0I7QUFFekIsRUFBSyxLQUFLLGFBQWE7QUFDdkIsT0FBSyxXQUFXO0VBQ2hCLE1BQU0sTUFBTSxLQUFLLElBQUksa0JBQWtCLEtBQUssS0FBSyxTQUFTLGVBQWU7RUFDekUsTUFBTSxRQUFRLEtBQUssTUFBTSxLQUFLLFFBQVEsR0FBRyxJQUFJO0FBQzdDLFNBQU8sS0FBSyxtQkFBbUIsTUFBTSxjQUFjLEtBQUssUUFBUSxHQUFHO0FBQ25FLE9BQUssaUJBQWlCLGlCQUFpQjtBQUNyQyxRQUFLLGlCQUFpQjtBQUN0QixRQUFLLHFCQUFxQixDQUFDLE9BQU8sTUFBTTtBQUN0QyxXQUFPLEtBQUssZ0NBQWlDLEVBQVksVUFBVTtBQUNuRSxTQUFLLFlBQVk7S0FDakI7S0FDRCxNQUFNOztDQUdYLE1BQU0sY0FBNkI7RUFDakMsTUFBTSxTQUFTLEtBQUs7QUFDcEIsTUFBSSxDQUFDLE9BQVE7QUFFYixPQUFLLFNBQVM7QUFDZCxTQUFPLG9CQUFvQjtBQUMzQixRQUFNLE9BQU8sS0FBSyxDQUFDLFlBQVksR0FBRzs7Q0FHcEMsTUFBTSxtQkFBbUIsYUFBb0M7RUFDM0QsTUFBTSxVQUFVLEtBQUssTUFBTSxZQUFZO0FBQ3ZDLE1BQUksUUFBUSxPQUFPLFVBQVU7QUFDM0IsUUFBSyxXQUFXLFlBQVksUUFBUSxHQUFHO0FBQ3ZDLFFBQUssV0FBVyxrQkFDWixlQUFlLFFBQVEsR0FBRyxDQUMzQixPQUFPLE1BQU0sT0FBTyxLQUFLLGdDQUFpQyxFQUFZLFVBQVUsQ0FBQztBQUNwRixVQUFPLEtBQUssVUFBVSxRQUFRLEdBQUcsTUFBTSxRQUFRLEdBQUcsdUJBQXVCO0FBQ3pFOztFQUVGLE1BQU0sTUFBTSxNQUFNLFdBQVcsUUFBUSxLQUFLLEVBQUUsSUFBSSxRQUFRLElBQUksQ0FBQztBQUM3RCxNQUFJLENBQUMsS0FBSztBQUNSLFFBQUssV0FBVyxZQUFZLFFBQVEsR0FBRztBQUN2QyxRQUFLLFdBQVcsa0JBQ1osZUFBZSxRQUFRLEdBQUcsQ0FDM0IsT0FBTyxNQUFNLE9BQU8sS0FBSyxnQ0FBaUMsRUFBWSxVQUFVLENBQUM7QUFDcEYsVUFBTyxLQUFLLFVBQVUsUUFBUSxHQUFHLE1BQU0sUUFBUSxHQUFHLGdDQUFnQztBQUNsRjs7QUFHRixPQUFLLFdBQVcsWUFBWSxRQUFRLElBQUksSUFBSTtBQUU1QyxNQUFJLElBQUksYUFBYSxVQUFVO0dBQzdCLE1BQU0sUUFBUSxJQUFJO0FBQ2xCLE9BQUksUUFBUSxPQUFPLFNBQ2pCLE1BQUssV0FBVyxrQkFDWixhQUFhLFFBQVEsSUFBSSxJQUFJLE1BQU0sTUFBMkIsQ0FDL0QsT0FBTyxNQUFNLE9BQU8sS0FBSywrQkFBZ0MsRUFBWSxVQUFVLENBQUM7WUFDMUUsSUFBSSxRQUFRO0FBQ3JCLFNBQUssV0FBVyxrQkFBa0IsaUJBQWlCLFFBQVEsR0FBRztBQUM5RCxTQUFLLFdBQVcsa0JBQ1osZUFBZSxRQUFRLElBQUksSUFBSSxNQUFNLE1BQTJCLENBQ2pFLE9BQU8sTUFBTSxPQUFPLEtBQUssZ0NBQWlDLEVBQVksVUFBVSxDQUFDO1NBRXBGLE1BQUssV0FBVyxrQkFBa0IsbUJBQW1CLFFBQVEsR0FBRzs7QUFHcEUsU0FBTyxLQUFLLFVBQVUsUUFBUSxHQUFHLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxTQUFTOztDQUd6RixNQUFNLFlBQTJCO0VBQy9CLE1BQU0sT0FBTyxNQUFNLFdBQVcsV0FBVyxJQUFJO0FBQzdDLE9BQUssV0FBVyxhQUFhLEtBQUs7QUFDbEMsT0FBSyxrQ0FBa0IsSUFBSSxNQUFNIn0=
|
|
172
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tc3Vic2NyaWJlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4tc3Vic2NyaWJlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogdG9rZW5zX2NoYW5nZWQgTElTVEVOIHN1YnNjcmliZXIuICovXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQ2xpZW50LCB0eXBlIENsaWVudENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzLCB0eXBlIE9wZW5BSUNyZWRlbnRpYWxzIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFFncmlkRGlzcGF0Y2hlckNsYXNzIH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBTdWJzY3JpYmVyU3RhdHVzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwic3Vic2NyaWJlclwiXSk7XG5cbmNvbnN0IFRPS0VOU19DSEFOR0VEID0gXCJ0b2tlbnNfY2hhbmdlZFwiO1xuY29uc3QgUkVDT05DSUxFX0lOVEVSVkFMX01TID0gMTAgKiA2MCAqIDEwMDA7XG5jb25zdCBDT05ORUNUSU9OX1RJTUVPVVRfTVMgPSA1XzAwMDtcbmNvbnN0IEJBQ0tPRkZfQkFTRV9NUyA9IDUwMDtcbmNvbnN0IEJBQ0tPRkZfQ0FQX01TID0gMzBfMDAwO1xuXG50eXBlIFBheWxvYWQgPSB7IG9wOiBcIklOU0VSVFwiIHwgXCJVUERBVEVcIiB8IFwiREVMRVRFXCI7IGlkOiBudW1iZXIgfTtcblxuZXhwb3J0IGNsYXNzIFRva2VuU3Vic2NyaWJlciB7XG4gIGNsaWVudDogQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHJlY29uY2lsZVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICByZWNvbm5lY3RUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgc2h1dGRvd25SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgYXR0ZW1wdCA9IDA7XG4gIGNvbm5lY3RlZEF0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIGxhc3RSZWNvbmNpbGVBdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb25uQ29uZmlnOiBDbGllbnRDb25maWcsXG4gICAgcHVibGljIGRpc3BhdGNoZXI6IFFncmlkRGlzcGF0Y2hlckNsYXNzLFxuICApIHt9XG5cbiAgYXN5bmMgc3RhcnQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5zaHV0ZG93blJlcXVlc3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuZW5zdXJlUmVjb25jaWxlVGltZXIoKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbm5lY3RBbmRSZWNvbmNpbGUoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBzdWJzY3JpYmVyIHN0YXJ0IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX0sIHNjaGVkdWxpbmcgcmV0cnlgKTtcbiAgICAgIHRoaXMucmV0cnlMYXRlcigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zaHV0ZG93blJlcXVlc3RlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMucmVjb25jaWxlVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yZWNvbmNpbGVUaW1lcik7XG4gICAgICB0aGlzLnJlY29uY2lsZVRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVjb25uZWN0VGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY29ubmVjdFRpbWVyKTtcbiAgICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmNsb3NlQ2xpZW50KCk7XG4gIH1cblxuICBzdGF0dXMoKTogU3Vic2NyaWJlclN0YXR1cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbm5lY3RlZDogdGhpcy5jbGllbnQgIT09IG51bGwgJiYgdGhpcy5yZWNvbm5lY3RUaW1lciA9PT0gbnVsbCxcbiAgICAgIGNvbm5lY3RlZEF0OiB0aGlzLmNvbm5lY3RlZEF0LFxuICAgICAgbGFzdFJlY29uY2lsZUF0OiB0aGlzLmxhc3RSZWNvbmNpbGVBdCxcbiAgICAgIGF0dGVtcHQ6IHRoaXMuYXR0ZW1wdCxcbiAgICB9O1xuICB9XG5cbiAgZW5zdXJlUmVjb25jaWxlVGltZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb25jaWxlVGltZXIpIHJldHVybjtcblxuICAgIC8vIExJU1RFTi9OT1RJRlkg64qUIOuBiuq4tCDrj5nslYgg7Jyg7Iuk65CgIOyImCDsnojslrQg7KO86riw7KCB7Jy866GcIERCIOq4sOykgOycvOuhnCDrp57stpjri6QuXG4gICAgdGhpcy5yZWNvbmNpbGVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVjb25jaWxlKCkuY2F0Y2goKGUpID0+XG4gICAgICAgIGxvZ2dlci53YXJuKGBwZXJpb2RpYyByZWNvbmNpbGUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApLFxuICAgICAgKTtcbiAgICB9LCBSRUNPTkNJTEVfSU5URVJWQUxfTVMpO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdEFuZFJlY29uY2lsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3RBbmRMaXN0ZW4oKTtcbiAgICBhd2FpdCB0aGlzLnJlY29uY2lsZSgpO1xuICAgIHRoaXMuYXR0ZW1wdCA9IDA7XG4gIH1cblxuICBhc3luYyBjb25uZWN0QW5kTGlzdGVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbGllbnQoe1xuICAgICAgLi4udGhpcy5jb25uQ29uZmlnLFxuICAgICAgY29ubmVjdGlvblRpbWVvdXRNaWxsaXM6IENPTk5FQ1RJT05fVElNRU9VVF9NUyxcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgIGtlZXBBbGl2ZUluaXRpYWxEZWxheU1pbGxpczogMTBfMDAwLFxuICAgICAgYXBwbGljYXRpb25fbmFtZTogXCJxZ3JpZC1saXN0ZW5lclwiLFxuICAgIH0pO1xuXG4gICAgY2xpZW50Lm9uKFwiZXJyb3JcIiwgKGUpID0+IHtcbiAgICAgIGxvZ2dlci53YXJuKGBzdWJzY3JpYmVyIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIHRoaXMucmV0cnlMYXRlcigpO1xuICAgIH0pO1xuICAgIGNsaWVudC5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuc2h1dGRvd25SZXF1ZXN0ZWQpIHRoaXMucmV0cnlMYXRlcigpO1xuICAgIH0pO1xuICAgIGNsaWVudC5vbihcIm5vdGlmaWNhdGlvblwiLCAobXNnKSA9PiB7XG4gICAgICBpZiAobXNnLmNoYW5uZWwgIT09IFRPS0VOU19DSEFOR0VEIHx8ICFtc2cucGF5bG9hZCkgcmV0dXJuO1xuICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb24obXNnLnBheWxvYWQpLmNhdGNoKChlKSA9PlxuICAgICAgICBsb2dnZXIud2FybihgaGFuZGxlIE5PVElGWSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KCk7XG4gICAgICBhd2FpdCBjbGllbnQucXVlcnkoXCJTRVQgc3RhdGVtZW50X3RpbWVvdXQgPSAwXCIpO1xuICAgICAgYXdhaXQgY2xpZW50LnF1ZXJ5KFwiU0VUIGlkbGVfaW5fdHJhbnNhY3Rpb25fc2Vzc2lvbl90aW1lb3V0ID0gMFwiKTtcbiAgICAgIGF3YWl0IGNsaWVudC5xdWVyeShgTElTVEVOICR7Y2xpZW50LmVzY2FwZUlkZW50aWZpZXIoVE9LRU5TX0NIQU5HRUQpfWApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNsaWVudC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5lbmQoKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMuY29ubmVjdGVkQXQgPSBuZXcgRGF0ZSgpO1xuICAgIGxvZ2dlci5pbmZvKGBzdWJzY3JpYmVkIHRvICR7VE9LRU5TX0NIQU5HRUR9YCk7XG4gIH1cblxuICByZXRyeUxhdGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNodXRkb3duUmVxdWVzdGVkKSByZXR1cm47XG4gICAgaWYgKHRoaXMucmVjb25uZWN0VGltZXIpIHJldHVybjtcblxuICAgIHZvaWQgdGhpcy5jbG9zZUNsaWVudCgpO1xuICAgIHRoaXMuYXR0ZW1wdCArPSAxO1xuICAgIGNvbnN0IGNhcCA9IE1hdGgubWluKEJBQ0tPRkZfQkFTRV9NUyAqIDIgKiogdGhpcy5hdHRlbXB0LCBCQUNLT0ZGX0NBUF9NUyk7XG4gICAgY29uc3QgZGVsYXkgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjYXApO1xuICAgIGxvZ2dlci5pbmZvKGByZWNvbm5lY3RpbmcgaW4gJHtkZWxheX1tcyAoYXR0ZW1wdCAke3RoaXMuYXR0ZW1wdH0pYCk7XG4gICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG51bGw7XG4gICAgICB0aGlzLmNvbm5lY3RBbmRSZWNvbmNpbGUoKS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBsb2dnZXIud2Fybihgc3Vic2NyaWJlciByZWNvbm5lY3QgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICB0aGlzLnJldHJ5TGF0ZXIoKTtcbiAgICAgIH0pO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlQ2xpZW50KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuY2xpZW50O1xuICAgIGlmICghY2xpZW50KSByZXR1cm47XG5cbiAgICB0aGlzLmNsaWVudCA9IG51bGw7XG4gICAgY2xpZW50LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIGF3YWl0IGNsaWVudC5lbmQoKS5jYXRjaCgoKSA9PiB7fSk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVOb3RpZmljYXRpb24ocGF5bG9hZEpzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHBheWxvYWRKc29uKSBhcyBQYXlsb2FkO1xuICAgIGlmIChwYXlsb2FkLm9wID09PSBcIkRFTEVURVwiKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlQ2FjaGUocGF5bG9hZC5pZCk7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICA/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSB3b3JrZXIgcmVtb3ZlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICAvLyBhbnRocm9waWMg7Yag7YGwIOydtOuypO2KuOuKlCDrj5nquLAodm9pZCkg4oCUIHByb3ZpZGVyIOulvCDrqqjrpbTrr4DroZwg66y07ZW07ZWY6rKMIO2VreyDgSDsoJzqsbAg7Iuc64+ELlxuICAgICAgdGhpcy5kaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXI/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpO1xuICAgICAgbG9nZ2VyLmluZm8oYE5PVElGWSAke3BheWxvYWQub3B9IGlkPSR7cGF5bG9hZC5pZH0g4oaSIHJlbW92ZWQgZnJvbSBjYWNoZWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByb3cgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRPbmUoXCJBXCIsIHsgaWQ6IHBheWxvYWQuaWQgfSk7XG4gICAgaWYgKCFyb3cpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5yZW1vdmVDYWNoZShwYXlsb2FkLmlkKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyXG4gICAgICAgID8ub25Ub2tlblJlbW92ZWQocGF5bG9hZC5pZClcbiAgICAgICAgLmNhdGNoKChlKSA9PiBsb2dnZXIud2Fybihgb3BlbmFpIHdvcmtlciByZW1vdmUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIGxvZ2dlci5pbmZvKGBOT1RJRlkgJHtwYXlsb2FkLm9wfSBpZD0ke3BheWxvYWQuaWR9IOKGkiBtaXNzaW5nLCByZW1vdmVkIGZyb20gY2FjaGVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpc3BhdGNoZXIudXBzZXJ0Q2FjaGUocGF5bG9hZC5pZCwgcm93KTtcblxuICAgIGlmIChyb3cucHJvdmlkZXIgPT09IFwib3BlbmFpXCIpIHtcbiAgICAgIGNvbnN0IGNyZWRzID0gcm93LmNyZWRlbnRpYWxzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgaWYgKHBheWxvYWQub3AgPT09IFwiSU5TRVJUXCIpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXJcbiAgICAgICAgICA/Lm9uVG9rZW5BZGRlZChwYXlsb2FkLmlkLCByb3cubmFtZSwgY3JlZHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMpXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiBsb2dnZXIud2Fybihgb3BlbmFpIHdvcmtlciBzcGF3biBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICAgICAgfSBlbHNlIGlmIChyb3cuYWN0aXZlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyPy5vblRva2VuQWN0aXZhdGVkKHBheWxvYWQuaWQpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICAgID8ub25Ub2tlblVwZGF0ZWQocGF5bG9hZC5pZCwgcm93Lm5hbWUsIGNyZWRzIGFzIE9wZW5BSUNyZWRlbnRpYWxzKVxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSB3b3JrZXIgdXBkYXRlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcj8ub25Ub2tlbkRlYWN0aXZhdGVkKHBheWxvYWQuaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocm93LnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKSB7XG4gICAgICAvLyBhbnRocm9waWMg7Yag7YGwIOydtOuypO2KuOuKlCDrj5nquLAodm9pZCkuIHdvcmtlciDqsIAg7JeG6rOgIO2SgChNYXAp66eMIOq0gOumrO2VmOuvgOuhnCDri6jsiJw6XG4gICAgICAvLyAgSU5TRVJUIOKGkiDstpTqsIAsIGFjdGl2ZSDrqbQg6rCx7IugKG9uVG9rZW5VcGRhdGVkIOqwgCBpZGVudGl0eSDrs4Dqsr3rj4Qg7LKY66asKSwgaW5hY3RpdmUg66m0IO2SgOyXkOyEnCDsoJzqsbAuXG4gICAgICAvLyAgKOuzhOuPhCBhY3RpdmF0ZS9kZWFjdGl2YXRlIOy9nOuwseydtCDsl4bslrQgYWN0aXZlIO2GoOq4gOydhCBhZGQvcmVtb3ZlIOuhnCDrp6TtlZEuKVxuICAgICAgY29uc3QgY3JlZHMgPSByb3cuY3JlZGVudGlhbHMgYXMgQW50aHJvcGljQ3JlZGVudGlhbHM7XG4gICAgICBpZiAocGF5bG9hZC5vcCA9PT0gXCJJTlNFUlRcIiAmJiByb3cuYWN0aXZlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuQWRkZWQocGF5bG9hZC5pZCwgcm93Lm5hbWUsIGNyZWRzKTtcbiAgICAgIH0gZWxzZSBpZiAocm93LmFjdGl2ZSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlblVwZGF0ZWQocGF5bG9hZC5pZCwgcm93Lm5hbWUsIGNyZWRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluYWN0aXZlIOuptCBJTlNFUlQg65OgIFVQREFURSDrk6Ag7ZKA7JeQIOuEo+yngCDslYrripTri6QuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oYE5PVElGWSAke3BheWxvYWQub3B9IGlkPSR7cGF5bG9hZC5pZH0gKCR7cm93Lm5hbWV9KSBhY3RpdmU9JHtyb3cuYWN0aXZlfWApO1xuICB9XG5cbiAgYXN5bmMgcmVjb25jaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRBY3RpdmUoXCJBXCIpO1xuICAgIHRoaXMuZGlzcGF0Y2hlci5yZXBsYWNlQ2FjaGUocm93cyk7XG4gICAgLy8gTk9USUZZIOycoOyLpCDrjIDruYQ6IEFudGhyb3BpY0Rpc3BhdGNoZXIg7ZKA64+EIERCIGFjdGl2ZSBhbnRocm9waWMg7Yag7YGwIOq4sOykgOycvOuhnCDsnqzrj5nquLDtmZQuXG4gICAgLy8gKHJvd3Mg64qUIGFjdGl2ZSDrp4wg4oCUIGluYWN0aXZlL+yCreygnOuQnCDthqDtgbDsnYAg7Jes6riwIOyXhuycvOuvgOuhnCByZXBsYWNlVG9rZW5zIOqwgCDtkoDsl5DshJwg7KCc6rGw7ZWc64ukLilcbiAgICBjb25zdCBhbnRocm9waWNSb3dzID0gcm93c1xuICAgICAgLmZpbHRlcigocikgPT4gci5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIilcbiAgICAgIC5tYXAoKHIpID0+ICh7IGlkOiByLmlkLCBuYW1lOiByLm5hbWUsIGNyZWRlbnRpYWxzOiByLmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzIH0pKTtcbiAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ucmVwbGFjZVRva2VucyhhbnRocm9waWNSb3dzKTtcbiAgICB0aGlzLmxhc3RSZWNvbmNpbGVBdCA9IG5ldyBEYXRlKCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBU0EsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLGFBQWEsQ0FBQztBQUVqRCxNQUFNLGlCQUFpQjtBQUN2QixNQUFNLHdCQUF3QixNQUFVO0FBQ3hDLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0saUJBQWlCO0FBSXZCLElBQWEsa0JBQWIsTUFBNkI7Q0FDM0IsU0FBd0I7Q0FDeEIsaUJBQXdDO0NBQ3hDLGlCQUF3QztDQUN4QyxvQkFBb0I7Q0FDcEIsVUFBVTtDQUNWLGNBQTJCO0NBQzNCLGtCQUErQjtDQUUvQixZQUNFLFlBQ0EsWUFDQTtBQUZPLE9BQUEsYUFBQTtBQUNBLE9BQUEsYUFBQTs7Q0FHVCxNQUFNLFFBQTBCO0FBQzlCLE9BQUssb0JBQW9CO0FBQ3pCLE9BQUssc0JBQXNCO0FBRTNCLE1BQUk7QUFDRixTQUFNLEtBQUsscUJBQXFCO0FBQ2hDLFVBQU87V0FDQSxHQUFHO0FBQ1YsVUFBTyxLQUFLLDRCQUE2QixFQUFZLFFBQVEsb0JBQW9CO0FBQ2pGLFFBQUssWUFBWTtB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
|
|
@@ -9,31 +9,36 @@ function buildToolCallSchema(tools) {
|
|
|
9
9
|
}).join("\n");
|
|
10
10
|
return {
|
|
11
11
|
type: "object",
|
|
12
|
+
description: "Use this schema only through StructuredOutput. Do not invoke listed client tools as native Claude Code tools. To request client-side tool execution, set action to tool_call and include toolCalls. Use action answer only when no further client tool result is needed.",
|
|
12
13
|
properties: {
|
|
13
14
|
action: {
|
|
14
15
|
type: "string",
|
|
15
|
-
enum: ["answer", "tool_call"]
|
|
16
|
+
enum: ["answer", "tool_call"],
|
|
17
|
+
description: "Use tool_call to request client-side tool execution through this structured output. Use answer only for a final answer."
|
|
16
18
|
},
|
|
17
19
|
answer: { anyOf: [{ type: "string" }, { type: "null" }] },
|
|
18
|
-
toolCalls: {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
type: "
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
toolCalls: {
|
|
21
|
+
description: "Client-side tool calls requested through structured output. Do not call these tools as native Claude Code tools.",
|
|
22
|
+
anyOf: [{
|
|
23
|
+
type: "array",
|
|
24
|
+
items: {
|
|
25
|
+
type: "object",
|
|
26
|
+
properties: {
|
|
27
|
+
toolName: {
|
|
28
|
+
type: "string",
|
|
29
|
+
enum: tools.map((tool) => tool.name),
|
|
30
|
+
description: `Client-side tool name to request through structured output. Do not call this as a native Claude Code tool.\n${toolDescriptions}`
|
|
31
|
+
},
|
|
32
|
+
args: {
|
|
33
|
+
type: "string",
|
|
34
|
+
description: "Tool arguments as a JSON string for the client-side tool."
|
|
35
|
+
}
|
|
27
36
|
},
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
required: ["toolName", "args"],
|
|
34
|
-
additionalProperties: false
|
|
35
|
-
}
|
|
36
|
-
}, { type: "null" }] }
|
|
37
|
+
required: ["toolName", "args"],
|
|
38
|
+
additionalProperties: false
|
|
39
|
+
}
|
|
40
|
+
}, { type: "null" }]
|
|
41
|
+
}
|
|
37
42
|
},
|
|
38
43
|
required: [
|
|
39
44
|
"action",
|
|
@@ -104,4 +109,4 @@ function applyToolCallEmulation(result, tools, threadCoord) {
|
|
|
104
109
|
//#endregion
|
|
105
110
|
export { applyToolCallEmulation, buildToolCallSchema };
|
|
106
111
|
|
|
107
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1lbXVsYXRpb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3Rvb2wtZW11bGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5pbXBvcnQge1xuICB0eXBlIFFncmlkQ29udGVudCxcbiAgdHlwZSBRZ3JpZFRocmVhZENvb3JkLFxuICB0eXBlIFFncmlkVG9vbCxcbiAgdHlwZSBRdWVyeU91dHB1dCxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwidG9vbC1lbXVsYXRpb25cIl0pO1xuXG50eXBlIFRvb2xDYWxsUmVzcG9uc2UgPSB7XG4gIGFjdGlvbjogXCJhbnN3ZXJcIiB8IFwidG9vbF9jYWxsXCI7XG4gIGFuc3dlcj86IHN0cmluZyB8IG51bGw7XG4gIHRvb2xDYWxscz86IEFycmF5PHsgdG9vbE5hbWU6IHN0cmluZzsgYXJnczogc3RyaW5nIH0+IHwgbnVsbDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvb2xDYWxsU2NoZW1hKHRvb2xzOiBRZ3JpZFRvb2xbXSk6IEpzb25WYWx1ZSB7XG4gIGNvbnN0IHRvb2xEZXNjcmlwdGlvbnMgPSB0b29sc1xuICAgIC5tYXAoKHRvb2wpID0+IHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpTT04uc3RyaW5naWZ5KHRvb2wuaW5wdXRTY2hlbWEpO1xuICAgICAgcmV0dXJuIGAtICR7dG9vbC5uYW1lfTogJHt0b29sLmRlc2NyaXB0aW9uID8/
|
|
112
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1lbXVsYXRpb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3Rvb2wtZW11bGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5cbmltcG9ydCB7IHR5cGUgSnNvblZhbHVlIH0gZnJvbSBcIi4uLy4uL2NvZGV4LXByb3RvY29sL3NlcmRlX2pzb24vSnNvblZhbHVlXCI7XG5pbXBvcnQge1xuICB0eXBlIFFncmlkQ29udGVudCxcbiAgdHlwZSBRZ3JpZFRocmVhZENvb3JkLFxuICB0eXBlIFFncmlkVG9vbCxcbiAgdHlwZSBRdWVyeU91dHB1dCxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwidG9vbC1lbXVsYXRpb25cIl0pO1xuXG50eXBlIFRvb2xDYWxsUmVzcG9uc2UgPSB7XG4gIGFjdGlvbjogXCJhbnN3ZXJcIiB8IFwidG9vbF9jYWxsXCI7XG4gIGFuc3dlcj86IHN0cmluZyB8IG51bGw7XG4gIHRvb2xDYWxscz86IEFycmF5PHsgdG9vbE5hbWU6IHN0cmluZzsgYXJnczogc3RyaW5nIH0+IHwgbnVsbDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvb2xDYWxsU2NoZW1hKHRvb2xzOiBRZ3JpZFRvb2xbXSk6IEpzb25WYWx1ZSB7XG4gIGNvbnN0IHRvb2xEZXNjcmlwdGlvbnMgPSB0b29sc1xuICAgIC5tYXAoKHRvb2wpID0+IHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpTT04uc3RyaW5naWZ5KHRvb2wuaW5wdXRTY2hlbWEpO1xuICAgICAgcmV0dXJuIGAtICR7dG9vbC5uYW1lfTogJHt0b29sLmRlc2NyaXB0aW9uID8/IFwiXCJ9XFxuICBpbnB1dFNjaGVtYTogJHtzY2hlbWF9YDtcbiAgICB9KVxuICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJvYmplY3RcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiVXNlIHRoaXMgc2NoZW1hIG9ubHkgdGhyb3VnaCBTdHJ1Y3R1cmVkT3V0cHV0LiBEbyBub3QgaW52b2tlIGxpc3RlZCBjbGllbnQgdG9vbHMgYXMgbmF0aXZlIENsYXVkZSBDb2RlIHRvb2xzLiBUbyByZXF1ZXN0IGNsaWVudC1zaWRlIHRvb2wgZXhlY3V0aW9uLCBzZXQgYWN0aW9uIHRvIHRvb2xfY2FsbCBhbmQgaW5jbHVkZSB0b29sQ2FsbHMuIFVzZSBhY3Rpb24gYW5zd2VyIG9ubHkgd2hlbiBubyBmdXJ0aGVyIGNsaWVudCB0b29sIHJlc3VsdCBpcyBuZWVkZWQuXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgYWN0aW9uOiB7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGVudW06IFtcImFuc3dlclwiLCBcInRvb2xfY2FsbFwiXSxcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgXCJVc2UgdG9vbF9jYWxsIHRvIHJlcXVlc3QgY2xpZW50LXNpZGUgdG9vbCBleGVjdXRpb24gdGhyb3VnaCB0aGlzIHN0cnVjdHVyZWQgb3V0cHV0LiBVc2UgYW5zd2VyIG9ubHkgZm9yIGEgZmluYWwgYW5zd2VyLlwiLFxuICAgICAgfSxcbiAgICAgIGFuc3dlcjogeyBhbnlPZjogW3sgdHlwZTogXCJzdHJpbmdcIiB9LCB7IHR5cGU6IFwibnVsbFwiIH1dIH0sXG4gICAgICB0b29sQ2FsbHM6IHtcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgXCJDbGllbnQtc2lkZSB0b29sIGNhbGxzIHJlcXVlc3RlZCB0aHJvdWdoIHN0cnVjdHVyZWQgb3V0cHV0LiBEbyBub3QgY2FsbCB0aGVzZSB0b29scyBhcyBuYXRpdmUgQ2xhdWRlIENvZGUgdG9vbHMuXCIsXG4gICAgICAgIGFueU9mOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHRvb2xOYW1lOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgZW51bTogdG9vbHMubWFwKCh0b29sKSA9PiB0b29sLm5hbWUpLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBDbGllbnQtc2lkZSB0b29sIG5hbWUgdG8gcmVxdWVzdCB0aHJvdWdoIHN0cnVjdHVyZWQgb3V0cHV0LiBEbyBub3QgY2FsbCB0aGlzIGFzIGEgbmF0aXZlIENsYXVkZSBDb2RlIHRvb2wuXFxuJHt0b29sRGVzY3JpcHRpb25zfWAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVG9vbCBhcmd1bWVudHMgYXMgYSBKU09OIHN0cmluZyBmb3IgdGhlIGNsaWVudC1zaWRlIHRvb2wuXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IFtcInRvb2xOYW1lXCIsIFwiYXJnc1wiXSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgdHlwZTogXCJudWxsXCIgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZXF1aXJlZDogW1wiYWN0aW9uXCIsIFwiYW5zd2VyXCIsIFwidG9vbENhbGxzXCJdLFxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5VG9vbENhbGxFbXVsYXRpb24oXG4gIHJlc3VsdDogT21pdDxRdWVyeU91dHB1dCwgXCJjb250ZW50XCIgfCBcImZpbmlzaFJlYXNvblwiIHwgXCJydW5Db250ZXh0XCI+LFxuICB0b29scz86IFFncmlkVG9vbFtdLFxuICB0aHJlYWRDb29yZD86IFFncmlkVGhyZWFkQ29vcmQsXG4pOiBRdWVyeU91dHB1dCB7XG4gIC8vIHRocmVhZCDsnqzsgqzsmqkg7KKM7ZGc66W8IHJ1bkNvbnRleHQg66GcIOyLpOyWtCDsmKzrprDri6QgKGF1dG8g66qo65Oc64qUIHJlcXVlc3RMb2dJZCDsl4bsnbQgdGhyZWFkQ29vcmQg66eMKS5cbiAgY29uc3QgcnVuQ29udGV4dCA9IHRocmVhZENvb3JkID8geyB0aHJlYWRDb29yZCB9IDogdW5kZWZpbmVkO1xuXG4gIGlmICghdG9vbHM/Lmxlbmd0aCkge1xuICAgIGNvbnN0IGNvbnRlbnQ6IFFncmlkQ29udGVudFtdID0gW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IHJlc3VsdC50ZXh0IH1dO1xuICAgIHJldHVybiB7IC4uLnJlc3VsdCwgY29udGVudCwgZmluaXNoUmVhc29uOiBcInN0b3BcIiwgcnVuQ29udGV4dCB9O1xuICB9XG5cbiAgbGV0IHBhcnNlZDogVG9vbENhbGxSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHJlc3VsdC50ZXh0KSBhcyBUb29sQ2FsbFJlc3BvbnNlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oYHRvb2wtY2FsbCBlbXVsYXRpb24gcGFyc2UgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gdGV4dDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzdWx0LFxuICAgICAgY29udGVudDogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IHJlc3VsdC50ZXh0IH1dLFxuICAgICAgZmluaXNoUmVhc29uOiBcInN0b3BcIixcbiAgICAgIHJ1bkNvbnRleHQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChwYXJzZWQuYWN0aW9uID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgY29uc3QgdG9vbENhbGxzID0gcGFyc2VkLnRvb2xDYWxscyA/PyBbXTtcbiAgICBjb25zdCBjb250ZW50OiBRZ3JpZENvbnRlbnRbXSA9IHRvb2xDYWxscy5tYXAoKHRvb2xDYWxsKSA9PiB7XG4gICAgICBpZiAoIXRvb2xzLnNvbWUoKHRvb2wpID0+IHRvb2wubmFtZSA9PT0gdG9vbENhbGwudG9vbE5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBlbXVsYXRlZCB0b29sOiAke3Rvb2xDYWxsLnRvb2xOYW1lfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcInRvb2wtY2FsbFwiLFxuICAgICAgICB0b29sQ2FsbElkOiBgY2FsbF8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gLFxuICAgICAgICB0b29sTmFtZTogdG9vbENhbGwudG9vbE5hbWUsXG4gICAgICAgIGlucHV0OiB0b29sQ2FsbC5hcmdzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4geyAuLi5yZXN1bHQsIGNvbnRlbnQsIGZpbmlzaFJlYXNvbjogXCJ0b29sLWNhbGxzXCIsIHJ1bkNvbnRleHQgfTtcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBwYXJzZWQuYW5zd2VyID8/IHJlc3VsdC50ZXh0O1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3VsdCxcbiAgICB0ZXh0LFxuICAgIGNvbnRlbnQ6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0IH1dLFxuICAgIGZpbmlzaFJlYXNvbjogXCJzdG9wXCIsXG4gICAgcnVuQ29udGV4dCxcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBVUEsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLGlCQUFpQixDQUFDO0FBUXJELFNBQWdCLG9CQUFvQixPQUErQjtDQUNqRSxNQUFNLG1CQUFtQixNQUN0QixLQUFLLFNBQVM7RUFDYixNQUFNLFNBQVMsS0FBSyxVQUFVLEtBQUssWUFBWTtBQUMvQyxTQUFPLEtBQUssS0FBSyxLQUFLLElBQUksS0FBSyxlQUFlLEdBQUcsbUJBQW1CO0dBQ3BFLENBQ0QsS0FBSyxLQUFLO0FBRWIsUUFBTztFQUNMLE1BQU07RUFDTixhQUNFO0VBQ0YsWUFBWTtHQUNWLFFBQVE7SUFDTixNQUFNO0lBQ04sTUFBTSxDQUFDLFVBQVUsWUFBWTtJQUM3QixhQUNFO0lBQ0g7R0FDRCxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxVQUFVLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQyxFQUFFO0dBQ3pELFdBQVc7SUFDVCxhQUNFO0lBQ0YsT0FBTyxDQUNMO0tBQ0UsTUFBTTtLQUNOLE9BQU87TUFDTCxNQUFNO01BQ04sWUFBWTtPQUNWLFVBQVU7UUFDUixNQUFNO1FBQ04sTUFBTSxNQUFNLEtBQUssU0FBUyxLQUFLLEtBQUs7UUFDcEMsYUFBYSwrR0FBK0c7UUFDN0g7T0FDRCxNQUFNO1FBQ0osTUFBTTtRQUNOLGFBQWE7UUFDZDtPQUNGO01BQ0QsVUFBVSxDQUFDLFlBQVksT0FBTztNQUM5QixzQkFBc0I7TUFDdkI7S0FDRixFQUNELEVBQUUsTUFBTSxRQUFRLENBQ2pCO0lBQ0Y7R0FDRjtFQUNELFVBQVU7R0FBQztHQUFVO0dBQVU7R0FBWTtFQUMzQyxzQkFBc0I7RUFDdkI7O0FBR0gsU0FBZ0IsdUJBQ2QsUUFDQSxPQUNBLGFBQ2E7Q0FFYixNQUFNLGFBQWEsY0FBYyxFQUFFLGFBQWEsR0FBRztBQUVuRCxLQUFJLENBQUMsT0FBTyxRQUFRO0VBQ2xCLE1BQU0sVUFBMEIsQ0FBQztHQUFFLE1BQU07R0FBUSxNQUFNLE9BQU87R0FBTSxDQUFDO0FBQ3JFLFNBQU87R0FBRSxHQUFHO0dBQVE7R0FBUyxjQUFjO0dBQVE7R0FBWTs7Q0FHakUsSUFBSTtBQUNKLEtBQUk7QUFDRixXQUFTLEtBQUssTUFBTSxPQUFPLEtBQUs7VUFDekIsR0FBRztBQUNWLFNBQU8sS0FBSywyREFBNEQsRUFBWSxVQUFVO0FBQzlGLFNBQU87R0FDTCxHQUFHO0dBQ0gsU0FBUyxDQUFDO0lBQUUsTUFBTTtJQUFRLE1BQU0sT0FBTztJQUFNLENBQUM7R0FDOUMsY0FBYztHQUNkO0dBQ0Q7O0FBR0gsS0FBSSxPQUFPLFdBQVcsYUFBYTtFQUVqQyxNQUFNLFdBRFksT0FBTyxhQUFhLEVBQUUsRUFDRSxLQUFLLGFBQWE7QUFDMUQsT0FBSSxDQUFDLE1BQU0sTUFBTSxTQUFTLEtBQUssU0FBUyxTQUFTLFNBQVMsQ0FDeEQsT0FBTSxJQUFJLE1BQU0sMEJBQTBCLFNBQVMsV0FBVztBQUdoRSxVQUFPO0lBQ0wsTUFBTTtJQUNOLFlBQVksUUFBUSxLQUFLLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRztJQUMzRCxVQUFVLFNBQVM7SUFDbkIsT0FBTyxTQUFTO0lBQ2pCO0lBQ0Q7QUFDRixTQUFPO0dBQUUsR0FBRztHQUFRO0dBQVMsY0FBYztHQUFjO0dBQVk7O0NBR3ZFLE1BQU0sT0FBTyxPQUFPLFVBQVUsT0FBTztBQUNyQyxRQUFPO0VBQ0wsR0FBRztFQUNIO0VBQ0EsU0FBUyxDQUFDO0dBQUUsTUFBTTtHQUFRO0dBQU0sQ0FBQztFQUNqQyxjQUFjO0VBQ2Q7RUFDRCJ9
|