@dbx-tools/model 0.9.60 → 0.9.61
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/index.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/package.json +1 -1
- package/lib/src/_ranking.js +6 -2
- package/lib/src/policy.d.ts +2 -0
- package/lib/src/policy.js +3 -2
- package/package.json +6 -6
- package/src/_ranking.ts +4 -1
- package/src/policy.ts +2 -1
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.61";
|
|
7
7
|
export * as bindings from "./src/bindings.ts";
|
|
8
8
|
export * as classes from "./src/classes.ts";
|
|
9
9
|
export * as classify from "./src/classify.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.61";
|
|
3
3
|
export * as bindings from "./src/bindings.ts";
|
|
4
4
|
export * as classes from "./src/classes.ts";
|
|
5
5
|
export * as classify from "./src/classify.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.61";
|
|
6
6
|
export * as bindings from "./src/bindings.js";
|
|
7
7
|
export * as classes from "./src/classes.js";
|
|
8
8
|
export * as classify from "./src/classify.js";
|
|
@@ -24,4 +24,4 @@ export { DEFAULT_MODEL_CACHE_TTL_MS, DEFAULT_FUZZY_THRESHOLD } from "./src/model
|
|
|
24
24
|
export { DEFAULT_MODEL_CLIENT_CACHE_TTL_MS } from "./src/model-client.js";
|
|
25
25
|
export { REASONING_LEVELS } from "./src/reasoning-translation.js";
|
|
26
26
|
export * from "./exports.js";
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxhQUFhLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLG9CQUFvQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLFdBQVcsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLCtCQUErQixFQUFFLHVCQUF1QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0ssT0FBTyxFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLDJCQUEyQixFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEwsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0YsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJbEUsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuNjFcIjtcbmV4cG9ydCAqIGFzIGJpbmRpbmdzIGZyb20gXCIuL3NyYy9iaW5kaW5ncy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NlcyBmcm9tIFwiLi9zcmMvY2xhc3Nlcy50c1wiO1xuZXhwb3J0ICogYXMgY2xhc3NpZnkgZnJvbSBcIi4vc3JjL2NsYXNzaWZ5LnRzXCI7XG5leHBvcnQgKiBhcyBmYWxsYmFjayBmcm9tIFwiLi9zcmMvZmFsbGJhY2sudHNcIjtcbmV4cG9ydCAqIGFzIGludm9rZSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgKiBhcyBtZXRhZGF0YSBmcm9tIFwiLi9zcmMvbWV0YWRhdGEudHNcIjtcbmV4cG9ydCAqIGFzIG1ldGFkYXRhQ2FjaGUgZnJvbSBcIi4vc3JjL21ldGFkYXRhLWNhY2hlLnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbENhdGFsb2cgZnJvbSBcIi4vc3JjL21vZGVsLWNhdGFsb2cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsQ2xpZW50IGZyb20gXCIuL3NyYy9tb2RlbC1jbGllbnQudHNcIjtcbmV4cG9ydCAqIGFzIHBvbGljeSBmcm9tIFwiLi9zcmMvcG9saWN5LnRzXCI7XG5leHBvcnQgKiBhcyByZWFzb25pbmdUcmFuc2xhdGlvbiBmcm9tIFwiLi9zcmMvcmVhc29uaW5nLXRyYW5zbGF0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyByZXNvbHZlIGZyb20gXCIuL3NyYy9yZXNvbHZlLnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2aW5nV2lyZSBmcm9tIFwiLi9zcmMvc2VydmluZy13aXJlLnRzXCI7XG5leHBvcnQgeyBDSEFUX0NMQVNTX09SREVSLCBNT0RFTF9DTEFTU19PUkRFUiB9IGZyb20gXCIuL3NyYy9jbGFzc2VzLnRzXCI7XG5leHBvcnQgeyBGQUxMQkFDS19NT0RFTF9JRFMgfSBmcm9tIFwiLi9zcmMvZmFsbGJhY2sudHNcIjtcbmV4cG9ydCB7IElOVk9DQVRJT05TX1NVRkZJWCwgUkVTUE9OU0VTX1BBVEgsIE9QRU5fUkVTUE9OU0VTX1BBVEgsIENIQVRfQ09NUExFVElPTlNfUEFUSCwgQUlfR0FURVdBWV9DT0RFWF9SRVNQT05TRVNfUEFUSCwgQU5USFJPUElDX01FU1NBR0VTX1BBVEggfSBmcm9tIFwiLi9zcmMvaW52b2tlLnRzXCI7XG5leHBvcnQgdHlwZSB7IEF1dGhlbnRpY2F0aW5nQ2xpZW50TGlrZSB9IGZyb20gXCIuL3NyYy9pbnZva2UudHNcIjtcbmV4cG9ydCB7IE1PREVMX01FVEFEQVRBX1RUTF9NUywgTU9ERUxfUkFURV9MSU1JVFNfVVJMLCBPUEVOQUlfUkVTUE9OU0VTX01PREVMU19VUkwsIFFVRVJZX1JFQVNPTl9NT0RFTFNfVVJMLCBSRVRJUkVEX01PREVMU19VUkwsIFdFQl9TRUFSQ0hfTU9ERUxTX1VSTCB9IGZyb20gXCIuL3NyYy9tZXRhZGF0YS50c1wiO1xuZXhwb3J0IHR5cGUgeyBNZXRhZGF0YUNhY2hlUmVjb3JkLCBNZXRhZGF0YUNhY2hlT3B0aW9ucywgTWV0YWRhdGFDYWNoZU1lcmdlSW5wdXQsIE1ldGFkYXRhQ2FjaGUgfSBmcm9tIFwiLi9zcmMvbWV0YWRhdGEtY2FjaGUudHNcIjtcbmV4cG9ydCB7IERFRkFVTFRfTU9ERUxfQ0FDSEVfVFRMX01TLCBERUZBVUxUX0ZVWlpZX1RIUkVTSE9MRCB9IGZyb20gXCIuL3NyYy9tb2RlbC1jYXRhbG9nLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdvcmtzcGFjZUNsaWVudExpa2UsIExpc3RTZXJ2aW5nRW5kcG9pbnRzT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9tb2RlbC1jYXRhbG9nLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX01PREVMX0NMSUVOVF9DQUNIRV9UVExfTVMgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsQXV0aE9wdGlvbnMsIE1vZGVsQ2xpZW50T3B0aW9ucywgTW9kZWxDbGllbnRTdGF0dXMsIE1vZGVsUHJvdG9jb2wsIE1vZGVsUm91dGVJbnB1dCwgTW9kZWxSb3V0ZSwgTW9kZWxDbGllbnQgfSBmcm9tIFwiLi9zcmMvbW9kZWwtY2xpZW50LnRzXCI7XG5leHBvcnQgeyBSRUFTT05JTkdfTEVWRUxTIH0gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBSZWFzb25pbmdMZXZlbCwgUmVhc29uaW5nTW9kZWxDYXRhbG9ndWUsIEFkYXB0ZWRSZXF1ZXN0UmVhc29uaW5nIH0gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy10cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWxlY3RNb2RlbElucHV0LCBTZWFyY2hNb2RlbHNJbnB1dCB9IGZyb20gXCIuL3NyYy9yZXNvbHZlLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNlcnZpbmdDaGF0TWVzc2FnZSwgUmV3cml0dGVuU2VydmluZ1JlcXVlc3QgfSBmcm9tIFwiLi9zcmMvc2VydmluZy13aXJlLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leHBvcnRzLnRzXCI7XG4iXX0=
|
package/lib/package.json
CHANGED
package/lib/src/_ranking.js
CHANGED
|
@@ -5,7 +5,7 @@ import Fuse from "fuse.js";
|
|
|
5
5
|
import { modelStatusFor } from "./_retirement.js";
|
|
6
6
|
import { classesAtOrBelow, CHAT_CLASS_ORDER, isChatClass, MODEL_CLASS_ORDER } from "./classes.js";
|
|
7
7
|
import { classifyEndpoints, endpointCapabilities, supportsToolsByFamily, versionTuple, } from "./classify.js";
|
|
8
|
-
import { modelFamily, modelReasoningEfforts, modelServiceNames } from "./policy.js";
|
|
8
|
+
import { isOpenWeightsGpt, modelFamily, modelReasoningEfforts, modelServiceNames } from "./policy.js";
|
|
9
9
|
const ModelClass = ModelClassValues;
|
|
10
10
|
const DEFAULT_FUZZY_THRESHOLD = 0.4;
|
|
11
11
|
const SEARCH_INTENT_FILLERS = new Set(["a", "best", "for", "model", "models", "the"]);
|
|
@@ -229,6 +229,10 @@ function compareRanked(left, right) {
|
|
|
229
229
|
const score = Math.round((left.score ?? 0) * 1000) - Math.round((right.score ?? 0) * 1000);
|
|
230
230
|
if (score !== 0)
|
|
231
231
|
return score;
|
|
232
|
+
const leftOss = isOpenWeightsGpt(left.endpoint.name);
|
|
233
|
+
const rightOss = isOpenWeightsGpt(right.endpoint.name);
|
|
234
|
+
if (leftOss !== rightOss)
|
|
235
|
+
return leftOss ? 1 : -1;
|
|
232
236
|
const leftVersion = versionTuple(left.endpoint.name);
|
|
233
237
|
const rightVersion = versionTuple(right.endpoint.name);
|
|
234
238
|
for (let index = 0; index < 3; index += 1) {
|
|
@@ -324,4 +328,4 @@ function finiteNumber(value) {
|
|
|
324
328
|
function booleanValue(value) {
|
|
325
329
|
return typeof value === "boolean" ? value : undefined;
|
|
326
330
|
}
|
|
327
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3JhbmtpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX3JhbmtpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsVUFBVSxJQUFJLGdCQUFnQixHQUsvQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUUzQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHcEYsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7QUFFcEMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFDcEMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0RixNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ2xDLE1BQU07SUFDTixZQUFZO0lBQ1osYUFBYTtJQUNiLFdBQVc7SUFDWCxXQUFXO0lBQ1gsZUFBZTtJQUNmLGVBQWU7SUFDZixTQUFTO0NBQ1YsQ0FBQyxDQUFDO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLEdB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Q0FBQztRQUNoQixRQUFRO2FBQ0wsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUNqQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLEtBQWM7SUFDNUIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBYztJQUNoQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFjO0lBQ2xDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pGLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFjO0lBQ2xDLE9BQU8sT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgb2JqZWN0LCBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBNb2RlbENsYXNzIGFzIE1vZGVsQ2xhc3NWYWx1ZXMsXG4gIHR5cGUgTW9kZWxDbGFzcyBhcyBNb2RlbENsYXNzVHlwZSxcbiAgdHlwZSBNb2RlbFF1ZXJ5LFxuICB0eXBlIFJhbmtlZE1vZGVsLFxuICB0eXBlIFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC9jb250cmFjdHNcIjtcbmltcG9ydCB7IHRvTW9kZWxEaXNwbGF5TmFtZSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC9kaXNwbGF5XCI7XG5pbXBvcnQgRnVzZSBmcm9tIFwiZnVzZS5qc1wiO1xuXG5pbXBvcnQgeyBtb2RlbFN0YXR1c0ZvciB9IGZyb20gXCIuL19yZXRpcmVtZW50LnRzXCI7XG5pbXBvcnQgeyBjbGFzc2VzQXRPckJlbG93LCBDSEFUX0NMQVNTX09SREVSLCBpc0NoYXRDbGFzcywgTU9ERUxfQ0xBU1NfT1JERVIgfSBmcm9tIFwiLi9jbGFzc2VzLnRzXCI7XG5pbXBvcnQge1xuICBjbGFzc2lmeUVuZHBvaW50cyxcbiAgZW5kcG9pbnRDYXBhYmlsaXRpZXMsXG4gIHN1cHBvcnRzVG9vbHNCeUZhbWlseSxcbiAgdmVyc2lvblR1cGxlLFxufSBmcm9tIFwiLi9jbGFzc2lmeS50c1wiO1xuaW1wb3J0IHsgbW9kZWxGYW1pbHksIG1vZGVsUmVhc29uaW5nRWZmb3J0cywgbW9kZWxTZXJ2aWNlTmFtZXMgfSBmcm9tIFwiLi9wb2xpY3kudHNcIjtcblxudHlwZSBNb2RlbENsYXNzID0gTW9kZWxDbGFzc1R5cGU7XG5jb25zdCBNb2RlbENsYXNzID0gTW9kZWxDbGFzc1ZhbHVlcztcblxuY29uc3QgREVGQVVMVF9GVVpaWV9USFJFU0hPTEQgPSAwLjQ7XG5jb25zdCBTRUFSQ0hfSU5URU5UX0ZJTExFUlMgPSBuZXcgU2V0KFtcImFcIiwgXCJiZXN0XCIsIFwiZm9yXCIsIFwibW9kZWxcIiwgXCJtb2RlbHNcIiwgXCJ0aGVcIl0pO1xuY29uc3QgQ0hBVF9TRUFSQ0hfSU5URU5UUyA9IG5ldyBTZXQoW1xuICBcImNoYXRcIixcbiAgXCJjb21wbGV0aW9uXCIsXG4gIFwiY29tcGxldGlvbnNcIixcbiAgXCJzdW1tYXJpemVcIixcbiAgXCJzdW1tYXJpc2VcIixcbiAgXCJzdW1tYXJpemF0aW9uXCIsXG4gIFwic3VtbWFyaXNhdGlvblwiLFxuICBcInN1bW1hcnlcIixcbl0pO1xuY29uc3QgRU1CRURESU5HX1NFQVJDSF9JTlRFTlRTID0gbmV3IFNldChbXG4gIFwiZW1iZWRcIixcbiAgXCJlbWJlZGRpbmdcIixcbiAgXCJlbWJlZGRpbmdzXCIsXG4gIFwidmVjdG9yXCIsXG4gIFwidmVjdG9yaXplXCIsXG4gIFwidmVjdG9yaXNlXCIsXG5dKTtcblxuaW50ZXJmYWNlIE5hdGl2ZVJhbmtpbmdPcHRpb25zIHtcbiAgcmVhZG9ubHkgaW5jbHVkZURlcHJlY2F0ZWQ/OiBib29sZWFuO1xuICByZWFkb25seSBtb2RlbENsYXNzPzogTW9kZWxDbGFzcztcbiAgcmVhZG9ubHkgdGFzaz86IHN0cmluZztcbn1cblxuLyoqIFJhbmsgZW5kcG9pbnQgcmVjb3JkcyB0aHJvdWdoIHRoZSBUeXBlU2NyaXB0LW93bmVkIG1vZGVsIHBvbGljeS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5rRW5kcG9pbnRzKFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbiAgcXVlcnk6IE1vZGVsUXVlcnkgPSB7fSxcbiAgb3B0aW9uczogTmF0aXZlUmFua2luZ09wdGlvbnMgPSB7fSxcbik6IFJhbmtlZE1vZGVsW10ge1xuICBjb25zdCBmaWx0ZXJlZCA9IGVuZHBvaW50cy5maWx0ZXIoKGVuZHBvaW50KSA9PiBtYXRjaGVzTW9kZWxRdWVyeShlbmRwb2ludCwgcXVlcnkpKTtcbiAgY29uc3Qgb3JpZ2luYWxCeU5hbWUgPSBuZXcgTWFwKGZpbHRlcmVkLm1hcCgoZW5kcG9pbnQpID0+IFtlbmRwb2ludC5uYW1lLCBlbmRwb2ludF0pKTtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IGZpbHRlcmVkLm1hcCgoZW5kcG9pbnQpID0+ICh7XG4gICAgLi4uZW5kcG9pbnQsXG4gICAgLi4uKG9wdGlvbnMubW9kZWxDbGFzcyA/IHsgY2xhc3M6IG9wdGlvbnMubW9kZWxDbGFzcyB9IDoge30pLFxuICAgIC4uLihvcHRpb25zLnRhc2sgPyB7IHRhc2s6IG9wdGlvbnMudGFzayB9IDoge30pLFxuICB9KSk7XG4gIGNvbnN0IGNsYXNzaWZpZWQgPSBvcHRpb25zLm1vZGVsQ2xhc3NcbiAgICA/IHtcbiAgICAgICAgW01vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nXTogW10sXG4gICAgICAgIFtNb2RlbENsYXNzLkNoYXRCYWxhbmNlZF06IFtdLFxuICAgICAgICBbTW9kZWxDbGFzcy5DaGF0RmFzdF06IFtdLFxuICAgICAgICBbTW9kZWxDbGFzcy5FbWJlZGRpbmddOiBbXSxcbiAgICAgICAgW29wdGlvbnMubW9kZWxDbGFzc106IG5vcm1hbGl6ZWQsXG4gICAgICB9XG4gICAgOiBjbGFzc2lmeUVuZHBvaW50cyhub3JtYWxpemVkKTtcbiAgY29uc3Qgc2VhcmNoID0gcXVlcnkuc2VhcmNoPy50cmltKCk7XG4gIGNvbnN0IHNlYXJjaFBsYW4gPSBzZWFyY2ggPyBtb2RlbFNlYXJjaFBsYW4oc2VhcmNoKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcmFua2VkU2VhcmNoID0gc2VhcmNoUGxhbiA/IHNlYXJjaFBsYW4uc2VhcmNoIDogc2VhcmNoO1xuICBjb25zdCBzZWFyY2hJbnRlbnQgPSBzZWFyY2hQbGFuPy5tb2RlbENsYXNzO1xuICBjb25zdCByZXF1ZXN0ZWRDbGFzcyA9IG9wdGlvbnMubW9kZWxDbGFzcyA/PyBxdWVyeS5tb2RlbENsYXNzID8/IHNlYXJjaEludGVudDtcbiAgY29uc3QgaW5jbHVkZURlcHJlY2F0ZWQgPSBxdWVyeS5pbmNsdWRlRGVwcmVjYXRlZCA/PyBvcHRpb25zLmluY2x1ZGVEZXByZWNhdGVkID8/IGZhbHNlO1xuICBjb25zdCBlbGlnaWJsZSA9IHJlcXVlc3RlZENsYXNzID8gY2xhc3Nlc0F0T3JCZWxvdyhyZXF1ZXN0ZWRDbGFzcykgOiBDSEFUX0NMQVNTX09SREVSO1xuICBjb25zdCBjYW5kaWRhdGVzOiBSYW5rZWRNb2RlbFtdID0gW107XG4gIGNvbnN0IGV4cGxpY2l0Q2xhc3MgPSBvcHRpb25zLm1vZGVsQ2xhc3MgPz8gcXVlcnkubW9kZWxDbGFzcztcbiAgaWYgKFxuICAgIHNlYXJjaEludGVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgZXhwbGljaXRDbGFzcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgaXNDaGF0Q2xhc3Moc2VhcmNoSW50ZW50KSAhPT0gaXNDaGF0Q2xhc3MoZXhwbGljaXRDbGFzcylcbiAgKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmIChyYW5rZWRTZWFyY2ggJiYgcmVxdWVzdGVkQ2xhc3MgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGNsYXNzQnlOYW1lID0gY2xhc3NpZnlFbmRwb2ludENsYXNzZXMobm9ybWFsaXplZCk7XG4gICAgZm9yIChjb25zdCBlbmRwb2ludCBvZiBub3JtYWxpemVkKSB7XG4gICAgICBpZiAoIWluY2x1ZGVEZXByZWNhdGVkICYmIGVuZHBvaW50LnN0YXR1cz8uZGVwcmVjYXRlZCkgY29udGludWU7XG4gICAgICBjb25zdCBjYXBhYmlsaXRpZXMgPSBlbmRwb2ludENhcGFiaWxpdGllcyhlbmRwb2ludCk7XG4gICAgICBpZiAoIWNhcGFiaWxpdGllcy5jaGF0IHx8IChxdWVyeS5yZXF1aXJlc1Rvb2xzICYmICFjYXBhYmlsaXRpZXMudG9vbHMpKSBjb250aW51ZTtcbiAgICAgIGNhbmRpZGF0ZXMucHVzaCh7XG4gICAgICAgIGVuZHBvaW50LFxuICAgICAgICBtb2RlbENsYXNzOiBjbGFzc0J5TmFtZS5nZXQoZW5kcG9pbnQubmFtZSkgPz8gTW9kZWxDbGFzcy5DaGF0QmFsYW5jZWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBtb2RlbENsYXNzIG9mIGVsaWdpYmxlKSB7XG4gICAgICBmb3IgKGNvbnN0IGVuZHBvaW50IG9mIGNsYXNzaWZpZWRbbW9kZWxDbGFzc10pIHtcbiAgICAgICAgaWYgKCFpbmNsdWRlRGVwcmVjYXRlZCAmJiBlbmRwb2ludC5zdGF0dXM/LmRlcHJlY2F0ZWQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAocXVlcnkucmVxdWlyZXNUb29scyAmJiAhZW5kcG9pbnRDYXBhYmlsaXRpZXMoZW5kcG9pbnQpLnRvb2xzKSBjb250aW51ZTtcbiAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHsgZW5kcG9pbnQsIG1vZGVsQ2xhc3MgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHJhbmtlZCA9IGNhbmRpZGF0ZXM7XG4gIGlmIChyYW5rZWRTZWFyY2gpIHtcbiAgICBjb25zdCBleGFjdCA9IGNhbmRpZGF0ZXMuZmluZCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuZW5kcG9pbnQubmFtZSA9PT0gcmFua2VkU2VhcmNoKTtcbiAgICBpZiAoZXhhY3QpIHtcbiAgICAgIHJhbmtlZCA9IFt7IC4uLmV4YWN0LCBzY29yZTogMCB9XTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGhyZXNob2xkID0gcXVlcnkudGhyZXNob2xkID8/IERFRkFVTFRfRlVaWllfVEhSRVNIT0xEO1xuICAgICAgY29uc3Qgc2VhcmNoVG9rZW5zID0gdG9rZW5pemUocmFua2VkU2VhcmNoKTtcbiAgICAgIGNvbnN0IHRva2VuTWF0Y2hlcyA9IGNhbmRpZGF0ZXNcbiAgICAgICAgLmZpbHRlcigoY2FuZGlkYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2FuZGlkYXRlVG9rZW5zID0gbmV3IFNldChzZWFyY2hhYmxlVmFsdWVzKGNhbmRpZGF0ZS5lbmRwb2ludCkuZmxhdE1hcCh0b2tlbml6ZSkpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBzZWFyY2hUb2tlbnMubGVuZ3RoID4gMCAmJiBzZWFyY2hUb2tlbnMuZXZlcnkoKHRva2VuKSA9PiBjYW5kaWRhdGVUb2tlbnMuaGFzKHRva2VuKSlcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChjYW5kaWRhdGUpID0+ICh7IC4uLmNhbmRpZGF0ZSwgc2NvcmU6IDAgfSkpO1xuICAgICAgaWYgKHRva2VuTWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJhbmtlZCA9IHRva2VuTWF0Y2hlcy5zb3J0KGNvbXBhcmVSYW5rZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZnVzZSA9IG5ldyBGdXNlKGNhbmRpZGF0ZXMsIHtcbiAgICAgICAgICBrZXlzOiBbXG4gICAgICAgICAgICBcImVuZHBvaW50Lm5hbWVcIixcbiAgICAgICAgICAgIFwiZW5kcG9pbnQuZGlzcGxheU5hbWVcIixcbiAgICAgICAgICAgIFwiZW5kcG9pbnQuZmFtaWx5XCIsXG4gICAgICAgICAgICBcImVuZHBvaW50Lm1vZGVsU2VydmljZU5hbWVcIixcbiAgICAgICAgICAgIFwiZW5kcG9pbnQuc2VydmljZU5hbWVzXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgICB0aHJlc2hvbGQsXG4gICAgICAgICAgaWdub3JlTG9jYXRpb246IHRydWUsXG4gICAgICAgICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgICAgICAgIHVzZUV4dGVuZGVkU2VhcmNoOiB0cnVlLFxuICAgICAgICAgIGlzQ2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoID0gdG9rZW5pemUocmFua2VkU2VhcmNoKS5qb2luKFwiIFwiKTtcbiAgICAgICAgcmFua2VkID0gbm9ybWFsaXplZFNlYXJjaFxuICAgICAgICAgID8gZnVzZVxuICAgICAgICAgICAgICAuc2VhcmNoKG5vcm1hbGl6ZWRTZWFyY2gpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHJlc3VsdCkgPT4gKHJlc3VsdC5zY29yZSA/PyAwKSA8PSB0aHJlc2hvbGQpXG4gICAgICAgICAgICAgIC5tYXAoKHJlc3VsdCkgPT4gKHsgLi4ucmVzdWx0Lml0ZW0sIHNjb3JlOiByZXN1bHQuc2NvcmUgPz8gMCB9KSlcbiAgICAgICAgICAgICAgLnNvcnQoY29tcGFyZVJhbmtlZClcbiAgICAgICAgICA6IFtdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByZXN0b3JlZCA9IHJhbmtlZC5tYXAoKHJlc3VsdCkgPT4gKHtcbiAgICAuLi5yZXN1bHQsXG4gICAgZW5kcG9pbnQ6IG9yaWdpbmFsQnlOYW1lLmdldChyZXN1bHQuZW5kcG9pbnQubmFtZSkgPz8gcmVzdWx0LmVuZHBvaW50LFxuICB9KSk7XG4gIHJldHVybiBxdWVyeS5saW1pdCA9PT0gdW5kZWZpbmVkID8gcmVzdG9yZWQgOiByZXN0b3JlZC5zbGljZSgwLCBNYXRoLm1heCgwLCBxdWVyeS5saW1pdCkpO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzTW9kZWxRdWVyeShlbmRwb2ludDogU2VydmluZ0VuZHBvaW50U3VtbWFyeSwgcXVlcnk6IE1vZGVsUXVlcnkpOiBib29sZWFuIHtcbiAgaWYgKHF1ZXJ5Lm5hbWUgIT09IHVuZGVmaW5lZCAmJiBlbmRwb2ludC5uYW1lICE9PSBxdWVyeS5uYW1lKSByZXR1cm4gZmFsc2U7XG4gIGlmIChxdWVyeS50YXNrICE9PSB1bmRlZmluZWQgJiYgZW5kcG9pbnQudGFzayAhPT0gcXVlcnkudGFzaykgcmV0dXJuIGZhbHNlO1xuICBpZiAoXG4gICAgcXVlcnkucmVhc29uaW5nRWZmb3J0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAhZW5kcG9pbnQucmVhc29uaW5nRWZmb3J0cz8uaW5jbHVkZXMocXVlcnkucmVhc29uaW5nRWZmb3J0KVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgIHF1ZXJ5LmRpbWVuc2lvbiAhPT0gdW5kZWZpbmVkIHx8XG4gICAgcXVlcnkubWluRGltZW5zaW9uICE9PSB1bmRlZmluZWQgfHxcbiAgICBxdWVyeS5tYXhEaW1lbnNpb24gIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAoZW5kcG9pbnQuZGltZW5zaW9uID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAocXVlcnkuZGltZW5zaW9uICE9PSB1bmRlZmluZWQgJiYgZW5kcG9pbnQuZGltZW5zaW9uICE9PSBxdWVyeS5kaW1lbnNpb24pIHJldHVybiBmYWxzZTtcbiAgICBpZiAocXVlcnkubWluRGltZW5zaW9uICE9PSB1bmRlZmluZWQgJiYgZW5kcG9pbnQuZGltZW5zaW9uIDwgcXVlcnkubWluRGltZW5zaW9uKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHF1ZXJ5Lm1heERpbWVuc2lvbiAhPT0gdW5kZWZpbmVkICYmIGVuZHBvaW50LmRpbWVuc2lvbiA+IHF1ZXJ5Lm1heERpbWVuc2lvbikgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogQ2xhc3NpZnkgY2hhdCBhbmQgZW1iZWRkaW5nIGVuZHBvaW50cyB0aHJvdWdoIHRoZSBUeXBlU2NyaXB0LW93bmVkIHBvbGljeS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmeUVuZHBvaW50Q2xhc3NlcyhcbiAgZW5kcG9pbnRzOiByZWFkb25seSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5W10sXG4pOiBSZWFkb25seU1hcDxzdHJpbmcsIE1vZGVsQ2xhc3M+IHtcbiAgY29uc3QgY2xhc3NpZmllZCA9IGNsYXNzaWZ5RW5kcG9pbnRzKGVuZHBvaW50cyk7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBNb2RlbENsYXNzPigpO1xuICBmb3IgKGNvbnN0IG1vZGVsQ2xhc3Mgb2YgTU9ERUxfQ0xBU1NfT1JERVIpIHtcbiAgICBmb3IgKGNvbnN0IGVuZHBvaW50IG9mIGNsYXNzaWZpZWRbbW9kZWxDbGFzc10pIHJlc3VsdC5zZXQoZW5kcG9pbnQubmFtZSwgbW9kZWxDbGFzcyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIE5vcm1hbGl6ZSBzZXJpYWxpemVkIFNESyBlbmRwb2ludCByZWNvcmRzIHdpdGhvdXQgbmF0aXZlIGJpbmRpbmdzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUVuZHBvaW50cyhlbmRwb2ludHM6IHJlYWRvbmx5IHVua25vd25bXSk6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSB7XG4gIGNvbnN0IHN1bW1hcmllcyA9IGVuZHBvaW50cy5mbGF0TWFwKCh2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gcmVjb3JkKHZhbHVlKTtcbiAgICBjb25zdCBuYW1lID0gc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKGVuZHBvaW50Lm5hbWUpO1xuICAgIGlmICghbmFtZSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGVudGl0aWVzID0gYXJyYXlWYWx1ZShyZWNvcmQoZW5kcG9pbnQuY29uZmlnKS5zZXJ2ZWRfZW50aXRpZXMpLm1hcChyZWNvcmQpO1xuICAgIGNvbnN0IGlkZW50aXRpZXMgPSBbXG4gICAgICBuYW1lLFxuICAgICAgLi4uZW50aXRpZXMuZmxhdE1hcCgoZW50aXR5KSA9PlxuICAgICAgICBbXG4gICAgICAgICAgc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKGVudGl0eS5lbnRpdHlfbmFtZSksXG4gICAgICAgICAgc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKHJlY29yZChlbnRpdHkuZm91bmRhdGlvbl9tb2RlbCkubmFtZSksXG4gICAgICAgICAgc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKHJlY29yZChlbnRpdHkuZXh0ZXJuYWxfbW9kZWwpLm5hbWUpLFxuICAgICAgICBdLmZpbHRlcigoaWRlbnRpdHkpOiBpZGVudGl0eSBpcyBzdHJpbmcgPT4gQm9vbGVhbihpZGVudGl0eSkpLFxuICAgICAgKSxcbiAgICBdO1xuICAgIGNvbnN0IG1vZGVsU2VydmljZU5hbWUgPSBlbnRpdGllc1xuICAgICAgLm1hcChcbiAgICAgICAgKGVudGl0eSkgPT5cbiAgICAgICAgICBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQocmVjb3JkKGVudGl0eS5mb3VuZGF0aW9uX21vZGVsKS5uYW1lKSA/P1xuICAgICAgICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChlbnRpdHkuZW50aXR5X25hbWUpLFxuICAgICAgKVxuICAgICAgLmZpbmQoQm9vbGVhbik7XG4gICAgY29uc3QgZm91bmRhdGlvbk1vZGVscyA9IGVudGl0aWVzLm1hcCgoZW50aXR5KSA9PiByZWNvcmQoZW50aXR5LmZvdW5kYXRpb25fbW9kZWwpKTtcbiAgICBjb25zdCBmYW1pbHkgPVxuICAgICAgZm91bmRhdGlvbk1vZGVsc1xuICAgICAgICAubWFwKChtb2RlbCkgPT4gc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKG1vZGVsLm1vZGVsX2NsYXNzKSlcbiAgICAgICAgLmZpbmQoQm9vbGVhbikgPz8gaWRlbnRpdGllcy5tYXAobW9kZWxGYW1pbHkpLmZpbmQoQm9vbGVhbik7XG4gICAgY29uc3QgcmVhc29uaW5nRWZmb3J0cyA9XG4gICAgICBpZGVudGl0aWVzLm1hcChtb2RlbFJlYXNvbmluZ0VmZm9ydHMpLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiByaWdodC5sZW5ndGggLSBsZWZ0Lmxlbmd0aClbMF0gPz9cbiAgICAgIFtdO1xuICAgIGNvbnN0IHByb2ZpbGUgPSBlbnRpdGllcy5tYXAobW9kZWxQcm9maWxlKS5maW5kKEJvb2xlYW4pO1xuICAgIGNvbnN0IGNhcGFiaWxpdGllc1JlY29yZCA9IHJlY29yZChlbmRwb2ludC5jYXBhYmlsaXRpZXMpO1xuICAgIGNvbnN0IGZvdW5kYXRpb25EZXNjcmlwdGlvbiA9IGZvdW5kYXRpb25Nb2RlbHNcbiAgICAgIC5tYXAoKG1vZGVsKSA9PiBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQobW9kZWwuZGVzY3JpcHRpb24pKVxuICAgICAgLmZpbmQoQm9vbGVhbik7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQoZW5kcG9pbnQuZGVzY3JpcHRpb24pID8/IGZvdW5kYXRpb25EZXNjcmlwdGlvbjtcbiAgICBjb25zdCBzdW1tYXJ5OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5ID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGRpc3BsYXlOYW1lOiB0b01vZGVsRGlzcGxheU5hbWUobmFtZSwgcHJvdmlkZWREaXNwbGF5TmFtZShlbmRwb2ludCwgZW50aXRpZXMpKSxcbiAgICAgIC4uLihmYW1pbHkgPyB7IGZhbWlseSB9IDoge30pLFxuICAgICAgLi4uKHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChlbmRwb2ludC50YXNrKVxuICAgICAgICA/IHsgdGFzazogc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKGVuZHBvaW50LnRhc2spIH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4oc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKHJlY29yZChlbmRwb2ludC5zdGF0ZSkucmVhZHkpXG4gICAgICAgID8geyBzdGF0ZTogc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKHJlY29yZChlbmRwb2ludC5zdGF0ZSkucmVhZHkpIH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4oZGVzY3JpcHRpb24gPyB7IGRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICBzdXBwb3J0c1Rvb2xzOlxuICAgICAgICBib29sZWFuVmFsdWUoY2FwYWJpbGl0aWVzUmVjb3JkLmZ1bmN0aW9uX2NhbGxpbmcpID8/IGlkZW50aXRpZXMuc29tZShzdXBwb3J0c1Rvb2xzQnlGYW1pbHkpLFxuICAgICAgLi4uKHByb2ZpbGUgPyB7IHByb2ZpbGUgfSA6IHt9KSxcbiAgICAgIHNlcnZpY2VOYW1lczogT2JqZWN0LmFzc2lnbih7fSwgLi4uaWRlbnRpdGllcy5tYXAobW9kZWxTZXJ2aWNlTmFtZXMpKSxcbiAgICAgIC4uLihtb2RlbFNlcnZpY2VOYW1lID8geyBtb2RlbFNlcnZpY2VOYW1lIH0gOiB7fSksXG4gICAgICAuLi4ocmVhc29uaW5nRWZmb3J0cy5sZW5ndGggPyB7IHJlYXNvbmluZ0VmZm9ydHMgfSA6IHt9KSxcbiAgICAgIHN0YXR1czogbW9kZWxTdGF0dXNGb3IoLi4uaWRlbnRpdGllcyksXG4gICAgfTtcbiAgICByZXR1cm4gW3N1bW1hcnldO1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IGNsYXNzaWZ5RW5kcG9pbnRDbGFzc2VzKHN1bW1hcmllcyk7XG4gIHJldHVybiBzdW1tYXJpZXMubWFwKChzdW1tYXJ5KSA9PiB7XG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IGNsYXNzZXMuZ2V0KHN1bW1hcnkubmFtZSk7XG4gICAgcmV0dXJuIG1vZGVsQ2xhc3MgPyB7IC4uLnN1bW1hcnksIGNsYXNzOiBtb2RlbENsYXNzIH0gOiBzdW1tYXJ5O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVJhbmtlZChsZWZ0OiBSYW5rZWRNb2RlbCwgcmlnaHQ6IFJhbmtlZE1vZGVsKTogbnVtYmVyIHtcbiAgY29uc3Qgc2NvcmUgPSBNYXRoLnJvdW5kKChsZWZ0LnNjb3JlID8/IDApICogMTAwMCkgLSBNYXRoLnJvdW5kKChyaWdodC5zY29yZSA/PyAwKSAqIDEwMDApO1xuICBpZiAoc2NvcmUgIT09IDApIHJldHVybiBzY29yZTtcbiAgY29uc3QgbGVmdFZlcnNpb24gPSB2ZXJzaW9uVHVwbGUobGVmdC5lbmRwb2ludC5uYW1lKTtcbiAgY29uc3QgcmlnaHRWZXJzaW9uID0gdmVyc2lvblR1cGxlKHJpZ2h0LmVuZHBvaW50Lm5hbWUpO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMzsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHZlcnNpb24gPSByaWdodFZlcnNpb25baW5kZXhdISAtIGxlZnRWZXJzaW9uW2luZGV4XSE7XG4gICAgaWYgKHZlcnNpb24gIT09IDApIHJldHVybiB2ZXJzaW9uO1xuICB9XG4gIGNvbnN0IHZhcmlhbnQgPSBtb2RlbFZhcmlhbnRSYW5rKGxlZnQuZW5kcG9pbnQubmFtZSkgLSBtb2RlbFZhcmlhbnRSYW5rKHJpZ2h0LmVuZHBvaW50Lm5hbWUpO1xuICBpZiAodmFyaWFudCAhPT0gMCkgcmV0dXJuIHZhcmlhbnQ7XG4gIHJldHVybiBNT0RFTF9DTEFTU19PUkRFUi5pbmRleE9mKGxlZnQubW9kZWxDbGFzcykgLSBNT0RFTF9DTEFTU19PUkRFUi5pbmRleE9mKHJpZ2h0Lm1vZGVsQ2xhc3MpO1xufVxuXG5mdW5jdGlvbiBtb2RlbFZhcmlhbnRSYW5rKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmICghLyg/Ol58Wy1fLl0pZ3B0KD86Wy1fLl18JCkvaS50ZXN0KG5hbWUpKSByZXR1cm4gMjtcbiAgaWYgKC8oPzpefFstXy5dKXNvbCg/OlstXy5dfCQpL2kudGVzdChuYW1lKSkgcmV0dXJuIDA7XG4gIGlmICgvKD86XnxbLV8uXSlsdW5hKD86Wy1fLl18JCkvaS50ZXN0KG5hbWUpKSByZXR1cm4gMTtcbiAgcmV0dXJuIDI7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBnZW5lcmljIGpvYiBzZWFyY2hlcyB0byB0aGUgY2FwYWJpbGl0eSBjbGFzcyB0aGF0IG93bnMgdGhlIHdvcmsuXG4gKlxuICogQSBwdXJlIGludGVudCBzdWNoIGFzIFwic3VtbWFyaXplXCIgcmFua3MgdGhhdCBjYXBhYmlsaXR5IGRpcmVjdGx5LiBNaXhlZFxuICogcXVlcmllcyByZW1vdmUgdGhlIGludGVudCB3b3JkIGJ1dCByZXRhaW4gdGhlIG1vZGVsIGlkZW50aXR5LCBzbyBcImdwdCBjaGF0XCJcbiAqIHN0aWxsIHVzZXMgdGhlIGhpc3RvcmljYWwgdmVyc2lvbiBhbmQgdmFyaWFudCBwcmVmZXJlbmNlIGZvciBHUFQuXG4gKi9cbmZ1bmN0aW9uIG1vZGVsU2VhcmNoUGxhbihcbiAgc2VhcmNoOiBzdHJpbmcsXG4pOiB7IHJlYWRvbmx5IG1vZGVsQ2xhc3M6IE1vZGVsQ2xhc3M7IHJlYWRvbmx5IHNlYXJjaD86IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9rZW5zID0gdG9rZW5pemUoc2VhcmNoKS5maWx0ZXIoKHRva2VuKSA9PiAhU0VBUkNIX0lOVEVOVF9GSUxMRVJTLmhhcyh0b2tlbikpO1xuICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgY2hhdCA9IHRva2Vucy5zb21lKCh0b2tlbikgPT4gQ0hBVF9TRUFSQ0hfSU5URU5UUy5oYXModG9rZW4pKTtcbiAgY29uc3QgZW1iZWRkaW5nID0gdG9rZW5zLnNvbWUoKHRva2VuKSA9PiBFTUJFRERJTkdfU0VBUkNIX0lOVEVOVFMuaGFzKHRva2VuKSk7XG4gIGlmIChjaGF0ID09PSBlbWJlZGRpbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGludGVudFdvcmRzID0gY2hhdCA/IENIQVRfU0VBUkNIX0lOVEVOVFMgOiBFTUJFRERJTkdfU0VBUkNIX0lOVEVOVFM7XG4gIGNvbnN0IHJlbWFpbmluZyA9IHRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiAhaW50ZW50V29yZHMuaGFzKHRva2VuKSk7XG4gIHJldHVybiB7XG4gICAgbW9kZWxDbGFzczogY2hhdCA/IE1vZGVsQ2xhc3MuQ2hhdFRoaW5raW5nIDogTW9kZWxDbGFzcy5FbWJlZGRpbmcsXG4gICAgLi4uKHJlbWFpbmluZy5sZW5ndGggPiAwID8geyBzZWFyY2g6IHJlbWFpbmluZy5qb2luKFwiIFwiKSB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiB0b2tlbml6ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvW2EtejAtOV0rL2cpID8/IFtdO1xufVxuXG5mdW5jdGlvbiBzZWFyY2hhYmxlVmFsdWVzKGVuZHBvaW50OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5KTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgIGVuZHBvaW50Lm5hbWUsXG4gICAgZW5kcG9pbnQuZGlzcGxheU5hbWUsXG4gICAgZW5kcG9pbnQuZmFtaWx5LFxuICAgIGVuZHBvaW50Lm1vZGVsU2VydmljZU5hbWUsXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhlbmRwb2ludC5zZXJ2aWNlTmFtZXMgPz8ge30pLFxuICBdLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBtb2RlbFByb2ZpbGUoZW50aXR5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikge1xuICBjb25zdCBzb3VyY2UgPSByZWNvcmQocmVjb3JkKGVudGl0eS5mb3VuZGF0aW9uX21vZGVsKS5haV9nYXRld2F5X21vZGVsX3Byb2ZpbGUpO1xuICBjb25zdCBxdWFsaXR5ID0gZmluaXRlTnVtYmVyKHNvdXJjZS5xdWFsaXR5KTtcbiAgY29uc3Qgc3BlZWQgPSBmaW5pdGVOdW1iZXIoc291cmNlLnNwZWVkKTtcbiAgY29uc3QgY29zdCA9IGZpbml0ZU51bWJlcihzb3VyY2UuY29zdCk7XG4gIGlmIChxdWFsaXR5ID09PSB1bmRlZmluZWQgJiYgc3BlZWQgPT09IHVuZGVmaW5lZCAmJiBjb3N0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgLi4uKHF1YWxpdHkgIT09IHVuZGVmaW5lZCA/IHsgcXVhbGl0eSB9IDoge30pLFxuICAgIC4uLihzcGVlZCAhPT0gdW5kZWZpbmVkID8geyBzcGVlZCB9IDoge30pLFxuICAgIC4uLihjb3N0ICE9PSB1bmRlZmluZWQgPyB7IGNvc3QgfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvdmlkZWREaXNwbGF5TmFtZShcbiAgZW5kcG9pbnQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBlbnRpdGllczogcmVhZG9ubHkgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgdGFnIG9mIGFycmF5VmFsdWUoZW5kcG9pbnQudGFncykubWFwKHJlY29yZCkpIHtcbiAgICBpZiAoIVtcImRpc3BsYXlfbmFtZVwiLCBcImRpc3BsYXlOYW1lXCIsIFwibmFtZVwiXS5pbmNsdWRlcyhTdHJpbmcodGFnLmtleSkpKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZCh0YWcudmFsdWUpO1xuICAgIGlmICh2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiAoXG4gICAgZW50aXRpZXNcbiAgICAgIC5tYXAoKGVudGl0eSkgPT4gc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKHJlY29yZChlbnRpdHkuZm91bmRhdGlvbl9tb2RlbCkuZGlzcGxheV9uYW1lKSlcbiAgICAgIC5maW5kKEJvb2xlYW4pID8/XG4gICAgZW50aXRpZXNcbiAgICAgIC5tYXAoKGVudGl0eSkgPT4gc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKHJlY29yZChlbnRpdHkuZXh0ZXJuYWxfbW9kZWwpLm5hbWUpKVxuICAgICAgLmZpbmQoQm9vbGVhbilcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVjb3JkKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gb2JqZWN0LmlzUmVjb3JkKHZhbHVlKSA/IHZhbHVlIDoge307XG59XG5cbmZ1bmN0aW9uIGFycmF5VmFsdWUodmFsdWU6IHVua25vd24pOiB1bmtub3duW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdO1xufVxuXG5mdW5jdGlvbiBmaW5pdGVOdW1iZXIodmFsdWU6IHVua25vd24pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYm9vbGVhblZhbHVlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
331
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3JhbmtpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX3JhbmtpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsVUFBVSxJQUFJLGdCQUFnQixHQUsvQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUUzQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsRyxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdEcsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7QUFFcEMsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFDcEMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0RixNQUFNLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ2xDLE1BQU07SUFDTixZQUFZO0lBQ1osYUFBYTtJQUNiLFdBQVc7SUFDWCxXQUFXO0lBQ1gsZUFBZTtJQUNmLGVBQWU7SUFDZixTQUFTO0NBQ1YsQ0FBQyxDQUFDO0FBQ0gsTUFBTSx3QkFBd0Is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QUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBvYmplY3QsIHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIE1vZGVsQ2xhc3MgYXMgTW9kZWxDbGFzc1ZhbHVlcyxcbiAgdHlwZSBNb2RlbENsYXNzIGFzIE1vZGVsQ2xhc3NUeXBlLFxuICB0eXBlIE1vZGVsUXVlcnksXG4gIHR5cGUgUmFua2VkTW9kZWwsXG4gIHR5cGUgU2VydmluZ0VuZHBvaW50U3VtbWFyeSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsL2NvbnRyYWN0c1wiO1xuaW1wb3J0IHsgdG9Nb2RlbERpc3BsYXlOYW1lIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsL2Rpc3BsYXlcIjtcbmltcG9ydCBGdXNlIGZyb20gXCJmdXNlLmpzXCI7XG5cbmltcG9ydCB7IG1vZGVsU3RhdHVzRm9yIH0gZnJvbSBcIi4vX3JldGlyZW1lbnQudHNcIjtcbmltcG9ydCB7IGNsYXNzZXNBdE9yQmVsb3csIENIQVRfQ0xBU1NfT1JERVIsIGlzQ2hhdENsYXNzLCBNT0RFTF9DTEFTU19PUkRFUiB9IGZyb20gXCIuL2NsYXNzZXMudHNcIjtcbmltcG9ydCB7XG4gIGNsYXNzaWZ5RW5kcG9pbnRzLFxuICBlbmRwb2ludENhcGFiaWxpdGllcyxcbiAgc3VwcG9ydHNUb29sc0J5RmFtaWx5LFxuICB2ZXJzaW9uVHVwbGUsXG59IGZyb20gXCIuL2NsYXNzaWZ5LnRzXCI7XG5pbXBvcnQgeyBpc09wZW5XZWlnaHRzR3B0LCBtb2RlbEZhbWlseSwgbW9kZWxSZWFzb25pbmdFZmZvcnRzLCBtb2RlbFNlcnZpY2VOYW1lcyB9IGZyb20gXCIuL3BvbGljeS50c1wiO1xuXG50eXBlIE1vZGVsQ2xhc3MgPSBNb2RlbENsYXNzVHlwZTtcbmNvbnN0IE1vZGVsQ2xhc3MgPSBNb2RlbENsYXNzVmFsdWVzO1xuXG5jb25zdCBERUZBVUxUX0ZVWlpZX1RIUkVTSE9MRCA9IDAuNDtcbmNvbnN0IFNFQVJDSF9JTlRFTlRfRklMTEVSUyA9IG5ldyBTZXQoW1wiYVwiLCBcImJlc3RcIiwgXCJmb3JcIiwgXCJtb2RlbFwiLCBcIm1vZGVsc1wiLCBcInRoZVwiXSk7XG5jb25zdCBDSEFUX1NFQVJDSF9JTlRFTlRTID0gbmV3IFNldChbXG4gIFwiY2hhdFwiLFxuICBcImNvbXBsZXRpb25cIixcbiAgXCJjb21wbGV0aW9uc1wiLFxuICBcInN1bW1hcml6ZVwiLFxuICBcInN1bW1hcmlzZVwiLFxuICBcInN1bW1hcml6YXRpb25cIixcbiAgXCJzdW1tYXJpc2F0aW9uXCIsXG4gIFwic3VtbWFyeVwiLFxuXSk7XG5jb25zdCBFTUJFRERJTkdfU0VBUkNIX0lOVEVOVFMgPSBuZXcgU2V0KFtcbiAgXCJlbWJlZFwiLFxuICBcImVtYmVkZGluZ1wiLFxuICBcImVtYmVkZGluZ3NcIixcbiAgXCJ2ZWN0b3JcIixcbiAgXCJ2ZWN0b3JpemVcIixcbiAgXCJ2ZWN0b3Jpc2VcIixcbl0pO1xuXG5pbnRlcmZhY2UgTmF0aXZlUmFua2luZ09wdGlvbnMge1xuICByZWFkb25seSBpbmNsdWRlRGVwcmVjYXRlZD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG1vZGVsQ2xhc3M/OiBNb2RlbENsYXNzO1xuICByZWFkb25seSB0YXNrPzogc3RyaW5nO1xufVxuXG4vKiogUmFuayBlbmRwb2ludCByZWNvcmRzIHRocm91Z2ggdGhlIFR5cGVTY3JpcHQtb3duZWQgbW9kZWwgcG9saWN5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmtFbmRwb2ludHMoXG4gIGVuZHBvaW50czogcmVhZG9ubHkgU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdLFxuICBxdWVyeTogTW9kZWxRdWVyeSA9IHt9LFxuICBvcHRpb25zOiBOYXRpdmVSYW5raW5nT3B0aW9ucyA9IHt9LFxuKTogUmFua2VkTW9kZWxbXSB7XG4gIGNvbnN0IGZpbHRlcmVkID0gZW5kcG9pbnRzLmZpbHRlcigoZW5kcG9pbnQpID0+IG1hdGNoZXNNb2RlbFF1ZXJ5KGVuZHBvaW50LCBxdWVyeSkpO1xuICBjb25zdCBvcmlnaW5hbEJ5TmFtZSA9IG5ldyBNYXAoZmlsdGVyZWQubWFwKChlbmRwb2ludCkgPT4gW2VuZHBvaW50Lm5hbWUsIGVuZHBvaW50XSkpO1xuICBjb25zdCBub3JtYWxpemVkID0gZmlsdGVyZWQubWFwKChlbmRwb2ludCkgPT4gKHtcbiAgICAuLi5lbmRwb2ludCxcbiAgICAuLi4ob3B0aW9ucy5tb2RlbENsYXNzID8geyBjbGFzczogb3B0aW9ucy5tb2RlbENsYXNzIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMudGFzayA/IHsgdGFzazogb3B0aW9ucy50YXNrIH0gOiB7fSksXG4gIH0pKTtcbiAgY29uc3QgY2xhc3NpZmllZCA9IG9wdGlvbnMubW9kZWxDbGFzc1xuICAgID8ge1xuICAgICAgICBbTW9kZWxDbGFzcy5DaGF0VGhpbmtpbmddOiBbXSxcbiAgICAgICAgW01vZGVsQ2xhc3MuQ2hhdEJhbGFuY2VkXTogW10sXG4gICAgICAgIFtNb2RlbENsYXNzLkNoYXRGYXN0XTogW10sXG4gICAgICAgIFtNb2RlbENsYXNzLkVtYmVkZGluZ106IFtdLFxuICAgICAgICBbb3B0aW9ucy5tb2RlbENsYXNzXTogbm9ybWFsaXplZCxcbiAgICAgIH1cbiAgICA6IGNsYXNzaWZ5RW5kcG9pbnRzKG5vcm1hbGl6ZWQpO1xuICBjb25zdCBzZWFyY2ggPSBxdWVyeS5zZWFyY2g/LnRyaW0oKTtcbiAgY29uc3Qgc2VhcmNoUGxhbiA9IHNlYXJjaCA/IG1vZGVsU2VhcmNoUGxhbihzZWFyY2gpIDogdW5kZWZpbmVkO1xuICBjb25zdCByYW5rZWRTZWFyY2ggPSBzZWFyY2hQbGFuID8gc2VhcmNoUGxhbi5zZWFyY2ggOiBzZWFyY2g7XG4gIGNvbnN0IHNlYXJjaEludGVudCA9IHNlYXJjaFBsYW4/Lm1vZGVsQ2xhc3M7XG4gIGNvbnN0IHJlcXVlc3RlZENsYXNzID0gb3B0aW9ucy5tb2RlbENsYXNzID8/IHF1ZXJ5Lm1vZGVsQ2xhc3MgPz8gc2VhcmNoSW50ZW50O1xuICBjb25zdCBpbmNsdWRlRGVwcmVjYXRlZCA9IHF1ZXJ5LmluY2x1ZGVEZXByZWNhdGVkID8/IG9wdGlvbnMuaW5jbHVkZURlcHJlY2F0ZWQgPz8gZmFsc2U7XG4gIGNvbnN0IGVsaWdpYmxlID0gcmVxdWVzdGVkQ2xhc3MgPyBjbGFzc2VzQXRPckJlbG93KHJlcXVlc3RlZENsYXNzKSA6IENIQVRfQ0xBU1NfT1JERVI7XG4gIGNvbnN0IGNhbmRpZGF0ZXM6IFJhbmtlZE1vZGVsW10gPSBbXTtcbiAgY29uc3QgZXhwbGljaXRDbGFzcyA9IG9wdGlvbnMubW9kZWxDbGFzcyA/PyBxdWVyeS5tb2RlbENsYXNzO1xuICBpZiAoXG4gICAgc2VhcmNoSW50ZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICBleHBsaWNpdENsYXNzICE9PSB1bmRlZmluZWQgJiZcbiAgICBpc0NoYXRDbGFzcyhzZWFyY2hJbnRlbnQpICE9PSBpc0NoYXRDbGFzcyhleHBsaWNpdENsYXNzKVxuICApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKHJhbmtlZFNlYXJjaCAmJiByZXF1ZXN0ZWRDbGFzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgY2xhc3NCeU5hbWUgPSBjbGFzc2lmeUVuZHBvaW50Q2xhc3Nlcyhub3JtYWxpemVkKTtcbiAgICBmb3IgKGNvbnN0IGVuZHBvaW50IG9mIG5vcm1hbGl6ZWQpIHtcbiAgICAgIGlmICghaW5jbHVkZURlcHJlY2F0ZWQgJiYgZW5kcG9pbnQuc3RhdHVzPy5kZXByZWNhdGVkKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IGVuZHBvaW50Q2FwYWJpbGl0aWVzKGVuZHBvaW50KTtcbiAgICAgIGlmICghY2FwYWJpbGl0aWVzLmNoYXQgfHwgKHF1ZXJ5LnJlcXVpcmVzVG9vbHMgJiYgIWNhcGFiaWxpdGllcy50b29scykpIGNvbnRpbnVlO1xuICAgICAgY2FuZGlkYXRlcy5wdXNoKHtcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIG1vZGVsQ2xhc3M6IGNsYXNzQnlOYW1lLmdldChlbmRwb2ludC5uYW1lKSA/PyBNb2RlbENsYXNzLkNoYXRCYWxhbmNlZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGNvbnN0IG1vZGVsQ2xhc3Mgb2YgZWxpZ2libGUpIHtcbiAgICAgIGZvciAoY29uc3QgZW5kcG9pbnQgb2YgY2xhc3NpZmllZFttb2RlbENsYXNzXSkge1xuICAgICAgICBpZiAoIWluY2x1ZGVEZXByZWNhdGVkICYmIGVuZHBvaW50LnN0YXR1cz8uZGVwcmVjYXRlZCkgY29udGludWU7XG4gICAgICAgIGlmIChxdWVyeS5yZXF1aXJlc1Rvb2xzICYmICFlbmRwb2ludENhcGFiaWxpdGllcyhlbmRwb2ludCkudG9vbHMpIGNvbnRpbnVlO1xuICAgICAgICBjYW5kaWRhdGVzLnB1c2goeyBlbmRwb2ludCwgbW9kZWxDbGFzcyB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsZXQgcmFua2VkID0gY2FuZGlkYXRlcztcbiAgaWYgKHJhbmtlZFNlYXJjaCkge1xuICAgIGNvbnN0IGV4YWN0ID0gY2FuZGlkYXRlcy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5lbmRwb2ludC5uYW1lID09PSByYW5rZWRTZWFyY2gpO1xuICAgIGlmIChleGFjdCkge1xuICAgICAgcmFua2VkID0gW3sgLi4uZXhhY3QsIHNjb3JlOiAwIH1dO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0aHJlc2hvbGQgPSBxdWVyeS50aHJlc2hvbGQgPz8gREVGQVVMVF9GVVpaWV9USFJFU0hPTEQ7XG4gICAgICBjb25zdCBzZWFyY2hUb2tlbnMgPSB0b2tlbml6ZShyYW5rZWRTZWFyY2gpO1xuICAgICAgY29uc3QgdG9rZW5NYXRjaGVzID0gY2FuZGlkYXRlc1xuICAgICAgICAuZmlsdGVyKChjYW5kaWRhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjYW5kaWRhdGVUb2tlbnMgPSBuZXcgU2V0KHNlYXJjaGFibGVWYWx1ZXMoY2FuZGlkYXRlLmVuZHBvaW50KS5mbGF0TWFwKHRva2VuaXplKSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHNlYXJjaFRva2Vucy5sZW5ndGggPiAwICYmIHNlYXJjaFRva2Vucy5ldmVyeSgodG9rZW4pID0+IGNhbmRpZGF0ZVRva2Vucy5oYXModG9rZW4pKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKGNhbmRpZGF0ZSkgPT4gKHsgLi4uY2FuZGlkYXRlLCBzY29yZTogMCB9KSk7XG4gICAgICBpZiAodG9rZW5NYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmFua2VkID0gdG9rZW5NYXRjaGVzLnNvcnQoY29tcGFyZVJhbmtlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmdXNlID0gbmV3IEZ1c2UoY2FuZGlkYXRlcywge1xuICAgICAgICAgIGtleXM6IFtcbiAgICAgICAgICAgIFwiZW5kcG9pbnQubmFtZVwiLFxuICAgICAgICAgICAgXCJlbmRwb2ludC5kaXNwbGF5TmFtZVwiLFxuICAgICAgICAgICAgXCJlbmRwb2ludC5mYW1pbHlcIixcbiAgICAgICAgICAgIFwiZW5kcG9pbnQubW9kZWxTZXJ2aWNlTmFtZVwiLFxuICAgICAgICAgICAgXCJlbmRwb2ludC5zZXJ2aWNlTmFtZXNcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIHRocmVzaG9sZCxcbiAgICAgICAgICBpZ25vcmVMb2NhdGlvbjogdHJ1ZSxcbiAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgdXNlRXh0ZW5kZWRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgaXNDYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSB0b2tlbml6ZShyYW5rZWRTZWFyY2gpLmpvaW4oXCIgXCIpO1xuICAgICAgICByYW5rZWQgPSBub3JtYWxpemVkU2VhcmNoXG4gICAgICAgICAgPyBmdXNlXG4gICAgICAgICAgICAgIC5zZWFyY2gobm9ybWFsaXplZFNlYXJjaClcbiAgICAgICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiAocmVzdWx0LnNjb3JlID8/IDApIDw9IHRocmVzaG9sZClcbiAgICAgICAgICAgICAgLm1hcCgocmVzdWx0KSA9PiAoeyAuLi5yZXN1bHQuaXRlbSwgc2NvcmU6IHJlc3VsdC5zY29yZSA/PyAwIH0pKVxuICAgICAgICAgICAgICAuc29ydChjb21wYXJlUmFua2VkKVxuICAgICAgICAgIDogW107XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc3RvcmVkID0gcmFua2VkLm1hcCgocmVzdWx0KSA9PiAoe1xuICAgIC4uLnJlc3VsdCxcbiAgICBlbmRwb2ludDogb3JpZ2luYWxCeU5hbWUuZ2V0KHJlc3VsdC5lbmRwb2ludC5uYW1lKSA/PyByZXN1bHQuZW5kcG9pbnQsXG4gIH0pKTtcbiAgcmV0dXJuIHF1ZXJ5LmxpbWl0ID09PSB1bmRlZmluZWQgPyByZXN0b3JlZCA6IHJlc3RvcmVkLnNsaWNlKDAsIE1hdGgubWF4KDAsIHF1ZXJ5LmxpbWl0KSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXNNb2RlbFF1ZXJ5KGVuZHBvaW50OiBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LCBxdWVyeTogTW9kZWxRdWVyeSk6IGJvb2xlYW4ge1xuICBpZiAocXVlcnkubmFtZSAhPT0gdW5kZWZpbmVkICYmIGVuZHBvaW50Lm5hbWUgIT09IHF1ZXJ5Lm5hbWUpIHJldHVybiBmYWxzZTtcbiAgaWYgKHF1ZXJ5LnRhc2sgIT09IHVuZGVmaW5lZCAmJiBlbmRwb2ludC50YXNrICE9PSBxdWVyeS50YXNrKSByZXR1cm4gZmFsc2U7XG4gIGlmIChcbiAgICBxdWVyeS5yZWFzb25pbmdFZmZvcnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICFlbmRwb2ludC5yZWFzb25pbmdFZmZvcnRzPy5pbmNsdWRlcyhxdWVyeS5yZWFzb25pbmdFZmZvcnQpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgcXVlcnkuZGltZW5zaW9uICE9PSB1bmRlZmluZWQgfHxcbiAgICBxdWVyeS5taW5EaW1lbnNpb24gIT09IHVuZGVmaW5lZCB8fFxuICAgIHF1ZXJ5Lm1heERpbWVuc2lvbiAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGlmIChlbmRwb2ludC5kaW1lbnNpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChxdWVyeS5kaW1lbnNpb24gIT09IHVuZGVmaW5lZCAmJiBlbmRwb2ludC5kaW1lbnNpb24gIT09IHF1ZXJ5LmRpbWVuc2lvbikgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChxdWVyeS5taW5EaW1lbnNpb24gIT09IHVuZGVmaW5lZCAmJiBlbmRwb2ludC5kaW1lbnNpb24gPCBxdWVyeS5taW5EaW1lbnNpb24pIHJldHVybiBmYWxzZTtcbiAgICBpZiAocXVlcnkubWF4RGltZW5zaW9uICE9PSB1bmRlZmluZWQgJiYgZW5kcG9pbnQuZGltZW5zaW9uID4gcXVlcnkubWF4RGltZW5zaW9uKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBDbGFzc2lmeSBjaGF0IGFuZCBlbWJlZGRpbmcgZW5kcG9pbnRzIHRocm91Z2ggdGhlIFR5cGVTY3JpcHQtb3duZWQgcG9saWN5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5RW5kcG9pbnRDbGFzc2VzKFxuICBlbmRwb2ludHM6IHJlYWRvbmx5IFNlcnZpbmdFbmRwb2ludFN1bW1hcnlbXSxcbik6IFJlYWRvbmx5TWFwPHN0cmluZywgTW9kZWxDbGFzcz4ge1xuICBjb25zdCBjbGFzc2lmaWVkID0gY2xhc3NpZnlFbmRwb2ludHMoZW5kcG9pbnRzKTtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxzdHJpbmcsIE1vZGVsQ2xhc3M+KCk7XG4gIGZvciAoY29uc3QgbW9kZWxDbGFzcyBvZiBNT0RFTF9DTEFTU19PUkRFUikge1xuICAgIGZvciAoY29uc3QgZW5kcG9pbnQgb2YgY2xhc3NpZmllZFttb2RlbENsYXNzXSkgcmVzdWx0LnNldChlbmRwb2ludC5uYW1lLCBtb2RlbENsYXNzKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogTm9ybWFsaXplIHNlcmlhbGl6ZWQgU0RLIGVuZHBvaW50IHJlY29yZHMgd2l0aG91dCBuYXRpdmUgYmluZGluZ3MuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRW5kcG9pbnRzKGVuZHBvaW50czogcmVhZG9ubHkgdW5rbm93bltdKTogU2VydmluZ0VuZHBvaW50U3VtbWFyeVtdIHtcbiAgY29uc3Qgc3VtbWFyaWVzID0gZW5kcG9pbnRzLmZsYXRNYXAoKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSByZWNvcmQodmFsdWUpO1xuICAgIGNvbnN0IG5hbWUgPSBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQoZW5kcG9pbnQubmFtZSk7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gW107XG4gICAgY29uc3QgZW50aXRpZXMgPSBhcnJheVZhbHVlKHJlY29yZChlbmRwb2ludC5jb25maWcpLnNlcnZlZF9lbnRpdGllcykubWFwKHJlY29yZCk7XG4gICAgY29uc3QgaWRlbnRpdGllcyA9IFtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5lbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+XG4gICAgICAgIFtcbiAgICAgICAgICBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQoZW50aXR5LmVudGl0eV9uYW1lKSxcbiAgICAgICAgICBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQocmVjb3JkKGVudGl0eS5mb3VuZGF0aW9uX21vZGVsKS5uYW1lKSxcbiAgICAgICAgICBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQocmVjb3JkKGVudGl0eS5leHRlcm5hbF9tb2RlbCkubmFtZSksXG4gICAgICAgIF0uZmlsdGVyKChpZGVudGl0eSk6IGlkZW50aXR5IGlzIHN0cmluZyA9PiBCb29sZWFuKGlkZW50aXR5KSksXG4gICAgICApLFxuICAgIF07XG4gICAgY29uc3QgbW9kZWxTZXJ2aWNlTmFtZSA9IGVudGl0aWVzXG4gICAgICAubWFwKFxuICAgICAgICAoZW50aXR5KSA9PlxuICAgICAgICAgIHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChyZWNvcmQoZW50aXR5LmZvdW5kYXRpb25fbW9kZWwpLm5hbWUpID8/XG4gICAgICAgICAgc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKGVudGl0eS5lbnRpdHlfbmFtZSksXG4gICAgICApXG4gICAgICAuZmluZChCb29sZWFuKTtcbiAgICBjb25zdCBmb3VuZGF0aW9uTW9kZWxzID0gZW50aXRpZXMubWFwKChlbnRpdHkpID0+IHJlY29yZChlbnRpdHkuZm91bmRhdGlvbl9tb2RlbCkpO1xuICAgIGNvbnN0IGZhbWlseSA9XG4gICAgICBmb3VuZGF0aW9uTW9kZWxzXG4gICAgICAgIC5tYXAoKG1vZGVsKSA9PiBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQobW9kZWwubW9kZWxfY2xhc3MpKVxuICAgICAgICAuZmluZChCb29sZWFuKSA/PyBpZGVudGl0aWVzLm1hcChtb2RlbEZhbWlseSkuZmluZChCb29sZWFuKTtcbiAgICBjb25zdCByZWFzb25pbmdFZmZvcnRzID1cbiAgICAgIGlkZW50aXRpZXMubWFwKG1vZGVsUmVhc29uaW5nRWZmb3J0cykuc29ydCgobGVmdCwgcmlnaHQpID0+IHJpZ2h0Lmxlbmd0aCAtIGxlZnQubGVuZ3RoKVswXSA/P1xuICAgICAgW107XG4gICAgY29uc3QgcHJvZmlsZSA9IGVudGl0aWVzLm1hcChtb2RlbFByb2ZpbGUpLmZpbmQoQm9vbGVhbik7XG4gICAgY29uc3QgY2FwYWJpbGl0aWVzUmVjb3JkID0gcmVjb3JkKGVuZHBvaW50LmNhcGFiaWxpdGllcyk7XG4gICAgY29uc3QgZm91bmRhdGlvbkRlc2NyaXB0aW9uID0gZm91bmRhdGlvbk1vZGVsc1xuICAgICAgLm1hcCgobW9kZWwpID0+IHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChtb2RlbC5kZXNjcmlwdGlvbikpXG4gICAgICAuZmluZChCb29sZWFuKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChlbmRwb2ludC5kZXNjcmlwdGlvbikgPz8gZm91bmRhdGlvbkRlc2NyaXB0aW9uO1xuICAgIGNvbnN0IHN1bW1hcnk6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkgPSB7XG4gICAgICBuYW1lLFxuICAgICAgZGlzcGxheU5hbWU6IHRvTW9kZWxEaXNwbGF5TmFtZShuYW1lLCBwcm92aWRlZERpc3BsYXlOYW1lKGVuZHBvaW50LCBlbnRpdGllcykpLFxuICAgICAgLi4uKGZhbWlseSA/IHsgZmFtaWx5IH0gOiB7fSksXG4gICAgICAuLi4oc3RyaW5nVXRpbHMudHJpbVRvVW5kZWZpbmVkKGVuZHBvaW50LnRhc2spXG4gICAgICAgID8geyB0YXNrOiBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQoZW5kcG9pbnQudGFzaykgfVxuICAgICAgICA6IHt9KSxcbiAgICAgIC4uLihzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQocmVjb3JkKGVuZHBvaW50LnN0YXRlKS5yZWFkeSlcbiAgICAgICAgPyB7IHN0YXRlOiBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQocmVjb3JkKGVuZHBvaW50LnN0YXRlKS5yZWFkeSkgfVxuICAgICAgICA6IHt9KSxcbiAgICAgIC4uLihkZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb24gfSA6IHt9KSxcbiAgICAgIHN1cHBvcnRzVG9vbHM6XG4gICAgICAgIGJvb2xlYW5WYWx1ZShjYXBhYmlsaXRpZXNSZWNvcmQuZnVuY3Rpb25fY2FsbGluZykgPz8gaWRlbnRpdGllcy5zb21lKHN1cHBvcnRzVG9vbHNCeUZhbWlseSksXG4gICAgICAuLi4ocHJvZmlsZSA/IHsgcHJvZmlsZSB9IDoge30pLFxuICAgICAgc2VydmljZU5hbWVzOiBPYmplY3QuYXNzaWduKHt9LCAuLi5pZGVudGl0aWVzLm1hcChtb2RlbFNlcnZpY2VOYW1lcykpLFxuICAgICAgLi4uKG1vZGVsU2VydmljZU5hbWUgPyB7IG1vZGVsU2VydmljZU5hbWUgfSA6IHt9KSxcbiAgICAgIC4uLihyZWFzb25pbmdFZmZvcnRzLmxlbmd0aCA/IHsgcmVhc29uaW5nRWZmb3J0cyB9IDoge30pLFxuICAgICAgc3RhdHVzOiBtb2RlbFN0YXR1c0ZvciguLi5pZGVudGl0aWVzKSxcbiAgICB9O1xuICAgIHJldHVybiBbc3VtbWFyeV07XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gY2xhc3NpZnlFbmRwb2ludENsYXNzZXMoc3VtbWFyaWVzKTtcbiAgcmV0dXJuIHN1bW1hcmllcy5tYXAoKHN1bW1hcnkpID0+IHtcbiAgICBjb25zdCBtb2RlbENsYXNzID0gY2xhc3Nlcy5nZXQoc3VtbWFyeS5uYW1lKTtcbiAgICByZXR1cm4gbW9kZWxDbGFzcyA/IHsgLi4uc3VtbWFyeSwgY2xhc3M6IG1vZGVsQ2xhc3MgfSA6IHN1bW1hcnk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlUmFua2VkKGxlZnQ6IFJhbmtlZE1vZGVsLCByaWdodDogUmFua2VkTW9kZWwpOiBudW1iZXIge1xuICBjb25zdCBzY29yZSA9IE1hdGgucm91bmQoKGxlZnQuc2NvcmUgPz8gMCkgKiAxMDAwKSAtIE1hdGgucm91bmQoKHJpZ2h0LnNjb3JlID8/IDApICogMTAwMCk7XG4gIGlmIChzY29yZSAhPT0gMCkgcmV0dXJuIHNjb3JlO1xuICBjb25zdCBsZWZ0T3NzID0gaXNPcGVuV2VpZ2h0c0dwdChsZWZ0LmVuZHBvaW50Lm5hbWUpO1xuICBjb25zdCByaWdodE9zcyA9IGlzT3BlbldlaWdodHNHcHQocmlnaHQuZW5kcG9pbnQubmFtZSk7XG4gIGlmIChsZWZ0T3NzICE9PSByaWdodE9zcykgcmV0dXJuIGxlZnRPc3MgPyAxIDogLTE7XG4gIGNvbnN0IGxlZnRWZXJzaW9uID0gdmVyc2lvblR1cGxlKGxlZnQuZW5kcG9pbnQubmFtZSk7XG4gIGNvbnN0IHJpZ2h0VmVyc2lvbiA9IHZlcnNpb25UdXBsZShyaWdodC5lbmRwb2ludC5uYW1lKTtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDM7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gcmlnaHRWZXJzaW9uW2luZGV4XSEgLSBsZWZ0VmVyc2lvbltpbmRleF0hO1xuICAgIGlmICh2ZXJzaW9uICE9PSAwKSByZXR1cm4gdmVyc2lvbjtcbiAgfVxuICBjb25zdCB2YXJpYW50ID0gbW9kZWxWYXJpYW50UmFuayhsZWZ0LmVuZHBvaW50Lm5hbWUpIC0gbW9kZWxWYXJpYW50UmFuayhyaWdodC5lbmRwb2ludC5uYW1lKTtcbiAgaWYgKHZhcmlhbnQgIT09IDApIHJldHVybiB2YXJpYW50O1xuICByZXR1cm4gTU9ERUxfQ0xBU1NfT1JERVIuaW5kZXhPZihsZWZ0Lm1vZGVsQ2xhc3MpIC0gTU9ERUxfQ0xBU1NfT1JERVIuaW5kZXhPZihyaWdodC5tb2RlbENsYXNzKTtcbn1cblxuZnVuY3Rpb24gbW9kZWxWYXJpYW50UmFuayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICBpZiAoIS8oPzpefFstXy5dKWdwdCg/OlstXy5dfCQpL2kudGVzdChuYW1lKSkgcmV0dXJuIDI7XG4gIGlmICgvKD86XnxbLV8uXSlzb2woPzpbLV8uXXwkKS9pLnRlc3QobmFtZSkpIHJldHVybiAwO1xuICBpZiAoLyg/Ol58Wy1fLl0pbHVuYSg/OlstXy5dfCQpL2kudGVzdChuYW1lKSkgcmV0dXJuIDE7XG4gIHJldHVybiAyO1xufVxuXG4vKipcbiAqIFJlc29sdmUgZ2VuZXJpYyBqb2Igc2VhcmNoZXMgdG8gdGhlIGNhcGFiaWxpdHkgY2xhc3MgdGhhdCBvd25zIHRoZSB3b3JrLlxuICpcbiAqIEEgcHVyZSBpbnRlbnQgc3VjaCBhcyBcInN1bW1hcml6ZVwiIHJhbmtzIHRoYXQgY2FwYWJpbGl0eSBkaXJlY3RseS4gTWl4ZWRcbiAqIHF1ZXJpZXMgcmVtb3ZlIHRoZSBpbnRlbnQgd29yZCBidXQgcmV0YWluIHRoZSBtb2RlbCBpZGVudGl0eSwgc28gXCJncHQgY2hhdFwiXG4gKiBzdGlsbCB1c2VzIHRoZSBoaXN0b3JpY2FsIHZlcnNpb24gYW5kIHZhcmlhbnQgcHJlZmVyZW5jZSBmb3IgR1BULlxuICovXG5mdW5jdGlvbiBtb2RlbFNlYXJjaFBsYW4oXG4gIHNlYXJjaDogc3RyaW5nLFxuKTogeyByZWFkb25seSBtb2RlbENsYXNzOiBNb2RlbENsYXNzOyByZWFkb25seSBzZWFyY2g/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRva2VucyA9IHRva2VuaXplKHNlYXJjaCkuZmlsdGVyKCh0b2tlbikgPT4gIVNFQVJDSF9JTlRFTlRfRklMTEVSUy5oYXModG9rZW4pKTtcbiAgaWYgKHRva2Vucy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGNoYXQgPSB0b2tlbnMuc29tZSgodG9rZW4pID0+IENIQVRfU0VBUkNIX0lOVEVOVFMuaGFzKHRva2VuKSk7XG4gIGNvbnN0IGVtYmVkZGluZyA9IHRva2Vucy5zb21lKCh0b2tlbikgPT4gRU1CRURESU5HX1NFQVJDSF9JTlRFTlRTLmhhcyh0b2tlbikpO1xuICBpZiAoY2hhdCA9PT0gZW1iZWRkaW5nKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBpbnRlbnRXb3JkcyA9IGNoYXQgPyBDSEFUX1NFQVJDSF9JTlRFTlRTIDogRU1CRURESU5HX1NFQVJDSF9JTlRFTlRTO1xuICBjb25zdCByZW1haW5pbmcgPSB0b2tlbnMuZmlsdGVyKCh0b2tlbikgPT4gIWludGVudFdvcmRzLmhhcyh0b2tlbikpO1xuICByZXR1cm4ge1xuICAgIG1vZGVsQ2xhc3M6IGNoYXQgPyBNb2RlbENsYXNzLkNoYXRUaGlua2luZyA6IE1vZGVsQ2xhc3MuRW1iZWRkaW5nLFxuICAgIC4uLihyZW1haW5pbmcubGVuZ3RoID4gMCA/IHsgc2VhcmNoOiByZW1haW5pbmcuam9pbihcIiBcIikgfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdG9rZW5pemUodmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkubWF0Y2goL1thLXowLTldKy9nKSA/PyBbXTtcbn1cblxuZnVuY3Rpb24gc2VhcmNoYWJsZVZhbHVlcyhlbmRwb2ludDogU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtcbiAgICBlbmRwb2ludC5uYW1lLFxuICAgIGVuZHBvaW50LmRpc3BsYXlOYW1lLFxuICAgIGVuZHBvaW50LmZhbWlseSxcbiAgICBlbmRwb2ludC5tb2RlbFNlcnZpY2VOYW1lLFxuICAgIC4uLk9iamVjdC52YWx1ZXMoZW5kcG9pbnQuc2VydmljZU5hbWVzID8/IHt9KSxcbiAgXS5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gbW9kZWxQcm9maWxlKGVudGl0eTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgY29uc3Qgc291cmNlID0gcmVjb3JkKHJlY29yZChlbnRpdHkuZm91bmRhdGlvbl9tb2RlbCkuYWlfZ2F0ZXdheV9tb2RlbF9wcm9maWxlKTtcbiAgY29uc3QgcXVhbGl0eSA9IGZpbml0ZU51bWJlcihzb3VyY2UucXVhbGl0eSk7XG4gIGNvbnN0IHNwZWVkID0gZmluaXRlTnVtYmVyKHNvdXJjZS5zcGVlZCk7XG4gIGNvbnN0IGNvc3QgPSBmaW5pdGVOdW1iZXIoc291cmNlLmNvc3QpO1xuICBpZiAocXVhbGl0eSA9PT0gdW5kZWZpbmVkICYmIHNwZWVkID09PSB1bmRlZmluZWQgJiYgY29zdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIC4uLihxdWFsaXR5ICE9PSB1bmRlZmluZWQgPyB7IHF1YWxpdHkgfSA6IHt9KSxcbiAgICAuLi4oc3BlZWQgIT09IHVuZGVmaW5lZCA/IHsgc3BlZWQgfSA6IHt9KSxcbiAgICAuLi4oY29zdCAhPT0gdW5kZWZpbmVkID8geyBjb3N0IH0gOiB7fSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3ZpZGVkRGlzcGxheU5hbWUoXG4gIGVuZHBvaW50OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZW50aXRpZXM6IHJlYWRvbmx5IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IHRhZyBvZiBhcnJheVZhbHVlKGVuZHBvaW50LnRhZ3MpLm1hcChyZWNvcmQpKSB7XG4gICAgaWYgKCFbXCJkaXNwbGF5X25hbWVcIiwgXCJkaXNwbGF5TmFtZVwiLCBcIm5hbWVcIl0uaW5jbHVkZXMoU3RyaW5nKHRhZy5rZXkpKSkgY29udGludWU7XG4gICAgY29uc3QgdmFsdWUgPSBzdHJpbmdVdGlscy50cmltVG9VbmRlZmluZWQodGFnLnZhbHVlKTtcbiAgICBpZiAodmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIGVudGl0aWVzXG4gICAgICAubWFwKChlbnRpdHkpID0+IHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChyZWNvcmQoZW50aXR5LmZvdW5kYXRpb25fbW9kZWwpLmRpc3BsYXlfbmFtZSkpXG4gICAgICAuZmluZChCb29sZWFuKSA/P1xuICAgIGVudGl0aWVzXG4gICAgICAubWFwKChlbnRpdHkpID0+IHN0cmluZ1V0aWxzLnRyaW1Ub1VuZGVmaW5lZChyZWNvcmQoZW50aXR5LmV4dGVybmFsX21vZGVsKS5uYW1lKSlcbiAgICAgIC5maW5kKEJvb2xlYW4pXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlY29yZCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIG9iamVjdC5pc1JlY29yZCh2YWx1ZSkgPyB2YWx1ZSA6IHt9O1xufVxuXG5mdW5jdGlvbiBhcnJheVZhbHVlKHZhbHVlOiB1bmtub3duKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXTtcbn1cblxuZnVuY3Rpb24gZmluaXRlTnVtYmVyKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGJvb2xlYW5WYWx1ZSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIiA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuIl19
|
package/lib/src/policy.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export declare function inheritsNativeWebSearch(name: string, documented: Iterab
|
|
|
20
20
|
* external endpoints use arbitrary names, so their digits are not versions.
|
|
21
21
|
*/
|
|
22
22
|
export declare function isFoundationModelIdentity(name: string): boolean;
|
|
23
|
+
/** Return whether an identity is hosted GPT-OSS rather than a GPT generation. */
|
|
24
|
+
export declare function isOpenWeightsGpt(name: string): boolean;
|
|
23
25
|
/** Return the reasoning efforts accepted by a model family. */
|
|
24
26
|
export declare function modelReasoningEfforts(name: string): ReasoningEffort[];
|
|
25
27
|
/** Return whether policy verifies a complete tool-calling round trip. */
|
package/lib/src/policy.js
CHANGED
|
@@ -76,7 +76,8 @@ export function inheritsNativeWebSearch(name, documented) {
|
|
|
76
76
|
export function isFoundationModelIdentity(name) {
|
|
77
77
|
return /^(?:databricks-|system\.ai\.)/i.test(name.trim());
|
|
78
78
|
}
|
|
79
|
-
|
|
79
|
+
/** Return whether an identity is hosted GPT-OSS rather than a GPT generation. */
|
|
80
|
+
export function isOpenWeightsGpt(name) {
|
|
80
81
|
return modelFamily(name) === "gpt" && /(?:^|[-_.])oss(?:[-_.]|$)/i.test(name);
|
|
81
82
|
}
|
|
82
83
|
function isZeroVersion(version) {
|
|
@@ -232,4 +233,4 @@ function parseModelName(name) {
|
|
|
232
233
|
model: [...remainder.slice(0, versionStart), ...remainder.slice(cursor)],
|
|
233
234
|
};
|
|
234
235
|
}
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtRUFBbUU7QUFFbkUsT0FBTyxFQUNMLFVBQVUsR0FHWCxNQUFNLG1DQUFtQyxDQUFDO0FBRTNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUYsTUFBTSxRQUFRLEdBQUc7SUFDZixRQUFRO0lBQ1IsS0FBSztJQUNMLFFBQVE7SUFDUixPQUFPO0lBQ1AsTUFBTTtJQUNOLFVBQVU7SUFDVixNQUFNO0lBQ04sS0FBSztJQUNMLE1BQU07SUFDTixPQUFPO0lBQ1AsU0FBUztJQUNULEtBQUs7SUFDTCxLQUFLO0NBQ0csQ0FBQztBQUVYLE1BQU0sUUFBUSxHQUFzQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUQsTUFBTSxPQUFPLEdBQXNCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNyRixNQUFNLFdBQVcsR0FBc0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLE1BQU0sTUFBTSxHQUFzQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9GLE1BQU0sTUFBTSxHQUFzQixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBUXZFLGlFQUFpRTtBQUNqRSxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVk7SUFDdEMsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO0FBQ3RDLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxV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cmlwdC1vd25lZCBtb2RlbC1mYW1pbHkgYW5kIHNlcnZpbmcgY2FwYWJpbGl0eSBwb2xpY3kuICovXG5cbmltcG9ydCB7XG4gIE1vZGVsQ2xhc3MsXG4gIHR5cGUgUmVhc29uaW5nRWZmb3J0LFxuICB0eXBlIFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC9jb250cmFjdHNcIjtcblxuaW1wb3J0IHsgY29tcGFyZVZlcnNpb25UdXBsZXMsIHN1cHBvcnRzVG9vbHNCeUZhbWlseSwgdmVyc2lvblR1cGxlIH0gZnJvbSBcIi4vY2xhc3NpZnkudHNcIjtcblxuY29uc3QgRkFNSUxJRVMgPSBbXG4gIFwiY2xhdWRlXCIsXG4gIFwiZ3B0XCIsXG4gIFwiZ2VtaW5pXCIsXG4gIFwibGxhbWFcIixcbiAgXCJncm9rXCIsXG4gIFwiZGVlcHNlZWtcIixcbiAgXCJxd2VuXCIsXG4gIFwiZ2xtXCIsXG4gIFwia2ltaVwiLFxuICBcImdlbW1hXCIsXG4gIFwiaW5rbGluZ1wiLFxuICBcImJnZVwiLFxuICBcImd0ZVwiLFxuXSBhcyBjb25zdDtcblxuY29uc3QgU1RBTkRBUkQ6IFJlYXNvbmluZ0VmZm9ydFtdID0gW1wibG93XCIsIFwibWVkaXVtXCIsIFwiaGlnaFwiXTtcbmNvbnN0IEdQVF81XzY6IFJlYXNvbmluZ0VmZm9ydFtdID0gW1wibm9uZVwiLCBcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIiwgXCJ4aGlnaFwiLCBcIm1heFwiXTtcbmNvbnN0IEdQVF81XzVfUFJPOiBSZWFzb25pbmdFZmZvcnRbXSA9IFtcIm1lZGl1bVwiLCBcImhpZ2hcIiwgXCJ4aGlnaFwiXTtcbmNvbnN0IENMQVVERTogUmVhc29uaW5nRWZmb3J0W10gPSBbXCJub25lXCIsIFwibWluaW1hbFwiLCBcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIiwgXCJ4aGlnaFwiLCBcIm1heFwiXTtcbmNvbnN0IEdFTUlOSTogUmVhc29uaW5nRWZmb3J0W10gPSBbXCJtaW5pbWFsXCIsIFwibG93XCIsIFwibWVkaXVtXCIsIFwiaGlnaFwiXTtcblxuaW50ZXJmYWNlIFBhcnNlZE1vZGVsTmFtZSB7XG4gIGZhbWlseTogKHR5cGVvZiBGQU1JTElFUylbbnVtYmVyXTtcbiAgdmVyc2lvbjogbnVtYmVyW107XG4gIG1vZGVsOiBzdHJpbmdbXTtcbn1cblxuLyoqIFJldHVybiB0aGUgbm9ybWFsaXplZCBmYW1pbHkgcGFyc2VkIGZyb20gYSBtb2RlbCBpZGVudGl0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbEZhbWlseShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcGFyc2VNb2RlbE5hbWUobmFtZSk/LmZhbWlseTtcbn1cblxuLyoqIFJhbmsgYSBmYW1pbHkgYnkgaG93IG1ham9yIGl0IGlzOyB1bnJlY29nbml6ZWQgZmFtaWxpZXMgc29ydCBsYXN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsRmFtaWx5UmFuayhmYW1pbHk6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IGluZGV4ID0gRkFNSUxJRVMuaW5kZXhPZihmYW1pbHkgYXMgKHR5cGVvZiBGQU1JTElFUylbbnVtYmVyXSk7XG4gIHJldHVybiBpbmRleCA+PSAwID8gaW5kZXggOiBGQU1JTElFUy5sZW5ndGg7XG59XG5cbi8qKiBOb3JtYWxpemUgYSByZWNvZ25pemVkIG1vZGVsIGlkZW50aXR5IGludG8gZmFtaWx5LCB2ZXJzaW9uLCBhbmQgdmFyaWFudCB0b2tlbnMuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxTZWFyY2hRdWVyeShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU1vZGVsTmFtZShuYW1lKTtcbiAgaWYgKCFwYXJzZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBbcGFyc2VkLmZhbWlseSwgLi4ucGFyc2VkLnZlcnNpb24ubWFwKFN0cmluZyksIC4uLnBhcnNlZC5tb2RlbF0uam9pbihcIiBcIik7XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYG5hbWVgIGhhcyBuYXRpdmUgd2ViIHNlYXJjaDogYW4gZXhhY3QgZG9jdW1lbnRlZCBpZGVudGl0eSwgb3JcbiAqIGEgbGF0ZXIge0BsaW5rIHZlcnNpb25UdXBsZX0gaW4gdGhlIHNhbWUgZmFtaWx5IGFzIGEgZG9jdW1lbnRlZCBuYXRpdmVcbiAqIHdlYi1zZWFyY2ggbW9kZWwuIEludHJhLWZhbWlseSBmbG9vcnMgdXNlIHRoZSBuYW1lIGRpZ2l0IHBhcnNlciBzbyBpZGVudGl0aWVzXG4gKiBsaWtlIGBkYXRhYnJpY2tzLWNsYXVkZS1vcHVzLTQtOGAgYW5kIGBzeXN0ZW0uYWkuZ3B0LTYtMS1zb2xgIGNvbXBhcmUuXG4gKiBIb3N0ZWQgR1BULU9TUyB3ZWlnaHRzIG5ldmVyIGluaGVyaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmhlcml0c05hdGl2ZVdlYlNlYXJjaChuYW1lOiBzdHJpbmcsIGRvY3VtZW50ZWQ6IEl0ZXJhYmxlPHN0cmluZz4pOiBib29sZWFuIHtcbiAgY29uc3QgZG9jdW1lbnRlZEtleXMgPSBkb2N1bWVudGVkIGluc3RhbmNlb2YgU2V0ID8gZG9jdW1lbnRlZCA6IG5ldyBTZXQoZG9jdW1lbnRlZCk7XG4gIGNvbnN0IGtleSA9IG1vZGVsU2VhcmNoUXVlcnkobmFtZSk/LnJlcGxhY2VBbGwoXCIgXCIsIFwiLVwiKTtcbiAgaWYgKGtleSAmJiBkb2N1bWVudGVkS2V5cy5oYXMoa2V5KSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGZhbWlseSA9IG1vZGVsRmFtaWx5KG5hbWUpO1xuICBpZiAoIWZhbWlseSB8fCBpc09wZW5XZWlnaHRzR3B0KG5hbWUpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHZlcnNpb24gPSB2ZXJzaW9uVHVwbGUobmFtZSk7XG4gIGlmIChpc1plcm9WZXJzaW9uKHZlcnNpb24pKSByZXR1cm4gZmFsc2U7XG4gIGxldCBmbG9vcjogcmVhZG9ubHkgbnVtYmVyW10gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZG9jdW1lbnRlZEtleXMpIHtcbiAgICBpZiAobW9kZWxGYW1pbHkoZW50cnkpICE9PSBmYW1pbHkgfHwgaXNPcGVuV2VpZ2h0c0dwdChlbnRyeSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGRvY3VtZW50ZWRWZXJzaW9uID0gdmVyc2lvblR1cGxlKGVudHJ5KTtcbiAgICBpZiAoaXNaZXJvVmVyc2lvbihkb2N1bWVudGVkVmVyc2lvbikpIGNvbnRpbnVlO1xuICAgIGlmICghZmxvb3IgfHwgY29tcGFyZVZlcnNpb25UdXBsZXMoZG9jdW1lbnRlZFZlcnNpb24sIGZsb29yKSA8IDApIHtcbiAgICAgIGZsb29yID0gZG9jdW1lbnRlZFZlcnNpb247XG4gICAgfVxuICB9XG4gIHJldHVybiBmbG9vciAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmVWZXJzaW9uVHVwbGVzKHZlcnNpb24sIGZsb29yKSA+PSAwO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGFuIGlkZW50aXR5IG5hbWVzIGEgRGF0YWJyaWNrcy1ob3N0ZWQgZm91bmRhdGlvbiBtb2RlbFxuICogKGBkYXRhYnJpY2tzLSpgIGVuZHBvaW50IG9yIGBzeXN0ZW0uYWkuKmAgbW9kZWwgc2VydmljZSkuIEN1c3RvbSBhbmRcbiAqIGV4dGVybmFsIGVuZHBvaW50cyB1c2UgYXJiaXRyYXJ5IG5hbWVzLCBzbyB0aGVpciBkaWdpdHMgYXJlIG5vdCB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRm91bmRhdGlvbk1vZGVsSWRlbnRpdHkobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXig/OmRhdGFicmlja3MtfHN5c3RlbVxcLmFpXFwuKS9pLnRlc3QobmFtZS50cmltKCkpO1xufVxuXG5mdW5jdGlvbiBpc09wZW5XZWlnaHRzR3B0KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gbW9kZWxGYW1pbHkobmFtZSkgPT09IFwiZ3B0XCIgJiYgLyg/Ol58Wy1fLl0pb3NzKD86Wy1fLl18JCkvaS50ZXN0KG5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc1plcm9WZXJzaW9uKHZlcnNpb246IHJlYWRvbmx5IG51bWJlcltdKTogYm9vbGVhbiB7XG4gIHJldHVybiB2ZXJzaW9uLmV2ZXJ5KChwYXJ0KSA9PiAocGFydCA/PyAwKSA9PT0gMCk7XG59XG5cbi8qKiBSZXR1cm4gdGhlIHJlYXNvbmluZyBlZmZvcnRzIGFjY2VwdGVkIGJ5IGEgbW9kZWwgZmFtaWx5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsUmVhc29uaW5nRWZmb3J0cyhuYW1lOiBzdHJpbmcpOiBSZWFzb25pbmdFZmZvcnRbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlTW9kZWxOYW1lKG5hbWUpO1xuICBsZXQgZWZmb3J0czogUmVhc29uaW5nRWZmb3J0W10gPSBbXTtcbiAgaWYgKHBhcnNlZD8uZmFtaWx5ID09PSBcImdwdFwiICYmIHBhcnNlZC52ZXJzaW9uLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBbbWFqb3IgPSAwLCBtaW5vciA9IDBdID0gcGFyc2VkLnZlcnNpb247XG4gICAgaWYgKG1ham9yID49IDUpIHtcbiAgICAgIGVmZm9ydHMgPVxuICAgICAgICBtYWpvciA9PT0gNSAmJiBtaW5vciA9PT0gNSAmJiBwYXJzZWQubW9kZWwuaW5jbHVkZXMoXCJwcm9cIilcbiAgICAgICAgICA/IEdQVF81XzVfUFJPXG4gICAgICAgICAgOiBtYWpvciA9PT0gNSAmJiBtaW5vciA9PT0gNlxuICAgICAgICAgICAgPyBHUFRfNV82XG4gICAgICAgICAgICA6IFNUQU5EQVJEO1xuICAgIH1cbiAgfVxuICBpZiAocGFyc2VkPy5mYW1pbHkgPT09IFwiZ3B0XCIgJiYgcGFyc2VkLm1vZGVsLmluY2x1ZGVzKFwib3NzXCIpKSBlZmZvcnRzID0gU1RBTkRBUkQ7XG4gIGlmIChwYXJzZWQ/LmZhbWlseSA9PT0gXCJjbGF1ZGVcIikge1xuICAgIGNvbnN0IFttYWpvciA9IDAsIG1pbm9yID0gMF0gPSBwYXJzZWQudmVyc2lvbjtcbiAgICBpZiAobWFqb3IgPiAzIHx8IChtYWpvciA9PT0gMyAmJiBtaW5vciA+PSA3KSkgZWZmb3J0cyA9IENMQVVERTtcbiAgfVxuICBpZiAocGFyc2VkPy5mYW1pbHkgPT09IFwiZ2VtaW5pXCIpIGVmZm9ydHMgPSBHRU1JTkk7XG4gIGlmIChub3JtYWxpemVkLmluY2x1ZGVzKFwiY29kZXhcIikgfHwgLyg/Ol58Wy1fLi9dKW8oPzoxfDN8NCkoPzpbLV8uL118JCkvaS50ZXN0KG5hbWUpKSB7XG4gICAgZWZmb3J0cyA9IFNUQU5EQVJEO1xuICB9XG4gIHJldHVybiBlZmZvcnRzO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgcG9saWN5IHZlcmlmaWVzIGEgY29tcGxldGUgdG9vbC1jYWxsaW5nIHJvdW5kIHRyaXAuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxTdXBwb3J0c1Rvb2xzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3VwcG9ydHNUb29sc0J5RmFtaWx5KG5hbWUpO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgYSBkaXNjb3ZlcmVkIGVuZHBvaW50IGNhbiBiZSB1c2VkIGZvciBhIHRvb2wtY2FsbGluZyBjaGF0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZHBvaW50U3VwcG9ydHNUb29scyhlbmRwb2ludDogU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IGJvb2xlYW4ge1xuICBjb25zdCBlbWJlZGRpbmcgPVxuICAgIGVuZHBvaW50LnRhc2sgPT09IFwibGxtL3YxL2VtYmVkZGluZ3NcIiB8fCBlbmRwb2ludC5jbGFzcyA9PT0gTW9kZWxDbGFzcy5FbWJlZGRpbmc7XG4gIGNvbnN0IGNoYXQgPSAhZW1iZWRkaW5nICYmIChlbmRwb2ludC50YXNrID09PSBcImxsbS92MS9jaGF0XCIgfHwgZW5kcG9pbnQuY2xhc3MgIT09IHVuZGVmaW5lZCk7XG4gIHJldHVybiBjaGF0ICYmIChlbmRwb2ludC5zdXBwb3J0c1Rvb2xzID8/IG1vZGVsU3VwcG9ydHNUb29scyhlbmRwb2ludC5uYW1lKSk7XG59XG5cbi8qKiBSZXR1cm4gd2hldGhlciBhIG1vZGVsIHJlcXVpcmVzIERhdGFicmlja3MnIG5hdGl2ZSBSZXNwb25zZXMgZW5kcG9pbnQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXNwb25zZXNPbmx5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiY29kZXhcIikpIHJldHVybiB0cnVlO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU1vZGVsTmFtZShuYW1lKTtcbiAgaWYgKCFwYXJzZWQgfHwgcGFyc2VkLmZhbWlseSAhPT0gXCJncHRcIiB8fCBwYXJzZWQubW9kZWwuaW5jbHVkZXMoXCJvc3NcIikpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgW21ham9yID0gMCwgbWlub3IgPSAwXSA9IHBhcnNlZC52ZXJzaW9uO1xuICByZXR1cm4gbWFqb3IgPiA1IHx8IChtYWpvciA9PT0gNSAmJiBtaW5vciA+PSA0KTtcbn1cblxuLyoqIFJldHVybiB0aGUgRGF0YWJyaWNrcyBpbmZlcmVuY2UgcHJvdG9jb2wgcmVxdWlyZWQgYnkgYSBtb2RlbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFNlcnZpbmdBcGkobmFtZTogc3RyaW5nKTogXCJjaGF0XCIgfCBcInJlc3BvbnNlc1wiIHtcbiAgcmV0dXJuIGlzUmVzcG9uc2VzT25seShuYW1lKSA/IFwicmVzcG9uc2VzXCIgOiBcImNoYXRcIjtcbn1cblxuLyoqIFJldHVybiB0aGUgQ2hhdCBDb21wbGV0aW9ucyBlZmZvcnQgcmVxdWlyZWQgd2hlbiBmdW5jdGlvbiB0b29scyBhcmUgcHJlc2VudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGF0VG9vbFJlYXNvbmluZ0VmZm9ydChuYW1lOiBzdHJpbmcpOiBSZWFzb25pbmdFZmZvcnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU1vZGVsTmFtZShuYW1lKTtcbiAgaWYgKCFwYXJzZWQgfHwgcGFyc2VkLmZhbWlseSAhPT0gXCJncHRcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgW21ham9yID0gMCwgbWlub3IgPSAwXSA9IHBhcnNlZC52ZXJzaW9uO1xuICByZXR1cm4gbWFqb3IgPT09IDUgJiYgbWlub3IgPT09IDYgPyBcIm5vbmVcIiA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIERlcml2ZSBwcm92aWRlci1zcGVjaWZpYyBtb2RlbCBuYW1lcyBmcm9tIGEgRGF0YWJyaWNrcyBtb2RlbCBpZGVudGl0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFNlcnZpY2VOYW1lcyhuYW1lOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VNb2RlbE5hbWUobmFtZSk7XG4gIGlmICghcGFyc2VkKSByZXR1cm4ge307XG4gIGNvbnN0IHZlcnNpb24gPSBwYXJzZWQudmVyc2lvbi5qb2luKFwiLlwiKTtcbiAgY29uc3Qgc3VmZml4ID0gcGFyc2VkLm1vZGVsLmxlbmd0aCA/IGAtJHtwYXJzZWQubW9kZWwuam9pbihcIi1cIil9YCA6IFwiXCI7XG4gIHN3aXRjaCAocGFyc2VkLmZhbWlseSkge1xuICAgIGNhc2UgXCJncHRcIjpcbiAgICAgIHJldHVybiBwYXJzZWQubW9kZWwuaW5jbHVkZXMoXCJvc3NcIikgPyB7fSA6IHsgb3BlbmFpOiBgZ3B0LSR7dmVyc2lvbn0ke3N1ZmZpeH1gIH07XG4gICAgY2FzZSBcImNsYXVkZVwiOiB7XG4gICAgICBjb25zdCBbdmFyaWFudCwgLi4ucmVzdF0gPSBwYXJzZWQubW9kZWw7XG4gICAgICByZXR1cm4gdmFyaWFudFxuICAgICAgICA/IHsgYW50aHJvcGljOiBgY2xhdWRlLSR7dmFyaWFudH0tJHt2ZXJzaW9ufSR7cmVzdC5sZW5ndGggPyBgLSR7cmVzdC5qb2luKFwiLVwiKX1gIDogXCJcIn1gIH1cbiAgICAgICAgOiB7fTtcbiAgICB9XG4gICAgY2FzZSBcImdlbWluaVwiOlxuICAgIGNhc2UgXCJnZW1tYVwiOlxuICAgICAgcmV0dXJuIHsgZ29vZ2xlOiBgJHtwYXJzZWQuZmFtaWx5fS0ke3ZlcnNpb259JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJnbG1cIjpcbiAgICAgIHJldHVybiB7IHpoaXB1OiBgZ2xtLSR7dmVyc2lvbn0ke3N1ZmZpeH1gIH07XG4gICAgY2FzZSBcImdyb2tcIjpcbiAgICAgIHJldHVybiB7IHhhaTogYGdyb2stJHt2ZXJzaW9ufSR7c3VmZml4fWAgfTtcbiAgICBjYXNlIFwibGxhbWFcIjpcbiAgICAgIHJldHVybiB7IG1ldGE6IGBsbGFtYS0ke3ZlcnNpb259JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJxd2VuXCI6XG4gICAgICByZXR1cm4geyBhbGliYWJhOiBgcXdlbiR7dmVyc2lvbn0ke3N1ZmZpeH1gIH07XG4gICAgY2FzZSBcImRlZXBzZWVrXCI6XG4gICAgICByZXR1cm4geyBkZWVwc2VlazogYGRlZXBzZWVrLXYke3BhcnNlZC52ZXJzaW9uWzBdID8/IFwiXCJ9JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJraW1pXCI6XG4gICAgICByZXR1cm4geyBtb29uc2hvdDogYGtpbWktayR7cGFyc2VkLnZlcnNpb25bMF0gPz8gXCJcIn0ke3N1ZmZpeH1gIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZU1vZGVsTmFtZShuYW1lOiBzdHJpbmcpOiBQYXJzZWRNb2RlbE5hbWUgfCB1bmRlZmluZWQge1xuICBjb25zdCB0b2tlbnMgPSBuYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL1thLXowLTldKy9nKSA/PyBbXTtcbiAgbGV0IGZhbWlseUluZGV4ID0gLTE7XG4gIGxldCBmYW1pbHk6IFBhcnNlZE1vZGVsTmFtZVtcImZhbWlseVwiXSB8IHVuZGVmaW5lZDtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRva2Vucy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleF0hO1xuICAgIGNvbnN0IGNvbXBhY3RRd2VuID0gL15xd2VuKFxcZCspJC8uZXhlYyh0b2tlbik7XG4gICAgaWYgKGNvbXBhY3RRd2VuKSB7XG4gICAgICBmYW1pbHlJbmRleCA9IGluZGV4O1xuICAgICAgZmFtaWx5ID0gXCJxd2VuXCI7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKEZBTUlMSUVTLmluY2x1ZGVzKHRva2VuIGFzIFBhcnNlZE1vZGVsTmFtZVtcImZhbWlseVwiXSkpIHtcbiAgICAgIGZhbWlseUluZGV4ID0gaW5kZXg7XG4gICAgICBmYW1pbHkgPSB0b2tlbiBhcyBQYXJzZWRNb2RlbE5hbWVbXCJmYW1pbHlcIl07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmYW1pbHkgfHwgZmFtaWx5SW5kZXggPCAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByZW1haW5kZXIgPSB0b2tlbnMuc2xpY2UoZmFtaWx5SW5kZXggKyAxKTtcbiAgY29uc3QgbnVtZXJpYyA9ICh2YWx1ZTogc3RyaW5nKSA9PiAvXlxcZCskLy50ZXN0KHZhbHVlKTtcbiAgbGV0IHZlcnNpb25TdGFydCA9IHJlbWFpbmRlci5maW5kSW5kZXgobnVtZXJpYyk7XG4gIGlmIChmYW1pbHkgPT09IFwicXdlblwiICYmIC9ecXdlblxcZCskLy50ZXN0KHRva2Vuc1tmYW1pbHlJbmRleF0hKSkge1xuICAgIHZlcnNpb25TdGFydCA9IDA7XG4gICAgcmVtYWluZGVyLnVuc2hpZnQodG9rZW5zW2ZhbWlseUluZGV4XSEuc2xpY2UoNCkpO1xuICB9XG4gIGlmIChmYW1pbHkgPT09IFwiZGVlcHNlZWtcIikge1xuICAgIGNvbnN0IHByZWZpeGVkID0gcmVtYWluZGVyLmZpbmRJbmRleCgodmFsdWUpID0+IC9edlxcZCskLy50ZXN0KHZhbHVlKSk7XG4gICAgaWYgKHByZWZpeGVkID49IDApIHJlbWFpbmRlcltwcmVmaXhlZF0gPSByZW1haW5kZXJbcHJlZml4ZWRdIS5zbGljZSgxKTtcbiAgICB2ZXJzaW9uU3RhcnQgPSByZW1haW5kZXIuZmluZEluZGV4KG51bWVyaWMpO1xuICB9XG4gIGlmIChmYW1pbHkgPT09IFwia2ltaVwiKSB7XG4gICAgY29uc3QgcHJlZml4ZWQgPSByZW1haW5kZXIuZmluZEluZGV4KCh2YWx1ZSkgPT4gL15rXFxkKyQvLnRlc3QodmFsdWUpKTtcbiAgICBpZiAocHJlZml4ZWQgPj0gMCkgcmVtYWluZGVyW3ByZWZpeGVkXSA9IHJlbWFpbmRlcltwcmVmaXhlZF0hLnNsaWNlKDEpO1xuICAgIHZlcnNpb25TdGFydCA9IHJlbWFpbmRlci5maW5kSW5kZXgobnVtZXJpYyk7XG4gIH1cbiAgaWYgKHZlcnNpb25TdGFydCA8IDApIHJldHVybiB7IGZhbWlseSwgdmVyc2lvbjogW10sIG1vZGVsOiByZW1haW5kZXIgfTtcbiAgY29uc3QgdmVyc2lvbjogbnVtYmVyW10gPSBbXTtcbiAgbGV0IGN1cnNvciA9IHZlcnNpb25TdGFydDtcbiAgd2hpbGUgKGN1cnNvciA8IHJlbWFpbmRlci5sZW5ndGggJiYgdmVyc2lvbi5sZW5ndGggPCAyICYmIG51bWVyaWMocmVtYWluZGVyW2N1cnNvcl0hKSkge1xuICAgIHZlcnNpb24ucHVzaChOdW1iZXIocmVtYWluZGVyW2N1cnNvcl0pKTtcbiAgICBjdXJzb3IgKz0gMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGZhbWlseSxcbiAgICB2ZXJzaW9uLFxuICAgIG1vZGVsOiBbLi4ucmVtYWluZGVyLnNsaWNlKDAsIHZlcnNpb25TdGFydCksIC4uLnJlbWFpbmRlci5zbGljZShjdXJzb3IpXSxcbiAgfTtcbn1cbiJdfQ==
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtRUFBbUU7QUFFbkUsT0FBTyxFQUNMLFVBQVUsR0FHWCxNQUFNLG1DQUFtQyxDQUFDO0FBRTNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUYsTUFBTSxRQUFRLEdBQUc7SUFDZixRQUFRO0lBQ1IsS0FBSztJQUNMLFFBQVE7SUFDUixPQUFPO0lBQ1AsTUFBTTtJQUNOLFVBQVU7SUFDVixNQUFNO0lBQ04sS0FBSztJQUNMLE1BQU07SUFDTixPQUFPO0lBQ1AsU0FBUztJQUNULEtBQUs7SUFDTCxLQUFLO0NBQ0csQ0FBQztBQUVYLE1BQU0sUUFBUSxHQUFzQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUQsTUFBTSxPQUFPLEdBQXNCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNyRixNQUFNLFdBQVcsR0FBc0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLE1BQU0sTUFBTSxHQUFzQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQy9GLE1BQU0sTUFBTSxHQUFzQixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBUXZFLGlFQUFpRTtBQUNqRSxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVk7SUFDdEMsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO0FBQ3RDLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxV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dGVudCI6WyIvKiogVHlwZVNjcmlwdC1vd25lZCBtb2RlbC1mYW1pbHkgYW5kIHNlcnZpbmcgY2FwYWJpbGl0eSBwb2xpY3kuICovXG5cbmltcG9ydCB7XG4gIE1vZGVsQ2xhc3MsXG4gIHR5cGUgUmVhc29uaW5nRWZmb3J0LFxuICB0eXBlIFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC9jb250cmFjdHNcIjtcblxuaW1wb3J0IHsgY29tcGFyZVZlcnNpb25UdXBsZXMsIHN1cHBvcnRzVG9vbHNCeUZhbWlseSwgdmVyc2lvblR1cGxlIH0gZnJvbSBcIi4vY2xhc3NpZnkudHNcIjtcblxuY29uc3QgRkFNSUxJRVMgPSBbXG4gIFwiY2xhdWRlXCIsXG4gIFwiZ3B0XCIsXG4gIFwiZ2VtaW5pXCIsXG4gIFwibGxhbWFcIixcbiAgXCJncm9rXCIsXG4gIFwiZGVlcHNlZWtcIixcbiAgXCJxd2VuXCIsXG4gIFwiZ2xtXCIsXG4gIFwia2ltaVwiLFxuICBcImdlbW1hXCIsXG4gIFwiaW5rbGluZ1wiLFxuICBcImJnZVwiLFxuICBcImd0ZVwiLFxuXSBhcyBjb25zdDtcblxuY29uc3QgU1RBTkRBUkQ6IFJlYXNvbmluZ0VmZm9ydFtdID0gW1wibG93XCIsIFwibWVkaXVtXCIsIFwiaGlnaFwiXTtcbmNvbnN0IEdQVF81XzY6IFJlYXNvbmluZ0VmZm9ydFtdID0gW1wibm9uZVwiLCBcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIiwgXCJ4aGlnaFwiLCBcIm1heFwiXTtcbmNvbnN0IEdQVF81XzVfUFJPOiBSZWFzb25pbmdFZmZvcnRbXSA9IFtcIm1lZGl1bVwiLCBcImhpZ2hcIiwgXCJ4aGlnaFwiXTtcbmNvbnN0IENMQVVERTogUmVhc29uaW5nRWZmb3J0W10gPSBbXCJub25lXCIsIFwibWluaW1hbFwiLCBcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIiwgXCJ4aGlnaFwiLCBcIm1heFwiXTtcbmNvbnN0IEdFTUlOSTogUmVhc29uaW5nRWZmb3J0W10gPSBbXCJtaW5pbWFsXCIsIFwibG93XCIsIFwibWVkaXVtXCIsIFwiaGlnaFwiXTtcblxuaW50ZXJmYWNlIFBhcnNlZE1vZGVsTmFtZSB7XG4gIGZhbWlseTogKHR5cGVvZiBGQU1JTElFUylbbnVtYmVyXTtcbiAgdmVyc2lvbjogbnVtYmVyW107XG4gIG1vZGVsOiBzdHJpbmdbXTtcbn1cblxuLyoqIFJldHVybiB0aGUgbm9ybWFsaXplZCBmYW1pbHkgcGFyc2VkIGZyb20gYSBtb2RlbCBpZGVudGl0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbEZhbWlseShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcGFyc2VNb2RlbE5hbWUobmFtZSk/LmZhbWlseTtcbn1cblxuLyoqIFJhbmsgYSBmYW1pbHkgYnkgaG93IG1ham9yIGl0IGlzOyB1bnJlY29nbml6ZWQgZmFtaWxpZXMgc29ydCBsYXN0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsRmFtaWx5UmFuayhmYW1pbHk6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IGluZGV4ID0gRkFNSUxJRVMuaW5kZXhPZihmYW1pbHkgYXMgKHR5cGVvZiBGQU1JTElFUylbbnVtYmVyXSk7XG4gIHJldHVybiBpbmRleCA+PSAwID8gaW5kZXggOiBGQU1JTElFUy5sZW5ndGg7XG59XG5cbi8qKiBOb3JtYWxpemUgYSByZWNvZ25pemVkIG1vZGVsIGlkZW50aXR5IGludG8gZmFtaWx5LCB2ZXJzaW9uLCBhbmQgdmFyaWFudCB0b2tlbnMuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxTZWFyY2hRdWVyeShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU1vZGVsTmFtZShuYW1lKTtcbiAgaWYgKCFwYXJzZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBbcGFyc2VkLmZhbWlseSwgLi4ucGFyc2VkLnZlcnNpb24ubWFwKFN0cmluZyksIC4uLnBhcnNlZC5tb2RlbF0uam9pbihcIiBcIik7XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYG5hbWVgIGhhcyBuYXRpdmUgd2ViIHNlYXJjaDogYW4gZXhhY3QgZG9jdW1lbnRlZCBpZGVudGl0eSwgb3JcbiAqIGEgbGF0ZXIge0BsaW5rIHZlcnNpb25UdXBsZX0gaW4gdGhlIHNhbWUgZmFtaWx5IGFzIGEgZG9jdW1lbnRlZCBuYXRpdmVcbiAqIHdlYi1zZWFyY2ggbW9kZWwuIEludHJhLWZhbWlseSBmbG9vcnMgdXNlIHRoZSBuYW1lIGRpZ2l0IHBhcnNlciBzbyBpZGVudGl0aWVzXG4gKiBsaWtlIGBkYXRhYnJpY2tzLWNsYXVkZS1vcHVzLTQtOGAgYW5kIGBzeXN0ZW0uYWkuZ3B0LTYtMS1zb2xgIGNvbXBhcmUuXG4gKiBIb3N0ZWQgR1BULU9TUyB3ZWlnaHRzIG5ldmVyIGluaGVyaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmhlcml0c05hdGl2ZVdlYlNlYXJjaChuYW1lOiBzdHJpbmcsIGRvY3VtZW50ZWQ6IEl0ZXJhYmxlPHN0cmluZz4pOiBib29sZWFuIHtcbiAgY29uc3QgZG9jdW1lbnRlZEtleXMgPSBkb2N1bWVudGVkIGluc3RhbmNlb2YgU2V0ID8gZG9jdW1lbnRlZCA6IG5ldyBTZXQoZG9jdW1lbnRlZCk7XG4gIGNvbnN0IGtleSA9IG1vZGVsU2VhcmNoUXVlcnkobmFtZSk/LnJlcGxhY2VBbGwoXCIgXCIsIFwiLVwiKTtcbiAgaWYgKGtleSAmJiBkb2N1bWVudGVkS2V5cy5oYXMoa2V5KSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGZhbWlseSA9IG1vZGVsRmFtaWx5KG5hbWUpO1xuICBpZiAoIWZhbWlseSB8fCBpc09wZW5XZWlnaHRzR3B0KG5hbWUpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHZlcnNpb24gPSB2ZXJzaW9uVHVwbGUobmFtZSk7XG4gIGlmIChpc1plcm9WZXJzaW9uKHZlcnNpb24pKSByZXR1cm4gZmFsc2U7XG4gIGxldCBmbG9vcjogcmVhZG9ubHkgbnVtYmVyW10gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZG9jdW1lbnRlZEtleXMpIHtcbiAgICBpZiAobW9kZWxGYW1pbHkoZW50cnkpICE9PSBmYW1pbHkgfHwgaXNPcGVuV2VpZ2h0c0dwdChlbnRyeSkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGRvY3VtZW50ZWRWZXJzaW9uID0gdmVyc2lvblR1cGxlKGVudHJ5KTtcbiAgICBpZiAoaXNaZXJvVmVyc2lvbihkb2N1bWVudGVkVmVyc2lvbikpIGNvbnRpbnVlO1xuICAgIGlmICghZmxvb3IgfHwgY29tcGFyZVZlcnNpb25UdXBsZXMoZG9jdW1lbnRlZFZlcnNpb24sIGZsb29yKSA8IDApIHtcbiAgICAgIGZsb29yID0gZG9jdW1lbnRlZFZlcnNpb247XG4gICAgfVxuICB9XG4gIHJldHVybiBmbG9vciAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmVWZXJzaW9uVHVwbGVzKHZlcnNpb24sIGZsb29yKSA+PSAwO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGFuIGlkZW50aXR5IG5hbWVzIGEgRGF0YWJyaWNrcy1ob3N0ZWQgZm91bmRhdGlvbiBtb2RlbFxuICogKGBkYXRhYnJpY2tzLSpgIGVuZHBvaW50IG9yIGBzeXN0ZW0uYWkuKmAgbW9kZWwgc2VydmljZSkuIEN1c3RvbSBhbmRcbiAqIGV4dGVybmFsIGVuZHBvaW50cyB1c2UgYXJiaXRyYXJ5IG5hbWVzLCBzbyB0aGVpciBkaWdpdHMgYXJlIG5vdCB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRm91bmRhdGlvbk1vZGVsSWRlbnRpdHkobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXig/OmRhdGFicmlja3MtfHN5c3RlbVxcLmFpXFwuKS9pLnRlc3QobmFtZS50cmltKCkpO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgYW4gaWRlbnRpdHkgaXMgaG9zdGVkIEdQVC1PU1MgcmF0aGVyIHRoYW4gYSBHUFQgZ2VuZXJhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09wZW5XZWlnaHRzR3B0KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gbW9kZWxGYW1pbHkobmFtZSkgPT09IFwiZ3B0XCIgJiYgLyg/Ol58Wy1fLl0pb3NzKD86Wy1fLl18JCkvaS50ZXN0KG5hbWUpO1xufVxuXG5mdW5jdGlvbiBpc1plcm9WZXJzaW9uKHZlcnNpb246IHJlYWRvbmx5IG51bWJlcltdKTogYm9vbGVhbiB7XG4gIHJldHVybiB2ZXJzaW9uLmV2ZXJ5KChwYXJ0KSA9PiAocGFydCA/PyAwKSA9PT0gMCk7XG59XG5cbi8qKiBSZXR1cm4gdGhlIHJlYXNvbmluZyBlZmZvcnRzIGFjY2VwdGVkIGJ5IGEgbW9kZWwgZmFtaWx5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsUmVhc29uaW5nRWZmb3J0cyhuYW1lOiBzdHJpbmcpOiBSZWFzb25pbmdFZmZvcnRbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlTW9kZWxOYW1lKG5hbWUpO1xuICBsZXQgZWZmb3J0czogUmVhc29uaW5nRWZmb3J0W10gPSBbXTtcbiAgaWYgKHBhcnNlZD8uZmFtaWx5ID09PSBcImdwdFwiICYmIHBhcnNlZC52ZXJzaW9uLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBbbWFqb3IgPSAwLCBtaW5vciA9IDBdID0gcGFyc2VkLnZlcnNpb247XG4gICAgaWYgKG1ham9yID49IDUpIHtcbiAgICAgIGVmZm9ydHMgPVxuICAgICAgICBtYWpvciA9PT0gNSAmJiBtaW5vciA9PT0gNSAmJiBwYXJzZWQubW9kZWwuaW5jbHVkZXMoXCJwcm9cIilcbiAgICAgICAgICA/IEdQVF81XzVfUFJPXG4gICAgICAgICAgOiBtYWpvciA9PT0gNSAmJiBtaW5vciA9PT0gNlxuICAgICAgICAgICAgPyBHUFRfNV82XG4gICAgICAgICAgICA6IFNUQU5EQVJEO1xuICAgIH1cbiAgfVxuICBpZiAocGFyc2VkPy5mYW1pbHkgPT09IFwiZ3B0XCIgJiYgcGFyc2VkLm1vZGVsLmluY2x1ZGVzKFwib3NzXCIpKSBlZmZvcnRzID0gU1RBTkRBUkQ7XG4gIGlmIChwYXJzZWQ/LmZhbWlseSA9PT0gXCJjbGF1ZGVcIikge1xuICAgIGNvbnN0IFttYWpvciA9IDAsIG1pbm9yID0gMF0gPSBwYXJzZWQudmVyc2lvbjtcbiAgICBpZiAobWFqb3IgPiAzIHx8IChtYWpvciA9PT0gMyAmJiBtaW5vciA+PSA3KSkgZWZmb3J0cyA9IENMQVVERTtcbiAgfVxuICBpZiAocGFyc2VkPy5mYW1pbHkgPT09IFwiZ2VtaW5pXCIpIGVmZm9ydHMgPSBHRU1JTkk7XG4gIGlmIChub3JtYWxpemVkLmluY2x1ZGVzKFwiY29kZXhcIikgfHwgLyg/Ol58Wy1fLi9dKW8oPzoxfDN8NCkoPzpbLV8uL118JCkvaS50ZXN0KG5hbWUpKSB7XG4gICAgZWZmb3J0cyA9IFNUQU5EQVJEO1xuICB9XG4gIHJldHVybiBlZmZvcnRzO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgcG9saWN5IHZlcmlmaWVzIGEgY29tcGxldGUgdG9vbC1jYWxsaW5nIHJvdW5kIHRyaXAuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxTdXBwb3J0c1Rvb2xzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3VwcG9ydHNUb29sc0J5RmFtaWx5KG5hbWUpO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgYSBkaXNjb3ZlcmVkIGVuZHBvaW50IGNhbiBiZSB1c2VkIGZvciBhIHRvb2wtY2FsbGluZyBjaGF0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZHBvaW50U3VwcG9ydHNUb29scyhlbmRwb2ludDogU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IGJvb2xlYW4ge1xuICBjb25zdCBlbWJlZGRpbmcgPVxuICAgIGVuZHBvaW50LnRhc2sgPT09IFwibGxtL3YxL2VtYmVkZGluZ3NcIiB8fCBlbmRwb2ludC5jbGFzcyA9PT0gTW9kZWxDbGFzcy5FbWJlZGRpbmc7XG4gIGNvbnN0IGNoYXQgPSAhZW1iZWRkaW5nICYmIChlbmRwb2ludC50YXNrID09PSBcImxsbS92MS9jaGF0XCIgfHwgZW5kcG9pbnQuY2xhc3MgIT09IHVuZGVmaW5lZCk7XG4gIHJldHVybiBjaGF0ICYmIChlbmRwb2ludC5zdXBwb3J0c1Rvb2xzID8/IG1vZGVsU3VwcG9ydHNUb29scyhlbmRwb2ludC5uYW1lKSk7XG59XG5cbi8qKiBSZXR1cm4gd2hldGhlciBhIG1vZGVsIHJlcXVpcmVzIERhdGFicmlja3MnIG5hdGl2ZSBSZXNwb25zZXMgZW5kcG9pbnQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXNwb25zZXNPbmx5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiY29kZXhcIikpIHJldHVybiB0cnVlO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU1vZGVsTmFtZShuYW1lKTtcbiAgaWYgKCFwYXJzZWQgfHwgcGFyc2VkLmZhbWlseSAhPT0gXCJncHRcIiB8fCBwYXJzZWQubW9kZWwuaW5jbHVkZXMoXCJvc3NcIikpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgW21ham9yID0gMCwgbWlub3IgPSAwXSA9IHBhcnNlZC52ZXJzaW9uO1xuICByZXR1cm4gbWFqb3IgPiA1IHx8IChtYWpvciA9PT0gNSAmJiBtaW5vciA+PSA0KTtcbn1cblxuLyoqIFJldHVybiB0aGUgRGF0YWJyaWNrcyBpbmZlcmVuY2UgcHJvdG9jb2wgcmVxdWlyZWQgYnkgYSBtb2RlbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFNlcnZpbmdBcGkobmFtZTogc3RyaW5nKTogXCJjaGF0XCIgfCBcInJlc3BvbnNlc1wiIHtcbiAgcmV0dXJuIGlzUmVzcG9uc2VzT25seShuYW1lKSA/IFwicmVzcG9uc2VzXCIgOiBcImNoYXRcIjtcbn1cblxuLyoqIFJldHVybiB0aGUgQ2hhdCBDb21wbGV0aW9ucyBlZmZvcnQgcmVxdWlyZWQgd2hlbiBmdW5jdGlvbiB0b29scyBhcmUgcHJlc2VudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGF0VG9vbFJlYXNvbmluZ0VmZm9ydChuYW1lOiBzdHJpbmcpOiBSZWFzb25pbmdFZmZvcnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZU1vZGVsTmFtZShuYW1lKTtcbiAgaWYgKCFwYXJzZWQgfHwgcGFyc2VkLmZhbWlseSAhPT0gXCJncHRcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgW21ham9yID0gMCwgbWlub3IgPSAwXSA9IHBhcnNlZC52ZXJzaW9uO1xuICByZXR1cm4gbWFqb3IgPT09IDUgJiYgbWlub3IgPT09IDYgPyBcIm5vbmVcIiA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIERlcml2ZSBwcm92aWRlci1zcGVjaWZpYyBtb2RlbCBuYW1lcyBmcm9tIGEgRGF0YWJyaWNrcyBtb2RlbCBpZGVudGl0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFNlcnZpY2VOYW1lcyhuYW1lOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VNb2RlbE5hbWUobmFtZSk7XG4gIGlmICghcGFyc2VkKSByZXR1cm4ge307XG4gIGNvbnN0IHZlcnNpb24gPSBwYXJzZWQudmVyc2lvbi5qb2luKFwiLlwiKTtcbiAgY29uc3Qgc3VmZml4ID0gcGFyc2VkLm1vZGVsLmxlbmd0aCA/IGAtJHtwYXJzZWQubW9kZWwuam9pbihcIi1cIil9YCA6IFwiXCI7XG4gIHN3aXRjaCAocGFyc2VkLmZhbWlseSkge1xuICAgIGNhc2UgXCJncHRcIjpcbiAgICAgIHJldHVybiBwYXJzZWQubW9kZWwuaW5jbHVkZXMoXCJvc3NcIikgPyB7fSA6IHsgb3BlbmFpOiBgZ3B0LSR7dmVyc2lvbn0ke3N1ZmZpeH1gIH07XG4gICAgY2FzZSBcImNsYXVkZVwiOiB7XG4gICAgICBjb25zdCBbdmFyaWFudCwgLi4ucmVzdF0gPSBwYXJzZWQubW9kZWw7XG4gICAgICByZXR1cm4gdmFyaWFudFxuICAgICAgICA/IHsgYW50aHJvcGljOiBgY2xhdWRlLSR7dmFyaWFudH0tJHt2ZXJzaW9ufSR7cmVzdC5sZW5ndGggPyBgLSR7cmVzdC5qb2luKFwiLVwiKX1gIDogXCJcIn1gIH1cbiAgICAgICAgOiB7fTtcbiAgICB9XG4gICAgY2FzZSBcImdlbWluaVwiOlxuICAgIGNhc2UgXCJnZW1tYVwiOlxuICAgICAgcmV0dXJuIHsgZ29vZ2xlOiBgJHtwYXJzZWQuZmFtaWx5fS0ke3ZlcnNpb259JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJnbG1cIjpcbiAgICAgIHJldHVybiB7IHpoaXB1OiBgZ2xtLSR7dmVyc2lvbn0ke3N1ZmZpeH1gIH07XG4gICAgY2FzZSBcImdyb2tcIjpcbiAgICAgIHJldHVybiB7IHhhaTogYGdyb2stJHt2ZXJzaW9ufSR7c3VmZml4fWAgfTtcbiAgICBjYXNlIFwibGxhbWFcIjpcbiAgICAgIHJldHVybiB7IG1ldGE6IGBsbGFtYS0ke3ZlcnNpb259JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJxd2VuXCI6XG4gICAgICByZXR1cm4geyBhbGliYWJhOiBgcXdlbiR7dmVyc2lvbn0ke3N1ZmZpeH1gIH07XG4gICAgY2FzZSBcImRlZXBzZWVrXCI6XG4gICAgICByZXR1cm4geyBkZWVwc2VlazogYGRlZXBzZWVrLXYke3BhcnNlZC52ZXJzaW9uWzBdID8/IFwiXCJ9JHtzdWZmaXh9YCB9O1xuICAgIGNhc2UgXCJraW1pXCI6XG4gICAgICByZXR1cm4geyBtb29uc2hvdDogYGtpbWktayR7cGFyc2VkLnZlcnNpb25bMF0gPz8gXCJcIn0ke3N1ZmZpeH1gIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZU1vZGVsTmFtZShuYW1lOiBzdHJpbmcpOiBQYXJzZWRNb2RlbE5hbWUgfCB1bmRlZmluZWQge1xuICBjb25zdCB0b2tlbnMgPSBuYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL1thLXowLTldKy9nKSA/PyBbXTtcbiAgbGV0IGZhbWlseUluZGV4ID0gLTE7XG4gIGxldCBmYW1pbHk6IFBhcnNlZE1vZGVsTmFtZVtcImZhbWlseVwiXSB8IHVuZGVmaW5lZDtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRva2Vucy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleF0hO1xuICAgIGNvbnN0IGNvbXBhY3RRd2VuID0gL15xd2VuKFxcZCspJC8uZXhlYyh0b2tlbik7XG4gICAgaWYgKGNvbXBhY3RRd2VuKSB7XG4gICAgICBmYW1pbHlJbmRleCA9IGluZGV4O1xuICAgICAgZmFtaWx5ID0gXCJxd2VuXCI7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKEZBTUlMSUVTLmluY2x1ZGVzKHRva2VuIGFzIFBhcnNlZE1vZGVsTmFtZVtcImZhbWlseVwiXSkpIHtcbiAgICAgIGZhbWlseUluZGV4ID0gaW5kZXg7XG4gICAgICBmYW1pbHkgPSB0b2tlbiBhcyBQYXJzZWRNb2RlbE5hbWVbXCJmYW1pbHlcIl07XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmYW1pbHkgfHwgZmFtaWx5SW5kZXggPCAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByZW1haW5kZXIgPSB0b2tlbnMuc2xpY2UoZmFtaWx5SW5kZXggKyAxKTtcbiAgY29uc3QgbnVtZXJpYyA9ICh2YWx1ZTogc3RyaW5nKSA9PiAvXlxcZCskLy50ZXN0KHZhbHVlKTtcbiAgbGV0IHZlcnNpb25TdGFydCA9IHJlbWFpbmRlci5maW5kSW5kZXgobnVtZXJpYyk7XG4gIGlmIChmYW1pbHkgPT09IFwicXdlblwiICYmIC9ecXdlblxcZCskLy50ZXN0KHRva2Vuc1tmYW1pbHlJbmRleF0hKSkge1xuICAgIHZlcnNpb25TdGFydCA9IDA7XG4gICAgcmVtYWluZGVyLnVuc2hpZnQodG9rZW5zW2ZhbWlseUluZGV4XSEuc2xpY2UoNCkpO1xuICB9XG4gIGlmIChmYW1pbHkgPT09IFwiZGVlcHNlZWtcIikge1xuICAgIGNvbnN0IHByZWZpeGVkID0gcmVtYWluZGVyLmZpbmRJbmRleCgodmFsdWUpID0+IC9edlxcZCskLy50ZXN0KHZhbHVlKSk7XG4gICAgaWYgKHByZWZpeGVkID49IDApIHJlbWFpbmRlcltwcmVmaXhlZF0gPSByZW1haW5kZXJbcHJlZml4ZWRdIS5zbGljZSgxKTtcbiAgICB2ZXJzaW9uU3RhcnQgPSByZW1haW5kZXIuZmluZEluZGV4KG51bWVyaWMpO1xuICB9XG4gIGlmIChmYW1pbHkgPT09IFwia2ltaVwiKSB7XG4gICAgY29uc3QgcHJlZml4ZWQgPSByZW1haW5kZXIuZmluZEluZGV4KCh2YWx1ZSkgPT4gL15rXFxkKyQvLnRlc3QodmFsdWUpKTtcbiAgICBpZiAocHJlZml4ZWQgPj0gMCkgcmVtYWluZGVyW3ByZWZpeGVkXSA9IHJlbWFpbmRlcltwcmVmaXhlZF0hLnNsaWNlKDEpO1xuICAgIHZlcnNpb25TdGFydCA9IHJlbWFpbmRlci5maW5kSW5kZXgobnVtZXJpYyk7XG4gIH1cbiAgaWYgKHZlcnNpb25TdGFydCA8IDApIHJldHVybiB7IGZhbWlseSwgdmVyc2lvbjogW10sIG1vZGVsOiByZW1haW5kZXIgfTtcbiAgY29uc3QgdmVyc2lvbjogbnVtYmVyW10gPSBbXTtcbiAgbGV0IGN1cnNvciA9IHZlcnNpb25TdGFydDtcbiAgd2hpbGUgKGN1cnNvciA8IHJlbWFpbmRlci5sZW5ndGggJiYgdmVyc2lvbi5sZW5ndGggPCAyICYmIG51bWVyaWMocmVtYWluZGVyW2N1cnNvcl0hKSkge1xuICAgIHZlcnNpb24ucHVzaChOdW1iZXIocmVtYWluZGVyW2N1cnNvcl0pKTtcbiAgICBjdXJzb3IgKz0gMTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGZhbWlseSxcbiAgICB2ZXJzaW9uLFxuICAgIG1vZGVsOiBbLi4ucmVtYWluZGVyLnNsaWNlKDAsIHZlcnNpb25TdGFydCksIC4uLnJlbWFpbmRlci5zbGljZShjdXJzb3IpXSxcbiAgfTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@databricks/appkit": "0.81.0",
|
|
30
|
-
"@dbx-tools/appkit": "^0.9.
|
|
31
|
-
"@dbx-tools/auth": "^0.9.
|
|
32
|
-
"@dbx-tools/shared-auth": "^0.9.
|
|
33
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
34
|
-
"@dbx-tools/shared-model": "^0.9.
|
|
30
|
+
"@dbx-tools/appkit": "^0.9.61",
|
|
31
|
+
"@dbx-tools/auth": "^0.9.61",
|
|
32
|
+
"@dbx-tools/shared-auth": "^0.9.61",
|
|
33
|
+
"@dbx-tools/shared-core": "^0.9.61",
|
|
34
|
+
"@dbx-tools/shared-model": "^0.9.61",
|
|
35
35
|
"cacache": "^21.0.1",
|
|
36
36
|
"env-paths": "^4.0.0",
|
|
37
37
|
"fuse.js": "^7.4.2"
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"./package.json": "./package.json"
|
|
103
103
|
}
|
|
104
104
|
},
|
|
105
|
-
"version": "0.9.
|
|
105
|
+
"version": "0.9.61",
|
|
106
106
|
"types": "./lib/index.d.ts",
|
|
107
107
|
"dbxToolsConfig": {
|
|
108
108
|
"tags": [
|
package/src/_ranking.ts
CHANGED
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
supportsToolsByFamily,
|
|
18
18
|
versionTuple,
|
|
19
19
|
} from "./classify.ts";
|
|
20
|
-
import { modelFamily, modelReasoningEfforts, modelServiceNames } from "./policy.ts";
|
|
20
|
+
import { isOpenWeightsGpt, modelFamily, modelReasoningEfforts, modelServiceNames } from "./policy.ts";
|
|
21
21
|
|
|
22
22
|
type ModelClass = ModelClassType;
|
|
23
23
|
const ModelClass = ModelClassValues;
|
|
@@ -262,6 +262,9 @@ export function normalizeEndpoints(endpoints: readonly unknown[]): ServingEndpoi
|
|
|
262
262
|
function compareRanked(left: RankedModel, right: RankedModel): number {
|
|
263
263
|
const score = Math.round((left.score ?? 0) * 1000) - Math.round((right.score ?? 0) * 1000);
|
|
264
264
|
if (score !== 0) return score;
|
|
265
|
+
const leftOss = isOpenWeightsGpt(left.endpoint.name);
|
|
266
|
+
const rightOss = isOpenWeightsGpt(right.endpoint.name);
|
|
267
|
+
if (leftOss !== rightOss) return leftOss ? 1 : -1;
|
|
265
268
|
const leftVersion = versionTuple(left.endpoint.name);
|
|
266
269
|
const rightVersion = versionTuple(right.endpoint.name);
|
|
267
270
|
for (let index = 0; index < 3; index += 1) {
|
package/src/policy.ts
CHANGED
|
@@ -90,7 +90,8 @@ export function isFoundationModelIdentity(name: string): boolean {
|
|
|
90
90
|
return /^(?:databricks-|system\.ai\.)/i.test(name.trim());
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
/** Return whether an identity is hosted GPT-OSS rather than a GPT generation. */
|
|
94
|
+
export function isOpenWeightsGpt(name: string): boolean {
|
|
94
95
|
return modelFamily(name) === "gpt" && /(?:^|[-_.])oss(?:[-_.]|$)/i.test(name);
|
|
95
96
|
}
|
|
96
97
|
|