sonamu 0.8.21 → 0.8.23
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/api/config.d.ts +1 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/sonamu.d.ts +1 -1
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +14 -19
- package/dist/cone/cone-generator.js +29 -16
- package/dist/database/base-model.js +2 -2
- package/dist/database/db.d.ts +1 -1
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +1 -1
- package/dist/syncer/syncer.js +2 -2
- package/dist/testing/dev-test-routes.d.ts.map +1 -1
- package/dist/testing/dev-test-routes.js +4 -1
- package/dist/testing/global-setup.d.ts.map +1 -1
- package/dist/testing/global-setup.js +1 -4
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +11 -11
- package/dist/ui-web/assets/index-BrQKU3j9.css +1 -0
- package/dist/ui-web/assets/{index-DP968oXY.js → index-DIasN3Gt.js} +47 -47
- package/dist/ui-web/index.html +2 -2
- package/package.json +3 -3
- package/src/api/config.ts +1 -1
- package/src/api/sonamu.ts +15 -20
- package/src/cone/cone-generator.ts +39 -19
- package/src/database/base-model.ts +1 -1
- package/src/database/db.ts +1 -1
- package/src/skills/AGENTS.md +11 -1
- package/src/skills/sonamu/SKILL.md +42 -149
- package/src/skills/sonamu/cdd.md +172 -517
- package/src/skills/sonamu/cone.md +3 -4
- package/src/skills/sonamu/fixture-cli.md +1 -1
- package/src/skills/sonamu/workflow.md +72 -80
- package/src/syncer/syncer.ts +1 -1
- package/src/testing/dev-test-routes.ts +3 -0
- package/src/testing/global-setup.ts +0 -4
- package/src/ui/api.ts +6 -15
- package/dist/ui-web/assets/index-B7gc0Ygb.css +0 -1
- package/src/skills/project/business-logic.md +0 -270
- package/src/skills/project/requirements.md +0 -160
|
@@ -43,28 +43,41 @@ import * as path from "node:path";
|
|
|
43
43
|
return apiKey;
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
46
|
-
*
|
|
46
|
+
* 도메인별 {domain}.contract.md와 architecture.md를 읽어 컨텍스트로 반환합니다.
|
|
47
47
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
48
|
+
* - contract/{domain}/{domain}.contract.md: 도메인 규칙과 결정 근거 (주 참조 대상)
|
|
49
|
+
* - .claude/skills/project/architecture.md: 엔티티 설계 구조 (보조 참조)
|
|
50
|
+
*
|
|
51
|
+
* cone 생성 시 LLM에게 전달하여 도메인 맥락에 맞는 메타데이터를 생성하도록 합니다.
|
|
50
52
|
*/ function readProjectSkills() {
|
|
51
53
|
try {
|
|
52
54
|
const { Sonamu } = require("../api");
|
|
53
55
|
const projectRoot = Sonamu.appRootPath;
|
|
54
|
-
const skillsDir = path.join(projectRoot, ".claude", "skills", "project");
|
|
55
|
-
if (!fs.existsSync(skillsDir)) {
|
|
56
|
-
return "";
|
|
57
|
-
}
|
|
58
|
-
const files = fs.readdirSync(skillsDir).filter((f)=>f.endsWith(".md")).sort();
|
|
59
|
-
if (files.length === 0) {
|
|
60
|
-
return "";
|
|
61
|
-
}
|
|
62
56
|
const contents = [];
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
57
|
+
// contract/**/*.contract.md 수집
|
|
58
|
+
const contractDir = path.join(projectRoot, "contract");
|
|
59
|
+
if (fs.existsSync(contractDir)) {
|
|
60
|
+
const domains = fs.readdirSync(contractDir, {
|
|
61
|
+
withFileTypes: true
|
|
62
|
+
}).filter((d)=>d.isDirectory()).map((d)=>d.name);
|
|
63
|
+
for (const domain of domains){
|
|
64
|
+
const domainDir = path.join(contractDir, domain);
|
|
65
|
+
const contractFiles = fs.readdirSync(domainDir).filter((f)=>f.endsWith(".contract.md"));
|
|
66
|
+
for (const file of contractFiles){
|
|
67
|
+
const filePath = path.join(domainDir, file);
|
|
68
|
+
const content = fs.readFileSync(filePath, "utf-8").trim();
|
|
69
|
+
if (content) {
|
|
70
|
+
contents.push(`--- contract/${domain}/${file} ---\n${content}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// .claude/skills/project/architecture.md 보조 참조
|
|
76
|
+
const architecturePath = path.join(projectRoot, ".claude", "skills", "project", "architecture.md");
|
|
77
|
+
if (fs.existsSync(architecturePath)) {
|
|
78
|
+
const content = fs.readFileSync(architecturePath, "utf-8").trim();
|
|
66
79
|
if (content) {
|
|
67
|
-
contents.push(`---
|
|
80
|
+
contents.push(`--- architecture.md ---\n${content}`);
|
|
68
81
|
}
|
|
69
82
|
}
|
|
70
83
|
return contents.join("\n\n");
|
|
@@ -325,4 +338,4 @@ IMPORTANT: Return pure JSON only. Do NOT wrap in markdown code blocks.`;
|
|
|
325
338
|
return result;
|
|
326
339
|
}
|
|
327
340
|
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25lL2NvbmUtZ2VuZXJhdG9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQ29uZSwgRW50aXR5SnNvbiB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vKipcbiAqIENvbmUg7IOd7ISxIOy7qO2FjeyKpO2KuFxuICpcbiAqIEVudGl0eSDsoJXrs7TsmYAg7IOd7ISxIOyYteyFmOydhCDri7Tqs6Ag7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgdHlwZSBDb25lR2VuZXJhdGlvbkNvbnRleHQgPSB7XG4gIGVudGl0eTogRW50aXR5SnNvbjtcbiAgbG9jYWxlPzogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiO1xuICBleGlzdGluZ0NvbmVzPzogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIC8qKiB0cnVl7J24IOqyveyasCBub3Rl6rCAIOyXhuuKlCBjb25l66eMIOyDneyEsSAqL1xuICBvbmx5RW1wdHk/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDb25lIOyDneyEsSDqsrDqs7xcbiAqXG4gKiBFbnRpdHksIFByb3BzLCBTdWJzZXRzLCBFbnVtc+ydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDri7Tqs6Ag7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgdHlwZSBDb25lR2VuZXJhdGlvblJlc3VsdCA9IHtcbiAgZW50aXR5Q29uZT86IENvbmU7XG4gIHByb3BDb25lczogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIHN1YnNldENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgZW51bUNvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgdG9rZW5zVXNlZDogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBMTE3snYQg7IKs7Jqp7ZWY7JesIEVudGl0eeydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBFbnRpdHkg7KCV67O07JmAIOyDneyEsSDsmLXshZhcbiAqIEByZXR1cm5zIOyDneyEseuQnCBjb25lIOuplO2DgOuNsOydtO2EsFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVDb25lcyhjb250ZXh0OiBDb25lR2VuZXJhdGlvbkNvbnRleHQpOiBQcm9taXNlPENvbmVHZW5lcmF0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IGFwaUtleSA9IGdldEFwaUtleSgpO1xuICBjb25zdCBwcm9tcHQgPSBidWlsZFByb21wdChjb250ZXh0KTtcbiAgY29uc3QgeyB0ZXh0OiByZXNwb25zZVRleHQsIHRva2Vuc1VzZWQgfSA9IGF3YWl0IGNhbGxBbnRocm9waWNBUEkocHJvbXB0LCBhcGlLZXkpO1xuICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbmVSZXNwb25zZShyZXNwb25zZVRleHQpO1xuICByZXN1bHQudG9rZW5zVXNlZCA9IHRva2Vuc1VzZWQ7XG5cbiAgaWYgKGNvbnRleHQuZXhpc3RpbmdDb25lcykge1xuICAgIGlmIChjb250ZXh0Lm9ubHlFbXB0eSkge1xuICAgICAgcmV0dXJuIG1lcmdlT25seUVtcHR5KHJlc3VsdCwgY29udGV4dC5leGlzdGluZ0NvbmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlV2l0aEV4aXN0aW5nKHJlc3VsdCwgY29udGV4dC5leGlzdGluZ0NvbmVzKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQVBJIO2CpOulvCDqsIDsoLjsmLXri4jri6QuXG4gKlxuICogU29uYW11LnNlY3JldCDrmJDripQg7ZmY6rK967OA7IiY7JeQ7IScIOqwgOyguOyYteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0QXBpS2V5KCk6IHN0cmluZyB7XG4gIC8vIFNvbmFtdS5zZWNyZXTsnYAg65+w7YOA7J6E7JeQIOuhnOuTnOuQmOuvgOuhnCDrj5nsoIHsnLzroZwgaW1wb3J0XG4gIGxldCBhcGlLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIC8vIFNvbmFtdeqwgCDstIjquLDtmZTrkJjslrQg7J6I64qUIOqyveyasFxuICAgIGNvbnN0IHsgU29uYW11IH0gPSByZXF1aXJlKFwiLi4vYXBpXCIpO1xuICAgIGFwaUtleSA9IFNvbmFtdS5zZWNyZXQ/LmFudGhyb3BpY19hcGlfa2V5O1xuICB9IGNhdGNoIHtcbiAgICAvLyBTb25hbXXqsIAg7LSI6riw7ZmU65CY7KeAIOyViuydgCDqsr3smrAgKO2FjOyKpO2KuCDrk7EpXG4gICAgYXBpS2V5ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFhcGlLZXkpIHtcbiAgICBhcGlLZXkgPSBwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWTtcbiAgfVxuXG4gIGlmICghYXBpS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJBTlRIUk9QSUNfQVBJX0tFWSBub3QgZm91bmQuIFwiICtcbiAgICAgICAgXCJTZXQgQU5USFJPUElDX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgYWRkIGl0IHRvIHNvbmFtdS5zZWNyZXQudHNcIixcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGFwaUtleTtcbn1cblxuLyoqXG4gKiDtlITroZzsoJ3tirgg66Oo7Yq47J2YIC5jbGF1ZGUvc2tpbGxzL3Byb2plY3QvKi5tZCDtjIzsnbzrk6TsnYQg7J297Ja0IOy7qO2FjeyKpO2KuOuhnCDrsJjtmZjtlanri4jri6QuXG4gKlxuICogcmVxdWlyZW1lbnRzLm1kIOuTsSDtlITroZzsoJ3tirjsnZgg67mE7KaI64uI7IqkIOyalOq1rOyCrO2VreqzvCDrj4TrqZTsnbgg7KeA7Iud7J2EIOuLtOydgCDtjIzsnbzrk6TsnYRcbiAqIGNvbmUg7IOd7ISxIOyLnCBMTE3sl5Dqsowg7KCE64us7ZWY7JesIO2YhOyLpOyggeyduCDrqZTtg4DrjbDsnbTthLDrpbwg7IOd7ISx7ZWY64+E66GdIO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gcmVhZFByb2plY3RTa2lsbHMoKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IFNvbmFtdSB9ID0gcmVxdWlyZShcIi4uL2FwaVwiKTtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IFNvbmFtdS5hcHBSb290UGF0aDtcbiAgICBjb25zdCBza2lsbHNEaXIgPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsIFwiLmNsYXVkZVwiLCBcInNraWxsc1wiLCBcInByb2plY3RcIik7XG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc2tpbGxzRGlyKSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZXMgPSBmc1xuICAgICAgLnJlYWRkaXJTeW5jKHNraWxsc0RpcilcbiAgICAgIC5maWx0ZXIoKGY6IHN0cmluZykgPT4gZi5lbmRzV2l0aChcIi5tZFwiKSlcbiAgICAgIC5zb3J0KCk7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihza2lsbHNEaXIsIGZpbGUpO1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICBjb250ZW50cy5wdXNoKGAtLS0gJHtmaWxlfSAtLS1cXG4ke2NvbnRlbnR9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnRzLmpvaW4oXCJcXG5cXG5cIik7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFNvbmFtdSDrr7jstIjquLDtmZQg65iQ64qUIO2MjOydvCDsoJHqt7wg7Jik66WYIOyLnCDruYgg66y47J6Q7Je0IOuwmO2ZmFxuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5cbi8qKlxuICogTExNIO2UhOuhrO2UhO2KuOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogYWktY2xpZW50LnRzIO2MqO2EtOydhCDssLjqs6DtlZjsl6wg66qF7ZmV7ZWcIOyngOyLnOyCrO2VreqzvCDstpzroKUg7ZiV7Iud7J2EIOygnOqzte2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRQcm9tcHQoY29udGV4dDogQ29uZUdlbmVyYXRpb25Db250ZXh0KTogc3RyaW5nIHtcbiAgY29uc3QgbG9jYWxlID0gY29udGV4dC5sb2NhbGUgfHwgXCJrb1wiO1xuICBjb25zdCBsb2NhbGVEZXNjID0ge1xuICAgIGtvOiBcIktvcmVhblwiLFxuICAgIGVuOiBcIkVuZ2xpc2hcIixcbiAgICBqYTogXCJKYXBhbmVzZVwiLFxuICB9W2xvY2FsZV07XG5cbiAgY29uc3QgcHJvamVjdENvbnRleHQgPSByZWFkUHJvamVjdFNraWxscygpO1xuICBjb25zdCBwcm9qZWN0U2VjdGlvbiA9IHByb2plY3RDb250ZXh0XG4gICAgPyBgXFxuUFJPSkVDVCBDT05URVhUIChidXNpbmVzcyByZXF1aXJlbWVudHMgYW5kIGRvbWFpbiBrbm93bGVkZ2UpOlxcbiR7cHJvamVjdENvbnRleHR9XFxuXFxuVXNlIHRoZSBhYm92ZSBwcm9qZWN0IGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgYnVzaW5lc3MgZG9tYWluLCBlbnRpdHkgcHVycG9zZXMsIGZpZWxkIG1lYW5pbmdzLCBhbmQgcmVsYXRpb25zaGlwcy4gR2VuZXJhdGUgY29uZSBtZXRhZGF0YSB0aGF0IHJlZmxlY3RzIHRoaXMgcHJvamVjdCdzIGFjdHVhbCByZXF1aXJlbWVudHMsIG5vdCBnZW5lcmljIGFzc3VtcHRpb25zLlxcbmBcbiAgICA6IFwiXCI7XG5cbiAgcmV0dXJuIGBZb3UgYXJlIGEgU29uYW11IGZyYW1ld29yayBleHBlcnQuIEdlbmVyYXRlIGNvbmUgbWV0YWRhdGEgZm9yIGRhdGFiYXNlIGVudGl0eSBmaXh0dXJlIGdlbmVyYXRpb24uXG5cbkNSSVRJQ0FMIFBSSU9SSVRZIFJVTEU6XG5UaGUgXCJub3RlXCIgZmllbGQgaXMgdGhlIFBSSU1BUlkgc291cmNlIGZvciBmaXh0dXJlIGRhdGEgZ2VuZXJhdGlvbi4gV2hlbiAtLXVzZS1sbG0gaXMgZW5hYmxlZCwgdGhlIGZpeHR1cmUgZ2VuZXJhdG9yIHJlYWRzIGNvbmUubm90ZSBhbmQgYXNrcyBMTE0gdG8gZ2VuZXJhdGUgY29udGV4dHVhbGx5IGFwcHJvcHJpYXRlIGRhdGEgQkVGT1JFIGZhbGxpbmcgYmFjayB0byBmaXh0dXJlR2VuZXJhdG9yLlxuVGhlcmVmb3JlLCBjb25lLm5vdGUgbXVzdCBhbHdheXMgY29udGFpbiByaWNoLCBkb21haW4tc3BlY2lmaWMgZGVzY3JpcHRpb25zIHdpdGggY29uY3JldGUgZXhhbXBsZXMgYW5kIHZhbHVlIHJhbmdlcy5cbmZpeHR1cmVHZW5lcmF0b3IgaXMgb25seSBhIEZBTExCQUNLIGZvciB3aGVuIExMTSBpcyB1bmF2YWlsYWJsZSAobm8gQVBJIGtleSkuIFdyaXRlIGl0IGFzIGEgYmVzdC1lZmZvcnQgYXBwcm94aW1hdGlvbiwgYnV0IG5ldmVyIHJlbHkgb24gaXQgYXMgdGhlIHByaW1hcnkgZ2VuZXJhdGlvbiBtZXRob2QuXG4ke3Byb2plY3RTZWN0aW9ufVxuRU5USVRZIFNUUlVDVFVSRTpcbiR7SlNPTi5zdHJpbmdpZnkoY29udGV4dC5lbnRpdHksIG51bGwsIDIpfVxuXG5MT0NBTEU6ICR7bG9jYWxlfSAoJHtsb2NhbGVEZXNjfSlcblxuSU5TVFJVQ1RJT05TOlxuMS4gRW50aXR5IGNvbmUgbWV0YWRhdGE6XG4gICAtIG5vdGU6IERlc2NyaWJlIHdoYXQgdGhpcyBlbnRpdHkgcmVwcmVzZW50cywgaXRzIHB1cnBvc2UsIHJlbGF0aW9uc2hpcHMsIGJ1c2luZXNzIGNvbnRleHQsIGFuZCBvdmVyYWxsIGd1aWRhbmNlIGZvciBnZW5lcmF0aW5nIHRlc3QgZGF0YS4gQ29tYmluZSBhbGwgcmVsZXZhbnQgaW5mb3JtYXRpb24gaW50byBvbmUgY29oZXJlbnQgZGVzY3JpcHRpb24uXG4gICAtIHRhZ3M6IFJlbGV2YW50IGNhdGVnb3JpemF0aW9uIHRhZ3NcblxuMi4gRm9yIGVhY2ggcHJvcCwgZ2VuZXJhdGUgYXBwcm9wcmlhdGUgY29uZSBtZXRhZGF0YTpcbiAgIC0gbm90ZSAoTU9TVCBJTVBPUlRBTlQpOiBEZXNjcmliZSB3aGF0IHRoaXMgZmllbGQgcmVwcmVzZW50cyBpbiBidXNpbmVzcyB0ZXJtcywgYW5kIHByb3ZpZGUgZGV0YWlsZWQgZ3VpZGFuY2UgZm9yIHJlYWxpc3RpYyB0ZXN0IGRhdGEgZ2VuZXJhdGlvbi4gSW5jbHVkZSBjb25jcmV0ZSBleGFtcGxlcywgdmFsdWUgcmFuZ2VzLCBmb3JtYXR0aW5nIHJ1bGVzLCBhbmQgZG9tYWluIGNvbnN0cmFpbnRzLiBUaGlzIGlzIHRoZSBwcmltYXJ5IGlucHV0IExMTSB1c2VzIHRvIGdlbmVyYXRlIGZpeHR1cmUgZGF0YS5cbiAgIC0gZml4dHVyZUdlbmVyYXRvcjogZmFrZXIuanMgZXhwcmVzc2lvbiBhcyBGQUxMQkFDSyBvbmx5IChzZWUgcnVsZSA5IGZvciBleGNlcHRpb25zKS4gRm9yIGZyZWUtdGV4dCBmaWVsZHMgd2hlcmUgZmFrZXIgY2Fubm90IHByb2R1Y2UgZG9tYWluLWFwcHJvcHJpYXRlIGNvbnRlbnQgKGRlc2NyaXB0aW9uLCBzdW1tYXJ5LCBub3RlLCByZWFzb24sIHRpdGxlLCBldGMuKSwgcHJlZmVyIHVzaW5nIGZha2VyLmhlbHBlcnMuYXJyYXlFbGVtZW50KFsuLi5dKSB3aXRoIDUtMTAgZG9tYWluLXNwZWNpZmljIGV4YW1wbGUgdmFsdWVzIHJhdGhlciB0aGFuIGZha2VyLmxvcmVtLiouXG5cbjMuIEZpZWxkIHR5cGUg4oaSIGZha2VyLmpzIG1hcHBpbmc6XG4gICAtIGVtYWlsIOKGkiBmYWtlci5pbnRlcm5ldC5lbWFpbCgpXG4gICAtIHBob25lIOKGkiBmYWtlci5waG9uZS5udW1iZXIoKVxuICAgLSBuYW1lL3VzZXJuYW1lIOKGkiBmYWtlci5wZXJzb24uZnVsbE5hbWUoKSAod2l0aCBsb2NhbGUpXG4gICAtIGJpcnRoX2RhdGUg4oaSIGZha2VyLmRhdGUuYmlydGhkYXRlKHsgbWluOiAxOCwgbWF4OiA2NSwgbW9kZTogJ2FnZScgfSlcbiAgIC0gc2FsYXJ5IOKGkiBmYWtlci5udW1iZXIuaW50KHsgbWluOiAzMF8wMDBfMDAwLCBtYXg6IDE1MF8wMDBfMDAwIH0pIGZvciBrbyBsb2NhbGVcbiAgIC0gY29tcGFueV9uYW1lIOKGkiBmYWtlci5jb21wYW55Lm5hbWUoKVxuICAgLSBhZGRyZXNzIOKGkiBmYWtlci5sb2NhdGlvbi5zdHJlZXRBZGRyZXNzKClcblxuNC4gUmVsYXRpb24gZmllbGRzIChCZWxvbmdzVG9PbmUsIE9uZVRvT25lIHdpdGggaGFzSm9pbkNvbHVtbik6XG4gICAtIEFsd2F5cyBhZGQgZGF0YVNvdXJjZTogeyBzdHJhdGVneTogXCJyZWNlbnRcIiwgY29uZmlnOiB7IGxpbWl0OiAzLTUgfSB9XG4gICAtIG5vdGU6IEV4cGxhaW4gd2hhdCB0aGlzIHJlbGF0aW9uIHJlcHJlc2VudHMgYW5kIHRoYXQgaXQgcmVmZXJlbmNlcyBleGlzdGluZyBkYXRhXG5cbjUuIFN1YnNldHMgY29uZSBtZXRhZGF0YSAoSU1QT1JUQU5UIC0gZ2VuZXJhdGUgZm9yIEFMTCBzdWJzZXRzKTpcbiAgIC0gbm90ZTogRGVzY3JpYmUgd2hhdCB0aGlzIHN1YnNldCByZXByZXNlbnRzLCB3aGF0IGZpZWxkcyBpdCBpbmNsdWRlcywgYW5kIHdoZW4gdG8gdXNlIGl0XG5cbjYuIEVudW1zIGNvbmUgbWV0YWRhdGEgKElNUE9SVEFOVCAtIGdlbmVyYXRlIGZvciBBTEwgZW51bXMpOlxuICAgLSBub3RlOiBEZXNjcmliZSB3aGF0IHRoaXMgZW51bSByZXByZXNlbnRzLiBJZiBhbnkgcHJvcCB1c2VzIHRoaXMgZW51bSB0eXBlLCBpbmNsdWRlIHRoZSBzYW1lIGd1aWRhbmNlIGZyb20gdGhhdCBwcm9wJ3Mgbm90ZS5cbiAgIC0gRm9yIGVhY2ggZW51bSB2YWx1ZSwgcHJvdmlkZSBub3RlIGV4cGxhaW5pbmcgd2hhdCB0aGF0IHNwZWNpZmljIHZhbHVlIG1lYW5zXG5cbjcuIEtvcmVhbiBmaWVsZCBuYW1lcyAobG9jYWxlPWtvKTpcbiAgIC0gSW5mZXIgbWVhbmluZyBhbmQgZ2VuZXJhdGUgYXBwcm9wcmlhdGUgZmFrZXJcbiAgIC0gXCLsnbTrpoRcIiDihpIgZmFrZXIucGVyc29uLmZ1bGxOYW1lKClcbiAgIC0gXCLsg53rhYTsm5TsnbxcIiDihpIgZmFrZXIuZGF0ZS5iaXJ0aGRhdGUoKVxuICAgLSBcIuyjvOyGjFwiIOKGkiBmYWtlci5sb2NhdGlvbi5zdHJlZXRBZGRyZXNzKClcblxuOC4gTG9jYWxlLXNwZWNpZmljIHZhbHVlczpcbiAgIC0ga286IEtvcmVhbiBuYW1lcywgYWRkcmVzc2VzLCBwaG9uZSBudW1iZXJzICgwMTAtWFhYWC1YWFhYIGZvcm1hdClcbiAgIC0gZW46IEVuZ2xpc2ggbmFtZXMsIFVTIGFkZHJlc3Nlc1xuICAgLSBqYTogSmFwYW5lc2UgbmFtZXMsIGFkZHJlc3Nlc1xuXG45LiBDb3JyZWxhdGVkIGZpZWxkcyAoSU1QT1JUQU5UIC0gZG8gTk9UIHVzZSBmaXh0dXJlR2VuZXJhdG9yIGZvciB0aGVzZSk6XG4gICBJZiBtdWx0aXBsZSBwcm9wcyBhcmUgc2VtYW50aWNhbGx5IHJlbGF0ZWQgYW5kIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIGVhY2ggb3RoZXIgKGUuZy4gbmFtZSArIG5hbWVfZW4sIG5hbWUgKyBuYW1lX2phLCB0aXRsZSArIHRpdGxlX2VuKSwgZG8gTk9UIHNldCBmaXh0dXJlR2VuZXJhdG9yIG9uIGFueSBvZiB0aGVtLlxuICAgSW5zdGVhZCwgc2V0IG9ubHkgbm90ZSB3aXRoIGEgY2xlYXIgZGVzY3JpcHRpb24gdGhhdCBleHBsYWlucyB0aGUgcmVsYXRpb25zaGlwLlxuICAgRXhhbXBsZTogaWYgbmFtZSBpcyBhIEtvcmVhbiBmdWxsIG5hbWUgbGlrZSBcIuq5gOuvvOyImFwiLCB0aGVuIG5hbWVfZW4gbXVzdCBiZSBpdHMgcm9tYW5pemVkIGZvcm0gXCJLaW0gTWluc3VcIi5cbiAgIFRoZSBmaXh0dXJlIGdlbmVyYXRvciB3aWxsIHBhc3MgYWxsIHN1Y2ggcHJvcHMgdG9nZXRoZXIgdG8gTExNIGluIGEgc2luZ2xlIGNhbGwgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LlxuICAgRGV0ZWN0aW9uIHJ1bGU6IGlmIGEgcHJvcCBuYW1lIG1hdGNoZXMgYW5vdGhlciBwcm9wIG5hbWUgd2l0aCBhIGxvY2FsZSBzdWZmaXggKF9lbiwgX2tvLCBfamEsIF9jbikgb3IgdmljZSB2ZXJzYSwgdHJlYXQgdGhlbSBhcyBjb3JyZWxhdGVkLlxuXG4xMC4gU3RyaW5nIFBLIOKAlCBzZXF1ZW5jZSB2cyBVVUlEOlxuICAgLSBEQiBzZXF1ZW5jZSBpZDogSWYgYSBwcm9wIG5hbWVkIFwiaWRcIiBoYXMgdHlwZSBcInN0cmluZ1wiIGFuZCB1c2VzIGEgREIgc2VxdWVuY2UgKGluZGljYXRlZCBieSBkYkRlZmF1bHQgY29udGFpbmluZyBcIm5leHR2YWxcIiksIHNldCBmaXh0dXJlU3RyYXRlZ3k6IFwic2VxdWVuY2VcIiBhbmQgZG8gTk9UIHNldCBmaXh0dXJlR2VuZXJhdG9yLiBub3RlIHNob3VsZCBtZW50aW9uIHNlcXVlbnRpYWwgbnVtYmVyIHN0b3JlZCBhcyBzdHJpbmcuXG4gICAtIGJldHRlci1hdXRoIGVudGl0eSBpZDogQWNjb3VudCwgU2Vzc2lvbiwgVmVyaWZpY2F0aW9uIOyXlO2LsO2LsOydmCBpZOuKlCBiZXR0ZXItYXV0aOqwgCBjcnlwdG8ucmFuZG9tVVVJRCgp66GcIOyDneyEse2VmOuKlCBVVUlE64ukLiBmaXh0dXJlU3RyYXRlZ3k6IFwic2VxdWVuY2VcIuulvCDsoIjrjIAg7IKs7Jqp7ZWY7KeAIOunkOqzoCwgZml4dHVyZUdlbmVyYXRvcjogXCJmYWtlci5zdHJpbmcudXVpZCgpXCLrpbwg7IKs7Jqp7ZWc64ukLlxuXG4xMS4gZml4dHVyZUNvbXBhbmlvbnMgKElNUE9SVEFOVCAtIG5ldmVyIGdlbmVyYXRlIG9yIG1vZGlmeSk6XG4gICAtIGZpeHR1cmVDb21wYW5pb25zIGlzIHVzZXItZGVjbGFyZWQgbWV0YWRhdGEgdGhhdCB0cmlnZ2VycyBhdXRvbWF0aWMgY29tcGFuaW9uIGZpeHR1cmUgY3JlYXRpb24gd2hlbiBhIHBhcmVudCBmaXh0dXJlIGlzIGdlbmVyYXRlZC5cbiAgIC0gRG8gTk9UIGdlbmVyYXRlIG9yIHN1Z2dlc3QgZml4dHVyZUNvbXBhbmlvbnMgZm9yIGFueSBwcm9wLiBPbmx5IHVzZXJzIGRlY2xhcmUgdGhpcyBpbnRlbnRpb25hbGx5LlxuICAgLSBJZiBhIHByb3AncyBleGlzdGluZyBjb25lIGFscmVhZHkgY29udGFpbnMgZml4dHVyZUNvbXBhbmlvbnMsIHByZXNlcnZlIGl0IGV4YWN0bHkgYXMtaXMgaW4gdGhlIHByb3BDb25lcyBvdXRwdXQuIERvIG5vdCByZW1vdmUsIGFsdGVyLCBvciBvbWl0IGl0LlxuICAgLSBFeGFtcGxlOiBpZiBVc2VyIGVudGl0eSdzIFwiaWRcIiBwcm9wIGNvbmUgaGFzIGZpeHR1cmVDb21wYW5pb25zLCBpbmNsdWRlIGl0IHVuY2hhbmdlZCBpbiBwcm9wQ29uZXNbXCJpZFwiXS5cblxuJHtcbiAgY29udGV4dC5leGlzdGluZ0NvbmVzXG4gICAgPyBgXG5FWElTVElORyBDT05FUyAocHJlc2VydmUgdGhlc2UgaWYgcHJlc2VudCk6XG4ke0pTT04uc3RyaW5naWZ5KGNvbnRleHQuZXhpc3RpbmdDb25lcywgbnVsbCwgMil9XG5gXG4gICAgOiBcIlwiXG59XG5cbk9VVFBVVCBGT1JNQVQ6XG5SZXR1cm4gT05MWSB2YWxpZCBKU09OIChubyBtYXJrZG93biwgbm8gY29kZSBibG9ja3MpLiBVc2UgdGhpcyBleGFjdCBzdHJ1Y3R1cmU6XG57XG4gIFwiZW50aXR5Q29uZVwiOiB7XG4gICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2YgdGhlIGVudGl0eSwgaXRzIHB1cnBvc2UsIGFuZCBndWlkYW5jZSBmb3IgZml4dHVyZSBnZW5lcmF0aW9uXCIsXG4gICAgXCJ0YWdzXCI6IFtcIm9wdGlvbmFsXCIsIFwidGFnc1wiXVxuICB9LFxuICBcInByb3BDb25lc1wiOiB7XG4gICAgXCJwcm9wX25hbWVcIjoge1xuICAgICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2YgdGhpcyBmaWVsZCBhbmQgZ3VpZGFuY2UgZm9yIHJlYWxpc3RpYyB0ZXN0IGRhdGEgZ2VuZXJhdGlvblwiLFxuICAgICAgXCJmaXh0dXJlR2VuZXJhdG9yXCI6IFwiZmFrZXIueHh4Lnl5eSgpXCIsXG4gICAgICBcImRhdGFTb3VyY2VcIjogeyBcInN0cmF0ZWd5XCI6IFwicmVjZW50XCIsIFwiY29uZmlnXCI6IHsgXCJsaW1pdFwiOiA1IH0gfVxuICAgIH1cbiAgfSxcbiAgXCJzdWJzZXRDb25lc1wiOiB7XG4gICAgXCJBXCI6IHtcbiAgICAgIFwibm90ZVwiOiBcIkRlc2NyaXB0aW9uIG9mIHN1YnNldCBBLCB3aGF0IGZpZWxkcyBpdCBpbmNsdWRlcywgYW5kIHdoZW4gdG8gdXNlIGl0XCJcbiAgICB9XG4gIH0sXG4gIFwiZW51bUNvbmVzXCI6IHtcbiAgICBcIkVudW1OYW1lXCI6IHtcbiAgICAgIFwibm90ZVwiOiBcIkRlc2NyaXB0aW9uIG9mIHRoZSBlbnVtIGFuZCBndWlkYW5jZSBmb3IgZ2VuZXJhdGluZyB2YWx1ZXNcIixcbiAgICAgIFwidmFsdWVzXCI6IHtcbiAgICAgICAgXCJWQUxVRV9LRVlcIjoge1xuICAgICAgICAgIFwibm90ZVwiOiBcIiR7bG9jYWxlRGVzY30gZGVzY3JpcHRpb24gb2YgdGhpcyBlbnVtIHZhbHVlXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5JTVBPUlRBTlQ6IFJldHVybiBwdXJlIEpTT04gb25seS4gRG8gTk9UIHdyYXAgaW4gbWFya2Rvd24gY29kZSBibG9ja3MuYDtcbn1cblxuLyoqXG4gKiBBbnRocm9waWMgQVBJ66W8IO2YuOy2nO2VmOyXrCBMTE0g7J2R64u17J2EIOuwm+yKteuLiOuLpC5cbiAqXG4gKiBAcGFyYW0gcHJvbXB0IC0g7IOd7ISx7ZWgIO2UhOuhrO2UhO2KuFxuICogQHBhcmFtIGFwaUtleSAtIEFudGhyb3BpYyBBUEkg7YKkXG4gKiBAcmV0dXJucyBMTE0g7J2R64u1IO2FjeyKpO2KuCDrsI8g7Yag7YGwIOyCrOyaqeufiVxuICovXG5hc3luYyBmdW5jdGlvbiBjYWxsQW50aHJvcGljQVBJKFxuICBwcm9tcHQ6IHN0cmluZyxcbiAgYXBpS2V5OiBzdHJpbmcsXG4pOiBQcm9taXNlPHsgdGV4dDogc3RyaW5nOyB0b2tlbnNVc2VkOiBudW1iZXIgfT4ge1xuICB0cnkge1xuICAgIC8vIEBhaS1zZGsvYW50aHJvcGlj6rO8IGFpIO2MqO2CpOyngOuKlCBvcHRpb25hbCBkZXBlbmRlbmN57J2066+A66GcIOuPmeyggSBpbXBvcnRcbiAgICBjb25zdCB7IGNyZWF0ZUFudGhyb3BpYyB9ID0gYXdhaXQgaW1wb3J0KFwiQGFpLXNkay9hbnRocm9waWNcIik7XG4gICAgY29uc3QgeyBnZW5lcmF0ZVRleHQgfSA9IGF3YWl0IGltcG9ydChcImFpXCIpO1xuXG4gICAgY29uc3QgYW50aHJvcGljID0gY3JlYXRlQW50aHJvcGljKHtcbiAgICAgIGFwaUtleSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgdGV4dCwgdXNhZ2UgfSA9IGF3YWl0IGdlbmVyYXRlVGV4dCh7XG4gICAgICBtb2RlbDogYW50aHJvcGljKFwiY2xhdWRlLXNvbm5ldC00LTVcIiksXG4gICAgICBwcm9tcHQsXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbnNVc2VkID0gdXNhZ2U/LnRvdGFsVG9rZW5zIHx8IDA7XG4gICAgaWYgKHVzYWdlKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0NvbmUgR2VuZXJhdG9yXSBUb2tlbnMgdXNlZDogJHt0b2tlbnNVc2VkfWApO1xuICAgIH1cblxuICAgIHJldHVybiB7IHRleHQsIHRva2Vuc1VzZWQgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIFwic3RhdHVzQ29kZVwiIGluIGVycm9yKSB7XG4gICAgICBjb25zdCBzdGF0dXNDb2RlID0gKGVycm9yIGFzIHsgc3RhdHVzQ29kZTogbnVtYmVyIH0pLnN0YXR1c0NvZGU7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJhdGUgbGltaXQgZXhjZWVkZWQuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFwiVW5rbm93biBlcnJvclwiO1xuICAgIHRocm93IG5ldyBFcnJvcihgTExNIEFQSSBmYWlsZWQ6ICR7bWVzc2FnZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIExMTSDsnZHri7XsnYQg7YyM7Iux7ZWY7JesIENvbmVHZW5lcmF0aW9uUmVzdWx066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBNYXJrZG93biDsvZTrk5wg67iU66Gd7J20IO2PrO2VqOuQmOyWtCDsnojsnLzrqbQg7KCc6rGw7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBwYXJzZUNvbmVSZXNwb25zZSh0ZXh0OiBzdHJpbmcpOiBDb25lR2VuZXJhdGlvblJlc3VsdCB7XG4gIGxldCBqc29uVGV4dCA9IHRleHQudHJpbSgpO1xuICBqc29uVGV4dCA9IGpzb25UZXh0LnJlcGxhY2UoL15gYGBqc29uXFxzKi9pLCBcIlwiKTtcbiAganNvblRleHQgPSBqc29uVGV4dC5yZXBsYWNlKC9gYGBcXHMqJC8sIFwiXCIpO1xuICBqc29uVGV4dCA9IGpzb25UZXh0LnRyaW0oKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoanNvblRleHQpO1xuXG4gICAgaWYgKCFwYXJzZWQucHJvcENvbmVzIHx8IHR5cGVvZiBwYXJzZWQucHJvcENvbmVzICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlOiBwcm9wQ29uZXMgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlDb25lOiBwYXJzZWQuZW50aXR5Q29uZSxcbiAgICAgIHByb3BDb25lczogcGFyc2VkLnByb3BDb25lcyxcbiAgICAgIHN1YnNldENvbmVzOiBwYXJzZWQuc3Vic2V0Q29uZXMgfHwge30sXG4gICAgICBlbnVtQ29uZXM6IHBhcnNlZC5lbnVtQ29uZXMgfHwge30sXG4gICAgICB0b2tlbnNVc2VkOiAwLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBwYXJzZSBMTE0gcmVzcG9uc2U6ICR7bWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgYE9yaWdpbmFsIHJlc3BvbnNlOlxcbiR7dGV4dH1cXG5cXG5gICtcbiAgICAgICAgYENsZWFuZWQgSlNPTjpcXG4ke2pzb25UZXh0fWAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIOyDneyEseuQnCBjb25l7J2EIOq4sOyhtCBjb25l6rO8IOuzke2Vqe2VqeuLiOuLpC5cbiAqXG4gKiDquLDsobQgY29uZeydtCDsnojsnLzrqbQg67O07KG07ZWY6rOgLCDsl4bripQg6rK97Jqw7JeQ66eMIOyDneyEseuQnCBjb25l7J2EIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VXaXRoRXhpc3RpbmcoXG4gIGdlbmVyYXRlZDogQ29uZUdlbmVyYXRpb25SZXN1bHQsXG4gIGV4aXN0aW5nOiBSZWNvcmQ8c3RyaW5nLCBDb25lPixcbik6IENvbmVHZW5lcmF0aW9uUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5nZW5lcmF0ZWQgfTtcblxuICBjb25zdCBlbnRpdHlLZXkgPSBgZW50aXR5OiR7Z2VuZXJhdGVkLmVudGl0eUNvbmUgPyBcInByZXNlbnRcIiA6IFwibWlzc2luZ1wifWA7XG4gIGlmIChleGlzdGluZ1tlbnRpdHlLZXldKSB7XG4gICAgcmVzdWx0LmVudGl0eUNvbmUgPSBleGlzdGluZ1tlbnRpdHlLZXldO1xuICB9XG5cbiAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQucHJvcENvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBwcm9wOiR7cHJvcE5hbWV9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XSkge1xuICAgICAgcmVzdWx0LnByb3BDb25lc1twcm9wTmFtZV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgZW51bUlkIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5lbnVtQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYGVudW06JHtlbnVtSWR9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XSkge1xuICAgICAgcmVzdWx0LmVudW1Db25lc1tlbnVtSWRdID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHN1YnNldEtleSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuc3Vic2V0Q29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHN1YnNldDoke3N1YnNldEtleX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldKSB7XG4gICAgICByZXN1bHQuc3Vic2V0Q29uZXNbc3Vic2V0S2V5XSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBub3Rl6rCAIOyXhuuKlCBjb25l66eMIOyDneyEse2VmOqzoCDrgpjrqLjsp4DripQg67O07KG07ZWp64uI64ukLlxuICpcbiAqIOq4sOyhtCBjb25l7JeQIG5vdGXqsIAg7J6I7Jy866m0IOuztOyhtO2VmOqzoCwg7JeG7Jy866m0IOyDiOuhnCDsg53shLHrkJwgY29uZeydhCDsgqzsmqntlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlT25seUVtcHR5KFxuICBnZW5lcmF0ZWQ6IENvbmVHZW5lcmF0aW9uUmVzdWx0LFxuICBleGlzdGluZzogUmVjb3JkPHN0cmluZywgQ29uZT4sXG4pOiBDb25lR2VuZXJhdGlvblJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uZ2VuZXJhdGVkIH07XG5cbiAgLy8gRW50aXR5IGNvbmU6IHNjYWxl7J20IOyeiOycvOuptCDrs7TsobRcbiAgY29uc3QgZW50aXR5S2V5ID0gYGVudGl0eToke2dlbmVyYXRlZC5lbnRpdHlDb25lID8gXCJwcmVzZW50XCIgOiBcIm1pc3NpbmdcIn1gO1xuICBpZiAoZXhpc3RpbmdbZW50aXR5S2V5XT8ubm90ZSkge1xuICAgIHJlc3VsdC5lbnRpdHlDb25lID0gZXhpc3RpbmdbZW50aXR5S2V5XTtcbiAgfVxuXG4gIC8vIFByb3AgY29uZXM6IHNjYWxl7J20IOyeiOycvOuptCDrs7TsobRcbiAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQucHJvcENvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBwcm9wOiR7cHJvcE5hbWV9YDtcbiAgICBpZiAoZXhpc3Rpbmdba2V5XT8ubm90ZSkge1xuICAgICAgcmVzdWx0LnByb3BDb25lc1twcm9wTmFtZV0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVudW0gY29uZXM6IHNjYWxl7J20IOyeiOycvOuptCDrs7TsobRcbiAgZm9yIChjb25zdCBlbnVtSWQgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLmVudW1Db25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgZW51bToke2VudW1JZH1gO1xuICAgIGlmIChleGlzdGluZ1trZXldPy5ub3RlKSB7XG4gICAgICByZXN1bHQuZW51bUNvbmVzW2VudW1JZF0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1YnNldCBjb25lczogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBmb3IgKGNvbnN0IHN1YnNldEtleSBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuc3Vic2V0Q29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHN1YnNldDoke3N1YnNldEtleX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldPy5ub3RlKSB7XG4gICAgICByZXN1bHQuc3Vic2V0Q29uZXNbc3Vic2V0S2V5XSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdLCJuYW1lcyI6WyJmcyIsInBhdGgiLCJnZW5lcmF0ZUNvbmVzIiwiY29udGV4dCIsImFwaUtleSIsImdldEFwaUtleSIsInByb21wdCIsImJ1aWxkUHJvbXB0IiwidGV4dCIsInJlc3BvbnNlVGV4dCIsInRva2Vuc1VzZWQiLCJjYWxsQW50aHJvcGljQVBJIiwicmVzdWx0IiwicGFyc2VDb25lUmVzcG9uc2UiLCJleGlzdGluZ0NvbmVzIiwib25seUVtcHR5IiwibWVyZ2VPbmx5RW1wdHkiLCJtZXJnZVdpdGhFeGlzdGluZyIsIlNvbmFtdSIsInJlcXVpcmUiLCJzZWNyZXQiLCJhbnRocm9waWNfYXBpX2tleSIsInVuZGVmaW5lZCIsInByb2Nlc3MiLCJlbnYiLCJBTlRIUk9QSUNfQVBJX0tFWSIsIkVycm9yIiwicmVhZFByb2plY3RTa2lsbHMiLCJwcm9qZWN0Um9vdCIsImFwcFJvb3RQYXRoIiwic2tpbGxzRGlyIiwiam9pbiIsImV4aXN0c1N5bmMiLCJmaWxlcyIsInJlYWRkaXJTeW5jIiwiZmlsdGVyIiwiZiIsImVuZHNXaXRoIiwic29ydCIsImxlbmd0aCIsImNvbnRlbnRzIiwiZmlsZSIsImZpbGVQYXRoIiwiY29udGVudCIsInJlYWRGaWxlU3luYyIsInRyaW0iLCJwdXNoIiwibG9jYWxlIiwibG9jYWxlRGVzYyIsImtvIiwiZW4iLCJqYSIsInByb2plY3RDb250ZXh0IiwicHJvamVjdFNlY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwiZW50aXR5IiwiY3JlYXRlQW50aHJvcGljIiwiZ2VuZXJhdGVUZXh0IiwiYW50aHJvcGljIiwidXNhZ2UiLCJtb2RlbCIsInRvdGFsVG9rZW5zIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwic3RhdHVzQ29kZSIsIm1lc3NhZ2UiLCJqc29uVGV4dCIsInJlcGxhY2UiLCJwYXJzZWQiLCJwYXJzZSIsInByb3BDb25lcyIsImVudGl0eUNvbmUiLCJzdWJzZXRDb25lcyIsImVudW1Db25lcyIsImdlbmVyYXRlZCIsImV4aXN0aW5nIiwiZW50aXR5S2V5IiwicHJvcE5hbWUiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwiZW51bUlkIiwic3Vic2V0S2V5Iiwibm90ZSJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWUEsUUFBUSxVQUFVO0FBQzlCLFlBQVlDLFVBQVUsWUFBWTtBQTZCbEM7Ozs7O0NBS0MsR0FDRCxPQUFPLGVBQWVDLGNBQWNDLE9BQThCO0lBQ2hFLE1BQU1DLFNBQVNDO0lBQ2YsTUFBTUMsU0FBU0MsWUFBWUo7SUFDM0IsTUFBTSxFQUFFSyxNQUFNQyxZQUFZLEVBQUVDLFVBQVUsRUFBRSxHQUFHLE1BQU1DLGlCQUFpQkwsUUFBUUY7SUFDMUUsTUFBTVEsU0FBU0Msa0JBQWtCSjtJQUNqQ0csT0FBT0YsVUFBVSxHQUFHQTtJQUVwQixJQUFJUCxRQUFRVyxhQUFhLEVBQUU7UUFDekIsSUFBSVgsUUFBUVksU0FBUyxFQUFFO1lBQ3JCLE9BQU9DLGVBQWVKLFFBQVFULFFBQVFXLGFBQWE7UUFDckQ7UUFDQSxPQUFPRyxrQkFBa0JMLFFBQVFULFFBQVFXLGFBQWE7SUFDeEQ7SUFFQSxPQUFPRjtBQUNUO0FBRUE7Ozs7Q0FJQyxHQUNELFNBQVNQO0lBQ1Asd0NBQXdDO0lBQ3hDLElBQUlEO0lBRUosSUFBSTtRQUNGLHNCQUFzQjtRQUN0QixNQUFNLEVBQUVjLE1BQU0sRUFBRSxHQUFHQyxRQUFRO1FBQzNCZixTQUFTYyxPQUFPRSxNQUFNLEVBQUVDO0lBQzFCLEVBQUUsT0FBTTtRQUNOLDhCQUE4QjtRQUM5QmpCLFNBQVNrQjtJQUNYO0lBRUEsSUFBSSxDQUFDbEIsUUFBUTtRQUNYQSxTQUFTbUIsUUFBUUMsR0FBRyxDQUFDQyxpQkFBaUI7SUFDeEM7SUFFQSxJQUFJLENBQUNyQixRQUFRO1FBQ1gsTUFBTSxJQUFJc0IsTUFDUixrQ0FDRTtJQUVOO0lBRUEsT0FBT3RCO0FBQ1Q7QUFFQTs7Ozs7Q0FLQyxHQUNELFNBQVN1QjtJQUNQLElBQUk7UUFDRixNQUFNLEVBQUVULE1BQU0sRUFBRSxHQUFHQyxRQUFRO1FBQzNCLE1BQU1TLGNBQWNWLE9BQU9XLFdBQVc7UUFDdEMsTUFBTUMsWUFBWTdCLEtBQUs4QixJQUFJLENBQUNILGFBQWEsV0FBVyxVQUFVO1FBRTlELElBQUksQ0FBQzVCLEdBQUdnQyxVQUFVLENBQUNGLFlBQVk7WUFDN0IsT0FBTztRQUNUO1FBRUEsTUFBTUcsUUFBUWpDLEdBQ1hrQyxXQUFXLENBQUNKLFdBQ1pLLE1BQU0sQ0FBQyxDQUFDQyxJQUFjQSxFQUFFQyxRQUFRLENBQUMsUUFDakNDLElBQUk7UUFDUCxJQUFJTCxNQUFNTSxNQUFNLEtBQUssR0FBRztZQUN0QixPQUFPO1FBQ1Q7UUFFQSxNQUFNQyxXQUFxQixFQUFFO1FBQzdCLEtBQUssTUFBTUMsUUFBUVIsTUFBTztZQUN4QixNQUFNUyxXQUFXekMsS0FBSzhCLElBQUksQ0FBQ0QsV0FBV1c7WUFDdEMsTUFBTUUsVUFBVTNDLEdBQUc0QyxZQUFZLENBQUNGLFVBQVUsU0FBU0csSUFBSTtZQUN2RCxJQUFJRixTQUFTO2dCQUNYSCxTQUFTTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUVMLEtBQUssTUFBTSxFQUFFRSxTQUFTO1lBQzdDO1FBQ0Y7UUFFQSxPQUFPSCxTQUFTVCxJQUFJLENBQUM7SUFDdkIsRUFBRSxPQUFNO1FBQ04scUNBQXFDO1FBQ3JDLE9BQU87SUFDVDtBQUNGO0FBRUE7Ozs7Q0FJQyxHQUNELFNBQVN4QixZQUFZSixPQUE4QjtJQUNqRCxNQUFNNEMsU0FBUzVDLFFBQVE0QyxNQUFNLElBQUk7SUFDakMsTUFBTUMsYUFBYTtRQUNqQkMsSUFBSTtRQUNKQyxJQUFJO1FBQ0pDLElBQUk7SUFDTixDQUFDLENBQUNKLE9BQU87SUFFVCxNQUFNSyxpQkFBaUJ6QjtJQUN2QixNQUFNMEIsaUJBQWlCRCxpQkFDbkIsQ0FBQyxpRUFBaUUsRUFBRUEsZUFBZSw0TkFBNE4sQ0FBQyxHQUNoVDtJQUVKLE9BQU8sQ0FBQzs7Ozs7O0FBTVYsRUFBRUMsZUFBZTs7QUFFakIsRUFBRUMsS0FBS0MsU0FBUyxDQUFDcEQsUUFBUXFELE1BQU0sRUFBRSxNQUFNLEdBQUc7O1FBRWxDLEVBQUVULE9BQU8sRUFBRSxFQUFFQyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTJEaEMsRUFDRTdDLFFBQVFXLGFBQWEsR0FDakIsQ0FBQzs7QUFFUCxFQUFFd0MsS0FBS0MsU0FBUyxDQUFDcEQsUUFBUVcsYUFBYSxFQUFFLE1BQU0sR0FBRztBQUNqRCxDQUFDLEdBQ0ssR0FDTDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUJBMEJrQixFQUFFa0MsV0FBVzs7Ozs7OztzRUFPc0MsQ0FBQztBQUN2RTtBQUVBOzs7Ozs7Q0FNQyxHQUNELGVBQWVyQyxpQkFDYkwsTUFBYyxFQUNkRixNQUFjO0lBRWQsSUFBSTtRQUNGLDhEQUE4RDtRQUM5RCxNQUFNLEVBQUVxRCxlQUFlLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQztRQUN6QyxNQUFNLEVBQUVDLFlBQVksRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDO1FBRXRDLE1BQU1DLFlBQVlGLGdCQUFnQjtZQUNoQ3JEO1FBQ0Y7UUFFQSxNQUFNLEVBQUVJLElBQUksRUFBRW9ELEtBQUssRUFBRSxHQUFHLE1BQU1GLGFBQWE7WUFDekNHLE9BQU9GLFVBQVU7WUFDakJyRDtRQUNGO1FBRUEsTUFBTUksYUFBYWtELE9BQU9FLGVBQWU7UUFDekMsSUFBSUYsT0FBTztZQUNURyxRQUFRQyxHQUFHLENBQUMsQ0FBQyw4QkFBOEIsRUFBRXRELFlBQVk7UUFDM0Q7UUFFQSxPQUFPO1lBQUVGO1lBQU1FO1FBQVc7SUFDNUIsRUFBRSxPQUFPdUQsT0FBZ0I7UUFDdkIsSUFBSUEsU0FBUyxPQUFPQSxVQUFVLFlBQVksZ0JBQWdCQSxPQUFPO1lBQy9ELE1BQU1DLGFBQWEsQUFBQ0QsTUFBaUNDLFVBQVU7WUFDL0QsSUFBSUEsZUFBZSxLQUFLO2dCQUN0QixNQUFNLElBQUl4QyxNQUFNO1lBQ2xCO1FBQ0Y7UUFFQSxNQUFNeUMsVUFBVUYsaUJBQWlCdkMsUUFBUXVDLE1BQU1FLE9BQU8sR0FBRztRQUN6RCxNQUFNLElBQUl6QyxNQUFNLENBQUMsZ0JBQWdCLEVBQUV5QyxTQUFTO0lBQzlDO0FBQ0Y7QUFFQTs7OztDQUlDLEdBQ0QsU0FBU3RELGtCQUFrQkwsSUFBWTtJQUNyQyxJQUFJNEQsV0FBVzVELEtBQUtxQyxJQUFJO0lBQ3hCdUIsV0FBV0EsU0FBU0MsT0FBTyxDQUFDLGdCQUFnQjtJQUM1Q0QsV0FBV0EsU0FBU0MsT0FBTyxDQUFDLFdBQVc7SUFDdkNELFdBQVdBLFNBQVN2QixJQUFJO0lBRXhCLElBQUk7UUFDRixNQUFNeUIsU0FBU2hCLEtBQUtpQixLQUFLLENBQUNIO1FBRTFCLElBQUksQ0FBQ0UsT0FBT0UsU0FBUyxJQUFJLE9BQU9GLE9BQU9FLFNBQVMsS0FBSyxVQUFVO1lBQzdELE1BQU0sSUFBSTlDLE1BQU07UUFDbEI7UUFFQSxPQUFPO1lBQ0wrQyxZQUFZSCxPQUFPRyxVQUFVO1lBQzdCRCxXQUFXRixPQUFPRSxTQUFTO1lBQzNCRSxhQUFhSixPQUFPSSxXQUFXLElBQUksQ0FBQztZQUNwQ0MsV0FBV0wsT0FBT0ssU0FBUyxJQUFJLENBQUM7WUFDaENqRSxZQUFZO1FBQ2Q7SUFDRixFQUFFLE9BQU91RCxPQUFPO1FBQ2QsTUFBTUUsVUFBVUYsaUJBQWlCdkMsUUFBUXVDLE1BQU1FLE9BQU8sR0FBRztRQUN6RCxNQUFNLElBQUl6QyxNQUNSLENBQUMsOEJBQThCLEVBQUV5QyxRQUFRLElBQUksQ0FBQyxHQUM1QyxDQUFDLG9CQUFvQixFQUFFM0QsS0FBSyxJQUFJLENBQUMsR0FDakMsQ0FBQyxlQUFlLEVBQUU0RCxVQUFVO0lBRWxDO0FBQ0Y7QUFFQTs7OztDQUlDLEdBQ0QsU0FBU25ELGtCQUNQMkQsU0FBK0IsRUFDL0JDLFFBQThCO0lBRTlCLE1BQU1qRSxTQUFTO1FBQUUsR0FBR2dFLFNBQVM7SUFBQztJQUU5QixNQUFNRSxZQUFZLENBQUMsT0FBTyxFQUFFRixVQUFVSCxVQUFVLEdBQUcsWUFBWSxXQUFXO0lBQzFFLElBQUlJLFFBQVEsQ0FBQ0MsVUFBVSxFQUFFO1FBQ3ZCbEUsT0FBTzZELFVBQVUsR0FBR0ksUUFBUSxDQUFDQyxVQUFVO0lBQ3pDO0lBRUEsS0FBSyxNQUFNQyxZQUFZQyxPQUFPQyxJQUFJLENBQUNMLFVBQVVKLFNBQVMsRUFBRztRQUN2RCxNQUFNVSxNQUFNLENBQUMsS0FBSyxFQUFFSCxVQUFVO1FBQzlCLElBQUlGLFFBQVEsQ0FBQ0ssSUFBSSxFQUFFO1lBQ2pCdEUsT0FBTzRELFNBQVMsQ0FBQ08sU0FBUyxHQUFHRixRQUFRLENBQUNLLElBQUk7UUFDNUM7SUFDRjtJQUVBLEtBQUssTUFBTUMsVUFBVUgsT0FBT0MsSUFBSSxDQUFDTCxVQUFVRCxTQUFTLEVBQUc7UUFDckQsTUFBTU8sTUFBTSxDQUFDLEtBQUssRUFBRUMsUUFBUTtRQUM1QixJQUFJTixRQUFRLENBQUNLLElBQUksRUFBRTtZQUNqQnRFLE9BQU8rRCxTQUFTLENBQUNRLE9BQU8sR0FBR04sUUFBUSxDQUFDSyxJQUFJO1FBQzFDO0lBQ0Y7SUFFQSxLQUFLLE1BQU1FLGFBQWFKLE9BQU9DLElBQUksQ0FBQ0wsVUFBVUYsV0FBVyxFQUFHO1FBQzFELE1BQU1RLE1BQU0sQ0FBQyxPQUFPLEVBQUVFLFdBQVc7UUFDakMsSUFBSVAsUUFBUSxDQUFDSyxJQUFJLEVBQUU7WUFDakJ0RSxPQUFPOEQsV0FBVyxDQUFDVSxVQUFVLEdBQUdQLFFBQVEsQ0FBQ0ssSUFBSTtRQUMvQztJQUNGO0lBRUEsT0FBT3RFO0FBQ1Q7QUFFQTs7OztDQUlDLEdBQ0QsU0FBU0ksZUFDUDRELFNBQStCLEVBQy9CQyxRQUE4QjtJQUU5QixNQUFNakUsU0FBUztRQUFFLEdBQUdnRSxTQUFTO0lBQUM7SUFFOUIsNkJBQTZCO0lBQzdCLE1BQU1FLFlBQVksQ0FBQyxPQUFPLEVBQUVGLFVBQVVILFVBQVUsR0FBRyxZQUFZLFdBQVc7SUFDMUUsSUFBSUksUUFBUSxDQUFDQyxVQUFVLEVBQUVPLE1BQU07UUFDN0J6RSxPQUFPNkQsVUFBVSxHQUFHSSxRQUFRLENBQUNDLFVBQVU7SUFDekM7SUFFQSw0QkFBNEI7SUFDNUIsS0FBSyxNQUFNQyxZQUFZQyxPQUFPQyxJQUFJLENBQUNMLFVBQVVKLFNBQVMsRUFBRztRQUN2RCxNQUFNVSxNQUFNLENBQUMsS0FBSyxFQUFFSCxVQUFVO1FBQzlCLElBQUlGLFFBQVEsQ0FBQ0ssSUFBSSxFQUFFRyxNQUFNO1lBQ3ZCekUsT0FBTzRELFNBQVMsQ0FBQ08sU0FBUyxHQUFHRixRQUFRLENBQUNLLElBQUk7UUFDNUM7SUFDRjtJQUVBLDRCQUE0QjtJQUM1QixLQUFLLE1BQU1DLFVBQVVILE9BQU9DLElBQUksQ0FBQ0wsVUFBVUQsU0FBUyxFQUFHO1FBQ3JELE1BQU1PLE1BQU0sQ0FBQyxLQUFLLEVBQUVDLFFBQVE7UUFDNUIsSUFBSU4sUUFBUSxDQUFDSyxJQUFJLEVBQUVHLE1BQU07WUFDdkJ6RSxPQUFPK0QsU0FBUyxDQUFDUSxPQUFPLEdBQUdOLFFBQVEsQ0FBQ0ssSUFBSTtRQUMxQztJQUNGO0lBRUEsOEJBQThCO0lBQzlCLEtBQUssTUFBTUUsYUFBYUosT0FBT0MsSUFBSSxDQUFDTCxVQUFVRixXQUFXLEVBQUc7UUFDMUQsTUFBTVEsTUFBTSxDQUFDLE9BQU8sRUFBRUUsV0FBVztRQUNqQyxJQUFJUCxRQUFRLENBQUNLLElBQUksRUFBRUcsTUFBTTtZQUN2QnpFLE9BQU84RCxXQUFXLENBQUNVLFVBQVUsR0FBR1AsUUFBUSxDQUFDSyxJQUFJO1FBQy9DO0lBQ0Y7SUFFQSxPQUFPdEU7QUFDVCJ9
|
|
341
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25lL2NvbmUtZ2VuZXJhdG9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQ29uZSwgRW50aXR5SnNvbiB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vKipcbiAqIENvbmUg7IOd7ISxIOy7qO2FjeyKpO2KuFxuICpcbiAqIEVudGl0eSDsoJXrs7TsmYAg7IOd7ISxIOyYteyFmOydhCDri7Tqs6Ag7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgdHlwZSBDb25lR2VuZXJhdGlvbkNvbnRleHQgPSB7XG4gIGVudGl0eTogRW50aXR5SnNvbjtcbiAgbG9jYWxlPzogXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiO1xuICBleGlzdGluZ0NvbmVzPzogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIC8qKiB0cnVl7J24IOqyveyasCBub3Rl6rCAIOyXhuuKlCBjb25l66eMIOyDneyEsSAqL1xuICBvbmx5RW1wdHk/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBDb25lIOyDneyEsSDqsrDqs7xcbiAqXG4gKiBFbnRpdHksIFByb3BzLCBTdWJzZXRzLCBFbnVtc+ydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDri7Tqs6Ag7J6I7Iq164uI64ukLlxuICovXG5leHBvcnQgdHlwZSBDb25lR2VuZXJhdGlvblJlc3VsdCA9IHtcbiAgZW50aXR5Q29uZT86IENvbmU7XG4gIHByb3BDb25lczogUmVjb3JkPHN0cmluZywgQ29uZT47XG4gIHN1YnNldENvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgZW51bUNvbmVzOiBSZWNvcmQ8c3RyaW5nLCBDb25lPjtcbiAgdG9rZW5zVXNlZDogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBMTE3snYQg7IKs7Jqp7ZWY7JesIEVudGl0eeydmCBjb25lIOuplO2DgOuNsOydtO2EsOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgLSBFbnRpdHkg7KCV67O07JmAIOyDneyEsSDsmLXshZhcbiAqIEByZXR1cm5zIOyDneyEseuQnCBjb25lIOuplO2DgOuNsOydtO2EsFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVDb25lcyhjb250ZXh0OiBDb25lR2VuZXJhdGlvbkNvbnRleHQpOiBQcm9taXNlPENvbmVHZW5lcmF0aW9uUmVzdWx0PiB7XG4gIGNvbnN0IGFwaUtleSA9IGdldEFwaUtleSgpO1xuICBjb25zdCBwcm9tcHQgPSBidWlsZFByb21wdChjb250ZXh0KTtcbiAgY29uc3QgeyB0ZXh0OiByZXNwb25zZVRleHQsIHRva2Vuc1VzZWQgfSA9IGF3YWl0IGNhbGxBbnRocm9waWNBUEkocHJvbXB0LCBhcGlLZXkpO1xuICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbmVSZXNwb25zZShyZXNwb25zZVRleHQpO1xuICByZXN1bHQudG9rZW5zVXNlZCA9IHRva2Vuc1VzZWQ7XG5cbiAgaWYgKGNvbnRleHQuZXhpc3RpbmdDb25lcykge1xuICAgIGlmIChjb250ZXh0Lm9ubHlFbXB0eSkge1xuICAgICAgcmV0dXJuIG1lcmdlT25seUVtcHR5KHJlc3VsdCwgY29udGV4dC5leGlzdGluZ0NvbmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlV2l0aEV4aXN0aW5nKHJlc3VsdCwgY29udGV4dC5leGlzdGluZ0NvbmVzKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQVBJIO2CpOulvCDqsIDsoLjsmLXri4jri6QuXG4gKlxuICogU29uYW11LnNlY3JldCDrmJDripQg7ZmY6rK967OA7IiY7JeQ7IScIOqwgOyguOyYteuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0QXBpS2V5KCk6IHN0cmluZyB7XG4gIC8vIFNvbmFtdS5zZWNyZXTsnYAg65+w7YOA7J6E7JeQIOuhnOuTnOuQmOuvgOuhnCDrj5nsoIHsnLzroZwgaW1wb3J0XG4gIGxldCBhcGlLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIC8vIFNvbmFtdeqwgCDstIjquLDtmZTrkJjslrQg7J6I64qUIOqyveyasFxuICAgIGNvbnN0IHsgU29uYW11IH0gPSByZXF1aXJlKFwiLi4vYXBpXCIpO1xuICAgIGFwaUtleSA9IFNvbmFtdS5zZWNyZXQ/LmFudGhyb3BpY19hcGlfa2V5O1xuICB9IGNhdGNoIHtcbiAgICAvLyBTb25hbXXqsIAg7LSI6riw7ZmU65CY7KeAIOyViuydgCDqsr3smrAgKO2FjOyKpO2KuCDrk7EpXG4gICAgYXBpS2V5ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFhcGlLZXkpIHtcbiAgICBhcGlLZXkgPSBwcm9jZXNzLmVudi5BTlRIUk9QSUNfQVBJX0tFWTtcbiAgfVxuXG4gIGlmICghYXBpS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJBTlRIUk9QSUNfQVBJX0tFWSBub3QgZm91bmQuIFwiICtcbiAgICAgICAgXCJTZXQgQU5USFJPUElDX0FQSV9LRVkgZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgYWRkIGl0IHRvIHNvbmFtdS5zZWNyZXQudHNcIixcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGFwaUtleTtcbn1cblxuLyoqXG4gKiDrj4TrqZTsnbjrs4Qge2RvbWFpbn0uY29udHJhY3QubWTsmYAgYXJjaGl0ZWN0dXJlLm1k66W8IOydveyWtCDsu6jthY3siqTtirjroZwg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIC0gY29udHJhY3Qve2RvbWFpbn0ve2RvbWFpbn0uY29udHJhY3QubWQ6IOuPhOuplOyduCDqt5zsuZnqs7wg6rKw7KCVIOq3vOqxsCAo7KO8IOywuOyhsCDrjIDsg4EpXG4gKiAtIC5jbGF1ZGUvc2tpbGxzL3Byb2plY3QvYXJjaGl0ZWN0dXJlLm1kOiDsl5Tti7Dti7Ag7ISk6rOEIOq1rOyhsCAo67O07KGwIOywuOyhsClcbiAqXG4gKiBjb25lIOyDneyEsSDsi5wgTExN7JeQ6rKMIOyghOuLrO2VmOyXrCDrj4TrqZTsnbgg66el65297JeQIOunnuuKlCDrqZTtg4DrjbDsnbTthLDrpbwg7IOd7ISx7ZWY64+E66GdIO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gcmVhZFByb2plY3RTa2lsbHMoKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7IFNvbmFtdSB9ID0gcmVxdWlyZShcIi4uL2FwaVwiKTtcbiAgICBjb25zdCBwcm9qZWN0Um9vdCA9IFNvbmFtdS5hcHBSb290UGF0aDtcbiAgICBjb25zdCBjb250ZW50czogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIGNvbnRyYWN0LyoqLyouY29udHJhY3QubWQg7IiY7KeRXG4gICAgY29uc3QgY29udHJhY3REaXIgPSBwYXRoLmpvaW4ocHJvamVjdFJvb3QsIFwiY29udHJhY3RcIik7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoY29udHJhY3REaXIpKSB7XG4gICAgICBjb25zdCBkb21haW5zID0gZnNcbiAgICAgICAgLnJlYWRkaXJTeW5jKGNvbnRyYWN0RGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSlcbiAgICAgICAgLmZpbHRlcigoZCkgPT4gZC5pc0RpcmVjdG9yeSgpKVxuICAgICAgICAubWFwKChkKSA9PiBkLm5hbWUpO1xuXG4gICAgICBmb3IgKGNvbnN0IGRvbWFpbiBvZiBkb21haW5zKSB7XG4gICAgICAgIGNvbnN0IGRvbWFpbkRpciA9IHBhdGguam9pbihjb250cmFjdERpciwgZG9tYWluKTtcbiAgICAgICAgY29uc3QgY29udHJhY3RGaWxlcyA9IGZzXG4gICAgICAgICAgLnJlYWRkaXJTeW5jKGRvbWFpbkRpcilcbiAgICAgICAgICAuZmlsdGVyKChmOiBzdHJpbmcpID0+IGYuZW5kc1dpdGgoXCIuY29udHJhY3QubWRcIikpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBjb250cmFjdEZpbGVzKSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZG9tYWluRGlyLCBmaWxlKTtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBcInV0Zi04XCIpLnRyaW0oKTtcbiAgICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgY29udGVudHMucHVzaChgLS0tIGNvbnRyYWN0LyR7ZG9tYWlufS8ke2ZpbGV9IC0tLVxcbiR7Y29udGVudH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAuY2xhdWRlL3NraWxscy9wcm9qZWN0L2FyY2hpdGVjdHVyZS5tZCDrs7TsobAg7LC47KGwXG4gICAgY29uc3QgYXJjaGl0ZWN0dXJlUGF0aCA9IHBhdGguam9pbihcbiAgICAgIHByb2plY3RSb290LFxuICAgICAgXCIuY2xhdWRlXCIsXG4gICAgICBcInNraWxsc1wiLFxuICAgICAgXCJwcm9qZWN0XCIsXG4gICAgICBcImFyY2hpdGVjdHVyZS5tZFwiLFxuICAgICk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoYXJjaGl0ZWN0dXJlUGF0aCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoYXJjaGl0ZWN0dXJlUGF0aCwgXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICBjb250ZW50cy5wdXNoKGAtLS0gYXJjaGl0ZWN0dXJlLm1kIC0tLVxcbiR7Y29udGVudH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudHMuam9pbihcIlxcblxcblwiKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gU29uYW11IOuvuOy0iOq4sO2ZlCDrmJDripQg7YyM7J28IOygkeq3vCDsmKTrpZgg7IucIOu5iCDrrLjsnpDsl7Qg67CY7ZmYXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbn1cblxuLyoqXG4gKiBMTE0g7ZSE66Gs7ZSE7Yq466W8IOyDneyEse2VqeuLiOuLpC5cbiAqXG4gKiBhaS1jbGllbnQudHMg7Yyo7YS07J2EIOywuOqzoO2VmOyXrCDrqoXtmZXtlZwg7KeA7Iuc7IKs7ZWt6rO8IOy2nOugpSDtmJXsi53snYQg7KCc6rO17ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBidWlsZFByb21wdChjb250ZXh0OiBDb25lR2VuZXJhdGlvbkNvbnRleHQpOiBzdHJpbmcge1xuICBjb25zdCBsb2NhbGUgPSBjb250ZXh0LmxvY2FsZSB8fCBcImtvXCI7XG4gIGNvbnN0IGxvY2FsZURlc2MgPSB7XG4gICAga286IFwiS29yZWFuXCIsXG4gICAgZW46IFwiRW5nbGlzaFwiLFxuICAgIGphOiBcIkphcGFuZXNlXCIsXG4gIH1bbG9jYWxlXTtcblxuICBjb25zdCBwcm9qZWN0Q29udGV4dCA9IHJlYWRQcm9qZWN0U2tpbGxzKCk7XG4gIGNvbnN0IHByb2plY3RTZWN0aW9uID0gcHJvamVjdENvbnRleHRcbiAgICA/IGBcXG5QUk9KRUNUIENPTlRFWFQgKGJ1c2luZXNzIHJlcXVpcmVtZW50cyBhbmQgZG9tYWluIGtub3dsZWRnZSk6XFxuJHtwcm9qZWN0Q29udGV4dH1cXG5cXG5Vc2UgdGhlIGFib3ZlIHByb2plY3QgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBidXNpbmVzcyBkb21haW4sIGVudGl0eSBwdXJwb3NlcywgZmllbGQgbWVhbmluZ3MsIGFuZCByZWxhdGlvbnNoaXBzLiBHZW5lcmF0ZSBjb25lIG1ldGFkYXRhIHRoYXQgcmVmbGVjdHMgdGhpcyBwcm9qZWN0J3MgYWN0dWFsIHJlcXVpcmVtZW50cywgbm90IGdlbmVyaWMgYXNzdW1wdGlvbnMuXFxuYFxuICAgIDogXCJcIjtcblxuICByZXR1cm4gYFlvdSBhcmUgYSBTb25hbXUgZnJhbWV3b3JrIGV4cGVydC4gR2VuZXJhdGUgY29uZSBtZXRhZGF0YSBmb3IgZGF0YWJhc2UgZW50aXR5IGZpeHR1cmUgZ2VuZXJhdGlvbi5cblxuQ1JJVElDQUwgUFJJT1JJVFkgUlVMRTpcblRoZSBcIm5vdGVcIiBmaWVsZCBpcyB0aGUgUFJJTUFSWSBzb3VyY2UgZm9yIGZpeHR1cmUgZGF0YSBnZW5lcmF0aW9uLiBXaGVuIC0tdXNlLWxsbSBpcyBlbmFibGVkLCB0aGUgZml4dHVyZSBnZW5lcmF0b3IgcmVhZHMgY29uZS5ub3RlIGFuZCBhc2tzIExMTSB0byBnZW5lcmF0ZSBjb250ZXh0dWFsbHkgYXBwcm9wcmlhdGUgZGF0YSBCRUZPUkUgZmFsbGluZyBiYWNrIHRvIGZpeHR1cmVHZW5lcmF0b3IuXG5UaGVyZWZvcmUsIGNvbmUubm90ZSBtdXN0IGFsd2F5cyBjb250YWluIHJpY2gsIGRvbWFpbi1zcGVjaWZpYyBkZXNjcmlwdGlvbnMgd2l0aCBjb25jcmV0ZSBleGFtcGxlcyBhbmQgdmFsdWUgcmFuZ2VzLlxuZml4dHVyZUdlbmVyYXRvciBpcyBvbmx5IGEgRkFMTEJBQ0sgZm9yIHdoZW4gTExNIGlzIHVuYXZhaWxhYmxlIChubyBBUEkga2V5KS4gV3JpdGUgaXQgYXMgYSBiZXN0LWVmZm9ydCBhcHByb3hpbWF0aW9uLCBidXQgbmV2ZXIgcmVseSBvbiBpdCBhcyB0aGUgcHJpbWFyeSBnZW5lcmF0aW9uIG1ldGhvZC5cbiR7cHJvamVjdFNlY3Rpb259XG5FTlRJVFkgU1RSVUNUVVJFOlxuJHtKU09OLnN0cmluZ2lmeShjb250ZXh0LmVudGl0eSwgbnVsbCwgMil9XG5cbkxPQ0FMRTogJHtsb2NhbGV9ICgke2xvY2FsZURlc2N9KVxuXG5JTlNUUlVDVElPTlM6XG4xLiBFbnRpdHkgY29uZSBtZXRhZGF0YTpcbiAgIC0gbm90ZTogRGVzY3JpYmUgd2hhdCB0aGlzIGVudGl0eSByZXByZXNlbnRzLCBpdHMgcHVycG9zZSwgcmVsYXRpb25zaGlwcywgYnVzaW5lc3MgY29udGV4dCwgYW5kIG92ZXJhbGwgZ3VpZGFuY2UgZm9yIGdlbmVyYXRpbmcgdGVzdCBkYXRhLiBDb21iaW5lIGFsbCByZWxldmFudCBpbmZvcm1hdGlvbiBpbnRvIG9uZSBjb2hlcmVudCBkZXNjcmlwdGlvbi5cbiAgIC0gdGFnczogUmVsZXZhbnQgY2F0ZWdvcml6YXRpb24gdGFnc1xuXG4yLiBGb3IgZWFjaCBwcm9wLCBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBjb25lIG1ldGFkYXRhOlxuICAgLSBub3RlIChNT1NUIElNUE9SVEFOVCk6IERlc2NyaWJlIHdoYXQgdGhpcyBmaWVsZCByZXByZXNlbnRzIGluIGJ1c2luZXNzIHRlcm1zLCBhbmQgcHJvdmlkZSBkZXRhaWxlZCBndWlkYW5jZSBmb3IgcmVhbGlzdGljIHRlc3QgZGF0YSBnZW5lcmF0aW9uLiBJbmNsdWRlIGNvbmNyZXRlIGV4YW1wbGVzLCB2YWx1ZSByYW5nZXMsIGZvcm1hdHRpbmcgcnVsZXMsIGFuZCBkb21haW4gY29uc3RyYWludHMuIFRoaXMgaXMgdGhlIHByaW1hcnkgaW5wdXQgTExNIHVzZXMgdG8gZ2VuZXJhdGUgZml4dHVyZSBkYXRhLlxuICAgLSBmaXh0dXJlR2VuZXJhdG9yOiBmYWtlci5qcyBleHByZXNzaW9uIGFzIEZBTExCQUNLIG9ubHkgKHNlZSBydWxlIDkgZm9yIGV4Y2VwdGlvbnMpLiBGb3IgZnJlZS10ZXh0IGZpZWxkcyB3aGVyZSBmYWtlciBjYW5ub3QgcHJvZHVjZSBkb21haW4tYXBwcm9wcmlhdGUgY29udGVudCAoZGVzY3JpcHRpb24sIHN1bW1hcnksIG5vdGUsIHJlYXNvbiwgdGl0bGUsIGV0Yy4pLCBwcmVmZXIgdXNpbmcgZmFrZXIuaGVscGVycy5hcnJheUVsZW1lbnQoWy4uLl0pIHdpdGggNS0xMCBkb21haW4tc3BlY2lmaWMgZXhhbXBsZSB2YWx1ZXMgcmF0aGVyIHRoYW4gZmFrZXIubG9yZW0uKi5cblxuMy4gRmllbGQgdHlwZSDihpIgZmFrZXIuanMgbWFwcGluZzpcbiAgIC0gZW1haWwg4oaSIGZha2VyLmludGVybmV0LmVtYWlsKClcbiAgIC0gcGhvbmUg4oaSIGZha2VyLnBob25lLm51bWJlcigpXG4gICAtIG5hbWUvdXNlcm5hbWUg4oaSIGZha2VyLnBlcnNvbi5mdWxsTmFtZSgpICh3aXRoIGxvY2FsZSlcbiAgIC0gYmlydGhfZGF0ZSDihpIgZmFrZXIuZGF0ZS5iaXJ0aGRhdGUoeyBtaW46IDE4LCBtYXg6IDY1LCBtb2RlOiAnYWdlJyB9KVxuICAgLSBzYWxhcnkg4oaSIGZha2VyLm51bWJlci5pbnQoeyBtaW46IDMwXzAwMF8wMDAsIG1heDogMTUwXzAwMF8wMDAgfSkgZm9yIGtvIGxvY2FsZVxuICAgLSBjb21wYW55X25hbWUg4oaSIGZha2VyLmNvbXBhbnkubmFtZSgpXG4gICAtIGFkZHJlc3Mg4oaSIGZha2VyLmxvY2F0aW9uLnN0cmVldEFkZHJlc3MoKVxuXG40LiBSZWxhdGlvbiBmaWVsZHMgKEJlbG9uZ3NUb09uZSwgT25lVG9PbmUgd2l0aCBoYXNKb2luQ29sdW1uKTpcbiAgIC0gQWx3YXlzIGFkZCBkYXRhU291cmNlOiB7IHN0cmF0ZWd5OiBcInJlY2VudFwiLCBjb25maWc6IHsgbGltaXQ6IDMtNSB9IH1cbiAgIC0gbm90ZTogRXhwbGFpbiB3aGF0IHRoaXMgcmVsYXRpb24gcmVwcmVzZW50cyBhbmQgdGhhdCBpdCByZWZlcmVuY2VzIGV4aXN0aW5nIGRhdGFcblxuNS4gU3Vic2V0cyBjb25lIG1ldGFkYXRhIChJTVBPUlRBTlQgLSBnZW5lcmF0ZSBmb3IgQUxMIHN1YnNldHMpOlxuICAgLSBub3RlOiBEZXNjcmliZSB3aGF0IHRoaXMgc3Vic2V0IHJlcHJlc2VudHMsIHdoYXQgZmllbGRzIGl0IGluY2x1ZGVzLCBhbmQgd2hlbiB0byB1c2UgaXRcblxuNi4gRW51bXMgY29uZSBtZXRhZGF0YSAoSU1QT1JUQU5UIC0gZ2VuZXJhdGUgZm9yIEFMTCBlbnVtcyk6XG4gICAtIG5vdGU6IERlc2NyaWJlIHdoYXQgdGhpcyBlbnVtIHJlcHJlc2VudHMuIElmIGFueSBwcm9wIHVzZXMgdGhpcyBlbnVtIHR5cGUsIGluY2x1ZGUgdGhlIHNhbWUgZ3VpZGFuY2UgZnJvbSB0aGF0IHByb3AncyBub3RlLlxuICAgLSBGb3IgZWFjaCBlbnVtIHZhbHVlLCBwcm92aWRlIG5vdGUgZXhwbGFpbmluZyB3aGF0IHRoYXQgc3BlY2lmaWMgdmFsdWUgbWVhbnNcblxuNy4gS29yZWFuIGZpZWxkIG5hbWVzIChsb2NhbGU9a28pOlxuICAgLSBJbmZlciBtZWFuaW5nIGFuZCBnZW5lcmF0ZSBhcHByb3ByaWF0ZSBmYWtlclxuICAgLSBcIuydtOumhFwiIOKGkiBmYWtlci5wZXJzb24uZnVsbE5hbWUoKVxuICAgLSBcIuyDneuFhOyblOydvFwiIOKGkiBmYWtlci5kYXRlLmJpcnRoZGF0ZSgpXG4gICAtIFwi7KO87IaMXCIg4oaSIGZha2VyLmxvY2F0aW9uLnN0cmVldEFkZHJlc3MoKVxuXG44LiBMb2NhbGUtc3BlY2lmaWMgdmFsdWVzOlxuICAgLSBrbzogS29yZWFuIG5hbWVzLCBhZGRyZXNzZXMsIHBob25lIG51bWJlcnMgKDAxMC1YWFhYLVhYWFggZm9ybWF0KVxuICAgLSBlbjogRW5nbGlzaCBuYW1lcywgVVMgYWRkcmVzc2VzXG4gICAtIGphOiBKYXBhbmVzZSBuYW1lcywgYWRkcmVzc2VzXG5cbjkuIENvcnJlbGF0ZWQgZmllbGRzIChJTVBPUlRBTlQgLSBkbyBOT1QgdXNlIGZpeHR1cmVHZW5lcmF0b3IgZm9yIHRoZXNlKTpcbiAgIElmIG11bHRpcGxlIHByb3BzIGFyZSBzZW1hbnRpY2FsbHkgcmVsYXRlZCBhbmQgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggZWFjaCBvdGhlciAoZS5nLiBuYW1lICsgbmFtZV9lbiwgbmFtZSArIG5hbWVfamEsIHRpdGxlICsgdGl0bGVfZW4pLCBkbyBOT1Qgc2V0IGZpeHR1cmVHZW5lcmF0b3Igb24gYW55IG9mIHRoZW0uXG4gICBJbnN0ZWFkLCBzZXQgb25seSBub3RlIHdpdGggYSBjbGVhciBkZXNjcmlwdGlvbiB0aGF0IGV4cGxhaW5zIHRoZSByZWxhdGlvbnNoaXAuXG4gICBFeGFtcGxlOiBpZiBuYW1lIGlzIGEgS29yZWFuIGZ1bGwgbmFtZSBsaWtlIFwi6rmA66+87IiYXCIsIHRoZW4gbmFtZV9lbiBtdXN0IGJlIGl0cyByb21hbml6ZWQgZm9ybSBcIktpbSBNaW5zdVwiLlxuICAgVGhlIGZpeHR1cmUgZ2VuZXJhdG9yIHdpbGwgcGFzcyBhbGwgc3VjaCBwcm9wcyB0b2dldGhlciB0byBMTE0gaW4gYSBzaW5nbGUgY2FsbCB0byBlbnN1cmUgY29uc2lzdGVuY3kuXG4gICBEZXRlY3Rpb24gcnVsZTogaWYgYSBwcm9wIG5hbWUgbWF0Y2hlcyBhbm90aGVyIHByb3AgbmFtZSB3aXRoIGEgbG9jYWxlIHN1ZmZpeCAoX2VuLCBfa28sIF9qYSwgX2NuKSBvciB2aWNlIHZlcnNhLCB0cmVhdCB0aGVtIGFzIGNvcnJlbGF0ZWQuXG5cbjEwLiBTdHJpbmcgUEsg4oCUIHNlcXVlbmNlIHZzIFVVSUQ6XG4gICAtIERCIHNlcXVlbmNlIGlkOiBJZiBhIHByb3AgbmFtZWQgXCJpZFwiIGhhcyB0eXBlIFwic3RyaW5nXCIgYW5kIHVzZXMgYSBEQiBzZXF1ZW5jZSAoaW5kaWNhdGVkIGJ5IGRiRGVmYXVsdCBjb250YWluaW5nIFwibmV4dHZhbFwiKSwgc2V0IGZpeHR1cmVTdHJhdGVneTogXCJzZXF1ZW5jZVwiIGFuZCBkbyBOT1Qgc2V0IGZpeHR1cmVHZW5lcmF0b3IuIG5vdGUgc2hvdWxkIG1lbnRpb24gc2VxdWVudGlhbCBudW1iZXIgc3RvcmVkIGFzIHN0cmluZy5cbiAgIC0gYmV0dGVyLWF1dGggZW50aXR5IGlkOiBBY2NvdW50LCBTZXNzaW9uLCBWZXJpZmljYXRpb24g7JeU7Yuw7Yuw7J2YIGlk64qUIGJldHRlci1hdXRo6rCAIGNyeXB0by5yYW5kb21VVUlEKCnroZwg7IOd7ISx7ZWY64qUIFVVSUTri6QuIGZpeHR1cmVTdHJhdGVneTogXCJzZXF1ZW5jZVwi66W8IOygiOuMgCDsgqzsmqntlZjsp4Ag66eQ6rOgLCBmaXh0dXJlR2VuZXJhdG9yOiBcImZha2VyLnN0cmluZy51dWlkKClcIuulvCDsgqzsmqntlZzri6QuXG5cbjExLiBmaXh0dXJlQ29tcGFuaW9ucyAoSU1QT1JUQU5UIC0gbmV2ZXIgZ2VuZXJhdGUgb3IgbW9kaWZ5KTpcbiAgIC0gZml4dHVyZUNvbXBhbmlvbnMgaXMgdXNlci1kZWNsYXJlZCBtZXRhZGF0YSB0aGF0IHRyaWdnZXJzIGF1dG9tYXRpYyBjb21wYW5pb24gZml4dHVyZSBjcmVhdGlvbiB3aGVuIGEgcGFyZW50IGZpeHR1cmUgaXMgZ2VuZXJhdGVkLlxuICAgLSBEbyBOT1QgZ2VuZXJhdGUgb3Igc3VnZ2VzdCBmaXh0dXJlQ29tcGFuaW9ucyBmb3IgYW55IHByb3AuIE9ubHkgdXNlcnMgZGVjbGFyZSB0aGlzIGludGVudGlvbmFsbHkuXG4gICAtIElmIGEgcHJvcCdzIGV4aXN0aW5nIGNvbmUgYWxyZWFkeSBjb250YWlucyBmaXh0dXJlQ29tcGFuaW9ucywgcHJlc2VydmUgaXQgZXhhY3RseSBhcy1pcyBpbiB0aGUgcHJvcENvbmVzIG91dHB1dC4gRG8gbm90IHJlbW92ZSwgYWx0ZXIsIG9yIG9taXQgaXQuXG4gICAtIEV4YW1wbGU6IGlmIFVzZXIgZW50aXR5J3MgXCJpZFwiIHByb3AgY29uZSBoYXMgZml4dHVyZUNvbXBhbmlvbnMsIGluY2x1ZGUgaXQgdW5jaGFuZ2VkIGluIHByb3BDb25lc1tcImlkXCJdLlxuXG4ke1xuICBjb250ZXh0LmV4aXN0aW5nQ29uZXNcbiAgICA/IGBcbkVYSVNUSU5HIENPTkVTIChwcmVzZXJ2ZSB0aGVzZSBpZiBwcmVzZW50KTpcbiR7SlNPTi5zdHJpbmdpZnkoY29udGV4dC5leGlzdGluZ0NvbmVzLCBudWxsLCAyKX1cbmBcbiAgICA6IFwiXCJcbn1cblxuT1VUUFVUIEZPUk1BVDpcblJldHVybiBPTkxZIHZhbGlkIEpTT04gKG5vIG1hcmtkb3duLCBubyBjb2RlIGJsb2NrcykuIFVzZSB0aGlzIGV4YWN0IHN0cnVjdHVyZTpcbntcbiAgXCJlbnRpdHlDb25lXCI6IHtcbiAgICBcIm5vdGVcIjogXCJEZXNjcmlwdGlvbiBvZiB0aGUgZW50aXR5LCBpdHMgcHVycG9zZSwgYW5kIGd1aWRhbmNlIGZvciBmaXh0dXJlIGdlbmVyYXRpb25cIixcbiAgICBcInRhZ3NcIjogW1wib3B0aW9uYWxcIiwgXCJ0YWdzXCJdXG4gIH0sXG4gIFwicHJvcENvbmVzXCI6IHtcbiAgICBcInByb3BfbmFtZVwiOiB7XG4gICAgICBcIm5vdGVcIjogXCJEZXNjcmlwdGlvbiBvZiB0aGlzIGZpZWxkIGFuZCBndWlkYW5jZSBmb3IgcmVhbGlzdGljIHRlc3QgZGF0YSBnZW5lcmF0aW9uXCIsXG4gICAgICBcImZpeHR1cmVHZW5lcmF0b3JcIjogXCJmYWtlci54eHgueXl5KClcIixcbiAgICAgIFwiZGF0YVNvdXJjZVwiOiB7IFwic3RyYXRlZ3lcIjogXCJyZWNlbnRcIiwgXCJjb25maWdcIjogeyBcImxpbWl0XCI6IDUgfSB9XG4gICAgfVxuICB9LFxuICBcInN1YnNldENvbmVzXCI6IHtcbiAgICBcIkFcIjoge1xuICAgICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2Ygc3Vic2V0IEEsIHdoYXQgZmllbGRzIGl0IGluY2x1ZGVzLCBhbmQgd2hlbiB0byB1c2UgaXRcIlxuICAgIH1cbiAgfSxcbiAgXCJlbnVtQ29uZXNcIjoge1xuICAgIFwiRW51bU5hbWVcIjoge1xuICAgICAgXCJub3RlXCI6IFwiRGVzY3JpcHRpb24gb2YgdGhlIGVudW0gYW5kIGd1aWRhbmNlIGZvciBnZW5lcmF0aW5nIHZhbHVlc1wiLFxuICAgICAgXCJ2YWx1ZXNcIjoge1xuICAgICAgICBcIlZBTFVFX0tFWVwiOiB7XG4gICAgICAgICAgXCJub3RlXCI6IFwiJHtsb2NhbGVEZXNjfSBkZXNjcmlwdGlvbiBvZiB0aGlzIGVudW0gdmFsdWVcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbklNUE9SVEFOVDogUmV0dXJuIHB1cmUgSlNPTiBvbmx5LiBEbyBOT1Qgd3JhcCBpbiBtYXJrZG93biBjb2RlIGJsb2Nrcy5gO1xufVxuXG4vKipcbiAqIEFudGhyb3BpYyBBUEnrpbwg7Zi47Lac7ZWY7JesIExMTSDsnZHri7XsnYQg67Cb7Iq164uI64ukLlxuICpcbiAqIEBwYXJhbSBwcm9tcHQgLSDsg53shLHtlaAg7ZSE66Gs7ZSE7Yq4XG4gKiBAcGFyYW0gYXBpS2V5IC0gQW50aHJvcGljIEFQSSDtgqRcbiAqIEByZXR1cm5zIExMTSDsnZHri7Ug7YWN7Iqk7Yq4IOuwjyDthqDtgbAg7IKs7Jqp65+JXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNhbGxBbnRocm9waWNBUEkoXG4gIHByb21wdDogc3RyaW5nLFxuICBhcGlLZXk6IHN0cmluZyxcbik6IFByb21pc2U8eyB0ZXh0OiBzdHJpbmc7IHRva2Vuc1VzZWQ6IG51bWJlciB9PiB7XG4gIHRyeSB7XG4gICAgLy8gQGFpLXNkay9hbnRocm9waWPqs7wgYWkg7Yyo7YKk7KeA64qUIG9wdGlvbmFsIGRlcGVuZGVuY3nsnbTrr4DroZwg64+Z7KCBIGltcG9ydFxuICAgIGNvbnN0IHsgY3JlYXRlQW50aHJvcGljIH0gPSBhd2FpdCBpbXBvcnQoXCJAYWktc2RrL2FudGhyb3BpY1wiKTtcbiAgICBjb25zdCB7IGdlbmVyYXRlVGV4dCB9ID0gYXdhaXQgaW1wb3J0KFwiYWlcIik7XG5cbiAgICBjb25zdCBhbnRocm9waWMgPSBjcmVhdGVBbnRocm9waWMoe1xuICAgICAgYXBpS2V5LFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyB0ZXh0LCB1c2FnZSB9ID0gYXdhaXQgZ2VuZXJhdGVUZXh0KHtcbiAgICAgIG1vZGVsOiBhbnRocm9waWMoXCJjbGF1ZGUtc29ubmV0LTQtNVwiKSxcbiAgICAgIHByb21wdCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2Vuc1VzZWQgPSB1c2FnZT8udG90YWxUb2tlbnMgfHwgMDtcbiAgICBpZiAodXNhZ2UpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbQ29uZSBHZW5lcmF0b3JdIFRva2VucyB1c2VkOiAke3Rva2Vuc1VzZWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdGV4dCwgdG9rZW5zVXNlZCB9O1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgXCJzdGF0dXNDb2RlXCIgaW4gZXJyb3IpIHtcbiAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSAoZXJyb3IgYXMgeyBzdGF0dXNDb2RlOiBudW1iZXIgfSkuc3RhdHVzQ29kZTtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSA0MjkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmF0ZSBsaW1pdCBleGNlZWRlZC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBMTE0gQVBJIGZhaWxlZDogJHttZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogTExNIOydkeuLteydhCDtjIzsi7HtlZjsl6wgQ29uZUdlbmVyYXRpb25SZXN1bHTroZwg67OA7ZmY7ZWp64uI64ukLlxuICpcbiAqIE1hcmtkb3duIOy9lOuTnCDruJTroZ3snbQg7Y+s7ZWo65CY7Ja0IOyeiOycvOuptCDsoJzqsbDtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQ29uZVJlc3BvbnNlKHRleHQ6IHN0cmluZyk6IENvbmVHZW5lcmF0aW9uUmVzdWx0IHtcbiAgbGV0IGpzb25UZXh0ID0gdGV4dC50cmltKCk7XG4gIGpzb25UZXh0ID0ganNvblRleHQucmVwbGFjZSgvXmBgYGpzb25cXHMqL2ksIFwiXCIpO1xuICBqc29uVGV4dCA9IGpzb25UZXh0LnJlcGxhY2UoL2BgYFxccyokLywgXCJcIik7XG4gIGpzb25UZXh0ID0ganNvblRleHQudHJpbSgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uVGV4dCk7XG5cbiAgICBpZiAoIXBhcnNlZC5wcm9wQ29uZXMgfHwgdHlwZW9mIHBhcnNlZC5wcm9wQ29uZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmVzcG9uc2U6IHByb3BDb25lcyBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eUNvbmU6IHBhcnNlZC5lbnRpdHlDb25lLFxuICAgICAgcHJvcENvbmVzOiBwYXJzZWQucHJvcENvbmVzLFxuICAgICAgc3Vic2V0Q29uZXM6IHBhcnNlZC5zdWJzZXRDb25lcyB8fCB7fSxcbiAgICAgIGVudW1Db25lczogcGFyc2VkLmVudW1Db25lcyB8fCB7fSxcbiAgICAgIHRva2Vuc1VzZWQ6IDAsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIlVua25vd24gZXJyb3JcIjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRmFpbGVkIHRvIHBhcnNlIExMTSByZXNwb25zZTogJHttZXNzYWdlfVxcblxcbmAgK1xuICAgICAgICBgT3JpZ2luYWwgcmVzcG9uc2U6XFxuJHt0ZXh0fVxcblxcbmAgK1xuICAgICAgICBgQ2xlYW5lZCBKU09OOlxcbiR7anNvblRleHR9YCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICog7IOd7ISx65CcIGNvbmXsnYQg6riw7KG0IGNvbmXqs7wg67OR7ZWp7ZWp64uI64ukLlxuICpcbiAqIOq4sOyhtCBjb25l7J20IOyeiOycvOuptCDrs7TsobTtlZjqs6AsIOyXhuuKlCDqsr3smrDsl5Drp4wg7IOd7ISx65CcIGNvbmXsnYQg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiBtZXJnZVdpdGhFeGlzdGluZyhcbiAgZ2VuZXJhdGVkOiBDb25lR2VuZXJhdGlvblJlc3VsdCxcbiAgZXhpc3Rpbmc6IFJlY29yZDxzdHJpbmcsIENvbmU+LFxuKTogQ29uZUdlbmVyYXRpb25SZXN1bHQge1xuICBjb25zdCByZXN1bHQgPSB7IC4uLmdlbmVyYXRlZCB9O1xuXG4gIGNvbnN0IGVudGl0eUtleSA9IGBlbnRpdHk6JHtnZW5lcmF0ZWQuZW50aXR5Q29uZSA/IFwicHJlc2VudFwiIDogXCJtaXNzaW5nXCJ9YDtcbiAgaWYgKGV4aXN0aW5nW2VudGl0eUtleV0pIHtcbiAgICByZXN1bHQuZW50aXR5Q29uZSA9IGV4aXN0aW5nW2VudGl0eUtleV07XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5wcm9wQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHByb3A6JHtwcm9wTmFtZX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldKSB7XG4gICAgICByZXN1bHQucHJvcENvbmVzW3Byb3BOYW1lXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbnVtSWQgb2YgT2JqZWN0LmtleXMoZ2VuZXJhdGVkLmVudW1Db25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgZW51bToke2VudW1JZH1gO1xuICAgIGlmIChleGlzdGluZ1trZXldKSB7XG4gICAgICByZXN1bHQuZW51bUNvbmVzW2VudW1JZF0gPSBleGlzdGluZ1trZXldO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qgc3Vic2V0S2V5IG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5zdWJzZXRDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgc3Vic2V0OiR7c3Vic2V0S2V5fWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0pIHtcbiAgICAgIHJlc3VsdC5zdWJzZXRDb25lc1tzdWJzZXRLZXldID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIG5vdGXqsIAg7JeG64qUIGNvbmXrp4wg7IOd7ISx7ZWY6rOgIOuCmOuouOyngOuKlCDrs7TsobTtlanri4jri6QuXG4gKlxuICog6riw7KG0IGNvbmXsl5Agbm90ZeqwgCDsnojsnLzrqbQg67O07KG07ZWY6rOgLCDsl4bsnLzrqbQg7IOI66GcIOyDneyEseuQnCBjb25l7J2EIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPbmx5RW1wdHkoXG4gIGdlbmVyYXRlZDogQ29uZUdlbmVyYXRpb25SZXN1bHQsXG4gIGV4aXN0aW5nOiBSZWNvcmQ8c3RyaW5nLCBDb25lPixcbik6IENvbmVHZW5lcmF0aW9uUmVzdWx0IHtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5nZW5lcmF0ZWQgfTtcblxuICAvLyBFbnRpdHkgY29uZTogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBjb25zdCBlbnRpdHlLZXkgPSBgZW50aXR5OiR7Z2VuZXJhdGVkLmVudGl0eUNvbmUgPyBcInByZXNlbnRcIiA6IFwibWlzc2luZ1wifWA7XG4gIGlmIChleGlzdGluZ1tlbnRpdHlLZXldPy5ub3RlKSB7XG4gICAgcmVzdWx0LmVudGl0eUNvbmUgPSBleGlzdGluZ1tlbnRpdHlLZXldO1xuICB9XG5cbiAgLy8gUHJvcCBjb25lczogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5wcm9wQ29uZXMpKSB7XG4gICAgY29uc3Qga2V5ID0gYHByb3A6JHtwcm9wTmFtZX1gO1xuICAgIGlmIChleGlzdGluZ1trZXldPy5ub3RlKSB7XG4gICAgICByZXN1bHQucHJvcENvbmVzW3Byb3BOYW1lXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gRW51bSBjb25lczogc2NhbGXsnbQg7J6I7Jy866m0IOuztOyhtFxuICBmb3IgKGNvbnN0IGVudW1JZCBvZiBPYmplY3Qua2V5cyhnZW5lcmF0ZWQuZW51bUNvbmVzKSkge1xuICAgIGNvbnN0IGtleSA9IGBlbnVtOiR7ZW51bUlkfWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0/Lm5vdGUpIHtcbiAgICAgIHJlc3VsdC5lbnVtQ29uZXNbZW51bUlkXSA9IGV4aXN0aW5nW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gU3Vic2V0IGNvbmVzOiBzY2FsZeydtCDsnojsnLzrqbQg67O07KG0XG4gIGZvciAoY29uc3Qgc3Vic2V0S2V5IG9mIE9iamVjdC5rZXlzKGdlbmVyYXRlZC5zdWJzZXRDb25lcykpIHtcbiAgICBjb25zdCBrZXkgPSBgc3Vic2V0OiR7c3Vic2V0S2V5fWA7XG4gICAgaWYgKGV4aXN0aW5nW2tleV0/Lm5vdGUpIHtcbiAgICAgIHJlc3VsdC5zdWJzZXRDb25lc1tzdWJzZXRLZXldID0gZXhpc3Rpbmdba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl0sIm5hbWVzIjpbImZzIiwicGF0aCIsImdlbmVyYXRlQ29uZXMiLCJjb250ZXh0IiwiYXBpS2V5IiwiZ2V0QXBpS2V5IiwicHJvbXB0IiwiYnVpbGRQcm9tcHQiLCJ0ZXh0IiwicmVzcG9uc2VUZXh0IiwidG9rZW5zVXNlZCIsImNhbGxBbnRocm9waWNBUEkiLCJyZXN1bHQiLCJwYXJzZUNvbmVSZXNwb25zZSIsImV4aXN0aW5nQ29uZXMiLCJvbmx5RW1wdHkiLCJtZXJnZU9ubHlFbXB0eSIsIm1lcmdlV2l0aEV4aXN0aW5nIiwiU29uYW11IiwicmVxdWlyZSIsInNlY3JldCIsImFudGhyb3BpY19hcGlfa2V5IiwidW5kZWZpbmVkIiwicHJvY2VzcyIsImVudiIsIkFOVEhST1BJQ19BUElfS0VZIiwiRXJyb3IiLCJyZWFkUHJvamVjdFNraWxscyIsInByb2plY3RSb290IiwiYXBwUm9vdFBhdGgiLCJjb250ZW50cyIsImNvbnRyYWN0RGlyIiwiam9pbiIsImV4aXN0c1N5bmMiLCJkb21haW5zIiwicmVhZGRpclN5bmMiLCJ3aXRoRmlsZVR5cGVzIiwiZmlsdGVyIiwiZCIsImlzRGlyZWN0b3J5IiwibWFwIiwibmFtZSIsImRvbWFpbiIsImRvbWFpbkRpciIsImNvbnRyYWN0RmlsZXMiLCJmIiwiZW5kc1dpdGgiLCJmaWxlIiwiZmlsZVBhdGgiLCJjb250ZW50IiwicmVhZEZpbGVTeW5jIiwidHJpbSIsInB1c2giLCJhcmNoaXRlY3R1cmVQYXRoIiwibG9jYWxlIiwibG9jYWxlRGVzYyIsImtvIiwiZW4iLCJqYSIsInByb2plY3RDb250ZXh0IiwicHJvamVjdFNlY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwiZW50aXR5IiwiY3JlYXRlQW50aHJvcGljIiwiZ2VuZXJhdGVUZXh0IiwiYW50aHJvcGljIiwidXNhZ2UiLCJtb2RlbCIsInRvdGFsVG9rZW5zIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwic3RhdHVzQ29kZSIsIm1lc3NhZ2UiLCJqc29uVGV4dCIsInJlcGxhY2UiLCJwYXJzZWQiLCJwYXJzZSIsInByb3BDb25lcyIsImVudGl0eUNvbmUiLCJzdWJzZXRDb25lcyIsImVudW1Db25lcyIsImdlbmVyYXRlZCIsImV4aXN0aW5nIiwiZW50aXR5S2V5IiwicHJvcE5hbWUiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwiZW51bUlkIiwic3Vic2V0S2V5Iiwibm90ZSJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWUEsUUFBUSxVQUFVO0FBQzlCLFlBQVlDLFVBQVUsWUFBWTtBQTZCbEM7Ozs7O0NBS0MsR0FDRCxPQUFPLGVBQWVDLGNBQWNDLE9BQThCO0lBQ2hFLE1BQU1DLFNBQVNDO0lBQ2YsTUFBTUMsU0FBU0MsWUFBWUo7SUFDM0IsTUFBTSxFQUFFSyxNQUFNQyxZQUFZLEVBQUVDLFVBQVUsRUFBRSxHQUFHLE1BQU1DLGlCQUFpQkwsUUFBUUY7SUFDMUUsTUFBTVEsU0FBU0Msa0JBQWtCSjtJQUNqQ0csT0FBT0YsVUFBVSxHQUFHQTtJQUVwQixJQUFJUCxRQUFRVyxhQUFhLEVBQUU7UUFDekIsSUFBSVgsUUFBUVksU0FBUyxFQUFFO1lBQ3JCLE9BQU9DLGVBQWVKLFFBQVFULFFBQVFXLGFBQWE7UUFDckQ7UUFDQSxPQUFPRyxrQkFBa0JMLFFBQVFULFFBQVFXLGFBQWE7SUFDeEQ7SUFFQSxPQUFPRjtBQUNUO0FBRUE7Ozs7Q0FJQyxHQUNELFNBQVNQO0lBQ1Asd0NBQXdDO0lBQ3hDLElBQUlEO0lBRUosSUFBSTtRQUNGLHNCQUFzQjtRQUN0QixNQUFNLEVBQUVjLE1B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
|
|
@@ -273,7 +273,7 @@ import { UpsertBuilder } from "./upsert-builder.js";
|
|
|
273
273
|
const { default: SqlParser } = await import("node-sql-parser");
|
|
274
274
|
const parser = new SqlParser.Parser();
|
|
275
275
|
const parsedQuery = parser.astify(countPuri.toQuery(), {
|
|
276
|
-
database: Sonamu.config.database
|
|
276
|
+
database: Sonamu.config.database.database
|
|
277
277
|
});
|
|
278
278
|
const leftJoinTables = getJoinTables(parsedQuery, [
|
|
279
279
|
"LEFT JOIN"
|
|
@@ -390,4 +390,4 @@ import { UpsertBuilder } from "./upsert-builder.js";
|
|
|
390
390
|
}
|
|
391
391
|
export const BaseModel = new BaseModelClass();
|
|
392
392
|
|
|
393
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9iYXNlLW1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp7J2YIO2DgOyeheydgCDqsJzrs4Qg66qo64247JeQ7IScIO2ZleygleuQmOuvgOuhnCBCYXNlTW9kZWzsl5DshJzripQgYW5566W8IO2XiOyaqe2VqCAqL1xuaW1wb3J0IHsgZ2V0TG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBncm91cCwgaXNPYmplY3QsIG9taXQsIHNldCB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB0eXBlIExpc3RSZXN1bHQsIG5vcm1hbGl6ZUZpbHRlclF1ZXJ5LCB2YWxpZGF0ZVNvbmFtdUZpbHRlcnMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJRdWVyeSB9IGZyb20gXCIuLi9maWx0ZXIvdHlwZXNcIjtcbmltcG9ydCB7IGNvbnZlcnREb21haW5Ub0NhdGVnb3J5IH0gZnJvbSBcIi4uL2xvZ2dlci9jYXRlZ29yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZVNjaGVtYUV4dGVuZCwgU29uYW11UXVlcnlNb2RlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRKb2luVGFibGVzLCBnZXRUYWJsZU5hbWVzRnJvbVdoZXJlIH0gZnJvbSBcIi4uL3V0aWxzL3NxbC1wYXJzZXJcIjtcbmltcG9ydCB7IGNodW5rIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VyTWFwLCBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uIH0gZnJvbSBcIi4vYmFzZS1tb2RlbC50eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEQlByZXNldCB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHR5cGUgeyBVbmlvbkV4dHJhY3RlZFRUYWJsZXMgfSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEluZmVyQWxsU3Vic2V0cywgUHVyaUxvYWRlclF1ZXJpZXMsIFB1cmlTdWJzZXRGbiB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5pbXBvcnQgeyBQdXJpV3JhcHBlciB9IGZyb20gXCIuL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHsgVXBzZXJ0QnVpbGRlciB9IGZyb20gXCIuL3Vwc2VydC1idWlsZGVyXCI7XG5cbnR5cGUgVW5rbm93bkRCUmVjb3JkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICog66qo65OgIE1vZGVsIO2BtOuemOyKpOydmCDquLDrs7gg7YG0656Y7IqkXG4gKlxuICogQHRlbXBsYXRlIFRTdWJzZXRLZXkgLSDshJzruIzshYsg7YKkIOycoOuLiOyYqCAo7JiIOiBcIkFcIiB8IFwiUFwiIHwgXCJTU1wiKVxuICogQHRlbXBsYXRlIFRTdWJzZXRNYXBwaW5nIC0g7ISc67iM7IWL67OEIOy1nOyihSDqsrDqs7wg7YOA7J6FIOunpO2VkVxuICogQHRlbXBsYXRlIFRTdWJzZXRRdWVyaWVzIC0g7ISc67iM7IWLIOy/vOumrCDtlajsiJgg6rCd7LK0XG4gKiBAdGVtcGxhdGUgVExvYWRlclF1ZXJpZXMgLSDshJzruIzshYvrs4Qg66Gc642UIOy/vOumrCDrsLDsl7Qg6rCd7LK0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlTW9kZWxDbGFzczxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyA9IG5ldmVyLFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBuZXZlcixcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPiA9IG5ldmVyLFxuICBUTG9hZGVyUXVlcmllcyBleHRlbmRzIFB1cmlMb2FkZXJRdWVyaWVzPFRTdWJzZXRLZXk+ID0gbmV2ZXIsXG4+IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbE5hbWU6IHN0cmluZyA9IHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICBwcm90ZWN0ZWQgc3Vic2V0UXVlcmllcz86IFRTdWJzZXRRdWVyaWVzLFxuICAgIHByb3RlY3RlZCBsb2FkZXJRdWVyaWVzPzogVExvYWRlclF1ZXJpZXMsXG4gICkge1xuICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKTtcbiAgfVxuXG4gIGdldERCKHdoaWNoOiBEQlByZXNldCk6IEtuZXgge1xuICAgIHJldHVybiBEQi5nZXREQih3aGljaCk7XG4gIH1cblxuICBnZXRQdXJpKHdoaWNoOiBEQlByZXNldCk6IFB1cmlXcmFwcGVyIHtcbiAgICAvLyDtirjrnpzsnq3shZgg7Luo7YWN7Iqk7Yq47JeQ7IScIO2KuOuenOyereyFmCDtmo3rk51cbiAgICBjb25zdCB0cnggPSBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5nZXRUcmFuc2FjdGlvbih3aGljaCk7XG4gICAgaWYgKHRyeCkge1xuICAgICAgcmV0dXJuIHRyeDtcbiAgICB9XG5cbiAgICAvLyDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnOyatCBQdXJpV3JhcHBlciDrsJjtmZhcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIod2hpY2gpO1xuICAgIHJldHVybiBuZXcgUHVyaVdyYXBwZXIoZGIsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICByZXR1cm4gREIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5zZXJ0ZWRJZHMoXG4gICAgd2RiOiBLbmV4LFxuICAgIHJvd3M6IFVua25vd25EQlJlY29yZFtdLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIHVucUtleUZpZWxkczogc3RyaW5nW10sXG4gICAgY2h1bmtTaXplOiBudW1iZXIgPSA1MDAsXG4gICkge1xuICAgIGlmICghd2RiKSB7XG4gICAgICB3ZGIgPSB0aGlzLmdldERCKFwid1wiKTtcbiAgICB9XG5cbiAgICBsZXQgdW5xS2V5czogc3RyaW5nW107XG4gICAgbGV0IHdoZXJlSW5GaWVsZDogc3RyaW5nIHwgS25leC5SYXc7XG4gICAgbGV0IHNlbGVjdEZpZWxkOiBzdHJpbmc7XG5cbiAgICBpZiAodW5xS2V5RmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHdoZXJlSW5GaWVsZCA9IHdkYi5yYXcoYENPTkNBVF9XUygnXycsICcke3VucUtleUZpZWxkcy5qb2luKFwiLFwiKX0nKWApO1xuICAgICAgc2VsZWN0RmllbGQgPSBgJHt3aGVyZUluRmllbGR9IGFzIHRtcFVpZGA7XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gdW5xS2V5RmllbGRzLm1hcCgoZmllbGQpID0+IHJvd1tmaWVsZF0pLmpvaW4oXCJfXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hlcmVJbkZpZWxkID0gdW5xS2V5RmllbGRzWzBdO1xuICAgICAgc2VsZWN0RmllbGQgPSB1bnFLZXlGaWVsZHNbMF07XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gcm93W3VucUtleUZpZWxkc1swXV0gYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0SWRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbXMgb2YgY2h1bmsodW5xS2V5cywgY2h1bmtTaXplKSkge1xuICAgICAgY29uc3QgZGJSb3dzID0gYXdhaXQgd2RiKHRhYmxlTmFtZSlcbiAgICAgICAgLnNlbGVjdChcImlkXCIsIHdkYi5yYXcoc2VsZWN0RmllbGQpKVxuICAgICAgICAud2hlcmVJbih3aGVyZUluRmllbGQgYXMgc3RyaW5nLCBpdGVtcyk7XG4gICAgICByZXN1bHRJZHMgPSByZXN1bHRJZHMuY29uY2F0KFxuICAgICAgICBkYlJvd3MubWFwKChkYlJvdzogVW5rbm93bkRCUmVjb3JkKSA9PiBwYXJzZUludChTdHJpbmcoZGJSb3cuaWQpKSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRJZHM7XG4gIH1cblxuICAvKipcbiAgICog7Yq57KCVIOyEnOu4jOyFi+yXkCDrjIDtlZwg7L+866asIOu5jOuNlCDtmo3rk51cbiAgICpcbiAgICogQHJldHVybnMgcWIgLSDsv7zrpqwg67mM642UICjsobDqsbQg7LaU6rCA7JqpKVxuICAgKiBAcmV0dXJucyBvblN1YnNldCAtIO2KueyglSDshJzruIzshYsg7KCE7JqpIO2DgOyeheydtCDtlYTsmpTtlaAg65WMIOyCrOyaqVxuICAgKi9cbiAgZ2V0U3Vic2V0UXVlcmllczxUIGV4dGVuZHMgVFN1YnNldEtleT4oc3Vic2V0OiBUKSB7XG4gICAgaWYgKCF0aGlzLnN1YnNldFF1ZXJpZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInN1YnNldFF1ZXJpZXMgaXMgbm90IGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcHVyaVdyYXBwZXIgPSBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICAgIGNvbnN0IHFiID0gdGhpcy5zdWJzZXRRdWVyaWVzW3N1YnNldF0/LihwdXJpV3JhcHBlcik7XG5cbiAgICAvLyBOb25BbGxvd2VkQXNTaW5nbGVUYWJsZTog64uo7J28IO2FjOydtOu4lCDsu6zrn7wg7KCR6re8IOuwqeyngOyaqSDrp4jsu6RcbiAgICB0eXBlIFFCVGFibGVzID0gVW5pb25FeHRyYWN0ZWRUVGFibGVzPFRTdWJzZXRLZXksIFRTdWJzZXRRdWVyaWVzPiAmIHtcbiAgICAgIE5vbkFsbG93ZWRBc1NpbmdsZVRhYmxlOiB7IF9fZnVsbHRleHRfXzogdHJ1ZSB9O1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgcWI6IHFiIGFzIHVua25vd24gYXMgUHVyaTxEYXRhYmFzZVNjaGVtYUV4dGVuZCwgUUJUYWJsZXMsIHt9PixcbiAgICAgIG9uU3Vic2V0OiAoKF9zdWJzZXQ6IFRTdWJzZXRLZXkgfCByZWFkb25seSBUU3Vic2V0S2V5W10pID0+IHFiKSBhcyB7XG4gICAgICAgIC8vIOuLqOydvCDtgqRcbiAgICAgICAgPFMgZXh0ZW5kcyBUU3Vic2V0S2V5PihzdWJzZXQ6IFMpOiBSZXR1cm5UeXBlPFRTdWJzZXRRdWVyaWVzW1NdPjtcbiAgICAgICAgLy8g7YKkIOuwsOyXtCAtPiDqtZDsp5Htlakg67CY7ZmYXG4gICAgICAgIDxBcnIgZXh0ZW5kcyByZWFkb25seSBUU3Vic2V0S2V5W10+KFxuICAgICAgICAgIHN1YnNldHM6IFsuLi5BcnJdLFxuICAgICAgICApOiBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uPEFyciwgVFN1YnNldFF1ZXJpZXM+O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuaGFuY2VyIOqwneyytCDsg53shLEg7Zes7Y28XG4gICAqIO2DgOyehSDqsoDspp0g67CPIOy2lOuhoOydhCDrj4TsmYDspIxcbiAgICovXG4gIGNyZWF0ZUVuaGFuY2VyczxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgZW5oYW5jZXJzOiBFbmhhbmNlck1hcDxcbiAgICAgIFQsXG4gICAgICBJbmZlckFsbFN1YnNldHM8VFN1YnNldFF1ZXJpZXMsIFRMb2FkZXJRdWVyaWVzPixcbiAgICAgIFRTdWJzZXRNYXBwaW5nLFxuICAgICAgVFN1YnNldFF1ZXJpZXNcbiAgICA+LFxuICApIHtcbiAgICByZXR1cm4gZW5oYW5jZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIOyEnOu4jOyFiyDsv7zrpqwg7Iuk7ZaJXG4gICAqXG4gICAqIDEuIFNvbmFtdSDtlYTthLAg7KCB7JqpICjtg4DsnoUg67OA7ZmYIO2PrO2VqClcbiAgICogMi4g7L+866asIOyLpO2WiSAocGFnaW5hdGlvbiDsoIHsmqkpXG4gICAqIDMuIOuhnOuNlCDsi6TtlokgKDE6TiwgTjpNIOq0gOqzhCDrjbDsnbTthLAg66Gc65SpKVxuICAgKiA0LiBIeWRyYXRlIChmbGF0IOKGkiDspJHssqkg6rCd7LK0KVxuICAgKiA1LiBFbmhhbmNlciDsoIHsmqkgKHZpcnR1YWwg7ZWE65OcIOqzhOyCsClcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVTdWJzZXRRdWVyeTxcbiAgICBUIGV4dGVuZHMgVFN1YnNldEtleSxcbiAgICBUQ29tcHV0ZWRSZXN1bHRzIGV4dGVuZHMgSW5mZXJBbGxTdWJzZXRzPFRTdWJzZXRRdWVyaWVzLCBUTG9hZGVyUXVlcmllcz4sXG4gICAgTFAgZXh0ZW5kcyB7XG4gICAgICBudW0/OiBudW1iZXI7XG4gICAgICBwYWdlPzogbnVtYmVyO1xuICAgICAgcXVlcnlNb2RlPzogU29uYW11UXVlcnlNb2RlO1xuICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSxcbiAgPihcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN1YnNldDogVDtcbiAgICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+O1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG51bTogbnVtYmVyO1xuICAgICAgICBwYWdlOiBudW1iZXI7XG4gICAgICAgIHF1ZXJ5TW9kZT86IFNvbmFtdVF1ZXJ5TW9kZTtcbiAgICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICB9O1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgb3B0aW1pemVDb3VudFF1ZXJ5PzogYm9vbGVhbjtcbiAgICB9ICYgRW5oYW5jZXJQYXJhbTxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZywgVFN1YnNldFF1ZXJpZXM+LFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHsgc3Vic2V0LCBxYiwgcGFyYW1zOiBxdWVyeVBhcmFtcywgZGVidWcgPSBmYWxzZSwgb3B0aW1pemVDb3VudFF1ZXJ5ID0gZmFsc2UgfSA9IHBhcmFtcztcblxuICAgIGlmICghdGhpcy5sb2FkZXJRdWVyaWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2FkZXJRdWVyaWVzIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIC8vIFNvbmFtdSBGaWx0ZXIg7KCB7JqpXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcikge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbHRlciA9IG5vcm1hbGl6ZUZpbHRlclF1ZXJ5KHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcik7XG4gICAgICB0aGlzLmFwcGx5U29uYW11RmlsdGVycyhxYiwgbm9ybWFsaXplZEZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW0sIHBhZ2UgfSA9IHF1ZXJ5UGFyYW1zO1xuXG4gICAgLy8gQ09VTlQg7L+866asIOyLpO2WiSAocXVlcnlNb2RlOiBsaXN07J28IOuVjOuKlCAwIOumrO2EtClcbiAgICBjb25zdCB0b3RhbCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNvdW50UXVlcnkocWIsIHF1ZXJ5UGFyYW1zLCBkZWJ1Zywgb3B0aW1pemVDb3VudFF1ZXJ5KTtcblxuICAgIGlmIChxdWVyeVBhcmFtcz8ucXVlcnlNb2RlID09PSBcImNvdW50XCIpIHtcbiAgICAgIHJldHVybiB7IHRvdGFsIH0gYXMgTGlzdFJlc3VsdDxMUCwgVFN1YnNldE1hcHBpbmdbVF0+O1xuICAgIH1cblxuICAgIC8vIExJU1Qg7L+866asIOyLpO2WiVxuICAgIGNvbnN0IGNvbXB1dGVkUm93cyA9IGF3YWl0IHRoaXMuZXhlY3V0ZUxpc3RRdWVyeShzdWJzZXQsIHFiLCBxdWVyeVBhcmFtcywgbnVtLCBwYWdlLCBkZWJ1Zyk7XG5cbiAgICAvLyBFbmhhbmNlciDsoIHsmqlcbiAgICBjb25zdCBlbmhhbmNlciA9IChwYXJhbXMgYXMgYW55KS5lbmhhbmNlcnM/LltzdWJzZXRdO1xuICAgIGNvbnN0IGVuaGFuY2VkUm93cyA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNvbXB1dGVkUm93cy5tYXAoKHJvdykgPT4gZW5oYW5jZXI/Lihyb3cpID8/IHJvdyksXG4gICAgKSkgYXMgVFN1YnNldE1hcHBpbmdbVF1bXTtcblxuICAgIC8vIEludGVybmFsIO2VhOuTnCDsoJzqsbBcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldCh0aGlzLm1vZGVsTmFtZSk7XG4gICAgY29uc3QgaW50ZXJuYWxGaWVsZHMgPSBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldF0gPz8gW107XG4gICAgY29uc3Qgcm93cyA9XG4gICAgICBpbnRlcm5hbEZpZWxkcy5sZW5ndGggPiAwXG4gICAgICAgID8gZW5oYW5jZWRSb3dzLm1hcCgocm93KSA9PiB0aGlzLm9taXRJbnRlcm5hbEZpZWxkcyhyb3csIGludGVybmFsRmllbGRzKSlcbiAgICAgICAgOiBlbmhhbmNlZFJvd3M7XG5cbiAgICBpZiAocXVlcnlQYXJhbXMucXVlcnlNb2RlID09PSBcImxpc3RcIikge1xuICAgICAgLy8g66as7Iqk7Yq466eMIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cyB9IGFzIExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g65GY64ukIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cywgdG90YWwgfSBhcyBMaXN0UmVzdWx0PExQLCBUU3Vic2V0TWFwcGluZ1tUXT47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOqwneyytOyXkOyEnCBpbnRlcm5hbCDtlYTrk5wg7KCc6rGwXG4gICAqIOykkeyyqSDtlYTrk5wo7JiIOiBcInVzZXIuZW1haWxcIikg67CPIOuwsOyXtCjsmIg6IFwiZW1wbG95ZWVzLnNhbGFyeVwiKeuPhCDsspjrpqxcbiAgICovXG4gIG9taXRJbnRlcm5hbEZpZWxkczxUIGV4dGVuZHMgb2JqZWN0Pihyb3c6IFQsIGZpZWxkczogc3RyaW5nW10pOiBUIHtcbiAgICBjb25zdCByZXN1bHQgPSBjbG9uZURlZXAocm93KTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgdGhpcy5kZWxldGVGaWVsZChyZXN1bHQsIGZpZWxkLnNwbGl0KFwiLlwiKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyUXVlcnnrpbwgUHVyaSBRdWVyeUJ1aWxkZXLsl5Ag7KCB7JqpXG4gICAqXG4gICAqIEBwYXJhbSBxYiBQdXJpIFF1ZXJ5QnVpbGRlciDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIGZpbHRlcnMgRmlsdGVyUXVlcnkg6rCd7LK0XG4gICAqL1xuICBwcm90ZWN0ZWQgYXBwbHlTb25hbXVGaWx0ZXJzPFRFbnRpdHkgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgcWI6IFB1cmk8YW55LCBhbnksIGFueT4sXG4gICAgZmlsdGVycz86IEZpbHRlclF1ZXJ5PFRFbnRpdHk+LFxuICApOiB2b2lkIHtcbiAgICBpZiAoIWZpbHRlcnMpIHJldHVybjtcblxuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHRoaXMubW9kZWxOYW1lKTtcblxuICAgIC8vIDEuIO2VhO2EsCDqsoDspp0gKEVudGl0eSDquLDrsJgpXG4gICAgdmFsaWRhdGVTb25hbXVGaWx0ZXJzKGZpbHRlcnMsIGVudGl0eSk7XG5cbiAgICAvLyAyLiDqsoDspp3rkJwg7ZWE7YSwIOyggeyaqVxuICAgIGNvbnN0IHB1cmkgPSBxYiBhcyBhbnk7XG5cbiAgICBmb3IgKGNvbnN0IFtmaWVsZCwgY29uZGl0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXJzKSkge1xuICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IGNvbmRpdGlvbiA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgIC8vIO2FjOydtOu4lOuqhS7tlYTrk5zrqoUg7ZiV7Iud7Jy866GcIOuzgO2ZmFxuICAgICAgY29uc3QgZnVsbEZpZWxkID0gZW50aXR5LmdldEZ1bGxGaWVsZE5hbWUoZmllbGQpO1xuXG4gICAgICAvLyDsp4HsoJEg6rCSIChlceyZgCDrj5nsnbwpXG4gICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNvbmRpdGlvbikpIHtcbiAgICAgICAgcHVyaS53aGVyZShmdWxsRmllbGQsIGNvbmRpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyDsl7DsgrDsnpAg6rCd7LK0XG4gICAgICBmb3IgKGNvbnN0IFtvcGVyYXRvciwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmRpdGlvbikpIHtcbiAgICAgICAgdGhpcy5hcHBseU9wZXJhdG9yKHFiLCBmdWxsRmllbGQsIG9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOuLqOydvCDsl7DsgrDsnpDrpbwgUXVlcnlCdWlsZGVy7JeQIOyggeyaqVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wZXJhdG9yKFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLFxuICAgIHZhbHVlOiB1bmtub3duLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwdXJpID0gcWIgYXMgYW55O1xuXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgY2FzZSBcImVxXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJuZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIiE9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJndFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj5cIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImd0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJsdFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjxcIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImx0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjw9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpblwiOlxuICAgICAgICBwdXJpLndoZXJlSW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJub3RJblwiOlxuICAgICAgICBwdXJpLndoZXJlTm90SW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJjb250YWluc1wiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcImxpa2VcIiwgYCUke3ZhbHVlfSVgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJzdGFydHNXaXRoXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwibGlrZVwiLCBgJHt2YWx1ZX0lYCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZW5kc1dpdGhcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCJsaWtlXCIsIGAlJHt2YWx1ZX1gKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpc051bGxcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaXNOb3ROdWxsXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiIT1cIiwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYmVmb3JlXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPFwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYWZ0ZXJcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI+XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJiZXR3ZWVuXCI6IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB2YWx1ZTtcbiAgICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIG1pbikud2hlcmUoZmllbGQsIFwiPD1cIiwgbWF4KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBvcGVyYXRvcjogJHtvcGVyYXRvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7KSR7LKpIO2VhOuTnCDsgq3soJwgKOuwsOyXtCDrgrQg6rCd7LK064+EIOyymOumrClcbiAgICovXG4gIGRlbGV0ZUZpZWxkKG9iajogYW55LCBwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmouZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBkZWxldGUgaXRlbVtwYXJ0c1swXV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBvYmpbcGFydHNbMF1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBwYXJ0cztcbiAgICBjb25zdCBuZXh0ID0gb2JqW2ZpcnN0XTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5leHQpKSB7XG4gICAgICBuZXh0Lm1hcCgoaXRlbSkgPT4gdGhpcy5kZWxldGVGaWVsZChpdGVtLCByZXN0KSk7XG4gICAgfSBlbHNlIGlmIChuZXh0ICYmIHR5cGVvZiBuZXh0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmRlbGV0ZUZpZWxkKG5leHQsIHJlc3QpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDT1VOVCDsv7zrpqwg7Iuk7ZaJICjrgrTrtoAg66mU7ISc65OcKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQ291bnRRdWVyeShcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBwYXJhbXM6IHsgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIiB9LFxuICAgIGRlYnVnOiBib29sZWFuLFxuICAgIG9wdGltaXplQ291bnRRdWVyeTogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocGFyYW1zLnF1ZXJ5TW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdW50UHVyaSA9IHFiLmNsb25lKCkuY2xlYXIoXCJvcmRlclwiKS5jbGVhcihcImxpbWl0XCIpLmNsZWFyKFwib2Zmc2V0XCIpO1xuXG4gICAgaWYgKG9wdGltaXplQ291bnRRdWVyeSkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0OiBTcWxQYXJzZXIgfSA9IGF3YWl0IGltcG9ydChcIm5vZGUtc3FsLXBhcnNlclwiKTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTcWxQYXJzZXIuUGFyc2VyKCk7XG4gICAgICBjb25zdCBwYXJzZWRRdWVyeSA9IHBhcnNlci5hc3RpZnkoY291bnRQdXJpLnRvUXVlcnkoKSwge1xuICAgICAgICBkYXRhYmFzZTogU29uYW11LmNvbmZpZy5kYXRhYmFzZT8uZGF0YWJhc2UsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbGVmdEpvaW5UYWJsZXMgPSBnZXRKb2luVGFibGVzKHBhcnNlZFF1ZXJ5LCBbXCJMRUZUIEpPSU5cIl0pO1xuICAgICAgY29uc3Qgd2hlcmVUYWJsZXMgPSBnZXRUYWJsZU5hbWVzRnJvbVdoZXJlKHBhcnNlZFF1ZXJ5KTtcblxuICAgICAgY29uc3QgdGFibGVzVG9SZW1vdmUgPSBsZWZ0Sm9pblRhYmxlcy5maWx0ZXIoKGopID0+ICF3aGVyZVRhYmxlcy5pbmNsdWRlcyhqKSk7XG4gICAgICB0YWJsZXNUb1JlbW92ZS5mb3JFYWNoKCh0YWJsZSkgPT4ge1xuICAgICAgICBjb3VudFB1cmkuY2xlYXJKb2luKHRhYmxlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENPVU5UKCop66GcIOyghOyytCDroIjsvZTrk5wg7IiY66W8IOqzhOyCsFxuICAgIC8vIFRPRE86IHFi7J2YIERJU1RJTkNU6rCAIOyeiOuKlCDqsr3smrAg7LKY66as7ZW07JW8IO2VqFxuICAgIGNvbnN0IGNvdW50UmVzdWx0OiB7IHRvdGFsPzogbnVtYmVyIH0gPSBhd2FpdCBjb3VudFB1cmlcbiAgICAgIC5jbGVhcihcInNlbGVjdFwiKVxuICAgICAgLnNlbGVjdCh7IHRvdGFsOiBQdXJpLnJhd051bWJlcihgQ09VTlQoKik6OmludGVnZXJgKSB9KVxuICAgICAgLmZpcnN0KCk7XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIGNvdW50UHVyaS5kZWJ1ZygpO1xuICAgIH1cblxuICAgIHJldHVybiBjb3VudFJlc3VsdD8udG90YWwgPz8gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMSVNUIOy/vOumrCDsi6TtlokgKOuCtOu2gCDrqZTshJzrk5wpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVMaXN0UXVlcnk8VCBleHRlbmRzIFRTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBwYXJhbXM6IHsgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIiB9LFxuICAgIG51bTogbnVtYmVyLFxuICAgIHBhZ2U6IG51bWJlcixcbiAgICBkZWJ1ZzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGlmIChwYXJhbXMucXVlcnlNb2RlID09PSBcImNvdW50XCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW1pdGVkUWIgPSAoKCkgPT4ge1xuICAgICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcWI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcWIubGltaXQobnVtKS5vZmZzZXQobnVtICogKHBhZ2UgLSAxKSk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBsZXQgdW5sb2FkZWRSb3dzID0gKGF3YWl0IGxpbWl0ZWRRYikgYXMgYW55W107XG5cbiAgICBpZiAoZGVidWcpIHtcbiAgICAgIHFiLmRlYnVnKCk7XG4gICAgfVxuXG4gICAgLy8g66Gc642UIOyymOumrFxuICAgIGNvbnN0IGxvYWRlcnMgPSAodGhpcy5sb2FkZXJRdWVyaWVzIGFzIGFueSlbc3Vic2V0XTtcbiAgICBpZiAobG9hZGVycyAmJiBBcnJheS5pc0FycmF5KGxvYWRlcnMpKSB7XG4gICAgICB1bmxvYWRlZFJvd3MgPSBhd2FpdCB0aGlzLnByb2Nlc3NMb2FkZXJzKHVubG9hZGVkUm93cywgbG9hZGVycywgZGVidWcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh5ZHJhdGUodW5sb2FkZWRSb3dzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDsnqzqt4DsoIEg66Gc642UIOyymOumrFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzTG9hZGVycyhyb3dzOiBhbnlbXSwgbG9hZGVyczogYW55W10sIGRlYnVnOiBib29sZWFuKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGZvciAoY29uc3QgcmVzb2x2ZUxvYWRlciBvZiBsb2FkZXJzKSB7XG4gICAgICBjb25zdCB7IGFzLCByZWZJZCwgcWI6IHJlc29sdmVMb2FkZXJRYkZuLCBsb2FkZXJzOiBuZXN0ZWRMb2FkZXJzIH0gPSByZXNvbHZlTG9hZGVyO1xuXG4gICAgICBjb25zdCByZXNvbHZlTG9hZGVyUWIgPSByZXNvbHZlTG9hZGVyUWJGbihcbiAgICAgICAgbmV3IFB1cmlXcmFwcGVyKHRoaXMuZ2V0REIoXCJyXCIpLCBuZXcgVXBzZXJ0QnVpbGRlcigpKSxcbiAgICAgICAgcm93cy5tYXAoKHJvdykgPT4gcm93W3JlZklkXSksXG4gICAgICApO1xuXG4gICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgcmVzb2x2ZUxvYWRlclFiLmRlYnVnKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBsb2FkZWRSb3dzID0gKGF3YWl0IHJlc29sdmVMb2FkZXJRYikgYXMgYW55W107XG5cbiAgICAgIC8vIOykkeyyqSBsb2FkZXJz6rCAIOyeiOycvOuptCDsnqzqt4Ag7LKY66asXG4gICAgICBpZiAobmVzdGVkTG9hZGVycyAmJiBuZXN0ZWRMb2FkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9hZGVkUm93cyA9IGF3YWl0IHRoaXMucHJvY2Vzc0xvYWRlcnMobG9hZGVkUm93cywgbmVzdGVkTG9hZGVycywgZGVidWcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdWJSb3dHcm91cHMgPSBncm91cChsb2FkZWRSb3dzLCAocm93KSA9PiByb3cucmVmSWQpO1xuXG4gICAgICByb3dzID0gcm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgICByb3dbYXNdID0gKHN1YlJvd0dyb3Vwc1tyb3dbcmVmSWRdXSA/PyBbXSkubWFwKChyKSA9PiBvbWl0KHIsIFtcInJlZklkXCJdKSk7XG4gICAgICAgIHJldHVybiByb3c7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93cztcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGF0IOugiOy9lOuTnOulvCDspJHssqkg6rCd7LK066GcIOuzgO2ZmFxuICAgKlxuICAgKiAtIGB1c2VyX19uYW1lYCDihpIgYHsgdXNlcjogeyBuYW1lIH0gfWBcbiAgICogLSBudWxsYWJsZSByZWxhdGlvbuydmCDqsr3smrAgaWQg7ZWE65Oc6rCAIG51bGzsnbTrqbQg6rCd7LK0IOyekOyytOulvCBudWxs66GcXG4gICAqL1xuICBoeWRyYXRlPFQgZXh0ZW5kcyBVbmtub3duREJSZWNvcmQ+KHJvd3M6IFRbXSk6IFRbXSB7XG4gICAgcmV0dXJuIHJvd3MubWFwKChyb3c6IFQpID0+IHtcbiAgICAgIC8vIG51bGxhYmxlIHJlbGF0aW9uIOyymOumrDog6re466O57J2YIGlkIO2VhOuTnOqwgCBudWxs7J2066m0IOqwneyytCDsoITssrTrpbwgbnVsbOuhnFxuICAgICAgY29uc3QgbmVzdGVkS2V5cyA9IE9iamVjdC5rZXlzKHJvdykuZmlsdGVyKChrZXkpID0+IGtleS5pbmNsdWRlcyhcIl9fXCIpKTtcbiAgICAgIGNvbnN0IGdyb3VwcyA9IE9iamVjdC5ncm91cEJ5KG5lc3RlZEtleXMsIChrZXkpID0+IGtleS5zcGxpdChcIl9fXCIpWzBdKTtcblxuICAgICAgLy8gaWQg7ZWE65Oc6rCAIG51bGzsnbgg6re466O5IOywvuq4sCAo7JiIOiBwYXJlbnRfX2lk6rCAIG51bGzsnbTrqbQgcGFyZW50IOq3uOujuSDsoITssrTqsIAgbnVsbClcbiAgICAgIGNvbnN0IG51bGxLZXlzID0gT2JqZWN0LmVudHJpZXMoZ3JvdXBzKVxuICAgICAgICAuZmlsdGVyKChbZ3JvdXBLZXksIGZpZWxkc10pID0+IHtcbiAgICAgICAgICBpZiAoIWZpZWxkcyB8fCBmaWVsZHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAvLyDqt7jro7nsnZggaWQg7ZWE65OcIOywvuq4sCAo7JiIOiBcInBhcmVudF9faWRcIilcbiAgICAgICAgICBjb25zdCBpZEZpZWxkID0gYCR7Z3JvdXBLZXl9X19pZGA7XG4gICAgICAgICAgaWYgKGlkRmllbGQgaW4gcm93KSB7XG4gICAgICAgICAgICAvLyBpZCDtlYTrk5zqsIAgbnVsbOydtOuptCDqsJ3ssrQg7KCE7LK06rCAIG51bGxcbiAgICAgICAgICAgIHJldHVybiByb3dbaWRGaWVsZF0gPT09IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWQg7ZWE65Oc6rCAIOyXhuycvOuptCDquLDsobQg66Gc7KeBOiDrqqjrk6Ag7ZWE65Oc6rCAIG51bGzsnbjsp4Ag7ZmV7J24XG4gICAgICAgICAgcmV0dXJuIGZpZWxkcy5ldmVyeShcbiAgICAgICAgICAgIChmaWVsZCkgPT5cbiAgICAgICAgICAgICAgcm93W2ZpZWxkXSA9PT0gbnVsbCB8fCAoQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiByb3dbZmllbGRdLmxlbmd0aCA9PT0gMCksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgoW2tleV0pID0+IGtleSk7XG5cbiAgICAgIGNvbnN0IGh5ZHJhdGVkID0gT2JqZWN0LmtleXMocm93KS5yZWR1Y2UoKHIsIGZpZWxkKSA9PiB7XG4gICAgICAgIGlmICghZmllbGQuaW5jbHVkZXMoXCJfX1wiKSkge1xuICAgICAgICAgIC8vIOydvOuwmCDtlYTrk5w6IOuwsOyXtCDrgrQg6rCd7LK066m0IOyerOq3gCBoeWRyYXRlXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm93W2ZpZWxkXSkgJiYgaXNPYmplY3Qocm93W2ZpZWxkXVswXSkpIHtcbiAgICAgICAgICAgIHJbZmllbGRdID0gdGhpcy5oeWRyYXRlKHJvd1tmaWVsZF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByW2ZpZWxkXSA9IHJvd1tmaWVsZF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7KSR7LKpIO2VhOuTnCDsspjrpqw6IHVzZXJfX25hbWUg4oaSIHVzZXJbbmFtZV1cbiAgICAgICAgY29uc3QgcGFydHMgPSBmaWVsZC5zcGxpdChcIl9fXCIpO1xuICAgICAgICBjb25zdCBvYmpQYXRoID1cbiAgICAgICAgICBwYXJ0c1swXSArXG4gICAgICAgICAgcGFydHNcbiAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgLm1hcCgocGFydCkgPT4gYFske3BhcnR9XWApXG4gICAgICAgICAgICAuam9pbihcIlwiKTtcblxuICAgICAgICByID0gc2V0KFxuICAgICAgICAgIHIsXG4gICAgICAgICAgb2JqUGF0aCxcbiAgICAgICAgICByb3dbZmllbGRdICYmIEFycmF5LmlzQXJyYXkocm93W2ZpZWxkXSkgJiYgaXNPYmplY3Qocm93W2ZpZWxkXVswXSlcbiAgICAgICAgICAgID8gdGhpcy5oeWRyYXRlKHJvd1tmaWVsZF0pXG4gICAgICAgICAgICA6IHJvd1tmaWVsZF0sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9LCB7fSBhcyBVbmtub3duREJSZWNvcmQpO1xuXG4gICAgICAvLyBudWxsIHJlbGF0aW9uIOyymOumrFxuICAgICAgbnVsbEtleXMuZm9yRWFjaCgobnVsbEtleSkgPT4ge1xuICAgICAgICBoeWRyYXRlZFtudWxsS2V5XSA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGh5ZHJhdGVkO1xuICAgIH0pIGFzIFRbXTtcbiAgfVxufVxuXG4vKipcbiAqIEVuaGFuY2VyIO2MjOudvOuvuO2EsCDsobDqsbTrtoAg7YOA7J6FXG4gKiBSZXF1aXJlZEVuaGFuY2VyS2V5c+qwgCDsl4bsnLzrqbQgZW5oYW5jZXJzIOyEoO2DneyggSwg7J6I7Jy866m0IO2VhOyImFxuICovXG50eXBlIEVuaGFuY2VyUGFyYW08XG4gIFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIFRDb21wdXRlZFJlc3VsdHMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldE1hcHBpbmcgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPixcbj4gPSBbUmVxdWlyZWRFbmhhbmNlcktleXM8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmc+XSBleHRlbmRzIFtuZXZlcl1cbiAgPyB7IGVuaGFuY2Vycz86IEVuaGFuY2VyTWFwPFRTdWJzZXRLZXksIFRDb21wdXRlZFJlc3VsdHMsIFRTdWJzZXRNYXBwaW5nLCBUU3Vic2V0UXVlcmllcz4gfVxuICA6IHsgZW5oYW5jZXJzOiBFbmhhbmNlck1hcDxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZywgVFN1YnNldFF1ZXJpZXM+IH07XG5cbnR5cGUgUmVxdWlyZWRFbmhhbmNlcktleXM8XG4gIFRTdWJzZXRLZXkgZXh0ZW5kcyBzdHJpbmcsXG4gIFRDb21wdXRlZFJlc3VsdHMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55PixcbiAgVFN1YnNldE1hcHBpbmcgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgYW55Pixcbj4gPSB7XG4gIFtLIGluIFRTdWJzZXRLZXldOiBUQ29tcHV0ZWRSZXN1bHRzW0tdIGV4dGVuZHMgVFN1YnNldE1hcHBpbmdbS10gPyBuZXZlciA6IEs7XG59W1RTdWJzZXRLZXldO1xuXG5leHBvcnQgY29uc3QgQmFzZU1vZGVsID0gbmV3IEJhc2VNb2RlbENsYXNzKCk7XG4iXSwibmFtZXMiOlsiZ2V0TG9nZ2VyIiwiY2xvbmVEZWVwIiwiZ3JvdXAiLCJpc09iamVjdCIsIm9taXQiLCJzZXQiLCJub3JtYWxpemVGaWx0ZXJRdWVyeSIsInZhbGlkYXRlU29uYW11RmlsdGVycyIsIlNvbmFtdSIsIkVudGl0eU1hbmFnZXIiLCJjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSIsImdldEpvaW5UYWJsZXMiLCJnZXRUYWJsZU5hbWVzRnJvbVdoZXJlIiwiY2h1bmsiLCJEQiIsIlB1cmkiLCJQdXJpV3JhcHBlciIsIlVwc2VydEJ1aWxkZXIiLCJCYXNlTW9kZWxDbGFzcyIsImxvZ2dlciIsIm1vZGVsTmFtZSIsIm5hbWUiLCJzdWJzZXRRdWVyaWVzIiwibG9hZGVyUXVlcmllcyIsImdldERCIiwid2hpY2giLCJnZXRQdXJpIiwidHJ4IiwiZ2V0VHJhbnNhY3Rpb25Db250ZXh0IiwiZ2V0VHJhbnNhY3Rpb24iLCJkYiIsImRlc3Ryb3kiLCJnZXRJbnNlcnRlZElkcyIsIndkYiIsInJvd3MiLCJ0YWJsZU5hbWUiLCJ1bnFLZXlGaWVsZHMiLCJjaHVua1NpemUiLCJ1bnFLZXlzIiwid2hlcmVJbkZpZWxkIiwic2VsZWN0RmllbGQiLCJsZW5ndGgiLCJyYXciLCJqb2luIiwibWFwIiwicm93IiwiZmllbGQiLCJyZXN1bHRJZHMiLCJpdGVtcyIsImRiUm93cyIsInNlbGVjdCIsIndoZXJlSW4iLCJjb25jYXQiLCJkYlJvdyIsInBhcnNlSW50IiwiU3RyaW5nIiwiaWQiLCJnZXRTdWJzZXRRdWVyaWVzIiwic3Vic2V0IiwiRXJyb3IiLCJwdXJpV3JhcHBlciIsInFiIiwib25TdWJzZXQiLCJfc3Vic2V0IiwiY3JlYXRlRW5oYW5jZXJzIiwiZW5oYW5jZXJzIiwiZXhlY3V0ZVN1YnNldFF1ZXJ5IiwicGFyYW1zIiwicXVlcnlQYXJhbXMiLCJkZWJ1ZyIsIm9wdGltaXplQ291bnRRdWVyeSIsInNvbmFtdUZpbHRlciIsIm5vcm1hbGl6ZWRGaWx0ZXIiLCJhcHBseVNvbmFtdUZpbHRlcnMiLCJudW0iLCJwYWdlIiwidG90YWwiLCJleGVjdXRlQ291bnRRdWVyeSIsInF1ZXJ5TW9kZSIsImNvbXB1dGVkUm93cyIsImV4ZWN1dGVMaXN0UXVlcnkiLCJlbmhhbmNlciIsImVuaGFuY2VkUm93cyIsIlByb21pc2UiLCJhbGwiLCJlbnRpdHkiLCJnZXQiLCJpbnRlcm5hbEZpZWxkcyIsInN1YnNldHNJbnRlcm5hbCIsIm9taXRJbnRlcm5hbEZpZWxkcyIsImZpZWxkcyIsInJlc3VsdCIsImRlbGV0ZUZpZWxkIiwic3BsaXQiLCJmaWx0ZXJzIiwicHVyaSIsImNvbmRpdGlvbiIsIk9iamVjdCIsImVudHJpZXMiLCJ1bmRlZmluZWQiLCJmdWxsRmllbGQiLCJnZXRGdWxsRmllbGROYW1lIiwiQXJyYXkiLCJpc0FycmF5Iiwid2hlcmUiLCJvcGVyYXRvciIsInZhbHVlIiwiYXBwbHlPcGVyYXRvciIsIndoZXJlTm90SW4iLCJtaW4iLCJtYXgiLCJjb25zb2xlIiwid2FybiIsIm9iaiIsInBhcnRzIiwiZm9yRWFjaCIsIml0ZW0iLCJmaXJzdCIsInJlc3QiLCJuZXh0IiwiY291bnRQdXJpIiwiY2xvbmUiLCJjbGVhciIsImRlZmF1bHQiLCJTcWxQYXJzZXIiLCJwYXJzZXIiLCJQYXJzZXIiLCJwYXJzZWRRdWVyeSIsImFzdGlmeSIsInRvUXVlcnkiLCJkYXRhYmFzZSIsImNvbmZpZyIsImxlZnRKb2luVGFibGVzIiwid2hlcmVUYWJsZXMiLCJ0YWJsZXNUb1JlbW92ZSIsImZpbHRlciIsImoiLCJpbmNsdWRlcyIsInRhYmxlIiwiY2xlYXJKb2luIiwiY291bnRSZXN1bHQiLCJyYXdOdW1iZXIiLCJsaW1pdGVkUWIiLCJsaW1pdCIsIm9mZnNldCIsInVubG9hZGVkUm93cyIsImxvYWRlcnMiLCJwcm9jZXNzTG9hZGVycyIsImh5ZHJhdGUiLCJyZXNvbHZlTG9hZGVyIiwiYXMiLCJyZWZJZCIsInJlc29sdmVMb2FkZXJRYkZuIiwibmVzdGVkTG9hZGVycyIsInJlc29sdmVMb2FkZXJRYiIsImxvYWRlZFJvd3MiLCJzdWJSb3dHcm91cHMiLCJyIiwibmVzdGVkS2V5cyIsImtleXMiLCJrZXkiLCJncm91cHMiLCJncm91cEJ5IiwibnVsbEtleXMiLCJncm91cEtleSIsImlkRmllbGQiLCJldmVyeSIsImh5ZHJhdGVkIiwicmVkdWNlIiwib2JqUGF0aCIsInNsaWNlIiwicGFydCIsIm51bGxLZXkiLCJCYXNlTW9kZWwiXSwibWFwcGluZ3MiOiJBQUFBLGtHQUFrRyxHQUNsRyxTQUFTQSxTQUFTLFFBQXFCLG1CQUFtQjtBQUUxRCxTQUFTQyxTQUFTLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLEdBQUcsUUFBUSxVQUFVO0FBQ2hFLFNBQTBCQyxvQkFBb0IsRUFBRUMscUJBQXFCLFFBQVEsY0FBSztBQUNsRixTQUFTQyxNQUFNLFFBQVEsa0JBQVM7QUFDaEMsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUV6RCxTQUFTQyx1QkFBdUIsUUFBUSx3QkFBcUI7QUFFN0QsU0FBU0MsYUFBYSxFQUFFQyxzQkFBc0IsUUFBUSx5QkFBc0I7QUFDNUUsU0FBU0MsS0FBSyxRQUFRLG9CQUFpQjtBQUd2QyxTQUFTQyxFQUFFLFFBQVEsVUFBTztBQUMxQixTQUFTQyxJQUFJLFFBQVEsWUFBUztBQUc5QixTQUFTQyxXQUFXLFFBQVEsb0JBQWlCO0FBQzdDLFNBQVNDLGFBQWEsUUFBUSxzQkFBbUI7QUFJakQ7Ozs7Ozs7Q0FPQyxHQUNELE9BQU8sTUFBTUM7Ozs7SUFNUUMsT0FBZTtJQUVsQyxZQUNFLEFBQWdCQyxZQUFvQixJQUFJLENBQUMsV0FBVyxDQUFDQyxJQUFJLEVBQ3pELEFBQVVDLGFBQThCLEVBQ3hDLEFBQVVDLGFBQThCLENBQ3hDO2FBSGdCSCxZQUFBQTthQUNORSxnQkFBQUE7YUFDQUMsZ0JBQUFBO1FBRVYsSUFBSSxDQUFDSixNQUFNLEdBQUduQixVQUFVVSx3QkFBd0IsSUFBSSxDQUFDVSxTQUFTLEVBQUU7SUFDbEU7SUFFQUksTUFBTUMsS0FBZSxFQUFRO1FBQzNCLE9BQU9YLEdBQUdVLEtBQUssQ0FBQ0M7SUFDbEI7SUFFQUMsUUFBUUQsS0FBZSxFQUFlO1FBQ3BDLHNCQUFzQjtRQUN0QixNQUFNRSxNQUFNYixHQUFHYyxxQkFBcUIsR0FBR0MsY0FBYyxDQUFDSjtRQUN0RCxJQUFJRSxLQUFLO1lBQ1AsT0FBT0E7UUFDVDtRQUVBLCtCQUErQjtRQUMvQixNQUFNRyxLQUFLLElBQUksQ0FBQ04sS0FBSyxDQUFDQztRQUN0QixPQUFPLElBQUlULFlBQVljLElBQUksSUFBSWI7SUFDakM7SUFFQSxNQUFNYyxVQUFVO1FBQ2QsT0FBT2pCLEdBQUdpQixPQUFPO0lBQ25CO0lBRUEsTUFBTUMsZUFDSkMsR0FBUyxFQUNUQyxJQUF1QixFQUN2QkMsU0FBaUIsRUFDakJDLFlBQXNCLEVBQ3RCQyxZQUFvQixHQUFHLEVBQ3ZCO1FBQ0EsSUFBSSxDQUFDSixLQUFLO1lBQ1JBLE1BQU0sSUFBSSxDQUFDVCxLQUFLLENBQUM7UUFDbkI7UUFFQSxJQUFJYztRQUNKLElBQUlDO1FBQ0osSUFBSUM7UUFFSixJQUFJSixhQUFhSyxNQUFNLEdBQUcsR0FBRztZQUMzQkYsZUFBZU4sSUFBSVMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVOLGFBQWFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwRUgsY0FBYyxHQUFHRCxhQUFhLFVBQVUsQ0FBQztZQUN6Q0QsVUFBVUosS0FBS1UsR0FBRyxDQUFDLENBQUNDLE1BQVFULGFBQWFRLEdBQUcsQ0FBQyxDQUFDRSxRQUFVRCxHQUFHLENBQUNDLE1BQU0sRUFBRUgsSUFBSSxDQUFDO1FBQzNFLE9BQU87WUFDTEosZUFBZUgsWUFBWSxDQUFDLEVBQUU7WUFDOUJJLGNBQWNKLFlBQVksQ0FBQyxFQUFFO1lBQzdCRSxVQUFVSixLQUFLVSxHQUFHLENBQUMsQ0FBQ0MsTUFBUUEsR0FBRyxDQUFDVCxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ2xEO1FBRUEsSUFBSVcsWUFBc0IsRUFBRTtRQUM1QixLQUFLLE1BQU1DLFNBQVNuQyxNQUFNeUIsU0FBU0QsV0FBWTtZQUM3QyxNQUFNWSxTQUFTLE1BQU1oQixJQUFJRSxXQUN0QmUsTUFBTSxDQUFDLE1BQU1qQixJQUFJUyxHQUFHLENBQUNGLGNBQ3JCVyxPQUFPLENBQUNaLGNBQXdCUztZQUNuQ0QsWUFBWUEsVUFBVUssTUFBTSxDQUMxQkgsT0FBT0wsR0FBRyxDQUFDLENBQUNTLFFBQTJCQyxTQUFTQyxPQUFPRixNQUFNRyxFQUFFO1FBRW5FO1FBRUEsT0FBT1Q7SUFDVDtJQUVBOzs7OztHQUtDLEdBQ0RVLGlCQUF1Q0MsTUFBUyxFQUFFO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUNwQyxhQUFhLEVBQUU7WUFDdkIsTUFBTSxJQUFJcUMsTUFBTTtRQUNsQjtRQUVBLE1BQU1DLGNBQWMsSUFBSTVDLFlBQVksSUFBSSxDQUFDUSxLQUFLLENBQUMsTUFBTSxJQUFJUDtRQUN6RCxNQUFNNEMsS0FBSyxJQUFJLENBQUN2QyxhQUFhLENBQUNvQyxPQUFPLEdBQUdFO1FBT3hDLE9BQU87WUFDTEMsSUFBSUE7WUFDSkMsVUFBVyxDQUFDQyxVQUFnREY7UUFROUQ7SUFDRjtJQUVBOzs7R0FHQyxHQUNERyxnQkFDRUMsU0FLQyxFQUNEO1FBQ0EsT0FBT0E7SUFDVDtJQUVBOzs7Ozs7OztHQVFDLEdBQ0QsTUFBTUMsbUJBVUpDLE1BVytFLEVBQ25DO1FBQzVDLE1BQU0sRUFBRVQsTUFBTSxFQUFFRyxFQUFFLEVBQUVNLFFBQVFDLFdBQVcsRUFBRUMsUUFBUSxLQUFLLEVBQUVDLHFCQUFxQixLQUFLLEVBQUUsR0FBR0g7UUFFdkYsSUFBSSxDQUFDLElBQUksQ0FBQzVDLGFBQWEsRUFBRTtZQUN2QixNQUFNLElBQUlvQyxNQUFNO1FBQ2xCO1FBRUEsbUJBQW1CO1FBQ25CLElBQUlTLFlBQVlHLFlBQVksRUFBRTtZQUM1QixNQUFNQyxtQkFBbUJsRSxxQkFBcUI4RCxZQUFZRyxZQUFZO1lBQ3RFLElBQUksQ0FBQ0Usa0JBQWtCLENBQUNaLElBQUlXO1FBQzlCO1FBRUEsTUFBTSxFQUFFRSxHQUFHLEVBQUVDLElBQUksRUFBRSxHQUFHUDtRQUV0Qix5Q0FBeUM7UUFDekMsTUFBTVEsUUFBUSxNQUFNLElBQUksQ0FBQ0MsaUJBQWlCLENBQUNoQixJQUFJTyxhQUFhQyxPQUFPQztRQUVuRSxJQUFJRixhQUFhVSxjQUFjLFNBQVM7WUFDdEMsT0FBTztnQkFBRUY7WUFBTTtRQUNqQjtRQUVBLGFBQWE7UUFDYixNQUFNRyxlQUFlLE1BQU0sSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQ3RCLFFBQVFHLElBQUlPLGFBQWFNLEtBQUtDLE1BQU1OO1FBRXJGLGNBQWM7UUFDZCxNQUFNWSxXQUFXLEFBQUNkLE9BQWVGLFNBQVMsRUFBRSxDQUFDUCxPQUFPO1FBQ3BELE1BQU13QixlQUFnQixNQUFNQyxRQUFRQyxHQUFHLENBQ3JDTCxhQUFhbkMsR0FBRyxDQUFDLENBQUNDLE1BQVFvQyxXQUFXcEMsUUFBUUE7UUFHL0MsaUJBQWlCO1FBQ2pCLE1BQU13QyxTQUFTNUUsY0FBYzZFLEdBQUcsQ0FBQyxJQUFJLENBQUNsRSxTQUFTO1FBQy9DLE1BQU1tRSxpQkFBaUJGLE9BQU9HLGVBQWUsQ0FBQzlCLE9BQU8sSUFBSSxFQUFFO1FBQzNELE1BQU14QixPQUNKcUQsZUFBZTlDLE1BQU0sR0FBRyxJQUNwQnlDLGFBQWF0QyxHQUFHLENBQUMsQ0FBQ0MsTUFBUSxJQUFJLENBQUM0QyxrQkFBa0IsQ0FBQzVDLEtBQUswQyxtQkFDdkRMO1FBRU4sSUFBSWQsWUFBWVUsU0FBUyxLQUFLLFFBQVE7WUFDcEMsVUFBVTtZQUNWLE9BQU87Z0JBQUU1QztZQUFLO1FBQ2hCLE9BQU87WUFDTCxRQUFRO1lBQ1IsT0FBTztnQkFBRUE7Z0JBQU0wQztZQUFNO1FBQ3ZCO0lBQ0Y7SUFFQTs7O0dBR0MsR0FDRGEsbUJBQXFDNUMsR0FBTSxFQUFFNkMsTUFBZ0IsRUFBSztRQUNoRSxNQUFNQyxTQUFTMUYsVUFBVTRDO1FBQ3pCLEtBQUssTUFBTUMsU0FBUzRDLE9BQVE7WUFDMUIsSUFBSSxDQUFDRSxXQUFXLENBQUNELFFBQVE3QyxNQUFNK0MsS0FBSyxDQUFDO1FBQ3ZDO1FBQ0EsT0FBT0Y7SUFDVDtJQUVBOzs7OztHQUtDLEdBQ0QsQUFBVWxCLG1CQUNSWixFQUF1QixFQUN2QmlDLE9BQThCLEVBQ3hCO1FBQ04sSUFBSSxDQUFDQSxTQUFTO1FBRWQsTUFBTVQsU0FBUzVFLGNBQWM2RSxHQUFHLENBQUMsSUFBSSxDQUFDbEUsU0FBUztRQUUvQyx1QkFBdUI7UUFDdkJiLHNCQUFzQnVGLFNBQVNUO1FBRS9CLGVBQWU7UUFDZixNQUFNVSxPQUFPbEM7UUFFYixLQUFLLE1BQU0sQ0FBQ2YsT0FBT2tELFVBQVUsSUFBSUMsT0FBT0MsT0FBTyxDQUFDSixTQUFVO1lBQ3hELElBQUlFLGNBQWNHLGFBQWFILGNBQWMsTUFBTTtZQUVuRCxtQkFBbUI7WUFDbkIsTUFBTUksWUFBWWYsT0FBT2dCLGdCQUFnQixDQUFDdkQ7WUFFMUMsZ0JBQWdCO1lBQ2hCLElBQUksT0FBT2tELGNBQWMsWUFBWU0sTUFBTUMsT0FBTyxDQUFDUCxZQUFZO2dCQUM3REQsS0FBS1MsS0FBSyxDQUFDSixXQUFXSjtnQkFDdEI7WUFDRjtZQUVBLFNBQVM7WUFDVCxLQUFLLE1BQU0sQ0FBQ1MsVUFBVUMsTUFBTSxJQUFJVCxPQUFPQyxPQUFPLENBQUNGLFdBQVk7Z0JBQ3pELElBQUksQ0FBQ1csYUFBYSxDQUFDOUMsSUFBSXVDLFdBQVdLLFVBQTRCQztZQUNoRTtRQUNGO0lBQ0Y7SUFFQTs7R0FFQyxHQUNELEFBQVFDLGNBQ045QyxFQUF1QixFQUN2QmYsS0FBYSxFQUNiMkQsUUFBd0IsRUFDeEJDLEtBQWMsRUFDUjtRQUNOLE1BQU1YLE9BQU9sQztRQUViLE9BQVE0QztZQUNOLEtBQUs7Z0JBQ0hWLEtBQUtTLEtBQUssQ0FBQzFELE9BQU80RDtnQkFDbEI7WUFFRixLQUFLO2dCQUNIWCxLQUFLUyxLQUFLLENBQUMxRCxPQUFPLE1BQU00RDtnQkFDeEI7WUFFRixLQUFLO2dCQUNIWCxLQUFLUyxLQUFLLENBQUMxRCxPQUFPLEtBQUs0RDtnQkFDdkI7WUFFRixLQUFLO2dCQUNIWCxLQUFLUyxLQUFLLENBQUMxRCxPQUFPLE1BQU00RDtnQkFDeEI7WUFFRixLQUFLO2dCQUNIWCxLQUFLUyxLQUFLLENBQUMxRCxPQUFPLEtBQUs0RDtnQkFDdkI7WUFFRixLQUFLO2dCQUNIWCxLQUFLUyxLQUFLLENBQUMxRCxPQUFPLE1BQU00RDtnQkFDeEI7WUFFRixLQUFLO2dCQUNIWCxLQUFLNUMsT0FBTyxDQUFDTCxPQUFPNEQ7Z0JBQ3BCO1lBRUYsS0FBSztnQkFDSFgsS0FBS2EsVUFBVSxDQUFDOUQsT0FBTzREO2dCQUN2QjtZQUVGLEtBQUs7Z0JBQ0hYLEtBQUtTLEtBQUssQ0FBQzFELE9BQU8sUUFBUSxDQUFDLENBQUMsRUFBRTRELE1BQU0sQ0FBQyxDQUFDO2dCQUN0QztZQUVGLEtBQUs7Z0JBQ0hYLEtBQUtTLEtBQUssQ0FBQzFELE9BQU8sUUFBUSxHQUFHNEQsTUFBTSxDQUFDLENBQUM7Z0JBQ3JDO1lBRUYsS0FBSztnQkFDSFgsS0FBS1MsS0FBSyxDQUFDMUQsT0FBTyxRQUFRLENBQUMsQ0FBQyxFQUFFNEQsT0FBTztnQkFDckM7WUFFRixLQUFLO2dCQUNIWCxLQUFLUyxLQUFLLENBQUMxRCxPQUFPO2dCQUNsQjtZQUVGLEtBQUs7Z0JBQ0hpRCxLQUFLUyxLQUFLLENBQUMxRCxPQUFPLE1BQU07Z0JBQ3hCO1lBRUYsS0FBSztnQkFDSGlELEtBQUtTLEtBQUssQ0FBQzFELE9BQU8sS0FBSzREO2dCQUN2QjtZQUVGLEtBQUs7Z0JBQ0hYLEtBQUtTLEtBQUssQ0FBQzFELE9BQU8sS0FBSzREO2dCQUN2QjtZQUVGLEtBQUs7Z0JBQVc7b0JBQ2QsSUFBSUosTUFBTUMsT0FBTyxDQUFDRyxVQUFVQSxNQUFNakUsTUFBTSxLQUFLLEdBQUc7d0JBQzlDLE1BQU0sQ0FBQ29FLEtBQUtDLElBQUksR0FBR0o7d0JBQ25CWCxLQUFLUyxLQUFLLENBQUMxRCxPQUFPLE1BQU0rRCxLQUFLTCxLQUFLLENBQUMxRCxPQUFPLE1BQU1nRTtvQkFDbEQ7b0JBQ0E7Z0JBQ0Y7WUFFQTtnQkFDRUMsUUFBUUMsSUFBSSxDQUFDLENBQUMsc0JBQXNCLEVBQUVQLFVBQVU7UUFDcEQ7SUFDRjtJQUVBOztHQUVDLEdBQ0RiLFlBQVlxQixHQUFRLEVBQUVDLEtBQWUsRUFBUTtRQUMzQyxJQUFJLENBQUNELE9BQU8sT0FBT0EsUUFBUSxVQUFVO1lBQ25DO1FBQ0Y7UUFFQSxJQUFJQyxNQUFNekUsTUFBTSxLQUFLLEdBQUc7WUFDdEIsSUFBSTZELE1BQU1DLE9BQU8sQ0FBQ1UsTUFBTTtnQkFDdEJBLElBQUlFLE9BQU8sQ0FBQyxDQUFDQztvQkFDWCxJQUFJQSxRQUFRLE9BQU9BLFNBQVMsVUFBVTt3QkFDcEMsT0FBT0EsSUFBSSxDQUFDRixLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN2QjtnQkFDRjtZQUNGLE9BQU87Z0JBQ0wsT0FBT0QsR0FBRyxDQUFDQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCO1lBQ0E7UUFDRjtRQUVBLE1BQU0sQ0FBQ0csT0FBTyxHQUFHQyxLQUFLLEdBQUdKO1FBQ3pCLE1BQU1LLE9BQU9OLEdBQUcsQ0FBQ0ksTUFBTTtRQUV2QixJQUFJZixNQUFNQyxPQUFPLENBQUNnQixPQUFPO1lBQ3ZCQSxLQUFLM0UsR0FBRyxDQUFDLENBQUN3RSxPQUFTLElBQUksQ0FBQ3hCLFdBQVcsQ0FBQ3dCLE1BQU1FO1FBQzVDLE9BQU8sSUFBSUMsUUFBUSxPQUFPQSxTQUFTLFVBQVU7WUFDM0MsSUFBSSxDQUFDM0IsV0FBVyxDQUFDMkIsTUFBTUQ7UUFDekI7SUFDRjtJQUVBOztHQUVDLEdBQ0QsTUFBY3pDLGtCQUNaaEIsRUFBdUIsRUFDdkJNLE1BQWlELEVBQ2pERSxLQUFjLEVBQ2RDLGtCQUEyQixFQUNWO1FBQ2pCLElBQUlILE9BQU9XLFNBQVMsS0FBSyxRQUFRO1lBQy9CLE9BQU87UUFDVDtRQUVBLE1BQU0wQyxZQUFZM0QsR0FBRzRELEtBQUssR0FBR0MsS0FBSyxDQUFDLFNBQVNBLEtBQUssQ0FBQyxTQUFTQSxLQUFLLENBQUM7UUFFakUsSUFBSXBELG9CQUFvQjtZQUN0QixNQUFNLEVBQUVxRCxTQUFTQyxTQUFTLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQztZQUM1QyxNQUFNQyxTQUFTLElBQUlELFVBQVVFLE1BQU07WUFDbkMsTUFBTUMsY0FBY0YsT0FBT0csTUFBTSxDQUFDUixVQUFVUyxPQUFPLElBQUk7Z0JBQ3JEQyxVQUFVMUgsT0FBTzJILE1BQU0sQ0FBQ0QsUUFBUSxFQUFFQTtZQUNwQztZQUVBLE1BQU1FLGlCQUFpQnpILGNBQWNvSCxhQUFhO2dCQUFDO2FBQVk7WUFDL0QsTUFBTU0sY0FBY3pILHVCQUF1Qm1IO1lBRTNDLE1BQU1PLGlCQUFpQkYsZUFBZUcsTUFBTSxDQUFDLENBQUNDLElBQU0sQ0FBQ0gsWUFBWUksUUFBUSxDQUFDRDtZQUMxRUYsZUFBZW5CLE9BQU8sQ0FBQyxDQUFDdUI7Z0JBQ3RCbEIsVUFBVW1CLFNBQVMsQ0FBQ0Q7WUFDdEI7UUFDRjtRQUVBLHlCQUF5QjtRQUN6QixtQ0FBbUM7UUFDbkMsTUFBTUUsY0FBa0MsTUFBTXBCLFVBQzNDRSxLQUFLLENBQUMsVUFDTnhFLE1BQU0sQ0FBQztZQUFFMEIsT0FBTzdELEtBQUs4SCxTQUFTLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztRQUFFLEdBQ3BEeEIsS0FBSztRQUVSLElBQUloRCxPQUFPO1lBQ1RtRCxVQUFVbkQsS0FBSztRQUNqQjtRQUVBLE9BQU91RSxhQUFhaEUsU0FBUztJQUMvQjtJQUVBOztHQUVDLEdBQ0QsTUFBY0ksaUJBQ1p0QixNQUFTLEVBQ1RHLEVBQXVCLEVBQ3ZCTSxNQUFpRCxFQUNqRE8sR0FBVyxFQUNYQyxJQUFZLEVBQ1pOLEtBQWMsRUFDRTtRQUNoQixJQUFJRixPQUFPVyxTQUFTLEtBQUssU0FBUztZQUNoQyxPQUFPLEVBQUU7UUFDWDtRQUVBLE1BQU1nRSxZQUFZLEFBQUMsQ0FBQTtZQUNqQixJQUFJcEUsUUFBUSxHQUFHO2dCQUNiLE9BQU9iO1lBQ1QsT0FBTztnQkFDTCxPQUFPQSxHQUFHa0YsS0FBSyxDQUFDckUsS0FBS3NFLE1BQU0sQ0FBQ3RFLE1BQU9DLENBQUFBLE9BQU8sQ0FBQTtZQUM1QztRQUNGLENBQUE7UUFDQSxJQUFJc0UsZUFBZ0IsTUFBTUg7UUFFMUIsSUFBSXpFLE9BQU87WUFDVFIsR0FBR1EsS0FBSztRQUNWO1FBRUEsUUFBUTtRQUNSLE1BQU02RSxVQUFVLEFBQUMsSUFBSSxDQUFDM0gsYUFBYSxBQUFRLENBQUNtQyxPQUFPO1FBQ25ELElBQUl3RixXQUFXNUMsTUFBTUMsT0FBTyxDQUFDMkMsVUFBVTtZQUNyQ0QsZUFBZSxNQUFNLElBQUksQ0FBQ0UsY0FBYyxDQUFDRixjQUFjQyxTQUFTN0U7UUFDbEU7UUFFQSxPQUFPLElBQUksQ0FBQytFLE9BQU8sQ0FBQ0g7SUFDdEI7SUFFQTs7R0FFQyxHQUNELE1BQWNFLGVBQWVqSCxJQUFXLEVBQUVnSCxPQUFjLEVBQUU3RSxLQUFjLEVBQWtCO1FBQ3hGLEtBQUssTUFBTWdGLGlCQUFpQkgsUUFBUztZQUNuQyxNQUFNLEVBQUVJLEVBQUUsRUFBRUMsS0FBSyxFQUFFMUYsSUFBSTJGLGlCQUFpQixFQUFFTixTQUFTTyxhQUFhLEVBQUUsR0FBR0o7WUFFckUsTUFBTUssa0JBQWtCRixrQkFDdEIsSUFBSXhJLFlBQVksSUFBSSxDQUFDUSxLQUFLLENBQUMsTUFBTSxJQUFJUCxrQkFDckNpQixLQUFLVSxHQUFHLENBQUMsQ0FBQ0MsTUFBUUEsR0FBRyxDQUFDMEcsTUFBTTtZQUc5QixJQUFJbEYsT0FBTztnQkFDVHFGLGdCQUFnQnJGLEtBQUs7WUFDdkI7WUFFQSxJQUFJc0YsYUFBYyxNQUFNRDtZQUV4Qix3QkFBd0I7WUFDeEIsSUFBSUQsaUJBQWlCQSxjQUFjaEgsTUFBTSxHQUFHLEdBQUc7Z0JBQzdDa0gsYUFBYSxNQUFNLElBQUksQ0FBQ1IsY0FBYyxDQUFDUSxZQUFZRixlQUFlcEY7WUFDcEU7WUFFQSxNQUFNdUYsZUFBZTFKLE1BQU15SixZQUFZLENBQUM5RyxNQUFRQSxJQUFJMEcsS0FBSztZQUV6RHJILE9BQU9BLEtBQUtVLEdBQUcsQ0FBQyxDQUFDQztnQkFDZkEsR0FBRyxDQUFDeUcsR0FBRyxHQUFHLEFBQUNNLENBQUFBLFlBQVksQ0FBQy9HLEdBQUcsQ0FBQzBHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQUFBRCxFQUFHM0csR0FBRyxDQUFDLENBQUNpSCxJQUFNekosS0FBS3lKLEdBQUc7d0JBQUM7cUJBQVE7Z0JBQ3ZFLE9BQU9oSDtZQUNUO1FBQ0Y7UUFFQSxPQUFPWDtJQUNUO0lBRUE7Ozs7O0dBS0MsR0FDRGtILFFBQW1DbEgsSUFBUyxFQUFPO1FBQ2pELE9BQU9BLEtBQUtVLEdBQUcsQ0FBQyxDQUFDQztZQUNmLHVEQUF1RDtZQUN2RCxNQUFNaUgsYUFBYTdELE9BQU84RCxJQUFJLENBQUNsSCxLQUFLMEYsTUFBTSxDQUFDLENBQUN5QixNQUFRQSxJQUFJdkIsUUFBUSxDQUFDO1lBQ2pFLE1BQU13QixTQUFTaEUsT0FBT2lFLE9BQU8sQ0FBQ0osWUFBWSxDQUFDRSxNQUFRQSxJQUFJbkUsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBRXJFLGdFQUFnRTtZQUNoRSxNQUFNc0UsV0FBV2xFLE9BQU9DLE9BQU8sQ0FBQytELFFBQzdCMUIsTUFBTSxDQUFDLENBQUMsQ0FBQzZCLFVBQVUxRSxPQUFPO2dCQUN6QixJQUFJLENBQUNBLFVBQVVBLE9BQU9qRCxNQUFNLEtBQUssR0FBRyxPQUFPO2dCQUUzQyxpQ0FBaUM7Z0JBQ2pDLE1BQU00SCxVQUFVLEdBQUdELFNBQVMsSUFBSSxDQUFDO2dCQUNqQyxJQUFJQyxXQUFXeEgsS0FBSztvQkFDbEIsNEJBQTRCO29CQUM1QixPQUFPQSxHQUFHLENBQUN3SCxRQUFRLEtBQUs7Z0JBQzFCO2dCQUVBLHFDQUFxQztnQkFDckMsT0FBTzNFLE9BQU80RSxLQUFLLENBQ2pCLENBQUN4SCxRQUNDRCxHQUFHLENBQUNDLE1BQU0sS0FBSyxRQUFTd0QsTUFBTUMsT0FBTyxDQUFDMUQsR0FBRyxDQUFDQyxNQUFNLEtBQUtELEdBQUcsQ0FBQ0MsTUFBTSxDQUFDTCxNQUFNLEtBQUs7WUFFakYsR0FDQ0csR0FBRyxDQUFDLENBQUMsQ0FBQ29ILElBQUksR0FBS0E7WUFFbEIsTUFBTU8sV0FBV3RFLE9BQU84RCxJQUFJLENBQUNsSCxLQUFLMkgsTUFBTSxDQUFDLENBQUNYLEdBQUcvRztnQkFDM0MsSUFBSSxDQUFDQSxNQUFNMkYsUUFBUSxDQUFDLE9BQU87b0JBQ3pCLDZCQUE2QjtvQkFDN0IsSUFBSW5DLE1BQU1DLE9BQU8sQ0FBQzFELEdBQUcsQ0FBQ0MsTUFBTSxLQUFLM0MsU0FBUzBDLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDLEVBQUUsR0FBRzt3QkFDeEQrRyxDQUFDLENBQUMvRyxNQUFNLEdBQUcsSUFBSSxDQUFDc0csT0FBTyxDQUFDdkcsR0FBRyxDQUFDQyxNQUFNO29CQUNwQyxPQUFPO3dCQUNMK0csQ0FBQyxDQUFDL0csTUFBTSxHQUFHRCxHQUFHLENBQUNDLE1BQU07b0JBQ3ZCO29CQUNBLE9BQU8rRztnQkFDVDtnQkFFQSxvQ0FBb0M7Z0JBQ3BDLE1BQU0zQyxRQUFRcEUsTUFBTStDLEtBQUssQ0FBQztnQkFDMUIsTUFBTTRFLFVBQ0p2RCxLQUFLLENBQUMsRUFBRSxHQUNSQSxNQUNHd0QsS0FBSyxDQUFDLEdBQ045SCxHQUFHLENBQUMsQ0FBQytILE9BQVMsQ0FBQyxDQUFDLEVBQUVBLEtBQUssQ0FBQyxDQUFDLEVBQ3pCaEksSUFBSSxDQUFDO2dCQUVWa0gsSUFBSXhKLElBQ0Z3SixHQUNBWSxTQUNBNUgsR0FBRyxDQUFDQyxNQUFNLElBQUl3RCxNQUFNQyxPQUFPLENBQUMxRCxHQUFHLENBQUNDLE1BQU0sS0FBSzNDLFNBQVMwQyxHQUFHLENBQUNDLE1BQU0sQ0FBQyxFQUFFLElBQzdELElBQUksQ0FBQ3NHLE9BQU8sQ0FBQ3ZHLEdBQUcsQ0FBQ0MsTUFBTSxJQUN2QkQsR0FBRyxDQUFDQyxNQUFNO2dCQUdoQixPQUFPK0c7WUFDVCxHQUFHLENBQUM7WUFFSixtQkFBbUI7WUFDbkJNLFNBQVNoRCxPQUFPLENBQUMsQ0FBQ3lEO2dCQUNoQkwsUUFBUSxDQUFDSyxRQUFRLEdBQUc7WUFDdEI7WUFFQSxPQUFPTDtRQUNUO0lBQ0Y7QUFDRjtBQXVCQSxPQUFPLE1BQU1NLFlBQVksSUFBSTNKLGlCQUFpQiJ9
|
|
393
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9iYXNlLW1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp7J2YIO2DgOyeheydgCDqsJzrs4Qg66qo64247JeQ7IScIO2ZleygleuQmOuvgOuhnCBCYXNlTW9kZWzsl5DshJzripQgYW5566W8IO2XiOyaqe2VqCAqL1xuaW1wb3J0IHsgZ2V0TG9nZ2VyLCB0eXBlIExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBncm91cCwgaXNPYmplY3QsIG9taXQsIHNldCB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB0eXBlIExpc3RSZXN1bHQsIG5vcm1hbGl6ZUZpbHRlclF1ZXJ5LCB2YWxpZGF0ZVNvbmFtdUZpbHRlcnMgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJRdWVyeSB9IGZyb20gXCIuLi9maWx0ZXIvdHlwZXNcIjtcbmltcG9ydCB7IGNvbnZlcnREb21haW5Ub0NhdGVnb3J5IH0gZnJvbSBcIi4uL2xvZ2dlci9jYXRlZ29yeVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZVNjaGVtYUV4dGVuZCwgU29uYW11UXVlcnlNb2RlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRKb2luVGFibGVzLCBnZXRUYWJsZU5hbWVzRnJvbVdoZXJlIH0gZnJvbSBcIi4uL3V0aWxzL3NxbC1wYXJzZXJcIjtcbmltcG9ydCB7IGNodW5rIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VyTWFwLCBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uIH0gZnJvbSBcIi4vYmFzZS1tb2RlbC50eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEQlByZXNldCB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBEQiB9IGZyb20gXCIuL2RiXCI7XG5pbXBvcnQgeyBQdXJpIH0gZnJvbSBcIi4vcHVyaVwiO1xuaW1wb3J0IHR5cGUgeyBVbmlvbkV4dHJhY3RlZFRUYWJsZXMgfSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEluZmVyQWxsU3Vic2V0cywgUHVyaUxvYWRlclF1ZXJpZXMsIFB1cmlTdWJzZXRGbiB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5pbXBvcnQgeyBQdXJpV3JhcHBlciB9IGZyb20gXCIuL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHsgVXBzZXJ0QnVpbGRlciB9IGZyb20gXCIuL3Vwc2VydC1idWlsZGVyXCI7XG5cbnR5cGUgVW5rbm93bkRCUmVjb3JkID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICog66qo65OgIE1vZGVsIO2BtOuemOyKpOydmCDquLDrs7gg7YG0656Y7IqkXG4gKlxuICogQHRlbXBsYXRlIFRTdWJzZXRLZXkgLSDshJzruIzshYsg7YKkIOycoOuLiOyYqCAo7JiIOiBcIkFcIiB8IFwiUFwiIHwgXCJTU1wiKVxuICogQHRlbXBsYXRlIFRTdWJzZXRNYXBwaW5nIC0g7ISc67iM7IWL67OEIOy1nOyihSDqsrDqs7wg7YOA7J6FIOunpO2VkVxuICogQHRlbXBsYXRlIFRTdWJzZXRRdWVyaWVzIC0g7ISc67iM7IWLIOy/vOumrCDtlajsiJgg6rCd7LK0XG4gKiBAdGVtcGxhdGUgVExvYWRlclF1ZXJpZXMgLSDshJzruIzshYvrs4Qg66Gc642UIOy/vOumrCDrsLDsl7Qg6rCd7LK0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlTW9kZWxDbGFzczxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyA9IG5ldmVyLFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBuZXZlcixcbiAgVFN1YnNldFF1ZXJpZXMgZXh0ZW5kcyBSZWNvcmQ8VFN1YnNldEtleSwgUHVyaVN1YnNldEZuPiA9IG5ldmVyLFxuICBUTG9hZGVyUXVlcmllcyBleHRlbmRzIFB1cmlMb2FkZXJRdWVyaWVzPFRTdWJzZXRLZXk+ID0gbmV2ZXIsXG4+IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBtb2RlbE5hbWU6IHN0cmluZyA9IHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICBwcm90ZWN0ZWQgc3Vic2V0UXVlcmllcz86IFRTdWJzZXRRdWVyaWVzLFxuICAgIHByb3RlY3RlZCBsb2FkZXJRdWVyaWVzPzogVExvYWRlclF1ZXJpZXMsXG4gICkge1xuICAgIHRoaXMubG9nZ2VyID0gZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKTtcbiAgfVxuXG4gIGdldERCKHdoaWNoOiBEQlByZXNldCk6IEtuZXgge1xuICAgIHJldHVybiBEQi5nZXREQih3aGljaCk7XG4gIH1cblxuICBnZXRQdXJpKHdoaWNoOiBEQlByZXNldCk6IFB1cmlXcmFwcGVyIHtcbiAgICAvLyDtirjrnpzsnq3shZgg7Luo7YWN7Iqk7Yq47JeQ7IScIO2KuOuenOyereyFmCDtmo3rk51cbiAgICBjb25zdCB0cnggPSBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5nZXRUcmFuc2FjdGlvbih3aGljaCk7XG4gICAgaWYgKHRyeCkge1xuICAgICAgcmV0dXJuIHRyeDtcbiAgICB9XG5cbiAgICAvLyDtirjrnpzsnq3shZjsnbQg7JeG7Jy866m0IOyDiOuhnOyatCBQdXJpV3JhcHBlciDrsJjtmZhcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIod2hpY2gpO1xuICAgIHJldHVybiBuZXcgUHVyaVdyYXBwZXIoZGIsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICByZXR1cm4gREIuZGVzdHJveSgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0SW5zZXJ0ZWRJZHMoXG4gICAgd2RiOiBLbmV4LFxuICAgIHJvd3M6IFVua25vd25EQlJlY29yZFtdLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIHVucUtleUZpZWxkczogc3RyaW5nW10sXG4gICAgY2h1bmtTaXplOiBudW1iZXIgPSA1MDAsXG4gICkge1xuICAgIGlmICghd2RiKSB7XG4gICAgICB3ZGIgPSB0aGlzLmdldERCKFwid1wiKTtcbiAgICB9XG5cbiAgICBsZXQgdW5xS2V5czogc3RyaW5nW107XG4gICAgbGV0IHdoZXJlSW5GaWVsZDogc3RyaW5nIHwgS25leC5SYXc7XG4gICAgbGV0IHNlbGVjdEZpZWxkOiBzdHJpbmc7XG5cbiAgICBpZiAodW5xS2V5RmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHdoZXJlSW5GaWVsZCA9IHdkYi5yYXcoYENPTkNBVF9XUygnXycsICcke3VucUtleUZpZWxkcy5qb2luKFwiLFwiKX0nKWApO1xuICAgICAgc2VsZWN0RmllbGQgPSBgJHt3aGVyZUluRmllbGR9IGFzIHRtcFVpZGA7XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gdW5xS2V5RmllbGRzLm1hcCgoZmllbGQpID0+IHJvd1tmaWVsZF0pLmpvaW4oXCJfXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2hlcmVJbkZpZWxkID0gdW5xS2V5RmllbGRzWzBdO1xuICAgICAgc2VsZWN0RmllbGQgPSB1bnFLZXlGaWVsZHNbMF07XG4gICAgICB1bnFLZXlzID0gcm93cy5tYXAoKHJvdykgPT4gcm93W3VucUtleUZpZWxkc1swXV0gYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0SWRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgaXRlbXMgb2YgY2h1bmsodW5xS2V5cywgY2h1bmtTaXplKSkge1xuICAgICAgY29uc3QgZGJSb3dzID0gYXdhaXQgd2RiKHRhYmxlTmFtZSlcbiAgICAgICAgLnNlbGVjdChcImlkXCIsIHdkYi5yYXcoc2VsZWN0RmllbGQpKVxuICAgICAgICAud2hlcmVJbih3aGVyZUluRmllbGQgYXMgc3RyaW5nLCBpdGVtcyk7XG4gICAgICByZXN1bHRJZHMgPSByZXN1bHRJZHMuY29uY2F0KFxuICAgICAgICBkYlJvd3MubWFwKChkYlJvdzogVW5rbm93bkRCUmVjb3JkKSA9PiBwYXJzZUludChTdHJpbmcoZGJSb3cuaWQpKSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRJZHM7XG4gIH1cblxuICAvKipcbiAgICog7Yq57KCVIOyEnOu4jOyFi+yXkCDrjIDtlZwg7L+866asIOu5jOuNlCDtmo3rk51cbiAgICpcbiAgICogQHJldHVybnMgcWIgLSDsv7zrpqwg67mM642UICjsobDqsbQg7LaU6rCA7JqpKVxuICAgKiBAcmV0dXJucyBvblN1YnNldCAtIO2KueyglSDshJzruIzshYsg7KCE7JqpIO2DgOyeheydtCDtlYTsmpTtlaAg65WMIOyCrOyaqVxuICAgKi9cbiAgZ2V0U3Vic2V0UXVlcmllczxUIGV4dGVuZHMgVFN1YnNldEtleT4oc3Vic2V0OiBUKSB7XG4gICAgaWYgKCF0aGlzLnN1YnNldFF1ZXJpZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInN1YnNldFF1ZXJpZXMgaXMgbm90IGRlZmluZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcHVyaVdyYXBwZXIgPSBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICAgIGNvbnN0IHFiID0gdGhpcy5zdWJzZXRRdWVyaWVzW3N1YnNldF0/LihwdXJpV3JhcHBlcik7XG5cbiAgICAvLyBOb25BbGxvd2VkQXNTaW5nbGVUYWJsZTog64uo7J28IO2FjOydtOu4lCDsu6zrn7wg7KCR6re8IOuwqeyngOyaqSDrp4jsu6RcbiAgICB0eXBlIFFCVGFibGVzID0gVW5pb25FeHRyYWN0ZWRUVGFibGVzPFRTdWJzZXRLZXksIFRTdWJzZXRRdWVyaWVzPiAmIHtcbiAgICAgIE5vbkFsbG93ZWRBc1NpbmdsZVRhYmxlOiB7IF9fZnVsbHRleHRfXzogdHJ1ZSB9O1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgcWI6IHFiIGFzIHVua25vd24gYXMgUHVyaTxEYXRhYmFzZVNjaGVtYUV4dGVuZCwgUUJUYWJsZXMsIHt9PixcbiAgICAgIG9uU3Vic2V0OiAoKF9zdWJzZXQ6IFRTdWJzZXRLZXkgfCByZWFkb25seSBUU3Vic2V0S2V5W10pID0+IHFiKSBhcyB7XG4gICAgICAgIC8vIOuLqOydvCDtgqRcbiAgICAgICAgPFMgZXh0ZW5kcyBUU3Vic2V0S2V5PihzdWJzZXQ6IFMpOiBSZXR1cm5UeXBlPFRTdWJzZXRRdWVyaWVzW1NdPjtcbiAgICAgICAgLy8g7YKkIOuwsOyXtCAtPiDqtZDsp5Htlakg67CY7ZmYXG4gICAgICAgIDxBcnIgZXh0ZW5kcyByZWFkb25seSBUU3Vic2V0S2V5W10+KFxuICAgICAgICAgIHN1YnNldHM6IFsuLi5BcnJdLFxuICAgICAgICApOiBSZXNvbHZlU3Vic2V0SW50ZXJzZWN0aW9uPEFyciwgVFN1YnNldFF1ZXJpZXM+O1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuaGFuY2VyIOqwneyytCDsg53shLEg7Zes7Y28XG4gICAqIO2DgOyehSDqsoDspp0g67CPIOy2lOuhoOydhCDrj4TsmYDspIxcbiAgICovXG4gIGNyZWF0ZUVuaGFuY2VyczxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgZW5oYW5jZXJzOiBFbmhhbmNlck1hcDxcbiAgICAgIFQsXG4gICAgICBJbmZlckFsbFN1YnNldHM8VFN1YnNldFF1ZXJpZXMsIFRMb2FkZXJRdWVyaWVzPixcbiAgICAgIFRTdWJzZXRNYXBwaW5nLFxuICAgICAgVFN1YnNldFF1ZXJpZXNcbiAgICA+LFxuICApIHtcbiAgICByZXR1cm4gZW5oYW5jZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIOyEnOu4jOyFiyDsv7zrpqwg7Iuk7ZaJXG4gICAqXG4gICAqIDEuIFNvbmFtdSDtlYTthLAg7KCB7JqpICjtg4DsnoUg67OA7ZmYIO2PrO2VqClcbiAgICogMi4g7L+866asIOyLpO2WiSAocGFnaW5hdGlvbiDsoIHsmqkpXG4gICAqIDMuIOuhnOuNlCDsi6TtlokgKDE6TiwgTjpNIOq0gOqzhCDrjbDsnbTthLAg66Gc65SpKVxuICAgKiA0LiBIeWRyYXRlIChmbGF0IOKGkiDspJHssqkg6rCd7LK0KVxuICAgKiA1LiBFbmhhbmNlciDsoIHsmqkgKHZpcnR1YWwg7ZWE65OcIOqzhOyCsClcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVTdWJzZXRRdWVyeTxcbiAgICBUIGV4dGVuZHMgVFN1YnNldEtleSxcbiAgICBUQ29tcHV0ZWRSZXN1bHRzIGV4dGVuZHMgSW5mZXJBbGxTdWJzZXRzPFRTdWJzZXRRdWVyaWVzLCBUTG9hZGVyUXVlcmllcz4sXG4gICAgTFAgZXh0ZW5kcyB7XG4gICAgICBudW0/OiBudW1iZXI7XG4gICAgICBwYWdlPzogbnVtYmVyO1xuICAgICAgcXVlcnlNb2RlPzogU29uYW11UXVlcnlNb2RlO1xuICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfSxcbiAgPihcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN1YnNldDogVDtcbiAgICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+O1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG51bTogbnVtYmVyO1xuICAgICAgICBwYWdlOiBudW1iZXI7XG4gICAgICAgIHF1ZXJ5TW9kZT86IFNvbmFtdVF1ZXJ5TW9kZTtcbiAgICAgICAgc29uYW11RmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICB9O1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgb3B0aW1pemVDb3VudFF1ZXJ5PzogYm9vbGVhbjtcbiAgICB9ICYgRW5oYW5jZXJQYXJhbTxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZywgVFN1YnNldFF1ZXJpZXM+LFxuICApOiBQcm9taXNlPExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPj4ge1xuICAgIGNvbnN0IHsgc3Vic2V0LCBxYiwgcGFyYW1zOiBxdWVyeVBhcmFtcywgZGVidWcgPSBmYWxzZSwgb3B0aW1pemVDb3VudFF1ZXJ5ID0gZmFsc2UgfSA9IHBhcmFtcztcblxuICAgIGlmICghdGhpcy5sb2FkZXJRdWVyaWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsb2FkZXJRdWVyaWVzIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgIH1cblxuICAgIC8vIFNvbmFtdSBGaWx0ZXIg7KCB7JqpXG4gICAgaWYgKHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcikge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbHRlciA9IG5vcm1hbGl6ZUZpbHRlclF1ZXJ5KHF1ZXJ5UGFyYW1zLnNvbmFtdUZpbHRlcik7XG4gICAgICB0aGlzLmFwcGx5U29uYW11RmlsdGVycyhxYiwgbm9ybWFsaXplZEZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3QgeyBudW0sIHBhZ2UgfSA9IHF1ZXJ5UGFyYW1zO1xuXG4gICAgLy8gQ09VTlQg7L+866asIOyLpO2WiSAocXVlcnlNb2RlOiBsaXN07J28IOuVjOuKlCAwIOumrO2EtClcbiAgICBjb25zdCB0b3RhbCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNvdW50UXVlcnkocWIsIHF1ZXJ5UGFyYW1zLCBkZWJ1Zywgb3B0aW1pemVDb3VudFF1ZXJ5KTtcblxuICAgIGlmIChxdWVyeVBhcmFtcz8ucXVlcnlNb2RlID09PSBcImNvdW50XCIpIHtcbiAgICAgIHJldHVybiB7IHRvdGFsIH0gYXMgTGlzdFJlc3VsdDxMUCwgVFN1YnNldE1hcHBpbmdbVF0+O1xuICAgIH1cblxuICAgIC8vIExJU1Qg7L+866asIOyLpO2WiVxuICAgIGNvbnN0IGNvbXB1dGVkUm93cyA9IGF3YWl0IHRoaXMuZXhlY3V0ZUxpc3RRdWVyeShzdWJzZXQsIHFiLCBxdWVyeVBhcmFtcywgbnVtLCBwYWdlLCBkZWJ1Zyk7XG5cbiAgICAvLyBFbmhhbmNlciDsoIHsmqlcbiAgICBjb25zdCBlbmhhbmNlciA9IChwYXJhbXMgYXMgYW55KS5lbmhhbmNlcnM/LltzdWJzZXRdO1xuICAgIGNvbnN0IGVuaGFuY2VkUm93cyA9IChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNvbXB1dGVkUm93cy5tYXAoKHJvdykgPT4gZW5oYW5jZXI/Lihyb3cpID8/IHJvdyksXG4gICAgKSkgYXMgVFN1YnNldE1hcHBpbmdbVF1bXTtcblxuICAgIC8vIEludGVybmFsIO2VhOuTnCDsoJzqsbBcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldCh0aGlzLm1vZGVsTmFtZSk7XG4gICAgY29uc3QgaW50ZXJuYWxGaWVsZHMgPSBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldF0gPz8gW107XG4gICAgY29uc3Qgcm93cyA9XG4gICAgICBpbnRlcm5hbEZpZWxkcy5sZW5ndGggPiAwXG4gICAgICAgID8gZW5oYW5jZWRSb3dzLm1hcCgocm93KSA9PiB0aGlzLm9taXRJbnRlcm5hbEZpZWxkcyhyb3csIGludGVybmFsRmllbGRzKSlcbiAgICAgICAgOiBlbmhhbmNlZFJvd3M7XG5cbiAgICBpZiAocXVlcnlQYXJhbXMucXVlcnlNb2RlID09PSBcImxpc3RcIikge1xuICAgICAgLy8g66as7Iqk7Yq466eMIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cyB9IGFzIExpc3RSZXN1bHQ8TFAsIFRTdWJzZXRNYXBwaW5nW1RdPjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g65GY64ukIOumrO2EtFxuICAgICAgcmV0dXJuIHsgcm93cywgdG90YWwgfSBhcyBMaXN0UmVzdWx0PExQLCBUU3Vic2V0TWFwcGluZ1tUXT47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOqwneyytOyXkOyEnCBpbnRlcm5hbCDtlYTrk5wg7KCc6rGwXG4gICAqIOykkeyyqSDtlYTrk5wo7JiIOiBcInVzZXIuZW1haWxcIikg67CPIOuwsOyXtCjsmIg6IFwiZW1wbG95ZWVzLnNhbGFyeVwiKeuPhCDsspjrpqxcbiAgICovXG4gIG9taXRJbnRlcm5hbEZpZWxkczxUIGV4dGVuZHMgb2JqZWN0Pihyb3c6IFQsIGZpZWxkczogc3RyaW5nW10pOiBUIHtcbiAgICBjb25zdCByZXN1bHQgPSBjbG9uZURlZXAocm93KTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgdGhpcy5kZWxldGVGaWVsZChyZXN1bHQsIGZpZWxkLnNwbGl0KFwiLlwiKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyUXVlcnnrpbwgUHVyaSBRdWVyeUJ1aWxkZXLsl5Ag7KCB7JqpXG4gICAqXG4gICAqIEBwYXJhbSBxYiBQdXJpIFF1ZXJ5QnVpbGRlciDsnbjsiqTthLTsiqRcbiAgICogQHBhcmFtIGZpbHRlcnMgRmlsdGVyUXVlcnkg6rCd7LK0XG4gICAqL1xuICBwcm90ZWN0ZWQgYXBwbHlTb25hbXVGaWx0ZXJzPFRFbnRpdHkgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgcWI6IFB1cmk8YW55LCBhbnksIGFueT4sXG4gICAgZmlsdGVycz86IEZpbHRlclF1ZXJ5PFRFbnRpdHk+LFxuICApOiB2b2lkIHtcbiAgICBpZiAoIWZpbHRlcnMpIHJldHVybjtcblxuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHRoaXMubW9kZWxOYW1lKTtcblxuICAgIC8vIDEuIO2VhO2EsCDqsoDspp0gKEVudGl0eSDquLDrsJgpXG4gICAgdmFsaWRhdGVTb25hbXVGaWx0ZXJzKGZpbHRlcnMsIGVudGl0eSk7XG5cbiAgICAvLyAyLiDqsoDspp3rkJwg7ZWE7YSwIOyggeyaqVxuICAgIGNvbnN0IHB1cmkgPSBxYiBhcyBhbnk7XG5cbiAgICBmb3IgKGNvbnN0IFtmaWVsZCwgY29uZGl0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXJzKSkge1xuICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IGNvbmRpdGlvbiA9PT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgIC8vIO2FjOydtOu4lOuqhS7tlYTrk5zrqoUg7ZiV7Iud7Jy866GcIOuzgO2ZmFxuICAgICAgY29uc3QgZnVsbEZpZWxkID0gZW50aXR5LmdldEZ1bGxGaWVsZE5hbWUoZmllbGQpO1xuXG4gICAgICAvLyDsp4HsoJEg6rCSIChlceyZgCDrj5nsnbwpXG4gICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNvbmRpdGlvbikpIHtcbiAgICAgICAgcHVyaS53aGVyZShmdWxsRmllbGQsIGNvbmRpdGlvbik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyDsl7DsgrDsnpAg6rCd7LK0XG4gICAgICBmb3IgKGNvbnN0IFtvcGVyYXRvciwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmRpdGlvbikpIHtcbiAgICAgICAgdGhpcy5hcHBseU9wZXJhdG9yKHFiLCBmdWxsRmllbGQsIG9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOuLqOydvCDsl7DsgrDsnpDrpbwgUXVlcnlCdWlsZGVy7JeQIOyggeyaqVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wZXJhdG9yKFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLFxuICAgIHZhbHVlOiB1bmtub3duLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwdXJpID0gcWIgYXMgYW55O1xuXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xuICAgICAgY2FzZSBcImVxXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJuZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIiE9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJndFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj5cIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImd0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJsdFwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjxcIiwgdmFsdWUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImx0ZVwiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIjw9XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpblwiOlxuICAgICAgICBwdXJpLndoZXJlSW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJub3RJblwiOlxuICAgICAgICBwdXJpLndoZXJlTm90SW4oZmllbGQsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJjb250YWluc1wiOlxuICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcImxpa2VcIiwgYCUke3ZhbHVlfSVgKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJzdGFydHNXaXRoXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwibGlrZVwiLCBgJHt2YWx1ZX0lYCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZW5kc1dpdGhcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCJsaWtlXCIsIGAlJHt2YWx1ZX1gKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpc051bGxcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaXNOb3ROdWxsXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiIT1cIiwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYmVmb3JlXCI6XG4gICAgICAgIHB1cmkud2hlcmUoZmllbGQsIFwiPFwiLCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiYWZ0ZXJcIjpcbiAgICAgICAgcHVyaS53aGVyZShmaWVsZCwgXCI+XCIsIHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJiZXR3ZWVuXCI6IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB2YWx1ZTtcbiAgICAgICAgICBwdXJpLndoZXJlKGZpZWxkLCBcIj49XCIsIG1pbikud2hlcmUoZmllbGQsIFwiPD1cIiwgbWF4KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBvcGVyYXRvcjogJHtvcGVyYXRvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog7KSR7LKpIO2VhOuTnCDsgq3soJwgKOuwsOyXtCDrgrQg6rCd7LK064+EIOyymOumrClcbiAgICovXG4gIGRlbGV0ZUZpZWxkKG9iajogYW55LCBwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmouZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBkZWxldGUgaXRlbVtwYXJ0c1swXV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBvYmpbcGFydHNbMF1dO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBwYXJ0cztcbiAgICBjb25zdCBuZXh0ID0gb2JqW2ZpcnN0XTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5leHQpKSB7XG4gICAgICBuZXh0Lm1hcCgoaXRlbSkgPT4gdGhpcy5kZWxldGVGaWVsZChpdGVtLCByZXN0KSk7XG4gICAgfSBlbHNlIGlmIChuZXh0ICYmIHR5cGVvZiBuZXh0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmRlbGV0ZUZpZWxkKG5leHQsIHJlc3QpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDT1VOVCDsv7zrpqwg7Iuk7ZaJICjrgrTrtoAg66mU7ISc65OcKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlQ291bnRRdWVyeShcbiAgICBxYjogUHVyaTxhbnksIGFueSwgYW55PixcbiAgICBwYXJhbXM6IHsgcXVlcnlNb2RlPzogXCJsaXN0XCIgfCBcImNvdW50XCIgfCBcImJvdGhcIiB9LFxuICAgIGRlYnVnOiBib29sZWFuLFxuICAgIG9wdGltaXplQ291bnRRdWVyeTogYm9vbGVhbixcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocGFyYW1zLnF1ZXJ5TW9kZSA9PT0gXCJsaXN0XCIpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdW50UHVyaSA9IHFiLmNsb25lKCkuY2xlYXIoXCJvcmRlclwiKS5jbGVhcihcImxpbWl0XCIpLmNsZWFyKFwib2Zmc2V0XCIpO1xuXG4gICAgaWYgKG9wdGltaXplQ291bnRRdWVyeSkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0OiBTcWxQYXJzZXIgfSA9IGF3YWl0IGltcG9ydChcIm5vZGUtc3FsLXBhcnNlclwiKTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTcWxQYXJzZXIuUGFyc2VyKCk7XG4gICAgICBjb25zdCBwYXJzZWRRdWVyeSA9IHBhcnNlci5hc3RpZnkoY291bnRQdXJpLnRvUXVlcnkoKSwge1xuICAgICAgICBkYXRhYmFzZTogU29uYW11LmNvbmZpZy5kYXRhYmFzZS5kYXRhYmFzZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBsZWZ0Sm9pblRhYmxlcyA9IGdldEpvaW5UYWJsZXMocGFyc2VkUXVlcnksIFtcIkxFRlQgSk9JTlwiXSk7XG4gICAgICBjb25zdCB3aGVyZVRhYmxlcyA9IGdldFRhYmxlTmFtZXNGcm9tV2hlcmUocGFyc2VkUXVlcnkpO1xuXG4gICAgICBjb25zdCB0YWJsZXNUb1JlbW92ZSA9IGxlZnRKb2luVGFibGVzLmZpbHRlcigoaikgPT4gIXdoZXJlVGFibGVzLmluY2x1ZGVzKGopKTtcbiAgICAgIHRhYmxlc1RvUmVtb3ZlLmZvckVhY2goKHRhYmxlKSA9PiB7XG4gICAgICAgIGNvdW50UHVyaS5jbGVhckpvaW4odGFibGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ09VTlQoKinroZwg7KCE7LK0IOugiOy9lOuTnCDsiJjrpbwg6rOE7IKwXG4gICAgLy8gVE9ETzogcWLsnZggRElTVElOQ1TqsIAg7J6I64qUIOqyveyasCDsspjrpqztlbTslbwg7ZWoXG4gICAgY29uc3QgY291bnRSZXN1bHQ6IHsgdG90YWw/OiBudW1iZXIgfSA9IGF3YWl0IGNvdW50UHVyaVxuICAgICAgLmNsZWFyKFwic2VsZWN0XCIpXG4gICAgICAuc2VsZWN0KHsgdG90YWw6IFB1cmkucmF3TnVtYmVyKGBDT1VOVCgqKTo6aW50ZWdlcmApIH0pXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgY291bnRQdXJpLmRlYnVnKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50UmVzdWx0Py50b3RhbCA/PyAwO1xuICB9XG5cbiAgLyoqXG4gICAqIExJU1Qg7L+866asIOyLpO2WiSAo64K067aAIOuplOyEnOuTnClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUxpc3RRdWVyeTxUIGV4dGVuZHMgVFN1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIHFiOiBQdXJpPGFueSwgYW55LCBhbnk+LFxuICAgIHBhcmFtczogeyBxdWVyeU1vZGU/OiBcImxpc3RcIiB8IFwiY291bnRcIiB8IFwiYm90aFwiIH0sXG4gICAgbnVtOiBudW1iZXIsXG4gICAgcGFnZTogbnVtYmVyLFxuICAgIGRlYnVnOiBib29sZWFuLFxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgaWYgKHBhcmFtcy5xdWVyeU1vZGUgPT09IFwiY291bnRcIikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGxpbWl0ZWRRYiA9ICgoKSA9PiB7XG4gICAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICAgIHJldHVybiBxYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBxYi5saW1pdChudW0pLm9mZnNldChudW0gKiAocGFnZSAtIDEpKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGxldCB1bmxvYWRlZFJvd3MgPSAoYXdhaXQgbGltaXRlZFFiKSBhcyBhbnlbXTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgcWIuZGVidWcoKTtcbiAgICB9XG5cbiAgICAvLyDroZzrjZQg7LKY66asXG4gICAgY29uc3QgbG9hZGVycyA9ICh0aGlzLmxvYWRlclF1ZXJpZXMgYXMgYW55KVtzdWJzZXRdO1xuICAgIGlmIChsb2FkZXJzICYmIEFycmF5LmlzQXJyYXkobG9hZGVycykpIHtcbiAgICAgIHVubG9hZGVkUm93cyA9IGF3YWl0IHRoaXMucHJvY2Vzc0xvYWRlcnModW5sb2FkZWRSb3dzLCBsb2FkZXJzLCBkZWJ1Zyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHlkcmF0ZSh1bmxvYWRlZFJvd3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIOyerOq3gOyggSDroZzrjZQg7LKY66asXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NMb2FkZXJzKHJvd3M6IGFueVtdLCBsb2FkZXJzOiBhbnlbXSwgZGVidWc6IGJvb2xlYW4pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgZm9yIChjb25zdCByZXNvbHZlTG9hZGVyIG9mIGxvYWRlcnMpIHtcbiAgICAgIGNvbnN0IHsgYXMsIHJlZklkLCBxYjogcmVzb2x2ZUxvYWRlclFiRm4sIGxvYWRlcnM6IG5lc3RlZExvYWRlcnMgfSA9IHJlc29sdmVMb2FkZXI7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVMb2FkZXJRYiA9IHJlc29sdmVMb2FkZXJRYkZuKFxuICAgICAgICBuZXcgUHVyaVdyYXBwZXIodGhpcy5nZXREQihcInJcIiksIG5ldyBVcHNlcnRCdWlsZGVyKCkpLFxuICAgICAgICByb3dzLm1hcCgocm93KSA9PiByb3dbcmVmSWRdKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICByZXNvbHZlTG9hZGVyUWIuZGVidWcoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGxvYWRlZFJvd3MgPSAoYXdhaXQgcmVzb2x2ZUxvYWRlclFiKSBhcyBhbnlbXTtcblxuICAgICAgLy8g7KSR7LKpIGxvYWRlcnPqsIAg7J6I7Jy866m0IOyerOq3gCDsspjrpqxcbiAgICAgIGlmIChuZXN0ZWRMb2FkZXJzICYmIG5lc3RlZExvYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2FkZWRSb3dzID0gYXdhaXQgdGhpcy5wcm9jZXNzTG9hZGVycyhsb2FkZWRSb3dzLCBuZXN0ZWRMb2FkZXJzLCBkZWJ1Zyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YlJvd0dyb3VwcyA9IGdyb3VwKGxvYWRlZFJvd3MsIChyb3cpID0+IHJvdy5yZWZJZCk7XG5cbiAgICAgIHJvd3MgPSByb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIHJvd1thc10gPSAoc3ViUm93R3JvdXBzW3Jvd1tyZWZJZF1dID8/IFtdKS5tYXAoKHIpID0+IG9taXQociwgW1wicmVmSWRcIl0pKTtcbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXQg66CI7L2U65Oc66W8IOykkeyyqSDqsJ3ssrTroZwg67OA7ZmYXG4gICAqXG4gICAqIC0gYHVzZXJfX25hbWVgIOKGkiBgeyB1c2VyOiB7IG5hbWUgfSB9YFxuICAgKiAtIG51bGxhYmxlIHJlbGF0aW9u7J2YIOqyveyasCBpZCDtlYTrk5zqsIAgbnVsbOydtOuptCDqsJ3ssrQg7J6Q7LK066W8IG51bGzroZxcbiAgICovXG4gIGh5ZHJhdGU8VCBleHRlbmRzIFVua25vd25EQlJlY29yZD4ocm93czogVFtdKTogVFtdIHtcbiAgICByZXR1cm4gcm93cy5tYXAoKHJvdzogVCkgPT4ge1xuICAgICAgLy8gbnVsbGFibGUgcmVsYXRpb24g7LKY66asOiDqt7jro7nsnZggaWQg7ZWE65Oc6rCAIG51bGzsnbTrqbQg6rCd7LK0IOyghOyytOulvCBudWxs66GcXG4gICAgICBjb25zdCBuZXN0ZWRLZXlzID0gT2JqZWN0LmtleXMocm93KS5maWx0ZXIoKGtleSkgPT4ga2V5LmluY2x1ZGVzKFwiX19cIikpO1xuICAgICAgY29uc3QgZ3JvdXBzID0gT2JqZWN0Lmdyb3VwQnkobmVzdGVkS2V5cywgKGtleSkgPT4ga2V5LnNwbGl0KFwiX19cIilbMF0pO1xuXG4gICAgICAvLyBpZCDtlYTrk5zqsIAgbnVsbOyduCDqt7jro7kg7LC+6riwICjsmIg6IHBhcmVudF9faWTqsIAgbnVsbOydtOuptCBwYXJlbnQg6re466O5IOyghOyytOqwgCBudWxsKVxuICAgICAgY29uc3QgbnVsbEtleXMgPSBPYmplY3QuZW50cmllcyhncm91cHMpXG4gICAgICAgIC5maWx0ZXIoKFtncm91cEtleSwgZmllbGRzXSkgPT4ge1xuICAgICAgICAgIGlmICghZmllbGRzIHx8IGZpZWxkcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgIC8vIOq3uOujueydmCBpZCDtlYTrk5wg7LC+6riwICjsmIg6IFwicGFyZW50X19pZFwiKVxuICAgICAgICAgIGNvbnN0IGlkRmllbGQgPSBgJHtncm91cEtleX1fX2lkYDtcbiAgICAgICAgICBpZiAoaWRGaWVsZCBpbiByb3cpIHtcbiAgICAgICAgICAgIC8vIGlkIO2VhOuTnOqwgCBudWxs7J2066m0IOqwneyytCDsoITssrTqsIAgbnVsbFxuICAgICAgICAgICAgcmV0dXJuIHJvd1tpZEZpZWxkXSA9PT0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpZCDtlYTrk5zqsIAg7JeG7Jy866m0IOq4sOyhtCDroZzsp4E6IOuqqOuToCDtlYTrk5zqsIAgbnVsbOyduOyngCDtmZXsnbhcbiAgICAgICAgICByZXR1cm4gZmllbGRzLmV2ZXJ5KFxuICAgICAgICAgICAgKGZpZWxkKSA9PlxuICAgICAgICAgICAgICByb3dbZmllbGRdID09PSBudWxsIHx8IChBcnJheS5pc0FycmF5KHJvd1tmaWVsZF0pICYmIHJvd1tmaWVsZF0ubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAubWFwKChba2V5XSkgPT4ga2V5KTtcblxuICAgICAgY29uc3QgaHlkcmF0ZWQgPSBPYmplY3Qua2V5cyhyb3cpLnJlZHVjZSgociwgZmllbGQpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZC5pbmNsdWRlcyhcIl9fXCIpKSB7XG4gICAgICAgICAgLy8g7J2867CYIO2VhOuTnDog67Cw7Je0IOuCtCDqsJ3ssrTrqbQg7J6s6reAIGh5ZHJhdGVcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKSkge1xuICAgICAgICAgICAgcltmaWVsZF0gPSB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJbZmllbGRdID0gcm93W2ZpZWxkXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDspJHssqkg7ZWE65OcIOyymOumrDogdXNlcl9fbmFtZSDihpIgdXNlcltuYW1lXVxuICAgICAgICBjb25zdCBwYXJ0cyA9IGZpZWxkLnNwbGl0KFwiX19cIik7XG4gICAgICAgIGNvbnN0IG9ialBhdGggPVxuICAgICAgICAgIHBhcnRzWzBdICtcbiAgICAgICAgICBwYXJ0c1xuICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAubWFwKChwYXJ0KSA9PiBgWyR7cGFydH1dYClcbiAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuXG4gICAgICAgIHIgPSBzZXQoXG4gICAgICAgICAgcixcbiAgICAgICAgICBvYmpQYXRoLFxuICAgICAgICAgIHJvd1tmaWVsZF0gJiYgQXJyYXkuaXNBcnJheShyb3dbZmllbGRdKSAmJiBpc09iamVjdChyb3dbZmllbGRdWzBdKVxuICAgICAgICAgICAgPyB0aGlzLmh5ZHJhdGUocm93W2ZpZWxkXSlcbiAgICAgICAgICAgIDogcm93W2ZpZWxkXSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sIHt9IGFzIFVua25vd25EQlJlY29yZCk7XG5cbiAgICAgIC8vIG51bGwgcmVsYXRpb24g7LKY66asXG4gICAgICBudWxsS2V5cy5mb3JFYWNoKChudWxsS2V5KSA9PiB7XG4gICAgICAgIGh5ZHJhdGVkW251bGxLZXldID0gbnVsbDtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gaHlkcmF0ZWQ7XG4gICAgfSkgYXMgVFtdO1xuICB9XG59XG5cbi8qKlxuICogRW5oYW5jZXIg7YyM652866+47YSwIOyhsOqxtOu2gCDtg4DsnoVcbiAqIFJlcXVpcmVkRW5oYW5jZXJLZXlz6rCAIOyXhuycvOuptCBlbmhhbmNlcnMg7ISg7YOd7KCBLCDsnojsnLzrqbQg7ZWE7IiYXG4gKi9cbnR5cGUgRW5oYW5jZXJQYXJhbTxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0UXVlcmllcyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBQdXJpU3Vic2V0Rm4+LFxuPiA9IFtSZXF1aXJlZEVuaGFuY2VyS2V5czxUU3Vic2V0S2V5LCBUQ29tcHV0ZWRSZXN1bHRzLCBUU3Vic2V0TWFwcGluZz5dIGV4dGVuZHMgW25ldmVyXVxuICA/IHsgZW5oYW5jZXJzPzogRW5oYW5jZXJNYXA8VFN1YnNldEtleSwgVENvbXB1dGVkUmVzdWx0cywgVFN1YnNldE1hcHBpbmcsIFRTdWJzZXRRdWVyaWVzPiB9XG4gIDogeyBlbmhhbmNlcnM6IEVuaGFuY2VyTWFwPFRTdWJzZXRLZXksIFRDb21wdXRlZFJlc3VsdHMsIFRTdWJzZXRNYXBwaW5nLCBUU3Vic2V0UXVlcmllcz4gfTtcblxudHlwZSBSZXF1aXJlZEVuaGFuY2VyS2V5czxcbiAgVFN1YnNldEtleSBleHRlbmRzIHN0cmluZyxcbiAgVENvbXB1dGVkUmVzdWx0cyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuICBUU3Vic2V0TWFwcGluZyBleHRlbmRzIFJlY29yZDxUU3Vic2V0S2V5LCBhbnk+LFxuPiA9IHtcbiAgW0sgaW4gVFN1YnNldEtleV06IFRDb21wdXRlZFJlc3VsdHNbS10gZXh0ZW5kcyBUU3Vic2V0TWFwcGluZ1tLXSA/IG5ldmVyIDogSztcbn1bVFN1YnNldEtleV07XG5cbmV4cG9ydCBjb25zdCBCYXNlTW9kZWwgPSBuZXcgQmFzZU1vZGVsQ2xhc3MoKTtcbiJdLCJuYW1lcyI6WyJnZXRMb2dnZXIiLCJjbG9uZURlZXAiLCJncm91cCIsImlzT2JqZWN0Iiwib21pdCIsInNldCIsIm5vcm1hbGl6ZUZpbHRlclF1ZXJ5IiwidmFsaWRhdGVTb25hbXVGaWx0ZXJzIiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsImNvbnZlcnREb21haW5Ub0NhdGVnb3J5IiwiZ2V0Sm9pblRhYmxlcyIsImdldFRhYmxlTmFtZXNGcm9tV2hlcmUiLCJjaHVuayIsIkRCIiwiUHVyaSIsIlB1cmlXcmFwcGVyIiwiVXBzZXJ0QnVpbGRlciIsIkJhc2VNb2RlbENsYXNzIiwibG9nZ2VyIiwibW9kZWxOYW1lIiwibmFtZSIsInN1YnNldFF1ZXJpZXMiLCJsb2FkZXJRdWVyaWVzIiwiZ2V0REIiLCJ3aGljaCIsImdldFB1cmkiLCJ0cngiLCJnZXRUcmFuc2FjdGlvbkNvbnRleHQiLCJnZXRUcmFuc2FjdGlvbiIsImRiIiwiZGVzdHJveSIsImdldEluc2VydGVkSWRzIiwid2RiIiwicm93cyIsInRhYmxlTmFtZSIsInVucUtleUZpZWxkcyIsImNodW5rU2l6ZSIsInVucUtleXMiLCJ3aGVyZUluRmllbGQiLCJzZWxlY3RGaWVsZCIsImxlbmd0aCIsInJhdyIsImpvaW4iLCJtYXAiLCJyb3ciLCJmaWVsZCIsInJlc3VsdElkcyIsIml0ZW1zIiwiZGJSb3dzIiwic2VsZWN0Iiwid2hlcmVJbiIsImNvbmNhdCIsImRiUm93IiwicGFyc2VJbnQiLCJTdHJpbmciLCJpZCIsImdldFN1YnNldFF1ZXJpZXMiLCJzdWJzZXQiLCJFcnJvciIsInB1cmlXcmFwcGVyIiwicWIiLCJvblN1YnNldCIsIl9zdWJzZXQiLCJjcmVhdGVFbmhhbmNlcnMiLCJlbmhhbmNlcnMiLCJleGVjdXRlU3Vic2V0UXVlcnkiLCJwYXJhbXMiLCJxdWVyeVBhcmFtcyIsImRlYnVnIiwib3B0aW1pemVDb3VudFF1ZXJ5Iiwic29uYW11RmlsdGVyIiwibm9ybWFsaXplZEZpbHRlciIsImFwcGx5U29uYW11RmlsdGVycyIsIm51bSIsInBhZ2UiLCJ0b3RhbCIsImV4ZWN1dGVDb3VudFF1ZXJ5IiwicXVlcnlNb2RlIiwiY29tcHV0ZWRSb3dzIiwiZXhlY3V0ZUxpc3RRdWVyeSIsImVuaGFuY2VyIiwiZW5oYW5jZWRSb3dzIiwiUHJvbWlzZSIsImFsbCIsImVudGl0eSIsImdldCIsImludGVybmFsRmllbGRzIiwic3Vic2V0c0ludGVybmFsIiwib21pdEludGVybmFsRmllbGRzIiwiZmllbGRzIiwicmVzdWx0IiwiZGVsZXRlRmllbGQiLCJzcGxpdCIsImZpbHRlcnMiLCJwdXJpIiwiY29uZGl0aW9uIiwiT2JqZWN0IiwiZW50cmllcyIsInVuZGVmaW5lZCIsImZ1bGxGaWVsZCIsImdldEZ1bGxGaWVsZE5hbWUiLCJBcnJheSIsImlzQXJyYXkiLCJ3aGVyZSIsIm9wZXJhdG9yIiwidmFsdWUiLCJhcHBseU9wZXJhdG9yIiwid2hlcmVOb3RJbiIsIm1pbiIsIm1heCIsImNvbnNvbGUiLCJ3YXJuIiwib2JqIiwicGFydHMiLCJmb3JFYWNoIiwiaXRlbSIsImZpcnN0IiwicmVzdCIsIm5leHQiLCJjb3VudFB1cmkiLCJjbG9uZSIsImNsZWFyIiwiZGVmYXVsdCIsIlNxbFBhcnNlciIsInBhcnNlciIsIlBhcnNlciIsInBhcnNlZFF1ZXJ5IiwiYXN0aWZ5IiwidG9RdWVyeSIsImRhdGFiYXNlIiwiY29uZmlnIiwibGVmdEpvaW5UYWJsZXMiLCJ3aGVyZVRhYmxlcyIsInRhYmxlc1RvUmVtb3ZlIiwiZmlsdGVyIiwiaiIsImluY2x1ZGVzIiwidGFibGUiLCJjbGVhckpvaW4iLCJjb3VudFJlc3VsdCIsInJhd051bWJlciIsImxpbWl0ZWRRYiIsImxpbWl0Iiwib2Zmc2V0IiwidW5sb2FkZWRSb3dzIiwibG9hZGVycyIsInByb2Nlc3NMb2FkZXJzIiwiaHlkcmF0ZSIsInJlc29sdmVMb2FkZXIiLCJhcyIsInJlZklkIiwicmVzb2x2ZUxvYWRlclFiRm4iLCJuZXN0ZWRMb2FkZXJzIiwicmVzb2x2ZUxvYWRlclFiIiwibG9hZGVkUm93cyIsInN1YlJvd0dyb3VwcyIsInIiLCJuZXN0ZWRLZXlzIiwia2V5cyIsImtleSIsImdyb3VwcyIsImdyb3VwQnkiLCJudWxsS2V5cyIsImdyb3VwS2V5IiwiaWRGaWVsZCIsImV2ZXJ5IiwiaHlkcmF0ZWQiLCJyZWR1Y2UiLCJvYmpQYXRoIiwic2xpY2UiLCJwYXJ0IiwibnVsbEtleSIsIkJhc2VNb2RlbCJdLCJtYXBwaW5ncyI6IkFBQUEsa0dBQWtHLEdBQ2xHLFNBQVNBLFNBQVMsUUFBcUIsbUJBQW1CO0FBRTFELFNBQVNDLFNBQVMsRUFBRUMsS0FBSyxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRUMsR0FBRyxRQUFRLFVBQVU7QUFDaEUsU0FBMEJDLG9CQUFvQixFQUFFQyxxQkFBcUIsUUFBUSxjQUFLO0FBQ2xGLFNBQVNDLE1BQU0sUUFBUSxrQkFBUztBQUNoQyxTQUFTQyxhQUFhLFFBQVEsOEJBQTJCO0FBRXpELFNBQVNDLHVCQUF1QixRQUFRLHdCQUFxQjtBQUU3RCxTQUFTQyxhQUFhLEVBQUVDLHNCQUFzQixRQUFRLHlCQUFzQjtBQUM1RSxTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBR3ZDLFNBQVNDLEVBQUUsUUFBUSxVQUFPO0FBQzFCLFNBQVNDLElBQUksUUFBUSxZQUFTO0FBRzlCLFNBQVNDLFdBQVcsUUFBUSxvQkFBaUI7QUFDN0MsU0FBU0MsYUFBYSxRQUFRLHNCQUFtQjtBQUlqRDs7Ozs7OztDQU9DLEdBQ0QsT0FBTyxNQUFNQzs7OztJQU1RQyxPQUFlO0lBRWxDLFlBQ0UsQUFBZ0JDLFlBQW9CLElBQUksQ0FBQyxXQUFXLENBQUNDLElBQUksRUFDekQsQUFBVUMsYUFBOEIsRUFDeEMsQUFBVUMsYUFBOEIsQ0FDeEM7YUFIZ0JILFlBQUFBO2FBQ05FLGdCQUFBQTthQUNBQyxnQkFBQUE7UUFFVixJQUFJLENBQUNK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
|
package/dist/database/db.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ export declare class DBClass {
|
|
|
26
26
|
private getWorkerDB;
|
|
27
27
|
getDBConfig(which: DBPreset): Knex.Config;
|
|
28
28
|
destroy(): Promise<void>;
|
|
29
|
-
generateDBConfig(config:
|
|
29
|
+
generateDBConfig(config: SonamuConfig["database"]): SonamuDBConfig;
|
|
30
30
|
testTransaction: Knex.Transaction | null;
|
|
31
31
|
createTestTransaction(): Promise<Knex.Transaction>;
|
|
32
32
|
clearTestTransaction(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAU3D,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC;IAChC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,SAAS,CAAgC;IAE1C,kBAAkB,wCAA+C;IAEjE,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7D,qBAAqB,IAAI,kBAAkB;IAIlD,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAsC5B;;;OAGG;IACH,OAAO,CAAC,WAAW;IA+BnB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM;IA2BnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBvB,gBAAgB,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAU3D,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG;IAC3B,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC;IAChC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,SAAS,CAAgC;IAE1C,kBAAkB,wCAA+C;IAEjE,kBAAkB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI7D,qBAAqB,IAAI,kBAAkB;IAIlD,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAsC5B;;;OAGG;IACH,OAAO,CAAC,WAAW;IA+BnB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC,MAAM;IA2BnC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBvB,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,cAAc;IAsDlE,eAAe,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAQ;IACjD,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;IAKlD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CAIzC;AACD,eAAO,MAAM,EAAE,SAAgB,CAAC"}
|
package/dist/database/db.js
CHANGED
|
@@ -173,4 +173,4 @@ export class DBClass {
|
|
|
173
173
|
}
|
|
174
174
|
export const DB = new DBClass();
|
|
175
175
|
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9kYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IEFzeW5jTG9jYWxTdG9yYWdlIH0gZnJvbSBcImFzeW5jX2hvb2tzXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb25maWcsIFNvbmFtdUNvbmZpZyB9IGZyb20gXCIuLi9hcGkvY29uZmlnXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi9rbmV4XCI7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkNvbnRleHQgfSBmcm9tIFwiLi90cmFuc2FjdGlvbi1jb250ZXh0XCI7XG5cbi8qKlxuICog7Jes65+sIOyEpOyglSDqsJ3ssrTrpbwg7Iic7LCo7KCB7Jy866GcIGRlZXAgbWVyZ2Xtlanri4jri6QuXG4gKiB1bmRlZmluZWQvbnVsbOyduCDsnbjsnpDripQg66y07Iuc65Cp64uI64ukLlxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3M8VCBleHRlbmRzIG9iamVjdD4oLi4uY29uZmlnczogKFBhcnRpYWw8VD4gfCB1bmRlZmluZWQgfCBudWxsKVtdKTogVCB7XG4gIHJldHVybiBjb25maWdzLnJlZHVjZTxUPigoYWNjLCBjb25maWcpID0+IChjb25maWcgPyBhc3NpZ24oYWNjLCBjb25maWcgYXMgVCkgOiBhY2MpLCB7fSBhcyBUKTtcbn1cblxuZXhwb3J0IHR5cGUgREJQcmVzZXQgPSBcIndcIiB8IFwiclwiO1xuXG5leHBvcnQgdHlwZSBTb25hbXVEQkNvbmZpZyA9IHtcbiAgZGV2ZWxvcG1lbnRfbWFzdGVyOiBLbmV4LkNvbmZpZztcbiAgZGV2ZWxvcG1lbnRfc2xhdmU6IEtuZXguQ29uZmlnO1xuICBwcm9kdWN0aW9uX21hc3RlcjogS25leC5Db25maWc7XG4gIHByb2R1Y3Rpb25fc2xhdmU6IEtuZXguQ29uZmlnO1xuICBmaXh0dXJlOiBLbmV4LkNvbmZpZztcbiAgdGVzdDogS25leC5Db25maWc7XG59O1xuXG5leHBvcnQgY2xhc3MgREJDbGFzcyB7XG4gIHByaXZhdGUgd2RiPzogS25leDtcbiAgcHJpdmF0ZSByZGI/OiBLbmV4O1xuICBwcml2YXRlIHdvcmtlckRCczogTWFwPG51bWJlciwgS25leD4gPSBuZXcgTWFwKCk7XG5cbiAgcHVibGljIHRyYW5zYWN0aW9uU3RvcmFnZSA9IG5ldyBBc3luY0xvY2FsU3RvcmFnZTxUcmFuc2FjdGlvbkNvbnRleHQ+KCk7XG5cbiAgcHVibGljIHJ1bldpdGhUcmFuc2FjdGlvbjxUPihjYWxsYmFjazogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uU3RvcmFnZS5ydW4obmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpLCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25Db250ZXh0KCk6IFRyYW5zYWN0aW9uQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb25TdG9yYWdlLmdldFN0b3JlKCkgPz8gbmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpO1xuICB9XG5cbiAgZ2V0REIod2hpY2g6IERCUHJlc2V0KTogS25leCB7XG4gICAgY29uc3QgZGJDb25maWcgPSBTb25hbXUuZGJDb25maWc7XG5cbiAgICAvLyDthYzsiqTtirgg7Yq4656c7J6t7IWYIOqyqeumrFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIC8vIOuzkeugrCDthYzsiqTtirgg66qo65OcOiB3b3JrZXLrs4QgREIg7IKs7JqpXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU09OQU1VX1dPUktFUl9EQiA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V29ya2VyREIoZGJDb25maWcpO1xuICAgICAgfVxuXG4gICAgICAvLyDquLDsobQg64uo7J28IO2FjOyKpO2KuCDroZzsp4FcbiAgICAgIGlmICh0aGlzLnRlc3RUcmFuc2FjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgICB9IGVsc2UgaWYgKHRoaXMud2RiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndkYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2RiID0gY3JlYXRlS25leEluc3RhbmNlKHtcbiAgICAgICAgICAuLi5kYkNvbmZpZy50ZXN0LFxuICAgICAgICAgIC8vIOuLqOydvCDtkoBcbiAgICAgICAgICBwb29sOiB7XG4gICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLndkYjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZU5hbWUgPSB3aGljaCA9PT0gXCJ3XCIgPyBcIndkYlwiIDogXCJyZGJcIjtcblxuICAgIGlmICghdGhpc1tpbnN0YW5jZU5hbWVdKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldERCQ29uZmlnKHdoaWNoKTtcbiAgICAgIHRoaXNbaW5zdGFuY2VOYW1lXSA9IGNyZWF0ZUtuZXhJbnN0YW5jZShjb25maWcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2luc3RhbmNlTmFtZV07XG4gIH1cblxuICAvKipcbiAgICog67OR66CsIO2FjOyKpO2KuOyXkOyEnCB3b3JrZXLrs4QgREIg7J247Iqk7YS07Iqk66W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgICogVklURVNUX1BPT0xfSUQg7ZmY6rK967OA7IiY66GcIHdvcmtlcuulvCDsi53rs4TtlZjsl6wg7ZW064u5IERC7JeQIOyXsOqysO2VqeuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgZ2V0V29ya2VyREIoZGJDb25maWc6IFNvbmFtdURCQ29uZmlnKTogS25leCB7XG4gICAgLy8g7Yq4656c7J6t7IWY7J20IOyeiOycvOuptCDtirjrnpzsnq3shZgg67CY7ZmYXG4gICAgaWYgKHRoaXMudGVzdFRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgY29uc3Qgd29ya2VySWQgPSBwYXJzZUludChwcm9jZXNzLmVudi5WSVRFU1RfUE9PTF9JRCA/PyBcIjFcIiwgMTApO1xuXG4gICAgLy8gV29ya2Vy67OEIERCIOyduOyKpO2EtOyKpCDsupDsi7FcbiAgICBpZiAoIXRoaXMud29ya2VyREJzLmhhcyh3b3JrZXJJZCkpIHtcbiAgICAgIGNvbnN0IGJhc2VUZXN0Q29uZmlnID0gZGJDb25maWcudGVzdDtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBiYXNlVGVzdENvbmZpZy5jb25uZWN0aW9uIGFzIHsgZGF0YWJhc2U6IHN0cmluZyB9O1xuICAgICAgY29uc3Qgd29ya2VyRGJOYW1lID0gYCR7Y29ubmVjdGlvbi5kYXRhYmFzZX1fJHt3b3JrZXJJZH1gO1xuXG4gICAgICBjb25zdCB3b3JrZXJDb25maWcgPSB7XG4gICAgICAgIC4uLmJhc2VUZXN0Q29uZmlnLFxuICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgLi4uY29ubmVjdGlvbixcbiAgICAgICAgICBkYXRhYmFzZTogd29ya2VyRGJOYW1lLFxuICAgICAgICB9LFxuICAgICAgICBwb29sOiB7IG1pbjogMSwgbWF4OiAxIH0sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLndvcmtlckRCcy5zZXQod29ya2VySWQsIGNyZWF0ZUtuZXhJbnN0YW5jZSh3b3JrZXJDb25maWcpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IHRoaXMud29ya2VyREJzLmdldCh3b3JrZXJJZCk7XG4gICAgYXNzZXJ0KGRiLCBgV29ya2VyIERCICR7d29ya2VySWR9IG5vdCBmb3VuZGApO1xuICAgIHJldHVybiBkYjtcbiAgfVxuXG4gIGdldERCQ29uZmlnKHdoaWNoOiBEQlByZXNldCk6IEtuZXguQ29uZmlnIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kYkNvbmZpZy50ZXN0LFxuICAgICAgICAvLyDri6jsnbwg7ZKAXG4gICAgICAgIHBvb2w6IHtcbiAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgbWF4OiAxLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgc3dpdGNoIChwcm9jZXNzLmVudi5OT0RFX0VOViA/PyBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgIGNhc2UgXCJkZXZlbG9wbWVudFwiOlxuICAgICAgY2FzZSBcInN0YWdpbmdcIjpcbiAgICAgICAgcmV0dXJuIHdoaWNoID09PSBcIndcIlxuICAgICAgICAgID8gZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyXG4gICAgICAgICAgOiAoZGJDb25maWcuZGV2ZWxvcG1lbnRfc2xhdmUgPz8gZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyKTtcbiAgICAgIGNhc2UgXCJwcm9kdWN0aW9uXCI6XG4gICAgICAgIHJldHVybiB3aGljaCA9PT0gXCJ3XCJcbiAgICAgICAgICA/IGRiQ29uZmlnLnByb2R1Y3Rpb25fbWFzdGVyXG4gICAgICAgICAgOiAoZGJDb25maWcucHJvZHVjdGlvbl9zbGF2ZSA/PyBkYkNvbmZpZy5wcm9kdWN0aW9uX21hc3Rlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYO2YhOyerCBFTlYgJHtwcm9jZXNzLmVudi5OT0RFX0VOVn3sl5DripQg7ISk7KCVIOqwgOuKpe2VnCBEQuyEpOygleydtCDsl4bsirXri4jri6QuYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53ZGIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy53ZGIuZGVzdHJveSgpO1xuICAgICAgdGhpcy53ZGIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnJkYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLnJkYi5kZXN0cm95KCk7XG4gICAgICB0aGlzLnJkYiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8g67OR66CsIO2FjOyKpO2KuOyaqSB3b3JrZXIgRELrk6Trj4Qg7KCV66asXG4gICAgZm9yIChjb25zdCBkYiBvZiB0aGlzLndvcmtlckRCcy52YWx1ZXMoKSkge1xuICAgICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLndvcmtlckRCcy5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlREJDb25maWcoY29uZmlnOiBOb25OdWxsYWJsZTxTb25hbXVDb25maWdbXCJkYXRhYmFzZVwiXT4pOiBTb25hbXVEQkNvbmZpZyB7XG4gICAgY29uc3QgZGVmYXVsdEtuZXhDb25maWc6IFBhcnRpYWw8RGF0YWJhc2VDb25maWc+ID0gYXNzaWduKFxuICAgICAge1xuICAgICAgICBjbGllbnQ6IFwicG9zdGdyZXNxbFwiLFxuICAgICAgICBwb29sOiB7XG4gICAgICAgICAgbWluOiAxLFxuICAgICAgICAgIG1heDogNSxcbiAgICAgICAgfSxcbiAgICAgICAgbWlncmF0aW9uczoge1xuICAgICAgICAgIGRpcmVjdG9yeTogXCIuL3NyYy9taWdyYXRpb25zXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3Rpb246IHtcbiAgICAgICAgICBkYXRhYmFzZTogY29uZmlnLm5hbWUsXG4gICAgICAgICAgLi4uY29uZmlnLmRlZmF1bHRPcHRpb25zPy5jb25uZWN0aW9uLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNvbmZpZy5kZWZhdWx0T3B0aW9ucyxcbiAgICApO1xuXG4gICAgLy8gYmlvbWUtaWdub3JlIGZvcm1hdDog7ISk7KCVIOq1rOyhsCDqsIDrj4XshLHsnYQg7JyE7ZW0IOyXrOufrCDspITroZwg7Jyg7KeAXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIOyXrOq4sOyXkCDrgpjsl7TtlZwg7Iic7ISc64yA66GcIFNvbmFtdSBVSeydmCBEQiBNaWdyYXRpb24g7YOt7JeQIO2RnOyLnOuQqeuLiOuLpC5cbiAgICAgIHRlc3Q6IG1lcmdlQ29uZmlncyhcbiAgICAgICAgZGVmYXVsdEtuZXhDb25maWcsIFxuICAgICAgICB7IGNvbm5lY3Rpb246IHsgZGF0YWJhc2U6IGAke2NvbmZpZy5uYW1lfV90ZXN0YCB9IH0sXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LnRlc3RcbiAgICAgICksXG4gICAgICBmaXh0dXJlOiBtZXJnZUNvbmZpZ3MoXG4gICAgICAgIGRlZmF1bHRLbmV4Q29uZmlnLCBcbiAgICAgICAgeyBjb25uZWN0aW9uOiB7IGRhdGFiYXNlOiBgJHtjb25maWcubmFtZX1fZml4dHVyZWAgfSB9LFxuICAgICAgICBjb25maWcuZW52aXJvbm1lbnRzPy5maXh0dXJlLFxuICAgICAgKSxcbiAgICAgIGRldmVsb3BtZW50X21hc3RlcjogbWVyZ2VDb25maWdzKFxuICAgICAgICBkZWZhdWx0S25leENvbmZpZywgXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LmRldmVsb3BtZW50XG4gICAgICApLFxuICAgICAgZGV2ZWxvcG1lbnRfc2xhdmU6IG1lcmdlQ29uZmlncyhcbiAgICAgICAgZGVmYXVsdEtuZXhDb25maWcsXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LmRldmVsb3BtZW50LFxuICAgICAgICBjb25maWcuZW52aXJvbm1lbnRzPy5kZXZlbG9wbWVudF9zbGF2ZSxcbiAgICAgICksXG4gICAgICBwcm9kdWN0aW9uX21hc3RlcjogbWVyZ2VDb25maWdzKFxuICAgICAgICBkZWZhdWx0S25leENvbmZpZywgXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LnByb2R1Y3Rpb25cbiAgICAgICksXG4gICAgICBwcm9kdWN0aW9uX3NsYXZlOiBtZXJnZUNvbmZpZ3MoXG4gICAgICAgIGRlZmF1bHRLbmV4Q29uZmlnLFxuICAgICAgICBjb25maWcuZW52aXJvbm1lbnRzPy5wcm9kdWN0aW9uLFxuICAgICAgICBjb25maWcuZW52aXJvbm1lbnRzPy5wcm9kdWN0aW9uX3NsYXZlLFxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVGVzdCDtmZjqsr3sl5DshJwg7Yq4656c7J6t7IWYIOyCrOyaqVxuICBwdWJsaWMgdGVzdFRyYW5zYWN0aW9uOiBLbmV4LlRyYW5zYWN0aW9uIHwgbnVsbCA9IG51bGw7XG4gIGFzeW5jIGNyZWF0ZVRlc3RUcmFuc2FjdGlvbigpOiBQcm9taXNlPEtuZXguVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBkYiA9IHRoaXMuZ2V0REIoXCJ3XCIpO1xuICAgIHRoaXMudGVzdFRyYW5zYWN0aW9uID0gYXdhaXQgZGIudHJhbnNhY3Rpb24oKTtcbiAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gIH1cbiAgYXN5bmMgY2xlYXJUZXN0VHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy50ZXN0VHJhbnNhY3Rpb24/LnJvbGxiYWNrKCk7XG4gICAgdGhpcy50ZXN0VHJhbnNhY3Rpb24gPSBudWxsO1xuICB9XG4gIGFzeW5jIGdldFRlc3RDb25uZWN0aW9uKCk6IFByb21pc2U8S25leD4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcIndcIik7XG4gICAgcmV0dXJuIGRiO1xuICB9XG59XG5leHBvcnQgY29uc3QgREIgPSBuZXcgREJDbGFzcygpO1xuIl0sIm5hbWVzIjpbImFzc2VydCIsIkFzeW5jTG9jYWxTdG9yYWdlIiwiYXNzaWduIiwiU29uYW11IiwiY3JlYXRlS25leEluc3RhbmNlIiwiVHJhbnNhY3Rpb25Db250ZXh0IiwibWVyZ2VDb25maWdzIiwiY29uZmlncyIsInJlZHVjZSIsImFjYyIsImNvbmZpZyIsIkRCQ2xhc3MiLCJ3ZGIiLCJyZGIiLCJ3b3JrZXJEQnMiLCJNYXAiLCJ0cmFuc2FjdGlvblN0b3JhZ2UiLCJydW5XaXRoVHJhbnNhY3Rpb24iLCJjYWxsYmFjayIsInJ1biIsImdldFRyYW5zYWN0aW9uQ29udGV4dCIsImdldFN0b3JlIiwiZ2V0REIiLCJ3aGljaCIsImRiQ29uZmlnIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiU09OQU1VX1dPUktFUl9EQiIsImdldFdvcmtlckRCIiwidGVzdFRyYW5zYWN0aW9uIiwidGVzdCIsInBvb2wiLCJtaW4iLCJtYXgiLCJpbnN0YW5jZU5hbWUiLCJnZXREQkNvbmZpZyIsIndvcmtlcklkIiwicGFyc2VJbnQiLCJWSVRFU1RfUE9PTF9JRCIsImhhcyIsImJhc2VUZXN0Q29uZmlnIiwiY29ubmVjdGlvbiIsIndvcmtlckRiTmFtZSIsImRhdGFiYXNlIiwid29ya2VyQ29uZmlnIiwic2V0IiwiZGIiLCJnZXQiLCJkZXZlbG9wbWVudF9tYXN0ZXIiLCJkZXZlbG9wbWVudF9zbGF2ZSIsInByb2R1Y3Rpb25fbWFzdGVyIiwicHJvZHVjdGlvbl9zbGF2ZSIsIkVycm9yIiwiZGVzdHJveSIsInVuZGVmaW5lZCIsInZhbHVlcyIsImNsZWFyIiwiZ2VuZXJhdGVEQkNvbmZpZyIsImRlZmF1bHRLbmV4Q29uZmlnIiwiY2xpZW50IiwibWlncmF0aW9ucyIsImRpcmVjdG9yeSIsIm5hbWUiLCJkZWZhdWx0T3B0aW9ucyIsImVudmlyb25tZW50cyIsImZpeHR1cmUiLCJkZXZlbG9wbWVudCIsInByb2R1Y3Rpb24iLCJjcmVhdGVUZXN0VHJhbnNhY3Rpb24iLCJ0cmFuc2FjdGlvbiIsImNsZWFyVGVzdFRyYW5zYWN0aW9uIiwicm9sbGJhY2siLCJnZXRUZXN0Q29ubmVjdGlvbiIsIkRCIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFDNUIsU0FBU0Ms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
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9kYi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IEFzeW5jTG9jYWxTdG9yYWdlIH0gZnJvbSBcImFzeW5jX2hvb2tzXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgYXNzaWduIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb25maWcsIFNvbmFtdUNvbmZpZyB9IGZyb20gXCIuLi9hcGkvY29uZmlnXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi9rbmV4XCI7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkNvbnRleHQgfSBmcm9tIFwiLi90cmFuc2FjdGlvbi1jb250ZXh0XCI7XG5cbi8qKlxuICog7Jes65+sIOyEpOyglSDqsJ3ssrTrpbwg7Iic7LCo7KCB7Jy866GcIGRlZXAgbWVyZ2Xtlanri4jri6QuXG4gKiB1bmRlZmluZWQvbnVsbOyduCDsnbjsnpDripQg66y07Iuc65Cp64uI64ukLlxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3M8VCBleHRlbmRzIG9iamVjdD4oLi4uY29uZmlnczogKFBhcnRpYWw8VD4gfCB1bmRlZmluZWQgfCBudWxsKVtdKTogVCB7XG4gIHJldHVybiBjb25maWdzLnJlZHVjZTxUPigoYWNjLCBjb25maWcpID0+IChjb25maWcgPyBhc3NpZ24oYWNjLCBjb25maWcgYXMgVCkgOiBhY2MpLCB7fSBhcyBUKTtcbn1cblxuZXhwb3J0IHR5cGUgREJQcmVzZXQgPSBcIndcIiB8IFwiclwiO1xuXG5leHBvcnQgdHlwZSBTb25hbXVEQkNvbmZpZyA9IHtcbiAgZGV2ZWxvcG1lbnRfbWFzdGVyOiBLbmV4LkNvbmZpZztcbiAgZGV2ZWxvcG1lbnRfc2xhdmU6IEtuZXguQ29uZmlnO1xuICBwcm9kdWN0aW9uX21hc3RlcjogS25leC5Db25maWc7XG4gIHByb2R1Y3Rpb25fc2xhdmU6IEtuZXguQ29uZmlnO1xuICBmaXh0dXJlOiBLbmV4LkNvbmZpZztcbiAgdGVzdDogS25leC5Db25maWc7XG59O1xuXG5leHBvcnQgY2xhc3MgREJDbGFzcyB7XG4gIHByaXZhdGUgd2RiPzogS25leDtcbiAgcHJpdmF0ZSByZGI/OiBLbmV4O1xuICBwcml2YXRlIHdvcmtlckRCczogTWFwPG51bWJlciwgS25leD4gPSBuZXcgTWFwKCk7XG5cbiAgcHVibGljIHRyYW5zYWN0aW9uU3RvcmFnZSA9IG5ldyBBc3luY0xvY2FsU3RvcmFnZTxUcmFuc2FjdGlvbkNvbnRleHQ+KCk7XG5cbiAgcHVibGljIHJ1bldpdGhUcmFuc2FjdGlvbjxUPihjYWxsYmFjazogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uU3RvcmFnZS5ydW4obmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpLCBjYWxsYmFjayk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25Db250ZXh0KCk6IFRyYW5zYWN0aW9uQ29udGV4dCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb25TdG9yYWdlLmdldFN0b3JlKCkgPz8gbmV3IFRyYW5zYWN0aW9uQ29udGV4dCgpO1xuICB9XG5cbiAgZ2V0REIod2hpY2g6IERCUHJlc2V0KTogS25leCB7XG4gICAgY29uc3QgZGJDb25maWcgPSBTb25hbXUuZGJDb25maWc7XG5cbiAgICAvLyDthYzsiqTtirgg7Yq4656c7J6t7IWYIOqyqeumrFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJ0ZXN0XCIpIHtcbiAgICAgIC8vIOuzkeugrCDthYzsiqTtirgg66qo65OcOiB3b3JrZXLrs4QgREIg7IKs7JqpXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU09OQU1VX1dPUktFUl9EQiA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V29ya2VyREIoZGJDb25maWcpO1xuICAgICAgfVxuXG4gICAgICAvLyDquLDsobQg64uo7J28IO2FjOyKpO2KuCDroZzsp4FcbiAgICAgIGlmICh0aGlzLnRlc3RUcmFuc2FjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgICB9IGVsc2UgaWYgKHRoaXMud2RiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndkYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2RiID0gY3JlYXRlS25leEluc3RhbmNlKHtcbiAgICAgICAgICAuLi5kYkNvbmZpZy50ZXN0LFxuICAgICAgICAgIC8vIOuLqOydvCDtkoBcbiAgICAgICAgICBwb29sOiB7XG4gICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLndkYjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZU5hbWUgPSB3aGljaCA9PT0gXCJ3XCIgPyBcIndkYlwiIDogXCJyZGJcIjtcblxuICAgIGlmICghdGhpc1tpbnN0YW5jZU5hbWVdKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldERCQ29uZmlnKHdoaWNoKTtcbiAgICAgIHRoaXNbaW5zdGFuY2VOYW1lXSA9IGNyZWF0ZUtuZXhJbnN0YW5jZShjb25maWcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW2luc3RhbmNlTmFtZV07XG4gIH1cblxuICAvKipcbiAgICog67OR66CsIO2FjOyKpO2KuOyXkOyEnCB3b3JrZXLrs4QgREIg7J247Iqk7YS07Iqk66W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgICogVklURVNUX1BPT0xfSUQg7ZmY6rK967OA7IiY66GcIHdvcmtlcuulvCDsi53rs4TtlZjsl6wg7ZW064u5IERC7JeQIOyXsOqysO2VqeuLiOuLpC5cbiAgICovXG4gIHByaXZhdGUgZ2V0V29ya2VyREIoZGJDb25maWc6IFNvbmFtdURCQ29uZmlnKTogS25leCB7XG4gICAgLy8g7Yq4656c7J6t7IWY7J20IOyeiOycvOuptCDtirjrnpzsnq3shZgg67CY7ZmYXG4gICAgaWYgKHRoaXMudGVzdFRyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXN0VHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgY29uc3Qgd29ya2VySWQgPSBwYXJzZUludChwcm9jZXNzLmVudi5WSVRFU1RfUE9PTF9JRCA/PyBcIjFcIiwgMTApO1xuXG4gICAgLy8gV29ya2Vy67OEIERCIOyduOyKpO2EtOyKpCDsupDsi7FcbiAgICBpZiAoIXRoaXMud29ya2VyREJzLmhhcyh3b3JrZXJJZCkpIHtcbiAgICAgIGNvbnN0IGJhc2VUZXN0Q29uZmlnID0gZGJDb25maWcudGVzdDtcbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBiYXNlVGVzdENvbmZpZy5jb25uZWN0aW9uIGFzIHsgZGF0YWJhc2U6IHN0cmluZyB9O1xuICAgICAgY29uc3Qgd29ya2VyRGJOYW1lID0gYCR7Y29ubmVjdGlvbi5kYXRhYmFzZX1fJHt3b3JrZXJJZH1gO1xuXG4gICAgICBjb25zdCB3b3JrZXJDb25maWcgPSB7XG4gICAgICAgIC4uLmJhc2VUZXN0Q29uZmlnLFxuICAgICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgICAgLi4uY29ubmVjdGlvbixcbiAgICAgICAgICBkYXRhYmFzZTogd29ya2VyRGJOYW1lLFxuICAgICAgICB9LFxuICAgICAgICBwb29sOiB7IG1pbjogMSwgbWF4OiAxIH0sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLndvcmtlckRCcy5zZXQod29ya2VySWQsIGNyZWF0ZUtuZXhJbnN0YW5jZSh3b3JrZXJDb25maWcpKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYiA9IHRoaXMud29ya2VyREJzLmdldCh3b3JrZXJJZCk7XG4gICAgYXNzZXJ0KGRiLCBgV29ya2VyIERCICR7d29ya2VySWR9IG5vdCBmb3VuZGApO1xuICAgIHJldHVybiBkYjtcbiAgfVxuXG4gIGdldERCQ29uZmlnKHdoaWNoOiBEQlByZXNldCk6IEtuZXguQ29uZmlnIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5kYkNvbmZpZy50ZXN0LFxuICAgICAgICAvLyDri6jsnbwg7ZKAXG4gICAgICAgIHBvb2w6IHtcbiAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgbWF4OiAxLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gICAgc3dpdGNoIChwcm9jZXNzLmVudi5OT0RFX0VOViA/PyBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgIGNhc2UgXCJkZXZlbG9wbWVudFwiOlxuICAgICAgY2FzZSBcInN0YWdpbmdcIjpcbiAgICAgICAgcmV0dXJuIHdoaWNoID09PSBcIndcIlxuICAgICAgICAgID8gZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyXG4gICAgICAgICAgOiAoZGJDb25maWcuZGV2ZWxvcG1lbnRfc2xhdmUgPz8gZGJDb25maWcuZGV2ZWxvcG1lbnRfbWFzdGVyKTtcbiAgICAgIGNhc2UgXCJwcm9kdWN0aW9uXCI6XG4gICAgICAgIHJldHVybiB3aGljaCA9PT0gXCJ3XCJcbiAgICAgICAgICA/IGRiQ29uZmlnLnByb2R1Y3Rpb25fbWFzdGVyXG4gICAgICAgICAgOiAoZGJDb25maWcucHJvZHVjdGlvbl9zbGF2ZSA/PyBkYkNvbmZpZy5wcm9kdWN0aW9uX21hc3Rlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYO2YhOyerCBFTlYgJHtwcm9jZXNzLmVudi5OT0RFX0VOVn3sl5DripQg7ISk7KCVIOqwgOuKpe2VnCBEQuyEpOygleydtCDsl4bsirXri4jri6QuYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53ZGIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy53ZGIuZGVzdHJveSgpO1xuICAgICAgdGhpcy53ZGIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnJkYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLnJkYi5kZXN0cm95KCk7XG4gICAgICB0aGlzLnJkYiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8g67OR66CsIO2FjOyKpO2KuOyaqSB3b3JrZXIgRELrk6Trj4Qg7KCV66asXG4gICAgZm9yIChjb25zdCBkYiBvZiB0aGlzLndvcmtlckRCcy52YWx1ZXMoKSkge1xuICAgICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICAgIH1cbiAgICB0aGlzLndvcmtlckRCcy5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlREJDb25maWcoY29uZmlnOiBTb25hbXVDb25maWdbXCJkYXRhYmFzZVwiXSk6IFNvbmFtdURCQ29uZmlnIHtcbiAgICBjb25zdCBkZWZhdWx0S25leENvbmZpZzogUGFydGlhbDxEYXRhYmFzZUNvbmZpZz4gPSBhc3NpZ24oXG4gICAgICB7XG4gICAgICAgIGNsaWVudDogXCJwb3N0Z3Jlc3FsXCIsXG4gICAgICAgIHBvb2w6IHtcbiAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgbWF4OiA1LFxuICAgICAgICB9LFxuICAgICAgICBtaWdyYXRpb25zOiB7XG4gICAgICAgICAgZGlyZWN0b3J5OiBcIi4vc3JjL21pZ3JhdGlvbnNcIixcbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAgIGRhdGFiYXNlOiBjb25maWcubmFtZSxcbiAgICAgICAgICAuLi5jb25maWcuZGVmYXVsdE9wdGlvbnM/LmNvbm5lY3Rpb24sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29uZmlnLmRlZmF1bHRPcHRpb25zLFxuICAgICk7XG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgZm9ybWF0OiDshKTsoJUg6rWs7KGwIOqwgOuPheyEseydhCDsnITtlbQg7Jes65+sIOykhOuhnCDsnKDsp4BcbiAgICByZXR1cm4ge1xuICAgICAgLy8g7Jes6riw7JeQIOuCmOyXtO2VnCDsiJzshJzrjIDroZwgU29uYW11IFVJ7J2YIERCIE1pZ3JhdGlvbiDtg63sl5Ag7ZGc7Iuc65Cp64uI64ukLlxuICAgICAgdGVzdDogbWVyZ2VDb25maWdzKFxuICAgICAgICBkZWZhdWx0S25leENvbmZpZywgXG4gICAgICAgIHsgY29ubmVjdGlvbjogeyBkYXRhYmFzZTogYCR7Y29uZmlnLm5hbWV9X3Rlc3RgIH0gfSxcbiAgICAgICAgY29uZmlnLmVudmlyb25tZW50cz8udGVzdFxuICAgICAgKSxcbiAgICAgIGZpeHR1cmU6IG1lcmdlQ29uZmlncyhcbiAgICAgICAgZGVmYXVsdEtuZXhDb25maWcsIFxuICAgICAgICB7IGNvbm5lY3Rpb246IHsgZGF0YWJhc2U6IGAke2NvbmZpZy5uYW1lfV9maXh0dXJlYCB9IH0sXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LmZpeHR1cmUsXG4gICAgICApLFxuICAgICAgZGV2ZWxvcG1lbnRfbWFzdGVyOiBtZXJnZUNvbmZpZ3MoXG4gICAgICAgIGRlZmF1bHRLbmV4Q29uZmlnLCBcbiAgICAgICAgY29uZmlnLmVudmlyb25tZW50cz8uZGV2ZWxvcG1lbnRcbiAgICAgICksXG4gICAgICBkZXZlbG9wbWVudF9zbGF2ZTogbWVyZ2VDb25maWdzKFxuICAgICAgICBkZWZhdWx0S25leENvbmZpZyxcbiAgICAgICAgY29uZmlnLmVudmlyb25tZW50cz8uZGV2ZWxvcG1lbnQsXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LmRldmVsb3BtZW50X3NsYXZlLFxuICAgICAgKSxcbiAgICAgIHByb2R1Y3Rpb25fbWFzdGVyOiBtZXJnZUNvbmZpZ3MoXG4gICAgICAgIGRlZmF1bHRLbmV4Q29uZmlnLCBcbiAgICAgICAgY29uZmlnLmVudmlyb25tZW50cz8ucHJvZHVjdGlvblxuICAgICAgKSxcbiAgICAgIHByb2R1Y3Rpb25fc2xhdmU6IG1lcmdlQ29uZmlncyhcbiAgICAgICAgZGVmYXVsdEtuZXhDb25maWcsXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LnByb2R1Y3Rpb24sXG4gICAgICAgIGNvbmZpZy5lbnZpcm9ubWVudHM/LnByb2R1Y3Rpb25fc2xhdmUsXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICAvLyBUZXN0IO2ZmOqyveyXkOyEnCDtirjrnpzsnq3shZgg7IKs7JqpXG4gIHB1YmxpYyB0ZXN0VHJhbnNhY3Rpb246IEtuZXguVHJhbnNhY3Rpb24gfCBudWxsID0gbnVsbDtcbiAgYXN5bmMgY3JlYXRlVGVzdFRyYW5zYWN0aW9uKCk6IFByb21pc2U8S25leC5UcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGRiID0gdGhpcy5nZXREQihcIndcIik7XG4gICAgdGhpcy50ZXN0VHJhbnNhY3Rpb24gPSBhd2FpdCBkYi50cmFuc2FjdGlvbigpO1xuICAgIHJldHVybiB0aGlzLnRlc3RUcmFuc2FjdGlvbjtcbiAgfVxuICBhc3luYyBjbGVhclRlc3RUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnRlc3RUcmFuc2FjdGlvbj8ucm9sbGJhY2soKTtcbiAgICB0aGlzLnRlc3RUcmFuc2FjdGlvbiA9IG51bGw7XG4gIH1cbiAgYXN5bmMgZ2V0VGVzdENvbm5lY3Rpb24oKTogUHJvbWlzZTxLbmV4PiB7XG4gICAgY29uc3QgZGIgPSB0aGlzLmdldERCKFwid1wiKTtcbiAgICByZXR1cm4gZGI7XG4gIH1cbn1cbmV4cG9ydCBjb25zdCBEQiA9IG5ldyBEQkNsYXNzKCk7XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiQXN5bmNMb2NhbFN0b3JhZ2UiLCJhc3NpZ24iLCJTb25hbXUiLCJjcmVhdGVLbmV4SW5zdGFuY2UiLCJUcmFuc2FjdGlvbkNvbnRleHQiLCJtZXJnZUNvbmZpZ3MiLCJjb25maWdzIiwicmVkdWNlIiwiYWNjIiwiY29uZmlnIiwiREJDbGFzcyIsIndkYiIsInJkYiIsIndvcmtlckRCcyIsIk1hcCIsInRyYW5zYWN0aW9uU3RvcmFnZSIsInJ1bldpdGhUcmFuc2FjdGlvbiIsImNhbGxiYWNrIiwicnVuIiwiZ2V0VHJhbnNhY3Rpb25Db250ZXh0IiwiZ2V0U3RvcmUiLCJnZXREQiIsIndoaWNoIiwiZGJDb25maWciLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJTT05BTVVfV09SS0VSX0RCIiwiZ2V0V29ya2VyREIiLCJ0ZXN0VHJhbnNhY3Rpb24iLCJ0ZXN0IiwicG9vbCIsIm1pbiIsIm1heCIsImluc3RhbmNlTmFtZSIsImdldERCQ29uZmlnIiwid29ya2VySWQiLCJwYXJzZUludCIsIlZJVEVTVF9QT09MX0lEIiwiaGFzIiwiYmFzZVRlc3RDb25maWciLCJjb25uZWN0aW9uIiwid29ya2VyRGJOYW1lIiwiZGF0YWJhc2UiLCJ3b3JrZXJDb25maWciLCJzZXQiLCJkYiIsImdldCIsImRldmVsb3BtZW50X21hc3RlciIsImRldmVsb3BtZW50X3NsYXZlIiwicHJvZHVjdGlvbl9tYXN0ZXIiLCJwcm9kdWN0aW9uX3NsYXZlIiwiRXJyb3IiLCJkZXN0cm95IiwidW5kZWZpbmVkIiwidmFsdWVzIiwiY2xlYXIiLCJnZW5lcmF0ZURCQ29uZmlnIiwiZGVmYXVsdEtuZXhDb25maWciLCJjbGllbnQiLCJtaWdyYXRpb25zIiwiZGlyZWN0b3J5IiwibmFtZSIsImRlZmF1bHRPcHRpb25zIiwiZW52aXJvbm1lbnRzIiwiZml4dHVyZSIsImRldmVsb3BtZW50IiwicHJvZHVjdGlvbiIsImNyZWF0ZVRlc3RUcmFuc2FjdGlvbiIsInRyYW5zYWN0aW9uIiwiY2xlYXJUZXN0VHJhbnNhY3Rpb24iLCJyb2xsYmFjayIsImdldFRlc3RDb25uZWN0aW9uIiwiREIiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUM1QixTQUFTQyxpQkFBaUIsUUFBUSxj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
|