sonamu 0.8.14 → 0.8.16
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knex.d.ts","sourceRoot":"","sources":["../../src/database/knex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"knex.d.ts","sourceRoot":"","sources":["../../src/database/knex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAoD5D"}
|
package/dist/database/knex.js
CHANGED
|
@@ -1,56 +1,10 @@
|
|
|
1
1
|
import knex from "knex";
|
|
2
|
-
/**
|
|
3
|
-
* connection 객체를 libpq 연결 문자열로 변환합니다.
|
|
4
|
-
* pg-native는 libpq를 사용하므로, keepalive 등 libpq 파라미터를
|
|
5
|
-
* 연결 문자열로 전달해야 합니다.
|
|
6
|
-
*/ function buildLibpqConnectionString(conn) {
|
|
7
|
-
const mapping = [
|
|
8
|
-
[
|
|
9
|
-
"host",
|
|
10
|
-
"host"
|
|
11
|
-
],
|
|
12
|
-
[
|
|
13
|
-
"port",
|
|
14
|
-
"port"
|
|
15
|
-
],
|
|
16
|
-
[
|
|
17
|
-
"user",
|
|
18
|
-
"user"
|
|
19
|
-
],
|
|
20
|
-
[
|
|
21
|
-
"password",
|
|
22
|
-
"password"
|
|
23
|
-
],
|
|
24
|
-
[
|
|
25
|
-
"database",
|
|
26
|
-
"dbname"
|
|
27
|
-
]
|
|
28
|
-
];
|
|
29
|
-
const parts = [];
|
|
30
|
-
for (const [jsKey, pqKey] of mapping){
|
|
31
|
-
if (conn[jsKey] != null) {
|
|
32
|
-
parts.push(`${pqKey}='${String(conn[jsKey]).replace(/'/g, "\\'")}'`);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
// TCP keepAlive (libpq parameters)
|
|
36
|
-
parts.push("keepalives=1");
|
|
37
|
-
parts.push("keepalives_idle=10");
|
|
38
|
-
parts.push("keepalives_interval=10");
|
|
39
|
-
parts.push("keepalives_count=5");
|
|
40
|
-
return parts.join(" ");
|
|
41
|
-
}
|
|
42
2
|
export function createKnexInstance(config) {
|
|
43
3
|
if (config.connection && typeof config.connection === "object") {
|
|
44
4
|
const conn = config.connection;
|
|
45
|
-
if (
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
} else {
|
|
49
|
-
// pg: keepAlive 설정 (Node.js TCP socket level)
|
|
50
|
-
if (conn.keepAlive === undefined) {
|
|
51
|
-
conn.keepAlive = true;
|
|
52
|
-
conn.keepAliveInitialDelayMillis = conn.keepAliveInitialDelayMillis ?? 10000;
|
|
53
|
-
}
|
|
5
|
+
if (conn.keepAlive === undefined) {
|
|
6
|
+
conn.keepAlive = true;
|
|
7
|
+
conn.keepAliveInitialDelayMillis = conn.keepAliveInitialDelayMillis ?? 10000;
|
|
54
8
|
}
|
|
55
9
|
}
|
|
56
10
|
config.pool = {
|
|
@@ -88,4 +42,4 @@ export function createKnexInstance(config) {
|
|
|
88
42
|
return knexInstance;
|
|
89
43
|
}
|
|
90
44
|
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9rbmV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQga25leCBmcm9tIFwia25leFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlS25leEluc3RhbmNlKGNvbmZpZzogS25leC5Db25maWcpOiBLbmV4IHtcbiAgaWYgKGNvbmZpZy5jb25uZWN0aW9uICYmIHR5cGVvZiBjb25maWcuY29ubmVjdGlvbiA9PT0gXCJvYmplY3RcIikge1xuICAgIGNvbnN0IGNvbm4gPSBjb25maWcuY29ubmVjdGlvbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIGlmIChjb25uLmtlZXBBbGl2ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25uLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgICBjb25uLmtlZXBBbGl2ZUluaXRpYWxEZWxheU1pbGxpcyA9IGNvbm4ua2VlcEFsaXZlSW5pdGlhbERlbGF5TWlsbGlzID8/IDEwMDAwO1xuICAgIH1cbiAgfVxuXG4gIGNvbmZpZy5wb29sID0ge1xuICAgIC4uLihjb25maWcucG9vbCA/PyB7fSksXG4gICAgcHJvcGFnYXRlQ3JlYXRlRXJyb3I6IGZhbHNlLFxuICAgIGlkbGVUaW1lb3V0TWlsbGlzOiAxMDAwMCxcbiAgICByZWFwSW50ZXJ2YWxNaWxsaXM6IDEwMDAsXG4gICAgYWNxdWlyZVRpbWVvdXRNaWxsaXM6IDMwMDAwLFxuICAgIGNyZWF0ZVRpbWVvdXRNaWxsaXM6IDMwMDAwLFxuICAgIGFmdGVyQ3JlYXRlOiAoKFxuICAgICAgY29ubjogS25leC5DbGllbnQgJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgIGRvbmU6IChlcnI6IEVycm9yIHwgbnVsbCwgY29ubjogS25leC5DbGllbnQpID0+IHZvaWQsXG4gICAgKSA9PiB7XG4gICAgICAvLyBwZyBkcml2ZXI6IOyGjOy8kyDroIjrsqgga2VlcEFsaXZlIOyEpOyglVxuICAgICAgY29uc3Qgc3RyZWFtID0gKGNvbm4gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmNvbm5lY3Rpb24gYXNcbiAgICAgICAgfCB7IHN0cmVhbT86IHsgc2V0S2VlcEFsaXZlPzogKGVuYWJsZTogYm9vbGVhbiwgaW5pdGlhbERlbGF5OiBudW1iZXIpID0+IHZvaWQgfSB9XG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHN0cmVhbT8uc3RyZWFtPy5zZXRLZWVwQWxpdmUpIHtcbiAgICAgICAgc3RyZWFtLnN0cmVhbS5zZXRLZWVwQWxpdmUodHJ1ZSwgMTAwMDApO1xuICAgICAgfVxuXG4gICAgICBjb25uLm9uKFwiZXJyb3JcIiwgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbm4sIFwiX19rbmV4X19kaXNwb3NlZFwiLCB7XG4gICAgICAgICAgdmFsdWU6IGVycixcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgZG9uZShudWxsLCBjb25uKTtcbiAgICB9KSBzYXRpc2ZpZXMgS25leC5Qb29sQ29uZmlnW1wiYWZ0ZXJDcmVhdGVcIl0sXG4gIH07XG5cbiAgY29uc3Qga25leEluc3RhbmNlID0ga25leChjb25maWcpO1xuICBrbmV4SW5zdGFuY2UuY2xpZW50LnZhbGlkYXRlQ29ubmVjdGlvbiA9IChjb25uZWN0aW9uOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjb25uZWN0aW9uICE9PSBcIm9iamVjdFwiIHx8IGNvbm5lY3Rpb24gPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoXCJfX2tuZXhfX2Rpc3Bvc2VkXCIgaW4gY29ubmVjdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNvbm4gPSBjb25uZWN0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChjb25uLl9lbmRpbmcgPT09IHRydWUgfHwgY29ubi5fY2xvc2VkID09PSB0cnVlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgcmV0dXJuIGtuZXhJbnN0YW5jZTtcbn1cbiJdLCJuYW1lcyI6WyJrbmV4IiwiY3JlYXRlS25leEluc3RhbmNlIiwiY29uZmlnIiwiY29ubmVjdGlvbiIsImNvbm4iLCJrZWVwQWxpdmUiLCJ1bmRlZmluZWQiLCJrZWVwQWxpdmVJbml0aWFsRGVsYXlNaWxsaXMiLCJwb29sIiwicHJvcGFnYXRlQ3JlYXRlRXJyb3IiLCJpZGxlVGltZW91dE1pbGxpcyIsInJlYXBJbnRlcnZhbE1pbGxpcyIsImFjcXVpcmVUaW1lb3V0TWlsbGlzIiwiY3JlYXRlVGltZW91dE1pbGxpcyIsImFmdGVyQ3JlYXRlIiwiZG9uZSIsInN0cmVhbSIsInNldEtlZXBBbGl2ZSIsIm9uIiwiZXJyIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImtuZXhJbnN0YW5jZSIsImNsaWVudCIsInZhbGlkYXRlQ29ubmVjdGlvbiIsIl9lbmRpbmciLCJfY2xvc2VkIl0sIm1hcHBpbmdzIjoiQUFDQSxPQUFPQSxVQUFVLE9BQU87QUFFeEIsT0FBTyxTQUFTQyxtQkFBbUJDLE1BQW1CO0lBQ3BELElBQUlBLE9BQU9DLFVBQVUsSUFBSSxPQUFPRCxPQUFPQyxVQUFVLEtBQUssVUFBVTtRQUM5RCxNQUFNQyxPQUFPRixPQUFPQyxVQUFVO1FBRTlCLElBQUlDLEtBQUtDLFNBQVMsS0FBS0MsV0FBVztZQUNoQ0YsS0FBS0MsU0FBUyxHQUFHO1lBQ2pCRCxLQUFLRywyQkFBMkIsR0FBR0gsS0FBS0csMkJBQTJCLElBQUk7UUFDekU7SUFDRjtJQUVBTCxPQUFPTSxJQUFJLEdBQUc7UUFDWixHQUFJTixPQUFPTSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3JCQyxzQkFBc0I7UUFDdEJDLG1CQUFtQjtRQUNuQkMsb0JBQW9CO1FBQ3BCQyxzQkFBc0I7UUFDdEJDLHFCQUFxQjtRQUNyQkMsYUFBYyxDQUNaVixNQUNBVztZQUVBLGdDQUFnQztZQUNoQyxNQUFNQyxTQUFTLEFBQUNaLEtBQWlDRCxVQUFVO1lBRzNELElBQUlhLFFBQVFBLFFBQVFDLGNBQWM7Z0JBQ2hDRCxPQUFPQSxNQUFNLENBQUNDLFlBQVksQ0FBQyxNQUFNO1lBQ25DO1lBRUFiLEtBQUtjLEVBQUUsQ0FBQyxTQUFTLENBQUNDO2dCQUNoQkMsT0FBT0MsY0FBYyxDQUFDakIsTUFBTSxvQkFBb0I7b0JBQzlDa0IsT0FBT0g7b0JBQ1BJLFVBQVU7b0JBQ1ZDLGNBQWM7b0JBQ2RDLFlBQVk7Z0JBQ2Q7WUFDRjtZQUVBVixLQUFLLE1BQU1YO1FBQ2I7SUFDRjtJQUVBLE1BQU1zQixlQUFlMUIsS0FBS0U7SUFDMUJ3QixhQUFhQyxNQUFNLENBQUNDLGtCQUFrQixHQUFHLENBQUN6QjtRQUN4QyxJQUFJLE9BQU9BLGVBQWUsWUFBWUEsZUFBZSxNQUFNLE9BQU87UUFDbEUsSUFBSSxzQkFBc0JBLFlBQVksT0FBTztRQUM3QyxNQUFNQyxPQUFPRDtRQUNiLElBQUlDLEtBQUt5QixPQUFPLEtBQUssUUFBUXpCLEtBQUswQixPQUFPLEtBQUssTUFBTSxPQUFPO1FBQzNELE9BQU87SUFDVDtJQUVBLE9BQU9KO0FBQ1QifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-generation.d.ts","sourceRoot":"","sources":["../../src/migration/code-generation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAEV,gBAAgB,EAGhB,cAAc,EACd,YAAY,EACb,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"code-generation.d.ts","sourceRoot":"","sources":["../../src/migration/code-generation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,KAAK,EAEV,gBAAgB,EAGhB,cAAc,EACd,YAAY,EACb,MAAM,gBAAgB,CAAC;AA2hDxB;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE;SAG/E,cAAc,EAAE;UACf,cAAc,EAAE;EAuC/B;AAWD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAoB/E;AAuHD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAS7F;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,YAAY,EACnB,SAAS,CAAC,EAAE,IAAI,GACf,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA0G7B"}
|
|
@@ -729,6 +729,8 @@ function getSearchTextColumnNames(table) {
|
|
|
729
729
|
if (column.defaultTo !== undefined) {
|
|
730
730
|
if (typeof column.defaultTo === "string" && column.defaultTo.startsWith(`"`)) {
|
|
731
731
|
chains.push(`defaultTo(${column.defaultTo})`);
|
|
732
|
+
} else if (column.type === "json" && typeof column.defaultTo.startsWith('"')) {
|
|
733
|
+
chains.push(`defaultTo(knex.raw("${column.defaultTo.replaceAll('"', "'")}::jsonb"))`);
|
|
732
734
|
} else {
|
|
733
735
|
chains.push(`defaultTo(knex.raw('${column.defaultTo}'))`);
|
|
734
736
|
}
|
|
@@ -1655,4 +1657,4 @@ function genPgroongaIndexDefinition(index, table) {
|
|
|
1655
1657
|
return "integer";
|
|
1656
1658
|
}
|
|
1657
1659
|
|
|
1658
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vY29kZS1nZW5lcmF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlcXVhbCBmcm9tIFwiZmFzdC1kZWVwLWVxdWFsXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgYWxwaGFiZXRpY2FsLCBkaWZmIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIE5haXRlIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEVudGl0eVByb3AsXG4gIEdlbk1pZ3JhdGlvbkNvZGUsXG4gIE1pZ3JhdGlvbkNvbHVtbixcbiAgTWlncmF0aW9uRm9yZWlnbixcbiAgTWlncmF0aW9uSW5kZXgsXG4gIE1pZ3JhdGlvblNldCxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc1NlYXJjaFRleHRQcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBmb3JtYXRDb2RlIH0gZnJvbSBcIi4uL3V0aWxzL2Zvcm1hdHRlclwiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZVdpdGgsIGludGVyc2VjdGlvbkJ5IH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyIH0gZnJvbSBcIi4vcG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyXCI7XG5cbi8qKlxuICog7Lus65+8IOygleydmCDqsrDqs7wg7YOA7J6FXG4gKiAtIGJ1aWxkZXI6IEtuZXggdGFibGUgYnVpbGRlciDrqZTshJzrk5zroZwg7Iuk7ZaJ7ZWgIOq1rOusuCAodGFibGUueHh4KCkpXG4gKiAtIHJhdzoga25leC5yYXcoKeuhnCDsi6TtlontlaAg6rWs66y4XG4gKi9cbnR5cGUgQ29sdW1uRGVmaW5pdGlvblJlc3VsdCA9IHtcbiAgYnVpbGRlcjogc3RyaW5nW107XG4gIHJhdzogc3RyaW5nW107XG59O1xuXG50eXBlIFNlYXJjaFRleHRIZWxwZXJLaW5kID0gXCJ0ZXh0LWFycmF5XCIgfCBcImpzb25iLWFycmF5XCI7XG5cbnR5cGUgU2VhcmNoVGV4dEV4cHJlc3Npb25Ub2tlbiA9XG4gIHwgeyB0eXBlOiBcImlkZW50aWZpZXJcIjsgdmFsdWU6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcInF1b3RlZElkZW50aWZpZXJcIjsgdmFsdWU6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcInN0cmluZ1wiOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwic3ltYm9sXCI7IHZhbHVlOiBcIihcIiB8IFwiKVwiIHwgXCIsXCIgfVxuICB8IHsgdHlwZTogXCJvcGVyYXRvclwiOyB2YWx1ZTogXCJ8fFwiIHwgXCI6OlwiIH07XG5cbnR5cGUgU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlID1cbiAgfCB7IHR5cGU6IFwiaWRlbnRpZmllclwiOyBuYW1lOiBzdHJpbmc7IHF1b3RlZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiBcInN0cmluZ1wiOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwiYm9vbGVhblwiOyB2YWx1ZTogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiBcImZ1bmN0aW9uXCI7IG5hbWU6IHN0cmluZzsgYXJnczogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlW10gfVxuICB8IHsgdHlwZTogXCJjb25jYXRcIjsgcGFydHM6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZVtdIH1cbiAgfCB7IHR5cGU6IFwiY29sbGF0ZVwiOyBleHByOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGU7IGNvbGxhdGlvbjogc3RyaW5nOyBxdW90ZWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogXCJjYXN0XCI7IGV4cHI6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZTsgdGFyZ2V0VHlwZTogc3RyaW5nIH07XG5cbmNvbnN0IFNFQVJDSF9URVhUX0hFTFBFUl9ERUZJTklUSU9OUzogUmVjb3JkPFNlYXJjaFRleHRIZWxwZXJLaW5kLCBzdHJpbmc+ID0ge1xuICBcInRleHQtYXJyYXlcIjogYGF3YWl0IGtuZXgucmF3KFxcYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHNvbmFtdV90ZXh0X2FycmF5X2FnZyhhcnIgdGV4dFtdLCBjaSBib29sZWFuIERFRkFVTFQgdHJ1ZSlcblJFVFVSTlMgdGV4dFxuTEFOR1VBR0Ugc3FsIElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUXG5BUyAkJFxuICBTRUxFQ1Qgc3RyaW5nX2FnZyhcbiAgICBDQVNFIFdIRU4gY2kgVEhFTiBsb3dlcih2YWx1ZSkgRUxTRSB2YWx1ZSBFTkQsXG4gICAgJyAnXG4gIClcbiAgRlJPTSB1bm5lc3QoYXJyKSBBUyB2YWx1ZVxuJCRcXGApO2AsXG4gIFwianNvbmItYXJyYXlcIjogYGF3YWl0IGtuZXgucmF3KFxcYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHNvbmFtdV9qc29uYl9hcnJheV9hZ2coYXJyIGpzb25iLCBjaSBib29sZWFuIERFRkFVTFQgdHJ1ZSlcblJFVFVSTlMgdGV4dFxuTEFOR1VBR0Ugc3FsIElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUXG5BUyAkJFxuICBTRUxFQ1Qgc3RyaW5nX2FnZyhcbiAgICBDQVNFIFdIRU4gY2kgVEhFTiBsb3dlcih2YWx1ZSkgRUxTRSB2YWx1ZSBFTkQsXG4gICAgJyAnXG4gIClcbiAgRlJPTSBqc29uYl9hcnJheV9lbGVtZW50c190ZXh0KGFycilcbiQkXFxgKTtgLFxufTtcblxuY2xhc3MgU2VhcmNoVGV4dEV4cHJlc3Npb25QYXJzZXIge1xuICBwcml2YXRlIGluZGV4ID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRva2VuczogU2VhcmNoVGV4dEV4cHJlc3Npb25Ub2tlbltdKSB7fVxuXG4gIGlzQXRFbmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoO1xuICB9XG5cbiAgcGFyc2VFeHByZXNzaW9uKCk6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VDb25jYXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDb25jYXQoKTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlIHtcbiAgICBjb25zdCBwYXJ0cyA9IFt0aGlzLnBhcnNlUG9zdGZpeCgpXTtcblxuICAgIHdoaWxlICh0aGlzLm1hdGNoT3BlcmF0b3IoXCJ8fFwiKSkge1xuICAgICAgcGFydHMucHVzaCh0aGlzLnBhcnNlUG9zdGZpeCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAxID8gcGFydHNbMF0gOiB7IHR5cGU6IFwiY29uY2F0XCIsIHBhcnRzIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUG9zdGZpeCgpOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUge1xuICAgIGxldCBub2RlID0gdGhpcy5wYXJzZVByaW1hcnkoKTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy5tYXRjaE9wZXJhdG9yKFwiOjpcIikpIHtcbiAgICAgICAgbm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiBcImNhc3RcIixcbiAgICAgICAgICBleHByOiBub2RlLFxuICAgICAgICAgIHRhcmdldFR5cGU6IHRoaXMucGFyc2VUeXBlTmFtZSgpLFxuICAgICAgICB9O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWF0Y2hJZGVudGlmaWVyKFwiY29sbGF0ZVwiKSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZUNvbGxhdGlvblRva2VuKCk7XG4gICAgICAgIG5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogXCJjb2xsYXRlXCIsXG4gICAgICAgICAgZXhwcjogbm9kZSxcbiAgICAgICAgICBjb2xsYXRpb246IHRva2VuLnZhbHVlLFxuICAgICAgICAgIHF1b3RlZDogdG9rZW4udHlwZSA9PT0gXCJxdW90ZWRJZGVudGlmaWVyXCIsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VQcmltYXJ5KCk6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmNvbnN1bWVUb2tlbihcIu2RnO2YhOyLnVwiKTtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBcIihcIikge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICB0aGlzLmV4cGVjdFN5bWJvbChcIilcIik7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJzdHJpbmdcIiwgdmFsdWU6IHRva2VuLnZhbHVlIH07XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFwiaWRlbnRpZmllclwiIHx8IHRva2VuLnR5cGUgPT09IFwicXVvdGVkSWRlbnRpZmllclwiKSB7XG4gICAgICBjb25zdCBsb3dlck5hbWUgPSB0b2tlbi52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFwiaWRlbnRpZmllclwiICYmIChsb3dlck5hbWUgPT09IFwidHJ1ZVwiIHx8IGxvd2VyTmFtZSA9PT0gXCJmYWxzZVwiKSkge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImJvb2xlYW5cIiwgdmFsdWU6IGxvd2VyTmFtZSA9PT0gXCJ0cnVlXCIgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWF0Y2hTeW1ib2woXCIoXCIpKSB7XG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBcImlkZW50aWZpZXJcIiAmJiBsb3dlck5hbWUgPT09IFwidHJpbVwiICYmIHRoaXMuaXNUcmltQm90aEZyb21Gb3JtKCkpIHtcbiAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7XG4gICAgICAgICAgY29uc3QgYXJnID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICB0aGlzLmV4cGVjdFN5bWJvbChcIilcIik7XG4gICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJmdW5jdGlvblwiLCBuYW1lOiBcInRyaW1cIiwgYXJnczogW2FyZ10gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLnBhcnNlRnVuY3Rpb25BcmdzKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgICAgICAgIG5hbWU6IHRva2VuLnZhbHVlLFxuICAgICAgICAgIGFyZ3MsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiaWRlbnRpZmllclwiLFxuICAgICAgICBuYW1lOiB0b2tlbi52YWx1ZSxcbiAgICAgICAgcXVvdGVkOiB0b2tlbi50eXBlID09PSBcInF1b3RlZElkZW50aWZpZXJcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGDsp4Dsm5DrkJjsp4Ag7JWK64qUIHNlYXJjaFRleHQgZXhwcmVzc2lvbiB0b2tlbjogJHt0b2tlbi50eXBlfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUZ1bmN0aW9uQXJncygpOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGVbXSB7XG4gICAgaWYgKHRoaXMubWF0Y2hTeW1ib2woXCIpXCIpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgYXJnczogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlW10gPSBbXTtcbiAgICBkbyB7XG4gICAgICBhcmdzLnB1c2godGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7XG4gICAgfSB3aGlsZSAodGhpcy5tYXRjaFN5bWJvbChcIixcIikpO1xuXG4gICAgdGhpcy5leHBlY3RTeW1ib2woXCIpXCIpO1xuICAgIHJldHVybiBhcmdzO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVR5cGVOYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICAgIGlmIChcbiAgICAgICAgdG9rZW4/LnR5cGUgPT09IFwiaWRlbnRpZmllclwiIHx8XG4gICAgICAgIHRva2VuPy50eXBlID09PSBcInF1b3RlZElkZW50aWZpZXJcIiB8fFxuICAgICAgICAodG9rZW4/LnR5cGUgPT09IFwic3ltYm9sXCIgJiZcbiAgICAgICAgICAodG9rZW4udmFsdWUgPT09IFwiKFwiIHx8IHRva2VuLnZhbHVlID09PSBcIilcIiB8fCB0b2tlbi52YWx1ZSA9PT0gXCIsXCIpKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBcInN5bWJvbFwiKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJ0cy5wdXNoKHRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB0aGlzLmluZGV4ICs9IDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCLtg4DsnoUg7LqQ7Iqk7YyFIOuMgOyDgSDtg4DsnoXsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6QuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiIFwiKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZUNvbGxhdGlvblRva2VuKCk6IEV4dHJhY3Q8XG4gICAgU2VhcmNoVGV4dEV4cHJlc3Npb25Ub2tlbixcbiAgICB7IHR5cGU6IFwiaWRlbnRpZmllclwiIHwgXCJxdW90ZWRJZGVudGlmaWVyXCIgfVxuICA+IHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0b2tlbj8udHlwZSAhPT0gXCJpZGVudGlmaWVyXCIgJiYgdG9rZW4/LnR5cGUgIT09IFwicXVvdGVkSWRlbnRpZmllclwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDT0xMQVRFIOuMgOyDgSDsi53rs4TsnpDrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6QuXCIpO1xuICAgIH1cbiAgICB0aGlzLmluZGV4ICs9IDE7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyaW1Cb3RoRnJvbUZvcm0oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYm90aFRva2VuID0gdGhpcy5wZWVrKCk7XG4gICAgY29uc3QgZnJvbVRva2VuID0gdGhpcy5wZWVrKDEpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGJvdGhUb2tlbj8udHlwZSA9PT0gXCJpZGVudGlmaWVyXCIgJiZcbiAgICAgIGJvdGhUb2tlbi52YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcImJvdGhcIiAmJlxuICAgICAgZnJvbVRva2VuPy50eXBlID09PSBcImlkZW50aWZpZXJcIiAmJlxuICAgICAgZnJvbVRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiZnJvbVwiXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwZWN0U3ltYm9sKHZhbHVlOiBcIihcIiB8IFwiKVwiIHwgXCIsXCIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWF0Y2hTeW1ib2wodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiJHt2YWx1ZX1cIiDthqDtgbDsnbQg7ZWE7JqU7ZWp64uI64ukLmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWF0Y2hTeW1ib2wodmFsdWU6IFwiKFwiIHwgXCIpXCIgfCBcIixcIik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRva2VuPy50eXBlID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgdGhpcy5pbmRleCArPSAxO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgbWF0Y2hPcGVyYXRvcih2YWx1ZTogXCJ8fFwiIHwgXCI6OlwiKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodG9rZW4/LnR5cGUgPT09IFwib3BlcmF0b3JcIiAmJiB0b2tlbi52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIG1hdGNoSWRlbnRpZmllcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodG9rZW4/LnR5cGUgPT09IFwiaWRlbnRpZmllclwiICYmIHRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWVUb2tlbihjb250ZXh0OiBzdHJpbmcpOiBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtjb250ZXh0fSDthqDtgbDsnbQg7ZWE7JqU7ZWp64uI64ukLmApO1xuICAgIH1cbiAgICB0aGlzLmluZGV4ICs9IDE7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgcHJpdmF0ZSBwZWVrKG9mZnNldCA9IDApOiBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleCArIG9mZnNldF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SW5kZXhDb2x1bW5PcGNsYXNzKGNvbHVtbjogTWlncmF0aW9uSW5kZXhbXCJjb2x1bW5zXCJdW251bWJlcl0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY29sdW1uLm9wY2xhc3MgPz8gY29sdW1uLnZlY3Rvck9wcztcbn1cblxuZnVuY3Rpb24gdG9rZW5pemVTZWFyY2hUZXh0RXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuW10ge1xuICBjb25zdCB0b2tlbnM6IFNlYXJjaFRleHRFeHByZXNzaW9uVG9rZW5bXSA9IFtdO1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IGV4cHJlc3Npb24ubGVuZ3RoKSB7XG4gICAgY29uc3QgY2hhciA9IGV4cHJlc3Npb25baW5kZXhdO1xuXG4gICAgaWYgKGNoYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKC9cXHMvLnRlc3QoY2hhcikpIHtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZXhwcmVzc2lvbi5zdGFydHNXaXRoKFwifHxcIiwgaW5kZXgpKSB7XG4gICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwib3BlcmF0b3JcIiwgdmFsdWU6IFwifHxcIiB9KTtcbiAgICAgIGluZGV4ICs9IDI7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZXhwcmVzc2lvbi5zdGFydHNXaXRoKFwiOjpcIiwgaW5kZXgpKSB7XG4gICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwib3BlcmF0b3JcIiwgdmFsdWU6IFwiOjpcIiB9KTtcbiAgICAgIGluZGV4ICs9IDI7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhciA9PT0gXCIoXCIgfHwgY2hhciA9PT0gXCIpXCIgfHwgY2hhciA9PT0gXCIsXCIpIHtcbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJzeW1ib2xcIiwgdmFsdWU6IGNoYXIgfSk7XG4gICAgICBpbmRleCArPSAxO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYXIgPT09IFwiJ1wiKSB7XG4gICAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgICAgaW5kZXggKz0gMTtcblxuICAgICAgd2hpbGUgKGluZGV4IDwgZXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGV4cHJlc3Npb25baW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gXCInXCIpIHtcbiAgICAgICAgICBpZiAoZXhwcmVzc2lvbltpbmRleCArIDFdID09PSBcIidcIikge1xuICAgICAgICAgICAgdmFsdWUgKz0gXCInXCI7XG4gICAgICAgICAgICBpbmRleCArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlICs9IGN1cnJlbnQ7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJzdHJpbmdcIiwgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgIGluZGV4ICs9IDE7XG5cbiAgICAgIHdoaWxlIChpbmRleCA8IGV4cHJlc3Npb24ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBleHByZXNzaW9uW2luZGV4XTtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdcIicpIHtcbiAgICAgICAgICBpZiAoZXhwcmVzc2lvbltpbmRleCArIDFdID09PSAnXCInKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSAnXCInO1xuICAgICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSArPSBjdXJyZW50O1xuICAgICAgICBpbmRleCArPSAxO1xuICAgICAgfVxuXG4gICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwicXVvdGVkSWRlbnRpZmllclwiLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICgvW0EtWmEtel9dLy50ZXN0KGNoYXIpKSB7XG4gICAgICBsZXQgdmFsdWUgPSBjaGFyO1xuICAgICAgaW5kZXggKz0gMTtcblxuICAgICAgd2hpbGUgKGluZGV4IDwgZXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGV4cHJlc3Npb25baW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCAhPT0gdW5kZWZpbmVkICYmIC9bQS1aYS16MC05XyRdLy50ZXN0KGN1cnJlbnQpKSB7XG4gICAgICAgICAgdmFsdWUgKz0gY3VycmVudDtcbiAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwiaWRlbnRpZmllclwiLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihg7KeA7JuQ65CY7KeAIOyViuuKlCBzZWFyY2hUZXh0IGV4cHJlc3Npb24g66y47J6QOiAke2NoYXJ9YCk7XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxpemVTZWFyY2hUZXh0R2VuZXJhdGVkRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTZWFyY2hUZXh0RXhwcmVzc2lvblBhcnNlcih0b2tlbml6ZVNlYXJjaFRleHRFeHByZXNzaW9uKGV4cHJlc3Npb24pKTtcbiAgICBjb25zdCBwYXJzZWRFeHByZXNzaW9uID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgaWYgKCFwYXJzZXIuaXNBdEVuZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZWFyY2hUZXh0IGV4cHJlc3Npb24g7YyM7Iux7J20IOuBneuCmOyngCDslYrslZjsirXri4jri6QuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJTZWFyY2hUZXh0RXhwcmVzc2lvbihub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUocGFyc2VkRXhwcmVzc2lvbikpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25GYWxsYmFjayhleHByZXNzaW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUoXG4gIG5vZGU6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSxcbik6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSB7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSBcImlkZW50aWZpZXJcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5vZGUsXG4gICAgICAgIG5hbWU6IG5vZGUucXVvdGVkID8gbm9kZS5uYW1lIDogbm9kZS5uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICB9O1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgY2FzZSBcImNvbmNhdFwiOiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IG5vZGUucGFydHMuZmxhdE1hcCgocGFydCkgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUGFydCA9IG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShwYXJ0KTtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXJ0LnR5cGUgPT09IFwiY29uY2F0XCIgPyBub3JtYWxpemVkUGFydC5wYXJ0cyA6IFtub3JtYWxpemVkUGFydF07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiY29uY2F0XCIsIHBhcnRzIH07XG4gICAgfVxuICAgIGNhc2UgXCJjb2xsYXRlXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImNvbGxhdGVcIixcbiAgICAgICAgZXhwcjogbm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKG5vZGUuZXhwciksXG4gICAgICAgIGNvbGxhdGlvbjogbm9kZS5jb2xsYXRpb24udG9VcHBlckNhc2UoKSA9PT0gXCJDXCIgPyBcIkNcIiA6IG5vZGUuY29sbGF0aW9uLFxuICAgICAgICBxdW90ZWQ6IG5vZGUucXVvdGVkIHx8IG5vZGUuY29sbGF0aW9uLnRvVXBwZXJDYXNlKCkgPT09IFwiQ1wiLFxuICAgICAgfTtcbiAgICBjYXNlIFwiY2FzdFwiOiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRXhwciA9IG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShub2RlLmV4cHIpO1xuICAgICAgY29uc3QgdGFyZ2V0VHlwZSA9IG5vZGUudGFyZ2V0VHlwZS5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh0YXJnZXRUeXBlID09PSBcInRleHRcIiB8fCB0YXJnZXRUeXBlID09PSBcImNoYXJhY3RlciB2YXJ5aW5nXCIgfHwgdGFyZ2V0VHlwZSA9PT0gXCJ2YXJjaGFyXCIpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRFeHByO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJjYXN0XCIsXG4gICAgICAgIGV4cHI6IG5vcm1hbGl6ZWRFeHByLFxuICAgICAgICB0YXJnZXRUeXBlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBub2RlLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGxldCBhcmdzID0gbm9kZS5hcmdzLm1hcCgoYXJnKSA9PiBub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUoYXJnKSk7XG5cbiAgICAgIGlmICgobmFtZSA9PT0gXCJ0cmltXCIgfHwgbmFtZSA9PT0gXCJidHJpbVwiKSAmJiBhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICBuYW1lOiBcInRyaW1cIixcbiAgICAgICAgICBhcmdzLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIChuYW1lID09PSBcInNvbmFtdV90ZXh0X2FycmF5X2FnZ1wiIHx8IG5hbWUgPT09IFwic29uYW11X2pzb25iX2FycmF5X2FnZ1wiKSAmJlxuICAgICAgICBhcmdzLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICBhcmdzWzFdPy50eXBlID09PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICBhcmdzWzFdLnZhbHVlID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgYXJncyA9IFthcmdzWzBdXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgICAgICBuYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyU2VhcmNoVGV4dEV4cHJlc3Npb24obm9kZTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlLCBwYXJlbnRQcmVjZWRlbmNlID0gMCk6IHN0cmluZyB7XG4gIGNvbnN0IHByZWNlZGVuY2UgPSBnZXRTZWFyY2hUZXh0RXhwcmVzc2lvblByZWNlZGVuY2Uobm9kZSk7XG4gIGNvbnN0IHJlbmRlcmVkID0gKCgpID0+IHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSBcImlkZW50aWZpZXJcIjpcbiAgICAgICAgcmV0dXJuIG5vZGUucXVvdGVkID8gYFwiJHtub2RlLm5hbWUucmVwbGFjZUFsbCgnXCInLCAnXCJcIicpfVwiYCA6IG5vZGUubmFtZTtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIGAnJHtub2RlLnZhbHVlLnJlcGxhY2VBbGwoXCInXCIsIFwiJydcIil9J2A7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gbm9kZS52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgIHJldHVybiBgJHtub2RlLm5hbWV9KCR7bm9kZS5hcmdzXG4gICAgICAgICAgLm1hcCgoYXJnKSA9PiByZW5kZXJTZWFyY2hUZXh0RXhwcmVzc2lvbihhcmcpKVxuICAgICAgICAgIC5qb2luKFwiLCBcIil9KWA7XG4gICAgICBjYXNlIFwiY29uY2F0XCI6XG4gICAgICAgIHJldHVybiBub2RlLnBhcnRzLm1hcCgocGFydCkgPT4gcmVuZGVyU2VhcmNoVGV4dEV4cHJlc3Npb24ocGFydCwgcHJlY2VkZW5jZSkpLmpvaW4oXCIgfHwgXCIpO1xuICAgICAgY2FzZSBcImNvbGxhdGVcIjoge1xuICAgICAgICBjb25zdCBjb2xsYXRpb24gPSBub2RlLnF1b3RlZFxuICAgICAgICAgID8gYFwiJHtub2RlLmNvbGxhdGlvbi5yZXBsYWNlQWxsKCdcIicsICdcIlwiJyl9XCJgXG4gICAgICAgICAgOiBub2RlLmNvbGxhdGlvbjtcbiAgICAgICAgcmV0dXJuIGAke3JlbmRlclNlYXJjaFRleHRFeHByZXNzaW9uKG5vZGUuZXhwciwgcHJlY2VkZW5jZSl9IENPTExBVEUgJHtjb2xsYXRpb259YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJjYXN0XCI6XG4gICAgICAgIHJldHVybiBgJHtyZW5kZXJTZWFyY2hUZXh0RXhwcmVzc2lvbihub2RlLmV4cHIsIHByZWNlZGVuY2UpfTo6JHtub2RlLnRhcmdldFR5cGV9YDtcbiAgICB9XG4gIH0pKCk7XG5cbiAgaWYgKHByZWNlZGVuY2UgPCBwYXJlbnRQcmVjZWRlbmNlKSB7XG4gICAgcmV0dXJuIGAoJHtyZW5kZXJlZH0pYDtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJlZDtcbn1cblxuZnVuY3Rpb24gZ2V0U2VhcmNoVGV4dEV4cHJlc3Npb25QcmVjZWRlbmNlKG5vZGU6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSk6IG51bWJlciB7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSBcImNvbmNhdFwiOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSBcImNvbGxhdGVcIjpcbiAgICBjYXNlIFwiY2FzdFwiOlxuICAgICAgcmV0dXJuIDI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAzO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uRmFsbGJhY2soZXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4cHJlc3Npb25cbiAgICAucmVwbGFjZSgvXFxzKy9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvXFxiVFJJTVxccypcXChcXHMqQk9USFxccytGUk9NXFxzKy9naSwgXCJ0cmltKFwiKVxuICAgIC5yZXBsYWNlKC86Oig/OnRleHR8Y2hhcmFjdGVyIHZhcnlpbmd8dmFyY2hhcilcXGIvZ2ksIFwiXCIpXG4gICAgLnJlcGxhY2UoLyxcXHMqdHJ1ZVxcYi9naSwgXCJcIilcbiAgICAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiB2aXNpdFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShcbiAgbm9kZTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlLFxuICB2aXNpdG9yOiAobm9kZTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKSA9PiB2b2lkLFxuKTogdm9pZCB7XG4gIHZpc2l0b3Iobm9kZSk7XG5cbiAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICBjYXNlIFwiY29uY2F0XCI6XG4gICAgICBub2RlLnBhcnRzLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgICAgdmlzaXRTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUocGFydCwgdmlzaXRvcik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwiY29sbGF0ZVwiOlxuICAgIGNhc2UgXCJjYXN0XCI6XG4gICAgICB2aXNpdFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShub2RlLmV4cHIsIHZpc2l0b3IpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgbm9kZS5hcmdzLmZvckVhY2goKGFyZykgPT4ge1xuICAgICAgICB2aXNpdFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShhcmcsIHZpc2l0b3IpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImlkZW50aWZpZXJcIjpcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTZWFyY2hUZXh0SGVscGVyS2luZHNGcm9tRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBTZXQ8U2VhcmNoVGV4dEhlbHBlcktpbmQ+IHtcbiAgY29uc3QgaGVscGVyS2luZHMgPSBuZXcgU2V0PFNlYXJjaFRleHRIZWxwZXJLaW5kPigpO1xuICBjb25zdCBhZGRIZWxwZXJLaW5kRnJvbU5hbWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vcm1hbGl6ZWROYW1lID09PSBcInNvbmFtdV90ZXh0X2FycmF5X2FnZ1wiKSB7XG4gICAgICBoZWxwZXJLaW5kcy5hZGQoXCJ0ZXh0LWFycmF5XCIpO1xuICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZE5hbWUgPT09IFwic29uYW11X2pzb25iX2FycmF5X2FnZ1wiKSB7XG4gICAgICBoZWxwZXJLaW5kcy5hZGQoXCJqc29uYi1hcnJheVwiKTtcbiAgICB9XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgU2VhcmNoVGV4dEV4cHJlc3Npb25QYXJzZXIodG9rZW5pemVTZWFyY2hUZXh0RXhwcmVzc2lvbihleHByZXNzaW9uKSk7XG4gICAgY29uc3QgcGFyc2VkRXhwcmVzc2lvbiA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGlmICghcGFyc2VyLmlzQXRFbmQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2VhcmNoVGV4dCBoZWxwZXIgZXhwcmVzc2lvbiDtjIzsi7HsnbQg64Gd64KY7KeAIOyViuyVmOyKteuLiOuLpC5cIik7XG4gICAgfVxuXG4gICAgdmlzaXRTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUocGFyc2VkRXhwcmVzc2lvbiwgKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLnR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBhZGRIZWxwZXJLaW5kRnJvbU5hbWUobm9kZS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgaWYgKC9cXGJzb25hbXVfdGV4dF9hcnJheV9hZ2dcXHMqXFwoL2kudGVzdChleHByZXNzaW9uKSkge1xuICAgICAgaGVscGVyS2luZHMuYWRkKFwidGV4dC1hcnJheVwiKTtcbiAgICB9XG4gICAgaWYgKC9cXGJzb25hbXVfanNvbmJfYXJyYXlfYWdnXFxzKlxcKC9pLnRlc3QoZXhwcmVzc2lvbikpIHtcbiAgICAgIGhlbHBlcktpbmRzLmFkZChcImpzb25iLWFycmF5XCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoZWxwZXJLaW5kcztcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVNlYXJjaFRleHRDb2x1bW5zKHRhYmxlOiBzdHJpbmcsIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdKTogTWlncmF0aW9uQ29sdW1uW10ge1xuICBjb25zdCBlbnRpdHkgPSAoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gRW50aXR5TWFuYWdlci5nZXRCeVRhYmxlKHRhYmxlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSkoKTtcblxuICBpZiAoIWVudGl0eSkge1xuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cbiAgY29uc3QgcHJvcHNCeU5hbWUgPSBuZXcgTWFwKGVudGl0eS5wcm9wcy5tYXAoKHByb3ApID0+IFtwcm9wLm5hbWUsIHByb3BdKSk7XG5cbiAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNCeU5hbWUuZ2V0KGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoIXByb3AgfHwgIWlzU2VhcmNoVGV4dFByb3AocHJvcCkpIHtcbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbHVtbixcbiAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICB0eXBlOiBcIlNUT1JFRFwiLFxuICAgICAgICBleHByZXNzaW9uOiBidWlsZFNlYXJjaFRleHRHZW5lcmF0ZWRFeHByZXNzaW9uKHByb3AsIHByb3BzQnlOYW1lKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU2VhcmNoVGV4dEdlbmVyYXRlZEV4cHJlc3Npb24oXG4gIHByb3A6IEV4dHJhY3Q8RW50aXR5UHJvcCwgeyB0eXBlOiBcInNlYXJjaFRleHRcIiB9PixcbiAgcHJvcHNCeU5hbWU6IE1hcDxzdHJpbmcsIEVudGl0eVByb3A+LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW5zID0gcHJvcC5zb3VyY2VDb2x1bW5zLm1hcCgoc291cmNlKSA9PiB7XG4gICAgY29uc3Qgc291cmNlUHJvcCA9IHByb3BzQnlOYW1lLmdldChzb3VyY2UubmFtZSk7XG4gICAgaWYgKCFzb3VyY2VQcm9wKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHNlYXJjaFRleHQgc291cmNlIGNvbHVtbiBcIiR7c291cmNlLm5hbWV9XCLsnYQo66W8KSDssL7snYQg7IiYIOyXhuyKteuLiOuLpC5gKTtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlUHJvcC50eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gc291cmNlLmNhc2VJbnNlbnNpdGl2ZVxuICAgICAgICA/IGBsb3dlcihDT0FMRVNDRSgke3NvdXJjZS5uYW1lfSwgJycpKWBcbiAgICAgICAgOiBgQ09BTEVTQ0UoJHtzb3VyY2UubmFtZX0sICcnKWA7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZVByb3AudHlwZSA9PT0gXCJzdHJpbmdbXVwiKSB7XG4gICAgICByZXR1cm4gc291cmNlLmNhc2VJbnNlbnNpdGl2ZVxuICAgICAgICA/IGBDT0FMRVNDRShzb25hbXVfdGV4dF9hcnJheV9hZ2coJHtzb3VyY2UubmFtZX0pLCAnJylgXG4gICAgICAgIDogYENPQUxFU0NFKHNvbmFtdV90ZXh0X2FycmF5X2FnZygke3NvdXJjZS5uYW1lfSwgZmFsc2UpLCAnJylgO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2VQcm9wLnR5cGUgPT09IFwianNvblwiKSB7XG4gICAgICByZXR1cm4gc291cmNlLmNhc2VJbnNlbnNpdGl2ZVxuICAgICAgICA/IGBDT0FMRVNDRShzb25hbXVfanNvbmJfYXJyYXlfYWdnKCR7c291cmNlLm5hbWV9KSwgJycpYFxuICAgICAgICA6IGBDT0FMRVNDRShzb25hbXVfanNvbmJfYXJyYXlfYWdnKCR7c291cmNlLm5hbWV9LCBmYWxzZSksICcnKWA7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHNlYXJjaFRleHQgc291cmNlIGNvbHVtbiBcIiR7c291cmNlLm5hbWV9XCLsnZgg7YOA7J6FIFwiJHtzb3VyY2VQcm9wLnR5cGV9XCLsnYAo64qUKSDsp4Dsm5DrkJjsp4Ag7JWK7Iq164uI64ukLmAsXG4gICAgKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGB0cmltKCR7dG9rZW5zLmpvaW4oYCB8fCAnICcgfHwgYCl9KWA7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaFRleHRIZWxwZXJEZWZpbml0aW9ucyh0YWJsZTogc3RyaW5nLCBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaGVscGVyS2luZHMgPSBuZXcgU2V0PFNlYXJjaFRleHRIZWxwZXJLaW5kPigpO1xuXG4gIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgaWYgKCFjb2x1bW4uZ2VuZXJhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ2V0U2VhcmNoVGV4dEhlbHBlcktpbmRzRnJvbUV4cHJlc3Npb24oY29sdW1uLmdlbmVyYXRlZC5leHByZXNzaW9uKS5mb3JFYWNoKChraW5kKSA9PiB7XG4gICAgICBoZWxwZXJLaW5kcy5hZGQoa2luZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGlmIChoZWxwZXJLaW5kcy5zaXplID4gMCkge1xuICAgIHJldHVybiAoW1widGV4dC1hcnJheVwiLCBcImpzb25iLWFycmF5XCJdIGFzIGNvbnN0KVxuICAgICAgLmZpbHRlcigoa2luZCkgPT4gaGVscGVyS2luZHMuaGFzKGtpbmQpKVxuICAgICAgLm1hcCgoa2luZCkgPT4gU0VBUkNIX1RFWFRfSEVMUEVSX0RFRklOSVRJT05TW2tpbmRdKTtcbiAgfVxuXG4gIGNvbnN0IGVudGl0eSA9ICgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBFbnRpdHlNYW5hZ2VyLmdldEJ5VGFibGUodGFibGUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9KSgpO1xuXG4gIGlmICghZW50aXR5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHByb3BzQnlOYW1lID0gbmV3IE1hcChlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiBbcHJvcC5uYW1lLCBwcm9wXSkpO1xuXG4gIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzQnlOYW1lLmdldChjb2x1bW4ubmFtZSk7XG4gICAgaWYgKCFwcm9wIHx8ICFpc1NlYXJjaFRleHRQcm9wKHByb3ApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvcC5zb3VyY2VDb2x1bW5zLmZvckVhY2goKHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlUHJvcCA9IHByb3BzQnlOYW1lLmdldChzb3VyY2UubmFtZSk7XG4gICAgICBpZiAoc291cmNlUHJvcD8udHlwZSA9PT0gXCJzdHJpbmdbXVwiKSB7XG4gICAgICAgIGhlbHBlcktpbmRzLmFkZChcInRleHQtYXJyYXlcIik7XG4gICAgICB9IGVsc2UgaWYgKHNvdXJjZVByb3A/LnR5cGUgPT09IFwianNvblwiKSB7XG4gICAgICAgIGhlbHBlcktpbmRzLmFkZChcImpzb25iLWFycmF5XCIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gKFtcInRleHQtYXJyYXlcIiwgXCJqc29uYi1hcnJheVwiXSBhcyBjb25zdClcbiAgICAuZmlsdGVyKChraW5kKSA9PiBoZWxwZXJLaW5kcy5oYXMoa2luZCkpXG4gICAgLm1hcCgoa2luZCkgPT4gU0VBUkNIX1RFWFRfSEVMUEVSX0RFRklOSVRJT05TW2tpbmRdKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VhcmNoVGV4dENvbHVtbk5hbWVzKHRhYmxlOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IGVudGl0eSA9ICgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBFbnRpdHlNYW5hZ2VyLmdldEJ5VGFibGUodGFibGUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9KSgpO1xuXG4gIGlmICghZW50aXR5KSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2V0KGVudGl0eS5wcm9wcy5maWx0ZXIoaXNTZWFyY2hUZXh0UHJvcCkubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpKTtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg7IOd7ISx7ZWY64qUIOy8gOydtOyKpCAtIOy7rOufvC/snbjrjbHsiqQg7IOd7ISxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQ3JlYXRlQ29kZV9Db2x1bW5BbmRJbmRleGVzKFxuICB0YWJsZTogc3RyaW5nLFxuICBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXSxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZT4ge1xuICBjb25zdCByZXNvbHZlZENvbHVtbnMgPSByZXNvbHZlU2VhcmNoVGV4dENvbHVtbnModGFibGUsIGNvbHVtbnMpO1xuICBjb25zdCBjb2x1bW5EZWZzID0gZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIHJlc29sdmVkQ29sdW1ucyk7XG4gIGNvbnN0IGhlbHBlckRlZmluaXRpb25zID0gZ2V0U2VhcmNoVGV4dEhlbHBlckRlZmluaXRpb25zKHRhYmxlLCByZXNvbHZlZENvbHVtbnMpO1xuXG4gIC8vIOy7rOufvCwg7J24642x7IqkIOyymOumrFxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgJ2ltcG9ydCB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4uaGVscGVyRGVmaW5pdGlvbnMsXG4gICAgYGF3YWl0IGtuZXguc2NoZW1hLmNyZWF0ZVRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCxcbiAgICAuLi5jb2x1bW5EZWZzLmJ1aWxkZXIsXG4gICAgXCJ9KTtcIixcbiAgICAvLyByYXcg6rWs66y4IChHZW5lcmF0ZWQgQ29sdW1uIOuTsSlcbiAgICAuLi5jb2x1bW5EZWZzLnJhdyxcbiAgICAvLyBpbmRleOuKlCBrbmV4LnJhd+uhnCDsspjrpqztlZjrr4DroZwgY3JlYXRlVGFibGUg67CW7JeQ7IScIOyLpO2WiVxuICAgIC4uLmluZGV4ZXMubWFwKChpbmRleCkgPT4gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSkpLFxuICAgIFwifVwiLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgYCByZXR1cm4ga25leC5zY2hlbWEuZHJvcFRhYmxlKFwiJHt0YWJsZX1cIik7YCxcbiAgICBcIn1cIixcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICB0YWJsZSxcbiAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIHRpdGxlOiBgY3JlYXRlX18ke3RhYmxlfWAsXG4gICAgZm9ybWF0dGVkOiBmb3JtYXRDb2RlKGxpbmVzLmpvaW4oXCJcXG5cIiksIFwidHlwZXNjcmlwdFwiLCBgc3JjL21pZ3JhdGlvbi8ke3RhYmxlfS50c2ApLFxuICB9O1xufVxuXG4vKipcbiAqIE1pZ3JhdGlvbkNvbHVtbltdIOydveyWtOyEnCDsu6zrn7wg7KCV7J2Y7ZWY64qUIOq1rOusuCDsg53shLFcbiAqIEByZXR1cm5zIGJ1aWxkZXI6IHRhYmxlIGJ1aWxkZXIg66mU7ISc65OcLCByYXc6IGtuZXgucmF3KCkg6rWs66y4XG4gKi9cbmZ1bmN0aW9uIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlOiBzdHJpbmcsIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdKTogQ29sdW1uRGVmaW5pdGlvblJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdDogQ29sdW1uRGVmaW5pdGlvblJlc3VsdCA9IHtcbiAgICBidWlsZGVyOiBbXSxcbiAgICByYXc6IFtdLFxuICB9O1xuXG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAvLyBHZW5lcmF0ZWQgQ29sdW1u7J2AIHJhd+uhnCDsspjrpqxcbiAgICBpZiAoY29sdW1uLmdlbmVyYXRlZCkge1xuICAgICAgcmVzdWx0LnJhdy5wdXNoKGdlbkdlbmVyYXRlZENvbHVtbkRlZmluaXRpb24odGFibGUsIGNvbHVtbikpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8g7J2867CYIOy7rOufvOydgCBidWlsZGVy66GcIOyymOumrFxuICAgIHJlc3VsdC5idWlsZGVyLnB1c2goZ2VuTm9ybWFsQ29sdW1uRGVmaW5pdGlvbihjb2x1bW4pKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVkIENvbHVtbiDsoJXsnZgg7IOd7ISxIChBTFRFUiBUQUJMRSBBREQgQ09MVU1OIOyCrOyaqSlcbiAqL1xuZnVuY3Rpb24gZ2VuR2VuZXJhdGVkQ29sdW1uRGVmaW5pdGlvbih0YWJsZTogc3RyaW5nLCBjb2x1bW46IE1pZ3JhdGlvbkNvbHVtbik6IHN0cmluZyB7XG4gIGlmICghY29sdW1uLmdlbmVyYXRlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRlZCBjb2x1bW4gZGVmaW5pdGlvbiByZXF1aXJlZFwiKTtcbiAgfVxuICBjb25zdCBwZ1R5cGUgPSBnZXRQZ1R5cGVGb3JDb2x1bW4oY29sdW1uKTtcbiAgY29uc3Qgc3RvcmFnZVR5cGUgPSBjb2x1bW4uZ2VuZXJhdGVkLnR5cGUgPT09IFwiVklSVFVBTFwiID8gXCIgVklSVFVBTFwiIDogXCIgU1RPUkVEXCI7XG4gIGNvbnN0IG51bGxhYmxlQ2xhdXNlID0gY29sdW1uLm51bGxhYmxlID8gXCJcIiA6IFwiIE5PVCBOVUxMXCI7XG4gIHJldHVybiBgYXdhaXQga25leC5yYXcoXFxgQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIEFERCBDT0xVTU4gXCIke2NvbHVtbi5uYW1lfVwiICR7cGdUeXBlfSBHRU5FUkFURUQgQUxXQVlTIEFTICgke2NvbHVtbi5nZW5lcmF0ZWQuZXhwcmVzc2lvbn0pJHtzdG9yYWdlVHlwZX0ke251bGxhYmxlQ2xhdXNlfVxcYCk7YDtcbn1cblxuLyoqXG4gKiDsnbzrsJgg7Lus65+8IOygleydmCDsg53shLEgKHRhYmxlLnh4eCgpIOyytOyduClcbiAqL1xuZnVuY3Rpb24gZ2VuTm9ybWFsQ29sdW1uRGVmaW5pdGlvbihjb2x1bW46IE1pZ3JhdGlvbkNvbHVtbik6IHN0cmluZyB7XG4gIGNvbnN0IGNoYWluczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoY29sdW1uLm5hbWUgPT09IFwiaWRcIikge1xuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbgg67aE6riwIOyymOumrFxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gc3RyaW5nIFBLOiBsZW5ndGjqsIAg7J6I7Jy866m0IHZhcmNoYXIsIOyXhuycvOuptCB0ZXh0XG4gICAgICBpZiAoY29sdW1uLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBgdGFibGUuc3RyaW5nKCdpZCcsICR7Y29sdW1uLmxlbmd0aH0pLnByaW1hcnkoKS5ub3ROdWxsYWJsZSgpO2A7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHRhYmxlLnRleHQoJ2lkJykucHJpbWFyeSgpLm5vdE51bGxhYmxlKCk7YDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBcInV1aWRcIikge1xuICAgICAgcmV0dXJuIGB0YWJsZS51dWlkKCdpZCcpLnByaW1hcnkoKS5ub3ROdWxsYWJsZSgpO2A7XG4gICAgfVxuICAgIC8vIOq4sOyhtCBpbnRlZ2VyIFBLICjquLDrs7jqsJIpXG4gICAgcmV0dXJuIGB0YWJsZS5pbmNyZW1lbnRzKCkucHJpbWFyeSgpO2A7XG4gIH1cblxuICAvLyDrsLDsl7Qg7YOA7J6FIOyymOumrFxuICBpZiAoY29sdW1uLnR5cGUuZW5kc1dpdGgoXCJbXVwiKSkge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gY29sdW1uLnR5cGUuc2xpY2UoMCwgLTIpOyAvLyBcImludGVnZXJbXVwiIC0+IFwiaW50ZWdlclwiXG4gICAgY29uc3QgcGdUeXBlID0gZ2V0UGdBcnJheVR5cGUoY29sdW1uLCBlbGVtZW50VHlwZSk7XG4gICAgY2hhaW5zLnB1c2goYHNwZWNpZmljVHlwZSgnJHtjb2x1bW4ubmFtZX0nLCAnJHtwZ1R5cGV9JylgKTtcbiAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJ2ZWN0b3JcIikge1xuICAgIC8vIEtuZXjripQgdmVjdG9yIO2DgOyeheydhCDsp4HsoJEg7KeA7JuQ7ZWY7KeAIOyViuycvOuvgOuhnCBzcGVjaWZpY1R5cGUg7IKs7JqpXG4gICAgY2hhaW5zLnB1c2goYHNwZWNpZmljVHlwZSgnJHtjb2x1bW4ubmFtZX0nLCAndmVjdG9yKCR7Y29sdW1uLmRpbWVuc2lvbnN9KScpYCk7XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwibnVtYmVyT3JOdW1lcmljXCIpIHtcbiAgICAvLyBudW1iZXJcbiAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwicmVhbFwiKSB7XG4gICAgICBjaGFpbnMucHVzaChgZmxvYXQoJyR7Y29sdW1uLm5hbWV9JylgKTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcImRvdWJsZSBwcmVjaXNpb25cIikge1xuICAgICAgY2hhaW5zLnB1c2goYGRvdWJsZSgnJHtjb2x1bW4ubmFtZX0nKWApO1xuICAgIH0gZWxzZSBpZiAoKGNvbHVtbi5udW1iZXJUeXBlID8/IFwibnVtZXJpY1wiKSA9PT0gXCJudW1lcmljXCIpIHtcbiAgICAgIGNoYWlucy5wdXNoKGBkZWNpbWFsKCcke2NvbHVtbi5uYW1lfScsICR7Y29sdW1uLnByZWNpc2lvbn0sICR7Y29sdW1uLnNjYWxlfSlgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyBzdHJpbmdcbiAgICBpZiAoY29sdW1uLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGFpbnMucHVzaChgc3RyaW5nKCcke2NvbHVtbi5uYW1lfScsICR7Y29sdW1uLmxlbmd0aH0pYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYWlucy5wdXNoKGB0ZXh0KCcke2NvbHVtbi5uYW1lfScpYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBcImRhdGVcIikge1xuICAgIC8vIGRhdGVcbiAgICBjaGFpbnMucHVzaChcbiAgICAgIGB0aW1lc3RhbXAoJyR7Y29sdW1uLm5hbWV9JywgeyB1c2VUejogdHJ1ZSwgcHJlY2lzaW9uOiAke2NvbHVtbi5wcmVjaXNpb24gPz8gM30gfSlgLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwianNvblwiKSB7XG4gICAgLy8ganNvblxuICAgIGNoYWlucy5wdXNoKGBqc29uYignJHtjb2x1bW4ubmFtZX0nKWApO1xuICB9IGVsc2Uge1xuICAgIC8vIHR5cGUsIGxlbmd0aFxuICAgIGxldCBleHRyYVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjaGFpbnMucHVzaChcbiAgICAgIGAke2NvbHVtbi50eXBlfSgnJHtjb2x1bW4ubmFtZX0nJHtcbiAgICAgICAgY29sdW1uLmxlbmd0aCA/IGAsICR7Y29sdW1uLmxlbmd0aH1gIDogXCJcIlxuICAgICAgfSR7ZXh0cmFUeXBlID8gYCwgJyR7ZXh0cmFUeXBlfSdgIDogXCJcIn0pYCxcbiAgICApO1xuICB9XG5cbiAgLy8gbnVsbGFibGVcbiAgY2hhaW5zLnB1c2goY29sdW1uLm51bGxhYmxlID8gXCJudWxsYWJsZSgpXCIgOiBcIm5vdE51bGxhYmxlKClcIik7XG5cbiAgLy8gZGVmYXVsdFRvXG4gIGlmIChjb2x1bW4uZGVmYXVsdFRvICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5kZWZhdWx0VG8gPT09IFwic3RyaW5nXCIgJiYgY29sdW1uLmRlZmF1bHRUby5zdGFydHNXaXRoKGBcImApKSB7XG4gICAgICBjaGFpbnMucHVzaChgZGVmYXVsdFRvKCR7Y29sdW1uLmRlZmF1bHRUb30pYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYWlucy5wdXNoKGBkZWZhdWx0VG8oa25leC5yYXcoJyR7Y29sdW1uLmRlZmF1bHRUb30nKSlgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYHRhYmxlLiR7Y2hhaW5zLmpvaW4oXCIuXCIpfTtgO1xufVxuXG4vKipcbiAqIE1pZ3JhdGlvbkNvbHVtbuydmCDtg4DsnoXsnYQgUG9zdGdyZVNRTCDtg4DsnoUg66y47J6Q7Je066GcIOuzgO2ZmFxuICovXG5mdW5jdGlvbiBnZXRQZ1R5cGVGb3JDb2x1bW4oY29sdW1uOiBNaWdyYXRpb25Db2x1bW4pOiBzdHJpbmcge1xuICBpZiAoY29sdW1uLnR5cGUuZW5kc1dpdGgoXCJbXVwiKSkge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gY29sdW1uLnR5cGUuc2xpY2UoMCwgLTIpO1xuICAgIHJldHVybiBnZXRQZ0FycmF5VHlwZShjb2x1bW4sIGVsZW1lbnRUeXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gY29sdW1uLmxlbmd0aCAhPT0gdW5kZWZpbmVkID8gYHZhcmNoYXIoJHtjb2x1bW4ubGVuZ3RofSlgIDogXCJ0ZXh0XCI7XG4gICAgY2FzZSBcImJpZ0ludGVnZXJcIjpcbiAgICAgIHJldHVybiBcImJpZ2ludFwiO1xuICAgIGNhc2UgXCJudW1iZXJPck51bWVyaWNcIjpcbiAgICAgIGlmIChjb2x1bW4ubnVtYmVyVHlwZSA9PT0gXCJyZWFsXCIpIHJldHVybiBcInJlYWxcIjtcbiAgICAgIGlmIChjb2x1bW4ubnVtYmVyVHlwZSA9PT0gXCJkb3VibGUgcHJlY2lzaW9uXCIpIHJldHVybiBcImRvdWJsZSBwcmVjaXNpb25cIjtcbiAgICAgIHJldHVybiBgbnVtZXJpYygke2NvbHVtbi5wcmVjaXNpb259LCAke2NvbHVtbi5zY2FsZX0pYDtcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgICAgcmV0dXJuIFwidGltZXN0YW1wdHpcIjtcbiAgICBjYXNlIFwianNvblwiOlxuICAgICAgcmV0dXJuIFwianNvbmJcIjtcbiAgICBjYXNlIFwidmVjdG9yXCI6XG4gICAgICByZXR1cm4gYHZlY3Rvcigke2NvbHVtbi5kaW1lbnNpb25zfSlgO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gY29sdW1uLnR5cGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0UGdBcnJheVR5cGUoY29sdW1uOiBNaWdyYXRpb25Db2x1bW4sIGVsZW1lbnRUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwibnVtYmVyT3JOdW1lcmljXCIpIHtcbiAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwicmVhbFwiKSByZXR1cm4gXCJyZWFsW11cIjtcbiAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwiZG91YmxlIHByZWNpc2lvblwiKSByZXR1cm4gXCJkb3VibGUgcHJlY2lzaW9uW11cIjtcbiAgICByZXR1cm4gYG51bWVyaWMoJHtjb2x1bW4ucHJlY2lzaW9ufSwgJHtjb2x1bW4uc2NhbGV9KVtdYDtcbiAgfVxuICBpZiAoZWxlbWVudFR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gY29sdW1uLmxlbmd0aCA/IGB2YXJjaGFyKCR7Y29sdW1uLmxlbmd0aH0pW11gIDogXCJ0ZXh0W11cIjtcbiAgfVxuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiZGF0ZVwiKSByZXR1cm4gXCJ0aW1lc3RhbXB0eltdXCI7XG4gIGlmIChlbGVtZW50VHlwZSA9PT0gXCJpbnRlZ2VyXCIpIHJldHVybiBcImludGVnZXJbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiYmlnSW50ZWdlclwiKSByZXR1cm4gXCJiaWdpbnRbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gXCJib29sZWFuW11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcInV1aWRcIikgcmV0dXJuIFwidXVpZFtdXCI7XG4gIGlmIChlbGVtZW50VHlwZSA9PT0gXCJlbnVtXCIpIHJldHVybiBcInRleHRbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwidmVjdG9yXCIpIHJldHVybiBgdmVjdG9yKCR7Y29sdW1uLmRpbWVuc2lvbnN9KVtdYDtcblxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYXJyYXkgZWxlbWVudCB0eXBlOiAke2VsZW1lbnRUeXBlfWApO1xufVxuXG4vKipcbiAqIOqwnOuzhCDsnbjrjbHsiqQg7KCV7J2YIOyDneyEsVxuICovXG5mdW5jdGlvbiBnZW5JbmRleERlZmluaXRpb24oaW5kZXg6IE1pZ3JhdGlvbkluZGV4LCB0YWJsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGluZGV4LnR5cGUgPT09IFwiaG5zd1wiIHx8IGluZGV4LnR5cGUgPT09IFwiaXZmZmxhdFwiKSB7XG4gICAgcmV0dXJuIGdlblZlY3RvckluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpO1xuICB9XG5cbiAgaWYgKGluZGV4LnVzaW5nID09PSBcInBncm9vbmdhXCIpIHtcbiAgICByZXR1cm4gZ2VuUGdyb29uZ2FJbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZE1hcCA9IHtcbiAgICBpbmRleDogXCJJTkRFWFwiLFxuICAgIHVuaXF1ZTogXCJVTklRVUUgSU5ERVhcIixcbiAgfTtcblxuICBjb25zdCBudWxsc05vdERpc3RpbmN0Q2xhdXNlID1cbiAgICBpbmRleC50eXBlID09PSBcInVuaXF1ZVwiICYmIGluZGV4Lm51bGxzTm90RGlzdGluY3QgIT09IHVuZGVmaW5lZFxuICAgICAgPyBgIE5VTExTICR7aW5kZXgubnVsbHNOb3REaXN0aW5jdCA/IFwiTk9UIERJU1RJTkNUXCIgOiBcIkRJU1RJTkNUXCJ9YFxuICAgICAgOiBcIlwiO1xuXG4gIGNvbnN0IHVzaW5nQ2xhdXNlID0gaW5kZXgudXNpbmcgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBgVVNJTkcgJHtpbmRleC51c2luZ31gO1xuXG4gIHJldHVybiBgYXdhaXQga25leC5yYXcoXG4gIFxcYENSRUFURSAke21ldGhvZE1hcFtpbmRleC50eXBlXX0gJHtpbmRleC5uYW1lfSBPTiAke3RhYmxlfSAke3VzaW5nQ2xhdXNlfSgke2luZGV4LmNvbHVtbnNcbiAgICAubWFwKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IG9wY2xhc3NDbGF1c2UgPSAoKCkgPT4ge1xuICAgICAgICBjb25zdCBvcGNsYXNzID0gZ2V0SW5kZXhDb2x1bW5PcGNsYXNzKGNvbCk7XG4gICAgICAgIHJldHVybiBvcGNsYXNzID8gYCAke29wY2xhc3N9YCA6IFwiXCI7XG4gICAgICB9KSgpO1xuXG4gICAgICAvLyDsoJXroKwg7Ji17IWY7J2AIGJ0cmVl66eMIOyCrOyaqSDqsIDriqVcbiAgICAgIGlmIChpbmRleC51c2luZyAhPT0gXCJidHJlZVwiICYmIGluZGV4LnVzaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGAke2NvbC5uYW1lfSR7b3BjbGFzc0NsYXVzZX1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3J0T3JkZXJDbGF1c2UgPSBjb2wuc29ydE9yZGVyID09PSB1bmRlZmluZWQgPyBcIlwiIDogYCAke2NvbC5zb3J0T3JkZXJ9YDtcbiAgICAgIGNvbnN0IG51bGxzRmlyc3RDbGF1c2UgPVxuICAgICAgICBjb2wubnVsbHNGaXJzdCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgTlVMTFMgJHtjb2wubnVsbHNGaXJzdCA/IFwiRklSU1RcIiA6IFwiTEFTVFwifWA7XG4gICAgICByZXR1cm4gYCR7Y29sLm5hbWV9JHtvcGNsYXNzQ2xhdXNlfSR7c29ydE9yZGVyQ2xhdXNlfSR7bnVsbHNGaXJzdENsYXVzZX1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCIsIFwiKX0pJHtudWxsc05vdERpc3RpbmN0Q2xhdXNlfTtcXGBcbiAgKTtgO1xufVxuXG5mdW5jdGlvbiBnZW5QZ3Jvb25nYUluZGV4RGVmaW5pdGlvbihpbmRleDogTWlncmF0aW9uSW5kZXgsIHRhYmxlOiBzdHJpbmcpIHtcbiAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXRCeVRhYmxlKHRhYmxlKTtcblxuICAvLyDrs7Xtlakg7J24642x7Iqk7J24IOqyveyasCBBUlJBWSDsgqzsmqlcbiAgY29uc3QgY29sdW1uQ2xhdXNlID0gKCgpID0+IHtcbiAgICBpZiAoaW5kZXguY29sdW1ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGVudGl0eS5wcm9wc0RpY3RbaW5kZXguY29sdW1uc1swXS5uYW1lXTtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IGdldFBncm9vbmdhQ29sdW1uT3B0aW9uKGNvbHVtbik7XG4gICAgICByZXR1cm4gYCR7aW5kZXguY29sdW1uc1swXS5uYW1lfSR7b3B0aW9uID8gYCAke29wdGlvbn1gIDogXCJcIn1gO1xuICAgIH1cblxuICAgIHJldHVybiBgKEFSUkFZWyR7aW5kZXguY29sdW1ucy5tYXAoKGNvbCkgPT4gYCR7Y29sLm5hbWV9Ojp0ZXh0YCkuam9pbihcIixcIil9XSlgO1xuICB9KSgpO1xuXG4gIHJldHVybiBgYXdhaXQga25leC5yYXcoXG4gIFxcYENSRUFURSBJTkRFWCAke2luZGV4Lm5hbWV9IE9OICR7dGFibGV9IFVTSU5HIHBncm9vbmdhICgke2NvbHVtbkNsYXVzZX0pIFdJVEggKHRva2VuaXplcj0nVG9rZW5NZWNhYicpO1xcYFxuICApYDtcbn1cblxuLyoqXG4gKiBQR3Jvb25nYSDsu6zrn7wg7Ji17IWYIOy2lOy2nFxuICpcbiAqIEZ1bGxUZXh0IOyYpO2NvOugiOydtO2EsOulvCDsp4Dsm5DtlZjripQg6rK97JqwIOyasOyEoCDshKTsoJUsIOuCmOuouOyngOuKlCDrlJTtj7Ttirgg7J207JqpXG4gKiBAbGluayBodHRwczovL3Bncm9vbmdhLmdpdGh1Yi5pby9yZWZlcmVuY2VcbiAqL1xuZnVuY3Rpb24gZ2V0UGdyb29uZ2FDb2x1bW5PcHRpb24oY29sdW1uOiBFbnRpdHlQcm9wKSB7XG4gIGlmIChjb2x1bW4udHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBjb2x1bW4ubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gXCJwZ3Jvb25nYV92YXJjaGFyX2Z1bGxfdGV4dF9zZWFyY2hfb3BzX3YyXCI7XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwianNvblwiKSB7XG4gICAgcmV0dXJuIFwicGdyb29uZ2FfanNvbmJfZnVsbF90ZXh0X3NlYXJjaF9vcHNfdjJcIjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIC0gSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCk6IOuKkOumsCDruYzrk5wsIOu5oOuluCDqsoDsg4kg7IaN64+ELCDrhpLsnYAg66mU66qo66asIOuwjyDsoJXtmZXrj4RcbiAqIC0gSVZGRmxhdCAoSW52ZXJ0ZWQgRmlsZSB3aXRoIEZsYXQgQ29tcHJlc3Npb24pOiDruaDrpbgg67mM65OcLCDspJHqsIQg6rKA7IOJIOyGjeuPhCwg64Ku7J2AIOuplOuqqOumrFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBITlNXIOyduOuNseyKpCAo6raM7J6lIC0g67mg66W4IOqygOyDiSwg64aS7J2AIOygle2ZleuPhClcbiAqIENSRUFURSBJTkRFWCBpZHhfZW1iZWRkaW5nIE9OIGl0ZW1zIFVTSU5HIGhuc3cgKGVtYmVkZGluZyB2ZWN0b3JfY29zaW5lX29wcykgV0lUSCAobSA9IDE2LCBlZl9jb25zdHJ1Y3Rpb24gPSA2NCk7XG4gKlxuICogLy8gSVZGRmxhdCDsnbjrjbHsiqQgKOuMgOyaqeufiSDrjbDsnbTthLAsIOu5hOyaqSDspJHsmpQg7IucKVxuICogQ1JFQVRFIElOREVYIGlkeF9lbWJlZGRpbmcgT04gaXRlbXMgVVNJTkcgaXZmZmxhdCAoZW1iZWRkaW5nIHZlY3Rvcl9jb3NpbmVfb3BzKSBXSVRIIChsaXN0cyA9IDEwMCk7XG4gKi9cbmZ1bmN0aW9uIGdlblZlY3RvckluZGV4RGVmaW5pdGlvbihpbmRleDogTWlncmF0aW9uSW5kZXgsIHRhYmxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb2x1bW4gPSBpbmRleC5jb2x1bW5zWzBdO1xuICBjb25zdCB2ZWN0b3JPcHMgPSBnZXRJbmRleENvbHVtbk9wY2xhc3MoY29sdW1uKSA/PyBcInZlY3Rvcl9jb3NpbmVfb3BzXCI7XG5cbiAgLy8gSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCkgLSDqtozsnqU6IOu5oOuluCDqsoDsg4ksIOuGkuydgCDsoJXtmZXrj4RcbiAgaWYgKGluZGV4LnR5cGUgPT09IFwiaG5zd1wiKSB7XG4gICAgY29uc3QgbSA9IGluZGV4Lm0gPz8gMTY7XG4gICAgY29uc3QgZWZDb25zdHJ1Y3Rpb24gPSBpbmRleC5lZkNvbnN0cnVjdGlvbiA/PyA2NDtcbiAgICByZXR1cm4gYGF3YWl0IGtuZXgucmF3KFxcYENSRUFURSBJTkRFWCAke2luZGV4Lm5hbWV9IE9OICR7dGFibGV9IFVTSU5HIGhuc3cgKCR7Y29sdW1uLm5hbWV9ICR7dmVjdG9yT3BzfSkgV0lUSCAobSA9ICR7bX0sIGVmX2NvbnN0cnVjdGlvbiA9ICR7ZWZDb25zdHJ1Y3Rpb259KVxcYCk7YDtcbiAgfVxuXG4gIC8vIElWRkZsYXQgKEludmVydGVkIEZpbGUgd2l0aCBGbGF0IENvbXByZXNzaW9uKSAtIOuMgOyaqeufiSwg67mE7JqpIOykkeyalCDsi5xcbiAgaWYgKGluZGV4LnR5cGUgPT09IFwiaXZmZmxhdFwiKSB7XG4gICAgY29uc3QgbGlzdHMgPSBpbmRleC5saXN0cyA/PyAxMDA7XG4gICAgcmV0dXJuIGBhd2FpdCBrbmV4LnJhdyhcXGBDUkVBVEUgSU5ERVggJHtpbmRleC5uYW1lfSBPTiAke3RhYmxlfSBVU0lORyBpdmZmbGF0ICgke2NvbHVtbi5uYW1lfSAke3ZlY3Rvck9wc30pIFdJVEggKGxpc3RzID0gJHtsaXN0c30pXFxgKTtgO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJhdyBTUUwgaW5kZXggdHlwZTogJHtpbmRleC50eXBlfWApO1xufVxuXG4vKipcbiAqIO2FjOydtOu4lCDsg53shLHtlZjripQg7LyA7J207IqkIC0gRksg7IOd7ISxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQ3JlYXRlQ29kZV9Gb3JlaWduKFxuICB0YWJsZTogc3RyaW5nLFxuICBmb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdLFxuKTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlW10+IHtcbiAgaWYgKGZvcmVpZ25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHsgdXAsIGRvd24gfSA9IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZm9yZWlnbnMpO1xuICBpZiAodXAubGVuZ3RoID09PSAwICYmIGRvd24ubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gZm9yZWlnbnPqsIAg7J6I64qU642wIOyDneyEseuQnCDsvZTrk5zqsIAg7JeG64qUIOqyveyasOuKlCDruYTsoJXsg4HsoIHsnbgg7IOB7Zmp7J207KeA66eMLFxuICAgIC8vIOuniOydtOq3uOugiOydtOyFmCDsg53shLHsnYQg7KSR64uo7Iuc7YKk7KeAIOyViuqzoCDruYgg67Cw7Je07J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgJ2ltcG9ydCB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgYHJldHVybiBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCxcbiAgICBcIi8vIGNyZWF0ZSBma1wiLFxuICAgIC4uLnVwLFxuICAgIFwifSk7XCIsXG4gICAgXCJ9XCIsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3duKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICBgcmV0dXJuIGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLFxuICAgIFwiLy8gZHJvcCBma1wiLFxuICAgIC4uLmRvd24sXG4gICAgXCJ9KTtcIixcbiAgICBcIn1cIixcbiAgXTtcblxuICBjb25zdCBmb3JlaWduS2V5c1N0cmluZyA9IGZvcmVpZ25zLm1hcCgoZm9yZWlnbikgPT4gZm9yZWlnbi5jb2x1bW5zLmpvaW4oXCJfXCIpKS5qb2luKFwiX1wiKTtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHR5cGU6IFwiZm9yZWlnblwiLFxuICAgICAgdGl0bGU6IGBmb3JlaWduX18ke3RhYmxlfV9fJHtmb3JlaWduS2V5c1N0cmluZ31gLFxuICAgICAgZm9ybWF0dGVkOiBmb3JtYXRDb2RlKGxpbmVzLmpvaW4oXCJcXG5cIiksIFwidHlwZXNjcmlwdFwiLCBgc3JjL21pZ3JhdGlvbi8ke3RhYmxlfS50c2ApLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogTWlncmF0aW9uRm9yZWlnbltdIOydveyWtOyEnCDsmbjrtoDtgqQgY29uc3RyYWludCDsoJXsnZjtlZjripQg6rWs66y4IOyDneyEsVxuICovXG5mdW5jdGlvbiBnZW5Gb3JlaWduRGVmaW5pdGlvbnMoXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4pOiB7IHVwOiBzdHJpbmdbXTsgZG93bjogc3RyaW5nW10gfSB7XG4gIHJldHVybiBmb3JlaWducy5yZWR1Y2UoXG4gICAgKHIsIGZvcmVpZ24pID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbnNTdHJpbmdRdW90ZSA9IGZvcmVpZ24uY29sdW1uc1xuICAgICAgICAubWFwKChjb2wpID0+IGAnJHtjb2wucmVwbGFjZShgJHt0YWJsZX0uYCwgXCJcIil9J2ApXG4gICAgICAgIC5qb2luKFwiLFwiKTtcbiAgICAgIHIudXAucHVzaChcbiAgICAgICAgYHRhYmxlLmZvcmVpZ24oJyR7Zm9yZWlnbi5jb2x1bW5zLmpvaW4oXCIsXCIpfScpXG4gICAgICAgICAgICAucmVmZXJlbmNlcygnJHtmb3JlaWduLnRvfScpXG4gICAgICAgICAgICAub25VcGRhdGUoJyR7Zm9yZWlnbi5vblVwZGF0ZX0nKVxuICAgICAgICAgICAgLm9uRGVsZXRlKCcke2ZvcmVpZ24ub25EZWxldGV9JylgLFxuICAgICAgKTtcbiAgICAgIHIuZG93bi5wdXNoKGB0YWJsZS5kcm9wRm9yZWlnbihbJHtjb2x1bW5zU3RyaW5nUXVvdGV9XSlgKTtcbiAgICAgIHJldHVybiByO1xuICAgIH0sXG4gICAge1xuICAgICAgdXA6IFtdIGFzIHN0cmluZ1tdLFxuICAgICAgZG93bjogW10gYXMgc3RyaW5nW10sXG4gICAgfSxcbiAgKTtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg67OA6rK9IOy8gOydtOyKpCAtIOy7rOufvC/snbjrjbHsiqQg67OA6rK9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXMoXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGVudGl0eUNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBlbnRpdHlJbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLFxuICBkYkNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBkYkluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sXG4gIGRiRm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgY29tcGFyZURCPzogS25leCxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIGNvbnN0IHJlc29sdmVkRW50aXR5Q29sdW1ucyA9IHJlc29sdmVTZWFyY2hUZXh0Q29sdW1ucyh0YWJsZSwgZW50aXR5Q29sdW1ucyk7XG4gIGNvbnN0IHNlYXJjaFRleHRDb2x1bW5OYW1lcyA9IGdldFNlYXJjaFRleHRDb2x1bW5OYW1lcyh0YWJsZSk7XG4gIC8qXG4gICAg7IS467aAIOu5hOq1kCDtm4Qg64uk66W47KCQIOywvuyVhOyEnCDsvZTrk5wg7IOd7ISxXG5cbiAgICAxLiDsu6zrn7zqsK/siJgg64uk66aEOiBNROyXkCDsnojsnLzrgpgsIERC7JeQIOyXhuuLpOuptCDstpTqsIBcbiAgICAyLiDsu6zrn7zqsK/siJgg64uk66aEOiBNROyXkCDsl4bsnLzrgpgsIERC7JeQIOyeiOuLpOuptCDsgq3soJxcbiAgICAzLiDqt7jsmbgg7Lus65+8KOy7rOufvCDqsK/siJjqsIAg64+Z7J287ZWY6rGw64KYLCDri6Trpbgg6rK97JqwIOuPmeydvO2VnCDsu6zrn7zrgbzrpqwpID0+IGFsdGVyXG4gICAgNC4g64uk66W46rGwIOuLpCDrj5nsnbztlZjqs6AgaW5kZXjrp4wg67OA6rK965CY64qUIOqyveyasFxuXG4gICAgKiog7Lus65+866qF7J2EIOuzgOqyve2VmOuKlCDqsr3smrDripQg65Sw66GcIO2VuOuTpOunge2VmOyngCDslYrsnYxcbiAgICA9PiBkcm9wL2FkZCDtmJXtg5zsnZgg66eI7J206re466CI7J207IWYIOy9lOuTnOqwgCDsg53shLHrkJjripTrjbAsIOyImOuPmeycvOuhnCByZW5hbWUg7L2U65Oc66GcIOyImOygle2VmOyXrCDsspjrpqxcbiAgKi9cblxuICAvLyBQSyhpZCkg7Lus65+8IO2DgOyehSDrs4Dqsr0g6rCQ7KeAIOuwjyDsspjrpqxcbiAgY29uc3QgZW50aXR5SWRDb2wgPSByZXNvbHZlZEVudGl0eUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJpZFwiKTtcbiAgY29uc3QgZGJJZENvbCA9IGRiQ29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5uYW1lID09PSBcImlkXCIpO1xuXG4gIGlmIChlbnRpdHlJZENvbCAmJiBkYklkQ29sICYmIGNvbXBhcmVEQikge1xuICAgIGNvbnN0IGlzUGtUeXBlQ2hhbmdlZCA9XG4gICAgICBlbnRpdHlJZENvbC50eXBlICE9PSBkYklkQ29sLnR5cGUgfHwgZW50aXR5SWRDb2wubGVuZ3RoICE9PSBkYklkQ29sLmxlbmd0aDtcblxuICAgIGlmIChpc1BrVHlwZUNoYW5nZWQpIHtcbiAgICAgIHJldHVybiBnZW5lcmF0ZVBrVHlwZUNoYW5nZU1pZ3JhdGlvbihcbiAgICAgICAgdGFibGUsXG4gICAgICAgIGVudGl0eUlkQ29sLFxuICAgICAgICBkYklkQ29sLFxuICAgICAgICByZXNvbHZlZEVudGl0eUNvbHVtbnMsXG4gICAgICAgIGVudGl0eUluZGV4ZXMsXG4gICAgICAgIGRiQ29sdW1ucyxcbiAgICAgICAgZGJJbmRleGVzLFxuICAgICAgICBkYkZvcmVpZ25zLFxuICAgICAgICBjb21wYXJlREIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIOqwgSDsu6zrn7wg7J2066aEIOq4sOykgOycvOuhnCBhZGQsIGRyb3AsIGFsdGVyIOyXrOu2gCDtmZXsnbhcbiAgY29uc3QgYWx0ZXJDb2x1bW5zVG8gPSBnZXRBbHRlckNvbHVtbnNUbyhyZXNvbHZlZEVudGl0eUNvbHVtbnMsIGRiQ29sdW1ucywgc2VhcmNoVGV4dENvbHVtbk5hbWVzKTtcblxuICAvLyDstpTstpzrkJwg7Lus65+865Ok7J2EIOq4sOykgOycvOuhnCDqsIHqsIEg65287J24IOyDneyEsVxuICBjb25zdCBhbHRlckNvbHVtbkxpbmVzVG8gPSBnZXRBbHRlckNvbHVtbkxpbmVzVG8oXG4gICAgYWx0ZXJDb2x1bW5zVG8sXG4gICAgcmVzb2x2ZWRFbnRpdHlDb2x1bW5zLFxuICAgIHRhYmxlLFxuICAgIGRiRm9yZWlnbnMsXG4gICk7XG5cbiAgLy8g7J24642x7Iqk7J2YIGFkZCwgZHJvcCDsl6zrtoAg7ZmV7J24XG4gIGNvbnN0IGFsdGVySW5kZXhlc1RvID0gZ2V0QWx0ZXJJbmRleGVzVG8oZW50aXR5SW5kZXhlcywgZGJJbmRleGVzKTtcbiAgY29uc3QgcmVjcmVhdGVkU2VhcmNoVGV4dENvbHVtbk5hbWVzID0gbmV3IFNldChcbiAgICBhbHRlckNvbHVtbnNUby5hbHRlclxuICAgICAgLmZpbHRlcigoZGJDb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgZW50aXR5Q29sdW1uID0gcmVzb2x2ZWRFbnRpdHlDb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLm5hbWUgPT09IGRiQ29sdW1uLm5hbWUpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHNlYXJjaFRleHRDb2x1bW5OYW1lcy5oYXMoZGJDb2x1bW4ubmFtZSkgJiZcbiAgICAgICAgICBkYkNvbHVtbi5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGVudGl0eUNvbHVtbj8uZ2VuZXJhdGVkICE9PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKSxcbiAgKTtcbiAgY29uc3QgcmVjcmVhdGVkU2VhcmNoVGV4dERiSW5kZXhlcyA9IGRiSW5kZXhlcy5maWx0ZXIoXG4gICAgKGluZGV4KSA9PlxuICAgICAgaW5kZXguY29sdW1ucy5zb21lKCh7IG5hbWUgfSkgPT4gcmVjcmVhdGVkU2VhcmNoVGV4dENvbHVtbk5hbWVzLmhhcyhuYW1lKSkgJiZcbiAgICAgIGFsdGVySW5kZXhlc1RvLmRyb3Auc29tZSgoZHJvcEluZGV4KSA9PiBkcm9wSW5kZXgubmFtZSA9PT0gaW5kZXgubmFtZSkgPT09IGZhbHNlLFxuICApO1xuICBjb25zdCByZWNyZWF0ZWRTZWFyY2hUZXh0RW50aXR5SW5kZXhlcyA9IGVudGl0eUluZGV4ZXMuZmlsdGVyKFxuICAgIChpbmRleCkgPT5cbiAgICAgIGluZGV4LmNvbHVtbnMuc29tZSgoeyBuYW1lIH0pID0+IHJlY3JlYXRlZFNlYXJjaFRleHRDb2x1bW5OYW1lcy5oYXMobmFtZSkpICYmXG4gICAgICBhbHRlckluZGV4ZXNUby5hZGQuc29tZSgoYWRkSW5kZXgpID0+IGFkZEluZGV4Lm5hbWUgPT09IGluZGV4Lm5hbWUpID09PSBmYWxzZSxcbiAgKTtcbiAgY29uc3QgaW1wbGljaXRseURyb3BwZWREYkluZGV4ZXMgPSBhbHRlckluZGV4ZXNUby5kcm9wLmZpbHRlcigoaW5kZXgpID0+XG4gICAgaW5kZXguY29sdW1ucy5ldmVyeSgoeyBuYW1lIH0pID0+IGFsdGVyQ29sdW1uc1RvLmRyb3Auc29tZSgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSA9PT0gbmFtZSkpLFxuICApO1xuXG4gIC8vIOyduOuNseyKpOqwgCDsgq3soJzrkJjripQg6rK97JqwLCDsu6zrn7zqs7wg6rCZ7J20IOyCreygnOuQnCDsvIDsnbTsiqTsl5DripQgZHJvcOyXkOyEnCDsoJzsmbjtlbTslbztlaghXG4gIGNvbnN0IGluZGV4TmVlZHNUb0Ryb3AgPSBhbHRlckluZGV4ZXNUby5kcm9wLmZpbHRlcihcbiAgICAoaW5kZXgpID0+XG4gICAgICBpbXBsaWNpdGx5RHJvcHBlZERiSW5kZXhlcy5zb21lKChkcm9wcGVkSW5kZXgpID0+IGRyb3BwZWRJbmRleC5uYW1lID09PSBpbmRleC5uYW1lKSA9PT0gZmFsc2UsXG4gICk7XG5cbiAgLy8g67mIIOy9lOuTnCDsg53shLEg67Cp7KeAXG4gIGNvbnN0IGhhc1VwQ2hhbmdlcyA9XG4gICAgYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5idWlsZGVyLmxlbmd0aCA+IDAgfHxcbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLnJhdy5sZW5ndGggPiAwIHx8XG4gICAgYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AudXAuYnVpbGRlci5sZW5ndGggPiAwIHx8XG4gICAgYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLnVwLmJ1aWxkZXIubGVuZ3RoID4gMCB8fFxuICAgIGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci51cC5yYXcubGVuZ3RoID4gMCB8fFxuICAgIGFsdGVySW5kZXhlc1RvLmFkZC5sZW5ndGggPiAwIHx8XG4gICAgaW5kZXhOZWVkc1RvRHJvcC5sZW5ndGggPiAwIHx8XG4gICAgcmVjcmVhdGVkU2VhcmNoVGV4dERiSW5kZXhlcy5sZW5ndGggPiAwO1xuICBpZiAoIWhhc1VwQ2hhbmdlcykge1xuICAgIC8vIOuzgOqyveyCrO2VreydtCDsl4bsnLzrqbQg67mIIOuwsOyXtCDrsJjtmZhcbiAgICByZXR1cm4gW107XG4gIH1cbiAgTmFpdGUudChcIm1pZ3JhdG9yOmdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXM6ZGVidWdcIiwge1xuICAgIFwiYWx0ZXJDb2x1bW5zVG8uYWRkLmxlbmd0aFwiOiBhbHRlckNvbHVtbnNUby5hZGQubGVuZ3RoLFxuICAgIFwiYWx0ZXJDb2x1bW5zVG8uZHJvcC5sZW5ndGhcIjogYWx0ZXJDb2x1bW5zVG8uZHJvcC5sZW5ndGgsXG4gICAgXCJhbHRlckNvbHVtbnNUby5hbHRlci5sZW5ndGhcIjogYWx0ZXJDb2x1bW5zVG8uYWx0ZXIubGVuZ3RoLFxuICAgIFwiYWx0ZXJJbmRleGVzVG8uYWRkLmxlbmd0aFwiOiBhbHRlckluZGV4ZXNUby5hZGQubGVuZ3RoLFxuICAgIFwiYWx0ZXJJbmRleGVzVG8uZHJvcC5sZW5ndGhcIjogYWx0ZXJJbmRleGVzVG8uZHJvcC5sZW5ndGgsXG4gICAgXCJpbmRleE5lZWRzVG9Ecm9wLmxlbmd0aFwiOiBpbmRleE5lZWRzVG9Ecm9wLmxlbmd0aCxcbiAgfSk7XG4gIC8vIE5haXRlLnQoXCJtaWdyYXRvcjpnZW5lcmF0ZUFsdGVyQ29kZV9Db2x1bW5BbmRJbmRleGVzOmFsdGVyQ29sdW1uc1RvXCIsIGFsdGVyQ29sdW1uc1RvKTtcblxuICAvLyBUT0RPOiDsnbjrjbHsiqTrqoUg67OA6rK965CcIOqyveyasCDsspjrpqxcblxuICAvLyB0YWJsZSBidWlsZGVyIOuplOyEnOuTnOuhnCDsi6TtlontlaAg7L2U65OcIChkcm9wIOKGkiBhZGQg4oaSIGFsdGVyIOyInOyEnClcbiAgY29uc3QgdXBCdWlsZGVyTGluZXMgPSBbXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5kcm9wLnVwLmJ1aWxkZXIubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5kcm9wLnVwLmJ1aWxkZXIgOiBbXSksXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5hZGQudXAuYnVpbGRlci5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5idWlsZGVyIDogW10pLFxuICAgIC4uLnJlY3JlYXRlZFNlYXJjaFRleHREYkluZGV4ZXMubWFwKGdlbkluZGV4RHJvcERlZmluaXRpb24pLFxuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAuYnVpbGRlci5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLnVwLmJ1aWxkZXIgOiBbXSksXG4gICAgLi4uaW5kZXhOZWVkc1RvRHJvcC5tYXAoZ2VuSW5kZXhEcm9wRGVmaW5pdGlvbiksXG4gIF07XG5cbiAgLy8ga25leC5yYXcoKeuhnCDsi6TtlontlaAg7L2U65OcXG4gIGNvbnN0IHVwUmF3TGluZXMgPSBbXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5hZGQudXAucmF3Lmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLnJhdyA6IFtdKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLnVwLnJhdy5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLnVwLnJhdyA6IFtdKSxcbiAgICAuLi5yZWNyZWF0ZWRTZWFyY2hUZXh0RW50aXR5SW5kZXhlcy5tYXAoKGluZGV4KSA9PiBnZW5JbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKSksXG4gICAgLi4uYWx0ZXJJbmRleGVzVG8uYWRkLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgXTtcblxuICAvLyBkb3du7J2AIHVw7J2YIOyXreyInCAoYWRkLmRvd24gPSBkcm9wIHJvbGxiYWNrLCBkcm9wLmRvd24gPSBhZGQgcm9sbGJhY2spXG4gIGNvbnN0IGRvd25CdWlsZGVyTGluZXMgPSBbXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5hZGQuZG93bi5idWlsZGVyLmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWRkLmRvd24uYnVpbGRlciA6IFtdKSxcbiAgICAuLi5yZWNyZWF0ZWRTZWFyY2hUZXh0RW50aXR5SW5kZXhlcy5tYXAoZ2VuSW5kZXhEcm9wRGVmaW5pdGlvbiksXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci5kb3duLmJ1aWxkZXIubGVuZ3RoID4gMFxuICAgICAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIuZG93bi5idWlsZGVyXG4gICAgICA6IFtdKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AuZG93bi5idWlsZGVyLmxlbmd0aCA+IDBcbiAgICAgID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AuZG93bi5idWlsZGVyXG4gICAgICA6IFtdKSxcbiAgICAuLi5hbHRlckluZGV4ZXNUby5hZGRcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpbmRleCkgPT5cbiAgICAgICAgICBpbmRleC5jb2x1bW5zLmV2ZXJ5KChpbmRleENvbCkgPT5cbiAgICAgICAgICAgIGFsdGVyQ29sdW1uc1RvLmFkZC5tYXAoKGNvbCkgPT4gY29sLm5hbWUpLmluY2x1ZGVzKGluZGV4Q29sLm5hbWUpLFxuICAgICAgICAgICkgPT09IGZhbHNlLFxuICAgICAgKVxuICAgICAgLm1hcChnZW5JbmRleERyb3BEZWZpbml0aW9uKSxcbiAgXTtcblxuICBjb25zdCBkb3duUmF3TGluZXMgPSBbXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5kcm9wLmRvd24ucmF3Lmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC5kb3duLnJhdyA6IFtdKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLmRvd24ucmF3Lmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIuZG93bi5yYXcgOiBbXSksXG4gICAgLi4ucmVjcmVhdGVkU2VhcmNoVGV4dERiSW5kZXhlcy5tYXAoKGluZGV4KSA9PiBnZW5JbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKSksXG4gICAgLi4uaW1wbGljaXRseURyb3BwZWREYkluZGV4ZXMubWFwKChpbmRleCkgPT4gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSkpLFxuICAgIC4uLmluZGV4TmVlZHNUb0Ryb3AubWFwKChpbmRleCkgPT4gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSkpLFxuICBdO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAnaW1wb3J0IHsgS25leCB9IGZyb20gXCJrbmV4XCI7JyxcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICAuLi4odXBCdWlsZGVyTGluZXMubGVuZ3RoID4gMFxuICAgICAgPyBbYGF3YWl0IGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLCAuLi51cEJ1aWxkZXJMaW5lcywgXCJ9KTtcIl1cbiAgICAgIDogW10pLFxuICAgIC4uLnVwUmF3TGluZXMsXG4gICAgXCJ9XCIsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3duKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICAuLi4oZG93bkJ1aWxkZXJMaW5lcy5sZW5ndGggPiAwXG4gICAgICA/IFtgYXdhaXQga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsIC4uLmRvd25CdWlsZGVyTGluZXMsIFwifSk7XCJdXG4gICAgICA6IFtdKSxcbiAgICAuLi5kb3duUmF3TGluZXMsXG4gICAgXCJ9XCIsXG4gIF07XG5cbiAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0Q29kZShsaW5lcy5qb2luKFwiXFxuXCIpLCBcInR5cGVzY3JpcHRcIiwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKTtcbiAgY29uc3QgdGl0bGUgPSBbXG4gICAgXCJhbHRlclwiLFxuICAgIHRhYmxlLFxuICAgIC4uLihbXCJhZGRcIiwgXCJkcm9wXCIsIFwiYWx0ZXJcIl0gYXMgY29uc3QpXG4gICAgICAubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgbGVuID0gYWx0ZXJDb2x1bW5zVG9bYWN0aW9uXS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbiArIGxlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBudWxsKSxcbiAgXS5qb2luKFwiX1wiKTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRhYmxlLFxuICAgICAgdGl0bGUsXG4gICAgICBmb3JtYXR0ZWQsXG4gICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICog7Lus65+8IOu5hOq1kOulvCDsnITtlbQgR2VuZXJhdGVkIENvbHVtbuydmCBleHByZXNzaW9u7J2EIOygnOyZuO2VnCDqsJ3ssrTrpbwg7IOd7ISxXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbkZvckNvbXBhcmlzb24oXG4gIGNvbDogTWlncmF0aW9uQ29sdW1uLFxuICBzZWFyY2hUZXh0Q29sdW1uTmFtZXM6IFNldDxzdHJpbmc+LFxuKTogTWlncmF0aW9uQ29sdW1uIHtcbiAgaWYgKCFjb2wuZ2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNvbDtcbiAgfVxuXG4gIGlmICghc2VhcmNoVGV4dENvbHVtbk5hbWVzLmhhcyhjb2wubmFtZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29sLFxuICAgICAgZ2VuZXJhdGVkOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uY29sLFxuICAgIGdlbmVyYXRlZDoge1xuICAgICAgLi4uY29sLmdlbmVyYXRlZCxcbiAgICAgIGV4cHJlc3Npb246IGNhbm9uaWNhbGl6ZVNlYXJjaFRleHRHZW5lcmF0ZWRFeHByZXNzaW9uKGNvbC5nZW5lcmF0ZWQuZXhwcmVzc2lvbiksXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiDqsIEg7Lus65+8IOydtOumhCDquLDspIDsnLzroZwgYWRkLCBkcm9wLCBhbHRlciDsl6zrtoAg7ZmV7J24XG4gKi9cbmZ1bmN0aW9uIGdldEFsdGVyQ29sdW1uc1RvKFxuICBlbnRpdHlDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgZGJDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgc2VhcmNoVGV4dENvbHVtbk5hbWVzOiBTZXQ8c3RyaW5nPixcbikge1xuICBjb25zdCBjb2x1bW5zVG8gPSB7XG4gICAgYWRkOiBbXSBhcyBNaWdyYXRpb25Db2x1bW5bXSxcbiAgICBkcm9wOiBbXSBhcyBNaWdyYXRpb25Db2x1bW5bXSxcbiAgICBhbHRlcjogW10gYXMgTWlncmF0aW9uQ29sdW1uW10sXG4gIH07XG5cbiAgLy8g7Lus65+866qFIOq4sOykgCDruYTqtZBcbiAgY29uc3QgZXh0cmFDb2x1bW5zID0ge1xuICAgIGRiOiBkaWZmKGRiQ29sdW1ucywgZW50aXR5Q29sdW1ucywgKGNvbCkgPT4gW2NvbC5uYW1lLCBjb2wuZ2VuZXJhdGVkPy50eXBlXS5qb2luKFwiLy8vXCIpKSxcbiAgICBlbnRpdHk6IGRpZmYoZW50aXR5Q29sdW1ucywgZGJDb2x1bW5zLCAoY29sKSA9PiBbY29sLm5hbWUsIGNvbC5nZW5lcmF0ZWQ/LnR5cGVdLmpvaW4oXCIvLy9cIikpLFxuICB9O1xuICBpZiAoZXh0cmFDb2x1bW5zLmVudGl0eS5sZW5ndGggPiAwKSB7XG4gICAgY29sdW1uc1RvLmFkZCA9IGNvbHVtbnNUby5hZGQuY29uY2F0KGV4dHJhQ29sdW1ucy5lbnRpdHkpO1xuICB9XG4gIGlmIChleHRyYUNvbHVtbnMuZGIubGVuZ3RoID4gMCkge1xuICAgIGNvbHVtbnNUby5kcm9wID0gY29sdW1uc1RvLmRyb3AuY29uY2F0KGV4dHJhQ29sdW1ucy5kYik7XG4gIH1cblxuICAvLyDrj5nsnbwg7Lus65+866qF7J2YIOyEuOu2gCDtlYTrk5wg67mE6rWQXG4gIGNvbnN0IHNhbWVEYkNvbHVtbnMgPSBpbnRlcnNlY3Rpb25CeShkYkNvbHVtbnMsIGVudGl0eUNvbHVtbnMsIChjb2wpID0+IGNvbC5uYW1lKTtcbiAgY29uc3Qgc2FtZU1kQ29sdW1ucyA9IGludGVyc2VjdGlvbkJ5KGVudGl0eUNvbHVtbnMsIGRiQ29sdW1ucywgKGNvbCkgPT4gY29sLm5hbWUpO1xuICBjb2x1bW5zVG8uYWx0ZXIgPSBkaWZmZXJlbmNlV2l0aChzYW1lRGJDb2x1bW5zLCBzYW1lTWRDb2x1bW5zLCAoYSwgYikgPT5cbiAgICBlcXVhbChcbiAgICAgIG5vcm1hbGl6ZUNvbHVtbkZvckNvbXBhcmlzb24oYSwgc2VhcmNoVGV4dENvbHVtbk5hbWVzKSxcbiAgICAgIG5vcm1hbGl6ZUNvbHVtbkZvckNvbXBhcmlzb24oYiwgc2VhcmNoVGV4dENvbHVtbk5hbWVzKSxcbiAgICApLFxuICApO1xuXG4gIHJldHVybiBjb2x1bW5zVG87XG59XG5cbi8qKlxuICog7LaU7Lac65CcIOy7rOufvOuTpOydhCDquLDspIDsnLzroZwg6rCB6rCBIOudvOyduCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2V0QWx0ZXJDb2x1bW5MaW5lc1RvKFxuICBjb2x1bW5zVG86IFJldHVyblR5cGU8dHlwZW9mIGdldEFsdGVyQ29sdW1uc1RvPixcbiAgZW50aXR5Q29sdW1uczogTWlncmF0aW9uQ29sdW1uW10sXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGRiRm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbikge1xuICBjb25zdCBzZWFyY2hUZXh0Q29sdW1uTmFtZXMgPSBnZXRTZWFyY2hUZXh0Q29sdW1uTmFtZXModGFibGUpO1xuICBjb25zdCBsaW5lc1RvID0ge1xuICAgIGFkZDoge1xuICAgICAgdXA6IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICAgIGRvd246IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICB9LFxuICAgIGRyb3A6IHtcbiAgICAgIHVwOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgICBkb3duOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgfSxcbiAgICBhbHRlcjoge1xuICAgICAgdXA6IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICAgIGRvd246IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICB9LFxuICB9O1xuXG4gIC8vIGFkZCBjb2x1bW5zXG4gIGNvbnN0IGFkZENvbHVtbkRlZnMgPSBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgY29sdW1uc1RvLmFkZCk7XG4gIGxpbmVzVG8uYWRkLnVwID0ge1xuICAgIGJ1aWxkZXI6IGFkZENvbHVtbkRlZnMuYnVpbGRlci5sZW5ndGggPiAwID8gW1wiLy8gYWRkXCIsIC4uLmFkZENvbHVtbkRlZnMuYnVpbGRlcl0gOiBbXSxcbiAgICByYXc6XG4gICAgICBhZGRDb2x1bW5EZWZzLnJhdy5sZW5ndGggPiAwXG4gICAgICAgID8gW1xuICAgICAgICAgICAgLi4uZ2V0U2VhcmNoVGV4dEhlbHBlckRlZmluaXRpb25zKHRhYmxlLCBjb2x1bW5zVG8uYWRkKSxcbiAgICAgICAgICAgIFwiLy8gYWRkIChnZW5lcmF0ZWQpXCIsXG4gICAgICAgICAgICAuLi5hZGRDb2x1bW5EZWZzLnJhdyxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10sXG4gIH07XG4gIGxpbmVzVG8uYWRkLmRvd24gPSB7XG4gICAgYnVpbGRlcjpcbiAgICAgIGNvbHVtbnNUby5hZGQubGVuZ3RoID4gMFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIFwiLy8gcm9sbGJhY2sgLSBhZGRcIixcbiAgICAgICAgICAgIGB0YWJsZS5kcm9wQ29sdW1ucygke2NvbHVtbnNUby5hZGQubWFwKChjb2wpID0+IGAnJHtjb2wubmFtZX0nYCkuam9pbihcIiwgXCIpfSlgLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSxcbiAgICByYXc6IFtdLFxuICB9O1xuXG4gIC8vIGRyb3DtlaAg7Lus65+87JeQIOqxuOumsCBGSyDssL7quLBcbiAgY29uc3QgZHJvcENvbHVtbk5hbWVzID0gY29sdW1uc1RvLmRyb3AubWFwKChjb2wpID0+IGNvbC5uYW1lKTtcbiAgY29uc3QgZmtUb0Ryb3BCZWZvcmVDb2x1bW4gPSBkYkZvcmVpZ25zLmZpbHRlcigoZmspID0+XG4gICAgZmsuY29sdW1ucy5zb21lKChjb2wpID0+IGRyb3BDb2x1bW5OYW1lcy5pbmNsdWRlcyhjb2wpKSxcbiAgKTtcblxuICBjb25zdCBkcm9wRmtMaW5lcyA9IGZrVG9Ecm9wQmVmb3JlQ29sdW1uLm1hcCgoZmspID0+IHtcbiAgICBjb25zdCBjb2x1bW5zU3RyaW5nUXVvdGUgPSBmay5jb2x1bW5zLm1hcCgoY29sKSA9PiBgJyR7Y29sfSdgKS5qb2luKFwiLFwiKTtcbiAgICByZXR1cm4gYHRhYmxlLmRyb3BGb3JlaWduKFske2NvbHVtbnNTdHJpbmdRdW90ZX1dKWA7XG4gIH0pO1xuXG4gIGNvbnN0IHJlc3RvcmVGa0xpbmVzID0gZ2VuRm9yZWlnbkRlZmluaXRpb25zKHRhYmxlLCBma1RvRHJvcEJlZm9yZUNvbHVtbikudXA7XG5cbiAgLy8gZHJvcOydmCByb2xsYmFja+yLnOyXkOuKlCBnZW5lcmF0ZWQgY29sdW1u64+EIOuzteybkO2VtOyVvCDtlahcbiAgY29uc3QgZHJvcENvbHVtbkRlZnMgPSBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgY29sdW1uc1RvLmRyb3ApO1xuICBsaW5lc1RvLmRyb3AgPSB7XG4gICAgdXA6IHtcbiAgICAgIGJ1aWxkZXI6IFtcbiAgICAgICAgLi4uKGRyb3BGa0xpbmVzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFtcIi8vIGRyb3AgZm9yZWlnbiBrZXlzIG9uIGNvbHVtbnMgdG8gYmUgZHJvcHBlZFwiLCAuLi5kcm9wRmtMaW5lc11cbiAgICAgICAgICA6IFtdKSxcbiAgICAgICAgLi4uKGNvbHVtbnNUby5kcm9wLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgXCIvLyBkcm9wIGNvbHVtbnNcIixcbiAgICAgICAgICAgICAgYHRhYmxlLmRyb3BDb2x1bW5zKCR7Y29sdW1uc1RvLmRyb3AubWFwKChjb2wpID0+IGAnJHtjb2wubmFtZX0nYCkuam9pbihcIiwgXCIpfSlgLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW10pLFxuICAgICAgXSxcbiAgICAgIHJhdzogW10sXG4gICAgfSxcbiAgICBkb3duOiB7XG4gICAgICBidWlsZGVyOiBbXG4gICAgICAgIC4uLihkcm9wQ29sdW1uRGVmcy5idWlsZGVyLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFtcIi8vIHJvbGxiYWNrIC0gZHJvcCBjb2x1bW5zXCIsIC4uLmRyb3BDb2x1bW5EZWZzLmJ1aWxkZXJdXG4gICAgICAgICAgOiBbXSksXG4gICAgICAgIC4uLihyZXN0b3JlRmtMaW5lcy5sZW5ndGggPiAwID8gW1wiLy8gcmVzdG9yZSBmb3JlaWduIGtleXNcIiwgLi4ucmVzdG9yZUZrTGluZXNdIDogW10pLFxuICAgICAgXSxcbiAgICAgIHJhdzpcbiAgICAgICAgZHJvcENvbHVtbkRlZnMucmF3Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgLi4uZ2V0U2VhcmNoVGV4dEhlbHBlckRlZmluaXRpb25zKHRhYmxlLCBjb2x1bW5zVG8uZHJvcCksXG4gICAgICAgICAgICAgIFwiLy8gcm9sbGJhY2sgLSBkcm9wIGNvbHVtbnMgKGdlbmVyYXRlZClcIixcbiAgICAgICAgICAgICAgLi4uZHJvcENvbHVtbkRlZnMucmF3LFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW10sXG4gICAgfSxcbiAgfTtcblxuICAvLyBhbHRlciBjb2x1bW5zIChHZW5lcmF0ZWQgQ29sdW1u7J2AIEFMVEVSIOu2iOqwgO2VmOuvgOuhnCBkcm9wIO2bhCDsnqzsg53shLEpXG4gIGxpbmVzVG8uYWx0ZXIgPSBjb2x1bW5zVG8uYWx0ZXIucmVkdWNlKFxuICAgIChyLCBkYkNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgZW50aXR5Q29sdW1uID0gZW50aXR5Q29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5uYW1lID09PSBkYkNvbHVtbi5uYW1lKTtcbiAgICAgIGlmIChlbnRpdHlDb2x1bW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBzZWFyY2hUZXh0Q29sdW1uTmFtZXMuaGFzKGRiQ29sdW1uLm5hbWUpICYmXG4gICAgICAgIGRiQ29sdW1uLmdlbmVyYXRlZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGVudGl0eUNvbHVtbi5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHIudXAuYnVpbGRlciA9IFtcbiAgICAgICAgICAuLi5yLnVwLmJ1aWxkZXIsXG4gICAgICAgICAgXCIvLyBhbHRlciBnZW5lcmF0ZWQgY29sdW1uXCIsXG4gICAgICAgICAgYHRhYmxlLmRyb3BDb2x1bW5zKCcke2RiQ29sdW1uLm5hbWV9JylgLFxuICAgICAgICBdO1xuICAgICAgICByLnVwLnJhdyA9IFtcbiAgICAgICAgICAuLi5yLnVwLnJhdyxcbiAgICAgICAgICAuLi5nZXRTZWFyY2hUZXh0SGVscGVyRGVmaW5pdGlvbnModGFibGUsIFtlbnRpdHlDb2x1bW5dKSxcbiAgICAgICAgICBcIi8vIGFsdGVyIGdlbmVyYXRlZCBjb2x1bW5cIixcbiAgICAgICAgICBnZW5HZW5lcmF0ZWRDb2x1bW5EZWZpbml0aW9uKHRhYmxlLCBlbnRpdHlDb2x1bW4pLFxuICAgICAgICBdO1xuICAgICAgICByLmRvd24uYnVpbGRlciA9IFtcbiAgICAgICAgICAuLi5yLmRvd24uYnVpbGRlcixcbiAgICAgICAgICBcIi8vIHJvbGxiYWNrIC0gYWx0ZXIgZ2VuZXJhdGVkIGNvbHVtblwiLFxuICAgICAgICAgIGB0YWJsZS5kcm9wQ29sdW1ucygnJHtkYkNvbHVtbi5uYW1lfScpYCxcbiAgICAgICAgXTtcbiAgICAgICAgci5kb3duLnJhdyA9IFtcbiAgICAgICAgICAuLi5yLmRvd24ucmF3LFxuICAgICAgICAgIC4uLmdldFNlYXJjaFRleHRIZWxwZXJEZWZpbml0aW9ucyh0YWJsZSwgW2RiQ29sdW1uXSksXG4gICAgICAgICAgXCIvLyByb2xsYmFjayAtIGFsdGVyIGdlbmVyYXRlZCBjb2x1bW5cIixcbiAgICAgICAgICBnZW5HZW5lcmF0ZWRDb2x1bW5EZWZpbml0aW9uKHRhYmxlLCBkYkNvbHVtbiksXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfVxuXG4gICAgICAvLyDsu6zrn7wg67OA6rK97IKs7ZWtXG4gICAgICBjb25zdCBjb2x1bW5EaWZmVXAgPSBkaWZmKFxuICAgICAgICBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgW2VudGl0eUNvbHVtbl0pLmJ1aWxkZXIsXG4gICAgICAgIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlLCBbZGJDb2x1bW5dKS5idWlsZGVyLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvbHVtbkRpZmZEb3duID0gZGlmZihcbiAgICAgICAgZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIFtkYkNvbHVtbl0pLmJ1aWxkZXIsXG4gICAgICAgIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlLCBbZW50aXR5Q29sdW1uXSkuYnVpbGRlcixcbiAgICAgICk7XG4gICAgICBpZiAoY29sdW1uRGlmZlVwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgci51cC5idWlsZGVyID0gW1xuICAgICAgICAgIC4uLnIudXAuYnVpbGRlcixcbiAgICAgICAgICBcIi8vIGFsdGVyIGNvbHVtblwiLFxuICAgICAgICAgIC4uLmNvbHVtbkRpZmZVcC5tYXAoKGwpID0+IGAke2wucmVwbGFjZShcIjtcIiwgXCJcIil9LmFsdGVyKCk7YCksXG4gICAgICAgIF07XG4gICAgICAgIHIuZG93bi5idWlsZGVyID0gW1xuICAgICAgICAgIC4uLnIuZG93bi5idWlsZGVyLFxuICAgICAgICAgIFwiLy8gcm9sbGJhY2sgLSBhbHRlciBjb2x1bW5cIixcbiAgICAgICAgICAuLi5jb2x1bW5EaWZmRG93bi5tYXAoKGwpID0+IGAke2wucmVwbGFjZShcIjtcIiwgXCJcIil9LmFsdGVyKCk7YCksXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByO1xuICAgIH0sXG4gICAge1xuICAgICAgdXA6IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICAgIGRvd246IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICB9LFxuICApO1xuXG4gIHJldHVybiBsaW5lc1RvO1xufVxuXG4vKipcbiAqIOyduOuNseyKpOydmCBhZGQsIGRyb3Ag7Jes67aAIO2ZleyduFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWx0ZXJJbmRleGVzVG8oZW50aXR5SW5kZXhlczogTWlncmF0aW9uSW5kZXhbXSwgZGJJbmRleGVzOiBNaWdyYXRpb25JbmRleFtdKSB7XG4gIC8vIOyduOuNseyKpCDruYTqtZBcbiAgY29uc3QgaW5kZXhlc1RvID0ge1xuICAgIGFkZDogW10gYXMgTWlncmF0aW9uSW5kZXhbXSxcbiAgICBkcm9wOiBbXSBhcyBNaWdyYXRpb25JbmRleFtdLFxuICB9O1xuXG4gIC8vIOyduOuNseyKpCDqs6DsnKAg7Iud67OE7J6QIOyDneyEsSAobmFtZeydhCDsoJzsmbjtlZwg66qo65OgIO2VhOuTnOulvCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWY7JesIOyhsO2VqSlcbiAgY29uc3QgaWRlbnRpdHkgPSA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihpbmRleDogVCk6IHN0cmluZyA9PiB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluZGV4KVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09IFwibmFtZVwiKVxuICAgICAgLnNvcnQoKTtcblxuICAgIHJldHVybiBrZXlzXG4gICAgICAubWFwKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJuYW1lXCIpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09IFwiY29sdW1uc1wiKSB7XG4gICAgICAgICAgcmV0dXJuIChpbmRleFtrZXldIGFzIE1pZ3JhdGlvbkluZGV4W1wiY29sdW1uc1wiXSkubWFwKChjb2wpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb2wpXG4gICAgICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAgICAgLm1hcCgoaykgPT4gYCR7a309JHtjb2xbayBhcyBrZXlvZiB0eXBlb2YgY29sXX1gKVxuICAgICAgICAgICAgICAuam9pbihcIi8vXCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtrZXl9PSR7aW5kZXhba2V5IGFzIGtleW9mIE1pZ3JhdGlvbkluZGV4XX1gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiLy9cIik7XG4gIH07XG5cbiAgY29uc3QgZXh0cmFJbmRleGVzID0ge1xuICAgIGRiOiBkaWZmKGRiSW5kZXhlcywgZW50aXR5SW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyksIGlkZW50aXR5KSxcbiAgICBlbnRpdHk6IGRpZmYoZW50aXR5SW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyksIGRiSW5kZXhlcywgaWRlbnRpdHkpLFxuICB9O1xuICBpZiAoZXh0cmFJbmRleGVzLmVudGl0eS5sZW5ndGggPiAwKSB7XG4gICAgaW5kZXhlc1RvLmFkZCA9IGluZGV4ZXNUby5hZGQuY29uY2F0KGV4dHJhSW5kZXhlcy5lbnRpdHkpO1xuICB9XG4gIGlmIChleHRyYUluZGV4ZXMuZGIubGVuZ3RoID4gMCkge1xuICAgIGluZGV4ZXNUby5kcm9wID0gaW5kZXhlc1RvLmRyb3AuY29uY2F0KGV4dHJhSW5kZXhlcy5kYik7XG4gIH1cblxuICByZXR1cm4gaW5kZXhlc1RvO1xufVxuXG4vKipcbiAqIOyduOuNseyKpCDsgq3soJwg7KCV7J2YIOyDneyEsVxuICovXG5mdW5jdGlvbiBnZW5JbmRleERyb3BEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCkge1xuICByZXR1cm4gYHRhYmxlLmRyb3BJbmRleChbJHtpbmRleC5jb2x1bW5zXG4gICAgLm1hcCgoY29sdW1uKSA9PiBgJyR7Y29sdW1uLm5hbWV9J2ApXG4gICAgLmpvaW4oXCIsXCIpfV0sICcke2luZGV4Lm5hbWV9JylgO1xufVxuXG4vKipcbiAqIERCIOyhsO2ajCDqsrDqs7zsmYAg67mE6rWQ7ZWY6riwIOychO2VnCDsnbjrjbHsiqQg6riw67O46rCSIOyEpOyglVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyhpbmRleDogTWlncmF0aW9uSW5kZXgpOiBNaWdyYXRpb25JbmRleCB7XG4gIGNvbnN0IGlzVmVjdG9ySW5kZXggPSBpbmRleC50eXBlID09PSBcImhuc3dcIiB8fCBpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIjtcbiAgY29uc3Qgc3VwcG9ydHNPcmRlcmluZyA9ICFpc1ZlY3RvckluZGV4ICYmICghaW5kZXgudXNpbmcgfHwgaW5kZXgudXNpbmcgPT09IFwiYnRyZWVcIik7XG4gIGNvbnN0IG5vcm1hbGl6ZWRVc2luZyA9IGlzVmVjdG9ySW5kZXggPyBpbmRleC51c2luZyA6IChpbmRleC51c2luZyA/PyBcImJ0cmVlXCIpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uaW5kZXgsXG4gICAgY29sdW1uczogaW5kZXguY29sdW1ucy5tYXAoKGNvbCkgPT4gKHtcbiAgICAgIG5hbWU6IGNvbC5uYW1lLFxuICAgICAgLi4uKGdldEluZGV4Q29sdW1uT3BjbGFzcyhjb2wpID8geyBvcGNsYXNzOiBnZXRJbmRleENvbHVtbk9wY2xhc3MoY29sKSB9IDoge30pLFxuICAgICAgLi4uKHN1cHBvcnRzT3JkZXJpbmdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzb3J0T3JkZXI6IGNvbC5zb3J0T3JkZXIgPz8gXCJBU0NcIixcbiAgICAgICAgICAgIG51bGxzRmlyc3Q6IGNvbC5udWxsc0ZpcnN0ID8/IGNvbC5zb3J0T3JkZXIgPT09IFwiREVTQ1wiLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfSkpLFxuICAgIG51bGxzTm90RGlzdGluY3Q6IGluZGV4Lm51bGxzTm90RGlzdGluY3QgPz8gZmFsc2UsXG4gICAgLi4uKG5vcm1hbGl6ZWRVc2luZyA/IHsgdXNpbmc6IG5vcm1hbGl6ZWRVc2luZyB9IDoge30pLFxuICB9O1xufVxuXG4vKipcbiAqIO2FjOydtOu4lCDrs4Dqsr0g7LyA7J207IqkIC0gRm9yZWlnbiBLZXkg67OA6rK9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQWx0ZXJDb2RlX0ZvcmVpZ25zKFxuICB0YWJsZTogc3RyaW5nLFxuICBlbnRpdHlGb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdLFxuICBkYkZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4gIGRyb3BwaW5nQ29sdW1uczogTWlncmF0aW9uQ29sdW1uW10gPSBbXSxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIC8vIGNvbnNvbGUubG9nKHsgZW50aXR5Rm9yZWlnbnMsIGRiRm9yZWlnbnMgfSk7XG5cbiAgY29uc3QgZ2V0S2V5ID0gKG1mOiBNaWdyYXRpb25Gb3JlaWduKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gW21mLmNvbHVtbnMuam9pbihcIi1cIiksIG1mLnRvXS5qb2luKFwiLy8vXCIpO1xuICB9O1xuXG4gIC8vIOyCreygnOuQoCDsu6zrn7zrqoUg66qp66GdXG4gIGNvbnN0IGRyb3BwaW5nQ29sdW1uTmFtZXMgPSBkcm9wcGluZ0NvbHVtbnMubWFwKChjb2wpID0+IGNvbC5uYW1lKTtcblxuICBjb25zdCBma1RvID0gZW50aXR5Rm9yZWlnbnMucmVkdWNlKFxuICAgIChyZXN1bHQsIGVudGl0eUYpID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nRGJGID0gZGJGb3JlaWducy5maW5kKChkYkYpID0+IGdldEtleShlbnRpdHlGKSA9PT0gZ2V0S2V5KGRiRikpO1xuICAgICAgaWYgKCFtYXRjaGluZ0RiRikge1xuICAgICAgICByZXN1bHQuYWRkLnB1c2goZW50aXR5Rik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcXVhbChlbnRpdHlGLCBtYXRjaGluZ0RiRikgPT09IGZhbHNlKSB7XG4gICAgICAgIHJlc3VsdC5hbHRlclNyYy5wdXNoKG1hdGNoaW5nRGJGKTtcbiAgICAgICAgcmVzdWx0LmFsdGVyRHN0LnB1c2goZW50aXR5Rik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAge1xuICAgICAgYWRkOiBbXSBhcyBNaWdyYXRpb25Gb3JlaWduW10sXG4gICAgICBkcm9wOiBbXSBhcyBNaWdyYXRpb25Gb3JlaWduW10sXG4gICAgICBhbHRlclNyYzogW10gYXMgTWlncmF0aW9uRm9yZWlnbltdLFxuICAgICAgYWx0ZXJEc3Q6IFtdIGFzIE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgICB9LFxuICApO1xuXG4gIC8vIGRiRm9yZWlnbnPsl5DripQg7J6I7KeA66eMIGVudGl0eUZvcmVpZ25z7JeQ64qUIOyXhuuKlCDqsr3smrAgKOyCreygnOuQnCBGSylcbiAgLy8g64uoLCDsgq3soJzrkKAg7Lus65+87J2YIEZL64qUIOygnOyZuCAoZ2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlc+yXkOyEnCDsspjrpqwpXG4gIGRiRm9yZWlnbnMuZm9yRWFjaCgoZGJGKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hpbmdFbnRpdHlGID0gZW50aXR5Rm9yZWlnbnMuZmluZCgoZW50aXR5RikgPT4gZ2V0S2V5KGVudGl0eUYpID09PSBnZXRLZXkoZGJGKSk7XG4gICAgaWYgKCFtYXRjaGluZ0VudGl0eUYpIHtcbiAgICAgIC8vIOydtCBGS+ydmCDsu6zrn7zsnbQg7IKt7KCc65CgIOy7rOufvCDrqqnroZ3sl5Ag7J6I64qU7KeAIO2ZleyduFxuICAgICAgY29uc3QgaXNDb2x1bW5Ecm9wcGluZyA9IGRiRi5jb2x1bW5zLnNvbWUoKGNvbCkgPT4gZHJvcHBpbmdDb2x1bW5OYW1lcy5pbmNsdWRlcyhjb2wpKTtcbiAgICAgIC8vIOy7rOufvOydtCDsgq3soJzrkJjsp4Ag7JWK64qUIOqyveyasOyXkOunjCBGSyBkcm9wIOuqqeuhneyXkCDstpTqsIBcbiAgICAgIGlmICghaXNDb2x1bW5Ecm9wcGluZykge1xuICAgICAgICBma1RvLmRyb3AucHVzaChkYkYpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbGluZXNUbyA9IHtcbiAgICBhZGQ6IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUby5hZGQpLFxuICAgIGRyb3A6IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUby5kcm9wKSxcbiAgICBhbHRlclNyYzogZ2VuRm9yZWlnbkRlZmluaXRpb25zKHRhYmxlLCBma1RvLmFsdGVyU3JjKSxcbiAgICBhbHRlckRzdDogZ2VuRm9yZWlnbkRlZmluaXRpb25zKHRhYmxlLCBma1RvLmFsdGVyRHN0KSxcbiAgfTtcblxuICAvLyBkcm9wIGZrIGNvbHVtbnPsnbgg6rK97JqwKOyDneyEseuQoCDsvZTrk5wg7JeG64qUIOqyveyasCkg7Yyo7IqkXG4gIGNvbnN0IGhhc0xpbmVzID0gT2JqZWN0LnZhbHVlcyhsaW5lc1RvKS5zb21lKChsKSA9PiBsLnVwLmxlbmd0aCA+IDAgfHwgbC5kb3duLmxlbmd0aCA+IDApO1xuICBpZiAoIWhhc0xpbmVzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKFxuICAgIGxpbmVzVG8uYWRkLnVwLmxlbmd0aCA9PT0gMCAmJlxuICAgIGxpbmVzVG8uZHJvcC51cC5sZW5ndGggPT09IDAgJiZcbiAgICBsaW5lc1RvLmFsdGVyU3JjLnVwLmxlbmd0aCA9PT0gMCAmJlxuICAgIGxpbmVzVG8uYWx0ZXJEc3QudXAubGVuZ3RoID09PSAwXG4gICkge1xuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpnZW5lcmF0ZUFsdGVyQ29kZV9Gb3JlaWduczpma0NoYW5nZUNvZGVHZW5lcmF0aW9uRXJyb3JcIiwge1xuICAgICAgdGFibGUsXG4gICAgICBlbnRpdHlGb3JlaWducyxcbiAgICAgIGRiRm9yZWlnbnMsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRksg67OA6rK9IOy9lOuTnCDsg53shLEg7Jik66WYXCIpO1xuICB9XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjsnLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gdXAoa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGByZXR1cm4ga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgLi4ubGluZXNUby5kcm9wLmRvd24sXG4gICAgLi4ubGluZXNUby5hZGQudXAsXG4gICAgLi4ubGluZXNUby5hbHRlclNyYy5kb3duLFxuICAgIC4uLmxpbmVzVG8uYWx0ZXJEc3QudXAsXG4gICAgXCJ9KVwiLFxuICAgIFwifVwiLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgYHJldHVybiBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCxcbiAgICAuLi5saW5lc1RvLmFkZC5kb3duLFxuICAgIC4uLmxpbmVzVG8uYWx0ZXJEc3QuZG93bixcbiAgICAuLi5saW5lc1RvLmFsdGVyU3JjLnVwLFxuICAgIC4uLmxpbmVzVG8uZHJvcC51cCxcbiAgICBcIn0pXCIsXG4gICAgXCJ9XCIsXG4gIF07XG5cbiAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0Q29kZShsaW5lcy5qb2luKFwiXFxuXCIpLCBcInR5cGVzY3JpcHRcIiwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKTtcbiAgY29uc3QgdGl0bGUgPSBbXCJhbHRlclwiLCB0YWJsZSwgXCJmb3JlaWduc1wiXS5qb2luKFwiX1wiKTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRhYmxlLFxuICAgICAgdGl0bGUsXG4gICAgICBmb3JtYXR0ZWQsXG4gICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICog7KO87Ja07KeEIEVudGl0eVNldOydhCDquLDrsJjsnLzroZwg7YWM7J2067iUIENSRUFURSDrp4jsnbTqt7jroIjsnbTshZgg7L2U65Oc66W8IOyDneyEse2VqeuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHlTZXRcbiAqIEByZXR1cm5zIENSRUFURSDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNyZWF0ZUNvZGUoZW50aXR5U2V0OiBNaWdyYXRpb25TZXQpOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICByZXR1cm4gW1xuICAgIGF3YWl0IGdlbmVyYXRlQ3JlYXRlQ29kZV9Db2x1bW5BbmRJbmRleGVzKFxuICAgICAgZW50aXR5U2V0LnRhYmxlLFxuICAgICAgZW50aXR5U2V0LmNvbHVtbnMsXG4gICAgICBlbnRpdHlTZXQuaW5kZXhlcyxcbiAgICApLFxuICAgIC4uLihhd2FpdCBnZW5lcmF0ZUNyZWF0ZUNvZGVfRm9yZWlnbihlbnRpdHlTZXQudGFibGUsIGVudGl0eVNldC5mb3JlaWducykpLFxuICBdO1xufVxuXG4vKipcbiAqIOyjvOyWtOynhCBlbnRpdHlTZXTsnYQg66qp7ZGc66GcLCBkYlNldOydhCDtmIQg7IOB7Zmp7Jy866GcIO2VmOyXrCDthYzsnbTruJQgQUxURVIg66eI7J206re466CI7J207IWYIOy9lOuTnOulvCDsg53shLHtlanri4jri6QuXG4gKiBAcGFyYW0gZW50aXR5U2V0IO2YhCDsg4HtmansnZggTWlncmF0aW9uU2V0XG4gKiBAcGFyYW0gZGJTZXQg66qp7ZGcIOyDge2ZqeydmCBNaWdyYXRpb25TZXRcbiAqIEBwYXJhbSBjb21wYXJlREIgUEsg7YOA7J6FIOuzgOqyvSDsi5wg7Jet7LC47KGwIEZL66W8IOyhsO2ajO2VmOq4sCDsnITtlZwgS25leCDsnbjsiqTthLTsiqQgKOyEoO2DnSlcbiAqIEByZXR1cm5zIEFMVEVSIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5xcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQWx0ZXJDb2RlKFxuICBlbnRpdHlTZXQ6IE1pZ3JhdGlvblNldCxcbiAgZGJTZXQ6IE1pZ3JhdGlvblNldCxcbiAgY29tcGFyZURCPzogS25leCxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIGNvbnN0IHJlcGxhY2VDb2x1bW5EZWZhdWx0VG8gPSAoY29sOiBNaWdyYXRpb25Db2x1bW4pID0+IHtcbiAgICAvLyBmbG9hdOyduCDqsr3smrAg6riw67O46rCS7J2EIDDsnLzroZwg7KeA7KCV7ZWY64qUIOqyveyasCBcIjAuMDBcIuycvOuhnCDrs4DtmZjrkJjripQg7LyA7J207IqkIOuMgOydkVxuICAgIC8vIGlmIChjb2wudHlwZSA9PT0gXCJmbG9hdFwiICYmIGNvbC5kZWZhdWx0VG8gJiYgU3RyaW5nKGNvbC5kZWZhdWx0VG8pLmluY2x1ZGVzKCdcIicpID09PSBmYWxzZSkge1xuICAgIC8vICAgY29sLmRlZmF1bHRUbyA9IGBcIiR7TnVtYmVyKGNvbC5kZWZhdWx0VG8pLnRvRml4ZWQoY29sLnNjYWxlID8/IDIpfVwiYDtcbiAgICAvLyB9XG4gICAgLy8gLy8gc3RyaW5n7J24IOqyveyasCDquLDrs7jqsJLsnbQg67mIIOyKpO2KuOungeyduCDqsr3smrAg64yA7J2RXG4gICAgLy8gaWYgKGNvbC50eXBlID09PSBcInN0cmluZ1wiICYmIGNvbC5kZWZhdWx0VG8gPT09IFwiXCIpIHtcbiAgICAvLyAgIGNvbC5kZWZhdWx0VG8gPSAnXCJcIic7XG4gICAgLy8gfVxuICAgIC8vIC8vIGJvb2xlYW7snbgg6rK97JqwIOq4sOuzuOqwkiDsoJXqt5ztmZQgKE15U1FM7JeQ7ISc64qUIFRJTllJTlQoMSnroZwg7KCA7J6l65CY66+A66GcIDAg65iQ64qUIDHroZwg7KCV6rec7ZmUKVxuICAgIC8vIC8vIFRPRE86IGRiLnRz7JeQIHR5cGVDYXNlIOyEpOyglSDtmZXsnbjtlZjsl6wg7LKY66as7ZWY64+E66GdIOyImOyglSDtlYTsmpRcbiAgICAvLyBpZiAoY29sLnR5cGUgPT09IFwiYm9vbGVhblwiICYmIGNvbC5kZWZhdWx0VG8gIT09IHVuZGVmaW5lZCkge1xuICAgIC8vICAgaWYgKGNvbC5kZWZhdWx0VG8gPT09IFwiMFwiIHx8IGNvbC5kZWZhdWx0VG8udG9Mb3dlckNhc2UoKSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgLy8gICAgIGNvbC5kZWZhdWx0VG8gPSBcIjBcIjtcbiAgICAvLyAgIH0gZWxzZSBpZiAoY29sLmRlZmF1bHRUbyA9PT0gXCIxXCIgfHwgY29sLmRlZmF1bHRUby50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIikge1xuICAgIC8vICAgICBjb2wuZGVmYXVsdFRvID0gXCIxXCI7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgLy8gRklYTUU6IOydvOuLqCBNeVNRTCDsg4Htmansl5DshJwg67Cc7IOd7ZaI642YIOydtOyKiOydmCB3b3JrYXJvdW5kIOydtOuvgOuhnCBQZ+yXkOyEnCDsnqztmZXsnbgg7ZuEIOuMgOydkSDstpTqsIBcbiAgICByZXR1cm4gY29sO1xuICB9O1xuICBjb25zdCBlbnRpdHlDb2x1bW5zID0gYWxwaGFiZXRpY2FsKGVudGl0eVNldC5jb2x1bW5zLCAoYSkgPT4gYS5uYW1lKS5tYXAocmVwbGFjZUNvbHVtbkRlZmF1bHRUbyk7XG4gIGNvbnN0IGRiQ29sdW1ucyA9IGFscGhhYmV0aWNhbChkYlNldC5jb2x1bW5zLCAoYSkgPT4gYS5uYW1lKS5tYXAocmVwbGFjZUNvbHVtbkRlZmF1bHRUbyk7XG5cbiAgLyog65SU67KE6rmF7JqpIOy9lOuTnCwg7Yq57KCVIOy7rOufvOyXkOyEnCDrtojsnbzsuZgg67Cc7IOd7ZWgIOuVjCDtmZXsnbhcbiAgICAgICAgY29uc3QgZW50aXR5Q29sdW1uID0gZW50aXR5U2V0LmNvbHVtbnMuZmluZChcbiAgICAgICAgICAoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJwcmljZV9rcndcIlxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkYkNvbHVtbiA9IGRiU2V0LmNvbHVtbnMuZmluZChcbiAgICAgICAgICAoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJwcmljZV9rcndcIlxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmRlYnVnKHsgZW50aXR5Q29sdW1uLCBkYkNvbHVtbiB9KTtcbiAgICAgICAgICovXG5cbiAgY29uc3QgZW50aXR5SW5kZXhlcyA9IGFscGhhYmV0aWNhbChlbnRpdHlTZXQuaW5kZXhlcywgKGEpID0+XG4gICAgW2EudHlwZSwgLi4uYS5jb2x1bW5zLm1hcCgoYykgPT4gYy5uYW1lKV0uam9pbihcIi1cIiksXG4gICk7XG4gIGNvbnN0IGRiSW5kZXhlcyA9IGFscGhhYmV0aWNhbChkYlNldC5pbmRleGVzLCAoYSkgPT5cbiAgICBbYS50eXBlLCAuLi5hLmNvbHVtbnMubWFwKChjKSA9PiBjLm5hbWUpXS5qb2luKFwiLVwiKSxcbiAgKTtcblxuICBjb25zdCByZXBsYWNlTm9BY3Rpb25Pbk15U1FMID0gKGY6IE1pZ3JhdGlvbkZvcmVpZ24pID0+IHtcbiAgICAvLyBNeVNRTOyXkOyEnCBSRVNUUklDVOyZgCBOTyBBQ1RJT07snYAg64+Z7J287ZWoXG4gICAgY29uc3QgeyBvbkRlbGV0ZSwgb25VcGRhdGUgfSA9IGY7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmYsXG4gICAgICBvblVwZGF0ZTogb25VcGRhdGUgPT09IFwiUkVTVFJJQ1RcIiA/IFwiTk8gQUNUSU9OXCIgOiBvblVwZGF0ZSxcbiAgICAgIG9uRGVsZXRlOiBvbkRlbGV0ZSA9PT0gXCJSRVNUUklDVFwiID8gXCJOTyBBQ1RJT05cIiA6IG9uRGVsZXRlLFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgZW50aXR5Rm9yZWlnbnMgPSBhbHBoYWJldGljYWwoZW50aXR5U2V0LmZvcmVpZ25zLCAoYSkgPT5cbiAgICBbYS50bywgLi4uYS5jb2x1bW5zXS5qb2luKFwiLVwiKSxcbiAgKS5tYXAoKGYpID0+IHJlcGxhY2VOb0FjdGlvbk9uTXlTUUwoZikpO1xuICBjb25zdCBkYkZvcmVpZ25zID0gYWxwaGFiZXRpY2FsKGRiU2V0LmZvcmVpZ25zLCAoYSkgPT4gW2EudG8sIC4uLmEuY29sdW1uc10uam9pbihcIi1cIikpLm1hcCgoZikgPT5cbiAgICByZXBsYWNlTm9BY3Rpb25Pbk15U1FMKGYpLFxuICApO1xuXG4gIC8vIOyCreygnOuQoCDsu6zrn7wg66qp66GdIOqzhOyCsFxuICBjb25zdCBkcm9wcGluZ0NvbHVtbnMgPSBkaWZmKGRiQ29sdW1ucywgZW50aXR5Q29sdW1ucywgKGNvbCkgPT4gY29sLm5hbWUpO1xuXG4gIGNvbnN0IGFsdGVyQ29kZXM6IChHZW5NaWdyYXRpb25Db2RlIHwgR2VuTWlncmF0aW9uQ29kZVtdIHwgbnVsbClbXSA9IFtdO1xuXG4gIC8vIDEuIGNvbHVtbnNBbmRJbmRleGVzIOyymOumrFxuICBjb25zdCBzZWFyY2hUZXh0Q29sdW1uTmFtZXMgPSBnZXRTZWFyY2hUZXh0Q29sdW1uTmFtZXMoZW50aXR5U2V0LnRhYmxlKTtcbiAgY29uc3QgaXNFcXVhbENvbHVtbnMgPSBlcXVhbChcbiAgICBlbnRpdHlDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGNvbHVtbiwgc2VhcmNoVGV4dENvbHVtbk5hbWVzKSksXG4gICAgZGJDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGNvbHVtbiwgc2VhcmNoVGV4dENvbHVtbk5hbWVzKSksXG4gICk7XG4gIGNvbnN0IGlzRXF1YWxJbmRleGVzID0gZXF1YWwoXG4gICAgZW50aXR5SW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyksXG4gICAgZGJJbmRleGVzLm1hcChzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzKSxcbiAgKTtcbiAgaWYgKCFpc0VxdWFsQ29sdW1ucyB8fCAhaXNFcXVhbEluZGV4ZXMpIHtcbiAgICBhbHRlckNvZGVzLnB1c2goXG4gICAgICBhd2FpdCBnZW5lcmF0ZUFsdGVyQ29kZV9Db2x1bW5BbmRJbmRleGVzKFxuICAgICAgICBlbnRpdHlTZXQudGFibGUsXG4gICAgICAgIGVudGl0eUNvbHVtbnMsXG4gICAgICAgIGVudGl0eUluZGV4ZXMsXG4gICAgICAgIGRiQ29sdW1ucyxcbiAgICAgICAgZGJJbmRleGVzLFxuICAgICAgICBkYlNldC5mb3JlaWducyxcbiAgICAgICAgY29tcGFyZURCLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4gZm9yZWlnbnMg7LKY66asICjsgq3soJzrkKAg7Lus65+8IOygleuztCDsoITri6wpXG4gIGlmIChlcXVhbChlbnRpdHlGb3JlaWducywgZGJGb3JlaWducykgPT09IGZhbHNlKSB7XG4gICAgYWx0ZXJDb2Rlcy5wdXNoKFxuICAgICAgYXdhaXQgZ2VuZXJhdGVBbHRlckNvZGVfRm9yZWlnbnMoXG4gICAgICAgIGVudGl0eVNldC50YWJsZSxcbiAgICAgICAgZW50aXR5Rm9yZWlnbnMsXG4gICAgICAgIGRiRm9yZWlnbnMsXG4gICAgICAgIGRyb3BwaW5nQ29sdW1ucyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbHRlckNvZGVzLmV2ZXJ5KChhbHRlckNvZGUpID0+IGFsdGVyQ29kZSA9PT0gbnVsbCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gYWx0ZXJDb2Rlcy5maWx0ZXIoKGFsdGVyQ29kZSkgPT4gYWx0ZXJDb2RlICE9PSBudWxsKS5mbGF0KCk7XG59XG5cbi8qKlxuICogUEsg7YOA7J6FIOuzgOqyvSDsi5wg7Jet7LC47KGwIEZLIOygnOyVveyhsOqxtOydhCDsspjrpqztlZjripQg66eI7J206re466CI7J207IWYIOy9lOuTnOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogUEsg7YOA7J6FIOuzgOqyvSDsi5wg7Iic7IScOlxuICogMS4gRksg7KCc7JW97KGw6rG0IOyCreygnCAo7Jet7LC47KGwIO2FjOydtOu4lOuTpClcbiAqIDIuIOyekOq4sCDssLjsobAgRksg7IKt7KCcICjsnojripQg6rK97JqwKVxuICogMy4gUEsg7KCc7JW97KGw6rG0IOyCreygnFxuICogNC4gUEsg7Lus65+8IO2DgOyehSDrs4Dqsr1cbiAqIDUuIEZLIOy7rOufvCDtg4DsnoUg67OA6rK9ICjsl63ssLjsobAg7YWM7J2067iU65OkKVxuICogNi4gUEsg7KCc7JW97KGw6rG0IOuzteq1rFxuICogNy4g7J6Q6riwIOywuOyhsCBGSyDrs7XqtaxcbiAqIDguIEZLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVQa1R5cGVDaGFuZ2VNaWdyYXRpb24oXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGVudGl0eUlkQ29sOiBNaWdyYXRpb25Db2x1bW4sXG4gIGRiSWRDb2w6IE1pZ3JhdGlvbkNvbHVtbixcbiAgX2VudGl0eUNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBfZW50aXR5SW5kZXhlczogTWlncmF0aW9uSW5kZXhbXSxcbiAgX2RiQ29sdW1uczogTWlncmF0aW9uQ29sdW1uW10sXG4gIF9kYkluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sXG4gIF9kYkZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4gIGNvbXBhcmVEQjogS25leCxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIC8vIOyXreywuOyhsCBGSyDsobDtmowgKOydtCDthYzsnbTruJTsnZggUEvrpbwg7LC47KGw7ZWY64qUIOuLpOuluCDthYzsnbTruJTsnZggRkvrk6QpXG4gIGNvbnN0IHJlZmVyZW5jaW5nRktzID0gYXdhaXQgUG9zdGdyZVNRTFNjaGVtYVJlYWRlci5nZXRSZWZlcmVuY2luZ0ZvcmVpZ25LZXlzKGNvbXBhcmVEQiwgdGFibGUpO1xuXG4gIC8vIOyekOq4sCDssLjsobAgRksg67aE66asICjsmIg6IERlcGFydG1lbnQucGFyZW50X2lkIOKGkiBEZXBhcnRtZW50LmlkKVxuICBjb25zdCBzZWxmUmVmZXJlbmNpbmdGS3MgPSByZWZlcmVuY2luZ0ZLcy5maWx0ZXIoKGZrKSA9PiBmay50YWJsZU5hbWUgPT09IHRhYmxlKTtcbiAgY29uc3QgZXh0ZXJuYWxSZWZlcmVuY2luZ0ZLcyA9IHJlZmVyZW5jaW5nRktzLmZpbHRlcigoZmspID0+IGZrLnRhYmxlTmFtZSAhPT0gdGFibGUpO1xuXG4gIC8vIFBLIOygnOyVveyhsOqxtCDsnbTrpoQg7KGw7ZqMXG4gIGNvbnN0IHBrQ29uc3RyYWludE5hbWUgPSBgJHt0YWJsZX1fcGtleWA7XG5cbiAgLy8g7IOIIFBLIO2DgOyeheyXkCDrp57ripQgUG9zdGdyZVNRTCDtg4DsnoUg66y47J6Q7Je0XG4gIGNvbnN0IG5ld1BrUGdUeXBlID0gZ2V0UGtQZ1R5cGUoZW50aXR5SWRDb2wpO1xuICBjb25zdCBvbGRQa1BnVHlwZSA9IGdldFBrUGdUeXBlKGRiSWRDb2wpO1xuXG4gIC8vIFVQIOy9lOuTnCDsg53shLFcbiAgY29uc3QgdXBMaW5lczogc3RyaW5nW10gPSBbXTtcblxuICAvLyAxLiDsmbjrtoAg7YWM7J2067iU7J2YIEZLIOygnOyVveyhsOqxtCDsgq3soJxcbiAgZm9yIChjb25zdCBmayBvZiBleHRlcm5hbFJlZmVyZW5jaW5nRktzKSB7XG4gICAgdXBMaW5lcy5wdXNoKGAgIC8vICR7ZmsudGFibGVOYW1lfS4ke2ZrLmNvbHVtbk5hbWV9IEZLIOygnOyVveyhsOqxtCDsgq3soJxgKTtcbiAgICB1cExpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBEUk9QIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g7J6Q6riwIOywuOyhsCBGSyDsgq3soJxcbiAgZm9yIChjb25zdCBmayBvZiBzZWxmUmVmZXJlbmNpbmdGS3MpIHtcbiAgICB1cExpbmVzLnB1c2goYCAgLy8g7J6Q6riwIOywuOyhsCBGSyDsgq3soJw6ICR7ZmsuY29sdW1uTmFtZX1gKTtcbiAgICB1cExpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIERST1AgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCInKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyAzLiBQSyDsoJzslb3sobDqsbQg7IKt7KCcXG4gIHVwTGluZXMucHVzaChgICAvLyBQSyDsoJzslb3sobDqsbQg7IKt7KCcYCk7XG4gIHVwTGluZXMucHVzaChgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIERST1AgQ09OU1RSQUlOVCBcIiR7cGtDb25zdHJhaW50TmFtZX1cIicpO2ApO1xuXG4gIC8vIDQuIFBLIOy7rOufvCDtg4DsnoUg67OA6rK9XG4gIHVwTGluZXMucHVzaChgICAvLyBQSyDsu6zrn7wg7YOA7J6FIOuzgOqyvWApO1xuICB1cExpbmVzLnB1c2goXG4gICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBTFRFUiBDT0xVTU4gXCJpZFwiIFRZUEUgJHtuZXdQa1BnVHlwZX0gVVNJTkcgXCJpZFwiOjoke25ld1BrUGdUeXBlfScpO2AsXG4gICk7XG5cbiAgLy8gNS4gRksg7Lus65+8IO2DgOyehSDrs4Dqsr0gKOyXreywuOyhsCDthYzsnbTruJTrk6QpIC0g7J6Q6riwIOywuOyhsCDtj6ztlahcbiAgZm9yIChjb25zdCBmayBvZiByZWZlcmVuY2luZ0ZLcykge1xuICAgIHVwTGluZXMucHVzaChgICAvLyAke2ZrLnRhYmxlTmFtZX0uJHtmay5jb2x1bW5OYW1lfSDsu6zrn7wg7YOA7J6FIOuzgOqyvWApO1xuICAgIHVwTGluZXMucHVzaChcbiAgICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7ZmsudGFibGVOYW1lfVwiIEFMVEVSIENPTFVNTiBcIiR7ZmsuY29sdW1uTmFtZX1cIiBUWVBFICR7bmV3UGtQZ1R5cGV9IFVTSU5HIFwiJHtmay5jb2x1bW5OYW1lfVwiOjoke25ld1BrUGdUeXBlfScpO2AsXG4gICAgKTtcbiAgfVxuXG4gIC8vIDYuIFBLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAgdXBMaW5lcy5wdXNoKGAgIC8vIFBLIOygnOyVveyhsOqxtCDrs7XqtaxgKTtcbiAgdXBMaW5lcy5wdXNoKFxuICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7dGFibGV9XCIgQUREIENPTlNUUkFJTlQgXCIke3BrQ29uc3RyYWludE5hbWV9XCIgUFJJTUFSWSBLRVkgKFwiaWRcIiknKTtgLFxuICApO1xuXG4gIC8vIDcuIOyekOq4sCDssLjsobAgRksg67O16rWsXG4gIGZvciAoY29uc3QgZmsgb2Ygc2VsZlJlZmVyZW5jaW5nRktzKSB7XG4gICAgdXBMaW5lcy5wdXNoKGAgIC8vIOyekOq4sCDssLjsobAgRksg67O16rWsOiAke2ZrLmNvbHVtbk5hbWV9YCk7XG4gICAgdXBMaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCIgRk9SRUlHTiBLRVkgKFwiJHtmay5jb2x1bW5OYW1lfVwiKSBSRUZFUkVOQ0VTIFwiJHt0YWJsZX1cIihcImlkXCIpIE9OIFVQREFURSAke2ZrLm9uVXBkYXRlfSBPTiBERUxFVEUgJHtmay5vbkRlbGV0ZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyA4LiDsmbjrtoAg7YWM7J2067iU7J2YIEZLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAgZm9yIChjb25zdCBmayBvZiBleHRlcm5hbFJlZmVyZW5jaW5nRktzKSB7XG4gICAgdXBMaW5lcy5wdXNoKGAgIC8vICR7ZmsudGFibGVOYW1lfS4ke2ZrLmNvbHVtbk5hbWV9IEZLIOygnOyVveyhsOqxtCDrs7XqtaxgKTtcbiAgICB1cExpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCIgRk9SRUlHTiBLRVkgKFwiJHtmay5jb2x1bW5OYW1lfVwiKSBSRUZFUkVOQ0VTIFwiJHt0YWJsZX1cIihcImlkXCIpIE9OIFVQREFURSAke2ZrLm9uVXBkYXRlfSBPTiBERUxFVEUgJHtmay5vbkRlbGV0ZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyBET1dOIOy9lOuTnCDsg53shLEgKOyXreyInClcbiAgY29uc3QgZG93bkxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIDEuIOyZuOu2gCDthYzsnbTruJTsnZggRksg7KCc7JW97KGw6rG0IOyCreygnFxuICBmb3IgKGNvbnN0IGZrIG9mIGV4dGVybmFsUmVmZXJlbmNpbmdGS3MpIHtcbiAgICBkb3duTGluZXMucHVzaChgICAvLyAke2ZrLnRhYmxlTmFtZX0uJHtmay5jb2x1bW5OYW1lfSBGSyDsoJzslb3sobDqsbQg7IKt7KCcYCk7XG4gICAgZG93bkxpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBEUk9QIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4g7J6Q6riwIOywuOyhsCBGSyDsgq3soJxcbiAgZm9yIChjb25zdCBmayBvZiBzZWxmUmVmZXJlbmNpbmdGS3MpIHtcbiAgICBkb3duTGluZXMucHVzaChgICAvLyDsnpDquLAg7LC47KGwIEZLIOyCreygnDogJHtmay5jb2x1bW5OYW1lfWApO1xuICAgIGRvd25MaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBEUk9QIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMy4gUEsg7KCc7JW97KGw6rG0IOyCreygnFxuICBkb3duTGluZXMucHVzaChgICAvLyBQSyDsoJzslb3sobDqsbQg7IKt7KCcYCk7XG4gIGRvd25MaW5lcy5wdXNoKFxuICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7dGFibGV9XCIgRFJPUCBDT05TVFJBSU5UIFwiJHtwa0NvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgKTtcblxuICAvLyA0LiBQSyDsu6zrn7wg7YOA7J6FIOybkOuztVxuICBkb3duTGluZXMucHVzaChgICAvLyBQSyDsu6zrn7wg7YOA7J6FIOybkOuztWApO1xuICBkb3duTGluZXMucHVzaChcbiAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIEFMVEVSIENPTFVNTiBcImlkXCIgVFlQRSAke29sZFBrUGdUeXBlfSBVU0lORyBcImlkXCI6OiR7b2xkUGtQZ1R5cGV9Jyk7YCxcbiAgKTtcblxuICAvLyA1LiBGSyDsu6zrn7wg7YOA7J6FIOybkOuztSAo7Jet7LC47KGwIO2FjOydtOu4lOuTpClcbiAgZm9yIChjb25zdCBmayBvZiByZWZlcmVuY2luZ0ZLcykge1xuICAgIGRvd25MaW5lcy5wdXNoKGAgIC8vICR7ZmsudGFibGVOYW1lfS4ke2ZrLmNvbHVtbk5hbWV9IOy7rOufvCDtg4DsnoUg7JuQ67O1YCk7XG4gICAgZG93bkxpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBBTFRFUiBDT0xVTU4gXCIke2ZrLmNvbHVtbk5hbWV9XCIgVFlQRSAke29sZFBrUGdUeXBlfSBVU0lORyBcIiR7ZmsuY29sdW1uTmFtZX1cIjo6JHtvbGRQa1BnVHlwZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyA2LiBQSyDsoJzslb3sobDqsbQg67O16rWsXG4gIGRvd25MaW5lcy5wdXNoKGAgIC8vIFBLIOygnOyVveyhsOqxtCDrs7XqtaxgKTtcbiAgZG93bkxpbmVzLnB1c2goXG4gICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7cGtDb25zdHJhaW50TmFtZX1cIiBQUklNQVJZIEtFWSAoXCJpZFwiKScpO2AsXG4gICk7XG5cbiAgLy8gNy4g7J6Q6riwIOywuOyhsCBGSyDrs7XqtaxcbiAgZm9yIChjb25zdCBmayBvZiBzZWxmUmVmZXJlbmNpbmdGS3MpIHtcbiAgICBkb3duTGluZXMucHVzaChgICAvLyDsnpDquLAg7LC47KGwIEZLIOuzteq1rDogJHtmay5jb2x1bW5OYW1lfWApO1xuICAgIGRvd25MaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBREQgQ09OU1RSQUlOVCBcIiR7ZmsuY29uc3RyYWludE5hbWV9XCIgRk9SRUlHTiBLRVkgKFwiJHtmay5jb2x1bW5OYW1lfVwiKSBSRUZFUkVOQ0VTIFwiJHt0YWJsZX1cIihcImlkXCIpIE9OIFVQREFURSAke2ZrLm9uVXBkYXRlfSBPTiBERUxFVEUgJHtmay5vbkRlbGV0ZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyA4LiDsmbjrtoAg7YWM7J2067iU7J2YIEZLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAgZm9yIChjb25zdCBmayBvZiBleHRlcm5hbFJlZmVyZW5jaW5nRktzKSB7XG4gICAgZG93bkxpbmVzLnB1c2goYCAgLy8gJHtmay50YWJsZU5hbWV9LiR7ZmsuY29sdW1uTmFtZX0gRksg7KCc7JW97KGw6rG0IOuzteq1rGApO1xuICAgIGRvd25MaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHtmay50YWJsZU5hbWV9XCIgQUREIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiIEZPUkVJR04gS0VZIChcIiR7ZmsuY29sdW1uTmFtZX1cIikgUkVGRVJFTkNFUyBcIiR7dGFibGV9XCIoXCJpZFwiKSBPTiBVUERBVEUgJHtmay5vblVwZGF0ZX0gT04gREVMRVRFICR7Zmsub25EZWxldGV9Jyk7YCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjsnLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gdXAoa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIC4uLnVwTGluZXMsXG4gICAgXCJ9XCIsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3duKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICAuLi5kb3duTGluZXMsXG4gICAgXCJ9XCIsXG4gIF07XG5cbiAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0Q29kZShsaW5lcy5qb2luKFwiXFxuXCIpLCBcInR5cGVzY3JpcHRcIiwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRhYmxlLFxuICAgICAgdGl0bGU6IGBhbHRlcl8ke3RhYmxlfV9wa190eXBlYCxcbiAgICAgIGZvcm1hdHRlZCxcbiAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBQSyDsu6zrn7zsnZggUG9zdGdyZVNRTCDtg4DsnoUg66y47J6Q7Je07J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqL1xuZnVuY3Rpb24gZ2V0UGtQZ1R5cGUoY29sOiBNaWdyYXRpb25Db2x1bW4pOiBzdHJpbmcge1xuICBpZiAoY29sLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gY29sLmxlbmd0aCAhPT0gdW5kZWZpbmVkID8gYHZhcmNoYXIoJHtjb2wubGVuZ3RofSlgIDogXCJ0ZXh0XCI7XG4gIH1cbiAgaWYgKGNvbC50eXBlID09PSBcInV1aWRcIikge1xuICAgIHJldHVybiBcInV1aWRcIjtcbiAgfVxuICAvLyBpbnRlZ2Vy7J2YIOqyveyasCBzZXJpYWwvaW50ZWdlciDqtazrtoTsnbQg7ZWE7JqU7ZWY7KeA66eMLFxuICAvLyDtg4DsnoUg67OA6rK9IOyLnOyXkOuKlCBpbnRlZ2Vy66GcIOyymOumrO2VqeuLiOuLpC5cbiAgcmV0dXJuIFwiaW50ZWdlclwiO1xufVxuIl0sIm5hbWVzIjpbImVxdWFsIiwiYWxwaGFiZXRpY2FsIiwiZGlmZiIsIkVudGl0eU1hbmFnZXIiLCJOYWl0ZSIsImlzU2VhcmNoVGV4dFByb3AiLCJmb3JtYXRDb2RlIiwiZGlmZmVyZW5jZVdpdGgiLCJpbnRlcnNlY3Rpb25CeSIsIlBvc3RncmVTUUxTY2hlbWFSZWFkZXIiLCJTRUFSQ0hfVEVYVF9IRUxQRVJfREVGSU5JVElPTlMiLCJTZWFyY2hUZXh0RXhwcmVzc2lvblBhcnNlciIsImluZGV4IiwidG9rZW5zIiwiaXNBdEVuZCIsImxlbmd0aCIsInBhcnNlRXhwcmVzc2lvbiIsInBhcnNlQ29uY2F0IiwicGFydHMiLCJwYXJzZVBvc3RmaXgiLCJtYXRjaE9wZXJhdG9yIiwicHVzaCIsInR5cGUiLCJub2RlIiwicGFyc2VQcmltYXJ5IiwiZXhwciIsInRhcmdldFR5cGUiLCJwYXJzZVR5cGVOYW1lIiwibWF0Y2hJZGVudGlmaWVyIiwidG9rZW4iLCJjb25zdW1lQ29sbGF0aW9uVG9rZW4iLCJjb2xsYXRpb24iLCJ2YWx1ZSIsInF1b3RlZCIsImNvbnN1bWVUb2tlbiIsImV4cGVjdFN5bWJvbCIsImxvd2VyTmFtZSIsInRvTG93ZXJDYXNlIiwibWF0Y2hTeW1ib2wiLCJpc1RyaW1Cb3RoRnJvbUZvcm0iLCJhcmciLCJuYW1lIiwiYXJncyIsInBhcnNlRnVuY3Rpb25BcmdzIiwiRXJyb3IiLCJwZWVrIiwiam9pbiIsImJvdGhUb2tlbiIsImZyb21Ub2tlbiIsImNvbnRleHQiLCJvZmZzZXQiLCJnZXRJbmRleENvbHVtbk9wY2xhc3MiLCJjb2x1bW4iLCJvcGNsYXNzIiwidmVjdG9yT3BzIiwidG9rZW5pemVTZWFyY2hUZXh0RXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJjaGFyIiwidW5kZWZpbmVkIiwidGVzdCIsInN0YXJ0c1dpdGgiLCJjdXJyZW50IiwiY2Fub25pY2FsaXplU2VhcmNoVGV4dEdlbmVyYXRlZEV4cHJlc3Npb24iLCJwYXJzZXIiLCJwYXJzZWRFeHByZXNzaW9uIiwicmVuZGVyU2VhcmNoVGV4dEV4cHJlc3Npb24iLCJub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUiLCJub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbkZhbGxiYWNrIiwiZmxhdE1hcCIsInBhcnQiLCJub3JtYWxpemVkUGFydCIsInRvVXBwZXJDYXNlIiwibm9ybWFsaXplZEV4cHIiLCJyZXBsYWNlIiwidHJpbSIsIm1hcCIsInBhcmVudFByZWNlZGVuY2UiLCJwcmVjZWRlbmNlIiwiZ2V0U2VhcmNoVGV4dEV4cHJlc3Npb25QcmVjZWRlbmNlIiwicmVuZGVyZWQiLCJyZXBsYWNlQWxsIiwidmlzaXRTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUiLCJ2aXNpdG9yIiwiZm9yRWFjaCIsImdldFNlYXJjaFRleHRIZWxwZXJLaW5kc0Zyb21FeHByZXNzaW9uIiwiaGVscGVyS2luZHMiLCJTZXQiLCJhZGRIZWxwZXJLaW5kRnJvbU5hbWUiLCJub3JtYWxpemVkTmFtZSIsImFkZCIsInJlc29sdmVTZWFyY2hUZXh0Q29sdW1ucyIsInRhYmxlIiwiY29sdW1ucyIsImVudGl0eSIsImdldEJ5VGFibGUiLCJwcm9wc0J5TmFtZSIsIk1hcCIsInByb3BzIiwicHJvcCIsImdldCIsImdlbmVyYXRlZCIsImJ1aWxkU2VhcmNoVGV4dEdlbmVyYXRlZEV4cHJlc3Npb24iLCJzb3VyY2VDb2x1bW5zIiwic291cmNlIiwic291cmNlUHJvcCIsImNhc2VJbnNlbnNpdGl2ZSIsImdldFNlYXJjaFRleHRIZWxwZXJEZWZpbml0aW9ucyIsImtpbmQiLCJzaXplIiwiZmlsdGVyIiwiaGFzIiwiZ2V0U2VhcmNoVGV4dENvbHVtbk5hbWVzIiwiZ2VuZXJhdGVDcmVhdGVDb2RlX0NvbHVtbkFuZEluZGV4ZXMiLCJpbmRleGVzIiwicmVzb2x2ZWRDb2x1bW5zIiwiY29sdW1uRGVmcyIsImdlbkNvbHVtbkRlZmluaXRpb25zIiwiaGVscGVyRGVmaW5pdGlvbnMiLCJsaW5lcyIsImJ1aWxkZXIiLCJyYXciLCJnZW5JbmRleERlZmluaXRpb24iLCJ0aXRsZSIsImZvcm1hdHRlZCIsInJlc3VsdCIsImdlbkdlbmVyYXRlZENvbHVtbkRlZmluaXRpb24iLCJnZW5Ob3JtYWxDb2x1bW5EZWZpbml0aW9uIiwicGdUeXBlIiwiZ2V0UGdUeXBlRm9yQ29sdW1uIiwic3RvcmFnZVR5cGUiLCJudWxsYWJsZUNsYXVzZSIsIm51bGxhYmxlIiwiY2hhaW5zIiwiZW5kc1dpdGgiLCJlbGVtZW50VHlwZSIsInNsaWNlIiwiZ2V0UGdBcnJheVR5cGUiLCJkaW1lbnNpb25zIiwibnVtYmVyVHlwZSIsInByZWNpc2lvbiIsInNjYWxlIiwiZXh0cmFUeXBlIiwiZGVmYXVsdFRvIiwiZ2VuVmVjdG9ySW5kZXhEZWZpbml0aW9uIiwidXNpbmciLCJnZW5QZ3Jvb25nYUluZGV4RGVmaW5pdGlvbiIsIm1ldGhvZE1hcCIsInVuaXF1ZSIsIm51bGxzTm90RGlzdGluY3RDbGF1c2UiLCJudWxsc05vdERpc3RpbmN0IiwidXNpbmdDbGF1c2UiLCJjb2wiLCJvcGNsYXNzQ2xhdXNlIiwic29ydE9yZGVyQ2xhdXNlIiwic29ydE9yZGVyIiwibnVsbHNGaXJzdENsYXVzZSIsIm51bGxzRmlyc3QiLCJjb2x1bW5DbGF1c2UiLCJwcm9wc0RpY3QiLCJvcHRpb24iLCJnZXRQZ3Jvb25nYUNvbHVtbk9wdGlvbiIsIm0iLCJlZkNvbnN0cnVjdGlvbiIsImxpc3RzIiwiZ2VuZXJhdGVDcmVhdGVDb2RlX0ZvcmVpZ24iLCJmb3JlaWducyIsInVwIiwiZG93biIsImdlbkZvcmVpZ25EZWZpbml0aW9ucyIsImZvcmVpZ25LZXlzU3RyaW5nIiwiZm9yZWlnbiIsInJlZHVjZSIsInIiLCJjb2x1bW5zU3RyaW5nUXVvdGUiLCJ0byIsIm9uVXBkYXRlIiwib25EZWxldGUiLCJnZW5lcmF0ZUFsdGVyQ29kZV9Db2x1bW5BbmRJbmRleGVzIiwiZW50aXR5Q29sdW1ucyIsImVudGl0eUluZGV4ZXMiLCJkYkNvbHVtbnMiLCJkYkluZGV4ZXMiLCJkYkZvcmVpZ25zIiwiY29tcGFyZURCIiwicmVzb2x2ZWRFbnRpdHlDb2x1bW5zIiwic2VhcmNoVGV4dENvbHVtbk5hbWVzIiwiZW50aXR5SWRDb2wiLCJmaW5kIiwiZGJJZENvbCIsImlzUGtUeXBlQ2hhbmdlZCIsImdlbmVyYXRlUGtUeXBlQ2hhbmdlTWlncmF0aW9uIiwiYWx0ZXJDb2x1bW5zVG8iLCJnZXRBbHRlckNvbHVtbnNUbyIsImFsdGVyQ29sdW1uTGluZXNUbyIsImdldEFsdGVyQ29sdW1uTGluZXNUbyIsImFsdGVySW5kZXhlc1RvIiwiZ2V0QWx0ZXJJbmRleGVzVG8iLCJyZWNyZWF0ZWRTZWFyY2hUZXh0Q29sdW1uTmFtZXMiLCJhbHRlciIsImRiQ29sdW1uIiwiZW50aXR5Q29sdW1uIiwicmVjcmVhdGVkU2VhcmNoVGV4dERiSW5kZXhlcyIsInNvbWUiLCJkcm9wIiwiZHJvcEluZGV4IiwicmVjcmVhdGVkU2VhcmNoVGV4dEVudGl0eUluZGV4ZXMiLCJhZGRJbmRleCIsImltcGxpY2l0bHlEcm9wcGVkRGJJbmRleGVzIiwiZXZlcnkiLCJpbmRleE5lZWRzVG9Ecm9wIiwiZHJvcHBlZEluZGV4IiwiaGFzVXBDaGFuZ2VzIiwidCIsInVwQnVpbGRlckxpbmVzIiwiZ2VuSW5kZXhEcm9wRGVmaW5pdGlvbiIsInVwUmF3TGluZXMiLCJkb3duQnVpbGRlckxpbmVzIiwiaW5kZXhDb2wiLCJpbmNsdWRlcyIsImRvd25SYXdMaW5lcyIsImFjdGlvbiIsImxlbiIsIm5vcm1hbGl6ZUNvbHVtbkZvckNvbXBhcmlzb24iLCJjb2x1bW5zVG8iLCJleHRyYUNvbHVtbnMiLCJkYiIsImNvbmNhdCIsInNhbWVEYkNvbHVtbnMiLCJzYW1lTWRDb2x1bW5zIiwiYSIsImIiLCJsaW5lc1RvIiwiYWRkQ29sdW1uRGVmcyIsImRyb3BDb2x1bW5OYW1lcyIsImZrVG9Ecm9wQmVmb3JlQ29sdW1uIiwiZmsiLCJkcm9wRmtMaW5lcyIsInJlc3RvcmVGa0xpbmVzIiwiZHJvcENvbHVtbkRlZnMiLCJjb2x1bW5EaWZmVXAiLCJjb2x1bW5EaWZmRG93biIsImwiLCJpbmRleGVzVG8iLCJpZGVudGl0eSIsImtleXMiLCJPYmplY3QiLCJrZXkiLCJzb3J0IiwiayIsImV4dHJhSW5kZXhlcyIsInNldE1pZ3JhdGlvbkluZGV4RGVmYXVsdHMiLCJpc1ZlY3RvckluZGV4Iiwic3VwcG9ydHNPcmRlcmluZyIsIm5vcm1hbGl6ZWRVc2luZyIsImdlbmVyYXRlQWx0ZXJDb2RlX0ZvcmVpZ25zIiwiZW50aXR5Rm9yZWlnbnMiLCJkcm9wcGluZ0NvbHVtbnMiLCJnZXRLZXkiLCJtZiIsImRyb3BwaW5nQ29sdW1uTmFtZXMiLCJma1RvIiwiZW50aXR5RiIsIm1hdGNoaW5nRGJGIiwiZGJGIiwiYWx0ZXJTcmMiLCJhbHRlckRzdCIsIm1hdGNoaW5nRW50aXR5RiIsImlzQ29sdW1uRHJvcHBpbmciLCJoYXNMaW5lcyIsInZhbHVlcyIsImdlbmVyYXRlQ3JlYXRlQ29kZSIsImVudGl0eVNldCIsImdlbmVyYXRlQWx0ZXJDb2RlIiwiZGJTZXQiLCJyZXBsYWNlQ29sdW1uRGVmYXVsdFRvIiwiYyIsInJlcGxhY2VOb0FjdGlvbk9uTXlTUUwiLCJmIiwiYWx0ZXJDb2RlcyIsImlzRXF1YWxDb2x1bW5zIiwiaXNFcXVhbEluZGV4ZXMiLCJhbHRlckNvZGUiLCJmbGF0IiwiX2VudGl0eUNvbHVtbnMiLCJfZW50aXR5SW5kZXhlcyIsIl9kYkNvbHVtbnMiLCJfZGJJbmRleGVzIiwiX2RiRm9yZWlnbnMiLCJyZWZlcmVuY2luZ0ZLcyIsImdldFJlZmVyZW5jaW5nRm9yZWlnbktleXMiLCJzZWxmUmVmZXJlbmNpbmdGS3MiLCJ0YWJsZU5hbWUiLCJleHRlcm5hbFJlZmVyZW5jaW5nRktzIiwicGtDb25zdHJhaW50TmFtZSIsIm5ld1BrUGdUeXBlIiwiZ2V0UGtQZ1R5cGUiLCJvbGRQa1BnVHlwZSIsInVwTGluZXMiLCJjb2x1bW5OYW1lIiwiY29u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
|
|
1660
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vY29kZS1nZW5lcmF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlcXVhbCBmcm9tIFwiZmFzdC1kZWVwLWVxdWFsXCI7XG5pbXBvcnQgdHlwZSB7IEtuZXggfSBmcm9tIFwia25leFwiO1xuaW1wb3J0IHsgYWxwaGFiZXRpY2FsLCBkaWZmIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIE5haXRlIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEVudGl0eVByb3AsXG4gIEdlbk1pZ3JhdGlvbkNvZGUsXG4gIE1pZ3JhdGlvbkNvbHVtbixcbiAgTWlncmF0aW9uRm9yZWlnbixcbiAgTWlncmF0aW9uSW5kZXgsXG4gIE1pZ3JhdGlvblNldCxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc1NlYXJjaFRleHRQcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBmb3JtYXRDb2RlIH0gZnJvbSBcIi4uL3V0aWxzL2Zvcm1hdHRlclwiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZVdpdGgsIGludGVyc2VjdGlvbkJ5IH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyIH0gZnJvbSBcIi4vcG9zdGdyZXNxbC1zY2hlbWEtcmVhZGVyXCI7XG5cbi8qKlxuICog7Lus65+8IOygleydmCDqsrDqs7wg7YOA7J6FXG4gKiAtIGJ1aWxkZXI6IEtuZXggdGFibGUgYnVpbGRlciDrqZTshJzrk5zroZwg7Iuk7ZaJ7ZWgIOq1rOusuCAodGFibGUueHh4KCkpXG4gKiAtIHJhdzoga25leC5yYXcoKeuhnCDsi6TtlontlaAg6rWs66y4XG4gKi9cbnR5cGUgQ29sdW1uRGVmaW5pdGlvblJlc3VsdCA9IHtcbiAgYnVpbGRlcjogc3RyaW5nW107XG4gIHJhdzogc3RyaW5nW107XG59O1xuXG50eXBlIFNlYXJjaFRleHRIZWxwZXJLaW5kID0gXCJ0ZXh0LWFycmF5XCIgfCBcImpzb25iLWFycmF5XCI7XG5cbnR5cGUgU2VhcmNoVGV4dEV4cHJlc3Npb25Ub2tlbiA9XG4gIHwgeyB0eXBlOiBcImlkZW50aWZpZXJcIjsgdmFsdWU6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcInF1b3RlZElkZW50aWZpZXJcIjsgdmFsdWU6IHN0cmluZyB9XG4gIHwgeyB0eXBlOiBcInN0cmluZ1wiOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwic3ltYm9sXCI7IHZhbHVlOiBcIihcIiB8IFwiKVwiIHwgXCIsXCIgfVxuICB8IHsgdHlwZTogXCJvcGVyYXRvclwiOyB2YWx1ZTogXCJ8fFwiIHwgXCI6OlwiIH07XG5cbnR5cGUgU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlID1cbiAgfCB7IHR5cGU6IFwiaWRlbnRpZmllclwiOyBuYW1lOiBzdHJpbmc7IHF1b3RlZDogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiBcInN0cmluZ1wiOyB2YWx1ZTogc3RyaW5nIH1cbiAgfCB7IHR5cGU6IFwiYm9vbGVhblwiOyB2YWx1ZTogYm9vbGVhbiB9XG4gIHwgeyB0eXBlOiBcImZ1bmN0aW9uXCI7IG5hbWU6IHN0cmluZzsgYXJnczogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlW10gfVxuICB8IHsgdHlwZTogXCJjb25jYXRcIjsgcGFydHM6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZVtdIH1cbiAgfCB7IHR5cGU6IFwiY29sbGF0ZVwiOyBleHByOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGU7IGNvbGxhdGlvbjogc3RyaW5nOyBxdW90ZWQ6IGJvb2xlYW4gfVxuICB8IHsgdHlwZTogXCJjYXN0XCI7IGV4cHI6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZTsgdGFyZ2V0VHlwZTogc3RyaW5nIH07XG5cbmNvbnN0IFNFQVJDSF9URVhUX0hFTFBFUl9ERUZJTklUSU9OUzogUmVjb3JkPFNlYXJjaFRleHRIZWxwZXJLaW5kLCBzdHJpbmc+ID0ge1xuICBcInRleHQtYXJyYXlcIjogYGF3YWl0IGtuZXgucmF3KFxcYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHNvbmFtdV90ZXh0X2FycmF5X2FnZyhhcnIgdGV4dFtdLCBjaSBib29sZWFuIERFRkFVTFQgdHJ1ZSlcblJFVFVSTlMgdGV4dFxuTEFOR1VBR0Ugc3FsIElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUXG5BUyAkJFxuICBTRUxFQ1Qgc3RyaW5nX2FnZyhcbiAgICBDQVNFIFdIRU4gY2kgVEhFTiBsb3dlcih2YWx1ZSkgRUxTRSB2YWx1ZSBFTkQsXG4gICAgJyAnXG4gIClcbiAgRlJPTSB1bm5lc3QoYXJyKSBBUyB2YWx1ZVxuJCRcXGApO2AsXG4gIFwianNvbmItYXJyYXlcIjogYGF3YWl0IGtuZXgucmF3KFxcYENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHNvbmFtdV9qc29uYl9hcnJheV9hZ2coYXJyIGpzb25iLCBjaSBib29sZWFuIERFRkFVTFQgdHJ1ZSlcblJFVFVSTlMgdGV4dFxuTEFOR1VBR0Ugc3FsIElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUXG5BUyAkJFxuICBTRUxFQ1Qgc3RyaW5nX2FnZyhcbiAgICBDQVNFIFdIRU4gY2kgVEhFTiBsb3dlcih2YWx1ZSkgRUxTRSB2YWx1ZSBFTkQsXG4gICAgJyAnXG4gIClcbiAgRlJPTSBqc29uYl9hcnJheV9lbGVtZW50c190ZXh0KGFycilcbiQkXFxgKTtgLFxufTtcblxuY2xhc3MgU2VhcmNoVGV4dEV4cHJlc3Npb25QYXJzZXIge1xuICBwcml2YXRlIGluZGV4ID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRva2VuczogU2VhcmNoVGV4dEV4cHJlc3Npb25Ub2tlbltdKSB7fVxuXG4gIGlzQXRFbmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoO1xuICB9XG5cbiAgcGFyc2VFeHByZXNzaW9uKCk6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VDb25jYXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDb25jYXQoKTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlIHtcbiAgICBjb25zdCBwYXJ0cyA9IFt0aGlzLnBhcnNlUG9zdGZpeCgpXTtcblxuICAgIHdoaWxlICh0aGlzLm1hdGNoT3BlcmF0b3IoXCJ8fFwiKSkge1xuICAgICAgcGFydHMucHVzaCh0aGlzLnBhcnNlUG9zdGZpeCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAxID8gcGFydHNbMF0gOiB7IHR5cGU6IFwiY29uY2F0XCIsIHBhcnRzIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUG9zdGZpeCgpOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUge1xuICAgIGxldCBub2RlID0gdGhpcy5wYXJzZVByaW1hcnkoKTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy5tYXRjaE9wZXJhdG9yKFwiOjpcIikpIHtcbiAgICAgICAgbm9kZSA9IHtcbiAgICAgICAgICB0eXBlOiBcImNhc3RcIixcbiAgICAgICAgICBleHByOiBub2RlLFxuICAgICAgICAgIHRhcmdldFR5cGU6IHRoaXMucGFyc2VUeXBlTmFtZSgpLFxuICAgICAgICB9O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWF0Y2hJZGVudGlmaWVyKFwiY29sbGF0ZVwiKSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZUNvbGxhdGlvblRva2VuKCk7XG4gICAgICAgIG5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogXCJjb2xsYXRlXCIsXG4gICAgICAgICAgZXhwcjogbm9kZSxcbiAgICAgICAgICBjb2xsYXRpb246IHRva2VuLnZhbHVlLFxuICAgICAgICAgIHF1b3RlZDogdG9rZW4udHlwZSA9PT0gXCJxdW90ZWRJZGVudGlmaWVyXCIsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VQcmltYXJ5KCk6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmNvbnN1bWVUb2tlbihcIu2RnO2YhOyLnVwiKTtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBcIihcIikge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICB0aGlzLmV4cGVjdFN5bWJvbChcIilcIik7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJzdHJpbmdcIiwgdmFsdWU6IHRva2VuLnZhbHVlIH07XG4gICAgfVxuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09IFwiaWRlbnRpZmllclwiIHx8IHRva2VuLnR5cGUgPT09IFwicXVvdGVkSWRlbnRpZmllclwiKSB7XG4gICAgICBjb25zdCBsb3dlck5hbWUgPSB0b2tlbi52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFwiaWRlbnRpZmllclwiICYmIChsb3dlck5hbWUgPT09IFwidHJ1ZVwiIHx8IGxvd2VyTmFtZSA9PT0gXCJmYWxzZVwiKSkge1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImJvb2xlYW5cIiwgdmFsdWU6IGxvd2VyTmFtZSA9PT0gXCJ0cnVlXCIgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWF0Y2hTeW1ib2woXCIoXCIpKSB7XG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBcImlkZW50aWZpZXJcIiAmJiBsb3dlck5hbWUgPT09IFwidHJpbVwiICYmIHRoaXMuaXNUcmltQm90aEZyb21Gb3JtKCkpIHtcbiAgICAgICAgICB0aGlzLmluZGV4ICs9IDI7XG4gICAgICAgICAgY29uc3QgYXJnID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgICAgICB0aGlzLmV4cGVjdFN5bWJvbChcIilcIik7XG4gICAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJmdW5jdGlvblwiLCBuYW1lOiBcInRyaW1cIiwgYXJnczogW2FyZ10gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLnBhcnNlRnVuY3Rpb25BcmdzKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgICAgICAgIG5hbWU6IHRva2VuLnZhbHVlLFxuICAgICAgICAgIGFyZ3MsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiaWRlbnRpZmllclwiLFxuICAgICAgICBuYW1lOiB0b2tlbi52YWx1ZSxcbiAgICAgICAgcXVvdGVkOiB0b2tlbi50eXBlID09PSBcInF1b3RlZElkZW50aWZpZXJcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGDsp4Dsm5DrkJjsp4Ag7JWK64qUIHNlYXJjaFRleHQgZXhwcmVzc2lvbiB0b2tlbjogJHt0b2tlbi50eXBlfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUZ1bmN0aW9uQXJncygpOiBTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGVbXSB7XG4gICAgaWYgKHRoaXMubWF0Y2hTeW1ib2woXCIpXCIpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgYXJnczogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlW10gPSBbXTtcbiAgICBkbyB7XG4gICAgICBhcmdzLnB1c2godGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7XG4gICAgfSB3aGlsZSAodGhpcy5tYXRjaFN5bWJvbChcIixcIikpO1xuXG4gICAgdGhpcy5leHBlY3RTeW1ib2woXCIpXCIpO1xuICAgIHJldHVybiBhcmdzO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVR5cGVOYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICAgIGlmIChcbiAgICAgICAgdG9rZW4/LnR5cGUgPT09IFwiaWRlbnRpZmllclwiIHx8XG4gICAgICAgIHRva2VuPy50eXBlID09PSBcInF1b3RlZElkZW50aWZpZXJcIiB8fFxuICAgICAgICAodG9rZW4/LnR5cGUgPT09IFwic3ltYm9sXCIgJiZcbiAgICAgICAgICAodG9rZW4udmFsdWUgPT09IFwiKFwiIHx8IHRva2VuLnZhbHVlID09PSBcIilcIiB8fCB0b2tlbi52YWx1ZSA9PT0gXCIsXCIpKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBcInN5bWJvbFwiKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJ0cy5wdXNoKHRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB0aGlzLmluZGV4ICs9IDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCLtg4DsnoUg7LqQ7Iqk7YyFIOuMgOyDgSDtg4DsnoXsnYQg7LC+7J2EIOyImCDsl4bsirXri4jri6QuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiIFwiKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3VtZUNvbGxhdGlvblRva2VuKCk6IEV4dHJhY3Q8XG4gICAgU2VhcmNoVGV4dEV4cHJlc3Npb25Ub2tlbixcbiAgICB7IHR5cGU6IFwiaWRlbnRpZmllclwiIHwgXCJxdW90ZWRJZGVudGlmaWVyXCIgfVxuICA+IHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuICAgIGlmICh0b2tlbj8udHlwZSAhPT0gXCJpZGVudGlmaWVyXCIgJiYgdG9rZW4/LnR5cGUgIT09IFwicXVvdGVkSWRlbnRpZmllclwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDT0xMQVRFIOuMgOyDgSDsi53rs4TsnpDrpbwg7LC+7J2EIOyImCDsl4bsirXri4jri6QuXCIpO1xuICAgIH1cbiAgICB0aGlzLmluZGV4ICs9IDE7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1RyaW1Cb3RoRnJvbUZvcm0oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYm90aFRva2VuID0gdGhpcy5wZWVrKCk7XG4gICAgY29uc3QgZnJvbVRva2VuID0gdGhpcy5wZWVrKDEpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGJvdGhUb2tlbj8udHlwZSA9PT0gXCJpZGVudGlmaWVyXCIgJiZcbiAgICAgIGJvdGhUb2tlbi52YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcImJvdGhcIiAmJlxuICAgICAgZnJvbVRva2VuPy50eXBlID09PSBcImlkZW50aWZpZXJcIiAmJlxuICAgICAgZnJvbVRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiZnJvbVwiXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwZWN0U3ltYm9sKHZhbHVlOiBcIihcIiB8IFwiKVwiIHwgXCIsXCIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWF0Y2hTeW1ib2wodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiJHt2YWx1ZX1cIiDthqDtgbDsnbQg7ZWE7JqU7ZWp64uI64ukLmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWF0Y2hTeW1ib2wodmFsdWU6IFwiKFwiIHwgXCIpXCIgfCBcIixcIik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5wZWVrKCk7XG4gICAgaWYgKHRva2VuPy50eXBlID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgdGhpcy5pbmRleCArPSAxO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgbWF0Y2hPcGVyYXRvcih2YWx1ZTogXCJ8fFwiIHwgXCI6OlwiKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodG9rZW4/LnR5cGUgPT09IFwib3BlcmF0b3JcIiAmJiB0b2tlbi52YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIG1hdGNoSWRlbnRpZmllcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnBlZWsoKTtcbiAgICBpZiAodG9rZW4/LnR5cGUgPT09IFwiaWRlbnRpZmllclwiICYmIHRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRoaXMuaW5kZXggKz0gMTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbnN1bWVUb2tlbihjb250ZXh0OiBzdHJpbmcpOiBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMucGVlaygpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtjb250ZXh0fSDthqDtgbDsnbQg7ZWE7JqU7ZWp64uI64ukLmApO1xuICAgIH1cbiAgICB0aGlzLmluZGV4ICs9IDE7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgcHJpdmF0ZSBwZWVrKG9mZnNldCA9IDApOiBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleCArIG9mZnNldF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SW5kZXhDb2x1bW5PcGNsYXNzKGNvbHVtbjogTWlncmF0aW9uSW5kZXhbXCJjb2x1bW5zXCJdW251bWJlcl0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY29sdW1uLm9wY2xhc3MgPz8gY29sdW1uLnZlY3Rvck9wcztcbn1cblxuZnVuY3Rpb24gdG9rZW5pemVTZWFyY2hUZXh0RXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBTZWFyY2hUZXh0RXhwcmVzc2lvblRva2VuW10ge1xuICBjb25zdCB0b2tlbnM6IFNlYXJjaFRleHRFeHByZXNzaW9uVG9rZW5bXSA9IFtdO1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChpbmRleCA8IGV4cHJlc3Npb24ubGVuZ3RoKSB7XG4gICAgY29uc3QgY2hhciA9IGV4cHJlc3Npb25baW5kZXhdO1xuXG4gICAgaWYgKGNoYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKC9cXHMvLnRlc3QoY2hhcikpIHtcbiAgICAgIGluZGV4ICs9IDE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZXhwcmVzc2lvbi5zdGFydHNXaXRoKFwifHxcIiwgaW5kZXgpKSB7XG4gICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwib3BlcmF0b3JcIiwgdmFsdWU6IFwifHxcIiB9KTtcbiAgICAgIGluZGV4ICs9IDI7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoZXhwcmVzc2lvbi5zdGFydHNXaXRoKFwiOjpcIiwgaW5kZXgpKSB7XG4gICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwib3BlcmF0b3JcIiwgdmFsdWU6IFwiOjpcIiB9KTtcbiAgICAgIGluZGV4ICs9IDI7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhciA9PT0gXCIoXCIgfHwgY2hhciA9PT0gXCIpXCIgfHwgY2hhciA9PT0gXCIsXCIpIHtcbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJzeW1ib2xcIiwgdmFsdWU6IGNoYXIgfSk7XG4gICAgICBpbmRleCArPSAxO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNoYXIgPT09IFwiJ1wiKSB7XG4gICAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgICAgaW5kZXggKz0gMTtcblxuICAgICAgd2hpbGUgKGluZGV4IDwgZXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGV4cHJlc3Npb25baW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gXCInXCIpIHtcbiAgICAgICAgICBpZiAoZXhwcmVzc2lvbltpbmRleCArIDFdID09PSBcIidcIikge1xuICAgICAgICAgICAgdmFsdWUgKz0gXCInXCI7XG4gICAgICAgICAgICBpbmRleCArPSAyO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlICs9IGN1cnJlbnQ7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICB9XG5cbiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogXCJzdHJpbmdcIiwgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgbGV0IHZhbHVlID0gXCJcIjtcbiAgICAgIGluZGV4ICs9IDE7XG5cbiAgICAgIHdoaWxlIChpbmRleCA8IGV4cHJlc3Npb24ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBleHByZXNzaW9uW2luZGV4XTtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdcIicpIHtcbiAgICAgICAgICBpZiAoZXhwcmVzc2lvbltpbmRleCArIDFdID09PSAnXCInKSB7XG4gICAgICAgICAgICB2YWx1ZSArPSAnXCInO1xuICAgICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSArPSBjdXJyZW50O1xuICAgICAgICBpbmRleCArPSAxO1xuICAgICAgfVxuXG4gICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwicXVvdGVkSWRlbnRpZmllclwiLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICgvW0EtWmEtel9dLy50ZXN0KGNoYXIpKSB7XG4gICAgICBsZXQgdmFsdWUgPSBjaGFyO1xuICAgICAgaW5kZXggKz0gMTtcblxuICAgICAgd2hpbGUgKGluZGV4IDwgZXhwcmVzc2lvbi5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGV4cHJlc3Npb25baW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCAhPT0gdW5kZWZpbmVkICYmIC9bQS1aYS16MC05XyRdLy50ZXN0KGN1cnJlbnQpKSB7XG4gICAgICAgICAgdmFsdWUgKz0gY3VycmVudDtcbiAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IFwiaWRlbnRpZmllclwiLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihg7KeA7JuQ65CY7KeAIOyViuuKlCBzZWFyY2hUZXh0IGV4cHJlc3Npb24g66y47J6QOiAke2NoYXJ9YCk7XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxpemVTZWFyY2hUZXh0R2VuZXJhdGVkRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBTZWFyY2hUZXh0RXhwcmVzc2lvblBhcnNlcih0b2tlbml6ZVNlYXJjaFRleHRFeHByZXNzaW9uKGV4cHJlc3Npb24pKTtcbiAgICBjb25zdCBwYXJzZWRFeHByZXNzaW9uID0gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbigpO1xuXG4gICAgaWYgKCFwYXJzZXIuaXNBdEVuZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZWFyY2hUZXh0IGV4cHJlc3Npb24g7YyM7Iux7J20IOuBneuCmOyngCDslYrslZjsirXri4jri6QuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJTZWFyY2hUZXh0RXhwcmVzc2lvbihub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUocGFyc2VkRXhwcmVzc2lvbikpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25GYWxsYmFjayhleHByZXNzaW9uKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUoXG4gIG5vZGU6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSxcbik6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSB7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSBcImlkZW50aWZpZXJcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm5vZGUsXG4gICAgICAgIG5hbWU6IG5vZGUucXVvdGVkID8gbm9kZS5uYW1lIDogbm9kZS5uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICB9O1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgY2FzZSBcImNvbmNhdFwiOiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IG5vZGUucGFydHMuZmxhdE1hcCgocGFydCkgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUGFydCA9IG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShwYXJ0KTtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRQYXJ0LnR5cGUgPT09IFwiY29uY2F0XCIgPyBub3JtYWxpemVkUGFydC5wYXJ0cyA6IFtub3JtYWxpemVkUGFydF07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiY29uY2F0XCIsIHBhcnRzIH07XG4gICAgfVxuICAgIGNhc2UgXCJjb2xsYXRlXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImNvbGxhdGVcIixcbiAgICAgICAgZXhwcjogbm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKG5vZGUuZXhwciksXG4gICAgICAgIGNvbGxhdGlvbjogbm9kZS5jb2xsYXRpb24udG9VcHBlckNhc2UoKSA9PT0gXCJDXCIgPyBcIkNcIiA6IG5vZGUuY29sbGF0aW9uLFxuICAgICAgICBxdW90ZWQ6IG5vZGUucXVvdGVkIHx8IG5vZGUuY29sbGF0aW9uLnRvVXBwZXJDYXNlKCkgPT09IFwiQ1wiLFxuICAgICAgfTtcbiAgICBjYXNlIFwiY2FzdFwiOiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkRXhwciA9IG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShub2RlLmV4cHIpO1xuICAgICAgY29uc3QgdGFyZ2V0VHlwZSA9IG5vZGUudGFyZ2V0VHlwZS5yZXBsYWNlKC9cXHMrL2csIFwiIFwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh0YXJnZXRUeXBlID09PSBcInRleHRcIiB8fCB0YXJnZXRUeXBlID09PSBcImNoYXJhY3RlciB2YXJ5aW5nXCIgfHwgdGFyZ2V0VHlwZSA9PT0gXCJ2YXJjaGFyXCIpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRFeHByO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJjYXN0XCIsXG4gICAgICAgIGV4cHI6IG5vcm1hbGl6ZWRFeHByLFxuICAgICAgICB0YXJnZXRUeXBlLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBub2RlLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGxldCBhcmdzID0gbm9kZS5hcmdzLm1hcCgoYXJnKSA9PiBub3JtYWxpemVTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUoYXJnKSk7XG5cbiAgICAgIGlmICgobmFtZSA9PT0gXCJ0cmltXCIgfHwgbmFtZSA9PT0gXCJidHJpbVwiKSAmJiBhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICBuYW1lOiBcInRyaW1cIixcbiAgICAgICAgICBhcmdzLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIChuYW1lID09PSBcInNvbmFtdV90ZXh0X2FycmF5X2FnZ1wiIHx8IG5hbWUgPT09IFwic29uYW11X2pzb25iX2FycmF5X2FnZ1wiKSAmJlxuICAgICAgICBhcmdzLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICBhcmdzWzFdPy50eXBlID09PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICBhcmdzWzFdLnZhbHVlID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgYXJncyA9IFthcmdzWzBdXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgICAgICBuYW1lLFxuICAgICAgICBhcmdzLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyU2VhcmNoVGV4dEV4cHJlc3Npb24obm9kZTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlLCBwYXJlbnRQcmVjZWRlbmNlID0gMCk6IHN0cmluZyB7XG4gIGNvbnN0IHByZWNlZGVuY2UgPSBnZXRTZWFyY2hUZXh0RXhwcmVzc2lvblByZWNlZGVuY2Uobm9kZSk7XG4gIGNvbnN0IHJlbmRlcmVkID0gKCgpID0+IHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSBcImlkZW50aWZpZXJcIjpcbiAgICAgICAgcmV0dXJuIG5vZGUucXVvdGVkID8gYFwiJHtub2RlLm5hbWUucmVwbGFjZUFsbCgnXCInLCAnXCJcIicpfVwiYCA6IG5vZGUubmFtZTtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIGAnJHtub2RlLnZhbHVlLnJlcGxhY2VBbGwoXCInXCIsIFwiJydcIil9J2A7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gbm9kZS52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiO1xuICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgIHJldHVybiBgJHtub2RlLm5hbWV9KCR7bm9kZS5hcmdzXG4gICAgICAgICAgLm1hcCgoYXJnKSA9PiByZW5kZXJTZWFyY2hUZXh0RXhwcmVzc2lvbihhcmcpKVxuICAgICAgICAgIC5qb2luKFwiLCBcIil9KWA7XG4gICAgICBjYXNlIFwiY29uY2F0XCI6XG4gICAgICAgIHJldHVybiBub2RlLnBhcnRzLm1hcCgocGFydCkgPT4gcmVuZGVyU2VhcmNoVGV4dEV4cHJlc3Npb24ocGFydCwgcHJlY2VkZW5jZSkpLmpvaW4oXCIgfHwgXCIpO1xuICAgICAgY2FzZSBcImNvbGxhdGVcIjoge1xuICAgICAgICBjb25zdCBjb2xsYXRpb24gPSBub2RlLnF1b3RlZFxuICAgICAgICAgID8gYFwiJHtub2RlLmNvbGxhdGlvbi5yZXBsYWNlQWxsKCdcIicsICdcIlwiJyl9XCJgXG4gICAgICAgICAgOiBub2RlLmNvbGxhdGlvbjtcbiAgICAgICAgcmV0dXJuIGAke3JlbmRlclNlYXJjaFRleHRFeHByZXNzaW9uKG5vZGUuZXhwciwgcHJlY2VkZW5jZSl9IENPTExBVEUgJHtjb2xsYXRpb259YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJjYXN0XCI6XG4gICAgICAgIHJldHVybiBgJHtyZW5kZXJTZWFyY2hUZXh0RXhwcmVzc2lvbihub2RlLmV4cHIsIHByZWNlZGVuY2UpfTo6JHtub2RlLnRhcmdldFR5cGV9YDtcbiAgICB9XG4gIH0pKCk7XG5cbiAgaWYgKHByZWNlZGVuY2UgPCBwYXJlbnRQcmVjZWRlbmNlKSB7XG4gICAgcmV0dXJuIGAoJHtyZW5kZXJlZH0pYDtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJlZDtcbn1cblxuZnVuY3Rpb24gZ2V0U2VhcmNoVGV4dEV4cHJlc3Npb25QcmVjZWRlbmNlKG5vZGU6IFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZSk6IG51bWJlciB7XG4gIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgY2FzZSBcImNvbmNhdFwiOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSBcImNvbGxhdGVcIjpcbiAgICBjYXNlIFwiY2FzdFwiOlxuICAgICAgcmV0dXJuIDI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAzO1xuICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRleHRFeHByZXNzaW9uRmFsbGJhY2soZXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4cHJlc3Npb25cbiAgICAucmVwbGFjZSgvXFxzKy9nLCBcIiBcIilcbiAgICAucmVwbGFjZSgvXFxiVFJJTVxccypcXChcXHMqQk9USFxccytGUk9NXFxzKy9naSwgXCJ0cmltKFwiKVxuICAgIC5yZXBsYWNlKC86Oig/OnRleHR8Y2hhcmFjdGVyIHZhcnlpbmd8dmFyY2hhcilcXGIvZ2ksIFwiXCIpXG4gICAgLnJlcGxhY2UoLyxcXHMqdHJ1ZVxcYi9naSwgXCJcIilcbiAgICAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiB2aXNpdFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShcbiAgbm9kZTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlLFxuICB2aXNpdG9yOiAobm9kZTogU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlKSA9PiB2b2lkLFxuKTogdm9pZCB7XG4gIHZpc2l0b3Iobm9kZSk7XG5cbiAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICBjYXNlIFwiY29uY2F0XCI6XG4gICAgICBub2RlLnBhcnRzLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgICAgdmlzaXRTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUocGFydCwgdmlzaXRvcik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwiY29sbGF0ZVwiOlxuICAgIGNhc2UgXCJjYXN0XCI6XG4gICAgICB2aXNpdFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShub2RlLmV4cHIsIHZpc2l0b3IpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgbm9kZS5hcmdzLmZvckVhY2goKGFyZykgPT4ge1xuICAgICAgICB2aXNpdFNlYXJjaFRleHRFeHByZXNzaW9uTm9kZShhcmcsIHZpc2l0b3IpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImlkZW50aWZpZXJcIjpcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTZWFyY2hUZXh0SGVscGVyS2luZHNGcm9tRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcpOiBTZXQ8U2VhcmNoVGV4dEhlbHBlcktpbmQ+IHtcbiAgY29uc3QgaGVscGVyS2luZHMgPSBuZXcgU2V0PFNlYXJjaFRleHRIZWxwZXJLaW5kPigpO1xuICBjb25zdCBhZGRIZWxwZXJLaW5kRnJvbU5hbWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5vcm1hbGl6ZWROYW1lID09PSBcInNvbmFtdV90ZXh0X2FycmF5X2FnZ1wiKSB7XG4gICAgICBoZWxwZXJLaW5kcy5hZGQoXCJ0ZXh0LWFycmF5XCIpO1xuICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZE5hbWUgPT09IFwic29uYW11X2pzb25iX2FycmF5X2FnZ1wiKSB7XG4gICAgICBoZWxwZXJLaW5kcy5hZGQoXCJqc29uYi1hcnJheVwiKTtcbiAgICB9XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgU2VhcmNoVGV4dEV4cHJlc3Npb25QYXJzZXIodG9rZW5pemVTZWFyY2hUZXh0RXhwcmVzc2lvbihleHByZXNzaW9uKSk7XG4gICAgY29uc3QgcGFyc2VkRXhwcmVzc2lvbiA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24oKTtcblxuICAgIGlmICghcGFyc2VyLmlzQXRFbmQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2VhcmNoVGV4dCBoZWxwZXIgZXhwcmVzc2lvbiDtjIzsi7HsnbQg64Gd64KY7KeAIOyViuyVmOyKteuLiOuLpC5cIik7XG4gICAgfVxuXG4gICAgdmlzaXRTZWFyY2hUZXh0RXhwcmVzc2lvbk5vZGUocGFyc2VkRXhwcmVzc2lvbiwgKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLnR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBhZGRIZWxwZXJLaW5kRnJvbU5hbWUobm9kZS5uYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgaWYgKC9cXGJzb25hbXVfdGV4dF9hcnJheV9hZ2dcXHMqXFwoL2kudGVzdChleHByZXNzaW9uKSkge1xuICAgICAgaGVscGVyS2luZHMuYWRkKFwidGV4dC1hcnJheVwiKTtcbiAgICB9XG4gICAgaWYgKC9cXGJzb25hbXVfanNvbmJfYXJyYXlfYWdnXFxzKlxcKC9pLnRlc3QoZXhwcmVzc2lvbikpIHtcbiAgICAgIGhlbHBlcktpbmRzLmFkZChcImpzb25iLWFycmF5XCIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoZWxwZXJLaW5kcztcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVNlYXJjaFRleHRDb2x1bW5zKHRhYmxlOiBzdHJpbmcsIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdKTogTWlncmF0aW9uQ29sdW1uW10ge1xuICBjb25zdCBlbnRpdHkgPSAoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gRW50aXR5TWFuYWdlci5nZXRCeVRhYmxlKHRhYmxlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSkoKTtcblxuICBpZiAoIWVudGl0eSkge1xuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cbiAgY29uc3QgcHJvcHNCeU5hbWUgPSBuZXcgTWFwKGVudGl0eS5wcm9wcy5tYXAoKHByb3ApID0+IFtwcm9wLm5hbWUsIHByb3BdKSk7XG5cbiAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcbiAgICBjb25zdCBwcm9wID0gcHJvcHNCeU5hbWUuZ2V0KGNvbHVtbi5uYW1lKTtcbiAgICBpZiAoIXByb3AgfHwgIWlzU2VhcmNoVGV4dFByb3AocHJvcCkpIHtcbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbHVtbixcbiAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICB0eXBlOiBcIlNUT1JFRFwiLFxuICAgICAgICBleHByZXNzaW9uOiBidWlsZFNlYXJjaFRleHRHZW5lcmF0ZWRFeHByZXNzaW9uKHByb3AsIHByb3BzQnlOYW1lKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU2VhcmNoVGV4dEdlbmVyYXRlZEV4cHJlc3Npb24oXG4gIHByb3A6IEV4dHJhY3Q8RW50aXR5UHJvcCwgeyB0eXBlOiBcInNlYXJjaFRleHRcIiB9PixcbiAgcHJvcHNCeU5hbWU6IE1hcDxzdHJpbmcsIEVudGl0eVByb3A+LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdG9rZW5zID0gcHJvcC5zb3VyY2VDb2x1bW5zLm1hcCgoc291cmNlKSA9PiB7XG4gICAgY29uc3Qgc291cmNlUHJvcCA9IHByb3BzQnlOYW1lLmdldChzb3VyY2UubmFtZSk7XG4gICAgaWYgKCFzb3VyY2VQcm9wKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHNlYXJjaFRleHQgc291cmNlIGNvbHVtbiBcIiR7c291cmNlLm5hbWV9XCLsnYQo66W8KSDssL7snYQg7IiYIOyXhuyKteuLiOuLpC5gKTtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlUHJvcC50eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gc291cmNlLmNhc2VJbnNlbnNpdGl2ZVxuICAgICAgICA/IGBsb3dlcihDT0FMRVNDRSgke3NvdXJjZS5uYW1lfSwgJycpKWBcbiAgICAgICAgOiBgQ09BTEVTQ0UoJHtzb3VyY2UubmFtZX0sICcnKWA7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZVByb3AudHlwZSA9PT0gXCJzdHJpbmdbXVwiKSB7XG4gICAgICByZXR1cm4gc291cmNlLmNhc2VJbnNlbnNpdGl2ZVxuICAgICAgICA/IGBDT0FMRVNDRShzb25hbXVfdGV4dF9hcnJheV9hZ2coJHtzb3VyY2UubmFtZX0pLCAnJylgXG4gICAgICAgIDogYENPQUxFU0NFKHNvbmFtdV90ZXh0X2FycmF5X2FnZygke3NvdXJjZS5uYW1lfSwgZmFsc2UpLCAnJylgO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2VQcm9wLnR5cGUgPT09IFwianNvblwiKSB7XG4gICAgICByZXR1cm4gc291cmNlLmNhc2VJbnNlbnNpdGl2ZVxuICAgICAgICA/IGBDT0FMRVNDRShzb25hbXVfanNvbmJfYXJyYXlfYWdnKCR7c291cmNlLm5hbWV9KSwgJycpYFxuICAgICAgICA6IGBDT0FMRVNDRShzb25hbXVfanNvbmJfYXJyYXlfYWdnKCR7c291cmNlLm5hbWV9LCBmYWxzZSksICcnKWA7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHNlYXJjaFRleHQgc291cmNlIGNvbHVtbiBcIiR7c291cmNlLm5hbWV9XCLsnZgg7YOA7J6FIFwiJHtzb3VyY2VQcm9wLnR5cGV9XCLsnYAo64qUKSDsp4Dsm5DrkJjsp4Ag7JWK7Iq164uI64ukLmAsXG4gICAgKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGB0cmltKCR7dG9rZW5zLmpvaW4oYCB8fCAnICcgfHwgYCl9KWA7XG59XG5cbmZ1bmN0aW9uIGdldFNlYXJjaFRleHRIZWxwZXJEZWZpbml0aW9ucyh0YWJsZTogc3RyaW5nLCBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaGVscGVyS2luZHMgPSBuZXcgU2V0PFNlYXJjaFRleHRIZWxwZXJLaW5kPigpO1xuXG4gIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgaWYgKCFjb2x1bW4uZ2VuZXJhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ2V0U2VhcmNoVGV4dEhlbHBlcktpbmRzRnJvbUV4cHJlc3Npb24oY29sdW1uLmdlbmVyYXRlZC5leHByZXNzaW9uKS5mb3JFYWNoKChraW5kKSA9PiB7XG4gICAgICBoZWxwZXJLaW5kcy5hZGQoa2luZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGlmIChoZWxwZXJLaW5kcy5zaXplID4gMCkge1xuICAgIHJldHVybiAoW1widGV4dC1hcnJheVwiLCBcImpzb25iLWFycmF5XCJdIGFzIGNvbnN0KVxuICAgICAgLmZpbHRlcigoa2luZCkgPT4gaGVscGVyS2luZHMuaGFzKGtpbmQpKVxuICAgICAgLm1hcCgoa2luZCkgPT4gU0VBUkNIX1RFWFRfSEVMUEVSX0RFRklOSVRJT05TW2tpbmRdKTtcbiAgfVxuXG4gIGNvbnN0IGVudGl0eSA9ICgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBFbnRpdHlNYW5hZ2VyLmdldEJ5VGFibGUodGFibGUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9KSgpO1xuXG4gIGlmICghZW50aXR5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHByb3BzQnlOYW1lID0gbmV3IE1hcChlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiBbcHJvcC5uYW1lLCBwcm9wXSkpO1xuXG4gIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzQnlOYW1lLmdldChjb2x1bW4ubmFtZSk7XG4gICAgaWYgKCFwcm9wIHx8ICFpc1NlYXJjaFRleHRQcm9wKHByb3ApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvcC5zb3VyY2VDb2x1bW5zLmZvckVhY2goKHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlUHJvcCA9IHByb3BzQnlOYW1lLmdldChzb3VyY2UubmFtZSk7XG4gICAgICBpZiAoc291cmNlUHJvcD8udHlwZSA9PT0gXCJzdHJpbmdbXVwiKSB7XG4gICAgICAgIGhlbHBlcktpbmRzLmFkZChcInRleHQtYXJyYXlcIik7XG4gICAgICB9IGVsc2UgaWYgKHNvdXJjZVByb3A/LnR5cGUgPT09IFwianNvblwiKSB7XG4gICAgICAgIGhlbHBlcktpbmRzLmFkZChcImpzb25iLWFycmF5XCIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gKFtcInRleHQtYXJyYXlcIiwgXCJqc29uYi1hcnJheVwiXSBhcyBjb25zdClcbiAgICAuZmlsdGVyKChraW5kKSA9PiBoZWxwZXJLaW5kcy5oYXMoa2luZCkpXG4gICAgLm1hcCgoa2luZCkgPT4gU0VBUkNIX1RFWFRfSEVMUEVSX0RFRklOSVRJT05TW2tpbmRdKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VhcmNoVGV4dENvbHVtbk5hbWVzKHRhYmxlOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IGVudGl0eSA9ICgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBFbnRpdHlNYW5hZ2VyLmdldEJ5VGFibGUodGFibGUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9KSgpO1xuXG4gIGlmICghZW50aXR5KSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgU2V0KGVudGl0eS5wcm9wcy5maWx0ZXIoaXNTZWFyY2hUZXh0UHJvcCkubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpKTtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg7IOd7ISx7ZWY64qUIOy8gOydtOyKpCAtIOy7rOufvC/snbjrjbHsiqQg7IOd7ISxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQ3JlYXRlQ29kZV9Db2x1bW5BbmRJbmRleGVzKFxuICB0YWJsZTogc3RyaW5nLFxuICBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgaW5kZXhlczogTWlncmF0aW9uSW5kZXhbXSxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZT4ge1xuICBjb25zdCByZXNvbHZlZENvbHVtbnMgPSByZXNvbHZlU2VhcmNoVGV4dENvbHVtbnModGFibGUsIGNvbHVtbnMpO1xuICBjb25zdCBjb2x1bW5EZWZzID0gZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIHJlc29sdmVkQ29sdW1ucyk7XG4gIGNvbnN0IGhlbHBlckRlZmluaXRpb25zID0gZ2V0U2VhcmNoVGV4dEhlbHBlckRlZmluaXRpb25zKHRhYmxlLCByZXNvbHZlZENvbHVtbnMpO1xuXG4gIC8vIOy7rOufvCwg7J24642x7IqkIOyymOumrFxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgJ2ltcG9ydCB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4uaGVscGVyRGVmaW5pdGlvbnMsXG4gICAgYGF3YWl0IGtuZXguc2NoZW1hLmNyZWF0ZVRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCxcbiAgICAuLi5jb2x1bW5EZWZzLmJ1aWxkZXIsXG4gICAgXCJ9KTtcIixcbiAgICAvLyByYXcg6rWs66y4IChHZW5lcmF0ZWQgQ29sdW1uIOuTsSlcbiAgICAuLi5jb2x1bW5EZWZzLnJhdyxcbiAgICAvLyBpbmRleOuKlCBrbmV4LnJhd+uhnCDsspjrpqztlZjrr4DroZwgY3JlYXRlVGFibGUg67CW7JeQ7IScIOyLpO2WiVxuICAgIC4uLmluZGV4ZXMubWFwKChpbmRleCkgPT4gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSkpLFxuICAgIFwifVwiLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgYCByZXR1cm4ga25leC5zY2hlbWEuZHJvcFRhYmxlKFwiJHt0YWJsZX1cIik7YCxcbiAgICBcIn1cIixcbiAgXTtcbiAgcmV0dXJuIHtcbiAgICB0YWJsZSxcbiAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIHRpdGxlOiBgY3JlYXRlX18ke3RhYmxlfWAsXG4gICAgZm9ybWF0dGVkOiBmb3JtYXRDb2RlKGxpbmVzLmpvaW4oXCJcXG5cIiksIFwidHlwZXNjcmlwdFwiLCBgc3JjL21pZ3JhdGlvbi8ke3RhYmxlfS50c2ApLFxuICB9O1xufVxuXG4vKipcbiAqIE1pZ3JhdGlvbkNvbHVtbltdIOydveyWtOyEnCDsu6zrn7wg7KCV7J2Y7ZWY64qUIOq1rOusuCDsg53shLFcbiAqIEByZXR1cm5zIGJ1aWxkZXI6IHRhYmxlIGJ1aWxkZXIg66mU7ISc65OcLCByYXc6IGtuZXgucmF3KCkg6rWs66y4XG4gKi9cbmZ1bmN0aW9uIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlOiBzdHJpbmcsIGNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdKTogQ29sdW1uRGVmaW5pdGlvblJlc3VsdCB7XG4gIGNvbnN0IHJlc3VsdDogQ29sdW1uRGVmaW5pdGlvblJlc3VsdCA9IHtcbiAgICBidWlsZGVyOiBbXSxcbiAgICByYXc6IFtdLFxuICB9O1xuXG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICAvLyBHZW5lcmF0ZWQgQ29sdW1u7J2AIHJhd+uhnCDsspjrpqxcbiAgICBpZiAoY29sdW1uLmdlbmVyYXRlZCkge1xuICAgICAgcmVzdWx0LnJhdy5wdXNoKGdlbkdlbmVyYXRlZENvbHVtbkRlZmluaXRpb24odGFibGUsIGNvbHVtbikpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8g7J2867CYIOy7rOufvOydgCBidWlsZGVy66GcIOyymOumrFxuICAgIHJlc3VsdC5idWlsZGVyLnB1c2goZ2VuTm9ybWFsQ29sdW1uRGVmaW5pdGlvbihjb2x1bW4pKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVkIENvbHVtbiDsoJXsnZgg7IOd7ISxIChBTFRFUiBUQUJMRSBBREQgQ09MVU1OIOyCrOyaqSlcbiAqL1xuZnVuY3Rpb24gZ2VuR2VuZXJhdGVkQ29sdW1uRGVmaW5pdGlvbih0YWJsZTogc3RyaW5nLCBjb2x1bW46IE1pZ3JhdGlvbkNvbHVtbik6IHN0cmluZyB7XG4gIGlmICghY29sdW1uLmdlbmVyYXRlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRlZCBjb2x1bW4gZGVmaW5pdGlvbiByZXF1aXJlZFwiKTtcbiAgfVxuICBjb25zdCBwZ1R5cGUgPSBnZXRQZ1R5cGVGb3JDb2x1bW4oY29sdW1uKTtcbiAgY29uc3Qgc3RvcmFnZVR5cGUgPSBjb2x1bW4uZ2VuZXJhdGVkLnR5cGUgPT09IFwiVklSVFVBTFwiID8gXCIgVklSVFVBTFwiIDogXCIgU1RPUkVEXCI7XG4gIGNvbnN0IG51bGxhYmxlQ2xhdXNlID0gY29sdW1uLm51bGxhYmxlID8gXCJcIiA6IFwiIE5PVCBOVUxMXCI7XG4gIHJldHVybiBgYXdhaXQga25leC5yYXcoXFxgQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIEFERCBDT0xVTU4gXCIke2NvbHVtbi5uYW1lfVwiICR7cGdUeXBlfSBHRU5FUkFURUQgQUxXQVlTIEFTICgke2NvbHVtbi5nZW5lcmF0ZWQuZXhwcmVzc2lvbn0pJHtzdG9yYWdlVHlwZX0ke251bGxhYmxlQ2xhdXNlfVxcYCk7YDtcbn1cblxuLyoqXG4gKiDsnbzrsJgg7Lus65+8IOygleydmCDsg53shLEgKHRhYmxlLnh4eCgpIOyytOyduClcbiAqL1xuZnVuY3Rpb24gZ2VuTm9ybWFsQ29sdW1uRGVmaW5pdGlvbihjb2x1bW46IE1pZ3JhdGlvbkNvbHVtbik6IHN0cmluZyB7XG4gIGNvbnN0IGNoYWluczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoY29sdW1uLm5hbWUgPT09IFwiaWRcIikge1xuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbgg67aE6riwIOyymOumrFxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gc3RyaW5nIFBLOiBsZW5ndGjqsIAg7J6I7Jy866m0IHZhcmNoYXIsIOyXhuycvOuptCB0ZXh0XG4gICAgICBpZiAoY29sdW1uLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBgdGFibGUuc3RyaW5nKCdpZCcsICR7Y29sdW1uLmxlbmd0aH0pLnByaW1hcnkoKS5ub3ROdWxsYWJsZSgpO2A7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHRhYmxlLnRleHQoJ2lkJykucHJpbWFyeSgpLm5vdE51bGxhYmxlKCk7YDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBcInV1aWRcIikge1xuICAgICAgcmV0dXJuIGB0YWJsZS51dWlkKCdpZCcpLnByaW1hcnkoKS5ub3ROdWxsYWJsZSgpO2A7XG4gICAgfVxuICAgIC8vIOq4sOyhtCBpbnRlZ2VyIFBLICjquLDrs7jqsJIpXG4gICAgcmV0dXJuIGB0YWJsZS5pbmNyZW1lbnRzKCkucHJpbWFyeSgpO2A7XG4gIH1cblxuICAvLyDrsLDsl7Qg7YOA7J6FIOyymOumrFxuICBpZiAoY29sdW1uLnR5cGUuZW5kc1dpdGgoXCJbXVwiKSkge1xuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gY29sdW1uLnR5cGUuc2xpY2UoMCwgLTIpOyAvLyBcImludGVnZXJbXVwiIC0+IFwiaW50ZWdlclwiXG4gICAgY29uc3QgcGdUeXBlID0gZ2V0UGdBcnJheVR5cGUoY29sdW1uLCBlbGVtZW50VHlwZSk7XG4gICAgY2hhaW5zLnB1c2goYHNwZWNpZmljVHlwZSgnJHtjb2x1bW4ubmFtZX0nLCAnJHtwZ1R5cGV9JylgKTtcbiAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJ2ZWN0b3JcIikge1xuICAgIC8vIEtuZXjripQgdmVjdG9yIO2DgOyeheydhCDsp4HsoJEg7KeA7JuQ7ZWY7KeAIOyViuycvOuvgOuhnCBzcGVjaWZpY1R5cGUg7IKs7JqpXG4gICAgY2hhaW5zLnB1c2goYHNwZWNpZmljVHlwZSgnJHtjb2x1bW4ubmFtZX0nLCAndmVjdG9yKCR7Y29sdW1uLmRpbWVuc2lvbnN9KScpYCk7XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwibnVtYmVyT3JOdW1lcmljXCIpIHtcbiAgICAvLyBudW1iZXJcbiAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwicmVhbFwiKSB7XG4gICAgICBjaGFpbnMucHVzaChgZmxvYXQoJyR7Y29sdW1uLm5hbWV9JylgKTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcImRvdWJsZSBwcmVjaXNpb25cIikge1xuICAgICAgY2hhaW5zLnB1c2goYGRvdWJsZSgnJHtjb2x1bW4ubmFtZX0nKWApO1xuICAgIH0gZWxzZSBpZiAoKGNvbHVtbi5udW1iZXJUeXBlID8/IFwibnVtZXJpY1wiKSA9PT0gXCJudW1lcmljXCIpIHtcbiAgICAgIGNoYWlucy5wdXNoKGBkZWNpbWFsKCcke2NvbHVtbi5uYW1lfScsICR7Y29sdW1uLnByZWNpc2lvbn0sICR7Y29sdW1uLnNjYWxlfSlgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAvLyBzdHJpbmdcbiAgICBpZiAoY29sdW1uLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGFpbnMucHVzaChgc3RyaW5nKCcke2NvbHVtbi5uYW1lfScsICR7Y29sdW1uLmxlbmd0aH0pYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYWlucy5wdXNoKGB0ZXh0KCcke2NvbHVtbi5uYW1lfScpYCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBcImRhdGVcIikge1xuICAgIC8vIGRhdGVcbiAgICBjaGFpbnMucHVzaChcbiAgICAgIGB0aW1lc3RhbXAoJyR7Y29sdW1uLm5hbWV9JywgeyB1c2VUejogdHJ1ZSwgcHJlY2lzaW9uOiAke2NvbHVtbi5wcmVjaXNpb24gPz8gM30gfSlgLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwianNvblwiKSB7XG4gICAgLy8ganNvblxuICAgIGNoYWlucy5wdXNoKGBqc29uYignJHtjb2x1bW4ubmFtZX0nKWApO1xuICB9IGVsc2Uge1xuICAgIC8vIHR5cGUsIGxlbmd0aFxuICAgIGxldCBleHRyYVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBjaGFpbnMucHVzaChcbiAgICAgIGAke2NvbHVtbi50eXBlfSgnJHtjb2x1bW4ubmFtZX0nJHtcbiAgICAgICAgY29sdW1uLmxlbmd0aCA/IGAsICR7Y29sdW1uLmxlbmd0aH1gIDogXCJcIlxuICAgICAgfSR7ZXh0cmFUeXBlID8gYCwgJyR7ZXh0cmFUeXBlfSdgIDogXCJcIn0pYCxcbiAgICApO1xuICB9XG5cbiAgLy8gbnVsbGFibGVcbiAgY2hhaW5zLnB1c2goY29sdW1uLm51bGxhYmxlID8gXCJudWxsYWJsZSgpXCIgOiBcIm5vdE51bGxhYmxlKClcIik7XG5cbiAgLy8gZGVmYXVsdFRvXG4gIGlmIChjb2x1bW4uZGVmYXVsdFRvICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5kZWZhdWx0VG8gPT09IFwic3RyaW5nXCIgJiYgY29sdW1uLmRlZmF1bHRUby5zdGFydHNXaXRoKGBcImApKSB7XG4gICAgICBjaGFpbnMucHVzaChgZGVmYXVsdFRvKCR7Y29sdW1uLmRlZmF1bHRUb30pYCk7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJqc29uXCIgJiYgdHlwZW9mIGNvbHVtbi5kZWZhdWx0VG8uc3RhcnRzV2l0aCgnXCInKSkge1xuICAgICAgY2hhaW5zLnB1c2goYGRlZmF1bHRUbyhrbmV4LnJhdyhcIiR7Y29sdW1uLmRlZmF1bHRUby5yZXBsYWNlQWxsKCdcIicsIFwiJ1wiKX06Ompzb25iXCIpKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFpbnMucHVzaChgZGVmYXVsdFRvKGtuZXgucmF3KCcke2NvbHVtbi5kZWZhdWx0VG99JykpYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGB0YWJsZS4ke2NoYWlucy5qb2luKFwiLlwiKX07YDtcbn1cblxuLyoqXG4gKiBNaWdyYXRpb25Db2x1bW7snZgg7YOA7J6F7J2EIFBvc3RncmVTUUwg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZhcbiAqL1xuZnVuY3Rpb24gZ2V0UGdUeXBlRm9yQ29sdW1uKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uKTogc3RyaW5nIHtcbiAgaWYgKGNvbHVtbi50eXBlLmVuZHNXaXRoKFwiW11cIikpIHtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IGNvbHVtbi50eXBlLnNsaWNlKDAsIC0yKTtcbiAgICByZXR1cm4gZ2V0UGdBcnJheVR5cGUoY29sdW1uLCBlbGVtZW50VHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIGNvbHVtbi5sZW5ndGggIT09IHVuZGVmaW5lZCA/IGB2YXJjaGFyKCR7Y29sdW1uLmxlbmd0aH0pYCA6IFwidGV4dFwiO1xuICAgIGNhc2UgXCJiaWdJbnRlZ2VyXCI6XG4gICAgICByZXR1cm4gXCJiaWdpbnRcIjtcbiAgICBjYXNlIFwibnVtYmVyT3JOdW1lcmljXCI6XG4gICAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwicmVhbFwiKSByZXR1cm4gXCJyZWFsXCI7XG4gICAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwiZG91YmxlIHByZWNpc2lvblwiKSByZXR1cm4gXCJkb3VibGUgcHJlY2lzaW9uXCI7XG4gICAgICByZXR1cm4gYG51bWVyaWMoJHtjb2x1bW4ucHJlY2lzaW9ufSwgJHtjb2x1bW4uc2NhbGV9KWA7XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiBcInRpbWVzdGFtcHR6XCI7XG4gICAgY2FzZSBcImpzb25cIjpcbiAgICAgIHJldHVybiBcImpzb25iXCI7XG4gICAgY2FzZSBcInZlY3RvclwiOlxuICAgICAgcmV0dXJuIGB2ZWN0b3IoJHtjb2x1bW4uZGltZW5zaW9uc30pYDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbHVtbi50eXBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBnQXJyYXlUeXBlKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uLCBlbGVtZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcIm51bWJlck9yTnVtZXJpY1wiKSB7XG4gICAgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcInJlYWxcIikgcmV0dXJuIFwicmVhbFtdXCI7XG4gICAgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcImRvdWJsZSBwcmVjaXNpb25cIikgcmV0dXJuIFwiZG91YmxlIHByZWNpc2lvbltdXCI7XG4gICAgcmV0dXJuIGBudW1lcmljKCR7Y29sdW1uLnByZWNpc2lvbn0sICR7Y29sdW1uLnNjYWxlfSlbXWA7XG4gIH1cbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5sZW5ndGggPyBgdmFyY2hhcigke2NvbHVtbi5sZW5ndGh9KVtdYCA6IFwidGV4dFtdXCI7XG4gIH1cbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImRhdGVcIikgcmV0dXJuIFwidGltZXN0YW1wdHpbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiaW50ZWdlclwiKSByZXR1cm4gXCJpbnRlZ2VyW11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImJpZ0ludGVnZXJcIikgcmV0dXJuIFwiYmlnaW50W11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIFwiYm9vbGVhbltdXCI7XG4gIGlmIChlbGVtZW50VHlwZSA9PT0gXCJ1dWlkXCIpIHJldHVybiBcInV1aWRbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiZW51bVwiKSByZXR1cm4gXCJ0ZXh0W11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcInZlY3RvclwiKSByZXR1cm4gYHZlY3Rvcigke2NvbHVtbi5kaW1lbnNpb25zfSlbXWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFycmF5IGVsZW1lbnQgdHlwZTogJHtlbGVtZW50VHlwZX1gKTtcbn1cblxuLyoqXG4gKiDqsJzrs4Qg7J24642x7IqkIOygleydmCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCwgdGFibGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChpbmRleC50eXBlID09PSBcImhuc3dcIiB8fCBpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIikge1xuICAgIHJldHVybiBnZW5WZWN0b3JJbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKTtcbiAgfVxuXG4gIGlmIChpbmRleC51c2luZyA9PT0gXCJwZ3Jvb25nYVwiKSB7XG4gICAgcmV0dXJuIGdlblBncm9vbmdhSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSk7XG4gIH1cblxuICBjb25zdCBtZXRob2RNYXAgPSB7XG4gICAgaW5kZXg6IFwiSU5ERVhcIixcbiAgICB1bmlxdWU6IFwiVU5JUVVFIElOREVYXCIsXG4gIH07XG5cbiAgY29uc3QgbnVsbHNOb3REaXN0aW5jdENsYXVzZSA9XG4gICAgaW5kZXgudHlwZSA9PT0gXCJ1bmlxdWVcIiAmJiBpbmRleC5udWxsc05vdERpc3RpbmN0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gYCBOVUxMUyAke2luZGV4Lm51bGxzTm90RGlzdGluY3QgPyBcIk5PVCBESVNUSU5DVFwiIDogXCJESVNUSU5DVFwifWBcbiAgICAgIDogXCJcIjtcblxuICBjb25zdCB1c2luZ0NsYXVzZSA9IGluZGV4LnVzaW5nID09PSB1bmRlZmluZWQgPyBcIlwiIDogYFVTSU5HICR7aW5kZXgudXNpbmd9YDtcblxuICByZXR1cm4gYGF3YWl0IGtuZXgucmF3KFxuICBcXGBDUkVBVEUgJHttZXRob2RNYXBbaW5kZXgudHlwZV19ICR7aW5kZXgubmFtZX0gT04gJHt0YWJsZX0gJHt1c2luZ0NsYXVzZX0oJHtpbmRleC5jb2x1bW5zXG4gICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICBjb25zdCBvcGNsYXNzQ2xhdXNlID0gKCgpID0+IHtcbiAgICAgICAgY29uc3Qgb3BjbGFzcyA9IGdldEluZGV4Q29sdW1uT3BjbGFzcyhjb2wpO1xuICAgICAgICByZXR1cm4gb3BjbGFzcyA/IGAgJHtvcGNsYXNzfWAgOiBcIlwiO1xuICAgICAgfSkoKTtcblxuICAgICAgLy8g7KCV66CsIOyYteyFmOydgCBidHJlZeunjCDsgqzsmqkg6rCA64qlXG4gICAgICBpZiAoaW5kZXgudXNpbmcgIT09IFwiYnRyZWVcIiAmJiBpbmRleC51c2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBgJHtjb2wubmFtZX0ke29wY2xhc3NDbGF1c2V9YDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc29ydE9yZGVyQ2xhdXNlID0gY29sLnNvcnRPcmRlciA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgJHtjb2wuc29ydE9yZGVyfWA7XG4gICAgICBjb25zdCBudWxsc0ZpcnN0Q2xhdXNlID1cbiAgICAgICAgY29sLm51bGxzRmlyc3QgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBgIE5VTExTICR7Y29sLm51bGxzRmlyc3QgPyBcIkZJUlNUXCIgOiBcIkxBU1RcIn1gO1xuICAgICAgcmV0dXJuIGAke2NvbC5uYW1lfSR7b3BjbGFzc0NsYXVzZX0ke3NvcnRPcmRlckNsYXVzZX0ke251bGxzRmlyc3RDbGF1c2V9YDtcbiAgICB9KVxuICAgIC5qb2luKFwiLCBcIil9KSR7bnVsbHNOb3REaXN0aW5jdENsYXVzZX07XFxgXG4gICk7YDtcbn1cblxuZnVuY3Rpb24gZ2VuUGdyb29uZ2FJbmRleERlZmluaXRpb24oaW5kZXg6IE1pZ3JhdGlvbkluZGV4LCB0YWJsZTogc3RyaW5nKSB7XG4gIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0QnlUYWJsZSh0YWJsZSk7XG5cbiAgLy8g67O17ZWpIOyduOuNseyKpOyduCDqsr3smrAgQVJSQVkg7IKs7JqpXG4gIGNvbnN0IGNvbHVtbkNsYXVzZSA9ICgoKSA9PiB7XG4gICAgaWYgKGluZGV4LmNvbHVtbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBlbnRpdHkucHJvcHNEaWN0W2luZGV4LmNvbHVtbnNbMF0ubmFtZV07XG4gICAgICBjb25zdCBvcHRpb24gPSBnZXRQZ3Jvb25nYUNvbHVtbk9wdGlvbihjb2x1bW4pO1xuICAgICAgcmV0dXJuIGAke2luZGV4LmNvbHVtbnNbMF0ubmFtZX0ke29wdGlvbiA/IGAgJHtvcHRpb259YCA6IFwiXCJ9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYChBUlJBWVske2luZGV4LmNvbHVtbnMubWFwKChjb2wpID0+IGAke2NvbC5uYW1lfTo6dGV4dGApLmpvaW4oXCIsXCIpfV0pYDtcbiAgfSkoKTtcblxuICByZXR1cm4gYGF3YWl0IGtuZXgucmF3KFxuICBcXGBDUkVBVEUgSU5ERVggJHtpbmRleC5uYW1lfSBPTiAke3RhYmxlfSBVU0lORyBwZ3Jvb25nYSAoJHtjb2x1bW5DbGF1c2V9KSBXSVRIICh0b2tlbml6ZXI9J1Rva2VuTWVjYWInKTtcXGBcbiAgKWA7XG59XG5cbi8qKlxuICogUEdyb29uZ2Eg7Lus65+8IOyYteyFmCDstpTstpxcbiAqXG4gKiBGdWxsVGV4dCDsmKTtjbzroIjsnbTthLDrpbwg7KeA7JuQ7ZWY64qUIOqyveyasCDsmrDshKAg7ISk7KCVLCDrgpjrqLjsp4DripQg65SU7Y+07Yq4IOydtOyaqVxuICogQGxpbmsgaHR0cHM6Ly9wZ3Jvb25nYS5naXRodWIuaW8vcmVmZXJlbmNlXG4gKi9cbmZ1bmN0aW9uIGdldFBncm9vbmdhQ29sdW1uT3B0aW9uKGNvbHVtbjogRW50aXR5UHJvcCkge1xuICBpZiAoY29sdW1uLnR5cGUgPT09IFwic3RyaW5nXCIgJiYgY29sdW1uLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFwicGdyb29uZ2FfdmFyY2hhcl9mdWxsX3RleHRfc2VhcmNoX29wc192MlwiO1xuICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBcImpzb25cIikge1xuICAgIHJldHVybiBcInBncm9vbmdhX2pzb25iX2Z1bGxfdGV4dF9zZWFyY2hfb3BzX3YyXCI7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiAtIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpOiDripDrprAg67mM65OcLCDruaDrpbgg6rKA7IOJIOyGjeuPhCwg64aS7J2AIOuplOuqqOumrCDrsI8g7KCV7ZmV64+EXG4gKiAtIElWRkZsYXQgKEludmVydGVkIEZpbGUgd2l0aCBGbGF0IENvbXByZXNzaW9uKTog67mg66W4IOu5jOuTnCwg7KSR6rCEIOqygOyDiSDsho3rj4QsIOuCruydgCDrqZTrqqjrpqxcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSE5TVyDsnbjrjbHsiqQgKOq2jOyepSAtIOu5oOuluCDqsoDsg4ksIOuGkuydgCDsoJXtmZXrj4QpXG4gKiBDUkVBVEUgSU5ERVggaWR4X2VtYmVkZGluZyBPTiBpdGVtcyBVU0lORyBobnN3IChlbWJlZGRpbmcgdmVjdG9yX2Nvc2luZV9vcHMpIFdJVEggKG0gPSAxNiwgZWZfY29uc3RydWN0aW9uID0gNjQpO1xuICpcbiAqIC8vIElWRkZsYXQg7J24642x7IqkICjrjIDsmqnrn4kg642w7J207YSwLCDruYTsmqkg7KSR7JqUIOyLnClcbiAqIENSRUFURSBJTkRFWCBpZHhfZW1iZWRkaW5nIE9OIGl0ZW1zIFVTSU5HIGl2ZmZsYXQgKGVtYmVkZGluZyB2ZWN0b3JfY29zaW5lX29wcykgV0lUSCAobGlzdHMgPSAxMDApO1xuICovXG5mdW5jdGlvbiBnZW5WZWN0b3JJbmRleERlZmluaXRpb24oaW5kZXg6IE1pZ3JhdGlvbkluZGV4LCB0YWJsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY29sdW1uID0gaW5kZXguY29sdW1uc1swXTtcbiAgY29uc3QgdmVjdG9yT3BzID0gZ2V0SW5kZXhDb2x1bW5PcGNsYXNzKGNvbHVtbikgPz8gXCJ2ZWN0b3JfY29zaW5lX29wc1wiO1xuXG4gIC8vIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpIC0g6raM7J6lOiDruaDrpbgg6rKA7IOJLCDrhpLsnYAg7KCV7ZmV64+EXG4gIGlmIChpbmRleC50eXBlID09PSBcImhuc3dcIikge1xuICAgIGNvbnN0IG0gPSBpbmRleC5tID8/IDE2O1xuICAgIGNvbnN0IGVmQ29uc3RydWN0aW9uID0gaW5kZXguZWZDb25zdHJ1Y3Rpb24gPz8gNjQ7XG4gICAgcmV0dXJuIGBhd2FpdCBrbmV4LnJhdyhcXGBDUkVBVEUgSU5ERVggJHtpbmRleC5uYW1lfSBPTiAke3RhYmxlfSBVU0lORyBobnN3ICgke2NvbHVtbi5uYW1lfSAke3ZlY3Rvck9wc30pIFdJVEggKG0gPSAke219LCBlZl9jb25zdHJ1Y3Rpb24gPSAke2VmQ29uc3RydWN0aW9ufSlcXGApO2A7XG4gIH1cblxuICAvLyBJVkZGbGF0IChJbnZlcnRlZCBGaWxlIHdpdGggRmxhdCBDb21wcmVzc2lvbikgLSDrjIDsmqnrn4ksIOu5hOyaqSDspJHsmpQg7IucXG4gIGlmIChpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIikge1xuICAgIGNvbnN0IGxpc3RzID0gaW5kZXgubGlzdHMgPz8gMTAwO1xuICAgIHJldHVybiBgYXdhaXQga25leC5yYXcoXFxgQ1JFQVRFIElOREVYICR7aW5kZXgubmFtZX0gT04gJHt0YWJsZX0gVVNJTkcgaXZmZmxhdCAoJHtjb2x1bW4ubmFtZX0gJHt2ZWN0b3JPcHN9KSBXSVRIIChsaXN0cyA9ICR7bGlzdHN9KVxcYCk7YDtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByYXcgU1FMIGluZGV4IHR5cGU6ICR7aW5kZXgudHlwZX1gKTtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg7IOd7ISx7ZWY64qUIOy8gOydtOyKpCAtIEZLIOyDneyEsVxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNyZWF0ZUNvZGVfRm9yZWlnbihcbiAgdGFibGU6IHN0cmluZyxcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIGlmIChmb3JlaWducy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7IHVwLCBkb3duIH0gPSBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZvcmVpZ25zKTtcbiAgaWYgKHVwLmxlbmd0aCA9PT0gMCAmJiBkb3duLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIGZvcmVpZ25z6rCAIOyeiOuKlOuNsCDsg53shLHrkJwg7L2U65Oc6rCAIOyXhuuKlCDqsr3smrDripQg67mE7KCV7IOB7KCB7J24IOyDge2ZqeydtOyngOunjCxcbiAgICAvLyDrp4jsnbTqt7jroIjsnbTshZgg7IOd7ISx7J2EIOykkeuLqOyLnO2CpOyngCDslYrqs6Ag67mIIOuwsOyXtOydhCDrsJjtmZjtlanri4jri6QuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjsnLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gdXAoa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGByZXR1cm4ga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgXCIvLyBjcmVhdGUgZmtcIixcbiAgICAuLi51cCxcbiAgICBcIn0pO1wiLFxuICAgIFwifVwiLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgYHJldHVybiBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCxcbiAgICBcIi8vIGRyb3AgZmtcIixcbiAgICAuLi5kb3duLFxuICAgIFwifSk7XCIsXG4gICAgXCJ9XCIsXG4gIF07XG5cbiAgY29uc3QgZm9yZWlnbktleXNTdHJpbmcgPSBmb3JlaWducy5tYXAoKGZvcmVpZ24pID0+IGZvcmVpZ24uY29sdW1ucy5qb2luKFwiX1wiKSkuam9pbihcIl9cIik7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgdGFibGUsXG4gICAgICB0eXBlOiBcImZvcmVpZ25cIixcbiAgICAgIHRpdGxlOiBgZm9yZWlnbl9fJHt0YWJsZX1fXyR7Zm9yZWlnbktleXNTdHJpbmd9YCxcbiAgICAgIGZvcm1hdHRlZDogZm9ybWF0Q29kZShsaW5lcy5qb2luKFwiXFxuXCIpLCBcInR5cGVzY3JpcHRcIiwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIE1pZ3JhdGlvbkZvcmVpZ25bXSDsnb3slrTshJwg7Jm467aA7YKkIGNvbnN0cmFpbnQg7KCV7J2Y7ZWY64qUIOq1rOusuCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2VuRm9yZWlnbkRlZmluaXRpb25zKFxuICB0YWJsZTogc3RyaW5nLFxuICBmb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdLFxuKTogeyB1cDogc3RyaW5nW107IGRvd246IHN0cmluZ1tdIH0ge1xuICByZXR1cm4gZm9yZWlnbnMucmVkdWNlKFxuICAgIChyLCBmb3JlaWduKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5zU3RyaW5nUXVvdGUgPSBmb3JlaWduLmNvbHVtbnNcbiAgICAgICAgLm1hcCgoY29sKSA9PiBgJyR7Y29sLnJlcGxhY2UoYCR7dGFibGV9LmAsIFwiXCIpfSdgKVxuICAgICAgICAuam9pbihcIixcIik7XG4gICAgICByLnVwLnB1c2goXG4gICAgICAgIGB0YWJsZS5mb3JlaWduKCcke2ZvcmVpZ24uY29sdW1ucy5qb2luKFwiLFwiKX0nKVxuICAgICAgICAgICAgLnJlZmVyZW5jZXMoJyR7Zm9yZWlnbi50b30nKVxuICAgICAgICAgICAgLm9uVXBkYXRlKCcke2ZvcmVpZ24ub25VcGRhdGV9JylcbiAgICAgICAgICAgIC5vbkRlbGV0ZSgnJHtmb3JlaWduLm9uRGVsZXRlfScpYCxcbiAgICAgICk7XG4gICAgICByLmRvd24ucHVzaChgdGFibGUuZHJvcEZvcmVpZ24oWyR7Y29sdW1uc1N0cmluZ1F1b3RlfV0pYCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9LFxuICAgIHtcbiAgICAgIHVwOiBbXSBhcyBzdHJpbmdbXSxcbiAgICAgIGRvd246IFtdIGFzIHN0cmluZ1tdLFxuICAgIH0sXG4gICk7XG59XG5cbi8qKlxuICog7YWM7J2067iUIOuzgOqyvSDsvIDsnbTsiqQgLSDsu6zrn7wv7J24642x7IqkIOuzgOqyvVxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUFsdGVyQ29kZV9Db2x1bW5BbmRJbmRleGVzKFxuICB0YWJsZTogc3RyaW5nLFxuICBlbnRpdHlDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgZW50aXR5SW5kZXhlczogTWlncmF0aW9uSW5kZXhbXSxcbiAgZGJDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgZGJJbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLFxuICBkYkZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4gIGNvbXBhcmVEQj86IEtuZXgsXG4pOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICBjb25zdCByZXNvbHZlZEVudGl0eUNvbHVtbnMgPSByZXNvbHZlU2VhcmNoVGV4dENvbHVtbnModGFibGUsIGVudGl0eUNvbHVtbnMpO1xuICBjb25zdCBzZWFyY2hUZXh0Q29sdW1uTmFtZXMgPSBnZXRTZWFyY2hUZXh0Q29sdW1uTmFtZXModGFibGUpO1xuICAvKlxuICAgIOyEuOu2gCDruYTqtZAg7ZuEIOuLpOuluOygkCDssL7slYTshJwg7L2U65OcIOyDneyEsVxuXG4gICAgMS4g7Lus65+86rCv7IiYIOuLpOumhDogTUTsl5Ag7J6I7Jy864KYLCBEQuyXkCDsl4bri6TrqbQg7LaU6rCAXG4gICAgMi4g7Lus65+86rCv7IiYIOuLpOumhDogTUTsl5Ag7JeG7Jy864KYLCBEQuyXkCDsnojri6TrqbQg7IKt7KCcXG4gICAgMy4g6re47Jm4IOy7rOufvCjsu6zrn7wg6rCv7IiY6rCAIOuPmeydvO2VmOqxsOuCmCwg64uk66W4IOqyveyasCDrj5nsnbztlZwg7Lus65+864G866asKSA9PiBhbHRlclxuICAgIDQuIOuLpOuluOqxsCDri6Qg64+Z7J287ZWY6rOgIGluZGV466eMIOuzgOqyveuQmOuKlCDqsr3smrBcblxuICAgICoqIOy7rOufvOuqheydhCDrs4Dqsr3tlZjripQg6rK97Jqw64qUIOuUsOuhnCDtlbjrk6Trp4HtlZjsp4Ag7JWK7J2MXG4gICAgPT4gZHJvcC9hZGQg7ZiV7YOc7J2YIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5zqsIAg7IOd7ISx65CY64qU642wLCDsiJjrj5nsnLzroZwgcmVuYW1lIOy9lOuTnOuhnCDsiJjsoJXtlZjsl6wg7LKY66asXG4gICovXG5cbiAgLy8gUEsoaWQpIOy7rOufvCDtg4DsnoUg67OA6rK9IOqwkOyngCDrsI8g7LKY66asXG4gIGNvbnN0IGVudGl0eUlkQ29sID0gcmVzb2x2ZWRFbnRpdHlDb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLm5hbWUgPT09IFwiaWRcIik7XG4gIGNvbnN0IGRiSWRDb2wgPSBkYkNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJpZFwiKTtcblxuICBpZiAoZW50aXR5SWRDb2wgJiYgZGJJZENvbCAmJiBjb21wYXJlREIpIHtcbiAgICBjb25zdCBpc1BrVHlwZUNoYW5nZWQgPVxuICAgICAgZW50aXR5SWRDb2wudHlwZSAhPT0gZGJJZENvbC50eXBlIHx8IGVudGl0eUlkQ29sLmxlbmd0aCAhPT0gZGJJZENvbC5sZW5ndGg7XG5cbiAgICBpZiAoaXNQa1R5cGVDaGFuZ2VkKSB7XG4gICAgICByZXR1cm4gZ2VuZXJhdGVQa1R5cGVDaGFuZ2VNaWdyYXRpb24oXG4gICAgICAgIHRhYmxlLFxuICAgICAgICBlbnRpdHlJZENvbCxcbiAgICAgICAgZGJJZENvbCxcbiAgICAgICAgcmVzb2x2ZWRFbnRpdHlDb2x1bW5zLFxuICAgICAgICBlbnRpdHlJbmRleGVzLFxuICAgICAgICBkYkNvbHVtbnMsXG4gICAgICAgIGRiSW5kZXhlcyxcbiAgICAgICAgZGJGb3JlaWducyxcbiAgICAgICAgY29tcGFyZURCLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyDqsIEg7Lus65+8IOydtOumhCDquLDspIDsnLzroZwgYWRkLCBkcm9wLCBhbHRlciDsl6zrtoAg7ZmV7J24XG4gIGNvbnN0IGFsdGVyQ29sdW1uc1RvID0gZ2V0QWx0ZXJDb2x1bW5zVG8ocmVzb2x2ZWRFbnRpdHlDb2x1bW5zLCBkYkNvbHVtbnMsIHNlYXJjaFRleHRDb2x1bW5OYW1lcyk7XG5cbiAgLy8g7LaU7Lac65CcIOy7rOufvOuTpOydhCDquLDspIDsnLzroZwg6rCB6rCBIOudvOyduCDsg53shLFcbiAgY29uc3QgYWx0ZXJDb2x1bW5MaW5lc1RvID0gZ2V0QWx0ZXJDb2x1bW5MaW5lc1RvKFxuICAgIGFsdGVyQ29sdW1uc1RvLFxuICAgIHJlc29sdmVkRW50aXR5Q29sdW1ucyxcbiAgICB0YWJsZSxcbiAgICBkYkZvcmVpZ25zLFxuICApO1xuXG4gIC8vIOyduOuNseyKpOydmCBhZGQsIGRyb3Ag7Jes67aAIO2ZleyduFxuICBjb25zdCBhbHRlckluZGV4ZXNUbyA9IGdldEFsdGVySW5kZXhlc1RvKGVudGl0eUluZGV4ZXMsIGRiSW5kZXhlcyk7XG4gIGNvbnN0IHJlY3JlYXRlZFNlYXJjaFRleHRDb2x1bW5OYW1lcyA9IG5ldyBTZXQoXG4gICAgYWx0ZXJDb2x1bW5zVG8uYWx0ZXJcbiAgICAgIC5maWx0ZXIoKGRiQ29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eUNvbHVtbiA9IHJlc29sdmVkRW50aXR5Q29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5uYW1lID09PSBkYkNvbHVtbi5uYW1lKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBzZWFyY2hUZXh0Q29sdW1uTmFtZXMuaGFzKGRiQ29sdW1uLm5hbWUpICYmXG4gICAgICAgICAgZGJDb2x1bW4uZ2VuZXJhdGVkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBlbnRpdHlDb2x1bW4/LmdlbmVyYXRlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSksXG4gICk7XG4gIGNvbnN0IHJlY3JlYXRlZFNlYXJjaFRleHREYkluZGV4ZXMgPSBkYkluZGV4ZXMuZmlsdGVyKFxuICAgIChpbmRleCkgPT5cbiAgICAgIGluZGV4LmNvbHVtbnMuc29tZSgoeyBuYW1lIH0pID0+IHJlY3JlYXRlZFNlYXJjaFRleHRDb2x1bW5OYW1lcy5oYXMobmFtZSkpICYmXG4gICAgICBhbHRlckluZGV4ZXNUby5kcm9wLnNvbWUoKGRyb3BJbmRleCkgPT4gZHJvcEluZGV4Lm5hbWUgPT09IGluZGV4Lm5hbWUpID09PSBmYWxzZSxcbiAgKTtcbiAgY29uc3QgcmVjcmVhdGVkU2VhcmNoVGV4dEVudGl0eUluZGV4ZXMgPSBlbnRpdHlJbmRleGVzLmZpbHRlcihcbiAgICAoaW5kZXgpID0+XG4gICAgICBpbmRleC5jb2x1bW5zLnNvbWUoKHsgbmFtZSB9KSA9PiByZWNyZWF0ZWRTZWFyY2hUZXh0Q29sdW1uTmFtZXMuaGFzKG5hbWUpKSAmJlxuICAgICAgYWx0ZXJJbmRleGVzVG8uYWRkLnNvbWUoKGFkZEluZGV4KSA9PiBhZGRJbmRleC5uYW1lID09PSBpbmRleC5uYW1lKSA9PT0gZmFsc2UsXG4gICk7XG4gIGNvbnN0IGltcGxpY2l0bHlEcm9wcGVkRGJJbmRleGVzID0gYWx0ZXJJbmRleGVzVG8uZHJvcC5maWx0ZXIoKGluZGV4KSA9PlxuICAgIGluZGV4LmNvbHVtbnMuZXZlcnkoKHsgbmFtZSB9KSA9PiBhbHRlckNvbHVtbnNUby5kcm9wLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUgPT09IG5hbWUpKSxcbiAgKTtcblxuICAvLyDsnbjrjbHsiqTqsIAg7IKt7KCc65CY64qUIOqyveyasCwg7Lus65+86rO8IOqwmeydtCDsgq3soJzrkJwg7LyA7J207Iqk7JeQ64qUIGRyb3Dsl5DshJwg7KCc7Jm47ZW07JW87ZWoIVxuICBjb25zdCBpbmRleE5lZWRzVG9Ecm9wID0gYWx0ZXJJbmRleGVzVG8uZHJvcC5maWx0ZXIoXG4gICAgKGluZGV4KSA9PlxuICAgICAgaW1wbGljaXRseURyb3BwZWREYkluZGV4ZXMuc29tZSgoZHJvcHBlZEluZGV4KSA9PiBkcm9wcGVkSW5kZXgubmFtZSA9PT0gaW5kZXgubmFtZSkgPT09IGZhbHNlLFxuICApO1xuXG4gIC8vIOu5iCDsvZTrk5wg7IOd7ISxIOuwqeyngFxuICBjb25zdCBoYXNVcENoYW5nZXMgPVxuICAgIGFsdGVyQ29sdW1uTGluZXNUby5hZGQudXAuYnVpbGRlci5sZW5ndGggPiAwIHx8XG4gICAgYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5yYXcubGVuZ3RoID4gMCB8fFxuICAgIGFsdGVyQ29sdW1uTGluZXNUby5kcm9wLnVwLmJ1aWxkZXIubGVuZ3RoID4gMCB8fFxuICAgIGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci51cC5idWlsZGVyLmxlbmd0aCA+IDAgfHxcbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAucmF3Lmxlbmd0aCA+IDAgfHxcbiAgICBhbHRlckluZGV4ZXNUby5hZGQubGVuZ3RoID4gMCB8fFxuICAgIGluZGV4TmVlZHNUb0Ryb3AubGVuZ3RoID4gMCB8fFxuICAgIHJlY3JlYXRlZFNlYXJjaFRleHREYkluZGV4ZXMubGVuZ3RoID4gMDtcbiAgaWYgKCFoYXNVcENoYW5nZXMpIHtcbiAgICAvLyDrs4Dqsr3sgqztla3snbQg7JeG7Jy866m0IOu5iCDrsLDsl7Qg67CY7ZmYXG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIE5haXRlLnQoXCJtaWdyYXRvcjpnZW5lcmF0ZUFsdGVyQ29kZV9Db2x1bW5BbmRJbmRleGVzOmRlYnVnXCIsIHtcbiAgICBcImFsdGVyQ29sdW1uc1RvLmFkZC5sZW5ndGhcIjogYWx0ZXJDb2x1bW5zVG8uYWRkLmxlbmd0aCxcbiAgICBcImFsdGVyQ29sdW1uc1RvLmRyb3AubGVuZ3RoXCI6IGFsdGVyQ29sdW1uc1RvLmRyb3AubGVuZ3RoLFxuICAgIFwiYWx0ZXJDb2x1bW5zVG8uYWx0ZXIubGVuZ3RoXCI6IGFsdGVyQ29sdW1uc1RvLmFsdGVyLmxlbmd0aCxcbiAgICBcImFsdGVySW5kZXhlc1RvLmFkZC5sZW5ndGhcIjogYWx0ZXJJbmRleGVzVG8uYWRkLmxlbmd0aCxcbiAgICBcImFsdGVySW5kZXhlc1RvLmRyb3AubGVuZ3RoXCI6IGFsdGVySW5kZXhlc1RvLmRyb3AubGVuZ3RoLFxuICAgIFwiaW5kZXhOZWVkc1RvRHJvcC5sZW5ndGhcIjogaW5kZXhOZWVkc1RvRHJvcC5sZW5ndGgsXG4gIH0pO1xuICAvLyBOYWl0ZS50KFwibWlncmF0b3I6Z2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlczphbHRlckNvbHVtbnNUb1wiLCBhbHRlckNvbHVtbnNUbyk7XG5cbiAgLy8gVE9ETzog7J24642x7Iqk66qFIOuzgOqyveuQnCDqsr3smrAg7LKY66asXG5cbiAgLy8gdGFibGUgYnVpbGRlciDrqZTshJzrk5zroZwg7Iuk7ZaJ7ZWgIOy9lOuTnCAoZHJvcCDihpIgYWRkIOKGkiBhbHRlciDsiJzshJwpXG4gIGNvbnN0IHVwQnVpbGRlckxpbmVzID0gW1xuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC51cC5idWlsZGVyLmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC51cC5idWlsZGVyIDogW10pLFxuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLmJ1aWxkZXIubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hZGQudXAuYnVpbGRlciA6IFtdKSxcbiAgICAuLi5yZWNyZWF0ZWRTZWFyY2hUZXh0RGJJbmRleGVzLm1hcChnZW5JbmRleERyb3BEZWZpbml0aW9uKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLnVwLmJ1aWxkZXIubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci51cC5idWlsZGVyIDogW10pLFxuICAgIC4uLmluZGV4TmVlZHNUb0Ryb3AubWFwKGdlbkluZGV4RHJvcERlZmluaXRpb24pLFxuICBdO1xuXG4gIC8vIGtuZXgucmF3KCnroZwg7Iuk7ZaJ7ZWgIOy9lOuTnFxuICBjb25zdCB1cFJhd0xpbmVzID0gW1xuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLnJhdy5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5yYXcgOiBbXSksXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci51cC5yYXcubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci51cC5yYXcgOiBbXSksXG4gICAgLi4ucmVjcmVhdGVkU2VhcmNoVGV4dEVudGl0eUluZGV4ZXMubWFwKChpbmRleCkgPT4gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSkpLFxuICAgIC4uLmFsdGVySW5kZXhlc1RvLmFkZC5tYXAoKGluZGV4KSA9PiBnZW5JbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKSksXG4gIF07XG5cbiAgLy8gZG93buydgCB1cOydmCDsl63siJwgKGFkZC5kb3duID0gZHJvcCByb2xsYmFjaywgZHJvcC5kb3duID0gYWRkIHJvbGxiYWNrKVxuICBjb25zdCBkb3duQnVpbGRlckxpbmVzID0gW1xuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWRkLmRvd24uYnVpbGRlci5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC5kb3duLmJ1aWxkZXIgOiBbXSksXG4gICAgLi4ucmVjcmVhdGVkU2VhcmNoVGV4dEVudGl0eUluZGV4ZXMubWFwKGdlbkluZGV4RHJvcERlZmluaXRpb24pLFxuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIuZG93bi5idWlsZGVyLmxlbmd0aCA+IDBcbiAgICAgID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLmRvd24uYnVpbGRlclxuICAgICAgOiBbXSksXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5kcm9wLmRvd24uYnVpbGRlci5sZW5ndGggPiAwXG4gICAgICA/IGFsdGVyQ29sdW1uTGluZXNUby5kcm9wLmRvd24uYnVpbGRlclxuICAgICAgOiBbXSksXG4gICAgLi4uYWx0ZXJJbmRleGVzVG8uYWRkXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoaW5kZXgpID0+XG4gICAgICAgICAgaW5kZXguY29sdW1ucy5ldmVyeSgoaW5kZXhDb2wpID0+XG4gICAgICAgICAgICBhbHRlckNvbHVtbnNUby5hZGQubWFwKChjb2wpID0+IGNvbC5uYW1lKS5pbmNsdWRlcyhpbmRleENvbC5uYW1lKSxcbiAgICAgICAgICApID09PSBmYWxzZSxcbiAgICAgIClcbiAgICAgIC5tYXAoZ2VuSW5kZXhEcm9wRGVmaW5pdGlvbiksXG4gIF07XG5cbiAgY29uc3QgZG93blJhd0xpbmVzID0gW1xuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC5kb3duLnJhdy5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AuZG93bi5yYXcgOiBbXSksXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci5kb3duLnJhdy5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLmRvd24ucmF3IDogW10pLFxuICAgIC4uLnJlY3JlYXRlZFNlYXJjaFRleHREYkluZGV4ZXMubWFwKChpbmRleCkgPT4gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSkpLFxuICAgIC4uLmltcGxpY2l0bHlEcm9wcGVkRGJJbmRleGVzLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgICAuLi5pbmRleE5lZWRzVG9Ecm9wLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgXTtcblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgJ2ltcG9ydCB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4uKHVwQnVpbGRlckxpbmVzLmxlbmd0aCA+IDBcbiAgICAgID8gW2Bhd2FpdCBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCwgLi4udXBCdWlsZGVyTGluZXMsIFwifSk7XCJdXG4gICAgICA6IFtdKSxcbiAgICAuLi51cFJhd0xpbmVzLFxuICAgIFwifVwiLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4uKGRvd25CdWlsZGVyTGluZXMubGVuZ3RoID4gMFxuICAgICAgPyBbYGF3YWl0IGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLCAuLi5kb3duQnVpbGRlckxpbmVzLCBcIn0pO1wiXVxuICAgICAgOiBbXSksXG4gICAgLi4uZG93blJhd0xpbmVzLFxuICAgIFwifVwiLFxuICBdO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdENvZGUobGluZXMuam9pbihcIlxcblwiKSwgXCJ0eXBlc2NyaXB0XCIsIGBzcmMvbWlncmF0aW9uLyR7dGFibGV9LnRzYCk7XG4gIGNvbnN0IHRpdGxlID0gW1xuICAgIFwiYWx0ZXJcIixcbiAgICB0YWJsZSxcbiAgICAuLi4oW1wiYWRkXCIsIFwiZHJvcFwiLCBcImFsdGVyXCJdIGFzIGNvbnN0KVxuICAgICAgLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlbiA9IGFsdGVyQ29sdW1uc1RvW2FjdGlvbl0ubGVuZ3RoO1xuICAgICAgICBpZiAobGVuID4gMCkge1xuICAgICAgICAgIHJldHVybiBhY3Rpb24gKyBsZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gbnVsbCksXG4gIF0uam9pbihcIl9cIik7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHRpdGxlLFxuICAgICAgZm9ybWF0dGVkLFxuICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIOy7rOufvCDruYTqtZDrpbwg7JyE7ZW0IEdlbmVyYXRlZCBDb2x1bW7snZggZXhwcmVzc2lvbuydhCDsoJzsmbjtlZwg6rCd7LK066W8IOyDneyEsVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKFxuICBjb2w6IE1pZ3JhdGlvbkNvbHVtbixcbiAgc2VhcmNoVGV4dENvbHVtbk5hbWVzOiBTZXQ8c3RyaW5nPixcbik6IE1pZ3JhdGlvbkNvbHVtbiB7XG4gIGlmICghY29sLmdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjb2w7XG4gIH1cblxuICBpZiAoIXNlYXJjaFRleHRDb2x1bW5OYW1lcy5oYXMoY29sLm5hbWUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbCxcbiAgICAgIGdlbmVyYXRlZDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmNvbCxcbiAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgIC4uLmNvbC5nZW5lcmF0ZWQsXG4gICAgICBleHByZXNzaW9uOiBjYW5vbmljYWxpemVTZWFyY2hUZXh0R2VuZXJhdGVkRXhwcmVzc2lvbihjb2wuZ2VuZXJhdGVkLmV4cHJlc3Npb24pLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICog6rCBIOy7rOufvCDsnbTrpoQg6riw7KSA7Jy866GcIGFkZCwgZHJvcCwgYWx0ZXIg7Jes67aAIO2ZleyduFxuICovXG5mdW5jdGlvbiBnZXRBbHRlckNvbHVtbnNUbyhcbiAgZW50aXR5Q29sdW1uczogTWlncmF0aW9uQ29sdW1uW10sXG4gIGRiQ29sdW1uczogTWlncmF0aW9uQ29sdW1uW10sXG4gIHNlYXJjaFRleHRDb2x1bW5OYW1lczogU2V0PHN0cmluZz4sXG4pIHtcbiAgY29uc3QgY29sdW1uc1RvID0ge1xuICAgIGFkZDogW10gYXMgTWlncmF0aW9uQ29sdW1uW10sXG4gICAgZHJvcDogW10gYXMgTWlncmF0aW9uQ29sdW1uW10sXG4gICAgYWx0ZXI6IFtdIGFzIE1pZ3JhdGlvbkNvbHVtbltdLFxuICB9O1xuXG4gIC8vIOy7rOufvOuqhSDquLDspIAg67mE6rWQXG4gIGNvbnN0IGV4dHJhQ29sdW1ucyA9IHtcbiAgICBkYjogZGlmZihkYkNvbHVtbnMsIGVudGl0eUNvbHVtbnMsIChjb2wpID0+IFtjb2wubmFtZSwgY29sLmdlbmVyYXRlZD8udHlwZV0uam9pbihcIi8vL1wiKSksXG4gICAgZW50aXR5OiBkaWZmKGVudGl0eUNvbHVtbnMsIGRiQ29sdW1ucywgKGNvbCkgPT4gW2NvbC5uYW1lLCBjb2wuZ2VuZXJhdGVkPy50eXBlXS5qb2luKFwiLy8vXCIpKSxcbiAgfTtcbiAgaWYgKGV4dHJhQ29sdW1ucy5lbnRpdHkubGVuZ3RoID4gMCkge1xuICAgIGNvbHVtbnNUby5hZGQgPSBjb2x1bW5zVG8uYWRkLmNvbmNhdChleHRyYUNvbHVtbnMuZW50aXR5KTtcbiAgfVxuICBpZiAoZXh0cmFDb2x1bW5zLmRiLmxlbmd0aCA+IDApIHtcbiAgICBjb2x1bW5zVG8uZHJvcCA9IGNvbHVtbnNUby5kcm9wLmNvbmNhdChleHRyYUNvbHVtbnMuZGIpO1xuICB9XG5cbiAgLy8g64+Z7J28IOy7rOufvOuqheydmCDshLjrtoAg7ZWE65OcIOu5hOq1kFxuICBjb25zdCBzYW1lRGJDb2x1bW5zID0gaW50ZXJzZWN0aW9uQnkoZGJDb2x1bW5zLCBlbnRpdHlDb2x1bW5zLCAoY29sKSA9PiBjb2wubmFtZSk7XG4gIGNvbnN0IHNhbWVNZENvbHVtbnMgPSBpbnRlcnNlY3Rpb25CeShlbnRpdHlDb2x1bW5zLCBkYkNvbHVtbnMsIChjb2wpID0+IGNvbC5uYW1lKTtcbiAgY29sdW1uc1RvLmFsdGVyID0gZGlmZmVyZW5jZVdpdGgoc2FtZURiQ29sdW1ucywgc2FtZU1kQ29sdW1ucywgKGEsIGIpID0+XG4gICAgZXF1YWwoXG4gICAgICBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGEsIHNlYXJjaFRleHRDb2x1bW5OYW1lcyksXG4gICAgICBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGIsIHNlYXJjaFRleHRDb2x1bW5OYW1lcyksXG4gICAgKSxcbiAgKTtcblxuICByZXR1cm4gY29sdW1uc1RvO1xufVxuXG4vKipcbiAqIOy2lOy2nOuQnCDsu6zrn7zrk6TsnYQg6riw7KSA7Jy866GcIOqwgeqwgSDrnbzsnbgg7IOd7ISxXG4gKi9cbmZ1bmN0aW9uIGdldEFsdGVyQ29sdW1uTGluZXNUbyhcbiAgY29sdW1uc1RvOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBbHRlckNvbHVtbnNUbz4sXG4gIGVudGl0eUNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICB0YWJsZTogc3RyaW5nLFxuICBkYkZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4pIHtcbiAgY29uc3Qgc2VhcmNoVGV4dENvbHVtbk5hbWVzID0gZ2V0U2VhcmNoVGV4dENvbHVtbk5hbWVzKHRhYmxlKTtcbiAgY29uc3QgbGluZXNUbyA9IHtcbiAgICBhZGQ6IHtcbiAgICAgIHVwOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgICBkb3duOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgfSxcbiAgICBkcm9wOiB7XG4gICAgICB1cDogeyBidWlsZGVyOiBbXSBhcyBzdHJpbmdbXSwgcmF3OiBbXSBhcyBzdHJpbmdbXSB9LFxuICAgICAgZG93bjogeyBidWlsZGVyOiBbXSBhcyBzdHJpbmdbXSwgcmF3OiBbXSBhcyBzdHJpbmdbXSB9LFxuICAgIH0sXG4gICAgYWx0ZXI6IHtcbiAgICAgIHVwOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgICBkb3duOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBhZGQgY29sdW1uc1xuICBjb25zdCBhZGRDb2x1bW5EZWZzID0gZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIGNvbHVtbnNUby5hZGQpO1xuICBsaW5lc1RvLmFkZC51cCA9IHtcbiAgICBidWlsZGVyOiBhZGRDb2x1bW5EZWZzLmJ1aWxkZXIubGVuZ3RoID4gMCA/IFtcIi8vIGFkZFwiLCAuLi5hZGRDb2x1bW5EZWZzLmJ1aWxkZXJdIDogW10sXG4gICAgcmF3OlxuICAgICAgYWRkQ29sdW1uRGVmcy5yYXcubGVuZ3RoID4gMFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIC4uLmdldFNlYXJjaFRleHRIZWxwZXJEZWZpbml0aW9ucyh0YWJsZSwgY29sdW1uc1RvLmFkZCksXG4gICAgICAgICAgICBcIi8vIGFkZCAoZ2VuZXJhdGVkKVwiLFxuICAgICAgICAgICAgLi4uYWRkQ29sdW1uRGVmcy5yYXcsXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdLFxuICB9O1xuICBsaW5lc1RvLmFkZC5kb3duID0ge1xuICAgIGJ1aWxkZXI6XG4gICAgICBjb2x1bW5zVG8uYWRkLmxlbmd0aCA+IDBcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBcIi8vIHJvbGxiYWNrIC0gYWRkXCIsXG4gICAgICAgICAgICBgdGFibGUuZHJvcENvbHVtbnMoJHtjb2x1bW5zVG8uYWRkLm1hcCgoY29sKSA9PiBgJyR7Y29sLm5hbWV9J2ApLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10sXG4gICAgcmF3OiBbXSxcbiAgfTtcblxuICAvLyBkcm9w7ZWgIOy7rOufvOyXkCDqsbjrprAgRksg7LC+6riwXG4gIGNvbnN0IGRyb3BDb2x1bW5OYW1lcyA9IGNvbHVtbnNUby5kcm9wLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG4gIGNvbnN0IGZrVG9Ecm9wQmVmb3JlQ29sdW1uID0gZGJGb3JlaWducy5maWx0ZXIoKGZrKSA9PlxuICAgIGZrLmNvbHVtbnMuc29tZSgoY29sKSA9PiBkcm9wQ29sdW1uTmFtZXMuaW5jbHVkZXMoY29sKSksXG4gICk7XG5cbiAgY29uc3QgZHJvcEZrTGluZXMgPSBma1RvRHJvcEJlZm9yZUNvbHVtbi5tYXAoKGZrKSA9PiB7XG4gICAgY29uc3QgY29sdW1uc1N0cmluZ1F1b3RlID0gZmsuY29sdW1ucy5tYXAoKGNvbCkgPT4gYCcke2NvbH0nYCkuam9pbihcIixcIik7XG4gICAgcmV0dXJuIGB0YWJsZS5kcm9wRm9yZWlnbihbJHtjb2x1bW5zU3RyaW5nUXVvdGV9XSlgO1xuICB9KTtcblxuICBjb25zdCByZXN0b3JlRmtMaW5lcyA9IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUb0Ryb3BCZWZvcmVDb2x1bW4pLnVwO1xuXG4gIC8vIGRyb3DsnZggcm9sbGJhY2vsi5zsl5DripQgZ2VuZXJhdGVkIGNvbHVtbuuPhCDrs7Xsm5DtlbTslbwg7ZWoXG4gIGNvbnN0IGRyb3BDb2x1bW5EZWZzID0gZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIGNvbHVtbnNUby5kcm9wKTtcbiAgbGluZXNUby5kcm9wID0ge1xuICAgIHVwOiB7XG4gICAgICBidWlsZGVyOiBbXG4gICAgICAgIC4uLihkcm9wRmtMaW5lcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXCIvLyBkcm9wIGZvcmVpZ24ga2V5cyBvbiBjb2x1bW5zIHRvIGJlIGRyb3BwZWRcIiwgLi4uZHJvcEZrTGluZXNdXG4gICAgICAgICAgOiBbXSksXG4gICAgICAgIC4uLihjb2x1bW5zVG8uZHJvcC5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIFwiLy8gZHJvcCBjb2x1bW5zXCIsXG4gICAgICAgICAgICAgIGB0YWJsZS5kcm9wQ29sdW1ucygke2NvbHVtbnNUby5kcm9wLm1hcCgoY29sKSA9PiBgJyR7Y29sLm5hbWV9J2ApLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdKSxcbiAgICAgIF0sXG4gICAgICByYXc6IFtdLFxuICAgIH0sXG4gICAgZG93bjoge1xuICAgICAgYnVpbGRlcjogW1xuICAgICAgICAuLi4oZHJvcENvbHVtbkRlZnMuYnVpbGRlci5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXCIvLyByb2xsYmFjayAtIGRyb3AgY29sdW1uc1wiLCAuLi5kcm9wQ29sdW1uRGVmcy5idWlsZGVyXVxuICAgICAgICAgIDogW10pLFxuICAgICAgICAuLi4ocmVzdG9yZUZrTGluZXMubGVuZ3RoID4gMCA/IFtcIi8vIHJlc3RvcmUgZm9yZWlnbiBrZXlzXCIsIC4uLnJlc3RvcmVGa0xpbmVzXSA6IFtdKSxcbiAgICAgIF0sXG4gICAgICByYXc6XG4gICAgICAgIGRyb3BDb2x1bW5EZWZzLnJhdy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIC4uLmdldFNlYXJjaFRleHRIZWxwZXJEZWZpbml0aW9ucyh0YWJsZSwgY29sdW1uc1RvLmRyb3ApLFxuICAgICAgICAgICAgICBcIi8vIHJvbGxiYWNrIC0gZHJvcCBjb2x1bW5zIChnZW5lcmF0ZWQpXCIsXG4gICAgICAgICAgICAgIC4uLmRyb3BDb2x1bW5EZWZzLnJhdyxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gYWx0ZXIgY29sdW1ucyAoR2VuZXJhdGVkIENvbHVtbuydgCBBTFRFUiDrtojqsIDtlZjrr4DroZwgZHJvcCDtm4Qg7J6s7IOd7ISxKVxuICBsaW5lc1RvLmFsdGVyID0gY29sdW1uc1RvLmFsdGVyLnJlZHVjZShcbiAgICAociwgZGJDb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eUNvbHVtbiA9IGVudGl0eUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gZGJDb2x1bW4ubmFtZSk7XG4gICAgICBpZiAoZW50aXR5Q29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgc2VhcmNoVGV4dENvbHVtbk5hbWVzLmhhcyhkYkNvbHVtbi5uYW1lKSAmJlxuICAgICAgICBkYkNvbHVtbi5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBlbnRpdHlDb2x1bW4uZ2VuZXJhdGVkICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICByLnVwLmJ1aWxkZXIgPSBbXG4gICAgICAgICAgLi4uci51cC5idWlsZGVyLFxuICAgICAgICAgIFwiLy8gYWx0ZXIgZ2VuZXJhdGVkIGNvbHVtblwiLFxuICAgICAgICAgIGB0YWJsZS5kcm9wQ29sdW1ucygnJHtkYkNvbHVtbi5uYW1lfScpYCxcbiAgICAgICAgXTtcbiAgICAgICAgci51cC5yYXcgPSBbXG4gICAgICAgICAgLi4uci51cC5yYXcsXG4gICAgICAgICAgLi4uZ2V0U2VhcmNoVGV4dEhlbHBlckRlZmluaXRpb25zKHRhYmxlLCBbZW50aXR5Q29sdW1uXSksXG4gICAgICAgICAgXCIvLyBhbHRlciBnZW5lcmF0ZWQgY29sdW1uXCIsXG4gICAgICAgICAgZ2VuR2VuZXJhdGVkQ29sdW1uRGVmaW5pdGlvbih0YWJsZSwgZW50aXR5Q29sdW1uKSxcbiAgICAgICAgXTtcbiAgICAgICAgci5kb3duLmJ1aWxkZXIgPSBbXG4gICAgICAgICAgLi4uci5kb3duLmJ1aWxkZXIsXG4gICAgICAgICAgXCIvLyByb2xsYmFjayAtIGFsdGVyIGdlbmVyYXRlZCBjb2x1bW5cIixcbiAgICAgICAgICBgdGFibGUuZHJvcENvbHVtbnMoJyR7ZGJDb2x1bW4ubmFtZX0nKWAsXG4gICAgICAgIF07XG4gICAgICAgIHIuZG93bi5yYXcgPSBbXG4gICAgICAgICAgLi4uci5kb3duLnJhdyxcbiAgICAgICAgICAuLi5nZXRTZWFyY2hUZXh0SGVscGVyRGVmaW5pdGlvbnModGFibGUsIFtkYkNvbHVtbl0pLFxuICAgICAgICAgIFwiLy8gcm9sbGJhY2sgLSBhbHRlciBnZW5lcmF0ZWQgY29sdW1uXCIsXG4gICAgICAgICAgZ2VuR2VuZXJhdGVkQ29sdW1uRGVmaW5pdGlvbih0YWJsZSwgZGJDb2x1bW4pLFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cblxuICAgICAgLy8g7Lus65+8IOuzgOqyveyCrO2VrVxuICAgICAgY29uc3QgY29sdW1uRGlmZlVwID0gZGlmZihcbiAgICAgICAgZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIFtlbnRpdHlDb2x1bW5dKS5idWlsZGVyLFxuICAgICAgICBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgW2RiQ29sdW1uXSkuYnVpbGRlcixcbiAgICAgICk7XG4gICAgICBjb25zdCBjb2x1bW5EaWZmRG93biA9IGRpZmYoXG4gICAgICAgIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlLCBbZGJDb2x1bW5dKS5idWlsZGVyLFxuICAgICAgICBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgW2VudGl0eUNvbHVtbl0pLmJ1aWxkZXIsXG4gICAgICApO1xuICAgICAgaWYgKGNvbHVtbkRpZmZVcC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHIudXAuYnVpbGRlciA9IFtcbiAgICAgICAgICAuLi5yLnVwLmJ1aWxkZXIsXG4gICAgICAgICAgXCIvLyBhbHRlciBjb2x1bW5cIixcbiAgICAgICAgICAuLi5jb2x1bW5EaWZmVXAubWFwKChsKSA9PiBgJHtsLnJlcGxhY2UoXCI7XCIsIFwiXCIpfS5hbHRlcigpO2ApLFxuICAgICAgICBdO1xuICAgICAgICByLmRvd24uYnVpbGRlciA9IFtcbiAgICAgICAgICAuLi5yLmRvd24uYnVpbGRlcixcbiAgICAgICAgICBcIi8vIHJvbGxiYWNrIC0gYWx0ZXIgY29sdW1uXCIsXG4gICAgICAgICAgLi4uY29sdW1uRGlmZkRvd24ubWFwKChsKSA9PiBgJHtsLnJlcGxhY2UoXCI7XCIsIFwiXCIpfS5hbHRlcigpO2ApLFxuICAgICAgICBdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcjtcbiAgICB9LFxuICAgIHtcbiAgICAgIHVwOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgICBkb3duOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgfSxcbiAgKTtcblxuICByZXR1cm4gbGluZXNUbztcbn1cblxuLyoqXG4gKiDsnbjrjbHsiqTsnZggYWRkLCBkcm9wIOyXrOu2gCDtmZXsnbhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsdGVySW5kZXhlc1RvKGVudGl0eUluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sIGRiSW5kZXhlczogTWlncmF0aW9uSW5kZXhbXSkge1xuICAvLyDsnbjrjbHsiqQg67mE6rWQXG4gIGNvbnN0IGluZGV4ZXNUbyA9IHtcbiAgICBhZGQ6IFtdIGFzIE1pZ3JhdGlvbkluZGV4W10sXG4gICAgZHJvcDogW10gYXMgTWlncmF0aW9uSW5kZXhbXSxcbiAgfTtcblxuICAvLyDsnbjrjbHsiqQg6rOg7JygIOyLneuzhOyekCDsg53shLEgKG5hbWXsnYQg7KCc7Jm47ZWcIOuqqOuToCDtlYTrk5zrpbwg66y47J6Q7Je066GcIOuzgO2ZmO2VmOyXrCDsobDtlakpXG4gIGNvbnN0IGlkZW50aXR5ID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oaW5kZXg6IFQpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRleClcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSBcIm5hbWVcIilcbiAgICAgIC5zb3J0KCk7XG5cbiAgICByZXR1cm4ga2V5c1xuICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IFwibmFtZVwiKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSBcImNvbHVtbnNcIikge1xuICAgICAgICAgIHJldHVybiAoaW5kZXhba2V5XSBhcyBNaWdyYXRpb25JbmRleFtcImNvbHVtbnNcIl0pLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoY29sKVxuICAgICAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgICAgIC5tYXAoKGspID0+IGAke2t9PSR7Y29sW2sgYXMga2V5b2YgdHlwZW9mIGNvbF19YClcbiAgICAgICAgICAgICAgLmpvaW4oXCIvL1wiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7a2V5fT0ke2luZGV4W2tleSBhcyBrZXlvZiBNaWdyYXRpb25JbmRleF19YDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIi8vXCIpO1xuICB9O1xuXG4gIGNvbnN0IGV4dHJhSW5kZXhlcyA9IHtcbiAgICBkYjogZGlmZihkYkluZGV4ZXMsIGVudGl0eUluZGV4ZXMubWFwKHNldE1pZ3JhdGlvbkluZGV4RGVmYXVsdHMpLCBpZGVudGl0eSksXG4gICAgZW50aXR5OiBkaWZmKGVudGl0eUluZGV4ZXMubWFwKHNldE1pZ3JhdGlvbkluZGV4RGVmYXVsdHMpLCBkYkluZGV4ZXMsIGlkZW50aXR5KSxcbiAgfTtcbiAgaWYgKGV4dHJhSW5kZXhlcy5lbnRpdHkubGVuZ3RoID4gMCkge1xuICAgIGluZGV4ZXNUby5hZGQgPSBpbmRleGVzVG8uYWRkLmNvbmNhdChleHRyYUluZGV4ZXMuZW50aXR5KTtcbiAgfVxuICBpZiAoZXh0cmFJbmRleGVzLmRiLmxlbmd0aCA+IDApIHtcbiAgICBpbmRleGVzVG8uZHJvcCA9IGluZGV4ZXNUby5kcm9wLmNvbmNhdChleHRyYUluZGV4ZXMuZGIpO1xuICB9XG5cbiAgcmV0dXJuIGluZGV4ZXNUbztcbn1cblxuLyoqXG4gKiDsnbjrjbHsiqQg7IKt7KCcIOygleydmCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2VuSW5kZXhEcm9wRGVmaW5pdGlvbihpbmRleDogTWlncmF0aW9uSW5kZXgpIHtcbiAgcmV0dXJuIGB0YWJsZS5kcm9wSW5kZXgoWyR7aW5kZXguY29sdW1uc1xuICAgIC5tYXAoKGNvbHVtbikgPT4gYCcke2NvbHVtbi5uYW1lfSdgKVxuICAgIC5qb2luKFwiLFwiKX1dLCAnJHtpbmRleC5uYW1lfScpYDtcbn1cblxuLyoqXG4gKiBEQiDsobDtmowg6rKw6rO87JmAIOu5hOq1kO2VmOq4sCDsnITtlZwg7J24642x7IqkIOq4sOuzuOqwkiDshKTsoJVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE1pZ3JhdGlvbkluZGV4RGVmYXVsdHMoaW5kZXg6IE1pZ3JhdGlvbkluZGV4KTogTWlncmF0aW9uSW5kZXgge1xuICBjb25zdCBpc1ZlY3RvckluZGV4ID0gaW5kZXgudHlwZSA9PT0gXCJobnN3XCIgfHwgaW5kZXgudHlwZSA9PT0gXCJpdmZmbGF0XCI7XG4gIGNvbnN0IHN1cHBvcnRzT3JkZXJpbmcgPSAhaXNWZWN0b3JJbmRleCAmJiAoIWluZGV4LnVzaW5nIHx8IGluZGV4LnVzaW5nID09PSBcImJ0cmVlXCIpO1xuICBjb25zdCBub3JtYWxpemVkVXNpbmcgPSBpc1ZlY3RvckluZGV4ID8gaW5kZXgudXNpbmcgOiAoaW5kZXgudXNpbmcgPz8gXCJidHJlZVwiKTtcblxuICByZXR1cm4ge1xuICAgIC4uLmluZGV4LFxuICAgIGNvbHVtbnM6IGluZGV4LmNvbHVtbnMubWFwKChjb2wpID0+ICh7XG4gICAgICBuYW1lOiBjb2wubmFtZSxcbiAgICAgIC4uLihnZXRJbmRleENvbHVtbk9wY2xhc3MoY29sKSA/IHsgb3BjbGFzczogZ2V0SW5kZXhDb2x1bW5PcGNsYXNzKGNvbCkgfSA6IHt9KSxcbiAgICAgIC4uLihzdXBwb3J0c09yZGVyaW5nXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc29ydE9yZGVyOiBjb2wuc29ydE9yZGVyID8/IFwiQVNDXCIsXG4gICAgICAgICAgICBudWxsc0ZpcnN0OiBjb2wubnVsbHNGaXJzdCA/PyBjb2wuc29ydE9yZGVyID09PSBcIkRFU0NcIixcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH0pKSxcbiAgICBudWxsc05vdERpc3RpbmN0OiBpbmRleC5udWxsc05vdERpc3RpbmN0ID8/IGZhbHNlLFxuICAgIC4uLihub3JtYWxpemVkVXNpbmcgPyB7IHVzaW5nOiBub3JtYWxpemVkVXNpbmcgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg67OA6rK9IOy8gOydtOyKpCAtIEZvcmVpZ24gS2V5IOuzgOqyvVxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUFsdGVyQ29kZV9Gb3JlaWducyhcbiAgdGFibGU6IHN0cmluZyxcbiAgZW50aXR5Rm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgZGJGb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdLFxuICBkcm9wcGluZ0NvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdID0gW10sXG4pOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICAvLyBjb25zb2xlLmxvZyh7IGVudGl0eUZvcmVpZ25zLCBkYkZvcmVpZ25zIH0pO1xuXG4gIGNvbnN0IGdldEtleSA9IChtZjogTWlncmF0aW9uRm9yZWlnbik6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIFttZi5jb2x1bW5zLmpvaW4oXCItXCIpLCBtZi50b10uam9pbihcIi8vL1wiKTtcbiAgfTtcblxuICAvLyDsgq3soJzrkKAg7Lus65+866qFIOuqqeuhnVxuICBjb25zdCBkcm9wcGluZ0NvbHVtbk5hbWVzID0gZHJvcHBpbmdDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG5cbiAgY29uc3QgZmtUbyA9IGVudGl0eUZvcmVpZ25zLnJlZHVjZShcbiAgICAocmVzdWx0LCBlbnRpdHlGKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ0RiRiA9IGRiRm9yZWlnbnMuZmluZCgoZGJGKSA9PiBnZXRLZXkoZW50aXR5RikgPT09IGdldEtleShkYkYpKTtcbiAgICAgIGlmICghbWF0Y2hpbmdEYkYpIHtcbiAgICAgICAgcmVzdWx0LmFkZC5wdXNoKGVudGl0eUYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoZXF1YWwoZW50aXR5RiwgbWF0Y2hpbmdEYkYpID09PSBmYWxzZSkge1xuICAgICAgICByZXN1bHQuYWx0ZXJTcmMucHVzaChtYXRjaGluZ0RiRik7XG4gICAgICAgIHJlc3VsdC5hbHRlckRzdC5wdXNoKGVudGl0eUYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHtcbiAgICAgIGFkZDogW10gYXMgTWlncmF0aW9uRm9yZWlnbltdLFxuICAgICAgZHJvcDogW10gYXMgTWlncmF0aW9uRm9yZWlnbltdLFxuICAgICAgYWx0ZXJTcmM6IFtdIGFzIE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgICAgIGFsdGVyRHN0OiBbXSBhcyBNaWdyYXRpb25Gb3JlaWduW10sXG4gICAgfSxcbiAgKTtcblxuICAvLyBkYkZvcmVpZ25z7JeQ64qUIOyeiOyngOunjCBlbnRpdHlGb3JlaWduc+yXkOuKlCDsl4bripQg6rK97JqwICjsgq3soJzrkJwgRkspXG4gIC8vIOuLqCwg7IKt7KCc65CgIOy7rOufvOydmCBGS+uKlCDsoJzsmbggKGdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXPsl5DshJwg7LKY66asKVxuICBkYkZvcmVpZ25zLmZvckVhY2goKGRiRikgPT4ge1xuICAgIGNvbnN0IG1hdGNoaW5nRW50aXR5RiA9IGVudGl0eUZvcmVpZ25zLmZpbmQoKGVudGl0eUYpID0+IGdldEtleShlbnRpdHlGKSA9PT0gZ2V0S2V5KGRiRikpO1xuICAgIGlmICghbWF0Y2hpbmdFbnRpdHlGKSB7XG4gICAgICAvLyDsnbQgRkvsnZgg7Lus65+87J20IOyCreygnOuQoCDsu6zrn7wg66qp66Gd7JeQIOyeiOuKlOyngCDtmZXsnbhcbiAgICAgIGNvbnN0IGlzQ29sdW1uRHJvcHBpbmcgPSBkYkYuY29sdW1ucy5zb21lKChjb2wpID0+IGRyb3BwaW5nQ29sdW1uTmFtZXMuaW5jbHVkZXMoY29sKSk7XG4gICAgICAvLyDsu6zrn7zsnbQg7IKt7KCc65CY7KeAIOyViuuKlCDqsr3smrDsl5Drp4wgRksgZHJvcCDrqqnroZ3sl5Ag7LaU6rCAXG4gICAgICBpZiAoIWlzQ29sdW1uRHJvcHBpbmcpIHtcbiAgICAgICAgZmtUby5kcm9wLnB1c2goZGJGKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGxpbmVzVG8gPSB7XG4gICAgYWRkOiBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZrVG8uYWRkKSxcbiAgICBkcm9wOiBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZrVG8uZHJvcCksXG4gICAgYWx0ZXJTcmM6IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUby5hbHRlclNyYyksXG4gICAgYWx0ZXJEc3Q6IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUby5hbHRlckRzdCksXG4gIH07XG5cbiAgLy8gZHJvcCBmayBjb2x1bW5z7J24IOqyveyasCjsg53shLHrkKAg7L2U65OcIOyXhuuKlCDqsr3smrApIO2MqOyKpFxuICBjb25zdCBoYXNMaW5lcyA9IE9iamVjdC52YWx1ZXMobGluZXNUbykuc29tZSgobCkgPT4gbC51cC5sZW5ndGggPiAwIHx8IGwuZG93bi5sZW5ndGggPiAwKTtcbiAgaWYgKCFoYXNMaW5lcykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChcbiAgICBsaW5lc1RvLmFkZC51cC5sZW5ndGggPT09IDAgJiZcbiAgICBsaW5lc1RvLmRyb3AudXAubGVuZ3RoID09PSAwICYmXG4gICAgbGluZXNUby5hbHRlclNyYy51cC5sZW5ndGggPT09IDAgJiZcbiAgICBsaW5lc1RvLmFsdGVyRHN0LnVwLmxlbmd0aCA9PT0gMFxuICApIHtcbiAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2VuZXJhdGVBbHRlckNvZGVfRm9yZWlnbnM6ZmtDaGFuZ2VDb2RlR2VuZXJhdGlvbkVycm9yXCIsIHtcbiAgICAgIHRhYmxlLFxuICAgICAgZW50aXR5Rm9yZWlnbnMsXG4gICAgICBkYkZvcmVpZ25zLFxuICAgIH0pO1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZLIOuzgOqyvSDsvZTrk5wg7IOd7ISxIOyYpOulmFwiKTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAnaW1wb3J0IHsgS25leCB9IGZyb20gXCJrbmV4XCI7JyxcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICBgcmV0dXJuIGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLFxuICAgIC4uLmxpbmVzVG8uZHJvcC5kb3duLFxuICAgIC4uLmxpbmVzVG8uYWRkLnVwLFxuICAgIC4uLmxpbmVzVG8uYWx0ZXJTcmMuZG93bixcbiAgICAuLi5saW5lc1RvLmFsdGVyRHN0LnVwLFxuICAgIFwifSlcIixcbiAgICBcIn1cIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGByZXR1cm4ga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgLi4ubGluZXNUby5hZGQuZG93bixcbiAgICAuLi5saW5lc1RvLmFsdGVyRHN0LmRvd24sXG4gICAgLi4ubGluZXNUby5hbHRlclNyYy51cCxcbiAgICAuLi5saW5lc1RvLmRyb3AudXAsXG4gICAgXCJ9KVwiLFxuICAgIFwifVwiLFxuICBdO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdENvZGUobGluZXMuam9pbihcIlxcblwiKSwgXCJ0eXBlc2NyaXB0XCIsIGBzcmMvbWlncmF0aW9uLyR7dGFibGV9LnRzYCk7XG4gIGNvbnN0IHRpdGxlID0gW1wiYWx0ZXJcIiwgdGFibGUsIFwiZm9yZWlnbnNcIl0uam9pbihcIl9cIik7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHRpdGxlLFxuICAgICAgZm9ybWF0dGVkLFxuICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIOyjvOyWtOynhCBFbnRpdHlTZXTsnYQg6riw67CY7Jy866GcIO2FjOydtOu4lCBDUkVBVEUg66eI7J206re466CI7J207IWYIOy9lOuTnOulvCDsg53shLHtlanri4jri6QuXG4gKiBAcGFyYW0gZW50aXR5U2V0XG4gKiBAcmV0dXJucyBDUkVBVEUg66eI7J206re466CI7J207IWYIOy9lOuTnFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVDcmVhdGVDb2RlKGVudGl0eVNldDogTWlncmF0aW9uU2V0KTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlW10+IHtcbiAgcmV0dXJuIFtcbiAgICBhd2FpdCBnZW5lcmF0ZUNyZWF0ZUNvZGVfQ29sdW1uQW5kSW5kZXhlcyhcbiAgICAgIGVudGl0eVNldC50YWJsZSxcbiAgICAgIGVudGl0eVNldC5jb2x1bW5zLFxuICAgICAgZW50aXR5U2V0LmluZGV4ZXMsXG4gICAgKSxcbiAgICAuLi4oYXdhaXQgZ2VuZXJhdGVDcmVhdGVDb2RlX0ZvcmVpZ24oZW50aXR5U2V0LnRhYmxlLCBlbnRpdHlTZXQuZm9yZWlnbnMpKSxcbiAgXTtcbn1cblxuLyoqXG4gKiDso7zslrTsp4QgZW50aXR5U2V07J2EIOuqqe2RnOuhnCwgZGJTZXTsnYQg7ZiEIOyDge2ZqeycvOuhnCDtlZjsl6wg7YWM7J2067iUIEFMVEVSIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5zrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHBhcmFtIGVudGl0eVNldCDtmIQg7IOB7Zmp7J2YIE1pZ3JhdGlvblNldFxuICogQHBhcmFtIGRiU2V0IOuqqe2RnCDsg4HtmansnZggTWlncmF0aW9uU2V0XG4gKiBAcGFyYW0gY29tcGFyZURCIFBLIO2DgOyehSDrs4Dqsr0g7IucIOyXreywuOyhsCBGS+ulvCDsobDtmoztlZjquLAg7JyE7ZWcIEtuZXgg7J247Iqk7YS07IqkICjshKDtg50pXG4gKiBAcmV0dXJucyBBTFRFUiDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUFsdGVyQ29kZShcbiAgZW50aXR5U2V0OiBNaWdyYXRpb25TZXQsXG4gIGRiU2V0OiBNaWdyYXRpb25TZXQsXG4gIGNvbXBhcmVEQj86IEtuZXgsXG4pOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICBjb25zdCByZXBsYWNlQ29sdW1uRGVmYXVsdFRvID0gKGNvbDogTWlncmF0aW9uQ29sdW1uKSA9PiB7XG4gICAgLy8gZmxvYXTsnbgg6rK97JqwIOq4sOuzuOqwkuydhCAw7Jy866GcIOyngOygle2VmOuKlCDqsr3smrAgXCIwLjAwXCLsnLzroZwg67OA7ZmY65CY64qUIOy8gOydtOyKpCDrjIDsnZFcbiAgICAvLyBpZiAoY29sLnR5cGUgPT09IFwiZmxvYXRcIiAmJiBjb2wuZGVmYXVsdFRvICYmIFN0cmluZyhjb2wuZGVmYXVsdFRvKS5pbmNsdWRlcygnXCInKSA9PT0gZmFsc2UpIHtcbiAgICAvLyAgIGNvbC5kZWZhdWx0VG8gPSBgXCIke051bWJlcihjb2wuZGVmYXVsdFRvKS50b0ZpeGVkKGNvbC5zY2FsZSA/PyAyKX1cImA7XG4gICAgLy8gfVxuICAgIC8vIC8vIHN0cmluZ+yduCDqsr3smrAg6riw67O46rCS7J20IOu5iCDsiqTtirjrp4Hsnbgg6rK97JqwIOuMgOydkVxuICAgIC8vIGlmIChjb2wudHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBjb2wuZGVmYXVsdFRvID09PSBcIlwiKSB7XG4gICAgLy8gICBjb2wuZGVmYXVsdFRvID0gJ1wiXCInO1xuICAgIC8vIH1cbiAgICAvLyAvLyBib29sZWFu7J24IOqyveyasCDquLDrs7jqsJIg7KCV6rec7ZmUIChNeVNRTOyXkOyEnOuKlCBUSU5ZSU5UKDEp66GcIOyggOyepeuQmOuvgOuhnCAwIOuYkOuKlCAx66GcIOygleq3nO2ZlClcbiAgICAvLyAvLyBUT0RPOiBkYi50c+yXkCB0eXBlQ2FzZSDshKTsoJUg7ZmV7J247ZWY7JesIOyymOumrO2VmOuPhOuhnSDsiJjsoJUg7ZWE7JqUXG4gICAgLy8gaWYgKGNvbC50eXBlID09PSBcImJvb2xlYW5cIiAmJiBjb2wuZGVmYXVsdFRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyAgIGlmIChjb2wuZGVmYXVsdFRvID09PSBcIjBcIiB8fCBjb2wuZGVmYXVsdFRvLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIikge1xuICAgIC8vICAgICBjb2wuZGVmYXVsdFRvID0gXCIwXCI7XG4gICAgLy8gICB9IGVsc2UgaWYgKGNvbC5kZWZhdWx0VG8gPT09IFwiMVwiIHx8IGNvbC5kZWZhdWx0VG8udG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAvLyAgICAgY29sLmRlZmF1bHRUbyA9IFwiMVwiO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIC8vIEZJWE1FOiDsnbzri6ggTXlTUUwg7IOB7Zmp7JeQ7IScIOuwnOyDne2WiOuNmCDsnbTsiojsnZggd29ya2Fyb3VuZCDsnbTrr4DroZwgUGfsl5DshJwg7J6s7ZmV7J24IO2bhCDrjIDsnZEg7LaU6rCAXG4gICAgcmV0dXJuIGNvbDtcbiAgfTtcbiAgY29uc3QgZW50aXR5Q29sdW1ucyA9IGFscGhhYmV0aWNhbChlbnRpdHlTZXQuY29sdW1ucywgKGEpID0+IGEubmFtZSkubWFwKHJlcGxhY2VDb2x1bW5EZWZhdWx0VG8pO1xuICBjb25zdCBkYkNvbHVtbnMgPSBhbHBoYWJldGljYWwoZGJTZXQuY29sdW1ucywgKGEpID0+IGEubmFtZSkubWFwKHJlcGxhY2VDb2x1bW5EZWZhdWx0VG8pO1xuXG4gIC8qIOuUlOuyhOq5heyaqSDsvZTrk5wsIO2KueyglSDsu6zrn7zsl5DshJwg67aI7J287LmYIOuwnOyDne2VoCDrlYwg7ZmV7J24XG4gICAgICAgIGNvbnN0IGVudGl0eUNvbHVtbiA9IGVudGl0eVNldC5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGNvbCkgPT4gY29sLm5hbWUgPT09IFwicHJpY2Vfa3J3XCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGJDb2x1bW4gPSBkYlNldC5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGNvbCkgPT4gY29sLm5hbWUgPT09IFwicHJpY2Vfa3J3XCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5kZWJ1Zyh7IGVudGl0eUNvbHVtbiwgZGJDb2x1bW4gfSk7XG4gICAgICAgICAqL1xuXG4gIGNvbnN0IGVudGl0eUluZGV4ZXMgPSBhbHBoYWJldGljYWwoZW50aXR5U2V0LmluZGV4ZXMsIChhKSA9PlxuICAgIFthLnR5cGUsIC4uLmEuY29sdW1ucy5tYXAoKGMpID0+IGMubmFtZSldLmpvaW4oXCItXCIpLFxuICApO1xuICBjb25zdCBkYkluZGV4ZXMgPSBhbHBoYWJldGljYWwoZGJTZXQuaW5kZXhlcywgKGEpID0+XG4gICAgW2EudHlwZSwgLi4uYS5jb2x1bW5zLm1hcCgoYykgPT4gYy5uYW1lKV0uam9pbihcIi1cIiksXG4gICk7XG5cbiAgY29uc3QgcmVwbGFjZU5vQWN0aW9uT25NeVNRTCA9IChmOiBNaWdyYXRpb25Gb3JlaWduKSA9PiB7XG4gICAgLy8gTXlTUUzsl5DshJwgUkVTVFJJQ1TsmYAgTk8gQUNUSU9O7J2AIOuPmeydvO2VqFxuICAgIGNvbnN0IHsgb25EZWxldGUsIG9uVXBkYXRlIH0gPSBmO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5mLFxuICAgICAgb25VcGRhdGU6IG9uVXBkYXRlID09PSBcIlJFU1RSSUNUXCIgPyBcIk5PIEFDVElPTlwiIDogb25VcGRhdGUsXG4gICAgICBvbkRlbGV0ZTogb25EZWxldGUgPT09IFwiUkVTVFJJQ1RcIiA/IFwiTk8gQUNUSU9OXCIgOiBvbkRlbGV0ZSxcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IGVudGl0eUZvcmVpZ25zID0gYWxwaGFiZXRpY2FsKGVudGl0eVNldC5mb3JlaWducywgKGEpID0+XG4gICAgW2EudG8sIC4uLmEuY29sdW1uc10uam9pbihcIi1cIiksXG4gICkubWFwKChmKSA9PiByZXBsYWNlTm9BY3Rpb25Pbk15U1FMKGYpKTtcbiAgY29uc3QgZGJGb3JlaWducyA9IGFscGhhYmV0aWNhbChkYlNldC5mb3JlaWducywgKGEpID0+IFthLnRvLCAuLi5hLmNvbHVtbnNdLmpvaW4oXCItXCIpKS5tYXAoKGYpID0+XG4gICAgcmVwbGFjZU5vQWN0aW9uT25NeVNRTChmKSxcbiAgKTtcblxuICAvLyDsgq3soJzrkKAg7Lus65+8IOuqqeuhnSDqs4TsgrBcbiAgY29uc3QgZHJvcHBpbmdDb2x1bW5zID0gZGlmZihkYkNvbHVtbnMsIGVudGl0eUNvbHVtbnMsIChjb2wpID0+IGNvbC5uYW1lKTtcblxuICBjb25zdCBhbHRlckNvZGVzOiAoR2VuTWlncmF0aW9uQ29kZSB8IEdlbk1pZ3JhdGlvbkNvZGVbXSB8IG51bGwpW10gPSBbXTtcblxuICAvLyAxLiBjb2x1bW5zQW5kSW5kZXhlcyDsspjrpqxcbiAgY29uc3Qgc2VhcmNoVGV4dENvbHVtbk5hbWVzID0gZ2V0U2VhcmNoVGV4dENvbHVtbk5hbWVzKGVudGl0eVNldC50YWJsZSk7XG4gIGNvbnN0IGlzRXF1YWxDb2x1bW5zID0gZXF1YWwoXG4gICAgZW50aXR5Q29sdW1ucy5tYXAoKGNvbHVtbikgPT4gbm9ybWFsaXplQ29sdW1uRm9yQ29tcGFyaXNvbihjb2x1bW4sIHNlYXJjaFRleHRDb2x1bW5OYW1lcykpLFxuICAgIGRiQ29sdW1ucy5tYXAoKGNvbHVtbikgPT4gbm9ybWFsaXplQ29sdW1uRm9yQ29tcGFyaXNvbihjb2x1bW4sIHNlYXJjaFRleHRDb2x1bW5OYW1lcykpLFxuICApO1xuICBjb25zdCBpc0VxdWFsSW5kZXhlcyA9IGVxdWFsKFxuICAgIGVudGl0eUluZGV4ZXMubWFwKHNldE1pZ3JhdGlvbkluZGV4RGVmYXVsdHMpLFxuICAgIGRiSW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyksXG4gICk7XG4gIGlmICghaXNFcXVhbENvbHVtbnMgfHwgIWlzRXF1YWxJbmRleGVzKSB7XG4gICAgYWx0ZXJDb2Rlcy5wdXNoKFxuICAgICAgYXdhaXQgZ2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlcyhcbiAgICAgICAgZW50aXR5U2V0LnRhYmxlLFxuICAgICAgICBlbnRpdHlDb2x1bW5zLFxuICAgICAgICBlbnRpdHlJbmRleGVzLFxuICAgICAgICBkYkNvbHVtbnMsXG4gICAgICAgIGRiSW5kZXhlcyxcbiAgICAgICAgZGJTZXQuZm9yZWlnbnMsXG4gICAgICAgIGNvbXBhcmVEQixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8vIDIuIGZvcmVpZ25zIOyymOumrCAo7IKt7KCc65CgIOy7rOufvCDsoJXrs7Qg7KCE64usKVxuICBpZiAoZXF1YWwoZW50aXR5Rm9yZWlnbnMsIGRiRm9yZWlnbnMpID09PSBmYWxzZSkge1xuICAgIGFsdGVyQ29kZXMucHVzaChcbiAgICAgIGF3YWl0IGdlbmVyYXRlQWx0ZXJDb2RlX0ZvcmVpZ25zKFxuICAgICAgICBlbnRpdHlTZXQudGFibGUsXG4gICAgICAgIGVudGl0eUZvcmVpZ25zLFxuICAgICAgICBkYkZvcmVpZ25zLFxuICAgICAgICBkcm9wcGluZ0NvbHVtbnMsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBpZiAoYWx0ZXJDb2Rlcy5ldmVyeSgoYWx0ZXJDb2RlKSA9PiBhbHRlckNvZGUgPT09IG51bGwpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIGFsdGVyQ29kZXMuZmlsdGVyKChhbHRlckNvZGUpID0+IGFsdGVyQ29kZSAhPT0gbnVsbCkuZmxhdCgpO1xufVxuXG4vKipcbiAqIFBLIO2DgOyehSDrs4Dqsr0g7IucIOyXreywuOyhsCBGSyDsoJzslb3sobDqsbTsnYQg7LKY66as7ZWY64qUIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5zrpbwg7IOd7ISx7ZWp64uI64ukLlxuICpcbiAqIFBLIO2DgOyehSDrs4Dqsr0g7IucIOyInOyEnDpcbiAqIDEuIEZLIOygnOyVveyhsOqxtCDsgq3soJwgKOyXreywuOyhsCDthYzsnbTruJTrk6QpXG4gKiAyLiDsnpDquLAg7LC47KGwIEZLIOyCreygnCAo7J6I64qUIOqyveyasClcbiAqIDMuIFBLIOygnOyVveyhsOqxtCDsgq3soJxcbiAqIDQuIFBLIOy7rOufvCDtg4DsnoUg67OA6rK9XG4gKiA1LiBGSyDsu6zrn7wg7YOA7J6FIOuzgOqyvSAo7Jet7LC47KGwIO2FjOydtOu4lOuTpClcbiAqIDYuIFBLIOygnOyVveyhsOqxtCDrs7XqtaxcbiAqIDcuIOyekOq4sCDssLjsobAgRksg67O16rWsXG4gKiA4LiBGSyDsoJzslb3sobDqsbQg67O16rWsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlUGtUeXBlQ2hhbmdlTWlncmF0aW9uKFxuICB0YWJsZTogc3RyaW5nLFxuICBlbnRpdHlJZENvbDogTWlncmF0aW9uQ29sdW1uLFxuICBkYklkQ29sOiBNaWdyYXRpb25Db2x1bW4sXG4gIF9lbnRpdHlDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgX2VudGl0eUluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sXG4gIF9kYkNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBfZGJJbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLFxuICBfZGJGb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdLFxuICBjb21wYXJlREI6IEtuZXgsXG4pOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICAvLyDsl63ssLjsobAgRksg7KGw7ZqMICjsnbQg7YWM7J2067iU7J2YIFBL66W8IOywuOyhsO2VmOuKlCDri6Trpbgg7YWM7J2067iU7J2YIEZL65OkKVxuICBjb25zdCByZWZlcmVuY2luZ0ZLcyA9IGF3YWl0IFBvc3RncmVTUUxTY2hlbWFSZWFkZXIuZ2V0UmVmZXJlbmNpbmdGb3JlaWduS2V5cyhjb21wYXJlREIsIHRhYmxlKTtcblxuICAvLyDsnpDquLAg7LC47KGwIEZLIOu2hOumrCAo7JiIOiBEZXBhcnRtZW50LnBhcmVudF9pZCDihpIgRGVwYXJ0bWVudC5pZClcbiAgY29uc3Qgc2VsZlJlZmVyZW5jaW5nRktzID0gcmVmZXJlbmNpbmdGS3MuZmlsdGVyKChmaykgPT4gZmsudGFibGVOYW1lID09PSB0YWJsZSk7XG4gIGNvbnN0IGV4dGVybmFsUmVmZXJlbmNpbmdGS3MgPSByZWZlcmVuY2luZ0ZLcy5maWx0ZXIoKGZrKSA9PiBmay50YWJsZU5hbWUgIT09IHRhYmxlKTtcblxuICAvLyBQSyDsoJzslb3sobDqsbQg7J2066aEIOyhsO2ajFxuICBjb25zdCBwa0NvbnN0cmFpbnROYW1lID0gYCR7dGFibGV9X3BrZXlgO1xuXG4gIC8vIOyDiCBQSyDtg4DsnoXsl5Ag66ee64qUIFBvc3RncmVTUUwg7YOA7J6FIOusuOyekOyXtFxuICBjb25zdCBuZXdQa1BnVHlwZSA9IGdldFBrUGdUeXBlKGVudGl0eUlkQ29sKTtcbiAgY29uc3Qgb2xkUGtQZ1R5cGUgPSBnZXRQa1BnVHlwZShkYklkQ29sKTtcblxuICAvLyBVUCDsvZTrk5wg7IOd7ISxXG4gIGNvbnN0IHVwTGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gMS4g7Jm467aAIO2FjOydtOu4lOydmCBGSyDsoJzslb3sobDqsbQg7IKt7KCcXG4gIGZvciAoY29uc3QgZmsgb2YgZXh0ZXJuYWxSZWZlcmVuY2luZ0ZLcykge1xuICAgIHVwTGluZXMucHVzaChgICAvLyAke2ZrLnRhYmxlTmFtZX0uJHtmay5jb2x1bW5OYW1lfSBGSyDsoJzslb3sobDqsbQg7IKt7KCcYCk7XG4gICAgdXBMaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHtmay50YWJsZU5hbWV9XCIgRFJPUCBDT05TVFJBSU5UIFwiJHtmay5jb25zdHJhaW50TmFtZX1cIicpO2AsXG4gICAgKTtcbiAgfVxuXG4gIC8vIDIuIOyekOq4sCDssLjsobAgRksg7IKt7KCcXG4gIGZvciAoY29uc3QgZmsgb2Ygc2VsZlJlZmVyZW5jaW5nRktzKSB7XG4gICAgdXBMaW5lcy5wdXNoKGAgIC8vIOyekOq4sCDssLjsobAgRksg7IKt7KCcOiAke2ZrLmNvbHVtbk5hbWV9YCk7XG4gICAgdXBMaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBEUk9QIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiJyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gMy4gUEsg7KCc7JW97KGw6rG0IOyCreygnFxuICB1cExpbmVzLnB1c2goYCAgLy8gUEsg7KCc7JW97KGw6rG0IOyCreygnGApO1xuICB1cExpbmVzLnB1c2goYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBEUk9QIENPTlNUUkFJTlQgXCIke3BrQ29uc3RyYWludE5hbWV9XCInKTtgKTtcblxuICAvLyA0LiBQSyDsu6zrn7wg7YOA7J6FIOuzgOqyvVxuICB1cExpbmVzLnB1c2goYCAgLy8gUEsg7Lus65+8IO2DgOyehSDrs4Dqsr1gKTtcbiAgdXBMaW5lcy5wdXNoKFxuICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7dGFibGV9XCIgQUxURVIgQ09MVU1OIFwiaWRcIiBUWVBFICR7bmV3UGtQZ1R5cGV9IFVTSU5HIFwiaWRcIjo6JHtuZXdQa1BnVHlwZX0nKTtgLFxuICApO1xuXG4gIC8vIDUuIEZLIOy7rOufvCDtg4DsnoUg67OA6rK9ICjsl63ssLjsobAg7YWM7J2067iU65OkKSAtIOyekOq4sCDssLjsobAg7Y+s7ZWoXG4gIGZvciAoY29uc3QgZmsgb2YgcmVmZXJlbmNpbmdGS3MpIHtcbiAgICB1cExpbmVzLnB1c2goYCAgLy8gJHtmay50YWJsZU5hbWV9LiR7ZmsuY29sdW1uTmFtZX0g7Lus65+8IO2DgOyehSDrs4Dqsr1gKTtcbiAgICB1cExpbmVzLnB1c2goXG4gICAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke2ZrLnRhYmxlTmFtZX1cIiBBTFRFUiBDT0xVTU4gXCIke2ZrLmNvbHVtbk5hbWV9XCIgVFlQRSAke25ld1BrUGdUeXBlfSBVU0lORyBcIiR7ZmsuY29sdW1uTmFtZX1cIjo6JHtuZXdQa1BnVHlwZX0nKTtgLFxuICAgICk7XG4gIH1cblxuICAvLyA2LiBQSyDsoJzslb3sobDqsbQg67O16rWsXG4gIHVwTGluZXMucHVzaChgICAvLyBQSyDsoJzslb3sobDqsbQg67O16rWsYCk7XG4gIHVwTGluZXMucHVzaChcbiAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIEFERCBDT05TVFJBSU5UIFwiJHtwa0NvbnN0cmFpbnROYW1lfVwiIFBSSU1BUlkgS0VZIChcImlkXCIpJyk7YCxcbiAgKTtcblxuICAvLyA3LiDsnpDquLAg7LC47KGwIEZLIOuzteq1rFxuICBmb3IgKGNvbnN0IGZrIG9mIHNlbGZSZWZlcmVuY2luZ0ZLcykge1xuICAgIHVwTGluZXMucHVzaChgICAvLyDsnpDquLAg7LC47KGwIEZLIOuzteq1rDogJHtmay5jb2x1bW5OYW1lfWApO1xuICAgIHVwTGluZXMucHVzaChcbiAgICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7dGFibGV9XCIgQUREIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiIEZPUkVJR04gS0VZIChcIiR7ZmsuY29sdW1uTmFtZX1cIikgUkVGRVJFTkNFUyBcIiR7dGFibGV9XCIoXCJpZFwiKSBPTiBVUERBVEUgJHtmay5vblVwZGF0ZX0gT04gREVMRVRFICR7Zmsub25EZWxldGV9Jyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gOC4g7Jm467aAIO2FjOydtOu4lOydmCBGSyDsoJzslb3sobDqsbQg67O16rWsXG4gIGZvciAoY29uc3QgZmsgb2YgZXh0ZXJuYWxSZWZlcmVuY2luZ0ZLcykge1xuICAgIHVwTGluZXMucHVzaChgICAvLyAke2ZrLnRhYmxlTmFtZX0uJHtmay5jb2x1bW5OYW1lfSBGSyDsoJzslb3sobDqsbQg67O16rWsYCk7XG4gICAgdXBMaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHtmay50YWJsZU5hbWV9XCIgQUREIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiIEZPUkVJR04gS0VZIChcIiR7ZmsuY29sdW1uTmFtZX1cIikgUkVGRVJFTkNFUyBcIiR7dGFibGV9XCIoXCJpZFwiKSBPTiBVUERBVEUgJHtmay5vblVwZGF0ZX0gT04gREVMRVRFICR7Zmsub25EZWxldGV9Jyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gRE9XTiDsvZTrk5wg7IOd7ISxICjsl63siJwpXG4gIGNvbnN0IGRvd25MaW5lczogc3RyaW5nW10gPSBbXTtcblxuICAvLyAxLiDsmbjrtoAg7YWM7J2067iU7J2YIEZLIOygnOyVveyhsOqxtCDsgq3soJxcbiAgZm9yIChjb25zdCBmayBvZiBleHRlcm5hbFJlZmVyZW5jaW5nRktzKSB7XG4gICAgZG93bkxpbmVzLnB1c2goYCAgLy8gJHtmay50YWJsZU5hbWV9LiR7ZmsuY29sdW1uTmFtZX0gRksg7KCc7JW97KGw6rG0IOyCreygnGApO1xuICAgIGRvd25MaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHtmay50YWJsZU5hbWV9XCIgRFJPUCBDT05TVFJBSU5UIFwiJHtmay5jb25zdHJhaW50TmFtZX1cIicpO2AsXG4gICAgKTtcbiAgfVxuXG4gIC8vIDIuIOyekOq4sCDssLjsobAgRksg7IKt7KCcXG4gIGZvciAoY29uc3QgZmsgb2Ygc2VsZlJlZmVyZW5jaW5nRktzKSB7XG4gICAgZG93bkxpbmVzLnB1c2goYCAgLy8g7J6Q6riwIOywuOyhsCBGSyDsgq3soJw6ICR7ZmsuY29sdW1uTmFtZX1gKTtcbiAgICBkb3duTGluZXMucHVzaChcbiAgICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7dGFibGV9XCIgRFJPUCBDT05TVFJBSU5UIFwiJHtmay5jb25zdHJhaW50TmFtZX1cIicpO2AsXG4gICAgKTtcbiAgfVxuXG4gIC8vIDMuIFBLIOygnOyVveyhsOqxtCDsgq3soJxcbiAgZG93bkxpbmVzLnB1c2goYCAgLy8gUEsg7KCc7JW97KGw6rG0IOyCreygnGApO1xuICBkb3duTGluZXMucHVzaChcbiAgICBgICBhd2FpdCBrbmV4LnJhdygnQUxURVIgVEFCTEUgXCIke3RhYmxlfVwiIERST1AgQ09OU1RSQUlOVCBcIiR7cGtDb25zdHJhaW50TmFtZX1cIicpO2AsXG4gICk7XG5cbiAgLy8gNC4gUEsg7Lus65+8IO2DgOyehSDsm5Drs7VcbiAgZG93bkxpbmVzLnB1c2goYCAgLy8gUEsg7Lus65+8IO2DgOyehSDsm5Drs7VgKTtcbiAgZG93bkxpbmVzLnB1c2goXG4gICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBTFRFUiBDT0xVTU4gXCJpZFwiIFRZUEUgJHtvbGRQa1BnVHlwZX0gVVNJTkcgXCJpZFwiOjoke29sZFBrUGdUeXBlfScpO2AsXG4gICk7XG5cbiAgLy8gNS4gRksg7Lus65+8IO2DgOyehSDsm5Drs7UgKOyXreywuOyhsCDthYzsnbTruJTrk6QpXG4gIGZvciAoY29uc3QgZmsgb2YgcmVmZXJlbmNpbmdGS3MpIHtcbiAgICBkb3duTGluZXMucHVzaChgICAvLyAke2ZrLnRhYmxlTmFtZX0uJHtmay5jb2x1bW5OYW1lfSDsu6zrn7wg7YOA7J6FIOybkOuztWApO1xuICAgIGRvd25MaW5lcy5wdXNoKFxuICAgICAgYCAgYXdhaXQga25leC5yYXcoJ0FMVEVSIFRBQkxFIFwiJHtmay50YWJsZU5hbWV9XCIgQUxURVIgQ09MVU1OIFwiJHtmay5jb2x1bW5OYW1lfVwiIFRZUEUgJHtvbGRQa1BnVHlwZX0gVVNJTkcgXCIke2ZrLmNvbHVtbk5hbWV9XCI6OiR7b2xkUGtQZ1R5cGV9Jyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gNi4gUEsg7KCc7JW97KGw6rG0IOuzteq1rFxuICBkb3duTGluZXMucHVzaChgICAvLyBQSyDsoJzslb3sobDqsbQg67O16rWsYCk7XG4gIGRvd25MaW5lcy5wdXNoKFxuICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7dGFibGV9XCIgQUREIENPTlNUUkFJTlQgXCIke3BrQ29uc3RyYWludE5hbWV9XCIgUFJJTUFSWSBLRVkgKFwiaWRcIiknKTtgLFxuICApO1xuXG4gIC8vIDcuIOyekOq4sCDssLjsobAgRksg67O16rWsXG4gIGZvciAoY29uc3QgZmsgb2Ygc2VsZlJlZmVyZW5jaW5nRktzKSB7XG4gICAgZG93bkxpbmVzLnB1c2goYCAgLy8g7J6Q6riwIOywuOyhsCBGSyDrs7Xqtaw6ICR7ZmsuY29sdW1uTmFtZX1gKTtcbiAgICBkb3duTGluZXMucHVzaChcbiAgICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7dGFibGV9XCIgQUREIENPTlNUUkFJTlQgXCIke2ZrLmNvbnN0cmFpbnROYW1lfVwiIEZPUkVJR04gS0VZIChcIiR7ZmsuY29sdW1uTmFtZX1cIikgUkVGRVJFTkNFUyBcIiR7dGFibGV9XCIoXCJpZFwiKSBPTiBVUERBVEUgJHtmay5vblVwZGF0ZX0gT04gREVMRVRFICR7Zmsub25EZWxldGV9Jyk7YCxcbiAgICApO1xuICB9XG5cbiAgLy8gOC4g7Jm467aAIO2FjOydtOu4lOydmCBGSyDsoJzslb3sobDqsbQg67O16rWsXG4gIGZvciAoY29uc3QgZmsgb2YgZXh0ZXJuYWxSZWZlcmVuY2luZ0ZLcykge1xuICAgIGRvd25MaW5lcy5wdXNoKGAgIC8vICR7ZmsudGFibGVOYW1lfS4ke2ZrLmNvbHVtbk5hbWV9IEZLIOygnOyVveyhsOqxtCDrs7XqtaxgKTtcbiAgICBkb3duTGluZXMucHVzaChcbiAgICAgIGAgIGF3YWl0IGtuZXgucmF3KCdBTFRFUiBUQUJMRSBcIiR7ZmsudGFibGVOYW1lfVwiIEFERCBDT05TVFJBSU5UIFwiJHtmay5jb25zdHJhaW50TmFtZX1cIiBGT1JFSUdOIEtFWSAoXCIke2ZrLmNvbHVtbk5hbWV9XCIpIFJFRkVSRU5DRVMgXCIke3RhYmxlfVwiKFwiaWRcIikgT04gVVBEQVRFICR7Zmsub25VcGRhdGV9IE9OIERFTEVURSAke2ZrLm9uRGVsZXRlfScpO2AsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAnaW1wb3J0IHsgS25leCB9IGZyb20gXCJrbmV4XCI7JyxcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICAuLi51cExpbmVzLFxuICAgIFwifVwiLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4uZG93bkxpbmVzLFxuICAgIFwifVwiLFxuICBdO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdENvZGUobGluZXMuam9pbihcIlxcblwiKSwgXCJ0eXBlc2NyaXB0XCIsIGBzcmMvbWlncmF0aW9uLyR7dGFibGV9LnRzYCk7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHRpdGxlOiBgYWx0ZXJfJHt0YWJsZX1fcGtfdHlwZWAsXG4gICAgICBmb3JtYXR0ZWQsXG4gICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogUEsg7Lus65+87J2YIFBvc3RncmVTUUwg7YOA7J6FIOusuOyekOyXtOydhCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmZ1bmN0aW9uIGdldFBrUGdUeXBlKGNvbDogTWlncmF0aW9uQ29sdW1uKTogc3RyaW5nIHtcbiAgaWYgKGNvbC50eXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGNvbC5sZW5ndGggIT09IHVuZGVmaW5lZCA/IGB2YXJjaGFyKCR7Y29sLmxlbmd0aH0pYCA6IFwidGV4dFwiO1xuICB9XG4gIGlmIChjb2wudHlwZSA9PT0gXCJ1dWlkXCIpIHtcbiAgICByZXR1cm4gXCJ1dWlkXCI7XG4gIH1cbiAgLy8gaW50ZWdlcuydmCDqsr3smrAgc2VyaWFsL2ludGVnZXIg6rWs67aE7J20IO2VhOyalO2VmOyngOunjCxcbiAgLy8g7YOA7J6FIOuzgOqyvSDsi5zsl5DripQgaW50ZWdlcuuhnCDsspjrpqztlanri4jri6QuXG4gIHJldHVybiBcImludGVnZXJcIjtcbn1cbiJdLCJuYW1lcyI6WyJlcXVhbCIsImFscGhhYmV0aWNhbCIsImRpZmYiLCJFbnRpdHlNYW5hZ2VyIiwiTmFpdGUiLCJpc1NlYXJjaFRleHRQcm9wIiwiZm9ybWF0Q29kZSIsImRpZmZlcmVuY2VXaXRoIiwiaW50ZXJzZWN0aW9uQnkiLCJQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyIiwiU0VBUkNIX1RFWFRfSEVMUEVSX0RFRklOSVRJT05TIiwiU2VhcmNoVGV4dEV4cHJlc3Npb25QYXJzZXIiLCJpbmRleCIsInRva2VucyIsImlzQXRFbmQiLCJsZW5ndGgiLCJwYXJzZUV4cHJlc3Npb24iLCJwYXJzZUNvbmNhdCIsInBhcnRzIiwicGFyc2VQb3N0Zml4IiwibWF0Y2hPcGVyYXRvciIsInB1c2giLCJ0eXBlIiwibm9kZSIsInBhcnNlUHJpbWFyeSIsImV4cHIiLCJ0YXJnZXRUeXBlIiwicGFyc2VUeXBlTmFtZSIsIm1hdGNoSWRlbnRpZmllciIsInRva2VuIiwiY29uc3VtZUNvbGxhdGlvblRva2VuIiwiY29sbGF0aW9uIiwidmFsdWUiLCJxdW90ZWQiLCJjb25zdW1lVG9rZW4iLCJleHBlY3RTeW1ib2wiLCJsb3dlck5hbWUiLCJ0b0xvd2VyQ2FzZSIsIm1hdGNoU3ltYm9sIiwiaXNUcmltQm90aEZyb21Gb3JtIiwiYXJnIiwibmFtZSIsImFyZ3MiLCJwYXJzZUZ1bmN0aW9uQXJncyIsIkVycm9yIiwicGVlayIsImpvaW4iLCJib3RoVG9rZW4iLCJmcm9tVG9rZW4iLCJjb250ZXh0Iiwib2Zmc2V0IiwiZ2V0SW5kZXhDb2x1bW5PcGNsYXNzIiwiY29sdW1uIiwib3BjbGFzcyIsInZlY3Rvck9wcyIsInRva2VuaXplU2VhcmNoVGV4dEV4cHJlc3Npb24iLCJleHByZXNzaW9uIiwiY2hhciIsInVuZGVmaW5lZCIsInRlc3QiLCJzdGFydHNXaXRoIiwiY3VycmVudCIsImNhbm9uaWNhbGl6ZVNlYXJjaFRleHRHZW5lcmF0ZWRFeHByZXNzaW9uIiwicGFyc2VyIiwicGFyc2VkRXhwcmVzc2lvbiIsInJlbmRlclNlYXJjaFRleHRFeHByZXNzaW9uIiwibm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlIiwibm9ybWFsaXplU2VhcmNoVGV4dEV4cHJlc3Npb25GYWxsYmFjayIsImZsYXRNYXAiLCJwYXJ0Iiwibm9ybWFsaXplZFBhcnQiLCJ0b1VwcGVyQ2FzZSIsIm5vcm1hbGl6ZWRFeHByIiwicmVwbGFjZSIsInRyaW0iLCJtYXAiLCJwYXJlbnRQcmVjZWRlbmNlIiwicHJlY2VkZW5jZSIsImdldFNlYXJjaFRleHRFeHByZXNzaW9uUHJlY2VkZW5jZSIsInJlbmRlcmVkIiwicmVwbGFjZUFsbCIsInZpc2l0U2VhcmNoVGV4dEV4cHJlc3Npb25Ob2RlIiwidmlzaXRvciIsImZvckVhY2giLCJnZXRTZWFyY2hUZXh0SGVscGVyS2luZHNGcm9tRXhwcmVzc2lvbiIsImhlbHBlcktpbmRzIiwiU2V0IiwiYWRkSGVscGVyS2luZEZyb21OYW1lIiwibm9ybWFsaXplZE5hbWUiLCJhZGQiLCJyZXNvbHZlU2VhcmNoVGV4dENvbHVtbnMiLCJ0YWJsZSIsImNvbHVtbnMiLCJlbnRpdHkiLCJnZXRCeVRhYmxlIiwicHJvcHNCeU5hbWUiLCJNYXAiLCJwcm9wcyIsInByb3AiLCJnZXQiLCJnZW5lcmF0ZWQiLCJidWlsZFNlYXJjaFRleHRHZW5lcmF0ZWRFeHByZXNzaW9uIiwic291cmNlQ29sdW1ucyIsInNvdXJjZSIsInNvdXJjZVByb3AiLCJjYXNlSW5zZW5zaXRpdmUiLCJnZXRTZWFyY2hUZXh0SGVscGVyRGVmaW5pdGlvbnMiLCJraW5kIiwic2l6ZSIsImZpbHRlciIsImhhcyIsImdldFNlYXJjaFRleHRDb2x1bW5OYW1lcyIsImdlbmVyYXRlQ3JlYXRlQ29kZV9Db2x1bW5BbmRJbmRleGVzIiwiaW5kZXhlcyIsInJlc29sdmVkQ29sdW1ucyIsImNvbHVtbkRlZnMiLCJnZW5Db2x1bW5EZWZpbml0aW9ucyIsImhlbHBlckRlZmluaXRpb25zIiwibGluZXMiLCJidWlsZGVyIiwicmF3IiwiZ2VuSW5kZXhEZWZpbml0aW9uIiwidGl0bGUiLCJmb3JtYXR0ZWQiLCJyZXN1bHQiLCJnZW5HZW5lcmF0ZWRDb2x1bW5EZWZpbml0aW9uIiwiZ2VuTm9ybWFsQ29sdW1uRGVmaW5pdGlvbiIsInBnVHlwZSIsImdldFBnVHlwZUZvckNvbHVtbiIsInN0b3JhZ2VUeXBlIiwibnVsbGFibGVDbGF1c2UiLCJudWxsYWJsZSIsImNoYWlucyIsImVuZHNXaXRoIiwiZWxlbWVudFR5cGUiLCJzbGljZSIsImdldFBnQXJyYXlUeXBlIiwiZGltZW5zaW9ucyIsIm51bWJlclR5cGUiLCJwcmVjaXNpb24iLCJzY2FsZSIsImV4dHJhVHlwZSIsImRlZmF1bHRUbyIsImdlblZlY3RvckluZGV4RGVmaW5pdGlvbiIsInVzaW5nIiwiZ2VuUGdyb29uZ2FJbmRleERlZmluaXRpb24iLCJtZXRob2RNYXAiLCJ1bmlxdWUiLCJudWxsc05vdERpc3RpbmN0Q2xhdXNlIiwibnVsbHNOb3REaXN0aW5jdCIsInVzaW5nQ2xhdXNlIiwiY29sIiwib3BjbGFzc0NsYXVzZSIsInNvcnRPcmRlckNsYXVzZSIsInNvcnRPcmRlciIsIm51bGxzRmlyc3RDbGF1c2UiLCJudWxsc0ZpcnN0IiwiY29sdW1uQ2xhdXNlIiwicHJvcHNEaWN0Iiwib3B0aW9uIiwiZ2V0UGdyb29uZ2FDb2x1bW5PcHRpb24iLCJtIiwiZWZDb25zdHJ1Y3Rpb24iLCJsaXN0cyIsImdlbmVyYXRlQ3JlYXRlQ29kZV9Gb3JlaWduIiwiZm9yZWlnbnMiLCJ1cCIsImRvd24iLCJnZW5Gb3JlaWduRGVmaW5pdGlvbnMiLCJmb3JlaWduS2V5c1N0cmluZyIsImZvcmVpZ24iLCJyZWR1Y2UiLCJyIiwiY29sdW1uc1N0cmluZ1F1b3RlIiwidG8iLCJvblVwZGF0ZSIsIm9uRGVsZXRlIiwiZ2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlcyIsImVudGl0eUNvbHVtbnMiLCJlbnRpdHlJbmRleGVzIiwiZGJDb2x1bW5zIiwiZGJJbmRleGVzIiwiZGJGb3JlaWducyIsImNvbXBhcmVEQiIsInJlc29sdmVkRW50aXR5Q29sdW1ucyIsInNlYXJjaFRleHRDb2x1bW5OYW1lcyIsImVudGl0eUlkQ29sIiwiZmluZCIsImRiSWRDb2wiLCJpc1BrVHlwZUNoYW5nZWQiLCJnZW5lcmF0ZVBrVHlwZUNoYW5nZU1pZ3JhdGlvbiIsImFsdGVyQ29sdW1uc1RvIiwiZ2V0QWx0ZXJDb2x1bW5zVG8iLCJhbHRlckNvbHVtbkxpbmVzVG8iLCJnZXRBbHRlckNvbHVtbkxpbmVzVG8iLCJhbHRlckluZGV4ZXNUbyIsImdldEFsdGVySW5kZXhlc1RvIiwicmVjcmVhdGVkU2VhcmNoVGV4dENvbHVtbk5hbWVzIiwiYWx0ZXIiLCJkYkNvbHVtbiIsImVudGl0eUNvbHVtbiIsInJlY3JlYXRlZFNlYXJjaFRleHREYkluZGV4ZXMiLCJzb21lIiwiZHJvcCIsImRyb3BJbmRleCIsInJlY3JlYXRlZFNlYXJjaFRleHRFbnRpdHlJbmRleGVzIiwiYWRkSW5kZXgiLCJpbXBsaWNpdGx5RHJvcHBlZERiSW5kZXhlcyIsImV2ZXJ5IiwiaW5kZXhOZWVkc1RvRHJvcCIsImRyb3BwZWRJbmRleCIsImhhc1VwQ2hhbmdlcyIsInQiLCJ1cEJ1aWxkZXJMaW5lcyIsImdlbkluZGV4RHJvcERlZmluaXRpb24iLCJ1cFJhd0xpbmVzIiwiZG93bkJ1aWxkZXJMaW5lcyIsImluZGV4Q29sIiwiaW5jbHVkZXMiLCJkb3duUmF3TGluZXMiLCJhY3Rpb24iLCJsZW4iLCJub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uIiwiY29sdW1uc1RvIiwiZXh0cmFDb2x1bW5zIiwiZGIiLCJjb25jYXQiLCJzYW1lRGJDb2x1bW5zIiwic2FtZU1kQ29sdW1ucyIsImEiLCJiIiwibGluZXNUbyIsImFkZENvbHVtbkRlZnMiLCJkcm9wQ29sdW1uTmFtZXMiLCJma1RvRHJvcEJlZm9yZUNvbHVtbiIsImZrIiwiZHJvcEZrTGluZXMiLCJyZXN0b3JlRmtMaW5lcyIsImRyb3BDb2x1bW5EZWZzIiwiY29sdW1uRGlmZlVwIiwiY29sdW1uRGlmZkRvd24iLCJsIiwiaW5kZXhlc1RvIiwiaWRlbnRpdHkiLCJrZXlzIiwiT2JqZWN0Iiwia2V5Iiwic29ydCIsImsiLCJleHRyYUluZGV4ZXMiLCJzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzIiwiaXNWZWN0b3JJbmRleCIsInN1cHBvcnRzT3JkZXJpbmciLCJub3JtYWxpemVkVXNpbmciLCJnZW5lcmF0ZUFsdGVyQ29kZV9Gb3JlaWducyIsImVudGl0eUZvcmVpZ25zIiwiZHJvcHBpbmdDb2x1bW5zIiwiZ2V0S2V5IiwibWYiLCJkcm9wcGluZ0NvbHVtbk5hbWVzIiwiZmtUbyIsImVudGl0eUYiLCJtYXRjaGluZ0RiRiIsImRiRiIsImFsdGVyU3JjIiwiYWx0ZXJEc3QiLCJtYXRjaGluZ0VudGl0eUYiLCJpc0NvbHVtbkRyb3BwaW5nIiwiaGFzTGluZXMiLCJ2YWx1ZXMiLCJnZW5lcmF0ZUNyZWF0ZUNvZGUiLCJlbnRpdHlTZXQiLCJnZW5lcmF0ZUFsdGVyQ29kZSIsImRiU2V0IiwicmVwbGFjZUNvbHVtbkRlZmF1bHRUbyIsImMiLCJyZXBsYWNlTm9BY3Rpb25Pbk15U1FMIiwiZiIsImFsdGVyQ29kZXMiLCJpc0VxdWFsQ29sdW1ucyIsImlzRXF1YWxJbmRleGVzIiwiYWx0ZXJDb2RlIiwiZmxhdCIsIl9lbnRpdHlDb2x1bW5zIiwiX2VudGl0eUluZGV4ZXMiLCJfZGJDb2x1bW5zIiwiX2RiSW5kZXhlcyIsIl9kYkZvcmVpZ25zIiwicmVmZXJlbmNpbmdGS3MiLCJnZXRSZWZlcmVuY2luZ0ZvcmVpZ25LZXlzIiwic2VsZlJlZmVyZW5jaW5nRktzIiwidGFibGVOYW1lIiwiZXh0ZXJuYWxSZWZlcmVuY2luZ0ZLcyIsInBrQ29uc3RyYWludE5hbWUiLCJuZXdQa1BnVHlwZSIsImdldFBrUGdUeXBlIiwib2xkUGtQZ1R5cGUiLCJ1cExpbmVzIiwiY29sdW1uTmFtZSIsImNvbnN0cmFpbnROYW1lIiwiZG93bkxpbmVzIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLGtCQUFrQjtBQUVwQyxTQUFTQyxZQUFZLEVBQUVDLElBQUksUUFBUSxVQUFVO0FBQzdDLFNBQVNDLGFBQWEsRUFBRUMsS0FBSyxRQUFRLGNBQUs7QUFTMUMsU0FBU0MsZ0JBQWdCLFFBQVEsb0JBQWlCO0FBQ2xELFNBQVNDLFVBQVUsUUFBUSx3QkFBcUI7QUFDaEQsU0FBU0MsY0FBYyxFQUFFQyxjQUFjLFFBQVEsb0JBQWlCO0FBQ2hFLFNBQVNDLHNCQUFzQixRQUFRLGdDQUE2QjtBQThCcEUsTUFBTUMsaUNBQXVFO0lBQzNFLGNBQWMsQ0FBQzs7Ozs7Ozs7O01BU1gsQ0FBQztJQUNMLGVBQWUsQ0FBQzs7Ozs7Ozs7O01BU1osQ0FBQztBQUNQO0FBRUEsTUFBTUM7O0lBQ0lDLFFBQVEsRUFBRTtJQUVsQixZQUFZLEFBQWlCQyxNQUFtQyxDQUFFO2FBQXJDQSxTQUFBQTtJQUFzQztJQUVuRUMsVUFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUNGLEtBQUssSUFBSSxJQUFJLENBQUNDLE1BQU0sQ0FBQ0UsTUFBTTtJQUN6QztJQUVBQyxrQkFBNEM7UUFDMUMsT0FBTyxJQUFJLENBQUNDLFdBQVc7SUFDekI7SUFFUUEsY0FBd0M7UUFDOUMsTUFBTUMsUUFBUTtZQUFDLElBQUksQ0FBQ0MsWUFBWTtTQUFHO1FBRW5DLE1BQU8sSUFBSSxDQUFDQyxhQUFhLENBQUMsTUFBTztZQUMvQkYsTUFBTUcsSUFBSSxDQUFDLElBQUksQ0FBQ0YsWUFBWTtRQUM5QjtRQUVBLE9BQU9ELE1BQU1I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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sonamu",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.16",
|
|
4
4
|
"description": "Sonamu — TypeScript Fullstack API Framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -123,10 +123,10 @@
|
|
|
123
123
|
"tsicli": "^1.0.5",
|
|
124
124
|
"vite": "7.3.0",
|
|
125
125
|
"vitest": "^4.0.10",
|
|
126
|
-
"@sonamu-kit/hmr-hook": "^0.4.1",
|
|
127
126
|
"@sonamu-kit/hmr-runner": "^0.1.1",
|
|
128
127
|
"@sonamu-kit/tasks": "^0.2.0",
|
|
129
|
-
"@sonamu-kit/ts-loader": "^2.1.3"
|
|
128
|
+
"@sonamu-kit/ts-loader": "^2.1.3",
|
|
129
|
+
"@sonamu-kit/hmr-hook": "^0.4.1"
|
|
130
130
|
},
|
|
131
131
|
"devDependencies": {
|
|
132
132
|
"@biomejs/biome": "^2.3.13",
|
package/src/database/knex.ts
CHANGED
|
@@ -1,49 +1,13 @@
|
|
|
1
1
|
import type { Knex } from "knex";
|
|
2
2
|
import knex from "knex";
|
|
3
3
|
|
|
4
|
-
/**
|
|
5
|
-
* connection 객체를 libpq 연결 문자열로 변환합니다.
|
|
6
|
-
* pg-native는 libpq를 사용하므로, keepalive 등 libpq 파라미터를
|
|
7
|
-
* 연결 문자열로 전달해야 합니다.
|
|
8
|
-
*/
|
|
9
|
-
function buildLibpqConnectionString(conn: Record<string, unknown>): string {
|
|
10
|
-
const mapping: Array<[string, string]> = [
|
|
11
|
-
["host", "host"],
|
|
12
|
-
["port", "port"],
|
|
13
|
-
["user", "user"],
|
|
14
|
-
["password", "password"],
|
|
15
|
-
["database", "dbname"],
|
|
16
|
-
];
|
|
17
|
-
|
|
18
|
-
const parts: string[] = [];
|
|
19
|
-
for (const [jsKey, pqKey] of mapping) {
|
|
20
|
-
if (conn[jsKey] != null) {
|
|
21
|
-
parts.push(`${pqKey}='${String(conn[jsKey]).replace(/'/g, "\\'")}'`);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// TCP keepAlive (libpq parameters)
|
|
26
|
-
parts.push("keepalives=1");
|
|
27
|
-
parts.push("keepalives_idle=10");
|
|
28
|
-
parts.push("keepalives_interval=10");
|
|
29
|
-
parts.push("keepalives_count=5");
|
|
30
|
-
|
|
31
|
-
return parts.join(" ");
|
|
32
|
-
}
|
|
33
|
-
|
|
34
4
|
export function createKnexInstance(config: Knex.Config): Knex {
|
|
35
5
|
if (config.connection && typeof config.connection === "object") {
|
|
36
6
|
const conn = config.connection as Record<string, unknown>;
|
|
37
7
|
|
|
38
|
-
if (
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
} else {
|
|
42
|
-
// pg: keepAlive 설정 (Node.js TCP socket level)
|
|
43
|
-
if (conn.keepAlive === undefined) {
|
|
44
|
-
conn.keepAlive = true;
|
|
45
|
-
conn.keepAliveInitialDelayMillis = conn.keepAliveInitialDelayMillis ?? 10000;
|
|
46
|
-
}
|
|
8
|
+
if (conn.keepAlive === undefined) {
|
|
9
|
+
conn.keepAlive = true;
|
|
10
|
+
conn.keepAliveInitialDelayMillis = conn.keepAliveInitialDelayMillis ?? 10000;
|
|
47
11
|
}
|
|
48
12
|
}
|
|
49
13
|
|
|
@@ -884,6 +884,8 @@ function genNormalColumnDefinition(column: MigrationColumn): string {
|
|
|
884
884
|
if (column.defaultTo !== undefined) {
|
|
885
885
|
if (typeof column.defaultTo === "string" && column.defaultTo.startsWith(`"`)) {
|
|
886
886
|
chains.push(`defaultTo(${column.defaultTo})`);
|
|
887
|
+
} else if (column.type === "json" && typeof column.defaultTo.startsWith('"')) {
|
|
888
|
+
chains.push(`defaultTo(knex.raw("${column.defaultTo.replaceAll('"', "'")}::jsonb"))`);
|
|
887
889
|
} else {
|
|
888
890
|
chains.push(`defaultTo(knex.raw('${column.defaultTo}'))`);
|
|
889
891
|
}
|