@dbx-tools/model 0.9.177 → 0.9.179
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/README.md +4 -0
- package/index.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/src/_ranking.js +29 -1
- package/lib/src/model-catalog.d.ts +2 -0
- package/lib/src/model-catalog.js +17 -8
- package/lib/src/resolve.js +7 -1
- package/lib/src/selection.js +5 -1
- package/package.json +7 -7
- package/src/_ranking.ts +32 -1
- package/src/model-catalog.ts +26 -8
- package/src/resolve.ts +11 -0
- package/src/selection.ts +4 -0
package/README.md
CHANGED
|
@@ -45,6 +45,9 @@ The package:
|
|
|
45
45
|
accidentally escalating to a larger model.
|
|
46
46
|
- Supports `requiresTools` filtering so callers select only
|
|
47
47
|
endpoints verified for a complete function-call and result-replay round-trip.
|
|
48
|
+
- Supports structured-output filtering and quality, speed, or cost optimization;
|
|
49
|
+
speed-sensitive selection prefers non-reasoning endpoints before comparing
|
|
50
|
+
live profile speed scores.
|
|
48
51
|
- Caches enriched catalogues per workspace host through AppKit cache utilities,
|
|
49
52
|
and re-lists once on a resolve miss so a newly deployed model still resolves.
|
|
50
53
|
- Builds the invocations URL and mints per-request auth headers for callers that
|
|
@@ -56,6 +59,7 @@ The package:
|
|
|
56
59
|
while committed fallbacks keep refreshes and runtime startup offline-safe.
|
|
57
60
|
- Provides a small static fallback floor for local tools and degraded workspace
|
|
58
61
|
access.
|
|
62
|
+
|
|
59
63
|
## Use with AppKit Model Serving
|
|
60
64
|
|
|
61
65
|
Use native AppKit's Model Serving plugin when you already know the endpoint
|
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/model";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.179";
|
|
7
7
|
export * as bindings from "./src/bindings.ts";
|
|
8
8
|
export * from "./src/bindings.ts";
|
|
9
9
|
export * as classes from "./src/classes.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/model";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.179";
|
|
3
3
|
export * as bindings from "./src/bindings.ts";
|
|
4
4
|
export * from "./src/bindings.ts";
|
|
5
5
|
export * as classes from "./src/classes.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/model";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.179";
|
|
6
6
|
export * as bindings from "./src/bindings.js";
|
|
7
7
|
export * from "./src/bindings.js";
|
|
8
8
|
export * as classes from "./src/classes.js";
|
|
@@ -33,4 +33,4 @@ export { ReasoningLevel, REASONING_LEVELS, parseReasoning, parseReasoningLevels,
|
|
|
33
33
|
export { rankModelIdLive, searchModels, selectModel } from "./src/resolve.js";
|
|
34
34
|
export { COMMITTED_RETIRED_MODELS, RETIRED_MODELS_GENERATED_AT, replaceRetiredModelNames, retiredModelNames, modelStatusFor } from "./src/retirement.js";
|
|
35
35
|
export { lookupModels, rankModelId, resolveModel } from "./src/selection.js";
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLG9CQUFvQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pKLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhaLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTVHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNPLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSw2QkFBNkIsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RVLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyTixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLHFDQUFxQyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckwsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hYLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2UyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekosT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTc3XCI7XG5leHBvcnQgKiBhcyBiaW5kaW5ncyBmcm9tIFwiLi9zcmMvYmluZGluZ3MudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9iaW5kaW5ncy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NlcyBmcm9tIFwiLi9zcmMvY2xhc3Nlcy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NpZnkgZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgKiBhcyBmYWxsYmFjayBmcm9tIFwiLi9zcmMvZmFsbGJhY2sudHNcIjtcbmV4cG9ydCAqIGFzIGludm9rZSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgKiBhcyBtZXRhZGF0YUNhY2hlIGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jYWNoZS50c1wiO1xuZXhwb3J0ICogYXMgbWV0YWRhdGFDb250cmFjdCBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY29udHJhY3QudHNcIjtcbmV4cG9ydCAqIGFzIG1ldGFkYXRhIGZyb20gXCIuL3NyYy9tZXRhZGF0YS50c1wiO1xuZXhwb3J0ICogYXMgbW9kZWxDYXRhbG9nIGZyb20gXCIuL3NyYy9tb2RlbC1jYXRhbG9nLnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbENsaWVudCBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgKiBhcyBwb2xpY3kgZnJvbSBcIi4vc3JjL3BvbGljeS50c1wiO1xuZXhwb3J0ICogYXMgcmVhc29uaW5nVHJhbnNsYXRpb24gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgcmVzb2x2ZSBmcm9tIFwiLi9zcmMvcmVzb2x2ZS50c1wiO1xuZXhwb3J0ICogYXMgcmV0aXJlbWVudCBmcm9tIFwiLi9zcmMvcmV0aXJlbWVudC50c1wiO1xuZXhwb3J0ICogYXMgc2VsZWN0aW9uIGZyb20gXCIuL3NyYy9zZWxlY3Rpb24udHNcIjtcbmV4cG9ydCB7IENIQVRfQ0xBU1NfT1JERVIsIE1PREVMX0NMQVNTX09SREVSLCBpc0NoYXRDbGFzcywgcGFyc2VNb2RlbENsYXNzLCBjbGFzc2VzQXRPckJlbG93IH0gZnJvbSBcIi4vc3JjL2NsYXNzZXMudHNcIjtcbmV4cG9ydCB7IHN1cHBvcnRzVG9vbHNCeUZhbWlseSwgZW5kcG9pbnRDYXBhYmlsaXRpZXMsIHZlcnNpb25UdXBsZSwgY29tcGFyZVZlcnNpb25UdXBsZXMsIGNsYXNzaWZ5QnlGYW1pbHksIGNsYXNzaWZ5RW5kcG9pbnRzIH0gZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgeyBtb2RlbHNGb3JDbGFzcywgbW9kZWxGb3JDbGFzcywgRkFMTEJBQ0tfTU9ERUxfSURTIH0gZnJvbSBcIi4vc3JjL2ZhbGxiYWNrLnRzXCI7XG5leHBvcnQgeyBJTlZPQ0FUSU9OU19TVUZGSVgsIFNFUlZJTkdfRU5EUE9JTlRTX1BBVEgsIFJFU1BPTlNFU19QQVRILCBPUEVOX1JFU1BPTlNFU19QQVRILCBDSEFUX0NPTVBMRVRJT05TX1BBVEgsIEFJX0dBVEVXQVlfQ09ERVhfUkVTUE9OU0VTX1BBVEgsIEFOVEhST1BJQ19CQVNFX1BBVEgsIEFOVEhST1BJQ19NRVNTQUdFU19QQVRILCBzZXJ2aW5nRW5kcG9pbnRzVXJsLCBpbnZvY2F0aW9uc1VybCwgcmVzcG9uc2VzVXJsLCBvcGVuUmVzcG9uc2VzVXJsLCBjaGF0Q29tcGxldGlvbnNVcmwsIGFpR2F0ZXdheUNvZGV4UmVzcG9uc2VzVXJsLCBhbnRocm9waWNNZXNzYWdlc1VybCwgYW50aHJvcGljQmFzZVVybCwgcmVzcG9uc2VzVXBzdHJlYW1VcmwsIGF1dGhIZWFkZXJzIH0gZnJvbSBcIi4vc3JjL2ludm9rZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRoZW50aWNhdGluZ0NsaWVudExpa2UgfSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgeyBjcmVhdGVNZXRhZGF0YUNhY2hlLCBtZXJnZVByZWZlckZyZXNoTGlzdCwgbWVyZ2VQcmVmZXJGcmVzaFJlY29yZCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jYWNoZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBNZXRhZGF0YUNhY2hlT3B0aW9ucywgTWV0YWRhdGFDYWNoZU1lcmdlSW5wdXQsIE1ldGFkYXRhQ2FjaGUgfSBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY2FjaGUudHNcIjtcbmV4cG9ydCB7IE1PREVMX01FVEFEQVRBX1RUTF9NUywgUkVUSVJFRF9NT0RFTFNfVVJMLCBPUEVOQUlfUkVTUE9OU0VTX01PREVMU19VUkwsIFdFQl9TRUFSQ0hfTU9ERUxTX1VSTCwgTU9ERUxfUkFURV9MSU1JVFNfVVJMLCBRVUVSWV9SRUFTT05fTU9ERUxTX1VSTCwgTU9ERUxTX0RFVl9BUElfVVJMLCBNT0RFTFBBUkFNU19ERVZfTU9ERUxTX1VSTCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jb250cmFjdC50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXRpcmVkTW9kZWxzU25hcHNob3QsIE1vZGVsQ2FwYWJpbGl0eUNhdGFsb2d1ZSwgTW9kZWxDYXBhYmlsaXRpZXNTbmFwc2hvdCwgTW9kZWxSYXRlTGltaXRDYXRhbG9ndWUsIE1vZGVsUmF0ZUxpbWl0c1NuYXBzaG90LCBSZWFzb25pbmdNb2RlbHNTbmFwc2hvdCwgTW9kZWxzRGV2Q2FwYWJpbGl0eUNhdGFsb2d1ZSwgTW9kZWxzRGV2U25hcHNob3QsIE1vZGVsUGFyYW1zQ2F0YWxvZ3VlLCBNb2RlbFBhcmFtc1NuYXBzaG90IH0gZnJvbSBcIi4vc3JjL21ldGFkYXRhLWNvbnRyYWN0LnRzXCI7XG5leHBvcnQgeyByZWZyZXNoTW9kZWxNZXRhZGF0YSwgaHlkcmF0ZU1vZGVsTWV0YWRhdGEsIHJlYXNvbmluZ01vZGVsQ2F0YWxvZ3VlLCBsZWFybmVkUmVhc29uaW5nQ2F0YWxvZ3VlLCByZW1lbWJlclJlYXNvbmluZ0xldmVscywgbGVhcm5SZWFzb25pbmdMZXZlbHNGcm9tRXJyb3IsIG1vZGVsQ2FwYWJpbGl0aWVzRm9yLCBtb2RlbFRlbXBlcmF0dXJlU3VwcG9ydEZvciwgbW9kZWxSYXRlTGltaXRzRm9yLCBtb2RlbFJlYXNvbmluZ0xldmVsc0ZvciwgbW9kZWxNZXRhZGF0YUZvciwgbW9kZWxNZXRhZGF0YUdlbmVyYXRlZEF0IH0gZnJvbSBcIi4vc3JjL21ldGFkYXRhLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX01PREVMX0NBQ0hFX1RUTF9NUywgREVGQVVMVF9GVVpaWV9USFJFU0hPTEQsIGxpc3RTZXJ2aW5nRW5kcG9pbnRzLCBsaXN0U2VydmluZ0VuZHBvaW50c1VuY2FjaGVkLCBjbGVhclNlcnZpbmdFbmRwb2ludHNDYWNoZSwgc2VhcmNoU2VydmluZ0VuZHBvaW50cywgcmVzb2x2ZU1vZGVsSWQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2F0YWxvZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBXb3Jrc3BhY2VDbGllbnRMaWtlLCBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2F0YWxvZy50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9NT0RFTF9DTElFTlRfQ0FDSEVfVFRMX01TLCBjcmVhdGVNb2RlbENsaWVudCwgbGlzdFByb2ZpbGVzLCBjcmVhdGVNb2RlbENsaWVudFdpdGhEYXRhYnJpY2tzQ2xpZW50LCBjcmVhdGVNb2RlbENsaWVudFdpdGhEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsQXV0aE9wdGlvbnMsIE1vZGVsQ2xpZW50T3B0aW9ucywgTW9kZWxDbGllbnRTdGF0dXMsIE1vZGVsUHJvdG9jb2wsIE1vZGVsUm91dGVJbnB1dCwgTW9kZWxSb3V0ZSwgTW9kZWxDbGllbnQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgeyBNb2RlbEZhbWlseSwgbW9kZWxGYW1pbHksIG1vZGVsRmFtaWx5UmFuaywgbW9kZWxTZWFyY2hRdWVyeSwgaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2gsIGlzRm91bmRhdGlvbk1vZGVsSWRlbnRpdHksIG1vZGVsU2VydmljZU5hbWUsIHN5c3RlbU1vZGVsU2VydmljZSwgcHJlZmVyc1N5c3RlbU1vZGVsU2VydmljZSwgaXNPcGVuV2VpZ2h0c0dwdCwgaXNPcGVuV2VpZ2h0c01vZGVsLCBtb2RlbFJlYXNvbmluZ0VmZm9ydHMsIG1vZGVsU3VwcG9ydHNUb29scywgZW5kcG9pbnRTdXBwb3J0c1Rvb2xzLCBtb2RlbFNlcnZpbmdBcGksIGNoYXRUb29sUmVhc29uaW5nRWZmb3J0LCBtb2RlbFNlcnZpY2VOYW1lcyB9IGZyb20gXCIuL3NyYy9wb2xpY3kudHNcIjtcbmV4cG9ydCB7IFJlYXNvbmluZ0xldmVsLCBSRUFTT05JTkdfTEVWRUxTLCBwYXJzZVJlYXNvbmluZywgcGFyc2VSZWFzb25pbmdMZXZlbHMsIGRvY3VtZW50ZWRSZWFzb25pbmdMZXZlbHMsIGRlZmF1bHRSZWFzb25pbmdMZXZlbHMsIHJlYXNvbmluZ0xldmVsc0ZvciwgZm9ybWF0UmVhc29uaW5nLCByZW1hcFJlYXNvbmluZywgYWRhcHRSZXF1ZXN0UmVhc29uaW5nLCBub3JtYWxpemVSZWFzb25pbmdUb2tlbiwgdW5pcXVlUmVhc29uaW5nTGV2ZWxzIH0gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZGFwdGVkUmVxdWVzdFJlYXNvbmluZyB9IGZyb20gXCIuL3NyYy9yZWFzb25pbmctdHJhbnNsYXRpb24udHNcIjtcbmV4cG9ydCB7IHJhbmtNb2RlbElkTGl2ZSwgc2VhcmNoTW9kZWxzLCBzZWxlY3RNb2RlbCB9IGZyb20gXCIuL3NyYy9yZXNvbHZlLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNlbGVjdE1vZGVsSW5wdXQsIFNlYXJjaE1vZGVsc0lucHV0IH0gZnJvbSBcIi4vc3JjL3Jlc29sdmUudHNcIjtcbmV4cG9ydCB7IENPTU1JVFRFRF9SRVRJUkVEX01PREVMUywgUkVUSVJFRF9NT0RFTFNfR0VORVJBVEVEX0FULCByZXBsYWNlUmV0aXJlZE1vZGVsTmFtZXMsIHJldGlyZWRNb2RlbE5hbWVzLCBtb2RlbFN0YXR1c0ZvciB9IGZyb20gXCIuL3NyYy9yZXRpcmVtZW50LnRzXCI7XG5leHBvcnQgeyBsb29rdXBNb2RlbHMsIHJhbmtNb2RlbElkLCByZXNvbHZlTW9kZWwgfSBmcm9tIFwiLi9zcmMvc2VsZWN0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zZWxlY3Rpb24udHNcIjtcbiJdfQ==
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLG9CQUFvQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pKLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSwrQkFBK0IsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhaLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTVHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSwyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTNPLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSw2QkFBNkIsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RVLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSw0QkFBNEIsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyTixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLHFDQUFxQyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckwsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hYLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV2UyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekosT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTc5XCI7XG5leHBvcnQgKiBhcyBiaW5kaW5ncyBmcm9tIFwiLi9zcmMvYmluZGluZ3MudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9iaW5kaW5ncy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NlcyBmcm9tIFwiLi9zcmMvY2xhc3Nlcy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NpZnkgZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgKiBhcyBmYWxsYmFjayBmcm9tIFwiLi9zcmMvZmFsbGJhY2sudHNcIjtcbmV4cG9ydCAqIGFzIGludm9rZSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgKiBhcyBtZXRhZGF0YUNhY2hlIGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jYWNoZS50c1wiO1xuZXhwb3J0ICogYXMgbWV0YWRhdGFDb250cmFjdCBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY29udHJhY3QudHNcIjtcbmV4cG9ydCAqIGFzIG1ldGFkYXRhIGZyb20gXCIuL3NyYy9tZXRhZGF0YS50c1wiO1xuZXhwb3J0ICogYXMgbW9kZWxDYXRhbG9nIGZyb20gXCIuL3NyYy9tb2RlbC1jYXRhbG9nLnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbENsaWVudCBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgKiBhcyBwb2xpY3kgZnJvbSBcIi4vc3JjL3BvbGljeS50c1wiO1xuZXhwb3J0ICogYXMgcmVhc29uaW5nVHJhbnNsYXRpb24gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgcmVzb2x2ZSBmcm9tIFwiLi9zcmMvcmVzb2x2ZS50c1wiO1xuZXhwb3J0ICogYXMgcmV0aXJlbWVudCBmcm9tIFwiLi9zcmMvcmV0aXJlbWVudC50c1wiO1xuZXhwb3J0ICogYXMgc2VsZWN0aW9uIGZyb20gXCIuL3NyYy9zZWxlY3Rpb24udHNcIjtcbmV4cG9ydCB7IENIQVRfQ0xBU1NfT1JERVIsIE1PREVMX0NMQVNTX09SREVSLCBpc0NoYXRDbGFzcywgcGFyc2VNb2RlbENsYXNzLCBjbGFzc2VzQXRPckJlbG93IH0gZnJvbSBcIi4vc3JjL2NsYXNzZXMudHNcIjtcbmV4cG9ydCB7IHN1cHBvcnRzVG9vbHNCeUZhbWlseSwgZW5kcG9pbnRDYXBhYmlsaXRpZXMsIHZlcnNpb25UdXBsZSwgY29tcGFyZVZlcnNpb25UdXBsZXMsIGNsYXNzaWZ5QnlGYW1pbHksIGNsYXNzaWZ5RW5kcG9pbnRzIH0gZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgeyBtb2RlbHNGb3JDbGFzcywgbW9kZWxGb3JDbGFzcywgRkFMTEJBQ0tfTU9ERUxfSURTIH0gZnJvbSBcIi4vc3JjL2ZhbGxiYWNrLnRzXCI7XG5leHBvcnQgeyBJTlZPQ0FUSU9OU19TVUZGSVgsIFNFUlZJTkdfRU5EUE9JTlRTX1BBVEgsIFJFU1BPTlNFU19QQVRILCBPUEVOX1JFU1BPTlNFU19QQVRILCBDSEFUX0NPTVBMRVRJT05TX1BBVEgsIEFJX0dBVEVXQVlfQ09ERVhfUkVTUE9OU0VTX1BBVEgsIEFOVEhST1BJQ19CQVNFX1BBVEgsIEFOVEhST1BJQ19NRVNTQUdFU19QQVRILCBzZXJ2aW5nRW5kcG9pbnRzVXJsLCBpbnZvY2F0aW9uc1VybCwgcmVzcG9uc2VzVXJsLCBvcGVuUmVzcG9uc2VzVXJsLCBjaGF0Q29tcGxldGlvbnNVcmwsIGFpR2F0ZXdheUNvZGV4UmVzcG9uc2VzVXJsLCBhbnRocm9waWNNZXNzYWdlc1VybCwgYW50aHJvcGljQmFzZVVybCwgcmVzcG9uc2VzVXBzdHJlYW1VcmwsIGF1dGhIZWFkZXJzIH0gZnJvbSBcIi4vc3JjL2ludm9rZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdXRoZW50aWNhdGluZ0NsaWVudExpa2UgfSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgeyBjcmVhdGVNZXRhZGF0YUNhY2hlLCBtZXJnZVByZWZlckZyZXNoTGlzdCwgbWVyZ2VQcmVmZXJGcmVzaFJlY29yZCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jYWNoZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBNZXRhZGF0YUNhY2hlT3B0aW9ucywgTWV0YWRhdGFDYWNoZU1lcmdlSW5wdXQsIE1ldGFkYXRhQ2FjaGUgfSBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY2FjaGUudHNcIjtcbmV4cG9ydCB7IE1PREVMX01FVEFEQVRBX1RUTF9NUywgUkVUSVJFRF9NT0RFTFNfVVJMLCBPUEVOQUlfUkVTUE9OU0VTX01PREVMU19VUkwsIFdFQl9TRUFSQ0hfTU9ERUxTX1VSTCwgTU9ERUxfUkFURV9MSU1JVFNfVVJMLCBRVUVSWV9SRUFTT05fTU9ERUxTX1VSTCwgTU9ERUxTX0RFVl9BUElfVVJMLCBNT0RFTFBBUkFNU19ERVZfTU9ERUxTX1VSTCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS1jb250cmFjdC50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZXRpcmVkTW9kZWxzU25hcHNob3QsIE1vZGVsQ2FwYWJpbGl0eUNhdGFsb2d1ZSwgTW9kZWxDYXBhYmlsaXRpZXNTbmFwc2hvdCwgTW9kZWxSYXRlTGltaXRDYXRhbG9ndWUsIE1vZGVsUmF0ZUxpbWl0c1NuYXBzaG90LCBSZWFzb25pbmdNb2RlbHNTbmFwc2hvdCwgTW9kZWxzRGV2Q2FwYWJpbGl0eUNhdGFsb2d1ZSwgTW9kZWxzRGV2U25hcHNob3QsIE1vZGVsUGFyYW1zQ2F0YWxvZ3VlLCBNb2RlbFBhcmFtc1NuYXBzaG90IH0gZnJvbSBcIi4vc3JjL21ldGFkYXRhLWNvbnRyYWN0LnRzXCI7XG5leHBvcnQgeyByZWZyZXNoTW9kZWxNZXRhZGF0YSwgaHlkcmF0ZU1vZGVsTWV0YWRhdGEsIHJlYXNvbmluZ01vZGVsQ2F0YWxvZ3VlLCBsZWFybmVkUmVhc29uaW5nQ2F0YWxvZ3VlLCByZW1lbWJlclJlYXNvbmluZ0xldmVscywgbGVhcm5SZWFzb25pbmdMZXZlbHNGcm9tRXJyb3IsIG1vZGVsQ2FwYWJpbGl0aWVzRm9yLCBtb2RlbFRlbXBlcmF0dXJlU3VwcG9ydEZvciwgbW9kZWxSYXRlTGltaXRzRm9yLCBtb2RlbFJlYXNvbmluZ0xldmVsc0ZvciwgbW9kZWxNZXRhZGF0YUZvciwgbW9kZWxNZXRhZGF0YUdlbmVyYXRlZEF0IH0gZnJvbSBcIi4vc3JjL21ldGFkYXRhLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX01PREVMX0NBQ0hFX1RUTF9NUywgREVGQVVMVF9GVVpaWV9USFJFU0hPTEQsIGxpc3RTZXJ2aW5nRW5kcG9pbnRzLCBsaXN0U2VydmluZ0VuZHBvaW50c1VuY2FjaGVkLCBjbGVhclNlcnZpbmdFbmRwb2ludHNDYWNoZSwgc2VhcmNoU2VydmluZ0VuZHBvaW50cywgcmVzb2x2ZU1vZGVsSWQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2F0YWxvZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBXb3Jrc3BhY2VDbGllbnRMaWtlLCBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2F0YWxvZy50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9NT0RFTF9DTElFTlRfQ0FDSEVfVFRMX01TLCBjcmVhdGVNb2RlbENsaWVudCwgbGlzdFByb2ZpbGVzLCBjcmVhdGVNb2RlbENsaWVudFdpdGhEYXRhYnJpY2tzQ2xpZW50LCBjcmVhdGVNb2RlbENsaWVudFdpdGhEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsQXV0aE9wdGlvbnMsIE1vZGVsQ2xpZW50T3B0aW9ucywgTW9kZWxDbGllbnRTdGF0dXMsIE1vZGVsUHJvdG9jb2wsIE1vZGVsUm91dGVJbnB1dCwgTW9kZWxSb3V0ZSwgTW9kZWxDbGllbnQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgeyBNb2RlbEZhbWlseSwgbW9kZWxGYW1pbHksIG1vZGVsRmFtaWx5UmFuaywgbW9kZWxTZWFyY2hRdWVyeSwgaW5oZXJpdHNOYXRpdmVXZWJTZWFyY2gsIGlzRm91bmRhdGlvbk1vZGVsSWRlbnRpdHksIG1vZGVsU2VydmljZU5hbWUsIHN5c3RlbU1vZGVsU2VydmljZSwgcHJlZmVyc1N5c3RlbU1vZGVsU2VydmljZSwgaXNPcGVuV2VpZ2h0c0dwdCwgaXNPcGVuV2VpZ2h0c01vZGVsLCBtb2RlbFJlYXNvbmluZ0VmZm9ydHMsIG1vZGVsU3VwcG9ydHNUb29scywgZW5kcG9pbnRTdXBwb3J0c1Rvb2xzLCBtb2RlbFNlcnZpbmdBcGksIGNoYXRUb29sUmVhc29uaW5nRWZmb3J0LCBtb2RlbFNlcnZpY2VOYW1lcyB9IGZyb20gXCIuL3NyYy9wb2xpY3kudHNcIjtcbmV4cG9ydCB7IFJlYXNvbmluZ0xldmVsLCBSRUFTT05JTkdfTEVWRUxTLCBwYXJzZVJlYXNvbmluZywgcGFyc2VSZWFzb25pbmdMZXZlbHMsIGRvY3VtZW50ZWRSZWFzb25pbmdMZXZlbHMsIGRlZmF1bHRSZWFzb25pbmdMZXZlbHMsIHJlYXNvbmluZ0xldmVsc0ZvciwgZm9ybWF0UmVhc29uaW5nLCByZW1hcFJlYXNvbmluZywgYWRhcHRSZXF1ZXN0UmVhc29uaW5nLCBub3JtYWxpemVSZWFzb25pbmdUb2tlbiwgdW5pcXVlUmVhc29uaW5nTGV2ZWxzIH0gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZGFwdGVkUmVxdWVzdFJlYXNvbmluZyB9IGZyb20gXCIuL3NyYy9yZWFzb25pbmctdHJhbnNsYXRpb24udHNcIjtcbmV4cG9ydCB7IHJhbmtNb2RlbElkTGl2ZSwgc2VhcmNoTW9kZWxzLCBzZWxlY3RNb2RlbCB9IGZyb20gXCIuL3NyYy9yZXNvbHZlLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNlbGVjdE1vZGVsSW5wdXQsIFNlYXJjaE1vZGVsc0lucHV0IH0gZnJvbSBcIi4vc3JjL3Jlc29sdmUudHNcIjtcbmV4cG9ydCB7IENPTU1JVFRFRF9SRVRJUkVEX01PREVMUywgUkVUSVJFRF9NT0RFTFNfR0VORVJBVEVEX0FULCByZXBsYWNlUmV0aXJlZE1vZGVsTmFtZXMsIHJldGlyZWRNb2RlbE5hbWVzLCBtb2RlbFN0YXR1c0ZvciB9IGZyb20gXCIuL3NyYy9yZXRpcmVtZW50LnRzXCI7XG5leHBvcnQgeyBsb29rdXBNb2RlbHMsIHJhbmtNb2RlbElkLCByZXNvbHZlTW9kZWwgfSBmcm9tIFwiLi9zcmMvc2VsZWN0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zZWxlY3Rpb24udHNcIjtcbiJdfQ==
|
package/lib/src/_ranking.js
CHANGED
|
@@ -41,6 +41,8 @@ export function rankEndpoints(endpoints, query = {}, options = {}) {
|
|
|
41
41
|
const capabilities = endpointCapabilities(endpoint);
|
|
42
42
|
if (!capabilities.chat || (query.requiresTools && !capabilities.tools))
|
|
43
43
|
continue;
|
|
44
|
+
if (query.requiresStructuredOutput && !endpoint.supportsStructuredOutput)
|
|
45
|
+
continue;
|
|
44
46
|
candidates.push({
|
|
45
47
|
endpoint,
|
|
46
48
|
modelClass: classByName.get(endpoint.name) ?? ModelClass.ChatBalanced,
|
|
@@ -54,6 +56,8 @@ export function rankEndpoints(endpoints, query = {}, options = {}) {
|
|
|
54
56
|
continue;
|
|
55
57
|
if (query.requiresTools && !endpointCapabilities(endpoint).tools)
|
|
56
58
|
continue;
|
|
59
|
+
if (query.requiresStructuredOutput && !endpoint.supportsStructuredOutput)
|
|
60
|
+
continue;
|
|
57
61
|
candidates.push({ endpoint, modelClass });
|
|
58
62
|
}
|
|
59
63
|
}
|
|
@@ -73,6 +77,9 @@ export function rankEndpoints(endpoints, query = {}, options = {}) {
|
|
|
73
77
|
!search && requestedClass === undefined
|
|
74
78
|
? preferLatestWithinLeadingFamily(selectable, preferSystemModels)
|
|
75
79
|
: selectable;
|
|
80
|
+
if (!search && query.optimizeFor !== undefined) {
|
|
81
|
+
ranked = [...ranked].sort((left, right) => compareOptimized(left, right, query.optimizeFor));
|
|
82
|
+
}
|
|
76
83
|
if (search) {
|
|
77
84
|
const threshold = query.threshold ?? DEFAULT_FUZZY_THRESHOLD;
|
|
78
85
|
const searchTokens = tokenize(search);
|
|
@@ -156,6 +163,26 @@ function matchesModelQuery(endpoint, query) {
|
|
|
156
163
|
}
|
|
157
164
|
return true;
|
|
158
165
|
}
|
|
166
|
+
function compareOptimized(left, right, optimizeFor) {
|
|
167
|
+
if (optimizeFor === "speed") {
|
|
168
|
+
const leftReasoning = Boolean(left.endpoint.reasoningEfforts?.length);
|
|
169
|
+
const rightReasoning = Boolean(right.endpoint.reasoningEfforts?.length);
|
|
170
|
+
if (leftReasoning !== rightReasoning)
|
|
171
|
+
return leftReasoning ? 1 : -1;
|
|
172
|
+
}
|
|
173
|
+
const leftValue = left.endpoint.profile?.[optimizeFor];
|
|
174
|
+
const rightValue = right.endpoint.profile?.[optimizeFor];
|
|
175
|
+
if (leftValue !== undefined || rightValue !== undefined) {
|
|
176
|
+
if (leftValue === undefined)
|
|
177
|
+
return 1;
|
|
178
|
+
if (rightValue === undefined)
|
|
179
|
+
return -1;
|
|
180
|
+
const difference = optimizeFor === "cost" ? leftValue - rightValue : rightValue - leftValue;
|
|
181
|
+
if (difference !== 0)
|
|
182
|
+
return difference;
|
|
183
|
+
}
|
|
184
|
+
return compareRanked(left, right, false);
|
|
185
|
+
}
|
|
159
186
|
/** Classify chat and embedding endpoints through the TypeScript-owned policy. */
|
|
160
187
|
export function classifyEndpointClasses(endpoints) {
|
|
161
188
|
const classified = classifyEndpoints(endpoints);
|
|
@@ -209,6 +236,7 @@ export function normalizeEndpoints(endpoints) {
|
|
|
209
236
|
: {}),
|
|
210
237
|
...(description ? { description } : {}),
|
|
211
238
|
supportsTools: booleanValue(capabilitiesRecord.function_calling) ?? identities.some(supportsToolsByFamily),
|
|
239
|
+
supportsStructuredOutput: identities.some((identity) => modelCapabilitiesFor(identity).structuredOutput),
|
|
212
240
|
...(profile ? { profile } : {}),
|
|
213
241
|
serviceNames: Object.assign({}, ...identities.map(modelServiceNames)),
|
|
214
242
|
...(modelServiceName ? { modelServiceName } : {}),
|
|
@@ -320,4 +348,4 @@ function finiteNumber(value) {
|
|
|
320
348
|
function booleanValue(value) {
|
|
321
349
|
return typeof value === "boolean" ? value : undefined;
|
|
322
350
|
}
|
|
323
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3JhbmtpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX3JhbmtpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsVUFBVSxJQUFJLGdCQUFnQixHQU0vQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUUzQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckYsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gscUJBQXFCLEVBQ3JCLGlCQUFpQixHQUNsQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHakQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7QUFFcEMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFTcEMsdUVBQXVFO0FBQ3ZFLE1BQU0sVUFBVSxhQUFhLENBQzNCLFNBQTRDLEVBQzVDLFFBQW9CLEVBQUUsRUFDdEIsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRixNQUFNLGNBQWMsR0FBRyxJQUFJLEdB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QUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFjO0lBQ2hDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQWM7SUFDbEMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDakYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQWM7SUFDbEMsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1JlY29yZCwgdHJpbVRvVW5kZWZpbmVkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIE1vZGVsQ2xhc3MgYXMgTW9kZWxDbGFzc1ZhbHVlcyxcbiAgdHlwZSBNb2RlbENsYXNzIGFzIE1vZGVsQ2xhc3NUeXBlLFxuICB0eXBlIE1vZGVsUXVlcnksXG4gIHR5cGUgUmFua2VkTW9kZWwsXG4gIHR5cGUgUmVhc29uaW5nRWZmb3J0LFxuICB0eXBlIFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHsgdG9Nb2RlbERpc3BsYXlOYW1lIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgRnVzZSBmcm9tIFwiZnVzZS5qc1wiO1xuXG5pbXBvcnQgeyBjbGFzc2VzQXRPckJlbG93LCBDSEFUX0NMQVNTX09SREVSLCBNT0RFTF9DTEFTU19PUkRFUiB9IGZyb20gXCIuL2NsYXNzZXMudHNcIjtcbmltcG9ydCB7XG4gIGNsYXNzaWZ5RW5kcG9pbnRzLFxuICBlbmRwb2ludENhcGFiaWxpdGllcyxcbiAgc3VwcG9ydHNUb29sc0J5RmFtaWx5LFxuICB2ZXJzaW9uVHVwbGUsXG59IGZyb20gXCIuL2NsYXNzaWZ5LnRzXCI7XG5pbXBvcnQgeyBtb2RlbENhcGFiaWxpdGllc0ZvciwgbW9kZWxSZWFzb25pbmdMZXZlbHNGb3IgfSBmcm9tIFwiLi9tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHtcbiAgaXNPcGVuV2VpZ2h0c0dwdCxcbiAgbW9kZWxGYW1pbHksXG4gIG1vZGVsUmVhc29uaW5nRWZmb3J0cyxcbiAgbW9kZWxTZXJ2aWNlTmFtZXMsXG59IGZyb20gXCIuL3BvbGljeS50c1wiO1xuaW1wb3J0IHsgbW9kZWxTdGF0dXNGb3IgfSBmcm9tIFwiLi9yZXRpcmVtZW50LnRzXCI7XG5cbnR5cGUgTW9kZWxDbGFzcyA9IE1vZGVsQ2xhc3NUeXBlO1xuY29uc3QgTW9kZWxDbGFzcyA9IE1vZGVsQ2xhc3NWYWx1ZXM7XG5cbmNvbnN0IERFRkFVTFRfRlVaWllfVEhSRVNIT0xEID0gMC40O1xuXG5pbnRlcmZhY2UgTmF0aXZlUmFua2luZ09wdGlvbnMge1xuICByZWFkb25seSBpbmNsdWRlRGVwcmVjYXRlZD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG1vZGVsQ2xhc3M/OiBNb2RlbENsYXNzO1xuICByZWFkb25seSBwcmVmZXJTeXN0ZW1Nb2RlbHM/OiBib29sZWFuO1xuICByZWFkb25seSB0YXNrPzogc3RyaW5nO1xufVxuXG4vKiogUmFuayBlbmRwb2ludCByZWNvcmRzIHRocm91Z2ggdGhlIFR5cGVTY3JpcHQtb3duZWQgbW9kZWwgcG9saWN5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmtFbmRwb2ludHMoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBxdWVyeTogTW9kZWxRdWVyeSA9IHt9LFxuICBvcHRpb25zOiBOYXRpdmVSYW5raW5nT3B0aW9ucyA9IHt9LFxuKTogUmFua2VkTW9kZWxbXSB7XG4gIGNvbnN0IGZpbHRlcmVkID0gZW5kcG9pbnRzLmZpbHRlcigoZW5kcG9pbnQpID0+IG1hdGNoZXNNb2RlbFF1ZXJ5KGVuZHBvaW50LCBxdWVyeSkpO1xuICBjb25zdCBvcmlnaW5hbEJ5TmFtZSA9IG5ldyBNYXAoZmlsdGVyZWQubWFwKChlbmRwb2ludCkgPT4gW2VuZHBvaW50Lm5hbWUsIGVuZHBvaW50XSkpO1xuICBjb25zdCBub3JtYWxpemVkID0gZmlsdGVyZWQubWFwKChlbmRwb2ludCkgPT4gKHtcbiAgICAuLi5lbmRwb2ludCxcbiAgICAuLi4ob3B0aW9ucy5tb2RlbENsYXNzID8geyBjbGFzczogb3B0aW9ucy5tb2RlbENsYXNzIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMudGFzayA/IHsgdGFzazogb3B0aW9ucy50YXNrIH0gOiB7fSksXG4gIH0pKTtcbiAgY29uc3QgY2xhc3NpZmllZCA9IG9wdGlvbnMubW9kZWxDbGFzc1xuICAgID8ge1xuICAgICAgICBbTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmddOiBbXSxcbiAgICAgICAgW01vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkXTogW10sXG4gICAgICAgIFtNb2RlbENsYXNzLkNoYXRGYXN0XTogW10sXG4gICAgICAgIFtNb2RlbENsYXNzLkVtYmVkZGluZ106IFtdLFxuICAgICAgICBbb3B0aW9ucy5tb2RlbENsYXNzXTogbm9ybWFsaXplZCxcbiAgICAgIH1cbiAgICA6IGNsYXNzaWZ5RW5kcG9pbnRzKG5vcm1hbGl6ZWQpO1xuICBjb25zdCBzZWFyY2ggPSBxdWVyeS5zZWFyY2g/LnRyaW0oKTtcbiAgY29uc3QgcmVxdWVzdGVkQ2xhc3MgPSBvcHRpb25zLm1vZGVsQ2xhc3MgPz8gcXVlcnkubW9kZWxDbGFzcztcbiAgY29uc3QgaW5jbHVkZURlcHJlY2F0ZWQgPSBxdWVyeS5pbmNsdWRlRGVwcmVjYXRlZCA/PyBvcHRpb25zLmluY2x1ZGVEZXByZWNhdGVkID8/IGZhbHNlO1xuICBjb25zdCBwcmVmZXJTeXN0ZW1Nb2RlbHMgPSBvcHRpb25zLnByZWZlclN5c3RlbU1vZGVscyA/PyBmYWxzZTtcbiAgY29uc3QgZWxpZ2libGUgPSByZXF1ZXN0ZWRDbGFzcyA/IGNsYXNzZXNBdE9yQmVsb3cocmVxdWVzdGVkQ2xhc3MpIDogQ0hBVF9DTEFTU19PUkRFUjtcbiAgY29uc3QgY2FuZGlkYXRlczogUmFua2VkTW9kZWxbXSA9IFtdO1xuICBpZiAoc2VhcmNoICYmIHJlcXVlc3RlZENsYXNzID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjbGFzc0J5TmFtZSA9IGNsYXNzaWZ5RW5kcG9pbnRDbGFzc2VzKG5vcm1hbGl6ZWQpO1xuICAgIGZvciAoY29uc3QgZW5kcG9pbnQgb2Ygbm9ybWFsaXplZCkge1xuICAgICAgaWYgKCFpbmNsdWRlRGVwcmVjYXRlZCAmJiBlbmRwb2ludC5zdGF0dXM/LmRlcHJlY2F0ZWQpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgY2FwYWJpbGl0aWVzID0gZW5kcG9pbnRDYXBhYmlsaXRpZXMoZW5kcG9pbnQpO1xuICAgICAgaWYgKCFjYXBhYmlsaXRpZXMuY2hhdCB8fCAocXVlcnkucmVxdWlyZXNUb29scyAmJiAhY2FwYWJpbGl0aWVzLnRvb2xzKSkgY29udGludWU7XG4gICAgICBjYW5kaWRhdGVzLnB1c2goe1xuICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgbW9kZWxDbGFzczogY2xhc3NCeU5hbWUuZ2V0KGVuZHBvaW50Lm5hbWUpID8/IE1vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgbW9kZWxDbGFzcyBvZiBlbGlnaWJsZSkge1xuICAgICAgZm9yIChjb25zdCBlbmRwb2ludCBvZiBjbGFzc2lmaWVkW21vZGVsQ2xhc3NdKSB7XG4gICAgICAgIGlmICghaW5jbHVkZURlcHJlY2F0ZWQgJiYgZW5kcG9pbnQuc3RhdHVzPy5kZXByZWNhdGVkKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHF1ZXJ5LnJlcXVpcmVzVG9vbHMgJiYgIWVuZHBvaW50Q2FwYWJpbGl0aWVzKGVuZHBvaW50KS50b29scykgY29udGludWU7XG4gICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7IGVuZHBvaW50LCBtb2RlbENsYXNzIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV4YWN0ID0gc2VhcmNoXG4gICAgPyBjYW5kaWRhdGVzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmVuZHBvaW50Lm5hbWUgPT09IHNlYXJjaClcbiAgICA6IHVuZGVmaW5lZDtcbiAgbGV0IHJhbmtlZDogUmFua2VkTW9kZWxbXTtcbiAgaWYgKGV4YWN0KSB7XG4gICAgcmFua2VkID0gW3sgLi4uZXhhY3QsIHNjb3JlOiAwIH1dO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNlbGVjdGFibGUgPSBwcmVmZXJTeXN0ZW1Nb2RlbHNcbiAgICAgID8gcHJlZmVyU3lzdGVtQ2FuZGlkYXRlcyhjYW5kaWRhdGVzKVxuICAgICAgOiBjYW5kaWRhdGVzLmZpbHRlcigoY2FuZGlkYXRlKSA9PiAhaXNTeXN0ZW1Nb2RlbChjYW5kaWRhdGUuZW5kcG9pbnQpKTtcbiAgICByYW5rZWQgPVxuICAgICAgIXNlYXJjaCAmJiByZXF1ZXN0ZWRDbGFzcyA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gcHJlZmVyTGF0ZXN0V2l0aGluTGVhZGluZ0ZhbWlseShzZWxlY3RhYmxlLCBwcmVmZXJTeXN0ZW1Nb2RlbHMpXG4gICAgICAgIDogc2VsZWN0YWJsZTtcbiAgICBpZiAoc2VhcmNoKSB7XG4gICAgICBjb25zdCB0aHJlc2hvbGQgPSBxdWVyeS50aHJlc2hvbGQgPz8gREVGQVVMVF9GVVpaWV9USFJFU0hPTEQ7XG4gICAgICBjb25zdCBzZWFyY2hUb2tlbnMgPSB0b2tlbml6ZShzZWFyY2gpO1xuICAgICAgY29uc3QgdG9rZW5NYXRjaGVzID0gc2VsZWN0YWJsZVxuICAgICAgICAuZmlsdGVyKChjYW5kaWRhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW5kaWRhdGVUb2tlbnMgPSBuZXcgU2V0KHNlYXJjaGFibGVWYWx1ZXMoY2FuZGlkYXRlLmVuZHBvaW50KS5mbGF0TWFwKHRva2VuaXplKSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHNlYXJjaFRva2Vucy5sZW5ndGggPiAwICYmIHNlYXJjaFRva2Vucy5ldmVyeSgodG9rZW4pID0+IGNhbmRpZGF0ZVRva2Vucy5oYXModG9rZW4pKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKGNhbmRpZGF0ZSkgPT4gKHsgLi4uY2FuZGlkYXRlLCBzY29yZTogMCB9KSk7XG4gICAgICBpZiAodG9rZW5NYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmFua2VkID0gdG9rZW5NYXRjaGVzLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBjb21wYXJlUmFua2VkKGxlZnQsIHJpZ2h0LCBwcmVmZXJTeXN0ZW1Nb2RlbHMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZ1c2UgPSBuZXcgRnVzZShzZWxlY3RhYmxlLCB7XG4gICAgICAgICAga2V5czogW1xuICAgICAgICAgICAgXCJlbmRwb2ludC5uYW1lXCIsXG4gICAgICAgICAgICBcImVuZHBvaW50LmRpc3BsYXlOYW1lXCIsXG4gICAgICAgICAgICBcImVuZHBvaW50LmZhbWlseVwiLFxuICAgICAgICAgICAgXCJlbmRwb2ludC5tb2RlbFNlcnZpY2VOYW1lXCIsXG4gICAgICAgICAgICBcImVuZHBvaW50LnNlcnZpY2VOYW1lc1wiLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdGhyZXNob2xkLFxuICAgICAgICAgIGlnbm9yZUxvY2F0aW9uOiB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICB1c2VFeHRlbmRlZFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICBpc0Nhc2VTZW5zaXRpdmU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IHRva2VuaXplKHNlYXJjaCkuam9pbihcIiBcIik7XG4gICAgICAgIHJhbmtlZCA9IG5vcm1hbGl6ZWRTZWFyY2hcbiAgICAgICAgICA/IGZ1c2VcbiAgICAgICAgICAgICAgLnNlYXJjaChub3JtYWxpemVkU2VhcmNoKVxuICAgICAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IChyZXN1bHQuc2NvcmUgPz8gMCkgPD0gdGhyZXNob2xkKVxuICAgICAgICAgICAgICAubWFwKChyZXN1bHQpID0+ICh7IC4uLnJlc3VsdC5pdGVtLCBzY29yZTogcmVzdWx0LnNjb3JlID8/IDAgfSkpXG4gICAgICAgICAgICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gY29tcGFyZVJhbmtlZChsZWZ0LCByaWdodCwgcHJlZmVyU3lzdGVtTW9kZWxzKSlcbiAgICAgICAgICA6IFtdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByZXN0b3JlZCA9IHJhbmtlZC5tYXAoKHJlc3VsdCkgPT4gKHtcbiAgICAuLi5yZXN1bHQsXG4gICAgZW5kcG9pbnQ6IG9yaWdpbmFsQnlOYW1lLmdldChyZXN1bHQuZW5kcG9pbnQubmFtZSkgPz8gcmVzdWx0LmVuZHBvaW50LFxuICB9KSk7XG4gIHJldHVybiBxdWVyeS5saW1pdCA9PT0gdW5kZWZpbmVkID8gcmVzdG9yZWQgOiByZXN0b3JlZC5zbGljZSgwLCBNYXRoLm1heCgwLCBxdWVyeS5saW1pdCkpO1xufVxuXG5mdW5jdGlvbiBwcmVmZXJMYXRlc3RXaXRoaW5MZWFkaW5nRmFtaWx5KFxuICBjYW5kaWRhdGVzOiByZWFkb25seSBSYW5rZWRNb2RlbFtdLFxuICBwcmVmZXJTeXN0ZW1Nb2RlbHM6IGJvb2xlYW4sXG4pOiBSYW5rZWRNb2RlbFtdIHtcbiAgY29uc3QgbGVhZGluZyA9IGNhbmRpZGF0ZXNbMF07XG4gIGlmICghbGVhZGluZykgcmV0dXJuIFtdO1xuICBjb25zdCBmYW1pbHkgPSBtb2RlbEZhbWlseShsZWFkaW5nLmVuZHBvaW50Lm5hbWUpO1xuICBpZiAoIWZhbWlseSkgcmV0dXJuIFsuLi5jYW5kaWRhdGVzXTtcbiAgY29uc3Qgc2FtZUZhbWlseSA9IGNhbmRpZGF0ZXNcbiAgICAuZmlsdGVyKChjYW5kaWRhdGUpID0+IG1vZGVsRmFtaWx5KGNhbmRpZGF0ZS5lbmRwb2ludC5uYW1lKSA9PT0gZmFtaWx5KVxuICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gY29tcGFyZVJhbmtlZChsZWZ0LCByaWdodCwgcHJlZmVyU3lzdGVtTW9kZWxzKSk7XG4gIGNvbnN0IHNlbGVjdGVkID0gbmV3IFNldChzYW1lRmFtaWx5Lm1hcCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuZW5kcG9pbnQubmFtZSkpO1xuICByZXR1cm4gW1xuICAgIC4uLnNhbWVGYW1pbHksXG4gICAgLi4uY2FuZGlkYXRlcy5maWx0ZXIoKGNhbmRpZGF0ZSkgPT4gIXNlbGVjdGVkLmhhcyhjYW5kaWRhdGUuZW5kcG9pbnQubmFtZSkpLFxuICBdO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzTW9kZWxRdWVyeShlbmRwb2ludDogU2VydmluZ0VuZHBvaW50U3VtbWFyeSwgcXVlcnk6IE1vZGVsUXVlcnkpOiBib29sZWFuIHtcbiAgaWYgKHF1ZXJ5Lm5hbWUgIT09IHVuZGVmaW5lZCAmJiBlbmRwb2ludC5uYW1lICE9PSBxdWVyeS5uYW1lKSByZXR1cm4gZmFsc2U7XG4gIGlmIChxdWVyeS50YXNrICE9PSB1bmRlZmluZWQgJiYgZW5kcG9pbnQudGFzayAhPT0gcXVlcnkudGFzaykgcmV0dXJuIGZhbHNlO1xuICBpZiAoXG4gICAgcXVlcnkucmVhc29uaW5nRWZmb3J0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAhZW5kcG9pbnQucmVhc29uaW5nRWZmb3J0cz8uaW5jbHVkZXMocXVlcnkucmVhc29uaW5nRWZmb3J0KVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgIHF1ZXJ5LmRpbWVuc2lvbiAhPT0gdW5kZWZpbmVkIHx8XG4gICAgcXVlcnkubWluRGltZW5zaW9uICE9PSB1bmRlZmluZWQgfHxcbiAgICBxdWVyeS5tYXhEaW1lbnNpb24gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAoZW5kcG9pbnQuZGltZW5zaW9uID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocXVlcnkuZGltZW5zaW9uICE9PSB1bmRlZmluZWQgJiYgZW5kcG9pbnQuZGltZW5zaW9uICE9PSBxdWVyeS5kaW1lbnNpb24pIHJldHVybiBmYWxzZTtcbiAgICBpZiAocXVlcnkubWluRGltZW5zaW9uICE9PSB1bmRlZmluZWQgJiYgZW5kcG9pbnQuZGltZW5zaW9uIDwgcXVlcnkubWluRGltZW5zaW9uKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHF1ZXJ5Lm1heERpbWVuc2lvbiAhPT0gdW5kZWZpbmVkICYmIGVuZHBvaW50LmRpbWVuc2lvbiA+IHF1ZXJ5Lm1heERpbWVuc2lvbikgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogQ2xhc3NpZnkgY2hhdCBhbmQgZW1iZWRkaW5nIGVuZHBvaW50cyB0aHJvdWdoIHRoZSBUeXBlU2NyaXB0LW93bmVkIHBvbGljeS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUVuZHBvaW50Q2xhc3NlcyhcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4pOiBSZWFkb25seU1hcDxzdHJpbmcsIE1vZGVsQ2xhc3M+IHtcbiAgY29uc3QgY2xhc3NpZmllZCA9IGNsYXNzaWZ5RW5kcG9pbnRzKGVuZHBvaW50cyk7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBNb2RlbENsYXNzPigpO1xuICBmb3IgKGNvbnN0IG1vZGVsQ2xhc3Mgb2YgTU9ERUxfQ0xBU1NfT1JERVIpIHtcbiAgICBmb3IgKGNvbnN0IGVuZHBvaW50IG9mIGNsYXNzaWZpZWRbbW9kZWxDbGFzc10pIHJlc3VsdC5zZXQoZW5kcG9pbnQubmFtZSwgbW9kZWxDbGFzcyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIE5vcm1hbGl6ZSBzZXJpYWxpemVkIFNESyBlbmRwb2ludCByZWNvcmRzIHdpdGhvdXQgbmF0aXZlIGJpbmRpbmdzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUVuZHBvaW50cyhlbmRwb2ludHM6IHJlYWRvbmx5IHVua25vd25bXSk6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSB7XG4gIGNvbnN0IHN1bW1hcmllcyA9IGVuZHBvaW50cy5mbGF0TWFwKCh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gcmVjb3JkKHZhbHVlKTtcbiAgICBjb25zdCBuYW1lID0gdHJpbVRvVW5kZWZpbmVkKGVuZHBvaW50Lm5hbWUpO1xuICAgIGlmICghbmFtZSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGVudGl0aWVzID0gYXJyYXlWYWx1ZShyZWNvcmQoZW5kcG9pbnQuY29uZmlnKS5zZXJ2ZWRfZW50aXRpZXMpLm1hcChyZWNvcmQpO1xuICAgIGNvbnN0IGlkZW50aXRpZXMgPSBbXG4gICAgICBuYW1lLFxuICAgICAgLi4uZW50aXRpZXMuZmxhdE1hcCgoZW50aXR5KSA9PlxuICAgICAgICBbXG4gICAgICAgICAgdHJpbVRvVW5kZWZpbmVkKGVudGl0eS5lbnRpdHlfbmFtZSksXG4gICAgICAgICAgdHJpbVRvVW5kZWZpbmVkKHJlY29yZChlbnRpdHkuZm91bmRhdGlvbl9tb2RlbCkubmFtZSksXG4gICAgICAgICAgdHJpbVRvVW5kZWZpbmVkKHJlY29yZChlbnRpdHkuZXh0ZXJuYWxfbW9kZWwpLm5hbWUpLFxuICAgICAgICBdLmZpbHRlcigoaWRlbnRpdHkpOiBpZGVudGl0eSBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZGVudGl0eSkpLFxuICAgICAgKSxcbiAgICBdO1xuICAgIGNvbnN0IG1vZGVsU2VydmljZU5hbWUgPSBlbnRpdGllc1xuICAgICAgLm1hcChcbiAgICAgICAgKGVudGl0eSkgPT5cbiAgICAgICAgICB0cmltVG9VbmRlZmluZWQocmVjb3JkKGVudGl0eS5mb3VuZGF0aW9uX21vZGVsKS5uYW1lKSA/P1xuICAgICAgICAgIHRyaW1Ub1VuZGVmaW5lZChlbnRpdHkuZW50aXR5X25hbWUpLFxuICAgICAgKVxuICAgICAgLmZpbmQoQm9vbGVhbik7XG4gICAgY29uc3QgZm91bmRhdGlvbk1vZGVscyA9IGVudGl0aWVzLm1hcCgoZW50aXR5KSA9PiByZWNvcmQoZW50aXR5LmZvdW5kYXRpb25fbW9kZWwpKTtcbiAgICBjb25zdCBmYW1pbHkgPVxuICAgICAgZm91bmRhdGlvbk1vZGVscy5tYXAoKG1vZGVsKSA9PiB0cmltVG9VbmRlZmluZWQobW9kZWwubW9kZWxfY2xhc3MpKS5maW5kKEJvb2xlYW4pID8/XG4gICAgICBpZGVudGl0aWVzLm1hcChtb2RlbEZhbWlseSkuZmluZChCb29sZWFuKTtcbiAgICBjb25zdCBwdWJsaXNoZWRSZWFzb25pbmcgPSBpZGVudGl0aWVzXG4gICAgICAuZmlsdGVyKChpZGVudGl0eSkgPT4gbW9kZWxDYXBhYmlsaXRpZXNGb3IoaWRlbnRpdHkpLnJlYXNvbmluZylcbiAgICAgIC5tYXAoKGlkZW50aXR5KSA9PiBtb2RlbFJlYXNvbmluZ0xldmVsc0ZvcihpZGVudGl0eSkubWFwKHJlYXNvbmluZ0VmZm9ydCkpO1xuICAgIGNvbnN0IHJlYXNvbmluZ0VmZm9ydHMgPVxuICAgICAgWy4uLnB1Ymxpc2hlZFJlYXNvbmluZywgLi4uaWRlbnRpdGllcy5tYXAobW9kZWxSZWFzb25pbmdFZmZvcnRzKV0uc29ydChcbiAgICAgICAgKGxlZnQsIHJpZ2h0KSA9PiByaWdodC5sZW5ndGggLSBsZWZ0Lmxlbmd0aCxcbiAgICAgIClbMF0gPz8gW107XG4gICAgY29uc3QgcHJvZmlsZSA9IGVudGl0aWVzLm1hcChtb2RlbFByb2ZpbGUpLmZpbmQoQm9vbGVhbik7XG4gICAgY29uc3QgY2FwYWJpbGl0aWVzUmVjb3JkID0gcmVjb3JkKGVuZHBvaW50LmNhcGFiaWxpdGllcyk7XG4gICAgY29uc3QgZm91bmRhdGlvbkRlc2NyaXB0aW9uID0gZm91bmRhdGlvbk1vZGVsc1xuICAgICAgLm1hcCgobW9kZWwpID0+IHRyaW1Ub1VuZGVmaW5lZChtb2RlbC5kZXNjcmlwdGlvbikpXG4gICAgICAuZmluZChCb29sZWFuKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHRyaW1Ub1VuZGVmaW5lZChlbmRwb2ludC5kZXNjcmlwdGlvbikgPz8gZm91bmRhdGlvbkRlc2NyaXB0aW9uO1xuICAgIGNvbnN0IHN1bW1hcnk6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkgPSB7XG4gICAgICBuYW1lLFxuICAgICAgZGlzcGxheU5hbWU6IHRvTW9kZWxEaXNwbGF5TmFtZShuYW1lLCBwcm92aWRlZERpc3BsYXlOYW1lKGVuZHBvaW50LCBlbnRpdGllcykpLFxuICAgICAgLi4uKGZhbWlseSA/IHsgZmFtaWx5IH0gOiB7fSksXG4gICAgICAuLi4odHJpbVRvVW5kZWZpbmVkKGVuZHBvaW50LnRhc2spID8geyB0YXNrOiB0cmltVG9VbmRlZmluZWQoZW5kcG9pbnQudGFzaykgfSA6IHt9KSxcbiAgICAgIC4uLih0cmltVG9VbmRlZmluZWQocmVjb3JkKGVuZHBvaW50LnN0YXRlKS5yZWFkeSlcbiAgICAgICAgPyB7IHN0YXRlOiB0cmltVG9VbmRlZmluZWQocmVjb3JkKGVuZHBvaW50LnN0YXRlKS5yZWFkeSkgfVxuICAgICAgICA6IHt9KSxcbiAgICAgIC4uLihkZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb24gfSA6IHt9KSxcbiAgICAgIHN1cHBvcnRzVG9vbHM6XG4gICAgICAgIGJvb2xlYW5WYWx1ZShjYXBhYmlsaXRpZXNSZWNvcmQuZnVuY3Rpb25fY2FsbGluZykgPz8gaWRlbnRpdGllcy5zb21lKHN1cHBvcnRzVG9vbHNCeUZhbWlseSksXG4gICAgICAuLi4ocHJvZmlsZSA/IHsgcHJvZmlsZSB9IDoge30pLFxuICAgICAgc2VydmljZU5hbWVzOiBPYmplY3QuYXNzaWduKHt9LCAuLi5pZGVudGl0aWVzLm1hcChtb2RlbFNlcnZpY2VOYW1lcykpLFxuICAgICAgLi4uKG1vZGVsU2VydmljZU5hbWUgPyB7IG1vZGVsU2VydmljZU5hbWUgfSA6IHt9KSxcbiAgICAgIC4uLihyZWFzb25pbmdFZmZvcnRzLmxlbmd0aCA/IHsgcmVhc29uaW5nRWZmb3J0cyB9IDoge30pLFxuICAgICAgc3RhdHVzOiBtb2RlbFN0YXR1c0ZvciguLi5pZGVudGl0aWVzKSxcbiAgICB9O1xuICAgIHJldHVybiBbc3VtbWFyeV07XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gY2xhc3NpZnlFbmRwb2ludENsYXNzZXMoc3VtbWFyaWVzKTtcbiAgcmV0dXJuIHN1bW1hcmllcy5tYXAoKHN1bW1hcnkpID0+IHtcbiAgICBjb25zdCBtb2RlbENsYXNzID0gY2xhc3Nlcy5nZXQoc3VtbWFyeS5uYW1lKTtcbiAgICByZXR1cm4gbW9kZWxDbGFzcyA/IHsgLi4uc3VtbWFyeSwgY2xhc3M6IG1vZGVsQ2xhc3MgfSA6IHN1bW1hcnk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWFzb25pbmdFZmZvcnQobGV2ZWw6IFJldHVyblR5cGU8dHlwZW9mIG1vZGVsUmVhc29uaW5nTGV2ZWxzRm9yPltudW1iZXJdKTogUmVhc29uaW5nRWZmb3J0IHtcbiAgcmV0dXJuIGxldmVsID09PSBcImV4dHJhLWhpZ2hcIiA/IFwieGhpZ2hcIiA6IGxldmVsO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlUmFua2VkKGxlZnQ6IFJhbmtlZE1vZGVsLCByaWdodDogUmFua2VkTW9kZWwsIHByZWZlclN5c3RlbU1vZGVsczogYm9vbGVhbik6IG51bWJlciB7XG4gIGNvbnN0IHNjb3JlID0gTWF0aC5yb3VuZCgobGVmdC5zY29yZSA/PyAwKSAqIDEwMDApIC0gTWF0aC5yb3VuZCgocmlnaHQuc2NvcmUgPz8gMCkgKiAxMDAwKTtcbiAgaWYgKHNjb3JlICE9PSAwKSByZXR1cm4gc2NvcmU7XG4gIGlmIChwcmVmZXJTeXN0ZW1Nb2RlbHMpIHtcbiAgICBjb25zdCBsZWZ0U3lzdGVtID0gaXNTeXN0ZW1Nb2RlbChsZWZ0LmVuZHBvaW50KTtcbiAgICBjb25zdCByaWdodFN5c3RlbSA9IGlzU3lzdGVtTW9kZWwocmlnaHQuZW5kcG9pbnQpO1xuICAgIGlmIChsZWZ0U3lzdGVtICE9PSByaWdodFN5c3RlbSkgcmV0dXJuIGxlZnRTeXN0ZW0gPyAtMSA6IDE7XG4gIH1cbiAgY29uc3QgbGVmdE9zcyA9IGlzT3BlbldlaWdodHNHcHQobGVmdC5lbmRwb2ludC5uYW1lKTtcbiAgY29uc3QgcmlnaHRPc3MgPSBpc09wZW5XZWlnaHRzR3B0KHJpZ2h0LmVuZHBvaW50Lm5hbWUpO1xuICBpZiAobGVmdE9zcyAhPT0gcmlnaHRPc3MpIHJldHVybiBsZWZ0T3NzID8gMSA6IC0xO1xuICBjb25zdCBsZWZ0VmVyc2lvbiA9IHZlcnNpb25UdXBsZShsZWZ0LmVuZHBvaW50Lm5hbWUpO1xuICBjb25zdCByaWdodFZlcnNpb24gPSB2ZXJzaW9uVHVwbGUocmlnaHQuZW5kcG9pbnQubmFtZSk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAzOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IHJpZ2h0VmVyc2lvbltpbmRleF0hIC0gbGVmdFZlcnNpb25baW5kZXhdITtcbiAgICBpZiAodmVyc2lvbiAhPT0gMCkgcmV0dXJuIHZlcnNpb247XG4gIH1cbiAgY29uc3QgdmFyaWFudCA9IG1vZGVsVmFyaWFudFJhbmsobGVmdC5lbmRwb2ludC5uYW1lKSAtIG1vZGVsVmFyaWFudFJhbmsocmlnaHQuZW5kcG9pbnQubmFtZSk7XG4gIGlmICh2YXJpYW50ICE9PSAwKSByZXR1cm4gdmFyaWFudDtcbiAgcmV0dXJuIE1PREVMX0NMQVNTX09SREVSLmluZGV4T2YobGVmdC5tb2RlbENsYXNzKSAtIE1PREVMX0NMQVNTX09SREVSLmluZGV4T2YocmlnaHQubW9kZWxDbGFzcyk7XG59XG5cbmZ1bmN0aW9uIHByZWZlclN5c3RlbUNhbmRpZGF0ZXMoY2FuZGlkYXRlczogcmVhZG9ubHkgUmFua2VkTW9kZWxbXSk6IFJhbmtlZE1vZGVsW10ge1xuICByZXR1cm4gW1xuICAgIC4uLmNhbmRpZGF0ZXMuZmlsdGVyKChjYW5kaWRhdGUpID0+IGlzU3lzdGVtTW9kZWwoY2FuZGlkYXRlLmVuZHBvaW50KSksXG4gICAgLi4uY2FuZGlkYXRlcy5maWx0ZXIoKGNhbmRpZGF0ZSkgPT4gIWlzU3lzdGVtTW9kZWwoY2FuZGlkYXRlLmVuZHBvaW50KSksXG4gIF07XG59XG5cbmZ1bmN0aW9uIGlzU3lzdGVtTW9kZWwoZW5kcG9pbnQ6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVuZHBvaW50Lm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwic3lzdGVtLmFpLlwiKTtcbn1cblxuZnVuY3Rpb24gbW9kZWxWYXJpYW50UmFuayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICBpZiAoIS8oPzpefFstXy5dKWdwdCg/OlstXy5dfCQpL2kudGVzdChuYW1lKSkgcmV0dXJuIDI7XG4gIGlmICgvKD86XnxbLV8uXSlzb2woPzpbLV8uXXwkKS9pLnRlc3QobmFtZSkpIHJldHVybiAwO1xuICBpZiAoLyg/Ol58Wy1fLl0pbHVuYSg/OlstXy5dfCQpL2kudGVzdChuYW1lKSkgcmV0dXJuIDE7XG4gIHJldHVybiAyO1xufVxuXG5mdW5jdGlvbiB0b2tlbml6ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvW2EtejAtOV0rL2cpID8/IFtdO1xufVxuXG5mdW5jdGlvbiBzZWFyY2hhYmxlVmFsdWVzKGVuZHBvaW50OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5KTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIGVuZHBvaW50Lm5hbWUsXG4gICAgZW5kcG9pbnQuZGlzcGxheU5hbWUsXG4gICAgZW5kcG9pbnQuZmFtaWx5LFxuICAgIGVuZHBvaW50Lm1vZGVsU2VydmljZU5hbWUsXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhlbmRwb2ludC5zZXJ2aWNlTmFtZXMgPz8ge30pLFxuICBdLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBtb2RlbFByb2ZpbGUoZW50aXR5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICBjb25zdCBzb3VyY2UgPSByZWNvcmQocmVjb3JkKGVudGl0eS5mb3VuZGF0aW9uX21vZGVsKS5haV9nYXRld2F5X21vZGVsX3Byb2ZpbGUpO1xuICBjb25zdCBxdWFsaXR5ID0gZmluaXRlTnVtYmVyKHNvdXJjZS5xdWFsaXR5KTtcbiAgY29uc3Qgc3BlZWQgPSBmaW5pdGVOdW1iZXIoc291cmNlLnNwZWVkKTtcbiAgY29uc3QgY29zdCA9IGZpbml0ZU51bWJlcihzb3VyY2UuY29zdCk7XG4gIGlmIChxdWFsaXR5ID09PSB1bmRlZmluZWQgJiYgc3BlZWQgPT09IHVuZGVmaW5lZCAmJiBjb3N0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uKHF1YWxpdHkgIT09IHVuZGVmaW5lZCA/IHsgcXVhbGl0eSB9IDoge30pLFxuICAgIC4uLihzcGVlZCAhPT0gdW5kZWZpbmVkID8geyBzcGVlZCB9IDoge30pLFxuICAgIC4uLihjb3N0ICE9PSB1bmRlZmluZWQgPyB7IGNvc3QgfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvdmlkZWREaXNwbGF5TmFtZShcbiAgZW5kcG9pbnQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBlbnRpdGllczogcmVhZG9ubHkgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgdGFnIG9mIGFycmF5VmFsdWUoZW5kcG9pbnQudGFncykubWFwKHJlY29yZCkpIHtcbiAgICBpZiAoIVtcImRpc3BsYXlfbmFtZVwiLCBcImRpc3BsYXlOYW1lXCIsIFwibmFtZVwiXS5pbmNsdWRlcyhTdHJpbmcodGFnLmtleSkpKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHRyaW1Ub1VuZGVmaW5lZCh0YWcudmFsdWUpO1xuICAgIGlmICh2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiAoXG4gICAgZW50aXRpZXNcbiAgICAgIC5tYXAoKGVudGl0eSkgPT4gdHJpbVRvVW5kZWZpbmVkKHJlY29yZChlbnRpdHkuZm91bmRhdGlvbl9tb2RlbCkuZGlzcGxheV9uYW1lKSlcbiAgICAgIC5maW5kKEJvb2xlYW4pID8/XG4gICAgZW50aXRpZXMubWFwKChlbnRpdHkpID0+IHRyaW1Ub1VuZGVmaW5lZChyZWNvcmQoZW50aXR5LmV4dGVybmFsX21vZGVsKS5uYW1lKSkuZmluZChCb29sZWFuKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWNvcmQodmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiBpc1JlY29yZCh2YWx1ZSkgPyB2YWx1ZSA6IHt9O1xufVxuXG5mdW5jdGlvbiBhcnJheVZhbHVlKHZhbHVlOiB1bmtub3duKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcbn1cblxuZnVuY3Rpb24gZmluaXRlTnVtYmVyKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGJvb2xlYW5WYWx1ZSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIiA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuIl19
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3JhbmtpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX3JhbmtpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsVUFBVSxJQUFJLGdCQUFnQixHQU0vQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUUzQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDckYsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gscUJBQXFCLEVBQ3JCLGlCQUFpQixHQUNsQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHakQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7QUFFcEMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFTcEMsdUVBQXVFO0FBQ3ZFLE1BQU0sVUFBVSxhQUFhLENBQzNCLFNBQTRDLEVBQzVDLFFBQW9CLEVBQUUsRUFDdEIsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRixNQUFNLGNBQWMsR0FBRyxJQUFJLEdB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b1VuZGVmaW5lZCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBNb2RlbENsYXNzIGFzIE1vZGVsQ2xhc3NWYWx1ZXMsXG4gIHR5cGUgTW9kZWxDbGFzcyBhcyBNb2RlbENsYXNzVHlwZSxcbiAgdHlwZSBNb2RlbFF1ZXJ5LFxuICB0eXBlIFJhbmtlZE1vZGVsLFxuICB0eXBlIFJlYXNvbmluZ0VmZm9ydCxcbiAgdHlwZSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB7IHRvTW9kZWxEaXNwbGF5TmFtZSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IEZ1c2UgZnJvbSBcImZ1c2UuanNcIjtcblxuaW1wb3J0IHsgY2xhc3Nlc0F0T3JCZWxvdywgQ0hBVF9DTEFTU19PUkRFUiwgTU9ERUxfQ0xBU1NfT1JERVIgfSBmcm9tIFwiLi9jbGFzc2VzLnRzXCI7XG5pbXBvcnQge1xuICBjbGFzc2lmeUVuZHBvaW50cyxcbiAgZW5kcG9pbnRDYXBhYmlsaXRpZXMsXG4gIHN1cHBvcnRzVG9vbHNCeUZhbWlseSxcbiAgdmVyc2lvblR1cGxlLFxufSBmcm9tIFwiLi9jbGFzc2lmeS50c1wiO1xuaW1wb3J0IHsgbW9kZWxDYXBhYmlsaXRpZXNGb3IsIG1vZGVsUmVhc29uaW5nTGV2ZWxzRm9yIH0gZnJvbSBcIi4vbWV0YWRhdGEudHNcIjtcbmltcG9ydCB7XG4gIGlzT3BlbldlaWdodHNHcHQsXG4gIG1vZGVsRmFtaWx5LFxuICBtb2RlbFJlYXNvbmluZ0VmZm9ydHMsXG4gIG1vZGVsU2VydmljZU5hbWVzLFxufSBmcm9tIFwiLi9wb2xpY3kudHNcIjtcbmltcG9ydCB7IG1vZGVsU3RhdHVzRm9yIH0gZnJvbSBcIi4vcmV0aXJlbWVudC50c1wiO1xuXG50eXBlIE1vZGVsQ2xhc3MgPSBNb2RlbENsYXNzVHlwZTtcbmNvbnN0IE1vZGVsQ2xhc3MgPSBNb2RlbENsYXNzVmFsdWVzO1xuXG5jb25zdCBERUZBVUxUX0ZVWlpZX1RIUkVTSE9MRCA9IDAuNDtcblxuaW50ZXJmYWNlIE5hdGl2ZVJhbmtpbmdPcHRpb25zIHtcbiAgcmVhZG9ubHkgaW5jbHVkZURlcHJlY2F0ZWQ/OiBib29sZWFuO1xuICByZWFkb25seSBtb2RlbENsYXNzPzogTW9kZWxDbGFzcztcbiAgcmVhZG9ubHkgcHJlZmVyU3lzdGVtTW9kZWxzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGFzaz86IHN0cmluZztcbn1cblxuLyoqIFJhbmsgZW5kcG9pbnQgcmVjb3JkcyB0aHJvdWdoIHRoZSBUeXBlU2NyaXB0LW93bmVkIG1vZGVsIHBvbGljeS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5rRW5kcG9pbnRzKFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbiAgcXVlcnk6IE1vZGVsUXVlcnkgPSB7fSxcbiAgb3B0aW9uczogTmF0aXZlUmFua2luZ09wdGlvbnMgPSB7fSxcbik6IFJhbmtlZE1vZGVsW10ge1xuICBjb25zdCBmaWx0ZXJlZCA9IGVuZHBvaW50cy5maWx0ZXIoKGVuZHBvaW50KSA9PiBtYXRjaGVzTW9kZWxRdWVyeShlbmRwb2ludCwgcXVlcnkpKTtcbiAgY29uc3Qgb3JpZ2luYWxCeU5hbWUgPSBuZXcgTWFwKGZpbHRlcmVkLm1hcCgoZW5kcG9pbnQpID0+IFtlbmRwb2ludC5uYW1lLCBlbmRwb2ludF0pKTtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IGZpbHRlcmVkLm1hcCgoZW5kcG9pbnQpID0+ICh7XG4gICAgLi4uZW5kcG9pbnQsXG4gICAgLi4uKG9wdGlvbnMubW9kZWxDbGFzcyA/IHsgY2xhc3M6IG9wdGlvbnMubW9kZWxDbGFzcyB9IDoge30pLFxuICAgIC4uLihvcHRpb25zLnRhc2sgPyB7IHRhc2s6IG9wdGlvbnMudGFzayB9IDoge30pLFxuICB9KSk7XG4gIGNvbnN0IGNsYXNzaWZpZWQgPSBvcHRpb25zLm1vZGVsQ2xhc3NcbiAgICA/IHtcbiAgICAgICAgW01vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nXTogW10sXG4gICAgICAgIFtNb2RlbENsYXNzLkNoYXRCYWxhbmNlZF06IFtdLFxuICAgICAgICBbTW9kZWxDbGFzcy5DaGF0RmFzdF06IFtdLFxuICAgICAgICBbTW9kZWxDbGFzcy5FbWJlZGRpbmddOiBbXSxcbiAgICAgICAgW29wdGlvbnMubW9kZWxDbGFzc106IG5vcm1hbGl6ZWQsXG4gICAgICB9XG4gICAgOiBjbGFzc2lmeUVuZHBvaW50cyhub3JtYWxpemVkKTtcbiAgY29uc3Qgc2VhcmNoID0gcXVlcnkuc2VhcmNoPy50cmltKCk7XG4gIGNvbnN0IHJlcXVlc3RlZENsYXNzID0gb3B0aW9ucy5tb2RlbENsYXNzID8/IHF1ZXJ5Lm1vZGVsQ2xhc3M7XG4gIGNvbnN0IGluY2x1ZGVEZXByZWNhdGVkID0gcXVlcnkuaW5jbHVkZURlcHJlY2F0ZWQgPz8gb3B0aW9ucy5pbmNsdWRlRGVwcmVjYXRlZCA/PyBmYWxzZTtcbiAgY29uc3QgcHJlZmVyU3lzdGVtTW9kZWxzID0gb3B0aW9ucy5wcmVmZXJTeXN0ZW1Nb2RlbHMgPz8gZmFsc2U7XG4gIGNvbnN0IGVsaWdpYmxlID0gcmVxdWVzdGVkQ2xhc3MgPyBjbGFzc2VzQXRPckJlbG93KHJlcXVlc3RlZENsYXNzKSA6IENIQVRfQ0xBU1NfT1JERVI7XG4gIGNvbnN0IGNhbmRpZGF0ZXM6IFJhbmtlZE1vZGVsW10gPSBbXTtcbiAgaWYgKHNlYXJjaCAmJiByZXF1ZXN0ZWRDbGFzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY2xhc3NCeU5hbWUgPSBjbGFzc2lmeUVuZHBvaW50Q2xhc3Nlcyhub3JtYWxpemVkKTtcbiAgICBmb3IgKGNvbnN0IGVuZHBvaW50IG9mIG5vcm1hbGl6ZWQpIHtcbiAgICAgIGlmICghaW5jbHVkZURlcHJlY2F0ZWQgJiYgZW5kcG9pbnQuc3RhdHVzPy5kZXByZWNhdGVkKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IGVuZHBvaW50Q2FwYWJpbGl0aWVzKGVuZHBvaW50KTtcbiAgICAgIGlmICghY2FwYWJpbGl0aWVzLmNoYXQgfHwgKHF1ZXJ5LnJlcXVpcmVzVG9vbHMgJiYgIWNhcGFiaWxpdGllcy50b29scykpIGNvbnRpbnVlO1xuICAgICAgaWYgKHF1ZXJ5LnJlcXVpcmVzU3RydWN0dXJlZE91dHB1dCAmJiAhZW5kcG9pbnQuc3VwcG9ydHNTdHJ1Y3R1cmVkT3V0cHV0KSBjb250aW51ZTtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgIGVuZHBvaW50LFxuICAgICAgICBtb2RlbENsYXNzOiBjbGFzc0J5TmFtZS5nZXQoZW5kcG9pbnQubmFtZSkgPz8gTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBtb2RlbENsYXNzIG9mIGVsaWdpYmxlKSB7XG4gICAgICBmb3IgKGNvbnN0IGVuZHBvaW50IG9mIGNsYXNzaWZpZWRbbW9kZWxDbGFzc10pIHtcbiAgICAgICAgaWYgKCFpbmNsdWRlRGVwcmVjYXRlZCAmJiBlbmRwb2ludC5zdGF0dXM/LmRlcHJlY2F0ZWQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAocXVlcnkucmVxdWlyZXNUb29scyAmJiAhZW5kcG9pbnRDYXBhYmlsaXRpZXMoZW5kcG9pbnQpLnRvb2xzKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHF1ZXJ5LnJlcXVpcmVzU3RydWN0dXJlZE91dHB1dCAmJiAhZW5kcG9pbnQuc3VwcG9ydHNTdHJ1Y3R1cmVkT3V0cHV0KSBjb250aW51ZTtcbiAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHsgZW5kcG9pbnQsIG1vZGVsQ2xhc3MgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXhhY3QgPSBzZWFyY2hcbiAgICA/IGNhbmRpZGF0ZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuZW5kcG9pbnQubmFtZSA9PT0gc2VhcmNoKVxuICAgIDogdW5kZWZpbmVkO1xuICBsZXQgcmFua2VkOiBSYW5rZWRNb2RlbFtdO1xuICBpZiAoZXhhY3QpIHtcbiAgICByYW5rZWQgPSBbeyAuLi5leGFjdCwgc2NvcmU6IDAgfV07XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc2VsZWN0YWJsZSA9IHByZWZlclN5c3RlbU1vZGVsc1xuICAgICAgPyBwcmVmZXJTeXN0ZW1DYW5kaWRhdGVzKGNhbmRpZGF0ZXMpXG4gICAgICA6IGNhbmRpZGF0ZXMuZmlsdGVyKChjYW5kaWRhdGUpID0+ICFpc1N5c3RlbU1vZGVsKGNhbmRpZGF0ZS5lbmRwb2ludCkpO1xuICAgIHJhbmtlZCA9XG4gICAgICAhc2VhcmNoICYmIHJlcXVlc3RlZENsYXNzID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBwcmVmZXJMYXRlc3RXaXRoaW5MZWFkaW5nRmFtaWx5KHNlbGVjdGFibGUsIHByZWZlclN5c3RlbU1vZGVscylcbiAgICAgICAgOiBzZWxlY3RhYmxlO1xuICAgIGlmICghc2VhcmNoICYmIHF1ZXJ5Lm9wdGltaXplRm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJhbmtlZCA9IFsuLi5yYW5rZWRdLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBjb21wYXJlT3B0aW1pemVkKGxlZnQsIHJpZ2h0LCBxdWVyeS5vcHRpbWl6ZUZvciEpKTtcbiAgICB9XG4gICAgaWYgKHNlYXJjaCkge1xuICAgICAgY29uc3QgdGhyZXNob2xkID0gcXVlcnkudGhyZXNob2xkID8/IERFRkFVTFRfRlVaWllfVEhSRVNIT0xEO1xuICAgICAgY29uc3Qgc2VhcmNoVG9rZW5zID0gdG9rZW5pemUoc2VhcmNoKTtcbiAgICAgIGNvbnN0IHRva2VuTWF0Y2hlcyA9IHNlbGVjdGFibGVcbiAgICAgICAgLmZpbHRlcigoY2FuZGlkYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2FuZGlkYXRlVG9rZW5zID0gbmV3IFNldChzZWFyY2hhYmxlVmFsdWVzKGNhbmRpZGF0ZS5lbmRwb2ludCkuZmxhdE1hcCh0b2tlbml6ZSkpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBzZWFyY2hUb2tlbnMubGVuZ3RoID4gMCAmJiBzZWFyY2hUb2tlbnMuZXZlcnkoKHRva2VuKSA9PiBjYW5kaWRhdGVUb2tlbnMuaGFzKHRva2VuKSlcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChjYW5kaWRhdGUpID0+ICh7IC4uLmNhbmRpZGF0ZSwgc2NvcmU6IDAgfSkpO1xuICAgICAgaWYgKHRva2VuTWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJhbmtlZCA9IHRva2VuTWF0Y2hlcy5zb3J0KChsZWZ0LCByaWdodCkgPT4gY29tcGFyZVJhbmtlZChsZWZ0LCByaWdodCwgcHJlZmVyU3lzdGVtTW9kZWxzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2Uoc2VsZWN0YWJsZSwge1xuICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgIFwiZW5kcG9pbnQubmFtZVwiLFxuICAgICAgICAgICAgXCJlbmRwb2ludC5kaXNwbGF5TmFtZVwiLFxuICAgICAgICAgICAgXCJlbmRwb2ludC5mYW1pbHlcIixcbiAgICAgICAgICAgIFwiZW5kcG9pbnQubW9kZWxTZXJ2aWNlTmFtZVwiLFxuICAgICAgICAgICAgXCJlbmRwb2ludC5zZXJ2aWNlTmFtZXNcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIHRocmVzaG9sZCxcbiAgICAgICAgICBpZ25vcmVMb2NhdGlvbjogdHJ1ZSxcbiAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgdXNlRXh0ZW5kZWRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSB0b2tlbml6ZShzZWFyY2gpLmpvaW4oXCIgXCIpO1xuICAgICAgICByYW5rZWQgPSBub3JtYWxpemVkU2VhcmNoXG4gICAgICAgICAgPyBmdXNlXG4gICAgICAgICAgICAgIC5zZWFyY2gobm9ybWFsaXplZFNlYXJjaClcbiAgICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8/IDApIDw9IHRocmVzaG9sZClcbiAgICAgICAgICAgICAgLm1hcCgocmVzdWx0KSA9PiAoeyAuLi5yZXN1bHQuaXRlbSwgc2NvcmU6IHJlc3VsdC5zY29yZSA/PyAwIH0pKVxuICAgICAgICAgICAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGNvbXBhcmVSYW5rZWQobGVmdCwgcmlnaHQsIHByZWZlclN5c3RlbU1vZGVscykpXG4gICAgICAgICAgOiBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgcmVzdG9yZWQgPSByYW5rZWQubWFwKChyZXN1bHQpID0+ICh7XG4gICAgLi4ucmVzdWx0LFxuICAgIGVuZHBvaW50OiBvcmlnaW5hbEJ5TmFtZS5nZXQocmVzdWx0LmVuZHBvaW50Lm5hbWUpID8/IHJlc3VsdC5lbmRwb2ludCxcbiAgfSkpO1xuICByZXR1cm4gcXVlcnkubGltaXQgPT09IHVuZGVmaW5lZCA/IHJlc3RvcmVkIDogcmVzdG9yZWQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgcXVlcnkubGltaXQpKTtcbn1cblxuZnVuY3Rpb24gcHJlZmVyTGF0ZXN0V2l0aGluTGVhZGluZ0ZhbWlseShcbiAgY2FuZGlkYXRlczogcmVhZG9ubHkgUmFua2VkTW9kZWxbXSxcbiAgcHJlZmVyU3lzdGVtTW9kZWxzOiBib29sZWFuLFxuKTogUmFua2VkTW9kZWxbXSB7XG4gIGNvbnN0IGxlYWRpbmcgPSBjYW5kaWRhdGVzWzBdO1xuICBpZiAoIWxlYWRpbmcpIHJldHVybiBbXTtcbiAgY29uc3QgZmFtaWx5ID0gbW9kZWxGYW1pbHkobGVhZGluZy5lbmRwb2ludC5uYW1lKTtcbiAgaWYgKCFmYW1pbHkpIHJldHVybiBbLi4uY2FuZGlkYXRlc107XG4gIGNvbnN0IHNhbWVGYW1pbHkgPSBjYW5kaWRhdGVzXG4gICAgLmZpbHRlcigoY2FuZGlkYXRlKSA9PiBtb2RlbEZhbWlseShjYW5kaWRhdGUuZW5kcG9pbnQubmFtZSkgPT09IGZhbWlseSlcbiAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGNvbXBhcmVSYW5rZWQobGVmdCwgcmlnaHQsIHByZWZlclN5c3RlbU1vZGVscykpO1xuICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQoc2FtZUZhbWlseS5tYXAoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmVuZHBvaW50Lm5hbWUpKTtcbiAgcmV0dXJuIFtcbiAgICAuLi5zYW1lRmFtaWx5LFxuICAgIC4uLmNhbmRpZGF0ZXMuZmlsdGVyKChjYW5kaWRhdGUpID0+ICFzZWxlY3RlZC5oYXMoY2FuZGlkYXRlLmVuZHBvaW50Lm5hbWUpKSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlc01vZGVsUXVlcnkoZW5kcG9pbnQ6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnksIHF1ZXJ5OiBNb2RlbFF1ZXJ5KTogYm9vbGVhbiB7XG4gIGlmIChxdWVyeS5uYW1lICE9PSB1bmRlZmluZWQgJiYgZW5kcG9pbnQubmFtZSAhPT0gcXVlcnkubmFtZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAocXVlcnkudGFzayAhPT0gdW5kZWZpbmVkICYmIGVuZHBvaW50LnRhc2sgIT09IHF1ZXJ5LnRhc2spIHJldHVybiBmYWxzZTtcbiAgaWYgKFxuICAgIHF1ZXJ5LnJlYXNvbmluZ0VmZm9ydCAhPT0gdW5kZWZpbmVkICYmXG4gICAgIWVuZHBvaW50LnJlYXNvbmluZ0VmZm9ydHM/LmluY2x1ZGVzKHF1ZXJ5LnJlYXNvbmluZ0VmZm9ydClcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICBxdWVyeS5kaW1lbnNpb24gIT09IHVuZGVmaW5lZCB8fFxuICAgIHF1ZXJ5Lm1pbkRpbWVuc2lvbiAhPT0gdW5kZWZpbmVkIHx8XG4gICAgcXVlcnkubWF4RGltZW5zaW9uICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgaWYgKGVuZHBvaW50LmRpbWVuc2lvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHF1ZXJ5LmRpbWVuc2lvbiAhPT0gdW5kZWZpbmVkICYmIGVuZHBvaW50LmRpbWVuc2lvbiAhPT0gcXVlcnkuZGltZW5zaW9uKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHF1ZXJ5Lm1pbkRpbWVuc2lvbiAhPT0gdW5kZWZpbmVkICYmIGVuZHBvaW50LmRpbWVuc2lvbiA8IHF1ZXJ5Lm1pbkRpbWVuc2lvbikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChxdWVyeS5tYXhEaW1lbnNpb24gIT09IHVuZGVmaW5lZCAmJiBlbmRwb2ludC5kaW1lbnNpb24gPiBxdWVyeS5tYXhEaW1lbnNpb24pIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU9wdGltaXplZChcbiAgbGVmdDogUmFua2VkTW9kZWwsXG4gIHJpZ2h0OiBSYW5rZWRNb2RlbCxcbiAgb3B0aW1pemVGb3I6IE5vbk51bGxhYmxlPE1vZGVsUXVlcnlbXCJvcHRpbWl6ZUZvclwiXT4sXG4pOiBudW1iZXIge1xuICBpZiAob3B0aW1pemVGb3IgPT09IFwic3BlZWRcIikge1xuICAgIGNvbnN0IGxlZnRSZWFzb25pbmcgPSBCb29sZWFuKGxlZnQuZW5kcG9pbnQucmVhc29uaW5nRWZmb3J0cz8ubGVuZ3RoKTtcbiAgICBjb25zdCByaWdodFJlYXNvbmluZyA9IEJvb2xlYW4ocmlnaHQuZW5kcG9pbnQucmVhc29uaW5nRWZmb3J0cz8ubGVuZ3RoKTtcbiAgICBpZiAobGVmdFJlYXNvbmluZyAhPT0gcmlnaHRSZWFzb25pbmcpIHJldHVybiBsZWZ0UmVhc29uaW5nID8gMSA6IC0xO1xuICB9XG4gIGNvbnN0IGxlZnRWYWx1ZSA9IGxlZnQuZW5kcG9pbnQucHJvZmlsZT8uW29wdGltaXplRm9yXTtcbiAgY29uc3QgcmlnaHRWYWx1ZSA9IHJpZ2h0LmVuZHBvaW50LnByb2ZpbGU/LltvcHRpbWl6ZUZvcl07XG4gIGlmIChsZWZ0VmFsdWUgIT09IHVuZGVmaW5lZCB8fCByaWdodFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAobGVmdFZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChyaWdodFZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAtMTtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gb3B0aW1pemVGb3IgPT09IFwiY29zdFwiID8gbGVmdFZhbHVlIC0gcmlnaHRWYWx1ZSA6IHJpZ2h0VmFsdWUgLSBsZWZ0VmFsdWU7XG4gICAgaWYgKGRpZmZlcmVuY2UgIT09IDApIHJldHVybiBkaWZmZXJlbmNlO1xuICB9XG4gIHJldHVybiBjb21wYXJlUmFua2VkKGxlZnQsIHJpZ2h0LCBmYWxzZSk7XG59XG5cbi8qKiBDbGFzc2lmeSBjaGF0IGFuZCBlbWJlZGRpbmcgZW5kcG9pbnRzIHRocm91Z2ggdGhlIFR5cGVTY3JpcHQtb3duZWQgcG9saWN5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5RW5kcG9pbnRDbGFzc2VzKFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbik6IFJlYWRvbmx5TWFwPHN0cmluZywgTW9kZWxDbGFzcz4ge1xuICBjb25zdCBjbGFzc2lmaWVkID0gY2xhc3NpZnlFbmRwb2ludHMoZW5kcG9pbnRzKTtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxzdHJpbmcsIE1vZGVsQ2xhc3M+KCk7XG4gIGZvciAoY29uc3QgbW9kZWxDbGFzcyBvZiBNT0RFTF9DTEFTU19PUkRFUikge1xuICAgIGZvciAoY29uc3QgZW5kcG9pbnQgb2YgY2xhc3NpZmllZFttb2RlbENsYXNzXSkgcmVzdWx0LnNldChlbmRwb2ludC5uYW1lLCBtb2RlbENsYXNzKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogTm9ybWFsaXplIHNlcmlhbGl6ZWQgU0RLIGVuZHBvaW50IHJlY29yZHMgd2l0aG91dCBuYXRpdmUgYmluZGluZ3MuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRW5kcG9pbnRzKGVuZHBvaW50czogcmVhZG9ubHkgdW5rbm93bltdKTogU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdIHtcbiAgY29uc3Qgc3VtbWFyaWVzID0gZW5kcG9pbnRzLmZsYXRNYXAoKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSByZWNvcmQodmFsdWUpO1xuICAgIGNvbnN0IG5hbWUgPSB0cmltVG9VbmRlZmluZWQoZW5kcG9pbnQubmFtZSk7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gW107XG4gICAgY29uc3QgZW50aXRpZXMgPSBhcnJheVZhbHVlKHJlY29yZChlbmRwb2ludC5jb25maWcpLnNlcnZlZF9lbnRpdGllcykubWFwKHJlY29yZCk7XG4gICAgY29uc3QgaWRlbnRpdGllcyA9IFtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5lbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+XG4gICAgICAgIFtcbiAgICAgICAgICB0cmltVG9VbmRlZmluZWQoZW50aXR5LmVudGl0eV9uYW1lKSxcbiAgICAgICAgICB0cmltVG9VbmRlZmluZWQocmVjb3JkKGVudGl0eS5mb3VuZGF0aW9uX21vZGVsKS5uYW1lKSxcbiAgICAgICAgICB0cmltVG9VbmRlZmluZWQocmVjb3JkKGVudGl0eS5leHRlcm5hbF9tb2RlbCkubmFtZSksXG4gICAgICAgIF0uZmlsdGVyKChpZGVudGl0eSk6IGlkZW50aXR5IGlzIHN0cmluZyA9PiBCb29sZWFuKGlkZW50aXR5KSksXG4gICAgICApLFxuICAgIF07XG4gICAgY29uc3QgbW9kZWxTZXJ2aWNlTmFtZSA9IGVudGl0aWVzXG4gICAgICAubWFwKFxuICAgICAgICAoZW50aXR5KSA9PlxuICAgICAgICAgIHRyaW1Ub1VuZGVmaW5lZChyZWNvcmQoZW50aXR5LmZvdW5kYXRpb25fbW9kZWwpLm5hbWUpID8/XG4gICAgICAgICAgdHJpbVRvVW5kZWZpbmVkKGVudGl0eS5lbnRpdHlfbmFtZSksXG4gICAgICApXG4gICAgICAuZmluZChCb29sZWFuKTtcbiAgICBjb25zdCBmb3VuZGF0aW9uTW9kZWxzID0gZW50aXRpZXMubWFwKChlbnRpdHkpID0+IHJlY29yZChlbnRpdHkuZm91bmRhdGlvbl9tb2RlbCkpO1xuICAgIGNvbnN0IGZhbWlseSA9XG4gICAgICBmb3VuZGF0aW9uTW9kZWxzLm1hcCgobW9kZWwpID0+IHRyaW1Ub1VuZGVmaW5lZChtb2RlbC5tb2RlbF9jbGFzcykpLmZpbmQoQm9vbGVhbikgPz9cbiAgICAgIGlkZW50aXRpZXMubWFwKG1vZGVsRmFtaWx5KS5maW5kKEJvb2xlYW4pO1xuICAgIGNvbnN0IHB1Ymxpc2hlZFJlYXNvbmluZyA9IGlkZW50aXRpZXNcbiAgICAgIC5maWx0ZXIoKGlkZW50aXR5KSA9PiBtb2RlbENhcGFiaWxpdGllc0ZvcihpZGVudGl0eSkucmVhc29uaW5nKVxuICAgICAgLm1hcCgoaWRlbnRpdHkpID0+IG1vZGVsUmVhc29uaW5nTGV2ZWxzRm9yKGlkZW50aXR5KS5tYXAocmVhc29uaW5nRWZmb3J0KSk7XG4gICAgY29uc3QgcmVhc29uaW5nRWZmb3J0cyA9XG4gICAgICBbLi4ucHVibGlzaGVkUmVhc29uaW5nLCAuLi5pZGVudGl0aWVzLm1hcChtb2RlbFJlYXNvbmluZ0VmZm9ydHMpXS5zb3J0KFxuICAgICAgICAobGVmdCwgcmlnaHQpID0+IHJpZ2h0Lmxlbmd0aCAtIGxlZnQubGVuZ3RoLFxuICAgICAgKVswXSA/PyBbXTtcbiAgICBjb25zdCBwcm9maWxlID0gZW50aXRpZXMubWFwKG1vZGVsUHJvZmlsZSkuZmluZChCb29sZWFuKTtcbiAgICBjb25zdCBjYXBhYmlsaXRpZXNSZWNvcmQgPSByZWNvcmQoZW5kcG9pbnQuY2FwYWJpbGl0aWVzKTtcbiAgICBjb25zdCBmb3VuZGF0aW9uRGVzY3JpcHRpb24gPSBmb3VuZGF0aW9uTW9kZWxzXG4gICAgICAubWFwKChtb2RlbCkgPT4gdHJpbVRvVW5kZWZpbmVkKG1vZGVsLmRlc2NyaXB0aW9uKSlcbiAgICAgIC5maW5kKEJvb2xlYW4pO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdHJpbVRvVW5kZWZpbmVkKGVuZHBvaW50LmRlc2NyaXB0aW9uKSA/PyBmb3VuZGF0aW9uRGVzY3JpcHRpb247XG4gICAgY29uc3Qgc3VtbWFyeTogU2VydmluZ0VuZHBvaW50U3VtbWFyeSA9IHtcbiAgICAgIG5hbWUsXG4gICAgICBkaXNwbGF5TmFtZTogdG9Nb2RlbERpc3BsYXlOYW1lKG5hbWUsIHByb3ZpZGVkRGlzcGxheU5hbWUoZW5kcG9pbnQsIGVudGl0aWVzKSksXG4gICAgICAuLi4oZmFtaWx5ID8geyBmYW1pbHkgfSA6IHt9KSxcbiAgICAgIC4uLih0cmltVG9VbmRlZmluZWQoZW5kcG9pbnQudGFzaykgPyB7IHRhc2s6IHRyaW1Ub1VuZGVmaW5lZChlbmRwb2ludC50YXNrKSB9IDoge30pLFxuICAgICAgLi4uKHRyaW1Ub1VuZGVmaW5lZChyZWNvcmQoZW5kcG9pbnQuc3RhdGUpLnJlYWR5KVxuICAgICAgICA/IHsgc3RhdGU6IHRyaW1Ub1VuZGVmaW5lZChyZWNvcmQoZW5kcG9pbnQuc3RhdGUpLnJlYWR5KSB9XG4gICAgICAgIDoge30pLFxuICAgICAgLi4uKGRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbiB9IDoge30pLFxuICAgICAgc3VwcG9ydHNUb29sczpcbiAgICAgICAgYm9vbGVhblZhbHVlKGNhcGFiaWxpdGllc1JlY29yZC5mdW5jdGlvbl9jYWxsaW5nKSA/PyBpZGVudGl0aWVzLnNvbWUoc3VwcG9ydHNUb29sc0J5RmFtaWx5KSxcbiAgICAgIHN1cHBvcnRzU3RydWN0dXJlZE91dHB1dDogaWRlbnRpdGllcy5zb21lKFxuICAgICAgICAoaWRlbnRpdHkpID0+IG1vZGVsQ2FwYWJpbGl0aWVzRm9yKGlkZW50aXR5KS5zdHJ1Y3R1cmVkT3V0cHV0LFxuICAgICAgKSxcbiAgICAgIC4uLihwcm9maWxlID8geyBwcm9maWxlIH0gOiB7fSksXG4gICAgICBzZXJ2aWNlTmFtZXM6IE9iamVjdC5hc3NpZ24oe30sIC4uLmlkZW50aXRpZXMubWFwKG1vZGVsU2VydmljZU5hbWVzKSksXG4gICAgICAuLi4obW9kZWxTZXJ2aWNlTmFtZSA/IHsgbW9kZWxTZXJ2aWNlTmFtZSB9IDoge30pLFxuICAgICAgLi4uKHJlYXNvbmluZ0VmZm9ydHMubGVuZ3RoID8geyByZWFzb25pbmdFZmZvcnRzIH0gOiB7fSksXG4gICAgICBzdGF0dXM6IG1vZGVsU3RhdHVzRm9yKC4uLmlkZW50aXRpZXMpLFxuICAgIH07XG4gICAgcmV0dXJuIFtzdW1tYXJ5XTtcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSBjbGFzc2lmeUVuZHBvaW50Q2xhc3NlcyhzdW1tYXJpZXMpO1xuICByZXR1cm4gc3VtbWFyaWVzLm1hcCgoc3VtbWFyeSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBjbGFzc2VzLmdldChzdW1tYXJ5Lm5hbWUpO1xuICAgIHJldHVybiBtb2RlbENsYXNzID8geyAuLi5zdW1tYXJ5LCBjbGFzczogbW9kZWxDbGFzcyB9IDogc3VtbWFyeTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYXNvbmluZ0VmZm9ydChcbiAgbGV2ZWw6IFJldHVyblR5cGU8dHlwZW9mIG1vZGVsUmVhc29uaW5nTGV2ZWxzRm9yPltudW1iZXJdLFxuKTogUmVhc29uaW5nRWZmb3J0IHtcbiAgcmV0dXJuIGxldmVsID09PSBcImV4dHJhLWhpZ2hcIiA/IFwieGhpZ2hcIiA6IGxldmVsO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlUmFua2VkKGxlZnQ6IFJhbmtlZE1vZGVsLCByaWdodDogUmFua2VkTW9kZWwsIHByZWZlclN5c3RlbU1vZGVsczogYm9vbGVhbik6IG51bWJlciB7XG4gIGNvbnN0IHNjb3JlID0gTWF0aC5yb3VuZCgobGVmdC5zY29yZSA/PyAwKSAqIDEwMDApIC0gTWF0aC5yb3VuZCgocmlnaHQuc2NvcmUgPz8gMCkgKiAxMDAwKTtcbiAgaWYgKHNjb3JlICE9PSAwKSByZXR1cm4gc2NvcmU7XG4gIGlmIChwcmVmZXJTeXN0ZW1Nb2RlbHMpIHtcbiAgICBjb25zdCBsZWZ0U3lzdGVtID0gaXNTeXN0ZW1Nb2RlbChsZWZ0LmVuZHBvaW50KTtcbiAgICBjb25zdCByaWdodFN5c3RlbSA9IGlzU3lzdGVtTW9kZWwocmlnaHQuZW5kcG9pbnQpO1xuICAgIGlmIChsZWZ0U3lzdGVtICE9PSByaWdodFN5c3RlbSkgcmV0dXJuIGxlZnRTeXN0ZW0gPyAtMSA6IDE7XG4gIH1cbiAgY29uc3QgbGVmdE9zcyA9IGlzT3BlbldlaWdodHNHcHQobGVmdC5lbmRwb2ludC5uYW1lKTtcbiAgY29uc3QgcmlnaHRPc3MgPSBpc09wZW5XZWlnaHRzR3B0KHJpZ2h0LmVuZHBvaW50Lm5hbWUpO1xuICBpZiAobGVmdE9zcyAhPT0gcmlnaHRPc3MpIHJldHVybiBsZWZ0T3NzID8gMSA6IC0xO1xuICBjb25zdCBsZWZ0VmVyc2lvbiA9IHZlcnNpb25UdXBsZShsZWZ0LmVuZHBvaW50Lm5hbWUpO1xuICBjb25zdCByaWdodFZlcnNpb24gPSB2ZXJzaW9uVHVwbGUocmlnaHQuZW5kcG9pbnQubmFtZSk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAzOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IHJpZ2h0VmVyc2lvbltpbmRleF0hIC0gbGVmdFZlcnNpb25baW5kZXhdITtcbiAgICBpZiAodmVyc2lvbiAhPT0gMCkgcmV0dXJuIHZlcnNpb247XG4gIH1cbiAgY29uc3QgdmFyaWFudCA9IG1vZGVsVmFyaWFudFJhbmsobGVmdC5lbmRwb2ludC5uYW1lKSAtIG1vZGVsVmFyaWFudFJhbmsocmlnaHQuZW5kcG9pbnQubmFtZSk7XG4gIGlmICh2YXJpYW50ICE9PSAwKSByZXR1cm4gdmFyaWFudDtcbiAgcmV0dXJuIE1PREVMX0NMQVNTX09SREVSLmluZGV4T2YobGVmdC5tb2RlbENsYXNzKSAtIE1PREVMX0NMQVNTX09SREVSLmluZGV4T2YocmlnaHQubW9kZWxDbGFzcyk7XG59XG5cbmZ1bmN0aW9uIHByZWZlclN5c3RlbUNhbmRpZGF0ZXMoY2FuZGlkYXRlczogcmVhZG9ubHkgUmFua2VkTW9kZWxbXSk6IFJhbmtlZE1vZGVsW10ge1xuICByZXR1cm4gW1xuICAgIC4uLmNhbmRpZGF0ZXMuZmlsdGVyKChjYW5kaWRhdGUpID0+IGlzU3lzdGVtTW9kZWwoY2FuZGlkYXRlLmVuZHBvaW50KSksXG4gICAgLi4uY2FuZGlkYXRlcy5maWx0ZXIoKGNhbmRpZGF0ZSkgPT4gIWlzU3lzdGVtTW9kZWwoY2FuZGlkYXRlLmVuZHBvaW50KSksXG4gIF07XG59XG5cbmZ1bmN0aW9uIGlzU3lzdGVtTW9kZWwoZW5kcG9pbnQ6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVuZHBvaW50Lm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwic3lzdGVtLmFpLlwiKTtcbn1cblxuZnVuY3Rpb24gbW9kZWxWYXJpYW50UmFuayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICBpZiAoIS8oPzpefFstXy5dKWdwdCg/OlstXy5dfCQpL2kudGVzdChuYW1lKSkgcmV0dXJuIDI7XG4gIGlmICgvKD86XnxbLV8uXSlzb2woPzpbLV8uXXwkKS9pLnRlc3QobmFtZSkpIHJldHVybiAwO1xuICBpZiAoLyg/Ol58Wy1fLl0pbHVuYSg/OlstXy5dfCQpL2kudGVzdChuYW1lKSkgcmV0dXJuIDE7XG4gIHJldHVybiAyO1xufVxuXG5mdW5jdGlvbiB0b2tlbml6ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvW2EtejAtOV0rL2cpID8/IFtdO1xufVxuXG5mdW5jdGlvbiBzZWFyY2hhYmxlVmFsdWVzKGVuZHBvaW50OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5KTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIGVuZHBvaW50Lm5hbWUsXG4gICAgZW5kcG9pbnQuZGlzcGxheU5hbWUsXG4gICAgZW5kcG9pbnQuZmFtaWx5LFxuICAgIGVuZHBvaW50Lm1vZGVsU2VydmljZU5hbWUsXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhlbmRwb2ludC5zZXJ2aWNlTmFtZXMgPz8ge30pLFxuICBdLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBtb2RlbFByb2ZpbGUoZW50aXR5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICBjb25zdCBzb3VyY2UgPSByZWNvcmQocmVjb3JkKGVudGl0eS5mb3VuZGF0aW9uX21vZGVsKS5haV9nYXRld2F5X21vZGVsX3Byb2ZpbGUpO1xuICBjb25zdCBxdWFsaXR5ID0gZmluaXRlTnVtYmVyKHNvdXJjZS5xdWFsaXR5KTtcbiAgY29uc3Qgc3BlZWQgPSBmaW5pdGVOdW1iZXIoc291cmNlLnNwZWVkKTtcbiAgY29uc3QgY29zdCA9IGZpbml0ZU51bWJlcihzb3VyY2UuY29zdCk7XG4gIGlmIChxdWFsaXR5ID09PSB1bmRlZmluZWQgJiYgc3BlZWQgPT09IHVuZGVmaW5lZCAmJiBjb3N0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uKHF1YWxpdHkgIT09IHVuZGVmaW5lZCA/IHsgcXVhbGl0eSB9IDoge30pLFxuICAgIC4uLihzcGVlZCAhPT0gdW5kZWZpbmVkID8geyBzcGVlZCB9IDoge30pLFxuICAgIC4uLihjb3N0ICE9PSB1bmRlZmluZWQgPyB7IGNvc3QgfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvdmlkZWREaXNwbGF5TmFtZShcbiAgZW5kcG9pbnQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBlbnRpdGllczogcmVhZG9ubHkgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgdGFnIG9mIGFycmF5VmFsdWUoZW5kcG9pbnQudGFncykubWFwKHJlY29yZCkpIHtcbiAgICBpZiAoIVtcImRpc3BsYXlfbmFtZVwiLCBcImRpc3BsYXlOYW1lXCIsIFwibmFtZVwiXS5pbmNsdWRlcyhTdHJpbmcodGFnLmtleSkpKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHRyaW1Ub1VuZGVmaW5lZCh0YWcudmFsdWUpO1xuICAgIGlmICh2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiAoXG4gICAgZW50aXRpZXNcbiAgICAgIC5tYXAoKGVudGl0eSkgPT4gdHJpbVRvVW5kZWZpbmVkKHJlY29yZChlbnRpdHkuZm91bmRhdGlvbl9tb2RlbCkuZGlzcGxheV9uYW1lKSlcbiAgICAgIC5maW5kKEJvb2xlYW4pID8/XG4gICAgZW50aXRpZXMubWFwKChlbnRpdHkpID0+IHRyaW1Ub1VuZGVmaW5lZChyZWNvcmQoZW50aXR5LmV4dGVybmFsX21vZGVsKS5uYW1lKSkuZmluZChCb29sZWFuKVxuICApO1xufVxuXG5mdW5jdGlvbiByZWNvcmQodmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiBpc1JlY29yZCh2YWx1ZSkgPyB2YWx1ZSA6IHt9O1xufVxuXG5mdW5jdGlvbiBhcnJheVZhbHVlKHZhbHVlOiB1bmtub3duKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcbn1cblxuZnVuY3Rpb24gZmluaXRlTnVtYmVyKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGJvb2xlYW5WYWx1ZSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIiA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuIl19
|
|
@@ -47,6 +47,8 @@ export interface ListServingEndpointsOptions {
|
|
|
47
47
|
* catalogue.
|
|
48
48
|
*/
|
|
49
49
|
cacheIdentity?: string;
|
|
50
|
+
/** Measure embedding vector dimensions during this catalogue load. Defaults to true. */
|
|
51
|
+
measureEmbeddingDimensions?: boolean;
|
|
50
52
|
}
|
|
51
53
|
/**
|
|
52
54
|
* List Model Serving endpoints for the workspace owning `client`, routed
|
package/lib/src/model-catalog.js
CHANGED
|
@@ -52,9 +52,10 @@ function cacheUserKey(identity) {
|
|
|
52
52
|
* @param options.ttlMs - Override the default TTL just for this call.
|
|
53
53
|
*/
|
|
54
54
|
export async function listServingEndpoints(client, host, options = {}) {
|
|
55
|
+
const measureDimensions = options.measureEmbeddingDimensions !== false;
|
|
55
56
|
if (!options.cacheIdentity)
|
|
56
|
-
return fetchEndpoints(client);
|
|
57
|
-
return (await getOrSet(catalogueCache, catalogueCacheKey(host, options.cacheIdentity), () => fetchEndpoints(client), {
|
|
57
|
+
return fetchEndpoints(client, measureDimensions);
|
|
58
|
+
return (await getOrSet(catalogueCache, catalogueCacheKey(host, options.cacheIdentity, measureDimensions), () => fetchEndpoints(client, measureDimensions), {
|
|
58
59
|
ttl: options.ttlMs ?? DEFAULT_MODEL_CACHE_TTL_MS,
|
|
59
60
|
returnCachedOnError: true,
|
|
60
61
|
cachedOnErrorTtl: "7d",
|
|
@@ -78,10 +79,10 @@ export async function listServingEndpointsUncached(client) {
|
|
|
78
79
|
}
|
|
79
80
|
return normalizeEndpoints(endpoints);
|
|
80
81
|
}
|
|
81
|
-
async function fetchEndpoints(client) {
|
|
82
|
+
async function fetchEndpoints(client, measureDimensions) {
|
|
82
83
|
const startedAt = Date.now();
|
|
83
84
|
const classified = stampModelClasses(await listServingEndpointsUncached(client));
|
|
84
|
-
const out = await measureEmbeddingDimensions(client, classified);
|
|
85
|
+
const out = measureDimensions ? await measureEmbeddingDimensions(client, classified) : classified;
|
|
85
86
|
logger.debug("listed", { count: out.length, elapsedMs: Date.now() - startedAt });
|
|
86
87
|
return out;
|
|
87
88
|
}
|
|
@@ -138,14 +139,22 @@ async function pingEmbeddingDimension(client, name) {
|
|
|
138
139
|
*/
|
|
139
140
|
export async function clearServingEndpointsCache(host, cacheIdentity) {
|
|
140
141
|
if (host && cacheIdentity) {
|
|
141
|
-
await
|
|
142
|
+
await Promise.all([
|
|
143
|
+
deleteCachedValue(catalogueCache, catalogueCacheKey(host, cacheIdentity, true)),
|
|
144
|
+
deleteCachedValue(catalogueCache, catalogueCacheKey(host, cacheIdentity, false)),
|
|
145
|
+
]);
|
|
142
146
|
}
|
|
143
147
|
else {
|
|
144
148
|
await catalogueCache.clear();
|
|
145
149
|
}
|
|
146
150
|
}
|
|
147
|
-
function catalogueCacheKey(host, cacheIdentity) {
|
|
148
|
-
return JSON.stringify([
|
|
151
|
+
function catalogueCacheKey(host, cacheIdentity, measureDimensions) {
|
|
152
|
+
return JSON.stringify([
|
|
153
|
+
CACHE_KEY_NAMESPACE,
|
|
154
|
+
host,
|
|
155
|
+
cacheUserKey(cacheIdentity),
|
|
156
|
+
measureDimensions ? "dimensions" : "chat-only",
|
|
157
|
+
]);
|
|
149
158
|
}
|
|
150
159
|
/**
|
|
151
160
|
* Result of fuzzy-resolving a user-supplied model name against the live
|
|
@@ -193,4 +202,4 @@ export function resolveModelId(input, endpoints, options = {}) {
|
|
|
193
202
|
}
|
|
194
203
|
return { modelId: input, matched: false };
|
|
195
204
|
}
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC1jYXRhbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFLTCxVQUFVLEdBQ1gsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBUzNDLDBHQUEwRztBQUMxRyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUV4RCx3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRTNDLGdFQUFnRTtBQUNoRSxNQUFNLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0FBQ2hELE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDO0FBbUIzQyxnRkFBZ0Y7QUFDaEYsU0FBUyxZQUFZLENBQUMsUUFBZ0I7SUFDcEMsT0FBTyxTQUFTLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sQ0FB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RUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0UsQ0FBQztJQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBMaXZlIERhdGFicmlja3MgTW9kZWwgU2VydmluZyBjYXRhbG9ndWUgYWNjZXNzLlxuICpcbiAqIExpc3RzIHRoZSB3b3Jrc3BhY2UncyBgL3NlcnZpbmctZW5kcG9pbnRzYCBhbmQsIHdoZW4gdGhlIGNhbGxlciBzdXBwbGllcyBhXG4gKiB0cnVzdGVkIGNyZWRlbnRpYWwgaWRlbnRpdHksIGNhY2hlcyB0aGUgcmVzdWx0IHBlciBob3N0IGFuZCBpZGVudGl0eSB3aXRoIGFcbiAqIFRUTCB2aWEgYEBkYngtdG9vbHMvY2FjaGVgLiBDb25jdXJyZW50IGNhbGxlcnMgaW4gdGhlIHNhbWUgc2NvcGUgc2hhcmVcbiAqIG9uZSBpbi1mbGlnaHQgcHJvbWlzZS4gU3VyZmFjZXMgZWFjaCBlbmRwb2ludCBhcyBhIHN0YWJsZVxuICoge0BsaW5rIFNlcnZpbmdFbmRwb2ludFN1bW1hcnl9IC0gaW5jbHVkaW5nIHRoZSBGb3VuZGF0aW9uIE1vZGVsIEFQSVxuICogYHF1YWxpdHlgIC8gYHNwZWVkYCAvIGBjb3N0YCBwcm9maWxlIHdoZW4gcHJlc2VudCwgdGhlIGNsYXNzaWZpZWRcbiAqIHtAbGluayBNb2RlbENsYXNzfSwgYW5kIChmb3IgZW1iZWRkaW5nIGVuZHBvaW50cykgdGhlIG1lYXN1cmVkIHZlY3RvclxuICogYGRpbWVuc2lvbmAgLSBhbmQgc25hcHMgbG9vc2UsIGh1bWFuLXR5cGVkIG5hbWVzIHRvIHJlYWwgZW5kcG9pbnQgaWRzXG4gKiB0aHJvdWdoIHRoZSBUeXBlU2NyaXB0IG1vZGVsIHJhbmtlciBzbyB0b2tlbnMgbGlrZSBgXCJjbGF1ZGUgc29ubmV0XCJgIHJlc29sdmUgdG9cbiAqIGBkYXRhYnJpY2tzLWNsYXVkZS1zb25uZXQtNC02YC5cbiAqXG4gKiBUaGUgY2xhc3Mgc3RhbXAgYW5kIGVtYmVkZGluZyBkaW1lbnNpb24gYXJlIGNvbXB1dGVkIG9uY2UgcGVyIGNhY2hlIGxvYWQ6XG4gKiBldmVyeSBlbWJlZGRpbmcgZW5kcG9pbnQgaXMgXCJwaW5nZWRcIiBpbiBwYXJhbGxlbCBhbmQgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAqIGxlbmd0aCByZWNvcmRlZCwgc28gdGhlIGNvc3QgaXMgcGFpZCBvbiBhIGNhY2hlIG1pc3MsIG5vdCBwZXIgcmVhZC4gVGhlIHBpbmdcbiAqIGlzIGJlc3QtZWZmb3J0IC0gYSBmYWlsdXJlIGxvZ3MgYXQgZGVidWcgYW5kIGxlYXZlcyBgZGltZW5zaW9uYCB1bnNldCByYXRoZXJcbiAqIHRoYW4gZmFpbGluZyB0aGUgd2hvbGUgbGlzdGluZy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgYXBwa2l0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBkZWxldGVDYWNoZWRWYWx1ZSwgZ2V0T3JTZXQgfSBmcm9tIFwiQGRieC10b29scy9jYWNoZVwiO1xuaW1wb3J0IHsgbG9nLCB0b0Vycm9yIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgUmVzb2x2ZWRNb2RlbCxcbiAgdHlwZSBSZXNvbHZlTW9kZWxPcHRpb25zLFxuICB0eXBlIFNjb3JlZEVuZHBvaW50LFxuICB0eXBlIFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG4gIE1vZGVsQ2xhc3MsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuXG5pbXBvcnQgeyBtb2RlbENhdGFsb2d1ZUNhY2hlIH0gZnJvbSBcIi4vX2NhY2hlLnRzXCI7XG5pbXBvcnQgeyBjbGFzc2lmeUVuZHBvaW50Q2xhc3Nlcywgbm9ybWFsaXplRW5kcG9pbnRzLCByYW5rRW5kcG9pbnRzIH0gZnJvbSBcIi4vX3JhbmtpbmcudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1vZGVsL3NlcnZpbmdcIik7XG5cbi8qKlxuICogU3RydWN0dXJhbCB0eXBlIGZvciB0aGUgRGF0YWJyaWNrcyB3b3Jrc3BhY2UgY2xpZW50LCByZS1leHBvcnRlZCBzbyB0aGUgcmVzdFxuICogb2YgdGhpcyBwYWNrYWdlIGNhbiBrZWVwIGltcG9ydGluZyBpdCBmcm9tIGhlcmUuIFNlZVxuICogYGFwcGtpdC5Xb3Jrc3BhY2VDbGllbnRMaWtlYCAobm9kZS1hcHBraXQpIGZvciB0aGUgY2Fub25pY2FsIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtzcGFjZUNsaWVudExpa2UgPSBQaWNrPGFwcGtpdC5Xb3Jrc3BhY2VDbGllbnRMaWtlLCBcInNlcnZpbmdFbmRwb2ludHNcIj47XG5cbi8qKiBEZWZhdWx0IFRUTCBmb3IgdGhlIGluLW1lbW9yeSBlbmRwb2ludCBjYWNoZS4gTWF0Y2hlcyB0aGUgRGF0YWJyaWNrcyBTREsncyBzZXNzaW9uIGxpZmV0aW1lIGJ1ZGdldC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX01PREVMX0NBQ0hFX1RUTF9NUyA9IDUgKiA2MCAqIDEwMDA7XG5cbi8qKiBEZWZhdWx0IGZ1enp5IGRpc3RhbmNlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBhIG1hdGNoIGlzIGFjY2VwdGVkLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRlVaWllfVEhSRVNIT0xEID0gMC40O1xuXG4vKiogQ2FjaGUga2V5IHBhcnRzIHVuZGVyIHdoaWNoIGVuZHBvaW50IGxpc3RpbmdzIGFyZSBzdG9yZWQuICovXG5jb25zdCBDQUNIRV9LRVlfTkFNRVNQQUNFID0gXCJzZXJ2aW5nLWVuZHBvaW50c1wiO1xuY29uc3QgY2F0YWxvZ3VlQ2FjaGUgPSBtb2RlbENhdGFsb2d1ZUNhY2hlO1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIGxpc3RTZXJ2aW5nRW5kcG9pbnRzfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFNlcnZpbmdFbmRwb2ludHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGNhY2hlIFRUTCBmb3IgdGhpcyBjYWxsLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICB0dGxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRydXN0ZWQgaWRlbnRpdHkgb2YgdGhlIGNyZWRlbnRpYWwgdXNlZCBieSBgY2xpZW50YC5cbiAgICpcbiAgICogVGhlIHZhbHVlIGlzIGhhc2hlZCBiZWZvcmUgaXQgZW50ZXJzIHRoZSBjYWNoZSBrZXkgYW5kIGlzIG5ldmVyIGxvZ2dlZC5cbiAgICogT21pdCBpdCB3aGVuIHRoZSBjYWxsZXIgY2Fubm90IHByb3ZlIHRoZSBjcmVkZW50aWFsIGlkZW50aXR5OyB0aGF0IGNhbGxcbiAgICogYnlwYXNzZXMgc2hhcmVkIGNhY2hpbmcgc28gb25lIHByaW5jaXBhbCBjYW4gbmV2ZXIgcmVhZCBhbm90aGVyJ3NcbiAgICogY2F0YWxvZ3VlLlxuICAgKi9cbiAgY2FjaGVJZGVudGl0eT86IHN0cmluZztcbn1cblxuLyoqIEhhc2ggYW4gb3BhcXVlIGNyZWRlbnRpYWwgaWRlbnRpdHkgYmVmb3JlIGhhbmRpbmcgaXQgdG8gdGhlIHNoYXJlZCBjYWNoZS4gKi9cbmZ1bmN0aW9uIGNhY2hlVXNlcktleShpZGVudGl0eTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBtb2RlbC0ke2NyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGlkZW50aXR5KS5kaWdlc3QoXCJoZXhcIil9YDtcbn1cblxuLyoqXG4gKiBMaXN0IE1vZGVsIFNlcnZpbmcgZW5kcG9pbnRzIGZvciB0aGUgd29ya3NwYWNlIG93bmluZyBgY2xpZW50YCwgcm91dGVkXG4gKiB0aHJvdWdoIHRoZSBzaGFyZWQgbWVtb3J5LWZpcnN0IGNhY2hlLCBpbmNsdWRpbmcgcGVyLWVudHJ5IFRUTCwgaW4tZmxpZ2h0XG4gKiByZXF1ZXN0IGNvYWxlc2NpbmcsIGJvdW5kZWQgcHJvY2VzcyBtZW1vcnksIGFuZCBwb3J0YWJsZSBwZXJzaXN0ZW5jZS5cbiAqXG4gKiBSZXR1cm5zIHBsYWluIHtAbGluayBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5fSBvYmplY3RzIChhIHN0YWJsZSBzdWJzZXQgb2YgdGhlXG4gKiBTREsgdHlwZSkgc28gY2FjaGUgaGl0cyBuZXZlciBleHBvc2Ugc3RhbGUgU0RLIGludGVybmFscy5cbiAqXG4gKiBAcGFyYW0gaG9zdCAtIFdvcmtzcGFjZSBob3N0IHVzZWQgYXMgdGhlIGNhY2hlIGtleS4gUGFzcyB0aGUgdmFsdWUgcmVzb2x2ZWRcbiAqICAgZnJvbSBgY2xpZW50LmNvbmZpZy5nZXRIb3N0KClgIHNvIG11bHRpLWhvc3QgYXBwcyBzaGFyZSBvbmUgZW50cnkgcGVyXG4gKiAgIHdvcmtzcGFjZS5cbiAqIEBwYXJhbSBvcHRpb25zLnR0bE1zIC0gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgVFRMIGp1c3QgZm9yIHRoaXMgY2FsbC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RTZXJ2aW5nRW5kcG9pbnRzKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudExpa2UsXG4gIGhvc3Q6IHN0cmluZyxcbiAgb3B0aW9uczogTGlzdFNlcnZpbmdFbmRwb2ludHNPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXT4ge1xuICBpZiAoIW9wdGlvbnMuY2FjaGVJZGVudGl0eSkgcmV0dXJuIGZldGNoRW5kcG9pbnRzKGNsaWVudCk7XG4gIHJldHVybiAoYXdhaXQgZ2V0T3JTZXQoXG4gICAgY2F0YWxvZ3VlQ2FjaGUsXG4gICAgY2F0YWxvZ3VlQ2FjaGVLZXkoaG9zdCwgb3B0aW9ucy5jYWNoZUlkZW50aXR5KSxcbiAgICAoKSA9PiBmZXRjaEVuZHBvaW50cyhjbGllbnQpLFxuICAgIHtcbiAgICAgIHR0bDogb3B0aW9ucy50dGxNcyA/PyBERUZBVUxUX01PREVMX0NBQ0hFX1RUTF9NUyxcbiAgICAgIHJldHVybkNhY2hlZE9uRXJyb3I6IHRydWUsXG4gICAgICBjYWNoZWRPbkVycm9yVHRsOiBcIjdkXCIsXG4gICAgICB0aHJvd0Vycm9yczogdHJ1ZSxcbiAgICB9LFxuICApKSE7XG59XG5cbi8qKlxuICogTGlzdCB0aGUgd29ya3NwYWNlJ3Mgc2VydmluZyBlbmRwb2ludHMgYXMgbWluaW1hbFxuICoge0BsaW5rIFNlcnZpbmdFbmRwb2ludFN1bW1hcnl9IG9iamVjdHMgc3RyYWlnaHQgZnJvbSB0aGUgU0RLOiBubyBjYWNoaW5nLCBhbmRcbiAqIG5vbmUgb2YgdGhlIGNhY2hlLWxvYWQgZW5yaWNobWVudCAoe0BsaW5rIGxpc3RTZXJ2aW5nRW5kcG9pbnRzfSBhZGRzIHRoZVxuICoge0BsaW5rIE1vZGVsQ2xhc3N9IHN0YW1wIGFuZCB0aGUgZW1iZWRkaW5nLWRpbWVuc2lvbiBwcm9iZSkuIFVzZSB0aGlzIGZvciBhXG4gKiBvbmUtc2hvdCwgZGVwZW5kZW5jeS1saWdodCBsaXN0aW5nIC0gZS5nLiBhIENMSSB0aGF0IG9ubHkgbmVlZHMgbmFtZXMvdGFza3NcbiAqIGZvciBmdXp6eSByZXNvbHV0aW9uIGFuZCBkb2Vzbid0IHdhbnQgc2hhcmVkIGNhY2hlIHBlcnNpc3RlbmNlIG9yIHRoZVxuICogcGVyLWVtYmVkZGluZyBwaW5nIGNvc3QuIFByZWZlciB7QGxpbmsgbGlzdFNlcnZpbmdFbmRwb2ludHN9IGZvciB0aGUgY2FjaGVkLFxuICogZW5yaWNoZWQgdmlldy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RTZXJ2aW5nRW5kcG9pbnRzVW5jYWNoZWQoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50TGlrZSxcbik6IFByb21pc2U8U2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPiB7XG4gIGNvbnN0IGVuZHBvaW50czogdW5rbm93bltdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgZXAgb2YgY2xpZW50LnNlcnZpbmdFbmRwb2ludHMubGlzdCgpKSB7XG4gICAgZW5kcG9pbnRzLnB1c2goZXApO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVFbmRwb2ludHMoZW5kcG9pbnRzKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hFbmRwb2ludHMoY2xpZW50OiBXb3Jrc3BhY2VDbGllbnRMaWtlKTogUHJvbWlzZTxTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10+IHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgY2xhc3NpZmllZCA9IHN0YW1wTW9kZWxDbGFzc2VzKGF3YWl0IGxpc3RTZXJ2aW5nRW5kcG9pbnRzVW5jYWNoZWQoY2xpZW50KSk7XG4gIGNvbnN0IG91dCA9IGF3YWl0IG1lYXN1cmVFbWJlZGRpbmdEaW1lbnNpb25zKGNsaWVudCwgY2xhc3NpZmllZCk7XG4gIGxvZ2dlci5kZWJ1ZyhcImxpc3RlZFwiLCB7IGNvdW50OiBvdXQubGVuZ3RoLCBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQgfSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogU3RhbXAgZWFjaCBzdW1tYXJ5J3Mge0BsaW5rIFNlcnZpbmdFbmRwb2ludFN1bW1hcnkuY2xhc3N9IGZyb20gdGhlIHJlbGF0aXZlXG4gKiBjbGFzc2lmaWNhdGlvbiBvZiB0aGUgd2hvbGUgc2V0LiBFbmRwb2ludHMgdGhlIGNsYXNzaWZpZXIgZG9lc24ndCByZWNvZ25pemVcbiAqIChjdXN0b20sIHVuc2NvcmVkLCBub24tTExNKSBhcmUgbGVmdCB3aXRob3V0IGEgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIHN0YW1wTW9kZWxDbGFzc2VzKHN1bW1hcmllczogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdKTogU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdIHtcbiAgY29uc3QgY2xhc3NPZiA9IGNsYXNzaWZ5RW5kcG9pbnRDbGFzc2VzKHN1bW1hcmllcyk7XG4gIHJldHVybiBzdW1tYXJpZXMubWFwKChzdW1tYXJ5KSA9PiB7XG4gICAgY29uc3QgY2xzID0gY2xhc3NPZi5nZXQoc3VtbWFyeS5uYW1lKTtcbiAgICByZXR1cm4gY2xzID09PSB1bmRlZmluZWQgPyBzdW1tYXJ5IDogeyAuLi5zdW1tYXJ5LCBjbGFzczogY2xzIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIE1lYXN1cmUgdGhlIGVtYmVkZGluZyB2ZWN0b3IgZGltZW5zaW9uIG9mIGV2ZXJ5IHtAbGluayBNb2RlbENsYXNzLkVtYmVkZGluZ31cbiAqIGVuZHBvaW50IGJ5IHBpbmdpbmcgaXQgb25jZSwgYWxsIGluIHBhcmFsbGVsLiBSdW5zIG9ubHkgb24gYSBjYWNoZSBtaXNzIChpdCdzXG4gKiBjYWxsZWQgZnJvbSB7QGxpbmsgZmV0Y2hFbmRwb2ludHN9KSwgc28gdGhlIHByb2JlIGNvc3QgaXMgYW1vcnRpemVkIGFjcm9zcyB0aGVcbiAqIGNhY2hlZCBUVEwgd2luZG93LiBQZXItZW5kcG9pbnQgZmFpbHVyZXMgYXJlIHN3YWxsb3dlZCAobG9nZ2VkIGF0IHdhcm4pIHNvIG9uZVxuICogdW5yZWFjaGFibGUgZW1iZWRkaW5nIG1vZGVsIG5ldmVyIGZhaWxzIHRoZSBsaXN0aW5nLlxuICovXG5hc3luYyBmdW5jdGlvbiBtZWFzdXJlRW1iZWRkaW5nRGltZW5zaW9ucyhcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnRMaWtlLFxuICBzdW1tYXJpZXM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbik6IFByb21pc2U8U2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPiB7XG4gIHJldHVybiBQcm9taXNlLmFsbChcbiAgICBzdW1tYXJpZXMubWFwKGFzeW5jIChzdW1tYXJ5KSA9PiB7XG4gICAgICBpZiAoc3VtbWFyeS5jbGFzcyAhPT0gTW9kZWxDbGFzcy5FbWJlZGRpbmcpIHJldHVybiBzdW1tYXJ5O1xuICAgICAgY29uc3QgZGltZW5zaW9uID0gYXdhaXQgcGluZ0VtYmVkZGluZ0RpbWVuc2lvbihjbGllbnQsIHN1bW1hcnkubmFtZSk7XG4gICAgICByZXR1cm4gZGltZW5zaW9uID09PSB1bmRlZmluZWQgPyBzdW1tYXJ5IDogeyAuLi5zdW1tYXJ5LCBkaW1lbnNpb24gfTtcbiAgICB9KSxcbiAgKTtcbn1cblxuLyoqXG4gKiBCZXN0LWVmZm9ydCBlbWJlZGRpbmcgZGltZW5zaW9uIHByb2JlOiBxdWVyeSBgbmFtZWAgd2l0aCBhIHRpbnkgYFwicGluZ1wiYFxuICogaW5wdXQgYW5kIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSByZXR1cm5lZCB2ZWN0b3IuIFJldHVybnMgYHVuZGVmaW5lZGAgKGFuZFxuICogbG9ncyBhdCB3YXJuKSB3aGVuIHRoZSBlbmRwb2ludCBjYW4ndCBiZSBxdWVyaWVkIG9yIHJldHVybnMgbm8gdmVjdG9yIC0gdGhlXG4gKiBkaW1lbnNpb24gaXMgaW5mb3JtYXRpb25hbCwgbmV2ZXIgcmVxdWlyZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHBpbmdFbWJlZGRpbmdEaW1lbnNpb24oXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50TGlrZSxcbiAgbmFtZTogc3RyaW5nLFxuKTogUHJvbWlzZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5zZXJ2aW5nRW5kcG9pbnRzLnF1ZXJ5KHsgbmFtZSwgaW5wdXQ6IFwicGluZ1wiIH0pO1xuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHJlc3BvbnNlLmRhdGE/LlswXT8uZW1iZWRkaW5nPy5sZW5ndGg7XG4gICAgaWYgKHR5cGVvZiBkaW1lbnNpb24gPT09IFwibnVtYmVyXCIgJiYgZGltZW5zaW9uID4gMCkgcmV0dXJuIGRpbWVuc2lvbjtcbiAgICBsb2dnZXIud2FybihcImVtYmVkZGluZyBwaW5nIHJldHVybmVkIG5vIHZlY3RvclwiLCB7IG5hbWUgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJlbWJlZGRpbmcgcGluZyBmYWlsZWRcIiwgeyBuYW1lLCBlcnJvcjogdG9FcnJvcihlcnIpIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3JjZS1ldmljdCBjYWNoZWQgZW5kcG9pbnQgbGlzdGluZ3MuIEEgaG9zdCBhbmQgaWRlbnRpdHkgZGVsZXRlIG9ubHkgdGhhdFxuICogcHJpbmNpcGFsJ3Mgd29ya3NwYWNlIGVudHJ5LiBPbWl0dGluZyBlaXRoZXIgdmFsdWUgY2xlYXJzIHRoaXMgY2F0YWxvZ3VlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xlYXJTZXJ2aW5nRW5kcG9pbnRzQ2FjaGUoXG4gIGhvc3Q/OiBzdHJpbmcsXG4gIGNhY2hlSWRlbnRpdHk/OiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGhvc3QgJiYgY2FjaGVJZGVudGl0eSkge1xuICAgIGF3YWl0IGRlbGV0ZUNhY2hlZFZhbHVlKGNhdGFsb2d1ZUNhY2hlLCBjYXRhbG9ndWVDYWNoZUtleShob3N0LCBjYWNoZUlkZW50aXR5KSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgY2F0YWxvZ3VlQ2FjaGUuY2xlYXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXRhbG9ndWVDYWNoZUtleShob3N0OiBzdHJpbmcsIGNhY2hlSWRlbnRpdHk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShbQ0FDSEVfS0VZX05BTUVTUEFDRSwgaG9zdCwgY2FjaGVVc2VyS2V5KGNhY2hlSWRlbnRpdHkpXSk7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGZ1enp5LXJlc29sdmluZyBhIHVzZXItc3VwcGxpZWQgbW9kZWwgbmFtZSBhZ2FpbnN0IHRoZSBsaXZlXG4gKiBlbmRwb2ludCBsaXN0LiBgc2NvcmVgIGlzIHRoZSByYW5rZXIncyBkaXN0YW5jZSAoYDBgIGlzIGV4YWN0LCBgMWAgaXMgbm8gbWF0Y2gpO1xuICogYG1hdGNoZWRgIGlzIGBmYWxzZWAgd2hlbiB0aGUgc2NvcmUgZXhjZWVkcyB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQgc29cbiAqIGNhbGxlcnMgY2FuIGZhbGwgYmFjayB0byB0aGUgb3JpZ2luYWwgaW5wdXQgKERhdGFicmlja3Mgd2lsbCB0aGVuIHJldHVybiBhXG4gKiBjbGVhbiA0MDQpLlxuICovXG4vKipcbiAqIEZ1enp5LXJhbmsgZW5kcG9pbnRzIGJ5IGhvdyBjbG9zZWx5IHRoZWlyIGBuYW1lYCBtYXRjaGVzIGBpbnB1dGAsIGJlc3RcbiAqIChsb3dlc3Qgc2NvcmUpIGZpcnN0LCBrZWVwaW5nIG9ubHkgdGhvc2Ugd2l0aGluIGB0aHJlc2hvbGRgOlxuICpcbiAqIDEuIEFuIGV4YWN0IG5hbWUgbWF0Y2ggc2hvcnQtY2lyY3VpdHMgdG8gYSBzaW5nbGUgYHNjb3JlOiAwYCByZXN1bHQuXG4gKiAyLiBPdGhlcndpc2UgdGhlIHNoYXJlZCBUeXBlU2NyaXB0IHBvbGljeSB0b2tlbml6ZXMgYW5kIHNjb3JlcyBldmVyeSBlbmRwb2ludCB0aHJvdWdoIHRoZVxuICogICAgc2FtZSBmdXp6eS1kaXN0YW5jZSBwb2xpY3kgdXNlZCBieSB7QGxpbmsgbG9va3VwTW9kZWxzfS5cbiAqXG4gKiBSZXR1cm5zIGBbXWAgZm9yIGFuIGVtcHR5IGVuZHBvaW50IGxpc3Qgb3Igd2hlbiBgaW5wdXRgIHRva2VuaXplcyB0byBub3RoaW5nLFxuICogc28gY2FsbGVycyBmYWxsIGJhY2sgdG8gdGhlIHJhdyBpbnB1dCBhbmQgbGV0IERhdGFicmlja3Mgc3VyZmFjZSBhIGNsZWFuIDQwNC5cbiAqIFRoaXMgbXVsdGktcmVzdWx0IGNvcmUgaXMgc2hhcmVkIGJ5IHtAbGluayByZXNvbHZlTW9kZWxJZH0gKHNpbmdsZSBiZXN0KSBhbmRcbiAqIHRoZSByYW5rZWQgYGxvb2t1cE1vZGVsc2Agc2VsZWN0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hTZXJ2aW5nRW5kcG9pbnRzKFxuICBpbnB1dDogc3RyaW5nLFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbiAgb3B0aW9uczogUmVzb2x2ZU1vZGVsT3B0aW9ucyA9IHt9LFxuKTogU2NvcmVkRW5kcG9pbnRbXSB7XG4gIGlmIChlbmRwb2ludHMubGVuZ3RoID09PSAwIHx8ICFpbnB1dC50cmltKCkpIHJldHVybiBbXTtcbiAgcmV0dXJuIHJhbmtFbmRwb2ludHMoXG4gICAgZW5kcG9pbnRzLFxuICAgIHtcbiAgICAgIHNlYXJjaDogaW5wdXQsXG4gICAgICAuLi4ob3B0aW9ucy5yZXF1aXJlc1Rvb2xzICE9PSB1bmRlZmluZWQgPyB7IHJlcXVpcmVzVG9vbHM6IG9wdGlvbnMucmVxdWlyZXNUb29scyB9IDoge30pLFxuICAgICAgdGhyZXNob2xkOiBvcHRpb25zLnRocmVzaG9sZCA/PyBERUZBVUxUX0ZVWlpZX1RIUkVTSE9MRCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGluY2x1ZGVEZXByZWNhdGVkOiB0cnVlLFxuICAgICAgdGFzazogXCJsbG0vdjEvY2hhdFwiLFxuICAgIH0sXG4gICkubWFwKChyYW5rZWQpID0+ICh7IGVuZHBvaW50OiByYW5rZWQuZW5kcG9pbnQsIHNjb3JlOiByYW5rZWQuc2NvcmUgPz8gMCB9KSk7XG59XG5cbi8qKlxuICogU25hcCBhIHVzZXItc3VwcGxpZWQgbW9kZWwgbmFtZSB0byB0aGUgc2luZ2xlIGNsb3Nlc3QgY29uZmlndXJlZCBzZXJ2aW5nXG4gKiBlbmRwb2ludCB2aWEge0BsaW5rIHNlYXJjaFNlcnZpbmdFbmRwb2ludHN9LiBSZXR1cm5zIHRoZSBpbnB1dCB1bmNoYW5nZWQgd2l0aFxuICogYG1hdGNoZWQ6IGZhbHNlYCB3aGVuIG5vdGhpbmcgc2NvcmVzIHdpdGhpbiB0aGUgdGhyZXNob2xkIChvciB0aGUgY2F0YWxvZ3VlXG4gKiBpcyBlbXB0eSksIHNvIGEgZGVsaWJlcmF0ZSBtb2RlbCBpZCBpcyBuZXZlciBzaWxlbnRseSByZXdyaXR0ZW4gdG8gYVxuICogc2ltaWxhci1sb29raW5nIG5laWdoYm91ciBhbmQgdGhlIHVwc3RyZWFtIGNhbGwgc3VyZmFjZXMgdGhlIGNhbm9uaWNhbCA0MDQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWxJZChcbiAgaW5wdXQ6IHN0cmluZyxcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4gIG9wdGlvbnM6IFJlc29sdmVNb2RlbE9wdGlvbnMgPSB7fSxcbik6IFJlc29sdmVkTW9kZWwge1xuICBjb25zdCBbYmVzdF0gPSBzZWFyY2hTZXJ2aW5nRW5kcG9pbnRzKGlucHV0LCBlbmRwb2ludHMsIG9wdGlvbnMpO1xuICBpZiAoYmVzdCkge1xuICAgIHJldHVybiB7IG1vZGVsSWQ6IGJlc3QuZW5kcG9pbnQubmFtZSwgbWF0Y2hlZDogdHJ1ZSwgc2NvcmU6IGJlc3Quc2NvcmUgfTtcbiAgfVxuICByZXR1cm4geyBtb2RlbElkOiBpbnB1dCwgbWF0Y2hlZDogZmFsc2UgfTtcbn1cbiJdfQ==
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC1jYXRhbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFLTCxVQUFVLEdBQ1gsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBUzNDLDBHQUEwRztBQUMxRyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUV4RCx3RUFBd0U7QUFDeEUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRTNDLGdFQUFnRTtBQUNoRSxNQUFNLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0FBQ2hELE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDO0FBcUIzQyxnRkFBZ0Y7QUFDaEYsU0FBUyxZQUFZLENBQUMsUUFBZ0I7SUFDcEMsT0FBTyxTQUFTLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sQ0FB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QUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsS0FBYSxFQUNiLFNBQTRDLEVBQzVDLFVBQStCLEVBQUU7SUFFakMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNFLENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTGl2ZSBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgY2F0YWxvZ3VlIGFjY2Vzcy5cbiAqXG4gKiBMaXN0cyB0aGUgd29ya3NwYWNlJ3MgYC9zZXJ2aW5nLWVuZHBvaW50c2AgYW5kLCB3aGVuIHRoZSBjYWxsZXIgc3VwcGxpZXMgYVxuICogdHJ1c3RlZCBjcmVkZW50aWFsIGlkZW50aXR5LCBjYWNoZXMgdGhlIHJlc3VsdCBwZXIgaG9zdCBhbmQgaWRlbnRpdHkgd2l0aCBhXG4gKiBUVEwgdmlhIGBAZGJ4LXRvb2xzL2NhY2hlYC4gQ29uY3VycmVudCBjYWxsZXJzIGluIHRoZSBzYW1lIHNjb3BlIHNoYXJlXG4gKiBvbmUgaW4tZmxpZ2h0IHByb21pc2UuIFN1cmZhY2VzIGVhY2ggZW5kcG9pbnQgYXMgYSBzdGFibGVcbiAqIHtAbGluayBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5fSAtIGluY2x1ZGluZyB0aGUgRm91bmRhdGlvbiBNb2RlbCBBUElcbiAqIGBxdWFsaXR5YCAvIGBzcGVlZGAgLyBgY29zdGAgcHJvZmlsZSB3aGVuIHByZXNlbnQsIHRoZSBjbGFzc2lmaWVkXG4gKiB7QGxpbmsgTW9kZWxDbGFzc30sIGFuZCAoZm9yIGVtYmVkZGluZyBlbmRwb2ludHMpIHRoZSBtZWFzdXJlZCB2ZWN0b3JcbiAqIGBkaW1lbnNpb25gIC0gYW5kIHNuYXBzIGxvb3NlLCBodW1hbi10eXBlZCBuYW1lcyB0byByZWFsIGVuZHBvaW50IGlkc1xuICogdGhyb3VnaCB0aGUgVHlwZVNjcmlwdCBtb2RlbCByYW5rZXIgc28gdG9rZW5zIGxpa2UgYFwiY2xhdWRlIHNvbm5ldFwiYCByZXNvbHZlIHRvXG4gKiBgZGF0YWJyaWNrcy1jbGF1ZGUtc29ubmV0LTQtNmAuXG4gKlxuICogVGhlIGNsYXNzIHN0YW1wIGFuZCBlbWJlZGRpbmcgZGltZW5zaW9uIGFyZSBjb21wdXRlZCBvbmNlIHBlciBjYWNoZSBsb2FkOlxuICogZXZlcnkgZW1iZWRkaW5nIGVuZHBvaW50IGlzIFwicGluZ2VkXCIgaW4gcGFyYWxsZWwgYW5kIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gKiBsZW5ndGggcmVjb3JkZWQsIHNvIHRoZSBjb3N0IGlzIHBhaWQgb24gYSBjYWNoZSBtaXNzLCBub3QgcGVyIHJlYWQuIFRoZSBwaW5nXG4gKiBpcyBiZXN0LWVmZm9ydCAtIGEgZmFpbHVyZSBsb2dzIGF0IGRlYnVnIGFuZCBsZWF2ZXMgYGRpbWVuc2lvbmAgdW5zZXQgcmF0aGVyXG4gKiB0aGFuIGZhaWxpbmcgdGhlIHdob2xlIGxpc3RpbmcuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZGVsZXRlQ2FjaGVkVmFsdWUsIGdldE9yU2V0IH0gZnJvbSBcIkBkYngtdG9vbHMvY2FjaGVcIjtcbmltcG9ydCB7IGxvZywgdG9FcnJvciB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICB0eXBlIFJlc29sdmVkTW9kZWwsXG4gIHR5cGUgUmVzb2x2ZU1vZGVsT3B0aW9ucyxcbiAgdHlwZSBTY29yZWRFbmRwb2ludCxcbiAgdHlwZSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxuICBNb2RlbENsYXNzLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxuaW1wb3J0IHsgbW9kZWxDYXRhbG9ndWVDYWNoZSB9IGZyb20gXCIuL19jYWNoZS50c1wiO1xuaW1wb3J0IHsgY2xhc3NpZnlFbmRwb2ludENsYXNzZXMsIG5vcm1hbGl6ZUVuZHBvaW50cywgcmFua0VuZHBvaW50cyB9IGZyb20gXCIuL19yYW5raW5nLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtb2RlbC9zZXJ2aW5nXCIpO1xuXG4vKipcbiAqIFN0cnVjdHVyYWwgdHlwZSBmb3IgdGhlIERhdGFicmlja3Mgd29ya3NwYWNlIGNsaWVudCwgcmUtZXhwb3J0ZWQgc28gdGhlIHJlc3RcbiAqIG9mIHRoaXMgcGFja2FnZSBjYW4ga2VlcCBpbXBvcnRpbmcgaXQgZnJvbSBoZXJlLiBTZWVcbiAqIGBhcHBraXQuV29ya3NwYWNlQ2xpZW50TGlrZWAgKG5vZGUtYXBwa2l0KSBmb3IgdGhlIGNhbm9uaWNhbCBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2VDbGllbnRMaWtlID0gUGljazxhcHBraXQuV29ya3NwYWNlQ2xpZW50TGlrZSwgXCJzZXJ2aW5nRW5kcG9pbnRzXCI+O1xuXG4vKiogRGVmYXVsdCBUVEwgZm9yIHRoZSBpbi1tZW1vcnkgZW5kcG9pbnQgY2FjaGUuIE1hdGNoZXMgdGhlIERhdGFicmlja3MgU0RLJ3Mgc2Vzc2lvbiBsaWZldGltZSBidWRnZXQuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9NT0RFTF9DQUNIRV9UVExfTVMgPSA1ICogNjAgKiAxMDAwO1xuXG4vKiogRGVmYXVsdCBmdXp6eSBkaXN0YW5jZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggYSBtYXRjaCBpcyBhY2NlcHRlZC4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZVWlpZX1RIUkVTSE9MRCA9IDAuNDtcblxuLyoqIENhY2hlIGtleSBwYXJ0cyB1bmRlciB3aGljaCBlbmRwb2ludCBsaXN0aW5ncyBhcmUgc3RvcmVkLiAqL1xuY29uc3QgQ0FDSEVfS0VZX05BTUVTUEFDRSA9IFwic2VydmluZy1lbmRwb2ludHNcIjtcbmNvbnN0IGNhdGFsb2d1ZUNhY2hlID0gbW9kZWxDYXRhbG9ndWVDYWNoZTtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBsaXN0U2VydmluZ0VuZHBvaW50c30uICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RTZXJ2aW5nRW5kcG9pbnRzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgZGVmYXVsdCBjYWNoZSBUVEwgZm9yIHRoaXMgY2FsbCwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgdHRsTXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUcnVzdGVkIGlkZW50aXR5IG9mIHRoZSBjcmVkZW50aWFsIHVzZWQgYnkgYGNsaWVudGAuXG4gICAqXG4gICAqIFRoZSB2YWx1ZSBpcyBoYXNoZWQgYmVmb3JlIGl0IGVudGVycyB0aGUgY2FjaGUga2V5IGFuZCBpcyBuZXZlciBsb2dnZWQuXG4gICAqIE9taXQgaXQgd2hlbiB0aGUgY2FsbGVyIGNhbm5vdCBwcm92ZSB0aGUgY3JlZGVudGlhbCBpZGVudGl0eTsgdGhhdCBjYWxsXG4gICAqIGJ5cGFzc2VzIHNoYXJlZCBjYWNoaW5nIHNvIG9uZSBwcmluY2lwYWwgY2FuIG5ldmVyIHJlYWQgYW5vdGhlcidzXG4gICAqIGNhdGFsb2d1ZS5cbiAgICovXG4gIGNhY2hlSWRlbnRpdHk/OiBzdHJpbmc7XG4gIC8qKiBNZWFzdXJlIGVtYmVkZGluZyB2ZWN0b3IgZGltZW5zaW9ucyBkdXJpbmcgdGhpcyBjYXRhbG9ndWUgbG9hZC4gRGVmYXVsdHMgdG8gdHJ1ZS4gKi9cbiAgbWVhc3VyZUVtYmVkZGluZ0RpbWVuc2lvbnM/OiBib29sZWFuO1xufVxuXG4vKiogSGFzaCBhbiBvcGFxdWUgY3JlZGVudGlhbCBpZGVudGl0eSBiZWZvcmUgaGFuZGluZyBpdCB0byB0aGUgc2hhcmVkIGNhY2hlLiAqL1xuZnVuY3Rpb24gY2FjaGVVc2VyS2V5KGlkZW50aXR5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYG1vZGVsLSR7Y3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoaWRlbnRpdHkpLmRpZ2VzdChcImhleFwiKX1gO1xufVxuXG4vKipcbiAqIExpc3QgTW9kZWwgU2VydmluZyBlbmRwb2ludHMgZm9yIHRoZSB3b3Jrc3BhY2Ugb3duaW5nIGBjbGllbnRgLCByb3V0ZWRcbiAqIHRocm91Z2ggdGhlIHNoYXJlZCBtZW1vcnktZmlyc3QgY2FjaGUsIGluY2x1ZGluZyBwZXItZW50cnkgVFRMLCBpbi1mbGlnaHRcbiAqIHJlcXVlc3QgY29hbGVzY2luZywgYm91bmRlZCBwcm9jZXNzIG1lbW9yeSwgYW5kIHBvcnRhYmxlIHBlcnNpc3RlbmNlLlxuICpcbiAqIFJldHVybnMgcGxhaW4ge0BsaW5rIFNlcnZpbmdFbmRwb2ludFN1bW1hcnl9IG9iamVjdHMgKGEgc3RhYmxlIHN1YnNldCBvZiB0aGVcbiAqIFNESyB0eXBlKSBzbyBjYWNoZSBoaXRzIG5ldmVyIGV4cG9zZSBzdGFsZSBTREsgaW50ZXJuYWxzLlxuICpcbiAqIEBwYXJhbSBob3N0IC0gV29ya3NwYWNlIGhvc3QgdXNlZCBhcyB0aGUgY2FjaGUga2V5LiBQYXNzIHRoZSB2YWx1ZSByZXNvbHZlZFxuICogICBmcm9tIGBjbGllbnQuY29uZmlnLmdldEhvc3QoKWAgc28gbXVsdGktaG9zdCBhcHBzIHNoYXJlIG9uZSBlbnRyeSBwZXJcbiAqICAgd29ya3NwYWNlLlxuICogQHBhcmFtIG9wdGlvbnMudHRsTXMgLSBPdmVycmlkZSB0aGUgZGVmYXVsdCBUVEwganVzdCBmb3IgdGhpcyBjYWxsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNlcnZpbmdFbmRwb2ludHMoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50TGlrZSxcbiAgaG9zdDogc3RyaW5nLFxuICBvcHRpb25zOiBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8U2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPiB7XG4gIGNvbnN0IG1lYXN1cmVEaW1lbnNpb25zID0gb3B0aW9ucy5tZWFzdXJlRW1iZWRkaW5nRGltZW5zaW9ucyAhPT0gZmFsc2U7XG4gIGlmICghb3B0aW9ucy5jYWNoZUlkZW50aXR5KSByZXR1cm4gZmV0Y2hFbmRwb2ludHMoY2xpZW50LCBtZWFzdXJlRGltZW5zaW9ucyk7XG4gIHJldHVybiAoYXdhaXQgZ2V0T3JTZXQoXG4gICAgY2F0YWxvZ3VlQ2FjaGUsXG4gICAgY2F0YWxvZ3VlQ2FjaGVLZXkoaG9zdCwgb3B0aW9ucy5jYWNoZUlkZW50aXR5LCBtZWFzdXJlRGltZW5zaW9ucyksXG4gICAgKCkgPT4gZmV0Y2hFbmRwb2ludHMoY2xpZW50LCBtZWFzdXJlRGltZW5zaW9ucyksXG4gICAge1xuICAgICAgdHRsOiBvcHRpb25zLnR0bE1zID8/IERFRkFVTFRfTU9ERUxfQ0FDSEVfVFRMX01TLFxuICAgICAgcmV0dXJuQ2FjaGVkT25FcnJvcjogdHJ1ZSxcbiAgICAgIGNhY2hlZE9uRXJyb3JUdGw6IFwiN2RcIixcbiAgICAgIHRocm93RXJyb3JzOiB0cnVlLFxuICAgIH0sXG4gICkpITtcbn1cblxuLyoqXG4gKiBMaXN0IHRoZSB3b3Jrc3BhY2UncyBzZXJ2aW5nIGVuZHBvaW50cyBhcyBtaW5pbWFsXG4gKiB7QGxpbmsgU2VydmluZ0VuZHBvaW50U3VtbWFyeX0gb2JqZWN0cyBzdHJhaWdodCBmcm9tIHRoZSBTREs6IG5vIGNhY2hpbmcsIGFuZFxuICogbm9uZSBvZiB0aGUgY2FjaGUtbG9hZCBlbnJpY2htZW50ICh7QGxpbmsgbGlzdFNlcnZpbmdFbmRwb2ludHN9IGFkZHMgdGhlXG4gKiB7QGxpbmsgTW9kZWxDbGFzc30gc3RhbXAgYW5kIHRoZSBlbWJlZGRpbmctZGltZW5zaW9uIHByb2JlKS4gVXNlIHRoaXMgZm9yIGFcbiAqIG9uZS1zaG90LCBkZXBlbmRlbmN5LWxpZ2h0IGxpc3RpbmcgLSBlLmcuIGEgQ0xJIHRoYXQgb25seSBuZWVkcyBuYW1lcy90YXNrc1xuICogZm9yIGZ1enp5IHJlc29sdXRpb24gYW5kIGRvZXNuJ3Qgd2FudCBzaGFyZWQgY2FjaGUgcGVyc2lzdGVuY2Ugb3IgdGhlXG4gKiBwZXItZW1iZWRkaW5nIHBpbmcgY29zdC4gUHJlZmVyIHtAbGluayBsaXN0U2VydmluZ0VuZHBvaW50c30gZm9yIHRoZSBjYWNoZWQsXG4gKiBlbnJpY2hlZCB2aWV3LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFNlcnZpbmdFbmRwb2ludHNVbmNhY2hlZChcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnRMaWtlLFxuKTogUHJvbWlzZTxTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10+IHtcbiAgY29uc3QgZW5kcG9pbnRzOiB1bmtub3duW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBlcCBvZiBjbGllbnQuc2VydmluZ0VuZHBvaW50cy5saXN0KCkpIHtcbiAgICBlbmRwb2ludHMucHVzaChlcCk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZUVuZHBvaW50cyhlbmRwb2ludHMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEVuZHBvaW50cyhcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnRMaWtlLFxuICBtZWFzdXJlRGltZW5zaW9uczogYm9vbGVhbixcbik6IFByb21pc2U8U2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPiB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIGNvbnN0IGNsYXNzaWZpZWQgPSBzdGFtcE1vZGVsQ2xhc3Nlcyhhd2FpdCBsaXN0U2VydmluZ0VuZHBvaW50c1VuY2FjaGVkKGNsaWVudCkpO1xuICBjb25zdCBvdXQgPSBtZWFzdXJlRGltZW5zaW9ucyA/IGF3YWl0IG1lYXN1cmVFbWJlZGRpbmdEaW1lbnNpb25zKGNsaWVudCwgY2xhc3NpZmllZCkgOiBjbGFzc2lmaWVkO1xuICBsb2dnZXIuZGVidWcoXCJsaXN0ZWRcIiwgeyBjb3VudDogb3V0Lmxlbmd0aCwgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0IH0pO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIFN0YW1wIGVhY2ggc3VtbWFyeSdzIHtAbGluayBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LmNsYXNzfSBmcm9tIHRoZSByZWxhdGl2ZVxuICogY2xhc3NpZmljYXRpb24gb2YgdGhlIHdob2xlIHNldC4gRW5kcG9pbnRzIHRoZSBjbGFzc2lmaWVyIGRvZXNuJ3QgcmVjb2duaXplXG4gKiAoY3VzdG9tLCB1bnNjb3JlZCwgbm9uLUxMTSkgYXJlIGxlZnQgd2l0aG91dCBhIGNsYXNzLlxuICovXG5mdW5jdGlvbiBzdGFtcE1vZGVsQ2xhc3NlcyhzdW1tYXJpZXM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSk6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSB7XG4gIGNvbnN0IGNsYXNzT2YgPSBjbGFzc2lmeUVuZHBvaW50Q2xhc3NlcyhzdW1tYXJpZXMpO1xuICByZXR1cm4gc3VtbWFyaWVzLm1hcCgoc3VtbWFyeSkgPT4ge1xuICAgIGNvbnN0IGNscyA9IGNsYXNzT2YuZ2V0KHN1bW1hcnkubmFtZSk7XG4gICAgcmV0dXJuIGNscyA9PT0gdW5kZWZpbmVkID8gc3VtbWFyeSA6IHsgLi4uc3VtbWFyeSwgY2xhc3M6IGNscyB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiBNZWFzdXJlIHRoZSBlbWJlZGRpbmcgdmVjdG9yIGRpbWVuc2lvbiBvZiBldmVyeSB7QGxpbmsgTW9kZWxDbGFzcy5FbWJlZGRpbmd9XG4gKiBlbmRwb2ludCBieSBwaW5naW5nIGl0IG9uY2UsIGFsbCBpbiBwYXJhbGxlbC4gUnVucyBvbmx5IG9uIGEgY2FjaGUgbWlzcyAoaXQnc1xuICogY2FsbGVkIGZyb20ge0BsaW5rIGZldGNoRW5kcG9pbnRzfSksIHNvIHRoZSBwcm9iZSBjb3N0IGlzIGFtb3J0aXplZCBhY3Jvc3MgdGhlXG4gKiBjYWNoZWQgVFRMIHdpbmRvdy4gUGVyLWVuZHBvaW50IGZhaWx1cmVzIGFyZSBzd2FsbG93ZWQgKGxvZ2dlZCBhdCB3YXJuKSBzbyBvbmVcbiAqIHVucmVhY2hhYmxlIGVtYmVkZGluZyBtb2RlbCBuZXZlciBmYWlscyB0aGUgbGlzdGluZy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWVhc3VyZUVtYmVkZGluZ0RpbWVuc2lvbnMoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50TGlrZSxcbiAgc3VtbWFyaWVzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4pOiBQcm9taXNlPFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXT4ge1xuICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgc3VtbWFyaWVzLm1hcChhc3luYyAoc3VtbWFyeSkgPT4ge1xuICAgICAgaWYgKHN1bW1hcnkuY2xhc3MgIT09IE1vZGVsQ2xhc3MuRW1iZWRkaW5nKSByZXR1cm4gc3VtbWFyeTtcbiAgICAgIGNvbnN0IGRpbWVuc2lvbiA9IGF3YWl0IHBpbmdFbWJlZGRpbmdEaW1lbnNpb24oY2xpZW50LCBzdW1tYXJ5Lm5hbWUpO1xuICAgICAgcmV0dXJuIGRpbWVuc2lvbiA9PT0gdW5kZWZpbmVkID8gc3VtbWFyeSA6IHsgLi4uc3VtbWFyeSwgZGltZW5zaW9uIH07XG4gICAgfSksXG4gICk7XG59XG5cbi8qKlxuICogQmVzdC1lZmZvcnQgZW1iZWRkaW5nIGRpbWVuc2lvbiBwcm9iZTogcXVlcnkgYG5hbWVgIHdpdGggYSB0aW55IGBcInBpbmdcImBcbiAqIGlucHV0IGFuZCByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgdmVjdG9yLiBSZXR1cm5zIGB1bmRlZmluZWRgIChhbmRcbiAqIGxvZ3MgYXQgd2Fybikgd2hlbiB0aGUgZW5kcG9pbnQgY2FuJ3QgYmUgcXVlcmllZCBvciByZXR1cm5zIG5vIHZlY3RvciAtIHRoZVxuICogZGltZW5zaW9uIGlzIGluZm9ybWF0aW9uYWwsIG5ldmVyIHJlcXVpcmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBwaW5nRW1iZWRkaW5nRGltZW5zaW9uKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudExpa2UsXG4gIG5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuc2VydmluZ0VuZHBvaW50cy5xdWVyeSh7IG5hbWUsIGlucHV0OiBcInBpbmdcIiB9KTtcbiAgICBjb25zdCBkaW1lbnNpb24gPSByZXNwb25zZS5kYXRhPy5bMF0/LmVtYmVkZGluZz8ubGVuZ3RoO1xuICAgIGlmICh0eXBlb2YgZGltZW5zaW9uID09PSBcIm51bWJlclwiICYmIGRpbWVuc2lvbiA+IDApIHJldHVybiBkaW1lbnNpb247XG4gICAgbG9nZ2VyLndhcm4oXCJlbWJlZGRpbmcgcGluZyByZXR1cm5lZCBubyB2ZWN0b3JcIiwgeyBuYW1lIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKFwiZW1iZWRkaW5nIHBpbmcgZmFpbGVkXCIsIHsgbmFtZSwgZXJyb3I6IHRvRXJyb3IoZXJyKSB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRm9yY2UtZXZpY3QgY2FjaGVkIGVuZHBvaW50IGxpc3RpbmdzLiBBIGhvc3QgYW5kIGlkZW50aXR5IGRlbGV0ZSBvbmx5IHRoYXRcbiAqIHByaW5jaXBhbCdzIHdvcmtzcGFjZSBlbnRyeS4gT21pdHRpbmcgZWl0aGVyIHZhbHVlIGNsZWFycyB0aGlzIGNhdGFsb2d1ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsZWFyU2VydmluZ0VuZHBvaW50c0NhY2hlKFxuICBob3N0Pzogc3RyaW5nLFxuICBjYWNoZUlkZW50aXR5Pzogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChob3N0ICYmIGNhY2hlSWRlbnRpdHkpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBkZWxldGVDYWNoZWRWYWx1ZShjYXRhbG9ndWVDYWNoZSwgY2F0YWxvZ3VlQ2FjaGVLZXkoaG9zdCwgY2FjaGVJZGVudGl0eSwgdHJ1ZSkpLFxuICAgICAgZGVsZXRlQ2FjaGVkVmFsdWUoY2F0YWxvZ3VlQ2FjaGUsIGNhdGFsb2d1ZUNhY2hlS2V5KGhvc3QsIGNhY2hlSWRlbnRpdHksIGZhbHNlKSksXG4gICAgXSk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgY2F0YWxvZ3VlQ2FjaGUuY2xlYXIoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXRhbG9ndWVDYWNoZUtleShcbiAgaG9zdDogc3RyaW5nLFxuICBjYWNoZUlkZW50aXR5OiBzdHJpbmcsXG4gIG1lYXN1cmVEaW1lbnNpb25zOiBib29sZWFuLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFtcbiAgICBDQUNIRV9LRVlfTkFNRVNQQUNFLFxuICAgIGhvc3QsXG4gICAgY2FjaGVVc2VyS2V5KGNhY2hlSWRlbnRpdHkpLFxuICAgIG1lYXN1cmVEaW1lbnNpb25zID8gXCJkaW1lbnNpb25zXCIgOiBcImNoYXQtb25seVwiLFxuICBdKTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgZnV6enktcmVzb2x2aW5nIGEgdXNlci1zdXBwbGllZCBtb2RlbCBuYW1lIGFnYWluc3QgdGhlIGxpdmVcbiAqIGVuZHBvaW50IGxpc3QuIGBzY29yZWAgaXMgdGhlIHJhbmtlcidzIGRpc3RhbmNlIChgMGAgaXMgZXhhY3QsIGAxYCBpcyBubyBtYXRjaCk7XG4gKiBgbWF0Y2hlZGAgaXMgYGZhbHNlYCB3aGVuIHRoZSBzY29yZSBleGNlZWRzIHRoZSBjb25maWd1cmVkIHRocmVzaG9sZCBzb1xuICogY2FsbGVycyBjYW4gZmFsbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBpbnB1dCAoRGF0YWJyaWNrcyB3aWxsIHRoZW4gcmV0dXJuIGFcbiAqIGNsZWFuIDQwNCkuXG4gKi9cbi8qKlxuICogRnV6enktcmFuayBlbmRwb2ludHMgYnkgaG93IGNsb3NlbHkgdGhlaXIgYG5hbWVgIG1hdGNoZXMgYGlucHV0YCwgYmVzdFxuICogKGxvd2VzdCBzY29yZSkgZmlyc3QsIGtlZXBpbmcgb25seSB0aG9zZSB3aXRoaW4gYHRocmVzaG9sZGA6XG4gKlxuICogMS4gQW4gZXhhY3QgbmFtZSBtYXRjaCBzaG9ydC1jaXJjdWl0cyB0byBhIHNpbmdsZSBgc2NvcmU6IDBgIHJlc3VsdC5cbiAqIDIuIE90aGVyd2lzZSB0aGUgc2hhcmVkIFR5cGVTY3JpcHQgcG9saWN5IHRva2VuaXplcyBhbmQgc2NvcmVzIGV2ZXJ5IGVuZHBvaW50IHRocm91Z2ggdGhlXG4gKiAgICBzYW1lIGZ1enp5LWRpc3RhbmNlIHBvbGljeSB1c2VkIGJ5IHtAbGluayBsb29rdXBNb2RlbHN9LlxuICpcbiAqIFJldHVybnMgYFtdYCBmb3IgYW4gZW1wdHkgZW5kcG9pbnQgbGlzdCBvciB3aGVuIGBpbnB1dGAgdG9rZW5pemVzIHRvIG5vdGhpbmcsXG4gKiBzbyBjYWxsZXJzIGZhbGwgYmFjayB0byB0aGUgcmF3IGlucHV0IGFuZCBsZXQgRGF0YWJyaWNrcyBzdXJmYWNlIGEgY2xlYW4gNDA0LlxuICogVGhpcyBtdWx0aS1yZXN1bHQgY29yZSBpcyBzaGFyZWQgYnkge0BsaW5rIHJlc29sdmVNb2RlbElkfSAoc2luZ2xlIGJlc3QpIGFuZFxuICogdGhlIHJhbmtlZCBgbG9va3VwTW9kZWxzYCBzZWxlY3Rvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaFNlcnZpbmdFbmRwb2ludHMoXG4gIGlucHV0OiBzdHJpbmcsXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBvcHRpb25zOiBSZXNvbHZlTW9kZWxPcHRpb25zID0ge30sXG4pOiBTY29yZWRFbmRwb2ludFtdIHtcbiAgaWYgKGVuZHBvaW50cy5sZW5ndGggPT09IDAgfHwgIWlucHV0LnRyaW0oKSkgcmV0dXJuIFtdO1xuICByZXR1cm4gcmFua0VuZHBvaW50cyhcbiAgICBlbmRwb2ludHMsXG4gICAge1xuICAgICAgc2VhcmNoOiBpbnB1dCxcbiAgICAgIC4uLihvcHRpb25zLnJlcXVpcmVzVG9vbHMgIT09IHVuZGVmaW5lZCA/IHsgcmVxdWlyZXNUb29sczogb3B0aW9ucy5yZXF1aXJlc1Rvb2xzIH0gOiB7fSksXG4gICAgICB0aHJlc2hvbGQ6IG9wdGlvbnMudGhyZXNob2xkID8/IERFRkFVTFRfRlVaWllfVEhSRVNIT0xELFxuICAgIH0sXG4gICAge1xuICAgICAgaW5jbHVkZURlcHJlY2F0ZWQ6IHRydWUsXG4gICAgICB0YXNrOiBcImxsbS92MS9jaGF0XCIsXG4gICAgfSxcbiAgKS5tYXAoKHJhbmtlZCkgPT4gKHsgZW5kcG9pbnQ6IHJhbmtlZC5lbmRwb2ludCwgc2NvcmU6IHJhbmtlZC5zY29yZSA/PyAwIH0pKTtcbn1cblxuLyoqXG4gKiBTbmFwIGEgdXNlci1zdXBwbGllZCBtb2RlbCBuYW1lIHRvIHRoZSBzaW5nbGUgY2xvc2VzdCBjb25maWd1cmVkIHNlcnZpbmdcbiAqIGVuZHBvaW50IHZpYSB7QGxpbmsgc2VhcmNoU2VydmluZ0VuZHBvaW50c30uIFJldHVybnMgdGhlIGlucHV0IHVuY2hhbmdlZCB3aXRoXG4gKiBgbWF0Y2hlZDogZmFsc2VgIHdoZW4gbm90aGluZyBzY29yZXMgd2l0aGluIHRoZSB0aHJlc2hvbGQgKG9yIHRoZSBjYXRhbG9ndWVcbiAqIGlzIGVtcHR5KSwgc28gYSBkZWxpYmVyYXRlIG1vZGVsIGlkIGlzIG5ldmVyIHNpbGVudGx5IHJld3JpdHRlbiB0byBhXG4gKiBzaW1pbGFyLWxvb2tpbmcgbmVpZ2hib3VyIGFuZCB0aGUgdXBzdHJlYW0gY2FsbCBzdXJmYWNlcyB0aGUgY2Fub25pY2FsIDQwNC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNb2RlbElkKFxuICBpbnB1dDogc3RyaW5nLFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbiAgb3B0aW9uczogUmVzb2x2ZU1vZGVsT3B0aW9ucyA9IHt9LFxuKTogUmVzb2x2ZWRNb2RlbCB7XG4gIGNvbnN0IFtiZXN0XSA9IHNlYXJjaFNlcnZpbmdFbmRwb2ludHMoaW5wdXQsIGVuZHBvaW50cywgb3B0aW9ucyk7XG4gIGlmIChiZXN0KSB7XG4gICAgcmV0dXJuIHsgbW9kZWxJZDogYmVzdC5lbmRwb2ludC5uYW1lLCBtYXRjaGVkOiB0cnVlLCBzY29yZTogYmVzdC5zY29yZSB9O1xuICB9XG4gIHJldHVybiB7IG1vZGVsSWQ6IGlucHV0LCBtYXRjaGVkOiBmYWxzZSB9O1xufVxuIl19
|
package/lib/src/resolve.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ModelClass } from "@dbx-tools/shared-model";
|
|
1
2
|
import { listServingEndpoints, } from "./model-catalog.js";
|
|
2
3
|
import { lookupModels, rankModelId, resolveModel, } from "./selection.js";
|
|
3
4
|
/** Resolve against a potentially stale catalogue, refreshing once on a miss. */
|
|
@@ -21,9 +22,14 @@ export async function selectModel(client, host, input = {}) {
|
|
|
21
22
|
return resolveModel(endpoints, input);
|
|
22
23
|
}
|
|
23
24
|
function catalogueOptions(input) {
|
|
25
|
+
const measureEmbeddingDimensions = input.modelClass === ModelClass.Embedding ||
|
|
26
|
+
input.dimension !== undefined ||
|
|
27
|
+
input.minDimension !== undefined ||
|
|
28
|
+
input.maxDimension !== undefined;
|
|
24
29
|
return {
|
|
25
30
|
...(input.ttlMs !== undefined ? { ttlMs: input.ttlMs } : {}),
|
|
26
31
|
...(input.cacheIdentity !== undefined ? { cacheIdentity: input.cacheIdentity } : {}),
|
|
32
|
+
measureEmbeddingDimensions,
|
|
27
33
|
};
|
|
28
34
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVyRCxPQUFPLEVBQ0wsb0JBQW9CLEdBR3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxHQUViLE1BQU0sZ0JBQWdCLENBQUM7QUFjeEIsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUNuQyxJQUFvRSxFQUNwRSxNQUFjLEVBQ2QsVUFBK0IsRUFBRSxFQUNqQyxTQUFzQyxFQUFFO0lBRXhDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLElBQUksUUFBUSxDQUFDLE9BQU87UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUN0QyxPQUFPLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxpREFBaUQ7QUFDakQsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQ2hDLE1BQTJCLEVBQzNCLElBQVksRUFDWixRQUEyQixFQUFFO0lBRTdCLE1BQU0sU0FBUyxHQUFHLE1BQU0sb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLE9BQU8sWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUMvQixNQUEyQixFQUMzQixJQUFZLEVBQ1osUUFBMEIsRUFBRTtJQUU1QixJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2xGLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLE1BQU0sb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLE9BQU8sWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxLQU96QjtJQUNDLE1BQU0sMEJBQTBCLEdBQzlCLEtBQUssQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLFNBQVM7UUFDekMsS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTO1FBQzdCLEtBQUssQ0FBQyxZQUFZLEtBQUssU0FBUztRQUNoQyxLQUFLLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQztJQUNuQyxPQUFPO1FBQ0wsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BGLDBCQUEwQjtLQUMzQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV29ya3NwYWNlLWF3YXJlIG1vZGVsIHNlbGVjdGlvbiB3cmFwcGVycy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB0eXBlIHtcbiAgTW9kZWxRdWVyeSxcbiAgUmFua2VkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24sXG4gIFJlc29sdmVNb2RlbElucHV0LFxuICBSZXNvbHZlTW9kZWxPcHRpb25zLFxuICBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB7IE1vZGVsQ2xhc3MgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxuaW1wb3J0IHtcbiAgbGlzdFNlcnZpbmdFbmRwb2ludHMsXG4gIHR5cGUgTGlzdFNlcnZpbmdFbmRwb2ludHNPcHRpb25zLFxuICB0eXBlIFdvcmtzcGFjZUNsaWVudExpa2UsXG59IGZyb20gXCIuL21vZGVsLWNhdGFsb2cudHNcIjtcbmltcG9ydCB7XG4gIGxvb2t1cE1vZGVscyxcbiAgcmFua01vZGVsSWQsXG4gIHJlc29sdmVNb2RlbCxcbiAgdHlwZSBNb2RlbFNlbGVjdGlvblBvbGljeU9wdGlvbnMsXG59IGZyb20gXCIuL3NlbGVjdGlvbi50c1wiO1xuXG4vKiogSW50ZW50IHBsdXMgY2F0YWxvZ3VlIGNhY2hlIGNvbnRyb2xzIHBhc3NlZCB0byB7QGxpbmsgc2VsZWN0TW9kZWx9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RNb2RlbElucHV0IGV4dGVuZHMgUmVzb2x2ZU1vZGVsSW5wdXQge1xuICB0dGxNcz86IG51bWJlcjtcbiAgY2FjaGVJZGVudGl0eT86IHN0cmluZztcbn1cblxuLyoqIFF1ZXJ5IHBsdXMgY2F0YWxvZ3VlIGNhY2hlIGNvbnRyb2xzIHBhc3NlZCB0byB7QGxpbmsgc2VhcmNoTW9kZWxzfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoTW9kZWxzSW5wdXQgZXh0ZW5kcyBNb2RlbFF1ZXJ5IHtcbiAgdHRsTXM/OiBudW1iZXI7XG4gIGNhY2hlSWRlbnRpdHk/OiBzdHJpbmc7XG59XG5cbi8qKiBSZXNvbHZlIGFnYWluc3QgYSBwb3RlbnRpYWxseSBzdGFsZSBjYXRhbG9ndWUsIHJlZnJlc2hpbmcgb25jZSBvbiBhIG1pc3MuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmFua01vZGVsSWRMaXZlKFxuICBsb2FkOiAoZm9yY2U6IGJvb2xlYW4pID0+IFByb21pc2U8cmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdPixcbiAgc2VhcmNoOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlc29sdmVNb2RlbE9wdGlvbnMgPSB7fSxcbiAgcG9saWN5OiBNb2RlbFNlbGVjdGlvblBvbGljeU9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8UmVzb2x2ZWRNb2RlbD4ge1xuICBjb25zdCByZXNvbHZlZCA9IHJhbmtNb2RlbElkKGF3YWl0IGxvYWQoZmFsc2UpLCBzZWFyY2gsIG9wdGlvbnMsIHBvbGljeSk7XG4gIGlmIChyZXNvbHZlZC5tYXRjaGVkKSByZXR1cm4gcmVzb2x2ZWQ7XG4gIHJldHVybiByYW5rTW9kZWxJZChhd2FpdCBsb2FkKHRydWUpLCBzZWFyY2gsIG9wdGlvbnMsIHBvbGljeSk7XG59XG5cbi8qKiBMaXN0IGFuZCByYW5rIGEgd29ya3NwYWNlIG1vZGVsIGNhdGFsb2d1ZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWFyY2hNb2RlbHMoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50TGlrZSxcbiAgaG9zdDogc3RyaW5nLFxuICBpbnB1dDogU2VhcmNoTW9kZWxzSW5wdXQgPSB7fSxcbik6IFByb21pc2U8UmFua2VkTW9kZWxbXT4ge1xuICBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBsaXN0U2VydmluZ0VuZHBvaW50cyhjbGllbnQsIGhvc3QsIGNhdGFsb2d1ZU9wdGlvbnMoaW5wdXQpKTtcbiAgcmV0dXJuIGxvb2t1cE1vZGVscyhlbmRwb2ludHMsIGlucHV0KTtcbn1cblxuLyoqIExpc3QgYSB3b3Jrc3BhY2UgY2F0YWxvZ3VlIGFuZCByZXNvbHZlIG9uZSBtb2RlbC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWxlY3RNb2RlbChcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnRMaWtlLFxuICBob3N0OiBzdHJpbmcsXG4gIGlucHV0OiBTZWxlY3RNb2RlbElucHV0ID0ge30sXG4pOiBQcm9taXNlPFJlc29sdmVkTW9kZWxTZWxlY3Rpb24+IHtcbiAgaWYgKGlucHV0LmV4cGxpY2l0ICE9PSB1bmRlZmluZWQgJiYgaW5wdXQuZnV6enkgPT09IGZhbHNlICYmICFpbnB1dC5yZXF1aXJlc1Rvb2xzKSB7XG4gICAgcmV0dXJuIHsgbW9kZWxJZDogaW5wdXQuZXhwbGljaXQsIHNvdXJjZTogXCJleHBsaWNpdFwiIH07XG4gIH1cbiAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgbGlzdFNlcnZpbmdFbmRwb2ludHMoY2xpZW50LCBob3N0LCBjYXRhbG9ndWVPcHRpb25zKGlucHV0KSk7XG4gIHJldHVybiByZXNvbHZlTW9kZWwoZW5kcG9pbnRzLCBpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGNhdGFsb2d1ZU9wdGlvbnMoaW5wdXQ6IHtcbiAgcmVhZG9ubHkgdHRsTXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNhY2hlSWRlbnRpdHk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1vZGVsQ2xhc3M/OiBSZXNvbHZlTW9kZWxJbnB1dFtcIm1vZGVsQ2xhc3NcIl07XG4gIHJlYWRvbmx5IGRpbWVuc2lvbj86IE1vZGVsUXVlcnlbXCJkaW1lbnNpb25cIl07XG4gIHJlYWRvbmx5IG1pbkRpbWVuc2lvbj86IE1vZGVsUXVlcnlbXCJtaW5EaW1lbnNpb25cIl07XG4gIHJlYWRvbmx5IG1heERpbWVuc2lvbj86IE1vZGVsUXVlcnlbXCJtYXhEaW1lbnNpb25cIl07XG59KTogTGlzdFNlcnZpbmdFbmRwb2ludHNPcHRpb25zIHtcbiAgY29uc3QgbWVhc3VyZUVtYmVkZGluZ0RpbWVuc2lvbnMgPVxuICAgIGlucHV0Lm1vZGVsQ2xhc3MgPT09IE1vZGVsQ2xhc3MuRW1iZWRkaW5nIHx8XG4gICAgaW5wdXQuZGltZW5zaW9uICE9PSB1bmRlZmluZWQgfHxcbiAgICBpbnB1dC5taW5EaW1lbnNpb24gIT09IHVuZGVmaW5lZCB8fFxuICAgIGlucHV0Lm1heERpbWVuc2lvbiAhPT0gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIC4uLihpbnB1dC50dGxNcyAhPT0gdW5kZWZpbmVkID8geyB0dGxNczogaW5wdXQudHRsTXMgfSA6IHt9KSxcbiAgICAuLi4oaW5wdXQuY2FjaGVJZGVudGl0eSAhPT0gdW5kZWZpbmVkID8geyBjYWNoZUlkZW50aXR5OiBpbnB1dC5jYWNoZUlkZW50aXR5IH0gOiB7fSksXG4gICAgbWVhc3VyZUVtYmVkZGluZ0RpbWVuc2lvbnMsXG4gIH07XG59XG4iXX0=
|
package/lib/src/selection.js
CHANGED
|
@@ -68,6 +68,10 @@ function buildQuery(input, search) {
|
|
|
68
68
|
...(search !== undefined ? { search } : {}),
|
|
69
69
|
...(input.modelClass !== undefined ? { modelClass: input.modelClass } : {}),
|
|
70
70
|
...(input.requiresTools !== undefined ? { requiresTools: input.requiresTools } : {}),
|
|
71
|
+
...(input.requiresStructuredOutput !== undefined
|
|
72
|
+
? { requiresStructuredOutput: input.requiresStructuredOutput }
|
|
73
|
+
: {}),
|
|
74
|
+
...(input.optimizeFor !== undefined ? { optimizeFor: input.optimizeFor } : {}),
|
|
71
75
|
...(input.threshold !== undefined ? { threshold: input.threshold } : {}),
|
|
72
76
|
limit: 1,
|
|
73
77
|
};
|
|
@@ -86,4 +90,4 @@ function pickFirstAvailable(candidates, endpoints) {
|
|
|
86
90
|
}
|
|
87
91
|
return candidates[0] ?? FALLBACK_MODEL_IDS[0];
|
|
88
92
|
}
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBV2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFRcEQsMERBQTBEO0FBQzFELE1BQU0sVUFBVSxZQUFZLENBQzFCLFNBQTRDLEVBQzVDLFFBQW9CLEVBQUUsRUFDdEIsU0FBc0MsRUFBRTtJQUV4QyxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLFdBQVcsQ0FDekIsU0FBNEMsRUFDNUMsTUFBYyxFQUNkLFVBQStCLEVBQUUsRUFDakMsU0FBc0MsRUFBRTtJQUV4QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUN4QixTQUFTLEVBQ1Q7UUFDRSxNQUFNO1FBQ04sS0FBSyxFQUFFLENBQUM7UUFDUixHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVFLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDekYsRUFDRCxNQUFNLENBQ1AsQ0FBQztJQUNGLElBQUksQ0FBQyxHQUFHO1FB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Q0FBQztBQUNqRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSdW50aW1lLWluZGVwZW5kZW50IG1vZGVsIHJhbmtpbmcgYW5kIHNlbGVjdGlvbi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IHNlcXVlbmNlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHtcbiAgTW9kZWxRdWVyeSxcbiAgUmFua2VkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWwsXG4gIFJlc29sdmVkTW9kZWxTZWxlY3Rpb24sXG4gIFJlc29sdmVNb2RlbElucHV0LFxuICBSZXNvbHZlTW9kZWxPcHRpb25zLFxuICBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcblxuaW1wb3J0IHsgcmFua0VuZHBvaW50cyB9IGZyb20gXCIuL19yYW5raW5nLnRzXCI7XG5pbXBvcnQgeyBGQUxMQkFDS19NT0RFTF9JRFMsIG1vZGVsc0ZvckNsYXNzIH0gZnJvbSBcIi4vZmFsbGJhY2sudHNcIjtcbmltcG9ydCB7IGVuZHBvaW50U3VwcG9ydHNUb29scyB9IGZyb20gXCIuL3BvbGljeS50c1wiO1xuXG4vKiogSW4tcHJvY2VzcyBtb2RlbC1yYW5raW5nIHBvbGljeSBjb250cm9scy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxTZWxlY3Rpb25Qb2xpY3lPcHRpb25zIHtcbiAgLyoqIFByZWZlciBEYXRhYnJpY2tzIHN5c3RlbSBlbmRwb2ludHMgaW5zdGVhZCBvZiBleGNsdWRpbmcgdGhlbSBmcm9tIG5vbi1leGFjdCBzZWxlY3Rpb24uICovXG4gIHJlYWRvbmx5IHByZWZlclN5c3RlbU1vZGVscz86IGJvb2xlYW47XG59XG5cbi8qKiBSYW5rIGEgY2F0YWxvZ3VlIGFnYWluc3QgYSBtb2RlbCBxdWVyeSwgYmVzdC1maXJzdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb29rdXBNb2RlbHMoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBxdWVyeTogTW9kZWxRdWVyeSA9IHt9LFxuICBwb2xpY3k6IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyA9IHt9LFxuKTogUmFua2VkTW9kZWxbXSB7XG4gIHJldHVybiByYW5rRW5kcG9pbnRzKGVuZHBvaW50cywgcXVlcnksIHBvbGljeSk7XG59XG5cbi8qKiBSZXNvbHZlIHRoZSBjbG9zZXN0IG1vZGVsIGlkIGluIG9uZSBjYXRhbG9ndWUgc25hcHNob3QuICovXG5leHBvcnQgZnVuY3Rpb24gcmFua01vZGVsSWQoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBzZWFyY2g6IHN0cmluZyxcbiAgb3B0aW9uczogUmVzb2x2ZU1vZGVsT3B0aW9ucyA9IHt9LFxuICBwb2xpY3k6IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyA9IHt9LFxuKTogUmVzb2x2ZWRNb2RlbCB7XG4gIGNvbnN0IFt0b3BdID0gbG9va3VwTW9kZWxzKFxuICAgIGVuZHBvaW50cyxcbiAgICB7XG4gICAgICBzZWFyY2gsXG4gICAgICBsaW1pdDogMSxcbiAgICAgIC4uLihvcHRpb25zLnRocmVzaG9sZCAhPT0gdW5kZWZpbmVkID8geyB0aHJlc2hvbGQ6IG9wdGlvbnMudGhyZXNob2xkIH0gOiB7fSksXG4gICAgICAuLi4ob3B0aW9ucy5yZXF1aXJlc1Rvb2xzICE9PSB1bmRlZmluZWQgPyB7IHJlcXVpcmVzVG9vbHM6IG9wdGlvbnMucmVxdWlyZXNUb29scyB9IDoge30pLFxuICAgIH0sXG4gICAgcG9saWN5LFxuICApO1xuICBpZiAoIXRvcCkgcmV0dXJuIHsgbW9kZWxJZDogc2VhcmNoLCBtYXRjaGVkOiBmYWxzZSB9O1xuICByZXR1cm4geyBtb2RlbElkOiB0b3AuZW5kcG9pbnQubmFtZSwgbWF0Y2hlZDogdHJ1ZSwgc2NvcmU6IHRvcC5zY29yZSB9O1xufVxuXG4vKiogUmVzb2x2ZSBhIHNpbmdsZSBtb2RlbCBpZCBmcm9tIGEgY2F0YWxvZ3VlIGFuZCBjYWxsZXIgaW50ZW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNb2RlbChcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4gIGlucHV0OiBSZXNvbHZlTW9kZWxJbnB1dCA9IHt9LFxuICBwb2xpY3k6IE1vZGVsU2VsZWN0aW9uUG9saWN5T3B0aW9ucyA9IHt9LFxuKTogUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbiB7XG4gIGlmIChpbnB1dC5leHBsaWNpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGlucHV0LmZ1enp5ID09PSBmYWxzZSkge1xuICAgICAgaWYgKGlucHV0LnJlcXVpcmVzVG9vbHMpIGFzc2VydFRvb2xTdXBwb3J0KGVuZHBvaW50cywgaW5wdXQuZXhwbGljaXQpO1xuICAgICAgcmV0dXJuIHsgbW9kZWxJZDogaW5wdXQuZXhwbGljaXQsIHNvdXJjZTogXCJleHBsaWNpdFwiIH07XG4gICAgfVxuICAgIGNvbnN0IFt0b3BdID0gbG9va3VwTW9kZWxzKGVuZHBvaW50cywgYnVpbGRRdWVyeShpbnB1dCwgaW5wdXQuZXhwbGljaXQpLCBwb2xpY3kpO1xuICAgIGlmIChpbnB1dC5yZXF1aXJlc1Rvb2xzICYmICF0b3ApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gdG9vbC1jYXBhYmxlIG1vZGVsIG1hdGNoZXMgXCIke2lucHV0LmV4cGxpY2l0fVwiYCk7XG4gICAgfVxuICAgIHJldHVybiB7IG1vZGVsSWQ6IHRvcD8uZW5kcG9pbnQubmFtZSA/PyBpbnB1dC5leHBsaWNpdCwgc291cmNlOiBcImZ1enp5LW1hdGNoXCIgfTtcbiAgfVxuXG4gIGlmIChpbnB1dC5tb2RlbENsYXNzID09PSB1bmRlZmluZWQgJiYgaW5wdXQuZmFsbGJhY2tzICYmIGlucHV0LmZhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgcHJlc2VudCA9IG5ldyBTZXQoXG4gICAgICBlbmRwb2ludHNcbiAgICAgICAgLmZpbHRlcigoZW5kcG9pbnQpID0+ICFpbnB1dC5yZXF1aXJlc1Rvb2xzIHx8IGVuZHBvaW50U3VwcG9ydHNUb29scyhlbmRwb2ludCkpXG4gICAgICAgIC5tYXAoKGVuZHBvaW50KSA9PiBlbmRwb2ludC5uYW1lKSxcbiAgICApO1xuICAgIGNvbnN0IHBpbm5lZCA9IGlucHV0LmZhbGxiYWNrcy5maW5kKChpZCkgPT4gcHJlc2VudC5oYXMoaWQpKTtcbiAgICBpZiAocGlubmVkKSByZXR1cm4geyBtb2RlbElkOiBwaW5uZWQsIHNvdXJjZTogXCJmYWxsYmFja1wiIH07XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBpbnB1dC5tb2RlbENsYXNzICE9PSB1bmRlZmluZWQgPyBcImNsYXNzXCIgOiBcImZhbGxiYWNrXCI7XG4gIGNvbnN0IFt0b3BdID0gbG9va3VwTW9kZWxzKGVuZHBvaW50cywgYnVpbGRRdWVyeShpbnB1dCwgdW5kZWZpbmVkKSwgcG9saWN5KTtcbiAgaWYgKHRvcCkgcmV0dXJuIHsgbW9kZWxJZDogdG9wLmVuZHBvaW50Lm5hbWUsIHNvdXJjZSB9O1xuXG4gIGlmIChpbnB1dC5saXZlT25seSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIGxpdmUgTW9kZWwgU2VydmluZyBlbmRwb2ludCBpcyBhdmFpbGFibGVcIik7XG4gIH1cblxuICBjb25zdCBmbG9vclNvdXJjZSA9XG4gICAgaW5wdXQubW9kZWxDbGFzcyAhPT0gdW5kZWZpbmVkID8gbW9kZWxzRm9yQ2xhc3MoaW5wdXQubW9kZWxDbGFzcykgOiAoaW5wdXQuZmFsbGJhY2tzID8/IFtdKTtcbiAgY29uc3QgZmxvb3IgPSBzZXF1ZW5jZShmbG9vclNvdXJjZSkuY29uY2F0KEZBTExCQUNLX01PREVMX0lEUykuZGlzdGluY3QoKS50b0FycmF5KCk7XG4gIGlmIChpbnB1dC5yZXF1aXJlc1Rvb2xzKSB7XG4gICAgY29uc3QgYXZhaWxhYmxlID0gbmV3IFNldChcbiAgICAgIGVuZHBvaW50cy5maWx0ZXIoZW5kcG9pbnRTdXBwb3J0c1Rvb2xzKS5tYXAoKGVuZHBvaW50KSA9PiBlbmRwb2ludC5uYW1lKSxcbiAgICApO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gZmxvb3IuZmluZCgoaWQpID0+IGF2YWlsYWJsZS5oYXMoaWQpKTtcbiAgICBpZiAoIXNlbGVjdGVkKSB0aHJvdyBuZXcgRXJyb3IoXCJObyB0b29sLWNhcGFibGUgbW9kZWwgaXMgYXZhaWxhYmxlXCIpO1xuICAgIHJldHVybiB7IG1vZGVsSWQ6IHNlbGVjdGVkLCBzb3VyY2UgfTtcbiAgfVxuICByZXR1cm4geyBtb2RlbElkOiBwaWNrRmlyc3RBdmFpbGFibGUoZmxvb3IsIGVuZHBvaW50cyksIHNvdXJjZSB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFF1ZXJ5KGlucHV0OiBSZXNvbHZlTW9kZWxJbnB1dCwgc2VhcmNoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBNb2RlbFF1ZXJ5IHtcbiAgcmV0dXJuIHtcbiAgICAuLi4oc2VhcmNoICE9PSB1bmRlZmluZWQgPyB7IHNlYXJjaCB9IDoge30pLFxuICAgIC4uLihpbnB1dC5tb2RlbENsYXNzICE9PSB1bmRlZmluZWQgPyB7IG1vZGVsQ2xhc3M6IGlucHV0Lm1vZGVsQ2xhc3MgfSA6IHt9KSxcbiAgICAuLi4oaW5wdXQucmVxdWlyZXNUb29scyAhPT0gdW5kZWZpbmVkID8geyByZXF1aXJlc1Rvb2xzOiBpbnB1dC5yZXF1aXJlc1Rvb2xzIH0gOiB7fSksXG4gICAgLi4uKGlucHV0LnRocmVzaG9sZCAhPT0gdW5kZWZpbmVkID8geyB0aHJlc2hvbGQ6IGlucHV0LnRocmVzaG9sZCB9IDoge30pLFxuICAgIGxpbWl0OiAxLFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnRUb29sU3VwcG9ydChlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSwgbW9kZWxJZDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGVuZHBvaW50ID0gZW5kcG9pbnRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IG1vZGVsSWQpO1xuICBpZiAoIWVuZHBvaW50IHx8ICFlbmRwb2ludFN1cHBvcnRzVG9vbHMoZW5kcG9pbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCBcIiR7bW9kZWxJZH1cIiBkb2VzIG5vdCBzdXBwb3J0IGZ1bmN0aW9uIHRvb2xzYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGlja0ZpcnN0QXZhaWxhYmxlKFxuICBjYW5kaWRhdGVzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4pOiBzdHJpbmcge1xuICBjb25zdCBwcmVzZW50ID0gbmV3IFNldChlbmRwb2ludHMubWFwKChlbmRwb2ludCkgPT4gZW5kcG9pbnQubmFtZSkpO1xuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgaWYgKHByZXNlbnQuaGFzKGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGU7XG4gIH1cbiAgcmV0dXJuIGNhbmRpZGF0ZXNbMF0gPz8gRkFMTEJBQ0tfTU9ERUxfSURTWzBdITtcbn1cbiJdfQ==
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBV2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFRcEQsMERBQTBEO0FBQzFELE1BQU0sVUFBVSxZQUFZLENBQzFCLFNBQTRDLEVBQzVDLFFBQW9CLEVBQUUsRUFDdEIsU0FBc0MsRUFBRTtJQUV4QyxPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLFdBQVcsQ0FDekIsU0FBNEMsRUFDNUMsTUFBYyxFQUNkLFVBQStCLEVBQUUsRUFDakMsU0FBc0MsRUFBRTtJQUV4QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUN4QixTQUFTLEVBQ1Q7UUFDRSxNQUFNO1FBQ04sS0FBSyxFQUFFLENBQUM7UUFDUixHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVFLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDekYsRUFDRCxNQUFNLENBQ1AsQ0FBQztJQUNGLElBQUksQ0FBQyxHQUFHO1FB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QUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEUsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNuQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7SUFDL0MsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBRSxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJ1bnRpbWUtaW5kZXBlbmRlbnQgbW9kZWwgcmFua2luZyBhbmQgc2VsZWN0aW9uLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgc2VxdWVuY2UgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUge1xuICBNb2RlbFF1ZXJ5LFxuICBSYW5rZWRNb2RlbCxcbiAgUmVzb2x2ZWRNb2RlbCxcbiAgUmVzb2x2ZWRNb2RlbFNlbGVjdGlvbixcbiAgUmVzb2x2ZU1vZGVsSW5wdXQsXG4gIFJlc29sdmVNb2RlbE9wdGlvbnMsXG4gIFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuXG5pbXBvcnQgeyByYW5rRW5kcG9pbnRzIH0gZnJvbSBcIi4vX3JhbmtpbmcudHNcIjtcbmltcG9ydCB7IEZBTExCQUNLX01PREVMX0lEUywgbW9kZWxzRm9yQ2xhc3MgfSBmcm9tIFwiLi9mYWxsYmFjay50c1wiO1xuaW1wb3J0IHsgZW5kcG9pbnRTdXBwb3J0c1Rvb2xzIH0gZnJvbSBcIi4vcG9saWN5LnRzXCI7XG5cbi8qKiBJbi1wcm9jZXNzIG1vZGVsLXJhbmtpbmcgcG9saWN5IGNvbnRyb2xzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbFNlbGVjdGlvblBvbGljeU9wdGlvbnMge1xuICAvKiogUHJlZmVyIERhdGFicmlja3Mgc3lzdGVtIGVuZHBvaW50cyBpbnN0ZWFkIG9mIGV4Y2x1ZGluZyB0aGVtIGZyb20gbm9uLWV4YWN0IHNlbGVjdGlvbi4gKi9cbiAgcmVhZG9ubHkgcHJlZmVyU3lzdGVtTW9kZWxzPzogYm9vbGVhbjtcbn1cblxuLyoqIFJhbmsgYSBjYXRhbG9ndWUgYWdhaW5zdCBhIG1vZGVsIHF1ZXJ5LCBiZXN0LWZpcnN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cE1vZGVscyhcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4gIHF1ZXJ5OiBNb2RlbFF1ZXJ5ID0ge30sXG4gIHBvbGljeTogTW9kZWxTZWxlY3Rpb25Qb2xpY3lPcHRpb25zID0ge30sXG4pOiBSYW5rZWRNb2RlbFtdIHtcbiAgcmV0dXJuIHJhbmtFbmRwb2ludHMoZW5kcG9pbnRzLCBxdWVyeSwgcG9saWN5KTtcbn1cblxuLyoqIFJlc29sdmUgdGhlIGNsb3Nlc3QgbW9kZWwgaWQgaW4gb25lIGNhdGFsb2d1ZSBzbmFwc2hvdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5rTW9kZWxJZChcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4gIHNlYXJjaDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXNvbHZlTW9kZWxPcHRpb25zID0ge30sXG4gIHBvbGljeTogTW9kZWxTZWxlY3Rpb25Qb2xpY3lPcHRpb25zID0ge30sXG4pOiBSZXNvbHZlZE1vZGVsIHtcbiAgY29uc3QgW3RvcF0gPSBsb29rdXBNb2RlbHMoXG4gICAgZW5kcG9pbnRzLFxuICAgIHtcbiAgICAgIHNlYXJjaCxcbiAgICAgIGxpbWl0OiAxLFxuICAgICAgLi4uKG9wdGlvbnMudGhyZXNob2xkICE9PSB1bmRlZmluZWQgPyB7IHRocmVzaG9sZDogb3B0aW9ucy50aHJlc2hvbGQgfSA6IHt9KSxcbiAgICAgIC4uLihvcHRpb25zLnJlcXVpcmVzVG9vbHMgIT09IHVuZGVmaW5lZCA/IHsgcmVxdWlyZXNUb29sczogb3B0aW9ucy5yZXF1aXJlc1Rvb2xzIH0gOiB7fSksXG4gICAgfSxcbiAgICBwb2xpY3ksXG4gICk7XG4gIGlmICghdG9wKSByZXR1cm4geyBtb2RlbElkOiBzZWFyY2gsIG1hdGNoZWQ6IGZhbHNlIH07XG4gIHJldHVybiB7IG1vZGVsSWQ6IHRvcC5lbmRwb2ludC5uYW1lLCBtYXRjaGVkOiB0cnVlLCBzY29yZTogdG9wLnNjb3JlIH07XG59XG5cbi8qKiBSZXNvbHZlIGEgc2luZ2xlIG1vZGVsIGlkIGZyb20gYSBjYXRhbG9ndWUgYW5kIGNhbGxlciBpbnRlbnQuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbiAgaW5wdXQ6IFJlc29sdmVNb2RlbElucHV0ID0ge30sXG4gIHBvbGljeTogTW9kZWxTZWxlY3Rpb25Qb2xpY3lPcHRpb25zID0ge30sXG4pOiBSZXNvbHZlZE1vZGVsU2VsZWN0aW9uIHtcbiAgaWYgKGlucHV0LmV4cGxpY2l0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5wdXQuZnV6enkgPT09IGZhbHNlKSB7XG4gICAgICBpZiAoaW5wdXQucmVxdWlyZXNUb29scykgYXNzZXJ0VG9vbFN1cHBvcnQoZW5kcG9pbnRzLCBpbnB1dC5leHBsaWNpdCk7XG4gICAgICByZXR1cm4geyBtb2RlbElkOiBpbnB1dC5leHBsaWNpdCwgc291cmNlOiBcImV4cGxpY2l0XCIgfTtcbiAgICB9XG4gICAgY29uc3QgW3RvcF0gPSBsb29rdXBNb2RlbHMoZW5kcG9pbnRzLCBidWlsZFF1ZXJ5KGlucHV0LCBpbnB1dC5leHBsaWNpdCksIHBvbGljeSk7XG4gICAgaWYgKGlucHV0LnJlcXVpcmVzVG9vbHMgJiYgIXRvcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyB0b29sLWNhcGFibGUgbW9kZWwgbWF0Y2hlcyBcIiR7aW5wdXQuZXhwbGljaXR9XCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgbW9kZWxJZDogdG9wPy5lbmRwb2ludC5uYW1lID8/IGlucHV0LmV4cGxpY2l0LCBzb3VyY2U6IFwiZnV6enktbWF0Y2hcIiB9O1xuICB9XG5cbiAgaWYgKGlucHV0Lm1vZGVsQ2xhc3MgPT09IHVuZGVmaW5lZCAmJiBpbnB1dC5mYWxsYmFja3MgJiYgaW5wdXQuZmFsbGJhY2tzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBwcmVzZW50ID0gbmV3IFNldChcbiAgICAgIGVuZHBvaW50c1xuICAgICAgICAuZmlsdGVyKChlbmRwb2ludCkgPT4gIWlucHV0LnJlcXVpcmVzVG9vbHMgfHwgZW5kcG9pbnRTdXBwb3J0c1Rvb2xzKGVuZHBvaW50KSlcbiAgICAgICAgLm1hcCgoZW5kcG9pbnQpID0+IGVuZHBvaW50Lm5hbWUpLFxuICAgICk7XG4gICAgY29uc3QgcGlubmVkID0gaW5wdXQuZmFsbGJhY2tzLmZpbmQoKGlkKSA9PiBwcmVzZW50LmhhcyhpZCkpO1xuICAgIGlmIChwaW5uZWQpIHJldHVybiB7IG1vZGVsSWQ6IHBpbm5lZCwgc291cmNlOiBcImZhbGxiYWNrXCIgfTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZSA9IGlucHV0Lm1vZGVsQ2xhc3MgIT09IHVuZGVmaW5lZCA/IFwiY2xhc3NcIiA6IFwiZmFsbGJhY2tcIjtcbiAgY29uc3QgW3RvcF0gPSBsb29rdXBNb2RlbHMoZW5kcG9pbnRzLCBidWlsZFF1ZXJ5KGlucHV0LCB1bmRlZmluZWQpLCBwb2xpY3kpO1xuICBpZiAodG9wKSByZXR1cm4geyBtb2RlbElkOiB0b3AuZW5kcG9pbnQubmFtZSwgc291cmNlIH07XG5cbiAgaWYgKGlucHV0LmxpdmVPbmx5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbWF0Y2hpbmcgbGl2ZSBNb2RlbCBTZXJ2aW5nIGVuZHBvaW50IGlzIGF2YWlsYWJsZVwiKTtcbiAgfVxuXG4gIGNvbnN0IGZsb29yU291cmNlID1cbiAgICBpbnB1dC5tb2RlbENsYXNzICE9PSB1bmRlZmluZWQgPyBtb2RlbHNGb3JDbGFzcyhpbnB1dC5tb2RlbENsYXNzKSA6IChpbnB1dC5mYWxsYmFja3MgPz8gW10pO1xuICBjb25zdCBmbG9vciA9IHNlcXVlbmNlKGZsb29yU291cmNlKS5jb25jYXQoRkFMTEJBQ0tfTU9ERUxfSURTKS5kaXN0aW5jdCgpLnRvQXJyYXkoKTtcbiAgaWYgKGlucHV0LnJlcXVpcmVzVG9vbHMpIHtcbiAgICBjb25zdCBhdmFpbGFibGUgPSBuZXcgU2V0KFxuICAgICAgZW5kcG9pbnRzLmZpbHRlcihlbmRwb2ludFN1cHBvcnRzVG9vbHMpLm1hcCgoZW5kcG9pbnQpID0+IGVuZHBvaW50Lm5hbWUpLFxuICAgICk7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBmbG9vci5maW5kKChpZCkgPT4gYXZhaWxhYmxlLmhhcyhpZCkpO1xuICAgIGlmICghc2VsZWN0ZWQpIHRocm93IG5ldyBFcnJvcihcIk5vIHRvb2wtY2FwYWJsZSBtb2RlbCBpcyBhdmFpbGFibGVcIik7XG4gICAgcmV0dXJuIHsgbW9kZWxJZDogc2VsZWN0ZWQsIHNvdXJjZSB9O1xuICB9XG4gIHJldHVybiB7IG1vZGVsSWQ6IHBpY2tGaXJzdEF2YWlsYWJsZShmbG9vciwgZW5kcG9pbnRzKSwgc291cmNlIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUXVlcnkoaW5wdXQ6IFJlc29sdmVNb2RlbElucHV0LCBzZWFyY2g6IHN0cmluZyB8IHVuZGVmaW5lZCk6IE1vZGVsUXVlcnkge1xuICByZXR1cm4ge1xuICAgIC4uLihzZWFyY2ggIT09IHVuZGVmaW5lZCA/IHsgc2VhcmNoIH0gOiB7fSksXG4gICAgLi4uKGlucHV0Lm1vZGVsQ2xhc3MgIT09IHVuZGVmaW5lZCA/IHsgbW9kZWxDbGFzczogaW5wdXQubW9kZWxDbGFzcyB9IDoge30pLFxuICAgIC4uLihpbnB1dC5yZXF1aXJlc1Rvb2xzICE9PSB1bmRlZmluZWQgPyB7IHJlcXVpcmVzVG9vbHM6IGlucHV0LnJlcXVpcmVzVG9vbHMgfSA6IHt9KSxcbiAgICAuLi4oaW5wdXQucmVxdWlyZXNTdHJ1Y3R1cmVkT3V0cHV0ICE9PSB1bmRlZmluZWRcbiAgICAgID8geyByZXF1aXJlc1N0cnVjdHVyZWRPdXRwdXQ6IGlucHV0LnJlcXVpcmVzU3RydWN0dXJlZE91dHB1dCB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4oaW5wdXQub3B0aW1pemVGb3IgIT09IHVuZGVmaW5lZCA/IHsgb3B0aW1pemVGb3I6IGlucHV0Lm9wdGltaXplRm9yIH0gOiB7fSksXG4gICAgLi4uKGlucHV0LnRocmVzaG9sZCAhPT0gdW5kZWZpbmVkID8geyB0aHJlc2hvbGQ6IGlucHV0LnRocmVzaG9sZCB9IDoge30pLFxuICAgIGxpbWl0OiAxLFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnRUb29sU3VwcG9ydChlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSwgbW9kZWxJZDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGVuZHBvaW50ID0gZW5kcG9pbnRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLm5hbWUgPT09IG1vZGVsSWQpO1xuICBpZiAoIWVuZHBvaW50IHx8ICFlbmRwb2ludFN1cHBvcnRzVG9vbHMoZW5kcG9pbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb2RlbCBcIiR7bW9kZWxJZH1cIiBkb2VzIG5vdCBzdXBwb3J0IGZ1bmN0aW9uIHRvb2xzYCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGlja0ZpcnN0QXZhaWxhYmxlKFxuICBjYW5kaWRhdGVzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4pOiBzdHJpbmcge1xuICBjb25zdCBwcmVzZW50ID0gbmV3IFNldChlbmRwb2ludHMubWFwKChlbmRwb2ludCkgPT4gZW5kcG9pbnQubmFtZSkpO1xuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgaWYgKHByZXNlbnQuaGFzKGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGU7XG4gIH1cbiAgcmV0dXJuIGNhbmRpZGF0ZXNbMF0gPz8gRkFMTEJBQ0tfTU9ERUxfSURTWzBdITtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@databricks/appkit": "0.81.0",
|
|
28
|
-
"@dbx-tools/appkit": "^0.9.
|
|
29
|
-
"@dbx-tools/auth": "^0.9.
|
|
30
|
-
"@dbx-tools/cache": "^0.9.
|
|
31
|
-
"@dbx-tools/shared-auth": "^0.9.
|
|
32
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
33
|
-
"@dbx-tools/shared-model": "^0.9.
|
|
28
|
+
"@dbx-tools/appkit": "^0.9.179",
|
|
29
|
+
"@dbx-tools/auth": "^0.9.179",
|
|
30
|
+
"@dbx-tools/cache": "^0.9.179",
|
|
31
|
+
"@dbx-tools/shared-auth": "^0.9.179",
|
|
32
|
+
"@dbx-tools/shared-core": "^0.9.179",
|
|
33
|
+
"@dbx-tools/shared-model": "^0.9.179",
|
|
34
34
|
"cheerio": "^1.2.0",
|
|
35
35
|
"fuse.js": "^7.4.2",
|
|
36
36
|
"zod": "4.3.6"
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"./package.json": "./package.json"
|
|
50
50
|
}
|
|
51
51
|
},
|
|
52
|
-
"version": "0.9.
|
|
52
|
+
"version": "0.9.179",
|
|
53
53
|
"types": "./lib/index.d.ts",
|
|
54
54
|
"dbxToolsConfig": {
|
|
55
55
|
"tags": [
|
package/src/_ranking.ts
CHANGED
|
@@ -72,6 +72,7 @@ export function rankEndpoints(
|
|
|
72
72
|
if (!includeDeprecated && endpoint.status?.deprecated) continue;
|
|
73
73
|
const capabilities = endpointCapabilities(endpoint);
|
|
74
74
|
if (!capabilities.chat || (query.requiresTools && !capabilities.tools)) continue;
|
|
75
|
+
if (query.requiresStructuredOutput && !endpoint.supportsStructuredOutput) continue;
|
|
75
76
|
candidates.push({
|
|
76
77
|
endpoint,
|
|
77
78
|
modelClass: classByName.get(endpoint.name) ?? ModelClass.ChatBalanced,
|
|
@@ -82,6 +83,7 @@ export function rankEndpoints(
|
|
|
82
83
|
for (const endpoint of classified[modelClass]) {
|
|
83
84
|
if (!includeDeprecated && endpoint.status?.deprecated) continue;
|
|
84
85
|
if (query.requiresTools && !endpointCapabilities(endpoint).tools) continue;
|
|
86
|
+
if (query.requiresStructuredOutput && !endpoint.supportsStructuredOutput) continue;
|
|
85
87
|
candidates.push({ endpoint, modelClass });
|
|
86
88
|
}
|
|
87
89
|
}
|
|
@@ -101,6 +103,9 @@ export function rankEndpoints(
|
|
|
101
103
|
!search && requestedClass === undefined
|
|
102
104
|
? preferLatestWithinLeadingFamily(selectable, preferSystemModels)
|
|
103
105
|
: selectable;
|
|
106
|
+
if (!search && query.optimizeFor !== undefined) {
|
|
107
|
+
ranked = [...ranked].sort((left, right) => compareOptimized(left, right, query.optimizeFor!));
|
|
108
|
+
}
|
|
104
109
|
if (search) {
|
|
105
110
|
const threshold = query.threshold ?? DEFAULT_FUZZY_THRESHOLD;
|
|
106
111
|
const searchTokens = tokenize(search);
|
|
@@ -187,6 +192,27 @@ function matchesModelQuery(endpoint: ServingEndpointSummary, query: ModelQuery):
|
|
|
187
192
|
return true;
|
|
188
193
|
}
|
|
189
194
|
|
|
195
|
+
function compareOptimized(
|
|
196
|
+
left: RankedModel,
|
|
197
|
+
right: RankedModel,
|
|
198
|
+
optimizeFor: NonNullable<ModelQuery["optimizeFor"]>,
|
|
199
|
+
): number {
|
|
200
|
+
if (optimizeFor === "speed") {
|
|
201
|
+
const leftReasoning = Boolean(left.endpoint.reasoningEfforts?.length);
|
|
202
|
+
const rightReasoning = Boolean(right.endpoint.reasoningEfforts?.length);
|
|
203
|
+
if (leftReasoning !== rightReasoning) return leftReasoning ? 1 : -1;
|
|
204
|
+
}
|
|
205
|
+
const leftValue = left.endpoint.profile?.[optimizeFor];
|
|
206
|
+
const rightValue = right.endpoint.profile?.[optimizeFor];
|
|
207
|
+
if (leftValue !== undefined || rightValue !== undefined) {
|
|
208
|
+
if (leftValue === undefined) return 1;
|
|
209
|
+
if (rightValue === undefined) return -1;
|
|
210
|
+
const difference = optimizeFor === "cost" ? leftValue - rightValue : rightValue - leftValue;
|
|
211
|
+
if (difference !== 0) return difference;
|
|
212
|
+
}
|
|
213
|
+
return compareRanked(left, right, false);
|
|
214
|
+
}
|
|
215
|
+
|
|
190
216
|
/** Classify chat and embedding endpoints through the TypeScript-owned policy. */
|
|
191
217
|
export function classifyEndpointClasses(
|
|
192
218
|
endpoints: readonly ServingEndpointSummary[],
|
|
@@ -251,6 +277,9 @@ export function normalizeEndpoints(endpoints: readonly unknown[]): ServingEndpoi
|
|
|
251
277
|
...(description ? { description } : {}),
|
|
252
278
|
supportsTools:
|
|
253
279
|
booleanValue(capabilitiesRecord.function_calling) ?? identities.some(supportsToolsByFamily),
|
|
280
|
+
supportsStructuredOutput: identities.some(
|
|
281
|
+
(identity) => modelCapabilitiesFor(identity).structuredOutput,
|
|
282
|
+
),
|
|
254
283
|
...(profile ? { profile } : {}),
|
|
255
284
|
serviceNames: Object.assign({}, ...identities.map(modelServiceNames)),
|
|
256
285
|
...(modelServiceName ? { modelServiceName } : {}),
|
|
@@ -266,7 +295,9 @@ export function normalizeEndpoints(endpoints: readonly unknown[]): ServingEndpoi
|
|
|
266
295
|
});
|
|
267
296
|
}
|
|
268
297
|
|
|
269
|
-
function reasoningEffort(
|
|
298
|
+
function reasoningEffort(
|
|
299
|
+
level: ReturnType<typeof modelReasoningLevelsFor>[number],
|
|
300
|
+
): ReasoningEffort {
|
|
270
301
|
return level === "extra-high" ? "xhigh" : level;
|
|
271
302
|
}
|
|
272
303
|
|
package/src/model-catalog.ts
CHANGED
|
@@ -70,6 +70,8 @@ export interface ListServingEndpointsOptions {
|
|
|
70
70
|
* catalogue.
|
|
71
71
|
*/
|
|
72
72
|
cacheIdentity?: string;
|
|
73
|
+
/** Measure embedding vector dimensions during this catalogue load. Defaults to true. */
|
|
74
|
+
measureEmbeddingDimensions?: boolean;
|
|
73
75
|
}
|
|
74
76
|
|
|
75
77
|
/** Hash an opaque credential identity before handing it to the shared cache. */
|
|
@@ -95,11 +97,12 @@ export async function listServingEndpoints(
|
|
|
95
97
|
host: string,
|
|
96
98
|
options: ListServingEndpointsOptions = {},
|
|
97
99
|
): Promise<ServingEndpointSummary[]> {
|
|
98
|
-
|
|
100
|
+
const measureDimensions = options.measureEmbeddingDimensions !== false;
|
|
101
|
+
if (!options.cacheIdentity) return fetchEndpoints(client, measureDimensions);
|
|
99
102
|
return (await getOrSet(
|
|
100
103
|
catalogueCache,
|
|
101
|
-
catalogueCacheKey(host, options.cacheIdentity),
|
|
102
|
-
() => fetchEndpoints(client),
|
|
104
|
+
catalogueCacheKey(host, options.cacheIdentity, measureDimensions),
|
|
105
|
+
() => fetchEndpoints(client, measureDimensions),
|
|
103
106
|
{
|
|
104
107
|
ttl: options.ttlMs ?? DEFAULT_MODEL_CACHE_TTL_MS,
|
|
105
108
|
returnCachedOnError: true,
|
|
@@ -129,10 +132,13 @@ export async function listServingEndpointsUncached(
|
|
|
129
132
|
return normalizeEndpoints(endpoints);
|
|
130
133
|
}
|
|
131
134
|
|
|
132
|
-
async function fetchEndpoints(
|
|
135
|
+
async function fetchEndpoints(
|
|
136
|
+
client: WorkspaceClientLike,
|
|
137
|
+
measureDimensions: boolean,
|
|
138
|
+
): Promise<ServingEndpointSummary[]> {
|
|
133
139
|
const startedAt = Date.now();
|
|
134
140
|
const classified = stampModelClasses(await listServingEndpointsUncached(client));
|
|
135
|
-
const out = await measureEmbeddingDimensions(client, classified);
|
|
141
|
+
const out = measureDimensions ? await measureEmbeddingDimensions(client, classified) : classified;
|
|
136
142
|
logger.debug("listed", { count: out.length, elapsedMs: Date.now() - startedAt });
|
|
137
143
|
return out;
|
|
138
144
|
}
|
|
@@ -201,14 +207,26 @@ export async function clearServingEndpointsCache(
|
|
|
201
207
|
cacheIdentity?: string,
|
|
202
208
|
): Promise<void> {
|
|
203
209
|
if (host && cacheIdentity) {
|
|
204
|
-
await
|
|
210
|
+
await Promise.all([
|
|
211
|
+
deleteCachedValue(catalogueCache, catalogueCacheKey(host, cacheIdentity, true)),
|
|
212
|
+
deleteCachedValue(catalogueCache, catalogueCacheKey(host, cacheIdentity, false)),
|
|
213
|
+
]);
|
|
205
214
|
} else {
|
|
206
215
|
await catalogueCache.clear();
|
|
207
216
|
}
|
|
208
217
|
}
|
|
209
218
|
|
|
210
|
-
function catalogueCacheKey(
|
|
211
|
-
|
|
219
|
+
function catalogueCacheKey(
|
|
220
|
+
host: string,
|
|
221
|
+
cacheIdentity: string,
|
|
222
|
+
measureDimensions: boolean,
|
|
223
|
+
): string {
|
|
224
|
+
return JSON.stringify([
|
|
225
|
+
CACHE_KEY_NAMESPACE,
|
|
226
|
+
host,
|
|
227
|
+
cacheUserKey(cacheIdentity),
|
|
228
|
+
measureDimensions ? "dimensions" : "chat-only",
|
|
229
|
+
]);
|
|
212
230
|
}
|
|
213
231
|
|
|
214
232
|
/**
|
package/src/resolve.ts
CHANGED
|
@@ -12,6 +12,7 @@ import type {
|
|
|
12
12
|
ResolveModelOptions,
|
|
13
13
|
ServingEndpointSummary,
|
|
14
14
|
} from "@dbx-tools/shared-model";
|
|
15
|
+
import { ModelClass } from "@dbx-tools/shared-model";
|
|
15
16
|
|
|
16
17
|
import {
|
|
17
18
|
listServingEndpoints,
|
|
@@ -75,9 +76,19 @@ export async function selectModel(
|
|
|
75
76
|
function catalogueOptions(input: {
|
|
76
77
|
readonly ttlMs?: number;
|
|
77
78
|
readonly cacheIdentity?: string;
|
|
79
|
+
readonly modelClass?: ResolveModelInput["modelClass"];
|
|
80
|
+
readonly dimension?: ModelQuery["dimension"];
|
|
81
|
+
readonly minDimension?: ModelQuery["minDimension"];
|
|
82
|
+
readonly maxDimension?: ModelQuery["maxDimension"];
|
|
78
83
|
}): ListServingEndpointsOptions {
|
|
84
|
+
const measureEmbeddingDimensions =
|
|
85
|
+
input.modelClass === ModelClass.Embedding ||
|
|
86
|
+
input.dimension !== undefined ||
|
|
87
|
+
input.minDimension !== undefined ||
|
|
88
|
+
input.maxDimension !== undefined;
|
|
79
89
|
return {
|
|
80
90
|
...(input.ttlMs !== undefined ? { ttlMs: input.ttlMs } : {}),
|
|
81
91
|
...(input.cacheIdentity !== undefined ? { cacheIdentity: input.cacheIdentity } : {}),
|
|
92
|
+
measureEmbeddingDimensions,
|
|
82
93
|
};
|
|
83
94
|
}
|
package/src/selection.ts
CHANGED
|
@@ -109,6 +109,10 @@ function buildQuery(input: ResolveModelInput, search: string | undefined): Model
|
|
|
109
109
|
...(search !== undefined ? { search } : {}),
|
|
110
110
|
...(input.modelClass !== undefined ? { modelClass: input.modelClass } : {}),
|
|
111
111
|
...(input.requiresTools !== undefined ? { requiresTools: input.requiresTools } : {}),
|
|
112
|
+
...(input.requiresStructuredOutput !== undefined
|
|
113
|
+
? { requiresStructuredOutput: input.requiresStructuredOutput }
|
|
114
|
+
: {}),
|
|
115
|
+
...(input.optimizeFor !== undefined ? { optimizeFor: input.optimizeFor } : {}),
|
|
112
116
|
...(input.threshold !== undefined ? { threshold: input.threshold } : {}),
|
|
113
117
|
limit: 1,
|
|
114
118
|
};
|