@secrecy/lib 1.0.0-dev.44 → 1.0.0-dev.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/convert/node.js +16 -15
- package/dist/client/index.d.ts +2 -4
- package/dist/client/index.js +30 -76
- package/dist/client/types/Node.d.ts +14 -7
- package/dist/client/types/Node.js +1 -1
- package/dist/client/types/selectors.d.ts +47 -123
- package/dist/client/types/selectors.js +9 -4
- package/dist/zeus/const.js +10 -15
- package/dist/zeus/index.d.ts +43 -51
- package/dist/zeus/index.js +11 -4
- package/package.json +15 -15
package/dist/client/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import { BaseClient } from "../BaseClient.js";
|
|
|
13
13
|
import { nodesCache, filesCache, usersCache } from "../cache.js";
|
|
14
14
|
import { secretstreamKeygen, encryptSecretstream } from "../crypto/file.js";
|
|
15
15
|
import { compress, uncompress } from "../minify/index.js";
|
|
16
|
-
import { gqlNodeToExternal, gqlNodeToExternalNodeFull,
|
|
16
|
+
import { gqlNodeFullToInternalFull, gqlNodeToExternal, gqlNodeToExternalNodeFull, internalNodeToNode } from "./convert/node.js";
|
|
17
17
|
import { gqlFileToExternal } from "./convert/file.js";
|
|
18
18
|
import { sodium } from "../sodium.js";
|
|
19
19
|
import { decryptCryptoBox, encryptCryptoBox } from "../crypto/index.js";
|
|
@@ -71,10 +71,10 @@ export class SecrecyClient extends BaseClient {
|
|
|
71
71
|
return {
|
|
72
72
|
id: node.id,
|
|
73
73
|
nameKey: sodium.to_hex(encryptCryptoBox(sodium.from_hex(nameKey), publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey)),
|
|
74
|
-
files: node.history.map(f => ({
|
|
74
|
+
files: "history" in node ? node.history.map(f => ({
|
|
75
75
|
id: f.id,
|
|
76
76
|
key: sodium.to_hex(encryptCryptoBox(sodium.from_hex(f.key), publicKey, _classPrivateFieldLooseBase(this, _keys)[_keys].privateKey))
|
|
77
|
-
}))
|
|
77
|
+
})) : []
|
|
78
78
|
};
|
|
79
79
|
};
|
|
80
80
|
|
|
@@ -179,7 +179,7 @@ export class SecrecyClient extends BaseClient {
|
|
|
179
179
|
},
|
|
180
180
|
"...on AddFileToHistoryResponse": {
|
|
181
181
|
__typename: true,
|
|
182
|
-
addFileToHistory:
|
|
182
|
+
addFileToHistory: nodeFullSelector
|
|
183
183
|
}
|
|
184
184
|
}]
|
|
185
185
|
});
|
|
@@ -196,7 +196,7 @@ export class SecrecyClient extends BaseClient {
|
|
|
196
196
|
return addFileToHistory;
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
const node = await
|
|
199
|
+
const node = await gqlNodeFullToInternalFull(addFileToHistory.addFileToHistory, _classPrivateFieldLooseBase(this, _keys)[_keys]);
|
|
200
200
|
const file = node.history.find(f => f.id === fileId);
|
|
201
201
|
|
|
202
202
|
if (file) {
|
|
@@ -1943,56 +1943,10 @@ export class SecrecyClient extends BaseClient {
|
|
|
1943
1943
|
};
|
|
1944
1944
|
}
|
|
1945
1945
|
|
|
1946
|
-
async
|
|
1947
|
-
let {
|
|
1948
|
-
folderId
|
|
1949
|
-
} = _ref23;
|
|
1950
|
-
const {
|
|
1951
|
-
folderSize
|
|
1952
|
-
} = await this.client("query", {
|
|
1953
|
-
scalars: {
|
|
1954
|
-
BigInt: {
|
|
1955
|
-
decode: e => BigInt(e),
|
|
1956
|
-
encode: e => e.toString()
|
|
1957
|
-
}
|
|
1958
|
-
}
|
|
1959
|
-
})({
|
|
1960
|
-
folderSize: [{
|
|
1961
|
-
folderId
|
|
1962
|
-
}, {
|
|
1963
|
-
"...on ErrorAccessDenied": {
|
|
1964
|
-
__typename: true,
|
|
1965
|
-
message: true
|
|
1966
|
-
},
|
|
1967
|
-
"...on FolderSizeResponse": {
|
|
1968
|
-
__typename: true,
|
|
1969
|
-
size: true,
|
|
1970
|
-
sizeBefore: true
|
|
1971
|
-
}
|
|
1972
|
-
}]
|
|
1973
|
-
});
|
|
1974
|
-
|
|
1975
|
-
if (!folderSize) {
|
|
1976
|
-
return null;
|
|
1977
|
-
}
|
|
1978
|
-
|
|
1979
|
-
if (folderSize.__typename === "ErrorAccessDenied") {
|
|
1980
|
-
return folderSize;
|
|
1981
|
-
}
|
|
1982
|
-
|
|
1983
|
-
return {
|
|
1984
|
-
__typename: "SuccessResponse",
|
|
1985
|
-
data: {
|
|
1986
|
-
size: BigInt(folderSize.size),
|
|
1987
|
-
sizeBefore: BigInt(folderSize.sizeBefore)
|
|
1988
|
-
}
|
|
1989
|
-
};
|
|
1990
|
-
}
|
|
1991
|
-
|
|
1992
|
-
async deleteMail(_ref24) {
|
|
1946
|
+
async deleteMail(_ref23) {
|
|
1993
1947
|
let {
|
|
1994
1948
|
mailId
|
|
1995
|
-
} =
|
|
1949
|
+
} = _ref23;
|
|
1996
1950
|
const {
|
|
1997
1951
|
deleteMail
|
|
1998
1952
|
} = await this.client("mutation")({
|
|
@@ -2024,14 +1978,14 @@ export class SecrecyClient extends BaseClient {
|
|
|
2024
1978
|
};
|
|
2025
1979
|
}
|
|
2026
1980
|
|
|
2027
|
-
async saveInCloud(
|
|
1981
|
+
async saveInCloud(_ref24) {
|
|
2028
1982
|
var _node$parent;
|
|
2029
1983
|
|
|
2030
1984
|
let {
|
|
2031
1985
|
fileId,
|
|
2032
1986
|
name,
|
|
2033
1987
|
nodeId
|
|
2034
|
-
} =
|
|
1988
|
+
} = _ref24;
|
|
2035
1989
|
|
|
2036
1990
|
if (nodeId && !nodesCache.has(nodeId)) {
|
|
2037
1991
|
await this.node({
|
|
@@ -2172,20 +2126,20 @@ export class SecrecyClient extends BaseClient {
|
|
|
2172
2126
|
}
|
|
2173
2127
|
|
|
2174
2128
|
const node = await gqlNodeToExternalNodeFull(saveInCloud.saveInCloud, _classPrivateFieldLooseBase(this, _keys)[_keys]);
|
|
2175
|
-
const me = (_node$parent = node.parent) == null ? void 0 : _node$parent.users.find(
|
|
2176
|
-
let [u] =
|
|
2129
|
+
const me = (_node$parent = node.parent) == null ? void 0 : _node$parent.users.find(_ref25 => {
|
|
2130
|
+
let [u] = _ref25;
|
|
2177
2131
|
return u.publicKey === _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey;
|
|
2178
2132
|
});
|
|
2179
2133
|
|
|
2180
2134
|
if (me && ["admin", "write"].includes(me[1])) {
|
|
2181
2135
|
var _node$parent$users$fi, _node$parent2;
|
|
2182
2136
|
|
|
2183
|
-
const others = (_node$parent$users$fi = (_node$parent2 = node.parent) == null ? void 0 : _node$parent2.users.filter(
|
|
2184
|
-
let [u] =
|
|
2137
|
+
const others = (_node$parent$users$fi = (_node$parent2 = node.parent) == null ? void 0 : _node$parent2.users.filter(_ref26 => {
|
|
2138
|
+
let [u] = _ref26;
|
|
2185
2139
|
return u.publicKey !== _classPrivateFieldLooseBase(this, _keys)[_keys].publicKey;
|
|
2186
2140
|
})) != null ? _node$parent$users$fi : [];
|
|
2187
|
-
await Promise.all(others.map(
|
|
2188
|
-
let [u, rights] =
|
|
2141
|
+
await Promise.all(others.map(_ref27 => {
|
|
2142
|
+
let [u, rights] = _ref27;
|
|
2189
2143
|
return this.shareNode({
|
|
2190
2144
|
nodeId: node.id,
|
|
2191
2145
|
rights,
|
|
@@ -2200,11 +2154,11 @@ export class SecrecyClient extends BaseClient {
|
|
|
2200
2154
|
};
|
|
2201
2155
|
}
|
|
2202
2156
|
|
|
2203
|
-
async dbGet(
|
|
2157
|
+
async dbGet(_ref28) {
|
|
2204
2158
|
let {
|
|
2205
2159
|
field,
|
|
2206
2160
|
userId
|
|
2207
|
-
} =
|
|
2161
|
+
} = _ref28;
|
|
2208
2162
|
const {
|
|
2209
2163
|
dbGet
|
|
2210
2164
|
} = await this.client("query")({
|
|
@@ -2253,11 +2207,11 @@ export class SecrecyClient extends BaseClient {
|
|
|
2253
2207
|
};
|
|
2254
2208
|
}
|
|
2255
2209
|
|
|
2256
|
-
async dbSet(
|
|
2210
|
+
async dbSet(_ref29) {
|
|
2257
2211
|
let {
|
|
2258
2212
|
value,
|
|
2259
2213
|
userId
|
|
2260
|
-
} =
|
|
2214
|
+
} = _ref29;
|
|
2261
2215
|
|
|
2262
2216
|
if (typeof value !== "object") {
|
|
2263
2217
|
throw new Error("value should be an object including fields you want to update.");
|
|
@@ -2307,11 +2261,11 @@ export class SecrecyClient extends BaseClient {
|
|
|
2307
2261
|
};
|
|
2308
2262
|
}
|
|
2309
2263
|
|
|
2310
|
-
async dbSearch(
|
|
2264
|
+
async dbSearch(_ref30) {
|
|
2311
2265
|
let {
|
|
2312
2266
|
search,
|
|
2313
2267
|
field
|
|
2314
|
-
} =
|
|
2268
|
+
} = _ref30;
|
|
2315
2269
|
const {
|
|
2316
2270
|
dbSearch
|
|
2317
2271
|
} = await this.client("query", {
|
|
@@ -2544,14 +2498,14 @@ export class SecrecyClient extends BaseClient {
|
|
|
2544
2498
|
};
|
|
2545
2499
|
}
|
|
2546
2500
|
|
|
2547
|
-
async createDraftMail(
|
|
2501
|
+
async createDraftMail(_ref31) {
|
|
2548
2502
|
let {
|
|
2549
2503
|
body,
|
|
2550
2504
|
subject,
|
|
2551
2505
|
files,
|
|
2552
2506
|
recipientsIds,
|
|
2553
2507
|
replyTo
|
|
2554
|
-
} =
|
|
2508
|
+
} = _ref31;
|
|
2555
2509
|
const hashKey = sodium.randombytes_buf(sodium.crypto_generichash_KEYBYTES, "hex");
|
|
2556
2510
|
const hash = sodium.crypto_generichash(sodium.crypto_generichash_BYTES, JSON.stringify({
|
|
2557
2511
|
body,
|
|
@@ -2637,13 +2591,13 @@ export class SecrecyClient extends BaseClient {
|
|
|
2637
2591
|
};
|
|
2638
2592
|
}
|
|
2639
2593
|
|
|
2640
|
-
async fileContent(
|
|
2594
|
+
async fileContent(_ref32) {
|
|
2641
2595
|
let {
|
|
2642
2596
|
fileId,
|
|
2643
2597
|
onDownloadProgress,
|
|
2644
2598
|
progressDecrypt,
|
|
2645
2599
|
signal
|
|
2646
|
-
} =
|
|
2600
|
+
} = _ref32;
|
|
2647
2601
|
const {
|
|
2648
2602
|
fileContent
|
|
2649
2603
|
} = await this.client("query", {
|
|
@@ -2814,10 +2768,10 @@ export class SecrecyClient extends BaseClient {
|
|
|
2814
2768
|
};
|
|
2815
2769
|
}
|
|
2816
2770
|
|
|
2817
|
-
async readMail(
|
|
2771
|
+
async readMail(_ref33) {
|
|
2818
2772
|
let {
|
|
2819
2773
|
mailId
|
|
2820
|
-
} =
|
|
2774
|
+
} = _ref33;
|
|
2821
2775
|
const {
|
|
2822
2776
|
readMail
|
|
2823
2777
|
} = await this.client("mutation")({
|
|
@@ -2869,10 +2823,10 @@ export class SecrecyClient extends BaseClient {
|
|
|
2869
2823
|
};
|
|
2870
2824
|
}
|
|
2871
2825
|
|
|
2872
|
-
async unreadMail(
|
|
2826
|
+
async unreadMail(_ref34) {
|
|
2873
2827
|
let {
|
|
2874
2828
|
mailId
|
|
2875
|
-
} =
|
|
2829
|
+
} = _ref34;
|
|
2876
2830
|
const {
|
|
2877
2831
|
unreadMail
|
|
2878
2832
|
} = await this.client("mutation")({
|
|
@@ -3203,4 +3157,4 @@ export class SecrecyClient extends BaseClient {
|
|
|
3203
3157
|
}
|
|
3204
3158
|
|
|
3205
3159
|
}
|
|
3206
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJreSIsImF4aW9zIiwiQmFzZUNsaWVudCIsIm5vZGVzQ2FjaGUiLCJmaWxlc0NhY2hlIiwidXNlcnNDYWNoZSIsInNlY3JldHN0cmVhbUtleWdlbiIsImVuY3J5cHRTZWNyZXRzdHJlYW0iLCJjb21wcmVzcyIsInVuY29tcHJlc3MiLCJncWxOb2RlVG9FeHRlcm5hbCIsImdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwiLCJncWxOb2RlVG9JbnRlcm5hbCIsImludGVybmFsTm9kZVRvTm9kZSIsImdxbEZpbGVUb0V4dGVybmFsIiwic29kaXVtIiwiZGVjcnlwdENyeXB0b0JveCIsImVuY3J5cHRDcnlwdG9Cb3giLCJnZW5lcmF0ZSIsIm1kNSIsImVuY3J5cHQiLCJkZWNyeXB0IiwiY2h1bmtzIiwiY29uY2F0ZW5hdGUiLCJlbnVtZXJhdGUiLCJwcm9taXNlQWxsTGltaXQiLCJmaWxlU2VsZWN0b3IiLCJtYWlsU2VsZWN0b3IiLCJub2RlRnVsbFNlbGVjdG9yIiwibm9kZVNlbGVjdG9yIiwiY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwiLCJkZWNvZGUiLCJzZXJpYWxpemUiLCJlbmNyeXB0TmFtZSIsIm5hbWUiLCJuYW1lS2V5IiwiZGF0YSIsImZyb21faGV4IiwiZnJvbV9zdHJpbmciLCJuYW1lRW5jcnlwdGVkIiwidG9faGV4IiwiU2VjcmVjeUNsaWVudCIsImNvbnN0cnVjdG9yIiwidWFTZXNzaW9uIiwidWFLZXlzIiwidWFKd3QiLCJlbnYiLCJwZXJOb2RlIiwibm9kZUlkIiwicHVibGljS2V5Iiwibm9kZSIsImdldCIsImlkIiwiYWNjZXNzIiwicHJpdmF0ZUtleSIsImZpbGVzIiwiaGlzdG9yeSIsIm1hcCIsImYiLCJrZXkiLCJfZWFjaFVzZXIiLCJzdWJqZWN0IiwiYm9keSIsImlkT3JNYWlsIiwidSIsInJlcSIsInVzZXIiLCJ1c2VySWQiLCJ3aXRoUHVibGljS2V5IiwiX190eXBlbmFtZSIsIkVycm9yIiwicmVjaXBpZW50c0ZpbGVzIiwiQXJyYXkiLCJmaWxlSW5IaXN0b3J5IiwiZmlsZSIsInB1c2giLCJmaWxlS2V5IiwicmVjaXBpZW50SWQiLCJqd3QiLCJqd3REZWNvZGVkIiwiYXBwVXNlcklkIiwic3ViIiwiYWRkRmlsZVRvSGlzdG9yeSIsImZpbGVJZCIsImNsaWVudCIsIm1lc3NhZ2UiLCJmaW5kIiwidXNlcnMiLCJmaWx0ZXIiLCJpbnB1dCIsInNoYXJlRmlsZUluSGlzdG9yeSIsInJlc3VsdCIsInVwbG9hZEZpbGUiLCJlbmNyeXB0UHJvZ3Jlc3MiLCJ1cGxvYWRQcm9ncmVzcyIsInNpZ25hbCIsImZpbGVCdWZmZXIiLCJGaWxlIiwiVWludDhBcnJheSIsImFycmF5QnVmZmVyIiwiY29tcHJlc3NlZCIsImVuY3J5cHRlZEZpbGUiLCJtZDVGaWxlIiwibWQ1RW5jcnlwdGVkIiwiZW5jcnlwdGVkRmlsZUtleSIsInNjYWxhcnMiLCJKc29uIiwiZW5jb2RlIiwiZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYXJzZSIsIkRhdGVUaW1lIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiQmlnSW50IiwidG9TdHJpbmciLCJmaWxlU2l6ZSIsImJ5dGVMZW5ndGgiLCJmaWxlU2l6ZUJlZm9yZSIsImZpbGVQYXJ0U2l6ZSIsInBhcnRzIiwiZmllbGRzIiwib3JkZXIiLCJ1cmwiLCJ0b3RhbCIsImN1cnJlbnQiLCJwZXJjZW50IiwibGVuZ3RoIiwidXBsb2FkUGFydEVuZGVkIiwidXBsb2FkRmlsZVBhcnRFbmQiLCJ1cGxvYWRFbmRlZCIsInVwbG9hZEZpbGVFbmQiLCJjaHVua1BhcnRzIiwiaW5kZXgiLCJjaHVuayIsIk51bWJlciIsInByb2dyZXNzUGFydHMiLCJvblByb2dyZXNzIiwicGFydCIsInByb2dyZXNzRXZlbnQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJyZWR1Y2UiLCJwcnYiLCJjdXIiLCJsb2FkZWQiLCJieVBhcnQiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwicCIsInZhbHVlIiwiZW50cmllcyIsImFwcGVuZCIsIkJsb2IiLCJwb3N0Iiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZEZpbGVJbkNsb3VkIiwic2F2ZUluQ2xvdWQiLCJsb2dvdXQiLCJzZXNzaW9uSWQiLCJjbGVhciIsImNyZWF0ZUZvbGRlciIsInBhcmVudEZvbGRlcklkIiwiZW5jcnlwdGVkTmFtZSIsImVuY3J5cHRlZEtleSIsImZvbGRlciIsInBhcmVudCIsIlByb21pc2UiLCJhbGwiLCJyaWdodHMiLCJzaGFyZU5vZGUiLCJkZWxldGVkIiwibWFpbCIsImRlbGV0ZWROb2RlcyIsIm5vZGVzIiwic2hhcmVkTm9kZXMiLCJub2Rlc1NoYXJlZFdpdGhNZSIsInR5cGUiLCJkZWxldGVOb2RlU2hhcmluZyIsImR1cGxpY2F0ZU5vZGUiLCJmb2xkZXJJZCIsImN1c3RvbU5hbWUiLCJkZWxldGVOb2RlQ2xvdWRUcmFzaCIsImlkcyIsInNoYXJlTm9kZXMiLCJzaGFyZU5vZGVGaW5pc2giLCJ1cGRhdGVOb2RlIiwiaXNGYXZvcml0ZSIsImRlbGV0ZWRBdCIsImRlbGV0ZWRNYWlscyIsIm1haWxUeXBlIiwibWFpbHMiLCJtIiwidXBkYXRlQXBwTm90aWZpY2F0aW9ucyIsIm5vdGlmaWNhdGlvbnMiLCJlbmFibGVBbGwiLCJjbG91ZCIsImRpc2FibGVBbGxVbnRpbCIsImFwcE5vdGlmaWNhdGlvbnMiLCJjcmVhdGVNYWlsIiwiY3VzdG9tTWVzc2FnZSIsImNyZWF0ZURyYWZ0TWFpbCIsInNlbmREcmFmdE1haWwiLCJtYWlsSW50ZWdyaXR5SWQiLCJ3YWl0aW5nUmVjZWl2ZWRNYWlscyIsImRhdGUiLCJhdHRhY2htZW50c0NvdW50Iiwic2VuZGVyIiwiZmlyc3RuYW1lIiwibGFzdG5hbWUiLCJlbWFpbCIsInJlY2lwaWVudHMiLCJ0ZW1wb3JhcnlSZWNpcGllbnRzIiwidXBkYXRlRHJhZnRNYWlsIiwiZHJhZnRJZCIsInJlY2lwaWVudHNJZHMiLCJyZXBseVRvIiwiZHJhZnRzIiwiZHJhZnRNYWlscyIsImRyYWZ0IiwiZCIsImhhc2hLZXkiLCJoYXNoIiwicmFuZG9tYnl0ZXNfYnVmIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTIiwiY3J5cHRvX2dlbmVyaWNoYXNoIiwiY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTIiwic2VuZGVyRmlsZXMiLCJkZWxldGVEcmFmdE1haWwiLCJkZWxldGVNYWlsVHJhc2giLCJlbXB0eU1haWxUcmFzaCIsImVtcHR5Q2xvdWRUcmFzaCIsInJlY292ZXJOb2RlIiwicmVjb3Zlck1haWwiLCJtYWlsSWQiLCJkZWxldGVGaWxlIiwiZGVsZXRlTm9kZSIsIm1vdmVOb2RlcyIsIm5vZGVJZHMiLCJwYXJlbnROb2RlSWQiLCJmb2xkZXJTaXplIiwic2l6ZSIsInNpemVCZWZvcmUiLCJkZWxldGVNYWlsIiwiaGFzIiwicmVjZWl2ZWRNYWlscyIsInNvbWUiLCJmaWxlTWFpbCIsImVuY3J5cHRlZE5hbWVLZXkiLCJmaWxlbmFtZSIsIm1lIiwiaW5jbHVkZXMiLCJvdGhlcnMiLCJkYkdldCIsImZpZWxkIiwianNvbiIsInJlcyIsImRiU2V0IiwiZGJTZWFyY2giLCJzZWFyY2giLCJkcmFmdE1haWxJZCIsInNlbmRXYWl0aW5nRW1haWxzIiwic2VudE1haWxzIiwiZmlsdGVyZWQiLCJzZW5kT25lTWFpbCIsInJlY2lwaWVudCIsImZpbGVDb250ZW50Iiwib25Eb3dubG9hZFByb2dyZXNzIiwicHJvZ3Jlc3NEZWNyeXB0IiwiQnl0ZXMiLCJjb25zb2xlIiwibG9nIiwiZnJvbSIsImNvbnRlbnRVcmwiLCJ0b3RhbFNpemUiLCJjb250ZW50IiwibWF5YmVQYXJ0cyIsIm1heWJlQ29udGVudCIsInNlbmRlclB1YmxpY0tleSIsInRyYW5zZmVycmVkQnl0ZXMiLCJ0b3RhbEJ5dGVzIiwiZW5jcnlwdGVkQ29udGVudEZyb21QYXJ0cyIsImZpbGVQYXJ0cyIsImJ1ZiIsInRpbWVvdXQiLCJwciIsIm1kNVBhcnQiLCJzb3J0IiwiYSIsImIiLCJmaW5hbGl6ZSIsImVuY3J5cHRlZENvbnRlbnQiLCJzcmMiLCJtZDVDb250ZW50IiwicmVhZE1haWwiLCJ1bnJlYWRNYWlsIiwiYXBwU2V0dGluZ3MiLCJjbG91ZEZpbGVEYXlzRm9yRGVsZXRlIiwiY2xvdWRGb2xkZXJEYXlzRm9yRGVsZXRlIiwiaGlzdG9yeUZpbGVEYXlzRm9yRGVsZXRlIiwiaGlzdG9yeU1heEZpbGVDb3VudCIsInVwZGF0ZUFwcFNldHRpbmdzIiwic2V0dGluZ3MiLCJ1bnJlYWRSZWNlaXZlZE1haWxzQ291bnQiLCJjb3VudCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5pbXBvcnQgdHlwZSB7IE1haWxUeXBlLCBOb2RlVHlwZSB9IGZyb20gXCIuLy4uL3pldXMvaW5kZXhcIjtcbmltcG9ydCB0eXBlIHsgRG93bmxvYWRQcm9ncmVzcyB9IGZyb20gXCJreVwiO1xuaW1wb3J0IGt5IGZyb20gXCJreVwiO1xuaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHR5cGUgeyBGb2xkZXJTaXplLCBTdWNjZXNzUmVzcG9uc2UsIFVzZXJEYXRhIH0gZnJvbSBcIi4uL0Jhc2VDbGllbnQuanNcIjtcbmltcG9ydCB7IEJhc2VDbGllbnQgfSBmcm9tIFwiLi4vQmFzZUNsaWVudC5qc1wiO1xuaW1wb3J0IHsgbm9kZXNDYWNoZSwgZmlsZXNDYWNoZSwgdXNlcnNDYWNoZSB9IGZyb20gXCIuLi9jYWNoZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9ncmVzcyB9IGZyb20gXCIuLi9jcnlwdG8vZmlsZS5qc1wiO1xuaW1wb3J0IHsgc2VjcmV0c3RyZWFtS2V5Z2VuLCBlbmNyeXB0U2VjcmV0c3RyZWFtIH0gZnJvbSBcIi4uL2NyeXB0by9maWxlLmpzXCI7XG5pbXBvcnQgeyBjb21wcmVzcywgdW5jb21wcmVzcyB9IGZyb20gXCIuLi9taW5pZnkvaW5kZXguanNcIjtcbmltcG9ydCB7XG4gIGdxbE5vZGVUb0V4dGVybmFsLFxuICBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsLFxuICBncWxOb2RlVG9JbnRlcm5hbCxcbiAgaW50ZXJuYWxOb2RlVG9Ob2RlXG59IGZyb20gXCIuL2NvbnZlcnQvbm9kZS5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBNYWlsRmlsZUlucHV0LFxuICBSZWNlaXZlZE1haWwsXG4gIFNlbnRNYWlsLFxuICBOb2RlLFxuICBOb2RlRnVsbCxcbiAgVXNlckFwcFNldHRpbmdzLFxuICBVc2VyQXBwTm90aWZpY2F0aW9ucyxcbiAgRmlsZU1ldGFkYXRhIGFzIFNlY3JlY3lGaWxlLFxuICBXYWl0aW5nUmVjZWl2ZWRNYWlsLFxuICBEcmFmdE1haWwsXG4gIE1haWxSZWNpcGllbnRJbnB1dCxcbiAgU2hhcmVOb2Rlc0lucHV0LFxuICBOYW1lS2V5SW5wdXQsXG4gIE1haWwsXG4gIFNoYXJlRmlsZUluSGlzdG9yeUlucHV0LFxuICBGaWxlUGFydFJlc3BvbnNlLFxuICBGaWxlQ29udGVudFBhcnRcbn0gZnJvbSBcIi4vdHlwZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGdxbEZpbGVUb0V4dGVybmFsIH0gZnJvbSBcIi4vY29udmVydC9maWxlLmpzXCI7XG5pbXBvcnQgeyBzb2RpdW0gfSBmcm9tIFwiLi4vc29kaXVtLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleVBhaXIgfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBkZWNyeXB0Q3J5cHRvQm94LCBlbmNyeXB0Q3J5cHRvQm94IH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBTZWNyZWN5RW52IH0gZnJvbSBcIi4vaGVscGVycy5qc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2hvcnRpZFwiO1xuaW1wb3J0IHsgbWQ1IH0gZnJvbSBcIi4uL3dvcmtlci9tZDUuanNcIjtcbmltcG9ydCB7IGVuY3J5cHQsIGRlY3J5cHQgfSBmcm9tIFwiLi4vd29ya2VyL3NvZGl1bS5qc1wiO1xuaW1wb3J0IHtcbiAgY2h1bmtzLFxuICBjb25jYXRlbmF0ZSxcbiAgZW51bWVyYXRlLFxuICBwcm9taXNlQWxsTGltaXRcbn0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzLmpzXCI7XG5pbXBvcnQge1xuICBmaWxlU2VsZWN0b3IsXG4gIG1haWxTZWxlY3RvcixcbiAgbm9kZUZ1bGxTZWxlY3RvcixcbiAgbm9kZVNlbGVjdG9yXG59IGZyb20gXCIuL3R5cGVzL3NlbGVjdG9ycy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSaWdodHMgfSBmcm9tIFwiLi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwgfSBmcm9tIFwiLi9jb252ZXJ0L21haWwuanNcIjtcbmltcG9ydCB0eXBlIHsgSnd0UGF5bG9hZCB9IGZyb20gXCJqc29ud2VidG9rZW5cIjtcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gXCJqc29ud2VidG9rZW5cIjtcbi8vIGltcG9ydCB7IG1kNSB9IGZyb20gXCIuLi93b3JrZXIvaW5kZXguanNcIjtcbi8vIGltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBvZiB9IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgRXJyb3JBY2Nlc3NEZW5pZWQsXG4gIEVycm9yTm90Rm91bmQsXG4gIEVycm9yQmFzaWMsXG4gIEVycm9yTm90RXhpc3QsXG4gIEVycm9yTGltaXRcbn0gZnJvbSBcIi4uL2Vycm9yLmpzXCI7XG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tIFwiYnNvblwiO1xuXG5leHBvcnQgdHlwZSBOZXdNYWlsID0ge1xuICBib2R5OiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXTtcbiAgcmVjaXBpZW50c0lkczogc3RyaW5nW107XG4gIHJlcGx5VG8/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IFByb2dyZXNzKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5jb25zdCBlbmNyeXB0TmFtZSA9IGFzeW5jIChuYW1lOiBzdHJpbmcsIG5hbWVLZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZW5jcnlwdFNlY3JldHN0cmVhbShcbiAgICBzb2RpdW0uZnJvbV9oZXgobmFtZUtleSksXG4gICAgc29kaXVtLmZyb21fc3RyaW5nKG5hbWUpXG4gICk7XG4gIGNvbnN0IG5hbWVFbmNyeXB0ZWQgPSBzb2RpdW0udG9faGV4KGRhdGEpO1xuICByZXR1cm4gbmFtZUVuY3J5cHRlZDtcbn07XG5cbmV4cG9ydCBjbGFzcyBTZWNyZWN5Q2xpZW50IGV4dGVuZHMgQmFzZUNsaWVudCB7XG4gIGp3dDogc3RyaW5nO1xuXG4gIGp3dERlY29kZWQ6IEp3dFBheWxvYWQ7XG5cbiAgI2tleXM6IEtleVBhaXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdWFTZXNzaW9uOiBzdHJpbmcsXG4gICAgdWFLZXlzOiBLZXlQYWlyLFxuICAgIHVhSnd0OiBzdHJpbmcsXG4gICAgZW52OiBTZWNyZWN5RW52XG4gICkge1xuICAgIHN1cGVyKHVhU2Vzc2lvbiwgZW52KTtcbiAgICB0aGlzLmp3dCA9IHVhSnd0O1xuICAgIHRoaXMuand0RGVjb2RlZCA9IGRlY29kZSh1YUp3dCkgYXMgSnd0UGF5bG9hZDtcbiAgICB0aGlzLiNrZXlzID0gdWFLZXlzO1xuICB9XG5cbiAgZ2V0IHB1YmxpY0tleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNrZXlzLnB1YmxpY0tleTtcbiAgfVxuXG4gIGdldCBhcHBVc2VySWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5qd3REZWNvZGVkLnN1YiA/PyBcIlwiO1xuICB9XG5cbiAgYXN5bmMgYWRkRmlsZVRvSGlzdG9yeSh7XG4gICAgZmlsZUlkLFxuICAgIG5vZGVJZFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBhZGRGaWxlVG9IaXN0b3J5IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBBZGRGaWxlVG9IaXN0b3J5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IG5vZGVTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFhZGRGaWxlVG9IaXN0b3J5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYWRkRmlsZVRvSGlzdG9yeS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBhZGRGaWxlVG9IaXN0b3J5O1xuICAgIH1cblxuICAgIGlmIChhZGRGaWxlVG9IaXN0b3J5Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gYWRkRmlsZVRvSGlzdG9yeTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gYXdhaXQgZ3FsTm9kZVRvSW50ZXJuYWwoXG4gICAgICBhZGRGaWxlVG9IaXN0b3J5LmFkZEZpbGVUb0hpc3RvcnksXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcbiAgICBjb25zdCBmaWxlID0gbm9kZS5oaXN0b3J5LmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCB1c2VycyA9IG5vZGUudXNlcnMuZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnB1dDogU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQgPSB7XG4gICAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgICAgdXNlcnM6IHVzZXJzLm1hcCgoW3VdKSA9PiAoe1xuICAgICAgICAgIGlkOiB1LmlkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlLmtleSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pKVxuICAgICAgfTtcblxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIHNoYXJlRmlsZUluSGlzdG9yeTogW1xuICAgICAgICAgIHsgaW5wdXQsIG5vZGVJZCB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gU2hhcmVGaWxlSW5IaXN0b3J5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBzaGFyZUZpbGVJbkhpc3Rvcnk6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBpbnRlcm5hbE5vZGVUb05vZGUobm9kZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZSh7XG4gICAgZmlsZSxcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlOiBnbG9iYWxUaGlzLkZpbGUgfCBVaW50OEFycmF5O1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxzdHJpbmc+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCBmaWxlS2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZmlsZUJ1ZmZlciA9XG4gICAgICBmaWxlIGluc3RhbmNlb2YgRmlsZSA/IG5ldyBVaW50OEFycmF5KGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKSkgOiBmaWxlO1xuICAgIGNvbnN0IGNvbXByZXNzZWQgPSBjb21wcmVzcyhmaWxlQnVmZmVyKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGRhdGE6IGVuY3J5cHRlZEZpbGUsXG4gICAgICBtZDU6IG1kNUZpbGUsXG4gICAgICBtZDVFbmNyeXB0ZWRcbiAgICB9ID0gYXdhaXQgZW5jcnlwdChmaWxlS2V5LCBjb21wcmVzc2VkLCBlbmNyeXB0UHJvZ3Jlc3MsIHNpZ25hbCk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRGaWxlS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGZpbGVLZXksXG4gICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG5cbiAgICBjb25zdCB7IHVwbG9hZEZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBKc29uOiB7XG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5zdHJpbmdpZnkoZSksXG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5wYXJzZShlIGFzIHN0cmluZylcbiAgICAgICAgfSxcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9LFxuICAgICAgICBCaWdJbnQ6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBCaWdJbnQoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIGJpZ2ludCkudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXBsb2FkRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZVNpemU6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlU2l6ZUJlZm9yZTogZmlsZUJ1ZmZlci5ieXRlTGVuZ3RoLFxuICAgICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoZW5jcnlwdGVkRmlsZUtleSksXG4gICAgICAgICAgbWQ1RW5jcnlwdGVkLFxuICAgICAgICAgIG1kNTogbWQ1RmlsZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckxpbWl0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXBsb2FkRmlsZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1cGxvYWRGaWxlOiB7XG4gICAgICAgICAgICAgIGZpbGVJZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZVBhcnRTaXplOiB0cnVlLFxuICAgICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICAgIGZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1cmw6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGxvYWRGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBsb2FkRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1cGxvYWRGaWxlO1xuICAgIH1cblxuICAgIGlmICh1cGxvYWRGaWxlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gdXBsb2FkRmlsZTtcbiAgICB9XG5cbiAgICBpZiAodXBsb2FkRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVwbG9hZEZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCF1cGxvYWRGaWxlLnVwbG9hZEZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgIGN1cnJlbnQ6IDAsXG4gICAgICBwZXJjZW50OiAwXG4gICAgfSk7XG5cbiAgICBpZiAodXBsb2FkRmlsZS51cGxvYWRGaWxlLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdXBsb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHRvdGFsOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIGN1cnJlbnQ6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgcGVyY2VudDogMVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IHVwbG9hZEZpbGUudXBsb2FkRmlsZS5maWxlSWRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkUGFydEVuZGVkID0gYXN5bmMgKFxuICAgICAgbWQ1OiBzdHJpbmcsXG4gICAgICBvcmRlcjogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+ID0+IHtcbiAgICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlUGFydEVuZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIHVwbG9hZEZpbGVQYXJ0RW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkLFxuICAgICAgICAgICAgbWQ1LFxuICAgICAgICAgICAgb3JkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBVcGxvYWRGaWxlUGFydEVuZFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBsb2FkRmlsZVBhcnRFbmQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXVwbG9hZEZpbGVQYXJ0RW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodXBsb2FkRmlsZVBhcnRFbmQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICAgIHJldHVybiB1cGxvYWRGaWxlUGFydEVuZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogdXBsb2FkRmlsZVBhcnRFbmQudXBsb2FkRmlsZVBhcnRFbmRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHVwbG9hZEVuZGVkID0gYXN5bmMgKCk6IFByb21pc2U8XG4gICAgICBTdWNjZXNzUmVzcG9uc2U8c3RyaW5nPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgICA+ID0+IHtcbiAgICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlRW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgdXBsb2FkRmlsZUVuZDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpbGVJZDogdXBsb2FkRmlsZS51cGxvYWRGaWxlLmZpbGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBVcGxvYWRGaWxlRW5kUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICB1cGxvYWRGaWxlRW5kOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgaWYgKCF1cGxvYWRGaWxlRW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodXBsb2FkRmlsZUVuZC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGVFbmQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGxvYWRGaWxlRW5kLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICAgIHJldHVybiB1cGxvYWRGaWxlRW5kO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXVwbG9hZEZpbGVFbmQudXBsb2FkRmlsZUVuZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogdXBsb2FkRmlsZUVuZC51cGxvYWRGaWxlRW5kXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjaHVua1BhcnRzID0gbmV3IEFycmF5PHtcbiAgICAgIG9yZGVyOiBudW1iZXI7XG4gICAgICBkYXRhOiBVaW50OEFycmF5O1xuICAgICAgbWQ1OiBzdHJpbmc7XG4gICAgfT4oKTtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBjaHVua10gb2YgZW51bWVyYXRlKFxuICAgICAgY2h1bmtzKGVuY3J5cHRlZEZpbGUsIE51bWJlcih1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZVBhcnRTaXplKSlcbiAgICApKSB7XG4gICAgICBjaHVua1BhcnRzLnB1c2goe1xuICAgICAgICBvcmRlcjogaW5kZXggKyAxLFxuICAgICAgICBkYXRhOiBjaHVuayxcbiAgICAgICAgbWQ1OiBhd2FpdCBtZDUoY2h1bmspXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmVzc1BhcnRzOiBSZWNvcmQ8bnVtYmVyLCBQcm9ncmVzc0V2ZW50PiA9IHt9O1xuICAgIGNvbnN0IG9uUHJvZ3Jlc3MgPSAocGFydDogbnVtYmVyLCBwcm9ncmVzc0V2ZW50OiBQcm9ncmVzc0V2ZW50KTogdm9pZCA9PiB7XG4gICAgICBwcm9ncmVzc1BhcnRzW3BhcnRdID0gcHJvZ3Jlc3NFdmVudDtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBPYmplY3QudmFsdWVzKHByb2dyZXNzUGFydHMpLnJlZHVjZShcbiAgICAgICAgKHBydiwgY3VyKSA9PiBwcnYgKyBjdXIubG9hZGVkLFxuICAgICAgICAwXG4gICAgICApO1xuICAgICAgdXBsb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQ6IGN1cnJlbnQgLyBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHRvdGFsOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIGN1cnJlbnRcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBieVBhcnQgPSBhc3luYyAocGFydDogRmlsZVBhcnRSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgaWYgKCF1cGxvYWRGaWxlLnVwbG9hZEZpbGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtQYXJ0cy5maW5kKHAgPT4gcC5vcmRlciA9PT0gcGFydC5vcmRlcik7XG4gICAgICBpZiAoIWNodW5rKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnQuZmllbGRzKSkge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgIFwiZmlsZVwiLFxuICAgICAgICBuZXcgQmxvYihbY2h1bmsuZGF0YV0pLFxuICAgICAgICBgJHt1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkfS0ke2NodW5rLm9yZGVyfWBcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGF4aW9zLnBvc3QocGFydC51cmwsIGZvcm1EYXRhLCB7XG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IHByb2dyZXNzRXZlbnQgPT5cbiAgICAgICAgICBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByb2dyZXNzRXZlbnQpLFxuICAgICAgICBzaWduYWxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB1cGxvYWRQYXJ0RW5kZWQoY2h1bmsubWQ1LCBjaHVuay5vcmRlcik7XG4gICAgICAvLyBpZiAoKGUgYXMgYW55KS5yZXNwb25zZS5zdGF0dXMgPT09IDApIHtcbiAgICAgIC8vICAgLy8gVE9ETyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2t5L2lzc3Vlcy8zMDVcbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIHRocm93IGU7XG4gICAgICAvLyB9XG4gICAgfTtcblxuICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhd2FpdCBwcm9taXNlQWxsTGltaXQoXG4gICAgICAzLFxuICAgICAgdXBsb2FkRmlsZS51cGxvYWRGaWxlLnBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXBsb2FkRW5kZWQoKTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0LmRhdGFcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZUluQ2xvdWQoe1xuICAgIGZpbGUsXG4gICAgbmFtZSxcbiAgICBub2RlSWQsXG4gICAgZW5jcnlwdFByb2dyZXNzLFxuICAgIHVwbG9hZFByb2dyZXNzLFxuICAgIHNpZ25hbFxuICB9OiB7XG4gICAgZmlsZTogZ2xvYmFsVGhpcy5GaWxlIHwgVWludDhBcnJheTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbm9kZUlkPzogc3RyaW5nO1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvckxpbWl0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvckJhc2ljXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IGZpbGVJZCA9IGF3YWl0IHRoaXMudXBsb2FkRmlsZSh7XG4gICAgICBmaWxlLFxuICAgICAgZW5jcnlwdFByb2dyZXNzLFxuICAgICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgICBzaWduYWxcbiAgICB9KTtcblxuICAgIGlmICghZmlsZUlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGZpbGVJZDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gZmlsZUlkO1xuICAgIH1cblxuICAgIGlmIChmaWxlSWQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBmaWxlSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zYXZlSW5DbG91ZCh7XG4gICAgICBmaWxlSWQ6IGZpbGVJZC5kYXRhLFxuICAgICAgbmFtZSxcbiAgICAgIG5vZGVJZFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHQuZGF0YVxuICAgIH07XG4gIH1cblxuICBhc3luYyBsb2dvdXQoc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIG5vZGVzQ2FjaGUuY2xlYXIoKTtcbiAgICBmaWxlc0NhY2hlLmNsZWFyKCk7XG4gICAgYXdhaXQgc3VwZXIubG9nb3V0KHNlc3Npb25JZCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGb2xkZXIoe1xuICAgIG5hbWUsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IGtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBzb2RpdW0udG9faGV4KGtleSkpO1xuICAgIGNvbnN0IGVuY3J5cHRlZEtleSA9IGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICBrZXksXG4gICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG4gICAgY29uc3QgeyBjcmVhdGVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgY3JlYXRlRm9sZGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBlbmNyeXB0ZWROYW1lLFxuICAgICAgICAgIHBhcmVudEZvbGRlcklkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChlbmNyeXB0ZWRLZXkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gQ3JlYXRlRm9sZGVyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0ZUZvbGRlcjogbm9kZUZ1bGxTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghY3JlYXRlRm9sZGVyKSB7XG4gICAgICAvL3Rocm93IG5ldyBFcnJvcihgQ2FuJ3QgY3JlYXRlIGZvbGRlcmApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGNyZWF0ZUZvbGRlci5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGb2xkZXI7XG4gICAgfVxuXG4gICAgaWYgKGNyZWF0ZUZvbGRlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGNyZWF0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWNyZWF0ZUZvbGRlci5jcmVhdGVGb2xkZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbGRlciA9IGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwoXG4gICAgICBjcmVhdGVGb2xkZXIuY3JlYXRlRm9sZGVyLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICk7XG5cbiAgICBjb25zdCB1c2VycyA9XG4gICAgICBmb2xkZXIucGFyZW50Py51c2Vycz8uZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICkgPz8gW107XG5cbiAgICBpZiAodXNlcnMubGVuZ3RoKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdXNlcnMubWFwKChbdSwgcmlnaHRzXSkgPT5cbiAgICAgICAgICB0aGlzLnNoYXJlTm9kZSh7XG4gICAgICAgICAgICBub2RlSWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBmb2xkZXJcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbm9kZSh7XG4gICAgaWQsXG4gICAgZGVsZXRlZFxuICB9OiB7XG4gICAgaWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWQ/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSA9IHt9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Tm9kZUZ1bGw+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBub2RlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIG5vZGU6IFtcbiAgICAgICAgeyBkZWxldGVkLCBpZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG5vZGU6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChub2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGlmICghbm9kZS5ub2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKG5vZGUubm9kZSwgdGhpcy4ja2V5cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmlsZSh7XG4gICAgaWRcbiAgfToge1xuICAgIGlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxTZWNyZWN5RmlsZT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmlsZVF1ZXJ5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGU6IGZpbGVTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbGUuZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gZ3FsRmlsZVRvRXh0ZXJuYWwoZmlsZS5maWxlLCB0aGlzLiNrZXlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIG1haWwoe1xuICAgIGlkXG4gIH06IHtcbiAgICBpZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8TWFpbD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IG1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBtYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBRdWVyeU1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWFpbDogbWFpbFNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG1haWw7XG4gICAgfVxuXG4gICAgaWYgKCFtYWlsLm1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG1haWwubWFpbCwgdGhpcy4ja2V5cyk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZE5vZGVzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPE5vZGVbXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkZWxldGVkTm9kZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGVsZXRlZE5vZGVzOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIERlbGV0ZWROb2Rlc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGRlbGV0ZWROb2Rlczogbm9kZVNlbGVjdG9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlZE5vZGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlZE5vZGVzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZWROb2RlcztcbiAgICB9XG5cbiAgICBjb25zdCBub2RlcyA9IG5ldyBBcnJheTxOb2RlPigpO1xuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIGRlbGV0ZWROb2Rlcy5kZWxldGVkTm9kZXMpIHtcbiAgICAgIG5vZGVzLnB1c2goYXdhaXQgZ3FsTm9kZVRvRXh0ZXJuYWwobm9kZSwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2hhcmVkTm9kZXMoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Tm9kZVtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHNoYXJlZE5vZGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHNoYXJlZE5vZGVzOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFNoYXJlZE5vZGVzUmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgc2hhcmVkTm9kZXM6IG5vZGVTZWxlY3RvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXNoYXJlZE5vZGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2hhcmVkTm9kZXMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVkTm9kZXM7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBuZXcgQXJyYXk8Tm9kZT4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIHNoYXJlZE5vZGVzLnNoYXJlZE5vZGVzKSB7XG4gICAgICBub2Rlcy5wdXNoKGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbm9kZXNTaGFyZWRXaXRoTWUoXG4gICAgdHlwZT86IE5vZGVUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxOb2RlW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBub2Rlc1NoYXJlZFdpdGhNZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBub2Rlc1NoYXJlZFdpdGhNZTogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBOb2Rlc1NoYXJlZFdpdGhNZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBub2Rlc1NoYXJlZFdpdGhNZTogbm9kZVNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW5vZGVzU2hhcmVkV2l0aE1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobm9kZXNTaGFyZWRXaXRoTWUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbm9kZXNTaGFyZWRXaXRoTWU7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBuZXcgQXJyYXk8Tm9kZT4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIG5vZGVzU2hhcmVkV2l0aE1lLm5vZGVzU2hhcmVkV2l0aE1lKSB7XG4gICAgICBub2Rlcy5wdXNoKGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTm9kZVNoYXJpbmcoe1xuICAgIG5vZGVJZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZU5vZGVTaGFyaW5nIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU5vZGVTaGFyaW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZU5vZGVTaGFyaW5nUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU5vZGVTaGFyaW5nOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZU5vZGVTaGFyaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlTm9kZVNoYXJpbmcuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlTm9kZVNoYXJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVOb2RlU2hhcmluZy5kZWxldGVOb2RlU2hhcmluZ1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVOb2RlKHtcbiAgICBub2RlSWQsXG4gICAgZm9sZGVySWQsXG4gICAgY3VzdG9tTmFtZVxuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGN1c3RvbU5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgKCR7bm9kZUlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbm9kZS5hY2Nlc3M/Lm5hbWVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgaGF2ZSBhY2Nlc3MgdG8gbm9kZSAke25vZGVJZH1gKTtcbiAgICB9XG4gICAgY3VzdG9tTmFtZSA9IGN1c3RvbU5hbWVcbiAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUoY3VzdG9tTmFtZSwgbm9kZS5hY2Nlc3MubmFtZUtleSlcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgZHVwbGljYXRlTm9kZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkdXBsaWNhdGVOb2RlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgY3VzdG9tTmFtZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIER1cGxpY2F0ZU5vZGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZHVwbGljYXRlTm9kZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkdXBsaWNhdGVOb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZHVwbGljYXRlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkdXBsaWNhdGVOb2RlO1xuICAgIH1cblxuICAgIGlmIChkdXBsaWNhdGVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZHVwbGljYXRlTm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGR1cGxpY2F0ZU5vZGUuZHVwbGljYXRlTm9kZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGVOb2RlQ2xvdWRUcmFzaCh7XG4gICAgaWRzXG4gIH06IHtcbiAgICBpZHM6IEFycmF5PHN0cmluZz47XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTm9kZUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlTm9kZUNsb3VkVHJhc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVOb2RlQ2xvdWRUcmFzaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVOb2RlQ2xvdWRUcmFzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVOb2RlQ2xvdWRUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZU5vZGVDbG91ZFRyYXNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZU5vZGVDbG91ZFRyYXNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlTm9kZUNsb3VkVHJhc2guZGVsZXRlTm9kZUNsb3VkVHJhc2ggPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2hhcmVOb2RlKHtcbiAgICBub2RlSWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgcmlnaHRzOiBSaWdodHM7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlcih7IHVzZXJJZCwgd2l0aFB1YmxpY0tleTogdHJ1ZSB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhcmVOb2RlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNoYXJlTm9kZTogW1xuICAgICAgICB7IG5vZGVJZCwgdXNlcklkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2hhcmVOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG5vZGVzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXNoYXJlTm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNoYXJlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBzaGFyZU5vZGU7XG4gICAgfVxuXG4gICAgaWYgKHNoYXJlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHNoYXJlTm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBzaGFyZU5vZGVzOiBTaGFyZU5vZGVzSW5wdXQgPSB7XG4gICAgICBub2RlczogW11cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBpZCBvZiBzaGFyZU5vZGUubm9kZXMpIHtcbiAgICAgIGNvbnN0IG5hbWVLZXkgPSBhd2FpdCB0aGlzLnBlck5vZGUoaWQsIHVzZXIuZGF0YS5wdWJsaWNLZXkpO1xuICAgICAgaWYgKG5hbWVLZXkpIHtcbiAgICAgICAgc2hhcmVOb2Rlcy5ub2Rlcy5wdXNoKG5hbWVLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhcmVOb2RlRmluaXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNoYXJlTm9kZUZpbmlzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBzaGFyZU5vZGVzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2hhcmVOb2RlRmluaXNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNoYXJlTm9kZUZpbmlzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzaGFyZU5vZGVGaW5pc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGVGaW5pc2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVOb2RlRmluaXNoO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGVGaW5pc2guX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBzaGFyZU5vZGVGaW5pc2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBzaGFyZU5vZGVGaW5pc2guc2hhcmVOb2RlRmluaXNoID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZU5vZGUoe1xuICAgIG5vZGVJZCxcbiAgICBuYW1lLFxuICAgIGlzRmF2b3JpdGUsXG4gICAgZGVsZXRlZEF0XG4gIH06IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBpc0Zhdm9yaXRlPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBOb2RlICR7bm9kZUlkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFub2RlLmFjY2Vzcz8ubmFtZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBoYXZlIGFjY2VzcyB0byBub2RlICR7bm9kZUlkfWApO1xuICAgIH1cblxuICAgIG5hbWUgPSBuYW1lXG4gICAgICA/IG5vZGUuYWNjZXNzPy5uYW1lS2V5XG4gICAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgbm9kZS5hY2Nlc3MubmFtZUtleSlcbiAgICAgICAgOiBuYW1lXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB7IHVwZGF0ZU5vZGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgdXBkYXRlTm9kZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaXNGYXZvcml0ZSxcbiAgICAgICAgICBkZWxldGVkQXRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZU5vZGU6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlTm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlTm9kZTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZU5vZGU7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVOb2RlLnVwZGF0ZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwoXG4gICAgICB1cGRhdGVOb2RlLnVwZGF0ZU5vZGUsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWRNYWlscyh7XG4gICAgbWFpbFR5cGVcbiAgfToge1xuICAgIG1haWxUeXBlOiBNYWlsVHlwZTtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPE1haWxbXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZWRNYWlscyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGRlbGV0ZWRNYWlsczogW1xuICAgICAgICB7IG1haWxUeXBlIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZWRNYWlsc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVkTWFpbHM6IG1haWxTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVkTWFpbHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVkTWFpbHMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlZE1haWxzO1xuICAgIH1cblxuICAgIGNvbnN0IG1haWxzID0gbmV3IEFycmF5PE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgZGVsZXRlZE1haWxzLmRlbGV0ZWRNYWlscykge1xuICAgICAgY29uc3QgbWFpbCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpO1xuICAgICAgaWYgKG1haWwpIHtcbiAgICAgICAgbWFpbHMucHVzaChtYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG1haWxzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMoXG4gICAgbm90aWZpY2F0aW9uczogUGFydGlhbDxVc2VyQXBwTm90aWZpY2F0aW9ucz5cbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlckFwcE5vdGlmaWNhdGlvbnM+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBOb3RpZmljYXRpb25zIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXBkYXRlQXBwTm90aWZpY2F0aW9uczogW1xuICAgICAgICBub3RpZmljYXRpb25zLFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVBcHBOb3RpZmljYXRpb25zUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgICAgICAgZW5hYmxlQWxsOiB0cnVlLFxuICAgICAgICAgICAgICBtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBjbG91ZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZGlzYWJsZUFsbFVudGlsOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVBcHBOb3RpZmljYXRpb25zLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVBcHBOb3RpZmljYXRpb25zLnVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdXBkYXRlQXBwTm90aWZpY2F0aW9ucy51cGRhdGVBcHBOb3RpZmljYXRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFwcE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxVc2VyQXBwTm90aWZpY2F0aW9ucz5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgYXBwTm90aWZpY2F0aW9ucyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGFwcE5vdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gVXNlckFwcE5vdGlmaWNhdGlvbnNcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgZW5hYmxlQWxsOiB0cnVlLFxuICAgICAgICAgIG1haWw6IHRydWUsXG4gICAgICAgICAgY2xvdWQ6IHRydWUsXG4gICAgICAgICAgZGlzYWJsZUFsbFVudGlsOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghYXBwTm90aWZpY2F0aW9ucykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFwcE5vdGlmaWNhdGlvbnMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gYXBwTm90aWZpY2F0aW9ucztcbiAgICB9XG5cbiAgICBpZiAoYXBwTm90aWZpY2F0aW9ucy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGFwcE5vdGlmaWNhdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBhcHBOb3RpZmljYXRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU1haWwoXG4gICAgZGF0YTogTmV3TWFpbCxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQmFzaWMgfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCBtYWlsID0gYXdhaXQgdGhpcy5jcmVhdGVEcmFmdE1haWwoZGF0YSk7XG4gICAgaWYgKCFtYWlsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIG1haWw7XG4gICAgfVxuXG4gICAgaWYgKG1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbWFpbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNlbmREcmFmdE1haWwoXG4gICAgICBtYWlsLmRhdGEubWFpbEludGVncml0eUlkLFxuICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRpbmdSZWNlaXZlZE1haWxzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFdhaXRpbmdSZWNlaXZlZE1haWxbXT4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgd2FpdGluZ1JlY2VpdmVkTWFpbHM6IHtcbiAgICAgICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB7XG4gICAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50czoge1xuICAgICAgICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICghdXNlci51c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB1c2VyLnVzZXIud2FpdGluZ1JlY2VpdmVkTWFpbHMubWFwKG0gPT4gKHtcbiAgICAgIGlkOiBnZW5lcmF0ZSgpLFxuICAgICAgLi4ubSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKG0uZGF0ZSBhcyBzdHJpbmcpXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRHJhZnRNYWlsKFxuICAgIGRyYWZ0SWQ6IHN0cmluZyxcbiAgICB7IGJvZHksIHN1YmplY3QsIGZpbGVzLCByZWNpcGllbnRzSWRzLCByZXBseVRvIH06IFBhcnRpYWw8TmV3TWFpbD5cbiAgKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxEcmFmdE1haWw+XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCBkcmFmdHMgPSBhd2FpdCB0aGlzLmRyYWZ0TWFpbHMoKTtcbiAgICBpZiAoIWRyYWZ0cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRyYWZ0cy5fX3R5cGVuYW1lICE9PSBcIlN1Y2Nlc3NSZXNwb25zZVwiKSB7XG4gICAgICByZXR1cm4gZHJhZnRzO1xuICAgIH1cbiAgICBjb25zdCBkcmFmdCA9IGRyYWZ0cy5kYXRhLmZpbmQoZCA9PiBkLm1haWxJbnRlZ3JpdHlJZCA9PT0gZHJhZnRJZCk7XG4gICAgaWYgKCFkcmFmdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRyYWZ0ICR7ZHJhZnRJZH1gKTtcbiAgICB9XG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoYXNoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoYm9keSB8fCBzdWJqZWN0KSB7XG4gICAgICBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9LRVlCWVRFUyxcbiAgICAgICAgXCJoZXhcIlxuICAgICAgKTtcbiAgICAgIGhhc2ggPSBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoKFxuICAgICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICAgIGhhc2hLZXksXG4gICAgICAgIFwiaGV4XCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgICAgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbmRlckZpbGVzLnB1c2goe1xuICAgICAgICAgIGlkOiBmaWxlLmlkLFxuICAgICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZmlsZS5rZXkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuYW1lOiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdXBkYXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVwZGF0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRJZCxcbiAgICAgICAgICByZWNpcGllbnRzOiByZWNpcGllbnRzSWRzLFxuICAgICAgICAgIHJlcGx5VG8sXG4gICAgICAgICAgYm9keTogYm9keVxuICAgICAgICAgICAgPyBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHN1YmplY3Q6IHN1YmplY3RcbiAgICAgICAgICAgID8gc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBzZW5kZXJGaWxlcyxcbiAgICAgICAgICBoYXNoLFxuICAgICAgICAgIGhhc2hLZXlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVEcmFmdE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBkYXRlRHJhZnRNYWlsOiBtYWlsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZURyYWZ0TWFpbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlRHJhZnRNYWlsO1xuICAgIH1cblxuICAgIGlmICghdXBkYXRlRHJhZnRNYWlsLnVwZGF0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICB1cGRhdGVEcmFmdE1haWwudXBkYXRlRHJhZnRNYWlsLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkgYXMgRHJhZnRNYWlsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRHJhZnRNYWlsKFxuICAgIGRyYWZ0SWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVEcmFmdE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlRHJhZnRNYWlsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZURyYWZ0TWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVEcmFmdE1haWw7XG4gICAgfVxuXG4gICAgaWYgKCFkZWxldGVEcmFmdE1haWwuZGVsZXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZURyYWZ0TWFpbC5kZWxldGVEcmFmdE1haWwgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWFpbFRyYXNoKHtcbiAgICBpZHNcbiAgfToge1xuICAgIGlkczogQXJyYXk8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVNYWlsVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlTWFpbFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlTWFpbFRyYXNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU1haWxUcmFzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVNYWlsVHJhc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVNYWlsVHJhc2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlTWFpbFRyYXNoO1xuICAgIH1cblxuICAgIGlmICghZGVsZXRlTWFpbFRyYXNoLmRlbGV0ZU1haWxUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVNYWlsVHJhc2guZGVsZXRlTWFpbFRyYXNoXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGVtcHR5TWFpbFRyYXNoKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZW1wdHlNYWlsVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZW1wdHlNYWlsVHJhc2g6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRW1wdHlNYWlsVHJhc2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBlbXB0eU1haWxUcmFzaDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWVtcHR5TWFpbFRyYXNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZW1wdHlNYWlsVHJhc2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZW1wdHlNYWlsVHJhc2g7XG4gICAgfVxuXG4gICAgaWYgKCFlbXB0eU1haWxUcmFzaC5lbXB0eU1haWxUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBlbXB0eU1haWxUcmFzaC5lbXB0eU1haWxUcmFzaFxuICAgIH07XG4gIH1cblxuICBhc3luYyBlbXB0eUNsb3VkVHJhc2goKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBlbXB0eUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZW1wdHlDbG91ZFRyYXNoOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVtcHR5Q2xvdWRUcmFzaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGVtcHR5Q2xvdWRUcmFzaDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWVtcHR5Q2xvdWRUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGVtcHR5Q2xvdWRUcmFzaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBlbXB0eUNsb3VkVHJhc2g7XG4gICAgfVxuXG4gICAgaWYgKCFlbXB0eUNsb3VkVHJhc2guZW1wdHlDbG91ZFRyYXNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGVtcHR5Q2xvdWRUcmFzaC5lbXB0eUNsb3VkVHJhc2hcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVjb3Zlck5vZGUoXG4gICAgaWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyByZWNvdmVyTm9kZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICByZWNvdmVyTm9kZTogW1xuICAgICAgICB7IGlkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gUmVjb3Zlck5vZGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgcmVjb3Zlck5vZGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghcmVjb3Zlck5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZWNvdmVyTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZWNvdmVyTm9kZTtcbiAgICB9XG5cbiAgICBpZiAocmVjb3Zlck5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiByZWNvdmVyTm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlY292ZXJOb2RlLnJlY292ZXJOb2RlID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJNYWlsKHtcbiAgICBtYWlsSWRcbiAgfToge1xuICAgIG1haWxJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgcmVjb3Zlck1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgcmVjb3Zlck1haWw6IFtcbiAgICAgICAgeyBtYWlsSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBSZWNvdmVyTWFpbFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICByZWNvdmVyTWFpbDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFyZWNvdmVyTWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJlY292ZXJNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHJlY292ZXJNYWlsO1xuICAgIH1cblxuICAgIGlmIChyZWNvdmVyTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHJlY292ZXJNYWlsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVjb3Zlck1haWwucmVjb3Zlck1haWxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZSh7XG4gICAgZmlsZUlkLFxuICAgIG5vZGVJZFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkZWxldGVGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZUZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVGaWxlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZUZpbGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlRmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZUZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlRmlsZTtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZUZpbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVGaWxlLmRlbGV0ZUZpbGVcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTm9kZSh7XG4gICAgbm9kZUlkXG4gIH06IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVOb2RlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU5vZGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVOb2RlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZU5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVOb2RlLmRlbGV0ZU5vZGVcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbW92ZU5vZGVzKHtcbiAgICBub2RlSWRzLFxuICAgIHBhcmVudE5vZGVJZFxuICB9OiB7XG4gICAgbm9kZUlkczogc3RyaW5nW107XG4gICAgcGFyZW50Tm9kZUlkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBtb3ZlTm9kZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgbW92ZU5vZGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWRzLFxuICAgICAgICAgIHBhcmVudE5vZGVJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBNb3ZlTm9kZXNSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbW92ZU5vZGVzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1vdmVOb2Rlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1vdmVOb2Rlcy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBtb3ZlTm9kZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBtb3ZlTm9kZXMubW92ZU5vZGVzID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZvbGRlclNpemUoe1xuICAgIGZvbGRlcklkXG4gIH06IHtcbiAgICBmb2xkZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxGb2xkZXJTaXplPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZm9sZGVyU2l6ZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEJpZ0ludDoge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEJpZ0ludChlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgYmlnaW50KS50b1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBmb2xkZXJTaXplOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmb2xkZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGb2xkZXJTaXplUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNpemU6IHRydWUsXG4gICAgICAgICAgICBzaXplQmVmb3JlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZvbGRlclNpemUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChmb2xkZXJTaXplLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGZvbGRlclNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHNpemU6IEJpZ0ludChmb2xkZXJTaXplLnNpemUpLFxuICAgICAgICBzaXplQmVmb3JlOiBCaWdJbnQoZm9sZGVyU2l6ZS5zaXplQmVmb3JlKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGVNYWlsKHtcbiAgICBtYWlsSWRcbiAgfToge1xuICAgIG1haWxJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZU1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlTWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgbWFpbElkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZU1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlTWFpbDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVNYWlsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlTWFpbC5kZWxldGVNYWlsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVJbkNsb3VkKHtcbiAgICBmaWxlSWQsXG4gICAgbmFtZSxcbiAgICBub2RlSWRcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBub2RlSWQ/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPE5vZGVGdWxsPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yQmFzaWNcbiAgICB8IEVycm9yTGltaXRcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IEVycm9yTm90RXhpc3RcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgaWYgKG5vZGVJZCAmJiAhbm9kZXNDYWNoZS5oYXMobm9kZUlkKSkge1xuICAgICAgYXdhaXQgdGhpcy5ub2RlKHsgaWQ6IG5vZGVJZCB9KTtcbiAgICAgIGlmICghbm9kZXNDYWNoZS5oYXMobm9kZUlkKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IFwiRXJyb3JCYXNpY1wiLFxuICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgbm9kZSAke25vZGVJZH0gZG9lcyBub3QgZXhpc3RzYFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBrZXkgPSBcIlwiO1xuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGZpbGVJZCk7XG5cbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmaWxlSWQgfSk7XG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZmlsZUlkKSA/PyBudWxsO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIGNvbnN0IHJlY2VpdmVkTWFpbHMgPSBhd2FpdCB0aGlzLnJlY2VpdmVkTWFpbHMoKTtcbiAgICAgICAgaWYgKCFyZWNlaXZlZE1haWxzKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY2VpdmVkTWFpbHMuX190eXBlbmFtZSAhPT0gXCJTdWNjZXNzUmVzcG9uc2VcIikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1haWwgPSByZWNlaXZlZE1haWxzLmRhdGEuZmluZChtID0+XG4gICAgICAgICAgbS5maWxlcy5zb21lKGYgPT4gZi5pZCA9PT0gZmlsZUlkKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghbWFpbCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiBcIkVycm9yQmFzaWNcIixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBDYW4ndCBmaW5kIG1haWwgd2l0aCB0aGUgZmlsZSAke2ZpbGVJZH1gXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVNYWlsID0gbWFpbC5maWxlcy5maW5kKGYgPT4gZi5pZCA9PT0gZmlsZUlkKTtcblxuICAgICAgICBpZiAoIWZpbGVNYWlsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IFwiRXJyb3JCYXNpY1wiLFxuICAgICAgICAgICAgbWVzc2FnZTogYENhbid0IGZpbmQgbWFpbCB3aXRoIHRoZSBmaWxlICR7ZmlsZUlkfWBcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUtleSA9IGRlY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21faGV4KGZpbGVNYWlsLmtleSksXG4gICAgICAgICAgbWFpbC5zZW5kZXIucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApO1xuXG4gICAgICAgIGtleSA9IHNvZGl1bS50b19oZXgoZmlsZUtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXkgPSBmaWxlLmtleTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gZmlsZS5rZXk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJFcnJvckJhc2ljXCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiVW5leHBlY3RlZCBlcnJvciAzXCJcbiAgICAgIH07XG4gICAgfVxuXG4gICAga2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleChrZXkpLFxuICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IG5hbWVLZXkgPSBzZWNyZXRzdHJlYW1LZXlnZW4oKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lID0gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgc29kaXVtLnRvX2hleChuYW1lS2V5KSk7XG4gICAgY29uc3QgZW5jcnlwdGVkTmFtZUtleSA9IHNvZGl1bS50b19oZXgoXG4gICAgICBlbmNyeXB0Q3J5cHRvQm94KG5hbWVLZXksIHRoaXMuI2tleXMucHVibGljS2V5LCB0aGlzLiNrZXlzLnByaXZhdGVLZXkpXG4gICAgKTtcblxuICAgIGNvbnN0IHsgc2F2ZUluQ2xvdWQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgc2F2ZUluQ2xvdWQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgIGZpbGVuYW1lOiBlbmNyeXB0ZWROYW1lLFxuICAgICAgICAgIG5hbWVLZXk6IGVuY3J5cHRlZE5hbWVLZXlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckxpbWl0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBTYXZlSW5DbG91ZFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBzYXZlSW5DbG91ZDogbm9kZUZ1bGxTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzYXZlSW5DbG91ZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNhdmVJbkNsb3VkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cblxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cbiAgICBpZiAoc2F2ZUluQ2xvdWQuX190eXBlbmFtZSA9PT0gXCJFcnJvckxpbWl0XCIpIHtcbiAgICAgIHJldHVybiBzYXZlSW5DbG91ZDtcbiAgICB9XG5cbiAgICBpZiAoc2F2ZUluQ2xvdWQuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBzYXZlSW5DbG91ZDtcbiAgICB9XG5cbiAgICBpZiAoc2F2ZUluQ2xvdWQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBzYXZlSW5DbG91ZDtcbiAgICB9XG5cbiAgICBpZiAoIXNhdmVJbkNsb3VkLnNhdmVJbkNsb3VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gYXdhaXQgZ3FsTm9kZVRvRXh0ZXJuYWxOb2RlRnVsbChcbiAgICAgIHNhdmVJbkNsb3VkLnNhdmVJbkNsb3VkLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICk7XG5cbiAgICBjb25zdCBtZSA9IG5vZGUucGFyZW50Py51c2Vycy5maW5kKFxuICAgICAgKFt1XSkgPT4gdS5wdWJsaWNLZXkgPT09IHRoaXMuI2tleXMucHVibGljS2V5XG4gICAgKTtcblxuICAgIGlmIChtZSAmJiBbXCJhZG1pblwiLCBcIndyaXRlXCJdLmluY2x1ZGVzKG1lWzFdKSkge1xuICAgICAgY29uc3Qgb3RoZXJzID1cbiAgICAgICAgbm9kZS5wYXJlbnQ/LnVzZXJzLmZpbHRlcihcbiAgICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICAgKSA/PyBbXTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG90aGVycy5tYXAoKFt1LCByaWdodHNdKSA9PlxuICAgICAgICAgIHRoaXMuc2hhcmVOb2RlKHtcbiAgICAgICAgICAgIG5vZGVJZDogbm9kZS5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBub2RlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRiR2V0PFU+KHtcbiAgICBmaWVsZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8VT5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJHZXQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGJHZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHVzZXJJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJHZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkdldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogKGRiR2V0Lmpzb24gYXMgeyByZXM6IFUgfSkucmVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRiU2V0PFQgZXh0ZW5kcyBVc2VyRGF0YSwgVSBleHRlbmRzIERvY3VtZW50Pih7XG4gICAgdmFsdWUsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICB2YWx1ZTogVTtcbiAgICB1c2VySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsPiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgdmFsdWUgc2hvdWxkIGJlIGFuIG9iamVjdCBpbmNsdWRpbmcgZmllbGRzIHlvdSB3YW50IHRvIHVwZGF0ZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGJTZXQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGJTZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICB2YWx1ZTogc2VyaWFsaXplKHZhbHVlKS50b1N0cmluZyhcImJhc2U2NFwiKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiU2V0UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRiU2V0OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiU2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJTZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiU2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZGJTZXQ7XG4gICAgfVxuXG4gICAgaWYgKCFkYlNldC5kYlNldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiAoZGJTZXQuZGJTZXQgYXMgeyByZXM6IFQgfSkucmVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRiU2VhcmNoPFQ+KHtcbiAgICBzZWFyY2gsXG4gICAgZmllbGRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxUW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkYlNlYXJjaCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEpzb246IHtcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiBKU09OLnN0cmluZ2lmeShlKSxcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBKU09OLnBhcnNlKGUgYXMgc3RyaW5nKVxuICAgICAgICB9LFxuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH0sXG4gICAgICAgIEJpZ0ludDoge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEJpZ0ludChlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgYmlnaW50KS50b1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBkYlNlYXJjaDogW1xuICAgICAgICB7XG4gICAgICAgICAgc2VhcmNoLFxuICAgICAgICAgIGZpZWxkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYlNlYXJjaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBqc29uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiU2VhcmNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZWFyY2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGJTZWFyY2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkYlNlYXJjaC5qc29uIGFzIHVua25vd24gYXMgVFtdXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNlbmREcmFmdE1haWwoXG4gICAgZHJhZnRJZDogc3RyaW5nLFxuICAgIGN1c3RvbU1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4gICk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgbnVsbD4ge1xuICAgIGNvbnN0IGRyYWZ0cyA9IGF3YWl0IHRoaXMuZHJhZnRNYWlscygpO1xuXG4gICAgaWYgKCFkcmFmdHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZHJhZnRzLl9fdHlwZW5hbWUgIT09IFwiU3VjY2Vzc1Jlc3BvbnNlXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGRyYWZ0ID0gZHJhZnRzLmRhdGEuZmluZChkID0+IGQubWFpbEludGVncml0eUlkID09PSBkcmFmdElkKTtcbiAgICBpZiAoIWRyYWZ0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IG5ldyBBcnJheTxNYWlsUmVjaXBpZW50SW5wdXQ+KCk7XG5cbiAgICBjb25zdCB0ZW1wb3JhcnlSZWNpcGllbnRzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGZvciAoY29uc3QgeyBlbWFpbCB9IG9mIGRyYWZ0LnRlbXBvcmFyeVJlY2lwaWVudHMpIHtcbiAgICAgIGlmICghZW1haWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICBkcmFmdC5maWxlcyxcbiAgICAgICAgZHJhZnQuc3ViamVjdCxcbiAgICAgICAgZHJhZnQuYm9keSxcbiAgICAgICAgZW1haWxcbiAgICAgICk7XG5cbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cy5wdXNoKGVtYWlsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY2lwaWVudHMucHVzaChpbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7IGlkIH0gb2YgZHJhZnQucmVjaXBpZW50cykge1xuICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgZHJhZnQuZmlsZXMsXG4gICAgICAgIGRyYWZ0LnN1YmplY3QsXG4gICAgICAgIGRyYWZ0LmJvZHksXG4gICAgICAgIGlkXG4gICAgICApO1xuXG4gICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMucHVzaChpZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNpcGllbnRzLnB1c2goaW5wdXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2VuZERyYWZ0TWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzZW5kRHJhZnRNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZW1wb3JhcnlSZWNpcGllbnRzLFxuICAgICAgICAgIHJlY2lwaWVudHMsXG4gICAgICAgICAgZHJhZnRNYWlsSWQ6IGRyYWZ0Lm1haWxJbnRlZ3JpdHlJZCxcbiAgICAgICAgICBjdXN0b21NZXNzYWdlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2VuZERyYWZ0TWFpbFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBzZW5kRHJhZnRNYWlsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXNlbmREcmFmdE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzZW5kRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHNlbmREcmFmdE1haWw7XG4gICAgfVxuXG4gICAgaWYgKHNlbmREcmFmdE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBzZW5kRHJhZnRNYWlsO1xuICAgIH1cblxuICAgIGlmICghc2VuZERyYWZ0TWFpbC5zZW5kRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHNlbmREcmFmdE1haWwuc2VuZERyYWZ0TWFpbFxuICAgIH07XG4gIH1cblxuICBhc3luYyBzZW5kV2FpdGluZ0VtYWlscygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGxcbiAgPiB7XG4gICAgLy8gVE9ETyBvcHRpIHRoaXNcbiAgICBjb25zdCBtYWlscyA9IGF3YWl0IHRoaXMuc2VudE1haWxzKCk7XG5cbiAgICBpZiAoIW1haWxzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG1haWxzLl9fdHlwZW5hbWUgIT09IFwiU3VjY2Vzc1Jlc3BvbnNlXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJlZCA9IG1haWxzLmRhdGEuZmlsdGVyKG0gPT4gbS50ZW1wb3JhcnlSZWNpcGllbnRzLmxlbmd0aCA+IDApO1xuXG4gICAgZm9yIChjb25zdCBtYWlsIG9mIGZpbHRlcmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgZW1haWwgfSBvZiBtYWlsLnRlbXBvcmFyeVJlY2lwaWVudHMpIHtcbiAgICAgICAgaWYgKCFlbWFpbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLl9lYWNoVXNlcihcbiAgICAgICAgICAgIG1haWwuZmlsZXMsXG4gICAgICAgICAgICBtYWlsLnN1YmplY3QsXG4gICAgICAgICAgICBtYWlsLmJvZHksXG4gICAgICAgICAgICBlbWFpbFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgICAgICBzZW5kT25lTWFpbDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFpbEludGVncml0eUlkOiBtYWlsLm1haWxJbnRlZ3JpdHlJZCxcbiAgICAgICAgICAgICAgICByZWNpcGllbnQ6IGlucHV0XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiLi4ub24gUmVjb3Zlck5vZGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgcmVjb3Zlck5vZGU6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVEcmFmdE1haWwoe1xuICAgIGJvZHksXG4gICAgc3ViamVjdCxcbiAgICBmaWxlcyxcbiAgICByZWNpcGllbnRzSWRzLFxuICAgIHJlcGx5VG9cbiAgfTogTmV3TWFpbCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPERyYWZ0TWFpbD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IGhhc2hLZXkgPSBzb2RpdW0ucmFuZG9tYnl0ZXNfYnVmKFxuICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9LRVlCWVRFUyxcbiAgICAgIFwiaGV4XCJcbiAgICApO1xuICAgIGNvbnN0IGhhc2ggPSBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoKFxuICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9CWVRFUyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgYm9keSwgc3ViamVjdCB9KSxcbiAgICAgIGhhc2hLZXksXG4gICAgICBcImhleFwiXG4gICAgKTtcbiAgICBjb25zdCBzZW5kZXJGaWxlcyA9IG5ldyBBcnJheTxNYWlsRmlsZUlucHV0PigpO1xuICAgIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgICAgbGV0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgIGlmICghZmlsZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZi5pZCB9KTtcbiAgICAgICAgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmLm5hbWV9ICgke2YuaWR9KSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2VuZGVyRmlsZXMucHVzaCh7XG4gICAgICAgIGlkOiBmaWxlLmlkLFxuICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZmlsZS5rZXkpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIG5hbWU6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmLm5hbWUpLFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY3JlYXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgY3JlYXRlRHJhZnRNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICByZWNpcGllbnRzOiByZWNpcGllbnRzSWRzLFxuICAgICAgICAgIHJlcGx5VG8sXG4gICAgICAgICAgYm9keTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhib2R5KSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgc3ViamVjdDogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhzdWJqZWN0KSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgc2VuZGVyRmlsZXMsXG4gICAgICAgICAgaGFzaCxcbiAgICAgICAgICBoYXNoS2V5XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gQ3JlYXRlRHJhZnRNYWlsUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0ZURyYWZ0TWFpbDogbWFpbFNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWNyZWF0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGNyZWF0ZURyYWZ0TWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBjcmVhdGVEcmFmdE1haWw7XG4gICAgfVxuXG4gICAgaWYgKGNyZWF0ZURyYWZ0TWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIGNyZWF0ZURyYWZ0TWFpbDtcbiAgICB9XG5cbiAgICBpZiAoIWNyZWF0ZURyYWZ0TWFpbC5jcmVhdGVEcmFmdE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKFxuICAgICAgY3JlYXRlRHJhZnRNYWlsLmNyZWF0ZURyYWZ0TWFpbCxcbiAgICAgIHRoaXMuI2tleXNcbiAgICApIGFzIERyYWZ0TWFpbDtcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZpbGVDb250ZW50KHtcbiAgICBmaWxlSWQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIHByb2dyZXNzRGVjcnlwdCxcbiAgICBzaWduYWxcbiAgfToge1xuICAgIGZpbGVJZDogc3RyaW5nO1xuICAgIG9uRG93bmxvYWRQcm9ncmVzcz86IChwcm9ncmVzczogRG93bmxvYWRQcm9ncmVzcykgPT4gdm9pZDtcbiAgICBwcm9ncmVzc0RlY3J5cHQ/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VWludDhBcnJheT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZmlsZUNvbnRlbnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBCeXRlczoge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUsIHR5cGVvZiBlKTtcbiAgICAgICAgICAgIHJldHVybiBVaW50OEFycmF5LmZyb20oWzEsIDIsIDNdKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIFVpbnQ4QXJyYXkpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGZpbGVDb250ZW50OiBbXG4gICAgICAgIHsgZmlsZUlkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50Q2xvdWRcIjoge1xuICAgICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgcGFydHM6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50TGl0ZVwiOiB7XG4gICAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b3RhbFNpemU6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFJlY2VpdmVkTWFpbFwiOiB7XG4gICAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtYXliZVBhcnRzOiB7XG4gICAgICAgICAgICAgICAgICBjb250ZW50VXJsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1heWJlQ29udGVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyUHVibGljS2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRTZW50TWFpbFwiOiB7XG4gICAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtYXliZVBhcnRzOiB7XG4gICAgICAgICAgICAgICAgICBjb250ZW50VXJsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgb3JkZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBtZDU6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1heWJlQ29udGVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFmaWxlQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVDb250ZW50Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGZpbGVDb250ZW50O1xuICAgIH1cblxuICAgIGlmIChmaWxlQ29udGVudC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIGZpbGVDb250ZW50O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGUgPSBmaWxlQ29udGVudC5maWxlO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZ3Jlc3NQYXJ0czogUmVjb3JkPG51bWJlciwgRG93bmxvYWRQcm9ncmVzcz4gPSB7fTtcbiAgICBjb25zdCBvblByb2dyZXNzID0gKFxuICAgICAgcGFydDogbnVtYmVyLFxuICAgICAgcHJvZ3Jlc3NFdmVudDogRG93bmxvYWRQcm9ncmVzc1xuICAgICk6IHZvaWQgPT4ge1xuICAgICAgcHJvZ3Jlc3NQYXJ0c1twYXJ0XSA9IHByb2dyZXNzRXZlbnQ7XG4gICAgICBjb25zdCB0cmFuc2ZlcnJlZEJ5dGVzID0gT2JqZWN0LnZhbHVlcyhwcm9ncmVzc1BhcnRzKS5yZWR1Y2UoXG4gICAgICAgIChwcnYsIGN1cikgPT4gcHJ2ICsgY3VyLnRyYW5zZmVycmVkQnl0ZXMsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICBjb25zdCB0b3RhbEJ5dGVzID0gTnVtYmVyKGZpbGUudG90YWxTaXplKTtcbiAgICAgIG9uRG93bmxvYWRQcm9ncmVzcz8uKHtcbiAgICAgICAgcGVyY2VudDogdHJhbnNmZXJyZWRCeXRlcyAvIHRvdGFsQnl0ZXMsXG4gICAgICAgIHRvdGFsQnl0ZXMsXG4gICAgICAgIHRyYW5zZmVycmVkQnl0ZXNcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRDb250ZW50RnJvbVBhcnRzID0gYXN5bmMgKFxuICAgICAgZmlsZVBhcnRzOiBGaWxlQ29udGVudFBhcnRbXVxuICAgICk6IFByb21pc2U8VWludDhBcnJheT4gPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBuZXcgQXJyYXk8eyBkYXRhOiBVaW50OEFycmF5OyBvcmRlcjogbnVtYmVyIH0+KCk7XG5cbiAgICAgIGNvbnN0IGJ5UGFydCA9IGFzeW5jIChwYXJ0OiBGaWxlQ29udGVudFBhcnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICAgICAgYXdhaXQga3lcbiAgICAgICAgICAgIC5nZXQocGFydC5jb250ZW50VXJsLCB7XG4gICAgICAgICAgICAgIHRpbWVvdXQ6IGZhbHNlLFxuICAgICAgICAgICAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IHByID0+IG9uUHJvZ3Jlc3MocGFydC5vcmRlciwgcHIpLFxuICAgICAgICAgICAgICBzaWduYWw6IHNpZ25hbFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hcnJheUJ1ZmZlcigpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG1kNVBhcnQgPSBhd2FpdCBtZDUoYnVmKTtcbiAgICAgICAgaWYgKG1kNVBhcnQgIT09IHBhcnQubWQ1KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgbWQ1IGZvciBwYXJ0ICR7cGFydC5vcmRlcn0gb2YgZmlsZSAke2ZpbGVJZH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKHtcbiAgICAgICAgICBkYXRhOiBidWYsXG4gICAgICAgICAgb3JkZXI6IHBhcnQub3JkZXJcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBwcm9taXNlQWxsTGltaXQoXG4gICAgICAgIDMsXG4gICAgICAgIGZpbGVQYXJ0cy5tYXAocCA9PiAoKTogUHJvbWlzZTx2b2lkPiA9PiBieVBhcnQocCkpXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gY29uY2F0ZW5hdGUoXG4gICAgICAgIC4uLnBhcnRzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKS5tYXAocCA9PiBwLmRhdGEpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCBmaW5hbGl6ZSA9IGFzeW5jIChcbiAgICAgIGVuY3J5cHRlZENvbnRlbnQ6IFVpbnQ4QXJyYXlcbiAgICApOiBQcm9taXNlPFVpbnQ4QXJyYXk+ID0+IHtcbiAgICAgIC8vIGNvbnN0IG1kNUVuY3J5cHRlZCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1kNShvZihlbmNyeXB0ZWRDb250ZW50KSkpO1xuICAgICAgY29uc3QgbWQ1RW5jcnlwdGVkID0gYXdhaXQgbWQ1KGVuY3J5cHRlZENvbnRlbnQpO1xuXG4gICAgICBpZiAobWQ1RW5jcnlwdGVkICE9PSBmaWxlLm1kNUVuY3J5cHRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuY3J5cHRlZCBjb250ZW50IGRvZXMgbm90IG1hdGNoYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IGRlY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlLmtleSksXG4gICAgICAgIGZpbGUuX190eXBlbmFtZSA9PT0gXCJGaWxlQ29udGVudFJlY2VpdmVkTWFpbFwiXG4gICAgICAgICAgPyBmaWxlLnNlbmRlclB1YmxpY0tleVxuICAgICAgICAgIDogZmlsZS5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50Q2xvdWRcIlxuICAgICAgICAgID8gZmlsZS5wdWJsaWNLZXlcbiAgICAgICAgICA6IHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHNyYyA9IGF3YWl0IGRlY3J5cHQoa2V5LCBlbmNyeXB0ZWRDb250ZW50LCBwcm9ncmVzc0RlY3J5cHQsIHNpZ25hbCk7XG5cbiAgICAgIC8vIGNvbnN0IG1kNUNvbnRlbnQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShtZDUob2Yoc3JjKSkpO1xuICAgICAgY29uc3QgbWQ1Q29udGVudCA9IGF3YWl0IG1kNShzcmMpO1xuXG4gICAgICBpZiAobWQ1Q29udGVudCAhPT0gZmlsZS5tZDUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb250ZW50IGRvZXMgbm90IG1hdGNoYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmNvbXByZXNzKHNyYyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZENvbnRlbnQgPVxuICAgICAgZmlsZS5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50TGl0ZVwiXG4gICAgICAgID8gZmlsZS5jb250ZW50XG4gICAgICAgIDogZmlsZS5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50Q2xvdWRcIlxuICAgICAgICA/IGF3YWl0IGVuY3J5cHRlZENvbnRlbnRGcm9tUGFydHMoZmlsZS5wYXJ0cylcbiAgICAgICAgOiBmaWxlLm1heWJlQ29udGVudFxuICAgICAgICA/IGZpbGUubWF5YmVDb250ZW50XG4gICAgICAgIDogZmlsZS5tYXliZVBhcnRzXG4gICAgICAgID8gYXdhaXQgZW5jcnlwdGVkQ29udGVudEZyb21QYXJ0cyhmaWxlLm1heWJlUGFydHMpXG4gICAgICAgIDogbnVsbDtcblxuICAgIGlmICghZW5jcnlwdGVkQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBhd2FpdCBmaW5hbGl6ZShlbmNyeXB0ZWRDb250ZW50KVxuICAgIH07XG4gIH1cblxuICBhc3luYyByZWFkTWFpbCh7XG4gICAgbWFpbElkXG4gIH06IHtcbiAgICBtYWlsSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvckJhc2ljXG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgcmVhZE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgcmVhZE1haWw6IFtcbiAgICAgICAgeyBtYWlsSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFJlYWRNYWlsUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHJlYWRNYWlsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlYWRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocmVhZE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcmVhZE1haWw7XG4gICAgfVxuXG4gICAgaWYgKHJlYWRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gcmVhZE1haWw7XG4gICAgfVxuXG4gICAgaWYgKHJlYWRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gcmVhZE1haWw7XG4gICAgfVxuXG4gICAgaWYgKCFyZWFkTWFpbC5yZWFkTWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZWFkTWFpbC5yZWFkTWFpbFxuICAgIH07XG4gIH1cblxuICBhc3luYyB1bnJlYWRNYWlsKHtcbiAgICBtYWlsSWRcbiAgfToge1xuICAgIG1haWxJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yQmFzaWNcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1bnJlYWRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHVucmVhZE1haWw6IFtcbiAgICAgICAgeyBtYWlsSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVucmVhZE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdW5yZWFkTWFpbDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1bnJlYWRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodW5yZWFkTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1bnJlYWRNYWlsO1xuICAgIH1cblxuICAgIGlmICh1bnJlYWRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gdW5yZWFkTWFpbDtcbiAgICB9XG5cbiAgICBpZiAodW5yZWFkTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVucmVhZE1haWw7XG4gICAgfVxuXG4gICAgaWYgKCF1bnJlYWRNYWlsLnVucmVhZE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdW5yZWFkTWFpbC51bnJlYWRNYWlsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFwcFNldHRpbmdzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFVzZXJBcHBTZXR0aW5ncz4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgYXBwU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICBjbG91ZEZpbGVEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNsb3VkRm9sZGVyRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoaXN0b3J5RmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICAgICAgaGlzdG9yeU1heEZpbGVDb3VudDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXIudXNlcj8uYXBwU2V0dGluZ3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdXNlci51c2VyLmFwcFNldHRpbmdzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcFNldHRpbmdzKFxuICAgIHNldHRpbmdzOiBQYXJ0aWFsPFVzZXJBcHBTZXR0aW5ncz5cbiAgKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VXNlckFwcFNldHRpbmdzPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBTZXR0aW5ncyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICB1cGRhdGVBcHBTZXR0aW5nczogW1xuICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVBcHBTZXR0aW5nc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1cGRhdGVBcHBTZXR0aW5nczoge1xuICAgICAgICAgICAgICBjbG91ZEZpbGVEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgICAgICBjbG91ZEZvbGRlckRheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICAgIGhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaGlzdG9yeU1heEZpbGVDb3VudDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGRhdGVBcHBTZXR0aW5ncykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZUFwcFNldHRpbmdzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFwcFNldHRpbmdzO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVBcHBTZXR0aW5ncy5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFwcFNldHRpbmdzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdXBkYXRlQXBwU2V0dGluZ3MudXBkYXRlQXBwU2V0dGluZ3NcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZWRNYWlscygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxSZWNlaXZlZE1haWxbXT4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICByZWNlaXZlZE1haWxzOiBtYWlsU2VsZWN0b3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICghdXNlci51c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IG5ldyBBcnJheTxSZWNlaXZlZE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgdXNlci51c2VyLnJlY2VpdmVkTWFpbHMpIHtcbiAgICAgIGNvbnN0IG1haWwgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKTtcbiAgICAgIGlmIChtYWlsKSB7XG4gICAgICAgIHJlY2VpdmVkTWFpbHMucHVzaChtYWlsIGFzIFJlY2VpdmVkTWFpbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZWNlaXZlZE1haWxzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNlbnRNYWlscygpOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxTZW50TWFpbFtdPiB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgIHNlbnRNYWlsczogbWFpbFNlbGVjdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXIudXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyBnZXQgYWN0dWFsIG1haWxzIG9uIHRoaXMgYXBwIG9ubHlcblxuICAgIGNvbnN0IHNlbnRNYWlscyA9IG5ldyBBcnJheTxTZW50TWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiB1c2VyLnVzZXIuc2VudE1haWxzKSB7XG4gICAgICBjb25zdCBtYWlsID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwobSwgdGhpcy4ja2V5cyk7XG4gICAgICBpZiAobWFpbCkge1xuICAgICAgICBzZW50TWFpbHMucHVzaChtYWlsIGFzIFNlbnRNYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHNlbnRNYWlsc1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkcmFmdE1haWxzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPERyYWZ0TWFpbFtdPiB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgIGRyYWZ0TWFpbHM6IG1haWxTZWxlY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VyLnVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCBkcmFmdE1haWxzID0gbmV3IEFycmF5PERyYWZ0TWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiB1c2VyLnVzZXIuZHJhZnRNYWlscykge1xuICAgICAgY29uc3QgZHJhZnQgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKSBhcyBEcmFmdE1haWw7XG4gICAgICBpZiAoZHJhZnQpIHtcbiAgICAgICAgZHJhZnRNYWlscy5wdXNoKGRyYWZ0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRyYWZ0TWFpbHNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwZXJOb2RlID0gYXN5bmMgKFxuICAgIG5vZGVJZDogc3RyaW5nLFxuICAgIHB1YmxpY0tleTogc3RyaW5nXG4gICk6IFByb21pc2U8TmFtZUtleUlucHV0IHwgbnVsbD4gPT4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcblxuICAgIGlmICghbm9kZSkge1xuICAgICAgYXdhaXQgdGhpcy5ub2RlKHsgaWQ6IG5vZGVJZCB9KTtcbiAgICAgIG5vZGUgPSBub2Rlc0NhY2hlLmdldChub2RlSWQpO1xuXG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUtleSA9IG5vZGUuYWNjZXNzPy5uYW1lS2V5O1xuXG4gICAgaWYgKCFuYW1lS2V5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgICBuYW1lS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChuYW1lS2V5KSxcbiAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWxlczogbm9kZS5oaXN0b3J5Lm1hcChmID0+ICh7XG4gICAgICAgIGlkOiBmLmlkLFxuICAgICAgICBrZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmLmtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH0pKVxuICAgIH07XG4gIH07XG5cbiAgYXN5bmMgdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50KCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPG51bWJlcj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1bnJlYWRSZWNlaXZlZE1haWxzQ291bnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50OiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFVucmVhZFJlY2VpdmVkTWFpbHNDb3VudFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGNvdW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVucmVhZFJlY2VpdmVkTWFpbHNDb3VudDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHVucmVhZFJlY2VpdmVkTWFpbHNDb3VudC5jb3VudFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9lYWNoVXNlciA9IGFzeW5jIChcbiAgICBmaWxlczogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdLFxuICAgIHN1YmplY3Q6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaWRPck1haWw6IHN0cmluZ1xuICApOiBQcm9taXNlPE1haWxSZWNpcGllbnRJbnB1dCB8IG51bGw+ID0+IHtcbiAgICBsZXQgdSA9IHVzZXJzQ2FjaGUuZ2V0KGlkT3JNYWlsKTtcblxuICAgIGlmICghdSB8fCAhKFwicHVibGljS2V5XCIgaW4gdSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcSA9IGF3YWl0IHRoaXMudXNlcih7XG4gICAgICAgICAgdXNlcklkOiBpZE9yTWFpbCxcbiAgICAgICAgICB3aXRoUHVibGljS2V5OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlcSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXEuX190eXBlbmFtZSAhPT0gXCJTdWNjZXNzUmVzcG9uc2VcIikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHUgPSByZXEuZGF0YTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF1KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKFwicHVibGljS2V5XCIgaW4gdSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVXNlciAke2lkT3JNYWlsfSBoYXZlIG5vIHB1YmxpYyBrZXlgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGllbnRzRmlsZXMgPSBuZXcgQXJyYXk8TWFpbEZpbGVJbnB1dD4oKTtcblxuICAgIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgICAgbGV0IGZpbGVJbkhpc3RvcnkgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgIGlmICghZmlsZUluSGlzdG9yeSkge1xuICAgICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZi5pZCB9KTtcbiAgICAgICAgZmlsZUluSGlzdG9yeSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICBpZiAoIWZpbGVJbkhpc3RvcnkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmLm5hbWV9ICgke2YuaWR9KSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qga2V5ID0gZmlsZUluSGlzdG9yeS5rZXk7XG4gICAgICByZWNpcGllbnRzRmlsZXMucHVzaCh7XG4gICAgICAgIGlkOiBmLmlkLFxuICAgICAgICBuYW1lOiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZi5uYW1lKSxcbiAgICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoa2V5KSxcbiAgICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVjaXBpZW50SWQ6IHUuaWQsXG4gICAgICBib2R5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhib2R5KSxcbiAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIHN1YmplY3Q6IHNvZGl1bS50b19oZXgoXG4gICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgZmlsZXM6IHJlY2lwaWVudHNGaWxlc1xuICAgIH07XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFHQSxPQUFPQSxFQUFQLE1BQWUsSUFBZjtBQUNBLE9BQU9DLEtBQVAsTUFBa0Is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
|
|
3160
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJreSIsImF4aW9zIiwiQmFzZUNsaWVudCIsIm5vZGVzQ2FjaGUiLCJmaWxlc0NhY2hlIiwidXNlcnNDYWNoZSIsInNlY3JldHN0cmVhbUtleWdlbiIsImVuY3J5cHRTZWNyZXRzdHJlYW0iLCJjb21wcmVzcyIsInVuY29tcHJlc3MiLCJncWxOb2RlRnVsbFRvSW50ZXJuYWxGdWxsIiwiZ3FsTm9kZVRvRXh0ZXJuYWwiLCJncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsIiwiaW50ZXJuYWxOb2RlVG9Ob2RlIiwiZ3FsRmlsZVRvRXh0ZXJuYWwiLCJzb2RpdW0iLCJkZWNyeXB0Q3J5cHRvQm94IiwiZW5jcnlwdENyeXB0b0JveCIsImdlbmVyYXRlIiwibWQ1IiwiZW5jcnlwdCIsImRlY3J5cHQiLCJjaHVua3MiLCJjb25jYXRlbmF0ZSIsImVudW1lcmF0ZSIsInByb21pc2VBbGxMaW1pdCIsImZpbGVTZWxlY3RvciIsIm1haWxTZWxlY3RvciIsIm5vZGVGdWxsU2VsZWN0b3IiLCJub2RlU2VsZWN0b3IiLCJjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbCIsImRlY29kZSIsInNlcmlhbGl6ZSIsImVuY3J5cHROYW1lIiwibmFtZSIsIm5hbWVLZXkiLCJkYXRhIiwiZnJvbV9oZXgiLCJmcm9tX3N0cmluZyIsIm5hbWVFbmNyeXB0ZWQiLCJ0b19oZXgiLCJTZWNyZWN5Q2xpZW50IiwiY29uc3RydWN0b3IiLCJ1YVNlc3Npb24iLCJ1YUtleXMiLCJ1YUp3dCIsImVudiIsInBlck5vZGUiLCJub2RlSWQiLCJwdWJsaWNLZXkiLCJub2RlIiwiZ2V0IiwiaWQiLCJhY2Nlc3MiLCJwcml2YXRlS2V5IiwiZmlsZXMiLCJoaXN0b3J5IiwibWFwIiwiZiIsImtleSIsIl9lYWNoVXNlciIsInN1YmplY3QiLCJib2R5IiwiaWRPck1haWwiLCJ1IiwicmVxIiwidXNlciIsInVzZXJJZCIsIndpdGhQdWJsaWNLZXkiLCJfX3R5cGVuYW1lIiwiRXJyb3IiLCJyZWNpcGllbnRzRmlsZXMiLCJBcnJheSIsImZpbGVJbkhpc3RvcnkiLCJmaWxlIiwicHVzaCIsImZpbGVLZXkiLCJyZWNpcGllbnRJZCIsImp3dCIsImp3dERlY29kZWQiLCJhcHBVc2VySWQiLCJzdWIiLCJhZGRGaWxlVG9IaXN0b3J5IiwiZmlsZUlkIiwiY2xpZW50IiwibWVzc2FnZSIsImZpbmQiLCJ1c2VycyIsImZpbHRlciIsImlucHV0Iiwic2hhcmVGaWxlSW5IaXN0b3J5IiwicmVzdWx0IiwidXBsb2FkRmlsZSIsImVuY3J5cHRQcm9ncmVzcyIsInVwbG9hZFByb2dyZXNzIiwic2lnbmFsIiwiZmlsZUJ1ZmZlciIsIkZpbGUiLCJVaW50OEFycmF5IiwiYXJyYXlCdWZmZXIiLCJjb21wcmVzc2VkIiwiZW5jcnlwdGVkRmlsZSIsIm1kNUZpbGUiLCJtZDVFbmNyeXB0ZWQiLCJlbmNyeXB0ZWRGaWxlS2V5Iiwic2NhbGFycyIsIkpzb24iLCJlbmNvZGUiLCJlIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhcnNlIiwiRGF0ZVRpbWUiLCJEYXRlIiwidG9JU09TdHJpbmciLCJCaWdJbnQiLCJ0b1N0cmluZyIsImZpbGVTaXplIiwiYnl0ZUxlbmd0aCIsImZpbGVTaXplQmVmb3JlIiwiZmlsZVBhcnRTaXplIiwicGFydHMiLCJmaWVsZHMiLCJvcmRlciIsInVybCIsInRvdGFsIiwiY3VycmVudCIsInBlcmNlbnQiLCJsZW5ndGgiLCJ1cGxvYWRQYXJ0RW5kZWQiLCJ1cGxvYWRGaWxlUGFydEVuZCIsInVwbG9hZEVuZGVkIiwidXBsb2FkRmlsZUVuZCIsImNodW5rUGFydHMiLCJpbmRleCIsImNodW5rIiwiTnVtYmVyIiwicHJvZ3Jlc3NQYXJ0cyIsIm9uUHJvZ3Jlc3MiLCJwYXJ0IiwicHJvZ3Jlc3NFdmVudCIsIk9iamVjdCIsInZhbHVlcyIsInJlZHVjZSIsInBydiIsImN1ciIsImxvYWRlZCIsImJ5UGFydCIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJwIiwidmFsdWUiLCJlbnRyaWVzIiwiYXBwZW5kIiwiQmxvYiIsInBvc3QiLCJvblVwbG9hZFByb2dyZXNzIiwidXBsb2FkRmlsZUluQ2xvdWQiLCJzYXZlSW5DbG91ZCIsImxvZ291dCIsInNlc3Npb25JZCIsImNsZWFyIiwiY3JlYXRlRm9sZGVyIiwicGFyZW50Rm9sZGVySWQiLCJlbmNyeXB0ZWROYW1lIiwiZW5jcnlwdGVkS2V5IiwiZm9sZGVyIiwicGFyZW50IiwiUHJvbWlzZSIsImFsbCIsInJpZ2h0cyIsInNoYXJlTm9kZSIsImRlbGV0ZWQiLCJtYWlsIiwiZGVsZXRlZE5vZGVzIiwibm9kZXMiLCJzaGFyZWROb2RlcyIsIm5vZGVzU2hhcmVkV2l0aE1lIiwidHlwZSIsImRlbGV0ZU5vZGVTaGFyaW5nIiwiZHVwbGljYXRlTm9kZSIsImZvbGRlcklkIiwiY3VzdG9tTmFtZSIsImRlbGV0ZU5vZGVDbG91ZFRyYXNoIiwiaWRzIiwic2hhcmVOb2RlcyIsInNoYXJlTm9kZUZpbmlzaCIsInVwZGF0ZU5vZGUiLCJpc0Zhdm9yaXRlIiwiZGVsZXRlZEF0IiwiZGVsZXRlZE1haWxzIiwibWFpbFR5cGUiLCJtYWlscyIsIm0iLCJ1cGRhdGVBcHBOb3RpZmljYXRpb25zIiwibm90aWZpY2F0aW9ucyIsImVuYWJsZUFsbCIsImNsb3VkIiwiZGlzYWJsZUFsbFVudGlsIiwiYXBwTm90aWZpY2F0aW9ucyIsImNyZWF0ZU1haWwiLCJjdXN0b21NZXNzYWdlIiwiY3JlYXRlRHJhZnRNYWlsIiwic2VuZERyYWZ0TWFpbCIsIm1haWxJbnRlZ3JpdHlJZCIsIndhaXRpbmdSZWNlaXZlZE1haWxzIiwiZGF0ZSIsImF0dGFjaG1lbnRzQ291bnQiLCJzZW5kZXIiLCJmaXJzdG5hbWUiLCJsYXN0bmFtZSIsImVtYWlsIiwicmVjaXBpZW50cyIsInRlbXBvcmFyeVJlY2lwaWVudHMiLCJ1cGRhdGVEcmFmdE1haWwiLCJkcmFmdElkIiwicmVjaXBpZW50c0lkcyIsInJlcGx5VG8iLCJkcmFmdHMiLCJkcmFmdE1haWxzIiwiZHJhZnQiLCJkIiwiaGFzaEtleSIsImhhc2giLCJyYW5kb21ieXRlc19idWYiLCJjcnlwdG9fZ2VuZXJpY2hhc2hfS0VZQllURVMiLCJjcnlwdG9fZ2VuZXJpY2hhc2giLCJjcnlwdG9fZ2VuZXJpY2hhc2hfQllURVMiLCJzZW5kZXJGaWxlcyIsImRlbGV0ZURyYWZ0TWFpbCIsImRlbGV0ZU1haWxUcmFzaCIsImVtcHR5TWFpbFRyYXNoIiwiZW1wdHlDbG91ZFRyYXNoIiwicmVjb3Zlck5vZGUiLCJyZWNvdmVyTWFpbCIsIm1haWxJZCIsImRlbGV0ZUZpbGUiLCJkZWxldGVOb2RlIiwibW92ZU5vZGVzIiwibm9kZUlkcyIsInBhcmVudE5vZGVJZCIsImRlbGV0ZU1haWwiLCJoYXMiLCJyZWNlaXZlZE1haWxzIiwic29tZSIsImZpbGVNYWlsIiwiZW5jcnlwdGVkTmFtZUtleSIsImZpbGVuYW1lIiwibWUiLCJpbmNsdWRlcyIsIm90aGVycyIsImRiR2V0IiwiZmllbGQiLCJqc29uIiwicmVzIiwiZGJTZXQiLCJkYlNlYXJjaCIsInNlYXJjaCIsImRyYWZ0TWFpbElkIiwic2VuZFdhaXRpbmdFbWFpbHMiLCJzZW50TWFpbHMiLCJmaWx0ZXJlZCIsInNlbmRPbmVNYWlsIiwicmVjaXBpZW50IiwiZmlsZUNvbnRlbnQiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJwcm9ncmVzc0RlY3J5cHQiLCJCeXRlcyIsImNvbnNvbGUiLCJsb2ciLCJmcm9tIiwiY29udGVudFVybCIsInRvdGFsU2l6ZSIsImNvbnRlbnQiLCJtYXliZVBhcnRzIiwibWF5YmVDb250ZW50Iiwic2VuZGVyUHVibGljS2V5IiwidHJhbnNmZXJyZWRCeXRlcyIsInRvdGFsQnl0ZXMiLCJlbmNyeXB0ZWRDb250ZW50RnJvbVBhcnRzIiwiZmlsZVBhcnRzIiwiYnVmIiwidGltZW91dCIsInByIiwibWQ1UGFydCIsInNvcnQiLCJhIiwiYiIsImZpbmFsaXplIiwiZW5jcnlwdGVkQ29udGVudCIsInNyYyIsIm1kNUNvbnRlbnQiLCJyZWFkTWFpbCIsInVucmVhZE1haWwiLCJhcHBTZXR0aW5ncyIsImNsb3VkRmlsZURheXNGb3JEZWxldGUiLCJjbG91ZEZvbGRlckRheXNGb3JEZWxldGUiLCJoaXN0b3J5RmlsZURheXNGb3JEZWxldGUiLCJoaXN0b3J5TWF4RmlsZUNvdW50IiwidXBkYXRlQXBwU2V0dGluZ3MiLCJzZXR0aW5ncyIsInVucmVhZFJlY2VpdmVkTWFpbHNDb3VudCIsImNvdW50Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCB0eXBlIHsgTWFpbFR5cGUsIE5vZGVUeXBlIH0gZnJvbSBcIi4vLi4vemV1cy9pbmRleFwiO1xuaW1wb3J0IHR5cGUgeyBEb3dubG9hZFByb2dyZXNzIH0gZnJvbSBcImt5XCI7XG5pbXBvcnQga3kgZnJvbSBcImt5XCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgdHlwZSB7IFN1Y2Nlc3NSZXNwb25zZSwgVXNlckRhdGEgfSBmcm9tIFwiLi4vQmFzZUNsaWVudC5qc1wiO1xuaW1wb3J0IHsgQmFzZUNsaWVudCB9IGZyb20gXCIuLi9CYXNlQ2xpZW50LmpzXCI7XG5pbXBvcnQgeyBub2Rlc0NhY2hlLCBmaWxlc0NhY2hlLCB1c2Vyc0NhY2hlIH0gZnJvbSBcIi4uL2NhY2hlLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFByb2dyZXNzIH0gZnJvbSBcIi4uL2NyeXB0by9maWxlLmpzXCI7XG5pbXBvcnQgeyBzZWNyZXRzdHJlYW1LZXlnZW4sIGVuY3J5cHRTZWNyZXRzdHJlYW0gfSBmcm9tIFwiLi4vY3J5cHRvL2ZpbGUuanNcIjtcbmltcG9ydCB7IGNvbXByZXNzLCB1bmNvbXByZXNzIH0gZnJvbSBcIi4uL21pbmlmeS9pbmRleC5qc1wiO1xuaW1wb3J0IHtcbiAgZ3FsTm9kZUZ1bGxUb0ludGVybmFsRnVsbCxcbiAgZ3FsTm9kZVRvRXh0ZXJuYWwsXG4gIGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwsXG4gIGludGVybmFsTm9kZVRvTm9kZVxufSBmcm9tIFwiLi9jb252ZXJ0L25vZGUuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgTWFpbEZpbGVJbnB1dCxcbiAgUmVjZWl2ZWRNYWlsLFxuICBTZW50TWFpbCxcbiAgTm9kZSxcbiAgTm9kZUZ1bGwsXG4gIFVzZXJBcHBTZXR0aW5ncyxcbiAgVXNlckFwcE5vdGlmaWNhdGlvbnMsXG4gIEZpbGVNZXRhZGF0YSBhcyBTZWNyZWN5RmlsZSxcbiAgV2FpdGluZ1JlY2VpdmVkTWFpbCxcbiAgRHJhZnRNYWlsLFxuICBNYWlsUmVjaXBpZW50SW5wdXQsXG4gIFNoYXJlTm9kZXNJbnB1dCxcbiAgTmFtZUtleUlucHV0LFxuICBNYWlsLFxuICBTaGFyZUZpbGVJbkhpc3RvcnlJbnB1dCxcbiAgRmlsZVBhcnRSZXNwb25zZSxcbiAgRmlsZUNvbnRlbnRQYXJ0XG59IGZyb20gXCIuL3R5cGVzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBncWxGaWxlVG9FeHRlcm5hbCB9IGZyb20gXCIuL2NvbnZlcnQvZmlsZS5qc1wiO1xuaW1wb3J0IHsgc29kaXVtIH0gZnJvbSBcIi4uL3NvZGl1bS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXlQYWlyIH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHsgZGVjcnlwdENyeXB0b0JveCwgZW5jcnlwdENyeXB0b0JveCB9IGZyb20gXCIuLi9jcnlwdG8vaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgU2VjcmVjeUVudiB9IGZyb20gXCIuL2hlbHBlcnMuanNcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNob3J0aWRcIjtcbmltcG9ydCB7IG1kNSB9IGZyb20gXCIuLi93b3JrZXIvbWQ1LmpzXCI7XG5pbXBvcnQgeyBlbmNyeXB0LCBkZWNyeXB0IH0gZnJvbSBcIi4uL3dvcmtlci9zb2RpdW0uanNcIjtcbmltcG9ydCB7XG4gIGNodW5rcyxcbiAgY29uY2F0ZW5hdGUsXG4gIGVudW1lcmF0ZSxcbiAgcHJvbWlzZUFsbExpbWl0XG59IGZyb20gXCIuLi91dGlscy91dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgZmlsZVNlbGVjdG9yLFxuICBtYWlsU2VsZWN0b3IsXG4gIG5vZGVGdWxsU2VsZWN0b3IsXG4gIG5vZGVTZWxlY3RvclxufSBmcm9tIFwiLi90eXBlcy9zZWxlY3RvcnMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmlnaHRzIH0gZnJvbSBcIi4uL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsIH0gZnJvbSBcIi4vY29udmVydC9tYWlsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEp3dFBheWxvYWQgfSBmcm9tIFwianNvbndlYnRva2VuXCI7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tIFwianNvbndlYnRva2VuXCI7XG4vLyBpbXBvcnQgeyBtZDUgfSBmcm9tIFwiLi4vd29ya2VyL2luZGV4LmpzXCI7XG4vLyBpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEVycm9yQWNjZXNzRGVuaWVkLFxuICBFcnJvck5vdEZvdW5kLFxuICBFcnJvckJhc2ljLFxuICBFcnJvck5vdEV4aXN0LFxuICBFcnJvckxpbWl0XG59IGZyb20gXCIuLi9lcnJvci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tIFwiYnNvblwiO1xuXG5leHBvcnQgdHlwZSBOZXdNYWlsID0ge1xuICBib2R5OiBzdHJpbmc7XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgZmlsZXM6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH1bXTtcbiAgcmVjaXBpZW50c0lkczogc3RyaW5nW107XG4gIHJlcGx5VG8/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xufTtcbmV4cG9ydCB0eXBlIFByb2dyZXNzQ2FsbGJhY2sgPSAocHJvZ3Jlc3M6IFByb2dyZXNzKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5jb25zdCBlbmNyeXB0TmFtZSA9IGFzeW5jIChuYW1lOiBzdHJpbmcsIG5hbWVLZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgZW5jcnlwdFNlY3JldHN0cmVhbShcbiAgICBzb2RpdW0uZnJvbV9oZXgobmFtZUtleSksXG4gICAgc29kaXVtLmZyb21fc3RyaW5nKG5hbWUpXG4gICk7XG4gIGNvbnN0IG5hbWVFbmNyeXB0ZWQgPSBzb2RpdW0udG9faGV4KGRhdGEpO1xuICByZXR1cm4gbmFtZUVuY3J5cHRlZDtcbn07XG5cbmV4cG9ydCBjbGFzcyBTZWNyZWN5Q2xpZW50IGV4dGVuZHMgQmFzZUNsaWVudCB7XG4gIGp3dDogc3RyaW5nO1xuXG4gIGp3dERlY29kZWQ6IEp3dFBheWxvYWQ7XG5cbiAgI2tleXM6IEtleVBhaXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdWFTZXNzaW9uOiBzdHJpbmcsXG4gICAgdWFLZXlzOiBLZXlQYWlyLFxuICAgIHVhSnd0OiBzdHJpbmcsXG4gICAgZW52OiBTZWNyZWN5RW52XG4gICkge1xuICAgIHN1cGVyKHVhU2Vzc2lvbiwgZW52KTtcbiAgICB0aGlzLmp3dCA9IHVhSnd0O1xuICAgIHRoaXMuand0RGVjb2RlZCA9IGRlY29kZSh1YUp3dCkgYXMgSnd0UGF5bG9hZDtcbiAgICB0aGlzLiNrZXlzID0gdWFLZXlzO1xuICB9XG5cbiAgZ2V0IHB1YmxpY0tleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNrZXlzLnB1YmxpY0tleTtcbiAgfVxuXG4gIGdldCBhcHBVc2VySWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5qd3REZWNvZGVkLnN1YiA/PyBcIlwiO1xuICB9XG5cbiAgYXN5bmMgYWRkRmlsZVRvSGlzdG9yeSh7XG4gICAgZmlsZUlkLFxuICAgIG5vZGVJZFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBhZGRGaWxlVG9IaXN0b3J5IH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBBZGRGaWxlVG9IaXN0b3J5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGFkZEZpbGVUb0hpc3Rvcnk6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghYWRkRmlsZVRvSGlzdG9yeSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFkZEZpbGVUb0hpc3RvcnkuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gYWRkRmlsZVRvSGlzdG9yeTtcbiAgICB9XG5cbiAgICBpZiAoYWRkRmlsZVRvSGlzdG9yeS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGFkZEZpbGVUb0hpc3Rvcnk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGF3YWl0IGdxbE5vZGVGdWxsVG9JbnRlcm5hbEZ1bGwoXG4gICAgICBhZGRGaWxlVG9IaXN0b3J5LmFkZEZpbGVUb0hpc3RvcnksXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcbiAgICBjb25zdCBmaWxlID0gbm9kZS5oaXN0b3J5LmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBjb25zdCB1c2VycyA9IG5vZGUudXNlcnMuZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICk7XG4gICAgICBjb25zdCBpbnB1dDogU2hhcmVGaWxlSW5IaXN0b3J5SW5wdXQgPSB7XG4gICAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgICAgdXNlcnM6IHVzZXJzLm1hcCgoW3VdKSA9PiAoe1xuICAgICAgICAgIGlkOiB1LmlkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgIHNvZGl1bS5mcm9tX2hleChmaWxlLmtleSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pKVxuICAgICAgfTtcblxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIHNoYXJlRmlsZUluSGlzdG9yeTogW1xuICAgICAgICAgIHsgaW5wdXQsIG5vZGVJZCB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiLi4ub24gU2hhcmVGaWxlSW5IaXN0b3J5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBzaGFyZUZpbGVJbkhpc3Rvcnk6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBpbnRlcm5hbE5vZGVUb05vZGUobm9kZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZSh7XG4gICAgZmlsZSxcbiAgICBlbmNyeXB0UHJvZ3Jlc3MsXG4gICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgc2lnbmFsXG4gIH06IHtcbiAgICBmaWxlOiBnbG9iYWxUaGlzLkZpbGUgfCBVaW50OEFycmF5O1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxzdHJpbmc+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCBmaWxlS2V5ID0gc2VjcmV0c3RyZWFtS2V5Z2VuKCk7XG4gICAgY29uc3QgZmlsZUJ1ZmZlciA9XG4gICAgICBmaWxlIGluc3RhbmNlb2YgRmlsZSA/IG5ldyBVaW50OEFycmF5KGF3YWl0IGZpbGUuYXJyYXlCdWZmZXIoKSkgOiBmaWxlO1xuICAgIGNvbnN0IGNvbXByZXNzZWQgPSBjb21wcmVzcyhmaWxlQnVmZmVyKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGRhdGE6IGVuY3J5cHRlZEZpbGUsXG4gICAgICBtZDU6IG1kNUZpbGUsXG4gICAgICBtZDVFbmNyeXB0ZWRcbiAgICB9ID0gYXdhaXQgZW5jcnlwdChmaWxlS2V5LCBjb21wcmVzc2VkLCBlbmNyeXB0UHJvZ3Jlc3MsIHNpZ25hbCk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRGaWxlS2V5ID0gZW5jcnlwdENyeXB0b0JveChcbiAgICAgIGZpbGVLZXksXG4gICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG5cbiAgICBjb25zdCB7IHVwbG9hZEZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBKc29uOiB7XG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5zdHJpbmdpZnkoZSksXG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gSlNPTi5wYXJzZShlIGFzIHN0cmluZylcbiAgICAgICAgfSxcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9LFxuICAgICAgICBCaWdJbnQ6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBCaWdJbnQoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIGJpZ2ludCkudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXBsb2FkRmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZVNpemU6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgICBmaWxlU2l6ZUJlZm9yZTogZmlsZUJ1ZmZlci5ieXRlTGVuZ3RoLFxuICAgICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoZW5jcnlwdGVkRmlsZUtleSksXG4gICAgICAgICAgbWQ1RW5jcnlwdGVkLFxuICAgICAgICAgIG1kNTogbWQ1RmlsZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckxpbWl0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXBsb2FkRmlsZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1cGxvYWRGaWxlOiB7XG4gICAgICAgICAgICAgIGZpbGVJZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZmlsZVBhcnRTaXplOiB0cnVlLFxuICAgICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICAgIGZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB1cmw6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1cGxvYWRGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBsb2FkRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiB1cGxvYWRGaWxlO1xuICAgIH1cblxuICAgIGlmICh1cGxvYWRGaWxlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gdXBsb2FkRmlsZTtcbiAgICB9XG5cbiAgICBpZiAodXBsb2FkRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVwbG9hZEZpbGU7XG4gICAgfVxuXG4gICAgaWYgKCF1cGxvYWRGaWxlLnVwbG9hZEZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHVwbG9hZFByb2dyZXNzPy4oe1xuICAgICAgdG90YWw6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgIGN1cnJlbnQ6IDAsXG4gICAgICBwZXJjZW50OiAwXG4gICAgfSk7XG5cbiAgICBpZiAodXBsb2FkRmlsZS51cGxvYWRGaWxlLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdXBsb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHRvdGFsOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIGN1cnJlbnQ6IGVuY3J5cHRlZEZpbGUuYnl0ZUxlbmd0aCxcbiAgICAgICAgcGVyY2VudDogMVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IHVwbG9hZEZpbGUudXBsb2FkRmlsZS5maWxlSWRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgdXBsb2FkUGFydEVuZGVkID0gYXN5bmMgKFxuICAgICAgbWQ1OiBzdHJpbmcsXG4gICAgICBvcmRlcjogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+ID0+IHtcbiAgICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlUGFydEVuZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICAgIHVwbG9hZEZpbGVQYXJ0RW5kOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlsZUlkOiB1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkLFxuICAgICAgICAgICAgbWQ1LFxuICAgICAgICAgICAgb3JkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBVcGxvYWRGaWxlUGFydEVuZFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdXBsb2FkRmlsZVBhcnRFbmQ6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXVwbG9hZEZpbGVQYXJ0RW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodXBsb2FkRmlsZVBhcnRFbmQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICAgIHJldHVybiB1cGxvYWRGaWxlUGFydEVuZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogdXBsb2FkRmlsZVBhcnRFbmQudXBsb2FkRmlsZVBhcnRFbmRcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHVwbG9hZEVuZGVkID0gYXN5bmMgKCk6IFByb21pc2U8XG4gICAgICBTdWNjZXNzUmVzcG9uc2U8c3RyaW5nPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgICA+ID0+IHtcbiAgICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgeyB1cGxvYWRGaWxlRW5kIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgdXBsb2FkRmlsZUVuZDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpbGVJZDogdXBsb2FkRmlsZS51cGxvYWRGaWxlLmZpbGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCIuLi5vbiBVcGxvYWRGaWxlRW5kUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICB1cGxvYWRGaWxlRW5kOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgaWYgKCF1cGxvYWRGaWxlRW5kKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodXBsb2FkRmlsZUVuZC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGVFbmQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh1cGxvYWRGaWxlRW5kLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICAgIHJldHVybiB1cGxvYWRGaWxlRW5kO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXVwbG9hZEZpbGVFbmQudXBsb2FkRmlsZUVuZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogdXBsb2FkRmlsZUVuZC51cGxvYWRGaWxlRW5kXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBjaHVua1BhcnRzID0gbmV3IEFycmF5PHtcbiAgICAgIG9yZGVyOiBudW1iZXI7XG4gICAgICBkYXRhOiBVaW50OEFycmF5O1xuICAgICAgbWQ1OiBzdHJpbmc7XG4gICAgfT4oKTtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBjaHVua10gb2YgZW51bWVyYXRlKFxuICAgICAgY2h1bmtzKGVuY3J5cHRlZEZpbGUsIE51bWJlcih1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZVBhcnRTaXplKSlcbiAgICApKSB7XG4gICAgICBjaHVua1BhcnRzLnB1c2goe1xuICAgICAgICBvcmRlcjogaW5kZXggKyAxLFxuICAgICAgICBkYXRhOiBjaHVuayxcbiAgICAgICAgbWQ1OiBhd2FpdCBtZDUoY2h1bmspXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmVzc1BhcnRzOiBSZWNvcmQ8bnVtYmVyLCBQcm9ncmVzc0V2ZW50PiA9IHt9O1xuICAgIGNvbnN0IG9uUHJvZ3Jlc3MgPSAocGFydDogbnVtYmVyLCBwcm9ncmVzc0V2ZW50OiBQcm9ncmVzc0V2ZW50KTogdm9pZCA9PiB7XG4gICAgICBwcm9ncmVzc1BhcnRzW3BhcnRdID0gcHJvZ3Jlc3NFdmVudDtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBPYmplY3QudmFsdWVzKHByb2dyZXNzUGFydHMpLnJlZHVjZShcbiAgICAgICAgKHBydiwgY3VyKSA9PiBwcnYgKyBjdXIubG9hZGVkLFxuICAgICAgICAwXG4gICAgICApO1xuICAgICAgdXBsb2FkUHJvZ3Jlc3M/Lih7XG4gICAgICAgIHBlcmNlbnQ6IGN1cnJlbnQgLyBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIHRvdGFsOiBlbmNyeXB0ZWRGaWxlLmJ5dGVMZW5ndGgsXG4gICAgICAgIGN1cnJlbnRcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBieVBhcnQgPSBhc3luYyAocGFydDogRmlsZVBhcnRSZXNwb25zZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgaWYgKCF1cGxvYWRGaWxlLnVwbG9hZEZpbGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtQYXJ0cy5maW5kKHAgPT4gcC5vcmRlciA9PT0gcGFydC5vcmRlcik7XG4gICAgICBpZiAoIWNodW5rKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnQuZmllbGRzKSkge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgIFwiZmlsZVwiLFxuICAgICAgICBuZXcgQmxvYihbY2h1bmsuZGF0YV0pLFxuICAgICAgICBgJHt1cGxvYWRGaWxlLnVwbG9hZEZpbGUuZmlsZUlkfS0ke2NodW5rLm9yZGVyfWBcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGF4aW9zLnBvc3QocGFydC51cmwsIGZvcm1EYXRhLCB7XG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IHByb2dyZXNzRXZlbnQgPT5cbiAgICAgICAgICBvblByb2dyZXNzKHBhcnQub3JkZXIsIHByb2dyZXNzRXZlbnQpLFxuICAgICAgICBzaWduYWxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB1cGxvYWRQYXJ0RW5kZWQoY2h1bmsubWQ1LCBjaHVuay5vcmRlcik7XG4gICAgICAvLyBpZiAoKGUgYXMgYW55KS5yZXNwb25zZS5zdGF0dXMgPT09IDApIHtcbiAgICAgIC8vICAgLy8gVE9ETyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2t5L2lzc3Vlcy8zMDVcbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIHRocm93IGU7XG4gICAgICAvLyB9XG4gICAgfTtcblxuICAgIGlmICghdXBsb2FkRmlsZS51cGxvYWRGaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhd2FpdCBwcm9taXNlQWxsTGltaXQoXG4gICAgICAzLFxuICAgICAgdXBsb2FkRmlsZS51cGxvYWRGaWxlLnBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXBsb2FkRW5kZWQoKTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0LmRhdGFcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZUluQ2xvdWQoe1xuICAgIGZpbGUsXG4gICAgbmFtZSxcbiAgICBub2RlSWQsXG4gICAgZW5jcnlwdFByb2dyZXNzLFxuICAgIHVwbG9hZFByb2dyZXNzLFxuICAgIHNpZ25hbFxuICB9OiB7XG4gICAgZmlsZTogZ2xvYmFsVGhpcy5GaWxlIHwgVWludDhBcnJheTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbm9kZUlkPzogc3RyaW5nO1xuICAgIGVuY3J5cHRQcm9ncmVzcz86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgdXBsb2FkUHJvZ3Jlc3M/OiBQcm9ncmVzc0NhbGxiYWNrO1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvckxpbWl0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvckJhc2ljXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IGZpbGVJZCA9IGF3YWl0IHRoaXMudXBsb2FkRmlsZSh7XG4gICAgICBmaWxlLFxuICAgICAgZW5jcnlwdFByb2dyZXNzLFxuICAgICAgdXBsb2FkUHJvZ3Jlc3MsXG4gICAgICBzaWduYWxcbiAgICB9KTtcblxuICAgIGlmICghZmlsZUlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGZpbGVJZDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JMaW1pdFwiKSB7XG4gICAgICByZXR1cm4gZmlsZUlkO1xuICAgIH1cblxuICAgIGlmIChmaWxlSWQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBmaWxlSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zYXZlSW5DbG91ZCh7XG4gICAgICBmaWxlSWQ6IGZpbGVJZC5kYXRhLFxuICAgICAgbmFtZSxcbiAgICAgIG5vZGVJZFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHQuZGF0YVxuICAgIH07XG4gIH1cblxuICBhc3luYyBsb2dvdXQoc2Vzc2lvbklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIG5vZGVzQ2FjaGUuY2xlYXIoKTtcbiAgICBmaWxlc0NhY2hlLmNsZWFyKCk7XG4gICAgYXdhaXQgc3VwZXIubG9nb3V0KHNlc3Npb25JZCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGb2xkZXIoe1xuICAgIG5hbWUsXG4gICAgcGFyZW50Rm9sZGVySWRcbiAgfToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXJlbnRGb2xkZXJJZD86IHN0cmluZyB8IG51bGw7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IGtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBzb2RpdW0udG9faGV4KGtleSkpO1xuICAgIGNvbnN0IGVuY3J5cHRlZEtleSA9IGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICBrZXksXG4gICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICk7XG4gICAgY29uc3QgeyBjcmVhdGVGb2xkZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgY3JlYXRlRm9sZGVyOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBlbmNyeXB0ZWROYW1lLFxuICAgICAgICAgIHBhcmVudEZvbGRlcklkLFxuICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChlbmNyeXB0ZWRLZXkpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gQ3JlYXRlRm9sZGVyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGNyZWF0ZUZvbGRlcjogbm9kZUZ1bGxTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghY3JlYXRlRm9sZGVyKSB7XG4gICAgICAvL3Rocm93IG5ldyBFcnJvcihgQ2FuJ3QgY3JlYXRlIGZvbGRlcmApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGNyZWF0ZUZvbGRlci5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGb2xkZXI7XG4gICAgfVxuXG4gICAgaWYgKGNyZWF0ZUZvbGRlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGNyZWF0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWNyZWF0ZUZvbGRlci5jcmVhdGVGb2xkZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbGRlciA9IGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwoXG4gICAgICBjcmVhdGVGb2xkZXIuY3JlYXRlRm9sZGVyLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICk7XG5cbiAgICBjb25zdCB1c2VycyA9XG4gICAgICBmb2xkZXIucGFyZW50Py51c2Vycz8uZmlsdGVyKFxuICAgICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSAhPT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICAgICkgPz8gW107XG5cbiAgICBpZiAodXNlcnMubGVuZ3RoKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgdXNlcnMubWFwKChbdSwgcmlnaHRzXSkgPT5cbiAgICAgICAgICB0aGlzLnNoYXJlTm9kZSh7XG4gICAgICAgICAgICBub2RlSWQ6IGZvbGRlci5pZCxcbiAgICAgICAgICAgIHJpZ2h0cyxcbiAgICAgICAgICAgIHVzZXJJZDogdS5pZFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBmb2xkZXJcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbm9kZSh7XG4gICAgaWQsXG4gICAgZGVsZXRlZFxuICB9OiB7XG4gICAgaWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGRlbGV0ZWQ/OiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSA9IHt9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Tm9kZUZ1bGw+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBub2RlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIG5vZGU6IFtcbiAgICAgICAgeyBkZWxldGVkLCBpZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG5vZGU6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChub2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGlmICghbm9kZS5ub2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKG5vZGUubm9kZSwgdGhpcy4ja2V5cyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmlsZSh7XG4gICAgaWRcbiAgfToge1xuICAgIGlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxTZWNyZWN5RmlsZT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGZpbGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZmlsZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRmlsZVF1ZXJ5UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGZpbGU6IGZpbGVTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbGUuZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gZ3FsRmlsZVRvRXh0ZXJuYWwoZmlsZS5maWxlLCB0aGlzLiNrZXlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIG1haWwoe1xuICAgIGlkXG4gIH06IHtcbiAgICBpZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8TWFpbD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IG1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBtYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBRdWVyeU1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWFpbDogbWFpbFNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChtYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIG1haWw7XG4gICAgfVxuXG4gICAgaWYgKCFtYWlsLm1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG1haWwubWFpbCwgdGhpcy4ja2V5cyk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlZE5vZGVzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPE5vZGVbXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkZWxldGVkTm9kZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgZGVsZXRlZE5vZGVzOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIERlbGV0ZWROb2Rlc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGRlbGV0ZWROb2Rlczogbm9kZVNlbGVjdG9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlZE5vZGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlZE5vZGVzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZWROb2RlcztcbiAgICB9XG5cbiAgICBjb25zdCBub2RlcyA9IG5ldyBBcnJheTxOb2RlPigpO1xuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIGRlbGV0ZWROb2Rlcy5kZWxldGVkTm9kZXMpIHtcbiAgICAgIG5vZGVzLnB1c2goYXdhaXQgZ3FsTm9kZVRvRXh0ZXJuYWwobm9kZSwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2hhcmVkTm9kZXMoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Tm9kZVtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHNoYXJlZE5vZGVzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIpKHtcbiAgICAgIHNoYXJlZE5vZGVzOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFNoYXJlZE5vZGVzUmVzcG9uc2VcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgc2hhcmVkTm9kZXM6IG5vZGVTZWxlY3RvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXNoYXJlZE5vZGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2hhcmVkTm9kZXMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVkTm9kZXM7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBuZXcgQXJyYXk8Tm9kZT4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIHNoYXJlZE5vZGVzLnNoYXJlZE5vZGVzKSB7XG4gICAgICBub2Rlcy5wdXNoKGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbm9kZXNTaGFyZWRXaXRoTWUoXG4gICAgdHlwZT86IE5vZGVUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxOb2RlW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBub2Rlc1NoYXJlZFdpdGhNZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBub2Rlc1NoYXJlZFdpdGhNZTogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBOb2Rlc1NoYXJlZFdpdGhNZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBub2Rlc1NoYXJlZFdpdGhNZTogbm9kZVNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW5vZGVzU2hhcmVkV2l0aE1lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobm9kZXNTaGFyZWRXaXRoTWUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbm9kZXNTaGFyZWRXaXRoTWU7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBuZXcgQXJyYXk8Tm9kZT4oKTtcblxuICAgIGZvciAoY29uc3QgZm9sZGVyIG9mIG5vZGVzU2hhcmVkV2l0aE1lLm5vZGVzU2hhcmVkV2l0aE1lKSB7XG4gICAgICBub2Rlcy5wdXNoKGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsKGZvbGRlciwgdGhpcy4ja2V5cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogbm9kZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTm9kZVNoYXJpbmcoe1xuICAgIG5vZGVJZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIG5vZGVJZDogc3RyaW5nO1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZU5vZGVTaGFyaW5nIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU5vZGVTaGFyaW5nOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZU5vZGVTaGFyaW5nUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU5vZGVTaGFyaW5nOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZU5vZGVTaGFyaW5nKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlTm9kZVNoYXJpbmcuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlTm9kZVNoYXJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVOb2RlU2hhcmluZy5kZWxldGVOb2RlU2hhcmluZ1xuICAgIH07XG4gIH1cblxuICBhc3luYyBkdXBsaWNhdGVOb2RlKHtcbiAgICBub2RlSWQsXG4gICAgZm9sZGVySWQsXG4gICAgY3VzdG9tTmFtZVxuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgZm9sZGVySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGN1c3RvbU5hbWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vZGUgKCR7bm9kZUlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghbm9kZS5hY2Nlc3M/Lm5hbWVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgaGF2ZSBhY2Nlc3MgdG8gbm9kZSAke25vZGVJZH1gKTtcbiAgICB9XG4gICAgY3VzdG9tTmFtZSA9IGN1c3RvbU5hbWVcbiAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUoY3VzdG9tTmFtZSwgbm9kZS5hY2Nlc3MubmFtZUtleSlcbiAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IHsgZHVwbGljYXRlTm9kZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkdXBsaWNhdGVOb2RlOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgZm9sZGVySWQsXG4gICAgICAgICAgY3VzdG9tTmFtZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIER1cGxpY2F0ZU5vZGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZHVwbGljYXRlTm9kZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkdXBsaWNhdGVOb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZHVwbGljYXRlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkdXBsaWNhdGVOb2RlO1xuICAgIH1cblxuICAgIGlmIChkdXBsaWNhdGVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZHVwbGljYXRlTm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGR1cGxpY2F0ZU5vZGUuZHVwbGljYXRlTm9kZVxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGVOb2RlQ2xvdWRUcmFzaCh7XG4gICAgaWRzXG4gIH06IHtcbiAgICBpZHM6IEFycmF5PHN0cmluZz47XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTm9kZUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlTm9kZUNsb3VkVHJhc2g6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkc1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVOb2RlQ2xvdWRUcmFzaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVOb2RlQ2xvdWRUcmFzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVOb2RlQ2xvdWRUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZU5vZGVDbG91ZFRyYXNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZU5vZGVDbG91ZFRyYXNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGVsZXRlTm9kZUNsb3VkVHJhc2guZGVsZXRlTm9kZUNsb3VkVHJhc2ggPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2hhcmVOb2RlKHtcbiAgICBub2RlSWQsXG4gICAgdXNlcklkLFxuICAgIHJpZ2h0c1xuICB9OiB7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgcmlnaHRzOiBSaWdodHM7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlcih7IHVzZXJJZCwgd2l0aFB1YmxpY0tleTogdHJ1ZSB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhcmVOb2RlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNoYXJlTm9kZTogW1xuICAgICAgICB7IG5vZGVJZCwgdXNlcklkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2hhcmVOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG5vZGVzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXNoYXJlTm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNoYXJlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBzaGFyZU5vZGU7XG4gICAgfVxuXG4gICAgaWYgKHNoYXJlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHNoYXJlTm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCBzaGFyZU5vZGVzOiBTaGFyZU5vZGVzSW5wdXQgPSB7XG4gICAgICBub2RlczogW11cbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBpZCBvZiBzaGFyZU5vZGUubm9kZXMpIHtcbiAgICAgIGNvbnN0IG5hbWVLZXkgPSBhd2FpdCB0aGlzLnBlck5vZGUoaWQsIHVzZXIuZGF0YS5wdWJsaWNLZXkpO1xuICAgICAgaWYgKG5hbWVLZXkpIHtcbiAgICAgICAgc2hhcmVOb2Rlcy5ub2Rlcy5wdXNoKG5hbWVLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2hhcmVOb2RlRmluaXNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNoYXJlTm9kZUZpbmlzaDogW1xuICAgICAgICB7XG4gICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBzaGFyZU5vZGVzXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gU2hhcmVOb2RlRmluaXNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNoYXJlTm9kZUZpbmlzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzaGFyZU5vZGVGaW5pc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGVGaW5pc2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2hhcmVOb2RlRmluaXNoO1xuICAgIH1cblxuICAgIGlmIChzaGFyZU5vZGVGaW5pc2guX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBzaGFyZU5vZGVGaW5pc2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBzaGFyZU5vZGVGaW5pc2guc2hhcmVOb2RlRmluaXNoID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZU5vZGUoe1xuICAgIG5vZGVJZCxcbiAgICBuYW1lLFxuICAgIGlzRmF2b3JpdGUsXG4gICAgZGVsZXRlZEF0XG4gIH06IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBpc0Zhdm9yaXRlPzogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgZGVsZXRlZEF0PzogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxOb2RlRnVsbD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGxldCBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMubm9kZSh7IGlkOiBub2RlSWQgfSk7XG4gICAgICBub2RlID0gbm9kZXNDYWNoZS5nZXQobm9kZUlkKTtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBOb2RlICR7bm9kZUlkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFub2RlLmFjY2Vzcz8ubmFtZUtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBoYXZlIGFjY2VzcyB0byBub2RlICR7bm9kZUlkfWApO1xuICAgIH1cblxuICAgIG5hbWUgPSBuYW1lXG4gICAgICA/IG5vZGUuYWNjZXNzPy5uYW1lS2V5XG4gICAgICAgID8gYXdhaXQgZW5jcnlwdE5hbWUobmFtZSwgbm9kZS5hY2Nlc3MubmFtZUtleSlcbiAgICAgICAgOiBuYW1lXG4gICAgICA6IG51bGw7XG5cbiAgICBjb25zdCB7IHVwZGF0ZU5vZGUgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgdXBkYXRlTm9kZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbm9kZUlkLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaXNGYXZvcml0ZSxcbiAgICAgICAgICBkZWxldGVkQXRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVOb2RlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZU5vZGU6IG5vZGVGdWxsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlTm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZU5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlTm9kZTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZU5vZGU7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVOb2RlLnVwZGF0ZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdxbE5vZGVUb0V4dGVybmFsTm9kZUZ1bGwoXG4gICAgICB1cGRhdGVOb2RlLnVwZGF0ZU5vZGUsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZWRNYWlscyh7XG4gICAgbWFpbFR5cGVcbiAgfToge1xuICAgIG1haWxUeXBlOiBNYWlsVHlwZTtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPE1haWxbXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRlbGV0ZWRNYWlscyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGRlbGV0ZWRNYWlsczogW1xuICAgICAgICB7IG1haWxUeXBlIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERlbGV0ZWRNYWlsc1Jlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVkTWFpbHM6IG1haWxTZWxlY3RvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVkTWFpbHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVkTWFpbHMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlZE1haWxzO1xuICAgIH1cblxuICAgIGNvbnN0IG1haWxzID0gbmV3IEFycmF5PE1haWw+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgZGVsZXRlZE1haWxzLmRlbGV0ZWRNYWlscykge1xuICAgICAgY29uc3QgbWFpbCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpO1xuICAgICAgaWYgKG1haWwpIHtcbiAgICAgICAgbWFpbHMucHVzaChtYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG1haWxzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMoXG4gICAgbm90aWZpY2F0aW9uczogUGFydGlhbDxVc2VyQXBwTm90aWZpY2F0aW9ucz5cbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VXNlckFwcE5vdGlmaWNhdGlvbnM+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyB1cGRhdGVBcHBOb3RpZmljYXRpb25zIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXBkYXRlQXBwTm90aWZpY2F0aW9uczogW1xuICAgICAgICBub3RpZmljYXRpb25zLFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVBcHBOb3RpZmljYXRpb25zUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgICAgICAgZW5hYmxlQWxsOiB0cnVlLFxuICAgICAgICAgICAgICBtYWlsOiB0cnVlLFxuICAgICAgICAgICAgICBjbG91ZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZGlzYWJsZUFsbFVudGlsOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1cGRhdGVBcHBOb3RpZmljYXRpb25zLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZUFwcE5vdGlmaWNhdGlvbnM7XG4gICAgfVxuXG4gICAgaWYgKCF1cGRhdGVBcHBOb3RpZmljYXRpb25zLnVwZGF0ZUFwcE5vdGlmaWNhdGlvbnMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogdXBkYXRlQXBwTm90aWZpY2F0aW9ucy51cGRhdGVBcHBOb3RpZmljYXRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGFwcE5vdGlmaWNhdGlvbnMoKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxVc2VyQXBwTm90aWZpY2F0aW9ucz5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgYXBwTm90aWZpY2F0aW9ucyB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGFwcE5vdGlmaWNhdGlvbnM6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gVXNlckFwcE5vdGlmaWNhdGlvbnNcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgZW5hYmxlQWxsOiB0cnVlLFxuICAgICAgICAgIG1haWw6IHRydWUsXG4gICAgICAgICAgY2xvdWQ6IHRydWUsXG4gICAgICAgICAgZGlzYWJsZUFsbFVudGlsOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghYXBwTm90aWZpY2F0aW9ucykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFwcE5vdGlmaWNhdGlvbnMuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gYXBwTm90aWZpY2F0aW9ucztcbiAgICB9XG5cbiAgICBpZiAoYXBwTm90aWZpY2F0aW9ucy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGFwcE5vdGlmaWNhdGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBhcHBOb3RpZmljYXRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU1haWwoXG4gICAgZGF0YTogTmV3TWFpbCxcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQmFzaWMgfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGw+IHtcbiAgICBjb25zdCBtYWlsID0gYXdhaXQgdGhpcy5jcmVhdGVEcmFmdE1haWwoZGF0YSk7XG4gICAgaWYgKCFtYWlsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgICBkYXRhOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAobWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIG1haWw7XG4gICAgfVxuXG4gICAgaWYgKG1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gbWFpbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNlbmREcmFmdE1haWwoXG4gICAgICBtYWlsLmRhdGEubWFpbEludGVncml0eUlkLFxuICAgICAgY3VzdG9tTWVzc2FnZVxuICAgICk7XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHdhaXRpbmdSZWNlaXZlZE1haWxzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFdhaXRpbmdSZWNlaXZlZE1haWxbXT4gfCBFcnJvck5vdEZvdW5kIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVzZXIgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgd2FpdGluZ1JlY2VpdmVkTWFpbHM6IHtcbiAgICAgICAgICAgICAgICBkYXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB7XG4gICAgICAgICAgICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGZpcnN0bmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxhc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgZW1haWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgZmlyc3RuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbGFzdG5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBlbWFpbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50czoge1xuICAgICAgICAgICAgICAgICAgZW1haWw6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICghdXNlci51c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB1c2VyLnVzZXIud2FpdGluZ1JlY2VpdmVkTWFpbHMubWFwKG0gPT4gKHtcbiAgICAgIGlkOiBnZW5lcmF0ZSgpLFxuICAgICAgLi4ubSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKG0uZGF0ZSBhcyBzdHJpbmcpXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRHJhZnRNYWlsKFxuICAgIGRyYWZ0SWQ6IHN0cmluZyxcbiAgICB7IGJvZHksIHN1YmplY3QsIGZpbGVzLCByZWNpcGllbnRzSWRzLCByZXBseVRvIH06IFBhcnRpYWw8TmV3TWFpbD5cbiAgKTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxEcmFmdE1haWw+XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCBkcmFmdHMgPSBhd2FpdCB0aGlzLmRyYWZ0TWFpbHMoKTtcbiAgICBpZiAoIWRyYWZ0cykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRyYWZ0cy5fX3R5cGVuYW1lICE9PSBcIlN1Y2Nlc3NSZXNwb25zZVwiKSB7XG4gICAgICByZXR1cm4gZHJhZnRzO1xuICAgIH1cbiAgICBjb25zdCBkcmFmdCA9IGRyYWZ0cy5kYXRhLmZpbmQoZCA9PiBkLm1haWxJbnRlZ3JpdHlJZCA9PT0gZHJhZnRJZCk7XG4gICAgaWYgKCFkcmFmdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRyYWZ0ICR7ZHJhZnRJZH1gKTtcbiAgICB9XG4gICAgbGV0IGhhc2hLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoYXNoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBpZiAoYm9keSB8fCBzdWJqZWN0KSB7XG4gICAgICBoYXNoS2V5ID0gc29kaXVtLnJhbmRvbWJ5dGVzX2J1ZihcbiAgICAgICAgc29kaXVtLmNyeXB0b19nZW5lcmljaGFzaF9LRVlCWVRFUyxcbiAgICAgICAgXCJoZXhcIlxuICAgICAgKTtcbiAgICAgIGhhc2ggPSBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoKFxuICAgICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7IGJvZHksIHN1YmplY3QgfSksXG4gICAgICAgIGhhc2hLZXksXG4gICAgICAgIFwiaGV4XCJcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgaWYgKGZpbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgICAgbGV0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGYuaWQgfSk7XG4gICAgICAgICAgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlICR7Zi5uYW1lfSAoJHtmLmlkfSkgZG9lcyBub3QgZXhpc3RzYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbmRlckZpbGVzLnB1c2goe1xuICAgICAgICAgIGlkOiBmaWxlLmlkLFxuICAgICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZmlsZS5rZXkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuYW1lOiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgdXBkYXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVwZGF0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRJZCxcbiAgICAgICAgICByZWNpcGllbnRzOiByZWNpcGllbnRzSWRzLFxuICAgICAgICAgIHJlcGx5VG8sXG4gICAgICAgICAgYm9keTogYm9keVxuICAgICAgICAgICAgPyBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoYm9keSksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgIHN1YmplY3Q6IHN1YmplY3RcbiAgICAgICAgICAgID8gc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICBzZW5kZXJGaWxlcyxcbiAgICAgICAgICBoYXNoLFxuICAgICAgICAgIGhhc2hLZXlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVcGRhdGVEcmFmdE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXBkYXRlRHJhZnRNYWlsOiBtYWlsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXBkYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVwZGF0ZURyYWZ0TWFpbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlRHJhZnRNYWlsO1xuICAgIH1cblxuICAgIGlmICghdXBkYXRlRHJhZnRNYWlsLnVwZGF0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICB1cGRhdGVEcmFmdE1haWwudXBkYXRlRHJhZnRNYWlsLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkgYXMgRHJhZnRNYWlsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRHJhZnRNYWlsKFxuICAgIGRyYWZ0SWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZURyYWZ0TWFpbDogW1xuICAgICAgICB7XG4gICAgICAgICAgZHJhZnRJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVEcmFmdE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGVsZXRlRHJhZnRNYWlsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZURyYWZ0TWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkZWxldGVEcmFmdE1haWw7XG4gICAgfVxuXG4gICAgaWYgKCFkZWxldGVEcmFmdE1haWwuZGVsZXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRlbGV0ZURyYWZ0TWFpbC5kZWxldGVEcmFmdE1haWwgPz8gZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWFpbFRyYXNoKHtcbiAgICBpZHNcbiAgfToge1xuICAgIGlkczogQXJyYXk8c3RyaW5nPjtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVNYWlsVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZGVsZXRlTWFpbFRyYXNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZHNcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlTWFpbFRyYXNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZU1haWxUcmFzaDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkZWxldGVNYWlsVHJhc2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVNYWlsVHJhc2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlTWFpbFRyYXNoO1xuICAgIH1cblxuICAgIGlmICghZGVsZXRlTWFpbFRyYXNoLmRlbGV0ZU1haWxUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVNYWlsVHJhc2guZGVsZXRlTWFpbFRyYXNoXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGVtcHR5TWFpbFRyYXNoKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZW1wdHlNYWlsVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZW1wdHlNYWlsVHJhc2g6IHtcbiAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwiLi4ub24gRW1wdHlNYWlsVHJhc2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICBlbXB0eU1haWxUcmFzaDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWVtcHR5TWFpbFRyYXNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZW1wdHlNYWlsVHJhc2guX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZW1wdHlNYWlsVHJhc2g7XG4gICAgfVxuXG4gICAgaWYgKCFlbXB0eU1haWxUcmFzaC5lbXB0eU1haWxUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBlbXB0eU1haWxUcmFzaC5lbXB0eU1haWxUcmFzaFxuICAgIH07XG4gIH1cblxuICBhc3luYyBlbXB0eUNsb3VkVHJhc2goKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBlbXB0eUNsb3VkVHJhc2ggfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgZW1wdHlDbG91ZFRyYXNoOiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIEVtcHR5Q2xvdWRUcmFzaFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGVtcHR5Q2xvdWRUcmFzaDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWVtcHR5Q2xvdWRUcmFzaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGVtcHR5Q2xvdWRUcmFzaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBlbXB0eUNsb3VkVHJhc2g7XG4gICAgfVxuXG4gICAgaWYgKCFlbXB0eUNsb3VkVHJhc2guZW1wdHlDbG91ZFRyYXNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGVtcHR5Q2xvdWRUcmFzaC5lbXB0eUNsb3VkVHJhc2hcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVjb3Zlck5vZGUoXG4gICAgaWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyByZWNvdmVyTm9kZSB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICByZWNvdmVyTm9kZTogW1xuICAgICAgICB7IGlkIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gUmVjb3Zlck5vZGVSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgcmVjb3Zlck5vZGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghcmVjb3Zlck5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZWNvdmVyTm9kZS5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZWNvdmVyTm9kZTtcbiAgICB9XG5cbiAgICBpZiAocmVjb3Zlck5vZGUuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiByZWNvdmVyTm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlY292ZXJOb2RlLnJlY292ZXJOb2RlID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJNYWlsKHtcbiAgICBtYWlsSWRcbiAgfToge1xuICAgIG1haWxJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgcmVjb3Zlck1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgcmVjb3Zlck1haWw6IFtcbiAgICAgICAgeyBtYWlsSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBSZWNvdmVyTWFpbFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICByZWNvdmVyTWFpbDogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFyZWNvdmVyTWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHJlY292ZXJNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHJlY292ZXJNYWlsO1xuICAgIH1cblxuICAgIGlmIChyZWNvdmVyTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHJlY292ZXJNYWlsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogcmVjb3Zlck1haWwucmVjb3Zlck1haWxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmlsZSh7XG4gICAgZmlsZUlkLFxuICAgIG5vZGVJZFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkZWxldGVGaWxlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZUZpbGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpbGVJZCxcbiAgICAgICAgICBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RFeGlzdFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEZWxldGVGaWxlUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGV0ZUZpbGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGVsZXRlRmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRlbGV0ZUZpbGUuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGVsZXRlRmlsZTtcbiAgICB9XG5cbiAgICBpZiAoZGVsZXRlRmlsZS5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZUZpbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVGaWxlLmRlbGV0ZUZpbGVcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTm9kZSh7XG4gICAgbm9kZUlkXG4gIH06IHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkZWxldGVOb2RlIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIGRlbGV0ZU5vZGU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBub2RlSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVOb2RlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZU5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVOb2RlLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZU5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVOb2RlLmRlbGV0ZU5vZGVcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgbW92ZU5vZGVzKHtcbiAgICBub2RlSWRzLFxuICAgIHBhcmVudE5vZGVJZFxuICB9OiB7XG4gICAgbm9kZUlkczogc3RyaW5nW107XG4gICAgcGFyZW50Tm9kZUlkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBudWxsPiB7XG4gICAgY29uc3QgeyBtb3ZlTm9kZXMgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgbW92ZU5vZGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBub2RlSWRzLFxuICAgICAgICAgIHBhcmVudE5vZGVJZFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBNb3ZlTm9kZXNSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbW92ZU5vZGVzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIW1vdmVOb2Rlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1vdmVOb2Rlcy5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBtb3ZlTm9kZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBtb3ZlTm9kZXMubW92ZU5vZGVzID8/IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZU1haWwoe1xuICAgIG1haWxJZFxuICB9OiB7XG4gICAgbWFpbElkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGVsZXRlTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkZWxldGVNYWlsOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBtYWlsSWRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGVsZXRlTWFpbFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkZWxldGVNYWlsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRlbGV0ZU1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkZWxldGVNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRlbGV0ZU1haWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkZWxldGVNYWlsLmRlbGV0ZU1haWxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2F2ZUluQ2xvdWQoe1xuICAgIGZpbGVJZCxcbiAgICBuYW1lLFxuICAgIG5vZGVJZFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG5vZGVJZD86IHN0cmluZztcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8Tm9kZUZ1bGw+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgRXJyb3JMaW1pdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBpZiAobm9kZUlkICYmICFub2Rlc0NhY2hlLmhhcyhub2RlSWQpKSB7XG4gICAgICBhd2FpdCB0aGlzLm5vZGUoeyBpZDogbm9kZUlkIH0pO1xuICAgICAgaWYgKCFub2Rlc0NhY2hlLmhhcyhub2RlSWQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgX190eXBlbmFtZTogXCJFcnJvckJhc2ljXCIsXG4gICAgICAgICAgbWVzc2FnZTogYFRoZSBub2RlICR7bm9kZUlkfSBkb2VzIG5vdCBleGlzdHNgXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGtleSA9IFwiXCI7XG5cbiAgICBjb25zdCBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZmlsZUlkKTtcblxuICAgIGlmICghZmlsZSkge1xuICAgICAgYXdhaXQgdGhpcy5maWxlKHsgaWQ6IGZpbGVJZCB9KTtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc0NhY2hlLmdldChmaWxlSWQpID8/IG51bGw7XG4gICAgICBpZiAoIWZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVjZWl2ZWRNYWlscyA9IGF3YWl0IHRoaXMucmVjZWl2ZWRNYWlscygpO1xuICAgICAgICBpZiAoIXJlY2VpdmVkTWFpbHMpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVjZWl2ZWRNYWlscy5fX3R5cGVuYW1lICE9PSBcIlN1Y2Nlc3NSZXNwb25zZVwiKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWFpbCA9IHJlY2VpdmVkTWFpbHMuZGF0YS5maW5kKG0gPT5cbiAgICAgICAgICBtLmZpbGVzLnNvbWUoZiA9PiBmLmlkID09PSBmaWxlSWQpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFtYWlsKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IFwiRXJyb3JCYXNpY1wiLFxuICAgICAgICAgICAgbWVzc2FnZTogYENhbid0IGZpbmQgbWFpbCB3aXRoIHRoZSBmaWxlICR7ZmlsZUlkfWBcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZU1haWwgPSBtYWlsLmZpbGVzLmZpbmQoZiA9PiBmLmlkID09PSBmaWxlSWQpO1xuXG4gICAgICAgIGlmICghZmlsZU1haWwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX190eXBlbmFtZTogXCJFcnJvckJhc2ljXCIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgQ2FuJ3QgZmluZCBtYWlsIHdpdGggdGhlIGZpbGUgJHtmaWxlSWR9YFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlS2V5ID0gZGVjcnlwdENyeXB0b0JveChcbiAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoZmlsZU1haWwua2V5KSxcbiAgICAgICAgICBtYWlsLnNlbmRlci5wdWJsaWNLZXksXG4gICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICk7XG5cbiAgICAgICAga2V5ID0gc29kaXVtLnRvX2hleChmaWxlS2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleSA9IGZpbGUua2V5O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBrZXkgPSBmaWxlLmtleTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBfX3R5cGVuYW1lOiBcIkVycm9yQmFzaWNcIixcbiAgICAgICAgbWVzc2FnZTogXCJVbmV4cGVjdGVkIGVycm9yIDNcIlxuICAgICAgfTtcbiAgICB9XG5cbiAgICBrZXkgPSBzb2RpdW0udG9faGV4KFxuICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgc29kaXVtLmZyb21faGV4KGtleSksXG4gICAgICAgIHRoaXMuI2tleXMucHVibGljS2V5LFxuICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgbmFtZUtleSA9IHNlY3JldHN0cmVhbUtleWdlbigpO1xuICAgIGNvbnN0IGVuY3J5cHRlZE5hbWUgPSBhd2FpdCBlbmNyeXB0TmFtZShuYW1lLCBzb2RpdW0udG9faGV4KG5hbWVLZXkpKTtcbiAgICBjb25zdCBlbmNyeXB0ZWROYW1lS2V5ID0gc29kaXVtLnRvX2hleChcbiAgICAgIGVuY3J5cHRDcnlwdG9Cb3gobmFtZUtleSwgdGhpcy4ja2V5cy5wdWJsaWNLZXksIHRoaXMuI2tleXMucHJpdmF0ZUtleSlcbiAgICApO1xuXG4gICAgY29uc3QgeyBzYXZlSW5DbG91ZCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBzYXZlSW5DbG91ZDogW1xuICAgICAgICB7XG4gICAgICAgICAgZmlsZUlkLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICBub2RlSWQsXG4gICAgICAgICAgZmlsZW5hbWU6IGVuY3J5cHRlZE5hbWUsXG4gICAgICAgICAgbmFtZUtleTogZW5jcnlwdGVkTmFtZUtleVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTGltaXRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFNhdmVJbkNsb3VkUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNhdmVJbkNsb3VkOiBub2RlRnVsbFNlbGVjdG9yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXNhdmVJbkNsb3VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc2F2ZUluQ2xvdWQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2F2ZUluQ2xvdWQ7XG4gICAgfVxuXG4gICAgaWYgKHNhdmVJbkNsb3VkLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gc2F2ZUluQ2xvdWQ7XG4gICAgfVxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTGltaXRcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cblxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cblxuICAgIGlmIChzYXZlSW5DbG91ZC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIHNhdmVJbkNsb3VkO1xuICAgIH1cblxuICAgIGlmICghc2F2ZUluQ2xvdWQuc2F2ZUluQ2xvdWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSBhd2FpdCBncWxOb2RlVG9FeHRlcm5hbE5vZGVGdWxsKFxuICAgICAgc2F2ZUluQ2xvdWQuc2F2ZUluQ2xvdWQsXG4gICAgICB0aGlzLiNrZXlzXG4gICAgKTtcblxuICAgIGNvbnN0IG1lID0gbm9kZS5wYXJlbnQ/LnVzZXJzLmZpbmQoXG4gICAgICAoW3VdKSA9PiB1LnB1YmxpY0tleSA9PT0gdGhpcy4ja2V5cy5wdWJsaWNLZXlcbiAgICApO1xuXG4gICAgaWYgKG1lICYmIFtcImFkbWluXCIsIFwid3JpdGVcIl0uaW5jbHVkZXMobWVbMV0pKSB7XG4gICAgICBjb25zdCBvdGhlcnMgPVxuICAgICAgICBub2RlLnBhcmVudD8udXNlcnMuZmlsdGVyKFxuICAgICAgICAgIChbdV0pID0+IHUucHVibGljS2V5ICE9PSB0aGlzLiNrZXlzLnB1YmxpY0tleVxuICAgICAgICApID8/IFtdO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3RoZXJzLm1hcCgoW3UsIHJpZ2h0c10pID0+XG4gICAgICAgICAgdGhpcy5zaGFyZU5vZGUoe1xuICAgICAgICAgICAgbm9kZUlkOiBub2RlLmlkLFxuICAgICAgICAgICAgcmlnaHRzLFxuICAgICAgICAgICAgdXNlcklkOiB1LmlkXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IG5vZGVcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGJHZXQ8VT4oe1xuICAgIGZpZWxkLFxuICAgIHVzZXJJZFxuICB9OiB7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxVPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yTm90RXhpc3RcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkYkdldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICBkYkdldDogW1xuICAgICAgICB7XG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYkdldFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBqc29uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiR2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiAoZGJHZXQuanNvbiBhcyB7IHJlczogVSB9KS5yZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGJTZXQ8VCBleHRlbmRzIFVzZXJEYXRhLCBVIGV4dGVuZHMgRG9jdW1lbnQ+KHtcbiAgICB2YWx1ZSxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZhbHVlOiBVO1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxUPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JOb3RGb3VuZCB8IG51bGw+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGB2YWx1ZSBzaG91bGQgYmUgYW4gb2JqZWN0IGluY2x1ZGluZyBmaWVsZHMgeW91IHdhbnQgdG8gdXBkYXRlLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYlNldCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkYlNldDogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHZhbHVlOiBzZXJpYWxpemUodmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGJTZXQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJTZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYlNldC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoIWRiU2V0LmRiU2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IChkYlNldC5kYlNldCBhcyB7IHJlczogVCB9KS5yZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGJTZWFyY2g8VD4oe1xuICAgIHNlYXJjaCxcbiAgICBmaWVsZFxuICB9OiB7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgfSk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFRbXT4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBFcnJvck5vdEV4aXN0IHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGRiU2VhcmNoIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGRiU2VhcmNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZWFyY2gsXG4gICAgICAgICAgZmllbGRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiU2VhcmNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGpzb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJTZWFyY2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYlNlYXJjaDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZWFyY2guX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBkYlNlYXJjaDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZWFyY2guX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBkYlNlYXJjaDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiU2VhcmNoLmpzb24gYXMgdW5rbm93biBhcyBUW11cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2VuZERyYWZ0TWFpbChcbiAgICBkcmFmdElkOiBzdHJpbmcsXG4gICAgY3VzdG9tTWVzc2FnZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgKTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8Ym9vbGVhbj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsPiB7XG4gICAgY29uc3QgZHJhZnRzID0gYXdhaXQgdGhpcy5kcmFmdE1haWxzKCk7XG5cbiAgICBpZiAoIWRyYWZ0cykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChkcmFmdHMuX190eXBlbmFtZSAhPT0gXCJTdWNjZXNzUmVzcG9uc2VcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZHJhZnQgPSBkcmFmdHMuZGF0YS5maW5kKGQgPT4gZC5tYWlsSW50ZWdyaXR5SWQgPT09IGRyYWZ0SWQpO1xuICAgIGlmICghZHJhZnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCByZWNpcGllbnRzID0gbmV3IEFycmF5PE1haWxSZWNpcGllbnRJbnB1dD4oKTtcblxuICAgIGNvbnN0IHRlbXBvcmFyeVJlY2lwaWVudHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCB7IGVtYWlsIH0gb2YgZHJhZnQudGVtcG9yYXJ5UmVjaXBpZW50cykge1xuICAgICAgaWYgKCFlbWFpbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5fZWFjaFVzZXIoXG4gICAgICAgIGRyYWZ0LmZpbGVzLFxuICAgICAgICBkcmFmdC5zdWJqZWN0LFxuICAgICAgICBkcmFmdC5ib2R5LFxuICAgICAgICBlbWFpbFxuICAgICAgKTtcblxuICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICB0ZW1wb3JhcnlSZWNpcGllbnRzLnB1c2goZW1haWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjaXBpZW50cy5wdXNoKGlucHV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHsgaWQgfSBvZiBkcmFmdC5yZWNpcGllbnRzKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICBkcmFmdC5maWxlcyxcbiAgICAgICAgZHJhZnQuc3ViamVjdCxcbiAgICAgICAgZHJhZnQuYm9keSxcbiAgICAgICAgaWRcbiAgICAgICk7XG5cbiAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgdGVtcG9yYXJ5UmVjaXBpZW50cy5wdXNoKGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY2lwaWVudHMucHVzaChpbnB1dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBzZW5kRHJhZnRNYWlsIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHNlbmREcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRlbXBvcmFyeVJlY2lwaWVudHMsXG4gICAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgICAgICBkcmFmdE1haWxJZDogZHJhZnQubWFpbEludGVncml0eUlkLFxuICAgICAgICAgIGN1c3RvbU1lc3NhZ2VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBTZW5kRHJhZnRNYWlsUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHNlbmREcmFmdE1haWw6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghc2VuZERyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHNlbmREcmFmdE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gc2VuZERyYWZ0TWFpbDtcbiAgICB9XG5cbiAgICBpZiAoc2VuZERyYWZ0TWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIHNlbmREcmFmdE1haWw7XG4gICAgfVxuXG4gICAgaWYgKCFzZW5kRHJhZnRNYWlsLnNlbmREcmFmdE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogc2VuZERyYWZ0TWFpbC5zZW5kRHJhZnRNYWlsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNlbmRXYWl0aW5nRW1haWxzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgbnVsbFxuICA+IHtcbiAgICAvLyBUT0RPIG9wdGkgdGhpc1xuICAgIGNvbnN0IG1haWxzID0gYXdhaXQgdGhpcy5zZW50TWFpbHMoKTtcblxuICAgIGlmICghbWFpbHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICAgIGRhdGE6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobWFpbHMuX190eXBlbmFtZSAhPT0gXCJTdWNjZXNzUmVzcG9uc2VcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgICAgZGF0YTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlcmVkID0gbWFpbHMuZGF0YS5maWx0ZXIobSA9PiBtLnRlbXBvcmFyeVJlY2lwaWVudHMubGVuZ3RoID4gMCk7XG5cbiAgICBmb3IgKGNvbnN0IG1haWwgb2YgZmlsdGVyZWQpIHtcbiAgICAgIGZvciAoY29uc3QgeyBlbWFpbCB9IG9mIG1haWwudGVtcG9yYXJ5UmVjaXBpZW50cykge1xuICAgICAgICBpZiAoIWVtYWlsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMuX2VhY2hVc2VyKFxuICAgICAgICAgICAgbWFpbC5maWxlcyxcbiAgICAgICAgICAgIG1haWwuc3ViamVjdCxcbiAgICAgICAgICAgIG1haWwuYm9keSxcbiAgICAgICAgICAgIGVtYWlsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgICAgICAgIHNlbmRPbmVNYWlsOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYWlsSW50ZWdyaXR5SWQ6IG1haWwubWFpbEludGVncml0eUlkLFxuICAgICAgICAgICAgICAgIHJlY2lwaWVudDogaW5wdXRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIuLi5vbiBSZWNvdmVyTm9kZVJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICByZWNvdmVyTm9kZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZURyYWZ0TWFpbCh7XG4gICAgYm9keSxcbiAgICBzdWJqZWN0LFxuICAgIGZpbGVzLFxuICAgIHJlY2lwaWVudHNJZHMsXG4gICAgcmVwbHlUb1xuICB9OiBOZXdNYWlsKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8RHJhZnRNYWlsPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgaGFzaEtleSA9IHNvZGl1bS5yYW5kb21ieXRlc19idWYoXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0tFWUJZVEVTLFxuICAgICAgXCJoZXhcIlxuICAgICk7XG4gICAgY29uc3QgaGFzaCA9IHNvZGl1bS5jcnlwdG9fZ2VuZXJpY2hhc2goXG4gICAgICBzb2RpdW0uY3J5cHRvX2dlbmVyaWNoYXNoX0JZVEVTLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoeyBib2R5LCBzdWJqZWN0IH0pLFxuICAgICAgaGFzaEtleSxcbiAgICAgIFwiaGV4XCJcbiAgICApO1xuICAgIGNvbnN0IHNlbmRlckZpbGVzID0gbmV3IEFycmF5PE1haWxGaWxlSW5wdXQ+KCk7XG4gICAgZm9yIChjb25zdCBmIG9mIGZpbGVzKSB7XG4gICAgICBsZXQgZmlsZSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgaWYgKCFmaWxlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlsZSh7IGlkOiBmLmlkIH0pO1xuICAgICAgICBmaWxlID0gZmlsZXNDYWNoZS5nZXQoZi5pZCk7XG4gICAgICAgIGlmICghZmlsZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSAke2YubmFtZX0gKCR7Zi5pZH0pIGRvZXMgbm90IGV4aXN0c2ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZW5kZXJGaWxlcy5wdXNoKHtcbiAgICAgICAgaWQ6IGZpbGUuaWQsXG4gICAgICAgIGZpbGVLZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhmaWxlLmtleSksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgbmFtZTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGYubmFtZSksXG4gICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBjcmVhdGVEcmFmdE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBEYXRlVGltZToge1xuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBjcmVhdGVEcmFmdE1haWw6IFtcbiAgICAgICAge1xuICAgICAgICAgIHJlY2lwaWVudHM6IHJlY2lwaWVudHNJZHMsXG4gICAgICAgICAgcmVwbHlUbyxcbiAgICAgICAgICBib2R5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKGJvZHkpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzdWJqZWN0OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgICAgZW5jcnlwdENyeXB0b0JveChcbiAgICAgICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgICAgICB0aGlzLiNrZXlzLnB1YmxpY0tleSxcbiAgICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBzZW5kZXJGaWxlcyxcbiAgICAgICAgICBoYXNoLFxuICAgICAgICAgIGhhc2hLZXlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBDcmVhdGVEcmFmdE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgY3JlYXRlRHJhZnRNYWlsOiBtYWlsU2VsZWN0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghY3JlYXRlRHJhZnRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY3JlYXRlRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGNyZWF0ZURyYWZ0TWFpbDtcbiAgICB9XG5cbiAgICBpZiAoY3JlYXRlRHJhZnRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRHJhZnRNYWlsO1xuICAgIH1cblxuICAgIGlmICghY3JlYXRlRHJhZnRNYWlsLmNyZWF0ZURyYWZ0TWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydEludGVybmFsTWFpbFRvRXh0ZXJuYWwoXG4gICAgICBjcmVhdGVEcmFmdE1haWwuY3JlYXRlRHJhZnRNYWlsLFxuICAgICAgdGhpcy4ja2V5c1xuICAgICkgYXMgRHJhZnRNYWlsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiByZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmlsZUNvbnRlbnQoe1xuICAgIGZpbGVJZCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgcHJvZ3Jlc3NEZWNyeXB0LFxuICAgIHNpZ25hbFxuICB9OiB7XG4gICAgZmlsZUlkOiBzdHJpbmc7XG4gICAgb25Eb3dubG9hZFByb2dyZXNzPzogKHByb2dyZXNzOiBEb3dubG9hZFByb2dyZXNzKSA9PiB2b2lkO1xuICAgIHByb2dyZXNzRGVjcnlwdD86IFByb2dyZXNzQ2FsbGJhY2s7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxVaW50OEFycmF5PiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBmaWxlQ29udGVudCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEJ5dGVzOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSwgdHlwZW9mIGUpO1xuICAgICAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbMSwgMiwgM10pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgVWludDhBcnJheSkudG9TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgZmlsZUNvbnRlbnQ6IFtcbiAgICAgICAgeyBmaWxlSWQgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRDbG91ZFwiOiB7XG4gICAgICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwYXJ0czoge1xuICAgICAgICAgICAgICAgICAgY29udGVudFVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG9yZGVyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbWQ1OiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBrZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgcHVibGljS2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwiLi4ub24gRmlsZUNvbnRlbnRMaXRlXCI6IHtcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAga2V5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHB1YmxpY0tleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1RW5jcnlwdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZTogdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcIi4uLm9uIEZpbGVDb250ZW50UmVjZWl2ZWRNYWlsXCI6IHtcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heWJlUGFydHM6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF5YmVDb250ZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzZW5kZXJQdWJsaWNLZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgdG90YWxTaXplOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZDVFbmNyeXB0ZWQ6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCIuLi5vbiBGaWxlQ29udGVudFNlbnRNYWlsXCI6IHtcbiAgICAgICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1heWJlUGFydHM6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnRVcmw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBvcmRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG1kNTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWF5YmVDb250ZW50OiB0cnVlLFxuICAgICAgICAgICAgICAgIGtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b3RhbFNpemU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWQ1OiB0cnVlLFxuICAgICAgICAgICAgICAgIG1kNUVuY3J5cHRlZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWZpbGVDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZmlsZUNvbnRlbnQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZmlsZUNvbnRlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVDb250ZW50Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZmlsZUNvbnRlbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVDb250ZW50LmZpbGU7XG4gICAgaWYgKCFmaWxlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmVzc1BhcnRzOiBSZWNvcmQ8bnVtYmVyLCBEb3dubG9hZFByb2dyZXNzPiA9IHt9O1xuICAgIGNvbnN0IG9uUHJvZ3Jlc3MgPSAoXG4gICAgICBwYXJ0OiBudW1iZXIsXG4gICAgICBwcm9ncmVzc0V2ZW50OiBEb3dubG9hZFByb2dyZXNzXG4gICAgKTogdm9pZCA9PiB7XG4gICAgICBwcm9ncmVzc1BhcnRzW3BhcnRdID0gcHJvZ3Jlc3NFdmVudDtcbiAgICAgIGNvbnN0IHRyYW5zZmVycmVkQnl0ZXMgPSBPYmplY3QudmFsdWVzKHByb2dyZXNzUGFydHMpLnJlZHVjZShcbiAgICAgICAgKHBydiwgY3VyKSA9PiBwcnYgKyBjdXIudHJhbnNmZXJyZWRCeXRlcyxcbiAgICAgICAgMFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRvdGFsQnl0ZXMgPSBOdW1iZXIoZmlsZS50b3RhbFNpemUpO1xuICAgICAgb25Eb3dubG9hZFByb2dyZXNzPy4oe1xuICAgICAgICBwZXJjZW50OiB0cmFuc2ZlcnJlZEJ5dGVzIC8gdG90YWxCeXRlcyxcbiAgICAgICAgdG90YWxCeXRlcyxcbiAgICAgICAgdHJhbnNmZXJyZWRCeXRlc1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZENvbnRlbnRGcm9tUGFydHMgPSBhc3luYyAoXG4gICAgICBmaWxlUGFydHM6IEZpbGVDb250ZW50UGFydFtdXG4gICAgKTogUHJvbWlzZTxVaW50OEFycmF5PiA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IG5ldyBBcnJheTx7IGRhdGE6IFVpbnQ4QXJyYXk7IG9yZGVyOiBudW1iZXIgfT4oKTtcblxuICAgICAgY29uc3QgYnlQYXJ0ID0gYXN5bmMgKHBhcnQ6IEZpbGVDb250ZW50UGFydCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBjb25zdCBidWYgPSBuZXcgVWludDhBcnJheShcbiAgICAgICAgICBhd2FpdCBreVxuICAgICAgICAgICAgLmdldChwYXJ0LmNvbnRlbnRVcmwsIHtcbiAgICAgICAgICAgICAgdGltZW91dDogZmFsc2UsXG4gICAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogcHIgPT4gb25Qcm9ncmVzcyhwYXJ0Lm9yZGVyLCBwciksXG4gICAgICAgICAgICAgIHNpZ25hbDogc2lnbmFsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFycmF5QnVmZmVyKClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbWQ1UGFydCA9IGF3YWl0IG1kNShidWYpO1xuICAgICAgICBpZiAobWQ1UGFydCAhPT0gcGFydC5tZDUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBtZDUgZm9yIHBhcnQgJHtwYXJ0Lm9yZGVyfSBvZiBmaWxlICR7ZmlsZUlkfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzLnB1c2goe1xuICAgICAgICAgIGRhdGE6IGJ1ZixcbiAgICAgICAgICBvcmRlcjogcGFydC5vcmRlclxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IHByb21pc2VBbGxMaW1pdChcbiAgICAgICAgMyxcbiAgICAgICAgZmlsZVBhcnRzLm1hcChwID0+ICgpOiBQcm9taXNlPHZvaWQ+ID0+IGJ5UGFydChwKSlcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBjb25jYXRlbmF0ZShcbiAgICAgICAgLi4ucGFydHMuc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpLm1hcChwID0+IHAuZGF0YSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZpbmFsaXplID0gYXN5bmMgKFxuICAgICAgZW5jcnlwdGVkQ29udGVudDogVWludDhBcnJheVxuICAgICk6IFByb21pc2U8VWludDhBcnJheT4gPT4ge1xuICAgICAgLy8gY29uc3QgbWQ1RW5jcnlwdGVkID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWQ1KG9mKGVuY3J5cHRlZENvbnRlbnQpKSk7XG4gICAgICBjb25zdCBtZDVFbmNyeXB0ZWQgPSBhd2FpdCBtZDUoZW5jcnlwdGVkQ29udGVudCk7XG5cbiAgICAgIGlmIChtZDVFbmNyeXB0ZWQgIT09IGZpbGUubWQ1RW5jcnlwdGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW5jcnlwdGVkIGNvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gZGVjcnlwdENyeXB0b0JveChcbiAgICAgICAgc29kaXVtLmZyb21faGV4KGZpbGUua2V5KSxcbiAgICAgICAgZmlsZS5fX3R5cGVuYW1lID09PSBcIkZpbGVDb250ZW50UmVjZWl2ZWRNYWlsXCJcbiAgICAgICAgICA/IGZpbGUuc2VuZGVyUHVibGljS2V5XG4gICAgICAgICAgOiBmaWxlLl9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRDbG91ZFwiXG4gICAgICAgICAgPyBmaWxlLnB1YmxpY0tleVxuICAgICAgICAgIDogdGhpcy4ja2V5cy5wdWJsaWNLZXksXG4gICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3JjID0gYXdhaXQgZGVjcnlwdChrZXksIGVuY3J5cHRlZENvbnRlbnQsIHByb2dyZXNzRGVjcnlwdCwgc2lnbmFsKTtcblxuICAgICAgLy8gY29uc3QgbWQ1Q29udGVudCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1kNShvZihzcmMpKSk7XG4gICAgICBjb25zdCBtZDVDb250ZW50ID0gYXdhaXQgbWQ1KHNyYyk7XG5cbiAgICAgIGlmIChtZDVDb250ZW50ICE9PSBmaWxlLm1kNSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRlbnQgZG9lcyBub3QgbWF0Y2hgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuY29tcHJlc3Moc3JjKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZW5jcnlwdGVkQ29udGVudCA9XG4gICAgICBmaWxlLl9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRMaXRlXCJcbiAgICAgICAgPyBmaWxlLmNvbnRlbnRcbiAgICAgICAgOiBmaWxlLl9fdHlwZW5hbWUgPT09IFwiRmlsZUNvbnRlbnRDbG91ZFwiXG4gICAgICAgID8gYXdhaXQgZW5jcnlwdGVkQ29udGVudEZyb21QYXJ0cyhmaWxlLnBhcnRzKVxuICAgICAgICA6IGZpbGUubWF5YmVDb250ZW50XG4gICAgICAgID8gZmlsZS5tYXliZUNvbnRlbnRcbiAgICAgICAgOiBmaWxlLm1heWJlUGFydHNcbiAgICAgICAgPyBhd2FpdCBlbmNyeXB0ZWRDb250ZW50RnJvbVBhcnRzKGZpbGUubWF5YmVQYXJ0cylcbiAgICAgICAgOiBudWxsO1xuXG4gICAgaWYgKCFlbmNyeXB0ZWRDb250ZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGF3YWl0IGZpbmFsaXplKGVuY3J5cHRlZENvbnRlbnQpXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHJlYWRNYWlsKHtcbiAgICBtYWlsSWRcbiAgfToge1xuICAgIG1haWxJZDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxcbiAgICB8IFN1Y2Nlc3NSZXNwb25zZTxib29sZWFuPlxuICAgIHwgRXJyb3JBY2Nlc3NEZW5pZWRcbiAgICB8IEVycm9yQmFzaWNcbiAgICB8IEVycm9yTm90Rm91bmRcbiAgICB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyByZWFkTWFpbCB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJtdXRhdGlvblwiKSh7XG4gICAgICByZWFkTWFpbDogW1xuICAgICAgICB7IG1haWxJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gUmVhZE1haWxSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgcmVhZE1haWw6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghcmVhZE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZWFkTWFpbC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiByZWFkTWFpbDtcbiAgICB9XG5cbiAgICBpZiAocmVhZE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiByZWFkTWFpbDtcbiAgICB9XG5cbiAgICBpZiAocmVhZE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiByZWFkTWFpbDtcbiAgICB9XG5cbiAgICBpZiAoIXJlYWRNYWlsLnJlYWRNYWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlYWRNYWlsLnJlYWRNYWlsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVucmVhZE1haWwoe1xuICAgIG1haWxJZFxuICB9OiB7XG4gICAgbWFpbElkOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPGJvb2xlYW4+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVucmVhZE1haWwgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwibXV0YXRpb25cIikoe1xuICAgICAgdW5yZWFkTWFpbDogW1xuICAgICAgICB7IG1haWxJZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVW5yZWFkTWFpbFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1bnJlYWRNYWlsOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVucmVhZE1haWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1bnJlYWRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVucmVhZE1haWw7XG4gICAgfVxuXG4gICAgaWYgKHVucmVhZE1haWwuX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiB1bnJlYWRNYWlsO1xuICAgIH1cblxuICAgIGlmICh1bnJlYWRNYWlsLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdW5yZWFkTWFpbDtcbiAgICB9XG5cbiAgICBpZiAoIXVucmVhZE1haWwudW5yZWFkTWFpbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB1bnJlYWRNYWlsLnVucmVhZE1haWxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgYXBwU2V0dGluZ3MoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VXNlckFwcFNldHRpbmdzPiB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiKSh7XG4gICAgICB1c2VyOiBbXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVzZXJSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgdXNlcjoge1xuICAgICAgICAgICAgICBhcHBTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIGNsb3VkRmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2xvdWRGb2xkZXJEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGhpc3RvcnlGaWxlRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoaXN0b3J5TWF4RmlsZUNvdW50OiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICghdXNlci51c2VyPy5hcHBTZXR0aW5ncykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB1c2VyLnVzZXIuYXBwU2V0dGluZ3NcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXBwU2V0dGluZ3MoXG4gICAgc2V0dGluZ3M6IFBhcnRpYWw8VXNlckFwcFNldHRpbmdzPlxuICApOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxVc2VyQXBwU2V0dGluZ3M+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IHVwZGF0ZUFwcFNldHRpbmdzIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcIm11dGF0aW9uXCIpKHtcbiAgICAgIHVwZGF0ZUFwcFNldHRpbmdzOiBbXG4gICAgICAgIHNldHRpbmdzLFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIFVwZGF0ZUFwcFNldHRpbmdzUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVwZGF0ZUFwcFNldHRpbmdzOiB7XG4gICAgICAgICAgICAgIGNsb3VkRmlsZURheXNGb3JEZWxldGU6IHRydWUsXG4gICAgICAgICAgICAgIGNsb3VkRm9sZGVyRGF5c0ZvckRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaGlzdG9yeUZpbGVEYXlzRm9yRGVsZXRlOiB0cnVlLFxuICAgICAgICAgICAgICBoaXN0b3J5TWF4RmlsZUNvdW50OiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVwZGF0ZUFwcFNldHRpbmdzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlQXBwU2V0dGluZ3MuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlQXBwU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZUFwcFNldHRpbmdzLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gdXBkYXRlQXBwU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiB1cGRhdGVBcHBTZXR0aW5ncy51cGRhdGVBcHBTZXR0aW5nc1xuICAgIH07XG4gIH1cblxuICBhc3luYyByZWNlaXZlZE1haWxzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFJlY2VpdmVkTWFpbFtdPiB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgdXNlciB9ID0gYXdhaXQgdGhpcy5jbGllbnQoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIHVzZXI6IFtcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gVXNlclJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICB1c2VyOiB7XG4gICAgICAgICAgICAgIHJlY2VpdmVkTWFpbHM6IG1haWxTZWxlY3RvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodXNlci5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VyLnVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRPRE8gZ2V0IGFjdHVhbCBtYWlscyBvbiB0aGlzIGFwcCBvbmx5XG5cbiAgICBjb25zdCByZWNlaXZlZE1haWxzID0gbmV3IEFycmF5PFJlY2VpdmVkTWFpbD4oKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiB1c2VyLnVzZXIucmVjZWl2ZWRNYWlscykge1xuICAgICAgY29uc3QgbWFpbCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpO1xuICAgICAgaWYgKG1haWwpIHtcbiAgICAgICAgcmVjZWl2ZWRNYWlscy5wdXNoKG1haWwgYXMgUmVjZWl2ZWRNYWlsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHJlY2VpdmVkTWFpbHNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2VudE1haWxzKCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPFNlbnRNYWlsW10+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgc2VudE1haWxzOiBtYWlsU2VsZWN0b3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghdXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHVzZXIuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH1cblxuICAgIGlmICghdXNlci51c2VyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUT0RPIGdldCBhY3R1YWwgbWFpbHMgb24gdGhpcyBhcHAgb25seVxuXG4gICAgY29uc3Qgc2VudE1haWxzID0gbmV3IEFycmF5PFNlbnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIHVzZXIudXNlci5zZW50TWFpbHMpIHtcbiAgICAgIGNvbnN0IG1haWwgPSBjb252ZXJ0SW50ZXJuYWxNYWlsVG9FeHRlcm5hbChtLCB0aGlzLiNrZXlzKTtcbiAgICAgIGlmIChtYWlsKSB7XG4gICAgICAgIHNlbnRNYWlscy5wdXNoKG1haWwgYXMgU2VudE1haWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogc2VudE1haWxzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRyYWZ0TWFpbHMoKTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8RHJhZnRNYWlsW10+IHwgRXJyb3JOb3RGb3VuZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1c2VyIH0gPSBhd2FpdCB0aGlzLmNsaWVudChcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgRGF0ZVRpbWU6IHtcbiAgICAgICAgICBkZWNvZGU6IChlOiB1bmtub3duKSA9PiBuZXcgRGF0ZShlIGFzIHN0cmluZyksXG4gICAgICAgICAgZW5jb2RlOiAoZTogdW5rbm93bikgPT4gKGUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgdXNlcjogW1xuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBVc2VyUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgZHJhZnRNYWlsczogbWFpbFNlbGVjdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh1c2VyLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gdXNlcjtcbiAgICB9XG5cbiAgICBpZiAoIXVzZXIudXNlcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyBnZXQgYWN0dWFsIG1haWxzIG9uIHRoaXMgYXBwIG9ubHlcblxuICAgIGNvbnN0IGRyYWZ0TWFpbHMgPSBuZXcgQXJyYXk8RHJhZnRNYWlsPigpO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIHVzZXIudXNlci5kcmFmdE1haWxzKSB7XG4gICAgICBjb25zdCBkcmFmdCA9IGNvbnZlcnRJbnRlcm5hbE1haWxUb0V4dGVybmFsKG0sIHRoaXMuI2tleXMpIGFzIERyYWZ0TWFpbDtcbiAgICAgIGlmIChkcmFmdCkge1xuICAgICAgICBkcmFmdE1haWxzLnB1c2goZHJhZnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZHJhZnRNYWlsc1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBlck5vZGUgPSBhc3luYyAoXG4gICAgbm9kZUlkOiBzdHJpbmcsXG4gICAgcHVibGljS2V5OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxOYW1lS2V5SW5wdXQgfCBudWxsPiA9PiB7XG4gICAgbGV0IG5vZGUgPSBub2Rlc0NhY2hlLmdldChub2RlSWQpO1xuXG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBhd2FpdCB0aGlzLm5vZGUoeyBpZDogbm9kZUlkIH0pO1xuICAgICAgbm9kZSA9IG5vZGVzQ2FjaGUuZ2V0KG5vZGVJZCk7XG5cbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuYW1lS2V5ID0gbm9kZS5hY2Nlc3M/Lm5hbWVLZXk7XG5cbiAgICBpZiAoIW5hbWVLZXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogbm9kZS5pZCxcbiAgICAgIG5hbWVLZXk6IHNvZGl1bS50b19oZXgoXG4gICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21faGV4KG5hbWVLZXkpLFxuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGZpbGVzOlxuICAgICAgICBcImhpc3RvcnlcIiBpbiBub2RlXG4gICAgICAgICAgPyBub2RlLmhpc3RvcnkubWFwKGYgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IGYuaWQsXG4gICAgICAgICAgICAgIGtleTogc29kaXVtLnRvX2hleChcbiAgICAgICAgICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgICAgICAgICAgc29kaXVtLmZyb21faGV4KGYua2V5KSxcbiAgICAgICAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgOiBbXVxuICAgIH07XG4gIH07XG5cbiAgYXN5bmMgdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50KCk6IFByb21pc2U8XG4gICAgU3VjY2Vzc1Jlc3BvbnNlPG51bWJlcj4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyB1bnJlYWRSZWNlaXZlZE1haWxzQ291bnQgfSA9IGF3YWl0IHRoaXMuY2xpZW50KFwicXVlcnlcIikoe1xuICAgICAgdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50OiB7XG4gICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIi4uLm9uIFVucmVhZFJlY2VpdmVkTWFpbHNDb3VudFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgIGNvdW50OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodW5yZWFkUmVjZWl2ZWRNYWlsc0NvdW50Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIHVucmVhZFJlY2VpdmVkTWFpbHNDb3VudDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IHVucmVhZFJlY2VpdmVkTWFpbHNDb3VudC5jb3VudFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9lYWNoVXNlciA9IGFzeW5jIChcbiAgICBmaWxlczogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdLFxuICAgIHN1YmplY3Q6IHN0cmluZyxcbiAgICBib2R5OiBzdHJpbmcsXG4gICAgaWRPck1haWw6IHN0cmluZ1xuICApOiBQcm9taXNlPE1haWxSZWNpcGllbnRJbnB1dCB8IG51bGw+ID0+IHtcbiAgICBsZXQgdSA9IHVzZXJzQ2FjaGUuZ2V0KGlkT3JNYWlsKTtcblxuICAgIGlmICghdSB8fCAhKFwicHVibGljS2V5XCIgaW4gdSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcSA9IGF3YWl0IHRoaXMudXNlcih7XG4gICAgICAgICAgdXNlcklkOiBpZE9yTWFpbCxcbiAgICAgICAgICB3aXRoUHVibGljS2V5OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlcSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXEuX190eXBlbmFtZSAhPT0gXCJTdWNjZXNzUmVzcG9uc2VcIikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHUgPSByZXEuZGF0YTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF1KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKFwicHVibGljS2V5XCIgaW4gdSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVXNlciAke2lkT3JNYWlsfSBoYXZlIG5vIHB1YmxpYyBrZXlgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWNpcGllbnRzRmlsZXMgPSBuZXcgQXJyYXk8TWFpbEZpbGVJbnB1dD4oKTtcblxuICAgIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgICAgbGV0IGZpbGVJbkhpc3RvcnkgPSBmaWxlc0NhY2hlLmdldChmLmlkKTtcbiAgICAgIGlmICghZmlsZUluSGlzdG9yeSkge1xuICAgICAgICBhd2FpdCB0aGlzLmZpbGUoeyBpZDogZi5pZCB9KTtcbiAgICAgICAgZmlsZUluSGlzdG9yeSA9IGZpbGVzQ2FjaGUuZ2V0KGYuaWQpO1xuICAgICAgICBpZiAoIWZpbGVJbkhpc3RvcnkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgJHtmLm5hbWV9ICgke2YuaWR9KSBkb2VzIG5vdCBleGlzdHNgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qga2V5ID0gZmlsZUluSGlzdG9yeS5rZXk7XG4gICAgICByZWNpcGllbnRzRmlsZXMucHVzaCh7XG4gICAgICAgIGlkOiBmLmlkLFxuICAgICAgICBuYW1lOiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9zdHJpbmcoZi5uYW1lKSxcbiAgICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBmaWxlS2V5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgICBzb2RpdW0uZnJvbV9oZXgoa2V5KSxcbiAgICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgICAgdGhpcy4ja2V5cy5wcml2YXRlS2V5XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVjaXBpZW50SWQ6IHUuaWQsXG4gICAgICBib2R5OiBzb2RpdW0udG9faGV4KFxuICAgICAgICBlbmNyeXB0Q3J5cHRvQm94KFxuICAgICAgICAgIHNvZGl1bS5mcm9tX3N0cmluZyhib2R5KSxcbiAgICAgICAgICB1LnB1YmxpY0tleSxcbiAgICAgICAgICB0aGlzLiNrZXlzLnByaXZhdGVLZXlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIHN1YmplY3Q6IHNvZGl1bS50b19oZXgoXG4gICAgICAgIGVuY3J5cHRDcnlwdG9Cb3goXG4gICAgICAgICAgc29kaXVtLmZyb21fc3RyaW5nKHN1YmplY3QpLFxuICAgICAgICAgIHUucHVibGljS2V5LFxuICAgICAgICAgIHRoaXMuI2tleXMucHJpdmF0ZUtleVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgZmlsZXM6IHJlY2lwaWVudHNGaWxlc1xuICAgIH07XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFHQSxPQUFPQSxFQUFQLE1BQWUsSUFBZjtBQUNBLE9BQU9DLEtBQVAsTUFBa0IsT0FBbEI7QUFFQSxTQUFTQyxVQUFULFFBQTJCLGtCQUEzQjtBQUNBLFNBQVNDLFVBQVQsRUFBcUJDLFVB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
|