nextlove 2.14.3 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generators/index.js +18 -3
- package/dist/generators/index.mjs +18 -3
- package/dist/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -720,6 +720,7 @@ async function mapMethodsToFernSdkMetadata({
|
|
|
720
720
|
}
|
|
721
721
|
|
|
722
722
|
// src/generators/generate-openapi/index.ts
|
|
723
|
+
import dedent2 from "dedent";
|
|
723
724
|
function replaceFirstCharToLowercase(str) {
|
|
724
725
|
if (str.length === 0) {
|
|
725
726
|
return str;
|
|
@@ -857,9 +858,23 @@ You can also define "securityObjects" this way, if you want to make the endpoint
|
|
|
857
858
|
);
|
|
858
859
|
continue;
|
|
859
860
|
}
|
|
861
|
+
let description = routeSpec.description;
|
|
862
|
+
let additionalMetadata = {};
|
|
863
|
+
if (description) {
|
|
864
|
+
const trimmedDescription = dedent2(description).trim();
|
|
865
|
+
if (testFrontMatter(trimmedDescription)) {
|
|
866
|
+
const { attributes, body } = parseFrontMatter(trimmedDescription);
|
|
867
|
+
additionalMetadata = attributes;
|
|
868
|
+
description = body.trim();
|
|
869
|
+
} else {
|
|
870
|
+
description = trimmedDescription;
|
|
871
|
+
}
|
|
872
|
+
}
|
|
860
873
|
const route = {
|
|
861
874
|
...routeSpec.openApiMetadata,
|
|
875
|
+
...additionalMetadata,
|
|
862
876
|
summary: routePath,
|
|
877
|
+
...description && { description },
|
|
863
878
|
responses: {
|
|
864
879
|
200: {
|
|
865
880
|
description: "OK"
|
|
@@ -960,7 +975,7 @@ import * as fs2 from "fs/promises";
|
|
|
960
975
|
init_esm_shims();
|
|
961
976
|
import ts from "typescript";
|
|
962
977
|
import { ZodType } from "zod";
|
|
963
|
-
import
|
|
978
|
+
import dedent3 from "dedent";
|
|
964
979
|
var { factory: f, SyntaxKind, ScriptKind, ScriptTarget, EmitHint } = ts;
|
|
965
980
|
var maybeIdentifierToTypeReference = (identifier) => {
|
|
966
981
|
if (ts.isIdentifier(identifier)) {
|
|
@@ -1009,7 +1024,7 @@ function parseDescription2(description) {
|
|
|
1009
1024
|
return {
|
|
1010
1025
|
description: ""
|
|
1011
1026
|
};
|
|
1012
|
-
const trimmedDescription =
|
|
1027
|
+
const trimmedDescription = dedent3(description);
|
|
1013
1028
|
if (!testFrontMatter(trimmedDescription))
|
|
1014
1029
|
return { description };
|
|
1015
1030
|
const { attributes, body } = parseFrontMatter(trimmedDescription);
|
|
@@ -1533,4 +1548,4 @@ export {
|
|
|
1533
1548
|
generateOpenAPI,
|
|
1534
1549
|
generateRouteTypes
|
|
1535
1550
|
};
|
|
1536
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2dlbmVyYXRvcnMvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvcGFyc2Utcm91dGVzLWluLXBhY2thZ2UudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvbGliL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2xpYi96b2Qtb3BlbmFwaS50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvZnJvbnQtbWF0dGVyLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLW9wZW5hcGkvZW1iZWQtc2NoZW1hLXJlZmVyZW5jZXMudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9mZXJuLXNkay11dGlscy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1yb3V0ZS10eXBlcy9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvem9kLXRvLXRzLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2V4dHJhY3Qtcm91dGUtc3BlYy1zY2hlbWFzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0ZS1vcGVuYXBpXCJcbmV4cG9ydCAqIGZyb20gXCIuL2dlbmVyYXRlLXJvdXRlLXR5cGVzXCJcbmV4cG9ydCAqIGZyb20gXCIuL2V4dHJhY3Qtcm91dGUtc3BlYy1zY2hlbWFzXCJcbiIsICJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHtcbiAgT3BlbkFwaUJ1aWxkZXIsXG4gIE9wZXJhdGlvbk9iamVjdCxcbiAgUGFyYW1ldGVyT2JqZWN0LFxufSBmcm9tIFwib3BlbmFwaTMtdHMvb2FzMzFcIlxuaW1wb3J0IHsgU2V0dXBQYXJhbXMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VSb3V0ZXNJblBhY2thZ2UgfSBmcm9tIFwiLi4vbGliL3BhcnNlLXJvdXRlcy1pbi1wYWNrYWdlXCJcbmltcG9ydCB7IGdlbmVyYXRlU2NoZW1hIH0gZnJvbSBcIi4uL2xpYi96b2Qtb3BlbmFwaVwiXG5pbXBvcnQgeyBlbWJlZFNjaGVtYVJlZmVyZW5jZXMgfSBmcm9tIFwiLi9lbWJlZC1zY2hlbWEtcmVmZXJlbmNlc1wiXG5pbXBvcnQgeyBtYXBNZXRob2RzVG9GZXJuU2RrTWV0YWRhdGEgfSBmcm9tIFwiLi9mZXJuLXNkay11dGlsc1wiXG5cbmZ1bmN0aW9uIHJlcGxhY2VGaXJzdENoYXJUb0xvd2VyY2FzZShzdHI6IHN0cmluZykge1xuICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBzdHJcbiAgfVxuXG4gIGNvbnN0IGZpcnN0Q2hhciA9IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKVxuICByZXR1cm4gZmlyc3RDaGFyICsgc3RyLnNsaWNlKDEpXG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhUb09wZXJhdGlvbklkKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aFxuICAgIC5yZXBsYWNlKC8tL2csIFwiX1wiKVxuICAgIC5zcGxpdChcIi9cIilcbiAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICBjb25zdCB0cmFuc2Zvcm1lZFBhcnRzID0gcGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgaWYgKHBhcnQuc3RhcnRzV2l0aChcIltcIikgJiYgcGFydC5lbmRzV2l0aChcIl1cIikpIHtcbiAgICAgIC8vIENvbnZlcnQgW3BhcmFtXSB0byBCeVBhcmFtXG4gICAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHBhcnQuc2xpY2UoMSwgLTEpXG4gICAgICBjb25zdCB3b3JkcyA9IHNlcnZpY2VOYW1lLnNwbGl0KFwiX1wiKVxuICAgICAgY29uc3QgY2FwaXRhbGl6ZWRXb3JkcyA9IHdvcmRzLm1hcChcbiAgICAgICAgKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpXG4gICAgICApXG4gICAgICByZXR1cm4gYEJ5JHtjYXBpdGFsaXplZFdvcmRzLmpvaW4oXCJcIil9YFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb252ZXJ0IGFwaV9wYXRoIHRvIEFwaVBhdGhcbiAgICAgIGNvbnN0IHdvcmRzID0gcGFydC5zcGxpdChcIl9cIilcbiAgICAgIGNvbnN0IGNhcGl0YWxpemVkV29yZHMgPSB3b3Jkcy5tYXAoXG4gICAgICAgICh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGNhcGl0YWxpemVkV29yZHMuam9pbihcIlwiKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gcmVwbGFjZUZpcnN0Q2hhclRvTG93ZXJjYXNlKHRyYW5zZm9ybWVkUGFydHMuam9pbihcIlwiKSlcbn1cblxuZnVuY3Rpb24gcGFzY2FsQ2FzZShpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd29yZHMgPSBpbnB1dC5zcGxpdChcIiBcIilcbiAgY29uc3QgY2FwaXRhbGl6ZWRXb3JkcyA9IHdvcmRzLm1hcChcbiAgICAod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKVxuICApXG4gIGNvbnN0IHBhc2NhbENhc2VTdHJpbmcgPSBjYXBpdGFsaXplZFdvcmRzLmpvaW4oXCJcIilcbiAgcmV0dXJuIHBhc2NhbENhc2VTdHJpbmdcbn1cblxuaW50ZXJmYWNlIFRhZ09wdGlvbiB7XG4gIG5hbWU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIGRvZXNSb3V0ZUhhdmVUYWc/OiAocm91dGU6IHN0cmluZykgPT4gYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVPcGVuQVBJT3B0cyB7XG4gIHBhY2thZ2VEaXI6IHN0cmluZ1xuICBvdXRwdXRGaWxlPzogc3RyaW5nXG4gIHBhdGhHbG9iPzogc3RyaW5nXG4gIHRhZ3M/OiBBcnJheTxUYWdPcHRpb24+XG4gIGFwaVByZWZpeD86IHN0cmluZ1xuICBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlPzogKGZpbGVfcGF0aDogc3RyaW5nKSA9PiBzdHJpbmdcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhbiBPcGVuQVBJIHNwZWMgZnJvbSB0aGUgTmV4dC5qcyBBUEkgcm91dGVzLlxuICpcbiAqIFlvdSBub3JtYWxseSBpbnZva2UgdGhpcyB3aXRoIGBuZXh0YXBpIGdlbmVyYXRlLW9wZW5hcGlgIGluIGFcbiAqIFwiYnVpbGQ6b3BlbmFwaVwiIHBhY2thZ2UuanNvbiBzY3JpcHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU9wZW5BUEkob3B0czogR2VuZXJhdGVPcGVuQVBJT3B0cykge1xuICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdFxuICBjb25zdCB7IG91dHB1dEZpbGUsIHRhZ3MgPSBbXSB9ID0gb3B0c1xuXG4gIGNvbnN0IGZpbGVwYXRoVG9Sb3V0ZUZuID0gYXdhaXQgcGFyc2VSb3V0ZXNJblBhY2thZ2Uob3B0cylcblxuICAvLyBUT0RPIGRldGVjdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc2V0dXBzIGFuZCBvdXRwdXQgZGlmZmVyZW50IEFQSXNcbiAgY29uc3QgeyBzZXR1cFBhcmFtczogZ2xvYmFsU2V0dXBQYXJhbXMgfSA9IGZpbGVwYXRoVG9Sb3V0ZUZuLnZhbHVlcygpLm5leHQoKVxuICAgIC52YWx1ZSBhcyB7IHNldHVwUGFyYW1zOiBTZXR1cFBhcmFtcyB9XG5cbiAgY29uc3Qgc2VjdXJpdHlTY2hlbWVzID0gZ2xvYmFsU2V0dXBQYXJhbXMuc2VjdXJpdHlTY2hlbWFzID8/IHt9XG4gIGNvbnN0IHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlID0ge31cbiAgZm9yIChjb25zdCBhdXRoTmFtZSBvZiBPYmplY3Qua2V5cyhnbG9iYWxTZXR1cFBhcmFtcy5hdXRoTWlkZGxld2FyZU1hcCkpIHtcbiAgICBjb25zdCBtdyA9IGdsb2JhbFNldHVwUGFyYW1zLmF1dGhNaWRkbGV3YXJlTWFwW2F1dGhOYW1lXVxuICAgIGlmIChtdy5zZWN1cml0eVNjaGVtYSkge1xuICAgICAgc2VjdXJpdHlTY2hlbWVzW2F1dGhOYW1lXSA9IChtdyBhcyBhbnkpLnNlY3VyaXR5U2NoZW1hXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgIGBBdXRoZW50aWNhdGlvbiBtaWRkbGV3YXJlIFwiJHthdXRoTmFtZX1cIiBoYXMgbm8gc2VjdXJpdHlTY2hlbWEuIFlvdSBjYW4gZGVmaW5lIHRoaXMgb24gdGhlIGZ1bmN0aW9uIChlLmcuIGFmdGVyIHRoZSBleHBvcnQgZG8uLi4gXFxuXFxubXlNaWRkbGV3YXJlLnNlY3VyaXR5U2NoZW1hID0ge1xcbiAgdHlwZTogXCJodHRwXCJcXG4gIHNjaGVtZTogXCJiZWFyZXJcIlxcbiAgYmVhcmVyRm9ybWF0OiBcIkpXVFwiXFxuIC8vIG9yIEFQSSBUb2tlbiBldGMuXFxufVxcblxcbllvdSBjYW4gYWxzbyBkZWZpbmUgXCJzZWN1cml0eU9iamVjdHNcIiB0aGlzIHdheSwgaWYgeW91IHdhbnQgdG8gbWFrZSB0aGUgZW5kcG9pbnQgc3VwcG9ydCBtdWx0aXBsZSBtb2RlcyBvZiBhdXRoZW50aWNhdGlvbi5cXG5cXG5gXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9XG5cbiAgICBzZWN1cml0eU9iamVjdHNGb3JBdXRoVHlwZVthdXRoTmFtZV0gPSAobXcgYXMgYW55KS5zZWN1cml0eU9iamVjdHMgfHwgW1xuICAgICAge1xuICAgICAgICBbYXV0aE5hbWVdOiBbXSxcbiAgICAgIH0sXG4gICAgXVxuICB9XG5cbiAgY29uc3QgZ2xvYmFsU2NoZW1hcyA9IHt9XG4gIGZvciAoY29uc3QgW3NjaGVtYU5hbWUsIHpvZFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgZ2xvYmFsU2V0dXBQYXJhbXMuZ2xvYmFsU2NoZW1hcyA/PyB7fVxuICApKSB7XG4gICAgZ2xvYmFsU2NoZW1hc1tzY2hlbWFOYW1lXSA9IGdlbmVyYXRlU2NoZW1hKHpvZFNjaGVtYSlcbiAgfVxuXG4gIC8vIEJ1aWxkIE9wZW5BUEkgc3BlY1xuICBjb25zdCBidWlsZGVyID0gT3BlbkFwaUJ1aWxkZXIuY3JlYXRlKHtcbiAgICBvcGVuYXBpOiBcIjMuMC4wXCIsXG4gICAgaW5mbzoge1xuICAgICAgdGl0bGU6IGdsb2JhbFNldHVwUGFyYW1zLmFwaU5hbWUsXG4gICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgfSxcbiAgICBzZXJ2ZXJzOiBbXG4gICAgICB7XG4gICAgICAgIHVybDogZ2xvYmFsU2V0dXBQYXJhbXMucHJvZHVjdGlvblNlcnZlclVybCB8fCBcImh0dHBzOi8vZXhhbXBsZS5jb21cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB0YWdzOiB0YWdzLm1hcCgodGFnKSA9PiAoeyBuYW1lOiB0YWcubmFtZSwgZGVzY3JpcHRpb246IHRhZy5kZXNjcmlwdGlvbiB9KSksXG4gICAgcGF0aHM6IHt9LFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIHNlY3VyaXR5U2NoZW1lcyxcbiAgICAgIHNjaGVtYXM6IGdsb2JhbFNjaGVtYXMsXG4gICAgfSxcbiAgfSlcblxuICBmb3IgKGNvbnN0IFtcbiAgICBmaWxlX3BhdGgsXG4gICAgeyBzZXR1cFBhcmFtcywgcm91dGVTcGVjLCByb3V0ZTogcm91dGVQYXRoIH0sXG4gIF0gb2YgZmlsZXBhdGhUb1JvdXRlRm4pIHtcbiAgICBjb25zdCBpc1Bvc3RPclB1dE9yUGF0Y2ggPSBbXCJQT1NUXCIsIFwiUFVUXCIsIFwiUEFUQ0hcIl0uc29tZSgobWV0aG9kKSA9PlxuICAgICAgcm91dGVTcGVjLm1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKVxuICAgIClcbiAgICAvLyBUT0RPOiBzdXBwb3J0IG11bHRpcGFydC9mb3JtLWRhdGFcblxuICAgIC8vIGhhbmRsZSBib2R5XG4gICAgbGV0IGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hXG4gICAgaWYgKGlzUG9zdE9yUHV0T3JQYXRjaCkge1xuICAgICAgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMuanNvbkJvZHkgPz8gcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuXG4gICAgICBpZiAocm91dGVTcGVjLmpzb25Cb2R5ICYmIHJvdXRlU3BlYy5jb21tb25QYXJhbXMpIHtcbiAgICAgICAgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMuanNvbkJvZHkubWVyZ2UoXG4gICAgICAgICAgcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLmpzb25Cb2R5XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHF1ZXJ5XG4gICAgbGV0IHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYVxuICAgIGlmIChpc1Bvc3RPclB1dE9yUGF0Y2gpIHtcbiAgICAgIHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5xdWVyeVBhcmFtc1xuICAgIH0gZWxzZSB7XG4gICAgICBxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXMgPz8gcm91dGVTcGVjLmNvbW1vblBhcmFtc1xuXG4gICAgICBpZiAocm91dGVTcGVjLnF1ZXJ5UGFyYW1zICYmIHJvdXRlU3BlYy5jb21tb25QYXJhbXMpIHtcbiAgICAgICAgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zLm1lcmdlKFxuICAgICAgICAgIHJvdXRlU3BlYy5jb21tb25QYXJhbXNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERFTEVURSBhbmQgR0VUIGNhbm5vdCBoYXZlIGEgYm9keVxuICAgIGxldCBtZXRob2RzID0gcm91dGVTcGVjLm1ldGhvZHNcblxuICAgIGlmIChyb3V0ZVNwZWMubWV0aG9kcy5pbmNsdWRlcyhcIkRFTEVURVwiKSAmJiBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgbWV0aG9kcyA9IG1ldGhvZHMuZmlsdGVyKChtKSA9PiBtICE9PSBcIkRFTEVURVwiKVxuICAgIH1cblxuICAgIGlmIChyb3V0ZVNwZWMubWV0aG9kcy5pbmNsdWRlcyhcIkdFVFwiKSAmJiBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSkge1xuICAgICAgbWV0aG9kcyA9IG1ldGhvZHMuZmlsdGVyKChtKSA9PiBtICE9PSBcIkdFVFwiKVxuICAgIH1cblxuICAgIGlmIChtZXRob2RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBjaGFsay55ZWxsb3coYFNraXBwaW5nIHJvdXRlICR7cm91dGVQYXRofSBiZWNhdXNlIGl0IGhhcyBubyBtZXRob2RzLmApXG4gICAgICApXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IHJvdXRlOiBPcGVyYXRpb25PYmplY3QgPSB7XG4gICAgICAuLi5yb3V0ZVNwZWMub3BlbkFwaU1ldGFkYXRhLFxuICAgICAgc3VtbWFyeTogcm91dGVQYXRoLFxuICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9LXCIsXG4gICAgICAgIH0sXG4gICAgICAgIDQwMDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkJhZCBSZXF1ZXN0XCIsXG4gICAgICAgIH0sXG4gICAgICAgIDQwMToge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlVuYXV0aG9yaXplZFwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNlY3VyaXR5OiBBcnJheS5pc0FycmF5KHJvdXRlU3BlYy5hdXRoKVxuICAgICAgICA/IHJvdXRlU3BlYy5hdXRoXG4gICAgICAgICAgICAubWFwKChhdXRoVHlwZSkgPT4gc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbYXV0aFR5cGVdKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICA6IHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlW3JvdXRlU3BlYy5hdXRoXSxcbiAgICB9XG5cbiAgICBpZiAoYm9keV90b19nZW5lcmF0ZV9zY2hlbWEpIHtcbiAgICAgIHJvdXRlLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICAgIHNjaGVtYTogZ2VuZXJhdGVTY2hlbWEoYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgYXMgYW55KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGdlbmVyYXRlU2NoZW1hKHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSBhcyBhbnkpXG4gICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyczogUGFyYW1ldGVyT2JqZWN0W10gPSBPYmplY3Qua2V5cyhcbiAgICAgICAgICBzY2hlbWEucHJvcGVydGllcyBhcyBhbnlcbiAgICAgICAgKS5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGluOiBcInF1ZXJ5XCIsXG4gICAgICAgICAgICBzY2hlbWE6IHNjaGVtYS5wcm9wZXJ0aWVzIVtuYW1lXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBzY2hlbWEucmVxdWlyZWQ/LmluY2x1ZGVzKG5hbWUpLFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByb3V0ZS5wYXJhbWV0ZXJzID0gcGFyYW1ldGVyc1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsganNvblJlc3BvbnNlIH0gPSByb3V0ZVNwZWNcbiAgICBjb25zdCB7IGFkZE9rU3RhdHVzID0gdHJ1ZSB9ID0gc2V0dXBQYXJhbXNcblxuICAgIGlmIChqc29uUmVzcG9uc2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWpzb25SZXNwb25zZS5fZGVmIHx8XG4gICAgICAgICFqc29uUmVzcG9uc2UuX2RlZi50eXBlTmFtZSB8fFxuICAgICAgICBqc29uUmVzcG9uc2UuX2RlZi50eXBlTmFtZSAhPT0gXCJab2RPYmplY3RcIlxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgICBgU2tpcHBpbmcgcm91dGUgJHtyb3V0ZVBhdGh9IGJlY2F1c2UgdGhlIHJlc3BvbnNlIGlzIG5vdCBhIFpvZE9iamVjdC5gXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlU2NoZW1hID0gZ2VuZXJhdGVTY2hlbWEoXG4gICAgICAgIGFkZE9rU3RhdHVzICYmIGpzb25SZXNwb25zZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0XG4gICAgICAgICAgPyBqc29uUmVzcG9uc2UuZXh0ZW5kKHsgb2s6IHouYm9vbGVhbigpIH0pXG4gICAgICAgICAgOiBqc29uUmVzcG9uc2VcbiAgICAgIClcblxuICAgICAgY29uc3Qgc2NoZW1hV2l0aFJlZmVyZW5jZXMgPSBlbWJlZFNjaGVtYVJlZmVyZW5jZXMoXG4gICAgICAgIHJlc3BvbnNlU2NoZW1hLFxuICAgICAgICBnbG9iYWxTY2hlbWFzXG4gICAgICApXG5cbiAgICAgIC8vIFRPRE86IHdlIHNob3VsZCBub3QgaGFyZGNvZGUgMjAwIGhlcmVcbiAgICAgIHJvdXRlLnJlc3BvbnNlc1syMDBdLmNvbnRlbnQgPSB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiBzY2hlbWFXaXRoUmVmZXJlbmNlcyxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByb3V0ZS50YWdzID0gW11cbiAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgICBpZiAodGFnLmRvZXNSb3V0ZUhhdmVUYWcgJiYgdGFnLmRvZXNSb3V0ZUhhdmVUYWcocm91dGUuc3VtbWFyeSB8fCBcIlwiKSkge1xuICAgICAgICByb3V0ZS50YWdzLnB1c2godGFnLm5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kc01hcHBlZFRvRmVyblNka01ldGFkYXRhID0gYXdhaXQgbWFwTWV0aG9kc1RvRmVyblNka01ldGFkYXRhKHtcbiAgICAgIG1ldGhvZHMsXG4gICAgICBwYXRoOiByb3V0ZVBhdGgsXG4gICAgICBzZGtSZXR1cm5WYWx1ZTogcm91dGVTcGVjLnNka1JldHVyblZhbHVlLFxuICAgIH0pXG5cbiAgICAvLyBTb21lIHJvdXRlcyBhY2NlcHQgbXVsdGlwbGUgbWV0aG9kc1xuICAgIGJ1aWxkZXIuYWRkUGF0aChyb3V0ZVBhdGgsIHtcbiAgICAgIC4uLm1ldGhvZHNcbiAgICAgICAgLm1hcCgobWV0aG9kKSA9PiAoe1xuICAgICAgICAgIFttZXRob2QudG9Mb3dlckNhc2UoKV06IHtcbiAgICAgICAgICAgIC4uLm1ldGhvZHNNYXBwZWRUb0Zlcm5TZGtNZXRhZGF0YVttZXRob2RdLFxuICAgICAgICAgICAgLi4ucm91dGUsXG4gICAgICAgICAgICBvcGVyYXRpb25JZDogYCR7dHJhbnNmb3JtUGF0aFRvT3BlcmF0aW9uSWQocm91dGVQYXRoKX0ke3Bhc2NhbENhc2UoXG4gICAgICAgICAgICAgIG1ldGhvZFxuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKVxuICAgICAgICAucmVkdWNlUmlnaHQoKGFjYywgY3VyKSA9PiAoeyAuLi5hY2MsIC4uLmN1ciB9KSwge30pLFxuICAgIH0pXG4gIH1cblxuICBpZiAob3V0cHV0RmlsZSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvdXRwdXRGaWxlLCBidWlsZGVyLmdldFNwZWNBc0pzb24odW5kZWZpbmVkLCAyKSlcbiAgfVxuXG4gIHJldHVybiBidWlsZGVyLmdldFNwZWNBc0pzb24odW5kZWZpbmVkLCAyKVxufVxuIiwgImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgUm91dGVTcGVjLCBTZXR1cFBhcmFtcyB9IGZyb20gXCIuLi8uLi90eXBlc1wiXG5pbXBvcnQgeyBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSB9IGZyb20gXCIuL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlXCJcblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUluZm8ge1xuICBzZXR1cFBhcmFtczogU2V0dXBQYXJhbXNcbiAgcm91dGVTcGVjOiBSb3V0ZVNwZWNcbiAgcm91dGVGbjogRnVuY3Rpb25cbiAgcm91dGU6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VSb3V0ZXNJblBhY2thZ2UgPSBhc3luYyAob3B0czoge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xuICBpbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzPzogYm9vbGVhblxufSk6IFByb21pc2U8TWFwPHN0cmluZywgUm91dGVJbmZvPj4gPT4ge1xuICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdFxuICBjb25zdCBnbG9iYnkgPSAoYXdhaXQgaW1wb3J0KFwiZ2xvYmJ5XCIpKS5nbG9iYnlcbiAgY29uc3Qge1xuICAgIHBhY2thZ2VEaXIsXG4gICAgcGF0aEdsb2IgPSBcIi9wYWdlcy9hcGkvKiovKi50c1wiLFxuICAgIG1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPSBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZShvcHRzLmFwaVByZWZpeCksXG4gIH0gPSBvcHRzXG4gIC8vIExvYWQgYWxsIHJvdXRlIHNwZWNzXG4gIGNvbnN0IGZ1bGxQYXRoR2xvYiA9IHBhdGgucG9zaXguam9pbihwYWNrYWdlRGlyLCBwYXRoR2xvYilcbiAgY29uc29sZS5sb2coYHNlYXJjaGluZyBcIiR7ZnVsbFBhdGhHbG9ifVwiLi4uYClcbiAgY29uc3QgZmlsZXBhdGhzID0gYXdhaXQgZ2xvYmJ5KGAke2Z1bGxQYXRoR2xvYn1gKVxuICBjb25zb2xlLmxvZyhgZm91bmQgJHtmaWxlcGF0aHMubGVuZ3RofSBmaWxlc2ApXG4gIGlmIChmaWxlcGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBmaWxlcyBmb3VuZCBhdCBcIiR7ZnVsbFBhdGhHbG9ifVwiYClcbiAgfVxuICBjb25zdCBmaWxlcGF0aFRvUm91dGVGbiA9IG5ldyBNYXA8c3RyaW5nLCBSb3V0ZUluZm8+KClcblxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlcGF0aHMubWFwKGFzeW5jIChwKSA9PiB7XG4gICAgICBjb25zdCB7IGRlZmF1bHQ6IHJvdXRlRm4gfSA9IGF3YWl0IHJlcXVpcmUocGF0aC5yZXNvbHZlKHApKVxuXG4gICAgICBpZiAocm91dGVGbikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcm91dGVGbi5fcm91dGVTcGVjPy5leGNsdWRlRnJvbU9wZW5BcGkgJiZcbiAgICAgICAgICAhb3B0cy5pbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgY2hhbGsuZ3JheShcbiAgICAgICAgICAgICAgYElnbm9yaW5nIFwiJHtwfSBiZWNhdXNlIGl0IHdhcyBleGNsdWRlZCBmcm9tIE9wZW5BUEkgZ2VuZXJhdGlvblwiYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJvdXRlRm4uX3NldHVwUGFyYW1zKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgICBgSWdub3JpbmcgXCIke3B9XCIgYmVjYXVzZSBpdCB3YXNuJ3QgY3JlYXRlZCB3aXRoIHdpdGhSb3V0ZVNwZWNgXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGZpbGVwYXRoVG9Sb3V0ZUZuLnNldChwLCB7XG4gICAgICAgICAgc2V0dXBQYXJhbXM6IHJvdXRlRm4uX3NldHVwUGFyYW1zLFxuICAgICAgICAgIHJvdXRlU3BlYzogcm91dGVGbi5fcm91dGVTcGVjLFxuICAgICAgICAgIHJvdXRlOiBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlKHApLFxuICAgICAgICAgIHJvdXRlRm4sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oY2hhbGsueWVsbG93KGBDb3VsZG4ndCBmaW5kIHJvdXRlICR7cH1gKSlcbiAgICAgIH1cbiAgICB9KVxuICApXG5cbiAgcmV0dXJuIGZpbGVwYXRoVG9Sb3V0ZUZuXG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgY29uc3QgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPVxuICAoYXBpX3ByZWZpeDogc3RyaW5nID0gXCIvYXBpXCIpID0+XG4gIChmaWxlX3BhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvdXRlID0gZmlsZV9wYXRoXG4gICAgICAvLyByZXBsYWNlIC4vIGlmIGl0IHN0YXJ0cyB3aXRoIC4vXG4gICAgICAucmVwbGFjZSgvXlxcLlxcLy8sIFwiL1wiKVxuICAgICAgLy8gcmVwbGFjZSBzdGFydGluZyAvXG4gICAgICAucmVwbGFjZSgvXlxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC9zcmMgaWYgaXQgc3RhcnRzIHdpdGggL3NyY1xuICAgICAgLnJlcGxhY2UoL15zcmNcXC8vLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSAvcGFnZXMgaWYgaXQgc3RhcnRzIHdpdGggL3BhZ2VzXG4gICAgICAucmVwbGFjZSgvXnBhZ2VzXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgL2FwaSBpZiBpdCBzdGFydHMgd2l0aCAvYXBpXG4gICAgICAucmVwbGFjZSgvXmFwaVxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC50cyBpZiBpdCBlbmRzIHdpdGggLnRzXG4gICAgICAucmVwbGFjZSgvXFwudHMkLywgXCJcIilcbiAgICAgIC8vIHJlbW92ZSBwdWJsaWMgcmVmZXJlbmNlXG4gICAgICAucmVwbGFjZShcInB1YmxpY1wiLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSBpbmRleCBpZiBpdCBlbmRzIHdpdGggaW5kZXhcbiAgICAgIC5yZXBsYWNlKC9cXC9cXGluZGV4KD8hLikvLCBcIlwiKVxuXG4gICAgcmV0dXJuIHBhdGguam9pbihhcGlfcHJlZml4LCByb3V0ZSlcbiAgfVxuIiwgIi8qKlxuICogWm9kIE9wZW5BUEkgR2VuZXJhdG9yLlxuICpcbiAqIFZlbmRvcmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FuYXRpbmUvem9kLXBsdWdpbnNcbiAqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAyMiBCcmlhbiBNY0JyaWRlXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNjaGVtYU9iamVjdCwgU2NoZW1hT2JqZWN0VHlwZSB9IGZyb20gXCJvcGVuYXBpMy10cy9vYXMzMVwiXG5pbXBvcnQgbWVyZ2UgZnJvbSBcInRzLWRlZXBtZXJnZVwiXG5pbXBvcnQgeyBBbnlab2RPYmplY3QsIHosIFpvZFR5cGVBbnkgfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHBhcnNlRnJvbnRNYXR0ZXIsIHRlc3RGcm9udE1hdHRlciB9IGZyb20gXCIuL2Zyb250LW1hdHRlclwiXG5pbXBvcnQgZGVkZW50IGZyb20gXCJkZWRlbnRcIlxuXG50eXBlIEFuYXRpbmVTY2hlbWFPYmplY3QgPSBTY2hlbWFPYmplY3QgJiB7IGhpZGVEZWZpbml0aW9ucz86IHN0cmluZ1tdIH1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQXBpWm9kQW55IGV4dGVuZHMgWm9kVHlwZUFueSB7XG4gIG1ldGFPcGVuQXBpPzogQW5hdGluZVNjaGVtYU9iamVjdCB8IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxufVxuXG5pbnRlcmZhY2UgT3BlbkFwaVpvZEFueU9iamVjdCBleHRlbmRzIEFueVpvZE9iamVjdCB7XG4gIG1ldGFPcGVuQXBpPzogQW5hdGluZVNjaGVtYU9iamVjdCB8IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxufVxuXG5pbnRlcmZhY2UgUGFyc2luZ0FyZ3M8VD4ge1xuICB6b2RSZWY6IFRcbiAgc2NoZW1hczogQW5hdGluZVNjaGVtYU9iamVjdFtdXG4gIHVzZU91dHB1dD86IGJvb2xlYW5cbiAgaGlkZURlZmluaXRpb25zPzogc3RyaW5nW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZEFwaTxUIGV4dGVuZHMgT3BlbkFwaVpvZEFueT4oXG4gIHNjaGVtYTogVCxcbiAgc2NoZW1hT2JqZWN0OiBBbmF0aW5lU2NoZW1hT2JqZWN0ID0ge31cbik6IFQge1xuICBzY2hlbWEubWV0YU9wZW5BcGkgPSBPYmplY3QuYXNzaWduKHNjaGVtYS5tZXRhT3BlbkFwaSB8fCB7fSwgc2NoZW1hT2JqZWN0KVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmZ1bmN0aW9uIGl0ZXJhdGVab2RPYmplY3Qoe1xuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbiAgaGlkZURlZmluaXRpb25zLFxufTogUGFyc2luZ0FyZ3M8T3BlbkFwaVpvZEFueU9iamVjdD4pIHtcbiAgY29uc3QgcmVkdWNlZCA9IE9iamVjdC5rZXlzKHpvZFJlZi5zaGFwZSlcbiAgICAuZmlsdGVyKChrZXkpID0+IGhpZGVEZWZpbml0aW9ucz8uaW5jbHVkZXMoa2V5KSA9PT0gZmFsc2UpXG4gICAgLnJlZHVjZShcbiAgICAgIChjYXJyeSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5jYXJyeSxcbiAgICAgICAgW2tleV06IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5zaGFwZVtrZXldLCB1c2VPdXRwdXQpLFxuICAgICAgfSksXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBTY2hlbWFPYmplY3Q+XG4gICAgKVxuXG4gIHJldHVybiByZWR1Y2VkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmOiBPcGVuQXBpWm9kQW55KTogU2NoZW1hT2JqZWN0IHtcbiAgaWYgKCF6b2RSZWYuZGVzY3JpcHRpb24pIHJldHVybiB7fVxuICBjb25zdCB0cmltbWVkRGVzY3JpcHRpb24gPSBkZWRlbnQoem9kUmVmLmRlc2NyaXB0aW9uKVxuICBpZiAoIXRlc3RGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pKVxuICAgIHJldHVybiB7IGRlc2NyaXB0aW9uOiB6b2RSZWYuZGVzY3JpcHRpb24gfVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGJvZHkgfSA9IHBhcnNlRnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKVxuICBjb25zdCBvdXRwdXQ6IFNjaGVtYU9iamVjdCA9IHt9XG4gIGlmIChib2R5LnRyaW0oKSkgb3V0cHV0LmRlc2NyaXB0aW9uID0gYm9keS50cmltKClcbiAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiICYmIGF0dHJpYnV0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoXCJkZXByZWNhdGVkXCIgaW4gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG91dHB1dC5kZXByZWNhdGVkID0gdHJ1ZVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuICAgICAgb3V0cHV0W2B4LSR7a2V5fWBdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dFxufVxuXG5mdW5jdGlvbiBwYXJzZVRyYW5zZm9ybWF0aW9uKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZFRyYW5zZm9ybWVyPG5ldmVyPiB8IHouWm9kRWZmZWN0czxuZXZlcj4+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgaW5wdXQgPSBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5zY2hlbWEsIHVzZU91dHB1dClcblxuICBsZXQgb3V0cHV0ID0gXCJ1bmRlZmluZWRcIlxuICBpZiAodXNlT3V0cHV0ICYmIHpvZFJlZi5fZGVmLmVmZmVjdCkge1xuICAgIGNvbnN0IGVmZmVjdCA9XG4gICAgICB6b2RSZWYuX2RlZi5lZmZlY3QudHlwZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IHpvZFJlZi5fZGVmLmVmZmVjdCA6IG51bGxcbiAgICBpZiAoZWZmZWN0ICYmIFwidHJhbnNmb3JtXCIgaW4gZWZmZWN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBvdXRwdXQgPSB0eXBlb2YgZWZmZWN0LnRyYW5zZm9ybShcbiAgICAgICAgICBbXCJpbnRlZ2VyXCIsIFwibnVtYmVyXCJdLmluY2x1ZGVzKGAke2lucHV0LnR5cGV9YClcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBcInN0cmluZ1wiID09PSBpbnB1dC50eXBlXG4gICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgIDogXCJib29sZWFuXCIgPT09IGlucHV0LnR5cGVcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogXCJvYmplY3RcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyB7fVxuICAgICAgICAgICAgOiBcIm51bGxcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IFwiYXJyYXlcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgeyBhZGRJc3N1ZTogKCkgPT4gdW5kZWZpbmVkLCBwYXRoOiBbXSB9IC8vIFRPRE86IERpc2NvdmVyIGlmIGNvbnRleHQgaXMgbmVjZXNzYXJ5IGhlcmVcbiAgICAgICAgKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiovXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICAuLi4oem9kUmVmLmRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbjogem9kUmVmLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAuLi5pbnB1dCxcbiAgICAgIC4uLihbXCJudW1iZXJcIiwgXCJzdHJpbmdcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiXS5pbmNsdWRlcyhvdXRwdXQpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogb3V0cHV0IGFzIFwibnVtYmVyXCIgfCBcInN0cmluZ1wiIHwgXCJib29sZWFuXCIgfCBcIm51bGxcIixcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0sXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RTdHJpbmc+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgYmFzZVNjaGVtYTogU2NoZW1hT2JqZWN0ID0ge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gIH1cbiAgY29uc3QgeyBjaGVja3MgPSBbXSB9ID0gem9kUmVmLl9kZWZcbiAgY2hlY2tzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBzd2l0Y2ggKGl0ZW0ua2luZCkge1xuICAgICAgY2FzZSBcImVtYWlsXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJlbWFpbFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwidXVpZFwiOlxuICAgICAgICBiYXNlU2NoZW1hLmZvcm1hdCA9IFwidXVpZFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiY3VpZFwiOlxuICAgICAgICBiYXNlU2NoZW1hLmZvcm1hdCA9IFwiY3VpZFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwidXJsXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJ1cmlcIlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJkYXRlLXRpbWVcIlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImxlbmd0aFwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbkxlbmd0aCA9IGl0ZW0udmFsdWVcbiAgICAgICAgYmFzZVNjaGVtYS5tYXhMZW5ndGggPSBpdGVtLnZhbHVlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgIGJhc2VTY2hlbWEubWF4TGVuZ3RoID0gaXRlbS52YWx1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbkxlbmd0aCA9IGl0ZW0udmFsdWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJyZWdleFwiOlxuICAgICAgICBiYXNlU2NoZW1hLnBhdHRlcm4gPSBpdGVtLnJlZ2V4LnNvdXJjZVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1lcmdlKGJhc2VTY2hlbWEsIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gcGFyc2VOdW1iZXIoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZE51bWJlcj4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBiYXNlU2NoZW1hOiBTY2hlbWFPYmplY3QgPSB7XG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBmb3JtYXQ6IFwiZmxvYXRcIixcbiAgfVxuICBjb25zdCB7IGNoZWNrcyA9IFtdIH0gPSB6b2RSZWYuX2RlZlxuICBjaGVja3MuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIHN3aXRjaCAoaXRlbS5raW5kKSB7XG4gICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgIGJhc2VTY2hlbWEubWF4aW11bSA9IGl0ZW0udmFsdWVcbiAgICAgICAgLy8gVE9ETzogb3B0aW9uIHRvIG1ha2UgdGhpcyBhbHdheXMgZXhwbGljaXQ/IChmYWxzZSBpbnN0ZWFkIG9mIG5vbi1leGlzdGVudClcbiAgICAgICAgaWYgKCFpdGVtLmluY2x1c2l2ZSkgYmFzZVNjaGVtYS5leGNsdXNpdmVNYXhpbXVtID0gaXRlbS52YWx1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbmltdW0gPSBpdGVtLnZhbHVlXG4gICAgICAgIGlmICghaXRlbS5pbmNsdXNpdmUpIGJhc2VTY2hlbWEuZXhjbHVzaXZlTWluaW11bSA9IGl0ZW0udmFsdWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJpbnRcIjpcbiAgICAgICAgYmFzZVNjaGVtYS50eXBlID0gXCJpbnRlZ2VyXCJcbiAgICAgICAgZGVsZXRlIGJhc2VTY2hlbWEuZm9ybWF0XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibXVsdGlwbGVPZlwiOlxuICAgICAgICBiYXNlU2NoZW1hLm11bHRpcGxlT2YgPSBpdGVtLnZhbHVlXG4gICAgfVxuICB9KVxuICByZXR1cm4gbWVyZ2UoYmFzZVNjaGVtYSwgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLCAuLi5zY2hlbWFzKVxufVxuXG5mdW5jdGlvbiBnZXRFeGNsdWRlZERlZmluaXRpb25zRnJvbVNjaGVtYShcbiAgc2NoZW1hczogQW5hdGluZVNjaGVtYU9iamVjdFtdXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGV4Y2x1ZGVkRGVmaW5pdGlvbnM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5oaWRlRGVmaW5pdGlvbnMpKSB7XG4gICAgICBleGNsdWRlZERlZmluaXRpb25zLnB1c2goLi4uc2NoZW1hLmhpZGVEZWZpbml0aW9ucylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhjbHVkZWREZWZpbml0aW9uc1xufVxuXG5mdW5jdGlvbiBwYXJzZU9iamVjdCh7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbiAgdXNlT3V0cHV0LFxuICBoaWRlRGVmaW5pdGlvbnMsXG59OiBQYXJzaW5nQXJnczxcbiAgei5ab2RPYmplY3Q8bmV2ZXIsIFwicGFzc3Rocm91Z2hcIiB8IFwic3RyaWN0XCIgfCBcInN0cmlwXCI+XG4+KTogU2NoZW1hT2JqZWN0IHtcbiAgbGV0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBTY2hlbWFPYmplY3RbXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiXVxuXG4gIC8vIGBjYXRjaGFsbGAgb2J2aWF0ZXMgYHN0cmljdGAsIGBzdHJpcGAsIGFuZCBgcGFzc3Rocm91Z2hgXG4gIGlmIChcbiAgICAhKFxuICAgICAgem9kUmVmLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiB6LlpvZE5ldmVyIHx8XG4gICAgICB6b2RSZWYuX2RlZi5jYXRjaGFsbD8uX2RlZi50eXBlTmFtZSA9PT0gXCJab2ROZXZlclwiXG4gICAgKVxuICApXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXMgPSBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5jYXRjaGFsbCwgdXNlT3V0cHV0KVxuICBlbHNlIGlmICh6b2RSZWYuX2RlZi51bmtub3duS2V5cyA9PT0gXCJwYXNzdGhyb3VnaFwiKVxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gdHJ1ZVxuICBlbHNlIGlmICh6b2RSZWYuX2RlZi51bmtub3duS2V5cyA9PT0gXCJzdHJpY3RcIikgYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZVxuXG4gIC8vIFNvIHRoYXQgYHVuZGVmaW5lZGAgdmFsdWVzIGRvbid0IGVuZCB1cCBpbiB0aGUgc2NoZW1hIGFuZCBiZSB3ZWlyZFxuICBhZGRpdGlvbmFsUHJvcGVydGllcyA9XG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXMgIT0gbnVsbCA/IHsgYWRkaXRpb25hbFByb3BlcnRpZXMgfSA6IHt9XG5cbiAgY29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoXG4gICAgKHpvZFJlZiBhcyB6LkFueVpvZE9iamVjdCkuc2hhcGVcbiAgKS5maWx0ZXIoKGtleSkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSAoem9kUmVmIGFzIHouQW55Wm9kT2JqZWN0KS5zaGFwZVtrZXldXG4gICAgcmV0dXJuIChcbiAgICAgICEoXG4gICAgICAgIGl0ZW0uaXNPcHRpb25hbCgpIHx8XG4gICAgICAgIGl0ZW0gaW5zdGFuY2VvZiB6LlpvZERlZmF1bHQgfHxcbiAgICAgICAgaXRlbS5fZGVmLnR5cGVOYW1lID09PSBcIlpvZERlZmF1bHRcIlxuICAgICAgKSAmJiAhKGl0ZW0gaW5zdGFuY2VvZiB6LlpvZE5ldmVyIHx8IGl0ZW0uX2RlZi50eXBlTmFtZSA9PT0gXCJab2REZWZhdWx0XCIpXG4gICAgKVxuICB9KVxuXG4gIGNvbnN0IHJlcXVpcmVkID1cbiAgICByZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCA/IHsgcmVxdWlyZWQ6IHJlcXVpcmVkUHJvcGVydGllcyB9IDoge31cblxuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgdHlwZTogXCJvYmplY3RcIiBhcyBTY2hlbWFPYmplY3RUeXBlLFxuICAgICAgcHJvcGVydGllczogaXRlcmF0ZVpvZE9iamVjdCh7XG4gICAgICAgIHpvZFJlZjogem9kUmVmIGFzIE9wZW5BcGlab2RBbnlPYmplY3QsXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIHVzZU91dHB1dCxcbiAgICAgICAgaGlkZURlZmluaXRpb25zOiBnZXRFeGNsdWRlZERlZmluaXRpb25zRnJvbVNjaGVtYShzY2hlbWFzKSxcbiAgICAgIH0pLFxuICAgICAgLi4ucmVxdWlyZWQsXG4gICAgICAuLi5hZGRpdGlvbmFsUHJvcGVydGllcyxcbiAgICAgIC4uLmhpZGVEZWZpbml0aW9ucyxcbiAgICB9LFxuICAgIHpvZFJlZi5kZXNjcmlwdGlvblxuICAgICAgPyB7IGRlc2NyaXB0aW9uOiB6b2RSZWYuZGVzY3JpcHRpb24sIGhpZGVEZWZpbml0aW9ucyB9XG4gICAgICA6IHt9LFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlY29yZCh7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RSZWNvcmQ+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIgYXMgU2NoZW1hT2JqZWN0VHlwZSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOlxuICAgICAgICB6b2RSZWYuX2RlZi52YWx1ZVR5cGUgaW5zdGFuY2VvZiB6LlpvZFVua25vd25cbiAgICAgICAgICA/IHt9XG4gICAgICAgICAgOiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi52YWx1ZVR5cGUsIHVzZU91dHB1dCksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlQmlnSW50KHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RCaWdJbnQ+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHsgdHlwZTogXCJpbnRlZ2VyXCIgYXMgU2NoZW1hT2JqZWN0VHlwZSwgZm9ybWF0OiBcImludDY0XCIgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbGVhbih7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbn06IFBhcnNpbmdBcmdzPHouWm9kQm9vbGVhbj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgeyB0eXBlOiBcImJvb2xlYW5cIiBhcyBTY2hlbWFPYmplY3RUeXBlIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZURhdGUoeyB6b2RSZWYsIHNjaGVtYXMgfTogUGFyc2luZ0FyZ3M8ei5ab2REYXRlPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7IHR5cGU6IFwic3RyaW5nXCIgYXMgU2NoZW1hT2JqZWN0VHlwZSwgZm9ybWF0OiBcImRhdGUtdGltZVwiIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU51bGwoeyB6b2RSZWYsIHNjaGVtYXMgfTogUGFyc2luZ0FyZ3M8ei5ab2ROdWxsPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VPcHRpb25hbCh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RPcHRpb25hbDxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLnVud3JhcCgpLCB1c2VPdXRwdXQpLFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VOdWxsYWJsZSh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2ROdWxsYWJsZTxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBzY2hlbWEgPSBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYudW53cmFwKCksIHVzZU91dHB1dClcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHsgLi4uc2NoZW1hLCB0eXBlOiBzY2hlbWEudHlwZSwgbnVsbGFibGU6IHRydWUgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVmYXVsdCh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2REZWZhdWx0PE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICBkZWZhdWx0OiB6b2RSZWYuX2RlZi5kZWZhdWx0VmFsdWUoKSxcbiAgICAgIC4uLmdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLmlubmVyVHlwZSwgdXNlT3V0cHV0KSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VBcnJheSh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RBcnJheTxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBjb25zdHJhaW50czogU2NoZW1hT2JqZWN0ID0ge31cbiAgaWYgKHpvZFJlZi5fZGVmLmV4YWN0TGVuZ3RoICE9IG51bGwpIHtcbiAgICBjb25zdHJhaW50cy5taW5JdGVtcyA9IHpvZFJlZi5fZGVmLmV4YWN0TGVuZ3RoLnZhbHVlXG4gICAgY29uc3RyYWludHMubWF4SXRlbXMgPSB6b2RSZWYuX2RlZi5leGFjdExlbmd0aC52YWx1ZVxuICB9XG5cbiAgaWYgKHpvZFJlZi5fZGVmLm1pbkxlbmd0aCAhPSBudWxsKVxuICAgIGNvbnN0cmFpbnRzLm1pbkl0ZW1zID0gem9kUmVmLl9kZWYubWluTGVuZ3RoLnZhbHVlXG4gIGlmICh6b2RSZWYuX2RlZi5tYXhMZW5ndGggIT0gbnVsbClcbiAgICBjb25zdHJhaW50cy5tYXhJdGVtcyA9IHpvZFJlZi5fZGVmLm1heExlbmd0aC52YWx1ZVxuXG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICB0eXBlOiBcImFycmF5XCIgYXMgU2NoZW1hT2JqZWN0VHlwZSxcbiAgICAgIGl0ZW1zOiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuZWxlbWVudCwgdXNlT3V0cHV0KSxcbiAgICAgIC4uLmNvbnN0cmFpbnRzLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWwoe1xuICBzY2hlbWFzLFxuICB6b2RSZWYsXG59OiBQYXJzaW5nQXJnczx6LlpvZExpdGVyYWw8T3BlbkFwaVpvZEFueT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IHR5cGVvZiB6b2RSZWYuX2RlZi52YWx1ZSBhcyBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiLFxuICAgICAgZW51bTogW3pvZFJlZi5fZGVmLnZhbHVlXSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VFbnVtKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RFbnVtPG5ldmVyPiB8IHouWm9kTmF0aXZlRW51bTxuZXZlcj4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IHR5cGVvZiBPYmplY3QudmFsdWVzKHpvZFJlZi5fZGVmLnZhbHVlcylbMF0gYXMgXCJzdHJpbmdcIiB8IFwibnVtYmVyXCIsXG4gICAgICBlbnVtOiBPYmplY3QudmFsdWVzKHpvZFJlZi5fZGVmLnZhbHVlcyksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlSW50ZXJzZWN0aW9uKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZEludGVyc2VjdGlvbjx6LlpvZFR5cGVBbnksIHouWm9kVHlwZUFueT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIGFsbE9mOiBbXG4gICAgICAgIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLmxlZnQsIHVzZU91dHB1dCksXG4gICAgICAgIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLnJpZ2h0LCB1c2VPdXRwdXQpLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VVbmlvbih7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RVbmlvbjxbei5ab2RUeXBlQW55LCAuLi56LlpvZFR5cGVBbnlbXV0+Pik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IGNvbnRlbnRzID0gem9kUmVmLl9kZWYub3B0aW9uc1xuICBpZiAoXG4gICAgY29udGVudHMucmVkdWNlKFxuICAgICAgKHByZXYsIGNvbnRlbnQpID0+IHByZXYgJiYgY29udGVudC5fZGVmLnR5cGVOYW1lID09PSBcIlpvZExpdGVyYWxcIixcbiAgICAgIHRydWVcbiAgICApXG4gICkge1xuICAgIC8vIHNwZWNpYWwgY2FzZSB0byB0cmFuc2Zvcm0gdW5pb25zIG9mIGxpdGVyYWxzIGludG8gZW51bXNcbiAgICBjb25zdCBsaXRlcmFscyA9IGNvbnRlbnRzIGFzIHVua25vd24gYXMgei5ab2RMaXRlcmFsPE9wZW5BcGlab2RBbnk+W11cbiAgICBjb25zdCB0eXBlID0gbGl0ZXJhbHMucmVkdWNlKFxuICAgICAgKHByZXYsIGNvbnRlbnQpID0+XG4gICAgICAgICFwcmV2IHx8IHByZXYgPT09IHR5cGVvZiBjb250ZW50Ll9kZWYudmFsdWVcbiAgICAgICAgICA/IHR5cGVvZiBjb250ZW50Ll9kZWYudmFsdWVcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBudWxsIGFzIG51bGwgfCBzdHJpbmdcbiAgICApXG5cbiAgICBpZiAodHlwZSkge1xuICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogdHlwZSBhcyBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiLFxuICAgICAgICAgIGVudW06IGxpdGVyYWxzLm1hcCgobGl0ZXJhbCkgPT4gbGl0ZXJhbC5fZGVmLnZhbHVlKSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgICAgICAuLi5zY2hlbWFzXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaXNOdWxsYWJsZSA9IGNvbnRlbnRzLnNvbWUoXG4gICAgKGNvbnRlbnQpID0+IGNvbnRlbnQuX2RlZi50eXBlTmFtZSA9PT0gXCJab2ROdWxsXCJcbiAgKVxuICBjb25zdCBub25OdWxsQ29udGVudHMgPSBjb250ZW50cy5maWx0ZXIoXG4gICAgKGNvbnRlbnQpID0+IGNvbnRlbnQuX2RlZi50eXBlTmFtZSAhPT0gXCJab2ROdWxsXCJcbiAgKVxuXG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICBvbmVPZjogbm9uTnVsbENvbnRlbnRzLm1hcCgoc2NoZW1hKSA9PiBnZW5lcmF0ZVNjaGVtYShzY2hlbWEsIHVzZU91dHB1dCkpLFxuICAgICAgLi4uKGlzTnVsbGFibGUgPyB7IG51bGxhYmxlOiB0cnVlIH0gOiB7fSksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGlzY3JpbWluYXRlZFVuaW9uKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczxcbiAgei5ab2REaXNjcmltaW5hdGVkVW5pb248c3RyaW5nLCB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbk9wdGlvbjxzdHJpbmc+W10+XG4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIGRpc2NyaW1pbmF0b3I6IHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiAoXG4gICAgICAgICAgem9kUmVmIGFzIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uPFxuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgei5ab2REaXNjcmltaW5hdGVkVW5pb25PcHRpb248c3RyaW5nPltdXG4gICAgICAgICAgPlxuICAgICAgICApLl9kZWYuZGlzY3JpbWluYXRvcixcbiAgICAgIH0sXG4gICAgICBvbmVPZjogQXJyYXkuZnJvbShcbiAgICAgICAgKFxuICAgICAgICAgIHpvZFJlZiBhcyB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbjxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uT3B0aW9uPHN0cmluZz5bXVxuICAgICAgICAgID5cbiAgICAgICAgKS5fZGVmLm9wdGlvbnMudmFsdWVzKClcbiAgICAgICkubWFwKChzY2hlbWEpID0+IGdlbmVyYXRlU2NoZW1hKHNjaGVtYSwgdXNlT3V0cHV0KSksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlTmV2ZXIoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZE5ldmVyPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZSh7IHJlYWRPbmx5OiB0cnVlIH0sIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gcGFyc2VCcmFuZGVkKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RCcmFuZGVkPHouWm9kQW55LCBzdHJpbmc+Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi50eXBlKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gY2F0Y2hBbGxQYXJzZXIoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczxab2RUeXBlQW55Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksIC4uLnNjaGVtYXMpXG59XG5cbmZ1bmN0aW9uIHBhcnNlUGlwZWxpbmUoe1xuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbn06IFBhcnNpbmdBcmdzPHouWm9kUGlwZWxpbmU8bmV2ZXIsIG5ldmVyPj4pOiBTY2hlbWFPYmplY3Qge1xuICBpZiAodXNlT3V0cHV0KSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLm91dCwgdXNlT3V0cHV0KVxuICB9XG4gIHJldHVybiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5pbiwgdXNlT3V0cHV0KVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlYWRvbmx5KHtcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZFJlYWRvbmx5PHouWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYuaW5uZXJUeXBlLCB1c2VPdXRwdXQpLFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuY29uc3Qgd29ya2VyTWFwID0ge1xuICBab2RPYmplY3Q6IHBhcnNlT2JqZWN0LFxuICBab2RSZWNvcmQ6IHBhcnNlUmVjb3JkLFxuICBab2RTdHJpbmc6IHBhcnNlU3RyaW5nLFxuICBab2ROdW1iZXI6IHBhcnNlTnVtYmVyLFxuICBab2RCaWdJbnQ6IHBhcnNlQmlnSW50LFxuICBab2RCb29sZWFuOiBwYXJzZUJvb2xlYW4sXG4gIFpvZERhdGU6IHBhcnNlRGF0ZSxcbiAgWm9kTnVsbDogcGFyc2VOdWxsLFxuICBab2RPcHRpb25hbDogcGFyc2VPcHRpb25hbCxcbiAgWm9kTnVsbGFibGU6IHBhcnNlTnVsbGFibGUsXG4gIFpvZERlZmF1bHQ6IHBhcnNlRGVmYXVsdCxcbiAgWm9kQXJyYXk6IHBhcnNlQXJyYXksXG4gIFpvZExpdGVyYWw6IHBhcnNlTGl0ZXJhbCxcbiAgWm9kRW51bTogcGFyc2VFbnVtLFxuICBab2ROYXRpdmVFbnVtOiBwYXJzZUVudW0sXG4gIFpvZFRyYW5zZm9ybWVyOiBwYXJzZVRyYW5zZm9ybWF0aW9uLFxuICBab2RFZmZlY3RzOiBwYXJzZVRyYW5zZm9ybWF0aW9uLFxuICBab2RJbnRlcnNlY3Rpb246IHBhcnNlSW50ZXJzZWN0aW9uLFxuICBab2RVbmlvbjogcGFyc2VVbmlvbixcbiAgWm9kRGlzY3JpbWluYXRlZFVuaW9uOiBwYXJzZURpc2NyaW1pbmF0ZWRVbmlvbixcbiAgWm9kTmV2ZXI6IHBhcnNlTmV2ZXIsXG4gIFpvZEJyYW5kZWQ6IHBhcnNlQnJhbmRlZCxcbiAgLy8gVE9ETyBUcmFuc2Zvcm0gdGhlIHJlc3QgdG8gc2NoZW1hc1xuICBab2RVbmRlZmluZWQ6IGNhdGNoQWxsUGFyc2VyLFxuICAvLyBUT0RPOiBgcHJlZml4SXRlbXNgIGlzIGFsbG93ZWQgaW4gT3BlbkFQSSAzLjEgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHR1cGxlc1xuICBab2RUdXBsZTogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZE1hcDogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZEZ1bmN0aW9uOiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kTGF6eTogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZFByb21pc2U6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RBbnk6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RVbmtub3duOiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kVm9pZDogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZFBpcGVsaW5lOiBwYXJzZVBpcGVsaW5lLFxuICBab2RSZWFkb25seTogcGFyc2VSZWFkb25seSxcbn1cbnR5cGUgV29ya2VyS2V5cyA9IGtleW9mIHR5cGVvZiB3b3JrZXJNYXBcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU2NoZW1hKFxuICB6b2RSZWY6IE9wZW5BcGlab2RBbnksXG4gIHVzZU91dHB1dD86IGJvb2xlYW5cbik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IHsgbWV0YU9wZW5BcGkgPSB7fSB9ID0gem9kUmVmXG4gIGNvbnN0IHNjaGVtYXM6IEFuYXRpbmVTY2hlbWFPYmplY3RbXSA9IFtcbiAgICAuLi4oQXJyYXkuaXNBcnJheShtZXRhT3BlbkFwaSkgPyBtZXRhT3BlbkFwaSA6IFttZXRhT3BlbkFwaV0pLFxuICBdXG4gIHRyeSB7XG4gICAgY29uc3QgdHlwZU5hbWUgPSB6b2RSZWYuX2RlZi50eXBlTmFtZSBhcyBXb3JrZXJLZXlzXG4gICAgaWYgKHR5cGVOYW1lIGluIHdvcmtlck1hcCkge1xuICAgICAgcmV0dXJuIHdvcmtlck1hcFt0eXBlTmFtZV0oe1xuICAgICAgICB6b2RSZWY6IHpvZFJlZiBhcyBuZXZlcixcbiAgICAgICAgc2NoZW1hcyxcbiAgICAgICAgdXNlT3V0cHV0LFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gY2F0Y2hBbGxQYXJzZXIoeyB6b2RSZWYsIHNjaGVtYXMgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgcmV0dXJuIGNhdGNoQWxsUGFyc2VyKHsgem9kUmVmLCBzY2hlbWFzIH0pXG4gIH1cbn1cbiIsICIvKipcbiAqIEZyb250LU1hdHRlclxuICpcbiAqIFZlbmRvcmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2p4c29uL2Zyb250LW1hdHRlclxuICpcbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSBKYXNvbiBDYW1wYmVsbCAoXCJBdXRob3JcIilcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IGxvYWQgfSBmcm9tIFwianMteWFtbFwiXG5jb25zdCBvcHRpb25hbEJ5dGVPcmRlck1hcmsgPSBcIlxcXFx1ZmVmZj9cIlxuY29uc3QgcGxhdGZvcm0gPSB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiA/IHByb2Nlc3MucGxhdGZvcm0gOiBcIlwiXG5jb25zdCBwYXR0ZXJuID1cbiAgXCJeKFwiICtcbiAgb3B0aW9uYWxCeXRlT3JkZXJNYXJrICtcbiAgXCIoPSB5YW1sID18LS0tKVwiICtcbiAgXCIkKFtcXFxcc1xcXFxTXSo/KVwiICtcbiAgXCJeKD86XFxcXDJ8XFxcXC5cXFxcLlxcXFwuKVxcXFxzKlwiICtcbiAgXCIkXCIgK1xuICAocGxhdGZvcm0gPT09IFwid2luMzJcIiA/IFwiXFxcXHI/XCIgOiBcIlwiKSArXG4gIFwiKD86XFxcXG4pPylcIlxuLy8gTk9URTogSWYgdGhpcyBwYXR0ZXJuIHVzZXMgdGhlICdnJyBmbGFnIHRoZSBgcmVnZXhgIHZhcmlhYmxlIGRlZmluaXRpb24gd2lsbFxuLy8gbmVlZCB0byBiZSBtb3ZlZCBkb3duIGludG8gdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSBpdC5cbmNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBcIm1cIilcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJvbnRNYXR0ZXIoXG4gIHN0cmluZzogc3RyaW5nLFxuICBvcHRpb25zID0ge31cbik6IHsgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGJvZHk6IHN0cmluZzsgYm9keUJlZ2luOiBudW1iZXIgfSB7XG4gIHN0cmluZyA9IHN0cmluZyB8fCBcIlwiXG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IHsgYWxsb3dVbnNhZmU6IGZhbHNlIH1cbiAgb3B0aW9ucyA9XG4gICAgb3B0aW9ucyBpbnN0YW5jZW9mIE9iamVjdFxuICAgICAgPyB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH1cbiAgICAgIDogZGVmYXVsdE9wdGlvbnNcbiAgdmFyIGxpbmVzID0gc3RyaW5nLnNwbGl0KC8oXFxyP1xcbikvKVxuICBpZiAobGluZXNbMF0gJiYgLz0geWFtbCA9fC0tLS8udGVzdChsaW5lc1swXSkpIHtcbiAgICByZXR1cm4gcGFyc2Uoc3RyaW5nKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIGJvZHk6IHN0cmluZyxcbiAgICAgIGJvZHlCZWdpbjogMSxcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZUxvY2F0aW9uKG1hdGNoOiBSZWdFeHBFeGVjQXJyYXksIGJvZHk6IHN0cmluZykge1xuICB2YXIgbGluZSA9IDFcbiAgdmFyIHBvcyA9IGJvZHkuaW5kZXhPZihcIlxcblwiKVxuICB2YXIgb2Zmc2V0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcblxuICB3aGlsZSAocG9zICE9PSAtMSkge1xuICAgIGlmIChwb3MgPj0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbGluZVxuICAgIH1cbiAgICBsaW5lKytcbiAgICBwb3MgPSBib2R5LmluZGV4T2YoXCJcXG5cIiwgcG9zICsgMSlcbiAgfVxuXG4gIHJldHVybiBsaW5lXG59XG5cbmZ1bmN0aW9uIHBhcnNlKHN0cmluZzogc3RyaW5nKToge1xuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBib2R5OiBzdHJpbmdcbiAgYm9keUJlZ2luOiBudW1iZXJcbn0ge1xuICB2YXIgbWF0Y2ggPSByZWdleC5leGVjKHN0cmluZylcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIGJvZHk6IHN0cmluZyxcbiAgICAgIGJvZHlCZWdpbjogMSxcbiAgICB9XG4gIH1cblxuICB2YXIgeWFtbCA9IG1hdGNoW21hdGNoLmxlbmd0aCAtIDFdLnJlcGxhY2UoL15cXHMrfFxccyskL2csIFwiXCIpXG4gIHZhciBhdHRyaWJ1dGVzID0gKGxvYWQoeWFtbCkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHZhciBib2R5ID0gc3RyaW5nLnJlcGxhY2UobWF0Y2hbMF0sIFwiXCIpXG4gIHZhciBsaW5lID0gY29tcHV0ZUxvY2F0aW9uKG1hdGNoLCBzdHJpbmcpXG5cbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxuICAgIGJvZHk6IGJvZHksXG4gICAgYm9keUJlZ2luOiBsaW5lLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RnJvbnRNYXR0ZXIoc3RyaW5nOiBzdHJpbmcpIHtcbiAgc3RyaW5nID0gc3RyaW5nIHx8IFwiXCJcblxuICByZXR1cm4gcmVnZXgudGVzdChzdHJpbmcpXG59XG4iLCAiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiXG5cbmZ1bmN0aW9uIGZpbmRLZXlJbk9iaihvYmo6IGFueSwgdmFsdWU6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICBsZXQgcmVzdWx0S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBfLmZvck93bihvYmosICh2LCBrKSA9PiB7XG4gICAgaWYgKF8uaXNPYmplY3QodikgJiYgXy5pc01hdGNoKHYsIHZhbHVlKSkge1xuICAgICAgcmVzdWx0S2V5ID0ga1xuICAgICAgLy8gU3RvcCB0aGUgaXRlcmF0aW9uXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0pXG4gIHJldHVybiByZXN1bHRLZXlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtYmVkU2NoZW1hUmVmZXJlbmNlcyhvYmoxOiBhbnksIG9iajI6IGFueSk6IGFueSB7XG4gIHJldHVybiBfLnRyYW5zZm9ybShvYmoxLCAocmVzdWx0LCB2YWx1ZSwga2V5KSA9PiB7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICBjb25zdCBtYXRjaGluZ0tleSA9IGZpbmRLZXlJbk9iaihvYmoyLCB2YWx1ZSlcbiAgICAgIGlmIChtYXRjaGluZ0tleSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHtcbiAgICAgICAgICAkcmVmOiBgIy9jb21wb25lbnRzL3NjaGVtYXMvJHttYXRjaGluZ0tleX1gLFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IGVtYmVkU2NoZW1hUmVmZXJlbmNlcyh2YWx1ZSwgb2JqMilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfSlcbn1cbiIsICJpbXBvcnQgeyBSb3V0ZVNwZWMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9GZXJuU2RrTWV0aG9kTmFtZShwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpXG4gIGNvbnN0IGxhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV1cbiAgaWYgKGxhc3RQYXJ0LnN0YXJ0c1dpdGgoXCJbXCIpICYmIGxhc3RQYXJ0LmVuZHNXaXRoKFwiXVwiKSkge1xuICAgIC8vIENvbnZlcnQgW3BhcmFtXSB0byBieV9wYXJhbVxuICAgIGNvbnN0IHBhcmFtID0gbGFzdFBhcnQuc2xpY2UoMSwgLTEpXG4gICAgcmV0dXJuIGBieV8ke3BhcmFtfWBcbiAgfVxuXG4gIHJldHVybiBsYXN0UGFydFxufVxuXG4vLyBmZXJuIGRvY3M6IGh0dHBzOi8vYnVpbGR3aXRoZmVybi5jb20vZG9jcy9zcGVjL2V4dGVuc2lvbnNcbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtHcm91cE5hbWUocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICByZXR1cm4gcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMSlcbn1cblxuZnVuY3Rpb24gZ2V0RmVyblNka01ldGFkYXRhKFxuICBwYXRoOiBzdHJpbmcsXG4gIHNka1JldHVyblZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW11cbik6XG4gIHwge1xuICAgICAgXCJ4LWZlcm4taWdub3JlXCI6IHRydWVcbiAgICB9XG4gIHwge1xuICAgICAgXCJ4LWZlcm4tc2RrLWdyb3VwLW5hbWVcIjogc3RyaW5nW11cbiAgICAgIFwieC1mZXJuLXNkay1tZXRob2QtbmFtZVwiOiBzdHJpbmdcbiAgICB9IHtcbiAgaWYgKHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIikubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlLFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgXCJ4LWZlcm4tc2RrLWdyb3VwLW5hbWVcIjogdHJhbnNmb3JtUGF0aFRvRmVyblNka0dyb3VwTmFtZShwYXRoKSxcbiAgICBcIngtZmVybi1zZGstbWV0aG9kLW5hbWVcIjogdHJhbnNmb3JtUGF0aFRvRmVyblNka01ldGhvZE5hbWUocGF0aCksXG4gICAgLi4uKHNka1JldHVyblZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgICBcIngtZmVybi1zZGstcmV0dXJuLXZhbHVlXCI6IHNka1JldHVyblZhbHVlLFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFwTWV0aG9kc1RvRmVyblNka01ldGFkYXRhKHtcbiAgbWV0aG9kcyxcbiAgcGF0aCxcbiAgc2RrUmV0dXJuVmFsdWUsXG59OiB7XG4gIG1ldGhvZHM6IFJvdXRlU3BlY1tcIm1ldGhvZHNcIl1cbiAgcGF0aDogc3RyaW5nXG4gIHNka1JldHVyblZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW11cbn0pIHtcbiAgY29uc3QgZmVyblNka01ldGFkYXRhID0gZ2V0RmVyblNka01ldGFkYXRhKHBhdGgsIHNka1JldHVyblZhbHVlKVxuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW21ldGhvZHNbMF1dOiBmZXJuU2RrTWV0YWRhdGEsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWFwcGVkTWV0aG9kcyA9IHt9XG5cbiAgbWV0aG9kcy5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICBpZiAobWV0aG9kID09PSBcIlBPU1RcIikge1xuICAgICAgbWFwcGVkTWV0aG9kc1ttZXRob2RdID0gZmVyblNka01ldGFkYXRhXG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcHBlZE1ldGhvZHNbbWV0aG9kXSA9IHtcbiAgICAgICAgXCJ4LWZlcm4taWdub3JlXCI6IHRydWUsXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBtYXBwZWRNZXRob2RzXG59XG4iLCAiaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHsgcGFyc2VSb3V0ZXNJblBhY2thZ2UgfSBmcm9tIFwiLi4vbGliL3BhcnNlLXJvdXRlcy1pbi1wYWNrYWdlXCJcbmltcG9ydCB7IHpvZFRvVHMsIHByaW50Tm9kZSB9IGZyb20gXCIuLi9saWIvem9kLXRvLXRzXCJcbmltcG9ydCBwcmV0dGllciBmcm9tIFwicHJldHRpZXJcIlxuaW1wb3J0IHsgeiwgWm9kRWZmZWN0cywgWm9kT3B0aW9uYWwgfSBmcm9tIFwiem9kXCJcblxuaW50ZXJmYWNlIEdlbmVyYXRlUm91dGVUeXBlc09wdHMge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgb3V0cHV0RmlsZT86IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgb25seSByb3V0ZXMgdGhhdCByZXR1cm4gdHJ1ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgdHlwZXMuXG4gICAqL1xuICBmaWx0ZXJSb3V0ZXM/OiAocm91dGU6IHN0cmluZykgPT4gYm9vbGVhblxuICAvKipcbiAgICogQnkgZGVmYXVsdCwgcm91dGVzIHRoYXQgaGF2ZSBgZXhjbHVkZUZyb21PcGVuQXBpYCBzZXQgdG8gdHJ1ZSB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGdlbmVyYXRlZCB0eXBlcy5cbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSB0byBpbmNsdWRlIHRoZW0uXG4gICAqL1xuICBpbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVSb3V0ZVR5cGVzID0gYXN5bmMgKG9wdHM6IEdlbmVyYXRlUm91dGVUeXBlc09wdHMpID0+IHtcbiAgY29uc3QgZmlsZXBhdGhUb1JvdXRlID0gYXdhaXQgcGFyc2VSb3V0ZXNJblBhY2thZ2Uob3B0cylcblxuICBjb25zdCBzb3J0ZWRSb3V0ZXMgPSBBcnJheS5mcm9tKGZpbGVwYXRoVG9Sb3V0ZS5lbnRyaWVzKCkpLnNvcnQoKGEsIGIpID0+XG4gICAgYVsxXS5yb3V0ZS5sb2NhbGVDb21wYXJlKGJbMV0ucm91dGUpXG4gIClcbiAgY29uc3QgZmlsdGVyZWRSb3V0ZXMgPSBzb3J0ZWRSb3V0ZXMuZmlsdGVyKFxuICAgIChbXywgeyByb3V0ZSB9XSkgPT4gIW9wdHMuZmlsdGVyUm91dGVzIHx8IG9wdHMuZmlsdGVyUm91dGVzKHJvdXRlKVxuICApXG5cbiAgLy8gVE9ETyB3aGVuIGxlc3MgbGF6eSwgdXNlIHRzLW1vcnBoIGZvciBiZXR0ZXIgZ2VuZXJhdGlvblxuICBjb25zdCByb3V0ZURlZnM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBbXywgeyByb3V0ZSwgcm91dGVTcGVjLCBzZXR1cFBhcmFtcyB9XSBvZiBmaWx0ZXJlZFJvdXRlcykge1xuICAgIGNvbnN0IHF1ZXJ5S2V5cyA9IE9iamVjdC5rZXlzKHJvdXRlU3BlYy5xdWVyeVBhcmFtcz8uc2hhcGUgPz8ge30pXG4gICAgY29uc3QgcGF0aFBhcmFtZXRlcnMgPSBxdWVyeUtleXMuZmlsdGVyKChrZXkpID0+IHJvdXRlLmluY2x1ZGVzKGBbJHtrZXl9XWApKVxuXG4gICAgLy8gcXVlcnlQYXJhbXMgbWlnaHQgYmUgYSBab2RFZmZlY3RzIG9yIFpvZE9wdGlvbmFsIGluIHNvbWUgY2FzZXNcbiAgICBsZXQgcXVlcnlQYXJhbXMgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXNcbiAgICB3aGlsZSAoXG4gICAgICBxdWVyeVBhcmFtcyAmJlxuICAgICAgKFwic291cmNlVHlwZVwiIGluIHF1ZXJ5UGFyYW1zIHx8IFwidW53cmFwXCIgaW4gcXVlcnlQYXJhbXMpXG4gICAgKSB7XG4gICAgICBpZiAoXCJzb3VyY2VUeXBlXCIgaW4gcXVlcnlQYXJhbXMpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMgPSAocXVlcnlQYXJhbXMgYXMgdW5rbm93biBhcyBab2RFZmZlY3RzPGFueT4pLnNvdXJjZVR5cGUoKVxuICAgICAgfSBlbHNlIGlmIChcInVud3JhcFwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zIGFzIHVua25vd24gYXMgWm9kT3B0aW9uYWw8YW55PikudW53cmFwKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocXVlcnlQYXJhbXMgJiYgXCJvbWl0XCIgaW4gcXVlcnlQYXJhbXMpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXMub21pdChcbiAgICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKHBhdGhQYXJhbWV0ZXJzLm1hcCgocGFyYW0pID0+IFtwYXJhbSwgdHJ1ZV0pKVxuICAgICAgKVxuICAgIH1cblxuICAgIHJvdXRlRGVmcy5wdXNoKFxuICAgICAgYFxuXCIke3JvdXRlfVwiOiB7XG4gIHJvdXRlOiBcIiR7cm91dGV9XCIsXG4gIG1ldGhvZDogJHtyb3V0ZVNwZWMubWV0aG9kcy5tYXAoKG0pID0+IGBcIiR7bX1cImApLmpvaW4oXCIgfCBcIil9LFxuICBxdWVyeVBhcmFtczogJHtxdWVyeVBhcmFtcyA/IHByaW50Tm9kZSh6b2RUb1RzKHF1ZXJ5UGFyYW1zKS5ub2RlKSA6IFwie31cIn0sXG4gIGpzb25Cb2R5OiAke1xuICAgIHJvdXRlU3BlYy5qc29uQm9keSA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5qc29uQm9keSkubm9kZSkgOiBcInt9XCJcbiAgfSxcbiAgY29tbW9uUGFyYW1zOiAke1xuICAgIHJvdXRlU3BlYy5jb21tb25QYXJhbXNcbiAgICAgID8gcHJpbnROb2RlKHpvZFRvVHMocm91dGVTcGVjLmNvbW1vblBhcmFtcykubm9kZSlcbiAgICAgIDogXCJ7fVwiXG4gIH0sXG4gIGZvcm1EYXRhOiAke1xuICAgIHJvdXRlU3BlYy5mb3JtRGF0YSA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5mb3JtRGF0YSkubm9kZSkgOiBcInt9XCJcbiAgfSxcbiAganNvblJlc3BvbnNlOiAke1xuICAgIHJvdXRlU3BlYy5qc29uUmVzcG9uc2VcbiAgICAgID8gcHJpbnROb2RlKFxuICAgICAgICAgIHpvZFRvVHMoXG4gICAgICAgICAgICBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1cyAmJlxuICAgICAgICAgICAgICByb3V0ZVNwZWMuanNvblJlc3BvbnNlIGluc3RhbmNlb2Ygei5ab2RPYmplY3RcbiAgICAgICAgICAgICAgPyByb3V0ZVNwZWMuanNvblJlc3BvbnNlLmV4dGVuZCh7IG9rOiB6LmJvb2xlYW4oKSB9KVxuICAgICAgICAgICAgICA6IHJvdXRlU3BlYy5qc29uUmVzcG9uc2VcbiAgICAgICAgICApLm5vZGVcbiAgICAgICAgKVxuICAgICAgOiBcInt9XCJcbiAgfVxufWAudHJpbSgpXG4gICAgKVxuICB9XG4gIGNvbnN0IHJvdXRlRGVmU3RyID0gcm91dGVEZWZzLmpvaW4oXCIsXFxuXCIpXG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IHByZXR0aWVyLmZvcm1hdChcbiAgICBgZXhwb3J0IHR5cGUgUm91dGVzID0ge1xuJHtyb3V0ZURlZlN0cn1cbn1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXNwb25zZTxQYXRoIGV4dGVuZHMga2V5b2YgUm91dGVzPiA9XG4gIFJvdXRlc1tQYXRoXVtcImpzb25SZXNwb25zZVwiXVxuXG5leHBvcnQgdHlwZSBSb3V0ZVJlcXVlc3RCb2R5PFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wianNvbkJvZHlcIl0gJiBSb3V0ZXNbUGF0aF1bXCJjb21tb25QYXJhbXNcIl1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXF1ZXN0UGFyYW1zPFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wicXVlcnlQYXJhbXNcIl0gJiBSb3V0ZXNbUGF0aF1bXCJjb21tb25QYXJhbXNcIl1cbmAudHJpbSgpLFxuICAgIHsgc2VtaTogZmFsc2UsIHBhcnNlcjogXCJ0eXBlc2NyaXB0XCIgfVxuICApXG5cbiAgaWYgKG9wdHMub3V0cHV0RmlsZSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvcHRzLm91dHB1dEZpbGUsIG91dHB1dClcbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cbiIsICIvKipcbiAqIFpvZCBUbyBUU1xuICpcbiAqIFZlbmRvcmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NhY2hpbnJhamEvem9kLXRvLXRzXG4gKlxuICogTUlUIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjEgU2FjaGluIFJhamFcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB0cyBmcm9tIFwidHlwZXNjcmlwdFwiXG5pbXBvcnQgeyBab2RUeXBlLCBab2RUeXBlQW55IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBwYXJzZUZyb250TWF0dGVyLCB0ZXN0RnJvbnRNYXR0ZXIgfSBmcm9tIFwiLi9mcm9udC1tYXR0ZXJcIlxuaW1wb3J0IGRlZGVudCBmcm9tIFwiZGVkZW50XCJcblxuY29uc3QgeyBmYWN0b3J5OiBmLCBTeW50YXhLaW5kLCBTY3JpcHRLaW5kLCBTY3JpcHRUYXJnZXQsIEVtaXRIaW50IH0gPSB0c1xuXG5jb25zdCBtYXliZUlkZW50aWZpZXJUb1R5cGVSZWZlcmVuY2UgPSAoXG4gIGlkZW50aWZpZXI6IHRzLklkZW50aWZpZXIgfCB0cy5UeXBlTm9kZVxuKSA9PiB7XG4gIGlmICh0cy5pc0lkZW50aWZpZXIoaWRlbnRpZmllcikpIHtcbiAgICByZXR1cm4gZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShpZGVudGlmaWVyKVxuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJcbn1cblxuY29uc3QgY3JlYXRlVHlwZVJlZmVyZW5jZUZyb21TdHJpbmcgPSAoaWRlbnRpZmllcjogc3RyaW5nKSA9PlxuICBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihpZGVudGlmaWVyKSlcblxuY29uc3QgY3JlYXRlVW5rbm93bktleXdvcmROb2RlID0gKCkgPT5cbiAgZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5Vbmtub3duS2V5d29yZClcblxuZXhwb3J0IGNvbnN0IHByaW50Tm9kZSA9IChcbiAgbm9kZTogdHMuTm9kZSxcbiAgcHJpbnRlck9wdGlvbnM/OiB0cy5QcmludGVyT3B0aW9uc1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoXG4gICAgXCJwcmludC50c1wiLFxuICAgIFwiXCIsXG4gICAgU2NyaXB0VGFyZ2V0LkxhdGVzdCxcbiAgICBmYWxzZSxcbiAgICBTY3JpcHRLaW5kLlRTXG4gIClcbiAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIocHJpbnRlck9wdGlvbnMpXG4gIHJldHVybiBwcmludGVyLnByaW50Tm9kZShFbWl0SGludC5VbnNwZWNpZmllZCwgbm9kZSwgc291cmNlRmlsZSlcbn1cblxuY29uc3QgaWRlbnRpZmllclJFID0gL15bJEEtWl9hLXpdW1xcdyRdKiQvXG5cbmNvbnN0IGdldElkZW50aWZpZXJPclN0cmluZ0xpdGVyYWwgPSAoc3RyaW5nXzogc3RyaW5nKSA9PiB7XG4gIGlmIChpZGVudGlmaWVyUkUudGVzdChzdHJpbmdfKSkge1xuICAgIHJldHVybiBmLmNyZWF0ZUlkZW50aWZpZXIoc3RyaW5nXylcbiAgfVxuXG4gIHJldHVybiBmLmNyZWF0ZVN0cmluZ0xpdGVyYWwoc3RyaW5nXylcbn1cblxuY29uc3QgYWRkSnNEb2NDb21tZW50ID0gKG5vZGU6IHRzLk5vZGUsIHRleHQ6IHN0cmluZykgPT4ge1xuICBjb25zdCB7IGRlc2NyaXB0aW9uLCBkZXByZWNhdGVkIH0gPSBwYXJzZURlc2NyaXB0aW9uKHRleHQpXG5cbiAgbGV0IGNvbW1lbnQgPSBgKiAke2Rlc2NyaXB0aW9ufWBcbiAgaWYgKGRlcHJlY2F0ZWQpIHtcbiAgICBjb21tZW50ICs9IGBcXG4gKiBAZGVwcmVjYXRlZCAke1xuICAgICAgdHlwZW9mIGRlcHJlY2F0ZWQgPT09IFwic3RyaW5nXCIgPyBkZXByZWNhdGVkIDogXCJcIlxuICAgIH1gXG4gIH0gZWxzZSB7XG4gICAgY29tbWVudCArPSBgIGBcbiAgfVxuXG4gIHRzLmFkZFN5bnRoZXRpY0xlYWRpbmdDb21tZW50KFxuICAgIG5vZGUsXG4gICAgU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhLFxuICAgIGNvbW1lbnQsXG4gICAgdHJ1ZVxuICApXG59XG5cbnR5cGUgUGFyc2VkRGVzY3JpcHRpb24gPSB7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgZGVwcmVjYXRlZD86IGJvb2xlYW4gfCBzdHJpbmdcbiAgW2tleTogc3RyaW5nXTogdW5rbm93blxufVxuXG5mdW5jdGlvbiBwYXJzZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQYXJzZWREZXNjcmlwdGlvbiB7XG4gIGlmICghZGVzY3JpcHRpb24pXG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgIH1cbiAgY29uc3QgdHJpbW1lZERlc2NyaXB0aW9uID0gZGVkZW50KGRlc2NyaXB0aW9uKVxuICBpZiAoIXRlc3RGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pKSByZXR1cm4geyBkZXNjcmlwdGlvbiB9XG4gIGNvbnN0IHsgYXR0cmlidXRlcywgYm9keSB9ID0gcGFyc2VGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pXG4gIGNvbnN0IG91dHB1dDogUGFyc2VkRGVzY3JpcHRpb24gPSB7XG4gICAgZGVzY3JpcHRpb246IGJvZHkudHJpbSgpLFxuICB9XG4gIGlmICh0eXBlb2YgYXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIiAmJiBhdHRyaWJ1dGVzICE9PSBudWxsKSB7XG4gICAgaWYgKFwiZGVwcmVjYXRlZFwiIGluIGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5kZXByZWNhdGVkKSB7XG4gICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMuZGVwcmVjYXRlZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgb3V0cHV0LmRlcHJlY2F0ZWQgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgb3V0cHV0LmRlcHJlY2F0ZWQgPVxuICAgICAgICAgIGF0dHJpYnV0ZXMuZGVwcmVjYXRlZC5sZW5ndGggPiAwID8gYXR0cmlidXRlcy5kZXByZWNhdGVkIDogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJkZXNjcmlwdGlvblwiIHx8IGtleSA9PT0gXCJkZXByZWNhdGVkXCIpIGNvbnRpbnVlXG4gICAgICBvdXRwdXRba2V5XSA9IHZhbHVlXG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRwdXRcbn1cblxudHlwZSBMaXRlcmFsVHlwZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW5cblxudHlwZSBab2RUb1RzT3B0aW9ucyA9IHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBgbmF0aXZlRW51bXNgIGluc3RlYWQgKi9cbiAgcmVzb2x2ZU5hdGl2ZUVudW1zPzogYm9vbGVhblxuICBuYXRpdmVFbnVtcz86IFwiaWRlbnRpZmllclwiIHwgXCJyZXNvbHZlXCIgfCBcInVuaW9uXCJcbn1cblxuY29uc3QgcmVzb2x2ZU9wdGlvbnMgPSAocmF3PzogWm9kVG9Uc09wdGlvbnMpID0+IHtcbiAgY29uc3QgcmVzb2x2ZWQgPSB7XG4gICAgbmF0aXZlRW51bXM6IHJhdz8ucmVzb2x2ZU5hdGl2ZUVudW1zID8gXCJyZXNvbHZlXCIgOiBcImlkZW50aWZpZXJcIixcbiAgfVxuXG4gIHJldHVybiB7IC4uLnJlc29sdmVkLCAuLi5yYXcgfVxufVxuXG50eXBlIFJlc29sdmVkWm9kVG9Uc09wdGlvbnMgPSBSZXR1cm5UeXBlPHR5cGVvZiByZXNvbHZlT3B0aW9ucz5cblxudHlwZSBab2RUb1RzU3RvcmUgPSB7XG4gIG5hdGl2ZUVudW1zOiB0cy5FbnVtRGVjbGFyYXRpb25bXVxufVxuXG50eXBlIFpvZFRvVHNSZXR1cm4gPSB7XG4gIG5vZGU6IHRzLlR5cGVOb2RlXG4gIHN0b3JlOiBab2RUb1RzU3RvcmVcbn1cblxudHlwZSBHZXRUeXBlRnVuY3Rpb24gPSAoXG4gIHR5cGVzY3JpcHQ6IHR5cGVvZiB0cyxcbiAgaWRlbnRpZmllcjogc3RyaW5nLFxuICBvcHRpb25zOiBSZXNvbHZlZFpvZFRvVHNPcHRpb25zXG4pID0+IHRzLklkZW50aWZpZXIgfCB0cy5UeXBlTm9kZVxuXG50eXBlIEdldFR5cGUgPSB7IF9kZWY6IHsgZ2V0VHlwZT86IEdldFR5cGVGdW5jdGlvbiB9IH1cblxuY29uc3QgY2FsbEdldFR5cGUgPSAoXG4gIHpvZDogWm9kVHlwZUFueSxcbiAgaWRlbnRpZmllcjogc3RyaW5nLFxuICBvcHRpb25zOiBSZXNvbHZlZFpvZFRvVHNPcHRpb25zXG4pID0+IHtcbiAgbGV0IHR5cGU6IFJldHVyblR5cGU8R2V0VHlwZUZ1bmN0aW9uPiB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0IGdldFR5cGVTY2hlbWEgPSB6b2QgYXMgR2V0VHlwZVxuICAvLyB0aGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhY2Nlc3NpbmcgJ3R5cGUnXG4gIGlmIChnZXRUeXBlU2NoZW1hLl9kZWYuZ2V0VHlwZSlcbiAgICB0eXBlID0gZ2V0VHlwZVNjaGVtYS5fZGVmLmdldFR5cGUodHMsIGlkZW50aWZpZXIsIG9wdGlvbnMpXG4gIHJldHVybiB0eXBlXG59XG5cbmV4cG9ydCBjb25zdCB6b2RUb1RzID0gKFxuICB6b2Q6IFpvZFR5cGVBbnksXG4gIGlkZW50aWZpZXI/OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBab2RUb1RzT3B0aW9uc1xuKTogWm9kVG9Uc1JldHVybiA9PiB7XG4gIGlmICghKHpvZCBpbnN0YW5jZW9mIFpvZFR5cGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5vZGU6IGNyZWF0ZVVua25vd25LZXl3b3JkTm9kZSgpLFxuICAgICAgc3RvcmU6IHsgbmF0aXZlRW51bXM6IFtdIH0sXG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc29sdmVkSWRlbnRpZmllciA9IGlkZW50aWZpZXIgPz8gXCJJZGVudGlmaWVyXCJcblxuICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlT3B0aW9ucyhvcHRpb25zKVxuXG4gIGNvbnN0IHN0b3JlOiBab2RUb1RzU3RvcmUgPSB7IG5hdGl2ZUVudW1zOiBbXSB9XG5cbiAgY29uc3Qgbm9kZSA9IHpvZFRvVHNOb2RlKHpvZCwgcmVzb2x2ZWRJZGVudGlmaWVyLCBzdG9yZSwgcmVzb2x2ZWRPcHRpb25zKVxuXG4gIHJldHVybiB7IG5vZGUsIHN0b3JlIH1cbn1cblxuY29uc3Qgem9kVG9Uc05vZGUgPSAoXG4gIHpvZDogWm9kVHlwZUFueSxcbiAgaWRlbnRpZmllcjogc3RyaW5nLFxuICBzdG9yZTogWm9kVG9Uc1N0b3JlLFxuICBvcHRpb25zOiBSZXNvbHZlZFpvZFRvVHNPcHRpb25zXG4pID0+IHtcbiAgY29uc3QgdHlwZU5hbWUgPSB6b2QuX2RlZi50eXBlTmFtZVxuXG4gIGNvbnN0IGdldFR5cGVUeXBlID0gY2FsbEdldFR5cGUoem9kLCBpZGVudGlmaWVyLCBvcHRpb25zKVxuICAvLyBzcGVjaWFsIGNhc2UgbmF0aXZlIGVudW0sIHdoaWNoIG5lZWRzIGFuIGlkZW50aWZpZXIgbm9kZVxuICBpZiAoZ2V0VHlwZVR5cGUgJiYgdHlwZU5hbWUgIT09IFwiWm9kTmF0aXZlRW51bVwiKSB7XG4gICAgcmV0dXJuIG1heWJlSWRlbnRpZmllclRvVHlwZVJlZmVyZW5jZShnZXRUeXBlVHlwZSlcbiAgfVxuXG4gIGNvbnN0IG90aGVyQXJndW1lbnRzID0gW2lkZW50aWZpZXIsIHN0b3JlLCBvcHRpb25zXSBhcyBjb25zdFxuXG4gIHN3aXRjaCAodHlwZU5hbWUpIHtcbiAgICBjYXNlIFwiWm9kU3RyaW5nXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlN0cmluZ0tleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2ROdW1iZXJcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuTnVtYmVyS2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZEJpZ0ludFwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5CaWdJbnRLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kQm9vbGVhblwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5Cb29sZWFuS2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZERhdGVcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoZi5jcmVhdGVJZGVudGlmaWVyKFwiRGF0ZVwiKSlcbiAgICB9XG4gICAgY2FzZSBcIlpvZFVuZGVmaW5lZFwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kTnVsbFwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUoZi5jcmVhdGVOdWxsKCkpXG4gICAgfVxuICAgIGNhc2UgXCJab2RWb2lkXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUoW1xuICAgICAgICBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlZvaWRLZXl3b3JkKSxcbiAgICAgICAgZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkKSxcbiAgICAgIF0pXG4gICAgfVxuICAgIGNhc2UgXCJab2RBbnlcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuQW55S2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZFVua25vd25cIjoge1xuICAgICAgcmV0dXJuIGNyZWF0ZVVua25vd25LZXl3b3JkTm9kZSgpXG4gICAgfVxuICAgIGNhc2UgXCJab2ROZXZlclwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5OZXZlcktleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2RMYXp5XCI6IHtcbiAgICAgIC8vIGl0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGxhenkgdmFsdWUgaXMgcmVmZXJyaW5nIHRvXG4gICAgICAvLyBzbyB3ZSBmb3JjZSB0aGUgdXNlciB0byBkZWNsYXJlIGl0XG4gICAgICBpZiAoIWdldFR5cGVUeXBlKSByZXR1cm4gY3JlYXRlVHlwZVJlZmVyZW5jZUZyb21TdHJpbmcoaWRlbnRpZmllcilcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgXCJab2RMaXRlcmFsXCI6IHtcbiAgICAgIC8vIHoubGl0ZXJhbCgnaGknKSAtPiAnaGknXG4gICAgICBsZXQgbGl0ZXJhbDogdHMuTGl0ZXJhbEV4cHJlc3Npb24gfCB0cy5Cb29sZWFuTGl0ZXJhbFxuXG4gICAgICBjb25zdCBsaXRlcmFsVmFsdWUgPSB6b2QuX2RlZi52YWx1ZSBhcyBMaXRlcmFsVHlwZVxuICAgICAgc3dpdGNoICh0eXBlb2YgbGl0ZXJhbFZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjoge1xuICAgICAgICAgIGxpdGVyYWwgPSBmLmNyZWF0ZU51bWVyaWNMaXRlcmFsKGxpdGVyYWxWYWx1ZSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6IHtcbiAgICAgICAgICBsaXRlcmFsID0gbGl0ZXJhbFZhbHVlID09PSB0cnVlID8gZi5jcmVhdGVUcnVlKCkgOiBmLmNyZWF0ZUZhbHNlKClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBsaXRlcmFsID0gZi5jcmVhdGVTdHJpbmdMaXRlcmFsKGxpdGVyYWxWYWx1ZSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmLmNyZWF0ZUxpdGVyYWxUeXBlTm9kZShsaXRlcmFsKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kT2JqZWN0XCI6IHtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuZW50cmllcyh6b2QuX2RlZi5zaGFwZSgpKVxuXG4gICAgICBjb25zdCBtZW1iZXJzOiB0cy5UeXBlRWxlbWVudFtdID0gcHJvcGVydGllcy5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0Wm9kTm9kZSA9IHZhbHVlIGFzIFpvZFR5cGVBbnlcbiAgICAgICAgY29uc3QgdHlwZSA9IHpvZFRvVHNOb2RlKG5leHRab2ROb2RlLCAuLi5vdGhlckFyZ3VtZW50cylcblxuICAgICAgICBjb25zdCB7IHR5cGVOYW1lOiBuZXh0Wm9kTm9kZVR5cGVOYW1lIH0gPSBuZXh0Wm9kTm9kZS5fZGVmXG4gICAgICAgIGNvbnN0IGlzT3B0aW9uYWwgPVxuICAgICAgICAgIG5leHRab2ROb2RlVHlwZU5hbWUgPT09IFwiWm9kT3B0aW9uYWxcIiB8fCBuZXh0Wm9kTm9kZS5pc09wdGlvbmFsKClcblxuICAgICAgICBjb25zdCBwcm9wZXJ0eVNpZ25hdHVyZSA9IGYuY3JlYXRlUHJvcGVydHlTaWduYXR1cmUoXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGdldElkZW50aWZpZXJPclN0cmluZ0xpdGVyYWwoa2V5KSxcbiAgICAgICAgICBpc09wdGlvbmFsID8gZi5jcmVhdGVUb2tlbihTeW50YXhLaW5kLlF1ZXN0aW9uVG9rZW4pIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHR5cGVcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChuZXh0Wm9kTm9kZS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIGFkZEpzRG9jQ29tbWVudChwcm9wZXJ0eVNpZ25hdHVyZSwgbmV4dFpvZE5vZGUuZGVzY3JpcHRpb24pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvcGVydHlTaWduYXR1cmVcbiAgICAgIH0pXG4gICAgICByZXR1cm4gZi5jcmVhdGVUeXBlTGl0ZXJhbE5vZGUobWVtYmVycylcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kQXJyYXlcIjoge1xuICAgICAgY29uc3QgdHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlQXJyYXlUeXBlTm9kZSh0eXBlKVxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kRW51bVwiOiB7XG4gICAgICAvLyB6LmVudW1bJ2EnLCAnYicsICdjJ10gLT4gJ2EnIHwgJ2InIHwgJ2NcbiAgICAgIGNvbnN0IHR5cGVzID0gem9kLl9kZWYudmFsdWVzLm1hcCgodmFsdWU6IHN0cmluZykgPT5cbiAgICAgICAgZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUoZi5jcmVhdGVTdHJpbmdMaXRlcmFsKHZhbHVlKSlcbiAgICAgIClcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUodHlwZXMpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZFVuaW9uXCI6IHtcbiAgICAgIC8vIHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCldKSAtPiBzdHJpbmcgfCBudW1iZXJcbiAgICAgIGNvbnN0IG9wdGlvbnM6IFpvZFR5cGVBbnlbXSA9IHpvZC5fZGVmLm9wdGlvbnNcbiAgICAgIGNvbnN0IHR5cGVzOiB0cy5UeXBlTm9kZVtdID0gb3B0aW9ucy5tYXAoKG9wdGlvbikgPT5cbiAgICAgICAgem9kVG9Uc05vZGUob3B0aW9uLCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIClcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUodHlwZXMpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiOiB7XG4gICAgICAvLyB6LmRpc2NyaW1pbmF0ZWRVbmlvbigna2luZCcsIFt6Lm9iamVjdCh7IGtpbmQ6IHoubGl0ZXJhbCgnYScpLCBhOiB6LnN0cmluZygpIH0pLCB6Lm9iamVjdCh7IGtpbmQ6IHoubGl0ZXJhbCgnYicpLCBiOiB6Lm51bWJlcigpIH0pXSkgLT4geyBraW5kOiAnYScsIGE6IHN0cmluZyB9IHwgeyBraW5kOiAnYicsIGI6IG51bWJlciB9XG4gICAgICBjb25zdCBvcHRpb25zOiBab2RUeXBlQW55W10gPSBbLi4uem9kLl9kZWYub3B0aW9ucy52YWx1ZXMoKV1cbiAgICAgIGNvbnN0IHR5cGVzOiB0cy5UeXBlTm9kZVtdID0gb3B0aW9ucy5tYXAoKG9wdGlvbikgPT5cbiAgICAgICAgem9kVG9Uc05vZGUob3B0aW9uLCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIClcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUodHlwZXMpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEVmZmVjdHNcIjoge1xuICAgICAgLy8gaWdub3JlIGFueSBlZmZlY3RzLCB0aGV5IHdvbid0IGZhY3RvciBpbnRvIHRoZSB0eXBlc1xuICAgICAgY29uc3Qgbm9kZSA9IHpvZFRvVHNOb2RlKFxuICAgICAgICB6b2QuX2RlZi5zY2hlbWEsXG4gICAgICAgIC4uLm90aGVyQXJndW1lbnRzXG4gICAgICApIGFzIHRzLlR5cGVOb2RlXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2ROYXRpdmVFbnVtXCI6IHtcbiAgICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlVHlwZVxuXG4gICAgICBpZiAob3B0aW9ucy5uYXRpdmVFbnVtcyA9PT0gXCJ1bmlvblwiKSB7XG4gICAgICAgIC8vIGFsbG93IG92ZXJyaWRpbmcgd2l0aCB0aGlzIG9wdGlvblxuICAgICAgICBpZiAodHlwZSkgcmV0dXJuIG1heWJlSWRlbnRpZmllclRvVHlwZVJlZmVyZW5jZSh0eXBlKVxuXG4gICAgICAgIGNvbnN0IHR5cGVzID0gT2JqZWN0LnZhbHVlcyh6b2QuX2RlZi52YWx1ZXMpLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUoZi5jcmVhdGVOdW1lcmljTGl0ZXJhbCh2YWx1ZSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmLmNyZWF0ZUxpdGVyYWxUeXBlTm9kZShmLmNyZWF0ZVN0cmluZ0xpdGVyYWwodmFsdWUgYXMgc3RyaW5nKSlcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIGYuY3JlYXRlVW5pb25UeXBlTm9kZSh0eXBlcylcbiAgICAgIH1cblxuICAgICAgLy8gei5uYXRpdmVFbnVtKEZydWl0cykgLT4gRnJ1aXRzXG4gICAgICAvLyBjYW4gcmVzb2x2ZSBGcnVpdHMgaW50byBzdG9yZSBhbmQgdXNlciBjYW4gaGFuZGxlIGVudW1zXG4gICAgICBpZiAoIXR5cGUpIHJldHVybiBjcmVhdGVVbmtub3duS2V5d29yZE5vZGUoKVxuXG4gICAgICBpZiAob3B0aW9ucy5uYXRpdmVFbnVtcyA9PT0gXCJyZXNvbHZlXCIpIHtcbiAgICAgICAgY29uc3QgZW51bU1lbWJlcnMgPSBPYmplY3QuZW50cmllcyhcbiAgICAgICAgICB6b2QuX2RlZi52YWx1ZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICAgICAgICApLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGl0ZXJhbCA9XG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgPyBmLmNyZWF0ZU51bWVyaWNMaXRlcmFsKHZhbHVlKVxuICAgICAgICAgICAgICA6IGYuY3JlYXRlU3RyaW5nTGl0ZXJhbCh2YWx1ZSlcblxuICAgICAgICAgIHJldHVybiBmLmNyZWF0ZUVudW1NZW1iZXIoZ2V0SWRlbnRpZmllck9yU3RyaW5nTGl0ZXJhbChrZXkpLCBsaXRlcmFsKVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIodHlwZSkpIHtcbiAgICAgICAgICBzdG9yZS5uYXRpdmVFbnVtcy5wdXNoKFxuICAgICAgICAgICAgZi5jcmVhdGVFbnVtRGVjbGFyYXRpb24odW5kZWZpbmVkLCB0eXBlLCBlbnVtTWVtYmVycylcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2dldFR5cGUgb24gbmF0aXZlRW51bSBtdXN0IHJldHVybiBhbiBpZGVudGlmaWVyIHdoZW4gbmF0aXZlRW51bXMgaXMgXCJyZXNvbHZlXCInXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXliZUlkZW50aWZpZXJUb1R5cGVSZWZlcmVuY2UodHlwZSlcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kT3B0aW9uYWxcIjoge1xuICAgICAgY29uc3QgaW5uZXJUeXBlID0gem9kVG9Uc05vZGUoXG4gICAgICAgIHpvZC5fZGVmLmlubmVyVHlwZSxcbiAgICAgICAgLi4ub3RoZXJBcmd1bWVudHNcbiAgICAgICkgYXMgdHMuVHlwZU5vZGVcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUoW1xuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZCksXG4gICAgICBdKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2ROdWxsYWJsZVwiOiB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUb1RzTm9kZShcbiAgICAgICAgem9kLl9kZWYuaW5uZXJUeXBlLFxuICAgICAgICAuLi5vdGhlckFyZ3VtZW50c1xuICAgICAgKSBhcyB0cy5UeXBlTm9kZVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVW5pb25UeXBlTm9kZShbXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICAgICAgZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUoZi5jcmVhdGVOdWxsKCkpLFxuICAgICAgXSlcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kVHVwbGVcIjoge1xuICAgICAgLy8gei50dXBsZShbei5zdHJpbmcoKSwgei5udW1iZXIoKV0pIC0+IFtzdHJpbmcsIG51bWJlcl1cbiAgICAgIGNvbnN0IHR5cGVzID0gem9kLl9kZWYuaXRlbXMubWFwKChvcHRpb246IFpvZFR5cGVBbnkpID0+XG4gICAgICAgIHpvZFRvVHNOb2RlKG9wdGlvbiwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICApXG4gICAgICByZXR1cm4gZi5jcmVhdGVUdXBsZVR5cGVOb2RlKHR5cGVzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RSZWNvcmRcIjoge1xuICAgICAgLy8gei5yZWNvcmQoei5udW1iZXIoKSkgLT4geyBbeDogc3RyaW5nXTogbnVtYmVyIH1cbiAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnZhbHVlVHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZVR5cGVMaXRlcmFsTm9kZShbXG4gICAgICAgIGYuY3JlYXRlSW5kZXhTaWduYXR1cmUoXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIGYuY3JlYXRlUGFyYW1ldGVyRGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBmLmNyZWF0ZUlkZW50aWZpZXIoXCJ4XCIpLFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuU3RyaW5nS2V5d29yZClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSxcbiAgICAgICAgICB2YWx1ZVR5cGVcbiAgICAgICAgKSxcbiAgICAgIF0pXG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZE1hcFwiOiB7XG4gICAgICAvLyB6Lm1hcCh6LnN0cmluZygpKSAtPiBNYXA8c3RyaW5nPlxuICAgICAgY29uc3QgdmFsdWVUeXBlID0gem9kVG9Uc05vZGUoem9kLl9kZWYudmFsdWVUeXBlLCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIGNvbnN0IGtleVR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi5rZXlUeXBlLCAuLi5vdGhlckFyZ3VtZW50cylcblxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoZi5jcmVhdGVJZGVudGlmaWVyKFwiTWFwXCIpLCBbXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgIF0pXG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZFNldFwiOiB7XG4gICAgICAvLyB6LnNldCh6LnN0cmluZygpKSAtPiBTZXQ8c3RyaW5nPlxuICAgICAgY29uc3QgdHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnZhbHVlVHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihcIlNldFwiKSwgW3R5cGVdKVxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kSW50ZXJzZWN0aW9uXCI6IHtcbiAgICAgIC8vIHoubnVtYmVyKCkuYW5kKHouc3RyaW5nKCkpIC0+IG51bWJlciAmIHN0cmluZ1xuICAgICAgY29uc3QgbGVmdCA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLmxlZnQsIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgY29uc3QgcmlnaHQgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi5yaWdodCwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVJbnRlcnNlY3Rpb25UeXBlTm9kZShbbGVmdCwgcmlnaHRdKVxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kUHJvbWlzZVwiOiB7XG4gICAgICAvLyB6LnByb21pc2Uoei5zdHJpbmcoKSkgLT4gUHJvbWlzZTxzdHJpbmc+XG4gICAgICBjb25zdCB0eXBlID0gem9kVG9Uc05vZGUoem9kLl9kZWYudHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihcIlByb21pc2VcIiksIFtcbiAgICAgICAgdHlwZSxcbiAgICAgIF0pXG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEZ1bmN0aW9uXCI6IHtcbiAgICAgIC8vIHouZnVuY3Rpb24oKS5hcmdzKHouc3RyaW5nKCkpLnJldHVybnMoei5udW1iZXIoKSkgLT4gKGFyZ3NfMDogc3RyaW5nKSA9PiBudW1iZXJcbiAgICAgIGNvbnN0IGFyZ3VtZW50VHlwZXMgPSB6b2QuX2RlZi5hcmdzLl9kZWYuaXRlbXMubWFwKFxuICAgICAgICAoYXJndW1lbnQ6IFpvZFR5cGVBbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmd1bWVudFR5cGUgPSB6b2RUb1RzTm9kZShhcmd1bWVudCwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgICAgICByZXR1cm4gZi5jcmVhdGVQYXJhbWV0ZXJEZWNsYXJhdGlvbihcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGYuY3JlYXRlSWRlbnRpZmllcihgYXJnc18ke2luZGV4fWApLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXJndW1lbnRUeXBlXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICApIGFzIHRzLlBhcmFtZXRlckRlY2xhcmF0aW9uW11cblxuICAgICAgYXJndW1lbnRUeXBlcy5wdXNoKFxuICAgICAgICBmLmNyZWF0ZVBhcmFtZXRlckRlY2xhcmF0aW9uKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBmLmNyZWF0ZVRva2VuKFN5bnRheEtpbmQuRG90RG90RG90VG9rZW4pLFxuICAgICAgICAgIGYuY3JlYXRlSWRlbnRpZmllcihgYXJnc18ke2FyZ3VtZW50VHlwZXMubGVuZ3RofWApLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBmLmNyZWF0ZUFycmF5VHlwZU5vZGUoY3JlYXRlVW5rbm93bktleXdvcmROb2RlKCkpXG4gICAgICAgIClcbiAgICAgIClcblxuICAgICAgY29uc3QgcmV0dXJuVHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnJldHVybnMsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVGdW5jdGlvblR5cGVOb2RlKFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFyZ3VtZW50VHlwZXMsXG4gICAgICAgIHJldHVyblR5cGVcbiAgICAgIClcblxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kRGVmYXVsdFwiOiB7XG4gICAgICAvLyB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVmYXVsdCgnaGknKSAtPiBzdHJpbmdcbiAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZShcbiAgICAgICAgem9kLl9kZWYuaW5uZXJUeXBlLFxuICAgICAgICAuLi5vdGhlckFyZ3VtZW50c1xuICAgICAgKSBhcyB0cy5UeXBlTm9kZVxuXG4gICAgICBjb25zdCBmaWx0ZXJlZE5vZGVzOiB0cy5Ob2RlW10gPSBbXVxuXG4gICAgICB0eXBlLmZvckVhY2hDaGlsZCgobm9kZSkgPT4ge1xuICAgICAgICBpZiAoIVtTeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmRdLmluY2x1ZGVzKG5vZGUua2luZCkpIHtcbiAgICAgICAgICBmaWx0ZXJlZE5vZGVzLnB1c2gobm9kZSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBuZWVkZWQgdG8gc2V0IGNoaWxkcmVuXG4gICAgICB0eXBlLnR5cGVzID0gZmlsdGVyZWROb2Rlc1xuXG4gICAgICByZXR1cm4gdHlwZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLkFueUtleXdvcmQpXG59XG4iLCAiaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IGNyeXB0byBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBQcm9qZWN0LCBTeW50YXhLaW5kIH0gZnJvbSBcInRzLW1vcnBoXCJcbmltcG9ydCAqIGFzIGVzYnVpbGQgZnJvbSBcImVzYnVpbGRcIlxuaW1wb3J0IHsgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUgfSBmcm9tIFwiLi9saWIvZGVmYXVsdC1tYXAtZmlsZS1wYXRoLXRvLWh0dHAtcm91dGVcIlxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSb3V0ZVR5cGVzT3B0cyB7XG4gIHBhY2thZ2VEaXI6IHN0cmluZ1xuICBhbGxvd2VkSW1wb3J0UGF0dGVybnM/OiBzdHJpbmdbXVxuICBvdXRwdXRGaWxlPzogc3RyaW5nXG4gIHBhdGhHbG9iPzogc3RyaW5nXG4gIGFwaVByZWZpeD86IHN0cmluZ1xuICBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlPzogKGZpbGVfcGF0aDogc3RyaW5nKSA9PiBzdHJpbmdcbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCBvbmx5IHJvdXRlcyB0aGF0IHJldHVybiB0cnVlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZCB0eXBlcy5cbiAgICovXG4gIGZpbHRlclJvdXRlcz86IChyb3V0ZTogc3RyaW5nKSA9PiBib29sZWFuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCByb3V0ZXMgdGhhdCBoYXZlIGBleGNsdWRlRnJvbU9wZW5BcGlgIHNldCB0byB0cnVlIHdpbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGUgZ2VuZXJhdGVkIHR5cGVzLlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIHRvIGluY2x1ZGUgdGhlbS5cbiAgICovXG4gIGluY2x1ZGVPcGVuQXBpRXhjbHVkZWRSb3V0ZXM/OiBib29sZWFuXG4gIGVzYnVpbGRPcHRpb25zPzogZXNidWlsZC5CdWlsZE9wdGlvbnNcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RSb3V0ZVNwZWNzID0gYXN5bmMgKG9wdHM6IEdlbmVyYXRlUm91dGVUeXBlc09wdHMpID0+IHtcbiAgY29uc3QgeyBwYWNrYWdlRGlyLCBwYXRoR2xvYiA9IFwiL3BhZ2VzL2FwaS8qKi8qLnRzXCIgfSA9IG9wdHNcbiAgY29uc3QgZnVsbFBhdGhHbG9iID0gcGF0aC5wb3NpeC5qb2luKHBhY2thZ2VEaXIsIHBhdGhHbG9iKVxuXG4gIGNvbnN0IHByb2plY3QgPSBuZXcgUHJvamVjdCh7IGNvbXBpbGVyT3B0aW9uczogeyBkZWNsYXJhdGlvbjogdHJ1ZSB9IH0pXG5cbiAgY29uc3QgcGF0aHM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHByb2plY3QuYWRkU291cmNlRmlsZXNBdFBhdGhzKGZ1bGxQYXRoR2xvYikpIHtcbiAgICBjb25zdCBkZWZhdWx0RXhwb3J0ID0gc291cmNlRmlsZS5nZXRFeHBvcnRBc3NpZ25tZW50KFxuICAgICAgKGQpID0+ICFkLmlzRXhwb3J0RXF1YWxzKClcbiAgICApXG4gICAgaWYgKCFkZWZhdWx0RXhwb3J0KSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJpZWRXaXRoUm91dGVTcGVjQ2FsbCA9IGRlZmF1bHRFeHBvcnRcbiAgICAgIC5nZXRFeHByZXNzaW9uKClcbiAgICAgIC5hc0tpbmQoU3ludGF4S2luZC5DYWxsRXhwcmVzc2lvbilcbiAgICBpZiAoIWN1cnJpZWRXaXRoUm91dGVTcGVjQ2FsbCkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3Qgd2l0aFJvdXRlU3BlY0NhbGwgPSBjdXJyaWVkV2l0aFJvdXRlU3BlY0NhbGxcbiAgICAgIC5nZXRFeHByZXNzaW9uKClcbiAgICAgIC5hc0tpbmQoU3ludGF4S2luZC5DYWxsRXhwcmVzc2lvbilcbiAgICBpZiAoIXdpdGhSb3V0ZVNwZWNDYWxsKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IFtyb3V0ZVNwZWNdID0gd2l0aFJvdXRlU3BlY0NhbGwuZ2V0QXJndW1lbnRzKClcbiAgICBpZiAoIXJvdXRlU3BlYykge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBzb3VyY2VGaWxlLmFkZFN0YXRlbWVudHMoXG4gICAgICBgZXhwb3J0IGNvbnN0IGV4dHJhY3RlZFJvdXRlU3BlYyA9ICR7cm91dGVTcGVjLmdldFRleHQoKX1gXG4gICAgKVxuXG4gICAgZGVmYXVsdEV4cG9ydC5yZW1vdmUoKVxuXG4gICAgLy8gUmVtb3ZlIGFsbCB1bnVzZWQgaW1wb3J0cyBzbyBmaWxlIGNhbiBiZSB0cmVlIHNoYWtlblxuICAgIC8vIChBc3N1bWVzIGFsbCBpbXBvcnRzIGFyZSBmcmVlIG9mIHNpZGUtZWZmZWN0cylcbiAgICBsZXQgbGFzdFdpZHRoOiBudW1iZXJcbiAgICBkbyB7XG4gICAgICBsYXN0V2lkdGggPSBzb3VyY2VGaWxlLmdldEZ1bGxXaWR0aCgpXG4gICAgICAvLyBNYXkgbmVlZCB0byBjYWxsIHRoaXMgbXVsdGlwbGUgdGltZXNcbiAgICAgIHNvdXJjZUZpbGUuZml4VW51c2VkSWRlbnRpZmllcnMoKVxuICAgIH0gd2hpbGUgKGxhc3RXaWR0aCAhPT0gc291cmNlRmlsZS5nZXRGdWxsV2lkdGgoKSlcblxuICAgIGNvbnN0IGFic29sdXRlUGFja2FnZURpciA9IHBhdGgucmVzb2x2ZShwYWNrYWdlRGlyKVxuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoXG4gICAgICBhYnNvbHV0ZVBhY2thZ2VEaXIsXG4gICAgICBzb3VyY2VGaWxlLmdldEZpbGVQYXRoKClcbiAgICApXG4gICAgcGF0aHMucHVzaChyZWxhdGl2ZVBhdGgpXG4gIH1cblxuICBjb25zdCBwYXRoVG9JZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9XG4gIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgIC8vIGFkZCBwcmVmaXggdG8gYXZvaWQgc3RhcnRpbmcgd2l0aCBhIG51bWJlclxuICAgIHBhdGhUb0lkW3BhdGhdID1cbiAgICAgIFwiaGFzaFwiICsgY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHBhdGgpLmRpZ2VzdChcImhleFwiKVxuICB9XG5cbiAgY29uc3QgZW50cnlQb2ludENvbnRlbnQgPSBgXG4gICR7cGF0aHNcbiAgICAubWFwKChwKSA9PiBgaW1wb3J0IHtleHRyYWN0ZWRSb3V0ZVNwZWMgYXMgJHtwYXRoVG9JZFtwXX19IGZyb20gXCIuLyR7cH1cImApXG4gICAgLmpvaW4oXCJcXG5cIil9XG5cbiAgZXhwb3J0IGNvbnN0IHJvdXRlcyA9IHtcbiAgICAke3BhdGhzXG4gICAgICAubWFwKChwKSA9PiB7XG4gICAgICAgIGNvbnN0IGh0dHBSb3V0ZSA9IChcbiAgICAgICAgICBvcHRzLm1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPz9cbiAgICAgICAgICBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZShvcHRzLmFwaVByZWZpeClcbiAgICAgICAgKShwKVxuXG4gICAgICAgIHJldHVybiBgXCIke2h0dHBSb3V0ZX1cIjogJHtwYXRoVG9JZFtwXX1gXG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIsXFxuXCIpfVxuICB9XG4gIGBcblxuICAvLyBDb3B5IGFsbG93ZWQgaW1wb3J0IGdsb2JzIGludG8gcHJvamVjdFxuICBpZiAob3B0cy5hbGxvd2VkSW1wb3J0UGF0dGVybnMpIHtcbiAgICBwcm9qZWN0LmFkZFNvdXJjZUZpbGVzQXRQYXRocyhvcHRzLmFsbG93ZWRJbXBvcnRQYXR0ZXJucylcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIHR5cGVzICguZC50cylcbiAgY29uc3QgZW50cnlQb2ludCA9IHByb2plY3QuY3JlYXRlU291cmNlRmlsZShcbiAgICBcImV4dHJhY3RlZC1yb3V0ZS1zcGVjcy50c1wiLFxuICAgIGVudHJ5UG9pbnRDb250ZW50XG4gIClcbiAgY29uc3QgZW1pdFJlc3VsdCA9IGVudHJ5UG9pbnQuZ2V0RW1pdE91dHB1dCh7IGVtaXRPbmx5RHRzRmlsZXM6IHRydWUgfSlcbiAgaWYgKG9wdHMub3V0cHV0RmlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICBwYXRoLmRpcm5hbWUob3B0cy5vdXRwdXRGaWxlKSxcbiAgICAgIHBhdGguYmFzZW5hbWUob3B0cy5vdXRwdXRGaWxlKS5yZXBsYWNlKFwiLm1qc1wiLCBcIlwiKS5yZXBsYWNlKFwiLmpzXCIsIFwiXCIpICtcbiAgICAgICAgXCIuZC50c1wiXG4gICAgKVxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgIGRlY2xhcmF0aW9uRmlsZVBhdGgsXG4gICAgICBlbWl0UmVzdWx0LmdldE91dHB1dEZpbGVzKClbMF0uZ2V0VGV4dCgpXG4gICAgKVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgdmFsdWVzICguanMpXG4gIGNvbnN0IHBrZ1JhdyA9IGF3YWl0IGZzLnJlYWRGaWxlKFxuICAgIHBhdGguam9pbihwYWNrYWdlRGlyLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICBcInV0Zi04XCJcbiAgKVxuICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHBrZ1JhdylcblxuICBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAuLi5vcHRzLmVzYnVpbGRPcHRpb25zLFxuICAgIHN0ZGluOiB7XG4gICAgICBjb250ZW50czogZW50cnlQb2ludENvbnRlbnQsXG4gICAgICByZXNvbHZlRGlyOiBwYXRoLnJlc29sdmUocGFja2FnZURpciksXG4gICAgfSxcbiAgICBvdXRmaWxlOiBvcHRzLm91dHB1dEZpbGUsXG4gICAgYnVuZGxlOiB0cnVlLFxuICAgIHBsYXRmb3JtOiBcIm5vZGVcIixcbiAgICBmb3JtYXQ6IFwiZXNtXCIsXG4gICAgdHJlZVNoYWtpbmc6IHRydWUsXG4gICAgZXh0ZXJuYWw6IFtcbiAgICAgIC4uLk9iamVjdC5rZXlzKHBrZy5kZXBlbmRlbmNpZXMpLFxuICAgICAgLi4uT2JqZWN0LmtleXMocGtnLmRldkRlcGVuZGVuY2llcyksXG4gICAgICAuLi4ob3B0cy5lc2J1aWxkT3B0aW9ucz8uZXh0ZXJuYWwgPz8gW10pLFxuICAgIF0sXG4gICAgcGx1Z2luczogW1xuICAgICAgLy8gV2l0aCB0aGlzIHBsdWdpbiwgZXNidWlsZCB3aWxsIG5ldmVyIHRvdWNoIHRoZSBhY3R1YWwgZmlsZXN5c3RlbSBhbmQgdGh1cyBjYW5ub3QgaW50ZXJhY3Qgd2l0aCBpbXBvcnRzIHRoYXQgZG9uJ3QgbWF0Y2ggYWxsb3dlZEltcG9ydFBhdHRlcm5zW10uXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwicmVzb2x2ZS12aXJ0dWFsLWZzXCIsXG4gICAgICAgIHNldHVwKGJ1aWxkKSB7XG4gICAgICAgICAgYnVpbGQub25Mb2FkKHsgZmlsdGVyOiAvLiovIH0sIChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50cyA9IHByb2plY3QuZ2V0U291cmNlRmlsZShhcmdzLnBhdGgpPy5nZXRGdWxsVGV4dCgpXG4gICAgICAgICAgICBpZiAoIWNvbnRlbnRzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGVudHM6IFwiZXhwb3J0IGRlZmF1bHQge31cIixcbiAgICAgICAgICAgICAgICBsb2FkZXI6IFwidHNcIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50cyxcbiAgICAgICAgICAgICAgbG9hZGVyOiBcInRzXCIsXG4gICAgICAgICAgICAgIHJlc29sdmVEaXI6IHBhdGguZGlybmFtZShhcmdzLnBhdGgpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgLi4uKG9wdHMuZXNidWlsZE9wdGlvbnM/LnBsdWdpbnMgPz8gW10pLFxuICAgIF0sXG4gIH0pXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBQUE7OztBQ0FBO0FBQUEsT0FBTyxRQUFRO0FBQ2Y7QUFBQSxFQUNFO0FBQUEsT0FHSztBQUVQLFNBQVMsS0FBQUEsVUFB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SyxZQUFZO0FBQ25CLFVBQU0sc0JBQXNCRixNQUFLO0FBQUEsTUFDL0JBLE1BQUssUUFBUSxLQUFLLFVBQVU7QUFBQSxNQUM1QkEsTUFBSyxTQUFTLEtBQUssVUFBVSxFQUFFLFFBQVEsUUFBUSxFQUFFLEVBQUUsUUFBUSxPQUFPLEVBQUUsSUFDbEU7QUFBQSxJQUNKO0FBQ0EsVUFBUztBQUFBLE1BQ1A7QUFBQSxNQUNBLFdBQVcsZUFBZSxFQUFFLEdBQUcsUUFBUTtBQUFBLElBQ3pDO0FBQUEsRUFDRjtBQUdBLFFBQU0sU0FBUyxNQUFTO0FBQUEsSUFDdEJBLE1BQUssS0FBSyxZQUFZLGNBQWM7QUFBQSxJQUNwQztBQUFBLEVBQ0Y7QUFDQSxRQUFNLE1BQU0sS0FBSyxNQUFNLE1BQU07QUFFN0IsUUFBYyxjQUFNO0FBQUEsSUFDbEIsR0FBRyxLQUFLO0FBQUEsSUFDUixPQUFPO0FBQUEsTUFDTCxVQUFVO0FBQUEsTUFDVixZQUFZQSxNQUFLLFFBQVEsVUFBVTtBQUFBLElBQ3JDO0FBQUEsSUFDQSxTQUFTLEtBQUs7QUFBQSxJQUNkLFFBQVE7QUFBQSxJQUNSLFVBQVU7QUFBQSxJQUNWLFFBQVE7QUFBQSxJQUNSLGFBQWE7QUFBQSxJQUNiLFVBQVU7QUFBQSxNQUNSLEdBQUcsT0FBTyxLQUFLLElBQUksWUFBWTtBQUFBLE1BQy9CLEdBQUcsT0FBTyxLQUFLLElBQUksZUFBZTtBQUFBLE1BQ2xDLElBQUksZ0JBQUssbUJBQUwsbUJBQXFCLGFBQXJCLFlBQWlDLENBQUM7QUFBQSxJQUN4QztBQUFBLElBQ0EsU0FBUztBQUFBLE1BRVA7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE1BQU1HLFFBQU87QUFDWCxVQUFBQSxPQUFNLE9BQU8sRUFBRSxRQUFRLEtBQUssR0FBRyxDQUFDLFNBQVM7QUEvSm5ELGdCQUFBRDtBQWdLWSxrQkFBTSxZQUFXQSxNQUFBLFFBQVEsY0FBYyxLQUFLLElBQUksTUFBL0IsZ0JBQUFBLElBQWtDO0FBQ25ELGdCQUFJLENBQUMsVUFBVTtBQUNiLHFCQUFPO0FBQUEsZ0JBQ0wsVUFBVTtBQUFBLGdCQUNWLFFBQVE7QUFBQSxjQUNWO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsY0FDTDtBQUFBLGNBQ0EsUUFBUTtBQUFBLGNBQ1IsWUFBWUYsTUFBSyxRQUFRLEtBQUssSUFBSTtBQUFBLFlBQ3BDO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLElBQUksZ0JBQUssbUJBQUwsbUJBQXFCLFlBQXJCLFlBQWdDLENBQUM7QUFBQSxJQUN2QztBQUFBLEVBQ0YsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJ6IiwgInBhdGgiLCAicGF0aCIsICJwYXRoIiwgInBhdGgiLCAiX2EiLCAieiIsICJmcyIsICJkZWRlbnQiLCAicGFyc2VEZXNjcmlwdGlvbiIsICJvcHRpb25zIiwgInoiLCAiXyIsICJmcyIsICJwYXRoIiwgIlN5bnRheEtpbmQiLCAicGF0aCIsICJTeW50YXhLaW5kIiwgIl9hIiwgImJ1aWxkIl0KfQo=
|
|
1551
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2dlbmVyYXRvcnMvaW5kZXgudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvcGFyc2Utcm91dGVzLWluLXBhY2thZ2UudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvbGliL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2xpYi96b2Qtb3BlbmFwaS50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvZnJvbnQtbWF0dGVyLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRlLW9wZW5hcGkvZW1iZWQtc2NoZW1hLXJlZmVyZW5jZXMudHMiLCAiLi4vLi4vc3JjL2dlbmVyYXRvcnMvZ2VuZXJhdGUtb3BlbmFwaS9mZXJuLXNkay11dGlscy50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9nZW5lcmF0ZS1yb3V0ZS10eXBlcy9pbmRleC50cyIsICIuLi8uLi9zcmMvZ2VuZXJhdG9ycy9saWIvem9kLXRvLXRzLnRzIiwgIi4uLy4uL3NyYy9nZW5lcmF0b3JzL2V4dHJhY3Qtcm91dGUtc3BlYy1zY2hlbWFzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgKiBmcm9tIFwiLi9nZW5lcmF0ZS1vcGVuYXBpXCJcbmV4cG9ydCAqIGZyb20gXCIuL2dlbmVyYXRlLXJvdXRlLXR5cGVzXCJcbmV4cG9ydCAqIGZyb20gXCIuL2V4dHJhY3Qtcm91dGUtc3BlYy1zY2hlbWFzXCJcbiIsICJpbXBvcnQgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHtcbiAgT3BlbkFwaUJ1aWxkZXIsXG4gIE9wZXJhdGlvbk9iamVjdCxcbiAgUGFyYW1ldGVyT2JqZWN0LFxufSBmcm9tIFwib3BlbmFwaTMtdHMvb2FzMzFcIlxuaW1wb3J0IHsgU2V0dXBQYXJhbXMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgcGFyc2VSb3V0ZXNJblBhY2thZ2UgfSBmcm9tIFwiLi4vbGliL3BhcnNlLXJvdXRlcy1pbi1wYWNrYWdlXCJcbmltcG9ydCB7IGdlbmVyYXRlU2NoZW1hIH0gZnJvbSBcIi4uL2xpYi96b2Qtb3BlbmFwaVwiXG5pbXBvcnQgeyBlbWJlZFNjaGVtYVJlZmVyZW5jZXMgfSBmcm9tIFwiLi9lbWJlZC1zY2hlbWEtcmVmZXJlbmNlc1wiXG5pbXBvcnQgeyBtYXBNZXRob2RzVG9GZXJuU2RrTWV0YWRhdGEgfSBmcm9tIFwiLi9mZXJuLXNkay11dGlsc1wiXG5pbXBvcnQgeyBwYXJzZUZyb250TWF0dGVyLCB0ZXN0RnJvbnRNYXR0ZXIgfSBmcm9tIFwiLi4vbGliL2Zyb250LW1hdHRlclwiXG5pbXBvcnQgZGVkZW50IGZyb20gXCJkZWRlbnRcIlxuXG5mdW5jdGlvbiByZXBsYWNlRmlyc3RDaGFyVG9Mb3dlcmNhc2Uoc3RyOiBzdHJpbmcpIHtcbiAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RyXG4gIH1cblxuICBjb25zdCBmaXJzdENoYXIgPSBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKClcbiAgcmV0dXJuIGZpcnN0Q2hhciArIHN0ci5zbGljZSgxKVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9PcGVyYXRpb25JZChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXJ0cyA9IHBhdGhcbiAgICAucmVwbGFjZSgvLS9nLCBcIl9cIilcbiAgICAuc3BsaXQoXCIvXCIpXG4gICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIilcbiAgY29uc3QgdHJhbnNmb3JtZWRQYXJ0cyA9IHBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoXCJbXCIpICYmIHBhcnQuZW5kc1dpdGgoXCJdXCIpKSB7XG4gICAgICAvLyBDb252ZXJ0IFtwYXJhbV0gdG8gQnlQYXJhbVxuICAgICAgY29uc3Qgc2VydmljZU5hbWUgPSBwYXJ0LnNsaWNlKDEsIC0xKVxuICAgICAgY29uc3Qgd29yZHMgPSBzZXJ2aWNlTmFtZS5zcGxpdChcIl9cIilcbiAgICAgIGNvbnN0IGNhcGl0YWxpemVkV29yZHMgPSB3b3Jkcy5tYXAoXG4gICAgICAgICh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGBCeSR7Y2FwaXRhbGl6ZWRXb3Jkcy5qb2luKFwiXCIpfWBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udmVydCBhcGlfcGF0aCB0byBBcGlQYXRoXG4gICAgICBjb25zdCB3b3JkcyA9IHBhcnQuc3BsaXQoXCJfXCIpXG4gICAgICBjb25zdCBjYXBpdGFsaXplZFdvcmRzID0gd29yZHMubWFwKFxuICAgICAgICAod29yZCkgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSlcbiAgICAgIClcbiAgICAgIHJldHVybiBjYXBpdGFsaXplZFdvcmRzLmpvaW4oXCJcIilcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHJlcGxhY2VGaXJzdENoYXJUb0xvd2VyY2FzZSh0cmFuc2Zvcm1lZFBhcnRzLmpvaW4oXCJcIikpXG59XG5cbmZ1bmN0aW9uIHBhc2NhbENhc2UoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHdvcmRzID0gaW5wdXQuc3BsaXQoXCIgXCIpXG4gIGNvbnN0IGNhcGl0YWxpemVkV29yZHMgPSB3b3Jkcy5tYXAoXG4gICAgKHdvcmQpID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpLnRvTG93ZXJDYXNlKClcbiAgKVxuICBjb25zdCBwYXNjYWxDYXNlU3RyaW5nID0gY2FwaXRhbGl6ZWRXb3Jkcy5qb2luKFwiXCIpXG4gIHJldHVybiBwYXNjYWxDYXNlU3RyaW5nXG59XG5cbmludGVyZmFjZSBUYWdPcHRpb24ge1xuICBuYW1lOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBkb2VzUm91dGVIYXZlVGFnPzogKHJvdXRlOiBzdHJpbmcpID0+IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIEdlbmVyYXRlT3BlbkFQSU9wdHMge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgb3V0cHV0RmlsZT86IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICB0YWdzPzogQXJyYXk8VGFnT3B0aW9uPlxuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYW4gT3BlbkFQSSBzcGVjIGZyb20gdGhlIE5leHQuanMgQVBJIHJvdXRlcy5cbiAqXG4gKiBZb3Ugbm9ybWFsbHkgaW52b2tlIHRoaXMgd2l0aCBgbmV4dGFwaSBnZW5lcmF0ZS1vcGVuYXBpYCBpbiBhXG4gKiBcImJ1aWxkOm9wZW5hcGlcIiBwYWNrYWdlLmpzb24gc2NyaXB0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVPcGVuQVBJKG9wdHM6IEdlbmVyYXRlT3BlbkFQSU9wdHMpIHtcbiAgY29uc3QgY2hhbGsgPSAoYXdhaXQgaW1wb3J0KFwiY2hhbGtcIikpLmRlZmF1bHRcbiAgY29uc3QgeyBvdXRwdXRGaWxlLCB0YWdzID0gW10gfSA9IG9wdHNcblxuICBjb25zdCBmaWxlcGF0aFRvUm91dGVGbiA9IGF3YWl0IHBhcnNlUm91dGVzSW5QYWNrYWdlKG9wdHMpXG5cbiAgLy8gVE9ETyBkZXRlY3QgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHNldHVwcyBhbmQgb3V0cHV0IGRpZmZlcmVudCBBUElzXG4gIGNvbnN0IHsgc2V0dXBQYXJhbXM6IGdsb2JhbFNldHVwUGFyYW1zIH0gPSBmaWxlcGF0aFRvUm91dGVGbi52YWx1ZXMoKS5uZXh0KClcbiAgICAudmFsdWUgYXMgeyBzZXR1cFBhcmFtczogU2V0dXBQYXJhbXMgfVxuXG4gIGNvbnN0IHNlY3VyaXR5U2NoZW1lcyA9IGdsb2JhbFNldHVwUGFyYW1zLnNlY3VyaXR5U2NoZW1hcyA/PyB7fVxuICBjb25zdCBzZWN1cml0eU9iamVjdHNGb3JBdXRoVHlwZSA9IHt9XG4gIGZvciAoY29uc3QgYXV0aE5hbWUgb2YgT2JqZWN0LmtleXMoZ2xvYmFsU2V0dXBQYXJhbXMuYXV0aE1pZGRsZXdhcmVNYXApKSB7XG4gICAgY29uc3QgbXcgPSBnbG9iYWxTZXR1cFBhcmFtcy5hdXRoTWlkZGxld2FyZU1hcFthdXRoTmFtZV1cbiAgICBpZiAobXcuc2VjdXJpdHlTY2hlbWEpIHtcbiAgICAgIHNlY3VyaXR5U2NoZW1lc1thdXRoTmFtZV0gPSAobXcgYXMgYW55KS5zZWN1cml0eVNjaGVtYVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICBgQXV0aGVudGljYXRpb24gbWlkZGxld2FyZSBcIiR7YXV0aE5hbWV9XCIgaGFzIG5vIHNlY3VyaXR5U2NoZW1hLiBZb3UgY2FuIGRlZmluZSB0aGlzIG9uIHRoZSBmdW5jdGlvbiAoZS5nLiBhZnRlciB0aGUgZXhwb3J0IGRvLi4uIFxcblxcbm15TWlkZGxld2FyZS5zZWN1cml0eVNjaGVtYSA9IHtcXG4gIHR5cGU6IFwiaHR0cFwiXFxuICBzY2hlbWU6IFwiYmVhcmVyXCJcXG4gIGJlYXJlckZvcm1hdDogXCJKV1RcIlxcbiAvLyBvciBBUEkgVG9rZW4gZXRjLlxcbn1cXG5cXG5Zb3UgY2FuIGFsc28gZGVmaW5lIFwic2VjdXJpdHlPYmplY3RzXCIgdGhpcyB3YXksIGlmIHlvdSB3YW50IHRvIG1ha2UgdGhlIGVuZHBvaW50IHN1cHBvcnQgbXVsdGlwbGUgbW9kZXMgb2YgYXV0aGVudGljYXRpb24uXFxuXFxuYFxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuXG4gICAgc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbYXV0aE5hbWVdID0gKG13IGFzIGFueSkuc2VjdXJpdHlPYmplY3RzIHx8IFtcbiAgICAgIHtcbiAgICAgICAgW2F1dGhOYW1lXTogW10sXG4gICAgICB9LFxuICAgIF1cbiAgfVxuXG4gIGNvbnN0IGdsb2JhbFNjaGVtYXMgPSB7fVxuICBmb3IgKGNvbnN0IFtzY2hlbWFOYW1lLCB6b2RTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgIGdsb2JhbFNldHVwUGFyYW1zLmdsb2JhbFNjaGVtYXMgPz8ge31cbiAgKSkge1xuICAgIGdsb2JhbFNjaGVtYXNbc2NoZW1hTmFtZV0gPSBnZW5lcmF0ZVNjaGVtYSh6b2RTY2hlbWEpXG4gIH1cblxuICAvLyBCdWlsZCBPcGVuQVBJIHNwZWNcbiAgY29uc3QgYnVpbGRlciA9IE9wZW5BcGlCdWlsZGVyLmNyZWF0ZSh7XG4gICAgb3BlbmFwaTogXCIzLjAuMFwiLFxuICAgIGluZm86IHtcbiAgICAgIHRpdGxlOiBnbG9iYWxTZXR1cFBhcmFtcy5hcGlOYW1lLFxuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgIH0sXG4gICAgc2VydmVyczogW1xuICAgICAge1xuICAgICAgICB1cmw6IGdsb2JhbFNldHVwUGFyYW1zLnByb2R1Y3Rpb25TZXJ2ZXJVcmwgfHwgXCJodHRwczovL2V4YW1wbGUuY29tXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdGFnczogdGFncy5tYXAoKHRhZykgPT4gKHsgbmFtZTogdGFnLm5hbWUsIGRlc2NyaXB0aW9uOiB0YWcuZGVzY3JpcHRpb24gfSkpLFxuICAgIHBhdGhzOiB7fSxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICBzZWN1cml0eVNjaGVtZXMsXG4gICAgICBzY2hlbWFzOiBnbG9iYWxTY2hlbWFzLFxuICAgIH0sXG4gIH0pXG5cbiAgZm9yIChjb25zdCBbXG4gICAgZmlsZV9wYXRoLFxuICAgIHsgc2V0dXBQYXJhbXMsIHJvdXRlU3BlYywgcm91dGU6IHJvdXRlUGF0aCB9LFxuICBdIG9mIGZpbGVwYXRoVG9Sb3V0ZUZuKSB7XG4gICAgY29uc3QgaXNQb3N0T3JQdXRPclBhdGNoID0gW1wiUE9TVFwiLCBcIlBVVFwiLCBcIlBBVENIXCJdLnNvbWUoKG1ldGhvZCkgPT5cbiAgICAgIHJvdXRlU3BlYy5tZXRob2RzLmluY2x1ZGVzKG1ldGhvZClcbiAgICApXG4gICAgLy8gVE9ETzogc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhXG5cbiAgICAvLyBoYW5kbGUgYm9keVxuICAgIGxldCBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYVxuICAgIGlmIChpc1Bvc3RPclB1dE9yUGF0Y2gpIHtcbiAgICAgIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLmpzb25Cb2R5ID8/IHJvdXRlU3BlYy5jb21tb25QYXJhbXNcblxuICAgICAgaWYgKHJvdXRlU3BlYy5qc29uQm9keSAmJiByb3V0ZVNwZWMuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIGJvZHlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLmpzb25Cb2R5Lm1lcmdlKFxuICAgICAgICAgIHJvdXRlU3BlYy5jb21tb25QYXJhbXNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBib2R5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5qc29uQm9keVxuICAgIH1cblxuICAgIC8vIGhhbmRsZSBxdWVyeVxuICAgIGxldCBxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWFcbiAgICBpZiAoaXNQb3N0T3JQdXRPclBhdGNoKSB7XG4gICAgICBxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXNcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnlfdG9fZ2VuZXJhdGVfc2NoZW1hID0gcm91dGVTcGVjLnF1ZXJ5UGFyYW1zID8/IHJvdXRlU3BlYy5jb21tb25QYXJhbXNcblxuICAgICAgaWYgKHJvdXRlU3BlYy5xdWVyeVBhcmFtcyAmJiByb3V0ZVNwZWMuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSA9IHJvdXRlU3BlYy5xdWVyeVBhcmFtcy5tZXJnZShcbiAgICAgICAgICByb3V0ZVNwZWMuY29tbW9uUGFyYW1zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBERUxFVEUgYW5kIEdFVCBjYW5ub3QgaGF2ZSBhIGJvZHlcbiAgICBsZXQgbWV0aG9kcyA9IHJvdXRlU3BlYy5tZXRob2RzXG5cbiAgICBpZiAocm91dGVTcGVjLm1ldGhvZHMuaW5jbHVkZXMoXCJERUxFVEVcIikgJiYgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEpIHtcbiAgICAgIG1ldGhvZHMgPSBtZXRob2RzLmZpbHRlcigobSkgPT4gbSAhPT0gXCJERUxFVEVcIilcbiAgICB9XG5cbiAgICBpZiAocm91dGVTcGVjLm1ldGhvZHMuaW5jbHVkZXMoXCJHRVRcIikgJiYgYm9keV90b19nZW5lcmF0ZV9zY2hlbWEpIHtcbiAgICAgIG1ldGhvZHMgPSBtZXRob2RzLmZpbHRlcigobSkgPT4gbSAhPT0gXCJHRVRcIilcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgY2hhbGsueWVsbG93KGBTa2lwcGluZyByb3V0ZSAke3JvdXRlUGF0aH0gYmVjYXVzZSBpdCBoYXMgbm8gbWV0aG9kcy5gKVxuICAgICAgKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBsZXQgZGVzY3JpcHRpb24gPSByb3V0ZVNwZWMuZGVzY3JpcHRpb25cbiAgICBsZXQgYWRkaXRpb25hbE1ldGFkYXRhID0ge31cblxuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgdHJpbW1lZERlc2NyaXB0aW9uID0gZGVkZW50KGRlc2NyaXB0aW9uKS50cmltKClcblxuICAgICAgaWYgKHRlc3RGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pKSB7XG4gICAgICAgIGNvbnN0IHsgYXR0cmlidXRlcywgYm9keSB9ID0gcGFyc2VGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pXG4gICAgICAgIGFkZGl0aW9uYWxNZXRhZGF0YSA9IGF0dHJpYnV0ZXNcbiAgICAgICAgZGVzY3JpcHRpb24gPSBib2R5LnRyaW0oKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVzY3JpcHRpb24gPSB0cmltbWVkRGVzY3JpcHRpb25cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZTogT3BlcmF0aW9uT2JqZWN0ID0ge1xuICAgICAgLi4ucm91dGVTcGVjLm9wZW5BcGlNZXRhZGF0YSxcbiAgICAgIC4uLmFkZGl0aW9uYWxNZXRhZGF0YSxcbiAgICAgIHN1bW1hcnk6IHJvdXRlUGF0aCxcbiAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgIDIwMDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk9LXCIsXG4gICAgICAgIH0sXG4gICAgICAgIDQwMDoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkJhZCBSZXF1ZXN0XCIsXG4gICAgICAgIH0sXG4gICAgICAgIDQwMToge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlVuYXV0aG9yaXplZFwiLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNlY3VyaXR5OiBBcnJheS5pc0FycmF5KHJvdXRlU3BlYy5hdXRoKVxuICAgICAgICA/IHJvdXRlU3BlYy5hdXRoXG4gICAgICAgICAgICAubWFwKChhdXRoVHlwZSkgPT4gc2VjdXJpdHlPYmplY3RzRm9yQXV0aFR5cGVbYXV0aFR5cGVdKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICA6IHNlY3VyaXR5T2JqZWN0c0ZvckF1dGhUeXBlW3JvdXRlU3BlYy5hdXRoXSxcbiAgICB9XG5cbiAgICBpZiAoYm9keV90b19nZW5lcmF0ZV9zY2hlbWEpIHtcbiAgICAgIHJvdXRlLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICAgIHNjaGVtYTogZ2VuZXJhdGVTY2hlbWEoYm9keV90b19nZW5lcmF0ZV9zY2hlbWEgYXMgYW55KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChxdWVyeV90b19nZW5lcmF0ZV9zY2hlbWEpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGdlbmVyYXRlU2NoZW1hKHF1ZXJ5X3RvX2dlbmVyYXRlX3NjaGVtYSBhcyBhbnkpXG4gICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyczogUGFyYW1ldGVyT2JqZWN0W10gPSBPYmplY3Qua2V5cyhcbiAgICAgICAgICBzY2hlbWEucHJvcGVydGllcyBhcyBhbnlcbiAgICAgICAgKS5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGluOiBcInF1ZXJ5XCIsXG4gICAgICAgICAgICBzY2hlbWE6IHNjaGVtYS5wcm9wZXJ0aWVzIVtuYW1lXSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBzY2hlbWEucmVxdWlyZWQ/LmluY2x1ZGVzKG5hbWUpLFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByb3V0ZS5wYXJhbWV0ZXJzID0gcGFyYW1ldGVyc1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsganNvblJlc3BvbnNlIH0gPSByb3V0ZVNwZWNcbiAgICBjb25zdCB7IGFkZE9rU3RhdHVzID0gdHJ1ZSB9ID0gc2V0dXBQYXJhbXNcblxuICAgIGlmIChqc29uUmVzcG9uc2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWpzb25SZXNwb25zZS5fZGVmIHx8XG4gICAgICAgICFqc29uUmVzcG9uc2UuX2RlZi50eXBlTmFtZSB8fFxuICAgICAgICBqc29uUmVzcG9uc2UuX2RlZi50eXBlTmFtZSAhPT0gXCJab2RPYmplY3RcIlxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgICBgU2tpcHBpbmcgcm91dGUgJHtyb3V0ZVBhdGh9IGJlY2F1c2UgdGhlIHJlc3BvbnNlIGlzIG5vdCBhIFpvZE9iamVjdC5gXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlU2NoZW1hID0gZ2VuZXJhdGVTY2hlbWEoXG4gICAgICAgIGFkZE9rU3RhdHVzICYmIGpzb25SZXNwb25zZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0XG4gICAgICAgICAgPyBqc29uUmVzcG9uc2UuZXh0ZW5kKHsgb2s6IHouYm9vbGVhbigpIH0pXG4gICAgICAgICAgOiBqc29uUmVzcG9uc2VcbiAgICAgIClcblxuICAgICAgY29uc3Qgc2NoZW1hV2l0aFJlZmVyZW5jZXMgPSBlbWJlZFNjaGVtYVJlZmVyZW5jZXMoXG4gICAgICAgIHJlc3BvbnNlU2NoZW1hLFxuICAgICAgICBnbG9iYWxTY2hlbWFzXG4gICAgICApXG5cbiAgICAgIC8vIFRPRE86IHdlIHNob3VsZCBub3QgaGFyZGNvZGUgMjAwIGhlcmVcbiAgICAgIHJvdXRlLnJlc3BvbnNlc1syMDBdLmNvbnRlbnQgPSB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiBzY2hlbWFXaXRoUmVmZXJlbmNlcyxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICByb3V0ZS50YWdzID0gW11cbiAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgICBpZiAodGFnLmRvZXNSb3V0ZUhhdmVUYWcgJiYgdGFnLmRvZXNSb3V0ZUhhdmVUYWcocm91dGUuc3VtbWFyeSB8fCBcIlwiKSkge1xuICAgICAgICByb3V0ZS50YWdzLnB1c2godGFnLm5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kc01hcHBlZFRvRmVyblNka01ldGFkYXRhID0gYXdhaXQgbWFwTWV0aG9kc1RvRmVyblNka01ldGFkYXRhKHtcbiAgICAgIG1ldGhvZHMsXG4gICAgICBwYXRoOiByb3V0ZVBhdGgsXG4gICAgICBzZGtSZXR1cm5WYWx1ZTogcm91dGVTcGVjLnNka1JldHVyblZhbHVlLFxuICAgIH0pXG5cbiAgICAvLyBTb21lIHJvdXRlcyBhY2NlcHQgbXVsdGlwbGUgbWV0aG9kc1xuICAgIGJ1aWxkZXIuYWRkUGF0aChyb3V0ZVBhdGgsIHtcbiAgICAgIC4uLm1ldGhvZHNcbiAgICAgICAgLm1hcCgobWV0aG9kKSA9PiAoe1xuICAgICAgICAgIFttZXRob2QudG9Mb3dlckNhc2UoKV06IHtcbiAgICAgICAgICAgIC4uLm1ldGhvZHNNYXBwZWRUb0Zlcm5TZGtNZXRhZGF0YVttZXRob2RdLFxuICAgICAgICAgICAgLi4ucm91dGUsXG4gICAgICAgICAgICBvcGVyYXRpb25JZDogYCR7dHJhbnNmb3JtUGF0aFRvT3BlcmF0aW9uSWQocm91dGVQYXRoKX0ke3Bhc2NhbENhc2UoXG4gICAgICAgICAgICAgIG1ldGhvZFxuICAgICAgICAgICAgKX1gLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKVxuICAgICAgICAucmVkdWNlUmlnaHQoKGFjYywgY3VyKSA9PiAoeyAuLi5hY2MsIC4uLmN1ciB9KSwge30pLFxuICAgIH0pXG4gIH1cblxuICBpZiAob3V0cHV0RmlsZSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvdXRwdXRGaWxlLCBidWlsZGVyLmdldFNwZWNBc0pzb24odW5kZWZpbmVkLCAyKSlcbiAgfVxuXG4gIHJldHVybiBidWlsZGVyLmdldFNwZWNBc0pzb24odW5kZWZpbmVkLCAyKVxufVxuIiwgImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgUm91dGVTcGVjLCBTZXR1cFBhcmFtcyB9IGZyb20gXCIuLi8uLi90eXBlc1wiXG5pbXBvcnQgeyBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZSB9IGZyb20gXCIuL2RlZmF1bHQtbWFwLWZpbGUtcGF0aC10by1odHRwLXJvdXRlXCJcblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUluZm8ge1xuICBzZXR1cFBhcmFtczogU2V0dXBQYXJhbXNcbiAgcm91dGVTcGVjOiBSb3V0ZVNwZWNcbiAgcm91dGVGbjogRnVuY3Rpb25cbiAgcm91dGU6IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VSb3V0ZXNJblBhY2thZ2UgPSBhc3luYyAob3B0czoge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgcGF0aEdsb2I/OiBzdHJpbmdcbiAgYXBpUHJlZml4Pzogc3RyaW5nXG4gIG1hcEZpbGVQYXRoVG9IVFRQUm91dGU/OiAoZmlsZV9wYXRoOiBzdHJpbmcpID0+IHN0cmluZ1xuICBpbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzPzogYm9vbGVhblxufSk6IFByb21pc2U8TWFwPHN0cmluZywgUm91dGVJbmZvPj4gPT4ge1xuICBjb25zdCBjaGFsayA9IChhd2FpdCBpbXBvcnQoXCJjaGFsa1wiKSkuZGVmYXVsdFxuICBjb25zdCBnbG9iYnkgPSAoYXdhaXQgaW1wb3J0KFwiZ2xvYmJ5XCIpKS5nbG9iYnlcbiAgY29uc3Qge1xuICAgIHBhY2thZ2VEaXIsXG4gICAgcGF0aEdsb2IgPSBcIi9wYWdlcy9hcGkvKiovKi50c1wiLFxuICAgIG1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPSBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZShvcHRzLmFwaVByZWZpeCksXG4gIH0gPSBvcHRzXG4gIC8vIExvYWQgYWxsIHJvdXRlIHNwZWNzXG4gIGNvbnN0IGZ1bGxQYXRoR2xvYiA9IHBhdGgucG9zaXguam9pbihwYWNrYWdlRGlyLCBwYXRoR2xvYilcbiAgY29uc29sZS5sb2coYHNlYXJjaGluZyBcIiR7ZnVsbFBhdGhHbG9ifVwiLi4uYClcbiAgY29uc3QgZmlsZXBhdGhzID0gYXdhaXQgZ2xvYmJ5KGAke2Z1bGxQYXRoR2xvYn1gKVxuICBjb25zb2xlLmxvZyhgZm91bmQgJHtmaWxlcGF0aHMubGVuZ3RofSBmaWxlc2ApXG4gIGlmIChmaWxlcGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBObyBmaWxlcyBmb3VuZCBhdCBcIiR7ZnVsbFBhdGhHbG9ifVwiYClcbiAgfVxuICBjb25zdCBmaWxlcGF0aFRvUm91dGVGbiA9IG5ldyBNYXA8c3RyaW5nLCBSb3V0ZUluZm8+KClcblxuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlcGF0aHMubWFwKGFzeW5jIChwKSA9PiB7XG4gICAgICBjb25zdCB7IGRlZmF1bHQ6IHJvdXRlRm4gfSA9IGF3YWl0IHJlcXVpcmUocGF0aC5yZXNvbHZlKHApKVxuXG4gICAgICBpZiAocm91dGVGbikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcm91dGVGbi5fcm91dGVTcGVjPy5leGNsdWRlRnJvbU9wZW5BcGkgJiZcbiAgICAgICAgICAhb3B0cy5pbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgY2hhbGsuZ3JheShcbiAgICAgICAgICAgICAgYElnbm9yaW5nIFwiJHtwfSBiZWNhdXNlIGl0IHdhcyBleGNsdWRlZCBmcm9tIE9wZW5BUEkgZ2VuZXJhdGlvblwiYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJvdXRlRm4uX3NldHVwUGFyYW1zKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICAgICAgICBgSWdub3JpbmcgXCIke3B9XCIgYmVjYXVzZSBpdCB3YXNuJ3QgY3JlYXRlZCB3aXRoIHdpdGhSb3V0ZVNwZWNgXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGZpbGVwYXRoVG9Sb3V0ZUZuLnNldChwLCB7XG4gICAgICAgICAgc2V0dXBQYXJhbXM6IHJvdXRlRm4uX3NldHVwUGFyYW1zLFxuICAgICAgICAgIHJvdXRlU3BlYzogcm91dGVGbi5fcm91dGVTcGVjLFxuICAgICAgICAgIHJvdXRlOiBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlKHApLFxuICAgICAgICAgIHJvdXRlRm4sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oY2hhbGsueWVsbG93KGBDb3VsZG4ndCBmaW5kIHJvdXRlICR7cH1gKSlcbiAgICAgIH1cbiAgICB9KVxuICApXG5cbiAgcmV0dXJuIGZpbGVwYXRoVG9Sb3V0ZUZuXG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5leHBvcnQgY29uc3QgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPVxuICAoYXBpX3ByZWZpeDogc3RyaW5nID0gXCIvYXBpXCIpID0+XG4gIChmaWxlX3BhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvdXRlID0gZmlsZV9wYXRoXG4gICAgICAvLyByZXBsYWNlIC4vIGlmIGl0IHN0YXJ0cyB3aXRoIC4vXG4gICAgICAucmVwbGFjZSgvXlxcLlxcLy8sIFwiL1wiKVxuICAgICAgLy8gcmVwbGFjZSBzdGFydGluZyAvXG4gICAgICAucmVwbGFjZSgvXlxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC9zcmMgaWYgaXQgc3RhcnRzIHdpdGggL3NyY1xuICAgICAgLnJlcGxhY2UoL15zcmNcXC8vLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSAvcGFnZXMgaWYgaXQgc3RhcnRzIHdpdGggL3BhZ2VzXG4gICAgICAucmVwbGFjZSgvXnBhZ2VzXFwvLywgXCJcIilcbiAgICAgIC8vIHJlcGxhY2UgL2FwaSBpZiBpdCBzdGFydHMgd2l0aCAvYXBpXG4gICAgICAucmVwbGFjZSgvXmFwaVxcLy8sIFwiXCIpXG4gICAgICAvLyByZXBsYWNlIC50cyBpZiBpdCBlbmRzIHdpdGggLnRzXG4gICAgICAucmVwbGFjZSgvXFwudHMkLywgXCJcIilcbiAgICAgIC8vIHJlbW92ZSBwdWJsaWMgcmVmZXJlbmNlXG4gICAgICAucmVwbGFjZShcInB1YmxpY1wiLCBcIlwiKVxuICAgICAgLy8gcmVwbGFjZSBpbmRleCBpZiBpdCBlbmRzIHdpdGggaW5kZXhcbiAgICAgIC5yZXBsYWNlKC9cXC9cXGluZGV4KD8hLikvLCBcIlwiKVxuXG4gICAgcmV0dXJuIHBhdGguam9pbihhcGlfcHJlZml4LCByb3V0ZSlcbiAgfVxuIiwgIi8qKlxuICogWm9kIE9wZW5BUEkgR2VuZXJhdG9yLlxuICpcbiAqIFZlbmRvcmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FuYXRpbmUvem9kLXBsdWdpbnNcbiAqXG4gKiBNSVQgTGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAyMiBCcmlhbiBNY0JyaWRlXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNjaGVtYU9iamVjdCwgU2NoZW1hT2JqZWN0VHlwZSB9IGZyb20gXCJvcGVuYXBpMy10cy9vYXMzMVwiXG5pbXBvcnQgbWVyZ2UgZnJvbSBcInRzLWRlZXBtZXJnZVwiXG5pbXBvcnQgeyBBbnlab2RPYmplY3QsIHosIFpvZFR5cGVBbnkgfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IHBhcnNlRnJvbnRNYXR0ZXIsIHRlc3RGcm9udE1hdHRlciB9IGZyb20gXCIuL2Zyb250LW1hdHRlclwiXG5pbXBvcnQgZGVkZW50IGZyb20gXCJkZWRlbnRcIlxuXG50eXBlIEFuYXRpbmVTY2hlbWFPYmplY3QgPSBTY2hlbWFPYmplY3QgJiB7IGhpZGVEZWZpbml0aW9ucz86IHN0cmluZ1tdIH1cblxuZXhwb3J0IGludGVyZmFjZSBPcGVuQXBpWm9kQW55IGV4dGVuZHMgWm9kVHlwZUFueSB7XG4gIG1ldGFPcGVuQXBpPzogQW5hdGluZVNjaGVtYU9iamVjdCB8IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxufVxuXG5pbnRlcmZhY2UgT3BlbkFwaVpvZEFueU9iamVjdCBleHRlbmRzIEFueVpvZE9iamVjdCB7XG4gIG1ldGFPcGVuQXBpPzogQW5hdGluZVNjaGVtYU9iamVjdCB8IEFuYXRpbmVTY2hlbWFPYmplY3RbXVxufVxuXG5pbnRlcmZhY2UgUGFyc2luZ0FyZ3M8VD4ge1xuICB6b2RSZWY6IFRcbiAgc2NoZW1hczogQW5hdGluZVNjaGVtYU9iamVjdFtdXG4gIHVzZU91dHB1dD86IGJvb2xlYW5cbiAgaGlkZURlZmluaXRpb25zPzogc3RyaW5nW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZEFwaTxUIGV4dGVuZHMgT3BlbkFwaVpvZEFueT4oXG4gIHNjaGVtYTogVCxcbiAgc2NoZW1hT2JqZWN0OiBBbmF0aW5lU2NoZW1hT2JqZWN0ID0ge31cbik6IFQge1xuICBzY2hlbWEubWV0YU9wZW5BcGkgPSBPYmplY3QuYXNzaWduKHNjaGVtYS5tZXRhT3BlbkFwaSB8fCB7fSwgc2NoZW1hT2JqZWN0KVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmZ1bmN0aW9uIGl0ZXJhdGVab2RPYmplY3Qoe1xuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbiAgaGlkZURlZmluaXRpb25zLFxufTogUGFyc2luZ0FyZ3M8T3BlbkFwaVpvZEFueU9iamVjdD4pIHtcbiAgY29uc3QgcmVkdWNlZCA9IE9iamVjdC5rZXlzKHpvZFJlZi5zaGFwZSlcbiAgICAuZmlsdGVyKChrZXkpID0+IGhpZGVEZWZpbml0aW9ucz8uaW5jbHVkZXMoa2V5KSA9PT0gZmFsc2UpXG4gICAgLnJlZHVjZShcbiAgICAgIChjYXJyeSwga2V5KSA9PiAoe1xuICAgICAgICAuLi5jYXJyeSxcbiAgICAgICAgW2tleV06IGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5zaGFwZVtrZXldLCB1c2VPdXRwdXQpLFxuICAgICAgfSksXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBTY2hlbWFPYmplY3Q+XG4gICAgKVxuXG4gIHJldHVybiByZWR1Y2VkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmOiBPcGVuQXBpWm9kQW55KTogU2NoZW1hT2JqZWN0IHtcbiAgaWYgKCF6b2RSZWYuZGVzY3JpcHRpb24pIHJldHVybiB7fVxuICBjb25zdCB0cmltbWVkRGVzY3JpcHRpb24gPSBkZWRlbnQoem9kUmVmLmRlc2NyaXB0aW9uKVxuICBpZiAoIXRlc3RGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pKVxuICAgIHJldHVybiB7IGRlc2NyaXB0aW9uOiB6b2RSZWYuZGVzY3JpcHRpb24gfVxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGJvZHkgfSA9IHBhcnNlRnJvbnRNYXR0ZXIodHJpbW1lZERlc2NyaXB0aW9uKVxuICBjb25zdCBvdXRwdXQ6IFNjaGVtYU9iamVjdCA9IHt9XG4gIGlmIChib2R5LnRyaW0oKSkgb3V0cHV0LmRlc2NyaXB0aW9uID0gYm9keS50cmltKClcbiAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiICYmIGF0dHJpYnV0ZXMgIT09IG51bGwpIHtcbiAgICBpZiAoXCJkZXByZWNhdGVkXCIgaW4gYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQpIHtcbiAgICAgIG91dHB1dC5kZXByZWNhdGVkID0gdHJ1ZVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuICAgICAgb3V0cHV0W2B4LSR7a2V5fWBdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dFxufVxuXG5mdW5jdGlvbiBwYXJzZVRyYW5zZm9ybWF0aW9uKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZFRyYW5zZm9ybWVyPG5ldmVyPiB8IHouWm9kRWZmZWN0czxuZXZlcj4+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgaW5wdXQgPSBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5zY2hlbWEsIHVzZU91dHB1dClcblxuICBsZXQgb3V0cHV0ID0gXCJ1bmRlZmluZWRcIlxuICBpZiAodXNlT3V0cHV0ICYmIHpvZFJlZi5fZGVmLmVmZmVjdCkge1xuICAgIGNvbnN0IGVmZmVjdCA9XG4gICAgICB6b2RSZWYuX2RlZi5lZmZlY3QudHlwZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IHpvZFJlZi5fZGVmLmVmZmVjdCA6IG51bGxcbiAgICBpZiAoZWZmZWN0ICYmIFwidHJhbnNmb3JtXCIgaW4gZWZmZWN0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBvdXRwdXQgPSB0eXBlb2YgZWZmZWN0LnRyYW5zZm9ybShcbiAgICAgICAgICBbXCJpbnRlZ2VyXCIsIFwibnVtYmVyXCJdLmluY2x1ZGVzKGAke2lucHV0LnR5cGV9YClcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBcInN0cmluZ1wiID09PSBpbnB1dC50eXBlXG4gICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgIDogXCJib29sZWFuXCIgPT09IGlucHV0LnR5cGVcbiAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgIDogXCJvYmplY3RcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyB7fVxuICAgICAgICAgICAgOiBcIm51bGxcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IFwiYXJyYXlcIiA9PT0gaW5wdXQudHlwZVxuICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgeyBhZGRJc3N1ZTogKCkgPT4gdW5kZWZpbmVkLCBwYXRoOiBbXSB9IC8vIFRPRE86IERpc2NvdmVyIGlmIGNvbnRleHQgaXMgbmVjZXNzYXJ5IGhlcmVcbiAgICAgICAgKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiovXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICAuLi4oem9kUmVmLmRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbjogem9kUmVmLmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAuLi5pbnB1dCxcbiAgICAgIC4uLihbXCJudW1iZXJcIiwgXCJzdHJpbmdcIiwgXCJib29sZWFuXCIsIFwibnVsbFwiXS5pbmNsdWRlcyhvdXRwdXQpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogb3V0cHV0IGFzIFwibnVtYmVyXCIgfCBcInN0cmluZ1wiIHwgXCJib29sZWFuXCIgfCBcIm51bGxcIixcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0sXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nKHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RTdHJpbmc+KTogU2NoZW1hT2JqZWN0IHtcbiAgY29uc3QgYmFzZVNjaGVtYTogU2NoZW1hT2JqZWN0ID0ge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gIH1cbiAgY29uc3QgeyBjaGVja3MgPSBbXSB9ID0gem9kUmVmLl9kZWZcbiAgY2hlY2tzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICBzd2l0Y2ggKGl0ZW0ua2luZCkge1xuICAgICAgY2FzZSBcImVtYWlsXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJlbWFpbFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwidXVpZFwiOlxuICAgICAgICBiYXNlU2NoZW1hLmZvcm1hdCA9IFwidXVpZFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiY3VpZFwiOlxuICAgICAgICBiYXNlU2NoZW1hLmZvcm1hdCA9IFwiY3VpZFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwidXJsXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJ1cmlcIlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgIGJhc2VTY2hlbWEuZm9ybWF0ID0gXCJkYXRlLXRpbWVcIlxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImxlbmd0aFwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbkxlbmd0aCA9IGl0ZW0udmFsdWVcbiAgICAgICAgYmFzZVNjaGVtYS5tYXhMZW5ndGggPSBpdGVtLnZhbHVlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgIGJhc2VTY2hlbWEubWF4TGVuZ3RoID0gaXRlbS52YWx1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbkxlbmd0aCA9IGl0ZW0udmFsdWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJyZWdleFwiOlxuICAgICAgICBiYXNlU2NoZW1hLnBhdHRlcm4gPSBpdGVtLnJlZ2V4LnNvdXJjZVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG1lcmdlKGJhc2VTY2hlbWEsIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gcGFyc2VOdW1iZXIoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZE51bWJlcj4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBiYXNlU2NoZW1hOiBTY2hlbWFPYmplY3QgPSB7XG4gICAgdHlwZTogXCJudW1iZXJcIixcbiAgICBmb3JtYXQ6IFwiZmxvYXRcIixcbiAgfVxuICBjb25zdCB7IGNoZWNrcyA9IFtdIH0gPSB6b2RSZWYuX2RlZlxuICBjaGVja3MuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgIHN3aXRjaCAoaXRlbS5raW5kKSB7XG4gICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgIGJhc2VTY2hlbWEubWF4aW11bSA9IGl0ZW0udmFsdWVcbiAgICAgICAgLy8gVE9ETzogb3B0aW9uIHRvIG1ha2UgdGhpcyBhbHdheXMgZXhwbGljaXQ/IChmYWxzZSBpbnN0ZWFkIG9mIG5vbi1leGlzdGVudClcbiAgICAgICAgaWYgKCFpdGVtLmluY2x1c2l2ZSkgYmFzZVNjaGVtYS5leGNsdXNpdmVNYXhpbXVtID0gaXRlbS52YWx1ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICBiYXNlU2NoZW1hLm1pbmltdW0gPSBpdGVtLnZhbHVlXG4gICAgICAgIGlmICghaXRlbS5pbmNsdXNpdmUpIGJhc2VTY2hlbWEuZXhjbHVzaXZlTWluaW11bSA9IGl0ZW0udmFsdWVcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJpbnRcIjpcbiAgICAgICAgYmFzZVNjaGVtYS50eXBlID0gXCJpbnRlZ2VyXCJcbiAgICAgICAgZGVsZXRlIGJhc2VTY2hlbWEuZm9ybWF0XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibXVsdGlwbGVPZlwiOlxuICAgICAgICBiYXNlU2NoZW1hLm11bHRpcGxlT2YgPSBpdGVtLnZhbHVlXG4gICAgfVxuICB9KVxuICByZXR1cm4gbWVyZ2UoYmFzZVNjaGVtYSwgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLCAuLi5zY2hlbWFzKVxufVxuXG5mdW5jdGlvbiBnZXRFeGNsdWRlZERlZmluaXRpb25zRnJvbVNjaGVtYShcbiAgc2NoZW1hczogQW5hdGluZVNjaGVtYU9iamVjdFtdXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGV4Y2x1ZGVkRGVmaW5pdGlvbnM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS5oaWRlRGVmaW5pdGlvbnMpKSB7XG4gICAgICBleGNsdWRlZERlZmluaXRpb25zLnB1c2goLi4uc2NoZW1hLmhpZGVEZWZpbml0aW9ucylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhjbHVkZWREZWZpbml0aW9uc1xufVxuXG5mdW5jdGlvbiBwYXJzZU9iamVjdCh7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbiAgdXNlT3V0cHV0LFxuICBoaWRlRGVmaW5pdGlvbnMsXG59OiBQYXJzaW5nQXJnczxcbiAgei5ab2RPYmplY3Q8bmV2ZXIsIFwicGFzc3Rocm91Z2hcIiB8IFwic3RyaWN0XCIgfCBcInN0cmlwXCI+XG4+KTogU2NoZW1hT2JqZWN0IHtcbiAgbGV0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBTY2hlbWFPYmplY3RbXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiXVxuXG4gIC8vIGBjYXRjaGFsbGAgb2J2aWF0ZXMgYHN0cmljdGAsIGBzdHJpcGAsIGFuZCBgcGFzc3Rocm91Z2hgXG4gIGlmIChcbiAgICAhKFxuICAgICAgem9kUmVmLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiB6LlpvZE5ldmVyIHx8XG4gICAgICB6b2RSZWYuX2RlZi5jYXRjaGFsbD8uX2RlZi50eXBlTmFtZSA9PT0gXCJab2ROZXZlclwiXG4gICAgKVxuICApXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXMgPSBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5jYXRjaGFsbCwgdXNlT3V0cHV0KVxuICBlbHNlIGlmICh6b2RSZWYuX2RlZi51bmtub3duS2V5cyA9PT0gXCJwYXNzdGhyb3VnaFwiKVxuICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gdHJ1ZVxuICBlbHNlIGlmICh6b2RSZWYuX2RlZi51bmtub3duS2V5cyA9PT0gXCJzdHJpY3RcIikgYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZVxuXG4gIC8vIFNvIHRoYXQgYHVuZGVmaW5lZGAgdmFsdWVzIGRvbid0IGVuZCB1cCBpbiB0aGUgc2NoZW1hIGFuZCBiZSB3ZWlyZFxuICBhZGRpdGlvbmFsUHJvcGVydGllcyA9XG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXMgIT0gbnVsbCA/IHsgYWRkaXRpb25hbFByb3BlcnRpZXMgfSA6IHt9XG5cbiAgY29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoXG4gICAgKHpvZFJlZiBhcyB6LkFueVpvZE9iamVjdCkuc2hhcGVcbiAgKS5maWx0ZXIoKGtleSkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSAoem9kUmVmIGFzIHouQW55Wm9kT2JqZWN0KS5zaGFwZVtrZXldXG4gICAgcmV0dXJuIChcbiAgICAgICEoXG4gICAgICAgIGl0ZW0uaXNPcHRpb25hbCgpIHx8XG4gICAgICAgIGl0ZW0gaW5zdGFuY2VvZiB6LlpvZERlZmF1bHQgfHxcbiAgICAgICAgaXRlbS5fZGVmLnR5cGVOYW1lID09PSBcIlpvZERlZmF1bHRcIlxuICAgICAgKSAmJiAhKGl0ZW0gaW5zdGFuY2VvZiB6LlpvZE5ldmVyIHx8IGl0ZW0uX2RlZi50eXBlTmFtZSA9PT0gXCJab2REZWZhdWx0XCIpXG4gICAgKVxuICB9KVxuXG4gIGNvbnN0IHJlcXVpcmVkID1cbiAgICByZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCA/IHsgcmVxdWlyZWQ6IHJlcXVpcmVkUHJvcGVydGllcyB9IDoge31cblxuICByZXR1cm4gbWVyZ2UoXG4gICAge1xuICAgICAgdHlwZTogXCJvYmplY3RcIiBhcyBTY2hlbWFPYmplY3RUeXBlLFxuICAgICAgcHJvcGVydGllczogaXRlcmF0ZVpvZE9iamVjdCh7XG4gICAgICAgIHpvZFJlZjogem9kUmVmIGFzIE9wZW5BcGlab2RBbnlPYmplY3QsXG4gICAgICAgIHNjaGVtYXMsXG4gICAgICAgIHVzZU91dHB1dCxcbiAgICAgICAgaGlkZURlZmluaXRpb25zOiBnZXRFeGNsdWRlZERlZmluaXRpb25zRnJvbVNjaGVtYShzY2hlbWFzKSxcbiAgICAgIH0pLFxuICAgICAgLi4ucmVxdWlyZWQsXG4gICAgICAuLi5hZGRpdGlvbmFsUHJvcGVydGllcyxcbiAgICAgIC4uLmhpZGVEZWZpbml0aW9ucyxcbiAgICB9LFxuICAgIHpvZFJlZi5kZXNjcmlwdGlvblxuICAgICAgPyB7IGRlc2NyaXB0aW9uOiB6b2RSZWYuZGVzY3JpcHRpb24sIGhpZGVEZWZpbml0aW9ucyB9XG4gICAgICA6IHt9LFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlY29yZCh7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RSZWNvcmQ+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIgYXMgU2NoZW1hT2JqZWN0VHlwZSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOlxuICAgICAgICB6b2RSZWYuX2RlZi52YWx1ZVR5cGUgaW5zdGFuY2VvZiB6LlpvZFVua25vd25cbiAgICAgICAgICA/IHt9XG4gICAgICAgICAgOiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi52YWx1ZVR5cGUsIHVzZU91dHB1dCksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlQmlnSW50KHtcbiAgem9kUmVmLFxuICBzY2hlbWFzLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RCaWdJbnQ+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHsgdHlwZTogXCJpbnRlZ2VyXCIgYXMgU2NoZW1hT2JqZWN0VHlwZSwgZm9ybWF0OiBcImludDY0XCIgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbGVhbih7XG4gIHpvZFJlZixcbiAgc2NoZW1hcyxcbn06IFBhcnNpbmdBcmdzPHouWm9kQm9vbGVhbj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgeyB0eXBlOiBcImJvb2xlYW5cIiBhcyBTY2hlbWFPYmplY3RUeXBlIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZURhdGUoeyB6b2RSZWYsIHNjaGVtYXMgfTogUGFyc2luZ0FyZ3M8ei5ab2REYXRlPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7IHR5cGU6IFwic3RyaW5nXCIgYXMgU2NoZW1hT2JqZWN0VHlwZSwgZm9ybWF0OiBcImRhdGUtdGltZVwiIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZU51bGwoeyB6b2RSZWYsIHNjaGVtYXMgfTogUGFyc2luZ0FyZ3M8ei5ab2ROdWxsPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VPcHRpb25hbCh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RPcHRpb25hbDxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLnVud3JhcCgpLCB1c2VPdXRwdXQpLFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VOdWxsYWJsZSh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2ROdWxsYWJsZTxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBzY2hlbWEgPSBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYudW53cmFwKCksIHVzZU91dHB1dClcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHsgLi4uc2NoZW1hLCB0eXBlOiBzY2hlbWEudHlwZSwgbnVsbGFibGU6IHRydWUgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVmYXVsdCh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2REZWZhdWx0PE9wZW5BcGlab2RBbnk+Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICBkZWZhdWx0OiB6b2RSZWYuX2RlZi5kZWZhdWx0VmFsdWUoKSxcbiAgICAgIC4uLmdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLmlubmVyVHlwZSwgdXNlT3V0cHV0KSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VBcnJheSh7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RBcnJheTxPcGVuQXBpWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICBjb25zdCBjb25zdHJhaW50czogU2NoZW1hT2JqZWN0ID0ge31cbiAgaWYgKHpvZFJlZi5fZGVmLmV4YWN0TGVuZ3RoICE9IG51bGwpIHtcbiAgICBjb25zdHJhaW50cy5taW5JdGVtcyA9IHpvZFJlZi5fZGVmLmV4YWN0TGVuZ3RoLnZhbHVlXG4gICAgY29uc3RyYWludHMubWF4SXRlbXMgPSB6b2RSZWYuX2RlZi5leGFjdExlbmd0aC52YWx1ZVxuICB9XG5cbiAgaWYgKHpvZFJlZi5fZGVmLm1pbkxlbmd0aCAhPSBudWxsKVxuICAgIGNvbnN0cmFpbnRzLm1pbkl0ZW1zID0gem9kUmVmLl9kZWYubWluTGVuZ3RoLnZhbHVlXG4gIGlmICh6b2RSZWYuX2RlZi5tYXhMZW5ndGggIT0gbnVsbClcbiAgICBjb25zdHJhaW50cy5tYXhJdGVtcyA9IHpvZFJlZi5fZGVmLm1heExlbmd0aC52YWx1ZVxuXG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICB0eXBlOiBcImFycmF5XCIgYXMgU2NoZW1hT2JqZWN0VHlwZSxcbiAgICAgIGl0ZW1zOiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuZWxlbWVudCwgdXNlT3V0cHV0KSxcbiAgICAgIC4uLmNvbnN0cmFpbnRzLFxuICAgIH0sXG4gICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgIC4uLnNjaGVtYXNcbiAgKVxufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWwoe1xuICBzY2hlbWFzLFxuICB6b2RSZWYsXG59OiBQYXJzaW5nQXJnczx6LlpvZExpdGVyYWw8T3BlbkFwaVpvZEFueT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IHR5cGVvZiB6b2RSZWYuX2RlZi52YWx1ZSBhcyBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiLFxuICAgICAgZW51bTogW3pvZFJlZi5fZGVmLnZhbHVlXSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VFbnVtKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RFbnVtPG5ldmVyPiB8IHouWm9kTmF0aXZlRW51bTxuZXZlcj4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIHR5cGU6IHR5cGVvZiBPYmplY3QudmFsdWVzKHpvZFJlZi5fZGVmLnZhbHVlcylbMF0gYXMgXCJzdHJpbmdcIiB8IFwibnVtYmVyXCIsXG4gICAgICBlbnVtOiBPYmplY3QudmFsdWVzKHpvZFJlZi5fZGVmLnZhbHVlcyksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlSW50ZXJzZWN0aW9uKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczx6LlpvZEludGVyc2VjdGlvbjx6LlpvZFR5cGVBbnksIHouWm9kVHlwZUFueT4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIGFsbE9mOiBbXG4gICAgICAgIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLmxlZnQsIHVzZU91dHB1dCksXG4gICAgICAgIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLnJpZ2h0LCB1c2VPdXRwdXQpLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuZnVuY3Rpb24gcGFyc2VVbmlvbih7XG4gIHNjaGVtYXMsXG4gIHpvZFJlZixcbiAgdXNlT3V0cHV0LFxufTogUGFyc2luZ0FyZ3M8ei5ab2RVbmlvbjxbei5ab2RUeXBlQW55LCAuLi56LlpvZFR5cGVBbnlbXV0+Pik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IGNvbnRlbnRzID0gem9kUmVmLl9kZWYub3B0aW9uc1xuICBpZiAoXG4gICAgY29udGVudHMucmVkdWNlKFxuICAgICAgKHByZXYsIGNvbnRlbnQpID0+IHByZXYgJiYgY29udGVudC5fZGVmLnR5cGVOYW1lID09PSBcIlpvZExpdGVyYWxcIixcbiAgICAgIHRydWVcbiAgICApXG4gICkge1xuICAgIC8vIHNwZWNpYWwgY2FzZSB0byB0cmFuc2Zvcm0gdW5pb25zIG9mIGxpdGVyYWxzIGludG8gZW51bXNcbiAgICBjb25zdCBsaXRlcmFscyA9IGNvbnRlbnRzIGFzIHVua25vd24gYXMgei5ab2RMaXRlcmFsPE9wZW5BcGlab2RBbnk+W11cbiAgICBjb25zdCB0eXBlID0gbGl0ZXJhbHMucmVkdWNlKFxuICAgICAgKHByZXYsIGNvbnRlbnQpID0+XG4gICAgICAgICFwcmV2IHx8IHByZXYgPT09IHR5cGVvZiBjb250ZW50Ll9kZWYudmFsdWVcbiAgICAgICAgICA/IHR5cGVvZiBjb250ZW50Ll9kZWYudmFsdWVcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBudWxsIGFzIG51bGwgfCBzdHJpbmdcbiAgICApXG5cbiAgICBpZiAodHlwZSkge1xuICAgICAgcmV0dXJuIG1lcmdlKFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogdHlwZSBhcyBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiLFxuICAgICAgICAgIGVudW06IGxpdGVyYWxzLm1hcCgobGl0ZXJhbCkgPT4gbGl0ZXJhbC5fZGVmLnZhbHVlKSxcbiAgICAgICAgfSxcbiAgICAgICAgcGFyc2VEZXNjcmlwdGlvbih6b2RSZWYpLFxuICAgICAgICAuLi5zY2hlbWFzXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaXNOdWxsYWJsZSA9IGNvbnRlbnRzLnNvbWUoXG4gICAgKGNvbnRlbnQpID0+IGNvbnRlbnQuX2RlZi50eXBlTmFtZSA9PT0gXCJab2ROdWxsXCJcbiAgKVxuICBjb25zdCBub25OdWxsQ29udGVudHMgPSBjb250ZW50cy5maWx0ZXIoXG4gICAgKGNvbnRlbnQpID0+IGNvbnRlbnQuX2RlZi50eXBlTmFtZSAhPT0gXCJab2ROdWxsXCJcbiAgKVxuXG4gIHJldHVybiBtZXJnZShcbiAgICB7XG4gICAgICBvbmVPZjogbm9uTnVsbENvbnRlbnRzLm1hcCgoc2NoZW1hKSA9PiBnZW5lcmF0ZVNjaGVtYShzY2hlbWEsIHVzZU91dHB1dCkpLFxuICAgICAgLi4uKGlzTnVsbGFibGUgPyB7IG51bGxhYmxlOiB0cnVlIH0gOiB7fSksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlRGlzY3JpbWluYXRlZFVuaW9uKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG59OiBQYXJzaW5nQXJnczxcbiAgei5ab2REaXNjcmltaW5hdGVkVW5pb248c3RyaW5nLCB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbk9wdGlvbjxzdHJpbmc+W10+XG4+KTogU2NoZW1hT2JqZWN0IHtcbiAgcmV0dXJuIG1lcmdlKFxuICAgIHtcbiAgICAgIGRpc2NyaW1pbmF0b3I6IHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiAoXG4gICAgICAgICAgem9kUmVmIGFzIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uPFxuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgei5ab2REaXNjcmltaW5hdGVkVW5pb25PcHRpb248c3RyaW5nPltdXG4gICAgICAgICAgPlxuICAgICAgICApLl9kZWYuZGlzY3JpbWluYXRvcixcbiAgICAgIH0sXG4gICAgICBvbmVPZjogQXJyYXkuZnJvbShcbiAgICAgICAgKFxuICAgICAgICAgIHpvZFJlZiBhcyB6LlpvZERpc2NyaW1pbmF0ZWRVbmlvbjxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHouWm9kRGlzY3JpbWluYXRlZFVuaW9uT3B0aW9uPHN0cmluZz5bXVxuICAgICAgICAgID5cbiAgICAgICAgKS5fZGVmLm9wdGlvbnMudmFsdWVzKClcbiAgICAgICkubWFwKChzY2hlbWEpID0+IGdlbmVyYXRlU2NoZW1hKHNjaGVtYSwgdXNlT3V0cHV0KSksXG4gICAgfSxcbiAgICBwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksXG4gICAgLi4uc2NoZW1hc1xuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlTmV2ZXIoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZE5ldmVyPik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZSh7IHJlYWRPbmx5OiB0cnVlIH0sIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gcGFyc2VCcmFuZGVkKHtcbiAgc2NoZW1hcyxcbiAgem9kUmVmLFxufTogUGFyc2luZ0FyZ3M8ei5ab2RCcmFuZGVkPHouWm9kQW55LCBzdHJpbmc+Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi50eXBlKSwgLi4uc2NoZW1hcylcbn1cblxuZnVuY3Rpb24gY2F0Y2hBbGxQYXJzZXIoe1xuICB6b2RSZWYsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczxab2RUeXBlQW55Pik6IFNjaGVtYU9iamVjdCB7XG4gIHJldHVybiBtZXJnZShwYXJzZURlc2NyaXB0aW9uKHpvZFJlZiksIC4uLnNjaGVtYXMpXG59XG5cbmZ1bmN0aW9uIHBhcnNlUGlwZWxpbmUoe1xuICB6b2RSZWYsXG4gIHVzZU91dHB1dCxcbn06IFBhcnNpbmdBcmdzPHouWm9kUGlwZWxpbmU8bmV2ZXIsIG5ldmVyPj4pOiBTY2hlbWFPYmplY3Qge1xuICBpZiAodXNlT3V0cHV0KSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlU2NoZW1hKHpvZFJlZi5fZGVmLm91dCwgdXNlT3V0cHV0KVxuICB9XG4gIHJldHVybiBnZW5lcmF0ZVNjaGVtYSh6b2RSZWYuX2RlZi5pbiwgdXNlT3V0cHV0KVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlYWRvbmx5KHtcbiAgem9kUmVmLFxuICB1c2VPdXRwdXQsXG4gIHNjaGVtYXMsXG59OiBQYXJzaW5nQXJnczx6LlpvZFJlYWRvbmx5PHouWm9kQW55Pj4pOiBTY2hlbWFPYmplY3Qge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgZ2VuZXJhdGVTY2hlbWEoem9kUmVmLl9kZWYuaW5uZXJUeXBlLCB1c2VPdXRwdXQpLFxuICAgIHBhcnNlRGVzY3JpcHRpb24oem9kUmVmKSxcbiAgICAuLi5zY2hlbWFzXG4gIClcbn1cblxuY29uc3Qgd29ya2VyTWFwID0ge1xuICBab2RPYmplY3Q6IHBhcnNlT2JqZWN0LFxuICBab2RSZWNvcmQ6IHBhcnNlUmVjb3JkLFxuICBab2RTdHJpbmc6IHBhcnNlU3RyaW5nLFxuICBab2ROdW1iZXI6IHBhcnNlTnVtYmVyLFxuICBab2RCaWdJbnQ6IHBhcnNlQmlnSW50LFxuICBab2RCb29sZWFuOiBwYXJzZUJvb2xlYW4sXG4gIFpvZERhdGU6IHBhcnNlRGF0ZSxcbiAgWm9kTnVsbDogcGFyc2VOdWxsLFxuICBab2RPcHRpb25hbDogcGFyc2VPcHRpb25hbCxcbiAgWm9kTnVsbGFibGU6IHBhcnNlTnVsbGFibGUsXG4gIFpvZERlZmF1bHQ6IHBhcnNlRGVmYXVsdCxcbiAgWm9kQXJyYXk6IHBhcnNlQXJyYXksXG4gIFpvZExpdGVyYWw6IHBhcnNlTGl0ZXJhbCxcbiAgWm9kRW51bTogcGFyc2VFbnVtLFxuICBab2ROYXRpdmVFbnVtOiBwYXJzZUVudW0sXG4gIFpvZFRyYW5zZm9ybWVyOiBwYXJzZVRyYW5zZm9ybWF0aW9uLFxuICBab2RFZmZlY3RzOiBwYXJzZVRyYW5zZm9ybWF0aW9uLFxuICBab2RJbnRlcnNlY3Rpb246IHBhcnNlSW50ZXJzZWN0aW9uLFxuICBab2RVbmlvbjogcGFyc2VVbmlvbixcbiAgWm9kRGlzY3JpbWluYXRlZFVuaW9uOiBwYXJzZURpc2NyaW1pbmF0ZWRVbmlvbixcbiAgWm9kTmV2ZXI6IHBhcnNlTmV2ZXIsXG4gIFpvZEJyYW5kZWQ6IHBhcnNlQnJhbmRlZCxcbiAgLy8gVE9ETyBUcmFuc2Zvcm0gdGhlIHJlc3QgdG8gc2NoZW1hc1xuICBab2RVbmRlZmluZWQ6IGNhdGNoQWxsUGFyc2VyLFxuICAvLyBUT0RPOiBgcHJlZml4SXRlbXNgIGlzIGFsbG93ZWQgaW4gT3BlbkFQSSAzLjEgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHR1cGxlc1xuICBab2RUdXBsZTogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZE1hcDogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZEZ1bmN0aW9uOiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kTGF6eTogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZFByb21pc2U6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RBbnk6IGNhdGNoQWxsUGFyc2VyLFxuICBab2RVbmtub3duOiBjYXRjaEFsbFBhcnNlcixcbiAgWm9kVm9pZDogY2F0Y2hBbGxQYXJzZXIsXG4gIFpvZFBpcGVsaW5lOiBwYXJzZVBpcGVsaW5lLFxuICBab2RSZWFkb25seTogcGFyc2VSZWFkb25seSxcbn1cbnR5cGUgV29ya2VyS2V5cyA9IGtleW9mIHR5cGVvZiB3b3JrZXJNYXBcblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU2NoZW1hKFxuICB6b2RSZWY6IE9wZW5BcGlab2RBbnksXG4gIHVzZU91dHB1dD86IGJvb2xlYW5cbik6IFNjaGVtYU9iamVjdCB7XG4gIGNvbnN0IHsgbWV0YU9wZW5BcGkgPSB7fSB9ID0gem9kUmVmXG4gIGNvbnN0IHNjaGVtYXM6IEFuYXRpbmVTY2hlbWFPYmplY3RbXSA9IFtcbiAgICAuLi4oQXJyYXkuaXNBcnJheShtZXRhT3BlbkFwaSkgPyBtZXRhT3BlbkFwaSA6IFttZXRhT3BlbkFwaV0pLFxuICBdXG4gIHRyeSB7XG4gICAgY29uc3QgdHlwZU5hbWUgPSB6b2RSZWYuX2RlZi50eXBlTmFtZSBhcyBXb3JrZXJLZXlzXG4gICAgaWYgKHR5cGVOYW1lIGluIHdvcmtlck1hcCkge1xuICAgICAgcmV0dXJuIHdvcmtlck1hcFt0eXBlTmFtZV0oe1xuICAgICAgICB6b2RSZWY6IHpvZFJlZiBhcyBuZXZlcixcbiAgICAgICAgc2NoZW1hcyxcbiAgICAgICAgdXNlT3V0cHV0LFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gY2F0Y2hBbGxQYXJzZXIoeyB6b2RSZWYsIHNjaGVtYXMgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgcmV0dXJuIGNhdGNoQWxsUGFyc2VyKHsgem9kUmVmLCBzY2hlbWFzIH0pXG4gIH1cbn1cbiIsICIvKipcbiAqIEZyb250LU1hdHRlclxuICpcbiAqIFZlbmRvcmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2p4c29uL2Zyb250LW1hdHRlclxuICpcbiAqIE1JVCBMaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSBKYXNvbiBDYW1wYmVsbCAoXCJBdXRob3JcIilcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IGxvYWQgfSBmcm9tIFwianMteWFtbFwiXG5jb25zdCBvcHRpb25hbEJ5dGVPcmRlck1hcmsgPSBcIlxcXFx1ZmVmZj9cIlxuY29uc3QgcGxhdGZvcm0gPSB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiA/IHByb2Nlc3MucGxhdGZvcm0gOiBcIlwiXG5jb25zdCBwYXR0ZXJuID1cbiAgXCJeKFwiICtcbiAgb3B0aW9uYWxCeXRlT3JkZXJNYXJrICtcbiAgXCIoPSB5YW1sID18LS0tKVwiICtcbiAgXCIkKFtcXFxcc1xcXFxTXSo/KVwiICtcbiAgXCJeKD86XFxcXDJ8XFxcXC5cXFxcLlxcXFwuKVxcXFxzKlwiICtcbiAgXCIkXCIgK1xuICAocGxhdGZvcm0gPT09IFwid2luMzJcIiA/IFwiXFxcXHI/XCIgOiBcIlwiKSArXG4gIFwiKD86XFxcXG4pPylcIlxuLy8gTk9URTogSWYgdGhpcyBwYXR0ZXJuIHVzZXMgdGhlICdnJyBmbGFnIHRoZSBgcmVnZXhgIHZhcmlhYmxlIGRlZmluaXRpb24gd2lsbFxuLy8gbmVlZCB0byBiZSBtb3ZlZCBkb3duIGludG8gdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSBpdC5cbmNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBcIm1cIilcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJvbnRNYXR0ZXIoXG4gIHN0cmluZzogc3RyaW5nLFxuICBvcHRpb25zID0ge31cbik6IHsgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGJvZHk6IHN0cmluZzsgYm9keUJlZ2luOiBudW1iZXIgfSB7XG4gIHN0cmluZyA9IHN0cmluZyB8fCBcIlwiXG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IHsgYWxsb3dVbnNhZmU6IGZhbHNlIH1cbiAgb3B0aW9ucyA9XG4gICAgb3B0aW9ucyBpbnN0YW5jZW9mIE9iamVjdFxuICAgICAgPyB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH1cbiAgICAgIDogZGVmYXVsdE9wdGlvbnNcbiAgdmFyIGxpbmVzID0gc3RyaW5nLnNwbGl0KC8oXFxyP1xcbikvKVxuICBpZiAobGluZXNbMF0gJiYgLz0geWFtbCA9fC0tLS8udGVzdChsaW5lc1swXSkpIHtcbiAgICByZXR1cm4gcGFyc2Uoc3RyaW5nKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIGJvZHk6IHN0cmluZyxcbiAgICAgIGJvZHlCZWdpbjogMSxcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZUxvY2F0aW9uKG1hdGNoOiBSZWdFeHBFeGVjQXJyYXksIGJvZHk6IHN0cmluZykge1xuICB2YXIgbGluZSA9IDFcbiAgdmFyIHBvcyA9IGJvZHkuaW5kZXhPZihcIlxcblwiKVxuICB2YXIgb2Zmc2V0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcblxuICB3aGlsZSAocG9zICE9PSAtMSkge1xuICAgIGlmIChwb3MgPj0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbGluZVxuICAgIH1cbiAgICBsaW5lKytcbiAgICBwb3MgPSBib2R5LmluZGV4T2YoXCJcXG5cIiwgcG9zICsgMSlcbiAgfVxuXG4gIHJldHVybiBsaW5lXG59XG5cbmZ1bmN0aW9uIHBhcnNlKHN0cmluZzogc3RyaW5nKToge1xuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBib2R5OiBzdHJpbmdcbiAgYm9keUJlZ2luOiBudW1iZXJcbn0ge1xuICB2YXIgbWF0Y2ggPSByZWdleC5leGVjKHN0cmluZylcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIGJvZHk6IHN0cmluZyxcbiAgICAgIGJvZHlCZWdpbjogMSxcbiAgICB9XG4gIH1cblxuICB2YXIgeWFtbCA9IG1hdGNoW21hdGNoLmxlbmd0aCAtIDFdLnJlcGxhY2UoL15cXHMrfFxccyskL2csIFwiXCIpXG4gIHZhciBhdHRyaWJ1dGVzID0gKGxvYWQoeWFtbCkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHZhciBib2R5ID0gc3RyaW5nLnJlcGxhY2UobWF0Y2hbMF0sIFwiXCIpXG4gIHZhciBsaW5lID0gY29tcHV0ZUxvY2F0aW9uKG1hdGNoLCBzdHJpbmcpXG5cbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxuICAgIGJvZHk6IGJvZHksXG4gICAgYm9keUJlZ2luOiBsaW5lLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0RnJvbnRNYXR0ZXIoc3RyaW5nOiBzdHJpbmcpIHtcbiAgc3RyaW5nID0gc3RyaW5nIHx8IFwiXCJcblxuICByZXR1cm4gcmVnZXgudGVzdChzdHJpbmcpXG59XG4iLCAiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiXG5cbmZ1bmN0aW9uIGZpbmRLZXlJbk9iaihvYmo6IGFueSwgdmFsdWU6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICBsZXQgcmVzdWx0S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBfLmZvck93bihvYmosICh2LCBrKSA9PiB7XG4gICAgaWYgKF8uaXNPYmplY3QodikgJiYgXy5pc01hdGNoKHYsIHZhbHVlKSkge1xuICAgICAgcmVzdWx0S2V5ID0ga1xuICAgICAgLy8gU3RvcCB0aGUgaXRlcmF0aW9uXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0pXG4gIHJldHVybiByZXN1bHRLZXlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtYmVkU2NoZW1hUmVmZXJlbmNlcyhvYmoxOiBhbnksIG9iajI6IGFueSk6IGFueSB7XG4gIHJldHVybiBfLnRyYW5zZm9ybShvYmoxLCAocmVzdWx0LCB2YWx1ZSwga2V5KSA9PiB7XG4gICAgaWYgKF8uaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICBjb25zdCBtYXRjaGluZ0tleSA9IGZpbmRLZXlJbk9iaihvYmoyLCB2YWx1ZSlcbiAgICAgIGlmIChtYXRjaGluZ0tleSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHtcbiAgICAgICAgICAkcmVmOiBgIy9jb21wb25lbnRzL3NjaGVtYXMvJHttYXRjaGluZ0tleX1gLFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRba2V5XSA9IGVtYmVkU2NoZW1hUmVmZXJlbmNlcyh2YWx1ZSwgb2JqMilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZVxuICAgIH1cbiAgfSlcbn1cbiIsICJpbXBvcnQgeyBSb3V0ZVNwZWMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1QYXRoVG9GZXJuU2RrTWV0aG9kTmFtZShwYXRoOiBzdHJpbmcpIHtcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09IFwiXCIpXG4gIGNvbnN0IGxhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV1cbiAgaWYgKGxhc3RQYXJ0LnN0YXJ0c1dpdGgoXCJbXCIpICYmIGxhc3RQYXJ0LmVuZHNXaXRoKFwiXVwiKSkge1xuICAgIC8vIENvbnZlcnQgW3BhcmFtXSB0byBieV9wYXJhbVxuICAgIGNvbnN0IHBhcmFtID0gbGFzdFBhcnQuc2xpY2UoMSwgLTEpXG4gICAgcmV0dXJuIGBieV8ke3BhcmFtfWBcbiAgfVxuXG4gIHJldHVybiBsYXN0UGFydFxufVxuXG4vLyBmZXJuIGRvY3M6IGh0dHBzOi8vYnVpbGR3aXRoZmVybi5jb20vZG9jcy9zcGVjL2V4dGVuc2lvbnNcbmZ1bmN0aW9uIHRyYW5zZm9ybVBhdGhUb0Zlcm5TZGtHcm91cE5hbWUocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBcIlwiKVxuICByZXR1cm4gcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMSlcbn1cblxuZnVuY3Rpb24gZ2V0RmVyblNka01ldGFkYXRhKFxuICBwYXRoOiBzdHJpbmcsXG4gIHNka1JldHVyblZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW11cbik6XG4gIHwge1xuICAgICAgXCJ4LWZlcm4taWdub3JlXCI6IHRydWVcbiAgICB9XG4gIHwge1xuICAgICAgXCJ4LWZlcm4tc2RrLWdyb3VwLW5hbWVcIjogc3RyaW5nW11cbiAgICAgIFwieC1mZXJuLXNkay1tZXRob2QtbmFtZVwiOiBzdHJpbmdcbiAgICB9IHtcbiAgaWYgKHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gXCJcIikubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwieC1mZXJuLWlnbm9yZVwiOiB0cnVlLFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgXCJ4LWZlcm4tc2RrLWdyb3VwLW5hbWVcIjogdHJhbnNmb3JtUGF0aFRvRmVyblNka0dyb3VwTmFtZShwYXRoKSxcbiAgICBcIngtZmVybi1zZGstbWV0aG9kLW5hbWVcIjogdHJhbnNmb3JtUGF0aFRvRmVyblNka01ldGhvZE5hbWUocGF0aCksXG4gICAgLi4uKHNka1JldHVyblZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgICBcIngtZmVybi1zZGstcmV0dXJuLXZhbHVlXCI6IHNka1JldHVyblZhbHVlLFxuICAgICAgICB9XG4gICAgICA6IHt9KSxcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFwTWV0aG9kc1RvRmVyblNka01ldGFkYXRhKHtcbiAgbWV0aG9kcyxcbiAgcGF0aCxcbiAgc2RrUmV0dXJuVmFsdWUsXG59OiB7XG4gIG1ldGhvZHM6IFJvdXRlU3BlY1tcIm1ldGhvZHNcIl1cbiAgcGF0aDogc3RyaW5nXG4gIHNka1JldHVyblZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW11cbn0pIHtcbiAgY29uc3QgZmVyblNka01ldGFkYXRhID0gZ2V0RmVyblNka01ldGFkYXRhKHBhdGgsIHNka1JldHVyblZhbHVlKVxuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW21ldGhvZHNbMF1dOiBmZXJuU2RrTWV0YWRhdGEsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWFwcGVkTWV0aG9kcyA9IHt9XG5cbiAgbWV0aG9kcy5mb3JFYWNoKChtZXRob2QpID0+IHtcbiAgICBpZiAobWV0aG9kID09PSBcIlBPU1RcIikge1xuICAgICAgbWFwcGVkTWV0aG9kc1ttZXRob2RdID0gZmVyblNka01ldGFkYXRhXG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcHBlZE1ldGhvZHNbbWV0aG9kXSA9IHtcbiAgICAgICAgXCJ4LWZlcm4taWdub3JlXCI6IHRydWUsXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBtYXBwZWRNZXRob2RzXG59XG4iLCAiaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IHsgcGFyc2VSb3V0ZXNJblBhY2thZ2UgfSBmcm9tIFwiLi4vbGliL3BhcnNlLXJvdXRlcy1pbi1wYWNrYWdlXCJcbmltcG9ydCB7IHpvZFRvVHMsIHByaW50Tm9kZSB9IGZyb20gXCIuLi9saWIvem9kLXRvLXRzXCJcbmltcG9ydCBwcmV0dGllciBmcm9tIFwicHJldHRpZXJcIlxuaW1wb3J0IHsgeiwgWm9kRWZmZWN0cywgWm9kT3B0aW9uYWwgfSBmcm9tIFwiem9kXCJcblxuaW50ZXJmYWNlIEdlbmVyYXRlUm91dGVUeXBlc09wdHMge1xuICBwYWNrYWdlRGlyOiBzdHJpbmdcbiAgb3V0cHV0RmlsZT86IHN0cmluZ1xuICBwYXRoR2xvYj86IHN0cmluZ1xuICBhcGlQcmVmaXg/OiBzdHJpbmdcbiAgbWFwRmlsZVBhdGhUb0hUVFBSb3V0ZT86IChmaWxlX3BhdGg6IHN0cmluZykgPT4gc3RyaW5nXG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCwgb25seSByb3V0ZXMgdGhhdCByZXR1cm4gdHJ1ZSB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgdHlwZXMuXG4gICAqL1xuICBmaWx0ZXJSb3V0ZXM/OiAocm91dGU6IHN0cmluZykgPT4gYm9vbGVhblxuICAvKipcbiAgICogQnkgZGVmYXVsdCwgcm91dGVzIHRoYXQgaGF2ZSBgZXhjbHVkZUZyb21PcGVuQXBpYCBzZXQgdG8gdHJ1ZSB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGdlbmVyYXRlZCB0eXBlcy5cbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSB0byBpbmNsdWRlIHRoZW0uXG4gICAqL1xuICBpbmNsdWRlT3BlbkFwaUV4Y2x1ZGVkUm91dGVzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVSb3V0ZVR5cGVzID0gYXN5bmMgKG9wdHM6IEdlbmVyYXRlUm91dGVUeXBlc09wdHMpID0+IHtcbiAgY29uc3QgZmlsZXBhdGhUb1JvdXRlID0gYXdhaXQgcGFyc2VSb3V0ZXNJblBhY2thZ2Uob3B0cylcblxuICBjb25zdCBzb3J0ZWRSb3V0ZXMgPSBBcnJheS5mcm9tKGZpbGVwYXRoVG9Sb3V0ZS5lbnRyaWVzKCkpLnNvcnQoKGEsIGIpID0+XG4gICAgYVsxXS5yb3V0ZS5sb2NhbGVDb21wYXJlKGJbMV0ucm91dGUpXG4gIClcbiAgY29uc3QgZmlsdGVyZWRSb3V0ZXMgPSBzb3J0ZWRSb3V0ZXMuZmlsdGVyKFxuICAgIChbXywgeyByb3V0ZSB9XSkgPT4gIW9wdHMuZmlsdGVyUm91dGVzIHx8IG9wdHMuZmlsdGVyUm91dGVzKHJvdXRlKVxuICApXG5cbiAgLy8gVE9ETyB3aGVuIGxlc3MgbGF6eSwgdXNlIHRzLW1vcnBoIGZvciBiZXR0ZXIgZ2VuZXJhdGlvblxuICBjb25zdCByb3V0ZURlZnM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBbXywgeyByb3V0ZSwgcm91dGVTcGVjLCBzZXR1cFBhcmFtcyB9XSBvZiBmaWx0ZXJlZFJvdXRlcykge1xuICAgIGNvbnN0IHF1ZXJ5S2V5cyA9IE9iamVjdC5rZXlzKHJvdXRlU3BlYy5xdWVyeVBhcmFtcz8uc2hhcGUgPz8ge30pXG4gICAgY29uc3QgcGF0aFBhcmFtZXRlcnMgPSBxdWVyeUtleXMuZmlsdGVyKChrZXkpID0+IHJvdXRlLmluY2x1ZGVzKGBbJHtrZXl9XWApKVxuXG4gICAgLy8gcXVlcnlQYXJhbXMgbWlnaHQgYmUgYSBab2RFZmZlY3RzIG9yIFpvZE9wdGlvbmFsIGluIHNvbWUgY2FzZXNcbiAgICBsZXQgcXVlcnlQYXJhbXMgPSByb3V0ZVNwZWMucXVlcnlQYXJhbXNcbiAgICB3aGlsZSAoXG4gICAgICBxdWVyeVBhcmFtcyAmJlxuICAgICAgKFwic291cmNlVHlwZVwiIGluIHF1ZXJ5UGFyYW1zIHx8IFwidW53cmFwXCIgaW4gcXVlcnlQYXJhbXMpXG4gICAgKSB7XG4gICAgICBpZiAoXCJzb3VyY2VUeXBlXCIgaW4gcXVlcnlQYXJhbXMpIHtcbiAgICAgICAgcXVlcnlQYXJhbXMgPSAocXVlcnlQYXJhbXMgYXMgdW5rbm93biBhcyBab2RFZmZlY3RzPGFueT4pLnNvdXJjZVR5cGUoKVxuICAgICAgfSBlbHNlIGlmIChcInVud3JhcFwiIGluIHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zID0gKHF1ZXJ5UGFyYW1zIGFzIHVua25vd24gYXMgWm9kT3B0aW9uYWw8YW55PikudW53cmFwKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocXVlcnlQYXJhbXMgJiYgXCJvbWl0XCIgaW4gcXVlcnlQYXJhbXMpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXMub21pdChcbiAgICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKHBhdGhQYXJhbWV0ZXJzLm1hcCgocGFyYW0pID0+IFtwYXJhbSwgdHJ1ZV0pKVxuICAgICAgKVxuICAgIH1cblxuICAgIHJvdXRlRGVmcy5wdXNoKFxuICAgICAgYFxuXCIke3JvdXRlfVwiOiB7XG4gIHJvdXRlOiBcIiR7cm91dGV9XCIsXG4gIG1ldGhvZDogJHtyb3V0ZVNwZWMubWV0aG9kcy5tYXAoKG0pID0+IGBcIiR7bX1cImApLmpvaW4oXCIgfCBcIil9LFxuICBxdWVyeVBhcmFtczogJHtxdWVyeVBhcmFtcyA/IHByaW50Tm9kZSh6b2RUb1RzKHF1ZXJ5UGFyYW1zKS5ub2RlKSA6IFwie31cIn0sXG4gIGpzb25Cb2R5OiAke1xuICAgIHJvdXRlU3BlYy5qc29uQm9keSA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5qc29uQm9keSkubm9kZSkgOiBcInt9XCJcbiAgfSxcbiAgY29tbW9uUGFyYW1zOiAke1xuICAgIHJvdXRlU3BlYy5jb21tb25QYXJhbXNcbiAgICAgID8gcHJpbnROb2RlKHpvZFRvVHMocm91dGVTcGVjLmNvbW1vblBhcmFtcykubm9kZSlcbiAgICAgIDogXCJ7fVwiXG4gIH0sXG4gIGZvcm1EYXRhOiAke1xuICAgIHJvdXRlU3BlYy5mb3JtRGF0YSA/IHByaW50Tm9kZSh6b2RUb1RzKHJvdXRlU3BlYy5mb3JtRGF0YSkubm9kZSkgOiBcInt9XCJcbiAgfSxcbiAganNvblJlc3BvbnNlOiAke1xuICAgIHJvdXRlU3BlYy5qc29uUmVzcG9uc2VcbiAgICAgID8gcHJpbnROb2RlKFxuICAgICAgICAgIHpvZFRvVHMoXG4gICAgICAgICAgICBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1cyAmJlxuICAgICAgICAgICAgICByb3V0ZVNwZWMuanNvblJlc3BvbnNlIGluc3RhbmNlb2Ygei5ab2RPYmplY3RcbiAgICAgICAgICAgICAgPyByb3V0ZVNwZWMuanNvblJlc3BvbnNlLmV4dGVuZCh7IG9rOiB6LmJvb2xlYW4oKSB9KVxuICAgICAgICAgICAgICA6IHJvdXRlU3BlYy5qc29uUmVzcG9uc2VcbiAgICAgICAgICApLm5vZGVcbiAgICAgICAgKVxuICAgICAgOiBcInt9XCJcbiAgfVxufWAudHJpbSgpXG4gICAgKVxuICB9XG4gIGNvbnN0IHJvdXRlRGVmU3RyID0gcm91dGVEZWZzLmpvaW4oXCIsXFxuXCIpXG4gIGNvbnN0IG91dHB1dCA9IGF3YWl0IHByZXR0aWVyLmZvcm1hdChcbiAgICBgZXhwb3J0IHR5cGUgUm91dGVzID0ge1xuJHtyb3V0ZURlZlN0cn1cbn1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXNwb25zZTxQYXRoIGV4dGVuZHMga2V5b2YgUm91dGVzPiA9XG4gIFJvdXRlc1tQYXRoXVtcImpzb25SZXNwb25zZVwiXVxuXG5leHBvcnQgdHlwZSBSb3V0ZVJlcXVlc3RCb2R5PFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wianNvbkJvZHlcIl0gJiBSb3V0ZXNbUGF0aF1bXCJjb21tb25QYXJhbXNcIl1cblxuZXhwb3J0IHR5cGUgUm91dGVSZXF1ZXN0UGFyYW1zPFBhdGggZXh0ZW5kcyBrZXlvZiBSb3V0ZXM+ID1cbiAgUm91dGVzW1BhdGhdW1wicXVlcnlQYXJhbXNcIl0gJiBSb3V0ZXNbUGF0aF1bXCJjb21tb25QYXJhbXNcIl1cbmAudHJpbSgpLFxuICAgIHsgc2VtaTogZmFsc2UsIHBhcnNlcjogXCJ0eXBlc2NyaXB0XCIgfVxuICApXG5cbiAgaWYgKG9wdHMub3V0cHV0RmlsZSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShvcHRzLm91dHB1dEZpbGUsIG91dHB1dClcbiAgfVxuXG4gIHJldHVybiBvdXRwdXRcbn1cbiIsICIvKipcbiAqIFpvZCBUbyBUU1xuICpcbiAqIFZlbmRvcmVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NhY2hpbnJhamEvem9kLXRvLXRzXG4gKlxuICogTUlUIExpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjEgU2FjaGluIFJhamFcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB0cyBmcm9tIFwidHlwZXNjcmlwdFwiXG5pbXBvcnQgeyBab2RUeXBlLCBab2RUeXBlQW55IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBwYXJzZUZyb250TWF0dGVyLCB0ZXN0RnJvbnRNYXR0ZXIgfSBmcm9tIFwiLi9mcm9udC1tYXR0ZXJcIlxuaW1wb3J0IGRlZGVudCBmcm9tIFwiZGVkZW50XCJcblxuY29uc3QgeyBmYWN0b3J5OiBmLCBTeW50YXhLaW5kLCBTY3JpcHRLaW5kLCBTY3JpcHRUYXJnZXQsIEVtaXRIaW50IH0gPSB0c1xuXG5jb25zdCBtYXliZUlkZW50aWZpZXJUb1R5cGVSZWZlcmVuY2UgPSAoXG4gIGlkZW50aWZpZXI6IHRzLklkZW50aWZpZXIgfCB0cy5UeXBlTm9kZVxuKSA9PiB7XG4gIGlmICh0cy5pc0lkZW50aWZpZXIoaWRlbnRpZmllcikpIHtcbiAgICByZXR1cm4gZi5jcmVhdGVUeXBlUmVmZXJlbmNlTm9kZShpZGVudGlmaWVyKVxuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJcbn1cblxuY29uc3QgY3JlYXRlVHlwZVJlZmVyZW5jZUZyb21TdHJpbmcgPSAoaWRlbnRpZmllcjogc3RyaW5nKSA9PlxuICBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihpZGVudGlmaWVyKSlcblxuY29uc3QgY3JlYXRlVW5rbm93bktleXdvcmROb2RlID0gKCkgPT5cbiAgZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5Vbmtub3duS2V5d29yZClcblxuZXhwb3J0IGNvbnN0IHByaW50Tm9kZSA9IChcbiAgbm9kZTogdHMuTm9kZSxcbiAgcHJpbnRlck9wdGlvbnM/OiB0cy5QcmludGVyT3B0aW9uc1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc291cmNlRmlsZSA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoXG4gICAgXCJwcmludC50c1wiLFxuICAgIFwiXCIsXG4gICAgU2NyaXB0VGFyZ2V0LkxhdGVzdCxcbiAgICBmYWxzZSxcbiAgICBTY3JpcHRLaW5kLlRTXG4gIClcbiAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIocHJpbnRlck9wdGlvbnMpXG4gIHJldHVybiBwcmludGVyLnByaW50Tm9kZShFbWl0SGludC5VbnNwZWNpZmllZCwgbm9kZSwgc291cmNlRmlsZSlcbn1cblxuY29uc3QgaWRlbnRpZmllclJFID0gL15bJEEtWl9hLXpdW1xcdyRdKiQvXG5cbmNvbnN0IGdldElkZW50aWZpZXJPclN0cmluZ0xpdGVyYWwgPSAoc3RyaW5nXzogc3RyaW5nKSA9PiB7XG4gIGlmIChpZGVudGlmaWVyUkUudGVzdChzdHJpbmdfKSkge1xuICAgIHJldHVybiBmLmNyZWF0ZUlkZW50aWZpZXIoc3RyaW5nXylcbiAgfVxuXG4gIHJldHVybiBmLmNyZWF0ZVN0cmluZ0xpdGVyYWwoc3RyaW5nXylcbn1cblxuY29uc3QgYWRkSnNEb2NDb21tZW50ID0gKG5vZGU6IHRzLk5vZGUsIHRleHQ6IHN0cmluZykgPT4ge1xuICBjb25zdCB7IGRlc2NyaXB0aW9uLCBkZXByZWNhdGVkIH0gPSBwYXJzZURlc2NyaXB0aW9uKHRleHQpXG5cbiAgbGV0IGNvbW1lbnQgPSBgKiAke2Rlc2NyaXB0aW9ufWBcbiAgaWYgKGRlcHJlY2F0ZWQpIHtcbiAgICBjb21tZW50ICs9IGBcXG4gKiBAZGVwcmVjYXRlZCAke1xuICAgICAgdHlwZW9mIGRlcHJlY2F0ZWQgPT09IFwic3RyaW5nXCIgPyBkZXByZWNhdGVkIDogXCJcIlxuICAgIH1gXG4gIH0gZWxzZSB7XG4gICAgY29tbWVudCArPSBgIGBcbiAgfVxuXG4gIHRzLmFkZFN5bnRoZXRpY0xlYWRpbmdDb21tZW50KFxuICAgIG5vZGUsXG4gICAgU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhLFxuICAgIGNvbW1lbnQsXG4gICAgdHJ1ZVxuICApXG59XG5cbnR5cGUgUGFyc2VkRGVzY3JpcHRpb24gPSB7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgZGVwcmVjYXRlZD86IGJvb2xlYW4gfCBzdHJpbmdcbiAgW2tleTogc3RyaW5nXTogdW5rbm93blxufVxuXG5mdW5jdGlvbiBwYXJzZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQYXJzZWREZXNjcmlwdGlvbiB7XG4gIGlmICghZGVzY3JpcHRpb24pXG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgIH1cbiAgY29uc3QgdHJpbW1lZERlc2NyaXB0aW9uID0gZGVkZW50KGRlc2NyaXB0aW9uKVxuICBpZiAoIXRlc3RGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pKSByZXR1cm4geyBkZXNjcmlwdGlvbiB9XG4gIGNvbnN0IHsgYXR0cmlidXRlcywgYm9keSB9ID0gcGFyc2VGcm9udE1hdHRlcih0cmltbWVkRGVzY3JpcHRpb24pXG4gIGNvbnN0IG91dHB1dDogUGFyc2VkRGVzY3JpcHRpb24gPSB7XG4gICAgZGVzY3JpcHRpb246IGJvZHkudHJpbSgpLFxuICB9XG4gIGlmICh0eXBlb2YgYXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIiAmJiBhdHRyaWJ1dGVzICE9PSBudWxsKSB7XG4gICAgaWYgKFwiZGVwcmVjYXRlZFwiIGluIGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5kZXByZWNhdGVkKSB7XG4gICAgICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMuZGVwcmVjYXRlZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgb3V0cHV0LmRlcHJlY2F0ZWQgPSB0cnVlXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmRlcHJlY2F0ZWQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgb3V0cHV0LmRlcHJlY2F0ZWQgPVxuICAgICAgICAgIGF0dHJpYnV0ZXMuZGVwcmVjYXRlZC5sZW5ndGggPiAwID8gYXR0cmlidXRlcy5kZXByZWNhdGVkIDogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzKSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJkZXNjcmlwdGlvblwiIHx8IGtleSA9PT0gXCJkZXByZWNhdGVkXCIpIGNvbnRpbnVlXG4gICAgICBvdXRwdXRba2V5XSA9IHZhbHVlXG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRwdXRcbn1cblxudHlwZSBMaXRlcmFsVHlwZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW5cblxudHlwZSBab2RUb1RzT3B0aW9ucyA9IHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBgbmF0aXZlRW51bXNgIGluc3RlYWQgKi9cbiAgcmVzb2x2ZU5hdGl2ZUVudW1zPzogYm9vbGVhblxuICBuYXRpdmVFbnVtcz86IFwiaWRlbnRpZmllclwiIHwgXCJyZXNvbHZlXCIgfCBcInVuaW9uXCJcbn1cblxuY29uc3QgcmVzb2x2ZU9wdGlvbnMgPSAocmF3PzogWm9kVG9Uc09wdGlvbnMpID0+IHtcbiAgY29uc3QgcmVzb2x2ZWQgPSB7XG4gICAgbmF0aXZlRW51bXM6IHJhdz8ucmVzb2x2ZU5hdGl2ZUVudW1zID8gXCJyZXNvbHZlXCIgOiBcImlkZW50aWZpZXJcIixcbiAgfVxuXG4gIHJldHVybiB7IC4uLnJlc29sdmVkLCAuLi5yYXcgfVxufVxuXG50eXBlIFJlc29sdmVkWm9kVG9Uc09wdGlvbnMgPSBSZXR1cm5UeXBlPHR5cGVvZiByZXNvbHZlT3B0aW9ucz5cblxudHlwZSBab2RUb1RzU3RvcmUgPSB7XG4gIG5hdGl2ZUVudW1zOiB0cy5FbnVtRGVjbGFyYXRpb25bXVxufVxuXG50eXBlIFpvZFRvVHNSZXR1cm4gPSB7XG4gIG5vZGU6IHRzLlR5cGVOb2RlXG4gIHN0b3JlOiBab2RUb1RzU3RvcmVcbn1cblxudHlwZSBHZXRUeXBlRnVuY3Rpb24gPSAoXG4gIHR5cGVzY3JpcHQ6IHR5cGVvZiB0cyxcbiAgaWRlbnRpZmllcjogc3RyaW5nLFxuICBvcHRpb25zOiBSZXNvbHZlZFpvZFRvVHNPcHRpb25zXG4pID0+IHRzLklkZW50aWZpZXIgfCB0cy5UeXBlTm9kZVxuXG50eXBlIEdldFR5cGUgPSB7IF9kZWY6IHsgZ2V0VHlwZT86IEdldFR5cGVGdW5jdGlvbiB9IH1cblxuY29uc3QgY2FsbEdldFR5cGUgPSAoXG4gIHpvZDogWm9kVHlwZUFueSxcbiAgaWRlbnRpZmllcjogc3RyaW5nLFxuICBvcHRpb25zOiBSZXNvbHZlZFpvZFRvVHNPcHRpb25zXG4pID0+IHtcbiAgbGV0IHR5cGU6IFJldHVyblR5cGU8R2V0VHlwZUZ1bmN0aW9uPiB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0IGdldFR5cGVTY2hlbWEgPSB6b2QgYXMgR2V0VHlwZVxuICAvLyB0aGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhY2Nlc3NpbmcgJ3R5cGUnXG4gIGlmIChnZXRUeXBlU2NoZW1hLl9kZWYuZ2V0VHlwZSlcbiAgICB0eXBlID0gZ2V0VHlwZVNjaGVtYS5fZGVmLmdldFR5cGUodHMsIGlkZW50aWZpZXIsIG9wdGlvbnMpXG4gIHJldHVybiB0eXBlXG59XG5cbmV4cG9ydCBjb25zdCB6b2RUb1RzID0gKFxuICB6b2Q6IFpvZFR5cGVBbnksXG4gIGlkZW50aWZpZXI/OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBab2RUb1RzT3B0aW9uc1xuKTogWm9kVG9Uc1JldHVybiA9PiB7XG4gIGlmICghKHpvZCBpbnN0YW5jZW9mIFpvZFR5cGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5vZGU6IGNyZWF0ZVVua25vd25LZXl3b3JkTm9kZSgpLFxuICAgICAgc3RvcmU6IHsgbmF0aXZlRW51bXM6IFtdIH0sXG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc29sdmVkSWRlbnRpZmllciA9IGlkZW50aWZpZXIgPz8gXCJJZGVudGlmaWVyXCJcblxuICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlT3B0aW9ucyhvcHRpb25zKVxuXG4gIGNvbnN0IHN0b3JlOiBab2RUb1RzU3RvcmUgPSB7IG5hdGl2ZUVudW1zOiBbXSB9XG5cbiAgY29uc3Qgbm9kZSA9IHpvZFRvVHNOb2RlKHpvZCwgcmVzb2x2ZWRJZGVudGlmaWVyLCBzdG9yZSwgcmVzb2x2ZWRPcHRpb25zKVxuXG4gIHJldHVybiB7IG5vZGUsIHN0b3JlIH1cbn1cblxuY29uc3Qgem9kVG9Uc05vZGUgPSAoXG4gIHpvZDogWm9kVHlwZUFueSxcbiAgaWRlbnRpZmllcjogc3RyaW5nLFxuICBzdG9yZTogWm9kVG9Uc1N0b3JlLFxuICBvcHRpb25zOiBSZXNvbHZlZFpvZFRvVHNPcHRpb25zXG4pID0+IHtcbiAgY29uc3QgdHlwZU5hbWUgPSB6b2QuX2RlZi50eXBlTmFtZVxuXG4gIGNvbnN0IGdldFR5cGVUeXBlID0gY2FsbEdldFR5cGUoem9kLCBpZGVudGlmaWVyLCBvcHRpb25zKVxuICAvLyBzcGVjaWFsIGNhc2UgbmF0aXZlIGVudW0sIHdoaWNoIG5lZWRzIGFuIGlkZW50aWZpZXIgbm9kZVxuICBpZiAoZ2V0VHlwZVR5cGUgJiYgdHlwZU5hbWUgIT09IFwiWm9kTmF0aXZlRW51bVwiKSB7XG4gICAgcmV0dXJuIG1heWJlSWRlbnRpZmllclRvVHlwZVJlZmVyZW5jZShnZXRUeXBlVHlwZSlcbiAgfVxuXG4gIGNvbnN0IG90aGVyQXJndW1lbnRzID0gW2lkZW50aWZpZXIsIHN0b3JlLCBvcHRpb25zXSBhcyBjb25zdFxuXG4gIHN3aXRjaCAodHlwZU5hbWUpIHtcbiAgICBjYXNlIFwiWm9kU3RyaW5nXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlN0cmluZ0tleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2ROdW1iZXJcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuTnVtYmVyS2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZEJpZ0ludFwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5CaWdJbnRLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kQm9vbGVhblwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5Cb29sZWFuS2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZERhdGVcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoZi5jcmVhdGVJZGVudGlmaWVyKFwiRGF0ZVwiKSlcbiAgICB9XG4gICAgY2FzZSBcIlpvZFVuZGVmaW5lZFwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kTnVsbFwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUoZi5jcmVhdGVOdWxsKCkpXG4gICAgfVxuICAgIGNhc2UgXCJab2RWb2lkXCI6IHtcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUoW1xuICAgICAgICBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLlZvaWRLZXl3b3JkKSxcbiAgICAgICAgZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkKSxcbiAgICAgIF0pXG4gICAgfVxuICAgIGNhc2UgXCJab2RBbnlcIjoge1xuICAgICAgcmV0dXJuIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuQW55S2V5d29yZClcbiAgICB9XG4gICAgY2FzZSBcIlpvZFVua25vd25cIjoge1xuICAgICAgcmV0dXJuIGNyZWF0ZVVua25vd25LZXl3b3JkTm9kZSgpXG4gICAgfVxuICAgIGNhc2UgXCJab2ROZXZlclwiOiB7XG4gICAgICByZXR1cm4gZi5jcmVhdGVLZXl3b3JkVHlwZU5vZGUoU3ludGF4S2luZC5OZXZlcktleXdvcmQpXG4gICAgfVxuICAgIGNhc2UgXCJab2RMYXp5XCI6IHtcbiAgICAgIC8vIGl0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGxhenkgdmFsdWUgaXMgcmVmZXJyaW5nIHRvXG4gICAgICAvLyBzbyB3ZSBmb3JjZSB0aGUgdXNlciB0byBkZWNsYXJlIGl0XG4gICAgICBpZiAoIWdldFR5cGVUeXBlKSByZXR1cm4gY3JlYXRlVHlwZVJlZmVyZW5jZUZyb21TdHJpbmcoaWRlbnRpZmllcilcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgXCJab2RMaXRlcmFsXCI6IHtcbiAgICAgIC8vIHoubGl0ZXJhbCgnaGknKSAtPiAnaGknXG4gICAgICBsZXQgbGl0ZXJhbDogdHMuTGl0ZXJhbEV4cHJlc3Npb24gfCB0cy5Cb29sZWFuTGl0ZXJhbFxuXG4gICAgICBjb25zdCBsaXRlcmFsVmFsdWUgPSB6b2QuX2RlZi52YWx1ZSBhcyBMaXRlcmFsVHlwZVxuICAgICAgc3dpdGNoICh0eXBlb2YgbGl0ZXJhbFZhbHVlKSB7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjoge1xuICAgICAgICAgIGxpdGVyYWwgPSBmLmNyZWF0ZU51bWVyaWNMaXRlcmFsKGxpdGVyYWxWYWx1ZSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6IHtcbiAgICAgICAgICBsaXRlcmFsID0gbGl0ZXJhbFZhbHVlID09PSB0cnVlID8gZi5jcmVhdGVUcnVlKCkgOiBmLmNyZWF0ZUZhbHNlKClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBsaXRlcmFsID0gZi5jcmVhdGVTdHJpbmdMaXRlcmFsKGxpdGVyYWxWYWx1ZSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmLmNyZWF0ZUxpdGVyYWxUeXBlTm9kZShsaXRlcmFsKVxuICAgIH1cbiAgICBjYXNlIFwiWm9kT2JqZWN0XCI6IHtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuZW50cmllcyh6b2QuX2RlZi5zaGFwZSgpKVxuXG4gICAgICBjb25zdCBtZW1iZXJzOiB0cy5UeXBlRWxlbWVudFtdID0gcHJvcGVydGllcy5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0Wm9kTm9kZSA9IHZhbHVlIGFzIFpvZFR5cGVBbnlcbiAgICAgICAgY29uc3QgdHlwZSA9IHpvZFRvVHNOb2RlKG5leHRab2ROb2RlLCAuLi5vdGhlckFyZ3VtZW50cylcblxuICAgICAgICBjb25zdCB7IHR5cGVOYW1lOiBuZXh0Wm9kTm9kZVR5cGVOYW1lIH0gPSBuZXh0Wm9kTm9kZS5fZGVmXG4gICAgICAgIGNvbnN0IGlzT3B0aW9uYWwgPVxuICAgICAgICAgIG5leHRab2ROb2RlVHlwZU5hbWUgPT09IFwiWm9kT3B0aW9uYWxcIiB8fCBuZXh0Wm9kTm9kZS5pc09wdGlvbmFsKClcblxuICAgICAgICBjb25zdCBwcm9wZXJ0eVNpZ25hdHVyZSA9IGYuY3JlYXRlUHJvcGVydHlTaWduYXR1cmUoXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGdldElkZW50aWZpZXJPclN0cmluZ0xpdGVyYWwoa2V5KSxcbiAgICAgICAgICBpc09wdGlvbmFsID8gZi5jcmVhdGVUb2tlbihTeW50YXhLaW5kLlF1ZXN0aW9uVG9rZW4pIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHR5cGVcbiAgICAgICAgKVxuXG4gICAgICAgIGlmIChuZXh0Wm9kTm9kZS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIGFkZEpzRG9jQ29tbWVudChwcm9wZXJ0eVNpZ25hdHVyZSwgbmV4dFpvZE5vZGUuZGVzY3JpcHRpb24pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvcGVydHlTaWduYXR1cmVcbiAgICAgIH0pXG4gICAgICByZXR1cm4gZi5jcmVhdGVUeXBlTGl0ZXJhbE5vZGUobWVtYmVycylcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kQXJyYXlcIjoge1xuICAgICAgY29uc3QgdHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnR5cGUsIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlQXJyYXlUeXBlTm9kZSh0eXBlKVxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kRW51bVwiOiB7XG4gICAgICAvLyB6LmVudW1bJ2EnLCAnYicsICdjJ10gLT4gJ2EnIHwgJ2InIHwgJ2NcbiAgICAgIGNvbnN0IHR5cGVzID0gem9kLl9kZWYudmFsdWVzLm1hcCgodmFsdWU6IHN0cmluZykgPT5cbiAgICAgICAgZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUoZi5jcmVhdGVTdHJpbmdMaXRlcmFsKHZhbHVlKSlcbiAgICAgIClcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUodHlwZXMpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZFVuaW9uXCI6IHtcbiAgICAgIC8vIHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCldKSAtPiBzdHJpbmcgfCBudW1iZXJcbiAgICAgIGNvbnN0IG9wdGlvbnM6IFpvZFR5cGVBbnlbXSA9IHpvZC5fZGVmLm9wdGlvbnNcbiAgICAgIGNvbnN0IHR5cGVzOiB0cy5UeXBlTm9kZVtdID0gb3B0aW9ucy5tYXAoKG9wdGlvbikgPT5cbiAgICAgICAgem9kVG9Uc05vZGUob3B0aW9uLCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIClcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUodHlwZXMpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiOiB7XG4gICAgICAvLyB6LmRpc2NyaW1pbmF0ZWRVbmlvbigna2luZCcsIFt6Lm9iamVjdCh7IGtpbmQ6IHoubGl0ZXJhbCgnYScpLCBhOiB6LnN0cmluZygpIH0pLCB6Lm9iamVjdCh7IGtpbmQ6IHoubGl0ZXJhbCgnYicpLCBiOiB6Lm51bWJlcigpIH0pXSkgLT4geyBraW5kOiAnYScsIGE6IHN0cmluZyB9IHwgeyBraW5kOiAnYicsIGI6IG51bWJlciB9XG4gICAgICBjb25zdCBvcHRpb25zOiBab2RUeXBlQW55W10gPSBbLi4uem9kLl9kZWYub3B0aW9ucy52YWx1ZXMoKV1cbiAgICAgIGNvbnN0IHR5cGVzOiB0cy5UeXBlTm9kZVtdID0gb3B0aW9ucy5tYXAoKG9wdGlvbikgPT5cbiAgICAgICAgem9kVG9Uc05vZGUob3B0aW9uLCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIClcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUodHlwZXMpXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEVmZmVjdHNcIjoge1xuICAgICAgLy8gaWdub3JlIGFueSBlZmZlY3RzLCB0aGV5IHdvbid0IGZhY3RvciBpbnRvIHRoZSB0eXBlc1xuICAgICAgY29uc3Qgbm9kZSA9IHpvZFRvVHNOb2RlKFxuICAgICAgICB6b2QuX2RlZi5zY2hlbWEsXG4gICAgICAgIC4uLm90aGVyQXJndW1lbnRzXG4gICAgICApIGFzIHRzLlR5cGVOb2RlXG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGNhc2UgXCJab2ROYXRpdmVFbnVtXCI6IHtcbiAgICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlVHlwZVxuXG4gICAgICBpZiAob3B0aW9ucy5uYXRpdmVFbnVtcyA9PT0gXCJ1bmlvblwiKSB7XG4gICAgICAgIC8vIGFsbG93IG92ZXJyaWRpbmcgd2l0aCB0aGlzIG9wdGlvblxuICAgICAgICBpZiAodHlwZSkgcmV0dXJuIG1heWJlSWRlbnRpZmllclRvVHlwZVJlZmVyZW5jZSh0eXBlKVxuXG4gICAgICAgIGNvbnN0IHR5cGVzID0gT2JqZWN0LnZhbHVlcyh6b2QuX2RlZi52YWx1ZXMpLm1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUoZi5jcmVhdGVOdW1lcmljTGl0ZXJhbCh2YWx1ZSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmLmNyZWF0ZUxpdGVyYWxUeXBlTm9kZShmLmNyZWF0ZVN0cmluZ0xpdGVyYWwodmFsdWUgYXMgc3RyaW5nKSlcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIGYuY3JlYXRlVW5pb25UeXBlTm9kZSh0eXBlcylcbiAgICAgIH1cblxuICAgICAgLy8gei5uYXRpdmVFbnVtKEZydWl0cykgLT4gRnJ1aXRzXG4gICAgICAvLyBjYW4gcmVzb2x2ZSBGcnVpdHMgaW50byBzdG9yZSBhbmQgdXNlciBjYW4gaGFuZGxlIGVudW1zXG4gICAgICBpZiAoIXR5cGUpIHJldHVybiBjcmVhdGVVbmtub3duS2V5d29yZE5vZGUoKVxuXG4gICAgICBpZiAob3B0aW9ucy5uYXRpdmVFbnVtcyA9PT0gXCJyZXNvbHZlXCIpIHtcbiAgICAgICAgY29uc3QgZW51bU1lbWJlcnMgPSBPYmplY3QuZW50cmllcyhcbiAgICAgICAgICB6b2QuX2RlZi52YWx1ZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICAgICAgICApLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGl0ZXJhbCA9XG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgPyBmLmNyZWF0ZU51bWVyaWNMaXRlcmFsKHZhbHVlKVxuICAgICAgICAgICAgICA6IGYuY3JlYXRlU3RyaW5nTGl0ZXJhbCh2YWx1ZSlcblxuICAgICAgICAgIHJldHVybiBmLmNyZWF0ZUVudW1NZW1iZXIoZ2V0SWRlbnRpZmllck9yU3RyaW5nTGl0ZXJhbChrZXkpLCBsaXRlcmFsKVxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIodHlwZSkpIHtcbiAgICAgICAgICBzdG9yZS5uYXRpdmVFbnVtcy5wdXNoKFxuICAgICAgICAgICAgZi5jcmVhdGVFbnVtRGVjbGFyYXRpb24odW5kZWZpbmVkLCB0eXBlLCBlbnVtTWVtYmVycylcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ2dldFR5cGUgb24gbmF0aXZlRW51bSBtdXN0IHJldHVybiBhbiBpZGVudGlmaWVyIHdoZW4gbmF0aXZlRW51bXMgaXMgXCJyZXNvbHZlXCInXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXliZUlkZW50aWZpZXJUb1R5cGVSZWZlcmVuY2UodHlwZSlcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kT3B0aW9uYWxcIjoge1xuICAgICAgY29uc3QgaW5uZXJUeXBlID0gem9kVG9Uc05vZGUoXG4gICAgICAgIHpvZC5fZGVmLmlubmVyVHlwZSxcbiAgICAgICAgLi4ub3RoZXJBcmd1bWVudHNcbiAgICAgICkgYXMgdHMuVHlwZU5vZGVcbiAgICAgIHJldHVybiBmLmNyZWF0ZVVuaW9uVHlwZU5vZGUoW1xuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZCksXG4gICAgICBdKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2ROdWxsYWJsZVwiOiB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUb1RzTm9kZShcbiAgICAgICAgem9kLl9kZWYuaW5uZXJUeXBlLFxuICAgICAgICAuLi5vdGhlckFyZ3VtZW50c1xuICAgICAgKSBhcyB0cy5UeXBlTm9kZVxuICAgICAgcmV0dXJuIGYuY3JlYXRlVW5pb25UeXBlTm9kZShbXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICAgICAgZi5jcmVhdGVMaXRlcmFsVHlwZU5vZGUoZi5jcmVhdGVOdWxsKCkpLFxuICAgICAgXSlcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kVHVwbGVcIjoge1xuICAgICAgLy8gei50dXBsZShbei5zdHJpbmcoKSwgei5udW1iZXIoKV0pIC0+IFtzdHJpbmcsIG51bWJlcl1cbiAgICAgIGNvbnN0IHR5cGVzID0gem9kLl9kZWYuaXRlbXMubWFwKChvcHRpb246IFpvZFR5cGVBbnkpID0+XG4gICAgICAgIHpvZFRvVHNOb2RlKG9wdGlvbiwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICApXG4gICAgICByZXR1cm4gZi5jcmVhdGVUdXBsZVR5cGVOb2RlKHR5cGVzKVxuICAgIH1cblxuICAgIGNhc2UgXCJab2RSZWNvcmRcIjoge1xuICAgICAgLy8gei5yZWNvcmQoei5udW1iZXIoKSkgLT4geyBbeDogc3RyaW5nXTogbnVtYmVyIH1cbiAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnZhbHVlVHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZVR5cGVMaXRlcmFsTm9kZShbXG4gICAgICAgIGYuY3JlYXRlSW5kZXhTaWduYXR1cmUoXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIGYuY3JlYXRlUGFyYW1ldGVyRGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBmLmNyZWF0ZUlkZW50aWZpZXIoXCJ4XCIpLFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGYuY3JlYXRlS2V5d29yZFR5cGVOb2RlKFN5bnRheEtpbmQuU3RyaW5nS2V5d29yZClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSxcbiAgICAgICAgICB2YWx1ZVR5cGVcbiAgICAgICAgKSxcbiAgICAgIF0pXG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZE1hcFwiOiB7XG4gICAgICAvLyB6Lm1hcCh6LnN0cmluZygpKSAtPiBNYXA8c3RyaW5nPlxuICAgICAgY29uc3QgdmFsdWVUeXBlID0gem9kVG9Uc05vZGUoem9kLl9kZWYudmFsdWVUeXBlLCAuLi5vdGhlckFyZ3VtZW50cylcbiAgICAgIGNvbnN0IGtleVR5cGUgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi5rZXlUeXBlLCAuLi5vdGhlckFyZ3VtZW50cylcblxuICAgICAgY29uc3Qgbm9kZSA9IGYuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoZi5jcmVhdGVJZGVudGlmaWVyKFwiTWFwXCIpLCBbXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgIF0pXG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZFNldFwiOiB7XG4gICAgICAvLyB6LnNldCh6LnN0cmluZygpKSAtPiBTZXQ8c3RyaW5nPlxuICAgICAgY29uc3QgdHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnZhbHVlVHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihcIlNldFwiKSwgW3R5cGVdKVxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kSW50ZXJzZWN0aW9uXCI6IHtcbiAgICAgIC8vIHoubnVtYmVyKCkuYW5kKHouc3RyaW5nKCkpIC0+IG51bWJlciAmIHN0cmluZ1xuICAgICAgY29uc3QgbGVmdCA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLmxlZnQsIC4uLm90aGVyQXJndW1lbnRzKVxuICAgICAgY29uc3QgcmlnaHQgPSB6b2RUb1RzTm9kZSh6b2QuX2RlZi5yaWdodCwgLi4ub3RoZXJBcmd1bWVudHMpXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVJbnRlcnNlY3Rpb25UeXBlTm9kZShbbGVmdCwgcmlnaHRdKVxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kUHJvbWlzZVwiOiB7XG4gICAgICAvLyB6LnByb21pc2Uoei5zdHJpbmcoKSkgLT4gUHJvbWlzZTxzdHJpbmc+XG4gICAgICBjb25zdCB0eXBlID0gem9kVG9Uc05vZGUoem9kLl9kZWYudHlwZSwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgIGNvbnN0IG5vZGUgPSBmLmNyZWF0ZVR5cGVSZWZlcmVuY2VOb2RlKGYuY3JlYXRlSWRlbnRpZmllcihcIlByb21pc2VcIiksIFtcbiAgICAgICAgdHlwZSxcbiAgICAgIF0pXG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgY2FzZSBcIlpvZEZ1bmN0aW9uXCI6IHtcbiAgICAgIC8vIHouZnVuY3Rpb24oKS5hcmdzKHouc3RyaW5nKCkpLnJldHVybnMoei5udW1iZXIoKSkgLT4gKGFyZ3NfMDogc3RyaW5nKSA9PiBudW1iZXJcbiAgICAgIGNvbnN0IGFyZ3VtZW50VHlwZXMgPSB6b2QuX2RlZi5hcmdzLl9kZWYuaXRlbXMubWFwKFxuICAgICAgICAoYXJndW1lbnQ6IFpvZFR5cGVBbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBhcmd1bWVudFR5cGUgPSB6b2RUb1RzTm9kZShhcmd1bWVudCwgLi4ub3RoZXJBcmd1bWVudHMpXG5cbiAgICAgICAgICByZXR1cm4gZi5jcmVhdGVQYXJhbWV0ZXJEZWNsYXJhdGlvbihcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGYuY3JlYXRlSWRlbnRpZmllcihgYXJnc18ke2luZGV4fWApLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXJndW1lbnRUeXBlXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICApIGFzIHRzLlBhcmFtZXRlckRlY2xhcmF0aW9uW11cblxuICAgICAgYXJndW1lbnRUeXBlcy5wdXNoKFxuICAgICAgICBmLmNyZWF0ZVBhcmFtZXRlckRlY2xhcmF0aW9uKFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBmLmNyZWF0ZVRva2VuKFN5bnRheEtpbmQuRG90RG90RG90VG9rZW4pLFxuICAgICAgICAgIGYuY3JlYXRlSWRlbnRpZmllcihgYXJnc18ke2FyZ3VtZW50VHlwZXMubGVuZ3RofWApLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBmLmNyZWF0ZUFycmF5VHlwZU5vZGUoY3JlYXRlVW5rbm93bktleXdvcmROb2RlKCkpXG4gICAgICAgIClcbiAgICAgIClcblxuICAgICAgY29uc3QgcmV0dXJuVHlwZSA9IHpvZFRvVHNOb2RlKHpvZC5fZGVmLnJldHVybnMsIC4uLm90aGVyQXJndW1lbnRzKVxuXG4gICAgICBjb25zdCBub2RlID0gZi5jcmVhdGVGdW5jdGlvblR5cGVOb2RlKFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIGFyZ3VtZW50VHlwZXMsXG4gICAgICAgIHJldHVyblR5cGVcbiAgICAgIClcblxuICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBjYXNlIFwiWm9kRGVmYXVsdFwiOiB7XG4gICAgICAvLyB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVmYXVsdCgnaGknKSAtPiBzdHJpbmdcbiAgICAgIGNvbnN0IHR5cGUgPSB6b2RUb1RzTm9kZShcbiAgICAgICAgem9kLl9kZWYuaW5uZXJUeXBlLFxuICAgICAgICAuLi5vdGhlckFyZ3VtZW50c1xuICAgICAgKSBhcyB0cy5UeXBlTm9kZVxuXG4gICAgICBjb25zdCBmaWx0ZXJlZE5vZGVzOiB0cy5Ob2RlW10gPSBbXVxuXG4gICAgICB0eXBlLmZvckVhY2hDaGlsZCgobm9kZSkgPT4ge1xuICAgICAgICBpZiAoIVtTeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmRdLmluY2x1ZGVzKG5vZGUua2luZCkpIHtcbiAgICAgICAgICBmaWx0ZXJlZE5vZGVzLnB1c2gobm9kZSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBuZWVkZWQgdG8gc2V0IGNoaWxkcmVuXG4gICAgICB0eXBlLnR5cGVzID0gZmlsdGVyZWROb2Rlc1xuXG4gICAgICByZXR1cm4gdHlwZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmLmNyZWF0ZUtleXdvcmRUeXBlTm9kZShTeW50YXhLaW5kLkFueUtleXdvcmQpXG59XG4iLCAiaW1wb3J0ICogYXMgZnMgZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IGNyeXB0byBmcm9tIFwibm9kZTpjcnlwdG9cIlxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBQcm9qZWN0LCBTeW50YXhLaW5kIH0gZnJvbSBcInRzLW1vcnBoXCJcbmltcG9ydCAqIGFzIGVzYnVpbGQgZnJvbSBcImVzYnVpbGRcIlxuaW1wb3J0IHsgZGVmYXVsdE1hcEZpbGVQYXRoVG9IVFRQUm91dGUgfSBmcm9tIFwiLi9saWIvZGVmYXVsdC1tYXAtZmlsZS1wYXRoLXRvLWh0dHAtcm91dGVcIlxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSb3V0ZVR5cGVzT3B0cyB7XG4gIHBhY2thZ2VEaXI6IHN0cmluZ1xuICBhbGxvd2VkSW1wb3J0UGF0dGVybnM/OiBzdHJpbmdbXVxuICBvdXRwdXRGaWxlPzogc3RyaW5nXG4gIHBhdGhHbG9iPzogc3RyaW5nXG4gIGFwaVByZWZpeD86IHN0cmluZ1xuICBtYXBGaWxlUGF0aFRvSFRUUFJvdXRlPzogKGZpbGVfcGF0aDogc3RyaW5nKSA9PiBzdHJpbmdcbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkLCBvbmx5IHJvdXRlcyB0aGF0IHJldHVybiB0cnVlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZCB0eXBlcy5cbiAgICovXG4gIGZpbHRlclJvdXRlcz86IChyb3V0ZTogc3RyaW5nKSA9PiBib29sZWFuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCByb3V0ZXMgdGhhdCBoYXZlIGBleGNsdWRlRnJvbU9wZW5BcGlgIHNldCB0byB0cnVlIHdpbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGUgZ2VuZXJhdGVkIHR5cGVzLlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIHRvIGluY2x1ZGUgdGhlbS5cbiAgICovXG4gIGluY2x1ZGVPcGVuQXBpRXhjbHVkZWRSb3V0ZXM/OiBib29sZWFuXG4gIGVzYnVpbGRPcHRpb25zPzogZXNidWlsZC5CdWlsZE9wdGlvbnNcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RSb3V0ZVNwZWNzID0gYXN5bmMgKG9wdHM6IEdlbmVyYXRlUm91dGVUeXBlc09wdHMpID0+IHtcbiAgY29uc3QgeyBwYWNrYWdlRGlyLCBwYXRoR2xvYiA9IFwiL3BhZ2VzL2FwaS8qKi8qLnRzXCIgfSA9IG9wdHNcbiAgY29uc3QgZnVsbFBhdGhHbG9iID0gcGF0aC5wb3NpeC5qb2luKHBhY2thZ2VEaXIsIHBhdGhHbG9iKVxuXG4gIGNvbnN0IHByb2plY3QgPSBuZXcgUHJvamVjdCh7IGNvbXBpbGVyT3B0aW9uczogeyBkZWNsYXJhdGlvbjogdHJ1ZSB9IH0pXG5cbiAgY29uc3QgcGF0aHM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHByb2plY3QuYWRkU291cmNlRmlsZXNBdFBhdGhzKGZ1bGxQYXRoR2xvYikpIHtcbiAgICBjb25zdCBkZWZhdWx0RXhwb3J0ID0gc291cmNlRmlsZS5nZXRFeHBvcnRBc3NpZ25tZW50KFxuICAgICAgKGQpID0+ICFkLmlzRXhwb3J0RXF1YWxzKClcbiAgICApXG4gICAgaWYgKCFkZWZhdWx0RXhwb3J0KSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGN1cnJpZWRXaXRoUm91dGVTcGVjQ2FsbCA9IGRlZmF1bHRFeHBvcnRcbiAgICAgIC5nZXRFeHByZXNzaW9uKClcbiAgICAgIC5hc0tpbmQoU3ludGF4S2luZC5DYWxsRXhwcmVzc2lvbilcbiAgICBpZiAoIWN1cnJpZWRXaXRoUm91dGVTcGVjQ2FsbCkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3Qgd2l0aFJvdXRlU3BlY0NhbGwgPSBjdXJyaWVkV2l0aFJvdXRlU3BlY0NhbGxcbiAgICAgIC5nZXRFeHByZXNzaW9uKClcbiAgICAgIC5hc0tpbmQoU3ludGF4S2luZC5DYWxsRXhwcmVzc2lvbilcbiAgICBpZiAoIXdpdGhSb3V0ZVNwZWNDYWxsKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IFtyb3V0ZVNwZWNdID0gd2l0aFJvdXRlU3BlY0NhbGwuZ2V0QXJndW1lbnRzKClcbiAgICBpZiAoIXJvdXRlU3BlYykge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBzb3VyY2VGaWxlLmFkZFN0YXRlbWVudHMoXG4gICAgICBgZXhwb3J0IGNvbnN0IGV4dHJhY3RlZFJvdXRlU3BlYyA9ICR7cm91dGVTcGVjLmdldFRleHQoKX1gXG4gICAgKVxuXG4gICAgZGVmYXVsdEV4cG9ydC5yZW1vdmUoKVxuXG4gICAgLy8gUmVtb3ZlIGFsbCB1bnVzZWQgaW1wb3J0cyBzbyBmaWxlIGNhbiBiZSB0cmVlIHNoYWtlblxuICAgIC8vIChBc3N1bWVzIGFsbCBpbXBvcnRzIGFyZSBmcmVlIG9mIHNpZGUtZWZmZWN0cylcbiAgICBsZXQgbGFzdFdpZHRoOiBudW1iZXJcbiAgICBkbyB7XG4gICAgICBsYXN0V2lkdGggPSBzb3VyY2VGaWxlLmdldEZ1bGxXaWR0aCgpXG4gICAgICAvLyBNYXkgbmVlZCB0byBjYWxsIHRoaXMgbXVsdGlwbGUgdGltZXNcbiAgICAgIHNvdXJjZUZpbGUuZml4VW51c2VkSWRlbnRpZmllcnMoKVxuICAgIH0gd2hpbGUgKGxhc3RXaWR0aCAhPT0gc291cmNlRmlsZS5nZXRGdWxsV2lkdGgoKSlcblxuICAgIGNvbnN0IGFic29sdXRlUGFja2FnZURpciA9IHBhdGgucmVzb2x2ZShwYWNrYWdlRGlyKVxuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoXG4gICAgICBhYnNvbHV0ZVBhY2thZ2VEaXIsXG4gICAgICBzb3VyY2VGaWxlLmdldEZpbGVQYXRoKClcbiAgICApXG4gICAgcGF0aHMucHVzaChyZWxhdGl2ZVBhdGgpXG4gIH1cblxuICBjb25zdCBwYXRoVG9JZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9XG4gIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgIC8vIGFkZCBwcmVmaXggdG8gYXZvaWQgc3RhcnRpbmcgd2l0aCBhIG51bWJlclxuICAgIHBhdGhUb0lkW3BhdGhdID1cbiAgICAgIFwiaGFzaFwiICsgY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHBhdGgpLmRpZ2VzdChcImhleFwiKVxuICB9XG5cbiAgY29uc3QgZW50cnlQb2ludENvbnRlbnQgPSBgXG4gICR7cGF0aHNcbiAgICAubWFwKChwKSA9PiBgaW1wb3J0IHtleHRyYWN0ZWRSb3V0ZVNwZWMgYXMgJHtwYXRoVG9JZFtwXX19IGZyb20gXCIuLyR7cH1cImApXG4gICAgLmpvaW4oXCJcXG5cIil9XG5cbiAgZXhwb3J0IGNvbnN0IHJvdXRlcyA9IHtcbiAgICAke3BhdGhzXG4gICAgICAubWFwKChwKSA9PiB7XG4gICAgICAgIGNvbnN0IGh0dHBSb3V0ZSA9IChcbiAgICAgICAgICBvcHRzLm1hcEZpbGVQYXRoVG9IVFRQUm91dGUgPz9cbiAgICAgICAgICBkZWZhdWx0TWFwRmlsZVBhdGhUb0hUVFBSb3V0ZShvcHRzLmFwaVByZWZpeClcbiAgICAgICAgKShwKVxuXG4gICAgICAgIHJldHVybiBgXCIke2h0dHBSb3V0ZX1cIjogJHtwYXRoVG9JZFtwXX1gXG4gICAgICB9KVxuICAgICAgLmpvaW4oXCIsXFxuXCIpfVxuICB9XG4gIGBcblxuICAvLyBDb3B5IGFsbG93ZWQgaW1wb3J0IGdsb2JzIGludG8gcHJvamVjdFxuICBpZiAob3B0cy5hbGxvd2VkSW1wb3J0UGF0dGVybnMpIHtcbiAgICBwcm9qZWN0LmFkZFNvdXJjZUZpbGVzQXRQYXRocyhvcHRzLmFsbG93ZWRJbXBvcnRQYXR0ZXJucylcbiAgfVxuXG4gIC8vIEdlbmVyYXRlIHR5cGVzICguZC50cylcbiAgY29uc3QgZW50cnlQb2ludCA9IHByb2plY3QuY3JlYXRlU291cmNlRmlsZShcbiAgICBcImV4dHJhY3RlZC1yb3V0ZS1zcGVjcy50c1wiLFxuICAgIGVudHJ5UG9pbnRDb250ZW50XG4gIClcbiAgY29uc3QgZW1pdFJlc3VsdCA9IGVudHJ5UG9pbnQuZ2V0RW1pdE91dHB1dCh7IGVtaXRPbmx5RHRzRmlsZXM6IHRydWUgfSlcbiAgaWYgKG9wdHMub3V0cHV0RmlsZSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICBwYXRoLmRpcm5hbWUob3B0cy5vdXRwdXRGaWxlKSxcbiAgICAgIHBhdGguYmFzZW5hbWUob3B0cy5vdXRwdXRGaWxlKS5yZXBsYWNlKFwiLm1qc1wiLCBcIlwiKS5yZXBsYWNlKFwiLmpzXCIsIFwiXCIpICtcbiAgICAgICAgXCIuZC50c1wiXG4gICAgKVxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICAgIGRlY2xhcmF0aW9uRmlsZVBhdGgsXG4gICAgICBlbWl0UmVzdWx0LmdldE91dHB1dEZpbGVzKClbMF0uZ2V0VGV4dCgpXG4gICAgKVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgdmFsdWVzICguanMpXG4gIGNvbnN0IHBrZ1JhdyA9IGF3YWl0IGZzLnJlYWRGaWxlKFxuICAgIHBhdGguam9pbihwYWNrYWdlRGlyLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICBcInV0Zi04XCJcbiAgKVxuICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHBrZ1JhdylcblxuICBhd2FpdCBlc2J1aWxkLmJ1aWxkKHtcbiAgICAuLi5vcHRzLmVzYnVpbGRPcHRpb25zLFxuICAgIHN0ZGluOiB7XG4gICAgICBjb250ZW50czogZW50cnlQb2ludENvbnRlbnQsXG4gICAgICByZXNvbHZlRGlyOiBwYXRoLnJlc29sdmUocGFja2FnZURpciksXG4gICAgfSxcbiAgICBvdXRmaWxlOiBvcHRzLm91dHB1dEZpbGUsXG4gICAgYnVuZGxlOiB0cnVlLFxuICAgIHBsYXRmb3JtOiBcIm5vZGVcIixcbiAgICBmb3JtYXQ6IFwiZXNtXCIsXG4gICAgdHJlZVNoYWtpbmc6IHRydWUsXG4gICAgZXh0ZXJuYWw6IFtcbiAgICAgIC4uLk9iamVjdC5rZXlzKHBrZy5kZXBlbmRlbmNpZXMpLFxuICAgICAgLi4uT2JqZWN0LmtleXMocGtnLmRldkRlcGVuZGVuY2llcyksXG4gICAgICAuLi4ob3B0cy5lc2J1aWxkT3B0aW9ucz8uZXh0ZXJuYWwgPz8gW10pLFxuICAgIF0sXG4gICAgcGx1Z2luczogW1xuICAgICAgLy8gV2l0aCB0aGlzIHBsdWdpbiwgZXNidWlsZCB3aWxsIG5ldmVyIHRvdWNoIHRoZSBhY3R1YWwgZmlsZXN5c3RlbSBhbmQgdGh1cyBjYW5ub3QgaW50ZXJhY3Qgd2l0aCBpbXBvcnRzIHRoYXQgZG9uJ3QgbWF0Y2ggYWxsb3dlZEltcG9ydFBhdHRlcm5zW10uXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwicmVzb2x2ZS12aXJ0dWFsLWZzXCIsXG4gICAgICAgIHNldHVwKGJ1aWxkKSB7XG4gICAgICAgICAgYnVpbGQub25Mb2FkKHsgZmlsdGVyOiAvLiovIH0sIChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50cyA9IHByb2plY3QuZ2V0U291cmNlRmlsZShhcmdzLnBhdGgpPy5nZXRGdWxsVGV4dCgpXG4gICAgICAgICAgICBpZiAoIWNvbnRlbnRzKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29udGVudHM6IFwiZXhwb3J0IGRlZmF1bHQge31cIixcbiAgICAgICAgICAgICAgICBsb2FkZXI6IFwidHNcIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb250ZW50cyxcbiAgICAgICAgICAgICAgbG9hZGVyOiBcInRzXCIsXG4gICAgICAgICAgICAgIHJlc29sdmVEaXI6IHBhdGguZGlybmFtZShhcmdzLnBhdGgpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgLi4uKG9wdHMuZXNidWlsZE9wdGlvbnM/LnBsdWdpbnMgPz8gW10pLFxuICAgIF0sXG4gIH0pXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7O0FBQUE7OztBQ0FBO0FBQUEsT0FBTyxRQUFRO0FBQ2Y7QUFBQSxFQUNFO0FBQUEsT0FHSztBQUVQLFNBQVMsS0FBQUEsVUFBUzs7O0FDUGxCO0FBQUEsT0FBT0MsV0FBVTs7O0FDQWpCO0FBQUEsT0FBTyxVQUFVO0FBRVYsSUFBTSxnQ0FDWCxDQUFDLGFBQXFCLFdBQ3RCLENBQUMsY0FBc0I7QUFDckIsUUFBTSxRQUFRLFVBRVgsUUFBUSxTQUFTLEdBQUcsRUFFcEIsUUFBUSxPQUFPLEVBQUUsRUFFakIsUUFBUSxVQUFVLEVBQUUsRUFFcEIsUUFBUSxZQUFZLEVBQUUsRUFFdEIsUUFBUSxVQUFVLEVBQUUsRUFFcEIsUUFBUSxTQUFTLEVBQUUsRUFFbkIsUUFBUSxVQUFVLEVBQUUsRUFFcEIsUUFBUSxpQkFBaUIsRUFB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Q25ELGdCQUFJLENBQUMsVUFBVTtBQUNiLHFCQUFPO0FBQUEsZ0JBQ0wsVUFBVTtBQUFBLGdCQUNWLFFBQVE7QUFBQSxjQUNWO0FBQUEsWUFDRjtBQUVBLG1CQUFPO0FBQUEsY0FDTDtBQUFBLGNBQ0EsUUFBUTtBQUFBLGNBQ1IsWUFBWUYsTUFBSyxRQUFRLEtBQUssSUFBSTtBQUFBLFlBQ3BDO0FBQUEsVUFDRixDQUFDO0FBQUEsUUFDSDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLElBQUksZ0JBQUssbUJBQUwsbUJBQXFCLFlBQXJCLFlBQWdDLENBQUM7QUFBQSxJQUN2QztBQUFBLEVBQ0YsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJ6IiwgInBhdGgiLCAicGF0aCIsICJwYXRoIiwgImRlZGVudCIsICJwYXRoIiwgIl9hIiwgInoiLCAiZnMiLCAiZGVkZW50IiwgInBhcnNlRGVzY3JpcHRpb24iLCAib3B0aW9ucyIsICJ6IiwgIl8iLCAiZnMiLCAicGF0aCIsICJTeW50YXhLaW5kIiwgInBhdGgiLCAiU3ludGF4S2luZCIsICJfYSIsICJidWlsZCJdCn0K
|