@milkio/vite-plugin-milkio 1.3.55 → 1.3.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +59 -57
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -19,12 +19,14 @@ var __toESM = (mod, isNodeMode, target) => {
|
|
|
19
19
|
}
|
|
20
20
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
21
21
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
if (mod && typeof mod === "object" || typeof mod === "function") {
|
|
23
|
+
for (let key of __getOwnPropNames(mod))
|
|
24
|
+
if (!__hasOwnProp.call(to, key))
|
|
25
|
+
__defProp(to, key, {
|
|
26
|
+
get: __accessProp.bind(mod, key),
|
|
27
|
+
enumerable: true
|
|
28
|
+
});
|
|
29
|
+
}
|
|
28
30
|
if (canCache)
|
|
29
31
|
cache.set(mod, to);
|
|
30
32
|
return to;
|
|
@@ -33,7 +35,7 @@ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports,
|
|
|
33
35
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
34
36
|
|
|
35
37
|
// node_modules/@iarna/toml/lib/parser.js
|
|
36
|
-
var require_parser = __commonJS((exports, module)
|
|
38
|
+
var require_parser = __commonJS(function(exports, module) {
|
|
37
39
|
var ParserEND = 1114112;
|
|
38
40
|
|
|
39
41
|
class ParserError extends Error {
|
|
@@ -163,7 +165,7 @@ var require_parser = __commonJS((exports, module) => {
|
|
|
163
165
|
});
|
|
164
166
|
|
|
165
167
|
// node_modules/@iarna/toml/lib/create-datetime.js
|
|
166
|
-
var require_create_datetime = __commonJS((exports, module)
|
|
168
|
+
var require_create_datetime = __commonJS(function(exports, module) {
|
|
167
169
|
module.exports = (value) => {
|
|
168
170
|
const date = new Date(value);
|
|
169
171
|
if (isNaN(date)) {
|
|
@@ -175,7 +177,7 @@ var require_create_datetime = __commonJS((exports, module) => {
|
|
|
175
177
|
});
|
|
176
178
|
|
|
177
179
|
// node_modules/@iarna/toml/lib/format-num.js
|
|
178
|
-
var require_format_num = __commonJS((exports, module)
|
|
180
|
+
var require_format_num = __commonJS(function(exports, module) {
|
|
179
181
|
module.exports = (d, num) => {
|
|
180
182
|
num = String(num);
|
|
181
183
|
while (num.length < d)
|
|
@@ -185,7 +187,7 @@ var require_format_num = __commonJS((exports, module) => {
|
|
|
185
187
|
});
|
|
186
188
|
|
|
187
189
|
// node_modules/@iarna/toml/lib/create-datetime-float.js
|
|
188
|
-
var require_create_datetime_float = __commonJS((exports, module)
|
|
190
|
+
var require_create_datetime_float = __commonJS(function(exports, module) {
|
|
189
191
|
var f = require_format_num();
|
|
190
192
|
|
|
191
193
|
class FloatingDateTime extends Date {
|
|
@@ -210,7 +212,7 @@ var require_create_datetime_float = __commonJS((exports, module) => {
|
|
|
210
212
|
});
|
|
211
213
|
|
|
212
214
|
// node_modules/@iarna/toml/lib/create-date.js
|
|
213
|
-
var require_create_date = __commonJS((exports, module)
|
|
215
|
+
var require_create_date = __commonJS(function(exports, module) {
|
|
214
216
|
var f = require_format_num();
|
|
215
217
|
var DateTime = global.Date;
|
|
216
218
|
|
|
@@ -234,7 +236,7 @@ var require_create_date = __commonJS((exports, module) => {
|
|
|
234
236
|
});
|
|
235
237
|
|
|
236
238
|
// node_modules/@iarna/toml/lib/create-time.js
|
|
237
|
-
var require_create_time = __commonJS((exports, module)
|
|
239
|
+
var require_create_time = __commonJS(function(exports, module) {
|
|
238
240
|
var f = require_format_num();
|
|
239
241
|
|
|
240
242
|
class Time extends Date {
|
|
@@ -257,7 +259,7 @@ var require_create_time = __commonJS((exports, module) => {
|
|
|
257
259
|
});
|
|
258
260
|
|
|
259
261
|
// node_modules/@iarna/toml/lib/toml-parser.js
|
|
260
|
-
var require_toml_parser = __commonJS((exports, module)
|
|
262
|
+
var require_toml_parser = __commonJS(function(exports, module) {
|
|
261
263
|
module.exports = makeParserClass(require_parser());
|
|
262
264
|
module.exports.makeParserClass = makeParserClass;
|
|
263
265
|
|
|
@@ -1565,7 +1567,7 @@ var require_toml_parser = __commonJS((exports, module) => {
|
|
|
1565
1567
|
});
|
|
1566
1568
|
|
|
1567
1569
|
// node_modules/@iarna/toml/parse-pretty-error.js
|
|
1568
|
-
var require_parse_pretty_error = __commonJS((exports, module)
|
|
1570
|
+
var require_parse_pretty_error = __commonJS(function(exports, module) {
|
|
1569
1571
|
module.exports = prettyError;
|
|
1570
1572
|
function prettyError(err, buf) {
|
|
1571
1573
|
if (err.pos == null || err.line == null)
|
|
@@ -1605,7 +1607,7 @@ var require_parse_pretty_error = __commonJS((exports, module) => {
|
|
|
1605
1607
|
});
|
|
1606
1608
|
|
|
1607
1609
|
// node_modules/@iarna/toml/parse-string.js
|
|
1608
|
-
var require_parse_string = __commonJS((exports, module)
|
|
1610
|
+
var require_parse_string = __commonJS(function(exports, module) {
|
|
1609
1611
|
module.exports = parseString;
|
|
1610
1612
|
var TOMLParser = require_toml_parser();
|
|
1611
1613
|
var prettyError = require_parse_pretty_error();
|
|
@@ -1624,7 +1626,7 @@ var require_parse_string = __commonJS((exports, module) => {
|
|
|
1624
1626
|
});
|
|
1625
1627
|
|
|
1626
1628
|
// node_modules/@iarna/toml/parse-async.js
|
|
1627
|
-
var require_parse_async = __commonJS((exports, module)
|
|
1629
|
+
var require_parse_async = __commonJS(function(exports, module) {
|
|
1628
1630
|
module.exports = parseAsync;
|
|
1629
1631
|
var TOMLParser = require_toml_parser();
|
|
1630
1632
|
var prettyError = require_parse_pretty_error();
|
|
@@ -1656,7 +1658,7 @@ var require_parse_async = __commonJS((exports, module) => {
|
|
|
1656
1658
|
});
|
|
1657
1659
|
|
|
1658
1660
|
// node_modules/@iarna/toml/parse-stream.js
|
|
1659
|
-
var require_parse_stream = __commonJS((exports, module)
|
|
1661
|
+
var require_parse_stream = __commonJS(function(exports, module) {
|
|
1660
1662
|
module.exports = parseStream;
|
|
1661
1663
|
var stream = __require("stream");
|
|
1662
1664
|
var TOMLParser = require_toml_parser();
|
|
@@ -1735,7 +1737,7 @@ var require_parse_stream = __commonJS((exports, module) => {
|
|
|
1735
1737
|
});
|
|
1736
1738
|
|
|
1737
1739
|
// node_modules/@iarna/toml/parse.js
|
|
1738
|
-
var require_parse = __commonJS((exports, module)
|
|
1740
|
+
var require_parse = __commonJS(function(exports, module) {
|
|
1739
1741
|
module.exports = require_parse_string();
|
|
1740
1742
|
module.exports.async = require_parse_async();
|
|
1741
1743
|
module.exports.stream = require_parse_stream();
|
|
@@ -1743,7 +1745,7 @@ var require_parse = __commonJS((exports, module) => {
|
|
|
1743
1745
|
});
|
|
1744
1746
|
|
|
1745
1747
|
// node_modules/@iarna/toml/stringify.js
|
|
1746
|
-
var require_stringify = __commonJS((exports, module)
|
|
1748
|
+
var require_stringify = __commonJS(function(exports, module) {
|
|
1747
1749
|
module.exports = stringify;
|
|
1748
1750
|
module.exports.value = stringifyInline;
|
|
1749
1751
|
function stringify(obj) {
|
|
@@ -2022,13 +2024,13 @@ var require_stringify = __commonJS((exports, module) => {
|
|
|
2022
2024
|
});
|
|
2023
2025
|
|
|
2024
2026
|
// node_modules/@iarna/toml/toml.js
|
|
2025
|
-
var require_toml = __commonJS((exports)
|
|
2027
|
+
var require_toml = __commonJS(function(exports) {
|
|
2026
2028
|
exports.parse = require_parse();
|
|
2027
2029
|
exports.stringify = require_stringify();
|
|
2028
2030
|
});
|
|
2029
2031
|
|
|
2030
2032
|
// node_modules/universalify/index.js
|
|
2031
|
-
var require_universalify = __commonJS((exports)
|
|
2033
|
+
var require_universalify = __commonJS(function(exports) {
|
|
2032
2034
|
exports.fromCallback = function(fn) {
|
|
2033
2035
|
return Object.defineProperty(function(...args) {
|
|
2034
2036
|
if (typeof args[args.length - 1] === "function")
|
|
@@ -2055,7 +2057,7 @@ var require_universalify = __commonJS((exports) => {
|
|
|
2055
2057
|
});
|
|
2056
2058
|
|
|
2057
2059
|
// node_modules/graceful-fs/polyfills.js
|
|
2058
|
-
var require_polyfills = __commonJS((exports, module)
|
|
2060
|
+
var require_polyfills = __commonJS(function(exports, module) {
|
|
2059
2061
|
var constants = __require("constants");
|
|
2060
2062
|
var origCwd = process.cwd;
|
|
2061
2063
|
var cwd = null;
|
|
@@ -2358,7 +2360,7 @@ var require_polyfills = __commonJS((exports, module) => {
|
|
|
2358
2360
|
});
|
|
2359
2361
|
|
|
2360
2362
|
// node_modules/graceful-fs/legacy-streams.js
|
|
2361
|
-
var require_legacy_streams = __commonJS((exports, module)
|
|
2363
|
+
var require_legacy_streams = __commonJS(function(exports, module) {
|
|
2362
2364
|
var Stream2 = __require("stream").Stream;
|
|
2363
2365
|
module.exports = legacy;
|
|
2364
2366
|
function legacy(fs) {
|
|
@@ -2455,7 +2457,7 @@ var require_legacy_streams = __commonJS((exports, module) => {
|
|
|
2455
2457
|
});
|
|
2456
2458
|
|
|
2457
2459
|
// node_modules/graceful-fs/clone.js
|
|
2458
|
-
var require_clone = __commonJS((exports, module)
|
|
2460
|
+
var require_clone = __commonJS(function(exports, module) {
|
|
2459
2461
|
module.exports = clone;
|
|
2460
2462
|
var getPrototypeOf = Object.getPrototypeOf || function(obj) {
|
|
2461
2463
|
return obj.__proto__;
|
|
@@ -2475,7 +2477,7 @@ var require_clone = __commonJS((exports, module) => {
|
|
|
2475
2477
|
});
|
|
2476
2478
|
|
|
2477
2479
|
// node_modules/graceful-fs/graceful-fs.js
|
|
2478
|
-
var require_graceful_fs = __commonJS((exports, module)
|
|
2480
|
+
var require_graceful_fs = __commonJS(function(exports, module) {
|
|
2479
2481
|
var fs = __require("fs");
|
|
2480
2482
|
var polyfills = require_polyfills();
|
|
2481
2483
|
var legacy = require_legacy_streams();
|
|
@@ -2833,7 +2835,7 @@ GFS4: `);
|
|
|
2833
2835
|
});
|
|
2834
2836
|
|
|
2835
2837
|
// node_modules/fs-extra/lib/fs/index.js
|
|
2836
|
-
var require_fs = __commonJS((exports)
|
|
2838
|
+
var require_fs = __commonJS(function(exports) {
|
|
2837
2839
|
var u3 = require_universalify().fromCallback;
|
|
2838
2840
|
var fs = require_graceful_fs();
|
|
2839
2841
|
var api = [
|
|
@@ -2946,7 +2948,7 @@ var require_fs = __commonJS((exports) => {
|
|
|
2946
2948
|
});
|
|
2947
2949
|
|
|
2948
2950
|
// node_modules/fs-extra/lib/mkdirs/utils.js
|
|
2949
|
-
var require_utils = __commonJS((exports, module)
|
|
2951
|
+
var require_utils = __commonJS(function(exports, module) {
|
|
2950
2952
|
var path2 = __require("path");
|
|
2951
2953
|
exports.checkPath = function checkPath(pth) {
|
|
2952
2954
|
if (process.platform === "win32") {
|
|
@@ -2961,7 +2963,7 @@ var require_utils = __commonJS((exports, module) => {
|
|
|
2961
2963
|
});
|
|
2962
2964
|
|
|
2963
2965
|
// node_modules/fs-extra/lib/mkdirs/make-dir.js
|
|
2964
|
-
var require_make_dir = __commonJS((exports, module)
|
|
2966
|
+
var require_make_dir = __commonJS(function(exports, module) {
|
|
2965
2967
|
var fs = require_fs();
|
|
2966
2968
|
var { checkPath } = require_utils();
|
|
2967
2969
|
var getMode = (options) => {
|
|
@@ -2987,7 +2989,7 @@ var require_make_dir = __commonJS((exports, module) => {
|
|
|
2987
2989
|
});
|
|
2988
2990
|
|
|
2989
2991
|
// node_modules/fs-extra/lib/mkdirs/index.js
|
|
2990
|
-
var require_mkdirs = __commonJS((exports, module)
|
|
2992
|
+
var require_mkdirs = __commonJS(function(exports, module) {
|
|
2991
2993
|
var u3 = require_universalify().fromPromise;
|
|
2992
2994
|
var { makeDir: _makeDir, makeDirSync } = require_make_dir();
|
|
2993
2995
|
var makeDir = u3(_makeDir);
|
|
@@ -3002,7 +3004,7 @@ var require_mkdirs = __commonJS((exports, module) => {
|
|
|
3002
3004
|
});
|
|
3003
3005
|
|
|
3004
3006
|
// node_modules/fs-extra/lib/path-exists/index.js
|
|
3005
|
-
var require_path_exists = __commonJS((exports, module)
|
|
3007
|
+
var require_path_exists = __commonJS(function(exports, module) {
|
|
3006
3008
|
var u3 = require_universalify().fromPromise;
|
|
3007
3009
|
var fs = require_fs();
|
|
3008
3010
|
function pathExists(path2) {
|
|
@@ -3015,7 +3017,7 @@ var require_path_exists = __commonJS((exports, module) => {
|
|
|
3015
3017
|
});
|
|
3016
3018
|
|
|
3017
3019
|
// node_modules/fs-extra/lib/util/utimes.js
|
|
3018
|
-
var require_utimes = __commonJS((exports, module)
|
|
3020
|
+
var require_utimes = __commonJS(function(exports, module) {
|
|
3019
3021
|
var fs = require_fs();
|
|
3020
3022
|
var u3 = require_universalify().fromPromise;
|
|
3021
3023
|
async function utimesMillis(path2, atime, mtime) {
|
|
@@ -3063,7 +3065,7 @@ var require_utimes = __commonJS((exports, module) => {
|
|
|
3063
3065
|
});
|
|
3064
3066
|
|
|
3065
3067
|
// node_modules/fs-extra/lib/util/stat.js
|
|
3066
|
-
var require_stat = __commonJS((exports, module)
|
|
3068
|
+
var require_stat = __commonJS(function(exports, module) {
|
|
3067
3069
|
var fs = require_fs();
|
|
3068
3070
|
var path2 = __require("path");
|
|
3069
3071
|
var u3 = require_universalify().fromPromise;
|
|
@@ -3195,7 +3197,7 @@ var require_stat = __commonJS((exports, module) => {
|
|
|
3195
3197
|
});
|
|
3196
3198
|
|
|
3197
3199
|
// node_modules/fs-extra/lib/util/async.js
|
|
3198
|
-
var require_async = __commonJS((exports, module)
|
|
3200
|
+
var require_async = __commonJS(function(exports, module) {
|
|
3199
3201
|
async function asyncIteratorConcurrentProcess(iterator, fn) {
|
|
3200
3202
|
const promises = [];
|
|
3201
3203
|
for await (const item of iterator) {
|
|
@@ -3212,7 +3214,7 @@ var require_async = __commonJS((exports, module) => {
|
|
|
3212
3214
|
});
|
|
3213
3215
|
|
|
3214
3216
|
// node_modules/fs-extra/lib/copy/copy.js
|
|
3215
|
-
var require_copy = __commonJS((exports, module)
|
|
3217
|
+
var require_copy = __commonJS(function(exports, module) {
|
|
3216
3218
|
var fs = require_fs();
|
|
3217
3219
|
var path2 = __require("path");
|
|
3218
3220
|
var { mkdirs } = require_mkdirs();
|
|
@@ -3342,7 +3344,7 @@ var require_copy = __commonJS((exports, module) => {
|
|
|
3342
3344
|
});
|
|
3343
3345
|
|
|
3344
3346
|
// node_modules/fs-extra/lib/copy/copy-sync.js
|
|
3345
|
-
var require_copy_sync = __commonJS((exports, module)
|
|
3347
|
+
var require_copy_sync = __commonJS(function(exports, module) {
|
|
3346
3348
|
var fs = require_graceful_fs();
|
|
3347
3349
|
var path2 = __require("path");
|
|
3348
3350
|
var mkdirsSync = require_mkdirs().mkdirsSync;
|
|
@@ -3488,7 +3490,7 @@ var require_copy_sync = __commonJS((exports, module) => {
|
|
|
3488
3490
|
});
|
|
3489
3491
|
|
|
3490
3492
|
// node_modules/fs-extra/lib/copy/index.js
|
|
3491
|
-
var require_copy2 = __commonJS((exports, module)
|
|
3493
|
+
var require_copy2 = __commonJS(function(exports, module) {
|
|
3492
3494
|
var u3 = require_universalify().fromPromise;
|
|
3493
3495
|
module.exports = {
|
|
3494
3496
|
copy: u3(require_copy()),
|
|
@@ -3497,7 +3499,7 @@ var require_copy2 = __commonJS((exports, module) => {
|
|
|
3497
3499
|
});
|
|
3498
3500
|
|
|
3499
3501
|
// node_modules/fs-extra/lib/remove/index.js
|
|
3500
|
-
var require_remove = __commonJS((exports, module)
|
|
3502
|
+
var require_remove = __commonJS(function(exports, module) {
|
|
3501
3503
|
var fs = require_graceful_fs();
|
|
3502
3504
|
var u3 = require_universalify().fromCallback;
|
|
3503
3505
|
function remove(path2, callback) {
|
|
@@ -3513,7 +3515,7 @@ var require_remove = __commonJS((exports, module) => {
|
|
|
3513
3515
|
});
|
|
3514
3516
|
|
|
3515
3517
|
// node_modules/fs-extra/lib/empty/index.js
|
|
3516
|
-
var require_empty = __commonJS((exports, module)
|
|
3518
|
+
var require_empty = __commonJS(function(exports, module) {
|
|
3517
3519
|
var u3 = require_universalify().fromPromise;
|
|
3518
3520
|
var fs = require_fs();
|
|
3519
3521
|
var path2 = __require("path");
|
|
@@ -3549,7 +3551,7 @@ var require_empty = __commonJS((exports, module) => {
|
|
|
3549
3551
|
});
|
|
3550
3552
|
|
|
3551
3553
|
// node_modules/fs-extra/lib/ensure/file.js
|
|
3552
|
-
var require_file = __commonJS((exports, module)
|
|
3554
|
+
var require_file = __commonJS(function(exports, module) {
|
|
3553
3555
|
var u3 = require_universalify().fromPromise;
|
|
3554
3556
|
var path2 = __require("path");
|
|
3555
3557
|
var fs = require_fs();
|
|
@@ -3607,7 +3609,7 @@ var require_file = __commonJS((exports, module) => {
|
|
|
3607
3609
|
});
|
|
3608
3610
|
|
|
3609
3611
|
// node_modules/fs-extra/lib/ensure/link.js
|
|
3610
|
-
var require_link = __commonJS((exports, module)
|
|
3612
|
+
var require_link = __commonJS(function(exports, module) {
|
|
3611
3613
|
var u3 = require_universalify().fromPromise;
|
|
3612
3614
|
var path2 = __require("path");
|
|
3613
3615
|
var fs = require_fs();
|
|
@@ -3662,7 +3664,7 @@ var require_link = __commonJS((exports, module) => {
|
|
|
3662
3664
|
});
|
|
3663
3665
|
|
|
3664
3666
|
// node_modules/fs-extra/lib/ensure/symlink-paths.js
|
|
3665
|
-
var require_symlink_paths = __commonJS((exports, module)
|
|
3667
|
+
var require_symlink_paths = __commonJS(function(exports, module) {
|
|
3666
3668
|
var path2 = __require("path");
|
|
3667
3669
|
var fs = require_fs();
|
|
3668
3670
|
var { pathExists } = require_path_exists();
|
|
@@ -3734,7 +3736,7 @@ var require_symlink_paths = __commonJS((exports, module) => {
|
|
|
3734
3736
|
});
|
|
3735
3737
|
|
|
3736
3738
|
// node_modules/fs-extra/lib/ensure/symlink-type.js
|
|
3737
|
-
var require_symlink_type = __commonJS((exports, module)
|
|
3739
|
+
var require_symlink_type = __commonJS(function(exports, module) {
|
|
3738
3740
|
var fs = require_fs();
|
|
3739
3741
|
var u3 = require_universalify().fromPromise;
|
|
3740
3742
|
async function symlinkType(srcpath, type) {
|
|
@@ -3766,7 +3768,7 @@ var require_symlink_type = __commonJS((exports, module) => {
|
|
|
3766
3768
|
});
|
|
3767
3769
|
|
|
3768
3770
|
// node_modules/fs-extra/lib/ensure/symlink.js
|
|
3769
|
-
var require_symlink = __commonJS((exports, module)
|
|
3771
|
+
var require_symlink = __commonJS(function(exports, module) {
|
|
3770
3772
|
var u3 = require_universalify().fromPromise;
|
|
3771
3773
|
var path2 = __require("path");
|
|
3772
3774
|
var fs = require_fs();
|
|
@@ -3845,7 +3847,7 @@ var require_symlink = __commonJS((exports, module) => {
|
|
|
3845
3847
|
});
|
|
3846
3848
|
|
|
3847
3849
|
// node_modules/fs-extra/lib/ensure/index.js
|
|
3848
|
-
var require_ensure = __commonJS((exports, module)
|
|
3850
|
+
var require_ensure = __commonJS(function(exports, module) {
|
|
3849
3851
|
var { createFile, createFileSync } = require_file();
|
|
3850
3852
|
var { createLink, createLinkSync } = require_link();
|
|
3851
3853
|
var { createSymlink, createSymlinkSync } = require_symlink();
|
|
@@ -3866,7 +3868,7 @@ var require_ensure = __commonJS((exports, module) => {
|
|
|
3866
3868
|
});
|
|
3867
3869
|
|
|
3868
3870
|
// node_modules/jsonfile/utils.js
|
|
3869
|
-
var require_utils2 = __commonJS((exports, module)
|
|
3871
|
+
var require_utils2 = __commonJS(function(exports, module) {
|
|
3870
3872
|
function stringify(obj, { EOL = `
|
|
3871
3873
|
`, finalEOL = true, replacer = null, spaces } = {}) {
|
|
3872
3874
|
const EOF2 = finalEOL ? EOL : "";
|
|
@@ -3885,7 +3887,7 @@ var require_utils2 = __commonJS((exports, module) => {
|
|
|
3885
3887
|
});
|
|
3886
3888
|
|
|
3887
3889
|
// node_modules/jsonfile/index.js
|
|
3888
|
-
var require_jsonfile = __commonJS((exports, module)
|
|
3890
|
+
var require_jsonfile = __commonJS(function(exports, module) {
|
|
3889
3891
|
var _fs;
|
|
3890
3892
|
try {
|
|
3891
3893
|
_fs = require_graceful_fs();
|
|
@@ -3955,7 +3957,7 @@ var require_jsonfile = __commonJS((exports, module) => {
|
|
|
3955
3957
|
});
|
|
3956
3958
|
|
|
3957
3959
|
// node_modules/fs-extra/lib/json/jsonfile.js
|
|
3958
|
-
var require_jsonfile2 = __commonJS((exports, module)
|
|
3960
|
+
var require_jsonfile2 = __commonJS(function(exports, module) {
|
|
3959
3961
|
var jsonFile = require_jsonfile();
|
|
3960
3962
|
module.exports = {
|
|
3961
3963
|
readJson: jsonFile.readFile,
|
|
@@ -3966,7 +3968,7 @@ var require_jsonfile2 = __commonJS((exports, module) => {
|
|
|
3966
3968
|
});
|
|
3967
3969
|
|
|
3968
3970
|
// node_modules/fs-extra/lib/output-file/index.js
|
|
3969
|
-
var require_output_file = __commonJS((exports, module)
|
|
3971
|
+
var require_output_file = __commonJS(function(exports, module) {
|
|
3970
3972
|
var u3 = require_universalify().fromPromise;
|
|
3971
3973
|
var fs = require_fs();
|
|
3972
3974
|
var path2 = __require("path");
|
|
@@ -3993,7 +3995,7 @@ var require_output_file = __commonJS((exports, module) => {
|
|
|
3993
3995
|
});
|
|
3994
3996
|
|
|
3995
3997
|
// node_modules/fs-extra/lib/json/output-json.js
|
|
3996
|
-
var require_output_json = __commonJS((exports, module)
|
|
3998
|
+
var require_output_json = __commonJS(function(exports, module) {
|
|
3997
3999
|
var { stringify } = require_utils2();
|
|
3998
4000
|
var { outputFile } = require_output_file();
|
|
3999
4001
|
async function outputJson(file, data, options = {}) {
|
|
@@ -4004,7 +4006,7 @@ var require_output_json = __commonJS((exports, module) => {
|
|
|
4004
4006
|
});
|
|
4005
4007
|
|
|
4006
4008
|
// node_modules/fs-extra/lib/json/output-json-sync.js
|
|
4007
|
-
var require_output_json_sync = __commonJS((exports, module)
|
|
4009
|
+
var require_output_json_sync = __commonJS(function(exports, module) {
|
|
4008
4010
|
var { stringify } = require_utils2();
|
|
4009
4011
|
var { outputFileSync } = require_output_file();
|
|
4010
4012
|
function outputJsonSync(file, data, options) {
|
|
@@ -4015,7 +4017,7 @@ var require_output_json_sync = __commonJS((exports, module) => {
|
|
|
4015
4017
|
});
|
|
4016
4018
|
|
|
4017
4019
|
// node_modules/fs-extra/lib/json/index.js
|
|
4018
|
-
var require_json = __commonJS((exports, module)
|
|
4020
|
+
var require_json = __commonJS(function(exports, module) {
|
|
4019
4021
|
var u3 = require_universalify().fromPromise;
|
|
4020
4022
|
var jsonFile = require_jsonfile2();
|
|
4021
4023
|
jsonFile.outputJson = u3(require_output_json());
|
|
@@ -4030,7 +4032,7 @@ var require_json = __commonJS((exports, module) => {
|
|
|
4030
4032
|
});
|
|
4031
4033
|
|
|
4032
4034
|
// node_modules/fs-extra/lib/move/move.js
|
|
4033
|
-
var require_move = __commonJS((exports, module)
|
|
4035
|
+
var require_move = __commonJS(function(exports, module) {
|
|
4034
4036
|
var fs = require_fs();
|
|
4035
4037
|
var path2 = __require("path");
|
|
4036
4038
|
var { copy } = require_copy2();
|
|
@@ -4079,7 +4081,7 @@ var require_move = __commonJS((exports, module) => {
|
|
|
4079
4081
|
});
|
|
4080
4082
|
|
|
4081
4083
|
// node_modules/fs-extra/lib/move/move-sync.js
|
|
4082
|
-
var require_move_sync = __commonJS((exports, module)
|
|
4084
|
+
var require_move_sync = __commonJS(function(exports, module) {
|
|
4083
4085
|
var fs = require_graceful_fs();
|
|
4084
4086
|
var path2 = __require("path");
|
|
4085
4087
|
var copySync = require_copy2().copySync;
|
|
@@ -4133,7 +4135,7 @@ var require_move_sync = __commonJS((exports, module) => {
|
|
|
4133
4135
|
});
|
|
4134
4136
|
|
|
4135
4137
|
// node_modules/fs-extra/lib/move/index.js
|
|
4136
|
-
var require_move2 = __commonJS((exports, module)
|
|
4138
|
+
var require_move2 = __commonJS(function(exports, module) {
|
|
4137
4139
|
var u3 = require_universalify().fromPromise;
|
|
4138
4140
|
module.exports = {
|
|
4139
4141
|
move: u3(require_move()),
|
|
@@ -4142,7 +4144,7 @@ var require_move2 = __commonJS((exports, module) => {
|
|
|
4142
4144
|
});
|
|
4143
4145
|
|
|
4144
4146
|
// node_modules/fs-extra/lib/index.js
|
|
4145
|
-
var require_lib = __commonJS((exports, module)
|
|
4147
|
+
var require_lib = __commonJS(function(exports, module) {
|
|
4146
4148
|
module.exports = {
|
|
4147
4149
|
...require_fs(),
|
|
4148
4150
|
...require_copy2(),
|
|
@@ -9783,5 +9785,5 @@ export {
|
|
|
9783
9785
|
useVitePluginMilkio
|
|
9784
9786
|
};
|
|
9785
9787
|
|
|
9786
|
-
//# debugId=
|
|
9787
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9wYXJzZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9jcmVhdGUtZGF0ZXRpbWUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9mb3JtYXQtbnVtLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9saWIvY3JlYXRlLWRhdGV0aW1lLWZsb2F0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9saWIvY3JlYXRlLWRhdGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9jcmVhdGUtdGltZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvbGliL3RvbWwtcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9wYXJzZS1wcmV0dHktZXJyb3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3BhcnNlLXN0cmluZy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvcGFyc2UtYXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3BhcnNlLXN0cmVhbS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvcGFyc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3N0cmluZ2lmeS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvdG9tbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsaWZ5L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9wb2x5ZmlsbHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2xlZ2FjeS1zdHJlYW1zLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9jbG9uZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvZ3JhY2VmdWwtZnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9mcy9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy91dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9tYWtlLWRpci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3BhdGgtZXhpc3RzL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC91dGltZXMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL3N0YXQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL2FzeW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcmVtb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW1wdHkvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvZmlsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9saW5rLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmstcGF0aHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay10eXBlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmsuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2pzb25maWxlL3V0aWxzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9qc29uZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vanNvbmZpbGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9vdXRwdXQtZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vb3V0cHV0LWpzb24uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9tb3ZlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9tb3ZlLXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvaW5kZXguanMiLCAiLi4vaW5kZXgudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoL2Rpc3QvZXNtL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24vZGlzdC9lc20vaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9hc3NlcnQtdmFsaWQtcGF0dGVybi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvZXNtL2JyYWNlLWV4cHJlc3Npb25zLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9lc20vdW5lc2NhcGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9hc3QuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9lc2NhcGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9nbG9iLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9scnUtY2FjaGUvZGlzdC9lc20vbm9kZS9pbmRleC5taW4uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5L2Rpc3QvZXNtL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pcGFzcy9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9wYXR0ZXJuLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL2lnbm9yZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9wcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9lc20vd2Fsa2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL2hhcy1tYWdpYy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi9hZGFwdGVycy9lZGdlLW9uZS50cyIsICIuLi9hZGFwdGVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IFBhcnNlckVORCA9IDB4MTEwMDAwXG5jbGFzcyBQYXJzZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3RydWN0b3IgKG1zZywgZmlsZW5hbWUsIGxpbmVudW1iZXIpIHtcbiAgICBzdXBlcignW1BhcnNlckVycm9yXSAnICsgbXNnLCBmaWxlbmFtZSwgbGluZW51bWJlcilcbiAgICB0aGlzLm5hbWUgPSAnUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1BhcnNlckVycm9yJ1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUGFyc2VyRXJyb3IpXG4gIH1cbn1cbmNsYXNzIFN0YXRlIHtcbiAgY29uc3RydWN0b3IgKHBhcnNlcikge1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyXG4gICAgdGhpcy5idWYgPSAnJ1xuICAgIHRoaXMucmV0dXJuZWQgPSBudWxsXG4gICAgdGhpcy5yZXN1bHQgPSBudWxsXG4gICAgdGhpcy5yZXN1bHRUYWJsZSA9IG51bGxcbiAgICB0aGlzLnJlc3VsdEFyciA9IG51bGxcbiAgfVxufVxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMucG9zID0gMFxuICAgIHRoaXMuY29sID0gMFxuICAgIHRoaXMubGluZSA9IDBcbiAgICB0aGlzLm9iaiA9IHt9XG4gICAgdGhpcy5jdHggPSB0aGlzLm9ialxuICAgIHRoaXMuc3RhY2sgPSBbXVxuICAgIHRoaXMuX2J1ZiA9ICcnXG4gICAgdGhpcy5jaGFyID0gbnVsbFxuICAgIHRoaXMuaWkgPSAwXG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdGF0ZSh0aGlzLnBhcnNlU3RhcnQpXG4gIH1cblxuICBwYXJzZSAoc3RyKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCBzdHIubGVuZ3RoID09IG51bGwpIHJldHVyblxuXG4gICAgdGhpcy5fYnVmID0gU3RyaW5nKHN0cilcbiAgICB0aGlzLmlpID0gLTFcbiAgICB0aGlzLmNoYXIgPSAtMVxuICAgIGxldCBnZXROZXh0XG4gICAgd2hpbGUgKGdldE5leHQgPT09IGZhbHNlIHx8IHRoaXMubmV4dENoYXIoKSkge1xuICAgICAgZ2V0TmV4dCA9IHRoaXMucnVuT25lKClcbiAgICB9XG4gICAgdGhpcy5fYnVmID0gbnVsbFxuICB9XG4gIG5leHRDaGFyICgpIHtcbiAgICBpZiAodGhpcy5jaGFyID09PSAweDBBKSB7XG4gICAgICArK3RoaXMubGluZVxuICAgICAgdGhpcy5jb2wgPSAtMVxuICAgIH1cbiAgICArK3RoaXMuaWlcbiAgICB0aGlzLmNoYXIgPSB0aGlzLl9idWYuY29kZVBvaW50QXQodGhpcy5paSlcbiAgICArK3RoaXMucG9zXG4gICAgKyt0aGlzLmNvbFxuICAgIHJldHVybiB0aGlzLmhhdmVCdWZmZXIoKVxuICB9XG4gIGhhdmVCdWZmZXIgKCkge1xuICAgIHJldHVybiB0aGlzLmlpIDwgdGhpcy5fYnVmLmxlbmd0aFxuICB9XG4gIHJ1bk9uZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUucGFyc2VyLmNhbGwodGhpcywgdGhpcy5zdGF0ZS5yZXR1cm5lZClcbiAgfVxuICBmaW5pc2ggKCkge1xuICAgIHRoaXMuY2hhciA9IFBhcnNlckVORFxuICAgIGxldCBsYXN0XG4gICAgZG8ge1xuICAgICAgbGFzdCA9IHRoaXMuc3RhdGUucGFyc2VyXG4gICAgICB0aGlzLnJ1bk9uZSgpXG4gICAgfSB3aGlsZSAodGhpcy5zdGF0ZS5wYXJzZXIgIT09IGxhc3QpXG5cbiAgICB0aGlzLmN0eCA9IG51bGxcbiAgICB0aGlzLnN0YXRlID0gbnVsbFxuICAgIHRoaXMuX2J1ZiA9IG51bGxcblxuICAgIHJldHVybiB0aGlzLm9ialxuICB9XG4gIG5leHQgKGZuKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgUGFyc2VyRXJyb3IoJ1RyaWVkIHRvIHNldCBzdGF0ZSB0byBub24tZXhpc3RlbnQgc3RhdGU6ICcgKyBKU09OLnN0cmluZ2lmeShmbikpXG4gICAgdGhpcy5zdGF0ZS5wYXJzZXIgPSBmblxuICB9XG4gIGdvdG8gKGZuKSB7XG4gICAgdGhpcy5uZXh0KGZuKVxuICAgIHJldHVybiB0aGlzLnJ1bk9uZSgpXG4gIH1cbiAgY2FsbCAoZm4sIHJldHVybldpdGgpIHtcbiAgICBpZiAocmV0dXJuV2l0aCkgdGhpcy5uZXh0KHJldHVybldpdGgpXG4gICAgdGhpcy5zdGFjay5wdXNoKHRoaXMuc3RhdGUpXG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdGF0ZShmbilcbiAgfVxuICBjYWxsTm93IChmbiwgcmV0dXJuV2l0aCkge1xuICAgIHRoaXMuY2FsbChmbiwgcmV0dXJuV2l0aClcbiAgICByZXR1cm4gdGhpcy5ydW5PbmUoKVxuICB9XG4gIHJldHVybiAodmFsdWUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgUGFyc2VyRXJyb3IoJ1N0YWNrIHVuZGVyZmxvdycpKVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IHRoaXMuc3RhdGUuYnVmXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhY2sucG9wKClcbiAgICB0aGlzLnN0YXRlLnJldHVybmVkID0gdmFsdWVcbiAgfVxuICByZXR1cm5Ob3cgKHZhbHVlKSB7XG4gICAgdGhpcy5yZXR1cm4odmFsdWUpXG4gICAgcmV0dXJuIHRoaXMucnVuT25lKClcbiAgfVxuICBjb25zdW1lICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlckVORCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgUGFyc2VyRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kLW9mLWJ1ZmZlcicpKVxuICAgIHRoaXMuc3RhdGUuYnVmICs9IHRoaXMuX2J1Zlt0aGlzLmlpXVxuICB9XG4gIGVycm9yIChlcnIpIHtcbiAgICBlcnIubGluZSA9IHRoaXMubGluZVxuICAgIGVyci5jb2wgPSB0aGlzLmNvbFxuICAgIGVyci5wb3MgPSB0aGlzLnBvc1xuICAgIHJldHVybiBlcnJcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwYXJzZVN0YXJ0ICgpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VyRXJyb3IoJ011c3QgZGVjbGFyZSBhIHBhcnNlU3RhcnQgbWV0aG9kJylcbiAgfVxufVxuUGFyc2VyLkVORCA9IFBhcnNlckVORFxuUGFyc2VyLkVycm9yID0gUGFyc2VyRXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZSA9PiB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc05hTihkYXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgRGF0ZXRpbWUnKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBkYXRlXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IChkLCBudW0pID0+IHtcbiAgbnVtID0gU3RyaW5nKG51bSlcbiAgd2hpbGUgKG51bS5sZW5ndGggPCBkKSBudW0gPSAnMCcgKyBudW1cbiAgcmV0dXJuIG51bVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IGYgPSByZXF1aXJlKCcuL2Zvcm1hdC1udW0uanMnKVxuXG5jbGFzcyBGbG9hdGluZ0RhdGVUaW1lIGV4dGVuZHMgRGF0ZSB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHN1cGVyKHZhbHVlICsgJ1onKVxuICAgIHRoaXMuaXNGbG9hdGluZyA9IHRydWVcbiAgfVxuICB0b0lTT1N0cmluZyAoKSB7XG4gICAgY29uc3QgZGF0ZSA9IGAke3RoaXMuZ2V0VVRDRnVsbFllYXIoKX0tJHtmKDIsIHRoaXMuZ2V0VVRDTW9udGgoKSArIDEpfS0ke2YoMiwgdGhpcy5nZXRVVENEYXRlKCkpfWBcbiAgICBjb25zdCB0aW1lID0gYCR7ZigyLCB0aGlzLmdldFVUQ0hvdXJzKCkpfToke2YoMiwgdGhpcy5nZXRVVENNaW51dGVzKCkpfToke2YoMiwgdGhpcy5nZXRVVENTZWNvbmRzKCkpfS4ke2YoMywgdGhpcy5nZXRVVENNaWxsaXNlY29uZHMoKSl9YFxuICAgIHJldHVybiBgJHtkYXRlfVQke3RpbWV9YFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWUgPT4ge1xuICBjb25zdCBkYXRlID0gbmV3IEZsb2F0aW5nRGF0ZVRpbWUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIERhdGV0aW1lJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZiA9IHJlcXVpcmUoJy4vZm9ybWF0LW51bS5qcycpXG5jb25zdCBEYXRlVGltZSA9IGdsb2JhbC5EYXRlXG5cbmNsYXNzIERhdGUgZXh0ZW5kcyBEYXRlVGltZSB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHN1cGVyKHZhbHVlKVxuICAgIHRoaXMuaXNEYXRlID0gdHJ1ZVxuICB9XG4gIHRvSVNPU3RyaW5nICgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRVVENGdWxsWWVhcigpfS0ke2YoMiwgdGhpcy5nZXRVVENNb250aCgpICsgMSl9LSR7ZigyLCB0aGlzLmdldFVUQ0RhdGUoKSl9YFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWUgPT4ge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIERhdGV0aW1lJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZiA9IHJlcXVpcmUoJy4vZm9ybWF0LW51bS5qcycpXG5cbmNsYXNzIFRpbWUgZXh0ZW5kcyBEYXRlIHtcbiAgY29uc3RydWN0b3IgKHZhbHVlKSB7XG4gICAgc3VwZXIoYDAwMDAtMDEtMDFUJHt2YWx1ZX1aYClcbiAgICB0aGlzLmlzVGltZSA9IHRydWVcbiAgfVxuICB0b0lTT1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIGAke2YoMiwgdGhpcy5nZXRVVENIb3VycygpKX06JHtmKDIsIHRoaXMuZ2V0VVRDTWludXRlcygpKX06JHtmKDIsIHRoaXMuZ2V0VVRDU2Vjb25kcygpKX0uJHtmKDMsIHRoaXMuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpfWBcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZhbHVlID0+IHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBUaW1lKHZhbHVlKVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBEYXRldGltZScpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRhdGVcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy13cmFwcGVycywgbm8tZXZhbCwgY2FtZWxjYXNlLCBvcGVyYXRvci1saW5lYnJlYWsgKi9cbm1vZHVsZS5leHBvcnRzID0gbWFrZVBhcnNlckNsYXNzKHJlcXVpcmUoJy4vcGFyc2VyLmpzJykpXG5tb2R1bGUuZXhwb3J0cy5tYWtlUGFyc2VyQ2xhc3MgPSBtYWtlUGFyc2VyQ2xhc3NcblxuY2xhc3MgVG9tbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobXNnKSB7XG4gICAgc3VwZXIobXNnKVxuICAgIHRoaXMubmFtZSA9ICdUb21sRXJyb3InXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFRvbWxFcnJvcilcbiAgICB0aGlzLmZyb21UT01MID0gdHJ1ZVxuICAgIHRoaXMud3JhcHBlZCA9IG51bGxcbiAgfVxufVxuVG9tbEVycm9yLndyYXAgPSBlcnIgPT4ge1xuICBjb25zdCB0ZXJyID0gbmV3IFRvbWxFcnJvcihlcnIubWVzc2FnZSlcbiAgdGVyci5jb2RlID0gZXJyLmNvZGVcbiAgdGVyci53cmFwcGVkID0gZXJyXG4gIHJldHVybiB0ZXJyXG59XG5tb2R1bGUuZXhwb3J0cy5Ub21sRXJyb3IgPSBUb21sRXJyb3JcblxuY29uc3QgY3JlYXRlRGF0ZVRpbWUgPSByZXF1aXJlKCcuL2NyZWF0ZS1kYXRldGltZS5qcycpXG5jb25zdCBjcmVhdGVEYXRlVGltZUZsb2F0ID0gcmVxdWlyZSgnLi9jcmVhdGUtZGF0ZXRpbWUtZmxvYXQuanMnKVxuY29uc3QgY3JlYXRlRGF0ZSA9IHJlcXVpcmUoJy4vY3JlYXRlLWRhdGUuanMnKVxuY29uc3QgY3JlYXRlVGltZSA9IHJlcXVpcmUoJy4vY3JlYXRlLXRpbWUuanMnKVxuXG5jb25zdCBDVFJMX0kgPSAweDA5XG5jb25zdCBDVFJMX0ogPSAweDBBXG5jb25zdCBDVFJMX00gPSAweDBEXG5jb25zdCBDVFJMX0NIQVJfQk9VTkRBUlkgPSAweDFGIC8vIHRoZSBsYXN0IG5vbi1jaGFyYWN0ZXIgaW4gdGhlIGxhdGluMSByZWdpb24gb2YgdW5pY29kZSwgZXhjZXB0IERFTFxuY29uc3QgQ0hBUl9TUCA9IDB4MjBcbmNvbnN0IENIQVJfUVVPVCA9IDB4MjJcbmNvbnN0IENIQVJfTlVNID0gMHgyM1xuY29uc3QgQ0hBUl9BUE9TID0gMHgyN1xuY29uc3QgQ0hBUl9QTFVTID0gMHgyQlxuY29uc3QgQ0hBUl9DT01NQSA9IDB4MkNcbmNvbnN0IENIQVJfSFlQSEVOID0gMHgyRFxuY29uc3QgQ0hBUl9QRVJJT0QgPSAweDJFXG5jb25zdCBDSEFSXzAgPSAweDMwXG5jb25zdCBDSEFSXzEgPSAweDMxXG5jb25zdCBDSEFSXzcgPSAweDM3XG5jb25zdCBDSEFSXzkgPSAweDM5XG5jb25zdCBDSEFSX0NPTE9OID0gMHgzQVxuY29uc3QgQ0hBUl9FUVVBTFMgPSAweDNEXG5jb25zdCBDSEFSX0EgPSAweDQxXG5jb25zdCBDSEFSX0UgPSAweDQ1XG5jb25zdCBDSEFSX0YgPSAweDQ2XG5jb25zdCBDSEFSX1QgPSAweDU0XG5jb25zdCBDSEFSX1UgPSAweDU1XG5jb25zdCBDSEFSX1ogPSAweDVBXG5jb25zdCBDSEFSX0xPV0JBUiA9IDB4NUZcbmNvbnN0IENIQVJfYSA9IDB4NjFcbmNvbnN0IENIQVJfYiA9IDB4NjJcbmNvbnN0IENIQVJfZSA9IDB4NjVcbmNvbnN0IENIQVJfZiA9IDB4NjZcbmNvbnN0IENIQVJfaSA9IDB4NjlcbmNvbnN0IENIQVJfbCA9IDB4NkNcbmNvbnN0IENIQVJfbiA9IDB4NkVcbmNvbnN0IENIQVJfbyA9IDB4NkZcbmNvbnN0IENIQVJfciA9IDB4NzJcbmNvbnN0IENIQVJfcyA9IDB4NzNcbmNvbnN0IENIQVJfdCA9IDB4NzRcbmNvbnN0IENIQVJfdSA9IDB4NzVcbmNvbnN0IENIQVJfeCA9IDB4NzhcbmNvbnN0IENIQVJfeiA9IDB4N0FcbmNvbnN0IENIQVJfTENVQiA9IDB4N0JcbmNvbnN0IENIQVJfUkNVQiA9IDB4N0RcbmNvbnN0IENIQVJfTFNRQiA9IDB4NUJcbmNvbnN0IENIQVJfQlNPTCA9IDB4NUNcbmNvbnN0IENIQVJfUlNRQiA9IDB4NURcbmNvbnN0IENIQVJfREVMID0gMHg3RlxuY29uc3QgU1VSUk9HQVRFX0ZJUlNUID0gMHhEODAwXG5jb25zdCBTVVJST0dBVEVfTEFTVCA9IDB4REZGRlxuXG5jb25zdCBlc2NhcGVzID0ge1xuICBbQ0hBUl9iXTogJ1xcdTAwMDgnLFxuICBbQ0hBUl90XTogJ1xcdTAwMDknLFxuICBbQ0hBUl9uXTogJ1xcdTAwMEEnLFxuICBbQ0hBUl9mXTogJ1xcdTAwMEMnLFxuICBbQ0hBUl9yXTogJ1xcdTAwMEQnLFxuICBbQ0hBUl9RVU9UXTogJ1xcdTAwMjInLFxuICBbQ0hBUl9CU09MXTogJ1xcdTAwNUMnXG59XG5cbmZ1bmN0aW9uIGlzRGlnaXQgKGNwKSB7XG4gIHJldHVybiBjcCA+PSBDSEFSXzAgJiYgY3AgPD0gQ0hBUl85XG59XG5mdW5jdGlvbiBpc0hleGl0IChjcCkge1xuICByZXR1cm4gKGNwID49IENIQVJfQSAmJiBjcCA8PSBDSEFSX0YpIHx8IChjcCA+PSBDSEFSX2EgJiYgY3AgPD0gQ0hBUl9mKSB8fCAoY3AgPj0gQ0hBUl8wICYmIGNwIDw9IENIQVJfOSlcbn1cbmZ1bmN0aW9uIGlzQml0IChjcCkge1xuICByZXR1cm4gY3AgPT09IENIQVJfMSB8fCBjcCA9PT0gQ0hBUl8wXG59XG5mdW5jdGlvbiBpc09jdGl0IChjcCkge1xuICByZXR1cm4gKGNwID49IENIQVJfMCAmJiBjcCA8PSBDSEFSXzcpXG59XG5mdW5jdGlvbiBpc0FscGhhTnVtUXVvdGVIeXBoZW4gKGNwKSB7XG4gIHJldHVybiAoY3AgPj0gQ0hBUl9BICYmIGNwIDw9IENIQVJfWilcbiAgICAgIHx8IChjcCA+PSBDSEFSX2EgJiYgY3AgPD0gQ0hBUl96KVxuICAgICAgfHwgKGNwID49IENIQVJfMCAmJiBjcCA8PSBDSEFSXzkpXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9BUE9TXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9RVU9UXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9MT1dCQVJcbiAgICAgIHx8IGNwID09PSBDSEFSX0hZUEhFTlxufVxuZnVuY3Rpb24gaXNBbHBoYU51bUh5cGhlbiAoY3ApIHtcbiAgcmV0dXJuIChjcCA+PSBDSEFSX0EgJiYgY3AgPD0gQ0hBUl9aKVxuICAgICAgfHwgKGNwID49IENIQVJfYSAmJiBjcCA8PSBDSEFSX3opXG4gICAgICB8fCAoY3AgPj0gQ0hBUl8wICYmIGNwIDw9IENIQVJfOSlcbiAgICAgIHx8IGNwID09PSBDSEFSX0xPV0JBUlxuICAgICAgfHwgY3AgPT09IENIQVJfSFlQSEVOXG59XG5jb25zdCBfdHlwZSA9IFN5bWJvbCgndHlwZScpXG5jb25zdCBfZGVjbGFyZWQgPSBTeW1ib2woJ2RlY2xhcmVkJylcblxuY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG5jb25zdCBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuY29uc3QgZGVzY3JpcHRvciA9IHtjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkfVxuXG5mdW5jdGlvbiBoYXNLZXkgKG9iaiwga2V5KSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgcmV0dXJuIHRydWVcbiAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpIGRlZmluZVByb3BlcnR5KG9iaiwgJ19fcHJvdG9fXycsIGRlc2NyaXB0b3IpXG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBJTkxJTkVfVEFCTEUgPSBTeW1ib2woJ2lubGluZS10YWJsZScpXG5mdW5jdGlvbiBJbmxpbmVUYWJsZSAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSwge1xuICAgIFtfdHlwZV06IHt2YWx1ZTogSU5MSU5FX1RBQkxFfVxuICB9KVxufVxuZnVuY3Rpb24gaXNJbmxpbmVUYWJsZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBJTkxJTkVfVEFCTEVcbn1cblxuY29uc3QgVEFCTEUgPSBTeW1ib2woJ3RhYmxlJylcbmZ1bmN0aW9uIFRhYmxlICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCB7XG4gICAgW190eXBlXToge3ZhbHVlOiBUQUJMRX0sXG4gICAgW19kZWNsYXJlZF06IHt2YWx1ZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlfVxuICB9KVxufVxuZnVuY3Rpb24gaXNUYWJsZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBUQUJMRVxufVxuXG5jb25zdCBfY29udGVudFR5cGUgPSBTeW1ib2woJ2NvbnRlbnQtdHlwZScpXG5jb25zdCBJTkxJTkVfTElTVCA9IFN5bWJvbCgnaW5saW5lLWxpc3QnKVxuZnVuY3Rpb24gSW5saW5lTGlzdCAodHlwZSkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoW10sIHtcbiAgICBbX3R5cGVdOiB7dmFsdWU6IElOTElORV9MSVNUfSxcbiAgICBbX2NvbnRlbnRUeXBlXToge3ZhbHVlOiB0eXBlfVxuICB9KVxufVxuZnVuY3Rpb24gaXNJbmxpbmVMaXN0IChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2YgKG9iaikgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIG9ialtfdHlwZV0gPT09IElOTElORV9MSVNUXG59XG5cbmNvbnN0IExJU1QgPSBTeW1ib2woJ2xpc3QnKVxuZnVuY3Rpb24gTGlzdCAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhbXSwge1xuICAgIFtfdHlwZV06IHt2YWx1ZTogTElTVH1cbiAgfSlcbn1cbmZ1bmN0aW9uIGlzTGlzdCAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBMSVNUXG59XG5cbi8vIGluIGFuIGV2YWwsIHRvIGxldCBidW5kbGVycyBub3Qgc2x1cnAgaW4gYSB1dGlsIHByb3h5XG5sZXQgX2N1c3RvbVxudHJ5IHtcbiAgY29uc3QgdXRpbEluc3BlY3QgPSBldmFsKFwicmVxdWlyZSgndXRpbCcpLmluc3BlY3RcIilcbiAgX2N1c3RvbSA9IHV0aWxJbnNwZWN0LmN1c3RvbVxufSBjYXRjaCAoXykge1xuICAvKiBldmFsIHJlcXVpcmUgbm90IGF2YWlsYWJsZSBpbiB0cmFuc3BpbGVkIGJ1bmRsZSAqL1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnN0IF9pbnNwZWN0ID0gX2N1c3RvbSB8fCAnaW5zcGVjdCdcblxuY2xhc3MgQm94ZWRCaWdJbnQge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWx1ZSA9IGdsb2JhbC5CaWdJbnQuYXNJbnROKDY0LCB2YWx1ZSlcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIF90eXBlLCB7dmFsdWU6IElOVEVHRVJ9KVxuICB9XG4gIGlzTmFOICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbFxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMudmFsdWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgW19pbnNwZWN0XSAoKSB7XG4gICAgcmV0dXJuIGBbQmlnSW50OiAke3RoaXMudG9TdHJpbmcoKX1dfWBcbiAgfVxuICB2YWx1ZU9mICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNvbnN0IElOVEVHRVIgPSBTeW1ib2woJ2ludGVnZXInKVxuZnVuY3Rpb24gSW50ZWdlciAodmFsdWUpIHtcbiAgbGV0IG51bSA9IE51bWJlcih2YWx1ZSlcbiAgLy8gLTAgaXMgYSBmbG9hdCB0aGluZywgbm90IGFuIGludCB0aGluZ1xuICBpZiAoT2JqZWN0LmlzKG51bSwgLTApKSBudW0gPSAwXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChnbG9iYWwuQmlnSW50ICYmICFOdW1iZXIuaXNTYWZlSW50ZWdlcihudW0pKSB7XG4gICAgcmV0dXJuIG5ldyBCb3hlZEJpZ0ludCh2YWx1ZSlcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZXcgTnVtYmVyKG51bSksIHtcbiAgICAgIGlzTmFOOiB7dmFsdWU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzTmFOKHRoaXMpIH19LFxuICAgICAgW190eXBlXToge3ZhbHVlOiBJTlRFR0VSfSxcbiAgICAgIFtfaW5zcGVjdF06IHt2YWx1ZTogKCkgPT4gYFtJbnRlZ2VyOiAke3ZhbHVlfV1gfVxuICAgIH0pXG4gIH1cbn1cbmZ1bmN0aW9uIGlzSW50ZWdlciAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBJTlRFR0VSXG59XG5cbmNvbnN0IEZMT0FUID0gU3ltYm9sKCdmbG9hdCcpXG5mdW5jdGlvbiBGbG9hdCAodmFsdWUpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG5ldyBOdW1iZXIodmFsdWUpLCB7XG4gICAgW190eXBlXToge3ZhbHVlOiBGTE9BVH0sXG4gICAgW19pbnNwZWN0XToge3ZhbHVlOiAoKSA9PiBgW0Zsb2F0OiAke3ZhbHVlfV1gfVxuICB9KVxufVxuZnVuY3Rpb24gaXNGbG9hdCAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBGTE9BVFxufVxuXG5mdW5jdGlvbiB0b21sVHlwZSAodmFsdWUpIHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnbnVsbCdcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ2RhdGV0aW1lJ1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKF90eXBlIGluIHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHZhbHVlW190eXBlXSkge1xuICAgICAgICBjYXNlIElOTElORV9UQUJMRTogcmV0dXJuICdpbmxpbmUtdGFibGUnXG4gICAgICAgIGNhc2UgSU5MSU5FX0xJU1Q6IHJldHVybiAnaW5saW5lLWxpc3QnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGNhc2UgVEFCTEU6IHJldHVybiAndGFibGUnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGNhc2UgTElTVDogcmV0dXJuICdsaXN0J1xuICAgICAgICBjYXNlIEZMT0FUOiByZXR1cm4gJ2Zsb2F0J1xuICAgICAgICBjYXNlIElOVEVHRVI6IHJldHVybiAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHR5cGVcbn1cblxuZnVuY3Rpb24gbWFrZVBhcnNlckNsYXNzIChQYXJzZXIpIHtcbiAgY2xhc3MgVE9NTFBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgc3VwZXIoKVxuICAgICAgdGhpcy5jdHggPSB0aGlzLm9iaiA9IFRhYmxlKClcbiAgICB9XG5cbiAgICAvKiBNQVRDSCBIRUxQRVIgKi9cbiAgICBhdEVuZE9mV29yZCAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGFyID09PSBDSEFSX05VTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSB8fCB0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5hdEVuZE9mTGluZSgpXG4gICAgfVxuICAgIGF0RW5kT2ZMaW5lICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDVFJMX01cbiAgICB9XG5cbiAgICBwYXJzZVN0YXJ0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlVGFibGVPckxpc3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlQ29tbWVudClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9NKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKGlzQWxwaGFOdW1RdW90ZUh5cGhlbih0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUFzc2lnblN0YXRlbWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcihgVW5rbm93biBjaGFyYWN0ZXIgXCIke3RoaXMuY2hhcn1cImApKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhFTFBFUiwgdGhpcyBzdHJpcHMgYW55IHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmVcbiAgICAvLyB0aGVuIFJFVFVSTlMuIExhc3Qgc3RhdGUgaW4gYSBwcm9kdWN0aW9uLlxuICAgIHBhcnNlV2hpdGVzcGFjZVRvRU9MICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX05VTSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VDb21tZW50KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIG9ubHkgd2hpdGVzcGFjZSBvciBjb21tZW50cyB0aWxsIGVuZCBvZiBsaW5lJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogQVNTSUdOTUVOVDoga2V5ID0gdmFsdWUgKi9cbiAgICBwYXJzZUFzc2lnblN0YXRlbWVudCAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VBc3NpZ24sIHRoaXMucmVjb3JkQXNzaWduU3RhdGVtZW50KVxuICAgIH1cbiAgICByZWNvcmRBc3NpZ25TdGF0ZW1lbnQgKGt2KSB7XG4gICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5jdHhcbiAgICAgIGxldCBmaW5hbEtleSA9IGt2LmtleS5wb3AoKVxuICAgICAgZm9yIChsZXQga3cgb2Yga3Yua2V5KSB7XG4gICAgICAgIGlmIChoYXNLZXkodGFyZ2V0LCBrdykgJiYgKCFpc1RhYmxlKHRhcmdldFtrd10pIHx8IHRhcmdldFtrd11bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2t3XSA9IHRhcmdldFtrd10gfHwgVGFibGUoKVxuICAgICAgfVxuICAgICAgaWYgKGhhc0tleSh0YXJnZXQsIGZpbmFsS2V5KSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICB9XG4gICAgICAvLyB1bmJveCBvdXIgbnVtYmVyc1xuICAgICAgaWYgKGlzSW50ZWdlcihrdi52YWx1ZSkgfHwgaXNGbG9hdChrdi52YWx1ZSkpIHtcbiAgICAgICAgdGFyZ2V0W2ZpbmFsS2V5XSA9IGt2LnZhbHVlLnZhbHVlT2YoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2ZpbmFsS2V5XSA9IGt2LnZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VXaGl0ZXNwYWNlVG9FT0wpXG4gICAgfVxuXG4gICAgLyogQVNTU0lHTk1FTlQgZXhwcmVzc2lvbiwga2V5ID0gdmFsdWUgcG9zc2libHkgaW5zaWRlIGFuIGlubGluZSB0YWJsZSAqL1xuICAgIHBhcnNlQXNzaWduICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucmVjb3JkQXNzaWduS2V5d29yZClcbiAgICB9XG4gICAgcmVjb3JkQXNzaWduS2V5d29yZCAoa2V5KSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSkge1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdFRhYmxlLnB1c2goa2V5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSA9IFtrZXldXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VBc3NpZ25LZXl3b3JkUHJlRG90KVxuICAgIH1cbiAgICBwYXJzZUFzc2lnbktleXdvcmRQcmVEb3QgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlQXNzaWduS2V5d29yZFBvc3REb3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciAhPT0gQ0hBUl9TUCAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VBc3NpZ25FcXVhbClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VBc3NpZ25LZXl3b3JkUG9zdERvdCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyICE9PSBDSEFSX1NQICYmIHRoaXMuY2hhciAhPT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucmVjb3JkQXNzaWduS2V5d29yZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUFzc2lnbkVxdWFsICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfRVFVQUxTKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUFzc2lnblByZVZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCI9XCInKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VBc3NpZ25QcmVWYWx1ZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VWYWx1ZSwgdGhpcy5yZWNvcmRBc3NpZ25WYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmVjb3JkQXNzaWduVmFsdWUgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coe2tleTogdGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSwgdmFsdWU6IHZhbHVlfSlcbiAgICB9XG5cbiAgICAvKiBDT01NRU5UUzogIy4uLmVvbCAqL1xuICAgIHBhcnNlQ29tbWVudCAoKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oKVxuICAgICAgICB9XG4gICAgICB9IHdoaWxlICh0aGlzLm5leHRDaGFyKCkpXG4gICAgfVxuXG4gICAgLyogVEFCTEVTIEFORCBMSVNUUywgW2Zvb10gYW5kIFtbZm9vXV0gKi9cbiAgICBwYXJzZVRhYmxlT3JMaXN0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTFNRQikge1xuICAgICAgICB0aGlzLm5leHQodGhpcy5wYXJzZUxpc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUYWJsZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBUQUJMRSBbZm9vLmJhci5iYXpdICovXG4gICAgcGFyc2VUYWJsZSAoKSB7XG4gICAgICB0aGlzLmN0eCA9IHRoaXMub2JqXG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUYWJsZU5leHQpXG4gICAgfVxuICAgIHBhcnNlVGFibGVOZXh0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucGFyc2VUYWJsZU1vcmUpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVGFibGVNb3JlIChrZXl3b3JkKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIGlmIChoYXNLZXkodGhpcy5jdHgsIGtleXdvcmQpICYmICghaXNUYWJsZSh0aGlzLmN0eFtrZXl3b3JkXSkgfHwgdGhpcy5jdHhba2V5d29yZF1bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXSA9IHRoaXMuY3R4W2tleXdvcmRdIHx8IFRhYmxlKClcbiAgICAgICAgICB0aGlzLmN0eFtfZGVjbGFyZWRdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVdoaXRlc3BhY2VUb0VPTClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICBpZiAoIWhhc0tleSh0aGlzLmN0eCwga2V5d29yZCkpIHtcbiAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY3R4W2tleXdvcmRdID0gVGFibGUoKVxuICAgICAgICB9IGVsc2UgaWYgKGlzVGFibGUodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXVxuICAgICAgICB9IGVsc2UgaWYgKGlzTGlzdCh0aGlzLmN0eFtrZXl3b3JkXSkpIHtcbiAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY3R4W2tleXdvcmRdW3RoaXMuY3R4W2tleXdvcmRdLmxlbmd0aCAtIDFdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgcmVkZWZpbmUgZXhpc3Rpbmcga2V5XCIpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVRhYmxlTmV4dClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIHdoaXRlc3BhY2UsIC4gb3IgXScpKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIExJU1QgW1thLmIuY11dICovXG4gICAgcGFyc2VMaXN0ICgpIHtcbiAgICAgIHRoaXMuY3R4ID0gdGhpcy5vYmpcbiAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUxpc3ROZXh0KVxuICAgIH1cbiAgICBwYXJzZUxpc3ROZXh0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucGFyc2VMaXN0TW9yZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXN0TW9yZSAoa2V5d29yZCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUlNRQikge1xuICAgICAgICBpZiAoIWhhc0tleSh0aGlzLmN0eCwga2V5d29yZCkpIHtcbiAgICAgICAgICB0aGlzLmN0eFtrZXl3b3JkXSA9IExpc3QoKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0lubGluZUxpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgZXh0ZW5kIGFuIGlubGluZSBhcnJheVwiKSlcbiAgICAgICAgfSBlbHNlIGlmIChpc0xpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IFRhYmxlKClcbiAgICAgICAgICB0aGlzLmN0eFtrZXl3b3JkXS5wdXNoKG5leHQpXG4gICAgICAgICAgdGhpcy5jdHggPSBuZXh0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgcmVkZWZpbmUgYW4gZXhpc3Rpbmcga2V5XCIpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpc3RFbmQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgaWYgKCFoYXNLZXkodGhpcy5jdHgsIGtleXdvcmQpKSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXSA9IFRhYmxlKClcbiAgICAgICAgfSBlbHNlIGlmIChpc0lubGluZUxpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgZXh0ZW5kIGFuIGlubGluZSBhcnJheVwiKSlcbiAgICAgICAgfSBlbHNlIGlmIChpc0lubGluZVRhYmxlKHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcihcIkNhbid0IGV4dGVuZCBhbiBpbmxpbmUgdGFibGVcIikpXG4gICAgICAgIH0gZWxzZSBpZiAoaXNMaXN0KHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jdHhba2V5d29yZF1bdGhpcy5jdHhba2V5d29yZF0ubGVuZ3RoIC0gMV1cbiAgICAgICAgfSBlbHNlIGlmIChpc1RhYmxlKHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jdHhba2V5d29yZF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBhbiBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGlzdE5leHQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCB3aGl0ZXNwYWNlLCAuIG9yIF0nKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXN0RW5kIChrZXl3b3JkKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1JTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlV2hpdGVzcGFjZVRvRU9MKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgd2hpdGVzcGFjZSwgLiBvciBdJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogVkFMVUUgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIGlubGluZSBsaXN0LCBpbmxpbmUgb2JqZWN0ICovXG4gICAgcGFyc2VWYWx1ZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignS2V5IHdpdGhvdXQgdmFsdWUnKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRG91YmxlU3RyaW5nKVxuICAgICAgfSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlU2luZ2xlU3RyaW5nKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlclNpZ24pXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUluZilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTmFuKVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVyT3JEYXRlVGltZSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX3QgfHwgdGhpcy5jaGFyID09PSBDSEFSX2YpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQm9vbGVhbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlSW5saW5lTGlzdCwgdGhpcy5yZWNvcmRWYWx1ZSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xDVUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlSW5saW5lVGFibGUsIHRoaXMucmVjb3JkVmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3Rpbmcgc3RyaW5nLCBudW1iZXIsIGRhdGV0aW1lLCBib29sZWFuLCBpbmxpbmUgYXJyYXkgb3IgaW5saW5lIHRhYmxlJykpXG4gICAgICB9XG4gICAgfVxuICAgIHJlY29yZFZhbHVlICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KHZhbHVlKVxuICAgIH1cblxuICAgIHBhcnNlSW5mICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfbikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VJbmYyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCJpbmZcIiwgXCIraW5mXCIgb3IgXCItaW5mXCInKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VJbmYyICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfZikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYgPT09ICctJykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybigtSW5maW5pdHkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKEluZmluaXR5KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBcImluZlwiLCBcIitpbmZcIiBvciBcIi1pbmZcIicpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlTmFuICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VOYW4yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCJuYW5cIicpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU5hbjIgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihOYU4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBcIm5hblwiJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogS0VZUywgYmFyZXdvcmRzIG9yIGJhc2ljLCBsaXRlcmFsLCBvciBkb3R0ZWQgKi9cbiAgICBwYXJzZUtleXdvcmQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9RVU9UKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUJhc2ljU3RyaW5nKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQVBPUykge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VMaXRlcmFsU3RyaW5nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFyZUtleSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBLRVlTOiBiYXJld29yZHMgKi9cbiAgICBwYXJzZUJhcmVLZXkgKCkge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdLZXkgZW5kZWQgd2l0aG91dCB2YWx1ZScpKVxuICAgICAgICB9IGVsc2UgaWYgKGlzQWxwaGFOdW1IeXBoZW4odGhpcy5jaGFyKSkge1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFbXB0eSBiYXJlIGtleXMgYXJlIG5vdCBhbGxvd2VkJykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cblxuICAgIC8qIFNUUklOR1MsIHNpbmdsZSBxdW90ZWQgKGxpdGVyYWwpICovXG4gICAgcGFyc2VTaW5nbGVTdHJpbmcgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZ01heWJlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTGl0ZXJhbFN0cmluZylcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXRlcmFsU3RyaW5nICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZMaW5lKCkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VudGVybWluYXRlZCBzdHJpbmcnKSlcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfREVMIHx8ICh0aGlzLmNoYXIgPD0gQ1RSTF9DSEFSX0JPVU5EQVJZICYmIHRoaXMuY2hhciAhPT0gQ1RSTF9JKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3JDb250cm9sQ2hhckluU3RyaW5nKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICB9XG4gICAgICB9IHdoaWxlICh0aGlzLm5leHRDaGFyKCkpXG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nTWF5YmUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nQ29udGVudClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50ICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpRW5kKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gUGFyc2VyLkVORCkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIG11bHRpLWxpbmUgc3RyaW5nJykpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0RFTCB8fCAodGhpcy5jaGFyIDw9IENUUkxfQ0hBUl9CT1VOREFSWSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSiAmJiB0aGlzLmNoYXIgIT09IENUUkxfTSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yQ29udHJvbENoYXJJblN0cmluZygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cbiAgICBwYXJzZUxpdGVyYWxNdWx0aUVuZCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpRW5kMilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9IFwiJ1wiXG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpRW5kMiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9IFwiJydcIlxuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIFNUUklOR1MgZG91YmxlIHF1b3RlZCAqL1xuICAgIHBhcnNlRG91YmxlU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUVVPVCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVN0cmluZ01heWJlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFzaWNTdHJpbmcpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlQmFzaWNTdHJpbmcgKCkge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0JTT0wpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VFc2NhcGUsIHRoaXMucmVjb3JkRXNjYXBlUmVwbGFjZW1lbnQpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXRFbmRPZkxpbmUoKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIHN0cmluZycpKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9ERUwgfHwgKHRoaXMuY2hhciA8PSBDVFJMX0NIQVJfQk9VTkRBUlkgJiYgdGhpcy5jaGFyICE9PSBDVFJMX0kpKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvckNvbnRyb2xDaGFySW5TdHJpbmcoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKHRoaXMubmV4dENoYXIoKSlcbiAgICB9XG4gICAgcmVjb3JkRXNjYXBlUmVwbGFjZW1lbnQgKHJlcGxhY2VtZW50KSB7XG4gICAgICB0aGlzLnN0YXRlLmJ1ZiArPSByZXBsYWNlbWVudFxuICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFzaWNTdHJpbmcpXG4gICAgfVxuICAgIHBhcnNlTXVsdGlTdHJpbmdNYXliZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTXVsdGlTdHJpbmcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU11bHRpU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTXVsdGlTdHJpbmdDb250ZW50ICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9CU09MKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlTXVsdGlFc2NhcGUsIHRoaXMucmVjb3JkTXVsdGlFc2NhcGVSZXBsYWNlbWVudClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUVVPVCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpRW5kKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gUGFyc2VyLkVORCkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIG11bHRpLWxpbmUgc3RyaW5nJykpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0RFTCB8fCAodGhpcy5jaGFyIDw9IENUUkxfQ0hBUl9CT1VOREFSWSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSiAmJiB0aGlzLmNoYXIgIT09IENUUkxfTSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yQ29udHJvbENoYXJJblN0cmluZygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cbiAgICBlcnJvckNvbnRyb2xDaGFySW5TdHJpbmcgKCkge1xuICAgICAgbGV0IGRpc3BsYXlDb2RlID0gJ1xcXFx1MDAnXG4gICAgICBpZiAodGhpcy5jaGFyIDwgMTYpIHtcbiAgICAgICAgZGlzcGxheUNvZGUgKz0gJzAnXG4gICAgICB9XG4gICAgICBkaXNwbGF5Q29kZSArPSB0aGlzLmNoYXIudG9TdHJpbmcoMTYpXG5cbiAgICAgIHJldHVybiB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoYENvbnRyb2wgY2hhcmFjdGVycyAoY29kZXMgPCAweDFmIGFuZCAweDdmKSBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaW5ncywgdXNlICR7ZGlzcGxheUNvZGV9IGluc3RlYWRgKSlcbiAgICB9XG4gICAgcmVjb3JkTXVsdGlFc2NhcGVSZXBsYWNlbWVudCAocmVwbGFjZW1lbnQpIHtcbiAgICAgIHRoaXMuc3RhdGUuYnVmICs9IHJlcGxhY2VtZW50XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgfVxuICAgIHBhcnNlTXVsdGlFbmQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9RVU9UKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpRW5kMilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9ICdcIidcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU11bHRpRW5kMiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9ICdcIlwiJ1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTXVsdGlFc2NhcGUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ1RSTF9NIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9KKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpVHJpbSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVByZU11bHRpVHJpbSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUVzY2FwZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VQcmVNdWx0aVRyaW0gKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVRyaW0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCBlc2NhcGUgd2hpdGVzcGFjZVwiKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VNdWx0aVRyaW0gKCkge1xuICAgICAgLy8gZXhwbGljaXRseSB3aGl0ZXNwYWNlIGhlcmUsIEVORCBzaG91bGQgZm9sbG93IHRoZSBzYW1lIHBhdGggYXMgY2hhcnNcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSiB8fCB0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRXNjYXBlICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgaW4gZXNjYXBlcykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oZXNjYXBlc1t0aGlzLmNoYXJdKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfdSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VTbWFsbFVuaWNvZGUsIHRoaXMucGFyc2VVbmljb2RlUmV0dXJuKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfVSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VMYXJnZVVuaWNvZGUsIHRoaXMucGFyc2VVbmljb2RlUmV0dXJuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmtub3duIGVzY2FwZSBjaGFyYWN0ZXI6ICcgKyB0aGlzLmNoYXIpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVVuaWNvZGVSZXR1cm4gKGNoYXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IHBhcnNlSW50KGNoYXIsIDE2KVxuICAgICAgICBpZiAoY29kZVBvaW50ID49IFNVUlJPR0FURV9GSVJTVCAmJiBjb2RlUG9pbnQgPD0gU1VSUk9HQVRFX0xBU1QpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgdW5pY29kZSwgY2hhcmFjdGVyIGluIHJhbmdlIDB4RDgwMCAtIDB4REZGRiBpcyByZXNlcnZlZCcpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IoVG9tbEVycm9yLndyYXAoZXJyKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VTbWFsbFVuaWNvZGUgKCkge1xuICAgICAgaWYgKCFpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiB1bmljb2RlIHNlcXVlbmNlLCBleHBlY3RlZCBoZXgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPj0gNCkgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMYXJnZVVuaWNvZGUgKCkge1xuICAgICAgaWYgKCFpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiB1bmljb2RlIHNlcXVlbmNlLCBleHBlY3RlZCBoZXgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPj0gOCkgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBOVU1CRVJTICovXG4gICAgcGFyc2VOdW1iZXJTaWduICgpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNYXliZVNpZ25lZEluZk9yTmFuKVxuICAgIH1cbiAgICBwYXJzZU1heWJlU2lnbmVkSW5mT3JOYW4gKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUluZilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTmFuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbE5vdyh0aGlzLnBhcnNlTm9VbmRlciwgdGhpcy5wYXJzZU51bWJlckludGVnZXJTdGFydClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VOdW1iZXJJbnRlZ2VyU3RhcnQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl8wKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckludGVnZXJFeHBvbmVudE9yRGVjaW1hbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlckludGVnZXIpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVySW50ZWdlckV4cG9uZW50T3JEZWNpbWFsICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUEVSSU9EKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXIsIHRoaXMucGFyc2VOdW1iZXJGbG9hdClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0UgfHwgdGhpcy5jaGFyID09PSBDSEFSX2UpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTnVtYmVyRXhwb25lbnRTaWduKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KEludGVnZXIodGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckludGVnZXIgKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9FIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckV4cG9uZW50U2lnbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBJbnRlZ2VyKHRoaXMuc3RhdGUuYnVmKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHJlc3VsdC5pc05hTigpKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIG51bWJlcicpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhyZXN1bHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VOb1VuZGVyICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QgfHwgdGhpcy5jaGFyID09PSBDSEFSX0UgfHwgdGhpcy5jaGFyID09PSBDSEFSX2UpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgZGlnaXQnKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBudW1iZXInKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgfVxuICAgIHBhcnNlTm9VbmRlckhleE9jdEJpbkxpdGVyYWwgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9MT1dCQVIgfHwgdGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZXb3JkKCkpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbmNvbXBsZXRlIG51bWJlcicpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KClcbiAgICB9XG4gICAgcGFyc2VOdW1iZXJGbG9hdCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2UgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfRSB8fCB0aGlzLmNoYXIgPT09IENIQVJfZSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VOdW1iZXJFeHBvbmVudFNpZ24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coRmxvYXQodGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckV4cG9uZW50U2lnbiAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlckV4cG9uZW50KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHRoaXMuY2FsbCh0aGlzLnBhcnNlTm9VbmRlciwgdGhpcy5wYXJzZU51bWJlckV4cG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgLSwgKyBvciBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckV4cG9uZW50ICgpIHtcbiAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KEZsb2F0KHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBOVU1CRVJTIG9yIERBVEVUSU1FUyAgKi9cbiAgICBwYXJzZU51bWJlck9yRGF0ZVRpbWUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl8wKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckJhc2VPckRhdGVUaW1lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVyT3JEYXRlVGltZU9ubHkpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVyT3JEYXRlVGltZU9ubHkgKCkge1xuICAgICAgLy8gbm90ZSwgaWYgdHdvIHplcm9zIGFyZSBpbiBhIHJvdyB0aGVuIGl0IE1VU1QgYmUgYSBkYXRlXG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVySW50ZWdlcilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPiA0KSB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckludGVnZXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9FIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckV4cG9uZW50U2lnbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlRGF0ZVRpbWUpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9DT0xPTikge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VPbmx5VGltZUhvdXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRGF0ZVRpbWVPbmx5ICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCA0KSB7XG4gICAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VPbmx5VGltZUhvdXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFeHBlY3RlZCBkaWdpdCB3aGlsZSBwYXJzaW5nIHllYXIgcGFydCBvZiBhIGRhdGUnKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VEYXRlVGltZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0V4cGVjdGVkIGh5cGhlbiAoLSkgd2hpbGUgcGFyc2luZyB5ZWFyIHBhcnQgb2YgZGF0ZScpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVyQmFzZU9yRGF0ZVRpbWUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9iKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsLCB0aGlzLnBhcnNlSW50ZWdlckJpbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX28pIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlTm9VbmRlckhleE9jdEJpbkxpdGVyYWwsIHRoaXMucGFyc2VJbnRlZ2VyT2N0KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfeCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVySGV4T2N0QmluTGl0ZXJhbCwgdGhpcy5wYXJzZUludGVnZXJIZXgpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVySW50ZWdlcilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZURhdGVUaW1lT25seSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhJbnRlZ2VyKHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VJbnRlZ2VySGV4ICgpIHtcbiAgICAgIGlmIChpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVySGV4T2N0QmluTGl0ZXJhbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IEludGVnZXIodGhpcy5zdGF0ZS5idWYpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocmVzdWx0LmlzTmFOKCkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgbnVtYmVyJykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KHJlc3VsdClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZUludGVnZXJPY3QgKCkge1xuICAgICAgaWYgKGlzT2N0aXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZilcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChyZXN1bHQuaXNOYU4oKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBudW1iZXInKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3cocmVzdWx0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlSW50ZWdlckJpbiAoKSB7XG4gICAgICBpZiAoaXNCaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZilcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChyZXN1bHQuaXNOYU4oKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBudW1iZXInKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3cocmVzdWx0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogREFURVRJTUUgKi9cbiAgICBwYXJzZURhdGVUaW1lICgpIHtcbiAgICAgIC8vIHdlIGVudGVyIGhlcmUgaGF2aW5nIGp1c3QgY29uc3VtZWQgdGhlIHllYXIgYW5kIGFib3V0IHRvIGNvbnN1bWUgdGhlIGh5cGhlblxuICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdZZWFycyBsZXNzIHRoYW4gMTAwMCBtdXN0IGJlIHplcm8gcGFkZGVkIHRvIGZvdXIgY2hhcmFjdGVycycpKVxuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgPSB0aGlzLnN0YXRlLmJ1ZlxuICAgICAgdGhpcy5zdGF0ZS5idWYgPSAnJ1xuICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRGF0ZU1vbnRoKVxuICAgIH1cbiAgICBwYXJzZURhdGVNb250aCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0hZUEhFTikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignTW9udGhzIGxlc3MgdGhhbiAxMCBtdXN0IGJlIHplcm8gcGFkZGVkIHRvIHR3byBjaGFyYWN0ZXJzJykpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJy0nICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgICAgdGhpcy5zdGF0ZS5idWYgPSAnJ1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VEYXRlRGF5KVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZURhdGVEYXkgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9UIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9TUCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignRGF5cyBsZXNzIHRoYW4gMTAgbXVzdCBiZSB6ZXJvIHBhZGRlZCB0byB0d28gY2hhcmFjdGVycycpKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICctJyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlU3RhcnRUaW1lSG91cilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhjcmVhdGVEYXRlKHRoaXMuc3RhdGUucmVzdWx0ICsgJy0nICsgdGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVN0YXJ0VGltZUhvdXIgKCkge1xuICAgICAgaWYgKHRoaXMuYXRFbmRPZldvcmQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coY3JlYXRlRGF0ZSh0aGlzLnN0YXRlLnJlc3VsdCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUaW1lSG91cilcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUaW1lSG91ciAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdIb3VycyBsZXNzIHRoYW4gMTAgbXVzdCBiZSB6ZXJvIHBhZGRlZCB0byB0d28gY2hhcmFjdGVycycpKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICdUJyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZU1pbilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgZGF0ZXRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUaW1lTWluICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyICYmIGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPT09IDIgJiYgdGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICc6JyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVNlYylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVTZWMgKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJzonICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgICAgICB0aGlzLnN0YXRlLmJ1ZiA9ICcnXG4gICAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVPckZyYWN0aW9uKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgZGF0ZXRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZU9ubHlUaW1lSG91ciAoKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9DT0xPTikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSG91cnMgbGVzcyB0aGFuIDEwIG11c3QgYmUgemVybyBwYWRkZWQgdG8gdHdvIGNoYXJhY3RlcnMnKSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdCA9IHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlT25seVRpbWVNaW4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgdGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lTWluICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyICYmIGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPT09IDIgJiYgdGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICc6JyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlT25seVRpbWVTZWMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgdGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lU2VjICgpIHtcbiAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU9ubHlUaW1lRnJhY3Rpb25NYXliZSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbmNvbXBsZXRlIHRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VPbmx5VGltZUZyYWN0aW9uTWF5YmUgKCkge1xuICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJzonICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUEVSSU9EKSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VPbmx5VGltZUZyYWN0aW9uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKGNyZWF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lRnJhY3Rpb24gKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZXb3JkKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFeHBlY3RlZCBkaWdpdCBpbiBtaWxsaXNlY29uZHMnKSlcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KGNyZWF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyAnLicgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBwZXJpb2QgKC4pLCBtaW51cyAoLSksIHBsdXMgKCspIG9yIFonKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZVRpbWVab25lT3JGcmFjdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICB0aGlzLm5leHQodGhpcy5wYXJzZURhdGVUaW1lRnJhY3Rpb24pXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4gfHwgdGhpcy5jaGFyID09PSBDSEFSX1BMVVMpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VUaW1lWm9uZUhvdXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9aKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihjcmVhdGVEYXRlVGltZSh0aGlzLnN0YXRlLnJlc3VsdCArIHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhjcmVhdGVEYXRlVGltZUZsb2F0KHRoaXMuc3RhdGUucmVzdWx0ICsgdGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciBpbiBkYXRldGltZSwgZXhwZWN0ZWQgcGVyaW9kICguKSwgbWludXMgKC0pLCBwbHVzICgrKSBvciBaJykpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRGF0ZVRpbWVGcmFjdGlvbiAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0V4cGVjdGVkIGRpZ2l0IGluIG1pbGxpc2Vjb25kcycpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVIb3VyKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfWikge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oY3JlYXRlRGF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXRFbmRPZldvcmQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coY3JlYXRlRGF0ZVRpbWVGbG9hdCh0aGlzLnN0YXRlLnJlc3VsdCArIHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gZGF0ZXRpbWUsIGV4cGVjdGVkIHBlcmlvZCAoLiksIG1pbnVzICgtKSwgcGx1cyAoKykgb3IgWicpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVab25lSG91ciAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIC8vIEZJWE1FOiBObyBtb3JlIHJlZ2V4cHNcbiAgICAgICAgaWYgKC9cXGRcXGQkLy50ZXN0KHRoaXMuc3RhdGUuYnVmKSkgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVTZXApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVab25lU2VwICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VUaW1lWm9uZU1pbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gZGF0ZXRpbWUsIGV4cGVjdGVkIGNvbG9uJykpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVGltZVpvbmVNaW4gKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICBpZiAoL1xcZFxcZCQvLnRlc3QodGhpcy5zdGF0ZS5idWYpKSByZXR1cm4gdGhpcy5yZXR1cm4oY3JlYXRlRGF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIEJPT0xFQU4gKi9cbiAgICBwYXJzZUJvb2xlYW4gKCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfdCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VUcnVlX3IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9mKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUZhbHNlX2EpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVHJ1ZV9yICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfcikge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VUcnVlX3UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgYm9vbGVhbiwgZXhwZWN0ZWQgdHJ1ZSBvciBmYWxzZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRydWVfdSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX3UpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVHJ1ZV9lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUcnVlX2UgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUZhbHNlX2EgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9hKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUZhbHNlX2wpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgYm9vbGVhbiwgZXhwZWN0ZWQgdHJ1ZSBvciBmYWxzZScpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlRmFsc2VfbCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX2wpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRmFsc2VfcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBib29sZWFuLCBleHBlY3RlZCB0cnVlIG9yIGZhbHNlJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VGYWxzZV9zICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfcykge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VGYWxzZV9lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUZhbHNlX2UgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBib29sZWFuLCBleHBlY3RlZCB0cnVlIG9yIGZhbHNlJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogSU5MSU5FIExJU1RTICovXG4gICAgcGFyc2VJbmxpbmVMaXN0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00gfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIGlubGluZSBhcnJheScpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTlVNKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZUNvbW1lbnQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0aGlzLnN0YXRlLnJlc3VsdEFyciB8fCBJbmxpbmVMaXN0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VWYWx1ZSwgdGhpcy5yZWNvcmRJbmxpbmVMaXN0VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICAgIHJlY29yZElubGluZUxpc3RWYWx1ZSAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLnJlc3VsdEFycikge1xuICAgICAgICBjb25zdCBsaXN0VHlwZSA9IHRoaXMuc3RhdGUucmVzdWx0QXJyW19jb250ZW50VHlwZV1cbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdG9tbFR5cGUodmFsdWUpXG4gICAgICAgIGlmIChsaXN0VHlwZSAhPT0gdmFsdWVUeXBlKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKGBJbmxpbmUgbGlzdHMgbXVzdCBiZSBhIHNpbmdsZSB0eXBlLCBub3QgYSBtaXggb2YgJHtsaXN0VHlwZX0gYW5kICR7dmFsdWVUeXBlfWApKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdEFyciA9IElubGluZUxpc3QodG9tbFR5cGUodmFsdWUpKVxuICAgICAgfVxuICAgICAgaWYgKGlzRmxvYXQodmFsdWUpIHx8IGlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgLy8gdW5ib3ggbm93IHRoYXQgd2UndmUgdmVyaWZpZWQgdGhleSdyZSBva1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdEFyci5wdXNoKHZhbHVlLnZhbHVlT2YoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0QXJyLnB1c2godmFsdWUpXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VJbmxpbmVMaXN0TmV4dClcbiAgICB9XG4gICAgcGFyc2VJbmxpbmVMaXN0TmV4dCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9NIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9KKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlQ29tbWVudClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTU1BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUlubGluZUxpc3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUlubGluZUxpc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyLCBleHBlY3RlZCB3aGl0ZXNwYWNlLCBjb21tYSAoLCkgb3IgY2xvc2UgYnJhY2tldCAoXSknKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBJTkxJTkUgVEFCTEUgKi9cbiAgICBwYXJzZUlubGluZVRhYmxlICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0gfHwgdGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbnRlcm1pbmF0ZWQgaW5saW5lIGFycmF5JykpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SQ1VCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0aGlzLnN0YXRlLnJlc3VsdFRhYmxlIHx8IElubGluZVRhYmxlKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUucmVzdWx0VGFibGUpIHRoaXMuc3RhdGUucmVzdWx0VGFibGUgPSBJbmxpbmVUYWJsZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUFzc2lnbiwgdGhpcy5yZWNvcmRJbmxpbmVUYWJsZVZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgICByZWNvcmRJbmxpbmVUYWJsZVZhbHVlIChrdikge1xuICAgICAgbGV0IHRhcmdldCA9IHRoaXMuc3RhdGUucmVzdWx0VGFibGVcbiAgICAgIGxldCBmaW5hbEtleSA9IGt2LmtleS5wb3AoKVxuICAgICAgZm9yIChsZXQga3cgb2Yga3Yua2V5KSB7XG4gICAgICAgIGlmIChoYXNLZXkodGFyZ2V0LCBrdykgJiYgKCFpc1RhYmxlKHRhcmdldFtrd10pIHx8IHRhcmdldFtrd11bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2t3XSA9IHRhcmdldFtrd10gfHwgVGFibGUoKVxuICAgICAgfVxuICAgICAgaWYgKGhhc0tleSh0YXJnZXQsIGZpbmFsS2V5KSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICB9XG4gICAgICBpZiAoaXNJbnRlZ2VyKGt2LnZhbHVlKSB8fCBpc0Zsb2F0KGt2LnZhbHVlKSkge1xuICAgICAgICB0YXJnZXRbZmluYWxLZXldID0ga3YudmFsdWUudmFsdWVPZigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbZmluYWxLZXldID0ga3YudmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUlubGluZVRhYmxlTmV4dClcbiAgICB9XG4gICAgcGFyc2VJbmxpbmVUYWJsZU5leHQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDSEFSX05VTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSiB8fCB0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VudGVybWluYXRlZCBpbmxpbmUgYXJyYXknKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTU1BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUlubGluZVRhYmxlKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUkNVQikge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VJbmxpbmVUYWJsZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIHdoaXRlc3BhY2UsIGNvbW1hICgsKSBvciBjbG9zZSBicmFja2V0IChdKScpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gVE9NTFBhcnNlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcHJldHR5RXJyb3JcblxuZnVuY3Rpb24gcHJldHR5RXJyb3IgKGVyciwgYnVmKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZXJyLnBvcyA9PSBudWxsIHx8IGVyci5saW5lID09IG51bGwpIHJldHVybiBlcnJcbiAgbGV0IG1zZyA9IGVyci5tZXNzYWdlXG4gIG1zZyArPSBgIGF0IHJvdyAke2Vyci5saW5lICsgMX0sIGNvbCAke2Vyci5jb2wgKyAxfSwgcG9zICR7ZXJyLnBvc306XFxuYFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChidWYgJiYgYnVmLnNwbGl0KSB7XG4gICAgY29uc3QgbGluZXMgPSBidWYuc3BsaXQoL1xcbi8pXG4gICAgY29uc3QgbGluZU51bVdpZHRoID0gU3RyaW5nKE1hdGgubWluKGxpbmVzLmxlbmd0aCwgZXJyLmxpbmUgKyAzKSkubGVuZ3RoXG4gICAgbGV0IGxpbmVQYWRkaW5nID0gJyAnXG4gICAgd2hpbGUgKGxpbmVQYWRkaW5nLmxlbmd0aCA8IGxpbmVOdW1XaWR0aCkgbGluZVBhZGRpbmcgKz0gJyAnXG4gICAgZm9yIChsZXQgaWkgPSBNYXRoLm1heCgwLCBlcnIubGluZSAtIDEpOyBpaSA8IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgZXJyLmxpbmUgKyAyKTsgKytpaSkge1xuICAgICAgbGV0IGxpbmVOdW0gPSBTdHJpbmcoaWkgKyAxKVxuICAgICAgaWYgKGxpbmVOdW0ubGVuZ3RoIDwgbGluZU51bVdpZHRoKSBsaW5lTnVtID0gJyAnICsgbGluZU51bVxuICAgICAgaWYgKGVyci5saW5lID09PSBpaSkge1xuICAgICAgICBtc2cgKz0gbGluZU51bSArICc+ICcgKyBsaW5lc1tpaV0gKyAnXFxuJ1xuICAgICAgICBtc2cgKz0gbGluZVBhZGRpbmcgKyAnICAnXG4gICAgICAgIGZvciAobGV0IGhoID0gMDsgaGggPCBlcnIuY29sOyArK2hoKSB7XG4gICAgICAgICAgbXNnICs9ICcgJ1xuICAgICAgICB9XG4gICAgICAgIG1zZyArPSAnXlxcbidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1zZyArPSBsaW5lTnVtICsgJzogJyArIGxpbmVzW2lpXSArICdcXG4nXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGVyci5tZXNzYWdlID0gbXNnICsgJ1xcbidcbiAgcmV0dXJuIGVyclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VTdHJpbmdcblxuY29uc3QgVE9NTFBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3RvbWwtcGFyc2VyLmpzJylcbmNvbnN0IHByZXR0eUVycm9yID0gcmVxdWlyZSgnLi9wYXJzZS1wcmV0dHktZXJyb3IuanMnKVxuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyAoc3RyKSB7XG4gIGlmIChnbG9iYWwuQnVmZmVyICYmIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIoc3RyKSkge1xuICAgIHN0ciA9IHN0ci50b1N0cmluZygndXRmOCcpXG4gIH1cbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICB0cnkge1xuICAgIHBhcnNlci5wYXJzZShzdHIpXG4gICAgcmV0dXJuIHBhcnNlci5maW5pc2goKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBwcmV0dHlFcnJvcihlcnIsIHN0cilcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VBc3luY1xuXG5jb25zdCBUT01MUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdG9tbC1wYXJzZXIuanMnKVxuY29uc3QgcHJldHR5RXJyb3IgPSByZXF1aXJlKCcuL3BhcnNlLXByZXR0eS1lcnJvci5qcycpXG5cbmZ1bmN0aW9uIHBhcnNlQXN5bmMgKHN0ciwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICBjb25zdCBpbmRleCA9IDBcbiAgY29uc3QgYmxvY2tzaXplID0gb3B0cy5ibG9ja3NpemUgfHwgNDA5NjBcbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNldEltbWVkaWF0ZShwYXJzZUFzeW5jTmV4dCwgaW5kZXgsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KVxuICB9KVxuICBmdW5jdGlvbiBwYXJzZUFzeW5jTmV4dCAoaW5kZXgsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKGluZGV4ID49IHN0ci5sZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KHByZXR0eUVycm9yKGVyciwgc3RyKSlcbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlci5wYXJzZShzdHIuc2xpY2UoaW5kZXgsIGluZGV4ICsgYmxvY2tzaXplKSlcbiAgICAgIHNldEltbWVkaWF0ZShwYXJzZUFzeW5jTmV4dCwgaW5kZXggKyBibG9ja3NpemUsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVqZWN0KHByZXR0eUVycm9yKGVyciwgc3RyKSlcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlU3RyZWFtXG5cbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBUT01MUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdG9tbC1wYXJzZXIuanMnKVxuXG5mdW5jdGlvbiBwYXJzZVN0cmVhbSAoc3RtKSB7XG4gIGlmIChzdG0pIHtcbiAgICByZXR1cm4gcGFyc2VSZWFkYWJsZShzdG0pXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtKHN0bSlcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlYWRhYmxlIChzdG0pIHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICBzdG0uc2V0RW5jb2RpbmcoJ3V0ZjgnKVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCByZWFkYWJsZVxuICAgIGxldCBlbmRlZCA9IGZhbHNlXG4gICAgbGV0IGVycm9yZWQgPSBmYWxzZVxuICAgIGZ1bmN0aW9uIGZpbmlzaCAoKSB7XG4gICAgICBlbmRlZCA9IHRydWVcbiAgICAgIGlmIChyZWFkYWJsZSkgcmV0dXJuXG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlcnJvciAoZXJyKSB7XG4gICAgICBlcnJvcmVkID0gdHJ1ZVxuICAgICAgcmVqZWN0KGVycilcbiAgICB9XG4gICAgc3RtLm9uY2UoJ2VuZCcsIGZpbmlzaClcbiAgICBzdG0ub25jZSgnZXJyb3InLCBlcnJvcilcbiAgICByZWFkTmV4dCgpXG5cbiAgICBmdW5jdGlvbiByZWFkTmV4dCAoKSB7XG4gICAgICByZWFkYWJsZSA9IHRydWVcbiAgICAgIGxldCBkYXRhXG4gICAgICB3aGlsZSAoKGRhdGEgPSBzdG0ucmVhZCgpKSAhPT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlci5wYXJzZShkYXRhKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3IoZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZWFkYWJsZSA9IGZhbHNlXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChlbmRlZCkgcmV0dXJuIGZpbmlzaCgpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChlcnJvcmVkKSByZXR1cm5cbiAgICAgIHN0bS5vbmNlKCdyZWFkYWJsZScsIHJlYWROZXh0KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm0gKCkge1xuICBjb25zdCBwYXJzZXIgPSBuZXcgVE9NTFBhcnNlcigpXG4gIHJldHVybiBuZXcgc3RyZWFtLlRyYW5zZm9ybSh7XG4gICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICB0cmFuc2Zvcm0gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlci5wYXJzZShjaHVuay50b1N0cmluZyhlbmNvZGluZykpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH1cbiAgICAgIGNiKClcbiAgICB9LFxuICAgIGZsdXNoIChjYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wdXNoKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfVxuICAgICAgY2IoKVxuICAgIH1cbiAgfSlcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vcGFyc2Utc3RyaW5nLmpzJylcbm1vZHVsZS5leHBvcnRzLmFzeW5jID0gcmVxdWlyZSgnLi9wYXJzZS1hc3luYy5qcycpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL3BhcnNlLXN0cmVhbS5qcycpXG5tb2R1bGUuZXhwb3J0cy5wcmV0dHlFcnJvciA9IHJlcXVpcmUoJy4vcGFyc2UtcHJldHR5LWVycm9yLmpzJylcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ2lmeVxubW9kdWxlLmV4cG9ydHMudmFsdWUgPSBzdHJpbmdpZnlJbmxpbmVcblxuZnVuY3Rpb24gc3RyaW5naWZ5IChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCkgdGhyb3cgdHlwZUVycm9yKCdudWxsJylcbiAgaWYgKG9iaiA9PT0gdm9pZCAoMCkpIHRocm93IHR5cGVFcnJvcigndW5kZWZpbmVkJylcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB0aHJvdyB0eXBlRXJyb3IodHlwZW9mIG9iailcblxuICBpZiAodHlwZW9mIG9iai50b0pTT04gPT09ICdmdW5jdGlvbicpIG9iaiA9IG9iai50b0pTT04oKVxuICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsXG4gIGNvbnN0IHR5cGUgPSB0b21sVHlwZShvYmopXG4gIGlmICh0eXBlICE9PSAndGFibGUnKSB0aHJvdyB0eXBlRXJyb3IodHlwZSlcbiAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCgnJywgJycsIG9iailcbn1cblxuZnVuY3Rpb24gdHlwZUVycm9yICh0eXBlKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0NhbiBvbmx5IHN0cmluZ2lmeSBvYmplY3RzLCBub3QgJyArIHR5cGUpXG59XG5cbmZ1bmN0aW9uIGFycmF5T25lVHlwZUVycm9yICgpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihcIkFycmF5IHZhbHVlcyBjYW4ndCBoYXZlIG1peGVkIHR5cGVzXCIpXG59XG5cbmZ1bmN0aW9uIGdldElubGluZUtleXMgKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5maWx0ZXIoa2V5ID0+IGlzSW5saW5lKG9ialtrZXldKSlcbn1cbmZ1bmN0aW9uIGdldENvbXBsZXhLZXlzIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuZmlsdGVyKGtleSA9PiAhaXNJbmxpbmUob2JqW2tleV0pKVxufVxuXG5mdW5jdGlvbiB0b0pTT04gKG9iaikge1xuICBsZXQgbm9iaiA9IEFycmF5LmlzQXJyYXkob2JqKSA/IFtdIDogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgJ19fcHJvdG9fXycpID8ge1snX19wcm90b19fJ106IHVuZGVmaW5lZH0gOiB7fVxuICBmb3IgKGxldCBwcm9wIG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICBpZiAob2JqW3Byb3BdICYmIHR5cGVvZiBvYmpbcHJvcF0udG9KU09OID09PSAnZnVuY3Rpb24nICYmICEoJ3RvSVNPU3RyaW5nJyBpbiBvYmpbcHJvcF0pKSB7XG4gICAgICBub2JqW3Byb3BdID0gb2JqW3Byb3BdLnRvSlNPTigpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vYmpbcHJvcF0gPSBvYmpbcHJvcF1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vYmpcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5T2JqZWN0IChwcmVmaXgsIGluZGVudCwgb2JqKSB7XG4gIG9iaiA9IHRvSlNPTihvYmopXG4gIHZhciBpbmxpbmVLZXlzXG4gIHZhciBjb21wbGV4S2V5c1xuICBpbmxpbmVLZXlzID0gZ2V0SW5saW5lS2V5cyhvYmopXG4gIGNvbXBsZXhLZXlzID0gZ2V0Q29tcGxleEtleXMob2JqKVxuICB2YXIgcmVzdWx0ID0gW11cbiAgdmFyIGlubGluZUluZGVudCA9IGluZGVudCB8fCAnJ1xuICBpbmxpbmVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICB2YXIgdHlwZSA9IHRvbWxUeXBlKG9ialtrZXldKVxuICAgIGlmICh0eXBlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlICE9PSAnbnVsbCcpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGlubGluZUluZGVudCArIHN0cmluZ2lmeUtleShrZXkpICsgJyA9ICcgKyBzdHJpbmdpZnlBbnlJbmxpbmUob2JqW2tleV0sIHRydWUpKVxuICAgIH1cbiAgfSlcbiAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSByZXN1bHQucHVzaCgnJylcbiAgdmFyIGNvbXBsZXhJbmRlbnQgPSBwcmVmaXggJiYgaW5saW5lS2V5cy5sZW5ndGggPiAwID8gaW5kZW50ICsgJyAgJyA6ICcnXG4gIGNvbXBsZXhLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICByZXN1bHQucHVzaChzdHJpbmdpZnlDb21wbGV4KHByZWZpeCwgY29tcGxleEluZGVudCwga2V5LCBvYmpba2V5XSkpXG4gIH0pXG4gIHJldHVybiByZXN1bHQuam9pbignXFxuJylcbn1cblxuZnVuY3Rpb24gaXNJbmxpbmUgKHZhbHVlKSB7XG4gIHN3aXRjaCAodG9tbFR5cGUodmFsdWUpKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICBjYXNlICdudWxsJzpcbiAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICBjYXNlICduYW4nOlxuICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMCB8fCB0b21sVHlwZSh2YWx1ZVswXSkgIT09ICd0YWJsZSdcbiAgICBjYXNlICd0YWJsZSc6XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIHRvbWxUeXBlICh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJ1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJ1xuICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC10eXBlb2YgKi9cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnIHx8IChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiAhT2JqZWN0LmlzKHZhbHVlLCAtMCkpKSB7XG4gICAgcmV0dXJuICdpbnRlZ2VyJ1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gJ2Zsb2F0J1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuICdib29sZWFuJ1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ3N0cmluZydcbiAgfSBlbHNlIGlmICgndG9JU09TdHJpbmcnIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/ICd1bmRlZmluZWQnIDogJ2RhdGV0aW1lJ1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuICdhcnJheSdcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJ3RhYmxlJ1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUtleSAoa2V5KSB7XG4gIHZhciBrZXlTdHIgPSBTdHJpbmcoa2V5KVxuICBpZiAoL15bLUEtWmEtejAtOV9dKyQvLnRlc3Qoa2V5U3RyKSkge1xuICAgIHJldHVybiBrZXlTdHJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QmFzaWNTdHJpbmcoa2V5U3RyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUJhc2ljU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuICdcIicgKyBlc2NhcGVTdHJpbmcoc3RyKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykgKyAnXCInXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUxpdGVyYWxTdHJpbmcgKHN0cikge1xuICByZXR1cm4gXCInXCIgKyBzdHIgKyBcIidcIlxufVxuXG5mdW5jdGlvbiBudW1wYWQgKG51bSwgc3RyKSB7XG4gIHdoaWxlIChzdHIubGVuZ3RoIDwgbnVtKSBzdHIgPSAnMCcgKyBzdHJcbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAucmVwbGFjZSgvW1xcYl0vZywgJ1xcXFxiJylcbiAgICAucmVwbGFjZSgvXFx0L2csICdcXFxcdCcpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxuICAgIC5yZXBsYWNlKC9cXGYvZywgJ1xcXFxmJylcbiAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29udHJvbC1yZWdleCAqL1xuICAgIC5yZXBsYWNlKC8oW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2ZdKS8sIGMgPT4gJ1xcXFx1JyArIG51bXBhZCg0LCBjLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KSkpXG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb250cm9sLXJlZ2V4ICovXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU11bHRpbGluZVN0cmluZyAoc3RyKSB7XG4gIGxldCBlc2NhcGVkID0gc3RyLnNwbGl0KC9cXG4vKS5tYXAoc3RyID0+IHtcbiAgICByZXR1cm4gZXNjYXBlU3RyaW5nKHN0cikucmVwbGFjZSgvXCIoPz1cIlwiKS9nLCAnXFxcXFwiJylcbiAgfSkuam9pbignXFxuJylcbiAgaWYgKGVzY2FwZWQuc2xpY2UoLTEpID09PSAnXCInKSBlc2NhcGVkICs9ICdcXFxcXFxuJ1xuICByZXR1cm4gJ1wiXCJcIlxcbicgKyBlc2NhcGVkICsgJ1wiXCJcIidcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QW55SW5saW5lICh2YWx1ZSwgbXVsdGlsaW5lT2spIHtcbiAgbGV0IHR5cGUgPSB0b21sVHlwZSh2YWx1ZSlcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKG11bHRpbGluZU9rICYmIC9cXG4vLnRlc3QodmFsdWUpKSB7XG4gICAgICB0eXBlID0gJ3N0cmluZy1tdWx0aWxpbmUnXG4gICAgfSBlbHNlIGlmICghL1tcXGJcXHRcXG5cXGZcXHInXS8udGVzdCh2YWx1ZSkgJiYgL1wiLy50ZXN0KHZhbHVlKSkge1xuICAgICAgdHlwZSA9ICdzdHJpbmctbGl0ZXJhbCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cmluZ2lmeUlubGluZSh2YWx1ZSwgdHlwZSlcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5SW5saW5lICh2YWx1ZSwgdHlwZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCF0eXBlKSB0eXBlID0gdG9tbFR5cGUodmFsdWUpXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N0cmluZy1tdWx0aWxpbmUnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeU11bHRpbGluZVN0cmluZyh2YWx1ZSlcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUJhc2ljU3RyaW5nKHZhbHVlKVxuICAgIGNhc2UgJ3N0cmluZy1saXRlcmFsJzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlMaXRlcmFsU3RyaW5nKHZhbHVlKVxuICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUludGVnZXIodmFsdWUpXG4gICAgY2FzZSAnZmxvYXQnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUZsb2F0KHZhbHVlKVxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUJvb2xlYW4odmFsdWUpXG4gICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeURhdGV0aW1lKHZhbHVlKVxuICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlJbmxpbmVBcnJheSh2YWx1ZS5maWx0ZXIoXyA9PiB0b21sVHlwZShfKSAhPT0gJ251bGwnICYmIHRvbWxUeXBlKF8pICE9PSAndW5kZWZpbmVkJyAmJiB0b21sVHlwZShfKSAhPT0gJ25hbicpKVxuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlJbmxpbmVUYWJsZSh2YWx1ZSlcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyB0eXBlRXJyb3IodHlwZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlJbnRlZ2VyICh2YWx1ZSkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBzZWN1cml0eS9kZXRlY3QtdW5zYWZlLXJlZ2V4ICovXG4gIHJldHVybiBTdHJpbmcodmFsdWUpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICdfJylcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5RmxvYXQgKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gJ2luZidcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gLUluZmluaXR5KSB7XG4gICAgcmV0dXJuICctaW5mJ1xuICB9IGVsc2UgaWYgKE9iamVjdC5pcyh2YWx1ZSwgTmFOKSkge1xuICAgIHJldHVybiAnbmFuJ1xuICB9IGVsc2UgaWYgKE9iamVjdC5pcyh2YWx1ZSwgLTApKSB7XG4gICAgcmV0dXJuICctMC4wJ1xuICB9XG4gIHZhciBjaHVua3MgPSBTdHJpbmcodmFsdWUpLnNwbGl0KCcuJylcbiAgdmFyIGludCA9IGNodW5rc1swXVxuICB2YXIgZGVjID0gY2h1bmtzWzFdIHx8IDBcbiAgcmV0dXJuIHN0cmluZ2lmeUludGVnZXIoaW50KSArICcuJyArIGRlY1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlCb29sZWFuICh2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nKHZhbHVlKVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlEYXRldGltZSAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIgKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICdmbG9hdCcgfHwgdHlwZSA9PT0gJ2ludGVnZXInXG59XG5mdW5jdGlvbiBhcnJheVR5cGUgKHZhbHVlcykge1xuICB2YXIgY29udGVudFR5cGUgPSB0b21sVHlwZSh2YWx1ZXNbMF0pXG4gIGlmICh2YWx1ZXMuZXZlcnkoXyA9PiB0b21sVHlwZShfKSA9PT0gY29udGVudFR5cGUpKSByZXR1cm4gY29udGVudFR5cGVcbiAgLy8gbWl4ZWQgaW50ZWdlci9mbG9hdCwgZW1pdCBhcyBmbG9hdHNcbiAgaWYgKHZhbHVlcy5ldmVyeShfID0+IGlzTnVtYmVyKHRvbWxUeXBlKF8pKSkpIHJldHVybiAnZmxvYXQnXG4gIHJldHVybiAnbWl4ZWQnXG59XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5ICh2YWx1ZXMpIHtcbiAgY29uc3QgdHlwZSA9IGFycmF5VHlwZSh2YWx1ZXMpXG4gIGlmICh0eXBlID09PSAnbWl4ZWQnKSB7XG4gICAgdGhyb3cgYXJyYXlPbmVUeXBlRXJyb3IoKVxuICB9XG4gIHJldHVybiB0eXBlXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUlubGluZUFycmF5ICh2YWx1ZXMpIHtcbiAgdmFsdWVzID0gdG9KU09OKHZhbHVlcylcbiAgY29uc3QgdHlwZSA9IHZhbGlkYXRlQXJyYXkodmFsdWVzKVxuICB2YXIgcmVzdWx0ID0gJ1snXG4gIHZhciBzdHJpbmdpZmllZCA9IHZhbHVlcy5tYXAoXyA9PiBzdHJpbmdpZnlJbmxpbmUoXywgdHlwZSkpXG4gIGlmIChzdHJpbmdpZmllZC5qb2luKCcsICcpLmxlbmd0aCA+IDYwIHx8IC9cXG4vLnRlc3Qoc3RyaW5naWZpZWQpKSB7XG4gICAgcmVzdWx0ICs9ICdcXG4gICcgKyBzdHJpbmdpZmllZC5qb2luKCcsXFxuICAnKSArICdcXG4nXG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ICs9ICcgJyArIHN0cmluZ2lmaWVkLmpvaW4oJywgJykgKyAoc3RyaW5naWZpZWQubGVuZ3RoID4gMCA/ICcgJyA6ICcnKVxuICB9XG4gIHJldHVybiByZXN1bHQgKyAnXSdcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5SW5saW5lVGFibGUgKHZhbHVlKSB7XG4gIHZhbHVlID0gdG9KU09OKHZhbHVlKVxuICB2YXIgcmVzdWx0ID0gW11cbiAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goa2V5ID0+IHtcbiAgICByZXN1bHQucHVzaChzdHJpbmdpZnlLZXkoa2V5KSArICcgPSAnICsgc3RyaW5naWZ5QW55SW5saW5lKHZhbHVlW2tleV0sIGZhbHNlKSlcbiAgfSlcbiAgcmV0dXJuICd7ICcgKyByZXN1bHQuam9pbignLCAnKSArIChyZXN1bHQubGVuZ3RoID4gMCA/ICcgJyA6ICcnKSArICd9J1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlDb21wbGV4IChwcmVmaXgsIGluZGVudCwga2V5LCB2YWx1ZSkge1xuICB2YXIgdmFsdWVUeXBlID0gdG9tbFR5cGUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh2YWx1ZVR5cGUgPT09ICdhcnJheScpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXlPZlRhYmxlcyhwcmVmaXgsIGluZGVudCwga2V5LCB2YWx1ZSlcbiAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICd0YWJsZScpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5Q29tcGxleFRhYmxlKHByZWZpeCwgaW5kZW50LCBrZXksIHZhbHVlKVxuICB9IGVsc2Uge1xuICAgIHRocm93IHR5cGVFcnJvcih2YWx1ZVR5cGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXlPZlRhYmxlcyAocHJlZml4LCBpbmRlbnQsIGtleSwgdmFsdWVzKSB7XG4gIHZhbHVlcyA9IHRvSlNPTih2YWx1ZXMpXG4gIHZhbGlkYXRlQXJyYXkodmFsdWVzKVxuICB2YXIgZmlyc3RWYWx1ZVR5cGUgPSB0b21sVHlwZSh2YWx1ZXNbMF0pXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZmlyc3RWYWx1ZVR5cGUgIT09ICd0YWJsZScpIHRocm93IHR5cGVFcnJvcihmaXJzdFZhbHVlVHlwZSlcbiAgdmFyIGZ1bGxLZXkgPSBwcmVmaXggKyBzdHJpbmdpZnlLZXkoa2V5KVxuICB2YXIgcmVzdWx0ID0gJydcbiAgdmFsdWVzLmZvckVhY2godGFibGUgPT4ge1xuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgcmVzdWx0ICs9ICdcXG4nXG4gICAgcmVzdWx0ICs9IGluZGVudCArICdbWycgKyBmdWxsS2V5ICsgJ11dXFxuJ1xuICAgIHJlc3VsdCArPSBzdHJpbmdpZnlPYmplY3QoZnVsbEtleSArICcuJywgaW5kZW50LCB0YWJsZSlcbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlDb21wbGV4VGFibGUgKHByZWZpeCwgaW5kZW50LCBrZXksIHZhbHVlKSB7XG4gIHZhciBmdWxsS2V5ID0gcHJlZml4ICsgc3RyaW5naWZ5S2V5KGtleSlcbiAgdmFyIHJlc3VsdCA9ICcnXG4gIGlmIChnZXRJbmxpbmVLZXlzKHZhbHVlKS5sZW5ndGggPiAwKSB7XG4gICAgcmVzdWx0ICs9IGluZGVudCArICdbJyArIGZ1bGxLZXkgKyAnXVxcbidcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgc3RyaW5naWZ5T2JqZWN0KGZ1bGxLZXkgKyAnLicsIGluZGVudCwgdmFsdWUpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UuanMnKVxuZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeS5qcycpXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmZyb21DYWxsYmFjayA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBhcmdzLnB1c2goKGVyciwgcmVzKSA9PiAoZXJyICE9IG51bGwpID8gcmVqZWN0KGVycikgOiByZXNvbHZlKHJlcykpXG4gICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG5cbmV4cG9ydHMuZnJvbVByb21pc2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGNvbnN0IGNiID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSB7XG4gICAgICBhcmdzLnBvcCgpXG4gICAgICBmbi5hcHBseSh0aGlzLCBhcmdzKS50aGVuKHIgPT4gY2IobnVsbCwgciksIGNiKVxuICAgIH1cbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG4iLAogICAgInZhciBjb25zdGFudHMgPSByZXF1aXJlKCdjb25zdGFudHMnKVxuXG52YXIgb3JpZ0N3ZCA9IHByb2Nlc3MuY3dkXG52YXIgY3dkID0gbnVsbFxuXG52YXIgcGxhdGZvcm0gPSBwcm9jZXNzLmVudi5HUkFDRUZVTF9GU19QTEFURk9STSB8fCBwcm9jZXNzLnBsYXRmb3JtXG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24oKSB7XG4gIGlmICghY3dkKVxuICAgIGN3ZCA9IG9yaWdDd2QuY2FsbChwcm9jZXNzKVxuICByZXR1cm4gY3dkXG59XG50cnkge1xuICBwcm9jZXNzLmN3ZCgpXG59IGNhdGNoIChlcikge31cblxuLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgdW50aWwgbm9kZS5qcyAxMiBpcyByZXF1aXJlZFxuaWYgKHR5cGVvZiBwcm9jZXNzLmNoZGlyID09PSAnZnVuY3Rpb24nKSB7XG4gIHZhciBjaGRpciA9IHByb2Nlc3MuY2hkaXJcbiAgcHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkKSB7XG4gICAgY3dkID0gbnVsbFxuICAgIGNoZGlyLmNhbGwocHJvY2VzcywgZClcbiAgfVxuICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvY2Vzcy5jaGRpciwgY2hkaXIpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIChyZS0paW1wbGVtZW50IHNvbWUgdGhpbmdzIHRoYXQgYXJlIGtub3duIGJ1c3RlZCBvciBtaXNzaW5nLlxuXG4gIC8vIGxjaG1vZCwgYnJva2VuIHByaW9yIHRvIDAuNi4yXG4gIC8vIGJhY2stcG9ydCB0aGUgZml4IGhlcmUuXG4gIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoJ09fU1lNTElOSycpICYmXG4gICAgICBwcm9jZXNzLnZlcnNpb24ubWF0Y2goL152MFxcLjZcXC5bMC0yXXxedjBcXC41XFwuLykpIHtcbiAgICBwYXRjaExjaG1vZChmcylcbiAgfVxuXG4gIC8vIGx1dGltZXMgaW1wbGVtZW50YXRpb24sIG9yIG5vLW9wXG4gIGlmICghZnMubHV0aW1lcykge1xuICAgIHBhdGNoTHV0aW1lcyhmcylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1ncmFjZWZ1bC1mcy9pc3N1ZXMvNFxuICAvLyBDaG93biBzaG91bGQgbm90IGZhaWwgb24gZWludmFsIG9yIGVwZXJtIGlmIG5vbi1yb290LlxuICAvLyBJdCBzaG91bGQgbm90IGZhaWwgb24gZW5vc3lzIGV2ZXIsIGFzIHRoaXMganVzdCBpbmRpY2F0ZXNcbiAgLy8gdGhhdCBhIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLlxuXG4gIGZzLmNob3duID0gY2hvd25GaXgoZnMuY2hvd24pXG4gIGZzLmZjaG93biA9IGNob3duRml4KGZzLmZjaG93bilcbiAgZnMubGNob3duID0gY2hvd25GaXgoZnMubGNob3duKVxuXG4gIGZzLmNobW9kID0gY2htb2RGaXgoZnMuY2htb2QpXG4gIGZzLmZjaG1vZCA9IGNobW9kRml4KGZzLmZjaG1vZClcbiAgZnMubGNobW9kID0gY2htb2RGaXgoZnMubGNobW9kKVxuXG4gIGZzLmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5jaG93blN5bmMpXG4gIGZzLmZjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuZmNob3duU3luYylcbiAgZnMubGNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5sY2hvd25TeW5jKVxuXG4gIGZzLmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5jaG1vZFN5bmMpXG4gIGZzLmZjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuZmNobW9kU3luYylcbiAgZnMubGNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5sY2htb2RTeW5jKVxuXG4gIGZzLnN0YXQgPSBzdGF0Rml4KGZzLnN0YXQpXG4gIGZzLmZzdGF0ID0gc3RhdEZpeChmcy5mc3RhdClcbiAgZnMubHN0YXQgPSBzdGF0Rml4KGZzLmxzdGF0KVxuXG4gIGZzLnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuc3RhdFN5bmMpXG4gIGZzLmZzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmZzdGF0U3luYylcbiAgZnMubHN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMubHN0YXRTeW5jKVxuXG4gIC8vIGlmIGxjaG1vZC9sY2hvd24gZG8gbm90IGV4aXN0LCB0aGVuIG1ha2UgdGhlbSBuby1vcHNcbiAgaWYgKGZzLmNobW9kICYmICFmcy5sY2htb2QpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cbiAgaWYgKGZzLmNob3duICYmICFmcy5sY2hvd24pIHtcbiAgICBmcy5sY2hvd24gPSBmdW5jdGlvbiAocGF0aCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG93blN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG5cbiAgLy8gb24gV2luZG93cywgQS9WIHNvZnR3YXJlIGNhbiBsb2NrIHRoZSBkaXJlY3RvcnksIGNhdXNpbmcgdGhpc1xuICAvLyB0byBmYWlsIHdpdGggYW4gRUFDQ0VTIG9yIEVQRVJNIGlmIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgbmV3bHlcbiAgLy8gY3JlYXRlZCBmaWxlcy4gIFRyeSBhZ2FpbiBvbiBmYWlsdXJlLCBmb3IgdXAgdG8gNjAgc2Vjb25kcy5cblxuICAvLyBTZXQgdGhlIHRpbWVvdXQgdGhpcyBsb25nIGJlY2F1c2Ugc29tZSBXaW5kb3dzIEFudGktVmlydXMsIHN1Y2ggYXMgUGFyaXR5XG4gIC8vIGJpdDksIG1heSBsb2NrIGZpbGVzIGZvciB1cCB0byBhIG1pbnV0ZSwgY2F1c2luZyBucG0gcGFja2FnZSBpbnN0YWxsXG4gIC8vIGZhaWx1cmVzLiBBbHNvLCB0YWtlIGNhcmUgdG8geWllbGQgdGhlIHNjaGVkdWxlci4gV2luZG93cyBzY2hlZHVsaW5nIGdpdmVzXG4gIC8vIENQVSB0byBhIGJ1c3kgbG9vcGluZyBwcm9jZXNzLCB3aGljaCBjYW4gY2F1c2UgdGhlIHByb2dyYW0gY2F1c2luZyB0aGUgbG9ja1xuICAvLyBjb250ZW50aW9uIHRvIGJlIHN0YXJ2ZWQgb2YgQ1BVIGJ5IG5vZGUsIHNvIHRoZSBjb250ZW50aW9uIGRvZXNuJ3QgcmVzb2x2ZS5cbiAgaWYgKHBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICBmcy5yZW5hbWUgPSB0eXBlb2YgZnMucmVuYW1lICE9PSAnZnVuY3Rpb24nID8gZnMucmVuYW1lXG4gICAgOiAoZnVuY3Rpb24gKGZzJHJlbmFtZSkge1xuICAgICAgZnVuY3Rpb24gcmVuYW1lIChmcm9tLCB0bywgY2IpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICB2YXIgYmFja29mZiA9IDA7XG4gICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgICAgICAgaWYgKGVyXG4gICAgICAgICAgICAgICYmIChlci5jb2RlID09PSBcIkVBQ0NFU1wiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIiB8fCBlci5jb2RlID09PSBcIkVCVVNZXCIpXG4gICAgICAgICAgICAgICYmIERhdGUubm93KCkgLSBzdGFydCA8IDYwMDAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBmcy5zdGF0KHRvLCBmdW5jdGlvbiAoc3RhdGVyLCBzdCkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZXIgJiYgc3RhdGVyLmNvZGUgPT09IFwiRU5PRU5UXCIpXG4gICAgICAgICAgICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIENCKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICBjYihlcilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIGJhY2tvZmYpXG4gICAgICAgICAgICBpZiAoYmFja29mZiA8IDEwMClcbiAgICAgICAgICAgICAgYmFja29mZiArPSAxMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZW5hbWUsIGZzJHJlbmFtZSlcbiAgICAgIHJldHVybiByZW5hbWVcbiAgICB9KShmcy5yZW5hbWUpXG4gIH1cblxuICAvLyBpZiByZWFkKCkgcmV0dXJucyBFQUdBSU4sIHRoZW4ganVzdCB0cnkgaXQgYWdhaW4uXG4gIGZzLnJlYWQgPSB0eXBlb2YgZnMucmVhZCAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWQpIHtcbiAgICBmdW5jdGlvbiByZWFkIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrXykge1xuICAgICAgdmFyIGNhbGxiYWNrXG4gICAgICBpZiAoY2FsbGJhY2tfICYmIHR5cGVvZiBjYWxsYmFja18gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGVyLCBfLCBfXykge1xuICAgICAgICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhbGxiYWNrXy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLy8gVGhpcyBlbnN1cmVzIGB1dGlsLnByb21pc2lmeWAgd29ya3MgYXMgaXQgZG9lcyBmb3IgbmF0aXZlIGBmcy5yZWFkYC5cbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVhZCwgZnMkcmVhZClcbiAgICByZXR1cm4gcmVhZFxuICB9KShmcy5yZWFkKVxuXG4gIGZzLnJlYWRTeW5jID0gdHlwZW9mIGZzLnJlYWRTeW5jICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFN5bmNcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWRTeW5jKSB7IHJldHVybiBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKSB7XG4gICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkU3luYy5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH19KShmcy5yZWFkU3luYylcblxuICBmdW5jdGlvbiBwYXRjaExjaG1vZCAoZnMpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2FsbGJhY2spIHtcbiAgICAgIGZzLm9wZW4oIHBhdGhcbiAgICAgICAgICAgICAsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTktcbiAgICAgICAgICAgICAsIG1vZGVcbiAgICAgICAgICAgICAsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgICBmcy5mY2htb2QoZmQsIG1vZGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24oZXJyMikge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIgfHwgZXJyMilcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUpIHtcbiAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTkssIG1vZGUpXG5cbiAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgdmFyIHJldFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0ID0gZnMuZmNobW9kU3luYyhmZCwgbW9kZSlcbiAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXRcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaEx1dGltZXMgKGZzKSB7XG4gICAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eShcIk9fU1lNTElOS1wiKSAmJiBmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCwgY2IpIHtcbiAgICAgICAgZnMub3BlbihwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LLCBmdW5jdGlvbiAoZXIsIGZkKSB7XG4gICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLmZ1dGltZXMoZmQsIGF0LCBtdCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24gKGVyMikge1xuICAgICAgICAgICAgICBpZiAoY2IpIGNiKGVyIHx8IGVyMilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10KSB7XG4gICAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkspXG4gICAgICAgIHZhciByZXRcbiAgICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldCA9IGZzLmZ1dGltZXNTeW5jKGZkLCBhdCwgbXQpXG4gICAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKF9hLCBfYiwgX2MsIGNiKSB7IGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYikgfVxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBjaG93bkZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hvd25GaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZClcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgY2IpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IG51bGxcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrIChlciwgc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBzdGF0cyA9IG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldClcbiAgICAgIGlmIChzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0cztcbiAgICB9XG4gIH1cblxuICAvLyBFTk9TWVMgbWVhbnMgdGhhdCB0aGUgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBvcC4gSnVzdCBpZ25vcmVcbiAgLy8gdGhhdCwgYmVjYXVzZSBpdCBkb2Vzbid0IG1hdHRlci5cbiAgLy9cbiAgLy8gaWYgdGhlcmUncyBubyBnZXR1aWQsIG9yIGlmIGdldHVpZCgpIGlzIHNvbWV0aGluZyBvdGhlclxuICAvLyB0aGFuIDAsIGFuZCB0aGUgZXJyb3IgaXMgRUlOVkFMIG9yIEVQRVJNLCB0aGVuIGp1c3QgaWdub3JlXG4gIC8vIGl0LlxuICAvL1xuICAvLyBUaGlzIHNwZWNpZmljIGNhc2UgaXMgYSBzaWxlbnQgZmFpbHVyZSBpbiBjcCwgaW5zdGFsbCwgdGFyLFxuICAvLyBhbmQgbW9zdCBvdGhlciB1bml4IHRvb2xzIHRoYXQgbWFuYWdlIHBlcm1pc3Npb25zLlxuICAvL1xuICAvLyBXaGVuIHJ1bm5pbmcgYXMgcm9vdCwgb3IgaWYgb3RoZXIgdHlwZXMgb2YgZXJyb3JzIGFyZVxuICAvLyBlbmNvdW50ZXJlZCwgdGhlbiBpdCdzIHN0cmljdC5cbiAgZnVuY3Rpb24gY2hvd25Fck9rIChlcikge1xuICAgIGlmICghZXIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgaWYgKGVyLmNvZGUgPT09IFwiRU5PU1lTXCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgdmFyIG5vbnJvb3QgPSAhcHJvY2Vzcy5nZXR1aWQgfHwgcHJvY2Vzcy5nZXR1aWQoKSAhPT0gMFxuICAgIGlmIChub25yb290KSB7XG4gICAgICBpZiAoZXIuY29kZSA9PT0gXCJFSU5WQUxcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsCiAgICAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlZ2FjeVxuXG5mdW5jdGlvbiBsZWdhY3kgKGZzKSB7XG4gIHJldHVybiB7XG4gICAgUmVhZFN0cmVhbTogUmVhZFN0cmVhbSxcbiAgICBXcml0ZVN0cmVhbTogV3JpdGVTdHJlYW1cbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSkpIHJldHVybiBuZXcgUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5mbGFncyA9ICdyJztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDY0ICogMTAyNDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5jb2RpbmcpIHRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyk7XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5lbmQgPSBJbmZpbml0eTtcbiAgICAgIH0gZWxzZSBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ2VuZCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ID4gdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlIDw9IGVuZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmQgIT09IG51bGwpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm9wZW4odGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzZWxmLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5mZCA9IGZkO1xuICAgICAgc2VsZi5lbWl0KCdvcGVuJywgZmQpO1xuICAgICAgc2VsZi5fcmVhZCgpO1xuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSkpIHJldHVybiBuZXcgV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3cnO1xuICAgIHRoaXMuZW5jb2RpbmcgPSAnYmluYXJ5JztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0YXJ0IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPj0gemVybycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgdGhpcy5fcXVldWUgPSBbXTtcblxuICAgIGlmICh0aGlzLmZkID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9vcGVuID0gZnMub3BlbjtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sIHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCB1bmRlZmluZWRdKTtcbiAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVcblxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iai5fX3Byb3RvX19cbn1cblxuZnVuY3Rpb24gY2xvbmUgKG9iaikge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKVxuICAgIHJldHVybiBvYmpcblxuICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgIHZhciBjb3B5ID0geyBfX3Byb3RvX186IGdldFByb3RvdHlwZU9mKG9iaikgfVxuICBlbHNlXG4gICAgdmFyIGNvcHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29weSwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSlcbiAgfSlcblxuICByZXR1cm4gY29weVxufVxuIiwKICAgICJ2YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcG9seWZpbGxzID0gcmVxdWlyZSgnLi9wb2x5ZmlsbHMuanMnKVxudmFyIGxlZ2FjeSA9IHJlcXVpcmUoJy4vbGVnYWN5LXN0cmVhbXMuanMnKVxudmFyIGNsb25lID0gcmVxdWlyZSgnLi9jbG9uZS5qcycpXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbnZhciBncmFjZWZ1bFF1ZXVlXG52YXIgcHJldmlvdXNTeW1ib2xcblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnF1ZXVlJylcbiAgLy8gVGhpcyBpcyB1c2VkIGluIHRlc3RpbmcgYnkgZnV0dXJlIHZlcnNpb25zXG4gIHByZXZpb3VzU3ltYm9sID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucHJldmlvdXMnKVxufSBlbHNlIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9ICdfX19ncmFjZWZ1bC1mcy5xdWV1ZSdcbiAgcHJldmlvdXNTeW1ib2wgPSAnX19fZ3JhY2VmdWwtZnMucHJldmlvdXMnXG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gcHVibGlzaFF1ZXVlKGNvbnRleHQsIHF1ZXVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb250ZXh0LCBncmFjZWZ1bFF1ZXVlLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBxdWV1ZVxuICAgIH1cbiAgfSlcbn1cblxudmFyIGRlYnVnID0gbm9vcFxuaWYgKHV0aWwuZGVidWdsb2cpXG4gIGRlYnVnID0gdXRpbC5kZWJ1Z2xvZygnZ2ZzNCcpXG5lbHNlIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpXG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG0gPSB1dGlsLmZvcm1hdC5hcHBseSh1dGlsLCBhcmd1bWVudHMpXG4gICAgbSA9ICdHRlM0OiAnICsgbS5zcGxpdCgvXFxuLykuam9pbignXFxuR0ZTNDogJylcbiAgICBjb25zb2xlLmVycm9yKG0pXG4gIH1cblxuLy8gT25jZSB0aW1lIGluaXRpYWxpemF0aW9uXG5pZiAoIWZzW2dyYWNlZnVsUXVldWVdKSB7XG4gIC8vIFRoaXMgcXVldWUgY2FuIGJlIHNoYXJlZCBieSBtdWx0aXBsZSBsb2FkZWQgaW5zdGFuY2VzXG4gIHZhciBxdWV1ZSA9IGdsb2JhbFtncmFjZWZ1bFF1ZXVlXSB8fCBbXVxuICBwdWJsaXNoUXVldWUoZnMsIHF1ZXVlKVxuXG4gIC8vIFBhdGNoIGZzLmNsb3NlL2Nsb3NlU3luYyB0byBzaGFyZWQgcXVldWUgdmVyc2lvbiwgYmVjYXVzZSB3ZSBuZWVkXG4gIC8vIHRvIHJldHJ5KCkgd2hlbmV2ZXIgYSBjbG9zZSBoYXBwZW5zICphbnl3aGVyZSogaW4gdGhlIHByb2dyYW0uXG4gIC8vIFRoaXMgaXMgZXNzZW50aWFsIHdoZW4gbXVsdGlwbGUgZ3JhY2VmdWwtZnMgaW5zdGFuY2VzIGFyZVxuICAvLyBpbiBwbGF5IGF0IHRoZSBzYW1lIHRpbWUuXG4gIGZzLmNsb3NlID0gKGZ1bmN0aW9uIChmcyRjbG9zZSkge1xuICAgIGZ1bmN0aW9uIGNsb3NlIChmZCwgY2IpIHtcbiAgICAgIHJldHVybiBmcyRjbG9zZS5jYWxsKGZzLCBmZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlc2V0UXVldWUoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZSwgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVxuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlXG4gIH0pKGZzLmNsb3NlKVxuXG4gIGZzLmNsb3NlU3luYyA9IChmdW5jdGlvbiAoZnMkY2xvc2VTeW5jKSB7XG4gICAgZnVuY3Rpb24gY2xvc2VTeW5jIChmZCkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgIGZzJGNsb3NlU3luYy5hcHBseShmcywgYXJndW1lbnRzKVxuICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlU3luYywgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVN5bmNcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVN5bmNcbiAgfSkoZnMuY2xvc2VTeW5jKVxuXG4gIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpIHtcbiAgICBwcm9jZXNzLm9uKCdleGl0JywgZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1Zyhmc1tncmFjZWZ1bFF1ZXVlXSlcbiAgICAgIHJlcXVpcmUoJ2Fzc2VydCcpLmVxdWFsKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCwgMClcbiAgICB9KVxuICB9XG59XG5cbmlmICghZ2xvYmFsW2dyYWNlZnVsUXVldWVdKSB7XG4gIHB1Ymxpc2hRdWV1ZShnbG9iYWwsIGZzW2dyYWNlZnVsUXVldWVdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaChjbG9uZShmcykpXG5pZiAocHJvY2Vzcy5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0ggJiYgIWZzLl9fcGF0Y2hlZCkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gcGF0Y2goZnMpXG4gICAgZnMuX19wYXRjaGVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VzIHRoZSBvcGVuKCkgZnVuY3Rpb24gbmVlZHMgdG8gYmUgaW4gaGVyZVxuICBwb2x5ZmlsbHMoZnMpXG4gIGZzLmdyYWNlZnVsaWZ5ID0gcGF0Y2hcblxuICBmcy5jcmVhdGVSZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbVxuICBmcy5jcmVhdGVXcml0ZVN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtXG4gIHZhciBmcyRyZWFkRmlsZSA9IGZzLnJlYWRGaWxlXG4gIGZzLnJlYWRGaWxlID0gcmVhZEZpbGVcbiAgZnVuY3Rpb24gcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHJlYWRGaWxlLCBbcGF0aCwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkd3JpdGVGaWxlID0gZnMud3JpdGVGaWxlXG4gIGZzLndyaXRlRmlsZSA9IHdyaXRlRmlsZVxuICBmdW5jdGlvbiB3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHdyaXRlRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGFwcGVuZEZpbGUgPSBmcy5hcHBlbmRGaWxlXG4gIGlmIChmcyRhcHBlbmRGaWxlKVxuICAgIGZzLmFwcGVuZEZpbGUgPSBhcHBlbmRGaWxlXG4gIGZ1bmN0aW9uIGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGFwcGVuZEZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRjb3B5RmlsZSA9IGZzLmNvcHlGaWxlXG4gIGlmIChmcyRjb3B5RmlsZSlcbiAgICBmcy5jb3B5RmlsZSA9IGNvcHlGaWxlXG4gIGZ1bmN0aW9uIGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYikge1xuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiID0gZmxhZ3NcbiAgICAgIGZsYWdzID0gMFxuICAgIH1cbiAgICByZXR1cm4gZ28kY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kY29weUZpbGUsIFtzcmMsIGRlc3QsIGZsYWdzLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRyZWFkZGlyID0gZnMucmVhZGRpclxuICBmcy5yZWFkZGlyID0gcmVhZGRpclxuICB2YXIgbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMgPSAvXnZbMC01XVxcLi9cbiAgZnVuY3Rpb24gcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICB2YXIgZ28kcmVhZGRpciA9IG5vUmVhZGRpck9wdGlvblZlcnNpb25zLnRlc3QocHJvY2Vzcy52ZXJzaW9uKVxuICAgICAgPyBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG4gICAgICA6IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cblxuICAgIHJldHVybiBnbyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZnMkcmVhZGRpckNhbGxiYWNrIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgZmlsZXMpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbXG4gICAgICAgICAgICBnbyRyZWFkZGlyLFxuICAgICAgICAgICAgW3BhdGgsIG9wdGlvbnMsIGNiXSxcbiAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLFxuICAgICAgICAgICAgRGF0ZS5ub3coKVxuICAgICAgICAgIF0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5zb3J0KVxuICAgICAgICAgICAgZmlsZXMuc29ydCgpXG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuY2FsbCh0aGlzLCBlcnIsIGZpbGVzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MudmVyc2lvbi5zdWJzdHIoMCwgNCkgPT09ICd2MC44Jykge1xuICAgIHZhciBsZWdTdHJlYW1zID0gbGVnYWN5KGZzKVxuICAgIFJlYWRTdHJlYW0gPSBsZWdTdHJlYW1zLlJlYWRTdHJlYW1cbiAgICBXcml0ZVN0cmVhbSA9IGxlZ1N0cmVhbXMuV3JpdGVTdHJlYW1cbiAgfVxuXG4gIHZhciBmcyRSZWFkU3RyZWFtID0gZnMuUmVhZFN0cmVhbVxuICBpZiAoZnMkUmVhZFN0cmVhbSkge1xuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRSZWFkU3RyZWFtLnByb3RvdHlwZSlcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gUmVhZFN0cmVhbSRvcGVuXG4gIH1cblxuICB2YXIgZnMkV3JpdGVTdHJlYW0gPSBmcy5Xcml0ZVN0cmVhbVxuICBpZiAoZnMkV3JpdGVTdHJlYW0pIHtcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFdyaXRlU3RyZWFtLnByb3RvdHlwZSlcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFdyaXRlU3RyZWFtJG9wZW5cbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1JlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICAvLyBsZWdhY3kgbmFtZXNcbiAgdmFyIEZpbGVSZWFkU3RyZWFtID0gUmVhZFN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgdmFyIEZpbGVXcml0ZVN0cmVhbSA9IFdyaXRlU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkUmVhZFN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFJlYWRTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShSZWFkU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKHRoYXQuYXV0b0Nsb3NlKVxuICAgICAgICAgIHRoYXQuZGVzdHJveSgpXG5cbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgICAgdGhhdC5yZWFkKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFdyaXRlU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShXcml0ZVN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGF0LmRlc3Ryb3koKVxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5SZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIHZhciBmcyRvcGVuID0gZnMub3BlblxuICBmcy5vcGVuID0gb3BlblxuICBmdW5jdGlvbiBvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IpIHtcbiAgICBpZiAodHlwZW9mIG1vZGUgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG1vZGUsIG1vZGUgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kb3BlbihwYXRoLCBmbGFncywgbW9kZSwgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJG9wZW4sIFtwYXRoLCBmbGFncywgbW9kZSwgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnNcbn1cblxuZnVuY3Rpb24gZW5xdWV1ZSAoZWxlbSkge1xuICBkZWJ1ZygnRU5RVUVVRScsIGVsZW1bMF0ubmFtZSwgZWxlbVsxXSlcbiAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICByZXRyeSgpXG59XG5cbi8vIGtlZXAgdHJhY2sgb2YgdGhlIHRpbWVvdXQgYmV0d2VlbiByZXRyeSgpIGNhbGxzXG52YXIgcmV0cnlUaW1lclxuXG4vLyByZXNldCB0aGUgc3RhcnRUaW1lIGFuZCBsYXN0VGltZSB0byBub3dcbi8vIHRoaXMgcmVzZXRzIHRoZSBzdGFydCBvZiB0aGUgNjAgc2Vjb25kIG92ZXJhbGwgdGltZW91dCBhcyB3ZWxsIGFzIHRoZVxuLy8gZGVsYXkgYmV0d2VlbiBhdHRlbXB0cyBzbyB0aGF0IHdlJ2xsIHJldHJ5IHRoZXNlIGpvYnMgc29vbmVyXG5mdW5jdGlvbiByZXNldFF1ZXVlICgpIHtcbiAgdmFyIG5vdyA9IERhdGUubm93KClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGg7ICsraSkge1xuICAgIC8vIGVudHJpZXMgdGhhdCBhcmUgb25seSBhIGxlbmd0aCBvZiAyIGFyZSBmcm9tIGFuIG9sZGVyIHZlcnNpb24sIGRvbid0XG4gICAgLy8gYm90aGVyIG1vZGlmeWluZyB0aG9zZSBzaW5jZSB0aGV5J2xsIGJlIHJldHJpZWQgYW55d2F5LlxuICAgIGlmIChmc1tncmFjZWZ1bFF1ZXVlXVtpXS5sZW5ndGggPiAyKSB7XG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVszXSA9IG5vdyAvLyBzdGFydFRpbWVcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzRdID0gbm93IC8vIGxhc3RUaW1lXG4gICAgfVxuICB9XG4gIC8vIGNhbGwgcmV0cnkgdG8gbWFrZSBzdXJlIHdlJ3JlIGFjdGl2ZWx5IHByb2Nlc3NpbmcgdGhlIHF1ZXVlXG4gIHJldHJ5KClcbn1cblxuZnVuY3Rpb24gcmV0cnkgKCkge1xuICAvLyBjbGVhciB0aGUgdGltZXIgYW5kIHJlbW92ZSBpdCB0byBoZWxwIHByZXZlbnQgdW5pbnRlbmRlZCBjb25jdXJyZW5jeVxuICBjbGVhclRpbWVvdXQocmV0cnlUaW1lcilcbiAgcmV0cnlUaW1lciA9IHVuZGVmaW5lZFxuXG4gIGlmIChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuXG5cbiAgdmFyIGVsZW0gPSBmc1tncmFjZWZ1bFF1ZXVlXS5zaGlmdCgpXG4gIHZhciBmbiA9IGVsZW1bMF1cbiAgdmFyIGFyZ3MgPSBlbGVtWzFdXG4gIC8vIHRoZXNlIGl0ZW1zIG1heSBiZSB1bnNldCBpZiB0aGV5IHdlcmUgYWRkZWQgYnkgYW4gb2xkZXIgZ3JhY2VmdWwtZnNcbiAgdmFyIGVyciA9IGVsZW1bMl1cbiAgdmFyIHN0YXJ0VGltZSA9IGVsZW1bM11cbiAgdmFyIGxhc3RUaW1lID0gZWxlbVs0XVxuXG4gIC8vIGlmIHdlIGRvbid0IGhhdmUgYSBzdGFydFRpbWUgd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZiB3ZSd2ZSB3YWl0ZWRcbiAgLy8gbG9uZyBlbm91Z2gsIHNvIGdvIGFoZWFkIGFuZCByZXRyeSB0aGlzIGl0ZW0gbm93XG4gIGlmIChzdGFydFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgZm4uYXBwbHkobnVsbCwgYXJncylcbiAgfSBlbHNlIGlmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID49IDYwMDAwKSB7XG4gICAgLy8gaXQncyBiZWVuIG1vcmUgdGhhbiA2MCBzZWNvbmRzIHRvdGFsLCBiYWlsIG5vd1xuICAgIGRlYnVnKCdUSU1FT1VUJywgZm4ubmFtZSwgYXJncylcbiAgICB2YXIgY2IgPSBhcmdzLnBvcCgpXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiLmNhbGwobnVsbCwgZXJyKVxuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHRoZSBsYXN0IGF0dGVtcHQgYW5kIHJpZ2h0IG5vd1xuICAgIHZhciBzaW5jZUF0dGVtcHQgPSBEYXRlLm5vdygpIC0gbGFzdFRpbWVcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB3aGVuIHdlIGZpcnN0IHRyaWVkLCBhbmQgd2hlbiB3ZSBsYXN0IHRyaWVkXG4gICAgLy8gcm91bmRlZCB1cCB0byBhdCBsZWFzdCAxXG4gICAgdmFyIHNpbmNlU3RhcnQgPSBNYXRoLm1heChsYXN0VGltZSAtIHN0YXJ0VGltZSwgMSlcbiAgICAvLyBiYWNrb2ZmLiB3YWl0IGxvbmdlciB0aGFuIHRoZSB0b3RhbCB0aW1lIHdlJ3ZlIGJlZW4gcmV0cnlpbmcsIGJ1dCBvbmx5XG4gICAgLy8gdXAgdG8gYSBtYXhpbXVtIG9mIDEwMG1zXG4gICAgdmFyIGRlc2lyZWREZWxheSA9IE1hdGgubWluKHNpbmNlU3RhcnQgKiAxLjIsIDEwMClcbiAgICAvLyBpdCdzIGJlZW4gbG9uZyBlbm91Z2ggc2luY2UgdGhlIGxhc3QgcmV0cnksIGRvIGl0IGFnYWluXG4gICAgaWYgKHNpbmNlQXR0ZW1wdCA+PSBkZXNpcmVkRGVsYXkpIHtcbiAgICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbc3RhcnRUaW1lXSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHdlIGNhbid0IGRvIHRoaXMgam9iIHlldCwgcHVzaCBpdCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxuICAgICAgLy8gYW5kIGxldCB0aGUgbmV4dCBpdGVyYXRpb24gY2hlY2sgYWdhaW5cbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgICB9XG4gIH1cblxuICAvLyBzY2hlZHVsZSBvdXIgbmV4dCBydW4gaWYgb25lIGlzbid0IGFscmVhZHkgc2NoZWR1bGVkXG4gIGlmIChyZXRyeVRpbWVyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXRyeVRpbWVyID0gc2V0VGltZW91dChyZXRyeSwgMClcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbi8vIFRoaXMgaXMgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub3JtYWxpemUvbXpcbi8vIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEpvbmF0aGFuIE9uZyBtZUBqb25nbGViZXJyeS5jb20gYW5kIENvbnRyaWJ1dG9yc1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmNvbnN0IGFwaSA9IFtcbiAgJ2FjY2VzcycsXG4gICdhcHBlbmRGaWxlJyxcbiAgJ2NobW9kJyxcbiAgJ2Nob3duJyxcbiAgJ2Nsb3NlJyxcbiAgJ2NvcHlGaWxlJyxcbiAgJ2NwJyxcbiAgJ2ZjaG1vZCcsXG4gICdmY2hvd24nLFxuICAnZmRhdGFzeW5jJyxcbiAgJ2ZzdGF0JyxcbiAgJ2ZzeW5jJyxcbiAgJ2Z0cnVuY2F0ZScsXG4gICdmdXRpbWVzJyxcbiAgJ2dsb2InLFxuICAnbGNobW9kJyxcbiAgJ2xjaG93bicsXG4gICdsdXRpbWVzJyxcbiAgJ2xpbmsnLFxuICAnbHN0YXQnLFxuICAnbWtkaXInLFxuICAnbWtkdGVtcCcsXG4gICdvcGVuJyxcbiAgJ29wZW5kaXInLFxuICAncmVhZGRpcicsXG4gICdyZWFkRmlsZScsXG4gICdyZWFkbGluaycsXG4gICdyZWFscGF0aCcsXG4gICdyZW5hbWUnLFxuICAncm0nLFxuICAncm1kaXInLFxuICAnc3RhdCcsXG4gICdzdGF0ZnMnLFxuICAnc3ltbGluaycsXG4gICd0cnVuY2F0ZScsXG4gICd1bmxpbmsnLFxuICAndXRpbWVzJyxcbiAgJ3dyaXRlRmlsZSdcbl0uZmlsdGVyKGtleSA9PiB7XG4gIC8vIFNvbWUgY29tbWFuZHMgYXJlIG5vdCBhdmFpbGFibGUgb24gc29tZSBzeXN0ZW1zLiBFeDpcbiAgLy8gZnMuY3Agd2FzIGFkZGVkIGluIE5vZGUuanMgdjE2LjcuMFxuICAvLyBmcy5zdGF0ZnMgd2FzIGFkZGVkIGluIE5vZGUgdjE5LjYuMCwgdjE4LjE1LjBcbiAgLy8gZnMuZ2xvYiB3YXMgYWRkZWQgaW4gTm9kZS5qcyB2MjIuMC4wXG4gIC8vIGZzLmxjaG93biBpcyBub3QgYXZhaWxhYmxlIG9uIGF0IGxlYXN0IHNvbWUgTGludXhcbiAgcmV0dXJuIHR5cGVvZiBmc1trZXldID09PSAnZnVuY3Rpb24nXG59KVxuXG4vLyBFeHBvcnQgY2xvbmVkIGZzOlxuT2JqZWN0LmFzc2lnbihleHBvcnRzLCBmcylcblxuLy8gVW5pdmVyc2FsaWZ5IGFzeW5jIG1ldGhvZHM6XG5hcGkuZm9yRWFjaChtZXRob2QgPT4ge1xuICBleHBvcnRzW21ldGhvZF0gPSB1KGZzW21ldGhvZF0pXG59KVxuXG4vLyBXZSBkaWZmZXIgZnJvbSBtei9mcyBpbiB0aGF0IHdlIHN0aWxsIHNoaXAgdGhlIG9sZCwgYnJva2VuLCBmcy5leGlzdHMoKVxuLy8gc2luY2Ugd2UgYXJlIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIG5hdGl2ZSBtb2R1bGVcbmV4cG9ydHMuZXhpc3RzID0gZnVuY3Rpb24gKGZpbGVuYW1lLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhmaWxlbmFtZSwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHJldHVybiBmcy5leGlzdHMoZmlsZW5hbWUsIHJlc29sdmUpXG4gIH0pXG59XG5cbi8vIGZzLnJlYWQoKSwgZnMud3JpdGUoKSwgZnMucmVhZHYoKSwgJiBmcy53cml0ZXYoKSBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IGR1ZSB0byBtdWx0aXBsZSBjYWxsYmFjayBhcmdzXG5cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIChlcnIsIGJ5dGVzUmVhZCwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1JlYWQsIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBjYW4gYmVcbi8vIGZzLndyaXRlKGZkLCBidWZmZXJbLCBvZmZzZXRbLCBsZW5ndGhbLCBwb3NpdGlvbl1dXSwgY2FsbGJhY2spXG4vLyBPUlxuLy8gZnMud3JpdGUoZmQsIHN0cmluZ1ssIHBvc2l0aW9uWywgZW5jb2RpbmddXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSBib3RoIGNhc2VzLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCAuLi5hcmdzKSB7XG4gIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MpXG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1dyaXR0ZW4sIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBpc1xuLy8gcy5yZWFkdihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgb3B0aW9uYWwgYXJnLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy5yZWFkdiA9IGZ1bmN0aW9uIChmZCwgYnVmZmVycywgLi4uYXJncykge1xuICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy5yZWFkdihmZCwgYnVmZmVycywgLi4uYXJncylcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZHYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzUmVhZCwgYnVmZmVycykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNSZWFkLCBidWZmZXJzIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGlzXG4vLyBzLndyaXRldihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgb3B0aW9uYWwgYXJnLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy53cml0ZXYgPSBmdW5jdGlvbiAoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMud3JpdGV2KGZkLCBidWZmZXJzLCAuLi5hcmdzKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy53cml0ZXYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVycykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNXcml0dGVuLCBidWZmZXJzIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gZnMucmVhbHBhdGgubmF0aXZlIHNvbWV0aW1lcyBub3QgYXZhaWxhYmxlIGlmIGZzIGlzIG1vbmtleS1wYXRjaGVkXG5pZiAodHlwZW9mIGZzLnJlYWxwYXRoLm5hdGl2ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICBleHBvcnRzLnJlYWxwYXRoLm5hdGl2ZSA9IHUoZnMucmVhbHBhdGgubmF0aXZlKVxufSBlbHNlIHtcbiAgcHJvY2Vzcy5lbWl0V2FybmluZyhcbiAgICAnZnMucmVhbHBhdGgubmF0aXZlIGlzIG5vdCBhIGZ1bmN0aW9uLiBJcyBmcyBiZWluZyBtb25rZXktcGF0Y2hlZD8nLFxuICAgICdXYXJuaW5nJywgJ2ZzLWV4dHJhLVdBUk4wMDAzJ1xuICApXG59XG4iLAogICAgIi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL21ha2UtZGlyXG4vLyBDb3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChzaW5kcmVzb3JodXMuY29tKVxuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4ndXNlIHN0cmljdCdcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy84OTg3XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvcHVsbC8xMDg4XG5tb2R1bGUuZXhwb3J0cy5jaGVja1BhdGggPSBmdW5jdGlvbiBjaGVja1BhdGggKHB0aCkge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IHBhdGhIYXNJbnZhbGlkV2luQ2hhcmFjdGVycyA9IC9bPD46XCJ8PypdLy50ZXN0KHB0aC5yZXBsYWNlKHBhdGgucGFyc2UocHRoKS5yb290LCAnJykpXG5cbiAgICBpZiAocGF0aEhhc0ludmFsaWRXaW5DaGFyYWN0ZXJzKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgUGF0aCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR7cHRofWApXG4gICAgICBlcnJvci5jb2RlID0gJ0VJTlZBTCdcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB7IGNoZWNrUGF0aCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmNvbnN0IGdldE1vZGUgPSBvcHRpb25zID0+IHtcbiAgY29uc3QgZGVmYXVsdHMgPSB7IG1vZGU6IDBvNzc3IH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykgcmV0dXJuIG9wdGlvbnNcbiAgcmV0dXJuICh7IC4uLmRlZmF1bHRzLCAuLi5vcHRpb25zIH0pLm1vZGVcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpciA9IGFzeW5jIChkaXIsIG9wdGlvbnMpID0+IHtcbiAgY2hlY2tQYXRoKGRpcilcblxuICByZXR1cm4gZnMubWtkaXIoZGlyLCB7XG4gICAgbW9kZTogZ2V0TW9kZShvcHRpb25zKSxcbiAgICByZWN1cnNpdmU6IHRydWVcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpclN5bmMgPSAoZGlyLCBvcHRpb25zKSA9PiB7XG4gIGNoZWNrUGF0aChkaXIpXG5cbiAgcmV0dXJuIGZzLm1rZGlyU3luYyhkaXIsIHtcbiAgICBtb2RlOiBnZXRNb2RlKG9wdGlvbnMpLFxuICAgIHJlY3Vyc2l2ZTogdHJ1ZVxuICB9KVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgeyBtYWtlRGlyOiBfbWFrZURpciwgbWFrZURpclN5bmMgfSA9IHJlcXVpcmUoJy4vbWFrZS1kaXInKVxuY29uc3QgbWFrZURpciA9IHUoX21ha2VEaXIpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBta2RpcnM6IG1ha2VEaXIsXG4gIG1rZGlyc1N5bmM6IG1ha2VEaXJTeW5jLFxuICAvLyBhbGlhc1xuICBta2RpcnA6IG1ha2VEaXIsXG4gIG1rZGlycFN5bmM6IG1ha2VEaXJTeW5jLFxuICBlbnN1cmVEaXI6IG1ha2VEaXIsXG4gIGVuc3VyZURpclN5bmM6IG1ha2VEaXJTeW5jXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcblxuZnVuY3Rpb24gcGF0aEV4aXN0cyAocGF0aCkge1xuICByZXR1cm4gZnMuYWNjZXNzKHBhdGgpLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXRoRXhpc3RzOiB1KHBhdGhFeGlzdHMpLFxuICBwYXRoRXhpc3RzU3luYzogZnMuZXhpc3RzU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcblxuYXN5bmMgZnVuY3Rpb24gdXRpbWVzTWlsbGlzIChwYXRoLCBhdGltZSwgbXRpbWUpIHtcbiAgY29uc3QgZmQgPSBhd2FpdCBmcy5vcGVuKHBhdGgsICdyKycpXG5cbiAgbGV0IGVycm9yID0gbnVsbFxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZnMuZnV0aW1lcyhmZCwgYXRpbWUsIG10aW1lKVxuICB9IGNhdGNoIChmdXRpbWVzRXJyKSB7XG4gICAgZXJyb3IgPSBmdXRpbWVzRXJyXG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmNsb3NlKGZkKVxuICAgIH0gY2F0Y2ggKGNsb3NlRXJyKSB7XG4gICAgICBpZiAoIWVycm9yKSBlcnJvciA9IGNsb3NlRXJyXG4gICAgfVxuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGltZXNNaWxsaXNTeW5jIChwYXRoLCBhdGltZSwgbXRpbWUpIHtcbiAgY29uc3QgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCAncisnKVxuXG4gIGxldCBlcnJvciA9IG51bGxcblxuICB0cnkge1xuICAgIGZzLmZ1dGltZXNTeW5jKGZkLCBhdGltZSwgbXRpbWUpXG4gIH0gY2F0Y2ggKGZ1dGltZXNFcnIpIHtcbiAgICBlcnJvciA9IGZ1dGltZXNFcnJcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgIH0gY2F0Y2ggKGNsb3NlRXJyKSB7XG4gICAgICBpZiAoIWVycm9yKSBlcnJvciA9IGNsb3NlRXJyXG4gICAgfVxuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXRpbWVzTWlsbGlzOiB1KHV0aW1lc01pbGxpcyksXG4gIHV0aW1lc01pbGxpc1N5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5cbmZ1bmN0aW9uIGdldFN0YXRzIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3RhdEZ1bmMgPSBvcHRzLmRlcmVmZXJlbmNlXG4gICAgPyAoZmlsZSkgPT4gZnMuc3RhdChmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIDogKGZpbGUpID0+IGZzLmxzdGF0KGZpbGUsIHsgYmlnaW50OiB0cnVlIH0pXG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgc3RhdEZ1bmMoc3JjKSxcbiAgICBzdGF0RnVuYyhkZXN0KS5jYXRjaChlcnIgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIG51bGxcbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIF0pLnRoZW4oKFtzcmNTdGF0LCBkZXN0U3RhdF0pID0+ICh7IHNyY1N0YXQsIGRlc3RTdGF0IH0pKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0c1N5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgZGVzdFN0YXRcbiAgY29uc3Qgc3RhdEZ1bmMgPSBvcHRzLmRlcmVmZXJlbmNlXG4gICAgPyAoZmlsZSkgPT4gZnMuc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICA6IChmaWxlKSA9PiBmcy5sc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgY29uc3Qgc3JjU3RhdCA9IHN0YXRGdW5jKHNyYylcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IHN0YXRGdW5jKGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0OiBudWxsIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrUGF0aHMgKHNyYywgZGVzdCwgZnVuY05hbWUsIG9wdHMpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gYXdhaXQgZ2V0U3RhdHMoc3JjLCBkZXN0LCBvcHRzKVxuICBpZiAoZGVzdFN0YXQpIHtcbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgY29uc3Qgc3JjQmFzZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHNyYylcbiAgICAgIGNvbnN0IGRlc3RCYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUoZGVzdClcbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ21vdmUnICYmXG4gICAgICAgIHNyY0Jhc2VOYW1lICE9PSBkZXN0QmFzZU5hbWUgJiZcbiAgICAgICAgc3JjQmFzZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZGVzdEJhc2VOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQsIGlzQ2hhbmdpbmdDYXNlOiB0cnVlIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgICB9XG4gICAgaWYgKCFzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBub24tZGlyZWN0b3J5ICcke3NyY30nLmApXG4gICAgfVxuICB9XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuXG4gIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0IH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQYXRoc1N5bmMgKHNyYywgZGVzdCwgZnVuY05hbWUsIG9wdHMpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gZ2V0U3RhdHNTeW5jKHNyYywgZGVzdCwgb3B0cylcblxuICBpZiAoZGVzdFN0YXQpIHtcbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgY29uc3Qgc3JjQmFzZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHNyYylcbiAgICAgIGNvbnN0IGRlc3RCYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUoZGVzdClcbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ21vdmUnICYmXG4gICAgICAgIHNyY0Jhc2VOYW1lICE9PSBkZXN0QmFzZU5hbWUgJiZcbiAgICAgICAgc3JjQmFzZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZGVzdEJhc2VOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQsIGlzQ2hhbmdpbmdDYXNlOiB0cnVlIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgICB9XG4gICAgaWYgKCFzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBub24tZGlyZWN0b3J5ICcke3NyY30nLmApXG4gICAgfVxuICB9XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbi8vIHJlY3Vyc2l2ZWx5IGNoZWNrIGlmIGRlc3QgcGFyZW50IGlzIGEgc3ViZGlyZWN0b3J5IG9mIHNyYy5cbi8vIEl0IHdvcmtzIGZvciBhbGwgZmlsZSB0eXBlcyBpbmNsdWRpbmcgc3ltbGlua3Mgc2luY2UgaXRcbi8vIGNoZWNrcyB0aGUgc3JjIGFuZCBkZXN0IGlub2Rlcy4gSXQgc3RhcnRzIGZyb20gdGhlIGRlZXBlc3Rcbi8vIHBhcmVudCBhbmQgc3RvcHMgb25jZSBpdCByZWFjaGVzIHRoZSBzcmMgcGFyZW50IG9yIHRoZSByb290IHBhdGguXG5hc3luYyBmdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHNyY1BhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc3JjKSlcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIGlmIChkZXN0UGFyZW50ID09PSBzcmNQYXJlbnQgfHwgZGVzdFBhcmVudCA9PT0gcGF0aC5wYXJzZShkZXN0UGFyZW50KS5yb290KSByZXR1cm5cblxuICBsZXQgZGVzdFN0YXRcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IGF3YWl0IGZzLnN0YXQoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cblxuICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpXG4gIH1cblxuICByZXR1cm4gY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzU3luYyAoc3JjLCBzcmNTdGF0LCBkZXN0LCBmdW5jTmFtZSkge1xuICBjb25zdCBzcmNQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHNyYykpXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGRlc3QpKVxuICBpZiAoZGVzdFBhcmVudCA9PT0gc3JjUGFyZW50IHx8IGRlc3RQYXJlbnQgPT09IHBhdGgucGFyc2UoZGVzdFBhcmVudCkucm9vdCkgcmV0dXJuXG4gIGxldCBkZXN0U3RhdFxuICB0cnkge1xuICAgIGRlc3RTdGF0ID0gZnMuc3RhdFN5bmMoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKVxuICB9XG4gIHJldHVybiBjaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBhcmVJZGVudGljYWwgKHNyY1N0YXQsIGRlc3RTdGF0KSB7XG4gIC8vIHN0YXQuZGV2IGNhbiBiZSAwbiBvbiB3aW5kb3dzIHdoZW4gbm9kZSB2ZXJzaW9uID49IDIyLngueFxuICByZXR1cm4gZGVzdFN0YXQuaW5vICE9PSB1bmRlZmluZWQgJiYgZGVzdFN0YXQuZGV2ICE9PSB1bmRlZmluZWQgJiYgZGVzdFN0YXQuaW5vID09PSBzcmNTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgPT09IHNyY1N0YXQuZGV2XG59XG5cbi8vIHJldHVybiB0cnVlIGlmIGRlc3QgaXMgYSBzdWJkaXIgb2Ygc3JjLCBvdGhlcndpc2UgZmFsc2UuXG4vLyBJdCBvbmx5IGNoZWNrcyB0aGUgcGF0aCBzdHJpbmdzLlxuZnVuY3Rpb24gaXNTcmNTdWJkaXIgKHNyYywgZGVzdCkge1xuICBjb25zdCBzcmNBcnIgPSBwYXRoLnJlc29sdmUoc3JjKS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgY29uc3QgZGVzdEFyciA9IHBhdGgucmVzb2x2ZShkZXN0KS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgcmV0dXJuIHNyY0Fyci5ldmVyeSgoY3VyLCBpKSA9PiBkZXN0QXJyW2ldID09PSBjdXIpXG59XG5cbmZ1bmN0aW9uIGVyck1zZyAoc3JjLCBkZXN0LCBmdW5jTmFtZSkge1xuICByZXR1cm4gYENhbm5vdCAke2Z1bmNOYW1lfSAnJHtzcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2Rlc3R9Jy5gXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBjaGVja1BhdGhzXG4gIGNoZWNrUGF0aHM6IHUoY2hlY2tQYXRocyksXG4gIGNoZWNrUGF0aHNTeW5jLFxuICAvLyBjaGVja1BhcmVudFxuICBjaGVja1BhcmVudFBhdGhzOiB1KGNoZWNrUGFyZW50UGF0aHMpLFxuICBjaGVja1BhcmVudFBhdGhzU3luYyxcbiAgLy8gTWlzY1xuICBpc1NyY1N1YmRpcixcbiAgYXJlSWRlbnRpY2FsXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzEwNTZcbi8vIFBlcmZvcm1pbmcgcGFyYWxsZWwgb3BlcmF0aW9ucyBvbiBlYWNoIGl0ZW0gb2YgYW4gYXN5bmMgaXRlcmF0b3IgaXNcbi8vIHN1cnByaXNpbmdseSBoYXJkOyB5b3UgbmVlZCB0byBoYXZlIGhhbmRsZXJzIGluIHBsYWNlIHRvIGF2b2lkIGdldHRpbmcgYW5cbi8vIFVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25XYXJuaW5nLlxuLy8gTk9URTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwcmVzZW50bHkgaGFuZGxlIHJldHVybiB2YWx1ZXMsIG9ubHkgZXJyb3JzXG5hc3luYyBmdW5jdGlvbiBhc3luY0l0ZXJhdG9yQ29uY3VycmVudFByb2Nlc3MgKGl0ZXJhdG9yLCBmbikge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBpdGVyYXRvcikge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBmbihpdGVtKS50aGVuKFxuICAgICAgICAoKSA9PiBudWxsLFxuICAgICAgICAoZXJyKSA9PiBlcnIgPz8gbmV3IEVycm9yKCd1bmtub3duIGVycm9yJylcbiAgICAgIClcbiAgICApXG4gIH1cbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgcHJvbWlzZXMubWFwKChwcm9taXNlKSA9PlxuICAgICAgcHJvbWlzZS50aGVuKChwb3NzaWJsZUVycikgPT4ge1xuICAgICAgICBpZiAocG9zc2libGVFcnIgIT09IG51bGwpIHRocm93IHBvc3NpYmxlRXJyXG4gICAgICB9KVxuICAgIClcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXN5bmNJdGVyYXRvckNvbmN1cnJlbnRQcm9jZXNzXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IHsgbWtkaXJzIH0gPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5jb25zdCB7IHV0aW1lc01pbGxpcyB9ID0gcmVxdWlyZSgnLi4vdXRpbC91dGltZXMnKVxuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5jb25zdCB7IGFzeW5jSXRlcmF0b3JDb25jdXJyZW50UHJvY2VzcyB9ID0gcmVxdWlyZSgnLi4vdXRpbC9hc3luYycpXG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHkgKHNyYywgZGVzdCwgb3B0cyA9IHt9KSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKFxuICAgICAgJ1VzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cXG4nICtcbiAgICAgICdcXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjknLFxuICAgICAgJ1dhcm5pbmcnLCAnZnMtZXh0cmEtV0FSTjAwMDEnXG4gICAgKVxuICB9XG5cbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gYXdhaXQgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ2NvcHknLCBvcHRzKVxuXG4gIGF3YWl0IHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JylcblxuICBjb25zdCBpbmNsdWRlID0gYXdhaXQgcnVuRmlsdGVyKHNyYywgZGVzdCwgb3B0cylcblxuICBpZiAoIWluY2x1ZGUpIHJldHVyblxuXG4gIC8vIGNoZWNrIGlmIHRoZSBwYXJlbnQgb2YgZGVzdCBleGlzdHMsIGFuZCBjcmVhdGUgaXQgaWYgaXQgZG9lc24ndCBleGlzdFxuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5kaXJuYW1lKGRlc3QpXG4gIGNvbnN0IGRpckV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHMoZGVzdFBhcmVudClcbiAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICBhd2FpdCBta2RpcnMoZGVzdFBhcmVudClcbiAgfVxuXG4gIGF3YWl0IGdldFN0YXRzQW5kUGVyZm9ybUNvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuRmlsdGVyIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKCFvcHRzLmZpbHRlcikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIG9wdHMuZmlsdGVyKHNyYywgZGVzdClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U3RhdHNBbmRQZXJmb3JtQ29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzdGF0Rm4gPSBvcHRzLmRlcmVmZXJlbmNlID8gZnMuc3RhdCA6IGZzLmxzdGF0XG4gIGNvbnN0IHNyY1N0YXQgPSBhd2FpdCBzdGF0Rm4oc3JjKVxuXG4gIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkpIHJldHVybiBvbkRpcihzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuXG4gIGlmIChcbiAgICBzcmNTdGF0LmlzRmlsZSgpIHx8XG4gICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgc3JjU3RhdC5pc0Jsb2NrRGV2aWNlKClcbiAgKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG5cbiAgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBpZiAoc3JjU3RhdC5pc1NvY2tldCgpKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7c3JjfWApXG4gIGlmIChzcmNTdGF0LmlzRklGTygpKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke3NyY31gKVxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtzcmN9YClcbn1cblxuYXN5bmMgZnVuY3Rpb24gb25GaWxlIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG5cbiAgaWYgKG9wdHMub3ZlcndyaXRlKSB7XG4gICAgYXdhaXQgZnMudW5saW5rKGRlc3QpXG4gICAgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgfVxuICBpZiAob3B0cy5lcnJvck9uRXhpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0c2ApXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBhd2FpdCBmcy5jb3B5RmlsZShzcmMsIGRlc3QpXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcykge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyB0aGUgdGltZXN0YW1wXG4gICAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gICAgLy8gKHRocm91Z2ggdXRpbWVzIGNhbGwpXG4gICAgaWYgKGZpbGVJc05vdFdyaXRhYmxlKHNyY1N0YXQubW9kZSkpIHtcbiAgICAgIGF3YWl0IG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjU3RhdC5tb2RlKVxuICAgIH1cblxuICAgIC8vIFNldCB0aW1lc3RhbXBzIGFuZCBtb2RlIGNvcnJlc3BvbmRpbmdseVxuXG4gICAgLy8gTm90ZSB0aGF0IFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gICAgLy8gKFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2ZzLmh0bWwjZnNfc3RhdF90aW1lX3ZhbHVlcylcbiAgICBjb25zdCB1cGRhdGVkU3JjU3RhdCA9IGF3YWl0IGZzLnN0YXQoc3JjKVxuICAgIGF3YWl0IHV0aW1lc01pbGxpcyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUpXG4gIH1cblxuICByZXR1cm4gZnMuY2htb2QoZGVzdCwgc3JjU3RhdC5tb2RlKVxufVxuXG5mdW5jdGlvbiBmaWxlSXNOb3RXcml0YWJsZSAoc3JjTW9kZSkge1xuICByZXR1cm4gKHNyY01vZGUgJiAwbzIwMCkgPT09IDBcbn1cblxuZnVuY3Rpb24gbWFrZUZpbGVXcml0YWJsZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gZnMuY2htb2QoZGVzdCwgc3JjTW9kZSB8IDBvMjAwKVxufVxuXG5hc3luYyBmdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICAvLyB0aGUgZGVzdCBkaXJlY3RvcnkgbWlnaHQgbm90IGV4aXN0LCBjcmVhdGUgaXRcbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIGF3YWl0IGZzLm1rZGlyKGRlc3QpXG4gIH1cblxuICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBjb3B5IGV2ZXJ5dGhpbmdcbiAgYXdhaXQgYXN5bmNJdGVyYXRvckNvbmN1cnJlbnRQcm9jZXNzKGF3YWl0IGZzLm9wZW5kaXIoc3JjKSwgYXN5bmMgKGl0ZW0pID0+IHtcbiAgICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbS5uYW1lKVxuICAgIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0ubmFtZSlcblxuICAgIGNvbnN0IGluY2x1ZGUgPSBhd2FpdCBydW5GaWx0ZXIoc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG4gICAgLy8gb25seSBjb3B5IHRoZSBpdGVtIGlmIGl0IG1hdGNoZXMgdGhlIGZpbHRlciBmdW5jdGlvblxuICAgIGlmIChpbmNsdWRlKSB7XG4gICAgICBjb25zdCB7IGRlc3RTdGF0IH0gPSBhd2FpdCBzdGF0LmNoZWNrUGF0aHMoc3JjSXRlbSwgZGVzdEl0ZW0sICdjb3B5Jywgb3B0cylcbiAgICAgIC8vIElmIHRoZSBpdGVtIGlzIGEgY29weWFibGUgZmlsZSwgYGdldFN0YXRzQW5kUGVyZm9ybUNvcHlgIHdpbGwgY29weSBpdFxuICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgYSBkaXJlY3RvcnksIGBnZXRTdGF0c0FuZFBlcmZvcm1Db3B5YCB3aWxsIGNhbGwgYG9uRGlyYCByZWN1cnNpdmVseVxuICAgICAgYXdhaXQgZ2V0U3RhdHNBbmRQZXJmb3JtQ29weShkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG4gICAgfVxuICB9KVxuXG4gIGlmICghZGVzdFN0YXQpIHtcbiAgICBhd2FpdCBmcy5jaG1vZChkZXN0LCBzcmNTdGF0Lm1vZGUpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gb25MaW5rIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGxldCByZXNvbHZlZFNyYyA9IGF3YWl0IGZzLnJlYWRsaW5rKHNyYylcbiAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICByZXNvbHZlZFNyYyA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZFNyYylcbiAgfVxuICBpZiAoIWRlc3RTdGF0KSB7XG4gICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QpXG4gIH1cblxuICBsZXQgcmVzb2x2ZWREZXN0ID0gbnVsbFxuICB0cnkge1xuICAgIHJlc29sdmVkRGVzdCA9IGF3YWl0IGZzLnJlYWRsaW5rKGRlc3QpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBkZXN0IGV4aXN0cyBhbmQgaXMgYSByZWd1bGFyIGZpbGUgb3IgZGlyZWN0b3J5LFxuICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgLy8gZnMgdGhyb3dzIGVycm9yIGFueXdheSwgc28gbm8gbmVlZCB0byBndWFyZCBhZ2FpbnN0IGl0IGhlcmUuXG4gICAgaWYgKGUuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZS5jb2RlID09PSAnVU5LTk9XTicpIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgIHRocm93IGVcbiAgfVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkRGVzdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZERlc3QpXG4gIH1cbiAgLy8gSWYgYm90aCBzeW1saW5rcyByZXNvbHZlIHRvIHRoZSBzYW1lIHRhcmdldCwgdGhleSBhcmUgc3RpbGwgZGlzdGluY3Qgc3ltbGlua3NcbiAgLy8gdGhhdCBjYW4gYmUgY29waWVkL292ZXJ3cml0dGVuLiBPbmx5IGNoZWNrIHN1YmRpcmVjdG9yeSBjb25zdHJhaW50cyB3aGVuXG4gIC8vIHRoZSByZXNvbHZlZCBwYXRocyBhcmUgZGlmZmVyZW50LlxuICBpZiAocmVzb2x2ZWRTcmMgIT09IHJlc29sdmVkRGVzdCkge1xuICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkU3JjLCByZXNvbHZlZERlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKVxuICAgIH1cblxuICAgIC8vIGRvIG5vdCBjb3B5IGlmIHNyYyBpcyBhIHN1YmRpciBvZiBkZXN0IHNpbmNlIHVubGlua2luZ1xuICAgIC8vIGRlc3QgaW4gdGhpcyBjYXNlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmluZyBzcmMgY29udGVudHNcbiAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZERlc3QsIHJlc29sdmVkU3JjKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3Jlc29sdmVkRGVzdH0nIHdpdGggJyR7cmVzb2x2ZWRTcmN9Jy5gKVxuICAgIH1cbiAgfVxuXG4gIC8vIGNvcHkgdGhlIGxpbmtcbiAgYXdhaXQgZnMudW5saW5rKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXJzU3luYyA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlyc1N5bmNcbmNvbnN0IHV0aW1lc01pbGxpc1N5bmMgPSByZXF1aXJlKCcuLi91dGlsL3V0aW1lcycpLnV0aW1lc01pbGxpc1N5bmNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBjb3B5U3luYyAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fVxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKFxuICAgICAgJ1VzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cXG4nICtcbiAgICAgICdcXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjknLFxuICAgICAgJ1dhcm5pbmcnLCAnZnMtZXh0cmEtV0FSTjAwMDInXG4gICAgKVxuICB9XG5cbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdC5jaGVja1BhdGhzU3luYyhzcmMsIGRlc3QsICdjb3B5Jywgb3B0cylcbiAgc3RhdC5jaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JylcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmMsIGRlc3QpKSByZXR1cm5cbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZGVzdFBhcmVudCkpIG1rZGlyc1N5bmMoZGVzdFBhcmVudClcbiAgcmV0dXJuIGdldFN0YXRzKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGNvbnN0IHN0YXRTeW5jID0gb3B0cy5kZXJlZmVyZW5jZSA/IGZzLnN0YXRTeW5jIDogZnMubHN0YXRTeW5jXG4gIGNvbnN0IHNyY1N0YXQgPSBzdGF0U3luYyhzcmMpXG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIG9uRGlyKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNGaWxlKCkgfHxcbiAgICAgICAgICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgICAgICAgIHNyY1N0YXQuaXNCbG9ja0RldmljZSgpKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzU29ja2V0KCkpIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtzcmN9YClcbiAgZWxzZSBpZiAoc3JjU3RhdC5pc0ZJRk8oKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtzcmN9YClcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7c3JjfWApXG59XG5cbmZ1bmN0aW9uIG9uRmlsZSAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gbWF5Q29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBtYXlDb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLm92ZXJ3cml0ZSkge1xuICAgIGZzLnVubGlua1N5bmMoZGVzdClcbiAgICByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICB9IGVsc2UgaWYgKG9wdHMuZXJyb3JPbkV4aXN0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtkZXN0fScgYWxyZWFkeSBleGlzdHNgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMuY29weUZpbGVTeW5jKHNyYywgZGVzdClcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzKSBoYW5kbGVUaW1lc3RhbXBzKHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0KVxuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjU3RhdC5tb2RlKVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lc3RhbXBzIChzcmNNb2RlLCBzcmMsIGRlc3QpIHtcbiAgLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGlzIHdyaXRhYmxlIGJlZm9yZSBzZXR0aW5nIHRoZSB0aW1lc3RhbXBcbiAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gIC8vICh0aHJvdWdoIHV0aW1lcyBjYWxsKVxuICBpZiAoZmlsZUlzTm90V3JpdGFibGUoc3JjTW9kZSkpIG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjTW9kZSlcbiAgcmV0dXJuIHNldERlc3RUaW1lc3RhbXBzKHNyYywgZGVzdClcbn1cblxuZnVuY3Rpb24gZmlsZUlzTm90V3JpdGFibGUgKHNyY01vZGUpIHtcbiAgcmV0dXJuIChzcmNNb2RlICYgMG8yMDApID09PSAwXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWxlV3JpdGFibGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUgfCAwbzIwMClcbn1cblxuZnVuY3Rpb24gc2V0RGVzdE1vZGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIGZzLmNobW9kU3luYyhkZXN0LCBzcmNNb2RlKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0VGltZXN0YW1wcyAoc3JjLCBkZXN0KSB7XG4gIC8vIFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgLy8gYmVjYXVzZSBpdCBpcyBtb2RpZmllZCBieSB0aGUgcmVhZCgyKSBzeXN0ZW0gY2FsbFxuICAvLyAoU2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZnMuaHRtbCNmc19zdGF0X3RpbWVfdmFsdWVzKVxuICBjb25zdCB1cGRhdGVkU3JjU3RhdCA9IGZzLnN0YXRTeW5jKHNyYylcbiAgcmV0dXJuIHV0aW1lc01pbGxpc1N5bmMoZGVzdCwgdXBkYXRlZFNyY1N0YXQuYXRpbWUsIHVwZGF0ZWRTcmNTdGF0Lm10aW1lKVxufVxuXG5mdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gbWtEaXJBbmRDb3B5KHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gY29weURpcihzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1rRGlyQW5kQ29weSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLm1rZGlyU3luYyhkZXN0KVxuICBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXIgKHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBkaXIgPSBmcy5vcGVuZGlyU3luYyhzcmMpXG5cbiAgdHJ5IHtcbiAgICBsZXQgZGlyZW50XG5cbiAgICB3aGlsZSAoKGRpcmVudCA9IGRpci5yZWFkU3luYygpKSAhPT0gbnVsbCkge1xuICAgICAgY29weURpckl0ZW0oZGlyZW50Lm5hbWUsIHNyYywgZGVzdCwgb3B0cylcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgZGlyLmNsb3NlU3luYygpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weURpckl0ZW0gKGl0ZW0sIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbSlcbiAgY29uc3QgZGVzdEl0ZW0gPSBwYXRoLmpvaW4oZGVzdCwgaXRlbSlcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmNJdGVtLCBkZXN0SXRlbSkpIHJldHVyblxuICBjb25zdCB7IGRlc3RTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyY0l0ZW0sIGRlc3RJdGVtLCAnY29weScsIG9wdHMpXG4gIHJldHVybiBnZXRTdGF0cyhkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG9uTGluayAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgcmVzb2x2ZWRTcmMgPSBmcy5yZWFkbGlua1N5bmMoc3JjKVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkU3JjID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkU3JjKVxuICB9XG5cbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVzb2x2ZWREZXN0XG4gICAgdHJ5IHtcbiAgICAgIHJlc29sdmVkRGVzdCA9IGZzLnJlYWRsaW5rU3luYyhkZXN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZGVzdCBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlIG9yIGRpcmVjdG9yeSxcbiAgICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZXJyLmNvZGUgPT09ICdVTktOT1dOJykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICByZXNvbHZlZERlc3QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWREZXN0KVxuICAgIH1cbiAgICAvLyBJZiBib3RoIHN5bWxpbmtzIHJlc29sdmUgdG8gdGhlIHNhbWUgdGFyZ2V0LCB0aGV5IGFyZSBzdGlsbCBkaXN0aW5jdCBzeW1saW5rc1xuICAgIC8vIHRoYXQgY2FuIGJlIGNvcGllZC9vdmVyd3JpdHRlbi4gT25seSBjaGVjayBzdWJkaXJlY3RvcnkgY29uc3RyYWludHMgd2hlblxuICAgIC8vIHRoZSByZXNvbHZlZCBwYXRocyBhcmUgZGlmZmVyZW50LlxuICAgIGlmIChyZXNvbHZlZFNyYyAhPT0gcmVzb2x2ZWREZXN0KSB7XG4gICAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKVxuICAgICAgfVxuXG4gICAgICAvLyBwcmV2ZW50IGNvcHkgaWYgc3JjIGlzIGEgc3ViZGlyIG9mIGRlc3Qgc2luY2UgdW5saW5raW5nXG4gICAgICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gICAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkRGVzdCwgcmVzb2x2ZWRTcmMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlMaW5rIChyZXNvbHZlZFNyYywgZGVzdCkge1xuICBmcy51bmxpbmtTeW5jKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3luY1xuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weTogdShyZXF1aXJlKCcuL2NvcHknKSksXG4gIGNvcHlTeW5jOiByZXF1aXJlKCcuL2NvcHktc3luYycpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcblxuZnVuY3Rpb24gcmVtb3ZlIChwYXRoLCBjYWxsYmFjaykge1xuICBmcy5ybShwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSwgY2FsbGJhY2spXG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN5bmMgKHBhdGgpIHtcbiAgZnMucm1TeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVtb3ZlOiB1KHJlbW92ZSksXG4gIHJlbW92ZVN5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKVxuXG5jb25zdCBlbXB0eURpciA9IHUoYXN5bmMgZnVuY3Rpb24gZW1wdHlEaXIgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbWtkaXIubWtkaXJzKGRpcilcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChpdGVtcy5tYXAoaXRlbSA9PiByZW1vdmUucmVtb3ZlKHBhdGguam9pbihkaXIsIGl0ZW0pKSkpXG59KVxuXG5mdW5jdGlvbiBlbXB0eURpclN5bmMgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICB9XG5cbiAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpdGVtID0gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICByZW1vdmUucmVtb3ZlU3luYyhpdGVtKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW1wdHlEaXJTeW5jLFxuICBlbXB0eWRpclN5bmM6IGVtcHR5RGlyU3luYyxcbiAgZW1wdHlEaXIsXG4gIGVtcHR5ZGlyOiBlbXB0eURpclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlRmlsZSAoZmlsZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZSlcbiAgfSBjYXRjaCB7IH1cbiAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRmlsZSgpKSByZXR1cm5cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcblxuICBsZXQgZGlyU3RhdHMgPSBudWxsXG4gIHRyeSB7XG4gICAgZGlyU3RhdHMgPSBhd2FpdCBmcy5zdGF0KGRpcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gaWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBtYWtlIGl0XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgYXdhaXQgbWtkaXIubWtkaXJzKGRpcilcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCAnJylcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICBpZiAoZGlyU3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCAnJylcbiAgfSBlbHNlIHtcbiAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgLy8gVGhpcyBpcyBqdXN0IHRvIGNhdXNlIGFuIGludGVybmFsIEVOT1RESVIgZXJyb3IgdG8gYmUgdGhyb3duXG4gICAgYXdhaXQgZnMucmVhZGRpcihkaXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsZVN5bmMgKGZpbGUpIHtcbiAgbGV0IHN0YXRzXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlKVxuICB9IGNhdGNoIHsgfVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVyblxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICB0cnkge1xuICAgIGlmICghZnMuc3RhdFN5bmMoZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAvLyBUaGlzIGlzIGp1c3QgdG8gY2F1c2UgYW4gaW50ZXJuYWwgRU5PVERJUiBlcnJvciB0byBiZSB0aHJvd25cbiAgICAgIGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElmIHRoZSBzdGF0IGNhbGwgYWJvdmUgZmFpbGVkIGJlY2F1c2UgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXRcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnRU5PRU5UJykgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gICAgZWxzZSB0aHJvdyBlcnJcbiAgfVxuXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVGaWxlOiB1KGNyZWF0ZUZpbGUpLFxuICBjcmVhdGVGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHsgcGF0aEV4aXN0cyB9ID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKVxuY29uc3QgeyBhcmVJZGVudGljYWwgfSA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUxpbmsgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgbGV0IGRzdFN0YXRcbiAgdHJ5IHtcbiAgICBkc3RTdGF0ID0gYXdhaXQgZnMubHN0YXQoZHN0cGF0aCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCB7XG4gICAgLy8gaWdub3JlIGVycm9yXG4gIH1cblxuICBsZXQgc3JjU3RhdFxuICB0cnkge1xuICAgIHNyY1N0YXQgPSBhd2FpdCBmcy5sc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgaWYgKGRzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRzdFN0YXQpKSByZXR1cm5cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcblxuICBjb25zdCBkaXJFeGlzdHMgPSBhd2FpdCBwYXRoRXhpc3RzKGRpcilcblxuICBpZiAoIWRpckV4aXN0cykge1xuICAgIGF3YWl0IG1rZGlyLm1rZGlycyhkaXIpXG4gIH1cblxuICBhd2FpdCBmcy5saW5rKHNyY3BhdGgsIGRzdHBhdGgpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGxldCBkc3RTdGF0XG4gIHRyeSB7XG4gICAgZHN0U3RhdCA9IGZzLmxzdGF0U3luYyhkc3RwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICB9IGNhdGNoIHt9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzcmNTdGF0ID0gZnMubHN0YXRTeW5jKHNyY3BhdGgsIHsgYmlnaW50OiB0cnVlIH0pXG4gICAgaWYgKGRzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRzdFN0YXQpKSByZXR1cm5cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVMaW5rJylcbiAgICB0aHJvdyBlcnJcbiAgfVxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICBjb25zdCBkaXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKGRpcilcbiAgaWYgKGRpckV4aXN0cykgcmV0dXJuIGZzLmxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuXG4gIHJldHVybiBmcy5saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlTGluazogdShjcmVhdGVMaW5rKSxcbiAgY3JlYXRlTGlua1N5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0d28gdHlwZXMgb2YgcGF0aHMsIG9uZSByZWxhdGl2ZSB0byBzeW1saW5rLCBhbmQgb25lXG4gKiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gQ2hlY2tzIGlmIHBhdGggaXMgYWJzb2x1dGUgb3JcbiAqIHJlbGF0aXZlLiBJZiB0aGUgcGF0aCBpcyByZWxhdGl2ZSwgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHBhdGggaXNcbiAqIHJlbGF0aXZlIHRvIHN5bWxpbmsgb3IgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gVGhpcyBpcyBhblxuICogaW5pdGlhdGl2ZSB0byBmaW5kIGEgc21hcnRlciBgc3JjcGF0aGAgdG8gc3VwcGx5IHdoZW4gYnVpbGRpbmcgc3ltbGlua3MuXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhdGggdG8gdXNlIG91dCBvZiBvbmUgb2YgdGhyZWUgcG9zc2libGVcbiAqIHR5cGVzIG9mIHNvdXJjZSBwYXRocy4gVGhlIGZpcnN0IGlzIGFuIGFic29sdXRlIHBhdGguIFRoaXMgaXMgZGV0ZWN0ZWQgYnlcbiAqIGBwYXRoLmlzQWJzb2x1dGUoKWAuIFdoZW4gYW4gYWJzb2x1dGUgcGF0aCBpcyBwcm92aWRlZCwgaXQgaXMgY2hlY2tlZCB0b1xuICogc2VlIGlmIGl0IGV4aXN0cy4gSWYgaXQgZG9lcyBpdCdzIHVzZWQsIGlmIG5vdCBhbiBlcnJvciBpcyByZXR1cm5lZFxuICogKGNhbGxiYWNrKS8gdGhyb3duIChzeW5jKS4gVGhlIG90aGVyIHR3byBvcHRpb25zIGZvciBgc3JjcGF0aGAgYXJlIGFcbiAqIHJlbGF0aXZlIHVybC4gQnkgZGVmYXVsdCBOb2RlJ3MgYGZzLnN5bWxpbmtgIHdvcmtzIGJ5IGNyZWF0aW5nIGEgc3ltbGlua1xuICogdXNpbmcgYGRzdHBhdGhgIGFuZCBleHBlY3RzIHRoZSBgc3JjcGF0aGAgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG5ld2x5XG4gKiBjcmVhdGVkIHN5bWxpbmsuIElmIHlvdSBwcm92aWRlIGEgYHNyY3BhdGhgIHRoYXQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIGZpbGVcbiAqIHN5c3RlbSBpdCByZXN1bHRzIGluIGEgYnJva2VuIHN5bWxpbmsuIFRvIG1pbmltaXplIHRoaXMsIHRoZSBmdW5jdGlvblxuICogY2hlY2tzIHRvIHNlZSBpZiB0aGUgJ3JlbGF0aXZlIHRvIHN5bWxpbmsnIHNvdXJjZSBmaWxlIGV4aXN0cywgYW5kIGlmIGl0XG4gKiBkb2VzIGl0IHdpbGwgdXNlIGl0LiBJZiBpdCBkb2VzIG5vdCwgaXQgY2hlY2tzIGlmIHRoZXJlJ3MgYSBmaWxlIHRoYXRcbiAqIGV4aXN0cyB0aGF0IGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBpZiBkb2VzIGl0cyB1c2VkLlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIGV4cGVjdGF0aW9ucyBvZiB0aGUgb3JpZ2luYWwgZnMuc3ltbGluayBzcGVjIGFuZCBhZGRzXG4gKiB0aGUgYWJpbGl0eSB0byBwYXNzIGluIGByZWxhdGl2ZSB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWNvdHJ5YCBwYXRocy5cbiAqL1xuXG5hc3luYyBmdW5jdGlvbiBzeW1saW5rUGF0aHMgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuXG4gIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHMocmVsYXRpdmVUb0RzdClcbiAgaWYgKGV4aXN0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogcmVsYXRpdmVUb0RzdCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZVN5bWxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICB0b0RzdDogcGF0aC5yZWxhdGl2ZShkc3RkaXIsIHNyY3BhdGgpXG4gIH1cbn1cblxuZnVuY3Rpb24gc3ltbGlua1BhdGhzU3luYyAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhzcmNwYXRoKVxuICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ2Fic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHJlbGF0aXZlVG9Ec3QpXG4gIGlmIChleGlzdHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9Dd2Q6IHJlbGF0aXZlVG9Ec3QsXG4gICAgICB0b0RzdDogc3JjcGF0aFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNyY0V4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgaWYgKCFzcmNFeGlzdHMpIHRocm93IG5ldyBFcnJvcigncmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCcpXG4gIHJldHVybiB7XG4gICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgdG9Ec3Q6IHBhdGgucmVsYXRpdmUoZHN0ZGlyLCBzcmNwYXRoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzeW1saW5rUGF0aHM6IHUoc3ltbGlua1BhdGhzKSxcbiAgc3ltbGlua1BhdGhzU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcblxuYXN5bmMgZnVuY3Rpb24gc3ltbGlua1R5cGUgKHNyY3BhdGgsIHR5cGUpIHtcbiAgaWYgKHR5cGUpIHJldHVybiB0eXBlXG5cbiAgbGV0IHN0YXRzXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJ2ZpbGUnXG4gIH1cblxuICByZXR1cm4gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbn1cblxuZnVuY3Rpb24gc3ltbGlua1R5cGVTeW5jIChzcmNwYXRoLCB0eXBlKSB7XG4gIGlmICh0eXBlKSByZXR1cm4gdHlwZVxuXG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gZnMubHN0YXRTeW5jKHNyY3BhdGgpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnZmlsZSdcbiAgfVxuICByZXR1cm4gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN5bWxpbmtUeXBlOiB1KHN5bWxpbmtUeXBlKSxcbiAgc3ltbGlua1R5cGVTeW5jXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuXG5jb25zdCB7IG1rZGlycywgbWtkaXJzU3luYyB9ID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuY29uc3QgeyBzeW1saW5rUGF0aHMsIHN5bWxpbmtQYXRoc1N5bmMgfSA9IHJlcXVpcmUoJy4vc3ltbGluay1wYXRocycpXG5jb25zdCB7IHN5bWxpbmtUeXBlLCBzeW1saW5rVHlwZVN5bmMgfSA9IHJlcXVpcmUoJy4vc3ltbGluay10eXBlJylcblxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5cbmNvbnN0IHsgYXJlSWRlbnRpY2FsIH0gPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVTeW1saW5rIChzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKSB7XG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gYXdhaXQgZnMubHN0YXQoZHN0cGF0aClcbiAgfSBjYXRjaCB7IH1cblxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIC8vIFdoZW4gc3JjcGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBpdCByZWxhdGl2ZSB0byBkc3RwYXRoJ3MgZGlyZWN0b3J5XG4gICAgLy8gKHN0YW5kYXJkIHN5bWxpbmsgYmVoYXZpb3IpIG9yIGZhbGwgYmFjayB0byBjd2QgaWYgdGhhdCBkb2Vzbid0IGV4aXN0XG4gICAgbGV0IHNyY1N0YXRcbiAgICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgICBzcmNTdGF0ID0gYXdhaXQgZnMuc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkc3RkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICAgIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICAgICAgdHJ5IHtcbiAgICAgICAgc3JjU3RhdCA9IGF3YWl0IGZzLnN0YXQocmVsYXRpdmVUb0RzdCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBzcmNTdGF0ID0gYXdhaXQgZnMuc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRzdFN0YXQgPSBhd2FpdCBmcy5zdGF0KGRzdHBhdGgsIHsgYmlnaW50OiB0cnVlIH0pXG4gICAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkc3RTdGF0KSkgcmV0dXJuXG4gIH1cblxuICBjb25zdCByZWxhdGl2ZSA9IGF3YWl0IHN5bWxpbmtQYXRocyhzcmNwYXRoLCBkc3RwYXRoKVxuICBzcmNwYXRoID0gcmVsYXRpdmUudG9Ec3RcbiAgY29uc3QgdG9UeXBlID0gYXdhaXQgc3ltbGlua1R5cGUocmVsYXRpdmUudG9Dd2QsIHR5cGUpXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuXG4gIGlmICghKGF3YWl0IHBhdGhFeGlzdHMoZGlyKSkpIHtcbiAgICBhd2FpdCBta2RpcnMoZGlyKVxuICB9XG5cbiAgcmV0dXJuIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdG9UeXBlKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTeW1saW5rU3luYyAoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGZzLmxzdGF0U3luYyhkc3RwYXRoKVxuICB9IGNhdGNoIHsgfVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIC8vIFdoZW4gc3JjcGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBpdCByZWxhdGl2ZSB0byBkc3RwYXRoJ3MgZGlyZWN0b3J5XG4gICAgLy8gKHN0YW5kYXJkIHN5bWxpbmsgYmVoYXZpb3IpIG9yIGZhbGwgYmFjayB0byBjd2QgaWYgdGhhdCBkb2Vzbid0IGV4aXN0XG4gICAgbGV0IHNyY1N0YXRcbiAgICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgICBzcmNTdGF0ID0gZnMuc3RhdFN5bmMoc3JjcGF0aCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgICBjb25zdCByZWxhdGl2ZVRvRHN0ID0gcGF0aC5qb2luKGRzdGRpciwgc3JjcGF0aClcbiAgICAgIHRyeSB7XG4gICAgICAgIHNyY1N0YXQgPSBmcy5zdGF0U3luYyhyZWxhdGl2ZVRvRHN0LCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHNyY1N0YXQgPSBmcy5zdGF0U3luYyhzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRzdFN0YXQgPSBmcy5zdGF0U3luYyhkc3RwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIGlmIChhcmVJZGVudGljYWwoc3JjU3RhdCwgZHN0U3RhdCkpIHJldHVyblxuICB9XG5cbiAgY29uc3QgcmVsYXRpdmUgPSBzeW1saW5rUGF0aHNTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIHNyY3BhdGggPSByZWxhdGl2ZS50b0RzdFxuICB0eXBlID0gc3ltbGlua1R5cGVTeW5jKHJlbGF0aXZlLnRvQ3dkLCB0eXBlKVxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhkaXIpXG4gIGlmIChleGlzdHMpIHJldHVybiBmcy5zeW1saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKVxuICBta2RpcnNTeW5jKGRpcilcbiAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVTeW1saW5rOiB1KGNyZWF0ZVN5bWxpbmspLFxuICBjcmVhdGVTeW1saW5rU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBjcmVhdGVGaWxlLCBjcmVhdGVGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IHsgY3JlYXRlTGluaywgY3JlYXRlTGlua1N5bmMgfSA9IHJlcXVpcmUoJy4vbGluaycpXG5jb25zdCB7IGNyZWF0ZVN5bWxpbmssIGNyZWF0ZVN5bWxpbmtTeW5jIH0gPSByZXF1aXJlKCcuL3N5bWxpbmsnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZmlsZVxuICBjcmVhdGVGaWxlLFxuICBjcmVhdGVGaWxlU3luYyxcbiAgZW5zdXJlRmlsZTogY3JlYXRlRmlsZSxcbiAgZW5zdXJlRmlsZVN5bmM6IGNyZWF0ZUZpbGVTeW5jLFxuICAvLyBsaW5rXG4gIGNyZWF0ZUxpbmssXG4gIGNyZWF0ZUxpbmtTeW5jLFxuICBlbnN1cmVMaW5rOiBjcmVhdGVMaW5rLFxuICBlbnN1cmVMaW5rU3luYzogY3JlYXRlTGlua1N5bmMsXG4gIC8vIHN5bWxpbmtcbiAgY3JlYXRlU3ltbGluayxcbiAgY3JlYXRlU3ltbGlua1N5bmMsXG4gIGVuc3VyZVN5bWxpbms6IGNyZWF0ZVN5bWxpbmssXG4gIGVuc3VyZVN5bWxpbmtTeW5jOiBjcmVhdGVTeW1saW5rU3luY1xufVxuIiwKICAgICJmdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgeyBFT0wgPSAnXFxuJywgZmluYWxFT0wgPSB0cnVlLCByZXBsYWNlciA9IG51bGwsIHNwYWNlcyB9ID0ge30pIHtcbiAgY29uc3QgRU9GID0gZmluYWxFT0wgPyBFT0wgOiAnJ1xuICBjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXMpXG5cbiAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ29udmVydGluZyAke3R5cGVvZiBvYmp9IHZhbHVlIHRvIEpTT04gaXMgbm90IHN1cHBvcnRlZGApXG4gIH1cblxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcbi9nLCBFT0wpICsgRU9GXG59XG5cbmZ1bmN0aW9uIHN0cmlwQm9tIChjb250ZW50KSB7XG4gIC8vIHdlIGRvIHRoaXMgYmVjYXVzZSBKU09OLnBhcnNlIHdvdWxkIGNvbnZlcnQgaXQgdG8gYSB1dGY4IHN0cmluZyBpZiBlbmNvZGluZyB3YXNuJ3Qgc3BlY2lmaWVkXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkpIGNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCd1dGY4JylcbiAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvXlxcdUZFRkYvLCAnJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfVxuIiwKICAgICJsZXQgX2ZzXG50cnkge1xuICBfZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG59IGNhdGNoIChfKSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2ZzJylcbn1cbmNvbnN0IHVuaXZlcnNhbGlmeSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpXG5jb25zdCB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5hc3luYyBmdW5jdGlvbiBfcmVhZEZpbGUgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIGxldCBkYXRhID0gYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy5yZWFkRmlsZSkoZmlsZSwgb3B0aW9ucylcblxuICBkYXRhID0gc3RyaXBCb20oZGF0YSlcblxuICBsZXQgb2JqXG4gIHRyeSB7XG4gICAgb2JqID0gSlNPTi5wYXJzZShkYXRhLCBvcHRpb25zID8gb3B0aW9ucy5yZXZpdmVyIDogbnVsbClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgIHRocm93IGVyclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuY29uc3QgcmVhZEZpbGUgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UoX3JlYWRGaWxlKVxuXG5mdW5jdGlvbiByZWFkRmlsZVN5bmMgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgb3B0aW9ucylcbiAgICBjb250ZW50ID0gc3RyaXBCb20oY29udGVudClcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50LCBvcHRpb25zLnJldml2ZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1gXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3dyaXRlRmlsZSAoZmlsZSwgb2JqLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShvYmosIG9wdGlvbnMpXG5cbiAgYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy53cml0ZUZpbGUpKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxuY29uc3Qgd3JpdGVGaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKF93cml0ZUZpbGUpXG5cbmZ1bmN0aW9uIHdyaXRlRmlsZVN5bmMgKGZpbGUsIG9iaiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkob2JqLCBvcHRpb25zKVxuICAvLyBub3Qgc3VyZSBpZiBmcy53cml0ZUZpbGVTeW5jIHJldHVybnMgYW55dGhpbmcsIGJ1dCBqdXN0IGluIGNhc2VcbiAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG4vLyBOT1RFOiBkbyBub3QgY2hhbmdlIHRoaXMgZXhwb3J0IGZvcm1hdDsgcmVxdWlyZWQgZm9yIEVTTSBjb21wYXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtanNvbmZpbGUvcHVsbC8xNjIgZm9yIGRldGFpbHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICByZWFkRmlsZSxcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGUsXG4gIHdyaXRlRmlsZVN5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnanNvbmZpbGUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8ganNvbmZpbGUgZXhwb3J0c1xuICByZWFkSnNvbjoganNvbkZpbGUucmVhZEZpbGUsXG4gIHJlYWRKc29uU3luYzoganNvbkZpbGUucmVhZEZpbGVTeW5jLFxuICB3cml0ZUpzb246IGpzb25GaWxlLndyaXRlRmlsZSxcbiAgd3JpdGVKc29uU3luYzoganNvbkZpbGUud3JpdGVGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuYXN5bmMgZnVuY3Rpb24gb3V0cHV0RmlsZSAoZmlsZSwgZGF0YSwgZW5jb2RpbmcgPSAndXRmLTgnKSB7XG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuXG4gIGlmICghKGF3YWl0IHBhdGhFeGlzdHMoZGlyKSkpIHtcbiAgICBhd2FpdCBta2Rpci5ta2RpcnMoZGlyKVxuICB9XG5cbiAgcmV0dXJuIGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gb3V0cHV0RmlsZVN5bmMgKGZpbGUsIC4uLmFyZ3MpIHtcbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gIH1cblxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIC4uLmFyZ3MpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBvdXRwdXRGaWxlOiB1KG91dHB1dEZpbGUpLFxuICBvdXRwdXRGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZSB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0LWZpbGUnKVxuXG5hc3luYyBmdW5jdGlvbiBvdXRwdXRKc29uIChmaWxlLCBkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgYXdhaXQgb3V0cHV0RmlsZShmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZVN5bmMgfSA9IHJlcXVpcmUoJy4uL291dHB1dC1maWxlJylcblxuZnVuY3Rpb24gb3V0cHV0SnNvblN5bmMgKGZpbGUsIGRhdGEsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgb3V0cHV0RmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHB1dEpzb25TeW5jXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnLi9qc29uZmlsZScpXG5cbmpzb25GaWxlLm91dHB1dEpzb24gPSB1KHJlcXVpcmUoJy4vb3V0cHV0LWpzb24nKSlcbmpzb25GaWxlLm91dHB1dEpzb25TeW5jID0gcmVxdWlyZSgnLi9vdXRwdXQtanNvbi1zeW5jJylcbi8vIGFsaWFzZXNcbmpzb25GaWxlLm91dHB1dEpTT04gPSBqc29uRmlsZS5vdXRwdXRKc29uXG5qc29uRmlsZS5vdXRwdXRKU09OU3luYyA9IGpzb25GaWxlLm91dHB1dEpzb25TeW5jXG5qc29uRmlsZS53cml0ZUpTT04gPSBqc29uRmlsZS53cml0ZUpzb25cbmpzb25GaWxlLndyaXRlSlNPTlN5bmMgPSBqc29uRmlsZS53cml0ZUpzb25TeW5jXG5qc29uRmlsZS5yZWFkSlNPTiA9IGpzb25GaWxlLnJlYWRKc29uXG5qc29uRmlsZS5yZWFkSlNPTlN5bmMgPSBqc29uRmlsZS5yZWFkSnNvblN5bmNcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uRmlsZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCB7IGNvcHkgfSA9IHJlcXVpcmUoJy4uL2NvcHknKVxuY29uc3QgeyByZW1vdmUgfSA9IHJlcXVpcmUoJy4uL3JlbW92ZScpXG5jb25zdCB7IG1rZGlycCB9ID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHsgcGF0aEV4aXN0cyB9ID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKVxuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmFzeW5jIGZ1bmN0aW9uIG1vdmUgKHNyYywgZGVzdCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdHMub3ZlcndyaXRlIHx8IG9wdHMuY2xvYmJlciB8fCBmYWxzZVxuXG4gIGNvbnN0IHsgc3JjU3RhdCwgaXNDaGFuZ2luZ0Nhc2UgPSBmYWxzZSB9ID0gYXdhaXQgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ21vdmUnLCBvcHRzKVxuXG4gIGF3YWl0IHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdtb3ZlJylcblxuICAvLyBJZiB0aGUgcGFyZW50IG9mIGRlc3QgaXMgbm90IHJvb3QsIG1ha2Ugc3VyZSBpdCBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBjb25zdCBwYXJzZWRQYXJlbnRQYXRoID0gcGF0aC5wYXJzZShkZXN0UGFyZW50KVxuICBpZiAocGFyc2VkUGFyZW50UGF0aC5yb290ICE9PSBkZXN0UGFyZW50KSB7XG4gICAgYXdhaXQgbWtkaXJwKGRlc3RQYXJlbnQpXG4gIH1cblxuICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKVxufVxuXG5hc3luYyBmdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKSB7XG4gIGlmICghaXNDaGFuZ2luZ0Nhc2UpIHtcbiAgICBpZiAob3ZlcndyaXRlKSB7XG4gICAgICBhd2FpdCByZW1vdmUoZGVzdClcbiAgICB9IGVsc2UgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZGVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKVxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVHJ5IHcvIHJlbmFtZSBmaXJzdCwgYW5kIHRyeSBjb3B5ICsgcmVtb3ZlIGlmIEVYREVWXG4gICAgYXdhaXQgZnMucmVuYW1lKHNyYywgZGVzdClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgYXdhaXQgbW92ZUFjcm9zc0RldmljZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtb3ZlQWNyb3NzRGV2aWNlIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICBjb25zdCBvcHRzID0ge1xuICAgIG92ZXJ3cml0ZSxcbiAgICBlcnJvck9uRXhpc3Q6IHRydWUsXG4gICAgcHJlc2VydmVUaW1lc3RhbXBzOiB0cnVlXG4gIH1cblxuICBhd2FpdCBjb3B5KHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHJlbW92ZShzcmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW92ZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBjb3B5U3luYyA9IHJlcXVpcmUoJy4uL2NvcHknKS5jb3B5U3luY1xuY29uc3QgcmVtb3ZlU3luYyA9IHJlcXVpcmUoJy4uL3JlbW92ZScpLnJlbW92ZVN5bmNcbmNvbnN0IG1rZGlycFN5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnBTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gbW92ZVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBjb25zdCB7IHNyY1N0YXQsIGlzQ2hhbmdpbmdDYXNlID0gZmFsc2UgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjLCBkZXN0LCAnbW92ZScsIG9wdHMpXG4gIHN0YXQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnbW92ZScpXG4gIGlmICghaXNQYXJlbnRSb290KGRlc3QpKSBta2RpcnBTeW5jKHBhdGguZGlybmFtZShkZXN0KSlcbiAgcmV0dXJuIGRvUmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBpc0NoYW5naW5nQ2FzZSlcbn1cblxuZnVuY3Rpb24gaXNQYXJlbnRSb290IChkZXN0KSB7XG4gIGNvbnN0IHBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBjb25zdCBwYXJzZWRQYXRoID0gcGF0aC5wYXJzZShwYXJlbnQpXG4gIHJldHVybiBwYXJzZWRQYXRoLnJvb3QgPT09IHBhcmVudFxufVxuXG5mdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKSB7XG4gIGlmIChpc0NoYW5naW5nQ2FzZSkgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgaWYgKG92ZXJ3cml0ZSkge1xuICAgIHJlbW92ZVN5bmMoZGVzdClcbiAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG4gIGlmIChmcy5leGlzdHNTeW5jKGRlc3QpKSB0aHJvdyBuZXcgRXJyb3IoJ2Rlc3QgYWxyZWFkeSBleGlzdHMuJylcbiAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbn1cblxuZnVuY3Rpb24gcmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICB0cnkge1xuICAgIGZzLnJlbmFtZVN5bmMoc3JjLCBkZXN0KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgIT09ICdFWERFVicpIHRocm93IGVyclxuICAgIHJldHVybiBtb3ZlQWNyb3NzRGV2aWNlKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdmVBY3Jvc3NEZXZpY2UgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgb3ZlcndyaXRlLFxuICAgIGVycm9yT25FeGlzdDogdHJ1ZSxcbiAgICBwcmVzZXJ2ZVRpbWVzdGFtcHM6IHRydWVcbiAgfVxuICBjb3B5U3luYyhzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiByZW1vdmVTeW5jKHNyYylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtb3ZlU3luY1xuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW92ZTogdShyZXF1aXJlKCcuL21vdmUnKSksXG4gIG1vdmVTeW5jOiByZXF1aXJlKCcuL21vdmUtc3luYycpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gRXhwb3J0IHByb21pc2VpZmllZCBncmFjZWZ1bC1mczpcbiAgLi4ucmVxdWlyZSgnLi9mcycpLFxuICAvLyBFeHBvcnQgZXh0cmEgbWV0aG9kczpcbiAgLi4ucmVxdWlyZSgnLi9jb3B5JyksXG4gIC4uLnJlcXVpcmUoJy4vZW1wdHknKSxcbiAgLi4ucmVxdWlyZSgnLi9lbnN1cmUnKSxcbiAgLi4ucmVxdWlyZSgnLi9qc29uJyksXG4gIC4uLnJlcXVpcmUoJy4vbWtkaXJzJyksXG4gIC4uLnJlcXVpcmUoJy4vbW92ZScpLFxuICAuLi5yZXF1aXJlKCcuL291dHB1dC1maWxlJyksXG4gIC4uLnJlcXVpcmUoJy4vcGF0aC1leGlzdHMnKSxcbiAgLi4ucmVxdWlyZSgnLi9yZW1vdmUnKVxufVxuIiwKICAgICJpbXBvcnQgVE9NTCBmcm9tIFwiQGlhcm5hL3RvbWxcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBjd2QsIGVudiB9IGZyb20gXCJub2RlOnByb2Nlc3NcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB0eXBlIHsgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJub2RlOmh0dHBcIjtcbmltcG9ydCB7IHZlcnNpb24gYXMgdml0ZVZlcnNpb24gfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHsgcmVhZEZpbGUsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBhZGFwdGVycyB9IGZyb20gXCIuL2FkYXB0ZXJzL2luZGV4LnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VWaXRlUGx1Z2luTWlsa2lvKG9wdGlvbnM/OiB7XG4gICAgb3V0cHV0Rm9ybWF0PzogXCJlc21cIiB8IFwiY2pzXCI7XG59KTogUGx1Z2luT3B0aW9uIHtcbiAgICBsZXQgb3V0RGlyID0gXCJkaXN0XCI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBcInZpdGUtcGx1Z2luLW1pbGtpb1wiLFxuICAgICAgICBhc3luYyBjb25maWd1cmVTZXJ2ZXIoc2VydmVyKSB7XG4gICAgICAgICAgICBsZXQgbWlsa2lvUHJvbWlzZTogUHJvbWlzZTxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IGdldE1pbGtpbyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW1pbGtpb1Byb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbWlsa2lvUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHAgPSBhd2FpdCBzZXJ2ZXIuc3NyTG9hZE1vZHVsZShcImluZGV4LnRzXCIsIHsgZml4U3RhY2t0cmFjZTogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgYXBwLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDogTnVtYmVyKGVudi5NSUxLSU9fUE9SVCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcDogQm9vbGVhbihlbnYuQ09PS0JPT0tfQkFTRV9VUkwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoRW52OiAoa2V5OiBzdHJpbmcpID0+IGVudltrZXldID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWlsa2lvUHJvbWlzZTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGVudk1vZGUgPSBlbnYuVklURV9NT0RFID8/IChlbnYuQ09PS0JPT0tfREVWRUxPUCA9PT0gXCJFTkFCTEVcIiA/IFwiZGV2ZWxvcG1lbnRcIiA6IFwicHJvZHVjdGlvblwiKTtcblxuICAgICAgICAgICAgLy8gQ2FjaGUgZm9yIHBhdGhBcnJheSB0byBhdm9pZCByZXBlYXRlZCBzcGxpdCgpIG9uIHNhbWUgcGF0aG5hbWVcbiAgICAgICAgICAgIGxldCBsYXN0UGF0aG5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgbGV0IGxhc3RQYXRoQXJyYXk6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICAgIHNlcnZlci5taWRkbGV3YXJlcy51c2UoYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ09SUzogbWlsa2lvIGhhbmRsZXMgQ09SUyBpdHNlbGYgKHZpdGUgYnVpbHQtaW4gQ09SUyBpcyBkaXNhYmxlZCBpbiBjb25maWcoKSlcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW4gPSByZXEuaGVhZGVycy5vcmlnaW47XG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCIsIG9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJWYXJ5XCIsIFwiT3JpZ2luXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kc1wiLCBcIkdFVCxQT1NULFBVVCxERUxFVEUsT1BUSU9OUyxIRUFEXCIpO1xuICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXCIsIFwiQ29udGVudC1UeXBlLEFjY2VwdCxBdXRob3JpemF0aW9uLE1pbGtpby1UaW1lc3RhbXAsTWlsa2lvLVNpZ25hdHVyZSxNaWxraW8tRXhlY3V0ZS1JZFwiKTtcbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNcIiwgXCJ0cnVlXCIpO1xuICAgICAgICAgICAgICAgIGlmIChyZXEubWV0aG9kID09PSBcIk9QVElPTlNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVIZWFkKDIwNCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaWxraW8gPSBhd2FpdCBnZXRNaWxraW8oKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVhZCBib2R5IGNodW5rcy4gQWNjdW11bGF0ZSBldmVyeSBjaHVuayB1bmNvbmRpdGlvbmFsbHk6XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgZW1pdHMgfjY0S0IgcGVyIFwiZGF0YVwiIGV2ZW50LCBhbmQgYW55IHNtYXJ0ZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gYnVmZmVyaW5nIHNjaGVtZSBoZXJlIHByZXZpb3VzbHkgZHJvcHBlZCB0aGUgdGhpcmQgY2h1bmtcbiAgICAgICAgICAgICAgICAgICAgLy8gb2YgbGFyZ2UgcmVxdWVzdCBib2RpZXMgKD4xMjhLQiksIGNvcnJ1cHRpbmcgSlNPTiBwYXJhbXMuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IE1BWF9CT0RZX1NJWkUgPSAxMCAqIDEwMjQgKiAxMDI0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5Q2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keVNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keVRvb0xhcmdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbihcImRhdGFcIiwgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5VG9vTGFyZ2UpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlTaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5U2l6ZSA+IE1BWF9CT0RZX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5VG9vTGFyZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoeyBzdWNjZXNzOiBmYWxzZSwgY29kZTogXCJSRVFVRVNUX1RPT19MQVJHRVwiLCByZWplY3Q6IHsgbWF4Qm9keVNpemU6IE1BWF9CT0RZX1NJWkUgfSwgZXhlY3V0ZUlkOiBcIlwiIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5Q2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5VG9vTGFyZ2UpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2QgPz8gXCJHRVRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IFVpbnQ4QXJyYXkgfCBudWxsID0gYm9keUNodW5rcy5sZW5ndGggPiAwID8gQnVmZmVyLmNvbmNhdChib2R5Q2h1bmtzKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5VGV4dCA9IGJvZHkgPyBCdWZmZXIuZnJvbShib2R5KS50b1N0cmluZyhcInV0Zi04XCIpIDogXCJcIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGQgZnVsbCBVUkwgZm9yIHN0YW5kYXJkIFJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcVVybCA9IHJlcS51cmwgPz8gXCIvXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm90b2NvbCA9IChyZXEgYXMgYW55KS5lbmNyeXB0ZWQgPyBcImh0dHBzXCIgOiBcImh0dHBcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvc3QgPSByZXEuaGVhZGVycy5ob3N0ID8/IFwibG9jYWxob3N0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsVXJsID0gYCR7cHJvdG9jb2x9Oi8vJHtob3N0fSR7cmVxVXJsfWA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIHN0YW5kYXJkIEhlYWRlcnMgZnJvbSBOb2RlLmpzIGluY29taW5nIGhlYWRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVxLmhlYWRlcnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIGhlYWRlcnMuYXBwZW5kKGtleSwgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgQWJvcnRDb250cm9sbGVyIGZvciBzdHJlYW0gcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RyZWFtID0gcmVxLmhlYWRlcnMuYWNjZXB0Py5zdGFydHNXaXRoKFwidGV4dC9ldmVudC1zdHJlYW1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduYWwgPSBpc1N0cmVhbSA/ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLm9uKFwiY2xvc2VcIiwgKCkgPT4geyBhYy5hYm9ydCgpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWMuc2lnbmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkoKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IHN0YW5kYXJkIFJlcXVlc3Qgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoZnVsbFVybCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IG1ldGhvZCAhPT0gXCJHRVRcIiAmJiBtZXRob2QgIT09IFwiSEVBRFwiID8gYm9keSBhcyBCb2R5SW5pdCB8IG51bGwgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0dGFjaCBwcmUtcmVhZCBkYXRhIGZvciBGYXN0IFBhdGggb3B0aW1pemF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxSW5kZXggPSByZXFVcmwuaW5kZXhPZihcIj9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRobmFtZSA9IHFJbmRleCA+PSAwID8gcmVxVXJsLnN1YnN0cmluZygwLCBxSW5kZXgpIDogcmVxVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QgYXMgYW55KS5fX2JvZHlUZXh0ID0gYm9keVRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCBhcyBhbnkpLl9fcGF0aG5hbWUgPSBwYXRobmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoQXJyYXk6IHN0cmluZ1tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGhuYW1lID09PSBsYXN0UGF0aG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoQXJyYXkgPSBsYXN0UGF0aEFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoQXJyYXkgPSBwYXRobmFtZS5sZW5ndGggPiAxID8gcGF0aG5hbWUuc3Vic3RyaW5nKDEpLnNwbGl0KFwiL1wiKSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RQYXRobmFtZSA9IHBhdGhuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RQYXRoQXJyYXkgPSBwYXRoQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCBhcyBhbnkpLl9fcGF0aEFycmF5ID0gcGF0aEFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QgYXMgYW55KS5fX29yaWdpbiA9IHJlcS5oZWFkZXJzLm9yaWdpbiA/PyBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QgYXMgYW55KS5fX2lzQWN0aW9uID0gIWlzU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBtaWxraW8ubGlzdGVuZXIuZmV0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52OiBlbnYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52TW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdSZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuX19yYXdSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVIZWFkKHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc0JvZHkgPSByZXNwb25zZS5ib2R5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc0JvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZW5kKEJ1ZmZlci5mcm9tKHJlc0JvZHksICd1dGYtOCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNCb2R5IGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBCdWZmZXIuaXNCdWZmZXIocmVzQm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQocmVzQm9keSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzQm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZW5kKEJ1ZmZlci5mcm9tKHJlc0JvZHkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNCb2R5IGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzQm9keS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiOiBBcnJheUJ1ZmZlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoQnVmZmVyLmZyb20oYWIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc0JvZHkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZChyZXNCb2R5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YW5kYXJkIFJlc3BvbnNlIG9iamVjdCBwYXRoIChzdHJlYW0sIE9QVElPTlMsIGV0Yy4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc0hlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXNwb25zZS5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHJlc0hlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHJlc0hlYWRlcnNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIGV4aXN0aW5nLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcmVzSGVhZGVyc1trZXldID0gW2V4aXN0aW5nLCB2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0hlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUhlYWQocmVzcG9uc2Uuc3RhdHVzLCByZXNIZWFkZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCAmJiByZXEubWV0aG9kICE9PSBcIkhFQURcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB1bXAgPSAoKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkKCkudGhlbigoeyBkb25lLCB2YWx1ZSB9OiB7IGRvbmU6IGJvb2xlYW47IHZhbHVlPzogVWludDhBcnJheSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSB7IHJlcy5lbmQoKTsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdW1wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdW1wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzLmhlYWRlcnNTZW50KSByZXMud3JpdGVIZWFkKDUwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZChcIkludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHNlcnZlci5zc3JGaXhTdGFja3RyYWNlKGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBjb25maWcoY29uZmlnLCB7IGNvbW1hbmQgfSkge1xuICAgICAgICAgICAgLy8gRGlzYWJsZSBWaXRlJ3MgYnVpbHQtaW4gQ09SUywgbWlsa2lvIGhhbmRsZXMgQ09SUyBpdHNlbGZcbiAgICAgICAgICAgIGNvbmZpZy5zZXJ2ZXIhLmNvcnMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGNvbW1hbmQgIT09IFwiYnVpbGRcIikgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdCA9IGF3YWl0IGdldENvb2tib29rVG9tbFByb2plY3QoKTtcblxuICAgICAgICAgICAgLy8gY29uZmlnLmJ1aWxkXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5idWlsZCkgY29uZmlnLmJ1aWxkID0ge307XG4gICAgICAgICAgICBjb25maWcuYnVpbGQuc3NyID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5idWlsZC5zb3VyY2VtYXAgPSBcImlubGluZVwiO1xuICAgICAgICAgICAgY29uZmlnLmJ1aWxkLnRhcmdldCA9IFwiZXMyMDI0XCI7XG4gICAgICAgICAgICAvLyBjb25maWcuYnVpbGQucm9sbGRvd25PcHRpb25zIChWaXRlIDgrKSAvIGNvbmZpZy5idWlsZC5yb2xsdXBPcHRpb25zIChWaXRlIDw9NywgZGVwcmVjYXRlZCBhbGlhcyBpbiBWaXRlIDgpXG4gICAgICAgICAgICBjb25zdCBidW5kbGVyT3B0aW9uc0tleSA9IE51bWJlcih2aXRlVmVyc2lvbi5zcGxpdChcIi5cIilbMF0pID49IDggPyBcInJvbGxkb3duT3B0aW9uc1wiIDogXCJyb2xsdXBPcHRpb25zXCI7XG4gICAgICAgICAgICBjb25zdCBidW5kbGVyT3B0aW9uczogYW55ID0gKChjb25maWcuYnVpbGQgYXMgYW55KVtidW5kbGVyT3B0aW9uc0tleV0gPz89IHt9KTtcbiAgICAgICAgICAgIC8vIGJ1bmRsZXJPcHRpb25zLm91dHB1dFxuICAgICAgICAgICAgaWYgKCFidW5kbGVyT3B0aW9ucy5vdXRwdXQpIGJ1bmRsZXJPcHRpb25zLm91dHB1dCA9IHt9O1xuICAgICAgICAgICAgLy8gYnVuZGxlck9wdGlvbnMuaW5wdXRcbiAgICAgICAgICAgIGJ1bmRsZXJPcHRpb25zLmlucHV0ID0ge1xuICAgICAgICAgICAgICAgIGluZGV4OiBcIi5taWxraW8vcnVuLnRzXCIsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoIXByb2plY3QuYWRhcHRlcikge1xuICAgICAgICAgICAgICAgIGxldCBmb3JtYXQ6IFwiZXNtXCIgfCBcImNqc1wiID0gXCJlc21cIjtcbiAgICAgICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICBsZXQgbW9kZTogXCJjaHVua1wiIHwgXCJidW5kbGVcIiA9IFwiYnVuZGxlXCI7XG4gICAgICAgICAgICAgICAgaWYgKHByb2plY3QucnVudGltZSA9PT0gXCJub2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gb3B0aW9ucz8ub3V0cHV0Rm9ybWF0ID8/IFwiY2pzXCI7XG4gICAgICAgICAgICAgICAgICAgIG1vZGUgPSBcImNodW5rXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9qZWN0LnJ1bnRpbWUgPT09IFwiZGVub1wiIHx8IHByb2plY3QucnVudGltZSA9PT0gXCJidW5cIikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBvcHRpb25zPy5vdXRwdXRGb3JtYXQgPz8gXCJlc21cIjtcbiAgICAgICAgICAgICAgICAgICAgbW9kZSA9IFwiY2h1bmtcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKFwicnVudGltZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIEFycmF5LmlzQXJyYXkoYnVuZGxlck9wdGlvbnMub3V0cHV0KSA/IGJ1bmRsZXJPcHRpb25zLm91dHB1dCA6IFtidW5kbGVyT3B0aW9ucy5vdXRwdXRdKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5wcmVzZXJ2ZU1vZHVsZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBmaW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhZGFwdGVyIG9mIGFkYXB0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGFwdGVyLm5hbWUgPT09IHByb2plY3QuYWRhcHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhZGFwdGVyLmFkYXB0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXJPcHRpb25zLmlucHV0ID0gcmVzdWx0LmlucHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlck9wdGlvbnMub3V0cHV0ID0gcmVzdWx0Lm91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZmluZCkgdGhyb3cgbmV3IEVycm9yKGBhZGFwdGVyIFwiJHtwcm9qZWN0LmFkYXB0ZXJ9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNvbmZpZy5zZXJ2ZXJcbiAgICAgICAgICAgIGlmICghY29uZmlnLnNlcnZlcikgY29uZmlnLnNlcnZlciA9IHt9O1xuICAgICAgICAgICAgLy8gY29uZmlnLnNlcnZlci5taWRkbGV3YXJlTW9kZVxuICAgICAgICAgICAgY29uZmlnLnNlcnZlci5obXIgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gY29uZmlnLm9wdGltaXplRGVwc1xuICAgICAgICAgICAgaWYgKCFjb25maWcub3B0aW1pemVEZXBzKSBjb25maWcub3B0aW1pemVEZXBzID0ge307XG4gICAgICAgICAgICBjb25maWcub3B0aW1pemVEZXBzLm5vRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghY29uZmlnLm9wdGltaXplRGVwcy5leGNsdWRlKSBjb25maWcub3B0aW1pemVEZXBzLmV4Y2x1ZGUgPSBbXTtcbiAgICAgICAgICAgIGNvbmZpZy5vcHRpbWl6ZURlcHMuZXhjbHVkZS5wdXNoKFwiQGVsZWN0cmljLXNxbC9wZ2xpdGVcIik7XG5cbiAgICAgICAgICAgIC8vIGNvbmZpZy53b3JrZXJcbiAgICAgICAgICAgIGlmICghY29uZmlnLndvcmtlcikgY29uZmlnLndvcmtlciA9IHt9O1xuICAgICAgICAgICAgY29uZmlnLndvcmtlci5mb3JtYXQgPSBcImVzXCI7XG5cbiAgICAgICAgICAgIC8vIGNvbmZpZy5yZXNvbHZlXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5yZXNvbHZlKSBjb25maWcucmVzb2x2ZSA9IHt9O1xuICAgICAgICAgICAgLy8gY29uZmlnLnJlc29sdmUuYWxpYXNcbiAgICAgICAgICAgIGNvbmZpZy5yZXNvbHZlLmFsaWFzID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvbmZpZy5yZXNvbHZlLmFsaWFzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gY29uZmlnLnNzclxuICAgICAgICAgICAgY29uZmlnLnNzciA9IHtcbiAgICAgICAgICAgICAgICBub0V4dGVybmFsOiBnZXROb0V4dGVybmFsKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbmZpZ1Jlc29sdmVkKHJlc29sdmVkQ29uZmlnKSB7XG4gICAgICAgICAgICBvdXREaXIgPSByZXNvbHZlZENvbmZpZy5idWlsZC5vdXREaXIgfHwgXCJkaXN0XCI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgd3JpdGVCdW5kbGUoKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oY3dkKCksIG91dERpciwgXCIuZ2l0a2VlcFwiKTtcbiAgICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgXCJcIiwgXCJ1dGYtOFwiKTtcbiAgICAgICAgfSxcbiAgICB9IHNhdGlzZmllcyBQbHVnaW5PcHRpb247XG59XG5cbmZ1bmN0aW9uIGdldE5vRXh0ZXJuYWwoKSB7XG4gICAgLy8gYnVuXG4gICAgY29uc3QgYnVuID0gW1wiYnVuXCIsIC9eYnVuOi9dO1xuXG4gICAgLy8gbm9kZV9tb2R1bGVzXG4gICAgbGV0IG5vZGVNb2R1bGVzID0gWy4uLihleGlzdHNTeW5jKGpvaW4oY3dkKCksIFwibm9kZV9tb2R1bGVzXCIpKSA/IHJlYWRkaXJTeW5jKGpvaW4oY3dkKCksIFwibm9kZV9tb2R1bGVzXCIpKSA6IFtdKSwgLi4uKGV4aXN0c1N5bmMoam9pbihjd2QoKSwgXCIuLlwiLCBcIi4uXCIsIFwibm9kZV9tb2R1bGVzXCIpKSA/IHJlYWRkaXJTeW5jKGpvaW4oY3dkKCksIFwiLi5cIiwgXCIuLlwiLCBcIm5vZGVfbW9kdWxlc1wiKSkgOiBbXSldLmZpbHRlcigoZGVwZW5kZW5jeSkgPT4gIWRlcGVuZGVuY3kuc3RhcnRzV2l0aChcIi5cIikpO1xuICAgIC8vIGVsZWN0cm9uIGV4Y2x1ZGVcbiAgICBub2RlTW9kdWxlcyA9IG5vZGVNb2R1bGVzLmZpbHRlcigoZGVwZW5kZW5jeSkgPT4gZGVwZW5kZW5jeSAhPT0gXCJlbGVjdHJvblwiKTtcbiAgICAvLyBzdGFydHNXaXRoIEBcbiAgICBjb25zdCBub2RlTW9kdWxlc1JlZ0V4cCA9IG5vZGVNb2R1bGVzLm1hcCgoZGVwZW5kZW5jeSkgPT4gKGRlcGVuZGVuY3kuc3RhcnRzV2l0aChcIkBcIikgPyBuZXcgUmVnRXhwKGBeJHtkZXBlbmRlbmN5fS9gKSA6IGRlcGVuZGVuY3kpKTtcblxuICAgIHJldHVybiBbLi4uYnVuLCAuLi5ub2RlTW9kdWxlc1JlZ0V4cF07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvb2tib29rVG9tbFByb2plY3QoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBjb29rYm9va1RvbWxSYXcgPSBhd2FpdCByZWFkRmlsZShqb2luKGN3ZCgpLCBcIi4uXCIsIFwiLi5cIiwgXCJjb29rYm9vay50b21sXCIpLCBcInV0Zi04XCIpO1xuICAgIGNvbnN0IGNvb2tib29rVG9tbCA9IFRPTUwucGFyc2UoY29va2Jvb2tUb21sUmF3KTtcbiAgICBsZXQgcHJvamVjdDogYW55O1xuICAgIGZvciAoY29uc3QgcHJvamVjdE5hbWUgaW4gY29va2Jvb2tUb21sLnByb2plY3RzIGFzIGFueSkge1xuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vU2VsZkNvbXBhcmU6IDxleHBsYW5hdGlvbj5cbiAgICAgICAgaWYgKGpvaW4oY3dkKCkpICE9PSBqb2luKGN3ZCgpLCBcIi4uXCIsIHByb2plY3ROYW1lKSkgY29udGludWU7XG4gICAgICAgIHByb2plY3QgPSAoY29va2Jvb2tUb21sLnByb2plY3RzIGFzIGFueSlbcHJvamVjdE5hbWVdO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKCFwcm9qZWN0KSB0aHJvdyBuZXcgRXJyb3IoXCJQcm9qZWN0IG5vdCBmb3VuZCBpbiBjb29rYm9vay50b21sXCIpO1xuICAgIHJldHVybiBwcm9qZWN0O1xufVxuIiwKICAgICJleHBvcnQgY29uc3QgYmFsYW5jZWQgPSAoYSwgYiwgc3RyKSA9PiB7XG4gICAgY29uc3QgbWEgPSBhIGluc3RhbmNlb2YgUmVnRXhwID8gbWF5YmVNYXRjaChhLCBzdHIpIDogYTtcbiAgICBjb25zdCBtYiA9IGIgaW5zdGFuY2VvZiBSZWdFeHAgPyBtYXliZU1hdGNoKGIsIHN0cikgOiBiO1xuICAgIGNvbnN0IHIgPSBtYSAhPT0gbnVsbCAmJiBtYiAhPSBudWxsICYmIHJhbmdlKG1hLCBtYiwgc3RyKTtcbiAgICByZXR1cm4gKHIgJiYge1xuICAgICAgICBzdGFydDogclswXSxcbiAgICAgICAgZW5kOiByWzFdLFxuICAgICAgICBwcmU6IHN0ci5zbGljZSgwLCByWzBdKSxcbiAgICAgICAgYm9keTogc3RyLnNsaWNlKHJbMF0gKyBtYS5sZW5ndGgsIHJbMV0pLFxuICAgICAgICBwb3N0OiBzdHIuc2xpY2UoclsxXSArIG1iLmxlbmd0aCksXG4gICAgfSk7XG59O1xuY29uc3QgbWF5YmVNYXRjaCA9IChyZWcsIHN0cikgPT4ge1xuICAgIGNvbnN0IG0gPSBzdHIubWF0Y2gocmVnKTtcbiAgICByZXR1cm4gbSA/IG1bMF0gOiBudWxsO1xufTtcbmV4cG9ydCBjb25zdCByYW5nZSA9IChhLCBiLCBzdHIpID0+IHtcbiAgICBsZXQgYmVncywgYmVnLCBsZWZ0LCByaWdodCA9IHVuZGVmaW5lZCwgcmVzdWx0O1xuICAgIGxldCBhaSA9IHN0ci5pbmRleE9mKGEpO1xuICAgIGxldCBiaSA9IHN0ci5pbmRleE9mKGIsIGFpICsgMSk7XG4gICAgbGV0IGkgPSBhaTtcbiAgICBpZiAoYWkgPj0gMCAmJiBiaSA+IDApIHtcbiAgICAgICAgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgICAgIHJldHVybiBbYWksIGJpXTtcbiAgICAgICAgfVxuICAgICAgICBiZWdzID0gW107XG4gICAgICAgIGxlZnQgPSBzdHIubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmICFyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChpID09PSBhaSkge1xuICAgICAgICAgICAgICAgIGJlZ3MucHVzaChpKTtcbiAgICAgICAgICAgICAgICBhaSA9IHN0ci5pbmRleE9mKGEsIGkgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJlZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgciA9IGJlZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKHIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW3IsIGJpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJlZyA9IGJlZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKGJlZyAhPT0gdW5kZWZpbmVkICYmIGJlZyA8IGxlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGJlZztcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBiaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYmkgPSBzdHIuaW5kZXhPZihiLCBpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpID0gYWkgPCBiaSAmJiBhaSA+PSAwID8gYWkgOiBiaTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmVncy5sZW5ndGggJiYgcmlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gW2xlZnQsIHJpZ2h0XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgYmFsYW5jZWQgfSBmcm9tICdiYWxhbmNlZC1tYXRjaCc7XG5jb25zdCBlc2NTbGFzaCA9ICdcXDBTTEFTSCcgKyBNYXRoLnJhbmRvbSgpICsgJ1xcMCc7XG5jb25zdCBlc2NPcGVuID0gJ1xcME9QRU4nICsgTWF0aC5yYW5kb20oKSArICdcXDAnO1xuY29uc3QgZXNjQ2xvc2UgPSAnXFwwQ0xPU0UnICsgTWF0aC5yYW5kb20oKSArICdcXDAnO1xuY29uc3QgZXNjQ29tbWEgPSAnXFwwQ09NTUEnICsgTWF0aC5yYW5kb20oKSArICdcXDAnO1xuY29uc3QgZXNjUGVyaW9kID0gJ1xcMFBFUklPRCcgKyBNYXRoLnJhbmRvbSgpICsgJ1xcMCc7XG5jb25zdCBlc2NTbGFzaFBhdHRlcm4gPSBuZXcgUmVnRXhwKGVzY1NsYXNoLCAnZycpO1xuY29uc3QgZXNjT3BlblBhdHRlcm4gPSBuZXcgUmVnRXhwKGVzY09wZW4sICdnJyk7XG5jb25zdCBlc2NDbG9zZVBhdHRlcm4gPSBuZXcgUmVnRXhwKGVzY0Nsb3NlLCAnZycpO1xuY29uc3QgZXNjQ29tbWFQYXR0ZXJuID0gbmV3IFJlZ0V4cChlc2NDb21tYSwgJ2cnKTtcbmNvbnN0IGVzY1BlcmlvZFBhdHRlcm4gPSBuZXcgUmVnRXhwKGVzY1BlcmlvZCwgJ2cnKTtcbmNvbnN0IHNsYXNoUGF0dGVybiA9IC9cXFxcXFxcXC9nO1xuY29uc3Qgb3BlblBhdHRlcm4gPSAvXFxcXHsvZztcbmNvbnN0IGNsb3NlUGF0dGVybiA9IC9cXFxcfS9nO1xuY29uc3QgY29tbWFQYXR0ZXJuID0gL1xcXFwsL2c7XG5jb25zdCBwZXJpb2RQYXR0ZXJuID0gL1xcXFxcXC4vZztcbmV4cG9ydCBjb25zdCBFWFBBTlNJT05fTUFYID0gMTAwXzAwMDtcbmZ1bmN0aW9uIG51bWVyaWMoc3RyKSB7XG4gICAgcmV0dXJuICFpc05hTihzdHIpID8gcGFyc2VJbnQoc3RyLCAxMCkgOiBzdHIuY2hhckNvZGVBdCgwKTtcbn1cbmZ1bmN0aW9uIGVzY2FwZUJyYWNlcyhzdHIpIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAgIC5yZXBsYWNlKHNsYXNoUGF0dGVybiwgZXNjU2xhc2gpXG4gICAgICAgIC5yZXBsYWNlKG9wZW5QYXR0ZXJuLCBlc2NPcGVuKVxuICAgICAgICAucmVwbGFjZShjbG9zZVBhdHRlcm4sIGVzY0Nsb3NlKVxuICAgICAgICAucmVwbGFjZShjb21tYVBhdHRlcm4sIGVzY0NvbW1hKVxuICAgICAgICAucmVwbGFjZShwZXJpb2RQYXR0ZXJuLCBlc2NQZXJpb2QpO1xufVxuZnVuY3Rpb24gdW5lc2NhcGVCcmFjZXMoc3RyKSB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAucmVwbGFjZShlc2NTbGFzaFBhdHRlcm4sICdcXFxcJylcbiAgICAgICAgLnJlcGxhY2UoZXNjT3BlblBhdHRlcm4sICd7JylcbiAgICAgICAgLnJlcGxhY2UoZXNjQ2xvc2VQYXR0ZXJuLCAnfScpXG4gICAgICAgIC5yZXBsYWNlKGVzY0NvbW1hUGF0dGVybiwgJywnKVxuICAgICAgICAucmVwbGFjZShlc2NQZXJpb2RQYXR0ZXJuLCAnLicpO1xufVxuLyoqXG4gKiBCYXNpY2FsbHkganVzdCBzdHIuc3BsaXQoXCIsXCIpLCBidXQgaGFuZGxpbmcgY2FzZXNcbiAqIHdoZXJlIHdlIGhhdmUgbmVzdGVkIGJyYWNlZCBzZWN0aW9ucywgd2hpY2ggc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGluZGl2aWR1YWwgbWVtYmVycywgbGlrZSB7YSx7YixjfSxkfVxuICovXG5mdW5jdGlvbiBwYXJzZUNvbW1hUGFydHMoc3RyKSB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgICAgcmV0dXJuIFsnJ107XG4gICAgfVxuICAgIGNvbnN0IHBhcnRzID0gW107XG4gICAgY29uc3QgbSA9IGJhbGFuY2VkKCd7JywgJ30nLCBzdHIpO1xuICAgIGlmICghbSkge1xuICAgICAgICByZXR1cm4gc3RyLnNwbGl0KCcsJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgcHJlLCBib2R5LCBwb3N0IH0gPSBtO1xuICAgIGNvbnN0IHAgPSBwcmUuc3BsaXQoJywnKTtcbiAgICBwW3AubGVuZ3RoIC0gMV0gKz0gJ3snICsgYm9keSArICd9JztcbiAgICBjb25zdCBwb3N0UGFydHMgPSBwYXJzZUNvbW1hUGFydHMocG9zdCk7XG4gICAgaWYgKHBvc3QubGVuZ3RoKSB7XG4gICAgICAgIDtcbiAgICAgICAgcFtwLmxlbmd0aCAtIDFdICs9IHBvc3RQYXJ0cy5zaGlmdCgpO1xuICAgICAgICBwLnB1c2guYXBwbHkocCwgcG9zdFBhcnRzKTtcbiAgICB9XG4gICAgcGFydHMucHVzaC5hcHBseShwYXJ0cywgcCk7XG4gICAgcmV0dXJuIHBhcnRzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZChzdHIsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgeyBtYXggPSBFWFBBTlNJT05fTUFYIH0gPSBvcHRpb25zO1xuICAgIC8vIEkgZG9uJ3Qga25vdyB3aHkgQmFzaCA0LjMgZG9lcyB0aGlzLCBidXQgaXQgZG9lcy5cbiAgICAvLyBBbnl0aGluZyBzdGFydGluZyB3aXRoIHt9IHdpbGwgaGF2ZSB0aGUgZmlyc3QgdHdvIGJ5dGVzIHByZXNlcnZlZFxuICAgIC8vIGJ1dCAqb25seSogYXQgdGhlIHRvcCBsZXZlbCwgc28ge30sYX1iIHdpbGwgbm90IGV4cGFuZCB0byBhbnl0aGluZyxcbiAgICAvLyBidXQgYXt9LGJ9YyB3aWxsIGJlIGV4cGFuZGVkIHRvIFthfWMsYWJjXS5cbiAgICAvLyBPbmUgY291bGQgYXJndWUgdGhhdCB0aGlzIGlzIGEgYnVnIGluIEJhc2gsIGJ1dCBzaW5jZSB0aGUgZ29hbCBvZlxuICAgIC8vIHRoaXMgbW9kdWxlIGlzIHRvIG1hdGNoIEJhc2gncyBydWxlcywgd2UgZXNjYXBlIGEgbGVhZGluZyB7fVxuICAgIGlmIChzdHIuc2xpY2UoMCwgMikgPT09ICd7fScpIHtcbiAgICAgICAgc3RyID0gJ1xcXFx7XFxcXH0nICsgc3RyLnNsaWNlKDIpO1xuICAgIH1cbiAgICByZXR1cm4gZXhwYW5kXyhlc2NhcGVCcmFjZXMoc3RyKSwgbWF4LCB0cnVlKS5tYXAodW5lc2NhcGVCcmFjZXMpO1xufVxuZnVuY3Rpb24gZW1icmFjZShzdHIpIHtcbiAgICByZXR1cm4gJ3snICsgc3RyICsgJ30nO1xufVxuZnVuY3Rpb24gaXNQYWRkZWQoZWwpIHtcbiAgICByZXR1cm4gL14tPzBcXGQvLnRlc3QoZWwpO1xufVxuZnVuY3Rpb24gbHRlKGksIHkpIHtcbiAgICByZXR1cm4gaSA8PSB5O1xufVxuZnVuY3Rpb24gZ3RlKGksIHkpIHtcbiAgICByZXR1cm4gaSA+PSB5O1xufVxuZnVuY3Rpb24gZXhwYW5kXyhzdHIsIG1heCwgaXNUb3ApIHtcbiAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgIGNvbnN0IGV4cGFuc2lvbnMgPSBbXTtcbiAgICBjb25zdCBtID0gYmFsYW5jZWQoJ3snLCAnfScsIHN0cik7XG4gICAgaWYgKCFtKVxuICAgICAgICByZXR1cm4gW3N0cl07XG4gICAgLy8gbm8gbmVlZCB0byBleHBhbmQgcHJlLCBzaW5jZSBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIGZyZWUgb2YgYnJhY2Utc2V0c1xuICAgIGNvbnN0IHByZSA9IG0ucHJlO1xuICAgIGNvbnN0IHBvc3QgPSBtLnBvc3QubGVuZ3RoID8gZXhwYW5kXyhtLnBvc3QsIG1heCwgZmFsc2UpIDogWycnXTtcbiAgICBpZiAoL1xcJCQvLnRlc3QobS5wcmUpKSB7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcG9zdC5sZW5ndGggJiYgayA8IG1heDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbnNpb24gPSBwcmUgKyAneycgKyBtLmJvZHkgKyAnfScgKyBwb3N0W2tdO1xuICAgICAgICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGlzTnVtZXJpY1NlcXVlbmNlID0gL14tP1xcZCtcXC5cXC4tP1xcZCsoPzpcXC5cXC4tP1xcZCspPyQvLnRlc3QobS5ib2R5KTtcbiAgICAgICAgY29uc3QgaXNBbHBoYVNlcXVlbmNlID0gL15bYS16QS1aXVxcLlxcLlthLXpBLVpdKD86XFwuXFwuLT9cXGQrKT8kLy50ZXN0KG0uYm9keSk7XG4gICAgICAgIGNvbnN0IGlzU2VxdWVuY2UgPSBpc051bWVyaWNTZXF1ZW5jZSB8fCBpc0FscGhhU2VxdWVuY2U7XG4gICAgICAgIGNvbnN0IGlzT3B0aW9ucyA9IG0uYm9keS5pbmRleE9mKCcsJykgPj0gMDtcbiAgICAgICAgaWYgKCFpc1NlcXVlbmNlICYmICFpc09wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIHthfSxifVxuICAgICAgICAgICAgaWYgKG0ucG9zdC5tYXRjaCgvLCg/ISwpLipcXH0vKSkge1xuICAgICAgICAgICAgICAgIHN0ciA9IG0ucHJlICsgJ3snICsgbS5ib2R5ICsgZXNjQ2xvc2UgKyBtLnBvc3Q7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGFuZF8oc3RyLCBtYXgsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtzdHJdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuO1xuICAgICAgICBpZiAoaXNTZXF1ZW5jZSkge1xuICAgICAgICAgICAgbiA9IG0uYm9keS5zcGxpdCgvXFwuXFwuLyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuID0gcGFyc2VDb21tYVBhcnRzKG0uYm9keSk7XG4gICAgICAgICAgICBpZiAobi5sZW5ndGggPT09IDEgJiYgblswXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8geHt7YSxifX15ID09PiB4e2F9eSB4e2J9eVxuICAgICAgICAgICAgICAgIG4gPSBleHBhbmRfKG5bMF0sIG1heCwgZmFsc2UpLm1hcChlbWJyYWNlKTtcbiAgICAgICAgICAgICAgICAvL1hYWCBpcyB0aGlzIG5lY2Vzc2FyeT8gQ2FuJ3Qgc2VlbSB0byBoaXQgaXQgaW4gdGVzdHMuXG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKG4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3N0Lm1hcChwID0+IG0ucHJlICsgblswXSArIHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIG4gaXMgdGhlIHBhcnRzLCBhbmQgd2Uga25vdyBpdCdzIG5vdCBhIGNvbW1hIHNldFxuICAgICAgICAvLyB3aXRoIGEgc2luZ2xlIGVudHJ5LlxuICAgICAgICBsZXQgTjtcbiAgICAgICAgaWYgKGlzU2VxdWVuY2UgJiYgblswXSAhPT0gdW5kZWZpbmVkICYmIG5bMV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgeCA9IG51bWVyaWMoblswXSk7XG4gICAgICAgICAgICBjb25zdCB5ID0gbnVtZXJpYyhuWzFdKTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoblswXS5sZW5ndGgsIG5bMV0ubGVuZ3RoKTtcbiAgICAgICAgICAgIGxldCBpbmNyID0gbi5sZW5ndGggPT09IDMgJiYgblsyXSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICBNYXRoLm1heChNYXRoLmFicyhudW1lcmljKG5bMl0pKSwgMSlcbiAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBsZXQgdGVzdCA9IGx0ZTtcbiAgICAgICAgICAgIGNvbnN0IHJldmVyc2UgPSB5IDwgeDtcbiAgICAgICAgICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgICAgICAgICAgaW5jciAqPSAtMTtcbiAgICAgICAgICAgICAgICB0ZXN0ID0gZ3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFkID0gbi5zb21lKGlzUGFkZGVkKTtcbiAgICAgICAgICAgIE4gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB4OyB0ZXN0KGksIHkpICYmIE4ubGVuZ3RoIDwgbWF4OyBpICs9IGluY3IpIHtcbiAgICAgICAgICAgICAgICBsZXQgYztcbiAgICAgICAgICAgICAgICBpZiAoaXNBbHBoYVNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBTdHJpbmcoaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWQgPSB3aWR0aCAtIGMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeiA9IG5ldyBBcnJheShuZWVkICsgMSkuam9pbignMCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gJy0nICsgeiArIGMuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0geiArIGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE4ucHVzaChjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIE4gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIE4ucHVzaC5hcHBseShOLCBleHBhbmRfKG5bal0sIG1heCwgZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IE4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcG9zdC5sZW5ndGggJiYgZXhwYW5zaW9ucy5sZW5ndGggPCBtYXg7IGsrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvbiA9IHByZSArIE5bal0gKyBwb3N0W2tdO1xuICAgICAgICAgICAgICAgIGlmICghaXNUb3AgfHwgaXNTZXF1ZW5jZSB8fCBleHBhbnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHBhbnNpb25zO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJjb25zdCBNQVhfUEFUVEVSTl9MRU5HVEggPSAxMDI0ICogNjQ7XG5leHBvcnQgY29uc3QgYXNzZXJ0VmFsaWRQYXR0ZXJuID0gKHBhdHRlcm4pID0+IHtcbiAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGF0dGVybicpO1xuICAgIH1cbiAgICBpZiAocGF0dGVybi5sZW5ndGggPiBNQVhfUEFUVEVSTl9MRU5HVEgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGF0dGVybiBpcyB0b28gbG9uZycpO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3NlcnQtdmFsaWQtcGF0dGVybi5qcy5tYXAiLAogICAgIi8vIHRyYW5zbGF0ZSB0aGUgdmFyaW91cyBwb3NpeCBjaGFyYWN0ZXIgY2xhc3NlcyBpbnRvIHVuaWNvZGUgcHJvcGVydGllc1xuLy8gdGhpcyB3b3JrcyBhY3Jvc3MgYWxsIHVuaWNvZGUgbG9jYWxlc1xuLy8geyA8cG9zaXggY2xhc3M+OiBbPHRyYW5zbGF0aW9uPiwgL3UgZmxhZyByZXF1aXJlZCwgbmVnYXRlZF1cbmNvbnN0IHBvc2l4Q2xhc3NlcyA9IHtcbiAgICAnWzphbG51bTpdJzogWydcXFxccHtMfVxcXFxwe05sfVxcXFxwe05kfScsIHRydWVdLFxuICAgICdbOmFscGhhOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9JywgdHJ1ZV0sXG4gICAgJ1s6YXNjaWk6XSc6IFsnXFxcXHgnICsgJzAwLVxcXFx4JyArICc3ZicsIGZhbHNlXSxcbiAgICAnWzpibGFuazpdJzogWydcXFxccHtac31cXFxcdCcsIHRydWVdLFxuICAgICdbOmNudHJsOl0nOiBbJ1xcXFxwe0NjfScsIHRydWVdLFxuICAgICdbOmRpZ2l0Ol0nOiBbJ1xcXFxwe05kfScsIHRydWVdLFxuICAgICdbOmdyYXBoOl0nOiBbJ1xcXFxwe1p9XFxcXHB7Q30nLCB0cnVlLCB0cnVlXSxcbiAgICAnWzpsb3dlcjpdJzogWydcXFxccHtMbH0nLCB0cnVlXSxcbiAgICAnWzpwcmludDpdJzogWydcXFxccHtDfScsIHRydWVdLFxuICAgICdbOnB1bmN0Ol0nOiBbJ1xcXFxwe1B9JywgdHJ1ZV0sXG4gICAgJ1s6c3BhY2U6XSc6IFsnXFxcXHB7Wn1cXFxcdFxcXFxyXFxcXG5cXFxcdlxcXFxmJywgdHJ1ZV0sXG4gICAgJ1s6dXBwZXI6XSc6IFsnXFxcXHB7THV9JywgdHJ1ZV0sXG4gICAgJ1s6d29yZDpdJzogWydcXFxccHtMfVxcXFxwe05sfVxcXFxwe05kfVxcXFxwe1BjfScsIHRydWVdLFxuICAgICdbOnhkaWdpdDpdJzogWydBLUZhLWYwLTknLCBmYWxzZV0sXG59O1xuLy8gb25seSBuZWVkIHRvIGVzY2FwZSBhIGZldyB0aGluZ3MgaW5zaWRlIG9mIGJyYWNlIGV4cHJlc3Npb25zXG4vLyBlc2NhcGVzOiBbIFxcIF0gLVxuY29uc3QgYnJhY2VFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bW1xcXVxcXFwtXS9nLCAnXFxcXCQmJyk7XG4vLyBlc2NhcGUgYWxsIHJlZ2V4cCBtYWdpYyBjaGFyYWN0ZXJzXG5jb25zdCByZWdleHBFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xuLy8gZXZlcnl0aGluZyBoYXMgYWxyZWFkeSBiZWVuIGVzY2FwZWQsIHdlIGp1c3QgaGF2ZSB0byBqb2luXG5jb25zdCByYW5nZXNUb1N0cmluZyA9IChyYW5nZXMpID0+IHJhbmdlcy5qb2luKCcnKTtcbi8vIHRha2VzIGEgZ2xvYiBzdHJpbmcgYXQgYSBwb3NpeCBicmFjZSBleHByZXNzaW9uLCBhbmQgcmV0dXJuc1xuLy8gYW4gZXF1aXZhbGVudCByZWd1bGFyIGV4cHJlc3Npb24gc291cmNlLCBhbmQgYm9vbGVhbiBpbmRpY2F0aW5nXG4vLyB3aGV0aGVyIHRoZSAvdSBmbGFnIG5lZWRzIHRvIGJlIGFwcGxpZWQsIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJzXG4vLyBjb25zdW1lZCB0byBwYXJzZSB0aGUgY2hhcmFjdGVyIGNsYXNzLlxuLy8gVGhpcyBhbHNvIHJlbW92ZXMgb3V0IG9mIG9yZGVyIHJhbmdlcywgYW5kIHJldHVybnMgKCQuKSBpZiB0aGVcbi8vIGVudGlyZSBjbGFzcyBqdXN0IG5vIGdvb2QuXG5leHBvcnQgY29uc3QgcGFyc2VDbGFzcyA9IChnbG9iLCBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IHBvcyA9IHBvc2l0aW9uO1xuICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgIGlmIChnbG9iLmNoYXJBdChwb3MpICE9PSAnWycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW4gYSBicmFjZSBleHByZXNzaW9uJyk7XG4gICAgfVxuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgY29uc3QgcmFuZ2VzID0gW107XG4gICAgY29uc3QgbmVncyA9IFtdO1xuICAgIGxldCBpID0gcG9zICsgMTtcbiAgICBsZXQgc2F3U3RhcnQgPSBmYWxzZTtcbiAgICBsZXQgdWZsYWcgPSBmYWxzZTtcbiAgICBsZXQgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICBsZXQgbmVnYXRlID0gZmFsc2U7XG4gICAgbGV0IGVuZFBvcyA9IHBvcztcbiAgICBsZXQgcmFuZ2VTdGFydCA9ICcnO1xuICAgIFdISUxFOiB3aGlsZSAoaSA8IGdsb2IubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGMgPSBnbG9iLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKChjID09PSAnIScgfHwgYyA9PT0gJ14nKSAmJiBpID09PSBwb3MgKyAxKSB7XG4gICAgICAgICAgICBuZWdhdGUgPSB0cnVlO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICddJyAmJiBzYXdTdGFydCAmJiAhZXNjYXBpbmcpIHtcbiAgICAgICAgICAgIGVuZFBvcyA9IGkgKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc2F3U3RhcnQgPSB0cnVlO1xuICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBpZiAoIWVzY2FwaW5nKSB7XG4gICAgICAgICAgICAgICAgZXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVzY2FwZWQgXFwgY2hhciwgZmFsbCB0aHJvdWdoIGFuZCB0cmVhdCBsaWtlIG5vcm1hbCBjaGFyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICdbJyAmJiAhZXNjYXBpbmcpIHtcbiAgICAgICAgICAgIC8vIGVpdGhlciBhIHBvc2l4IGNsYXNzLCBhIGNvbGxhdGlvbiBlcXVpdmFsZW50LCBvciBqdXN0IGEgW1xuICAgICAgICAgICAgZm9yIChjb25zdCBbY2xzLCBbdW5pcCwgdSwgbmVnXV0gb2YgT2JqZWN0LmVudHJpZXMocG9zaXhDbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIGlmIChnbG9iLnN0YXJ0c1dpdGgoY2xzLCBpKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkLCBbYS1bXSBpcyBmaW5lLCBidXQgbm90IFthLVs6YWxwaGFdXVxuICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnJC4nLCBmYWxzZSwgZ2xvYi5sZW5ndGggLSBwb3MsIHRydWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gY2xzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5lZylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZ3MucHVzaCh1bmlwKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2godW5pcCk7XG4gICAgICAgICAgICAgICAgICAgIHVmbGFnID0gdWZsYWcgfHwgdTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWUgV0hJTEU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyBpdCdzIGp1c3QgYSBub3JtYWwgY2hhcmFjdGVyLCBlZmZlY3RpdmVseVxuICAgICAgICBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAocmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgLy8gdGhyb3cgdGhpcyByYW5nZSBhd2F5IGlmIGl0J3Mgbm90IHZhbGlkLCBidXQgb3RoZXJzXG4gICAgICAgICAgICAvLyBjYW4gc3RpbGwgbWF0Y2guXG4gICAgICAgICAgICBpZiAoYyA+IHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICByYW5nZXMucHVzaChicmFjZUVzY2FwZShyYW5nZVN0YXJ0KSArICctJyArIGJyYWNlRXNjYXBlKGMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09IHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICByYW5nZXMucHVzaChicmFjZUVzY2FwZShjKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZVN0YXJ0ID0gJyc7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgbWlnaHQgYmUgdGhlIHN0YXJ0IG9mIGEgcmFuZ2UuXG4gICAgICAgIC8vIGNhbiBiZSBlaXRoZXIgYy1kIG9yIGMtXSBvciBjPG1vcmUuLi4+XSBvciBjXSBhdCB0aGlzIHBvaW50XG4gICAgICAgIGlmIChnbG9iLnN0YXJ0c1dpdGgoJy1dJywgaSArIDEpKSB7XG4gICAgICAgICAgICByYW5nZXMucHVzaChicmFjZUVzY2FwZShjICsgJy0nKSk7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2xvYi5zdGFydHNXaXRoKCctJywgaSArIDEpKSB7XG4gICAgICAgICAgICByYW5nZVN0YXJ0ID0gYztcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB0aGUgc3RhcnQgb2YgYSByYW5nZSwganVzdCBhIHNpbmdsZSBjaGFyYWN0ZXJcbiAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUoYykpO1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIGlmIChlbmRQb3MgPCBpKSB7XG4gICAgICAgIC8vIGRpZG4ndCBzZWUgdGhlIGVuZCBvZiB0aGUgY2xhc3MsIG5vdCBhIHZhbGlkIGNsYXNzLFxuICAgICAgICAvLyBidXQgbWlnaHQgc3RpbGwgYmUgdmFsaWQgYXMgYSBsaXRlcmFsIG1hdGNoLlxuICAgICAgICByZXR1cm4gWycnLCBmYWxzZSwgMCwgZmFsc2VdO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBnb3Qgbm8gcmFuZ2VzIGFuZCBubyBuZWdhdGVzLCB0aGVuIHdlIGhhdmUgYSByYW5nZSB0aGF0XG4gICAgLy8gY2Fubm90IHBvc3NpYmx5IG1hdGNoIGFueXRoaW5nLCBhbmQgdGhhdCBwb2lzb25zIHRoZSB3aG9sZSBnbG9iXG4gICAgaWYgKCFyYW5nZXMubGVuZ3RoICYmICFuZWdzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gWyckLicsIGZhbHNlLCBnbG9iLmxlbmd0aCAtIHBvcywgdHJ1ZV07XG4gICAgfVxuICAgIC8vIGlmIHdlIGdvdCBvbmUgcG9zaXRpdmUgcmFuZ2UsIGFuZCBpdCdzIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlbiB0aGF0J3NcbiAgICAvLyBub3QgYWN0dWFsbHkgYSBtYWdpYyBwYXR0ZXJuLCBpdCdzIGp1c3QgdGhhdCBvbmUgbGl0ZXJhbCBjaGFyYWN0ZXIuXG4gICAgLy8gd2Ugc2hvdWxkIG5vdCB0cmVhdCB0aGF0IGFzIFwibWFnaWNcIiwgd2Ugc2hvdWxkIGp1c3QgcmV0dXJuIHRoZSBsaXRlcmFsXG4gICAgLy8gY2hhcmFjdGVyLiBbX10gaXMgYSBwZXJmZWN0bHkgdmFsaWQgd2F5IHRvIGVzY2FwZSBnbG9iIG1hZ2ljIGNoYXJzLlxuICAgIGlmIChuZWdzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICByYW5nZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIC9eXFxcXD8uJC8udGVzdChyYW5nZXNbMF0pICYmXG4gICAgICAgICFuZWdhdGUpIHtcbiAgICAgICAgY29uc3QgciA9IHJhbmdlc1swXS5sZW5ndGggPT09IDIgPyByYW5nZXNbMF0uc2xpY2UoLTEpIDogcmFuZ2VzWzBdO1xuICAgICAgICByZXR1cm4gW3JlZ2V4cEVzY2FwZShyKSwgZmFsc2UsIGVuZFBvcyAtIHBvcywgZmFsc2VdO1xuICAgIH1cbiAgICBjb25zdCBzcmFuZ2VzID0gJ1snICsgKG5lZ2F0ZSA/ICdeJyA6ICcnKSArIHJhbmdlc1RvU3RyaW5nKHJhbmdlcykgKyAnXSc7XG4gICAgY29uc3Qgc25lZ3MgPSAnWycgKyAobmVnYXRlID8gJycgOiAnXicpICsgcmFuZ2VzVG9TdHJpbmcobmVncykgKyAnXSc7XG4gICAgY29uc3QgY29tYiA9IHJhbmdlcy5sZW5ndGggJiYgbmVncy5sZW5ndGggPyAnKCcgKyBzcmFuZ2VzICsgJ3wnICsgc25lZ3MgKyAnKSdcbiAgICAgICAgOiByYW5nZXMubGVuZ3RoID8gc3Jhbmdlc1xuICAgICAgICAgICAgOiBzbmVncztcbiAgICByZXR1cm4gW2NvbWIsIHVmbGFnLCBlbmRQb3MgLSBwb3MsIHRydWVdO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyYWNlLWV4cHJlc3Npb25zLmpzLm1hcCIsCiAgICAiLyoqXG4gKiBVbi1lc2NhcGUgYSBzdHJpbmcgdGhhdCBoYXMgYmVlbiBlc2NhcGVkIHdpdGgge0BsaW5rIGVzY2FwZX0uXG4gKlxuICogSWYgdGhlIHtAbGluayBNaW5pbWF0Y2hPcHRpb25zLndpbmRvd3NQYXRoc05vRXNjYXBlfSBvcHRpb24gaXMgdXNlZCwgdGhlblxuICogc3F1YXJlLWJyYWNrZXQgZXNjYXBlcyBhcmUgcmVtb3ZlZCwgYnV0IG5vdCBiYWNrc2xhc2ggZXNjYXBlcy5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaXQgd2lsbCB0dXJuIHRoZSBzdHJpbmcgYCdbKl0nYCBpbnRvIGAqYCwgYnV0IGl0IHdpbGwgbm90XG4gKiB0dXJuIGAnXFxcXConYCBpbnRvIGAnKidgLCBiZWNhdXNlIGBcXGAgaXMgYSBwYXRoIHNlcGFyYXRvciBpblxuICogYHdpbmRvd3NQYXRoc05vRXNjYXBlYCBtb2RlLlxuICpcbiAqIFdoZW4gYHdpbmRvd3NQYXRoc05vRXNjYXBlYCBpcyBub3Qgc2V0LCB0aGVuIGJvdGggc3F1YXJlLWJyYWNrZXQgZXNjYXBlcyBhbmRcbiAqIGJhY2tzbGFzaCBlc2NhcGVzIGFyZSByZW1vdmVkLlxuICpcbiAqIFNsYXNoZXMgKGFuZCBiYWNrc2xhc2hlcyBpbiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIG1vZGUpIGNhbm5vdCBiZSBlc2NhcGVkXG4gKiBvciB1bmVzY2FwZWQuXG4gKlxuICogV2hlbiBgbWFnaWNhbEJyYWNlc2AgaXMgbm90IHNldCwgZXNjYXBlcyBvZiBicmFjZXMgKGB7YCBhbmQgYH1gKSB3aWxsIG5vdCBiZVxuICogdW5lc2NhcGVkLlxuICovXG5leHBvcnQgY29uc3QgdW5lc2NhcGUgPSAocywgeyB3aW5kb3dzUGF0aHNOb0VzY2FwZSA9IGZhbHNlLCBtYWdpY2FsQnJhY2VzID0gdHJ1ZSwgfSA9IHt9KSA9PiB7XG4gICAgaWYgKG1hZ2ljYWxCcmFjZXMpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvd3NQYXRoc05vRXNjYXBlID9cbiAgICAgICAgICAgIHMucmVwbGFjZSgvXFxbKFteL1xcXFxdKVxcXS9nLCAnJDEnKVxuICAgICAgICAgICAgOiBzXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLygoPyFcXFxcKS58XilcXFsoW14vXFxcXF0pXFxdL2csICckMSQyJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXChbXi9dKS9nLCAnJDEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbmRvd3NQYXRoc05vRXNjYXBlID9cbiAgICAgICAgcy5yZXBsYWNlKC9cXFsoW14vXFxcXHt9XSlcXF0vZywgJyQxJylcbiAgICAgICAgOiBzXG4gICAgICAgICAgICAucmVwbGFjZSgvKCg/IVxcXFwpLnxeKVxcWyhbXi9cXFxce31dKVxcXS9nLCAnJDEkMicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxcXChbXi97fV0pL2csICckMScpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuZXNjYXBlLmpzLm1hcCIsCiAgICAiLy8gcGFyc2UgYSBzaW5nbGUgcGF0aCBwb3J0aW9uXG52YXIgX2E7XG5pbXBvcnQgeyBwYXJzZUNsYXNzIH0gZnJvbSAnLi9icmFjZS1leHByZXNzaW9ucy5qcyc7XG5pbXBvcnQgeyB1bmVzY2FwZSB9IGZyb20gJy4vdW5lc2NhcGUuanMnO1xuY29uc3QgdHlwZXMgPSBuZXcgU2V0KFsnIScsICc/JywgJysnLCAnKicsICdAJ10pO1xuY29uc3QgaXNFeHRnbG9iVHlwZSA9IChjKSA9PiB0eXBlcy5oYXMoYyk7XG5jb25zdCBpc0V4dGdsb2JBU1QgPSAoYykgPT4gaXNFeHRnbG9iVHlwZShjLnR5cGUpO1xuLy8gTWFwIG9mIHdoaWNoIGV4dGdsb2IgdHlwZXMgY2FuIGFkb3B0IHRoZSBjaGlsZHJlbiBvZiBhIG5lc3RlZCBleHRnbG9iXG4vL1xuLy8gYW55dGhpbmcgYnV0ICEgY2FuIGFkb3B0IGEgbWF0Y2hpbmcgdHlwZTpcbi8vICsoYXwrKGJ8Yyl8ZCkgPT4gKyhhfGJ8Y3xkKVxuLy8gKihhfCooYnxjKXxkKSA9PiAqKGF8YnxjfGQpXG4vLyBAKGF8QChifGMpfGQpID0+IEAoYXxifGN8ZClcbi8vID8oYXw/KGJ8Yyl8ZCkgPT4gPyhhfGJ8Y3xkKVxuLy9cbi8vICogY2FuIGFkb3B0IGFueXRoaW5nLCBiZWNhdXNlIDAgb3IgcmVwZXRpdGlvbiBpcyBhbGxvd2VkXG4vLyAqKGF8PyhifGMpfGQpID0+ICooYXxifGN8ZClcbi8vICooYXwrKGJ8Yyl8ZCkgPT4gKihhfGJ8Y3xkKVxuLy8gKihhfEAoYnxjKXxkKSA9PiAqKGF8YnxjfGQpXG4vL1xuLy8gKyBjYW4gYWRvcHQgQCwgYmVjYXVzZSAxIG9yIHJlcGV0aXRpb24gaXMgYWxsb3dlZFxuLy8gKyhhfEAoYnxjKXxkKSA9PiArKGF8YnxjfGQpXG4vL1xuLy8gKyBhbmQgQCBDQU5OT1QgYWRvcHQgKiwgYmVjYXVzZSAwIHdvdWxkIGJlIGFsbG93ZWRcbi8vICsoYXwqKGJ8Yyl8ZCkgPT4gd291bGQgbWF0Y2ggXCJcIiwgb24gKihifGMpXG4vLyBAKGF8KihifGMpfGQpID0+IHdvdWxkIG1hdGNoIFwiXCIsIG9uICooYnxjKVxuLy9cbi8vICsgYW5kIEAgQ0FOTk9UIGFkb3B0ID8sIGJlY2F1c2UgMCB3b3VsZCBiZSBhbGxvd2VkXG4vLyArKGF8PyhifGMpfGQpID0+IHdvdWxkIG1hdGNoIFwiXCIsIG9uID8oYnxjKVxuLy8gQChhfD8oYnxjKXxkKSA9PiB3b3VsZCBtYXRjaCBcIlwiLCBvbiA/KGJ8Yylcbi8vXG4vLyA/IGNhbiBhZG9wdCBALCBiZWNhdXNlIDAgb3IgMSBpcyBhbGxvd2VkXG4vLyA/KGF8QChifGMpfGQpID0+ID8oYXxifGN8ZClcbi8vXG4vLyA/IGFuZCBAIENBTk5PVCBhZG9wdCAqIG9yICssIGJlY2F1c2UgPjEgd291bGQgYmUgYWxsb3dlZFxuLy8gPyhhfCooYnxjKXxkKSA9PiB3b3VsZCBtYXRjaCBiYmIgb24gKihifGMpXG4vLyBAKGF8KihifGMpfGQpID0+IHdvdWxkIG1hdGNoIGJiYiBvbiAqKGJ8Yylcbi8vID8oYXwrKGJ8Yyl8ZCkgPT4gd291bGQgbWF0Y2ggYmJiIG9uICsoYnxjKVxuLy8gQChhfCsoYnxjKXxkKSA9PiB3b3VsZCBtYXRjaCBiYmIgb24gKyhifGMpXG4vL1xuLy8gISBDQU5OT1QgYWRvcHQgISAobm90aGluZyBlbHNlIGNhbiBlaXRoZXIpXG4vLyAhKGF8IShifGMpfGQpID0+ICEoYXxifGN8ZCkgd291bGQgZmFpbCB0byBtYXRjaCBvbiBiIChub3Qgbm90IGJ8Yylcbi8vXG4vLyAhIGNhbiBhZG9wdCBAXG4vLyAhKGF8QChifGMpfGQpID0+ICEoYXxifGN8ZClcbi8vXG4vLyAhIENBTk5PVCBhZG9wdCAqXG4vLyAhKGF8KihifGMpfGQpID0+ICEoYXxifGN8ZCkgd291bGQgbWF0Y2ggb24gYmJiLCBub3QgYWxsb3dlZFxuLy9cbi8vICEgQ0FOTk9UIGFkb3B0ICtcbi8vICEoYXwrKGJ8Yyl8ZCkgPT4gIShhfGJ8Y3xkKSB3b3VsZCBtYXRjaCBvbiBiYmIsIG5vdCBhbGxvd2VkXG4vL1xuLy8gISBDQU5OT1QgYWRvcHQgP1xuLy8geCEoYXw/KGJ8Yyl8ZCkgPT4geCEoYXxifGN8ZCkgd291bGQgZmFpbCB0byBtYXRjaCBcInhcIlxuY29uc3QgYWRvcHRpb25NYXAgPSBuZXcgTWFwKFtcbiAgICBbJyEnLCBbJ0AnXV0sXG4gICAgWyc/JywgWyc/JywgJ0AnXV0sXG4gICAgWydAJywgWydAJ11dLFxuICAgIFsnKicsIFsnKicsICcrJywgJz8nLCAnQCddXSxcbiAgICBbJysnLCBbJysnLCAnQCddXSxcbl0pO1xuLy8gbmVzdGVkIGV4dGdsb2JzIHRoYXQgY2FuIGJlIGFkb3B0ZWQgaW4sIGJ1dCB3aXRoIHRoZSBhZGRpdGlvbiBvZlxuLy8gYSBibGFuayAnJyBlbGVtZW50LlxuY29uc3QgYWRvcHRpb25XaXRoU3BhY2VNYXAgPSBuZXcgTWFwKFtcbiAgICBbJyEnLCBbJz8nXV0sXG4gICAgWydAJywgWyc/J11dLFxuICAgIFsnKycsIFsnPycsICcqJ11dLFxuXSk7XG4vLyB1bmlvbiBvZiB0aGUgcHJldmlvdXMgdHdvIG1hcHNcbmNvbnN0IGFkb3B0aW9uQW55TWFwID0gbmV3IE1hcChbXG4gICAgWychJywgWyc/JywgJ0AnXV0sXG4gICAgWyc/JywgWyc/JywgJ0AnXV0sXG4gICAgWydAJywgWyc/JywgJ0AnXV0sXG4gICAgWycqJywgWycqJywgJysnLCAnPycsICdAJ11dLFxuICAgIFsnKycsIFsnKycsICdAJywgJz8nLCAnKiddXSxcbl0pO1xuLy8gRXh0Z2xvYnMgdGhhdCBjYW4gdGFrZSBvdmVyIHRoZWlyIHBhcmVudCBpZiB0aGV5IGFyZSB0aGUgb25seSBjaGlsZFxuLy8gdGhlIGtleSBpcyBwYXJlbnQsIHZhbHVlIG1hcHMgY2hpbGQgdG8gcmVzdWx0aW5nIGV4dGdsb2IgcGFyZW50IHR5cGVcbi8vICdAJyBpcyBvbWl0dGVkIGJlY2F1c2UgaXQncyBhIHNwZWNpYWwgY2FzZS4gQW4gYEBgIGV4dGdsb2Igd2l0aCBhIHNpbmdsZVxuLy8gbWVtYmVyIGNhbiBhbHdheXMgYmUgdXN1cnBlZCBieSB0aGF0IHN1YnBhdHRlcm4uXG5jb25zdCB1c3VycE1hcCA9IG5ldyBNYXAoW1xuICAgIFsnIScsIG5ldyBNYXAoW1snIScsICdAJ11dKV0sXG4gICAgW1xuICAgICAgICAnPycsXG4gICAgICAgIG5ldyBNYXAoW1xuICAgICAgICAgICAgWycqJywgJyonXSxcbiAgICAgICAgICAgIFsnKycsICcqJ10sXG4gICAgICAgIF0pLFxuICAgIF0sXG4gICAgW1xuICAgICAgICAnQCcsXG4gICAgICAgIG5ldyBNYXAoW1xuICAgICAgICAgICAgWychJywgJyEnXSxcbiAgICAgICAgICAgIFsnPycsICc/J10sXG4gICAgICAgICAgICBbJ0AnLCAnQCddLFxuICAgICAgICAgICAgWycqJywgJyonXSxcbiAgICAgICAgICAgIFsnKycsICcrJ10sXG4gICAgICAgIF0pLFxuICAgIF0sXG4gICAgW1xuICAgICAgICAnKycsXG4gICAgICAgIG5ldyBNYXAoW1xuICAgICAgICAgICAgWyc/JywgJyonXSxcbiAgICAgICAgICAgIFsnKicsICcqJ10sXG4gICAgICAgIF0pLFxuICAgIF0sXG5dKTtcbi8vIFBhdHRlcm5zIHRoYXQgZ2V0IHByZXBlbmRlZCB0byBiaW5kIHRvIHRoZSBzdGFydCBvZiBlaXRoZXIgdGhlXG4vLyBlbnRpcmUgc3RyaW5nLCBvciBqdXN0IGEgc2luZ2xlIHBhdGggcG9ydGlvbiwgdG8gcHJldmVudCBkb3RzXG4vLyBhbmQvb3IgdHJhdmVyc2FsIHBhdHRlcm5zLCB3aGVuIG5lZWRlZC5cbi8vIEV4dHMgZG9uJ3QgbmVlZCB0aGUgXiBvciAvIGJpdCwgYmVjYXVzZSB0aGUgcm9vdCBiaW5kcyB0aGF0IGFscmVhZHkuXG5jb25zdCBzdGFydE5vVHJhdmVyc2FsID0gJyg/ISg/Ol58LylcXFxcLlxcXFwuPyg/OiR8LykpJztcbmNvbnN0IHN0YXJ0Tm9Eb3QgPSAnKD8hXFxcXC4pJztcbi8vIGNoYXJhY3RlcnMgdGhhdCBpbmRpY2F0ZSBhIHN0YXJ0IG9mIHBhdHRlcm4gbmVlZHMgdGhlIFwibm8gZG90c1wiIGJpdCxcbi8vIGJlY2F1c2UgYSBkb3QgKm1pZ2h0KiBiZSBtYXRjaGVkLiAoIGlzIG5vdCBpbiB0aGUgbGlzdCwgYmVjYXVzZSBpblxuLy8gdGhlIGNhc2Ugb2YgYSBjaGlsZCBleHRnbG9iLCBpdCB3aWxsIGhhbmRsZSB0aGUgcHJldmVudGlvbiBpdHNlbGYuXG5jb25zdCBhZGRQYXR0ZXJuU3RhcnQgPSBuZXcgU2V0KFsnWycsICcuJ10pO1xuLy8gY2FzZXMgd2hlcmUgdHJhdmVyc2FsIGlzIEEtT0ssIG5vIGRvdCBwcmV2ZW50aW9uIG5lZWRlZFxuY29uc3QganVzdERvdHMgPSBuZXcgU2V0KFsnLi4nLCAnLiddKTtcbmNvbnN0IHJlU3BlY2lhbHMgPSBuZXcgU2V0KCcoKS4qe30rP1tdXiRcXFxcIScpO1xuY29uc3QgcmVnRXhwRXNjYXBlID0gKHMpID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbi8vIGFueSBzaW5nbGUgdGhpbmcgb3RoZXIgdGhhbiAvXG5jb25zdCBxbWFyayA9ICdbXi9dJztcbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG5jb25zdCBzdGFyID0gcW1hcmsgKyAnKj8nO1xuLy8gdXNlICsgd2hlbiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0ICpzb21ldGhpbmcqIG1hdGNoZXMsIGJlY2F1c2UgdGhlICogaXNcbi8vIHRoZSBvbmx5IHRoaW5nIGluIHRoZSBwYXRoIHBvcnRpb24uXG5jb25zdCBzdGFyTm9FbXB0eSA9IHFtYXJrICsgJys/Jztcbi8vIHJlbW92ZSB0aGUgXFwgY2hhcnMgdGhhdCB3ZSBhZGRlZCBpZiB3ZSBlbmQgdXAgZG9pbmcgYSBub25tYWdpYyBjb21wYXJlXG4vLyBjb25zdCBkZXNsYXNoID0gKHM6IHN0cmluZykgPT4gcy5yZXBsYWNlKC9cXFxcKC4pL2csICckMScpXG5sZXQgSUQgPSAwO1xuZXhwb3J0IGNsYXNzIEFTVCB7XG4gICAgdHlwZTtcbiAgICAjcm9vdDtcbiAgICAjaGFzTWFnaWM7XG4gICAgI3VmbGFnID0gZmFsc2U7XG4gICAgI3BhcnRzID0gW107XG4gICAgI3BhcmVudDtcbiAgICAjcGFyZW50SW5kZXg7XG4gICAgI25lZ3M7XG4gICAgI2ZpbGxlZE5lZ3MgPSBmYWxzZTtcbiAgICAjb3B0aW9ucztcbiAgICAjdG9TdHJpbmc7XG4gICAgLy8gc2V0IHRvIHRydWUgaWYgaXQncyBhbiBleHRnbG9iIHdpdGggbm8gY2hpbGRyZW5cbiAgICAvLyAod2hpY2ggcmVhbGx5IG1lYW5zIG9uZSBjaGlsZCBvZiAnJylcbiAgICAjZW1wdHlFeHQgPSBmYWxzZTtcbiAgICBpZCA9ICsrSUQ7XG4gICAgZ2V0IGRlcHRoKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3BhcmVudD8uZGVwdGggPz8gLTEpICsgMTtcbiAgICB9XG4gICAgW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ0BAdHlwZSc6ICdBU1QnLFxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICByb290OiB0aGlzLiNyb290LmlkLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLiNwYXJlbnQ/LmlkLFxuICAgICAgICAgICAgZGVwdGg6IHRoaXMuZGVwdGgsXG4gICAgICAgICAgICBwYXJ0c0xlbmd0aDogdGhpcy4jcGFydHMubGVuZ3RoLFxuICAgICAgICAgICAgcGFydHM6IHRoaXMuI3BhcnRzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICAvLyBleHRnbG9icyBhcmUgaW5oZXJlbnRseSBtYWdpY2FsXG4gICAgICAgIGlmICh0eXBlKVxuICAgICAgICAgICAgdGhpcy4jaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICB0aGlzLiNwYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuI3Jvb3QgPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3Jvb3QgOiB0aGlzO1xuICAgICAgICB0aGlzLiNvcHRpb25zID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IG9wdGlvbnMgOiB0aGlzLiNyb290LiNvcHRpb25zO1xuICAgICAgICB0aGlzLiNuZWdzID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IFtdIDogdGhpcy4jcm9vdC4jbmVncztcbiAgICAgICAgaWYgKHR5cGUgPT09ICchJyAmJiAhdGhpcy4jcm9vdC4jZmlsbGVkTmVncylcbiAgICAgICAgICAgIHRoaXMuI25lZ3MucHVzaCh0aGlzKTtcbiAgICAgICAgdGhpcy4jcGFyZW50SW5kZXggPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3BhcnRzLmxlbmd0aCA6IDA7XG4gICAgfVxuICAgIGdldCBoYXNNYWdpYygpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLiNoYXNNYWdpYyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2hhc01hZ2ljO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAocC50eXBlIHx8IHAuaGFzTWFnaWMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNoYXNNYWdpYyA9IHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdGU6IHdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIHdlIGdlbmVyYXRlIHRoZSByZWdleHAgc3JjIGFuZCBmaW5kIG91dFxuICAgICAgICByZXR1cm4gdGhpcy4jaGFzTWFnaWM7XG4gICAgfVxuICAgIC8vIHJlY29uc3RydWN0cyB0aGUgcGF0dGVyblxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3RvU3RyaW5nICE9PSB1bmRlZmluZWQgPyB0aGlzLiN0b1N0cmluZ1xuICAgICAgICAgICAgOiAhdGhpcy50eXBlID9cbiAgICAgICAgICAgICAgICAodGhpcy4jdG9TdHJpbmcgPSB0aGlzLiNwYXJ0cy5tYXAocCA9PiBTdHJpbmcocCkpLmpvaW4oJycpKVxuICAgICAgICAgICAgICAgIDogKHRoaXMuI3RvU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcoJyArXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNwYXJ0cy5tYXAocCA9PiBTdHJpbmcocCkpLmpvaW4oJ3wnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKScpKTtcbiAgICB9XG4gICAgI2ZpbGxOZWdzKCkge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMgIT09IHRoaXMuI3Jvb3QpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBvbmx5IGNhbGwgb24gcm9vdCcpO1xuICAgICAgICBpZiAodGhpcy4jZmlsbGVkTmVncylcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAvLyBjYWxsIHRvU3RyaW5nKCkgb25jZSB0byBmaWxsIHRoaXMgb3V0XG4gICAgICAgIHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy4jZmlsbGVkTmVncyA9IHRydWU7XG4gICAgICAgIGxldCBuO1xuICAgICAgICB3aGlsZSAoKG4gPSB0aGlzLiNuZWdzLnBvcCgpKSkge1xuICAgICAgICAgICAgaWYgKG4udHlwZSAhPT0gJyEnKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgLy8gd2FsayB1cCB0aGUgdHJlZSwgYXBwZW5kaW5nIGV2ZXJ0aGluZyB0aGF0IGNvbWVzIEFGVEVSIHBhcmVudEluZGV4XG4gICAgICAgICAgICBsZXQgcCA9IG47XG4gICAgICAgICAgICBsZXQgcHAgPSBwLiNwYXJlbnQ7XG4gICAgICAgICAgICB3aGlsZSAocHApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcC4jcGFyZW50SW5kZXggKyAxOyAhcHAudHlwZSAmJiBpIDwgcHAuI3BhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBuLiNwYXJ0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgcGFydCBpbiBleHRnbG9iIEFTVD8/Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5jb3B5SW4ocHAuI3BhcnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwID0gcHA7XG4gICAgICAgICAgICAgICAgcHAgPSBwLiNwYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHB1c2goLi4ucGFydHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHBhcnRzKSB7XG4gICAgICAgICAgICBpZiAocCA9PT0gJycpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAhKHAgaW5zdGFuY2VvZiBfYSAmJiBwLiNwYXJlbnQgPT09IHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhcnQ6ICcgKyBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNwYXJ0cy5wdXNoKHApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy50eXBlID09PSBudWxsID9cbiAgICAgICAgICAgIHRoaXMuI3BhcnRzXG4gICAgICAgICAgICAgICAgLnNsaWNlKClcbiAgICAgICAgICAgICAgICAubWFwKHAgPT4gKHR5cGVvZiBwID09PSAnc3RyaW5nJyA/IHAgOiBwLnRvSlNPTigpKSlcbiAgICAgICAgICAgIDogW3RoaXMudHlwZSwgLi4udGhpcy4jcGFydHMubWFwKHAgPT4gcC50b0pTT04oKSldO1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkgJiYgIXRoaXMudHlwZSlcbiAgICAgICAgICAgIHJldC51bnNoaWZ0KFtdKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmQoKSAmJlxuICAgICAgICAgICAgKHRoaXMgPT09IHRoaXMuI3Jvb3QgfHxcbiAgICAgICAgICAgICAgICAodGhpcy4jcm9vdC4jZmlsbGVkTmVncyAmJiB0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJykpKSB7XG4gICAgICAgICAgICByZXQucHVzaCh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgaXNTdGFydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gaWYgKHRoaXMudHlwZSkgcmV0dXJuICEhdGhpcy4jcGFyZW50Py5pc1N0YXJ0KClcbiAgICAgICAgaWYgKCF0aGlzLiNwYXJlbnQ/LmlzU3RhcnQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuI3BhcmVudEluZGV4ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIGlmIGV2ZXJ5dGhpbmcgQUhFQUQgb2YgdGhpcyBpcyBhIG5lZ2F0aW9uLCB0aGVuIGl0J3Mgc3RpbGwgdGhlIFwic3RhcnRcIlxuICAgICAgICBjb25zdCBwID0gdGhpcy4jcGFyZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuI3BhcmVudEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBwID0gcC4jcGFydHNbaV07XG4gICAgICAgICAgICBpZiAoIShwcCBpbnN0YW5jZW9mIF9hICYmIHBwLnR5cGUgPT09ICchJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlzRW5kKCkge1xuICAgICAgICBpZiAodGhpcy4jcm9vdCA9PT0gdGhpcylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy4jcGFyZW50Py50eXBlID09PSAnIScpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLiNwYXJlbnQ/LmlzRW5kKCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy50eXBlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3BhcmVudD8uaXNFbmQoKTtcbiAgICAgICAgLy8gaWYgbm90IHJvb3QsIGl0J2xsIGFsd2F5cyBoYXZlIGEgcGFyZW50XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBjb25zdCBwbCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcGFydHMubGVuZ3RoIDogMDtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhcmVudEluZGV4ID09PSBwbCAtIDE7XG4gICAgfVxuICAgIGNvcHlJbihwYXJ0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICB0aGlzLnB1c2gocGFydCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucHVzaChwYXJ0LmNsb25lKHRoaXMpKTtcbiAgICB9XG4gICAgY2xvbmUocGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGMgPSBuZXcgX2EodGhpcy50eXBlLCBwYXJlbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGMuY29weUluKHApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlQVNUKHN0ciwgYXN0LCBwb3MsIG9wdCwgZXh0RGVwdGgpIHtcbiAgICAgICAgY29uc3QgbWF4RGVwdGggPSBvcHQubWF4RXh0Z2xvYlJlY3Vyc2lvbiA/PyAyO1xuICAgICAgICBsZXQgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgbGV0IGJyYWNlU3RhcnQgPSAtMTtcbiAgICAgICAgbGV0IGJyYWNlTmVnID0gZmFsc2U7XG4gICAgICAgIGlmIChhc3QudHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiBhIGV4dGdsb2IsIGFwcGVuZCB1bnRpbCB3ZSBmaW5kIGEgc3RhcnRcbiAgICAgICAgICAgIGxldCBpID0gcG9zO1xuICAgICAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICAgICAgd2hpbGUgKGkgPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSsrKTtcbiAgICAgICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0cyB0aGF0IGFyZSBlc2NhcGVkXG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwaW5nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5CcmFjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYnJhY2VTdGFydCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICddJyAmJiAhKGkgPT09IGJyYWNlU3RhcnQgKyAyICYmIGJyYWNlTmVnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGZvciBhZG9wdGlvbiBoZXJlLCBiZWNhdXNlIHRoYXQnc1xuICAgICAgICAgICAgICAgIC8vIGRvbmUgYXQgdGhlIG90aGVyIHJlY3Vyc2lvbiBwb2ludC5cbiAgICAgICAgICAgICAgICBjb25zdCBkb1JlY3Vyc2UgPSAhb3B0Lm5vZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgIGlzRXh0Z2xvYlR5cGUoYykgJiZcbiAgICAgICAgICAgICAgICAgICAgc3RyLmNoYXJBdChpKSA9PT0gJygnICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dERlcHRoIDw9IG1heERlcHRoO1xuICAgICAgICAgICAgICAgIGlmIChkb1JlY3Vyc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYXN0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICAgICAgYWNjID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dCA9IG5ldyBfYShjLCBhc3QpO1xuICAgICAgICAgICAgICAgICAgICBpID0gX2EuI3BhcnNlQVNUKHN0ciwgZXh0LCBpLCBvcHQsIGV4dERlcHRoICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGFzdC5wdXNoKGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzdC5wdXNoKGFjYyk7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzb21lIGtpbmQgb2YgZXh0Z2xvYiwgcG9zIGlzIGF0IHRoZSAoXG4gICAgICAgIC8vIGZpbmQgdGhlIG5leHQgfCBvciApXG4gICAgICAgIGxldCBpID0gcG9zICsgMTtcbiAgICAgICAgbGV0IHBhcnQgPSBuZXcgX2EobnVsbCwgYXN0KTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBzdHIuY2hhckF0KGkrKyk7XG4gICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgLy8gc3RhcnRzIHRoYXQgYXJlIGVzY2FwZWRcbiAgICAgICAgICAgIGlmIChlc2NhcGluZyB8fCBjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGJyYWNlU3RhcnQgKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ10nICYmICEoaSA9PT0gYnJhY2VTdGFydCArIDIgJiYgYnJhY2VOZWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBpbkJyYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICBicmFjZU5lZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZG9SZWN1cnNlID0gIW9wdC5ub2V4dCAmJlxuICAgICAgICAgICAgICAgIGlzRXh0Z2xvYlR5cGUoYykgJiZcbiAgICAgICAgICAgICAgICBzdHIuY2hhckF0KGkpID09PSAnKCcgJiZcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgLSB0aGUgbWF4RGVwdGggaXMgc3VmZmljaWVudCBoZXJlICovXG4gICAgICAgICAgICAgICAgKGV4dERlcHRoIDw9IG1heERlcHRoIHx8IChhc3QgJiYgYXN0LiNjYW5BZG9wdFR5cGUoYykpKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBpZiAoZG9SZWN1cnNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwdGhBZGQgPSBhc3QgJiYgYXN0LiNjYW5BZG9wdFR5cGUoYykgPyAwIDogMTtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBleHQgPSBuZXcgX2EoYywgcGFydCk7XG4gICAgICAgICAgICAgICAgcGFydC5wdXNoKGV4dCk7XG4gICAgICAgICAgICAgICAgaSA9IF9hLiNwYXJzZUFTVChzdHIsIGV4dCwgaSwgb3B0LCBleHREZXB0aCArIGRlcHRoQWRkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnfCcpIHtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIHBhcnQgPSBuZXcgX2EobnVsbCwgYXN0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWNjID09PSAnJyAmJiBhc3QuI3BhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhc3QuI2VtcHR5RXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFydC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgYWNjID0gJyc7XG4gICAgICAgICAgICAgICAgYXN0LnB1c2goLi4ucGFydHMsIHBhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdW5maW5pc2hlZCBleHRnbG9iXG4gICAgICAgIC8vIGlmIHdlIGdvdCBoZXJlLCBpdCB3YXMgYSBtYWxmb3JtZWQgZXh0Z2xvYiEgbm90IGFuIGV4dGdsb2IsIGJ1dFxuICAgICAgICAvLyBtYXliZSBzb21ldGhpbmcgZWxzZSBpbiB0aGVyZS5cbiAgICAgICAgYXN0LnR5cGUgPSBudWxsO1xuICAgICAgICBhc3QuI2hhc01hZ2ljID0gdW5kZWZpbmVkO1xuICAgICAgICBhc3QuI3BhcnRzID0gW3N0ci5zdWJzdHJpbmcocG9zIC0gMSldO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG4gICAgI2NhbkFkb3B0V2l0aFNwYWNlKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjYW5BZG9wdChjaGlsZCwgYWRvcHRpb25XaXRoU3BhY2VNYXApO1xuICAgIH1cbiAgICAjY2FuQWRvcHQoY2hpbGQsIG1hcCA9IGFkb3B0aW9uTWFwKSB7XG4gICAgICAgIGlmICghY2hpbGQgfHxcbiAgICAgICAgICAgIHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgIGNoaWxkLnR5cGUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIGNoaWxkLiNwYXJ0cy5sZW5ndGggIT09IDEgfHxcbiAgICAgICAgICAgIHRoaXMudHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdjID0gY2hpbGQuI3BhcnRzWzBdO1xuICAgICAgICBpZiAoIWdjIHx8IHR5cGVvZiBnYyAhPT0gJ29iamVjdCcgfHwgZ2MudHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiNjYW5BZG9wdFR5cGUoZ2MudHlwZSwgbWFwKTtcbiAgICB9XG4gICAgI2NhbkFkb3B0VHlwZShjLCBtYXAgPSBhZG9wdGlvbkFueU1hcCkge1xuICAgICAgICByZXR1cm4gISFtYXAuZ2V0KHRoaXMudHlwZSk/LmluY2x1ZGVzKGMpO1xuICAgIH1cbiAgICAjYWRvcHRXaXRoU3BhY2UoY2hpbGQsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGdjID0gY2hpbGQuI3BhcnRzWzBdO1xuICAgICAgICBjb25zdCBibGFuayA9IG5ldyBfYShudWxsLCBnYywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgYmxhbmsuI3BhcnRzLnB1c2goJycpO1xuICAgICAgICBnYy5wdXNoKGJsYW5rKTtcbiAgICAgICAgdGhpcy4jYWRvcHQoY2hpbGQsIGluZGV4KTtcbiAgICB9XG4gICAgI2Fkb3B0KGNoaWxkLCBpbmRleCkge1xuICAgICAgICBjb25zdCBnYyA9IGNoaWxkLiNwYXJ0c1swXTtcbiAgICAgICAgdGhpcy4jcGFydHMuc3BsaWNlKGluZGV4LCAxLCAuLi5nYy4jcGFydHMpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgZ2MuI3BhcnRzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIHAuI3BhcmVudCA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jdG9TdHJpbmcgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgICNjYW5Vc3VycFR5cGUoYykge1xuICAgICAgICBjb25zdCBtID0gdXN1cnBNYXAuZ2V0KHRoaXMudHlwZSk7XG4gICAgICAgIHJldHVybiAhIW0/LmhhcyhjKTtcbiAgICB9XG4gICAgI2NhblVzdXJwKGNoaWxkKSB7XG4gICAgICAgIGlmICghY2hpbGQgfHxcbiAgICAgICAgICAgIHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgIGNoaWxkLnR5cGUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIGNoaWxkLiNwYXJ0cy5sZW5ndGggIT09IDEgfHxcbiAgICAgICAgICAgIHRoaXMudHlwZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgdGhpcy4jcGFydHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2MgPSBjaGlsZC4jcGFydHNbMF07XG4gICAgICAgIGlmICghZ2MgfHwgdHlwZW9mIGdjICE9PSAnb2JqZWN0JyB8fCBnYy50eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhblVzdXJwVHlwZShnYy50eXBlKTtcbiAgICB9XG4gICAgI3VzdXJwKGNoaWxkKSB7XG4gICAgICAgIGNvbnN0IG0gPSB1c3VycE1hcC5nZXQodGhpcy50eXBlKTtcbiAgICAgICAgY29uc3QgZ2MgPSBjaGlsZC4jcGFydHNbMF07XG4gICAgICAgIGNvbnN0IG50ID0gbT8uZ2V0KGdjLnR5cGUpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgLSBpbXBvc3NpYmxlICovXG4gICAgICAgIGlmICghbnQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMuI3BhcnRzID0gZ2MuI3BhcnRzO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBwLiNwYXJlbnQgPSB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudHlwZSA9IG50O1xuICAgICAgICB0aGlzLiN0b1N0cmluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4jZW1wdHlFeHQgPSBmYWxzZTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21HbG9iKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBhc3QgPSBuZXcgX2EobnVsbCwgdW5kZWZpbmVkLCBvcHRpb25zKTtcbiAgICAgICAgX2EuI3BhcnNlQVNUKHBhdHRlcm4sIGFzdCwgMCwgb3B0aW9ucywgMCk7XG4gICAgICAgIHJldHVybiBhc3Q7XG4gICAgfVxuICAgIC8vIHJldHVybnMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB0aGVyZSdzIG1hZ2ljLCBvciB0aGUgdW5lc2NhcGVkXG4gICAgLy8gc3RyaW5nIGlmIG5vdC5cbiAgICB0b01NUGF0dGVybigpIHtcbiAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHJvb3RcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzICE9PSB0aGlzLiNyb290KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3Jvb3QudG9NTVBhdHRlcm4oKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgY29uc3QgZ2xvYiA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgW3JlLCBib2R5LCBoYXNNYWdpYywgdWZsYWddID0gdGhpcy50b1JlZ0V4cFNvdXJjZSgpO1xuICAgICAgICAvLyBpZiB3ZSdyZSBpbiBub2Nhc2UgbW9kZSwgYW5kIG5vdCBub2Nhc2VNYWdpY09ubHksIHRoZW4gd2UgZG9cbiAgICAgICAgLy8gc3RpbGwgbmVlZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB3ZSBoYXZlIHRvIGNhc2UtaW5zZW5zaXRpdmVseVxuICAgICAgICAvLyBtYXRjaCBjYXBpdGFsL2xvd2VyY2FzZSBjaGFyYWN0ZXJzLlxuICAgICAgICBjb25zdCBhbnlNYWdpYyA9IGhhc01hZ2ljIHx8XG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyB8fFxuICAgICAgICAgICAgKHRoaXMuI29wdGlvbnMubm9jYXNlICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI29wdGlvbnMubm9jYXNlTWFnaWNPbmx5ICYmXG4gICAgICAgICAgICAgICAgZ2xvYi50b1VwcGVyQ2FzZSgpICE9PSBnbG9iLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoIWFueU1hZ2ljKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGFncyA9ICh0aGlzLiNvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnKSArICh1ZmxhZyA/ICd1JyA6ICcnKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFJlZ0V4cChgXiR7cmV9JGAsIGZsYWdzKSwge1xuICAgICAgICAgICAgX3NyYzogcmUsXG4gICAgICAgICAgICBfZ2xvYjogZ2xvYixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jb3B0aW9ucztcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgc3RyaW5nIG1hdGNoLCB0aGUgcmVnZXhwIHNvdXJjZSwgd2hldGhlciB0aGVyZSdzIG1hZ2ljXG4gICAgLy8gaW4gdGhlIHJlZ2V4cCAoc28gYSByZWd1bGFyIGV4cHJlc3Npb24gaXMgcmVxdWlyZWQpIGFuZCB3aGV0aGVyIG9yXG4gICAgLy8gbm90IHRoZSB1ZmxhZyBpcyBuZWVkZWQgZm9yIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKGZvciBwb3NpeCBjbGFzc2VzKVxuICAgIC8vIFRPRE86IGluc3RlYWQgb2YgaW5qZWN0aW5nIHRoZSBzdGFydC9lbmQgYXQgdGhpcyBwb2ludCwganVzdCByZXR1cm5cbiAgICAvLyB0aGUgQk9EWSBvZiB0aGUgcmVnZXhwLCBhbG9uZyB3aXRoIHRoZSBzdGFydC9lbmQgcG9ydGlvbnMgc3VpdGFibGVcbiAgICAvLyBmb3IgYmluZGluZyB0aGUgc3RhcnQvZW5kIGluIGVpdGhlciBhIGpvaW5lZCBmdWxsLXBhdGggbWFrZVJlIGNvbnRleHRcbiAgICAvLyAod2hlcmUgd2UgYmluZCB0byAoXnwvKSwgb3IgYSBzdGFuZGFsb25lIG1hdGNoUGFydCBjb250ZXh0ICh3aGVyZVxuICAgIC8vIHdlIGJpbmQgdG8gXiwgYW5kIG5vdCAvKS4gIE90aGVyd2lzZSBzbGFzaGVzIGdldCBkdXBlZCFcbiAgICAvL1xuICAgIC8vIEluIHBhcnQtbWF0Y2hpbmcgbW9kZSwgdGhlIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiBeKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiBeXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogXig/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBub3QgaXNFbmQoKTogbm90aGluZ1xuICAgIC8vIC0gZWxzZTogJFxuICAgIC8vXG4gICAgLy8gSW4gZnVsbC1wYXRoIG1hdGNoaW5nIG1vZGUsIHdlIHB1dCB0aGUgc2xhc2ggYXQgdGhlIFNUQVJUIG9mIHRoZVxuICAgIC8vIHBhdHRlcm4sIHNvIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgZmlyc3QgcGF0dGVybjogc2FtZSBhcyBwYXJ0LW1hdGNoaW5nIG1vZGVcbiAgICAvLyAtIGlmIG5vdCBpc1N0YXJ0KCk6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAvKD8hXFwuXFwuPyg/OiR8LykpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAvXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogLyg/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBsYXN0IHBhdHRlcm4sIHNhbWUgYXMgcGFydC1tYXRjaGluZyBtb2RlXG4gICAgLy8gLSBlbHNlIG5vdGhpbmdcbiAgICAvL1xuICAgIC8vIEFsd2F5cyBwdXQgdGhlICg/OiR8Lykgb24gbmVnYXRlZCB0YWlscywgdGhvdWdoLCBiZWNhdXNlIHRoYXQgaGFzIHRvIGJlXG4gICAgLy8gdGhlcmUgdG8gYmluZCB0aGUgZW5kIG9mIHRoZSBuZWdhdGVkIHBhdHRlcm4gcG9ydGlvbiwgYW5kIGl0J3MgZWFzaWVyIHRvXG4gICAgLy8ganVzdCBzdGljayBpdCBpbiBub3cgcmF0aGVyIHRoYW4gdHJ5IHRvIGluamVjdCBpdCBsYXRlciBpbiB0aGUgbWlkZGxlIG9mXG4gICAgLy8gdGhlIHBhdHRlcm4uXG4gICAgLy9cbiAgICAvLyBXZSBjYW4ganVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGVuZCwgYW5kIGxlYXZlIGl0IHVwIHRvIHRoZSBjYWxsZXJcbiAgICAvLyB0byBrbm93IHdoZXRoZXIgaXQncyBnb2luZyB0byBiZSB1c2VkIGpvaW5lZCBvciBpbiBwYXJ0cy5cbiAgICAvLyBBbmQsIGlmIHRoZSBzdGFydCBpcyBhZGp1c3RlZCBzbGlnaHRseSwgY2FuIGRvIHRoZSBzYW1lIHRoZXJlOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAoPzovfF4pKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAoPzovfF4pXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogKD86L3xeKSg/IVxcLilcbiAgICAvL1xuICAgIC8vIEJ1dCBpdCdzIGJldHRlciB0byBoYXZlIGEgc2ltcGxlciBiaW5kaW5nIHdpdGhvdXQgYSBjb25kaXRpb25hbCwgZm9yXG4gICAgLy8gcGVyZm9ybWFuY2UsIHNvIHByb2JhYmx5IGJldHRlciB0byByZXR1cm4gYm90aCBzdGFydCBvcHRpb25zLlxuICAgIC8vXG4gICAgLy8gVGhlbiB0aGUgY2FsbGVyIGp1c3QgaWdub3JlcyB0aGUgZW5kIGlmIGl0J3Mgbm90IHRoZSBmaXJzdCBwYXR0ZXJuLFxuICAgIC8vIGFuZCB0aGUgc3RhcnQgYWx3YXlzIGdldHMgYXBwbGllZC5cbiAgICAvL1xuICAgIC8vIEJ1dCB0aGF0J3MgYWx3YXlzIGdvaW5nIHRvIGJlICQgaWYgaXQncyB0aGUgZW5kaW5nIHBhdHRlcm4sIG9yIG5vdGhpbmcsXG4gICAgLy8gc28gdGhlIGNhbGxlciBjYW4ganVzdCBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gYnVpbGRpbmcuXG4gICAgLy9cbiAgICAvLyBTbyB0aGUgdG9kbyBpczpcbiAgICAvLyAtIGJldHRlciBkZXRlY3Qgd2hhdCBraW5kIG9mIHN0YXJ0IGlzIG5lZWRlZFxuICAgIC8vIC0gcmV0dXJuIGJvdGggZmxhdm9ycyBvZiBzdGFydGluZyBwYXR0ZXJuXG4gICAgLy8gLSBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gY3JlYXRpbmcgdGhlIGFjdHVhbCBSZWdFeHBcbiAgICAvL1xuICAgIC8vIEFoLCBidXQgd2FpdCwgbm8sIHRoYXQgYWxsIG9ubHkgYXBwbGllcyB0byB0aGUgcm9vdCB3aGVuIHRoZSBmaXJzdCBwYXR0ZXJuXG4gICAgLy8gaXMgbm90IGFuIGV4dGdsb2IuIElmIHRoZSBmaXJzdCBwYXR0ZXJuIElTIGFuIGV4dGdsb2IsIHRoZW4gd2UgbmVlZCBhbGxcbiAgICAvLyB0aGF0IGRvdCBwcmV2ZW50aW9uIGJpeiB0byBsaXZlIGluIHRoZSBleHRnbG9iIHBvcnRpb25zLCBiZWNhdXNlIGVnXG4gICAgLy8gKygqfC54KikgY2FuIG1hdGNoIC54eSBidXQgbm90IC55eC5cbiAgICAvL1xuICAgIC8vIFNvLCByZXR1cm4gdGhlIHR3byBmbGF2b3JzIGlmIGl0J3MgI3Jvb3QgYW5kIHRoZSBmaXJzdCBjaGlsZCBpcyBub3QgYW5cbiAgICAvLyBBU1QsIG90aGVyd2lzZSBsZWF2ZSBpdCB0byB0aGUgY2hpbGQgQVNUIHRvIGhhbmRsZSBpdCwgYW5kIHRoZXJlLFxuICAgIC8vIHVzZSB0aGUgKD86XnwvKSBzdHlsZSBvZiBzdGFydCBiaW5kaW5nLlxuICAgIC8vXG4gICAgLy8gRXZlbiBzaW1wbGlmaWVkIGZ1cnRoZXI6XG4gICAgLy8gLSBTaW5jZSB0aGUgc3RhcnQgZm9yIGEgam9pbiBpcyBlZyAvKD8hXFwuKSBhbmQgdGhlIHN0YXJ0IGZvciBhIHBhcnRcbiAgICAvLyBpcyBeKD8hXFwuKSwgd2UgY2FuIGp1c3QgcHJlcGVuZCAoPyFcXC4pIHRvIHRoZSBwYXR0ZXJuIChlaXRoZXIgcm9vdFxuICAgIC8vIG9yIHN0YXJ0IG9yIHdoYXRldmVyKSBhbmQgcHJlcGVuZCBeIG9yIC8gYXQgdGhlIFJlZ2V4cCBjb25zdHJ1Y3Rpb24uXG4gICAgdG9SZWdFeHBTb3VyY2UoYWxsb3dEb3QpIHtcbiAgICAgICAgY29uc3QgZG90ID0gYWxsb3dEb3QgPz8gISF0aGlzLiNvcHRpb25zLmRvdDtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpIHtcbiAgICAgICAgICAgIHRoaXMuI2ZsYXR0ZW4oKTtcbiAgICAgICAgICAgIHRoaXMuI2ZpbGxOZWdzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0V4dGdsb2JBU1QodGhpcykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vRW1wdHkgPSB0aGlzLmlzU3RhcnQoKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbmQoKSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNwYXJ0cy5zb21lKHMgPT4gdHlwZW9mIHMgIT09ICdzdHJpbmcnKTtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHRoaXMuI3BhcnRzXG4gICAgICAgICAgICAgICAgLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbcmUsIF8sIGhhc01hZ2ljLCB1ZmxhZ10gPSB0eXBlb2YgcCA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgICAgICAgICAgICBfYS4jcGFyc2VHbG9iKHAsIHRoaXMuI2hhc01hZ2ljLCBub0VtcHR5KVxuICAgICAgICAgICAgICAgICAgICA6IHAudG9SZWdFeHBTb3VyY2UoYWxsb3dEb3QpO1xuICAgICAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljID0gdGhpcy4jaGFzTWFnaWMgfHwgaGFzTWFnaWM7XG4gICAgICAgICAgICAgICAgdGhpcy4jdWZsYWcgPSB0aGlzLiN1ZmxhZyB8fCB1ZmxhZztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIGxldCBzdGFydCA9ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiNwYXJ0c1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc3RyaW5nIHRoYXQgd2lsbCBtYXRjaCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGRvdHMgYW5kIHN1Y2guXG4gICAgICAgICAgICAgICAgICAgIC8vICcuJyBhbmQgJy4uJyBjYW5ub3QgbWF0Y2ggdW5sZXNzIHRoZSBwYXR0ZXJuIGlzIHRoYXQgZXhhY3RseSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZXZlbiBpZiBpdCBzdGFydHMgd2l0aCAuIG9yIGRvdDp0cnVlIGlzIHNldC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG90VHJhdkFsbG93ZWQgPSB0aGlzLiNwYXJ0cy5sZW5ndGggPT09IDEgJiYganVzdERvdHMuaGFzKHRoaXMuI3BhcnRzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb3RUcmF2QWxsb3dlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBzID0gYWRkUGF0dGVyblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIHBvc3NpYmlsaXR5IG9mIG1hdGNoaW5nIC4gb3IgLi4sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgcHJldmVudCB0aGF0LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZE5vVHJhdiA9IFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG90cyBhcmUgYWxsb3dlZCwgYW5kIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFsgb3IgLlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRvdCAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoMCkpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFxcLiwgYW5kIHRoZW4gWyBvciAuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyYy5zdGFydHNXaXRoKCdcXFxcLicpICYmIGFwcy5oYXMoc3JjLmNoYXJBdCgyKSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggXFwuXFwuLCBhbmQgdGhlbiBbIG9yIC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3JjLnN0YXJ0c1dpdGgoJ1xcXFwuXFxcXC4nKSAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoNCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gcHJldmVudCBkb3RzIGlmIGl0IGNhbid0IG1hdGNoIGEgZG90LCBvciBpZiBhXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWItcGF0dGVybiB3aWxsIGJlIHByZXZlbnRpbmcgaXQgYW55d2F5LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZE5vRG90ID0gIWRvdCAmJiAhYWxsb3dEb3QgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkTm9UcmF2ID8gc3RhcnROb1RyYXZlcnNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5lZWROb0RvdCA/IHN0YXJ0Tm9Eb3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcHBlbmQgdGhlIFwiZW5kIG9mIHBhdGggcG9ydGlvblwiIHBhdHRlcm4gdG8gbmVnYXRpb24gdGFpbHNcbiAgICAgICAgICAgIGxldCBlbmQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKCkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLiNyb290LiNmaWxsZWROZWdzICYmXG4gICAgICAgICAgICAgICAgdGhpcy4jcGFyZW50Py50eXBlID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICBlbmQgPSAnKD86JHxcXFxcLyknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmluYWwgPSBzdGFydCArIHNyYyArIGVuZDtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZmluYWwsXG4gICAgICAgICAgICAgICAgdW5lc2NhcGUoc3JjKSxcbiAgICAgICAgICAgICAgICAodGhpcy4jaGFzTWFnaWMgPSAhIXRoaXMuI2hhc01hZ2ljKSxcbiAgICAgICAgICAgICAgICB0aGlzLiN1ZmxhZyxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIGJvZHkgKnR3aWNlKiBpZiBpdCdzIGEgcmVwZWF0IHBhdHRlcm5cbiAgICAgICAgLy8gYXQgdGhlIHN0YXJ0LCBvbmNlIGluIG5vZG90IG1vZGUsIHRoZW4gYWdhaW4gaW4gZG90IG1vZGUsIHNvIGFcbiAgICAgICAgLy8gcGF0dGVybiBsaWtlICooPykgY2FuIG1hdGNoICd4LnknXG4gICAgICAgIGNvbnN0IHJlcGVhdGVkID0gdGhpcy50eXBlID09PSAnKicgfHwgdGhpcy50eXBlID09PSAnKyc7XG4gICAgICAgIC8vIHNvbWUga2luZCBvZiBleHRnbG9iXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy50eXBlID09PSAnIScgPyAnKD86KD8hKD86JyA6ICcoPzonO1xuICAgICAgICBsZXQgYm9keSA9IHRoaXMuI3BhcnRzVG9SZWdFeHAoZG90KTtcbiAgICAgICAgaWYgKHRoaXMuaXNTdGFydCgpICYmIHRoaXMuaXNFbmQoKSAmJiAhYm9keSAmJiB0aGlzLnR5cGUgIT09ICchJykge1xuICAgICAgICAgICAgLy8gaW52YWxpZCBleHRnbG9iLCBoYXMgdG8gYXQgbGVhc3QgYmUgKnNvbWV0aGluZyogcHJlc2VudCwgaWYgaXQnc1xuICAgICAgICAgICAgLy8gdGhlIGVudGlyZSBwYXRoIHBvcnRpb24uXG4gICAgICAgICAgICBjb25zdCBzID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgICAgICAgbWUuI3BhcnRzID0gW3NdO1xuICAgICAgICAgICAgbWUudHlwZSA9IG51bGw7XG4gICAgICAgICAgICBtZS4jaGFzTWFnaWMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gW3MsIHVuZXNjYXBlKHRoaXMudG9TdHJpbmcoKSksIGZhbHNlLCBmYWxzZV07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJvZHlEb3RBbGxvd2VkID0gIXJlcGVhdGVkIHx8IGFsbG93RG90IHx8IGRvdCB8fCAhc3RhcnROb0RvdCA/XG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICAgOiB0aGlzLiNwYXJ0c1RvUmVnRXhwKHRydWUpO1xuICAgICAgICBpZiAoYm9keURvdEFsbG93ZWQgPT09IGJvZHkpIHtcbiAgICAgICAgICAgIGJvZHlEb3RBbGxvd2VkID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHlEb3RBbGxvd2VkKSB7XG4gICAgICAgICAgICBib2R5ID0gYCg/OiR7Ym9keX0pKD86JHtib2R5RG90QWxsb3dlZH0pKj9gO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFuIGVtcHR5ICEoKSBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gYSBzdGFyTm9FbXB0eVxuICAgICAgICBsZXQgZmluYWwgPSAnJztcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJyEnICYmIHRoaXMuI2VtcHR5RXh0KSB7XG4gICAgICAgICAgICBmaW5hbCA9ICh0aGlzLmlzU3RhcnQoKSAmJiAhZG90ID8gc3RhcnROb0RvdCA6ICcnKSArIHN0YXJOb0VtcHR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY2xvc2UgPSB0aGlzLnR5cGUgPT09ICchJyA/XG4gICAgICAgICAgICAgICAgLy8gISgpIG11c3QgbWF0Y2ggc29tZXRoaW5nLGJ1dCAhKHgpIGNhbiBtYXRjaCAnJ1xuICAgICAgICAgICAgICAgICcpKScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5pc1N0YXJ0KCkgJiYgIWRvdCAmJiAhYWxsb3dEb3QgPyBzdGFydE5vRG90IDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgc3RhciArXG4gICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnQCcgPyAnKSdcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICc/JyA/ICcpPydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnKycgJiYgYm9keURvdEFsbG93ZWQgPyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJyonICYmIGJvZHlEb3RBbGxvd2VkID8gYCk/YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGApJHt0aGlzLnR5cGV9YDtcbiAgICAgICAgICAgIGZpbmFsID0gc3RhcnQgKyBib2R5ICsgY2xvc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGZpbmFsLFxuICAgICAgICAgICAgdW5lc2NhcGUoYm9keSksXG4gICAgICAgICAgICAodGhpcy4jaGFzTWFnaWMgPSAhIXRoaXMuI2hhc01hZ2ljKSxcbiAgICAgICAgICAgIHRoaXMuI3VmbGFnLFxuICAgICAgICBdO1xuICAgIH1cbiAgICAjZmxhdHRlbigpIHtcbiAgICAgICAgaWYgKCFpc0V4dGdsb2JBU1QodGhpcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcC4jZmxhdHRlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRvIHVwIHRvIDEwIHBhc3NlcyB0byBmbGF0dGVuIGFzIG11Y2ggYXMgcG9zc2libGVcbiAgICAgICAgICAgIGxldCBpdGVyYXRpb25zID0gMDtcbiAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gdGhpcy4jcGFydHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuI2ZsYXR0ZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNjYW5BZG9wdChjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNhZG9wdChjLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuI2NhbkFkb3B0V2l0aFNwYWNlKGMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2Fkb3B0V2l0aFNwYWNlKGMsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy4jY2FuVXN1cnAoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jdXN1cnAoYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlICghZG9uZSAmJiArK2l0ZXJhdGlvbnMgPCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jdG9TdHJpbmcgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgICNwYXJ0c1RvUmVnRXhwKGRvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFydHNcbiAgICAgICAgICAgIC5tYXAocCA9PiB7XG4gICAgICAgICAgICAvLyBleHRnbG9iIEFTVHMgc2hvdWxkIG9ubHkgY29udGFpbiBwYXJlbnQgQVNUc1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgdHlwZSBpbiBleHRnbG9iIGFzdD8/Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgLy8gY2FuIGlnbm9yZSBoYXNNYWdpYywgYmVjYXVzZSBleHRnbG9icyBhcmUgYWxyZWFkeSBhbHdheXMgbWFnaWNcbiAgICAgICAgICAgIGNvbnN0IFtyZSwgXywgX2hhc01hZ2ljLCB1ZmxhZ10gPSBwLnRvUmVnRXhwU291cmNlKGRvdCk7XG4gICAgICAgICAgICB0aGlzLiN1ZmxhZyA9IHRoaXMuI3VmbGFnIHx8IHVmbGFnO1xuICAgICAgICAgICAgcmV0dXJuIHJlO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcihwID0+ICEodGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpKSB8fCAhIXApXG4gICAgICAgICAgICAuam9pbignfCcpO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlR2xvYihnbG9iLCBoYXNNYWdpYywgbm9FbXB0eSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgcmUgPSAnJztcbiAgICAgICAgbGV0IHVmbGFnID0gZmFsc2U7XG4gICAgICAgIC8vIG11bHRpcGxlIHN0YXJzIHRoYXQgYXJlbid0IGdsb2JzdGFycyBjb2FsZXNjZSBpbnRvIG9uZSAqXG4gICAgICAgIGxldCBpblN0YXIgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gZ2xvYi5jaGFyQXQoaSk7XG4gICAgICAgICAgICBpZiAoZXNjYXBpbmcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlICs9IChyZVNwZWNpYWxzLmhhcyhjKSA/ICdcXFxcJyA6ICcnKSArIGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluU3RhcilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaW5TdGFyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZSArPSBub0VtcHR5ICYmIC9eWypdKyQvLnRlc3QoZ2xvYikgPyBzdGFyTm9FbXB0eSA6IHN0YXI7XG4gICAgICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5TdGFyID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGdsb2IubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZSArPSAnXFxcXFxcXFwnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbc3JjLCBuZWVkVWZsYWcsIGNvbnN1bWVkLCBtYWdpY10gPSBwYXJzZUNsYXNzKGdsb2IsIGkpO1xuICAgICAgICAgICAgICAgIGlmIChjb25zdW1lZCkge1xuICAgICAgICAgICAgICAgICAgICByZSArPSBzcmM7XG4gICAgICAgICAgICAgICAgICAgIHVmbGFnID0gdWZsYWcgfHwgbmVlZFVmbGFnO1xuICAgICAgICAgICAgICAgICAgICBpICs9IGNvbnN1bWVkIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgaGFzTWFnaWMgPSBoYXNNYWdpYyB8fCBtYWdpYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgICAgICAgIHJlICs9IHFtYXJrO1xuICAgICAgICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlICs9IHJlZ0V4cEVzY2FwZShjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3JlLCB1bmVzY2FwZShnbG9iKSwgISFoYXNNYWdpYywgdWZsYWddO1xuICAgIH1cbn1cbl9hID0gQVNUO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN0LmpzLm1hcCIsCiAgICAiLyoqXG4gKiBFc2NhcGUgYWxsIG1hZ2ljIGNoYXJhY3RlcnMgaW4gYSBnbG9iIHBhdHRlcm4uXG4gKlxuICogSWYgdGhlIHtAbGluayBNaW5pbWF0Y2hPcHRpb25zLndpbmRvd3NQYXRoc05vRXNjYXBlfVxuICogb3B0aW9uIGlzIHVzZWQsIHRoZW4gY2hhcmFjdGVycyBhcmUgZXNjYXBlZCBieSB3cmFwcGluZyBpbiBgW11gLCBiZWNhdXNlXG4gKiBhIG1hZ2ljIGNoYXJhY3RlciB3cmFwcGVkIGluIGEgY2hhcmFjdGVyIGNsYXNzIGNhbiBvbmx5IGJlIHNhdGlzZmllZCBieVxuICogdGhhdCBleGFjdCBjaGFyYWN0ZXIuICBJbiB0aGlzIG1vZGUsIGBcXGAgaXMgX25vdF8gZXNjYXBlZCwgYmVjYXVzZSBpdCBpc1xuICogbm90IGludGVycHJldGVkIGFzIGEgbWFnaWMgY2hhcmFjdGVyLCBidXQgaW5zdGVhZCBhcyBhIHBhdGggc2VwYXJhdG9yLlxuICpcbiAqIElmIHRoZSB7QGxpbmsgTWluaW1hdGNoT3B0aW9ucy5tYWdpY2FsQnJhY2VzfSBvcHRpb24gaXMgdXNlZCxcbiAqIHRoZW4gYnJhY2VzIChge2AgYW5kIGB9YCkgd2lsbCBiZSBlc2NhcGVkLlxuICovXG5leHBvcnQgY29uc3QgZXNjYXBlID0gKHMsIHsgd2luZG93c1BhdGhzTm9Fc2NhcGUgPSBmYWxzZSwgbWFnaWNhbEJyYWNlcyA9IGZhbHNlLCB9ID0ge30pID0+IHtcbiAgICAvLyBkb24ndCBuZWVkIHRvIGVzY2FwZSArQCEgYmVjYXVzZSB3ZSBlc2NhcGUgdGhlIHBhcmVuc1xuICAgIC8vIHRoYXQgbWFrZSB0aG9zZSBtYWdpYywgYW5kIGVzY2FwaW5nICEgYXMgWyFdIGlzbid0IHZhbGlkLFxuICAgIC8vIGJlY2F1c2UgWyFdXSBpcyBhIHZhbGlkIGdsb2IgY2xhc3MgbWVhbmluZyBub3QgJ10nLlxuICAgIGlmIChtYWdpY2FsQnJhY2VzKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3dzUGF0aHNOb0VzY2FwZSA/XG4gICAgICAgICAgICBzLnJlcGxhY2UoL1s/KigpW1xcXXt9XS9nLCAnWyQmXScpXG4gICAgICAgICAgICA6IHMucmVwbGFjZSgvWz8qKClbXFxdXFxcXHt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuICAgIHJldHVybiB3aW5kb3dzUGF0aHNOb0VzY2FwZSA/XG4gICAgICAgIHMucmVwbGFjZSgvWz8qKClbXFxdXS9nLCAnWyQmXScpXG4gICAgICAgIDogcy5yZXBsYWNlKC9bPyooKVtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXNjYXBlLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZXhwYW5kIH0gZnJvbSAnYnJhY2UtZXhwYW5zaW9uJztcbmltcG9ydCB7IGFzc2VydFZhbGlkUGF0dGVybiB9IGZyb20gJy4vYXNzZXJ0LXZhbGlkLXBhdHRlcm4uanMnO1xuaW1wb3J0IHsgQVNUIH0gZnJvbSAnLi9hc3QuanMnO1xuaW1wb3J0IHsgZXNjYXBlIH0gZnJvbSAnLi9lc2NhcGUuanMnO1xuaW1wb3J0IHsgdW5lc2NhcGUgfSBmcm9tICcuL3VuZXNjYXBlLmpzJztcbmV4cG9ydCBjb25zdCBtaW5pbWF0Y2ggPSAocCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pO1xuICAgIC8vIHNob3J0Y3V0OiBjb21tZW50cyBtYXRjaCBub3RoaW5nLlxuICAgIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1hdGNoKHApO1xufTtcbi8vIE9wdGltaXplZCBjaGVja2luZyBmb3IgdGhlIG1vc3QgY29tbW9uIGdsb2IgcGF0dGVybnMuXG5jb25zdCBzdGFyRG90RXh0UkUgPSAvXlxcKisoW14rQCE/KlsoXSopJC87XG5jb25zdCBzdGFyRG90RXh0VGVzdCA9IChleHQpID0+IChmKSA9PiAhZi5zdGFydHNXaXRoKCcuJykgJiYgZi5lbmRzV2l0aChleHQpO1xuY29uc3Qgc3RhckRvdEV4dFRlc3REb3QgPSAoZXh0KSA9PiAoZikgPT4gZi5lbmRzV2l0aChleHQpO1xuY29uc3Qgc3RhckRvdEV4dFRlc3ROb2Nhc2UgPSAoZXh0KSA9PiB7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiAhZi5zdGFydHNXaXRoKCcuJykgJiYgZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3Qgc3RhckRvdEV4dFRlc3ROb2Nhc2VEb3QgPSAoZXh0KSA9PiB7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBzdGFyRG90U3RhclJFID0gL15cXCorXFwuXFwqKyQvO1xuY29uc3Qgc3RhckRvdFN0YXJUZXN0ID0gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLmluY2x1ZGVzKCcuJyk7XG5jb25zdCBzdGFyRG90U3RhclRlc3REb3QgPSAoZikgPT4gZiAhPT0gJy4nICYmIGYgIT09ICcuLicgJiYgZi5pbmNsdWRlcygnLicpO1xuY29uc3QgZG90U3RhclJFID0gL15cXC5cXCorJC87XG5jb25zdCBkb3RTdGFyVGVzdCA9IChmKSA9PiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJyAmJiBmLnN0YXJ0c1dpdGgoJy4nKTtcbmNvbnN0IHN0YXJSRSA9IC9eXFwqKyQvO1xuY29uc3Qgc3RhclRlc3QgPSAoZikgPT4gZi5sZW5ndGggIT09IDAgJiYgIWYuc3RhcnRzV2l0aCgnLicpO1xuY29uc3Qgc3RhclRlc3REb3QgPSAoZikgPT4gZi5sZW5ndGggIT09IDAgJiYgZiAhPT0gJy4nICYmIGYgIT09ICcuLic7XG5jb25zdCBxbWFya3NSRSA9IC9eXFw/KyhbXitAIT8qWyhdKik/JC87XG5jb25zdCBxbWFya3NUZXN0Tm9jYXNlID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHQoWyQwXSk7XG4gICAgaWYgKCFleHQpXG4gICAgICAgIHJldHVybiBub2V4dDtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+IG5vZXh0KGYpICYmIGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3ROb2Nhc2VEb3QgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dERvdChbJDBdKTtcbiAgICBpZiAoIWV4dClcbiAgICAgICAgcmV0dXJuIG5vZXh0O1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gbm9leHQoZikgJiYgZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdERvdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0RG90KFskMF0pO1xuICAgIHJldHVybiAhZXh0ID8gbm9leHQgOiAoZikgPT4gbm9leHQoZikgJiYgZi5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3QgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dChbJDBdKTtcbiAgICByZXR1cm4gIWV4dCA/IG5vZXh0IDogKGYpID0+IG5vZXh0KGYpICYmIGYuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0Tm9FeHQgPSAoWyQwXSkgPT4ge1xuICAgIGNvbnN0IGxlbiA9ICQwLmxlbmd0aDtcbiAgICByZXR1cm4gKGYpID0+IGYubGVuZ3RoID09PSBsZW4gJiYgIWYuc3RhcnRzV2l0aCgnLicpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3ROb0V4dERvdCA9IChbJDBdKSA9PiB7XG4gICAgY29uc3QgbGVuID0gJDAubGVuZ3RoO1xuICAgIHJldHVybiAoZikgPT4gZi5sZW5ndGggPT09IGxlbiAmJiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJztcbn07XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmNvbnN0IGRlZmF1bHRQbGF0Zm9ybSA9ICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2VzcyA/XG4gICAgKHR5cGVvZiBwcm9jZXNzLmVudiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgcHJvY2Vzcy5lbnYgJiZcbiAgICAgICAgcHJvY2Vzcy5lbnYuX19NSU5JTUFUQ0hfVEVTVElOR19QTEFURk9STV9fKSB8fFxuICAgICAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAncG9zaXgnKTtcbmNvbnN0IHBhdGggPSB7XG4gICAgd2luMzI6IHsgc2VwOiAnXFxcXCcgfSxcbiAgICBwb3NpeDogeyBzZXA6ICcvJyB9LFxufTtcbi8qIGM4IGlnbm9yZSBzdG9wICovXG5leHBvcnQgY29uc3Qgc2VwID0gZGVmYXVsdFBsYXRmb3JtID09PSAnd2luMzInID8gcGF0aC53aW4zMi5zZXAgOiBwYXRoLnBvc2l4LnNlcDtcbm1pbmltYXRjaC5zZXAgPSBzZXA7XG5leHBvcnQgY29uc3QgR0xPQlNUQVIgPSBTeW1ib2woJ2dsb2JzdGFyICoqJyk7XG5taW5pbWF0Y2guR0xPQlNUQVIgPSBHTE9CU1RBUjtcbi8vIGFueSBzaW5nbGUgdGhpbmcgb3RoZXIgdGhhbiAvXG4vLyBkb24ndCBuZWVkIHRvIGVzY2FwZSAvIHdoZW4gdXNpbmcgbmV3IFJlZ0V4cCgpXG5jb25zdCBxbWFyayA9ICdbXi9dJztcbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG5jb25zdCBzdGFyID0gcW1hcmsgKyAnKj8nO1xuLy8gKiogd2hlbiBkb3RzIGFyZSBhbGxvd2VkLiAgQW55dGhpbmcgZ29lcywgZXhjZXB0IC4uIGFuZCAuXG4vLyBub3QgKF4gb3IgLyBmb2xsb3dlZCBieSBvbmUgb3IgdHdvIGRvdHMgZm9sbG93ZWQgYnkgJCBvciAvKSxcbi8vIGZvbGxvd2VkIGJ5IGFueXRoaW5nLCBhbnkgbnVtYmVyIG9mIHRpbWVzLlxuY29uc3QgdHdvU3RhckRvdCA9ICcoPzooPyEoPzpcXFxcL3xeKSg/OlxcXFwuezEsMn0pKCR8XFxcXC8pKS4pKj8nO1xuLy8gbm90IGEgXiBvciAvIGZvbGxvd2VkIGJ5IGEgZG90LFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyTm9Eb3QgPSAnKD86KD8hKD86XFxcXC98XilcXFxcLikuKSo/JztcbmV4cG9ydCBjb25zdCBmaWx0ZXIgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiAocCkgPT4gbWluaW1hdGNoKHAsIHBhdHRlcm4sIG9wdGlvbnMpO1xubWluaW1hdGNoLmZpbHRlciA9IGZpbHRlcjtcbmNvbnN0IGV4dCA9IChhLCBiID0ge30pID0+IE9iamVjdC5hc3NpZ24oe30sIGEsIGIpO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRzID0gKGRlZikgPT4ge1xuICAgIGlmICghZGVmIHx8IHR5cGVvZiBkZWYgIT09ICdvYmplY3QnIHx8ICFPYmplY3Qua2V5cyhkZWYpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbWluaW1hdGNoO1xuICAgIH1cbiAgICBjb25zdCBvcmlnID0gbWluaW1hdGNoO1xuICAgIGNvbnN0IG0gPSAocCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnKHAsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtLCB7XG4gICAgICAgIE1pbmltYXRjaDogY2xhc3MgTWluaW1hdGNoIGV4dGVuZHMgb3JpZy5NaW5pbWF0Y2gge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGljIGRlZmF1bHRzKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSkuTWluaW1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBBU1Q6IGNsYXNzIEFTVCBleHRlbmRzIG9yaWcuQVNUIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgY29uc3RydWN0b3IodHlwZSwgcGFyZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICBzdXBlcih0eXBlLCBwYXJlbnQsIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBzdGF0aWMgZnJvbUdsb2IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWcuQVNULmZyb21HbG9iKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdW5lc2NhcGU6IChzLCBvcHRpb25zID0ge30pID0+IG9yaWcudW5lc2NhcGUocywgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBlc2NhcGU6IChzLCBvcHRpb25zID0ge30pID0+IG9yaWcuZXNjYXBlKHMsIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgZmlsdGVyOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLmZpbHRlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGRlZmF1bHRzOiAob3B0aW9ucykgPT4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIG1ha2VSZTogKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5tYWtlUmUocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBicmFjZUV4cGFuZDogKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5icmFjZUV4cGFuZChwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIG1hdGNoOiAobGlzdCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLm1hdGNoKGxpc3QsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgc2VwOiBvcmlnLnNlcCxcbiAgICAgICAgR0xPQlNUQVI6IEdMT0JTVEFSLFxuICAgIH0pO1xufTtcbm1pbmltYXRjaC5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuLy8gQnJhY2UgZXhwYW5zaW9uOlxuLy8gYXtiLGN9ZCAtPiBhYmQgYWNkXG4vLyBhe2IsfWMgLT4gYWJjIGFjXG4vLyBhezAuLjN9ZCAtPiBhMGQgYTFkIGEyZCBhM2Rcbi8vIGF7Yixje2QsZX1mfWcgLT4gYWJnIGFjZGZnIGFjZWZnXG4vLyBhe2IsY31ke2UsZn1nIC0+IGFiZGVnIGFjZGVnIGFiZGVnIGFiZGZnXG4vL1xuLy8gSW52YWxpZCBzZXRzIGFyZSBub3QgZXhwYW5kZWQuXG4vLyBhezIuLn1iIC0+IGF7Mi4ufWJcbi8vIGF7Yn1jIC0+IGF7Yn1jXG5leHBvcnQgY29uc3QgYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pO1xuICAgIC8vIFRoYW5rcyB0byBZZXRpbmcgTGkgPGh0dHBzOi8vZ2l0aHViLmNvbS95ZXRpbmdsaT4gZm9yXG4gICAgLy8gaW1wcm92aW5nIHRoaXMgcmVnZXhwIHRvIGF2b2lkIGEgUmVET1MgdnVsbmVyYWJpbGl0eS5cbiAgICBpZiAob3B0aW9ucy5ub2JyYWNlIHx8ICEvXFx7KD86KD8hXFx7KS4pKlxcfS8udGVzdChwYXR0ZXJuKSkge1xuICAgICAgICAvLyBzaG9ydGN1dC4gbm8gbmVlZCB0byBleHBhbmQuXG4gICAgICAgIHJldHVybiBbcGF0dGVybl07XG4gICAgfVxuICAgIHJldHVybiBleHBhbmQocGF0dGVybiwgeyBtYXg6IG9wdGlvbnMuYnJhY2VFeHBhbmRNYXggfSk7XG59O1xubWluaW1hdGNoLmJyYWNlRXhwYW5kID0gYnJhY2VFeHBhbmQ7XG4vLyBwYXJzZSBhIGNvbXBvbmVudCBvZiB0aGUgZXhwYW5kZWQgc2V0LlxuLy8gQXQgdGhpcyBwb2ludCwgbm8gcGF0dGVybiBtYXkgY29udGFpbiBcIi9cIiBpbiBpdFxuLy8gc28gd2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgMmQgYXJyYXksIHdoZXJlIGVhY2ggZW50cnkgaXMgdGhlIGZ1bGxcbi8vIHBhdHRlcm4sIHNwbGl0IG9uICcvJywgYW5kIHRoZW4gdHVybmVkIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4vLyBBIHJlZ2V4cCBpcyBtYWRlIGF0IHRoZSBlbmQgd2hpY2ggam9pbnMgZWFjaCBhcnJheSB3aXRoIGFuXG4vLyBlc2NhcGVkIC8sIGFuZCBhbm90aGVyIGZ1bGwgb25lIHdoaWNoIGpvaW5zIGVhY2ggcmVnZXhwIHdpdGggfC5cbi8vXG4vLyBGb2xsb3dpbmcgdGhlIGxlYWQgb2YgQmFzaCA0LjEsIG5vdGUgdGhhdCBcIioqXCIgb25seSBoYXMgc3BlY2lhbCBtZWFuaW5nXG4vLyB3aGVuIGl0IGlzIHRoZSAqb25seSogdGhpbmcgaW4gYSBwYXRoIHBvcnRpb24uICBPdGhlcndpc2UsIGFueSBzZXJpZXNcbi8vIG9mICogaXMgZXF1aXZhbGVudCB0byBhIHNpbmdsZSAqLiAgR2xvYnN0YXIgYmVoYXZpb3IgaXMgZW5hYmxlZCBieVxuLy8gZGVmYXVsdCwgYW5kIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIG9wdGlvbnMubm9nbG9ic3Rhci5cbmV4cG9ydCBjb25zdCBtYWtlUmUgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1ha2VSZSgpO1xubWluaW1hdGNoLm1ha2VSZSA9IG1ha2VSZTtcbmV4cG9ydCBjb25zdCBtYXRjaCA9IChsaXN0LCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucyk7XG4gICAgbGlzdCA9IGxpc3QuZmlsdGVyKGYgPT4gbW0ubWF0Y2goZikpO1xuICAgIGlmIChtbS5vcHRpb25zLm5vbnVsbCAmJiAhbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgbGlzdC5wdXNoKHBhdHRlcm4pO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbn07XG5taW5pbWF0Y2gubWF0Y2ggPSBtYXRjaDtcbi8vIHJlcGxhY2Ugc3R1ZmYgbGlrZSBcXCogd2l0aCAqXG5jb25zdCBnbG9iTWFnaWMgPSAvWz8qXXxbK0AhXVxcKC4qP1xcKXxcXFt8XFxdLztcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG5leHBvcnQgY2xhc3MgTWluaW1hdGNoIHtcbiAgICBvcHRpb25zO1xuICAgIHNldDtcbiAgICBwYXR0ZXJuO1xuICAgIHdpbmRvd3NQYXRoc05vRXNjYXBlO1xuICAgIG5vbmVnYXRlO1xuICAgIG5lZ2F0ZTtcbiAgICBjb21tZW50O1xuICAgIGVtcHR5O1xuICAgIHByZXNlcnZlTXVsdGlwbGVTbGFzaGVzO1xuICAgIHBhcnRpYWw7XG4gICAgZ2xvYlNldDtcbiAgICBnbG9iUGFydHM7XG4gICAgbm9jYXNlO1xuICAgIGlzV2luZG93cztcbiAgICBwbGF0Zm9ybTtcbiAgICB3aW5kb3dzTm9NYWdpY1Jvb3Q7XG4gICAgbWF4R2xvYnN0YXJSZWN1cnNpb247XG4gICAgcmVnZXhwO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybik7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLm1heEdsb2JzdGFyUmVjdXJzaW9uID0gb3B0aW9ucy5tYXhHbG9ic3RhclJlY3Vyc2lvbiA/PyAyMDA7XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBvcHRpb25zLnBsYXRmb3JtIHx8IGRlZmF1bHRQbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5pc1dpbmRvd3MgPSB0aGlzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgICAgICAvLyBhdm9pZCB0aGUgYW5ub3lpbmcgZGVwcmVjYXRpb24gZmxhZyBsb2xcbiAgICAgICAgY29uc3QgYXdlID0gKCdhbGxvd1dpbmRvdycgKyAnc0VzY2FwZScpO1xuICAgICAgICB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlID1cbiAgICAgICAgICAgICEhb3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZSB8fCBvcHRpb25zW2F3ZV0gPT09IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzID0gISFvcHRpb25zLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzO1xuICAgICAgICB0aGlzLnJlZ2V4cCA9IG51bGw7XG4gICAgICAgIHRoaXMubmVnYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubm9uZWdhdGUgPSAhIW9wdGlvbnMubm9uZWdhdGU7XG4gICAgICAgIHRoaXMuY29tbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFydGlhbCA9ICEhb3B0aW9ucy5wYXJ0aWFsO1xuICAgICAgICB0aGlzLm5vY2FzZSA9ICEhdGhpcy5vcHRpb25zLm5vY2FzZTtcbiAgICAgICAgdGhpcy53aW5kb3dzTm9NYWdpY1Jvb3QgPVxuICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzTm9NYWdpY1Jvb3QgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzTm9NYWdpY1Jvb3RcbiAgICAgICAgICAgICAgICA6ICEhKHRoaXMuaXNXaW5kb3dzICYmIHRoaXMubm9jYXNlKTtcbiAgICAgICAgdGhpcy5nbG9iU2V0ID0gW107XG4gICAgICAgIHRoaXMuZ2xvYlBhcnRzID0gW107XG4gICAgICAgIHRoaXMuc2V0ID0gW107XG4gICAgICAgIC8vIG1ha2UgdGhlIHNldCBvZiByZWdleHBzIGV0Yy5cbiAgICAgICAgdGhpcy5tYWtlKCk7XG4gICAgfVxuICAgIGhhc01hZ2ljKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm1hZ2ljYWxCcmFjZXMgJiYgdGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuc2V0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0dGVybikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZGVidWcoLi4uXykgeyB9XG4gICAgbWFrZSgpIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybjtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgLy8gZW1wdHkgcGF0dGVybnMgYW5kIGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgICAgIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgICAgIHRoaXMuZW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0ZXAgMTogZmlndXJlIG91dCBuZWdhdGlvbiwgZXRjLlxuICAgICAgICB0aGlzLnBhcnNlTmVnYXRlKCk7XG4gICAgICAgIC8vIHN0ZXAgMjogZXhwYW5kIGJyYWNlc1xuICAgICAgICB0aGlzLmdsb2JTZXQgPSBbLi4ubmV3IFNldCh0aGlzLmJyYWNlRXhwYW5kKCkpXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgIC8vb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIHRoaXMuZGVidWcgPSAoLi4uYXJncykgPT4gY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgdGhpcy5nbG9iU2V0KTtcbiAgICAgICAgLy8gc3RlcCAzOiBub3cgd2UgaGF2ZSBhIHNldCwgc28gdHVybiBlYWNoIG9uZSBpbnRvIGEgc2VyaWVzIG9mXG4gICAgICAgIC8vIHBhdGgtcG9ydGlvbiBtYXRjaGluZyBwYXR0ZXJucy5cbiAgICAgICAgLy8gVGhlc2Ugd2lsbCBiZSByZWdleHBzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgXCIqKlwiLCB3aGljaCBpc1xuICAgICAgICAvLyBzZXQgdG8gdGhlIEdMT0JTVEFSIG9iamVjdCBmb3IgZ2xvYnN0YXIgYmVoYXZpb3IsXG4gICAgICAgIC8vIGFuZCB3aWxsIG5vdCBjb250YWluIGFueSAvIGNoYXJhY3RlcnNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gRmlyc3QsIHdlIHByZXByb2Nlc3MgdG8gbWFrZSB0aGUgZ2xvYiBwYXR0ZXJuIHNldHMgYSBiaXQgc2ltcGxlclxuICAgICAgICAvLyBhbmQgZGVkdXBlZC4gIFRoZXJlIGFyZSBzb21lIHBlcmYta2lsbGluZyBwYXR0ZXJucyB0aGF0IGNhbiBjYXVzZVxuICAgICAgICAvLyBwcm9ibGVtcyB3aXRoIGEgZ2xvYiB3YWxrLCBidXQgd2UgY2FuIHNpbXBsaWZ5IHRoZW0gZG93biBhIGJpdC5cbiAgICAgICAgY29uc3QgcmF3R2xvYlBhcnRzID0gdGhpcy5nbG9iU2V0Lm1hcChzID0+IHRoaXMuc2xhc2hTcGxpdChzKSk7XG4gICAgICAgIHRoaXMuZ2xvYlBhcnRzID0gdGhpcy5wcmVwcm9jZXNzKHJhd0dsb2JQYXJ0cyk7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLmdsb2JQYXJ0cyk7XG4gICAgICAgIC8vIGdsb2IgLS0+IHJlZ2V4cHNcbiAgICAgICAgbGV0IHNldCA9IHRoaXMuZ2xvYlBhcnRzLm1hcCgocywgXywgX18pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzV2luZG93cyAmJiB0aGlzLndpbmRvd3NOb01hZ2ljUm9vdCkge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGl0J3MgYSBkcml2ZSBvciB1bmMgcGF0aC5cbiAgICAgICAgICAgICAgICBjb25zdCBpc1VOQyA9IHNbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHNbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIChzWzJdID09PSAnPycgfHwgIWdsb2JNYWdpYy50ZXN0KHNbMl0pKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZ2xvYk1hZ2ljLnRlc3Qoc1szXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNEcml2ZSA9IC9eW2Etel06L2kudGVzdChzWzBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNVTkMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnMuc2xpY2UoMCwgNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5zLnNsaWNlKDQpLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSksXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRHJpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzWzBdLCAuLi5zLnNsaWNlKDEpLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KTtcbiAgICAgICAgLy8gZmlsdGVyIG91dCBldmVyeXRoaW5nIHRoYXQgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkuXG4gICAgICAgIHRoaXMuc2V0ID0gc2V0LmZpbHRlcihzID0+IHMuaW5kZXhPZihmYWxzZSkgPT09IC0xKTtcbiAgICAgICAgLy8gZG8gbm90IHRyZWF0IHRoZSA/IGluIFVOQyBwYXRocyBhcyBtYWdpY1xuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gdGhpcy5zZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHBbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHBbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2xvYlBhcnRzW2ldWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBbM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcFsyXSA9ICc/JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuc2V0KTtcbiAgICB9XG4gICAgLy8gdmFyaW91cyB0cmFuc2Zvcm1zIHRvIGVxdWl2YWxlbnQgcGF0dGVybiBzZXRzIHRoYXQgYXJlXG4gICAgLy8gZmFzdGVyIHRvIHByb2Nlc3MgaW4gYSBmaWxlc3lzdGVtIHdhbGsuICBUaGUgZ29hbCBpcyB0b1xuICAgIC8vIGVsaW1pbmF0ZSB3aGF0IHdlIGNhbiwgYW5kIHB1c2ggYWxsICoqIHBhdHRlcm5zIGFzIGZhclxuICAgIC8vIHRvIHRoZSByaWdodCBhcyBwb3NzaWJsZSwgZXZlbiBpZiBpdCBpbmNyZWFzZXMgdGhlIG51bWJlclxuICAgIC8vIG9mIHBhdHRlcm5zIHRoYXQgd2UgaGF2ZSB0byBwcm9jZXNzLlxuICAgIHByZXByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBpbiBnbG9ic3RhciBtb2RlLCB0aGVuIHR1cm4gKiogaW50byAqXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9nbG9ic3Rhcikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0c2V0IG9mIGdsb2JQYXJ0cykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFydHNldC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFydHNldFtqXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNldFtqXSA9ICcqJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IG9wdGltaXphdGlvbkxldmVsID0gMSB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMikge1xuICAgICAgICAgICAgLy8gYWdncmVzc2l2ZSBvcHRpbWl6YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGZzIHdhbGtpbmdcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuZmlyc3RQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKTtcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuc2Vjb25kUGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMSkge1xuICAgICAgICAgICAgLy8ganVzdCBiYXNpYyBvcHRpbWl6YXRpb25zIHRvIHJlbW92ZSBzb21lIC4uIHBhcnRzXG4gICAgICAgICAgICBnbG9iUGFydHMgPSB0aGlzLmxldmVsT25lT3B0aW1pemUoZ2xvYlBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGp1c3QgY29sbGFwc2UgbXVsdGlwbGUgKiogcG9ydGlvbnMgaW50byBvbmVcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuYWRqYXNjZW50R2xvYnN0YXJPcHRpbWl6ZShnbG9iUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iUGFydHM7XG4gICAgfVxuICAgIC8vIGp1c3QgZ2V0IHJpZCBvZiBhZGphc2NlbnQgKiogcG9ydGlvbnNcbiAgICBhZGphc2NlbnRHbG9ic3Rhck9wdGltaXplKGdsb2JQYXJ0cykge1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLm1hcChwYXJ0cyA9PiB7XG4gICAgICAgICAgICBsZXQgZ3MgPSAtMTtcbiAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGdzID0gcGFydHMuaW5kZXhPZignKionLCBncyArIDEpKSkge1xuICAgICAgICAgICAgICAgIGxldCBpID0gZ3M7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHBhcnRzW2kgKyAxXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpICE9PSBncykge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MsIGkgLSBncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZ2V0IHJpZCBvZiBhZGphc2NlbnQgKiogYW5kIHJlc29sdmUgLi4gcG9ydGlvbnNcbiAgICBsZXZlbE9uZU9wdGltaXplKGdsb2JQYXJ0cykge1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLm1hcChwYXJ0cyA9PiB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLnJlZHVjZSgoc2V0LCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IHNldFtzZXQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcqKicgJiYgcHJldiA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAmJiBwcmV2ICE9PSAnLi4nICYmIHByZXYgIT09ICcuJyAmJiBwcmV2ICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldC5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gWycnXSA6IHBhcnRzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGV2ZWxUd29GaWxlT3B0aW1pemUocGFydHMpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnRzKSkge1xuICAgICAgICAgICAgcGFydHMgPSB0aGlzLnNsYXNoU3BsaXQocGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBzcXVlZXplIG91dCBVTkMgcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgcCA9PT0gJycgJiYgcGFydHNbMF0gPT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwID09PSAnLicgfHwgcCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzWzBdID09PSAnLicgJiZcbiAgICAgICAgICAgICAgICAgICAgcGFydHMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXSA9PT0gJy4nIHx8IHBhcnRzWzFdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gPHByZT4vPHA+Ly4uLzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAgICAgICAgIGxldCBkZCA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoLTEgIT09IChkZCA9IHBhcnRzLmluZGV4T2YoJy4uJywgZGQgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZGQgLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocCAmJlxuICAgICAgICAgICAgICAgICAgICBwICE9PSAnLicgJiZcbiAgICAgICAgICAgICAgICAgICAgcCAhPT0gJy4uJyAmJlxuICAgICAgICAgICAgICAgICAgICBwICE9PSAnKionICYmXG4gICAgICAgICAgICAgICAgICAgICEodGhpcy5pc1dpbmRvd3MgJiYgL15bYS16XTokL2kudGVzdChwKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMik7XG4gICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChkaWRTb21ldGhpbmcpO1xuICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gWycnXSA6IHBhcnRzO1xuICAgIH1cbiAgICAvLyBGaXJzdCBwaGFzZTogc2luZ2xlLXBhdHRlcm4gcHJvY2Vzc2luZ1xuICAgIC8vIDxwcmU+IGlzIDEgb3IgbW9yZSBwb3J0aW9uc1xuICAgIC8vIDxyZXN0PiBpcyAxIG9yIG1vcmUgcG9ydGlvbnNcbiAgICAvLyA8cD4gaXMgYW55IHBvcnRpb24gb3RoZXIgdGhhbiAuLCAuLiwgJycsIG9yICoqXG4gICAgLy8gPGU+IGlzIC4gb3IgJydcbiAgICAvL1xuICAgIC8vICoqLy4uIGlzICpicnV0YWwqIGZvciBmaWxlc3lzdGVtIHdhbGtpbmcgcGVyZm9ybWFuY2UsIGJlY2F1c2VcbiAgICAvLyBpdCBlZmZlY3RpdmVseSByZXNldHMgdGhlIHJlY3Vyc2l2ZSB3YWxrIGVhY2ggdGltZSBpdCBvY2N1cnMsXG4gICAgLy8gYW5kICoqIGNhbm5vdCBiZSByZWR1Y2VkIG91dCBieSBhIC4uIHBhdHRlcm4gcGFydCBsaWtlIGEgcmVnZXhwXG4gICAgLy8gb3IgbW9zdCBzdHJpbmdzIChvdGhlciB0aGFuIC4uLCAuLCBhbmQgJycpIGNhbiBiZS5cbiAgICAvL1xuICAgIC8vIDxwcmU+LyoqLy4uLzxwPi88cD4vPHJlc3Q+IC0+IHs8cHJlPi8uLi88cD4vPHA+LzxyZXN0Piw8cHJlPi8qKi88cD4vPHA+LzxyZXN0Pn1cbiAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIDxwcmU+LzxwPi8uLi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgLy8gKiovKiovPHJlc3Q+IC0+ICoqLzxyZXN0PlxuICAgIC8vXG4gICAgLy8gKiovKi88cmVzdD4gLT4gKi8qKi88cmVzdD4gPD09IG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZXNuJ3QgZm9sbG93XG4gICAgLy8gdGhpcyBXT1VMRCBiZSBhbGxvd2VkIGlmICoqIGRpZCBmb2xsb3cgc3ltbGlua3MsIG9yICogZGlkbid0XG4gICAgZmlyc3RQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIGxldCBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyA8cHJlPi8qKi8uLi88cD4vPHA+LzxyZXN0PiAtPiB7PHByZT4vLi4vPHA+LzxwPi88cmVzdD4sPHByZT4vKiovPHA+LzxwPi88cmVzdD59XG4gICAgICAgICAgICBmb3IgKGxldCBwYXJ0cyBvZiBnbG9iUGFydHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ3MgPSAtMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoLTEgIT09IChncyA9IHBhcnRzLmluZGV4T2YoJyoqJywgZ3MgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdzcyA9IGdzO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbZ3NzICsgMV0gPT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxwcmU+LyoqLyoqLzxyZXN0PiAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdzcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGVnLCBpZiBncyBpcyAyIGFuZCBnc3MgaXMgNCwgdGhhdCBtZWFucyB3ZSBoYXZlIDMgKipcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFydHMsIGFuZCBjYW4gcmVtb3ZlIDIgb2YgdGhlbS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdzcyA+IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MgKyAxLCBnc3MgLSBncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBwYXJ0c1tncyArIDFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZ3MgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcDIgPSBwYXJ0c1tncyArIDNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gJy4uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXAyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZWRpdCBwYXJ0cyBpbiBwbGFjZSwgYW5kIHB1c2ggdGhlIG5ldyBvbmVcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGdzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RoZXIgPSBwYXJ0cy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJbZ3NdID0gJyoqJztcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzLnB1c2gob3RoZXIpO1xuICAgICAgICAgICAgICAgICAgICBncy0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc3F1ZWV6ZSBvdXQgVU5DIHBhdHRlcm5zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PT0gJy4nIHx8IHAgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c1swXSA9PT0gJy4nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXSA9PT0gJy4nIHx8IHBhcnRzWzFdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGxldCBkZCA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZGQgPSBwYXJ0cy5pbmRleE9mKCcuLicsIGRkICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocCAmJiBwICE9PSAnLicgJiYgcCAhPT0gJy4uJyAmJiBwICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZERvdCA9IGRkID09PSAxICYmIHBhcnRzW2RkICsgMV0gPT09ICcqKic7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpbiA9IG5lZWREb3QgPyBbJy4nXSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMiwgLi4uc3BsaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGRpZFNvbWV0aGluZyk7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHM7XG4gICAgfVxuICAgIC8vIHNlY29uZCBwaGFzZTogbXVsdGktcGF0dGVybiBkZWR1cGVzXG4gICAgLy8gezxwcmU+LyovPHJlc3Q+LDxwcmU+LzxwPi88cmVzdD59IC0+IDxwcmU+LyovPHJlc3Q+XG4gICAgLy8gezxwcmU+LzxyZXN0Piw8cHJlPi88cmVzdD59IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vPHJlc3Q+fSAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAvL1xuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vKiovPHA+LzxyZXN0Pn0gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgLy8gXi0tIG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZW5zJ3QgZm9sbG93IHN5bWxpbmtzXG4gICAgc2Vjb25kUGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsb2JQYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGdsb2JQYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSB0aGlzLnBhcnRzTWF0Y2goZ2xvYlBhcnRzW2ldLCBnbG9iUGFydHNbal0sICF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iUGFydHNbaV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2pdID0gbWF0Y2hlZDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMuZmlsdGVyKGdzID0+IGdzLmxlbmd0aCk7XG4gICAgfVxuICAgIHBhcnRzTWF0Y2goYSwgYiwgZW1wdHlHU01hdGNoID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGFpID0gMDtcbiAgICAgICAgbGV0IGJpID0gMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgd2hpY2ggPSAnJztcbiAgICAgICAgd2hpbGUgKGFpIDwgYS5sZW5ndGggJiYgYmkgPCBiLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGFbYWldID09PSBiW2JpXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHdoaWNoID09PSAnYicgPyBiW2JpXSA6IGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlbXB0eUdTTWF0Y2ggJiYgYVthaV0gPT09ICcqKicgJiYgYltiaV0gPT09IGFbYWkgKyAxXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZW1wdHlHU01hdGNoICYmIGJbYmldID09PSAnKionICYmIGFbYWldID09PSBiW2JpICsgMV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFbYWldID09PSAnKicgJiZcbiAgICAgICAgICAgICAgICBiW2JpXSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuZG90IHx8ICFiW2JpXS5zdGFydHNXaXRoKCcuJykpICYmXG4gICAgICAgICAgICAgICAgYltiaV0gIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICBpZiAod2hpY2ggPT09ICdiJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHdoaWNoID0gJ2EnO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiW2JpXSA9PT0gJyonICYmXG4gICAgICAgICAgICAgICAgYVthaV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmRvdCB8fCAhYVthaV0uc3RhcnRzV2l0aCgnLicpKSAmJlxuICAgICAgICAgICAgICAgIGFbYWldICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdoaWNoID09PSAnYScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGljaCA9ICdiJztcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlIGZhbGwgb3V0IG9mIHRoZSBsb29wLCBpdCBtZWFucyB0aGV5IHR3byBhcmUgaWRlbnRpY2FsXG4gICAgICAgIC8vIGFzIGxvbmcgYXMgdGhlaXIgbGVuZ3RocyBtYXRjaFxuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIHJlc3VsdDtcbiAgICB9XG4gICAgcGFyc2VOZWdhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm5vbmVnYXRlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBsZXQgbmVnYXRlID0gZmFsc2U7XG4gICAgICAgIGxldCBuZWdhdGVPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoICYmIHBhdHRlcm4uY2hhckF0KGkpID09PSAnISc7IGkrKykge1xuICAgICAgICAgICAgbmVnYXRlID0gIW5lZ2F0ZTtcbiAgICAgICAgICAgIG5lZ2F0ZU9mZnNldCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWdhdGVPZmZzZXQpXG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKG5lZ2F0ZU9mZnNldCk7XG4gICAgICAgIHRoaXMubmVnYXRlID0gbmVnYXRlO1xuICAgIH1cbiAgICAvLyBzZXQgcGFydGlhbCB0byB0cnVlIHRvIHRlc3QgaWYsIGZvciBleGFtcGxlLFxuICAgIC8vIFwiL2EvYlwiIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIFwiLyovYi8qL2RcIlxuICAgIC8vIFBhcnRpYWwgbWVhbnMsIGlmIHlvdSBydW4gb3V0IG9mIGZpbGUgYmVmb3JlIHlvdSBydW5cbiAgICAvLyBvdXQgb2YgcGF0dGVybiwgdGhlbiB0aGF0J3MgZmluZSwgYXMgbG9uZyBhcyBhbGxcbiAgICAvLyB0aGUgcGFydHMgbWF0Y2guXG4gICAgbWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBmaWxlU3RhcnRJbmRleCA9IDA7XG4gICAgICAgIGxldCBwYXR0ZXJuU3RhcnRJbmRleCA9IDA7XG4gICAgICAgIC8vIFVOQyBwYXRocyBsaWtlIC8vPy9YOi8uLi4gY2FuIG1hdGNoIFg6Ly4uLiBhbmQgdmljZSB2ZXJzYVxuICAgICAgICAvLyBEcml2ZSBsZXR0ZXJzIGluIGFic29sdXRlIGRyaXZlIG9yIHVuYyBwYXRocyBhcmUgYWx3YXlzIGNvbXBhcmVkXG4gICAgICAgIC8vIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlRHJpdmUgPSB0eXBlb2YgZmlsZVswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChmaWxlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVVTkMgPSAhZmlsZURyaXZlICYmXG4gICAgICAgICAgICAgICAgZmlsZVswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWxlWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpbGVbMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QoZmlsZVszXSk7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuRHJpdmUgPSB0eXBlb2YgcGF0dGVyblswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChwYXR0ZXJuWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5VTkMgPSAhcGF0dGVybkRyaXZlICYmXG4gICAgICAgICAgICAgICAgcGF0dGVyblswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBwYXR0ZXJuWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIHBhdHRlcm5bMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwYXR0ZXJuWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocGF0dGVyblszXSk7XG4gICAgICAgICAgICBjb25zdCBmZGkgPSBmaWxlVU5DID8gM1xuICAgICAgICAgICAgICAgIDogZmlsZURyaXZlID8gMFxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBkaSA9IHBhdHRlcm5VTkMgPyAzXG4gICAgICAgICAgICAgICAgOiBwYXR0ZXJuRHJpdmUgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmZGkgPT09ICdudW1iZXInICYmIHR5cGVvZiBwZGkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2ZkLCBwZF0gPSBbXG4gICAgICAgICAgICAgICAgICAgIGZpbGVbZmRpXSxcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybltwZGldLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgbWF0Y2hpbmcgYXQgdGhlIGRyaXZlIGxldHRlciBpbmRleCBvZiBlYWNoXG4gICAgICAgICAgICAgICAgaWYgKGZkLnRvTG93ZXJDYXNlKCkgPT09IHBkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybltwZGldID0gZmQ7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5TdGFydEluZGV4ID0gcGRpO1xuICAgICAgICAgICAgICAgICAgICBmaWxlU3RhcnRJbmRleCA9IGZkaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzb2x2ZSBhbmQgcmVkdWNlIC4gYW5kIC4uIHBvcnRpb25zIGluIHRoZSBmaWxlIGFzIHdlbGwuXG4gICAgICAgIC8vIGRvbid0IG5lZWQgdG8gZG8gdGhlIHNlY29uZCBwaGFzZSwgYmVjYXVzZSBpdCdzIG9ubHkgb25lIHN0cmluZ1tdXG4gICAgICAgIGNvbnN0IHsgb3B0aW1pemF0aW9uTGV2ZWwgPSAxIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAyKSB7XG4gICAgICAgICAgICBmaWxlID0gdGhpcy5sZXZlbFR3b0ZpbGVPcHRpbWl6ZShmaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0dGVybi5pbmNsdWRlcyhHTE9CU1RBUikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNtYXRjaEdsb2JzdGFyKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwsIGZpbGVTdGFydEluZGV4LCBwYXR0ZXJuU3RhcnRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuI21hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwsIGZpbGVTdGFydEluZGV4LCBwYXR0ZXJuU3RhcnRJbmRleCk7XG4gICAgfVxuICAgICNtYXRjaEdsb2JzdGFyKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwsIGZpbGVJbmRleCwgcGF0dGVybkluZGV4KSB7XG4gICAgICAgIC8vIHNwbGl0IHRoZSBwYXR0ZXJuIGludG8gaGVhZCwgdGFpbCwgYW5kIG1pZGRsZSBvZiAqKiBkZWxpbWl0ZWQgcGFydHNcbiAgICAgICAgY29uc3QgZmlyc3RncyA9IHBhdHRlcm4uaW5kZXhPZihHTE9CU1RBUiwgcGF0dGVybkluZGV4KTtcbiAgICAgICAgY29uc3QgbGFzdGdzID0gcGF0dGVybi5sYXN0SW5kZXhPZihHTE9CU1RBUik7XG4gICAgICAgIC8vIHNwbGl0IHRoZSBwYXR0ZXJuIHVwIGludG8gZ2xvYnN0YXItZGVsaW1pdGVkIHNlY3Rpb25zXG4gICAgICAgIC8vIHRoZSB0YWlsIGhhcyB0byBiZSBhdCB0aGUgZW5kLCBhbmQgdGhlIG90aGVycyBqdXN0IGhhdmVcbiAgICAgICAgLy8gdG8gYmUgZm91bmQgaW4gb3JkZXIgZnJvbSB0aGUgaGVhZC5cbiAgICAgICAgY29uc3QgW2hlYWQsIGJvZHksIHRhaWxdID0gcGFydGlhbCA/XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgcGF0dGVybi5zbGljZShwYXR0ZXJuSW5kZXgsIGZpcnN0Z3MpLFxuICAgICAgICAgICAgICAgIHBhdHRlcm4uc2xpY2UoZmlyc3RncyArIDEpLFxuICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgcGF0dGVybi5zbGljZShwYXR0ZXJuSW5kZXgsIGZpcnN0Z3MpLFxuICAgICAgICAgICAgICAgIHBhdHRlcm4uc2xpY2UoZmlyc3RncyArIDEsIGxhc3RncyksXG4gICAgICAgICAgICAgICAgcGF0dGVybi5zbGljZShsYXN0Z3MgKyAxKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIC8vIGNoZWNrIHRoZSBoZWFkLCBmcm9tIHRoZSBjdXJyZW50IGZpbGUvcGF0dGVybiBpbmRleC5cbiAgICAgICAgaWYgKGhlYWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlSGVhZCA9IGZpbGUuc2xpY2UoZmlsZUluZGV4LCBmaWxlSW5kZXggKyBoZWFkLmxlbmd0aCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuI21hdGNoT25lKGZpbGVIZWFkLCBoZWFkLCBwYXJ0aWFsLCAwLCAwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbGVJbmRleCArPSBoZWFkLmxlbmd0aDtcbiAgICAgICAgICAgIHBhdHRlcm5JbmRleCArPSBoZWFkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgd2Uga25vdyB0aGUgaGVhZCBtYXRjaGVzIVxuICAgICAgICAvLyBpZiB0aGUgbGFzdCBwb3J0aW9uIGlzIG5vdCBlbXB0eSwgaXQgTVVTVCBtYXRjaCB0aGUgZW5kXG4gICAgICAgIC8vIGNoZWNrIHRoZSB0YWlsXG4gICAgICAgIGxldCBmaWxlVGFpbE1hdGNoID0gMDtcbiAgICAgICAgaWYgKHRhaWwubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBpZiBoZWFkICsgdGFpbCA+IGZpbGUsIHRoZW4gd2UgY2Fubm90IHBvc3NpYmx5IG1hdGNoXG4gICAgICAgICAgICBpZiAodGFpbC5sZW5ndGggKyBmaWxlSW5kZXggPiBmaWxlLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAvLyB0cnkgdG8gbWF0Y2ggdGhlIHRhaWxcbiAgICAgICAgICAgIGxldCB0YWlsU3RhcnQgPSBmaWxlLmxlbmd0aCAtIHRhaWwubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMuI21hdGNoT25lKGZpbGUsIHRhaWwsIHBhcnRpYWwsIHRhaWxTdGFydCwgMCkpIHtcbiAgICAgICAgICAgICAgICBmaWxlVGFpbE1hdGNoID0gdGFpbC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBhZmZvcmRhbmNlIGZvciBzdHVmZiBsaWtlIGEvKiovKiBtYXRjaGluZyBhL2IvXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGxhc3QgZmlsZSBwb3J0aW9uIGlzICcnLCBhbmQgdGhlcmUncyBtb3JlIHRvIHRoZSBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgLy8gdGhlbiB0cnkgd2l0aG91dCB0aGUgJycgYml0LlxuICAgICAgICAgICAgICAgIGlmIChmaWxlW2ZpbGUubGVuZ3RoIC0gMV0gIT09ICcnIHx8XG4gICAgICAgICAgICAgICAgICAgIGZpbGVJbmRleCArIHRhaWwubGVuZ3RoID09PSBmaWxlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhaWxTdGFydC0tO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy4jbWF0Y2hPbmUoZmlsZSwgdGFpbCwgcGFydGlhbCwgdGFpbFN0YXJ0LCAwKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbGVUYWlsTWF0Y2ggPSB0YWlsLmxlbmd0aCArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IHdlIGtub3cgdGhlIHRhaWwgbWF0Y2hlcyFcbiAgICAgICAgLy8gdGhlIG1pZGRsZSBpcyB6ZXJvIG9yIG1vcmUgcG9ydGlvbnMgd3JhcHBlZCBpbiAqKiwgcG9zc2libHlcbiAgICAgICAgLy8gY29udGFpbmluZyBtb3JlICoqIHNlY3Rpb25zLlxuICAgICAgICAvLyBzbyBhLyoqL2IvKiovYy8qKi9kIGhhcyBiZWNvbWUgKiovYi8qKi9jLyoqXG4gICAgICAgIC8vIGlmIGl0J3MgZW1wdHksIGl0IG1lYW5zIGEvKiovYiwganVzdCB2ZXJpZnkgd2UgaGF2ZSBubyBiYWQgZG90c1xuICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIHRhaWwsIHNvIGl0IGVuZHMgb24gLyoqLCB0aGVuIHdlIG11c3QgaGF2ZSAqc29tZXRoaW5nKlxuICAgICAgICAvLyBhZnRlciB0aGUgaGVhZCwgb3IgaXQncyBub3QgYSBtYXRjXG4gICAgICAgIGlmICghYm9keS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBzYXdTb21lID0gISFmaWxlVGFpbE1hdGNoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZpbGVJbmRleDsgaSA8IGZpbGUubGVuZ3RoIC0gZmlsZVRhaWxNYXRjaDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZiA9IFN0cmluZyhmaWxlW2ldKTtcbiAgICAgICAgICAgICAgICBzYXdTb21lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgIGYgPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAgICAgKCF0aGlzLm9wdGlvbnMuZG90ICYmIGYuc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaW4gcGFydGlhbCBtb2RlLCB3ZSBqdXN0IG5lZWQgdG8gZ2V0IHBhc3QgYWxsIGZpbGUgcGFydHNcbiAgICAgICAgICAgIHJldHVybiBwYXJ0aWFsIHx8IHNhd1NvbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IHdlIGtub3cgdGhhdCB0aGVyZSdzIG9uZSBvciBtb3JlIGJvZHkgc2VjdGlvbnMsIHdoaWNoIGNhblxuICAgICAgICAvLyBiZSBtYXRjaGVkIGFueXdoZXJlIGZyb20gdGhlIDAgaW5kZXggKGJlY2F1c2UgdGhlIGhlYWQgd2FzIHBydW5lZClcbiAgICAgICAgLy8gdGhyb3VnaCB0byB0aGUgbGVuZ3RoLWZpbGVUYWlsTWF0Y2ggaW5kZXguXG4gICAgICAgIC8vIHNwbGl0IHRoZSBib2R5IHVwIGludG8gc2VjdGlvbnMsIGFuZCBub3RlIHRoZSBtaW5pbXVtIGluZGV4IGl0IGNhblxuICAgICAgICAvLyBiZSBmb3VuZCBhdCAoc3RhcnQgd2l0aCB0aGUgbGVuZ3RoIG9mIGFsbCBwcmV2aW91cyBzZWdtZW50cylcbiAgICAgICAgLy8gW3NlY3Rpb24sIGJlZm9yZSwgYWZ0ZXJdXG4gICAgICAgIGNvbnN0IGJvZHlTZWdtZW50cyA9IFtbW10sIDBdXTtcbiAgICAgICAgbGV0IGN1cnJlbnRCb2R5ID0gYm9keVNlZ21lbnRzWzBdO1xuICAgICAgICBsZXQgbm9uR3NQYXJ0cyA9IDA7XG4gICAgICAgIGNvbnN0IG5vbkdzUGFydHNTdW1zID0gWzBdO1xuICAgICAgICBmb3IgKGNvbnN0IGIgb2YgYm9keSkge1xuICAgICAgICAgICAgaWYgKGIgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgbm9uR3NQYXJ0c1N1bXMucHVzaChub25Hc1BhcnRzKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50Qm9keSA9IFtbXSwgMF07XG4gICAgICAgICAgICAgICAgYm9keVNlZ21lbnRzLnB1c2goY3VycmVudEJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEJvZHlbMF0ucHVzaChiKTtcbiAgICAgICAgICAgICAgICBub25Hc1BhcnRzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSBib2R5U2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgZmlsZUxlbmd0aCA9IGZpbGUubGVuZ3RoIC0gZmlsZVRhaWxNYXRjaDtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIGJvZHlTZWdtZW50cykge1xuICAgICAgICAgICAgYlsxXSA9IGZpbGVMZW5ndGggLSAobm9uR3NQYXJ0c1N1bXNbaS0tXSArIGJbMF0ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISF0aGlzLiNtYXRjaEdsb2JTdGFyQm9keVNlY3Rpb25zKGZpbGUsIGJvZHlTZWdtZW50cywgZmlsZUluZGV4LCAwLCBwYXJ0aWFsLCAwLCAhIWZpbGVUYWlsTWF0Y2gpO1xuICAgIH1cbiAgICAvLyByZXR1cm4gZmFsc2UgZm9yIFwibm9wZSwgbm90IG1hdGNoaW5nXCJcbiAgICAvLyByZXR1cm4gbnVsbCBmb3IgXCJub3QgbWF0Y2hpbmcsIGNhbm5vdCBrZWVwIHRyeWluZ1wiXG4gICAgI21hdGNoR2xvYlN0YXJCb2R5U2VjdGlvbnMoZmlsZSwgXG4gICAgLy8gcGF0dGVybiBzZWN0aW9uLCBsYXN0IHBvc3NpYmxlIHBvc2l0aW9uIGZvciBpdFxuICAgIGJvZHlTZWdtZW50cywgZmlsZUluZGV4LCBib2R5SW5kZXgsIHBhcnRpYWwsIGdsb2JTdGFyRGVwdGgsIHNhd1RhaWwpIHtcbiAgICAgICAgLy8gdGFrZSB0aGUgZmlyc3QgYm9keSBzZWdtZW50LCBhbmQgd2FsayBmcm9tIGZpbGVJbmRleCB0byBpdHMgXCJhZnRlclwiXG4gICAgICAgIC8vIHZhbHVlIGF0IHRoZSBlbmRcbiAgICAgICAgLy8gSWYgaXQgZG9lc24ndCBtYXRjaCBhdCB0aGF0IHBvc2l0aW9uLCB3ZSBpbmNyZW1lbnQsIHVudGlsIHdlIGhpdFxuICAgICAgICAvLyB0aGF0IGZpbmFsIHBvc3NpYmxlIHBvc2l0aW9uLCBhbmQgZ2l2ZSB1cC5cbiAgICAgICAgLy8gSWYgaXQgZG9lcyBtYXRjaCwgdGhlbiBhZHZhbmNlIGFuZCB0cnkgdG8gcmVzdC5cbiAgICAgICAgLy8gSWYgYW55IG9mIHRoZW0gZmFpbCB3ZSBrZWVwIHdhbGtpbmcgZm9yd2FyZC5cbiAgICAgICAgLy8gdGhpcyBpcyBzdGlsbCBhIGJpdCByZWN1cnNpdmVseSBwYWluZnVsLCBidXQgaXQncyBtb3JlIGNvbnN0cmFpbmVkXG4gICAgICAgIC8vIHRoYW4gcHJldmlvdXMgaW1wbGVtZW50YXRpb25zLCBiZWNhdXNlIHdlIG5ldmVyIHRlc3Qgc29tZXRoaW5nIHRoYXRcbiAgICAgICAgLy8gY2FuJ3QgcG9zc2libHkgYmUgYSB2YWxpZCBtYXRjaGluZyBjb25kaXRpb24uXG4gICAgICAgIGNvbnN0IGJzID0gYm9keVNlZ21lbnRzW2JvZHlJbmRleF07XG4gICAgICAgIGlmICghYnMpIHtcbiAgICAgICAgICAgIC8vIGp1c3QgbWFrZSBzdXJlIHRoYXQgdGhlcmUncyBubyBiYWQgZG90c1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZpbGVJbmRleDsgaSA8IGZpbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzYXdUYWlsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBmID0gZmlsZVtpXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgIGYgPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAgICAgKCF0aGlzLm9wdGlvbnMuZG90ICYmIGYuc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNhd1RhaWw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGF2ZSBhIG5vbi1nbG9ic3RhciBib2R5IHNlY3Rpb24gdG8gdGVzdFxuICAgICAgICBjb25zdCBbYm9keSwgYWZ0ZXJdID0gYnM7XG4gICAgICAgIHdoaWxlIChmaWxlSW5kZXggPD0gYWZ0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSB0aGlzLiNtYXRjaE9uZShmaWxlLnNsaWNlKDAsIGZpbGVJbmRleCArIGJvZHkubGVuZ3RoKSwgYm9keSwgcGFydGlhbCwgZmlsZUluZGV4LCAwKTtcbiAgICAgICAgICAgIC8vIGlmIGxpbWl0IGV4Y2VlZGVkLCBubyBtYXRjaC4gaW50ZW50aW9uYWwgZmFsc2UgbmVnYXRpdmUsXG4gICAgICAgICAgICAvLyBhY2NlcHRhYmxlIGJyZWFrIGluIGNvcnJlY3RuZXNzIGZvciBzZWN1cml0eS5cbiAgICAgICAgICAgIGlmIChtICYmIGdsb2JTdGFyRGVwdGggPCB0aGlzLm1heEdsb2JzdGFyUmVjdXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gbWF0Y2ghIHNlZSBpZiB0aGUgcmVzdCBtYXRjaC4gaWYgc28sIHdlJ3JlIGRvbmUhXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gdGhpcy4jbWF0Y2hHbG9iU3RhckJvZHlTZWN0aW9ucyhmaWxlLCBib2R5U2VnbWVudHMsIGZpbGVJbmRleCArIGJvZHkubGVuZ3RoLCBib2R5SW5kZXggKyAxLCBwYXJ0aWFsLCBnbG9iU3RhckRlcHRoICsgMSwgc2F3VGFpbCk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmID0gZmlsZVtmaWxlSW5kZXhdO1xuICAgICAgICAgICAgaWYgKGYgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgIGYgPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAoIXRoaXMub3B0aW9ucy5kb3QgJiYgZi5zdGFydHNXaXRoKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsZUluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2Fsa2VkIG9mZi4gbm8gcG9pbnQgY29udGludWluZ1xuICAgICAgICByZXR1cm4gcGFydGlhbCB8fCBudWxsO1xuICAgIH1cbiAgICAjbWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCwgZmlsZUluZGV4LCBwYXR0ZXJuSW5kZXgpIHtcbiAgICAgICAgbGV0IGZpO1xuICAgICAgICBsZXQgcGk7XG4gICAgICAgIGxldCBwbDtcbiAgICAgICAgbGV0IGZsO1xuICAgICAgICBmb3IgKGZpID0gZmlsZUluZGV4LFxuICAgICAgICAgICAgcGkgPSBwYXR0ZXJuSW5kZXgsXG4gICAgICAgICAgICBmbCA9IGZpbGUubGVuZ3RoLFxuICAgICAgICAgICAgcGwgPSBwYXR0ZXJuLmxlbmd0aDsgZmkgPCBmbCAmJiBwaSA8IHBsOyBmaSsrLCBwaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZSBsb29wJyk7XG4gICAgICAgICAgICBsZXQgcCA9IHBhdHRlcm5bcGldO1xuICAgICAgICAgICAgbGV0IGYgPSBmaWxlW2ZpXTtcbiAgICAgICAgICAgIHRoaXMuZGVidWcocGF0dGVybiwgcCwgZik7XG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgaW1wb3NzaWJsZS5cbiAgICAgICAgICAgIC8vIHNvbWUgaW52YWxpZCByZWdleHAgc3R1ZmYgaW4gdGhlIHNldC5cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHAgPT09IGZhbHNlIHx8IHAgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBvdGhlciB0aGFuICoqXG4gICAgICAgICAgICAvLyBub24tbWFnaWMgcGF0dGVybnMganVzdCBoYXZlIHRvIG1hdGNoIGV4YWN0bHlcbiAgICAgICAgICAgIC8vIHBhdHRlcm5zIHdpdGggbWFnaWMgaGF2ZSBiZWVuIHR1cm5lZCBpbnRvIHJlZ2V4cHMuXG4gICAgICAgICAgICBsZXQgaGl0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGhpdCA9IGYgPT09IHA7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Zygnc3RyaW5nIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpdCA9IHAudGVzdChmKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdwYXR0ZXJuIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGl0KVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBlbmRpbmcgaW4gLyBtZWFucyB0aGF0IHdlJ2xsIGdldCBhIGZpbmFsIFwiXCJcbiAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gIFRoaXMgY2FuIG9ubHkgbWF0Y2ggYVxuICAgICAgICAvLyBjb3JyZXNwb25kaW5nIFwiXCIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICAgICAgLy8gSWYgdGhlIGZpbGUgZW5kcyBpbiAvLCB0aGVuIGl0IGNhbiBvbmx5IG1hdGNoIGFcbiAgICAgICAgLy8gYSBwYXR0ZXJuIHRoYXQgZW5kcyBpbiAvLCB1bmxlc3MgdGhlIHBhdHRlcm4ganVzdFxuICAgICAgICAvLyBkb2Vzbid0IGhhdmUgYW55IG1vcmUgZm9yIGl0LiBCdXQsIGEvYi8gc2hvdWxkICpub3QqXG4gICAgICAgIC8vIG1hdGNoIFwiYS9iLypcIiwgZXZlbiB0aG91Z2ggXCJcIiBtYXRjaGVzIGFnYWluc3QgdGhlXG4gICAgICAgIC8vIFteL10qPyBwYXR0ZXJuLCBleGNlcHQgaW4gcGFydGlhbCBtb2RlLCB3aGVyZSBpdCBtaWdodFxuICAgICAgICAvLyBzaW1wbHkgbm90IGJlIHJlYWNoZWQgeWV0LlxuICAgICAgICAvLyBIb3dldmVyLCBhL2IvIHNob3VsZCBzdGlsbCBzYXRpc2Z5IGEvKlxuICAgICAgICAvLyBub3cgZWl0aGVyIHdlIGZlbGwgb2ZmIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIG9yIHdlJ3JlIGRvbmUuXG4gICAgICAgIGlmIChmaSA9PT0gZmwgJiYgcGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4gYW5kIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICAgICAgICAvLyBhbiBleGFjdCBoaXQhXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaSA9PT0gZmwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZSwgYnV0IHN0aWxsIGhhZCBwYXR0ZXJuIGxlZnQuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG9rIGlmIHdlJ3JlIGRvaW5nIHRoZSBtYXRjaCBhcyBwYXJ0IG9mXG4gICAgICAgICAgICAvLyBhIGdsb2IgZnMgdHJhdmVyc2FsLlxuICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4sIHN0aWxsIGhhdmUgZmlsZSBsZWZ0LlxuICAgICAgICAgICAgLy8gdGhpcyBpcyBvbmx5IGFjY2VwdGFibGUgaWYgd2UncmUgb24gdGhlIHZlcnkgbGFzdFxuICAgICAgICAgICAgLy8gZW1wdHkgc2VnbWVudCBvZiBhIGZpbGUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICAgICAgICAgICAgLy8gYS8qIHNob3VsZCBtYXRjaCBhL2IvXG4gICAgICAgICAgICByZXR1cm4gZmkgPT09IGZsIC0gMSAmJiBmaWxlW2ZpXSA9PT0gJyc7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSB1bnJlYWNoYWJsZS5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd3RmPycpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgIGJyYWNlRXhwYW5kKCkge1xuICAgICAgICByZXR1cm4gYnJhY2VFeHBhbmQodGhpcy5wYXR0ZXJuLCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgICBwYXJzZShwYXR0ZXJuKSB7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgLy8gc2hvcnRjdXRzXG4gICAgICAgIGlmIChwYXR0ZXJuID09PSAnKionKVxuICAgICAgICAgICAgcmV0dXJuIEdMT0JTVEFSO1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJycpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIC8vIGZhciBhbmQgYXdheSwgdGhlIG1vc3QgY29tbW9uIGdsb2IgcGF0dGVybiBwYXJ0cyBhcmVcbiAgICAgICAgLy8gKiwgKi4qLCBhbmQgKi48ZXh0PiAgQWRkIGEgZmFzdCBjaGVjayBtZXRob2QgZm9yIHRob3NlLlxuICAgICAgICBsZXQgbTtcbiAgICAgICAgbGV0IGZhc3RUZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJUZXN0RG90IDogc3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RFeHRSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZSA/XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kb3QgP1xuICAgICAgICAgICAgICAgICAgICBzdGFyRG90RXh0VGVzdE5vY2FzZURvdFxuICAgICAgICAgICAgICAgICAgICA6IHN0YXJEb3RFeHRUZXN0Tm9jYXNlXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLmRvdCA/IHN0YXJEb3RFeHRUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogc3RhckRvdEV4dFRlc3QpKG1bMV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChxbWFya3NSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZSA/XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kb3QgP1xuICAgICAgICAgICAgICAgICAgICBxbWFya3NUZXN0Tm9jYXNlRG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdE5vY2FzZVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5kb3QgPyBxbWFya3NUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdCkobSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RTdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJEb3RTdGFyVGVzdERvdCA6IHN0YXJEb3RTdGFyVGVzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goZG90U3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gZG90U3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmUgPSBBU1QuZnJvbUdsb2IocGF0dGVybiwgdGhpcy5vcHRpb25zKS50b01NUGF0dGVybigpO1xuICAgICAgICBpZiAoZmFzdFRlc3QgJiYgdHlwZW9mIHJlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgLy8gQXZvaWRzIG92ZXJyaWRpbmcgaW4gZnJvemVuIGVudmlyb25tZW50c1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyZSwgJ3Rlc3QnLCB7IHZhbHVlOiBmYXN0VGVzdCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmU7XG4gICAgfVxuICAgIG1ha2VSZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVnZXhwIHx8IHRoaXMucmVnZXhwID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgdGhpcy5zZXQgaXMgYSAyZCBhcnJheSBvZiBwYXJ0aWFsXG4gICAgICAgIC8vIHBhdHRlcm4gc3RyaW5ncywgb3IgXCIqKlwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJdCdzIGJldHRlciB0byB1c2UgLm1hdGNoKCkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndFxuICAgICAgICAvLyBiZSB1c2VkLCByZWFsbHksIGJ1dCBpdCdzIHByZXR0eSBjb252ZW5pZW50IHNvbWV0aW1lcyxcbiAgICAgICAgLy8gd2hlbiB5b3UganVzdCB3YW50IHRvIHdvcmsgd2l0aCBhIHJlZ2V4LlxuICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnNldDtcbiAgICAgICAgaWYgKCFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnZXhwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHR3b1N0YXIgPSBvcHRpb25zLm5vZ2xvYnN0YXIgPyBzdGFyXG4gICAgICAgICAgICA6IG9wdGlvbnMuZG90ID8gdHdvU3RhckRvdFxuICAgICAgICAgICAgICAgIDogdHdvU3Rhck5vRG90O1xuICAgICAgICBjb25zdCBmbGFncyA9IG5ldyBTZXQob3B0aW9ucy5ub2Nhc2UgPyBbJ2knXSA6IFtdKTtcbiAgICAgICAgLy8gcmVnZXhwaWZ5IG5vbi1nbG9ic3RhciBwYXR0ZXJuc1xuICAgICAgICAvLyBpZiAqKiBpcyBvbmx5IGl0ZW0sIHRoZW4gd2UganVzdCBkbyBvbmUgdHdvU3RhclxuICAgICAgICAvLyBpZiAqKiBpcyBmaXJzdCwgYW5kIHRoZXJlIGFyZSBtb3JlLCBwcmVwZW5kIChcXC98dHdvU3RhclxcLyk/IHRvIG5leHRcbiAgICAgICAgLy8gaWYgKiogaXMgbGFzdCwgYXBwZW5kIChcXC90d29TdGFyfCkgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gaWYgKiogaXMgaW4gdGhlIG1pZGRsZSwgYXBwZW5kIChcXC98XFwvdHdvU3RhclxcLykgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gdGhlbiBmaWx0ZXIgb3V0IEdMT0JTVEFSIHN5bWJvbHNcbiAgICAgICAgbGV0IHJlID0gc2V0XG4gICAgICAgICAgICAubWFwKHBhdHRlcm4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHAgPSBwYXR0ZXJuLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgcC5mbGFncy5zcGxpdCgnJykpXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hZGQoZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAodHlwZW9mIHAgPT09ICdzdHJpbmcnID8gcmVnRXhwRXNjYXBlKHApXG4gICAgICAgICAgICAgICAgICAgIDogcCA9PT0gR0xPQlNUQVIgPyBHTE9CU1RBUlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwLl9zcmMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcC5mb3JFYWNoKChwLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHBwW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gcHBbaSAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwICE9PSBHTE9CU1RBUiB8fCBwcmV2ID09PSBHTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcmV2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiBuZXh0ICE9PSBHTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHBbaSArIDFdID0gJyg/OlxcXFwvfCcgKyB0d29TdGFyICsgJ1xcXFwvKT8nICsgbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBwW2ldID0gdHdvU3RhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSAtIDFdID0gcHJldiArICcoPzpcXFxcL3xcXFxcLycgKyB0d29TdGFyICsgJyk/JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmV4dCAhPT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSAtIDFdID0gcHJldiArICcoPzpcXFxcL3xcXFxcLycgKyB0d29TdGFyICsgJ1xcXFwvKScgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICBwcFtpICsgMV0gPSBHTE9CU1RBUjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gcHAuZmlsdGVyKHAgPT4gcCAhPT0gR0xPQlNUQVIpO1xuICAgICAgICAgICAgLy8gRm9yIHBhcnRpYWwgbWF0Y2hlcywgd2UgbmVlZCB0byBtYWtlIHRoZSBwYXR0ZXJuIG1hdGNoXG4gICAgICAgICAgICAvLyBhbnkgcHJlZml4IG9mIHRoZSBmdWxsIHBhdGguIFdlIGRvIHRoaXMgYnkgZ2VuZXJhdGluZ1xuICAgICAgICAgICAgLy8gYWx0ZXJuYXRpdmUgcGF0dGVybnMgdGhhdCBtYXRjaCBwcm9ncmVzc2l2ZWx5IGxvbmdlciBwcmVmaXhlcy5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpYWwgJiYgZmlsdGVyZWQubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXhlcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGZpbHRlcmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZWZpeGVzLnB1c2goZmlsdGVyZWQuc2xpY2UoMCwgaSkuam9pbignLycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICcoPzonICsgcHJlZml4ZXMuam9pbignfCcpICsgJyknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLmpvaW4oJy8nKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG4gICAgICAgIC8vIG5lZWQgdG8gd3JhcCBpbiBwYXJlbnMgaWYgd2UgaGFkIG1vcmUgdGhhbiBvbmUgdGhpbmcgd2l0aCB8LFxuICAgICAgICAvLyBvdGhlcndpc2Ugb25seSB0aGUgZmlyc3Qgd2lsbCBiZSBhbmNob3JlZCB0byBeIGFuZCB0aGUgbGFzdCB0byAkXG4gICAgICAgIGNvbnN0IFtvcGVuLCBjbG9zZV0gPSBzZXQubGVuZ3RoID4gMSA/IFsnKD86JywgJyknXSA6IFsnJywgJyddO1xuICAgICAgICAvLyBtdXN0IG1hdGNoIGVudGlyZSBwYXR0ZXJuXG4gICAgICAgIC8vIGVuZGluZyBpbiBhICogb3IgKiogd2lsbCBtYWtlIGl0IGxlc3Mgc3RyaWN0LlxuICAgICAgICByZSA9ICdeJyArIG9wZW4gKyByZSArIGNsb3NlICsgJyQnO1xuICAgICAgICAvLyBJbiBwYXJ0aWFsIG1vZGUsICcvJyBzaG91bGQgYWx3YXlzIG1hdGNoIGFzIGl0J3MgYSB2YWxpZCBwcmVmaXggZm9yIGFueSBwYXR0ZXJuXG4gICAgICAgIGlmICh0aGlzLnBhcnRpYWwpIHtcbiAgICAgICAgICAgIHJlID0gJ14oPzpcXFxcL3wnICsgb3BlbiArIHJlLnNsaWNlKDEsIC0xKSArIGNsb3NlICsgJykkJztcbiAgICAgICAgfVxuICAgICAgICAvLyBjYW4gbWF0Y2ggYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBub3QgdGhpcy5cbiAgICAgICAgaWYgKHRoaXMubmVnYXRlKVxuICAgICAgICAgICAgcmUgPSAnXig/IScgKyByZSArICcpLiskJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucmVnZXhwID0gbmV3IFJlZ0V4cChyZSwgWy4uLmZsYWdzXS5qb2luKCcnKSk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICAgICAgdGhpcy5yZWdleHAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdleHA7XG4gICAgfVxuICAgIHNsYXNoU3BsaXQocCkge1xuICAgICAgICAvLyBpZiBwIHN0YXJ0cyB3aXRoIC8vIG9uIHdpbmRvd3MsIHdlIHByZXNlcnZlIHRoYXRcbiAgICAgICAgLy8gc28gdGhhdCBVTkMgcGF0aHMgYXJlbid0IGJyb2tlbi4gIE90aGVyd2lzZSwgYW55IG51bWJlciBvZlxuICAgICAgICAvLyAvIGNoYXJhY3RlcnMgYXJlIGNvYWxlc2NlZCBpbnRvIG9uZSwgdW5sZXNzXG4gICAgICAgIC8vIHByZXNlcnZlTXVsdGlwbGVTbGFzaGVzIGlzIHNldCB0byB0cnVlLlxuICAgICAgICBpZiAodGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoJy8nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzV2luZG93cyAmJiAvXlxcL1xcL1teL10rLy50ZXN0KHApKSB7XG4gICAgICAgICAgICAvLyBhZGQgYW4gZXh0cmEgJycgZm9yIHRoZSBvbmUgd2UgbG9zZVxuICAgICAgICAgICAgcmV0dXJuIFsnJywgLi4ucC5zcGxpdCgvXFwvKy8pXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwLnNwbGl0KC9cXC8rLyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWF0Y2goZiwgcGFydGlhbCA9IHRoaXMucGFydGlhbCkge1xuICAgICAgICB0aGlzLmRlYnVnKCdtYXRjaCcsIGYsIHRoaXMucGF0dGVybik7XG4gICAgICAgIC8vIHNob3J0LWNpcmN1aXQgaW4gdGhlIGNhc2Ugb2YgYnVzdGVkIHRoaW5ncy5cbiAgICAgICAgLy8gY29tbWVudHMsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuY29tbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm4gZiA9PT0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYgPT09ICcvJyAmJiBwYXJ0aWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyB3aW5kb3dzOiBuZWVkIHRvIHVzZSAvLCBub3QgXFxcbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBmID0gZi5zcGxpdCgnXFxcXCcpLmpvaW4oJy8nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0cmVhdCB0aGUgdGVzdCBwYXRoIGFzIGEgc2V0IG9mIHBhdGhwYXJ0cy5cbiAgICAgICAgY29uc3QgZmYgPSB0aGlzLnNsYXNoU3BsaXQoZik7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc3BsaXQnLCBmZik7XG4gICAgICAgIC8vIGp1c3QgT05FIG9mIHRoZSBwYXR0ZXJuIHNldHMgaW4gdGhpcy5zZXQgbmVlZHMgdG8gbWF0Y2hcbiAgICAgICAgLy8gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHZhbGlkLiAgSWYgbmVnYXRpbmcsIHRoZW4ganVzdCBvbmVcbiAgICAgICAgLy8gbWF0Y2ggbWVhbnMgdGhhdCB3ZSBoYXZlIGZhaWxlZC5cbiAgICAgICAgLy8gRWl0aGVyIHdheSwgcmV0dXJuIG9uIHRoZSBmaXJzdCBoaXQuXG4gICAgICAgIGNvbnN0IHNldCA9IHRoaXMuc2V0O1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NldCcsIHNldCk7XG4gICAgICAgIC8vIEZpbmQgdGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoIGJ5IGxvb2tpbmcgZm9yIHRoZSBsYXN0IG5vbi1lbXB0eSBzZWdtZW50XG4gICAgICAgIGxldCBmaWxlbmFtZSA9IGZmW2ZmLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoIWZpbGVuYW1lKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZmYubGVuZ3RoIC0gMjsgIWZpbGVuYW1lICYmIGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmZltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2Ygc2V0KSB7XG4gICAgICAgICAgICBsZXQgZmlsZSA9IGZmO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubWF0Y2hCYXNlICYmIHBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9IFtmaWxlbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoaXQgPSB0aGlzLm1hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpO1xuICAgICAgICAgICAgaWYgKGhpdCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5uZWdhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlkbid0IGdldCBhbnkgaGl0cy4gIHRoaXMgaXMgc3VjY2VzcyBpZiBpdCdzIGEgbmVnYXRpdmVcbiAgICAgICAgLy8gcGF0dGVybiwgZmFpbHVyZSBvdGhlcndpc2UuXG4gICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uZWdhdGU7XG4gICAgfVxuICAgIHN0YXRpYyBkZWZhdWx0cyhkZWYpIHtcbiAgICAgICAgcmV0dXJuIG1pbmltYXRjaC5kZWZhdWx0cyhkZWYpLk1pbmltYXRjaDtcbiAgICB9XG59XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmV4cG9ydCB7IEFTVCB9IGZyb20gJy4vYXN0LmpzJztcbmV4cG9ydCB7IGVzY2FwZSB9IGZyb20gJy4vZXNjYXBlLmpzJztcbmV4cG9ydCB7IHVuZXNjYXBlIH0gZnJvbSAnLi91bmVzY2FwZS5qcyc7XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xubWluaW1hdGNoLkFTVCA9IEFTVDtcbm1pbmltYXRjaC5NaW5pbWF0Y2ggPSBNaW5pbWF0Y2g7XG5taW5pbWF0Y2guZXNjYXBlID0gZXNjYXBlO1xubWluaW1hdGNoLnVuZXNjYXBlID0gdW5lc2NhcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgUGF0aFNjdXJyeSwgUGF0aFNjdXJyeURhcndpbiwgUGF0aFNjdXJyeVBvc2l4LCBQYXRoU2N1cnJ5V2luMzIsIH0gZnJvbSAncGF0aC1zY3VycnknO1xuaW1wb3J0IHsgUGF0dGVybiB9IGZyb20gJy4vcGF0dGVybi5qcyc7XG5pbXBvcnQgeyBHbG9iU3RyZWFtLCBHbG9iV2Fsa2VyIH0gZnJvbSAnLi93YWxrZXIuanMnO1xuLy8gaWYgbm8gcHJvY2VzcyBnbG9iYWwsIGp1c3QgY2FsbCBpdCBsaW51eC5cbi8vIHNvIHdlIGRlZmF1bHQgdG8gY2FzZS1zZW5zaXRpdmUsIC8gc2VwYXJhdG9yc1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycpID9cbiAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAnbGludXgnO1xuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjYW4gcGVyZm9ybSBnbG9iIHBhdHRlcm4gdHJhdmVyc2Fscy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdsb2Ige1xuICAgIGFic29sdXRlO1xuICAgIGN3ZDtcbiAgICByb290O1xuICAgIGRvdDtcbiAgICBkb3RSZWxhdGl2ZTtcbiAgICBmb2xsb3c7XG4gICAgaWdub3JlO1xuICAgIG1hZ2ljYWxCcmFjZXM7XG4gICAgbWFyaztcbiAgICBtYXRjaEJhc2U7XG4gICAgbWF4RGVwdGg7XG4gICAgbm9icmFjZTtcbiAgICBub2Nhc2U7XG4gICAgbm9kaXI7XG4gICAgbm9leHQ7XG4gICAgbm9nbG9ic3RhcjtcbiAgICBwYXR0ZXJuO1xuICAgIHBsYXRmb3JtO1xuICAgIHJlYWxwYXRoO1xuICAgIHNjdXJyeTtcbiAgICBzdGF0O1xuICAgIHNpZ25hbDtcbiAgICB3aW5kb3dzUGF0aHNOb0VzY2FwZTtcbiAgICB3aXRoRmlsZVR5cGVzO1xuICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM7XG4gICAgLyoqXG4gICAgICogVGhlIG9wdGlvbnMgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqL1xuICAgIG9wdHM7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcGFyc2VkIGltbXV0YWJsZSB7QGxpbmsgUGF0dGVybn0gb2JqZWN0cy5cbiAgICAgKi9cbiAgICBwYXR0ZXJucztcbiAgICAvKipcbiAgICAgKiBBbGwgb3B0aW9ucyBhcmUgc3RvcmVkIGFzIHByb3BlcnRpZXMgb24gdGhlIGBHbG9iYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIEdsb2JPcHRpb25zfSBmb3IgZnVsbCBvcHRpb25zIGRlc2NyaXB0aW9ucy5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBhIHByZXZpb3VzIGBHbG9iYCBvYmplY3QgY2FuIGJlIHBhc3NlZCBhcyB0aGVcbiAgICAgKiBgR2xvYk9wdGlvbnNgIHRvIGFub3RoZXIgYEdsb2JgIGluc3RhbnRpYXRpb24gdG8gcmUtdXNlIHNldHRpbmdzXG4gICAgICogYW5kIGNhY2hlcyB3aXRoIGEgbmV3IHBhdHRlcm4uXG4gICAgICpcbiAgICAgKiBUcmF2ZXJzYWwgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gcnVuIHRoZSB3YWxrXG4gICAgICogYWdhaW4uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0cykge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFvcHRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZ2xvYiBvcHRpb25zIHJlcXVpcmVkJyk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMud2l0aEZpbGVUeXBlcyA9ICEhb3B0cy53aXRoRmlsZVR5cGVzO1xuICAgICAgICB0aGlzLnNpZ25hbCA9IG9wdHMuc2lnbmFsO1xuICAgICAgICB0aGlzLmZvbGxvdyA9ICEhb3B0cy5mb2xsb3c7XG4gICAgICAgIHRoaXMuZG90ID0gISFvcHRzLmRvdDtcbiAgICAgICAgdGhpcy5kb3RSZWxhdGl2ZSA9ICEhb3B0cy5kb3RSZWxhdGl2ZTtcbiAgICAgICAgdGhpcy5ub2RpciA9ICEhb3B0cy5ub2RpcjtcbiAgICAgICAgdGhpcy5tYXJrID0gISFvcHRzLm1hcms7XG4gICAgICAgIGlmICghb3B0cy5jd2QpIHtcbiAgICAgICAgICAgIHRoaXMuY3dkID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0cy5jd2QgaW5zdGFuY2VvZiBVUkwgfHwgb3B0cy5jd2Quc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICBvcHRzLmN3ZCA9IGZpbGVVUkxUb1BhdGgob3B0cy5jd2QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3dkID0gb3B0cy5jd2QgfHwgJyc7XG4gICAgICAgIHRoaXMucm9vdCA9IG9wdHMucm9vdDtcbiAgICAgICAgdGhpcy5tYWdpY2FsQnJhY2VzID0gISFvcHRzLm1hZ2ljYWxCcmFjZXM7XG4gICAgICAgIHRoaXMubm9icmFjZSA9ICEhb3B0cy5ub2JyYWNlO1xuICAgICAgICB0aGlzLm5vZXh0ID0gISFvcHRzLm5vZXh0O1xuICAgICAgICB0aGlzLnJlYWxwYXRoID0gISFvcHRzLnJlYWxwYXRoO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gb3B0cy5hYnNvbHV0ZTtcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzID0gb3B0cy5pbmNsdWRlQ2hpbGRNYXRjaGVzICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub2dsb2JzdGFyID0gISFvcHRzLm5vZ2xvYnN0YXI7XG4gICAgICAgIHRoaXMubWF0Y2hCYXNlID0gISFvcHRzLm1hdGNoQmFzZTtcbiAgICAgICAgdGhpcy5tYXhEZXB0aCA9XG4gICAgICAgICAgICB0eXBlb2Ygb3B0cy5tYXhEZXB0aCA9PT0gJ251bWJlcicgPyBvcHRzLm1heERlcHRoIDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMuc3RhdCA9ICEhb3B0cy5zdGF0O1xuICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdHMuaWdub3JlO1xuICAgICAgICBpZiAodGhpcy53aXRoRmlsZVR5cGVzICYmIHRoaXMuYWJzb2x1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3Qgc2V0IGFic29sdXRlIGFuZCB3aXRoRmlsZVR5cGVzOnRydWUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gW3BhdHRlcm5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUgPVxuICAgICAgICAgICAgISFvcHRzLndpbmRvd3NQYXRoc05vRXNjYXBlIHx8XG4gICAgICAgICAgICAgICAgb3B0cy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09XG4gICAgICAgICAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ubWFwKHAgPT4gcC5yZXBsYWNlKC9cXFxcL2csICcvJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hdGNoQmFzZSkge1xuICAgICAgICAgICAgaWYgKG9wdHMubm9nbG9ic3Rhcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Jhc2UgbWF0Y2hpbmcgcmVxdWlyZXMgZ2xvYnN0YXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChwID0+IChwLmluY2x1ZGVzKCcvJykgPyBwIDogYC4vKiovJHtwfWApKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gb3B0cy5wbGF0Zm9ybSB8fCBkZWZhdWx0UGxhdGZvcm07XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0gfTtcbiAgICAgICAgaWYgKG9wdHMuc2N1cnJ5KSB7XG4gICAgICAgICAgICB0aGlzLnNjdXJyeSA9IG9wdHMuc2N1cnJ5O1xuICAgICAgICAgICAgaWYgKG9wdHMubm9jYXNlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBvcHRzLm5vY2FzZSAhPT0gb3B0cy5zY3Vycnkubm9jYXNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub2Nhc2Ugb3B0aW9uIGNvbnRyYWRpY3RzIHByb3ZpZGVkIHNjdXJyeSBvcHRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFNjdXJyeSA9IG9wdHMucGxhdGZvcm0gPT09ICd3aW4zMicgPyBQYXRoU2N1cnJ5V2luMzJcbiAgICAgICAgICAgICAgICA6IG9wdHMucGxhdGZvcm0gPT09ICdkYXJ3aW4nID8gUGF0aFNjdXJyeURhcndpblxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMucGxhdGZvcm0gPyBQYXRoU2N1cnJ5UG9zaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIDogUGF0aFNjdXJyeTtcbiAgICAgICAgICAgIHRoaXMuc2N1cnJ5ID0gbmV3IFNjdXJyeSh0aGlzLmN3ZCwge1xuICAgICAgICAgICAgICAgIG5vY2FzZTogb3B0cy5ub2Nhc2UsXG4gICAgICAgICAgICAgICAgZnM6IG9wdHMuZnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vY2FzZSA9IHRoaXMuc2N1cnJ5Lm5vY2FzZTtcbiAgICAgICAgLy8gSWYgeW91IGRvIG5vY2FzZTp0cnVlIG9uIGEgY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW0sIHRoZW5cbiAgICAgICAgLy8gd2UgbmVlZCB0byB1c2UgcmVnZXhwcyBpbnN0ZWFkIG9mIHN0cmluZ3MgZm9yIG5vbi1tYWdpY1xuICAgICAgICAvLyBwYXRoIHBvcnRpb25zLCBiZWNhdXNlIHN0YXR0aW5nIGBhQmNgIHdvbid0IHJldHVybiByZXN1bHRzXG4gICAgICAgIC8vIGZvciB0aGUgZmlsZSBgQWJDYCBmb3IgZXhhbXBsZS5cbiAgICAgICAgY29uc3Qgbm9jYXNlTWFnaWNPbmx5ID0gdGhpcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgfHwgdGhpcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbiAgICAgICAgY29uc3QgbW1vID0ge1xuICAgICAgICAgICAgLy8gZGVmYXVsdCBub2Nhc2UgYmFzZWQgb24gcGxhdGZvcm1cbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgICBkb3Q6IHRoaXMuZG90LFxuICAgICAgICAgICAgbWF0Y2hCYXNlOiB0aGlzLm1hdGNoQmFzZSxcbiAgICAgICAgICAgIG5vYnJhY2U6IHRoaXMubm9icmFjZSxcbiAgICAgICAgICAgIG5vY2FzZTogdGhpcy5ub2Nhc2UsXG4gICAgICAgICAgICBub2Nhc2VNYWdpY09ubHksXG4gICAgICAgICAgICBub2NvbW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBub2V4dDogdGhpcy5ub2V4dCxcbiAgICAgICAgICAgIG5vbmVnYXRlOiB0cnVlLFxuICAgICAgICAgICAgb3B0aW1pemF0aW9uTGV2ZWw6IDIsXG4gICAgICAgICAgICBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSxcbiAgICAgICAgICAgIHdpbmRvd3NQYXRoc05vRXNjYXBlOiB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlLFxuICAgICAgICAgICAgZGVidWc6ICEhdGhpcy5vcHRzLmRlYnVnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtbXMgPSB0aGlzLnBhdHRlcm4ubWFwKHAgPT4gbmV3IE1pbmltYXRjaChwLCBtbW8pKTtcbiAgICAgICAgY29uc3QgW21hdGNoU2V0LCBnbG9iUGFydHNdID0gbW1zLnJlZHVjZSgoc2V0LCBtKSA9PiB7XG4gICAgICAgICAgICBzZXRbMF0ucHVzaCguLi5tLnNldCk7XG4gICAgICAgICAgICBzZXRbMV0ucHVzaCguLi5tLmdsb2JQYXJ0cyk7XG4gICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICB9LCBbW10sIFtdXSk7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBtYXRjaFNldC5tYXAoKHNldCwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZyA9IGdsb2JQYXJ0c1tpXTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKCFnKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwYXR0ZXJuIG9iamVjdCcpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHJldHVybiBuZXcgUGF0dGVybihzZXQsIGcsIDAsIHRoaXMucGxhdGZvcm0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgd2FsaygpIHtcbiAgICAgICAgLy8gV2Fsa2VycyBhbHdheXMgcmV0dXJuIGFycmF5IG9mIFBhdGggb2JqZWN0cywgc28gd2UganVzdCBoYXZlIHRvXG4gICAgICAgIC8vIGNvZXJjZSB0aGVtIGludG8gdGhlIHJpZ2h0IHNoYXBlLiAgSXQgd2lsbCBoYXZlIGFscmVhZHkgY2FsbGVkXG4gICAgICAgIC8vIHJlYWxwYXRoKCkgaWYgdGhlIG9wdGlvbiB3YXMgc2V0IHRvIGRvIHNvLCBzbyB3ZSBrbm93IHRoYXQncyBjYWNoZWQuXG4gICAgICAgIC8vIHN0YXJ0IG91dCBrbm93aW5nIHRoZSBjd2QsIGF0IGxlYXN0XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi4oYXdhaXQgbmV3IEdsb2JXYWxrZXIodGhpcy5wYXR0ZXJucywgdGhpcy5zY3VycnkuY3dkLCB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF4RGVwdGggKyB0aGlzLnNjdXJyeS5jd2QuZGVwdGgoKVxuICAgICAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIG5vY2FzZTogdGhpcy5ub2Nhc2UsXG4gICAgICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICAgICAgfSkud2FsaygpKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgd2Fsa1N5bmMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5uZXcgR2xvYldhbGtlcih0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzOiB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMsXG4gICAgICAgICAgICB9KS53YWxrU3luYygpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiBuZXcgR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtKCk7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtU3luYygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHN5bmMgaXRlcmF0aW9uIGZ1bmN0aW9uLiBSZXR1cm5zIGEgR2VuZXJhdG9yIHRoYXRcbiAgICAgKiBpdGVyYXRlcyBvdmVyIHRoZSByZXN1bHRzLlxuICAgICAqL1xuICAgIGl0ZXJhdGVTeW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW1TeW5jKClbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZVN5bmMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBhc3luYyBpdGVyYXRpb24gZnVuY3Rpb24uIFJldHVybnMgYW4gQXN5bmNHZW5lcmF0b3IgdGhhdFxuICAgICAqIGl0ZXJhdGVzIG92ZXIgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaXRlcmF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtKClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdGUoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iLmpzLm1hcCIsCiAgICAiaW1wb3J0e3RyYWNpbmdDaGFubmVsIGFzIEcsY2hhbm5lbCBhcyBQfWZyb21cIm5vZGU6ZGlhZ25vc3RpY3NfY2hhbm5lbFwiO3ZhciBTPVAoXCJscnUtY2FjaGU6bWV0cmljc1wiKSxXPUcoXCJscnUtY2FjaGVcIik7dmFyIEw9dHlwZW9mIHBlcmZvcm1hbmNlPT1cIm9iamVjdFwiJiZwZXJmb3JtYW5jZSYmdHlwZW9mIHBlcmZvcm1hbmNlLm5vdz09XCJmdW5jdGlvblwiP3BlcmZvcm1hbmNlOkRhdGU7dmFyIEQ9KCk9PlMuaGFzU3Vic2NyaWJlcnN8fFcuaGFzU3Vic2NyaWJlcnMsVT1uZXcgU2V0LE09dHlwZW9mIHByb2Nlc3M9PVwib2JqZWN0XCImJnByb2Nlc3M/cHJvY2Vzczp7fSxrPSh1LGUsdCxpKT0+e3R5cGVvZiBNLmVtaXRXYXJuaW5nPT1cImZ1bmN0aW9uXCI/TS5lbWl0V2FybmluZyh1LGUsdCxpKTpjb25zb2xlLmVycm9yKGBbJHt0fV0gJHtlfTogJHt1fWApfSxIPXU9PiFVLmhhcyh1KTt2YXIgVD11PT4hIXUmJnU9PT1NYXRoLmZsb29yKHUpJiZ1PjAmJmlzRmluaXRlKHUpLGo9dT0+VCh1KT91PD1NYXRoLnBvdygyLDgpP1VpbnQ4QXJyYXk6dTw9TWF0aC5wb3coMiwxNik/VWludDE2QXJyYXk6dTw9TWF0aC5wb3coMiwzMik/VWludDMyQXJyYXk6dTw9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI/TzpudWxsOm51bGwsTz1jbGFzcyBleHRlbmRzIEFycmF5e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuZmlsbCgwKX19LFI9Y2xhc3MgdXtoZWFwO2xlbmd0aDtzdGF0aWMjbz0hMTtzdGF0aWMgY3JlYXRlKGUpe2xldCB0PWooZSk7aWYoIXQpcmV0dXJuW107dS4jbz0hMDtsZXQgaT1uZXcgdShlLHQpO3JldHVybiB1LiNvPSExLGl9Y29uc3RydWN0b3IoZSx0KXtpZighdS4jbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW5zdGFudGlhdGUgU3RhY2sgdXNpbmcgU3RhY2suY3JlYXRlKG4pXCIpO3RoaXMuaGVhcD1uZXcgdChlKSx0aGlzLmxlbmd0aD0wfXB1c2goZSl7dGhpcy5oZWFwW3RoaXMubGVuZ3RoKytdPWV9cG9wKCl7cmV0dXJuIHRoaXMuaGVhcFstLXRoaXMubGVuZ3RoXX19LEk9Y2xhc3MgdXsjbzsjYzsjUzsjTzsjdzsjTTsjSTsjbTtnZXQgcGVyZigpe3JldHVybiB0aGlzLiNtfXR0bDt0dGxSZXNvbHV0aW9uO3R0bEF1dG9wdXJnZTt1cGRhdGVBZ2VPbkdldDt1cGRhdGVBZ2VPbkhhczthbGxvd1N0YWxlO25vRGlzcG9zZU9uU2V0O25vVXBkYXRlVFRMO21heEVudHJ5U2l6ZTtzaXplQ2FsY3VsYXRpb247bm9EZWxldGVPbkZldGNoUmVqZWN0aW9uO25vRGVsZXRlT25TdGFsZUdldDthbGxvd1N0YWxlT25GZXRjaEFib3J0O2FsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uO2lnbm9yZUZldGNoQWJvcnQ7YmFja2dyb3VuZEZldGNoU2l6ZTsjbjsjYjsjczsjaTsjdDsjbDsjdTsjYTsjaDsjeTsjcjsjXzsjRjsjZDsjZzsjVDsjVTsjZjsjeDtzdGF0aWMgdW5zYWZlRXhwb3NlSW50ZXJuYWxzKGUpe3JldHVybntzdGFydHM6ZS4jRix0dGxzOmUuI2QsYXV0b3B1cmdlVGltZXJzOmUuI2csc2l6ZXM6ZS4jXyxrZXlNYXA6ZS4jcyxrZXlMaXN0OmUuI2ksdmFsTGlzdDplLiN0LG5leHQ6ZS4jbCxwcmV2OmUuI3UsZ2V0IGhlYWQoKXtyZXR1cm4gZS4jYX0sZ2V0IHRhaWwoKXtyZXR1cm4gZS4jaH0sZnJlZTplLiN5LGlzQmFja2dyb3VuZEZldGNoOnQ9PmUuI2UodCksYmFja2dyb3VuZEZldGNoOih0LGkscyxuKT0+ZS4jUCh0LGkscyxuKSxtb3ZlVG9UYWlsOnQ9PmUuI0wodCksaW5kZXhlczp0PT5lLiNBKHQpLHJpbmRleGVzOnQ9PmUuI3oodCksaXNTdGFsZTp0PT5lLiNwKHQpfX1nZXQgbWF4KCl7cmV0dXJuIHRoaXMuI299Z2V0IG1heFNpemUoKXtyZXR1cm4gdGhpcy4jY31nZXQgY2FsY3VsYXRlZFNpemUoKXtyZXR1cm4gdGhpcy4jYn1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLiNufWdldCBmZXRjaE1ldGhvZCgpe3JldHVybiB0aGlzLiNNfWdldCBtZW1vTWV0aG9kKCl7cmV0dXJuIHRoaXMuI0l9Z2V0IGRpc3Bvc2UoKXtyZXR1cm4gdGhpcy4jU31nZXQgb25JbnNlcnQoKXtyZXR1cm4gdGhpcy4jT31nZXQgZGlzcG9zZUFmdGVyKCl7cmV0dXJuIHRoaXMuI3d9Y29uc3RydWN0b3IoZSl7bGV0e21heDp0PTAsdHRsOmksdHRsUmVzb2x1dGlvbjpzPTEsdHRsQXV0b3B1cmdlOm4sdXBkYXRlQWdlT25HZXQ6cix1cGRhdGVBZ2VPbkhhczpoLGFsbG93U3RhbGU6YSxkaXNwb3NlOm8sb25JbnNlcnQ6ZCxkaXNwb3NlQWZ0ZXI6eSxub0Rpc3Bvc2VPblNldDpfLG5vVXBkYXRlVFRMOmMsbWF4U2l6ZTpnPTAsbWF4RW50cnlTaXplOmY9MCxzaXplQ2FsY3VsYXRpb246YixmZXRjaE1ldGhvZDpsLG1lbW9NZXRob2Q6dyxub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb246Rixub0RlbGV0ZU9uU3RhbGVHZXQ6bSxhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjpwLGFsbG93U3RhbGVPbkZldGNoQWJvcnQ6QSxpZ25vcmVGZXRjaEFib3J0OnosYmFja2dyb3VuZEZldGNoU2l6ZTpDPTEscGVyZjpFfT1lO2lmKHRoaXMuYmFja2dyb3VuZEZldGNoU2l6ZT1DLEUhPT12b2lkIDAmJnR5cGVvZiBFPy5ub3chPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwicGVyZiBvcHRpb24gbXVzdCBoYXZlIGEgbm93KCkgbWV0aG9kIGlmIHNwZWNpZmllZFwiKTtpZih0aGlzLiNtPUU/P0wsdCE9PTAmJiFUKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtYXggb3B0aW9uIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyXCIpO2xldCB2PXQ/aih0KTpBcnJheTtpZighdil0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG1heCB2YWx1ZTogXCIrdCk7aWYodGhpcy4jbz10LHRoaXMuI2M9Zyx0aGlzLm1heEVudHJ5U2l6ZT1mfHx0aGlzLiNjLHRoaXMuc2l6ZUNhbGN1bGF0aW9uPWIsdGhpcy5zaXplQ2FsY3VsYXRpb24pe2lmKCF0aGlzLiNjJiYhdGhpcy5tYXhFbnRyeVNpemUpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbm5vdCBzZXQgc2l6ZUNhbGN1bGF0aW9uIHdpdGhvdXQgc2V0dGluZyBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZVwiKTtpZih0eXBlb2YgdGhpcy5zaXplQ2FsY3VsYXRpb24hPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZUNhbGN1bGF0aW9uIHNldCB0byBub24tZnVuY3Rpb25cIil9aWYodyE9PXZvaWQgMCYmdHlwZW9mIHchPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwibWVtb01ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgZGVmaW5lZFwiKTtpZih0aGlzLiNJPXcsbCE9PXZvaWQgMCYmdHlwZW9mIGwhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZmV0Y2hNZXRob2QgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIHNwZWNpZmllZFwiKTtpZih0aGlzLiNNPWwsdGhpcy4jVT0hIWwsdGhpcy4jcz1uZXcgTWFwLHRoaXMuI2k9QXJyYXkuZnJvbSh7bGVuZ3RoOnR9KS5maWxsKHZvaWQgMCksdGhpcy4jdD1BcnJheS5mcm9tKHtsZW5ndGg6dH0pLmZpbGwodm9pZCAwKSx0aGlzLiNsPW5ldyB2KHQpLHRoaXMuI3U9bmV3IHYodCksdGhpcy4jYT0wLHRoaXMuI2g9MCx0aGlzLiN5PVIuY3JlYXRlKHQpLHRoaXMuI249MCx0aGlzLiNiPTAsdHlwZW9mIG89PVwiZnVuY3Rpb25cIiYmKHRoaXMuI1M9byksdHlwZW9mIGQ9PVwiZnVuY3Rpb25cIiYmKHRoaXMuI089ZCksdHlwZW9mIHk9PVwiZnVuY3Rpb25cIj8odGhpcy4jdz15LHRoaXMuI3I9W10pOih0aGlzLiN3PXZvaWQgMCx0aGlzLiNyPXZvaWQgMCksdGhpcy4jVD0hIXRoaXMuI1MsdGhpcy4jeD0hIXRoaXMuI08sdGhpcy4jZj0hIXRoaXMuI3csdGhpcy5ub0Rpc3Bvc2VPblNldD0hIV8sdGhpcy5ub1VwZGF0ZVRUTD0hIWMsdGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb249ISFGLHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb249ISFwLHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydD0hIUEsdGhpcy5pZ25vcmVGZXRjaEFib3J0PSEheix0aGlzLm1heEVudHJ5U2l6ZSE9PTApe2lmKHRoaXMuI2MhPT0wJiYhVCh0aGlzLiNjKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwibWF4U2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWRcIik7aWYoIVQodGhpcy5tYXhFbnRyeVNpemUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtYXhFbnRyeVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkXCIpO3RoaXMuI1goKX1pZih0aGlzLmFsbG93U3RhbGU9ISFhLHRoaXMubm9EZWxldGVPblN0YWxlR2V0PSEhbSx0aGlzLnVwZGF0ZUFnZU9uR2V0PSEhcix0aGlzLnVwZGF0ZUFnZU9uSGFzPSEhaCx0aGlzLnR0bFJlc29sdXRpb249VChzKXx8cz09PTA/czoxLHRoaXMudHRsQXV0b3B1cmdlPSEhbix0aGlzLnR0bD1pfHwwLHRoaXMudHRsKXtpZighVCh0aGlzLnR0bCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcInR0bCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWRcIik7dGhpcy4jaygpfWlmKHRoaXMuI289PT0wJiZ0aGlzLnR0bD09PTAmJnRoaXMuI2M9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBdCBsZWFzdCBvbmUgb2YgbWF4LCBtYXhTaXplLCBvciB0dGwgaXMgcmVxdWlyZWRcIik7aWYoIXRoaXMudHRsQXV0b3B1cmdlJiYhdGhpcy4jbyYmIXRoaXMuI2Mpe2xldCB4PVwiTFJVX0NBQ0hFX1VOQk9VTkRFRFwiO0goeCkmJihVLmFkZCh4KSxrKFwiVFRMIGNhY2hpbmcgd2l0aG91dCB0dGxBdXRvcHVyZ2UsIG1heCwgb3IgbWF4U2l6ZSBjYW4gcmVzdWx0IGluIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uXCIsXCJVbmJvdW5kZWRDYWNoZVdhcm5pbmdcIix4LHUpKX19Z2V0UmVtYWluaW5nVFRMKGUpe3JldHVybiB0aGlzLiNzLmhhcyhlKT8xLzA6MH0jaygpe2xldCBlPW5ldyBPKHRoaXMuI28pLHQ9bmV3IE8odGhpcy4jbyk7dGhpcy4jZD1lLHRoaXMuI0Y9dDtsZXQgaT10aGlzLnR0bEF1dG9wdXJnZT9BcnJheS5mcm9tKHtsZW5ndGg6dGhpcy4jb30pOnZvaWQgMDt0aGlzLiNnPWksdGhpcy4jSD0oaCxhLG89dGhpcy4jbS5ub3coKSk9Pnt0W2hdPWEhPT0wP286MCxlW2hdPWEscyhoLGEpfSx0aGlzLiNEPWg9Pnt0W2hdPWVbaF0hPT0wP3RoaXMuI20ubm93KCk6MCxzKGgsZVtoXSl9O2xldCBzPXRoaXMudHRsQXV0b3B1cmdlPyhoLGEpPT57aWYoaT8uW2hdJiYoY2xlYXJUaW1lb3V0KGlbaF0pLGlbaF09dm9pZCAwKSxhJiZhIT09MCYmaSl7bGV0IG89c2V0VGltZW91dCgoKT0+e3RoaXMuI3AoaCkmJnRoaXMuI0UodGhpcy4jaVtoXSxcImV4cGlyZVwiKX0sYSsxKTtvLnVucmVmJiZvLnVucmVmKCksaVtoXT1vfX06KCk9Pnt9O3RoaXMuI3Y9KGgsYSk9PntpZihlW2FdKXtsZXQgbz1lW2FdLGQ9dFthXTtpZighb3x8IWQpcmV0dXJuO2gudHRsPW8saC5zdGFydD1kLGgubm93PW58fHIoKTtsZXQgeT1oLm5vdy1kO2gucmVtYWluaW5nVFRMPW8teX19O2xldCBuPTAscj0oKT0+e2xldCBoPXRoaXMuI20ubm93KCk7aWYodGhpcy50dGxSZXNvbHV0aW9uPjApe249aDtsZXQgYT1zZXRUaW1lb3V0KCgpPT5uPTAsdGhpcy50dGxSZXNvbHV0aW9uKTthLnVucmVmJiZhLnVucmVmKCl9cmV0dXJuIGh9O3RoaXMuZ2V0UmVtYWluaW5nVFRMPWg9PntsZXQgYT10aGlzLiNzLmdldChoKTtpZihhPT09dm9pZCAwKXJldHVybiAwO2xldCBvPWVbYV0sZD10W2FdO2lmKCFvfHwhZClyZXR1cm4gMS8wO2xldCB5PShufHxyKCkpLWQ7cmV0dXJuIG8teX0sdGhpcy4jcD1oPT57bGV0IGE9dFtoXSxvPWVbaF07cmV0dXJuISFvJiYhIWEmJihufHxyKCkpLWE+b319I0Q9KCk9Pnt9OyN2PSgpPT57fTsjSD0oKT0+e307I3A9KCk9PiExOyNYKCl7bGV0IGU9bmV3IE8odGhpcy4jbyk7dGhpcy4jYj0wLHRoaXMuI189ZSx0aGlzLiNSPXQ9Pnt0aGlzLiNiLT1lW3RdLGVbdF09MH0sdGhpcy4jTj0odCxpLHMsbik9PntpZighVChzKSl7aWYodGhpcy4jZShpKSlyZXR1cm4gdGhpcy5iYWNrZ3JvdW5kRmV0Y2hTaXplO2lmKG4pe2lmKHR5cGVvZiBuIT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemVDYWxjdWxhdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb25cIik7aWYocz1uKGksdCksIVQocykpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemVDYWxjdWxhdGlvbiByZXR1cm4gaW52YWxpZCAoZXhwZWN0IHBvc2l0aXZlIGludGVnZXIpXCIpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc2l6ZSB2YWx1ZSAobXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyKS4gV2hlbiBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZSBpcyB1c2VkLCBzaXplQ2FsY3VsYXRpb24gb3Igc2l6ZSBtdXN0IGJlIHNldC5cIil9cmV0dXJuIHN9LHRoaXMuI2o9KHQsaSxzKT0+e2lmKGVbdF09aSx0aGlzLiNjKXtsZXQgbj10aGlzLiNjLWVbdF07Zm9yKDt0aGlzLiNiPm47KXRoaXMuI0coITApfXRoaXMuI2IrPWVbdF0scyYmKHMuZW50cnlTaXplPWkscy50b3RhbENhbGN1bGF0ZWRTaXplPXRoaXMuI2IpfX0jUj1lPT57fTsjaj0oZSx0LGkpPT57fTsjTj0oZSx0LGkscyk9PntpZihpfHxzKXRocm93IG5ldyBUeXBlRXJyb3IoXCJjYW5ub3Qgc2V0IHNpemUgd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplIG9uIGNhY2hlXCIpO3JldHVybiAwfTsqI0Eoe2FsbG93U3RhbGU6ZT10aGlzLmFsbG93U3RhbGV9PXt9KXtpZih0aGlzLiNuKWZvcihsZXQgdD10aGlzLiNoO3RoaXMuI1YodCkmJigoZXx8IXRoaXMuI3AodCkpJiYoeWllbGQgdCksdCE9PXRoaXMuI2EpOyl0PXRoaXMuI3VbdF19KiN6KHthbGxvd1N0YWxlOmU9dGhpcy5hbGxvd1N0YWxlfT17fSl7aWYodGhpcy4jbilmb3IobGV0IHQ9dGhpcy4jYTt0aGlzLiNWKHQpJiYoKGV8fCF0aGlzLiNwKHQpKSYmKHlpZWxkIHQpLHQhPT10aGlzLiNoKTspdD10aGlzLiNsW3RdfSNWKGUpe3JldHVybiBlIT09dm9pZCAwJiZ0aGlzLiNzLmdldCh0aGlzLiNpW2VdKT09PWV9KmVudHJpZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jQSgpKXRoaXMuI3RbZV0hPT12b2lkIDAmJnRoaXMuI2lbZV0hPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGRbdGhpcy4jaVtlXSx0aGlzLiN0W2VdXSl9KnJlbnRyaWVzKCl7Zm9yKGxldCBlIG9mIHRoaXMuI3ooKSl0aGlzLiN0W2VdIT09dm9pZCAwJiZ0aGlzLiNpW2VdIT09dm9pZCAwJiYhdGhpcy4jZSh0aGlzLiN0W2VdKSYmKHlpZWxkW3RoaXMuI2lbZV0sdGhpcy4jdFtlXV0pfSprZXlzKCl7Zm9yKGxldCBlIG9mIHRoaXMuI0EoKSl7bGV0IHQ9dGhpcy4jaVtlXTt0IT09dm9pZCAwJiYhdGhpcy4jZSh0aGlzLiN0W2VdKSYmKHlpZWxkIHQpfX0qcmtleXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jeigpKXtsZXQgdD10aGlzLiNpW2VdO3QhPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGQgdCl9fSp2YWx1ZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jQSgpKXRoaXMuI3RbZV0hPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGQgdGhpcy4jdFtlXSl9KnJ2YWx1ZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jeigpKXRoaXMuI3RbZV0hPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGQgdGhpcy4jdFtlXSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9W1N5bWJvbC50b1N0cmluZ1RhZ109XCJMUlVDYWNoZVwiO2ZpbmQoZSx0PXt9KXtmb3IobGV0IGkgb2YgdGhpcy4jQSgpKXtsZXQgcz10aGlzLiN0W2ldLG49dGhpcy4jZShzKT9zLl9fc3RhbGVXaGlsZUZldGNoaW5nOnM7aWYobiE9PXZvaWQgMCYmZShuLHRoaXMuI2lbaV0sdGhpcykpcmV0dXJuIHRoaXMuI0ModGhpcy4jaVtpXSx0KX19Zm9yRWFjaChlLHQ9dGhpcyl7Zm9yKGxldCBpIG9mIHRoaXMuI0EoKSl7bGV0IHM9dGhpcy4jdFtpXSxuPXRoaXMuI2Uocyk/cy5fX3N0YWxlV2hpbGVGZXRjaGluZzpzO24hPT12b2lkIDAmJmUuY2FsbCh0LG4sdGhpcy4jaVtpXSx0aGlzKX19cmZvckVhY2goZSx0PXRoaXMpe2ZvcihsZXQgaSBvZiB0aGlzLiN6KCkpe2xldCBzPXRoaXMuI3RbaV0sbj10aGlzLiNlKHMpP3MuX19zdGFsZVdoaWxlRmV0Y2hpbmc6cztuIT09dm9pZCAwJiZlLmNhbGwodCxuLHRoaXMuI2lbaV0sdGhpcyl9fXB1cmdlU3RhbGUoKXtsZXQgZT0hMTtmb3IobGV0IHQgb2YgdGhpcy4jeih7YWxsb3dTdGFsZTohMH0pKXRoaXMuI3AodCkmJih0aGlzLiNFKHRoaXMuI2lbdF0sXCJleHBpcmVcIiksZT0hMCk7cmV0dXJuIGV9aW5mbyhlKXtsZXQgdD10aGlzLiNzLmdldChlKTtpZih0PT09dm9pZCAwKXJldHVybjtsZXQgaT10aGlzLiN0W3RdLHM9dGhpcy4jZShpKT9pLl9fc3RhbGVXaGlsZUZldGNoaW5nOmk7aWYocz09PXZvaWQgMClyZXR1cm47bGV0IG49e3ZhbHVlOnN9O2lmKHRoaXMuI2QmJnRoaXMuI0Ype2xldCByPXRoaXMuI2RbdF0saD10aGlzLiNGW3RdO2lmKHImJmgpe2xldCBhPXItKHRoaXMuI20ubm93KCktaCk7bi50dGw9YSxuLnN0YXJ0PURhdGUubm93KCl9fXJldHVybiB0aGlzLiNfJiYobi5zaXplPXRoaXMuI19bdF0pLG59ZHVtcCgpe2xldCBlPVtdO2ZvcihsZXQgdCBvZiB0aGlzLiNBKHthbGxvd1N0YWxlOiEwfSkpe2xldCBpPXRoaXMuI2lbdF0scz10aGlzLiN0W3RdLG49dGhpcy4jZShzKT9zLl9fc3RhbGVXaGlsZUZldGNoaW5nOnM7aWYobj09PXZvaWQgMHx8aT09PXZvaWQgMCljb250aW51ZTtsZXQgcj17dmFsdWU6bn07aWYodGhpcy4jZCYmdGhpcy4jRil7ci50dGw9dGhpcy4jZFt0XTtsZXQgaD10aGlzLiNtLm5vdygpLXRoaXMuI0ZbdF07ci5zdGFydD1NYXRoLmZsb29yKERhdGUubm93KCktaCl9dGhpcy4jXyYmKHIuc2l6ZT10aGlzLiNfW3RdKSxlLnVuc2hpZnQoW2kscl0pfXJldHVybiBlfWxvYWQoZSl7dGhpcy5jbGVhcigpO2ZvcihsZXRbdCxpXW9mIGUpe2lmKGkuc3RhcnQpe2xldCBzPURhdGUubm93KCktaS5zdGFydDtpLnN0YXJ0PXRoaXMuI20ubm93KCktc310aGlzLiNXKHQsaS52YWx1ZSxpKX19c2V0KGUsdCxpPXt9KXtsZXR7c3RhdHVzOnM9Uy5oYXNTdWJzY3JpYmVycz97fTp2b2lkIDB9PWk7aS5zdGF0dXM9cyxzJiYocy5vcD1cInNldFwiLHMua2V5PWUsdCE9PXZvaWQgMCYmKHMudmFsdWU9dCkscy5jYWNoZT10aGlzKTtsZXQgbj10aGlzLiNXKGUsdCxpKTtyZXR1cm4gcyYmUy5oYXNTdWJzY3JpYmVycyYmUy5wdWJsaXNoKHMpLG59I1coZSx0LGkscyl7bGV0e3R0bDpuPXRoaXMudHRsLHN0YXJ0OnIsbm9EaXNwb3NlT25TZXQ6aD10aGlzLm5vRGlzcG9zZU9uU2V0LHNpemVDYWxjdWxhdGlvbjphPXRoaXMuc2l6ZUNhbGN1bGF0aW9uLHN0YXR1czpvfT1pLGQ9dGhpcy4jZSh0KTtpZih0PT09dm9pZCAwKXJldHVybiBvJiYoby5zZXQ9XCJkZWxldGVkXCIpLHRoaXMuZGVsZXRlKGUpLHRoaXM7bGV0e25vVXBkYXRlVFRMOnk9dGhpcy5ub1VwZGF0ZVRUTH09aTtvJiYhZCYmKG8udmFsdWU9dCk7bGV0IF89dGhpcy4jTihlLHQsaS5zaXplfHwwLGEsbyk7aWYodGhpcy5tYXhFbnRyeVNpemUmJl8+dGhpcy5tYXhFbnRyeVNpemUpcmV0dXJuIHRoaXMuI0UoZSxcInNldFwiKSxvJiYoby5zZXQ9XCJtaXNzXCIsby5tYXhFbnRyeVNpemVFeGNlZWRlZD0hMCksdGhpcztsZXQgYz10aGlzLiNuPT09MD92b2lkIDA6dGhpcy4jcy5nZXQoZSk7aWYoYz09PXZvaWQgMCljPXRoaXMuI249PT0wP3RoaXMuI2g6dGhpcy4jeS5sZW5ndGghPT0wP3RoaXMuI3kucG9wKCk6dGhpcy4jbj09PXRoaXMuI28/dGhpcy4jRyghMSk6dGhpcy4jbix0aGlzLiNpW2NdPWUsdGhpcy4jdFtjXT10LHRoaXMuI3Muc2V0KGUsYyksdGhpcy4jbFt0aGlzLiNoXT1jLHRoaXMuI3VbY109dGhpcy4jaCx0aGlzLiNoPWMsdGhpcy4jbisrLHRoaXMuI2ooYyxfLG8pLG8mJihvLnNldD1cImFkZFwiKSx5PSExLHRoaXMuI3gmJiFkJiZ0aGlzLiNPPy4odCxlLFwiYWRkXCIpO2Vsc2V7dGhpcy4jTChjKTtsZXQgZz10aGlzLiN0W2NdO2lmKHQhPT1nKXtpZighaClpZih0aGlzLiNlKGcpKXtnIT09cyYmZy5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoXCJyZXBsYWNlZFwiKSk7bGV0e19fc3RhbGVXaGlsZUZldGNoaW5nOmZ9PWc7ZiE9PXZvaWQgMCYmZiE9PXQmJih0aGlzLiNUJiZ0aGlzLiNTPy4oZixlLFwic2V0XCIpLHRoaXMuI2YmJnRoaXMuI3I/LnB1c2goW2YsZSxcInNldFwiXSkpfWVsc2UgdGhpcy4jVCYmdGhpcy4jUz8uKGcsZSxcInNldFwiKSx0aGlzLiNmJiZ0aGlzLiNyPy5wdXNoKFtnLGUsXCJzZXRcIl0pO2lmKHRoaXMuI1IoYyksdGhpcy4jaihjLF8sbyksdGhpcy4jdFtjXT10LCFkKXtsZXQgZj1nJiZ0aGlzLiNlKGcpP2cuX19zdGFsZVdoaWxlRmV0Y2hpbmc6ZyxiPWY9PT12b2lkIDA/XCJhZGRcIjp0IT09Zj9cInJlcGxhY2VcIjpcInVwZGF0ZVwiO28mJihvLnNldD1iLGYhPT12b2lkIDAmJihvLm9sZFZhbHVlPWYpKSx0aGlzLiN4JiZ0aGlzLm9uSW5zZXJ0Py4odCxlLGIpfX1lbHNlIGR8fChvJiYoby5zZXQ9XCJ1cGRhdGVcIiksdGhpcy4jeCYmdGhpcy5vbkluc2VydD8uKHQsZSxcInVwZGF0ZVwiKSl9aWYobiE9PTAmJiF0aGlzLiNkJiZ0aGlzLiNrKCksdGhpcy4jZCYmKHl8fHRoaXMuI0goYyxuLHIpLG8mJnRoaXMuI3YobyxjKSksIWgmJnRoaXMuI2YmJnRoaXMuI3Ipe2xldCBnPXRoaXMuI3IsZjtmb3IoO2Y9Zz8uc2hpZnQoKTspdGhpcy4jdz8uKC4uLmYpfXJldHVybiB0aGlzfXBvcCgpe3RyeXtmb3IoO3RoaXMuI247KXtsZXQgZT10aGlzLiN0W3RoaXMuI2FdO2lmKHRoaXMuI0coITApLHRoaXMuI2UoZSkpe2lmKGUuX19zdGFsZVdoaWxlRmV0Y2hpbmcpcmV0dXJuIGUuX19zdGFsZVdoaWxlRmV0Y2hpbmd9ZWxzZSBpZihlIT09dm9pZCAwKXJldHVybiBlfX1maW5hbGx5e2lmKHRoaXMuI2YmJnRoaXMuI3Ipe2xldCBlPXRoaXMuI3IsdDtmb3IoO3Q9ZT8uc2hpZnQoKTspdGhpcy4jdz8uKC4uLnQpfX19I0coZSl7bGV0IHQ9dGhpcy4jYSxpPXRoaXMuI2lbdF0scz10aGlzLiN0W3RdLG49dGhpcy4jZShzKTtuJiZzLl9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcihcImV2aWN0ZWRcIikpO2xldCByPW4/cy5fX3N0YWxlV2hpbGVGZXRjaGluZzpzO3JldHVybih0aGlzLiNUfHx0aGlzLiNmKSYmciE9PXZvaWQgMCYmKHRoaXMuI1QmJnRoaXMuI1M/LihyLGksXCJldmljdFwiKSx0aGlzLiNmJiZ0aGlzLiNyPy5wdXNoKFtyLGksXCJldmljdFwiXSkpLHRoaXMuI1IodCksdGhpcy4jZz8uW3RdJiYoY2xlYXJUaW1lb3V0KHRoaXMuI2dbdF0pLHRoaXMuI2dbdF09dm9pZCAwKSxlJiYodGhpcy4jaVt0XT12b2lkIDAsdGhpcy4jdFt0XT12b2lkIDAsdGhpcy4jeS5wdXNoKHQpKSx0aGlzLiNuPT09MT8odGhpcy4jYT10aGlzLiNoPTAsdGhpcy4jeS5sZW5ndGg9MCk6dGhpcy4jYT10aGlzLiNsW3RdLHRoaXMuI3MuZGVsZXRlKGkpLHRoaXMuI24tLSx0fWhhcyhlLHQ9e30pe2xldHtzdGF0dXM6aT1TLmhhc1N1YnNjcmliZXJzP3t9OnZvaWQgMH09dDt0LnN0YXR1cz1pLGkmJihpLm9wPVwiaGFzXCIsaS5rZXk9ZSxpLmNhY2hlPXRoaXMpO2xldCBzPXRoaXMuI1koZSx0KTtyZXR1cm4gUy5oYXNTdWJzY3JpYmVycyYmUy5wdWJsaXNoKGkpLHN9I1koZSx0PXt9KXtsZXR7dXBkYXRlQWdlT25IYXM6aT10aGlzLnVwZGF0ZUFnZU9uSGFzLHN0YXR1czpzfT10LG49dGhpcy4jcy5nZXQoZSk7aWYobiE9PXZvaWQgMCl7bGV0IHI9dGhpcy4jdFtuXTtpZih0aGlzLiNlKHIpJiZyLl9fc3RhbGVXaGlsZUZldGNoaW5nPT09dm9pZCAwKXJldHVybiExO2lmKHRoaXMuI3AobikpcyYmKHMuaGFzPVwic3RhbGVcIix0aGlzLiN2KHMsbikpO2Vsc2UgcmV0dXJuIGkmJnRoaXMuI0QobikscyYmKHMuaGFzPVwiaGl0XCIsdGhpcy4jdihzLG4pKSwhMH1lbHNlIHMmJihzLmhhcz1cIm1pc3NcIik7cmV0dXJuITF9cGVlayhlLHQ9e30pe2xldHtzdGF0dXM6aT1EKCk/e306dm9pZCAwfT10O2kmJihpLm9wPVwicGVla1wiLGkua2V5PWUsaS5jYWNoZT10aGlzKSx0LnN0YXR1cz1pO2xldCBzPXRoaXMuI0ooZSx0KTtyZXR1cm4gUy5oYXNTdWJzY3JpYmVycyYmUy5wdWJsaXNoKGkpLHN9I0ooZSx0KXtsZXR7c3RhdHVzOmksYWxsb3dTdGFsZTpzPXRoaXMuYWxsb3dTdGFsZX09dCxuPXRoaXMuI3MuZ2V0KGUpO2lmKG49PT12b2lkIDB8fCFzJiZ0aGlzLiNwKG4pKXtpJiYoaS5wZWVrPW49PT12b2lkIDA/XCJtaXNzXCI6XCJzdGFsZVwiKTtyZXR1cm59bGV0IHI9dGhpcy4jdFtuXSxoPXRoaXMuI2Uocik/ci5fX3N0YWxlV2hpbGVGZXRjaGluZzpyO3JldHVybiBpJiYoaCE9PXZvaWQgMD8oaS5wZWVrPVwiaGl0XCIsaS52YWx1ZT1oKTppLnBlZWs9XCJtaXNzXCIpLGh9I1AoZSx0LGkscyl7bGV0IG49dD09PXZvaWQgMD92b2lkIDA6dGhpcy4jdFt0XTtpZih0aGlzLiNlKG4pKXJldHVybiBuO2xldCByPW5ldyBBYm9ydENvbnRyb2xsZXIse3NpZ25hbDpofT1pO2g/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCgpPT5yLmFib3J0KGgucmVhc29uKSx7c2lnbmFsOnIuc2lnbmFsfSk7bGV0IGE9e3NpZ25hbDpyLnNpZ25hbCxvcHRpb25zOmksY29udGV4dDpzfSxvPShmLGI9ITEpPT57bGV0e2Fib3J0ZWQ6bH09ci5zaWduYWwsdz1pLmlnbm9yZUZldGNoQWJvcnQmJmYhPT12b2lkIDAsRj1pLmlnbm9yZUZldGNoQWJvcnR8fCEhKGkuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCYmZiE9PXZvaWQgMCk7aWYoaS5zdGF0dXMmJihsJiYhYj8oaS5zdGF0dXMuZmV0Y2hBYm9ydGVkPSEwLGkuc3RhdHVzLmZldGNoRXJyb3I9ci5zaWduYWwucmVhc29uLHcmJihpLnN0YXR1cy5mZXRjaEFib3J0SWdub3JlZD0hMCkpOmkuc3RhdHVzLmZldGNoUmVzb2x2ZWQ9ITApLGwmJiF3JiYhYilyZXR1cm4geShyLnNpZ25hbC5yZWFzb24sRik7bGV0IG09YyxwPXRoaXMuI3RbdF07cmV0dXJuKHA9PT1jfHxwPT09dm9pZCAwJiZ3JiZiKSYmKGY9PT12b2lkIDA/bS5fX3N0YWxlV2hpbGVGZXRjaGluZyE9PXZvaWQgMD90aGlzLiN0W3RdPW0uX19zdGFsZVdoaWxlRmV0Y2hpbmc6dGhpcy4jRShlLFwiZmV0Y2hcIik6KGkuc3RhdHVzJiYoaS5zdGF0dXMuZmV0Y2hVcGRhdGVkPSEwKSx0aGlzLiNXKGUsZixhLm9wdGlvbnMsbSkpKSxmfSxkPWY9PihpLnN0YXR1cyYmKGkuc3RhdHVzLmZldGNoUmVqZWN0ZWQ9ITAsaS5zdGF0dXMuZmV0Y2hFcnJvcj1mKSx5KGYsITEpKSx5PShmLGIpPT57bGV0e2Fib3J0ZWQ6bH09ci5zaWduYWwsdz1sJiZpLmFsbG93U3RhbGVPbkZldGNoQWJvcnQsRj13fHxpLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLG09Rnx8aS5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24scD1jO2lmKHRoaXMuI3RbdF09PT1jJiYoIW18fCFiJiZwLl9fc3RhbGVXaGlsZUZldGNoaW5nPT09dm9pZCAwP3RoaXMuI0UoZSxcImZldGNoXCIpOnd8fCh0aGlzLiN0W3RdPXAuX19zdGFsZVdoaWxlRmV0Y2hpbmcpKSxGKXJldHVybiBpLnN0YXR1cyYmcC5fX3N0YWxlV2hpbGVGZXRjaGluZyE9PXZvaWQgMCYmKGkuc3RhdHVzLnJldHVybmVkU3RhbGU9ITApLHAuX19zdGFsZVdoaWxlRmV0Y2hpbmc7aWYocC5fX3JldHVybmVkPT09cCl0aHJvdyBmfSxfPShmLGIpPT57bGV0IGw9dGhpcy4jTT8uKGUsbixhKTtyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwoKT0+eyghaS5pZ25vcmVGZXRjaEFib3J0fHxpLmFsbG93U3RhbGVPbkZldGNoQWJvcnQpJiYoZih2b2lkIDApLGkuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCYmKGY9dz0+byh3LCEwKSkpfSksbCYmbCBpbnN0YW5jZW9mIFByb21pc2U/bC50aGVuKHc9PmYodz09PXZvaWQgMD92b2lkIDA6dyksYik6bCE9PXZvaWQgMCYmZihsKX07aS5zdGF0dXMmJihpLnN0YXR1cy5mZXRjaERpc3BhdGNoZWQ9ITApO2xldCBjPW5ldyBQcm9taXNlKF8pLnRoZW4obyxkKSxnPU9iamVjdC5hc3NpZ24oYyx7X19hYm9ydENvbnRyb2xsZXI6cixfX3N0YWxlV2hpbGVGZXRjaGluZzpuLF9fcmV0dXJuZWQ6dm9pZCAwfSk7cmV0dXJuIHQ9PT12b2lkIDA/KHRoaXMuI1coZSxnLHsuLi5hLm9wdGlvbnMsc3RhdHVzOnZvaWQgMH0pLHQ9dGhpcy4jcy5nZXQoZSkpOnRoaXMuI3RbdF09ZyxnfSNlKGUpe2lmKCF0aGlzLiNVKXJldHVybiExO2xldCB0PWU7cmV0dXJuISF0JiZ0IGluc3RhbmNlb2YgUHJvbWlzZSYmdC5oYXNPd25Qcm9wZXJ0eShcIl9fc3RhbGVXaGlsZUZldGNoaW5nXCIpJiZ0Ll9fYWJvcnRDb250cm9sbGVyIGluc3RhbmNlb2YgQWJvcnRDb250cm9sbGVyfWZldGNoKGUsdD17fSl7bGV0IGk9Vy5oYXNTdWJzY3JpYmVycyx7c3RhdHVzOnM9RCgpP3t9OnZvaWQgMH09dDt0LnN0YXR1cz1zLHMmJnQuY29udGV4dCYmKHMuY29udGV4dD10LmNvbnRleHQpO2xldCBuPXRoaXMuI0IoZSx0KTtyZXR1cm4gcyYmaSYmKHMudHJhY2U9ITAsVy50cmFjZVByb21pc2UoKCk9Pm4scykuY2F0Y2goKCk9Pnt9KSksbn1hc3luYyNCKGUsdD17fSl7bGV0e2FsbG93U3RhbGU6aT10aGlzLmFsbG93U3RhbGUsdXBkYXRlQWdlT25HZXQ6cz10aGlzLnVwZGF0ZUFnZU9uR2V0LG5vRGVsZXRlT25TdGFsZUdldDpuPXRoaXMubm9EZWxldGVPblN0YWxlR2V0LHR0bDpyPXRoaXMudHRsLG5vRGlzcG9zZU9uU2V0Omg9dGhpcy5ub0Rpc3Bvc2VPblNldCxzaXplOmE9MCxzaXplQ2FsY3VsYXRpb246bz10aGlzLnNpemVDYWxjdWxhdGlvbixub1VwZGF0ZVRUTDpkPXRoaXMubm9VcGRhdGVUVEwsbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uOnk9dGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24sYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb246Xz10aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLGlnbm9yZUZldGNoQWJvcnQ6Yz10aGlzLmlnbm9yZUZldGNoQWJvcnQsYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDpnPXRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxjb250ZXh0OmYsZm9yY2VSZWZyZXNoOmI9ITEsc3RhdHVzOmwsc2lnbmFsOnd9PXQ7aWYobCYmKGwub3A9XCJmZXRjaFwiLGwua2V5PWUsYiYmKGwuZm9yY2VSZWZyZXNoPSEwKSxsLmNhY2hlPXRoaXMpLCF0aGlzLiNVKXJldHVybiBsJiYobC5mZXRjaD1cImdldFwiKSx0aGlzLiNDKGUse2FsbG93U3RhbGU6aSx1cGRhdGVBZ2VPbkdldDpzLG5vRGVsZXRlT25TdGFsZUdldDpuLHN0YXR1czpsfSk7bGV0IEY9e2FsbG93U3RhbGU6aSx1cGRhdGVBZ2VPbkdldDpzLG5vRGVsZXRlT25TdGFsZUdldDpuLHR0bDpyLG5vRGlzcG9zZU9uU2V0Omgsc2l6ZTphLHNpemVDYWxjdWxhdGlvbjpvLG5vVXBkYXRlVFRMOmQsbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uOnksYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb246XyxhbGxvd1N0YWxlT25GZXRjaEFib3J0OmcsaWdub3JlRmV0Y2hBYm9ydDpjLHN0YXR1czpsLHNpZ25hbDp3fSxtPXRoaXMuI3MuZ2V0KGUpO2lmKG09PT12b2lkIDApe2wmJihsLmZldGNoPVwibWlzc1wiKTtsZXQgcD10aGlzLiNQKGUsbSxGLGYpO3JldHVybiBwLl9fcmV0dXJuZWQ9cH1lbHNle2xldCBwPXRoaXMuI3RbbV07aWYodGhpcy4jZShwKSl7bGV0IHY9aSYmcC5fX3N0YWxlV2hpbGVGZXRjaGluZyE9PXZvaWQgMDtyZXR1cm4gbCYmKGwuZmV0Y2g9XCJpbmZsaWdodFwiLHYmJihsLnJldHVybmVkU3RhbGU9ITApKSx2P3AuX19zdGFsZVdoaWxlRmV0Y2hpbmc6cC5fX3JldHVybmVkPXB9bGV0IEE9dGhpcy4jcChtKTtpZighYiYmIUEpcmV0dXJuIGwmJihsLmZldGNoPVwiaGl0XCIpLHRoaXMuI0wobSkscyYmdGhpcy4jRChtKSxsJiZ0aGlzLiN2KGwsbSkscDtsZXQgej10aGlzLiNQKGUsbSxGLGYpLEU9ei5fX3N0YWxlV2hpbGVGZXRjaGluZyE9PXZvaWQgMCYmaTtyZXR1cm4gbCYmKGwuZmV0Y2g9QT9cInN0YWxlXCI6XCJyZWZyZXNoXCIsRSYmQSYmKGwucmV0dXJuZWRTdGFsZT0hMCkpLEU/ei5fX3N0YWxlV2hpbGVGZXRjaGluZzp6Ll9fcmV0dXJuZWQ9en19Zm9yY2VGZXRjaChlLHQ9e30pe2xldCBpPVcuaGFzU3Vic2NyaWJlcnMse3N0YXR1czpzPUQoKT97fTp2b2lkIDB9PXQ7dC5zdGF0dXM9cyxzJiZ0LmNvbnRleHQmJihzLmNvbnRleHQ9dC5jb250ZXh0KTtsZXQgbj10aGlzLiNLKGUsdCk7cmV0dXJuIHMmJmkmJihzLnRyYWNlPSEwLFcudHJhY2VQcm9taXNlKCgpPT5uLHMpLmNhdGNoKCgpPT57fSkpLG59YXN5bmMjSyhlLHQ9e30pe2xldCBpPWF3YWl0IHRoaXMuI0IoZSx0KTtpZihpPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihcImZldGNoKCkgcmV0dXJuZWQgdW5kZWZpbmVkXCIpO3JldHVybiBpfW1lbW8oZSx0PXt9KXtsZXR7c3RhdHVzOmk9Uy5oYXNTdWJzY3JpYmVycz97fTp2b2lkIDB9PXQ7dC5zdGF0dXM9aSxpJiYoaS5vcD1cIm1lbW9cIixpLmtleT1lLHQuY29udGV4dCYmKGkuY29udGV4dD10LmNvbnRleHQpLGkuY2FjaGU9dGhpcyk7bGV0IHM9dGhpcy4jUShlLHQpO3JldHVybiBpJiYoaS52YWx1ZT1zKSxTLmhhc1N1YnNjcmliZXJzJiZTLnB1Ymxpc2goaSksc30jUShlLHQ9e30pe2xldCBpPXRoaXMuI0k7aWYoIWkpdGhyb3cgbmV3IEVycm9yKFwibm8gbWVtb01ldGhvZCBwcm92aWRlZCB0byBjb25zdHJ1Y3RvclwiKTtsZXR7Y29udGV4dDpzLHN0YXR1czpuLGZvcmNlUmVmcmVzaDpyLC4uLmh9PXQ7biYmciYmKG4uZm9yY2VSZWZyZXNoPSEwKTtsZXQgYT10aGlzLiNDKGUsaCksbz1yfHxhPT09dm9pZCAwO2lmKG4mJihuLm1lbW89bz9cIm1pc3NcIjpcImhpdFwiLG98fChuLnZhbHVlPWEpKSwhbylyZXR1cm4gYTtsZXQgZD1pKGUsYSx7b3B0aW9uczpoLGNvbnRleHQ6c30pO3JldHVybiBuJiYobi52YWx1ZT1kKSx0aGlzLiNXKGUsZCxoKSxkfWdldChlLHQ9e30pe2xldHtzdGF0dXM6aT1TLmhhc1N1YnNjcmliZXJzP3t9OnZvaWQgMH09dDt0LnN0YXR1cz1pLGkmJihpLm9wPVwiZ2V0XCIsaS5rZXk9ZSxpLmNhY2hlPXRoaXMpO2xldCBzPXRoaXMuI0MoZSx0KTtyZXR1cm4gaSYmKHMhPT12b2lkIDAmJihpLnZhbHVlPXMpLFMuaGFzU3Vic2NyaWJlcnMmJlMucHVibGlzaChpKSksc30jQyhlLHQ9e30pe2xldHthbGxvd1N0YWxlOmk9dGhpcy5hbGxvd1N0YWxlLHVwZGF0ZUFnZU9uR2V0OnM9dGhpcy51cGRhdGVBZ2VPbkdldCxub0RlbGV0ZU9uU3RhbGVHZXQ6bj10aGlzLm5vRGVsZXRlT25TdGFsZUdldCxzdGF0dXM6cn09dCxoPXRoaXMuI3MuZ2V0KGUpO2lmKGg9PT12b2lkIDApe3ImJihyLmdldD1cIm1pc3NcIik7cmV0dXJufWxldCBhPXRoaXMuI3RbaF0sbz10aGlzLiNlKGEpO3JldHVybiByJiZ0aGlzLiN2KHIsaCksdGhpcy4jcChoKT9vPyhyJiYoci5nZXQ9XCJzdGFsZS1mZXRjaGluZ1wiKSxpJiZhLl9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwPyhyJiYoci5yZXR1cm5lZFN0YWxlPSEwKSxhLl9fc3RhbGVXaGlsZUZldGNoaW5nKTp2b2lkIDApOihufHx0aGlzLiNFKGUsXCJleHBpcmVcIiksciYmKHIuZ2V0PVwic3RhbGVcIiksaT8ociYmKHIucmV0dXJuZWRTdGFsZT0hMCksYSk6dm9pZCAwKToociYmKHIuZ2V0PW8/XCJmZXRjaGluZ1wiOlwiaGl0XCIpLHRoaXMuI0woaCkscyYmdGhpcy4jRChoKSxvP2EuX19zdGFsZVdoaWxlRmV0Y2hpbmc6YSl9IyQoZSx0KXt0aGlzLiN1W3RdPWUsdGhpcy4jbFtlXT10fSNMKGUpe2UhPT10aGlzLiNoJiYoZT09PXRoaXMuI2E/dGhpcy4jYT10aGlzLiNsW2VdOnRoaXMuIyQodGhpcy4jdVtlXSx0aGlzLiNsW2VdKSx0aGlzLiMkKHRoaXMuI2gsZSksdGhpcy4jaD1lKX1kZWxldGUoZSl7cmV0dXJuIHRoaXMuI0UoZSxcImRlbGV0ZVwiKX0jRShlLHQpe1MuaGFzU3Vic2NyaWJlcnMmJlMucHVibGlzaCh7b3A6XCJkZWxldGVcIixkZWxldGU6dCxrZXk6ZSxjYWNoZTp0aGlzfSk7bGV0IGk9ITE7aWYodGhpcy4jbiE9PTApe2xldCBzPXRoaXMuI3MuZ2V0KGUpO2lmKHMhPT12b2lkIDApaWYodGhpcy4jZz8uW3NdJiYoY2xlYXJUaW1lb3V0KHRoaXMuI2c/LltzXSksdGhpcy4jZ1tzXT12b2lkIDApLGk9ITAsdGhpcy4jbj09PTEpdGhpcy4jcSh0KTtlbHNle3RoaXMuI1Iocyk7bGV0IG49dGhpcy4jdFtzXTtpZih0aGlzLiNlKG4pP24uX19hYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKFwiZGVsZXRlZFwiKSk6KHRoaXMuI1R8fHRoaXMuI2YpJiYodGhpcy4jVCYmdGhpcy4jUz8uKG4sZSx0KSx0aGlzLiNmJiZ0aGlzLiNyPy5wdXNoKFtuLGUsdF0pKSx0aGlzLiNzLmRlbGV0ZShlKSx0aGlzLiNpW3NdPXZvaWQgMCx0aGlzLiN0W3NdPXZvaWQgMCxzPT09dGhpcy4jaCl0aGlzLiNoPXRoaXMuI3Vbc107ZWxzZSBpZihzPT09dGhpcy4jYSl0aGlzLiNhPXRoaXMuI2xbc107ZWxzZXtsZXQgcj10aGlzLiN1W3NdO3RoaXMuI2xbcl09dGhpcy4jbFtzXTtsZXQgaD10aGlzLiNsW3NdO3RoaXMuI3VbaF09dGhpcy4jdVtzXX10aGlzLiNuLS0sdGhpcy4jeS5wdXNoKHMpfX1pZih0aGlzLiNmJiZ0aGlzLiNyPy5sZW5ndGgpe2xldCBzPXRoaXMuI3Isbjtmb3IoO249cz8uc2hpZnQoKTspdGhpcy4jdz8uKC4uLm4pfXJldHVybiBpfWNsZWFyKCl7cmV0dXJuIHRoaXMuI3EoXCJkZWxldGVcIil9I3EoZSl7Zm9yKGxldCB0IG9mIHRoaXMuI3ooe2FsbG93U3RhbGU6ITB9KSl7bGV0IGk9dGhpcy4jdFt0XTtpZih0aGlzLiNlKGkpKWkuX19hYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKFwiZGVsZXRlZFwiKSk7ZWxzZXtsZXQgcz10aGlzLiNpW3RdO3RoaXMuI1QmJnRoaXMuI1M/LihpLHMsZSksdGhpcy4jZiYmdGhpcy4jcj8ucHVzaChbaSxzLGVdKX19aWYodGhpcy4jcy5jbGVhcigpLHRoaXMuI3QuZmlsbCh2b2lkIDApLHRoaXMuI2kuZmlsbCh2b2lkIDApLHRoaXMuI2QmJnRoaXMuI0Ype3RoaXMuI2QuZmlsbCgwKSx0aGlzLiNGLmZpbGwoMCk7Zm9yKGxldCB0IG9mIHRoaXMuI2c/P1tdKXQhPT12b2lkIDAmJmNsZWFyVGltZW91dCh0KTt0aGlzLiNnPy5maWxsKHZvaWQgMCl9aWYodGhpcy4jXyYmdGhpcy4jXy5maWxsKDApLHRoaXMuI2E9MCx0aGlzLiNoPTAsdGhpcy4jeS5sZW5ndGg9MCx0aGlzLiNiPTAsdGhpcy4jbj0wLHRoaXMuI2YmJnRoaXMuI3Ipe2xldCB0PXRoaXMuI3IsaTtmb3IoO2k9dD8uc2hpZnQoKTspdGhpcy4jdz8uKC4uLmkpfX19O2V4cG9ydHtJIGFzIExSVUNhY2hlfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1pbi5qcy5tYXBcbiIsCiAgICAiaW1wb3J0IHsgTFJVQ2FjaGUgfSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHsgcG9zaXgsIHdpbjMyIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBsc3RhdFN5bmMsIHJlYWRkaXIgYXMgcmVhZGRpckNCLCByZWFkZGlyU3luYywgcmVhZGxpbmtTeW5jLCByZWFscGF0aFN5bmMgYXMgcnBzLCB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIGFjdHVhbEZTIGZyb20gJ25vZGU6ZnMnO1xuY29uc3QgcmVhbHBhdGhTeW5jID0gcnBzLm5hdGl2ZTtcbi8vIFRPRE86IHRlc3QgcGVyZiBvZiBmcy9wcm9taXNlcyByZWFscGF0aCB2cyByZWFscGF0aENCLFxuLy8gc2luY2UgdGhlIHByb21pc2VzIG9uZSB1c2VzIHJlYWxwYXRoLm5hdGl2ZVxuaW1wb3J0IHsgbHN0YXQsIHJlYWRkaXIsIHJlYWRsaW5rLCByZWFscGF0aCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgTWluaXBhc3MgfSBmcm9tICdtaW5pcGFzcyc7XG5jb25zdCBkZWZhdWx0RlMgPSB7XG4gICAgbHN0YXRTeW5jLFxuICAgIHJlYWRkaXI6IHJlYWRkaXJDQixcbiAgICByZWFkZGlyU3luYyxcbiAgICByZWFkbGlua1N5bmMsXG4gICAgcmVhbHBhdGhTeW5jLFxuICAgIHByb21pc2VzOiB7XG4gICAgICAgIGxzdGF0LFxuICAgICAgICByZWFkZGlyLFxuICAgICAgICByZWFkbGluayxcbiAgICAgICAgcmVhbHBhdGgsXG4gICAgfSxcbn07XG4vLyBpZiB0aGV5IGp1c3QgZ2F2ZSB1cyByZXF1aXJlKCdmcycpIHRoZW4gdXNlIG91ciBkZWZhdWx0XG5jb25zdCBmc0Zyb21PcHRpb24gPSAoZnNPcHRpb24pID0+ICFmc09wdGlvbiB8fCBmc09wdGlvbiA9PT0gZGVmYXVsdEZTIHx8IGZzT3B0aW9uID09PSBhY3R1YWxGUyA/XG4gICAgZGVmYXVsdEZTXG4gICAgOiB7XG4gICAgICAgIC4uLmRlZmF1bHRGUyxcbiAgICAgICAgLi4uZnNPcHRpb24sXG4gICAgICAgIHByb21pc2VzOiB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0RlMucHJvbWlzZXMsXG4gICAgICAgICAgICAuLi4oZnNPcHRpb24ucHJvbWlzZXMgfHwge30pLFxuICAgICAgICB9LFxuICAgIH07XG4vLyB0dXJuIHNvbWV0aGluZyBsaWtlIC8vPy9jOi8gaW50byBjOlxcXG5jb25zdCB1bmNEcml2ZVJlZ2V4cCA9IC9eXFxcXFxcXFxcXD9cXFxcKFthLXpdOilcXFxcPyQvaTtcbmNvbnN0IHVuY1RvRHJpdmUgPSAocm9vdFBhdGgpID0+IHJvb3RQYXRoLnJlcGxhY2UoL1xcLy9nLCAnXFxcXCcpLnJlcGxhY2UodW5jRHJpdmVSZWdleHAsICckMVxcXFwnKTtcbi8vIHdpbmRvd3MgcGF0aHMgYXJlIHNlcGFyYXRlZCBieSBlaXRoZXIgLyBvciBcXFxuY29uc3QgZWl0aGVyU2VwID0gL1tcXFxcXFwvXS87XG5jb25zdCBVTktOT1dOID0gMDsgLy8gbWF5IG5vdCBldmVuIGV4aXN0LCBmb3IgYWxsIHdlIGtub3dcbmNvbnN0IElGSUZPID0gMGIwMDAxO1xuY29uc3QgSUZDSFIgPSAwYjAwMTA7XG5jb25zdCBJRkRJUiA9IDBiMDEwMDtcbmNvbnN0IElGQkxLID0gMGIwMTEwO1xuY29uc3QgSUZSRUcgPSAwYjEwMDA7XG5jb25zdCBJRkxOSyA9IDBiMTAxMDtcbmNvbnN0IElGU09DSyA9IDBiMTEwMDtcbmNvbnN0IElGTVQgPSAwYjExMTE7XG4vLyBtYXNrIHRvIHVuc2V0IGxvdyA0IGJpdHNcbmNvbnN0IElGTVRfVU5LTk9XTiA9IH5JRk1UO1xuLy8gc2V0IGFmdGVyIHN1Y2Nlc3NmdWxseSBjYWxsaW5nIHJlYWRkaXIoKSBhbmQgZ2V0dGluZyBlbnRyaWVzLlxuY29uc3QgUkVBRERJUl9DQUxMRUQgPSAwYjAwMDBfMDAwMV8wMDAwO1xuLy8gc2V0IGFmdGVyIGEgc3VjY2Vzc2Z1bCBsc3RhdCgpXG5jb25zdCBMU1RBVF9DQUxMRUQgPSAwYjAwMDBfMDAxMF8wMDAwO1xuLy8gc2V0IGlmIGFuIGVudHJ5IChvciBvbmUgb2YgaXRzIHBhcmVudHMpIGlzIGRlZmluaXRlbHkgbm90IGEgZGlyXG5jb25zdCBFTk9URElSID0gMGIwMDAwXzAxMDBfMDAwMDtcbi8vIHNldCBpZiBhbiBlbnRyeSAob3Igb25lIG9mIGl0cyBwYXJlbnRzKSBkb2VzIG5vdCBleGlzdFxuLy8gKGNhbiBhbHNvIGJlIHNldCBvbiBsc3RhdCBlcnJvcnMgbGlrZSBFQUNDRVMgb3IgRU5BTUVUT09MT05HKVxuY29uc3QgRU5PRU5UID0gMGIwMDAwXzEwMDBfMDAwMDtcbi8vIGNhbm5vdCBoYXZlIGNoaWxkIGVudHJpZXMgLS0gYWxzbyB2ZXJpZnkgJklGTVQgaXMgZWl0aGVyIElGRElSIG9yIElGTE5LXG4vLyBzZXQgaWYgd2UgZmFpbCB0byByZWFkbGlua1xuY29uc3QgRU5PUkVBRExJTksgPSAwYjAwMDFfMDAwMF8wMDAwO1xuLy8gc2V0IGlmIHdlIGtub3cgcmVhbHBhdGgoKSB3aWxsIGZhaWxcbmNvbnN0IEVOT1JFQUxQQVRIID0gMGIwMDEwXzAwMDBfMDAwMDtcbmNvbnN0IEVOT0NISUxEID0gRU5PVERJUiB8IEVOT0VOVCB8IEVOT1JFQUxQQVRIO1xuY29uc3QgVFlQRU1BU0sgPSAwYjAwMTFfMTExMV8xMTExO1xuY29uc3QgZW50VG9UeXBlID0gKHMpID0+IHMuaXNGaWxlKCkgPyBJRlJFR1xuICAgIDogcy5pc0RpcmVjdG9yeSgpID8gSUZESVJcbiAgICAgICAgOiBzLmlzU3ltYm9saWNMaW5rKCkgPyBJRkxOS1xuICAgICAgICAgICAgOiBzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgPyBJRkNIUlxuICAgICAgICAgICAgICAgIDogcy5pc0Jsb2NrRGV2aWNlKCkgPyBJRkJMS1xuICAgICAgICAgICAgICAgICAgICA6IHMuaXNTb2NrZXQoKSA/IElGU09DS1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBzLmlzRklGTygpID8gSUZJRk9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFVOS05PV047XG4vLyBub3JtYWxpemUgdW5pY29kZSBwYXRoIG5hbWVzXG5jb25zdCBub3JtYWxpemVDYWNoZSA9IG5ldyBMUlVDYWNoZSh7IG1heDogMiAqKiAxMiB9KTtcbmNvbnN0IG5vcm1hbGl6ZSA9IChzKSA9PiB7XG4gICAgY29uc3QgYyA9IG5vcm1hbGl6ZUNhY2hlLmdldChzKTtcbiAgICBpZiAoYylcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgY29uc3QgbiA9IHMubm9ybWFsaXplKCdORktEJyk7XG4gICAgbm9ybWFsaXplQ2FjaGUuc2V0KHMsIG4pO1xuICAgIHJldHVybiBuO1xufTtcbmNvbnN0IG5vcm1hbGl6ZU5vY2FzZUNhY2hlID0gbmV3IExSVUNhY2hlKHsgbWF4OiAyICoqIDEyIH0pO1xuY29uc3Qgbm9ybWFsaXplTm9jYXNlID0gKHMpID0+IHtcbiAgICBjb25zdCBjID0gbm9ybWFsaXplTm9jYXNlQ2FjaGUuZ2V0KHMpO1xuICAgIGlmIChjKVxuICAgICAgICByZXR1cm4gYztcbiAgICBjb25zdCBuID0gbm9ybWFsaXplKHMudG9Mb3dlckNhc2UoKSk7XG4gICAgbm9ybWFsaXplTm9jYXNlQ2FjaGUuc2V0KHMsIG4pO1xuICAgIHJldHVybiBuO1xufTtcbi8qKlxuICogQW4gTFJVQ2FjaGUgZm9yIHN0b3JpbmcgcmVzb2x2ZWQgcGF0aCBzdHJpbmdzIG9yIFBhdGggb2JqZWN0cy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgUmVzb2x2ZUNhY2hlIGV4dGVuZHMgTFJVQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IG1heDogMjU2IH0pO1xuICAgIH1cbn1cbi8vIEluIG9yZGVyIHRvIHByZXZlbnQgYmxvd2luZyBvdXQgdGhlIGpzIGhlYXAgYnkgYWxsb2NhdGluZyBodW5kcmVkcyBvZlxuLy8gdGhvdXNhbmRzIG9mIFBhdGggZW50cmllcyB3aGVuIHdhbGtpbmcgZXh0cmVtZWx5IGxhcmdlIHRyZWVzLCB0aGUgXCJjaGlsZHJlblwiXG4vLyBpbiB0aGlzIHRyZWUgYXJlIHJlcHJlc2VudGVkIGJ5IHN0b3JpbmcgYW4gYXJyYXkgb2YgUGF0aCBlbnRyaWVzIGluIGFuXG4vLyBMUlVDYWNoZSwgaW5kZXhlZCBieSB0aGUgcGFyZW50LiAgQXQgYW55IHRpbWUsIFBhdGguY2hpbGRyZW4oKSBtYXkgcmV0dXJuIGFuXG4vLyBlbXB0eSBhcnJheSwgaW5kaWNhdGluZyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dCBhbnkgb2YgaXRzIGNoaWxkcmVuLCBhbmRcbi8vIHRodXMgaGFzIHRvIHJlYnVpbGQgdGhhdCBjYWNoZS4gIFRoaXMgaXMgZmluZSwgaXQganVzdCBtZWFucyB0aGF0IHdlIGRvbid0XG4vLyBiZW5lZml0IGFzIG11Y2ggZnJvbSBoYXZpbmcgdGhlIGNhY2hlZCBlbnRyaWVzLCBidXQgaHVnZSBkaXJlY3Rvcnkgd2Fsa3Ncbi8vIGRvbid0IGJsb3cgb3V0IHRoZSBzdGFjaywgYW5kIHNtYWxsZXIgb25lcyBhcmUgc3RpbGwgYXMgZmFzdCBhcyBwb3NzaWJsZS5cbi8vXG4vL0l0IGRvZXMgaW1wb3NlIHNvbWUgY29tcGxleGl0eSB3aGVuIGJ1aWxkaW5nIHVwIHRoZSByZWFkZGlyIGRhdGEsIGJlY2F1c2Ugd2Vcbi8vbmVlZCB0byBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZHJlbiBhcnJheSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aC5cbi8qKlxuICogYW4gTFJVQ2FjaGUgZm9yIHN0b3JpbmcgY2hpbGQgZW50cmllcy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgQ2hpbGRyZW5DYWNoZSBleHRlbmRzIExSVUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihtYXhTaXplID0gMTYgKiAxMDI0KSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG1heFNpemUsXG4gICAgICAgICAgICAvLyBwYXJlbnQgKyBjaGlsZHJlblxuICAgICAgICAgICAgc2l6ZUNhbGN1bGF0aW9uOiBhID0+IGEubGVuZ3RoICsgMSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuY29uc3Qgc2V0QXNDd2QgPSBTeW1ib2woJ1BhdGhTY3Vycnkgc2V0QXNDd2QnKTtcbi8qKlxuICogUGF0aCBvYmplY3RzIGFyZSBzb3J0IG9mIGxpa2UgYSBzdXBlci1wb3dlcmVkXG4gKiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0L2FwaS9mcy5odG1sI2NsYXNzLWZzZGlyZW50IGZzLkRpcmVudH1cbiAqXG4gKiBFYWNoIG9uZSByZXByZXNlbnRzIGEgc2luZ2xlIGZpbGVzeXN0ZW0gZW50cnkgb24gZGlzaywgd2hpY2ggbWF5IG9yIG1heSBub3RcbiAqIGV4aXN0LiBJdCBpbmNsdWRlcyBtZXRob2RzIGZvciByZWFkaW5nIHZhcmlvdXMgdHlwZXMgb2YgaW5mb3JtYXRpb24gdmlhXG4gKiBsc3RhdCwgcmVhZGxpbmssIGFuZCByZWFkZGlyLCBhbmQgY2FjaGVzIGFsbCBpbmZvcm1hdGlvbiB0byB0aGUgZ3JlYXRlc3RcbiAqIGRlZ3JlZSBwb3NzaWJsZS5cbiAqXG4gKiBOb3RlIHRoYXQgZnMgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIG5vcm1hbGx5IHRocm93IHdpbGwgaW5zdGVhZCByZXR1cm4gYW5cbiAqIFwiZW1wdHlcIiB2YWx1ZS4gVGhpcyBpcyBpbiBvcmRlciB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBvdmVyaGVhZCBmcm9tIGVycm9yXG4gKiBzdGFjayB0cmFjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoQmFzZSB7XG4gICAgLyoqXG4gICAgICogdGhlIGJhc2VuYW1lIG9mIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogKipJbXBvcnRhbnQqKjogKmFsd2F5cyogdGVzdCB0aGUgcGF0aCBuYW1lIGFnYWluc3QgYW55IHRlc3Qgc3RyaW5nXG4gICAgICogdXNpbmd0aGUge0BsaW5rIGlzTmFtZWR9IG1ldGhvZCwgYW5kIG5vdCBieSBkaXJlY3RseSBjb21wYXJpbmcgdGhpc1xuICAgICAqIHN0cmluZy4gT3RoZXJ3aXNlLCB1bmljb2RlIHBhdGggc3RyaW5ncyB0aGF0IHRoZSBzeXN0ZW0gc2VlcyBhcyBpZGVudGljYWxcbiAgICAgKiB3aWxsIG5vdCBiZSBwcm9wZXJseSB0cmVhdGVkIGFzIHRoZSBzYW1lIHBhdGgsIGxlYWRpbmcgdG8gaW5jb3JyZWN0XG4gICAgICogYmVoYXZpb3IgYW5kIHBvc3NpYmxlIHNlY3VyaXR5IGlzc3Vlcy5cbiAgICAgKi9cbiAgICBuYW1lO1xuICAgIC8qKlxuICAgICAqIHRoZSBQYXRoIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhdGggcm9vdC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHJvb3Q7XG4gICAgLyoqXG4gICAgICogQWxsIHJvb3RzIGZvdW5kIHdpdGhpbiB0aGUgY3VycmVudCBQYXRoU2N1cnJ5IGZhbWlseVxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcm9vdHM7XG4gICAgLyoqXG4gICAgICogYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBwYXRoLCBvciB1bmRlZmluZWQgaW4gdGhlIGNhc2Ugb2Ygcm9vdCBlbnRyaWVzXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwYXJlbnQ7XG4gICAgLyoqXG4gICAgICogYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgcGF0aHMgYXJlIGNvbXBhcmVkIGNhc2UtaW5zZW5zaXRpdmVseVxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5vY2FzZTtcbiAgICAvKipcbiAgICAgKiBib29sZWFuIGluZGljYXRpbmcgdGhhdCB0aGlzIHBhdGggaXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAgICAgKiBvZiB0aGUgUGF0aFNjdXJyeSBjb2xsZWN0aW9uIHRoYXQgY29udGFpbnMgaXQuXG4gICAgICovXG4gICAgaXNDV0QgPSBmYWxzZTtcbiAgICAvLyBwb3RlbnRpYWwgZGVmYXVsdCBmcyBvdmVycmlkZVxuICAgICNmcztcbiAgICAvLyBTdGF0cyBmaWVsZHNcbiAgICAjZGV2O1xuICAgIGdldCBkZXYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkZXY7XG4gICAgfVxuICAgICNtb2RlO1xuICAgIGdldCBtb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbW9kZTtcbiAgICB9XG4gICAgI25saW5rO1xuICAgIGdldCBubGluaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI25saW5rO1xuICAgIH1cbiAgICAjdWlkO1xuICAgIGdldCB1aWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN1aWQ7XG4gICAgfVxuICAgICNnaWQ7XG4gICAgZ2V0IGdpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2dpZDtcbiAgICB9XG4gICAgI3JkZXY7XG4gICAgZ2V0IHJkZXYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNyZGV2O1xuICAgIH1cbiAgICAjYmxrc2l6ZTtcbiAgICBnZXQgYmxrc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Jsa3NpemU7XG4gICAgfVxuICAgICNpbm87XG4gICAgZ2V0IGlubygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lubztcbiAgICB9XG4gICAgI3NpemU7XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNzaXplO1xuICAgIH1cbiAgICAjYmxvY2tzO1xuICAgIGdldCBibG9ja3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNibG9ja3M7XG4gICAgfVxuICAgICNhdGltZU1zO1xuICAgIGdldCBhdGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYXRpbWVNcztcbiAgICB9XG4gICAgI210aW1lTXM7XG4gICAgZ2V0IG10aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtdGltZU1zO1xuICAgIH1cbiAgICAjY3RpbWVNcztcbiAgICBnZXQgY3RpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2N0aW1lTXM7XG4gICAgfVxuICAgICNiaXJ0aHRpbWVNcztcbiAgICBnZXQgYmlydGh0aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNiaXJ0aHRpbWVNcztcbiAgICB9XG4gICAgI2F0aW1lO1xuICAgIGdldCBhdGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2F0aW1lO1xuICAgIH1cbiAgICAjbXRpbWU7XG4gICAgZ2V0IG10aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbXRpbWU7XG4gICAgfVxuICAgICNjdGltZTtcbiAgICBnZXQgY3RpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjdGltZTtcbiAgICB9XG4gICAgI2JpcnRodGltZTtcbiAgICBnZXQgYmlydGh0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmlydGh0aW1lO1xuICAgIH1cbiAgICAjbWF0Y2hOYW1lO1xuICAgICNkZXB0aDtcbiAgICAjZnVsbHBhdGg7XG4gICAgI2Z1bGxwYXRoUG9zaXg7XG4gICAgI3JlbGF0aXZlO1xuICAgICNyZWxhdGl2ZVBvc2l4O1xuICAgICN0eXBlO1xuICAgICNjaGlsZHJlbjtcbiAgICAjbGlua1RhcmdldDtcbiAgICAjcmVhbHBhdGg7XG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBEaXJlbnQgY2xhc3MgYXMgb2ZcbiAgICAgKiBOb2RlIHYyMCwgd2hlcmUgRGlyZW50WydwYXJlbnRQYXRoJ10gcmVmZXJzIHRvIHRoZSBwYXRoIG9mIHRoZVxuICAgICAqIGRpcmVjdG9yeSB0aGF0IHdhcyBwYXNzZWQgdG8gcmVhZGRpci4gRm9yIHJvb3QgZW50cmllcywgaXQncyB0aGUgcGF0aFxuICAgICAqIHRvIHRoZSBlbnRyeSBpdHNlbGYuXG4gICAgICovXG4gICAgZ2V0IHBhcmVudFBhdGgoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5wYXJlbnQgfHwgdGhpcykuZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgLyoqXG4gICAgICogRGVwcmVjYXRlZCBhbGlhcyBmb3IgRGlyZW50WydwYXJlbnRQYXRoJ10gU29tZXdoYXQgY291bnRlcmludHVpdGl2ZWx5LFxuICAgICAqIHRoaXMgcHJvcGVydHkgcmVmZXJzIHRvIHRoZSAqcGFyZW50KiBwYXRoLCBub3QgdGhlIHBhdGggb2JqZWN0IGl0c2VsZi5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IHBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFBhdGg7XG4gICAgfVxuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgLyoqXG4gICAgICogRG8gbm90IGNyZWF0ZSBuZXcgUGF0aCBvYmplY3RzIGRpcmVjdGx5LiAgVGhleSBzaG91bGQgYWx3YXlzIGJlIGFjY2Vzc2VkXG4gICAgICogdmlhIHRoZSBQYXRoU2N1cnJ5IGNsYXNzIG9yIG90aGVyIG1ldGhvZHMgb24gdGhlIFBhdGggY2xhc3MuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0eXBlID0gVU5LTk9XTiwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy4jbWF0Y2hOYW1lID0gbm9jYXNlID8gbm9ybWFsaXplTm9jYXNlKG5hbWUpIDogbm9ybWFsaXplKG5hbWUpO1xuICAgICAgICB0aGlzLiN0eXBlID0gdHlwZSAmIFRZUEVNQVNLO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICAgICAgdGhpcy5yb290cyA9IHJvb3RzO1xuICAgICAgICB0aGlzLnJvb3QgPSByb290IHx8IHRoaXM7XG4gICAgICAgIHRoaXMuI2NoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIHRoaXMuI2Z1bGxwYXRoID0gb3B0cy5mdWxscGF0aDtcbiAgICAgICAgdGhpcy4jcmVsYXRpdmUgPSBvcHRzLnJlbGF0aXZlO1xuICAgICAgICB0aGlzLiNyZWxhdGl2ZVBvc2l4ID0gb3B0cy5yZWxhdGl2ZVBvc2l4O1xuICAgICAgICB0aGlzLnBhcmVudCA9IG9wdHMucGFyZW50O1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuI2ZzID0gdGhpcy5wYXJlbnQuI2ZzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jZnMgPSBmc0Zyb21PcHRpb24ob3B0cy5mcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGVwdGggb2YgdGhlIFBhdGggb2JqZWN0IGZyb20gaXRzIHJvb3QuXG4gICAgICpcbiAgICAgKiBGb3IgZXhhbXBsZSwgYSBwYXRoIGF0IGAvZm9vL2JhcmAgd291bGQgaGF2ZSBhIGRlcHRoIG9mIDIuXG4gICAgICovXG4gICAgZGVwdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNkZXB0aCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2RlcHRoO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNkZXB0aCA9IDApO1xuICAgICAgICByZXR1cm4gKHRoaXMuI2RlcHRoID0gdGhpcy5wYXJlbnQuZGVwdGgoKSArIDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZHJlbkNhY2hlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY2hpbGRyZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgUGF0aCBvYmplY3QgcmVmZXJlbmNlZCBieSB0aGUgc3RyaW5nIHBhdGgsIHJlc29sdmVkIGZyb20gdGhpcyBQYXRoXG4gICAgICovXG4gICAgcmVzb2x2ZShwYXRoKSB7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm9vdFBhdGggPSB0aGlzLmdldFJvb3RTdHJpbmcocGF0aCk7XG4gICAgICAgIGNvbnN0IGRpciA9IHBhdGguc3Vic3RyaW5nKHJvb3RQYXRoLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGRpclBhcnRzID0gZGlyLnNwbGl0KHRoaXMuc3BsaXRTZXApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByb290UGF0aCA/XG4gICAgICAgICAgICB0aGlzLmdldFJvb3Qocm9vdFBhdGgpLiNyZXNvbHZlUGFydHMoZGlyUGFydHMpXG4gICAgICAgICAgICA6IHRoaXMuI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgICNyZXNvbHZlUGFydHMoZGlyUGFydHMpIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGlyUGFydHMpIHtcbiAgICAgICAgICAgIHAgPSBwLmNoaWxkKHBhcnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgY2hpbGRyZW4gUGF0aCBvYmplY3RzLCBpZiBzdGlsbCBhdmFpbGFibGUuICBJZiB0aGV5XG4gICAgICogaGF2ZSBmYWxsZW4gb3V0IG9mIHRoZSBjYWNoZSwgdGhlbiByZXR1cm5zIGFuIGVtcHR5IGFycmF5LCBhbmQgcmVzZXRzIHRoZVxuICAgICAqIFJFQURESVJfQ0FMTEVEIGJpdCwgc28gdGhhdCBmdXR1cmUgY2FsbHMgdG8gcmVhZGRpcigpIHdpbGwgcmVxdWlyZSBhbiBmc1xuICAgICAqIGxvb2t1cC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkcmVuKCkge1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNjaGlsZHJlbi5nZXQodGhpcyk7XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBPYmplY3QuYXNzaWduKFtdLCB7IHByb3Zpc2lvbmFsOiAwIH0pO1xuICAgICAgICB0aGlzLiNjaGlsZHJlbi5zZXQodGhpcywgY2hpbGRyZW4pO1xuICAgICAgICB0aGlzLiN0eXBlICY9IH5SRUFERElSX0NBTExFRDtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlcyBhIHBhdGggcG9ydGlvbiBhbmQgcmV0dXJucyBvciBjcmVhdGVzIHRoZSBjaGlsZCBQYXRoLlxuICAgICAqXG4gICAgICogUmV0dXJucyBgdGhpc2AgaWYgcGF0aFBhcnQgaXMgYCcnYCBvciBgJy4nYCwgb3IgYHBhcmVudGAgaWYgcGF0aFBhcnQgaXNcbiAgICAgKiBgJy4uJ2AuXG4gICAgICpcbiAgICAgKiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiAgSWYgYHBhdGhQYXJ0YCBjb250YWlucyBhbnkgcGF0aFxuICAgICAqIHNlcGFyYXRvcnMsIGl0IHdpbGwgbGVhZCB0byB1bnNhZmUgdW5kZWZpbmVkIGJlaGF2aW9yLlxuICAgICAqXG4gICAgICogVXNlIGBQYXRoLnJlc29sdmUoKWAgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkKHBhdGhQYXJ0LCBvcHRzKSB7XG4gICAgICAgIGlmIChwYXRoUGFydCA9PT0gJycgfHwgcGF0aFBhcnQgPT09ICcuJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSAnLi4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgfHwgdGhpcztcbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5kIHRoZSBjaGlsZFxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubm9jYXNlID8gbm9ybWFsaXplTm9jYXNlKHBhdGhQYXJ0KSA6IG5vcm1hbGl6ZShwYXRoUGFydCk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKHAuI21hdGNoTmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGRpZG4ndCBmaW5kIGl0LCBjcmVhdGUgcHJvdmlzaW9uYWwgY2hpbGQsIHNpbmNlIGl0IG1pZ2h0IG5vdFxuICAgICAgICAvLyBhY3R1YWxseSBleGlzdC4gIElmIHdlIGtub3cgdGhlIHBhcmVudCBpc24ndCBhIGRpciwgdGhlblxuICAgICAgICAvLyBpbiBmYWN0IGl0IENBTidUIGV4aXN0LlxuICAgICAgICBjb25zdCBzID0gdGhpcy5wYXJlbnQgPyB0aGlzLnNlcCA6ICcnO1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRoaXMuI2Z1bGxwYXRoID8gdGhpcy4jZnVsbHBhdGggKyBzICsgcGF0aFBhcnQgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHBjaGlsZCA9IHRoaXMubmV3Q2hpbGQocGF0aFBhcnQsIFVOS05PV04sIHtcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMsXG4gICAgICAgICAgICBmdWxscGF0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHBjaGlsZC4jdHlwZSB8PSBFTk9FTlQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG9uJ3QgaGF2ZSB0byB1cGRhdGUgcHJvdmlzaW9uYWwsIGJlY2F1c2UgaWYgd2UgaGF2ZSByZWFsIGNoaWxkcmVuLFxuICAgICAgICAvLyB0aGVuIHByb3Zpc2lvbmFsIGlzIHNldCB0byBjaGlsZHJlbi5sZW5ndGgsIG90aGVyd2lzZSBhIGxvd2VyIG51bWJlclxuICAgICAgICBjaGlsZHJlbi5wdXNoKHBjaGlsZCk7XG4gICAgICAgIHJldHVybiBwY2hpbGQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZC4gSWYgaXQgZG9lcyBub3Qgc2hhcmUgYW4gYW5jZXN0b3Igd2l0aFxuICAgICAqIHRoZSBjd2QsIHRoZW4gdGhpcyBlbmRzIHVwIGJlaW5nIGVxdWl2YWxlbnQgdG8gdGhlIGZ1bGxwYXRoKClcbiAgICAgKi9cbiAgICByZWxhdGl2ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDV0QpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0aGlzLiNyZWxhdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVsYXRpdmU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVsYXRpdmUgPSB0aGlzLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB2ID0gcC5yZWxhdGl2ZSgpO1xuICAgICAgICByZXR1cm4gcHYgKyAoIXB2IHx8ICFwLnBhcmVudCA/ICcnIDogdGhpcy5zZXApICsgbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkLCB1c2luZyAvIGFzIHRoZSBwYXRoIHNlcGFyYXRvci5cbiAgICAgKiBJZiBpdCBkb2VzIG5vdCBzaGFyZSBhbiBhbmNlc3RvciB3aXRoXG4gICAgICogdGhlIGN3ZCwgdGhlbiB0aGlzIGVuZHMgdXAgYmVpbmcgZXF1aXZhbGVudCB0byB0aGUgZnVsbHBhdGhQb3NpeCgpXG4gICAgICogT24gcG9zaXggc3lzdGVtcywgdGhpcyBpcyBpZGVudGljYWwgdG8gcmVsYXRpdmUoKS5cbiAgICAgKi9cbiAgICByZWxhdGl2ZVBvc2l4KCkge1xuICAgICAgICBpZiAodGhpcy5zZXAgPT09ICcvJylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbGF0aXZlKCk7XG4gICAgICAgIGlmICh0aGlzLmlzQ1dEKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICBpZiAodGhpcy4jcmVsYXRpdmVQb3NpeCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlbGF0aXZlUG9zaXg7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlbGF0aXZlUG9zaXggPSB0aGlzLmZ1bGxwYXRoUG9zaXgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHYgPSBwLnJlbGF0aXZlUG9zaXgoKTtcbiAgICAgICAgcmV0dXJuIHB2ICsgKCFwdiB8fCAhcC5wYXJlbnQgPyAnJyA6ICcvJykgKyBuYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbHkgcmVzb2x2ZWQgcGF0aCBzdHJpbmcgZm9yIHRoaXMgUGF0aCBlbnRyeVxuICAgICAqL1xuICAgIGZ1bGxwYXRoKCkge1xuICAgICAgICBpZiAodGhpcy4jZnVsbHBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2Z1bGxwYXRoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoID0gdGhpcy5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdiA9IHAuZnVsbHBhdGgoKTtcbiAgICAgICAgY29uc3QgZnAgPSBwdiArICghcC5wYXJlbnQgPyAnJyA6IHRoaXMuc2VwKSArIG5hbWU7XG4gICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGggPSBmcCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIHdpbmRvd3MsIHRoaXMgaXMgaWRlbnRpY2FsIHRvIGZ1bGxwYXRoLlxuICAgICAqXG4gICAgICogT24gd2luZG93cywgdGhpcyBpcyBvdmVycmlkZGVuIHRvIHJldHVybiB0aGUgZm9yd2FyZC1zbGFzaCBmb3JtIG9mIHRoZVxuICAgICAqIGZ1bGwgVU5DIHBhdGguXG4gICAgICovXG4gICAgZnVsbHBhdGhQb3NpeCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2Z1bGxwYXRoUG9zaXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNmdWxscGF0aFBvc2l4O1xuICAgICAgICBpZiAodGhpcy5zZXAgPT09ICcvJylcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLmZ1bGxwYXRoKCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICAgICAgaWYgKC9eW2Etel06XFwvL2kudGVzdChwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IGAvLz8vJHtwfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBjb25zdCBwZnBwID0gcC5mdWxscGF0aFBvc2l4KCk7XG4gICAgICAgIGNvbnN0IGZwcCA9IHBmcHAgKyAoIXBmcHAgfHwgIXAucGFyZW50ID8gJycgOiAnLycpICsgdGhpcy5uYW1lO1xuICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSBmcHApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgUGF0aCBvZiBhbiB1bmtub3duIHR5cGU/XG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgd2UgbWlnaHQga25vdyAqc29tZXRoaW5nKiBhYm91dCBpdCBpZiB0aGVyZSBoYXMgYmVlbiBhIHByZXZpb3VzXG4gICAgICogZmlsZXN5c3RlbSBvcGVyYXRpb24sIGZvciBleGFtcGxlIHRoYXQgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGlzIG5vdCBhXG4gICAgICogbGluaywgb3Igd2hldGhlciBpdCBoYXMgY2hpbGQgZW50cmllcy5cbiAgICAgKi9cbiAgICBpc1Vua25vd24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBVTktOT1dOO1xuICAgIH1cbiAgICBpc1R5cGUodHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpc1tgaXMke3R5cGV9YF0oKTtcbiAgICB9XG4gICAgZ2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmlzVW5rbm93bigpID8gJ1Vua25vd24nXG4gICAgICAgICAgICA6IHRoaXMuaXNEaXJlY3RvcnkoKSA/ICdEaXJlY3RvcnknXG4gICAgICAgICAgICAgICAgOiB0aGlzLmlzRmlsZSgpID8gJ0ZpbGUnXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5pc1N5bWJvbGljTGluaygpID8gJ1N5bWJvbGljTGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5pc0ZJRk8oKSA/ICdGSUZPJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5pc0NoYXJhY3RlckRldmljZSgpID8gJ0NoYXJhY3RlckRldmljZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzQmxvY2tEZXZpY2UoKSA/ICdCbG9ja0RldmljZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogYzggaWdub3JlIHN0YXJ0ICovIHRoaXMuaXNTb2NrZXQoKSA/ICdTb2NrZXQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnVW5rbm93bicpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgUGF0aCBhIHJlZ3VsYXIgZmlsZT9cbiAgICAgKi9cbiAgICBpc0ZpbGUoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRlJFRztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIFBhdGggYSBkaXJlY3Rvcnk/XG4gICAgICovXG4gICAgaXNEaXJlY3RvcnkoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRkRJUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBjaGFyYWN0ZXIgZGV2aWNlP1xuICAgICAqL1xuICAgIGlzQ2hhcmFjdGVyRGV2aWNlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZDSFI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgYmxvY2sgZGV2aWNlP1xuICAgICAqL1xuICAgIGlzQmxvY2tEZXZpY2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRkJMSztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBGSUZPIHBpcGU/XG4gICAgICovXG4gICAgaXNGSUZPKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZJRk87XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgc29ja2V0P1xuICAgICAqL1xuICAgIGlzU29ja2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZTT0NLO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIHN5bWJvbGljIGxpbms/XG4gICAgICovXG4gICAgaXNTeW1ib2xpY0xpbmsoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTE5LKSA9PT0gSUZMTks7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgZW50cnkgaWYgaXQgaGFzIGJlZW4gc3ViamVjdCBvZiBhIHN1Y2Nlc3NmdWwgbHN0YXQsIG9yXG4gICAgICogdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIHVuZGVmaW5lZCByZXN1bHQgKmNvdWxkKiBzaW1wbHlcbiAgICAgKiBtZWFuIHRoYXQgd2UgaGF2ZW4ndCBjYWxsZWQgbHN0YXQgb24gaXQuXG4gICAgICovXG4gICAgbHN0YXRDYWNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN0eXBlICYgTFNUQVRfQ0FMTEVEID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBjYWNoZWQgbGluayB0YXJnZXQgaWYgdGhlIGVudHJ5IGhhcyBiZWVuIHRoZSBzdWJqZWN0IG9mIGFcbiAgICAgKiBzdWNjZXNzZnVsIHJlYWRsaW5rLCBvciB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gdW5kZWZpbmVkIHJlc3VsdCAqY291bGQqIGp1c3QgbWVhbiB3ZVxuICAgICAqIGRvbid0IGhhdmUgYW55IGNhY2hlZCBkYXRhLiBPbmx5IHVzZSBpdCBpZiB5b3UgYXJlIHZlcnkgc3VyZSB0aGF0IGFcbiAgICAgKiByZWFkbGluaygpIGhhcyBiZWVuIGNhbGxlZCBhdCBzb21lIHBvaW50LlxuICAgICAqL1xuICAgIHJlYWRsaW5rQ2FjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbGlua1RhcmdldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2FjaGVkIHJlYWxwYXRoIHRhcmdldCBpZiB0aGUgZW50cnkgaGFzIGJlZW4gdGhlIHN1YmplY3RcbiAgICAgKiBvZiBhIHN1Y2Nlc3NmdWwgcmVhbHBhdGgsIG9yIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiB1bmRlZmluZWQgcmVzdWx0ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWxwYXRoKCkgaGFzIGJlZW4gY2FsbGVkIGF0IHNvbWUgcG9pbnQuXG4gICAgICovXG4gICAgcmVhbHBhdGhDYWNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNyZWFscGF0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2FjaGVkIGNoaWxkIFBhdGggZW50cmllcyBhcnJheSBpZiB0aGUgZW50cnkgaGFzIGJlZW4gdGhlXG4gICAgICogc3ViamVjdCBvZiBhIHN1Y2Nlc3NmdWwgcmVhZGRpcigpLCBvciBbXSBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiBlbXB0eSBhcnJheSAqY291bGQqIGp1c3QgbWVhbiB3ZVxuICAgICAqIGRvbid0IGhhdmUgYW55IGNhY2hlZCBkYXRhLiBPbmx5IHVzZSBpdCBpZiB5b3UgYXJlIHZlcnkgc3VyZSB0aGF0IGFcbiAgICAgKiByZWFkZGlyKCkgaGFzIGJlZW4gY2FsbGVkIHJlY2VudGx5IGVub3VnaCB0byBzdGlsbCBiZSB2YWxpZC5cbiAgICAgKi9cbiAgICByZWFkZGlyQ2FjaGVkKCkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgaXQncyB3b3J0aCB0cnlpbmcgdG8gcmVhZGxpbmsuICBJZSwgd2UgZG9uJ3QgKHlldCkgaGF2ZVxuICAgICAqIGFueSBpbmRpY2F0aW9uIHRoYXQgcmVhZGxpbmsgd2lsbCBkZWZpbml0ZWx5IGZhaWwuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYXRoIGlzIGtub3duIHRvIG5vdCBiZSBhIHN5bWxpbmssIGlmIGEgcHJldmlvdXNcbiAgICAgKiByZWFkbGluayBmYWlsZWQsIG9yIGlmIHRoZSBlbnRyeSBkb2VzIG5vdCBleGlzdC5cbiAgICAgKi9cbiAgICBjYW5SZWFkbGluaygpIHtcbiAgICAgICAgaWYgKHRoaXMuI2xpbmtUYXJnZXQpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gY2FzZXMgd2hlcmUgaXQgY2Fubm90IHBvc3NpYmx5IHN1Y2NlZWRcbiAgICAgICAgY29uc3QgaWZtdCA9IHRoaXMuI3R5cGUgJiBJRk1UO1xuICAgICAgICByZXR1cm4gISgoaWZtdCAhPT0gVU5LTk9XTiAmJiBpZm10ICE9PSBJRkxOSykgfHxcbiAgICAgICAgICAgIHRoaXMuI3R5cGUgJiBFTk9SRUFETElOSyB8fFxuICAgICAgICAgICAgdGhpcy4jdHlwZSAmIEVOT0VOVCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHJlYWRkaXIgaGFzIHByZXZpb3VzbHkgYmVlbiBzdWNjZXNzZnVsbHkgY2FsbGVkIG9uIHRoaXNcbiAgICAgKiBwYXRoLCBpbmRpY2F0aW5nIHRoYXQgY2FjaGVkUmVhZGRpcigpIGlzIGxpa2VseSB2YWxpZC5cbiAgICAgKi9cbiAgICBjYWxsZWRSZWFkZGlyKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy4jdHlwZSAmIFJFQURESVJfQ0FMTEVEKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXRoIGlzIGtub3duIHRvIG5vdCBleGlzdC4gVGhhdCBpcywgYSBwcmV2aW91cyBsc3RhdFxuICAgICAqIG9yIHJlYWRkaXIgZmFpbGVkIHRvIHZlcmlmeSBpdHMgZXhpc3RlbmNlIHdoZW4gdGhhdCB3b3VsZCBoYXZlIGJlZW5cbiAgICAgKiBleHBlY3RlZCwgb3IgYSBwYXJlbnQgZW50cnkgd2FzIG1hcmtlZCBlaXRoZXIgZW5vZW50IG9yIGVub3RkaXIuXG4gICAgICovXG4gICAgaXNFTk9FTlQoKSB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLiN0eXBlICYgRU5PRU5UKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHBhdGggaXMgYSBtYXRjaCBmb3IgdGhlIGdpdmVuIHBhdGggbmFtZS4gIFRoaXMgaGFuZGxlc1xuICAgICAqIGNhc2Ugc2Vuc2l0aXZpdHkgYW5kIHVuaWNvZGUgbm9ybWFsaXphdGlvbi5cbiAgICAgKlxuICAgICAqIE5vdGU6IGV2ZW4gb24gY2FzZS1zZW5zaXRpdmUgc3lzdGVtcywgaXQgaXMgKipub3QqKiBzYWZlIHRvIHRlc3QgdGhlXG4gICAgICogZXF1YWxpdHkgb2YgdGhlIGAubmFtZWAgcHJvcGVydHkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBnaXZlbiBwYXRobmFtZVxuICAgICAqIG1hdGNoZXMsIGR1ZSB0byB1bmljb2RlIG5vcm1hbGl6YXRpb24gbWlzbWF0Y2hlcy5cbiAgICAgKlxuICAgICAqIEFsd2F5cyB1c2UgdGhpcyBtZXRob2QgaW5zdGVhZCBvZiB0ZXN0aW5nIHRoZSBgcGF0aC5uYW1lYCBwcm9wZXJ0eVxuICAgICAqIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIGlzTmFtZWQobikge1xuICAgICAgICByZXR1cm4gIXRoaXMubm9jYXNlID9cbiAgICAgICAgICAgIHRoaXMuI21hdGNoTmFtZSA9PT0gbm9ybWFsaXplKG4pXG4gICAgICAgICAgICA6IHRoaXMuI21hdGNoTmFtZSA9PT0gbm9ybWFsaXplTm9jYXNlKG4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFBhdGggb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRhcmdldCBvZiBhIHN5bWJvbGljIGxpbmsuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCBpcyBub3QgYSBzeW1ib2xpYyBsaW5rLCBvciBpZiB0aGUgcmVhZGxpbmsgY2FsbCBmYWlscyBmb3IgYW55XG4gICAgICogcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdCBpcyBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXRkYXRlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWRsaW5rKCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiNsaW5rVGFyZ2V0O1xuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkbGluaygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAvLyBhbHJlYWR5IGNvdmVyZWQgYnkgdGhlIGNhblJlYWRsaW5rIHRlc3QsIGhlcmUgZm9yIHRzIGdydW1wbGVzXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWQgPSBhd2FpdCB0aGlzLiNmcy5wcm9taXNlcy5yZWFkbGluayh0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgY29uc3QgbGlua1RhcmdldCA9IChhd2FpdCB0aGlzLnBhcmVudC5yZWFscGF0aCgpKT8ucmVzb2x2ZShyZWFkKTtcbiAgICAgICAgICAgIGlmIChsaW5rVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNsaW5rVGFyZ2V0ID0gbGlua1RhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNyZWFkbGlua0ZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5yZWFkbGlua31cbiAgICAgKi9cbiAgICByZWFkbGlua1N5bmMoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuI2xpbmtUYXJnZXQ7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRsaW5rKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIC8vIGFscmVhZHkgY292ZXJlZCBieSB0aGUgY2FuUmVhZGxpbmsgdGVzdCwgaGVyZSBmb3IgdHMgZ3J1bXBsZXNcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVhZCA9IHRoaXMuI2ZzLnJlYWRsaW5rU3luYyh0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgY29uc3QgbGlua1RhcmdldCA9IHRoaXMucGFyZW50LnJlYWxwYXRoU3luYygpPy5yZXNvbHZlKHJlYWQpO1xuICAgICAgICAgICAgaWYgKGxpbmtUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2xpbmtUYXJnZXQgPSBsaW5rVGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRsaW5rRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKSB7XG4gICAgICAgIC8vIHN1Y2NlZWRlZCwgbWFyayByZWFkZGlyIGNhbGxlZCBiaXRcbiAgICAgICAgdGhpcy4jdHlwZSB8PSBSRUFERElSX0NBTExFRDtcbiAgICAgICAgLy8gbWFyayBhbGwgcmVtYWluaW5nIHByb3Zpc2lvbmFsIGNoaWxkcmVuIGFzIEVOT0VOVFxuICAgICAgICBmb3IgKGxldCBwID0gY2hpbGRyZW4ucHJvdmlzaW9uYWw7IHAgPCBjaGlsZHJlbi5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgY29uc3QgYyA9IGNoaWxkcmVuW3BdO1xuICAgICAgICAgICAgaWYgKGMpXG4gICAgICAgICAgICAgICAgYy4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNtYXJrRU5PRU5UKCkge1xuICAgICAgICAvLyBtYXJrIGFzIFVOS05PV04gYW5kIEVOT0VOVFxuICAgICAgICBpZiAodGhpcy4jdHlwZSAmIEVOT0VOVClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy4jdHlwZSA9ICh0aGlzLiN0eXBlIHwgRU5PRU5UKSAmIElGTVRfVU5LTk9XTjtcbiAgICAgICAgdGhpcy4jbWFya0NoaWxkcmVuRU5PRU5UKCk7XG4gICAgfVxuICAgICNtYXJrQ2hpbGRyZW5FTk9FTlQoKSB7XG4gICAgICAgIC8vIGFsbCBjaGlsZHJlbiBhcmUgcHJvdmlzaW9uYWwgYW5kIGRvIG5vdCBleGlzdFxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHAuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjbWFya0VOT1JFQUxQQVRIKCkge1xuICAgICAgICB0aGlzLiN0eXBlIHw9IEVOT1JFQUxQQVRIO1xuICAgICAgICB0aGlzLiNtYXJrRU5PVERJUigpO1xuICAgIH1cbiAgICAvLyBzYXZlIHRoZSBpbmZvcm1hdGlvbiB3aGVuIHdlIGtub3cgdGhlIGVudHJ5IGlzIG5vdCBhIGRpclxuICAgICNtYXJrRU5PVERJUigpIHtcbiAgICAgICAgLy8gZW50cnkgaXMgbm90IGEgZGlyZWN0b3J5LCBzbyBhbnkgY2hpbGRyZW4gY2FuJ3QgZXhpc3QuXG4gICAgICAgIC8vIHRoaXMgKnNob3VsZCogYmUgaW1wb3NzaWJsZSwgc2luY2UgYW55IGNoaWxkcmVuIGNyZWF0ZWRcbiAgICAgICAgLy8gYWZ0ZXIgaXQncyBiZWVuIG1hcmtlZCBFTk9URElSIHNob3VsZCBiZSBtYXJrZWQgRU5PRU5ULFxuICAgICAgICAvLyBzbyBpdCB3b24ndCBldmVuIGdldCB0byB0aGlzIHBvaW50LlxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuI3R5cGUgJiBFTk9URElSKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBsZXQgdCA9IHRoaXMuI3R5cGU7XG4gICAgICAgIC8vIHRoaXMgY291bGQgaGFwcGVuIGlmIHdlIHN0YXQgYSBkaXIsIHRoZW4gZGVsZXRlIGl0LFxuICAgICAgICAvLyB0aGVuIHRyeSB0byByZWFkIGl0IG9yIG9uZSBvZiBpdHMgY2hpbGRyZW4uXG4gICAgICAgIGlmICgodCAmIElGTVQpID09PSBJRkRJUilcbiAgICAgICAgICAgIHQgJj0gSUZNVF9VTktOT1dOO1xuICAgICAgICB0aGlzLiN0eXBlID0gdCB8IEVOT1RESVI7XG4gICAgICAgIHRoaXMuI21hcmtDaGlsZHJlbkVOT0VOVCgpO1xuICAgIH1cbiAgICAjcmVhZGRpckZhaWwoY29kZSA9ICcnKSB7XG4gICAgICAgIC8vIG1hcmtFTk9URElSIGFuZCBtYXJrRU5PRU5UIGFsc28gc2V0IHByb3Zpc2lvbmFsPTBcbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9URElSJyB8fCBjb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PVERJUigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuKCkucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgICNsc3RhdEZhaWwoY29kZSA9ICcnKSB7XG4gICAgICAgIC8vIFdpbmRvd3MganVzdCByYWlzZXMgRU5PRU5UIGluIHRoaXMgY2FzZSwgZGlzYWJsZSBmb3Igd2luIENJXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT1RESVInKSB7XG4gICAgICAgICAgICAvLyBhbHJlYWR5IGtub3cgaXQgaGFzIGEgcGFyZW50IGJ5IHRoaXMgcG9pbnRcbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgIHAuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI3JlYWRsaW5rRmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgbGV0IHRlciA9IHRoaXMuI3R5cGU7XG4gICAgICAgIHRlciB8PSBFTk9SRUFETElOSztcbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9FTlQnKVxuICAgICAgICAgICAgdGVyIHw9IEVOT0VOVDtcbiAgICAgICAgLy8gd2luZG93cyBnZXRzIGEgd2VpcmQgZXJyb3Igd2hlbiB5b3UgdHJ5IHRvIHJlYWRsaW5rIGEgZmlsZVxuICAgICAgICBpZiAoY29kZSA9PT0gJ0VJTlZBTCcgfHwgY29kZSA9PT0gJ1VOS05PV04nKSB7XG4gICAgICAgICAgICAvLyBleGlzdHMsIGJ1dCBub3QgYSBzeW1saW5rLCB3ZSBkb24ndCBrbm93IFdIQVQgaXQgaXMsIHNvIHJlbW92ZVxuICAgICAgICAgICAgLy8gYWxsIElGTVQgYml0cy5cbiAgICAgICAgICAgIHRlciAmPSBJRk1UX1VOS05PV047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jdHlwZSA9IHRlcjtcbiAgICAgICAgLy8gd2luZG93cyBqdXN0IGdldHMgRU5PRU5UIGluIHRoaXMgY2FzZS4gIFdlIGRvIGNvdmVyIHRoZSBjYXNlLFxuICAgICAgICAvLyBqdXN0IGRpc2FibGVkIGJlY2F1c2UgaXQncyBpbXBvc3NpYmxlIG9uIFdpbmRvd3MgQ0lcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PVERJUicgJiYgdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LiNtYXJrRU5PVERJUigpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgICNyZWFkZGlyQWRkQ2hpbGQoZSwgYykge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3JlYWRkaXJNYXliZVByb21vdGVDaGlsZChlLCBjKSB8fFxuICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZE5ld0NoaWxkKGUsIGMpKTtcbiAgICB9XG4gICAgI3JlYWRkaXJBZGROZXdDaGlsZChlLCBjKSB7XG4gICAgICAgIC8vIGFsbG9jIG5ldyBlbnRyeSBhdCBoZWFkLCBzbyBpdCdzIG5ldmVyIHByb3Zpc2lvbmFsXG4gICAgICAgIGNvbnN0IHR5cGUgPSBlbnRUb1R5cGUoZSk7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5uZXdDaGlsZChlLm5hbWUsIHR5cGUsIHsgcGFyZW50OiB0aGlzIH0pO1xuICAgICAgICBjb25zdCBpZm10ID0gY2hpbGQuI3R5cGUgJiBJRk1UO1xuICAgICAgICBpZiAoaWZtdCAhPT0gSUZESVIgJiYgaWZtdCAhPT0gSUZMTksgJiYgaWZtdCAhPT0gVU5LTk9XTikge1xuICAgICAgICAgICAgY2hpbGQuI3R5cGUgfD0gRU5PVERJUjtcbiAgICAgICAgfVxuICAgICAgICBjLnVuc2hpZnQoY2hpbGQpO1xuICAgICAgICBjLnByb3Zpc2lvbmFsKys7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgI3JlYWRkaXJNYXliZVByb21vdGVDaGlsZChlLCBjKSB7XG4gICAgICAgIGZvciAobGV0IHAgPSBjLnByb3Zpc2lvbmFsOyBwIDwgYy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgY29uc3QgcGNoaWxkID0gY1twXTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5vY2FzZSA/IG5vcm1hbGl6ZU5vY2FzZShlLm5hbWUpIDogbm9ybWFsaXplKGUubmFtZSk7XG4gICAgICAgICAgICBpZiAobmFtZSAhPT0gcGNoaWxkLiNtYXRjaE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWFkZGlyUHJvbW90ZUNoaWxkKGUsIHBjaGlsZCwgcCwgYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI3JlYWRkaXJQcm9tb3RlQ2hpbGQoZSwgcCwgaW5kZXgsIGMpIHtcbiAgICAgICAgY29uc3QgdiA9IHAubmFtZTtcbiAgICAgICAgLy8gcmV0YWluIGFueSBvdGhlciBmbGFncywgYnV0IHNldCBpZm10IGZyb20gZGlyZW50XG4gICAgICAgIHAuI3R5cGUgPSAocC4jdHlwZSAmIElGTVRfVU5LTk9XTikgfCBlbnRUb1R5cGUoZSk7XG4gICAgICAgIC8vIGNhc2Ugc2Vuc2l0aXZpdHkgZml4aW5nIHdoZW4gd2UgbGVhcm4gdGhlIHRydWUgbmFtZS5cbiAgICAgICAgaWYgKHYgIT09IGUubmFtZSlcbiAgICAgICAgICAgIHAubmFtZSA9IGUubmFtZTtcbiAgICAgICAgLy8ganVzdCBhZHZhbmNlIHByb3Zpc2lvbmFsIGluZGV4IChwb3RlbnRpYWxseSBvZmYgdGhlIGxpc3QpLFxuICAgICAgICAvLyBvdGhlcndpc2Ugd2UgaGF2ZSB0byBzcGxpY2UvcG9wIGl0IG91dCBhbmQgcmUtaW5zZXJ0IGF0IGhlYWRcbiAgICAgICAgaWYgKGluZGV4ICE9PSBjLnByb3Zpc2lvbmFsKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IGMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICBjLnBvcCgpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGMudW5zaGlmdChwKTtcbiAgICAgICAgfVxuICAgICAgICBjLnByb3Zpc2lvbmFsKys7XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIGxzdGF0KCkgb24gdGhpcyBQYXRoLCBhbmQgdXBkYXRlIGFsbCBrbm93biBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZVxuICAgICAqIGRldGVybWluZWQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdW5saWtlIGBmcy5sc3RhdCgpYCwgdGhlIHJldHVybmVkIHZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc29tZVxuICAgICAqIGluZm9ybWF0aW9uLCBzdWNoIGFzIGBtb2RlYCwgYGRldmAsIGBubGlua2AsIGFuZCBgaW5vYC4gIElmIHRoYXRcbiAgICAgKiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCwgeW91IHdpbGwgbmVlZCB0byBjYWxsIGBmcy5sc3RhdGAgeW91cnNlbGYuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCByZWZlcnMgdG8gYSBub25leGlzdGVudCBmaWxlLCBvciBpZiB0aGUgbHN0YXQgY2FsbCBmYWlscyBmb3JcbiAgICAgKiBhbnkgcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSB0aGUgdXBkYXRlZCBQYXRoIG9iamVjdCBpc1xuICAgICAqIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIGxzdGF0KCkge1xuICAgICAgICBpZiAoKHRoaXMuI3R5cGUgJiBFTk9FTlQpID09PSAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2FwcGx5U3RhdChhd2FpdCB0aGlzLiNmcy5wcm9taXNlcy5sc3RhdCh0aGlzLmZ1bGxwYXRoKCkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2xzdGF0RmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBzeW5jaHJvbm91cyB7QGxpbmsgUGF0aEJhc2UubHN0YXR9XG4gICAgICovXG4gICAgbHN0YXRTeW5jKCkge1xuICAgICAgICBpZiAoKHRoaXMuI3R5cGUgJiBFTk9FTlQpID09PSAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2FwcGx5U3RhdCh0aGlzLiNmcy5sc3RhdFN5bmModGhpcy5mdWxscGF0aCgpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNsc3RhdEZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2FwcGx5U3RhdChzdCkge1xuICAgICAgICBjb25zdCB7IGF0aW1lLCBhdGltZU1zLCBiaXJ0aHRpbWUsIGJpcnRodGltZU1zLCBibGtzaXplLCBibG9ja3MsIGN0aW1lLCBjdGltZU1zLCBkZXYsIGdpZCwgaW5vLCBtb2RlLCBtdGltZSwgbXRpbWVNcywgbmxpbmssIHJkZXYsIHNpemUsIHVpZCwgfSA9IHN0O1xuICAgICAgICB0aGlzLiNhdGltZSA9IGF0aW1lO1xuICAgICAgICB0aGlzLiNhdGltZU1zID0gYXRpbWVNcztcbiAgICAgICAgdGhpcy4jYmlydGh0aW1lID0gYmlydGh0aW1lO1xuICAgICAgICB0aGlzLiNiaXJ0aHRpbWVNcyA9IGJpcnRodGltZU1zO1xuICAgICAgICB0aGlzLiNibGtzaXplID0gYmxrc2l6ZTtcbiAgICAgICAgdGhpcy4jYmxvY2tzID0gYmxvY2tzO1xuICAgICAgICB0aGlzLiNjdGltZSA9IGN0aW1lO1xuICAgICAgICB0aGlzLiNjdGltZU1zID0gY3RpbWVNcztcbiAgICAgICAgdGhpcy4jZGV2ID0gZGV2O1xuICAgICAgICB0aGlzLiNnaWQgPSBnaWQ7XG4gICAgICAgIHRoaXMuI2lubyA9IGlubztcbiAgICAgICAgdGhpcy4jbW9kZSA9IG1vZGU7XG4gICAgICAgIHRoaXMuI210aW1lID0gbXRpbWU7XG4gICAgICAgIHRoaXMuI210aW1lTXMgPSBtdGltZU1zO1xuICAgICAgICB0aGlzLiNubGluayA9IG5saW5rO1xuICAgICAgICB0aGlzLiNyZGV2ID0gcmRldjtcbiAgICAgICAgdGhpcy4jc2l6ZSA9IHNpemU7XG4gICAgICAgIHRoaXMuI3VpZCA9IHVpZDtcbiAgICAgICAgY29uc3QgaWZtdCA9IGVudFRvVHlwZShzdCk7XG4gICAgICAgIC8vIHJldGFpbiBhbnkgb3RoZXIgZmxhZ3MsIGJ1dCBzZXQgdGhlIGlmbXRcbiAgICAgICAgdGhpcy4jdHlwZSA9ICh0aGlzLiN0eXBlICYgSUZNVF9VTktOT1dOKSB8IGlmbXQgfCBMU1RBVF9DQUxMRUQ7XG4gICAgICAgIGlmIChpZm10ICE9PSBVTktOT1dOICYmIGlmbXQgIT09IElGRElSICYmIGlmbXQgIT09IElGTE5LKSB7XG4gICAgICAgICAgICB0aGlzLiN0eXBlIHw9IEVOT1RESVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI29uUmVhZGRpckNCID0gW107XG4gICAgI3JlYWRkaXJDQkluRmxpZ2h0ID0gZmFsc2U7XG4gICAgI2NhbGxPblJlYWRkaXJDQihjaGlsZHJlbikge1xuICAgICAgICB0aGlzLiNyZWFkZGlyQ0JJbkZsaWdodCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjYnMgPSB0aGlzLiNvblJlYWRkaXJDQi5zbGljZSgpO1xuICAgICAgICB0aGlzLiNvblJlYWRkaXJDQi5sZW5ndGggPSAwO1xuICAgICAgICBjYnMuZm9yRWFjaChjYiA9PiBjYihudWxsLCBjaGlsZHJlbikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBub2RlLXN0eWxlIGNhbGxiYWNrIGludGVyZmFjZSB0byBnZXQgbGlzdCBvZiBkaXJlY3RvcnkgZW50cmllcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIGNhbm5vdCBvciBkb2VzIG5vdCBjb250YWluIGFueSBjaGlsZHJlbiwgdGhlbiBhbiBlbXB0eSBhcnJheVxuICAgICAqIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNiIFRoZSBjYWxsYmFjayBjYWxsZWQgd2l0aCAoZXIsIGVudHJpZXMpLiAgTm90ZSB0aGF0IHRoZSBgZXJgXG4gICAgICogcGFyYW0gaXMgc29tZXdoYXQgZXh0cmFuZW91cywgYXMgYWxsIHJlYWRkaXIoKSBlcnJvcnMgYXJlIGhhbmRsZWQgYW5kXG4gICAgICogc2ltcGx5IHJlc3VsdCBpbiBhbiBlbXB0eSBzZXQgb2YgZW50cmllcyBiZWluZyByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0gYWxsb3daYWxnbyBCb29sZWFuIGluZGljYXRpbmcgdGhhdCBpbW1lZGlhdGVseSBrbm93biByZXN1bHRzIHNob3VsZFxuICAgICAqICpub3QqIGJlIGRlZmVycmVkIHdpdGggYHF1ZXVlTWljcm90YXNrYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gUmVsZWFzZVxuICAgICAqIHphbGdvIGF0IHlvdXIgcGVyaWwsIHRoZSBkYXJrIHBvbnkgbG9yZCBpcyBkZXZpb3VzIGFuZCB1bmZvcmdpdmluZy5cbiAgICAgKi9cbiAgICByZWFkZGlyQ0IoY2IsIGFsbG93WmFsZ28gPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICBpZiAoYWxsb3daYWxnbylcbiAgICAgICAgICAgICAgICBjYihudWxsLCBbXSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2IobnVsbCwgW10pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGVkUmVhZGRpcigpKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgICAgICAgICAgaWYgKGFsbG93WmFsZ28pXG4gICAgICAgICAgICAgICAgY2IobnVsbCwgYyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2IobnVsbCwgYykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgemFsZ28gYXQgdGhpcyBwb2ludC5cbiAgICAgICAgdGhpcy4jb25SZWFkZGlyQ0IucHVzaChjYik7XG4gICAgICAgIGlmICh0aGlzLiNyZWFkZGlyQ0JJbkZsaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgLy8gZWxzZSByZWFkIHRoZSBkaXJlY3RvcnksIGZpbGwgdXAgY2hpbGRyZW5cbiAgICAgICAgLy8gZGUtcHJvdmlzaW9uYWxpemUgYW55IHByb3Zpc2lvbmFsIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRoaXMuZnVsbHBhdGgoKTtcbiAgICAgICAgdGhpcy4jZnMucmVhZGRpcihmdWxscGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0sIChlciwgZW50cmllcykgPT4ge1xuICAgICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhbiBlcnJvciwgd2UgYWx3YXlzIGdldCBlbnRyaWVzLlxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGRDaGlsZChlLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2NhbGxPblJlYWRkaXJDQihjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgI2FzeW5jUmVhZGRpckluRmxpZ2h0O1xuICAgIC8qKlxuICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBrbm93biBjaGlsZCBlbnRyaWVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggY2Fubm90IG9yIGRvZXMgbm90IGNvbnRhaW4gYW55IGNoaWxkcmVuLCB0aGVuIGFuIGVtcHR5IGFycmF5XG4gICAgICogaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcmVhZGRpcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBpZiAodGhpcy5jYWxsZWRSZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSByZWFkIHRoZSBkaXJlY3RvcnksIGZpbGwgdXAgY2hpbGRyZW5cbiAgICAgICAgLy8gZGUtcHJvdmlzaW9uYWxpemUgYW55IHByb3Zpc2lvbmFsIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRoaXMuZnVsbHBhdGgoKTtcbiAgICAgICAgaWYgKHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgbGV0IHJlc29sdmUgPSAoKSA9PiB7IH07XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQgPSBuZXcgUHJvbWlzZShyZXMgPT4gKHJlc29sdmUgPSByZXMpKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWRkaXIoZnVsbHBhdGgsIHtcbiAgICAgICAgICAgICAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkQ2hpbGQoZSwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBzeW5jaHJvbm91cyB7QGxpbmsgUGF0aEJhc2UucmVhZGRpcn1cbiAgICAgKi9cbiAgICByZWFkZGlyU3luYygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBpZiAodGhpcy5jYWxsZWRSZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSByZWFkIHRoZSBkaXJlY3RvcnksIGZpbGwgdXAgY2hpbGRyZW5cbiAgICAgICAgLy8gZGUtcHJvdmlzaW9uYWxpemUgYW55IHByb3Zpc2lvbmFsIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRoaXMuZnVsbHBhdGgoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLiNmcy5yZWFkZGlyU3luYyhmdWxscGF0aCwge1xuICAgICAgICAgICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGRDaGlsZChlLCBjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNyZWFkZGlyRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgIH1cbiAgICBjYW5SZWFkZGlyKCkge1xuICAgICAgICBpZiAodGhpcy4jdHlwZSAmIEVOT0NISUxEKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpZm10ID0gSUZNVCAmIHRoaXMuI3R5cGU7XG4gICAgICAgIC8vIHdlIGFsd2F5cyBzZXQgRU5PVERJUiB3aGVuIHNldHRpbmcgSUZNVCwgc28gc2hvdWxkIGJlIGltcG9zc2libGVcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghKGlmbXQgPT09IFVOS05PV04gfHwgaWZtdCA9PT0gSUZESVIgfHwgaWZtdCA9PT0gSUZMTkspKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikge1xuICAgICAgICByZXR1cm4gKCh0aGlzLiN0eXBlICYgSUZESVIpID09PSBJRkRJUiAmJlxuICAgICAgICAgICAgISh0aGlzLiN0eXBlICYgRU5PQ0hJTEQpICYmXG4gICAgICAgICAgICAhZGlycy5oYXModGhpcykgJiZcbiAgICAgICAgICAgICghd2Fsa0ZpbHRlciB8fCB3YWxrRmlsdGVyKHRoaXMpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGF0aCBvYmplY3QgY29ycmVzcG9uZGluZyB0byBwYXRoIGFzIHJlc29sdmVkXG4gICAgICogYnkgcmVhbHBhdGgoMykuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgcmVhbHBhdGggY2FsbCBmYWlscyBmb3IgYW55IHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHQgaXMgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0ZGF0ZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbXV0YXRlZC5cbiAgICAgKiBPbiBzdWNjZXNzLCByZXR1cm5zIGEgUGF0aCBvYmplY3QuXG4gICAgICovXG4gICAgYXN5bmMgcmVhbHBhdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZWFscGF0aClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWFscGF0aDtcbiAgICAgICAgaWYgKChFTk9SRUFMUEFUSCB8IEVOT1JFQURMSU5LIHwgRU5PRU5UKSAmIHRoaXMuI3R5cGUpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSBhd2FpdCB0aGlzLiNmcy5wcm9taXNlcy5yZWFscGF0aCh0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWFscGF0aCA9IHRoaXMucmVzb2x2ZShycCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfKSB7XG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PUkVBTFBBVEgoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91cyB7QGxpbmsgcmVhbHBhdGh9XG4gICAgICovXG4gICAgcmVhbHBhdGhTeW5jKCkge1xuICAgICAgICBpZiAodGhpcy4jcmVhbHBhdGgpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVhbHBhdGg7XG4gICAgICAgIGlmICgoRU5PUkVBTFBBVEggfCBFTk9SRUFETElOSyB8IEVOT0VOVCkgJiB0aGlzLiN0eXBlKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJwID0gdGhpcy4jZnMucmVhbHBhdGhTeW5jKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlYWxwYXRoID0gdGhpcy5yZXNvbHZlKHJwKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9SRUFMUEFUSCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludGVybmFsIG1ldGhvZCB0byBtYXJrIHRoaXMgUGF0aCBvYmplY3QgYXMgdGhlIHNjdXJyeSBjd2QsXG4gICAgICogY2FsbGVkIGJ5IHtAbGluayBQYXRoU2N1cnJ5I2NoZGlyfVxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgW3NldEFzQ3dkXShvbGRDd2QpIHtcbiAgICAgICAgaWYgKG9sZEN3ZCA9PT0gdGhpcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb2xkQ3dkLmlzQ1dEID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNDV0QgPSB0cnVlO1xuICAgICAgICBjb25zdCBjaGFuZ2VkID0gbmV3IFNldChbXSk7XG4gICAgICAgIGxldCBycCA9IFtdO1xuICAgICAgICBsZXQgcCA9IHRoaXM7XG4gICAgICAgIHdoaWxlIChwICYmIHAucGFyZW50KSB7XG4gICAgICAgICAgICBjaGFuZ2VkLmFkZChwKTtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlID0gcnAuam9pbih0aGlzLnNlcCk7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZVBvc2l4ID0gcnAuam9pbignLycpO1xuICAgICAgICAgICAgcCA9IHAucGFyZW50O1xuICAgICAgICAgICAgcnAucHVzaCgnLi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgdW4tbWVtb2l6ZSBwYXJlbnRzIG9mIG9sZCBjd2RcbiAgICAgICAgcCA9IG9sZEN3ZDtcbiAgICAgICAgd2hpbGUgKHAgJiYgcC5wYXJlbnQgJiYgIWNoYW5nZWQuaGFzKHApKSB7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlUG9zaXggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBwID0gcC5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFBhdGggY2xhc3MgdXNlZCBvbiB3aW4zMiBzeXN0ZW1zXG4gKlxuICogVXNlcyBgJ1xcXFwnYCBhcyB0aGUgcGF0aCBzZXBhcmF0b3IgZm9yIHJldHVybmVkIHBhdGhzLCBlaXRoZXIgYCdcXFxcJ2Agb3IgYCcvJ2BcbiAqIGFzIHRoZSBwYXRoIHNlcGFyYXRvciBmb3IgcGFyc2luZyBwYXRocy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhXaW4zMiBleHRlbmRzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzLlxuICAgICAqL1xuICAgIHNlcCA9ICdcXFxcJztcbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgZm9yIHBhcnNpbmcgcGF0aCBzdHJpbmdzLlxuICAgICAqL1xuICAgIHNwbGl0U2VwID0gZWl0aGVyU2VwO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHR5cGUsIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Q2hpbGQobmFtZSwgdHlwZSA9IFVOS05PV04sIG9wdHMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhXaW4zMihuYW1lLCB0eXBlLCB0aGlzLnJvb3QsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgb3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3RTdHJpbmcocGF0aCkge1xuICAgICAgICByZXR1cm4gd2luMzIucGFyc2UocGF0aCkucm9vdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdChyb290UGF0aCkge1xuICAgICAgICByb290UGF0aCA9IHVuY1RvRHJpdmUocm9vdFBhdGgudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGlmIChyb290UGF0aCA9PT0gdGhpcy5yb290Lm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2ssIG5vdCB0aGF0IG9uZSwgY2hlY2sgaWYgaXQgbWF0Y2hlcyBhbm90aGVyIHdlIGtub3cgYWJvdXRcbiAgICAgICAgZm9yIChjb25zdCBbY29tcGFyZSwgcm9vdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yb290cykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNhbWVSb290KHJvb3RQYXRoLCBjb21wYXJlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5yb290c1tyb290UGF0aF0gPSByb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UsIGhhdmUgdG8gY3JlYXRlIGEgbmV3IG9uZS5cbiAgICAgICAgcmV0dXJuICh0aGlzLnJvb3RzW3Jvb3RQYXRoXSA9IG5ldyBQYXRoU2N1cnJ5V2luMzIocm9vdFBhdGgsIHRoaXMpLnJvb3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzYW1lUm9vdChyb290UGF0aCwgY29tcGFyZSA9IHRoaXMucm9vdC5uYW1lKSB7XG4gICAgICAgIC8vIHdpbmRvd3MgY2FuIChyYXJlbHkpIGhhdmUgY2FzZS1zZW5zaXRpdmUgZmlsZXN5c3RlbSwgYnV0XG4gICAgICAgIC8vIFVOQyBhbmQgZHJpdmUgbGV0dGVycyBhcmUgYWx3YXlzIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBjYW5vbmljYWxseVxuICAgICAgICAvLyByZXByZXNlbnRlZCB1cHBlcmNhc2UuXG4gICAgICAgIHJvb3RQYXRoID0gcm9vdFBhdGhcbiAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICdcXFxcJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHVuY0RyaXZlUmVnZXhwLCAnJDFcXFxcJyk7XG4gICAgICAgIHJldHVybiByb290UGF0aCA9PT0gY29tcGFyZTtcbiAgICB9XG59XG4vKipcbiAqIFBhdGggY2xhc3MgdXNlZCBvbiBhbGwgcG9zaXggc3lzdGVtcy5cbiAqXG4gKiBVc2VzIGAnLydgIGFzIHRoZSBwYXRoIHNlcGFyYXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhQb3NpeCBleHRlbmRzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIHBhcnNpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc3BsaXRTZXAgPSAnLyc7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNlcCA9ICcvJztcbiAgICAvKipcbiAgICAgKiBEbyBub3QgY3JlYXRlIG5ldyBQYXRoIG9iamVjdHMgZGlyZWN0bHkuICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWRcbiAgICAgKiB2aWEgdGhlIFBhdGhTY3VycnkgY2xhc3Mgb3Igb3RoZXIgbWV0aG9kcyBvbiB0aGUgUGF0aCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHR5cGUgPSBVTktOT1dOLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cykge1xuICAgICAgICBzdXBlcihuYW1lLCB0eXBlLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3RTdHJpbmcocGF0aCkge1xuICAgICAgICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKCcvJykgPyAnLycgOiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdChfcm9vdFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Q2hpbGQobmFtZSwgdHlwZSA9IFVOS05PV04sIG9wdHMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhQb3NpeChuYW1lLCB0eXBlLCB0aGlzLnJvb3QsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgb3B0cyk7XG4gICAgfVxufVxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIFBhdGhTY3VycnkgY2xhc3NlcywgcHJvdmlkaW5nIHRoZSBpbnRlcmZhY2UgZm9yIHBhdGhcbiAqIHJlc29sdXRpb24gYW5kIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy5cbiAqXG4gKiBUeXBpY2FsbHksIHlvdSBzaG91bGQgKm5vdCogaW5zdGFudGlhdGUgdGhpcyBjbGFzcyBkaXJlY3RseSwgYnV0IHJhdGhlciBvbmVcbiAqIG9mIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjbGFzc2VzLCBvciB0aGUgZXhwb3J0ZWQge0BsaW5rIFBhdGhTY3Vycnl9IHdoaWNoXG4gKiBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcm9vdCBQYXRoIGVudHJ5IGZvciB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGlzIFNjdXJyeVxuICAgICAqL1xuICAgIHJvb3Q7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmluZyBwYXRoIGZvciB0aGUgcm9vdCBvZiB0aGlzIFNjdXJyeSdzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAgICAgKi9cbiAgICByb290UGF0aDtcbiAgICAvKipcbiAgICAgKiBBIGNvbGxlY3Rpb24gb2YgYWxsIHJvb3RzIGVuY291bnRlcmVkLCByZWZlcmVuY2VkIGJ5IHJvb3RQYXRoXG4gICAgICovXG4gICAgcm9vdHM7XG4gICAgLyoqXG4gICAgICogVGhlIFBhdGggZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGlzIFBhdGhTY3VycnkncyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgICAqL1xuICAgIGN3ZDtcbiAgICAjcmVzb2x2ZUNhY2hlO1xuICAgICNyZXNvbHZlUG9zaXhDYWNoZTtcbiAgICAjY2hpbGRyZW47XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBwYXRoIGNvbXBhcmlzb25zIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRydWUgb24gRGFyd2luIGFuZCBXaW5kb3dzIHN5c3RlbXMsIGZhbHNlIGVsc2V3aGVyZS5cbiAgICAgKi9cbiAgICBub2Nhc2U7XG4gICAgI2ZzO1xuICAgIC8qKlxuICAgICAqIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXG4gICAgICpcbiAgICAgKiBVc2UgUGF0aFNjdXJyeVdpbjMyLCBQYXRoU2N1cnJ5RGFyd2luLCBQYXRoU2N1cnJ5UG9zaXgsIG9yIFBhdGhTY3VycnlcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIHBhdGhJbXBsLCBzZXAsIHsgbm9jYXNlLCBjaGlsZHJlbkNhY2hlU2l6ZSA9IDE2ICogMTAyNCwgZnMgPSBkZWZhdWx0RlMsIH0gPSB7fSkge1xuICAgICAgICB0aGlzLiNmcyA9IGZzRnJvbU9wdGlvbihmcyk7XG4gICAgICAgIGlmIChjd2QgaW5zdGFuY2VvZiBVUkwgfHwgY3dkLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICAgICAgY3dkID0gZmlsZVVSTFRvUGF0aChjd2QpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlc29sdmUgYW5kIHNwbGl0IHJvb3QsIGFuZCB0aGVuIGFkZCB0byB0aGUgc3RvcmUuXG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIG9ubHkgdGltZSB3ZSBjYWxsIHBhdGgucmVzb2x2ZSgpXG4gICAgICAgIGNvbnN0IGN3ZFBhdGggPSBwYXRoSW1wbC5yZXNvbHZlKGN3ZCk7XG4gICAgICAgIHRoaXMucm9vdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLnJvb3RQYXRoID0gdGhpcy5wYXJzZVJvb3RQYXRoKGN3ZFBhdGgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlQ2FjaGUgPSBuZXcgUmVzb2x2ZUNhY2hlKCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVQb3NpeENhY2hlID0gbmV3IFJlc29sdmVDYWNoZSgpO1xuICAgICAgICB0aGlzLiNjaGlsZHJlbiA9IG5ldyBDaGlsZHJlbkNhY2hlKGNoaWxkcmVuQ2FjaGVTaXplKTtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBjd2RQYXRoLnN1YnN0cmluZyh0aGlzLnJvb3RQYXRoLmxlbmd0aCkuc3BsaXQoc2VwKTtcbiAgICAgICAgLy8gcmVzb2x2ZSgnLycpIGxlYXZlcyAnJywgc3BsaXRzIHRvIFsnJ10sIHdlIGRvbid0IHdhbnQgdGhhdC5cbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA9PT0gMSAmJiAhc3BsaXRbMF0pIHtcbiAgICAgICAgICAgIHNwbGl0LnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAobm9jYXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3QgcHJvdmlkZSBub2Nhc2Ugc2V0dGluZyB0byBQYXRoU2N1cnJ5QmFzZSBjdG9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXMubmV3Um9vdCh0aGlzLiNmcyk7XG4gICAgICAgIHRoaXMucm9vdHNbdGhpcy5yb290UGF0aF0gPSB0aGlzLnJvb3Q7XG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5yb290O1xuICAgICAgICBsZXQgbGVuID0gc3BsaXQubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3Qgam9pblNlcCA9IHBhdGhJbXBsLnNlcDtcbiAgICAgICAgbGV0IGFicyA9IHRoaXMucm9vdFBhdGg7XG4gICAgICAgIGxldCBzYXdGaXJzdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygc3BsaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGwgPSBsZW4tLTtcbiAgICAgICAgICAgIHByZXYgPSBwcmV2LmNoaWxkKHBhcnQsIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZTogbmV3IEFycmF5KGwpLmZpbGwoJy4uJykuam9pbihqb2luU2VwKSxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBvc2l4OiBuZXcgQXJyYXkobCkuZmlsbCgnLi4nKS5qb2luKCcvJyksXG4gICAgICAgICAgICAgICAgZnVsbHBhdGg6IChhYnMgKz0gKHNhd0ZpcnN0ID8gJycgOiBqb2luU2VwKSArIHBhcnQpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzYXdGaXJzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jd2QgPSBwcmV2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlcHRoIG9mIGEgcHJvdmlkZWQgcGF0aCwgc3RyaW5nLCBvciB0aGUgY3dkXG4gICAgICovXG4gICAgZGVwdGgocGF0aCA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhdGggPSB0aGlzLmN3ZC5yZXNvbHZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoLmRlcHRoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2FjaGUgb2YgY2hpbGQgZW50cmllcy4gIEV4cG9zZWQgc28gc3ViY2xhc3NlcyBjYW4gY3JlYXRlXG4gICAgICogY2hpbGQgUGF0aCBvYmplY3RzIGluIGEgcGxhdGZvcm0tc3BlY2lmaWMgd2F5LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW5DYWNoZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NoaWxkcmVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIG9uZSBvciBtb3JlIHBhdGggc3RyaW5ncyB0byBhIHJlc29sdmVkIHN0cmluZ1xuICAgICAqXG4gICAgICogU2FtZSBpbnRlcmZhY2UgYXMgcmVxdWlyZSgncGF0aCcpLnJlc29sdmUuXG4gICAgICpcbiAgICAgKiBNdWNoIGZhc3RlciB0aGFuIHBhdGgucmVzb2x2ZSgpIHdoZW4gY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZVxuICAgICAqIHBhdGgsIGJlY2F1c2UgdGhlIHJlc29sdmVkIFBhdGggb2JqZWN0cyBhcmUgY2FjaGVkLiAgTXVjaCBzbG93ZXJcbiAgICAgKiBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcmVzb2x2ZSguLi5wYXRocykge1xuICAgICAgICAvLyBmaXJzdCBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXRocyB3ZSBoYXZlIHRvIHRlc3RcbiAgICAgICAgLy8gd2UgYWx3YXlzIHN0YXJ0IGF0IGN3ZCwgYnV0IGFueSBhYnNvbHV0ZXMgd2lsbCBidW1wIHRoZSBzdGFydFxuICAgICAgICBsZXQgciA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICghcCB8fCBwID09PSAnLicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByID0gciA/IGAke3B9LyR7cn1gIDogcDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNyZXNvbHZlQ2FjaGUuZ2V0KHIpO1xuICAgICAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jd2QucmVzb2x2ZShyKS5mdWxscGF0aCgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlQ2FjaGUuc2V0KHIsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgb25lIG9yIG1vcmUgcGF0aCBzdHJpbmdzIHRvIGEgcmVzb2x2ZWQgc3RyaW5nLCByZXR1cm5pbmdcbiAgICAgKiB0aGUgcG9zaXggcGF0aC4gIElkZW50aWNhbCB0byAucmVzb2x2ZSgpIG9uIHBvc2l4IHN5c3RlbXMsIGJ1dCBvblxuICAgICAqIHdpbmRvd3Mgd2lsbCByZXR1cm4gYSBmb3J3YXJkLXNsYXNoIHNlcGFyYXRlZCBVTkMgcGF0aC5cbiAgICAgKlxuICAgICAqIFNhbWUgaW50ZXJmYWNlIGFzIHJlcXVpcmUoJ3BhdGgnKS5yZXNvbHZlLlxuICAgICAqXG4gICAgICogTXVjaCBmYXN0ZXIgdGhhbiBwYXRoLnJlc29sdmUoKSB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWVcbiAgICAgKiBwYXRoLCBiZWNhdXNlIHRoZSByZXNvbHZlZCBQYXRoIG9iamVjdHMgYXJlIGNhY2hlZC4gIE11Y2ggc2xvd2VyXG4gICAgICogb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHJlc29sdmVQb3NpeCguLi5wYXRocykge1xuICAgICAgICAvLyBmaXJzdCBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXRocyB3ZSBoYXZlIHRvIHRlc3RcbiAgICAgICAgLy8gd2UgYWx3YXlzIHN0YXJ0IGF0IGN3ZCwgYnV0IGFueSBhYnNvbHV0ZXMgd2lsbCBidW1wIHRoZSBzdGFydFxuICAgICAgICBsZXQgciA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICghcCB8fCBwID09PSAnLicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByID0gciA/IGAke3B9LyR7cn1gIDogcDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNyZXNvbHZlUG9zaXhDYWNoZS5nZXQocik7XG4gICAgICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmN3ZC5yZXNvbHZlKHIpLmZ1bGxwYXRoUG9zaXgoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZVBvc2l4Q2FjaGUuc2V0KHIsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpbmQgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkIHRvIHRoZSBzdXBwbGllZCBwYXRoIHN0cmluZyBvciBlbnRyeVxuICAgICAqL1xuICAgIHJlbGF0aXZlKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LnJlbGF0aXZlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpbmQgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkIHRvIHRoZSBzdXBwbGllZCBwYXRoIHN0cmluZyBvclxuICAgICAqIGVudHJ5LCB1c2luZyAvIGFzIHRoZSBwYXRoIGRlbGltaXRlciwgZXZlbiBvbiBXaW5kb3dzLlxuICAgICAqL1xuICAgIHJlbGF0aXZlUG9zaXgoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkucmVsYXRpdmVQb3NpeCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGJhc2VuYW1lIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIG9yIFBhdGggb2JqZWN0XG4gICAgICovXG4gICAgYmFzZW5hbWUoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBkaXJuYW1lIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIG9yIFBhdGggb2JqZWN0XG4gICAgICovXG4gICAgZGlybmFtZShlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoZW50cnkucGFyZW50IHx8IGVudHJ5KS5mdWxscGF0aCgpO1xuICAgIH1cbiAgICBhc3luYyByZWFkZGlyKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFlbnRyeS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBhd2FpdCBlbnRyeS5yZWFkZGlyKCk7XG4gICAgICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IHAgOiBwLm1hcChlID0+IGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZGRpclN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFlbnRyeS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aXRoRmlsZVR5cGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkucmVhZGRpclN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeS5yZWFkZGlyU3luYygpLm1hcChlID0+IGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCBsc3RhdCgpIG9uIHRoZSBzdHJpbmcgb3IgUGF0aCBvYmplY3QsIGFuZCB1cGRhdGUgYWxsIGtub3duXG4gICAgICogaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgZGV0ZXJtaW5lZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB1bmxpa2UgYGZzLmxzdGF0KClgLCB0aGUgcmV0dXJuZWQgdmFsdWUgZG9lcyBub3QgY29udGFpbiBzb21lXG4gICAgICogaW5mb3JtYXRpb24sIHN1Y2ggYXMgYG1vZGVgLCBgZGV2YCwgYG5saW5rYCwgYW5kIGBpbm9gLiAgSWYgdGhhdFxuICAgICAqIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB5b3Ugd2lsbCBuZWVkIHRvIGNhbGwgYGZzLmxzdGF0YCB5b3Vyc2VsZi5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGZpbGUsIG9yIGlmIHRoZSBsc3RhdCBjYWxsIGZhaWxzIGZvclxuICAgICAqIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSB1cGRhdGVkIFBhdGggb2JqZWN0IGlzXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgbHN0YXQoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubHN0YXQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhTY3VycnlCYXNlLmxzdGF0fVxuICAgICAqL1xuICAgIGxzdGF0U3luYyhlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5sc3RhdFN5bmMoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZGxpbmsoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCBlbnRyeS5yZWFkbGluaygpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICByZWFkbGlua1N5bmMoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBlbnRyeS5yZWFkbGlua1N5bmMoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhbHBhdGgoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCBlbnRyeS5yZWFscGF0aCgpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICByZWFscGF0aFN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBlbnRyeS5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgd2FsayhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgY29uc3Qgd2FsayA9IChkaXIsIGNiKSA9PiB7XG4gICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgZGlyLnJlYWRkaXJDQigoZXIsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICBsZXQgbGVuID0gZW50cmllcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKCFsZW4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgtLWxlbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2xsb3cgJiYgZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnJlYWxwYXRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyID0+IChyPy5pc1Vua25vd24oKSA/IHIubHN0YXQoKSA6IHIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHIgPT4gcj8uc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSA/IHdhbGsociwgbmV4dCkgOiBuZXh0KCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGsoZSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0cnVlKTsgLy8gemFsZ29vb29vb29cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbnRyeTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgd2FsayhzdGFydCwgZXIgPT4ge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlaihlcik7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICByZXMocmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdhbGtTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldChbZW50cnldKTtcbiAgICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGRpci5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBlO1xuICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJzLmFkZChyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1cHBvcnQgZm9yIGBmb3IgYXdhaXRgXG4gICAgICpcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLml0ZXJhdGV9XG4gICAgICpcbiAgICAgKiBOb3RlOiBBcyBvZiBOb2RlIDE5LCB0aGlzIGlzIHZlcnkgc2xvdywgY29tcGFyZWQgdG8gb3RoZXIgbWV0aG9kcyBvZlxuICAgICAqIHdhbGtpbmcuICBDb25zaWRlciB1c2luZyB7QGxpbmsgUGF0aFNjdXJyeUJhc2Uuc3RyZWFtfSBpZiBtZW1vcnkgb3ZlcmhlYWRcbiAgICAgKiBhbmQgYmFja3ByZXNzdXJlIGFyZSBjb25jZXJucywgb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLndhbGt9IGlmIG5vdC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlKCk7XG4gICAgfVxuICAgIGl0ZXJhdGUoZW50cnkgPSB0aGlzLmN3ZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIGl0ZXJhdGluZyBhc3luYyBvdmVyIHRoZSBzdHJlYW0gaXMgc2lnbmlmaWNhbnRseSBtb3JlIHBlcmZvcm1hbnQsXG4gICAgICAgIC8vIGVzcGVjaWFsbHkgaW4gdGhlIHdhcm0tY2FjaGUgc2NlbmFyaW8sIGJlY2F1c2UgaXQgYnVmZmVycyB1cCBkaXJlY3RvcnlcbiAgICAgICAgLy8gZW50cmllcyBpbiB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIGEgeWllbGQgZm9yIGVhY2ggb25lLlxuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbShlbnRyeSwgb3B0aW9ucylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGluZyBvdmVyIGEgUGF0aFNjdXJyeSBwZXJmb3JtcyBhIHN5bmNocm9ub3VzIHdhbGsuXG4gICAgICpcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLml0ZXJhdGVTeW5jfVxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlU3luYygpO1xuICAgIH1cbiAgICAqaXRlcmF0ZVN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHlpZWxkIHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoW2VudHJ5XSk7XG4gICAgICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShmb2xsb3cgJiYgKHIgPSBlLnJlYWxwYXRoU3luYygpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXNVbmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByLmxzdGF0U3luYygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnMuYWRkKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdHJlYW0oZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgTWluaXBhc3MoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gW2VudHJ5XTtcbiAgICAgICAgbGV0IHByb2Nlc3NpbmcgPSAwO1xuICAgICAgICBjb25zdCBwcm9jZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKCFwYXVzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGlmICghZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzaW5nID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nKys7XG4gICAgICAgICAgICAgICAgZGlycy5hZGQoZGlyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvblJlYWRkaXIgPSAoZXIsIGVudHJpZXMsIGRpZFJlYWxwYXRocyA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGxvdyAmJiAhZGlkUmVhbHBhdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlYWxwYXRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyKSA9PiByPy5pc1Vua25vd24oKSA/IHIubHN0YXQoKSA6IHIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4gb25SZWFkZGlyKG51bGwsIGVudHJpZXMsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlICYmICghZmlsdGVyIHx8IGZpbHRlcihlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmctLTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXVzZWQgJiYgIXJlc3VsdHMuZmxvd2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5vbmNlKCdkcmFpbicsIHByb2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIHphbGdvIGNvbnRhaW5tZW50XG4gICAgICAgICAgICAgICAgbGV0IHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRpci5yZWFkZGlyQ0Iob25SZWFkZGlyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgTWluaXBhc3MoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldCgpO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gW2VudHJ5XTtcbiAgICAgICAgbGV0IHByb2Nlc3NpbmcgPSAwO1xuICAgICAgICBjb25zdCBwcm9jZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKCFwYXVzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGlmICghZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzaW5nID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nKys7XG4gICAgICAgICAgICAgICAgZGlycy5hZGQoZGlyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gZGlyLnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nLS07XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHIgPSBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShmb2xsb3cgJiYgKHIgPSBlLnJlYWxwYXRoU3luYygpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5pc1Vua25vd24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmxzdGF0U3luYygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGF1c2VkICYmICFyZXN1bHRzLmZsb3dpbmcpXG4gICAgICAgICAgICAgICAgcmVzdWx0cy5vbmNlKCdkcmFpbicsIHByb2Nlc3MpO1xuICAgICAgICB9O1xuICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBjaGRpcihwYXRoID0gdGhpcy5jd2QpIHtcbiAgICAgICAgY29uc3Qgb2xkQ3dkID0gdGhpcy5jd2Q7XG4gICAgICAgIHRoaXMuY3dkID0gdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnID8gdGhpcy5jd2QucmVzb2x2ZShwYXRoKSA6IHBhdGg7XG4gICAgICAgIHRoaXMuY3dkW3NldEFzQ3dkXShvbGRDd2QpO1xuICAgIH1cbn1cbi8qKlxuICogV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgUGF0aFNjdXJyeUJhc2V9XG4gKlxuICogRGVmYXVsdHMgdG8gY2FzZSBpbnNlbnNpdHZlLCB1c2VzIGAnXFxcXCdgIHRvIGdlbmVyYXRlIHBhdGggc3RyaW5ncy4gIFVzZXNcbiAqIHtAbGluayBQYXRoV2luMzJ9IGZvciBQYXRoIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoU2N1cnJ5V2luMzIgZXh0ZW5kcyBQYXRoU2N1cnJ5QmFzZSB7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNlcCA9ICdcXFxcJztcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIHdpbjMyLCAnXFxcXCcsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICAgICAgZm9yIChsZXQgcCA9IHRoaXMuY3dkOyBwOyBwID0gcC5wYXJlbnQpIHtcbiAgICAgICAgICAgIHAubm9jYXNlID0gdGhpcy5ub2Nhc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyc2VSb290UGF0aChkaXIpIHtcbiAgICAgICAgLy8gaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggYSBzaW5nbGUgc2VwYXJhdG9yLCBpdCdzIG5vdCBhIFVOQywgYW5kIHdlJ2xsXG4gICAgICAgIC8vIGp1c3QgZ2V0IHNlcGFyYXRvciBhcyB0aGUgcm9vdCwgYW5kIGRyaXZlRnJvbVVOQyB3aWxsIHJldHVybiBcXFxuICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIG1vdW50IFxcIG9uIHRoZSByb290IGZyb20gdGhlIGN3ZC5cbiAgICAgICAgcmV0dXJuIHdpbjMyLnBhcnNlKGRpcikucm9vdC50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdSb290KGZzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFdpbjMyKHRoaXMucm9vdFBhdGgsIElGRElSLCB1bmRlZmluZWQsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgeyBmcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHByb3ZpZGVkIHBhdGggc3RyaW5nIGlzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgKi9cbiAgICBpc0Fic29sdXRlKHApIHtcbiAgICAgICAgcmV0dXJuIChwLnN0YXJ0c1dpdGgoJy8nKSB8fCBwLnN0YXJ0c1dpdGgoJ1xcXFwnKSB8fCAvXlthLXpdOihcXC98XFxcXCkvaS50ZXN0KHApKTtcbiAgICB9XG59XG4vKipcbiAqIHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIGFsbCBwb3NpeCBzeXN0ZW1zIG90aGVyIHRoYW4gRGFyd2luLlxuICpcbiAqIERlZmF1bHRzIHRvIGNhc2Utc2Vuc2l0aXZlIG1hdGNoaW5nLCB1c2VzIGAnLydgIHRvIGdlbmVyYXRlIHBhdGggc3RyaW5ncy5cbiAqXG4gKiBVc2VzIHtAbGluayBQYXRoUG9zaXh9IGZvciBQYXRoIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoU2N1cnJ5UG9zaXggZXh0ZW5kcyBQYXRoU2N1cnJ5QmFzZSB7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNlcCA9ICcvJztcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSBmYWxzZSB9ID0gb3B0cztcbiAgICAgICAgc3VwZXIoY3dkLCBwb3NpeCwgJy8nLCB7IC4uLm9wdHMsIG5vY2FzZSB9KTtcbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHBhcnNlUm9vdFBhdGgoX2Rpcikge1xuICAgICAgICByZXR1cm4gJy8nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdSb290KGZzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFBvc2l4KHRoaXMucm9vdFBhdGgsIElGRElSLCB1bmRlZmluZWQsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgeyBmcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHByb3ZpZGVkIHBhdGggc3RyaW5nIGlzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgKi9cbiAgICBpc0Fic29sdXRlKHApIHtcbiAgICAgICAgcmV0dXJuIHAuc3RhcnRzV2l0aCgnLycpO1xuICAgIH1cbn1cbi8qKlxuICoge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgRGFyd2luIChtYWNPUykgc3lzdGVtcy5cbiAqXG4gKiBEZWZhdWx0cyB0byBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLCB1c2VzIGAnLydgIGZvciBnZW5lcmF0aW5nIHBhdGhcbiAqIHN0cmluZ3MuXG4gKlxuICogVXNlcyB7QGxpbmsgUGF0aFBvc2l4fSBmb3IgUGF0aCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFNjdXJyeURhcndpbiBleHRlbmRzIFBhdGhTY3VycnlQb3NpeCB7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgc3VwZXIoY3dkLCB7IC4uLm9wdHMsIG5vY2FzZSB9KTtcbiAgICB9XG59XG4vKipcbiAqIERlZmF1bHQge0BsaW5rIFBhdGhCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICoge0BsaW5rIFBhdGhXaW4zMn0gb24gV2luZG93cyBzeXN0ZW1zLCB7QGxpbmsgUGF0aFBvc2l4fSBvbiBhbGwgb3RoZXJzLlxuICovXG5leHBvcnQgY29uc3QgUGF0aCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBQYXRoV2luMzIgOiBQYXRoUG9zaXg7XG4vKipcbiAqIERlZmF1bHQge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICoge0BsaW5rIFBhdGhTY3VycnlXaW4zMn0gb24gV2luZG93cyBzeXN0ZW1zLCB7QGxpbmsgUGF0aFNjdXJyeURhcndpbn0gb25cbiAqIERhcndpbiAobWFjT1MpIHN5c3RlbXMsIHtAbGluayBQYXRoU2N1cnJ5UG9zaXh9IG9uIGFsbCBvdGhlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBQYXRoU2N1cnJ5ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhTY3VycnlXaW4zMlxuICAgIDogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyBQYXRoU2N1cnJ5RGFyd2luXG4gICAgICAgIDogUGF0aFNjdXJyeVBvc2l4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJjb25zdCBwcm9jID0gdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3NcbiAgICA/IHByb2Nlc3NcbiAgICA6IHtcbiAgICAgICAgc3Rkb3V0OiBudWxsLFxuICAgICAgICBzdGRlcnI6IG51bGwsXG4gICAgfTtcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ25vZGU6ZXZlbnRzJztcbmltcG9ydCBTdHJlYW0gZnJvbSAnbm9kZTpzdHJlYW0nO1xuaW1wb3J0IHsgU3RyaW5nRGVjb2RlciB9IGZyb20gJ25vZGU6c3RyaW5nX2RlY29kZXInO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSBNaW5pcGFzcyBzdHJlYW0sIE5vZGUgc3RyZWFtLCBvciBzb21ldGhpbmdcbiAqIGVsc2UgdGhhdCBNaW5pcGFzcyBjYW4gaW50ZXJhY3Qgd2l0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzU3RyZWFtID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIChzIGluc3RhbmNlb2YgTWluaXBhc3MgfHxcbiAgICAgICAgcyBpbnN0YW5jZW9mIFN0cmVhbSB8fFxuICAgICAgICBpc1JlYWRhYmxlKHMpIHx8XG4gICAgICAgIGlzV3JpdGFibGUocykpO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSB2YWxpZCB7QGxpbmsgTWluaXBhc3MuUmVhZGFibGV9XG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlYWRhYmxlID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIHMgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIgJiZcbiAgICB0eXBlb2Ygcy5waXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgLy8gbm9kZSBjb3JlIFdyaXRhYmxlIHN0cmVhbXMgaGF2ZSBhIHBpcGUoKSBtZXRob2QsIGJ1dCBpdCB0aHJvd3NcbiAgICBzLnBpcGUgIT09IFN0cmVhbS5Xcml0YWJsZS5wcm90b3R5cGUucGlwZTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgdmFsaWQge0BsaW5rIE1pbmlwYXNzLldyaXRhYmxlfVxuICovXG5leHBvcnQgY29uc3QgaXNXcml0YWJsZSA9IChzKSA9PiAhIXMgJiZcbiAgICB0eXBlb2YgcyA9PT0gJ29iamVjdCcgJiZcbiAgICBzIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyICYmXG4gICAgdHlwZW9mIHMud3JpdGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygcy5lbmQgPT09ICdmdW5jdGlvbic7XG5jb25zdCBFT0YgPSBTeW1ib2woJ0VPRicpO1xuY29uc3QgTUFZQkVfRU1JVF9FTkQgPSBTeW1ib2woJ21heWJlRW1pdEVuZCcpO1xuY29uc3QgRU1JVFRFRF9FTkQgPSBTeW1ib2woJ2VtaXR0ZWRFbmQnKTtcbmNvbnN0IEVNSVRUSU5HX0VORCA9IFN5bWJvbCgnZW1pdHRpbmdFbmQnKTtcbmNvbnN0IEVNSVRURURfRVJST1IgPSBTeW1ib2woJ2VtaXR0ZWRFcnJvcicpO1xuY29uc3QgQ0xPU0VEID0gU3ltYm9sKCdjbG9zZWQnKTtcbmNvbnN0IFJFQUQgPSBTeW1ib2woJ3JlYWQnKTtcbmNvbnN0IEZMVVNIID0gU3ltYm9sKCdmbHVzaCcpO1xuY29uc3QgRkxVU0hDSFVOSyA9IFN5bWJvbCgnZmx1c2hDaHVuaycpO1xuY29uc3QgRU5DT0RJTkcgPSBTeW1ib2woJ2VuY29kaW5nJyk7XG5jb25zdCBERUNPREVSID0gU3ltYm9sKCdkZWNvZGVyJyk7XG5jb25zdCBGTE9XSU5HID0gU3ltYm9sKCdmbG93aW5nJyk7XG5jb25zdCBQQVVTRUQgPSBTeW1ib2woJ3BhdXNlZCcpO1xuY29uc3QgUkVTVU1FID0gU3ltYm9sKCdyZXN1bWUnKTtcbmNvbnN0IEJVRkZFUiA9IFN5bWJvbCgnYnVmZmVyJyk7XG5jb25zdCBQSVBFUyA9IFN5bWJvbCgncGlwZXMnKTtcbmNvbnN0IEJVRkZFUkxFTkdUSCA9IFN5bWJvbCgnYnVmZmVyTGVuZ3RoJyk7XG5jb25zdCBCVUZGRVJQVVNIID0gU3ltYm9sKCdidWZmZXJQdXNoJyk7XG5jb25zdCBCVUZGRVJTSElGVCA9IFN5bWJvbCgnYnVmZmVyU2hpZnQnKTtcbmNvbnN0IE9CSkVDVE1PREUgPSBTeW1ib2woJ29iamVjdE1vZGUnKTtcbi8vIGludGVybmFsIGV2ZW50IHdoZW4gc3RyZWFtIGlzIGRlc3Ryb3llZFxuY29uc3QgREVTVFJPWUVEID0gU3ltYm9sKCdkZXN0cm95ZWQnKTtcbi8vIGludGVybmFsIGV2ZW50IHdoZW4gc3RyZWFtIGhhcyBhbiBlcnJvclxuY29uc3QgRVJST1IgPSBTeW1ib2woJ2Vycm9yJyk7XG5jb25zdCBFTUlUREFUQSA9IFN5bWJvbCgnZW1pdERhdGEnKTtcbmNvbnN0IEVNSVRFTkQgPSBTeW1ib2woJ2VtaXRFbmQnKTtcbmNvbnN0IEVNSVRFTkQyID0gU3ltYm9sKCdlbWl0RW5kMicpO1xuY29uc3QgQVNZTkMgPSBTeW1ib2woJ2FzeW5jJyk7XG5jb25zdCBBQk9SVCA9IFN5bWJvbCgnYWJvcnQnKTtcbmNvbnN0IEFCT1JURUQgPSBTeW1ib2woJ2Fib3J0ZWQnKTtcbmNvbnN0IFNJR05BTCA9IFN5bWJvbCgnc2lnbmFsJyk7XG5jb25zdCBEQVRBTElTVEVORVJTID0gU3ltYm9sKCdkYXRhTGlzdGVuZXJzJyk7XG5jb25zdCBESVNDQVJERUQgPSBTeW1ib2woJ2Rpc2NhcmRlZCcpO1xuY29uc3QgZGVmZXIgPSAoZm4pID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZm4pO1xuY29uc3Qgbm9kZWZlciA9IChmbikgPT4gZm4oKTtcbmNvbnN0IGlzRW5kaXNoID0gKGV2KSA9PiBldiA9PT0gJ2VuZCcgfHwgZXYgPT09ICdmaW5pc2gnIHx8IGV2ID09PSAncHJlZmluaXNoJztcbmNvbnN0IGlzQXJyYXlCdWZmZXJMaWtlID0gKGIpID0+IGIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAgICghIWIgJiZcbiAgICAgICAgdHlwZW9mIGIgPT09ICdvYmplY3QnICYmXG4gICAgICAgIGIuY29uc3RydWN0b3IgJiZcbiAgICAgICAgYi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXJyYXlCdWZmZXInICYmXG4gICAgICAgIGIuYnl0ZUxlbmd0aCA+PSAwKTtcbmNvbnN0IGlzQXJyYXlCdWZmZXJWaWV3ID0gKGIpID0+ICFCdWZmZXIuaXNCdWZmZXIoYikgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KGIpO1xuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHRvIGEgZGVzdGluYXRpb24gc3RyZWFtLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBQaXBlIHtcbiAgICBzcmM7XG4gICAgZGVzdDtcbiAgICBvcHRzO1xuICAgIG9uZHJhaW47XG4gICAgY29uc3RydWN0b3Ioc3JjLCBkZXN0LCBvcHRzKSB7XG4gICAgICAgIHRoaXMuc3JjID0gc3JjO1xuICAgICAgICB0aGlzLmRlc3QgPSBkZXN0O1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLm9uZHJhaW4gPSAoKSA9PiBzcmNbUkVTVU1FXSgpO1xuICAgICAgICB0aGlzLmRlc3Qub24oJ2RyYWluJywgdGhpcy5vbmRyYWluKTtcbiAgICB9XG4gICAgdW5waXBlKCkge1xuICAgICAgICB0aGlzLmRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgdGhpcy5vbmRyYWluKTtcbiAgICB9XG4gICAgLy8gb25seSBoZXJlIGZvciB0aGUgcHJvdG90eXBlXG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgcHJveHlFcnJvcnMoX2VyKSB7IH1cbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIGVuZCgpIHtcbiAgICAgICAgdGhpcy51bnBpcGUoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5lbmQpXG4gICAgICAgICAgICB0aGlzLmRlc3QuZW5kKCk7XG4gICAgfVxufVxuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHRvIGEgZGVzdGluYXRpb24gc3RyZWFtIHdoZXJlXG4gKiBlcnJvcnMgYXJlIHByb3hpZWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFBpcGVQcm94eUVycm9ycyBleHRlbmRzIFBpcGUge1xuICAgIHVucGlwZSgpIHtcbiAgICAgICAgdGhpcy5zcmMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5wcm94eUVycm9ycyk7XG4gICAgICAgIHN1cGVyLnVucGlwZSgpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihzcmMsIGRlc3QsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIoc3JjLCBkZXN0LCBvcHRzKTtcbiAgICAgICAgdGhpcy5wcm94eUVycm9ycyA9IChlcikgPT4gdGhpcy5kZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICBzcmMub24oJ2Vycm9yJywgdGhpcy5wcm94eUVycm9ycyk7XG4gICAgfVxufVxuY29uc3QgaXNPYmplY3RNb2RlT3B0aW9ucyA9IChvKSA9PiAhIW8ub2JqZWN0TW9kZTtcbmNvbnN0IGlzRW5jb2RpbmdPcHRpb25zID0gKG8pID0+ICFvLm9iamVjdE1vZGUgJiYgISFvLmVuY29kaW5nICYmIG8uZW5jb2RpbmcgIT09ICdidWZmZXInO1xuLyoqXG4gKiBNYWluIGV4cG9ydCwgdGhlIE1pbmlwYXNzIGNsYXNzXG4gKlxuICogYFJUeXBlYCBpcyB0aGUgdHlwZSBvZiBkYXRhIGVtaXR0ZWQsIGRlZmF1bHRzIHRvIEJ1ZmZlclxuICpcbiAqIGBXVHlwZWAgaXMgdGhlIHR5cGUgb2YgZGF0YSB0byBiZSB3cml0dGVuLCBpZiBSVHlwZSBpcyBidWZmZXIgb3Igc3RyaW5nLFxuICogdGhlbiBhbnkge0BsaW5rIE1pbmlwYXNzLkNvbnRpZ3VvdXNEYXRhfSBpcyBhbGxvd2VkLlxuICpcbiAqIGBFdmVudHNgIGlzIHRoZSBzZXQgb2YgZXZlbnQgaGFuZGxlciBzaWduYXR1cmVzIHRoYXQgdGhpcyBvYmplY3RcbiAqIHdpbGwgZW1pdCwgc2VlIHtAbGluayBNaW5pcGFzcy5FdmVudHN9XG4gKi9cbmV4cG9ydCBjbGFzcyBNaW5pcGFzcyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgW1BBVVNFRF0gPSBmYWxzZTtcbiAgICBbUElQRVNdID0gW107XG4gICAgW0JVRkZFUl0gPSBbXTtcbiAgICBbT0JKRUNUTU9ERV07XG4gICAgW0VOQ09ESU5HXTtcbiAgICBbQVNZTkNdO1xuICAgIFtERUNPREVSXTtcbiAgICBbRU9GXSA9IGZhbHNlO1xuICAgIFtFTUlUVEVEX0VORF0gPSBmYWxzZTtcbiAgICBbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgIFtDTE9TRURdID0gZmFsc2U7XG4gICAgW0VNSVRURURfRVJST1JdID0gbnVsbDtcbiAgICBbQlVGRkVSTEVOR1RIXSA9IDA7XG4gICAgW0RFU1RST1lFRF0gPSBmYWxzZTtcbiAgICBbU0lHTkFMXTtcbiAgICBbQUJPUlRFRF0gPSBmYWxzZTtcbiAgICBbREFUQUxJU1RFTkVSU10gPSAwO1xuICAgIFtESVNDQVJERURdID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGNhbiBiZSB3cml0dGVuXG4gICAgICovXG4gICAgd3JpdGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBjYW4gYmUgcmVhZFxuICAgICAqL1xuICAgIHJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBJZiBgUlR5cGVgIGlzIEJ1ZmZlciwgdGhlbiBvcHRpb25zIGRvIG5vdCBuZWVkIHRvIGJlIHByb3ZpZGVkLlxuICAgICAqIE90aGVyd2lzZSwgYW4gb3B0aW9ucyBvYmplY3QgbXVzdCBiZSBwcm92aWRlZCB0byBzcGVjaWZ5IGVpdGhlclxuICAgICAqIHtAbGluayBNaW5pcGFzcy5TaGFyZWRPcHRpb25zLm9iamVjdE1vZGV9IG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzLlNoYXJlZE9wdGlvbnMuZW5jb2Rpbmd9LCBhcyBhcHByb3ByaWF0ZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoYXJnc1swXSB8fFxuICAgICAgICAgICAge30pO1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAob3B0aW9ucy5vYmplY3RNb2RlICYmIHR5cGVvZiBvcHRpb25zLmVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RpbmcgYW5kIG9iamVjdE1vZGUgbWF5IG5vdCBiZSB1c2VkIHRvZ2V0aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0TW9kZU9wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSB0cnVlO1xuICAgICAgICAgICAgdGhpc1tFTkNPRElOR10gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRW5jb2RpbmdPcHRpb25zKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tBU1lOQ10gPSAhIW9wdGlvbnMuYXN5bmM7XG4gICAgICAgIHRoaXNbREVDT0RFUl0gPSB0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBuZXcgU3RyaW5nRGVjb2Rlcih0aGlzW0VOQ09ESU5HXSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlQnVmZmVyID09PSB0cnVlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2J1ZmZlcicsIHsgZ2V0OiAoKSA9PiB0aGlzW0JVRkZFUl0gfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlUGlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncGlwZXMnLCB7IGdldDogKCkgPT4gdGhpc1tQSVBFU10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChzaWduYWwpIHtcbiAgICAgICAgICAgIHRoaXNbU0lHTkFMXSA9IHNpZ25hbDtcbiAgICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXNbQUJPUlRdKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzW0FCT1JUXSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgd2FpdGluZyB0byBiZSByZWFkLlxuICAgICAqXG4gICAgICogRm9yIEJ1ZmZlciBzdHJpbmdzLCB0aGlzIHdpbGwgYmUgdGhlIHRvdGFsIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEZvciBzdHJpbmcgZW5jb2Rpbmcgc3RyZWFtcywgdGhpcyB3aWxsIGJlIHRoZSBzdHJpbmcgY2hhcmFjdGVyIGxlbmd0aCxcbiAgICAgKiBhY2NvcmRpbmcgdG8gSmF2YVNjcmlwdCdzIGBzdHJpbmcubGVuZ3RoYCBsb2dpYy5cbiAgICAgKiBGb3Igb2JqZWN0TW9kZSBzdHJlYW1zLCB0aGlzIGlzIGEgY291bnQgb2YgdGhlIGl0ZW1zIHdhaXRpbmcgdG8gYmVcbiAgICAgKiBlbWl0dGVkLlxuICAgICAqL1xuICAgIGdldCBidWZmZXJMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUkxFTkdUSF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBgQnVmZmVyRW5jb2RpbmdgIGN1cnJlbnRseSBpbiB1c2UsIG9yIGBudWxsYFxuICAgICAqL1xuICAgIGdldCBlbmNvZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU5DT0RJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgaXMgYSByZWFkIG9ubHkgcHJvcGVydHlcbiAgICAgKi9cbiAgICBzZXQgZW5jb2RpbmcoX2VuYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kaW5nIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIEVuY29kaW5nIG1heSBvbmx5IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWVcbiAgICAgKi9cbiAgICBzZXRFbmNvZGluZyhfZW5jKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RpbmcgbXVzdCBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhpcyBpcyBhbiBvYmplY3RNb2RlIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBvYmplY3RNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tPQkpFQ1RNT0RFXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5XG4gICAgICovXG4gICAgc2V0IG9iamVjdE1vZGUoX29tKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb2JqZWN0TW9kZSBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGlzIGlzIGFuIGFzeW5jIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBbJ2FzeW5jJ10oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gbWFrZSB0aGlzIHN0cmVhbSBhc3luYy5cbiAgICAgKlxuICAgICAqIE9uY2Ugc2V0LCBpdCBjYW5ub3QgYmUgdW5zZXQsIGFzIHRoaXMgd291bGQgcG90ZW50aWFsbHkgY2F1c2UgaW5jb3JyZWN0XG4gICAgICogYmVoYXZpb3IuICBJZSwgYSBzeW5jIHN0cmVhbSBjYW4gYmUgbWFkZSBhc3luYywgYnV0IGFuIGFzeW5jIHN0cmVhbVxuICAgICAqIGNhbm5vdCBiZSBzYWZlbHkgbWFkZSBzeW5jLlxuICAgICAqL1xuICAgIHNldCBbJ2FzeW5jJ10oYSkge1xuICAgICAgICB0aGlzW0FTWU5DXSA9IHRoaXNbQVNZTkNdIHx8ICEhYTtcbiAgICB9XG4gICAgLy8gZHJvcCBldmVyeXRoaW5nIGFuZCBnZXQgb3V0IG9mIHRoZSBmbG93IGNvbXBsZXRlbHlcbiAgICBbQUJPUlRdKCkge1xuICAgICAgICB0aGlzW0FCT1JURURdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdhYm9ydCcsIHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICAgICAgdGhpcy5kZXN0cm95KHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGFib3J0ZWQuXG4gICAgICovXG4gICAgZ2V0IGFib3J0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FCT1JURURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOby1vcCBzZXR0ZXIuIFN0cmVhbSBhYm9ydGVkIHN0YXR1cyBpcyBzZXQgdmlhIHRoZSBBYm9ydFNpZ25hbCBwcm92aWRlZFxuICAgICAqIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLlxuICAgICAqL1xuICAgIHNldCBhYm9ydGVkKF8pIHsgfVxuICAgIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgICAgaWYgKHRoaXNbQUJPUlRFRF0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIHdyaXRlIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnKSwgeyBjb2RlOiAnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnIH0pKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVuY29kaW5nKVxuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpc1tBU1lOQ10gPyBkZWZlciA6IG5vZGVmZXI7XG4gICAgICAgIC8vIGNvbnZlcnQgYXJyYXkgYnVmZmVycyBhbmQgdHlwZWQgYXJyYXkgdmlld3MgaW50byBidWZmZXJzXG4gICAgICAgIC8vIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gZG8gdGhlIG9wcG9zaXRlIVxuICAgICAgICAvLyBsZWF2ZSBzdHJpbmdzIGFuZCBidWZmZXJzIGFzLWlzXG4gICAgICAgIC8vIGFueXRoaW5nIGlzIG9ubHkgYWxsb3dlZCBpZiBpbiBvYmplY3QgbW9kZSwgc28gdGhyb3dcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheUJ1ZmZlclZpZXcoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuay5idWZmZXIsIGNodW5rLmJ5dGVPZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJheUJ1ZmZlckxpa2UoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb24tY29udGlndW91cyBkYXRhIHdyaXR0ZW4gdG8gbm9uLW9iamVjdE1vZGUgc3RyZWFtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIG9iamVjdCBtb2RlIHVwIGZyb250LCBzaW5jZSBpdCdzIHNpbXBsZXJcbiAgICAgICAgLy8gdGhpcyB5aWVsZHMgYmV0dGVyIHBlcmZvcm1hbmNlLCBmZXdlciBjaGVja3MgbGF0ZXIuXG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBtYXliZSBpbXBvc3NpYmxlP1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICAgICAgdGhpc1tGTFVTSF0odHJ1ZSk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10pXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSUFVTSF0oY2h1bmspO1xuICAgICAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICAgICAgZm4oY2IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCB0aGUgY2h1bmsgaXMgYSBidWZmZXIgb3Igc3RyaW5nXG4gICAgICAgIC8vIGRvbid0IGJ1ZmZlciBpdCB1cCBvciBzZW5kIGl0IHRvIHRoZSBkZWNvZGVyXG4gICAgICAgIGlmICghY2h1bmsubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgICAgIGlmIChjYilcbiAgICAgICAgICAgICAgICBmbihjYik7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmYXN0LXBhdGggd3JpdGluZyBzdHJpbmdzIG9mIHNhbWUgZW5jb2RpbmcgdG8gYSBzdHJlYW0gd2l0aFxuICAgICAgICAvLyBhbiBlbXB0eSBidWZmZXIsIHNraXBwaW5nIHRoZSBidWZmZXIvZGVjb2RlciBkYW5jZVxuICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgLy8gdW5sZXNzIGl0IGlzIGEgc3RyaW5nIGFscmVhZHkgcmVhZHkgZm9yIHVzIHRvIHVzZVxuICAgICAgICAgICAgIShlbmNvZGluZyA9PT0gdGhpc1tFTkNPRElOR10gJiYgIXRoaXNbREVDT0RFUl0/Lmxhc3ROZWVkKSkge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5nZVxuICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmIHRoaXNbRU5DT0RJTkddKSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdlXG4gICAgICAgICAgICBjaHVuayA9IHRoaXNbREVDT0RFUl0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IGZsdXNoaW5nIENBTiBwb3RlbnRpYWxseSBzd2l0Y2ggdXMgaW50byBub3QtZmxvd2luZyBtb2RlXG4gICAgICAgIGlmICh0aGlzW0ZMT1dJTkddICYmIHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgIHRoaXNbRkxVU0hdKHRydWUpO1xuICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSlcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJQVVNIXShjaHVuayk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIGZuKGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvdy1sZXZlbCBleHBsaWNpdCByZWFkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEluIG9iamVjdE1vZGUsIHRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLCBhbmQgb25lIGl0ZW0gaXMgcmV0dXJuZWQgaWZcbiAgICAgKiBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBgbmAgaXMgdGhlIG51bWJlciBvZiBieXRlcyAob3IgaW4gdGhlIGNhc2Ugb2YgZW5jb2Rpbmcgc3RyZWFtcyxcbiAgICAgKiBjaGFyYWN0ZXJzKSB0byBjb25zdW1lLiBJZiBgbmAgaXMgbm90IHByb3ZpZGVkLCB0aGVuIHRoZSBlbnRpcmUgYnVmZmVyXG4gICAgICogaXMgcmV0dXJuZWQsIG9yIGBudWxsYCBpcyByZXR1cm5lZCBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIElmIGBuYCBpcyBncmVhdGVyIHRoYXQgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBpbnRlcm5hbCBidWZmZXIsXG4gICAgICogdGhlbiBgbnVsbGAgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcmVhZChuKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gPT09IDAgfHxcbiAgICAgICAgICAgIG4gPT09IDAgfHxcbiAgICAgICAgICAgIChuICYmIG4gPiB0aGlzW0JVRkZFUkxFTkdUSF0pKSB7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICBuID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSXS5sZW5ndGggPiAxICYmICF0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBub3Qgb2JqZWN0IG1vZGUsIHNvIGlmIHdlIGhhdmUgYW4gZW5jb2RpbmcsIHRoZW4gUlR5cGUgaXMgc3RyaW5nXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UsIG11c3QgYmUgQnVmZmVyXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0gPSBbXG4gICAgICAgICAgICAgICAgKHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICAgICAgICAgID8gdGhpc1tCVUZGRVJdLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdCh0aGlzW0JVRkZFUl0sIHRoaXNbQlVGRkVSTEVOR1RIXSkpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB0aGlzW1JFQURdKG4gfHwgbnVsbCwgdGhpc1tCVUZGRVJdWzBdKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW1JFQURdKG4sIGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJTSElGVF0oKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2h1bms7XG4gICAgICAgICAgICBpZiAobiA9PT0gYy5sZW5ndGggfHwgbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUlNISUZUXSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJdWzBdID0gYy5zbGljZShuKTtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGMuc2xpY2UoMCwgbik7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUl1bMF0gPSBjLnN1YmFycmF5KG4pO1xuICAgICAgICAgICAgICAgIGNodW5rID0gYy5zdWJhcnJheSgwLCBuKTtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIGlmICghdGhpc1tCVUZGRVJdLmxlbmd0aCAmJiAhdGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgICAgICByZXR1cm4gY2h1bms7XG4gICAgfVxuICAgIGVuZChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gY2h1bms7XG4gICAgICAgICAgICBjaHVuayA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGVuY29kaW5nO1xuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNodW5rICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgY2IpO1xuICAgICAgICB0aGlzW0VPRl0gPSB0cnVlO1xuICAgICAgICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICAgIC8vIGlmIHdlIGhhdmVuJ3Qgd3JpdHRlbiBhbnl0aGluZywgdGhlbiBnbyBhaGVhZCBhbmQgZW1pdCxcbiAgICAgICAgLy8gZXZlbiBpZiB3ZSdyZSBub3QgcmVhZGluZy5cbiAgICAgICAgLy8gd2UnbGwgcmUtZW1pdCBpZiBhIG5ldyAnZW5kJyBsaXN0ZW5lciBpcyBhZGRlZCBhbnl3YXkuXG4gICAgICAgIC8vIFRoaXMgbWFrZXMgTVAgbW9yZSBzdWl0YWJsZSB0byB3cml0ZS1vbmx5IHVzZSBjYXNlcy5cbiAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gfHwgIXRoaXNbUEFVU0VEXSlcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBkb24ndCBsZXQgdGhlIGludGVybmFsIHJlc3VtZSBiZSBvdmVyd3JpdHRlblxuICAgIFtSRVNVTUVdKCkge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXNbREFUQUxJU1RFTkVSU10gJiYgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpc1tESVNDQVJERURdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW1BBVVNFRF0gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tGTE9XSU5HXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgncmVzdW1lJyk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUl0ubGVuZ3RoKVxuICAgICAgICAgICAgdGhpc1tGTFVTSF0oKTtcbiAgICAgICAgZWxzZSBpZiAodGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN1bWUgdGhlIHN0cmVhbSBpZiBpdCBpcyBjdXJyZW50bHkgaW4gYSBwYXVzZWQgc3RhdGVcbiAgICAgKlxuICAgICAqIElmIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBwaXBlIGRlc3RpbmF0aW9ucyBvciBgZGF0YWAgZXZlbnQgbGlzdGVuZXJzLFxuICAgICAqIHRoaXMgd2lsbCBwbGFjZSB0aGUgc3RyZWFtIGluIGEgXCJkaXNjYXJkZWRcIiBzdGF0ZSwgd2hlcmUgYWxsIGRhdGEgd2lsbFxuICAgICAqIGJlIHRocm93biBhd2F5LiBUaGUgZGlzY2FyZGVkIHN0YXRlIGlzIHJlbW92ZWQgaWYgYSBwaXBlIGRlc3RpbmF0aW9uIG9yXG4gICAgICogZGF0YSBoYW5kbGVyIGlzIGFkZGVkLCBpZiBwYXVzZSgpIGlzIGNhbGxlZCwgb3IgaWYgYW55IHN5bmNocm9ub3VzIG9yXG4gICAgICogYXN5bmNocm9ub3VzIGl0ZXJhdGlvbiBpcyBzdGFydGVkLlxuICAgICAqL1xuICAgIHJlc3VtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUkVTVU1FXSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXVzZSB0aGUgc3RyZWFtXG4gICAgICovXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tQQVVTRURdID0gdHJ1ZTtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBmb3JjaWJseSBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBnZXQgZGVzdHJveWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tERVNUUk9ZRURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgZmxvd2luZyBzdGF0ZSwgbWVhbmluZyB0aGF0XG4gICAgICogYW55IHdyaXRlcyB3aWxsIGJlIGltbWVkaWF0ZWx5IGVtaXR0ZWQuXG4gICAgICovXG4gICAgZ2V0IGZsb3dpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgcGF1c2VkIHN0YXRlXG4gICAgICovXG4gICAgZ2V0IHBhdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUEFVU0VEXTtcbiAgICB9XG4gICAgW0JVRkZFUlBVU0hdKGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdICs9IDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHRoaXNbQlVGRkVSXS5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgW0JVRkZFUlNISUZUXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IHRoaXNbQlVGRkVSXVswXS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUl0uc2hpZnQoKTtcbiAgICB9XG4gICAgW0ZMVVNIXShub0RyYWluID0gZmFsc2UpIHtcbiAgICAgICAgZG8geyB9IHdoaWxlICh0aGlzW0ZMVVNIQ0hVTktdKHRoaXNbQlVGRkVSU0hJRlRdKCkpICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFub0RyYWluICYmICF0aGlzW0JVRkZFUl0ubGVuZ3RoICYmICF0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gICAgfVxuICAgIFtGTFVTSENIVU5LXShjaHVuaykge1xuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQaXBlIGFsbCBkYXRhIGVtaXR0ZWQgYnkgdGhpcyBzdHJlYW0gaW50byB0aGUgZGVzdGluYXRpb24gcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyB0aGUgZmxvdyBvZiBkYXRhLlxuICAgICAqL1xuICAgIHBpcGUoZGVzdCwgb3B0cykge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBlbmRlZCA9IHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgaWYgKGRlc3QgPT09IHByb2Muc3Rkb3V0IHx8IGRlc3QgPT09IHByb2Muc3RkZXJyKVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBmYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBvcHRzLmVuZCAhPT0gZmFsc2U7XG4gICAgICAgIG9wdHMucHJveHlFcnJvcnMgPSAhIW9wdHMucHJveHlFcnJvcnM7XG4gICAgICAgIC8vIHBpcGluZyBhbiBlbmRlZCBzdHJlYW0gZW5kcyBpbW1lZGlhdGVseVxuICAgICAgICBpZiAoZW5kZWQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmVuZClcbiAgICAgICAgICAgICAgICBkZXN0LmVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gXCJhc1wiIGhlcmUganVzdCBpZ25vcmVzIHRoZSBXVHlwZSwgd2hpY2ggcGlwZXMgZG9uJ3QgY2FyZSBhYm91dCxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXkncmUgb25seSBjb25zdW1pbmcgZnJvbSB1cywgYW5kIHdyaXRpbmcgdG8gdGhlIGRlc3RcbiAgICAgICAgICAgIHRoaXNbUElQRVNdLnB1c2goIW9wdHMucHJveHlFcnJvcnNcbiAgICAgICAgICAgICAgICA/IG5ldyBQaXBlKHRoaXMsIGRlc3QsIG9wdHMpXG4gICAgICAgICAgICAgICAgOiBuZXcgUGlwZVByb3h5RXJyb3JzKHRoaXMsIGRlc3QsIG9wdHMpKTtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiB0aGlzW1JFU1VNRV0oKSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tSRVNVTUVdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZ1bGx5IHVuaG9vayBhIHBpcGVkIGRlc3RpbmF0aW9uIHN0cmVhbS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0gd2FzIHRoZSBvbmx5IGNvbnN1bWVyIG9mIHRoaXMgc3RyZWFtIChpZSxcbiAgICAgKiB0aGVyZSBhcmUgbm8gb3RoZXIgcGlwZWQgZGVzdGluYXRpb25zIG9yIGAnZGF0YSdgIGV2ZW50IGxpc3RlbmVycylcbiAgICAgKiB0aGVuIHRoZSBmbG93IG9mIGRhdGEgd2lsbCBzdG9wIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MjcmVzdW1lfSBpcyBleHBsaWNpdGx5IGNhbGxlZC5cbiAgICAgKi9cbiAgICB1bnBpcGUoZGVzdCkge1xuICAgICAgICBjb25zdCBwID0gdGhpc1tQSVBFU10uZmluZChwID0+IHAuZGVzdCA9PT0gZGVzdCk7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tQSVBFU10ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gJiYgdGhpc1tEQVRBTElTVEVORVJTXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbUElQRVNdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tQSVBFU10uc3BsaWNlKHRoaXNbUElQRVNdLmluZGV4T2YocCksIDEpO1xuICAgICAgICAgICAgcC51bnBpcGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29ufVxuICAgICAqL1xuICAgIGFkZExpc3RlbmVyKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uKGV2LCBoYW5kbGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLm9uYCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAnZGF0YScgZXZlbnQgaGFuZGxlciB3aWxsIHRyaWdnZXIgdGhlIGZsb3cgb2YgZGF0YVxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGhhbmRsZXIgd2hlbiB0aGVyZSBpcyBkYXRhIHdhaXRpbmcgdG8gYmUgcmVhZFxuICAgICAqICAgd2lsbCBjYXVzZSAncmVhZGFibGUnIHRvIGJlIGVtaXR0ZWQgaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhbiAnZW5kaXNoJyBldmVudCBoYW5kbGVyICgnZW5kJywgJ2ZpbmlzaCcsIGV0Yy4pIHdoaWNoIGhhc1xuICAgICAqICAgYWxyZWFkeSBwYXNzZWQgd2lsbCBjYXVzZSB0aGUgZXZlbnQgdG8gYmUgZW1pdHRlZCBpbW1lZGlhdGVseSBhbmQgYWxsXG4gICAgICogICBoYW5kbGVycyByZW1vdmVkLlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYW4gJ2Vycm9yJyBldmVudCBoYW5kbGVyIGFmdGVyIGFuIGVycm9yIGhhcyBiZWVuIGVtaXR0ZWQgd2lsbFxuICAgICAqICAgY2F1c2UgdGhlIGV2ZW50IHRvIGJlIHJlLWVtaXR0ZWQgaW1tZWRpYXRlbHkgd2l0aCB0aGUgZXJyb3IgcHJldmlvdXNseVxuICAgICAqICAgcmFpc2VkLlxuICAgICAqL1xuICAgIG9uKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9uKGV2LCBoYW5kbGVyKTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSsrO1xuICAgICAgICAgICAgaWYgKCF0aGlzW1BJUEVTXS5sZW5ndGggJiYgIXRoaXNbRkxPV0lOR10pIHtcbiAgICAgICAgICAgICAgICB0aGlzW1JFU1VNRV0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJyAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApIHtcbiAgICAgICAgICAgIHN1cGVyLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNFbmRpc2goZXYpICYmIHRoaXNbRU1JVFRFRF9FTkRdKSB7XG4gICAgICAgICAgICBzdXBlci5lbWl0KGV2KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJyAmJiB0aGlzW0VNSVRURURfRVJST1JdKSB7XG4gICAgICAgICAgICBjb25zdCBoID0gaGFuZGxlcjtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiBoLmNhbGwodGhpcywgdGhpc1tFTUlUVEVEX0VSUk9SXSkpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGguY2FsbCh0aGlzLCB0aGlzW0VNSVRURURfRVJST1JdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29mZn1cbiAgICAgKi9cbiAgICByZW1vdmVMaXN0ZW5lcihldiwgaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vZmYoZXYsIGhhbmRsZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIub2ZmYFxuICAgICAqXG4gICAgICogSWYgYSAnZGF0YScgZXZlbnQgaGFuZGxlciBpcyByZW1vdmVkLCBhbmQgaXQgd2FzIHRoZSBsYXN0IGNvbnN1bWVyXG4gICAgICogKGllLCB0aGVyZSBhcmUgbm8gcGlwZSBkZXN0aW5hdGlvbnMgb3Igb3RoZXIgJ2RhdGEnIGV2ZW50IGxpc3RlbmVycyksXG4gICAgICogdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICovXG4gICAgb2ZmKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgaGFuZGxlcik7XG4gICAgICAgIC8vIGlmIHdlIHByZXZpb3VzbHkgaGFkIGxpc3RlbmVycywgYW5kIG5vdyB3ZSBkb24ndCwgYW5kIHdlIGRvbid0XG4gICAgICAgIC8vIGhhdmUgYW55IHBpcGVzLCB0aGVuIHN0b3AgdGhlIGZsb3csIHVubGVzcyBpdCdzIGJlZW4gZXhwbGljaXRseVxuICAgICAgICAvLyBwdXQgaW4gYSBkaXNjYXJkZWQgZmxvd2luZyBzdGF0ZSB2aWEgc3RyZWFtLnJlc3VtZSgpLlxuICAgICAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IHRoaXMubGlzdGVuZXJzKCdkYXRhJykubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXNbREFUQUxJU1RFTkVSU10gPT09IDAgJiZcbiAgICAgICAgICAgICAgICAhdGhpc1tESVNDQVJERURdICYmXG4gICAgICAgICAgICAgICAgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzYFxuICAgICAqXG4gICAgICogSWYgYWxsICdkYXRhJyBldmVudCBoYW5kbGVycyBhcmUgcmVtb3ZlZCwgYW5kIHRoZXkgd2VyZSB0aGUgbGFzdCBjb25zdW1lclxuICAgICAqIChpZSwgdGhlcmUgYXJlIG5vIHBpcGUgZGVzdGluYXRpb25zKSwgdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcFxuICAgICAqIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3Ige0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseVxuICAgICAqIGNhbGxlZC5cbiAgICAgKi9cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoZXYpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXNbRElTQ0FSREVEXSAmJiAhdGhpc1tQSVBFU10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlICdlbmQnIGV2ZW50IGhhcyBiZWVuIGVtaXR0ZWRcbiAgICAgKi9cbiAgICBnZXQgZW1pdHRlZEVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgIH1cbiAgICBbTUFZQkVfRU1JVF9FTkRdKCkge1xuICAgICAgICBpZiAoIXRoaXNbRU1JVFRJTkdfRU5EXSAmJlxuICAgICAgICAgICAgIXRoaXNbRU1JVFRFRF9FTkRdICYmXG4gICAgICAgICAgICAhdGhpc1tERVNUUk9ZRURdICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzW0VPRl0pIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZmluaXNoJyk7XG4gICAgICAgICAgICBpZiAodGhpc1tDTE9TRURdKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5lbWl0YCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBkZXN0cm95ZWQsIGFuZCB0aGUgZXZlbnQgaXMgc29tZXRoaW5nIG90aGVyXG4gICAgICogdGhhbiAnY2xvc2UnIG9yICdlcnJvcicsIHRoZW4gYGZhbHNlYCBpcyByZXR1cm5lZCBhbmQgbm8gaGFuZGxlcnNcbiAgICAgKiBhcmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdlbmQnLCBhbmQgaGFzIGFscmVhZHkgYmVlbiBlbWl0dGVkLCB0aGVuIHRoZSBldmVudFxuICAgICAqIGlzIGlnbm9yZWQuIElmIHRoZSBzdHJlYW0gaXMgaW4gYSBwYXVzZWQgb3Igbm9uLWZsb3dpbmcgc3RhdGUsIHRoZW5cbiAgICAgKiB0aGUgZXZlbnQgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCBkYXRhIGZsb3cgcmVzdW1lcy4gSWYgdGhlIHN0cmVhbSBpc1xuICAgICAqIGFzeW5jLCB0aGVuIGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBuZXh0IHRpY2sgcmF0aGVyIHRoYW5cbiAgICAgKiBpbW1lZGlhdGVseS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnY2xvc2UnLCBhbmQgJ2VuZCcgaGFzIG5vdCB5ZXQgYmVlbiBlbWl0dGVkLCB0aGVuXG4gICAgICogdGhlIGV2ZW50IHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgYWZ0ZXIgJ2VuZCcgaXMgZW1pdHRlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnZXJyb3InLCBhbmQgYW4gQWJvcnRTaWduYWwgd2FzIHByb3ZpZGVkIGZvciB0aGUgc3RyZWFtLFxuICAgICAqIGFuZCB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzLCB0aGVuIHRoZSBldmVudCBpcyBpZ25vcmVkLCBtYXRjaGluZyB0aGVcbiAgICAgKiBiZWhhdmlvciBvZiBub2RlIGNvcmUgc3RyZWFtcyBpbiB0aGUgcHJlc2Vuc2Ugb2YgYW4gQWJvcnRTaWduYWwuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2ZpbmlzaCcgb3IgJ3ByZWZpbmlzaCcsIHRoZW4gYWxsIGxpc3RlbmVycyB3aWxsIGJlXG4gICAgICogcmVtb3ZlZCBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnQsIHRvIHByZXZlbnQgZG91YmxlLWZpcmluZy5cbiAgICAgKi9cbiAgICBlbWl0KGV2LCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcmdzWzBdO1xuICAgICAgICAvLyBlcnJvciBhbmQgY2xvc2UgYXJlIG9ubHkgZXZlbnRzIGFsbG93ZWQgYWZ0ZXIgY2FsbGluZyBkZXN0cm95KClcbiAgICAgICAgaWYgKGV2ICE9PSAnZXJyb3InICYmXG4gICAgICAgICAgICBldiAhPT0gJ2Nsb3NlJyAmJlxuICAgICAgICAgICAgZXYgIT09IERFU1RST1lFRCAmJlxuICAgICAgICAgICAgdGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzW09CSkVDVE1PREVdICYmICFkYXRhXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogdGhpc1tBU1lOQ11cbiAgICAgICAgICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlUREFUQV0oZGF0YSkpLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXNbRU1JVERBVEFdKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZW5kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRU1JVEVORF0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Nsb3NlJykge1xuICAgICAgICAgICAgdGhpc1tDTE9TRURdID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGRvbid0IGVtaXQgY2xvc2UgYmVmb3JlICdlbmQnIGFuZCAnZmluaXNoJ1xuICAgICAgICAgICAgaWYgKCF0aGlzW0VNSVRURURfRU5EXSAmJiAhdGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygnY2xvc2UnKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRFRF9FUlJPUl0gPSBkYXRhO1xuICAgICAgICAgICAgc3VwZXIuZW1pdChFUlJPUiwgZGF0YSk7XG4gICAgICAgICAgICBjb25zdCByZXQgPSAhdGhpc1tTSUdOQUxdIHx8IHRoaXMubGlzdGVuZXJzKCdlcnJvcicpLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gc3VwZXIuZW1pdCgnZXJyb3InLCBkYXRhKVxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3Jlc3VtZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ3Jlc3VtZScpO1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdmaW5pc2gnIHx8IGV2ID09PSAncHJlZmluaXNoJykge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdChldik7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb3RoZXIgdW5rbm93biBldmVudFxuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KGV2LCAuLi5hcmdzKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW0VNSVREQVRBXShkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzW1BJUEVTXSkge1xuICAgICAgICAgICAgaWYgKHAuZGVzdC53cml0ZShkYXRhKSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXNbRElTQ0FSREVEXSA/IGZhbHNlIDogc3VwZXIuZW1pdCgnZGF0YScsIGRhdGEpO1xuICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBbRU1JVEVORF0oKSB7XG4gICAgICAgIGlmICh0aGlzW0VNSVRURURfRU5EXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpc1tFTUlUVEVEX0VORF0gPSB0cnVlO1xuICAgICAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXVxuICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlURU5EMl0oKSksIHRydWUpXG4gICAgICAgICAgICA6IHRoaXNbRU1JVEVORDJdKCk7XG4gICAgfVxuICAgIFtFTUlURU5EMl0oKSB7XG4gICAgICAgIGlmICh0aGlzW0RFQ09ERVJdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpc1tERUNPREVSXS5lbmQoKTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXNbUElQRVNdKSB7XG4gICAgICAgICAgICAgICAgICAgIHAuZGVzdC53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzW0RJU0NBUkRFRF0pXG4gICAgICAgICAgICAgICAgICAgIHN1cGVyLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpc1tQSVBFU10pIHtcbiAgICAgICAgICAgIHAuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdCgnZW5kJyk7XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIGFsbCBlbWl0dGVkIGRhdGEgb25jZVxuICAgICAqIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgKi9cbiAgICBhc3luYyBjb2xsZWN0KCkge1xuICAgICAgICBjb25zdCBidWYgPSBPYmplY3QuYXNzaWduKFtdLCB7XG4gICAgICAgICAgICBkYXRhTGVuZ3RoOiAwLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgYnVmLmRhdGFMZW5ndGggPSAwO1xuICAgICAgICAvLyBzZXQgdGhlIHByb21pc2UgZmlyc3QsIGluIGNhc2UgYW4gZXJyb3IgaXMgcmFpc2VkXG4gICAgICAgIC8vIGJ5IHRyaWdnZXJpbmcgdGhlIGZsb3cgaGVyZS5cbiAgICAgICAgY29uc3QgcCA9IHRoaXMucHJvbWlzZSgpO1xuICAgICAgICB0aGlzLm9uKCdkYXRhJywgYyA9PiB7XG4gICAgICAgICAgICBidWYucHVzaChjKTtcbiAgICAgICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgICAgICBidWYuZGF0YUxlbmd0aCArPSBjLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHA7XG4gICAgICAgIHJldHVybiBidWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgZW1pdHRlZCBkYXRhXG4gICAgICogb25jZSB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICpcbiAgICAgKiBOb3QgYWxsb3dlZCBvbiBvYmplY3RNb2RlIHN0cmVhbXMuXG4gICAgICovXG4gICAgYXN5bmMgY29uY2F0KCkge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgY29uY2F0IGluIG9iamVjdE1vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCB0aGlzLmNvbGxlY3QoKTtcbiAgICAgICAgcmV0dXJuICh0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBidWYuam9pbignJylcbiAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdChidWYsIGJ1Zi5kYXRhTGVuZ3RoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZvaWQgUHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAqL1xuICAgIGFzeW5jIHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uKERFU1RST1lFRCwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignc3RyZWFtIGRlc3Ryb3llZCcpKSk7XG4gICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVyID0+IHJlamVjdChlcikpO1xuICAgICAgICAgICAgdGhpcy5vbignZW5kJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91cyBgZm9yIGF3YWl0IG9mYCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIHdpbGwgY29udGludWUgZW1pdHRpbmcgYWxsIGNodW5rcyB1bnRpbCB0aGUgc3RyZWFtIHRlcm1pbmF0ZXMuXG4gICAgICovXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgLy8gc2V0IHRoaXMgdXAgZnJvbnQsIGluIGNhc2UgdGhlIGNvbnN1bWVyIGRvZXNuJ3QgY2FsbCBuZXh0KClcbiAgICAgICAgLy8gcmlnaHQgYXdheS5cbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICBzdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdG9wcGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmVzIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXNbRU9GXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgbGV0IHJlc29sdmU7XG4gICAgICAgICAgICBsZXQgcmVqZWN0O1xuICAgICAgICAgICAgY29uc3Qgb25lcnIgPSAoZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25kYXRhID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgdmFsdWUsIGRvbmU6ICEhdGhpc1tFT0ZdIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvbmRlc3Ryb3kgPSAoKSA9PiBvbmVycihuZXcgRXJyb3IoJ3N0cmVhbSBkZXN0cm95ZWQnKSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICB0aHJvdzogc3RvcCxcbiAgICAgICAgICAgIHJldHVybjogc3RvcCxcbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiB7IH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN5bmNocm9ub3VzIGBmb3Igb2ZgIGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBpdGVyYXRpb24gd2lsbCB0ZXJtaW5hdGUgd2hlbiB0aGUgaW50ZXJuYWwgYnVmZmVyIHJ1bnMgb3V0LCBldmVuXG4gICAgICogaWYgdGhlIHN0cmVhbSBoYXMgbm90IHlldCB0ZXJtaW5hdGVkLlxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICAvLyBzZXQgdGhpcyB1cCBmcm9udCwgaW4gY2FzZSB0aGUgY29uc3VtZXIgZG9lc24ndCBjYWxsIG5leHQoKVxuICAgICAgICAvLyByaWdodCBhd2F5LlxuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgICAgIHRoaXMub2ZmKEVSUk9SLCBzdG9wKTtcbiAgICAgICAgICAgIHRoaXMub2ZmKERFU1RST1lFRCwgc3RvcCk7XG4gICAgICAgICAgICB0aGlzLm9mZignZW5kJywgc3RvcCk7XG4gICAgICAgICAgICBzdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdG9wcGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gc3RvcCgpIDogeyBkb25lOiBmYWxzZSwgdmFsdWUgfTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbmNlKCdlbmQnLCBzdG9wKTtcbiAgICAgICAgdGhpcy5vbmNlKEVSUk9SLCBzdG9wKTtcbiAgICAgICAgdGhpcy5vbmNlKERFU1RST1lFRCwgc3RvcCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgdGhyb3c6IHN0b3AsXG4gICAgICAgICAgICByZXR1cm46IHN0b3AsXG4gICAgICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbU3ltYm9sLmRpc3Bvc2VdOiAoKSA9PiB7IH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgYSBzdHJlYW0sIHByZXZlbnRpbmcgaXQgZnJvbSBiZWluZyB1c2VkIGZvciBhbnkgZnVydGhlciBwdXJwb3NlLlxuICAgICAqXG4gICAgICogSWYgdGhlIHN0cmVhbSBoYXMgYSBgY2xvc2UoKWAgbWV0aG9kLCB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIG9uXG4gICAgICogZGVzdHJ1Y3Rpb24uXG4gICAgICpcbiAgICAgKiBBZnRlciBkZXN0cnVjdGlvbiwgYW55IGF0dGVtcHQgdG8gd3JpdGUgZGF0YSwgcmVhZCBkYXRhLCBvciBlbWl0IG1vc3RcbiAgICAgKiBldmVudHMgd2lsbCBiZSBpZ25vcmVkLlxuICAgICAqXG4gICAgICogSWYgYW4gZXJyb3IgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZW4gaXQgd2lsbCBiZSBlbWl0dGVkIGluIGFuXG4gICAgICogJ2Vycm9yJyBldmVudC5cbiAgICAgKi9cbiAgICBkZXN0cm95KGVyKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pIHtcbiAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChERVNUUk9ZRUQpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tERVNUUk9ZRURdID0gdHJ1ZTtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gdHJ1ZTtcbiAgICAgICAgLy8gdGhyb3cgYXdheSBhbGwgYnVmZmVyZWQgZGF0YSwgaXQncyBuZXZlciBjb21pbmcgb3V0XG4gICAgICAgIHRoaXNbQlVGRkVSXS5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gPSAwO1xuICAgICAgICBjb25zdCB3YyA9IHRoaXM7XG4gICAgICAgIGlmICh0eXBlb2Ygd2MuY2xvc2UgPT09ICdmdW5jdGlvbicgJiYgIXRoaXNbQ0xPU0VEXSlcbiAgICAgICAgICAgIHdjLmNsb3NlKCk7XG4gICAgICAgIGlmIChlcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgIC8vIGlmIG5vIGVycm9yIHRvIGVtaXQsIHN0aWxsIHJlamVjdCBwZW5kaW5nIHByb21pc2VzXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZW1pdChERVNUUk9ZRUQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBpc1N0cmVhbX1cbiAgICAgKlxuICAgICAqIEZvcm1lciBleHBvcnQgbG9jYXRpb24sIG1haW50YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IGlzU3RyZWFtKCkge1xuICAgICAgICByZXR1cm4gaXNTdHJlYW07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvLyB0aGlzIGlzIGp1c3QgYSB2ZXJ5IGxpZ2h0IHdyYXBwZXIgYXJvdW5kIDIgYXJyYXlzIHdpdGggYW4gb2Zmc2V0IGluZGV4XG5pbXBvcnQgeyBHTE9CU1RBUiB9IGZyb20gJ21pbmltYXRjaCc7XG5jb25zdCBpc1BhdHRlcm5MaXN0ID0gKHBsKSA9PiBwbC5sZW5ndGggPj0gMTtcbmNvbnN0IGlzR2xvYkxpc3QgPSAoZ2wpID0+IGdsLmxlbmd0aCA+PSAxO1xuLyoqXG4gKiBBbiBpbW11dGFibGUtaXNoIHZpZXcgb24gYW4gYXJyYXkgb2YgZ2xvYiBwYXJ0cyBhbmQgdGhlaXIgcGFyc2VkXG4gKiByZXN1bHRzXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXR0ZXJuIHtcbiAgICAjcGF0dGVybkxpc3Q7XG4gICAgI2dsb2JMaXN0O1xuICAgICNpbmRleDtcbiAgICBsZW5ndGg7XG4gICAgI3BsYXRmb3JtO1xuICAgICNyZXN0O1xuICAgICNnbG9iU3RyaW5nO1xuICAgICNpc0RyaXZlO1xuICAgICNpc1VOQztcbiAgICAjaXNBYnNvbHV0ZTtcbiAgICAjZm9sbG93R2xvYnN0YXIgPSB0cnVlO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5MaXN0LCBnbG9iTGlzdCwgaW5kZXgsIHBsYXRmb3JtKSB7XG4gICAgICAgIGlmICghaXNQYXR0ZXJuTGlzdChwYXR0ZXJuTGlzdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VtcHR5IHBhdHRlcm4gbGlzdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNHbG9iTGlzdChnbG9iTGlzdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VtcHR5IGdsb2IgbGlzdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnbG9iTGlzdC5sZW5ndGggIT09IHBhdHRlcm5MaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzbWF0Y2hlZCBwYXR0ZXJuIGxpc3QgYW5kIGdsb2IgbGlzdCBsZW5ndGhzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZW5ndGggPSBwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2luZGV4IG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gcGF0dGVybkxpc3Q7XG4gICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gZ2xvYkxpc3Q7XG4gICAgICAgIHRoaXMuI2luZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuI3BsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIC8vIG5vcm1hbGl6ZSByb290IGVudHJpZXMgb2YgYWJzb2x1dGUgcGF0dGVybnMgb24gaW5pdGlhbCBjcmVhdGlvbi5cbiAgICAgICAgaWYgKHRoaXMuI2luZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBjOiA9PiBbJ2M6LyddXG4gICAgICAgICAgICAvLyBDOi8gPT4gWydDOi8nXVxuICAgICAgICAgICAgLy8gQzoveCA9PiBbJ0M6LycsICd4J11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZSA9PiBbJy8vaG9zdC9zaGFyZS8nXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlLyA9PiBbJy8vaG9zdC9zaGFyZS8nXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlL3ggPT4gWycvL2hvc3Qvc2hhcmUvJywgJ3gnXVxuICAgICAgICAgICAgLy8gL2V0YyA9PiBbJy8nLCAnZXRjJ11cbiAgICAgICAgICAgIC8vIC8gPT4gWycvJ11cbiAgICAgICAgICAgIGlmICh0aGlzLmlzVU5DKCkpIHtcbiAgICAgICAgICAgICAgICAvLyAnJyAvICcnIC8gJ2hvc3QnIC8gJ3NoYXJlJ1xuICAgICAgICAgICAgICAgIGNvbnN0IFtwMCwgcDEsIHAyLCBwMywgLi4ucHJlc3RdID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgW2cwLCBnMSwgZzIsIGczLCAuLi5ncmVzdF0gPSB0aGlzLiNnbG9iTGlzdDtcbiAgICAgICAgICAgICAgICBpZiAocHJlc3RbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZHMgaW4gL1xuICAgICAgICAgICAgICAgICAgICBwcmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBncmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwID0gW3AwLCBwMSwgcDIsIHAzLCAnJ10uam9pbignLycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBbZzAsIGcxLCBnMiwgZzMsICcnXS5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBbcCwgLi4ucHJlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gW2csIC4uLmdyZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuI3BhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNEcml2ZSgpIHx8IHRoaXMuaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3AxLCAuLi5wcmVzdF0gPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgICAgICAgICBjb25zdCBbZzEsIC4uLmdyZXN0XSA9IHRoaXMuI2dsb2JMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChwcmVzdFswXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyBpbiAvXG4gICAgICAgICAgICAgICAgICAgIHByZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGdyZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwMSArICcvJztcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gZzEgKyAnLyc7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBbcCwgLi4ucHJlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gW2csIC4uLmdyZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuI3BhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIHBhcnNlZCBsaXN0IG9mIHBhdHRlcm5zXG4gICAgICovXG4gICAgcGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBvZiBpZiBwYXR0ZXJuKCkgcmV0dXJucyBhIHN0cmluZ1xuICAgICAqL1xuICAgIGlzU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgb2YgaWYgcGF0dGVybigpIHJldHVybnMgR0xPQlNUQVJcbiAgICAgKi9cbiAgICBpc0dsb2JzdGFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdID09PSBHTE9CU1RBUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiBwYXR0ZXJuKCkgcmV0dXJucyBhIHJlZ2V4cFxuICAgICAqL1xuICAgIGlzUmVnRXhwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdIGluc3RhbmNlb2YgUmVnRXhwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgLy1qb2luZWQgc2V0IG9mIGdsb2IgcGFydHMgdGhhdCBtYWtlIHVwIHRoaXMgcGF0dGVyblxuICAgICAqL1xuICAgIGdsb2JTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jZ2xvYlN0cmluZyA9XG4gICAgICAgICAgICB0aGlzLiNnbG9iU3RyaW5nIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuI2luZGV4ID09PSAwID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Fic29sdXRlKCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZ2xvYkxpc3RbMF0gKyB0aGlzLiNnbG9iTGlzdC5zbGljZSgxKS5qb2luKCcvJylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy4jZ2xvYkxpc3Quam9pbignLycpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4jZ2xvYkxpc3Quc2xpY2UodGhpcy4jaW5kZXgpLmpvaW4oJy8nKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZXJlIGFyZSBtb3JlIHBhdHRlcm4gcGFydHMgYWZ0ZXIgdGhpcyBvbmVcbiAgICAgKi9cbiAgICBoYXNNb3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiB0aGlzLiNpbmRleCArIDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGFmdGVyIHRoaXMgcGFydCwgb3IgbnVsbCBpZiB0aGlzIGlzIHRoZSBlbmRcbiAgICAgKi9cbiAgICByZXN0KCkge1xuICAgICAgICBpZiAodGhpcy4jcmVzdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3Jlc3Q7XG4gICAgICAgIGlmICghdGhpcy5oYXNNb3JlKCkpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3Jlc3QgPSBudWxsKTtcbiAgICAgICAgdGhpcy4jcmVzdCA9IG5ldyBQYXR0ZXJuKHRoaXMuI3BhdHRlcm5MaXN0LCB0aGlzLiNnbG9iTGlzdCwgdGhpcy4jaW5kZXggKyAxLCB0aGlzLiNwbGF0Zm9ybSk7XG4gICAgICAgIHRoaXMuI3Jlc3QuI2lzQWJzb2x1dGUgPSB0aGlzLiNpc0Fic29sdXRlO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc1VOQyA9IHRoaXMuI2lzVU5DO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc0RyaXZlID0gdGhpcy4jaXNEcml2ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Jlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHBhdHRlcm4gcmVwcmVzZW50cyBhIC8vdW5jL3BhdGgvIG9uIHdpbmRvd3NcbiAgICAgKi9cbiAgICBpc1VOQygpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzVU5DICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNVTkNcbiAgICAgICAgICAgIDogKHRoaXMuI2lzVU5DID1cbiAgICAgICAgICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNpbmRleCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBwbFswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgcGxbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwbFsyXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgISFwbFsyXSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGxbM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICEhcGxbM10pO1xuICAgIH1cbiAgICAvLyBwYXR0ZXJuIGxpa2UgQzovLi4uXG4gICAgLy8gc3BsaXQgPSBbJ0M6JywgLi4uXVxuICAgIC8vIFhYWDogd291bGQgYmUgbmljZSB0byBoYW5kbGUgcGF0dGVybnMgbGlrZSBgYzoqYCB0byB0ZXN0IHRoZSBjd2RcbiAgICAvLyBpbiBjOiBmb3IgKiwgYnV0IEkgZG9uJ3Qga25vdyBvZiBhIHdheSB0byBldmVuIGZpZ3VyZSBvdXQgd2hhdCB0aGF0XG4gICAgLy8gY3dkIGlzIHdpdGhvdXQgYWN0dWFsbHkgY2hkaXInaW5nIGludG8gaXQ/XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBhIGRyaXZlIGxldHRlciBvbiBXaW5kb3dzXG4gICAgICovXG4gICAgaXNEcml2ZSgpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzRHJpdmUgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB0aGlzLiNpc0RyaXZlXG4gICAgICAgICAgICA6ICh0aGlzLiNpc0RyaXZlID1cbiAgICAgICAgICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNpbmRleCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBsWzBdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KHBsWzBdKSk7XG4gICAgfVxuICAgIC8vIHBhdHRlcm4gPSAnLycgb3IgJy8uLi4nIG9yICcveC8uLi4nXG4gICAgLy8gc3BsaXQgPSBbJycsICcnXSBvciBbJycsIC4uLl0gb3IgWycnLCAneCcsIC4uLl1cbiAgICAvLyBEcml2ZSBhbmQgVU5DIGJvdGggY29uc2lkZXJlZCBhYnNvbHV0ZSBvbiB3aW5kb3dzXG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgcGF0dGVybiBpcyByb290ZWQgb24gYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0Fic29sdXRlICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNBYnNvbHV0ZVxuICAgICAgICAgICAgOiAodGhpcy4jaXNBYnNvbHV0ZSA9XG4gICAgICAgICAgICAgICAgKHBsWzBdID09PSAnJyAmJiBwbC5sZW5ndGggPiAxKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRHJpdmUoKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVU5DKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjb25zdW1lIHRoZSByb290IG9mIHRoZSBwYXR0ZXJuLCBhbmQgcmV0dXJuIGl0XG4gICAgICovXG4gICAgcm9vdCgpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMuI3BhdHRlcm5MaXN0WzBdO1xuICAgICAgICByZXR1cm4gKHR5cGVvZiBwID09PSAnc3RyaW5nJyAmJiB0aGlzLmlzQWJzb2x1dGUoKSAmJiB0aGlzLiNpbmRleCA9PT0gMCkgP1xuICAgICAgICAgICAgcFxuICAgICAgICAgICAgOiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJyZW50IGdsb2JzdGFyIHBhdHRlcm4gaXMgYWxsb3dlZCB0byBmb2xsb3dcbiAgICAgKiBhIHN5bWJvbGljIGxpbmsuXG4gICAgICovXG4gICAgY2hlY2tGb2xsb3dHbG9ic3RhcigpIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy4jaW5kZXggPT09IDAgfHxcbiAgICAgICAgICAgICF0aGlzLmlzR2xvYnN0YXIoKSB8fFxuICAgICAgICAgICAgIXRoaXMuI2ZvbGxvd0dsb2JzdGFyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFyayB0aGF0IHRoZSBjdXJyZW50IGdsb2JzdGFyIHBhdHRlcm4gaXMgZm9sbG93aW5nIGEgc3ltYm9saWMgbGlua1xuICAgICAqL1xuICAgIG1hcmtGb2xsb3dHbG9ic3RhcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI2luZGV4ID09PSAwIHx8ICF0aGlzLmlzR2xvYnN0YXIoKSB8fCAhdGhpcy4jZm9sbG93R2xvYnN0YXIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuI2ZvbGxvd0dsb2JzdGFyID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhdHRlcm4uanMubWFwIiwKICAgICIvLyBnaXZlIGl0IGEgcGF0dGVybiwgYW5kIGl0J2xsIGJlIGFibGUgdG8gdGVsbCB5b3UgaWZcbi8vIGEgZ2l2ZW4gcGF0aCBzaG91bGQgYmUgaWdub3JlZC5cbi8vIElnbm9yaW5nIGEgcGF0aCBpZ25vcmVzIGl0cyBjaGlsZHJlbiBpZiB0aGUgcGF0dGVybiBlbmRzIGluIC8qKlxuLy8gSWdub3JlcyBhcmUgYWx3YXlzIHBhcnNlZCBpbiBkb3Q6dHJ1ZSBtb2RlXG5pbXBvcnQgeyBNaW5pbWF0Y2ggfSBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHsgUGF0dGVybiB9IGZyb20gJy4vcGF0dGVybi5qcyc7XG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtID09PSAnc3RyaW5nJykgP1xuICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdsaW51eCc7XG4vKipcbiAqIENsYXNzIHVzZWQgdG8gcHJvY2VzcyBpZ25vcmVkIHBhdHRlcm5zXG4gKi9cbmV4cG9ydCBjbGFzcyBJZ25vcmUge1xuICAgIHJlbGF0aXZlO1xuICAgIHJlbGF0aXZlQ2hpbGRyZW47XG4gICAgYWJzb2x1dGU7XG4gICAgYWJzb2x1dGVDaGlsZHJlbjtcbiAgICBwbGF0Zm9ybTtcbiAgICBtbW9wdHM7XG4gICAgY29uc3RydWN0b3IoaWdub3JlZCwgeyBub2JyYWNlLCBub2Nhc2UsIG5vZXh0LCBub2dsb2JzdGFyLCBwbGF0Zm9ybSA9IGRlZmF1bHRQbGF0Zm9ybSwgfSkge1xuICAgICAgICB0aGlzLnJlbGF0aXZlID0gW107XG4gICAgICAgIHRoaXMuYWJzb2x1dGUgPSBbXTtcbiAgICAgICAgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuYWJzb2x1dGVDaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIHRoaXMubW1vcHRzID0ge1xuICAgICAgICAgICAgZG90OiB0cnVlLFxuICAgICAgICAgICAgbm9icmFjZSxcbiAgICAgICAgICAgIG5vY2FzZSxcbiAgICAgICAgICAgIG5vZXh0LFxuICAgICAgICAgICAgbm9nbG9ic3RhcixcbiAgICAgICAgICAgIG9wdGltaXphdGlvbkxldmVsOiAyLFxuICAgICAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgICAgICBub2NvbW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBub25lZ2F0ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBpZ24gb2YgaWdub3JlZClcbiAgICAgICAgICAgIHRoaXMuYWRkKGlnbik7XG4gICAgfVxuICAgIGFkZChpZ24pIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IGl0IGdpdmVzIHVzIGEgY2xlYW4gc2V0IG9mIG9wdGltaXplZFxuICAgICAgICAvLyBtaW5pbWF0Y2ggbWF0Y2hlcnMsIHdpdGhvdXQgZ2V0dGluZyB0cmlwcGVkIHVwIGlmIG9uZSBvZiB0aGVtXG4gICAgICAgIC8vIGVuZHMgaW4gLyoqIGluc2lkZSBhIGJyYWNlIHNlY3Rpb24sIGFuZCBpdCdzIG9ubHkgaW5lZmZpY2llbnQgYXRcbiAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSB3YWxrLCBub3QgYWxvbmcgaXQuXG4gICAgICAgIC8vIEl0J2QgYmUgbmljZSBpZiB0aGUgUGF0dGVybiBjbGFzcyBqdXN0IGhhZCBhIC50ZXN0KCkgbWV0aG9kLCBidXRcbiAgICAgICAgLy8gaGFuZGxpbmcgZ2xvYnN0YXJzIGlzIGEgYml0IG9mIGEgcGl0YSwgYW5kIHRoYXQgY29kZSBhbHJlYWR5IGxpdmVzXG4gICAgICAgIC8vIGluIG1pbmltYXRjaCBhbnl3YXkuXG4gICAgICAgIC8vIEFub3RoZXIgd2F5IHdvdWxkIGJlIGlmIG1heWJlIE1pbmltYXRjaCBjb3VsZCB0YWtlIGl0cyBzZXQvZ2xvYlBhcnRzXG4gICAgICAgIC8vIGFzIGFuIG9wdGlvbiwgYW5kIHRoZW4gd2UgY291bGQgYXQgbGVhc3QganVzdCB1c2UgUGF0dGVybiB0byB0ZXN0XG4gICAgICAgIC8vIGZvciBhYnNvbHV0ZS1uZXNzLlxuICAgICAgICAvLyBZZXQgYW5vdGhlciB3YXksIE1pbmltYXRjaCBjb3VsZCB0YWtlIGFuIGFycmF5IG9mIGdsb2Igc3RyaW5ncywgYW5kXG4gICAgICAgIC8vIGEgY3dkIG9wdGlvbiwgYW5kIGRvIHRoZSByaWdodCB0aGluZy5cbiAgICAgICAgY29uc3QgbW0gPSBuZXcgTWluaW1hdGNoKGlnbiwgdGhpcy5tbW9wdHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1tLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gbW0uc2V0W2ldO1xuICAgICAgICAgICAgY29uc3QgZ2xvYlBhcnRzID0gbW0uZ2xvYlBhcnRzW2ldO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAoIXBhcnNlZCB8fCAhZ2xvYlBhcnRzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhdHRlcm4gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzdHJpcCBvZmYgbGVhZGluZyAuLyBwb3J0aW9uc1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdsb2IvaXNzdWVzLzU3MFxuICAgICAgICAgICAgd2hpbGUgKHBhcnNlZFswXSA9PT0gJy4nICYmIGdsb2JQYXJ0c1swXSA9PT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgZ2xvYlBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgY29uc3QgcCA9IG5ldyBQYXR0ZXJuKHBhcnNlZCwgZ2xvYlBhcnRzLCAwLCB0aGlzLnBsYXRmb3JtKTtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBuZXcgTWluaW1hdGNoKHAuZ2xvYlN0cmluZygpLCB0aGlzLm1tb3B0cyk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGdsb2JQYXJ0c1tnbG9iUGFydHMubGVuZ3RoIC0gMV0gPT09ICcqKic7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHAuaXNBYnNvbHV0ZSgpO1xuICAgICAgICAgICAgaWYgKGFic29sdXRlKVxuICAgICAgICAgICAgICAgIHRoaXMuYWJzb2x1dGUucHVzaChtKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlLnB1c2gobSk7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoYWJzb2x1dGUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJzb2x1dGVDaGlsZHJlbi5wdXNoKG0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuLnB1c2gobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWdub3JlZChwKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gcC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBmdWxscGF0aHMgPSBgJHtmdWxscGF0aH0vYDtcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSBwLnJlbGF0aXZlKCkgfHwgJy4nO1xuICAgICAgICBjb25zdCByZWxhdGl2ZXMgPSBgJHtyZWxhdGl2ZX0vYDtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMucmVsYXRpdmUpIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKHJlbGF0aXZlKSB8fCBtLm1hdGNoKHJlbGF0aXZlcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKGZ1bGxwYXRoKSB8fCBtLm1hdGNoKGZ1bGxwYXRocykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjaGlsZHJlbklnbm9yZWQocCkge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHAuZnVsbHBhdGgoKSArICcvJztcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSAocC5yZWxhdGl2ZSgpIHx8ICcuJykgKyAnLyc7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKHJlbGF0aXZlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChmdWxscGF0aCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlnbm9yZS5qcy5tYXAiLAogICAgIi8vIHN5bmNocm9ub3VzIHV0aWxpdHkgZm9yIGZpbHRlcmluZyBlbnRyaWVzIGFuZCBjYWxjdWxhdGluZyBzdWJ3YWxrc1xuaW1wb3J0IHsgR0xPQlNUQVIgfSBmcm9tICdtaW5pbWF0Y2gnO1xuLyoqXG4gKiBBIGNhY2hlIG9mIHdoaWNoIHBhdHRlcm5zIGhhdmUgYmVlbiBwcm9jZXNzZWQgZm9yIGEgZ2l2ZW4gUGF0aFxuICovXG5leHBvcnQgY2xhc3MgSGFzV2Fsa2VkQ2FjaGUge1xuICAgIHN0b3JlO1xuICAgIGNvbnN0cnVjdG9yKHN0b3JlID0gbmV3IE1hcCgpKSB7XG4gICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICB9XG4gICAgY29weSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIYXNXYWxrZWRDYWNoZShuZXcgTWFwKHRoaXMuc3RvcmUpKTtcbiAgICB9XG4gICAgaGFzV2Fsa2VkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXQodGFyZ2V0LmZ1bGxwYXRoKCkpPy5oYXMocGF0dGVybi5nbG9iU3RyaW5nKCkpO1xuICAgIH1cbiAgICBzdG9yZVdhbGtlZCh0YXJnZXQsIHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0YXJnZXQuZnVsbHBhdGgoKTtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5zdG9yZS5nZXQoZnVsbHBhdGgpO1xuICAgICAgICBpZiAoY2FjaGVkKVxuICAgICAgICAgICAgY2FjaGVkLmFkZChwYXR0ZXJuLmdsb2JTdHJpbmcoKSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KGZ1bGxwYXRoLCBuZXcgU2V0KFtwYXR0ZXJuLmdsb2JTdHJpbmcoKV0pKTtcbiAgICB9XG59XG4vKipcbiAqIEEgcmVjb3JkIG9mIHdoaWNoIHBhdGhzIGhhdmUgYmVlbiBtYXRjaGVkIGluIGEgZ2l2ZW4gd2FsayBzdGVwLFxuICogYW5kIHdoZXRoZXIgdGhleSBvbmx5IGFyZSBjb25zaWRlcmVkIGEgbWF0Y2ggaWYgdGhleSBhcmUgYSBkaXJlY3RvcnksXG4gKiBhbmQgd2hldGhlciB0aGVpciBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHNob3VsZCBiZSByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hdGNoUmVjb3JkIHtcbiAgICBzdG9yZSA9IG5ldyBNYXAoKTtcbiAgICBhZGQodGFyZ2V0LCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgbiA9IChhYnNvbHV0ZSA/IDIgOiAwKSB8IChpZkRpciA/IDEgOiAwKTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RvcmUuZ2V0KHRhcmdldCk7XG4gICAgICAgIHRoaXMuc3RvcmUuc2V0KHRhcmdldCwgY3VycmVudCA9PT0gdW5kZWZpbmVkID8gbiA6IG4gJiBjdXJyZW50KTtcbiAgICB9XG4gICAgLy8gbWF0Y2gsIGFic29sdXRlLCBpZmRpclxuICAgIGVudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5zdG9yZS5lbnRyaWVzKCldLm1hcCgoW3BhdGgsIG5dKSA9PiBbXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgISEobiAmIDIpLFxuICAgICAgICAgICAgISEobiAmIDEpLFxuICAgICAgICBdKTtcbiAgICB9XG59XG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBwYXR0ZXJucyB0aGF0IG11c3QgYmUgcHJvY2Vzc2VkIGluIGEgc3Vic2VxdWVudCBzdGVwXG4gKiBmb3IgYSBnaXZlbiBwYXRoLlxuICovXG5leHBvcnQgY2xhc3MgU3ViV2Fsa3Mge1xuICAgIHN0b3JlID0gbmV3IE1hcCgpO1xuICAgIGFkZCh0YXJnZXQsIHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKCF0YXJnZXQuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuc3RvcmUuZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmIChzdWJzKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnMuZmluZChwID0+IHAuZ2xvYlN0cmluZygpID09PSBwYXR0ZXJuLmdsb2JTdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICBzdWJzLnB1c2gocGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXQodGFyZ2V0LCBbcGF0dGVybl0pO1xuICAgIH1cbiAgICBnZXQodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFzdWJzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F0dGVtcHRpbmcgdG8gd2FsayB1bmtub3duIHBhdGgnKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gc3VicztcbiAgICB9XG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5cygpLm1hcChrID0+IFtrLCB0aGlzLnN0b3JlLmdldChrKV0pO1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuc3RvcmUua2V5cygpXS5maWx0ZXIodCA9PiB0LmNhblJlYWRkaXIoKSk7XG4gICAgfVxufVxuLyoqXG4gKiBUaGUgY2xhc3MgdGhhdCBwcm9jZXNzZXMgcGF0dGVybnMgZm9yIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBIYW5kbGVzIGNoaWxkIGVudHJ5IGZpbHRlcmluZywgYW5kIGRldGVybWluaW5nIHdoZXRoZXIgYSBwYXRoJ3NcbiAqIGRpcmVjdG9yeSBjb250ZW50cyBtdXN0IGJlIHJlYWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9jZXNzb3Ige1xuICAgIGhhc1dhbGtlZENhY2hlO1xuICAgIG1hdGNoZXMgPSBuZXcgTWF0Y2hSZWNvcmQoKTtcbiAgICBzdWJ3YWxrcyA9IG5ldyBTdWJXYWxrcygpO1xuICAgIHBhdHRlcm5zO1xuICAgIGZvbGxvdztcbiAgICBkb3Q7XG4gICAgb3B0cztcbiAgICBjb25zdHJ1Y3RvcihvcHRzLCBoYXNXYWxrZWRDYWNoZSkge1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLmZvbGxvdyA9ICEhb3B0cy5mb2xsb3c7XG4gICAgICAgIHRoaXMuZG90ID0gISFvcHRzLmRvdDtcbiAgICAgICAgdGhpcy5oYXNXYWxrZWRDYWNoZSA9XG4gICAgICAgICAgICBoYXNXYWxrZWRDYWNoZSA/IGhhc1dhbGtlZENhY2hlLmNvcHkoKSA6IG5ldyBIYXNXYWxrZWRDYWNoZSgpO1xuICAgIH1cbiAgICBwcm9jZXNzUGF0dGVybnModGFyZ2V0LCBwYXR0ZXJucykge1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NpbmdTZXQgPSBwYXR0ZXJucy5tYXAocCA9PiBbdGFyZ2V0LCBwXSk7XG4gICAgICAgIC8vIG1hcCBvZiBwYXRocyB0byB0aGUgbWFnaWMtc3RhcnRpbmcgc3Vid2Fsa3MgdGhleSBuZWVkIHRvIHdhbGtcbiAgICAgICAgLy8gZmlyc3QgaXRlbSBpbiBwYXR0ZXJucyBpcyB0aGUgZmlsdGVyXG4gICAgICAgIGZvciAobGV0IFt0LCBwYXR0ZXJuXSBvZiBwcm9jZXNzaW5nU2V0KSB7XG4gICAgICAgICAgICB0aGlzLmhhc1dhbGtlZENhY2hlLnN0b3JlV2Fsa2VkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHBhdHRlcm4ucm9vdCgpO1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLmlzQWJzb2x1dGUoKSAmJiB0aGlzLm9wdHMuYWJzb2x1dGUgIT09IGZhbHNlO1xuICAgICAgICAgICAgLy8gc3RhcnQgYWJzb2x1dGUgcGF0dGVybnMgYXQgcm9vdFxuICAgICAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICAgICB0ID0gdC5yZXNvbHZlKHJvb3QgPT09ICcvJyAmJiB0aGlzLm9wdHMucm9vdCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLnJvb3RcbiAgICAgICAgICAgICAgICAgICAgOiByb290KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodCwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmlzRU5PRU5UKCkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBsZXQgcDtcbiAgICAgICAgICAgIGxldCByZXN0O1xuICAgICAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlICh0eXBlb2YgKHAgPSBwYXR0ZXJuLnBhdHRlcm4oKSkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgKHJlc3QgPSBwYXR0ZXJuLnJlc3QoKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gdC5yZXNvbHZlKHApO1xuICAgICAgICAgICAgICAgIHQgPSBjO1xuICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZXN0O1xuICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcCA9IHBhdHRlcm4ucGF0dGVybigpO1xuICAgICAgICAgICAgcmVzdCA9IHBhdHRlcm4ucmVzdCgpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNXYWxrZWRDYWNoZS5oYXNXYWxrZWQodCwgcGF0dGVybikpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzV2Fsa2VkQ2FjaGUuc3RvcmVXYWxrZWQodCwgcGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub3cgd2UgaGF2ZSBlaXRoZXIgYSBmaW5hbCBzdHJpbmcgZm9yIGEga25vd24gZW50cnksXG4gICAgICAgICAgICAvLyBtb3JlIHN0cmluZ3MgZm9yIGFuIHVua25vd24gZW50cnksXG4gICAgICAgICAgICAvLyBvciBhIHBhdHRlcm4gc3RhcnRpbmcgd2l0aCBtYWdpYywgbW91bnRlZCBvbiB0LlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIG11c3Qgbm90IGJlIGZpbmFsIGVudHJ5LCBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZVxuICAgICAgICAgICAgICAgIC8vIGNvbmNhdGVuYXRlZCBpdCBlYXJsaWVyLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlmRGlyID0gcCA9PT0gJy4uJyB8fCBwID09PSAnJyB8fCBwID09PSAnLic7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0LnJlc29sdmUocCksIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwID09PSBHTE9CU1RBUikge1xuICAgICAgICAgICAgICAgIC8vIGlmIG5vIHJlc3QsIG1hdGNoIGFuZCBzdWJ3YWxrIHBhdHRlcm5cbiAgICAgICAgICAgICAgICAvLyBpZiByZXN0LCBwcm9jZXNzIHJlc3QgYW5kIHN1YndhbGsgcGF0dGVyblxuICAgICAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBzeW1saW5rLCBidXQgd2UgZGlkbid0IGdldCBoZXJlIGJ5IHdheSBvZiBhXG4gICAgICAgICAgICAgICAgLy8gZ2xvYnN0YXIgbWF0Y2ggKG1lYW5pbmcgaXQncyB0aGUgZmlyc3QgdGltZSBUSElTIGdsb2JzdGFyXG4gICAgICAgICAgICAgICAgLy8gaGFzIHRyYXZlcnNlZCBhIHN5bWxpbmspLCB0aGVuIHdlIGZvbGxvdyBpdC4gT3RoZXJ3aXNlLCBzdG9wLlxuICAgICAgICAgICAgICAgIGlmICghdC5pc1N5bWJvbGljTGluaygpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sbG93IHx8XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4uY2hlY2tGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBycCA9IHJlc3Q/LnBhdHRlcm4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBycmVzdCA9IHJlc3Q/LnJlc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3QgfHwgKChycCA9PT0gJycgfHwgcnAgPT09ICcuJykgJiYgIXJyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IEhBUyB0byBiZSBhIGRpciBpZiBpdCBlbmRzIGluICoqLyBvciAqKi8uXG4gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBlbmRpbmcgaW4gKiogd2lsbCBtYXRjaCBmaWxlcyBhcyB3ZWxsLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHQsIGFic29sdXRlLCBycCA9PT0gJycgfHwgcnAgPT09ICcuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnAgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgd291bGQgbWVhbiB5b3UncmUgbWF0Y2hpbmcgKiovLi4gYXQgdGhlIGZzIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbm8gdGhhbmtzLCBJJ20gbm90IGdvbm5hIHRlc3QgdGhhdCBzcGVjaWZpYyBjYXNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cCA9IHQucGFyZW50IHx8IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFycmVzdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHRwLCBhYnNvbHV0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5oYXNXYWxrZWRDYWNoZS5oYXNXYWxrZWQodHAsIHJyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKHRwLCBycmVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodCwgcGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN1YndhbGtUYXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJ3YWxrcy5rZXlzKCk7XG4gICAgfVxuICAgIGNoaWxkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb2Nlc3Nvcih0aGlzLm9wdHMsIHRoaXMuaGFzV2Fsa2VkQ2FjaGUpO1xuICAgIH1cbiAgICAvLyByZXR1cm4gYSBuZXcgUHJvY2Vzc29yIGNvbnRhaW5pbmcgdGhlIHN1YndhbGtzIGZvciBlYWNoXG4gICAgLy8gY2hpbGQgZW50cnksIGFuZCBhIHNldCBvZiBtYXRjaGVzLCBhbmRcbiAgICAvLyBhIGhhc1dhbGtlZENhY2hlIHRoYXQncyBhIGNvcHkgb2YgdGhpcyBvbmVcbiAgICAvLyB0aGVuIHdlJ3JlIGdvaW5nIHRvIGNhbGxcbiAgICBmaWx0ZXJFbnRyaWVzKHBhcmVudCwgZW50cmllcykge1xuICAgICAgICBjb25zdCBwYXR0ZXJucyA9IHRoaXMuc3Vid2Fsa3MuZ2V0KHBhcmVudCk7XG4gICAgICAgIC8vIHB1dCBtYXRjaGVzIGFuZCBlbnRyeSB3YWxrcyBpbnRvIHRoZSByZXN1bHRzIHByb2Nlc3NvclxuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5jaGlsZCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLmlzQWJzb2x1dGUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGF0dGVybi5wYXR0ZXJuKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdCA9IHBhdHRlcm4ucmVzdCgpO1xuICAgICAgICAgICAgICAgIGlmIChwID09PSBHTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnRlc3RHbG9ic3RhcihlLCBwYXR0ZXJuLCByZXN0LCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy50ZXN0UmVnRXhwKGUsIHAsIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMudGVzdFN0cmluZyhlLCBwLCByZXN0LCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICB0ZXN0R2xvYnN0YXIoZSwgcGF0dGVybiwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZG90IHx8ICFlLm5hbWUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICBpZiAoIXBhdHRlcm4uaGFzTW9yZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlLCBhYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgaW4gZm9sbG93IG1vZGUgb3IgaXQncyBub3QgYSBzeW1saW5rLCBqdXN0IGtlZXBcbiAgICAgICAgICAgICAgICAvLyB0ZXN0aW5nIHRoZSBzYW1lIHBhdHRlcm4uIElmIHRoZXJlJ3MgbW9yZSBhZnRlciB0aGUgZ2xvYnN0YXIsXG4gICAgICAgICAgICAgICAgLy8gdGhlbiB0aGlzIHN5bWxpbmsgY29uc3VtZXMgdGhlIGdsb2JzdGFyLiBJZiBub3QsIHRoZW4gd2UgY2FuXG4gICAgICAgICAgICAgICAgLy8gZm9sbG93IGF0IG1vc3QgT05FIHN5bWxpbmsgYWxvbmcgdGhlIHdheSwgc28gd2UgbWFyayBpdCwgd2hpY2hcbiAgICAgICAgICAgICAgICAvLyBhbHNvIGNoZWNrcyB0byBlbnN1cmUgdGhhdCBpdCB3YXNuJ3QgYWxyZWFkeSBtYXJrZWQuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9sbG93IHx8ICFlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdCAmJiBwYXR0ZXJuLmNoZWNrRm9sbG93R2xvYnN0YXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcmVzdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGF0dGVybi5tYXJrRm9sbG93R2xvYnN0YXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIE5FWFQgdGhpbmcgbWF0Y2hlcyB0aGlzIGVudHJ5LCB0aGVuIGFsc28gYWRkXG4gICAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSByZXN0LnBhdHRlcm4oKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcnAgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgLy8gZG90cyBhbmQgZW1wdHkgd2VyZSBoYW5kbGVkIGFscmVhZHlcbiAgICAgICAgICAgICAgICBycCAhPT0gJy4uJyAmJlxuICAgICAgICAgICAgICAgIHJwICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgIHJwICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RTdHJpbmcoZSwgcnAsIHJlc3QucmVzdCgpLCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChycCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IGVwID0gZS5wYXJlbnQgfHwgZTtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGVwLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXN0UmVnRXhwKGUsIHJwLCByZXN0LnJlc3QoKSwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRlc3RSZWdFeHAoZSwgcCwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKCFwLnRlc3QoZS5uYW1lKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFyZXN0KSB7XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUsIGFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCByZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0ZXN0U3RyaW5nKGUsIHAsIHJlc3QsIGFic29sdXRlKSB7XG4gICAgICAgIC8vIHNob3VsZCBuZXZlciBoYXBwZW4/XG4gICAgICAgIGlmICghZS5pc05hbWVkKHApKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSwgYWJzb2x1dGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHJlc3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvY2Vzc29yLmpzLm1hcCIsCiAgICAiLyoqXG4gKiBTaW5nbGUtdXNlIHV0aWxpdHkgY2xhc3NlcyB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIHtAbGluayBHbG9ifVxuICogbWV0aG9kcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IE1pbmlwYXNzIH0gZnJvbSAnbWluaXBhc3MnO1xuaW1wb3J0IHsgSWdub3JlIH0gZnJvbSAnLi9pZ25vcmUuanMnO1xuaW1wb3J0IHsgUHJvY2Vzc29yIH0gZnJvbSAnLi9wcm9jZXNzb3IuanMnO1xuY29uc3QgbWFrZUlnbm9yZSA9IChpZ25vcmUsIG9wdHMpID0+IHR5cGVvZiBpZ25vcmUgPT09ICdzdHJpbmcnID8gbmV3IElnbm9yZShbaWdub3JlXSwgb3B0cylcbiAgICA6IEFycmF5LmlzQXJyYXkoaWdub3JlKSA/IG5ldyBJZ25vcmUoaWdub3JlLCBvcHRzKVxuICAgICAgICA6IGlnbm9yZTtcbi8qKlxuICogYmFzaWMgd2Fsa2luZyB1dGlsaXRpZXMgdGhhdCBhbGwgdGhlIGdsb2Igd2Fsa2VyIHR5cGVzIHVzZVxuICovXG5leHBvcnQgY2xhc3MgR2xvYlV0aWwge1xuICAgIHBhdGg7XG4gICAgcGF0dGVybnM7XG4gICAgb3B0cztcbiAgICBzZWVuID0gbmV3IFNldCgpO1xuICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgIGFib3J0ZWQgPSBmYWxzZTtcbiAgICAjb25SZXN1bWUgPSBbXTtcbiAgICAjaWdub3JlO1xuICAgICNzZXA7XG4gICAgc2lnbmFsO1xuICAgIG1heERlcHRoO1xuICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHBhdHRlcm5zO1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLiNzZXAgPSAhb3B0cy5wb3NpeCAmJiBvcHRzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ1xcXFwnIDogJy8nO1xuICAgICAgICB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgPSBvcHRzLmluY2x1ZGVDaGlsZE1hdGNoZXMgIT09IGZhbHNlO1xuICAgICAgICBpZiAob3B0cy5pZ25vcmUgfHwgIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcykge1xuICAgICAgICAgICAgdGhpcy4jaWdub3JlID0gbWFrZUlnbm9yZShvcHRzLmlnbm9yZSA/PyBbXSwgb3B0cyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLiNpZ25vcmUuYWRkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbSA9ICdjYW5ub3QgaWdub3JlIGNoaWxkIG1hdGNoZXMsIGlnbm9yZSBsYWNrcyBhZGQoKSBtZXRob2QuJztcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWdub3JlLCBhbHdheXMgc2V0IHdpdGggbWF4RGVwdGgsIGJ1dCBpdCdzIG9wdGlvbmFsIG9uIHRoZVxuICAgICAgICAvLyBHbG9iT3B0aW9ucyB0eXBlXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB0aGlzLm1heERlcHRoID0gb3B0cy5tYXhEZXB0aCB8fCBJbmZpbml0eTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgaWYgKG9wdHMuc2lnbmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNpZ25hbCA9IG9wdHMuc2lnbmFsO1xuICAgICAgICAgICAgdGhpcy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4jb25SZXN1bWUubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgICNpZ25vcmVkKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vlbi5oYXMocGF0aCkgfHwgISF0aGlzLiNpZ25vcmU/Lmlnbm9yZWQ/LihwYXRoKTtcbiAgICB9XG4gICAgI2NoaWxkcmVuSWdub3JlZChwYXRoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuI2lnbm9yZT8uY2hpbGRyZW5JZ25vcmVkPy4ocGF0aCk7XG4gICAgfVxuICAgIC8vIGJhY2twcmVzc3VyZSBtZWNoYW5pc21cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bWUoKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBmbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiAoZm4gPSB0aGlzLiNvblJlc3VtZS5zaGlmdCgpKSkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblJlc3VtZShmbikge1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIXRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lLnB1c2goZm4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGRvIHRoZSByZXF1aXNpdGUgcmVhbHBhdGgvc3RhdCBjaGVja2luZywgYW5kIHJldHVybiB0aGUgcGF0aFxuICAgIC8vIHRvIGFkZCBvciB1bmRlZmluZWQgdG8gZmlsdGVyIGl0IG91dC5cbiAgICBhc3luYyBtYXRjaENoZWNrKGUsIGlmRGlyKSB7XG4gICAgICAgIGlmIChpZkRpciAmJiB0aGlzLm9wdHMubm9kaXIpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcnBjO1xuICAgICAgICBpZiAodGhpcy5vcHRzLnJlYWxwYXRoKSB7XG4gICAgICAgICAgICBycGMgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgKGF3YWl0IGUucmVhbHBhdGgoKSk7XG4gICAgICAgICAgICBpZiAoIXJwYylcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZSA9IHJwYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZWVkU3RhdCA9IGUuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQ7XG4gICAgICAgIGNvbnN0IHMgPSBuZWVkU3RhdCA/IGF3YWl0IGUubHN0YXQoKSA6IGU7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZm9sbG93ICYmIHRoaXMub3B0cy5ub2RpciAmJiBzPy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBhd2FpdCBzLnJlYWxwYXRoKCk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldC5pc1Vua25vd24oKSB8fCB0aGlzLm9wdHMuc3RhdCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0YXJnZXQubHN0YXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hDaGVja1Rlc3QocywgaWZEaXIpO1xuICAgIH1cbiAgICBtYXRjaENoZWNrVGVzdChlLCBpZkRpcikge1xuICAgICAgICByZXR1cm4gKGUgJiZcbiAgICAgICAgICAgICh0aGlzLm1heERlcHRoID09PSBJbmZpbml0eSB8fCBlLmRlcHRoKCkgPD0gdGhpcy5tYXhEZXB0aCkgJiZcbiAgICAgICAgICAgICghaWZEaXIgfHwgZS5jYW5SZWFkZGlyKCkpICYmXG4gICAgICAgICAgICAoIXRoaXMub3B0cy5ub2RpciB8fCAhZS5pc0RpcmVjdG9yeSgpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLm9wdHMubm9kaXIgfHxcbiAgICAgICAgICAgICAgICAhdGhpcy5vcHRzLmZvbGxvdyB8fFxuICAgICAgICAgICAgICAgICFlLmlzU3ltYm9saWNMaW5rKCkgfHxcbiAgICAgICAgICAgICAgICAhZS5yZWFscGF0aENhY2hlZCgpPy5pc0RpcmVjdG9yeSgpKSAmJlxuICAgICAgICAgICAgIXRoaXMuI2lnbm9yZWQoZSkpID9cbiAgICAgICAgICAgIGVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBtYXRjaENoZWNrU3luYyhlLCBpZkRpcikge1xuICAgICAgICBpZiAoaWZEaXIgJiYgdGhpcy5vcHRzLm5vZGlyKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJwYztcbiAgICAgICAgaWYgKHRoaXMub3B0cy5yZWFscGF0aCkge1xuICAgICAgICAgICAgcnBjID0gZS5yZWFscGF0aENhY2hlZCgpIHx8IGUucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgICAgICBpZiAoIXJwYylcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZSA9IHJwYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZWVkU3RhdCA9IGUuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQ7XG4gICAgICAgIGNvbnN0IHMgPSBuZWVkU3RhdCA/IGUubHN0YXRTeW5jKCkgOiBlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmZvbGxvdyAmJiB0aGlzLm9wdHMubm9kaXIgJiYgcz8uaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gcy5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldD8uaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LmxzdGF0U3luYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoQ2hlY2tUZXN0KHMsIGlmRGlyKTtcbiAgICB9XG4gICAgbWF0Y2hGaW5pc2goZSwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQoZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIHdlIGtub3cgd2UgaGF2ZSBhbiBpZ25vcmUgaWYgdGhpcyBpcyBmYWxzZSwgYnV0IFRTIGRvZXNuJ3RcbiAgICAgICAgaWYgKCF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgJiYgdGhpcy4jaWdub3JlPy5hZGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbiA9IGAke2UucmVsYXRpdmVQb3NpeCgpfS8qKmA7XG4gICAgICAgICAgICB0aGlzLiNpZ25vcmUuYWRkKGlnbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWJzID0gdGhpcy5vcHRzLmFic29sdXRlID09PSB1bmRlZmluZWQgPyBhYnNvbHV0ZSA6IHRoaXMub3B0cy5hYnNvbHV0ZTtcbiAgICAgICAgdGhpcy5zZWVuLmFkZChlKTtcbiAgICAgICAgY29uc3QgbWFyayA9IHRoaXMub3B0cy5tYXJrICYmIGUuaXNEaXJlY3RvcnkoKSA/IHRoaXMuI3NlcCA6ICcnO1xuICAgICAgICAvLyBvaywgd2UgaGF2ZSB3aGF0IHdlIG5lZWQhXG4gICAgICAgIGlmICh0aGlzLm9wdHMud2l0aEZpbGVUeXBlcykge1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWJzKSB7XG4gICAgICAgICAgICBjb25zdCBhYnMgPSB0aGlzLm9wdHMucG9zaXggPyBlLmZ1bGxwYXRoUG9zaXgoKSA6IGUuZnVsbHBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KGFicyArIG1hcmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVsID0gdGhpcy5vcHRzLnBvc2l4ID8gZS5yZWxhdGl2ZVBvc2l4KCkgOiBlLnJlbGF0aXZlKCk7XG4gICAgICAgICAgICBjb25zdCBwcmUgPSB0aGlzLm9wdHMuZG90UmVsYXRpdmUgJiYgIXJlbC5zdGFydHNXaXRoKCcuLicgKyB0aGlzLiNzZXApID9cbiAgICAgICAgICAgICAgICAnLicgKyB0aGlzLiNzZXBcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoIXJlbCA/ICcuJyArIG1hcmsgOiBwcmUgKyByZWwgKyBtYXJrKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBtYXRjaChlLCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hDaGVjayhlLCBpZkRpcik7XG4gICAgICAgIGlmIChwKVxuICAgICAgICAgICAgdGhpcy5tYXRjaEZpbmlzaChwLCBhYnNvbHV0ZSk7XG4gICAgfVxuICAgIG1hdGNoU3luYyhlLCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMubWF0Y2hDaGVja1N5bmMoZSwgaWZEaXIpO1xuICAgICAgICBpZiAocClcbiAgICAgICAgICAgIHRoaXMubWF0Y2hGaW5pc2gocCwgYWJzb2x1dGUpO1xuICAgIH1cbiAgICB3YWxrQ0IodGFyZ2V0LCBwYXR0ZXJucywgY2IpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBuZXcgUHJvY2Vzc29yKHRoaXMub3B0cyksIGNiKTtcbiAgICB9XG4gICAgd2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzLiNjaGlsZHJlbklnbm9yZWQodGFyZ2V0KSlcbiAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUoKCkgPT4gdGhpcy53YWxrQ0IyKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3NvciwgY2IpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzb3IucHJvY2Vzc1BhdHRlcm5zKHRhcmdldCwgcGF0dGVybnMpO1xuICAgICAgICAvLyBkb25lIHByb2Nlc3NpbmcuICBhbGwgb2YgdGhlIGFib3ZlIGlzIHN5bmMsIGNhbiBiZSBhYnN0cmFjdGVkIG91dC5cbiAgICAgICAgLy8gc3Vid2Fsa3MgaXMgYSBtYXAgb2YgcGF0aHMgdG8gdGhlIGVudHJ5IGZpbHRlcnMgdGhleSBuZWVkXG4gICAgICAgIC8vIG1hdGNoZXMgaXMgYSBtYXAgb2YgcGF0aHMgdG8gW2Fic29sdXRlLCBpZkRpcl0gdHVwbGVzLlxuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMubWF0Y2gobSwgYWJzb2x1dGUsIGlmRGlyKS50aGVuKCgpID0+IG5leHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHByb2Nlc3Nvci5zdWJ3YWxrVGFyZ2V0cygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgJiYgdC5kZXB0aCgpID49IHRoaXMubWF4RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbkNhY2hlZCA9IHQucmVhZGRpckNhY2hlZCgpO1xuICAgICAgICAgICAgaWYgKHQuY2FsbGVkUmVhZGRpcigpKVxuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0NCMyh0LCBjaGlsZHJlbkNhY2hlZCwgcHJvY2Vzc29yLCBuZXh0KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHQucmVhZGRpckNCKChfLCBlbnRyaWVzKSA9PiB0aGlzLndhbGtDQjModCwgZW50cmllcywgcHJvY2Vzc29yLCBuZXh0KSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0IzKHRhcmdldCwgZW50cmllcywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzb3IuZmlsdGVyRW50cmllcyh0YXJnZXQsIGVudHJpZXMpO1xuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMubWF0Y2gobSwgYWJzb2x1dGUsIGlmRGlyKS50aGVuKCgpID0+IG5leHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0LCBwYXR0ZXJuc10gb2YgcHJvY2Vzc29yLnN1YndhbGtzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IuY2hpbGQoKSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0JTeW5jKHRhcmdldCwgcGF0dGVybnMsIGNiKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIG5ldyBQcm9jZXNzb3IodGhpcy5vcHRzKSwgY2IpO1xuICAgIH1cbiAgICB3YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzLiNjaGlsZHJlbklnbm9yZWQodGFyZ2V0KSlcbiAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUoKCkgPT4gdGhpcy53YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc29yLnByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKTtcbiAgICAgICAgLy8gZG9uZSBwcm9jZXNzaW5nLiAgYWxsIG9mIHRoZSBhYm92ZSBpcyBzeW5jLCBjYW4gYmUgYWJzdHJhY3RlZCBvdXQuXG4gICAgICAgIC8vIHN1YndhbGtzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIHRoZSBlbnRyeSBmaWx0ZXJzIHRoZXkgbmVlZFxuICAgICAgICAvLyBtYXRjaGVzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIFthYnNvbHV0ZSwgaWZEaXJdIHR1cGxlcy5cbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hTeW5jKG0sIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHByb2Nlc3Nvci5zdWJ3YWxrVGFyZ2V0cygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgJiYgdC5kZXB0aCgpID49IHRoaXMubWF4RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHQucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCM1N5bmModCwgY2hpbGRyZW4sIHByb2Nlc3NvciwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0IzU3luYyh0YXJnZXQsIGVudHJpZXMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc29yLmZpbHRlckVudHJpZXModGFyZ2V0LCBlbnRyaWVzKTtcbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hTeW5jKG0sIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0LCBwYXR0ZXJuc10gb2YgcHJvY2Vzc29yLnN1YndhbGtzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLmNoaWxkKCksIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgR2xvYldhbGtlciBleHRlbmRzIEdsb2JVdGlsIHtcbiAgICBtYXRjaGVzID0gbmV3IFNldCgpO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHBhdHRlcm5zLCBwYXRoLCBvcHRzKTtcbiAgICB9XG4gICAgbWF0Y2hFbWl0KGUpIHtcbiAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlKTtcbiAgICB9XG4gICAgYXN5bmMgd2FsaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBhdGgubHN0YXQoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRoaXMucGF0aCwgdGhpcy5wYXR0ZXJucywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZWoodGhpcy5zaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyh0aGlzLm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcztcbiAgICB9XG4gICAgd2Fsa1N5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIHRocm93IHRoaXMuc2lnbmFsLnJlYXNvbjtcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGhpcy5wYXRoLmxzdGF0U3luYygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdGhpbmcgZm9yIHRoZSBjYWxsYmFjayB0byBkbywgYmVjYXVzZSB0aGlzIG5ldmVyIHBhdXNlc1xuICAgICAgICB0aGlzLndhbGtDQlN5bmModGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgR2xvYlN0cmVhbSBleHRlbmRzIEdsb2JVdGlsIHtcbiAgICByZXN1bHRzO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHBhdHRlcm5zLCBwYXRoLCBvcHRzKTtcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gbmV3IE1pbmlwYXNzKHtcbiAgICAgICAgICAgIHNpZ25hbDogdGhpcy5zaWduYWwsXG4gICAgICAgICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXN1bHRzLm9uKCdkcmFpbicsICgpID0+IHRoaXMucmVzdW1lKCkpO1xuICAgICAgICB0aGlzLnJlc3VsdHMub24oJ3Jlc3VtZScsICgpID0+IHRoaXMucmVzdW1lKCkpO1xuICAgIH1cbiAgICBtYXRjaEVtaXQoZSkge1xuICAgICAgICB0aGlzLnJlc3VsdHMud3JpdGUoZSk7XG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRzLmZsb3dpbmcpXG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuICAgIHN0cmVhbSgpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5wYXRoO1xuICAgICAgICBpZiAodGFyZ2V0LmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICB0YXJnZXQubHN0YXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLndhbGtDQih0YXJnZXQsIHRoaXMucGF0dGVybnMsICgpID0+IHRoaXMucmVzdWx0cy5lbmQoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRhcmdldCwgdGhpcy5wYXR0ZXJucywgKCkgPT4gdGhpcy5yZXN1bHRzLmVuZCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xuICAgIH1cbiAgICBzdHJlYW1TeW5jKCkge1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGgubHN0YXRTeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53YWxrQ0JTeW5jKHRoaXMucGF0aCwgdGhpcy5wYXR0ZXJucywgKCkgPT4gdGhpcy5yZXN1bHRzLmVuZCgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13YWxrZXIuanMubWFwIiwKICAgICJpbXBvcnQgeyBNaW5pbWF0Y2ggfSBmcm9tICdtaW5pbWF0Y2gnO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0dGVybnMgcHJvdmlkZWQgY29udGFpbiBhbnkgbWFnaWMgZ2xvYiBjaGFyYWN0ZXJzLFxuICogZ2l2ZW4gdGhlIG9wdGlvbnMgcHJvdmlkZWQuXG4gKlxuICogQnJhY2UgZXhwYW5zaW9uIGlzIG5vdCBjb25zaWRlcmVkIFwibWFnaWNcIiB1bmxlc3MgdGhlIGBtYWdpY2FsQnJhY2VzYCBvcHRpb25cbiAqIGlzIHNldCwgYXMgYnJhY2UgZXhwYW5zaW9uIGp1c3QgdHVybnMgb25lIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBTbyBhIHBhdHRlcm4gbGlrZSBgJ3h7YSxifXknYCB3b3VsZCByZXR1cm4gYGZhbHNlYCwgYmVjYXVzZSBgJ3hheSdgIGFuZFxuICogYCd4YnknYCBib3RoIGRvIG5vdCBjb250YWluIGFueSBtYWdpYyBnbG9iIGNoYXJhY3RlcnMsIGFuZCBpdCdzIHRyZWF0ZWQgdGhlXG4gKiBzYW1lIGFzIGlmIHlvdSBoYWQgY2FsbGVkIGl0IG9uIGBbJ3hheScsICd4YnknXWAuIFdoZW4gYG1hZ2ljYWxCcmFjZXM6dHJ1ZWBcbiAqIGlzIGluIHRoZSBvcHRpb25zLCBicmFjZSBleHBhbnNpb24gX2lzXyB0cmVhdGVkIGFzIGEgcGF0dGVybiBoYXZpbmcgbWFnaWMuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNNYWdpYyA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF0dGVybikpIHtcbiAgICAgICAgcGF0dGVybiA9IFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwIG9mIHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKG5ldyBNaW5pbWF0Y2gocCwgb3B0aW9ucykuaGFzTWFnaWMoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzLW1hZ2ljLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZXNjYXBlLCB1bmVzY2FwZSB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgeyBHbG9iIH0gZnJvbSAnLi9nbG9iLmpzJztcbmltcG9ydCB7IGhhc01hZ2ljIH0gZnJvbSAnLi9oYXMtbWFnaWMuanMnO1xuZXhwb3J0IHsgZXNjYXBlLCB1bmVzY2FwZSB9IGZyb20gJ21pbmltYXRjaCc7XG5leHBvcnQgeyBHbG9iIH0gZnJvbSAnLi9nbG9iLmpzJztcbmV4cG9ydCB7IGhhc01hZ2ljIH0gZnJvbSAnLi9oYXMtbWFnaWMuanMnO1xuZXhwb3J0IHsgSWdub3JlIH0gZnJvbSAnLi9pZ25vcmUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdsb2JTdHJlYW1TeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5zdHJlYW1TeW5jKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2xvYlN0cmVhbShwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEdsb2IocGF0dGVybiwgb3B0aW9ucykuc3RyZWFtKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2xvYlN5bmMocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBHbG9iKHBhdHRlcm4sIG9wdGlvbnMpLndhbGtTeW5jKCk7XG59XG5hc3luYyBmdW5jdGlvbiBnbG9iXyhwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEdsb2IocGF0dGVybiwgb3B0aW9ucykud2FsaygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdsb2JJdGVyYXRlU3luYyhwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEdsb2IocGF0dGVybiwgb3B0aW9ucykuaXRlcmF0ZVN5bmMoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnbG9iSXRlcmF0ZShwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEdsb2IocGF0dGVybiwgb3B0aW9ucykuaXRlcmF0ZSgpO1xufVxuLy8gYWxpYXNlczogZ2xvYi5zeW5jLnN0cmVhbSgpIGdsb2Iuc3RyZWFtLnN5bmMoKSBnbG9iLnN5bmMoKSBldGNcbmV4cG9ydCBjb25zdCBzdHJlYW1TeW5jID0gZ2xvYlN0cmVhbVN5bmM7XG5leHBvcnQgY29uc3Qgc3RyZWFtID0gT2JqZWN0LmFzc2lnbihnbG9iU3RyZWFtLCB7IHN5bmM6IGdsb2JTdHJlYW1TeW5jIH0pO1xuZXhwb3J0IGNvbnN0IGl0ZXJhdGVTeW5jID0gZ2xvYkl0ZXJhdGVTeW5jO1xuZXhwb3J0IGNvbnN0IGl0ZXJhdGUgPSBPYmplY3QuYXNzaWduKGdsb2JJdGVyYXRlLCB7XG4gICAgc3luYzogZ2xvYkl0ZXJhdGVTeW5jLFxufSk7XG5leHBvcnQgY29uc3Qgc3luYyA9IE9iamVjdC5hc3NpZ24oZ2xvYlN5bmMsIHtcbiAgICBzdHJlYW06IGdsb2JTdHJlYW1TeW5jLFxuICAgIGl0ZXJhdGU6IGdsb2JJdGVyYXRlU3luYyxcbn0pO1xuZXhwb3J0IGNvbnN0IGdsb2IgPSBPYmplY3QuYXNzaWduKGdsb2JfLCB7XG4gICAgZ2xvYjogZ2xvYl8sXG4gICAgZ2xvYlN5bmMsXG4gICAgc3luYyxcbiAgICBnbG9iU3RyZWFtLFxuICAgIHN0cmVhbSxcbiAgICBnbG9iU3RyZWFtU3luYyxcbiAgICBzdHJlYW1TeW5jLFxuICAgIGdsb2JJdGVyYXRlLFxuICAgIGl0ZXJhdGUsXG4gICAgZ2xvYkl0ZXJhdGVTeW5jLFxuICAgIGl0ZXJhdGVTeW5jLFxuICAgIEdsb2IsXG4gICAgaGFzTWFnaWMsXG4gICAgZXNjYXBlLFxuICAgIHVuZXNjYXBlLFxufSk7XG5nbG9iLmdsb2IgPSBnbG9iO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJpbXBvcnQgeyBnbG9iIH0gZnJvbSBcImdsb2JcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBlbnYgfSBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5pbXBvcnQgdHlwZSB7IE1pbGtpb0FkYXB0ZXIsIFZpdGVJbnB1dCwgVml0ZU91dHB1dCB9IGZyb20gXCIuL2luZGV4LnRzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5cbmNvbnN0IGFkYXB0ZXJOYW1lID0gXCJlZGdlLW9uZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZWRnZU9uZUFkYXB0ZXIoKTogTWlsa2lvQWRhcHRlciB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogYWRhcHRlck5hbWUsXG4gICAgYWRhcHRlcjogYXN5bmMgKG9wdGlvbnM6IHt9KSA9PiB7XG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQHN0ZXAgaW5wdXRcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICovXG4gICAgICBjb25zdCBpbnB1dDogVml0ZUlucHV0ID0ge307XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgZ2xvYihcIm1vZHVsZXMvKiovKi57YWN0aW9uLHN0cmVhbX0udHNcIik7XG4gICAgICBjb25zdCB0YXNrczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbW9kdWxlUGF0aCBvZiByZXN1bHRzKSB7XG4gICAgICAgIHRhc2tzLnB1c2goXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhTcGxpdCA9IG1vZHVsZVBhdGhcbiAgICAgICAgICAgICAgLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKVxuICAgICAgICAgICAgICAuc2xpY2UoMCwgbW9kdWxlUGF0aC5sZW5ndGggLSAxMCkgLy8gMTAgPT09IFwiLmFjdGlvbi50c1wiLmxlbmd0aCBvciBcIi5zdHJlYW0udHNcIi5sZW5ndGhcbiAgICAgICAgICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgICAgICAgICAuc2xpY2UoMSk7XG4gICAgICAgICAgICBjb25zdCBsZXZlbCA9IHBhdGhTcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gcGF0aFNwbGl0LmpvaW4oXCIvXCIpO1xuICAgICAgICAgICAgY29uc3QgYmFja1RvUm9vdCA9IFwiLi4vXCIucmVwZWF0KGxldmVsICsgMSk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXNGb2xkZXIgPSBgLm1pbGtpby9nZW5lcmF0ZWQvcm91dGVzL21vZHVsZV9fJHtwYXRoLnJlcGxhY2VBbGwoXCIvXCIsIFwiX19cIikucmVwbGFjZUFsbChcIi1cIiwgXCJfXCIpfWA7XG5cbiAgICAgICAgICAgIC8vIFRyYXZlcnNlIHRoZSByb3V0ZXMgZ2VuZXJhdGVkIGluIHRoZSBkaXJlY3RvcnkgYW5kIHNlbGVjdCB0aGUgbGF0ZXN0IHBpZWNlIG9mIGRhdGFcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlc0ZvbGRlckZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihyb3V0ZXNGb2xkZXIpO1xuICAgICAgICAgICAgaWYgKHJvdXRlc0ZvbGRlckZpbGVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKGBObyByb3V0ZXMgZm91bmQgaW4gJHtyb3V0ZXNGb2xkZXJ9YCk7XG4gICAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZnVsbCBwYXRocyBhbmQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIGFsbCBmaWxlc1xuICAgICAgICAgICAgY29uc3QgZmlsZXNXaXRoU3RhdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgcm91dGVzRm9sZGVyRmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHJvdXRlc0ZvbGRlciwgZmlsZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaWxlUGF0aCwgYmlydGhUaW1lOiBzdGF0cy5iaXJ0aHRpbWUgfTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qgcm91dGVQYXRoID0gZmlsZXNXaXRoU3RhdHMuc29ydCgoYSwgYikgPT4gYi5iaXJ0aFRpbWUuZ2V0VGltZSgpIC0gYS5iaXJ0aFRpbWUuZ2V0VGltZSgpKS5hdCgwKT8uZmlsZVBhdGg7XG4gICAgICAgICAgICBpZiAoIXJvdXRlUGF0aCkgdGhyb3cgbmV3IEVycm9yKGBObyByb3V0ZXMgZm91bmQgaW4gJHtyb3V0ZXNGb2xkZXJ9YCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRlZFBhdGggPSBgLm1pbGtpby8ke2FkYXB0ZXJOYW1lfS8ke3BhdGh9LnRzYDtcbiAgICAgICAgICAgIGF3YWl0IGZzLm91dHB1dEZpbGUoXG4gICAgICAgICAgICAgIGdlbmVyYXRlZFBhdGgsXG4gICAgICAgICAgICAgIGBpbXBvcnQgeyBjcmVhdGUgfSBmcm9tIFwiJHtiYWNrVG9Sb290fWluZGV4LnRzXCI7XG5pbXBvcnQgcm91dGVTY2hlbWEgZnJvbSBcIiR7YmFja1RvUm9vdH0ke3JvdXRlUGF0aC5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIil9XCI7XG5cbmNvbnN0IHdvcmxkID0gY3JlYXRlKHtcbiAgZGV2ZWxvcDogJHtlbnYuQ09PS0JPT0tfREVWRUxPUCA9PT0gXCJFTkFCTEVcIiA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifSxcbn0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25SZXF1ZXN0KGNvbnRleHQpIHtcbiAgcmV0dXJuIGF3YWl0IChhd2FpdCB3b3JsZCkubGlzdGVuZXIuZmV0Y2goe1xuICAgIHJlcXVlc3Q6IGNvbnRleHQucmVxdWVzdCxcbiAgICBlbnY6IGNvbnRleHQuZW52LFxuICAgIGVudk1vZGU6IFwiJHtlbnYuTU9ERSA/PyBcInByb2R1Y3Rpb25cIn1cIixcbiAgICByb3V0ZVNjaGVtYSxcbiAgfSk7XG59YCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlucHV0W3BhdGhdID0gZ2VuZXJhdGVkUGF0aDtcbiAgICAgICAgICB9KSgpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGFza3MpO1xuXG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQHN0ZXAgb3V0cHV0XG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqL1xuICAgICAgY29uc3Qgb3V0cHV0OiBWaXRlT3V0cHV0ID0ge307XG4gICAgICBvdXRwdXQuZW50cnlGaWxlTmFtZXMgPSBcImZ1bmN0aW9ucy9bbmFtZV0uanNcIjtcbiAgICAgIG91dHB1dC5jaHVua0ZpbGVOYW1lcyA9IFwiZnVuY3Rpb25zLy5taWxraW8vW25hbWVdLVtoYXNoXS5qc1wiO1xuICAgICAgb3V0cHV0LmFzc2V0RmlsZU5hbWVzID0gXCJmdW5jdGlvbnMvLm1pbGtpby9bbmFtZV0tW2hhc2hdW2V4dG5hbWVdXCI7XG4gICAgICBvdXRwdXQuc291cmNlbWFwID0gXCJpbmxpbmVcIjtcbiAgICAgIG91dHB1dC5wcmVzZXJ2ZU1vZHVsZXMgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHsgaW5wdXQsIG91dHB1dCB9O1xuICAgIH0sXG4gIH0gc2F0aXNmaWVzIE1pbGtpb0FkYXB0ZXI7XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVXNlckNvbmZpZyB9IGZyb20gXCJ2aXRlXCI7XG5pbXBvcnQgeyBlZGdlT25lQWRhcHRlciB9IGZyb20gXCIuL2VkZ2Utb25lLnRzXCI7XG5cbmV4cG9ydCB0eXBlIFZpdGVJbnB1dCA9IEV4Y2x1ZGU8RXhjbHVkZTxVc2VyQ29uZmlnW1wiYnVpbGRcIl0sIHVuZGVmaW5lZD5bXCJyb2xsdXBPcHRpb25zXCJdLCB1bmRlZmluZWQ+W1wiaW5wdXRcIl07XG5leHBvcnQgdHlwZSBWaXRlT3V0cHV0ID0gRXhjbHVkZTxFeGNsdWRlPFVzZXJDb25maWdbXCJidWlsZFwiXSwgdW5kZWZpbmVkPltcInJvbGx1cE9wdGlvbnNcIl0sIHVuZGVmaW5lZD5bXCJvdXRwdXRcIl07XG5cbmV4cG9ydCB0eXBlIE1pbGtpb0FkYXB0ZXIgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWRhcHRlcjogKG9wdGlvbnM6IHt9KSA9PiBQcm9taXNlPHtcbiAgICBpbnB1dDogVml0ZUlucHV0O1xuICAgIG91dHB1dDogVml0ZU91dHB1dDtcbiAgfT47XG59O1xuXG5leHBvcnQgY29uc3QgYWRhcHRlcnM6IEFycmF5PE1pbGtpb0FkYXB0ZXI+ID0gW2VkZ2VPbmVBZGFwdGVyKCldO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBQ0EsSUFBTSxZQUFZO0FBQUE7QUFBQSxFQUNsQixNQUFNLG9CQUFvQixNQUFNO0FBQUEsSUFFOUIsV0FBWSxDQUFDLEtBQUssVUFBVSxZQUFZO0FBQUEsTUFDdEMsTUFBTSxtQkFBbUIsS0FBSyxVQUFVLFVBQVU7QUFBQSxNQUNsRCxLQUFLLE9BQU87QUFBQSxNQUNaLEtBQUssT0FBTztBQUFBLE1BQ1osSUFBSSxNQUFNO0FBQUEsUUFBbUIsTUFBTSxrQkFBa0IsTUFBTSxX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QUFBQTtBQUFBLEVBQUUsRUFBRSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFFLElBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUFBLElBQUUsS0FBSyxLQUFHLEdBQUUsS0FBSyxLQUFHO0FBQUEsSUFBRSxJQUFJLElBQUUsS0FBSyxlQUFhLE1BQU0sS0FBSyxFQUFDLFFBQU8sS0FBSyxHQUFFLENBQUMsSUFBTztBQUFBLElBQUUsS0FBSyxLQUFHLEdBQUUsS0FBSyxLQUFHLENBQUMsR0FBRSxHQUFFLElBQUUsS0FBSyxHQUFHLElBQUksTUFBSTtBQUFBLE1BQUMsRUFBRSxLQUFHLE1BQUksSUFBRSxJQUFFLEdBQUUsRUFBRSxLQUFHLEdBQUUsRUFBRSxHQUFFLENBQUM7QUFBQSxPQUFHLEtBQUssS0FBRyxPQUFHO0FBQUEsTUFBQyxFQUFFLEtBQUcsRUFBRSxPQUFLLElBQUUsS0FBSyxHQUFHLElBQUksSUFBRSxHQUFFLEVBQUUsR0FBRSxFQUFFLEVBQUU7QUFBQTtBQUFBLElBQUcsSUFBSSxJQUFFLEtBQUssZUFBYSxDQUFDLEdBQUUsTUFBSTtBQUFBLE1BQUMsSUFBRyxJQUFJLE9BQUssYUFBYSxFQUFFLEVBQUUsR0FBRSxFQUFFLEtBQVEsWUFBRyxLQUFHLE1BQUksS0FBRyxHQUFFO0FBQUEsUUFBQyxJQUFJLElBQUUsV0FBVyxNQUFJO0FBQUEsVUFBQyxLQUFLLEdBQUcsQ0FBQyxLQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBRyxRQUFRO0FBQUEsV0FBRyxJQUFFLENBQUM7QUFBQSxRQUFFLEVBQUUsU0FBTyxFQUFFLE1BQU0sR0FBRSxFQUFFLEtBQUc7QUFBQSxNQUFDO0FBQUEsUUFBRyxNQUFJO0FBQUEsSUFBRyxLQUFLLEtBQUcsQ0FBQyxHQUFFLE1BQUk7QUFBQSxNQUFDLElBQUcsRUFBRSxJQUFHO0FBQUEsUUFBQyxJQUFJLElBQUUsRUFBRSxJQUFHLElBQUUsRUFBRTtBQUFBLFFBQUcsSUFBRyxDQUFDLEtBQUcsQ0FBQztBQUFBLFVBQUU7QUFBQSxRQUFPLEVBQUUsTUFBSSxHQUFFLEVBQUUsUUFBTSxHQUFFLEVBQUUsTUFBSSxLQUFHLEVBQUU7QUFBQSxRQUFFLElBQUksSUFBRSxFQUFFLE1BQUk7QUFBQSxRQUFFLEVBQUUsZUFBYSxJQUFFO0FBQUEsTUFBQztBQUFBO0FBQUEsSUFBRyxJQUFJLElBQUUsR0FBRSxJQUFFLE1BQUk7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBSTtBQUFBLE1BQUUsSUFBRyxLQUFLLGdCQUFjLEdBQUU7QUFBQSxRQUFDLElBQUU7QUFBQSxRQUFFLElBQUksSUFBRSxXQUFXLE1BQUksSUFBRSxHQUFFLEtBQUssYUFBYTtBQUFBLFFBQUUsRUFBRSxTQUFPLEVBQUUsTUFBTTtBQUFBLE1BQUM7QUFBQSxNQUFDLE9BQU87QUFBQTtBQUFBLElBQUcsS0FBSyxrQkFBZ0IsT0FBRztBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFJLENBQUM7QUFBQSxNQUFFLElBQUcsTUFBUztBQUFBLFFBQUUsT0FBTztBQUFBLE1BQUUsSUFBSSxJQUFFLEVBQUUsSUFBRyxJQUFFLEVBQUU7QUFBQSxNQUFHLElBQUcsQ0FBQyxLQUFHLENBQUM7QUFBQSxRQUFFLE9BQU8sSUFBRTtBQUFBLE1BQUUsSUFBSSxLQUFHLEtBQUcsRUFBRSxLQUFHO0FBQUEsTUFBRSxPQUFPLElBQUU7QUFBQSxPQUFHLEtBQUssS0FBRyxPQUFHO0FBQUEsTUFBQyxJQUFJLElBQUUsRUFBRSxJQUFHLElBQUUsRUFBRTtBQUFBLE1BQUcsT0FBTSxDQUFDLENBQUMsS0FBRyxDQUFDLENBQUMsTUFBSSxLQUFHLEVBQUUsS0FBRyxJQUFFO0FBQUE7QUFBQTtBQUFBLEVBQUcsS0FBRyxNQUFJO0FBQUEsRUFBRyxLQUFHLE1BQUk7QUFBQSxFQUFHLEtBQUcsTUFBSTtBQUFBLEVBQUcsS0FBRyxNQUFJO0FBQUEsRUFBRyxFQUFFLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQUEsSUFBRSxLQUFLLEtBQUcsR0FBRSxLQUFLLEtBQUcsR0FBRSxLQUFLLEtBQUcsT0FBRztBQUFBLE1BQUMsS0FBSyxNQUFJLEVBQUUsSUFBRyxFQUFFLEtBQUc7QUFBQSxPQUFHLEtBQUssS0FBRyxDQUFDLEdBQUUsR0FBRSxHQUFFLE1BQUk7QUFBQSxNQUFDLElBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRyxLQUFLLEdBQUcsQ0FBQztBQUFBLFVBQUUsT0FBTyxLQUFLO0FBQUEsUUFBb0IsSUFBRyxHQUFFO0FBQUEsVUFBQyxJQUFHLE9BQU8sS0FBRztBQUFBLFlBQVcsTUFBTSxJQUFJLFVBQVUsb0NBQW9DO0FBQUEsVUFBRSxJQUFHLElBQUUsRUFBRSxHQUFFLENBQUMsR0FBRSxDQUFDLEVBQUUsQ0FBQztBQUFBLFlBQUUsTUFBTSxJQUFJLFVBQVUsMERBQTBEO0FBQUEsUUFBQyxFQUFNO0FBQUEsZ0JBQU0sSUFBSSxVQUFVLDJIQUEySDtBQUFBLE1BQUM7QUFBQSxNQUFDLE9BQU87QUFBQSxPQUFHLEtBQUssS0FBRyxDQUFDLEdBQUUsR0FBRSxNQUFJO0FBQUEsTUFBQyxJQUFHLEVBQUUsS0FBRyxHQUFFLEtBQUssSUFBRztBQUFBLFFBQUMsSUFBSSxJQUFFLEtBQUssS0FBRyxFQUFFO0FBQUEsUUFBRyxNQUFLLEtBQUssS0FBRztBQUFBLFVBQUcsS0FBSyxHQUFHLElBQUU7QUFBQSxNQUFDO0FBQUEsTUFBQyxLQUFLLE1BQUksRUFBRSxJQUFHLE1BQUksRUFBRSxZQUFVLEdBQUUsRUFBRSxzQkFBb0IsS0FBSztBQUFBO0FBQUE7QUFBQSxFQUFLLEtBQUcsT0FBRztBQUFBLEVBQUcsS0FBRyxDQUFDLEdBQUUsR0FBRSxNQUFJO0FBQUEsRUFBRyxLQUFHLENBQUMsR0FBRSxHQUFFLEdBQUUsTUFBSTtBQUFBLElBQUMsSUFBRyxLQUFHO0FBQUEsTUFBRSxNQUFNLElBQUksVUFBVSxrRUFBa0U7QUFBQSxJQUFFLE9BQU87QUFBQTtBQUFBLEdBQUksRUFBRSxHQUFFLFlBQVcsSUFBRSxLQUFLLGVBQVksQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFHLEtBQUs7QUFBQSxNQUFHLFNBQVEsSUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsT0FBSyxLQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsT0FBSyxNQUFNLElBQUcsTUFBSSxLQUFLO0FBQUEsUUFBSyxJQUFFLEtBQUssR0FBRztBQUFBO0FBQUEsR0FBSSxFQUFFLEdBQUUsWUFBVyxJQUFFLEtBQUssZUFBWSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUcsS0FBSztBQUFBLE1BQUcsU0FBUSxJQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxPQUFLLEtBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxPQUFLLE1BQU0sSUFBRyxNQUFJLEtBQUs7QUFBQSxRQUFLLElBQUUsS0FBSyxHQUFHO0FBQUE7QUFBQSxFQUFHLEVBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxPQUFPLE1BQVMsYUFBRyxLQUFLLEdBQUcsSUFBSSxLQUFLLEdBQUcsRUFBRSxNQUFJO0FBQUE7QUFBQSxHQUFHLE9BQU8sR0FBRTtBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRztBQUFBLE1BQUUsS0FBSyxHQUFHLE9BQVUsYUFBRyxLQUFLLEdBQUcsT0FBVSxhQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLE1BQUksTUFBSyxDQUFDLEtBQUssR0FBRyxJQUFHLEtBQUssR0FBRyxFQUFFO0FBQUE7QUFBQSxHQUFJLFFBQVEsR0FBRTtBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRztBQUFBLE1BQUUsS0FBSyxHQUFHLE9BQVUsYUFBRyxLQUFLLEdBQUcsT0FBVSxhQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLE1BQUksTUFBSyxDQUFDLEtBQUssR0FBRyxJQUFHLEtBQUssR0FBRyxFQUFFO0FBQUE7QUFBQSxHQUFJLElBQUksR0FBRTtBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsTUFBRyxNQUFTLGFBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsTUFBSSxNQUFNO0FBQUEsSUFBRTtBQUFBO0FBQUEsR0FBRyxLQUFLLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRztBQUFBLE1BQUcsTUFBUyxhQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLE1BQUksTUFBTTtBQUFBLElBQUU7QUFBQTtBQUFBLEdBQUcsTUFBTSxHQUFFO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFBRSxLQUFLLEdBQUcsT0FBVSxhQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLE1BQUksTUFBTSxLQUFLLEdBQUc7QUFBQTtBQUFBLEdBQUssT0FBTyxHQUFFO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFBRSxLQUFLLEdBQUcsT0FBVSxhQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLE1BQUksTUFBTSxLQUFLLEdBQUc7QUFBQTtBQUFBLEdBQUssT0FBTyxTQUFTLEdBQUU7QUFBQSxJQUFDLE9BQU8sS0FBSyxRQUFRO0FBQUE7QUFBQSxHQUFHLE9BQU8sZUFBYTtBQUFBLEVBQVcsSUFBSSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFHLElBQUUsS0FBSyxHQUFHLENBQUMsSUFBRSxFQUFFLHVCQUFxQjtBQUFBLE1BQUUsSUFBRyxNQUFTLGFBQUcsRUFBRSxHQUFFLEtBQUssR0FBRyxJQUFHLElBQUk7QUFBQSxRQUFFLE9BQU8sS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFHLENBQUM7QUFBQSxJQUFDO0FBQUE7QUFBQSxFQUFFLE9BQU8sQ0FBQyxHQUFFLElBQUUsTUFBSztBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUcsSUFBRSxLQUFLLEdBQUcsQ0FBQyxJQUFFLEVBQUUsdUJBQXFCO0FBQUEsTUFBRSxNQUFTLGFBQUcsRUFBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUcsSUFBRyxJQUFJO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRSxRQUFRLENBQUMsR0FBRSxJQUFFLE1BQUs7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFHLElBQUUsS0FBSyxHQUFHLENBQUMsSUFBRSxFQUFFLHVCQUFxQjtBQUFBLE1BQUUsTUFBUyxhQUFHLEVBQUUsS0FBSyxHQUFFLEdBQUUsS0FBSyxHQUFHLElBQUcsSUFBSTtBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsVUFBVSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUU7QUFBQSxJQUFHLFNBQVEsS0FBSyxLQUFLLEdBQUcsRUFBQyxZQUFXLEtBQUUsQ0FBQztBQUFBLE1BQUUsS0FBSyxHQUFHLENBQUMsTUFBSSxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUcsUUFBUSxHQUFFLElBQUU7QUFBQSxJQUFJLE9BQU87QUFBQTtBQUFBLEVBQUUsSUFBSSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQUEsSUFBRSxJQUFHLE1BQVM7QUFBQSxNQUFFO0FBQUEsSUFBTyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUcsSUFBRSxLQUFLLEdBQUcsQ0FBQyxJQUFFLEVBQUUsdUJBQXFCO0FBQUEsSUFBRSxJQUFHLE1BQVM7QUFBQSxNQUFFO0FBQUEsSUFBTyxJQUFJLElBQUUsRUFBQyxPQUFNLEVBQUM7QUFBQSxJQUFFLElBQUcsS0FBSyxNQUFJLEtBQUssSUFBRztBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFHLElBQUUsS0FBSyxHQUFHO0FBQUEsTUFBRyxJQUFHLEtBQUcsR0FBRTtBQUFBLFFBQUMsSUFBSSxJQUFFLEtBQUcsS0FBSyxHQUFHLElBQUksSUFBRTtBQUFBLFFBQUcsRUFBRSxNQUFJLEdBQUUsRUFBRSxRQUFNLEtBQUssSUFBSTtBQUFBLE1BQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxPQUFPLEtBQUssT0FBSyxFQUFFLE9BQUssS0FBSyxHQUFHLEtBQUk7QUFBQTtBQUFBLEVBQUUsSUFBSSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsQ0FBQztBQUFBLElBQUUsU0FBUSxLQUFLLEtBQUssR0FBRyxFQUFDLFlBQVcsS0FBRSxDQUFDLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxJQUFHLElBQUUsS0FBSyxHQUFHLENBQUMsSUFBRSxFQUFFLHVCQUFxQjtBQUFBLE1BQUUsSUFBRyxNQUFTLGFBQUcsTUFBUztBQUFBLFFBQUU7QUFBQSxNQUFTLElBQUksSUFBRSxFQUFDLE9BQU0sRUFBQztBQUFBLE1BQUUsSUFBRyxLQUFLLE1BQUksS0FBSyxJQUFHO0FBQUEsUUFBQyxFQUFFLE1BQUksS0FBSyxHQUFHO0FBQUEsUUFBRyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxRQUFHLEVBQUUsUUFBTSxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUUsQ0FBQztBQUFBLE1BQUM7QUFBQSxNQUFDLEtBQUssT0FBSyxFQUFFLE9BQUssS0FBSyxHQUFHLEtBQUksRUFBRSxRQUFRLENBQUMsR0FBRSxDQUFDLENBQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxPQUFPO0FBQUE7QUFBQSxFQUFFLElBQUksQ0FBQyxHQUFFO0FBQUEsSUFBQyxLQUFLLE1BQU07QUFBQSxJQUFFLFVBQVEsR0FBRSxNQUFLLEdBQUU7QUFBQSxNQUFDLElBQUcsRUFBRSxPQUFNO0FBQUEsUUFBQyxJQUFJLElBQUUsS0FBSyxJQUFJLElBQUUsRUFBRTtBQUFBLFFBQU0sRUFBRSxRQUFNLEtBQUssR0FBRyxJQUFJLElBQUU7QUFBQSxNQUFDO0FBQUEsTUFBQyxLQUFLLEdBQUcsR0FBRSxFQUFFLE9BQU0sQ0FBQztBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsR0FBRyxDQUFDLEdBQUUsR0FBRSxJQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsTUFBSSxRQUFPLElBQUUsRUFBRSxpQkFBZSxDQUFDLElBQU8sY0FBRztBQUFBLElBQUUsRUFBRSxTQUFPLEdBQUUsTUFBSSxFQUFFLEtBQUcsT0FBTSxFQUFFLE1BQUksR0FBRSxNQUFTLGNBQUksRUFBRSxRQUFNLElBQUcsRUFBRSxRQUFNO0FBQUEsSUFBTSxJQUFJLElBQUUsS0FBSyxHQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsSUFBRSxPQUFPLEtBQUcsRUFBRSxrQkFBZ0IsRUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBO0FBQUEsRUFBRSxFQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFBLElBQUMsTUFBSSxLQUFJLElBQUUsS0FBSyxLQUFJLE9BQU0sR0FBRSxnQkFBZSxJQUFFLEtBQUssZ0JBQWUsaUJBQWdCLElBQUUsS0FBSyxpQkFBZ0IsUUFBTyxNQUFHLEdBQUUsSUFBRSxLQUFLLEdBQUcsQ0FBQztBQUFBLElBQUUsSUFBRyxNQUFTO0FBQUEsTUFBRSxPQUFPLE1BQUksRUFBRSxNQUFJLFlBQVcsS0FBSyxPQUFPLENBQUMsR0FBRTtBQUFBLElBQUssTUFBSSxhQUFZLElBQUUsS0FBSyxnQkFBYTtBQUFBLElBQUUsS0FBRyxDQUFDLE1BQUksRUFBRSxRQUFNO0FBQUEsSUFBRyxJQUFJLElBQUUsS0FBSyxHQUFHLEdBQUUsR0FBRSxFQUFFLFFBQU0sR0FBRSxHQUFFLENBQUM7QUFBQSxJQUFFLElBQUcsS0FBSyxnQkFBYyxJQUFFLEtBQUs7QUFBQSxNQUFhLE9BQU8sS0FBSyxHQUFHLEdBQUUsS0FBSyxHQUFFLE1BQUksRUFBRSxNQUFJLFFBQU8sRUFBRSx1QkFBcUIsT0FBSTtBQUFBLElBQUssSUFBSSxJQUFFLEtBQUssT0FBSyxJQUFPLFlBQUUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUFBLElBQUUsSUFBRyxNQUFTO0FBQUEsTUFBRSxJQUFFLEtBQUssT0FBSyxJQUFFLEtBQUssS0FBRyxLQUFLLEdBQUcsV0FBUyxJQUFFLEtBQUssR0FBRyxJQUFJLElBQUUsS0FBSyxPQUFLLEtBQUssS0FBRyxLQUFLLEdBQUcsS0FBRSxJQUFFLEtBQUssSUFBRyxLQUFLLEdBQUcsS0FBRyxHQUFFLEtBQUssR0FBRyxLQUFHLEdBQUUsS0FBSyxHQUFHLElBQUksR0FBRSxDQUFDLEdBQUUsS0FBSyxHQUFHLEtBQUssTUFBSSxHQUFFLEtBQUssR0FBRyxLQUFHLEtBQUssSUFBRyxLQUFLLEtBQUcsR0FBRSxLQUFLLE1BQUssS0FBSyxHQUFHLEdBQUUsR0FBRSxDQUFDLEdBQUUsTUFBSSxFQUFFLE1BQUksUUFBTyxJQUFFLE9BQUcsS0FBSyxNQUFJLENBQUMsS0FBRyxLQUFLLEtBQUssR0FBRSxHQUFFLEtBQUs7QUFBQSxJQUFNO0FBQUEsTUFBQyxLQUFLLEdBQUcsQ0FBQztBQUFBLE1BQUUsSUFBSSxJQUFFLEtBQUssR0FBRztBQUFBLE1BQUcsSUFBRyxNQUFJLEdBQUU7QUFBQSxRQUFDLElBQUcsQ0FBQztBQUFBLFVBQUUsSUFBRyxLQUFLLEdBQUcsQ0FBQyxHQUFFO0FBQUEsWUFBQyxNQUFJLEtBQUcsRUFBRSxrQkFBa0IsTUFBTSxJQUFJLE1BQU0sVUFBVSxDQUFDO0FBQUEsWUFBRSxNQUFJLHNCQUFxQixNQUFHO0FBQUEsWUFBRSxNQUFTLGFBQUcsTUFBSSxNQUFJLEtBQUssTUFBSSxLQUFLLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxLQUFLLE1BQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFFLEdBQUUsS0FBSyxDQUFDO0FBQUEsVUFBRSxFQUFNO0FBQUEsaUJBQUssTUFBSSxLQUFLLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxLQUFLLE1BQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFFLEdBQUUsS0FBSyxDQUFDO0FBQUEsUUFBRSxJQUFHLEtBQUssR0FBRyxDQUFDLEdBQUUsS0FBSyxHQUFHLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBSyxHQUFHLEtBQUcsR0FBRSxDQUFDLEdBQUU7QUFBQSxVQUFDLElBQUksSUFBRSxLQUFHLEtBQUssR0FBRyxDQUFDLElBQUUsRUFBRSx1QkFBcUIsR0FBRSxJQUFFLE1BQVMsWUFBRSxRQUFNLE1BQUksSUFBRSxZQUFVO0FBQUEsVUFBUyxNQUFJLEVBQUUsTUFBSSxHQUFFLE1BQVMsY0FBSSxFQUFFLFdBQVMsS0FBSSxLQUFLLE1BQUksS0FBSyxXQUFXLEdBQUUsR0FBRSxDQUFDO0FBQUEsUUFBQztBQUFBLE1BQUMsRUFBTTtBQUFBLGNBQUksTUFBSSxFQUFFLE1BQUksV0FBVSxLQUFLLE1BQUksS0FBSyxXQUFXLEdBQUUsR0FBRSxRQUFRO0FBQUE7QUFBQSxJQUFHLElBQUcsTUFBSSxLQUFHLENBQUMsS0FBSyxNQUFJLEtBQUssR0FBRyxHQUFFLEtBQUssT0FBSyxLQUFHLEtBQUssR0FBRyxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsS0FBSyxHQUFHLEdBQUUsQ0FBQyxJQUFHLENBQUMsS0FBRyxLQUFLLE1BQUksS0FBSyxJQUFHO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxJQUFHO0FBQUEsTUFBRSxNQUFLLElBQUUsR0FBRyxNQUFNO0FBQUEsUUFBRyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsT0FBTztBQUFBO0FBQUEsRUFBSyxHQUFHLEdBQUU7QUFBQSxJQUFDLElBQUc7QUFBQSxNQUFDLE1BQUssS0FBSyxNQUFJO0FBQUEsUUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLEtBQUs7QUFBQSxRQUFJLElBQUcsS0FBSyxHQUFHLElBQUUsR0FBRSxLQUFLLEdBQUcsQ0FBQyxHQUFFO0FBQUEsVUFBQyxJQUFHLEVBQUU7QUFBQSxZQUFxQixPQUFPLEVBQUU7QUFBQSxRQUFvQixFQUFNLFNBQUcsTUFBUztBQUFBLFVBQUUsT0FBTztBQUFBLE1BQUM7QUFBQSxjQUFFO0FBQUEsTUFBUSxJQUFHLEtBQUssTUFBSSxLQUFLLElBQUc7QUFBQSxRQUFDLElBQUksSUFBRSxLQUFLLElBQUc7QUFBQSxRQUFFLE1BQUssSUFBRSxHQUFHLE1BQU07QUFBQSxVQUFHLEtBQUssS0FBSyxHQUFHLENBQUM7QUFBQSxNQUFDO0FBQUE7QUFBQTtBQUFBLEVBQUcsRUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLElBQUcsSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxJQUFHLElBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxJQUFFLEtBQUcsRUFBRSxrQkFBa0IsTUFBTSxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQUEsSUFBRSxJQUFJLElBQUUsSUFBRSxFQUFFLHVCQUFxQjtBQUFBLElBQUUsUUFBTyxLQUFLLE1BQUksS0FBSyxPQUFLLE1BQVMsY0FBSSxLQUFLLE1BQUksS0FBSyxLQUFLLEdBQUUsR0FBRSxPQUFPLEdBQUUsS0FBSyxNQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRSxHQUFFLE9BQU8sQ0FBQyxJQUFHLEtBQUssR0FBRyxDQUFDLEdBQUUsS0FBSyxLQUFLLE9BQUssYUFBYSxLQUFLLEdBQUcsRUFBRSxHQUFFLEtBQUssR0FBRyxLQUFRLFlBQUcsTUFBSSxLQUFLLEdBQUcsS0FBUSxXQUFFLEtBQUssR0FBRyxLQUFRLFdBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFHLEtBQUssT0FBSyxLQUFHLEtBQUssS0FBRyxLQUFLLEtBQUcsR0FBRSxLQUFLLEdBQUcsU0FBTyxLQUFHLEtBQUssS0FBRyxLQUFLLEdBQUcsSUFBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUUsS0FBSyxNQUFLO0FBQUE7QUFBQSxFQUFFLEdBQUcsQ0FBQyxHQUFFLElBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxNQUFJLFFBQU8sSUFBRSxFQUFFLGlCQUFlLENBQUMsSUFBTyxjQUFHO0FBQUEsSUFBRSxFQUFFLFNBQU8sR0FBRSxNQUFJLEVBQUUsS0FBRyxPQUFNLEVBQUUsTUFBSSxHQUFFLEVBQUUsUUFBTTtBQUFBLElBQU0sSUFB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QUFFO0FBQUEsSUFBQyxLQUFLLEdBQUcsS0FBRyxHQUFFLEtBQUssR0FBRyxLQUFHO0FBQUE7QUFBQSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxNQUFJLEtBQUssT0FBSyxNQUFJLEtBQUssS0FBRyxLQUFLLEtBQUcsS0FBSyxHQUFHLEtBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFHLEtBQUssR0FBRyxFQUFFLEdBQUUsS0FBSyxHQUFHLEtBQUssSUFBRyxDQUFDLEdBQUUsS0FBSyxLQUFHO0FBQUE7QUFBQSxFQUFHLE1BQU0sQ0FBQyxHQUFFO0FBQUEsSUFBQyxPQUFPLEtBQUssR0FBRyxHQUFFLFFBQVE7QUFBQTtBQUFBLEVBQUUsRUFBRSxDQUFDLEdBQUUsR0FBRTtBQUFBLElBQUMsRUFBRSxrQkFBZ0IsRUFBRSxRQUFRLEVBQUMsSUFBRyxVQUFTLFFBQU8sR0FBRSxLQUFJLEdBQUUsT0FBTSxLQUFJLENBQUM7QUFBQSxJQUFFLElBQUksSUFBRTtBQUFBLElBQUcsSUFBRyxLQUFLLE9BQUssR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFJLENBQUM7QUFBQSxNQUFFLElBQUcsTUFBUztBQUFBLFFBQUUsSUFBRyxLQUFLLEtBQUssT0FBSyxhQUFhLEtBQUssS0FBSyxFQUFFLEdBQUUsS0FBSyxHQUFHLEtBQVEsWUFBRyxJQUFFLE1BQUcsS0FBSyxPQUFLO0FBQUEsVUFBRSxLQUFLLEdBQUcsQ0FBQztBQUFBLFFBQU07QUFBQSxVQUFDLEtBQUssR0FBRyxDQUFDO0FBQUEsVUFBRSxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsVUFBRyxJQUFHLEtBQUssR0FBRyxDQUFDLElBQUUsRUFBRSxrQkFBa0IsTUFBTSxJQUFJLE1BQU0sU0FBUyxDQUFDLEtBQUcsS0FBSyxNQUFJLEtBQUssUUFBTSxLQUFLLE1BQUksS0FBSyxLQUFLLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBSyxNQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRSxHQUFFLENBQUMsQ0FBQyxJQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRSxLQUFLLEdBQUcsS0FBUSxXQUFFLEtBQUssR0FBRyxLQUFRLFdBQUUsTUFBSSxLQUFLO0FBQUEsWUFBRyxLQUFLLEtBQUcsS0FBSyxHQUFHO0FBQUEsVUFBUSxTQUFHLE1BQUksS0FBSztBQUFBLFlBQUcsS0FBSyxLQUFHLEtBQUssR0FBRztBQUFBLFVBQU87QUFBQSxZQUFDLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxZQUFHLEtBQUssR0FBRyxLQUFHLEtBQUssR0FBRztBQUFBLFlBQUcsSUFBSSxJQUFFLEtBQUssR0FBRztBQUFBLFlBQUcsS0FBSyxHQUFHLEtBQUcsS0FBSyxHQUFHO0FBQUE7QUFBQSxVQUFHLEtBQUssTUFBSyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQUE7QUFBQSxJQUFFO0FBQUEsSUFBQyxJQUFHLEtBQUssTUFBSSxLQUFLLElBQUksUUFBTztBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssSUFBRztBQUFBLE1BQUUsTUFBSyxJQUFFLEdBQUcsTUFBTTtBQUFBLFFBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUFBLElBQUM7QUFBQSxJQUFDLE9BQU87QUFBQTtBQUFBLEVBQUUsS0FBSyxHQUFFO0FBQUEsSUFBQyxPQUFPLEtBQUssR0FBRyxRQUFRO0FBQUE7QUFBQSxFQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHLEVBQUMsWUFBVyxLQUFFLENBQUMsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRztBQUFBLE1BQUcsSUFBRyxLQUFLLEdBQUcsQ0FBQztBQUFBLFFBQUUsRUFBRSxrQkFBa0IsTUFBTSxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBQUEsTUFBTTtBQUFBLFFBQUMsSUFBSSxJQUFFLEtBQUssR0FBRztBQUFBLFFBQUcsS0FBSyxNQUFJLEtBQUssS0FBSyxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUssTUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUUsR0FBRSxDQUFDLENBQUM7QUFBQTtBQUFBLElBQUU7QUFBQSxJQUFDLElBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRSxLQUFLLEdBQUcsS0FBVSxTQUFDLEdBQUUsS0FBSyxHQUFHLEtBQVUsU0FBQyxHQUFFLEtBQUssTUFBSSxLQUFLLElBQUc7QUFBQSxNQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQUEsTUFBRSxTQUFRLEtBQUssS0FBSyxNQUFJLENBQUM7QUFBQSxRQUFFLE1BQVMsYUFBRyxhQUFhLENBQUM7QUFBQSxNQUFFLEtBQUssSUFBSSxLQUFVLFNBQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxJQUFHLEtBQUssTUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUUsS0FBSyxLQUFHLEdBQUUsS0FBSyxLQUFHLEdBQUUsS0FBSyxHQUFHLFNBQU8sR0FBRSxLQUFLLEtBQUcsR0FBRSxLQUFLLEtBQUcsR0FBRSxLQUFLLE1BQUksS0FBSyxJQUFHO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxJQUFHO0FBQUEsTUFBRSxNQUFLLElBQUUsR0FBRyxNQUFNO0FBQUEsUUFBRyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFBQztBQUFBO0FBQUU7OztBQ0Nyd2tCO0FBQ0E7QUFDQSwrQkFBb0Isc0RBQWlEO0FBQ3JFO0FBSUE7OztBQ0ZBO0FBQ0E7QUFDQTtBQVJBLElBQU0sT0FBTyxPQUFPLFlBQVksWUFBWSxVQUN0QyxVQUNBO0FBQUEsRUFDRSxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQ1o7QUFRRyxJQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUM3QixPQUFPLE1BQU0sYUFDWixhQUFhLFlBQ1YsYUFBYSxVQUNiLFdBQVcsQ0FBQyxLQUNaLFdBQVcsQ0FBQztBQUliLElBQU0sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQy9CLE9BQU8sTUFBTSxZQUNiLGFBQWEsZ0JBQ2IsT0FBTyxFQUFFLFNBQVMsY0FFbEIsRUFBRSxTQUFTLE9BQU8sU0FBUyxVQUFVO0FBSWxDLElBQU0sYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQy9CLE9BQU8sTUFBTSxZQUNiLGFBQWEsZ0JBQ2IsT0FBTyxFQUFFLFVBQVUsY0FDbkIsT0FBTyxFQUFFLFFBQVE7QUFDckIsSUFBTSxNQUFNLE9BQU8sS0FBSztBQUN4QixJQUFNLGlCQUFpQixPQUFPLGNBQWM7QUFDNUMsSUFBTSxjQUFjLE9BQU8sWUFBWTtBQUN2QyxJQUFNLGVBQWUsT0FBTyxhQUFhO0FBQ3pDLElBQU0sZ0JBQWdCLE9BQU8sY0FBYztBQUMzQyxJQUFNLFNBQVMsT0FBTyxRQUFRO0FBQzlCLElBQU0sT0FBTyxPQUFPLE1BQU07QUFDMUIsSUFBTSxRQUFRLE9BQU8sT0FBTztBQUM1QixJQUFNLGFBQWEsT0FBTyxZQUFZO0FBQ3RDLElBQU0sV0FBVyxPQUFPLFVBQVU7QUFDbEMsSUFBTSxVQUFVLE9BQU8sU0FBUztBQUNoQyxJQUFNLFVBQVUsT0FBTyxTQUFTO0FBQ2hDLElBQU0sU0FBUyxPQUFPLFFBQVE7QUFDOUIsSUFBTSxTQUFTLE9BQU8sUUFBUTtBQUM5QixJQUFNLFNBQVMsT0FBTyxRQUFRO0FBQzlCLElBQU0sUUFBUSxPQUFPLE9BQU87QUFDNUIsSUFBTSxlQUFlLE9BQU8sY0FBYztBQUMxQyxJQUFNLGFBQWEsT0FBTyxZQUFZO0FBQ3RDLElBQU0sY0FBYyxPQUFPLGFBQWE7QUFDeEMsSUFBTSxhQUFhLE9BQU8sWUFBWTtBQUV0QyxJQUFNLFlBQVksT0FBTyxXQUFXO0FBRXBDLElBQU0sUUFBUSxPQUFPLE9BQU87QUFDNUIsSUFBTSxXQUFXLE9BQU8sVUFBVTtBQUNsQyxJQUFNLFVBQVUsT0FBTyxTQUFTO0FBQ2hDLElBQU0sV0FBVyxPQUFPLFVBQVU7QUFDbEMsSUFBTSxRQUFRLE9BQU8sT0FBTztBQUM1QixJQUFNLFFBQVEsT0FBTyxPQUFPO0FBQzVCLElBQU0sVUFBVSxPQUFPLFNBQVM7QUFDaEMsSUFBTSxTQUFTLE9BQU8sUUFBUTtBQUM5QixJQUFNLGdCQUFnQixPQUFPLGVBQWU7QUFDNUMsSUFBTSxZQUFZLE9BQU8sV0FBVztBQUNwQyxJQUFNLFFBQVEsQ0FBQyxPQUFPLFFBQVEsUUFBUSxFQUFFLEtBQUssRUFBRTtBQUMvQyxJQUFNLFVBQVUsQ0FBQyxPQUFPLEdBQUc7QUFDM0IsSUFBTSxXQUFXLENBQUMsT0FBTyxPQUFPLFNBQVMsT0FBTyxZQUFZLE9BQU87QUFDbkUsSUFBTSxvQkFBb0IsQ0FBQyxNQUFNLGFBQWEsZUFDekMsQ0FBQyxDQUFDLEtBQ0MsT0FBTyxNQUFNLFlBQ2IsRUFBRSxlQUNGLEVBQUUsWUFBWSxTQUFTLGlCQUN2QixFQUFFLGNBQWM7QUFDeEIsSUFBTSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxTQUFTLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQztBQUFBO0FBTTVFLE1BQU0sS0FBSztBQUFBLEVBQ1A7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLFdBQVcsQ0FBQyxLQUFLLE1BQU0sTUFBTTtBQUFBLElBQ3pCLEtBQUssTUFBTTtBQUFBLElBQ1gsS0FBSyxPQUFPO0FBQUEsSUFDWixLQUFLLE9BQU87QUFBQSxJQUNaLEtBQUssVUFBVSxNQUFNLElBQUksUUFBUTtBQUFBLElBQ2pDLEtBQUssS0FBSyxHQUFHLFNBQVMsS0FBSyxPQUFPO0FBQUE7QUFBQSxFQUV0QyxNQUFNLEdBQUc7QUFBQSxJQUNMLEtBQUssS0FBSyxlQUFlLFNBQVMsS0FBSyxPQUFPO0FBQUE7QUFBQSxFQUlsRCxXQUFXLENBQUMsS0FBSztBQUFBLEVBRWpCLEdBQUcsR0FBRztBQUFBLElBQ0YsS0FBSyxPQUFPO0FBQUEsSUFDWixJQUFJLEtBQUssS0FBSztBQUFBLE1BQ1YsS0FBSyxLQUFLLElBQUk7QUFBQTtBQUUxQjtBQUFBO0FBT0EsTUFBTSx3QkFBd0IsS0FBSztBQUFBLEVBQy9CLE1BQU0sR0FBRztBQUFBLElBQ0wsS0FBSyxJQUFJLGVBQWUsU0FBUyxLQUFLLFdBQVc7QUFBQSxJQUNqRCxNQUFNLE9BQU87QUFBQTtBQUFBLEVBRWpCLFdBQVcsQ0FBQyxLQUFLLE1BQU0sTUFBTTtBQUFBLElBQ3pCLE1BQU0sS0FBSyxNQUFNLElBQUk7QUFBQSxJQUNyQixLQUFLLGNBQWMsQ0FBQyxPQUFPLEtBQUssS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUFBLElBQ3JELElBQUksR0FBRyxTQUFTLEtBQUssV0FBVztBQUFBO0FBRXhDO0FBQ0EsSUFBTSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQ3ZDLElBQU0sb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsYUFBYTtBQUFBO0FBWTFFLE1BQU0saUJBQWlCLGFBQWE7QUFBQSxHQUN0QyxXQUFXO0FBQUEsR0FDWCxVQUFVO0FBQUEsR0FDVixTQUFTLENBQUM7QUFBQSxHQUNWLFVBQVUsQ0FBQztBQUFBLEdBQ1g7QUFBQSxHQUNBO0FBQUEsR0FDQTtBQUFBLEdBQ0E7QUFBQSxHQUNBLE9BQU87QUFBQSxHQUNQLGVBQWU7QUFBQSxHQUNmLGdCQUFnQjtBQUFBLEdBQ2hCLFVBQVU7QUFBQSxHQUNWLGlCQUFpQjtBQUFBLEdBQ2pCLGdCQUFnQjtBQUFBLEdBQ2hCLGFBQWE7QUFBQSxHQUNiO0FBQUEsR0FDQSxXQUFXO0FBQUEsR0FDWCxpQkFBaUI7QUFBQSxHQUNqQixhQUFhO0FBQUEsRUFJZCxXQUFXO0FBQUEsRUFJWCxXQUFXO0FBQUEsRUFPWCxXQUFXLElBQUksTUFBTTtBQUFBLElBQ2pCLE1BQU0sVUFBVyxLQUFLLE1BQ2xCLENBQUM7QUFBQSxJQUNMLE1BQU07QUFBQSxJQUNOLElBQUksUUFBUSxjQUFjLE9BQU8sUUFBUSxhQUFhLFVBQVU7QUFBQSxNQUM1RCxNQUFNLElBQUksVUFBVSxrREFBa0Q7QUFBQSxJQUMxRTtBQUFBLElBQ0EsSUFBSSxvQkFBb0IsT0FBTyxHQUFHO0FBQUEsTUFDOUIsS0FBSyxjQUFjO0FBQUEsTUFDbkIsS0FBSyxZQUFZO0FBQUEsSUFDckIsRUFDSyxTQUFJLGtCQUFrQixPQUFPLEdBQUc7QUFBQSxNQUNqQyxLQUFLLFlBQVksUUFBUTtBQUFBLE1BQ3pCLEtBQUssY0FBYztBQUFBLElBQ3ZCLEVBQ0s7QUFBQSxNQUNELEtBQUssY0FBYztBQUFBLE1BQ25CLEtBQUssWUFBWTtBQUFBO0FBQUEsSUFFckIsS0FBSyxTQUFTLENBQUMsQ0FBQyxRQUFRO0FBQUEsSUFDeEIsS0FBSyxXQUFXLEtBQUssWUFDZixJQUFJLGNBQWMsS0FBSyxTQUFTLElBQ2hDO0FBQUEsSUFFTixJQUFJLFdBQVcsUUFBUSxzQkFBc0IsTUFBTTtBQUFBLE1BQy9DLE9BQU8sZUFBZSxNQUFNLFVBQVUsRUFBRSxLQUFLLE1BQU0sS0FBSyxRQUFRLENBQUM7QUFBQSxJQUNyRTtBQUFBLElBRUEsSUFBSSxXQUFXLFFBQVEscUJBQXFCLE1BQU07QUFBQSxNQUM5QyxPQUFPLGVBQWUsTUFBTSxTQUFTLEVBQUUsS0FBSyxNQUFNLEtBQUssT0FBTyxDQUFDO0FBQUEsSUFDbkU7QUFBQSxJQUNBLFFBQVEsV0FBVztBQUFBLElBQ25CLElBQUksUUFBUTtBQUFBLE1BQ1IsS0FBSyxVQUFVO0FBQUEsTUFDZixJQUFJLE9BQU8sU0FBUztBQUFBLFFBQ2hCLEtBQUssT0FBTztBQUFBLE1BQ2hCLEVBQ0s7QUFBQSxRQUNELE9BQU8saUJBQWlCLFNBQVMsTUFBTSxLQUFLLE9BQU8sQ0FBQztBQUFBO0FBQUEsSUFFNUQ7QUFBQTtBQUFBLE1BV0EsWUFBWSxHQUFHO0FBQUEsSUFDZixPQUFPLEtBQUs7QUFBQTtBQUFBLE1BS1osUUFBUSxHQUFHO0FBQUEsSUFDWCxPQUFPLEtBQUs7QUFBQTtBQUFBLE1BS1osUUFBUSxDQUFDLE1BQU07QUFBQSxJQUNmLE1BQU0sSUFBSSxNQUFNLDRDQUE0QztBQUFBO0FBQUEsRUFLaEUsV0FBVyxDQUFDLE1BQU07QUFBQSxJQUNkLE1BQU0sSUFBSSxNQUFNLDRDQUE0QztBQUFBO0FBQUEsTUFLNUQsVUFBVSxHQUFHO0FBQUEsSUFDYixPQUFPLEtBQUs7QUFBQTtBQUFBLE1BS1osVUFBVSxDQUFDLEtBQUs7QUFBQSxJQUNoQixNQUFNLElBQUksTUFBTSw4Q0FBOEM7QUFBQTtBQUFBLE9BSzdELFFBQVEsR0FBRztBQUFBLElBQ1osT0FBTyxLQUFLO0FBQUE7QUFBQSxPQVNYLFFBQVEsQ0FBQyxHQUFHO0FBQUEsSUFDYixLQUFLLFNBQVMsS0FBSyxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUEsR0FHbEMsTUFBTSxHQUFHO0FBQUEsSUFDTixLQUFLLFdBQVc7QUFBQSxJQUNoQixLQUFLLEtBQUssU0FBUyxLQUFLLFNBQVMsTUFBTTtBQUFBLElBQ3ZDLEtBQUssUUFBUSxLQUFLLFNBQVMsTUFBTTtBQUFBO0FBQUEsTUFLakMsT0FBTyxHQUFHO0FBQUEsSUFDVixPQUFPLEtBQUs7QUFBQTtBQUFBLE1BTVosT0FBTyxDQUFDLEdBQUc7QUFBQSxFQUNmLEtBQUssQ0FBQyxPQUFPLFVBQVUsSUFBSTtBQUFBLElBQ3ZCLElBQUksS0FBSztBQUFBLE1BQ0wsT0FBTztBQUFBLElBQ1gsSUFBSSxLQUFLO0FBQUEsTUFDTCxNQUFNLElBQUksTUFBTSxpQkFBaUI7QUFBQSxJQUNyQyxJQUFJLEtBQUssWUFBWTtBQUFBLE1BQ2pCLEtBQUssS0FBSyxTQUFTLE9BQU8sT0FBTyxJQUFJLE1BQU0sZ0RBQWdELEdBQUcsRUFBRSxNQUFNLHVCQUF1QixDQUFDLENBQUM7QUFBQSxNQUMvSCxPQUFPO0FBQUEsSUFDWDtBQUFBLElBQ0EsSUFBSSxPQUFPLGFBQWEsWUFBWTtBQUFBLE1BQ2hDLEtBQUs7QUFBQSxNQUNMLFdBQVc7QUFBQSxJQUNmO0FBQUEsSUFDQSxJQUFJLENBQUM7QUFBQSxNQUNELFdBQVc7QUFBQSxJQUNmLE1BQU0sS0FBSyxLQUFLLFNBQVMsUUFBUTtBQUFBLElBS2pDLElBQUksQ0FBQyxLQUFLLGVBQWUsQ0FBQyxPQUFPLFNBQVMsS0FBSyxHQUFHO0FBQUEsTUFDOUMsSUFBSSxrQkFBa0IsS0FBSyxHQUFHO0FBQUEsUUFFMUIsUUFBUSxPQUFPLEtBQUssTUFBTSxRQUFRLE1BQU0sWUFBWSxNQUFNLFVBQVU7QUFBQSxNQUN4RSxFQUNLLFNBQUksa0JBQWtCLEtBQUssR0FBRztBQUFBLFFBRS9CLFFBQVEsT0FBTyxLQUFLLEtBQUs7QUFBQSxNQUM3QixFQUNLLFNBQUksT0FBTyxVQUFVLFVBQVU7QUFBQSxRQUNoQyxNQUFNLElBQUksTUFBTSxzREFBc0Q7QUFBQSxNQUMxRTtBQUFBLElBQ0o7QUFBQSxJQUdBLElBQUksS0FBSyxhQUFhO0FBQUEsTUFHbEIsSUFBSSxLQUFLLFlBQVksS0FBSyxrQkFBa0I7QUFBQSxRQUN4QyxLQUFLLE9BQU8sSUFBSTtBQUFBLE1BRXBCLElBQUksS0FBSztBQUFBLFFBQ0wsS0FBSyxLQUFLLFFBQVEsS0FBSztBQUFBLE1BRXZCO0FBQUEsYUFBSyxZQUFZLEtBQUs7QUFBQSxNQUMxQixJQUFJLEtBQUssa0JBQWtCO0FBQUEsUUFDdkIsS0FBSyxLQUFLLFVBQVU7QUFBQSxNQUN4QixJQUFJO0FBQUEsUUFDQSxHQUFHLEVBQUU7QUFBQSxNQUNULE9BQU8sS0FBSztBQUFBLElBQ2hCO0FBQUEsSUFHQSxJQUFJLENBQUMsTUFBTSxRQUFRO0FBQUEsTUFDZixJQUFJLEtBQUssa0JBQWtCO0FBQUEsUUFDdkIsS0FBSyxLQUFLLFVBQVU7QUFBQSxNQUN4QixJQUFJO0FBQUEsUUFDQSxHQUFHLEVBQUU7QUFBQSxNQUNULE9BQU8sS0FBSztBQUFBLElBQ2hCO0FBQUEsSUFHQSxJQUFJLE9BQU8sVUFBVSxZQUVqQixFQUFFLGFBQWEsS0FBSyxhQUFhLENBQUMsS0FBSyxVQUFVLFdBQVc7QUFBQSxNQUU1RCxRQUFRLE9BQU8sS0FBSyxPQUFPLFFBQVE7QUFBQSxJQUN2QztBQUFBLElBQ0EsSUFBSSxPQUFPLFNBQVMsS0FBSyxLQUFLLEtBQUssV0FBVztBQUFBLE1BRTFDLFFBQVEsS0FBSyxTQUFTLE1BQU0sS0FBSztBQUFBLElBQ3JDO0FBQUEsSUFFQSxJQUFJLEtBQUssWUFBWSxLQUFLLGtCQUFrQjtBQUFBLE1BQ3hDLEtBQUssT0FBTyxJQUFJO0FBQUEsSUFDcEIsSUFBSSxLQUFLO0FBQUEsTUFDTCxLQUFLLEtBQUssUUFBUSxLQUFLO0FBQUEsSUFFdkI7QUFBQSxXQUFLLFlBQVksS0FBSztBQUFBLElBQzFCLElBQUksS0FBSyxrQkFBa0I7QUFBQSxNQUN2QixLQUFLLEtBQUssVUFBVTtBQUFBLElBQ3hCLElBQUk7QUFBQSxNQUNBLEdBQUcsRUFBRTtBQUFBLElBQ1QsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQWVoQixJQUFJLENBQUMsR0FBRztBQUFBLElBQ0osSUFBSSxLQUFLO0FBQUEsTUFDTCxPQUFPO0FBQUEsSUFDWCxLQUFLLGFBQWE7QUFBQSxJQUNsQixJQUFJLEtBQUssa0JBQWtCLEtBQ3ZCLE1BQU0sS0FDTCxLQUFLLElBQUksS0FBSyxlQUFnQjtBQUFBLE1BQy9CLEtBQUssZ0JBQWdCO0FBQUEsTUFDckIsT0FBTztBQUFBLElBQ1g7QUFBQSxJQUNBLElBQUksS0FBSztBQUFBLE1BQ0wsSUFBSTtBQUFBLElBQ1IsSUFBSSxLQUFLLFFBQVEsU0FBUyxLQUFLLENBQUMsS0FBSyxhQUFhO0FBQUEsTUFHOUMsS0FBSyxVQUFVO0FBQUEsUUFDVixLQUFLLFlBQ0EsS0FBSyxRQUFRLEtBQUssRUFBRSxJQUNwQixPQUFPLE9BQU8sS0FBSyxTQUFTLEtBQUssYUFBYTtBQUFBLE1BQ3hEO0FBQUEsSUFDSjtBQUFBLElBQ0EsTUFBTSxNQUFNLEtBQUssTUFBTSxLQUFLLE1BQU0sS0FBSyxRQUFRLEVBQUU7QUFBQSxJQUNqRCxLQUFLLGdCQUFnQjtBQUFBLElBQ3JCLE9BQU87QUFBQTtBQUFBLEdBRVYsS0FBSyxDQUFDLEdBQUcsT0FBTztBQUFBLElBQ2IsSUFBSSxLQUFLO0FBQUEsTUFDTCxLQUFLLGFBQWE7QUFBQSxJQUNqQjtBQUFBLE1BQ0QsTUFBTSxJQUFJO0FBQUEsTUFDVixJQUFJLE1BQU0sRUFBRSxVQUFVLE1BQU07QUFBQSxRQUN4QixLQUFLLGFBQWE7QUFBQSxNQUNqQixTQUFJLE9BQU8sTUFBTSxVQUFVO0FBQUEsUUFDNUIsS0FBSyxRQUFRLEtBQUssRUFBRSxNQUFNLENBQUM7QUFBQSxRQUMzQixRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUM7QUFBQSxRQUNwQixLQUFLLGlCQUFpQjtBQUFBLE1BQzFCLEVBQ0s7QUFBQSxRQUNELEtBQUssUUFBUSxLQUFLLEVBQUUsU0FBUyxDQUFDO0FBQUEsUUFDOUIsUUFBUSxFQUFFLFNBQVMsR0FBRyxDQUFDO0FBQUEsUUFDdkIsS0FBSyxpQkFBaUI7QUFBQTtBQUFBO0FBQUEsSUFHOUIsS0FBSyxLQUFLLFFBQVEsS0FBSztBQUFBLElBQ3ZCLElBQUksQ0FBQyxLQUFLLFFBQVEsVUFBVSxDQUFDLEtBQUs7QUFBQSxNQUM5QixLQUFLLEtBQUssT0FBTztBQUFBLElBQ3JCLE9BQU87QUFBQTtBQUFBLEVBRVgsR0FBRyxDQUFDLE9BQU8sVUFBVSxJQUFJO0FBQUEsSUFDckIsSUFBSSxPQUFPLFVBQVUsWUFBWTtBQUFBLE1BQzdCLEtBQUs7QUFBQSxNQUNMLFFBQVE7QUFBQSxJQUNaO0FBQUEsSUFDQSxJQUFJLE9BQU8sYUFBYSxZQUFZO0FBQUEsTUFDaEMsS0FBSztBQUFBLE1BQ0wsV0FBVztBQUFBLElBQ2Y7QUFBQSxJQUNBLElBQUksVUFBVTtBQUFBLE1BQ1YsS0FBSyxNQUFNLE9BQU8sUUFBUTtBQUFBLElBQzlCLElBQUk7QUFBQSxNQUNBLEtBQUssS0FBSyxPQUFPLEVBQUU7QUFBQSxJQUN2QixLQUFLLE9BQU87QUFBQSxJQUNaLEtBQUssV0FBVztBQUFBLElBS2hCLElBQUksS0FBSyxZQUFZLENBQUMsS0FBSztBQUFBLE1BQ3ZCLEtBQUssZ0JBQWdCO0FBQUEsSUFDekIsT0FBTztBQUFBO0FBQUEsR0FHVixPQUFPLEdBQUc7QUFBQSxJQUNQLElBQUksS0FBSztBQUFBLE1BQ0w7QUFBQSxJQUNKLElBQUksQ0FBQyxLQUFLLGtCQUFrQixDQUFDLEtBQUssT0FBTyxRQUFRO0FBQUEsTUFDN0MsS0FBSyxhQUFhO0FBQUEsSUFDdEI7QUFBQSxJQUNBLEtBQUssVUFBVTtBQUFBLElBQ2YsS0FBSyxXQUFXO0FBQUEsSUFDaEIsS0FBSyxLQUFLLFFBQVE7QUFBQSxJQUNsQixJQUFJLEtBQUssUUFBUTtBQUFBLE1BQ2IsS0FBSyxPQUFPO0FBQUEsSUFDWCxTQUFJLEtBQUs7QUFBQSxNQUNWLEtBQUssZ0JBQWdCO0FBQUEsSUFFckI7QUFBQSxXQUFLLEtBQUssT0FBTztBQUFBO0FBQUEsRUFXekIsTUFBTSxHQUFHO0FBQUEsSUFDTCxPQUFPLEtBQUssUUFBUTtBQUFBO0FBQUEsRUFLeEIsS0FBSyxHQUFHO0FBQUEsSUFDSixLQUFLLFdBQVc7QUFBQSxJQUNoQixLQUFLLFVBQVU7QUFBQSxJQUNmLEtBQUssYUFBYTtBQUFBO0FBQUEsTUFLbEIsU0FBUyxHQUFHO0FBQUEsSUFDWixPQUFPLEtBQUs7QUFBQTtBQUFBLE1BTVosT0FBTyxHQUFHO0FBQUEsSUFDVixPQUFPLEtBQUs7QUFBQTtBQUFBLE1BS1osTUFBTSxHQUFHO0FBQUEsSUFDVCxPQUFPLEtBQUs7QUFBQTtBQUFBLEdBRWYsV0FBVyxDQUFDLE9BQU87QUFBQSxJQUNoQixJQUFJLEtBQUs7QUFBQSxNQUNMLEtBQUssaUJBQWlCO0FBQUEsSUFFdEI7QUFBQSxXQUFLLGlCQUFpQixNQUFNO0FBQUEsSUFDaEMsS0FBSyxRQUFRLEtBQUssS0FBSztBQUFBO0FBQUEsR0FFMUIsWUFBWSxHQUFHO0FBQUEsSUFDWixJQUFJLEtBQUs7QUFBQSxNQUNMLEtBQUssaUJBQWlCO0FBQUEsSUFFdEI7QUFBQSxXQUFLLGlCQUFpQixLQUFLLFFBQVEsR0FBRztBQUFBLElBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU07QUFBQTtBQUFBLEdBRTdCLE1BQU0sQ0FBQyxVQUFVLE9BQU87QUFBQSxJQUNyQixHQUFHLENBQUUsU0FBUyxLQUFLLFlBQVksS0FBSyxhQUFhLENBQUMsS0FDOUMsS0FBSyxRQUFRO0FBQUEsSUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFFBQVEsVUFBVSxDQUFDLEtBQUs7QUFBQSxNQUMxQyxLQUFLLEtBQUssT0FBTztBQUFBO0FBQUEsR0FFeEIsV0FBVyxDQUFDLE9BQU87QUFBQSxJQUNoQixLQUFLLEtBQUssUUFBUSxLQUFLO0FBQUEsSUFDdkIsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQU9oQixJQUFJLENBQUMsTUFBTSxNQUFNO0FBQUEsSUFDYixJQUFJLEtBQUs7QUFBQSxNQUNMLE9BQU87QUFBQSxJQUNYLEtBQUssYUFBYTtBQUFBLElBQ2xCLE1BQU0sUUFBUSxLQUFLO0FBQUEsSUFDbkIsT0FBTyxRQUFRLENBQUM7QUFBQSxJQUNoQixJQUFJLFNBQVMsS0FBSyxVQUFVLFNBQVMsS0FBSztBQUFBLE1BQ3RDLEtBQUssTUFBTTtBQUFBLElBRVg7QUFBQSxXQUFLLE1BQU0sS0FBSyxRQUFRO0FBQUEsSUFDNUIsS0FBSyxjQUFjLENBQUMsQ0FBQyxLQUFLO0FBQUEsSUFFMUIsSUFBSSxPQUFPO0FBQUEsTUFDUCxJQUFJLEtBQUs7QUFBQSxRQUNMLEtBQUssSUFBSTtBQUFBLElBQ2pCLEVBQ0s7QUFBQSxNQUdELEtBQUssT0FBTyxLQUFLLENBQUMsS0FBSyxjQUNqQixJQUFJLEtBQUssTUFBTSxNQUFNLElBQUksSUFDekIsSUFBSSxnQkFBZ0IsTUFBTSxNQUFNLElBQUksQ0FBQztBQUFBLE1BQzNDLElBQUksS0FBSztBQUFBLFFBQ0wsTUFBTSxNQUFNLEtBQUssUUFBUSxDQUFDO0FBQUEsTUFFMUI7QUFBQSxhQUFLLFFBQVE7QUFBQTtBQUFBLElBRXJCLE9BQU87QUFBQTtBQUFBLEVBVVgsTUFBTSxDQUFDLE1BQU07QUFBQSxJQUNULE1BQU0sSUFBSSxLQUFLLE9BQU8sS0FBSyxRQUFLLEdBQUUsU0FBUyxJQUFJO0FBQUEsSUFDL0MsSUFBSSxHQUFHO0FBQUEsTUFDSCxJQUFJLEtBQUssT0FBTyxXQUFXLEdBQUc7QUFBQSxRQUMxQixJQUFJLEtBQUssWUFBWSxLQUFLLG1CQUFtQixHQUFHO0FBQUEsVUFDNUMsS0FBSyxXQUFXO0FBQUEsUUFDcEI7QUFBQSxRQUNBLEtBQUssU0FBUyxDQUFDO0FBQUEsTUFDbkIsRUFFSTtBQUFBLGFBQUssT0FBTyxPQUFPLEtBQUssT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDO0FBQUEsTUFDaEQsRUFBRSxPQUFPO0FBQUEsSUFDYjtBQUFBO0FBQUEsRUFLSixXQUFXLENBQUMsSUFBSSxTQUFTO0FBQUEsSUFDckIsT0FBTyxLQUFLLEdBQUcsSUFBSSxPQUFPO0FBQUE7QUFBQSxFQW1COUIsRUFBRSxDQUFDLElBQUksU0FBUztBQUFBLElBQ1osTUFBTSxNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU87QUFBQSxJQUNoQyxJQUFJLE9BQU8sUUFBUTtBQUFBLE1BQ2YsS0FBSyxhQUFhO0FBQUEsTUFDbEIsS0FBSztBQUFBLE1BQ0wsSUFBSSxDQUFDLEtBQUssT0FBTyxVQUFVLENBQUMsS0FBSyxVQUFVO0FBQUEsUUFDdkMsS0FBSyxRQUFRO0FBQUEsTUFDakI7QUFBQSxJQUNKLEVBQ0ssU0FBSSxPQUFPLGNBQWMsS0FBSyxrQkFBa0IsR0FBRztBQUFBLE1BQ3BELE1BQU0sS0FBSyxVQUFVO0FBQUEsSUFDekIsRUFDSyxTQUFJLFNBQVMsRUFBRSxLQUFLLEtBQUssY0FBYztBQUFBLE1BQ3hDLE1BQU0sS0FBSyxFQUFFO0FBQUEsTUFDYixLQUFLLG1CQUFtQixFQUFFO0FBQUEsSUFDOUIsRUFDSyxTQUFJLE9BQU8sV0FBVyxLQUFLLGdCQUFnQjtBQUFBLE1BQzVDLE1BQU0sSUFBSTtBQUFBLE1BQ1YsSUFBSSxLQUFLO0FBQUEsUUFDTCxNQUFNLE1BQU0sRUFBRSxLQUFLLE1BQU0sS0FBSyxjQUFjLENBQUM7QUFBQSxNQUU3QztBQUFBLFVBQUUsS0FBSyxNQUFNLEtBQUssY0FBYztBQUFBLElBQ3hDO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUtYLGNBQWMsQ0FBQyxJQUFJLFNBQVM7QUFBQSxJQUN4QixPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU87QUFBQTtBQUFBLEVBVS9CLEdBQUcsQ0FBQyxJQUFJLFNBQVM7QUFBQSxJQUNiLE1BQU0sTUFBTSxNQUFNLElBQUksSUFBSSxPQUFPO0FBQUEsSUFJakMsSUFBSSxPQUFPLFFBQVE7QUFBQSxNQUNmLEtBQUssaUJBQWlCLEtBQUssVUFBVSxNQUFNLEVBQUU7QUFBQSxNQUM3QyxJQUFJLEtBQUssbUJBQW1CLEtBQ3hCLENBQUMsS0FBSyxjQUNOLENBQUMsS0FBSyxPQUFPLFFBQVE7QUFBQSxRQUNyQixLQUFLLFdBQVc7QUFBQSxNQUNwQjtBQUFBLElBQ0o7QUFBQSxJQUNBLE9BQU87QUFBQTtBQUFBLEVBVVgsa0JBQWtCLENBQUMsSUFBSTtBQUFBLElBQ25CLE1BQU0sTUFBTSxNQUFNLG1CQUFtQixFQUFFO0FBQUEsSUFDdkMsSUFBSSxPQUFPLFVBQVUsT0FBTyxXQUFXO0FBQUEsTUFDbkMsS0FBSyxpQkFBaUI7QUFBQSxNQUN0QixJQUFJLENBQUMsS0FBSyxjQUFjLENBQUMsS0FBSyxPQUFPLFFBQVE7QUFBQSxRQUN6QyxLQUFLLFdBQVc7QUFBQSxNQUNwQjtBQUFBLElBQ0o7QUFBQSxJQUNBLE9BQU87QUFBQTtBQUFBLE1BS1AsVUFBVSxHQUFHO0FBQUEsSUFDYixPQUFPLEtBQUs7QUFBQTtBQUFBLEdBRWYsZUFBZSxHQUFHO0FBQUEsSUFDZixJQUFJLENBQUMsS0FBSyxpQkFDTixDQUFDLEtBQUssZ0JBQ04sQ0FBQyxLQUFLLGNBQ04sS0FBSyxRQUFRLFdBQVcsS0FDeEIsS0FBSyxNQUFNO0FBQUEsTUFDWCxLQUFLLGdCQUFnQjtBQUFBLE1BQ3JCLEtBQUssS0FBSyxLQUFLO0FBQUEsTUFDZixLQUFLLEtBQUssV0FBVztBQUFBLE1BQ3JCLEtBQUssS0FBSyxRQUFRO0FBQUEsTUFDbEIsSUFBSSxLQUFLO0FBQUEsUUFDTCxLQUFLLEtBQUssT0FBTztBQUFBLE1BQ3JCLEtBQUssZ0JBQWdCO0FBQUEsSUFDekI7QUFBQTtBQUFBLEVBMEJKLElBQUksQ0FBQyxPQUFPLE1BQU07QUFBQSxJQUNkLE1BQU0sT0FBTyxLQUFLO0FBQUEsSUFFbEIsSUFBSSxPQUFPLFdBQ1AsT0FBTyxXQUNQLE9BQU8sYUFDUCxLQUFLLFlBQVk7QUFBQSxNQUNqQixPQUFPO0FBQUEsSUFDWCxFQUNLLFNBQUksT0FBTyxRQUFRO0FBQUEsTUFDcEIsT0FBTyxDQUFDLEtBQUssZUFBZSxDQUFDLE9BQ3ZCLFFBQ0EsS0FBSyxVQUNBLE1BQU0sTUFBTSxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQUcsUUFDcEMsS0FBSyxVQUFVLElBQUk7QUFBQSxJQUNqQyxFQUNLLFNBQUksT0FBTyxPQUFPO0FBQUEsTUFDbkIsT0FBTyxLQUFLLFNBQVM7QUFBQSxJQUN6QixFQUNLLFNBQUksT0FBTyxTQUFTO0FBQUEsTUFDckIsS0FBSyxVQUFVO0FBQUEsTUFFZixJQUFJLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxLQUFLO0FBQUEsUUFDNUIsT0FBTztBQUFBLE1BQ1gsTUFBTSxPQUFNLE1BQU0sS0FBSyxPQUFPO0FBQUEsTUFDOUIsS0FBSyxtQkFBbUIsT0FBTztBQUFBLE1BQy9CLE9BQU87QUFBQSxJQUNYLEVBQ0ssU0FBSSxPQUFPLFNBQVM7QUFBQSxNQUNyQixLQUFLLGlCQUFpQjtBQUFBLE1BQ3RCLE1BQU0sS0FBSyxPQUFPLElBQUk7QUFBQSxNQUN0QixNQUFNLE9BQU0sQ0FBQyxLQUFLLFdBQVcsS0FBSyxVQUFVLE9BQU8sRUFBRSxTQUMvQyxNQUFNLEtBQUssU0FBUyxJQUFJLElBQ3hCO0FBQUEsTUFDTixLQUFLLGdCQUFnQjtBQUFBLE1BQ3JCLE9BQU87QUFBQSxJQUNYLEVBQ0ssU0FBSSxPQUFPLFVBQVU7QUFBQSxNQUN0QixNQUFNLE9BQU0sTUFBTSxLQUFLLFFBQVE7QUFBQSxNQUMvQixLQUFLLGdCQUFnQjtBQUFBLE1BQ3JCLE9BQU87QUFBQSxJQUNYLEVBQ0ssU0FBSSxPQUFPLFlBQVksT0FBTyxhQUFhO0FBQUEsTUFDNUMsTUFBTSxPQUFNLE1BQU0sS0FBSyxFQUFFO0FBQUEsTUFDekIsS0FBSyxtQkFBbUIsRUFBRTtBQUFBLE1BQzFCLE9BQU87QUFBQSxJQUNYO0FBQUEsSUFFQSxNQUFNLE1BQU0sTUFBTSxLQUFLLElBQUksR0FBRyxJQUFJO0FBQUEsSUFDbEMsS0FBSyxnQkFBZ0I7QUFBQSxJQUNyQixPQUFPO0FBQUE7QUFBQSxHQUVWLFNBQVMsQ0FBQyxNQUFNO0FBQUEsSUFDYixXQUFXLEtBQUssS0FBSyxRQUFRO0FBQUEsTUFDekIsSUFBSSxFQUFFLEtBQUssTUFBTSxJQUFJLE1BQU07QUFBQSxRQUN2QixLQUFLLE1BQU07QUFBQSxJQUNuQjtBQUFBLElBQ0EsTUFBTSxNQUFNLEtBQUssYUFBYSxRQUFRLE1BQU0sS0FBSyxRQUFRLElBQUk7QUFBQSxJQUM3RCxLQUFLLGdCQUFnQjtBQUFBLElBQ3JCLE9BQU87QUFBQTtBQUFBLEdBRVYsUUFBUSxHQUFHO0FBQUEsSUFDUixJQUFJLEtBQUs7QUFBQSxNQUNMLE9BQU87QUFBQSxJQUNYLEtBQUssZUFBZTtBQUFBLElBQ3BCLEtBQUssV0FBVztBQUFBLElBQ2hCLE9BQU8sS0FBSyxVQUNMLE1BQU0sTUFBTSxLQUFLLFVBQVUsQ0FBQyxHQUFHLFFBQ2hDLEtBQUssVUFBVTtBQUFBO0FBQUEsR0FFeEIsU0FBUyxHQUFHO0FBQUEsSUFDVCxJQUFJLEtBQUssVUFBVTtBQUFBLE1BQ2YsTUFBTSxPQUFPLEtBQUssU0FBUyxJQUFJO0FBQUEsTUFDL0IsSUFBSSxNQUFNO0FBQUEsUUFDTixXQUFXLEtBQUssS0FBSyxRQUFRO0FBQUEsVUFDekIsRUFBRSxLQUFLLE1BQU0sSUFBSTtBQUFBLFFBQ3JCO0FBQUEsUUFDQSxJQUFJLENBQUMsS0FBSztBQUFBLFVBQ04sTUFBTSxLQUFLLFFBQVEsSUFBSTtBQUFBLE1BQy9CO0FBQUEsSUFDSjtBQUFBLElBQ0EsV0FBVyxLQUFLLEtBQUssUUFBUTtBQUFBLE1BQ3pCLEVBQUUsSUFBSTtBQUFBLElBQ1Y7QUFBQSxJQUNBLE1BQU0sTUFBTSxNQUFNLEtBQUssS0FBSztBQUFBLElBQzVCLEtBQUssbUJBQW1CLEtBQUs7QUFBQSxJQUM3QixPQUFPO0FBQUE7QUFBQSxPQU1MLFFBQU8sR0FBRztBQUFBLElBQ1osTUFBTSxNQUFNLE9BQU8sT0FBTyxDQUFDLEdBQUc7QUFBQSxNQUMxQixZQUFZO0FBQUEsSUFDaEIsQ0FBQztBQUFBLElBQ0QsSUFBSSxDQUFDLEtBQUs7QUFBQSxNQUNOLElBQUksYUFBYTtBQUFBLElBR3JCLE1BQU0sSUFBSSxLQUFLLFFBQVE7QUFBQSxJQUN2QixLQUFLLEdBQUcsUUFBUSxPQUFLO0FBQUEsTUFDakIsSUFBSSxLQUFLLENBQUM7QUFBQSxNQUNWLElBQUksQ0FBQyxLQUFLO0FBQUEsUUFDTixJQUFJLGNBQWMsRUFBRTtBQUFBLEtBQzNCO0FBQUEsSUFDRCxNQUFNO0FBQUEsSUFDTixPQUFPO0FBQUE7QUFBQSxPQVFMLE9BQU0sR0FBRztBQUFBLElBQ1gsSUFBSSxLQUFLLGFBQWE7QUFBQSxNQUNsQixNQUFNLElBQUksTUFBTSw2QkFBNkI7QUFBQSxJQUNqRDtBQUFBLElBQ0EsTUFBTSxNQUFNLE1BQU0sS0FBSyxRQUFRO0FBQUEsSUFDL0IsT0FBUSxLQUFLLFlBQ1AsSUFBSSxLQUFLLEVBQUUsSUFDWCxPQUFPLE9BQU8sS0FBSyxJQUFJLFVBQVU7QUFBQTtBQUFBLE9BS3JDLFFBQU8sR0FBRztBQUFBLElBQ1osT0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFBQSxNQUNwQyxLQUFLLEdBQUcsV0FBVyxNQUFNLE9BQU8sSUFBSSxNQUFNLGtCQUFrQixDQUFDLENBQUM7QUFBQSxNQUM5RCxLQUFLLEdBQUcsU0FBUyxRQUFNLE9BQU8sRUFBRSxDQUFDO0FBQUEsTUFDakMsS0FBSyxHQUFHLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFBQSxLQUNqQztBQUFBO0FBQUEsR0FPSixPQUFPLGNBQWMsR0FBRztBQUFBLElBR3JCLEtBQUssYUFBYTtBQUFBLElBQ2xCLElBQUksVUFBVTtBQUFBLElBQ2QsTUFBTSxPQUFPLFlBQVk7QUFBQSxNQUNyQixLQUFLLE1BQU07QUFBQSxNQUNYLFVBQVU7QUFBQSxNQUNWLE9BQU8sRUFBRSxPQUFPLFdBQVcsTUFBTSxLQUFLO0FBQUE7QUFBQSxJQUUxQyxNQUFNLE9BQU8sTUFBTTtBQUFBLE1BQ2YsSUFBSTtBQUFBLFFBQ0EsT0FBTyxLQUFLO0FBQUEsTUFDaEIsTUFBTSxNQUFNLEtBQUssS0FBSztBQUFBLE1BQ3RCLElBQUksUUFBUTtBQUFBLFFBQ1IsT0FBTyxRQUFRLFFBQVEsRUFBRSxNQUFNLE9BQU8sT0FBTyxJQUFJLENBQUM7QUFBQSxNQUN0RCxJQUFJLEtBQUs7QUFBQSxRQUNMLE9BQU8sS0FBSztBQUFBLE1BQ2hCLElBQUk7QUFBQSxNQUNKLElBQUk7QUFBQSxNQUNKLE1BQU0sUUFBUSxDQUFDLE9BQU87QUFBQSxRQUNsQixLQUFLLElBQUksUUFBUSxNQUFNO0FBQUEsUUFDdkIsS0FBSyxJQUFJLE9BQU8sS0FBSztBQUFBLFFBQ3JCLEtBQUssSUFBSSxXQUFXLFNBQVM7QUFBQSxRQUM3QixLQUFLO0FBQUEsUUFDTCxPQUFPLEVBQUU7QUFBQTtBQUFBLE1BRWIsTUFBTSxTQUFTLENBQUMsVUFBVTtBQUFBLFFBQ3RCLEtBQUssSUFBSSxTQUFTLEtBQUs7QUFBQSxRQUN2QixLQUFLLElBQUksT0FBTyxLQUFLO0FBQUEsUUFDckIsS0FBSyxJQUFJLFdBQVcsU0FBUztBQUFBLFFBQzdCLEtBQUssTUFBTTtBQUFBLFFBQ1gsUUFBUSxFQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUM7QUFBQTtBQUFBLE1BRXhDLE1BQU0sUUFBUSxNQUFNO0FBQUEsUUFDaEIsS0FBSyxJQUFJLFNBQVMsS0FBSztBQUFBLFFBQ3ZCLEtBQUssSUFBSSxRQUFRLE1BQU07QUFBQSxRQUN2QixLQUFLLElBQUksV0FBVyxTQUFTO0FBQUEsUUFDN0IsS0FBSztBQUFBLFFBQ0wsUUFBUSxFQUFFLE1BQU0sTUFBTSxPQUFPLFVBQVUsQ0FBQztBQUFBO0FBQUEsTUFFNUMsTUFBTSxZQUFZLE1BQU0sTUFBTSxJQUFJLE1BQU0sa0JBQWtCLENBQUM7QUFBQSxNQUMzRCxPQUFPLElBQUksUUFBUSxDQUFDLE1BQUssUUFBUTtBQUFBLFFBQzdCLFNBQVM7QUFBQSxRQUNULFVBQVU7QUFBQSxRQUNWLEtBQUssS0FBSyxXQUFXLFNBQVM7QUFBQSxRQUM5QixLQUFLLEtBQUssU0FBUyxLQUFLO0FBQUEsUUFDeEIsS0FBSyxLQUFLLE9BQU8sS0FBSztBQUFBLFFBQ3RCLEtBQUssS0FBSyxRQUFRLE1BQU07QUFBQSxPQUMzQjtBQUFBO0FBQUEsSUFFTCxPQUFPO0FBQUEsTUFDSDtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE9BQ1AsT0FBTyxjQUFjLEdBQUc7QUFBQSxRQUNyQixPQUFPO0FBQUE7QUFBQSxPQUVWLE9BQU8sZUFBZSxZQUFZO0FBQUEsSUFDdkM7QUFBQTtBQUFBLEdBUUgsT0FBTyxTQUFTLEdBQUc7QUFBQSxJQUdoQixLQUFLLGFBQWE7QUFBQSxJQUNsQixJQUFJLFVBQVU7QUFBQSxJQUNkLE1BQU0sT0FBTyxNQUFNO0FBQUEsTUFDZixLQUFLLE1BQU07QUFBQSxNQUNYLEtBQUssSUFBSSxPQUFPLElBQUk7QUFBQSxNQUNwQixLQUFLLElBQUksV0FBVyxJQUFJO0FBQUEsTUFDeEIsS0FBSyxJQUFJLE9BQU8sSUFBSTtBQUFBLE1BQ3BCLFVBQVU7QUFBQSxNQUNWLE9BQU8sRUFBRSxNQUFNLE1BQU0sT0FBTyxVQUFVO0FBQUE7QUFBQSxJQUUxQyxNQUFNLE9BQU8sTUFBTTtBQUFBLE1BQ2YsSUFBSTtBQUFBLFFBQ0EsT0FBTyxLQUFLO0FBQUEsTUFDaEIsTUFBTSxRQUFRLEtBQUssS0FBSztBQUFBLE1BQ3hCLE9BQU8sVUFBVSxPQUFPLEtBQUssSUFBSSxFQUFFLE1BQU0sT0FBTyxNQUFNO0FBQUE7QUFBQSxJQUUxRCxLQUFLLEtBQUssT0FBTyxJQUFJO0FBQUEsSUFDckIsS0FBSyxLQUFLLE9BQU8sSUFBSTtBQUFBLElBQ3JCLEtBQUssS0FBSyxXQUFXLElBQUk7QUFBQSxJQUN6QixPQUFPO0FBQUEsTUFDSDtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLE9BQ1AsT0FBTyxTQUFTLEdBQUc7QUFBQSxRQUNoQixPQUFPO0FBQUE7QUFBQSxPQUVWLE9BQU8sVUFBVSxNQUFNO0FBQUEsSUFDNUI7QUFBQTtBQUFBLEVBY0osT0FBTyxDQUFDLElBQUk7QUFBQSxJQUNSLElBQUksS0FBSyxZQUFZO0FBQUEsTUFDakIsSUFBSTtBQUFBLFFBQ0EsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUFBLE1BRXJCO0FBQUEsYUFBSyxLQUFLLFNBQVM7QUFBQSxNQUN2QixPQUFPO0FBQUEsSUFDWDtBQUFBLElBQ0EsS0FBSyxhQUFhO0FBQUEsSUFDbEIsS0FBSyxhQUFhO0FBQUEsSUFFbEIsS0FBSyxRQUFRLFNBQVM7QUFBQSxJQUN0QixLQUFLLGdCQUFnQjtBQUFBLElBQ3JCLE1BQU0sS0FBSztBQUFBLElBQ1gsSUFBSSxPQUFPLEdBQUcsVUFBVSxjQUFjLENBQUMsS0FBSztBQUFBLE1BQ3hDLEdBQUcsTUFBTTtBQUFBLElBQ2IsSUFBSTtBQUFBLE1BQ0EsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUFBLElBR3JCO0FBQUEsV0FBSyxLQUFLLFNBQVM7QUFBQSxJQUN2QixPQUFPO0FBQUE7QUFBQSxhQVNBLFFBQVEsR0FBRztBQUFBLElBQ2xCLE9BQU87QUFBQTtBQUVmOzs7QURyL0JBLElBQU0sZUFBZSxJQUFJO0FBS3pCLElBQU0sWUFBWTtBQUFBLEVBQ2Q7QUFBQSxFQUNBLFNBQVM7QUFBQSxFQUNUO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNOO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDSjtBQUNKO0FBRUEsSUFBTSxlQUFlLENBQUMsYUFBYSxDQUFDLFlBQVksYUFBYSxhQUFhLGFBQWEsV0FDbkYsWUFDRTtBQUFBLEtBQ0s7QUFBQSxLQUNBO0FBQUEsRUFDSCxVQUFVO0FBQUEsT0FDSCxVQUFVO0FBQUEsT0FDVCxTQUFTLFlBQVksQ0FBQztBQUFBLEVBQzlCO0FBQ0o7QUFFSixJQUFNLGlCQUFpQjtBQUN2QixJQUFNLGFBQWEsQ0FBQyxhQUFhLFNBQVMsUUFBUSxPQUFPLElBQUksRUFBRSxRQUFRLGdCQUFnQixNQUFNO0FBRTdGLElBQU0sWUFBWTtBQUNsQixJQUFNLFVBQVU7QUFDaEIsSUFBTSxRQUFRO0FBQ2QsSUFBTSxRQUFRO0FBQ2QsSUFBTSxRQUFRO0FBQ2QsSUFBTSxRQUFRO0FBQ2QsSUFBTSxRQUFRO0FBQ2QsSUFBTSxRQUFRO0FBQ2QsSUFBTSxTQUFTO0FBQ2YsSUFBTSxPQUFPO0FBRWIsSUFBTSxlQUFlLENBQUM7QUFFdEIsSUFBTSxpQkFBaUI7QUFFdkIsSUFBTSxlQUFlO0FBRXJCLElBQU0sVUFBVTtBQUdoQixJQUFNLFNBQVM7QUFHZixJQUFNLGNBQWM7QUFFcEIsSUFBTSxjQUFjO0FBQ3BCLElBQU0sV0FBVyxVQUFVLFNBQVM7QUFDcEMsSUFBTSxXQUFXO0FBQ2pCLElBQU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLElBQUksUUFDaEMsRUFBRSxZQUFZLElBQUksUUFDZCxFQUFFLGVBQWUsSUFBSSxRQUNqQixFQUFFLGtCQUFrQixJQUFJLFFBQ3BCLEVBQUUsY0FBYyxJQUFJLFFBQ2hCLEVBQUUsU0FBUyxJQUFJLFNBQ1gsRUFBRSxPQUFPLElBQUksUUFDVDtBQUU5QixJQUFNLGlCQUFpQixJQUFJLEVBQVMsRUFBRSxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQ3BELElBQU0sWUFBWSxDQUFDLE1BQU07QUFBQSxFQUNyQixNQUFNLElBQUksZUFBZSxJQUFJLENBQUM7QUFBQSxFQUM5QixJQUFJO0FBQUEsSUFDQSxPQUFPO0FBQUEsRUFDWCxNQUFNLElBQUksRUFBRSxVQUFVLE1BQU07QUFBQSxFQUM1QixlQUFlLElBQUksR0FBRyxDQUFDO0FBQUEsRUFDdkIsT0FBTztBQUFBO0FBRVgsSUFBTSx1QkFBdUIsSUFBSSxFQUFTLEVBQUUsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUMxRCxJQUFNLGtCQUFrQixDQUFDLE1BQU07QUFBQSxFQUMzQixNQUFNLElBQUkscUJBQXFCLElBQUksQ0FBQztBQUFBLEVBQ3BDLElBQUk7QUFBQSxJQUNBLE9BQU87QUFBQSxFQUNYLE1BQU0sSUFBSSxVQUFVLEVBQUUsWUFBWSxDQUFDO0FBQUEsRUFDbkMscUJBQXFCLElBQUksR0FBRyxDQUFDO0FBQUEsRUFDN0IsT0FBTztBQUFBO0FBQUE7QUFNSixNQUFNLHFCQUFxQixFQUFTO0FBQUEsRUFDdkMsV0FBVyxHQUFHO0FBQUEsSUFDVixNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUM7QUFBQTtBQUUxQjtBQUFBO0FBZ0JPLE1BQU0sc0JBQXNCLEVBQVM7QUFBQSxFQUN4QyxXQUFXLENBQUMsVUFBVSxLQUFLLE1BQU07QUFBQSxJQUM3QixNQUFNO0FBQUEsTUFDRjtBQUFBLE1BRUEsaUJBQWlCLE9BQUssRUFBRSxTQUFTO0FBQUEsSUFDckMsQ0FBQztBQUFBO0FBRVQ7QUFDQSxJQUFNLFdBQVcsT0FBTyxxQkFBcUI7QUFBQTtBQWN0QyxNQUFNLFNBQVM7QUFBQSxFQVVsQjtBQUFBLEVBTUE7QUFBQSxFQU1BO0FBQUEsRUFNQTtBQUFBLEVBS0E7QUFBQSxFQUtBLFFBQVE7QUFBQSxFQUVSO0FBQUEsRUFFQTtBQUFBLE1BQ0ksR0FBRyxHQUFHO0FBQUEsSUFDTixPQUFPLEtBQUs7QUFBQTtBQUFBLEVBRWhCO0FBQUEsTUFDSSxJQUFJLEdBQUc7QUFBQSxJQUNQLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFFaEI7QUFBQSxNQUNJLEtBQUssR0FBRztBQUFBLElBQ1IsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQUVoQjtBQUFBLE1BQ0ksR0FBRyxHQUFHO0FBQUEsSUFDTixPQUFPLEtBQUs7QUFBQTtBQUFBLEVBRWhCO0FBQUEsTUFDSSxHQUFHLEdBQUc7QUFBQSxJQUNOLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFFaEI7QUFBQSxNQUNJLElBQUksR0FBRztBQUFBLElBQ1AsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQUVoQjtBQUFBLE1BQ0ksT0FBTyxHQUFHO0FBQUEsSUFDVixPQUFPLEtBQUs7QUFBQTtBQUFBLEVBRWhCO0FBQUEsTUFDSSxHQUFHLEdBQUc7QUFBQSxJQUNOLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFFaEI7QUFBQSxNQUNJLElBQUksR0FBRztBQUFBLElBQ1AsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQUVoQjtBQUFBLE1BQ0ksTUFBTSxHQUFHO0FBQUEsSUFDVCxPQUFPLEtBQUs7QUFBQTtBQUFBLEVBRWhCO0FBQUEsTUFDSSxPQUFPLEdBQUc7QUFBQSxJQUNWLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFFaEI7QUFBQSxNQUNJLE9BQU8sR0FBRztBQUFBLElBQ1YsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQUVoQjtBQUFBLE1BQ0ksT0FBTyxHQUFHO0FBQUEsSUFDVixPQUFPLEtBQUs7QUFBQTtBQUFBLEVBRWhCO0FBQUEsTUFDSSxXQUFXLEdBQUc7QUFBQSxJQUNkLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFFaEI7QUFBQSxNQUNJLEtBQUssR0FBRztBQUFBLElBQ1IsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQUVoQjtBQUFBLE1BQ0ksS0FBSyxHQUFHO0FBQUEsSUFDUixPQUFPLEtBQUs7QUFBQTtBQUFBLEVBRWhCO0FBQUEsTUFDSSxLQUFLLEdBQUc7QUFBQSxJQUNSLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFFaEI7QUFBQSxNQUNJLFNBQVMsR0FBRztBQUFBLElBQ1osT0FBTyxLQUFLO0FBQUE7QUFBQSxFQUVoQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE1BT0ksVUFBVSxHQUFHO0FBQUEsSUFDYixRQUFRLEtBQUssVUFBVSxNQUFNLFNBQVM7QUFBQTtBQUFBLE1BU3RDLElBQUksR0FBRztBQUFBLElBQ1AsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQVNoQixXQUFXLENBQUMsTUFBTSxPQUFPLFNBQVMsTUFBTSxPQUFPLFFBQVEsVUFBVSxNQUFNO0FBQUEsSUFDbkUsS0FBSyxPQUFPO0FBQUEsSUFDWixLQUFLLGFBQWEsU0FBUyxnQkFBZ0IsSUFBSSxJQUFJLFVBQVUsSUFBSTtBQUFBLElBQ2pFLEtBQUssUUFBUSxPQUFPO0FBQUEsSUFDcEIsS0FBSyxTQUFTO0FBQUEsSUFDZCxLQUFLLFFBQVE7QUFBQSxJQUNiLEtBQUssT0FBTyxRQUFRO0FBQUEsSUFDcEIsS0FBSyxZQUFZO0FBQUEsSUFDakIsS0FBSyxZQUFZLEtBQUs7QUFBQSxJQUN0QixLQUFLLFlBQVksS0FBSztBQUFBLElBQ3RCLEtBQUssaUJBQWlCLEtBQUs7QUFBQSxJQUMzQixLQUFLLFNBQVMsS0FBSztBQUFBLElBQ25CLElBQUksS0FBSyxRQUFRO0FBQUEsTUFDYixLQUFLLE1BQU0sS0FBSyxPQUFPO0FBQUEsSUFDM0IsRUFDSztBQUFBLE1BQ0QsS0FBSyxNQUFNLGFBQWEsS0FBSyxFQUFFO0FBQUE7QUFBQTtBQUFBLEVBUXZDLEtBQUssR0FBRztBQUFBLElBQ0osSUFBSSxLQUFLLFdBQVc7QUFBQSxNQUNoQixPQUFPLEtBQUs7QUFBQSxJQUNoQixJQUFJLENBQUMsS0FBSztBQUFBLE1BQ04sT0FBUSxLQUFLLFNBQVM7QUFBQSxJQUMxQixPQUFRLEtBQUssU0FBUyxLQUFLLE9BQU8sTUFBTSxJQUFJO0FBQUE7QUFBQSxFQUtoRCxhQUFhLEdBQUc7QUFBQSxJQUNaLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFLaEIsT0FBTyxDQUFDLE9BQU07QUFBQSxJQUNWLElBQUksQ0FBQyxPQUFNO0FBQUEsTUFDUCxPQUFPO0FBQUEsSUFDWDtBQUFBLElBQ0EsTUFBTSxXQUFXLEtBQUssY0FBYyxLQUFJO0FBQUEsSUFDeEMsTUFBTSxNQUFNLE1BQUssVUFBVSxTQUFTLE1BQU07QUFBQSxJQUMxQyxNQUFNLFdBQVcsSUFBSSxNQUFNLEtBQUssUUFBUTtBQUFBLElBQ3hDLE1BQU0sU0FBUyxXQUNYLEtBQUssUUFBUSxRQUFRLEVBQUUsY0FBYyxRQUFRLElBQzNDLEtBQUssY0FBYyxRQUFRO0FBQUEsSUFDakMsT0FBTztBQUFBO0FBQUEsRUFFWCxhQUFhLENBQUMsVUFBVTtBQUFBLElBQ3BCLElBQUksSUFBSTtBQUFBLElBQ1IsV0FBVyxRQUFRLFVBQVU7QUFBQSxNQUN6QixJQUFJLEVBQUUsTUFBTSxJQUFJO0FBQUEsSUFDcEI7QUFBQSxJQUNBLE9BQU87QUFBQTtBQUFBLEVBVVgsUUFBUSxHQUFHO0FBQUEsSUFDUCxNQUFNLFNBQVMsS0FBSyxVQUFVLElBQUksSUFBSTtBQUFBLElBQ3RDLElBQUksUUFBUTtBQUFBLE1BQ1IsT0FBTztBQUFBLElBQ1g7QUFBQSxJQUNBLE1BQU0sV0FBVyxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFBQSxJQUNyRCxLQUFLLFVBQVUsSUFBSSxNQUFNLFFBQVE7QUFBQSxJQUNqQyxLQUFLLFNBQVMsQ0FBQztBQUFBLElBQ2YsT0FBTztBQUFBO0FBQUEsRUFlWCxLQUFLLENBQUMsVUFBVSxNQUFNO0FBQUEsSUFDbEIsSUFBSSxhQUFhLE1BQU0sYUFBYSxLQUFLO0FBQUEsTUFDckMsT0FBTztBQUFBLElBQ1g7QUFBQSxJQUNBLElBQUksYUFBYSxNQUFNO0FBQUEsTUFDbkIsT0FBTyxLQUFLLFVBQVU7QUFBQSxJQUMxQjtBQUFBLElBRUEsTUFBTSxXQUFXLEtBQUssU0FBUztBQUFBLElBQy9CLE1BQU0sT0FBTyxLQUFLLFNBQVMsZ0JBQWdCLFFBQVEsSUFBSSxVQUFVLFFBQVE7QUFBQSxJQUN6RSxXQUFXLEtBQUssVUFBVTtBQUFBLE1BQ3RCLElBQUksRUFBRSxlQUFlLE1BQU07QUFBQSxRQUN2QixPQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFBQSxJQUlBLE1BQU0sSUFBSSxLQUFLLFNBQVMsS0FBSyxNQUFNO0FBQUEsSUFDbkMsTUFBTSxXQUFXLEtBQUssWUFBWSxLQUFLLFlBQVksSUFBSSxXQUFXO0FBQUEsSUFDbEUsTUFBTSxTQUFTLEtBQUssU0FBUyxVQUFVLFNBQVM7QUFBQSxTQUN6QztBQUFBLE1BQ0gsUUFBUTtBQUFBLE1BQ1I7QUFBQSxJQUNKLENBQUM7QUFBQSxJQUNELElBQUksQ0FBQyxLQUFLLFdBQVcsR0FBRztBQUFBLE1BQ3BCLE9BQU8sU0FBUztBQUFBLElBQ3BCO0FBQUEsSUFHQSxTQUFTLEtBQUssTUFBTTtBQUFBLElBQ3BCLE9BQU87QUFBQTtBQUFBLEVBTVgsUUFBUSxHQUFHO0FBQUEsSUFDUCxJQUFJLEtBQUs7QUFBQSxNQUNMLE9BQU87QUFBQSxJQUNYLElBQUksS0FBSyxjQUFjLFdBQVc7QUFBQSxNQUM5QixPQUFPLEtBQUs7QUFBQSxJQUNoQjtBQUFBLElBQ0EsTUFBTSxPQUFPLEtBQUs7QUFBQSxJQUNsQixNQUFNLElBQUksS0FBSztBQUFBLElBQ2YsSUFBSSxDQUFDLEdBQUc7QUFBQSxNQUNKLE9BQVEsS0FBSyxZQUFZLEtBQUs7QUFBQSxJQUNsQztBQUFBLElBQ0EsTUFBTSxLQUFLLEVBQUUsU0FBUztBQUFBLElBQ3RCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsS0FBSyxLQUFLLE9BQU87QUFBQTtBQUFBLEVBUXJELGFBQWEsR0FBRztBQUFBLElBQ1osSUFBSSxLQUFLLFFBQVE7QUFBQSxNQUNiLE9BQU8sS0FBSyxTQUFTO0FBQUEsSUFDekIsSUFBSSxLQUFLO0FBQUEsTUFDTCxPQUFPO0FBQUEsSUFDWCxJQUFJLEtBQUssbUJBQW1CO0FBQUEsTUFDeEIsT0FBTyxLQUFLO0FBQUEsSUFDaEIsTUFBTSxPQUFPLEtBQUs7QUFBQSxJQUNsQixNQUFNLElBQUksS0FBSztBQUFBLElBQ2YsSUFBSSxDQUFDLEdBQUc7QUFBQSxNQUNKLE9BQVEsS0FBSyxpQkFBaUIsS0FBSyxjQUFjO0FBQUEsSUFDckQ7QUFBQSxJQUNBLE1BQU0sS0FBSyxFQUFFLGNBQWM7QUFBQSxJQUMzQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEtBQUssT0FBTztBQUFBO0FBQUEsRUFLaEQsUUFBUSxHQUFHO0FBQUEsSUFDUCxJQUFJLEtBQUssY0FBYyxXQUFXO0FBQUEsTUFDOUIsT0FBTyxLQUFLO0FBQUEsSUFDaEI7QUFBQSxJQUNBLE1BQU0sT0FBTyxLQUFLO0FBQUEsSUFDbEIsTUFBTSxJQUFJLEtBQUs7QUFBQSxJQUNmLElBQUksQ0FBQyxHQUFHO0FBQUEsTUFDSixPQUFRLEtBQUssWUFBWSxLQUFLO0FBQUEsSUFDbEM7QUFBQSxJQUNBLE1BQU0sS0FBSyxFQUFFLFNBQVM7QUFBQSxJQUN0QixNQUFNLEtBQUssTUFBTSxDQUFDLEVBQUUsU0FBUyxLQUFLLEtBQUssT0FBTztBQUFBLElBQzlDLE9BQVEsS0FBSyxZQUFZO0FBQUE7QUFBQSxFQVE3QixhQUFhLEdBQUc7QUFBQSxJQUNaLElBQUksS0FBSyxtQkFBbUI7QUFBQSxNQUN4QixPQUFPLEtBQUs7QUFBQSxJQUNoQixJQUFJLEtBQUssUUFBUTtBQUFBLE1BQ2IsT0FBUSxLQUFLLGlCQUFpQixLQUFLLFNBQVM7QUFBQSxJQUNoRCxJQUFJLENBQUMsS0FBSyxRQUFRO0FBQUEsTUFDZCxNQUFNLEtBQUksS0FBSyxTQUFTLEVBQUUsUUFBUSxPQUFPLEdBQUc7QUFBQSxNQUM1QyxJQUFJLGFBQWEsS0FBSyxFQUFDLEdBQUc7QUFBQSxRQUN0QixPQUFRLEtBQUssaUJBQWlCLE9BQU87QUFBQSxNQUN6QyxFQUNLO0FBQUEsUUFDRCxPQUFRLEtBQUssaUJBQWlCO0FBQUE7QUFBQSxJQUV0QztBQUFBLElBQ0EsTUFBTSxJQUFJLEtBQUs7QUFBQSxJQUNmLE1BQU0sT0FBTyxFQUFFLGNBQWM7QUFBQSxJQUM3QixNQUFNLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsS0FBSyxPQUFPLEtBQUs7QUFBQSxJQUMxRCxPQUFRLEtBQUssaUJBQWlCO0FBQUE7QUFBQSxFQVNsQyxTQUFTLEdBQUc7QUFBQSxJQUNSLFFBQVEsS0FBSyxRQUFRLFVBQVU7QUFBQTtBQUFBLEVBRW5DLE1BQU0sQ0FBQyxNQUFNO0FBQUEsSUFDVCxPQUFPLEtBQUssS0FBSyxRQUFRO0FBQUE7QUFBQSxFQUU3QixPQUFPLEdBQUc7QUFBQSxJQUNOLE9BQVEsS0FBSyxVQUFVLElBQUksWUFDckIsS0FBSyxZQUFZLElBQUksY0FDakIsS0FBSyxPQUFPLElBQUksU0FDWixLQUFLLGVBQWUsSUFBSSxpQkFDcEIsS0FBSyxPQUFPLElBQUksU0FDWixLQUFLLGtCQUFrQixJQUFJLG9CQUN2QixLQUFLLGNBQWMsSUFBSSxnQkFDRyxLQUFLLFNBQVMsSUFBSSxXQUNwQztBQUFBO0FBQUEsRUFNdEMsTUFBTSxHQUFHO0FBQUEsSUFDTCxRQUFRLEtBQUssUUFBUSxVQUFVO0FBQUE7QUFBQSxFQUtuQyxXQUFXLEdBQUc7QUFBQSxJQUNWLFFBQVEsS0FBSyxRQUFRLFVBQVU7QUFBQTtBQUFBLEVBS25DLGlCQUFpQixHQUFHO0FBQUEsSUFDaEIsUUFBUSxLQUFLLFFBQVEsVUFBVTtBQUFBO0FBQUEsRUFLbkMsYUFBYSxHQUFHO0FBQUEsSUFDWixRQUFRLEtBQUssUUFBUSxVQUFVO0FBQUE7QUFBQSxFQUtuQyxNQUFNLEdBQUc7QUFBQSxJQUNMLFFBQVEsS0FBSyxRQUFRLFVBQVU7QUFBQTtBQUFBLEVBS25DLFFBQVEsR0FBRztBQUFBLElBQ1AsUUFBUSxLQUFLLFFBQVEsVUFBVTtBQUFBO0FBQUEsRUFLbkMsY0FBYyxHQUFHO0FBQUEsSUFDYixRQUFRLEtBQUssUUFBUSxXQUFXO0FBQUE7QUFBQSxFQVNwQyxXQUFXLEdBQUc7QUFBQSxJQUNWLE9BQU8sS0FBSyxRQUFRLGVBQWUsT0FBTztBQUFBO0FBQUEsRUFVOUMsY0FBYyxHQUFHO0FBQUEsSUFDYixPQUFPLEtBQUs7QUFBQTtBQUFBLEVBVWhCLGNBQWMsR0FBRztBQUFBLElBQ2IsT0FBTyxLQUFLO0FBQUE7QUFBQSxFQVVoQixhQUFhLEdBQUc7QUFBQSxJQUNaLE1BQU0sV0FBVyxLQUFLLFNBQVM7QUFBQSxJQUMvQixPQUFPLFNBQVMsTUFBTSxHQUFHLFNBQVMsV0FBVztBQUFBO0FBQUEsRUFTakQsV0FBVyxHQUFHO0FBQUEsSUFDVixJQUFJLEtBQUs7QUFBQSxNQUNMLE9BQU87QUFBQSxJQUNYLElBQUksQ0FBQyxLQUFLO0FBQUEsTUFDTixPQUFPO0FBQUEsSUFFWCxNQUFNLE9BQU8sS0FBSyxRQUFRO0FBQUEsSUFDMUIsT0FBTyxFQUFHLFNBQVMsV0FBVyxTQUFTLFNBQ25DLEtBQUssUUFBUSxlQUNiLEtBQUssUUFBUTtBQUFBO0FBQUEsRUFNckIsYUFBYSxHQUFHO0FBQUEsSUFDWixPQUFPLENBQUMsRUFBRSxLQUFLLFFBQVE7QUFBQTtBQUFBLEVBTzNCLFFBQVEsR0FBRztBQUFBLElBQ1AsT0FBTyxDQUFDLEVBQUUsS0FBSyxRQUFRO0FBQUE7QUFBQSxFQWEzQixPQUFPLENBQUMsR0FBRztBQUFBLElBQ1AsT0FBTyxDQUFDLEtBQUssU0FDVCxLQUFLLGVBQWUsVUFBVSxDQUFDLElBQzdCLEtBQUssZUFBZSxnQkFBZ0IsQ0FBQztBQUFBO0FBQUEsT0FVekMsU0FBUSxHQUFHO0FBQUEsSUFDYixNQUFNLFNBQVMsS0FBSztBQUFBLElBQ3BCLElBQUksUUFBUTtBQUFBLE1BQ1IsT0FBTztBQUFBLElBQ1g7QUFBQSxJQUNBLElBQUksQ0FBQyxLQUFLLFlBQVksR0FBRztBQUFBLE1BQ3JCO0FBQUEsSUFDSjtBQUFBLElBR0EsSUFBSSxDQUFDLEtBQUssUUFBUTtBQUFBLE1BQ2Q7QUFBQSxJQUNKO0FBQUEsSUFFQSxJQUFJO0FBQUEsTUFDQSxNQUFNLE9BQU8sTUFBTSxLQUFLLElBQUksU0FBUyxTQUFTLEtBQUssU0FBUyxDQUFDO0FBQUEsTUFDN0QsTUFBTSxjQUFjLE1BQU0sS0FBSyxPQUFPLFNBQVMsSUFBSSxRQUFRLElBQUk7QUFBQSxNQUMvRCxJQUFJLFlBQVk7QUFBQSxRQUNaLE9BQVEsS0FBSyxjQUFjO0FBQUEsTUFDL0I7QUFBQSxNQUVKLE9BQU8sSUFBSTtBQUFBLE1BQ1AsS0FBSyxjQUFjLEdBQUcsSUFBSTtBQUFBLE1BQzFCO0FBQUE7QUFBQTtBQUFBLEVBTVIsWUFBWSxHQUFHO0FBQUEsSUFDWCxNQUFNLFNBQVMsS0FBSztBQUFBLElBQ3BCLElBQUksUUFBUTtBQUFBLE1BQ1IsT0FBTztBQUFBLElBQ1g7QUFBQSxJQUNBLElBQUksQ0FBQyxLQUFLLFlBQVksR0FBRztBQUFBLE1BQ3JCO0FBQUEsSUFDSjtBQUFBLElBR0EsSUFBSSxDQUFDLEtBQUssUUFBUTtBQUFBLE1BQ2Q7QUFBQSxJQUNKO0FBQUEsSUFFQSxJQUFJO0FBQUEsTUFDQSxNQUFNLE9BQU8sS0FBSyxJQUFJLGFBQWEsS0FBSyxTQUFTLENBQUM7QUFBQSxNQUNsRCxNQUFNLGFBQWEsS0FBSyxPQUFPLGFBQWEsR0FBRyxRQUFRLElBQUk7QUFBQSxNQUMzRCxJQUFJLFlBQVk7QUFBQSxRQUNaLE9BQVEsS0FBSyxjQUFjO0FBQUEsTUFDL0I7QUFBQSxNQUVKLE9BQU8sSUFBSTtBQUFBLE1BQ1AsS0FBSyxjQUFjLEdBQUcsSUFBSTtBQUFBLE1BQzFCO0FBQUE7QUFBQTtBQUFBLEVBR1IsZUFBZSxDQUFDLFVBQVU7QUFBQSxJQUV0QixLQUFLLFNBQVM7QUFBQSxJQUVkLFNBQVMsSUFBSSxTQUFTLFlBQWEsSUFBSSxTQUFTLFFBQVEsS0FBSztBQUFBLE1BQ3pELE1BQU0sSUFBSSxTQUFTO0FBQUEsTUFDbkIsSUFBSTtBQUFBLFFBQ0EsRUFBRSxZQUFZO0FBQUEsSUFDdEI7QUFBQTtBQUFBLEVBRUosV0FBVyxHQUFHO0FBQUEsSUFFVixJQUFJLEtBQUssUUFBUTtBQUFBLE1BQ2I7QUFBQSxJQUNKLEtBQUssU0FBUyxLQUFLLFFBQVEsVUFBVTtBQUFBLElBQ3JDLEtBQUssb0JBQW9CO0FBQUE7QUFBQSxFQUU3QixtQkFBbUIsR0FBRztBQUFBLElBRWxCLE1BQU0sV0FBVyxLQUFLLFNBQVM7QUFBQSxJQUMvQixTQUFTLGNBQWM7QUFBQSxJQUN2QixXQUFXLEtBQUssVUFBVTtBQUFBLE1BQ3RCLEVBQUUsWUFBWTtBQUFBLElBQ2xCO0FBQUE7QUFBQSxFQUVKLGdCQUFnQixHQUFHO0FBQUEsSUFDZixLQUFLLFNBQVM7QUFBQSxJQUNkLEtBQUssYUFBYTtBQUFBO0FBQUEsRUFHdEIsWUFBWSxHQUFHO0FBQUEsSUFNWCxJQUFJLEtBQUssUUFBUTtBQUFBLE1BQ2I7QUFBQSxJQUVKLElBQUksSUFBSSxLQUFLO0FBQUEsSUFHYixLQUFLLElBQUksVUFBVTtBQUFBLE1BQ2YsS0FBSztBQUFBLElBQ1QsS0FBSyxRQUFRLElBQUk7QUFBQSxJQUNqQixLQUFLLG9CQUFvQjtBQUFBO0FBQUEsRUFFN0IsWUFBWSxDQUFDLE9BQU8sSUFBSTtBQUFBLElBRXBCLElBQUksU0FBUyxhQUFhLFNBQVMsU0FBUztBQUFBLE1BQ3hDLEtBQUssYUFBYTtBQUFBLElBQ3RCLEVBQ0ssU0FBSSxTQUFTLFVBQVU7QUFBQSxNQUN4QixLQUFLLFlBQVk7QUFBQSxJQUNyQixFQUNLO0FBQUEsTUFDRCxLQUFLLFNBQVMsRUFBRSxjQUFjO0FBQUE7QUFBQTtBQUFBLEVBR3RDLFVBQVUsQ0FBQyxPQUFPLElBQUk7QUFBQSxJQUdsQixJQUFJLFNBQVMsV0FBVztBQUFBLE1BRXBCLE1BQU0sSUFBSSxLQUFLO0FBQUEsTUFDZixFQUFFLGFBQWE7QUFBQSxJQUNuQixFQUNLLFNBQUksU0FBUyxVQUFVO0FBQUEsTUFFeEIsS0FBSyxZQUFZO0FBQUEsSUFDckI7QUFBQTtBQUFBLEVBRUosYUFBYSxDQUFDLE9BQU8sSUFBSTtBQUFBLElBQ3JCLElBQUksTUFBTSxLQUFLO0FBQUEsSUFDZixPQUFPO0FBQUEsSUFDUCxJQUFJLFNBQVM7QUFBQSxNQUNULE9BQU87QUFBQSxJQUVYLElBQUksU0FBUyxZQUFZLFNBQVMsV0FBVztBQUFBLE1BR3pDLE9BQU87QUFBQSxJQUNYO0FBQUEsSUFDQSxLQUFLLFFBQVE7QUFBQSxJQUliLElBQUksU0FBUyxhQUFhLEtBQUssUUFBUTtBQUFBLE1BQ25DLEtBQUssT0FBTyxhQUFhO0FBQUEsSUFDN0I7QUFBQTtBQUFBLEVBR0osZ0JBQWdCLENBQUMsR0FBRyxHQUFHO0FBQUEsSUFDbkIsT0FBUSxLQUFLLDBCQUEwQixHQUFHLENBQUMsS0FDdkMsS0FBSyxvQkFBb0IsR0FBRyxDQUFDO0FBQUE7QUFBQSxFQUVyQyxtQkFBbUIsQ0FBQyxHQUFHLEdBQUc7QUFBQSxJQUV0QixNQUFNLE9BQU8sVUFBVSxDQUFDO0FBQUEsSUFDeEIsTUFBTSxRQUFRLEtBQUssU0FBUyxFQUFFLE1BQU0sTUFBTSxFQUFFLFFBQVEsS0FBSyxDQUFDO0FBQUEsSUFDMUQsTUFBTSxPQUFPLE1BQU0sUUFBUTtBQUFBLElBQzNCLElBQUksU0FBUyxTQUFTLFNBQVMsU0FBUyxTQUFTLFNBQVM7QUFBQSxNQUN0RCxNQUFNLFNBQVM7QUFBQSxJQUNuQjtBQUFBLElBQ0EsRUFBRSxRQUFRLEtBQUs7QUFBQSxJQUNmLEVBQUU7QUFBQSxJQUNGLE9BQU87QUFBQTtBQUFBLEVBRVgseUJBQXlCLENBQUMsR0FBRyxHQUFHO0FBQUEsSUFDNUIsU0FBUyxJQUFJLEVBQUUsWUFBYSxJQUFJLEVBQUUsUUFBUSxLQUFLO0FBQUEsTUFDM0MsTUFBTSxTQUFTLEVBQUU7QUFBQSxNQUNqQixNQUFNLE9BQU8sS0FBSyxTQUFTLGdCQUFnQixFQUFFLElBQUksSUFBSSxVQUFVLEVBQUUsSUFBSTtBQUFBLE1BQ3JFLElBQUksU0FBUyxPQUFPLFlBQVk7QUFBQSxRQUM1QjtBQUFBLE1BQ0o7QUFBQSxNQUNBLE9BQU8sS0FBSyxxQkFBcUIsR0FBRyxRQUFRLEdBQUcsQ0FBQztBQUFBLElBQ3BEO0FBQUE7QUFBQSxFQUVKLG9CQUFvQixDQUFDLEdBQUcsR0FBRyxPQUFPLEdBQUc7QUFBQSxJQUNqQyxNQUFNLElBQUksRUFBRTtBQUFBLElBRVosRUFBRSxRQUFTLEVBQUUsUUFBUSxlQUFnQixVQUFVLENBQUM7QUFBQSxJQUVoRCxJQUFJLE1BQU0sRUFBRTtBQUFBLE1BQ1IsRUFBRSxPQUFPLEVBQUU7QUFBQSxJQUdmLElBQUksVUFBVSxFQUFFLGFBQWE7QUFBQSxNQUN6QixJQUFJLFVBQVUsRUFBRSxTQUFTO0FBQUEsUUFDckIsRUFBRSxJQUFJO0FBQUEsTUFFTjtBQUFBLFVBQUUsT0FBTyxPQUFPLENBQUM7QUFBQSxNQUNyQixFQUFFLFFBQVEsQ0FBQztBQUFBLElBQ2Y7QUFBQSxJQUNBLEVBQUU7QUFBQSxJQUNGLE9BQU87QUFBQTtBQUFBLE9BaUJMLE1BQUssR0FBRztBQUFBLElBQ1YsS0FBSyxLQUFLLFFBQVEsWUFBWSxHQUFHO0FBQUEsTUFDN0IsSUFBSTtBQUFBLFFBQ0EsS0FBSyxXQUFXLE1BQU0sS0FBSyxJQUFJLFNBQVMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDO0FBQUEsUUFDOUQsT0FBTztBQUFBLFFBRVgsT0FBTyxJQUFJO0FBQUEsUUFDUCxLQUFLLFdBQVcsR0FBRyxJQUFJO0FBQUE7QUFBQSxJQUUvQjtBQUFBO0FBQUEsRUFLSixTQUFTLEdBQUc7QUFBQSxJQUNSLEtBQUssS0FBSyxRQUFRLFlBQVksR0FBRztBQUFBLE1BQzdCLElBQUk7QUFBQSxRQUNBLEtBQUssV0FBVyxLQUFLLElBQUksVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDO0FBQUEsUUFDbkQsT0FBTztBQUFBLFFBRVgsT0FBTyxJQUFJO0FBQUEsUUFDUCxLQUFLLFdBQVcsR0FBRyxJQUFJO0FBQUE7QUFBQSxJQUUvQjtBQUFBO0FBQUEsRUFFSixVQUFVLENBQUMsSUFBSTtBQUFBLElBQ1gsUUFBUSxPQUFPLFNBQVMsV0FBVyxhQUFhLFNBQVMsUUFBUSxPQUFPLFNBQVMsS0FBSyxLQUFLLEtBQUssTUFBTSxPQUFPLFNBQVMsT0FBTyxNQUFNLE1BQU0sUUFBUztBQUFBLElBQ2xKLEtBQUssU0FBUztBQUFBLElBQ2QsS0FBSyxXQUFXO0FBQUEsSUFDaEIsS0FBSyxhQUFhO0FBQUEsSUFDbEIsS0FBSyxlQUFlO0FBQUEsSUFDcEIsS0FBSyxXQUFXO0FBQUEsSUFDaEIsS0FBSyxVQUFVO0FBQUEsSUFDZixLQUFLLFNBQVM7QUFBQSxJQUNkLEtBQUssV0FBVztBQUFBLElBQ2hCLEtBQUssT0FBTztBQUFBLElBQ1osS0FBSyxPQUFPO0FBQUEsSUFDWixLQUFLLE9BQU87QUFBQSxJQUNaLEtBQUssUUFBUTtBQUFBLElBQ2IsS0FBSyxTQUFTO0FBQUEsSUFDZCxLQUFLLFdBQVc7QUFBQSxJQUNoQixLQUFLLFNBQVM7QUFBQSxJQUNkLEtBQUssUUFBUTtBQUFBLElBQ2IsS0FBSyxRQUFRO0FBQUEsSUFDYixLQUFLLE9BQU87QUFBQSxJQUNaLE1BQU0sT0FBTyxVQUFVLEVBQUU7QUFBQSxJQUV6QixLQUFLLFFBQVMsS0FBSyxRQUFRLGVBQWdCLE9BQU87QUFBQSxJQUNsRCxJQUFJLFNBQVMsV0FBVyxTQUFTLFNBQVMsU0FBUyxPQUFPO0FBQUEsTUFDdEQsS0FBSyxTQUFTO0FBQUEsSUFDbEI7QUFBQTtBQUFBLEVBRUosZUFBZSxDQUFDO0FBQUEsRUFDaEIscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCLENBQUMsVUFBVTtBQUFBLElBQ3ZCLEtBQUsscUJBQXFCO0FBQUEsSUFDMUIsTUFBTSxNQUFNLEtBQUssYUFBYSxNQUFNO0FBQUEsSUFDcEMsS0FBSyxhQUFhLFNBQVM7QUFBQSxJQUMzQixJQUFJLFFBQVEsUUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDO0FBQUE7QUFBQSxFQWtCeEMsU0FBUyxDQUFDLElBQUksYUFBYSxPQUFPO0FBQUEsSUFDOUIsSUFBSSxDQUFDLEtBQUssV0FBVyxHQUFHO0FBQUEsTUFDcEIsSUFBSTtBQUFBLFFBQ0EsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUFBLE1BRVg7QUFBQSx1QkFBZSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUFBLE1BQ3JDO0FBQUEsSUFDSjtBQUFBLElBQ0EsTUFBTSxXQUFXLEtBQUssU0FBUztBQUFBLElBQy9CLElBQUksS0FBSyxjQUFjLEdBQUc7QUFBQSxNQUN0QixNQUFNLElBQUksU0FBUyxNQUFNLEdBQUcsU0FBUyxXQUFXO0FBQUEsTUFDaEQsSUFBSTtBQUFBLFFBQ0EsR0FBRyxNQUFNLENBQUM7QUFBQSxNQUVWO0FBQUEsdUJBQWUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQUEsTUFDcEM7QUFBQSxJQUNKO0FBQUEsSUFFQSxLQUFLLGFBQWEsS0FBSyxFQUFFO0FBQUEsSUFDekIsSUFBSSxLQUFLLG9CQUFvQjtBQUFBLE1BQ3pCO0FBQUEsSUFDSjtBQUFBLElBQ0EsS0FBSyxxQkFBcUI7QUFBQSxJQUcxQixNQUFNLFdBQVcsS0FBSyxTQUFTO0FBQUEsSUFDL0IsS0FBSyxJQUFJLFFBQVEsVUFBVSxFQUFFLGVBQWUsS0FBSyxHQUFHLENBQUMsSUFBSSxZQUFZO0FBQUEsTUFDakUsSUFBSSxJQUFJO0FBQUEsUUFDSixLQUFLLGFBQWEsR0FBRyxJQUFJO0FBQUEsUUFDekIsU0FBUyxjQUFjO0FBQUEsTUFDM0IsRUFDSztBQUFBLFFBR0QsV0FBVyxLQUFLLFNBQVM7QUFBQSxVQUNyQixLQUFLLGlCQUFpQixHQUFHLFFBQVE7QUFBQSxRQUNyQztBQUFBLFFBQ0EsS0FBSyxnQkFBZ0IsUUFBUTtBQUFBO0FBQUEsTUFFakMsS0FBSyxpQkFBaUIsU0FBUyxNQUFNLEdBQUcsU0FBUyxXQUFXLENBQUM7QUFBQSxNQUM3RDtBQUFBLEtBQ0g7QUFBQTtBQUFBLEVBRUw7QUFBQSxPQVVNLFFBQU8sR0FBRztBQUFBLElBQ1osSUFBSSxDQUFDLEtBQUssV0FBVyxHQUFHO0FBQUEsTUFDcEIsT0FBTyxDQUFDO0FBQUEsSUFDWjtBQUFBLElBQ0EsTUFBTSxXQUFXLEtBQUssU0FBUztBQUFBLElBQy9CLElBQUksS0FBSyxjQUFjLEdBQUc7QUFBQSxNQUN0QixPQUFPLFNBQVMsTUFBTSxHQUFHLFNBQVMsV0FBVztBQUFBLElBQ2pEO0FBQUEsSUFHQSxNQUFNLFdBQVcsS0FBSyxTQUFTO0FBQUEsSUFDL0IsSUFBSSxLQUFLLHVCQUF1QjtBQUFBLE1BQzVCLE1BQU0sS0FBSztBQUFBLElBQ2YsRUFDSztBQUFBLE1BRUQsSUFBSSxVQUFVLE1BQU07QUFBQSxNQUVwQixLQUFLLHdCQUF3QixJQUFJLFFBQVEsU0FBUSxVQUFVLEdBQUk7QUFBQSxNQUMvRCxJQUFJO0FBQUEsUUFDQSxXQUFXLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxRQUFRLFVBQVU7QUFBQSxVQUN0RCxlQUFlO0FBQUEsUUFDbkIsQ0FBQyxHQUFHO0FBQUEsVUFDQSxLQUFLLGlCQUFpQixHQUFHLFFBQVE7QUFBQSxRQUNyQztBQUFBLFFBQ0EsS0FBSyxnQkFBZ0IsUUFBUTtBQUFBLFFBRWpDLE9BQU8sSUFBSTtBQUFBLFFBQ1AsS0FBSyxhQUFhLEdBQUcsSUFBSTtBQUFBLFFBQ3pCLFNBQVMsY0FBYztBQUFBO0FBQUEsTUFFM0IsS0FBSyx3QkFBd0I7QUFBQSxNQUM3QixRQUFRO0FBQUE7QUFBQSxJQUVaLE9BQU8sU0FBUyxNQUFNLEdBQUcsU0FBUyxXQUFXO0FBQUE7QUFBQSxFQUtqRCxXQUFXLEdBQUc7QUFBQSxJQUNWLElBQUksQ0FBQyxLQUFLLFdBQVcsR0FBRztBQUFBLE1BQ3BCLE9BQU8sQ0FBQztBQUFBLElBQ1o7QUFBQSxJQUNBLE1BQU0sV0FBVyxLQUFLLFNBQVM7QUFBQSxJQUMvQixJQUFJLEtBQUssY0FBYyxHQUFHO0FBQUEsTUFDdEIsT0FBTyxTQUFTLE1BQU0sR0FBRyxTQUFTLFdBQVc7QUFBQSxJQUNqRDtBQUFBLElBR0EsTUFBTSxXQUFXLEtBQUssU0FBUztBQUFBLElBQy9CLElBQUk7QUFBQSxNQUNBLFdBQVcsS0FBSyxLQUFLLElBQUksWUFBWSxVQUFVO0FBQUEsUUFDM0MsZUFBZTtBQUFBLE1BQ25CLENBQUMsR0FBRztBQUFBLFFBQ0EsS0FBSyxpQkFBaUIsR0FBRyxRQUFRO0FBQUEsTUFDckM7QUFBQSxNQUNBLEtBQUssZ0JBQWdCLFFBQVE7QUFBQSxNQUVqQyxPQUFPLElBQUk7QUFBQSxNQUNQLEtBQUssYUFBYSxHQUFHLElBQUk7QUFBQSxNQUN6QixTQUFTLGNBQWM7QUFBQTtBQUFBLElBRTNCLE9BQU8sU0FBUyxNQUFNLEdBQUcsU0FBUyxXQUFXO0FBQUE7QUFBQSxFQUVqRCxVQUFVLEdBQUc7QUFBQSxJQUNULElBQUksS0FBSyxRQUFRO0FBQUEsTUFDYixPQUFPO0FBQUEsSUFDWCxNQUFNLE9BQU8sT0FBTyxLQUFLO0FBQUEsSUFHekIsSUFBSSxFQUFFLFNBQVMsV0FBVyxTQUFTLFNBQVMsU0FBUyxRQUFRO0FBQUEsTUFDekQsT0FBTztBQUFBLElBQ1g7QUFBQSxJQUVBLE9BQU87QUFBQTtBQUFBLEVBRVgsVUFBVSxDQUFDLE1BQU0sWUFBWTtBQUFBLElBQ3pCLFFBQVMsS0FBSyxRQUFRLFdBQVcsU0FDN0IsRUFBRSxLQUFLLFFBQVEsYUFDZixDQUFDLEtBQUssSUFBSSxJQUFJLE1BQ2IsQ0FBQyxjQUFjLFdBQVcsSUFBSTtBQUFBO0FBQUEsT0FXakMsU0FBUSxHQUFHO0FBQUEsSUFDYixJQUFJLEtBQUs7QUFBQSxNQUNMLE9BQU8sS0FBSztBQUFBLElBQ2hCLEtBQUssY0FBYyxjQUFjLFVBQVUsS0FBSztBQUFBLE1BQzVDO0FBQUEsSUFDSixJQUFJO0FBQUEsTUFDQSxNQUFNLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxTQUFTLEtBQUssU0FBUyxDQUFDO0FBQUEsTUFDM0QsT0FBUSxLQUFLLFlBQVksS0FBSyxRQUFRLEVBQUU7QUFBQSxNQUU1QyxPQUFPLEdBQUc7QUFBQSxNQUNOLEtBQUssaUJBQWlCO0FBQUE7QUFBQTtBQUFBLEVBTTlCLFlBQVksR0FBRztBQUFBLElBQ1gsSUFBSSxLQUFLO0FBQUEsTUFDTCxPQUFPLEtBQUs7QUFBQSxJQUNoQixLQUFLLGNBQWMsY0FBYyxVQUFVLEtBQUs7QUFBQSxNQUM1QztBQUFBLElBQ0osSUFBSTtBQUFBLE1BQ0EsTUFBTSxLQUFLLEtBQUssSUFBSSxhQUFhLEtBQUssU0FBUyxDQUFDO0FBQUEsTUFDaEQsT0FBUSxLQUFLLFlBQVksS0FBSyxRQUFRLEVBQUU7QUFBQSxNQUU1QyxPQUFPLEdBQUc7QUFBQSxNQUNOLEtBQUssaUJBQWlCO0FBQUE7QUFBQTtBQUFBLEdBUzdCLFNBQVMsQ0FBQyxRQUFRO0FBQUEsSUFDZixJQUFJLFdBQVc7QUFBQSxNQUNYO0FBQUEsSUFDSixPQUFPLFFBQVE7QUFBQSxJQUNmLEtBQUssUUFBUTtBQUFBLElBQ2IsTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLENBQUM7QUFBQSxJQUMxQixJQUFJLEtBQUssQ0FBQztBQUFBLElBQ1YsSUFBSSxJQUFJO0FBQUEsSUFDUixPQUFPLEtBQUssRUFBRSxRQUFRO0FBQUEsTUFDbEIsUUFBUSxJQUFJLENBQUM7QUFBQSxNQUNiLEVBQUUsWUFBWSxHQUFHLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFDOUIsRUFBRSxpQkFBaUIsR0FBRyxLQUFLLEdBQUc7QUFBQSxNQUM5QixJQUFJLEVBQUU7QUFBQSxNQUNOLEdBQUcsS0FBSyxJQUFJO0FBQUEsSUFDaEI7QUFBQSxJQUVBLElBQUk7QUFBQSxJQUNKLE9BQU8sS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxHQUFHO0FBQUEsTUFDckMsRUFBRSxZQUFZO0FBQUEsTUFDZCxFQUFFLGlCQUFpQjtBQUFBLE1BQ25CLElBQUksRUFBRTtBQUFBLElBQ1Y7QUFBQTtBQUVSO0FBQUE7QUFPTyxNQUFNLGtCQUFrQixTQUFTO0FBQUEsRUFJcEMsTUFBTTtBQUFBLEVBSU4sV0FBVztBQUFBLEVBT1gsV0FBVyxDQUFDLE1BQU0sT0FBTyxTQUFTLE1BQU0sT0FBTyxRQUFRLFVBQVUsTUFBTTtBQUFBLElBQ25FLE1BQU0sTUFBTSxNQUFNLE1BQU0sT0FBTyxRQUFRLFVBQVUsSUFBSTtBQUFBO0FBQUEsRUFLekQsUUFBUSxDQUFDLE1BQU0sT0FBTyxTQUFTLE9BQU8sQ0FBQyxHQUFHO0FBQUEsSUFDdEMsT0FBTyxJQUFJLFVBQVUsTUFBTSxNQUFNLEtBQUssTUFBTSxLQUFLLE9BQU8sS0FBSyxRQUFRLEtBQUssY0FBYyxHQUFHLElBQUk7QUFBQTtBQUFBLEVBS25HLGFBQWEsQ0FBQyxPQUFNO0FBQUEsSUFDaEIsT0FBTyxNQUFNLE1BQU0sS0FBSSxFQUFFO0FBQUE7QUFBQSxFQUs3QixPQUFPLENBQUMsVUFBVTtBQUFBLElBQ2QsV0FBVyxXQUFXLFNBQVMsWUFBWSxDQUFDO0FBQUEsSUFDNUMsSUFBSSxhQUFhLEtBQUssS0FBSyxNQUFNO0FBQUEsTUFDN0IsT0FBTyxLQUFLO0FBQUEsSUFDaEI7QUFBQSxJQUVBLFlBQVksU0FBUyxTQUFTLE9BQU8sUUFBUSxLQUFLLEtBQUssR0FBRztBQUFBLE1BQ3RELElBQUksS0FBSyxTQUFTLFVBQVUsT0FBTyxHQUFHO0FBQUEsUUFDbEMsT0FBUSxLQUFLLE1BQU0sWUFBWTtBQUFBLE1BQ25DO0FBQUEsSUFDSjtBQUFBLElBRUEsT0FBUSxLQUFLLE1BQU0sWUFBWSxJQUFJLGdCQUFnQixVQUFVLElBQUksRUFBRTtBQUFBO0FBQUEsRUFLdkUsUUFBUSxDQUFDLFVBQVUsVUFBVSxLQUFLLEtBQUssTUFBTTtBQUFBLElBSXpDLFdBQVcsU0FDTixZQUFZLEVBQ1osUUFBUSxPQUFPLElBQUksRUFDbkIsUUFBUSxnQkFBZ0IsTUFBTTtBQUFBLElBQ25DLE9BQU8sYUFBYTtBQUFBO0FBRTVCO0FBQUE7QUFNTyxNQUFNLGtCQUFrQixTQUFTO0FBQUEsRUFJcEMsV0FBVztBQUFBLEVBSVgsTUFBTTtBQUFBLEVBT04sV0FBVyxDQUFDLE1BQU0sT0FBTyxTQUFTLE1BQU0sT0FBTyxRQUFRLFVBQVUsTUFBTTtBQUFBLElBQ25FLE1BQU0sTUFBTSxNQUFNLE1BQU0sT0FBTyxRQUFRLFVBQVUsSUFBSTtBQUFBO0FBQUEsRUFLekQsYUFBYSxDQUFDLE9BQU07QUFBQSxJQUNoQixPQUFPLE1BQUssV0FBVyxHQUFHLElBQUksTUFBTTtBQUFBO0FBQUEsRUFLeEMsT0FBTyxDQUFDLFdBQVc7QUFBQSxJQUNmLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFLaEIsUUFBUSxDQUFDLE1BQU0sT0FBTyxTQUFTLE9BQU8sQ0FBQyxHQUFHO0FBQUEsSUFDdEMsT0FBTyxJQUFJLFVBQVUsTUFBTSxNQUFNLEtBQUssTUFBTSxLQUFLLE9BQU8sS0FBSyxRQUFRLEtBQUssY0FBYyxHQUFHLElBQUk7QUFBQTtBQUV2RztBQUFBO0FBU08sTUFBTSxlQUFlO0FBQUEsRUFJeEI7QUFBQSxFQUlBO0FBQUEsRUFJQTtBQUFBLEVBSUE7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQU1BO0FBQUEsRUFDQTtBQUFBLEVBUUEsV0FBVyxDQUFDLE1BQU0sUUFBUSxJQUFJLEdBQUcsVUFBVSxRQUFPLFFBQVEsb0JBQW9CLEtBQUssTUFBTSxLQUFLLGNBQWUsQ0FBQyxHQUFHO0FBQUEsSUFDN0csS0FBSyxNQUFNLGFBQWEsRUFBRTtBQUFBLElBQzFCLElBQUksZUFBZSxPQUFPLElBQUksV0FBVyxTQUFTLEdBQUc7QUFBQSxNQUNqRCxNQUFNLGNBQWMsR0FBRztBQUFBLElBQzNCO0FBQUEsSUFHQSxNQUFNLFVBQVUsU0FBUyxRQUFRLEdBQUc7QUFBQSxJQUNwQyxLQUFLLFFBQVEsT0FBTyxPQUFPLElBQUk7QUFBQSxJQUMvQixLQUFLLFdBQVcsS0FBSyxjQUFjLE9BQU87QUFBQSxJQUMxQyxLQUFLLGdCQUFnQixJQUFJO0FBQUEsSUFDekIsS0FBSyxxQkFBcUIsSUFBSTtBQUFBLElBQzlCLEtBQUssWUFBWSxJQUFJLGNBQWMsaUJBQWlCO0FBQUEsSUFDcEQsTUFBTSxRQUFRLFFBQVEsVUFBVSxLQUFLLFNBQVMsTUFBTSxFQUFFLE1BQU0sSUFBRztBQUFBLElBRS9ELElBQUksTUFBTSxXQUFXLEtBQUssQ0FBQyxNQUFNLElBQUk7QUFBQSxNQUNqQyxNQUFNLElBQUk7QUFBQSxJQUNkO0FBQUEsSUFFQSxJQUFJLFdBQVcsV0FBVztBQUFBLE1BQ3RCLE1BQU0sSUFBSSxVQUFVLG9EQUFvRDtBQUFBLElBQzVFO0FBQUEsSUFFQSxLQUFLLFNBQVM7QUFBQSxJQUNkLEtBQUssT0FBTyxLQUFLLFFBQVEsS0FBSyxHQUFHO0FBQUEsSUFDakMsS0FBSyxNQUFNLEtBQUssWUFBWSxLQUFLO0FBQUEsSUFDakMsSUFBSSxPQUFPLEtBQUs7QUFBQSxJQUNoQixJQUFJLE1BQU0sTUFBTSxTQUFTO0FBQUEsSUFDekIsTUFBTSxVQUFVLFNBQVM7QUFBQSxJQUN6QixJQUFJLE1BQU0sS0FBSztBQUFBLElBQ2YsSUFBSSxXQUFXO0FBQUEsSUFDZixXQUFXLFFBQVEsT0FBTztBQUFBLE1BQ3RCLE1BQU0sSUFBSTtBQUFBLE1BQ1YsT0FBTyxLQUFLLE1BQU0sTUFBTTtBQUFBLFFBQ3BCLFVBQVUsSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLE9BQU87QUFBQSxRQUM5QyxlQUFlLElBQUksTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxHQUFHO0FBQUEsUUFDL0MsVUFBVyxRQUFRLFdBQVcsS0FBSyxXQUFXO0FBQUEsTUFDbEQsQ0FBQztBQUFBLE1BQ0QsV0FBVztBQUFBLElBQ2Y7QUFBQSxJQUNBLEtBQUssTUFBTTtBQUFBO0FBQUEsRUFLZixLQUFLLENBQUMsUUFBTyxLQUFLLEtBQUs7QUFBQSxJQUNuQixJQUFJLE9BQU8sVUFBUyxVQUFVO0FBQUEsTUFDMUIsUUFBTyxLQUFLLElBQUksUUFBUSxLQUFJO0FBQUEsSUFDaEM7QUFBQSxJQUNBLE9BQU8sTUFBSyxNQUFNO0FBQUE7QUFBQSxFQVF0QixhQUFhLEdBQUc7QUFBQSxJQUNaLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFXaEIsT0FBTyxJQUFJLE9BQU87QUFBQSxJQUdkLElBQUksSUFBSTtBQUFBLElBQ1IsU0FBUyxJQUFJLE1BQU0sU0FBUyxFQUFHLEtBQUssR0FBRyxLQUFLO0FBQUEsTUFDeEMsTUFBTSxJQUFJLE1BQU07QUFBQSxNQUNoQixJQUFJLENBQUMsS0FBSyxNQUFNO0FBQUEsUUFDWjtBQUFBLE1BQ0osSUFBSSxJQUFJLEdBQUcsS0FBSyxNQUFNO0FBQUEsTUFDdEIsSUFBSSxLQUFLLFdBQVcsQ0FBQyxHQUFHO0FBQUEsUUFDcEI7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLElBQ0EsTUFBTSxTQUFTLEtBQUssY0FBYyxJQUFJLENBQUM7QUFBQSxJQUN2QyxJQUFJLFdBQVcsV0FBVztBQUFBLE1BQ3RCLE9BQU87QUFBQSxJQUNYO0FBQUEsSUFDQSxNQUFNLFNBQVMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxFQUFFLFNBQVM7QUFBQSxJQUM1QyxLQUFLLGNBQWMsSUFBSSxHQUFHLE1BQU07QUFBQSxJQUNoQyxPQUFPO0FBQUE7QUFBQSxFQWFYLFlBQVksSUFBSSxPQUFPO0FBQUEsSUFHbkIsSUFBSSxJQUFJO0FBQUEsSUFDUixTQUFTLElBQUksTUFBTSxTQUFTLEVBQUcsS0FBSyxHQUFHLEtBQUs7QUFBQSxNQUN4QyxNQUFNLElBQUksTUFBTTtBQUFBLE1BQ2hCLElBQUksQ0FBQyxLQUFLLE1BQU07QUFBQSxRQUNaO0FBQUEsTUFDSixJQUFJLElBQUksR0FBRyxLQUFLLE1BQU07QUFBQSxNQUN0QixJQUFJLEtBQUssV0FBVyxDQUFDLEdBQUc7QUFBQSxRQUNwQjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsSUFDQSxNQUFNLFNBQVMsS0FBSyxtQkFBbUIsSUFBSSxDQUFDO0FBQUEsSUFDNUMsSUFBSSxXQUFXLFdBQVc7QUFBQSxNQUN0QixPQUFPO0FBQUEsSUFDWDtBQUFBLElBQ0EsTUFBTSxTQUFTLEtBQUssSUFBSSxRQUFRLENBQUMsRUFBRSxjQUFjO0FBQUEsSUFDakQsS0FBSyxtQkFBbUIsSUFBSSxHQUFHLE1BQU07QUFBQSxJQUNyQyxPQUFPO0FBQUE7QUFBQSxFQUtYLFFBQVEsQ0FBQyxRQUFRLEtBQUssS0FBSztBQUFBLElBQ3ZCLElBQUksT0FBTyxVQUFVLFVBQVU7QUFBQSxNQUMzQixRQUFRLEtBQUssSUFBSSxRQUFRLEtBQUs7QUFBQSxJQUNsQztBQUFBLElBQ0EsT0FBTyxNQUFNLFNBQVM7QUFBQTtBQUFBLEVBTTFCLGFBQWEsQ0FBQyxRQUFRLEtBQUssS0FBSztBQUFBLElBQzVCLElBQUksT0FBTyxVQUFVLFVBQVU7QUFBQSxNQUMzQixRQUFRLEtBQUssSUFBSSxRQUFRLEtBQUs7QUFBQSxJQUNsQztBQUFBLElBQ0EsT0FBTyxNQUFNLGNBQWM7QUFBQTtBQUFBLEVBSy9CLFFBQVEsQ0FBQyxRQUFRLEtBQUssS0FBSztBQUFBLElBQ3ZCLElBQUksT0FBTyxVQUFVLFVBQVU7QUFBQSxNQUMzQixRQUFRLEtBQUssSUFBSSxRQUFRLEtBQUs7QUFBQSxJQUNsQztBQUFBLElBQ0EsT0FBTyxNQUFNO0FBQUE7QUFBQSxFQUtqQixPQUFPLENBQUMsUUFBUSxLQUFLLEtBQUs7QUFBQSxJQUN0QixJQUFJLE9BQU8sVUFBVSxVQUFVO0FBQUEsTUFDM0IsUUFBUSxLQUFLLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDbEM7QUFBQSxJQUNBLFFBQVEsTUFBTSxVQUFVLE9BQU8sU0FBUztBQUFBO0FBQUEsT0FFdEMsUUFBTyxDQUFDLFFBQVEsS0FBSyxLQUFLLE9BQU87QUFBQSxJQUNuQyxlQUFlO0FBQUEsRUFDbkIsR0FBRztBQUFBLElBQ0MsSUFBSSxPQUFPLFVBQVUsVUFBVTtBQUFBLE1BQzNCLFFBQVEsS0FBSyxJQUFJLFFBQVEsS0FBSztBQUFBLElBQ2xDLEVBQ0ssU0FBSSxFQUFFLGlCQUFpQixXQUFXO0FBQUEsTUFDbkMsT0FBTztBQUFBLE1BQ1AsUUFBUSxLQUFLO0FBQUEsSUFDakI7QUFBQSxJQUNBLFFBQVEsa0JBQWtCO0FBQUEsSUFDMUIsSUFBSSxDQUFDLE1BQU0sV0FBVyxHQUFHO0FBQUEsTUFDckIsT0FBTyxDQUFDO0FBQUEsSUFDWixFQUNLO0FBQUEsTUFDRCxNQUFNLElBQUksTUFBTSxNQUFNLFFBQVE7QUFBQSxNQUM5QixPQUFPLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxPQUFLLEVBQUUsSUFBSTtBQUFBO0FBQUE7QUFBQSxFQUdwRCxXQUFXLENBQUMsUUFBUSxLQUFLLEtBQUssT0FBTztBQUFBLElBQ2pDLGVBQWU7QUFBQSxFQUNuQixHQUFHO0FBQUEsSUFDQyxJQUFJLE9BQU8sVUFBVSxVQUFVO0FBQUEsTUFDM0IsUUFBUSxLQUFLLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDbEMsRUFDSyxTQUFJLEVBQUUsaUJBQWlCLFdBQVc7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRLEtBQUs7QUFBQSxJQUNqQjtBQUFBLElBQ0EsUUFBUSxnQkFBZ0IsU0FBUztBQUFBLElBQ2pDLElBQUksQ0FBQyxNQUFNLFdBQVcsR0FBRztBQUFBLE1BQ3JCLE9BQU8sQ0FBQztBQUFBLElBQ1osRUFDSyxTQUFJLGVBQWU7QUFBQSxNQUNwQixPQUFPLE1BQU0sWUFBWTtBQUFBLElBQzdCLEVBQ0s7QUFBQSxNQUNELE9BQU8sTUFBTSxZQUFZLEVBQUUsSUFBSSxPQUFLLEVBQUUsSUFBSTtBQUFBO0FBQUE7QUFBQSxPQWtCNUMsTUFBSyxDQUFDLFFBQVEsS0FBSyxLQUFLO0FBQUEsSUFDMUIsSUFBSSxPQUFPLFVBQVUsVUFBVTtBQUFBLE1BQzNCLFFBQVEsS0FBSyxJQUFJLFFBQVEsS0FBSztBQUFBLElBQ2xDO0FBQUEsSUFDQSxPQUFPLE1BQU0sTUFBTTtBQUFBO0FBQUEsRUFLdkIsU0FBUyxDQUFDLFFBQVEsS0FBSyxLQUFLO0FBQUEsSUFDeEIsSUFBSSxPQUFPLFVBQVUsVUFBVTtBQUFBLE1BQzNCLFFBQVEsS0FBSyxJQUFJLFFBQVEsS0FBSztBQUFBLElBQ2xDO0FBQUEsSUFDQSxPQUFPLE1BQU0sVUFBVTtBQUFBO0FBQUEsT0FFckIsU0FBUSxDQUFDLFFBQVEsS0FBSyxPQUFPLGtCQUFrQjtBQUFBLElBQ2pELGVBQWU7QUFBQSxFQUNuQixHQUFHO0FBQUEsSUFDQyxJQUFJLE9BQU8sVUFBVSxVQUFVO0FBQUEsTUFDM0IsUUFBUSxLQUFLLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDbEMsRUFDSyxTQUFJLEVBQUUsaUJBQWlCLFdBQVc7QUFBQSxNQUNuQyxnQkFBZ0IsTUFBTTtBQUFBLE1BQ3RCLFFBQVEsS0FBSztBQUFBLElBQ2pCO0FBQUEsSUFDQSxNQUFNLElBQUksTUFBTSxNQUFNLFNBQVM7QUFBQSxJQUMvQixPQUFPLGdCQUFnQixJQUFJLEdBQUcsU0FBUztBQUFBO0FBQUEsRUFFM0MsWUFBWSxDQUFDLFFBQVEsS0FBSyxPQUFPLGtCQUFrQjtBQUFBLElBQy9DLGVBQWU7QUFBQSxFQUNuQixHQUFHO0FBQUEsSUFDQyxJQUFJLE9BQU8sVUFBVSxVQUFVO0FBQUEsTUFDM0IsUUFBUSxLQUFLLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDbEMsRUFDSyxTQUFJLEVBQUUsaUJBQWlCLFdBQVc7QUFBQSxNQUNuQyxnQkFBZ0IsTUFBTTtBQUFBLE1BQ3RCLFFBQVEsS0FBSztBQUFBLElBQ2pCO0FBQUEsSUFDQSxNQUFNLElBQUksTUFBTSxhQUFhO0FBQUEsSUFDN0IsT0FBTyxnQkFBZ0IsSUFBSSxHQUFHLFNBQVM7QUFBQTtBQUFBLE9BRXJDLFNBQVEsQ0FBQyxRQUFRLEtBQUssT0FBTyxrQkFBa0I7QUFBQSxJQUNqRCxlQUFlO0FBQUEsRUFDbkIsR0FBRztBQUFBLElBQ0MsSUFBSSxPQUFPLFVBQVUsVUFBVTtBQUFBLE1BQzNCLFFBQVEsS0FBSyxJQUFJLFFBQVEsS0FBSztBQUFBLElBQ2xDLEVBQ0ssU0FBSSxFQUFFLGlCQUFpQixXQUFXO0FBQUEsTUFDbkMsZ0JBQWdCLE1BQU07QUFBQSxNQUN0QixRQUFRLEtBQUs7QUFBQSxJQUNqQjtBQUFBLElBQ0EsTUFBTSxJQUFJLE1BQU0sTUFBTSxTQUFTO0FBQUEsSUFDL0IsT0FBTyxnQkFBZ0IsSUFBSSxHQUFHLFNBQVM7QUFBQTtBQUFBLEVBRTNDLFlBQVksQ0FBQyxRQUFRLEtBQUssT0FBTyxrQkFBa0I7QUFBQSxJQUMvQyxlQUFlO0FBQUEsRUFDbkIsR0FBRztBQUFBLElBQ0MsSUFBSSxPQUFPLFVBQVUsVUFBVTtBQUFBLE1BQzNCLFFBQVEsS0FBSyxJQUFJLFFBQVEsS0FBSztBQUFBLElBQ2xDLEVBQ0ssU0FBSSxFQUFFLGlCQUFpQixXQUFXO0FBQUEsTUFDbkMsZ0JBQWdCLE1BQU07QUFBQSxNQUN0QixRQUFRLEtBQUs7QUFBQSxJQUNqQjtBQUFBLElBQ0EsTUFBTSxJQUFJLE1BQU0sYUFBYTtBQUFBLElBQzdCLE9BQU8sZ0JBQWdCLElBQUksR0FBRyxTQUFTO0FBQUE7QUFBQSxPQUVyQyxLQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssT0FBTyxDQUFDLEdBQUc7QUFBQSxJQUNwQyxJQUFJLE9BQU8sVUFBVSxVQUFVO0FBQUEsTUFDM0IsUUFBUSxLQUFLLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDbEMsRUFDSyxTQUFJLEVBQUUsaUJBQWlCLFdBQVc7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRLEtBQUs7QUFBQSxJQUNqQjtBQUFBLElBQ0EsUUFBUSxnQkFBZ0IsTUFBTSxTQUFTLE9BQU8saUJBQVEsZUFBZ0I7QUFBQSxJQUN0RSxNQUFNLFVBQVUsQ0FBQztBQUFBLElBQ2pCLElBQUksQ0FBQyxXQUFVLFFBQU8sS0FBSyxHQUFHO0FBQUEsTUFDMUIsUUFBUSxLQUFLLGdCQUFnQixRQUFRLE1BQU0sU0FBUyxDQUFDO0FBQUEsSUFDekQ7QUFBQSxJQUNBLE1BQU0sT0FBTyxJQUFJO0FBQUEsSUFDakIsTUFBTSxPQUFPLENBQUMsS0FBSyxPQUFPO0FBQUEsTUFDdEIsS0FBSyxJQUFJLEdBQUc7QUFBQSxNQUNaLElBQUksVUFBVSxDQUFDLElBQUksWUFBWTtBQUFBLFFBRTNCLElBQUksSUFBSTtBQUFBLFVBQ0osT0FBTyxHQUFHLEVBQUU7QUFBQSxRQUNoQjtBQUFBLFFBRUEsSUFBSSxNQUFNLFFBQVE7QUFBQSxRQUNsQixJQUFJLENBQUM7QUFBQSxVQUNELE9BQU8sR0FBRztBQUFBLFFBQ2QsTUFBTSxPQUFPLE1BQU07QUFBQSxVQUNmLElBQUksRUFBRSxRQUFRLEdBQUc7QUFBQSxZQUNiLEdBQUc7QUFBQSxVQUNQO0FBQUE7QUFBQSxRQUVKLFdBQVcsS0FBSyxTQUFTO0FBQUEsVUFDckIsSUFBSSxDQUFDLFdBQVUsUUFBTyxDQUFDLEdBQUc7QUFBQSxZQUN0QixRQUFRLEtBQUssZ0JBQWdCLElBQUksRUFBRSxTQUFTLENBQUM7QUFBQSxVQUNqRDtBQUFBLFVBQ0EsSUFBSSxVQUFVLEVBQUUsZUFBZSxHQUFHO0FBQUEsWUFDOUIsRUFBRSxTQUFTLEVBQ04sS0FBSyxPQUFNLEdBQUcsVUFBVSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUUsRUFDMUMsS0FBSyxPQUFLLEdBQUcsV0FBVyxNQUFNLFVBQVUsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQztBQUFBLFVBQzNFLEVBQ0s7QUFBQSxZQUNELElBQUksRUFBRSxXQUFXLE1BQU0sVUFBVSxHQUFHO0FBQUEsY0FDaEMsS0FBSyxHQUFHLElBQUk7QUFBQSxZQUNoQixFQUNLO0FBQUEsY0FDRCxLQUFLO0FBQUE7QUFBQTtBQUFBLFFBR2pCO0FBQUEsU0FDRCxJQUFJO0FBQUE7QUFBQSxJQUVYLE1BQU0sUUFBUTtBQUFBLElBQ2QsT0FBTyxJQUFJLFFBQVEsQ0FBQyxLQUFLLFFBQVE7QUFBQSxNQUM3QixLQUFLLE9BQU8sUUFBTTtBQUFBLFFBRWQsSUFBSTtBQUFBLFVBQ0EsT0FBTyxJQUFJLEVBQUU7QUFBQSxRQUVqQixJQUFJLE9BQU87QUFBQSxPQUNkO0FBQUEsS0FDSjtBQUFBO0FBQUEsRUFFTCxRQUFRLENBQUMsUUFBUSxLQUFLLEtBQUssT0FBTyxDQUFDLEdBQUc7QUFBQSxJQUNsQyxJQUFJLE9BQU8sVUFBVSxVQUFVO0FBQUEsTUFDM0IsUUFBUSxLQUFLLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDbEMsRUFDSyxTQUFJLEVBQUUsaUJBQWlCLFdBQVc7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRLEtBQUs7QUFBQSxJQUNqQjtBQUFBLElBQ0EsUUFBUSxnQkFBZ0IsTUFBTSxTQUFTLE9BQU8saUJBQVEsZUFBZ0I7QUFBQSxJQUN0RSxNQUFNLFVBQVUsQ0FBQztBQUFBLElBQ2pCLElBQUksQ0FBQyxXQUFVLFFBQU8sS0FBSyxHQUFHO0FBQUEsTUFDMUIsUUFBUSxLQUFLLGdCQUFnQixRQUFRLE1BQU0sU0FBUyxDQUFDO0FBQUEsSUFDekQ7QUFBQSxJQUNBLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFBQSxJQUM1QixXQUFXLE9BQU8sTUFBTTtBQUFBLE1BQ3BCLE1BQU0sVUFBVSxJQUFJLFlBQVk7QUFBQSxNQUNoQyxXQUFXLEtBQUssU0FBUztBQUFBLFFBQ3JCLElBQUksQ0FBQyxXQUFVLFFBQU8sQ0FBQyxHQUFHO0FBQUEsVUFDdEIsUUFBUSxLQUFLLGdCQUFnQixJQUFJLEVBQUUsU0FBUyxDQUFDO0FBQUEsUUFDakQ7QUFBQSxRQUNBLElBQUksSUFBSTtBQUFBLFFBQ1IsSUFBSSxFQUFFLGVBQWUsR0FBRztBQUFBLFVBQ3BCLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxhQUFhO0FBQUEsWUFDaEM7QUFBQSxVQUNKLElBQUksRUFBRSxVQUFVO0FBQUEsWUFDWixFQUFFLFVBQVU7QUFBQSxRQUNwQjtBQUFBLFFBQ0EsSUFBSSxFQUFFLFdBQVcsTUFBTSxVQUFVLEdBQUc7QUFBQSxVQUNoQyxLQUFLLElBQUksQ0FBQztBQUFBLFFBQ2Q7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUEsR0FXVixPQUFPLGNBQWMsR0FBRztBQUFBLElBQ3JCLE9BQU8sS0FBSyxRQUFRO0FBQUE7QUFBQSxFQUV4QixPQUFPLENBQUMsUUFBUSxLQUFLLEtBQUssVUFBVSxDQUFDLEdBQUc7QUFBQSxJQUlwQyxJQUFJLE9BQU8sVUFBVSxVQUFVO0FBQUEsTUFDM0IsUUFBUSxLQUFLLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDbEMsRUFDSyxTQUFJLEVBQUUsaUJBQWlCLFdBQVc7QUFBQSxNQUNuQyxVQUFVO0FBQUEsTUFDVixRQUFRLEtBQUs7QUFBQSxJQUNqQjtBQUFBLElBQ0EsT0FBTyxLQUFLLE9BQU8sT0FBTyxPQUFPLEVBQUUsT0FBTyxlQUFlO0FBQUE7QUFBQSxHQU81RCxPQUFPLFNBQVMsR0FBRztBQUFBLElBQ2hCLE9BQU8sS0FBSyxZQUFZO0FBQUE7QUFBQSxHQUUzQixXQUFXLENBQUMsUUFBUSxLQUFLLEtBQUssT0FBTyxDQUFDLEdBQUc7QUFBQSxJQUN0QyxJQUFJLE9BQU8sVUFBVSxVQUFVO0FBQUEsTUFDM0IsUUFBUSxLQUFLLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDbEMsRUFDSyxTQUFJLEVBQUUsaUJBQWlCLFdBQVc7QUFBQSxNQUNuQyxPQUFPO0FBQUEsTUFDUCxRQUFRLEtBQUs7QUFBQSxJQUNqQjtBQUFBLElBQ0EsUUFBUSxnQkFBZ0IsTUFBTSxTQUFTLE9BQU8saUJBQVEsZUFBZ0I7QUFBQSxJQUN0RSxJQUFJLENBQUMsV0FBVSxRQUFPLEtBQUssR0FBRztBQUFBLE1BQzFCLE1BQU0sZ0JBQWdCLFFBQVEsTUFBTSxTQUFTO0FBQUEsSUFDakQ7QUFBQSxJQUNBLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7QUFBQSxJQUM1QixXQUFXLE9BQU8sTUFBTTtBQUFBLE1BQ3BCLE1BQU0sVUFBVSxJQUFJLFlBQVk7QUFBQSxNQUNoQyxXQUFXLEtBQUssU0FBUztBQUFBLFFBQ3JCLElBQUksQ0FBQyxXQUFVLFFBQU8sQ0FBQyxHQUFHO0FBQUEsVUFDdEIsTUFBTSxnQkFBZ0IsSUFBSSxFQUFFLFNBQVM7QUFBQSxRQUN6QztBQUFBLFFBQ0EsSUFBSSxJQUFJO0FBQUEsUUFDUixJQUFJLEVBQUUsZUFBZSxHQUFHO0FBQUEsVUFDcEIsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFLGFBQWE7QUFBQSxZQUNoQztBQUFBLFVBQ0osSUFBSSxFQUFFLFVBQVU7QUFBQSxZQUNaLEVBQUUsVUFBVTtBQUFBLFFBQ3BCO0FBQUEsUUFDQSxJQUFJLEVBQUUsV0FBVyxNQUFNLFVBQVUsR0FBRztBQUFBLFVBQ2hDLEtBQUssSUFBSSxDQUFDO0FBQUEsUUFDZDtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUE7QUFBQSxFQUVKLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxPQUFPLENBQUMsR0FBRztBQUFBLElBQ2hDLElBQUksT0FBTyxVQUFVLFVBQVU7QUFBQSxNQUMzQixRQUFRLEtBQUssSUFBSSxRQUFRLEtBQUs7QUFBQSxJQUNsQyxFQUNLLFNBQUksRUFBRSxpQkFBaUIsV0FBVztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVEsS0FBSztBQUFBLElBQ2pCO0FBQUEsSUFDQSxRQUFRLGdCQUFnQixNQUFNLFNBQVMsT0FBTyxpQkFBUSxlQUFnQjtBQUFBLElBQ3RFLE1BQU0sVUFBVSxJQUFJLFNBQVMsRUFBRSxZQUFZLEtBQUssQ0FBQztBQUFBLElBQ2pELElBQUksQ0FBQyxXQUFVLFFBQU8sS0FBSyxHQUFHO0FBQUEsTUFDMUIsUUFBUSxNQUFNLGdCQUFnQixRQUFRLE1BQU0sU0FBUyxDQUFDO0FBQUEsSUFDMUQ7QUFBQSxJQUNBLE1BQU0sT0FBTyxJQUFJO0FBQUEsSUFDakIsTUFBTSxRQUFRLENBQUMsS0FBSztBQUFBLElBQ3BCLElBQUksYUFBYTtBQUFBLElBQ2pCLE1BQU0sV0FBVSxNQUFNO0FBQUEsTUFDbEIsSUFBSSxTQUFTO0FBQUEsTUFDYixPQUFPLENBQUMsUUFBUTtBQUFBLFFBQ1osTUFBTSxNQUFNLE1BQU0sTUFBTTtBQUFBLFFBQ3hCLElBQUksQ0FBQyxLQUFLO0FBQUEsVUFDTixJQUFJLGVBQWU7QUFBQSxZQUNmLFFBQVEsSUFBSTtBQUFBLFVBQ2hCO0FBQUEsUUFDSjtBQUFBLFFBQ0E7QUFBQSxRQUNBLEtBQUssSUFBSSxHQUFHO0FBQUEsUUFDWixNQUFNLFlBQVksQ0FBQyxJQUFJLFNBQVMsZUFBZSxVQUFVO0FBQUEsVUFFckQsSUFBSTtBQUFBLFlBQ0EsT0FBTyxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQUEsVUFFbkMsSUFBSSxVQUFVLENBQUMsY0FBYztBQUFBLFlBQ3pCLE1BQU0sV0FBVyxDQUFDO0FBQUEsWUFDbEIsV0FBVyxLQUFLLFNBQVM7QUFBQSxjQUNyQixJQUFJLEVBQUUsZUFBZSxHQUFHO0FBQUEsZ0JBQ3BCLFNBQVMsS0FBSyxFQUNULFNBQVMsRUFDVCxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFBQSxjQUNwRDtBQUFBLFlBQ0o7QUFBQSxZQUNBLElBQUksU0FBUyxRQUFRO0FBQUEsY0FDakIsUUFBUSxJQUFJLFFBQVEsRUFBRSxLQUFLLE1BQU0sVUFBVSxNQUFNLFNBQVMsSUFBSSxDQUFDO0FBQUEsY0FDL0Q7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFVBQ0EsV0FBVyxLQUFLLFNBQVM7QUFBQSxZQUNyQixJQUFJLE1BQU0sQ0FBQyxXQUFVLFFBQU8sQ0FBQyxJQUFJO0FBQUEsY0FDN0IsSUFBSSxDQUFDLFFBQVEsTUFBTSxnQkFBZ0IsSUFBSSxFQUFFLFNBQVMsQ0FBQyxHQUFHO0FBQUEsZ0JBQ2xELFNBQVM7QUFBQSxjQUNiO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxVQUNBO0FBQUEsVUFDQSxXQUFXLEtBQUssU0FBUztBQUFBLFlBQ3JCLE1BQU0sSUFBSSxFQUFFLGVBQWUsS0FBSztBQUFBLFlBQ2hDLElBQUksRUFBRSxXQUFXLE1BQU0sVUFBVSxHQUFHO0FBQUEsY0FDaEMsTUFBTSxLQUFLLENBQUM7QUFBQSxZQUNoQjtBQUFBLFVBQ0o7QUFBQSxVQUNBLElBQUksVUFBVSxDQUFDLFFBQVEsU0FBUztBQUFBLFlBQzVCLFFBQVEsS0FBSyxTQUFTLFFBQU87QUFBQSxVQUNqQyxFQUNLLFNBQUksQ0FBQyxNQUFNO0FBQUEsWUFDWixTQUFRO0FBQUEsVUFDWjtBQUFBO0FBQUEsUUFHSixJQUFJLE9BQU87QUFBQSxRQUNYLElBQUksVUFBVSxXQUFXLElBQUk7QUFBQSxRQUM3QixPQUFPO0FBQUEsTUFDWDtBQUFBO0FBQUEsSUFFSixTQUFRO0FBQUEsSUFDUixPQUFPO0FBQUE7QUFBQSxFQUVYLFVBQVUsQ0FBQyxRQUFRLEtBQUssS0FBSyxPQUFPLENBQUMsR0FBRztBQUFBLElBQ3BDLElBQUksT0FBTyxVQUFVLFVBQVU7QUFBQSxNQUMzQixRQUFRLEtBQUssSUFBSSxRQUFRLEtBQUs7QUFBQSxJQUNsQyxFQUNLLFNBQUksRUFBRSxpQkFBaUIsV0FBVztBQUFBLE1BQ25DLE9BQU87QUFBQSxNQUNQLFFBQVEsS0FBSztBQUFBLElBQ2pCO0FBQUEsSUFDQSxRQUFRLGdCQUFnQixNQUFNLFNBQVMsT0FBTyxpQkFBUSxlQUFnQjtBQUFBLElBQ3RFLE1BQU0sVUFBVSxJQUFJLFNBQVMsRUFBRSxZQUFZLEtBQUssQ0FBQztBQUFBLElBQ2pELE1BQU0sT0FBTyxJQUFJO0FBQUEsSUFDakIsSUFBSSxDQUFDLFdBQVUsUUFBTyxLQUFLLEdBQUc7QUFBQSxNQUMxQixRQUFRLE1BQU0sZ0JBQWdCLFFBQVEsTUFBTSxTQUFTLENBQUM7QUFBQSxJQUMxRDtBQUFBLElBQ0EsTUFBTSxRQUFRLENBQUMsS0FBSztBQUFBLElBQ3BCLElBQUksYUFBYTtBQUFBLElBQ2pCLE1BQU0sV0FBVSxNQUFNO0FBQUEsTUFDbEIsSUFBSSxTQUFTO0FBQUEsTUFDYixPQUFPLENBQUMsUUFBUTtBQUFBLFFBQ1osTUFBTSxNQUFNLE1BQU0sTUFBTTtBQUFBLFFBQ3hCLElBQUksQ0FBQyxLQUFLO0FBQUEsVUFDTixJQUFJLGVBQWU7QUFBQSxZQUNmLFFBQVEsSUFBSTtBQUFBLFVBQ2hCO0FBQUEsUUFDSjtBQUFBLFFBQ0E7QUFBQSxRQUNBLEtBQUssSUFBSSxHQUFHO0FBQUEsUUFDWixNQUFNLFVBQVUsSUFBSSxZQUFZO0FBQUEsUUFDaEMsV0FBVyxLQUFLLFNBQVM7QUFBQSxVQUNyQixJQUFJLENBQUMsV0FBVSxRQUFPLENBQUMsR0FBRztBQUFBLFlBQ3RCLElBQUksQ0FBQyxRQUFRLE1BQU0sZ0JBQWdCLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRztBQUFBLGNBQ2xELFNBQVM7QUFBQSxZQUNiO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsUUFDQSxXQUFXLEtBQUssU0FBUztBQUFBLFVBQ3JCLElBQUksSUFBSTtBQUFBLFVBQ1IsSUFBSSxFQUFFLGVBQWUsR0FBRztBQUFBLFlBQ3BCLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxhQUFhO0FBQUEsY0FDaEM7QUFBQSxZQUNKLElBQUksRUFBRSxVQUFVO0FBQUEsY0FDWixFQUFFLFVBQVU7QUFBQSxVQUNwQjtBQUFBLFVBQ0EsSUFBSSxFQUFFLFdBQVcsTUFBTSxVQUFVLEdBQUc7QUFBQSxZQUNoQyxNQUFNLEtBQUssQ0FBQztBQUFBLFVBQ2hCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxNQUNBLElBQUksVUFBVSxDQUFDLFFBQVE7QUFBQSxRQUNuQixRQUFRLEtBQUssU0FBUyxRQUFPO0FBQUE7QUFBQSxJQUVyQyxTQUFRO0FBQUEsSUFDUixPQUFPO0FBQUE7QUFBQSxFQUVYLEtBQUssQ0FBQyxRQUFPLEtBQUssS0FBSztBQUFBLElBQ25CLE1BQU0sU0FBUyxLQUFLO0FBQUEsSUFDcEIsS0FBSyxNQUFNLE9BQU8sVUFBUyxXQUFXLEtBQUssSUFBSSxRQUFRLEtBQUksSUFBSTtBQUFBLElBQy9ELEtBQUssSUFBSSxVQUFVLE1BQU07QUFBQTtBQUVqQztBQUFBO0FBT08sTUFBTSx3QkFBd0IsZUFBZTtBQUFBLEVBSWhELE1BQU07QUFBQSxFQUNOLFdBQVcsQ0FBQyxNQUFNLFFBQVEsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHO0FBQUEsSUFDeEMsUUFBUSxTQUFTLFNBQVM7QUFBQSxJQUMxQixNQUFNLEtBQUssT0FBTyxNQUFNLEtBQUssTUFBTSxPQUFPLENBQUM7QUFBQSxJQUMzQyxLQUFLLFNBQVM7QUFBQSxJQUNkLFNBQVMsSUFBSSxLQUFLLElBQUssR0FBRyxJQUFJLEVBQUUsUUFBUTtBQUFBLE1BQ3BDLEVBQUUsU0FBUyxLQUFLO0FBQUEsSUFDcEI7QUFBQTtBQUFBLEVBS0osYUFBYSxDQUFDLEtBQUs7QUFBQSxJQUlmLE9BQU8sTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLFlBQVk7QUFBQTtBQUFBLEVBSzdDLE9BQU8sQ0FBQyxJQUFJO0FBQUEsSUFDUixPQUFPLElBQUksVUFBVSxLQUFLLFVBQVUsT0FBTyxXQUFXLEtBQUssT0FBTyxLQUFLLFFBQVEsS0FBSyxjQUFjLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFBQTtBQUFBLEVBSy9HLFVBQVUsQ0FBQyxHQUFHO0FBQUEsSUFDVixPQUFRLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBRSxXQUFXLElBQUksS0FBSyxrQkFBa0IsS0FBSyxDQUFDO0FBQUE7QUFFbkY7QUFBQTtBQVFPLE1BQU0sd0JBQXdCLGVBQWU7QUFBQSxFQUloRCxNQUFNO0FBQUEsRUFDTixXQUFXLENBQUMsTUFBTSxRQUFRLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRztBQUFBLElBQ3hDLFFBQVEsU0FBUyxVQUFVO0FBQUEsSUFDM0IsTUFBTSxLQUFLLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQUEsSUFDMUMsS0FBSyxTQUFTO0FBQUE7QUFBQSxFQUtsQixhQUFhLENBQUMsTUFBTTtBQUFBLElBQ2hCLE9BQU87QUFBQTtBQUFBLEVBS1gsT0FBTyxDQUFDLElBQUk7QUFBQSxJQUNSLE9BQU8sSUFBSSxVQUFVLEtBQUssVUFBVSxPQUFPLFdBQVcsS0FBSyxPQUFPLEtBQUssUUFBUSxLQUFLLGNBQWMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUFBO0FBQUEsRUFLL0csVUFBVSxDQUFDLEdBQUc7QUFBQSxJQUNWLE9BQU8sRUFBRSxXQUFXLEdBQUc7QUFBQTtBQUUvQjtBQUFBO0FBU08sTUFBTSx5QkFBeUIsZ0JBQWdCO0FBQUEsRUFDbEQsV0FBVyxDQUFDLE1BQU0sUUFBUSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUc7QUFBQSxJQUN4QyxRQUFRLFNBQVMsU0FBUztBQUFBLElBQzFCLE1BQU0sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQUE7QUFFdEM7QUFNTyxJQUFNLE9BQU8sUUFBUSxhQUFhLFVBQVUsWUFBWTtBQU94RCxJQUFNLGFBQWEsUUFBUSxhQUFhLFVBQVUsa0JBQ25ELFFBQVEsYUFBYSxXQUFXLG1CQUM1Qjs7O0FFMzdEVixJQUFNLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxVQUFVO0FBQzNDLElBQU0sYUFBYSxDQUFDLE9BQU8sR0FBRyxVQUFVO0FBQUE7QUFLakMsTUFBTSxRQUFRO0FBQUEsRUFDakI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLGtCQUFrQjtBQUFBLEVBQ2xCLFdBQVcsQ0FBQyxhQUFhLFVBQVUsT0FBTyxVQUFVO0FBQUEsSUFDaEQsSUFBSSxDQUFDLGNBQWMsV0FBVyxHQUFHO0FBQUEsTUFDN0IsTUFBTSxJQUFJLFVBQVUsb0JBQW9CO0FBQUEsSUFDNUM7QUFBQSxJQUNBLElBQUksQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUFBLE1BQ3ZCLE1BQU0sSUFBSSxVQUFVLGlCQUFpQjtBQUFBLElBQ3pDO0FBQUEsSUFDQSxJQUFJLFNBQVMsV0FBVyxZQUFZLFFBQVE7QUFBQSxNQUN4QyxNQUFNLElBQUksVUFBVSwrQ0FBK0M7QUFBQSxJQUN2RTtBQUFBLElBQ0EsS0FBSyxTQUFTLFlBQVk7QUFBQSxJQUMxQixJQUFJLFFBQVEsS0FBSyxTQUFTLEtBQUssUUFBUTtBQUFBLE1BQ25DLE1BQU0sSUFBSSxVQUFVLG9CQUFvQjtBQUFBLElBQzVDO0FBQUEsSUFDQSxLQUFLLGVBQWU7QUFBQSxJQUNwQixLQUFLLFlBQVk7QUFBQSxJQUNqQixLQUFLLFNBQVM7QUFBQSxJQUNkLEtBQUssWUFBWTtBQUFBLElBRWpCLElBQUksS0FBSyxXQUFXLEdBQUc7QUFBQSxNQVNuQixJQUFJLEtBQUssTUFBTSxHQUFHO0FBQUEsUUFFZCxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sU0FBUyxLQUFLO0FBQUEsUUFDeEMsT0FBTyxJQUFJLElBQUksSUFBSSxPQUFPLFNBQVMsS0FBSztBQUFBLFFBQ3hDLElBQUksTUFBTSxPQUFPLElBQUk7QUFBQSxVQUVqQixNQUFNLE1BQU07QUFBQSxVQUNaLE1BQU0sTUFBTTtBQUFBLFFBQ2hCO0FBQUEsUUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUc7QUFBQSxRQUN2QyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUc7QUFBQSxRQUN2QyxLQUFLLGVBQWUsQ0FBQyxHQUFHLEdBQUcsS0FBSztBQUFBLFFBQ2hDLEtBQUssWUFBWSxDQUFDLEdBQUcsR0FBRyxLQUFLO0FBQUEsUUFDN0IsS0FBSyxTQUFTLEtBQUssYUFBYTtBQUFBLE1BQ3BDLEVBQ0ssU0FBSSxLQUFLLFFBQVEsS0FBSyxLQUFLLFdBQVcsR0FBRztBQUFBLFFBQzFDLE9BQU8sT0FBTyxTQUFTLEtBQUs7QUFBQSxRQUM1QixPQUFPLE9BQU8sU0FBUyxLQUFLO0FBQUEsUUFDNUIsSUFBSSxNQUFNLE9BQU8sSUFBSTtBQUFBLFVBRWpCLE1BQU0sTUFBTTtBQUFBLFVBQ1osTUFBTSxNQUFNO0FBQUEsUUFDaEI7QUFBQSxRQUNBLE1BQU0sSUFBSSxLQUFLO0FBQUEsUUFDZixNQUFNLElBQUksS0FBSztBQUFBLFFBQ2YsS0FBSyxlQUFlLENBQUMsR0FBRyxHQUFHLEtBQUs7QUFBQSxRQUNoQyxLQUFLLFlBQVksQ0FBQyxHQUFHLEdBQUcsS0FBSztBQUFBLFFBQzdCLEtBQUssU0FBUyxLQUFLLGFBQWE7QUFBQSxNQUNwQztBQUFBLElBQ0o7QUFBQTtBQUFBLEVBS0osT0FBTyxHQUFHO0FBQUEsSUFDTixPQUFPLEtBQUssYUFBYSxLQUFLO0FBQUE7QUFBQSxFQUtsQyxRQUFRLEdBQUc7QUFBQSxJQUNQLE9BQU8sT0FBTyxLQUFLLGFBQWEsS0FBSyxZQUFZO0FBQUE7QUFBQSxFQUtyRCxVQUFVLEdBQUc7QUFBQSxJQUNULE9BQU8sS0FBSyxhQUFhLEtBQUssWUFBWTtBQUFBO0FBQUEsRUFLOUMsUUFBUSxHQUFHO0FBQUEsSUFDUCxPQUFPLEtBQUssYUFBYSxLQUFLLG1CQUFtQjtBQUFBO0FBQUEsRUFLckQsVUFBVSxHQUFHO0FBQUEsSUFDVCxPQUFRLEtBQUssY0FDVCxLQUFLLGdCQUNBLEtBQUssV0FBVyxJQUNiLEtBQUssV0FBVyxJQUNaLEtBQUssVUFBVSxLQUFLLEtBQUssVUFBVSxNQUFNLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFDbEQsS0FBSyxVQUFVLEtBQUssR0FBRyxJQUMzQixLQUFLLFVBQVUsTUFBTSxLQUFLLE1BQU0sRUFBRSxLQUFLLEdBQUc7QUFBQTtBQUFBLEVBSzVELE9BQU8sR0FBRztBQUFBLElBQ04sT0FBTyxLQUFLLFNBQVMsS0FBSyxTQUFTO0FBQUE7QUFBQSxFQUt2QyxJQUFJLEdBQUc7QUFBQSxJQUNILElBQUksS0FBSyxVQUFVO0FBQUEsTUFDZixPQUFPLEtBQUs7QUFBQSxJQUNoQixJQUFJLENBQUMsS0FBSyxRQUFRO0FBQUEsTUFDZCxPQUFRLEtBQUssUUFBUTtBQUFBLElBQ3pCLEtBQUssUUFBUSxJQUFJLFFBQVEsS0FBSyxjQUFjLEtBQUssV0FBVyxLQUFLLFNBQVMsR0FBRyxLQUFLLFNBQVM7QUFBQSxJQUMzRixLQUFLLE1BQU0sY0FBYyxLQUFLO0FBQUEsSUFDOUIsS0FBSyxNQUFNLFNBQVMsS0FBSztBQUFBLElBQ3pCLEtBQUssTUFBTSxXQUFXLEtBQUs7QUFBQSxJQUMzQixPQUFPLEtBQUs7QUFBQTtBQUFBLEVBS2hCLEtBQUssR0FBRztBQUFBLElBQ0osTUFBTSxLQUFLLEtBQUs7QUFBQSxJQUNoQixPQUFPLEtBQUssV0FBVyxZQUNuQixLQUFLLFNBQ0YsS0FBSyxTQUNKLEtBQUssY0FBYyxXQUNmLEtBQUssV0FBVyxLQUNoQixHQUFHLE9BQU8sTUFDVixHQUFHLE9BQU8sTUFDVixPQUFPLEdBQUcsT0FBTyxZQUNqQixDQUFDLENBQUMsR0FBRyxNQUNMLE9BQU8sR0FBRyxPQUFPLFlBQ2pCLENBQUMsQ0FBQyxHQUFHO0FBQUE7QUFBQSxFQVVyQixPQUFPLEdBQUc7QUFBQSxJQUNOLE1BQU0sS0FBSyxLQUFLO0FBQUEsSUFDaEIsT0FBTyxLQUFLLGFBQWEsWUFDckIsS0FBSyxXQUNGLEtBQUssV0FDSixLQUFLLGNBQWMsV0FDZixLQUFLLFdBQVcsS0FDaEIsS0FBSyxTQUFTLEtBQ2QsT0FBTyxHQUFHLE9BQU8sWUFDakIsWUFBWSxLQUFLLEdBQUcsRUFBRTtBQUFBO0FBQUEsRUFRdEMsVUFBVSxHQUFHO0FBQUEsSUFDVCxNQUFNLEtBQUssS0FBSztBQUFBLElBQ2hCLE9BQU8sS0FBSyxnQkFBZ0IsWUFDeEIsS0FBSyxjQUNGLEtBQUssY0FDSCxHQUFHLE9BQU8sTUFBTSxHQUFHLFNBQVMsS0FDekIsS0FBSyxRQUFRLEtBQ2IsS0FBSyxNQUFNO0FBQUE7QUFBQSxFQUszQixJQUFJLEdBQUc7QUFBQSxJQUNILE1BQU0sSUFBSSxLQUFLLGFBQWE7QUFBQSxJQUM1QixPQUFRLE9BQU8sTUFBTSxZQUFZLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVyxJQUNsRSxJQUNFO0FBQUE7QUFBQSxFQU1WLG1CQUFtQixHQUFHO0FBQUEsSUFDbEIsT0FBTyxFQUFFLEtBQUssV0FBVyxLQUNyQixDQUFDLEtBQUssV0FBVyxLQUNqQixDQUFDLEtBQUs7QUFBQTtBQUFBLEVBS2Qsa0JBQWtCLEdBQUc7QUFBQSxJQUNqQixJQUFJLEtBQUssV0FBVyxLQUFLLENBQUMsS0FBSyxXQUFXLEtBQUssQ0FBQyxLQUFLO0FBQUEsTUFDakQsT0FBTztBQUFBLElBQ1gsS0FBSyxrQkFBa0I7QUFBQSxJQUN2QixPQUFPO0FBQUE7QUFFZjs7O0FDL01BLElBQU0sbUJBQW1CLE9BQU8sWUFBWSxZQUN4QyxXQUNBLE9BQU8sUUFBUSxhQUFhLFdBQzVCLFFBQVEsV0FDTjtBQUFBO0FBSUMsTUFBTSxPQUFPO0FBQUEsRUFDaEI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsV0FBVyxDQUFDLFdBQVcsU0FBUyxRQUFRLE9BQU8sWUFBWSxXQUFXLG9CQUFvQjtBQUFBLElBQ3RGLEtBQUssV0FBVyxDQUFDO0FBQUEsSUFDakIsS0FBSyxXQUFXLENBQUM7QUFBQSxJQUNqQixLQUFLLG1CQUFtQixDQUFDO0FBQUEsSUFDekIsS0FBSyxtQkFBbUIsQ0FBQztBQUFBLElBQ3pCLEtBQUssV0FBVztBQUFBLElBQ2hCLEtBQUssU0FBUztBQUFBLE1BQ1YsS0FBSztBQUFBLE1BQ0w7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLG1CQUFtQjtBQUFBLE1BQ25CO0FBQUEsTUFDQSxXQUFXO0FBQUEsTUFDWCxVQUFVO0FBQUEsSUFDZDtBQUFBLElBQ0EsV0FBVyxPQUFPO0FBQUEsTUFDZCxLQUFLLElBQUksR0FBRztBQUFBO0FBQUEsRUFFcEIsR0FBRyxDQUFDLEtBQUs7QUFBQSxJQWFMLE1BQU0sS0FBSyxJQUFJLFVBQVUsS0FBSyxLQUFLLE1BQU07QUFBQSxJQUN6QyxTQUFTLElBQUksRUFBRyxJQUFJLEdBQUcsSUFBSSxRQUFRLEtBQUs7QUFBQSxNQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJO0FBQUEsTUFDdEIsTUFBTSxZQUFZLEdBQUcsVUFBVTtBQUFBLE1BRS9CLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVztBQUFBLFFBQ3ZCLE1BQU0sSUFBSSxNQUFNLHdCQUF3QjtBQUFBLE1BQzVDO0FBQUEsTUFHQSxPQUFPLE9BQU8sT0FBTyxPQUFPLFVBQVUsT0FBTyxLQUFLO0FBQUEsUUFDOUMsT0FBTyxNQUFNO0FBQUEsUUFDYixVQUFVLE1BQU07QUFBQSxNQUNwQjtBQUFBLE1BRUEsTUFBTSxJQUFJLElBQUksUUFBUSxRQUFRLFdBQVcsR0FBRyxLQUFLLFFBQVE7QUFBQSxNQUN6RCxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsV0FBVyxHQUFHLEtBQUssTUFBTTtBQUFBLE1BQ25ELE1BQU0sV0FBVyxVQUFVLFVBQVUsU0FBUyxPQUFPO0FBQUEsTUFDckQsTUFBTSxXQUFXLEVBQUUsV0FBVztBQUFBLE1BQzlCLElBQUk7QUFBQSxRQUNBLEtBQUssU0FBUyxLQUFLLENBQUM7QUFBQSxNQUVwQjtBQUFBLGFBQUssU0FBUyxLQUFLLENBQUM7QUFBQSxNQUN4QixJQUFJLFVBQVU7QUFBQSxRQUNWLElBQUk7QUFBQSxVQUNBLEtBQUssaUJBQWlCLEtBQUssQ0FBQztBQUFBLFFBRTVCO0FBQUEsZUFBSyxpQkFBaUIsS0FBSyxDQUFDO0FBQUEsTUFDcEM7QUFBQSxJQUNKO0FBQUE7QUFBQSxFQUVKLE9BQU8sQ0FBQyxHQUFHO0FBQUEsSUFDUCxNQUFNLFdBQVcsRUFBRSxTQUFTO0FBQUEsSUFDNUIsTUFBTSxZQUFZLEdBQUc7QUFBQSxJQUNyQixNQUFNLFdBQVcsRUFBRSxTQUFTLEtBQUs7QUFBQSxJQUNqQyxNQUFNLFlBQVksR0FBRztBQUFBLElBQ3JCLFdBQVcsS0FBSyxLQUFLLFVBQVU7QUFBQSxNQUMzQixJQUFJLEVBQUUsTUFBTSxRQUFRLEtBQUssRUFBRSxNQUFNLFNBQVM7QUFBQSxRQUN0QyxPQUFPO0FBQUEsSUFDZjtBQUFBLElBQ0EsV0FBVyxLQUFLLEtBQUssVUFBVTtBQUFBLE1BQzNCLElBQUksRUFBRSxNQUFNLFFBQVEsS0FBSyxFQUFFLE1BQU0sU0FBUztBQUFBLFFBQ3RDLE9BQU87QUFBQSxJQUNmO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFBQSxFQUVYLGVBQWUsQ0FBQyxHQUFHO0FBQUEsSUFDZixNQUFNLFdBQVcsRUFBRSxTQUFTLElBQUk7QUFBQSxJQUNoQyxNQUFNLFlBQVksRUFBRSxTQUFTLEtBQUssT0FBTztBQUFBLElBQ3pDLFdBQVcsS0FBSyxLQUFLLGtCQUFrQjtBQUFBLE1BQ25DLElBQUksRUFBRSxNQUFNLFFBQVE7QUFBQSxRQUNoQixPQUFPO0FBQUEsSUFDZjtBQUFBLElBQ0EsV0FBVyxLQUFLLEtBQUssa0JBQWtCO0FBQUEsTUFDbkMsSUFBSSxFQUFFLE1BQU0sUUFBUTtBQUFBLFFBQ2hCLE9BQU87QUFBQSxJQUNmO0FBQUEsSUFDQSxPQUFPO0FBQUE7QUFFZjs7O0FDNUdPLE1BQU0sZUFBZTtBQUFBLEVBQ3hCO0FBQUEsRUFDQSxXQUFXLENBQUMsUUFBUSxJQUFJLEtBQU87QUFBQSxJQUMzQixLQUFLLFFBQVE7QUFBQTtBQUFBLEVBRWpCLElBQUksR0FBRztBQUFBLElBQ0gsT0FBTyxJQUFJLGVBQWUsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDO0FBQUE7QUFBQSxFQUVqRCxTQUFTLENBQUMsUUFBUSxTQUFTO0FBQUEsSUFDdkIsT0FBTyxLQUFLLE1BQU0sSUFBSSxPQUFPLFNBQVMsQ0FBQyxHQUFHLElBQUksUUFBUSxXQUFXLENBQUM7QUFBQTtBQUFBLEVBRXRFLFdBQVcsQ0FBQyxRQUFRLFNBQVM7QUFBQSxJQUN6QixNQUFNLFdBQVcsT0FBTyxTQUFTO0FBQUEsSUFDakMsTUFBTSxTQUFTLEtBQUssTUFBTSxJQUFJLFFBQVE7QUFBQSxJQUN0QyxJQUFJO0FBQUEsTUFDQSxPQUFPLElBQUksUUFBUSxXQUFXLENBQUM7QUFBQSxJQUUvQjtBQUFBLFdBQUssTUFBTSxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQUE7QUFFcEU7QUFBQTtBQU1PLE1BQU0sWUFBWTtBQUFBLEVBQ3JCLFFBQVEsSUFBSTtBQUFBLEVBQ1osR0FBRyxDQUFDLFFBQVEsVUFBVSxPQUFPO0FBQUEsSUFDekIsTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLFFBQVEsSUFBSTtBQUFBLElBQzVDLE1BQU0sVUFBVSxLQUFLLE1BQU0sSUFBSSxNQUFNO0FBQUEsSUFDckMsS0FBSyxNQUFNLElBQUksUUFBUSxZQUFZLFlBQVksSUFBSSxJQUFJLE9BQU87QUFBQTtBQUFBLEVBR2xFLE9BQU8sR0FBRztBQUFBLElBQ04sT0FBTyxDQUFDLEdBQUcsS0FBSyxNQUFNLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFNLE9BQU87QUFBQSxNQUNoRDtBQUFBLE1BQ0EsQ0FBQyxFQUFFLElBQUk7QUFBQSxNQUNQLENBQUMsRUFBRSxJQUFJO0FBQUEsSUFDWCxDQUFDO0FBQUE7QUFFVDtBQUFBO0FBS08sTUFBTSxTQUFTO0FBQUEsRUFDbEIsUUFBUSxJQUFJO0FBQUEsRUFDWixHQUFHLENBQUMsUUFBUSxTQUFTO0FBQUEsSUFDakIsSUFBSSxDQUFDLE9BQU8sV0FBVyxHQUFHO0FBQUEsTUFDdEI7QUFBQSxJQUNKO0FBQUEsSUFDQSxNQUFNLE9BQU8sS0FBSyxNQUFNLElBQUksTUFBTTtBQUFBLElBQ2xDLElBQUksTUFBTTtBQUFBLE1BQ04sSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFLLEVBQUUsV0FBVyxNQUFNLFFBQVEsV0FBVyxDQUFDLEdBQUc7QUFBQSxRQUMxRCxLQUFLLEtBQUssT0FBTztBQUFBLE1BQ3JCO0FBQUEsSUFDSixFQUVJO0FBQUEsV0FBSyxNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQztBQUFBO0FBQUEsRUFFeEMsR0FBRyxDQUFDLFFBQVE7QUFBQSxJQUNSLE1BQU0sT0FBTyxLQUFLLE1BQU0sSUFBSSxNQUFNO0FBQUEsSUFFbEMsSUFBSSxDQUFDLE1BQU07QUFBQSxNQUNQLE1BQU0sSUFBSSxNQUFNLGlDQUFpQztBQUFBLElBQ3JEO0FBQUEsSUFFQSxPQUFPO0FBQUE7QUFBQSxFQUVYLE9BQU8sR0FBRztBQUFBLElBQ04sT0FBTyxLQUFLLEtBQUssRUFBRSxJQUFJLFFBQUssQ0FBQyxJQUFHLEtBQUssTUFBTSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0FBQUE7QUFBQSxFQUV0RCxJQUFJLEdBQUc7QUFBQSxJQUNILE9BQU8sQ0FBQyxHQUFHLEtBQUssTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLE9BQUssRUFBRSxXQUFXLENBQUM7QUFBQTtBQUVoRTtBQUFBO0FBT08sTUFBTSxVQUFVO0FBQUEsRUFDbkI7QUFBQSxFQUNBLFVBQVUsSUFBSTtBQUFBLEVBQ2QsV0FBVyxJQUFJO0FBQUEsRUFDZjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0EsV0FBVyxDQUFDLE1BQU0sZ0JBQWdCO0FBQUEsSUFDOUIsS0FBSyxPQUFPO0FBQUEsSUFDWixLQUFLLFNBQVMsQ0FBQyxDQUFDLEtBQUs7QUFBQSxJQUNyQixLQUFLLE1BQU0sQ0FBQyxDQUFDLEtBQUs7QUFBQSxJQUNsQixLQUFLLGlCQUNELGlCQUFpQixlQUFlLEtBQUssSUFBSSxJQUFJO0FBQUE7QUFBQSxFQUVyRCxlQUFlLENBQUMsUUFBUSxVQUFVO0FBQUEsSUFDOUIsS0FBSyxXQUFXO0FBQUEsSUFDaEIsTUFBTSxnQkFBZ0IsU0FBUyxJQUFJLE9BQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUFBLElBR25ELFVBQVUsR0FBRyxZQUFZLGVBQWU7QUFBQSxNQUNwQyxLQUFLLGVBQWUsWUFBWSxHQUFHLE9BQU87QUFBQSxNQUMxQyxNQUFNLE9BQU8sUUFBUSxLQUFLO0FBQUEsTUFDMUIsTUFBTSxXQUFXLFFBQVEsV0FBVyxLQUFLLEtBQUssS0FBSyxhQUFhO0FBQUEsTUFFaEUsSUFBSSxNQUFNO0FBQUEsUUFDTixJQUFJLEVBQUUsUUFBUSxTQUFTLE9BQU8sS0FBSyxLQUFLLFNBQVMsWUFDN0MsS0FBSyxLQUFLLE9BQ1IsSUFBSTtBQUFBLFFBQ1YsTUFBTSxRQUFPLFFBQVEsS0FBSztBQUFBLFFBQzFCLElBQUksQ0FBQyxPQUFNO0FBQUEsVUFDUCxLQUFLLFFBQVEsSUFBSSxHQUFHLE1BQU0sS0FBSztBQUFBLFVBQy9CO0FBQUEsUUFDSixFQUNLO0FBQUEsVUFDRCxVQUFVO0FBQUE7QUFBQSxNQUVsQjtBQUFBLE1BQ0EsSUFBSSxFQUFFLFNBQVM7QUFBQSxRQUNYO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJO0FBQUEsTUFDSixJQUFJLFVBQVU7QUFBQSxNQUNkLE9BQU8sUUFBUSxJQUFJLFFBQVEsUUFBUSxPQUFPLGFBQ3JDLE9BQU8sUUFBUSxLQUFLLElBQUk7QUFBQSxRQUN6QixNQUFNLElBQUksRUFBRSxRQUFRLENBQUM7QUFBQSxRQUNyQixJQUFJO0FBQUEsUUFDSixVQUFVO0FBQUEsUUFDVixVQUFVO0FBQUEsTUFDZDtBQUFBLE1BQ0EsSUFBSSxRQUFRLFFBQVE7QUFBQSxNQUNwQixPQUFPLFFBQVEsS0FBSztBQUFBLE1BQ3BCLElBQUksU0FBUztBQUFBLFFBQ1QsSUFBSSxLQUFLLGVBQWUsVUFBVSxHQUFHLE9BQU87QUFBQSxVQUN4QztBQUFBLFFBQ0osS0FBSyxlQUFlLFlBQVksR0FBRyxPQUFPO0FBQUEsTUFDOUM7QUFBQSxNQUlBLElBQUksT0FBTyxNQUFNLFVBQVU7QUFBQSxRQUd2QixNQUFNLFFBQVEsTUFBTSxRQUFRLE1BQU0sTUFBTSxNQUFNO0FBQUEsUUFDOUMsS0FBSyxRQUFRLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxVQUFVLEtBQUs7QUFBQSxRQUM5QztBQUFBLE1BQ0osRUFDSyxTQUFJLE1BQU0sVUFBVTtBQUFBLFFBTXJCLElBQUksQ0FBQyxFQUFFLGVBQWUsS0FDbEIsS0FBSyxVQUNMLFFBQVEsb0JBQW9CLEdBQUc7QUFBQSxVQUMvQixLQUFLLFNBQVMsSUFBSSxHQUFHLE9BQU87QUFBQSxRQUNoQztBQUFBLFFBQ0EsTUFBTSxLQUFLLE1BQU0sUUFBUTtBQUFBLFFBQ3pCLE1BQU0sUUFBUSxNQUFNLEtBQUs7QUFBQSxRQUN6QixJQUFJLENBQUMsU0FBVSxPQUFPLE1BQU0sT0FBTyxRQUFRLENBQUMsT0FBUTtBQUFBLFVBR2hELEtBQUssUUFBUSxJQUFJLEdBQUcsVUFBVSxPQUFPLE1BQU0sT0FBTyxHQUFHO0FBQUEsUUFDekQsRUFDSztBQUFBLFVBQ0QsSUFBSSxPQUFPLE1BQU07QUFBQSxZQUliLE1BQU0sS0FBSyxFQUFFLFVBQVU7QUFBQSxZQUV2QixJQUFJLENBQUM7QUFBQSxjQUNELEtBQUssUUFBUSxJQUFJLElBQUksVUFBVSxJQUFJO0FBQUEsWUFDbEMsU0FBSSxDQUFDLEtBQUssZUFBZSxVQUFVLElBQUksS0FBSyxHQUFHO0FBQUEsY0FDaEQsS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLO0FBQUEsWUFDL0I7QUFBQSxVQUNKO0FBQUE7QUFBQSxNQUVSLEVBQ0ssU0FBSSxhQUFhLFFBQVE7QUFBQSxRQUMxQixLQUFLLFNBQVMsSUFBSSxHQUFHLE9BQU87QUFBQSxNQUNoQztBQUFBLElBQ0o7QUFBQSxJQUNBLE9BQU87QUFBQTtBQUFBLEVBRVgsY0FBYyxHQUFHO0FBQUEsSUFDYixPQUFPLEtBQUssU0FBUyxLQUFLO0FBQUE7QUFBQSxFQUU5QixLQUFLLEdBQUc7QUFBQSxJQUNKLE9BQU8sSUFBSSxVQUFVLEtBQUssTUFBTSxLQUFLLGNBQWM7QUFBQTtBQUFBLEVBTXZELGFBQWEsQ0FBQyxRQUFRLFNBQVM7QUFBQSxJQUMzQixNQUFNLFdBQVcsS0FBSyxTQUFTLElBQUksTUFBTTtBQUFBLElBRXpDLE1BQU0sVUFBVSxLQUFLLE1BQU07QUFBQSxJQUMzQixXQUFXLEtBQUssU0FBUztBQUFBLE1BQ3JCLFdBQVcsV0FBVyxVQUFVO0FBQUEsUUFDNUIsTUFBTSxXQUFXLFFBQVEsV0FBVztBQUFBLFFBQ3BDLE1BQU0sSUFBSSxRQUFRLFFBQVE7QUFBQSxRQUMxQixNQUFNLE9BQU8sUUFBUSxLQUFLO0FBQUEsUUFDMUIsSUFBSSxNQUFNLFVBQVU7QUFBQSxVQUNoQixRQUFRLGFBQWEsR0FBRyxTQUFTLE1BQU0sUUFBUTtBQUFBLFFBQ25ELEVBQ0ssU0FBSSxhQUFhLFFBQVE7QUFBQSxVQUMxQixRQUFRLFdBQVcsR0FBRyxHQUFHLE1BQU0sUUFBUTtBQUFBLFFBQzNDLEVBQ0s7QUFBQSxVQUNELFFBQVEsV0FBVyxHQUFHLEdBQUcsTUFBTSxRQUFRO0FBQUE7QUFBQSxNQUUvQztBQUFBLElBQ0o7QUFBQSxJQUNBLE9BQU87QUFBQTtBQUFBLEVBRVgsWUFBWSxDQUFDLEdBQUcsU0FBUyxNQUFNLFVBQVU7QUFBQSxJQUNyQyxJQUFJLEtBQUssT0FBTyxDQUFDLEVBQUUsS0FBSyxXQUFXLEdBQUcsR0FBRztBQUFBLE1BQ3JDLElBQUksQ0FBQyxRQUFRLFFBQVEsR0FBRztBQUFBLFFBQ3BCLEtBQUssUUFBUSxJQUFJLEdBQUcsVUFBVSxLQUFLO0FBQUEsTUFDdkM7QUFBQSxNQUNBLElBQUksRUFBRSxXQUFXLEdBQUc7QUFBQSxRQU1oQixJQUFJLEtBQUssVUFBVSxDQUFDLEVBQUUsZUFBZSxHQUFHO0FBQUEsVUFDcEMsS0FBSyxTQUFTLElBQUksR0FBRyxPQUFPO0FBQUEsUUFDaEMsRUFDSyxTQUFJLEVBQUUsZUFBZSxHQUFHO0FBQUEsVUFDekIsSUFBSSxRQUFRLFFBQVEsb0JBQW9CLEdBQUc7QUFBQSxZQUN2QyxLQUFLLFNBQVMsSUFBSSxHQUFHLElBQUk7QUFBQSxVQUM3QixFQUNLLFNBQUksUUFBUSxtQkFBbUIsR0FBRztBQUFBLFlBQ25DLEtBQUssU0FBUyxJQUFJLEdBQUcsT0FBTztBQUFBLFVBQ2hDO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQUEsSUFHQSxJQUFJLE1BQU07QUFBQSxNQUNOLE1BQU0sS0FBSyxLQUFLLFFBQVE7QUFBQSxNQUN4QixJQUFJLE9BQU8sT0FBTyxZQUVkLE9BQU8sUUFDUCxPQUFPLE1BQ1AsT0FBTyxLQUFLO0FBQUEsUUFDWixLQUFLLFdBQVcsR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLFFBQVE7QUFBQSxNQUNoRCxFQUNLLFNBQUksT0FBTyxNQUFNO0FBQUEsUUFFbEIsTUFBTSxLQUFLLEVBQUUsVUFBVTtBQUFBLFFBRXZCLEtBQUssU0FBUyxJQUFJLElBQUksSUFBSTtBQUFBLE1BQzlCLEVBQ0ssU0FBSSxjQUFjLFFBQVE7QUFBQSxRQUMzQixLQUFLLFdBQVcsR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLFFBQVE7QUFBQSxNQUNoRDtBQUFBLElBQ0o7QUFBQTtBQUFBLEVBRUosVUFBVSxDQUFDLEdBQUcsR0FBRyxNQUFNLFVBQVU7QUFBQSxJQUM3QixJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUFBLE1BQ2Q7QUFBQSxJQUNKLElBQUksQ0FBQyxNQUFNO0FBQUEsTUFDUCxLQUFLLFFBQVEsSUFBSSxHQUFHLFVBQVUsS0FBSztBQUFBLElBQ3ZDLEVBQ0s7QUFBQSxNQUNELEtBQUssU0FBUyxJQUFJLEdBQUcsSUFBSTtBQUFBO0FBQUE7QUFBQSxFQUdqQyxVQUFVLENBQUMsR0FBRyxHQUFHLE1BQU0sVUFBVTtBQUFBLElBRTdCLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQztBQUFBLE1BQ1o7QUFBQSxJQUNKLElBQUksQ0FBQyxNQUFNO0FBQUEsTUFDUCxLQUFLLFFBQVEsSUFBSSxHQUFHLFVBQVUsS0FBSztBQUFBLElBQ3ZDLEVBQ0s7QUFBQSxNQUNELEtBQUssU0FBUyxJQUFJLEdBQUcsSUFBSTtBQUFBO0FBQUE7QUFHckM7OztBQzNSQSxJQUFNLGFBQWEsQ0FBQyxRQUFRLFNBQVMsT0FBTyxXQUFXLFdBQVcsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksSUFDckYsTUFBTSxRQUFRLE1BQU0sSUFBSSxJQUFJLE9BQU8sUUFBUSxJQUFJLElBQzNDO0FBQUE7QUFJSCxNQUFNLFNBQVM7QUFBQSxFQUNsQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxPQUFPLElBQUk7QUFBQSxFQUNYLFNBQVM7QUFBQSxFQUNULFVBQVU7QUFBQSxFQUNWLFlBQVksQ0FBQztBQUFBLEVBQ2I7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQSxXQUFXLENBQUMsVUFBVSxPQUFNLE1BQU07QUFBQSxJQUM5QixLQUFLLFdBQVc7QUFBQSxJQUNoQixLQUFLLE9BQU87QUFBQSxJQUNaLEtBQUssT0FBTztBQUFBLElBQ1osS0FBSyxPQUFPLENBQUMsS0FBSyxTQUFTLEtBQUssYUFBYSxVQUFVLE9BQU87QUFBQSxJQUM5RCxLQUFLLHNCQUFzQixLQUFLLHdCQUF3QjtBQUFBLElBQ3hELElBQUksS0FBSyxVQUFVLENBQUMsS0FBSyxxQkFBcUI7QUFBQSxNQUMxQyxLQUFLLFVBQVUsV0FBVyxLQUFLLFVBQVUsQ0FBQyxHQUFHLElBQUk7QUFBQSxNQUNqRCxJQUFJLENBQUMsS0FBSyx1QkFDTixPQUFPLEtBQUssUUFBUSxRQUFRLFlBQVk7QUFBQSxRQUN4QyxNQUFNLElBQUk7QUFBQSxRQUNWLE1BQU0sSUFBSSxNQUFNLENBQUM7QUFBQSxNQUNyQjtBQUFBLElBQ0o7QUFBQSxJQUlBLEtBQUssV0FBVyxLQUFLLFlBQVk7QUFBQSxJQUVqQyxJQUFJLEtBQUssUUFBUTtBQUFBLE1BQ2IsS0FBSyxTQUFTLEtBQUs7QUFBQSxNQUNuQixLQUFLLE9BQU8saUJBQWlCLFNBQVMsTUFBTTtBQUFBLFFBQ3hDLEtBQUssVUFBVSxTQUFTO0FBQUEsT0FDM0I7QUFBQSxJQUNMO0FBQUE7QUFBQSxFQUVKLFFBQVEsQ0FBQyxPQUFNO0FBQUEsSUFDWCxPQUFPLEtBQUssS0FBSyxJQUFJLEtBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxTQUFTLFVBQVUsS0FBSTtBQUFBO0FBQUEsRUFFaEUsZ0JBQWdCLENBQUMsT0FBTTtBQUFBLElBQ25CLE9BQU8sQ0FBQyxDQUFDLEtBQUssU0FBUyxrQkFBa0IsS0FBSTtBQUFBO0FBQUEsRUFHakQsS0FBSyxHQUFHO0FBQUEsSUFDSixLQUFLLFNBQVM7QUFBQTtBQUFBLEVBRWxCLE1BQU0sR0FBRztBQUFBLElBRUwsSUFBSSxLQUFLLFFBQVE7QUFBQSxNQUNiO0FBQUEsSUFFSixLQUFLLFNBQVM7QUFBQSxJQUNkLElBQUksS0FBSztBQUFBLElBQ1QsT0FBTyxDQUFDLEtBQUssV0FBVyxLQUFLLEtBQUssVUFBVSxNQUFNLElBQUk7QUFBQSxNQUNsRCxHQUFHO0FBQUEsSUFDUDtBQUFBO0FBQUEsRUFFSixRQUFRLENBQUMsSUFBSTtBQUFBLElBQ1QsSUFBSSxLQUFLLFFBQVE7QUFBQSxNQUNiO0FBQUEsSUFFSixJQUFJLENBQUMsS0FBSyxRQUFRO0FBQUEsTUFDZCxHQUFHO0FBQUEsSUFDUCxFQUNLO0FBQUEsTUFFRCxLQUFLLFVBQVUsS0FBSyxFQUFFO0FBQUE7QUFBQTtBQUFBLE9BS3hCLFdBQVUsQ0FBQyxHQUFHLE9BQU87QUFBQSxJQUN2QixJQUFJLFNBQVMsS0FBSyxLQUFLO0FBQUEsTUFDbkI7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLElBQUksS0FBSyxLQUFLLFVBQVU7QUFBQSxNQUNwQixNQUFNLEVBQUUsZUFBZSxLQUFNLE1BQU0sRUFBRSxTQUFTO0FBQUEsTUFDOUMsSUFBSSxDQUFDO0FBQUEsUUFDRDtBQUFBLE1BQ0osSUFBSTtBQUFBLElBQ1I7QUFBQSxJQUNBLE1BQU0sV0FBVyxFQUFFLFVBQVUsS0FBSyxLQUFLLEtBQUs7QUFBQSxJQUM1QyxNQUFNLElBQUksV0FBVyxNQUFNLEVBQUUsTUFBTSxJQUFJO0FBQUEsSUFDdkMsSUFBSSxLQUFLLEtBQUssVUFBVSxLQUFLLEtBQUssU0FBUyxHQUFHLGVBQWUsR0FBRztBQUFBLE1BQzVELE1BQU0sU0FBUyxNQUFNLEVBQUUsU0FBUztBQUFBLE1BRWhDLElBQUksV0FBVyxPQUFPLFVBQVUsS0FBSyxLQUFLLEtBQUssT0FBTztBQUFBLFFBQ2xELE1BQU0sT0FBTyxNQUFNO0FBQUEsTUFDdkI7QUFBQSxJQUVKO0FBQUEsSUFDQSxPQUFPLEtBQUssZUFBZSxHQUFHLEtBQUs7QUFBQTtBQUFBLEVBRXZDLGNBQWMsQ0FBQyxHQUFHLE9BQU87QUFBQSxJQUNyQixPQUFRLE1BQ0gsS0FBSyxhQUFhLFlBQVksRUFBRSxNQUFNLEtBQUssS0FBSyxjQUNoRCxDQUFDLFNBQVMsRUFBRSxXQUFXLE9BQ3ZCLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxFQUFFLFlBQVksT0FDbkMsQ0FBQyxLQUFLLEtBQUssU0FDUixDQUFDLEtBQUssS0FBSyxVQUNYLENBQUMsRUFBRSxlQUFlLEtBQ2xCLENBQUMsRUFBRSxlQUFlLEdBQUcsWUFBWSxNQUNyQyxDQUFDLEtBQUssU0FBUyxDQUFDLElBQ2hCLElBQ0U7QUFBQTtBQUFBLEVBRVYsY0FBYyxDQUFDLEdBQUcsT0FBTztBQUFBLElBQ3JCLElBQUksU0FBUyxLQUFLLEtBQUs7QUFBQSxNQUNuQjtBQUFBLElBQ0osSUFBSTtBQUFBLElBQ0osSUFBSSxLQUFLLEtBQUssVUFBVTtBQUFBLE1BQ3BCLE1BQU0sRUFBRSxlQUFlLEtBQUssRUFBRSxhQUFhO0FBQUEsTUFDM0MsSUFBSSxDQUFDO0FBQUEsUUFDRDtBQUFBLE1BQ0osSUFBSTtBQUFBLElBQ1I7QUFBQSxJQUNBLE1BQU0sV0FBVyxFQUFFLFVBQVUsS0FBSyxLQUFLLEtBQUs7QUFBQSxJQUM1QyxNQUFNLElBQUksV0FBVyxFQUFFLFVBQVUsSUFBSTtBQUFBLElBQ3JDLElBQUksS0FBSyxLQUFLLFVBQVUsS0FBSyxLQUFLLFNBQVMsR0FBRyxlQUFlLEdBQUc7QUFBQSxNQUM1RCxNQUFNLFNBQVMsRUFBRSxhQUFhO0FBQUEsTUFDOUIsSUFBSSxXQUFXLFFBQVEsVUFBVSxLQUFLLEtBQUssS0FBSyxPQUFPO0FBQUEsUUFDbkQsT0FBTyxVQUFVO0FBQUEsTUFDckI7QUFBQSxJQUNKO0FBQUEsSUFDQSxPQUFPLEtBQUssZUFBZSxHQUFHLEtBQUs7QUFBQTtBQUFBLEVBRXZDLFdBQVcsQ0FBQyxHQUFHLFVBQVU7QUFBQSxJQUNyQixJQUFJLEtBQUssU0FBUyxDQUFDO0FBQUEsTUFDZjtBQUFBLElBRUosSUFBSSxDQUFDLEtBQUssdUJBQXVCLEtBQUssU0FBUyxLQUFLO0FBQUEsTUFDaEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxjQUFjO0FBQUEsTUFDL0IsS0FBSyxRQUFRLElBQUksR0FBRztBQUFBLElBQ3hCO0FBQUEsSUFDQSxNQUFNLE1BQU0sS0FBSyxLQUFLLGFBQWEsWUFBWSxXQUFXLEtBQUssS0FBSztBQUFBLElBQ3BFLEtBQUssS0FBSyxJQUFJLENBQUM7QUFBQSxJQUNmLE1BQU0sT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLFlBQVksSUFBSSxLQUFLLE9BQU87QUFBQSxJQUU3RCxJQUFJLEtBQUssS0FBSyxlQUFlO0FBQUEsTUFDekIsS0FBSyxVQUFVLENBQUM7QUFBQSxJQUNwQixFQUNLLFNBQUksS0FBSztBQUFBLE1BQ1YsTUFBTSxPQUFNLEtBQUssS0FBSyxRQUFRLEVBQUUsY0FBYyxJQUFJLEVBQUUsU0FBUztBQUFBLE1BQzdELEtBQUssVUFBVSxPQUFNLElBQUk7QUFBQSxJQUM3QixFQUNLO0FBQUEsTUFDRCxNQUFNLE1BQU0sS0FBSyxLQUFLLFFBQVEsRUFBRSxjQUFjLElBQUksRUFBRSxTQUFTO0FBQUEsTUFDN0QsTUFBTSxNQUFNLEtBQUssS0FBSyxlQUFlLENBQUMsSUFBSSxXQUFXLE9BQU8sS0FBSyxJQUFJLElBQ2pFLE1BQU0sS0FBSyxPQUNUO0FBQUEsTUFDTixLQUFLLFVBQVUsQ0FBQyxNQUFNLE1BQU0sT0FBTyxNQUFNLE1BQU0sSUFBSTtBQUFBO0FBQUE7QUFBQSxPQUdyRCxNQUFLLENBQUMsR0FBRyxVQUFVLE9BQU87QUFBQSxJQUM1QixNQUFNLElBQUksTUFBTSxLQUFLLFdBQVcsR0FBRyxLQUFLO0FBQUEsSUFDeEMsSUFBSTtBQUFBLE1BQ0EsS0FBSyxZQUFZLEdBQUcsUUFBUTtBQUFBO0FBQUEsRUFFcEMsU0FBUyxDQUFDLEdBQUcsVUFBVSxPQUFPO0FBQUEsSUFDMUIsTUFBTSxJQUFJLEtBQUssZUFBZSxHQUFHLEtBQUs7QUFBQSxJQUN0QyxJQUFJO0FBQUEsTUFDQSxLQUFLLFlBQVksR0FBRyxRQUFRO0FBQUE7QUFBQSxFQUVwQyxNQUFNLENBQUMsUUFBUSxVQUFVLElBQUk7QUFBQSxJQUV6QixJQUFJLEtBQUssUUFBUTtBQUFBLE1BQ2IsR0FBRztBQUFBLElBRVAsS0FBSyxRQUFRLFFBQVEsVUFBVSxJQUFJLFVBQVUsS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUFBO0FBQUEsRUFFL0QsT0FBTyxDQUFDLFFBQVEsVUFBVSxXQUFXLElBQUk7QUFBQSxJQUNyQyxJQUFJLEtBQUssaUJBQWlCLE1BQU07QUFBQSxNQUM1QixPQUFPLEdBQUc7QUFBQSxJQUNkLElBQUksS0FBSyxRQUFRO0FBQUEsTUFDYixHQUFHO0FBQUEsSUFDUCxJQUFJLEtBQUssUUFBUTtBQUFBLE1BQ2IsS0FBSyxTQUFTLE1BQU0sS0FBSyxRQUFRLFFBQVEsVUFBVSxXQUFXLEVBQUUsQ0FBQztBQUFBLE1BQ2pFO0FBQUEsSUFDSjtBQUFBLElBQ0EsVUFBVSxnQkFBZ0IsUUFBUSxRQUFRO0FBQUEsSUFJMUMsSUFBSSxRQUFRO0FBQUEsSUFDWixNQUFNLE9BQU8sTUFBTTtBQUFBLE1BQ2YsSUFBSSxFQUFFLFVBQVU7QUFBQSxRQUNaLEdBQUc7QUFBQTtBQUFBLElBRVgsWUFBWSxHQUFHLFVBQVUsVUFBVSxVQUFVLFFBQVEsUUFBUSxHQUFHO0FBQUEsTUFDNUQsSUFBSSxLQUFLLFNBQVMsQ0FBQztBQUFBLFFBQ2Y7QUFBQSxNQUNKO0FBQUEsTUFDQSxLQUFLLE1BQU0sR0FBRyxVQUFVLEtBQUssRUFBRSxLQUFLLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDcEQ7QUFBQSxJQUNBLFdBQVcsS0FBSyxVQUFVLGVBQWUsR0FBRztBQUFBLE1BQ3hDLElBQUksS0FBSyxhQUFhLFlBQVksRUFBRSxNQUFNLEtBQUssS0FBSyxVQUFVO0FBQUEsUUFDMUQ7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLE1BQ0EsTUFBTSxpQkFBaUIsRUFBRSxjQUFjO0FBQUEsTUFDdkMsSUFBSSxFQUFFLGNBQWM7QUFBQSxRQUNoQixLQUFLLFFBQVEsR0FBRyxnQkFBZ0IsV0FBVyxJQUFJO0FBQUEsTUFDOUM7QUFBQSxRQUNELEVBQUUsVUFBVSxDQUFDLEdBQUcsWUFBWSxLQUFLLFFBQVEsR0FBRyxTQUFTLFdBQVcsSUFBSSxHQUFHLElBQUk7QUFBQTtBQUFBLElBRW5GO0FBQUEsSUFDQSxLQUFLO0FBQUE7QUFBQSxFQUVULE9BQU8sQ0FBQyxRQUFRLFNBQVMsV0FBVyxJQUFJO0FBQUEsSUFDcEMsWUFBWSxVQUFVLGNBQWMsUUFBUSxPQUFPO0FBQUEsSUFDbkQsSUFBSSxRQUFRO0FBQUEsSUFDWixNQUFNLE9BQU8sTUFBTTtBQUFBLE1BQ2YsSUFBSSxFQUFFLFVBQVU7QUFBQSxRQUNaLEdBQUc7QUFBQTtBQUFBLElBRVgsWUFBWSxHQUFHLFVBQVUsVUFBVSxVQUFVLFFBQVEsUUFBUSxHQUFHO0FBQUEsTUFDNUQsSUFBSSxLQUFLLFNBQVMsQ0FBQztBQUFBLFFBQ2Y7QUFBQSxNQUNKO0FBQUEsTUFDQSxLQUFLLE1BQU0sR0FBRyxVQUFVLEtBQUssRUFBRSxLQUFLLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDcEQ7QUFBQSxJQUNBLFlBQVksU0FBUSxhQUFhLFVBQVUsU0FBUyxRQUFRLEdBQUc7QUFBQSxNQUMzRDtBQUFBLE1BQ0EsS0FBSyxRQUFRLFNBQVEsVUFBVSxVQUFVLE1BQU0sR0FBRyxJQUFJO0FBQUEsSUFDMUQ7QUFBQSxJQUNBLEtBQUs7QUFBQTtBQUFBLEVBRVQsVUFBVSxDQUFDLFFBQVEsVUFBVSxJQUFJO0FBQUEsSUFFN0IsSUFBSSxLQUFLLFFBQVE7QUFBQSxNQUNiLEdBQUc7QUFBQSxJQUVQLEtBQUssWUFBWSxRQUFRLFVBQVUsSUFBSSxVQUFVLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFBQTtBQUFBLEVBRW5FLFdBQVcsQ0FBQyxRQUFRLFVBQVUsV0FBVyxJQUFJO0FBQUEsSUFDekMsSUFBSSxLQUFLLGlCQUFpQixNQUFNO0FBQUEsTUFDNUIsT0FBTyxHQUFHO0FBQUEsSUFDZCxJQUFJLEtBQUssUUFBUTtBQUFBLE1BQ2IsR0FBRztBQUFBLElBQ1AsSUFBSSxLQUFLLFFBQVE7QUFBQSxNQUNiLEtBQUssU0FBUyxNQUFNLEtBQUssWUFBWSxRQUFRLFVBQVUsV0FBVyxFQUFFLENBQUM7QUFBQSxNQUNyRTtBQUFBLElBQ0o7QUFBQSxJQUNBLFVBQVUsZ0JBQWdCLFFBQVEsUUFBUTtBQUFBLElBSTFDLElBQUksUUFBUTtBQUFBLElBQ1osTUFBTSxPQUFPLE1BQU07QUFBQSxNQUNmLElBQUksRUFBRSxVQUFVO0FBQUEsUUFDWixHQUFHO0FBQUE7QUFBQSxJQUVYLFlBQVksR0FBRyxVQUFVLFVBQVUsVUFBVSxRQUFRLFFBQVEsR0FBRztBQUFBLE1BQzVELElBQUksS0FBSyxTQUFTLENBQUM7QUFBQSxRQUNmO0FBQUEsTUFDSixLQUFLLFVBQVUsR0FBRyxVQUFVLEtBQUs7QUFBQSxJQUNyQztBQUFBLElBQ0EsV0FBVyxLQUFLLFVBQVUsZUFBZSxHQUFHO0FBQUEsTUFDeEMsSUFBSSxLQUFLLGFBQWEsWUFBWSxFQUFFLE1BQU0sS0FBSyxLQUFLLFVBQVU7QUFBQSxRQUMxRDtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsTUFDQSxNQUFNLFdBQVcsRUFBRSxZQUFZO0FBQUEsTUFDL0IsS0FBSyxZQUFZLEdBQUcsVUFBVSxXQUFXLElBQUk7QUFBQSxJQUNqRDtBQUFBLElBQ0EsS0FBSztBQUFBO0FBQUEsRUFFVCxXQUFXLENBQUMsUUFBUSxTQUFTLFdBQVcsSUFBSTtBQUFBLElBQ3hDLFlBQVksVUFBVSxjQUFjLFFBQVEsT0FBTztBQUFBLElBQ25ELElBQUksUUFBUTtBQUFBLElBQ1osTUFBTSxPQUFPLE1BQU07QUFBQSxNQUNmLElBQUksRUFBRSxVQUFVO0FBQUEsUUFDWixHQUFHO0FBQUE7QUFBQSxJQUVYLFlBQVksR0FBRyxVQUFVLFVBQVUsVUFBVSxRQUFRLFFBQVEsR0FBRztBQUFBLE1BQzVELElBQUksS0FBSyxTQUFTLENBQUM7QUFBQSxRQUNmO0FBQUEsTUFDSixLQUFLLFVBQVUsR0FBRyxVQUFVLEtBQUs7QUFBQSxJQUNyQztBQUFBLElBQ0EsWUFBWSxTQUFRLGFBQWEsVUFBVSxTQUFTLFFBQVEsR0FBRztBQUFBLE1BQzNEO0FBQUEsTUFDQSxLQUFLLFlBQVksU0FBUSxVQUFVLFVBQVUsTUFBTSxHQUFHLElBQUk7QUFBQSxJQUM5RDtBQUFBLElBQ0EsS0FBSztBQUFBO0FBRWI7QUFBQTtBQUNPLE1BQU0sbUJBQW1CLFNBQVM7QUFBQSxFQUNyQyxVQUFVLElBQUk7QUFBQSxFQUNkLFdBQVcsQ0FBQyxVQUFVLE9BQU0sTUFBTTtBQUFBLElBQzlCLE1BQU0sVUFBVSxPQUFNLElBQUk7QUFBQTtBQUFBLEVBRTlCLFNBQVMsQ0FBQyxHQUFHO0FBQUEsSUFDVCxLQUFLLFFBQVEsSUFBSSxDQUFDO0FBQUE7QUFBQSxPQUVoQixLQUFJLEdBQUc7QUFBQSxJQUNULElBQUksS0FBSyxRQUFRO0FBQUEsTUFDYixNQUFNLEtBQUssT0FBTztBQUFBLElBQ3RCLElBQUksS0FBSyxLQUFLLFVBQVUsR0FBRztBQUFBLE1BQ3ZCLE1BQU0sS0FBSyxLQUFLLE1BQU07QUFBQSxJQUMxQjtBQUFBLElBQ0EsTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLFFBQVE7QUFBQSxNQUM1QixLQUFLLE9BQU8sS0FBSyxNQUFNLEtBQUssVUFBVSxNQUFNO0FBQUEsUUFDeEMsSUFBSSxLQUFLLFFBQVEsU0FBUztBQUFBLFVBQ3RCLElBQUksS0FBSyxPQUFPLE1BQU07QUFBQSxRQUMxQixFQUNLO0FBQUEsVUFDRCxJQUFJLEtBQUssT0FBTztBQUFBO0FBQUEsT0FFdkI7QUFBQSxLQUNKO0FBQUEsSUFDRCxPQUFPLEtBQUs7QUFBQTtBQUFBLEVBRWhCLFFBQVEsR0FBRztBQUFBLElBQ1AsSUFBSSxLQUFLLFFBQVE7QUFBQSxNQUNiLE1BQU0sS0FBSyxPQUFPO0FBQUEsSUFDdEIsSUFBSSxLQUFLLEtBQUssVUFBVSxHQUFHO0FBQUEsTUFDdkIsS0FBSyxLQUFLLFVBQVU7QUFBQSxJQUN4QjtBQUFBLElBRUEsS0FBSyxXQUFXLEtBQUssTUFBTSxLQUFLLFVBQVUsTUFBTTtBQUFBLE1BQzVDLElBQUksS0FBSyxRQUFRO0FBQUEsUUFDYixNQUFNLEtBQUssT0FBTztBQUFBLEtBQ3pCO0FBQUEsSUFDRCxPQUFPLEtBQUs7QUFBQTtBQUVwQjtBQUFBO0FBQ08sTUFBTSxtQkFBbUIsU0FBUztBQUFBLEVBQ3JDO0FBQUEsRUFDQSxXQUFXLENBQUMsVUFBVSxPQUFNLE1BQU07QUFBQSxJQUM5QixNQUFNLFVBQVUsT0FBTSxJQUFJO0FBQUEsSUFDMUIsS0FBSyxVQUFVLElBQUksU0FBUztBQUFBLE1BQ3hCLFFBQVEsS0FBSztBQUFBLE1BQ2IsWUFBWTtBQUFBLElBQ2hCLENBQUM7QUFBQSxJQUNELEtBQUssUUFBUSxHQUFHLFNBQVMsTUFBTSxLQUFLLE9BQU8sQ0FBQztBQUFBLElBQzVDLEtBQUssUUFBUSxHQUFHLFVBQVUsTUFBTSxLQUFLLE9BQU8sQ0FBQztBQUFBO0FBQUEsRUFFakQsU0FBUyxDQUFDLEdBQUc7QUFBQSxJQUNULEtBQUssUUFBUSxNQUFNLENBQUM7QUFBQSxJQUNwQixJQUFJLENBQUMsS0FBSyxRQUFRO0FBQUEsTUFDZCxLQUFLLE1BQU07QUFBQTtBQUFBLEVBRW5CLE1BQU0sR0FBRztBQUFBLElBQ0wsTUFBTSxTQUFTLEtBQUs7QUFBQSxJQUNwQixJQUFJLE9BQU8sVUFBVSxHQUFHO0FBQUEsTUFDcEIsT0FBTyxNQUFNLEVBQUUsS0FBSyxNQUFNO0FBQUEsUUFDdEIsS0FBSyxPQUFPLFFBQVEsS0FBSyxVQUFVLE1BQU0sS0FBSyxRQUFRLElBQUksQ0FBQztBQUFBLE9BQzlEO0FBQUEsSUFDTCxFQUNLO0FBQUEsTUFDRCxLQUFLLE9BQU8sUUFBUSxLQUFLLFVBQVUsTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDO0FBQUE7QUFBQSxJQUUvRCxPQUFPLEtBQUs7QUFBQTtBQUFBLEVBRWhCLFVBQVUsR0FBRztBQUFBLElBQ1QsSUFBSSxLQUFLLEtBQUssVUFBVSxHQUFHO0FBQUEsTUFDdkIsS0FBSyxLQUFLLFVBQVU7QUFBQSxJQUN4QjtBQUFBLElBQ0EsS0FBSyxXQUFXLEtBQUssTUFBTSxLQUFLLFVBQVUsTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDO0FBQUEsSUFDbEUsT0FBTyxLQUFLO0FBQUE7QUFFcEI7OztBUHBYQSxJQUFNLG1CQUFtQixPQUFPLFlBQVksWUFDeEMsV0FDQSxPQUFPLFFBQVEsYUFBYSxXQUM1QixRQUFRLFdBQ047QUFBQTtBQUlDLE1BQU0sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUlBO0FBQUEsRUFJQTtBQUFBLEVBYUEsV0FBVyxDQUFDLFNBQVMsTUFBTTtBQUFBLElBRXZCLElBQUksQ0FBQztBQUFBLE1BQ0QsTUFBTSxJQUFJLFVBQVUsdUJBQXVCO0FBQUEsSUFFL0MsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUs7QUFBQSxJQUM1QixLQUFLLFNBQVMsS0FBSztBQUFBLElBQ25CLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSztBQUFBLElBQ3JCLEtBQUssTUFBTSxDQUFDLENBQUMsS0FBSztBQUFBLElBQ2xCLEtBQUssY0FBYyxDQUFDLENBQUMsS0FBSztBQUFBLElBQzFCLEtBQUssUUFBUSxDQUFDLENBQUMsS0FBSztBQUFBLElBQ3BCLEtBQUssT0FBTyxDQUFDLENBQUMsS0FBSztBQUFBLElBQ25CLElBQUksQ0FBQyxLQUFLLEtBQUs7QUFBQSxNQUNYLEtBQUssTUFBTTtBQUFBLElBQ2YsRUFDSyxTQUFJLEtBQUssZUFBZSxPQUFPLEtBQUssSUFBSSxXQUFXLFNBQVMsR0FBRztBQUFBLE1BQ2hFLEtBQUssTUFBTSxlQUFjLEtBQUssR0FBRztBQUFBLElBQ3JDO0FBQUEsSUFDQSxLQUFLLE1BQU0sS0FBSyxPQUFPO0FBQUEsSUFDdkIsS0FBSyxPQUFPLEtBQUs7QUFBQSxJQUNqQixLQUFLLGdCQUFnQixDQUFDLENBQUMsS0FBSztBQUFBLElBQzVCLEtBQUssVUFBVSxDQUFDLENBQUMsS0FBSztBQUFBLElBQ3RCLEtBQUssUUFBUSxDQUFDLENBQUMsS0FBSztBQUFBLElBQ3BCLEtBQUssV0FBVyxDQUFDLENBQUMsS0FBSztBQUFBLElBQ3ZCLEtBQUssV0FBVyxLQUFLO0FBQUEsSUFDckIsS0FBSyxzQkFBc0IsS0FBSyx3QkFBd0I7QUFBQSxJQUN4RCxLQUFLLGFBQWEsQ0FBQyxDQUFDLEtBQUs7QUFBQSxJQUN6QixLQUFLLFlBQVksQ0FBQyxDQUFDLEtBQUs7QUFBQSxJQUN4QixLQUFLLFdBQ0QsT0FBTyxLQUFLLGFBQWEsV0FBVyxLQUFLLFdBQVc7QUFBQSxJQUN4RCxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUs7QUFBQSxJQUNuQixLQUFLLFNBQVMsS0FBSztBQUFBLElBQ25CLElBQUksS0FBSyxpQkFBaUIsS0FBSyxhQUFhLFdBQVc7QUFBQSxNQUNuRCxNQUFNLElBQUksTUFBTSw0Q0FBNEM7QUFBQSxJQUNoRTtBQUFBLElBQ0EsSUFBSSxPQUFPLFlBQVksVUFBVTtBQUFBLE1BQzdCLFVBQVUsQ0FBQyxPQUFPO0FBQUEsSUFDdEI7QUFBQSxJQUNBLEtBQUssdUJBQ0QsQ0FBQyxDQUFDLEtBQUssd0JBQ0gsS0FBSyx1QkFDRDtBQUFBLElBQ1osSUFBSSxLQUFLLHNCQUFzQjtBQUFBLE1BQzNCLFVBQVUsUUFBUSxJQUFJLE9BQUssRUFBRSxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQUEsSUFDcEQ7QUFBQSxJQUNBLElBQUksS0FBSyxXQUFXO0FBQUEsTUFDaEIsSUFBSSxLQUFLLFlBQVk7QUFBQSxRQUNqQixNQUFNLElBQUksVUFBVSxpQ0FBaUM7QUFBQSxNQUN6RDtBQUFBLE1BQ0EsVUFBVSxRQUFRLElBQUksT0FBTSxFQUFFLFNBQVMsR0FBRyxJQUFJLElBQUksUUFBUSxHQUFJO0FBQUEsSUFDbEU7QUFBQSxJQUNBLEtBQUssVUFBVTtBQUFBLElBQ2YsS0FBSyxXQUFXLEtBQUssWUFBWTtBQUFBLElBQ2pDLEtBQUssT0FBTyxLQUFLLE1BQU0sVUFBVSxLQUFLLFNBQVM7QUFBQSxJQUMvQyxJQUFJLEtBQUssUUFBUTtBQUFBLE1BQ2IsS0FBSyxTQUFTLEtBQUs7QUFBQSxNQUNuQixJQUFJLEtBQUssV0FBVyxhQUNoQixLQUFLLFdBQVcsS0FBSyxPQUFPLFFBQVE7QUFBQSxRQUNwQyxNQUFNLElBQUksTUFBTSxrREFBa0Q7QUFBQSxNQUN0RTtBQUFBLElBQ0osRUFDSztBQUFBLE1BQ0QsTUFBTSxTQUFTLEtBQUssYUFBYSxVQUFVLGtCQUNyQyxLQUFLLGFBQWEsV0FBVyxtQkFDekIsS0FBSyxXQUFXLGtCQUNaO0FBQUEsTUFDZCxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSztBQUFBLFFBQy9CLFFBQVEsS0FBSztBQUFBLFFBQ2IsSUFBSSxLQUFLO0FBQUEsTUFDYixDQUFDO0FBQUE7QUFBQSxJQUVMLEtBQUssU0FBUyxLQUFLLE9BQU87QUFBQSxJQUsxQixNQUFNLGtCQUFrQixLQUFLLGFBQWEsWUFBWSxLQUFLLGFBQWE7QUFBQSxJQUN4RSxNQUFNLE1BQU07QUFBQSxTQUVMO0FBQUEsTUFDSCxLQUFLLEtBQUs7QUFBQSxNQUNWLFdBQVcsS0FBSztBQUFBLE1BQ2hCLFNBQVMsS0FBSztBQUFBLE1BQ2QsUUFBUSxLQUFLO0FBQUEsTUFDYjtBQUFBLE1BQ0EsV0FBVztBQUFBLE1BQ1gsT0FBTyxLQUFLO0FBQUEsTUFDWixVQUFVO0FBQUEsTUFDVixtQkFBbUI7QUFBQSxNQUNuQixVQUFVLEtBQUs7QUFBQSxNQUNmLHNCQUFzQixLQUFLO0FBQUEsTUFDM0IsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLO0FBQUEsSUFDdkI7QUFBQSxJQUNBLE1BQU0sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFLLElBQUksVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUFBLElBQ3ZELE9BQU8sVUFBVSxhQUFhLElBQUksT0FBTyxDQUFDLEtBQUssTUFBTTtBQUFBLE1BQ2pELElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHO0FBQUEsTUFDcEIsSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFLFNBQVM7QUFBQSxNQUMxQixPQUFPO0FBQUEsT0FDUixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUFBLElBQ1gsS0FBSyxXQUFXLFNBQVMsSUFBSSxDQUFDLEtBQUssTUFBTTtBQUFBLE1BQ3JDLE1BQU0sSUFBSSxVQUFVO0FBQUEsTUFFcEIsSUFBSSxDQUFDO0FBQUEsUUFDRCxNQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxNQUU1QyxPQUFPLElBQUksUUFBUSxLQUFLLEdBQUcsR0FBRyxLQUFLLFFBQVE7QUFBQSxLQUM5QztBQUFBO0FBQUEsT0FFQyxLQUFJLEdBQUc7QUFBQSxJQUtULE9BQU87QUFBQSxNQUNILEdBQUksTUFBTSxJQUFJLFdBQVcsS0FBSyxVQUFVLEtBQUssT0FBTyxLQUFLO0FBQUEsV0FDbEQsS0FBSztBQUFBLFFBQ1IsVUFBVSxLQUFLLGFBQWEsV0FDeEIsS0FBSyxXQUFXLEtBQUssT0FBTyxJQUFJLE1BQU0sSUFDcEM7QUFBQSxRQUNOLFVBQVUsS0FBSztBQUFBLFFBQ2YsUUFBUSxLQUFLO0FBQUEsUUFDYixxQkFBcUIsS0FBSztBQUFBLE1BQzlCLENBQUMsRUFBRSxLQUFLO0FBQUEsSUFDWjtBQUFBO0FBQUEsRUFFSixRQUFRLEdBQUc7QUFBQSxJQUNQLE9BQU87QUFBQSxNQUNILEdBQUcsSUFBSSxXQUFXLEtBQUssVUFBVSxLQUFLLE9BQU8sS0FBSztBQUFBLFdBQzNDLEtBQUs7QUFBQSxRQUNSLFVBQVUsS0FBSyxhQUFhLFdBQ3hCLEtBQUssV0FBVyxLQUFLLE9BQU8sSUFBSSxNQUFNLElBQ3BDO0FBQUEsUUFDTixVQUFVLEtBQUs7QUFBQSxRQUNmLFFBQVEsS0FBSztBQUFBLFFBQ2IscUJBQXFCLEtBQUs7QUFBQSxNQUM5QixDQUFDLEVBQUUsU0FBUztBQUFBLElBQ2hCO0FBQUE7QUFBQSxFQUVKLE1BQU0sR0FBRztBQUFBLElBQ0wsT0FBTyxJQUFJLFdBQVcsS0FBSyxVQUFVLEtBQUssT0FBTyxLQUFLO0FBQUEsU0FDL0MsS0FBSztBQUFBLE1BQ1IsVUFBVSxLQUFLLGFBQWEsV0FDeEIsS0FBSyxXQUFXLEtBQUssT0FBTyxJQUFJLE1BQU0sSUFDcEM7QUFBQSxNQUNOLFVBQVUsS0FBSztBQUFBLE1BQ2YsUUFBUSxLQUFLO0FBQUEsTUFDYixxQkFBcUIsS0FBSztBQUFBLElBQzlCLENBQUMsRUFBRSxPQUFPO0FBQUE7QUFBQSxFQUVkLFVBQVUsR0FBRztBQUFBLElBQ1QsT0FBTyxJQUFJLFdBQVcsS0FBSyxVQUFVLEtBQUssT0FBTyxLQUFLO0FBQUEsU0FDL0MsS0FBSztBQUFBLE1BQ1IsVUFBVSxLQUFLLGFBQWEsV0FDeEIsS0FBSyxXQUFXLEtBQUssT0FBTyxJQUFJLE1BQU0sSUFDcEM7QUFBQSxNQUNOLFVBQVUsS0FBSztBQUFBLE1BQ2YsUUFBUSxLQUFLO0FBQUEsTUFDYixxQkFBcUIsS0FBSztBQUFBLElBQzlCLENBQUMsRUFBRSxXQUFXO0FBQUE7QUFBQSxFQU1sQixXQUFXLEdBQUc7QUFBQSxJQUNWLE9BQU8sS0FBSyxXQUFXLEVBQUUsT0FBTyxVQUFVO0FBQUE7QUFBQSxHQUU3QyxPQUFPLFNBQVMsR0FBRztBQUFBLElBQ2hCLE9BQU8sS0FBSyxZQUFZO0FBQUE7QUFBQSxFQU01QixPQUFPLEdBQUc7QUFBQSxJQUNOLE9BQU8sS0FBSyxPQUFPLEVBQUUsT0FBTyxlQUFlO0FBQUE7QUFBQSxHQUU5QyxPQUFPLGNBQWMsR0FBRztBQUFBLElBQ3JCLE9BQU8sS0FBSyxRQUFRO0FBQUE7QUFFNUI7OztBUXJPTyxJQUFNLFdBQVcsQ0FBQyxTQUFTLFVBQVUsQ0FBQyxNQUFNO0FBQUEsRUFDL0MsSUFBSSxDQUFDLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFBQSxJQUN6QixVQUFVLENBQUMsT0FBTztBQUFBLEVBQ3RCO0FBQUEsRUFDQSxXQUFXLEtBQUssU0FBUztBQUFBLElBQ3JCLElBQUksSUFBSSxVQUFVLEdBQUcsT0FBTyxFQUFFLFNBQVM7QUFBQSxNQUNuQyxPQUFPO0FBQUEsRUFDZjtBQUFBLEVBQ0EsT0FBTztBQUFBOzs7QUNiSixTQUFTLGNBQWMsQ0FBQyxTQUFTLFVBQVUsQ0FBQyxHQUFHO0FBQUEsRUFDbEQsT0FBTyxJQUFJLEtBQUssU0FBUyxPQUFPLEVBQUUsV0FBVztBQUFBO0FBRTFDLFNBQVMsVUFBVSxDQUFDLFNBQVMsVUFBVSxDQUFDLEdBQUc7QUFBQSxFQUM5QyxPQUFPLElBQUksS0FBSyxTQUFTLE9BQU8sRUFBRSxPQUFPO0FBQUE7QUFFdEMsU0FBUyxRQUFRLENBQUMsU0FBUyxVQUFVLENBQUMsR0FBRztBQUFBLEVBQzVDLE9BQU8sSUFBSSxLQUFLLFNBQVMsT0FBTyxFQUFFLFNBQVM7QUFBQTtBQUUvQyxlQUFlLEtBQUssQ0FBQyxTQUFTLFVBQVUsQ0FBQyxHQUFHO0FBQUEsRUFDeEMsT0FBTyxJQUFJLEtBQUssU0FBUyxPQUFPLEVBQUUsS0FBSztBQUFBO0FBRXBDLFNBQVMsZUFBZSxDQUFDLFNBQVMsVUFBVSxDQUFDLEdBQUc7QUFBQSxFQUNuRCxPQUFPLElBQUksS0FBSyxTQUFTLE9BQU8sRUFBRSxZQUFZO0FBQUE7QUFFM0MsU0FBUyxXQUFXLENBQUMsU0FBUyxVQUFVLENBQUMsR0FBRztBQUFBLEVBQy9DLE9BQU8sSUFBSSxLQUFLLFNBQVMsT0FBTyxFQUFFLFFBQVE7QUFBQTtBQUd2QyxJQUFNLGFBQWE7QUFDbkIsSUFBTSxTQUFTLE9BQU8sT0FBTyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsSUFBTSxjQUFjO0FBQ3BCLElBQU0sVUFBVSxPQUFPLE9BQU8sYUFBYTtBQUFBLEVBQzlDLE1BQU07QUFDVixDQUFDO0FBQ00sSUFBTSxPQUFPLE9BQU8sT0FBTyxVQUFVO0FBQUEsRUFDeEMsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUNiLENBQUM7QUFDTSxJQUFNLE9BQU8sT0FBTyxPQUFPLE9BQU87QUFBQSxFQUNyQyxNQUFNO0FBQUEsRUFDTjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDSixDQUFDO0FBQ0QsS0FBSyxPQUFPOzs7QUNqRFo7QUFIQTtBQUNBO0FBSUEsSUFBTSxjQUFjO0FBRWIsU0FBUyxjQUFjLEdBQWtCO0FBQUEsRUFDOUMsT0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sU0FBUyxPQUFPLFlBQWdCO0FBQUEsTUFNOUIsTUFBTSxRQUFtQixDQUFDO0FBQUEsTUFDMUIsTUFBTSxVQUFVLE1BQU0sS0FBSyxpQ0FBaUM7QUFBQSxNQUM1RCxNQUFNLFFBQThCLENBQUM7QUFBQSxNQUNyQyxXQUFXLGNBQWMsU0FBUztBQUFBLFFBQ2hDLE1BQU0sTUFDSCxZQUFZO0FBQUEsVUFDWCxNQUFNLFlBQVksV0FDZixXQUFXLE1BQU0sR0FBRyxFQUNwQixNQUFNLEdBQUcsV0FBVyxTQUFTLEVBQUUsRUFDL0IsTUFBTSxHQUFHLEVBQ1QsTUFBTSxDQUFDO0FBQUEsVUFDVixNQUFNLFFBQVEsVUFBVTtBQUFBLFVBQ3hCLE1BQU0sUUFBTyxVQUFVLEtBQUssR0FBRztBQUFBLFVBQy9CLE1BQU0sYUFBYSxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQUEsVUFDekMsTUFBTSxlQUFlLG9DQUFvQyxNQUFLLFdBQVcsS0FBSyxJQUFJLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFBQSxVQUd2RyxNQUFNLG9CQUFvQixNQUFNLHdCQUFHLFFBQVEsWUFBWTtBQUFBLFVBQ3ZELElBQUksa0JBQWtCLFdBQVc7QUFBQSxZQUFHLE1BQU0sSUFBSSxNQUFNLHNCQUFzQixjQUFjO0FBQUEsVUFFeEYsTUFBTSxpQkFBaUIsTUFBTSxRQUFRLElBQ25DLGtCQUFrQixJQUFJLE9BQU8sU0FBUztBQUFBLFlBQ3BDLE1BQU0sV0FBVyxLQUFLLGNBQWMsSUFBSTtBQUFBLFlBQ3hDLE1BQU0sUUFBUSxNQUFNLHdCQUFHLEtBQUssUUFBUTtBQUFBLFlBQ3BDLE9BQU8sRUFBRSxVQUFVLFdBQVcsTUFBTSxVQUFVO0FBQUEsV0FDL0MsQ0FDSDtBQUFBLFVBQ0EsTUFBTSxZQUFZLGVBQWUsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLFVBQVUsUUFBUSxJQUFJLEVBQUUsVUFBVSxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRztBQUFBLFVBQ3RHLElBQUksQ0FBQztBQUFBLFlBQVcsTUFBTSxJQUFJLE1BQU0sc0JBQXNCLGNBQWM7QUFBQSxVQUVwRSxNQUFNLGdCQUFnQixXQUFXLGVBQWU7QUFBQSxVQUNoRCxNQUFNLHdCQUFHLFdBQ1AsZUFDQSwyQkFBMkI7QUFBQSwyQkFDZCxhQUFhLFVBQVUsV0FBVyxNQUFNLEdBQUc7QUFBQTtBQUFBO0FBQUEsYUFHekQsSUFBSSxxQkFBcUIsV0FBVyxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBTzFDLElBQUksUUFBUTtBQUFBO0FBQUE7QUFBQSxFQUloQjtBQUFBLFVBRUEsTUFBTSxTQUFRO0FBQUEsV0FDYixDQUNMO0FBQUEsTUFDRjtBQUFBLE1BQ0EsTUFBTSxRQUFRLElBQUksS0FBSztBQUFBLE1BT3ZCLE1BQU0sU0FBcUIsQ0FBQztBQUFBLE1BQzVCLE9BQU8saUJBQWlCO0FBQUEsTUFDeEIsT0FBTyxpQkFBaUI7QUFBQSxNQUN4QixPQUFPLGlCQUFpQjtBQUFBLE1BQ3hCLE9BQU8sWUFBWTtBQUFBLE1BQ25CLE9BQU8sa0JBQWtCO0FBQUEsTUFFekIsT0FBTyxFQUFFLE9BQU8sT0FBTztBQUFBO0FBQUEsRUFFM0I7QUFBQTs7O0FDekVLLElBQU0sV0FBaUMsQ0FBQyxlQUFlLENBQUM7OztBcEJKeEQsU0FBUyxtQkFBbUIsQ0FBQyxTQUVuQjtBQUFBLEVBQ2IsSUFBSSxTQUFTO0FBQUEsRUFFYixPQUFPO0FBQUEsSUFDSCxNQUFNO0FBQUEsU0FDQSxnQkFBZSxDQUFDLFFBQVE7QUFBQSxNQUMxQixJQUFJLGdCQUFxQztBQUFBLE1BRXpDLE1BQU0sWUFBWSxZQUFZO0FBQUEsUUFDMUIsSUFBSSxDQUFDLGVBQWU7QUFBQSxVQUNoQixpQkFBaUIsWUFBWTtBQUFBLFlBQ3pCLE1BQU0sTUFBTSxNQUFNLE9BQU8sY0FBYyxZQUFZLEVBQUUsZUFBZSxNQUFNLENBQUM7QUFBQSxZQUMzRSxPQUFPLE1BQU0sSUFBSSxPQUFPO0FBQUEsY0FDcEIsTUFBTSxPQUFPLEtBQUksV0FBVztBQUFBLGNBQzVCLFNBQVMsUUFBUSxLQUFJLGlCQUFpQjtBQUFBLGNBQ3RDLFVBQVUsQ0FBQyxRQUFnQixLQUFJLFFBQVE7QUFBQSxZQUMzQyxDQUFDO0FBQUEsYUFDRjtBQUFBLFFBQ1A7QUFBQSxRQUNBLE9BQU87QUFBQTtBQUFBLE1BR1gsTUFBTSxVQUFVLEtBQUksY0FBYyxLQUFJLHFCQUFxQixXQUFXLGdCQUFnQjtBQUFBLE1BR3RGLElBQUksZUFBZTtBQUFBLE1BQ25CLElBQUksZ0JBQTBCLENBQUM7QUFBQSxNQUUvQixPQUFPLFlBQVksSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTO0FBQUEsUUFFN0MsTUFBTSxTQUFTLElBQUksUUFBUTtBQUFBLFFBQzNCLElBQUksUUFBUTtBQUFBLFVBQ1IsSUFBSSxVQUFVLCtCQUErQixNQUFNO0FBQUEsVUFDbkQsSUFBSSxVQUFVLFFBQVEsUUFBUTtBQUFBLFFBQ2xDO0FBQUEsUUFDQSxJQUFJLFVBQVUsZ0NBQWdDLGtDQUFrQztBQUFBLFFBQ2hGLElBQUksVUFBVSxnQ0FBZ0MsdUZBQXVGO0FBQUEsUUFDckksSUFBSSxVQUFVLG9DQUFvQyxNQUFNO0FBQUEsUUFDeEQsSUFBSSxJQUFJLFdBQVcsV0FBVztBQUFBLFVBQzFCLElBQUksVUFBVSxHQUFHO0FBQUEsVUFDakIsSUFBSSxJQUFJO0FBQUEsVUFDUjtBQUFBLFFBQ0o7QUFBQSxRQUNBLElBQUk7QUFBQSxVQUNBLE1BQU0sU0FBUyxNQUFNLFVBQVU7QUFBQSxVQUsvQixNQUFNLGdCQUFnQixLQUFLLE9BQU87QUFBQSxVQUNsQyxNQUFNLGFBQXVCLENBQUM7QUFBQSxVQUM5QixJQUFJLFdBQVc7QUFBQSxVQUNmLElBQUksZUFBZTtBQUFBLFVBQ25CLElBQUksR0FBRyxRQUFRLENBQUMsVUFBa0I7QUFBQSxZQUM5QixJQUFJO0FBQUEsY0FBYztBQUFBLFlBQ2xCLFlBQVksTUFBTTtBQUFBLFlBQ2xCLElBQUksV0FBVyxlQUFlO0FBQUEsY0FDMUIsZUFBZTtBQUFBLGNBQ2YsSUFBSSxhQUFhO0FBQUEsY0FDakIsSUFBSSxVQUFVLGdCQUFnQixrQkFBa0I7QUFBQSxjQUNoRCxJQUFJLElBQUksS0FBSyxVQUFVLEVBQUUsU0FBUyxPQUFPLE1BQU0scUJBQXFCLFFBQVEsRUFBRSxhQUFhLGNBQWMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQUEsY0FDNUg7QUFBQSxZQUNKO0FBQUEsWUFDQSxXQUFXLEtBQUssS0FBSztBQUFBLFdBQ3hCO0FBQUEsVUFDRCxJQUFJLEdBQUcsT0FBTyxNQUFNO0FBQUEsWUFDaEIsSUFBSTtBQUFBLGNBQWM7QUFBQSxZQUNsQixNQUFNLFNBQVMsSUFBSSxVQUFVO0FBQUEsWUFDN0IsTUFBTSxPQUEwQixXQUFXLFNBQVMsSUFBSSxPQUFPLE9BQU8sVUFBVSxJQUFJO0FBQUEsWUFDcEYsTUFBTSxXQUFXLE9BQU8sT0FBTyxLQUFLLElBQUksRUFBRSxTQUFTLE9BQU8sSUFBSTtBQUFBLFlBRzlELE1BQU0sU0FBUyxJQUFJLE9BQU87QUFBQSxZQUMxQixNQUFNLFdBQVksSUFBWSxZQUFZLFVBQVU7QUFBQSxZQUNwRCxNQUFNLE9BQU8sSUFBSSxRQUFRLFFBQVE7QUFBQSxZQUNqQyxNQUFNLFVBQVUsR0FBRyxjQUFjLE9BQU87QUFBQSxZQUd4QyxNQUFNLFVBQVUsSUFBSTtBQUFBLFlBQ3BCLFlBQVksS0FBSyxVQUFVLE9BQU8sUUFBUSxJQUFJLE9BQU8sR0FBRztBQUFBLGNBQ3BELElBQUksVUFBVTtBQUFBLGdCQUFXO0FBQUEsY0FDekIsSUFBSSxNQUFNLFFBQVEsS0FBSyxHQUFHO0FBQUEsZ0JBQ3RCLFdBQVcsS0FBSztBQUFBLGtCQUFPLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFBQSxjQUNoRCxFQUFPO0FBQUEsZ0JBQ0gsUUFBUSxJQUFJLEtBQUssS0FBSztBQUFBO0FBQUEsWUFFOUI7QUFBQSxZQUdBLE1BQU0sWUFBVyxJQUFJLFFBQVEsUUFBUSxXQUFXLG1CQUFtQjtBQUFBLFlBQ25FLE1BQU0sU0FBUyxhQUFZLE1BQU07QUFBQSxjQUM3QixNQUFNLEtBQUssSUFBSTtBQUFBLGNBQ2YsSUFBSSxHQUFHLFNBQVMsTUFBTTtBQUFBLGdCQUFFLEdBQUcsTUFBTTtBQUFBLGVBQUk7QUFBQSxjQUNyQyxPQUFPLEdBQUc7QUFBQSxlQUNYLElBQUk7QUFBQSxZQUdQLE1BQU0sVUFBVSxJQUFJLFFBQVEsU0FBUztBQUFBLGNBQ2pDO0FBQUEsY0FDQTtBQUFBLGNBQ0EsTUFBTSxXQUFXLFNBQVMsV0FBVyxTQUFTLE9BQTBCO0FBQUEsY0FDeEU7QUFBQSxZQUNKLENBQUM7QUFBQSxZQUdELE1BQU0sU0FBUyxPQUFPLFFBQVEsR0FBRztBQUFBLFlBQ2pDLE1BQU0sV0FBVyxVQUFVLElBQUksT0FBTyxVQUFVLEdBQUcsTUFBTSxJQUFJO0FBQUEsWUFDNUQsUUFBZ0IsYUFBYTtBQUFBLFlBQzdCLFFBQWdCLGFBQWE7QUFBQSxZQUM5QixJQUFJO0FBQUEsWUFDSixJQUFJLGFBQWEsY0FBYztBQUFBLGNBQzNCLFlBQVk7QUFBQSxZQUNoQixFQUFPO0FBQUEsY0FDSCxZQUFZLFNBQVMsU0FBUyxJQUFJLFNBQVMsVUFBVSxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUFBLGNBQ3RFLGVBQWU7QUFBQSxjQUNmLGdCQUFnQjtBQUFBO0FBQUEsWUFFbkIsUUFBZ0IsY0FBYztBQUFBLFlBQzlCLFFBQWdCLFdBQVcsSUFBSSxRQUFRLFVBQVU7QUFBQSxZQUNqRCxRQUFnQixhQUFhLENBQUM7QUFBQSxZQUUvQixPQUFPLFNBQVMsTUFBTTtBQUFBLGNBQ2xCO0FBQUEsY0FDQSxLQUFLO0FBQUEsY0FDTDtBQUFBLGNBQ0EsYUFBYTtBQUFBLFlBQ2pCLENBQUMsRUFBRSxLQUFLLENBQUMsYUFBa0I7QUFBQSxjQUN2QixJQUFJLFNBQVMsZUFBZTtBQUFBLGdCQUN4QixJQUFJLFVBQVUsU0FBUyxRQUFRLFNBQVMsT0FBTztBQUFBLGdCQUMvQyxNQUFNLFVBQVUsU0FBUztBQUFBLGdCQUN6QixJQUFJLE9BQU8sWUFBWSxVQUFVO0FBQUEsa0JBQzdCLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUyxPQUFPLENBQUM7QUFBQSxnQkFDekMsRUFBTyxTQUFJLG1CQUFtQixjQUFjLE9BQU8sU0FBUyxPQUFPLEdBQUc7QUFBQSxrQkFDbEUsSUFBSSxJQUFJLE9BQU87QUFBQSxnQkFDbkIsRUFBTyxTQUFJLG1CQUFtQixhQUFhO0FBQUEsa0JBQ3ZDLElBQUksSUFBSSxPQUFPLEtBQUssT0FBTyxDQUFDO0FBQUEsZ0JBQ2hDLEVBQU8sU0FBSSxtQkFBbUIsTUFBTTtBQUFBLGtCQUNoQyxRQUFRLFlBQVksRUFBRSxLQUFLLENBQUMsT0FBb0I7QUFBQSxvQkFDNUMsSUFBSSxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUM7QUFBQSxtQkFDMUI7QUFBQSxnQkFDTCxFQUFPLFNBQUksV0FBVyxNQUFNO0FBQUEsa0JBQ3hCLElBQUksSUFBSSxPQUFPO0FBQUEsZ0JBQ25CLEVBQU87QUFBQSxrQkFDSCxJQUFJLElBQUk7QUFBQTtBQUFBLGNBRWhCLEVBQU87QUFBQSxnQkFFSCxNQUFNLGFBQWdELENBQUM7QUFBQSxnQkFDdkQsWUFBWSxLQUFLLFVBQVUsU0FBUyxTQUFTO0FBQUEsa0JBQ3pDLElBQUksT0FBTyxZQUFZO0FBQUEsb0JBQ25CLE1BQU0sV0FBVyxXQUFXO0FBQUEsb0JBQzVCLElBQUksTUFBTSxRQUFRLFFBQVE7QUFBQSxzQkFBRyxTQUFTLEtBQUssS0FBSztBQUFBLG9CQUMzQztBQUFBLGlDQUFXLE9BQU8sQ0FBQyxVQUFVLEtBQUs7QUFBQSxrQkFDM0MsRUFBTztBQUFBLG9CQUNILFdBQVcsT0FBTztBQUFBO0FBQUEsZ0JBRTFCO0FBQUEsZ0JBQ0EsSUFBSSxVQUFVLFNBQVMsUUFBUSxVQUFVO0FBQUEsZ0JBQ3pDLElBQUksU0FBUyxRQUFRLFFBQVEsSUFBSSxXQUFXLFFBQVE7QUFBQSxrQkFDaEQsTUFBTSxTQUFTLFNBQVMsS0FBSyxVQUFVO0FBQUEsa0JBQ3ZDLE1BQU0sT0FBTyxNQUNULE9BQU8sS0FBSyxFQUFFLEtBQUssR0FBRyxNQUFNLFlBQW1EO0FBQUEsb0JBQzNFLElBQUksTUFBTTtBQUFBLHNCQUFFLElBQUksSUFBSTtBQUFBLHNCQUFHO0FBQUEsb0JBQVE7QUFBQSxvQkFDL0IsSUFBSSxNQUFNLEtBQUs7QUFBQSxvQkFDZixPQUFPLEtBQUs7QUFBQSxtQkFDZjtBQUFBLGtCQUNMLEtBQUs7QUFBQSxnQkFDVCxFQUFPO0FBQUEsa0JBQ0gsSUFBSSxJQUFJO0FBQUE7QUFBQTtBQUFBLGFBR25CLEVBQUUsTUFBTSxDQUFDLFVBQWU7QUFBQSxjQUNyQixRQUFRLE1BQU0sS0FBSztBQUFBLGNBQ25CLElBQUksQ0FBQyxJQUFJO0FBQUEsZ0JBQWEsSUFBSSxVQUFVLEdBQUc7QUFBQSxjQUN2QyxJQUFJLElBQUksdUJBQXVCO0FBQUEsYUFDbEM7QUFBQSxXQUNKO0FBQUEsVUFDSCxPQUFPLEdBQUc7QUFBQSxVQUNSLElBQUksYUFBYTtBQUFBLFlBQU8sT0FBTyxpQkFBaUIsQ0FBQztBQUFBLFVBQ2pELE9BQU8sS0FBSyxDQUFDO0FBQUE7QUFBQSxPQUVwQjtBQUFBO0FBQUEsU0FHQyxPQUFNLENBQUMsVUFBVSxXQUFXO0FBQUEsTUFFOUIsT0FBTyxPQUFRLE9BQU87QUFBQSxNQUV0QixJQUFJLFlBQVk7QUFBQSxRQUFTO0FBQUEsTUFDekIsTUFBTSxVQUFVLE1BQU0sdUJBQXVCO0FBQUEsTUFHN0MsSUFBSSxDQUFDLE9BQU87QUFBQSxRQUFPLE9BQU8sUUFBUSxDQUFDO0FBQUEsTUFDbkMsT0FBTyxNQUFNLE1BQU07QUFBQSxNQUNuQixPQUFPLE1BQU0sWUFBWTtBQUFBLE1BQ3pCLE9BQU8sTUFBTSxTQUFTO0FBQUEsTUFFdEIsTUFBTSxvQkFBb0IsT0FBTyxZQUFZLE1BQU0sR0FBRyxFQUFFLEVBQUUsS0FBSyxJQUFJLG9CQUFvQjtBQUFBLE1BQ3ZGLE1BQU0saUJBQXdCLE9BQU8sTUFBYyx1QkFBdUIsQ0FBQztBQUFBLE1BRTNFLElBQUksQ0FBQyxlQUFlO0FBQUEsUUFBUSxlQUFlLFNBQVMsQ0FBQztBQUFBLE1BRXJELGVBQWUsUUFBUTtBQUFBLFFBQ25CLE9BQU87QUFBQSxNQUNYO0FBQUEsTUFFQSxJQUFJLENBQUMsUUFBUSxTQUFTO0FBQUEsUUFDbEIsSUFBSSxTQUF3QjtBQUFBLFFBRTVCLElBQUksT0FBMkI7QUFBQSxRQUMvQixJQUFJLFFBQVEsWUFBWSxRQUFRO0FBQUEsVUFDNUIsU0FBUyxTQUFTLGdCQUFnQjtBQUFBLFVBQ2xDLE9BQU87QUFBQSxRQUNYLEVBQU8sU0FBSSxRQUFRLFlBQVksVUFBVSxRQUFRLFlBQVksT0FBTztBQUFBLFVBQ2hFLFNBQVMsU0FBUyxnQkFBZ0I7QUFBQSxVQUNsQyxPQUFPO0FBQUEsUUFDWCxFQUFPO0FBQUEsZ0JBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLFFBQzlDLFdBQVcsVUFBVSxNQUFNLFFBQVEsZUFBZSxNQUFNLElBQUksZUFBZSxTQUFTLENBQUMsZUFBZSxNQUFNLEdBQUc7QUFBQSxVQUN6RyxPQUFPLFNBQVM7QUFBQSxVQUNoQixPQUFPLGtCQUFrQjtBQUFBLFFBQzdCO0FBQUEsTUFDSixFQUFPO0FBQUEsUUFDSCxJQUFJLE9BQU87QUFBQSxRQUNYLFdBQVcsV0FBVyxVQUFVO0FBQUEsVUFDNUIsSUFBSSxRQUFRLFNBQVMsUUFBUSxTQUFTO0FBQUEsWUFDbEMsT0FBTztBQUFBLFlBQ1AsTUFBTSxTQUFTLE1BQU0sUUFBUSxRQUFRO0FBQUEsY0FDakM7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0osQ0FBQztBQUFBLFlBQ0QsZUFBZSxRQUFRLE9BQU87QUFBQSxZQUM5QixlQUFlLFNBQVMsT0FBTztBQUFBLFlBQy9CO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxRQUNBLElBQUksQ0FBQztBQUFBLFVBQU0sTUFBTSxJQUFJLE1BQU0sWUFBWSxRQUFRLG9CQUFvQjtBQUFBO0FBQUEsTUFJdkUsSUFBSSxDQUFDLE9BQU87QUFBQSxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQUEsTUFFckMsT0FBTyxPQUFPLE1BQU07QUFBQSxNQUdwQixJQUFJLENBQUMsT0FBTztBQUFBLFFBQWMsT0FBTyxlQUFlLENBQUM7QUFBQSxNQUNqRCxPQUFPLGFBQWEsY0FBYztBQUFBLE1BQ2xDLElBQUksQ0FBQyxPQUFPLGFBQWE7QUFBQSxRQUFTLE9BQU8sYUFBYSxVQUFVLENBQUM7QUFBQSxNQUNqRSxPQUFPLGFBQWEsUUFBUSxLQUFLLHNCQUFzQjtBQUFBLE1BR3ZELElBQUksQ0FBQyxPQUFPO0FBQUEsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUFBLE1BQ3JDLE9BQU8sT0FBTyxTQUFTO0FBQUEsTUFHdkIsSUFBSSxDQUFDLE9BQU87QUFBQSxRQUFTLE9BQU8sVUFBVSxDQUFDO0FBQUEsTUFFdkMsT0FBTyxRQUFRLFFBQVE7QUFBQSxXQUNoQixPQUFPLFFBQVE7QUFBQSxNQUN0QjtBQUFBLE1BR0EsT0FBTyxNQUFNO0FBQUEsUUFDVCxZQUFZLGNBQWM7QUFBQSxNQUM5QjtBQUFBO0FBQUEsSUFHSixjQUFjLENBQUMsZ0JBQWdCO0FBQUEsTUFDM0IsU0FBUyxlQUFlLE1BQU0sVUFBVTtBQUFBO0FBQUEsU0FHdEMsWUFBVyxHQUFHO0FBQUEsTUFDaEIsTUFBTSxXQUFXLE1BQUssSUFBSSxHQUFHLFFBQVEsVUFBVTtBQUFBLE1BQy9DLE1BQU0sVUFBVSxVQUFVLElBQUksT0FBTztBQUFBO0FBQUEsRUFFN0M7QUFBQTtBQUdKLFNBQVMsYUFBYSxHQUFHO0FBQUEsRUFFckIsTUFBTSxNQUFNLENBQUMsT0FBTyxPQUFPO0FBQUEsRUFHM0IsSUFBSSxjQUFjLENBQUMsR0FBSSxXQUFXLE1BQUssSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLGFBQVksTUFBSyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFJLEdBQUksV0FBVyxNQUFLLElBQUksR0FBRyxNQUFNLE1BQU0sY0FBYyxDQUFDLElBQUksYUFBWSxNQUFLLElBQUksR0FBRyxNQUFNLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFFLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxXQUFXLFdBQVcsR0FBRyxDQUFDO0FBQUEsRUFFelIsY0FBYyxZQUFZLE9BQU8sQ0FBQyxlQUFlLGVBQWUsVUFBVTtBQUFBLEVBRTFFLE1BQU0sb0JBQW9CLFlBQVksSUFBSSxDQUFDLGVBQWdCLFdBQVcsV0FBVyxHQUFHLElBQUksSUFBSSxPQUFPLElBQUksYUFBYSxJQUFJLFVBQVc7QUFBQSxFQUVuSSxPQUFPLENBQUMsR0FBRyxLQUFLLEdBQUcsaUJBQWlCO0FBQUE7QUFHeEMsZUFBZSxzQkFBc0IsR0FBaUI7QUFBQSxFQUNsRCxNQUFNLGtCQUFrQixNQUFNLFNBQVMsTUFBSyxJQUFJLEdBQUcsTUFBTSxNQUFNLGVBQWUsR0FBRyxPQUFPO0FBQUEsRUFDeEYsTUFBTSxlQUFlLG9CQUFLLE1BQU0sZUFBZTtBQUFBLEVBQy9DLElBQUk7QUFBQSxFQUNKLFdBQVcsZUFBZSxhQUFhLFVBQWlCO0FBQUEsSUFFcEQsSUFBSSxNQUFLLElBQUksQ0FBQyxNQUFNLE1BQUssSUFBSSxHQUFHLE1BQU0sV0FBVztBQUFBLE1BQUc7QUFBQSxJQUNwRCxVQUFXLGFBQWEsU0FBaUI7QUFBQSxJQUN6QztBQUFBLEVBQ0o7QUFBQSxFQUNBLElBQUksQ0FBQztBQUFBLElBQVMsTUFBTSxJQUFJLE1BQU0sb0NBQW9DO0FBQUEsRUFDbEUsT0FBTztBQUFBOyIsCiAgImRlYnVnSWQiOiAiRjhFQ0NDMDQ5Q0Y1NjJFQTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
9788
|
+
//# debugId=A0E3E6CE1859F3B664756E2164756E21
|
|
9789
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9wYXJzZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9jcmVhdGUtZGF0ZXRpbWUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9mb3JtYXQtbnVtLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9saWIvY3JlYXRlLWRhdGV0aW1lLWZsb2F0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9saWIvY3JlYXRlLWRhdGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL2xpYi9jcmVhdGUtdGltZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvbGliL3RvbWwtcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaWFybmEvdG9tbC9wYXJzZS1wcmV0dHktZXJyb3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3BhcnNlLXN0cmluZy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvcGFyc2UtYXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3BhcnNlLXN0cmVhbS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvcGFyc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BpYXJuYS90b21sL3N0cmluZ2lmeS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGlhcm5hL3RvbWwvdG9tbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsaWZ5L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9wb2x5ZmlsbHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzL2xlZ2FjeS1zdHJlYW1zLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcy9jbG9uZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMvZ3JhY2VmdWwtZnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9mcy9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy91dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9tYWtlLWRpci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL21rZGlycy9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL3BhdGgtZXhpc3RzL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvdXRpbC91dGltZXMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL3N0YXQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi91dGlsL2FzeW5jLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvY29weS9jb3B5LXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9jb3B5L2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvcmVtb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW1wdHkvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvZmlsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2Vuc3VyZS9saW5rLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmstcGF0aHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvc3ltbGluay10eXBlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvZW5zdXJlL3N5bWxpbmsuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9lbnN1cmUvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2pzb25maWxlL3V0aWxzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9qc29uZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vanNvbmZpbGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9vdXRwdXQtZmlsZS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZnMtZXh0cmEvbGliL2pzb24vb3V0cHV0LWpzb24uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL291dHB1dC1qc29uLXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9qc29uL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9tb3ZlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvbW92ZS9tb3ZlLXN5bmMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2ZzLWV4dHJhL2xpYi9tb3ZlL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9mcy1leHRyYS9saWIvaW5kZXguanMiLCAiLi4vaW5kZXgudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoL2Rpc3QvZXNtL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24vZGlzdC9lc20vaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9hc3NlcnQtdmFsaWQtcGF0dGVybi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL2Rpc3QvZXNtL2JyYWNlLWV4cHJlc3Npb25zLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pbWF0Y2gvZGlzdC9lc20vdW5lc2NhcGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9hc3QuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9lc2NhcGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21pbmltYXRjaC9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9nbG9iLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9scnUtY2FjaGUvZGlzdC9lc20vbm9kZS9pbmRleC5taW4uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5L2Rpc3QvZXNtL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9taW5pcGFzcy9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9wYXR0ZXJuLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL2lnbm9yZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9wcm9jZXNzb3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2dsb2IvZGlzdC9lc20vd2Fsa2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9nbG9iL2Rpc3QvZXNtL2hhcy1tYWdpYy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ2xvYi9kaXN0L2VzbS9pbmRleC5qcyIsICIuLi9hZGFwdGVycy9lZGdlLW9uZS50cyIsICIuLi9hZGFwdGVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IFBhcnNlckVORCA9IDB4MTEwMDAwXG5jbGFzcyBQYXJzZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgY29uc3RydWN0b3IgKG1zZywgZmlsZW5hbWUsIGxpbmVudW1iZXIpIHtcbiAgICBzdXBlcignW1BhcnNlckVycm9yXSAnICsgbXNnLCBmaWxlbmFtZSwgbGluZW51bWJlcilcbiAgICB0aGlzLm5hbWUgPSAnUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1BhcnNlckVycm9yJ1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUGFyc2VyRXJyb3IpXG4gIH1cbn1cbmNsYXNzIFN0YXRlIHtcbiAgY29uc3RydWN0b3IgKHBhcnNlcikge1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyXG4gICAgdGhpcy5idWYgPSAnJ1xuICAgIHRoaXMucmV0dXJuZWQgPSBudWxsXG4gICAgdGhpcy5yZXN1bHQgPSBudWxsXG4gICAgdGhpcy5yZXN1bHRUYWJsZSA9IG51bGxcbiAgICB0aGlzLnJlc3VsdEFyciA9IG51bGxcbiAgfVxufVxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMucG9zID0gMFxuICAgIHRoaXMuY29sID0gMFxuICAgIHRoaXMubGluZSA9IDBcbiAgICB0aGlzLm9iaiA9IHt9XG4gICAgdGhpcy5jdHggPSB0aGlzLm9ialxuICAgIHRoaXMuc3RhY2sgPSBbXVxuICAgIHRoaXMuX2J1ZiA9ICcnXG4gICAgdGhpcy5jaGFyID0gbnVsbFxuICAgIHRoaXMuaWkgPSAwXG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdGF0ZSh0aGlzLnBhcnNlU3RhcnQpXG4gIH1cblxuICBwYXJzZSAoc3RyKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCB8fCBzdHIubGVuZ3RoID09IG51bGwpIHJldHVyblxuXG4gICAgdGhpcy5fYnVmID0gU3RyaW5nKHN0cilcbiAgICB0aGlzLmlpID0gLTFcbiAgICB0aGlzLmNoYXIgPSAtMVxuICAgIGxldCBnZXROZXh0XG4gICAgd2hpbGUgKGdldE5leHQgPT09IGZhbHNlIHx8IHRoaXMubmV4dENoYXIoKSkge1xuICAgICAgZ2V0TmV4dCA9IHRoaXMucnVuT25lKClcbiAgICB9XG4gICAgdGhpcy5fYnVmID0gbnVsbFxuICB9XG4gIG5leHRDaGFyICgpIHtcbiAgICBpZiAodGhpcy5jaGFyID09PSAweDBBKSB7XG4gICAgICArK3RoaXMubGluZVxuICAgICAgdGhpcy5jb2wgPSAtMVxuICAgIH1cbiAgICArK3RoaXMuaWlcbiAgICB0aGlzLmNoYXIgPSB0aGlzLl9idWYuY29kZVBvaW50QXQodGhpcy5paSlcbiAgICArK3RoaXMucG9zXG4gICAgKyt0aGlzLmNvbFxuICAgIHJldHVybiB0aGlzLmhhdmVCdWZmZXIoKVxuICB9XG4gIGhhdmVCdWZmZXIgKCkge1xuICAgIHJldHVybiB0aGlzLmlpIDwgdGhpcy5fYnVmLmxlbmd0aFxuICB9XG4gIHJ1bk9uZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUucGFyc2VyLmNhbGwodGhpcywgdGhpcy5zdGF0ZS5yZXR1cm5lZClcbiAgfVxuICBmaW5pc2ggKCkge1xuICAgIHRoaXMuY2hhciA9IFBhcnNlckVORFxuICAgIGxldCBsYXN0XG4gICAgZG8ge1xuICAgICAgbGFzdCA9IHRoaXMuc3RhdGUucGFyc2VyXG4gICAgICB0aGlzLnJ1bk9uZSgpXG4gICAgfSB3aGlsZSAodGhpcy5zdGF0ZS5wYXJzZXIgIT09IGxhc3QpXG5cbiAgICB0aGlzLmN0eCA9IG51bGxcbiAgICB0aGlzLnN0YXRlID0gbnVsbFxuICAgIHRoaXMuX2J1ZiA9IG51bGxcblxuICAgIHJldHVybiB0aGlzLm9ialxuICB9XG4gIG5leHQgKGZuKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgUGFyc2VyRXJyb3IoJ1RyaWVkIHRvIHNldCBzdGF0ZSB0byBub24tZXhpc3RlbnQgc3RhdGU6ICcgKyBKU09OLnN0cmluZ2lmeShmbikpXG4gICAgdGhpcy5zdGF0ZS5wYXJzZXIgPSBmblxuICB9XG4gIGdvdG8gKGZuKSB7XG4gICAgdGhpcy5uZXh0KGZuKVxuICAgIHJldHVybiB0aGlzLnJ1bk9uZSgpXG4gIH1cbiAgY2FsbCAoZm4sIHJldHVybldpdGgpIHtcbiAgICBpZiAocmV0dXJuV2l0aCkgdGhpcy5uZXh0KHJldHVybldpdGgpXG4gICAgdGhpcy5zdGFjay5wdXNoKHRoaXMuc3RhdGUpXG4gICAgdGhpcy5zdGF0ZSA9IG5ldyBTdGF0ZShmbilcbiAgfVxuICBjYWxsTm93IChmbiwgcmV0dXJuV2l0aCkge1xuICAgIHRoaXMuY2FsbChmbiwgcmV0dXJuV2l0aClcbiAgICByZXR1cm4gdGhpcy5ydW5PbmUoKVxuICB9XG4gIHJldHVybiAodmFsdWUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA9PT0gMCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgUGFyc2VyRXJyb3IoJ1N0YWNrIHVuZGVyZmxvdycpKVxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IHRoaXMuc3RhdGUuYnVmXG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuc3RhY2sucG9wKClcbiAgICB0aGlzLnN0YXRlLnJldHVybmVkID0gdmFsdWVcbiAgfVxuICByZXR1cm5Ob3cgKHZhbHVlKSB7XG4gICAgdGhpcy5yZXR1cm4odmFsdWUpXG4gICAgcmV0dXJuIHRoaXMucnVuT25lKClcbiAgfVxuICBjb25zdW1lICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlckVORCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgUGFyc2VyRXJyb3IoJ1VuZXhwZWN0ZWQgZW5kLW9mLWJ1ZmZlcicpKVxuICAgIHRoaXMuc3RhdGUuYnVmICs9IHRoaXMuX2J1Zlt0aGlzLmlpXVxuICB9XG4gIGVycm9yIChlcnIpIHtcbiAgICBlcnIubGluZSA9IHRoaXMubGluZVxuICAgIGVyci5jb2wgPSB0aGlzLmNvbFxuICAgIGVyci5wb3MgPSB0aGlzLnBvc1xuICAgIHJldHVybiBlcnJcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwYXJzZVN0YXJ0ICgpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2VyRXJyb3IoJ011c3QgZGVjbGFyZSBhIHBhcnNlU3RhcnQgbWV0aG9kJylcbiAgfVxufVxuUGFyc2VyLkVORCA9IFBhcnNlckVORFxuUGFyc2VyLkVycm9yID0gUGFyc2VyRXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gUGFyc2VyXG4iLAogICAgIid1c2Ugc3RyaWN0J1xubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZSA9PiB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc05hTihkYXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgRGF0ZXRpbWUnKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBkYXRlXG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IChkLCBudW0pID0+IHtcbiAgbnVtID0gU3RyaW5nKG51bSlcbiAgd2hpbGUgKG51bS5sZW5ndGggPCBkKSBudW0gPSAnMCcgKyBudW1cbiAgcmV0dXJuIG51bVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IGYgPSByZXF1aXJlKCcuL2Zvcm1hdC1udW0uanMnKVxuXG5jbGFzcyBGbG9hdGluZ0RhdGVUaW1lIGV4dGVuZHMgRGF0ZSB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHN1cGVyKHZhbHVlICsgJ1onKVxuICAgIHRoaXMuaXNGbG9hdGluZyA9IHRydWVcbiAgfVxuICB0b0lTT1N0cmluZyAoKSB7XG4gICAgY29uc3QgZGF0ZSA9IGAke3RoaXMuZ2V0VVRDRnVsbFllYXIoKX0tJHtmKDIsIHRoaXMuZ2V0VVRDTW9udGgoKSArIDEpfS0ke2YoMiwgdGhpcy5nZXRVVENEYXRlKCkpfWBcbiAgICBjb25zdCB0aW1lID0gYCR7ZigyLCB0aGlzLmdldFVUQ0hvdXJzKCkpfToke2YoMiwgdGhpcy5nZXRVVENNaW51dGVzKCkpfToke2YoMiwgdGhpcy5nZXRVVENTZWNvbmRzKCkpfS4ke2YoMywgdGhpcy5nZXRVVENNaWxsaXNlY29uZHMoKSl9YFxuICAgIHJldHVybiBgJHtkYXRlfVQke3RpbWV9YFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWUgPT4ge1xuICBjb25zdCBkYXRlID0gbmV3IEZsb2F0aW5nRGF0ZVRpbWUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIERhdGV0aW1lJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZiA9IHJlcXVpcmUoJy4vZm9ybWF0LW51bS5qcycpXG5jb25zdCBEYXRlVGltZSA9IGdsb2JhbC5EYXRlXG5cbmNsYXNzIERhdGUgZXh0ZW5kcyBEYXRlVGltZSB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHN1cGVyKHZhbHVlKVxuICAgIHRoaXMuaXNEYXRlID0gdHJ1ZVxuICB9XG4gIHRvSVNPU3RyaW5nICgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRVVENGdWxsWWVhcigpfS0ke2YoMiwgdGhpcy5nZXRVVENNb250aCgpICsgMSl9LSR7ZigyLCB0aGlzLmdldFVUQ0RhdGUoKSl9YFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWUgPT4ge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIERhdGV0aW1lJylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZiA9IHJlcXVpcmUoJy4vZm9ybWF0LW51bS5qcycpXG5cbmNsYXNzIFRpbWUgZXh0ZW5kcyBEYXRlIHtcbiAgY29uc3RydWN0b3IgKHZhbHVlKSB7XG4gICAgc3VwZXIoYDAwMDAtMDEtMDFUJHt2YWx1ZX1aYClcbiAgICB0aGlzLmlzVGltZSA9IHRydWVcbiAgfVxuICB0b0lTT1N0cmluZyAoKSB7XG4gICAgcmV0dXJuIGAke2YoMiwgdGhpcy5nZXRVVENIb3VycygpKX06JHtmKDIsIHRoaXMuZ2V0VVRDTWludXRlcygpKX06JHtmKDIsIHRoaXMuZ2V0VVRDU2Vjb25kcygpKX0uJHtmKDMsIHRoaXMuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpfWBcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZhbHVlID0+IHtcbiAgY29uc3QgZGF0ZSA9IG5ldyBUaW1lKHZhbHVlKVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBEYXRldGltZScpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRhdGVcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy13cmFwcGVycywgbm8tZXZhbCwgY2FtZWxjYXNlLCBvcGVyYXRvci1saW5lYnJlYWsgKi9cbm1vZHVsZS5leHBvcnRzID0gbWFrZVBhcnNlckNsYXNzKHJlcXVpcmUoJy4vcGFyc2VyLmpzJykpXG5tb2R1bGUuZXhwb3J0cy5tYWtlUGFyc2VyQ2xhc3MgPSBtYWtlUGFyc2VyQ2xhc3NcblxuY2xhc3MgVG9tbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobXNnKSB7XG4gICAgc3VwZXIobXNnKVxuICAgIHRoaXMubmFtZSA9ICdUb21sRXJyb3InXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFRvbWxFcnJvcilcbiAgICB0aGlzLmZyb21UT01MID0gdHJ1ZVxuICAgIHRoaXMud3JhcHBlZCA9IG51bGxcbiAgfVxufVxuVG9tbEVycm9yLndyYXAgPSBlcnIgPT4ge1xuICBjb25zdCB0ZXJyID0gbmV3IFRvbWxFcnJvcihlcnIubWVzc2FnZSlcbiAgdGVyci5jb2RlID0gZXJyLmNvZGVcbiAgdGVyci53cmFwcGVkID0gZXJyXG4gIHJldHVybiB0ZXJyXG59XG5tb2R1bGUuZXhwb3J0cy5Ub21sRXJyb3IgPSBUb21sRXJyb3JcblxuY29uc3QgY3JlYXRlRGF0ZVRpbWUgPSByZXF1aXJlKCcuL2NyZWF0ZS1kYXRldGltZS5qcycpXG5jb25zdCBjcmVhdGVEYXRlVGltZUZsb2F0ID0gcmVxdWlyZSgnLi9jcmVhdGUtZGF0ZXRpbWUtZmxvYXQuanMnKVxuY29uc3QgY3JlYXRlRGF0ZSA9IHJlcXVpcmUoJy4vY3JlYXRlLWRhdGUuanMnKVxuY29uc3QgY3JlYXRlVGltZSA9IHJlcXVpcmUoJy4vY3JlYXRlLXRpbWUuanMnKVxuXG5jb25zdCBDVFJMX0kgPSAweDA5XG5jb25zdCBDVFJMX0ogPSAweDBBXG5jb25zdCBDVFJMX00gPSAweDBEXG5jb25zdCBDVFJMX0NIQVJfQk9VTkRBUlkgPSAweDFGIC8vIHRoZSBsYXN0IG5vbi1jaGFyYWN0ZXIgaW4gdGhlIGxhdGluMSByZWdpb24gb2YgdW5pY29kZSwgZXhjZXB0IERFTFxuY29uc3QgQ0hBUl9TUCA9IDB4MjBcbmNvbnN0IENIQVJfUVVPVCA9IDB4MjJcbmNvbnN0IENIQVJfTlVNID0gMHgyM1xuY29uc3QgQ0hBUl9BUE9TID0gMHgyN1xuY29uc3QgQ0hBUl9QTFVTID0gMHgyQlxuY29uc3QgQ0hBUl9DT01NQSA9IDB4MkNcbmNvbnN0IENIQVJfSFlQSEVOID0gMHgyRFxuY29uc3QgQ0hBUl9QRVJJT0QgPSAweDJFXG5jb25zdCBDSEFSXzAgPSAweDMwXG5jb25zdCBDSEFSXzEgPSAweDMxXG5jb25zdCBDSEFSXzcgPSAweDM3XG5jb25zdCBDSEFSXzkgPSAweDM5XG5jb25zdCBDSEFSX0NPTE9OID0gMHgzQVxuY29uc3QgQ0hBUl9FUVVBTFMgPSAweDNEXG5jb25zdCBDSEFSX0EgPSAweDQxXG5jb25zdCBDSEFSX0UgPSAweDQ1XG5jb25zdCBDSEFSX0YgPSAweDQ2XG5jb25zdCBDSEFSX1QgPSAweDU0XG5jb25zdCBDSEFSX1UgPSAweDU1XG5jb25zdCBDSEFSX1ogPSAweDVBXG5jb25zdCBDSEFSX0xPV0JBUiA9IDB4NUZcbmNvbnN0IENIQVJfYSA9IDB4NjFcbmNvbnN0IENIQVJfYiA9IDB4NjJcbmNvbnN0IENIQVJfZSA9IDB4NjVcbmNvbnN0IENIQVJfZiA9IDB4NjZcbmNvbnN0IENIQVJfaSA9IDB4NjlcbmNvbnN0IENIQVJfbCA9IDB4NkNcbmNvbnN0IENIQVJfbiA9IDB4NkVcbmNvbnN0IENIQVJfbyA9IDB4NkZcbmNvbnN0IENIQVJfciA9IDB4NzJcbmNvbnN0IENIQVJfcyA9IDB4NzNcbmNvbnN0IENIQVJfdCA9IDB4NzRcbmNvbnN0IENIQVJfdSA9IDB4NzVcbmNvbnN0IENIQVJfeCA9IDB4NzhcbmNvbnN0IENIQVJfeiA9IDB4N0FcbmNvbnN0IENIQVJfTENVQiA9IDB4N0JcbmNvbnN0IENIQVJfUkNVQiA9IDB4N0RcbmNvbnN0IENIQVJfTFNRQiA9IDB4NUJcbmNvbnN0IENIQVJfQlNPTCA9IDB4NUNcbmNvbnN0IENIQVJfUlNRQiA9IDB4NURcbmNvbnN0IENIQVJfREVMID0gMHg3RlxuY29uc3QgU1VSUk9HQVRFX0ZJUlNUID0gMHhEODAwXG5jb25zdCBTVVJST0dBVEVfTEFTVCA9IDB4REZGRlxuXG5jb25zdCBlc2NhcGVzID0ge1xuICBbQ0hBUl9iXTogJ1xcdTAwMDgnLFxuICBbQ0hBUl90XTogJ1xcdTAwMDknLFxuICBbQ0hBUl9uXTogJ1xcdTAwMEEnLFxuICBbQ0hBUl9mXTogJ1xcdTAwMEMnLFxuICBbQ0hBUl9yXTogJ1xcdTAwMEQnLFxuICBbQ0hBUl9RVU9UXTogJ1xcdTAwMjInLFxuICBbQ0hBUl9CU09MXTogJ1xcdTAwNUMnXG59XG5cbmZ1bmN0aW9uIGlzRGlnaXQgKGNwKSB7XG4gIHJldHVybiBjcCA+PSBDSEFSXzAgJiYgY3AgPD0gQ0hBUl85XG59XG5mdW5jdGlvbiBpc0hleGl0IChjcCkge1xuICByZXR1cm4gKGNwID49IENIQVJfQSAmJiBjcCA8PSBDSEFSX0YpIHx8IChjcCA+PSBDSEFSX2EgJiYgY3AgPD0gQ0hBUl9mKSB8fCAoY3AgPj0gQ0hBUl8wICYmIGNwIDw9IENIQVJfOSlcbn1cbmZ1bmN0aW9uIGlzQml0IChjcCkge1xuICByZXR1cm4gY3AgPT09IENIQVJfMSB8fCBjcCA9PT0gQ0hBUl8wXG59XG5mdW5jdGlvbiBpc09jdGl0IChjcCkge1xuICByZXR1cm4gKGNwID49IENIQVJfMCAmJiBjcCA8PSBDSEFSXzcpXG59XG5mdW5jdGlvbiBpc0FscGhhTnVtUXVvdGVIeXBoZW4gKGNwKSB7XG4gIHJldHVybiAoY3AgPj0gQ0hBUl9BICYmIGNwIDw9IENIQVJfWilcbiAgICAgIHx8IChjcCA+PSBDSEFSX2EgJiYgY3AgPD0gQ0hBUl96KVxuICAgICAgfHwgKGNwID49IENIQVJfMCAmJiBjcCA8PSBDSEFSXzkpXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9BUE9TXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9RVU9UXG4gICAgICB8fCBjcCA9PT0gQ0hBUl9MT1dCQVJcbiAgICAgIHx8IGNwID09PSBDSEFSX0hZUEhFTlxufVxuZnVuY3Rpb24gaXNBbHBoYU51bUh5cGhlbiAoY3ApIHtcbiAgcmV0dXJuIChjcCA+PSBDSEFSX0EgJiYgY3AgPD0gQ0hBUl9aKVxuICAgICAgfHwgKGNwID49IENIQVJfYSAmJiBjcCA8PSBDSEFSX3opXG4gICAgICB8fCAoY3AgPj0gQ0hBUl8wICYmIGNwIDw9IENIQVJfOSlcbiAgICAgIHx8IGNwID09PSBDSEFSX0xPV0JBUlxuICAgICAgfHwgY3AgPT09IENIQVJfSFlQSEVOXG59XG5jb25zdCBfdHlwZSA9IFN5bWJvbCgndHlwZScpXG5jb25zdCBfZGVjbGFyZWQgPSBTeW1ib2woJ2RlY2xhcmVkJylcblxuY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG5jb25zdCBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuY29uc3QgZGVzY3JpcHRvciA9IHtjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkfVxuXG5mdW5jdGlvbiBoYXNLZXkgKG9iaiwga2V5KSB7XG4gIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgcmV0dXJuIHRydWVcbiAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycpIGRlZmluZVByb3BlcnR5KG9iaiwgJ19fcHJvdG9fXycsIGRlc2NyaXB0b3IpXG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBJTkxJTkVfVEFCTEUgPSBTeW1ib2woJ2lubGluZS10YWJsZScpXG5mdW5jdGlvbiBJbmxpbmVUYWJsZSAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSwge1xuICAgIFtfdHlwZV06IHt2YWx1ZTogSU5MSU5FX1RBQkxFfVxuICB9KVxufVxuZnVuY3Rpb24gaXNJbmxpbmVUYWJsZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBJTkxJTkVfVEFCTEVcbn1cblxuY29uc3QgVEFCTEUgPSBTeW1ib2woJ3RhYmxlJylcbmZ1bmN0aW9uIFRhYmxlICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCB7XG4gICAgW190eXBlXToge3ZhbHVlOiBUQUJMRX0sXG4gICAgW19kZWNsYXJlZF06IHt2YWx1ZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlfVxuICB9KVxufVxuZnVuY3Rpb24gaXNUYWJsZSAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBUQUJMRVxufVxuXG5jb25zdCBfY29udGVudFR5cGUgPSBTeW1ib2woJ2NvbnRlbnQtdHlwZScpXG5jb25zdCBJTkxJTkVfTElTVCA9IFN5bWJvbCgnaW5saW5lLWxpc3QnKVxuZnVuY3Rpb24gSW5saW5lTGlzdCAodHlwZSkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoW10sIHtcbiAgICBbX3R5cGVdOiB7dmFsdWU6IElOTElORV9MSVNUfSxcbiAgICBbX2NvbnRlbnRUeXBlXToge3ZhbHVlOiB0eXBlfVxuICB9KVxufVxuZnVuY3Rpb24gaXNJbmxpbmVMaXN0IChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2YgKG9iaikgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIG9ialtfdHlwZV0gPT09IElOTElORV9MSVNUXG59XG5cbmNvbnN0IExJU1QgPSBTeW1ib2woJ2xpc3QnKVxuZnVuY3Rpb24gTGlzdCAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhbXSwge1xuICAgIFtfdHlwZV06IHt2YWx1ZTogTElTVH1cbiAgfSlcbn1cbmZ1bmN0aW9uIGlzTGlzdCAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBMSVNUXG59XG5cbi8vIGluIGFuIGV2YWwsIHRvIGxldCBidW5kbGVycyBub3Qgc2x1cnAgaW4gYSB1dGlsIHByb3h5XG5sZXQgX2N1c3RvbVxudHJ5IHtcbiAgY29uc3QgdXRpbEluc3BlY3QgPSBldmFsKFwicmVxdWlyZSgndXRpbCcpLmluc3BlY3RcIilcbiAgX2N1c3RvbSA9IHV0aWxJbnNwZWN0LmN1c3RvbVxufSBjYXRjaCAoXykge1xuICAvKiBldmFsIHJlcXVpcmUgbm90IGF2YWlsYWJsZSBpbiB0cmFuc3BpbGVkIGJ1bmRsZSAqL1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnN0IF9pbnNwZWN0ID0gX2N1c3RvbSB8fCAnaW5zcGVjdCdcblxuY2xhc3MgQm94ZWRCaWdJbnQge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWx1ZSA9IGdsb2JhbC5CaWdJbnQuYXNJbnROKDY0LCB2YWx1ZSlcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIF90eXBlLCB7dmFsdWU6IElOVEVHRVJ9KVxuICB9XG4gIGlzTmFOICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbFxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHRvU3RyaW5nICgpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMudmFsdWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgW19pbnNwZWN0XSAoKSB7XG4gICAgcmV0dXJuIGBbQmlnSW50OiAke3RoaXMudG9TdHJpbmcoKX1dfWBcbiAgfVxuICB2YWx1ZU9mICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG59XG5cbmNvbnN0IElOVEVHRVIgPSBTeW1ib2woJ2ludGVnZXInKVxuZnVuY3Rpb24gSW50ZWdlciAodmFsdWUpIHtcbiAgbGV0IG51bSA9IE51bWJlcih2YWx1ZSlcbiAgLy8gLTAgaXMgYSBmbG9hdCB0aGluZywgbm90IGFuIGludCB0aGluZ1xuICBpZiAoT2JqZWN0LmlzKG51bSwgLTApKSBudW0gPSAwXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChnbG9iYWwuQmlnSW50ICYmICFOdW1iZXIuaXNTYWZlSW50ZWdlcihudW0pKSB7XG4gICAgcmV0dXJuIG5ldyBCb3hlZEJpZ0ludCh2YWx1ZSlcbiAgfSBlbHNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZXcgTnVtYmVyKG51bSksIHtcbiAgICAgIGlzTmFOOiB7dmFsdWU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzTmFOKHRoaXMpIH19LFxuICAgICAgW190eXBlXToge3ZhbHVlOiBJTlRFR0VSfSxcbiAgICAgIFtfaW5zcGVjdF06IHt2YWx1ZTogKCkgPT4gYFtJbnRlZ2VyOiAke3ZhbHVlfV1gfVxuICAgIH0pXG4gIH1cbn1cbmZ1bmN0aW9uIGlzSW50ZWdlciAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBJTlRFR0VSXG59XG5cbmNvbnN0IEZMT0FUID0gU3ltYm9sKCdmbG9hdCcpXG5mdW5jdGlvbiBGbG9hdCAodmFsdWUpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG5ldyBOdW1iZXIodmFsdWUpLCB7XG4gICAgW190eXBlXToge3ZhbHVlOiBGTE9BVH0sXG4gICAgW19pbnNwZWN0XToge3ZhbHVlOiAoKSA9PiBgW0Zsb2F0OiAke3ZhbHVlfV1gfVxuICB9KVxufVxuZnVuY3Rpb24gaXNGbG9hdCAob2JqKSB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIChvYmopICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiBvYmpbX3R5cGVdID09PSBGTE9BVFxufVxuXG5mdW5jdGlvbiB0b21sVHlwZSAodmFsdWUpIHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnbnVsbCdcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ2RhdGV0aW1lJ1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKF90eXBlIGluIHZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKHZhbHVlW190eXBlXSkge1xuICAgICAgICBjYXNlIElOTElORV9UQUJMRTogcmV0dXJuICdpbmxpbmUtdGFibGUnXG4gICAgICAgIGNhc2UgSU5MSU5FX0xJU1Q6IHJldHVybiAnaW5saW5lLWxpc3QnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGNhc2UgVEFCTEU6IHJldHVybiAndGFibGUnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGNhc2UgTElTVDogcmV0dXJuICdsaXN0J1xuICAgICAgICBjYXNlIEZMT0FUOiByZXR1cm4gJ2Zsb2F0J1xuICAgICAgICBjYXNlIElOVEVHRVI6IHJldHVybiAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHR5cGVcbn1cblxuZnVuY3Rpb24gbWFrZVBhcnNlckNsYXNzIChQYXJzZXIpIHtcbiAgY2xhc3MgVE9NTFBhcnNlciBleHRlbmRzIFBhcnNlciB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgc3VwZXIoKVxuICAgICAgdGhpcy5jdHggPSB0aGlzLm9iaiA9IFRhYmxlKClcbiAgICB9XG5cbiAgICAvKiBNQVRDSCBIRUxQRVIgKi9cbiAgICBhdEVuZE9mV29yZCAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGFyID09PSBDSEFSX05VTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSB8fCB0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5hdEVuZE9mTGluZSgpXG4gICAgfVxuICAgIGF0RW5kT2ZMaW5lICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDVFJMX01cbiAgICB9XG5cbiAgICBwYXJzZVN0YXJ0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlVGFibGVPckxpc3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlQ29tbWVudClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9NKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKGlzQWxwaGFOdW1RdW90ZUh5cGhlbih0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUFzc2lnblN0YXRlbWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcihgVW5rbm93biBjaGFyYWN0ZXIgXCIke3RoaXMuY2hhcn1cImApKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhFTFBFUiwgdGhpcyBzdHJpcHMgYW55IHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmVcbiAgICAvLyB0aGVuIFJFVFVSTlMuIExhc3Qgc3RhdGUgaW4gYSBwcm9kdWN0aW9uLlxuICAgIHBhcnNlV2hpdGVzcGFjZVRvRU9MICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX05VTSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VDb21tZW50KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIG9ubHkgd2hpdGVzcGFjZSBvciBjb21tZW50cyB0aWxsIGVuZCBvZiBsaW5lJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogQVNTSUdOTUVOVDoga2V5ID0gdmFsdWUgKi9cbiAgICBwYXJzZUFzc2lnblN0YXRlbWVudCAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VBc3NpZ24sIHRoaXMucmVjb3JkQXNzaWduU3RhdGVtZW50KVxuICAgIH1cbiAgICByZWNvcmRBc3NpZ25TdGF0ZW1lbnQgKGt2KSB7XG4gICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5jdHhcbiAgICAgIGxldCBmaW5hbEtleSA9IGt2LmtleS5wb3AoKVxuICAgICAgZm9yIChsZXQga3cgb2Yga3Yua2V5KSB7XG4gICAgICAgIGlmIChoYXNLZXkodGFyZ2V0LCBrdykgJiYgKCFpc1RhYmxlKHRhcmdldFtrd10pIHx8IHRhcmdldFtrd11bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2t3XSA9IHRhcmdldFtrd10gfHwgVGFibGUoKVxuICAgICAgfVxuICAgICAgaWYgKGhhc0tleSh0YXJnZXQsIGZpbmFsS2V5KSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICB9XG4gICAgICAvLyB1bmJveCBvdXIgbnVtYmVyc1xuICAgICAgaWYgKGlzSW50ZWdlcihrdi52YWx1ZSkgfHwgaXNGbG9hdChrdi52YWx1ZSkpIHtcbiAgICAgICAgdGFyZ2V0W2ZpbmFsS2V5XSA9IGt2LnZhbHVlLnZhbHVlT2YoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2ZpbmFsS2V5XSA9IGt2LnZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VXaGl0ZXNwYWNlVG9FT0wpXG4gICAgfVxuXG4gICAgLyogQVNTU0lHTk1FTlQgZXhwcmVzc2lvbiwga2V5ID0gdmFsdWUgcG9zc2libHkgaW5zaWRlIGFuIGlubGluZSB0YWJsZSAqL1xuICAgIHBhcnNlQXNzaWduICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucmVjb3JkQXNzaWduS2V5d29yZClcbiAgICB9XG4gICAgcmVjb3JkQXNzaWduS2V5d29yZCAoa2V5KSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSkge1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdFRhYmxlLnB1c2goa2V5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSA9IFtrZXldXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VBc3NpZ25LZXl3b3JkUHJlRG90KVxuICAgIH1cbiAgICBwYXJzZUFzc2lnbktleXdvcmRQcmVEb3QgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlQXNzaWduS2V5d29yZFBvc3REb3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciAhPT0gQ0hBUl9TUCAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VBc3NpZ25FcXVhbClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VBc3NpZ25LZXl3b3JkUG9zdERvdCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyICE9PSBDSEFSX1NQICYmIHRoaXMuY2hhciAhPT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucmVjb3JkQXNzaWduS2V5d29yZClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUFzc2lnbkVxdWFsICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfRVFVQUxTKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUFzc2lnblByZVZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCI9XCInKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VBc3NpZ25QcmVWYWx1ZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VWYWx1ZSwgdGhpcy5yZWNvcmRBc3NpZ25WYWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmVjb3JkQXNzaWduVmFsdWUgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coe2tleTogdGhpcy5zdGF0ZS5yZXN1bHRUYWJsZSwgdmFsdWU6IHZhbHVlfSlcbiAgICB9XG5cbiAgICAvKiBDT01NRU5UUzogIy4uLmVvbCAqL1xuICAgIHBhcnNlQ29tbWVudCAoKSB7XG4gICAgICBkbyB7XG4gICAgICAgIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oKVxuICAgICAgICB9XG4gICAgICB9IHdoaWxlICh0aGlzLm5leHRDaGFyKCkpXG4gICAgfVxuXG4gICAgLyogVEFCTEVTIEFORCBMSVNUUywgW2Zvb10gYW5kIFtbZm9vXV0gKi9cbiAgICBwYXJzZVRhYmxlT3JMaXN0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTFNRQikge1xuICAgICAgICB0aGlzLm5leHQodGhpcy5wYXJzZUxpc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUYWJsZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBUQUJMRSBbZm9vLmJhci5iYXpdICovXG4gICAgcGFyc2VUYWJsZSAoKSB7XG4gICAgICB0aGlzLmN0eCA9IHRoaXMub2JqXG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUYWJsZU5leHQpXG4gICAgfVxuICAgIHBhcnNlVGFibGVOZXh0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucGFyc2VUYWJsZU1vcmUpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVGFibGVNb3JlIChrZXl3b3JkKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIGlmIChoYXNLZXkodGhpcy5jdHgsIGtleXdvcmQpICYmICghaXNUYWJsZSh0aGlzLmN0eFtrZXl3b3JkXSkgfHwgdGhpcy5jdHhba2V5d29yZF1bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXSA9IHRoaXMuY3R4W2tleXdvcmRdIHx8IFRhYmxlKClcbiAgICAgICAgICB0aGlzLmN0eFtfZGVjbGFyZWRdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVdoaXRlc3BhY2VUb0VPTClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICBpZiAoIWhhc0tleSh0aGlzLmN0eCwga2V5d29yZCkpIHtcbiAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY3R4W2tleXdvcmRdID0gVGFibGUoKVxuICAgICAgICB9IGVsc2UgaWYgKGlzVGFibGUodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXVxuICAgICAgICB9IGVsc2UgaWYgKGlzTGlzdCh0aGlzLmN0eFtrZXl3b3JkXSkpIHtcbiAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY3R4W2tleXdvcmRdW3RoaXMuY3R4W2tleXdvcmRdLmxlbmd0aCAtIDFdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgcmVkZWZpbmUgZXhpc3Rpbmcga2V5XCIpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVRhYmxlTmV4dClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIHdoaXRlc3BhY2UsIC4gb3IgXScpKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIExJU1QgW1thLmIuY11dICovXG4gICAgcGFyc2VMaXN0ICgpIHtcbiAgICAgIHRoaXMuY3R4ID0gdGhpcy5vYmpcbiAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUxpc3ROZXh0KVxuICAgIH1cbiAgICBwYXJzZUxpc3ROZXh0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUtleXdvcmQsIHRoaXMucGFyc2VMaXN0TW9yZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXN0TW9yZSAoa2V5d29yZCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUlNRQikge1xuICAgICAgICBpZiAoIWhhc0tleSh0aGlzLmN0eCwga2V5d29yZCkpIHtcbiAgICAgICAgICB0aGlzLmN0eFtrZXl3b3JkXSA9IExpc3QoKVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0lubGluZUxpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgZXh0ZW5kIGFuIGlubGluZSBhcnJheVwiKSlcbiAgICAgICAgfSBlbHNlIGlmIChpc0xpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IFRhYmxlKClcbiAgICAgICAgICB0aGlzLmN0eFtrZXl3b3JkXS5wdXNoKG5leHQpXG4gICAgICAgICAgdGhpcy5jdHggPSBuZXh0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgcmVkZWZpbmUgYW4gZXhpc3Rpbmcga2V5XCIpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpc3RFbmQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgaWYgKCFoYXNLZXkodGhpcy5jdHgsIGtleXdvcmQpKSB7XG4gICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmN0eFtrZXl3b3JkXSA9IFRhYmxlKClcbiAgICAgICAgfSBlbHNlIGlmIChpc0lubGluZUxpc3QodGhpcy5jdHhba2V5d29yZF0pKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKFwiQ2FuJ3QgZXh0ZW5kIGFuIGlubGluZSBhcnJheVwiKSlcbiAgICAgICAgfSBlbHNlIGlmIChpc0lubGluZVRhYmxlKHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcihcIkNhbid0IGV4dGVuZCBhbiBpbmxpbmUgdGFibGVcIikpXG4gICAgICAgIH0gZWxzZSBpZiAoaXNMaXN0KHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jdHhba2V5d29yZF1bdGhpcy5jdHhba2V5d29yZF0ubGVuZ3RoIC0gMV1cbiAgICAgICAgfSBlbHNlIGlmIChpc1RhYmxlKHRoaXMuY3R4W2tleXdvcmRdKSkge1xuICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jdHhba2V5d29yZF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBhbiBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGlzdE5leHQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCB3aGl0ZXNwYWNlLCAuIG9yIF0nKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXN0RW5kIChrZXl3b3JkKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1JTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlV2hpdGVzcGFjZVRvRU9MKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgd2hpdGVzcGFjZSwgLiBvciBdJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogVkFMVUUgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIGlubGluZSBsaXN0LCBpbmxpbmUgb2JqZWN0ICovXG4gICAgcGFyc2VWYWx1ZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignS2V5IHdpdGhvdXQgdmFsdWUnKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRG91YmxlU3RyaW5nKVxuICAgICAgfSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlU2luZ2xlU3RyaW5nKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlclNpZ24pXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUluZilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTmFuKVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVyT3JEYXRlVGltZSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX3QgfHwgdGhpcy5jaGFyID09PSBDSEFSX2YpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQm9vbGVhbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xTUUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlSW5saW5lTGlzdCwgdGhpcy5yZWNvcmRWYWx1ZSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xDVUIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlSW5saW5lVGFibGUsIHRoaXMucmVjb3JkVmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3Rpbmcgc3RyaW5nLCBudW1iZXIsIGRhdGV0aW1lLCBib29sZWFuLCBpbmxpbmUgYXJyYXkgb3IgaW5saW5lIHRhYmxlJykpXG4gICAgICB9XG4gICAgfVxuICAgIHJlY29yZFZhbHVlICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KHZhbHVlKVxuICAgIH1cblxuICAgIHBhcnNlSW5mICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfbikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VJbmYyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCJpbmZcIiwgXCIraW5mXCIgb3IgXCItaW5mXCInKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VJbmYyICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfZikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYgPT09ICctJykge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybigtSW5maW5pdHkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKEluZmluaXR5KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBcImluZlwiLCBcIitpbmZcIiBvciBcIi1pbmZcIicpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlTmFuICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfYSkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VOYW4yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgXCJuYW5cIicpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU5hbjIgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihOYU4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBcIm5hblwiJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogS0VZUywgYmFyZXdvcmRzIG9yIGJhc2ljLCBsaXRlcmFsLCBvciBkb3R0ZWQgKi9cbiAgICBwYXJzZUtleXdvcmQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9RVU9UKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUJhc2ljU3RyaW5nKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQVBPUykge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VMaXRlcmFsU3RyaW5nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFyZUtleSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBLRVlTOiBiYXJld29yZHMgKi9cbiAgICBwYXJzZUJhcmVLZXkgKCkge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdLZXkgZW5kZWQgd2l0aG91dCB2YWx1ZScpKVxuICAgICAgICB9IGVsc2UgaWYgKGlzQWxwaGFOdW1IeXBoZW4odGhpcy5jaGFyKSkge1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFbXB0eSBiYXJlIGtleXMgYXJlIG5vdCBhbGxvd2VkJykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cblxuICAgIC8qIFNUUklOR1MsIHNpbmdsZSBxdW90ZWQgKGxpdGVyYWwpICovXG4gICAgcGFyc2VTaW5nbGVTdHJpbmcgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZ01heWJlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTGl0ZXJhbFN0cmluZylcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXRlcmFsU3RyaW5nICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZMaW5lKCkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VudGVybWluYXRlZCBzdHJpbmcnKSlcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfREVMIHx8ICh0aGlzLmNoYXIgPD0gQ1RSTF9DSEFSX0JPVU5EQVJZICYmIHRoaXMuY2hhciAhPT0gQ1RSTF9JKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3JDb250cm9sQ2hhckluU3RyaW5nKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICB9XG4gICAgICB9IHdoaWxlICh0aGlzLm5leHRDaGFyKCkpXG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nTWF5YmUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpU3RyaW5nQ29udGVudClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50ICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9BUE9TKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpRW5kKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gUGFyc2VyLkVORCkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIG11bHRpLWxpbmUgc3RyaW5nJykpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0RFTCB8fCAodGhpcy5jaGFyIDw9IENUUkxfQ0hBUl9CT1VOREFSWSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSiAmJiB0aGlzLmNoYXIgIT09IENUUkxfTSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yQ29udHJvbENoYXJJblN0cmluZygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cbiAgICBwYXJzZUxpdGVyYWxNdWx0aUVuZCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTGl0ZXJhbE11bHRpRW5kMilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9IFwiJ1wiXG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUxpdGVyYWxNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTGl0ZXJhbE11bHRpRW5kMiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0FQT1MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9IFwiJydcIlxuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VMaXRlcmFsTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIFNUUklOR1MgZG91YmxlIHF1b3RlZCAqL1xuICAgIHBhcnNlRG91YmxlU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUVVPVCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVN0cmluZ01heWJlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFzaWNTdHJpbmcpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlQmFzaWNTdHJpbmcgKCkge1xuICAgICAgZG8ge1xuICAgICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0JTT0wpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VFc2NhcGUsIHRoaXMucmVjb3JkRXNjYXBlUmVwbGFjZW1lbnQpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXRFbmRPZkxpbmUoKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIHN0cmluZycpKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9ERUwgfHwgKHRoaXMuY2hhciA8PSBDVFJMX0NIQVJfQk9VTkRBUlkgJiYgdGhpcy5jaGFyICE9PSBDVFJMX0kpKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvckNvbnRyb2xDaGFySW5TdHJpbmcoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKHRoaXMubmV4dENoYXIoKSlcbiAgICB9XG4gICAgcmVjb3JkRXNjYXBlUmVwbGFjZW1lbnQgKHJlcGxhY2VtZW50KSB7XG4gICAgICB0aGlzLnN0YXRlLmJ1ZiArPSByZXBsYWNlbWVudFxuICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlQmFzaWNTdHJpbmcpXG4gICAgfVxuICAgIHBhcnNlTXVsdGlTdHJpbmdNYXliZSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTXVsdGlTdHJpbmcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU11bHRpU3RyaW5nICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTXVsdGlTdHJpbmdDb250ZW50ICgpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9CU09MKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlTXVsdGlFc2NhcGUsIHRoaXMucmVjb3JkTXVsdGlFc2NhcGVSZXBsYWNlbWVudClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUVVPVCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpRW5kKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gUGFyc2VyLkVORCkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIG11bHRpLWxpbmUgc3RyaW5nJykpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0RFTCB8fCAodGhpcy5jaGFyIDw9IENUUkxfQ0hBUl9CT1VOREFSWSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSSAmJiB0aGlzLmNoYXIgIT09IENUUkxfSiAmJiB0aGlzLmNoYXIgIT09IENUUkxfTSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yQ29udHJvbENoYXJJblN0cmluZygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAodGhpcy5uZXh0Q2hhcigpKVxuICAgIH1cbiAgICBlcnJvckNvbnRyb2xDaGFySW5TdHJpbmcgKCkge1xuICAgICAgbGV0IGRpc3BsYXlDb2RlID0gJ1xcXFx1MDAnXG4gICAgICBpZiAodGhpcy5jaGFyIDwgMTYpIHtcbiAgICAgICAgZGlzcGxheUNvZGUgKz0gJzAnXG4gICAgICB9XG4gICAgICBkaXNwbGF5Q29kZSArPSB0aGlzLmNoYXIudG9TdHJpbmcoMTYpXG5cbiAgICAgIHJldHVybiB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoYENvbnRyb2wgY2hhcmFjdGVycyAoY29kZXMgPCAweDFmIGFuZCAweDdmKSBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaW5ncywgdXNlICR7ZGlzcGxheUNvZGV9IGluc3RlYWRgKSlcbiAgICB9XG4gICAgcmVjb3JkTXVsdGlFc2NhcGVSZXBsYWNlbWVudCAocmVwbGFjZW1lbnQpIHtcbiAgICAgIHRoaXMuc3RhdGUuYnVmICs9IHJlcGxhY2VtZW50XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgfVxuICAgIHBhcnNlTXVsdGlFbmQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9RVU9UKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpRW5kMilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9ICdcIidcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTXVsdGlTdHJpbmdDb250ZW50KVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU11bHRpRW5kMiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1FVT1QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmICs9ICdcIlwiJ1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VNdWx0aVN0cmluZ0NvbnRlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTXVsdGlFc2NhcGUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ1RSTF9NIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9KKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU11bHRpVHJpbSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZVByZU11bHRpVHJpbSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUVzY2FwZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VQcmVNdWx0aVRyaW0gKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENUUkxfTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSikge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNdWx0aVRyaW0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCBlc2NhcGUgd2hpdGVzcGFjZVwiKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VNdWx0aVRyaW0gKCkge1xuICAgICAgLy8gZXhwbGljaXRseSB3aGl0ZXNwYWNlIGhlcmUsIEVORCBzaG91bGQgZm9sbG93IHRoZSBzYW1lIHBhdGggYXMgY2hhcnNcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENUUkxfSiB8fCB0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRXNjYXBlICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgaW4gZXNjYXBlcykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oZXNjYXBlc1t0aGlzLmNoYXJdKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfdSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VTbWFsbFVuaWNvZGUsIHRoaXMucGFyc2VVbmljb2RlUmV0dXJuKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfVSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VMYXJnZVVuaWNvZGUsIHRoaXMucGFyc2VVbmljb2RlUmV0dXJuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmtub3duIGVzY2FwZSBjaGFyYWN0ZXI6ICcgKyB0aGlzLmNoYXIpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVVuaWNvZGVSZXR1cm4gKGNoYXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IHBhcnNlSW50KGNoYXIsIDE2KVxuICAgICAgICBpZiAoY29kZVBvaW50ID49IFNVUlJPR0FURV9GSVJTVCAmJiBjb2RlUG9pbnQgPD0gU1VSUk9HQVRFX0xBU1QpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgdW5pY29kZSwgY2hhcmFjdGVyIGluIHJhbmdlIDB4RDgwMCAtIDB4REZGRiBpcyByZXNlcnZlZCcpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlUG9pbnQpKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IoVG9tbEVycm9yLndyYXAoZXJyKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VTbWFsbFVuaWNvZGUgKCkge1xuICAgICAgaWYgKCFpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiB1bmljb2RlIHNlcXVlbmNlLCBleHBlY3RlZCBoZXgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPj0gNCkgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VMYXJnZVVuaWNvZGUgKCkge1xuICAgICAgaWYgKCFpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiB1bmljb2RlIHNlcXVlbmNlLCBleHBlY3RlZCBoZXgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPj0gOCkgcmV0dXJuIHRoaXMucmV0dXJuKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBOVU1CRVJTICovXG4gICAgcGFyc2VOdW1iZXJTaWduICgpIHtcbiAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VNYXliZVNpZ25lZEluZk9yTmFuKVxuICAgIH1cbiAgICBwYXJzZU1heWJlU2lnbmVkSW5mT3JOYW4gKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9pKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUluZilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTmFuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbE5vdyh0aGlzLnBhcnNlTm9VbmRlciwgdGhpcy5wYXJzZU51bWJlckludGVnZXJTdGFydClcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VOdW1iZXJJbnRlZ2VyU3RhcnQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl8wKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckludGVnZXJFeHBvbmVudE9yRGVjaW1hbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlckludGVnZXIpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVySW50ZWdlckV4cG9uZW50T3JEZWNpbWFsICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUEVSSU9EKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXIsIHRoaXMucGFyc2VOdW1iZXJGbG9hdClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0UgfHwgdGhpcy5jaGFyID09PSBDSEFSX2UpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlTnVtYmVyRXhwb25lbnRTaWduKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KEludGVnZXIodGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckludGVnZXIgKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9FIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckV4cG9uZW50U2lnbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBJbnRlZ2VyKHRoaXMuc3RhdGUuYnVmKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHJlc3VsdC5pc05hTigpKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIG51bWJlcicpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhyZXN1bHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VOb1VuZGVyICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QgfHwgdGhpcy5jaGFyID09PSBDSEFSX0UgfHwgdGhpcy5jaGFyID09PSBDSEFSX2UpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgZGlnaXQnKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBudW1iZXInKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdygpXG4gICAgfVxuICAgIHBhcnNlTm9VbmRlckhleE9jdEJpbkxpdGVyYWwgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9MT1dCQVIgfHwgdGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZXb3JkKCkpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbmNvbXBsZXRlIG51bWJlcicpKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KClcbiAgICB9XG4gICAgcGFyc2VOdW1iZXJGbG9hdCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2UgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfRSB8fCB0aGlzLmNoYXIgPT09IENIQVJfZSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VOdW1iZXJFeHBvbmVudFNpZ24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coRmxvYXQodGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckV4cG9uZW50U2lnbiAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZU51bWJlckV4cG9uZW50KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHRoaXMuY2FsbCh0aGlzLnBhcnNlTm9VbmRlciwgdGhpcy5wYXJzZU51bWJlckV4cG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciwgZXhwZWN0ZWQgLSwgKyBvciBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU51bWJlckV4cG9uZW50ICgpIHtcbiAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KEZsb2F0KHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBOVU1CRVJTIG9yIERBVEVUSU1FUyAgKi9cbiAgICBwYXJzZU51bWJlck9yRGF0ZVRpbWUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl8wKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckJhc2VPckRhdGVUaW1lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVyT3JEYXRlVGltZU9ubHkpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVyT3JEYXRlVGltZU9ubHkgKCkge1xuICAgICAgLy8gbm90ZSwgaWYgdHdvIHplcm9zIGFyZSBpbiBhIHJvdyB0aGVuIGl0IE1VU1QgYmUgYSBkYXRlXG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVySW50ZWdlcilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPiA0KSB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckludGVnZXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9FIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU51bWJlckV4cG9uZW50U2lnbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVyLCB0aGlzLnBhcnNlTnVtYmVyRmxvYXQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlRGF0ZVRpbWUpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9DT0xPTikge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VPbmx5VGltZUhvdXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRGF0ZVRpbWVPbmx5ICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCA0KSB7XG4gICAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VPbmx5VGltZUhvdXIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFeHBlY3RlZCBkaWdpdCB3aGlsZSBwYXJzaW5nIHllYXIgcGFydCBvZiBhIGRhdGUnKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VEYXRlVGltZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0V4cGVjdGVkIGh5cGhlbiAoLSkgd2hpbGUgcGFyc2luZyB5ZWFyIHBhcnQgb2YgZGF0ZScpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlTnVtYmVyQmFzZU9yRGF0ZVRpbWUgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9iKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsLCB0aGlzLnBhcnNlSW50ZWdlckJpbilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX28pIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlTm9VbmRlckhleE9jdEJpbkxpdGVyYWwsIHRoaXMucGFyc2VJbnRlZ2VyT2N0KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfeCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVySGV4T2N0QmluTGl0ZXJhbCwgdGhpcy5wYXJzZUludGVnZXJIZXgpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9QRVJJT0QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290byh0aGlzLnBhcnNlTnVtYmVySW50ZWdlcilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZURhdGVUaW1lT25seSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhJbnRlZ2VyKHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VJbnRlZ2VySGV4ICgpIHtcbiAgICAgIGlmIChpc0hleGl0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0xPV0JBUikge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMucGFyc2VOb1VuZGVySGV4T2N0QmluTGl0ZXJhbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IEludGVnZXIodGhpcy5zdGF0ZS5idWYpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocmVzdWx0LmlzTmFOKCkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgbnVtYmVyJykpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KHJlc3VsdClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZUludGVnZXJPY3QgKCkge1xuICAgICAgaWYgKGlzT2N0aXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZilcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChyZXN1bHQuaXNOYU4oKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBudW1iZXInKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3cocmVzdWx0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlSW50ZWdlckJpbiAoKSB7XG4gICAgICBpZiAoaXNCaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTE9XQkFSKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZU5vVW5kZXJIZXhPY3RCaW5MaXRlcmFsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSW50ZWdlcih0aGlzLnN0YXRlLmJ1ZilcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChyZXN1bHQuaXNOYU4oKSkge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBudW1iZXInKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3cocmVzdWx0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogREFURVRJTUUgKi9cbiAgICBwYXJzZURhdGVUaW1lICgpIHtcbiAgICAgIC8vIHdlIGVudGVyIGhlcmUgaGF2aW5nIGp1c3QgY29uc3VtZWQgdGhlIHllYXIgYW5kIGFib3V0IHRvIGNvbnN1bWUgdGhlIGh5cGhlblxuICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdZZWFycyBsZXNzIHRoYW4gMTAwMCBtdXN0IGJlIHplcm8gcGFkZGVkIHRvIGZvdXIgY2hhcmFjdGVycycpKVxuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgPSB0aGlzLnN0YXRlLmJ1ZlxuICAgICAgdGhpcy5zdGF0ZS5idWYgPSAnJ1xuICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRGF0ZU1vbnRoKVxuICAgIH1cbiAgICBwYXJzZURhdGVNb250aCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0hZUEhFTikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignTW9udGhzIGxlc3MgdGhhbiAxMCBtdXN0IGJlIHplcm8gcGFkZGVkIHRvIHR3byBjaGFyYWN0ZXJzJykpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJy0nICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgICAgdGhpcy5zdGF0ZS5idWYgPSAnJ1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VEYXRlRGF5KVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZURhdGVEYXkgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9UIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9TUCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignRGF5cyBsZXNzIHRoYW4gMTAgbXVzdCBiZSB6ZXJvIHBhZGRlZCB0byB0d28gY2hhcmFjdGVycycpKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICctJyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlU3RhcnRUaW1lSG91cilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhjcmVhdGVEYXRlKHRoaXMuc3RhdGUucmVzdWx0ICsgJy0nICsgdGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfSBlbHNlIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVN0YXJ0VGltZUhvdXIgKCkge1xuICAgICAgaWYgKHRoaXMuYXRFbmRPZldvcmQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coY3JlYXRlRGF0ZSh0aGlzLnN0YXRlLnJlc3VsdCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VUaW1lSG91cilcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUaW1lSG91ciAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdIb3VycyBsZXNzIHRoYW4gMTAgbXVzdCBiZSB6ZXJvIHBhZGRlZCB0byB0d28gY2hhcmFjdGVycycpKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICdUJyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZU1pbilcbiAgICAgIH0gZWxzZSBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgZGF0ZXRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUaW1lTWluICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyICYmIGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPT09IDIgJiYgdGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICc6JyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVNlYylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW5jb21wbGV0ZSBkYXRldGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVTZWMgKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJzonICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgICAgICB0aGlzLnN0YXRlLmJ1ZiA9ICcnXG4gICAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVPckZyYWN0aW9uKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgZGF0ZXRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZU9ubHlUaW1lSG91ciAoKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9DT0xPTikge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5idWYubGVuZ3RoIDwgMikge1xuICAgICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSG91cnMgbGVzcyB0aGFuIDEwIG11c3QgYmUgemVybyBwYWRkZWQgdG8gdHdvIGNoYXJhY3RlcnMnKSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdCA9IHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlT25seVRpbWVNaW4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgdGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lTWluICgpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPCAyICYmIGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmJ1Zi5sZW5ndGggPT09IDIgJiYgdGhpcy5jaGFyID09PSBDSEFSX0NPTE9OKSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0ICs9ICc6JyArIHRoaXMuc3RhdGUuYnVmXG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlT25seVRpbWVTZWMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0luY29tcGxldGUgdGltZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lU2VjICgpIHtcbiAgICAgIGlmIChpc0RpZ2l0KHRoaXMuY2hhcikpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZU9ubHlUaW1lRnJhY3Rpb25NYXliZSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbmNvbXBsZXRlIHRpbWUnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VPbmx5VGltZUZyYWN0aW9uTWF5YmUgKCkge1xuICAgICAgdGhpcy5zdGF0ZS5yZXN1bHQgKz0gJzonICsgdGhpcy5zdGF0ZS5idWZcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUEVSSU9EKSB7XG4gICAgICAgIHRoaXMuc3RhdGUuYnVmID0gJydcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VPbmx5VGltZUZyYWN0aW9uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuKGNyZWF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZU9ubHlUaW1lRnJhY3Rpb24gKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmF0RW5kT2ZXb3JkKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMCkgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdFeHBlY3RlZCBkaWdpdCBpbiBtaWxsaXNlY29uZHMnKSlcbiAgICAgICAgcmV0dXJuIHRoaXMucmV0dXJuTm93KGNyZWF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyAnLicgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBwZXJpb2QgKC4pLCBtaW51cyAoLSksIHBsdXMgKCspIG9yIFonKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZVRpbWVab25lT3JGcmFjdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1BFUklPRCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICB0aGlzLm5leHQodGhpcy5wYXJzZURhdGVUaW1lRnJhY3Rpb24pXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9IWVBIRU4gfHwgdGhpcy5jaGFyID09PSBDSEFSX1BMVVMpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VUaW1lWm9uZUhvdXIpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9aKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihjcmVhdGVEYXRlVGltZSh0aGlzLnN0YXRlLnJlc3VsdCArIHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hdEVuZE9mV29yZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybk5vdyhjcmVhdGVEYXRlVGltZUZsb2F0KHRoaXMuc3RhdGUucmVzdWx0ICsgdGhpcy5zdGF0ZS5idWYpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciBpbiBkYXRldGltZSwgZXhwZWN0ZWQgcGVyaW9kICguKSwgbWludXMgKC0pLCBwbHVzICgrKSBvciBaJykpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlRGF0ZVRpbWVGcmFjdGlvbiAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuYnVmLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0V4cGVjdGVkIGRpZ2l0IGluIG1pbGxpc2Vjb25kcycpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfSFlQSEVOIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9QTFVTKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVIb3VyKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfWikge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm4oY3JlYXRlRGF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYXRFbmRPZldvcmQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXR1cm5Ob3coY3JlYXRlRGF0ZVRpbWVGbG9hdCh0aGlzLnN0YXRlLnJlc3VsdCArIHRoaXMuc3RhdGUuYnVmKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gZGF0ZXRpbWUsIGV4cGVjdGVkIHBlcmlvZCAoLiksIG1pbnVzICgtKSwgcGx1cyAoKykgb3IgWicpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVab25lSG91ciAoKSB7XG4gICAgICBpZiAoaXNEaWdpdCh0aGlzLmNoYXIpKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIC8vIEZJWE1FOiBObyBtb3JlIHJlZ2V4cHNcbiAgICAgICAgaWYgKC9cXGRcXGQkLy50ZXN0KHRoaXMuc3RhdGUuYnVmKSkgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVGltZVpvbmVTZXApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRpbWVab25lU2VwICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfQ09MT04pIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgdGhpcy5uZXh0KHRoaXMucGFyc2VUaW1lWm9uZU1pbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gZGF0ZXRpbWUsIGV4cGVjdGVkIGNvbG9uJykpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVGltZVpvbmVNaW4gKCkge1xuICAgICAgaWYgKGlzRGlnaXQodGhpcy5jaGFyKSkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICBpZiAoL1xcZFxcZCQvLnRlc3QodGhpcy5zdGF0ZS5idWYpKSByZXR1cm4gdGhpcy5yZXR1cm4oY3JlYXRlRGF0ZVRpbWUodGhpcy5zdGF0ZS5yZXN1bHQgKyB0aGlzLnN0YXRlLmJ1ZikpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGRhdGV0aW1lLCBleHBlY3RlZCBkaWdpdCcpKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qIEJPT0xFQU4gKi9cbiAgICBwYXJzZUJvb2xlYW4gKCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfdCkge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VUcnVlX3IpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9mKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUZhbHNlX2EpXG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlVHJ1ZV9yICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfcikge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VUcnVlX3UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgYm9vbGVhbiwgZXhwZWN0ZWQgdHJ1ZSBvciBmYWxzZScpKVxuICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVRydWVfdSAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX3UpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlVHJ1ZV9lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VUcnVlX2UgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0cnVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUZhbHNlX2EgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9hKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZSgpXG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUZhbHNlX2wpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgYm9vbGVhbiwgZXhwZWN0ZWQgdHJ1ZSBvciBmYWxzZScpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnNlRmFsc2VfbCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX2wpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lKClcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dCh0aGlzLnBhcnNlRmFsc2VfcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBib29sZWFuLCBleHBlY3RlZCB0cnVlIG9yIGZhbHNlJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VGYWxzZV9zICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfcykge1xuICAgICAgICB0aGlzLmNvbnN1bWUoKVxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0KHRoaXMucGFyc2VGYWxzZV9lKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdJbnZhbGlkIGJvb2xlYW4sIGV4cGVjdGVkIHRydWUgb3IgZmFsc2UnKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUZhbHNlX2UgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybihmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBib29sZWFuLCBleHBlY3RlZCB0cnVlIG9yIGZhbHNlJykpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogSU5MSU5FIExJU1RTICovXG4gICAgcGFyc2VJbmxpbmVMaXN0ICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kgfHwgdGhpcy5jaGFyID09PSBDVFJMX00gfHwgdGhpcy5jaGFyID09PSBDVFJMX0opIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EKSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignVW50ZXJtaW5hdGVkIGlubGluZSBhcnJheScpKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfTlVNKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5wYXJzZUNvbW1lbnQpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0aGlzLnN0YXRlLnJlc3VsdEFyciB8fCBJbmxpbmVMaXN0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxsTm93KHRoaXMucGFyc2VWYWx1ZSwgdGhpcy5yZWNvcmRJbmxpbmVMaXN0VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICAgIHJlY29yZElubGluZUxpc3RWYWx1ZSAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLnJlc3VsdEFycikge1xuICAgICAgICBjb25zdCBsaXN0VHlwZSA9IHRoaXMuc3RhdGUucmVzdWx0QXJyW19jb250ZW50VHlwZV1cbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdG9tbFR5cGUodmFsdWUpXG4gICAgICAgIGlmIChsaXN0VHlwZSAhPT0gdmFsdWVUeXBlKSB7XG4gICAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKGBJbmxpbmUgbGlzdHMgbXVzdCBiZSBhIHNpbmdsZSB0eXBlLCBub3QgYSBtaXggb2YgJHtsaXN0VHlwZX0gYW5kICR7dmFsdWVUeXBlfWApKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdEFyciA9IElubGluZUxpc3QodG9tbFR5cGUodmFsdWUpKVxuICAgICAgfVxuICAgICAgaWYgKGlzRmxvYXQodmFsdWUpIHx8IGlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgLy8gdW5ib3ggbm93IHRoYXQgd2UndmUgdmVyaWZpZWQgdGhleSdyZSBva1xuICAgICAgICB0aGlzLnN0YXRlLnJlc3VsdEFyci5wdXNoKHZhbHVlLnZhbHVlT2YoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUucmVzdWx0QXJyLnB1c2godmFsdWUpXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VJbmxpbmVMaXN0TmV4dClcbiAgICB9XG4gICAgcGFyc2VJbmxpbmVMaXN0TmV4dCAoKSB7XG4gICAgICBpZiAodGhpcy5jaGFyID09PSBDSEFSX1NQIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9JIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9NIHx8IHRoaXMuY2hhciA9PT0gQ1RSTF9KKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbCh0aGlzLnBhcnNlQ29tbWVudClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTU1BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUlubGluZUxpc3QpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SU1FCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUlubGluZUxpc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyLCBleHBlY3RlZCB3aGl0ZXNwYWNlLCBjb21tYSAoLCkgb3IgY2xvc2UgYnJhY2tldCAoXSknKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiBJTkxJTkUgVEFCTEUgKi9cbiAgICBwYXJzZUlubGluZVRhYmxlICgpIHtcbiAgICAgIGlmICh0aGlzLmNoYXIgPT09IENIQVJfU1AgfHwgdGhpcy5jaGFyID09PSBDVFJMX0kpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBQYXJzZXIuRU5EIHx8IHRoaXMuY2hhciA9PT0gQ0hBUl9OVU0gfHwgdGhpcy5jaGFyID09PSBDVFJMX0ogfHwgdGhpcy5jaGFyID09PSBDVFJMX00pIHtcbiAgICAgICAgdGhyb3cgdGhpcy5lcnJvcihuZXcgVG9tbEVycm9yKCdVbnRlcm1pbmF0ZWQgaW5saW5lIGFycmF5JykpXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9SQ1VCKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJldHVybih0aGlzLnN0YXRlLnJlc3VsdFRhYmxlIHx8IElubGluZVRhYmxlKCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUucmVzdWx0VGFibGUpIHRoaXMuc3RhdGUucmVzdWx0VGFibGUgPSBJbmxpbmVUYWJsZSgpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGxOb3codGhpcy5wYXJzZUFzc2lnbiwgdGhpcy5yZWNvcmRJbmxpbmVUYWJsZVZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgICByZWNvcmRJbmxpbmVUYWJsZVZhbHVlIChrdikge1xuICAgICAgbGV0IHRhcmdldCA9IHRoaXMuc3RhdGUucmVzdWx0VGFibGVcbiAgICAgIGxldCBmaW5hbEtleSA9IGt2LmtleS5wb3AoKVxuICAgICAgZm9yIChsZXQga3cgb2Yga3Yua2V5KSB7XG4gICAgICAgIGlmIChoYXNLZXkodGFyZ2V0LCBrdykgJiYgKCFpc1RhYmxlKHRhcmdldFtrd10pIHx8IHRhcmdldFtrd11bX2RlY2xhcmVkXSkpIHtcbiAgICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2t3XSA9IHRhcmdldFtrd10gfHwgVGFibGUoKVxuICAgICAgfVxuICAgICAgaWYgKGhhc0tleSh0YXJnZXQsIGZpbmFsS2V5KSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoXCJDYW4ndCByZWRlZmluZSBleGlzdGluZyBrZXlcIikpXG4gICAgICB9XG4gICAgICBpZiAoaXNJbnRlZ2VyKGt2LnZhbHVlKSB8fCBpc0Zsb2F0KGt2LnZhbHVlKSkge1xuICAgICAgICB0YXJnZXRbZmluYWxLZXldID0ga3YudmFsdWUudmFsdWVPZigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbZmluYWxLZXldID0ga3YudmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdvdG8odGhpcy5wYXJzZUlubGluZVRhYmxlTmV4dClcbiAgICB9XG4gICAgcGFyc2VJbmxpbmVUYWJsZU5leHQgKCkge1xuICAgICAgaWYgKHRoaXMuY2hhciA9PT0gQ0hBUl9TUCB8fCB0aGlzLmNoYXIgPT09IENUUkxfSSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IFBhcnNlci5FTkQgfHwgdGhpcy5jaGFyID09PSBDSEFSX05VTSB8fCB0aGlzLmNoYXIgPT09IENUUkxfSiB8fCB0aGlzLmNoYXIgPT09IENUUkxfTSkge1xuICAgICAgICB0aHJvdyB0aGlzLmVycm9yKG5ldyBUb21sRXJyb3IoJ1VudGVybWluYXRlZCBpbmxpbmUgYXJyYXknKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGFyID09PSBDSEFSX0NPTU1BKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHQodGhpcy5wYXJzZUlubGluZVRhYmxlKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXIgPT09IENIQVJfUkNVQikge1xuICAgICAgICByZXR1cm4gdGhpcy5nb3RvKHRoaXMucGFyc2VJbmxpbmVUYWJsZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IHRoaXMuZXJyb3IobmV3IFRvbWxFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIsIGV4cGVjdGVkIHdoaXRlc3BhY2UsIGNvbW1hICgsKSBvciBjbG9zZSBicmFja2V0IChdKScpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gVE9NTFBhcnNlclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcHJldHR5RXJyb3JcblxuZnVuY3Rpb24gcHJldHR5RXJyb3IgKGVyciwgYnVmKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZXJyLnBvcyA9PSBudWxsIHx8IGVyci5saW5lID09IG51bGwpIHJldHVybiBlcnJcbiAgbGV0IG1zZyA9IGVyci5tZXNzYWdlXG4gIG1zZyArPSBgIGF0IHJvdyAke2Vyci5saW5lICsgMX0sIGNvbCAke2Vyci5jb2wgKyAxfSwgcG9zICR7ZXJyLnBvc306XFxuYFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChidWYgJiYgYnVmLnNwbGl0KSB7XG4gICAgY29uc3QgbGluZXMgPSBidWYuc3BsaXQoL1xcbi8pXG4gICAgY29uc3QgbGluZU51bVdpZHRoID0gU3RyaW5nKE1hdGgubWluKGxpbmVzLmxlbmd0aCwgZXJyLmxpbmUgKyAzKSkubGVuZ3RoXG4gICAgbGV0IGxpbmVQYWRkaW5nID0gJyAnXG4gICAgd2hpbGUgKGxpbmVQYWRkaW5nLmxlbmd0aCA8IGxpbmVOdW1XaWR0aCkgbGluZVBhZGRpbmcgKz0gJyAnXG4gICAgZm9yIChsZXQgaWkgPSBNYXRoLm1heCgwLCBlcnIubGluZSAtIDEpOyBpaSA8IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgZXJyLmxpbmUgKyAyKTsgKytpaSkge1xuICAgICAgbGV0IGxpbmVOdW0gPSBTdHJpbmcoaWkgKyAxKVxuICAgICAgaWYgKGxpbmVOdW0ubGVuZ3RoIDwgbGluZU51bVdpZHRoKSBsaW5lTnVtID0gJyAnICsgbGluZU51bVxuICAgICAgaWYgKGVyci5saW5lID09PSBpaSkge1xuICAgICAgICBtc2cgKz0gbGluZU51bSArICc+ICcgKyBsaW5lc1tpaV0gKyAnXFxuJ1xuICAgICAgICBtc2cgKz0gbGluZVBhZGRpbmcgKyAnICAnXG4gICAgICAgIGZvciAobGV0IGhoID0gMDsgaGggPCBlcnIuY29sOyArK2hoKSB7XG4gICAgICAgICAgbXNnICs9ICcgJ1xuICAgICAgICB9XG4gICAgICAgIG1zZyArPSAnXlxcbidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1zZyArPSBsaW5lTnVtICsgJzogJyArIGxpbmVzW2lpXSArICdcXG4nXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGVyci5tZXNzYWdlID0gbXNnICsgJ1xcbidcbiAgcmV0dXJuIGVyclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VTdHJpbmdcblxuY29uc3QgVE9NTFBhcnNlciA9IHJlcXVpcmUoJy4vbGliL3RvbWwtcGFyc2VyLmpzJylcbmNvbnN0IHByZXR0eUVycm9yID0gcmVxdWlyZSgnLi9wYXJzZS1wcmV0dHktZXJyb3IuanMnKVxuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyAoc3RyKSB7XG4gIGlmIChnbG9iYWwuQnVmZmVyICYmIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIoc3RyKSkge1xuICAgIHN0ciA9IHN0ci50b1N0cmluZygndXRmOCcpXG4gIH1cbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICB0cnkge1xuICAgIHBhcnNlci5wYXJzZShzdHIpXG4gICAgcmV0dXJuIHBhcnNlci5maW5pc2goKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBwcmV0dHlFcnJvcihlcnIsIHN0cilcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbm1vZHVsZS5leHBvcnRzID0gcGFyc2VBc3luY1xuXG5jb25zdCBUT01MUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdG9tbC1wYXJzZXIuanMnKVxuY29uc3QgcHJldHR5RXJyb3IgPSByZXF1aXJlKCcuL3BhcnNlLXByZXR0eS1lcnJvci5qcycpXG5cbmZ1bmN0aW9uIHBhcnNlQXN5bmMgKHN0ciwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fVxuICBjb25zdCBpbmRleCA9IDBcbiAgY29uc3QgYmxvY2tzaXplID0gb3B0cy5ibG9ja3NpemUgfHwgNDA5NjBcbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNldEltbWVkaWF0ZShwYXJzZUFzeW5jTmV4dCwgaW5kZXgsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KVxuICB9KVxuICBmdW5jdGlvbiBwYXJzZUFzeW5jTmV4dCAoaW5kZXgsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgaWYgKGluZGV4ID49IHN0ci5sZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KHByZXR0eUVycm9yKGVyciwgc3RyKSlcbiAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlci5wYXJzZShzdHIuc2xpY2UoaW5kZXgsIGluZGV4ICsgYmxvY2tzaXplKSlcbiAgICAgIHNldEltbWVkaWF0ZShwYXJzZUFzeW5jTmV4dCwgaW5kZXggKyBibG9ja3NpemUsIGJsb2Nrc2l6ZSwgcmVzb2x2ZSwgcmVqZWN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVqZWN0KHByZXR0eUVycm9yKGVyciwgc3RyKSlcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlU3RyZWFtXG5cbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBUT01MUGFyc2VyID0gcmVxdWlyZSgnLi9saWIvdG9tbC1wYXJzZXIuanMnKVxuXG5mdW5jdGlvbiBwYXJzZVN0cmVhbSAoc3RtKSB7XG4gIGlmIChzdG0pIHtcbiAgICByZXR1cm4gcGFyc2VSZWFkYWJsZShzdG0pXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtKHN0bSlcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVJlYWRhYmxlIChzdG0pIHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IFRPTUxQYXJzZXIoKVxuICBzdG0uc2V0RW5jb2RpbmcoJ3V0ZjgnKVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCByZWFkYWJsZVxuICAgIGxldCBlbmRlZCA9IGZhbHNlXG4gICAgbGV0IGVycm9yZWQgPSBmYWxzZVxuICAgIGZ1bmN0aW9uIGZpbmlzaCAoKSB7XG4gICAgICBlbmRlZCA9IHRydWVcbiAgICAgIGlmIChyZWFkYWJsZSkgcmV0dXJuXG4gICAgICB0cnkge1xuICAgICAgICByZXNvbHZlKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBlcnJvciAoZXJyKSB7XG4gICAgICBlcnJvcmVkID0gdHJ1ZVxuICAgICAgcmVqZWN0KGVycilcbiAgICB9XG4gICAgc3RtLm9uY2UoJ2VuZCcsIGZpbmlzaClcbiAgICBzdG0ub25jZSgnZXJyb3InLCBlcnJvcilcbiAgICByZWFkTmV4dCgpXG5cbiAgICBmdW5jdGlvbiByZWFkTmV4dCAoKSB7XG4gICAgICByZWFkYWJsZSA9IHRydWVcbiAgICAgIGxldCBkYXRhXG4gICAgICB3aGlsZSAoKGRhdGEgPSBzdG0ucmVhZCgpKSAhPT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlci5wYXJzZShkYXRhKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3IoZXJyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZWFkYWJsZSA9IGZhbHNlXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChlbmRlZCkgcmV0dXJuIGZpbmlzaCgpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChlcnJvcmVkKSByZXR1cm5cbiAgICAgIHN0bS5vbmNlKCdyZWFkYWJsZScsIHJlYWROZXh0KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gcGFyc2VUcmFuc2Zvcm0gKCkge1xuICBjb25zdCBwYXJzZXIgPSBuZXcgVE9NTFBhcnNlcigpXG4gIHJldHVybiBuZXcgc3RyZWFtLlRyYW5zZm9ybSh7XG4gICAgb2JqZWN0TW9kZTogdHJ1ZSxcbiAgICB0cmFuc2Zvcm0gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlci5wYXJzZShjaHVuay50b1N0cmluZyhlbmNvZGluZykpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH1cbiAgICAgIGNiKClcbiAgICB9LFxuICAgIGZsdXNoIChjYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wdXNoKHBhcnNlci5maW5pc2goKSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfVxuICAgICAgY2IoKVxuICAgIH1cbiAgfSlcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vcGFyc2Utc3RyaW5nLmpzJylcbm1vZHVsZS5leHBvcnRzLmFzeW5jID0gcmVxdWlyZSgnLi9wYXJzZS1hc3luYy5qcycpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL3BhcnNlLXN0cmVhbS5qcycpXG5tb2R1bGUuZXhwb3J0cy5wcmV0dHlFcnJvciA9IHJlcXVpcmUoJy4vcGFyc2UtcHJldHR5LWVycm9yLmpzJylcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ2lmeVxubW9kdWxlLmV4cG9ydHMudmFsdWUgPSBzdHJpbmdpZnlJbmxpbmVcblxuZnVuY3Rpb24gc3RyaW5naWZ5IChvYmopIHtcbiAgaWYgKG9iaiA9PT0gbnVsbCkgdGhyb3cgdHlwZUVycm9yKCdudWxsJylcbiAgaWYgKG9iaiA9PT0gdm9pZCAoMCkpIHRocm93IHR5cGVFcnJvcigndW5kZWZpbmVkJylcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB0aHJvdyB0eXBlRXJyb3IodHlwZW9mIG9iailcblxuICBpZiAodHlwZW9mIG9iai50b0pTT04gPT09ICdmdW5jdGlvbicpIG9iaiA9IG9iai50b0pTT04oKVxuICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsXG4gIGNvbnN0IHR5cGUgPSB0b21sVHlwZShvYmopXG4gIGlmICh0eXBlICE9PSAndGFibGUnKSB0aHJvdyB0eXBlRXJyb3IodHlwZSlcbiAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCgnJywgJycsIG9iailcbn1cblxuZnVuY3Rpb24gdHlwZUVycm9yICh0eXBlKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0NhbiBvbmx5IHN0cmluZ2lmeSBvYmplY3RzLCBub3QgJyArIHR5cGUpXG59XG5cbmZ1bmN0aW9uIGFycmF5T25lVHlwZUVycm9yICgpIHtcbiAgcmV0dXJuIG5ldyBFcnJvcihcIkFycmF5IHZhbHVlcyBjYW4ndCBoYXZlIG1peGVkIHR5cGVzXCIpXG59XG5cbmZ1bmN0aW9uIGdldElubGluZUtleXMgKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5maWx0ZXIoa2V5ID0+IGlzSW5saW5lKG9ialtrZXldKSlcbn1cbmZ1bmN0aW9uIGdldENvbXBsZXhLZXlzIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuZmlsdGVyKGtleSA9PiAhaXNJbmxpbmUob2JqW2tleV0pKVxufVxuXG5mdW5jdGlvbiB0b0pTT04gKG9iaikge1xuICBsZXQgbm9iaiA9IEFycmF5LmlzQXJyYXkob2JqKSA/IFtdIDogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgJ19fcHJvdG9fXycpID8ge1snX19wcm90b19fJ106IHVuZGVmaW5lZH0gOiB7fVxuICBmb3IgKGxldCBwcm9wIG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICBpZiAob2JqW3Byb3BdICYmIHR5cGVvZiBvYmpbcHJvcF0udG9KU09OID09PSAnZnVuY3Rpb24nICYmICEoJ3RvSVNPU3RyaW5nJyBpbiBvYmpbcHJvcF0pKSB7XG4gICAgICBub2JqW3Byb3BdID0gb2JqW3Byb3BdLnRvSlNPTigpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vYmpbcHJvcF0gPSBvYmpbcHJvcF1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vYmpcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5T2JqZWN0IChwcmVmaXgsIGluZGVudCwgb2JqKSB7XG4gIG9iaiA9IHRvSlNPTihvYmopXG4gIHZhciBpbmxpbmVLZXlzXG4gIHZhciBjb21wbGV4S2V5c1xuICBpbmxpbmVLZXlzID0gZ2V0SW5saW5lS2V5cyhvYmopXG4gIGNvbXBsZXhLZXlzID0gZ2V0Q29tcGxleEtleXMob2JqKVxuICB2YXIgcmVzdWx0ID0gW11cbiAgdmFyIGlubGluZUluZGVudCA9IGluZGVudCB8fCAnJ1xuICBpbmxpbmVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICB2YXIgdHlwZSA9IHRvbWxUeXBlKG9ialtrZXldKVxuICAgIGlmICh0eXBlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlICE9PSAnbnVsbCcpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGlubGluZUluZGVudCArIHN0cmluZ2lmeUtleShrZXkpICsgJyA9ICcgKyBzdHJpbmdpZnlBbnlJbmxpbmUob2JqW2tleV0sIHRydWUpKVxuICAgIH1cbiAgfSlcbiAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSByZXN1bHQucHVzaCgnJylcbiAgdmFyIGNvbXBsZXhJbmRlbnQgPSBwcmVmaXggJiYgaW5saW5lS2V5cy5sZW5ndGggPiAwID8gaW5kZW50ICsgJyAgJyA6ICcnXG4gIGNvbXBsZXhLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICByZXN1bHQucHVzaChzdHJpbmdpZnlDb21wbGV4KHByZWZpeCwgY29tcGxleEluZGVudCwga2V5LCBvYmpba2V5XSkpXG4gIH0pXG4gIHJldHVybiByZXN1bHQuam9pbignXFxuJylcbn1cblxuZnVuY3Rpb24gaXNJbmxpbmUgKHZhbHVlKSB7XG4gIHN3aXRjaCAodG9tbFR5cGUodmFsdWUpKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICBjYXNlICdudWxsJzpcbiAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICBjYXNlICduYW4nOlxuICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMCB8fCB0b21sVHlwZSh2YWx1ZVswXSkgIT09ICd0YWJsZSdcbiAgICBjYXNlICd0YWJsZSc6XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmZ1bmN0aW9uIHRvbWxUeXBlICh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJ1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJ1xuICAvKiBlc2xpbnQtZGlzYWJsZSB2YWxpZC10eXBlb2YgKi9cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnIHx8IChOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiAhT2JqZWN0LmlzKHZhbHVlLCAtMCkpKSB7XG4gICAgcmV0dXJuICdpbnRlZ2VyJ1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gJ2Zsb2F0J1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuICdib29sZWFuJ1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ3N0cmluZydcbiAgfSBlbHNlIGlmICgndG9JU09TdHJpbmcnIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzTmFOKHZhbHVlKSA/ICd1bmRlZmluZWQnIDogJ2RhdGV0aW1lJ1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuICdhcnJheSdcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJ3RhYmxlJ1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUtleSAoa2V5KSB7XG4gIHZhciBrZXlTdHIgPSBTdHJpbmcoa2V5KVxuICBpZiAoL15bLUEtWmEtejAtOV9dKyQvLnRlc3Qoa2V5U3RyKSkge1xuICAgIHJldHVybiBrZXlTdHJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QmFzaWNTdHJpbmcoa2V5U3RyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUJhc2ljU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuICdcIicgKyBlc2NhcGVTdHJpbmcoc3RyKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykgKyAnXCInXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUxpdGVyYWxTdHJpbmcgKHN0cikge1xuICByZXR1cm4gXCInXCIgKyBzdHIgKyBcIidcIlxufVxuXG5mdW5jdGlvbiBudW1wYWQgKG51bSwgc3RyKSB7XG4gIHdoaWxlIChzdHIubGVuZ3RoIDwgbnVtKSBzdHIgPSAnMCcgKyBzdHJcbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAucmVwbGFjZSgvW1xcYl0vZywgJ1xcXFxiJylcbiAgICAucmVwbGFjZSgvXFx0L2csICdcXFxcdCcpXG4gICAgLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxuICAgIC5yZXBsYWNlKC9cXGYvZywgJ1xcXFxmJylcbiAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29udHJvbC1yZWdleCAqL1xuICAgIC5yZXBsYWNlKC8oW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2ZdKS8sIGMgPT4gJ1xcXFx1JyArIG51bXBhZCg0LCBjLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KSkpXG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1jb250cm9sLXJlZ2V4ICovXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU11bHRpbGluZVN0cmluZyAoc3RyKSB7XG4gIGxldCBlc2NhcGVkID0gc3RyLnNwbGl0KC9cXG4vKS5tYXAoc3RyID0+IHtcbiAgICByZXR1cm4gZXNjYXBlU3RyaW5nKHN0cikucmVwbGFjZSgvXCIoPz1cIlwiKS9nLCAnXFxcXFwiJylcbiAgfSkuam9pbignXFxuJylcbiAgaWYgKGVzY2FwZWQuc2xpY2UoLTEpID09PSAnXCInKSBlc2NhcGVkICs9ICdcXFxcXFxuJ1xuICByZXR1cm4gJ1wiXCJcIlxcbicgKyBlc2NhcGVkICsgJ1wiXCJcIidcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QW55SW5saW5lICh2YWx1ZSwgbXVsdGlsaW5lT2spIHtcbiAgbGV0IHR5cGUgPSB0b21sVHlwZSh2YWx1ZSlcbiAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKG11bHRpbGluZU9rICYmIC9cXG4vLnRlc3QodmFsdWUpKSB7XG4gICAgICB0eXBlID0gJ3N0cmluZy1tdWx0aWxpbmUnXG4gICAgfSBlbHNlIGlmICghL1tcXGJcXHRcXG5cXGZcXHInXS8udGVzdCh2YWx1ZSkgJiYgL1wiLy50ZXN0KHZhbHVlKSkge1xuICAgICAgdHlwZSA9ICdzdHJpbmctbGl0ZXJhbCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cmluZ2lmeUlubGluZSh2YWx1ZSwgdHlwZSlcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5SW5saW5lICh2YWx1ZSwgdHlwZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCF0eXBlKSB0eXBlID0gdG9tbFR5cGUodmFsdWUpXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3N0cmluZy1tdWx0aWxpbmUnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeU11bHRpbGluZVN0cmluZyh2YWx1ZSlcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUJhc2ljU3RyaW5nKHZhbHVlKVxuICAgIGNhc2UgJ3N0cmluZy1saXRlcmFsJzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlMaXRlcmFsU3RyaW5nKHZhbHVlKVxuICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUludGVnZXIodmFsdWUpXG4gICAgY2FzZSAnZmxvYXQnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUZsb2F0KHZhbHVlKVxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeUJvb2xlYW4odmFsdWUpXG4gICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgICAgcmV0dXJuIHN0cmluZ2lmeURhdGV0aW1lKHZhbHVlKVxuICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlJbmxpbmVBcnJheSh2YWx1ZS5maWx0ZXIoXyA9PiB0b21sVHlwZShfKSAhPT0gJ251bGwnICYmIHRvbWxUeXBlKF8pICE9PSAndW5kZWZpbmVkJyAmJiB0b21sVHlwZShfKSAhPT0gJ25hbicpKVxuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIHJldHVybiBzdHJpbmdpZnlJbmxpbmVUYWJsZSh2YWx1ZSlcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyB0eXBlRXJyb3IodHlwZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlJbnRlZ2VyICh2YWx1ZSkge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBzZWN1cml0eS9kZXRlY3QtdW5zYWZlLXJlZ2V4ICovXG4gIHJldHVybiBTdHJpbmcodmFsdWUpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICdfJylcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5RmxvYXQgKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gJ2luZidcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gLUluZmluaXR5KSB7XG4gICAgcmV0dXJuICctaW5mJ1xuICB9IGVsc2UgaWYgKE9iamVjdC5pcyh2YWx1ZSwgTmFOKSkge1xuICAgIHJldHVybiAnbmFuJ1xuICB9IGVsc2UgaWYgKE9iamVjdC5pcyh2YWx1ZSwgLTApKSB7XG4gICAgcmV0dXJuICctMC4wJ1xuICB9XG4gIHZhciBjaHVua3MgPSBTdHJpbmcodmFsdWUpLnNwbGl0KCcuJylcbiAgdmFyIGludCA9IGNodW5rc1swXVxuICB2YXIgZGVjID0gY2h1bmtzWzFdIHx8IDBcbiAgcmV0dXJuIHN0cmluZ2lmeUludGVnZXIoaW50KSArICcuJyArIGRlY1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlCb29sZWFuICh2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nKHZhbHVlKVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlEYXRldGltZSAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIgKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUgPT09ICdmbG9hdCcgfHwgdHlwZSA9PT0gJ2ludGVnZXInXG59XG5mdW5jdGlvbiBhcnJheVR5cGUgKHZhbHVlcykge1xuICB2YXIgY29udGVudFR5cGUgPSB0b21sVHlwZSh2YWx1ZXNbMF0pXG4gIGlmICh2YWx1ZXMuZXZlcnkoXyA9PiB0b21sVHlwZShfKSA9PT0gY29udGVudFR5cGUpKSByZXR1cm4gY29udGVudFR5cGVcbiAgLy8gbWl4ZWQgaW50ZWdlci9mbG9hdCwgZW1pdCBhcyBmbG9hdHNcbiAgaWYgKHZhbHVlcy5ldmVyeShfID0+IGlzTnVtYmVyKHRvbWxUeXBlKF8pKSkpIHJldHVybiAnZmxvYXQnXG4gIHJldHVybiAnbWl4ZWQnXG59XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5ICh2YWx1ZXMpIHtcbiAgY29uc3QgdHlwZSA9IGFycmF5VHlwZSh2YWx1ZXMpXG4gIGlmICh0eXBlID09PSAnbWl4ZWQnKSB7XG4gICAgdGhyb3cgYXJyYXlPbmVUeXBlRXJyb3IoKVxuICB9XG4gIHJldHVybiB0eXBlXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUlubGluZUFycmF5ICh2YWx1ZXMpIHtcbiAgdmFsdWVzID0gdG9KU09OKHZhbHVlcylcbiAgY29uc3QgdHlwZSA9IHZhbGlkYXRlQXJyYXkodmFsdWVzKVxuICB2YXIgcmVzdWx0ID0gJ1snXG4gIHZhciBzdHJpbmdpZmllZCA9IHZhbHVlcy5tYXAoXyA9PiBzdHJpbmdpZnlJbmxpbmUoXywgdHlwZSkpXG4gIGlmIChzdHJpbmdpZmllZC5qb2luKCcsICcpLmxlbmd0aCA+IDYwIHx8IC9cXG4vLnRlc3Qoc3RyaW5naWZpZWQpKSB7XG4gICAgcmVzdWx0ICs9ICdcXG4gICcgKyBzdHJpbmdpZmllZC5qb2luKCcsXFxuICAnKSArICdcXG4nXG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ICs9ICcgJyArIHN0cmluZ2lmaWVkLmpvaW4oJywgJykgKyAoc3RyaW5naWZpZWQubGVuZ3RoID4gMCA/ICcgJyA6ICcnKVxuICB9XG4gIHJldHVybiByZXN1bHQgKyAnXSdcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5SW5saW5lVGFibGUgKHZhbHVlKSB7XG4gIHZhbHVlID0gdG9KU09OKHZhbHVlKVxuICB2YXIgcmVzdWx0ID0gW11cbiAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goa2V5ID0+IHtcbiAgICByZXN1bHQucHVzaChzdHJpbmdpZnlLZXkoa2V5KSArICcgPSAnICsgc3RyaW5naWZ5QW55SW5saW5lKHZhbHVlW2tleV0sIGZhbHNlKSlcbiAgfSlcbiAgcmV0dXJuICd7ICcgKyByZXN1bHQuam9pbignLCAnKSArIChyZXN1bHQubGVuZ3RoID4gMCA/ICcgJyA6ICcnKSArICd9J1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlDb21wbGV4IChwcmVmaXgsIGluZGVudCwga2V5LCB2YWx1ZSkge1xuICB2YXIgdmFsdWVUeXBlID0gdG9tbFR5cGUodmFsdWUpXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh2YWx1ZVR5cGUgPT09ICdhcnJheScpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXlPZlRhYmxlcyhwcmVmaXgsIGluZGVudCwga2V5LCB2YWx1ZSlcbiAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICd0YWJsZScpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5Q29tcGxleFRhYmxlKHByZWZpeCwgaW5kZW50LCBrZXksIHZhbHVlKVxuICB9IGVsc2Uge1xuICAgIHRocm93IHR5cGVFcnJvcih2YWx1ZVR5cGUpXG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXlPZlRhYmxlcyAocHJlZml4LCBpbmRlbnQsIGtleSwgdmFsdWVzKSB7XG4gIHZhbHVlcyA9IHRvSlNPTih2YWx1ZXMpXG4gIHZhbGlkYXRlQXJyYXkodmFsdWVzKVxuICB2YXIgZmlyc3RWYWx1ZVR5cGUgPSB0b21sVHlwZSh2YWx1ZXNbMF0pXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZmlyc3RWYWx1ZVR5cGUgIT09ICd0YWJsZScpIHRocm93IHR5cGVFcnJvcihmaXJzdFZhbHVlVHlwZSlcbiAgdmFyIGZ1bGxLZXkgPSBwcmVmaXggKyBzdHJpbmdpZnlLZXkoa2V5KVxuICB2YXIgcmVzdWx0ID0gJydcbiAgdmFsdWVzLmZvckVhY2godGFibGUgPT4ge1xuICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgcmVzdWx0ICs9ICdcXG4nXG4gICAgcmVzdWx0ICs9IGluZGVudCArICdbWycgKyBmdWxsS2V5ICsgJ11dXFxuJ1xuICAgIHJlc3VsdCArPSBzdHJpbmdpZnlPYmplY3QoZnVsbEtleSArICcuJywgaW5kZW50LCB0YWJsZSlcbiAgfSlcbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlDb21wbGV4VGFibGUgKHByZWZpeCwgaW5kZW50LCBrZXksIHZhbHVlKSB7XG4gIHZhciBmdWxsS2V5ID0gcHJlZml4ICsgc3RyaW5naWZ5S2V5KGtleSlcbiAgdmFyIHJlc3VsdCA9ICcnXG4gIGlmIChnZXRJbmxpbmVLZXlzKHZhbHVlKS5sZW5ndGggPiAwKSB7XG4gICAgcmVzdWx0ICs9IGluZGVudCArICdbJyArIGZ1bGxLZXkgKyAnXVxcbidcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgc3RyaW5naWZ5T2JqZWN0KGZ1bGxLZXkgKyAnLicsIGluZGVudCwgdmFsdWUpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuZXhwb3J0cy5wYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UuanMnKVxuZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeS5qcycpXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmZyb21DYWxsYmFjayA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBhcmdzLnB1c2goKGVyciwgcmVzKSA9PiAoZXJyICE9IG51bGwpID8gcmVqZWN0KGVycikgOiByZXNvbHZlKHJlcykpXG4gICAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG5cbmV4cG9ydHMuZnJvbVByb21pc2UgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGNvbnN0IGNiID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdXG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgZWxzZSB7XG4gICAgICBhcmdzLnBvcCgpXG4gICAgICBmbi5hcHBseSh0aGlzLCBhcmdzKS50aGVuKHIgPT4gY2IobnVsbCwgciksIGNiKVxuICAgIH1cbiAgfSwgJ25hbWUnLCB7IHZhbHVlOiBmbi5uYW1lIH0pXG59XG4iLAogICAgInZhciBjb25zdGFudHMgPSByZXF1aXJlKCdjb25zdGFudHMnKVxuXG52YXIgb3JpZ0N3ZCA9IHByb2Nlc3MuY3dkXG52YXIgY3dkID0gbnVsbFxuXG52YXIgcGxhdGZvcm0gPSBwcm9jZXNzLmVudi5HUkFDRUZVTF9GU19QTEFURk9STSB8fCBwcm9jZXNzLnBsYXRmb3JtXG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24oKSB7XG4gIGlmICghY3dkKVxuICAgIGN3ZCA9IG9yaWdDd2QuY2FsbChwcm9jZXNzKVxuICByZXR1cm4gY3dkXG59XG50cnkge1xuICBwcm9jZXNzLmN3ZCgpXG59IGNhdGNoIChlcikge31cblxuLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgdW50aWwgbm9kZS5qcyAxMiBpcyByZXF1aXJlZFxuaWYgKHR5cGVvZiBwcm9jZXNzLmNoZGlyID09PSAnZnVuY3Rpb24nKSB7XG4gIHZhciBjaGRpciA9IHByb2Nlc3MuY2hkaXJcbiAgcHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkKSB7XG4gICAgY3dkID0gbnVsbFxuICAgIGNoZGlyLmNhbGwocHJvY2VzcywgZClcbiAgfVxuICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvY2Vzcy5jaGRpciwgY2hkaXIpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hcblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIChyZS0paW1wbGVtZW50IHNvbWUgdGhpbmdzIHRoYXQgYXJlIGtub3duIGJ1c3RlZCBvciBtaXNzaW5nLlxuXG4gIC8vIGxjaG1vZCwgYnJva2VuIHByaW9yIHRvIDAuNi4yXG4gIC8vIGJhY2stcG9ydCB0aGUgZml4IGhlcmUuXG4gIGlmIChjb25zdGFudHMuaGFzT3duUHJvcGVydHkoJ09fU1lNTElOSycpICYmXG4gICAgICBwcm9jZXNzLnZlcnNpb24ubWF0Y2goL152MFxcLjZcXC5bMC0yXXxedjBcXC41XFwuLykpIHtcbiAgICBwYXRjaExjaG1vZChmcylcbiAgfVxuXG4gIC8vIGx1dGltZXMgaW1wbGVtZW50YXRpb24sIG9yIG5vLW9wXG4gIGlmICghZnMubHV0aW1lcykge1xuICAgIHBhdGNoTHV0aW1lcyhmcylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1ncmFjZWZ1bC1mcy9pc3N1ZXMvNFxuICAvLyBDaG93biBzaG91bGQgbm90IGZhaWwgb24gZWludmFsIG9yIGVwZXJtIGlmIG5vbi1yb290LlxuICAvLyBJdCBzaG91bGQgbm90IGZhaWwgb24gZW5vc3lzIGV2ZXIsIGFzIHRoaXMganVzdCBpbmRpY2F0ZXNcbiAgLy8gdGhhdCBhIGZzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgaW50ZW5kZWQgb3BlcmF0aW9uLlxuXG4gIGZzLmNob3duID0gY2hvd25GaXgoZnMuY2hvd24pXG4gIGZzLmZjaG93biA9IGNob3duRml4KGZzLmZjaG93bilcbiAgZnMubGNob3duID0gY2hvd25GaXgoZnMubGNob3duKVxuXG4gIGZzLmNobW9kID0gY2htb2RGaXgoZnMuY2htb2QpXG4gIGZzLmZjaG1vZCA9IGNobW9kRml4KGZzLmZjaG1vZClcbiAgZnMubGNobW9kID0gY2htb2RGaXgoZnMubGNobW9kKVxuXG4gIGZzLmNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5jaG93blN5bmMpXG4gIGZzLmZjaG93blN5bmMgPSBjaG93bkZpeFN5bmMoZnMuZmNob3duU3luYylcbiAgZnMubGNob3duU3luYyA9IGNob3duRml4U3luYyhmcy5sY2hvd25TeW5jKVxuXG4gIGZzLmNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5jaG1vZFN5bmMpXG4gIGZzLmZjaG1vZFN5bmMgPSBjaG1vZEZpeFN5bmMoZnMuZmNobW9kU3luYylcbiAgZnMubGNobW9kU3luYyA9IGNobW9kRml4U3luYyhmcy5sY2htb2RTeW5jKVxuXG4gIGZzLnN0YXQgPSBzdGF0Rml4KGZzLnN0YXQpXG4gIGZzLmZzdGF0ID0gc3RhdEZpeChmcy5mc3RhdClcbiAgZnMubHN0YXQgPSBzdGF0Rml4KGZzLmxzdGF0KVxuXG4gIGZzLnN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMuc3RhdFN5bmMpXG4gIGZzLmZzdGF0U3luYyA9IHN0YXRGaXhTeW5jKGZzLmZzdGF0U3luYylcbiAgZnMubHN0YXRTeW5jID0gc3RhdEZpeFN5bmMoZnMubHN0YXRTeW5jKVxuXG4gIC8vIGlmIGxjaG1vZC9sY2hvd24gZG8gbm90IGV4aXN0LCB0aGVuIG1ha2UgdGhlbSBuby1vcHNcbiAgaWYgKGZzLmNobW9kICYmICFmcy5sY2htb2QpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2IpIHtcbiAgICAgIGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYilcbiAgICB9XG4gICAgZnMubGNobW9kU3luYyA9IGZ1bmN0aW9uICgpIHt9XG4gIH1cbiAgaWYgKGZzLmNob3duICYmICFmcy5sY2hvd24pIHtcbiAgICBmcy5sY2hvd24gPSBmdW5jdGlvbiAocGF0aCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICBpZiAoY2IpIHByb2Nlc3MubmV4dFRpY2soY2IpXG4gICAgfVxuICAgIGZzLmxjaG93blN5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICB9XG5cbiAgLy8gb24gV2luZG93cywgQS9WIHNvZnR3YXJlIGNhbiBsb2NrIHRoZSBkaXJlY3RvcnksIGNhdXNpbmcgdGhpc1xuICAvLyB0byBmYWlsIHdpdGggYW4gRUFDQ0VTIG9yIEVQRVJNIGlmIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgbmV3bHlcbiAgLy8gY3JlYXRlZCBmaWxlcy4gIFRyeSBhZ2FpbiBvbiBmYWlsdXJlLCBmb3IgdXAgdG8gNjAgc2Vjb25kcy5cblxuICAvLyBTZXQgdGhlIHRpbWVvdXQgdGhpcyBsb25nIGJlY2F1c2Ugc29tZSBXaW5kb3dzIEFudGktVmlydXMsIHN1Y2ggYXMgUGFyaXR5XG4gIC8vIGJpdDksIG1heSBsb2NrIGZpbGVzIGZvciB1cCB0byBhIG1pbnV0ZSwgY2F1c2luZyBucG0gcGFja2FnZSBpbnN0YWxsXG4gIC8vIGZhaWx1cmVzLiBBbHNvLCB0YWtlIGNhcmUgdG8geWllbGQgdGhlIHNjaGVkdWxlci4gV2luZG93cyBzY2hlZHVsaW5nIGdpdmVzXG4gIC8vIENQVSB0byBhIGJ1c3kgbG9vcGluZyBwcm9jZXNzLCB3aGljaCBjYW4gY2F1c2UgdGhlIHByb2dyYW0gY2F1c2luZyB0aGUgbG9ja1xuICAvLyBjb250ZW50aW9uIHRvIGJlIHN0YXJ2ZWQgb2YgQ1BVIGJ5IG5vZGUsIHNvIHRoZSBjb250ZW50aW9uIGRvZXNuJ3QgcmVzb2x2ZS5cbiAgaWYgKHBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICBmcy5yZW5hbWUgPSB0eXBlb2YgZnMucmVuYW1lICE9PSAnZnVuY3Rpb24nID8gZnMucmVuYW1lXG4gICAgOiAoZnVuY3Rpb24gKGZzJHJlbmFtZSkge1xuICAgICAgZnVuY3Rpb24gcmVuYW1lIChmcm9tLCB0bywgY2IpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKVxuICAgICAgICB2YXIgYmFja29mZiA9IDA7XG4gICAgICAgIGZzJHJlbmFtZShmcm9tLCB0bywgZnVuY3Rpb24gQ0IgKGVyKSB7XG4gICAgICAgICAgaWYgKGVyXG4gICAgICAgICAgICAgICYmIChlci5jb2RlID09PSBcIkVBQ0NFU1wiIHx8IGVyLmNvZGUgPT09IFwiRVBFUk1cIiB8fCBlci5jb2RlID09PSBcIkVCVVNZXCIpXG4gICAgICAgICAgICAgICYmIERhdGUubm93KCkgLSBzdGFydCA8IDYwMDAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBmcy5zdGF0KHRvLCBmdW5jdGlvbiAoc3RhdGVyLCBzdCkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZXIgJiYgc3RhdGVyLmNvZGUgPT09IFwiRU5PRU5UXCIpXG4gICAgICAgICAgICAgICAgICBmcyRyZW5hbWUoZnJvbSwgdG8sIENCKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICBjYihlcilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIGJhY2tvZmYpXG4gICAgICAgICAgICBpZiAoYmFja29mZiA8IDEwMClcbiAgICAgICAgICAgICAgYmFja29mZiArPSAxMDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNiKSBjYihlcilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIE9iamVjdC5zZXRQcm90b3R5cGVPZihyZW5hbWUsIGZzJHJlbmFtZSlcbiAgICAgIHJldHVybiByZW5hbWVcbiAgICB9KShmcy5yZW5hbWUpXG4gIH1cblxuICAvLyBpZiByZWFkKCkgcmV0dXJucyBFQUdBSU4sIHRoZW4ganVzdCB0cnkgaXQgYWdhaW4uXG4gIGZzLnJlYWQgPSB0eXBlb2YgZnMucmVhZCAhPT0gJ2Z1bmN0aW9uJyA/IGZzLnJlYWRcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWQpIHtcbiAgICBmdW5jdGlvbiByZWFkIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrXykge1xuICAgICAgdmFyIGNhbGxiYWNrXG4gICAgICBpZiAoY2FsbGJhY2tfICYmIHR5cGVvZiBjYWxsYmFja18gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKGVyLCBfLCBfXykge1xuICAgICAgICAgIGlmIChlciAmJiBlci5jb2RlID09PSAnRUFHQUlOJyAmJiBlYWdDb3VudGVyIDwgMTApIHtcbiAgICAgICAgICAgIGVhZ0NvdW50ZXIgKytcbiAgICAgICAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgICAgICAgfVxuICAgICAgICAgIGNhbGxiYWNrXy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmcyRyZWFkLmNhbGwoZnMsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spXG4gICAgfVxuXG4gICAgLy8gVGhpcyBlbnN1cmVzIGB1dGlsLnByb21pc2lmeWAgd29ya3MgYXMgaXQgZG9lcyBmb3IgbmF0aXZlIGBmcy5yZWFkYC5cbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YocmVhZCwgZnMkcmVhZClcbiAgICByZXR1cm4gcmVhZFxuICB9KShmcy5yZWFkKVxuXG4gIGZzLnJlYWRTeW5jID0gdHlwZW9mIGZzLnJlYWRTeW5jICE9PSAnZnVuY3Rpb24nID8gZnMucmVhZFN5bmNcbiAgOiAoZnVuY3Rpb24gKGZzJHJlYWRTeW5jKSB7IHJldHVybiBmdW5jdGlvbiAoZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uKSB7XG4gICAgdmFyIGVhZ0NvdW50ZXIgPSAwXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkU3luYy5jYWxsKGZzLCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24pXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoZXIuY29kZSA9PT0gJ0VBR0FJTicgJiYgZWFnQ291bnRlciA8IDEwKSB7XG4gICAgICAgICAgZWFnQ291bnRlciArK1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH19KShmcy5yZWFkU3luYylcblxuICBmdW5jdGlvbiBwYXRjaExjaG1vZCAoZnMpIHtcbiAgICBmcy5sY2htb2QgPSBmdW5jdGlvbiAocGF0aCwgbW9kZSwgY2FsbGJhY2spIHtcbiAgICAgIGZzLm9wZW4oIHBhdGhcbiAgICAgICAgICAgICAsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTktcbiAgICAgICAgICAgICAsIG1vZGVcbiAgICAgICAgICAgICAsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICAvLyBwcmVmZXIgdG8gcmV0dXJuIHRoZSBjaG1vZCBlcnJvciwgaWYgb25lIG9jY3VycyxcbiAgICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgICBmcy5mY2htb2QoZmQsIG1vZGUsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24oZXJyMikge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIgfHwgZXJyMilcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmcy5sY2htb2RTeW5jID0gZnVuY3Rpb24gKHBhdGgsIG1vZGUpIHtcbiAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1dST05MWSB8IGNvbnN0YW50cy5PX1NZTUxJTkssIG1vZGUpXG5cbiAgICAgIC8vIHByZWZlciB0byByZXR1cm4gdGhlIGNobW9kIGVycm9yLCBpZiBvbmUgb2NjdXJzLFxuICAgICAgLy8gYnV0IHN0aWxsIHRyeSB0byBjbG9zZSwgYW5kIHJlcG9ydCBjbG9zaW5nIGVycm9ycyBpZiB0aGV5IG9jY3VyLlxuICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgdmFyIHJldFxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0ID0gZnMuZmNobW9kU3luYyhmZCwgbW9kZSlcbiAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRocmV3KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9IGNhdGNoIChlcikge31cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcy5jbG9zZVN5bmMoZmQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXRcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaEx1dGltZXMgKGZzKSB7XG4gICAgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eShcIk9fU1lNTElOS1wiKSAmJiBmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKHBhdGgsIGF0LCBtdCwgY2IpIHtcbiAgICAgICAgZnMub3BlbihwYXRoLCBjb25zdGFudHMuT19TWU1MSU5LLCBmdW5jdGlvbiAoZXIsIGZkKSB7XG4gICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICBpZiAoY2IpIGNiKGVyKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLmZ1dGltZXMoZmQsIGF0LCBtdCwgZnVuY3Rpb24gKGVyKSB7XG4gICAgICAgICAgICBmcy5jbG9zZShmZCwgZnVuY3Rpb24gKGVyMikge1xuICAgICAgICAgICAgICBpZiAoY2IpIGNiKGVyIHx8IGVyMilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAocGF0aCwgYXQsIG10KSB7XG4gICAgICAgIHZhciBmZCA9IGZzLm9wZW5TeW5jKHBhdGgsIGNvbnN0YW50cy5PX1NZTUxJTkspXG4gICAgICAgIHZhciByZXRcbiAgICAgICAgdmFyIHRocmV3ID0gdHJ1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldCA9IGZzLmZ1dGltZXNTeW5jKGZkLCBhdCwgbXQpXG4gICAgICAgICAgdGhyZXcgPSBmYWxzZVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0aHJldykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXIpIHt9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZzLmNsb3NlU3luYyhmZClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFxuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmIChmcy5mdXRpbWVzKSB7XG4gICAgICBmcy5sdXRpbWVzID0gZnVuY3Rpb24gKF9hLCBfYiwgX2MsIGNiKSB7IGlmIChjYikgcHJvY2Vzcy5uZXh0VGljayhjYikgfVxuICAgICAgZnMubHV0aW1lc1N5bmMgPSBmdW5jdGlvbiAoKSB7fVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNobW9kRml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlLCBjYikge1xuICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCBtb2RlLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2htb2RGaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBtb2RlKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG1vZGUpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBpZiAoIWNob3duRXJPayhlcikpIHRocm93IGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBjaG93bkZpeCAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgdWlkLCBnaWQsIGNiKSB7XG4gICAgICByZXR1cm4gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIHVpZCwgZ2lkLCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgaWYgKGNob3duRXJPayhlcikpIGVyID0gbnVsbFxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hvd25GaXhTeW5jIChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCB1aWQsIGdpZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbChmcywgdGFyZ2V0LCB1aWQsIGdpZClcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGlmICghY2hvd25Fck9rKGVyKSkgdGhyb3cgZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4IChvcmlnKSB7XG4gICAgaWYgKCFvcmlnKSByZXR1cm4gb3JpZ1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIE5vZGUgZXJyb25lb3VzbHkgcmV0dXJuZWQgc2lnbmVkIGludGVnZXJzIGZvclxuICAgIC8vIHVpZCArIGdpZC5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgb3B0aW9ucywgY2IpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdGlvbnNcbiAgICAgICAgb3B0aW9ucyA9IG51bGxcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrIChlciwgc3RhdHMpIHtcbiAgICAgICAgaWYgKHN0YXRzKSB7XG4gICAgICAgICAgaWYgKHN0YXRzLnVpZCA8IDApIHN0YXRzLnVpZCArPSAweDEwMDAwMDAwMFxuICAgICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2IpIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zID8gb3JpZy5jYWxsKGZzLCB0YXJnZXQsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAgICAgICA6IG9yaWcuY2FsbChmcywgdGFyZ2V0LCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdGF0Rml4U3luYyAob3JpZykge1xuICAgIGlmICghb3JpZykgcmV0dXJuIG9yaWdcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBOb2RlIGVycm9uZW91c2x5IHJldHVybmVkIHNpZ25lZCBpbnRlZ2VycyBmb3JcbiAgICAvLyB1aWQgKyBnaWQuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBzdGF0cyA9IG9wdGlvbnMgPyBvcmlnLmNhbGwoZnMsIHRhcmdldCwgb3B0aW9ucylcbiAgICAgICAgOiBvcmlnLmNhbGwoZnMsIHRhcmdldClcbiAgICAgIGlmIChzdGF0cykge1xuICAgICAgICBpZiAoc3RhdHMudWlkIDwgMCkgc3RhdHMudWlkICs9IDB4MTAwMDAwMDAwXG4gICAgICAgIGlmIChzdGF0cy5naWQgPCAwKSBzdGF0cy5naWQgKz0gMHgxMDAwMDAwMDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0cztcbiAgICB9XG4gIH1cblxuICAvLyBFTk9TWVMgbWVhbnMgdGhhdCB0aGUgZnMgZG9lc24ndCBzdXBwb3J0IHRoZSBvcC4gSnVzdCBpZ25vcmVcbiAgLy8gdGhhdCwgYmVjYXVzZSBpdCBkb2Vzbid0IG1hdHRlci5cbiAgLy9cbiAgLy8gaWYgdGhlcmUncyBubyBnZXR1aWQsIG9yIGlmIGdldHVpZCgpIGlzIHNvbWV0aGluZyBvdGhlclxuICAvLyB0aGFuIDAsIGFuZCB0aGUgZXJyb3IgaXMgRUlOVkFMIG9yIEVQRVJNLCB0aGVuIGp1c3QgaWdub3JlXG4gIC8vIGl0LlxuICAvL1xuICAvLyBUaGlzIHNwZWNpZmljIGNhc2UgaXMgYSBzaWxlbnQgZmFpbHVyZSBpbiBjcCwgaW5zdGFsbCwgdGFyLFxuICAvLyBhbmQgbW9zdCBvdGhlciB1bml4IHRvb2xzIHRoYXQgbWFuYWdlIHBlcm1pc3Npb25zLlxuICAvL1xuICAvLyBXaGVuIHJ1bm5pbmcgYXMgcm9vdCwgb3IgaWYgb3RoZXIgdHlwZXMgb2YgZXJyb3JzIGFyZVxuICAvLyBlbmNvdW50ZXJlZCwgdGhlbiBpdCdzIHN0cmljdC5cbiAgZnVuY3Rpb24gY2hvd25Fck9rIChlcikge1xuICAgIGlmICghZXIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgaWYgKGVyLmNvZGUgPT09IFwiRU5PU1lTXCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuXG4gICAgdmFyIG5vbnJvb3QgPSAhcHJvY2Vzcy5nZXR1aWQgfHwgcHJvY2Vzcy5nZXR1aWQoKSAhPT0gMFxuICAgIGlmIChub25yb290KSB7XG4gICAgICBpZiAoZXIuY29kZSA9PT0gXCJFSU5WQUxcIiB8fCBlci5jb2RlID09PSBcIkVQRVJNXCIpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsCiAgICAidmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxlZ2FjeVxuXG5mdW5jdGlvbiBsZWdhY3kgKGZzKSB7XG4gIHJldHVybiB7XG4gICAgUmVhZFN0cmVhbTogUmVhZFN0cmVhbSxcbiAgICBXcml0ZVN0cmVhbTogV3JpdGVTdHJlYW1cbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVhZFN0cmVhbSkpIHJldHVybiBuZXcgUmVhZFN0cmVhbShwYXRoLCBvcHRpb25zKTtcblxuICAgIFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLmZkID0gbnVsbDtcbiAgICB0aGlzLnJlYWRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5mbGFncyA9ICdyJztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnVmZmVyU2l6ZSA9IDY0ICogMTAyNDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5jb2RpbmcpIHRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyk7XG5cbiAgICBpZiAodGhpcy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLnN0YXJ0KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignc3RhcnQgbXVzdCBiZSBhIE51bWJlcicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5lbmQgPSBJbmZpbml0eTtcbiAgICAgIH0gZWxzZSBpZiAoJ251bWJlcicgIT09IHR5cGVvZiB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ2VuZCBtdXN0IGJlIGEgTnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ID4gdGhpcy5lbmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCBtdXN0IGJlIDw9IGVuZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmQgIT09IG51bGwpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuX3JlYWQoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm9wZW4odGhpcy5wYXRoLCB0aGlzLmZsYWdzLCB0aGlzLm1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHNlbGYuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICBzZWxmLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2VsZi5mZCA9IGZkO1xuICAgICAgc2VsZi5lbWl0KCdvcGVuJywgZmQpO1xuICAgICAgc2VsZi5fcmVhZCgpO1xuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBXcml0ZVN0cmVhbSkpIHJldHVybiBuZXcgV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucyk7XG5cbiAgICBTdHJlYW0uY2FsbCh0aGlzKTtcblxuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5mZCA9IG51bGw7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG5cbiAgICB0aGlzLmZsYWdzID0gJ3cnO1xuICAgIHRoaXMuZW5jb2RpbmcgPSAnYmluYXJ5JztcbiAgICB0aGlzLm1vZGUgPSA0Mzg7IC8qPTA2NjYqL1xuICAgIHRoaXMuYnl0ZXNXcml0dGVuID0gMDtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgLy8gTWl4aW4gb3B0aW9ucyBpbnRvIHRoaXNcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMCwgbGVuZ3RoID0ga2V5cy5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICB0aGlzW2tleV0gPSBvcHRpb25zW2tleV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCdudW1iZXInICE9PSB0eXBlb2YgdGhpcy5zdGFydCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ3N0YXJ0IG11c3QgYmUgYSBOdW1iZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0YXJ0IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0IG11c3QgYmUgPj0gemVybycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuXG4gICAgdGhpcy5idXN5ID0gZmFsc2U7XG4gICAgdGhpcy5fcXVldWUgPSBbXTtcblxuICAgIGlmICh0aGlzLmZkID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9vcGVuID0gZnMub3BlbjtcbiAgICAgIHRoaXMuX3F1ZXVlLnB1c2goW3RoaXMuX29wZW4sIHRoaXMucGF0aCwgdGhpcy5mbGFncywgdGhpcy5tb2RlLCB1bmRlZmluZWRdKTtcbiAgICAgIHRoaXMuZmx1c2goKTtcbiAgICB9XG4gIH1cbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVcblxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iai5fX3Byb3RvX19cbn1cblxuZnVuY3Rpb24gY2xvbmUgKG9iaikge1xuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKVxuICAgIHJldHVybiBvYmpcblxuICBpZiAob2JqIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgIHZhciBjb3B5ID0geyBfX3Byb3RvX186IGdldFByb3RvdHlwZU9mKG9iaikgfVxuICBlbHNlXG4gICAgdmFyIGNvcHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29weSwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSlcbiAgfSlcblxuICByZXR1cm4gY29weVxufVxuIiwKICAgICJ2YXIgZnMgPSByZXF1aXJlKCdmcycpXG52YXIgcG9seWZpbGxzID0gcmVxdWlyZSgnLi9wb2x5ZmlsbHMuanMnKVxudmFyIGxlZ2FjeSA9IHJlcXVpcmUoJy4vbGVnYWN5LXN0cmVhbXMuanMnKVxudmFyIGNsb25lID0gcmVxdWlyZSgnLi9jbG9uZS5qcycpXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gbm9kZSAwLnggcG9seWZpbGwgKi9cbnZhciBncmFjZWZ1bFF1ZXVlXG52YXIgcHJldmlvdXNTeW1ib2xcblxuLyogaXN0YW5idWwgaWdub3JlIGVsc2UgLSBub2RlIDAueCBwb2x5ZmlsbCAqL1xuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5mb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9IFN5bWJvbC5mb3IoJ2dyYWNlZnVsLWZzLnF1ZXVlJylcbiAgLy8gVGhpcyBpcyB1c2VkIGluIHRlc3RpbmcgYnkgZnV0dXJlIHZlcnNpb25zXG4gIHByZXZpb3VzU3ltYm9sID0gU3ltYm9sLmZvcignZ3JhY2VmdWwtZnMucHJldmlvdXMnKVxufSBlbHNlIHtcbiAgZ3JhY2VmdWxRdWV1ZSA9ICdfX19ncmFjZWZ1bC1mcy5xdWV1ZSdcbiAgcHJldmlvdXNTeW1ib2wgPSAnX19fZ3JhY2VmdWwtZnMucHJldmlvdXMnXG59XG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuZnVuY3Rpb24gcHVibGlzaFF1ZXVlKGNvbnRleHQsIHF1ZXVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb250ZXh0LCBncmFjZWZ1bFF1ZXVlLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBxdWV1ZVxuICAgIH1cbiAgfSlcbn1cblxudmFyIGRlYnVnID0gbm9vcFxuaWYgKHV0aWwuZGVidWdsb2cpXG4gIGRlYnVnID0gdXRpbC5kZWJ1Z2xvZygnZ2ZzNCcpXG5lbHNlIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpXG4gIGRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG0gPSB1dGlsLmZvcm1hdC5hcHBseSh1dGlsLCBhcmd1bWVudHMpXG4gICAgbSA9ICdHRlM0OiAnICsgbS5zcGxpdCgvXFxuLykuam9pbignXFxuR0ZTNDogJylcbiAgICBjb25zb2xlLmVycm9yKG0pXG4gIH1cblxuLy8gT25jZSB0aW1lIGluaXRpYWxpemF0aW9uXG5pZiAoIWZzW2dyYWNlZnVsUXVldWVdKSB7XG4gIC8vIFRoaXMgcXVldWUgY2FuIGJlIHNoYXJlZCBieSBtdWx0aXBsZSBsb2FkZWQgaW5zdGFuY2VzXG4gIHZhciBxdWV1ZSA9IGdsb2JhbFtncmFjZWZ1bFF1ZXVlXSB8fCBbXVxuICBwdWJsaXNoUXVldWUoZnMsIHF1ZXVlKVxuXG4gIC8vIFBhdGNoIGZzLmNsb3NlL2Nsb3NlU3luYyB0byBzaGFyZWQgcXVldWUgdmVyc2lvbiwgYmVjYXVzZSB3ZSBuZWVkXG4gIC8vIHRvIHJldHJ5KCkgd2hlbmV2ZXIgYSBjbG9zZSBoYXBwZW5zICphbnl3aGVyZSogaW4gdGhlIHByb2dyYW0uXG4gIC8vIFRoaXMgaXMgZXNzZW50aWFsIHdoZW4gbXVsdGlwbGUgZ3JhY2VmdWwtZnMgaW5zdGFuY2VzIGFyZVxuICAvLyBpbiBwbGF5IGF0IHRoZSBzYW1lIHRpbWUuXG4gIGZzLmNsb3NlID0gKGZ1bmN0aW9uIChmcyRjbG9zZSkge1xuICAgIGZ1bmN0aW9uIGNsb3NlIChmZCwgY2IpIHtcbiAgICAgIHJldHVybiBmcyRjbG9zZS5jYWxsKGZzLCBmZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdyYWNlZnVsLWZzIHNoYXJlZCBxdWV1ZVxuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlc2V0UXVldWUoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9KVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjbG9zZSwgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVxuICAgIH0pXG4gICAgcmV0dXJuIGNsb3NlXG4gIH0pKGZzLmNsb3NlKVxuXG4gIGZzLmNsb3NlU3luYyA9IChmdW5jdGlvbiAoZnMkY2xvc2VTeW5jKSB7XG4gICAgZnVuY3Rpb24gY2xvc2VTeW5jIChmZCkge1xuICAgICAgLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBncmFjZWZ1bC1mcyBzaGFyZWQgcXVldWVcbiAgICAgIGZzJGNsb3NlU3luYy5hcHBseShmcywgYXJndW1lbnRzKVxuICAgICAgcmVzZXRRdWV1ZSgpXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNsb3NlU3luYywgcHJldmlvdXNTeW1ib2wsIHtcbiAgICAgIHZhbHVlOiBmcyRjbG9zZVN5bmNcbiAgICB9KVxuICAgIHJldHVybiBjbG9zZVN5bmNcbiAgfSkoZnMuY2xvc2VTeW5jKVxuXG4gIGlmICgvXFxiZ2ZzNFxcYi9pLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRyB8fCAnJykpIHtcbiAgICBwcm9jZXNzLm9uKCdleGl0JywgZnVuY3Rpb24oKSB7XG4gICAgICBkZWJ1Zyhmc1tncmFjZWZ1bFF1ZXVlXSlcbiAgICAgIHJlcXVpcmUoJ2Fzc2VydCcpLmVxdWFsKGZzW2dyYWNlZnVsUXVldWVdLmxlbmd0aCwgMClcbiAgICB9KVxuICB9XG59XG5cbmlmICghZ2xvYmFsW2dyYWNlZnVsUXVldWVdKSB7XG4gIHB1Ymxpc2hRdWV1ZShnbG9iYWwsIGZzW2dyYWNlZnVsUXVldWVdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaChjbG9uZShmcykpXG5pZiAocHJvY2Vzcy5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0ggJiYgIWZzLl9fcGF0Y2hlZCkge1xuICAgIG1vZHVsZS5leHBvcnRzID0gcGF0Y2goZnMpXG4gICAgZnMuX19wYXRjaGVkID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcGF0Y2ggKGZzKSB7XG4gIC8vIEV2ZXJ5dGhpbmcgdGhhdCByZWZlcmVuY2VzIHRoZSBvcGVuKCkgZnVuY3Rpb24gbmVlZHMgdG8gYmUgaW4gaGVyZVxuICBwb2x5ZmlsbHMoZnMpXG4gIGZzLmdyYWNlZnVsaWZ5ID0gcGF0Y2hcblxuICBmcy5jcmVhdGVSZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbVxuICBmcy5jcmVhdGVXcml0ZVN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtXG4gIHZhciBmcyRyZWFkRmlsZSA9IGZzLnJlYWRGaWxlXG4gIGZzLnJlYWRGaWxlID0gcmVhZEZpbGVcbiAgZnVuY3Rpb24gcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHJlYWRGaWxlKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZ28kcmVhZEZpbGUgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgIHJldHVybiBmcyRyZWFkRmlsZShwYXRoLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHJlYWRGaWxlLCBbcGF0aCwgb3B0aW9ucywgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB2YXIgZnMkd3JpdGVGaWxlID0gZnMud3JpdGVGaWxlXG4gIGZzLndyaXRlRmlsZSA9IHdyaXRlRmlsZVxuICBmdW5jdGlvbiB3cml0ZUZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBjYilcblxuICAgIGZ1bmN0aW9uIGdvJHdyaXRlRmlsZSAocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJHdyaXRlRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJHdyaXRlRmlsZSwgW3BhdGgsIGRhdGEsIG9wdGlvbnMsIGNiXSwgZXJyLCBzdGFydFRpbWUgfHwgRGF0ZS5ub3coKSwgRGF0ZS5ub3coKV0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICBjYi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgdmFyIGZzJGFwcGVuZEZpbGUgPSBmcy5hcHBlbmRGaWxlXG4gIGlmIChmcyRhcHBlbmRGaWxlKVxuICAgIGZzLmFwcGVuZEZpbGUgPSBhcHBlbmRGaWxlXG4gIGZ1bmN0aW9uIGFwcGVuZEZpbGUgKHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNiKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKVxuICAgICAgY2IgPSBvcHRpb25zLCBvcHRpb25zID0gbnVsbFxuXG4gICAgcmV0dXJuIGdvJGFwcGVuZEZpbGUocGF0aCwgZGF0YSwgb3B0aW9ucywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRhcHBlbmRGaWxlIChwYXRoLCBkYXRhLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnMkYXBwZW5kRmlsZShwYXRoLCBkYXRhLCBvcHRpb25zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJGFwcGVuZEZpbGUsIFtwYXRoLCBkYXRhLCBvcHRpb25zLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRjb3B5RmlsZSA9IGZzLmNvcHlGaWxlXG4gIGlmIChmcyRjb3B5RmlsZSlcbiAgICBmcy5jb3B5RmlsZSA9IGNvcHlGaWxlXG4gIGZ1bmN0aW9uIGNvcHlGaWxlIChzcmMsIGRlc3QsIGZsYWdzLCBjYikge1xuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNiID0gZmxhZ3NcbiAgICAgIGZsYWdzID0gMFxuICAgIH1cbiAgICByZXR1cm4gZ28kY29weUZpbGUoc3JjLCBkZXN0LCBmbGFncywgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRjb3B5RmlsZSAoc3JjLCBkZXN0LCBmbGFncywgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJGNvcHlGaWxlKHNyYywgZGVzdCwgZmxhZ3MsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbZ28kY29weUZpbGUsIFtzcmMsIGRlc3QsIGZsYWdzLCBjYl0sIGVyciwgc3RhcnRUaW1lIHx8IERhdGUubm93KCksIERhdGUubm93KCldKVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHZhciBmcyRyZWFkZGlyID0gZnMucmVhZGRpclxuICBmcy5yZWFkZGlyID0gcmVhZGRpclxuICB2YXIgbm9SZWFkZGlyT3B0aW9uVmVyc2lvbnMgPSAvXnZbMC01XVxcLi9cbiAgZnVuY3Rpb24gcmVhZGRpciAocGF0aCwgb3B0aW9ucywgY2IpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG9wdGlvbnMsIG9wdGlvbnMgPSBudWxsXG5cbiAgICB2YXIgZ28kcmVhZGRpciA9IG5vUmVhZGRpck9wdGlvblZlcnNpb25zLnRlc3QocHJvY2Vzcy52ZXJzaW9uKVxuICAgICAgPyBmdW5jdGlvbiBnbyRyZWFkZGlyIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBmcyRyZWFkZGlyKHBhdGgsIGZzJHJlYWRkaXJDYWxsYmFjayhcbiAgICAgICAgICBwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lXG4gICAgICAgICkpXG4gICAgICB9XG4gICAgICA6IGZ1bmN0aW9uIGdvJHJlYWRkaXIgKHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZzJHJlYWRkaXIocGF0aCwgb3B0aW9ucywgZnMkcmVhZGRpckNhbGxiYWNrKFxuICAgICAgICAgIHBhdGgsIG9wdGlvbnMsIGNiLCBzdGFydFRpbWVcbiAgICAgICAgKSlcbiAgICAgIH1cblxuICAgIHJldHVybiBnbyRyZWFkZGlyKHBhdGgsIG9wdGlvbnMsIGNiKVxuXG4gICAgZnVuY3Rpb24gZnMkcmVhZGRpckNhbGxiYWNrIChwYXRoLCBvcHRpb25zLCBjYiwgc3RhcnRUaW1lKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGVyciwgZmlsZXMpIHtcbiAgICAgICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgPT09ICdFTUZJTEUnIHx8IGVyci5jb2RlID09PSAnRU5GSUxFJykpXG4gICAgICAgICAgZW5xdWV1ZShbXG4gICAgICAgICAgICBnbyRyZWFkZGlyLFxuICAgICAgICAgICAgW3BhdGgsIG9wdGlvbnMsIGNiXSxcbiAgICAgICAgICAgIGVycixcbiAgICAgICAgICAgIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLFxuICAgICAgICAgICAgRGF0ZS5ub3coKVxuICAgICAgICAgIF0pXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5zb3J0KVxuICAgICAgICAgICAgZmlsZXMuc29ydCgpXG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IuY2FsbCh0aGlzLCBlcnIsIGZpbGVzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MudmVyc2lvbi5zdWJzdHIoMCwgNCkgPT09ICd2MC44Jykge1xuICAgIHZhciBsZWdTdHJlYW1zID0gbGVnYWN5KGZzKVxuICAgIFJlYWRTdHJlYW0gPSBsZWdTdHJlYW1zLlJlYWRTdHJlYW1cbiAgICBXcml0ZVN0cmVhbSA9IGxlZ1N0cmVhbXMuV3JpdGVTdHJlYW1cbiAgfVxuXG4gIHZhciBmcyRSZWFkU3RyZWFtID0gZnMuUmVhZFN0cmVhbVxuICBpZiAoZnMkUmVhZFN0cmVhbSkge1xuICAgIFJlYWRTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShmcyRSZWFkU3RyZWFtLnByb3RvdHlwZSlcbiAgICBSZWFkU3RyZWFtLnByb3RvdHlwZS5vcGVuID0gUmVhZFN0cmVhbSRvcGVuXG4gIH1cblxuICB2YXIgZnMkV3JpdGVTdHJlYW0gPSBmcy5Xcml0ZVN0cmVhbVxuICBpZiAoZnMkV3JpdGVTdHJlYW0pIHtcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZzJFdyaXRlU3RyZWFtLnByb3RvdHlwZSlcbiAgICBXcml0ZVN0cmVhbS5wcm90b3R5cGUub3BlbiA9IFdyaXRlU3RyZWFtJG9wZW5cbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ1JlYWRTdHJlYW0nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBSZWFkU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBXcml0ZVN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBXcml0ZVN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcblxuICAvLyBsZWdhY3kgbmFtZXNcbiAgdmFyIEZpbGVSZWFkU3RyZWFtID0gUmVhZFN0cmVhbVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnMsICdGaWxlUmVhZFN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlUmVhZFN0cmVhbVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBGaWxlUmVhZFN0cmVhbSA9IHZhbFxuICAgIH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSlcbiAgdmFyIEZpbGVXcml0ZVN0cmVhbSA9IFdyaXRlU3RyZWFtXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmcywgJ0ZpbGVXcml0ZVN0cmVhbScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBGaWxlV3JpdGVTdHJlYW1cbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgRmlsZVdyaXRlU3RyZWFtID0gdmFsXG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFJlYWRTdHJlYW0pXG4gICAgICByZXR1cm4gZnMkUmVhZFN0cmVhbS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIFJlYWRTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShSZWFkU3RyZWFtLnByb3RvdHlwZSksIGFyZ3VtZW50cylcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlYWRTdHJlYW0kb3BlbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgb3Blbih0aGF0LnBhdGgsIHRoYXQuZmxhZ3MsIHRoYXQubW9kZSwgZnVuY3Rpb24gKGVyciwgZmQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgaWYgKHRoYXQuYXV0b0Nsb3NlKVxuICAgICAgICAgIHRoYXQuZGVzdHJveSgpXG5cbiAgICAgICAgdGhhdC5lbWl0KCdlcnJvcicsIGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoYXQuZmQgPSBmZFxuICAgICAgICB0aGF0LmVtaXQoJ29wZW4nLCBmZClcbiAgICAgICAgdGhhdC5yZWFkKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gV3JpdGVTdHJlYW0gKHBhdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIFdyaXRlU3RyZWFtKVxuICAgICAgcmV0dXJuIGZzJFdyaXRlU3RyZWFtLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXNcbiAgICBlbHNlXG4gICAgICByZXR1cm4gV3JpdGVTdHJlYW0uYXBwbHkoT2JqZWN0LmNyZWF0ZShXcml0ZVN0cmVhbS5wcm90b3R5cGUpLCBhcmd1bWVudHMpXG4gIH1cblxuICBmdW5jdGlvbiBXcml0ZVN0cmVhbSRvcGVuICgpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXNcbiAgICBvcGVuKHRoYXQucGF0aCwgdGhhdC5mbGFncywgdGhhdC5tb2RlLCBmdW5jdGlvbiAoZXJyLCBmZCkge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGF0LmRlc3Ryb3koKVxuICAgICAgICB0aGF0LmVtaXQoJ2Vycm9yJywgZXJyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhhdC5mZCA9IGZkXG4gICAgICAgIHRoYXQuZW1pdCgnb3BlbicsIGZkKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSZWFkU3RyZWFtIChwYXRoLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBmcy5SZWFkU3RyZWFtKHBhdGgsIG9wdGlvbnMpXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVXcml0ZVN0cmVhbSAocGF0aCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgZnMuV3JpdGVTdHJlYW0ocGF0aCwgb3B0aW9ucylcbiAgfVxuXG4gIHZhciBmcyRvcGVuID0gZnMub3BlblxuICBmcy5vcGVuID0gb3BlblxuICBmdW5jdGlvbiBvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IpIHtcbiAgICBpZiAodHlwZW9mIG1vZGUgPT09ICdmdW5jdGlvbicpXG4gICAgICBjYiA9IG1vZGUsIG1vZGUgPSBudWxsXG5cbiAgICByZXR1cm4gZ28kb3BlbihwYXRoLCBmbGFncywgbW9kZSwgY2IpXG5cbiAgICBmdW5jdGlvbiBnbyRvcGVuIChwYXRoLCBmbGFncywgbW9kZSwgY2IsIHN0YXJ0VGltZSkge1xuICAgICAgcmV0dXJuIGZzJG9wZW4ocGF0aCwgZmxhZ3MsIG1vZGUsIGZ1bmN0aW9uIChlcnIsIGZkKSB7XG4gICAgICAgIGlmIChlcnIgJiYgKGVyci5jb2RlID09PSAnRU1GSUxFJyB8fCBlcnIuY29kZSA9PT0gJ0VORklMRScpKVxuICAgICAgICAgIGVucXVldWUoW2dvJG9wZW4sIFtwYXRoLCBmbGFncywgbW9kZSwgY2JdLCBlcnIsIHN0YXJ0VGltZSB8fCBEYXRlLm5vdygpLCBEYXRlLm5vdygpXSlcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnNcbn1cblxuZnVuY3Rpb24gZW5xdWV1ZSAoZWxlbSkge1xuICBkZWJ1ZygnRU5RVUVVRScsIGVsZW1bMF0ubmFtZSwgZWxlbVsxXSlcbiAgZnNbZ3JhY2VmdWxRdWV1ZV0ucHVzaChlbGVtKVxuICByZXRyeSgpXG59XG5cbi8vIGtlZXAgdHJhY2sgb2YgdGhlIHRpbWVvdXQgYmV0d2VlbiByZXRyeSgpIGNhbGxzXG52YXIgcmV0cnlUaW1lclxuXG4vLyByZXNldCB0aGUgc3RhcnRUaW1lIGFuZCBsYXN0VGltZSB0byBub3dcbi8vIHRoaXMgcmVzZXRzIHRoZSBzdGFydCBvZiB0aGUgNjAgc2Vjb25kIG92ZXJhbGwgdGltZW91dCBhcyB3ZWxsIGFzIHRoZVxuLy8gZGVsYXkgYmV0d2VlbiBhdHRlbXB0cyBzbyB0aGF0IHdlJ2xsIHJldHJ5IHRoZXNlIGpvYnMgc29vbmVyXG5mdW5jdGlvbiByZXNldFF1ZXVlICgpIHtcbiAgdmFyIG5vdyA9IERhdGUubm93KClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGg7ICsraSkge1xuICAgIC8vIGVudHJpZXMgdGhhdCBhcmUgb25seSBhIGxlbmd0aCBvZiAyIGFyZSBmcm9tIGFuIG9sZGVyIHZlcnNpb24sIGRvbid0XG4gICAgLy8gYm90aGVyIG1vZGlmeWluZyB0aG9zZSBzaW5jZSB0aGV5J2xsIGJlIHJldHJpZWQgYW55d2F5LlxuICAgIGlmIChmc1tncmFjZWZ1bFF1ZXVlXVtpXS5sZW5ndGggPiAyKSB7XG4gICAgICBmc1tncmFjZWZ1bFF1ZXVlXVtpXVszXSA9IG5vdyAvLyBzdGFydFRpbWVcbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdW2ldWzRdID0gbm93IC8vIGxhc3RUaW1lXG4gICAgfVxuICB9XG4gIC8vIGNhbGwgcmV0cnkgdG8gbWFrZSBzdXJlIHdlJ3JlIGFjdGl2ZWx5IHByb2Nlc3NpbmcgdGhlIHF1ZXVlXG4gIHJldHJ5KClcbn1cblxuZnVuY3Rpb24gcmV0cnkgKCkge1xuICAvLyBjbGVhciB0aGUgdGltZXIgYW5kIHJlbW92ZSBpdCB0byBoZWxwIHByZXZlbnQgdW5pbnRlbmRlZCBjb25jdXJyZW5jeVxuICBjbGVhclRpbWVvdXQocmV0cnlUaW1lcilcbiAgcmV0cnlUaW1lciA9IHVuZGVmaW5lZFxuXG4gIGlmIChmc1tncmFjZWZ1bFF1ZXVlXS5sZW5ndGggPT09IDApXG4gICAgcmV0dXJuXG5cbiAgdmFyIGVsZW0gPSBmc1tncmFjZWZ1bFF1ZXVlXS5zaGlmdCgpXG4gIHZhciBmbiA9IGVsZW1bMF1cbiAgdmFyIGFyZ3MgPSBlbGVtWzFdXG4gIC8vIHRoZXNlIGl0ZW1zIG1heSBiZSB1bnNldCBpZiB0aGV5IHdlcmUgYWRkZWQgYnkgYW4gb2xkZXIgZ3JhY2VmdWwtZnNcbiAgdmFyIGVyciA9IGVsZW1bMl1cbiAgdmFyIHN0YXJ0VGltZSA9IGVsZW1bM11cbiAgdmFyIGxhc3RUaW1lID0gZWxlbVs0XVxuXG4gIC8vIGlmIHdlIGRvbid0IGhhdmUgYSBzdGFydFRpbWUgd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZiB3ZSd2ZSB3YWl0ZWRcbiAgLy8gbG9uZyBlbm91Z2gsIHNvIGdvIGFoZWFkIGFuZCByZXRyeSB0aGlzIGl0ZW0gbm93XG4gIGlmIChzdGFydFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgZm4uYXBwbHkobnVsbCwgYXJncylcbiAgfSBlbHNlIGlmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lID49IDYwMDAwKSB7XG4gICAgLy8gaXQncyBiZWVuIG1vcmUgdGhhbiA2MCBzZWNvbmRzIHRvdGFsLCBiYWlsIG5vd1xuICAgIGRlYnVnKCdUSU1FT1VUJywgZm4ubmFtZSwgYXJncylcbiAgICB2YXIgY2IgPSBhcmdzLnBvcCgpXG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgIGNiLmNhbGwobnVsbCwgZXJyKVxuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHRoZSBsYXN0IGF0dGVtcHQgYW5kIHJpZ2h0IG5vd1xuICAgIHZhciBzaW5jZUF0dGVtcHQgPSBEYXRlLm5vdygpIC0gbGFzdFRpbWVcbiAgICAvLyB0aGUgYW1vdW50IG9mIHRpbWUgYmV0d2VlbiB3aGVuIHdlIGZpcnN0IHRyaWVkLCBhbmQgd2hlbiB3ZSBsYXN0IHRyaWVkXG4gICAgLy8gcm91bmRlZCB1cCB0byBhdCBsZWFzdCAxXG4gICAgdmFyIHNpbmNlU3RhcnQgPSBNYXRoLm1heChsYXN0VGltZSAtIHN0YXJ0VGltZSwgMSlcbiAgICAvLyBiYWNrb2ZmLiB3YWl0IGxvbmdlciB0aGFuIHRoZSB0b3RhbCB0aW1lIHdlJ3ZlIGJlZW4gcmV0cnlpbmcsIGJ1dCBvbmx5XG4gICAgLy8gdXAgdG8gYSBtYXhpbXVtIG9mIDEwMG1zXG4gICAgdmFyIGRlc2lyZWREZWxheSA9IE1hdGgubWluKHNpbmNlU3RhcnQgKiAxLjIsIDEwMClcbiAgICAvLyBpdCdzIGJlZW4gbG9uZyBlbm91Z2ggc2luY2UgdGhlIGxhc3QgcmV0cnksIGRvIGl0IGFnYWluXG4gICAgaWYgKHNpbmNlQXR0ZW1wdCA+PSBkZXNpcmVkRGVsYXkpIHtcbiAgICAgIGRlYnVnKCdSRVRSWScsIGZuLm5hbWUsIGFyZ3MpXG4gICAgICBmbi5hcHBseShudWxsLCBhcmdzLmNvbmNhdChbc3RhcnRUaW1lXSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHdlIGNhbid0IGRvIHRoaXMgam9iIHlldCwgcHVzaCBpdCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZVxuICAgICAgLy8gYW5kIGxldCB0aGUgbmV4dCBpdGVyYXRpb24gY2hlY2sgYWdhaW5cbiAgICAgIGZzW2dyYWNlZnVsUXVldWVdLnB1c2goZWxlbSlcbiAgICB9XG4gIH1cblxuICAvLyBzY2hlZHVsZSBvdXIgbmV4dCBydW4gaWYgb25lIGlzbid0IGFscmVhZHkgc2NoZWR1bGVkXG4gIGlmIChyZXRyeVRpbWVyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXRyeVRpbWVyID0gc2V0VGltZW91dChyZXRyeSwgMClcbiAgfVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbi8vIFRoaXMgaXMgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub3JtYWxpemUvbXpcbi8vIENvcHlyaWdodCAoYykgMjAxNC0yMDE2IEpvbmF0aGFuIE9uZyBtZUBqb25nbGViZXJyeS5jb20gYW5kIENvbnRyaWJ1dG9yc1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21DYWxsYmFja1xuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5cbmNvbnN0IGFwaSA9IFtcbiAgJ2FjY2VzcycsXG4gICdhcHBlbmRGaWxlJyxcbiAgJ2NobW9kJyxcbiAgJ2Nob3duJyxcbiAgJ2Nsb3NlJyxcbiAgJ2NvcHlGaWxlJyxcbiAgJ2NwJyxcbiAgJ2ZjaG1vZCcsXG4gICdmY2hvd24nLFxuICAnZmRhdGFzeW5jJyxcbiAgJ2ZzdGF0JyxcbiAgJ2ZzeW5jJyxcbiAgJ2Z0cnVuY2F0ZScsXG4gICdmdXRpbWVzJyxcbiAgJ2dsb2InLFxuICAnbGNobW9kJyxcbiAgJ2xjaG93bicsXG4gICdsdXRpbWVzJyxcbiAgJ2xpbmsnLFxuICAnbHN0YXQnLFxuICAnbWtkaXInLFxuICAnbWtkdGVtcCcsXG4gICdvcGVuJyxcbiAgJ29wZW5kaXInLFxuICAncmVhZGRpcicsXG4gICdyZWFkRmlsZScsXG4gICdyZWFkbGluaycsXG4gICdyZWFscGF0aCcsXG4gICdyZW5hbWUnLFxuICAncm0nLFxuICAncm1kaXInLFxuICAnc3RhdCcsXG4gICdzdGF0ZnMnLFxuICAnc3ltbGluaycsXG4gICd0cnVuY2F0ZScsXG4gICd1bmxpbmsnLFxuICAndXRpbWVzJyxcbiAgJ3dyaXRlRmlsZSdcbl0uZmlsdGVyKGtleSA9PiB7XG4gIC8vIFNvbWUgY29tbWFuZHMgYXJlIG5vdCBhdmFpbGFibGUgb24gc29tZSBzeXN0ZW1zLiBFeDpcbiAgLy8gZnMuY3Agd2FzIGFkZGVkIGluIE5vZGUuanMgdjE2LjcuMFxuICAvLyBmcy5zdGF0ZnMgd2FzIGFkZGVkIGluIE5vZGUgdjE5LjYuMCwgdjE4LjE1LjBcbiAgLy8gZnMuZ2xvYiB3YXMgYWRkZWQgaW4gTm9kZS5qcyB2MjIuMC4wXG4gIC8vIGZzLmxjaG93biBpcyBub3QgYXZhaWxhYmxlIG9uIGF0IGxlYXN0IHNvbWUgTGludXhcbiAgcmV0dXJuIHR5cGVvZiBmc1trZXldID09PSAnZnVuY3Rpb24nXG59KVxuXG4vLyBFeHBvcnQgY2xvbmVkIGZzOlxuT2JqZWN0LmFzc2lnbihleHBvcnRzLCBmcylcblxuLy8gVW5pdmVyc2FsaWZ5IGFzeW5jIG1ldGhvZHM6XG5hcGkuZm9yRWFjaChtZXRob2QgPT4ge1xuICBleHBvcnRzW21ldGhvZF0gPSB1KGZzW21ldGhvZF0pXG59KVxuXG4vLyBXZSBkaWZmZXIgZnJvbSBtei9mcyBpbiB0aGF0IHdlIHN0aWxsIHNoaXAgdGhlIG9sZCwgYnJva2VuLCBmcy5leGlzdHMoKVxuLy8gc2luY2Ugd2UgYXJlIGEgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgdGhlIG5hdGl2ZSBtb2R1bGVcbmV4cG9ydHMuZXhpc3RzID0gZnVuY3Rpb24gKGZpbGVuYW1lLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLmV4aXN0cyhmaWxlbmFtZSwgY2FsbGJhY2spXG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHJldHVybiBmcy5leGlzdHMoZmlsZW5hbWUsIHJlc29sdmUpXG4gIH0pXG59XG5cbi8vIGZzLnJlYWQoKSwgZnMud3JpdGUoKSwgZnMucmVhZHYoKSwgJiBmcy53cml0ZXYoKSBuZWVkIHNwZWNpYWwgdHJlYXRtZW50IGR1ZSB0byBtdWx0aXBsZSBjYWxsYmFjayBhcmdzXG5cbmV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKVxuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZChmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIChlcnIsIGJ5dGVzUmVhZCwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1JlYWQsIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBjYW4gYmVcbi8vIGZzLndyaXRlKGZkLCBidWZmZXJbLCBvZmZzZXRbLCBsZW5ndGhbLCBwb3NpdGlvbl1dXSwgY2FsbGJhY2spXG4vLyBPUlxuLy8gZnMud3JpdGUoZmQsIHN0cmluZ1ssIHBvc2l0aW9uWywgZW5jb2RpbmddXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSBib3RoIGNhc2VzLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChmZCwgYnVmZmVyLCAuLi5hcmdzKSB7XG4gIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MpXG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGZzLndyaXRlKGZkLCBidWZmZXIsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVyKSA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gcmVqZWN0KGVycilcbiAgICAgIHJlc29sdmUoeyBieXRlc1dyaXR0ZW4sIGJ1ZmZlciB9KVxuICAgIH0pXG4gIH0pXG59XG5cbi8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBpc1xuLy8gcy5yZWFkdihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgb3B0aW9uYWwgYXJnLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy5yZWFkdiA9IGZ1bmN0aW9uIChmZCwgYnVmZmVycywgLi4uYXJncykge1xuICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmcy5yZWFkdihmZCwgYnVmZmVycywgLi4uYXJncylcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZnMucmVhZHYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzUmVhZCwgYnVmZmVycykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNSZWFkLCBidWZmZXJzIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gRnVuY3Rpb24gc2lnbmF0dXJlIGlzXG4vLyBzLndyaXRldihmZCwgYnVmZmVyc1ssIHBvc2l0aW9uXSwgY2FsbGJhY2spXG4vLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgb3B0aW9uYWwgYXJnLCBzbyB3ZSB1c2UgLi4uYXJnc1xuZXhwb3J0cy53cml0ZXYgPSBmdW5jdGlvbiAoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZnMud3JpdGV2KGZkLCBidWZmZXJzLCAuLi5hcmdzKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBmcy53cml0ZXYoZmQsIGJ1ZmZlcnMsIC4uLmFyZ3MsIChlcnIsIGJ5dGVzV3JpdHRlbiwgYnVmZmVycykgPT4ge1xuICAgICAgaWYgKGVycikgcmV0dXJuIHJlamVjdChlcnIpXG4gICAgICByZXNvbHZlKHsgYnl0ZXNXcml0dGVuLCBidWZmZXJzIH0pXG4gICAgfSlcbiAgfSlcbn1cblxuLy8gZnMucmVhbHBhdGgubmF0aXZlIHNvbWV0aW1lcyBub3QgYXZhaWxhYmxlIGlmIGZzIGlzIG1vbmtleS1wYXRjaGVkXG5pZiAodHlwZW9mIGZzLnJlYWxwYXRoLm5hdGl2ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICBleHBvcnRzLnJlYWxwYXRoLm5hdGl2ZSA9IHUoZnMucmVhbHBhdGgubmF0aXZlKVxufSBlbHNlIHtcbiAgcHJvY2Vzcy5lbWl0V2FybmluZyhcbiAgICAnZnMucmVhbHBhdGgubmF0aXZlIGlzIG5vdCBhIGZ1bmN0aW9uLiBJcyBmcyBiZWluZyBtb25rZXktcGF0Y2hlZD8nLFxuICAgICdXYXJuaW5nJywgJ2ZzLWV4dHJhLVdBUk4wMDAzJ1xuICApXG59XG4iLAogICAgIi8vIEFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL21ha2UtZGlyXG4vLyBDb3B5cmlnaHQgKGMpIFNpbmRyZSBTb3JodXMgPHNpbmRyZXNvcmh1c0BnbWFpbC5jb20+IChzaW5kcmVzb3JodXMuY29tKVxuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4ndXNlIHN0cmljdCdcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy84OTg3XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbGlidXYvbGlidXYvcHVsbC8xMDg4XG5tb2R1bGUuZXhwb3J0cy5jaGVja1BhdGggPSBmdW5jdGlvbiBjaGVja1BhdGggKHB0aCkge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IHBhdGhIYXNJbnZhbGlkV2luQ2hhcmFjdGVycyA9IC9bPD46XCJ8PypdLy50ZXN0KHB0aC5yZXBsYWNlKHBhdGgucGFyc2UocHRoKS5yb290LCAnJykpXG5cbiAgICBpZiAocGF0aEhhc0ludmFsaWRXaW5DaGFyYWN0ZXJzKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgUGF0aCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR7cHRofWApXG4gICAgICBlcnJvci5jb2RlID0gJ0VJTlZBTCdcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB7IGNoZWNrUGF0aCB9ID0gcmVxdWlyZSgnLi91dGlscycpXG5cbmNvbnN0IGdldE1vZGUgPSBvcHRpb25zID0+IHtcbiAgY29uc3QgZGVmYXVsdHMgPSB7IG1vZGU6IDBvNzc3IH1cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykgcmV0dXJuIG9wdGlvbnNcbiAgcmV0dXJuICh7IC4uLmRlZmF1bHRzLCAuLi5vcHRpb25zIH0pLm1vZGVcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpciA9IGFzeW5jIChkaXIsIG9wdGlvbnMpID0+IHtcbiAgY2hlY2tQYXRoKGRpcilcblxuICByZXR1cm4gZnMubWtkaXIoZGlyLCB7XG4gICAgbW9kZTogZ2V0TW9kZShvcHRpb25zKSxcbiAgICByZWN1cnNpdmU6IHRydWVcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMubWFrZURpclN5bmMgPSAoZGlyLCBvcHRpb25zKSA9PiB7XG4gIGNoZWNrUGF0aChkaXIpXG5cbiAgcmV0dXJuIGZzLm1rZGlyU3luYyhkaXIsIHtcbiAgICBtb2RlOiBnZXRNb2RlKG9wdGlvbnMpLFxuICAgIHJlY3Vyc2l2ZTogdHJ1ZVxuICB9KVxufVxuIiwKICAgICIndXNlIHN0cmljdCdcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgeyBtYWtlRGlyOiBfbWFrZURpciwgbWFrZURpclN5bmMgfSA9IHJlcXVpcmUoJy4vbWFrZS1kaXInKVxuY29uc3QgbWFrZURpciA9IHUoX21ha2VEaXIpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBta2RpcnM6IG1ha2VEaXIsXG4gIG1rZGlyc1N5bmM6IG1ha2VEaXJTeW5jLFxuICAvLyBhbGlhc1xuICBta2RpcnA6IG1ha2VEaXIsXG4gIG1rZGlycFN5bmM6IG1ha2VEaXJTeW5jLFxuICBlbnN1cmVEaXI6IG1ha2VEaXIsXG4gIGVuc3VyZURpclN5bmM6IG1ha2VEaXJTeW5jXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcblxuZnVuY3Rpb24gcGF0aEV4aXN0cyAocGF0aCkge1xuICByZXR1cm4gZnMuYWNjZXNzKHBhdGgpLnRoZW4oKCkgPT4gdHJ1ZSkuY2F0Y2goKCkgPT4gZmFsc2UpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYXRoRXhpc3RzOiB1KHBhdGhFeGlzdHMpLFxuICBwYXRoRXhpc3RzU3luYzogZnMuZXhpc3RzU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcblxuYXN5bmMgZnVuY3Rpb24gdXRpbWVzTWlsbGlzIChwYXRoLCBhdGltZSwgbXRpbWUpIHtcbiAgY29uc3QgZmQgPSBhd2FpdCBmcy5vcGVuKHBhdGgsICdyKycpXG5cbiAgbGV0IGVycm9yID0gbnVsbFxuXG4gIHRyeSB7XG4gICAgYXdhaXQgZnMuZnV0aW1lcyhmZCwgYXRpbWUsIG10aW1lKVxuICB9IGNhdGNoIChmdXRpbWVzRXJyKSB7XG4gICAgZXJyb3IgPSBmdXRpbWVzRXJyXG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmNsb3NlKGZkKVxuICAgIH0gY2F0Y2ggKGNsb3NlRXJyKSB7XG4gICAgICBpZiAoIWVycm9yKSBlcnJvciA9IGNsb3NlRXJyXG4gICAgfVxuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGltZXNNaWxsaXNTeW5jIChwYXRoLCBhdGltZSwgbXRpbWUpIHtcbiAgY29uc3QgZmQgPSBmcy5vcGVuU3luYyhwYXRoLCAncisnKVxuXG4gIGxldCBlcnJvciA9IG51bGxcblxuICB0cnkge1xuICAgIGZzLmZ1dGltZXNTeW5jKGZkLCBhdGltZSwgbXRpbWUpXG4gIH0gY2F0Y2ggKGZ1dGltZXNFcnIpIHtcbiAgICBlcnJvciA9IGZ1dGltZXNFcnJcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgZnMuY2xvc2VTeW5jKGZkKVxuICAgIH0gY2F0Y2ggKGNsb3NlRXJyKSB7XG4gICAgICBpZiAoIWVycm9yKSBlcnJvciA9IGNsb3NlRXJyXG4gICAgfVxuICB9XG5cbiAgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXRpbWVzTWlsbGlzOiB1KHV0aW1lc01pbGxpcyksXG4gIHV0aW1lc01pbGxpc1N5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5cbmZ1bmN0aW9uIGdldFN0YXRzIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgY29uc3Qgc3RhdEZ1bmMgPSBvcHRzLmRlcmVmZXJlbmNlXG4gICAgPyAoZmlsZSkgPT4gZnMuc3RhdChmaWxlLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIDogKGZpbGUpID0+IGZzLmxzdGF0KGZpbGUsIHsgYmlnaW50OiB0cnVlIH0pXG4gIHJldHVybiBQcm9taXNlLmFsbChbXG4gICAgc3RhdEZ1bmMoc3JjKSxcbiAgICBzdGF0RnVuYyhkZXN0KS5jYXRjaChlcnIgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuIG51bGxcbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIF0pLnRoZW4oKFtzcmNTdGF0LCBkZXN0U3RhdF0pID0+ICh7IHNyY1N0YXQsIGRlc3RTdGF0IH0pKVxufVxuXG5mdW5jdGlvbiBnZXRTdGF0c1N5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgZGVzdFN0YXRcbiAgY29uc3Qgc3RhdEZ1bmMgPSBvcHRzLmRlcmVmZXJlbmNlXG4gICAgPyAoZmlsZSkgPT4gZnMuc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICA6IChmaWxlKSA9PiBmcy5sc3RhdFN5bmMoZmlsZSwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgY29uc3Qgc3JjU3RhdCA9IHN0YXRGdW5jKHNyYylcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IHN0YXRGdW5jKGRlc3QpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0OiBudWxsIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrUGF0aHMgKHNyYywgZGVzdCwgZnVuY05hbWUsIG9wdHMpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gYXdhaXQgZ2V0U3RhdHMoc3JjLCBkZXN0LCBvcHRzKVxuICBpZiAoZGVzdFN0YXQpIHtcbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgY29uc3Qgc3JjQmFzZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHNyYylcbiAgICAgIGNvbnN0IGRlc3RCYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUoZGVzdClcbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ21vdmUnICYmXG4gICAgICAgIHNyY0Jhc2VOYW1lICE9PSBkZXN0QmFzZU5hbWUgJiZcbiAgICAgICAgc3JjQmFzZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZGVzdEJhc2VOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQsIGlzQ2hhbmdpbmdDYXNlOiB0cnVlIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgICB9XG4gICAgaWYgKCFzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBub24tZGlyZWN0b3J5ICcke3NyY30nLmApXG4gICAgfVxuICB9XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuXG4gIHJldHVybiB7IHNyY1N0YXQsIGRlc3RTdGF0IH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQYXRoc1N5bmMgKHNyYywgZGVzdCwgZnVuY05hbWUsIG9wdHMpIHtcbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gZ2V0U3RhdHNTeW5jKHNyYywgZGVzdCwgb3B0cylcblxuICBpZiAoZGVzdFN0YXQpIHtcbiAgICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgICAgY29uc3Qgc3JjQmFzZU5hbWUgPSBwYXRoLmJhc2VuYW1lKHNyYylcbiAgICAgIGNvbnN0IGRlc3RCYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUoZGVzdClcbiAgICAgIGlmIChmdW5jTmFtZSA9PT0gJ21vdmUnICYmXG4gICAgICAgIHNyY0Jhc2VOYW1lICE9PSBkZXN0QmFzZU5hbWUgJiZcbiAgICAgICAgc3JjQmFzZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gZGVzdEJhc2VOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgc3JjU3RhdCwgZGVzdFN0YXQsIGlzQ2hhbmdpbmdDYXNlOiB0cnVlIH1cbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4nKVxuICAgIH1cbiAgICBpZiAoc3JjU3RhdC5pc0RpcmVjdG9yeSgpICYmICFkZXN0U3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBkaXJlY3RvcnkgJyR7c3JjfScuYClcbiAgICB9XG4gICAgaWYgKCFzcmNTdGF0LmlzRGlyZWN0b3J5KCkgJiYgZGVzdFN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIGRpcmVjdG9yeSAnJHtkZXN0fScgd2l0aCBub24tZGlyZWN0b3J5ICcke3NyY30nLmApXG4gICAgfVxuICB9XG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSAmJiBpc1NyY1N1YmRpcihzcmMsIGRlc3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVyck1zZyhzcmMsIGRlc3QsIGZ1bmNOYW1lKSlcbiAgfVxuICByZXR1cm4geyBzcmNTdGF0LCBkZXN0U3RhdCB9XG59XG5cbi8vIHJlY3Vyc2l2ZWx5IGNoZWNrIGlmIGRlc3QgcGFyZW50IGlzIGEgc3ViZGlyZWN0b3J5IG9mIHNyYy5cbi8vIEl0IHdvcmtzIGZvciBhbGwgZmlsZSB0eXBlcyBpbmNsdWRpbmcgc3ltbGlua3Mgc2luY2UgaXRcbi8vIGNoZWNrcyB0aGUgc3JjIGFuZCBkZXN0IGlub2Rlcy4gSXQgc3RhcnRzIGZyb20gdGhlIGRlZXBlc3Rcbi8vIHBhcmVudCBhbmQgc3RvcHMgb25jZSBpdCByZWFjaGVzIHRoZSBzcmMgcGFyZW50IG9yIHRoZSByb290IHBhdGguXG5hc3luYyBmdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzIChzcmMsIHNyY1N0YXQsIGRlc3QsIGZ1bmNOYW1lKSB7XG4gIGNvbnN0IHNyY1BhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoc3JjKSlcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoZGVzdCkpXG4gIGlmIChkZXN0UGFyZW50ID09PSBzcmNQYXJlbnQgfHwgZGVzdFBhcmVudCA9PT0gcGF0aC5wYXJzZShkZXN0UGFyZW50KS5yb290KSByZXR1cm5cblxuICBsZXQgZGVzdFN0YXRcbiAgdHJ5IHtcbiAgICBkZXN0U3RhdCA9IGF3YWl0IGZzLnN0YXQoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cblxuICBpZiAoYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRlc3RTdGF0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2coc3JjLCBkZXN0LCBmdW5jTmFtZSkpXG4gIH1cblxuICByZXR1cm4gY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBjaGVja1BhcmVudFBhdGhzU3luYyAoc3JjLCBzcmNTdGF0LCBkZXN0LCBmdW5jTmFtZSkge1xuICBjb25zdCBzcmNQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHNyYykpXG4gIGNvbnN0IGRlc3RQYXJlbnQgPSBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKGRlc3QpKVxuICBpZiAoZGVzdFBhcmVudCA9PT0gc3JjUGFyZW50IHx8IGRlc3RQYXJlbnQgPT09IHBhdGgucGFyc2UoZGVzdFBhcmVudCkucm9vdCkgcmV0dXJuXG4gIGxldCBkZXN0U3RhdFxuICB0cnkge1xuICAgIGRlc3RTdGF0ID0gZnMuc3RhdFN5bmMoZGVzdFBhcmVudCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykgcmV0dXJuXG4gICAgdGhyb3cgZXJyXG4gIH1cbiAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkZXN0U3RhdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKHNyYywgZGVzdCwgZnVuY05hbWUpKVxuICB9XG4gIHJldHVybiBjaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3RQYXJlbnQsIGZ1bmNOYW1lKVxufVxuXG5mdW5jdGlvbiBhcmVJZGVudGljYWwgKHNyY1N0YXQsIGRlc3RTdGF0KSB7XG4gIC8vIHN0YXQuZGV2IGNhbiBiZSAwbiBvbiB3aW5kb3dzIHdoZW4gbm9kZSB2ZXJzaW9uID49IDIyLngueFxuICByZXR1cm4gZGVzdFN0YXQuaW5vICE9PSB1bmRlZmluZWQgJiYgZGVzdFN0YXQuZGV2ICE9PSB1bmRlZmluZWQgJiYgZGVzdFN0YXQuaW5vID09PSBzcmNTdGF0LmlubyAmJiBkZXN0U3RhdC5kZXYgPT09IHNyY1N0YXQuZGV2XG59XG5cbi8vIHJldHVybiB0cnVlIGlmIGRlc3QgaXMgYSBzdWJkaXIgb2Ygc3JjLCBvdGhlcndpc2UgZmFsc2UuXG4vLyBJdCBvbmx5IGNoZWNrcyB0aGUgcGF0aCBzdHJpbmdzLlxuZnVuY3Rpb24gaXNTcmNTdWJkaXIgKHNyYywgZGVzdCkge1xuICBjb25zdCBzcmNBcnIgPSBwYXRoLnJlc29sdmUoc3JjKS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgY29uc3QgZGVzdEFyciA9IHBhdGgucmVzb2x2ZShkZXN0KS5zcGxpdChwYXRoLnNlcCkuZmlsdGVyKGkgPT4gaSlcbiAgcmV0dXJuIHNyY0Fyci5ldmVyeSgoY3VyLCBpKSA9PiBkZXN0QXJyW2ldID09PSBjdXIpXG59XG5cbmZ1bmN0aW9uIGVyck1zZyAoc3JjLCBkZXN0LCBmdW5jTmFtZSkge1xuICByZXR1cm4gYENhbm5vdCAke2Z1bmNOYW1lfSAnJHtzcmN9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2Rlc3R9Jy5gXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBjaGVja1BhdGhzXG4gIGNoZWNrUGF0aHM6IHUoY2hlY2tQYXRocyksXG4gIGNoZWNrUGF0aHNTeW5jLFxuICAvLyBjaGVja1BhcmVudFxuICBjaGVja1BhcmVudFBhdGhzOiB1KGNoZWNrUGFyZW50UGF0aHMpLFxuICBjaGVja1BhcmVudFBhdGhzU3luYyxcbiAgLy8gTWlzY1xuICBpc1NyY1N1YmRpcixcbiAgYXJlSWRlbnRpY2FsXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzEwNTZcbi8vIFBlcmZvcm1pbmcgcGFyYWxsZWwgb3BlcmF0aW9ucyBvbiBlYWNoIGl0ZW0gb2YgYW4gYXN5bmMgaXRlcmF0b3IgaXNcbi8vIHN1cnByaXNpbmdseSBoYXJkOyB5b3UgbmVlZCB0byBoYXZlIGhhbmRsZXJzIGluIHBsYWNlIHRvIGF2b2lkIGdldHRpbmcgYW5cbi8vIFVuaGFuZGxlZFByb21pc2VSZWplY3Rpb25XYXJuaW5nLlxuLy8gTk9URTogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwcmVzZW50bHkgaGFuZGxlIHJldHVybiB2YWx1ZXMsIG9ubHkgZXJyb3JzXG5hc3luYyBmdW5jdGlvbiBhc3luY0l0ZXJhdG9yQ29uY3VycmVudFByb2Nlc3MgKGl0ZXJhdG9yLCBmbikge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBpdGVyYXRvcikge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBmbihpdGVtKS50aGVuKFxuICAgICAgICAoKSA9PiBudWxsLFxuICAgICAgICAoZXJyKSA9PiBlcnIgPz8gbmV3IEVycm9yKCd1bmtub3duIGVycm9yJylcbiAgICAgIClcbiAgICApXG4gIH1cbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgcHJvbWlzZXMubWFwKChwcm9taXNlKSA9PlxuICAgICAgcHJvbWlzZS50aGVuKChwb3NzaWJsZUVycikgPT4ge1xuICAgICAgICBpZiAocG9zc2libGVFcnIgIT09IG51bGwpIHRocm93IHBvc3NpYmxlRXJyXG4gICAgICB9KVxuICAgIClcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXN5bmNJdGVyYXRvckNvbmN1cnJlbnRQcm9jZXNzXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IHsgbWtkaXJzIH0gPSByZXF1aXJlKCcuLi9ta2RpcnMnKVxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5jb25zdCB7IHV0aW1lc01pbGxpcyB9ID0gcmVxdWlyZSgnLi4vdXRpbC91dGltZXMnKVxuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5jb25zdCB7IGFzeW5jSXRlcmF0b3JDb25jdXJyZW50UHJvY2VzcyB9ID0gcmVxdWlyZSgnLi4vdXRpbC9hc3luYycpXG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHkgKHNyYywgZGVzdCwgb3B0cyA9IHt9KSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKFxuICAgICAgJ1VzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cXG4nICtcbiAgICAgICdcXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjknLFxuICAgICAgJ1dhcm5pbmcnLCAnZnMtZXh0cmEtV0FSTjAwMDEnXG4gICAgKVxuICB9XG5cbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gYXdhaXQgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ2NvcHknLCBvcHRzKVxuXG4gIGF3YWl0IHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JylcblxuICBjb25zdCBpbmNsdWRlID0gYXdhaXQgcnVuRmlsdGVyKHNyYywgZGVzdCwgb3B0cylcblxuICBpZiAoIWluY2x1ZGUpIHJldHVyblxuXG4gIC8vIGNoZWNrIGlmIHRoZSBwYXJlbnQgb2YgZGVzdCBleGlzdHMsIGFuZCBjcmVhdGUgaXQgaWYgaXQgZG9lc24ndCBleGlzdFxuICBjb25zdCBkZXN0UGFyZW50ID0gcGF0aC5kaXJuYW1lKGRlc3QpXG4gIGNvbnN0IGRpckV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHMoZGVzdFBhcmVudClcbiAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICBhd2FpdCBta2RpcnMoZGVzdFBhcmVudClcbiAgfVxuXG4gIGF3YWl0IGdldFN0YXRzQW5kUGVyZm9ybUNvcHkoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cylcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuRmlsdGVyIChzcmMsIGRlc3QsIG9wdHMpIHtcbiAgaWYgKCFvcHRzLmZpbHRlcikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIG9wdHMuZmlsdGVyKHNyYywgZGVzdClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U3RhdHNBbmRQZXJmb3JtQ29weSAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzdGF0Rm4gPSBvcHRzLmRlcmVmZXJlbmNlID8gZnMuc3RhdCA6IGZzLmxzdGF0XG4gIGNvbnN0IHNyY1N0YXQgPSBhd2FpdCBzdGF0Rm4oc3JjKVxuXG4gIGlmIChzcmNTdGF0LmlzRGlyZWN0b3J5KCkpIHJldHVybiBvbkRpcihzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuXG4gIGlmIChcbiAgICBzcmNTdGF0LmlzRmlsZSgpIHx8XG4gICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgc3JjU3RhdC5pc0Jsb2NrRGV2aWNlKClcbiAgKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG5cbiAgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBpZiAoc3JjU3RhdC5pc1NvY2tldCgpKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7c3JjfWApXG4gIGlmIChzcmNTdGF0LmlzRklGTygpKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke3NyY31gKVxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtzcmN9YClcbn1cblxuYXN5bmMgZnVuY3Rpb24gb25GaWxlIChzcmNTdGF0LCBkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICghZGVzdFN0YXQpIHJldHVybiBjb3B5RmlsZShzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG5cbiAgaWYgKG9wdHMub3ZlcndyaXRlKSB7XG4gICAgYXdhaXQgZnMudW5saW5rKGRlc3QpXG4gICAgcmV0dXJuIGNvcHlGaWxlKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cylcbiAgfVxuICBpZiAob3B0cy5lcnJvck9uRXhpc3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Rlc3R9JyBhbHJlYWR5IGV4aXN0c2ApXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weUZpbGUgKHNyY1N0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBhd2FpdCBmcy5jb3B5RmlsZShzcmMsIGRlc3QpXG4gIGlmIChvcHRzLnByZXNlcnZlVGltZXN0YW1wcykge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB3cml0YWJsZSBiZWZvcmUgc2V0dGluZyB0aGUgdGltZXN0YW1wXG4gICAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gICAgLy8gKHRocm91Z2ggdXRpbWVzIGNhbGwpXG4gICAgaWYgKGZpbGVJc05vdFdyaXRhYmxlKHNyY1N0YXQubW9kZSkpIHtcbiAgICAgIGF3YWl0IG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjU3RhdC5tb2RlKVxuICAgIH1cblxuICAgIC8vIFNldCB0aW1lc3RhbXBzIGFuZCBtb2RlIGNvcnJlc3BvbmRpbmdseVxuXG4gICAgLy8gTm90ZSB0aGF0IFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgICAvLyBiZWNhdXNlIGl0IGlzIG1vZGlmaWVkIGJ5IHRoZSByZWFkKDIpIHN5c3RlbSBjYWxsXG4gICAgLy8gKFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL2ZzLmh0bWwjZnNfc3RhdF90aW1lX3ZhbHVlcylcbiAgICBjb25zdCB1cGRhdGVkU3JjU3RhdCA9IGF3YWl0IGZzLnN0YXQoc3JjKVxuICAgIGF3YWl0IHV0aW1lc01pbGxpcyhkZXN0LCB1cGRhdGVkU3JjU3RhdC5hdGltZSwgdXBkYXRlZFNyY1N0YXQubXRpbWUpXG4gIH1cblxuICByZXR1cm4gZnMuY2htb2QoZGVzdCwgc3JjU3RhdC5tb2RlKVxufVxuXG5mdW5jdGlvbiBmaWxlSXNOb3RXcml0YWJsZSAoc3JjTW9kZSkge1xuICByZXR1cm4gKHNyY01vZGUgJiAwbzIwMCkgPT09IDBcbn1cblxuZnVuY3Rpb24gbWFrZUZpbGVXcml0YWJsZSAoZGVzdCwgc3JjTW9kZSkge1xuICByZXR1cm4gZnMuY2htb2QoZGVzdCwgc3JjTW9kZSB8IDBvMjAwKVxufVxuXG5hc3luYyBmdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICAvLyB0aGUgZGVzdCBkaXJlY3RvcnkgbWlnaHQgbm90IGV4aXN0LCBjcmVhdGUgaXRcbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIGF3YWl0IGZzLm1rZGlyKGRlc3QpXG4gIH1cblxuICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBjb3B5IGV2ZXJ5dGhpbmdcbiAgYXdhaXQgYXN5bmNJdGVyYXRvckNvbmN1cnJlbnRQcm9jZXNzKGF3YWl0IGZzLm9wZW5kaXIoc3JjKSwgYXN5bmMgKGl0ZW0pID0+IHtcbiAgICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbS5uYW1lKVxuICAgIGNvbnN0IGRlc3RJdGVtID0gcGF0aC5qb2luKGRlc3QsIGl0ZW0ubmFtZSlcblxuICAgIGNvbnN0IGluY2x1ZGUgPSBhd2FpdCBydW5GaWx0ZXIoc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG4gICAgLy8gb25seSBjb3B5IHRoZSBpdGVtIGlmIGl0IG1hdGNoZXMgdGhlIGZpbHRlciBmdW5jdGlvblxuICAgIGlmIChpbmNsdWRlKSB7XG4gICAgICBjb25zdCB7IGRlc3RTdGF0IH0gPSBhd2FpdCBzdGF0LmNoZWNrUGF0aHMoc3JjSXRlbSwgZGVzdEl0ZW0sICdjb3B5Jywgb3B0cylcbiAgICAgIC8vIElmIHRoZSBpdGVtIGlzIGEgY29weWFibGUgZmlsZSwgYGdldFN0YXRzQW5kUGVyZm9ybUNvcHlgIHdpbGwgY29weSBpdFxuICAgICAgLy8gSWYgdGhlIGl0ZW0gaXMgYSBkaXJlY3RvcnksIGBnZXRTdGF0c0FuZFBlcmZvcm1Db3B5YCB3aWxsIGNhbGwgYG9uRGlyYCByZWN1cnNpdmVseVxuICAgICAgYXdhaXQgZ2V0U3RhdHNBbmRQZXJmb3JtQ29weShkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG4gICAgfVxuICB9KVxuXG4gIGlmICghZGVzdFN0YXQpIHtcbiAgICBhd2FpdCBmcy5jaG1vZChkZXN0LCBzcmNTdGF0Lm1vZGUpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gb25MaW5rIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGxldCByZXNvbHZlZFNyYyA9IGF3YWl0IGZzLnJlYWRsaW5rKHNyYylcbiAgaWYgKG9wdHMuZGVyZWZlcmVuY2UpIHtcbiAgICByZXNvbHZlZFNyYyA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZFNyYylcbiAgfVxuICBpZiAoIWRlc3RTdGF0KSB7XG4gICAgcmV0dXJuIGZzLnN5bWxpbmsocmVzb2x2ZWRTcmMsIGRlc3QpXG4gIH1cblxuICBsZXQgcmVzb2x2ZWREZXN0ID0gbnVsbFxuICB0cnkge1xuICAgIHJlc29sdmVkRGVzdCA9IGF3YWl0IGZzLnJlYWRsaW5rKGRlc3QpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBkZXN0IGV4aXN0cyBhbmQgaXMgYSByZWd1bGFyIGZpbGUgb3IgZGlyZWN0b3J5LFxuICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgLy8gZnMgdGhyb3dzIGVycm9yIGFueXdheSwgc28gbm8gbmVlZCB0byBndWFyZCBhZ2FpbnN0IGl0IGhlcmUuXG4gICAgaWYgKGUuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZS5jb2RlID09PSAnVU5LTk9XTicpIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgIHRocm93IGVcbiAgfVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkRGVzdCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCByZXNvbHZlZERlc3QpXG4gIH1cbiAgLy8gSWYgYm90aCBzeW1saW5rcyByZXNvbHZlIHRvIHRoZSBzYW1lIHRhcmdldCwgdGhleSBhcmUgc3RpbGwgZGlzdGluY3Qgc3ltbGlua3NcbiAgLy8gdGhhdCBjYW4gYmUgY29waWVkL292ZXJ3cml0dGVuLiBPbmx5IGNoZWNrIHN1YmRpcmVjdG9yeSBjb25zdHJhaW50cyB3aGVuXG4gIC8vIHRoZSByZXNvbHZlZCBwYXRocyBhcmUgZGlmZmVyZW50LlxuICBpZiAocmVzb2x2ZWRTcmMgIT09IHJlc29sdmVkRGVzdCkge1xuICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkU3JjLCByZXNvbHZlZERlc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKVxuICAgIH1cblxuICAgIC8vIGRvIG5vdCBjb3B5IGlmIHNyYyBpcyBhIHN1YmRpciBvZiBkZXN0IHNpbmNlIHVubGlua2luZ1xuICAgIC8vIGRlc3QgaW4gdGhpcyBjYXNlIHdvdWxkIHJlc3VsdCBpbiByZW1vdmluZyBzcmMgY29udGVudHNcbiAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZERlc3QsIHJlc29sdmVkU3JjKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3Jlc29sdmVkRGVzdH0nIHdpdGggJyR7cmVzb2x2ZWRTcmN9Jy5gKVxuICAgIH1cbiAgfVxuXG4gIC8vIGNvcHkgdGhlIGxpbmtcbiAgYXdhaXQgZnMudW5saW5rKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rKHJlc29sdmVkU3JjLCBkZXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlcbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGZzID0gcmVxdWlyZSgnZ3JhY2VmdWwtZnMnKVxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKVxuY29uc3QgbWtkaXJzU3luYyA9IHJlcXVpcmUoJy4uL21rZGlycycpLm1rZGlyc1N5bmNcbmNvbnN0IHV0aW1lc01pbGxpc1N5bmMgPSByZXF1aXJlKCcuLi91dGlsL3V0aW1lcycpLnV0aW1lc01pbGxpc1N5bmNcbmNvbnN0IHN0YXQgPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5mdW5jdGlvbiBjb3B5U3luYyAoc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMgPSB7IGZpbHRlcjogb3B0cyB9XG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fVxuICBvcHRzLmNsb2JiZXIgPSAnY2xvYmJlcicgaW4gb3B0cyA/ICEhb3B0cy5jbG9iYmVyIDogdHJ1ZSAvLyBkZWZhdWx0IHRvIHRydWUgZm9yIG5vd1xuICBvcHRzLm92ZXJ3cml0ZSA9ICdvdmVyd3JpdGUnIGluIG9wdHMgPyAhIW9wdHMub3ZlcndyaXRlIDogb3B0cy5jbG9iYmVyIC8vIG92ZXJ3cml0ZSBmYWxscyBiYWNrIHRvIGNsb2JiZXJcblxuICAvLyBXYXJuIGFib3V0IHVzaW5nIHByZXNlcnZlVGltZXN0YW1wcyBvbiAzMi1iaXQgbm9kZVxuICBpZiAob3B0cy5wcmVzZXJ2ZVRpbWVzdGFtcHMgJiYgcHJvY2Vzcy5hcmNoID09PSAnaWEzMicpIHtcbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKFxuICAgICAgJ1VzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcXG5cXG4nICtcbiAgICAgICdcXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjknLFxuICAgICAgJ1dhcm5pbmcnLCAnZnMtZXh0cmEtV0FSTjAwMDInXG4gICAgKVxuICB9XG5cbiAgY29uc3QgeyBzcmNTdGF0LCBkZXN0U3RhdCB9ID0gc3RhdC5jaGVja1BhdGhzU3luYyhzcmMsIGRlc3QsICdjb3B5Jywgb3B0cylcbiAgc3RhdC5jaGVja1BhcmVudFBhdGhzU3luYyhzcmMsIHNyY1N0YXQsIGRlc3QsICdjb3B5JylcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmMsIGRlc3QpKSByZXR1cm5cbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBpZiAoIWZzLmV4aXN0c1N5bmMoZGVzdFBhcmVudCkpIG1rZGlyc1N5bmMoZGVzdFBhcmVudClcbiAgcmV0dXJuIGdldFN0YXRzKGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIGdldFN0YXRzIChkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGNvbnN0IHN0YXRTeW5jID0gb3B0cy5kZXJlZmVyZW5jZSA/IGZzLnN0YXRTeW5jIDogZnMubHN0YXRTeW5jXG4gIGNvbnN0IHNyY1N0YXQgPSBzdGF0U3luYyhzcmMpXG5cbiAgaWYgKHNyY1N0YXQuaXNEaXJlY3RvcnkoKSkgcmV0dXJuIG9uRGlyKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNGaWxlKCkgfHxcbiAgICAgICAgICAgc3JjU3RhdC5pc0NoYXJhY3RlckRldmljZSgpIHx8XG4gICAgICAgICAgIHNyY1N0YXQuaXNCbG9ja0RldmljZSgpKSByZXR1cm4gb25GaWxlKHNyY1N0YXQsIGRlc3RTdGF0LCBzcmMsIGRlc3QsIG9wdHMpXG4gIGVsc2UgaWYgKHNyY1N0YXQuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIG9uTGluayhkZXN0U3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICBlbHNlIGlmIChzcmNTdGF0LmlzU29ja2V0KCkpIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtzcmN9YClcbiAgZWxzZSBpZiAoc3JjU3RhdC5pc0ZJRk8oKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtzcmN9YClcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7c3JjfWApXG59XG5cbmZ1bmN0aW9uIG9uRmlsZSAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gbWF5Q29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxufVxuXG5mdW5jdGlvbiBtYXlDb3B5RmlsZSAoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGlmIChvcHRzLm92ZXJ3cml0ZSkge1xuICAgIGZzLnVubGlua1N5bmMoZGVzdClcbiAgICByZXR1cm4gY29weUZpbGUoc3JjU3RhdCwgc3JjLCBkZXN0LCBvcHRzKVxuICB9IGVsc2UgaWYgKG9wdHMuZXJyb3JPbkV4aXN0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAnJHtkZXN0fScgYWxyZWFkeSBleGlzdHNgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlGaWxlIChzcmNTdGF0LCBzcmMsIGRlc3QsIG9wdHMpIHtcbiAgZnMuY29weUZpbGVTeW5jKHNyYywgZGVzdClcbiAgaWYgKG9wdHMucHJlc2VydmVUaW1lc3RhbXBzKSBoYW5kbGVUaW1lc3RhbXBzKHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0KVxuICByZXR1cm4gc2V0RGVzdE1vZGUoZGVzdCwgc3JjU3RhdC5tb2RlKVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lc3RhbXBzIChzcmNNb2RlLCBzcmMsIGRlc3QpIHtcbiAgLy8gTWFrZSBzdXJlIHRoZSBmaWxlIGlzIHdyaXRhYmxlIGJlZm9yZSBzZXR0aW5nIHRoZSB0aW1lc3RhbXBcbiAgLy8gb3RoZXJ3aXNlIG9wZW4gZmFpbHMgd2l0aCBFUEVSTSB3aGVuIGludm9rZWQgd2l0aCAncisnXG4gIC8vICh0aHJvdWdoIHV0aW1lcyBjYWxsKVxuICBpZiAoZmlsZUlzTm90V3JpdGFibGUoc3JjTW9kZSkpIG1ha2VGaWxlV3JpdGFibGUoZGVzdCwgc3JjTW9kZSlcbiAgcmV0dXJuIHNldERlc3RUaW1lc3RhbXBzKHNyYywgZGVzdClcbn1cblxuZnVuY3Rpb24gZmlsZUlzTm90V3JpdGFibGUgKHNyY01vZGUpIHtcbiAgcmV0dXJuIChzcmNNb2RlICYgMG8yMDApID09PSAwXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWxlV3JpdGFibGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUgfCAwbzIwMClcbn1cblxuZnVuY3Rpb24gc2V0RGVzdE1vZGUgKGRlc3QsIHNyY01vZGUpIHtcbiAgcmV0dXJuIGZzLmNobW9kU3luYyhkZXN0LCBzcmNNb2RlKVxufVxuXG5mdW5jdGlvbiBzZXREZXN0VGltZXN0YW1wcyAoc3JjLCBkZXN0KSB7XG4gIC8vIFRoZSBpbml0aWFsIHNyY1N0YXQuYXRpbWUgY2Fubm90IGJlIHRydXN0ZWRcbiAgLy8gYmVjYXVzZSBpdCBpcyBtb2RpZmllZCBieSB0aGUgcmVhZCgyKSBzeXN0ZW0gY2FsbFxuICAvLyAoU2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZnMuaHRtbCNmc19zdGF0X3RpbWVfdmFsdWVzKVxuICBjb25zdCB1cGRhdGVkU3JjU3RhdCA9IGZzLnN0YXRTeW5jKHNyYylcbiAgcmV0dXJuIHV0aW1lc01pbGxpc1N5bmMoZGVzdCwgdXBkYXRlZFNyY1N0YXQuYXRpbWUsIHVwZGF0ZWRTcmNTdGF0Lm10aW1lKVxufVxuXG5mdW5jdGlvbiBvbkRpciAoc3JjU3RhdCwgZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBpZiAoIWRlc3RTdGF0KSByZXR1cm4gbWtEaXJBbmRDb3B5KHNyY1N0YXQubW9kZSwgc3JjLCBkZXN0LCBvcHRzKVxuICByZXR1cm4gY29weURpcihzcmMsIGRlc3QsIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG1rRGlyQW5kQ29weSAoc3JjTW9kZSwgc3JjLCBkZXN0LCBvcHRzKSB7XG4gIGZzLm1rZGlyU3luYyhkZXN0KVxuICBjb3B5RGlyKHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHNldERlc3RNb2RlKGRlc3QsIHNyY01vZGUpXG59XG5cbmZ1bmN0aW9uIGNvcHlEaXIgKHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBkaXIgPSBmcy5vcGVuZGlyU3luYyhzcmMpXG5cbiAgdHJ5IHtcbiAgICBsZXQgZGlyZW50XG5cbiAgICB3aGlsZSAoKGRpcmVudCA9IGRpci5yZWFkU3luYygpKSAhPT0gbnVsbCkge1xuICAgICAgY29weURpckl0ZW0oZGlyZW50Lm5hbWUsIHNyYywgZGVzdCwgb3B0cylcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgZGlyLmNsb3NlU3luYygpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29weURpckl0ZW0gKGl0ZW0sIHNyYywgZGVzdCwgb3B0cykge1xuICBjb25zdCBzcmNJdGVtID0gcGF0aC5qb2luKHNyYywgaXRlbSlcbiAgY29uc3QgZGVzdEl0ZW0gPSBwYXRoLmpvaW4oZGVzdCwgaXRlbSlcbiAgaWYgKG9wdHMuZmlsdGVyICYmICFvcHRzLmZpbHRlcihzcmNJdGVtLCBkZXN0SXRlbSkpIHJldHVyblxuICBjb25zdCB7IGRlc3RTdGF0IH0gPSBzdGF0LmNoZWNrUGF0aHNTeW5jKHNyY0l0ZW0sIGRlc3RJdGVtLCAnY29weScsIG9wdHMpXG4gIHJldHVybiBnZXRTdGF0cyhkZXN0U3RhdCwgc3JjSXRlbSwgZGVzdEl0ZW0sIG9wdHMpXG59XG5cbmZ1bmN0aW9uIG9uTGluayAoZGVzdFN0YXQsIHNyYywgZGVzdCwgb3B0cykge1xuICBsZXQgcmVzb2x2ZWRTcmMgPSBmcy5yZWFkbGlua1N5bmMoc3JjKVxuICBpZiAob3B0cy5kZXJlZmVyZW5jZSkge1xuICAgIHJlc29sdmVkU3JjID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHJlc29sdmVkU3JjKVxuICB9XG5cbiAgaWYgKCFkZXN0U3RhdCkge1xuICAgIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVzb2x2ZWREZXN0XG4gICAgdHJ5IHtcbiAgICAgIHJlc29sdmVkRGVzdCA9IGZzLnJlYWRsaW5rU3luYyhkZXN0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gZGVzdCBleGlzdHMgYW5kIGlzIGEgcmVndWxhciBmaWxlIG9yIGRpcmVjdG9yeSxcbiAgICAgIC8vIFdpbmRvd3MgbWF5IHRocm93IFVOS05PV04gZXJyb3IuIElmIGRlc3QgYWxyZWFkeSBleGlzdHMsXG4gICAgICAvLyBmcyB0aHJvd3MgZXJyb3IgYW55d2F5LCBzbyBubyBuZWVkIHRvIGd1YXJkIGFnYWluc3QgaXQgaGVyZS5cbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VJTlZBTCcgfHwgZXJyLmNvZGUgPT09ICdVTktOT1dOJykgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHJlc29sdmVkU3JjLCBkZXN0KVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGlmIChvcHRzLmRlcmVmZXJlbmNlKSB7XG4gICAgICByZXNvbHZlZERlc3QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgcmVzb2x2ZWREZXN0KVxuICAgIH1cbiAgICAvLyBJZiBib3RoIHN5bWxpbmtzIHJlc29sdmUgdG8gdGhlIHNhbWUgdGFyZ2V0LCB0aGV5IGFyZSBzdGlsbCBkaXN0aW5jdCBzeW1saW5rc1xuICAgIC8vIHRoYXQgY2FuIGJlIGNvcGllZC9vdmVyd3JpdHRlbi4gT25seSBjaGVjayBzdWJkaXJlY3RvcnkgY29uc3RyYWludHMgd2hlblxuICAgIC8vIHRoZSByZXNvbHZlZCBwYXRocyBhcmUgZGlmZmVyZW50LlxuICAgIGlmIChyZXNvbHZlZFNyYyAhPT0gcmVzb2x2ZWREZXN0KSB7XG4gICAgICBpZiAoc3RhdC5pc1NyY1N1YmRpcihyZXNvbHZlZFNyYywgcmVzb2x2ZWREZXN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3Jlc29sdmVkU3JjfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtyZXNvbHZlZERlc3R9Jy5gKVxuICAgICAgfVxuXG4gICAgICAvLyBwcmV2ZW50IGNvcHkgaWYgc3JjIGlzIGEgc3ViZGlyIG9mIGRlc3Qgc2luY2UgdW5saW5raW5nXG4gICAgICAvLyBkZXN0IGluIHRoaXMgY2FzZSB3b3VsZCByZXN1bHQgaW4gcmVtb3Zpbmcgc3JjIGNvbnRlbnRzXG4gICAgICAvLyBhbmQgdGhlcmVmb3JlIGEgYnJva2VuIHN5bWxpbmsgd291bGQgYmUgY3JlYXRlZC5cbiAgICAgIGlmIChzdGF0LmlzU3JjU3ViZGlyKHJlc29sdmVkRGVzdCwgcmVzb2x2ZWRTcmMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtyZXNvbHZlZERlc3R9JyB3aXRoICcke3Jlc29sdmVkU3JjfScuYClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlMaW5rKHJlc29sdmVkU3JjLCBkZXN0KVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlMaW5rIChyZXNvbHZlZFNyYywgZGVzdCkge1xuICBmcy51bmxpbmtTeW5jKGRlc3QpXG4gIHJldHVybiBmcy5zeW1saW5rU3luYyhyZXNvbHZlZFNyYywgZGVzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3luY1xuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weTogdShyZXF1aXJlKCcuL2NvcHknKSksXG4gIGNvcHlTeW5jOiByZXF1aXJlKCcuL2NvcHktc3luYycpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2dyYWNlZnVsLWZzJylcbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tQ2FsbGJhY2tcblxuZnVuY3Rpb24gcmVtb3ZlIChwYXRoLCBjYWxsYmFjaykge1xuICBmcy5ybShwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSwgY2FsbGJhY2spXG59XG5cbmZ1bmN0aW9uIHJlbW92ZVN5bmMgKHBhdGgpIHtcbiAgZnMucm1TeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcmVtb3ZlOiB1KHJlbW92ZSksXG4gIHJlbW92ZVN5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBta2RpciA9IHJlcXVpcmUoJy4uL21rZGlycycpXG5jb25zdCByZW1vdmUgPSByZXF1aXJlKCcuLi9yZW1vdmUnKVxuXG5jb25zdCBlbXB0eURpciA9IHUoYXN5bmMgZnVuY3Rpb24gZW1wdHlEaXIgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbWtkaXIubWtkaXJzKGRpcilcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChpdGVtcy5tYXAoaXRlbSA9PiByZW1vdmUucmVtb3ZlKHBhdGguam9pbihkaXIsIGl0ZW0pKSkpXG59KVxuXG5mdW5jdGlvbiBlbXB0eURpclN5bmMgKGRpcikge1xuICBsZXQgaXRlbXNcbiAgdHJ5IHtcbiAgICBpdGVtcyA9IGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuICB9XG5cbiAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpdGVtID0gcGF0aC5qb2luKGRpciwgaXRlbSlcbiAgICByZW1vdmUucmVtb3ZlU3luYyhpdGVtKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW1wdHlEaXJTeW5jLFxuICBlbXB0eWRpclN5bmM6IGVtcHR5RGlyU3luYyxcbiAgZW1wdHlEaXIsXG4gIGVtcHR5ZGlyOiBlbXB0eURpclxufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlRmlsZSAoZmlsZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGF3YWl0IGZzLnN0YXQoZmlsZSlcbiAgfSBjYXRjaCB7IH1cbiAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRmlsZSgpKSByZXR1cm5cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSlcblxuICBsZXQgZGlyU3RhdHMgPSBudWxsXG4gIHRyeSB7XG4gICAgZGlyU3RhdHMgPSBhd2FpdCBmcy5zdGF0KGRpcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gaWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBtYWtlIGl0XG4gICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgYXdhaXQgbWtkaXIubWtkaXJzKGRpcilcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCAnJylcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICBpZiAoZGlyU3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCAnJylcbiAgfSBlbHNlIHtcbiAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgLy8gVGhpcyBpcyBqdXN0IHRvIGNhdXNlIGFuIGludGVybmFsIEVOT1RESVIgZXJyb3IgdG8gYmUgdGhyb3duXG4gICAgYXdhaXQgZnMucmVhZGRpcihkaXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsZVN5bmMgKGZpbGUpIHtcbiAgbGV0IHN0YXRzXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlKVxuICB9IGNhdGNoIHsgfVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNGaWxlKCkpIHJldHVyblxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuICB0cnkge1xuICAgIGlmICghZnMuc3RhdFN5bmMoZGlyKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBwYXJlbnQgaXMgbm90IGEgZGlyZWN0b3J5XG4gICAgICAvLyBUaGlzIGlzIGp1c3QgdG8gY2F1c2UgYW4gaW50ZXJuYWwgRU5PVERJUiBlcnJvciB0byBiZSB0aHJvd25cbiAgICAgIGZzLnJlYWRkaXJTeW5jKGRpcilcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElmIHRoZSBzdGF0IGNhbGwgYWJvdmUgZmFpbGVkIGJlY2F1c2UgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXRcbiAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnRU5PRU5UJykgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gICAgZWxzZSB0aHJvdyBlcnJcbiAgfVxuXG4gIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgJycpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVGaWxlOiB1KGNyZWF0ZUZpbGUpLFxuICBjcmVhdGVGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHsgcGF0aEV4aXN0cyB9ID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKVxuY29uc3QgeyBhcmVJZGVudGljYWwgfSA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUxpbmsgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgbGV0IGRzdFN0YXRcbiAgdHJ5IHtcbiAgICBkc3RTdGF0ID0gYXdhaXQgZnMubHN0YXQoZHN0cGF0aCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgfSBjYXRjaCB7XG4gICAgLy8gaWdub3JlIGVycm9yXG4gIH1cblxuICBsZXQgc3JjU3RhdFxuICB0cnkge1xuICAgIHNyY1N0YXQgPSBhd2FpdCBmcy5sc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZUxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgaWYgKGRzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRzdFN0YXQpKSByZXR1cm5cblxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcblxuICBjb25zdCBkaXJFeGlzdHMgPSBhd2FpdCBwYXRoRXhpc3RzKGRpcilcblxuICBpZiAoIWRpckV4aXN0cykge1xuICAgIGF3YWl0IG1rZGlyLm1rZGlycyhkaXIpXG4gIH1cblxuICBhd2FpdCBmcy5saW5rKHNyY3BhdGgsIGRzdHBhdGgpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtTeW5jIChzcmNwYXRoLCBkc3RwYXRoKSB7XG4gIGxldCBkc3RTdGF0XG4gIHRyeSB7XG4gICAgZHN0U3RhdCA9IGZzLmxzdGF0U3luYyhkc3RwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICB9IGNhdGNoIHt9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzcmNTdGF0ID0gZnMubHN0YXRTeW5jKHNyY3BhdGgsIHsgYmlnaW50OiB0cnVlIH0pXG4gICAgaWYgKGRzdFN0YXQgJiYgYXJlSWRlbnRpY2FsKHNyY1N0YXQsIGRzdFN0YXQpKSByZXR1cm5cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVMaW5rJylcbiAgICB0aHJvdyBlcnJcbiAgfVxuXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuICBjb25zdCBkaXJFeGlzdHMgPSBmcy5leGlzdHNTeW5jKGRpcilcbiAgaWYgKGRpckV4aXN0cykgcmV0dXJuIGZzLmxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIG1rZGlyLm1rZGlyc1N5bmMoZGlyKVxuXG4gIHJldHVybiBmcy5saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY3JlYXRlTGluazogdShjcmVhdGVMaW5rKSxcbiAgY3JlYXRlTGlua1N5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5cbmNvbnN0IHUgPSByZXF1aXJlKCd1bml2ZXJzYWxpZnknKS5mcm9tUHJvbWlzZVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0d28gdHlwZXMgb2YgcGF0aHMsIG9uZSByZWxhdGl2ZSB0byBzeW1saW5rLCBhbmQgb25lXG4gKiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gQ2hlY2tzIGlmIHBhdGggaXMgYWJzb2x1dGUgb3JcbiAqIHJlbGF0aXZlLiBJZiB0aGUgcGF0aCBpcyByZWxhdGl2ZSwgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHBhdGggaXNcbiAqIHJlbGF0aXZlIHRvIHN5bWxpbmsgb3IgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gVGhpcyBpcyBhblxuICogaW5pdGlhdGl2ZSB0byBmaW5kIGEgc21hcnRlciBgc3JjcGF0aGAgdG8gc3VwcGx5IHdoZW4gYnVpbGRpbmcgc3ltbGlua3MuXG4gKiBUaGlzIGFsbG93cyB5b3UgdG8gZGV0ZXJtaW5lIHdoaWNoIHBhdGggdG8gdXNlIG91dCBvZiBvbmUgb2YgdGhyZWUgcG9zc2libGVcbiAqIHR5cGVzIG9mIHNvdXJjZSBwYXRocy4gVGhlIGZpcnN0IGlzIGFuIGFic29sdXRlIHBhdGguIFRoaXMgaXMgZGV0ZWN0ZWQgYnlcbiAqIGBwYXRoLmlzQWJzb2x1dGUoKWAuIFdoZW4gYW4gYWJzb2x1dGUgcGF0aCBpcyBwcm92aWRlZCwgaXQgaXMgY2hlY2tlZCB0b1xuICogc2VlIGlmIGl0IGV4aXN0cy4gSWYgaXQgZG9lcyBpdCdzIHVzZWQsIGlmIG5vdCBhbiBlcnJvciBpcyByZXR1cm5lZFxuICogKGNhbGxiYWNrKS8gdGhyb3duIChzeW5jKS4gVGhlIG90aGVyIHR3byBvcHRpb25zIGZvciBgc3JjcGF0aGAgYXJlIGFcbiAqIHJlbGF0aXZlIHVybC4gQnkgZGVmYXVsdCBOb2RlJ3MgYGZzLnN5bWxpbmtgIHdvcmtzIGJ5IGNyZWF0aW5nIGEgc3ltbGlua1xuICogdXNpbmcgYGRzdHBhdGhgIGFuZCBleHBlY3RzIHRoZSBgc3JjcGF0aGAgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIG5ld2x5XG4gKiBjcmVhdGVkIHN5bWxpbmsuIElmIHlvdSBwcm92aWRlIGEgYHNyY3BhdGhgIHRoYXQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIGZpbGVcbiAqIHN5c3RlbSBpdCByZXN1bHRzIGluIGEgYnJva2VuIHN5bWxpbmsuIFRvIG1pbmltaXplIHRoaXMsIHRoZSBmdW5jdGlvblxuICogY2hlY2tzIHRvIHNlZSBpZiB0aGUgJ3JlbGF0aXZlIHRvIHN5bWxpbmsnIHNvdXJjZSBmaWxlIGV4aXN0cywgYW5kIGlmIGl0XG4gKiBkb2VzIGl0IHdpbGwgdXNlIGl0LiBJZiBpdCBkb2VzIG5vdCwgaXQgY2hlY2tzIGlmIHRoZXJlJ3MgYSBmaWxlIHRoYXRcbiAqIGV4aXN0cyB0aGF0IGlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBpZiBkb2VzIGl0cyB1c2VkLlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIGV4cGVjdGF0aW9ucyBvZiB0aGUgb3JpZ2luYWwgZnMuc3ltbGluayBzcGVjIGFuZCBhZGRzXG4gKiB0aGUgYWJpbGl0eSB0byBwYXNzIGluIGByZWxhdGl2ZSB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWNvdHJ5YCBwYXRocy5cbiAqL1xuXG5hc3luYyBmdW5jdGlvbiBzeW1saW5rUGF0aHMgKHNyY3BhdGgsIGRzdHBhdGgpIHtcbiAgaWYgKHBhdGguaXNBYnNvbHV0ZShzcmNwYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBlcnIubWVzc2FnZS5yZXBsYWNlKCdsc3RhdCcsICdlbnN1cmVTeW1saW5rJylcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuXG4gIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHMocmVsYXRpdmVUb0RzdClcbiAgaWYgKGV4aXN0cykge1xuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogcmVsYXRpdmVUb0RzdCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGVyci5tZXNzYWdlLnJlcGxhY2UoJ2xzdGF0JywgJ2Vuc3VyZVN5bWxpbmsnKVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICB0b0RzdDogcGF0aC5yZWxhdGl2ZShkc3RkaXIsIHNyY3BhdGgpXG4gIH1cbn1cblxuZnVuY3Rpb24gc3ltbGlua1BhdGhzU3luYyAoc3JjcGF0aCwgZHN0cGF0aCkge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhzcmNwYXRoKVxuICAgIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ2Fic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QnKVxuICAgIHJldHVybiB7XG4gICAgICB0b0N3ZDogc3JjcGF0aCxcbiAgICAgIHRvRHN0OiBzcmNwYXRoXG4gICAgfVxuICB9XG5cbiAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICBjb25zdCBleGlzdHMgPSBmcy5leGlzdHNTeW5jKHJlbGF0aXZlVG9Ec3QpXG4gIGlmIChleGlzdHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9Dd2Q6IHJlbGF0aXZlVG9Ec3QsXG4gICAgICB0b0RzdDogc3JjcGF0aFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNyY0V4aXN0cyA9IGZzLmV4aXN0c1N5bmMoc3JjcGF0aClcbiAgaWYgKCFzcmNFeGlzdHMpIHRocm93IG5ldyBFcnJvcigncmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCcpXG4gIHJldHVybiB7XG4gICAgdG9Dd2Q6IHNyY3BhdGgsXG4gICAgdG9Ec3Q6IHBhdGgucmVsYXRpdmUoZHN0ZGlyLCBzcmNwYXRoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzeW1saW5rUGF0aHM6IHUoc3ltbGlua1BhdGhzKSxcbiAgc3ltbGlua1BhdGhzU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcblxuYXN5bmMgZnVuY3Rpb24gc3ltbGlua1R5cGUgKHNyY3BhdGgsIHR5cGUpIHtcbiAgaWYgKHR5cGUpIHJldHVybiB0eXBlXG5cbiAgbGV0IHN0YXRzXG4gIHRyeSB7XG4gICAgc3RhdHMgPSBhd2FpdCBmcy5sc3RhdChzcmNwYXRoKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJ2ZpbGUnXG4gIH1cblxuICByZXR1cm4gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbn1cblxuZnVuY3Rpb24gc3ltbGlua1R5cGVTeW5jIChzcmNwYXRoLCB0eXBlKSB7XG4gIGlmICh0eXBlKSByZXR1cm4gdHlwZVxuXG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gZnMubHN0YXRTeW5jKHNyY3BhdGgpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnZmlsZSdcbiAgfVxuICByZXR1cm4gKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpID8gJ2RpcicgOiAnZmlsZSdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN5bWxpbmtUeXBlOiB1KHN5bWxpbmtUeXBlKSxcbiAgc3ltbGlua1R5cGVTeW5jXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IGZzID0gcmVxdWlyZSgnLi4vZnMnKVxuXG5jb25zdCB7IG1rZGlycywgbWtkaXJzU3luYyB9ID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcblxuY29uc3QgeyBzeW1saW5rUGF0aHMsIHN5bWxpbmtQYXRoc1N5bmMgfSA9IHJlcXVpcmUoJy4vc3ltbGluay1wYXRocycpXG5jb25zdCB7IHN5bWxpbmtUeXBlLCBzeW1saW5rVHlwZVN5bmMgfSA9IHJlcXVpcmUoJy4vc3ltbGluay10eXBlJylcblxuY29uc3QgeyBwYXRoRXhpc3RzIH0gPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpXG5cbmNvbnN0IHsgYXJlSWRlbnRpY2FsIH0gPSByZXF1aXJlKCcuLi91dGlsL3N0YXQnKVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVTeW1saW5rIChzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKSB7XG4gIGxldCBzdGF0c1xuICB0cnkge1xuICAgIHN0YXRzID0gYXdhaXQgZnMubHN0YXQoZHN0cGF0aClcbiAgfSBjYXRjaCB7IH1cblxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIC8vIFdoZW4gc3JjcGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBpdCByZWxhdGl2ZSB0byBkc3RwYXRoJ3MgZGlyZWN0b3J5XG4gICAgLy8gKHN0YW5kYXJkIHN5bWxpbmsgYmVoYXZpb3IpIG9yIGZhbGwgYmFjayB0byBjd2QgaWYgdGhhdCBkb2Vzbid0IGV4aXN0XG4gICAgbGV0IHNyY1N0YXRcbiAgICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgICBzcmNTdGF0ID0gYXdhaXQgZnMuc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkc3RkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgICAgIGNvbnN0IHJlbGF0aXZlVG9Ec3QgPSBwYXRoLmpvaW4oZHN0ZGlyLCBzcmNwYXRoKVxuICAgICAgdHJ5IHtcbiAgICAgICAgc3JjU3RhdCA9IGF3YWl0IGZzLnN0YXQocmVsYXRpdmVUb0RzdCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBzcmNTdGF0ID0gYXdhaXQgZnMuc3RhdChzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRzdFN0YXQgPSBhd2FpdCBmcy5zdGF0KGRzdHBhdGgsIHsgYmlnaW50OiB0cnVlIH0pXG4gICAgaWYgKGFyZUlkZW50aWNhbChzcmNTdGF0LCBkc3RTdGF0KSkgcmV0dXJuXG4gIH1cblxuICBjb25zdCByZWxhdGl2ZSA9IGF3YWl0IHN5bWxpbmtQYXRocyhzcmNwYXRoLCBkc3RwYXRoKVxuICBzcmNwYXRoID0gcmVsYXRpdmUudG9Ec3RcbiAgY29uc3QgdG9UeXBlID0gYXdhaXQgc3ltbGlua1R5cGUocmVsYXRpdmUudG9Dd2QsIHR5cGUpXG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShkc3RwYXRoKVxuXG4gIGlmICghKGF3YWl0IHBhdGhFeGlzdHMoZGlyKSkpIHtcbiAgICBhd2FpdCBta2RpcnMoZGlyKVxuICB9XG5cbiAgcmV0dXJuIGZzLnN5bWxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgdG9UeXBlKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTeW1saW5rU3luYyAoc3JjcGF0aCwgZHN0cGF0aCwgdHlwZSkge1xuICBsZXQgc3RhdHNcbiAgdHJ5IHtcbiAgICBzdGF0cyA9IGZzLmxzdGF0U3luYyhkc3RwYXRoKVxuICB9IGNhdGNoIHsgfVxuICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIC8vIFdoZW4gc3JjcGF0aCBpcyByZWxhdGl2ZSwgcmVzb2x2ZSBpdCByZWxhdGl2ZSB0byBkc3RwYXRoJ3MgZGlyZWN0b3J5XG4gICAgLy8gKHN0YW5kYXJkIHN5bWxpbmsgYmVoYXZpb3IpIG9yIGZhbGwgYmFjayB0byBjd2QgaWYgdGhhdCBkb2Vzbid0IGV4aXN0XG4gICAgbGV0IHNyY1N0YXRcbiAgICBpZiAocGF0aC5pc0Fic29sdXRlKHNyY3BhdGgpKSB7XG4gICAgICBzcmNTdGF0ID0gZnMuc3RhdFN5bmMoc3JjcGF0aCwgeyBiaWdpbnQ6IHRydWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZHN0ZGlyID0gcGF0aC5kaXJuYW1lKGRzdHBhdGgpXG4gICAgICBjb25zdCByZWxhdGl2ZVRvRHN0ID0gcGF0aC5qb2luKGRzdGRpciwgc3JjcGF0aClcbiAgICAgIHRyeSB7XG4gICAgICAgIHNyY1N0YXQgPSBmcy5zdGF0U3luYyhyZWxhdGl2ZVRvRHN0LCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHNyY1N0YXQgPSBmcy5zdGF0U3luYyhzcmNwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRzdFN0YXQgPSBmcy5zdGF0U3luYyhkc3RwYXRoLCB7IGJpZ2ludDogdHJ1ZSB9KVxuICAgIGlmIChhcmVJZGVudGljYWwoc3JjU3RhdCwgZHN0U3RhdCkpIHJldHVyblxuICB9XG5cbiAgY29uc3QgcmVsYXRpdmUgPSBzeW1saW5rUGF0aHNTeW5jKHNyY3BhdGgsIGRzdHBhdGgpXG4gIHNyY3BhdGggPSByZWxhdGl2ZS50b0RzdFxuICB0eXBlID0gc3ltbGlua1R5cGVTeW5jKHJlbGF0aXZlLnRvQ3dkLCB0eXBlKVxuICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0cGF0aClcbiAgY29uc3QgZXhpc3RzID0gZnMuZXhpc3RzU3luYyhkaXIpXG4gIGlmIChleGlzdHMpIHJldHVybiBmcy5zeW1saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKVxuICBta2RpcnNTeW5jKGRpcilcbiAgcmV0dXJuIGZzLnN5bWxpbmtTeW5jKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjcmVhdGVTeW1saW5rOiB1KGNyZWF0ZVN5bWxpbmspLFxuICBjcmVhdGVTeW1saW5rU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBjcmVhdGVGaWxlLCBjcmVhdGVGaWxlU3luYyB9ID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IHsgY3JlYXRlTGluaywgY3JlYXRlTGlua1N5bmMgfSA9IHJlcXVpcmUoJy4vbGluaycpXG5jb25zdCB7IGNyZWF0ZVN5bWxpbmssIGNyZWF0ZVN5bWxpbmtTeW5jIH0gPSByZXF1aXJlKCcuL3N5bWxpbmsnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZmlsZVxuICBjcmVhdGVGaWxlLFxuICBjcmVhdGVGaWxlU3luYyxcbiAgZW5zdXJlRmlsZTogY3JlYXRlRmlsZSxcbiAgZW5zdXJlRmlsZVN5bmM6IGNyZWF0ZUZpbGVTeW5jLFxuICAvLyBsaW5rXG4gIGNyZWF0ZUxpbmssXG4gIGNyZWF0ZUxpbmtTeW5jLFxuICBlbnN1cmVMaW5rOiBjcmVhdGVMaW5rLFxuICBlbnN1cmVMaW5rU3luYzogY3JlYXRlTGlua1N5bmMsXG4gIC8vIHN5bWxpbmtcbiAgY3JlYXRlU3ltbGluayxcbiAgY3JlYXRlU3ltbGlua1N5bmMsXG4gIGVuc3VyZVN5bWxpbms6IGNyZWF0ZVN5bWxpbmssXG4gIGVuc3VyZVN5bWxpbmtTeW5jOiBjcmVhdGVTeW1saW5rU3luY1xufVxuIiwKICAgICJmdW5jdGlvbiBzdHJpbmdpZnkgKG9iaiwgeyBFT0wgPSAnXFxuJywgZmluYWxFT0wgPSB0cnVlLCByZXBsYWNlciA9IG51bGwsIHNwYWNlcyB9ID0ge30pIHtcbiAgY29uc3QgRU9GID0gZmluYWxFT0wgPyBFT0wgOiAnJ1xuICBjb25zdCBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmosIHJlcGxhY2VyLCBzcGFjZXMpXG5cbiAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ29udmVydGluZyAke3R5cGVvZiBvYmp9IHZhbHVlIHRvIEpTT04gaXMgbm90IHN1cHBvcnRlZGApXG4gIH1cblxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcbi9nLCBFT0wpICsgRU9GXG59XG5cbmZ1bmN0aW9uIHN0cmlwQm9tIChjb250ZW50KSB7XG4gIC8vIHdlIGRvIHRoaXMgYmVjYXVzZSBKU09OLnBhcnNlIHdvdWxkIGNvbnZlcnQgaXQgdG8gYSB1dGY4IHN0cmluZyBpZiBlbmNvZGluZyB3YXNuJ3Qgc3BlY2lmaWVkXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkpIGNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCd1dGY4JylcbiAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSgvXlxcdUZFRkYvLCAnJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfVxuIiwKICAgICJsZXQgX2ZzXG50cnkge1xuICBfZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG59IGNhdGNoIChfKSB7XG4gIF9mcyA9IHJlcXVpcmUoJ2ZzJylcbn1cbmNvbnN0IHVuaXZlcnNhbGlmeSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpXG5jb25zdCB7IHN0cmluZ2lmeSwgc3RyaXBCb20gfSA9IHJlcXVpcmUoJy4vdXRpbHMnKVxuXG5hc3luYyBmdW5jdGlvbiBfcmVhZEZpbGUgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIGxldCBkYXRhID0gYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy5yZWFkRmlsZSkoZmlsZSwgb3B0aW9ucylcblxuICBkYXRhID0gc3RyaXBCb20oZGF0YSlcblxuICBsZXQgb2JqXG4gIHRyeSB7XG4gICAgb2JqID0gSlNPTi5wYXJzZShkYXRhLCBvcHRpb25zID8gb3B0aW9ucy5yZXZpdmVyIDogbnVsbClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgICBlcnIubWVzc2FnZSA9IGAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfWBcbiAgICAgIHRocm93IGVyclxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuY29uc3QgcmVhZEZpbGUgPSB1bml2ZXJzYWxpZnkuZnJvbVByb21pc2UoX3JlYWRGaWxlKVxuXG5mdW5jdGlvbiByZWFkRmlsZVN5bmMgKGZpbGUsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHNob3VsZFRocm93ID0gJ3Rocm93cycgaW4gb3B0aW9ucyA/IG9wdGlvbnMudGhyb3dzIDogdHJ1ZVxuXG4gIHRyeSB7XG4gICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZSwgb3B0aW9ucylcbiAgICBjb250ZW50ID0gc3RyaXBCb20oY29udGVudClcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50LCBvcHRpb25zLnJldml2ZXIpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChzaG91bGRUaHJvdykge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgJHtmaWxlfTogJHtlcnIubWVzc2FnZX1gXG4gICAgICB0aHJvdyBlcnJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gX3dyaXRlRmlsZSAoZmlsZSwgb2JqLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3QgZnMgPSBvcHRpb25zLmZzIHx8IF9mc1xuXG4gIGNvbnN0IHN0ciA9IHN0cmluZ2lmeShvYmosIG9wdGlvbnMpXG5cbiAgYXdhaXQgdW5pdmVyc2FsaWZ5LmZyb21DYWxsYmFjayhmcy53cml0ZUZpbGUpKGZpbGUsIHN0ciwgb3B0aW9ucylcbn1cblxuY29uc3Qgd3JpdGVGaWxlID0gdW5pdmVyc2FsaWZ5LmZyb21Qcm9taXNlKF93cml0ZUZpbGUpXG5cbmZ1bmN0aW9uIHdyaXRlRmlsZVN5bmMgKGZpbGUsIG9iaiwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGZzID0gb3B0aW9ucy5mcyB8fCBfZnNcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkob2JqLCBvcHRpb25zKVxuICAvLyBub3Qgc3VyZSBpZiBmcy53cml0ZUZpbGVTeW5jIHJldHVybnMgYW55dGhpbmcsIGJ1dCBqdXN0IGluIGNhc2VcbiAgcmV0dXJuIGZzLndyaXRlRmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG4vLyBOT1RFOiBkbyBub3QgY2hhbmdlIHRoaXMgZXhwb3J0IGZvcm1hdDsgcmVxdWlyZWQgZm9yIEVTTSBjb21wYXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtanNvbmZpbGUvcHVsbC8xNjIgZm9yIGRldGFpbHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICByZWFkRmlsZSxcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGUsXG4gIHdyaXRlRmlsZVN5bmNcbn1cbiIsCiAgICAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnanNvbmZpbGUnKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8ganNvbmZpbGUgZXhwb3J0c1xuICByZWFkSnNvbjoganNvbkZpbGUucmVhZEZpbGUsXG4gIHJlYWRKc29uU3luYzoganNvbkZpbGUucmVhZEZpbGVTeW5jLFxuICB3cml0ZUpzb246IGpzb25GaWxlLndyaXRlRmlsZSxcbiAgd3JpdGVKc29uU3luYzoganNvbkZpbGUud3JpdGVGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5jb25zdCBmcyA9IHJlcXVpcmUoJy4uL2ZzJylcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcbmNvbnN0IG1rZGlyID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHBhdGhFeGlzdHMgPSByZXF1aXJlKCcuLi9wYXRoLWV4aXN0cycpLnBhdGhFeGlzdHNcblxuYXN5bmMgZnVuY3Rpb24gb3V0cHV0RmlsZSAoZmlsZSwgZGF0YSwgZW5jb2RpbmcgPSAndXRmLTgnKSB7XG4gIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShmaWxlKVxuXG4gIGlmICghKGF3YWl0IHBhdGhFeGlzdHMoZGlyKSkpIHtcbiAgICBhd2FpdCBta2Rpci5ta2RpcnMoZGlyKVxuICB9XG5cbiAgcmV0dXJuIGZzLndyaXRlRmlsZShmaWxlLCBkYXRhLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gb3V0cHV0RmlsZVN5bmMgKGZpbGUsIC4uLmFyZ3MpIHtcbiAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGUpXG4gIGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG4gICAgbWtkaXIubWtkaXJzU3luYyhkaXIpXG4gIH1cblxuICBmcy53cml0ZUZpbGVTeW5jKGZpbGUsIC4uLmFyZ3MpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBvdXRwdXRGaWxlOiB1KG91dHB1dEZpbGUpLFxuICBvdXRwdXRGaWxlU3luY1xufVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZSB9ID0gcmVxdWlyZSgnLi4vb3V0cHV0LWZpbGUnKVxuXG5hc3luYyBmdW5jdGlvbiBvdXRwdXRKc29uIChmaWxlLCBkYXRhLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgYXdhaXQgb3V0cHV0RmlsZShmaWxlLCBzdHIsIG9wdGlvbnMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3V0cHV0SnNvblxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ2pzb25maWxlL3V0aWxzJylcbmNvbnN0IHsgb3V0cHV0RmlsZVN5bmMgfSA9IHJlcXVpcmUoJy4uL291dHB1dC1maWxlJylcblxuZnVuY3Rpb24gb3V0cHV0SnNvblN5bmMgKGZpbGUsIGRhdGEsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnMpXG5cbiAgb3V0cHV0RmlsZVN5bmMoZmlsZSwgc3RyLCBvcHRpb25zKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG91dHB1dEpzb25TeW5jXG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1ID0gcmVxdWlyZSgndW5pdmVyc2FsaWZ5JykuZnJvbVByb21pc2VcbmNvbnN0IGpzb25GaWxlID0gcmVxdWlyZSgnLi9qc29uZmlsZScpXG5cbmpzb25GaWxlLm91dHB1dEpzb24gPSB1KHJlcXVpcmUoJy4vb3V0cHV0LWpzb24nKSlcbmpzb25GaWxlLm91dHB1dEpzb25TeW5jID0gcmVxdWlyZSgnLi9vdXRwdXQtanNvbi1zeW5jJylcbi8vIGFsaWFzZXNcbmpzb25GaWxlLm91dHB1dEpTT04gPSBqc29uRmlsZS5vdXRwdXRKc29uXG5qc29uRmlsZS5vdXRwdXRKU09OU3luYyA9IGpzb25GaWxlLm91dHB1dEpzb25TeW5jXG5qc29uRmlsZS53cml0ZUpTT04gPSBqc29uRmlsZS53cml0ZUpzb25cbmpzb25GaWxlLndyaXRlSlNPTlN5bmMgPSBqc29uRmlsZS53cml0ZUpzb25TeW5jXG5qc29uRmlsZS5yZWFkSlNPTiA9IGpzb25GaWxlLnJlYWRKc29uXG5qc29uRmlsZS5yZWFkSlNPTlN5bmMgPSBqc29uRmlsZS5yZWFkSnNvblN5bmNcblxubW9kdWxlLmV4cG9ydHMgPSBqc29uRmlsZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCcuLi9mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCB7IGNvcHkgfSA9IHJlcXVpcmUoJy4uL2NvcHknKVxuY29uc3QgeyByZW1vdmUgfSA9IHJlcXVpcmUoJy4uL3JlbW92ZScpXG5jb25zdCB7IG1rZGlycCB9ID0gcmVxdWlyZSgnLi4vbWtkaXJzJylcbmNvbnN0IHsgcGF0aEV4aXN0cyB9ID0gcmVxdWlyZSgnLi4vcGF0aC1leGlzdHMnKVxuY29uc3Qgc3RhdCA9IHJlcXVpcmUoJy4uL3V0aWwvc3RhdCcpXG5cbmFzeW5jIGZ1bmN0aW9uIG1vdmUgKHNyYywgZGVzdCwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdHMub3ZlcndyaXRlIHx8IG9wdHMuY2xvYmJlciB8fCBmYWxzZVxuXG4gIGNvbnN0IHsgc3JjU3RhdCwgaXNDaGFuZ2luZ0Nhc2UgPSBmYWxzZSB9ID0gYXdhaXQgc3RhdC5jaGVja1BhdGhzKHNyYywgZGVzdCwgJ21vdmUnLCBvcHRzKVxuXG4gIGF3YWl0IHN0YXQuY2hlY2tQYXJlbnRQYXRocyhzcmMsIHNyY1N0YXQsIGRlc3QsICdtb3ZlJylcblxuICAvLyBJZiB0aGUgcGFyZW50IG9mIGRlc3QgaXMgbm90IHJvb3QsIG1ha2Ugc3VyZSBpdCBleGlzdHMgYmVmb3JlIHByb2NlZWRpbmdcbiAgY29uc3QgZGVzdFBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBjb25zdCBwYXJzZWRQYXJlbnRQYXRoID0gcGF0aC5wYXJzZShkZXN0UGFyZW50KVxuICBpZiAocGFyc2VkUGFyZW50UGF0aC5yb290ICE9PSBkZXN0UGFyZW50KSB7XG4gICAgYXdhaXQgbWtkaXJwKGRlc3RQYXJlbnQpXG4gIH1cblxuICByZXR1cm4gZG9SZW5hbWUoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKVxufVxuXG5hc3luYyBmdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKSB7XG4gIGlmICghaXNDaGFuZ2luZ0Nhc2UpIHtcbiAgICBpZiAob3ZlcndyaXRlKSB7XG4gICAgICBhd2FpdCByZW1vdmUoZGVzdClcbiAgICB9IGVsc2UgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZGVzdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVzdCBhbHJlYWR5IGV4aXN0cy4nKVxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVHJ5IHcvIHJlbmFtZSBmaXJzdCwgYW5kIHRyeSBjb3B5ICsgcmVtb3ZlIGlmIEVYREVWXG4gICAgYXdhaXQgZnMucmVuYW1lKHNyYywgZGVzdClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5jb2RlICE9PSAnRVhERVYnKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgYXdhaXQgbW92ZUFjcm9zc0RldmljZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtb3ZlQWNyb3NzRGV2aWNlIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICBjb25zdCBvcHRzID0ge1xuICAgIG92ZXJ3cml0ZSxcbiAgICBlcnJvck9uRXhpc3Q6IHRydWUsXG4gICAgcHJlc2VydmVUaW1lc3RhbXBzOiB0cnVlXG4gIH1cblxuICBhd2FpdCBjb3B5KHNyYywgZGVzdCwgb3B0cylcbiAgcmV0dXJuIHJlbW92ZShzcmMpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbW92ZVxuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgZnMgPSByZXF1aXJlKCdncmFjZWZ1bC1mcycpXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5jb25zdCBjb3B5U3luYyA9IHJlcXVpcmUoJy4uL2NvcHknKS5jb3B5U3luY1xuY29uc3QgcmVtb3ZlU3luYyA9IHJlcXVpcmUoJy4uL3JlbW92ZScpLnJlbW92ZVN5bmNcbmNvbnN0IG1rZGlycFN5bmMgPSByZXF1aXJlKCcuLi9ta2RpcnMnKS5ta2RpcnBTeW5jXG5jb25zdCBzdGF0ID0gcmVxdWlyZSgnLi4vdXRpbC9zdGF0JylcblxuZnVuY3Rpb24gbW92ZVN5bmMgKHNyYywgZGVzdCwgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICBjb25zdCBvdmVyd3JpdGUgPSBvcHRzLm92ZXJ3cml0ZSB8fCBvcHRzLmNsb2JiZXIgfHwgZmFsc2VcblxuICBjb25zdCB7IHNyY1N0YXQsIGlzQ2hhbmdpbmdDYXNlID0gZmFsc2UgfSA9IHN0YXQuY2hlY2tQYXRoc1N5bmMoc3JjLCBkZXN0LCAnbW92ZScsIG9wdHMpXG4gIHN0YXQuY2hlY2tQYXJlbnRQYXRoc1N5bmMoc3JjLCBzcmNTdGF0LCBkZXN0LCAnbW92ZScpXG4gIGlmICghaXNQYXJlbnRSb290KGRlc3QpKSBta2RpcnBTeW5jKHBhdGguZGlybmFtZShkZXN0KSlcbiAgcmV0dXJuIGRvUmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlLCBpc0NoYW5naW5nQ2FzZSlcbn1cblxuZnVuY3Rpb24gaXNQYXJlbnRSb290IChkZXN0KSB7XG4gIGNvbnN0IHBhcmVudCA9IHBhdGguZGlybmFtZShkZXN0KVxuICBjb25zdCBwYXJzZWRQYXRoID0gcGF0aC5wYXJzZShwYXJlbnQpXG4gIHJldHVybiBwYXJzZWRQYXRoLnJvb3QgPT09IHBhcmVudFxufVxuXG5mdW5jdGlvbiBkb1JlbmFtZSAoc3JjLCBkZXN0LCBvdmVyd3JpdGUsIGlzQ2hhbmdpbmdDYXNlKSB7XG4gIGlmIChpc0NoYW5naW5nQ2FzZSkgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbiAgaWYgKG92ZXJ3cml0ZSkge1xuICAgIHJlbW92ZVN5bmMoZGVzdClcbiAgICByZXR1cm4gcmVuYW1lKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG4gIGlmIChmcy5leGlzdHNTeW5jKGRlc3QpKSB0aHJvdyBuZXcgRXJyb3IoJ2Rlc3QgYWxyZWFkeSBleGlzdHMuJylcbiAgcmV0dXJuIHJlbmFtZShzcmMsIGRlc3QsIG92ZXJ3cml0ZSlcbn1cblxuZnVuY3Rpb24gcmVuYW1lIChzcmMsIGRlc3QsIG92ZXJ3cml0ZSkge1xuICB0cnkge1xuICAgIGZzLnJlbmFtZVN5bmMoc3JjLCBkZXN0KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgIT09ICdFWERFVicpIHRocm93IGVyclxuICAgIHJldHVybiBtb3ZlQWNyb3NzRGV2aWNlKHNyYywgZGVzdCwgb3ZlcndyaXRlKVxuICB9XG59XG5cbmZ1bmN0aW9uIG1vdmVBY3Jvc3NEZXZpY2UgKHNyYywgZGVzdCwgb3ZlcndyaXRlKSB7XG4gIGNvbnN0IG9wdHMgPSB7XG4gICAgb3ZlcndyaXRlLFxuICAgIGVycm9yT25FeGlzdDogdHJ1ZSxcbiAgICBwcmVzZXJ2ZVRpbWVzdGFtcHM6IHRydWVcbiAgfVxuICBjb3B5U3luYyhzcmMsIGRlc3QsIG9wdHMpXG4gIHJldHVybiByZW1vdmVTeW5jKHNyYylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtb3ZlU3luY1xuIiwKICAgICIndXNlIHN0cmljdCdcblxuY29uc3QgdSA9IHJlcXVpcmUoJ3VuaXZlcnNhbGlmeScpLmZyb21Qcm9taXNlXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW92ZTogdShyZXF1aXJlKCcuL21vdmUnKSksXG4gIG1vdmVTeW5jOiByZXF1aXJlKCcuL21vdmUtc3luYycpXG59XG4iLAogICAgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gRXhwb3J0IHByb21pc2VpZmllZCBncmFjZWZ1bC1mczpcbiAgLi4ucmVxdWlyZSgnLi9mcycpLFxuICAvLyBFeHBvcnQgZXh0cmEgbWV0aG9kczpcbiAgLi4ucmVxdWlyZSgnLi9jb3B5JyksXG4gIC4uLnJlcXVpcmUoJy4vZW1wdHknKSxcbiAgLi4ucmVxdWlyZSgnLi9lbnN1cmUnKSxcbiAgLi4ucmVxdWlyZSgnLi9qc29uJyksXG4gIC4uLnJlcXVpcmUoJy4vbWtkaXJzJyksXG4gIC4uLnJlcXVpcmUoJy4vbW92ZScpLFxuICAuLi5yZXF1aXJlKCcuL291dHB1dC1maWxlJyksXG4gIC4uLnJlcXVpcmUoJy4vcGF0aC1leGlzdHMnKSxcbiAgLi4ucmVxdWlyZSgnLi9yZW1vdmUnKVxufVxuIiwKICAgICJpbXBvcnQgVE9NTCBmcm9tIFwiQGlhcm5hL3RvbWxcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBjd2QsIGVudiB9IGZyb20gXCJub2RlOnByb2Nlc3NcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB0eXBlIHsgSW5jb21pbmdNZXNzYWdlLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJub2RlOmh0dHBcIjtcbmltcG9ydCB7IHZlcnNpb24gYXMgdml0ZVZlcnNpb24gfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHsgcmVhZEZpbGUsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBhZGFwdGVycyB9IGZyb20gXCIuL2FkYXB0ZXJzL2luZGV4LnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VWaXRlUGx1Z2luTWlsa2lvKG9wdGlvbnM/OiB7XG4gICAgb3V0cHV0Rm9ybWF0PzogXCJlc21cIiB8IFwiY2pzXCI7XG59KTogUGx1Z2luT3B0aW9uIHtcbiAgICBsZXQgb3V0RGlyID0gXCJkaXN0XCI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBcInZpdGUtcGx1Z2luLW1pbGtpb1wiLFxuICAgICAgICBhc3luYyBjb25maWd1cmVTZXJ2ZXIoc2VydmVyKSB7XG4gICAgICAgICAgICBsZXQgbWlsa2lvUHJvbWlzZTogUHJvbWlzZTxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IGdldE1pbGtpbyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW1pbGtpb1Byb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbWlsa2lvUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHAgPSBhd2FpdCBzZXJ2ZXIuc3NyTG9hZE1vZHVsZShcImluZGV4LnRzXCIsIHsgZml4U3RhY2t0cmFjZTogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgYXBwLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDogTnVtYmVyKGVudi5NSUxLSU9fUE9SVCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2ZWxvcDogQm9vbGVhbihlbnYuQ09PS0JPT0tfQkFTRV9VUkwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoRW52OiAoa2V5OiBzdHJpbmcpID0+IGVudltrZXldID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbWlsa2lvUHJvbWlzZTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGVudk1vZGUgPSBlbnYuVklURV9NT0RFID8/IChlbnYuQ09PS0JPT0tfREVWRUxPUCA9PT0gXCJFTkFCTEVcIiA/IFwiZGV2ZWxvcG1lbnRcIiA6IFwicHJvZHVjdGlvblwiKTtcblxuICAgICAgICAgICAgLy8gQ2FjaGUgZm9yIHBhdGhBcnJheSB0byBhdm9pZCByZXBlYXRlZCBzcGxpdCgpIG9uIHNhbWUgcGF0aG5hbWVcbiAgICAgICAgICAgIGxldCBsYXN0UGF0aG5hbWUgPSBcIlwiO1xuICAgICAgICAgICAgbGV0IGxhc3RQYXRoQXJyYXk6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgICAgIHNlcnZlci5taWRkbGV3YXJlcy51c2UoYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ09SUzogbWlsa2lvIGhhbmRsZXMgQ09SUyBpdHNlbGYgKHZpdGUgYnVpbHQtaW4gQ09SUyBpcyBkaXNhYmxlZCBpbiBjb25maWcoKSlcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW4gPSByZXEuaGVhZGVycy5vcmlnaW47XG4gICAgICAgICAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luXCIsIG9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJWYXJ5XCIsIFwiT3JpZ2luXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kc1wiLCBcIkdFVCxQT1NULFBVVCxERUxFVEUsT1BUSU9OUyxIRUFEXCIpO1xuICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXCIsIFwiQ29udGVudC1UeXBlLEFjY2VwdCxBdXRob3JpemF0aW9uLE1pbGtpby1UaW1lc3RhbXAsTWlsa2lvLVNpZ25hdHVyZSxNaWxraW8tRXhlY3V0ZS1JZFwiKTtcbiAgICAgICAgICAgICAgICByZXMuc2V0SGVhZGVyKFwiQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHNcIiwgXCJ0cnVlXCIpO1xuICAgICAgICAgICAgICAgIGlmIChyZXEubWV0aG9kID09PSBcIk9QVElPTlNcIikge1xuICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVIZWFkKDIwNCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaWxraW8gPSBhd2FpdCBnZXRNaWxraW8oKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVhZCBib2R5IGNodW5rcy4gQWNjdW11bGF0ZSBldmVyeSBjaHVuayB1bmNvbmRpdGlvbmFsbHk6XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgZW1pdHMgfjY0S0IgcGVyIFwiZGF0YVwiIGV2ZW50LCBhbmQgYW55IHNtYXJ0ZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gYnVmZmVyaW5nIHNjaGVtZSBoZXJlIHByZXZpb3VzbHkgZHJvcHBlZCB0aGUgdGhpcmQgY2h1bmtcbiAgICAgICAgICAgICAgICAgICAgLy8gb2YgbGFyZ2UgcmVxdWVzdCBib2RpZXMgKD4xMjhLQiksIGNvcnJ1cHRpbmcgSlNPTiBwYXJhbXMuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IE1BWF9CT0RZX1NJWkUgPSAxMCAqIDEwMjQgKiAxMDI0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5Q2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keVNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYm9keVRvb0xhcmdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbihcImRhdGFcIiwgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5VG9vTGFyZ2UpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlTaXplICs9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5U2l6ZSA+IE1BWF9CT0RZX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5VG9vTGFyZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoSlNPTi5zdHJpbmdpZnkoeyBzdWNjZXNzOiBmYWxzZSwgY29kZTogXCJSRVFVRVNUX1RPT19MQVJHRVwiLCByZWplY3Q6IHsgbWF4Qm9keVNpemU6IE1BWF9CT0RZX1NJWkUgfSwgZXhlY3V0ZUlkOiBcIlwiIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5Q2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5VG9vTGFyZ2UpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2QgPz8gXCJHRVRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IFVpbnQ4QXJyYXkgfCBudWxsID0gYm9keUNodW5rcy5sZW5ndGggPiAwID8gQnVmZmVyLmNvbmNhdChib2R5Q2h1bmtzKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5VGV4dCA9IGJvZHkgPyBCdWZmZXIuZnJvbShib2R5KS50b1N0cmluZyhcInV0Zi04XCIpIDogXCJcIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVpbGQgZnVsbCBVUkwgZm9yIHN0YW5kYXJkIFJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcVVybCA9IHJlcS51cmwgPz8gXCIvXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm90b2NvbCA9IChyZXEgYXMgYW55KS5lbmNyeXB0ZWQgPyBcImh0dHBzXCIgOiBcImh0dHBcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvc3QgPSByZXEuaGVhZGVycy5ob3N0ID8/IFwibG9jYWxob3N0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsVXJsID0gYCR7cHJvdG9jb2x9Oi8vJHtob3N0fSR7cmVxVXJsfWA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1aWxkIHN0YW5kYXJkIEhlYWRlcnMgZnJvbSBOb2RlLmpzIGluY29taW5nIGhlYWRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVxLmhlYWRlcnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWUpIGhlYWRlcnMuYXBwZW5kKGtleSwgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgQWJvcnRDb250cm9sbGVyIGZvciBzdHJlYW0gcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RyZWFtID0gcmVxLmhlYWRlcnMuYWNjZXB0Py5zdGFydHNXaXRoKFwidGV4dC9ldmVudC1zdHJlYW1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWduYWwgPSBpc1N0cmVhbSA/ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLm9uKFwiY2xvc2VcIiwgKCkgPT4geyBhYy5hYm9ydCgpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWMuc2lnbmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkoKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc3RydWN0IHN0YW5kYXJkIFJlcXVlc3Qgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoZnVsbFVybCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IG1ldGhvZCAhPT0gXCJHRVRcIiAmJiBtZXRob2QgIT09IFwiSEVBRFwiID8gYm9keSBhcyBCb2R5SW5pdCB8IG51bGwgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0dGFjaCBwcmUtcmVhZCBkYXRhIGZvciBGYXN0IFBhdGggb3B0aW1pemF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxSW5kZXggPSByZXFVcmwuaW5kZXhPZihcIj9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRobmFtZSA9IHFJbmRleCA+PSAwID8gcmVxVXJsLnN1YnN0cmluZygwLCBxSW5kZXgpIDogcmVxVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QgYXMgYW55KS5fX2JvZHlUZXh0ID0gYm9keVRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCBhcyBhbnkpLl9fcGF0aG5hbWUgPSBwYXRobmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoQXJyYXk6IHN0cmluZ1tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGhuYW1lID09PSBsYXN0UGF0aG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoQXJyYXkgPSBsYXN0UGF0aEFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoQXJyYXkgPSBwYXRobmFtZS5sZW5ndGggPiAxID8gcGF0aG5hbWUuc3Vic3RyaW5nKDEpLnNwbGl0KFwiL1wiKSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RQYXRobmFtZSA9IHBhdGhuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RQYXRoQXJyYXkgPSBwYXRoQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCBhcyBhbnkpLl9fcGF0aEFycmF5ID0gcGF0aEFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QgYXMgYW55KS5fX29yaWdpbiA9IHJlcS5oZWFkZXJzLm9yaWdpbiA/PyBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QgYXMgYW55KS5fX2lzQWN0aW9uID0gIWlzU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBtaWxraW8ubGlzdGVuZXIuZmV0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52OiBlbnYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52TW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdSZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuX19yYXdSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMud3JpdGVIZWFkKHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc0JvZHkgPSByZXNwb25zZS5ib2R5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc0JvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZW5kKEJ1ZmZlci5mcm9tKHJlc0JvZHksICd1dGYtOCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNCb2R5IGluc3RhbmNlb2YgVWludDhBcnJheSB8fCBCdWZmZXIuaXNCdWZmZXIocmVzQm9keSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQocmVzQm9keSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzQm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZW5kKEJ1ZmZlci5mcm9tKHJlc0JvZHkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNCb2R5IGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzQm9keS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiOiBBcnJheUJ1ZmZlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoQnVmZmVyLmZyb20oYWIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc0JvZHkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZChyZXNCb2R5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YW5kYXJkIFJlc3BvbnNlIG9iamVjdCBwYXRoIChzdHJlYW0sIE9QVElPTlMsIGV0Yy4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc0hlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXNwb25zZS5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHJlc0hlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHJlc0hlYWRlcnNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIGV4aXN0aW5nLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgcmVzSGVhZGVyc1trZXldID0gW2V4aXN0aW5nLCB2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0hlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZUhlYWQocmVzcG9uc2Uuc3RhdHVzLCByZXNIZWFkZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCAmJiByZXEubWV0aG9kICE9PSBcIkhFQURcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB1bXAgPSAoKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkKCkudGhlbigoeyBkb25lLCB2YWx1ZSB9OiB7IGRvbmU6IGJvb2xlYW47IHZhbHVlPzogVWludDhBcnJheSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSB7IHJlcy5lbmQoKTsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy53cml0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdW1wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdW1wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuZW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzLmhlYWRlcnNTZW50KSByZXMud3JpdGVIZWFkKDUwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVuZChcIkludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpIHNlcnZlci5zc3JGaXhTdGFja3RyYWNlKGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhc3luYyBjb25maWcoY29uZmlnLCB7IGNvbW1hbmQgfSkge1xuICAgICAgICAgICAgLy8gRGlzYWJsZSBWaXRlJ3MgYnVpbHQtaW4gQ09SUywgbWlsa2lvIGhhbmRsZXMgQ09SUyBpdHNlbGZcbiAgICAgICAgICAgIGNvbmZpZy5zZXJ2ZXIhLmNvcnMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGNvbW1hbmQgIT09IFwiYnVpbGRcIikgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdCA9IGF3YWl0IGdldENvb2tib29rVG9tbFByb2plY3QoKTtcblxuICAgICAgICAgICAgLy8gY29uZmlnLmJ1aWxkXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5idWlsZCkgY29uZmlnLmJ1aWxkID0ge307XG4gICAgICAgICAgICBjb25maWcuYnVpbGQuc3NyID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5idWlsZC5zb3VyY2VtYXAgPSBcImlubGluZVwiO1xuICAgICAgICAgICAgY29uZmlnLmJ1aWxkLnRhcmdldCA9IFwiZXMyMDI0XCI7XG4gICAgICAgICAgICAvLyBjb25maWcuYnVpbGQucm9sbGRvd25PcHRpb25zIChWaXRlIDgrKSAvIGNvbmZpZy5idWlsZC5yb2xsdXBPcHRpb25zIChWaXRlIDw9NywgZGVwcmVjYXRlZCBhbGlhcyBpbiBWaXRlIDgpXG4gICAgICAgICAgICBjb25zdCBidW5kbGVyT3B0aW9uc0tleSA9IE51bWJlcih2aXRlVmVyc2lvbi5zcGxpdChcIi5cIilbMF0pID49IDggPyBcInJvbGxkb3duT3B0aW9uc1wiIDogXCJyb2xsdXBPcHRpb25zXCI7XG4gICAgICAgICAgICBjb25zdCBidW5kbGVyT3B0aW9uczogYW55ID0gKChjb25maWcuYnVpbGQgYXMgYW55KVtidW5kbGVyT3B0aW9uc0tleV0gPz89IHt9KTtcbiAgICAgICAgICAgIC8vIGJ1bmRsZXJPcHRpb25zLm91dHB1dFxuICAgICAgICAgICAgaWYgKCFidW5kbGVyT3B0aW9ucy5vdXRwdXQpIGJ1bmRsZXJPcHRpb25zLm91dHB1dCA9IHt9O1xuICAgICAgICAgICAgLy8gYnVuZGxlck9wdGlvbnMuaW5wdXRcbiAgICAgICAgICAgIGJ1bmRsZXJPcHRpb25zLmlucHV0ID0ge1xuICAgICAgICAgICAgICAgIGluZGV4OiBcIi5taWxraW8vcnVuLnRzXCIsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoIXByb2plY3QuYWRhcHRlcikge1xuICAgICAgICAgICAgICAgIGxldCBmb3JtYXQ6IFwiZXNtXCIgfCBcImNqc1wiID0gXCJlc21cIjtcbiAgICAgICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICBsZXQgbW9kZTogXCJjaHVua1wiIHwgXCJidW5kbGVcIiA9IFwiYnVuZGxlXCI7XG4gICAgICAgICAgICAgICAgaWYgKHByb2plY3QucnVudGltZSA9PT0gXCJub2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gb3B0aW9ucz8ub3V0cHV0Rm9ybWF0ID8/IFwiY2pzXCI7XG4gICAgICAgICAgICAgICAgICAgIG1vZGUgPSBcImNodW5rXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9qZWN0LnJ1bnRpbWUgPT09IFwiZGVub1wiIHx8IHByb2plY3QucnVudGltZSA9PT0gXCJidW5cIikge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSBvcHRpb25zPy5vdXRwdXRGb3JtYXQgPz8gXCJlc21cIjtcbiAgICAgICAgICAgICAgICAgICAgbW9kZSA9IFwiY2h1bmtcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKFwicnVudGltZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIEFycmF5LmlzQXJyYXkoYnVuZGxlck9wdGlvbnMub3V0cHV0KSA/IGJ1bmRsZXJPcHRpb25zLm91dHB1dCA6IFtidW5kbGVyT3B0aW9ucy5vdXRwdXRdKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5wcmVzZXJ2ZU1vZHVsZXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBmaW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhZGFwdGVyIG9mIGFkYXB0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGFwdGVyLm5hbWUgPT09IHByb2plY3QuYWRhcHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhZGFwdGVyLmFkYXB0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZXJPcHRpb25zLmlucHV0ID0gcmVzdWx0LmlucHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlck9wdGlvbnMub3V0cHV0ID0gcmVzdWx0Lm91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZmluZCkgdGhyb3cgbmV3IEVycm9yKGBhZGFwdGVyIFwiJHtwcm9qZWN0LmFkYXB0ZXJ9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNvbmZpZy5zZXJ2ZXJcbiAgICAgICAgICAgIGlmICghY29uZmlnLnNlcnZlcikgY29uZmlnLnNlcnZlciA9IHt9O1xuICAgICAgICAgICAgLy8gY29uZmlnLnNlcnZlci5taWRkbGV3YXJlTW9kZVxuICAgICAgICAgICAgY29uZmlnLnNlcnZlci5obXIgPSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gY29uZmlnLm9wdGltaXplRGVwc1xuICAgICAgICAgICAgaWYgKCFjb25maWcub3B0aW1pemVEZXBzKSBjb25maWcub3B0aW1pemVEZXBzID0ge307XG4gICAgICAgICAgICBjb25maWcub3B0aW1pemVEZXBzLm5vRGlzY292ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghY29uZmlnLm9wdGltaXplRGVwcy5leGNsdWRlKSBjb25maWcub3B0aW1pemVEZXBzLmV4Y2x1ZGUgPSBbXTtcbiAgICAgICAgICAgIGNvbmZpZy5vcHRpbWl6ZURlcHMuZXhjbHVkZS5wdXNoKFwiQGVsZWN0cmljLXNxbC9wZ2xpdGVcIik7XG5cbiAgICAgICAgICAgIC8vIGNvbmZpZy53b3JrZXJcbiAgICAgICAgICAgIGlmICghY29uZmlnLndvcmtlcikgY29uZmlnLndvcmtlciA9IHt9O1xuICAgICAgICAgICAgY29uZmlnLndvcmtlci5mb3JtYXQgPSBcImVzXCI7XG5cbiAgICAgICAgICAgIC8vIGNvbmZpZy5yZXNvbHZlXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5yZXNvbHZlKSBjb25maWcucmVzb2x2ZSA9IHt9O1xuICAgICAgICAgICAgLy8gY29uZmlnLnJlc29sdmUuYWxpYXNcbiAgICAgICAgICAgIGNvbmZpZy5yZXNvbHZlLmFsaWFzID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvbmZpZy5yZXNvbHZlLmFsaWFzLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gY29uZmlnLnNzclxuICAgICAgICAgICAgY29uZmlnLnNzciA9IHtcbiAgICAgICAgICAgICAgICBub0V4dGVybmFsOiBnZXROb0V4dGVybmFsKCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbmZpZ1Jlc29sdmVkKHJlc29sdmVkQ29uZmlnKSB7XG4gICAgICAgICAgICBvdXREaXIgPSByZXNvbHZlZENvbmZpZy5idWlsZC5vdXREaXIgfHwgXCJkaXN0XCI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYXN5bmMgd3JpdGVCdW5kbGUoKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oY3dkKCksIG91dERpciwgXCIuZ2l0a2VlcFwiKTtcbiAgICAgICAgICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgXCJcIiwgXCJ1dGYtOFwiKTtcbiAgICAgICAgfSxcbiAgICB9IHNhdGlzZmllcyBQbHVnaW5PcHRpb247XG59XG5cbmZ1bmN0aW9uIGdldE5vRXh0ZXJuYWwoKSB7XG4gICAgLy8gYnVuXG4gICAgY29uc3QgYnVuID0gW1wiYnVuXCIsIC9eYnVuOi9dO1xuXG4gICAgLy8gbm9kZV9tb2R1bGVzXG4gICAgbGV0IG5vZGVNb2R1bGVzID0gWy4uLihleGlzdHNTeW5jKGpvaW4oY3dkKCksIFwibm9kZV9tb2R1bGVzXCIpKSA/IHJlYWRkaXJTeW5jKGpvaW4oY3dkKCksIFwibm9kZV9tb2R1bGVzXCIpKSA6IFtdKSwgLi4uKGV4aXN0c1N5bmMoam9pbihjd2QoKSwgXCIuLlwiLCBcIi4uXCIsIFwibm9kZV9tb2R1bGVzXCIpKSA/IHJlYWRkaXJTeW5jKGpvaW4oY3dkKCksIFwiLi5cIiwgXCIuLlwiLCBcIm5vZGVfbW9kdWxlc1wiKSkgOiBbXSldLmZpbHRlcigoZGVwZW5kZW5jeSkgPT4gIWRlcGVuZGVuY3kuc3RhcnRzV2l0aChcIi5cIikpO1xuICAgIC8vIGVsZWN0cm9uIGV4Y2x1ZGVcbiAgICBub2RlTW9kdWxlcyA9IG5vZGVNb2R1bGVzLmZpbHRlcigoZGVwZW5kZW5jeSkgPT4gZGVwZW5kZW5jeSAhPT0gXCJlbGVjdHJvblwiKTtcbiAgICAvLyBzdGFydHNXaXRoIEBcbiAgICBjb25zdCBub2RlTW9kdWxlc1JlZ0V4cCA9IG5vZGVNb2R1bGVzLm1hcCgoZGVwZW5kZW5jeSkgPT4gKGRlcGVuZGVuY3kuc3RhcnRzV2l0aChcIkBcIikgPyBuZXcgUmVnRXhwKGBeJHtkZXBlbmRlbmN5fS9gKSA6IGRlcGVuZGVuY3kpKTtcblxuICAgIHJldHVybiBbLi4uYnVuLCAuLi5ub2RlTW9kdWxlc1JlZ0V4cF07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvb2tib29rVG9tbFByb2plY3QoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBjb29rYm9va1RvbWxSYXcgPSBhd2FpdCByZWFkRmlsZShqb2luKGN3ZCgpLCBcIi4uXCIsIFwiLi5cIiwgXCJjb29rYm9vay50b21sXCIpLCBcInV0Zi04XCIpO1xuICAgIGNvbnN0IGNvb2tib29rVG9tbCA9IFRPTUwucGFyc2UoY29va2Jvb2tUb21sUmF3KTtcbiAgICBsZXQgcHJvamVjdDogYW55O1xuICAgIGZvciAoY29uc3QgcHJvamVjdE5hbWUgaW4gY29va2Jvb2tUb21sLnByb2plY3RzIGFzIGFueSkge1xuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vU2VsZkNvbXBhcmU6IDxleHBsYW5hdGlvbj5cbiAgICAgICAgaWYgKGpvaW4oY3dkKCkpICE9PSBqb2luKGN3ZCgpLCBcIi4uXCIsIHByb2plY3ROYW1lKSkgY29udGludWU7XG4gICAgICAgIHByb2plY3QgPSAoY29va2Jvb2tUb21sLnByb2plY3RzIGFzIGFueSlbcHJvamVjdE5hbWVdO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKCFwcm9qZWN0KSB0aHJvdyBuZXcgRXJyb3IoXCJQcm9qZWN0IG5vdCBmb3VuZCBpbiBjb29rYm9vay50b21sXCIpO1xuICAgIHJldHVybiBwcm9qZWN0O1xufVxuIiwKICAgICJleHBvcnQgY29uc3QgYmFsYW5jZWQgPSAoYSwgYiwgc3RyKSA9PiB7XG4gICAgY29uc3QgbWEgPSBhIGluc3RhbmNlb2YgUmVnRXhwID8gbWF5YmVNYXRjaChhLCBzdHIpIDogYTtcbiAgICBjb25zdCBtYiA9IGIgaW5zdGFuY2VvZiBSZWdFeHAgPyBtYXliZU1hdGNoKGIsIHN0cikgOiBiO1xuICAgIGNvbnN0IHIgPSBtYSAhPT0gbnVsbCAmJiBtYiAhPSBudWxsICYmIHJhbmdlKG1hLCBtYiwgc3RyKTtcbiAgICByZXR1cm4gKHIgJiYge1xuICAgICAgICBzdGFydDogclswXSxcbiAgICAgICAgZW5kOiByWzFdLFxuICAgICAgICBwcmU6IHN0ci5zbGljZSgwLCByWzBdKSxcbiAgICAgICAgYm9keTogc3RyLnNsaWNlKHJbMF0gKyBtYS5sZW5ndGgsIHJbMV0pLFxuICAgICAgICBwb3N0OiBzdHIuc2xpY2UoclsxXSArIG1iLmxlbmd0aCksXG4gICAgfSk7XG59O1xuY29uc3QgbWF5YmVNYXRjaCA9IChyZWcsIHN0cikgPT4ge1xuICAgIGNvbnN0IG0gPSBzdHIubWF0Y2gocmVnKTtcbiAgICByZXR1cm4gbSA/IG1bMF0gOiBudWxsO1xufTtcbmV4cG9ydCBjb25zdCByYW5nZSA9IChhLCBiLCBzdHIpID0+IHtcbiAgICBsZXQgYmVncywgYmVnLCBsZWZ0LCByaWdodCA9IHVuZGVmaW5lZCwgcmVzdWx0O1xuICAgIGxldCBhaSA9IHN0ci5pbmRleE9mKGEpO1xuICAgIGxldCBiaSA9IHN0ci5pbmRleE9mKGIsIGFpICsgMSk7XG4gICAgbGV0IGkgPSBhaTtcbiAgICBpZiAoYWkgPj0gMCAmJiBiaSA+IDApIHtcbiAgICAgICAgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgICAgIHJldHVybiBbYWksIGJpXTtcbiAgICAgICAgfVxuICAgICAgICBiZWdzID0gW107XG4gICAgICAgIGxlZnQgPSBzdHIubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmICFyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChpID09PSBhaSkge1xuICAgICAgICAgICAgICAgIGJlZ3MucHVzaChpKTtcbiAgICAgICAgICAgICAgICBhaSA9IHN0ci5pbmRleE9mKGEsIGkgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJlZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgciA9IGJlZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKHIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW3IsIGJpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJlZyA9IGJlZ3MucG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKGJlZyAhPT0gdW5kZWZpbmVkICYmIGJlZyA8IGxlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGJlZztcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBiaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYmkgPSBzdHIuaW5kZXhPZihiLCBpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpID0gYWkgPCBiaSAmJiBhaSA+PSAwID8gYWkgOiBiaTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmVncy5sZW5ndGggJiYgcmlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gW2xlZnQsIHJpZ2h0XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgYmFsYW5jZWQgfSBmcm9tICdiYWxhbmNlZC1tYXRjaCc7XG5jb25zdCBlc2NTbGFzaCA9ICdcXDBTTEFTSCcgKyBNYXRoLnJhbmRvbSgpICsgJ1xcMCc7XG5jb25zdCBlc2NPcGVuID0gJ1xcME9QRU4nICsgTWF0aC5yYW5kb20oKSArICdcXDAnO1xuY29uc3QgZXNjQ2xvc2UgPSAnXFwwQ0xPU0UnICsgTWF0aC5yYW5kb20oKSArICdcXDAnO1xuY29uc3QgZXNjQ29tbWEgPSAnXFwwQ09NTUEnICsgTWF0aC5yYW5kb20oKSArICdcXDAnO1xuY29uc3QgZXNjUGVyaW9kID0gJ1xcMFBFUklPRCcgKyBNYXRoLnJhbmRvbSgpICsgJ1xcMCc7XG5jb25zdCBlc2NTbGFzaFBhdHRlcm4gPSBuZXcgUmVnRXhwKGVzY1NsYXNoLCAnZycpO1xuY29uc3QgZXNjT3BlblBhdHRlcm4gPSBuZXcgUmVnRXhwKGVzY09wZW4sICdnJyk7XG5jb25zdCBlc2NDbG9zZVBhdHRlcm4gPSBuZXcgUmVnRXhwKGVzY0Nsb3NlLCAnZycpO1xuY29uc3QgZXNjQ29tbWFQYXR0ZXJuID0gbmV3IFJlZ0V4cChlc2NDb21tYSwgJ2cnKTtcbmNvbnN0IGVzY1BlcmlvZFBhdHRlcm4gPSBuZXcgUmVnRXhwKGVzY1BlcmlvZCwgJ2cnKTtcbmNvbnN0IHNsYXNoUGF0dGVybiA9IC9cXFxcXFxcXC9nO1xuY29uc3Qgb3BlblBhdHRlcm4gPSAvXFxcXHsvZztcbmNvbnN0IGNsb3NlUGF0dGVybiA9IC9cXFxcfS9nO1xuY29uc3QgY29tbWFQYXR0ZXJuID0gL1xcXFwsL2c7XG5jb25zdCBwZXJpb2RQYXR0ZXJuID0gL1xcXFxcXC4vZztcbmV4cG9ydCBjb25zdCBFWFBBTlNJT05fTUFYID0gMTAwXzAwMDtcbmZ1bmN0aW9uIG51bWVyaWMoc3RyKSB7XG4gICAgcmV0dXJuICFpc05hTihzdHIpID8gcGFyc2VJbnQoc3RyLCAxMCkgOiBzdHIuY2hhckNvZGVBdCgwKTtcbn1cbmZ1bmN0aW9uIGVzY2FwZUJyYWNlcyhzdHIpIHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAgIC5yZXBsYWNlKHNsYXNoUGF0dGVybiwgZXNjU2xhc2gpXG4gICAgICAgIC5yZXBsYWNlKG9wZW5QYXR0ZXJuLCBlc2NPcGVuKVxuICAgICAgICAucmVwbGFjZShjbG9zZVBhdHRlcm4sIGVzY0Nsb3NlKVxuICAgICAgICAucmVwbGFjZShjb21tYVBhdHRlcm4sIGVzY0NvbW1hKVxuICAgICAgICAucmVwbGFjZShwZXJpb2RQYXR0ZXJuLCBlc2NQZXJpb2QpO1xufVxuZnVuY3Rpb24gdW5lc2NhcGVCcmFjZXMoc3RyKSB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAucmVwbGFjZShlc2NTbGFzaFBhdHRlcm4sICdcXFxcJylcbiAgICAgICAgLnJlcGxhY2UoZXNjT3BlblBhdHRlcm4sICd7JylcbiAgICAgICAgLnJlcGxhY2UoZXNjQ2xvc2VQYXR0ZXJuLCAnfScpXG4gICAgICAgIC5yZXBsYWNlKGVzY0NvbW1hUGF0dGVybiwgJywnKVxuICAgICAgICAucmVwbGFjZShlc2NQZXJpb2RQYXR0ZXJuLCAnLicpO1xufVxuLyoqXG4gKiBCYXNpY2FsbHkganVzdCBzdHIuc3BsaXQoXCIsXCIpLCBidXQgaGFuZGxpbmcgY2FzZXNcbiAqIHdoZXJlIHdlIGhhdmUgbmVzdGVkIGJyYWNlZCBzZWN0aW9ucywgd2hpY2ggc2hvdWxkIGJlXG4gKiB0cmVhdGVkIGFzIGluZGl2aWR1YWwgbWVtYmVycywgbGlrZSB7YSx7YixjfSxkfVxuICovXG5mdW5jdGlvbiBwYXJzZUNvbW1hUGFydHMoc3RyKSB7XG4gICAgaWYgKCFzdHIpIHtcbiAgICAgICAgcmV0dXJuIFsnJ107XG4gICAgfVxuICAgIGNvbnN0IHBhcnRzID0gW107XG4gICAgY29uc3QgbSA9IGJhbGFuY2VkKCd7JywgJ30nLCBzdHIpO1xuICAgIGlmICghbSkge1xuICAgICAgICByZXR1cm4gc3RyLnNwbGl0KCcsJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgcHJlLCBib2R5LCBwb3N0IH0gPSBtO1xuICAgIGNvbnN0IHAgPSBwcmUuc3BsaXQoJywnKTtcbiAgICBwW3AubGVuZ3RoIC0gMV0gKz0gJ3snICsgYm9keSArICd9JztcbiAgICBjb25zdCBwb3N0UGFydHMgPSBwYXJzZUNvbW1hUGFydHMocG9zdCk7XG4gICAgaWYgKHBvc3QubGVuZ3RoKSB7XG4gICAgICAgIDtcbiAgICAgICAgcFtwLmxlbmd0aCAtIDFdICs9IHBvc3RQYXJ0cy5zaGlmdCgpO1xuICAgICAgICBwLnB1c2guYXBwbHkocCwgcG9zdFBhcnRzKTtcbiAgICB9XG4gICAgcGFydHMucHVzaC5hcHBseShwYXJ0cywgcCk7XG4gICAgcmV0dXJuIHBhcnRzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZChzdHIsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgeyBtYXggPSBFWFBBTlNJT05fTUFYIH0gPSBvcHRpb25zO1xuICAgIC8vIEkgZG9uJ3Qga25vdyB3aHkgQmFzaCA0LjMgZG9lcyB0aGlzLCBidXQgaXQgZG9lcy5cbiAgICAvLyBBbnl0aGluZyBzdGFydGluZyB3aXRoIHt9IHdpbGwgaGF2ZSB0aGUgZmlyc3QgdHdvIGJ5dGVzIHByZXNlcnZlZFxuICAgIC8vIGJ1dCAqb25seSogYXQgdGhlIHRvcCBsZXZlbCwgc28ge30sYX1iIHdpbGwgbm90IGV4cGFuZCB0byBhbnl0aGluZyxcbiAgICAvLyBidXQgYXt9LGJ9YyB3aWxsIGJlIGV4cGFuZGVkIHRvIFthfWMsYWJjXS5cbiAgICAvLyBPbmUgY291bGQgYXJndWUgdGhhdCB0aGlzIGlzIGEgYnVnIGluIEJhc2gsIGJ1dCBzaW5jZSB0aGUgZ29hbCBvZlxuICAgIC8vIHRoaXMgbW9kdWxlIGlzIHRvIG1hdGNoIEJhc2gncyBydWxlcywgd2UgZXNjYXBlIGEgbGVhZGluZyB7fVxuICAgIGlmIChzdHIuc2xpY2UoMCwgMikgPT09ICd7fScpIHtcbiAgICAgICAgc3RyID0gJ1xcXFx7XFxcXH0nICsgc3RyLnNsaWNlKDIpO1xuICAgIH1cbiAgICByZXR1cm4gZXhwYW5kXyhlc2NhcGVCcmFjZXMoc3RyKSwgbWF4LCB0cnVlKS5tYXAodW5lc2NhcGVCcmFjZXMpO1xufVxuZnVuY3Rpb24gZW1icmFjZShzdHIpIHtcbiAgICByZXR1cm4gJ3snICsgc3RyICsgJ30nO1xufVxuZnVuY3Rpb24gaXNQYWRkZWQoZWwpIHtcbiAgICByZXR1cm4gL14tPzBcXGQvLnRlc3QoZWwpO1xufVxuZnVuY3Rpb24gbHRlKGksIHkpIHtcbiAgICByZXR1cm4gaSA8PSB5O1xufVxuZnVuY3Rpb24gZ3RlKGksIHkpIHtcbiAgICByZXR1cm4gaSA+PSB5O1xufVxuZnVuY3Rpb24gZXhwYW5kXyhzdHIsIG1heCwgaXNUb3ApIHtcbiAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgIGNvbnN0IGV4cGFuc2lvbnMgPSBbXTtcbiAgICBjb25zdCBtID0gYmFsYW5jZWQoJ3snLCAnfScsIHN0cik7XG4gICAgaWYgKCFtKVxuICAgICAgICByZXR1cm4gW3N0cl07XG4gICAgLy8gbm8gbmVlZCB0byBleHBhbmQgcHJlLCBzaW5jZSBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIGZyZWUgb2YgYnJhY2Utc2V0c1xuICAgIGNvbnN0IHByZSA9IG0ucHJlO1xuICAgIGNvbnN0IHBvc3QgPSBtLnBvc3QubGVuZ3RoID8gZXhwYW5kXyhtLnBvc3QsIG1heCwgZmFsc2UpIDogWycnXTtcbiAgICBpZiAoL1xcJCQvLnRlc3QobS5wcmUpKSB7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcG9zdC5sZW5ndGggJiYgayA8IG1heDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBleHBhbnNpb24gPSBwcmUgKyAneycgKyBtLmJvZHkgKyAnfScgKyBwb3N0W2tdO1xuICAgICAgICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGlzTnVtZXJpY1NlcXVlbmNlID0gL14tP1xcZCtcXC5cXC4tP1xcZCsoPzpcXC5cXC4tP1xcZCspPyQvLnRlc3QobS5ib2R5KTtcbiAgICAgICAgY29uc3QgaXNBbHBoYVNlcXVlbmNlID0gL15bYS16QS1aXVxcLlxcLlthLXpBLVpdKD86XFwuXFwuLT9cXGQrKT8kLy50ZXN0KG0uYm9keSk7XG4gICAgICAgIGNvbnN0IGlzU2VxdWVuY2UgPSBpc051bWVyaWNTZXF1ZW5jZSB8fCBpc0FscGhhU2VxdWVuY2U7XG4gICAgICAgIGNvbnN0IGlzT3B0aW9ucyA9IG0uYm9keS5pbmRleE9mKCcsJykgPj0gMDtcbiAgICAgICAgaWYgKCFpc1NlcXVlbmNlICYmICFpc09wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIHthfSxifVxuICAgICAgICAgICAgaWYgKG0ucG9zdC5tYXRjaCgvLCg/ISwpLipcXH0vKSkge1xuICAgICAgICAgICAgICAgIHN0ciA9IG0ucHJlICsgJ3snICsgbS5ib2R5ICsgZXNjQ2xvc2UgKyBtLnBvc3Q7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4cGFuZF8oc3RyLCBtYXgsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtzdHJdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuO1xuICAgICAgICBpZiAoaXNTZXF1ZW5jZSkge1xuICAgICAgICAgICAgbiA9IG0uYm9keS5zcGxpdCgvXFwuXFwuLyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuID0gcGFyc2VDb21tYVBhcnRzKG0uYm9keSk7XG4gICAgICAgICAgICBpZiAobi5sZW5ndGggPT09IDEgJiYgblswXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8geHt7YSxifX15ID09PiB4e2F9eSB4e2J9eVxuICAgICAgICAgICAgICAgIG4gPSBleHBhbmRfKG5bMF0sIG1heCwgZmFsc2UpLm1hcChlbWJyYWNlKTtcbiAgICAgICAgICAgICAgICAvL1hYWCBpcyB0aGlzIG5lY2Vzc2FyeT8gQ2FuJ3Qgc2VlbSB0byBoaXQgaXQgaW4gdGVzdHMuXG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgaWYgKG4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3N0Lm1hcChwID0+IG0ucHJlICsgblswXSArIHApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIG4gaXMgdGhlIHBhcnRzLCBhbmQgd2Uga25vdyBpdCdzIG5vdCBhIGNvbW1hIHNldFxuICAgICAgICAvLyB3aXRoIGEgc2luZ2xlIGVudHJ5LlxuICAgICAgICBsZXQgTjtcbiAgICAgICAgaWYgKGlzU2VxdWVuY2UgJiYgblswXSAhPT0gdW5kZWZpbmVkICYmIG5bMV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgeCA9IG51bWVyaWMoblswXSk7XG4gICAgICAgICAgICBjb25zdCB5ID0gbnVtZXJpYyhuWzFdKTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoblswXS5sZW5ndGgsIG5bMV0ubGVuZ3RoKTtcbiAgICAgICAgICAgIGxldCBpbmNyID0gbi5sZW5ndGggPT09IDMgJiYgblsyXSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICBNYXRoLm1heChNYXRoLmFicyhudW1lcmljKG5bMl0pKSwgMSlcbiAgICAgICAgICAgICAgICA6IDE7XG4gICAgICAgICAgICBsZXQgdGVzdCA9IGx0ZTtcbiAgICAgICAgICAgIGNvbnN0IHJldmVyc2UgPSB5IDwgeDtcbiAgICAgICAgICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICAgICAgICAgICAgaW5jciAqPSAtMTtcbiAgICAgICAgICAgICAgICB0ZXN0ID0gZ3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFkID0gbi5zb21lKGlzUGFkZGVkKTtcbiAgICAgICAgICAgIE4gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB4OyB0ZXN0KGksIHkpICYmIE4ubGVuZ3RoIDwgbWF4OyBpICs9IGluY3IpIHtcbiAgICAgICAgICAgICAgICBsZXQgYztcbiAgICAgICAgICAgICAgICBpZiAoaXNBbHBoYVNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBTdHJpbmcoaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWQgPSB3aWR0aCAtIGMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeiA9IG5ldyBBcnJheShuZWVkICsgMSkuam9pbignMCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gJy0nICsgeiArIGMuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0geiArIGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIE4ucHVzaChjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIE4gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIE4ucHVzaC5hcHBseShOLCBleHBhbmRfKG5bal0sIG1heCwgZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IE4ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcG9zdC5sZW5ndGggJiYgZXhwYW5zaW9ucy5sZW5ndGggPCBtYXg7IGsrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvbiA9IHByZSArIE5bal0gKyBwb3N0W2tdO1xuICAgICAgICAgICAgICAgIGlmICghaXNUb3AgfHwgaXNTZXF1ZW5jZSB8fCBleHBhbnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBleHBhbnNpb25zO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJjb25zdCBNQVhfUEFUVEVSTl9MRU5HVEggPSAxMDI0ICogNjQ7XG5leHBvcnQgY29uc3QgYXNzZXJ0VmFsaWRQYXR0ZXJuID0gKHBhdHRlcm4pID0+IHtcbiAgICBpZiAodHlwZW9mIHBhdHRlcm4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGF0dGVybicpO1xuICAgIH1cbiAgICBpZiAocGF0dGVybi5sZW5ndGggPiBNQVhfUEFUVEVSTl9MRU5HVEgpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGF0dGVybiBpcyB0b28gbG9uZycpO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hc3NlcnQtdmFsaWQtcGF0dGVybi5qcy5tYXAiLAogICAgIi8vIHRyYW5zbGF0ZSB0aGUgdmFyaW91cyBwb3NpeCBjaGFyYWN0ZXIgY2xhc3NlcyBpbnRvIHVuaWNvZGUgcHJvcGVydGllc1xuLy8gdGhpcyB3b3JrcyBhY3Jvc3MgYWxsIHVuaWNvZGUgbG9jYWxlc1xuLy8geyA8cG9zaXggY2xhc3M+OiBbPHRyYW5zbGF0aW9uPiwgL3UgZmxhZyByZXF1aXJlZCwgbmVnYXRlZF1cbmNvbnN0IHBvc2l4Q2xhc3NlcyA9IHtcbiAgICAnWzphbG51bTpdJzogWydcXFxccHtMfVxcXFxwe05sfVxcXFxwe05kfScsIHRydWVdLFxuICAgICdbOmFscGhhOl0nOiBbJ1xcXFxwe0x9XFxcXHB7Tmx9JywgdHJ1ZV0sXG4gICAgJ1s6YXNjaWk6XSc6IFsnXFxcXHgnICsgJzAwLVxcXFx4JyArICc3ZicsIGZhbHNlXSxcbiAgICAnWzpibGFuazpdJzogWydcXFxccHtac31cXFxcdCcsIHRydWVdLFxuICAgICdbOmNudHJsOl0nOiBbJ1xcXFxwe0NjfScsIHRydWVdLFxuICAgICdbOmRpZ2l0Ol0nOiBbJ1xcXFxwe05kfScsIHRydWVdLFxuICAgICdbOmdyYXBoOl0nOiBbJ1xcXFxwe1p9XFxcXHB7Q30nLCB0cnVlLCB0cnVlXSxcbiAgICAnWzpsb3dlcjpdJzogWydcXFxccHtMbH0nLCB0cnVlXSxcbiAgICAnWzpwcmludDpdJzogWydcXFxccHtDfScsIHRydWVdLFxuICAgICdbOnB1bmN0Ol0nOiBbJ1xcXFxwe1B9JywgdHJ1ZV0sXG4gICAgJ1s6c3BhY2U6XSc6IFsnXFxcXHB7Wn1cXFxcdFxcXFxyXFxcXG5cXFxcdlxcXFxmJywgdHJ1ZV0sXG4gICAgJ1s6dXBwZXI6XSc6IFsnXFxcXHB7THV9JywgdHJ1ZV0sXG4gICAgJ1s6d29yZDpdJzogWydcXFxccHtMfVxcXFxwe05sfVxcXFxwe05kfVxcXFxwe1BjfScsIHRydWVdLFxuICAgICdbOnhkaWdpdDpdJzogWydBLUZhLWYwLTknLCBmYWxzZV0sXG59O1xuLy8gb25seSBuZWVkIHRvIGVzY2FwZSBhIGZldyB0aGluZ3MgaW5zaWRlIG9mIGJyYWNlIGV4cHJlc3Npb25zXG4vLyBlc2NhcGVzOiBbIFxcIF0gLVxuY29uc3QgYnJhY2VFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bW1xcXVxcXFwtXS9nLCAnXFxcXCQmJyk7XG4vLyBlc2NhcGUgYWxsIHJlZ2V4cCBtYWdpYyBjaGFyYWN0ZXJzXG5jb25zdCByZWdleHBFc2NhcGUgPSAocykgPT4gcy5yZXBsYWNlKC9bLVtcXF17fSgpKis/LixcXFxcXiR8I1xcc10vZywgJ1xcXFwkJicpO1xuLy8gZXZlcnl0aGluZyBoYXMgYWxyZWFkeSBiZWVuIGVzY2FwZWQsIHdlIGp1c3QgaGF2ZSB0byBqb2luXG5jb25zdCByYW5nZXNUb1N0cmluZyA9IChyYW5nZXMpID0+IHJhbmdlcy5qb2luKCcnKTtcbi8vIHRha2VzIGEgZ2xvYiBzdHJpbmcgYXQgYSBwb3NpeCBicmFjZSBleHByZXNzaW9uLCBhbmQgcmV0dXJuc1xuLy8gYW4gZXF1aXZhbGVudCByZWd1bGFyIGV4cHJlc3Npb24gc291cmNlLCBhbmQgYm9vbGVhbiBpbmRpY2F0aW5nXG4vLyB3aGV0aGVyIHRoZSAvdSBmbGFnIG5lZWRzIHRvIGJlIGFwcGxpZWQsIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJzXG4vLyBjb25zdW1lZCB0byBwYXJzZSB0aGUgY2hhcmFjdGVyIGNsYXNzLlxuLy8gVGhpcyBhbHNvIHJlbW92ZXMgb3V0IG9mIG9yZGVyIHJhbmdlcywgYW5kIHJldHVybnMgKCQuKSBpZiB0aGVcbi8vIGVudGlyZSBjbGFzcyBqdXN0IG5vIGdvb2QuXG5leHBvcnQgY29uc3QgcGFyc2VDbGFzcyA9IChnbG9iLCBwb3NpdGlvbikgPT4ge1xuICAgIGNvbnN0IHBvcyA9IHBvc2l0aW9uO1xuICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgIGlmIChnbG9iLmNoYXJBdChwb3MpICE9PSAnWycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW4gYSBicmFjZSBleHByZXNzaW9uJyk7XG4gICAgfVxuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgY29uc3QgcmFuZ2VzID0gW107XG4gICAgY29uc3QgbmVncyA9IFtdO1xuICAgIGxldCBpID0gcG9zICsgMTtcbiAgICBsZXQgc2F3U3RhcnQgPSBmYWxzZTtcbiAgICBsZXQgdWZsYWcgPSBmYWxzZTtcbiAgICBsZXQgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICBsZXQgbmVnYXRlID0gZmFsc2U7XG4gICAgbGV0IGVuZFBvcyA9IHBvcztcbiAgICBsZXQgcmFuZ2VTdGFydCA9ICcnO1xuICAgIFdISUxFOiB3aGlsZSAoaSA8IGdsb2IubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGMgPSBnbG9iLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKChjID09PSAnIScgfHwgYyA9PT0gJ14nKSAmJiBpID09PSBwb3MgKyAxKSB7XG4gICAgICAgICAgICBuZWdhdGUgPSB0cnVlO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICddJyAmJiBzYXdTdGFydCAmJiAhZXNjYXBpbmcpIHtcbiAgICAgICAgICAgIGVuZFBvcyA9IGkgKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc2F3U3RhcnQgPSB0cnVlO1xuICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBpZiAoIWVzY2FwaW5nKSB7XG4gICAgICAgICAgICAgICAgZXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVzY2FwZWQgXFwgY2hhciwgZmFsbCB0aHJvdWdoIGFuZCB0cmVhdCBsaWtlIG5vcm1hbCBjaGFyXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09ICdbJyAmJiAhZXNjYXBpbmcpIHtcbiAgICAgICAgICAgIC8vIGVpdGhlciBhIHBvc2l4IGNsYXNzLCBhIGNvbGxhdGlvbiBlcXVpdmFsZW50LCBvciBqdXN0IGEgW1xuICAgICAgICAgICAgZm9yIChjb25zdCBbY2xzLCBbdW5pcCwgdSwgbmVnXV0gb2YgT2JqZWN0LmVudHJpZXMocG9zaXhDbGFzc2VzKSkge1xuICAgICAgICAgICAgICAgIGlmIChnbG9iLnN0YXJ0c1dpdGgoY2xzLCBpKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkLCBbYS1bXSBpcyBmaW5lLCBidXQgbm90IFthLVs6YWxwaGFdXVxuICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnJC4nLCBmYWxzZSwgZ2xvYi5sZW5ndGggLSBwb3MsIHRydWVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGkgKz0gY2xzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5lZylcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZ3MucHVzaCh1bmlwKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2godW5pcCk7XG4gICAgICAgICAgICAgICAgICAgIHVmbGFnID0gdWZsYWcgfHwgdTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWUgV0hJTEU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyBpdCdzIGp1c3QgYSBub3JtYWwgY2hhcmFjdGVyLCBlZmZlY3RpdmVseVxuICAgICAgICBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAocmFuZ2VTdGFydCkge1xuICAgICAgICAgICAgLy8gdGhyb3cgdGhpcyByYW5nZSBhd2F5IGlmIGl0J3Mgbm90IHZhbGlkLCBidXQgb3RoZXJzXG4gICAgICAgICAgICAvLyBjYW4gc3RpbGwgbWF0Y2guXG4gICAgICAgICAgICBpZiAoYyA+IHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICByYW5nZXMucHVzaChicmFjZUVzY2FwZShyYW5nZVN0YXJ0KSArICctJyArIGJyYWNlRXNjYXBlKGMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09IHJhbmdlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICByYW5nZXMucHVzaChicmFjZUVzY2FwZShjKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByYW5nZVN0YXJ0ID0gJyc7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgbWlnaHQgYmUgdGhlIHN0YXJ0IG9mIGEgcmFuZ2UuXG4gICAgICAgIC8vIGNhbiBiZSBlaXRoZXIgYy1kIG9yIGMtXSBvciBjPG1vcmUuLi4+XSBvciBjXSBhdCB0aGlzIHBvaW50XG4gICAgICAgIGlmIChnbG9iLnN0YXJ0c1dpdGgoJy1dJywgaSArIDEpKSB7XG4gICAgICAgICAgICByYW5nZXMucHVzaChicmFjZUVzY2FwZShjICsgJy0nKSk7XG4gICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2xvYi5zdGFydHNXaXRoKCctJywgaSArIDEpKSB7XG4gICAgICAgICAgICByYW5nZVN0YXJ0ID0gYztcbiAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB0aGUgc3RhcnQgb2YgYSByYW5nZSwganVzdCBhIHNpbmdsZSBjaGFyYWN0ZXJcbiAgICAgICAgcmFuZ2VzLnB1c2goYnJhY2VFc2NhcGUoYykpO1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIGlmIChlbmRQb3MgPCBpKSB7XG4gICAgICAgIC8vIGRpZG4ndCBzZWUgdGhlIGVuZCBvZiB0aGUgY2xhc3MsIG5vdCBhIHZhbGlkIGNsYXNzLFxuICAgICAgICAvLyBidXQgbWlnaHQgc3RpbGwgYmUgdmFsaWQgYXMgYSBsaXRlcmFsIG1hdGNoLlxuICAgICAgICByZXR1cm4gWycnLCBmYWxzZSwgMCwgZmFsc2VdO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBnb3Qgbm8gcmFuZ2VzIGFuZCBubyBuZWdhdGVzLCB0aGVuIHdlIGhhdmUgYSByYW5nZSB0aGF0XG4gICAgLy8gY2Fubm90IHBvc3NpYmx5IG1hdGNoIGFueXRoaW5nLCBhbmQgdGhhdCBwb2lzb25zIHRoZSB3aG9sZSBnbG9iXG4gICAgaWYgKCFyYW5nZXMubGVuZ3RoICYmICFuZWdzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gWyckLicsIGZhbHNlLCBnbG9iLmxlbmd0aCAtIHBvcywgdHJ1ZV07XG4gICAgfVxuICAgIC8vIGlmIHdlIGdvdCBvbmUgcG9zaXRpdmUgcmFuZ2UsIGFuZCBpdCdzIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlbiB0aGF0J3NcbiAgICAvLyBub3QgYWN0dWFsbHkgYSBtYWdpYyBwYXR0ZXJuLCBpdCdzIGp1c3QgdGhhdCBvbmUgbGl0ZXJhbCBjaGFyYWN0ZXIuXG4gICAgLy8gd2Ugc2hvdWxkIG5vdCB0cmVhdCB0aGF0IGFzIFwibWFnaWNcIiwgd2Ugc2hvdWxkIGp1c3QgcmV0dXJuIHRoZSBsaXRlcmFsXG4gICAgLy8gY2hhcmFjdGVyLiBbX10gaXMgYSBwZXJmZWN0bHkgdmFsaWQgd2F5IHRvIGVzY2FwZSBnbG9iIG1hZ2ljIGNoYXJzLlxuICAgIGlmIChuZWdzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICByYW5nZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIC9eXFxcXD8uJC8udGVzdChyYW5nZXNbMF0pICYmXG4gICAgICAgICFuZWdhdGUpIHtcbiAgICAgICAgY29uc3QgciA9IHJhbmdlc1swXS5sZW5ndGggPT09IDIgPyByYW5nZXNbMF0uc2xpY2UoLTEpIDogcmFuZ2VzWzBdO1xuICAgICAgICByZXR1cm4gW3JlZ2V4cEVzY2FwZShyKSwgZmFsc2UsIGVuZFBvcyAtIHBvcywgZmFsc2VdO1xuICAgIH1cbiAgICBjb25zdCBzcmFuZ2VzID0gJ1snICsgKG5lZ2F0ZSA/ICdeJyA6ICcnKSArIHJhbmdlc1RvU3RyaW5nKHJhbmdlcykgKyAnXSc7XG4gICAgY29uc3Qgc25lZ3MgPSAnWycgKyAobmVnYXRlID8gJycgOiAnXicpICsgcmFuZ2VzVG9TdHJpbmcobmVncykgKyAnXSc7XG4gICAgY29uc3QgY29tYiA9IHJhbmdlcy5sZW5ndGggJiYgbmVncy5sZW5ndGggPyAnKCcgKyBzcmFuZ2VzICsgJ3wnICsgc25lZ3MgKyAnKSdcbiAgICAgICAgOiByYW5nZXMubGVuZ3RoID8gc3Jhbmdlc1xuICAgICAgICAgICAgOiBzbmVncztcbiAgICByZXR1cm4gW2NvbWIsIHVmbGFnLCBlbmRQb3MgLSBwb3MsIHRydWVdO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJyYWNlLWV4cHJlc3Npb25zLmpzLm1hcCIsCiAgICAiLyoqXG4gKiBVbi1lc2NhcGUgYSBzdHJpbmcgdGhhdCBoYXMgYmVlbiBlc2NhcGVkIHdpdGgge0BsaW5rIGVzY2FwZX0uXG4gKlxuICogSWYgdGhlIHtAbGluayBNaW5pbWF0Y2hPcHRpb25zLndpbmRvd3NQYXRoc05vRXNjYXBlfSBvcHRpb24gaXMgdXNlZCwgdGhlblxuICogc3F1YXJlLWJyYWNrZXQgZXNjYXBlcyBhcmUgcmVtb3ZlZCwgYnV0IG5vdCBiYWNrc2xhc2ggZXNjYXBlcy5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaXQgd2lsbCB0dXJuIHRoZSBzdHJpbmcgYCdbKl0nYCBpbnRvIGAqYCwgYnV0IGl0IHdpbGwgbm90XG4gKiB0dXJuIGAnXFxcXConYCBpbnRvIGAnKidgLCBiZWNhdXNlIGBcXGAgaXMgYSBwYXRoIHNlcGFyYXRvciBpblxuICogYHdpbmRvd3NQYXRoc05vRXNjYXBlYCBtb2RlLlxuICpcbiAqIFdoZW4gYHdpbmRvd3NQYXRoc05vRXNjYXBlYCBpcyBub3Qgc2V0LCB0aGVuIGJvdGggc3F1YXJlLWJyYWNrZXQgZXNjYXBlcyBhbmRcbiAqIGJhY2tzbGFzaCBlc2NhcGVzIGFyZSByZW1vdmVkLlxuICpcbiAqIFNsYXNoZXMgKGFuZCBiYWNrc2xhc2hlcyBpbiBgd2luZG93c1BhdGhzTm9Fc2NhcGVgIG1vZGUpIGNhbm5vdCBiZSBlc2NhcGVkXG4gKiBvciB1bmVzY2FwZWQuXG4gKlxuICogV2hlbiBgbWFnaWNhbEJyYWNlc2AgaXMgbm90IHNldCwgZXNjYXBlcyBvZiBicmFjZXMgKGB7YCBhbmQgYH1gKSB3aWxsIG5vdCBiZVxuICogdW5lc2NhcGVkLlxuICovXG5leHBvcnQgY29uc3QgdW5lc2NhcGUgPSAocywgeyB3aW5kb3dzUGF0aHNOb0VzY2FwZSA9IGZhbHNlLCBtYWdpY2FsQnJhY2VzID0gdHJ1ZSwgfSA9IHt9KSA9PiB7XG4gICAgaWYgKG1hZ2ljYWxCcmFjZXMpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvd3NQYXRoc05vRXNjYXBlID9cbiAgICAgICAgICAgIHMucmVwbGFjZSgvXFxbKFteL1xcXFxdKVxcXS9nLCAnJDEnKVxuICAgICAgICAgICAgOiBzXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLygoPyFcXFxcKS58XilcXFsoW14vXFxcXF0pXFxdL2csICckMSQyJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXChbXi9dKS9nLCAnJDEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbmRvd3NQYXRoc05vRXNjYXBlID9cbiAgICAgICAgcy5yZXBsYWNlKC9cXFsoW14vXFxcXHt9XSlcXF0vZywgJyQxJylcbiAgICAgICAgOiBzXG4gICAgICAgICAgICAucmVwbGFjZSgvKCg/IVxcXFwpLnxeKVxcWyhbXi9cXFxce31dKVxcXS9nLCAnJDEkMicpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxcXChbXi97fV0pL2csICckMScpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuZXNjYXBlLmpzLm1hcCIsCiAgICAiLy8gcGFyc2UgYSBzaW5nbGUgcGF0aCBwb3J0aW9uXG52YXIgX2E7XG5pbXBvcnQgeyBwYXJzZUNsYXNzIH0gZnJvbSAnLi9icmFjZS1leHByZXNzaW9ucy5qcyc7XG5pbXBvcnQgeyB1bmVzY2FwZSB9IGZyb20gJy4vdW5lc2NhcGUuanMnO1xuY29uc3QgdHlwZXMgPSBuZXcgU2V0KFsnIScsICc/JywgJysnLCAnKicsICdAJ10pO1xuY29uc3QgaXNFeHRnbG9iVHlwZSA9IChjKSA9PiB0eXBlcy5oYXMoYyk7XG5jb25zdCBpc0V4dGdsb2JBU1QgPSAoYykgPT4gaXNFeHRnbG9iVHlwZShjLnR5cGUpO1xuLy8gTWFwIG9mIHdoaWNoIGV4dGdsb2IgdHlwZXMgY2FuIGFkb3B0IHRoZSBjaGlsZHJlbiBvZiBhIG5lc3RlZCBleHRnbG9iXG4vL1xuLy8gYW55dGhpbmcgYnV0ICEgY2FuIGFkb3B0IGEgbWF0Y2hpbmcgdHlwZTpcbi8vICsoYXwrKGJ8Yyl8ZCkgPT4gKyhhfGJ8Y3xkKVxuLy8gKihhfCooYnxjKXxkKSA9PiAqKGF8YnxjfGQpXG4vLyBAKGF8QChifGMpfGQpID0+IEAoYXxifGN8ZClcbi8vID8oYXw/KGJ8Yyl8ZCkgPT4gPyhhfGJ8Y3xkKVxuLy9cbi8vICogY2FuIGFkb3B0IGFueXRoaW5nLCBiZWNhdXNlIDAgb3IgcmVwZXRpdGlvbiBpcyBhbGxvd2VkXG4vLyAqKGF8PyhifGMpfGQpID0+ICooYXxifGN8ZClcbi8vICooYXwrKGJ8Yyl8ZCkgPT4gKihhfGJ8Y3xkKVxuLy8gKihhfEAoYnxjKXxkKSA9PiAqKGF8YnxjfGQpXG4vL1xuLy8gKyBjYW4gYWRvcHQgQCwgYmVjYXVzZSAxIG9yIHJlcGV0aXRpb24gaXMgYWxsb3dlZFxuLy8gKyhhfEAoYnxjKXxkKSA9PiArKGF8YnxjfGQpXG4vL1xuLy8gKyBhbmQgQCBDQU5OT1QgYWRvcHQgKiwgYmVjYXVzZSAwIHdvdWxkIGJlIGFsbG93ZWRcbi8vICsoYXwqKGJ8Yyl8ZCkgPT4gd291bGQgbWF0Y2ggXCJcIiwgb24gKihifGMpXG4vLyBAKGF8KihifGMpfGQpID0+IHdvdWxkIG1hdGNoIFwiXCIsIG9uICooYnxjKVxuLy9cbi8vICsgYW5kIEAgQ0FOTk9UIGFkb3B0ID8sIGJlY2F1c2UgMCB3b3VsZCBiZSBhbGxvd2VkXG4vLyArKGF8PyhifGMpfGQpID0+IHdvdWxkIG1hdGNoIFwiXCIsIG9uID8oYnxjKVxuLy8gQChhfD8oYnxjKXxkKSA9PiB3b3VsZCBtYXRjaCBcIlwiLCBvbiA/KGJ8Yylcbi8vXG4vLyA/IGNhbiBhZG9wdCBALCBiZWNhdXNlIDAgb3IgMSBpcyBhbGxvd2VkXG4vLyA/KGF8QChifGMpfGQpID0+ID8oYXxifGN8ZClcbi8vXG4vLyA/IGFuZCBAIENBTk5PVCBhZG9wdCAqIG9yICssIGJlY2F1c2UgPjEgd291bGQgYmUgYWxsb3dlZFxuLy8gPyhhfCooYnxjKXxkKSA9PiB3b3VsZCBtYXRjaCBiYmIgb24gKihifGMpXG4vLyBAKGF8KihifGMpfGQpID0+IHdvdWxkIG1hdGNoIGJiYiBvbiAqKGJ8Yylcbi8vID8oYXwrKGJ8Yyl8ZCkgPT4gd291bGQgbWF0Y2ggYmJiIG9uICsoYnxjKVxuLy8gQChhfCsoYnxjKXxkKSA9PiB3b3VsZCBtYXRjaCBiYmIgb24gKyhifGMpXG4vL1xuLy8gISBDQU5OT1QgYWRvcHQgISAobm90aGluZyBlbHNlIGNhbiBlaXRoZXIpXG4vLyAhKGF8IShifGMpfGQpID0+ICEoYXxifGN8ZCkgd291bGQgZmFpbCB0byBtYXRjaCBvbiBiIChub3Qgbm90IGJ8Yylcbi8vXG4vLyAhIGNhbiBhZG9wdCBAXG4vLyAhKGF8QChifGMpfGQpID0+ICEoYXxifGN8ZClcbi8vXG4vLyAhIENBTk5PVCBhZG9wdCAqXG4vLyAhKGF8KihifGMpfGQpID0+ICEoYXxifGN8ZCkgd291bGQgbWF0Y2ggb24gYmJiLCBub3QgYWxsb3dlZFxuLy9cbi8vICEgQ0FOTk9UIGFkb3B0ICtcbi8vICEoYXwrKGJ8Yyl8ZCkgPT4gIShhfGJ8Y3xkKSB3b3VsZCBtYXRjaCBvbiBiYmIsIG5vdCBhbGxvd2VkXG4vL1xuLy8gISBDQU5OT1QgYWRvcHQgP1xuLy8geCEoYXw/KGJ8Yyl8ZCkgPT4geCEoYXxifGN8ZCkgd291bGQgZmFpbCB0byBtYXRjaCBcInhcIlxuY29uc3QgYWRvcHRpb25NYXAgPSBuZXcgTWFwKFtcbiAgICBbJyEnLCBbJ0AnXV0sXG4gICAgWyc/JywgWyc/JywgJ0AnXV0sXG4gICAgWydAJywgWydAJ11dLFxuICAgIFsnKicsIFsnKicsICcrJywgJz8nLCAnQCddXSxcbiAgICBbJysnLCBbJysnLCAnQCddXSxcbl0pO1xuLy8gbmVzdGVkIGV4dGdsb2JzIHRoYXQgY2FuIGJlIGFkb3B0ZWQgaW4sIGJ1dCB3aXRoIHRoZSBhZGRpdGlvbiBvZlxuLy8gYSBibGFuayAnJyBlbGVtZW50LlxuY29uc3QgYWRvcHRpb25XaXRoU3BhY2VNYXAgPSBuZXcgTWFwKFtcbiAgICBbJyEnLCBbJz8nXV0sXG4gICAgWydAJywgWyc/J11dLFxuICAgIFsnKycsIFsnPycsICcqJ11dLFxuXSk7XG4vLyB1bmlvbiBvZiB0aGUgcHJldmlvdXMgdHdvIG1hcHNcbmNvbnN0IGFkb3B0aW9uQW55TWFwID0gbmV3IE1hcChbXG4gICAgWychJywgWyc/JywgJ0AnXV0sXG4gICAgWyc/JywgWyc/JywgJ0AnXV0sXG4gICAgWydAJywgWyc/JywgJ0AnXV0sXG4gICAgWycqJywgWycqJywgJysnLCAnPycsICdAJ11dLFxuICAgIFsnKycsIFsnKycsICdAJywgJz8nLCAnKiddXSxcbl0pO1xuLy8gRXh0Z2xvYnMgdGhhdCBjYW4gdGFrZSBvdmVyIHRoZWlyIHBhcmVudCBpZiB0aGV5IGFyZSB0aGUgb25seSBjaGlsZFxuLy8gdGhlIGtleSBpcyBwYXJlbnQsIHZhbHVlIG1hcHMgY2hpbGQgdG8gcmVzdWx0aW5nIGV4dGdsb2IgcGFyZW50IHR5cGVcbi8vICdAJyBpcyBvbWl0dGVkIGJlY2F1c2UgaXQncyBhIHNwZWNpYWwgY2FzZS4gQW4gYEBgIGV4dGdsb2Igd2l0aCBhIHNpbmdsZVxuLy8gbWVtYmVyIGNhbiBhbHdheXMgYmUgdXN1cnBlZCBieSB0aGF0IHN1YnBhdHRlcm4uXG5jb25zdCB1c3VycE1hcCA9IG5ldyBNYXAoW1xuICAgIFsnIScsIG5ldyBNYXAoW1snIScsICdAJ11dKV0sXG4gICAgW1xuICAgICAgICAnPycsXG4gICAgICAgIG5ldyBNYXAoW1xuICAgICAgICAgICAgWycqJywgJyonXSxcbiAgICAgICAgICAgIFsnKycsICcqJ10sXG4gICAgICAgIF0pLFxuICAgIF0sXG4gICAgW1xuICAgICAgICAnQCcsXG4gICAgICAgIG5ldyBNYXAoW1xuICAgICAgICAgICAgWychJywgJyEnXSxcbiAgICAgICAgICAgIFsnPycsICc/J10sXG4gICAgICAgICAgICBbJ0AnLCAnQCddLFxuICAgICAgICAgICAgWycqJywgJyonXSxcbiAgICAgICAgICAgIFsnKycsICcrJ10sXG4gICAgICAgIF0pLFxuICAgIF0sXG4gICAgW1xuICAgICAgICAnKycsXG4gICAgICAgIG5ldyBNYXAoW1xuICAgICAgICAgICAgWyc/JywgJyonXSxcbiAgICAgICAgICAgIFsnKicsICcqJ10sXG4gICAgICAgIF0pLFxuICAgIF0sXG5dKTtcbi8vIFBhdHRlcm5zIHRoYXQgZ2V0IHByZXBlbmRlZCB0byBiaW5kIHRvIHRoZSBzdGFydCBvZiBlaXRoZXIgdGhlXG4vLyBlbnRpcmUgc3RyaW5nLCBvciBqdXN0IGEgc2luZ2xlIHBhdGggcG9ydGlvbiwgdG8gcHJldmVudCBkb3RzXG4vLyBhbmQvb3IgdHJhdmVyc2FsIHBhdHRlcm5zLCB3aGVuIG5lZWRlZC5cbi8vIEV4dHMgZG9uJ3QgbmVlZCB0aGUgXiBvciAvIGJpdCwgYmVjYXVzZSB0aGUgcm9vdCBiaW5kcyB0aGF0IGFscmVhZHkuXG5jb25zdCBzdGFydE5vVHJhdmVyc2FsID0gJyg/ISg/Ol58LylcXFxcLlxcXFwuPyg/OiR8LykpJztcbmNvbnN0IHN0YXJ0Tm9Eb3QgPSAnKD8hXFxcXC4pJztcbi8vIGNoYXJhY3RlcnMgdGhhdCBpbmRpY2F0ZSBhIHN0YXJ0IG9mIHBhdHRlcm4gbmVlZHMgdGhlIFwibm8gZG90c1wiIGJpdCxcbi8vIGJlY2F1c2UgYSBkb3QgKm1pZ2h0KiBiZSBtYXRjaGVkLiAoIGlzIG5vdCBpbiB0aGUgbGlzdCwgYmVjYXVzZSBpblxuLy8gdGhlIGNhc2Ugb2YgYSBjaGlsZCBleHRnbG9iLCBpdCB3aWxsIGhhbmRsZSB0aGUgcHJldmVudGlvbiBpdHNlbGYuXG5jb25zdCBhZGRQYXR0ZXJuU3RhcnQgPSBuZXcgU2V0KFsnWycsICcuJ10pO1xuLy8gY2FzZXMgd2hlcmUgdHJhdmVyc2FsIGlzIEEtT0ssIG5vIGRvdCBwcmV2ZW50aW9uIG5lZWRlZFxuY29uc3QganVzdERvdHMgPSBuZXcgU2V0KFsnLi4nLCAnLiddKTtcbmNvbnN0IHJlU3BlY2lhbHMgPSBuZXcgU2V0KCcoKS4qe30rP1tdXiRcXFxcIScpO1xuY29uc3QgcmVnRXhwRXNjYXBlID0gKHMpID0+IHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKTtcbi8vIGFueSBzaW5nbGUgdGhpbmcgb3RoZXIgdGhhbiAvXG5jb25zdCBxbWFyayA9ICdbXi9dJztcbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG5jb25zdCBzdGFyID0gcW1hcmsgKyAnKj8nO1xuLy8gdXNlICsgd2hlbiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0ICpzb21ldGhpbmcqIG1hdGNoZXMsIGJlY2F1c2UgdGhlICogaXNcbi8vIHRoZSBvbmx5IHRoaW5nIGluIHRoZSBwYXRoIHBvcnRpb24uXG5jb25zdCBzdGFyTm9FbXB0eSA9IHFtYXJrICsgJys/Jztcbi8vIHJlbW92ZSB0aGUgXFwgY2hhcnMgdGhhdCB3ZSBhZGRlZCBpZiB3ZSBlbmQgdXAgZG9pbmcgYSBub25tYWdpYyBjb21wYXJlXG4vLyBjb25zdCBkZXNsYXNoID0gKHM6IHN0cmluZykgPT4gcy5yZXBsYWNlKC9cXFxcKC4pL2csICckMScpXG5sZXQgSUQgPSAwO1xuZXhwb3J0IGNsYXNzIEFTVCB7XG4gICAgdHlwZTtcbiAgICAjcm9vdDtcbiAgICAjaGFzTWFnaWM7XG4gICAgI3VmbGFnID0gZmFsc2U7XG4gICAgI3BhcnRzID0gW107XG4gICAgI3BhcmVudDtcbiAgICAjcGFyZW50SW5kZXg7XG4gICAgI25lZ3M7XG4gICAgI2ZpbGxlZE5lZ3MgPSBmYWxzZTtcbiAgICAjb3B0aW9ucztcbiAgICAjdG9TdHJpbmc7XG4gICAgLy8gc2V0IHRvIHRydWUgaWYgaXQncyBhbiBleHRnbG9iIHdpdGggbm8gY2hpbGRyZW5cbiAgICAvLyAod2hpY2ggcmVhbGx5IG1lYW5zIG9uZSBjaGlsZCBvZiAnJylcbiAgICAjZW1wdHlFeHQgPSBmYWxzZTtcbiAgICBpZCA9ICsrSUQ7XG4gICAgZ2V0IGRlcHRoKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3BhcmVudD8uZGVwdGggPz8gLTEpICsgMTtcbiAgICB9XG4gICAgW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ0BAdHlwZSc6ICdBU1QnLFxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICByb290OiB0aGlzLiNyb290LmlkLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLiNwYXJlbnQ/LmlkLFxuICAgICAgICAgICAgZGVwdGg6IHRoaXMuZGVwdGgsXG4gICAgICAgICAgICBwYXJ0c0xlbmd0aDogdGhpcy4jcGFydHMubGVuZ3RoLFxuICAgICAgICAgICAgcGFydHM6IHRoaXMuI3BhcnRzLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih0eXBlLCBwYXJlbnQsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICAvLyBleHRnbG9icyBhcmUgaW5oZXJlbnRseSBtYWdpY2FsXG4gICAgICAgIGlmICh0eXBlKVxuICAgICAgICAgICAgdGhpcy4jaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICB0aGlzLiNwYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuI3Jvb3QgPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3Jvb3QgOiB0aGlzO1xuICAgICAgICB0aGlzLiNvcHRpb25zID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IG9wdGlvbnMgOiB0aGlzLiNyb290LiNvcHRpb25zO1xuICAgICAgICB0aGlzLiNuZWdzID0gdGhpcy4jcm9vdCA9PT0gdGhpcyA/IFtdIDogdGhpcy4jcm9vdC4jbmVncztcbiAgICAgICAgaWYgKHR5cGUgPT09ICchJyAmJiAhdGhpcy4jcm9vdC4jZmlsbGVkTmVncylcbiAgICAgICAgICAgIHRoaXMuI25lZ3MucHVzaCh0aGlzKTtcbiAgICAgICAgdGhpcy4jcGFyZW50SW5kZXggPSB0aGlzLiNwYXJlbnQgPyB0aGlzLiNwYXJlbnQuI3BhcnRzLmxlbmd0aCA6IDA7XG4gICAgfVxuICAgIGdldCBoYXNNYWdpYygpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLiNoYXNNYWdpYyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2hhc01hZ2ljO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAocC50eXBlIHx8IHAuaGFzTWFnaWMpXG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNoYXNNYWdpYyA9IHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdGU6IHdpbGwgYmUgdW5kZWZpbmVkIHVudGlsIHdlIGdlbmVyYXRlIHRoZSByZWdleHAgc3JjIGFuZCBmaW5kIG91dFxuICAgICAgICByZXR1cm4gdGhpcy4jaGFzTWFnaWM7XG4gICAgfVxuICAgIC8vIHJlY29uc3RydWN0cyB0aGUgcGF0dGVyblxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3RvU3RyaW5nICE9PSB1bmRlZmluZWQgPyB0aGlzLiN0b1N0cmluZ1xuICAgICAgICAgICAgOiAhdGhpcy50eXBlID9cbiAgICAgICAgICAgICAgICAodGhpcy4jdG9TdHJpbmcgPSB0aGlzLiNwYXJ0cy5tYXAocCA9PiBTdHJpbmcocCkpLmpvaW4oJycpKVxuICAgICAgICAgICAgICAgIDogKHRoaXMuI3RvU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcoJyArXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNwYXJ0cy5tYXAocCA9PiBTdHJpbmcocCkpLmpvaW4oJ3wnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKScpKTtcbiAgICB9XG4gICAgI2ZpbGxOZWdzKCkge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMgIT09IHRoaXMuI3Jvb3QpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBvbmx5IGNhbGwgb24gcm9vdCcpO1xuICAgICAgICBpZiAodGhpcy4jZmlsbGVkTmVncylcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAvLyBjYWxsIHRvU3RyaW5nKCkgb25jZSB0byBmaWxsIHRoaXMgb3V0XG4gICAgICAgIHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy4jZmlsbGVkTmVncyA9IHRydWU7XG4gICAgICAgIGxldCBuO1xuICAgICAgICB3aGlsZSAoKG4gPSB0aGlzLiNuZWdzLnBvcCgpKSkge1xuICAgICAgICAgICAgaWYgKG4udHlwZSAhPT0gJyEnKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgLy8gd2FsayB1cCB0aGUgdHJlZSwgYXBwZW5kaW5nIGV2ZXJ0aGluZyB0aGF0IGNvbWVzIEFGVEVSIHBhcmVudEluZGV4XG4gICAgICAgICAgICBsZXQgcCA9IG47XG4gICAgICAgICAgICBsZXQgcHAgPSBwLiNwYXJlbnQ7XG4gICAgICAgICAgICB3aGlsZSAocHApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcC4jcGFyZW50SW5kZXggKyAxOyAhcHAudHlwZSAmJiBpIDwgcHAuI3BhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBuLiNwYXJ0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgcGFydCBpbiBleHRnbG9iIEFTVD8/Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydC5jb3B5SW4ocHAuI3BhcnRzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwID0gcHA7XG4gICAgICAgICAgICAgICAgcHAgPSBwLiNwYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHB1c2goLi4ucGFydHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHBhcnRzKSB7XG4gICAgICAgICAgICBpZiAocCA9PT0gJycpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAhKHAgaW5zdGFuY2VvZiBfYSAmJiBwLiNwYXJlbnQgPT09IHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhcnQ6ICcgKyBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNwYXJ0cy5wdXNoKHApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gdGhpcy50eXBlID09PSBudWxsID9cbiAgICAgICAgICAgIHRoaXMuI3BhcnRzXG4gICAgICAgICAgICAgICAgLnNsaWNlKClcbiAgICAgICAgICAgICAgICAubWFwKHAgPT4gKHR5cGVvZiBwID09PSAnc3RyaW5nJyA/IHAgOiBwLnRvSlNPTigpKSlcbiAgICAgICAgICAgIDogW3RoaXMudHlwZSwgLi4udGhpcy4jcGFydHMubWFwKHAgPT4gcC50b0pTT04oKSldO1xuICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KCkgJiYgIXRoaXMudHlwZSlcbiAgICAgICAgICAgIHJldC51bnNoaWZ0KFtdKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFbmQoKSAmJlxuICAgICAgICAgICAgKHRoaXMgPT09IHRoaXMuI3Jvb3QgfHxcbiAgICAgICAgICAgICAgICAodGhpcy4jcm9vdC4jZmlsbGVkTmVncyAmJiB0aGlzLiNwYXJlbnQ/LnR5cGUgPT09ICchJykpKSB7XG4gICAgICAgICAgICByZXQucHVzaCh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgaXNTdGFydCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gaWYgKHRoaXMudHlwZSkgcmV0dXJuICEhdGhpcy4jcGFyZW50Py5pc1N0YXJ0KClcbiAgICAgICAgaWYgKCF0aGlzLiNwYXJlbnQ/LmlzU3RhcnQoKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuI3BhcmVudEluZGV4ID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIGlmIGV2ZXJ5dGhpbmcgQUhFQUQgb2YgdGhpcyBpcyBhIG5lZ2F0aW9uLCB0aGVuIGl0J3Mgc3RpbGwgdGhlIFwic3RhcnRcIlxuICAgICAgICBjb25zdCBwID0gdGhpcy4jcGFyZW50O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuI3BhcmVudEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBwID0gcC4jcGFydHNbaV07XG4gICAgICAgICAgICBpZiAoIShwcCBpbnN0YW5jZW9mIF9hICYmIHBwLnR5cGUgPT09ICchJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlzRW5kKCkge1xuICAgICAgICBpZiAodGhpcy4jcm9vdCA9PT0gdGhpcylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy4jcGFyZW50Py50eXBlID09PSAnIScpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLiNwYXJlbnQ/LmlzRW5kKCkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy50eXBlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3BhcmVudD8uaXNFbmQoKTtcbiAgICAgICAgLy8gaWYgbm90IHJvb3QsIGl0J2xsIGFsd2F5cyBoYXZlIGEgcGFyZW50XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBjb25zdCBwbCA9IHRoaXMuI3BhcmVudCA/IHRoaXMuI3BhcmVudC4jcGFydHMubGVuZ3RoIDogMDtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhcmVudEluZGV4ID09PSBwbCAtIDE7XG4gICAgfVxuICAgIGNvcHlJbihwYXJ0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICB0aGlzLnB1c2gocGFydCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucHVzaChwYXJ0LmNsb25lKHRoaXMpKTtcbiAgICB9XG4gICAgY2xvbmUocGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGMgPSBuZXcgX2EodGhpcy50eXBlLCBwYXJlbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGMuY29weUluKHApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlQVNUKHN0ciwgYXN0LCBwb3MsIG9wdCwgZXh0RGVwdGgpIHtcbiAgICAgICAgY29uc3QgbWF4RGVwdGggPSBvcHQubWF4RXh0Z2xvYlJlY3Vyc2lvbiA/PyAyO1xuICAgICAgICBsZXQgZXNjYXBpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgbGV0IGJyYWNlU3RhcnQgPSAtMTtcbiAgICAgICAgbGV0IGJyYWNlTmVnID0gZmFsc2U7XG4gICAgICAgIGlmIChhc3QudHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiBhIGV4dGdsb2IsIGFwcGVuZCB1bnRpbCB3ZSBmaW5kIGEgc3RhcnRcbiAgICAgICAgICAgIGxldCBpID0gcG9zO1xuICAgICAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICAgICAgd2hpbGUgKGkgPCBzdHIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQXQoaSsrKTtcbiAgICAgICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0cyB0aGF0IGFyZSBlc2NhcGVkXG4gICAgICAgICAgICAgICAgaWYgKGVzY2FwaW5nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5CcmFjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gYnJhY2VTdGFydCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09ICddJyAmJiAhKGkgPT09IGJyYWNlU3RhcnQgKyAyICYmIGJyYWNlTmVnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYnJhY2VOZWcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRvIGNoZWNrIGZvciBhZG9wdGlvbiBoZXJlLCBiZWNhdXNlIHRoYXQnc1xuICAgICAgICAgICAgICAgIC8vIGRvbmUgYXQgdGhlIG90aGVyIHJlY3Vyc2lvbiBwb2ludC5cbiAgICAgICAgICAgICAgICBjb25zdCBkb1JlY3Vyc2UgPSAhb3B0Lm5vZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgIGlzRXh0Z2xvYlR5cGUoYykgJiZcbiAgICAgICAgICAgICAgICAgICAgc3RyLmNoYXJBdChpKSA9PT0gJygnICYmXG4gICAgICAgICAgICAgICAgICAgIGV4dERlcHRoIDw9IG1heERlcHRoO1xuICAgICAgICAgICAgICAgIGlmIChkb1JlY3Vyc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYXN0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICAgICAgYWNjID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dCA9IG5ldyBfYShjLCBhc3QpO1xuICAgICAgICAgICAgICAgICAgICBpID0gX2EuI3BhcnNlQVNUKHN0ciwgZXh0LCBpLCBvcHQsIGV4dERlcHRoICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGFzdC5wdXNoKGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzdC5wdXNoKGFjYyk7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzb21lIGtpbmQgb2YgZXh0Z2xvYiwgcG9zIGlzIGF0IHRoZSAoXG4gICAgICAgIC8vIGZpbmQgdGhlIG5leHQgfCBvciApXG4gICAgICAgIGxldCBpID0gcG9zICsgMTtcbiAgICAgICAgbGV0IHBhcnQgPSBuZXcgX2EobnVsbCwgYXN0KTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICAgICAgbGV0IGFjYyA9ICcnO1xuICAgICAgICB3aGlsZSAoaSA8IHN0ci5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBzdHIuY2hhckF0KGkrKyk7XG4gICAgICAgICAgICAvLyBzdGlsbCBhY2N1bXVsYXRlIGVzY2FwZXMgYXQgdGhpcyBwb2ludCwgYnV0IHdlIGRvIGlnbm9yZVxuICAgICAgICAgICAgLy8gc3RhcnRzIHRoYXQgYXJlIGVzY2FwZWRcbiAgICAgICAgICAgIGlmIChlc2NhcGluZyB8fCBjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9ICFlc2NhcGluZztcbiAgICAgICAgICAgICAgICBhY2MgKz0gYztcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbkJyYWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGJyYWNlU3RhcnQgKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXicgfHwgYyA9PT0gJyEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmFjZU5lZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PT0gJ10nICYmICEoaSA9PT0gYnJhY2VTdGFydCArIDIgJiYgYnJhY2VOZWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGluQnJhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBpbkJyYWNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmFjZVN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICBicmFjZU5lZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGFjYyArPSBjO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZG9SZWN1cnNlID0gIW9wdC5ub2V4dCAmJlxuICAgICAgICAgICAgICAgIGlzRXh0Z2xvYlR5cGUoYykgJiZcbiAgICAgICAgICAgICAgICBzdHIuY2hhckF0KGkpID09PSAnKCcgJiZcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgLSB0aGUgbWF4RGVwdGggaXMgc3VmZmljaWVudCBoZXJlICovXG4gICAgICAgICAgICAgICAgKGV4dERlcHRoIDw9IG1heERlcHRoIHx8IChhc3QgJiYgYXN0LiNjYW5BZG9wdFR5cGUoYykpKTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBpZiAoZG9SZWN1cnNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwdGhBZGQgPSBhc3QgJiYgYXN0LiNjYW5BZG9wdFR5cGUoYykgPyAwIDogMTtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBleHQgPSBuZXcgX2EoYywgcGFydCk7XG4gICAgICAgICAgICAgICAgcGFydC5wdXNoKGV4dCk7XG4gICAgICAgICAgICAgICAgaSA9IF9hLiNwYXJzZUFTVChzdHIsIGV4dCwgaSwgb3B0LCBleHREZXB0aCArIGRlcHRoQWRkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnfCcpIHtcbiAgICAgICAgICAgICAgICBwYXJ0LnB1c2goYWNjKTtcbiAgICAgICAgICAgICAgICBhY2MgPSAnJztcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIHBhcnQgPSBuZXcgX2EobnVsbCwgYXN0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnKScpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWNjID09PSAnJyAmJiBhc3QuI3BhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhc3QuI2VtcHR5RXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFydC5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgYWNjID0gJyc7XG4gICAgICAgICAgICAgICAgYXN0LnB1c2goLi4ucGFydHMsIHBhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWNjICs9IGM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdW5maW5pc2hlZCBleHRnbG9iXG4gICAgICAgIC8vIGlmIHdlIGdvdCBoZXJlLCBpdCB3YXMgYSBtYWxmb3JtZWQgZXh0Z2xvYiEgbm90IGFuIGV4dGdsb2IsIGJ1dFxuICAgICAgICAvLyBtYXliZSBzb21ldGhpbmcgZWxzZSBpbiB0aGVyZS5cbiAgICAgICAgYXN0LnR5cGUgPSBudWxsO1xuICAgICAgICBhc3QuI2hhc01hZ2ljID0gdW5kZWZpbmVkO1xuICAgICAgICBhc3QuI3BhcnRzID0gW3N0ci5zdWJzdHJpbmcocG9zIC0gMSldO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG4gICAgI2NhbkFkb3B0V2l0aFNwYWNlKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjYW5BZG9wdChjaGlsZCwgYWRvcHRpb25XaXRoU3BhY2VNYXApO1xuICAgIH1cbiAgICAjY2FuQWRvcHQoY2hpbGQsIG1hcCA9IGFkb3B0aW9uTWFwKSB7XG4gICAgICAgIGlmICghY2hpbGQgfHxcbiAgICAgICAgICAgIHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgIGNoaWxkLnR5cGUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIGNoaWxkLiNwYXJ0cy5sZW5ndGggIT09IDEgfHxcbiAgICAgICAgICAgIHRoaXMudHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdjID0gY2hpbGQuI3BhcnRzWzBdO1xuICAgICAgICBpZiAoIWdjIHx8IHR5cGVvZiBnYyAhPT0gJ29iamVjdCcgfHwgZ2MudHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiNjYW5BZG9wdFR5cGUoZ2MudHlwZSwgbWFwKTtcbiAgICB9XG4gICAgI2NhbkFkb3B0VHlwZShjLCBtYXAgPSBhZG9wdGlvbkFueU1hcCkge1xuICAgICAgICByZXR1cm4gISFtYXAuZ2V0KHRoaXMudHlwZSk/LmluY2x1ZGVzKGMpO1xuICAgIH1cbiAgICAjYWRvcHRXaXRoU3BhY2UoY2hpbGQsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGdjID0gY2hpbGQuI3BhcnRzWzBdO1xuICAgICAgICBjb25zdCBibGFuayA9IG5ldyBfYShudWxsLCBnYywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgYmxhbmsuI3BhcnRzLnB1c2goJycpO1xuICAgICAgICBnYy5wdXNoKGJsYW5rKTtcbiAgICAgICAgdGhpcy4jYWRvcHQoY2hpbGQsIGluZGV4KTtcbiAgICB9XG4gICAgI2Fkb3B0KGNoaWxkLCBpbmRleCkge1xuICAgICAgICBjb25zdCBnYyA9IGNoaWxkLiNwYXJ0c1swXTtcbiAgICAgICAgdGhpcy4jcGFydHMuc3BsaWNlKGluZGV4LCAxLCAuLi5nYy4jcGFydHMpO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgZ2MuI3BhcnRzKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIHAuI3BhcmVudCA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jdG9TdHJpbmcgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgICNjYW5Vc3VycFR5cGUoYykge1xuICAgICAgICBjb25zdCBtID0gdXN1cnBNYXAuZ2V0KHRoaXMudHlwZSk7XG4gICAgICAgIHJldHVybiAhIW0/LmhhcyhjKTtcbiAgICB9XG4gICAgI2NhblVzdXJwKGNoaWxkKSB7XG4gICAgICAgIGlmICghY2hpbGQgfHxcbiAgICAgICAgICAgIHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgICAgIGNoaWxkLnR5cGUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIGNoaWxkLiNwYXJ0cy5sZW5ndGggIT09IDEgfHxcbiAgICAgICAgICAgIHRoaXMudHlwZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgdGhpcy4jcGFydHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2MgPSBjaGlsZC4jcGFydHNbMF07XG4gICAgICAgIGlmICghZ2MgfHwgdHlwZW9mIGdjICE9PSAnb2JqZWN0JyB8fCBnYy50eXBlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuI2NhblVzdXJwVHlwZShnYy50eXBlKTtcbiAgICB9XG4gICAgI3VzdXJwKGNoaWxkKSB7XG4gICAgICAgIGNvbnN0IG0gPSB1c3VycE1hcC5nZXQodGhpcy50eXBlKTtcbiAgICAgICAgY29uc3QgZ2MgPSBjaGlsZC4jcGFydHNbMF07XG4gICAgICAgIGNvbnN0IG50ID0gbT8uZ2V0KGdjLnR5cGUpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgLSBpbXBvc3NpYmxlICovXG4gICAgICAgIGlmICghbnQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMuI3BhcnRzID0gZ2MuI3BhcnRzO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy4jcGFydHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBwLiNwYXJlbnQgPSB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudHlwZSA9IG50O1xuICAgICAgICB0aGlzLiN0b1N0cmluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4jZW1wdHlFeHQgPSBmYWxzZTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21HbG9iKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBjb25zdCBhc3QgPSBuZXcgX2EobnVsbCwgdW5kZWZpbmVkLCBvcHRpb25zKTtcbiAgICAgICAgX2EuI3BhcnNlQVNUKHBhdHRlcm4sIGFzdCwgMCwgb3B0aW9ucywgMCk7XG4gICAgICAgIHJldHVybiBhc3Q7XG4gICAgfVxuICAgIC8vIHJldHVybnMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB0aGVyZSdzIG1hZ2ljLCBvciB0aGUgdW5lc2NhcGVkXG4gICAgLy8gc3RyaW5nIGlmIG5vdC5cbiAgICB0b01NUGF0dGVybigpIHtcbiAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHJvb3RcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzICE9PSB0aGlzLiNyb290KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3Jvb3QudG9NTVBhdHRlcm4oKTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgY29uc3QgZ2xvYiA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgW3JlLCBib2R5LCBoYXNNYWdpYywgdWZsYWddID0gdGhpcy50b1JlZ0V4cFNvdXJjZSgpO1xuICAgICAgICAvLyBpZiB3ZSdyZSBpbiBub2Nhc2UgbW9kZSwgYW5kIG5vdCBub2Nhc2VNYWdpY09ubHksIHRoZW4gd2UgZG9cbiAgICAgICAgLy8gc3RpbGwgbmVlZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpZiB3ZSBoYXZlIHRvIGNhc2UtaW5zZW5zaXRpdmVseVxuICAgICAgICAvLyBtYXRjaCBjYXBpdGFsL2xvd2VyY2FzZSBjaGFyYWN0ZXJzLlxuICAgICAgICBjb25zdCBhbnlNYWdpYyA9IGhhc01hZ2ljIHx8XG4gICAgICAgICAgICB0aGlzLiNoYXNNYWdpYyB8fFxuICAgICAgICAgICAgKHRoaXMuI29wdGlvbnMubm9jYXNlICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuI29wdGlvbnMubm9jYXNlTWFnaWNPbmx5ICYmXG4gICAgICAgICAgICAgICAgZ2xvYi50b1VwcGVyQ2FzZSgpICE9PSBnbG9iLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoIWFueU1hZ2ljKSB7XG4gICAgICAgICAgICByZXR1cm4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmbGFncyA9ICh0aGlzLiNvcHRpb25zLm5vY2FzZSA/ICdpJyA6ICcnKSArICh1ZmxhZyA/ICd1JyA6ICcnKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFJlZ0V4cChgXiR7cmV9JGAsIGZsYWdzKSwge1xuICAgICAgICAgICAgX3NyYzogcmUsXG4gICAgICAgICAgICBfZ2xvYjogZ2xvYixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jb3B0aW9ucztcbiAgICB9XG4gICAgLy8gcmV0dXJucyB0aGUgc3RyaW5nIG1hdGNoLCB0aGUgcmVnZXhwIHNvdXJjZSwgd2hldGhlciB0aGVyZSdzIG1hZ2ljXG4gICAgLy8gaW4gdGhlIHJlZ2V4cCAoc28gYSByZWd1bGFyIGV4cHJlc3Npb24gaXMgcmVxdWlyZWQpIGFuZCB3aGV0aGVyIG9yXG4gICAgLy8gbm90IHRoZSB1ZmxhZyBpcyBuZWVkZWQgZm9yIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gKGZvciBwb3NpeCBjbGFzc2VzKVxuICAgIC8vIFRPRE86IGluc3RlYWQgb2YgaW5qZWN0aW5nIHRoZSBzdGFydC9lbmQgYXQgdGhpcyBwb2ludCwganVzdCByZXR1cm5cbiAgICAvLyB0aGUgQk9EWSBvZiB0aGUgcmVnZXhwLCBhbG9uZyB3aXRoIHRoZSBzdGFydC9lbmQgcG9ydGlvbnMgc3VpdGFibGVcbiAgICAvLyBmb3IgYmluZGluZyB0aGUgc3RhcnQvZW5kIGluIGVpdGhlciBhIGpvaW5lZCBmdWxsLXBhdGggbWFrZVJlIGNvbnRleHRcbiAgICAvLyAod2hlcmUgd2UgYmluZCB0byAoXnwvKSwgb3IgYSBzdGFuZGFsb25lIG1hdGNoUGFydCBjb250ZXh0ICh3aGVyZVxuICAgIC8vIHdlIGJpbmQgdG8gXiwgYW5kIG5vdCAvKS4gIE90aGVyd2lzZSBzbGFzaGVzIGdldCBkdXBlZCFcbiAgICAvL1xuICAgIC8vIEluIHBhcnQtbWF0Y2hpbmcgbW9kZSwgdGhlIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiBeKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiBeXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogXig/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBub3QgaXNFbmQoKTogbm90aGluZ1xuICAgIC8vIC0gZWxzZTogJFxuICAgIC8vXG4gICAgLy8gSW4gZnVsbC1wYXRoIG1hdGNoaW5nIG1vZGUsIHdlIHB1dCB0aGUgc2xhc2ggYXQgdGhlIFNUQVJUIG9mIHRoZVxuICAgIC8vIHBhdHRlcm4sIHNvIHN0YXJ0IGlzOlxuICAgIC8vIC0gaWYgZmlyc3QgcGF0dGVybjogc2FtZSBhcyBwYXJ0LW1hdGNoaW5nIG1vZGVcbiAgICAvLyAtIGlmIG5vdCBpc1N0YXJ0KCk6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAvKD8hXFwuXFwuPyg/OiR8LykpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAvXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogLyg/IVxcLilcbiAgICAvLyBlbmQgaXM6XG4gICAgLy8gLSBpZiBsYXN0IHBhdHRlcm4sIHNhbWUgYXMgcGFydC1tYXRjaGluZyBtb2RlXG4gICAgLy8gLSBlbHNlIG5vdGhpbmdcbiAgICAvL1xuICAgIC8vIEFsd2F5cyBwdXQgdGhlICg/OiR8Lykgb24gbmVnYXRlZCB0YWlscywgdGhvdWdoLCBiZWNhdXNlIHRoYXQgaGFzIHRvIGJlXG4gICAgLy8gdGhlcmUgdG8gYmluZCB0aGUgZW5kIG9mIHRoZSBuZWdhdGVkIHBhdHRlcm4gcG9ydGlvbiwgYW5kIGl0J3MgZWFzaWVyIHRvXG4gICAgLy8ganVzdCBzdGljayBpdCBpbiBub3cgcmF0aGVyIHRoYW4gdHJ5IHRvIGluamVjdCBpdCBsYXRlciBpbiB0aGUgbWlkZGxlIG9mXG4gICAgLy8gdGhlIHBhdHRlcm4uXG4gICAgLy9cbiAgICAvLyBXZSBjYW4ganVzdCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGVuZCwgYW5kIGxlYXZlIGl0IHVwIHRvIHRoZSBjYWxsZXJcbiAgICAvLyB0byBrbm93IHdoZXRoZXIgaXQncyBnb2luZyB0byBiZSB1c2VkIGpvaW5lZCBvciBpbiBwYXJ0cy5cbiAgICAvLyBBbmQsIGlmIHRoZSBzdGFydCBpcyBhZGp1c3RlZCBzbGlnaHRseSwgY2FuIGRvIHRoZSBzYW1lIHRoZXJlOlxuICAgIC8vIC0gaWYgbm90IGlzU3RhcnQ6IG5vdGhpbmdcbiAgICAvLyAtIGlmIHRyYXZlcnNhbCBwb3NzaWJsZSwgYnV0IG5vdCBhbGxvd2VkOiAoPzovfF4pKD8hXFwuXFwuPyQpXG4gICAgLy8gLSBpZiBkb3RzIGFsbG93ZWQgb3Igbm90IHBvc3NpYmxlOiAoPzovfF4pXG4gICAgLy8gLSBpZiBkb3RzIHBvc3NpYmxlIGFuZCBub3QgYWxsb3dlZDogKD86L3xeKSg/IVxcLilcbiAgICAvL1xuICAgIC8vIEJ1dCBpdCdzIGJldHRlciB0byBoYXZlIGEgc2ltcGxlciBiaW5kaW5nIHdpdGhvdXQgYSBjb25kaXRpb25hbCwgZm9yXG4gICAgLy8gcGVyZm9ybWFuY2UsIHNvIHByb2JhYmx5IGJldHRlciB0byByZXR1cm4gYm90aCBzdGFydCBvcHRpb25zLlxuICAgIC8vXG4gICAgLy8gVGhlbiB0aGUgY2FsbGVyIGp1c3QgaWdub3JlcyB0aGUgZW5kIGlmIGl0J3Mgbm90IHRoZSBmaXJzdCBwYXR0ZXJuLFxuICAgIC8vIGFuZCB0aGUgc3RhcnQgYWx3YXlzIGdldHMgYXBwbGllZC5cbiAgICAvL1xuICAgIC8vIEJ1dCB0aGF0J3MgYWx3YXlzIGdvaW5nIHRvIGJlICQgaWYgaXQncyB0aGUgZW5kaW5nIHBhdHRlcm4sIG9yIG5vdGhpbmcsXG4gICAgLy8gc28gdGhlIGNhbGxlciBjYW4ganVzdCBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gYnVpbGRpbmcuXG4gICAgLy9cbiAgICAvLyBTbyB0aGUgdG9kbyBpczpcbiAgICAvLyAtIGJldHRlciBkZXRlY3Qgd2hhdCBraW5kIG9mIHN0YXJ0IGlzIG5lZWRlZFxuICAgIC8vIC0gcmV0dXJuIGJvdGggZmxhdm9ycyBvZiBzdGFydGluZyBwYXR0ZXJuXG4gICAgLy8gLSBhdHRhY2ggJCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuIHdoZW4gY3JlYXRpbmcgdGhlIGFjdHVhbCBSZWdFeHBcbiAgICAvL1xuICAgIC8vIEFoLCBidXQgd2FpdCwgbm8sIHRoYXQgYWxsIG9ubHkgYXBwbGllcyB0byB0aGUgcm9vdCB3aGVuIHRoZSBmaXJzdCBwYXR0ZXJuXG4gICAgLy8gaXMgbm90IGFuIGV4dGdsb2IuIElmIHRoZSBmaXJzdCBwYXR0ZXJuIElTIGFuIGV4dGdsb2IsIHRoZW4gd2UgbmVlZCBhbGxcbiAgICAvLyB0aGF0IGRvdCBwcmV2ZW50aW9uIGJpeiB0byBsaXZlIGluIHRoZSBleHRnbG9iIHBvcnRpb25zLCBiZWNhdXNlIGVnXG4gICAgLy8gKygqfC54KikgY2FuIG1hdGNoIC54eSBidXQgbm90IC55eC5cbiAgICAvL1xuICAgIC8vIFNvLCByZXR1cm4gdGhlIHR3byBmbGF2b3JzIGlmIGl0J3MgI3Jvb3QgYW5kIHRoZSBmaXJzdCBjaGlsZCBpcyBub3QgYW5cbiAgICAvLyBBU1QsIG90aGVyd2lzZSBsZWF2ZSBpdCB0byB0aGUgY2hpbGQgQVNUIHRvIGhhbmRsZSBpdCwgYW5kIHRoZXJlLFxuICAgIC8vIHVzZSB0aGUgKD86XnwvKSBzdHlsZSBvZiBzdGFydCBiaW5kaW5nLlxuICAgIC8vXG4gICAgLy8gRXZlbiBzaW1wbGlmaWVkIGZ1cnRoZXI6XG4gICAgLy8gLSBTaW5jZSB0aGUgc3RhcnQgZm9yIGEgam9pbiBpcyBlZyAvKD8hXFwuKSBhbmQgdGhlIHN0YXJ0IGZvciBhIHBhcnRcbiAgICAvLyBpcyBeKD8hXFwuKSwgd2UgY2FuIGp1c3QgcHJlcGVuZCAoPyFcXC4pIHRvIHRoZSBwYXR0ZXJuIChlaXRoZXIgcm9vdFxuICAgIC8vIG9yIHN0YXJ0IG9yIHdoYXRldmVyKSBhbmQgcHJlcGVuZCBeIG9yIC8gYXQgdGhlIFJlZ2V4cCBjb25zdHJ1Y3Rpb24uXG4gICAgdG9SZWdFeHBTb3VyY2UoYWxsb3dEb3QpIHtcbiAgICAgICAgY29uc3QgZG90ID0gYWxsb3dEb3QgPz8gISF0aGlzLiNvcHRpb25zLmRvdDtcbiAgICAgICAgaWYgKHRoaXMuI3Jvb3QgPT09IHRoaXMpIHtcbiAgICAgICAgICAgIHRoaXMuI2ZsYXR0ZW4oKTtcbiAgICAgICAgICAgIHRoaXMuI2ZpbGxOZWdzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0V4dGdsb2JBU1QodGhpcykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vRW1wdHkgPSB0aGlzLmlzU3RhcnQoKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaXNFbmQoKSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLiNwYXJ0cy5zb21lKHMgPT4gdHlwZW9mIHMgIT09ICdzdHJpbmcnKTtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHRoaXMuI3BhcnRzXG4gICAgICAgICAgICAgICAgLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbcmUsIF8sIGhhc01hZ2ljLCB1ZmxhZ10gPSB0eXBlb2YgcCA9PT0gJ3N0cmluZycgP1xuICAgICAgICAgICAgICAgICAgICBfYS4jcGFyc2VHbG9iKHAsIHRoaXMuI2hhc01hZ2ljLCBub0VtcHR5KVxuICAgICAgICAgICAgICAgICAgICA6IHAudG9SZWdFeHBTb3VyY2UoYWxsb3dEb3QpO1xuICAgICAgICAgICAgICAgIHRoaXMuI2hhc01hZ2ljID0gdGhpcy4jaGFzTWFnaWMgfHwgaGFzTWFnaWM7XG4gICAgICAgICAgICAgICAgdGhpcy4jdWZsYWcgPSB0aGlzLiN1ZmxhZyB8fCB1ZmxhZztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgICAgIGxldCBzdGFydCA9ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGFydCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLiNwYXJ0c1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc3RyaW5nIHRoYXQgd2lsbCBtYXRjaCB0aGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4sXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGRvdHMgYW5kIHN1Y2guXG4gICAgICAgICAgICAgICAgICAgIC8vICcuJyBhbmQgJy4uJyBjYW5ub3QgbWF0Y2ggdW5sZXNzIHRoZSBwYXR0ZXJuIGlzIHRoYXQgZXhhY3RseSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZXZlbiBpZiBpdCBzdGFydHMgd2l0aCAuIG9yIGRvdDp0cnVlIGlzIHNldC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG90VHJhdkFsbG93ZWQgPSB0aGlzLiNwYXJ0cy5sZW5ndGggPT09IDEgJiYganVzdERvdHMuaGFzKHRoaXMuI3BhcnRzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb3RUcmF2QWxsb3dlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBzID0gYWRkUGF0dGVyblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIHBvc3NpYmlsaXR5IG9mIG1hdGNoaW5nIC4gb3IgLi4sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgcHJldmVudCB0aGF0LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZE5vVHJhdiA9IFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG90cyBhcmUgYWxsb3dlZCwgYW5kIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFsgb3IgLlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRvdCAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoMCkpKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBwYXR0ZXJuIHN0YXJ0cyB3aXRoIFxcLiwgYW5kIHRoZW4gWyBvciAuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNyYy5zdGFydHNXaXRoKCdcXFxcLicpICYmIGFwcy5oYXMoc3JjLmNoYXJBdCgyKSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHBhdHRlcm4gc3RhcnRzIHdpdGggXFwuXFwuLCBhbmQgdGhlbiBbIG9yIC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3JjLnN0YXJ0c1dpdGgoJ1xcXFwuXFxcXC4nKSAmJiBhcHMuaGFzKHNyYy5jaGFyQXQoNCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gcHJldmVudCBkb3RzIGlmIGl0IGNhbid0IG1hdGNoIGEgZG90LCBvciBpZiBhXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWItcGF0dGVybiB3aWxsIGJlIHByZXZlbnRpbmcgaXQgYW55d2F5LlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZE5vRG90ID0gIWRvdCAmJiAhYWxsb3dEb3QgJiYgYXBzLmhhcyhzcmMuY2hhckF0KDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkTm9UcmF2ID8gc3RhcnROb1RyYXZlcnNhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5lZWROb0RvdCA/IHN0YXJ0Tm9Eb3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhcHBlbmQgdGhlIFwiZW5kIG9mIHBhdGggcG9ydGlvblwiIHBhdHRlcm4gdG8gbmVnYXRpb24gdGFpbHNcbiAgICAgICAgICAgIGxldCBlbmQgPSAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKCkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLiNyb290LiNmaWxsZWROZWdzICYmXG4gICAgICAgICAgICAgICAgdGhpcy4jcGFyZW50Py50eXBlID09PSAnIScpIHtcbiAgICAgICAgICAgICAgICBlbmQgPSAnKD86JHxcXFxcLyknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmluYWwgPSBzdGFydCArIHNyYyArIGVuZDtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZmluYWwsXG4gICAgICAgICAgICAgICAgdW5lc2NhcGUoc3JjKSxcbiAgICAgICAgICAgICAgICAodGhpcy4jaGFzTWFnaWMgPSAhIXRoaXMuI2hhc01hZ2ljKSxcbiAgICAgICAgICAgICAgICB0aGlzLiN1ZmxhZyxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIGJvZHkgKnR3aWNlKiBpZiBpdCdzIGEgcmVwZWF0IHBhdHRlcm5cbiAgICAgICAgLy8gYXQgdGhlIHN0YXJ0LCBvbmNlIGluIG5vZG90IG1vZGUsIHRoZW4gYWdhaW4gaW4gZG90IG1vZGUsIHNvIGFcbiAgICAgICAgLy8gcGF0dGVybiBsaWtlICooPykgY2FuIG1hdGNoICd4LnknXG4gICAgICAgIGNvbnN0IHJlcGVhdGVkID0gdGhpcy50eXBlID09PSAnKicgfHwgdGhpcy50eXBlID09PSAnKyc7XG4gICAgICAgIC8vIHNvbWUga2luZCBvZiBleHRnbG9iXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy50eXBlID09PSAnIScgPyAnKD86KD8hKD86JyA6ICcoPzonO1xuICAgICAgICBsZXQgYm9keSA9IHRoaXMuI3BhcnRzVG9SZWdFeHAoZG90KTtcbiAgICAgICAgaWYgKHRoaXMuaXNTdGFydCgpICYmIHRoaXMuaXNFbmQoKSAmJiAhYm9keSAmJiB0aGlzLnR5cGUgIT09ICchJykge1xuICAgICAgICAgICAgLy8gaW52YWxpZCBleHRnbG9iLCBoYXMgdG8gYXQgbGVhc3QgYmUgKnNvbWV0aGluZyogcHJlc2VudCwgaWYgaXQnc1xuICAgICAgICAgICAgLy8gdGhlIGVudGlyZSBwYXRoIHBvcnRpb24uXG4gICAgICAgICAgICBjb25zdCBzID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgICAgICAgbWUuI3BhcnRzID0gW3NdO1xuICAgICAgICAgICAgbWUudHlwZSA9IG51bGw7XG4gICAgICAgICAgICBtZS4jaGFzTWFnaWMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gW3MsIHVuZXNjYXBlKHRoaXMudG9TdHJpbmcoKSksIGZhbHNlLCBmYWxzZV07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGJvZHlEb3RBbGxvd2VkID0gIXJlcGVhdGVkIHx8IGFsbG93RG90IHx8IGRvdCB8fCAhc3RhcnROb0RvdCA/XG4gICAgICAgICAgICAnJ1xuICAgICAgICAgICAgOiB0aGlzLiNwYXJ0c1RvUmVnRXhwKHRydWUpO1xuICAgICAgICBpZiAoYm9keURvdEFsbG93ZWQgPT09IGJvZHkpIHtcbiAgICAgICAgICAgIGJvZHlEb3RBbGxvd2VkID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHlEb3RBbGxvd2VkKSB7XG4gICAgICAgICAgICBib2R5ID0gYCg/OiR7Ym9keX0pKD86JHtib2R5RG90QWxsb3dlZH0pKj9gO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFuIGVtcHR5ICEoKSBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gYSBzdGFyTm9FbXB0eVxuICAgICAgICBsZXQgZmluYWwgPSAnJztcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJyEnICYmIHRoaXMuI2VtcHR5RXh0KSB7XG4gICAgICAgICAgICBmaW5hbCA9ICh0aGlzLmlzU3RhcnQoKSAmJiAhZG90ID8gc3RhcnROb0RvdCA6ICcnKSArIHN0YXJOb0VtcHR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY2xvc2UgPSB0aGlzLnR5cGUgPT09ICchJyA/XG4gICAgICAgICAgICAgICAgLy8gISgpIG11c3QgbWF0Y2ggc29tZXRoaW5nLGJ1dCAhKHgpIGNhbiBtYXRjaCAnJ1xuICAgICAgICAgICAgICAgICcpKScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5pc1N0YXJ0KCkgJiYgIWRvdCAmJiAhYWxsb3dEb3QgPyBzdGFydE5vRG90IDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgc3RhciArXG4gICAgICAgICAgICAgICAgICAgICcpJ1xuICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnQCcgPyAnKSdcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnR5cGUgPT09ICc/JyA/ICcpPydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy50eXBlID09PSAnKycgJiYgYm9keURvdEFsbG93ZWQgPyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHlwZSA9PT0gJyonICYmIGJvZHlEb3RBbGxvd2VkID8gYCk/YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGApJHt0aGlzLnR5cGV9YDtcbiAgICAgICAgICAgIGZpbmFsID0gc3RhcnQgKyBib2R5ICsgY2xvc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGZpbmFsLFxuICAgICAgICAgICAgdW5lc2NhcGUoYm9keSksXG4gICAgICAgICAgICAodGhpcy4jaGFzTWFnaWMgPSAhIXRoaXMuI2hhc01hZ2ljKSxcbiAgICAgICAgICAgIHRoaXMuI3VmbGFnLFxuICAgICAgICBdO1xuICAgIH1cbiAgICAjZmxhdHRlbigpIHtcbiAgICAgICAgaWYgKCFpc0V4dGdsb2JBU1QodGhpcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLiNwYXJ0cykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcC4jZmxhdHRlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRvIHVwIHRvIDEwIHBhc3NlcyB0byBmbGF0dGVuIGFzIG11Y2ggYXMgcG9zc2libGVcbiAgICAgICAgICAgIGxldCBpdGVyYXRpb25zID0gMDtcbiAgICAgICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLiNwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gdGhpcy4jcGFydHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuI2ZsYXR0ZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNjYW5BZG9wdChjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNhZG9wdChjLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuI2NhbkFkb3B0V2l0aFNwYWNlKGMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI2Fkb3B0V2l0aFNwYWNlKGMsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy4jY2FuVXN1cnAoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jdXN1cnAoYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlICghZG9uZSAmJiArK2l0ZXJhdGlvbnMgPCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jdG9TdHJpbmcgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgICNwYXJ0c1RvUmVnRXhwKGRvdCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFydHNcbiAgICAgICAgICAgIC5tYXAocCA9PiB7XG4gICAgICAgICAgICAvLyBleHRnbG9iIEFTVHMgc2hvdWxkIG9ubHkgY29udGFpbiBwYXJlbnQgQVNUc1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJpbmcgdHlwZSBpbiBleHRnbG9iIGFzdD8/Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgLy8gY2FuIGlnbm9yZSBoYXNNYWdpYywgYmVjYXVzZSBleHRnbG9icyBhcmUgYWxyZWFkeSBhbHdheXMgbWFnaWNcbiAgICAgICAgICAgIGNvbnN0IFtyZSwgXywgX2hhc01hZ2ljLCB1ZmxhZ10gPSBwLnRvUmVnRXhwU291cmNlKGRvdCk7XG4gICAgICAgICAgICB0aGlzLiN1ZmxhZyA9IHRoaXMuI3VmbGFnIHx8IHVmbGFnO1xuICAgICAgICAgICAgcmV0dXJuIHJlO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcihwID0+ICEodGhpcy5pc1N0YXJ0KCkgJiYgdGhpcy5pc0VuZCgpKSB8fCAhIXApXG4gICAgICAgICAgICAuam9pbignfCcpO1xuICAgIH1cbiAgICBzdGF0aWMgI3BhcnNlR2xvYihnbG9iLCBoYXNNYWdpYywgbm9FbXB0eSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICBsZXQgcmUgPSAnJztcbiAgICAgICAgbGV0IHVmbGFnID0gZmFsc2U7XG4gICAgICAgIC8vIG11bHRpcGxlIHN0YXJzIHRoYXQgYXJlbid0IGdsb2JzdGFycyBjb2FsZXNjZSBpbnRvIG9uZSAqXG4gICAgICAgIGxldCBpblN0YXIgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gZ2xvYi5jaGFyQXQoaSk7XG4gICAgICAgICAgICBpZiAoZXNjYXBpbmcpIHtcbiAgICAgICAgICAgICAgICBlc2NhcGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlICs9IChyZVNwZWNpYWxzLmhhcyhjKSA/ICdcXFxcJyA6ICcnKSArIGM7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluU3RhcilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaW5TdGFyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZSArPSBub0VtcHR5ICYmIC9eWypdKyQvLnRlc3QoZ2xvYikgPyBzdGFyTm9FbXB0eSA6IHN0YXI7XG4gICAgICAgICAgICAgICAgaGFzTWFnaWMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5TdGFyID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IGdsb2IubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZSArPSAnXFxcXFxcXFwnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjID09PSAnWycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbc3JjLCBuZWVkVWZsYWcsIGNvbnN1bWVkLCBtYWdpY10gPSBwYXJzZUNsYXNzKGdsb2IsIGkpO1xuICAgICAgICAgICAgICAgIGlmIChjb25zdW1lZCkge1xuICAgICAgICAgICAgICAgICAgICByZSArPSBzcmM7XG4gICAgICAgICAgICAgICAgICAgIHVmbGFnID0gdWZsYWcgfHwgbmVlZFVmbGFnO1xuICAgICAgICAgICAgICAgICAgICBpICs9IGNvbnN1bWVkIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgaGFzTWFnaWMgPSBoYXNNYWdpYyB8fCBtYWdpYztcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgICAgICAgIHJlICs9IHFtYXJrO1xuICAgICAgICAgICAgICAgIGhhc01hZ2ljID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlICs9IHJlZ0V4cEVzY2FwZShjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3JlLCB1bmVzY2FwZShnbG9iKSwgISFoYXNNYWdpYywgdWZsYWddO1xuICAgIH1cbn1cbl9hID0gQVNUO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXN0LmpzLm1hcCIsCiAgICAiLyoqXG4gKiBFc2NhcGUgYWxsIG1hZ2ljIGNoYXJhY3RlcnMgaW4gYSBnbG9iIHBhdHRlcm4uXG4gKlxuICogSWYgdGhlIHtAbGluayBNaW5pbWF0Y2hPcHRpb25zLndpbmRvd3NQYXRoc05vRXNjYXBlfVxuICogb3B0aW9uIGlzIHVzZWQsIHRoZW4gY2hhcmFjdGVycyBhcmUgZXNjYXBlZCBieSB3cmFwcGluZyBpbiBgW11gLCBiZWNhdXNlXG4gKiBhIG1hZ2ljIGNoYXJhY3RlciB3cmFwcGVkIGluIGEgY2hhcmFjdGVyIGNsYXNzIGNhbiBvbmx5IGJlIHNhdGlzZmllZCBieVxuICogdGhhdCBleGFjdCBjaGFyYWN0ZXIuICBJbiB0aGlzIG1vZGUsIGBcXGAgaXMgX25vdF8gZXNjYXBlZCwgYmVjYXVzZSBpdCBpc1xuICogbm90IGludGVycHJldGVkIGFzIGEgbWFnaWMgY2hhcmFjdGVyLCBidXQgaW5zdGVhZCBhcyBhIHBhdGggc2VwYXJhdG9yLlxuICpcbiAqIElmIHRoZSB7QGxpbmsgTWluaW1hdGNoT3B0aW9ucy5tYWdpY2FsQnJhY2VzfSBvcHRpb24gaXMgdXNlZCxcbiAqIHRoZW4gYnJhY2VzIChge2AgYW5kIGB9YCkgd2lsbCBiZSBlc2NhcGVkLlxuICovXG5leHBvcnQgY29uc3QgZXNjYXBlID0gKHMsIHsgd2luZG93c1BhdGhzTm9Fc2NhcGUgPSBmYWxzZSwgbWFnaWNhbEJyYWNlcyA9IGZhbHNlLCB9ID0ge30pID0+IHtcbiAgICAvLyBkb24ndCBuZWVkIHRvIGVzY2FwZSArQCEgYmVjYXVzZSB3ZSBlc2NhcGUgdGhlIHBhcmVuc1xuICAgIC8vIHRoYXQgbWFrZSB0aG9zZSBtYWdpYywgYW5kIGVzY2FwaW5nICEgYXMgWyFdIGlzbid0IHZhbGlkLFxuICAgIC8vIGJlY2F1c2UgWyFdXSBpcyBhIHZhbGlkIGdsb2IgY2xhc3MgbWVhbmluZyBub3QgJ10nLlxuICAgIGlmIChtYWdpY2FsQnJhY2VzKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3dzUGF0aHNOb0VzY2FwZSA/XG4gICAgICAgICAgICBzLnJlcGxhY2UoL1s/KigpW1xcXXt9XS9nLCAnWyQmXScpXG4gICAgICAgICAgICA6IHMucmVwbGFjZSgvWz8qKClbXFxdXFxcXHt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuICAgIHJldHVybiB3aW5kb3dzUGF0aHNOb0VzY2FwZSA/XG4gICAgICAgIHMucmVwbGFjZSgvWz8qKClbXFxdXS9nLCAnWyQmXScpXG4gICAgICAgIDogcy5yZXBsYWNlKC9bPyooKVtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXNjYXBlLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZXhwYW5kIH0gZnJvbSAnYnJhY2UtZXhwYW5zaW9uJztcbmltcG9ydCB7IGFzc2VydFZhbGlkUGF0dGVybiB9IGZyb20gJy4vYXNzZXJ0LXZhbGlkLXBhdHRlcm4uanMnO1xuaW1wb3J0IHsgQVNUIH0gZnJvbSAnLi9hc3QuanMnO1xuaW1wb3J0IHsgZXNjYXBlIH0gZnJvbSAnLi9lc2NhcGUuanMnO1xuaW1wb3J0IHsgdW5lc2NhcGUgfSBmcm9tICcuL3VuZXNjYXBlLmpzJztcbmV4cG9ydCBjb25zdCBtaW5pbWF0Y2ggPSAocCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pO1xuICAgIC8vIHNob3J0Y3V0OiBjb21tZW50cyBtYXRjaCBub3RoaW5nLlxuICAgIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1hdGNoKHApO1xufTtcbi8vIE9wdGltaXplZCBjaGVja2luZyBmb3IgdGhlIG1vc3QgY29tbW9uIGdsb2IgcGF0dGVybnMuXG5jb25zdCBzdGFyRG90RXh0UkUgPSAvXlxcKisoW14rQCE/KlsoXSopJC87XG5jb25zdCBzdGFyRG90RXh0VGVzdCA9IChleHQpID0+IChmKSA9PiAhZi5zdGFydHNXaXRoKCcuJykgJiYgZi5lbmRzV2l0aChleHQpO1xuY29uc3Qgc3RhckRvdEV4dFRlc3REb3QgPSAoZXh0KSA9PiAoZikgPT4gZi5lbmRzV2l0aChleHQpO1xuY29uc3Qgc3RhckRvdEV4dFRlc3ROb2Nhc2UgPSAoZXh0KSA9PiB7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiAhZi5zdGFydHNXaXRoKCcuJykgJiYgZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3Qgc3RhckRvdEV4dFRlc3ROb2Nhc2VEb3QgPSAoZXh0KSA9PiB7XG4gICAgZXh0ID0gZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIChmKSA9PiBmLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBzdGFyRG90U3RhclJFID0gL15cXCorXFwuXFwqKyQvO1xuY29uc3Qgc3RhckRvdFN0YXJUZXN0ID0gKGYpID0+ICFmLnN0YXJ0c1dpdGgoJy4nKSAmJiBmLmluY2x1ZGVzKCcuJyk7XG5jb25zdCBzdGFyRG90U3RhclRlc3REb3QgPSAoZikgPT4gZiAhPT0gJy4nICYmIGYgIT09ICcuLicgJiYgZi5pbmNsdWRlcygnLicpO1xuY29uc3QgZG90U3RhclJFID0gL15cXC5cXCorJC87XG5jb25zdCBkb3RTdGFyVGVzdCA9IChmKSA9PiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJyAmJiBmLnN0YXJ0c1dpdGgoJy4nKTtcbmNvbnN0IHN0YXJSRSA9IC9eXFwqKyQvO1xuY29uc3Qgc3RhclRlc3QgPSAoZikgPT4gZi5sZW5ndGggIT09IDAgJiYgIWYuc3RhcnRzV2l0aCgnLicpO1xuY29uc3Qgc3RhclRlc3REb3QgPSAoZikgPT4gZi5sZW5ndGggIT09IDAgJiYgZiAhPT0gJy4nICYmIGYgIT09ICcuLic7XG5jb25zdCBxbWFya3NSRSA9IC9eXFw/KyhbXitAIT8qWyhdKik/JC87XG5jb25zdCBxbWFya3NUZXN0Tm9jYXNlID0gKFskMCwgZXh0ID0gJyddKSA9PiB7XG4gICAgY29uc3Qgbm9leHQgPSBxbWFya3NUZXN0Tm9FeHQoWyQwXSk7XG4gICAgaWYgKCFleHQpXG4gICAgICAgIHJldHVybiBub2V4dDtcbiAgICBleHQgPSBleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKGYpID0+IG5vZXh0KGYpICYmIGYudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3ROb2Nhc2VEb3QgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dERvdChbJDBdKTtcbiAgICBpZiAoIWV4dClcbiAgICAgICAgcmV0dXJuIG5vZXh0O1xuICAgIGV4dCA9IGV4dC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAoZikgPT4gbm9leHQoZikgJiYgZi50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGV4dCk7XG59O1xuY29uc3QgcW1hcmtzVGVzdERvdCA9IChbJDAsIGV4dCA9ICcnXSkgPT4ge1xuICAgIGNvbnN0IG5vZXh0ID0gcW1hcmtzVGVzdE5vRXh0RG90KFskMF0pO1xuICAgIHJldHVybiAhZXh0ID8gbm9leHQgOiAoZikgPT4gbm9leHQoZikgJiYgZi5lbmRzV2l0aChleHQpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3QgPSAoWyQwLCBleHQgPSAnJ10pID0+IHtcbiAgICBjb25zdCBub2V4dCA9IHFtYXJrc1Rlc3ROb0V4dChbJDBdKTtcbiAgICByZXR1cm4gIWV4dCA/IG5vZXh0IDogKGYpID0+IG5vZXh0KGYpICYmIGYuZW5kc1dpdGgoZXh0KTtcbn07XG5jb25zdCBxbWFya3NUZXN0Tm9FeHQgPSAoWyQwXSkgPT4ge1xuICAgIGNvbnN0IGxlbiA9ICQwLmxlbmd0aDtcbiAgICByZXR1cm4gKGYpID0+IGYubGVuZ3RoID09PSBsZW4gJiYgIWYuc3RhcnRzV2l0aCgnLicpO1xufTtcbmNvbnN0IHFtYXJrc1Rlc3ROb0V4dERvdCA9IChbJDBdKSA9PiB7XG4gICAgY29uc3QgbGVuID0gJDAubGVuZ3RoO1xuICAgIHJldHVybiAoZikgPT4gZi5sZW5ndGggPT09IGxlbiAmJiBmICE9PSAnLicgJiYgZiAhPT0gJy4uJztcbn07XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmNvbnN0IGRlZmF1bHRQbGF0Zm9ybSA9ICh0eXBlb2YgcHJvY2VzcyA9PT0gJ29iamVjdCcgJiYgcHJvY2VzcyA/XG4gICAgKHR5cGVvZiBwcm9jZXNzLmVudiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgcHJvY2Vzcy5lbnYgJiZcbiAgICAgICAgcHJvY2Vzcy5lbnYuX19NSU5JTUFUQ0hfVEVTVElOR19QTEFURk9STV9fKSB8fFxuICAgICAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAncG9zaXgnKTtcbmNvbnN0IHBhdGggPSB7XG4gICAgd2luMzI6IHsgc2VwOiAnXFxcXCcgfSxcbiAgICBwb3NpeDogeyBzZXA6ICcvJyB9LFxufTtcbi8qIGM4IGlnbm9yZSBzdG9wICovXG5leHBvcnQgY29uc3Qgc2VwID0gZGVmYXVsdFBsYXRmb3JtID09PSAnd2luMzInID8gcGF0aC53aW4zMi5zZXAgOiBwYXRoLnBvc2l4LnNlcDtcbm1pbmltYXRjaC5zZXAgPSBzZXA7XG5leHBvcnQgY29uc3QgR0xPQlNUQVIgPSBTeW1ib2woJ2dsb2JzdGFyICoqJyk7XG5taW5pbWF0Y2guR0xPQlNUQVIgPSBHTE9CU1RBUjtcbi8vIGFueSBzaW5nbGUgdGhpbmcgb3RoZXIgdGhhbiAvXG4vLyBkb24ndCBuZWVkIHRvIGVzY2FwZSAvIHdoZW4gdXNpbmcgbmV3IFJlZ0V4cCgpXG5jb25zdCBxbWFyayA9ICdbXi9dJztcbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG5jb25zdCBzdGFyID0gcW1hcmsgKyAnKj8nO1xuLy8gKiogd2hlbiBkb3RzIGFyZSBhbGxvd2VkLiAgQW55dGhpbmcgZ29lcywgZXhjZXB0IC4uIGFuZCAuXG4vLyBub3QgKF4gb3IgLyBmb2xsb3dlZCBieSBvbmUgb3IgdHdvIGRvdHMgZm9sbG93ZWQgYnkgJCBvciAvKSxcbi8vIGZvbGxvd2VkIGJ5IGFueXRoaW5nLCBhbnkgbnVtYmVyIG9mIHRpbWVzLlxuY29uc3QgdHdvU3RhckRvdCA9ICcoPzooPyEoPzpcXFxcL3xeKSg/OlxcXFwuezEsMn0pKCR8XFxcXC8pKS4pKj8nO1xuLy8gbm90IGEgXiBvciAvIGZvbGxvd2VkIGJ5IGEgZG90LFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG5jb25zdCB0d29TdGFyTm9Eb3QgPSAnKD86KD8hKD86XFxcXC98XilcXFxcLikuKSo/JztcbmV4cG9ydCBjb25zdCBmaWx0ZXIgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiAocCkgPT4gbWluaW1hdGNoKHAsIHBhdHRlcm4sIG9wdGlvbnMpO1xubWluaW1hdGNoLmZpbHRlciA9IGZpbHRlcjtcbmNvbnN0IGV4dCA9IChhLCBiID0ge30pID0+IE9iamVjdC5hc3NpZ24oe30sIGEsIGIpO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRzID0gKGRlZikgPT4ge1xuICAgIGlmICghZGVmIHx8IHR5cGVvZiBkZWYgIT09ICdvYmplY3QnIHx8ICFPYmplY3Qua2V5cyhkZWYpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbWluaW1hdGNoO1xuICAgIH1cbiAgICBjb25zdCBvcmlnID0gbWluaW1hdGNoO1xuICAgIGNvbnN0IG0gPSAocCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnKHAsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihtLCB7XG4gICAgICAgIE1pbmltYXRjaDogY2xhc3MgTWluaW1hdGNoIGV4dGVuZHMgb3JpZy5NaW5pbWF0Y2gge1xuICAgICAgICAgICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICAgICAgc3VwZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGljIGRlZmF1bHRzKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSkuTWluaW1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBBU1Q6IGNsYXNzIEFTVCBleHRlbmRzIG9yaWcuQVNUIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgY29uc3RydWN0b3IodHlwZSwgcGFyZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgICAgICBzdXBlcih0eXBlLCBwYXJlbnQsIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICBzdGF0aWMgZnJvbUdsb2IocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWcuQVNULmZyb21HbG9iKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdW5lc2NhcGU6IChzLCBvcHRpb25zID0ge30pID0+IG9yaWcudW5lc2NhcGUocywgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBlc2NhcGU6IChzLCBvcHRpb25zID0ge30pID0+IG9yaWcuZXNjYXBlKHMsIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgZmlsdGVyOiAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLmZpbHRlcihwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIGRlZmF1bHRzOiAob3B0aW9ucykgPT4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIG1ha2VSZTogKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5tYWtlUmUocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpLFxuICAgICAgICBicmFjZUV4cGFuZDogKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkgPT4gb3JpZy5icmFjZUV4cGFuZChwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSksXG4gICAgICAgIG1hdGNoOiAobGlzdCwgcGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBvcmlnLm1hdGNoKGxpc3QsIHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKSxcbiAgICAgICAgc2VwOiBvcmlnLnNlcCxcbiAgICAgICAgR0xPQlNUQVI6IEdMT0JTVEFSLFxuICAgIH0pO1xufTtcbm1pbmltYXRjaC5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuLy8gQnJhY2UgZXhwYW5zaW9uOlxuLy8gYXtiLGN9ZCAtPiBhYmQgYWNkXG4vLyBhe2IsfWMgLT4gYWJjIGFjXG4vLyBhezAuLjN9ZCAtPiBhMGQgYTFkIGEyZCBhM2Rcbi8vIGF7Yixje2QsZX1mfWcgLT4gYWJnIGFjZGZnIGFjZWZnXG4vLyBhe2IsY31ke2UsZn1nIC0+IGFiZGVnIGFjZGVnIGFiZGVnIGFiZGZnXG4vL1xuLy8gSW52YWxpZCBzZXRzIGFyZSBub3QgZXhwYW5kZWQuXG4vLyBhezIuLn1iIC0+IGF7Mi4ufWJcbi8vIGF7Yn1jIC0+IGF7Yn1jXG5leHBvcnQgY29uc3QgYnJhY2VFeHBhbmQgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pO1xuICAgIC8vIFRoYW5rcyB0byBZZXRpbmcgTGkgPGh0dHBzOi8vZ2l0aHViLmNvbS95ZXRpbmdsaT4gZm9yXG4gICAgLy8gaW1wcm92aW5nIHRoaXMgcmVnZXhwIHRvIGF2b2lkIGEgUmVET1MgdnVsbmVyYWJpbGl0eS5cbiAgICBpZiAob3B0aW9ucy5ub2JyYWNlIHx8ICEvXFx7KD86KD8hXFx7KS4pKlxcfS8udGVzdChwYXR0ZXJuKSkge1xuICAgICAgICAvLyBzaG9ydGN1dC4gbm8gbmVlZCB0byBleHBhbmQuXG4gICAgICAgIHJldHVybiBbcGF0dGVybl07XG4gICAgfVxuICAgIHJldHVybiBleHBhbmQocGF0dGVybiwgeyBtYXg6IG9wdGlvbnMuYnJhY2VFeHBhbmRNYXggfSk7XG59O1xubWluaW1hdGNoLmJyYWNlRXhwYW5kID0gYnJhY2VFeHBhbmQ7XG4vLyBwYXJzZSBhIGNvbXBvbmVudCBvZiB0aGUgZXhwYW5kZWQgc2V0LlxuLy8gQXQgdGhpcyBwb2ludCwgbm8gcGF0dGVybiBtYXkgY29udGFpbiBcIi9cIiBpbiBpdFxuLy8gc28gd2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgMmQgYXJyYXksIHdoZXJlIGVhY2ggZW50cnkgaXMgdGhlIGZ1bGxcbi8vIHBhdHRlcm4sIHNwbGl0IG9uICcvJywgYW5kIHRoZW4gdHVybmVkIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4vLyBBIHJlZ2V4cCBpcyBtYWRlIGF0IHRoZSBlbmQgd2hpY2ggam9pbnMgZWFjaCBhcnJheSB3aXRoIGFuXG4vLyBlc2NhcGVkIC8sIGFuZCBhbm90aGVyIGZ1bGwgb25lIHdoaWNoIGpvaW5zIGVhY2ggcmVnZXhwIHdpdGggfC5cbi8vXG4vLyBGb2xsb3dpbmcgdGhlIGxlYWQgb2YgQmFzaCA0LjEsIG5vdGUgdGhhdCBcIioqXCIgb25seSBoYXMgc3BlY2lhbCBtZWFuaW5nXG4vLyB3aGVuIGl0IGlzIHRoZSAqb25seSogdGhpbmcgaW4gYSBwYXRoIHBvcnRpb24uICBPdGhlcndpc2UsIGFueSBzZXJpZXNcbi8vIG9mICogaXMgZXF1aXZhbGVudCB0byBhIHNpbmdsZSAqLiAgR2xvYnN0YXIgYmVoYXZpb3IgaXMgZW5hYmxlZCBieVxuLy8gZGVmYXVsdCwgYW5kIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIG9wdGlvbnMubm9nbG9ic3Rhci5cbmV4cG9ydCBjb25zdCBtYWtlUmUgPSAocGF0dGVybiwgb3B0aW9ucyA9IHt9KSA9PiBuZXcgTWluaW1hdGNoKHBhdHRlcm4sIG9wdGlvbnMpLm1ha2VSZSgpO1xubWluaW1hdGNoLm1ha2VSZSA9IG1ha2VSZTtcbmV4cG9ydCBjb25zdCBtYXRjaCA9IChsaXN0LCBwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2gocGF0dGVybiwgb3B0aW9ucyk7XG4gICAgbGlzdCA9IGxpc3QuZmlsdGVyKGYgPT4gbW0ubWF0Y2goZikpO1xuICAgIGlmIChtbS5vcHRpb25zLm5vbnVsbCAmJiAhbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgbGlzdC5wdXNoKHBhdHRlcm4pO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbn07XG5taW5pbWF0Y2gubWF0Y2ggPSBtYXRjaDtcbi8vIHJlcGxhY2Ugc3R1ZmYgbGlrZSBcXCogd2l0aCAqXG5jb25zdCBnbG9iTWFnaWMgPSAvWz8qXXxbK0AhXVxcKC4qP1xcKXxcXFt8XFxdLztcbmNvbnN0IHJlZ0V4cEVzY2FwZSA9IChzKSA9PiBzLnJlcGxhY2UoL1stW1xcXXt9KCkqKz8uLFxcXFxeJHwjXFxzXS9nLCAnXFxcXCQmJyk7XG5leHBvcnQgY2xhc3MgTWluaW1hdGNoIHtcbiAgICBvcHRpb25zO1xuICAgIHNldDtcbiAgICBwYXR0ZXJuO1xuICAgIHdpbmRvd3NQYXRoc05vRXNjYXBlO1xuICAgIG5vbmVnYXRlO1xuICAgIG5lZ2F0ZTtcbiAgICBjb21tZW50O1xuICAgIGVtcHR5O1xuICAgIHByZXNlcnZlTXVsdGlwbGVTbGFzaGVzO1xuICAgIHBhcnRpYWw7XG4gICAgZ2xvYlNldDtcbiAgICBnbG9iUGFydHM7XG4gICAgbm9jYXNlO1xuICAgIGlzV2luZG93cztcbiAgICBwbGF0Zm9ybTtcbiAgICB3aW5kb3dzTm9NYWdpY1Jvb3Q7XG4gICAgbWF4R2xvYnN0YXJSZWN1cnNpb247XG4gICAgcmVnZXhwO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybik7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLm1heEdsb2JzdGFyUmVjdXJzaW9uID0gb3B0aW9ucy5tYXhHbG9ic3RhclJlY3Vyc2lvbiA/PyAyMDA7XG4gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XG4gICAgICAgIHRoaXMucGxhdGZvcm0gPSBvcHRpb25zLnBsYXRmb3JtIHx8IGRlZmF1bHRQbGF0Zm9ybTtcbiAgICAgICAgdGhpcy5pc1dpbmRvd3MgPSB0aGlzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgICAgICAvLyBhdm9pZCB0aGUgYW5ub3lpbmcgZGVwcmVjYXRpb24gZmxhZyBsb2xcbiAgICAgICAgY29uc3QgYXdlID0gKCdhbGxvd1dpbmRvdycgKyAnc0VzY2FwZScpO1xuICAgICAgICB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlID1cbiAgICAgICAgICAgICEhb3B0aW9ucy53aW5kb3dzUGF0aHNOb0VzY2FwZSB8fCBvcHRpb25zW2F3ZV0gPT09IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzID0gISFvcHRpb25zLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzO1xuICAgICAgICB0aGlzLnJlZ2V4cCA9IG51bGw7XG4gICAgICAgIHRoaXMubmVnYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubm9uZWdhdGUgPSAhIW9wdGlvbnMubm9uZWdhdGU7XG4gICAgICAgIHRoaXMuY29tbWVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFydGlhbCA9ICEhb3B0aW9ucy5wYXJ0aWFsO1xuICAgICAgICB0aGlzLm5vY2FzZSA9ICEhdGhpcy5vcHRpb25zLm5vY2FzZTtcbiAgICAgICAgdGhpcy53aW5kb3dzTm9NYWdpY1Jvb3QgPVxuICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzTm9NYWdpY1Jvb3QgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICAgICAgb3B0aW9ucy53aW5kb3dzTm9NYWdpY1Jvb3RcbiAgICAgICAgICAgICAgICA6ICEhKHRoaXMuaXNXaW5kb3dzICYmIHRoaXMubm9jYXNlKTtcbiAgICAgICAgdGhpcy5nbG9iU2V0ID0gW107XG4gICAgICAgIHRoaXMuZ2xvYlBhcnRzID0gW107XG4gICAgICAgIHRoaXMuc2V0ID0gW107XG4gICAgICAgIC8vIG1ha2UgdGhlIHNldCBvZiByZWdleHBzIGV0Yy5cbiAgICAgICAgdGhpcy5tYWtlKCk7XG4gICAgfVxuICAgIGhhc01hZ2ljKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm1hZ2ljYWxCcmFjZXMgJiYgdGhpcy5zZXQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuc2V0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGF0dGVybikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFydCAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZGVidWcoLi4uXykgeyB9XG4gICAgbWFrZSgpIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGF0dGVybjtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgLy8gZW1wdHkgcGF0dGVybnMgYW5kIGNvbW1lbnRzIG1hdGNoIG5vdGhpbmcuXG4gICAgICAgIGlmICghb3B0aW9ucy5ub2NvbW1lbnQgJiYgcGF0dGVybi5jaGFyQXQoMCkgPT09ICcjJykge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhdHRlcm4pIHtcbiAgICAgICAgICAgIHRoaXMuZW1wdHkgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0ZXAgMTogZmlndXJlIG91dCBuZWdhdGlvbiwgZXRjLlxuICAgICAgICB0aGlzLnBhcnNlTmVnYXRlKCk7XG4gICAgICAgIC8vIHN0ZXAgMjogZXhwYW5kIGJyYWNlc1xuICAgICAgICB0aGlzLmdsb2JTZXQgPSBbLi4ubmV3IFNldCh0aGlzLmJyYWNlRXhwYW5kKCkpXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGVidWcpIHtcbiAgICAgICAgICAgIC8vb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIHRoaXMuZGVidWcgPSAoLi4uYXJncykgPT4gY29uc29sZS5lcnJvciguLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgdGhpcy5nbG9iU2V0KTtcbiAgICAgICAgLy8gc3RlcCAzOiBub3cgd2UgaGF2ZSBhIHNldCwgc28gdHVybiBlYWNoIG9uZSBpbnRvIGEgc2VyaWVzIG9mXG4gICAgICAgIC8vIHBhdGgtcG9ydGlvbiBtYXRjaGluZyBwYXR0ZXJucy5cbiAgICAgICAgLy8gVGhlc2Ugd2lsbCBiZSByZWdleHBzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgXCIqKlwiLCB3aGljaCBpc1xuICAgICAgICAvLyBzZXQgdG8gdGhlIEdMT0JTVEFSIG9iamVjdCBmb3IgZ2xvYnN0YXIgYmVoYXZpb3IsXG4gICAgICAgIC8vIGFuZCB3aWxsIG5vdCBjb250YWluIGFueSAvIGNoYXJhY3RlcnNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gRmlyc3QsIHdlIHByZXByb2Nlc3MgdG8gbWFrZSB0aGUgZ2xvYiBwYXR0ZXJuIHNldHMgYSBiaXQgc2ltcGxlclxuICAgICAgICAvLyBhbmQgZGVkdXBlZC4gIFRoZXJlIGFyZSBzb21lIHBlcmYta2lsbGluZyBwYXR0ZXJucyB0aGF0IGNhbiBjYXVzZVxuICAgICAgICAvLyBwcm9ibGVtcyB3aXRoIGEgZ2xvYiB3YWxrLCBidXQgd2UgY2FuIHNpbXBsaWZ5IHRoZW0gZG93biBhIGJpdC5cbiAgICAgICAgY29uc3QgcmF3R2xvYlBhcnRzID0gdGhpcy5nbG9iU2V0Lm1hcChzID0+IHRoaXMuc2xhc2hTcGxpdChzKSk7XG4gICAgICAgIHRoaXMuZ2xvYlBhcnRzID0gdGhpcy5wcmVwcm9jZXNzKHJhd0dsb2JQYXJ0cyk7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCB0aGlzLmdsb2JQYXJ0cyk7XG4gICAgICAgIC8vIGdsb2IgLS0+IHJlZ2V4cHNcbiAgICAgICAgbGV0IHNldCA9IHRoaXMuZ2xvYlBhcnRzLm1hcCgocywgXywgX18pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzV2luZG93cyAmJiB0aGlzLndpbmRvd3NOb01hZ2ljUm9vdCkge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGl0J3MgYSBkcml2ZSBvciB1bmMgcGF0aC5cbiAgICAgICAgICAgICAgICBjb25zdCBpc1VOQyA9IHNbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHNbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIChzWzJdID09PSAnPycgfHwgIWdsb2JNYWdpYy50ZXN0KHNbMl0pKSAmJlxuICAgICAgICAgICAgICAgICAgICAhZ2xvYk1hZ2ljLnRlc3Qoc1szXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNEcml2ZSA9IC9eW2Etel06L2kudGVzdChzWzBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNVTkMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnMuc2xpY2UoMCwgNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5zLnNsaWNlKDQpLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSksXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRHJpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzWzBdLCAuLi5zLnNsaWNlKDEpLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzLm1hcChzcyA9PiB0aGlzLnBhcnNlKHNzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KTtcbiAgICAgICAgLy8gZmlsdGVyIG91dCBldmVyeXRoaW5nIHRoYXQgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkuXG4gICAgICAgIHRoaXMuc2V0ID0gc2V0LmZpbHRlcihzID0+IHMuaW5kZXhPZihmYWxzZSkgPT09IC0xKTtcbiAgICAgICAgLy8gZG8gbm90IHRyZWF0IHRoZSA/IGluIFVOQyBwYXRocyBhcyBtYWdpY1xuICAgICAgICBpZiAodGhpcy5pc1dpbmRvd3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gdGhpcy5zZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHBbMF0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHBbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2xvYlBhcnRzW2ldWzJdID09PSAnPycgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBbM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcFsyXSA9ICc/JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sIHRoaXMuc2V0KTtcbiAgICB9XG4gICAgLy8gdmFyaW91cyB0cmFuc2Zvcm1zIHRvIGVxdWl2YWxlbnQgcGF0dGVybiBzZXRzIHRoYXQgYXJlXG4gICAgLy8gZmFzdGVyIHRvIHByb2Nlc3MgaW4gYSBmaWxlc3lzdGVtIHdhbGsuICBUaGUgZ29hbCBpcyB0b1xuICAgIC8vIGVsaW1pbmF0ZSB3aGF0IHdlIGNhbiwgYW5kIHB1c2ggYWxsICoqIHBhdHRlcm5zIGFzIGZhclxuICAgIC8vIHRvIHRoZSByaWdodCBhcyBwb3NzaWJsZSwgZXZlbiBpZiBpdCBpbmNyZWFzZXMgdGhlIG51bWJlclxuICAgIC8vIG9mIHBhdHRlcm5zIHRoYXQgd2UgaGF2ZSB0byBwcm9jZXNzLlxuICAgIHByZXByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIC8vIGlmIHdlJ3JlIG5vdCBpbiBnbG9ic3RhciBtb2RlLCB0aGVuIHR1cm4gKiogaW50byAqXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9nbG9ic3Rhcikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXJ0c2V0IG9mIGdsb2JQYXJ0cykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcGFydHNldC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFydHNldFtqXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNldFtqXSA9ICcqJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IG9wdGltaXphdGlvbkxldmVsID0gMSB9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMikge1xuICAgICAgICAgICAgLy8gYWdncmVzc2l2ZSBvcHRpbWl6YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGZzIHdhbGtpbmdcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuZmlyc3RQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKTtcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuc2Vjb25kUGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPj0gMSkge1xuICAgICAgICAgICAgLy8ganVzdCBiYXNpYyBvcHRpbWl6YXRpb25zIHRvIHJlbW92ZSBzb21lIC4uIHBhcnRzXG4gICAgICAgICAgICBnbG9iUGFydHMgPSB0aGlzLmxldmVsT25lT3B0aW1pemUoZ2xvYlBhcnRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGp1c3QgY29sbGFwc2UgbXVsdGlwbGUgKiogcG9ydGlvbnMgaW50byBvbmVcbiAgICAgICAgICAgIGdsb2JQYXJ0cyA9IHRoaXMuYWRqYXNjZW50R2xvYnN0YXJPcHRpbWl6ZShnbG9iUGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iUGFydHM7XG4gICAgfVxuICAgIC8vIGp1c3QgZ2V0IHJpZCBvZiBhZGphc2NlbnQgKiogcG9ydGlvbnNcbiAgICBhZGphc2NlbnRHbG9ic3Rhck9wdGltaXplKGdsb2JQYXJ0cykge1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLm1hcChwYXJ0cyA9PiB7XG4gICAgICAgICAgICBsZXQgZ3MgPSAtMTtcbiAgICAgICAgICAgIHdoaWxlICgtMSAhPT0gKGdzID0gcGFydHMuaW5kZXhPZignKionLCBncyArIDEpKSkge1xuICAgICAgICAgICAgICAgIGxldCBpID0gZ3M7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHBhcnRzW2kgKyAxXSA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpICE9PSBncykge1xuICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MsIGkgLSBncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcnRzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gZ2V0IHJpZCBvZiBhZGphc2NlbnQgKiogYW5kIHJlc29sdmUgLi4gcG9ydGlvbnNcbiAgICBsZXZlbE9uZU9wdGltaXplKGdsb2JQYXJ0cykge1xuICAgICAgICByZXR1cm4gZ2xvYlBhcnRzLm1hcChwYXJ0cyA9PiB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLnJlZHVjZSgoc2V0LCBwYXJ0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IHNldFtzZXQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcqKicgJiYgcHJldiA9PT0gJyoqJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAmJiBwcmV2ICE9PSAnLi4nICYmIHByZXYgIT09ICcuJyAmJiBwcmV2ICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldC5wdXNoKHBhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gWycnXSA6IHBhcnRzO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGV2ZWxUd29GaWxlT3B0aW1pemUocGFydHMpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnRzKSkge1xuICAgICAgICAgICAgcGFydHMgPSB0aGlzLnNsYXNoU3BsaXQocGFydHMpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBzcXVlZXplIG91dCBVTkMgcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDEgJiYgcCA9PT0gJycgJiYgcGFydHNbMF0gPT09ICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwID09PSAnLicgfHwgcCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzWzBdID09PSAnLicgJiZcbiAgICAgICAgICAgICAgICAgICAgcGFydHMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXSA9PT0gJy4nIHx8IHBhcnRzWzFdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gPHByZT4vPHA+Ly4uLzxyZXN0PiAtPiA8cHJlPi88cmVzdD5cbiAgICAgICAgICAgIGxldCBkZCA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoLTEgIT09IChkZCA9IHBhcnRzLmluZGV4T2YoJy4uJywgZGQgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZGQgLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAocCAmJlxuICAgICAgICAgICAgICAgICAgICBwICE9PSAnLicgJiZcbiAgICAgICAgICAgICAgICAgICAgcCAhPT0gJy4uJyAmJlxuICAgICAgICAgICAgICAgICAgICBwICE9PSAnKionICYmXG4gICAgICAgICAgICAgICAgICAgICEodGhpcy5pc1dpbmRvd3MgJiYgL15bYS16XTokL2kudGVzdChwKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMik7XG4gICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChkaWRTb21ldGhpbmcpO1xuICAgICAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSAwID8gWycnXSA6IHBhcnRzO1xuICAgIH1cbiAgICAvLyBGaXJzdCBwaGFzZTogc2luZ2xlLXBhdHRlcm4gcHJvY2Vzc2luZ1xuICAgIC8vIDxwcmU+IGlzIDEgb3IgbW9yZSBwb3J0aW9uc1xuICAgIC8vIDxyZXN0PiBpcyAxIG9yIG1vcmUgcG9ydGlvbnNcbiAgICAvLyA8cD4gaXMgYW55IHBvcnRpb24gb3RoZXIgdGhhbiAuLCAuLiwgJycsIG9yICoqXG4gICAgLy8gPGU+IGlzIC4gb3IgJydcbiAgICAvL1xuICAgIC8vICoqLy4uIGlzICpicnV0YWwqIGZvciBmaWxlc3lzdGVtIHdhbGtpbmcgcGVyZm9ybWFuY2UsIGJlY2F1c2VcbiAgICAvLyBpdCBlZmZlY3RpdmVseSByZXNldHMgdGhlIHJlY3Vyc2l2ZSB3YWxrIGVhY2ggdGltZSBpdCBvY2N1cnMsXG4gICAgLy8gYW5kICoqIGNhbm5vdCBiZSByZWR1Y2VkIG91dCBieSBhIC4uIHBhdHRlcm4gcGFydCBsaWtlIGEgcmVnZXhwXG4gICAgLy8gb3IgbW9zdCBzdHJpbmdzIChvdGhlciB0aGFuIC4uLCAuLCBhbmQgJycpIGNhbiBiZS5cbiAgICAvL1xuICAgIC8vIDxwcmU+LyoqLy4uLzxwPi88cD4vPHJlc3Q+IC0+IHs8cHJlPi8uLi88cD4vPHA+LzxyZXN0Piw8cHJlPi8qKi88cD4vPHA+LzxyZXN0Pn1cbiAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIDxwcmU+LzxwPi8uLi88cmVzdD4gLT4gPHByZT4vPHJlc3Q+XG4gICAgLy8gKiovKiovPHJlc3Q+IC0+ICoqLzxyZXN0PlxuICAgIC8vXG4gICAgLy8gKiovKi88cmVzdD4gLT4gKi8qKi88cmVzdD4gPD09IG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZXNuJ3QgZm9sbG93XG4gICAgLy8gdGhpcyBXT1VMRCBiZSBhbGxvd2VkIGlmICoqIGRpZCBmb2xsb3cgc3ltbGlua3MsIG9yICogZGlkbid0XG4gICAgZmlyc3RQaGFzZVByZVByb2Nlc3MoZ2xvYlBhcnRzKSB7XG4gICAgICAgIGxldCBkaWRTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyA8cHJlPi8qKi8uLi88cD4vPHA+LzxyZXN0PiAtPiB7PHByZT4vLi4vPHA+LzxwPi88cmVzdD4sPHByZT4vKiovPHA+LzxwPi88cmVzdD59XG4gICAgICAgICAgICBmb3IgKGxldCBwYXJ0cyBvZiBnbG9iUGFydHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZ3MgPSAtMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoLTEgIT09IChncyA9IHBhcnRzLmluZGV4T2YoJyoqJywgZ3MgKyAxKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdzcyA9IGdzO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFydHNbZ3NzICsgMV0gPT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxwcmU+LyoqLyoqLzxyZXN0PiAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdzcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGVnLCBpZiBncyBpcyAyIGFuZCBnc3MgaXMgNCwgdGhhdCBtZWFucyB3ZSBoYXZlIDMgKipcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFydHMsIGFuZCBjYW4gcmVtb3ZlIDIgb2YgdGhlbS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdzcyA+IGdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoZ3MgKyAxLCBnc3MgLSBncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHQgPSBwYXJ0c1tncyArIDFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcGFydHNbZ3MgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcDIgPSBwYXJ0c1tncyArIDNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAhPT0gJy4uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PT0gJy4uJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIXAyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwMiA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZWRpdCBwYXJ0cyBpbiBwbGFjZSwgYW5kIHB1c2ggdGhlIG5ldyBvbmVcbiAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGdzLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3RoZXIgPSBwYXJ0cy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgb3RoZXJbZ3NdID0gJyoqJztcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzLnB1c2gob3RoZXIpO1xuICAgICAgICAgICAgICAgICAgICBncy0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88ZT4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcCA9IHBhcnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc3F1ZWV6ZSBvdXQgVU5DIHBhdHRlcm5zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMSAmJiBwID09PSAnJyAmJiBwYXJ0c1swXSA9PT0gJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PT0gJy4nIHx8IHAgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0c1swXSA9PT0gJy4nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0c1sxXSA9PT0gJy4nIHx8IHBhcnRzWzFdID09PSAnJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA8cHJlPi88cD4vLi4vPHJlc3Q+IC0+IDxwcmU+LzxyZXN0PlxuICAgICAgICAgICAgICAgIGxldCBkZCA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKC0xICE9PSAoZGQgPSBwYXJ0cy5pbmRleE9mKCcuLicsIGRkICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwYXJ0c1tkZCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocCAmJiBwICE9PSAnLicgJiYgcCAhPT0gJy4uJyAmJiBwICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWRTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZERvdCA9IGRkID09PSAxICYmIHBhcnRzW2RkICsgMV0gPT09ICcqKic7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGxpbiA9IG5lZWREb3QgPyBbJy4nXSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMuc3BsaWNlKGRkIC0gMSwgMiwgLi4uc3BsaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRkIC09IDI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKGRpZFNvbWV0aGluZyk7XG4gICAgICAgIHJldHVybiBnbG9iUGFydHM7XG4gICAgfVxuICAgIC8vIHNlY29uZCBwaGFzZTogbXVsdGktcGF0dGVybiBkZWR1cGVzXG4gICAgLy8gezxwcmU+LyovPHJlc3Q+LDxwcmU+LzxwPi88cmVzdD59IC0+IDxwcmU+LyovPHJlc3Q+XG4gICAgLy8gezxwcmU+LzxyZXN0Piw8cHJlPi88cmVzdD59IC0+IDxwcmU+LzxyZXN0PlxuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vPHJlc3Q+fSAtPiA8cHJlPi8qKi88cmVzdD5cbiAgICAvL1xuICAgIC8vIHs8cHJlPi8qKi88cmVzdD4sPHByZT4vKiovPHA+LzxyZXN0Pn0gLT4gPHByZT4vKiovPHJlc3Q+XG4gICAgLy8gXi0tIG5vdCB2YWxpZCBiZWNhdXNlICoqIGRvZW5zJ3QgZm9sbG93IHN5bWxpbmtzXG4gICAgc2Vjb25kUGhhc2VQcmVQcm9jZXNzKGdsb2JQYXJ0cykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdsb2JQYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGdsb2JQYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSB0aGlzLnBhcnRzTWF0Y2goZ2xvYlBhcnRzW2ldLCBnbG9iUGFydHNbal0sICF0aGlzLnByZXNlcnZlTXVsdGlwbGVTbGFzaGVzKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iUGFydHNbaV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYlBhcnRzW2pdID0gbWF0Y2hlZDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iUGFydHMuZmlsdGVyKGdzID0+IGdzLmxlbmd0aCk7XG4gICAgfVxuICAgIHBhcnRzTWF0Y2goYSwgYiwgZW1wdHlHU01hdGNoID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGFpID0gMDtcbiAgICAgICAgbGV0IGJpID0gMDtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBsZXQgd2hpY2ggPSAnJztcbiAgICAgICAgd2hpbGUgKGFpIDwgYS5sZW5ndGggJiYgYmkgPCBiLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGFbYWldID09PSBiW2JpXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHdoaWNoID09PSAnYicgPyBiW2JpXSA6IGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlbXB0eUdTTWF0Y2ggJiYgYVthaV0gPT09ICcqKicgJiYgYltiaV0gPT09IGFbYWkgKyAxXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZW1wdHlHU01hdGNoICYmIGJbYmldID09PSAnKionICYmIGFbYWldID09PSBiW2JpICsgMV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYmkrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFbYWldID09PSAnKicgJiZcbiAgICAgICAgICAgICAgICBiW2JpXSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMuZG90IHx8ICFiW2JpXS5zdGFydHNXaXRoKCcuJykpICYmXG4gICAgICAgICAgICAgICAgYltiaV0gIT09ICcqKicpIHtcbiAgICAgICAgICAgICAgICBpZiAod2hpY2ggPT09ICdiJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHdoaWNoID0gJ2EnO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFbYWldKTtcbiAgICAgICAgICAgICAgICBhaSsrO1xuICAgICAgICAgICAgICAgIGJpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiW2JpXSA9PT0gJyonICYmXG4gICAgICAgICAgICAgICAgYVthaV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmRvdCB8fCAhYVthaV0uc3RhcnRzV2l0aCgnLicpKSAmJlxuICAgICAgICAgICAgICAgIGFbYWldICE9PSAnKionKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdoaWNoID09PSAnYScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB3aGljaCA9ICdiJztcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChiW2JpXSk7XG4gICAgICAgICAgICAgICAgYWkrKztcbiAgICAgICAgICAgICAgICBiaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHdlIGZhbGwgb3V0IG9mIHRoZSBsb29wLCBpdCBtZWFucyB0aGV5IHR3byBhcmUgaWRlbnRpY2FsXG4gICAgICAgIC8vIGFzIGxvbmcgYXMgdGhlaXIgbGVuZ3RocyBtYXRjaFxuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIHJlc3VsdDtcbiAgICB9XG4gICAgcGFyc2VOZWdhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm5vbmVnYXRlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuO1xuICAgICAgICBsZXQgbmVnYXRlID0gZmFsc2U7XG4gICAgICAgIGxldCBuZWdhdGVPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoICYmIHBhdHRlcm4uY2hhckF0KGkpID09PSAnISc7IGkrKykge1xuICAgICAgICAgICAgbmVnYXRlID0gIW5lZ2F0ZTtcbiAgICAgICAgICAgIG5lZ2F0ZU9mZnNldCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZWdhdGVPZmZzZXQpXG4gICAgICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKG5lZ2F0ZU9mZnNldCk7XG4gICAgICAgIHRoaXMubmVnYXRlID0gbmVnYXRlO1xuICAgIH1cbiAgICAvLyBzZXQgcGFydGlhbCB0byB0cnVlIHRvIHRlc3QgaWYsIGZvciBleGFtcGxlLFxuICAgIC8vIFwiL2EvYlwiIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIFwiLyovYi8qL2RcIlxuICAgIC8vIFBhcnRpYWwgbWVhbnMsIGlmIHlvdSBydW4gb3V0IG9mIGZpbGUgYmVmb3JlIHlvdSBydW5cbiAgICAvLyBvdXQgb2YgcGF0dGVybiwgdGhlbiB0aGF0J3MgZmluZSwgYXMgbG9uZyBhcyBhbGxcbiAgICAvLyB0aGUgcGFydHMgbWF0Y2guXG4gICAgbWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBmaWxlU3RhcnRJbmRleCA9IDA7XG4gICAgICAgIGxldCBwYXR0ZXJuU3RhcnRJbmRleCA9IDA7XG4gICAgICAgIC8vIFVOQyBwYXRocyBsaWtlIC8vPy9YOi8uLi4gY2FuIG1hdGNoIFg6Ly4uLiBhbmQgdmljZSB2ZXJzYVxuICAgICAgICAvLyBEcml2ZSBsZXR0ZXJzIGluIGFic29sdXRlIGRyaXZlIG9yIHVuYyBwYXRocyBhcmUgYWx3YXlzIGNvbXBhcmVkXG4gICAgICAgIC8vIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlRHJpdmUgPSB0eXBlb2YgZmlsZVswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChmaWxlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVVTkMgPSAhZmlsZURyaXZlICYmXG4gICAgICAgICAgICAgICAgZmlsZVswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBmaWxlWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIGZpbGVbMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QoZmlsZVszXSk7XG4gICAgICAgICAgICBjb25zdCBwYXR0ZXJuRHJpdmUgPSB0eXBlb2YgcGF0dGVyblswXSA9PT0gJ3N0cmluZycgJiYgL15bYS16XTokL2kudGVzdChwYXR0ZXJuWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5VTkMgPSAhcGF0dGVybkRyaXZlICYmXG4gICAgICAgICAgICAgICAgcGF0dGVyblswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICBwYXR0ZXJuWzFdID09PSAnJyAmJlxuICAgICAgICAgICAgICAgIHBhdHRlcm5bMl0gPT09ICc/JyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBwYXR0ZXJuWzNdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC9eW2Etel06JC9pLnRlc3QocGF0dGVyblszXSk7XG4gICAgICAgICAgICBjb25zdCBmZGkgPSBmaWxlVU5DID8gM1xuICAgICAgICAgICAgICAgIDogZmlsZURyaXZlID8gMFxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBkaSA9IHBhdHRlcm5VTkMgPyAzXG4gICAgICAgICAgICAgICAgOiBwYXR0ZXJuRHJpdmUgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmZGkgPT09ICdudW1iZXInICYmIHR5cGVvZiBwZGkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2ZkLCBwZF0gPSBbXG4gICAgICAgICAgICAgICAgICAgIGZpbGVbZmRpXSxcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybltwZGldLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgbWF0Y2hpbmcgYXQgdGhlIGRyaXZlIGxldHRlciBpbmRleCBvZiBlYWNoXG4gICAgICAgICAgICAgICAgaWYgKGZkLnRvTG93ZXJDYXNlKCkgPT09IHBkLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybltwZGldID0gZmQ7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5TdGFydEluZGV4ID0gcGRpO1xuICAgICAgICAgICAgICAgICAgICBmaWxlU3RhcnRJbmRleCA9IGZkaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzb2x2ZSBhbmQgcmVkdWNlIC4gYW5kIC4uIHBvcnRpb25zIGluIHRoZSBmaWxlIGFzIHdlbGwuXG4gICAgICAgIC8vIGRvbid0IG5lZWQgdG8gZG8gdGhlIHNlY29uZCBwaGFzZSwgYmVjYXVzZSBpdCdzIG9ubHkgb25lIHN0cmluZ1tdXG4gICAgICAgIGNvbnN0IHsgb3B0aW1pemF0aW9uTGV2ZWwgPSAxIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAyKSB7XG4gICAgICAgICAgICBmaWxlID0gdGhpcy5sZXZlbFR3b0ZpbGVPcHRpbWl6ZShmaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0dGVybi5pbmNsdWRlcyhHTE9CU1RBUikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNtYXRjaEdsb2JzdGFyKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwsIGZpbGVTdGFydEluZGV4LCBwYXR0ZXJuU3RhcnRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuI21hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwsIGZpbGVTdGFydEluZGV4LCBwYXR0ZXJuU3RhcnRJbmRleCk7XG4gICAgfVxuICAgICNtYXRjaEdsb2JzdGFyKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwsIGZpbGVJbmRleCwgcGF0dGVybkluZGV4KSB7XG4gICAgICAgIC8vIHNwbGl0IHRoZSBwYXR0ZXJuIGludG8gaGVhZCwgdGFpbCwgYW5kIG1pZGRsZSBvZiAqKiBkZWxpbWl0ZWQgcGFydHNcbiAgICAgICAgY29uc3QgZmlyc3RncyA9IHBhdHRlcm4uaW5kZXhPZihHTE9CU1RBUiwgcGF0dGVybkluZGV4KTtcbiAgICAgICAgY29uc3QgbGFzdGdzID0gcGF0dGVybi5sYXN0SW5kZXhPZihHTE9CU1RBUik7XG4gICAgICAgIC8vIHNwbGl0IHRoZSBwYXR0ZXJuIHVwIGludG8gZ2xvYnN0YXItZGVsaW1pdGVkIHNlY3Rpb25zXG4gICAgICAgIC8vIHRoZSB0YWlsIGhhcyB0byBiZSBhdCB0aGUgZW5kLCBhbmQgdGhlIG90aGVycyBqdXN0IGhhdmVcbiAgICAgICAgLy8gdG8gYmUgZm91bmQgaW4gb3JkZXIgZnJvbSB0aGUgaGVhZC5cbiAgICAgICAgY29uc3QgW2hlYWQsIGJvZHksIHRhaWxdID0gcGFydGlhbCA/XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgcGF0dGVybi5zbGljZShwYXR0ZXJuSW5kZXgsIGZpcnN0Z3MpLFxuICAgICAgICAgICAgICAgIHBhdHRlcm4uc2xpY2UoZmlyc3RncyArIDEpLFxuICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgcGF0dGVybi5zbGljZShwYXR0ZXJuSW5kZXgsIGZpcnN0Z3MpLFxuICAgICAgICAgICAgICAgIHBhdHRlcm4uc2xpY2UoZmlyc3RncyArIDEsIGxhc3RncyksXG4gICAgICAgICAgICAgICAgcGF0dGVybi5zbGljZShsYXN0Z3MgKyAxKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIC8vIGNoZWNrIHRoZSBoZWFkLCBmcm9tIHRoZSBjdXJyZW50IGZpbGUvcGF0dGVybiBpbmRleC5cbiAgICAgICAgaWYgKGhlYWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlSGVhZCA9IGZpbGUuc2xpY2UoZmlsZUluZGV4LCBmaWxlSW5kZXggKyBoZWFkLmxlbmd0aCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuI21hdGNoT25lKGZpbGVIZWFkLCBoZWFkLCBwYXJ0aWFsLCAwLCAwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbGVJbmRleCArPSBoZWFkLmxlbmd0aDtcbiAgICAgICAgICAgIHBhdHRlcm5JbmRleCArPSBoZWFkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgd2Uga25vdyB0aGUgaGVhZCBtYXRjaGVzIVxuICAgICAgICAvLyBpZiB0aGUgbGFzdCBwb3J0aW9uIGlzIG5vdCBlbXB0eSwgaXQgTVVTVCBtYXRjaCB0aGUgZW5kXG4gICAgICAgIC8vIGNoZWNrIHRoZSB0YWlsXG4gICAgICAgIGxldCBmaWxlVGFpbE1hdGNoID0gMDtcbiAgICAgICAgaWYgKHRhaWwubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBpZiBoZWFkICsgdGFpbCA+IGZpbGUsIHRoZW4gd2UgY2Fubm90IHBvc3NpYmx5IG1hdGNoXG4gICAgICAgICAgICBpZiAodGFpbC5sZW5ndGggKyBmaWxlSW5kZXggPiBmaWxlLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAvLyB0cnkgdG8gbWF0Y2ggdGhlIHRhaWxcbiAgICAgICAgICAgIGxldCB0YWlsU3RhcnQgPSBmaWxlLmxlbmd0aCAtIHRhaWwubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMuI21hdGNoT25lKGZpbGUsIHRhaWwsIHBhcnRpYWwsIHRhaWxTdGFydCwgMCkpIHtcbiAgICAgICAgICAgICAgICBmaWxlVGFpbE1hdGNoID0gdGFpbC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBhZmZvcmRhbmNlIGZvciBzdHVmZiBsaWtlIGEvKiovKiBtYXRjaGluZyBhL2IvXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGxhc3QgZmlsZSBwb3J0aW9uIGlzICcnLCBhbmQgdGhlcmUncyBtb3JlIHRvIHRoZSBwYXR0ZXJuXG4gICAgICAgICAgICAgICAgLy8gdGhlbiB0cnkgd2l0aG91dCB0aGUgJycgYml0LlxuICAgICAgICAgICAgICAgIGlmIChmaWxlW2ZpbGUubGVuZ3RoIC0gMV0gIT09ICcnIHx8XG4gICAgICAgICAgICAgICAgICAgIGZpbGVJbmRleCArIHRhaWwubGVuZ3RoID09PSBmaWxlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhaWxTdGFydC0tO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy4jbWF0Y2hPbmUoZmlsZSwgdGFpbCwgcGFydGlhbCwgdGFpbFN0YXJ0LCAwKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbGVUYWlsTWF0Y2ggPSB0YWlsLmxlbmd0aCArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IHdlIGtub3cgdGhlIHRhaWwgbWF0Y2hlcyFcbiAgICAgICAgLy8gdGhlIG1pZGRsZSBpcyB6ZXJvIG9yIG1vcmUgcG9ydGlvbnMgd3JhcHBlZCBpbiAqKiwgcG9zc2libHlcbiAgICAgICAgLy8gY29udGFpbmluZyBtb3JlICoqIHNlY3Rpb25zLlxuICAgICAgICAvLyBzbyBhLyoqL2IvKiovYy8qKi9kIGhhcyBiZWNvbWUgKiovYi8qKi9jLyoqXG4gICAgICAgIC8vIGlmIGl0J3MgZW1wdHksIGl0IG1lYW5zIGEvKiovYiwganVzdCB2ZXJpZnkgd2UgaGF2ZSBubyBiYWQgZG90c1xuICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIHRhaWwsIHNvIGl0IGVuZHMgb24gLyoqLCB0aGVuIHdlIG11c3QgaGF2ZSAqc29tZXRoaW5nKlxuICAgICAgICAvLyBhZnRlciB0aGUgaGVhZCwgb3IgaXQncyBub3QgYSBtYXRjXG4gICAgICAgIGlmICghYm9keS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBzYXdTb21lID0gISFmaWxlVGFpbE1hdGNoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZpbGVJbmRleDsgaSA8IGZpbGUubGVuZ3RoIC0gZmlsZVRhaWxNYXRjaDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZiA9IFN0cmluZyhmaWxlW2ldKTtcbiAgICAgICAgICAgICAgICBzYXdTb21lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgIGYgPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAgICAgKCF0aGlzLm9wdGlvbnMuZG90ICYmIGYuc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaW4gcGFydGlhbCBtb2RlLCB3ZSBqdXN0IG5lZWQgdG8gZ2V0IHBhc3QgYWxsIGZpbGUgcGFydHNcbiAgICAgICAgICAgIHJldHVybiBwYXJ0aWFsIHx8IHNhd1NvbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gbm93IHdlIGtub3cgdGhhdCB0aGVyZSdzIG9uZSBvciBtb3JlIGJvZHkgc2VjdGlvbnMsIHdoaWNoIGNhblxuICAgICAgICAvLyBiZSBtYXRjaGVkIGFueXdoZXJlIGZyb20gdGhlIDAgaW5kZXggKGJlY2F1c2UgdGhlIGhlYWQgd2FzIHBydW5lZClcbiAgICAgICAgLy8gdGhyb3VnaCB0byB0aGUgbGVuZ3RoLWZpbGVUYWlsTWF0Y2ggaW5kZXguXG4gICAgICAgIC8vIHNwbGl0IHRoZSBib2R5IHVwIGludG8gc2VjdGlvbnMsIGFuZCBub3RlIHRoZSBtaW5pbXVtIGluZGV4IGl0IGNhblxuICAgICAgICAvLyBiZSBmb3VuZCBhdCAoc3RhcnQgd2l0aCB0aGUgbGVuZ3RoIG9mIGFsbCBwcmV2aW91cyBzZWdtZW50cylcbiAgICAgICAgLy8gW3NlY3Rpb24sIGJlZm9yZSwgYWZ0ZXJdXG4gICAgICAgIGNvbnN0IGJvZHlTZWdtZW50cyA9IFtbW10sIDBdXTtcbiAgICAgICAgbGV0IGN1cnJlbnRCb2R5ID0gYm9keVNlZ21lbnRzWzBdO1xuICAgICAgICBsZXQgbm9uR3NQYXJ0cyA9IDA7XG4gICAgICAgIGNvbnN0IG5vbkdzUGFydHNTdW1zID0gWzBdO1xuICAgICAgICBmb3IgKGNvbnN0IGIgb2YgYm9keSkge1xuICAgICAgICAgICAgaWYgKGIgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgbm9uR3NQYXJ0c1N1bXMucHVzaChub25Hc1BhcnRzKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50Qm9keSA9IFtbXSwgMF07XG4gICAgICAgICAgICAgICAgYm9keVNlZ21lbnRzLnB1c2goY3VycmVudEJvZHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEJvZHlbMF0ucHVzaChiKTtcbiAgICAgICAgICAgICAgICBub25Hc1BhcnRzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSBib2R5U2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgZmlsZUxlbmd0aCA9IGZpbGUubGVuZ3RoIC0gZmlsZVRhaWxNYXRjaDtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIGJvZHlTZWdtZW50cykge1xuICAgICAgICAgICAgYlsxXSA9IGZpbGVMZW5ndGggLSAobm9uR3NQYXJ0c1N1bXNbaS0tXSArIGJbMF0ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISF0aGlzLiNtYXRjaEdsb2JTdGFyQm9keVNlY3Rpb25zKGZpbGUsIGJvZHlTZWdtZW50cywgZmlsZUluZGV4LCAwLCBwYXJ0aWFsLCAwLCAhIWZpbGVUYWlsTWF0Y2gpO1xuICAgIH1cbiAgICAvLyByZXR1cm4gZmFsc2UgZm9yIFwibm9wZSwgbm90IG1hdGNoaW5nXCJcbiAgICAvLyByZXR1cm4gbnVsbCBmb3IgXCJub3QgbWF0Y2hpbmcsIGNhbm5vdCBrZWVwIHRyeWluZ1wiXG4gICAgI21hdGNoR2xvYlN0YXJCb2R5U2VjdGlvbnMoZmlsZSwgXG4gICAgLy8gcGF0dGVybiBzZWN0aW9uLCBsYXN0IHBvc3NpYmxlIHBvc2l0aW9uIGZvciBpdFxuICAgIGJvZHlTZWdtZW50cywgZmlsZUluZGV4LCBib2R5SW5kZXgsIHBhcnRpYWwsIGdsb2JTdGFyRGVwdGgsIHNhd1RhaWwpIHtcbiAgICAgICAgLy8gdGFrZSB0aGUgZmlyc3QgYm9keSBzZWdtZW50LCBhbmQgd2FsayBmcm9tIGZpbGVJbmRleCB0byBpdHMgXCJhZnRlclwiXG4gICAgICAgIC8vIHZhbHVlIGF0IHRoZSBlbmRcbiAgICAgICAgLy8gSWYgaXQgZG9lc24ndCBtYXRjaCBhdCB0aGF0IHBvc2l0aW9uLCB3ZSBpbmNyZW1lbnQsIHVudGlsIHdlIGhpdFxuICAgICAgICAvLyB0aGF0IGZpbmFsIHBvc3NpYmxlIHBvc2l0aW9uLCBhbmQgZ2l2ZSB1cC5cbiAgICAgICAgLy8gSWYgaXQgZG9lcyBtYXRjaCwgdGhlbiBhZHZhbmNlIGFuZCB0cnkgdG8gcmVzdC5cbiAgICAgICAgLy8gSWYgYW55IG9mIHRoZW0gZmFpbCB3ZSBrZWVwIHdhbGtpbmcgZm9yd2FyZC5cbiAgICAgICAgLy8gdGhpcyBpcyBzdGlsbCBhIGJpdCByZWN1cnNpdmVseSBwYWluZnVsLCBidXQgaXQncyBtb3JlIGNvbnN0cmFpbmVkXG4gICAgICAgIC8vIHRoYW4gcHJldmlvdXMgaW1wbGVtZW50YXRpb25zLCBiZWNhdXNlIHdlIG5ldmVyIHRlc3Qgc29tZXRoaW5nIHRoYXRcbiAgICAgICAgLy8gY2FuJ3QgcG9zc2libHkgYmUgYSB2YWxpZCBtYXRjaGluZyBjb25kaXRpb24uXG4gICAgICAgIGNvbnN0IGJzID0gYm9keVNlZ21lbnRzW2JvZHlJbmRleF07XG4gICAgICAgIGlmICghYnMpIHtcbiAgICAgICAgICAgIC8vIGp1c3QgbWFrZSBzdXJlIHRoYXQgdGhlcmUncyBubyBiYWQgZG90c1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZpbGVJbmRleDsgaSA8IGZpbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzYXdUYWlsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBmID0gZmlsZVtpXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gJy4nIHx8XG4gICAgICAgICAgICAgICAgICAgIGYgPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAgICAgKCF0aGlzLm9wdGlvbnMuZG90ICYmIGYuc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNhd1RhaWw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGF2ZSBhIG5vbi1nbG9ic3RhciBib2R5IHNlY3Rpb24gdG8gdGVzdFxuICAgICAgICBjb25zdCBbYm9keSwgYWZ0ZXJdID0gYnM7XG4gICAgICAgIHdoaWxlIChmaWxlSW5kZXggPD0gYWZ0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSB0aGlzLiNtYXRjaE9uZShmaWxlLnNsaWNlKDAsIGZpbGVJbmRleCArIGJvZHkubGVuZ3RoKSwgYm9keSwgcGFydGlhbCwgZmlsZUluZGV4LCAwKTtcbiAgICAgICAgICAgIC8vIGlmIGxpbWl0IGV4Y2VlZGVkLCBubyBtYXRjaC4gaW50ZW50aW9uYWwgZmFsc2UgbmVnYXRpdmUsXG4gICAgICAgICAgICAvLyBhY2NlcHRhYmxlIGJyZWFrIGluIGNvcnJlY3RuZXNzIGZvciBzZWN1cml0eS5cbiAgICAgICAgICAgIGlmIChtICYmIGdsb2JTdGFyRGVwdGggPCB0aGlzLm1heEdsb2JzdGFyUmVjdXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gbWF0Y2ghIHNlZSBpZiB0aGUgcmVzdCBtYXRjaC4gaWYgc28sIHdlJ3JlIGRvbmUhXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gdGhpcy4jbWF0Y2hHbG9iU3RhckJvZHlTZWN0aW9ucyhmaWxlLCBib2R5U2VnbWVudHMsIGZpbGVJbmRleCArIGJvZHkubGVuZ3RoLCBib2R5SW5kZXggKyAxLCBwYXJ0aWFsLCBnbG9iU3RhckRlcHRoICsgMSwgc2F3VGFpbCk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmID0gZmlsZVtmaWxlSW5kZXhdO1xuICAgICAgICAgICAgaWYgKGYgPT09ICcuJyB8fFxuICAgICAgICAgICAgICAgIGYgPT09ICcuLicgfHxcbiAgICAgICAgICAgICAgICAoIXRoaXMub3B0aW9ucy5kb3QgJiYgZi5zdGFydHNXaXRoKCcuJykpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsZUluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2Fsa2VkIG9mZi4gbm8gcG9pbnQgY29udGludWluZ1xuICAgICAgICByZXR1cm4gcGFydGlhbCB8fCBudWxsO1xuICAgIH1cbiAgICAjbWF0Y2hPbmUoZmlsZSwgcGF0dGVybiwgcGFydGlhbCwgZmlsZUluZGV4LCBwYXR0ZXJuSW5kZXgpIHtcbiAgICAgICAgbGV0IGZpO1xuICAgICAgICBsZXQgcGk7XG4gICAgICAgIGxldCBwbDtcbiAgICAgICAgbGV0IGZsO1xuICAgICAgICBmb3IgKGZpID0gZmlsZUluZGV4LFxuICAgICAgICAgICAgcGkgPSBwYXR0ZXJuSW5kZXgsXG4gICAgICAgICAgICBmbCA9IGZpbGUubGVuZ3RoLFxuICAgICAgICAgICAgcGwgPSBwYXR0ZXJuLmxlbmd0aDsgZmkgPCBmbCAmJiBwaSA8IHBsOyBmaSsrLCBwaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZSBsb29wJyk7XG4gICAgICAgICAgICBsZXQgcCA9IHBhdHRlcm5bcGldO1xuICAgICAgICAgICAgbGV0IGYgPSBmaWxlW2ZpXTtcbiAgICAgICAgICAgIHRoaXMuZGVidWcocGF0dGVybiwgcCwgZik7XG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgaW1wb3NzaWJsZS5cbiAgICAgICAgICAgIC8vIHNvbWUgaW52YWxpZCByZWdleHAgc3R1ZmYgaW4gdGhlIHNldC5cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKHAgPT09IGZhbHNlIHx8IHAgPT09IEdMT0JTVEFSKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBvdGhlciB0aGFuICoqXG4gICAgICAgICAgICAvLyBub24tbWFnaWMgcGF0dGVybnMganVzdCBoYXZlIHRvIG1hdGNoIGV4YWN0bHlcbiAgICAgICAgICAgIC8vIHBhdHRlcm5zIHdpdGggbWFnaWMgaGF2ZSBiZWVuIHR1cm5lZCBpbnRvIHJlZ2V4cHMuXG4gICAgICAgICAgICBsZXQgaGl0O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGhpdCA9IGYgPT09IHA7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJ1Zygnc3RyaW5nIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhpdCA9IHAudGVzdChmKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdwYXR0ZXJuIG1hdGNoJywgcCwgZiwgaGl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaGl0KVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBlbmRpbmcgaW4gLyBtZWFucyB0aGF0IHdlJ2xsIGdldCBhIGZpbmFsIFwiXCJcbiAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gIFRoaXMgY2FuIG9ubHkgbWF0Y2ggYVxuICAgICAgICAvLyBjb3JyZXNwb25kaW5nIFwiXCIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgICAgICAgLy8gSWYgdGhlIGZpbGUgZW5kcyBpbiAvLCB0aGVuIGl0IGNhbiBvbmx5IG1hdGNoIGFcbiAgICAgICAgLy8gYSBwYXR0ZXJuIHRoYXQgZW5kcyBpbiAvLCB1bmxlc3MgdGhlIHBhdHRlcm4ganVzdFxuICAgICAgICAvLyBkb2Vzbid0IGhhdmUgYW55IG1vcmUgZm9yIGl0LiBCdXQsIGEvYi8gc2hvdWxkICpub3QqXG4gICAgICAgIC8vIG1hdGNoIFwiYS9iLypcIiwgZXZlbiB0aG91Z2ggXCJcIiBtYXRjaGVzIGFnYWluc3QgdGhlXG4gICAgICAgIC8vIFteL10qPyBwYXR0ZXJuLCBleGNlcHQgaW4gcGFydGlhbCBtb2RlLCB3aGVyZSBpdCBtaWdodFxuICAgICAgICAvLyBzaW1wbHkgbm90IGJlIHJlYWNoZWQgeWV0LlxuICAgICAgICAvLyBIb3dldmVyLCBhL2IvIHNob3VsZCBzdGlsbCBzYXRpc2Z5IGEvKlxuICAgICAgICAvLyBub3cgZWl0aGVyIHdlIGZlbGwgb2ZmIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIG9yIHdlJ3JlIGRvbmUuXG4gICAgICAgIGlmIChmaSA9PT0gZmwgJiYgcGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4gYW5kIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICAgICAgICAvLyBhbiBleGFjdCBoaXQhXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmaSA9PT0gZmwpIHtcbiAgICAgICAgICAgIC8vIHJhbiBvdXQgb2YgZmlsZSwgYnV0IHN0aWxsIGhhZCBwYXR0ZXJuIGxlZnQuXG4gICAgICAgICAgICAvLyB0aGlzIGlzIG9rIGlmIHdlJ3JlIGRvaW5nIHRoZSBtYXRjaCBhcyBwYXJ0IG9mXG4gICAgICAgICAgICAvLyBhIGdsb2IgZnMgdHJhdmVyc2FsLlxuICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGkgPT09IHBsKSB7XG4gICAgICAgICAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4sIHN0aWxsIGhhdmUgZmlsZSBsZWZ0LlxuICAgICAgICAgICAgLy8gdGhpcyBpcyBvbmx5IGFjY2VwdGFibGUgaWYgd2UncmUgb24gdGhlIHZlcnkgbGFzdFxuICAgICAgICAgICAgLy8gZW1wdHkgc2VnbWVudCBvZiBhIGZpbGUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICAgICAgICAgICAgLy8gYS8qIHNob3VsZCBtYXRjaCBhL2IvXG4gICAgICAgICAgICByZXR1cm4gZmkgPT09IGZsIC0gMSAmJiBmaWxlW2ZpXSA9PT0gJyc7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSB1bnJlYWNoYWJsZS5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignd3RmPycpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgIGJyYWNlRXhwYW5kKCkge1xuICAgICAgICByZXR1cm4gYnJhY2VFeHBhbmQodGhpcy5wYXR0ZXJuLCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgICBwYXJzZShwYXR0ZXJuKSB7XG4gICAgICAgIGFzc2VydFZhbGlkUGF0dGVybihwYXR0ZXJuKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgLy8gc2hvcnRjdXRzXG4gICAgICAgIGlmIChwYXR0ZXJuID09PSAnKionKVxuICAgICAgICAgICAgcmV0dXJuIEdMT0JTVEFSO1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJycpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIC8vIGZhciBhbmQgYXdheSwgdGhlIG1vc3QgY29tbW9uIGdsb2IgcGF0dGVybiBwYXJ0cyBhcmVcbiAgICAgICAgLy8gKiwgKi4qLCBhbmQgKi48ZXh0PiAgQWRkIGEgZmFzdCBjaGVjayBtZXRob2QgZm9yIHRob3NlLlxuICAgICAgICBsZXQgbTtcbiAgICAgICAgbGV0IGZhc3RUZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKChtID0gcGF0dGVybi5tYXRjaChzdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJUZXN0RG90IDogc3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RFeHRSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZSA/XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kb3QgP1xuICAgICAgICAgICAgICAgICAgICBzdGFyRG90RXh0VGVzdE5vY2FzZURvdFxuICAgICAgICAgICAgICAgICAgICA6IHN0YXJEb3RFeHRUZXN0Tm9jYXNlXG4gICAgICAgICAgICAgICAgOiBvcHRpb25zLmRvdCA/IHN0YXJEb3RFeHRUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogc3RhckRvdEV4dFRlc3QpKG1bMV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKChtID0gcGF0dGVybi5tYXRjaChxbWFya3NSRSkpKSB7XG4gICAgICAgICAgICBmYXN0VGVzdCA9IChvcHRpb25zLm5vY2FzZSA/XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kb3QgP1xuICAgICAgICAgICAgICAgICAgICBxbWFya3NUZXN0Tm9jYXNlRG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdE5vY2FzZVxuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5kb3QgPyBxbWFya3NUZXN0RG90XG4gICAgICAgICAgICAgICAgICAgIDogcW1hcmtzVGVzdCkobSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKG0gPSBwYXR0ZXJuLm1hdGNoKHN0YXJEb3RTdGFyUkUpKSkge1xuICAgICAgICAgICAgZmFzdFRlc3QgPSBvcHRpb25zLmRvdCA/IHN0YXJEb3RTdGFyVGVzdERvdCA6IHN0YXJEb3RTdGFyVGVzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgobSA9IHBhdHRlcm4ubWF0Y2goZG90U3RhclJFKSkpIHtcbiAgICAgICAgICAgIGZhc3RUZXN0ID0gZG90U3RhclRlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmUgPSBBU1QuZnJvbUdsb2IocGF0dGVybiwgdGhpcy5vcHRpb25zKS50b01NUGF0dGVybigpO1xuICAgICAgICBpZiAoZmFzdFRlc3QgJiYgdHlwZW9mIHJlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgLy8gQXZvaWRzIG92ZXJyaWRpbmcgaW4gZnJvemVuIGVudmlyb25tZW50c1xuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyZSwgJ3Rlc3QnLCB7IHZhbHVlOiBmYXN0VGVzdCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmU7XG4gICAgfVxuICAgIG1ha2VSZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVnZXhwIHx8IHRoaXMucmVnZXhwID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZ2V4cDtcbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgdGhpcy5zZXQgaXMgYSAyZCBhcnJheSBvZiBwYXJ0aWFsXG4gICAgICAgIC8vIHBhdHRlcm4gc3RyaW5ncywgb3IgXCIqKlwiLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJdCdzIGJldHRlciB0byB1c2UgLm1hdGNoKCkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndFxuICAgICAgICAvLyBiZSB1c2VkLCByZWFsbHksIGJ1dCBpdCdzIHByZXR0eSBjb252ZW5pZW50IHNvbWV0aW1lcyxcbiAgICAgICAgLy8gd2hlbiB5b3UganVzdCB3YW50IHRvIHdvcmsgd2l0aCBhIHJlZ2V4LlxuICAgICAgICBjb25zdCBzZXQgPSB0aGlzLnNldDtcbiAgICAgICAgaWYgKCFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVnZXhwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHR3b1N0YXIgPSBvcHRpb25zLm5vZ2xvYnN0YXIgPyBzdGFyXG4gICAgICAgICAgICA6IG9wdGlvbnMuZG90ID8gdHdvU3RhckRvdFxuICAgICAgICAgICAgICAgIDogdHdvU3Rhck5vRG90O1xuICAgICAgICBjb25zdCBmbGFncyA9IG5ldyBTZXQob3B0aW9ucy5ub2Nhc2UgPyBbJ2knXSA6IFtdKTtcbiAgICAgICAgLy8gcmVnZXhwaWZ5IG5vbi1nbG9ic3RhciBwYXR0ZXJuc1xuICAgICAgICAvLyBpZiAqKiBpcyBvbmx5IGl0ZW0sIHRoZW4gd2UganVzdCBkbyBvbmUgdHdvU3RhclxuICAgICAgICAvLyBpZiAqKiBpcyBmaXJzdCwgYW5kIHRoZXJlIGFyZSBtb3JlLCBwcmVwZW5kIChcXC98dHdvU3RhclxcLyk/IHRvIG5leHRcbiAgICAgICAgLy8gaWYgKiogaXMgbGFzdCwgYXBwZW5kIChcXC90d29TdGFyfCkgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gaWYgKiogaXMgaW4gdGhlIG1pZGRsZSwgYXBwZW5kIChcXC98XFwvdHdvU3RhclxcLykgdG8gcHJldmlvdXNcbiAgICAgICAgLy8gdGhlbiBmaWx0ZXIgb3V0IEdMT0JTVEFSIHN5bWJvbHNcbiAgICAgICAgbGV0IHJlID0gc2V0XG4gICAgICAgICAgICAubWFwKHBhdHRlcm4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHAgPSBwYXR0ZXJuLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgcC5mbGFncy5zcGxpdCgnJykpXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hZGQoZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAodHlwZW9mIHAgPT09ICdzdHJpbmcnID8gcmVnRXhwRXNjYXBlKHApXG4gICAgICAgICAgICAgICAgICAgIDogcCA9PT0gR0xPQlNUQVIgPyBHTE9CU1RBUlxuICAgICAgICAgICAgICAgICAgICAgICAgOiBwLl9zcmMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcC5mb3JFYWNoKChwLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHBwW2kgKyAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gcHBbaSAtIDFdO1xuICAgICAgICAgICAgICAgIGlmIChwICE9PSBHTE9CU1RBUiB8fCBwcmV2ID09PSBHTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcmV2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiBuZXh0ICE9PSBHTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHBbaSArIDFdID0gJyg/OlxcXFwvfCcgKyB0d29TdGFyICsgJ1xcXFwvKT8nICsgbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBwW2ldID0gdHdvU3RhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSAtIDFdID0gcHJldiArICcoPzpcXFxcL3xcXFxcLycgKyB0d29TdGFyICsgJyk/JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmV4dCAhPT0gR0xPQlNUQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHBbaSAtIDFdID0gcHJldiArICcoPzpcXFxcL3xcXFxcLycgKyB0d29TdGFyICsgJ1xcXFwvKScgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICBwcFtpICsgMV0gPSBHTE9CU1RBUjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gcHAuZmlsdGVyKHAgPT4gcCAhPT0gR0xPQlNUQVIpO1xuICAgICAgICAgICAgLy8gRm9yIHBhcnRpYWwgbWF0Y2hlcywgd2UgbmVlZCB0byBtYWtlIHRoZSBwYXR0ZXJuIG1hdGNoXG4gICAgICAgICAgICAvLyBhbnkgcHJlZml4IG9mIHRoZSBmdWxsIHBhdGguIFdlIGRvIHRoaXMgYnkgZ2VuZXJhdGluZ1xuICAgICAgICAgICAgLy8gYWx0ZXJuYXRpdmUgcGF0dGVybnMgdGhhdCBtYXRjaCBwcm9ncmVzc2l2ZWx5IGxvbmdlciBwcmVmaXhlcy5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhcnRpYWwgJiYgZmlsdGVyZWQubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXhlcyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IGZpbHRlcmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZWZpeGVzLnB1c2goZmlsdGVyZWQuc2xpY2UoMCwgaSkuam9pbignLycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICcoPzonICsgcHJlZml4ZXMuam9pbignfCcpICsgJyknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkLmpvaW4oJy8nKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCd8Jyk7XG4gICAgICAgIC8vIG5lZWQgdG8gd3JhcCBpbiBwYXJlbnMgaWYgd2UgaGFkIG1vcmUgdGhhbiBvbmUgdGhpbmcgd2l0aCB8LFxuICAgICAgICAvLyBvdGhlcndpc2Ugb25seSB0aGUgZmlyc3Qgd2lsbCBiZSBhbmNob3JlZCB0byBeIGFuZCB0aGUgbGFzdCB0byAkXG4gICAgICAgIGNvbnN0IFtvcGVuLCBjbG9zZV0gPSBzZXQubGVuZ3RoID4gMSA/IFsnKD86JywgJyknXSA6IFsnJywgJyddO1xuICAgICAgICAvLyBtdXN0IG1hdGNoIGVudGlyZSBwYXR0ZXJuXG4gICAgICAgIC8vIGVuZGluZyBpbiBhICogb3IgKiogd2lsbCBtYWtlIGl0IGxlc3Mgc3RyaWN0LlxuICAgICAgICByZSA9ICdeJyArIG9wZW4gKyByZSArIGNsb3NlICsgJyQnO1xuICAgICAgICAvLyBJbiBwYXJ0aWFsIG1vZGUsICcvJyBzaG91bGQgYWx3YXlzIG1hdGNoIGFzIGl0J3MgYSB2YWxpZCBwcmVmaXggZm9yIGFueSBwYXR0ZXJuXG4gICAgICAgIGlmICh0aGlzLnBhcnRpYWwpIHtcbiAgICAgICAgICAgIHJlID0gJ14oPzpcXFxcL3wnICsgb3BlbiArIHJlLnNsaWNlKDEsIC0xKSArIGNsb3NlICsgJykkJztcbiAgICAgICAgfVxuICAgICAgICAvLyBjYW4gbWF0Y2ggYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBub3QgdGhpcy5cbiAgICAgICAgaWYgKHRoaXMubmVnYXRlKVxuICAgICAgICAgICAgcmUgPSAnXig/IScgKyByZSArICcpLiskJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMucmVnZXhwID0gbmV3IFJlZ0V4cChyZSwgWy4uLmZsYWdzXS5qb2luKCcnKSk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICAgICAgdGhpcy5yZWdleHAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gdGhpcy5yZWdleHA7XG4gICAgfVxuICAgIHNsYXNoU3BsaXQocCkge1xuICAgICAgICAvLyBpZiBwIHN0YXJ0cyB3aXRoIC8vIG9uIHdpbmRvd3MsIHdlIHByZXNlcnZlIHRoYXRcbiAgICAgICAgLy8gc28gdGhhdCBVTkMgcGF0aHMgYXJlbid0IGJyb2tlbi4gIE90aGVyd2lzZSwgYW55IG51bWJlciBvZlxuICAgICAgICAvLyAvIGNoYXJhY3RlcnMgYXJlIGNvYWxlc2NlZCBpbnRvIG9uZSwgdW5sZXNzXG4gICAgICAgIC8vIHByZXNlcnZlTXVsdGlwbGVTbGFzaGVzIGlzIHNldCB0byB0cnVlLlxuICAgICAgICBpZiAodGhpcy5wcmVzZXJ2ZU11bHRpcGxlU2xhc2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoJy8nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzV2luZG93cyAmJiAvXlxcL1xcL1teL10rLy50ZXN0KHApKSB7XG4gICAgICAgICAgICAvLyBhZGQgYW4gZXh0cmEgJycgZm9yIHRoZSBvbmUgd2UgbG9zZVxuICAgICAgICAgICAgcmV0dXJuIFsnJywgLi4ucC5zcGxpdCgvXFwvKy8pXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwLnNwbGl0KC9cXC8rLyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWF0Y2goZiwgcGFydGlhbCA9IHRoaXMucGFydGlhbCkge1xuICAgICAgICB0aGlzLmRlYnVnKCdtYXRjaCcsIGYsIHRoaXMucGF0dGVybik7XG4gICAgICAgIC8vIHNob3J0LWNpcmN1aXQgaW4gdGhlIGNhc2Ugb2YgYnVzdGVkIHRoaW5ncy5cbiAgICAgICAgLy8gY29tbWVudHMsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuY29tbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm4gZiA9PT0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYgPT09ICcvJyAmJiBwYXJ0aWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAvLyB3aW5kb3dzOiBuZWVkIHRvIHVzZSAvLCBub3QgXFxcbiAgICAgICAgaWYgKHRoaXMuaXNXaW5kb3dzKSB7XG4gICAgICAgICAgICBmID0gZi5zcGxpdCgnXFxcXCcpLmpvaW4oJy8nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0cmVhdCB0aGUgdGVzdCBwYXRoIGFzIGEgc2V0IG9mIHBhdGhwYXJ0cy5cbiAgICAgICAgY29uc3QgZmYgPSB0aGlzLnNsYXNoU3BsaXQoZik7XG4gICAgICAgIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc3BsaXQnLCBmZik7XG4gICAgICAgIC8vIGp1c3QgT05FIG9mIHRoZSBwYXR0ZXJuIHNldHMgaW4gdGhpcy5zZXQgbmVlZHMgdG8gbWF0Y2hcbiAgICAgICAgLy8gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHZhbGlkLiAgSWYgbmVnYXRpbmcsIHRoZW4ganVzdCBvbmVcbiAgICAgICAgLy8gbWF0Y2ggbWVhbnMgdGhhdCB3ZSBoYXZlIGZhaWxlZC5cbiAgICAgICAgLy8gRWl0aGVyIHdheSwgcmV0dXJuIG9uIHRoZSBmaXJzdCBoaXQuXG4gICAgICAgIGNvbnN0IHNldCA9IHRoaXMuc2V0O1xuICAgICAgICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgJ3NldCcsIHNldCk7XG4gICAgICAgIC8vIEZpbmQgdGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoIGJ5IGxvb2tpbmcgZm9yIHRoZSBsYXN0IG5vbi1lbXB0eSBzZWdtZW50XG4gICAgICAgIGxldCBmaWxlbmFtZSA9IGZmW2ZmLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoIWZpbGVuYW1lKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZmYubGVuZ3RoIC0gMjsgIWZpbGVuYW1lICYmIGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmZltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2Ygc2V0KSB7XG4gICAgICAgICAgICBsZXQgZmlsZSA9IGZmO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubWF0Y2hCYXNlICYmIHBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZmlsZSA9IFtmaWxlbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBoaXQgPSB0aGlzLm1hdGNoT25lKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpO1xuICAgICAgICAgICAgaWYgKGhpdCkge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5uZWdhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlkbid0IGdldCBhbnkgaGl0cy4gIHRoaXMgaXMgc3VjY2VzcyBpZiBpdCdzIGEgbmVnYXRpdmVcbiAgICAgICAgLy8gcGF0dGVybiwgZmFpbHVyZSBvdGhlcndpc2UuXG4gICAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uZWdhdGU7XG4gICAgfVxuICAgIHN0YXRpYyBkZWZhdWx0cyhkZWYpIHtcbiAgICAgICAgcmV0dXJuIG1pbmltYXRjaC5kZWZhdWx0cyhkZWYpLk1pbmltYXRjaDtcbiAgICB9XG59XG4vKiBjOCBpZ25vcmUgc3RhcnQgKi9cbmV4cG9ydCB7IEFTVCB9IGZyb20gJy4vYXN0LmpzJztcbmV4cG9ydCB7IGVzY2FwZSB9IGZyb20gJy4vZXNjYXBlLmpzJztcbmV4cG9ydCB7IHVuZXNjYXBlIH0gZnJvbSAnLi91bmVzY2FwZS5qcyc7XG4vKiBjOCBpZ25vcmUgc3RvcCAqL1xubWluaW1hdGNoLkFTVCA9IEFTVDtcbm1pbmltYXRjaC5NaW5pbWF0Y2ggPSBNaW5pbWF0Y2g7XG5taW5pbWF0Y2guZXNjYXBlID0gZXNjYXBlO1xubWluaW1hdGNoLnVuZXNjYXBlID0gdW5lc2NhcGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLAogICAgImltcG9ydCB7IE1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgUGF0aFNjdXJyeSwgUGF0aFNjdXJyeURhcndpbiwgUGF0aFNjdXJyeVBvc2l4LCBQYXRoU2N1cnJ5V2luMzIsIH0gZnJvbSAncGF0aC1zY3VycnknO1xuaW1wb3J0IHsgUGF0dGVybiB9IGZyb20gJy4vcGF0dGVybi5qcyc7XG5pbXBvcnQgeyBHbG9iU3RyZWFtLCBHbG9iV2Fsa2VyIH0gZnJvbSAnLi93YWxrZXIuanMnO1xuLy8gaWYgbm8gcHJvY2VzcyBnbG9iYWwsIGp1c3QgY2FsbCBpdCBsaW51eC5cbi8vIHNvIHdlIGRlZmF1bHQgdG8gY2FzZS1zZW5zaXRpdmUsIC8gc2VwYXJhdG9yc1xuY29uc3QgZGVmYXVsdFBsYXRmb3JtID0gKHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJlxuICAgIHByb2Nlc3MgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3N0cmluZycpID9cbiAgICBwcm9jZXNzLnBsYXRmb3JtXG4gICAgOiAnbGludXgnO1xuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjYW4gcGVyZm9ybSBnbG9iIHBhdHRlcm4gdHJhdmVyc2Fscy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdsb2Ige1xuICAgIGFic29sdXRlO1xuICAgIGN3ZDtcbiAgICByb290O1xuICAgIGRvdDtcbiAgICBkb3RSZWxhdGl2ZTtcbiAgICBmb2xsb3c7XG4gICAgaWdub3JlO1xuICAgIG1hZ2ljYWxCcmFjZXM7XG4gICAgbWFyaztcbiAgICBtYXRjaEJhc2U7XG4gICAgbWF4RGVwdGg7XG4gICAgbm9icmFjZTtcbiAgICBub2Nhc2U7XG4gICAgbm9kaXI7XG4gICAgbm9leHQ7XG4gICAgbm9nbG9ic3RhcjtcbiAgICBwYXR0ZXJuO1xuICAgIHBsYXRmb3JtO1xuICAgIHJlYWxwYXRoO1xuICAgIHNjdXJyeTtcbiAgICBzdGF0O1xuICAgIHNpZ25hbDtcbiAgICB3aW5kb3dzUGF0aHNOb0VzY2FwZTtcbiAgICB3aXRoRmlsZVR5cGVzO1xuICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM7XG4gICAgLyoqXG4gICAgICogVGhlIG9wdGlvbnMgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqL1xuICAgIG9wdHM7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgcGFyc2VkIGltbXV0YWJsZSB7QGxpbmsgUGF0dGVybn0gb2JqZWN0cy5cbiAgICAgKi9cbiAgICBwYXR0ZXJucztcbiAgICAvKipcbiAgICAgKiBBbGwgb3B0aW9ucyBhcmUgc3RvcmVkIGFzIHByb3BlcnRpZXMgb24gdGhlIGBHbG9iYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIEdsb2JPcHRpb25zfSBmb3IgZnVsbCBvcHRpb25zIGRlc2NyaXB0aW9ucy5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBhIHByZXZpb3VzIGBHbG9iYCBvYmplY3QgY2FuIGJlIHBhc3NlZCBhcyB0aGVcbiAgICAgKiBgR2xvYk9wdGlvbnNgIHRvIGFub3RoZXIgYEdsb2JgIGluc3RhbnRpYXRpb24gdG8gcmUtdXNlIHNldHRpbmdzXG4gICAgICogYW5kIGNhY2hlcyB3aXRoIGEgbmV3IHBhdHRlcm4uXG4gICAgICpcbiAgICAgKiBUcmF2ZXJzYWwgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gcnVuIHRoZSB3YWxrXG4gICAgICogYWdhaW4uXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGF0dGVybiwgb3B0cykge1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFvcHRzKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZ2xvYiBvcHRpb25zIHJlcXVpcmVkJyk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMud2l0aEZpbGVUeXBlcyA9ICEhb3B0cy53aXRoRmlsZVR5cGVzO1xuICAgICAgICB0aGlzLnNpZ25hbCA9IG9wdHMuc2lnbmFsO1xuICAgICAgICB0aGlzLmZvbGxvdyA9ICEhb3B0cy5mb2xsb3c7XG4gICAgICAgIHRoaXMuZG90ID0gISFvcHRzLmRvdDtcbiAgICAgICAgdGhpcy5kb3RSZWxhdGl2ZSA9ICEhb3B0cy5kb3RSZWxhdGl2ZTtcbiAgICAgICAgdGhpcy5ub2RpciA9ICEhb3B0cy5ub2RpcjtcbiAgICAgICAgdGhpcy5tYXJrID0gISFvcHRzLm1hcms7XG4gICAgICAgIGlmICghb3B0cy5jd2QpIHtcbiAgICAgICAgICAgIHRoaXMuY3dkID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0cy5jd2QgaW5zdGFuY2VvZiBVUkwgfHwgb3B0cy5jd2Quc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICBvcHRzLmN3ZCA9IGZpbGVVUkxUb1BhdGgob3B0cy5jd2QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3dkID0gb3B0cy5jd2QgfHwgJyc7XG4gICAgICAgIHRoaXMucm9vdCA9IG9wdHMucm9vdDtcbiAgICAgICAgdGhpcy5tYWdpY2FsQnJhY2VzID0gISFvcHRzLm1hZ2ljYWxCcmFjZXM7XG4gICAgICAgIHRoaXMubm9icmFjZSA9ICEhb3B0cy5ub2JyYWNlO1xuICAgICAgICB0aGlzLm5vZXh0ID0gISFvcHRzLm5vZXh0O1xuICAgICAgICB0aGlzLnJlYWxwYXRoID0gISFvcHRzLnJlYWxwYXRoO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gb3B0cy5hYnNvbHV0ZTtcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzID0gb3B0cy5pbmNsdWRlQ2hpbGRNYXRjaGVzICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub2dsb2JzdGFyID0gISFvcHRzLm5vZ2xvYnN0YXI7XG4gICAgICAgIHRoaXMubWF0Y2hCYXNlID0gISFvcHRzLm1hdGNoQmFzZTtcbiAgICAgICAgdGhpcy5tYXhEZXB0aCA9XG4gICAgICAgICAgICB0eXBlb2Ygb3B0cy5tYXhEZXB0aCA9PT0gJ251bWJlcicgPyBvcHRzLm1heERlcHRoIDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMuc3RhdCA9ICEhb3B0cy5zdGF0O1xuICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdHMuaWdub3JlO1xuICAgICAgICBpZiAodGhpcy53aXRoRmlsZVR5cGVzICYmIHRoaXMuYWJzb2x1dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3Qgc2V0IGFic29sdXRlIGFuZCB3aXRoRmlsZVR5cGVzOnRydWUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBwYXR0ZXJuID0gW3BhdHRlcm5dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2luZG93c1BhdGhzTm9Fc2NhcGUgPVxuICAgICAgICAgICAgISFvcHRzLndpbmRvd3NQYXRoc05vRXNjYXBlIHx8XG4gICAgICAgICAgICAgICAgb3B0cy5hbGxvd1dpbmRvd3NFc2NhcGUgPT09XG4gICAgICAgICAgICAgICAgICAgIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy53aW5kb3dzUGF0aHNOb0VzY2FwZSkge1xuICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4ubWFwKHAgPT4gcC5yZXBsYWNlKC9cXFxcL2csICcvJykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1hdGNoQmFzZSkge1xuICAgICAgICAgICAgaWYgKG9wdHMubm9nbG9ic3Rhcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Jhc2UgbWF0Y2hpbmcgcmVxdWlyZXMgZ2xvYnN0YXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLm1hcChwID0+IChwLmluY2x1ZGVzKCcvJykgPyBwIDogYC4vKiovJHtwfWApKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gb3B0cy5wbGF0Zm9ybSB8fCBkZWZhdWx0UGxhdGZvcm07XG4gICAgICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0gfTtcbiAgICAgICAgaWYgKG9wdHMuc2N1cnJ5KSB7XG4gICAgICAgICAgICB0aGlzLnNjdXJyeSA9IG9wdHMuc2N1cnJ5O1xuICAgICAgICAgICAgaWYgKG9wdHMubm9jYXNlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBvcHRzLm5vY2FzZSAhPT0gb3B0cy5zY3Vycnkubm9jYXNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub2Nhc2Ugb3B0aW9uIGNvbnRyYWRpY3RzIHByb3ZpZGVkIHNjdXJyeSBvcHRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFNjdXJyeSA9IG9wdHMucGxhdGZvcm0gPT09ICd3aW4zMicgPyBQYXRoU2N1cnJ5V2luMzJcbiAgICAgICAgICAgICAgICA6IG9wdHMucGxhdGZvcm0gPT09ICdkYXJ3aW4nID8gUGF0aFNjdXJyeURhcndpblxuICAgICAgICAgICAgICAgICAgICA6IG9wdHMucGxhdGZvcm0gPyBQYXRoU2N1cnJ5UG9zaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIDogUGF0aFNjdXJyeTtcbiAgICAgICAgICAgIHRoaXMuc2N1cnJ5ID0gbmV3IFNjdXJyeSh0aGlzLmN3ZCwge1xuICAgICAgICAgICAgICAgIG5vY2FzZTogb3B0cy5ub2Nhc2UsXG4gICAgICAgICAgICAgICAgZnM6IG9wdHMuZnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vY2FzZSA9IHRoaXMuc2N1cnJ5Lm5vY2FzZTtcbiAgICAgICAgLy8gSWYgeW91IGRvIG5vY2FzZTp0cnVlIG9uIGEgY2FzZS1zZW5zaXRpdmUgZmlsZSBzeXN0ZW0sIHRoZW5cbiAgICAgICAgLy8gd2UgbmVlZCB0byB1c2UgcmVnZXhwcyBpbnN0ZWFkIG9mIHN0cmluZ3MgZm9yIG5vbi1tYWdpY1xuICAgICAgICAvLyBwYXRoIHBvcnRpb25zLCBiZWNhdXNlIHN0YXR0aW5nIGBhQmNgIHdvbid0IHJldHVybiByZXN1bHRzXG4gICAgICAgIC8vIGZvciB0aGUgZmlsZSBgQWJDYCBmb3IgZXhhbXBsZS5cbiAgICAgICAgY29uc3Qgbm9jYXNlTWFnaWNPbmx5ID0gdGhpcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgfHwgdGhpcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbiAgICAgICAgY29uc3QgbW1vID0ge1xuICAgICAgICAgICAgLy8gZGVmYXVsdCBub2Nhc2UgYmFzZWQgb24gcGxhdGZvcm1cbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgICBkb3Q6IHRoaXMuZG90LFxuICAgICAgICAgICAgbWF0Y2hCYXNlOiB0aGlzLm1hdGNoQmFzZSxcbiAgICAgICAgICAgIG5vYnJhY2U6IHRoaXMubm9icmFjZSxcbiAgICAgICAgICAgIG5vY2FzZTogdGhpcy5ub2Nhc2UsXG4gICAgICAgICAgICBub2Nhc2VNYWdpY09ubHksXG4gICAgICAgICAgICBub2NvbW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBub2V4dDogdGhpcy5ub2V4dCxcbiAgICAgICAgICAgIG5vbmVnYXRlOiB0cnVlLFxuICAgICAgICAgICAgb3B0aW1pemF0aW9uTGV2ZWw6IDIsXG4gICAgICAgICAgICBwbGF0Zm9ybTogdGhpcy5wbGF0Zm9ybSxcbiAgICAgICAgICAgIHdpbmRvd3NQYXRoc05vRXNjYXBlOiB0aGlzLndpbmRvd3NQYXRoc05vRXNjYXBlLFxuICAgICAgICAgICAgZGVidWc6ICEhdGhpcy5vcHRzLmRlYnVnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtbXMgPSB0aGlzLnBhdHRlcm4ubWFwKHAgPT4gbmV3IE1pbmltYXRjaChwLCBtbW8pKTtcbiAgICAgICAgY29uc3QgW21hdGNoU2V0LCBnbG9iUGFydHNdID0gbW1zLnJlZHVjZSgoc2V0LCBtKSA9PiB7XG4gICAgICAgICAgICBzZXRbMF0ucHVzaCguLi5tLnNldCk7XG4gICAgICAgICAgICBzZXRbMV0ucHVzaCguLi5tLmdsb2JQYXJ0cyk7XG4gICAgICAgICAgICByZXR1cm4gc2V0O1xuICAgICAgICB9LCBbW10sIFtdXSk7XG4gICAgICAgIHRoaXMucGF0dGVybnMgPSBtYXRjaFNldC5tYXAoKHNldCwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZyA9IGdsb2JQYXJ0c1tpXTtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgaWYgKCFnKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBwYXR0ZXJuIG9iamVjdCcpO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHJldHVybiBuZXcgUGF0dGVybihzZXQsIGcsIDAsIHRoaXMucGxhdGZvcm0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgd2FsaygpIHtcbiAgICAgICAgLy8gV2Fsa2VycyBhbHdheXMgcmV0dXJuIGFycmF5IG9mIFBhdGggb2JqZWN0cywgc28gd2UganVzdCBoYXZlIHRvXG4gICAgICAgIC8vIGNvZXJjZSB0aGVtIGludG8gdGhlIHJpZ2h0IHNoYXBlLiAgSXQgd2lsbCBoYXZlIGFscmVhZHkgY2FsbGVkXG4gICAgICAgIC8vIHJlYWxwYXRoKCkgaWYgdGhlIG9wdGlvbiB3YXMgc2V0IHRvIGRvIHNvLCBzbyB3ZSBrbm93IHRoYXQncyBjYWNoZWQuXG4gICAgICAgIC8vIHN0YXJ0IG91dCBrbm93aW5nIHRoZSBjd2QsIGF0IGxlYXN0XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi4oYXdhaXQgbmV3IEdsb2JXYWxrZXIodGhpcy5wYXR0ZXJucywgdGhpcy5zY3VycnkuY3dkLCB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF4RGVwdGggKyB0aGlzLnNjdXJyeS5jd2QuZGVwdGgoKVxuICAgICAgICAgICAgICAgICAgICA6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIG5vY2FzZTogdGhpcy5ub2Nhc2UsXG4gICAgICAgICAgICAgICAgaW5jbHVkZUNoaWxkTWF0Y2hlczogdGhpcy5pbmNsdWRlQ2hpbGRNYXRjaGVzLFxuICAgICAgICAgICAgfSkud2FsaygpKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgd2Fsa1N5bmMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi5uZXcgR2xvYldhbGtlcih0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICAgICAgbWF4RGVwdGg6IHRoaXMubWF4RGVwdGggIT09IEluZmluaXR5ID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgICAgIDogSW5maW5pdHksXG4gICAgICAgICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlQ2hpbGRNYXRjaGVzOiB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMsXG4gICAgICAgICAgICB9KS53YWxrU3luYygpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdHJlYW0oKSB7XG4gICAgICAgIHJldHVybiBuZXcgR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtKCk7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgR2xvYlN0cmVhbSh0aGlzLnBhdHRlcm5zLCB0aGlzLnNjdXJyeS5jd2QsIHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIG1heERlcHRoOiB0aGlzLm1heERlcHRoICE9PSBJbmZpbml0eSA/XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZXB0aCArIHRoaXMuc2N1cnJ5LmN3ZC5kZXB0aCgpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSxcbiAgICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgICAgbm9jYXNlOiB0aGlzLm5vY2FzZSxcbiAgICAgICAgICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM6IHRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyxcbiAgICAgICAgfSkuc3RyZWFtU3luYygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHN5bmMgaXRlcmF0aW9uIGZ1bmN0aW9uLiBSZXR1cm5zIGEgR2VuZXJhdG9yIHRoYXRcbiAgICAgKiBpdGVyYXRlcyBvdmVyIHRoZSByZXN1bHRzLlxuICAgICAqL1xuICAgIGl0ZXJhdGVTeW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW1TeW5jKClbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgIH1cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlcmF0ZVN5bmMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBhc3luYyBpdGVyYXRpb24gZnVuY3Rpb24uIFJldHVybnMgYW4gQXN5bmNHZW5lcmF0b3IgdGhhdFxuICAgICAqIGl0ZXJhdGVzIG92ZXIgdGhlIHJlc3VsdHMuXG4gICAgICovXG4gICAgaXRlcmF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtKClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdGUoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nbG9iLmpzLm1hcCIsCiAgICAiaW1wb3J0e3RyYWNpbmdDaGFubmVsIGFzIEcsY2hhbm5lbCBhcyBQfWZyb21cIm5vZGU6ZGlhZ25vc3RpY3NfY2hhbm5lbFwiO3ZhciBTPVAoXCJscnUtY2FjaGU6bWV0cmljc1wiKSxXPUcoXCJscnUtY2FjaGVcIik7dmFyIEw9dHlwZW9mIHBlcmZvcm1hbmNlPT1cIm9iamVjdFwiJiZwZXJmb3JtYW5jZSYmdHlwZW9mIHBlcmZvcm1hbmNlLm5vdz09XCJmdW5jdGlvblwiP3BlcmZvcm1hbmNlOkRhdGU7dmFyIEQ9KCk9PlMuaGFzU3Vic2NyaWJlcnN8fFcuaGFzU3Vic2NyaWJlcnMsVT1uZXcgU2V0LE09dHlwZW9mIHByb2Nlc3M9PVwib2JqZWN0XCImJnByb2Nlc3M/cHJvY2Vzczp7fSxrPSh1LGUsdCxpKT0+e3R5cGVvZiBNLmVtaXRXYXJuaW5nPT1cImZ1bmN0aW9uXCI/TS5lbWl0V2FybmluZyh1LGUsdCxpKTpjb25zb2xlLmVycm9yKGBbJHt0fV0gJHtlfTogJHt1fWApfSxIPXU9PiFVLmhhcyh1KTt2YXIgVD11PT4hIXUmJnU9PT1NYXRoLmZsb29yKHUpJiZ1PjAmJmlzRmluaXRlKHUpLGo9dT0+VCh1KT91PD1NYXRoLnBvdygyLDgpP1VpbnQ4QXJyYXk6dTw9TWF0aC5wb3coMiwxNik/VWludDE2QXJyYXk6dTw9TWF0aC5wb3coMiwzMik/VWludDMyQXJyYXk6dTw9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI/TzpudWxsOm51bGwsTz1jbGFzcyBleHRlbmRzIEFycmF5e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuZmlsbCgwKX19LFI9Y2xhc3MgdXtoZWFwO2xlbmd0aDtzdGF0aWMjbz0hMTtzdGF0aWMgY3JlYXRlKGUpe2xldCB0PWooZSk7aWYoIXQpcmV0dXJuW107dS4jbz0hMDtsZXQgaT1uZXcgdShlLHQpO3JldHVybiB1LiNvPSExLGl9Y29uc3RydWN0b3IoZSx0KXtpZighdS4jbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW5zdGFudGlhdGUgU3RhY2sgdXNpbmcgU3RhY2suY3JlYXRlKG4pXCIpO3RoaXMuaGVhcD1uZXcgdChlKSx0aGlzLmxlbmd0aD0wfXB1c2goZSl7dGhpcy5oZWFwW3RoaXMubGVuZ3RoKytdPWV9cG9wKCl7cmV0dXJuIHRoaXMuaGVhcFstLXRoaXMubGVuZ3RoXX19LEk9Y2xhc3MgdXsjbzsjYzsjUzsjTzsjdzsjTTsjSTsjbTtnZXQgcGVyZigpe3JldHVybiB0aGlzLiNtfXR0bDt0dGxSZXNvbHV0aW9uO3R0bEF1dG9wdXJnZTt1cGRhdGVBZ2VPbkdldDt1cGRhdGVBZ2VPbkhhczthbGxvd1N0YWxlO25vRGlzcG9zZU9uU2V0O25vVXBkYXRlVFRMO21heEVudHJ5U2l6ZTtzaXplQ2FsY3VsYXRpb247bm9EZWxldGVPbkZldGNoUmVqZWN0aW9uO25vRGVsZXRlT25TdGFsZUdldDthbGxvd1N0YWxlT25GZXRjaEFib3J0O2FsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uO2lnbm9yZUZldGNoQWJvcnQ7YmFja2dyb3VuZEZldGNoU2l6ZTsjbjsjYjsjczsjaTsjdDsjbDsjdTsjYTsjaDsjeTsjcjsjXzsjRjsjZDsjZzsjVDsjVTsjZjsjeDtzdGF0aWMgdW5zYWZlRXhwb3NlSW50ZXJuYWxzKGUpe3JldHVybntzdGFydHM6ZS4jRix0dGxzOmUuI2QsYXV0b3B1cmdlVGltZXJzOmUuI2csc2l6ZXM6ZS4jXyxrZXlNYXA6ZS4jcyxrZXlMaXN0OmUuI2ksdmFsTGlzdDplLiN0LG5leHQ6ZS4jbCxwcmV2OmUuI3UsZ2V0IGhlYWQoKXtyZXR1cm4gZS4jYX0sZ2V0IHRhaWwoKXtyZXR1cm4gZS4jaH0sZnJlZTplLiN5LGlzQmFja2dyb3VuZEZldGNoOnQ9PmUuI2UodCksYmFja2dyb3VuZEZldGNoOih0LGkscyxuKT0+ZS4jUCh0LGkscyxuKSxtb3ZlVG9UYWlsOnQ9PmUuI0wodCksaW5kZXhlczp0PT5lLiNBKHQpLHJpbmRleGVzOnQ9PmUuI3oodCksaXNTdGFsZTp0PT5lLiNwKHQpfX1nZXQgbWF4KCl7cmV0dXJuIHRoaXMuI299Z2V0IG1heFNpemUoKXtyZXR1cm4gdGhpcy4jY31nZXQgY2FsY3VsYXRlZFNpemUoKXtyZXR1cm4gdGhpcy4jYn1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLiNufWdldCBmZXRjaE1ldGhvZCgpe3JldHVybiB0aGlzLiNNfWdldCBtZW1vTWV0aG9kKCl7cmV0dXJuIHRoaXMuI0l9Z2V0IGRpc3Bvc2UoKXtyZXR1cm4gdGhpcy4jU31nZXQgb25JbnNlcnQoKXtyZXR1cm4gdGhpcy4jT31nZXQgZGlzcG9zZUFmdGVyKCl7cmV0dXJuIHRoaXMuI3d9Y29uc3RydWN0b3IoZSl7bGV0e21heDp0PTAsdHRsOmksdHRsUmVzb2x1dGlvbjpzPTEsdHRsQXV0b3B1cmdlOm4sdXBkYXRlQWdlT25HZXQ6cix1cGRhdGVBZ2VPbkhhczpoLGFsbG93U3RhbGU6YSxkaXNwb3NlOm8sb25JbnNlcnQ6ZCxkaXNwb3NlQWZ0ZXI6eSxub0Rpc3Bvc2VPblNldDpfLG5vVXBkYXRlVFRMOmMsbWF4U2l6ZTpnPTAsbWF4RW50cnlTaXplOmY9MCxzaXplQ2FsY3VsYXRpb246YixmZXRjaE1ldGhvZDpsLG1lbW9NZXRob2Q6dyxub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb246Rixub0RlbGV0ZU9uU3RhbGVHZXQ6bSxhbGxvd1N0YWxlT25GZXRjaFJlamVjdGlvbjpwLGFsbG93U3RhbGVPbkZldGNoQWJvcnQ6QSxpZ25vcmVGZXRjaEFib3J0OnosYmFja2dyb3VuZEZldGNoU2l6ZTpDPTEscGVyZjpFfT1lO2lmKHRoaXMuYmFja2dyb3VuZEZldGNoU2l6ZT1DLEUhPT12b2lkIDAmJnR5cGVvZiBFPy5ub3chPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwicGVyZiBvcHRpb24gbXVzdCBoYXZlIGEgbm93KCkgbWV0aG9kIGlmIHNwZWNpZmllZFwiKTtpZih0aGlzLiNtPUU/P0wsdCE9PTAmJiFUKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtYXggb3B0aW9uIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyXCIpO2xldCB2PXQ/aih0KTpBcnJheTtpZighdil0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG1heCB2YWx1ZTogXCIrdCk7aWYodGhpcy4jbz10LHRoaXMuI2M9Zyx0aGlzLm1heEVudHJ5U2l6ZT1mfHx0aGlzLiNjLHRoaXMuc2l6ZUNhbGN1bGF0aW9uPWIsdGhpcy5zaXplQ2FsY3VsYXRpb24pe2lmKCF0aGlzLiNjJiYhdGhpcy5tYXhFbnRyeVNpemUpdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbm5vdCBzZXQgc2l6ZUNhbGN1bGF0aW9uIHdpdGhvdXQgc2V0dGluZyBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZVwiKTtpZih0eXBlb2YgdGhpcy5zaXplQ2FsY3VsYXRpb24hPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZUNhbGN1bGF0aW9uIHNldCB0byBub24tZnVuY3Rpb25cIil9aWYodyE9PXZvaWQgMCYmdHlwZW9mIHchPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwibWVtb01ldGhvZCBtdXN0IGJlIGEgZnVuY3Rpb24gaWYgZGVmaW5lZFwiKTtpZih0aGlzLiNJPXcsbCE9PXZvaWQgMCYmdHlwZW9mIGwhPVwiZnVuY3Rpb25cIil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZmV0Y2hNZXRob2QgbXVzdCBiZSBhIGZ1bmN0aW9uIGlmIHNwZWNpZmllZFwiKTtpZih0aGlzLiNNPWwsdGhpcy4jVT0hIWwsdGhpcy4jcz1uZXcgTWFwLHRoaXMuI2k9QXJyYXkuZnJvbSh7bGVuZ3RoOnR9KS5maWxsKHZvaWQgMCksdGhpcy4jdD1BcnJheS5mcm9tKHtsZW5ndGg6dH0pLmZpbGwodm9pZCAwKSx0aGlzLiNsPW5ldyB2KHQpLHRoaXMuI3U9bmV3IHYodCksdGhpcy4jYT0wLHRoaXMuI2g9MCx0aGlzLiN5PVIuY3JlYXRlKHQpLHRoaXMuI249MCx0aGlzLiNiPTAsdHlwZW9mIG89PVwiZnVuY3Rpb25cIiYmKHRoaXMuI1M9byksdHlwZW9mIGQ9PVwiZnVuY3Rpb25cIiYmKHRoaXMuI089ZCksdHlwZW9mIHk9PVwiZnVuY3Rpb25cIj8odGhpcy4jdz15LHRoaXMuI3I9W10pOih0aGlzLiN3PXZvaWQgMCx0aGlzLiNyPXZvaWQgMCksdGhpcy4jVD0hIXRoaXMuI1MsdGhpcy4jeD0hIXRoaXMuI08sdGhpcy4jZj0hIXRoaXMuI3csdGhpcy5ub0Rpc3Bvc2VPblNldD0hIV8sdGhpcy5ub1VwZGF0ZVRUTD0hIWMsdGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb249ISFGLHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb249ISFwLHRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydD0hIUEsdGhpcy5pZ25vcmVGZXRjaEFib3J0PSEheix0aGlzLm1heEVudHJ5U2l6ZSE9PTApe2lmKHRoaXMuI2MhPT0wJiYhVCh0aGlzLiNjKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwibWF4U2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWRcIik7aWYoIVQodGhpcy5tYXhFbnRyeVNpemUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJtYXhFbnRyeVNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgaWYgc3BlY2lmaWVkXCIpO3RoaXMuI1goKX1pZih0aGlzLmFsbG93U3RhbGU9ISFhLHRoaXMubm9EZWxldGVPblN0YWxlR2V0PSEhbSx0aGlzLnVwZGF0ZUFnZU9uR2V0PSEhcix0aGlzLnVwZGF0ZUFnZU9uSGFzPSEhaCx0aGlzLnR0bFJlc29sdXRpb249VChzKXx8cz09PTA/czoxLHRoaXMudHRsQXV0b3B1cmdlPSEhbix0aGlzLnR0bD1pfHwwLHRoaXMudHRsKXtpZighVCh0aGlzLnR0bCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcInR0bCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBzcGVjaWZpZWRcIik7dGhpcy4jaygpfWlmKHRoaXMuI289PT0wJiZ0aGlzLnR0bD09PTAmJnRoaXMuI2M9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBdCBsZWFzdCBvbmUgb2YgbWF4LCBtYXhTaXplLCBvciB0dGwgaXMgcmVxdWlyZWRcIik7aWYoIXRoaXMudHRsQXV0b3B1cmdlJiYhdGhpcy4jbyYmIXRoaXMuI2Mpe2xldCB4PVwiTFJVX0NBQ0hFX1VOQk9VTkRFRFwiO0goeCkmJihVLmFkZCh4KSxrKFwiVFRMIGNhY2hpbmcgd2l0aG91dCB0dGxBdXRvcHVyZ2UsIG1heCwgb3IgbWF4U2l6ZSBjYW4gcmVzdWx0IGluIHVuYm91bmRlZCBtZW1vcnkgY29uc3VtcHRpb24uXCIsXCJVbmJvdW5kZWRDYWNoZVdhcm5pbmdcIix4LHUpKX19Z2V0UmVtYWluaW5nVFRMKGUpe3JldHVybiB0aGlzLiNzLmhhcyhlKT8xLzA6MH0jaygpe2xldCBlPW5ldyBPKHRoaXMuI28pLHQ9bmV3IE8odGhpcy4jbyk7dGhpcy4jZD1lLHRoaXMuI0Y9dDtsZXQgaT10aGlzLnR0bEF1dG9wdXJnZT9BcnJheS5mcm9tKHtsZW5ndGg6dGhpcy4jb30pOnZvaWQgMDt0aGlzLiNnPWksdGhpcy4jSD0oaCxhLG89dGhpcy4jbS5ub3coKSk9Pnt0W2hdPWEhPT0wP286MCxlW2hdPWEscyhoLGEpfSx0aGlzLiNEPWg9Pnt0W2hdPWVbaF0hPT0wP3RoaXMuI20ubm93KCk6MCxzKGgsZVtoXSl9O2xldCBzPXRoaXMudHRsQXV0b3B1cmdlPyhoLGEpPT57aWYoaT8uW2hdJiYoY2xlYXJUaW1lb3V0KGlbaF0pLGlbaF09dm9pZCAwKSxhJiZhIT09MCYmaSl7bGV0IG89c2V0VGltZW91dCgoKT0+e3RoaXMuI3AoaCkmJnRoaXMuI0UodGhpcy4jaVtoXSxcImV4cGlyZVwiKX0sYSsxKTtvLnVucmVmJiZvLnVucmVmKCksaVtoXT1vfX06KCk9Pnt9O3RoaXMuI3Y9KGgsYSk9PntpZihlW2FdKXtsZXQgbz1lW2FdLGQ9dFthXTtpZighb3x8IWQpcmV0dXJuO2gudHRsPW8saC5zdGFydD1kLGgubm93PW58fHIoKTtsZXQgeT1oLm5vdy1kO2gucmVtYWluaW5nVFRMPW8teX19O2xldCBuPTAscj0oKT0+e2xldCBoPXRoaXMuI20ubm93KCk7aWYodGhpcy50dGxSZXNvbHV0aW9uPjApe249aDtsZXQgYT1zZXRUaW1lb3V0KCgpPT5uPTAsdGhpcy50dGxSZXNvbHV0aW9uKTthLnVucmVmJiZhLnVucmVmKCl9cmV0dXJuIGh9O3RoaXMuZ2V0UmVtYWluaW5nVFRMPWg9PntsZXQgYT10aGlzLiNzLmdldChoKTtpZihhPT09dm9pZCAwKXJldHVybiAwO2xldCBvPWVbYV0sZD10W2FdO2lmKCFvfHwhZClyZXR1cm4gMS8wO2xldCB5PShufHxyKCkpLWQ7cmV0dXJuIG8teX0sdGhpcy4jcD1oPT57bGV0IGE9dFtoXSxvPWVbaF07cmV0dXJuISFvJiYhIWEmJihufHxyKCkpLWE+b319I0Q9KCk9Pnt9OyN2PSgpPT57fTsjSD0oKT0+e307I3A9KCk9PiExOyNYKCl7bGV0IGU9bmV3IE8odGhpcy4jbyk7dGhpcy4jYj0wLHRoaXMuI189ZSx0aGlzLiNSPXQ9Pnt0aGlzLiNiLT1lW3RdLGVbdF09MH0sdGhpcy4jTj0odCxpLHMsbik9PntpZighVChzKSl7aWYodGhpcy4jZShpKSlyZXR1cm4gdGhpcy5iYWNrZ3JvdW5kRmV0Y2hTaXplO2lmKG4pe2lmKHR5cGVvZiBuIT1cImZ1bmN0aW9uXCIpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemVDYWxjdWxhdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb25cIik7aWYocz1uKGksdCksIVQocykpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemVDYWxjdWxhdGlvbiByZXR1cm4gaW52YWxpZCAoZXhwZWN0IHBvc2l0aXZlIGludGVnZXIpXCIpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc2l6ZSB2YWx1ZSAobXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyKS4gV2hlbiBtYXhTaXplIG9yIG1heEVudHJ5U2l6ZSBpcyB1c2VkLCBzaXplQ2FsY3VsYXRpb24gb3Igc2l6ZSBtdXN0IGJlIHNldC5cIil9cmV0dXJuIHN9LHRoaXMuI2o9KHQsaSxzKT0+e2lmKGVbdF09aSx0aGlzLiNjKXtsZXQgbj10aGlzLiNjLWVbdF07Zm9yKDt0aGlzLiNiPm47KXRoaXMuI0coITApfXRoaXMuI2IrPWVbdF0scyYmKHMuZW50cnlTaXplPWkscy50b3RhbENhbGN1bGF0ZWRTaXplPXRoaXMuI2IpfX0jUj1lPT57fTsjaj0oZSx0LGkpPT57fTsjTj0oZSx0LGkscyk9PntpZihpfHxzKXRocm93IG5ldyBUeXBlRXJyb3IoXCJjYW5ub3Qgc2V0IHNpemUgd2l0aG91dCBzZXR0aW5nIG1heFNpemUgb3IgbWF4RW50cnlTaXplIG9uIGNhY2hlXCIpO3JldHVybiAwfTsqI0Eoe2FsbG93U3RhbGU6ZT10aGlzLmFsbG93U3RhbGV9PXt9KXtpZih0aGlzLiNuKWZvcihsZXQgdD10aGlzLiNoO3RoaXMuI1YodCkmJigoZXx8IXRoaXMuI3AodCkpJiYoeWllbGQgdCksdCE9PXRoaXMuI2EpOyl0PXRoaXMuI3VbdF19KiN6KHthbGxvd1N0YWxlOmU9dGhpcy5hbGxvd1N0YWxlfT17fSl7aWYodGhpcy4jbilmb3IobGV0IHQ9dGhpcy4jYTt0aGlzLiNWKHQpJiYoKGV8fCF0aGlzLiNwKHQpKSYmKHlpZWxkIHQpLHQhPT10aGlzLiNoKTspdD10aGlzLiNsW3RdfSNWKGUpe3JldHVybiBlIT09dm9pZCAwJiZ0aGlzLiNzLmdldCh0aGlzLiNpW2VdKT09PWV9KmVudHJpZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jQSgpKXRoaXMuI3RbZV0hPT12b2lkIDAmJnRoaXMuI2lbZV0hPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGRbdGhpcy4jaVtlXSx0aGlzLiN0W2VdXSl9KnJlbnRyaWVzKCl7Zm9yKGxldCBlIG9mIHRoaXMuI3ooKSl0aGlzLiN0W2VdIT09dm9pZCAwJiZ0aGlzLiNpW2VdIT09dm9pZCAwJiYhdGhpcy4jZSh0aGlzLiN0W2VdKSYmKHlpZWxkW3RoaXMuI2lbZV0sdGhpcy4jdFtlXV0pfSprZXlzKCl7Zm9yKGxldCBlIG9mIHRoaXMuI0EoKSl7bGV0IHQ9dGhpcy4jaVtlXTt0IT09dm9pZCAwJiYhdGhpcy4jZSh0aGlzLiN0W2VdKSYmKHlpZWxkIHQpfX0qcmtleXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jeigpKXtsZXQgdD10aGlzLiNpW2VdO3QhPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGQgdCl9fSp2YWx1ZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jQSgpKXRoaXMuI3RbZV0hPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGQgdGhpcy4jdFtlXSl9KnJ2YWx1ZXMoKXtmb3IobGV0IGUgb2YgdGhpcy4jeigpKXRoaXMuI3RbZV0hPT12b2lkIDAmJiF0aGlzLiNlKHRoaXMuI3RbZV0pJiYoeWllbGQgdGhpcy4jdFtlXSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9W1N5bWJvbC50b1N0cmluZ1RhZ109XCJMUlVDYWNoZVwiO2ZpbmQoZSx0PXt9KXtmb3IobGV0IGkgb2YgdGhpcy4jQSgpKXtsZXQgcz10aGlzLiN0W2ldLG49dGhpcy4jZShzKT9zLl9fc3RhbGVXaGlsZUZldGNoaW5nOnM7aWYobiE9PXZvaWQgMCYmZShuLHRoaXMuI2lbaV0sdGhpcykpcmV0dXJuIHRoaXMuI0ModGhpcy4jaVtpXSx0KX19Zm9yRWFjaChlLHQ9dGhpcyl7Zm9yKGxldCBpIG9mIHRoaXMuI0EoKSl7bGV0IHM9dGhpcy4jdFtpXSxuPXRoaXMuI2Uocyk/cy5fX3N0YWxlV2hpbGVGZXRjaGluZzpzO24hPT12b2lkIDAmJmUuY2FsbCh0LG4sdGhpcy4jaVtpXSx0aGlzKX19cmZvckVhY2goZSx0PXRoaXMpe2ZvcihsZXQgaSBvZiB0aGlzLiN6KCkpe2xldCBzPXRoaXMuI3RbaV0sbj10aGlzLiNlKHMpP3MuX19zdGFsZVdoaWxlRmV0Y2hpbmc6cztuIT09dm9pZCAwJiZlLmNhbGwodCxuLHRoaXMuI2lbaV0sdGhpcyl9fXB1cmdlU3RhbGUoKXtsZXQgZT0hMTtmb3IobGV0IHQgb2YgdGhpcy4jeih7YWxsb3dTdGFsZTohMH0pKXRoaXMuI3AodCkmJih0aGlzLiNFKHRoaXMuI2lbdF0sXCJleHBpcmVcIiksZT0hMCk7cmV0dXJuIGV9aW5mbyhlKXtsZXQgdD10aGlzLiNzLmdldChlKTtpZih0PT09dm9pZCAwKXJldHVybjtsZXQgaT10aGlzLiN0W3RdLHM9dGhpcy4jZShpKT9pLl9fc3RhbGVXaGlsZUZldGNoaW5nOmk7aWYocz09PXZvaWQgMClyZXR1cm47bGV0IG49e3ZhbHVlOnN9O2lmKHRoaXMuI2QmJnRoaXMuI0Ype2xldCByPXRoaXMuI2RbdF0saD10aGlzLiNGW3RdO2lmKHImJmgpe2xldCBhPXItKHRoaXMuI20ubm93KCktaCk7bi50dGw9YSxuLnN0YXJ0PURhdGUubm93KCl9fXJldHVybiB0aGlzLiNfJiYobi5zaXplPXRoaXMuI19bdF0pLG59ZHVtcCgpe2xldCBlPVtdO2ZvcihsZXQgdCBvZiB0aGlzLiNBKHthbGxvd1N0YWxlOiEwfSkpe2xldCBpPXRoaXMuI2lbdF0scz10aGlzLiN0W3RdLG49dGhpcy4jZShzKT9zLl9fc3RhbGVXaGlsZUZldGNoaW5nOnM7aWYobj09PXZvaWQgMHx8aT09PXZvaWQgMCljb250aW51ZTtsZXQgcj17dmFsdWU6bn07aWYodGhpcy4jZCYmdGhpcy4jRil7ci50dGw9dGhpcy4jZFt0XTtsZXQgaD10aGlzLiNtLm5vdygpLXRoaXMuI0ZbdF07ci5zdGFydD1NYXRoLmZsb29yKERhdGUubm93KCktaCl9dGhpcy4jXyYmKHIuc2l6ZT10aGlzLiNfW3RdKSxlLnVuc2hpZnQoW2kscl0pfXJldHVybiBlfWxvYWQoZSl7dGhpcy5jbGVhcigpO2ZvcihsZXRbdCxpXW9mIGUpe2lmKGkuc3RhcnQpe2xldCBzPURhdGUubm93KCktaS5zdGFydDtpLnN0YXJ0PXRoaXMuI20ubm93KCktc310aGlzLiNXKHQsaS52YWx1ZSxpKX19c2V0KGUsdCxpPXt9KXtsZXR7c3RhdHVzOnM9Uy5oYXNTdWJzY3JpYmVycz97fTp2b2lkIDB9PWk7aS5zdGF0dXM9cyxzJiYocy5vcD1cInNldFwiLHMua2V5PWUsdCE9PXZvaWQgMCYmKHMudmFsdWU9dCkscy5jYWNoZT10aGlzKTtsZXQgbj10aGlzLiNXKGUsdCxpKTtyZXR1cm4gcyYmUy5oYXNTdWJzY3JpYmVycyYmUy5wdWJsaXNoKHMpLG59I1coZSx0LGkscyl7bGV0e3R0bDpuPXRoaXMudHRsLHN0YXJ0OnIsbm9EaXNwb3NlT25TZXQ6aD10aGlzLm5vRGlzcG9zZU9uU2V0LHNpemVDYWxjdWxhdGlvbjphPXRoaXMuc2l6ZUNhbGN1bGF0aW9uLHN0YXR1czpvfT1pLGQ9dGhpcy4jZSh0KTtpZih0PT09dm9pZCAwKXJldHVybiBvJiYoby5zZXQ9XCJkZWxldGVkXCIpLHRoaXMuZGVsZXRlKGUpLHRoaXM7bGV0e25vVXBkYXRlVFRMOnk9dGhpcy5ub1VwZGF0ZVRUTH09aTtvJiYhZCYmKG8udmFsdWU9dCk7bGV0IF89dGhpcy4jTihlLHQsaS5zaXplfHwwLGEsbyk7aWYodGhpcy5tYXhFbnRyeVNpemUmJl8+dGhpcy5tYXhFbnRyeVNpemUpcmV0dXJuIHRoaXMuI0UoZSxcInNldFwiKSxvJiYoby5zZXQ9XCJtaXNzXCIsby5tYXhFbnRyeVNpemVFeGNlZWRlZD0hMCksdGhpcztsZXQgYz10aGlzLiNuPT09MD92b2lkIDA6dGhpcy4jcy5nZXQoZSk7aWYoYz09PXZvaWQgMCljPXRoaXMuI249PT0wP3RoaXMuI2g6dGhpcy4jeS5sZW5ndGghPT0wP3RoaXMuI3kucG9wKCk6dGhpcy4jbj09PXRoaXMuI28/dGhpcy4jRyghMSk6dGhpcy4jbix0aGlzLiNpW2NdPWUsdGhpcy4jdFtjXT10LHRoaXMuI3Muc2V0KGUsYyksdGhpcy4jbFt0aGlzLiNoXT1jLHRoaXMuI3VbY109dGhpcy4jaCx0aGlzLiNoPWMsdGhpcy4jbisrLHRoaXMuI2ooYyxfLG8pLG8mJihvLnNldD1cImFkZFwiKSx5PSExLHRoaXMuI3gmJiFkJiZ0aGlzLiNPPy4odCxlLFwiYWRkXCIpO2Vsc2V7dGhpcy4jTChjKTtsZXQgZz10aGlzLiN0W2NdO2lmKHQhPT1nKXtpZighaClpZih0aGlzLiNlKGcpKXtnIT09cyYmZy5fX2Fib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoXCJyZXBsYWNlZFwiKSk7bGV0e19fc3RhbGVXaGlsZUZldGNoaW5nOmZ9PWc7ZiE9PXZvaWQgMCYmZiE9PXQmJih0aGlzLiNUJiZ0aGlzLiNTPy4oZixlLFwic2V0XCIpLHRoaXMuI2YmJnRoaXMuI3I/LnB1c2goW2YsZSxcInNldFwiXSkpfWVsc2UgdGhpcy4jVCYmdGhpcy4jUz8uKGcsZSxcInNldFwiKSx0aGlzLiNmJiZ0aGlzLiNyPy5wdXNoKFtnLGUsXCJzZXRcIl0pO2lmKHRoaXMuI1IoYyksdGhpcy4jaihjLF8sbyksdGhpcy4jdFtjXT10LCFkKXtsZXQgZj1nJiZ0aGlzLiNlKGcpP2cuX19zdGFsZVdoaWxlRmV0Y2hpbmc6ZyxiPWY9PT12b2lkIDA/XCJhZGRcIjp0IT09Zj9cInJlcGxhY2VcIjpcInVwZGF0ZVwiO28mJihvLnNldD1iLGYhPT12b2lkIDAmJihvLm9sZFZhbHVlPWYpKSx0aGlzLiN4JiZ0aGlzLm9uSW5zZXJ0Py4odCxlLGIpfX1lbHNlIGR8fChvJiYoby5zZXQ9XCJ1cGRhdGVcIiksdGhpcy4jeCYmdGhpcy5vbkluc2VydD8uKHQsZSxcInVwZGF0ZVwiKSl9aWYobiE9PTAmJiF0aGlzLiNkJiZ0aGlzLiNrKCksdGhpcy4jZCYmKHl8fHRoaXMuI0goYyxuLHIpLG8mJnRoaXMuI3YobyxjKSksIWgmJnRoaXMuI2YmJnRoaXMuI3Ipe2xldCBnPXRoaXMuI3IsZjtmb3IoO2Y9Zz8uc2hpZnQoKTspdGhpcy4jdz8uKC4uLmYpfXJldHVybiB0aGlzfXBvcCgpe3RyeXtmb3IoO3RoaXMuI247KXtsZXQgZT10aGlzLiN0W3RoaXMuI2FdO2lmKHRoaXMuI0coITApLHRoaXMuI2UoZSkpe2lmKGUuX19zdGFsZVdoaWxlRmV0Y2hpbmcpcmV0dXJuIGUuX19zdGFsZVdoaWxlRmV0Y2hpbmd9ZWxzZSBpZihlIT09dm9pZCAwKXJldHVybiBlfX1maW5hbGx5e2lmKHRoaXMuI2YmJnRoaXMuI3Ipe2xldCBlPXRoaXMuI3IsdDtmb3IoO3Q9ZT8uc2hpZnQoKTspdGhpcy4jdz8uKC4uLnQpfX19I0coZSl7bGV0IHQ9dGhpcy4jYSxpPXRoaXMuI2lbdF0scz10aGlzLiN0W3RdLG49dGhpcy4jZShzKTtuJiZzLl9fYWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcihcImV2aWN0ZWRcIikpO2xldCByPW4/cy5fX3N0YWxlV2hpbGVGZXRjaGluZzpzO3JldHVybih0aGlzLiNUfHx0aGlzLiNmKSYmciE9PXZvaWQgMCYmKHRoaXMuI1QmJnRoaXMuI1M/LihyLGksXCJldmljdFwiKSx0aGlzLiNmJiZ0aGlzLiNyPy5wdXNoKFtyLGksXCJldmljdFwiXSkpLHRoaXMuI1IodCksdGhpcy4jZz8uW3RdJiYoY2xlYXJUaW1lb3V0KHRoaXMuI2dbdF0pLHRoaXMuI2dbdF09dm9pZCAwKSxlJiYodGhpcy4jaVt0XT12b2lkIDAsdGhpcy4jdFt0XT12b2lkIDAsdGhpcy4jeS5wdXNoKHQpKSx0aGlzLiNuPT09MT8odGhpcy4jYT10aGlzLiNoPTAsdGhpcy4jeS5sZW5ndGg9MCk6dGhpcy4jYT10aGlzLiNsW3RdLHRoaXMuI3MuZGVsZXRlKGkpLHRoaXMuI24tLSx0fWhhcyhlLHQ9e30pe2xldHtzdGF0dXM6aT1TLmhhc1N1YnNjcmliZXJzP3t9OnZvaWQgMH09dDt0LnN0YXR1cz1pLGkmJihpLm9wPVwiaGFzXCIsaS5rZXk9ZSxpLmNhY2hlPXRoaXMpO2xldCBzPXRoaXMuI1koZSx0KTtyZXR1cm4gUy5oYXNTdWJzY3JpYmVycyYmUy5wdWJsaXNoKGkpLHN9I1koZSx0PXt9KXtsZXR7dXBkYXRlQWdlT25IYXM6aT10aGlzLnVwZGF0ZUFnZU9uSGFzLHN0YXR1czpzfT10LG49dGhpcy4jcy5nZXQoZSk7aWYobiE9PXZvaWQgMCl7bGV0IHI9dGhpcy4jdFtuXTtpZih0aGlzLiNlKHIpJiZyLl9fc3RhbGVXaGlsZUZldGNoaW5nPT09dm9pZCAwKXJldHVybiExO2lmKHRoaXMuI3AobikpcyYmKHMuaGFzPVwic3RhbGVcIix0aGlzLiN2KHMsbikpO2Vsc2UgcmV0dXJuIGkmJnRoaXMuI0QobikscyYmKHMuaGFzPVwiaGl0XCIsdGhpcy4jdihzLG4pKSwhMH1lbHNlIHMmJihzLmhhcz1cIm1pc3NcIik7cmV0dXJuITF9cGVlayhlLHQ9e30pe2xldHtzdGF0dXM6aT1EKCk/e306dm9pZCAwfT10O2kmJihpLm9wPVwicGVla1wiLGkua2V5PWUsaS5jYWNoZT10aGlzKSx0LnN0YXR1cz1pO2xldCBzPXRoaXMuI0ooZSx0KTtyZXR1cm4gUy5oYXNTdWJzY3JpYmVycyYmUy5wdWJsaXNoKGkpLHN9I0ooZSx0KXtsZXR7c3RhdHVzOmksYWxsb3dTdGFsZTpzPXRoaXMuYWxsb3dTdGFsZX09dCxuPXRoaXMuI3MuZ2V0KGUpO2lmKG49PT12b2lkIDB8fCFzJiZ0aGlzLiNwKG4pKXtpJiYoaS5wZWVrPW49PT12b2lkIDA/XCJtaXNzXCI6XCJzdGFsZVwiKTtyZXR1cm59bGV0IHI9dGhpcy4jdFtuXSxoPXRoaXMuI2Uocik/ci5fX3N0YWxlV2hpbGVGZXRjaGluZzpyO3JldHVybiBpJiYoaCE9PXZvaWQgMD8oaS5wZWVrPVwiaGl0XCIsaS52YWx1ZT1oKTppLnBlZWs9XCJtaXNzXCIpLGh9I1AoZSx0LGkscyl7bGV0IG49dD09PXZvaWQgMD92b2lkIDA6dGhpcy4jdFt0XTtpZih0aGlzLiNlKG4pKXJldHVybiBuO2xldCByPW5ldyBBYm9ydENvbnRyb2xsZXIse3NpZ25hbDpofT1pO2g/LmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCgpPT5yLmFib3J0KGgucmVhc29uKSx7c2lnbmFsOnIuc2lnbmFsfSk7bGV0IGE9e3NpZ25hbDpyLnNpZ25hbCxvcHRpb25zOmksY29udGV4dDpzfSxvPShmLGI9ITEpPT57bGV0e2Fib3J0ZWQ6bH09ci5zaWduYWwsdz1pLmlnbm9yZUZldGNoQWJvcnQmJmYhPT12b2lkIDAsRj1pLmlnbm9yZUZldGNoQWJvcnR8fCEhKGkuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCYmZiE9PXZvaWQgMCk7aWYoaS5zdGF0dXMmJihsJiYhYj8oaS5zdGF0dXMuZmV0Y2hBYm9ydGVkPSEwLGkuc3RhdHVzLmZldGNoRXJyb3I9ci5zaWduYWwucmVhc29uLHcmJihpLnN0YXR1cy5mZXRjaEFib3J0SWdub3JlZD0hMCkpOmkuc3RhdHVzLmZldGNoUmVzb2x2ZWQ9ITApLGwmJiF3JiYhYilyZXR1cm4geShyLnNpZ25hbC5yZWFzb24sRik7bGV0IG09YyxwPXRoaXMuI3RbdF07cmV0dXJuKHA9PT1jfHxwPT09dm9pZCAwJiZ3JiZiKSYmKGY9PT12b2lkIDA/bS5fX3N0YWxlV2hpbGVGZXRjaGluZyE9PXZvaWQgMD90aGlzLiN0W3RdPW0uX19zdGFsZVdoaWxlRmV0Y2hpbmc6dGhpcy4jRShlLFwiZmV0Y2hcIik6KGkuc3RhdHVzJiYoaS5zdGF0dXMuZmV0Y2hVcGRhdGVkPSEwKSx0aGlzLiNXKGUsZixhLm9wdGlvbnMsbSkpKSxmfSxkPWY9PihpLnN0YXR1cyYmKGkuc3RhdHVzLmZldGNoUmVqZWN0ZWQ9ITAsaS5zdGF0dXMuZmV0Y2hFcnJvcj1mKSx5KGYsITEpKSx5PShmLGIpPT57bGV0e2Fib3J0ZWQ6bH09ci5zaWduYWwsdz1sJiZpLmFsbG93U3RhbGVPbkZldGNoQWJvcnQsRj13fHxpLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLG09Rnx8aS5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24scD1jO2lmKHRoaXMuI3RbdF09PT1jJiYoIW18fCFiJiZwLl9fc3RhbGVXaGlsZUZldGNoaW5nPT09dm9pZCAwP3RoaXMuI0UoZSxcImZldGNoXCIpOnd8fCh0aGlzLiN0W3RdPXAuX19zdGFsZVdoaWxlRmV0Y2hpbmcpKSxGKXJldHVybiBpLnN0YXR1cyYmcC5fX3N0YWxlV2hpbGVGZXRjaGluZyE9PXZvaWQgMCYmKGkuc3RhdHVzLnJldHVybmVkU3RhbGU9ITApLHAuX19zdGFsZVdoaWxlRmV0Y2hpbmc7aWYocC5fX3JldHVybmVkPT09cCl0aHJvdyBmfSxfPShmLGIpPT57bGV0IGw9dGhpcy4jTT8uKGUsbixhKTtyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwoKT0+eyghaS5pZ25vcmVGZXRjaEFib3J0fHxpLmFsbG93U3RhbGVPbkZldGNoQWJvcnQpJiYoZih2b2lkIDApLGkuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCYmKGY9dz0+byh3LCEwKSkpfSksbCYmbCBpbnN0YW5jZW9mIFByb21pc2U/bC50aGVuKHc9PmYodz09PXZvaWQgMD92b2lkIDA6dyksYik6bCE9PXZvaWQgMCYmZihsKX07aS5zdGF0dXMmJihpLnN0YXR1cy5mZXRjaERpc3BhdGNoZWQ9ITApO2xldCBjPW5ldyBQcm9taXNlKF8pLnRoZW4obyxkKSxnPU9iamVjdC5hc3NpZ24oYyx7X19hYm9ydENvbnRyb2xsZXI6cixfX3N0YWxlV2hpbGVGZXRjaGluZzpuLF9fcmV0dXJuZWQ6dm9pZCAwfSk7cmV0dXJuIHQ9PT12b2lkIDA/KHRoaXMuI1coZSxnLHsuLi5hLm9wdGlvbnMsc3RhdHVzOnZvaWQgMH0pLHQ9dGhpcy4jcy5nZXQoZSkpOnRoaXMuI3RbdF09ZyxnfSNlKGUpe2lmKCF0aGlzLiNVKXJldHVybiExO2xldCB0PWU7cmV0dXJuISF0JiZ0IGluc3RhbmNlb2YgUHJvbWlzZSYmdC5oYXNPd25Qcm9wZXJ0eShcIl9fc3RhbGVXaGlsZUZldGNoaW5nXCIpJiZ0Ll9fYWJvcnRDb250cm9sbGVyIGluc3RhbmNlb2YgQWJvcnRDb250cm9sbGVyfWZldGNoKGUsdD17fSl7bGV0IGk9Vy5oYXNTdWJzY3JpYmVycyx7c3RhdHVzOnM9RCgpP3t9OnZvaWQgMH09dDt0LnN0YXR1cz1zLHMmJnQuY29udGV4dCYmKHMuY29udGV4dD10LmNvbnRleHQpO2xldCBuPXRoaXMuI0IoZSx0KTtyZXR1cm4gcyYmaSYmKHMudHJhY2U9ITAsVy50cmFjZVByb21pc2UoKCk9Pm4scykuY2F0Y2goKCk9Pnt9KSksbn1hc3luYyNCKGUsdD17fSl7bGV0e2FsbG93U3RhbGU6aT10aGlzLmFsbG93U3RhbGUsdXBkYXRlQWdlT25HZXQ6cz10aGlzLnVwZGF0ZUFnZU9uR2V0LG5vRGVsZXRlT25TdGFsZUdldDpuPXRoaXMubm9EZWxldGVPblN0YWxlR2V0LHR0bDpyPXRoaXMudHRsLG5vRGlzcG9zZU9uU2V0Omg9dGhpcy5ub0Rpc3Bvc2VPblNldCxzaXplOmE9MCxzaXplQ2FsY3VsYXRpb246bz10aGlzLnNpemVDYWxjdWxhdGlvbixub1VwZGF0ZVRUTDpkPXRoaXMubm9VcGRhdGVUVEwsbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uOnk9dGhpcy5ub0RlbGV0ZU9uRmV0Y2hSZWplY3Rpb24sYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb246Xz10aGlzLmFsbG93U3RhbGVPbkZldGNoUmVqZWN0aW9uLGlnbm9yZUZldGNoQWJvcnQ6Yz10aGlzLmlnbm9yZUZldGNoQWJvcnQsYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydDpnPXRoaXMuYWxsb3dTdGFsZU9uRmV0Y2hBYm9ydCxjb250ZXh0OmYsZm9yY2VSZWZyZXNoOmI9ITEsc3RhdHVzOmwsc2lnbmFsOnd9PXQ7aWYobCYmKGwub3A9XCJmZXRjaFwiLGwua2V5PWUsYiYmKGwuZm9yY2VSZWZyZXNoPSEwKSxsLmNhY2hlPXRoaXMpLCF0aGlzLiNVKXJldHVybiBsJiYobC5mZXRjaD1cImdldFwiKSx0aGlzLiNDKGUse2FsbG93U3RhbGU6aSx1cGRhdGVBZ2VPbkdldDpzLG5vRGVsZXRlT25TdGFsZUdldDpuLHN0YXR1czpsfSk7bGV0IEY9e2FsbG93U3RhbGU6aSx1cGRhdGVBZ2VPbkdldDpzLG5vRGVsZXRlT25TdGFsZUdldDpuLHR0bDpyLG5vRGlzcG9zZU9uU2V0Omgsc2l6ZTphLHNpemVDYWxjdWxhdGlvbjpvLG5vVXBkYXRlVFRMOmQsbm9EZWxldGVPbkZldGNoUmVqZWN0aW9uOnksYWxsb3dTdGFsZU9uRmV0Y2hSZWplY3Rpb246XyxhbGxvd1N0YWxlT25GZXRjaEFib3J0OmcsaWdub3JlRmV0Y2hBYm9ydDpjLHN0YXR1czpsLHNpZ25hbDp3fSxtPXRoaXMuI3MuZ2V0KGUpO2lmKG09PT12b2lkIDApe2wmJihsLmZldGNoPVwibWlzc1wiKTtsZXQgcD10aGlzLiNQKGUsbSxGLGYpO3JldHVybiBwLl9fcmV0dXJuZWQ9cH1lbHNle2xldCBwPXRoaXMuI3RbbV07aWYodGhpcy4jZShwKSl7bGV0IHY9aSYmcC5fX3N0YWxlV2hpbGVGZXRjaGluZyE9PXZvaWQgMDtyZXR1cm4gbCYmKGwuZmV0Y2g9XCJpbmZsaWdodFwiLHYmJihsLnJldHVybmVkU3RhbGU9ITApKSx2P3AuX19zdGFsZVdoaWxlRmV0Y2hpbmc6cC5fX3JldHVybmVkPXB9bGV0IEE9dGhpcy4jcChtKTtpZighYiYmIUEpcmV0dXJuIGwmJihsLmZldGNoPVwiaGl0XCIpLHRoaXMuI0wobSkscyYmdGhpcy4jRChtKSxsJiZ0aGlzLiN2KGwsbSkscDtsZXQgej10aGlzLiNQKGUsbSxGLGYpLEU9ei5fX3N0YWxlV2hpbGVGZXRjaGluZyE9PXZvaWQgMCYmaTtyZXR1cm4gbCYmKGwuZmV0Y2g9QT9cInN0YWxlXCI6XCJyZWZyZXNoXCIsRSYmQSYmKGwucmV0dXJuZWRTdGFsZT0hMCkpLEU/ei5fX3N0YWxlV2hpbGVGZXRjaGluZzp6Ll9fcmV0dXJuZWQ9en19Zm9yY2VGZXRjaChlLHQ9e30pe2xldCBpPVcuaGFzU3Vic2NyaWJlcnMse3N0YXR1czpzPUQoKT97fTp2b2lkIDB9PXQ7dC5zdGF0dXM9cyxzJiZ0LmNvbnRleHQmJihzLmNvbnRleHQ9dC5jb250ZXh0KTtsZXQgbj10aGlzLiNLKGUsdCk7cmV0dXJuIHMmJmkmJihzLnRyYWNlPSEwLFcudHJhY2VQcm9taXNlKCgpPT5uLHMpLmNhdGNoKCgpPT57fSkpLG59YXN5bmMjSyhlLHQ9e30pe2xldCBpPWF3YWl0IHRoaXMuI0IoZSx0KTtpZihpPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihcImZldGNoKCkgcmV0dXJuZWQgdW5kZWZpbmVkXCIpO3JldHVybiBpfW1lbW8oZSx0PXt9KXtsZXR7c3RhdHVzOmk9Uy5oYXNTdWJzY3JpYmVycz97fTp2b2lkIDB9PXQ7dC5zdGF0dXM9aSxpJiYoaS5vcD1cIm1lbW9cIixpLmtleT1lLHQuY29udGV4dCYmKGkuY29udGV4dD10LmNvbnRleHQpLGkuY2FjaGU9dGhpcyk7bGV0IHM9dGhpcy4jUShlLHQpO3JldHVybiBpJiYoaS52YWx1ZT1zKSxTLmhhc1N1YnNjcmliZXJzJiZTLnB1Ymxpc2goaSksc30jUShlLHQ9e30pe2xldCBpPXRoaXMuI0k7aWYoIWkpdGhyb3cgbmV3IEVycm9yKFwibm8gbWVtb01ldGhvZCBwcm92aWRlZCB0byBjb25zdHJ1Y3RvclwiKTtsZXR7Y29udGV4dDpzLHN0YXR1czpuLGZvcmNlUmVmcmVzaDpyLC4uLmh9PXQ7biYmciYmKG4uZm9yY2VSZWZyZXNoPSEwKTtsZXQgYT10aGlzLiNDKGUsaCksbz1yfHxhPT09dm9pZCAwO2lmKG4mJihuLm1lbW89bz9cIm1pc3NcIjpcImhpdFwiLG98fChuLnZhbHVlPWEpKSwhbylyZXR1cm4gYTtsZXQgZD1pKGUsYSx7b3B0aW9uczpoLGNvbnRleHQ6c30pO3JldHVybiBuJiYobi52YWx1ZT1kKSx0aGlzLiNXKGUsZCxoKSxkfWdldChlLHQ9e30pe2xldHtzdGF0dXM6aT1TLmhhc1N1YnNjcmliZXJzP3t9OnZvaWQgMH09dDt0LnN0YXR1cz1pLGkmJihpLm9wPVwiZ2V0XCIsaS5rZXk9ZSxpLmNhY2hlPXRoaXMpO2xldCBzPXRoaXMuI0MoZSx0KTtyZXR1cm4gaSYmKHMhPT12b2lkIDAmJihpLnZhbHVlPXMpLFMuaGFzU3Vic2NyaWJlcnMmJlMucHVibGlzaChpKSksc30jQyhlLHQ9e30pe2xldHthbGxvd1N0YWxlOmk9dGhpcy5hbGxvd1N0YWxlLHVwZGF0ZUFnZU9uR2V0OnM9dGhpcy51cGRhdGVBZ2VPbkdldCxub0RlbGV0ZU9uU3RhbGVHZXQ6bj10aGlzLm5vRGVsZXRlT25TdGFsZUdldCxzdGF0dXM6cn09dCxoPXRoaXMuI3MuZ2V0KGUpO2lmKGg9PT12b2lkIDApe3ImJihyLmdldD1cIm1pc3NcIik7cmV0dXJufWxldCBhPXRoaXMuI3RbaF0sbz10aGlzLiNlKGEpO3JldHVybiByJiZ0aGlzLiN2KHIsaCksdGhpcy4jcChoKT9vPyhyJiYoci5nZXQ9XCJzdGFsZS1mZXRjaGluZ1wiKSxpJiZhLl9fc3RhbGVXaGlsZUZldGNoaW5nIT09dm9pZCAwPyhyJiYoci5yZXR1cm5lZFN0YWxlPSEwKSxhLl9fc3RhbGVXaGlsZUZldGNoaW5nKTp2b2lkIDApOihufHx0aGlzLiNFKGUsXCJleHBpcmVcIiksciYmKHIuZ2V0PVwic3RhbGVcIiksaT8ociYmKHIucmV0dXJuZWRTdGFsZT0hMCksYSk6dm9pZCAwKToociYmKHIuZ2V0PW8/XCJmZXRjaGluZ1wiOlwiaGl0XCIpLHRoaXMuI0woaCkscyYmdGhpcy4jRChoKSxvP2EuX19zdGFsZVdoaWxlRmV0Y2hpbmc6YSl9IyQoZSx0KXt0aGlzLiN1W3RdPWUsdGhpcy4jbFtlXT10fSNMKGUpe2UhPT10aGlzLiNoJiYoZT09PXRoaXMuI2E/dGhpcy4jYT10aGlzLiNsW2VdOnRoaXMuIyQodGhpcy4jdVtlXSx0aGlzLiNsW2VdKSx0aGlzLiMkKHRoaXMuI2gsZSksdGhpcy4jaD1lKX1kZWxldGUoZSl7cmV0dXJuIHRoaXMuI0UoZSxcImRlbGV0ZVwiKX0jRShlLHQpe1MuaGFzU3Vic2NyaWJlcnMmJlMucHVibGlzaCh7b3A6XCJkZWxldGVcIixkZWxldGU6dCxrZXk6ZSxjYWNoZTp0aGlzfSk7bGV0IGk9ITE7aWYodGhpcy4jbiE9PTApe2xldCBzPXRoaXMuI3MuZ2V0KGUpO2lmKHMhPT12b2lkIDApaWYodGhpcy4jZz8uW3NdJiYoY2xlYXJUaW1lb3V0KHRoaXMuI2c/LltzXSksdGhpcy4jZ1tzXT12b2lkIDApLGk9ITAsdGhpcy4jbj09PTEpdGhpcy4jcSh0KTtlbHNle3RoaXMuI1Iocyk7bGV0IG49dGhpcy4jdFtzXTtpZih0aGlzLiNlKG4pP24uX19hYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKFwiZGVsZXRlZFwiKSk6KHRoaXMuI1R8fHRoaXMuI2YpJiYodGhpcy4jVCYmdGhpcy4jUz8uKG4sZSx0KSx0aGlzLiNmJiZ0aGlzLiNyPy5wdXNoKFtuLGUsdF0pKSx0aGlzLiNzLmRlbGV0ZShlKSx0aGlzLiNpW3NdPXZvaWQgMCx0aGlzLiN0W3NdPXZvaWQgMCxzPT09dGhpcy4jaCl0aGlzLiNoPXRoaXMuI3Vbc107ZWxzZSBpZihzPT09dGhpcy4jYSl0aGlzLiNhPXRoaXMuI2xbc107ZWxzZXtsZXQgcj10aGlzLiN1W3NdO3RoaXMuI2xbcl09dGhpcy4jbFtzXTtsZXQgaD10aGlzLiNsW3NdO3RoaXMuI3VbaF09dGhpcy4jdVtzXX10aGlzLiNuLS0sdGhpcy4jeS5wdXNoKHMpfX1pZih0aGlzLiNmJiZ0aGlzLiNyPy5sZW5ndGgpe2xldCBzPXRoaXMuI3Isbjtmb3IoO249cz8uc2hpZnQoKTspdGhpcy4jdz8uKC4uLm4pfXJldHVybiBpfWNsZWFyKCl7cmV0dXJuIHRoaXMuI3EoXCJkZWxldGVcIil9I3EoZSl7Zm9yKGxldCB0IG9mIHRoaXMuI3ooe2FsbG93U3RhbGU6ITB9KSl7bGV0IGk9dGhpcy4jdFt0XTtpZih0aGlzLiNlKGkpKWkuX19hYm9ydENvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKFwiZGVsZXRlZFwiKSk7ZWxzZXtsZXQgcz10aGlzLiNpW3RdO3RoaXMuI1QmJnRoaXMuI1M/LihpLHMsZSksdGhpcy4jZiYmdGhpcy4jcj8ucHVzaChbaSxzLGVdKX19aWYodGhpcy4jcy5jbGVhcigpLHRoaXMuI3QuZmlsbCh2b2lkIDApLHRoaXMuI2kuZmlsbCh2b2lkIDApLHRoaXMuI2QmJnRoaXMuI0Ype3RoaXMuI2QuZmlsbCgwKSx0aGlzLiNGLmZpbGwoMCk7Zm9yKGxldCB0IG9mIHRoaXMuI2c/P1tdKXQhPT12b2lkIDAmJmNsZWFyVGltZW91dCh0KTt0aGlzLiNnPy5maWxsKHZvaWQgMCl9aWYodGhpcy4jXyYmdGhpcy4jXy5maWxsKDApLHRoaXMuI2E9MCx0aGlzLiNoPTAsdGhpcy4jeS5sZW5ndGg9MCx0aGlzLiNiPTAsdGhpcy4jbj0wLHRoaXMuI2YmJnRoaXMuI3Ipe2xldCB0PXRoaXMuI3IsaTtmb3IoO2k9dD8uc2hpZnQoKTspdGhpcy4jdz8uKC4uLmkpfX19O2V4cG9ydHtJIGFzIExSVUNhY2hlfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1pbi5qcy5tYXBcbiIsCiAgICAiaW1wb3J0IHsgTFJVQ2FjaGUgfSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHsgcG9zaXgsIHdpbjMyIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBsc3RhdFN5bmMsIHJlYWRkaXIgYXMgcmVhZGRpckNCLCByZWFkZGlyU3luYywgcmVhZGxpbmtTeW5jLCByZWFscGF0aFN5bmMgYXMgcnBzLCB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIGFjdHVhbEZTIGZyb20gJ25vZGU6ZnMnO1xuY29uc3QgcmVhbHBhdGhTeW5jID0gcnBzLm5hdGl2ZTtcbi8vIFRPRE86IHRlc3QgcGVyZiBvZiBmcy9wcm9taXNlcyByZWFscGF0aCB2cyByZWFscGF0aENCLFxuLy8gc2luY2UgdGhlIHByb21pc2VzIG9uZSB1c2VzIHJlYWxwYXRoLm5hdGl2ZVxuaW1wb3J0IHsgbHN0YXQsIHJlYWRkaXIsIHJlYWRsaW5rLCByZWFscGF0aCB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgTWluaXBhc3MgfSBmcm9tICdtaW5pcGFzcyc7XG5jb25zdCBkZWZhdWx0RlMgPSB7XG4gICAgbHN0YXRTeW5jLFxuICAgIHJlYWRkaXI6IHJlYWRkaXJDQixcbiAgICByZWFkZGlyU3luYyxcbiAgICByZWFkbGlua1N5bmMsXG4gICAgcmVhbHBhdGhTeW5jLFxuICAgIHByb21pc2VzOiB7XG4gICAgICAgIGxzdGF0LFxuICAgICAgICByZWFkZGlyLFxuICAgICAgICByZWFkbGluayxcbiAgICAgICAgcmVhbHBhdGgsXG4gICAgfSxcbn07XG4vLyBpZiB0aGV5IGp1c3QgZ2F2ZSB1cyByZXF1aXJlKCdmcycpIHRoZW4gdXNlIG91ciBkZWZhdWx0XG5jb25zdCBmc0Zyb21PcHRpb24gPSAoZnNPcHRpb24pID0+ICFmc09wdGlvbiB8fCBmc09wdGlvbiA9PT0gZGVmYXVsdEZTIHx8IGZzT3B0aW9uID09PSBhY3R1YWxGUyA/XG4gICAgZGVmYXVsdEZTXG4gICAgOiB7XG4gICAgICAgIC4uLmRlZmF1bHRGUyxcbiAgICAgICAgLi4uZnNPcHRpb24sXG4gICAgICAgIHByb21pc2VzOiB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0RlMucHJvbWlzZXMsXG4gICAgICAgICAgICAuLi4oZnNPcHRpb24ucHJvbWlzZXMgfHwge30pLFxuICAgICAgICB9LFxuICAgIH07XG4vLyB0dXJuIHNvbWV0aGluZyBsaWtlIC8vPy9jOi8gaW50byBjOlxcXG5jb25zdCB1bmNEcml2ZVJlZ2V4cCA9IC9eXFxcXFxcXFxcXD9cXFxcKFthLXpdOilcXFxcPyQvaTtcbmNvbnN0IHVuY1RvRHJpdmUgPSAocm9vdFBhdGgpID0+IHJvb3RQYXRoLnJlcGxhY2UoL1xcLy9nLCAnXFxcXCcpLnJlcGxhY2UodW5jRHJpdmVSZWdleHAsICckMVxcXFwnKTtcbi8vIHdpbmRvd3MgcGF0aHMgYXJlIHNlcGFyYXRlZCBieSBlaXRoZXIgLyBvciBcXFxuY29uc3QgZWl0aGVyU2VwID0gL1tcXFxcXFwvXS87XG5jb25zdCBVTktOT1dOID0gMDsgLy8gbWF5IG5vdCBldmVuIGV4aXN0LCBmb3IgYWxsIHdlIGtub3dcbmNvbnN0IElGSUZPID0gMGIwMDAxO1xuY29uc3QgSUZDSFIgPSAwYjAwMTA7XG5jb25zdCBJRkRJUiA9IDBiMDEwMDtcbmNvbnN0IElGQkxLID0gMGIwMTEwO1xuY29uc3QgSUZSRUcgPSAwYjEwMDA7XG5jb25zdCBJRkxOSyA9IDBiMTAxMDtcbmNvbnN0IElGU09DSyA9IDBiMTEwMDtcbmNvbnN0IElGTVQgPSAwYjExMTE7XG4vLyBtYXNrIHRvIHVuc2V0IGxvdyA0IGJpdHNcbmNvbnN0IElGTVRfVU5LTk9XTiA9IH5JRk1UO1xuLy8gc2V0IGFmdGVyIHN1Y2Nlc3NmdWxseSBjYWxsaW5nIHJlYWRkaXIoKSBhbmQgZ2V0dGluZyBlbnRyaWVzLlxuY29uc3QgUkVBRERJUl9DQUxMRUQgPSAwYjAwMDBfMDAwMV8wMDAwO1xuLy8gc2V0IGFmdGVyIGEgc3VjY2Vzc2Z1bCBsc3RhdCgpXG5jb25zdCBMU1RBVF9DQUxMRUQgPSAwYjAwMDBfMDAxMF8wMDAwO1xuLy8gc2V0IGlmIGFuIGVudHJ5IChvciBvbmUgb2YgaXRzIHBhcmVudHMpIGlzIGRlZmluaXRlbHkgbm90IGEgZGlyXG5jb25zdCBFTk9URElSID0gMGIwMDAwXzAxMDBfMDAwMDtcbi8vIHNldCBpZiBhbiBlbnRyeSAob3Igb25lIG9mIGl0cyBwYXJlbnRzKSBkb2VzIG5vdCBleGlzdFxuLy8gKGNhbiBhbHNvIGJlIHNldCBvbiBsc3RhdCBlcnJvcnMgbGlrZSBFQUNDRVMgb3IgRU5BTUVUT09MT05HKVxuY29uc3QgRU5PRU5UID0gMGIwMDAwXzEwMDBfMDAwMDtcbi8vIGNhbm5vdCBoYXZlIGNoaWxkIGVudHJpZXMgLS0gYWxzbyB2ZXJpZnkgJklGTVQgaXMgZWl0aGVyIElGRElSIG9yIElGTE5LXG4vLyBzZXQgaWYgd2UgZmFpbCB0byByZWFkbGlua1xuY29uc3QgRU5PUkVBRExJTksgPSAwYjAwMDFfMDAwMF8wMDAwO1xuLy8gc2V0IGlmIHdlIGtub3cgcmVhbHBhdGgoKSB3aWxsIGZhaWxcbmNvbnN0IEVOT1JFQUxQQVRIID0gMGIwMDEwXzAwMDBfMDAwMDtcbmNvbnN0IEVOT0NISUxEID0gRU5PVERJUiB8IEVOT0VOVCB8IEVOT1JFQUxQQVRIO1xuY29uc3QgVFlQRU1BU0sgPSAwYjAwMTFfMTExMV8xMTExO1xuY29uc3QgZW50VG9UeXBlID0gKHMpID0+IHMuaXNGaWxlKCkgPyBJRlJFR1xuICAgIDogcy5pc0RpcmVjdG9yeSgpID8gSUZESVJcbiAgICAgICAgOiBzLmlzU3ltYm9saWNMaW5rKCkgPyBJRkxOS1xuICAgICAgICAgICAgOiBzLmlzQ2hhcmFjdGVyRGV2aWNlKCkgPyBJRkNIUlxuICAgICAgICAgICAgICAgIDogcy5pc0Jsb2NrRGV2aWNlKCkgPyBJRkJMS1xuICAgICAgICAgICAgICAgICAgICA6IHMuaXNTb2NrZXQoKSA/IElGU09DS1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBzLmlzRklGTygpID8gSUZJRk9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFVOS05PV047XG4vLyBub3JtYWxpemUgdW5pY29kZSBwYXRoIG5hbWVzXG5jb25zdCBub3JtYWxpemVDYWNoZSA9IG5ldyBMUlVDYWNoZSh7IG1heDogMiAqKiAxMiB9KTtcbmNvbnN0IG5vcm1hbGl6ZSA9IChzKSA9PiB7XG4gICAgY29uc3QgYyA9IG5vcm1hbGl6ZUNhY2hlLmdldChzKTtcbiAgICBpZiAoYylcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgY29uc3QgbiA9IHMubm9ybWFsaXplKCdORktEJyk7XG4gICAgbm9ybWFsaXplQ2FjaGUuc2V0KHMsIG4pO1xuICAgIHJldHVybiBuO1xufTtcbmNvbnN0IG5vcm1hbGl6ZU5vY2FzZUNhY2hlID0gbmV3IExSVUNhY2hlKHsgbWF4OiAyICoqIDEyIH0pO1xuY29uc3Qgbm9ybWFsaXplTm9jYXNlID0gKHMpID0+IHtcbiAgICBjb25zdCBjID0gbm9ybWFsaXplTm9jYXNlQ2FjaGUuZ2V0KHMpO1xuICAgIGlmIChjKVxuICAgICAgICByZXR1cm4gYztcbiAgICBjb25zdCBuID0gbm9ybWFsaXplKHMudG9Mb3dlckNhc2UoKSk7XG4gICAgbm9ybWFsaXplTm9jYXNlQ2FjaGUuc2V0KHMsIG4pO1xuICAgIHJldHVybiBuO1xufTtcbi8qKlxuICogQW4gTFJVQ2FjaGUgZm9yIHN0b3JpbmcgcmVzb2x2ZWQgcGF0aCBzdHJpbmdzIG9yIFBhdGggb2JqZWN0cy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgUmVzb2x2ZUNhY2hlIGV4dGVuZHMgTFJVQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcih7IG1heDogMjU2IH0pO1xuICAgIH1cbn1cbi8vIEluIG9yZGVyIHRvIHByZXZlbnQgYmxvd2luZyBvdXQgdGhlIGpzIGhlYXAgYnkgYWxsb2NhdGluZyBodW5kcmVkcyBvZlxuLy8gdGhvdXNhbmRzIG9mIFBhdGggZW50cmllcyB3aGVuIHdhbGtpbmcgZXh0cmVtZWx5IGxhcmdlIHRyZWVzLCB0aGUgXCJjaGlsZHJlblwiXG4vLyBpbiB0aGlzIHRyZWUgYXJlIHJlcHJlc2VudGVkIGJ5IHN0b3JpbmcgYW4gYXJyYXkgb2YgUGF0aCBlbnRyaWVzIGluIGFuXG4vLyBMUlVDYWNoZSwgaW5kZXhlZCBieSB0aGUgcGFyZW50LiAgQXQgYW55IHRpbWUsIFBhdGguY2hpbGRyZW4oKSBtYXkgcmV0dXJuIGFuXG4vLyBlbXB0eSBhcnJheSwgaW5kaWNhdGluZyB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dCBhbnkgb2YgaXRzIGNoaWxkcmVuLCBhbmRcbi8vIHRodXMgaGFzIHRvIHJlYnVpbGQgdGhhdCBjYWNoZS4gIFRoaXMgaXMgZmluZSwgaXQganVzdCBtZWFucyB0aGF0IHdlIGRvbid0XG4vLyBiZW5lZml0IGFzIG11Y2ggZnJvbSBoYXZpbmcgdGhlIGNhY2hlZCBlbnRyaWVzLCBidXQgaHVnZSBkaXJlY3Rvcnkgd2Fsa3Ncbi8vIGRvbid0IGJsb3cgb3V0IHRoZSBzdGFjaywgYW5kIHNtYWxsZXIgb25lcyBhcmUgc3RpbGwgYXMgZmFzdCBhcyBwb3NzaWJsZS5cbi8vXG4vL0l0IGRvZXMgaW1wb3NlIHNvbWUgY29tcGxleGl0eSB3aGVuIGJ1aWxkaW5nIHVwIHRoZSByZWFkZGlyIGRhdGEsIGJlY2F1c2Ugd2Vcbi8vbmVlZCB0byBwYXNzIGEgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZHJlbiBhcnJheSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aC5cbi8qKlxuICogYW4gTFJVQ2FjaGUgZm9yIHN0b3JpbmcgY2hpbGQgZW50cmllcy5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgQ2hpbGRyZW5DYWNoZSBleHRlbmRzIExSVUNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvcihtYXhTaXplID0gMTYgKiAxMDI0KSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIG1heFNpemUsXG4gICAgICAgICAgICAvLyBwYXJlbnQgKyBjaGlsZHJlblxuICAgICAgICAgICAgc2l6ZUNhbGN1bGF0aW9uOiBhID0+IGEubGVuZ3RoICsgMSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuY29uc3Qgc2V0QXNDd2QgPSBTeW1ib2woJ1BhdGhTY3Vycnkgc2V0QXNDd2QnKTtcbi8qKlxuICogUGF0aCBvYmplY3RzIGFyZSBzb3J0IG9mIGxpa2UgYSBzdXBlci1wb3dlcmVkXG4gKiB7QGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0L2FwaS9mcy5odG1sI2NsYXNzLWZzZGlyZW50IGZzLkRpcmVudH1cbiAqXG4gKiBFYWNoIG9uZSByZXByZXNlbnRzIGEgc2luZ2xlIGZpbGVzeXN0ZW0gZW50cnkgb24gZGlzaywgd2hpY2ggbWF5IG9yIG1heSBub3RcbiAqIGV4aXN0LiBJdCBpbmNsdWRlcyBtZXRob2RzIGZvciByZWFkaW5nIHZhcmlvdXMgdHlwZXMgb2YgaW5mb3JtYXRpb24gdmlhXG4gKiBsc3RhdCwgcmVhZGxpbmssIGFuZCByZWFkZGlyLCBhbmQgY2FjaGVzIGFsbCBpbmZvcm1hdGlvbiB0byB0aGUgZ3JlYXRlc3RcbiAqIGRlZ3JlZSBwb3NzaWJsZS5cbiAqXG4gKiBOb3RlIHRoYXQgZnMgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIG5vcm1hbGx5IHRocm93IHdpbGwgaW5zdGVhZCByZXR1cm4gYW5cbiAqIFwiZW1wdHlcIiB2YWx1ZS4gVGhpcyBpcyBpbiBvcmRlciB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSBvdmVyaGVhZCBmcm9tIGVycm9yXG4gKiBzdGFjayB0cmFjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoQmFzZSB7XG4gICAgLyoqXG4gICAgICogdGhlIGJhc2VuYW1lIG9mIHRoaXMgcGF0aFxuICAgICAqXG4gICAgICogKipJbXBvcnRhbnQqKjogKmFsd2F5cyogdGVzdCB0aGUgcGF0aCBuYW1lIGFnYWluc3QgYW55IHRlc3Qgc3RyaW5nXG4gICAgICogdXNpbmd0aGUge0BsaW5rIGlzTmFtZWR9IG1ldGhvZCwgYW5kIG5vdCBieSBkaXJlY3RseSBjb21wYXJpbmcgdGhpc1xuICAgICAqIHN0cmluZy4gT3RoZXJ3aXNlLCB1bmljb2RlIHBhdGggc3RyaW5ncyB0aGF0IHRoZSBzeXN0ZW0gc2VlcyBhcyBpZGVudGljYWxcbiAgICAgKiB3aWxsIG5vdCBiZSBwcm9wZXJseSB0cmVhdGVkIGFzIHRoZSBzYW1lIHBhdGgsIGxlYWRpbmcgdG8gaW5jb3JyZWN0XG4gICAgICogYmVoYXZpb3IgYW5kIHBvc3NpYmxlIHNlY3VyaXR5IGlzc3Vlcy5cbiAgICAgKi9cbiAgICBuYW1lO1xuICAgIC8qKlxuICAgICAqIHRoZSBQYXRoIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhdGggcm9vdC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHJvb3Q7XG4gICAgLyoqXG4gICAgICogQWxsIHJvb3RzIGZvdW5kIHdpdGhpbiB0aGUgY3VycmVudCBQYXRoU2N1cnJ5IGZhbWlseVxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcm9vdHM7XG4gICAgLyoqXG4gICAgICogYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBwYXRoLCBvciB1bmRlZmluZWQgaW4gdGhlIGNhc2Ugb2Ygcm9vdCBlbnRyaWVzXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwYXJlbnQ7XG4gICAgLyoqXG4gICAgICogYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgcGF0aHMgYXJlIGNvbXBhcmVkIGNhc2UtaW5zZW5zaXRpdmVseVxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG5vY2FzZTtcbiAgICAvKipcbiAgICAgKiBib29sZWFuIGluZGljYXRpbmcgdGhhdCB0aGlzIHBhdGggaXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAgICAgKiBvZiB0aGUgUGF0aFNjdXJyeSBjb2xsZWN0aW9uIHRoYXQgY29udGFpbnMgaXQuXG4gICAgICovXG4gICAgaXNDV0QgPSBmYWxzZTtcbiAgICAvLyBwb3RlbnRpYWwgZGVmYXVsdCBmcyBvdmVycmlkZVxuICAgICNmcztcbiAgICAvLyBTdGF0cyBmaWVsZHNcbiAgICAjZGV2O1xuICAgIGdldCBkZXYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkZXY7XG4gICAgfVxuICAgICNtb2RlO1xuICAgIGdldCBtb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbW9kZTtcbiAgICB9XG4gICAgI25saW5rO1xuICAgIGdldCBubGluaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI25saW5rO1xuICAgIH1cbiAgICAjdWlkO1xuICAgIGdldCB1aWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN1aWQ7XG4gICAgfVxuICAgICNnaWQ7XG4gICAgZ2V0IGdpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2dpZDtcbiAgICB9XG4gICAgI3JkZXY7XG4gICAgZ2V0IHJkZXYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNyZGV2O1xuICAgIH1cbiAgICAjYmxrc2l6ZTtcbiAgICBnZXQgYmxrc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2Jsa3NpemU7XG4gICAgfVxuICAgICNpbm87XG4gICAgZ2V0IGlubygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lubztcbiAgICB9XG4gICAgI3NpemU7XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNzaXplO1xuICAgIH1cbiAgICAjYmxvY2tzO1xuICAgIGdldCBibG9ja3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNibG9ja3M7XG4gICAgfVxuICAgICNhdGltZU1zO1xuICAgIGdldCBhdGltZU1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYXRpbWVNcztcbiAgICB9XG4gICAgI210aW1lTXM7XG4gICAgZ2V0IG10aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtdGltZU1zO1xuICAgIH1cbiAgICAjY3RpbWVNcztcbiAgICBnZXQgY3RpbWVNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2N0aW1lTXM7XG4gICAgfVxuICAgICNiaXJ0aHRpbWVNcztcbiAgICBnZXQgYmlydGh0aW1lTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNiaXJ0aHRpbWVNcztcbiAgICB9XG4gICAgI2F0aW1lO1xuICAgIGdldCBhdGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2F0aW1lO1xuICAgIH1cbiAgICAjbXRpbWU7XG4gICAgZ2V0IG10aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbXRpbWU7XG4gICAgfVxuICAgICNjdGltZTtcbiAgICBnZXQgY3RpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjdGltZTtcbiAgICB9XG4gICAgI2JpcnRodGltZTtcbiAgICBnZXQgYmlydGh0aW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYmlydGh0aW1lO1xuICAgIH1cbiAgICAjbWF0Y2hOYW1lO1xuICAgICNkZXB0aDtcbiAgICAjZnVsbHBhdGg7XG4gICAgI2Z1bGxwYXRoUG9zaXg7XG4gICAgI3JlbGF0aXZlO1xuICAgICNyZWxhdGl2ZVBvc2l4O1xuICAgICN0eXBlO1xuICAgICNjaGlsZHJlbjtcbiAgICAjbGlua1RhcmdldDtcbiAgICAjcmVhbHBhdGg7XG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBEaXJlbnQgY2xhc3MgYXMgb2ZcbiAgICAgKiBOb2RlIHYyMCwgd2hlcmUgRGlyZW50WydwYXJlbnRQYXRoJ10gcmVmZXJzIHRvIHRoZSBwYXRoIG9mIHRoZVxuICAgICAqIGRpcmVjdG9yeSB0aGF0IHdhcyBwYXNzZWQgdG8gcmVhZGRpci4gRm9yIHJvb3QgZW50cmllcywgaXQncyB0aGUgcGF0aFxuICAgICAqIHRvIHRoZSBlbnRyeSBpdHNlbGYuXG4gICAgICovXG4gICAgZ2V0IHBhcmVudFBhdGgoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5wYXJlbnQgfHwgdGhpcykuZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgLyoqXG4gICAgICogRGVwcmVjYXRlZCBhbGlhcyBmb3IgRGlyZW50WydwYXJlbnRQYXRoJ10gU29tZXdoYXQgY291bnRlcmludHVpdGl2ZWx5LFxuICAgICAqIHRoaXMgcHJvcGVydHkgcmVmZXJzIHRvIHRoZSAqcGFyZW50KiBwYXRoLCBub3QgdGhlIHBhdGggb2JqZWN0IGl0c2VsZi5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgZ2V0IHBhdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFBhdGg7XG4gICAgfVxuICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgLyoqXG4gICAgICogRG8gbm90IGNyZWF0ZSBuZXcgUGF0aCBvYmplY3RzIGRpcmVjdGx5LiAgVGhleSBzaG91bGQgYWx3YXlzIGJlIGFjY2Vzc2VkXG4gICAgICogdmlhIHRoZSBQYXRoU2N1cnJ5IGNsYXNzIG9yIG90aGVyIG1ldGhvZHMgb24gdGhlIFBhdGggY2xhc3MuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0eXBlID0gVU5LTk9XTiwgcm9vdCwgcm9vdHMsIG5vY2FzZSwgY2hpbGRyZW4sIG9wdHMpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy4jbWF0Y2hOYW1lID0gbm9jYXNlID8gbm9ybWFsaXplTm9jYXNlKG5hbWUpIDogbm9ybWFsaXplKG5hbWUpO1xuICAgICAgICB0aGlzLiN0eXBlID0gdHlwZSAmIFRZUEVNQVNLO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICAgICAgdGhpcy5yb290cyA9IHJvb3RzO1xuICAgICAgICB0aGlzLnJvb3QgPSByb290IHx8IHRoaXM7XG4gICAgICAgIHRoaXMuI2NoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICAgIHRoaXMuI2Z1bGxwYXRoID0gb3B0cy5mdWxscGF0aDtcbiAgICAgICAgdGhpcy4jcmVsYXRpdmUgPSBvcHRzLnJlbGF0aXZlO1xuICAgICAgICB0aGlzLiNyZWxhdGl2ZVBvc2l4ID0gb3B0cy5yZWxhdGl2ZVBvc2l4O1xuICAgICAgICB0aGlzLnBhcmVudCA9IG9wdHMucGFyZW50O1xuICAgICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuI2ZzID0gdGhpcy5wYXJlbnQuI2ZzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jZnMgPSBmc0Zyb21PcHRpb24ob3B0cy5mcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGVwdGggb2YgdGhlIFBhdGggb2JqZWN0IGZyb20gaXRzIHJvb3QuXG4gICAgICpcbiAgICAgKiBGb3IgZXhhbXBsZSwgYSBwYXRoIGF0IGAvZm9vL2JhcmAgd291bGQgaGF2ZSBhIGRlcHRoIG9mIDIuXG4gICAgICovXG4gICAgZGVwdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNkZXB0aCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2RlcHRoO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KVxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNkZXB0aCA9IDApO1xuICAgICAgICByZXR1cm4gKHRoaXMuI2RlcHRoID0gdGhpcy5wYXJlbnQuZGVwdGgoKSArIDEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjaGlsZHJlbkNhY2hlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY2hpbGRyZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgUGF0aCBvYmplY3QgcmVmZXJlbmNlZCBieSB0aGUgc3RyaW5nIHBhdGgsIHJlc29sdmVkIGZyb20gdGhpcyBQYXRoXG4gICAgICovXG4gICAgcmVzb2x2ZShwYXRoKSB7XG4gICAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm9vdFBhdGggPSB0aGlzLmdldFJvb3RTdHJpbmcocGF0aCk7XG4gICAgICAgIGNvbnN0IGRpciA9IHBhdGguc3Vic3RyaW5nKHJvb3RQYXRoLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGRpclBhcnRzID0gZGlyLnNwbGl0KHRoaXMuc3BsaXRTZXApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByb290UGF0aCA/XG4gICAgICAgICAgICB0aGlzLmdldFJvb3Qocm9vdFBhdGgpLiNyZXNvbHZlUGFydHMoZGlyUGFydHMpXG4gICAgICAgICAgICA6IHRoaXMuI3Jlc29sdmVQYXJ0cyhkaXJQYXJ0cyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgICNyZXNvbHZlUGFydHMoZGlyUGFydHMpIHtcbiAgICAgICAgbGV0IHAgPSB0aGlzO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGlyUGFydHMpIHtcbiAgICAgICAgICAgIHAgPSBwLmNoaWxkKHBhcnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgY2hpbGRyZW4gUGF0aCBvYmplY3RzLCBpZiBzdGlsbCBhdmFpbGFibGUuICBJZiB0aGV5XG4gICAgICogaGF2ZSBmYWxsZW4gb3V0IG9mIHRoZSBjYWNoZSwgdGhlbiByZXR1cm5zIGFuIGVtcHR5IGFycmF5LCBhbmQgcmVzZXRzIHRoZVxuICAgICAqIFJFQURESVJfQ0FMTEVEIGJpdCwgc28gdGhhdCBmdXR1cmUgY2FsbHMgdG8gcmVhZGRpcigpIHdpbGwgcmVxdWlyZSBhbiBmc1xuICAgICAqIGxvb2t1cC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkcmVuKCkge1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNjaGlsZHJlbi5nZXQodGhpcyk7XG4gICAgICAgIGlmIChjYWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBPYmplY3QuYXNzaWduKFtdLCB7IHByb3Zpc2lvbmFsOiAwIH0pO1xuICAgICAgICB0aGlzLiNjaGlsZHJlbi5zZXQodGhpcywgY2hpbGRyZW4pO1xuICAgICAgICB0aGlzLiN0eXBlICY9IH5SRUFERElSX0NBTExFRDtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlcyBhIHBhdGggcG9ydGlvbiBhbmQgcmV0dXJucyBvciBjcmVhdGVzIHRoZSBjaGlsZCBQYXRoLlxuICAgICAqXG4gICAgICogUmV0dXJucyBgdGhpc2AgaWYgcGF0aFBhcnQgaXMgYCcnYCBvciBgJy4nYCwgb3IgYHBhcmVudGAgaWYgcGF0aFBhcnQgaXNcbiAgICAgKiBgJy4uJ2AuXG4gICAgICpcbiAgICAgKiBUaGlzIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiAgSWYgYHBhdGhQYXJ0YCBjb250YWlucyBhbnkgcGF0aFxuICAgICAqIHNlcGFyYXRvcnMsIGl0IHdpbGwgbGVhZCB0byB1bnNhZmUgdW5kZWZpbmVkIGJlaGF2aW9yLlxuICAgICAqXG4gICAgICogVXNlIGBQYXRoLnJlc29sdmUoKWAgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNoaWxkKHBhdGhQYXJ0LCBvcHRzKSB7XG4gICAgICAgIGlmIChwYXRoUGFydCA9PT0gJycgfHwgcGF0aFBhcnQgPT09ICcuJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSAnLi4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgfHwgdGhpcztcbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5kIHRoZSBjaGlsZFxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubm9jYXNlID8gbm9ybWFsaXplTm9jYXNlKHBhdGhQYXJ0KSA6IG5vcm1hbGl6ZShwYXRoUGFydCk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKHAuI21hdGNoTmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGRpZG4ndCBmaW5kIGl0LCBjcmVhdGUgcHJvdmlzaW9uYWwgY2hpbGQsIHNpbmNlIGl0IG1pZ2h0IG5vdFxuICAgICAgICAvLyBhY3R1YWxseSBleGlzdC4gIElmIHdlIGtub3cgdGhlIHBhcmVudCBpc24ndCBhIGRpciwgdGhlblxuICAgICAgICAvLyBpbiBmYWN0IGl0IENBTidUIGV4aXN0LlxuICAgICAgICBjb25zdCBzID0gdGhpcy5wYXJlbnQgPyB0aGlzLnNlcCA6ICcnO1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRoaXMuI2Z1bGxwYXRoID8gdGhpcy4jZnVsbHBhdGggKyBzICsgcGF0aFBhcnQgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHBjaGlsZCA9IHRoaXMubmV3Q2hpbGQocGF0aFBhcnQsIFVOS05PV04sIHtcbiAgICAgICAgICAgIC4uLm9wdHMsXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMsXG4gICAgICAgICAgICBmdWxscGF0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHBjaGlsZC4jdHlwZSB8PSBFTk9FTlQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZG9uJ3QgaGF2ZSB0byB1cGRhdGUgcHJvdmlzaW9uYWwsIGJlY2F1c2UgaWYgd2UgaGF2ZSByZWFsIGNoaWxkcmVuLFxuICAgICAgICAvLyB0aGVuIHByb3Zpc2lvbmFsIGlzIHNldCB0byBjaGlsZHJlbi5sZW5ndGgsIG90aGVyd2lzZSBhIGxvd2VyIG51bWJlclxuICAgICAgICBjaGlsZHJlbi5wdXNoKHBjaGlsZCk7XG4gICAgICAgIHJldHVybiBwY2hpbGQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN3ZC4gSWYgaXQgZG9lcyBub3Qgc2hhcmUgYW4gYW5jZXN0b3Igd2l0aFxuICAgICAqIHRoZSBjd2QsIHRoZW4gdGhpcyBlbmRzIHVwIGJlaW5nIGVxdWl2YWxlbnQgdG8gdGhlIGZ1bGxwYXRoKClcbiAgICAgKi9cbiAgICByZWxhdGl2ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDV0QpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0aGlzLiNyZWxhdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVsYXRpdmU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jcmVsYXRpdmUgPSB0aGlzLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB2ID0gcC5yZWxhdGl2ZSgpO1xuICAgICAgICByZXR1cm4gcHYgKyAoIXB2IHx8ICFwLnBhcmVudCA/ICcnIDogdGhpcy5zZXApICsgbmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkLCB1c2luZyAvIGFzIHRoZSBwYXRoIHNlcGFyYXRvci5cbiAgICAgKiBJZiBpdCBkb2VzIG5vdCBzaGFyZSBhbiBhbmNlc3RvciB3aXRoXG4gICAgICogdGhlIGN3ZCwgdGhlbiB0aGlzIGVuZHMgdXAgYmVpbmcgZXF1aXZhbGVudCB0byB0aGUgZnVsbHBhdGhQb3NpeCgpXG4gICAgICogT24gcG9zaXggc3lzdGVtcywgdGhpcyBpcyBpZGVudGljYWwgdG8gcmVsYXRpdmUoKS5cbiAgICAgKi9cbiAgICByZWxhdGl2ZVBvc2l4KCkge1xuICAgICAgICBpZiAodGhpcy5zZXAgPT09ICcvJylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbGF0aXZlKCk7XG4gICAgICAgIGlmICh0aGlzLmlzQ1dEKVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICBpZiAodGhpcy4jcmVsYXRpdmVQb3NpeCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3JlbGF0aXZlUG9zaXg7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlbGF0aXZlUG9zaXggPSB0aGlzLmZ1bGxwYXRoUG9zaXgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHYgPSBwLnJlbGF0aXZlUG9zaXgoKTtcbiAgICAgICAgcmV0dXJuIHB2ICsgKCFwdiB8fCAhcC5wYXJlbnQgPyAnJyA6ICcvJykgKyBuYW1lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbHkgcmVzb2x2ZWQgcGF0aCBzdHJpbmcgZm9yIHRoaXMgUGF0aCBlbnRyeVxuICAgICAqL1xuICAgIGZ1bGxwYXRoKCkge1xuICAgICAgICBpZiAodGhpcy4jZnVsbHBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2Z1bGxwYXRoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgaWYgKCFwKSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoID0gdGhpcy5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdiA9IHAuZnVsbHBhdGgoKTtcbiAgICAgICAgY29uc3QgZnAgPSBwdiArICghcC5wYXJlbnQgPyAnJyA6IHRoaXMuc2VwKSArIG5hbWU7XG4gICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGggPSBmcCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIHdpbmRvd3MsIHRoaXMgaXMgaWRlbnRpY2FsIHRvIGZ1bGxwYXRoLlxuICAgICAqXG4gICAgICogT24gd2luZG93cywgdGhpcyBpcyBvdmVycmlkZGVuIHRvIHJldHVybiB0aGUgZm9yd2FyZC1zbGFzaCBmb3JtIG9mIHRoZVxuICAgICAqIGZ1bGwgVU5DIHBhdGguXG4gICAgICovXG4gICAgZnVsbHBhdGhQb3NpeCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2Z1bGxwYXRoUG9zaXggIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNmdWxscGF0aFBvc2l4O1xuICAgICAgICBpZiAodGhpcy5zZXAgPT09ICcvJylcbiAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLmZ1bGxwYXRoKCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICAgICAgICAgICAgaWYgKC9eW2Etel06XFwvL2kudGVzdChwKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy4jZnVsbHBhdGhQb3NpeCA9IGAvLz8vJHtwfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNmdWxscGF0aFBvc2l4ID0gcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcCA9IHRoaXMucGFyZW50O1xuICAgICAgICBjb25zdCBwZnBwID0gcC5mdWxscGF0aFBvc2l4KCk7XG4gICAgICAgIGNvbnN0IGZwcCA9IHBmcHAgKyAoIXBmcHAgfHwgIXAucGFyZW50ID8gJycgOiAnLycpICsgdGhpcy5uYW1lO1xuICAgICAgICByZXR1cm4gKHRoaXMuI2Z1bGxwYXRoUG9zaXggPSBmcHApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgUGF0aCBvZiBhbiB1bmtub3duIHR5cGU/XG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgd2UgbWlnaHQga25vdyAqc29tZXRoaW5nKiBhYm91dCBpdCBpZiB0aGVyZSBoYXMgYmVlbiBhIHByZXZpb3VzXG4gICAgICogZmlsZXN5c3RlbSBvcGVyYXRpb24sIGZvciBleGFtcGxlIHRoYXQgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGlzIG5vdCBhXG4gICAgICogbGluaywgb3Igd2hldGhlciBpdCBoYXMgY2hpbGQgZW50cmllcy5cbiAgICAgKi9cbiAgICBpc1Vua25vd24oKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBVTktOT1dOO1xuICAgIH1cbiAgICBpc1R5cGUodHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpc1tgaXMke3R5cGV9YF0oKTtcbiAgICB9XG4gICAgZ2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmlzVW5rbm93bigpID8gJ1Vua25vd24nXG4gICAgICAgICAgICA6IHRoaXMuaXNEaXJlY3RvcnkoKSA/ICdEaXJlY3RvcnknXG4gICAgICAgICAgICAgICAgOiB0aGlzLmlzRmlsZSgpID8gJ0ZpbGUnXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5pc1N5bWJvbGljTGluaygpID8gJ1N5bWJvbGljTGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5pc0ZJRk8oKSA/ICdGSUZPJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5pc0NoYXJhY3RlckRldmljZSgpID8gJ0NoYXJhY3RlckRldmljZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmlzQmxvY2tEZXZpY2UoKSA/ICdCbG9ja0RldmljZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogYzggaWdub3JlIHN0YXJ0ICovIHRoaXMuaXNTb2NrZXQoKSA/ICdTb2NrZXQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnVW5rbm93bicpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgUGF0aCBhIHJlZ3VsYXIgZmlsZT9cbiAgICAgKi9cbiAgICBpc0ZpbGUoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRlJFRztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIFBhdGggYSBkaXJlY3Rvcnk/XG4gICAgICovXG4gICAgaXNEaXJlY3RvcnkoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRkRJUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBjaGFyYWN0ZXIgZGV2aWNlP1xuICAgICAqL1xuICAgIGlzQ2hhcmFjdGVyRGV2aWNlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZDSFI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgYmxvY2sgZGV2aWNlP1xuICAgICAqL1xuICAgIGlzQmxvY2tEZXZpY2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTVQpID09PSBJRkJMSztcbiAgICB9XG4gICAgLyoqXG4gICAgICogSXMgdGhlIHBhdGggYSBGSUZPIHBpcGU/XG4gICAgICovXG4gICAgaXNGSUZPKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZJRk87XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElzIHRoZSBwYXRoIGEgc29ja2V0P1xuICAgICAqL1xuICAgIGlzU29ja2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3R5cGUgJiBJRk1UKSA9PT0gSUZTT0NLO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcGF0aCBhIHN5bWJvbGljIGxpbms/XG4gICAgICovXG4gICAgaXNTeW1ib2xpY0xpbmsoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jdHlwZSAmIElGTE5LKSA9PT0gSUZMTks7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgZW50cnkgaWYgaXQgaGFzIGJlZW4gc3ViamVjdCBvZiBhIHN1Y2Nlc3NmdWwgbHN0YXQsIG9yXG4gICAgICogdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIERvZXMgbm90IHJlYWQgdGhlIGZpbGVzeXN0ZW0sIHNvIGFuIHVuZGVmaW5lZCByZXN1bHQgKmNvdWxkKiBzaW1wbHlcbiAgICAgKiBtZWFuIHRoYXQgd2UgaGF2ZW4ndCBjYWxsZWQgbHN0YXQgb24gaXQuXG4gICAgICovXG4gICAgbHN0YXRDYWNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN0eXBlICYgTFNUQVRfQ0FMTEVEID8gdGhpcyA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBjYWNoZWQgbGluayB0YXJnZXQgaWYgdGhlIGVudHJ5IGhhcyBiZWVuIHRoZSBzdWJqZWN0IG9mIGFcbiAgICAgKiBzdWNjZXNzZnVsIHJlYWRsaW5rLCBvciB1bmRlZmluZWQgb3RoZXJ3aXNlLlxuICAgICAqXG4gICAgICogRG9lcyBub3QgcmVhZCB0aGUgZmlsZXN5c3RlbSwgc28gYW4gdW5kZWZpbmVkIHJlc3VsdCAqY291bGQqIGp1c3QgbWVhbiB3ZVxuICAgICAqIGRvbid0IGhhdmUgYW55IGNhY2hlZCBkYXRhLiBPbmx5IHVzZSBpdCBpZiB5b3UgYXJlIHZlcnkgc3VyZSB0aGF0IGFcbiAgICAgKiByZWFkbGluaygpIGhhcyBiZWVuIGNhbGxlZCBhdCBzb21lIHBvaW50LlxuICAgICAqL1xuICAgIHJlYWRsaW5rQ2FjaGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbGlua1RhcmdldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2FjaGVkIHJlYWxwYXRoIHRhcmdldCBpZiB0aGUgZW50cnkgaGFzIGJlZW4gdGhlIHN1YmplY3RcbiAgICAgKiBvZiBhIHN1Y2Nlc3NmdWwgcmVhbHBhdGgsIG9yIHVuZGVmaW5lZCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiB1bmRlZmluZWQgcmVzdWx0ICpjb3VsZCoganVzdCBtZWFuIHdlXG4gICAgICogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIGRhdGEuIE9ubHkgdXNlIGl0IGlmIHlvdSBhcmUgdmVyeSBzdXJlIHRoYXQgYVxuICAgICAqIHJlYWxwYXRoKCkgaGFzIGJlZW4gY2FsbGVkIGF0IHNvbWUgcG9pbnQuXG4gICAgICovXG4gICAgcmVhbHBhdGhDYWNoZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNyZWFscGF0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2FjaGVkIGNoaWxkIFBhdGggZW50cmllcyBhcnJheSBpZiB0aGUgZW50cnkgaGFzIGJlZW4gdGhlXG4gICAgICogc3ViamVjdCBvZiBhIHN1Y2Nlc3NmdWwgcmVhZGRpcigpLCBvciBbXSBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBEb2VzIG5vdCByZWFkIHRoZSBmaWxlc3lzdGVtLCBzbyBhbiBlbXB0eSBhcnJheSAqY291bGQqIGp1c3QgbWVhbiB3ZVxuICAgICAqIGRvbid0IGhhdmUgYW55IGNhY2hlZCBkYXRhLiBPbmx5IHVzZSBpdCBpZiB5b3UgYXJlIHZlcnkgc3VyZSB0aGF0IGFcbiAgICAgKiByZWFkZGlyKCkgaGFzIGJlZW4gY2FsbGVkIHJlY2VudGx5IGVub3VnaCB0byBzdGlsbCBiZSB2YWxpZC5cbiAgICAgKi9cbiAgICByZWFkZGlyQ2FjaGVkKCkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuLnNsaWNlKDAsIGNoaWxkcmVuLnByb3Zpc2lvbmFsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgaXQncyB3b3J0aCB0cnlpbmcgdG8gcmVhZGxpbmsuICBJZSwgd2UgZG9uJ3QgKHlldCkgaGF2ZVxuICAgICAqIGFueSBpbmRpY2F0aW9uIHRoYXQgcmVhZGxpbmsgd2lsbCBkZWZpbml0ZWx5IGZhaWwuXG4gICAgICpcbiAgICAgKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBwYXRoIGlzIGtub3duIHRvIG5vdCBiZSBhIHN5bWxpbmssIGlmIGEgcHJldmlvdXNcbiAgICAgKiByZWFkbGluayBmYWlsZWQsIG9yIGlmIHRoZSBlbnRyeSBkb2VzIG5vdCBleGlzdC5cbiAgICAgKi9cbiAgICBjYW5SZWFkbGluaygpIHtcbiAgICAgICAgaWYgKHRoaXMuI2xpbmtUYXJnZXQpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gY2FzZXMgd2hlcmUgaXQgY2Fubm90IHBvc3NpYmx5IHN1Y2NlZWRcbiAgICAgICAgY29uc3QgaWZtdCA9IHRoaXMuI3R5cGUgJiBJRk1UO1xuICAgICAgICByZXR1cm4gISgoaWZtdCAhPT0gVU5LTk9XTiAmJiBpZm10ICE9PSBJRkxOSykgfHxcbiAgICAgICAgICAgIHRoaXMuI3R5cGUgJiBFTk9SRUFETElOSyB8fFxuICAgICAgICAgICAgdGhpcy4jdHlwZSAmIEVOT0VOVCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0cnVlIGlmIHJlYWRkaXIgaGFzIHByZXZpb3VzbHkgYmVlbiBzdWNjZXNzZnVsbHkgY2FsbGVkIG9uIHRoaXNcbiAgICAgKiBwYXRoLCBpbmRpY2F0aW5nIHRoYXQgY2FjaGVkUmVhZGRpcigpIGlzIGxpa2VseSB2YWxpZC5cbiAgICAgKi9cbiAgICBjYWxsZWRSZWFkZGlyKCkge1xuICAgICAgICByZXR1cm4gISEodGhpcy4jdHlwZSAmIFJFQURESVJfQ0FMTEVEKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXRoIGlzIGtub3duIHRvIG5vdCBleGlzdC4gVGhhdCBpcywgYSBwcmV2aW91cyBsc3RhdFxuICAgICAqIG9yIHJlYWRkaXIgZmFpbGVkIHRvIHZlcmlmeSBpdHMgZXhpc3RlbmNlIHdoZW4gdGhhdCB3b3VsZCBoYXZlIGJlZW5cbiAgICAgKiBleHBlY3RlZCwgb3IgYSBwYXJlbnQgZW50cnkgd2FzIG1hcmtlZCBlaXRoZXIgZW5vZW50IG9yIGVub3RkaXIuXG4gICAgICovXG4gICAgaXNFTk9FTlQoKSB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLiN0eXBlICYgRU5PRU5UKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHBhdGggaXMgYSBtYXRjaCBmb3IgdGhlIGdpdmVuIHBhdGggbmFtZS4gIFRoaXMgaGFuZGxlc1xuICAgICAqIGNhc2Ugc2Vuc2l0aXZpdHkgYW5kIHVuaWNvZGUgbm9ybWFsaXphdGlvbi5cbiAgICAgKlxuICAgICAqIE5vdGU6IGV2ZW4gb24gY2FzZS1zZW5zaXRpdmUgc3lzdGVtcywgaXQgaXMgKipub3QqKiBzYWZlIHRvIHRlc3QgdGhlXG4gICAgICogZXF1YWxpdHkgb2YgdGhlIGAubmFtZWAgcHJvcGVydHkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBnaXZlbiBwYXRobmFtZVxuICAgICAqIG1hdGNoZXMsIGR1ZSB0byB1bmljb2RlIG5vcm1hbGl6YXRpb24gbWlzbWF0Y2hlcy5cbiAgICAgKlxuICAgICAqIEFsd2F5cyB1c2UgdGhpcyBtZXRob2QgaW5zdGVhZCBvZiB0ZXN0aW5nIHRoZSBgcGF0aC5uYW1lYCBwcm9wZXJ0eVxuICAgICAqIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIGlzTmFtZWQobikge1xuICAgICAgICByZXR1cm4gIXRoaXMubm9jYXNlID9cbiAgICAgICAgICAgIHRoaXMuI21hdGNoTmFtZSA9PT0gbm9ybWFsaXplKG4pXG4gICAgICAgICAgICA6IHRoaXMuI21hdGNoTmFtZSA9PT0gbm9ybWFsaXplTm9jYXNlKG4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFBhdGggb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRhcmdldCBvZiBhIHN5bWJvbGljIGxpbmsuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCBpcyBub3QgYSBzeW1ib2xpYyBsaW5rLCBvciBpZiB0aGUgcmVhZGxpbmsgY2FsbCBmYWlscyBmb3IgYW55XG4gICAgICogcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIFJlc3VsdCBpcyBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXRkYXRlZCBpZiB0aGUgZmlsZXN5c3RlbSBpcyBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIHJlYWRsaW5rKCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiNsaW5rVGFyZ2V0O1xuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jYW5SZWFkbGluaygpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAvLyBhbHJlYWR5IGNvdmVyZWQgYnkgdGhlIGNhblJlYWRsaW5rIHRlc3QsIGhlcmUgZm9yIHRzIGdydW1wbGVzXG4gICAgICAgIGlmICghdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWQgPSBhd2FpdCB0aGlzLiNmcy5wcm9taXNlcy5yZWFkbGluayh0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgY29uc3QgbGlua1RhcmdldCA9IChhd2FpdCB0aGlzLnBhcmVudC5yZWFscGF0aCgpKT8ucmVzb2x2ZShyZWFkKTtcbiAgICAgICAgICAgIGlmIChsaW5rVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNsaW5rVGFyZ2V0ID0gbGlua1RhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNyZWFkbGlua0ZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN5bmNocm9ub3VzIHtAbGluayBQYXRoQmFzZS5yZWFkbGlua31cbiAgICAgKi9cbiAgICByZWFkbGlua1N5bmMoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuI2xpbmtUYXJnZXQ7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRsaW5rKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIC8vIGFscmVhZHkgY292ZXJlZCBieSB0aGUgY2FuUmVhZGxpbmsgdGVzdCwgaGVyZSBmb3IgdHMgZ3J1bXBsZXNcbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVhZCA9IHRoaXMuI2ZzLnJlYWRsaW5rU3luYyh0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgY29uc3QgbGlua1RhcmdldCA9IHRoaXMucGFyZW50LnJlYWxwYXRoU3luYygpPy5yZXNvbHZlKHJlYWQpO1xuICAgICAgICAgICAgaWYgKGxpbmtUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuI2xpbmtUYXJnZXQgPSBsaW5rVGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlYWRsaW5rRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKSB7XG4gICAgICAgIC8vIHN1Y2NlZWRlZCwgbWFyayByZWFkZGlyIGNhbGxlZCBiaXRcbiAgICAgICAgdGhpcy4jdHlwZSB8PSBSRUFERElSX0NBTExFRDtcbiAgICAgICAgLy8gbWFyayBhbGwgcmVtYWluaW5nIHByb3Zpc2lvbmFsIGNoaWxkcmVuIGFzIEVOT0VOVFxuICAgICAgICBmb3IgKGxldCBwID0gY2hpbGRyZW4ucHJvdmlzaW9uYWw7IHAgPCBjaGlsZHJlbi5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgY29uc3QgYyA9IGNoaWxkcmVuW3BdO1xuICAgICAgICAgICAgaWYgKGMpXG4gICAgICAgICAgICAgICAgYy4jbWFya0VOT0VOVCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgICNtYXJrRU5PRU5UKCkge1xuICAgICAgICAvLyBtYXJrIGFzIFVOS05PV04gYW5kIEVOT0VOVFxuICAgICAgICBpZiAodGhpcy4jdHlwZSAmIEVOT0VOVClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy4jdHlwZSA9ICh0aGlzLiN0eXBlIHwgRU5PRU5UKSAmIElGTVRfVU5LTk9XTjtcbiAgICAgICAgdGhpcy4jbWFya0NoaWxkcmVuRU5PRU5UKCk7XG4gICAgfVxuICAgICNtYXJrQ2hpbGRyZW5FTk9FTlQoKSB7XG4gICAgICAgIC8vIGFsbCBjaGlsZHJlbiBhcmUgcHJvdmlzaW9uYWwgYW5kIGRvIG5vdCBleGlzdFxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHAuI21hcmtFTk9FTlQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjbWFya0VOT1JFQUxQQVRIKCkge1xuICAgICAgICB0aGlzLiN0eXBlIHw9IEVOT1JFQUxQQVRIO1xuICAgICAgICB0aGlzLiNtYXJrRU5PVERJUigpO1xuICAgIH1cbiAgICAvLyBzYXZlIHRoZSBpbmZvcm1hdGlvbiB3aGVuIHdlIGtub3cgdGhlIGVudHJ5IGlzIG5vdCBhIGRpclxuICAgICNtYXJrRU5PVERJUigpIHtcbiAgICAgICAgLy8gZW50cnkgaXMgbm90IGEgZGlyZWN0b3J5LCBzbyBhbnkgY2hpbGRyZW4gY2FuJ3QgZXhpc3QuXG4gICAgICAgIC8vIHRoaXMgKnNob3VsZCogYmUgaW1wb3NzaWJsZSwgc2luY2UgYW55IGNoaWxkcmVuIGNyZWF0ZWRcbiAgICAgICAgLy8gYWZ0ZXIgaXQncyBiZWVuIG1hcmtlZCBFTk9URElSIHNob3VsZCBiZSBtYXJrZWQgRU5PRU5ULFxuICAgICAgICAvLyBzbyBpdCB3b24ndCBldmVuIGdldCB0byB0aGlzIHBvaW50LlxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKHRoaXMuI3R5cGUgJiBFTk9URElSKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICBsZXQgdCA9IHRoaXMuI3R5cGU7XG4gICAgICAgIC8vIHRoaXMgY291bGQgaGFwcGVuIGlmIHdlIHN0YXQgYSBkaXIsIHRoZW4gZGVsZXRlIGl0LFxuICAgICAgICAvLyB0aGVuIHRyeSB0byByZWFkIGl0IG9yIG9uZSBvZiBpdHMgY2hpbGRyZW4uXG4gICAgICAgIGlmICgodCAmIElGTVQpID09PSBJRkRJUilcbiAgICAgICAgICAgIHQgJj0gSUZNVF9VTktOT1dOO1xuICAgICAgICB0aGlzLiN0eXBlID0gdCB8IEVOT1RESVI7XG4gICAgICAgIHRoaXMuI21hcmtDaGlsZHJlbkVOT0VOVCgpO1xuICAgIH1cbiAgICAjcmVhZGRpckZhaWwoY29kZSA9ICcnKSB7XG4gICAgICAgIC8vIG1hcmtFTk9URElSIGFuZCBtYXJrRU5PRU5UIGFsc28gc2V0IHByb3Zpc2lvbmFsPTBcbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9URElSJyB8fCBjb2RlID09PSAnRVBFUk0nKSB7XG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PVERJUigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuKCkucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgICNsc3RhdEZhaWwoY29kZSA9ICcnKSB7XG4gICAgICAgIC8vIFdpbmRvd3MganVzdCByYWlzZXMgRU5PRU5UIGluIHRoaXMgY2FzZSwgZGlzYWJsZSBmb3Igd2luIENJXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoY29kZSA9PT0gJ0VOT1RESVInKSB7XG4gICAgICAgICAgICAvLyBhbHJlYWR5IGtub3cgaXQgaGFzIGEgcGFyZW50IGJ5IHRoaXMgcG9pbnRcbiAgICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgIHAuI21hcmtFTk9URElSKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PRU5UKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI3JlYWRsaW5rRmFpbChjb2RlID0gJycpIHtcbiAgICAgICAgbGV0IHRlciA9IHRoaXMuI3R5cGU7XG4gICAgICAgIHRlciB8PSBFTk9SRUFETElOSztcbiAgICAgICAgaWYgKGNvZGUgPT09ICdFTk9FTlQnKVxuICAgICAgICAgICAgdGVyIHw9IEVOT0VOVDtcbiAgICAgICAgLy8gd2luZG93cyBnZXRzIGEgd2VpcmQgZXJyb3Igd2hlbiB5b3UgdHJ5IHRvIHJlYWRsaW5rIGEgZmlsZVxuICAgICAgICBpZiAoY29kZSA9PT0gJ0VJTlZBTCcgfHwgY29kZSA9PT0gJ1VOS05PV04nKSB7XG4gICAgICAgICAgICAvLyBleGlzdHMsIGJ1dCBub3QgYSBzeW1saW5rLCB3ZSBkb24ndCBrbm93IFdIQVQgaXQgaXMsIHNvIHJlbW92ZVxuICAgICAgICAgICAgLy8gYWxsIElGTVQgYml0cy5cbiAgICAgICAgICAgIHRlciAmPSBJRk1UX1VOS05PV047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jdHlwZSA9IHRlcjtcbiAgICAgICAgLy8gd2luZG93cyBqdXN0IGdldHMgRU5PRU5UIGluIHRoaXMgY2FzZS4gIFdlIGRvIGNvdmVyIHRoZSBjYXNlLFxuICAgICAgICAvLyBqdXN0IGRpc2FibGVkIGJlY2F1c2UgaXQncyBpbXBvc3NpYmxlIG9uIFdpbmRvd3MgQ0lcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmIChjb2RlID09PSAnRU5PVERJUicgJiYgdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LiNtYXJrRU5PVERJUigpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgfVxuICAgICNyZWFkZGlyQWRkQ2hpbGQoZSwgYykge1xuICAgICAgICByZXR1cm4gKHRoaXMuI3JlYWRkaXJNYXliZVByb21vdGVDaGlsZChlLCBjKSB8fFxuICAgICAgICAgICAgdGhpcy4jcmVhZGRpckFkZE5ld0NoaWxkKGUsIGMpKTtcbiAgICB9XG4gICAgI3JlYWRkaXJBZGROZXdDaGlsZChlLCBjKSB7XG4gICAgICAgIC8vIGFsbG9jIG5ldyBlbnRyeSBhdCBoZWFkLCBzbyBpdCdzIG5ldmVyIHByb3Zpc2lvbmFsXG4gICAgICAgIGNvbnN0IHR5cGUgPSBlbnRUb1R5cGUoZSk7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5uZXdDaGlsZChlLm5hbWUsIHR5cGUsIHsgcGFyZW50OiB0aGlzIH0pO1xuICAgICAgICBjb25zdCBpZm10ID0gY2hpbGQuI3R5cGUgJiBJRk1UO1xuICAgICAgICBpZiAoaWZtdCAhPT0gSUZESVIgJiYgaWZtdCAhPT0gSUZMTksgJiYgaWZtdCAhPT0gVU5LTk9XTikge1xuICAgICAgICAgICAgY2hpbGQuI3R5cGUgfD0gRU5PVERJUjtcbiAgICAgICAgfVxuICAgICAgICBjLnVuc2hpZnQoY2hpbGQpO1xuICAgICAgICBjLnByb3Zpc2lvbmFsKys7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9XG4gICAgI3JlYWRkaXJNYXliZVByb21vdGVDaGlsZChlLCBjKSB7XG4gICAgICAgIGZvciAobGV0IHAgPSBjLnByb3Zpc2lvbmFsOyBwIDwgYy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgY29uc3QgcGNoaWxkID0gY1twXTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5vY2FzZSA/IG5vcm1hbGl6ZU5vY2FzZShlLm5hbWUpIDogbm9ybWFsaXplKGUubmFtZSk7XG4gICAgICAgICAgICBpZiAobmFtZSAhPT0gcGNoaWxkLiNtYXRjaE5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWFkZGlyUHJvbW90ZUNoaWxkKGUsIHBjaGlsZCwgcCwgYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI3JlYWRkaXJQcm9tb3RlQ2hpbGQoZSwgcCwgaW5kZXgsIGMpIHtcbiAgICAgICAgY29uc3QgdiA9IHAubmFtZTtcbiAgICAgICAgLy8gcmV0YWluIGFueSBvdGhlciBmbGFncywgYnV0IHNldCBpZm10IGZyb20gZGlyZW50XG4gICAgICAgIHAuI3R5cGUgPSAocC4jdHlwZSAmIElGTVRfVU5LTk9XTikgfCBlbnRUb1R5cGUoZSk7XG4gICAgICAgIC8vIGNhc2Ugc2Vuc2l0aXZpdHkgZml4aW5nIHdoZW4gd2UgbGVhcm4gdGhlIHRydWUgbmFtZS5cbiAgICAgICAgaWYgKHYgIT09IGUubmFtZSlcbiAgICAgICAgICAgIHAubmFtZSA9IGUubmFtZTtcbiAgICAgICAgLy8ganVzdCBhZHZhbmNlIHByb3Zpc2lvbmFsIGluZGV4IChwb3RlbnRpYWxseSBvZmYgdGhlIGxpc3QpLFxuICAgICAgICAvLyBvdGhlcndpc2Ugd2UgaGF2ZSB0byBzcGxpY2UvcG9wIGl0IG91dCBhbmQgcmUtaW5zZXJ0IGF0IGhlYWRcbiAgICAgICAgaWYgKGluZGV4ICE9PSBjLnByb3Zpc2lvbmFsKSB7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IGMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICBjLnBvcCgpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGMudW5zaGlmdChwKTtcbiAgICAgICAgfVxuICAgICAgICBjLnByb3Zpc2lvbmFsKys7XG4gICAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIGxzdGF0KCkgb24gdGhpcyBQYXRoLCBhbmQgdXBkYXRlIGFsbCBrbm93biBpbmZvcm1hdGlvbiB0aGF0IGNhbiBiZVxuICAgICAqIGRldGVybWluZWQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdW5saWtlIGBmcy5sc3RhdCgpYCwgdGhlIHJldHVybmVkIHZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc29tZVxuICAgICAqIGluZm9ybWF0aW9uLCBzdWNoIGFzIGBtb2RlYCwgYGRldmAsIGBubGlua2AsIGFuZCBgaW5vYC4gIElmIHRoYXRcbiAgICAgKiBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCwgeW91IHdpbGwgbmVlZCB0byBjYWxsIGBmcy5sc3RhdGAgeW91cnNlbGYuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgUGF0aCByZWZlcnMgdG8gYSBub25leGlzdGVudCBmaWxlLCBvciBpZiB0aGUgbHN0YXQgY2FsbCBmYWlscyBmb3JcbiAgICAgKiBhbnkgcmVhc29uLCBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSB0aGUgdXBkYXRlZCBQYXRoIG9iamVjdCBpc1xuICAgICAqIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIGxzdGF0KCkge1xuICAgICAgICBpZiAoKHRoaXMuI3R5cGUgJiBFTk9FTlQpID09PSAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2FwcGx5U3RhdChhd2FpdCB0aGlzLiNmcy5wcm9taXNlcy5sc3RhdCh0aGlzLmZ1bGxwYXRoKCkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuI2xzdGF0RmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBzeW5jaHJvbm91cyB7QGxpbmsgUGF0aEJhc2UubHN0YXR9XG4gICAgICovXG4gICAgbHN0YXRTeW5jKCkge1xuICAgICAgICBpZiAoKHRoaXMuI3R5cGUgJiBFTk9FTlQpID09PSAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2FwcGx5U3RhdCh0aGlzLiNmcy5sc3RhdFN5bmModGhpcy5mdWxscGF0aCgpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNsc3RhdEZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2FwcGx5U3RhdChzdCkge1xuICAgICAgICBjb25zdCB7IGF0aW1lLCBhdGltZU1zLCBiaXJ0aHRpbWUsIGJpcnRodGltZU1zLCBibGtzaXplLCBibG9ja3MsIGN0aW1lLCBjdGltZU1zLCBkZXYsIGdpZCwgaW5vLCBtb2RlLCBtdGltZSwgbXRpbWVNcywgbmxpbmssIHJkZXYsIHNpemUsIHVpZCwgfSA9IHN0O1xuICAgICAgICB0aGlzLiNhdGltZSA9IGF0aW1lO1xuICAgICAgICB0aGlzLiNhdGltZU1zID0gYXRpbWVNcztcbiAgICAgICAgdGhpcy4jYmlydGh0aW1lID0gYmlydGh0aW1lO1xuICAgICAgICB0aGlzLiNiaXJ0aHRpbWVNcyA9IGJpcnRodGltZU1zO1xuICAgICAgICB0aGlzLiNibGtzaXplID0gYmxrc2l6ZTtcbiAgICAgICAgdGhpcy4jYmxvY2tzID0gYmxvY2tzO1xuICAgICAgICB0aGlzLiNjdGltZSA9IGN0aW1lO1xuICAgICAgICB0aGlzLiNjdGltZU1zID0gY3RpbWVNcztcbiAgICAgICAgdGhpcy4jZGV2ID0gZGV2O1xuICAgICAgICB0aGlzLiNnaWQgPSBnaWQ7XG4gICAgICAgIHRoaXMuI2lubyA9IGlubztcbiAgICAgICAgdGhpcy4jbW9kZSA9IG1vZGU7XG4gICAgICAgIHRoaXMuI210aW1lID0gbXRpbWU7XG4gICAgICAgIHRoaXMuI210aW1lTXMgPSBtdGltZU1zO1xuICAgICAgICB0aGlzLiNubGluayA9IG5saW5rO1xuICAgICAgICB0aGlzLiNyZGV2ID0gcmRldjtcbiAgICAgICAgdGhpcy4jc2l6ZSA9IHNpemU7XG4gICAgICAgIHRoaXMuI3VpZCA9IHVpZDtcbiAgICAgICAgY29uc3QgaWZtdCA9IGVudFRvVHlwZShzdCk7XG4gICAgICAgIC8vIHJldGFpbiBhbnkgb3RoZXIgZmxhZ3MsIGJ1dCBzZXQgdGhlIGlmbXRcbiAgICAgICAgdGhpcy4jdHlwZSA9ICh0aGlzLiN0eXBlICYgSUZNVF9VTktOT1dOKSB8IGlmbXQgfCBMU1RBVF9DQUxMRUQ7XG4gICAgICAgIGlmIChpZm10ICE9PSBVTktOT1dOICYmIGlmbXQgIT09IElGRElSICYmIGlmbXQgIT09IElGTE5LKSB7XG4gICAgICAgICAgICB0aGlzLiN0eXBlIHw9IEVOT1RESVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgI29uUmVhZGRpckNCID0gW107XG4gICAgI3JlYWRkaXJDQkluRmxpZ2h0ID0gZmFsc2U7XG4gICAgI2NhbGxPblJlYWRkaXJDQihjaGlsZHJlbikge1xuICAgICAgICB0aGlzLiNyZWFkZGlyQ0JJbkZsaWdodCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjYnMgPSB0aGlzLiNvblJlYWRkaXJDQi5zbGljZSgpO1xuICAgICAgICB0aGlzLiNvblJlYWRkaXJDQi5sZW5ndGggPSAwO1xuICAgICAgICBjYnMuZm9yRWFjaChjYiA9PiBjYihudWxsLCBjaGlsZHJlbikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBub2RlLXN0eWxlIGNhbGxiYWNrIGludGVyZmFjZSB0byBnZXQgbGlzdCBvZiBkaXJlY3RvcnkgZW50cmllcy5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIGNhbm5vdCBvciBkb2VzIG5vdCBjb250YWluIGFueSBjaGlsZHJlbiwgdGhlbiBhbiBlbXB0eSBhcnJheVxuICAgICAqIGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogUmVzdWx0cyBhcmUgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0IG9mIGRhdGUgaWYgdGhlIGZpbGVzeXN0ZW0gaXNcbiAgICAgKiBtdXRhdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNiIFRoZSBjYWxsYmFjayBjYWxsZWQgd2l0aCAoZXIsIGVudHJpZXMpLiAgTm90ZSB0aGF0IHRoZSBgZXJgXG4gICAgICogcGFyYW0gaXMgc29tZXdoYXQgZXh0cmFuZW91cywgYXMgYWxsIHJlYWRkaXIoKSBlcnJvcnMgYXJlIGhhbmRsZWQgYW5kXG4gICAgICogc2ltcGx5IHJlc3VsdCBpbiBhbiBlbXB0eSBzZXQgb2YgZW50cmllcyBiZWluZyByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0gYWxsb3daYWxnbyBCb29sZWFuIGluZGljYXRpbmcgdGhhdCBpbW1lZGlhdGVseSBrbm93biByZXN1bHRzIHNob3VsZFxuICAgICAqICpub3QqIGJlIGRlZmVycmVkIHdpdGggYHF1ZXVlTWljcm90YXNrYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gUmVsZWFzZVxuICAgICAqIHphbGdvIGF0IHlvdXIgcGVyaWwsIHRoZSBkYXJrIHBvbnkgbG9yZCBpcyBkZXZpb3VzIGFuZCB1bmZvcmdpdmluZy5cbiAgICAgKi9cbiAgICByZWFkZGlyQ0IoY2IsIGFsbG93WmFsZ28gPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICBpZiAoYWxsb3daYWxnbylcbiAgICAgICAgICAgICAgICBjYihudWxsLCBbXSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2IobnVsbCwgW10pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKHRoaXMuY2FsbGVkUmVhZGRpcigpKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgICAgICAgICAgaWYgKGFsbG93WmFsZ28pXG4gICAgICAgICAgICAgICAgY2IobnVsbCwgYyk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2IobnVsbCwgYykpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgemFsZ28gYXQgdGhpcyBwb2ludC5cbiAgICAgICAgdGhpcy4jb25SZWFkZGlyQ0IucHVzaChjYik7XG4gICAgICAgIGlmICh0aGlzLiNyZWFkZGlyQ0JJbkZsaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3JlYWRkaXJDQkluRmxpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgLy8gZWxzZSByZWFkIHRoZSBkaXJlY3RvcnksIGZpbGwgdXAgY2hpbGRyZW5cbiAgICAgICAgLy8gZGUtcHJvdmlzaW9uYWxpemUgYW55IHByb3Zpc2lvbmFsIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRoaXMuZnVsbHBhdGgoKTtcbiAgICAgICAgdGhpcy4jZnMucmVhZGRpcihmdWxscGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0sIChlciwgZW50cmllcykgPT4ge1xuICAgICAgICAgICAgaWYgKGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jcmVhZGRpckZhaWwoZXIuY29kZSk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvdmlzaW9uYWwgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhbiBlcnJvciwgd2UgYWx3YXlzIGdldCBlbnRyaWVzLlxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGRDaGlsZChlLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJTdWNjZXNzKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2NhbGxPblJlYWRkaXJDQihjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgI2FzeW5jUmVhZGRpckluRmxpZ2h0O1xuICAgIC8qKlxuICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBrbm93biBjaGlsZCBlbnRyaWVzLlxuICAgICAqXG4gICAgICogSWYgdGhlIFBhdGggY2Fubm90IG9yIGRvZXMgbm90IGNvbnRhaW4gYW55IGNoaWxkcmVuLCB0aGVuIGFuIGVtcHR5IGFycmF5XG4gICAgICogaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgcmVhZGRpcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBpZiAodGhpcy5jYWxsZWRSZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSByZWFkIHRoZSBkaXJlY3RvcnksIGZpbGwgdXAgY2hpbGRyZW5cbiAgICAgICAgLy8gZGUtcHJvdmlzaW9uYWxpemUgYW55IHByb3Zpc2lvbmFsIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRoaXMuZnVsbHBhdGgoKTtcbiAgICAgICAgaWYgKHRoaXMuI2FzeW5jUmVhZGRpckluRmxpZ2h0KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgbGV0IHJlc29sdmUgPSAoKSA9PiB7IH07XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgdGhpcy4jYXN5bmNSZWFkZGlySW5GbGlnaHQgPSBuZXcgUHJvbWlzZShyZXMgPT4gKHJlc29sdmUgPSByZXMpKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGF3YWl0IHRoaXMuI2ZzLnByb21pc2VzLnJlYWRkaXIoZnVsbHBhdGgsIHtcbiAgICAgICAgICAgICAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyQWRkQ2hpbGQoZSwgY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNyZWFkZGlyRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm92aXNpb25hbCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNhc3luY1JlYWRkaXJJbkZsaWdodCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBzeW5jaHJvbm91cyB7QGxpbmsgUGF0aEJhc2UucmVhZGRpcn1cbiAgICAgKi9cbiAgICByZWFkZGlyU3luYygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhblJlYWRkaXIoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbigpO1xuICAgICAgICBpZiAodGhpcy5jYWxsZWRSZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbi5zbGljZSgwLCBjaGlsZHJlbi5wcm92aXNpb25hbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSByZWFkIHRoZSBkaXJlY3RvcnksIGZpbGwgdXAgY2hpbGRyZW5cbiAgICAgICAgLy8gZGUtcHJvdmlzaW9uYWxpemUgYW55IHByb3Zpc2lvbmFsIGNoaWxkcmVuLlxuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHRoaXMuZnVsbHBhdGgoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLiNmcy5yZWFkZGlyU3luYyhmdWxscGF0aCwge1xuICAgICAgICAgICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI3JlYWRkaXJBZGRDaGlsZChlLCBjaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNyZWFkZGlyU3VjY2VzcyhjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICB0aGlzLiNyZWFkZGlyRmFpbChlci5jb2RlKTtcbiAgICAgICAgICAgIGNoaWxkcmVuLnByb3Zpc2lvbmFsID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ucHJvdmlzaW9uYWwpO1xuICAgIH1cbiAgICBjYW5SZWFkZGlyKCkge1xuICAgICAgICBpZiAodGhpcy4jdHlwZSAmIEVOT0NISUxEKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCBpZm10ID0gSUZNVCAmIHRoaXMuI3R5cGU7XG4gICAgICAgIC8vIHdlIGFsd2F5cyBzZXQgRU5PVERJUiB3aGVuIHNldHRpbmcgSUZNVCwgc28gc2hvdWxkIGJlIGltcG9zc2libGVcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICghKGlmbXQgPT09IFVOS05PV04gfHwgaWZtdCA9PT0gSUZESVIgfHwgaWZtdCA9PT0gSUZMTkspKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikge1xuICAgICAgICByZXR1cm4gKCh0aGlzLiN0eXBlICYgSUZESVIpID09PSBJRkRJUiAmJlxuICAgICAgICAgICAgISh0aGlzLiN0eXBlICYgRU5PQ0hJTEQpICYmXG4gICAgICAgICAgICAhZGlycy5oYXModGhpcykgJiZcbiAgICAgICAgICAgICghd2Fsa0ZpbHRlciB8fCB3YWxrRmlsdGVyKHRoaXMpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGF0aCBvYmplY3QgY29ycmVzcG9uZGluZyB0byBwYXRoIGFzIHJlc29sdmVkXG4gICAgICogYnkgcmVhbHBhdGgoMykuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgcmVhbHBhdGggY2FsbCBmYWlscyBmb3IgYW55IHJlYXNvbiwgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHQgaXMgY2FjaGVkLCBhbmQgdGh1cyBtYXkgYmUgb3V0ZGF0ZWQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgbXV0YXRlZC5cbiAgICAgKiBPbiBzdWNjZXNzLCByZXR1cm5zIGEgUGF0aCBvYmplY3QuXG4gICAgICovXG4gICAgYXN5bmMgcmVhbHBhdGgoKSB7XG4gICAgICAgIGlmICh0aGlzLiNyZWFscGF0aClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNyZWFscGF0aDtcbiAgICAgICAgaWYgKChFTk9SRUFMUEFUSCB8IEVOT1JFQURMSU5LIHwgRU5PRU5UKSAmIHRoaXMuI3R5cGUpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSBhd2FpdCB0aGlzLiNmcy5wcm9taXNlcy5yZWFscGF0aCh0aGlzLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiNyZWFscGF0aCA9IHRoaXMucmVzb2x2ZShycCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfKSB7XG4gICAgICAgICAgICB0aGlzLiNtYXJrRU5PUkVBTFBBVEgoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTeW5jaHJvbm91cyB7QGxpbmsgcmVhbHBhdGh9XG4gICAgICovXG4gICAgcmVhbHBhdGhTeW5jKCkge1xuICAgICAgICBpZiAodGhpcy4jcmVhbHBhdGgpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jcmVhbHBhdGg7XG4gICAgICAgIGlmICgoRU5PUkVBTFBBVEggfCBFTk9SRUFETElOSyB8IEVOT0VOVCkgJiB0aGlzLiN0eXBlKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJwID0gdGhpcy4jZnMucmVhbHBhdGhTeW5jKHRoaXMuZnVsbHBhdGgoKSk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3JlYWxwYXRoID0gdGhpcy5yZXNvbHZlKHJwKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIHRoaXMuI21hcmtFTk9SRUFMUEFUSCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEludGVybmFsIG1ldGhvZCB0byBtYXJrIHRoaXMgUGF0aCBvYmplY3QgYXMgdGhlIHNjdXJyeSBjd2QsXG4gICAgICogY2FsbGVkIGJ5IHtAbGluayBQYXRoU2N1cnJ5I2NoZGlyfVxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgW3NldEFzQ3dkXShvbGRDd2QpIHtcbiAgICAgICAgaWYgKG9sZEN3ZCA9PT0gdGhpcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb2xkQ3dkLmlzQ1dEID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNDV0QgPSB0cnVlO1xuICAgICAgICBjb25zdCBjaGFuZ2VkID0gbmV3IFNldChbXSk7XG4gICAgICAgIGxldCBycCA9IFtdO1xuICAgICAgICBsZXQgcCA9IHRoaXM7XG4gICAgICAgIHdoaWxlIChwICYmIHAucGFyZW50KSB7XG4gICAgICAgICAgICBjaGFuZ2VkLmFkZChwKTtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlID0gcnAuam9pbih0aGlzLnNlcCk7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZVBvc2l4ID0gcnAuam9pbignLycpO1xuICAgICAgICAgICAgcCA9IHAucGFyZW50O1xuICAgICAgICAgICAgcnAucHVzaCgnLi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgdW4tbWVtb2l6ZSBwYXJlbnRzIG9mIG9sZCBjd2RcbiAgICAgICAgcCA9IG9sZEN3ZDtcbiAgICAgICAgd2hpbGUgKHAgJiYgcC5wYXJlbnQgJiYgIWNoYW5nZWQuaGFzKHApKSB7XG4gICAgICAgICAgICBwLiNyZWxhdGl2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHAuI3JlbGF0aXZlUG9zaXggPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBwID0gcC5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFBhdGggY2xhc3MgdXNlZCBvbiB3aW4zMiBzeXN0ZW1zXG4gKlxuICogVXNlcyBgJ1xcXFwnYCBhcyB0aGUgcGF0aCBzZXBhcmF0b3IgZm9yIHJldHVybmVkIHBhdGhzLCBlaXRoZXIgYCdcXFxcJ2Agb3IgYCcvJ2BcbiAqIGFzIHRoZSBwYXRoIHNlcGFyYXRvciBmb3IgcGFyc2luZyBwYXRocy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhXaW4zMiBleHRlbmRzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgZm9yIGdlbmVyYXRpbmcgcGF0aCBzdHJpbmdzLlxuICAgICAqL1xuICAgIHNlcCA9ICdcXFxcJztcbiAgICAvKipcbiAgICAgKiBTZXBhcmF0b3IgZm9yIHBhcnNpbmcgcGF0aCBzdHJpbmdzLlxuICAgICAqL1xuICAgIHNwbGl0U2VwID0gZWl0aGVyU2VwO1xuICAgIC8qKlxuICAgICAqIERvIG5vdCBjcmVhdGUgbmV3IFBhdGggb2JqZWN0cyBkaXJlY3RseS4gIFRoZXkgc2hvdWxkIGFsd2F5cyBiZSBhY2Nlc3NlZFxuICAgICAqIHZpYSB0aGUgUGF0aFNjdXJyeSBjbGFzcyBvciBvdGhlciBtZXRob2RzIG9uIHRoZSBQYXRoIGNsYXNzLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSwgdHlwZSA9IFVOS05PV04sIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHR5cGUsIHJvb3QsIHJvb3RzLCBub2Nhc2UsIGNoaWxkcmVuLCBvcHRzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Q2hpbGQobmFtZSwgdHlwZSA9IFVOS05PV04sIG9wdHMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhXaW4zMihuYW1lLCB0eXBlLCB0aGlzLnJvb3QsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgb3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3RTdHJpbmcocGF0aCkge1xuICAgICAgICByZXR1cm4gd2luMzIucGFyc2UocGF0aCkucm9vdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdChyb290UGF0aCkge1xuICAgICAgICByb290UGF0aCA9IHVuY1RvRHJpdmUocm9vdFBhdGgudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGlmIChyb290UGF0aCA9PT0gdGhpcy5yb290Lm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2ssIG5vdCB0aGF0IG9uZSwgY2hlY2sgaWYgaXQgbWF0Y2hlcyBhbm90aGVyIHdlIGtub3cgYWJvdXRcbiAgICAgICAgZm9yIChjb25zdCBbY29tcGFyZSwgcm9vdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yb290cykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNhbWVSb290KHJvb3RQYXRoLCBjb21wYXJlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5yb290c1tyb290UGF0aF0gPSByb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UsIGhhdmUgdG8gY3JlYXRlIGEgbmV3IG9uZS5cbiAgICAgICAgcmV0dXJuICh0aGlzLnJvb3RzW3Jvb3RQYXRoXSA9IG5ldyBQYXRoU2N1cnJ5V2luMzIocm9vdFBhdGgsIHRoaXMpLnJvb3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzYW1lUm9vdChyb290UGF0aCwgY29tcGFyZSA9IHRoaXMucm9vdC5uYW1lKSB7XG4gICAgICAgIC8vIHdpbmRvd3MgY2FuIChyYXJlbHkpIGhhdmUgY2FzZS1zZW5zaXRpdmUgZmlsZXN5c3RlbSwgYnV0XG4gICAgICAgIC8vIFVOQyBhbmQgZHJpdmUgbGV0dGVycyBhcmUgYWx3YXlzIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBjYW5vbmljYWxseVxuICAgICAgICAvLyByZXByZXNlbnRlZCB1cHBlcmNhc2UuXG4gICAgICAgIHJvb3RQYXRoID0gcm9vdFBhdGhcbiAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICdcXFxcJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHVuY0RyaXZlUmVnZXhwLCAnJDFcXFxcJyk7XG4gICAgICAgIHJldHVybiByb290UGF0aCA9PT0gY29tcGFyZTtcbiAgICB9XG59XG4vKipcbiAqIFBhdGggY2xhc3MgdXNlZCBvbiBhbGwgcG9zaXggc3lzdGVtcy5cbiAqXG4gKiBVc2VzIGAnLydgIGFzIHRoZSBwYXRoIHNlcGFyYXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhQb3NpeCBleHRlbmRzIFBhdGhCYXNlIHtcbiAgICAvKipcbiAgICAgKiBzZXBhcmF0b3IgZm9yIHBhcnNpbmcgcGF0aCBzdHJpbmdzXG4gICAgICovXG4gICAgc3BsaXRTZXAgPSAnLyc7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNlcCA9ICcvJztcbiAgICAvKipcbiAgICAgKiBEbyBub3QgY3JlYXRlIG5ldyBQYXRoIG9iamVjdHMgZGlyZWN0bHkuICBUaGV5IHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWRcbiAgICAgKiB2aWEgdGhlIFBhdGhTY3VycnkgY2xhc3Mgb3Igb3RoZXIgbWV0aG9kcyBvbiB0aGUgUGF0aCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHR5cGUgPSBVTktOT1dOLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cykge1xuICAgICAgICBzdXBlcihuYW1lLCB0eXBlLCByb290LCByb290cywgbm9jYXNlLCBjaGlsZHJlbiwgb3B0cyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFJvb3RTdHJpbmcocGF0aCkge1xuICAgICAgICByZXR1cm4gcGF0aC5zdGFydHNXaXRoKCcvJykgPyAnLycgOiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0Um9vdChfcm9vdFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgbmV3Q2hpbGQobmFtZSwgdHlwZSA9IFVOS05PV04sIG9wdHMgPSB7fSkge1xuICAgICAgICByZXR1cm4gbmV3IFBhdGhQb3NpeChuYW1lLCB0eXBlLCB0aGlzLnJvb3QsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgb3B0cyk7XG4gICAgfVxufVxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIFBhdGhTY3VycnkgY2xhc3NlcywgcHJvdmlkaW5nIHRoZSBpbnRlcmZhY2UgZm9yIHBhdGhcbiAqIHJlc29sdXRpb24gYW5kIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy5cbiAqXG4gKiBUeXBpY2FsbHksIHlvdSBzaG91bGQgKm5vdCogaW5zdGFudGlhdGUgdGhpcyBjbGFzcyBkaXJlY3RseSwgYnV0IHJhdGhlciBvbmVcbiAqIG9mIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBjbGFzc2VzLCBvciB0aGUgZXhwb3J0ZWQge0BsaW5rIFBhdGhTY3Vycnl9IHdoaWNoXG4gKiBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdGhTY3VycnlCYXNlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgcm9vdCBQYXRoIGVudHJ5IGZvciB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGlzIFNjdXJyeVxuICAgICAqL1xuICAgIHJvb3Q7XG4gICAgLyoqXG4gICAgICogVGhlIHN0cmluZyBwYXRoIGZvciB0aGUgcm9vdCBvZiB0aGlzIFNjdXJyeSdzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnlcbiAgICAgKi9cbiAgICByb290UGF0aDtcbiAgICAvKipcbiAgICAgKiBBIGNvbGxlY3Rpb24gb2YgYWxsIHJvb3RzIGVuY291bnRlcmVkLCByZWZlcmVuY2VkIGJ5IHJvb3RQYXRoXG4gICAgICovXG4gICAgcm9vdHM7XG4gICAgLyoqXG4gICAgICogVGhlIFBhdGggZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGlzIFBhdGhTY3VycnkncyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgICAqL1xuICAgIGN3ZDtcbiAgICAjcmVzb2x2ZUNhY2hlO1xuICAgICNyZXNvbHZlUG9zaXhDYWNoZTtcbiAgICAjY2hpbGRyZW47XG4gICAgLyoqXG4gICAgICogUGVyZm9ybSBwYXRoIGNvbXBhcmlzb25zIGNhc2UtaW5zZW5zaXRpdmVseS5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRydWUgb24gRGFyd2luIGFuZCBXaW5kb3dzIHN5c3RlbXMsIGZhbHNlIGVsc2V3aGVyZS5cbiAgICAgKi9cbiAgICBub2Nhc2U7XG4gICAgI2ZzO1xuICAgIC8qKlxuICAgICAqIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuXG4gICAgICpcbiAgICAgKiBVc2UgUGF0aFNjdXJyeVdpbjMyLCBQYXRoU2N1cnJ5RGFyd2luLCBQYXRoU2N1cnJ5UG9zaXgsIG9yIFBhdGhTY3VycnlcbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGN3ZCA9IHByb2Nlc3MuY3dkKCksIHBhdGhJbXBsLCBzZXAsIHsgbm9jYXNlLCBjaGlsZHJlbkNhY2hlU2l6ZSA9IDE2ICogMTAyNCwgZnMgPSBkZWZhdWx0RlMsIH0gPSB7fSkge1xuICAgICAgICB0aGlzLiNmcyA9IGZzRnJvbU9wdGlvbihmcyk7XG4gICAgICAgIGlmIChjd2QgaW5zdGFuY2VvZiBVUkwgfHwgY3dkLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICAgICAgY3dkID0gZmlsZVVSTFRvUGF0aChjd2QpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlc29sdmUgYW5kIHNwbGl0IHJvb3QsIGFuZCB0aGVuIGFkZCB0byB0aGUgc3RvcmUuXG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIG9ubHkgdGltZSB3ZSBjYWxsIHBhdGgucmVzb2x2ZSgpXG4gICAgICAgIGNvbnN0IGN3ZFBhdGggPSBwYXRoSW1wbC5yZXNvbHZlKGN3ZCk7XG4gICAgICAgIHRoaXMucm9vdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLnJvb3RQYXRoID0gdGhpcy5wYXJzZVJvb3RQYXRoKGN3ZFBhdGgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlQ2FjaGUgPSBuZXcgUmVzb2x2ZUNhY2hlKCk7XG4gICAgICAgIHRoaXMuI3Jlc29sdmVQb3NpeENhY2hlID0gbmV3IFJlc29sdmVDYWNoZSgpO1xuICAgICAgICB0aGlzLiNjaGlsZHJlbiA9IG5ldyBDaGlsZHJlbkNhY2hlKGNoaWxkcmVuQ2FjaGVTaXplKTtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBjd2RQYXRoLnN1YnN0cmluZyh0aGlzLnJvb3RQYXRoLmxlbmd0aCkuc3BsaXQoc2VwKTtcbiAgICAgICAgLy8gcmVzb2x2ZSgnLycpIGxlYXZlcyAnJywgc3BsaXRzIHRvIFsnJ10sIHdlIGRvbid0IHdhbnQgdGhhdC5cbiAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA9PT0gMSAmJiAhc3BsaXRbMF0pIHtcbiAgICAgICAgICAgIHNwbGl0LnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAobm9jYXNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3QgcHJvdmlkZSBub2Nhc2Ugc2V0dGluZyB0byBQYXRoU2N1cnJ5QmFzZSBjdG9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgICAgIHRoaXMucm9vdCA9IHRoaXMubmV3Um9vdCh0aGlzLiNmcyk7XG4gICAgICAgIHRoaXMucm9vdHNbdGhpcy5yb290UGF0aF0gPSB0aGlzLnJvb3Q7XG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5yb290O1xuICAgICAgICBsZXQgbGVuID0gc3BsaXQubGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3Qgam9pblNlcCA9IHBhdGhJbXBsLnNlcDtcbiAgICAgICAgbGV0IGFicyA9IHRoaXMucm9vdFBhdGg7XG4gICAgICAgIGxldCBzYXdGaXJzdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygc3BsaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGwgPSBsZW4tLTtcbiAgICAgICAgICAgIHByZXYgPSBwcmV2LmNoaWxkKHBhcnQsIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZTogbmV3IEFycmF5KGwpLmZpbGwoJy4uJykuam9pbihqb2luU2VwKSxcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBvc2l4OiBuZXcgQXJyYXkobCkuZmlsbCgnLi4nKS5qb2luKCcvJyksXG4gICAgICAgICAgICAgICAgZnVsbHBhdGg6IChhYnMgKz0gKHNhd0ZpcnN0ID8gJycgOiBqb2luU2VwKSArIHBhcnQpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzYXdGaXJzdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jd2QgPSBwcmV2O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGRlcHRoIG9mIGEgcHJvdmlkZWQgcGF0aCwgc3RyaW5nLCBvciB0aGUgY3dkXG4gICAgICovXG4gICAgZGVwdGgocGF0aCA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhdGggPSB0aGlzLmN3ZC5yZXNvbHZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoLmRlcHRoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgY2FjaGUgb2YgY2hpbGQgZW50cmllcy4gIEV4cG9zZWQgc28gc3ViY2xhc3NlcyBjYW4gY3JlYXRlXG4gICAgICogY2hpbGQgUGF0aCBvYmplY3RzIGluIGEgcGxhdGZvcm0tc3BlY2lmaWMgd2F5LlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgY2hpbGRyZW5DYWNoZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NoaWxkcmVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIG9uZSBvciBtb3JlIHBhdGggc3RyaW5ncyB0byBhIHJlc29sdmVkIHN0cmluZ1xuICAgICAqXG4gICAgICogU2FtZSBpbnRlcmZhY2UgYXMgcmVxdWlyZSgncGF0aCcpLnJlc29sdmUuXG4gICAgICpcbiAgICAgKiBNdWNoIGZhc3RlciB0aGFuIHBhdGgucmVzb2x2ZSgpIHdoZW4gY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZVxuICAgICAqIHBhdGgsIGJlY2F1c2UgdGhlIHJlc29sdmVkIFBhdGggb2JqZWN0cyBhcmUgY2FjaGVkLiAgTXVjaCBzbG93ZXJcbiAgICAgKiBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcmVzb2x2ZSguLi5wYXRocykge1xuICAgICAgICAvLyBmaXJzdCBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXRocyB3ZSBoYXZlIHRvIHRlc3RcbiAgICAgICAgLy8gd2UgYWx3YXlzIHN0YXJ0IGF0IGN3ZCwgYnV0IGFueSBhYnNvbHV0ZXMgd2lsbCBidW1wIHRoZSBzdGFydFxuICAgICAgICBsZXQgciA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICghcCB8fCBwID09PSAnLicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByID0gciA/IGAke3B9LyR7cn1gIDogcDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNyZXNvbHZlQ2FjaGUuZ2V0KHIpO1xuICAgICAgICBpZiAoY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jd2QucmVzb2x2ZShyKS5mdWxscGF0aCgpO1xuICAgICAgICB0aGlzLiNyZXNvbHZlQ2FjaGUuc2V0KHIsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgb25lIG9yIG1vcmUgcGF0aCBzdHJpbmdzIHRvIGEgcmVzb2x2ZWQgc3RyaW5nLCByZXR1cm5pbmdcbiAgICAgKiB0aGUgcG9zaXggcGF0aC4gIElkZW50aWNhbCB0byAucmVzb2x2ZSgpIG9uIHBvc2l4IHN5c3RlbXMsIGJ1dCBvblxuICAgICAqIHdpbmRvd3Mgd2lsbCByZXR1cm4gYSBmb3J3YXJkLXNsYXNoIHNlcGFyYXRlZCBVTkMgcGF0aC5cbiAgICAgKlxuICAgICAqIFNhbWUgaW50ZXJmYWNlIGFzIHJlcXVpcmUoJ3BhdGgnKS5yZXNvbHZlLlxuICAgICAqXG4gICAgICogTXVjaCBmYXN0ZXIgdGhhbiBwYXRoLnJlc29sdmUoKSB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWVcbiAgICAgKiBwYXRoLCBiZWNhdXNlIHRoZSByZXNvbHZlZCBQYXRoIG9iamVjdHMgYXJlIGNhY2hlZC4gIE11Y2ggc2xvd2VyXG4gICAgICogb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHJlc29sdmVQb3NpeCguLi5wYXRocykge1xuICAgICAgICAvLyBmaXJzdCBmaWd1cmUgb3V0IHRoZSBtaW5pbXVtIG51bWJlciBvZiBwYXRocyB3ZSBoYXZlIHRvIHRlc3RcbiAgICAgICAgLy8gd2UgYWx3YXlzIHN0YXJ0IGF0IGN3ZCwgYnV0IGFueSBhYnNvbHV0ZXMgd2lsbCBidW1wIHRoZSBzdGFydFxuICAgICAgICBsZXQgciA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICghcCB8fCBwID09PSAnLicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICByID0gciA/IGAke3B9LyR7cn1gIDogcDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWJzb2x1dGUocCkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLiNyZXNvbHZlUG9zaXhDYWNoZS5nZXQocik7XG4gICAgICAgIGlmIChjYWNoZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmN3ZC5yZXNvbHZlKHIpLmZ1bGxwYXRoUG9zaXgoKTtcbiAgICAgICAgdGhpcy4jcmVzb2x2ZVBvc2l4Q2FjaGUuc2V0KHIsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpbmQgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkIHRvIHRoZSBzdXBwbGllZCBwYXRoIHN0cmluZyBvciBlbnRyeVxuICAgICAqL1xuICAgIHJlbGF0aXZlKGVudHJ5ID0gdGhpcy5jd2QpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJ5LnJlbGF0aXZlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIGZpbmQgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3dkIHRvIHRoZSBzdXBwbGllZCBwYXRoIHN0cmluZyBvclxuICAgICAqIGVudHJ5LCB1c2luZyAvIGFzIHRoZSBwYXRoIGRlbGltaXRlciwgZXZlbiBvbiBXaW5kb3dzLlxuICAgICAqL1xuICAgIHJlbGF0aXZlUG9zaXgoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkucmVsYXRpdmVQb3NpeCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGJhc2VuYW1lIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIG9yIFBhdGggb2JqZWN0XG4gICAgICovXG4gICAgYmFzZW5hbWUoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubmFtZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBkaXJuYW1lIGZvciB0aGUgcHJvdmlkZWQgc3RyaW5nIG9yIFBhdGggb2JqZWN0XG4gICAgICovXG4gICAgZGlybmFtZShlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoZW50cnkucGFyZW50IHx8IGVudHJ5KS5mdWxscGF0aCgpO1xuICAgIH1cbiAgICBhc3luYyByZWFkZGlyKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgfSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFlbnRyeS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBhd2FpdCBlbnRyeS5yZWFkZGlyKCk7XG4gICAgICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IHAgOiBwLm1hcChlID0+IGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVhZGRpclN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHtcbiAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICB9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgaWYgKCFlbnRyeS5jYW5SZWFkZGlyKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh3aXRoRmlsZVR5cGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkucmVhZGRpclN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeS5yZWFkZGlyU3luYygpLm1hcChlID0+IGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCBsc3RhdCgpIG9uIHRoZSBzdHJpbmcgb3IgUGF0aCBvYmplY3QsIGFuZCB1cGRhdGUgYWxsIGtub3duXG4gICAgICogaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgZGV0ZXJtaW5lZC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCB1bmxpa2UgYGZzLmxzdGF0KClgLCB0aGUgcmV0dXJuZWQgdmFsdWUgZG9lcyBub3QgY29udGFpbiBzb21lXG4gICAgICogaW5mb3JtYXRpb24sIHN1Y2ggYXMgYG1vZGVgLCBgZGV2YCwgYG5saW5rYCwgYW5kIGBpbm9gLiAgSWYgdGhhdFxuICAgICAqIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLCB5b3Ugd2lsbCBuZWVkIHRvIGNhbGwgYGZzLmxzdGF0YCB5b3Vyc2VsZi5cbiAgICAgKlxuICAgICAqIElmIHRoZSBQYXRoIHJlZmVycyB0byBhIG5vbmV4aXN0ZW50IGZpbGUsIG9yIGlmIHRoZSBsc3RhdCBjYWxsIGZhaWxzIGZvclxuICAgICAqIGFueSByZWFzb24sIGB1bmRlZmluZWRgIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRoZSB1cGRhdGVkIFBhdGggb2JqZWN0IGlzXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBSZXN1bHRzIGFyZSBjYWNoZWQsIGFuZCB0aHVzIG1heSBiZSBvdXQgb2YgZGF0ZSBpZiB0aGUgZmlsZXN5c3RlbSBpc1xuICAgICAqIG11dGF0ZWQuXG4gICAgICovXG4gICAgYXN5bmMgbHN0YXQoZW50cnkgPSB0aGlzLmN3ZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkubHN0YXQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogc3luY2hyb25vdXMge0BsaW5rIFBhdGhTY3VycnlCYXNlLmxzdGF0fVxuICAgICAqL1xuICAgIGxzdGF0U3luYyhlbnRyeSA9IHRoaXMuY3dkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyeS5sc3RhdFN5bmMoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhZGxpbmsoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCBlbnRyeS5yZWFkbGluaygpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICByZWFkbGlua1N5bmMoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBlbnRyeS5yZWFkbGlua1N5bmMoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgcmVhbHBhdGgoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCBlbnRyeS5yZWFscGF0aCgpO1xuICAgICAgICByZXR1cm4gd2l0aEZpbGVUeXBlcyA/IGUgOiBlPy5mdWxscGF0aCgpO1xuICAgIH1cbiAgICByZWFscGF0aFN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgeyB3aXRoRmlsZVR5cGVzIH0gPSB7XG4gICAgICAgIHdpdGhGaWxlVHlwZXM6IGZhbHNlLFxuICAgIH0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgd2l0aEZpbGVUeXBlcyA9IGVudHJ5LndpdGhGaWxlVHlwZXM7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGUgPSBlbnRyeS5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgcmV0dXJuIHdpdGhGaWxlVHlwZXMgPyBlIDogZT8uZnVsbHBhdGgoKTtcbiAgICB9XG4gICAgYXN5bmMgd2FsayhlbnRyeSA9IHRoaXMuY3dkLCBvcHRzID0ge30pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2QucmVzb2x2ZShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIFBhdGhCYXNlKSkge1xuICAgICAgICAgICAgb3B0cyA9IGVudHJ5O1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpdGhGaWxlVHlwZXMgPSB0cnVlLCBmb2xsb3cgPSBmYWxzZSwgZmlsdGVyLCB3YWxrRmlsdGVyLCB9ID0gb3B0cztcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGVudHJ5IDogZW50cnkuZnVsbHBhdGgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgY29uc3Qgd2FsayA9IChkaXIsIGNiKSA9PiB7XG4gICAgICAgICAgICBkaXJzLmFkZChkaXIpO1xuICAgICAgICAgICAgZGlyLnJlYWRkaXJDQigoZXIsIGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgICAgICBpZiAoZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICBsZXQgbGVuID0gZW50cmllcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKCFsZW4pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgtLWxlbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2god2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2xsb3cgJiYgZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnJlYWxwYXRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyID0+IChyPy5pc1Vua25vd24oKSA/IHIubHN0YXQoKSA6IHIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHIgPT4gcj8uc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSA/IHdhbGsociwgbmV4dCkgOiBuZXh0KCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGsoZSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0cnVlKTsgLy8gemFsZ29vb29vb29cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBlbnRyeTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXMsIHJlaikgPT4ge1xuICAgICAgICAgICAgd2FsayhzdGFydCwgZXIgPT4ge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlaihlcik7XG4gICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICByZXMocmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdhbGtTeW5jKGVudHJ5ID0gdGhpcy5jd2QsIG9wdHMgPSB7fSkge1xuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRzID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2l0aEZpbGVUeXBlcyA9IHRydWUsIGZvbGxvdyA9IGZhbHNlLCBmaWx0ZXIsIHdhbGtGaWx0ZXIsIH0gPSBvcHRzO1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh3aXRoRmlsZVR5cGVzID8gZW50cnkgOiBlbnRyeS5mdWxscGF0aCgpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldChbZW50cnldKTtcbiAgICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IGRpci5yZWFkZGlyU3luYygpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHIgPSBlO1xuICAgICAgICAgICAgICAgIGlmIChlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZm9sbG93ICYmIChyID0gZS5yZWFscGF0aFN5bmMoKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyLmlzVW5rbm93bigpKVxuICAgICAgICAgICAgICAgICAgICAgICAgci5sc3RhdFN5bmMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHIuc2hvdWxkV2FsayhkaXJzLCB3YWxrRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBkaXJzLmFkZChyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1cHBvcnQgZm9yIGBmb3IgYXdhaXRgXG4gICAgICpcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLml0ZXJhdGV9XG4gICAgICpcbiAgICAgKiBOb3RlOiBBcyBvZiBOb2RlIDE5LCB0aGlzIGlzIHZlcnkgc2xvdywgY29tcGFyZWQgdG8gb3RoZXIgbWV0aG9kcyBvZlxuICAgICAqIHdhbGtpbmcuICBDb25zaWRlciB1c2luZyB7QGxpbmsgUGF0aFNjdXJyeUJhc2Uuc3RyZWFtfSBpZiBtZW1vcnkgb3ZlcmhlYWRcbiAgICAgKiBhbmQgYmFja3ByZXNzdXJlIGFyZSBjb25jZXJucywgb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLndhbGt9IGlmIG5vdC5cbiAgICAgKi9cbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlKCk7XG4gICAgfVxuICAgIGl0ZXJhdGUoZW50cnkgPSB0aGlzLmN3ZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIGl0ZXJhdGluZyBhc3luYyBvdmVyIHRoZSBzdHJlYW0gaXMgc2lnbmlmaWNhbnRseSBtb3JlIHBlcmZvcm1hbnQsXG4gICAgICAgIC8vIGVzcGVjaWFsbHkgaW4gdGhlIHdhcm0tY2FjaGUgc2NlbmFyaW8sIGJlY2F1c2UgaXQgYnVmZmVycyB1cCBkaXJlY3RvcnlcbiAgICAgICAgLy8gZW50cmllcyBpbiB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIGEgeWllbGQgZm9yIGVhY2ggb25lLlxuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZW50cnkgPSB0aGlzLmN3ZC5yZXNvbHZlKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghKGVudHJ5IGluc3RhbmNlb2YgUGF0aEJhc2UpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gZW50cnk7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmVhbShlbnRyeSwgb3B0aW9ucylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGluZyBvdmVyIGEgUGF0aFNjdXJyeSBwZXJmb3JtcyBhIHN5bmNocm9ub3VzIHdhbGsuXG4gICAgICpcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIFBhdGhTY3VycnlCYXNlLml0ZXJhdGVTeW5jfVxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRlU3luYygpO1xuICAgIH1cbiAgICAqaXRlcmF0ZVN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgIHlpZWxkIHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlycyA9IG5ldyBTZXQoW2VudHJ5XSk7XG4gICAgICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBkaXIucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHdpdGhGaWxlVHlwZXMgPyBlIDogZS5mdWxscGF0aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgciA9IGU7XG4gICAgICAgICAgICAgICAgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShmb2xsb3cgJiYgKHIgPSBlLnJlYWxwYXRoU3luYygpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHIuaXNVbmtub3duKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICByLmxzdGF0U3luYygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoci5zaG91bGRXYWxrKGRpcnMsIHdhbGtGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnMuYWRkKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdHJlYW0oZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgTWluaXBhc3MoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gW2VudHJ5XTtcbiAgICAgICAgbGV0IHByb2Nlc3NpbmcgPSAwO1xuICAgICAgICBjb25zdCBwcm9jZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKCFwYXVzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGlmICghZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzaW5nID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nKys7XG4gICAgICAgICAgICAgICAgZGlycy5hZGQoZGlyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvblJlYWRkaXIgPSAoZXIsIGVudHJpZXMsIGRpZFJlYWxwYXRocyA9IGZhbHNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5lbWl0KCdlcnJvcicsIGVyKTtcbiAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGxvdyAmJiAhZGlkUmVhbHBhdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlYWxwYXRoKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyKSA9PiByPy5pc1Vua25vd24oKSA/IHIubHN0YXQoKSA6IHIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4gb25SZWFkZGlyKG51bGwsIGVudHJpZXMsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlICYmICghZmlsdGVyIHx8IGZpbHRlcihlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmctLTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXVzZWQgJiYgIXJlc3VsdHMuZmxvd2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5vbmNlKCdkcmFpbicsIHByb2Nlc3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIHphbGdvIGNvbnRhaW5tZW50XG4gICAgICAgICAgICAgICAgbGV0IHN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRpci5yZWFkZGlyQ0Iob25SZWFkZGlyLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHByb2Nlc3MoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHN0cmVhbVN5bmMoZW50cnkgPSB0aGlzLmN3ZCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBlbnRyeSA9IHRoaXMuY3dkLnJlc29sdmUoZW50cnkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCEoZW50cnkgaW5zdGFuY2VvZiBQYXRoQmFzZSkpIHtcbiAgICAgICAgICAgIG9wdHMgPSBlbnRyeTtcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5jd2Q7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyB3aXRoRmlsZVR5cGVzID0gdHJ1ZSwgZm9sbG93ID0gZmFsc2UsIGZpbHRlciwgd2Fsa0ZpbHRlciwgfSA9IG9wdHM7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgTWluaXBhc3MoeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgICAgICBjb25zdCBkaXJzID0gbmV3IFNldCgpO1xuICAgICAgICBpZiAoIWZpbHRlciB8fCBmaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICByZXN1bHRzLndyaXRlKHdpdGhGaWxlVHlwZXMgPyBlbnRyeSA6IGVudHJ5LmZ1bGxwYXRoKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gW2VudHJ5XTtcbiAgICAgICAgbGV0IHByb2Nlc3NpbmcgPSAwO1xuICAgICAgICBjb25zdCBwcm9jZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKCFwYXVzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXIgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGlmICghZGlyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzaW5nID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nKys7XG4gICAgICAgICAgICAgICAgZGlycy5hZGQoZGlyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gZGlyLnJlYWRkaXJTeW5jKCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHMud3JpdGUod2l0aEZpbGVUeXBlcyA/IGUgOiBlLmZ1bGxwYXRoKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzaW5nLS07XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHIgPSBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShmb2xsb3cgJiYgKHIgPSBlLnJlYWxwYXRoU3luYygpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5pc1Vua25vd24oKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmxzdGF0U3luYygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChyLnNob3VsZFdhbGsoZGlycywgd2Fsa0ZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGF1c2VkICYmICFyZXN1bHRzLmZsb3dpbmcpXG4gICAgICAgICAgICAgICAgcmVzdWx0cy5vbmNlKCdkcmFpbicsIHByb2Nlc3MpO1xuICAgICAgICB9O1xuICAgICAgICBwcm9jZXNzKCk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICBjaGRpcihwYXRoID0gdGhpcy5jd2QpIHtcbiAgICAgICAgY29uc3Qgb2xkQ3dkID0gdGhpcy5jd2Q7XG4gICAgICAgIHRoaXMuY3dkID0gdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnID8gdGhpcy5jd2QucmVzb2x2ZShwYXRoKSA6IHBhdGg7XG4gICAgICAgIHRoaXMuY3dkW3NldEFzQ3dkXShvbGRDd2QpO1xuICAgIH1cbn1cbi8qKlxuICogV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgUGF0aFNjdXJyeUJhc2V9XG4gKlxuICogRGVmYXVsdHMgdG8gY2FzZSBpbnNlbnNpdHZlLCB1c2VzIGAnXFxcXCdgIHRvIGdlbmVyYXRlIHBhdGggc3RyaW5ncy4gIFVzZXNcbiAqIHtAbGluayBQYXRoV2luMzJ9IGZvciBQYXRoIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoU2N1cnJ5V2luMzIgZXh0ZW5kcyBQYXRoU2N1cnJ5QmFzZSB7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNlcCA9ICdcXFxcJztcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSB0cnVlIH0gPSBvcHRzO1xuICAgICAgICBzdXBlcihjd2QsIHdpbjMyLCAnXFxcXCcsIHsgLi4ub3B0cywgbm9jYXNlIH0pO1xuICAgICAgICB0aGlzLm5vY2FzZSA9IG5vY2FzZTtcbiAgICAgICAgZm9yIChsZXQgcCA9IHRoaXMuY3dkOyBwOyBwID0gcC5wYXJlbnQpIHtcbiAgICAgICAgICAgIHAubm9jYXNlID0gdGhpcy5ub2Nhc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcGFyc2VSb290UGF0aChkaXIpIHtcbiAgICAgICAgLy8gaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggYSBzaW5nbGUgc2VwYXJhdG9yLCBpdCdzIG5vdCBhIFVOQywgYW5kIHdlJ2xsXG4gICAgICAgIC8vIGp1c3QgZ2V0IHNlcGFyYXRvciBhcyB0aGUgcm9vdCwgYW5kIGRyaXZlRnJvbVVOQyB3aWxsIHJldHVybiBcXFxuICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIG1vdW50IFxcIG9uIHRoZSByb290IGZyb20gdGhlIGN3ZC5cbiAgICAgICAgcmV0dXJuIHdpbjMyLnBhcnNlKGRpcikucm9vdC50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdSb290KGZzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFdpbjMyKHRoaXMucm9vdFBhdGgsIElGRElSLCB1bmRlZmluZWQsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgeyBmcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHByb3ZpZGVkIHBhdGggc3RyaW5nIGlzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgKi9cbiAgICBpc0Fic29sdXRlKHApIHtcbiAgICAgICAgcmV0dXJuIChwLnN0YXJ0c1dpdGgoJy8nKSB8fCBwLnN0YXJ0c1dpdGgoJ1xcXFwnKSB8fCAvXlthLXpdOihcXC98XFxcXCkvaS50ZXN0KHApKTtcbiAgICB9XG59XG4vKipcbiAqIHtAbGluayBQYXRoU2N1cnJ5QmFzZX0gaW1wbGVtZW50YXRpb24gZm9yIGFsbCBwb3NpeCBzeXN0ZW1zIG90aGVyIHRoYW4gRGFyd2luLlxuICpcbiAqIERlZmF1bHRzIHRvIGNhc2Utc2Vuc2l0aXZlIG1hdGNoaW5nLCB1c2VzIGAnLydgIHRvIGdlbmVyYXRlIHBhdGggc3RyaW5ncy5cbiAqXG4gKiBVc2VzIHtAbGluayBQYXRoUG9zaXh9IGZvciBQYXRoIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXRoU2N1cnJ5UG9zaXggZXh0ZW5kcyBQYXRoU2N1cnJ5QmFzZSB7XG4gICAgLyoqXG4gICAgICogc2VwYXJhdG9yIGZvciBnZW5lcmF0aW5nIHBhdGggc3RyaW5nc1xuICAgICAqL1xuICAgIHNlcCA9ICcvJztcbiAgICBjb25zdHJ1Y3Rvcihjd2QgPSBwcm9jZXNzLmN3ZCgpLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3QgeyBub2Nhc2UgPSBmYWxzZSB9ID0gb3B0cztcbiAgICAgICAgc3VwZXIoY3dkLCBwb3NpeCwgJy8nLCB7IC4uLm9wdHMsIG5vY2FzZSB9KTtcbiAgICAgICAgdGhpcy5ub2Nhc2UgPSBub2Nhc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHBhcnNlUm9vdFBhdGgoX2Rpcikge1xuICAgICAgICByZXR1cm4gJy8nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBuZXdSb290KGZzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUGF0aFBvc2l4KHRoaXMucm9vdFBhdGgsIElGRElSLCB1bmRlZmluZWQsIHRoaXMucm9vdHMsIHRoaXMubm9jYXNlLCB0aGlzLmNoaWxkcmVuQ2FjaGUoKSwgeyBmcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHByb3ZpZGVkIHBhdGggc3RyaW5nIGlzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgKi9cbiAgICBpc0Fic29sdXRlKHApIHtcbiAgICAgICAgcmV0dXJuIHAuc3RhcnRzV2l0aCgnLycpO1xuICAgIH1cbn1cbi8qKlxuICoge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgRGFyd2luIChtYWNPUykgc3lzdGVtcy5cbiAqXG4gKiBEZWZhdWx0cyB0byBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLCB1c2VzIGAnLydgIGZvciBnZW5lcmF0aW5nIHBhdGhcbiAqIHN0cmluZ3MuXG4gKlxuICogVXNlcyB7QGxpbmsgUGF0aFBvc2l4fSBmb3IgUGF0aCBvYmplY3RzLlxuICovXG5leHBvcnQgY2xhc3MgUGF0aFNjdXJyeURhcndpbiBleHRlbmRzIFBhdGhTY3VycnlQb3NpeCB7XG4gICAgY29uc3RydWN0b3IoY3dkID0gcHJvY2Vzcy5jd2QoKSwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgbm9jYXNlID0gdHJ1ZSB9ID0gb3B0cztcbiAgICAgICAgc3VwZXIoY3dkLCB7IC4uLm9wdHMsIG5vY2FzZSB9KTtcbiAgICB9XG59XG4vKipcbiAqIERlZmF1bHQge0BsaW5rIFBhdGhCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICoge0BsaW5rIFBhdGhXaW4zMn0gb24gV2luZG93cyBzeXN0ZW1zLCB7QGxpbmsgUGF0aFBvc2l4fSBvbiBhbGwgb3RoZXJzLlxuICovXG5leHBvcnQgY29uc3QgUGF0aCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBQYXRoV2luMzIgOiBQYXRoUG9zaXg7XG4vKipcbiAqIERlZmF1bHQge0BsaW5rIFBhdGhTY3VycnlCYXNlfSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICoge0BsaW5rIFBhdGhTY3VycnlXaW4zMn0gb24gV2luZG93cyBzeXN0ZW1zLCB7QGxpbmsgUGF0aFNjdXJyeURhcndpbn0gb25cbiAqIERhcndpbiAobWFjT1MpIHN5c3RlbXMsIHtAbGluayBQYXRoU2N1cnJ5UG9zaXh9IG9uIGFsbCBvdGhlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBQYXRoU2N1cnJ5ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IFBhdGhTY3VycnlXaW4zMlxuICAgIDogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyBQYXRoU2N1cnJ5RGFyd2luXG4gICAgICAgIDogUGF0aFNjdXJyeVBvc2l4O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJjb25zdCBwcm9jID0gdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3NcbiAgICA/IHByb2Nlc3NcbiAgICA6IHtcbiAgICAgICAgc3Rkb3V0OiBudWxsLFxuICAgICAgICBzdGRlcnI6IG51bGwsXG4gICAgfTtcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ25vZGU6ZXZlbnRzJztcbmltcG9ydCBTdHJlYW0gZnJvbSAnbm9kZTpzdHJlYW0nO1xuaW1wb3J0IHsgU3RyaW5nRGVjb2RlciB9IGZyb20gJ25vZGU6c3RyaW5nX2RlY29kZXInO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSBNaW5pcGFzcyBzdHJlYW0sIE5vZGUgc3RyZWFtLCBvciBzb21ldGhpbmdcbiAqIGVsc2UgdGhhdCBNaW5pcGFzcyBjYW4gaW50ZXJhY3Qgd2l0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzU3RyZWFtID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIChzIGluc3RhbmNlb2YgTWluaXBhc3MgfHxcbiAgICAgICAgcyBpbnN0YW5jZW9mIFN0cmVhbSB8fFxuICAgICAgICBpc1JlYWRhYmxlKHMpIHx8XG4gICAgICAgIGlzV3JpdGFibGUocykpO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYSB2YWxpZCB7QGxpbmsgTWluaXBhc3MuUmVhZGFibGV9XG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlYWRhYmxlID0gKHMpID0+ICEhcyAmJlxuICAgIHR5cGVvZiBzID09PSAnb2JqZWN0JyAmJlxuICAgIHMgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIgJiZcbiAgICB0eXBlb2Ygcy5waXBlID09PSAnZnVuY3Rpb24nICYmXG4gICAgLy8gbm9kZSBjb3JlIFdyaXRhYmxlIHN0cmVhbXMgaGF2ZSBhIHBpcGUoKSBtZXRob2QsIGJ1dCBpdCB0aHJvd3NcbiAgICBzLnBpcGUgIT09IFN0cmVhbS5Xcml0YWJsZS5wcm90b3R5cGUucGlwZTtcbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgdmFsaWQge0BsaW5rIE1pbmlwYXNzLldyaXRhYmxlfVxuICovXG5leHBvcnQgY29uc3QgaXNXcml0YWJsZSA9IChzKSA9PiAhIXMgJiZcbiAgICB0eXBlb2YgcyA9PT0gJ29iamVjdCcgJiZcbiAgICBzIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyICYmXG4gICAgdHlwZW9mIHMud3JpdGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygcy5lbmQgPT09ICdmdW5jdGlvbic7XG5jb25zdCBFT0YgPSBTeW1ib2woJ0VPRicpO1xuY29uc3QgTUFZQkVfRU1JVF9FTkQgPSBTeW1ib2woJ21heWJlRW1pdEVuZCcpO1xuY29uc3QgRU1JVFRFRF9FTkQgPSBTeW1ib2woJ2VtaXR0ZWRFbmQnKTtcbmNvbnN0IEVNSVRUSU5HX0VORCA9IFN5bWJvbCgnZW1pdHRpbmdFbmQnKTtcbmNvbnN0IEVNSVRURURfRVJST1IgPSBTeW1ib2woJ2VtaXR0ZWRFcnJvcicpO1xuY29uc3QgQ0xPU0VEID0gU3ltYm9sKCdjbG9zZWQnKTtcbmNvbnN0IFJFQUQgPSBTeW1ib2woJ3JlYWQnKTtcbmNvbnN0IEZMVVNIID0gU3ltYm9sKCdmbHVzaCcpO1xuY29uc3QgRkxVU0hDSFVOSyA9IFN5bWJvbCgnZmx1c2hDaHVuaycpO1xuY29uc3QgRU5DT0RJTkcgPSBTeW1ib2woJ2VuY29kaW5nJyk7XG5jb25zdCBERUNPREVSID0gU3ltYm9sKCdkZWNvZGVyJyk7XG5jb25zdCBGTE9XSU5HID0gU3ltYm9sKCdmbG93aW5nJyk7XG5jb25zdCBQQVVTRUQgPSBTeW1ib2woJ3BhdXNlZCcpO1xuY29uc3QgUkVTVU1FID0gU3ltYm9sKCdyZXN1bWUnKTtcbmNvbnN0IEJVRkZFUiA9IFN5bWJvbCgnYnVmZmVyJyk7XG5jb25zdCBQSVBFUyA9IFN5bWJvbCgncGlwZXMnKTtcbmNvbnN0IEJVRkZFUkxFTkdUSCA9IFN5bWJvbCgnYnVmZmVyTGVuZ3RoJyk7XG5jb25zdCBCVUZGRVJQVVNIID0gU3ltYm9sKCdidWZmZXJQdXNoJyk7XG5jb25zdCBCVUZGRVJTSElGVCA9IFN5bWJvbCgnYnVmZmVyU2hpZnQnKTtcbmNvbnN0IE9CSkVDVE1PREUgPSBTeW1ib2woJ29iamVjdE1vZGUnKTtcbi8vIGludGVybmFsIGV2ZW50IHdoZW4gc3RyZWFtIGlzIGRlc3Ryb3llZFxuY29uc3QgREVTVFJPWUVEID0gU3ltYm9sKCdkZXN0cm95ZWQnKTtcbi8vIGludGVybmFsIGV2ZW50IHdoZW4gc3RyZWFtIGhhcyBhbiBlcnJvclxuY29uc3QgRVJST1IgPSBTeW1ib2woJ2Vycm9yJyk7XG5jb25zdCBFTUlUREFUQSA9IFN5bWJvbCgnZW1pdERhdGEnKTtcbmNvbnN0IEVNSVRFTkQgPSBTeW1ib2woJ2VtaXRFbmQnKTtcbmNvbnN0IEVNSVRFTkQyID0gU3ltYm9sKCdlbWl0RW5kMicpO1xuY29uc3QgQVNZTkMgPSBTeW1ib2woJ2FzeW5jJyk7XG5jb25zdCBBQk9SVCA9IFN5bWJvbCgnYWJvcnQnKTtcbmNvbnN0IEFCT1JURUQgPSBTeW1ib2woJ2Fib3J0ZWQnKTtcbmNvbnN0IFNJR05BTCA9IFN5bWJvbCgnc2lnbmFsJyk7XG5jb25zdCBEQVRBTElTVEVORVJTID0gU3ltYm9sKCdkYXRhTGlzdGVuZXJzJyk7XG5jb25zdCBESVNDQVJERUQgPSBTeW1ib2woJ2Rpc2NhcmRlZCcpO1xuY29uc3QgZGVmZXIgPSAoZm4pID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZm4pO1xuY29uc3Qgbm9kZWZlciA9IChmbikgPT4gZm4oKTtcbmNvbnN0IGlzRW5kaXNoID0gKGV2KSA9PiBldiA9PT0gJ2VuZCcgfHwgZXYgPT09ICdmaW5pc2gnIHx8IGV2ID09PSAncHJlZmluaXNoJztcbmNvbnN0IGlzQXJyYXlCdWZmZXJMaWtlID0gKGIpID0+IGIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAgICghIWIgJiZcbiAgICAgICAgdHlwZW9mIGIgPT09ICdvYmplY3QnICYmXG4gICAgICAgIGIuY29uc3RydWN0b3IgJiZcbiAgICAgICAgYi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXJyYXlCdWZmZXInICYmXG4gICAgICAgIGIuYnl0ZUxlbmd0aCA+PSAwKTtcbmNvbnN0IGlzQXJyYXlCdWZmZXJWaWV3ID0gKGIpID0+ICFCdWZmZXIuaXNCdWZmZXIoYikgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KGIpO1xuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHRvIGEgZGVzdGluYXRpb24gc3RyZWFtLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBQaXBlIHtcbiAgICBzcmM7XG4gICAgZGVzdDtcbiAgICBvcHRzO1xuICAgIG9uZHJhaW47XG4gICAgY29uc3RydWN0b3Ioc3JjLCBkZXN0LCBvcHRzKSB7XG4gICAgICAgIHRoaXMuc3JjID0gc3JjO1xuICAgICAgICB0aGlzLmRlc3QgPSBkZXN0O1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLm9uZHJhaW4gPSAoKSA9PiBzcmNbUkVTVU1FXSgpO1xuICAgICAgICB0aGlzLmRlc3Qub24oJ2RyYWluJywgdGhpcy5vbmRyYWluKTtcbiAgICB9XG4gICAgdW5waXBlKCkge1xuICAgICAgICB0aGlzLmRlc3QucmVtb3ZlTGlzdGVuZXIoJ2RyYWluJywgdGhpcy5vbmRyYWluKTtcbiAgICB9XG4gICAgLy8gb25seSBoZXJlIGZvciB0aGUgcHJvdG90eXBlXG4gICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgcHJveHlFcnJvcnMoX2VyKSB7IH1cbiAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgIGVuZCgpIHtcbiAgICAgICAgdGhpcy51bnBpcGUoKTtcbiAgICAgICAgaWYgKHRoaXMub3B0cy5lbmQpXG4gICAgICAgICAgICB0aGlzLmRlc3QuZW5kKCk7XG4gICAgfVxufVxuLyoqXG4gKiBJbnRlcm5hbCBjbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHRvIGEgZGVzdGluYXRpb24gc3RyZWFtIHdoZXJlXG4gKiBlcnJvcnMgYXJlIHByb3hpZWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFBpcGVQcm94eUVycm9ycyBleHRlbmRzIFBpcGUge1xuICAgIHVucGlwZSgpIHtcbiAgICAgICAgdGhpcy5zcmMucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgdGhpcy5wcm94eUVycm9ycyk7XG4gICAgICAgIHN1cGVyLnVucGlwZSgpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihzcmMsIGRlc3QsIG9wdHMpIHtcbiAgICAgICAgc3VwZXIoc3JjLCBkZXN0LCBvcHRzKTtcbiAgICAgICAgdGhpcy5wcm94eUVycm9ycyA9IChlcikgPT4gdGhpcy5kZXN0LmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICBzcmMub24oJ2Vycm9yJywgdGhpcy5wcm94eUVycm9ycyk7XG4gICAgfVxufVxuY29uc3QgaXNPYmplY3RNb2RlT3B0aW9ucyA9IChvKSA9PiAhIW8ub2JqZWN0TW9kZTtcbmNvbnN0IGlzRW5jb2RpbmdPcHRpb25zID0gKG8pID0+ICFvLm9iamVjdE1vZGUgJiYgISFvLmVuY29kaW5nICYmIG8uZW5jb2RpbmcgIT09ICdidWZmZXInO1xuLyoqXG4gKiBNYWluIGV4cG9ydCwgdGhlIE1pbmlwYXNzIGNsYXNzXG4gKlxuICogYFJUeXBlYCBpcyB0aGUgdHlwZSBvZiBkYXRhIGVtaXR0ZWQsIGRlZmF1bHRzIHRvIEJ1ZmZlclxuICpcbiAqIGBXVHlwZWAgaXMgdGhlIHR5cGUgb2YgZGF0YSB0byBiZSB3cml0dGVuLCBpZiBSVHlwZSBpcyBidWZmZXIgb3Igc3RyaW5nLFxuICogdGhlbiBhbnkge0BsaW5rIE1pbmlwYXNzLkNvbnRpZ3VvdXNEYXRhfSBpcyBhbGxvd2VkLlxuICpcbiAqIGBFdmVudHNgIGlzIHRoZSBzZXQgb2YgZXZlbnQgaGFuZGxlciBzaWduYXR1cmVzIHRoYXQgdGhpcyBvYmplY3RcbiAqIHdpbGwgZW1pdCwgc2VlIHtAbGluayBNaW5pcGFzcy5FdmVudHN9XG4gKi9cbmV4cG9ydCBjbGFzcyBNaW5pcGFzcyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgW1BBVVNFRF0gPSBmYWxzZTtcbiAgICBbUElQRVNdID0gW107XG4gICAgW0JVRkZFUl0gPSBbXTtcbiAgICBbT0JKRUNUTU9ERV07XG4gICAgW0VOQ09ESU5HXTtcbiAgICBbQVNZTkNdO1xuICAgIFtERUNPREVSXTtcbiAgICBbRU9GXSA9IGZhbHNlO1xuICAgIFtFTUlUVEVEX0VORF0gPSBmYWxzZTtcbiAgICBbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgIFtDTE9TRURdID0gZmFsc2U7XG4gICAgW0VNSVRURURfRVJST1JdID0gbnVsbDtcbiAgICBbQlVGRkVSTEVOR1RIXSA9IDA7XG4gICAgW0RFU1RST1lFRF0gPSBmYWxzZTtcbiAgICBbU0lHTkFMXTtcbiAgICBbQUJPUlRFRF0gPSBmYWxzZTtcbiAgICBbREFUQUxJU1RFTkVSU10gPSAwO1xuICAgIFtESVNDQVJERURdID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGUgc3RyZWFtIGNhbiBiZSB3cml0dGVuXG4gICAgICovXG4gICAgd3JpdGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBjYW4gYmUgcmVhZFxuICAgICAqL1xuICAgIHJlYWRhYmxlID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBJZiBgUlR5cGVgIGlzIEJ1ZmZlciwgdGhlbiBvcHRpb25zIGRvIG5vdCBuZWVkIHRvIGJlIHByb3ZpZGVkLlxuICAgICAqIE90aGVyd2lzZSwgYW4gb3B0aW9ucyBvYmplY3QgbXVzdCBiZSBwcm92aWRlZCB0byBzcGVjaWZ5IGVpdGhlclxuICAgICAqIHtAbGluayBNaW5pcGFzcy5TaGFyZWRPcHRpb25zLm9iamVjdE1vZGV9IG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzLlNoYXJlZE9wdGlvbnMuZW5jb2Rpbmd9LCBhcyBhcHByb3ByaWF0ZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSAoYXJnc1swXSB8fFxuICAgICAgICAgICAge30pO1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpZiAob3B0aW9ucy5vYmplY3RNb2RlICYmIHR5cGVvZiBvcHRpb25zLmVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RpbmcgYW5kIG9iamVjdE1vZGUgbWF5IG5vdCBiZSB1c2VkIHRvZ2V0aGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0TW9kZU9wdGlvbnMob3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXNbT0JKRUNUTU9ERV0gPSB0cnVlO1xuICAgICAgICAgICAgdGhpc1tFTkNPRElOR10gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRW5jb2RpbmdPcHRpb25zKG9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG9wdGlvbnMuZW5jb2Rpbmc7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzW09CSkVDVE1PREVdID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzW0VOQ09ESU5HXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tBU1lOQ10gPSAhIW9wdGlvbnMuYXN5bmM7XG4gICAgICAgIHRoaXNbREVDT0RFUl0gPSB0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBuZXcgU3RyaW5nRGVjb2Rlcih0aGlzW0VOQ09ESU5HXSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlQnVmZmVyID09PSB0cnVlKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2J1ZmZlcicsIHsgZ2V0OiAoKSA9PiB0aGlzW0JVRkZFUl0gfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy9AdHMtaWdub3JlIC0gcHJpdmF0ZSBvcHRpb24gZm9yIGRlYnVnZ2luZyBhbmQgdGVzdGluZ1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRlYnVnRXhwb3NlUGlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncGlwZXMnLCB7IGdldDogKCkgPT4gdGhpc1tQSVBFU10gfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzaWduYWwgfSA9IG9wdGlvbnM7XG4gICAgICAgIGlmIChzaWduYWwpIHtcbiAgICAgICAgICAgIHRoaXNbU0lHTkFMXSA9IHNpZ25hbDtcbiAgICAgICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXNbQUJPUlRdKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aGlzW0FCT1JUXSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYW1vdW50IG9mIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgd2FpdGluZyB0byBiZSByZWFkLlxuICAgICAqXG4gICAgICogRm9yIEJ1ZmZlciBzdHJpbmdzLCB0aGlzIHdpbGwgYmUgdGhlIHRvdGFsIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEZvciBzdHJpbmcgZW5jb2Rpbmcgc3RyZWFtcywgdGhpcyB3aWxsIGJlIHRoZSBzdHJpbmcgY2hhcmFjdGVyIGxlbmd0aCxcbiAgICAgKiBhY2NvcmRpbmcgdG8gSmF2YVNjcmlwdCdzIGBzdHJpbmcubGVuZ3RoYCBsb2dpYy5cbiAgICAgKiBGb3Igb2JqZWN0TW9kZSBzdHJlYW1zLCB0aGlzIGlzIGEgY291bnQgb2YgdGhlIGl0ZW1zIHdhaXRpbmcgdG8gYmVcbiAgICAgKiBlbWl0dGVkLlxuICAgICAqL1xuICAgIGdldCBidWZmZXJMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUkxFTkdUSF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBgQnVmZmVyRW5jb2RpbmdgIGN1cnJlbnRseSBpbiB1c2UsIG9yIGBudWxsYFxuICAgICAqL1xuICAgIGdldCBlbmNvZGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU5DT0RJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgaXMgYSByZWFkIG9ubHkgcHJvcGVydHlcbiAgICAgKi9cbiAgICBzZXQgZW5jb2RpbmcoX2VuYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kaW5nIG11c3QgYmUgc2V0IGF0IGluc3RhbnRpYXRpb24gdGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCAtIEVuY29kaW5nIG1heSBvbmx5IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWVcbiAgICAgKi9cbiAgICBzZXRFbmNvZGluZyhfZW5jKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRW5jb2RpbmcgbXVzdCBiZSBzZXQgYXQgaW5zdGFudGlhdGlvbiB0aW1lJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRydWUgaWYgdGhpcyBpcyBhbiBvYmplY3RNb2RlIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBvYmplY3RNb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tPQkpFQ1RNT0RFXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgLSBUaGlzIGlzIGEgcmVhZC1vbmx5IHByb3BlcnR5XG4gICAgICovXG4gICAgc2V0IG9iamVjdE1vZGUoX29tKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb2JqZWN0TW9kZSBtdXN0IGJlIHNldCBhdCBpbnN0YW50aWF0aW9uIHRpbWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiB0aGlzIGlzIGFuIGFzeW5jIHN0cmVhbVxuICAgICAqL1xuICAgIGdldCBbJ2FzeW5jJ10oKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0IHRvIHRydWUgdG8gbWFrZSB0aGlzIHN0cmVhbSBhc3luYy5cbiAgICAgKlxuICAgICAqIE9uY2Ugc2V0LCBpdCBjYW5ub3QgYmUgdW5zZXQsIGFzIHRoaXMgd291bGQgcG90ZW50aWFsbHkgY2F1c2UgaW5jb3JyZWN0XG4gICAgICogYmVoYXZpb3IuICBJZSwgYSBzeW5jIHN0cmVhbSBjYW4gYmUgbWFkZSBhc3luYywgYnV0IGFuIGFzeW5jIHN0cmVhbVxuICAgICAqIGNhbm5vdCBiZSBzYWZlbHkgbWFkZSBzeW5jLlxuICAgICAqL1xuICAgIHNldCBbJ2FzeW5jJ10oYSkge1xuICAgICAgICB0aGlzW0FTWU5DXSA9IHRoaXNbQVNZTkNdIHx8ICEhYTtcbiAgICB9XG4gICAgLy8gZHJvcCBldmVyeXRoaW5nIGFuZCBnZXQgb3V0IG9mIHRoZSBmbG93IGNvbXBsZXRlbHlcbiAgICBbQUJPUlRdKCkge1xuICAgICAgICB0aGlzW0FCT1JURURdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0KCdhYm9ydCcsIHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICAgICAgdGhpcy5kZXN0cm95KHRoaXNbU0lHTkFMXT8ucmVhc29uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgc3RyZWFtIGhhcyBiZWVuIGFib3J0ZWQuXG4gICAgICovXG4gICAgZ2V0IGFib3J0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0FCT1JURURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOby1vcCBzZXR0ZXIuIFN0cmVhbSBhYm9ydGVkIHN0YXR1cyBpcyBzZXQgdmlhIHRoZSBBYm9ydFNpZ25hbCBwcm92aWRlZFxuICAgICAqIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLlxuICAgICAqL1xuICAgIHNldCBhYm9ydGVkKF8pIHsgfVxuICAgIHdyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgICAgICAgaWYgKHRoaXNbQUJPUlRFRF0pXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3dyaXRlIGFmdGVyIGVuZCcpO1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIHdyaXRlIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQnKSwgeyBjb2RlOiAnRVJSX1NUUkVBTV9ERVNUUk9ZRUQnIH0pKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVuY29kaW5nKVxuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpc1tBU1lOQ10gPyBkZWZlciA6IG5vZGVmZXI7XG4gICAgICAgIC8vIGNvbnZlcnQgYXJyYXkgYnVmZmVycyBhbmQgdHlwZWQgYXJyYXkgdmlld3MgaW50byBidWZmZXJzXG4gICAgICAgIC8vIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gZG8gdGhlIG9wcG9zaXRlIVxuICAgICAgICAvLyBsZWF2ZSBzdHJpbmdzIGFuZCBidWZmZXJzIGFzLWlzXG4gICAgICAgIC8vIGFueXRoaW5nIGlzIG9ubHkgYWxsb3dlZCBpZiBpbiBvYmplY3QgbW9kZSwgc28gdGhyb3dcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdICYmICFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJheUJ1ZmZlclZpZXcoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuay5idWZmZXIsIGNodW5rLmJ5dGVPZmZzZXQsIGNodW5rLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJheUJ1ZmZlckxpa2UoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5naW5nXG4gICAgICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb24tY29udGlndW91cyBkYXRhIHdyaXR0ZW4gdG8gbm9uLW9iamVjdE1vZGUgc3RyZWFtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGFuZGxlIG9iamVjdCBtb2RlIHVwIGZyb250LCBzaW5jZSBpdCdzIHNpbXBsZXJcbiAgICAgICAgLy8gdGhpcyB5aWVsZHMgYmV0dGVyIHBlcmZvcm1hbmNlLCBmZXdlciBjaGVja3MgbGF0ZXIuXG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBtYXliZSBpbXBvc3NpYmxlP1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICAgICAgdGhpc1tGTFVTSF0odHJ1ZSk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10pXG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdkYXRhJywgY2h1bmspO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXNbQlVGRkVSUFVTSF0oY2h1bmspO1xuICAgICAgICAgICAgaWYgKHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICBpZiAoY2IpXG4gICAgICAgICAgICAgICAgZm4oY2IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCB0aGUgY2h1bmsgaXMgYSBidWZmZXIgb3Igc3RyaW5nXG4gICAgICAgIC8vIGRvbid0IGJ1ZmZlciBpdCB1cCBvciBzZW5kIGl0IHRvIHRoZSBkZWNvZGVyXG4gICAgICAgIGlmICghY2h1bmsubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tCVUZGRVJMRU5HVEhdICE9PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgncmVhZGFibGUnKTtcbiAgICAgICAgICAgIGlmIChjYilcbiAgICAgICAgICAgICAgICBmbihjYik7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tGTE9XSU5HXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmYXN0LXBhdGggd3JpdGluZyBzdHJpbmdzIG9mIHNhbWUgZW5jb2RpbmcgdG8gYSBzdHJlYW0gd2l0aFxuICAgICAgICAvLyBhbiBlbXB0eSBidWZmZXIsIHNraXBwaW5nIHRoZSBidWZmZXIvZGVjb2RlciBkYW5jZVxuICAgICAgICBpZiAodHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgLy8gdW5sZXNzIGl0IGlzIGEgc3RyaW5nIGFscmVhZHkgcmVhZHkgZm9yIHVzIHRvIHVzZVxuICAgICAgICAgICAgIShlbmNvZGluZyA9PT0gdGhpc1tFTkNPRElOR10gJiYgIXRoaXNbREVDT0RFUl0/Lmxhc3ROZWVkKSkge1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlIC0gc2luZnVsIHVuc2FmZSB0eXBlIGNoYW5nZVxuICAgICAgICAgICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgZW5jb2RpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmIHRoaXNbRU5DT0RJTkddKSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgLSBzaW5mdWwgdW5zYWZlIHR5cGUgY2hhbmdlXG4gICAgICAgICAgICBjaHVuayA9IHRoaXNbREVDT0RFUl0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IGZsdXNoaW5nIENBTiBwb3RlbnRpYWxseSBzd2l0Y2ggdXMgaW50byBub3QtZmxvd2luZyBtb2RlXG4gICAgICAgIGlmICh0aGlzW0ZMT1dJTkddICYmIHRoaXNbQlVGRkVSTEVOR1RIXSAhPT0gMClcbiAgICAgICAgICAgIHRoaXNbRkxVU0hdKHRydWUpO1xuICAgICAgICBpZiAodGhpc1tGTE9XSU5HXSlcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZGF0YScsIGNodW5rKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJQVVNIXShjaHVuayk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIGZuKGNiKTtcbiAgICAgICAgcmV0dXJuIHRoaXNbRkxPV0lOR107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExvdy1sZXZlbCBleHBsaWNpdCByZWFkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEluIG9iamVjdE1vZGUsIHRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLCBhbmQgb25lIGl0ZW0gaXMgcmV0dXJuZWQgaWZcbiAgICAgKiBhdmFpbGFibGUuXG4gICAgICpcbiAgICAgKiBgbmAgaXMgdGhlIG51bWJlciBvZiBieXRlcyAob3IgaW4gdGhlIGNhc2Ugb2YgZW5jb2Rpbmcgc3RyZWFtcyxcbiAgICAgKiBjaGFyYWN0ZXJzKSB0byBjb25zdW1lLiBJZiBgbmAgaXMgbm90IHByb3ZpZGVkLCB0aGVuIHRoZSBlbnRpcmUgYnVmZmVyXG4gICAgICogaXMgcmV0dXJuZWQsIG9yIGBudWxsYCBpcyByZXR1cm5lZCBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZS5cbiAgICAgKlxuICAgICAqIElmIGBuYCBpcyBncmVhdGVyIHRoYXQgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBpbnRlcm5hbCBidWZmZXIsXG4gICAgICogdGhlbiBgbnVsbGAgaXMgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcmVhZChuKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUkxFTkdUSF0gPT09IDAgfHxcbiAgICAgICAgICAgIG4gPT09IDAgfHxcbiAgICAgICAgICAgIChuICYmIG4gPiB0aGlzW0JVRkZFUkxFTkdUSF0pKSB7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICBuID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXNbQlVGRkVSXS5sZW5ndGggPiAxICYmICF0aGlzW09CSkVDVE1PREVdKSB7XG4gICAgICAgICAgICAvLyBub3Qgb2JqZWN0IG1vZGUsIHNvIGlmIHdlIGhhdmUgYW4gZW5jb2RpbmcsIHRoZW4gUlR5cGUgaXMgc3RyaW5nXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UsIG11c3QgYmUgQnVmZmVyXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0gPSBbXG4gICAgICAgICAgICAgICAgKHRoaXNbRU5DT0RJTkddXG4gICAgICAgICAgICAgICAgICAgID8gdGhpc1tCVUZGRVJdLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdCh0aGlzW0JVRkZFUl0sIHRoaXNbQlVGRkVSTEVOR1RIXSkpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXQgPSB0aGlzW1JFQURdKG4gfHwgbnVsbCwgdGhpc1tCVUZGRVJdWzBdKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW1JFQURdKG4sIGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJTSElGVF0oKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjID0gY2h1bms7XG4gICAgICAgICAgICBpZiAobiA9PT0gYy5sZW5ndGggfHwgbiA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUlNISUZUXSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJdWzBdID0gYy5zbGljZShuKTtcbiAgICAgICAgICAgICAgICBjaHVuayA9IGMuc2xpY2UoMCwgbik7XG4gICAgICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUl1bMF0gPSBjLnN1YmFycmF5KG4pO1xuICAgICAgICAgICAgICAgIGNodW5rID0gYy5zdWJhcnJheSgwLCBuKTtcbiAgICAgICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIGlmICghdGhpc1tCVUZGRVJdLmxlbmd0aCAmJiAhdGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgICAgICByZXR1cm4gY2h1bms7XG4gICAgfVxuICAgIGVuZChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNiID0gY2h1bms7XG4gICAgICAgICAgICBjaHVuayA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYiA9IGVuY29kaW5nO1xuICAgICAgICAgICAgZW5jb2RpbmcgPSAndXRmOCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNodW5rICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLndyaXRlKGNodW5rLCBlbmNvZGluZyk7XG4gICAgICAgIGlmIChjYilcbiAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgY2IpO1xuICAgICAgICB0aGlzW0VPRl0gPSB0cnVlO1xuICAgICAgICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICAgIC8vIGlmIHdlIGhhdmVuJ3Qgd3JpdHRlbiBhbnl0aGluZywgdGhlbiBnbyBhaGVhZCBhbmQgZW1pdCxcbiAgICAgICAgLy8gZXZlbiBpZiB3ZSdyZSBub3QgcmVhZGluZy5cbiAgICAgICAgLy8gd2UnbGwgcmUtZW1pdCBpZiBhIG5ldyAnZW5kJyBsaXN0ZW5lciBpcyBhZGRlZCBhbnl3YXkuXG4gICAgICAgIC8vIFRoaXMgbWFrZXMgTVAgbW9yZSBzdWl0YWJsZSB0byB3cml0ZS1vbmx5IHVzZSBjYXNlcy5cbiAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gfHwgIXRoaXNbUEFVU0VEXSlcbiAgICAgICAgICAgIHRoaXNbTUFZQkVfRU1JVF9FTkRdKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLyBkb24ndCBsZXQgdGhlIGludGVybmFsIHJlc3VtZSBiZSBvdmVyd3JpdHRlblxuICAgIFtSRVNVTUVdKCkge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXNbREFUQUxJU1RFTkVSU10gJiYgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpc1tESVNDQVJERURdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzW1BBVVNFRF0gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tGTE9XSU5HXSA9IHRydWU7XG4gICAgICAgIHRoaXMuZW1pdCgncmVzdW1lJyk7XG4gICAgICAgIGlmICh0aGlzW0JVRkZFUl0ubGVuZ3RoKVxuICAgICAgICAgICAgdGhpc1tGTFVTSF0oKTtcbiAgICAgICAgZWxzZSBpZiAodGhpc1tFT0ZdKVxuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdkcmFpbicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXN1bWUgdGhlIHN0cmVhbSBpZiBpdCBpcyBjdXJyZW50bHkgaW4gYSBwYXVzZWQgc3RhdGVcbiAgICAgKlxuICAgICAqIElmIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBwaXBlIGRlc3RpbmF0aW9ucyBvciBgZGF0YWAgZXZlbnQgbGlzdGVuZXJzLFxuICAgICAqIHRoaXMgd2lsbCBwbGFjZSB0aGUgc3RyZWFtIGluIGEgXCJkaXNjYXJkZWRcIiBzdGF0ZSwgd2hlcmUgYWxsIGRhdGEgd2lsbFxuICAgICAqIGJlIHRocm93biBhd2F5LiBUaGUgZGlzY2FyZGVkIHN0YXRlIGlzIHJlbW92ZWQgaWYgYSBwaXBlIGRlc3RpbmF0aW9uIG9yXG4gICAgICogZGF0YSBoYW5kbGVyIGlzIGFkZGVkLCBpZiBwYXVzZSgpIGlzIGNhbGxlZCwgb3IgaWYgYW55IHN5bmNocm9ub3VzIG9yXG4gICAgICogYXN5bmNocm9ub3VzIGl0ZXJhdGlvbiBpcyBzdGFydGVkLlxuICAgICAqL1xuICAgIHJlc3VtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUkVTVU1FXSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQYXVzZSB0aGUgc3RyZWFtXG4gICAgICovXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgdGhpc1tQQVVTRURdID0gdHJ1ZTtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBmb3JjaWJseSBkZXN0cm95ZWRcbiAgICAgKi9cbiAgICBnZXQgZGVzdHJveWVkKCkge1xuICAgICAgICByZXR1cm4gdGhpc1tERVNUUk9ZRURdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgZmxvd2luZyBzdGF0ZSwgbWVhbmluZyB0aGF0XG4gICAgICogYW55IHdyaXRlcyB3aWxsIGJlIGltbWVkaWF0ZWx5IGVtaXR0ZWQuXG4gICAgICovXG4gICAgZ2V0IGZsb3dpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZSBzdHJlYW0gaXMgY3VycmVudGx5IGluIGEgcGF1c2VkIHN0YXRlXG4gICAgICovXG4gICAgZ2V0IHBhdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbUEFVU0VEXTtcbiAgICB9XG4gICAgW0JVRkZFUlBVU0hdKGNodW5rKSB7XG4gICAgICAgIGlmICh0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdICs9IDE7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXNbQlVGRkVSTEVOR1RIXSArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIHRoaXNbQlVGRkVSXS5wdXNoKGNodW5rKTtcbiAgICB9XG4gICAgW0JVRkZFUlNISUZUXSgpIHtcbiAgICAgICAgaWYgKHRoaXNbT0JKRUNUTU9ERV0pXG4gICAgICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gLT0gMTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpc1tCVUZGRVJMRU5HVEhdIC09IHRoaXNbQlVGRkVSXVswXS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzW0JVRkZFUl0uc2hpZnQoKTtcbiAgICB9XG4gICAgW0ZMVVNIXShub0RyYWluID0gZmFsc2UpIHtcbiAgICAgICAgZG8geyB9IHdoaWxlICh0aGlzW0ZMVVNIQ0hVTktdKHRoaXNbQlVGRkVSU0hJRlRdKCkpICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoKTtcbiAgICAgICAgaWYgKCFub0RyYWluICYmICF0aGlzW0JVRkZFUl0ubGVuZ3RoICYmICF0aGlzW0VPRl0pXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2RyYWluJyk7XG4gICAgfVxuICAgIFtGTFVTSENIVU5LXShjaHVuaykge1xuICAgICAgICB0aGlzLmVtaXQoJ2RhdGEnLCBjaHVuayk7XG4gICAgICAgIHJldHVybiB0aGlzW0ZMT1dJTkddO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQaXBlIGFsbCBkYXRhIGVtaXR0ZWQgYnkgdGhpcyBzdHJlYW0gaW50byB0aGUgZGVzdGluYXRpb24gcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBUcmlnZ2VycyB0aGUgZmxvdyBvZiBkYXRhLlxuICAgICAqL1xuICAgIHBpcGUoZGVzdCwgb3B0cykge1xuICAgICAgICBpZiAodGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBlbmRlZCA9IHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgaWYgKGRlc3QgPT09IHByb2Muc3Rkb3V0IHx8IGRlc3QgPT09IHByb2Muc3RkZXJyKVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBmYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3B0cy5lbmQgPSBvcHRzLmVuZCAhPT0gZmFsc2U7XG4gICAgICAgIG9wdHMucHJveHlFcnJvcnMgPSAhIW9wdHMucHJveHlFcnJvcnM7XG4gICAgICAgIC8vIHBpcGluZyBhbiBlbmRlZCBzdHJlYW0gZW5kcyBpbW1lZGlhdGVseVxuICAgICAgICBpZiAoZW5kZWQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmVuZClcbiAgICAgICAgICAgICAgICBkZXN0LmVuZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gXCJhc1wiIGhlcmUganVzdCBpZ25vcmVzIHRoZSBXVHlwZSwgd2hpY2ggcGlwZXMgZG9uJ3QgY2FyZSBhYm91dCxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXkncmUgb25seSBjb25zdW1pbmcgZnJvbSB1cywgYW5kIHdyaXRpbmcgdG8gdGhlIGRlc3RcbiAgICAgICAgICAgIHRoaXNbUElQRVNdLnB1c2goIW9wdHMucHJveHlFcnJvcnNcbiAgICAgICAgICAgICAgICA/IG5ldyBQaXBlKHRoaXMsIGRlc3QsIG9wdHMpXG4gICAgICAgICAgICAgICAgOiBuZXcgUGlwZVByb3h5RXJyb3JzKHRoaXMsIGRlc3QsIG9wdHMpKTtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiB0aGlzW1JFU1VNRV0oKSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tSRVNVTUVdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZ1bGx5IHVuaG9vayBhIHBpcGVkIGRlc3RpbmF0aW9uIHN0cmVhbS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0gd2FzIHRoZSBvbmx5IGNvbnN1bWVyIG9mIHRoaXMgc3RyZWFtIChpZSxcbiAgICAgKiB0aGVyZSBhcmUgbm8gb3RoZXIgcGlwZWQgZGVzdGluYXRpb25zIG9yIGAnZGF0YSdgIGV2ZW50IGxpc3RlbmVycylcbiAgICAgKiB0aGVuIHRoZSBmbG93IG9mIGRhdGEgd2lsbCBzdG9wIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3JcbiAgICAgKiB7QGxpbmsgTWluaXBhc3MjcmVzdW1lfSBpcyBleHBsaWNpdGx5IGNhbGxlZC5cbiAgICAgKi9cbiAgICB1bnBpcGUoZGVzdCkge1xuICAgICAgICBjb25zdCBwID0gdGhpc1tQSVBFU10uZmluZChwID0+IHAuZGVzdCA9PT0gZGVzdCk7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBpZiAodGhpc1tQSVBFU10ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbRkxPV0lOR10gJiYgdGhpc1tEQVRBTElTVEVORVJTXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW0ZMT1dJTkddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXNbUElQRVNdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpc1tQSVBFU10uc3BsaWNlKHRoaXNbUElQRVNdLmluZGV4T2YocCksIDEpO1xuICAgICAgICAgICAgcC51bnBpcGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29ufVxuICAgICAqL1xuICAgIGFkZExpc3RlbmVyKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uKGV2LCBoYW5kbGVyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTW9zdGx5IGlkZW50aWNhbCB0byBgRXZlbnRFbWl0dGVyLm9uYCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAnZGF0YScgZXZlbnQgaGFuZGxlciB3aWxsIHRyaWdnZXIgdGhlIGZsb3cgb2YgZGF0YVxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYSAncmVhZGFibGUnIGV2ZW50IGhhbmRsZXIgd2hlbiB0aGVyZSBpcyBkYXRhIHdhaXRpbmcgdG8gYmUgcmVhZFxuICAgICAqICAgd2lsbCBjYXVzZSAncmVhZGFibGUnIHRvIGJlIGVtaXR0ZWQgaW1tZWRpYXRlbHkuXG4gICAgICpcbiAgICAgKiAtIEFkZGluZyBhbiAnZW5kaXNoJyBldmVudCBoYW5kbGVyICgnZW5kJywgJ2ZpbmlzaCcsIGV0Yy4pIHdoaWNoIGhhc1xuICAgICAqICAgYWxyZWFkeSBwYXNzZWQgd2lsbCBjYXVzZSB0aGUgZXZlbnQgdG8gYmUgZW1pdHRlZCBpbW1lZGlhdGVseSBhbmQgYWxsXG4gICAgICogICBoYW5kbGVycyByZW1vdmVkLlxuICAgICAqXG4gICAgICogLSBBZGRpbmcgYW4gJ2Vycm9yJyBldmVudCBoYW5kbGVyIGFmdGVyIGFuIGVycm9yIGhhcyBiZWVuIGVtaXR0ZWQgd2lsbFxuICAgICAqICAgY2F1c2UgdGhlIGV2ZW50IHRvIGJlIHJlLWVtaXR0ZWQgaW1tZWRpYXRlbHkgd2l0aCB0aGUgZXJyb3IgcHJldmlvdXNseVxuICAgICAqICAgcmFpc2VkLlxuICAgICAqL1xuICAgIG9uKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9uKGV2LCBoYW5kbGVyKTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHRoaXNbRElTQ0FSREVEXSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSsrO1xuICAgICAgICAgICAgaWYgKCF0aGlzW1BJUEVTXS5sZW5ndGggJiYgIXRoaXNbRkxPV0lOR10pIHtcbiAgICAgICAgICAgICAgICB0aGlzW1JFU1VNRV0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3JlYWRhYmxlJyAmJiB0aGlzW0JVRkZFUkxFTkdUSF0gIT09IDApIHtcbiAgICAgICAgICAgIHN1cGVyLmVtaXQoJ3JlYWRhYmxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNFbmRpc2goZXYpICYmIHRoaXNbRU1JVFRFRF9FTkRdKSB7XG4gICAgICAgICAgICBzdXBlci5lbWl0KGV2KTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJyAmJiB0aGlzW0VNSVRURURfRVJST1JdKSB7XG4gICAgICAgICAgICBjb25zdCBoID0gaGFuZGxlcjtcbiAgICAgICAgICAgIGlmICh0aGlzW0FTWU5DXSlcbiAgICAgICAgICAgICAgICBkZWZlcigoKSA9PiBoLmNhbGwodGhpcywgdGhpc1tFTUlUVEVEX0VSUk9SXSkpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGguY2FsbCh0aGlzLCB0aGlzW0VNSVRURURfRVJST1JdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGlhcyBmb3Ige0BsaW5rIE1pbmlwYXNzI29mZn1cbiAgICAgKi9cbiAgICByZW1vdmVMaXN0ZW5lcihldiwgaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5vZmYoZXYsIGhhbmRsZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIub2ZmYFxuICAgICAqXG4gICAgICogSWYgYSAnZGF0YScgZXZlbnQgaGFuZGxlciBpcyByZW1vdmVkLCBhbmQgaXQgd2FzIHRoZSBsYXN0IGNvbnN1bWVyXG4gICAgICogKGllLCB0aGVyZSBhcmUgbm8gcGlwZSBkZXN0aW5hdGlvbnMgb3Igb3RoZXIgJ2RhdGEnIGV2ZW50IGxpc3RlbmVycyksXG4gICAgICogdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcCB1bnRpbCB0aGVyZSBpcyBhbm90aGVyIGNvbnN1bWVyIG9yXG4gICAgICoge0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseSBjYWxsZWQuXG4gICAgICovXG4gICAgb2ZmKGV2LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgaGFuZGxlcik7XG4gICAgICAgIC8vIGlmIHdlIHByZXZpb3VzbHkgaGFkIGxpc3RlbmVycywgYW5kIG5vdyB3ZSBkb24ndCwgYW5kIHdlIGRvbid0XG4gICAgICAgIC8vIGhhdmUgYW55IHBpcGVzLCB0aGVuIHN0b3AgdGhlIGZsb3csIHVubGVzcyBpdCdzIGJlZW4gZXhwbGljaXRseVxuICAgICAgICAvLyBwdXQgaW4gYSBkaXNjYXJkZWQgZmxvd2luZyBzdGF0ZSB2aWEgc3RyZWFtLnJlc3VtZSgpLlxuICAgICAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IHRoaXMubGlzdGVuZXJzKCdkYXRhJykubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXNbREFUQUxJU1RFTkVSU10gPT09IDAgJiZcbiAgICAgICAgICAgICAgICAhdGhpc1tESVNDQVJERURdICYmXG4gICAgICAgICAgICAgICAgIXRoaXNbUElQRVNdLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXNbRkxPV0lOR10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNb3N0bHkgaWRlbnRpY2FsIHRvIGBFdmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzYFxuICAgICAqXG4gICAgICogSWYgYWxsICdkYXRhJyBldmVudCBoYW5kbGVycyBhcmUgcmVtb3ZlZCwgYW5kIHRoZXkgd2VyZSB0aGUgbGFzdCBjb25zdW1lclxuICAgICAqIChpZSwgdGhlcmUgYXJlIG5vIHBpcGUgZGVzdGluYXRpb25zKSwgdGhlbiB0aGUgZmxvdyBvZiBkYXRhIHdpbGwgc3RvcFxuICAgICAqIHVudGlsIHRoZXJlIGlzIGFub3RoZXIgY29uc3VtZXIgb3Ige0BsaW5rIE1pbmlwYXNzI3Jlc3VtZX0gaXMgZXhwbGljaXRseVxuICAgICAqIGNhbGxlZC5cbiAgICAgKi9cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoZXYpIHtcbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KTtcbiAgICAgICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpc1tEQVRBTElTVEVORVJTXSA9IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXNbRElTQ0FSREVEXSAmJiAhdGhpc1tQSVBFU10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tGTE9XSU5HXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlICdlbmQnIGV2ZW50IGhhcyBiZWVuIGVtaXR0ZWRcbiAgICAgKi9cbiAgICBnZXQgZW1pdHRlZEVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbRU1JVFRFRF9FTkRdO1xuICAgIH1cbiAgICBbTUFZQkVfRU1JVF9FTkRdKCkge1xuICAgICAgICBpZiAoIXRoaXNbRU1JVFRJTkdfRU5EXSAmJlxuICAgICAgICAgICAgIXRoaXNbRU1JVFRFRF9FTkRdICYmXG4gICAgICAgICAgICAhdGhpc1tERVNUUk9ZRURdICYmXG4gICAgICAgICAgICB0aGlzW0JVRkZFUl0ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzW0VPRl0pIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVtaXQoJ2VuZCcpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdwcmVmaW5pc2gnKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZmluaXNoJyk7XG4gICAgICAgICAgICBpZiAodGhpc1tDTE9TRURdKVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRJTkdfRU5EXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1vc3RseSBpZGVudGljYWwgdG8gYEV2ZW50RW1pdHRlci5lbWl0YCwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAgICogYmVoYXZpb3IgZGlmZmVyZW5jZXMgdG8gcHJldmVudCBkYXRhIGxvc3MgYW5kIHVubmVjZXNzYXJ5IGhhbmdzOlxuICAgICAqXG4gICAgICogSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBkZXN0cm95ZWQsIGFuZCB0aGUgZXZlbnQgaXMgc29tZXRoaW5nIG90aGVyXG4gICAgICogdGhhbiAnY2xvc2UnIG9yICdlcnJvcicsIHRoZW4gYGZhbHNlYCBpcyByZXR1cm5lZCBhbmQgbm8gaGFuZGxlcnNcbiAgICAgKiBhcmUgY2FsbGVkLlxuICAgICAqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzICdlbmQnLCBhbmQgaGFzIGFscmVhZHkgYmVlbiBlbWl0dGVkLCB0aGVuIHRoZSBldmVudFxuICAgICAqIGlzIGlnbm9yZWQuIElmIHRoZSBzdHJlYW0gaXMgaW4gYSBwYXVzZWQgb3Igbm9uLWZsb3dpbmcgc3RhdGUsIHRoZW5cbiAgICAgKiB0aGUgZXZlbnQgd2lsbCBiZSBkZWZlcnJlZCB1bnRpbCBkYXRhIGZsb3cgcmVzdW1lcy4gSWYgdGhlIHN0cmVhbSBpc1xuICAgICAqIGFzeW5jLCB0aGVuIGhhbmRsZXJzIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBuZXh0IHRpY2sgcmF0aGVyIHRoYW5cbiAgICAgKiBpbW1lZGlhdGVseS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnY2xvc2UnLCBhbmQgJ2VuZCcgaGFzIG5vdCB5ZXQgYmVlbiBlbWl0dGVkLCB0aGVuXG4gICAgICogdGhlIGV2ZW50IHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgYWZ0ZXIgJ2VuZCcgaXMgZW1pdHRlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBldmVudCBpcyAnZXJyb3InLCBhbmQgYW4gQWJvcnRTaWduYWwgd2FzIHByb3ZpZGVkIGZvciB0aGUgc3RyZWFtLFxuICAgICAqIGFuZCB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzLCB0aGVuIHRoZSBldmVudCBpcyBpZ25vcmVkLCBtYXRjaGluZyB0aGVcbiAgICAgKiBiZWhhdmlvciBvZiBub2RlIGNvcmUgc3RyZWFtcyBpbiB0aGUgcHJlc2Vuc2Ugb2YgYW4gQWJvcnRTaWduYWwuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgZXZlbnQgaXMgJ2ZpbmlzaCcgb3IgJ3ByZWZpbmlzaCcsIHRoZW4gYWxsIGxpc3RlbmVycyB3aWxsIGJlXG4gICAgICogcmVtb3ZlZCBhZnRlciBlbWl0dGluZyB0aGUgZXZlbnQsIHRvIHByZXZlbnQgZG91YmxlLWZpcmluZy5cbiAgICAgKi9cbiAgICBlbWl0KGV2LCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhcmdzWzBdO1xuICAgICAgICAvLyBlcnJvciBhbmQgY2xvc2UgYXJlIG9ubHkgZXZlbnRzIGFsbG93ZWQgYWZ0ZXIgY2FsbGluZyBkZXN0cm95KClcbiAgICAgICAgaWYgKGV2ICE9PSAnZXJyb3InICYmXG4gICAgICAgICAgICBldiAhPT0gJ2Nsb3NlJyAmJlxuICAgICAgICAgICAgZXYgIT09IERFU1RST1lFRCAmJlxuICAgICAgICAgICAgdGhpc1tERVNUUk9ZRURdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzW09CSkVDVE1PREVdICYmICFkYXRhXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogdGhpc1tBU1lOQ11cbiAgICAgICAgICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlUREFUQV0oZGF0YSkpLCB0cnVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXNbRU1JVERBVEFdKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ID09PSAnZW5kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbRU1JVEVORF0oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ2Nsb3NlJykge1xuICAgICAgICAgICAgdGhpc1tDTE9TRURdID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGRvbid0IGVtaXQgY2xvc2UgYmVmb3JlICdlbmQnIGFuZCAnZmluaXNoJ1xuICAgICAgICAgICAgaWYgKCF0aGlzW0VNSVRURURfRU5EXSAmJiAhdGhpc1tERVNUUk9ZRURdKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygnY2xvc2UnKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIHRoaXNbRU1JVFRFRF9FUlJPUl0gPSBkYXRhO1xuICAgICAgICAgICAgc3VwZXIuZW1pdChFUlJPUiwgZGF0YSk7XG4gICAgICAgICAgICBjb25zdCByZXQgPSAhdGhpc1tTSUdOQUxdIHx8IHRoaXMubGlzdGVuZXJzKCdlcnJvcicpLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gc3VwZXIuZW1pdCgnZXJyb3InLCBkYXRhKVxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChldiA9PT0gJ3Jlc3VtZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHN1cGVyLmVtaXQoJ3Jlc3VtZScpO1xuICAgICAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXYgPT09ICdmaW5pc2gnIHx8IGV2ID09PSAncHJlZmluaXNoJykge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdChldik7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhldik7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvbWUgb3RoZXIgdW5rbm93biBldmVudFxuICAgICAgICBjb25zdCByZXQgPSBzdXBlci5lbWl0KGV2LCAuLi5hcmdzKTtcbiAgICAgICAgdGhpc1tNQVlCRV9FTUlUX0VORF0oKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgW0VNSVREQVRBXShkYXRhKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzW1BJUEVTXSkge1xuICAgICAgICAgICAgaWYgKHAuZGVzdC53cml0ZShkYXRhKSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldCA9IHRoaXNbRElTQ0FSREVEXSA/IGZhbHNlIDogc3VwZXIuZW1pdCgnZGF0YScsIGRhdGEpO1xuICAgICAgICB0aGlzW01BWUJFX0VNSVRfRU5EXSgpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgICBbRU1JVEVORF0oKSB7XG4gICAgICAgIGlmICh0aGlzW0VNSVRURURfRU5EXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdGhpc1tFTUlUVEVEX0VORF0gPSB0cnVlO1xuICAgICAgICB0aGlzLnJlYWRhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzW0FTWU5DXVxuICAgICAgICAgICAgPyAoZGVmZXIoKCkgPT4gdGhpc1tFTUlURU5EMl0oKSksIHRydWUpXG4gICAgICAgICAgICA6IHRoaXNbRU1JVEVORDJdKCk7XG4gICAgfVxuICAgIFtFTUlURU5EMl0oKSB7XG4gICAgICAgIGlmICh0aGlzW0RFQ09ERVJdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpc1tERUNPREVSXS5lbmQoKTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXNbUElQRVNdKSB7XG4gICAgICAgICAgICAgICAgICAgIHAuZGVzdC53cml0ZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzW0RJU0NBUkRFRF0pXG4gICAgICAgICAgICAgICAgICAgIHN1cGVyLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgdGhpc1tQSVBFU10pIHtcbiAgICAgICAgICAgIHAuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0ID0gc3VwZXIuZW1pdCgnZW5kJyk7XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdlbmQnKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIGFsbCBlbWl0dGVkIGRhdGEgb25jZVxuICAgICAqIHRoZSBzdHJlYW0gZW5kcy5cbiAgICAgKi9cbiAgICBhc3luYyBjb2xsZWN0KCkge1xuICAgICAgICBjb25zdCBidWYgPSBPYmplY3QuYXNzaWduKFtdLCB7XG4gICAgICAgICAgICBkYXRhTGVuZ3RoOiAwLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzW09CSkVDVE1PREVdKVxuICAgICAgICAgICAgYnVmLmRhdGFMZW5ndGggPSAwO1xuICAgICAgICAvLyBzZXQgdGhlIHByb21pc2UgZmlyc3QsIGluIGNhc2UgYW4gZXJyb3IgaXMgcmFpc2VkXG4gICAgICAgIC8vIGJ5IHRyaWdnZXJpbmcgdGhlIGZsb3cgaGVyZS5cbiAgICAgICAgY29uc3QgcCA9IHRoaXMucHJvbWlzZSgpO1xuICAgICAgICB0aGlzLm9uKCdkYXRhJywgYyA9PiB7XG4gICAgICAgICAgICBidWYucHVzaChjKTtcbiAgICAgICAgICAgIGlmICghdGhpc1tPQkpFQ1RNT0RFXSlcbiAgICAgICAgICAgICAgICBidWYuZGF0YUxlbmd0aCArPSBjLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHA7XG4gICAgICAgIHJldHVybiBidWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgZW1pdHRlZCBkYXRhXG4gICAgICogb25jZSB0aGUgc3RyZWFtIGVuZHMuXG4gICAgICpcbiAgICAgKiBOb3QgYWxsb3dlZCBvbiBvYmplY3RNb2RlIHN0cmVhbXMuXG4gICAgICovXG4gICAgYXN5bmMgY29uY2F0KCkge1xuICAgICAgICBpZiAodGhpc1tPQkpFQ1RNT0RFXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgY29uY2F0IGluIG9iamVjdE1vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWYgPSBhd2FpdCB0aGlzLmNvbGxlY3QoKTtcbiAgICAgICAgcmV0dXJuICh0aGlzW0VOQ09ESU5HXVxuICAgICAgICAgICAgPyBidWYuam9pbignJylcbiAgICAgICAgICAgIDogQnVmZmVyLmNvbmNhdChidWYsIGJ1Zi5kYXRhTGVuZ3RoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZvaWQgUHJvbWlzZSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHN0cmVhbSBlbmRzLlxuICAgICAqL1xuICAgIGFzeW5jIHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uKERFU1RST1lFRCwgKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignc3RyZWFtIGRlc3Ryb3llZCcpKSk7XG4gICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVyID0+IHJlamVjdChlcikpO1xuICAgICAgICAgICAgdGhpcy5vbignZW5kJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzeW5jaHJvbm91cyBgZm9yIGF3YWl0IG9mYCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIHdpbGwgY29udGludWUgZW1pdHRpbmcgYWxsIGNodW5rcyB1bnRpbCB0aGUgc3RyZWFtIHRlcm1pbmF0ZXMuXG4gICAgICovXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgICAgLy8gc2V0IHRoaXMgdXAgZnJvbnQsIGluIGNhc2UgdGhlIGNvbnN1bWVyIGRvZXNuJ3QgY2FsbCBuZXh0KClcbiAgICAgICAgLy8gcmlnaHQgYXdheS5cbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gZmFsc2U7XG4gICAgICAgIGxldCBzdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHN0b3AgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICAgICAgICBzdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdG9wcGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChyZXMgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmVzIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXNbRU9GXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpO1xuICAgICAgICAgICAgbGV0IHJlc29sdmU7XG4gICAgICAgICAgICBsZXQgcmVqZWN0O1xuICAgICAgICAgICAgY29uc3Qgb25lcnIgPSAoZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2VuZCcsIG9uZW5kKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZihERVNUUk9ZRUQsIG9uZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgc3RvcCgpO1xuICAgICAgICAgICAgICAgIHJlamVjdChlcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgb25kYXRhID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlbmQnLCBvbmVuZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgdmFsdWUsIGRvbmU6ICEhdGhpc1tFT0ZdIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG9uZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub2ZmKCdlcnJvcicsIG9uZXJyKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZignZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoREVTVFJPWUVELCBvbmRlc3Ryb3kpO1xuICAgICAgICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBvbmRlc3Ryb3kgPSAoKSA9PiBvbmVycihuZXcgRXJyb3IoJ3N0cmVhbSBkZXN0cm95ZWQnKSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVqZWN0ID0gcmVqO1xuICAgICAgICAgICAgICAgIHJlc29sdmUgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5vbmNlKERFU1RST1lFRCwgb25kZXN0cm95KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uY2UoJ2Vycm9yJywgb25lcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZW5kJywgb25lbmQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25jZSgnZGF0YScsIG9uZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICB0aHJvdzogc3RvcCxcbiAgICAgICAgICAgIHJldHVybjogc3RvcCxcbiAgICAgICAgICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luYyAoKSA9PiB7IH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN5bmNocm9ub3VzIGBmb3Igb2ZgIGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBpdGVyYXRpb24gd2lsbCB0ZXJtaW5hdGUgd2hlbiB0aGUgaW50ZXJuYWwgYnVmZmVyIHJ1bnMgb3V0LCBldmVuXG4gICAgICogaWYgdGhlIHN0cmVhbSBoYXMgbm90IHlldCB0ZXJtaW5hdGVkLlxuICAgICAqL1xuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICAvLyBzZXQgdGhpcyB1cCBmcm9udCwgaW4gY2FzZSB0aGUgY29uc3VtZXIgZG9lc24ndCBjYWxsIG5leHQoKVxuICAgICAgICAvLyByaWdodCBhd2F5LlxuICAgICAgICB0aGlzW0RJU0NBUkRFRF0gPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgICAgICAgIHRoaXMub2ZmKEVSUk9SLCBzdG9wKTtcbiAgICAgICAgICAgIHRoaXMub2ZmKERFU1RST1lFRCwgc3RvcCk7XG4gICAgICAgICAgICB0aGlzLm9mZignZW5kJywgc3RvcCk7XG4gICAgICAgICAgICBzdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdG9wcGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBzdG9wKCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gc3RvcCgpIDogeyBkb25lOiBmYWxzZSwgdmFsdWUgfTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbmNlKCdlbmQnLCBzdG9wKTtcbiAgICAgICAgdGhpcy5vbmNlKEVSUk9SLCBzdG9wKTtcbiAgICAgICAgdGhpcy5vbmNlKERFU1RST1lFRCwgc3RvcCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgdGhyb3c6IHN0b3AsXG4gICAgICAgICAgICByZXR1cm46IHN0b3AsXG4gICAgICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbU3ltYm9sLmRpc3Bvc2VdOiAoKSA9PiB7IH0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgYSBzdHJlYW0sIHByZXZlbnRpbmcgaXQgZnJvbSBiZWluZyB1c2VkIGZvciBhbnkgZnVydGhlciBwdXJwb3NlLlxuICAgICAqXG4gICAgICogSWYgdGhlIHN0cmVhbSBoYXMgYSBgY2xvc2UoKWAgbWV0aG9kLCB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIG9uXG4gICAgICogZGVzdHJ1Y3Rpb24uXG4gICAgICpcbiAgICAgKiBBZnRlciBkZXN0cnVjdGlvbiwgYW55IGF0dGVtcHQgdG8gd3JpdGUgZGF0YSwgcmVhZCBkYXRhLCBvciBlbWl0IG1vc3RcbiAgICAgKiBldmVudHMgd2lsbCBiZSBpZ25vcmVkLlxuICAgICAqXG4gICAgICogSWYgYW4gZXJyb3IgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZW4gaXQgd2lsbCBiZSBlbWl0dGVkIGluIGFuXG4gICAgICogJ2Vycm9yJyBldmVudC5cbiAgICAgKi9cbiAgICBkZXN0cm95KGVyKSB7XG4gICAgICAgIGlmICh0aGlzW0RFU1RST1lFRF0pIHtcbiAgICAgICAgICAgIGlmIChlcilcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChERVNUUk9ZRUQpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpc1tERVNUUk9ZRURdID0gdHJ1ZTtcbiAgICAgICAgdGhpc1tESVNDQVJERURdID0gdHJ1ZTtcbiAgICAgICAgLy8gdGhyb3cgYXdheSBhbGwgYnVmZmVyZWQgZGF0YSwgaXQncyBuZXZlciBjb21pbmcgb3V0XG4gICAgICAgIHRoaXNbQlVGRkVSXS5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzW0JVRkZFUkxFTkdUSF0gPSAwO1xuICAgICAgICBjb25zdCB3YyA9IHRoaXM7XG4gICAgICAgIGlmICh0eXBlb2Ygd2MuY2xvc2UgPT09ICdmdW5jdGlvbicgJiYgIXRoaXNbQ0xPU0VEXSlcbiAgICAgICAgICAgIHdjLmNsb3NlKCk7XG4gICAgICAgIGlmIChlcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcik7XG4gICAgICAgIC8vIGlmIG5vIGVycm9yIHRvIGVtaXQsIHN0aWxsIHJlamVjdCBwZW5kaW5nIHByb21pc2VzXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuZW1pdChERVNUUk9ZRUQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWxpYXMgZm9yIHtAbGluayBpc1N0cmVhbX1cbiAgICAgKlxuICAgICAqIEZvcm1lciBleHBvcnQgbG9jYXRpb24sIG1haW50YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0IGlzU3RyZWFtKCkge1xuICAgICAgICByZXR1cm4gaXNTdHJlYW07XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICIvLyB0aGlzIGlzIGp1c3QgYSB2ZXJ5IGxpZ2h0IHdyYXBwZXIgYXJvdW5kIDIgYXJyYXlzIHdpdGggYW4gb2Zmc2V0IGluZGV4XG5pbXBvcnQgeyBHTE9CU1RBUiB9IGZyb20gJ21pbmltYXRjaCc7XG5jb25zdCBpc1BhdHRlcm5MaXN0ID0gKHBsKSA9PiBwbC5sZW5ndGggPj0gMTtcbmNvbnN0IGlzR2xvYkxpc3QgPSAoZ2wpID0+IGdsLmxlbmd0aCA+PSAxO1xuLyoqXG4gKiBBbiBpbW11dGFibGUtaXNoIHZpZXcgb24gYW4gYXJyYXkgb2YgZ2xvYiBwYXJ0cyBhbmQgdGhlaXIgcGFyc2VkXG4gKiByZXN1bHRzXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXR0ZXJuIHtcbiAgICAjcGF0dGVybkxpc3Q7XG4gICAgI2dsb2JMaXN0O1xuICAgICNpbmRleDtcbiAgICBsZW5ndGg7XG4gICAgI3BsYXRmb3JtO1xuICAgICNyZXN0O1xuICAgICNnbG9iU3RyaW5nO1xuICAgICNpc0RyaXZlO1xuICAgICNpc1VOQztcbiAgICAjaXNBYnNvbHV0ZTtcbiAgICAjZm9sbG93R2xvYnN0YXIgPSB0cnVlO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5MaXN0LCBnbG9iTGlzdCwgaW5kZXgsIHBsYXRmb3JtKSB7XG4gICAgICAgIGlmICghaXNQYXR0ZXJuTGlzdChwYXR0ZXJuTGlzdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VtcHR5IHBhdHRlcm4gbGlzdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNHbG9iTGlzdChnbG9iTGlzdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VtcHR5IGdsb2IgbGlzdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnbG9iTGlzdC5sZW5ndGggIT09IHBhdHRlcm5MaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWlzbWF0Y2hlZCBwYXR0ZXJuIGxpc3QgYW5kIGdsb2IgbGlzdCBsZW5ndGhzJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZW5ndGggPSBwYXR0ZXJuTGlzdC5sZW5ndGg7XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2luZGV4IG91dCBvZiByYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3BhdHRlcm5MaXN0ID0gcGF0dGVybkxpc3Q7XG4gICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gZ2xvYkxpc3Q7XG4gICAgICAgIHRoaXMuI2luZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuI3BsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIC8vIG5vcm1hbGl6ZSByb290IGVudHJpZXMgb2YgYWJzb2x1dGUgcGF0dGVybnMgb24gaW5pdGlhbCBjcmVhdGlvbi5cbiAgICAgICAgaWYgKHRoaXMuI2luZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBjOiA9PiBbJ2M6LyddXG4gICAgICAgICAgICAvLyBDOi8gPT4gWydDOi8nXVxuICAgICAgICAgICAgLy8gQzoveCA9PiBbJ0M6LycsICd4J11cbiAgICAgICAgICAgIC8vIC8vaG9zdC9zaGFyZSA9PiBbJy8vaG9zdC9zaGFyZS8nXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlLyA9PiBbJy8vaG9zdC9zaGFyZS8nXVxuICAgICAgICAgICAgLy8gLy9ob3N0L3NoYXJlL3ggPT4gWycvL2hvc3Qvc2hhcmUvJywgJ3gnXVxuICAgICAgICAgICAgLy8gL2V0YyA9PiBbJy8nLCAnZXRjJ11cbiAgICAgICAgICAgIC8vIC8gPT4gWycvJ11cbiAgICAgICAgICAgIGlmICh0aGlzLmlzVU5DKCkpIHtcbiAgICAgICAgICAgICAgICAvLyAnJyAvICcnIC8gJ2hvc3QnIC8gJ3NoYXJlJ1xuICAgICAgICAgICAgICAgIGNvbnN0IFtwMCwgcDEsIHAyLCBwMywgLi4ucHJlc3RdID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgW2cwLCBnMSwgZzIsIGczLCAuLi5ncmVzdF0gPSB0aGlzLiNnbG9iTGlzdDtcbiAgICAgICAgICAgICAgICBpZiAocHJlc3RbMF0gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZHMgaW4gL1xuICAgICAgICAgICAgICAgICAgICBwcmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBncmVzdC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwID0gW3AwLCBwMSwgcDIsIHAzLCAnJ10uam9pbignLycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGcgPSBbZzAsIGcxLCBnMiwgZzMsICcnXS5qb2luKCcvJyk7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBbcCwgLi4ucHJlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gW2csIC4uLmdyZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuI3BhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNEcml2ZSgpIHx8IHRoaXMuaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3AxLCAuLi5wcmVzdF0gPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgICAgICAgICBjb25zdCBbZzEsIC4uLmdyZXN0XSA9IHRoaXMuI2dsb2JMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChwcmVzdFswXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5kcyBpbiAvXG4gICAgICAgICAgICAgICAgICAgIHByZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGdyZXN0LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBwMSArICcvJztcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gZzEgKyAnLyc7XG4gICAgICAgICAgICAgICAgdGhpcy4jcGF0dGVybkxpc3QgPSBbcCwgLi4ucHJlc3RdO1xuICAgICAgICAgICAgICAgIHRoaXMuI2dsb2JMaXN0ID0gW2csIC4uLmdyZXN0XTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuI3BhdHRlcm5MaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIHBhcnNlZCBsaXN0IG9mIHBhdHRlcm5zXG4gICAgICovXG4gICAgcGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBvZiBpZiBwYXR0ZXJuKCkgcmV0dXJucyBhIHN0cmluZ1xuICAgICAqL1xuICAgIGlzU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuI3BhdHRlcm5MaXN0W3RoaXMuI2luZGV4XSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgb2YgaWYgcGF0dGVybigpIHJldHVybnMgR0xPQlNUQVJcbiAgICAgKi9cbiAgICBpc0dsb2JzdGFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdID09PSBHTE9CU1RBUjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogdHJ1ZSBpZiBwYXR0ZXJuKCkgcmV0dXJucyBhIHJlZ2V4cFxuICAgICAqL1xuICAgIGlzUmVnRXhwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGF0dGVybkxpc3RbdGhpcy4jaW5kZXhdIGluc3RhbmNlb2YgUmVnRXhwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgLy1qb2luZWQgc2V0IG9mIGdsb2IgcGFydHMgdGhhdCBtYWtlIHVwIHRoaXMgcGF0dGVyblxuICAgICAqL1xuICAgIGdsb2JTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy4jZ2xvYlN0cmluZyA9XG4gICAgICAgICAgICB0aGlzLiNnbG9iU3RyaW5nIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuI2luZGV4ID09PSAwID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Fic29sdXRlKCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jZ2xvYkxpc3RbMF0gKyB0aGlzLiNnbG9iTGlzdC5zbGljZSgxKS5qb2luKCcvJylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy4jZ2xvYkxpc3Quam9pbignLycpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4jZ2xvYkxpc3Quc2xpY2UodGhpcy4jaW5kZXgpLmpvaW4oJy8nKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB0cnVlIGlmIHRoZXJlIGFyZSBtb3JlIHBhdHRlcm4gcGFydHMgYWZ0ZXIgdGhpcyBvbmVcbiAgICAgKi9cbiAgICBoYXNNb3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPiB0aGlzLiNpbmRleCArIDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGFmdGVyIHRoaXMgcGFydCwgb3IgbnVsbCBpZiB0aGlzIGlzIHRoZSBlbmRcbiAgICAgKi9cbiAgICByZXN0KCkge1xuICAgICAgICBpZiAodGhpcy4jcmVzdCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI3Jlc3Q7XG4gICAgICAgIGlmICghdGhpcy5oYXNNb3JlKCkpXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuI3Jlc3QgPSBudWxsKTtcbiAgICAgICAgdGhpcy4jcmVzdCA9IG5ldyBQYXR0ZXJuKHRoaXMuI3BhdHRlcm5MaXN0LCB0aGlzLiNnbG9iTGlzdCwgdGhpcy4jaW5kZXggKyAxLCB0aGlzLiNwbGF0Zm9ybSk7XG4gICAgICAgIHRoaXMuI3Jlc3QuI2lzQWJzb2x1dGUgPSB0aGlzLiNpc0Fic29sdXRlO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc1VOQyA9IHRoaXMuI2lzVU5DO1xuICAgICAgICB0aGlzLiNyZXN0LiNpc0RyaXZlID0gdGhpcy4jaXNEcml2ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Jlc3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHRydWUgaWYgdGhlIHBhdHRlcm4gcmVwcmVzZW50cyBhIC8vdW5jL3BhdGgvIG9uIHdpbmRvd3NcbiAgICAgKi9cbiAgICBpc1VOQygpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzVU5DICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNVTkNcbiAgICAgICAgICAgIDogKHRoaXMuI2lzVU5DID1cbiAgICAgICAgICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNpbmRleCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBwbFswXSA9PT0gJycgJiZcbiAgICAgICAgICAgICAgICAgICAgcGxbMV0gPT09ICcnICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBwbFsyXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgISFwbFsyXSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcGxbM10gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICEhcGxbM10pO1xuICAgIH1cbiAgICAvLyBwYXR0ZXJuIGxpa2UgQzovLi4uXG4gICAgLy8gc3BsaXQgPSBbJ0M6JywgLi4uXVxuICAgIC8vIFhYWDogd291bGQgYmUgbmljZSB0byBoYW5kbGUgcGF0dGVybnMgbGlrZSBgYzoqYCB0byB0ZXN0IHRoZSBjd2RcbiAgICAvLyBpbiBjOiBmb3IgKiwgYnV0IEkgZG9uJ3Qga25vdyBvZiBhIHdheSB0byBldmVuIGZpZ3VyZSBvdXQgd2hhdCB0aGF0XG4gICAgLy8gY3dkIGlzIHdpdGhvdXQgYWN0dWFsbHkgY2hkaXInaW5nIGludG8gaXQ/XG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgcGF0dGVybiBzdGFydHMgd2l0aCBhIGRyaXZlIGxldHRlciBvbiBXaW5kb3dzXG4gICAgICovXG4gICAgaXNEcml2ZSgpIHtcbiAgICAgICAgY29uc3QgcGwgPSB0aGlzLiNwYXR0ZXJuTGlzdDtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2lzRHJpdmUgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB0aGlzLiNpc0RyaXZlXG4gICAgICAgICAgICA6ICh0aGlzLiNpc0RyaXZlID1cbiAgICAgICAgICAgICAgICB0aGlzLiNwbGF0Zm9ybSA9PT0gJ3dpbjMyJyAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNpbmRleCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHBsWzBdID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAvXlthLXpdOiQvaS50ZXN0KHBsWzBdKSk7XG4gICAgfVxuICAgIC8vIHBhdHRlcm4gPSAnLycgb3IgJy8uLi4nIG9yICcveC8uLi4nXG4gICAgLy8gc3BsaXQgPSBbJycsICcnXSBvciBbJycsIC4uLl0gb3IgWycnLCAneCcsIC4uLl1cbiAgICAvLyBEcml2ZSBhbmQgVU5DIGJvdGggY29uc2lkZXJlZCBhYnNvbHV0ZSBvbiB3aW5kb3dzXG4gICAgLyoqXG4gICAgICogVHJ1ZSBpZiB0aGUgcGF0dGVybiBpcyByb290ZWQgb24gYW4gYWJzb2x1dGUgcGF0aFxuICAgICAqL1xuICAgIGlzQWJzb2x1dGUoKSB7XG4gICAgICAgIGNvbnN0IHBsID0gdGhpcy4jcGF0dGVybkxpc3Q7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0Fic29sdXRlICE9PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcy4jaXNBYnNvbHV0ZVxuICAgICAgICAgICAgOiAodGhpcy4jaXNBYnNvbHV0ZSA9XG4gICAgICAgICAgICAgICAgKHBsWzBdID09PSAnJyAmJiBwbC5sZW5ndGggPiAxKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRHJpdmUoKSB8fFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVU5DKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjb25zdW1lIHRoZSByb290IG9mIHRoZSBwYXR0ZXJuLCBhbmQgcmV0dXJuIGl0XG4gICAgICovXG4gICAgcm9vdCgpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMuI3BhdHRlcm5MaXN0WzBdO1xuICAgICAgICByZXR1cm4gKHR5cGVvZiBwID09PSAnc3RyaW5nJyAmJiB0aGlzLmlzQWJzb2x1dGUoKSAmJiB0aGlzLiNpbmRleCA9PT0gMCkgP1xuICAgICAgICAgICAgcFxuICAgICAgICAgICAgOiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBjdXJyZW50IGdsb2JzdGFyIHBhdHRlcm4gaXMgYWxsb3dlZCB0byBmb2xsb3dcbiAgICAgKiBhIHN5bWJvbGljIGxpbmsuXG4gICAgICovXG4gICAgY2hlY2tGb2xsb3dHbG9ic3RhcigpIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy4jaW5kZXggPT09IDAgfHxcbiAgICAgICAgICAgICF0aGlzLmlzR2xvYnN0YXIoKSB8fFxuICAgICAgICAgICAgIXRoaXMuI2ZvbGxvd0dsb2JzdGFyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFyayB0aGF0IHRoZSBjdXJyZW50IGdsb2JzdGFyIHBhdHRlcm4gaXMgZm9sbG93aW5nIGEgc3ltYm9saWMgbGlua1xuICAgICAqL1xuICAgIG1hcmtGb2xsb3dHbG9ic3RhcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI2luZGV4ID09PSAwIHx8ICF0aGlzLmlzR2xvYnN0YXIoKSB8fCAhdGhpcy4jZm9sbG93R2xvYnN0YXIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHRoaXMuI2ZvbGxvd0dsb2JzdGFyID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhdHRlcm4uanMubWFwIiwKICAgICIvLyBnaXZlIGl0IGEgcGF0dGVybiwgYW5kIGl0J2xsIGJlIGFibGUgdG8gdGVsbCB5b3UgaWZcbi8vIGEgZ2l2ZW4gcGF0aCBzaG91bGQgYmUgaWdub3JlZC5cbi8vIElnbm9yaW5nIGEgcGF0aCBpZ25vcmVzIGl0cyBjaGlsZHJlbiBpZiB0aGUgcGF0dGVybiBlbmRzIGluIC8qKlxuLy8gSWdub3JlcyBhcmUgYWx3YXlzIHBhcnNlZCBpbiBkb3Q6dHJ1ZSBtb2RlXG5pbXBvcnQgeyBNaW5pbWF0Y2ggfSBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHsgUGF0dGVybiB9IGZyb20gJy4vcGF0dGVybi5qcyc7XG5jb25zdCBkZWZhdWx0UGxhdGZvcm0gPSAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmXG4gICAgcHJvY2VzcyAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLnBsYXRmb3JtID09PSAnc3RyaW5nJykgP1xuICAgIHByb2Nlc3MucGxhdGZvcm1cbiAgICA6ICdsaW51eCc7XG4vKipcbiAqIENsYXNzIHVzZWQgdG8gcHJvY2VzcyBpZ25vcmVkIHBhdHRlcm5zXG4gKi9cbmV4cG9ydCBjbGFzcyBJZ25vcmUge1xuICAgIHJlbGF0aXZlO1xuICAgIHJlbGF0aXZlQ2hpbGRyZW47XG4gICAgYWJzb2x1dGU7XG4gICAgYWJzb2x1dGVDaGlsZHJlbjtcbiAgICBwbGF0Zm9ybTtcbiAgICBtbW9wdHM7XG4gICAgY29uc3RydWN0b3IoaWdub3JlZCwgeyBub2JyYWNlLCBub2Nhc2UsIG5vZXh0LCBub2dsb2JzdGFyLCBwbGF0Zm9ybSA9IGRlZmF1bHRQbGF0Zm9ybSwgfSkge1xuICAgICAgICB0aGlzLnJlbGF0aXZlID0gW107XG4gICAgICAgIHRoaXMuYWJzb2x1dGUgPSBbXTtcbiAgICAgICAgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuID0gW107XG4gICAgICAgIHRoaXMuYWJzb2x1dGVDaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm07XG4gICAgICAgIHRoaXMubW1vcHRzID0ge1xuICAgICAgICAgICAgZG90OiB0cnVlLFxuICAgICAgICAgICAgbm9icmFjZSxcbiAgICAgICAgICAgIG5vY2FzZSxcbiAgICAgICAgICAgIG5vZXh0LFxuICAgICAgICAgICAgbm9nbG9ic3RhcixcbiAgICAgICAgICAgIG9wdGltaXphdGlvbkxldmVsOiAyLFxuICAgICAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgICAgICBub2NvbW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBub25lZ2F0ZTogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBpZ24gb2YgaWdub3JlZClcbiAgICAgICAgICAgIHRoaXMuYWRkKGlnbik7XG4gICAgfVxuICAgIGFkZChpZ24pIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIGxpdHRsZSB3ZWlyZCwgYnV0IGl0IGdpdmVzIHVzIGEgY2xlYW4gc2V0IG9mIG9wdGltaXplZFxuICAgICAgICAvLyBtaW5pbWF0Y2ggbWF0Y2hlcnMsIHdpdGhvdXQgZ2V0dGluZyB0cmlwcGVkIHVwIGlmIG9uZSBvZiB0aGVtXG4gICAgICAgIC8vIGVuZHMgaW4gLyoqIGluc2lkZSBhIGJyYWNlIHNlY3Rpb24sIGFuZCBpdCdzIG9ubHkgaW5lZmZpY2llbnQgYXRcbiAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSB3YWxrLCBub3QgYWxvbmcgaXQuXG4gICAgICAgIC8vIEl0J2QgYmUgbmljZSBpZiB0aGUgUGF0dGVybiBjbGFzcyBqdXN0IGhhZCBhIC50ZXN0KCkgbWV0aG9kLCBidXRcbiAgICAgICAgLy8gaGFuZGxpbmcgZ2xvYnN0YXJzIGlzIGEgYml0IG9mIGEgcGl0YSwgYW5kIHRoYXQgY29kZSBhbHJlYWR5IGxpdmVzXG4gICAgICAgIC8vIGluIG1pbmltYXRjaCBhbnl3YXkuXG4gICAgICAgIC8vIEFub3RoZXIgd2F5IHdvdWxkIGJlIGlmIG1heWJlIE1pbmltYXRjaCBjb3VsZCB0YWtlIGl0cyBzZXQvZ2xvYlBhcnRzXG4gICAgICAgIC8vIGFzIGFuIG9wdGlvbiwgYW5kIHRoZW4gd2UgY291bGQgYXQgbGVhc3QganVzdCB1c2UgUGF0dGVybiB0byB0ZXN0XG4gICAgICAgIC8vIGZvciBhYnNvbHV0ZS1uZXNzLlxuICAgICAgICAvLyBZZXQgYW5vdGhlciB3YXksIE1pbmltYXRjaCBjb3VsZCB0YWtlIGFuIGFycmF5IG9mIGdsb2Igc3RyaW5ncywgYW5kXG4gICAgICAgIC8vIGEgY3dkIG9wdGlvbiwgYW5kIGRvIHRoZSByaWdodCB0aGluZy5cbiAgICAgICAgY29uc3QgbW0gPSBuZXcgTWluaW1hdGNoKGlnbiwgdGhpcy5tbW9wdHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1tLnNldC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gbW0uc2V0W2ldO1xuICAgICAgICAgICAgY29uc3QgZ2xvYlBhcnRzID0gbW0uZ2xvYlBhcnRzW2ldO1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICBpZiAoIXBhcnNlZCB8fCAhZ2xvYlBhcnRzKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHBhdHRlcm4gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzdHJpcCBvZmYgbGVhZGluZyAuLyBwb3J0aW9uc1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ub2RlLWdsb2IvaXNzdWVzLzU3MFxuICAgICAgICAgICAgd2hpbGUgKHBhcnNlZFswXSA9PT0gJy4nICYmIGdsb2JQYXJ0c1swXSA9PT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgZ2xvYlBhcnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgY29uc3QgcCA9IG5ldyBQYXR0ZXJuKHBhcnNlZCwgZ2xvYlBhcnRzLCAwLCB0aGlzLnBsYXRmb3JtKTtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBuZXcgTWluaW1hdGNoKHAuZ2xvYlN0cmluZygpLCB0aGlzLm1tb3B0cyk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGdsb2JQYXJ0c1tnbG9iUGFydHMubGVuZ3RoIC0gMV0gPT09ICcqKic7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZSA9IHAuaXNBYnNvbHV0ZSgpO1xuICAgICAgICAgICAgaWYgKGFic29sdXRlKVxuICAgICAgICAgICAgICAgIHRoaXMuYWJzb2x1dGUucHVzaChtKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlLnB1c2gobSk7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoYWJzb2x1dGUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJzb2x1dGVDaGlsZHJlbi5wdXNoKG0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZUNoaWxkcmVuLnB1c2gobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWdub3JlZChwKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gcC5mdWxscGF0aCgpO1xuICAgICAgICBjb25zdCBmdWxscGF0aHMgPSBgJHtmdWxscGF0aH0vYDtcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSBwLnJlbGF0aXZlKCkgfHwgJy4nO1xuICAgICAgICBjb25zdCByZWxhdGl2ZXMgPSBgJHtyZWxhdGl2ZX0vYDtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMucmVsYXRpdmUpIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKHJlbGF0aXZlKSB8fCBtLm1hdGNoKHJlbGF0aXZlcykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBtIG9mIHRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKGZ1bGxwYXRoKSB8fCBtLm1hdGNoKGZ1bGxwYXRocykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjaGlsZHJlbklnbm9yZWQocCkge1xuICAgICAgICBjb25zdCBmdWxscGF0aCA9IHAuZnVsbHBhdGgoKSArICcvJztcbiAgICAgICAgY29uc3QgcmVsYXRpdmUgPSAocC5yZWxhdGl2ZSgpIHx8ICcuJykgKyAnLyc7XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLnJlbGF0aXZlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChtLm1hdGNoKHJlbGF0aXZlKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IG0gb2YgdGhpcy5hYnNvbHV0ZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAobS5tYXRjaChmdWxscGF0aCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlnbm9yZS5qcy5tYXAiLAogICAgIi8vIHN5bmNocm9ub3VzIHV0aWxpdHkgZm9yIGZpbHRlcmluZyBlbnRyaWVzIGFuZCBjYWxjdWxhdGluZyBzdWJ3YWxrc1xuaW1wb3J0IHsgR0xPQlNUQVIgfSBmcm9tICdtaW5pbWF0Y2gnO1xuLyoqXG4gKiBBIGNhY2hlIG9mIHdoaWNoIHBhdHRlcm5zIGhhdmUgYmVlbiBwcm9jZXNzZWQgZm9yIGEgZ2l2ZW4gUGF0aFxuICovXG5leHBvcnQgY2xhc3MgSGFzV2Fsa2VkQ2FjaGUge1xuICAgIHN0b3JlO1xuICAgIGNvbnN0cnVjdG9yKHN0b3JlID0gbmV3IE1hcCgpKSB7XG4gICAgICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICB9XG4gICAgY29weSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIYXNXYWxrZWRDYWNoZShuZXcgTWFwKHRoaXMuc3RvcmUpKTtcbiAgICB9XG4gICAgaGFzV2Fsa2VkKHRhcmdldCwgcGF0dGVybikge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXQodGFyZ2V0LmZ1bGxwYXRoKCkpPy5oYXMocGF0dGVybi5nbG9iU3RyaW5nKCkpO1xuICAgIH1cbiAgICBzdG9yZVdhbGtlZCh0YXJnZXQsIHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgZnVsbHBhdGggPSB0YXJnZXQuZnVsbHBhdGgoKTtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gdGhpcy5zdG9yZS5nZXQoZnVsbHBhdGgpO1xuICAgICAgICBpZiAoY2FjaGVkKVxuICAgICAgICAgICAgY2FjaGVkLmFkZChwYXR0ZXJuLmdsb2JTdHJpbmcoKSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0KGZ1bGxwYXRoLCBuZXcgU2V0KFtwYXR0ZXJuLmdsb2JTdHJpbmcoKV0pKTtcbiAgICB9XG59XG4vKipcbiAqIEEgcmVjb3JkIG9mIHdoaWNoIHBhdGhzIGhhdmUgYmVlbiBtYXRjaGVkIGluIGEgZ2l2ZW4gd2FsayBzdGVwLFxuICogYW5kIHdoZXRoZXIgdGhleSBvbmx5IGFyZSBjb25zaWRlcmVkIGEgbWF0Y2ggaWYgdGhleSBhcmUgYSBkaXJlY3RvcnksXG4gKiBhbmQgd2hldGhlciB0aGVpciBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIHNob3VsZCBiZSByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hdGNoUmVjb3JkIHtcbiAgICBzdG9yZSA9IG5ldyBNYXAoKTtcbiAgICBhZGQodGFyZ2V0LCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgbiA9IChhYnNvbHV0ZSA/IDIgOiAwKSB8IChpZkRpciA/IDEgOiAwKTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc3RvcmUuZ2V0KHRhcmdldCk7XG4gICAgICAgIHRoaXMuc3RvcmUuc2V0KHRhcmdldCwgY3VycmVudCA9PT0gdW5kZWZpbmVkID8gbiA6IG4gJiBjdXJyZW50KTtcbiAgICB9XG4gICAgLy8gbWF0Y2gsIGFic29sdXRlLCBpZmRpclxuICAgIGVudHJpZXMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5zdG9yZS5lbnRyaWVzKCldLm1hcCgoW3BhdGgsIG5dKSA9PiBbXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgISEobiAmIDIpLFxuICAgICAgICAgICAgISEobiAmIDEpLFxuICAgICAgICBdKTtcbiAgICB9XG59XG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBwYXR0ZXJucyB0aGF0IG11c3QgYmUgcHJvY2Vzc2VkIGluIGEgc3Vic2VxdWVudCBzdGVwXG4gKiBmb3IgYSBnaXZlbiBwYXRoLlxuICovXG5leHBvcnQgY2xhc3MgU3ViV2Fsa3Mge1xuICAgIHN0b3JlID0gbmV3IE1hcCgpO1xuICAgIGFkZCh0YXJnZXQsIHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKCF0YXJnZXQuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuc3RvcmUuZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmIChzdWJzKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnMuZmluZChwID0+IHAuZ2xvYlN0cmluZygpID09PSBwYXR0ZXJuLmdsb2JTdHJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICBzdWJzLnB1c2gocGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zdG9yZS5zZXQodGFyZ2V0LCBbcGF0dGVybl0pO1xuICAgIH1cbiAgICBnZXQodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLnN0b3JlLmdldCh0YXJnZXQpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgaWYgKCFzdWJzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F0dGVtcHRpbmcgdG8gd2FsayB1bmtub3duIHBhdGgnKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICByZXR1cm4gc3VicztcbiAgICB9XG4gICAgZW50cmllcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5cygpLm1hcChrID0+IFtrLCB0aGlzLnN0b3JlLmdldChrKV0pO1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuc3RvcmUua2V5cygpXS5maWx0ZXIodCA9PiB0LmNhblJlYWRkaXIoKSk7XG4gICAgfVxufVxuLyoqXG4gKiBUaGUgY2xhc3MgdGhhdCBwcm9jZXNzZXMgcGF0dGVybnMgZm9yIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBIYW5kbGVzIGNoaWxkIGVudHJ5IGZpbHRlcmluZywgYW5kIGRldGVybWluaW5nIHdoZXRoZXIgYSBwYXRoJ3NcbiAqIGRpcmVjdG9yeSBjb250ZW50cyBtdXN0IGJlIHJlYWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9jZXNzb3Ige1xuICAgIGhhc1dhbGtlZENhY2hlO1xuICAgIG1hdGNoZXMgPSBuZXcgTWF0Y2hSZWNvcmQoKTtcbiAgICBzdWJ3YWxrcyA9IG5ldyBTdWJXYWxrcygpO1xuICAgIHBhdHRlcm5zO1xuICAgIGZvbGxvdztcbiAgICBkb3Q7XG4gICAgb3B0cztcbiAgICBjb25zdHJ1Y3RvcihvcHRzLCBoYXNXYWxrZWRDYWNoZSkge1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLmZvbGxvdyA9ICEhb3B0cy5mb2xsb3c7XG4gICAgICAgIHRoaXMuZG90ID0gISFvcHRzLmRvdDtcbiAgICAgICAgdGhpcy5oYXNXYWxrZWRDYWNoZSA9XG4gICAgICAgICAgICBoYXNXYWxrZWRDYWNoZSA/IGhhc1dhbGtlZENhY2hlLmNvcHkoKSA6IG5ldyBIYXNXYWxrZWRDYWNoZSgpO1xuICAgIH1cbiAgICBwcm9jZXNzUGF0dGVybnModGFyZ2V0LCBwYXR0ZXJucykge1xuICAgICAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NpbmdTZXQgPSBwYXR0ZXJucy5tYXAocCA9PiBbdGFyZ2V0LCBwXSk7XG4gICAgICAgIC8vIG1hcCBvZiBwYXRocyB0byB0aGUgbWFnaWMtc3RhcnRpbmcgc3Vid2Fsa3MgdGhleSBuZWVkIHRvIHdhbGtcbiAgICAgICAgLy8gZmlyc3QgaXRlbSBpbiBwYXR0ZXJucyBpcyB0aGUgZmlsdGVyXG4gICAgICAgIGZvciAobGV0IFt0LCBwYXR0ZXJuXSBvZiBwcm9jZXNzaW5nU2V0KSB7XG4gICAgICAgICAgICB0aGlzLmhhc1dhbGtlZENhY2hlLnN0b3JlV2Fsa2VkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHBhdHRlcm4ucm9vdCgpO1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLmlzQWJzb2x1dGUoKSAmJiB0aGlzLm9wdHMuYWJzb2x1dGUgIT09IGZhbHNlO1xuICAgICAgICAgICAgLy8gc3RhcnQgYWJzb2x1dGUgcGF0dGVybnMgYXQgcm9vdFxuICAgICAgICAgICAgaWYgKHJvb3QpIHtcbiAgICAgICAgICAgICAgICB0ID0gdC5yZXNvbHZlKHJvb3QgPT09ICcvJyAmJiB0aGlzLm9wdHMucm9vdCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLnJvb3RcbiAgICAgICAgICAgICAgICAgICAgOiByb290KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gcGF0dGVybi5yZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQodCwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZXN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LmlzRU5PRU5UKCkpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBsZXQgcDtcbiAgICAgICAgICAgIGxldCByZXN0O1xuICAgICAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHdoaWxlICh0eXBlb2YgKHAgPSBwYXR0ZXJuLnBhdHRlcm4oKSkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgKHJlc3QgPSBwYXR0ZXJuLnJlc3QoKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gdC5yZXNvbHZlKHApO1xuICAgICAgICAgICAgICAgIHQgPSBjO1xuICAgICAgICAgICAgICAgIHBhdHRlcm4gPSByZXN0O1xuICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcCA9IHBhdHRlcm4ucGF0dGVybigpO1xuICAgICAgICAgICAgcmVzdCA9IHBhdHRlcm4ucmVzdCgpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNXYWxrZWRDYWNoZS5oYXNXYWxrZWQodCwgcGF0dGVybikpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzV2Fsa2VkQ2FjaGUuc3RvcmVXYWxrZWQodCwgcGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBub3cgd2UgaGF2ZSBlaXRoZXIgYSBmaW5hbCBzdHJpbmcgZm9yIGEga25vd24gZW50cnksXG4gICAgICAgICAgICAvLyBtb3JlIHN0cmluZ3MgZm9yIGFuIHVua25vd24gZW50cnksXG4gICAgICAgICAgICAvLyBvciBhIHBhdHRlcm4gc3RhcnRpbmcgd2l0aCBtYWdpYywgbW91bnRlZCBvbiB0LlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIG11c3Qgbm90IGJlIGZpbmFsIGVudHJ5LCBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZVxuICAgICAgICAgICAgICAgIC8vIGNvbmNhdGVuYXRlZCBpdCBlYXJsaWVyLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlmRGlyID0gcCA9PT0gJy4uJyB8fCBwID09PSAnJyB8fCBwID09PSAnLic7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZCh0LnJlc29sdmUocCksIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwID09PSBHTE9CU1RBUikge1xuICAgICAgICAgICAgICAgIC8vIGlmIG5vIHJlc3QsIG1hdGNoIGFuZCBzdWJ3YWxrIHBhdHRlcm5cbiAgICAgICAgICAgICAgICAvLyBpZiByZXN0LCBwcm9jZXNzIHJlc3QgYW5kIHN1YndhbGsgcGF0dGVyblxuICAgICAgICAgICAgICAgIC8vIGlmIGl0J3MgYSBzeW1saW5rLCBidXQgd2UgZGlkbid0IGdldCBoZXJlIGJ5IHdheSBvZiBhXG4gICAgICAgICAgICAgICAgLy8gZ2xvYnN0YXIgbWF0Y2ggKG1lYW5pbmcgaXQncyB0aGUgZmlyc3QgdGltZSBUSElTIGdsb2JzdGFyXG4gICAgICAgICAgICAgICAgLy8gaGFzIHRyYXZlcnNlZCBhIHN5bWxpbmspLCB0aGVuIHdlIGZvbGxvdyBpdC4gT3RoZXJ3aXNlLCBzdG9wLlxuICAgICAgICAgICAgICAgIGlmICghdC5pc1N5bWJvbGljTGluaygpIHx8XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sbG93IHx8XG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4uY2hlY2tGb2xsb3dHbG9ic3RhcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKHQsIHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBycCA9IHJlc3Q/LnBhdHRlcm4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBycmVzdCA9IHJlc3Q/LnJlc3QoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3QgfHwgKChycCA9PT0gJycgfHwgcnAgPT09ICcuJykgJiYgIXJyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IEhBUyB0byBiZSBhIGRpciBpZiBpdCBlbmRzIGluICoqLyBvciAqKi8uXG4gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBlbmRpbmcgaW4gKiogd2lsbCBtYXRjaCBmaWxlcyBhcyB3ZWxsLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHQsIGFic29sdXRlLCBycCA9PT0gJycgfHwgcnAgPT09ICcuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnAgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgd291bGQgbWVhbiB5b3UncmUgbWF0Y2hpbmcgKiovLi4gYXQgdGhlIGZzIHJvb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbm8gdGhhbmtzLCBJJ20gbm90IGdvbm5hIHRlc3QgdGhhdCBzcGVjaWZpYyBjYXNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cCA9IHQucGFyZW50IHx8IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFycmVzdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKHRwLCBhYnNvbHV0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5oYXNXYWxrZWRDYWNoZS5oYXNXYWxrZWQodHAsIHJyZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKHRwLCBycmVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQodCwgcGF0dGVybik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN1YndhbGtUYXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJ3YWxrcy5rZXlzKCk7XG4gICAgfVxuICAgIGNoaWxkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb2Nlc3Nvcih0aGlzLm9wdHMsIHRoaXMuaGFzV2Fsa2VkQ2FjaGUpO1xuICAgIH1cbiAgICAvLyByZXR1cm4gYSBuZXcgUHJvY2Vzc29yIGNvbnRhaW5pbmcgdGhlIHN1YndhbGtzIGZvciBlYWNoXG4gICAgLy8gY2hpbGQgZW50cnksIGFuZCBhIHNldCBvZiBtYXRjaGVzLCBhbmRcbiAgICAvLyBhIGhhc1dhbGtlZENhY2hlIHRoYXQncyBhIGNvcHkgb2YgdGhpcyBvbmVcbiAgICAvLyB0aGVuIHdlJ3JlIGdvaW5nIHRvIGNhbGxcbiAgICBmaWx0ZXJFbnRyaWVzKHBhcmVudCwgZW50cmllcykge1xuICAgICAgICBjb25zdCBwYXR0ZXJucyA9IHRoaXMuc3Vid2Fsa3MuZ2V0KHBhcmVudCk7XG4gICAgICAgIC8vIHB1dCBtYXRjaGVzIGFuZCBlbnRyeSB3YWxrcyBpbnRvIHRoZSByZXN1bHRzIHByb2Nlc3NvclxuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5jaGlsZCgpO1xuICAgICAgICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJzb2x1dGUgPSBwYXR0ZXJuLmlzQWJzb2x1dGUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gcGF0dGVybi5wYXR0ZXJuKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdCA9IHBhdHRlcm4ucmVzdCgpO1xuICAgICAgICAgICAgICAgIGlmIChwID09PSBHTE9CU1RBUikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnRlc3RHbG9ic3RhcihlLCBwYXR0ZXJuLCByZXN0LCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy50ZXN0UmVnRXhwKGUsIHAsIHJlc3QsIGFic29sdXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMudGVzdFN0cmluZyhlLCBwLCByZXN0LCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICB0ZXN0R2xvYnN0YXIoZSwgcGF0dGVybiwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZG90IHx8ICFlLm5hbWUuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgICAgICBpZiAoIXBhdHRlcm4uaGFzTW9yZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlLCBhYnNvbHV0ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY2FuUmVhZGRpcigpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgd2UncmUgaW4gZm9sbG93IG1vZGUgb3IgaXQncyBub3QgYSBzeW1saW5rLCBqdXN0IGtlZXBcbiAgICAgICAgICAgICAgICAvLyB0ZXN0aW5nIHRoZSBzYW1lIHBhdHRlcm4uIElmIHRoZXJlJ3MgbW9yZSBhZnRlciB0aGUgZ2xvYnN0YXIsXG4gICAgICAgICAgICAgICAgLy8gdGhlbiB0aGlzIHN5bWxpbmsgY29uc3VtZXMgdGhlIGdsb2JzdGFyLiBJZiBub3QsIHRoZW4gd2UgY2FuXG4gICAgICAgICAgICAgICAgLy8gZm9sbG93IGF0IG1vc3QgT05FIHN5bWxpbmsgYWxvbmcgdGhlIHdheSwgc28gd2UgbWFyayBpdCwgd2hpY2hcbiAgICAgICAgICAgICAgICAvLyBhbHNvIGNoZWNrcyB0byBlbnN1cmUgdGhhdCBpdCB3YXNuJ3QgYWxyZWFkeSBtYXJrZWQuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9sbG93IHx8ICFlLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdCAmJiBwYXR0ZXJuLmNoZWNrRm9sbG93R2xvYnN0YXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcmVzdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGF0dGVybi5tYXJrRm9sbG93R2xvYnN0YXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJ3YWxrcy5hZGQoZSwgcGF0dGVybik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgdGhlIE5FWFQgdGhpbmcgbWF0Y2hlcyB0aGlzIGVudHJ5LCB0aGVuIGFsc28gYWRkXG4gICAgICAgIC8vIHRoZSByZXN0LlxuICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgY29uc3QgcnAgPSByZXN0LnBhdHRlcm4oKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcnAgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgLy8gZG90cyBhbmQgZW1wdHkgd2VyZSBoYW5kbGVkIGFscmVhZHlcbiAgICAgICAgICAgICAgICBycCAhPT0gJy4uJyAmJlxuICAgICAgICAgICAgICAgIHJwICE9PSAnJyAmJlxuICAgICAgICAgICAgICAgIHJwICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlc3RTdHJpbmcoZSwgcnAsIHJlc3QucmVzdCgpLCBhYnNvbHV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChycCA9PT0gJy4uJykge1xuICAgICAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICAgICAgICAgIGNvbnN0IGVwID0gZS5wYXJlbnQgfHwgZTtcbiAgICAgICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGVwLCByZXN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJwIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXN0UmVnRXhwKGUsIHJwLCByZXN0LnJlc3QoKSwgYWJzb2x1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRlc3RSZWdFeHAoZSwgcCwgcmVzdCwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKCFwLnRlc3QoZS5uYW1lKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFyZXN0KSB7XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMuYWRkKGUsIGFic29sdXRlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1YndhbGtzLmFkZChlLCByZXN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0ZXN0U3RyaW5nKGUsIHAsIHJlc3QsIGFic29sdXRlKSB7XG4gICAgICAgIC8vIHNob3VsZCBuZXZlciBoYXBwZW4/XG4gICAgICAgIGlmICghZS5pc05hbWVkKHApKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlcy5hZGQoZSwgYWJzb2x1dGUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3Vid2Fsa3MuYWRkKGUsIHJlc3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJvY2Vzc29yLmpzLm1hcCIsCiAgICAiLyoqXG4gKiBTaW5nbGUtdXNlIHV0aWxpdHkgY2xhc3NlcyB0byBwcm92aWRlIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIHtAbGluayBHbG9ifVxuICogbWV0aG9kcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IE1pbmlwYXNzIH0gZnJvbSAnbWluaXBhc3MnO1xuaW1wb3J0IHsgSWdub3JlIH0gZnJvbSAnLi9pZ25vcmUuanMnO1xuaW1wb3J0IHsgUHJvY2Vzc29yIH0gZnJvbSAnLi9wcm9jZXNzb3IuanMnO1xuY29uc3QgbWFrZUlnbm9yZSA9IChpZ25vcmUsIG9wdHMpID0+IHR5cGVvZiBpZ25vcmUgPT09ICdzdHJpbmcnID8gbmV3IElnbm9yZShbaWdub3JlXSwgb3B0cylcbiAgICA6IEFycmF5LmlzQXJyYXkoaWdub3JlKSA/IG5ldyBJZ25vcmUoaWdub3JlLCBvcHRzKVxuICAgICAgICA6IGlnbm9yZTtcbi8qKlxuICogYmFzaWMgd2Fsa2luZyB1dGlsaXRpZXMgdGhhdCBhbGwgdGhlIGdsb2Igd2Fsa2VyIHR5cGVzIHVzZVxuICovXG5leHBvcnQgY2xhc3MgR2xvYlV0aWwge1xuICAgIHBhdGg7XG4gICAgcGF0dGVybnM7XG4gICAgb3B0cztcbiAgICBzZWVuID0gbmV3IFNldCgpO1xuICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgIGFib3J0ZWQgPSBmYWxzZTtcbiAgICAjb25SZXN1bWUgPSBbXTtcbiAgICAjaWdub3JlO1xuICAgICNzZXA7XG4gICAgc2lnbmFsO1xuICAgIG1heERlcHRoO1xuICAgIGluY2x1ZGVDaGlsZE1hdGNoZXM7XG4gICAgY29uc3RydWN0b3IocGF0dGVybnMsIHBhdGgsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHBhdHRlcm5zO1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLm9wdHMgPSBvcHRzO1xuICAgICAgICB0aGlzLiNzZXAgPSAhb3B0cy5wb3NpeCAmJiBvcHRzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ1xcXFwnIDogJy8nO1xuICAgICAgICB0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgPSBvcHRzLmluY2x1ZGVDaGlsZE1hdGNoZXMgIT09IGZhbHNlO1xuICAgICAgICBpZiAob3B0cy5pZ25vcmUgfHwgIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcykge1xuICAgICAgICAgICAgdGhpcy4jaWdub3JlID0gbWFrZUlnbm9yZShvcHRzLmlnbm9yZSA/PyBbXSwgb3B0cyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5jbHVkZUNoaWxkTWF0Y2hlcyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB0aGlzLiNpZ25vcmUuYWRkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbSA9ICdjYW5ub3QgaWdub3JlIGNoaWxkIG1hdGNoZXMsIGlnbm9yZSBsYWNrcyBhZGQoKSBtZXRob2QuJztcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWdub3JlLCBhbHdheXMgc2V0IHdpdGggbWF4RGVwdGgsIGJ1dCBpdCdzIG9wdGlvbmFsIG9uIHRoZVxuICAgICAgICAvLyBHbG9iT3B0aW9ucyB0eXBlXG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICB0aGlzLm1heERlcHRoID0gb3B0cy5tYXhEZXB0aCB8fCBJbmZpbml0eTtcbiAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgaWYgKG9wdHMuc2lnbmFsKSB7XG4gICAgICAgICAgICB0aGlzLnNpZ25hbCA9IG9wdHMuc2lnbmFsO1xuICAgICAgICAgICAgdGhpcy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4jb25SZXN1bWUubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgICNpZ25vcmVkKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vlbi5oYXMocGF0aCkgfHwgISF0aGlzLiNpZ25vcmU/Lmlnbm9yZWQ/LihwYXRoKTtcbiAgICB9XG4gICAgI2NoaWxkcmVuSWdub3JlZChwYXRoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuI2lnbm9yZT8uY2hpbGRyZW5JZ25vcmVkPy4ocGF0aCk7XG4gICAgfVxuICAgIC8vIGJhY2twcmVzc3VyZSBtZWNoYW5pc21cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bWUoKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgICAgIGxldCBmbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiAoZm4gPSB0aGlzLiNvblJlc3VtZS5zaGlmdCgpKSkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblJlc3VtZShmbikge1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAoIXRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLyogYzggaWdub3JlIHN0b3AgKi9cbiAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lLnB1c2goZm4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGRvIHRoZSByZXF1aXNpdGUgcmVhbHBhdGgvc3RhdCBjaGVja2luZywgYW5kIHJldHVybiB0aGUgcGF0aFxuICAgIC8vIHRvIGFkZCBvciB1bmRlZmluZWQgdG8gZmlsdGVyIGl0IG91dC5cbiAgICBhc3luYyBtYXRjaENoZWNrKGUsIGlmRGlyKSB7XG4gICAgICAgIGlmIChpZkRpciAmJiB0aGlzLm9wdHMubm9kaXIpXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgcnBjO1xuICAgICAgICBpZiAodGhpcy5vcHRzLnJlYWxwYXRoKSB7XG4gICAgICAgICAgICBycGMgPSBlLnJlYWxwYXRoQ2FjaGVkKCkgfHwgKGF3YWl0IGUucmVhbHBhdGgoKSk7XG4gICAgICAgICAgICBpZiAoIXJwYylcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZSA9IHJwYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZWVkU3RhdCA9IGUuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQ7XG4gICAgICAgIGNvbnN0IHMgPSBuZWVkU3RhdCA/IGF3YWl0IGUubHN0YXQoKSA6IGU7XG4gICAgICAgIGlmICh0aGlzLm9wdHMuZm9sbG93ICYmIHRoaXMub3B0cy5ub2RpciAmJiBzPy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBhd2FpdCBzLnJlYWxwYXRoKCk7XG4gICAgICAgICAgICAvKiBjOCBpZ25vcmUgc3RhcnQgKi9cbiAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldC5pc1Vua25vd24oKSB8fCB0aGlzLm9wdHMuc3RhdCkpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0YXJnZXQubHN0YXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hDaGVja1Rlc3QocywgaWZEaXIpO1xuICAgIH1cbiAgICBtYXRjaENoZWNrVGVzdChlLCBpZkRpcikge1xuICAgICAgICByZXR1cm4gKGUgJiZcbiAgICAgICAgICAgICh0aGlzLm1heERlcHRoID09PSBJbmZpbml0eSB8fCBlLmRlcHRoKCkgPD0gdGhpcy5tYXhEZXB0aCkgJiZcbiAgICAgICAgICAgICghaWZEaXIgfHwgZS5jYW5SZWFkZGlyKCkpICYmXG4gICAgICAgICAgICAoIXRoaXMub3B0cy5ub2RpciB8fCAhZS5pc0RpcmVjdG9yeSgpKSAmJlxuICAgICAgICAgICAgKCF0aGlzLm9wdHMubm9kaXIgfHxcbiAgICAgICAgICAgICAgICAhdGhpcy5vcHRzLmZvbGxvdyB8fFxuICAgICAgICAgICAgICAgICFlLmlzU3ltYm9saWNMaW5rKCkgfHxcbiAgICAgICAgICAgICAgICAhZS5yZWFscGF0aENhY2hlZCgpPy5pc0RpcmVjdG9yeSgpKSAmJlxuICAgICAgICAgICAgIXRoaXMuI2lnbm9yZWQoZSkpID9cbiAgICAgICAgICAgIGVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBtYXRjaENoZWNrU3luYyhlLCBpZkRpcikge1xuICAgICAgICBpZiAoaWZEaXIgJiYgdGhpcy5vcHRzLm5vZGlyKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJwYztcbiAgICAgICAgaWYgKHRoaXMub3B0cy5yZWFscGF0aCkge1xuICAgICAgICAgICAgcnBjID0gZS5yZWFscGF0aENhY2hlZCgpIHx8IGUucmVhbHBhdGhTeW5jKCk7XG4gICAgICAgICAgICBpZiAoIXJwYylcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgZSA9IHJwYztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZWVkU3RhdCA9IGUuaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQ7XG4gICAgICAgIGNvbnN0IHMgPSBuZWVkU3RhdCA/IGUubHN0YXRTeW5jKCkgOiBlO1xuICAgICAgICBpZiAodGhpcy5vcHRzLmZvbGxvdyAmJiB0aGlzLm9wdHMubm9kaXIgJiYgcz8uaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gcy5yZWFscGF0aFN5bmMoKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQgJiYgKHRhcmdldD8uaXNVbmtub3duKCkgfHwgdGhpcy5vcHRzLnN0YXQpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LmxzdGF0U3luYygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1hdGNoQ2hlY2tUZXN0KHMsIGlmRGlyKTtcbiAgICB9XG4gICAgbWF0Y2hGaW5pc2goZSwgYWJzb2x1dGUpIHtcbiAgICAgICAgaWYgKHRoaXMuI2lnbm9yZWQoZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIHdlIGtub3cgd2UgaGF2ZSBhbiBpZ25vcmUgaWYgdGhpcyBpcyBmYWxzZSwgYnV0IFRTIGRvZXNuJ3RcbiAgICAgICAgaWYgKCF0aGlzLmluY2x1ZGVDaGlsZE1hdGNoZXMgJiYgdGhpcy4jaWdub3JlPy5hZGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlnbiA9IGAke2UucmVsYXRpdmVQb3NpeCgpfS8qKmA7XG4gICAgICAgICAgICB0aGlzLiNpZ25vcmUuYWRkKGlnbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWJzID0gdGhpcy5vcHRzLmFic29sdXRlID09PSB1bmRlZmluZWQgPyBhYnNvbHV0ZSA6IHRoaXMub3B0cy5hYnNvbHV0ZTtcbiAgICAgICAgdGhpcy5zZWVuLmFkZChlKTtcbiAgICAgICAgY29uc3QgbWFyayA9IHRoaXMub3B0cy5tYXJrICYmIGUuaXNEaXJlY3RvcnkoKSA/IHRoaXMuI3NlcCA6ICcnO1xuICAgICAgICAvLyBvaywgd2UgaGF2ZSB3aGF0IHdlIG5lZWQhXG4gICAgICAgIGlmICh0aGlzLm9wdHMud2l0aEZpbGVUeXBlcykge1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWJzKSB7XG4gICAgICAgICAgICBjb25zdCBhYnMgPSB0aGlzLm9wdHMucG9zaXggPyBlLmZ1bGxwYXRoUG9zaXgoKSA6IGUuZnVsbHBhdGgoKTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hFbWl0KGFicyArIG1hcmspO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVsID0gdGhpcy5vcHRzLnBvc2l4ID8gZS5yZWxhdGl2ZVBvc2l4KCkgOiBlLnJlbGF0aXZlKCk7XG4gICAgICAgICAgICBjb25zdCBwcmUgPSB0aGlzLm9wdHMuZG90UmVsYXRpdmUgJiYgIXJlbC5zdGFydHNXaXRoKCcuLicgKyB0aGlzLiNzZXApID9cbiAgICAgICAgICAgICAgICAnLicgKyB0aGlzLiNzZXBcbiAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaEVtaXQoIXJlbCA/ICcuJyArIG1hcmsgOiBwcmUgKyByZWwgKyBtYXJrKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBtYXRjaChlLCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hDaGVjayhlLCBpZkRpcik7XG4gICAgICAgIGlmIChwKVxuICAgICAgICAgICAgdGhpcy5tYXRjaEZpbmlzaChwLCBhYnNvbHV0ZSk7XG4gICAgfVxuICAgIG1hdGNoU3luYyhlLCBhYnNvbHV0ZSwgaWZEaXIpIHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMubWF0Y2hDaGVja1N5bmMoZSwgaWZEaXIpO1xuICAgICAgICBpZiAocClcbiAgICAgICAgICAgIHRoaXMubWF0Y2hGaW5pc2gocCwgYWJzb2x1dGUpO1xuICAgIH1cbiAgICB3YWxrQ0IodGFyZ2V0LCBwYXR0ZXJucywgY2IpIHtcbiAgICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovXG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdG9wICovXG4gICAgICAgIHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBuZXcgUHJvY2Vzc29yKHRoaXMub3B0cyksIGNiKTtcbiAgICB9XG4gICAgd2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzLiNjaGlsZHJlbklnbm9yZWQodGFyZ2V0KSlcbiAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUoKCkgPT4gdGhpcy53YWxrQ0IyKHRhcmdldCwgcGF0dGVybnMsIHByb2Nlc3NvciwgY2IpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzb3IucHJvY2Vzc1BhdHRlcm5zKHRhcmdldCwgcGF0dGVybnMpO1xuICAgICAgICAvLyBkb25lIHByb2Nlc3NpbmcuICBhbGwgb2YgdGhlIGFib3ZlIGlzIHN5bmMsIGNhbiBiZSBhYnN0cmFjdGVkIG91dC5cbiAgICAgICAgLy8gc3Vid2Fsa3MgaXMgYSBtYXAgb2YgcGF0aHMgdG8gdGhlIGVudHJ5IGZpbHRlcnMgdGhleSBuZWVkXG4gICAgICAgIC8vIG1hdGNoZXMgaXMgYSBtYXAgb2YgcGF0aHMgdG8gW2Fic29sdXRlLCBpZkRpcl0gdHVwbGVzLlxuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMubWF0Y2gobSwgYWJzb2x1dGUsIGlmRGlyKS50aGVuKCgpID0+IG5leHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHByb2Nlc3Nvci5zdWJ3YWxrVGFyZ2V0cygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgJiYgdC5kZXB0aCgpID49IHRoaXMubWF4RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbkNhY2hlZCA9IHQucmVhZGRpckNhY2hlZCgpO1xuICAgICAgICAgICAgaWYgKHQuY2FsbGVkUmVhZGRpcigpKVxuICAgICAgICAgICAgICAgIHRoaXMud2Fsa0NCMyh0LCBjaGlsZHJlbkNhY2hlZCwgcHJvY2Vzc29yLCBuZXh0KTtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHQucmVhZGRpckNCKChfLCBlbnRyaWVzKSA9PiB0aGlzLndhbGtDQjModCwgZW50cmllcywgcHJvY2Vzc29yLCBuZXh0KSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0IzKHRhcmdldCwgZW50cmllcywgcHJvY2Vzc29yLCBjYikge1xuICAgICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzb3IuZmlsdGVyRW50cmllcyh0YXJnZXQsIGVudHJpZXMpO1xuICAgICAgICBsZXQgdGFza3MgPSAxO1xuICAgICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKC0tdGFza3MgPT09IDApXG4gICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChjb25zdCBbbSwgYWJzb2x1dGUsIGlmRGlyXSBvZiBwcm9jZXNzb3IubWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNpZ25vcmVkKG0pKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMubWF0Y2gobSwgYWJzb2x1dGUsIGlmRGlyKS50aGVuKCgpID0+IG5leHQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0LCBwYXR0ZXJuc10gb2YgcHJvY2Vzc29yLnN1YndhbGtzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCMih0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IuY2hpbGQoKSwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0JTeW5jKHRhcmdldCwgcGF0dGVybnMsIGNiKSB7XG4gICAgICAgIC8qIGM4IGlnbm9yZSBzdGFydCAqL1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICAvKiBjOCBpZ25vcmUgc3RvcCAqL1xuICAgICAgICB0aGlzLndhbGtDQjJTeW5jKHRhcmdldCwgcGF0dGVybnMsIG5ldyBQcm9jZXNzb3IodGhpcy5vcHRzKSwgY2IpO1xuICAgIH1cbiAgICB3YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSB7XG4gICAgICAgIGlmICh0aGlzLiNjaGlsZHJlbklnbm9yZWQodGFyZ2V0KSlcbiAgICAgICAgICAgIHJldHVybiBjYigpO1xuICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICBjYigpO1xuICAgICAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25SZXN1bWUoKCkgPT4gdGhpcy53YWxrQ0IyU3luYyh0YXJnZXQsIHBhdHRlcm5zLCBwcm9jZXNzb3IsIGNiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc29yLnByb2Nlc3NQYXR0ZXJucyh0YXJnZXQsIHBhdHRlcm5zKTtcbiAgICAgICAgLy8gZG9uZSBwcm9jZXNzaW5nLiAgYWxsIG9mIHRoZSBhYm92ZSBpcyBzeW5jLCBjYW4gYmUgYWJzdHJhY3RlZCBvdXQuXG4gICAgICAgIC8vIHN1YndhbGtzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIHRoZSBlbnRyeSBmaWx0ZXJzIHRoZXkgbmVlZFxuICAgICAgICAvLyBtYXRjaGVzIGlzIGEgbWFwIG9mIHBhdGhzIHRvIFthYnNvbHV0ZSwgaWZEaXJdIHR1cGxlcy5cbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hTeW5jKG0sIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHByb2Nlc3Nvci5zdWJ3YWxrVGFyZ2V0cygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEZXB0aCAhPT0gSW5maW5pdHkgJiYgdC5kZXB0aCgpID49IHRoaXMubWF4RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhc2tzKys7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHQucmVhZGRpclN5bmMoKTtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCM1N5bmModCwgY2hpbGRyZW4sIHByb2Nlc3NvciwgbmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICB3YWxrQ0IzU3luYyh0YXJnZXQsIGVudHJpZXMsIHByb2Nlc3NvciwgY2IpIHtcbiAgICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc29yLmZpbHRlckVudHJpZXModGFyZ2V0LCBlbnRyaWVzKTtcbiAgICAgICAgbGV0IHRhc2tzID0gMTtcbiAgICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICgtLXRhc2tzID09PSAwKVxuICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW20sIGFic29sdXRlLCBpZkRpcl0gb2YgcHJvY2Vzc29yLm1hdGNoZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4jaWdub3JlZChtKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hTeW5jKG0sIGFic29sdXRlLCBpZkRpcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbdGFyZ2V0LCBwYXR0ZXJuc10gb2YgcHJvY2Vzc29yLnN1YndhbGtzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgdGFza3MrKztcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCMlN5bmModGFyZ2V0LCBwYXR0ZXJucywgcHJvY2Vzc29yLmNoaWxkKCksIG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgR2xvYldhbGtlciBleHRlbmRzIEdsb2JVdGlsIHtcbiAgICBtYXRjaGVzID0gbmV3IFNldCgpO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHBhdHRlcm5zLCBwYXRoLCBvcHRzKTtcbiAgICB9XG4gICAgbWF0Y2hFbWl0KGUpIHtcbiAgICAgICAgdGhpcy5tYXRjaGVzLmFkZChlKTtcbiAgICB9XG4gICAgYXN5bmMgd2FsaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2lnbmFsPy5hYm9ydGVkKVxuICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBhdGgubHN0YXQoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRoaXMucGF0aCwgdGhpcy5wYXR0ZXJucywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZWoodGhpcy5zaWduYWwucmVhc29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcyh0aGlzLm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcztcbiAgICB9XG4gICAgd2Fsa1N5bmMoKSB7XG4gICAgICAgIGlmICh0aGlzLnNpZ25hbD8uYWJvcnRlZClcbiAgICAgICAgICAgIHRocm93IHRoaXMuc2lnbmFsLnJlYXNvbjtcbiAgICAgICAgaWYgKHRoaXMucGF0aC5pc1Vua25vd24oKSkge1xuICAgICAgICAgICAgdGhpcy5wYXRoLmxzdGF0U3luYygpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdGhpbmcgZm9yIHRoZSBjYWxsYmFjayB0byBkbywgYmVjYXVzZSB0aGlzIG5ldmVyIHBhdXNlc1xuICAgICAgICB0aGlzLndhbGtDQlN5bmModGhpcy5wYXRoLCB0aGlzLnBhdHRlcm5zLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zaWduYWw/LmFib3J0ZWQpXG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5zaWduYWwucmVhc29uO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgR2xvYlN0cmVhbSBleHRlbmRzIEdsb2JVdGlsIHtcbiAgICByZXN1bHRzO1xuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm5zLCBwYXRoLCBvcHRzKSB7XG4gICAgICAgIHN1cGVyKHBhdHRlcm5zLCBwYXRoLCBvcHRzKTtcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gbmV3IE1pbmlwYXNzKHtcbiAgICAgICAgICAgIHNpZ25hbDogdGhpcy5zaWduYWwsXG4gICAgICAgICAgICBvYmplY3RNb2RlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXN1bHRzLm9uKCdkcmFpbicsICgpID0+IHRoaXMucmVzdW1lKCkpO1xuICAgICAgICB0aGlzLnJlc3VsdHMub24oJ3Jlc3VtZScsICgpID0+IHRoaXMucmVzdW1lKCkpO1xuICAgIH1cbiAgICBtYXRjaEVtaXQoZSkge1xuICAgICAgICB0aGlzLnJlc3VsdHMud3JpdGUoZSk7XG4gICAgICAgIGlmICghdGhpcy5yZXN1bHRzLmZsb3dpbmcpXG4gICAgICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuICAgIHN0cmVhbSgpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5wYXRoO1xuICAgICAgICBpZiAodGFyZ2V0LmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICB0YXJnZXQubHN0YXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLndhbGtDQih0YXJnZXQsIHRoaXMucGF0dGVybnMsICgpID0+IHRoaXMucmVzdWx0cy5lbmQoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMud2Fsa0NCKHRhcmdldCwgdGhpcy5wYXR0ZXJucywgKCkgPT4gdGhpcy5yZXN1bHRzLmVuZCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xuICAgIH1cbiAgICBzdHJlYW1TeW5jKCkge1xuICAgICAgICBpZiAodGhpcy5wYXRoLmlzVW5rbm93bigpKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGgubHN0YXRTeW5jKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53YWxrQ0JTeW5jKHRoaXMucGF0aCwgdGhpcy5wYXR0ZXJucywgKCkgPT4gdGhpcy5yZXN1bHRzLmVuZCgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13YWxrZXIuanMubWFwIiwKICAgICJpbXBvcnQgeyBNaW5pbWF0Y2ggfSBmcm9tICdtaW5pbWF0Y2gnO1xuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0dGVybnMgcHJvdmlkZWQgY29udGFpbiBhbnkgbWFnaWMgZ2xvYiBjaGFyYWN0ZXJzLFxuICogZ2l2ZW4gdGhlIG9wdGlvbnMgcHJvdmlkZWQuXG4gKlxuICogQnJhY2UgZXhwYW5zaW9uIGlzIG5vdCBjb25zaWRlcmVkIFwibWFnaWNcIiB1bmxlc3MgdGhlIGBtYWdpY2FsQnJhY2VzYCBvcHRpb25cbiAqIGlzIHNldCwgYXMgYnJhY2UgZXhwYW5zaW9uIGp1c3QgdHVybnMgb25lIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBTbyBhIHBhdHRlcm4gbGlrZSBgJ3h7YSxifXknYCB3b3VsZCByZXR1cm4gYGZhbHNlYCwgYmVjYXVzZSBgJ3hheSdgIGFuZFxuICogYCd4YnknYCBib3RoIGRvIG5vdCBjb250YWluIGFueSBtYWdpYyBnbG9iIGNoYXJhY3RlcnMsIGFuZCBpdCdzIHRyZWF0ZWQgdGhlXG4gKiBzYW1lIGFzIGlmIHlvdSBoYWQgY2FsbGVkIGl0IG9uIGBbJ3hheScsICd4YnknXWAuIFdoZW4gYG1hZ2ljYWxCcmFjZXM6dHJ1ZWBcbiAqIGlzIGluIHRoZSBvcHRpb25zLCBicmFjZSBleHBhbnNpb24gX2lzXyB0cmVhdGVkIGFzIGEgcGF0dGVybiBoYXZpbmcgbWFnaWMuXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNNYWdpYyA9IChwYXR0ZXJuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF0dGVybikpIHtcbiAgICAgICAgcGF0dGVybiA9IFtwYXR0ZXJuXTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBwIG9mIHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKG5ldyBNaW5pbWF0Y2gocCwgb3B0aW9ucykuaGFzTWFnaWMoKSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGFzLW1hZ2ljLmpzLm1hcCIsCiAgICAiaW1wb3J0IHsgZXNjYXBlLCB1bmVzY2FwZSB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgeyBHbG9iIH0gZnJvbSAnLi9nbG9iLmpzJztcbmltcG9ydCB7IGhhc01hZ2ljIH0gZnJvbSAnLi9oYXMtbWFnaWMuanMnO1xuZXhwb3J0IHsgZXNjYXBlLCB1bmVzY2FwZSB9IGZyb20gJ21pbmltYXRjaCc7XG5leHBvcnQgeyBHbG9iIH0gZnJvbSAnLi9nbG9iLmpzJztcbmV4cG9ydCB7IGhhc01hZ2ljIH0gZnJvbSAnLi9oYXMtbWFnaWMuanMnO1xuZXhwb3J0IHsgSWdub3JlIH0gZnJvbSAnLi9pZ25vcmUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGdsb2JTdHJlYW1TeW5jKHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgR2xvYihwYXR0ZXJuLCBvcHRpb25zKS5zdHJlYW1TeW5jKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2xvYlN0cmVhbShwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEdsb2IocGF0dGVybiwgb3B0aW9ucykuc3RyZWFtKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2xvYlN5bmMocGF0dGVybiwgb3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIG5ldyBHbG9iKHBhdHRlcm4sIG9wdGlvbnMpLndhbGtTeW5jKCk7XG59XG5hc3luYyBmdW5jdGlvbiBnbG9iXyhwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEdsb2IocGF0dGVybiwgb3B0aW9ucykud2FsaygpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdsb2JJdGVyYXRlU3luYyhwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEdsb2IocGF0dGVybiwgb3B0aW9ucykuaXRlcmF0ZVN5bmMoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnbG9iSXRlcmF0ZShwYXR0ZXJuLCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gbmV3IEdsb2IocGF0dGVybiwgb3B0aW9ucykuaXRlcmF0ZSgpO1xufVxuLy8gYWxpYXNlczogZ2xvYi5zeW5jLnN0cmVhbSgpIGdsb2Iuc3RyZWFtLnN5bmMoKSBnbG9iLnN5bmMoKSBldGNcbmV4cG9ydCBjb25zdCBzdHJlYW1TeW5jID0gZ2xvYlN0cmVhbVN5bmM7XG5leHBvcnQgY29uc3Qgc3RyZWFtID0gT2JqZWN0LmFzc2lnbihnbG9iU3RyZWFtLCB7IHN5bmM6IGdsb2JTdHJlYW1TeW5jIH0pO1xuZXhwb3J0IGNvbnN0IGl0ZXJhdGVTeW5jID0gZ2xvYkl0ZXJhdGVTeW5jO1xuZXhwb3J0IGNvbnN0IGl0ZXJhdGUgPSBPYmplY3QuYXNzaWduKGdsb2JJdGVyYXRlLCB7XG4gICAgc3luYzogZ2xvYkl0ZXJhdGVTeW5jLFxufSk7XG5leHBvcnQgY29uc3Qgc3luYyA9IE9iamVjdC5hc3NpZ24oZ2xvYlN5bmMsIHtcbiAgICBzdHJlYW06IGdsb2JTdHJlYW1TeW5jLFxuICAgIGl0ZXJhdGU6IGdsb2JJdGVyYXRlU3luYyxcbn0pO1xuZXhwb3J0IGNvbnN0IGdsb2IgPSBPYmplY3QuYXNzaWduKGdsb2JfLCB7XG4gICAgZ2xvYjogZ2xvYl8sXG4gICAgZ2xvYlN5bmMsXG4gICAgc3luYyxcbiAgICBnbG9iU3RyZWFtLFxuICAgIHN0cmVhbSxcbiAgICBnbG9iU3RyZWFtU3luYyxcbiAgICBzdHJlYW1TeW5jLFxuICAgIGdsb2JJdGVyYXRlLFxuICAgIGl0ZXJhdGUsXG4gICAgZ2xvYkl0ZXJhdGVTeW5jLFxuICAgIGl0ZXJhdGVTeW5jLFxuICAgIEdsb2IsXG4gICAgaGFzTWFnaWMsXG4gICAgZXNjYXBlLFxuICAgIHVuZXNjYXBlLFxufSk7XG5nbG9iLmdsb2IgPSBnbG9iO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwKICAgICJpbXBvcnQgeyBnbG9iIH0gZnJvbSBcImdsb2JcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBlbnYgfSBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5pbXBvcnQgdHlwZSB7IE1pbGtpb0FkYXB0ZXIsIFZpdGVJbnB1dCwgVml0ZU91dHB1dCB9IGZyb20gXCIuL2luZGV4LnRzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5cbmNvbnN0IGFkYXB0ZXJOYW1lID0gXCJlZGdlLW9uZVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZWRnZU9uZUFkYXB0ZXIoKTogTWlsa2lvQWRhcHRlciB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogYWRhcHRlck5hbWUsXG4gICAgYWRhcHRlcjogYXN5bmMgKG9wdGlvbnM6IHt9KSA9PiB7XG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQHN0ZXAgaW5wdXRcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICovXG4gICAgICBjb25zdCBpbnB1dDogVml0ZUlucHV0ID0ge307XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgZ2xvYihcIm1vZHVsZXMvKiovKi57YWN0aW9uLHN0cmVhbX0udHNcIik7XG4gICAgICBjb25zdCB0YXNrczogQXJyYXk8UHJvbWlzZTx2b2lkPj4gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbW9kdWxlUGF0aCBvZiByZXN1bHRzKSB7XG4gICAgICAgIHRhc2tzLnB1c2goXG4gICAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhTcGxpdCA9IG1vZHVsZVBhdGhcbiAgICAgICAgICAgICAgLnJlcGxhY2VBbGwoXCJcXFxcXCIsIFwiL1wiKVxuICAgICAgICAgICAgICAuc2xpY2UoMCwgbW9kdWxlUGF0aC5sZW5ndGggLSAxMCkgLy8gMTAgPT09IFwiLmFjdGlvbi50c1wiLmxlbmd0aCBvciBcIi5zdHJlYW0udHNcIi5sZW5ndGhcbiAgICAgICAgICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgICAgICAgICAuc2xpY2UoMSk7XG4gICAgICAgICAgICBjb25zdCBsZXZlbCA9IHBhdGhTcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gcGF0aFNwbGl0LmpvaW4oXCIvXCIpO1xuICAgICAgICAgICAgY29uc3QgYmFja1RvUm9vdCA9IFwiLi4vXCIucmVwZWF0KGxldmVsICsgMSk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXNGb2xkZXIgPSBgLm1pbGtpby9nZW5lcmF0ZWQvcm91dGVzL21vZHVsZV9fJHtwYXRoLnJlcGxhY2VBbGwoXCIvXCIsIFwiX19cIikucmVwbGFjZUFsbChcIi1cIiwgXCJfXCIpfWA7XG5cbiAgICAgICAgICAgIC8vIFRyYXZlcnNlIHRoZSByb3V0ZXMgZ2VuZXJhdGVkIGluIHRoZSBkaXJlY3RvcnkgYW5kIHNlbGVjdCB0aGUgbGF0ZXN0IHBpZWNlIG9mIGRhdGFcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlc0ZvbGRlckZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihyb3V0ZXNGb2xkZXIpO1xuICAgICAgICAgICAgaWYgKHJvdXRlc0ZvbGRlckZpbGVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKGBObyByb3V0ZXMgZm91bmQgaW4gJHtyb3V0ZXNGb2xkZXJ9YCk7XG4gICAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZnVsbCBwYXRocyBhbmQgc3RhdHVzIGluZm9ybWF0aW9uIG9mIGFsbCBmaWxlc1xuICAgICAgICAgICAgY29uc3QgZmlsZXNXaXRoU3RhdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgcm91dGVzRm9sZGVyRmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBqb2luKHJvdXRlc0ZvbGRlciwgZmlsZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaWxlUGF0aCwgYmlydGhUaW1lOiBzdGF0cy5iaXJ0aHRpbWUgfTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qgcm91dGVQYXRoID0gZmlsZXNXaXRoU3RhdHMuc29ydCgoYSwgYikgPT4gYi5iaXJ0aFRpbWUuZ2V0VGltZSgpIC0gYS5iaXJ0aFRpbWUuZ2V0VGltZSgpKS5hdCgwKT8uZmlsZVBhdGg7XG4gICAgICAgICAgICBpZiAoIXJvdXRlUGF0aCkgdGhyb3cgbmV3IEVycm9yKGBObyByb3V0ZXMgZm91bmQgaW4gJHtyb3V0ZXNGb2xkZXJ9YCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRlZFBhdGggPSBgLm1pbGtpby8ke2FkYXB0ZXJOYW1lfS8ke3BhdGh9LnRzYDtcbiAgICAgICAgICAgIGF3YWl0IGZzLm91dHB1dEZpbGUoXG4gICAgICAgICAgICAgIGdlbmVyYXRlZFBhdGgsXG4gICAgICAgICAgICAgIGBpbXBvcnQgeyBjcmVhdGUgfSBmcm9tIFwiJHtiYWNrVG9Sb290fWluZGV4LnRzXCI7XG5pbXBvcnQgcm91dGVTY2hlbWEgZnJvbSBcIiR7YmFja1RvUm9vdH0ke3JvdXRlUGF0aC5yZXBsYWNlQWxsKFwiXFxcXFwiLCBcIi9cIil9XCI7XG5cbmNvbnN0IHdvcmxkID0gY3JlYXRlKHtcbiAgZGV2ZWxvcDogJHtlbnYuQ09PS0JPT0tfREVWRUxPUCA9PT0gXCJFTkFCTEVcIiA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifSxcbn0pO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25SZXF1ZXN0KGNvbnRleHQpIHtcbiAgcmV0dXJuIGF3YWl0IChhd2FpdCB3b3JsZCkubGlzdGVuZXIuZmV0Y2goe1xuICAgIHJlcXVlc3Q6IGNvbnRleHQucmVxdWVzdCxcbiAgICBlbnY6IGNvbnRleHQuZW52LFxuICAgIGVudk1vZGU6IFwiJHtlbnYuTU9ERSA/PyBcInByb2R1Y3Rpb25cIn1cIixcbiAgICByb3V0ZVNjaGVtYSxcbiAgfSk7XG59YCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlucHV0W3BhdGhdID0gZ2VuZXJhdGVkUGF0aDtcbiAgICAgICAgICB9KSgpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGFza3MpO1xuXG4gICAgICAvKipcbiAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICogQHN0ZXAgb3V0cHV0XG4gICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAqL1xuICAgICAgY29uc3Qgb3V0cHV0OiBWaXRlT3V0cHV0ID0ge307XG4gICAgICBvdXRwdXQuZW50cnlGaWxlTmFtZXMgPSBcImZ1bmN0aW9ucy9bbmFtZV0uanNcIjtcbiAgICAgIG91dHB1dC5jaHVua0ZpbGVOYW1lcyA9IFwiZnVuY3Rpb25zLy5taWxraW8vW25hbWVdLVtoYXNoXS5qc1wiO1xuICAgICAgb3V0cHV0LmFzc2V0RmlsZU5hbWVzID0gXCJmdW5jdGlvbnMvLm1pbGtpby9bbmFtZV0tW2hhc2hdW2V4dG5hbWVdXCI7XG4gICAgICBvdXRwdXQuc291cmNlbWFwID0gXCJpbmxpbmVcIjtcbiAgICAgIG91dHB1dC5wcmVzZXJ2ZU1vZHVsZXMgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuIHsgaW5wdXQsIG91dHB1dCB9O1xuICAgIH0sXG4gIH0gc2F0aXNmaWVzIE1pbGtpb0FkYXB0ZXI7XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVXNlckNvbmZpZyB9IGZyb20gXCJ2aXRlXCI7XG5pbXBvcnQgeyBlZGdlT25lQWRhcHRlciB9IGZyb20gXCIuL2VkZ2Utb25lLnRzXCI7XG5cbmV4cG9ydCB0eXBlIFZpdGVJbnB1dCA9IEV4Y2x1ZGU8RXhjbHVkZTxVc2VyQ29uZmlnW1wiYnVpbGRcIl0sIHVuZGVmaW5lZD5bXCJyb2xsdXBPcHRpb25zXCJdLCB1bmRlZmluZWQ+W1wiaW5wdXRcIl07XG5leHBvcnQgdHlwZSBWaXRlT3V0cHV0ID0gRXhjbHVkZTxFeGNsdWRlPFVzZXJDb25maWdbXCJidWlsZFwiXSwgdW5kZWZpbmVkPltcInJvbGx1cE9wdGlvbnNcIl0sIHVuZGVmaW5lZD5bXCJvdXRwdXRcIl07XG5cbmV4cG9ydCB0eXBlIE1pbGtpb0FkYXB0ZXIgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWRhcHRlcjogKG9wdGlvbnM6IHt9KSA9PiBQcm9taXNlPHtcbiAgICBpbnB1dDogVml0ZUlucHV0O1xuICAgIG91dHB1dDogVml0ZU91dHB1dDtcbiAgfT47XG59O1xuXG5leHBvcnQgY29uc3QgYWRhcHRlcnM6IEFycmF5PE1pbGtpb0FkYXB0ZXI+ID0gW2VkZ2VPbmVBZGFwdGVyKCldO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFDQSxJQUFNLFlBQVk7QUFBQTtBQUFBLEVBQ2xCLE1BQU0sb0JBQW9CLE1BQU07QUFBQSxJQUU5QixXQUFZLENBQUMsS0FBSyxVQUFVLFlBQVk7QUFBQSxNQUN0QyxNQUFNLG1CQUFtQixLQUFLLFVBQVUsVUFBVTtBQUFBLE1BQ2xELEtBQUssT0FBTztBQUFBLE1BQ1osS0FBSyxPQUFPO0FBQUEsTUFDWixJQUFJLE1BQU07QUFBQSxRQUFtQixNQUFNLGtCQUFrQixNQUFN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O0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxFQUFHO0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxFQUFHO0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxFQUFHO0FBQUEsRUFBRztBQUFBLEVBQUc7QUFBQSxFQUFHO0FBQUEsU0FBVSxxQkFBcUIsQ0FBQyxHQUFFO0FBQUEsSUFBQyxPQUFNLEVBQUMsUUFBTyxFQUFFLElBQUcsTUFBSyxFQUFFLElBQUcsaUJBQWdCLEVBQUUsSUFBRyxPQUFNLEVBQUUsSUFBRyxRQUFPLEVBQUUsSUFBRyxTQUFRLEVBQUUsSUFBRyxTQUFRLEVBQUUsSUFBRyxNQUFLLEVBQUUsSUFBRyxNQUFLLEVBQUUsUUFBTyxJQUFJLEdBQUU7QUFBQSxNQUFDLE9BQU8sRUFBRTtBQUFBLFdBQVEsSUFBSSxHQUFFO0FBQUEsTUFBQyxPQUFPLEVBQUU7QUFBQSxPQUFJLE1BQUssRUFBRSxJQUFHLG1CQUFrQixPQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUUsaUJBQWdCLENBQUMsR0FBRSxHQUFFLEdBQUUsTUFBSSxFQUFFLEdBQUcsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLFlBQVcsT0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFFLFNBQVEsT0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFFLFVBQVMsT0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFFLFNBQVEsT0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFDO0FBQUE7QUFBQSxNQUFNLEdBQUcsR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLO0FBQUE7QUFBQSxNQUFPLE9BQU8sR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLO0FBQUE7QUFBQSxNQUFPLGNBQWMsR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLO0FBQUE7QUFBQSxNQUFPLElBQUksR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLO0FBQUE7QUFBQSxNQUFPLFdBQVcsR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLO0FBQUE7QUFBQSxNQUFPLFVBQVUsR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLO0FBQUE7QUFBQSxN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RTtBQUFBO0FBQUEsRUFBRSxFQUFFLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUUsSUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQUEsSUFBRSxLQUFLLEtBQUcsR0FBRSxLQUFLLEtBQUc7QUFBQSxJQUFFLElBQUksSUFBRSxLQUFLLGVBQWEsTUFBTSxLQUFLLEVBQUMsUUFBTyxLQUFLLEdBQUUsQ0FBQyxJQUFPO0FBQUEsSUFBRSxLQUFLLEtBQUcsR0FBRSxLQUFLLEtBQUcsQ0FBQyxHQUFFLEdBQUUsSUFBRSxLQUFLLEdBQUcsSUFBSSxNQUFJO0FBQUEsTUFBQyxFQUFFLEtBQUcsTUFBSSxJQUFFLElBQUUsR0FBRSxFQUFFLEtBQUcsR0FBRSxFQUFFLEdBQUUsQ0FBQztBQUFBLE9BQUcsS0FBSyxLQUFHLE9BQUc7QUFBQSxNQUFDLEVBQUUsS0FBRyxFQUFFLE9BQUssSUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFFLEdBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRTtBQUFBO0FBQUEsSUFBRyxJQUFJLElBQUUsS0FBSyxlQUFhLENBQUMsR0FBRSxNQUFJO0FBQUEsTUFBQyxJQUFHLElBQUksT0FBSyxhQUFhLEVBQUUsRUFBRSxHQUFFLEVBQUUsS0FBUSxZQUFHLEtBQUcsTUFBSSxLQUFHLEdBQUU7QUFBQSxRQUFDLElBQUksSUFBRSxXQUFXLE1BQUk7QUFBQSxVQUFDLEtBQUssR0FBRyxDQUFDLEtBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxJQUFHLFFBQVE7QUFBQSxXQUFHLElBQUUsQ0FBQztBQUFBLFFBQUUsRUFBRSxTQUFPLEVBQUUsTUFBTSxHQUFFLEVBQUUsS0FBRztBQUFBLE1BQUM7QUFBQSxRQUFHLE1BQUk7QUFBQSxJQUFHLEtBQUssS0FBRyxDQUFDLEdBQUUsTUFBSTtBQUFBLE1BQUMsSUFBRyxFQUFFLElBQUc7QUFBQSxRQUFDLElBQUksSUFBRSxFQUFFLElBQUcsSUFBRSxFQUFFO0FBQUEsUUFBRyxJQUFHLENBQUMsS0FBRyxDQUFDO0FBQUEsVUFBRTtBQUFBLFFBQU8sRUFBRSxNQUFJLEdBQUUsRUFBRSxRQUFNLEdBQUUsRUFBRSxNQUFJLEtBQUcsRUFBRTtBQUFBLFFBQUUsSUFBSSxJQUFFLEVBQUUsTUFBSTtBQUFBLFFBQUUsRUFBRSxlQUFhLElBQUU7QUFBQSxNQUFDO0FBQUE7QUFBQSxJQUFHLElBQUksSUFBRSxHQUFFLElBQUUsTUFBSTtBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFJO0FBQUEsTUFBRSxJQUFHLEtBQUssZ0JBQWMsR0FBRTtBQUFBLFFBQUMsSUFBRTtBQUFBLFFBQUUsSUFBSSxJQUFFLFdBQVcsTUFBSSxJQUFFLEdBQUUsS0FBSyxhQUFhO0FBQUEsUUFBRSxFQUFFLFNBQU8sRUFBRSxNQUFNO0FBQUEsTUFBQztBQUFBLE1BQUMsT0FBTztBQUFBO0FBQUEsSUFBRyxLQUFLLGtCQUFnQixPQUFHO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUFBLE1BQUUsSUFBRyxNQUFTO0FBQUEsUUFBRSxPQUFPO0FBQUEsTUFBRSxJQUFJLElBQUUsRUFBRSxJQUFHLElBQUUsRUFBRTtBQUFBLE1BQUcsSUFBRyxDQUFDLEtBQUcsQ0FBQztBQUFBLFFBQUUsT0FBTyxJQUFFO0FBQUEsTUFBRSxJQUFJLEtBQUcsS0FBRyxFQUFFLEtBQUc7QUFBQSxNQUFFLE9BQU8sSUFBRTtBQUFBLE9BQUcsS0FBSyxLQUFHLE9BQUc7QUFBQSxNQUFDLElBQUksSUFBRSxFQUFFLElBQUcsSUFBRSxFQUFFO0FBQUEsTUFBRyxPQUFNLENBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxNQUFJLEtBQUcsRUFBRSxLQUFHLElBQUU7QUFBQTtBQUFBO0FBQUEsRUFBRyxLQUFHLE1BQUk7QUFBQSxFQUFHLEtBQUcsTUFBSTtBQUFBLEVBQUcsS0FBRyxNQUFJO0FBQUEsRUFBRyxLQUFHLE1BQUk7QUFBQSxFQUFHLEVBQUUsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7QUFBQSxJQUFFLEtBQUssS0FBRyxHQUFFLEtBQUssS0FBRyxHQUFFLEtBQUssS0FBRyxPQUFHO0FBQUEsTUFBQyxLQUFLLE1BQUksRUFBRSxJQUFHLEVBQUUsS0FBRztBQUFBLE9BQUcsS0FBSyxLQUFHLENBQUMsR0FBRSxHQUFFLEdBQUUsTUFBSTtBQUFBLE1BQUMsSUFBRyxDQUFDLEVBQUUsQ0FBQyxHQUFFO0FBQUEsUUFBQyxJQUFHLEtBQUssR0FBRyxDQUFDO0FBQUEsVUFBRSxPQUFPLEtBQUs7QUFBQSxRQUFvQixJQUFHLEdBQUU7QUFBQSxVQUFDLElBQUcsT0FBTyxLQUFHO0FBQUEsWUFBVyxNQUFNLElBQUksVUFBVSxvQ0FBb0M7QUFBQSxVQUFFLElBQUcsSUFBRSxFQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsRUFBRSxDQUFDO0FBQUEsWUFBRSxNQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxRQUFDLEVBQU07QUFBQSxnQkFBTSxJQUFJLFVBQVUsMkhBQTJIO0FBQUEsTUFBQztBQUFBLE1BQUMsT0FBTztBQUFBLE9BQUcsS0FBSyxLQUFHLENBQUMsR0FBRSxHQUFFLE1BQUk7QUFBQSxNQUFDLElBQUcsRUFBRSxLQUFHLEdBQUUsS0FBSyxJQUFHO0FBQUEsUUFBQyxJQUFJLElBQUUsS0FBSyxLQUFHLEVBQUU7QUFBQSxRQUFHLE1BQUssS0FBSyxLQUFHO0FBQUEsVUFBRyxLQUFLLEdBQUcsSUFBRTtBQUFBLE1BQUM7QUFBQSxNQUFDLEtBQUssTUFBSSxFQUFFLElBQUcsTUFBSSxFQUFFLFlBQVUsR0FBRSxFQUFFLHNCQUFvQixLQUFLO0FBQUE7QUFBQTtBQUFBLEVBQUssS0FBRyxPQUFHO0FBQUEsRUFBRyxLQUFHLENBQUMsR0FBRSxHQUFFLE1BQUk7QUFBQSxFQUFHLEtBQUcsQ0FBQyxHQUFFLEdBQUUsR0FBRSxNQUFJO0FBQUEsSUFBQyxJQUFHLEtBQUc7QUFBQSxNQUFFLE1BQU0sSUFBSSxVQUFVLGtFQUFrRTtBQUFBLElBQUUsT0FBTztBQUFBO0FBQUEsR0FBSSxFQUFFLEdBQUUsWUFBVyxJQUFFLEtBQUssZUFBWSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUcsS0FBSztBQUFBLE1BQUcsU0FBUSxJQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxPQUFLLEtBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxPQUFLLE1BQU0sSUFBRyxNQUFJLEtBQUs7QUFBQSxRQUFLLElBQUUsS0FBSyxHQUFHO0FBQUE7QUFBQSxHQUFJLEVBQUUsR0FBRSxZQUFXLElBQUUsS0FBSyxlQUFZLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBRyxLQUFLO0FBQUEsTUFBRyxTQUFRLElBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLE9BQUssS0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQUssTUFBTSxJQUFHLE1BQUksS0FBSztBQUFBLFFBQUssSUFBRSxLQUFLLEdBQUc7QUFBQTtBQUFBLEVBQUcsRUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU8sTUFBUyxhQUFHLEtBQUssR0FBRyxJQUFJLEtBQUssR0FBRyxFQUFFLE1BQUk7QUFBQTtBQUFBLEdBQUcsT0FBTyxHQUFFO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFBRSxLQUFLLEdBQUcsT0FBVSxhQUFHLEtBQUssR0FBRyxPQUFVLGFBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsTUFBSSxNQUFLLENBQUMsS0FBSyxHQUFHLElBQUcsS0FBSyxHQUFHLEVBQUU7QUFBQTtBQUFBLEdBQUksUUFBUSxHQUFFO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHO0FBQUEsTUFBRSxLQUFLLEdBQUcsT0FBVSxhQUFHLEtBQUssR0FBRyxPQUFVLGFBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsTUFBSSxNQUFLLENBQUMsS0FBSyxHQUFHLElBQUcsS0FBSyxHQUFHLEVBQUU7QUFBQTtBQUFBLEdBQUksSUFBSSxHQUFFO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxNQUFHLE1BQVMsYUFBRyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxNQUFJLE1BQU07QUFBQSxJQUFFO0FBQUE7QUFBQSxHQUFHLEtBQUssR0FBRTtBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsTUFBRyxNQUFTLGFBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsTUFBSSxNQUFNO0FBQUEsSUFBRTtBQUFBO0FBQUEsR0FBRyxNQUFNLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUFFLEtBQUssR0FBRyxPQUFVLGFBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsTUFBSSxNQUFNLEtBQUssR0FBRztBQUFBO0FBQUEsR0FBSyxPQUFPLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUc7QUFBQSxNQUFFLEtBQUssR0FBRyxPQUFVLGFBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsTUFBSSxNQUFNLEtBQUssR0FBRztBQUFBO0FBQUEsR0FBSyxPQUFPLFNBQVMsR0FBRTtBQUFBLElBQUMsT0FBTyxLQUFLLFFBQVE7QUFBQTtBQUFBLEdBQUcsT0FBTyxlQUFhO0FBQUEsRUFBVyxJQUFJLENBQUMsR0FBRSxJQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUcsSUFBRSxLQUFLLEdBQUcsQ0FBQyxJQUFFLEVBQUUsdUJBQXFCO0FBQUEsTUFBRSxJQUFHLE1BQVMsYUFBRyxFQUFFLEdBQUUsS0FBSyxHQUFHLElBQUcsSUFBSTtBQUFBLFFBQUUsT0FBTyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUcsQ0FBQztBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUUsT0FBTyxDQUFDLEdBQUUsSUFBRSxNQUFLO0FBQUEsSUFBQyxTQUFRLEtBQUssS0FBSyxHQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxDQUFDLElBQUUsRUFBRSx1QkFBcUI7QUFBQSxNQUFFLE1BQVMsYUFBRyxFQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRyxJQUFHLElBQUk7QUFBQSxJQUFDO0FBQUE7QUFBQSxFQUFFLFFBQVEsQ0FBQyxHQUFFLElBQUUsTUFBSztBQUFBLElBQUMsU0FBUSxLQUFLLEtBQUssR0FBRyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUcsSUFBRSxLQUFLLEdBQUcsQ0FBQyxJQUFFLEVBQUUsdUJBQXFCO0FBQUEsTUFBRSxNQUFTLGFBQUcsRUFBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUcsSUFBRyxJQUFJO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRSxVQUFVLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRTtBQUFBLElBQUcsU0FBUSxLQUFLLEtBQUssR0FBRyxFQUFDLFlBQVcsS0FBRSxDQUFDO0FBQUEsTUFBRSxLQUFLLEdBQUcsQ0FBQyxNQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBRyxRQUFRLEdBQUUsSUFBRTtBQUFBLElBQUksT0FBTztBQUFBO0FBQUEsRUFBRSxJQUFJLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFJLENBQUM7QUFBQSxJQUFFLElBQUcsTUFBUztBQUFBLE1BQUU7QUFBQSxJQUFPLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxDQUFDLElBQUUsRUFBRSx1QkFBcUI7QUFBQSxJQUFFLElBQUcsTUFBUztBQUFBLE1BQUU7QUFBQSxJQUFPLElBQUksSUFBRSxFQUFDLE9BQU0sRUFBQztBQUFBLElBQUUsSUFBRyxLQUFLLE1BQUksS0FBSyxJQUFHO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUcsSUFBRSxLQUFLLEdBQUc7QUFBQSxNQUFHLElBQUcsS0FBRyxHQUFFO0FBQUEsUUFBQyxJQUFJLElBQUUsS0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFFO0FBQUEsUUFBRyxFQUFFLE1BQUksR0FBRSxFQUFFLFFBQU0sS0FBSyxJQUFJO0FBQUEsTUFBQztBQUFBLElBQUM7QUFBQSxJQUFDLE9BQU8sS0FBSyxPQUFLLEVBQUUsT0FBSyxLQUFLLEdBQUcsS0FBSTtBQUFBO0FBQUEsRUFBRSxJQUFJLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxDQUFDO0FBQUEsSUFBRSxTQUFRLEtBQUssS0FBSyxHQUFHLEVBQUMsWUFBVyxLQUFFLENBQUMsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEtBQUssR0FBRyxJQUFHLElBQUUsS0FBSyxHQUFHLElBQUcsSUFBRSxLQUFLLEdBQUcsQ0FBQyxJQUFFLEVBQUUsdUJBQXFCO0FBQUEsTUFBRSxJQUFHLE1BQVMsYUFBRyxNQUFTO0FBQUEsUUFBRTtBQUFBLE1BQVMsSUFBSSxJQUFFLEVBQUMsT0FBTSxFQUFDO0FBQUEsTUFBRSxJQUFHLEtBQUssTUFBSSxLQUFLLElBQUc7QUFBQSxRQUFDLEVBQUUsTUFBSSxLQUFLLEdBQUc7QUFBQSxRQUFHLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBSSxJQUFFLEtBQUssR0FBRztBQUFBLFFBQUcsRUFBRSxRQUFNLEtBQUssTUFBTSxLQUFLLElBQUksSUFBRSxDQUFDO0FBQUEsTUFBQztBQUFBLE1BQUMsS0FBSyxPQUFLLEVBQUUsT0FBSyxLQUFLLEdBQUcsS0FBSSxFQUFFLFFBQVEsQ0FBQyxHQUFFLENBQUMsQ0FBQztBQUFBLElBQUM7QUFBQSxJQUFDLE9BQU87QUFBQTtBQUFBLEVBQUUsSUFBSSxDQUFDLEdBQUU7QUFBQSxJQUFDLEtBQUssTUFBTTtBQUFBLElBQUUsVUFBUSxHQUFFLE1BQUssR0FBRTtBQUFBLE1BQUMsSUFBRyxFQUFFLE9BQU07QUFBQSxRQUFDLElBQUksSUFBRSxLQUFLLElBQUksSUFBRSxFQUFFO0FBQUEsUUFBTSxFQUFFLFFBQU0sS0FBSyxHQUFHLElBQUksSUFBRTtBQUFBLE1BQUM7QUFBQSxNQUFDLEtBQUssR0FBRyxHQUFFLEVBQUUsT0FBTSxDQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRSxHQUFHLENBQUMsR0FBRSxHQUFFLElBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxNQUFJLFFBQU8sSUFBRSxFQUFFLGlCQUFlLENBQUMsSUFBTyxjQUFHO0FBQUEsSUFBRSxFQUFFLFNBQU8sR0FBRSxNQUFJLEVBQUUsS0FBRyxPQUFNLEVBQUUsTUFBSSxHQUFFLE1BQVMsY0FBSSxFQUFFLFFBQU0sSUFBRyxFQUFFLFFBQU07QUFBQSxJQUFNLElBQUksSUFBRSxLQUFLLEdBQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxJQUFFLE9BQU8sS0FBRyxFQUFFLGtCQUFnQixFQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUE7QUFBQSxFQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsSUFBQyxNQUFJLEtBQUksSUFBRSxLQUFLLEtBQUksT0FBTSxHQUFFLGdCQUFlLElBQUUsS0FBSyxnQkFBZSxpQkFBZ0IsSUFBRSxLQUFLLGlCQUFnQixRQUFPLE1BQUcsR0FBRSxJQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFBRSxJQUFHLE1BQVM7QUFBQSxNQUFFLE9BQU8sTUFBSSxFQUFFLE1BQUksWUFBVyxLQUFLLE9BQU8sQ0FBQyxHQUFFO0FBQUEsSUFBSyxNQUFJLGFBQVksSUFBRSxLQUFLLGdCQUFhO0FBQUEsSUFBRSxLQUFHLENBQUMsTUFBSSxFQUFFLFFBQU07QUFBQSxJQUFHLElBQUksSUFBRSxLQUFLLEdBQUcsR0FBRSxHQUFFLEVBQUUsUUFBTSxHQUFFLEdBQUUsQ0FBQztBQUFBLElBQUUsSUFBRyxLQUFLLGdCQUFjLElBQUUsS0FBSztBQUFBLE1BQWEsT0FBTyxLQUFLLEdBQUcsR0FBRSxLQUFLLEdBQUUsTUFBSSxFQUFFLE1BQUksUUFBTyxFQUFFLHVCQUFxQixPQUFJO0FBQUEsSUFBSyxJQUFJLElBQUUsS0FBSyxPQUFLLElBQU8sWUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQUEsSUFBRSxJQUFHLE1BQVM7QUFBQSxNQUFFLElBQUUsS0FBSyxPQUFLLElBQUUsS0FBSyxLQUFHLEtBQUssR0FBRyxXQUFTLElBQUUsS0FBSyxHQUFHLElBQUksSUFBRSxLQUFLLE9BQUssS0FBSyxLQUFHLEtBQUssR0FBRyxLQUFFLElBQUUsS0FBSyxJQUFHLEtBQUssR0FBRyxLQUFHLEdBQUUsS0FBSyxHQUFHLEtBQUcsR0FBRSxLQUFLLEdBQUcsSUFBSSxHQUFFLENBQUMsR0FBRSxLQUFLLEdBQUcsS0FBSyxNQUFJLEdBQUUsS0FBSyxHQUFHLEtBQUcsS0FBSyxJQUFHLEtBQUssS0FBRyxHQUFFLEtBQUssTUFBSyxLQUFLLEdBQUcsR0FBRSxHQUFFLENBQUMsR0FBRSxNQUFJLEVBQUUsTUFBSSxRQUFPLElBQUUsT0FBRyxLQUFLLE1BQUksQ0FBQyxLQUFHLEtBQUssS0FBSyxHQUFFLEdBQUUsS0FBSztBQUFBLElBQU07QUFBQSxNQUFDLEtBQUssR0FBRyxDQUFDO0FBQUEsTUFBRSxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsTUFBRyxJQUFHLE1BQUksR0FBRTtBQUFBLFFBQUMsSUFBRyxDQUFDO0FBQUEsVUFBRSxJQUFHLEtBQUssR0FBRyxDQUFDLEdBQUU7QUFBQSxZQUFDLE1BQUksS0FBRyxFQUFFLGtCQUFrQixNQUFNLElBQUksTUFBTSxVQUFVLENBQUM7QUFBQSxZQUFFLE1BQUksc0JBQXFCLE1BQUc7QUFBQSxZQUFFLE1BQVMsYUFBRyxNQUFJLE1BQUksS0FBSyxNQUFJLEtBQUssS0FBSyxHQUFFLEdBQUUsS0FBSyxHQUFFLEtBQUssTUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUUsR0FBRSxLQUFLLENBQUM7QUFBQSxVQUFFLEVBQU07QUFBQSxpQkFBSyxNQUFJLEtBQUssS0FBSyxHQUFFLEdBQUUsS0FBSyxHQUFFLEtBQUssTUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUUsR0FBRSxLQUFLLENBQUM7QUFBQSxRQUFFLElBQUcsS0FBSyxHQUFHLENBQUMsR0FBRSxLQUFLLEdBQUcsR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFLLEdBQUcsS0FBRyxHQUFFLENBQUMsR0FBRTtBQUFBLFVBQUMsSUFBSSxJQUFFLEtBQUcsS0FBSyxHQUFHLENBQUMsSUFBRSxFQUFFLHVCQUFxQixHQUFFLElBQUUsTUFBUyxZQUFFLFFBQU0sTUFBSSxJQUFFLFlBQVU7QUFBQSxVQUFTLE1BQUksRUFBRSxNQUFJLEdBQUUsTUFBUyxjQUFJLEVBQUUsV0FBUyxLQUFJLEtBQUssTUFBSSxLQUFLLFdBQVcsR0FBRSxHQUFFLENBQUM7QUFBQSxRQUFDO0FBQUEsTUFBQyxFQUFNO0FBQUEsY0FBSSxNQUFJLEVBQUUsTUFBSSxXQUFVLEtBQUssTUFBSSxLQUFLLFdBQVcsR0FBRSxHQUFFLFFBQVE7QUFBQTtBQUFBLElBQUcsSUFBRyxNQUFJLEtBQUcsQ0FBQyxLQUFLLE1BQUksS0FBSyxHQUFHLEdBQUUsS0FBSyxPQUFLLEtBQUcsS0FBSyxHQUFHLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxLQUFLLEdBQUcsR0FBRSxDQUFDLElBQUcsQ0FBQyxLQUFHLEtBQUssTUFBSSxLQUFLLElBQUc7QUFBQSxNQUFDLElBQUksSUFBRSxLQUFLLElBQUc7QUFBQSxNQUFFLE1BQUssSUFBRSxHQUFHLE1BQU07QUFBQSxRQUFHLEtBQUssS0FBSyxHQUFHLENBQUM7QUFBQSxJQUFDO0FBQUEsSUFBQyxPQUFPO0FBQUE7QUFBQSxFQUFLLEdBQUcsR0FBRTtBQUFBLElBQUMsSUFBRztBQUFBLE1BQUMsTUFBSyxLQUFLLE1BQUk7QUFBQSxRQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsS0FBSztBQUFBLFFBQUksSUFBRyxLQUFLLEdBQUcsSUFBRSxHQUFFLEtBQUssR0FBRyxDQUFDLEdBQUU7QUFBQSxVQUFDLElBQUcsRUFBRTtBQUFBLFlBQXFCLE9BQU8sRUFBRTtBQUFBLFFBQW9CLEVBQU0sU0FBRyxNQUFTO0FBQUEsVUFBRSxPQUFPO0FBQUEsTUFBQztBQUFBLGNBQUU7QUFBQSxNQUFRLElBQUcsS0FBSyxNQUFJLEtBQUssSUFBRztBQUFBLFFBQUMsSUFBSSxJQUFFLEtBQUssSUFBRztBQUFBLFFBQUUsTUFBSyxJQUFFLEdBQUcsTUFBTTtBQUFBLFVBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUFBLE1BQUM7QUFBQTtBQUFBO0FBQUEsRUFBRyxFQUFFLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEtBQUssSUFBRyxJQUFFLEtBQUssR0FBRyxJQUFHLElBQUUsS0FBSyxHQUFHLElBQUcsSUFBRSxLQUFLLEdBQUcsQ0FBQztBQUFBLElBQUUsS0FBRyxFQUFFLGtCQUFrQixNQUFNLElBQUksTUFBTSxTQUFTLENBQUM7QUFBQSxJQUFFLElBQUksSUFBRSxJQUFFLEVBQUUsdUJBQXFCO0FBQUEsSUFBRSxRQUFPLEtBQUssTUFBSSxLQUFLLE9BQUssTUFBUyxjQUFJLEtBQUssTUFBSSxLQUFLLEtBQUssR0FBRSxHQUFFLE9BQU8sR0FBRSxLQUFLLE1BQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFFLEdBQUUsT0FBTyxDQUFDLElBQUcsS0FBSyxHQUFHLENBQUMsR0FBRSxLQUFLLEtBQUssT0FBSyxhQUFhLEtBQUssR0FBRyxFQUFFLEdBQUUsS0FBSyxHQUFHLEtBQVEsWUFBRyxNQUFJLEtBQUssR0FBRyxLQUFRLFdBQUUsS0FBSyxHQUFHLEtBQVEsV0FBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUcsS0FBSyxPQUFLLEtBQUcsS0FBSyxLQUFHLEtBQUssS0FBRyxHQUFFLEtBQUssR0FBRyxTQUFPLEtBQUcsS0FBSyxLQUFHLEtBQUssR0FBRyxJQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRSxLQUFLLE1BQUs7QUFBQTtBQUFBLEVBQUUsR0FBRyxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE1BQUksUUFBTyxJQUFFLEVBQUUsaUJBQWUsQ0FBQyxJQUFPLGNBQUc7QUFBQSxJQUFFLEVBQUUsU0FBTyxHQUFFLE1BQUksRUFBRSxLQUFHLE9BQU0sRUFBRSxNQUFJLEdBQUUsRUFBRSxRQUFNO0FBQUEsSUFBTSxJQUFJLElBQUUsS0FBSyxHQUFHLEdBQUUsQ0FBQztBQUFBLElBQUUsT0FBTyxFQUFFLGtCQUFnQixFQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUE7QUFBQSxFQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxNQUFJLGdCQUFlLElBQUUsS0FBSyxnQkFBZSxRQUFPLE1BQUcsR0FBRSxJQUFFLEtBQUssR0FBRyxJQUFJLENBQUM7QUFBQSxJQUFFLElBQUcsTUFBUyxXQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsTUFBRyxJQUFHLEtBQUssR0FBRyxDQUFDLEtBQUcsRUFBRSx5QkFBNEI7QUFBQSxRQUFFLE9BQU07QUFBQSxNQUFHLElBQUcsS0FBSyxHQUFHLENBQUM7QUFBQSxRQUFFLE1BQUksRUFBRSxNQUFJLFNBQVEsS0FBSyxHQUFHLEdBQUUsQ0FBQztBQUFBLE1BQVE7QUFBQSxlQUFPLEtBQUcsS0FBSyxHQUFHLENBQUMsR0FBRSxNQUFJLEVBQUUsTUFBSSxPQUFNLEtBQUssR0FBRyxHQUFFLENBQUMsSUFBRztBQUFBLElBQUUsRUFBTTtBQUFBLFlBQUksRUFBRSxNQUFJO0FBQUEsSUFBUSxPQUFNO0FBQUE7QUFBQSxFQUFHLElBQUksQ0FBQyxHQUFFLElBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxNQUFJLFFBQU8sSUFBRSxFQUFFLElBQUUsQ0FBQyxJQUFPLGNBQUc7QUFBQSxJQUFFLE1BQUksRUFBRSxLQUFHLFFBQU8sRUFBRSxNQUFJLEdBQUUsRUFBRSxRQUFNLE9BQU0sRUFBRSxTQUFPO0FBQUEsSUFBRSxJQUFJLElBQUUsS0FBSyxHQUFHLEdBQUUsQ0FBQztBQUFBLElBQUUsT0FBTyxFQUFFLGtCQUFnQixFQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUE7QUFBQSxFQUFFLEVBQUUsQ0FBQyxHQUFFLEdBQUU7QUFBQSxJQUFDLE1BQUksUUFBTyxHQUFFLFlBQVcsSUFBRSxLQUFLLGVBQVksR0FBRSxJQUFFLEtBQUssR0FBRyxJQUFJLENBQUM7QUFB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S0FBSyxHQUFHLEdBQUUsQ0FBQztBQUFBLElBQUUsSUFBRyxNQUFTO0FBQUEsTUFBRSxNQUFNLElBQUksTUFBTSw0QkFBNEI7QUFBQSxJQUFFLE9BQU87QUFBQTtBQUFBLEVBQUUsSUFBSSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE1BQUksUUFBTyxJQUFFLEVBQUUsaUJBQWUsQ0FBQyxJQUFPLGNBQUc7QUFBQSxJQUFFLEVBQUUsU0FBTyxHQUFFLE1BQUksRUFBRSxLQUFHLFFBQU8sRUFBRSxNQUFJLEdBQUUsRUFBRSxZQUFVLEVBQUUsVUFBUSxFQUFFLFVBQVMsRUFBRSxRQUFNO0FBQUEsSUFBTSxJQUFJLElBQUUsS0FBSyxHQUFHLEdBQUUsQ0FBQztBQUFBLElBQUUsT0FBTyxNQUFJLEVBQUUsUUFBTSxJQUFHLEVBQUUsa0JBQWdCLEVBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQTtBQUFBLEVBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLO0FBQUEsSUFBRyxJQUFHLENBQUM7QUFBQSxNQUFFLE1BQU0sSUFBSSxNQUFNLHVDQUF1QztBQUFBLElBQUUsTUFBSSxTQUFRLEdBQUUsUUFBTyxHQUFFLGNBQWEsTUFBSyxNQUFHO0FBQUEsSUFBRSxLQUFHLE1BQUksRUFBRSxlQUFhO0FBQUEsSUFBSSxJQUFJLElBQUUsS0FBSyxHQUFHLEdBQUUsQ0FBQyxHQUFFLElBQUUsS0FBRyxNQUFTO0FBQUEsSUFBRSxJQUFHLE1BQUksRUFBRSxPQUFLLElBQUUsU0FBTyxPQUFNLE1BQUksRUFBRSxRQUFNLEtBQUksQ0FBQztBQUFBLE1BQUUsT0FBTztBQUFBLElBQUUsSUFBSSxJQUFFLEVBQUUsR0FBRSxHQUFFLEVBQUMsU0FBUSxHQUFFLFNBQVEsRUFBQyxDQUFDO0FBQUEsSUFBRSxPQUFPLE1BQUksRUFBRSxRQUFNLElBQUcsS0FBSyxHQUFHLEdBQUUsR0FBRSxDQUFDLEdBQUU7QUFBQTtBQUFBLEVBQUUsR0FBRyxDQUFDLEdBQUUsSUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE1BQUksUUFBTyxJQUFFLEVBQUUsaUJBQWUsQ0FBQyxJQUFPLGNBQUc7QUFBQSxJQUFFLEVBQUUsU0FBTyxHQUFFLE1BQUksRUFBRSxLQUFHLE9BQU0sRUFBRSxNQUFJLEdBQUUsRUFBRSxRQUFNO0FBQUEsSUFBTSxJQUFJLElBQUUsS0FBSyxHQUFHLEdBQUUsQ0FBQztBQUFBLElBQUUsT0FBTyxNQUFJLE1BQVMsY0FBSSxFQUFFLFFBQU0sSUFBRyxFQUFFLGtCQUFnQixFQUFFLFFBQVEsQ0FBQyxJQUFHO0FBQUE7QUFBQSxFQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsQ0FBQyxHQUFFO0FBQUEsSUFBQyxNQUFJLFlBQVcsSUFBRSxLQUFLLFlBQVcsZ0JBQWUsSUFBRSxLQUFLLGdCQUFlLG9CQUFtQixJQUFFLEtBQUssb0JBQW1CLFFBQU8sTUFBRyxHQUFFLElBQUUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUFBLElBQUUsSUFBRyxNQUFTLFdBQUU7QUFBQSxNQUFDLE1BQUksRUFBRSxNQUFJO0FBQUEsTUFBUTtBQUFBLElBQU07QUFBQSxJQUFDLElBQUksSUFBRSxLQUFLLEdBQUcsSUFBRyxJQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFBRSxPQUFPLEtBQUcsS0FBSyxHQUFHLEdBQUUsQ0FBQyxHQUFFLEtBQUssR0FBRyxDQUFDLElBQUUsS0FBRyxNQUFJLEVBQUUsTUFBSSxtQkFBa0IsS0FBRyxFQUFFLHlCQUE0QixhQUFHLE1BQUksRUFBRSxnQkFBYyxPQUFJLEVBQUUsd0JBQTJCLGNBQUksS0FBRyxLQUFLLEdBQUcsR0FBRSxRQUFRLEdBQUUsTUFBSSxFQUFFLE1BQUksVUFBUyxLQUFHLE1BQUksRUFBRSxnQkFBYyxPQUFJLEtBQVEsY0FBSSxNQUFJLEVBQUUsTUFBSSxJQUFFLGFBQVcsUUFBTyxLQUFLLEdBQUcsQ0FBQyxHQUFFLEtBQUcsS0FBSyxHQUFHLENBQUMsR0FBRSxJQUFFLEVBQUUsdUJBQXFCO0FBQUE7QUFBQSxFQUFHLEVBQUUsQ0FBQyxHQUFFLEdBQUU7QUFBQSxJQUFDLEtBQUssR0FBRyxLQUFHLEdBQUUsS0FBSyxHQUFHLEtBQUc7QUFBQTtBQUFBLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLE1BQUksS0FBSyxPQUFLLE1BQUksS0FBSyxLQUFHLEtBQUssS0FBRyxLQUFLLEdBQUcsS0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRSxLQUFLLEdBQUcsS0FBSyxJQUFHLENBQUMsR0FBRSxLQUFLLEtBQUc7QUFBQTtBQUFBLEVBQUcsTUFBTSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU8sS0FBSyxHQUFHLEdBQUUsUUFBUTtBQUFBO0FBQUEsRUFBRSxFQUFFLENBQUMsR0FBRSxHQUFFO0FBQUEsSUFBQyxFQUFFLGtCQUFnQixFQUFFLFFBQVEsRUFBQyxJQUFHLFVBQVMsUUFBTyxHQUFFLEtBQUksR0FBRSxPQUFNLEtBQUksQ0FBQztBQUFBLElBQUUsSUFBSSxJQUFFO0FBQUEsSUFBRyxJQUFHLEtBQUssT0FBSyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHLElBQUksQ0FBQztBQUFBLE1BQUUsSUFBRyxNQUFTO0FBQUEsUUFBRSxJQUFHLEtBQUssS0FBSyxPQUFLLGFBQWEsS0FBSyxLQUFLLEVBQUUsR0FBRSxLQUFLLEdBQUcsS0FBUSxZQUFHLElBQUUsTUFBRyxLQUFLLE9BQUs7QUFBQSxVQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsUUFBTTtBQUFBLFVBQUMsS0FBSyxHQUFHLENBQUM7QUFBQSxVQUFFLElBQUksSUFBRSxLQUFLLEdBQUc7QUFBQSxVQUFHLElBQUcsS0FBSyxHQUFHLENBQUMsSUFBRSxFQUFFLGtCQUFrQixNQUFNLElBQUksTUFBTSxTQUFTLENBQUMsS0FBRyxLQUFLLE1BQUksS0FBSyxRQUFNLEtBQUssTUFBSSxLQUFLLEtBQUssR0FBRSxHQUFFLENBQUMsR0FBRSxLQUFLLE1BQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxHQUFFLEdBQUUsQ0FBQyxDQUFDLElBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFFLEtBQUssR0FBRyxLQUFRLFdBQUUsS0FBSyxHQUFHLEtBQVEsV0FBRSxNQUFJLEtBQUs7QUFBQSxZQUFHLEtBQUssS0FBRyxLQUFLLEdBQUc7QUFBQSxVQUFRLFNBQUcsTUFBSSxLQUFLO0FBQUEsWUFBRyxLQUFLLEtBQUcsS0FBSyxHQUFHO0FBQUEsVUFBTztBQUFBLFlBQUMsSUFBSSxJQUFFLEtBQUssR0FBRztBQUFBLFlBQUcsS0FBSyxHQUFHLEtBQUcsS0FBSyxHQUFHO0FBQUEsWUFBRyxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsWUFBRyxLQUFLLEdBQUcsS0FBRyxLQUFLLEdBQUc7QUFBQTtBQUFBLFVBQUcsS0FBSyxNQUFLLEtBQUssR0FBRyxLQUFLLENBQUM7QUFBQTtBQUFBLElBQUU7QUFBQSxJQUFDLElBQUcsS0FBSyxNQUFJLEtBQUssSUFBSSxRQUFPO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxJQUFHO0FBQUEsTUFBRSxNQUFLLElBQUUsR0FBRyxNQUFNO0FBQUEsUUFBRyxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFBQztBQUFBLElBQUMsT0FBTztBQUFBO0FBQUEsRUFBRSxLQUFLLEdBQUU7QUFBQSxJQUFDLE9BQU8sS0FBSyxHQUFHLFFBQVE7QUFBQTtBQUFBLEVBQUUsRUFBRSxDQUFDLEdBQUU7QUFBQSxJQUFDLFNBQVEsS0FBSyxLQUFLLEdBQUcsRUFBQyxZQUFXLEtBQUUsQ0FBQyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsTUFBRyxJQUFHLEtBQUssR0FBRyxDQUFDO0FBQUEsUUFBRSxFQUFFLGtCQUFrQixNQUFNLElBQUksTUFBTSxTQUFTLENBQUM7QUFBQSxNQUFNO0FBQUEsUUFBQyxJQUFJLElBQUUsS0FBSyxHQUFHO0FBQUEsUUFBRyxLQUFLLE1BQUksS0FBSyxLQUFLLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBSyxNQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRSxHQUFFLENBQUMsQ0FB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O0FBQUEsTUFDckMsT0FBTyxPQUFPLFNBQVM7QUFBQSxNQUd2QixJQUFJLENBQUMsT0FBTztBQUFBLFFBQVMsT0FBTyxVQUFVLENBQUM7QUFBQSxNQUV2QyxPQUFPLFFBQVEsUUFBUTtBQUFBLFdBQ2hCLE9BQU8sUUFBUTtBQUFBLE1BQ3RCO0FBQUEsTUFHQSxPQUFPLE1BQU07QUFBQSxRQUNULFlBQVksY0FBYztBQUFBLE1BQzlCO0FBQUE7QUFBQSxJQUdKLGNBQWMsQ0FBQyxnQkFBZ0I7QUFBQSxNQUMzQixTQUFTLGVBQWUsTUFBTSxVQUFVO0FBQUE7QUFBQSxTQUd0QyxZQUFXLEdBQUc7QUFBQSxNQUNoQixNQUFNLFdBQVcsTUFBSyxJQUFJLEdBQUcsUUFBUSxVQUFVO0FBQUEsTUFDL0MsTUFBTSxVQUFVLFVBQVUsSUFBSSxPQUFPO0FBQUE7QUFBQSxFQUU3QztBQUFBO0FBR0osU0FBUyxhQUFhLEdBQUc7QUFBQSxFQUVyQixNQUFNLE1BQU0sQ0FBQyxPQUFPLE9BQU87QUFBQSxFQUczQixJQUFJLGNBQWMsQ0FBQyxHQUFJLFdBQVcsTUFBSyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksYUFBWSxNQUFLLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUksR0FBSSxXQUFXLE1BQUssSUFBSSxHQUFHLE1BQU0sTUFBTSxjQUFjLENBQUMsSUFBSSxhQUFZLE1BQUssSUFBSSxHQUFHLE1BQU0sTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUUsRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLFdBQVcsV0FBVyxHQUFHLENBQUM7QUFBQSxFQUV6UixjQUFjLFlBQVksT0FBTyxDQUFDLGVBQWUsZUFBZSxVQUFVO0FBQUEsRUFFMUUsTUFBTSxvQkFBb0IsWUFBWSxJQUFJLENBQUMsZUFBZ0IsV0FBVyxXQUFXLEdBQUcsSUFBSSxJQUFJLE9BQU8sSUFBSSxhQUFhLElBQUksVUFBVztBQUFBLEVBRW5JLE9BQU8sQ0FBQyxHQUFHLEtBQUssR0FBRyxpQkFBaUI7QUFBQTtBQUd4QyxlQUFlLHNCQUFzQixHQUFpQjtBQUFBLEVBQ2xELE1BQU0sa0JBQWtCLE1BQU0sU0FBUyxNQUFLLElBQUksR0FBRyxNQUFNLE1BQU0sZUFBZSxHQUFHLE9BQU87QUFBQSxFQUN4RixNQUFNLGVBQWUsb0JBQUssTUFBTSxlQUFlO0FBQUEsRUFDL0MsSUFBSTtBQUFBLEVBQ0osV0FBVyxlQUFlLGFBQWEsVUFBaUI7QUFBQSxJQUVwRCxJQUFJLE1BQUssSUFBSSxDQUFDLE1BQU0sTUFBSyxJQUFJLEdBQUcsTUFBTSxXQUFXO0FBQUEsTUFBRztBQUFBLElBQ3BELFVBQVcsYUFBYSxTQUFpQjtBQUFBLElBQ3pDO0FBQUEsRUFDSjtBQUFBLEVBQ0EsSUFBSSxDQUFDO0FBQUEsSUFBUyxNQUFNLElBQUksTUFBTSxvQ0FBb0M7QUFBQSxFQUNsRSxPQUFPO0FBQUE7IiwKICAiZGVidWdJZCI6ICJBMEUzRTZDRTE4NTlGM0I2NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|