mevento 1.9.6 → 1.9.9
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/esm2020/lib/mevento.mjs +137 -17
- package/fesm2015/mevento.mjs +139 -17
- package/fesm2015/mevento.mjs.map +1 -1
- package/fesm2020/mevento.mjs +137 -17
- package/fesm2020/mevento.mjs.map +1 -1
- package/lib/mevento.d.ts +16 -3
- package/package.json +1 -1
package/esm2020/lib/mevento.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
function error(token, expected) {
|
|
2
2
|
const text = `Invalid token ${token.type}[${token.value}] at ${token.line}, ${token.col} ${expected ? `: expecting ${expected} token` : ''}\n`;
|
|
3
|
-
throw (text);
|
|
3
|
+
throw Error(text);
|
|
4
4
|
}
|
|
5
5
|
function isNum(value) {
|
|
6
6
|
return typeof value === 'number';
|
|
@@ -12,10 +12,10 @@ function isString(value) {
|
|
|
12
12
|
return typeof value === 'string';
|
|
13
13
|
}
|
|
14
14
|
function _boolValue(test) {
|
|
15
|
-
return test
|
|
16
|
-
(
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
return (test === null ||
|
|
16
|
+
(isNum(test) && test === 0) ||
|
|
17
|
+
(isString(test) && test.length === 0) ||
|
|
18
|
+
(isBoolean(test) && !test)) ? false : true;
|
|
19
19
|
}
|
|
20
20
|
;
|
|
21
21
|
function hashCode(str) {
|
|
@@ -78,6 +78,8 @@ TokenType.in = 40;
|
|
|
78
78
|
TokenType.TILL = 41;
|
|
79
79
|
TokenType.BREAK = 42;
|
|
80
80
|
TokenType.CONTINUE = 43;
|
|
81
|
+
TokenType.nullity = 44;
|
|
82
|
+
TokenType.RETURN = 45;
|
|
81
83
|
export class Token {
|
|
82
84
|
constructor(type, value, line = 1, col = 1) {
|
|
83
85
|
this.type = type;
|
|
@@ -117,6 +119,8 @@ Chars.less = "<".charCodeAt(0);
|
|
|
117
119
|
Chars.and = "&".charCodeAt(0);
|
|
118
120
|
Chars.pipe = "|".charCodeAt(0);
|
|
119
121
|
Chars.colon = ":".charCodeAt(0);
|
|
122
|
+
Chars.questionMark = "?".charCodeAt(0);
|
|
123
|
+
Chars.shebang = "#".charCodeAt(0);
|
|
120
124
|
export class LexerDictionary {
|
|
121
125
|
constructor(lang, keywords) {
|
|
122
126
|
this.keywords = {};
|
|
@@ -175,10 +179,10 @@ class Lexer {
|
|
|
175
179
|
this._col++;
|
|
176
180
|
}
|
|
177
181
|
_pick() {
|
|
178
|
-
if (this._position >= this._source.length) {
|
|
182
|
+
if (this._position + 1 >= this._source.length) {
|
|
179
183
|
return -1;
|
|
180
184
|
}
|
|
181
|
-
return this._source[this._position].charCodeAt(0);
|
|
185
|
+
return this._source[this._position + 1].charCodeAt(0);
|
|
182
186
|
}
|
|
183
187
|
_isId(code) {
|
|
184
188
|
if (code < 48) {
|
|
@@ -340,6 +344,22 @@ class Lexer {
|
|
|
340
344
|
}
|
|
341
345
|
return new Token(TokenType.stringConst, ret, lastL, lastC);
|
|
342
346
|
}
|
|
347
|
+
_skipLineComment() {
|
|
348
|
+
while (!this._isLineEnd(this._currentChar) === true) {
|
|
349
|
+
this._advance();
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
_skipComment() {
|
|
353
|
+
while (this._currentChar !== -1) {
|
|
354
|
+
if (this._currentChar === Chars.star && this._pick() === Chars.shebang) {
|
|
355
|
+
// end of block comment
|
|
356
|
+
this._advance();
|
|
357
|
+
this._advance();
|
|
358
|
+
break;
|
|
359
|
+
}
|
|
360
|
+
this._advance();
|
|
361
|
+
}
|
|
362
|
+
}
|
|
343
363
|
// f=SUBMIT_FORM(xxx);
|
|
344
364
|
// r = CALL_API(API_ID, f);
|
|
345
365
|
// DISPLAY("MSG #r")
|
|
@@ -358,6 +378,18 @@ class Lexer {
|
|
|
358
378
|
this._skipWhiteSpace();
|
|
359
379
|
continue;
|
|
360
380
|
}
|
|
381
|
+
if (this._currentChar == Chars.shebang) {
|
|
382
|
+
this._advance();
|
|
383
|
+
if (this._currentChar === Chars.star) {
|
|
384
|
+
// mutli block comment
|
|
385
|
+
this._advance();
|
|
386
|
+
this._skipComment();
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
this._skipLineComment();
|
|
390
|
+
}
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
361
393
|
if (this._isDigit(this._currentChar)) {
|
|
362
394
|
return this._number();
|
|
363
395
|
}
|
|
@@ -462,6 +494,11 @@ class Lexer {
|
|
|
462
494
|
this._advance();
|
|
463
495
|
return new Token(TokenType.or, '||', lastL, lastC);
|
|
464
496
|
}
|
|
497
|
+
if (this._currentChar === Chars.questionMark && this._pick() === Chars.questionMark) {
|
|
498
|
+
this._advance();
|
|
499
|
+
this._advance();
|
|
500
|
+
return new Token(TokenType.nullity, '??', lastL, lastC);
|
|
501
|
+
}
|
|
465
502
|
if (this._currentChar === Chars.quote || this._currentChar === Chars.squote) {
|
|
466
503
|
const startChar = this._currentChar;
|
|
467
504
|
this._advance();
|
|
@@ -489,6 +526,7 @@ Lexer._defaultLanguage = new LexerDictionary("en", {
|
|
|
489
526
|
"in": "in",
|
|
490
527
|
"break": "break",
|
|
491
528
|
"continue": "continue",
|
|
529
|
+
"return": "return",
|
|
492
530
|
});
|
|
493
531
|
Lexer.languages = [
|
|
494
532
|
Lexer._defaultLanguage,
|
|
@@ -507,6 +545,7 @@ Lexer.languages = [
|
|
|
507
545
|
"dans": "in",
|
|
508
546
|
"couper": "break",
|
|
509
547
|
"continuer": "continue",
|
|
548
|
+
"returner": "return",
|
|
510
549
|
}),
|
|
511
550
|
new LexerDictionary("bm", {
|
|
512
551
|
"nii": "if",
|
|
@@ -523,6 +562,7 @@ Lexer.languages = [
|
|
|
523
562
|
"kono": "in",
|
|
524
563
|
"tike": "break",
|
|
525
564
|
"ipan": "continue",
|
|
565
|
+
"segin": "return",
|
|
526
566
|
}),
|
|
527
567
|
];
|
|
528
568
|
Lexer.RESERVED = {
|
|
@@ -540,6 +580,7 @@ Lexer.RESERVED = {
|
|
|
540
580
|
"in": Token.from(TokenType.in, "in"),
|
|
541
581
|
"break": Token.from(TokenType.BREAK, "break"),
|
|
542
582
|
"continue": Token.from(TokenType.CONTINUE, "continue"),
|
|
583
|
+
"return": Token.from(TokenType.RETURN, "return"),
|
|
543
584
|
};
|
|
544
585
|
/**
|
|
545
586
|
* Parser
|
|
@@ -746,6 +787,12 @@ export class BreakAST extends AST {
|
|
|
746
787
|
super(line, col);
|
|
747
788
|
}
|
|
748
789
|
}
|
|
790
|
+
export class ReturnAST extends AST {
|
|
791
|
+
constructor(value, line, col) {
|
|
792
|
+
super(line, col);
|
|
793
|
+
this.value = value;
|
|
794
|
+
}
|
|
795
|
+
}
|
|
749
796
|
export class ContinueAST extends AST {
|
|
750
797
|
constructor(line, col) {
|
|
751
798
|
super(line, col);
|
|
@@ -785,6 +832,14 @@ class Parser {
|
|
|
785
832
|
this._eat(TokenType.id);
|
|
786
833
|
return node;
|
|
787
834
|
}
|
|
835
|
+
_return() {
|
|
836
|
+
const token = this.currentToken;
|
|
837
|
+
let value = undefined;
|
|
838
|
+
if (!this._expect(TokenType.eol) && !this._expect(TokenType.semi)) {
|
|
839
|
+
value = this._expression();
|
|
840
|
+
}
|
|
841
|
+
return new ReturnAST(value, token?.line, token?.col);
|
|
842
|
+
}
|
|
788
843
|
_factor() {
|
|
789
844
|
const token = this.currentToken;
|
|
790
845
|
switch (token.type) {
|
|
@@ -829,7 +884,7 @@ class Parser {
|
|
|
829
884
|
_expression() {
|
|
830
885
|
let node = this._term();
|
|
831
886
|
node = this._tryBinaryExpression(0, node);
|
|
832
|
-
while ([TokenType.and, TokenType.or].includes(this.currentToken.type)) {
|
|
887
|
+
while ([TokenType.and, TokenType.or, TokenType.nullity].includes(this.currentToken.type)) {
|
|
833
888
|
const token = this.currentToken;
|
|
834
889
|
this._eat(token.type);
|
|
835
890
|
node = new LogicalExpressionAST(node, token, this._expression());
|
|
@@ -884,6 +939,7 @@ class Parser {
|
|
|
884
939
|
if (this.currentToken?.type != TokenType.rbrace) {
|
|
885
940
|
this._eatEOL();
|
|
886
941
|
properties.push(this._property());
|
|
942
|
+
this._eatEOL();
|
|
887
943
|
}
|
|
888
944
|
while (this.currentToken?.type === TokenType.comma) {
|
|
889
945
|
this._eat(TokenType.comma);
|
|
@@ -945,6 +1001,7 @@ class Parser {
|
|
|
945
1001
|
this._eatEOL();
|
|
946
1002
|
// if (expect(Lexer.TokenType.RPAREN)) return emptyList()
|
|
947
1003
|
let expr = this._expression();
|
|
1004
|
+
this._eatEOL();
|
|
948
1005
|
const result = [expr];
|
|
949
1006
|
while (this.currentToken?.type === TokenType.comma) {
|
|
950
1007
|
this._eat(TokenType.comma);
|
|
@@ -954,6 +1011,7 @@ class Parser {
|
|
|
954
1011
|
}
|
|
955
1012
|
expr = this._expression();
|
|
956
1013
|
result.push(expr);
|
|
1014
|
+
this._eatEOL();
|
|
957
1015
|
}
|
|
958
1016
|
return result;
|
|
959
1017
|
}
|
|
@@ -1034,7 +1092,7 @@ class Parser {
|
|
|
1034
1092
|
else {
|
|
1035
1093
|
consequent = this._expression();
|
|
1036
1094
|
}
|
|
1037
|
-
this._eatSemiOrEOL();
|
|
1095
|
+
// this._eatSemiOrEOL();
|
|
1038
1096
|
let alternate;
|
|
1039
1097
|
if (this.currentToken.type === TokenType.ELSE) {
|
|
1040
1098
|
this._eat(TokenType.ELSE);
|
|
@@ -1141,6 +1199,9 @@ class Parser {
|
|
|
1141
1199
|
case TokenType.CONTINUE:
|
|
1142
1200
|
this._eat(TokenType.CONTINUE);
|
|
1143
1201
|
return new ContinueAST(this.currentToken?.line, this.currentToken?.col);
|
|
1202
|
+
case TokenType.RETURN:
|
|
1203
|
+
this._eat(TokenType.RETURN);
|
|
1204
|
+
return this._return();
|
|
1144
1205
|
case TokenType.semi:
|
|
1145
1206
|
this._eatSemi();
|
|
1146
1207
|
return this._statement();
|
|
@@ -1215,6 +1276,12 @@ export class BreakBranch extends LoopControl {
|
|
|
1215
1276
|
}
|
|
1216
1277
|
export class ContinueBranch extends LoopControl {
|
|
1217
1278
|
}
|
|
1279
|
+
export class ReturnBranch {
|
|
1280
|
+
constructor(value) {
|
|
1281
|
+
this.value = value;
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
;
|
|
1218
1285
|
// AST Wallker
|
|
1219
1286
|
class ANodeVisitor {
|
|
1220
1287
|
constructor() {
|
|
@@ -1248,6 +1315,7 @@ export class NodeVisitor extends ANodeVisitor {
|
|
|
1248
1315
|
this.registerVisitor(ForOfStatement, this.visitForOfStatement);
|
|
1249
1316
|
this.registerVisitor(BreakAST, this.visitBreakAST);
|
|
1250
1317
|
this.registerVisitor(ContinueAST, this.visitContinueAST);
|
|
1318
|
+
this.registerVisitor(ReturnAST, this.visitReturnAST);
|
|
1251
1319
|
}
|
|
1252
1320
|
visit(node) {
|
|
1253
1321
|
try {
|
|
@@ -1332,6 +1400,9 @@ export class MEvento extends NodeVisitor {
|
|
|
1332
1400
|
let last;
|
|
1333
1401
|
for (const n of list) {
|
|
1334
1402
|
last = this.visit(n);
|
|
1403
|
+
if (last instanceof ReturnBranch) {
|
|
1404
|
+
return last.value;
|
|
1405
|
+
}
|
|
1335
1406
|
}
|
|
1336
1407
|
return last;
|
|
1337
1408
|
}
|
|
@@ -1344,6 +1415,9 @@ export class MEvento extends NodeVisitor {
|
|
|
1344
1415
|
if (last instanceof LoopControl) {
|
|
1345
1416
|
break;
|
|
1346
1417
|
}
|
|
1418
|
+
if (last instanceof ReturnBranch) {
|
|
1419
|
+
break;
|
|
1420
|
+
}
|
|
1347
1421
|
}
|
|
1348
1422
|
this.popScope();
|
|
1349
1423
|
return last;
|
|
@@ -1487,6 +1561,12 @@ export class MEvento extends NodeVisitor {
|
|
|
1487
1561
|
visitLogicalExpressionAST(node) {
|
|
1488
1562
|
const leftNode = node.left;
|
|
1489
1563
|
let test = this.visit(leftNode);
|
|
1564
|
+
if (node.operator.type === TokenType.nullity) {
|
|
1565
|
+
if (test != null) {
|
|
1566
|
+
return test;
|
|
1567
|
+
}
|
|
1568
|
+
return this.visit(node.right);
|
|
1569
|
+
}
|
|
1490
1570
|
const testBoolValue = _boolValue(test);
|
|
1491
1571
|
if (node.operator.type === TokenType.and) {
|
|
1492
1572
|
if (!testBoolValue) {
|
|
@@ -1496,12 +1576,11 @@ export class MEvento extends NodeVisitor {
|
|
|
1496
1576
|
}
|
|
1497
1577
|
if (node.operator.type === TokenType.or) {
|
|
1498
1578
|
if (testBoolValue) {
|
|
1499
|
-
return
|
|
1579
|
+
return true;
|
|
1500
1580
|
}
|
|
1501
|
-
|
|
1502
|
-
return test;
|
|
1581
|
+
return _boolValue(this.visit(node.right));
|
|
1503
1582
|
}
|
|
1504
|
-
return
|
|
1583
|
+
return null;
|
|
1505
1584
|
}
|
|
1506
1585
|
visitIndexAccessorAST(node) {
|
|
1507
1586
|
const ownerNode = node.owner;
|
|
@@ -1551,6 +1630,10 @@ export class MEvento extends NodeVisitor {
|
|
|
1551
1630
|
if (ret instanceof ContinueBranch) {
|
|
1552
1631
|
continue;
|
|
1553
1632
|
}
|
|
1633
|
+
if (ret instanceof ReturnBranch) {
|
|
1634
|
+
this.popScope();
|
|
1635
|
+
return ret;
|
|
1636
|
+
}
|
|
1554
1637
|
retainer?.push(ret);
|
|
1555
1638
|
}
|
|
1556
1639
|
return retainer ?? null;
|
|
@@ -1594,6 +1677,10 @@ export class MEvento extends NodeVisitor {
|
|
|
1594
1677
|
update();
|
|
1595
1678
|
continue;
|
|
1596
1679
|
}
|
|
1680
|
+
if (ret instanceof ReturnBranch) {
|
|
1681
|
+
this.popScope();
|
|
1682
|
+
return ret;
|
|
1683
|
+
}
|
|
1597
1684
|
retainer?.push(ret);
|
|
1598
1685
|
// update
|
|
1599
1686
|
update();
|
|
@@ -1617,6 +1704,10 @@ export class MEvento extends NodeVisitor {
|
|
|
1617
1704
|
if (ret instanceof ContinueBranch) {
|
|
1618
1705
|
continue;
|
|
1619
1706
|
}
|
|
1707
|
+
if (ret instanceof ReturnBranch) {
|
|
1708
|
+
this.popScope();
|
|
1709
|
+
return ret;
|
|
1710
|
+
}
|
|
1620
1711
|
retainer?.push(ret);
|
|
1621
1712
|
}
|
|
1622
1713
|
this.popScope();
|
|
@@ -1625,6 +1716,9 @@ export class MEvento extends NodeVisitor {
|
|
|
1625
1716
|
visitContinueAST(node) {
|
|
1626
1717
|
return new ContinueBranch();
|
|
1627
1718
|
}
|
|
1719
|
+
visitReturnAST(node) {
|
|
1720
|
+
return new ReturnBranch(node.value != null ? this.visit(node.value) : null);
|
|
1721
|
+
}
|
|
1628
1722
|
_declareForIdentifier(node, value) {
|
|
1629
1723
|
if (node instanceof TupleExpression) {
|
|
1630
1724
|
if (!Array.isArray(value)) {
|
|
@@ -1711,6 +1805,9 @@ export class MEventoAsync extends MEvento {
|
|
|
1711
1805
|
let last;
|
|
1712
1806
|
for (const n of list) {
|
|
1713
1807
|
last = await this.visit(n);
|
|
1808
|
+
if (last instanceof ReturnBranch) {
|
|
1809
|
+
return last.value;
|
|
1810
|
+
}
|
|
1714
1811
|
}
|
|
1715
1812
|
return last;
|
|
1716
1813
|
}
|
|
@@ -1723,6 +1820,9 @@ export class MEventoAsync extends MEvento {
|
|
|
1723
1820
|
if (last instanceof LoopControl) {
|
|
1724
1821
|
break;
|
|
1725
1822
|
}
|
|
1823
|
+
if (last instanceof ReturnBranch) {
|
|
1824
|
+
break;
|
|
1825
|
+
}
|
|
1726
1826
|
}
|
|
1727
1827
|
this.popScope();
|
|
1728
1828
|
return last;
|
|
@@ -1866,6 +1966,12 @@ export class MEventoAsync extends MEvento {
|
|
|
1866
1966
|
async visitLogicalExpressionAST(node) {
|
|
1867
1967
|
const leftNode = node.left;
|
|
1868
1968
|
let test = await this.visit(leftNode);
|
|
1969
|
+
if (node.operator.type === TokenType.nullity) {
|
|
1970
|
+
if (test != null) {
|
|
1971
|
+
return test;
|
|
1972
|
+
}
|
|
1973
|
+
return await this.visit(node.right);
|
|
1974
|
+
}
|
|
1869
1975
|
const testBoolValue = _boolValue(test);
|
|
1870
1976
|
if (node.operator.type === TokenType.and) {
|
|
1871
1977
|
if (!testBoolValue) {
|
|
@@ -1875,10 +1981,9 @@ export class MEventoAsync extends MEvento {
|
|
|
1875
1981
|
}
|
|
1876
1982
|
if (node.operator.type === TokenType.or) {
|
|
1877
1983
|
if (testBoolValue) {
|
|
1878
|
-
return
|
|
1984
|
+
return true;
|
|
1879
1985
|
}
|
|
1880
|
-
|
|
1881
|
-
return test;
|
|
1986
|
+
return _boolValue(await this.visit(node.right));
|
|
1882
1987
|
}
|
|
1883
1988
|
return false;
|
|
1884
1989
|
}
|
|
@@ -1927,6 +2032,10 @@ export class MEventoAsync extends MEvento {
|
|
|
1927
2032
|
if (ret instanceof ContinueBranch) {
|
|
1928
2033
|
continue;
|
|
1929
2034
|
}
|
|
2035
|
+
if (ret instanceof ReturnBranch) {
|
|
2036
|
+
this.popScope();
|
|
2037
|
+
return ret;
|
|
2038
|
+
}
|
|
1930
2039
|
retainer?.push(ret);
|
|
1931
2040
|
}
|
|
1932
2041
|
return retainer;
|
|
@@ -1970,6 +2079,10 @@ export class MEventoAsync extends MEvento {
|
|
|
1970
2079
|
await update();
|
|
1971
2080
|
continue;
|
|
1972
2081
|
}
|
|
2082
|
+
if (ret instanceof ReturnBranch) {
|
|
2083
|
+
this.popScope();
|
|
2084
|
+
return ret;
|
|
2085
|
+
}
|
|
1973
2086
|
retainer?.push(ret);
|
|
1974
2087
|
// update
|
|
1975
2088
|
await update();
|
|
@@ -1993,11 +2106,18 @@ export class MEventoAsync extends MEvento {
|
|
|
1993
2106
|
if (ret instanceof ContinueBranch) {
|
|
1994
2107
|
continue;
|
|
1995
2108
|
}
|
|
2109
|
+
if (ret instanceof ReturnBranch) {
|
|
2110
|
+
this.popScope();
|
|
2111
|
+
return ret;
|
|
2112
|
+
}
|
|
1996
2113
|
retainer?.push(ret);
|
|
1997
2114
|
}
|
|
1998
2115
|
this.popScope();
|
|
1999
2116
|
return retainer;
|
|
2000
2117
|
}
|
|
2118
|
+
async visitReturnAST(node) {
|
|
2119
|
+
return new ReturnBranch(node.value != null ? await this.visit(node.value) : null);
|
|
2120
|
+
}
|
|
2001
2121
|
async resolveArgumentsAsync(args) {
|
|
2002
2122
|
return await Promise.all(args.map(async (it) => {
|
|
2003
2123
|
return await this.visit(it);
|
|
@@ -2028,4 +2148,4 @@ export class MEventoAsync extends MEvento {
|
|
|
2028
2148
|
return ret;
|
|
2029
2149
|
}
|
|
2030
2150
|
}
|
|
2031
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV2ZW50by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldmVudG8vc3JjL2xpYi9tZXZlbnRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFNBQVMsS0FBSyxDQUFDLEtBQVksRUFBRSxRQUFvQjtJQUM3QyxNQUFNLElBQUksR0FDTixpQkFBaUIsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxRQUFRLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ3RJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQixDQUFDO0FBQ0QsU0FBUyxLQUFLLENBQUMsS0FBVTtJQUNyQixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNyQyxDQUFDO0FBQ0QsU0FBUyxTQUFTLENBQUMsS0FBVTtJQUN6QixPQUFPLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQztBQUN0QyxDQUFDO0FBQ0QsU0FBUyxRQUFRLENBQUMsS0FBVTtJQUN4QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNyQyxDQUFDO0FBQ0QsU0FBUyxVQUFVLENBQUMsSUFBUztJQUN6QixPQUFPLElBQUksS0FBSyxJQUFJO1FBQ2hCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQztZQUN4QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNuQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFBQSxDQUFDO0FBRUYsU0FBUyxRQUFRLENBQUMsR0FBVztJQUN6QixJQUFJLElBQUksR0FB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QUFZLEVBQUUsS0FBVTtRQUNoQyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQztJQUN0RCxDQUFDO0NBQ0o7QUFHRCxNQUFNLEtBQUs7O0FBQ0EsV0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsV0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsZUFBUyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsWUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsZUFBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsV0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsWUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsVUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsV0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsVUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsV0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsYUFBTyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsWUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsWUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsY0FBUSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsY0FBUSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsU0FBRyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsV0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsVUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsU0FBRyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsV0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFHckMsTUFBTSxPQUFPLGVBQWU7SUFHeEIsWUFBWSxJQUFZLEVBQUUsUUFBbUM7UUFEN0QsYUFBUSxHQUE4QixFQUFFLENBQUM7UUFFckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSDs7R0FFRztBQUNILE1BQU0sS0FBSztJQTZFUCxZQUFZLE1BQWM7UUFQMUIsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsaUJBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztRQUtkLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFQRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQU1PLGdCQUFnQjtRQUNwQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7WUFDL0IsbUJBQW1CO1lBQ25CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2hCO1lBQ0QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztZQUNwRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsS0FBSyxFQUFFO2dCQUNoQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEI7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7WUFDeEMsZ0JBQWdCO1lBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xFO0lBQ0wsQ0FBQztJQUVPLFFBQVE7UUFDWixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxLQUFLO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDYjtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTyxLQUFLLENBQUMsSUFBWTtRQUN0QixJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7WUFDWCxPQUFPLElBQUksS0FBSyxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFO1lBQ1gsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFO1lBQ1gsT0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBWTtRQUMzQixJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7WUFDWCxPQUFPLElBQUksS0FBSyxFQUFFLENBQUM7U0FDdEI7UUFDRCxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFO1lBQ1gsT0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxHQUFHO1FBQ1AsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNsQyxHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ25CO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDL0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHO1lBQ3ZDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDVixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTyxVQUFVLENBQUMsQ0FBUztRQUN4QixPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ1gsQ0FBQyxLQUFLLEVBQUU7WUFDUixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLGFBQWEsQ0FBQyxDQUFTO1FBQzNCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sUUFBUSxDQUFDLENBQVM7UUFDdEIsc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNPLGVBQWU7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDbkQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQztJQUVPLE9BQU87UUFDWCxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN4QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEQsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDOUQsOENBQThDO1lBQzlDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDdEIsS0FBSyxHQUFHO29CQUNKLElBQUksR0FBRyxDQUFDLENBQUM7b0JBQ1QsTUFBTTtnQkFDVixLQUFLLEdBQUc7b0JBQ0osSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDVCxNQUFNO2dCQUNWLEtBQUssR0FBRztvQkFDSixJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNWLE1BQU07Z0JBQ1Y7b0JBQ0ksSUFBSSxHQUFHLEVBQUUsQ0FBQzthQUNqQjtTQUNKO2FBQU07WUFDSCxHQUFHLElBQUksS0FBSyxDQUFDO1lBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDbkMsQ0FBQyxJQUFJLEtBQUssRUFBRTtnQkFDUixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO3FCQUN2RCxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVELEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbkI7UUFDRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUN4RixJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7Z0JBQ2IsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ25EO1lBQ0Qsa0JBQWtCO1lBQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDckMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbkI7WUFDRCxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN6RTtRQUNELE9BQU8sSUFBSSxLQUFLLENBQ1osU0FBUyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU8sY0FBYyxDQUFDLFNBQWlCO1FBQ3BDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtZQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUN2QyxhQUFhO2dCQUNiLElBQUk7b0JBQ0EsU0FBUztvQkFDVCxJQUFJO29CQUNKLEdBQUc7b0JBQ0gsR0FBRztvQkFDSCxHQUFHO29CQUNILEdBQUc7b0JBQ0gsR0FBRztvQkFDSCxHQUFHO29CQUNILEdBQUc7b0JBQ0gsR0FBRztvQkFDSCxHQUFHO29CQUNILEdBQUc7b0JBQ0gsR0FBRztvQkFDSCxHQUFHO2lCQUNOLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNkLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO29CQUM3QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLFNBQVM7aUJBQ1o7YUFDSjtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksUUFBUSxLQUFLLEtBQUssQ0FBQyxTQUFTLEVBQUU7Z0JBQ2pFLE1BQU07Z0JBQ04sTUFBTTthQUNUO1lBRUQsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzlDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQzdCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuQjtRQUNELE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsMkJBQTJCO0lBQzNCLG9CQUFvQjtJQUNwQixTQUFTO1FBQ0wsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFFN0IsT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzdCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDZCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3ZEO1lBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN2QixTQUFTO2FBQ1o7WUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNsQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3BDLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3JCO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUU7b0JBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3hEO2dCQUNELE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUU7b0JBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzNEO2dCQUNELE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUU7b0JBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzFEO2dCQUNELE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxTQUFTLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDdkQ7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDcEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6RDtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3pEO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDeEQ7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDcEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN6RDtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3pEO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDM0Q7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUMzRDtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDeEQ7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRTtnQkFDbkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN0RDtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRTtnQkFDbkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN4RDtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFO29CQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN6RDtnQkFDRCxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN0RDtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUMvRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDdkQ7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDakUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3REO1lBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUN6RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLENBQUM7YUFDWjtZQUNELE9BQU8sSUFBSSxLQUFLLENBQ1osU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDaEY7UUFDRCxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RCxDQUFDOztBQXhhTSxzQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUU7SUFDaEQsSUFBSSxFQUFFLElBQUk7SUFDVixNQUFNLEVBQUUsTUFBTTtJQUNkLE1BQU0sRUFBRSxNQUFNO0lBQ2QsT0FBTyxFQUFFLE9BQU87SUFDaEIsTUFBTSxFQUFFLE1BQU07SUFDZCxPQUFPLEVBQUUsT0FBTztJQUNoQixLQUFLLEVBQUUsS0FBSztJQUNaLE1BQU0sRUFBRSxNQUFNO0lBQ2QsSUFBSSxFQUFFLElBQUk7SUFDVixNQUFNLEVBQUUsTUFBTTtJQUNkLE1BQU0sRUFBRSxNQUFNO0lBQ2QsSUFBSSxFQUFFLElBQUk7SUFDVixPQUFPLEVBQUUsT0FBTztJQUNoQixVQUFVLEVBQUUsVUFBVTtDQUN6QixDQUFDLENBQUM7QUFDSSxlQUFTLEdBQXNCO0lBQ2xDLEtBQUssQ0FBQyxnQkFBZ0I7SUFDdEIsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFO1FBQ3RCLElBQUksRUFBRSxJQUFJO1FBQ1YsT0FBTyxFQUFFLE1BQU07UUFDZixNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRSxPQUFPO1FBQ2YsS0FBSyxFQUFFLE1BQU07UUFDYixRQUFRLEVBQUUsT0FBTztRQUNqQixNQUFNLEVBQUUsS0FBSztRQUNiLE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsTUFBTTtRQUNkLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLE9BQU87UUFDakIsV0FBVyxFQUFFLFVBQVU7S0FDMUIsQ0FBQztJQUNGLElBQUksZUFBZSxDQUFDLElBQUksRUFBRTtRQUN0QixLQUFLLEVBQUUsSUFBSTtRQUNYLE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsT0FBTztRQUNoQixRQUFRLEVBQUUsTUFBTTtRQUNoQixLQUFLLEVBQUUsT0FBTztRQUNkLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsS0FBSyxFQUFFLElBQUk7UUFDWCxLQUFLLEVBQUUsTUFBTTtRQUNiLE1BQU0sRUFBRSxNQUFNO1FBQ2QsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRSxVQUFVO0tBQ3JCLENBQUM7Q0FDTCxDQUFDO0FBQ0ssY0FBUSxHQUE2QjtJQUN4QyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztJQUNwQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN4QyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUMzQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN4QyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQztJQUM1QyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQztJQUNsRCxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQztJQUNwQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUMxQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMs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T0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsTUFBTSxDQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBYyxFQUFFLEtBQUssR0FBRyxLQUFLO1FBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUMsT0FBTyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sQ0FBVSxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBR1EsS0FBSztRQUNWLElBQUksR0FBRyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0IsR0FBRyxDQUFDLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN4RCxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5mdW5jdGlvbiBlcnJvcih0b2tlbjogVG9rZW4sIGV4cGVjdGVkPzogVG9rZW5UeXBlKSB7XG4gICAgY29uc3QgdGV4dCA9XG4gICAgICAgIGBJbnZhbGlkIHRva2VuICR7dG9rZW4udHlwZX1bJHt0b2tlbi52YWx1ZX1dIGF0ICR7dG9rZW4ubGluZX0sICR7dG9rZW4uY29sfSAke2V4cGVjdGVkID8gYDogZXhwZWN0aW5nICR7ZXhwZWN0ZWR9IHRva2VuYCA6ICcnfVxcbmA7XG4gICAgdGhyb3cgKHRleHQpO1xufVxuZnVuY3Rpb24gaXNOdW0odmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xufVxuZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbic7XG59XG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5mdW5jdGlvbiBfYm9vbFZhbHVlKHRlc3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0ZXN0ICE9PSBudWxsICYmXG4gICAgICAgICgoaXNOdW0odGVzdCkgJiYgdGVzdCAhPT0gMCkgfHxcbiAgICAgICAgICAgIChpc1N0cmluZyh0ZXN0KSAmJiB0ZXN0Lmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAoaXNCb29sZWFuKHRlc3QpICYmIHRlc3QpKTtcbn07XG5cbmZ1bmN0aW9uIGhhc2hDb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgbGV0IGhhc2ggPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgY2hyO1xuICAgIGlmIChzdHIubGVuZ3RoID09PSAwKSByZXR1cm4gaGFzaDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNociA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBjaHI7XG4gICAgICAgIGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG4gICAgfVxuICAgIHJldHVybiBoYXNoO1xufTtcbmV4cG9ydCBjbGFzcyBUb2tlblR5cGUge1xuICAgIHN0YXRpYyBpZCA9IDA7XG4gICAgc3RhdGljIGNvbW1hID0gMTtcbiAgICBzdGF0aWMgc2VtaSA9IDI7XG4gICAgc3RhdGljIG51bWJlckNvbnN0ID0gMztcbiAgICBzdGF0aWMgc3RyaW5nQ29uc3QgPSA0O1xuICAgIHN0YXRpYyBlcXVhbCA9IDU7XG4gICAgc3RhdGljIGxwYXJlbiA9IDZcbiAgICBzdGF0aWMgcnBhcmVuID0gNztcbiAgICBzdGF0aWMgZW9sID0gODtcbiAgICBzdGF0aWMgZW9mID0gOTtcbiAgICBzdGF0aWMgbGJyYWNlID0gMTA7XG4gICAgc3RhdGljIHJicmFjZSA9IDExO1xuICAgIHN0YXRpYyBsYnJhY2tldCA9IDEyO1xuICAgIHN0YXRpYyByYnJhY2tldCA9IDEzO1xuICAgIHN0YXRpYyBncmVhdCA9IDE0O1xuICAgIHN0YXRpYyBncmVhdEVxID0gMTU7XG4gICAgc3RhdGljIGxlc3MgPSAxNjtcbiAgICBzdGF0aWMgbGVzc0VxID0gMTc7XG4gICAgc3RhdGljIGVxZXEgPSAxODtcbiAgICBzdGF0aWMgSUYgPSAxOTtcbiAgICBzdGF0aWMgRUxTRSA9IDIwO1xuICAgIHN0YXRpYyBUUlVFID0gMjE7XG4gICAgc3RhdGljIEZBTFNFID0gMjI7XG4gICAgc3RhdGljIE5VTEwgPSAyMztcbiAgICBzdGF0aWMgbm90ID0gMjQ7XG4gICAgc3RhdGljIG5vdEVxID0gMjU7XG4gICAgc3RhdGljIGFuZCA9IDI2O1xuICAgIHN0YXRpYyBvciA9IDI3O1xuICAgIHN0YXRpYyBwbHVzID0gMjg7XG4gICAgc3RhdGljIG1pbnVzID0gMjk7XG4gICAgc3RhdGljIGRpdiA9IDMwO1xuICAgIHN0YXRpYyBtdWx0ID0gMzE7XG4gICAgc3RhdGljIG1vZCA9IDMyO1xuICAgIHN0YXRpYyBpbnZhbGlkID0gMzM7XG4gICAgc3RhdGljIGNvbG9uID0gMzQ7XG4gICAgc3RhdGljIFdISUxFX1RJTEwgPSAzNTtcbiAgICBzdGF0aWMgRk9SX0xPT1AgPSAzNjtcbiAgICBzdGF0aWMgdXAgPSAzNztcbiAgICBzdGF0aWMgZG93biA9IDM4O1xuICAgIHN0YXRpYyB3aXRoID0gMzk7XG4gICAgc3RhdGljIGluID0gNDA7XG4gICAgc3RhdGljIFRJTEwgPSA0MTtcbiAgICBzdGF0aWMgQlJFQUsgPSA0MjtcbiAgICBzdGF0aWMgQ09OVElOVUUgPSA0Mztcbn1cblxuZXhwb3J0IGNsYXNzIFRva2VuIHtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgdmFsdWU6IGFueTtcbiAgICBsaW5lPzogbnVtYmVyO1xuICAgIGNvbD86IG51bWJlcjtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBudW1iZXIsIHZhbHVlOiBhbnksIGxpbmU6IG51bWJlciA9IDEsIGNvbDogbnVtYmVyID0gMSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMubGluZSA9IGxpbmU7XG4gICAgICAgIHRoaXMuY29sID0gY29sO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbSh0eXBlOiBudW1iZXIsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUb2tlbih0eXBlLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGBbJHt0aGlzLnR5cGUudG9TdHJpbmcoKX0sICR7dGhpcy52YWx1ZX1dYDtcbiAgICB9XG59XG5cblxuY2xhc3MgQ2hhcnMge1xuICAgIHN0YXRpYyBlcXVhbCA9ICc9Jy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBjb21tYSA9ICcsJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzZW1pQ29sb24gPSAnOycuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbHBhcmVuID0gJygnLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHJwYXJlbiA9ICcpJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBiYWNrc2xhc2ggPSAnXFxcXCcuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgcXVvdGUgPSAnXCInLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHNxdW90ZSA9IFwiJ1wiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHBsdXMgPSBcIitcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBtaW51cyA9IFwiLVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHN0YXIgPSBcIipcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzbGFzaCA9IFwiL1wiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHBlcmNlbnQgPSBcIiVcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBsYnJhY2UgPSBcIntcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyByYnJhY2UgPSBcIn1cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBsYnJhY2tldCA9IFwiW1wiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHJicmFja2V0ID0gXCJdXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbm90ID0gXCIhXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgZ3JlYXQgPSBcIj5cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBsZXNzID0gXCI8XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgYW5kID0gXCImXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgcGlwZSA9IFwifFwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGNvbG9uID0gXCI6XCIuY2hhckNvZGVBdCgwKTtcbn1cblxuZXhwb3J0IGNsYXNzIExleGVyRGljdGlvbmFyeSB7XG4gICAgbGFuZzogc3RyaW5nO1xuICAgIGtleXdvcmRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgY29uc3RydWN0b3IobGFuZzogc3RyaW5nLCBrZXl3b3JkczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgICAgICB0aGlzLmtleXdvcmRzID0geyAuLi5rZXl3b3JkcyB9O1xuICAgICAgICB0aGlzLmxhbmcgPSBsYW5nO1xuICAgIH1cbn1cblxuLyoqXG4gKiBMZXhpbmcgPT4gUGFyc2luZyA9PT0+IEFTVCA9PT0+IFdhbGtpbmdcbiAqL1xuLyoqXG4gKiBMZXhlclxuICovXG5jbGFzcyBMZXhlciB7XG4gICAgc3RhdGljIF9kZWZhdWx0TGFuZ3VhZ2UgPSBuZXcgTGV4ZXJEaWN0aW9uYXJ5KFwiZW5cIiwge1xuICAgICAgICBcImlmXCI6IFwiaWZcIixcbiAgICAgICAgXCJlbHNlXCI6IFwiZWxzZVwiLFxuICAgICAgICBcInRydWVcIjogXCJ0cnVlXCIsXG4gICAgICAgIFwiZmFsc2VcIjogXCJmYWxzZVwiLFxuICAgICAgICBcIm51bGxcIjogXCJudWxsXCIsXG4gICAgICAgIFwid2hpbGVcIjogXCJ3aGlsZVwiLFxuICAgICAgICBcImZvclwiOiBcImZvclwiLFxuICAgICAgICBcIndpdGhcIjogXCJ3aXRoXCIsXG4gICAgICAgIFwidXBcIjogXCJ1cFwiLFxuICAgICAgICBcImRvd25cIjogXCJkb3duXCIsXG4gICAgICAgIFwidGlsbFwiOiBcInRpbGxcIixcbiAgICAgICAgXCJpblwiOiBcImluXCIsXG4gICAgICAgIFwiYnJlYWtcIjogXCJicmVha1wiLFxuICAgICAgICBcImNvbnRpbnVlXCI6IFwiY29udGludWVcIixcbiAgICB9KTtcbiAgICBzdGF0aWMgbGFuZ3VhZ2VzOiBMZXhlckRpY3Rpb25hcnlbXSA9IFtcbiAgICAgICAgTGV4ZXIuX2RlZmF1bHRMYW5ndWFnZSxcbiAgICAgICAgbmV3IExleGVyRGljdGlvbmFyeShcImZyXCIsIHtcbiAgICAgICAgICAgIFwic2lcIjogXCJpZlwiLFxuICAgICAgICAgICAgXCJzaW5vblwiOiBcImVsc2VcIixcbiAgICAgICAgICAgIFwidnJhaVwiOiBcInRydWVcIixcbiAgICAgICAgICAgIFwiZmF1eFwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICBcIm51bFwiOiBcIm51bGxcIixcbiAgICAgICAgICAgIFwidGFucXVlXCI6IFwid2hpbGVcIixcbiAgICAgICAgICAgIFwicG91clwiOiBcImZvclwiLFxuICAgICAgICAgICAgXCJhdmVjXCI6IFwid2l0aFwiLFxuICAgICAgICAgICAgXCJtb250XCI6IFwidXBcIixcbiAgICAgICAgICAgIFwiZGVzY1wiOiBcImRvd25cIixcbiAgICAgICAgICAgIFwianVzcXVhXCI6IFwidGlsbFwiLFxuICAgICAgICAgICAgXCJkYW5zXCI6IFwiaW5cIixcbiAgICAgICAgICAgIFwiY291cGVyXCI6IFwiYnJlYWtcIixcbiAgICAgICAgICAgIFwiY29udGludWVyXCI6IFwiY29udGludWVcIixcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBMZXhlckRpY3Rpb25hcnkoXCJibVwiLCB7XG4gICAgICAgICAgICBcIm5paVwiOiBcImlmXCIsXG4gICAgICAgICAgICBcIm5vdGVcIjogXCJlbHNlXCIsXG4gICAgICAgICAgICBcInRpZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICBcImdhbG9uXCI6IFwiZmFsc2VcIixcbiAgICAgICAgICAgIFwiZ2Fuc2FuXCI6IFwibnVsbFwiLFxuICAgICAgICAgICAgXCJmb29cIjogXCJ3aGlsZVwiLFxuICAgICAgICAgICAgXCJzZWdpbmthXCI6IFwiZm9yXCIsXG4gICAgICAgICAgICBcIm5paW5cIjogXCJ3aXRoXCIsXG4gICAgICAgICAgICBcImtheVwiOiBcInVwXCIsXG4gICAgICAgICAgICBcImthalwiOiBcImRvd25cIixcbiAgICAgICAgICAgIFwia2F0YVwiOiBcInRpbGxcIixcbiAgICAgICAgICAgIFwia29ub1wiOiBcImluXCIsXG4gICAgICAgICAgICBcInRpa2VcIjogXCJicmVha1wiLFxuICAgICAgICAgICAgXCJpcGFuXCI6IFwiY29udGludWVcIixcbiAgICAgICAgfSksXG4gICAgXTtcbiAgICBzdGF0aWMgUkVTRVJWRUQ6IHsgW2tleTogc3RyaW5nXTogVG9rZW4gfSA9IHtcbiAgICAgICAgXCJpZlwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5JRiwgXCJpZlwiKSxcbiAgICAgICAgXCJlbHNlXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkVMU0UsIFwiZWxzZVwiKSxcbiAgICAgICAgXCJ0cnVlXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLlRSVUUsIHRydWUpLFxuICAgICAgICBcImZhbHNlXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkZBTFNFLCBmYWxzZSksXG4gICAgICAgIFwibnVsbFwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5OVUxMLCBudWxsKSxcbiAgICAgICAgXCJmb3JcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuRk9SX0xPT1AsIFwiZm9yXCIpLFxuICAgICAgICBcIndoaWxlXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLldISUxFX1RJTEwsIFwid2hpbGVcIiksXG4gICAgICAgIFwid2l0aFwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS53aXRoLCBcIndpdGhcIiksXG4gICAgICAgIFwidXBcIjogVG9rZW4uZnJvbShUb2tlblR5cGUudXAsIFwidXBcIiksXG4gICAgICAgIFwiZG93blwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5kb3duLCBcImRvd25cIiksXG4gICAgICAgIFwidGlsbFwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5USUxMLCBcInRpbGxcIiksXG4gICAgICAgIFwiaW5cIjogVG9rZW4uZnJvbShUb2tlblR5cGUuaW4sIFwiaW5cIiksXG4gICAgICAgIFwiYnJlYWtcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuQlJFQUssIFwiYnJlYWtcIiksXG4gICAgICAgIFwiY29udGludWVcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuQ09OVElOVUUsIFwiY29udGludWVcIiksXG4gICAgfTtcbiAgICBfbGFuZ3VhZ2U/OiBMZXhlckRpY3Rpb25hcnk7XG4gICAgX3NvdXJjZSE6IHN0cmluZztcbiAgICBfcG9zaXRpb24gPSAwO1xuICAgIF9saW5lID0gMTtcbiAgICBfY29sID0gMTtcbiAgICBfY3VycmVudENoYXIgPSAtMTtcbiAgICBnZXQgc291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcihzb3VyY2U6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRDaGFyID0gdGhpcy5fc291cmNlW3RoaXMuX3Bvc2l0aW9uXS5jaGFyQ29kZUF0KDApO1xuICAgICAgICB0aGlzLl9yZXNvbHZlTGFuZ3VhZ2UoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVzb2x2ZUxhbmd1YWdlKCkge1xuICAgICAgICBsZXQgdG9rZW4gPSB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLmxlc3MpIHtcbiAgICAgICAgICAgIC8vIGxhbmd1YWdlIHNldHRpbmdcbiAgICAgICAgICAgIGNvbnN0IGlkVG9rZW4gPSB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICAgICAgaWYgKGlkVG9rZW4udHlwZSAhPT0gVG9rZW5UeXBlLmlkKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IodG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGFuZyA9IGlkVG9rZW4udmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlID0gTGV4ZXIubGFuZ3VhZ2VzLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQubGFuZyA9PT0gbGFuZykgPz8gTGV4ZXIuX2RlZmF1bHRMYW5ndWFnZTtcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlblR5cGUuZ3JlYXQpIHtcbiAgICAgICAgICAgICAgICBlcnJvcih0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9sYW5ndWFnZSA9IExleGVyLl9kZWZhdWx0TGFuZ3VhZ2U7XG4gICAgICAgICAgICAvLyByZXNldCByZWFkaW5nXG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IHRoaXMuX3NvdXJjZVt0aGlzLl9wb3NpdGlvbl0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2FkdmFuY2UoKSB7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uKys7XG4gICAgICAgIGlmICh0aGlzLl9wb3NpdGlvbiA+PSB0aGlzLl9zb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IC0xO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N1cnJlbnRDaGFyID0gdGhpcy5fc291cmNlW3RoaXMuX3Bvc2l0aW9uXS5jaGFyQ29kZUF0KDApO1xuICAgICAgICB0aGlzLl9jb2wrKztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9waWNrKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl9wb3NpdGlvbiA+PSB0aGlzLl9zb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZVt0aGlzLl9wb3NpdGlvbl0uY2hhckNvZGVBdCgwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0lkKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoY29kZSA8IDQ4KSB7XG4gICAgICAgICAgICByZXR1cm4gY29kZSA9PT0gMzY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCA1OCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCA2NSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlID09PSA5NTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDEyMykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzSWRTdGFydChjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGNvZGUgPCA2NSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvZGUgPT09IDM2O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlID09PSA5NTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDEyMykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lkKCk6IFRva2VuIHtcbiAgICAgICAgbGV0IHJldCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGxhc3RDID0gdGhpcy5fY29sO1xuICAgICAgICBjb25zdCBsYXN0UCA9IHRoaXMuX3Bvc2l0aW9uO1xuICAgICAgICBjb25zdCBsaW5lID0gdGhpcy5fbGluZTtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2lzSWQodGhpcy5fY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZElkID0gdGhpcy5fbGFuZ3VhZ2VcbiAgICAgICAgICAgID8gKHRoaXMuX2xhbmd1YWdlLmtleXdvcmRzW3JldF0pID8/IHJldFxuICAgICAgICAgICAgOiByZXQ7XG4gICAgICAgIHJldHVybiBMZXhlci5SRVNFUlZFRFt0cmFuc2xhdGVkSWRdID8/IG5ldyBUb2tlbihUb2tlblR5cGUuaWQsIHJldCwgbGluZSwgbGFzdEMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzTGluZUVuZChjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGMgPT09IDEwIHx8XG4gICAgICAgICAgICBjID09PSAxMyB8fFxuICAgICAgICAgICAgWydcXG4nLCAnXFxyJywgJ1xcdTIwMjgnLCAnXFx1MjAyOSddLmluY2x1ZGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzV2hpdGVTcGFjZShjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFsnICcsICdcXHQnXS5pbmNsdWRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0RpZ2l0KGM6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICByZXR1cm4gYyA+IDAgJiYgKGMgXiAweDMwKSA8PSA5O1xuICAgIH1cbiAgICBwcml2YXRlIF9za2lwV2hpdGVTcGFjZSgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2lzV2hpdGVTcGFjZSh0aGlzLl9jdXJyZW50Q2hhcikgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX251bWJlcigpOiBUb2tlbiB7XG4gICAgICAgIGxldCByZXQgPSBcIlwiO1xuICAgICAgICBjb25zdCBsYXN0QyA9IHRoaXMuX2NvbDtcbiAgICAgICAgY29uc3QgbGFzdFAgPSB0aGlzLl9wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuX2xpbmU7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgY29uc3QgYmMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgbGV0IGJhc2UgPSAxMDtcbiAgICAgICAgaWYgKGZpcnN0ID09PSAnMCcgJiYgWydiJywgJ0InLCAneCcsICdYJywgJ28nLCAnTyddLmluY2x1ZGVzKGJjKSkge1xuICAgICAgICAgICAgLy8gbG9vayBhaGVhZCB0byBzZWUgdGhhdCB0aGUgbnVtYmVyIGlzIHRhZ2dlZFxuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgc3dpdGNoIChiYy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSAyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwib1wiOlxuICAgICAgICAgICAgICAgICAgICBiYXNlID0gODtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDE2O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXQgKz0gZmlyc3Q7XG4gICAgICAgICAgICBiYXNlID0gMTA7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMuX2lzRGlnaXQodGhpcy5fY3VycmVudENoYXIpIHx8XG4gICAgICAgICAgICAoYmFzZSA9PT0gMTYgJiZcbiAgICAgICAgICAgICAgICBbJ0EnLCAnYScsICdCJywgJ2InLCAnQycsICdjJywgJ0QnLCAnZCcsICdFJywgJ2UnLCAnRicsICdmJ11cbiAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpKSkpIHtcbiAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcikgPT09ICcuJyAmJiB0aGlzLl9pc0RpZ2l0KHRoaXMuX3BpY2soKSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChiYXNlICE9PSAxMCkge1xuICAgICAgICAgICAgICAgIGVycm9yKG5ldyBUb2tlbihUb2tlblR5cGUuaWQsIGJjLCBsaW5lLCBsYXN0UCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZmxvYXRpbmcgbnVtYmVyXG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5faXNEaWdpdCh0aGlzLl9jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubnVtYmVyQ29uc3QsIHBhcnNlRmxvYXQocmV0KSwgbGluZSwgbGFzdEMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oXG4gICAgICAgICAgICBUb2tlblR5cGUubnVtYmVyQ29uc3QsIHBhcnNlSW50KHJldCwgYmFzZSksIGxpbmUsIGxhc3RDKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9saXRlcmFsU3RyaW5nKHN0YXJ0Q2hhcjogbnVtYmVyKTogVG9rZW4ge1xuICAgICAgICBsZXQgcmV0ID0gXCJcIjtcbiAgICAgICAgbGV0IGxhc3RDaGFyID0gLTE7XG4gICAgICAgIGNvbnN0IGxhc3RQID0gdGhpcy5fcG9zaXRpb247XG4gICAgICAgIGNvbnN0IGxhc3RDID0gdGhpcy5fY29sO1xuICAgICAgICBjb25zdCBsYXN0TCA9IHRoaXMuX2xpbmU7XG4gICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50Q2hhciAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX3BpY2soKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmJhY2tzbGFzaCkge1xuICAgICAgICAgICAgICAgIC8vIHNjYXBlIGNoYXJcbiAgICAgICAgICAgICAgICBpZiAoW1xuICAgICAgICAgICAgICAgICAgICBzdGFydENoYXIsXG4gICAgICAgICAgICAgICAgICAgICdcXFxcJyxcbiAgICAgICAgICAgICAgICAgICAgJzAnLFxuICAgICAgICAgICAgICAgICAgICAnYScsXG4gICAgICAgICAgICAgICAgICAgICdiJyxcbiAgICAgICAgICAgICAgICAgICAgJ2UnLFxuICAgICAgICAgICAgICAgICAgICAnZicsXG4gICAgICAgICAgICAgICAgICAgICduJyxcbiAgICAgICAgICAgICAgICAgICAgJ3InLFxuICAgICAgICAgICAgICAgICAgICAndCcsXG4gICAgICAgICAgICAgICAgICAgICd1JyxcbiAgICAgICAgICAgICAgICAgICAgJ1UnLFxuICAgICAgICAgICAgICAgICAgICAndicsXG4gICAgICAgICAgICAgICAgICAgICd4J1xuICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdENoYXIgPSB0aGlzLl9jdXJyZW50Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IHN0YXJ0Q2hhciAmJiBsYXN0Q2hhciAhPT0gQ2hhcnMuYmFja3NsYXNoKSB7XG4gICAgICAgICAgICAgICAgLy8gZW5kXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgICAgIGxhc3RDaGFyID0gdGhpcy5fY3VycmVudENoYXI7XG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuc3RyaW5nQ29uc3QsIHJldCwgbGFzdEwsIGxhc3RDKTtcbiAgICB9XG5cbiAgICAvLyBmPVNVQk1JVF9GT1JNKHh4eCk7XG4gICAgLy8gciA9IENBTExfQVBJKEFQSV9JRCwgZik7XG4gICAgLy8gRElTUExBWShcIk1TRyAjclwiKVxuICAgIG5leHRUb2tlbigpOiBUb2tlbiB7XG4gICAgICAgIGNvbnN0IGxhc3RMID0gdGhpcy5fbGluZTtcbiAgICAgICAgY29uc3QgbGFzdEMgPSB0aGlzLl9jb2w7XG4gICAgICAgIGNvbnN0IGxhc3RQID0gdGhpcy5fcG9zaXRpb247XG5cbiAgICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRDaGFyICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzTGluZUVuZCh0aGlzLl9jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9saW5lKys7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sID0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZW9sLCBcIlxcblwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5faXNXaGl0ZVNwYWNlKHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NraXBXaGl0ZVNwYWNlKCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5faXNEaWdpdCh0aGlzLl9jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5faXNJZFN0YXJ0KHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5lcXVhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZXFlcSwgXCI9PVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5lcXVhbCwgXCI9XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmdyZWF0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5ncmVhdEVxLCBcIj49XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmdyZWF0LCBcIj5cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubGVzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubGVzc0VxLCBcIjw9XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmxlc3MsIFwiPFwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5zZW1pQ29sb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuc2VtaSwgXCI7XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmxwYXJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5scGFyZW4sIFwiKFwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5ycGFyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUucnBhcmVuLCBcIilcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuY29tbWEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuY29tbWEsIFwiLFwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5sYnJhY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubGJyYWNlLCBcIntcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucmJyYWNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnJicmFjZSwgXCJ9XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmxicmFja2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmxicmFja2V0LCBcIltcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucmJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUucmJyYWNrZXQsIFwiXVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5wbHVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnBsdXMsIFwiK1wiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5taW51cykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5taW51cywgXCItXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnNsYXNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmRpdiwgXCIvXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnN0YXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubXVsdCwgXCIqXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnBlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubW9kLCBcIiVcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuY29sb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuY29sb24sIFwiOlwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5ub3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5lcXVhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLm5vdEVxLCBcIiE9XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLm5vdCwgXCIhXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmFuZCAmJiB0aGlzLl9waWNrKCkgPT09IENoYXJzLmFuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuYW5kLCBcIiYmXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnBpcGUgJiYgdGhpcy5fcGljaygpID09PSBDaGFycy5waXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5vciwgJ3x8JywgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucXVvdGUgfHwgdGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnNxdW90ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2hhciA9IHRoaXMuX2N1cnJlbnRDaGFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5fbGl0ZXJhbFN0cmluZyhzdGFydENoYXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oXG4gICAgICAgICAgICAgICAgVG9rZW5UeXBlLmludmFsaWQsIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmVvZiwgXCJcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICB9XG59XG5cblxuLyoqXG4gKiBQYXJzZXJcbiAqL1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVNUIHtcbiAgICBsaW5lPzogbnVtYmVyO1xuICAgIGNvbD86IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcihsaW5lPzogbnVtYmVyLCBjb2w/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5saW5lID0gbGluZTtcbiAgICAgICAgdGhpcy5jb2wgPSBjb2w7XG4gICAgfVxuICAgIGR1bXAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSb290QVNUIGV4dGVuZHMgQVNUIHtcbiAgICBib2R5OiBBU1RbXTtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoYm9keTogQVNUW10sIG5hbWU6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoMSwgMSk7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGR1bXAoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGJ1aWxkZXIgPSBgTW9kdWxlICR7dGhpcy5uYW1lfSBTdGFydCB7YDtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiB0aGlzLmJvZHkpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIgKz0gYCR7aXQuZHVtcCgpfVxcbmA7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRlciArPSBcIn1cIjtcbiAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTdGF0ZW1lbnRBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGJvZHk6IEFTVFtdO1xuICAgIGNvbnN0cnVjdG9yKGJvZHk6IEFTVFtdLCB0b2tlbjogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIodG9rZW4ubGluZSwgdG9rZW4uY29sKTtcbiAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB7XFxuJHt0aGlzLmJvZHkubWFwKChlKSA9PiBlLnRvU3RyaW5nKCkpLmpvaW4oXCJcXG5cIil9fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWRlbnRpZmllckFTVCBleHRlbmRzIEFTVCB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBjb25zdHJ1Y3Rvcih0b2tlbjogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIodG9rZW4ubGluZSwgdG9rZW4uY29sKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRva2VuLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpdGVyYWxBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIHZhbHVlOiBhbnk7XG4gICAgcmF3OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IodG9rZW46IFRva2VuLCByYXc6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0b2tlbi5saW5lLCB0b2tlbi5jb2wpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgICAgIHRoaXMucmF3ID0gcmF3O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBpZGVudGlmaWVyOiBBU1Q7XG4gICAgaW5pdDogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGlkZW50aWZpZXI6IEFTVCwgaW5pdDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGlkZW50aWZpZXIubGluZSwgaWRlbnRpZmllci5jb2wpO1xuICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgICB0aGlzLmluaXQgPSBpbml0O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5pZGVudGlmaWVyfSA9ICR7dGhpcy5pbml0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvblN0YXRlbWVudEFTVCBleHRlbmRzIEFTVCB7XG4gICAgZXhwcmVzc2lvbjogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IEFTVCkge1xuICAgICAgICBzdXBlcihleHByZXNzaW9uLmxpbmUsIGV4cHJlc3Npb24uY29sKTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbGxFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBjYWxsZWU6IElkZW50aWZpZXJBU1Q7XG4gICAgYXJndW1lbnRzOiBBU1RbXTtcbiAgICBjb25zdHJ1Y3RvcihjYWxsZWU6IElkZW50aWZpZXJBU1QsIGFnczogQVNUW10pIHtcbiAgICAgICAgc3VwZXIoY2FsbGVlLmxpbmUsIGNhbGxlZS5jb2wpO1xuICAgICAgICB0aGlzLmNhbGxlZSA9IGNhbGxlZTtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMgPSBhZ3M7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNhbGxlZS50b1N0cmluZygpfSguLi4ke3RoaXMuYXJndW1lbnRzLmxlbmd0aH0pYDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5hcnlFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBsZWZ0OiBBU1Q7XG4gICAgb3BlcmF0aW9uOiBUb2tlbjtcbiAgICByaWdodDogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGxlZnQ6IEFTVCwgb3BlcmF0aW9uOiBUb2tlbiwgcmlnaHQ6IEFTVCkge1xuICAgICAgICBzdXBlcihsZWZ0LmxpbmUsIGxlZnQuY29sKTtcbiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGVmdH0gJHt0aGlzLm9wZXJhdGlvbn0gJHt0aGlzLnJpZ2h0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5hcnlFeHByZXNzaW9uQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBvcGVyYXRpb246IFRva2VuO1xuICAgIGFyZ3VtZW50OiBBU1Q7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0aW9uOiBUb2tlbiwgYXJndW1lbnQ6IEFTVCkge1xuICAgICAgICBzdXBlcihvcGVyYXRpb24ubGluZSwgb3BlcmF0aW9uLmNvbCk7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uLCB0aGlzLmFyZ3VtZW50ID0gYXJndW1lbnQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm9wZXJhdGlvbn0gJHt0aGlzLmFyZ3VtZW50fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSWZTdGF0ZW1lbnRBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIHRlc3Q6IEFTVDtcbiAgICBjb25zZXF1ZW50OiBBU1Q7XG4gICAgYWx0ZXJuYXRlPzogQVNUO1xuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IEFTVCwgY29uc2VxdWVudDogQVNULCBhbHRlcm5hdGU/OiBBU1QpIHtcbiAgICAgICAgc3VwZXIodGVzdC5saW5lLCB0ZXN0LmNvbCk7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7XG4gICAgICAgIHRoaXMuYWx0ZXJuYXRlID0gYWx0ZXJuYXRlO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgaWYgJHt0aGlzLnRlc3R9ICR7dGhpcy5jb25zZXF1ZW50fSAke3RoaXMuYWx0ZXJuYXRlID8gYGVsc2UgJHt0aGlzLmFsdGVybmF0ZX0gYCA6ICcnfWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9naWNhbEV4cHJlc3Npb25BU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGxlZnQ6IEFTVDtcbiAgICBvcGVyYXRvcjogVG9rZW47XG4gICAgcmlnaHQ6IEFTVDtcbiAgICBjb25zdHJ1Y3RvcihsZWZ0OiBBU1QsIG9wZXJhdG9yOiBUb2tlbiwgcmlnaHQ6IEFTVCkge1xuICAgICAgICBzdXBlcihsZWZ0LmxpbmUsIGxlZnQuY29sKTtcbiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmxlZnR9ICR7dGhpcy5vcGVyYXRvci52YWx1ZX0gJHt0aGlzLnJpZ2h0fWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5kZXhBY2Nlc3NvckFTVCBleHRlbmRzIEFTVCB7XG4gICAgb3duZXI6IEFTVDtcbiAgICBrZXk6IEFTVDtcbiAgICBjb21wdXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKG93bmVyOiBBU1QsIGtleTogQVNULCBjb21wdXRlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKG93bmVyLmxpbmUsIG93bmVyLmNvbCk7XG4gICAgICAgIHRoaXMub3duZXIgPSBvd25lcjtcbiAgICAgICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgICAgIHRoaXMuY29tcHV0ZWQgPSBjb21wdXRlZDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMub3duZXJ9WyR7dGhpcy5rZXl9XWA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgT2JqZWN0RXhwcmVzc2lvbiBleHRlbmRzIEFTVCB7XG4gICAgcHJvcGVydGllczogQVNUW107XG4gICAgY29uc3RydWN0b3IocHJvcHM6IEFTVFtdLCBzdGFydFRva2VuPzogVG9rZW4sIGVuZFRva2VuPzogVG9rZW4pIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcHM7XG4gICAgfVxuICAgIG92ZXJyaWRlICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJ7Li4ufVwiO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5RXhwcmVzc2lvbiBleHRlbmRzIEFTVCB7XG4gICAgZWxlbWVudHM6IEFTVFtdO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBBU1RbXSwgc3RhcnQ/OiBBU1QsIGVuZD86IEFTVCkge1xuICAgICAgICBzdXBlcihzdGFydD8ubGluZSwgc3RhcnQ/LmNvbCk7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBwcm9wcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlsuLi5dXCI7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9iamVjdFByb3BlcnR5IGV4dGVuZHMgQVNUIHtcbiAgICBrZXk6IEFTVDtcbiAgICB2YWx1ZTogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGtleTogQVNULCB2YWx1ZTogQVNUKSB7XG4gICAgICAgIHN1cGVyKGtleS5saW5lLCBrZXkuY29sKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgV2hpbGVMb29wU3RhdGVtZW50IGV4dGVuZHMgQVNUIHtcbiAgICB0ZXN0OiBBU1Q7XG4gICAgYm9keTogQVNUO1xuICAgIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0cnVjdG9yKHRlc3Q6IEFTVCwgYm9keTogQVNULCBzdGFydFRva2VuPzogVG9rZW4sIGVuZFRva2VuPzogVG9rZW4sIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0VG9rZW4/LmxpbmUsIHN0YXJ0VG9rZW4/LmNvbCk7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgICAgIHRoaXMucmV0YWluID0gcmV0YWluO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBGb3JMb29wU3RhdGVtZW50IGV4dGVuZHMgQVNUIHtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpbml0OiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCxcbiAgICAgICAgcHVibGljIHRlc3Q6IEFTVCxcbiAgICAgICAgcHVibGljIHVwZGF0ZTogQVNULFxuICAgICAgICBwdWJsaWMgZGlyZWN0aW9uOiBUb2tlbixcbiAgICAgICAgcHVibGljIGJvZHk6IEFTVCxcbiAgICAgICAgc3RhcnRUb2tlbj86IFRva2VuLFxuICAgICAgICBlbmRUb2tlbj86IFRva2VuLFxuICAgICAgICBwdWJsaWMgcmV0YWluOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBGb3JPZlN0YXRlbWVudCBleHRlbmRzIEFTVCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBpZGVudGlmaWVyOiBBU1QsXG4gICAgICAgIHB1YmxpYyBjb2xsZWN0aW9uOiBBU1QsXG4gICAgICAgIHB1YmxpYyBib2R5OiBBU1QsXG4gICAgICAgIHN0YXJ0VG9rZW4/OiBUb2tlbixcbiAgICAgICAgZW5kVG9rZW4/OiBUb2tlbixcbiAgICAgICAgcHVibGljIHJldGFpbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0VG9rZW4/LmxpbmUsIHN0YXJ0VG9rZW4/LmNvbClcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgVHVwbGVFeHByZXNzaW9uIGV4dGVuZHMgQVNUIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZmlyc3Q6IEFTVCwgcHVibGljIHNlY29uZDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGZpcnN0LmxpbmUsIGZpcnN0LmNvbClcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQnJlYWtBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGNvbnN0cnVjdG9yKGxpbmU/OiBudW1iZXIsIGNvbD86IG51bWJlcikge1xuICAgICAgICBzdXBlcihsaW5lLCBjb2wpXG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIENvbnRpbnVlQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBjb25zdHJ1Y3RvcihsaW5lPzogbnVtYmVyLCBjb2w/OiBudW1iZXIpIHtcbiAgICAgICAgc3VwZXIobGluZSwgY29sKTtcbiAgICB9XG59XG5jbGFzcyBQYXJzZXIge1xuICAgIHN0YXRpYyBfYmlub3BQcmVjZGVuY2VzOiB7IFtrOiBudW1iZXJdOiBudW1iZXIgfSA9IHtcbiAgICAgICAgW1Rva2VuVHlwZS5lcWVxXTogMTAsXG4gICAgICAgIFtUb2tlblR5cGUubm90RXFdOiAxMCxcbiAgICAgICAgW1Rva2VuVHlwZS5ncmVhdF06IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLmdyZWF0RXFdOiAxMCxcbiAgICAgICAgW1Rva2VuVHlwZS5sZXNzXTogMTAsXG4gICAgICAgIFtUb2tlblR5cGUubGVzc0VxXTogMTAsXG4gICAgICAgIFtUb2tlblR5cGUucGx1c106IDIwLFxuICAgICAgICBbVG9rZW5UeXBlLm1pbnVzXTogMjAsXG4gICAgICAgIFtUb2tlblR5cGUubXVsdF06IDQwLFxuICAgICAgICBbVG9rZW5UeXBlLmRpdl06IDQwLFxuICAgICAgICBbVG9rZW5UeXBlLm1vZF06IDQwLFxuICAgIH07XG5cbiAgICBsZXhlciE6IExleGVyO1xuICAgIGN1cnJlbnRUb2tlbj86IFRva2VuO1xuICAgIGNvbnN0cnVjdG9yKGxleGVyOiBMZXhlcikge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IGxleGVyLm5leHRUb2tlbigpO1xuICAgICAgICB0aGlzLmxleGVyID0gbGV4ZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWF0KHR5cGU6IFRva2VuVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gdGhpcy5sZXhlci5uZXh0VG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISwgdHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9lYXRFT0woKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLmVvbCkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5lb2wpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWF0U2VtaU9yRU9MKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5lb2wgfHxcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSBUb2tlblR5cGUuc2VtaSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KHRoaXMuY3VycmVudFRva2VuIS50eXBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VhdFNlbWkoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLnNlbWkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuc2VtaSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF92YXJpYWJsZSgpOiBJZGVudGlmaWVyQVNUIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBJZGVudGlmaWVyQVNUKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuaWQpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9mYWN0b3IoKTogQVNUIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUucGx1czpcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm1pbnVzOlxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubm90OlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdCh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVbmFyeUV4cHJlc3Npb25BU1QodG9rZW4hLCB0aGlzLl9leHByZXNzaW9uKCkpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubnVtYmVyQ29uc3Q6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5udW1iZXJDb25zdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsQVNUKHRva2VuLCB0b2tlbi52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnN0cmluZ0NvbnN0OlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuc3RyaW5nQ29uc3QpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEFTVCh0b2tlbiwgdG9rZW4udmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5scGFyZW46XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5scGFyZW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5ycGFyZW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuVFJVRTpcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkZBTFNFOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdCh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsQVNUKHRva2VuLCB0b2tlbi52YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLk5VTEw6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5OVUxMKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxBU1QodG9rZW4sIFwibnVsbFwiKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFja2V0OlxuICAgICAgICAgICAgICAgIC8vIGxpdGVyYWwgYXJyYXkgZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hcnJheUV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFjZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0RXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFyaWFibGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3Rlcm0oKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLl9mYWN0b3IoKTtcbiAgICAgICAgbm9kZSA9IHRoaXMuX3RyeVBhcnNpbmdNZW1iZXJFeHByZXNzaW9uKG5vZGUpO1xuICAgICAgICBub2RlID0gdGhpcy5fdHJ5UGFyc2luZ0Z1bmN0aW9uQ2FsbChub2RlKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhwcmVzc2lvbigpOiBBU1Qge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuX3Rlcm0oKTtcbiAgICAgICAgbm9kZSA9IHRoaXMuX3RyeUJpbmFyeUV4cHJlc3Npb24oMCwgbm9kZSk7XG4gICAgICAgIHdoaWxlIChbVG9rZW5UeXBlLmFuZCwgVG9rZW5UeXBlLm9yXS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgdGhpcy5fZWF0KHRva2VuLnR5cGUpO1xuICAgICAgICAgICAgbm9kZSA9IG5ldyBMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlLCB0b2tlbiwgdGhpcy5fZXhwcmVzc2lvbigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5lcXVhbCkpIHtcbiAgICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCB8fCBub2RlIGluc3RhbmNlb2YgSW5kZXhBY2Nlc3NvckFTVCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuZXF1YWwpO1xuICAgICAgICAgICAgICAgIG5vZGUgPSBuZXcgQXNzaWdubWVudEV4cHJlc3Npb25BU1Qobm9kZSwgdGhpcy5fZXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCB0b2tlblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfb2JqZWN0UHJvcGVydHkoKTogT2JqZWN0UHJvcGVydHkge1xuICAgICAgICBsZXQga2V5OiBBU1Q7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnN0cmluZ0NvbnN0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV3IExpdGVyYWxBU1QodGhpcy5jdXJyZW50VG9rZW4sIHRoaXMuY3VycmVudFRva2VuLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5zdHJpbmdDb25zdCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxicmFja2V0OlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5sYnJhY2tldCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFja2V0KTtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gZXhwcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuaWQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3ZhcmlhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG5ldyBMaXRlcmFsQVNUKG5ldyBUb2tlbihUb2tlblR5cGUuaWQsIGlkLnZhbHVlLCBpZC5saW5lLCBpZC5jb2wpLCBpZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgYFVuZXhwZWN0ZWQgdG9rZW4gJHt0aGlzLmN1cnJlbnRUb2tlbn1gO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuY29sb24pO1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0UHJvcGVydHkoa2V5ISwgdmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9wcm9wZXJ0eSgpOiBBU1Qge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2JqZWN0UHJvcGVydHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9vYmplY3RQcm9wZXJ0aWVzKCk6IEFTVFtdIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllczogQVNUW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuPy50eXBlICE9IFRva2VuVHlwZS5yYnJhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHRoaXMuX3Byb3BlcnR5KCkpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLmNvbW1hKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmNvbW1hKTtcbiAgICAgICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2V4cGVjdChUb2tlblR5cGUucmJyYWNlKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHRoaXMuX3Byb3BlcnR5KCkpO1xuICAgICAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfb2JqZWN0RXhwcmVzc2lvbihicmFjZVRva2VuPzogVG9rZW4pOiBBU1Qge1xuICAgICAgICB2YXIgdG9rZW4gPSBicmFjZVRva2VuID8/IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBpZiAoIWJyYWNlVG9rZW4pIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNlKTtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLl9vYmplY3RQcm9wZXJ0aWVzKCk7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RFeHByZXNzaW9uKHByb3BlcnRpZXMsIHRva2VuLCB0aGlzLmN1cnJlbnRUb2tlbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYXJyYXlFeHByZXNzaW9uKCk6IEFTVCB7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNrZXQpO1xuICAgICAgICBjb25zdCBlbGVtZW50czogQVNUW10gPSB0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFja2V0KSA/IFtdIDogdGhpcy5fZXhwcmVzc2lvbnNMaXN0KCk7XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNrZXQpO1xuICAgICAgICB2YXIgc3RhcnROb2RlID0gZWxlbWVudHMubGVuZ3RoICE9PSAwID8gZWxlbWVudHNbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHZhciBsYXN0Tm9kZSA9IGVsZW1lbnRzLmxlbmd0aCAhPT0gMCA/IGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbmV3IEFycmF5RXhwcmVzc2lvbihlbGVtZW50cywgc3RhcnROb2RlLCBsYXN0Tm9kZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3RyeVBhcnNpbmdNZW1iZXJFeHByZXNzaW9uKG46IEFTVCk6IEFTVCB7XG4gICAgICAgIGxldCBub2RlID0gbjtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUubGJyYWNrZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubGJyYWNrZXQpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgbm9kZSA9IG5ldyBJbmRleEFjY2Vzc29yQVNUKG5vZGUsIGtleSk7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFja2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90cnlCaW5hcnlFeHByZXNzaW9uKHByZWM6IG51bWJlciwgbGVmdDogQVNUKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSBsZWZ0O1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFByZWMgPSBQYXJzZXIuX2Jpbm9wUHJlY2RlbmNlc1t0aGlzLmN1cnJlbnRUb2tlbiEudHlwZV0gfHwgLTE7XG4gICAgICAgICAgICBpZiAoY3VycmVudFByZWMgPCBwcmVjKSByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICAgICAgdGhpcy5fZWF0KG9wZXJhdG9yLnR5cGUpO1xuICAgICAgICAgICAgbGV0IHJpZ2h0ID0gdGhpcy5fdGVybSgpO1xuICAgICAgICAgICAgY29uc3QgbmV4dFByZWMgPSBQYXJzZXIuX2Jpbm9wUHJlY2RlbmNlc1t0aGlzLmN1cnJlbnRUb2tlbiEudHlwZV0gfHwgLTE7XG4gICAgICAgICAgICBpZiAoY3VycmVudFByZWMgPCBuZXh0UHJlYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IHRoaXMuX3RyeUJpbmFyeUV4cHJlc3Npb24oY3VycmVudFByZWMgKyAxLCByaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcCA9PT0gbm9kZSkgcmV0dXJuIHRtcDtcbiAgICAgICAgICAgICAgICByaWdodCA9IHRtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUgPSBuZXcgQmluYXJ5RXhwcmVzc2lvbkFTVChub2RlLCBvcGVyYXRvciwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhwcmVzc2lvbnNMaXN0KCk6IEFTVFtdIHtcbiAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgIC8vIGlmIChleHBlY3QoTGV4ZXIuVG9rZW5UeXBlLlJQQVJFTikpIHJldHVybiBlbXB0eUxpc3QoKVxuICAgICAgICBsZXQgZXhwciA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW2V4cHJdO1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5jb21tYSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb21tYSk7XG4gICAgICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFja2V0KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXhwciA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGV4cHIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2FsbEV4cHJlc3Npb24obm9kZTogQVNUKTogQ2FsbEV4cHJlc3Npb25BU1Qge1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxwYXJlbik7XG4gICAgICAgIGxldCBhcmdzOiBBU1RbXSA9IFtdO1xuICAgICAgICBpZiAoIXRoaXMuX2V4cGVjdChUb2tlblR5cGUucnBhcmVuKSkge1xuICAgICAgICAgICAgYXJncyA9IHRoaXMuX2V4cHJlc3Npb25zTGlzdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucnBhcmVuKTtcbiAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIElkZW50aWZpZXJBU1QpKSB7XG4gICAgICAgICAgICBlcnJvcih0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ2FsbEV4cHJlc3Npb25BU1Qobm9kZSBhcyBJZGVudGlmaWVyQVNULCBhcmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90cnlQYXJzaW5nRnVuY3Rpb25DYWxsKG46IEFTVCk6IEFTVCB7XG4gICAgICAgIGxldCBub2RlID0gbjtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUubHBhcmVuKSB7XG4gICAgICAgICAgICAvLyBwcm9iYWJsZSBmdW5jdGlvbiBjYWxsXG4gICAgICAgICAgICBub2RlID0gdGhpcy5fY2FsbEV4cHJlc3Npb24obm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RhdGVtZW50RXhwcmVzc2lvbigpOiBBU1Qge1xuXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9leHByZXNzaW9uKCk7XG5cbiAgICAgICAgaWYgKCFbVG9rZW5UeXBlLnNlbWksIFRva2VuVHlwZS5lb2wsIFRva2VuVHlwZS5lb2ZdXG4gICAgICAgICAgICAuaW5jbHVkZXModGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpKSB7XG4gICAgICAgICAgICBlcnJvcih0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Jsb2NrU3RhdGVtZW50KGlnbm9yZUZpcnN0QnJhY2UgPSBmYWxzZSk6IEJsb2NrU3RhdGVtZW50QVNUIHtcbiAgICAgICAgaWYgKCFpZ25vcmVGaXJzdEJyYWNlKSB0aGlzLl9lYXQoVG9rZW5UeXBlLmxicmFjZSk7XG4gICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5yYnJhY2UpKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFjZSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJsb2NrU3RhdGVtZW50QVNUKFtdLCB0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IGJvZHkgPSBfc3RhdGVtZW50cygpO1xuICAgICAgICBjb25zdCBib2R5ID0gW3RoaXMuX3N0YXRlbWVudCgpXTtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdFNlbWlPckVPTCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUucmJyYWNlIHx8IHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUuZW9mKSB7XG4gICAgICAgICAgICAgICAgLy8gX2VhdCh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5LnB1c2godGhpcy5fc3RhdGVtZW50KCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2V4cGVjdChUb2tlblR5cGUucmJyYWNlKSkgYnJlYWs7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgIT09IFRva2VuVHlwZS5lb2wgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLnNlbWkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLmVvZikge1xuICAgICAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5yYnJhY2UpO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5yYnJhY2UpIHtcbiAgICAgICAgICAgIC8vIGVuZEJsb2NrXG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFjZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEJsb2NrU3RhdGVtZW50QVNUKGJvZHksIHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaWZTdGF0ZW1lbnQoKTogSWZTdGF0ZW1lbnRBU1Qge1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLklGKTtcbiAgICAgICAgY29uc3Qgd2l0aFBhciA9IHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUubHBhcmVuO1xuICAgICAgICBpZiAod2l0aFBhcikge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5scGFyZW4pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgIGlmICh3aXRoUGFyKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJwYXJlbik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbnNlcXVlbnQ6IEFTVDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUubGJyYWNlKSB7XG4gICAgICAgICAgICBjb25zZXF1ZW50ID0gdGhpcy5fYmxvY2tTdGF0ZW1lbnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNlcXVlbnQgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lYXRTZW1pT3JFT0woKTtcbiAgICAgICAgbGV0IGFsdGVybmF0ZTogQVNUIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5FTFNFKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLkVMU0UpO1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLklGOlxuICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGUgPSB0aGlzLl9pZlN0YXRlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sYnJhY2U6XG4gICAgICAgICAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRoaXMuX2Jsb2NrU3RhdGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGFsdGVybmF0ZSA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgSWZTdGF0ZW1lbnRBU1QodGVzdCwgY29uc2VxdWVudCwgYWx0ZXJuYXRlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfd2hpbGVMb29wKCk6IFdoaWxlTG9vcFN0YXRlbWVudCB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLldISUxFX1RJTEwpXG4gICAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLl9leHByZXNzaW9uKClcbiAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUubGJyYWNlID8gdGhpcy5fYmxvY2tTdGF0ZW1lbnQoKSA6IHRoaXMuX2V4cHJlc3Npb24oKVxuICAgICAgICByZXR1cm4gbmV3IFdoaWxlTG9vcFN0YXRlbWVudCh0ZXN0LCBib2R5LCB0b2tlbiwgdGhpcy5jdXJyZW50VG9rZW4hKVxuICAgIH1cblxuICAgIHByaXZhdGUgX2Zvck9mSWRlbnRpZmllcigpOiBBU1Qge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuY3VycmVudFRva2VuIS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5scGFyZW46IHtcbiAgICAgICAgICAgICAgICAvLyBwcm9iYWJsZSB0dXBsZVxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubHBhcmVuKVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5fdmFyaWFibGUoKVxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuY29tbWEpXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gdGhpcy5fdmFyaWFibGUoKVxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucnBhcmVuKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHVwbGVFeHByZXNzaW9uKFxuICAgICAgICAgICAgICAgICAgICBmaXJzdCxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRva2VuVHlwZS5MQlJBQ0UgLT4gb2JqZWN0UGF0dGVybigpXG4gICAgICAgICAgICAvLyBUb2tlblR5cGUuTEJSQUNLRVQgLT4gYXJyYXlQYXR0ZXJuKClcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlKClcbiAgICAgICAgfVxuXG4gICAgfVxuICAgIC8qKlxuICAgICAqICMgRm9yTG9vcFN0YXRlbWVudCB3aXRoIHN0ZXBcbiAgICAgKiAoc2VnaW5rYXxmb3IpIGE9MCAoZm9vfHRvKSAxMCAoa2F5fGthaikgbmlpbiAyIHsgIyBmb3IgYSA9IDA7IGE8MTA7IGErPTJcbiAgICAgKlxuICAgICAqIH1cbiAgICAgKiAoc2VnaW5rYXxmb3IpIG1hbGkga29ubyBhXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9yTG9vcCgpOiBBU1Qge1xuICAgICAgICBjb25zdCBzdGFydFRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLkZPUl9MT09QKVxuICAgICAgICBsZXQgZm9yT2YgPVxuICAgICAgICAgICAgW1Rva2VuVHlwZS5scGFyZW5dLmluY2x1ZGVzKHRoaXMuY3VycmVudFRva2VuIS50eXBlKTtcbiAgICAgICAgbGV0IG5vZGU6IEFTVDtcbiAgICAgICAgaWYgKGZvck9mKSB7XG4gICAgICAgICAgICBub2RlID0gdGhpcy5fZm9yT2ZJZGVudGlmaWVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgaWYgKCEoZXhwciBpbnN0YW5jZW9mIEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKSkge1xuICAgICAgICAgICAgICAgIGZvck9mID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUgPSBleHByO1xuICAgICAgICB9XG5cblxuICAgICAgICBpZiAoIWZvck9mICYmIG5vZGUgaW5zdGFuY2VvZiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCkge1xuICAgICAgICAgICAgLy8gbm9ybWFsIGZvclxuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5USUxMKTtcbiAgICAgICAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uOiBUb2tlbjtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUudXAgfHwgdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5kb3duKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMuY3VycmVudFRva2VuITtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQodC50eXBlKVxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IHRcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gbmV3IFRva2VuKFRva2VuVHlwZS51cCwgXCJ1cFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB1cGRhdGU7XG4gICAgICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS53aXRoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUud2l0aClcbiAgICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZSA9IGV4cHJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlID0gbmV3IExpdGVyYWxBU1QobmV3IFRva2VuKFRva2VuVHlwZS5udW1iZXJDb25zdCwgMSwgdGhpcy5jdXJyZW50VG9rZW4hLmxpbmUsIHRoaXMuY3VycmVudFRva2VuIS5jb2wpLCBcIjFcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5sYnJhY2UpID8gdGhpcy5fYmxvY2tTdGF0ZW1lbnQoKSA6IHRoaXMuX2V4cHJlc3Npb24oKVxuXG4gICAgICAgICAgICBub2RlID0gbmV3IEZvckxvb3BTdGF0ZW1lbnQobm9kZSwgdGVzdCwgdXBkYXRlLCBkaXJlY3Rpb24sIGJvZHksIHN0YXJ0VG9rZW4sIHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9yT2YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuaW4pO1xuICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSAodGhpcy5jdXJyZW50VG9rZW4hIS50eXBlID09PSBUb2tlblR5cGUubGJyYWNlKSA/IHRoaXMuX2Jsb2NrU3RhdGVtZW50KCkgOiB0aGlzLl9leHByZXNzaW9uKClcbiAgICAgICAgICAgIG5vZGUgPSBuZXcgRm9yT2ZTdGF0ZW1lbnQoXG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgc3RhcnRUb2tlbixcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiFcbiAgICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zdGF0ZW1lbnQoKTogQVNUIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuQlJFQUs6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5CUkVBSyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCcmVha0FTVCh0aGlzLmN1cnJlbnRUb2tlbj8ubGluZSwgdGhpcy5jdXJyZW50VG9rZW4/LmNvbCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5DT05USU5VRTpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLkNPTlRJTlVFKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnRpbnVlQVNUKHRoaXMuY3VycmVudFRva2VuPy5saW5lLCB0aGlzLmN1cnJlbnRUb2tlbj8uY29sKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnNlbWk6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0U2VtaSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmVvbDpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVtZW50KCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5JRjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faWZTdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLldISUxFX1RJTEw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3doaWxlTG9vcCgpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuRk9SX0xPT1A6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvckxvb3AoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlbWVudEV4cHJlc3Npb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2V4cGVjdCh0eXBlOiBUb2tlblR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSB0eXBlO1xuICAgIH1cbiAgICBwcml2YXRlIF9kZWZpbml0aW9uKCk6IEFTVFtdIHtcbiAgICAgICAgdGhpcy5fZWF0U2VtaU9yRU9MKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2V4cGVjdChUb2tlblR5cGUuZW9mKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbdGhpcy5fc3RhdGVtZW50KCldO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0U2VtaU9yRU9MKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5lb2YpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmVvZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgPT09IFRva2VuVHlwZS5sYnJhY2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2godGhpcy5fYmxvY2tTdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9zdGF0ZW1lbnQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgIT09IFRva2VuVHlwZS5lb2wgJiZcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLnNlbWkgJiZcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLmVvZikge1xuICAgICAgICAgICAgLy8gICAgIGVycm9yKHRoaXMuY3VycmVudFRva2VuISk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcm9vdCgpOiBSb290QVNUIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5sZXhlci5zb3VyY2U7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBcIjxtb2R1bGU+XCI7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLl9kZWZpbml0aW9uKCk7XG4gICAgICAgIHJldHVybiBuZXcgUm9vdEFTVChsaXN0LCBuYW1lLCBzb3VyY2UpO1xuICAgIH1cblxuICAgIHBhcnNlKCk6IEFTVCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290KCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBMb29wQ29udHJvbCB7XG59XG5leHBvcnQgY2xhc3MgQnJlYWtCcmFuY2ggZXh0ZW5kcyBMb29wQ29udHJvbCB7IH1cbmV4cG9ydCBjbGFzcyBDb250aW51ZUJyYW5jaCBleHRlbmRzIExvb3BDb250cm9sIHsgfVxudHlwZSBGdW5jID0gKG5vZGU6IGFueSkgPT4gYW55O1xuLy8gQVNUIFdhbGxrZXJcbmFic3RyYWN0IGNsYXNzIEFOb2RlVmlzaXRvciB7XG4gICAgcHJvdGVjdGVkIF9ub2Rlc1Zpc2l0b3JzOiB7IFtrOiBzdHJpbmddOiBGdW5jIH0gPSB7fTtcbiAgICBwcm90ZWN0ZWQgcmVnaXN0ZXJWaXNpdG9yKHR5cGU6IFR5cGU8QVNUPiwgdmlzaXRvcjogRnVuYykge1xuICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYHZpc2l0JHt0eXBlLm5hbWV9YDtcbiAgICAgICAgdGhpcy5fbm9kZXNWaXNpdG9yc1ttZXRob2ROYW1lXSA9IHZpc2l0b3I7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgdmlzaXQobm9kZTogQVNUKTogYW55O1xufVxuXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOb2RlVmlzaXRvciBleHRlbmRzIEFOb2RlVmlzaXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKFJvb3RBU1QsIHRoaXMudmlzaXRSb290QVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQmxvY2tTdGF0ZW1lbnRBU1QsIHRoaXMudmlzaXRCbG9ja1N0YXRlbWVudEFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKElkZW50aWZpZXJBU1QsIHRoaXMudmlzaXRJZGVudGlmaWVyQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoTGl0ZXJhbEFTVCwgdGhpcy52aXNpdExpdGVyYWxBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCwgdGhpcy52aXNpdEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoRXhwcmVzc2lvblN0YXRlbWVudEFTVCwgdGhpcy52aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihDYWxsRXhwcmVzc2lvbkFTVCwgdGhpcy52aXNpdENhbGxFeHByZXNzaW9uQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQmluYXJ5RXhwcmVzc2lvbkFTVCwgdGhpcy52aXNpdEJpbmFyeUV4cHJlc3Npb25BU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihVbmFyeUV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRVbmFyeUV4cHJlc3Npb25BU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihJZlN0YXRlbWVudEFTVCwgdGhpcy52aXNpdElmU3RhdGVtZW50QVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoTG9naWNhbEV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRMb2dpY2FsRXhwcmVzc2lvbkFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEluZGV4QWNjZXNzb3JBU1QsIHRoaXMudmlzaXRJbmRleEFjY2Vzc29yQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoT2JqZWN0UHJvcGVydHksIHRoaXMudmlzaXRPYmplY3RQcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKE9iamVjdEV4cHJlc3Npb24sIHRoaXMudmlzaXRPYmplY3RFeHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQXJyYXlFeHByZXNzaW9uLCB0aGlzLnZpc2l0QXJyYXlFeHByZXNzaW9uKTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihXaGlsZUxvb3BTdGF0ZW1lbnQsIHRoaXMudmlzaXRXaGlsZUxvb3BTdGF0ZW1lbnQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihGb3JMb29wU3RhdGVtZW50LCB0aGlzLnZpc2l0Rm9yTG9vcFN0YXRlbWVudCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEZvck9mU3RhdGVtZW50LCB0aGlzLnZpc2l0Rm9yT2ZTdGF0ZW1lbnQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihCcmVha0FTVCwgdGhpcy52aXNpdEJyZWFrQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQ29udGludWVBU1QsIHRoaXMudmlzaXRDb250aW51ZUFTVCk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHZpc2l0KG5vZGU6IEFTVCk6IGFueSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gYHZpc2l0JHtub2RlLmNvbnN0cnVjdG9yLm5hbWV9YDtcbiAgICAgICAgICAgIC8vIGNvbnN0IGZuID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpW21ldGhvZE5hbWVdO1xuICAgICAgICAgICAgY29uc3QgZm4gPSB0aGlzLl9ub2Rlc1Zpc2l0b3JzW21ldGhvZE5hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIGZuPy5jYWxsKHRoaXMsIG5vZGUpID8/IG51bGw7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgYXNzaWduUHJvcGVydHkob3duZXI6IGFueSwgcHJvcGVydHk6IGFueSwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG93bmVyKSkge1xuICAgICAgICAgICAgb3duZXJbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG93bmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgb3duZXJbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7IH1cbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdFJvb3RBU1Qobm9kZTogUm9vdEFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRCbG9ja1N0YXRlbWVudEFTVChub2RlOiBCbG9ja1N0YXRlbWVudEFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRJZGVudGlmaWVyQVNUKG5vZGU6IElkZW50aWZpZXJBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0TGl0ZXJhbEFTVChub2RlOiBBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0QXNzaWdubWVudEV4cHJlc3Npb25BU1Qobm9kZTogQXNzaWdubWVudEV4cHJlc3Npb25BU1QpOiBhbnk7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QVNUKG5vZGU6IEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Q2FsbEV4cHJlc3Npb25BU1Qobm9kZTogQ2FsbEV4cHJlc3Npb25BU1QpOiBhbnk7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRCaW5hcnlFeHByZXNzaW9uQVNUKG5vZGU6IEJpbmFyeUV4cHJlc3Npb25BU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0VW5hcnlFeHByZXNzaW9uQVNUKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbkFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRJZlN0YXRlbWVudEFTVChub2RlOiBJZlN0YXRlbWVudEFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlOiBMb2dpY2FsRXhwcmVzc2lvbkFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRJbmRleEFjY2Vzc29yQVNUKG5vZGU6IEluZGV4QWNjZXNzb3JBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0T2JqZWN0UHJvcGVydHkobm9kZTogQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdE9iamVjdEV4cHJlc3Npb24oYXN0OiBBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0QXJyYXlFeHByZXNzaW9uKGFzdDogQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdEJyZWFrQVNUKG5vZGU6IEJyZWFrQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdFdoaWxlTG9vcFN0YXRlbWVudChub2RlOiBXaGlsZUxvb3BTdGF0ZW1lbnQpOiBhbnk7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRGb3JMb29wU3RhdGVtZW50KG5vZGU6IEZvckxvb3BTdGF0ZW1lbnQpOiBhbnk7XG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRGb3JPZlN0YXRlbWVudChub2RlOiBGb3JPZlN0YXRlbWVudCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRDb250aW51ZUFTVChub2RlOiBDb250aW51ZUFTVCk6IGFueTtcbn1cbmV4cG9ydCBjbGFzcyBNRXZlbnRTY29wZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcmVudD86IE1FdmVudFNjb3BlO1xuICAgIG1lbW9yeTogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIG1lbW9yeTogeyBbazogc3RyaW5nXTogYW55IH0sIHBhcmVudD86IE1FdmVudFNjb3BlKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMubWVtb3J5ID0gbWVtb3J5O1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgcmVzb2x2ZShrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm1lbW9yeSkuaW5jbHVkZXMoa2V5KSA/IHRoaXMubWVtb3J5W2tleV0gOiAodGhpcy5wYXJlbnQ/LnJlc29sdmUoa2V5KSA/PyBudWxsKTtcbiAgICB9XG4gICAgY2hhbmdlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBkZWNsYXJlID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5tZW1vcnkpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIC8vIGNoYW5nZSBoZXJlXG4gICAgICAgICAgICB0aGlzLm1lbW9yeVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuY2hhbmdlKGtleSwgdmFsdWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZWNsYXJlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZW1vcnlba2V5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnQgdHlwZSBNRXZlbnRvRkJpbmRpbmcgPSAoYXJnczogYW55W10sIHZtOiBNRXZlbnRvKSA9PiBhbnk7XG5leHBvcnQgY2xhc3MgTUV2ZW50byBleHRlbmRzIE5vZGVWaXNpdG9yIHtcblxuICAgIHJvb3RTY29wZTogTUV2ZW50U2NvcGUgPSBuZXcgTUV2ZW50U2NvcGUoXCJQcm9ncmFtXCIsIHt9KTtcbiAgICBwcm90ZWN0ZWQgY3VycmVudFNjb3BlPzogTUV2ZW50U2NvcGUgPSB0aGlzLnJvb3RTY29wZTtcblxuICAgIGRlYnVnID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dsb2JhbEZ1bmN0aW9uc1JlZ2lzdHJ5OiB7IFtrOiBzdHJpbmddOiBNRXZlbnRvRkJpbmRpbmcgfSA9IHt9O1xuICAgIHByaXZhdGUgc3RhdGljIF9jYWNoZTogTWFwPG51bWJlciwgQVNUPiA9IG5ldyBNYXAoKTtcbiAgICBwcm90ZWN0ZWQgX2Z1bmN0aW9uc1JlZ2lzdHJ5OiB7IFtrOiBzdHJpbmddOiBNRXZlbnRvRkJpbmRpbmcgfSA9IHt9O1xuICAgIHByb3RlY3RlZCBfZnVuY3Rpb25SZXNvbHZlcj86IChuYW1lOiBzdHJpbmcpID0+IE1FdmVudG9GQmluZGluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnkgPSB7IC4uLk1FdmVudG8uX2dsb2JhbEZ1bmN0aW9uc1JlZ2lzdHJ5IH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNjb3BlPy5yZXNvbHZlKG5hbWUpID8/IG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBjaGFuZ2VWYXJpYWJsZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2NvcGU/LmNoYW5nZShuYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcHVzaFNjb3BlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzY29wZSA9IG5ldyBNRXZlbnRTY29wZShuYW1lLCB7fSwgdGhpcy5jdXJyZW50U2NvcGUpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY29wZSA9IHNjb3BlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcG9wU2NvcGUoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNjb3BlID0gdGhpcy5jdXJyZW50U2NvcGU/LnBhcmVudDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGxvZyhtZXNzYWdlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0Um9vdEFTVChub2RlOiBSb290QVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gdGhpcy52aXNpdChuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFzdDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRCbG9ja1N0YXRlbWVudEFTVChub2RlOiBCbG9ja1N0YXRlbWVudEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBub2RlLmJvZHk7XG4gICAgICAgIGxldCBsYXN0O1xuICAgICAgICB0aGlzLnB1c2hTY29wZShcIkJsb2NrXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgbGlzdCkge1xuICAgICAgICAgICAgbGFzdCA9IHRoaXMudmlzaXQobik7XG4gICAgICAgICAgICBpZiAobGFzdCBpbnN0YW5jZW9mIExvb3BDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gbGFzdDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRJZGVudGlmaWVyQVNUKG5vZGU6IElkZW50aWZpZXJBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBpZCA9IG5vZGUudmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzPy5yZXNvbHZlKGlkKSA/PyBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdExpdGVyYWxBU1Qobm9kZTogQVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAobm9kZSBhcyBMaXRlcmFsQVNUKS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKG5vZGU6IEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKTogYW55IHtcblxuICAgICAgICBjb25zdCBpZDogQVNUID0gbm9kZS5pZGVudGlmaWVyO1xuXG4gICAgICAgIGNvbnN0IGluaXQ6IEFTVCA9IG5vZGUuaW5pdDtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBudWxsO1xuICAgICAgICBpZiAoaWQgaW5zdGFuY2VvZiBJbmRleEFjY2Vzc29yQVNUKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy52aXNpdChpZC5vd25lcik7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudmlzaXQobm9kZS5pbml0KTtcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHRoaXMudmlzaXQoaWQua2V5KTtcbiAgICAgICAgICAgIHRoaXMuYXNzaWduUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlkIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnZpc2l0KGluaXQpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYXJpYWJsZShpZC52YWx1ZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QVNUKG5vZGU6IEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBleHByID0gbm9kZS5leHByZXNzaW9uO1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpdChleHByKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRDYWxsRXhwcmVzc2lvbkFTVChub2RlOiBDYWxsRXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBjYWxsZWUgPSBub2RlLmNhbGxlZTtcbiAgICAgICAgY29uc3QgYXJncyA9IG5vZGUuYXJndW1lbnRzO1xuICAgICAgICBjb25zdCBjYWxsZWVOYW1lID0gY2FsbGVlLnZhbHVlO1xuICAgICAgICBjb25zdCBmbiA9IHRoaXMucmVzb2x2ZUZ1bmN0aW9uKGNhbGxlZU5hbWUpO1xuICAgICAgICBjb25zdCBhcmdWYWx1ZXMgPSBhcmdzLm1hcCgoZSkgPT4gdGhpcy52aXNpdChlKSk7XG4gICAgICAgIC8vIHByaW50KFwiYXJnVmFsdWVzOjpcIiwgYXJnVmFsdWVzKVxuICAgICAgICByZXR1cm4gZm4/LihhcmdWYWx1ZXMsIHRoaXMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEJpbmFyeUV4cHJlc3Npb25BU1Qobm9kZTogQmluYXJ5RXhwcmVzc2lvbkFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBub2RlLmxlZnQ7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gbm9kZS5yaWdodDtcbiAgICAgICAgY29uc3Qgb3AgPSBub2RlLm9wZXJhdGlvbjtcbiAgICAgICAgY29uc3QgbFZhbHVlID0gdGhpcy52aXNpdChsZWZ0KTtcbiAgICAgICAgY29uc3QgclZhbHVlID0gdGhpcy52aXNpdChyaWdodCk7XG4gICAgICAgIHN3aXRjaCAob3AudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUucGx1czpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKyByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtsVmFsdWV9JHtyVmFsdWV9YDtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm1pbnVzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAtIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICogclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc1N0cmluZyhyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByVmFsdWUgKiBsVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZGl2OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJWYWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkaXZpc2lvbiBieSAwXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgLyByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubW9kOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAlIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ncmVhdDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZ3JlYXRFcTpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPj0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxlc3M6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIDwgclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxlc3NFcTpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPD0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmVxZXE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA9PT0gclZhbHVlO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubm90RXE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAhPT0gclZhbHVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdFVuYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBVbmFyeUV4cHJlc3Npb25BU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBhcmcgPSBub2RlLmFyZ3VtZW50O1xuICAgICAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuICAgICAgICBjb25zdCBhcmdWYWx1ZSA9IHRoaXMudmlzaXQoYXJnKTtcbiAgICAgICAgaWYgKG9wLnR5cGUgPT09IFRva2VuVHlwZS5ub3QpIHtcbiAgICAgICAgICAgIHJldHVybiBfYm9vbFZhbHVlKGFyZ1ZhbHVlKSA9PT0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtKGFyZ1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wLnR5cGUgPT09IFRva2VuVHlwZS5wbHVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLm1pbnVzKSB7XG4gICAgICAgICAgICByZXR1cm4gLWFyZ1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdElmU3RhdGVtZW50QVNUKG5vZGU6IElmU3RhdGVtZW50QVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgdGVzdE5vZGU6IEFTVCA9IG5vZGUudGVzdDtcbiAgICAgICAgY29uc3QgdGVzdCA9IHRoaXMudmlzaXQodGVzdE5vZGUpO1xuICAgICAgICBjb25zdCB0ZXN0Qm9vbFZhbHVlID0gX2Jvb2xWYWx1ZSh0ZXN0KTtcblxuICAgICAgICBpZiAodGVzdEJvb2xWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQobm9kZS5jb25zZXF1ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2l0KG5vZGUuYWx0ZXJuYXRlISk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0TG9naWNhbEV4cHJlc3Npb25BU1Qobm9kZTogTG9naWNhbEV4cHJlc3Npb25BU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBsZWZ0Tm9kZSA9IG5vZGUubGVmdDtcbiAgICAgICAgbGV0IHRlc3QgPSB0aGlzLnZpc2l0KGxlZnROb2RlKTtcbiAgICAgICAgY29uc3QgdGVzdEJvb2xWYWx1ZSA9IF9ib29sVmFsdWUodGVzdCk7XG4gICAgICAgIGlmIChub2RlLm9wZXJhdG9yLnR5cGUgPT09IFRva2VuVHlwZS5hbmQpIHtcbiAgICAgICAgICAgIGlmICghdGVzdEJvb2xWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfYm9vbFZhbHVlKHRoaXMudmlzaXQobm9kZS5yaWdodCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IudHlwZSA9PT0gVG9rZW5UeXBlLm9yKSB7XG4gICAgICAgICAgICBpZiAodGVzdEJvb2xWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVzdCA9IHRoaXMudmlzaXQobm9kZS5yaWdodCk7XG4gICAgICAgICAgICByZXR1cm4gdGVzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0SW5kZXhBY2Nlc3NvckFTVChub2RlOiBJbmRleEFjY2Vzc29yQVNUKTogYW55IHtcbiAgICAgICAgY29uc3Qgb3duZXJOb2RlID0gKG5vZGUgYXMgSW5kZXhBY2Nlc3NvckFTVCkub3duZXI7XG4gICAgICAgIGNvbnN0IG93bmVyID0gdGhpcy52aXNpdChvd25lck5vZGUpO1xuICAgICAgICBpZiAob3duZXIgPT09IG51bGwgfHwgb3duZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvd25lciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMudmlzaXQobm9kZS5rZXkpO1xuICAgICAgICAgICAgcmV0dXJuIG93bmVyW2tleV07XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvd25lcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMudmlzaXQobm9kZS5rZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGlzTnVtKGtleSkgJiYgb3duZXIubGVuZ3RoIDwga2V5ICYmIGtleSA+PSAwID8gb3duZXJba2V5XSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0T2JqZWN0UHJvcGVydHkobm9kZTogQVNUKTogYW55IHsgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0T2JqZWN0RXhwcmVzc2lvbihhc3Q6IEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlOiBhbnkgPSB7fTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGFzdCBhcyBPYmplY3RFeHByZXNzaW9uO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIG5vZGUucHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKGl0IGluc3RhbmNlb2YgT2JqZWN0UHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gdGhpcy52aXNpdChpdC5rZXkpO1xuICAgICAgICAgICAgICAgIGtleSA9IGlzU3RyaW5nKGtleSkgPyBrZXkgOiBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gdGhpcy52aXNpdChpdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEFycmF5RXhwcmVzc2lvbihhc3Q6IEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBhc3QgYXMgQXJyYXlFeHByZXNzaW9uO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5yZXNvbHZlQXJndW1lbnRzKG5vZGUuZWxlbWVudHMpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0QnJlYWtBU1Qobm9kZTogQnJlYWtBU1QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCcmVha0JyYW5jaCgpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRXaGlsZUxvb3BTdGF0ZW1lbnQobm9kZTogV2hpbGVMb29wU3RhdGVtZW50KTogYW55IHtcbiAgICAgICAgdGhpcy5sb2coYFdoaWxlTG9vcFN0YXRlbWVudCAke25vZGUudGVzdH0gJHtub2RlLmJvZHl9YClcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKF9ib29sVmFsdWUodGhpcy52aXNpdChub2RlLnRlc3QpKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBDb250aW51ZUJyYW5jaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRhaW5lciA/PyBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEZvckxvb3BTdGF0ZW1lbnQobm9kZTogRm9yTG9vcFN0YXRlbWVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHJldGFpbmVyOiBhbnlbXSB8IHVuZGVmaW5lZCA9IG5vZGUucmV0YWluID8gW10gOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGxvb3BJZGVudGlmaWVyID0gbm9kZS5pbml0LmlkZW50aWZpZXJcbiAgICAgICAgaWYgKCEobG9vcElkZW50aWZpZXIgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSkgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBpZGVudGlmZXIgZm91bmRcIilcbiAgICAgICAgdGhpcy5wdXNoU2NvcGUoXCJGb3JMb29wU3RhdGVtZW50XCIpO1xuICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSB0aGlzLnZpc2l0KG5vZGUuaW5pdC5pbml0KVxuICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGxvb3BJZGVudGlmaWVyLnZhbHVlLCBpbml0aWFsVmFsdWUpXG4gICAgICAgIHJldGFpbmVyPy5wdXNoKGluaXRpYWxWYWx1ZSlcbiAgICAgICAgY29uc3QgdGVzdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS50ZXN0KVxuICAgICAgICAgICAgaWYgKGlzTnVtKHJldCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZGlyZWN0aW9uLnR5cGUgPT09IFRva2VuVHlwZS51cCA/IHJldCA+PSB0bXAgOiByZXQgPD0gdG1wXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShyZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gdGhpcy52aXNpdChub2RlLnVwZGF0ZSk7XG4gICAgICAgICAgICBpZiAoaXNOdW0odXBkYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gYXV0byBoYW5kbGVcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW0odG1wKSkgdGhyb3cgRXJyb3IoXCJDYW50IHVwZGF0ZSB2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGxvb3BJZGVudGlmaWVyLnZhbHVlLCBub2RlLmRpcmVjdGlvbi50eXBlID09PSBUb2tlblR5cGUudXAgPyB0bXAgKyB1cGRhdGVWYWx1ZSA6IHRtcCAtIHVwZGF0ZVZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVcGRhdGUgdmFsdWUgY2FudCBiZSBub24gbnVtYmVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS5ib2R5KVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEJyZWFrQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQ29udGludWVCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldGFpbmVyPy5wdXNoKHJldClcbiAgICAgICAgICAgIC8vIHVwZGF0ZVxuICAgICAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gcmV0YWluZXIgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRGb3JPZlN0YXRlbWVudChub2RlOiBGb3JPZlN0YXRlbWVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLnZpc2l0KG5vZGUuY29sbGVjdGlvbik7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW4gaXRlcmF0ZSBub24gYXJyYXkgb2JqZWN0XCIpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wdXNoU2NvcGUoXCJGb3JPZlN0YXRlbWVudFwiKTtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWNsYXJlRm9ySWRlbnRpZmllcihub2RlLmlkZW50aWZpZXIsIGl0KVxuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBDb250aW51ZUJyYW5jaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgcmV0dXJuIHJldGFpbmVyID8/IG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdENvbnRpbnVlQVNUKG5vZGU6IENvbnRpbnVlQVNUKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udGludWVCcmFuY2goKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9kZWNsYXJlRm9ySWRlbnRpZmllcihub2RlOiBBU1QsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFR1cGxlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIG1ha2UgYSB0dXBsZSBmcm9tIG5vbiBBcnJheSBlbGVtZW50XCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKChub2RlLmZpcnN0IGFzIElkZW50aWZpZXJBU1QpLnZhbHVlLCB2YWx1ZVswXSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKChub2RlLnNlY29uZCBhcyBJZGVudGlmaWVyQVNUKS52YWx1ZSwgdmFsdWVbMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlVmFyaWFibGUoKG5vZGUgYXMgSWRlbnRpZmllckFTVCkudmFsdWUsIHZhbHVlKTtcbiAgICB9XG4gICAgcmVzb2x2ZUFyZ3VtZW50cyhhcmdzOiBBU1RbXSk6IGFueSB7XG4gICAgICAgIHJldHVybiBhcmdzLm1hcCgoaXQ6IEFTVCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQoaXQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0RnVuY3Rpb25SZXNvbHZlcihyZXNvbHZlcjogKG5hbWU6IHN0cmluZykgPT4gTUV2ZW50b0ZCaW5kaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2Z1bmN0aW9uUmVzb2x2ZXIgPSByZXNvbHZlcjtcbiAgICB9XG4gICAgcmVzb2x2ZUZ1bmN0aW9uKG5hbWU6IHN0cmluZyk6IE1FdmVudG9GQmluZGluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtuYW1lXSA/PyB0aGlzLl9mdW5jdGlvblJlc29sdmVyPy4obmFtZSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZywgZm46IE1FdmVudG9GQmluZGluZykge1xuICAgICAgICB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtpZF0gPSBmbjtcbiAgICB9XG5cbiAgICB1bnJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZykge1xuICAgICAgICBkZWxldGUgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbaWRdO1xuICAgIH1cblxuICAgIGV4ZWN1dGUoc291cmNlOiBzdHJpbmcsIGNhY2hlID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBNRXZlbnRvLmNvbXBpbGUoc291cmNlLCBjYWNoZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0KG1vZHVsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvbXBpbGUoc291cmNlOiBzdHJpbmcsIGNhY2hlID0gZmFsc2UpOiBBU1Qge1xuICAgICAgICBjb25zdCBoYXNoID0gaGFzaENvZGUoc291cmNlKTtcbiAgICAgICAgaWYgKGNhY2hlICYmIHRoaXMuX2NhY2hlLmhhcyhoYXNoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmdldChoYXNoKSE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGV4ZXIgPSBuZXcgTGV4ZXIoc291cmNlKTtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihsZXhlcik7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IHBhcnNlci5wYXJzZSgpO1xuXG4gICAgICAgIGlmIChjYWNoZSkgdGhpcy5fY2FjaGUuc2V0KGhhc2gsIG1vZHVsZSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlZ2lzdGVyKGlkOiBzdHJpbmcsIGZuOiBNRXZlbnRvRkJpbmRpbmcpIHtcbiAgICAgICAgTUV2ZW50by5fZ2xvYmFsRnVuY3Rpb25zUmVnaXN0cnlbaWRdID0gZm47XG4gICAgfVxuXG4gICAgc3RhdGljIHVucmVnaXN0ZXIoaWQ6IHN0cmluZykge1xuICAgICAgICBkZWxldGUgTUV2ZW50by5fZ2xvYmFsRnVuY3Rpb25zUmVnaXN0cnlbaWRdO1xuICAgIH1cblxuICAgIHN0YXRpYyBydW4oc291cmNlOiBzdHJpbmcsIGNhY2hlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgbWV2ZW50byA9IG5ldyBNRXZlbnRvKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IE1FdmVudG8uY29tcGlsZShzb3VyY2UsIGNhY2hlKTtcbiAgICAgICAgcmV0dXJuIG1ldmVudG8udmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbmV3SW5zdGFuY2UoKTogTUV2ZW50byB7XG4gICAgICAgIC8vIGNvbnN0IGxleGVyID0gTGV4ZXIoc291cmNlKTtcbiAgICAgICAgLy8gY29uc3QgcGFyc2VyID0gUGFyc2VyKGxleGVyKTtcbiAgICAgICAgLy8gY29uc3QgbW9kdWxlID0gcGFyc2VyLnBhcnNlKCk7XG4gICAgICAgIHJldHVybiBuZXcgTUV2ZW50bygpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IE1FdmVudG8ge1xuICAgICAgICB2YXIgcmV0ID0gbmV3IE1FdmVudG8oKTtcbiAgICAgICAgcmV0Ll9mdW5jdGlvbnNSZWdpc3RyeSA9IHsgLi4uIHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5IH07XG4gICAgICAgIHJldC5yb290U2NvcGUubWVtb3J5ID0geyAuLi50aGlzLnJvb3RTY29wZS5tZW1vcnkgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgbmV3QXN5bmNJbnN0YW5jZSgpOiBNRXZlbnRvQXN5bmMge1xuICAgICAgICBjb25zdCBhc3luY0lucyA9IE1FdmVudG9Bc3luYy5uZXdJbnN0YW5jZSgpO1xuICAgICAgICBhc3luY0lucy5yb290U2NvcGUubWVtb3J5ID0gdGhpcy5yb290U2NvcGUubWVtb3J5O1xuICAgICAgICAvLy8gPz8/P1xuICAgICAgICBhc3luY0lucy5fZnVuY3Rpb25zUmVnaXN0cnkgPSB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeTtcbiAgICAgICAgcmV0dXJuIGFzeW5jSW5zO1xuICAgIH07XG5cbn1cblxuZXhwb3J0IGNsYXNzIE1FdmVudG9Bc3luYyBleHRlbmRzIE1FdmVudG8ge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0Um9vdEFTVChub2RlOiBSb290QVNUKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBub2RlLmJvZHk7XG4gICAgICAgIGxldCBsYXN0O1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgbGlzdCkge1xuICAgICAgICAgICAgbGFzdCA9IGF3YWl0IHRoaXMudmlzaXQobik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3Q7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEJsb2NrU3RhdGVtZW50QVNUKG5vZGU6IEJsb2NrU3RhdGVtZW50QVNUKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIHRoaXMucHVzaFNjb3BlKFwiQmxvY2tcIik7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gYXdhaXQgdGhpcy52aXNpdChuKTtcbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgTG9vcENvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgICAgIHJldHVybiBsYXN0O1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRJZGVudGlmaWVyQVNUKG5vZGU6IEFTVCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGlkID0gKG5vZGUgYXMgSWRlbnRpZmllckFTVCkudmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc29sdmUoaWQpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRMaXRlcmFsQVNUKG5vZGU6IExpdGVyYWxBU1QpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG5vZGUudmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0QXNzaWdubWVudEV4cHJlc3Npb25BU1Qobm9kZTogQXNzaWdubWVudEV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgY29uc3QgaWQ6IEFTVCA9IG5vZGUuaWRlbnRpZmllcjtcblxuICAgICAgICBjb25zdCBpbml0OiBBU1QgPSBub2RlLmluaXQ7XG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gbnVsbDtcbiAgICAgICAgaWYgKGlkIGluc3RhbmNlb2YgSW5kZXhBY2Nlc3NvckFTVCkge1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGF3YWl0IHRoaXMudmlzaXQoaWQub3duZXIpO1xuICAgICAgICAgICAgdmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuaW5pdCk7XG4gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBhd2FpdCB0aGlzLnZpc2l0KGlkLmtleSk7XG4gICAgICAgICAgICB0aGlzLmFzc2lnblByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChpZCBpbnN0YW5jZW9mIElkZW50aWZpZXJBU1QpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChpbml0KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVmFyaWFibGUoaWQudmFsdWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRBU1Qobm9kZTogRXhwcmVzc2lvblN0YXRlbWVudEFTVCkge1xuICAgICAgICBjb25zdCBleHByID0gbm9kZS5leHByZXNzaW9uO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy52aXNpdChleHByKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0Q2FsbEV4cHJlc3Npb25BU1Qobm9kZTogQ2FsbEV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBub2RlLmFyZ3VtZW50cztcbiAgICAgICAgY29uc3QgY2FsbGVlTmFtZSA9IGNhbGxlZS52YWx1ZTtcbiAgICAgICAgY29uc3QgZm4gPSB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtjYWxsZWVOYW1lXTtcbiAgICAgICAgY29uc3QgYXJnVmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoYXJncy5tYXAoKGUpID0+IHRoaXMudmlzaXQoZSkpKTtcbiAgICAgICAgLy8gcHJpbnQoXCJhcmdWYWx1ZXM6OlwiLCBhcmdWYWx1ZXMpXG4gICAgICAgIHJldHVybiBhd2FpdCBmbj8uKGFyZ1ZhbHVlcywgdGhpcyk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEJpbmFyeUV4cHJlc3Npb25BU1Qobm9kZTogQmluYXJ5RXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBsZWZ0ID0gbm9kZS5sZWZ0O1xuICAgICAgICBjb25zdCByaWdodCA9IG5vZGUucmlnaHQ7XG4gICAgICAgIGNvbnN0IG9wID0gbm9kZS5vcGVyYXRpb247XG4gICAgICAgIGNvbnN0IGxWYWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQobGVmdCk7XG4gICAgICAgIGNvbnN0IHJWYWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQocmlnaHQpO1xuICAgICAgICBzd2l0Y2ggKG9wLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnBsdXM6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICsgclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7bFZhbHVlfSR7clZhbHVlfWA7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5taW51czpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgLSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyhsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAqIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNTdHJpbmcoclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gclZhbHVlICogbFZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm11bHQ6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICogclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmRpdjpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyVmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGl2aXNpb24gYnkgMFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIC8gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm1vZDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgJSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZ3JlYXQ6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID4gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmdyZWF0RXE6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID49IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sZXNzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA8IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sZXNzRXE6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIDw9IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5lcWVxOlxuICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPT09IHJWYWx1ZTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm5vdEVxOlxuICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgIT09IHJWYWx1ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0VW5hcnlFeHByZXNzaW9uQVNUKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBhcmcgPSBub2RlLmFyZ3VtZW50O1xuICAgICAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuICAgICAgICBjb25zdCBhcmdWYWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQoYXJnKTtcbiAgICAgICAgaWYgKG9wLnR5cGUgPT09IFRva2VuVHlwZS5ub3QpIHtcbiAgICAgICAgICAgIHJldHVybiBfYm9vbFZhbHVlKGFyZ1ZhbHVlKSA9PT0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtKGFyZ1ZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wLnR5cGUgPT09IFRva2VuVHlwZS5wbHVzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLm1pbnVzKSB7XG4gICAgICAgICAgICByZXR1cm4gLWFyZ1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgIGFzeW5jIHZpc2l0SWZTdGF0ZW1lbnRBU1Qobm9kZTogSWZTdGF0ZW1lbnRBU1QpIHtcbiAgICAgICAgY29uc3QgdGVzdE5vZGU6IEFTVCA9IG5vZGUudGVzdDtcbiAgICAgICAgY29uc3QgdGVzdCA9IGF3YWl0IHRoaXMudmlzaXQodGVzdE5vZGUpO1xuICAgICAgICBjb25zdCB0ZXN0Qm9vbFZhbHVlID0gX2Jvb2xWYWx1ZSh0ZXN0KTtcblxuICAgICAgICBpZiAodGVzdEJvb2xWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQobm9kZS5jb25zZXF1ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuYWx0ZXJuYXRlISk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0TG9naWNhbEV4cHJlc3Npb25BU1Qobm9kZTogTG9naWNhbEV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgY29uc3QgbGVmdE5vZGUgPSBub2RlLmxlZnQ7XG4gICAgICAgIGxldCB0ZXN0ID0gYXdhaXQgdGhpcy52aXNpdChsZWZ0Tm9kZSk7XG4gICAgICAgIGNvbnN0IHRlc3RCb29sVmFsdWUgPSBfYm9vbFZhbHVlKHRlc3QpO1xuICAgICAgICBpZiAobm9kZS5vcGVyYXRvci50eXBlID09PSBUb2tlblR5cGUuYW5kKSB7XG4gICAgICAgICAgICBpZiAoIXRlc3RCb29sVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShhd2FpdCB0aGlzLnZpc2l0KG5vZGUucmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcGVyYXRvci50eXBlID09PSBUb2tlblR5cGUub3IpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXN0ID0gYXdhaXQgdGhpcy52aXNpdChub2RlLnJpZ2h0KTtcbiAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0SW5kZXhBY2Nlc3NvckFTVChub2RlOiBJbmRleEFjY2Vzc29yQVNUKSB7XG4gICAgICAgIGNvbnN0IG93bmVyTm9kZSA9IChub2RlIGFzIEluZGV4QWNjZXNzb3JBU1QpLm93bmVyO1xuICAgICAgICBjb25zdCBvd25lciA9IGF3YWl0IHRoaXMudmlzaXQob3duZXJOb2RlKTtcbiAgICAgICAgaWYgKG93bmVyID09PSBudWxsIHx8IG93bmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3duZXIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUua2V5KTtcbiAgICAgICAgICAgIHJldHVybiBvd25lcltrZXldO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob3duZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUua2V5KTtcbiAgICAgICAgICAgIHJldHVybiBpc051bShrZXkpICYmIG93bmVyLmxlbmd0aCA8IGtleSAmJiBrZXkgPj0gMCA/IG93bmVyW2tleV0gOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRPYmplY3RQcm9wZXJ0eShub2RlOiBBU1QpIHsgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0T2JqZWN0RXhwcmVzc2lvbihhc3Q6IEFTVCkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZTogYW55ID0ge307XG4gICAgICAgIGNvbnN0IG5vZGUgPSBhc3QgYXMgT2JqZWN0RXhwcmVzc2lvbjtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBub2RlLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChpdCBpbnN0YW5jZW9mIE9iamVjdFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGF3YWl0IHRoaXMudmlzaXQoaXQua2V5KTtcbiAgICAgICAgICAgICAgICBrZXkgPSBpc1N0cmluZyhrZXkpID8ga2V5IDoga2V5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XSA9IGF3YWl0IHRoaXMudmlzaXQoaXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRBcnJheUV4cHJlc3Npb24oYXN0OiBBU1QpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGFzdCBhcyBBcnJheUV4cHJlc3Npb247XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBhd2FpdCB0aGlzLnJlc29sdmVBcmd1bWVudHNBc3luYyhub2RlLmVsZW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdFdoaWxlTG9vcFN0YXRlbWVudChub2RlOiBXaGlsZUxvb3BTdGF0ZW1lbnQpIHtcbiAgICAgICAgdGhpcy5sb2coYFdoaWxlTG9vcFN0YXRlbWVudCAke25vZGUudGVzdH0gJHtub2RlLmJvZHl9YClcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUgKF9ib29sVmFsdWUoYXdhaXQgdGhpcy52aXNpdChub2RlLnRlc3QpKSkge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBDb250aW51ZUJyYW5jaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRhaW5lcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRGb3JMb29wU3RhdGVtZW50KG5vZGU6IEZvckxvb3BTdGF0ZW1lbnQpIHtcbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbG9vcElkZW50aWZpZXIgPSBub2RlLmluaXQuaWRlbnRpZmllclxuICAgICAgICBpZiAoIShsb29wSWRlbnRpZmllciBpbnN0YW5jZW9mIElkZW50aWZpZXJBU1QpKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlkZW50aWZlciBmb3VuZFwiKVxuICAgICAgICB0aGlzLnB1c2hTY29wZShcIkZvckxvb3BTdGF0ZW1lbnRcIik7XG4gICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5pbml0LmluaXQpXG4gICAgICAgIHRoaXMuY2hhbmdlVmFyaWFibGUobG9vcElkZW50aWZpZXIudmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIHJldGFpbmVyPy5wdXNoKGluaXRpYWxWYWx1ZSlcbiAgICAgICAgY29uc3QgdGVzdCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS50ZXN0KVxuICAgICAgICAgICAgaWYgKGlzTnVtKHJldCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmRpcmVjdGlvbi50eXBlID09PSBUb2tlblR5cGUudXAgPyByZXQgPj0gdG1wIDogcmV0IDw9IHRtcFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUocmV0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS51cGRhdGUpO1xuICAgICAgICAgICAgaWYgKGlzTnVtKHVwZGF0ZVZhbHVlKSkge1xuICAgICAgICAgICAgICAgIC8vIGF1dG8gaGFuZGxlXG4gICAgICAgICAgICAgICAgY29uc3QgdG1wID0gdGhpcy5yZXNvbHZlKGxvb3BJZGVudGlmaWVyLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtKHRtcCkpIHRocm93IEVycm9yKFwiQ2FudCB1cGRhdGUgdmFsdWVcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYXJpYWJsZShsb29wSWRlbnRpZmllci52YWx1ZSwgbm9kZS5kaXJlY3Rpb24udHlwZSA9PT0gVG9rZW5UeXBlLnVwID8gdG1wICsgdXBkYXRlVmFsdWUgOiB0bXAgLSB1cGRhdGVWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiVXBkYXRlIHZhbHVlIGNhbnQgYmUgbm9uIG51bWJlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoYXdhaXQgdGVzdCgpKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuYm9keSlcbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBCcmVha0JyYW5jaCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIENvbnRpbnVlQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgICAgICAvLyB1cGRhdGVcbiAgICAgICAgICAgIGF3YWl0IHVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgcmV0dXJuIHJldGFpbmVyID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0Rm9yT2ZTdGF0ZW1lbnQobm9kZTogRm9yT2ZTdGF0ZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5jb2xsZWN0aW9uKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbGxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkNhbiBpdGVyYXRlIG5vbiBhcnJheSBvYmplY3RcIilcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXRhaW5lcjogYW55W10gfCB1bmRlZmluZWQgPSBub2RlLnJldGFpbiA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnB1c2hTY29wZShcIkZvck9mU3RhdGVtZW50XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RlY2xhcmVGb3JJZGVudGlmaWVyKG5vZGUuaWRlbnRpZmllciwgaXQpXG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuYm9keSlcbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBCcmVha0JyYW5jaCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIENvbnRpbnVlQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gcmV0YWluZXI7XG4gICAgfVxuXG5cbiAgICBhc3luYyByZXNvbHZlQXJndW1lbnRzQXN5bmMoYXJnczogQVNUW10pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChhcmdzLm1hcChhc3luYyAoaXQ6IEFTVCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQoaXQpO1xuICAgICAgICB9KSk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZywgZm46IE1FdmVudG9GQmluZGluZykge1xuICAgICAgICB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtpZF0gPSBmbjtcbiAgICB9XG5cbiAgICBvdmVycmlkZSB1bnJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZykge1xuICAgICAgICBkZWxldGUgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbaWRdO1xuICAgIH1cbiAgICBvdmVycmlkZSAgYXN5bmMgZXhlY3V0ZShzb3VyY2U6IHN0cmluZywgY2FjaGUgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IE1FdmVudG8uY29tcGlsZShzb3VyY2UsIGNhY2hlKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgb3ZlcnJpZGUgYXN5bmMgcnVuKHNvdXJjZTogc3RyaW5nLCBjYWNoZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG1ldmVudG8gPSBuZXcgTUV2ZW50b0FzeW5jKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IE1FdmVudG8uY29tcGlsZShzb3VyY2UsIGNhY2hlKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG1ldmVudG8udmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgb3ZlcnJpZGUgbmV3SW5zdGFuY2UoKTogTUV2ZW50b0FzeW5jIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNRXZlbnRvQXN5bmMoKTtcbiAgICB9XG5cblxuICAgIG92ZXJyaWRlIGNsb25lKCk6IE1FdmVudG9Bc3luYyB7XG4gICAgICAgIHZhciByZXQgPSBuZXcgTUV2ZW50b0FzeW5jKCk7XG4gICAgICAgIHJldC5fZnVuY3Rpb25zUmVnaXN0cnkgPSB7IC4uLnRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5IH07XG4gICAgICAgIHJldC5yb290U2NvcGUubWVtb3J5ID0geyAuLi50aGlzLnJvb3RTY29wZS5tZW1vcnkgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG59XG4iXX0=
|
|
2151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV2ZW50by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldmVudG8vc3JjL2xpYi9tZXZlbnRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFNBQVMsS0FBSyxDQUFDLEtBQVksRUFBRSxRQUFvQjtJQUM3QyxNQUFNLElBQUksR0FDTixpQkFBaUIsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxRQUFRLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ3RJLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFDRCxTQUFTLEtBQUssQ0FBQyxLQUFVO0lBQ3JCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxTQUFTLFNBQVMsQ0FBQyxLQUFVO0lBQ3pCLE9BQU8sT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQ3RDLENBQUM7QUFDRCxTQUFTLFFBQVEsQ0FBQyxLQUFVO0lBQ3hCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ3JDLENBQUM7QUFDRCxTQUFTLFVBQVUsQ0FBQyxJQUFTO0lBQ3pCLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSTtRQUNqQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkQsQ0FBQztBQUFB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QU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsTUFBTSxDQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBYyxFQUFFLEtBQUssR0FBRyxLQUFLO1FBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUMsT0FBTyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sQ0FBVSxXQUFXO1FBQ3ZCLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBR1EsS0FBSztRQUNWLElBQUksR0FBRyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0IsR0FBRyxDQUFDLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN4RCxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5mdW5jdGlvbiBlcnJvcih0b2tlbjogVG9rZW4sIGV4cGVjdGVkPzogVG9rZW5UeXBlKSB7XG4gICAgY29uc3QgdGV4dCA9XG4gICAgICAgIGBJbnZhbGlkIHRva2VuICR7dG9rZW4udHlwZX1bJHt0b2tlbi52YWx1ZX1dIGF0ICR7dG9rZW4ubGluZX0sICR7dG9rZW4uY29sfSAke2V4cGVjdGVkID8gYDogZXhwZWN0aW5nICR7ZXhwZWN0ZWR9IHRva2VuYCA6ICcnfVxcbmA7XG4gICAgdGhyb3cgRXJyb3IodGV4dCk7XG59XG5mdW5jdGlvbiBpc051bSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbn1cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbn1cbmZ1bmN0aW9uIF9ib29sVmFsdWUodGVzdDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0ZXN0ID09PSBudWxsIHx8XG4gICAgICAgIChpc051bSh0ZXN0KSAmJiB0ZXN0ID09PSAwKSB8fFxuICAgICAgICAoaXNTdHJpbmcodGVzdCkgJiYgdGVzdC5sZW5ndGggPT09IDApIHx8XG4gICAgICAgIChpc0Jvb2xlYW4odGVzdCkgJiYgIXRlc3QpKSA/IGZhbHNlIDogdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIGhhc2hDb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgbGV0IGhhc2ggPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgY2hyO1xuICAgIGlmIChzdHIubGVuZ3RoID09PSAwKSByZXR1cm4gaGFzaDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNociA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBjaHI7XG4gICAgICAgIGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG4gICAgfVxuICAgIHJldHVybiBoYXNoO1xufTtcbmV4cG9ydCBjbGFzcyBUb2tlblR5cGUge1xuICAgIHN0YXRpYyBpZCA9IDA7XG4gICAgc3RhdGljIGNvbW1hID0gMTtcbiAgICBzdGF0aWMgc2VtaSA9IDI7XG4gICAgc3RhdGljIG51bWJlckNvbnN0ID0gMztcbiAgICBzdGF0aWMgc3RyaW5nQ29uc3QgPSA0O1xuICAgIHN0YXRpYyBlcXVhbCA9IDU7XG4gICAgc3RhdGljIGxwYXJlbiA9IDZcbiAgICBzdGF0aWMgcnBhcmVuID0gNztcbiAgICBzdGF0aWMgZW9sID0gODtcbiAgICBzdGF0aWMgZW9mID0gOTtcbiAgICBzdGF0aWMgbGJyYWNlID0gMTA7XG4gICAgc3RhdGljIHJicmFjZSA9IDExO1xuICAgIHN0YXRpYyBsYnJhY2tldCA9IDEyO1xuICAgIHN0YXRpYyByYnJhY2tldCA9IDEzO1xuICAgIHN0YXRpYyBncmVhdCA9IDE0O1xuICAgIHN0YXRpYyBncmVhdEVxID0gMTU7XG4gICAgc3RhdGljIGxlc3MgPSAxNjtcbiAgICBzdGF0aWMgbGVzc0VxID0gMTc7XG4gICAgc3RhdGljIGVxZXEgPSAxODtcbiAgICBzdGF0aWMgSUYgPSAxOTtcbiAgICBzdGF0aWMgRUxTRSA9IDIwO1xuICAgIHN0YXRpYyBUUlVFID0gMjE7XG4gICAgc3RhdGljIEZBTFNFID0gMjI7XG4gICAgc3RhdGljIE5VTEwgPSAyMztcbiAgICBzdGF0aWMgbm90ID0gMjQ7XG4gICAgc3RhdGljIG5vdEVxID0gMjU7XG4gICAgc3RhdGljIGFuZCA9IDI2O1xuICAgIHN0YXRpYyBvciA9IDI3O1xuICAgIHN0YXRpYyBwbHVzID0gMjg7XG4gICAgc3RhdGljIG1pbnVzID0gMjk7XG4gICAgc3RhdGljIGRpdiA9IDMwO1xuICAgIHN0YXRpYyBtdWx0ID0gMzE7XG4gICAgc3RhdGljIG1vZCA9IDMyO1xuICAgIHN0YXRpYyBpbnZhbGlkID0gMzM7XG4gICAgc3RhdGljIGNvbG9uID0gMzQ7XG4gICAgc3RhdGljIFdISUxFX1RJTEwgPSAzNTtcbiAgICBzdGF0aWMgRk9SX0xPT1AgPSAzNjtcbiAgICBzdGF0aWMgdXAgPSAzNztcbiAgICBzdGF0aWMgZG93biA9IDM4O1xuICAgIHN0YXRpYyB3aXRoID0gMzk7XG4gICAgc3RhdGljIGluID0gNDA7XG4gICAgc3RhdGljIFRJTEwgPSA0MTtcbiAgICBzdGF0aWMgQlJFQUsgPSA0MjtcbiAgICBzdGF0aWMgQ09OVElOVUUgPSA0MztcbiAgICBzdGF0aWMgbnVsbGl0eSA9IDQ0O1xuICAgIHN0YXRpYyBSRVRVUk4gPSA0NTtcbn1cblxuZXhwb3J0IGNsYXNzIFRva2VuIHtcbiAgICB0eXBlOiBudW1iZXI7XG4gICAgdmFsdWU6IGFueTtcbiAgICBsaW5lPzogbnVtYmVyO1xuICAgIGNvbD86IG51bWJlcjtcbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBudW1iZXIsIHZhbHVlOiBhbnksIGxpbmU6IG51bWJlciA9IDEsIGNvbDogbnVtYmVyID0gMSkge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMubGluZSA9IGxpbmU7XG4gICAgICAgIHRoaXMuY29sID0gY29sO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbSh0eXBlOiBudW1iZXIsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUb2tlbih0eXBlLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGBbJHt0aGlzLnR5cGUudG9TdHJpbmcoKX0sICR7dGhpcy52YWx1ZX1dYDtcbiAgICB9XG59XG5cblxuY2xhc3MgQ2hhcnMge1xuICAgIHN0YXRpYyBlcXVhbCA9ICc9Jy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBjb21tYSA9ICcsJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzZW1pQ29sb24gPSAnOycuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbHBhcmVuID0gJygnLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHJwYXJlbiA9ICcpJy5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBiYWNrc2xhc2ggPSAnXFxcXCcuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgcXVvdGUgPSAnXCInLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHNxdW90ZSA9IFwiJ1wiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHBsdXMgPSBcIitcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBtaW51cyA9IFwiLVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHN0YXIgPSBcIipcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBzbGFzaCA9IFwiL1wiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHBlcmNlbnQgPSBcIiVcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBsYnJhY2UgPSBcIntcIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyByYnJhY2UgPSBcIn1cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBsYnJhY2tldCA9IFwiW1wiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIHJicmFja2V0ID0gXCJdXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgbm90ID0gXCIhXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgZ3JlYXQgPSBcIj5cIi5jaGFyQ29kZUF0KDApO1xuICAgIHN0YXRpYyBsZXNzID0gXCI8XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgYW5kID0gXCImXCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgcGlwZSA9IFwifFwiLmNoYXJDb2RlQXQoMCk7XG4gICAgc3RhdGljIGNvbG9uID0gXCI6XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgcXVlc3Rpb25NYXJrID0gXCI/XCIuY2hhckNvZGVBdCgwKTtcbiAgICBzdGF0aWMgc2hlYmFuZyA9IFwiI1wiLmNoYXJDb2RlQXQoMCk7XG59XG5cbmV4cG9ydCBjbGFzcyBMZXhlckRpY3Rpb25hcnkge1xuICAgIGxhbmc6IHN0cmluZztcbiAgICBrZXl3b3JkczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIGNvbnN0cnVjdG9yKGxhbmc6IHN0cmluZywga2V5d29yZHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICAgICAgdGhpcy5rZXl3b3JkcyA9IHsgLi4ua2V5d29yZHMgfTtcbiAgICAgICAgdGhpcy5sYW5nID0gbGFuZztcbiAgICB9XG59XG5cbi8qKlxuICogTGV4aW5nID0+IFBhcnNpbmcgPT09PiBBU1QgPT09PiBXYWxraW5nXG4gKi9cbi8qKlxuICogTGV4ZXJcbiAqL1xuY2xhc3MgTGV4ZXIge1xuICAgIHN0YXRpYyBfZGVmYXVsdExhbmd1YWdlID0gbmV3IExleGVyRGljdGlvbmFyeShcImVuXCIsIHtcbiAgICAgICAgXCJpZlwiOiBcImlmXCIsXG4gICAgICAgIFwiZWxzZVwiOiBcImVsc2VcIixcbiAgICAgICAgXCJ0cnVlXCI6IFwidHJ1ZVwiLFxuICAgICAgICBcImZhbHNlXCI6IFwiZmFsc2VcIixcbiAgICAgICAgXCJudWxsXCI6IFwibnVsbFwiLFxuICAgICAgICBcIndoaWxlXCI6IFwid2hpbGVcIixcbiAgICAgICAgXCJmb3JcIjogXCJmb3JcIixcbiAgICAgICAgXCJ3aXRoXCI6IFwid2l0aFwiLFxuICAgICAgICBcInVwXCI6IFwidXBcIixcbiAgICAgICAgXCJkb3duXCI6IFwiZG93blwiLFxuICAgICAgICBcInRpbGxcIjogXCJ0aWxsXCIsXG4gICAgICAgIFwiaW5cIjogXCJpblwiLFxuICAgICAgICBcImJyZWFrXCI6IFwiYnJlYWtcIixcbiAgICAgICAgXCJjb250aW51ZVwiOiBcImNvbnRpbnVlXCIsXG4gICAgICAgIFwicmV0dXJuXCI6IFwicmV0dXJuXCIsXG4gICAgfSk7XG4gICAgc3RhdGljIGxhbmd1YWdlczogTGV4ZXJEaWN0aW9uYXJ5W10gPSBbXG4gICAgICAgIExleGVyLl9kZWZhdWx0TGFuZ3VhZ2UsXG4gICAgICAgIG5ldyBMZXhlckRpY3Rpb25hcnkoXCJmclwiLCB7XG4gICAgICAgICAgICBcInNpXCI6IFwiaWZcIixcbiAgICAgICAgICAgIFwic2lub25cIjogXCJlbHNlXCIsXG4gICAgICAgICAgICBcInZyYWlcIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICBcImZhdXhcIjogXCJmYWxzZVwiLFxuICAgICAgICAgICAgXCJudWxcIjogXCJudWxsXCIsXG4gICAgICAgICAgICBcInRhbnF1ZVwiOiBcIndoaWxlXCIsXG4gICAgICAgICAgICBcInBvdXJcIjogXCJmb3JcIixcbiAgICAgICAgICAgIFwiYXZlY1wiOiBcIndpdGhcIixcbiAgICAgICAgICAgIFwibW9udFwiOiBcInVwXCIsXG4gICAgICAgICAgICBcImRlc2NcIjogXCJkb3duXCIsXG4gICAgICAgICAgICBcImp1c3F1YVwiOiBcInRpbGxcIixcbiAgICAgICAgICAgIFwiZGFuc1wiOiBcImluXCIsXG4gICAgICAgICAgICBcImNvdXBlclwiOiBcImJyZWFrXCIsXG4gICAgICAgICAgICBcImNvbnRpbnVlclwiOiBcImNvbnRpbnVlXCIsXG4gICAgICAgICAgICBcInJldHVybmVyXCI6IFwicmV0dXJuXCIsXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgTGV4ZXJEaWN0aW9uYXJ5KFwiYm1cIiwge1xuICAgICAgICAgICAgXCJuaWlcIjogXCJpZlwiLFxuICAgICAgICAgICAgXCJub3RlXCI6IFwiZWxzZVwiLFxuICAgICAgICAgICAgXCJ0aWVuXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgXCJnYWxvblwiOiBcImZhbHNlXCIsXG4gICAgICAgICAgICBcImdhbnNhblwiOiBcIm51bGxcIixcbiAgICAgICAgICAgIFwiZm9vXCI6IFwid2hpbGVcIixcbiAgICAgICAgICAgIFwic2VnaW5rYVwiOiBcImZvclwiLFxuICAgICAgICAgICAgXCJuaWluXCI6IFwid2l0aFwiLFxuICAgICAgICAgICAgXCJrYXlcIjogXCJ1cFwiLFxuICAgICAgICAgICAgXCJrYWpcIjogXCJkb3duXCIsXG4gICAgICAgICAgICBcImthdGFcIjogXCJ0aWxsXCIsXG4gICAgICAgICAgICBcImtvbm9cIjogXCJpblwiLFxuICAgICAgICAgICAgXCJ0aWtlXCI6IFwiYnJlYWtcIixcbiAgICAgICAgICAgIFwiaXBhblwiOiBcImNvbnRpbnVlXCIsXG4gICAgICAgICAgICBcInNlZ2luXCI6IFwicmV0dXJuXCIsXG4gICAgICAgIH0pLFxuICAgIF07XG4gICAgc3RhdGljIFJFU0VSVkVEOiB7IFtrZXk6IHN0cmluZ106IFRva2VuIH0gPSB7XG4gICAgICAgIFwiaWZcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuSUYsIFwiaWZcIiksXG4gICAgICAgIFwiZWxzZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5FTFNFLCBcImVsc2VcIiksXG4gICAgICAgIFwidHJ1ZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5UUlVFLCB0cnVlKSxcbiAgICAgICAgXCJmYWxzZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5GQUxTRSwgZmFsc2UpLFxuICAgICAgICBcIm51bGxcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuTlVMTCwgbnVsbCksXG4gICAgICAgIFwiZm9yXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkZPUl9MT09QLCBcImZvclwiKSxcbiAgICAgICAgXCJ3aGlsZVwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5XSElMRV9USUxMLCBcIndoaWxlXCIpLFxuICAgICAgICBcIndpdGhcIjogVG9rZW4uZnJvbShUb2tlblR5cGUud2l0aCwgXCJ3aXRoXCIpLFxuICAgICAgICBcInVwXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLnVwLCBcInVwXCIpLFxuICAgICAgICBcImRvd25cIjogVG9rZW4uZnJvbShUb2tlblR5cGUuZG93biwgXCJkb3duXCIpLFxuICAgICAgICBcInRpbGxcIjogVG9rZW4uZnJvbShUb2tlblR5cGUuVElMTCwgXCJ0aWxsXCIpLFxuICAgICAgICBcImluXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLmluLCBcImluXCIpLFxuICAgICAgICBcImJyZWFrXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkJSRUFLLCBcImJyZWFrXCIpLFxuICAgICAgICBcImNvbnRpbnVlXCI6IFRva2VuLmZyb20oVG9rZW5UeXBlLkNPTlRJTlVFLCBcImNvbnRpbnVlXCIpLFxuICAgICAgICBcInJldHVyblwiOiBUb2tlbi5mcm9tKFRva2VuVHlwZS5SRVRVUk4sIFwicmV0dXJuXCIpLFxuICAgIH07XG4gICAgX2xhbmd1YWdlPzogTGV4ZXJEaWN0aW9uYXJ5O1xuICAgIF9zb3VyY2UhOiBzdHJpbmc7XG4gICAgX3Bvc2l0aW9uID0gMDtcbiAgICBfbGluZSA9IDE7XG4gICAgX2NvbCA9IDE7XG4gICAgX2N1cnJlbnRDaGFyID0gLTE7XG4gICAgZ2V0IHNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgICB9XG4gICAgY29uc3RydWN0b3Ioc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IHRoaXMuX3NvdXJjZVt0aGlzLl9wb3NpdGlvbl0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUxhbmd1YWdlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3Jlc29sdmVMYW5ndWFnZSgpIHtcbiAgICAgICAgbGV0IHRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5sZXNzKSB7XG4gICAgICAgICAgICAvLyBsYW5ndWFnZSBzZXR0aW5nXG4gICAgICAgICAgICBjb25zdCBpZFRva2VuID0gdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgICAgICAgIGlmIChpZFRva2VuLnR5cGUgIT09IFRva2VuVHlwZS5pZCkge1xuICAgICAgICAgICAgICAgIGVycm9yKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxhbmcgPSBpZFRva2VuLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLl9sYW5ndWFnZSA9IExleGVyLmxhbmd1YWdlcy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LmxhbmcgPT09IGxhbmcpID8/IExleGVyLl9kZWZhdWx0TGFuZ3VhZ2U7XG4gICAgICAgICAgICB0b2tlbiA9IHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW5UeXBlLmdyZWF0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3IodG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGFuZ3VhZ2UgPSBMZXhlci5fZGVmYXVsdExhbmd1YWdlO1xuICAgICAgICAgICAgLy8gcmVzZXQgcmVhZGluZ1xuICAgICAgICAgICAgdGhpcy5fcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSB0aGlzLl9zb3VyY2VbdGhpcy5fcG9zaXRpb25dLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZHZhbmNlKCkge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbisrO1xuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb24gPj0gdGhpcy5fc291cmNlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXIgPSAtMTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jdXJyZW50Q2hhciA9IHRoaXMuX3NvdXJjZVt0aGlzLl9wb3NpdGlvbl0uY2hhckNvZGVBdCgwKTtcbiAgICAgICAgdGhpcy5fY29sKys7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGljaygpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb24gKyAxID49IHRoaXMuX3NvdXJjZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlW3RoaXMuX3Bvc2l0aW9uICsgMV0uY2hhckNvZGVBdCgwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0lkKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoY29kZSA8IDQ4KSB7XG4gICAgICAgICAgICByZXR1cm4gY29kZSA9PT0gMzY7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCA1OCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUgPCA2NSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlID09PSA5NTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDEyMykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzSWRTdGFydChjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGNvZGUgPCA2NSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvZGUgPT09IDM2O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlIDwgOTcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2RlID09PSA5NTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA8IDEyMykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lkKCk6IFRva2VuIHtcbiAgICAgICAgbGV0IHJldCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGxhc3RDID0gdGhpcy5fY29sO1xuICAgICAgICBjb25zdCBsYXN0UCA9IHRoaXMuX3Bvc2l0aW9uO1xuICAgICAgICBjb25zdCBsaW5lID0gdGhpcy5fbGluZTtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2lzSWQodGhpcy5fY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZElkID0gdGhpcy5fbGFuZ3VhZ2VcbiAgICAgICAgICAgID8gKHRoaXMuX2xhbmd1YWdlLmtleXdvcmRzW3JldF0pID8/IHJldFxuICAgICAgICAgICAgOiByZXQ7XG4gICAgICAgIHJldHVybiBMZXhlci5SRVNFUlZFRFt0cmFuc2xhdGVkSWRdID8/IG5ldyBUb2tlbihUb2tlblR5cGUuaWQsIHJldCwgbGluZSwgbGFzdEMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzTGluZUVuZChjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGMgPT09IDEwIHx8XG4gICAgICAgICAgICBjID09PSAxMyB8fFxuICAgICAgICAgICAgWydcXG4nLCAnXFxyJywgJ1xcdTIwMjgnLCAnXFx1MjAyOSddLmluY2x1ZGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzV2hpdGVTcGFjZShjOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFsnICcsICdcXHQnXS5pbmNsdWRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0RpZ2l0KGM6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxuICAgICAgICByZXR1cm4gYyA+IDAgJiYgKGMgXiAweDMwKSA8PSA5O1xuICAgIH1cbiAgICBwcml2YXRlIF9za2lwV2hpdGVTcGFjZSgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuX2lzV2hpdGVTcGFjZSh0aGlzLl9jdXJyZW50Q2hhcikgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX251bWJlcigpOiBUb2tlbiB7XG4gICAgICAgIGxldCByZXQgPSBcIlwiO1xuICAgICAgICBjb25zdCBsYXN0QyA9IHRoaXMuX2NvbDtcbiAgICAgICAgY29uc3QgbGFzdFAgPSB0aGlzLl9wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgbGluZSA9IHRoaXMuX2xpbmU7XG4gICAgICAgIGNvbnN0IGZpcnN0ID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgY29uc3QgYmMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgbGV0IGJhc2UgPSAxMDtcbiAgICAgICAgaWYgKGZpcnN0ID09PSAnMCcgJiYgWydiJywgJ0InLCAneCcsICdYJywgJ28nLCAnTyddLmluY2x1ZGVzKGJjKSkge1xuICAgICAgICAgICAgLy8gbG9vayBhaGVhZCB0byBzZWUgdGhhdCB0aGUgbnVtYmVyIGlzIHRhZ2dlZFxuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgc3dpdGNoIChiYy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnYic6XG4gICAgICAgICAgICAgICAgICAgIGJhc2UgPSAyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwib1wiOlxuICAgICAgICAgICAgICAgICAgICBiYXNlID0gODtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDE2O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBiYXNlID0gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXQgKz0gZmlyc3Q7XG4gICAgICAgICAgICBiYXNlID0gMTA7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMuX2lzRGlnaXQodGhpcy5fY3VycmVudENoYXIpIHx8XG4gICAgICAgICAgICAoYmFzZSA9PT0gMTYgJiZcbiAgICAgICAgICAgICAgICBbJ0EnLCAnYScsICdCJywgJ2InLCAnQycsICdjJywgJ0QnLCAnZCcsICdFJywgJ2UnLCAnRicsICdmJ11cbiAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5fY3VycmVudENoYXIpKSkpIHtcbiAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcikgPT09ICcuJyAmJiB0aGlzLl9pc0RpZ2l0KHRoaXMuX3BpY2soKSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChiYXNlICE9PSAxMCkge1xuICAgICAgICAgICAgICAgIGVycm9yKG5ldyBUb2tlbihUb2tlblR5cGUuaWQsIGJjLCBsaW5lLCBsYXN0UCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZmxvYXRpbmcgbnVtYmVyXG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5faXNEaWdpdCh0aGlzLl9jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubnVtYmVyQ29uc3QsIHBhcnNlRmxvYXQocmV0KSwgbGluZSwgbGFzdEMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oXG4gICAgICAgICAgICBUb2tlblR5cGUubnVtYmVyQ29uc3QsIHBhcnNlSW50KHJldCwgYmFzZSksIGxpbmUsIGxhc3RDKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9saXRlcmFsU3RyaW5nKHN0YXJ0Q2hhcjogbnVtYmVyKTogVG9rZW4ge1xuICAgICAgICBsZXQgcmV0ID0gXCJcIjtcbiAgICAgICAgbGV0IGxhc3RDaGFyID0gLTE7XG4gICAgICAgIGNvbnN0IGxhc3RQID0gdGhpcy5fcG9zaXRpb247XG4gICAgICAgIGNvbnN0IGxhc3RDID0gdGhpcy5fY29sO1xuICAgICAgICBjb25zdCBsYXN0TCA9IHRoaXMuX2xpbmU7XG4gICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50Q2hhciAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX3BpY2soKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmJhY2tzbGFzaCkge1xuICAgICAgICAgICAgICAgIC8vIHNjYXBlIGNoYXJcbiAgICAgICAgICAgICAgICBpZiAoW1xuICAgICAgICAgICAgICAgICAgICBzdGFydENoYXIsXG4gICAgICAgICAgICAgICAgICAgICdcXFxcJyxcbiAgICAgICAgICAgICAgICAgICAgJzAnLFxuICAgICAgICAgICAgICAgICAgICAnYScsXG4gICAgICAgICAgICAgICAgICAgICdiJyxcbiAgICAgICAgICAgICAgICAgICAgJ2UnLFxuICAgICAgICAgICAgICAgICAgICAnZicsXG4gICAgICAgICAgICAgICAgICAgICduJyxcbiAgICAgICAgICAgICAgICAgICAgJ3InLFxuICAgICAgICAgICAgICAgICAgICAndCcsXG4gICAgICAgICAgICAgICAgICAgICd1JyxcbiAgICAgICAgICAgICAgICAgICAgJ1UnLFxuICAgICAgICAgICAgICAgICAgICAndicsXG4gICAgICAgICAgICAgICAgICAgICd4J1xuICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdENoYXIgPSB0aGlzLl9jdXJyZW50Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IHN0YXJ0Q2hhciAmJiBsYXN0Q2hhciAhPT0gQ2hhcnMuYmFja3NsYXNoKSB7XG4gICAgICAgICAgICAgICAgLy8gZW5kXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMuX2N1cnJlbnRDaGFyKTtcbiAgICAgICAgICAgIGxhc3RDaGFyID0gdGhpcy5fY3VycmVudENoYXI7XG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuc3RyaW5nQ29uc3QsIHJldCwgbGFzdEwsIGxhc3RDKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9za2lwTGluZUNvbW1lbnQoKSB7XG4gICAgICAgIHdoaWxlICghdGhpcy5faXNMaW5lRW5kKHRoaXMuX2N1cnJlbnRDaGFyKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX3NraXBDb21tZW50KCkge1xuICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudENoYXIgIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnN0YXIgJiYgdGhpcy5fcGljaygpID09PSBDaGFycy5zaGViYW5nKSB7XG4gICAgICAgICAgICAgICAgLy8gZW5kIG9mIGJsb2NrIGNvbW1lbnRcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGY9U1VCTUlUX0ZPUk0oeHh4KTtcbiAgICAvLyByID0gQ0FMTF9BUEkoQVBJX0lELCBmKTtcbiAgICAvLyBESVNQTEFZKFwiTVNHICNyXCIpXG4gICAgbmV4dFRva2VuKCk6IFRva2VuIHtcbiAgICAgICAgY29uc3QgbGFzdEwgPSB0aGlzLl9saW5lO1xuICAgICAgICBjb25zdCBsYXN0QyA9IHRoaXMuX2NvbDtcbiAgICAgICAgY29uc3QgbGFzdFAgPSB0aGlzLl9wb3NpdGlvbjtcblxuICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudENoYXIgIT09IC0xKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNMaW5lRW5kKHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xpbmUrKztcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2wgPSAxO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5lb2wsIFwiXFxuXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1doaXRlU3BhY2UodGhpcy5fY3VycmVudENoYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2tpcFdoaXRlU3BhY2UoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PSBDaGFycy5zaGViYW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuc3Rhcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBtdXRsaSBibG9jayBjb21tZW50XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2tpcENvbW1lbnQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9za2lwTGluZUNvbW1lbnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5faXNEaWdpdCh0aGlzLl9jdXJyZW50Q2hhcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5faXNJZFN0YXJ0KHRoaXMuX2N1cnJlbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5lcXVhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZXFlcSwgXCI9PVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5lcXVhbCwgXCI9XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmdyZWF0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5ncmVhdEVxLCBcIj49XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmdyZWF0LCBcIj5cIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMubGVzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubGVzc0VxLCBcIjw9XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmxlc3MsIFwiPFwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5zZW1pQ29sb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuc2VtaSwgXCI7XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmxwYXJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5scGFyZW4sIFwiKFwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5ycGFyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUucnBhcmVuLCBcIilcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuY29tbWEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuY29tbWEsIFwiLFwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5sYnJhY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubGJyYWNlLCBcIntcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucmJyYWNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnJicmFjZSwgXCJ9XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmxicmFja2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmxicmFja2V0LCBcIltcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucmJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUucmJyYWNrZXQsIFwiXVwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5wbHVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLnBsdXMsIFwiK1wiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5taW51cykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5taW51cywgXCItXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnNsYXNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLmRpdiwgXCIvXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnN0YXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubXVsdCwgXCIqXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnBlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUubW9kLCBcIiVcIiwgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuY29sb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuY29sb24sIFwiOlwiLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5ub3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5lcXVhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLm5vdEVxLCBcIiE9XCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVG9rZW4oVG9rZW5UeXBlLm5vdCwgXCIhXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLmFuZCAmJiB0aGlzLl9waWNrKCkgPT09IENoYXJzLmFuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuYW5kLCBcIiYmXCIsIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudENoYXIgPT09IENoYXJzLnBpcGUgJiYgdGhpcy5fcGljaygpID09PSBDaGFycy5waXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5vciwgJ3x8JywgbGFzdEwsIGxhc3RDKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMucXVlc3Rpb25NYXJrICYmIHRoaXMuX3BpY2soKSA9PT0gQ2hhcnMucXVlc3Rpb25NYXJrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRva2VuKFRva2VuVHlwZS5udWxsaXR5LCAnPz8nLCBsYXN0TCwgbGFzdEMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDaGFyID09PSBDaGFycy5xdW90ZSB8fCB0aGlzLl9jdXJyZW50Q2hhciA9PT0gQ2hhcnMuc3F1b3RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRDaGFyID0gdGhpcy5fY3VycmVudENoYXI7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLl9saXRlcmFsU3RyaW5nKHN0YXJ0Q2hhcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihcbiAgICAgICAgICAgICAgICBUb2tlblR5cGUuaW52YWxpZCwgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLl9jdXJyZW50Q2hhciksIGxhc3RMLCBsYXN0Qyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBUb2tlbihUb2tlblR5cGUuZW9mLCBcIlwiLCBsYXN0TCwgbGFzdEMpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIFBhcnNlclxuICovXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBU1Qge1xuICAgIGxpbmU/OiBudW1iZXI7XG4gICAgY29sPzogbnVtYmVyO1xuICAgIGNvbnN0cnVjdG9yKGxpbmU/OiBudW1iZXIsIGNvbD86IG51bWJlcikge1xuICAgICAgICB0aGlzLmxpbmUgPSBsaW5lO1xuICAgICAgICB0aGlzLmNvbCA9IGNvbDtcbiAgICB9XG4gICAgZHVtcCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50b1N0cmluZygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJvb3RBU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGJvZHk6IEFTVFtdO1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBjb25zdHJ1Y3Rvcihib2R5OiBBU1RbXSwgbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcigxLCAxKTtcbiAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZHVtcCgpOiBzdHJpbmcge1xuICAgICAgICBsZXQgYnVpbGRlciA9IGBNb2R1bGUgJHt0aGlzLm5hbWV9IFN0YXJ0IHtgO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIHRoaXMuYm9keSkge1xuICAgICAgICAgICAgYnVpbGRlciArPSBgJHtpdC5kdW1wKCl9XFxuYDtcbiAgICAgICAgfVxuICAgICAgICBidWlsZGVyICs9IFwifVwiO1xuICAgICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbG9ja1N0YXRlbWVudEFTVCBleHRlbmRzIEFTVCB7XG4gICAgYm9keTogQVNUW107XG4gICAgY29uc3RydWN0b3IoYm9keTogQVNUW10sIHRva2VuOiBUb2tlbikge1xuICAgICAgICBzdXBlcih0b2tlbi5saW5lLCB0b2tlbi5jb2wpO1xuICAgICAgICB0aGlzLmJvZHkgPSBib2R5O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHtcXG4ke3RoaXMuYm9keS5tYXAoKGUpID0+IGUudG9TdHJpbmcoKSkuam9pbihcIlxcblwiKX19YDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZGVudGlmaWVyQVNUIGV4dGVuZHMgQVNUIHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKHRva2VuOiBUb2tlbikge1xuICAgICAgICBzdXBlcih0b2tlbi5saW5lLCB0b2tlbi5jb2wpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdG9rZW4udmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGl0ZXJhbEFTVCBleHRlbmRzIEFTVCB7XG4gICAgdmFsdWU6IGFueTtcbiAgICByYXc6IHN0cmluZztcbiAgICBjb25zdHJ1Y3Rvcih0b2tlbjogVG9rZW4sIHJhdzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHRva2VuLmxpbmUsIHRva2VuLmNvbCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0b2tlbi52YWx1ZTtcbiAgICAgICAgdGhpcy5yYXcgPSByYXc7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXNzaWdubWVudEV4cHJlc3Npb25BU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGlkZW50aWZpZXI6IEFTVDtcbiAgICBpbml0OiBBU1Q7XG4gICAgY29uc3RydWN0b3IoaWRlbnRpZmllcjogQVNULCBpbml0OiBBU1QpIHtcbiAgICAgICAgc3VwZXIoaWRlbnRpZmllci5saW5lLCBpZGVudGlmaWVyLmNvbCk7XG4gICAgICAgIHRoaXMuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7XG4gICAgICAgIHRoaXMuaW5pdCA9IGluaXQ7XG4gICAgfVxuICAgIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmlkZW50aWZpZXJ9ID0gJHt0aGlzLmluaXR9YDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uU3RhdGVtZW50QVNUIGV4dGVuZHMgQVNUIHtcbiAgICBleHByZXNzaW9uOiBBU1Q7XG4gICAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogQVNUKSB7XG4gICAgICAgIHN1cGVyKGV4cHJlc3Npb24ubGluZSwgZXhwcmVzc2lvbi5jb2wpO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uLnRvU3RyaW5nKCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2FsbEV4cHJlc3Npb25BU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGNhbGxlZTogSWRlbnRpZmllckFTVDtcbiAgICBhcmd1bWVudHM6IEFTVFtdO1xuICAgIGNvbnN0cnVjdG9yKGNhbGxlZTogSWRlbnRpZmllckFTVCwgYWdzOiBBU1RbXSkge1xuICAgICAgICBzdXBlcihjYWxsZWUubGluZSwgY2FsbGVlLmNvbCk7XG4gICAgICAgIHRoaXMuY2FsbGVlID0gY2FsbGVlO1xuICAgICAgICB0aGlzLmFyZ3VtZW50cyA9IGFncztcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY2FsbGVlLnRvU3RyaW5nKCl9KC4uLiR7dGhpcy5hcmd1bWVudHMubGVuZ3RofSlgO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmFyeUV4cHJlc3Npb25BU1QgZXh0ZW5kcyBBU1Qge1xuICAgIGxlZnQ6IEFTVDtcbiAgICBvcGVyYXRpb246IFRva2VuO1xuICAgIHJpZ2h0OiBBU1Q7XG4gICAgY29uc3RydWN0b3IobGVmdDogQVNULCBvcGVyYXRpb246IFRva2VuLCByaWdodDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGxlZnQubGluZSwgbGVmdC5jb2wpO1xuICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjtcbiAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5sZWZ0fSAke3RoaXMub3BlcmF0aW9ufSAke3RoaXMucmlnaHR9YDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFyeUV4cHJlc3Npb25BU1QgZXh0ZW5kcyBBU1Qge1xuICAgIG9wZXJhdGlvbjogVG9rZW47XG4gICAgYXJndW1lbnQ6IEFTVDtcbiAgICBjb25zdHJ1Y3RvcihvcGVyYXRpb246IFRva2VuLCBhcmd1bWVudDogQVNUKSB7XG4gICAgICAgIHN1cGVyKG9wZXJhdGlvbi5saW5lLCBvcGVyYXRpb24uY29sKTtcbiAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb24sIHRoaXMuYXJndW1lbnQgPSBhcmd1bWVudDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMub3BlcmF0aW9ufSAke3RoaXMuYXJndW1lbnR9YDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJZlN0YXRlbWVudEFTVCBleHRlbmRzIEFTVCB7XG4gICAgdGVzdDogQVNUO1xuICAgIGNvbnNlcXVlbnQ6IEFTVDtcbiAgICBhbHRlcm5hdGU/OiBBU1Q7XG4gICAgY29uc3RydWN0b3IodGVzdDogQVNULCBjb25zZXF1ZW50OiBBU1QsIGFsdGVybmF0ZT86IEFTVCkge1xuICAgICAgICBzdXBlcih0ZXN0LmxpbmUsIHRlc3QuY29sKTtcbiAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDtcbiAgICAgICAgdGhpcy5jb25zZXF1ZW50ID0gY29uc2VxdWVudDtcbiAgICAgICAgdGhpcy5hbHRlcm5hdGUgPSBhbHRlcm5hdGU7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGBpZiAke3RoaXMudGVzdH0gJHt0aGlzLmNvbnNlcXVlbnR9ICR7dGhpcy5hbHRlcm5hdGUgPyBgZWxzZSAke3RoaXMuYWx0ZXJuYXRlfSBgIDogJyd9YDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMb2dpY2FsRXhwcmVzc2lvbkFTVCBleHRlbmRzIEFTVCB7XG4gICAgbGVmdDogQVNUO1xuICAgIG9wZXJhdG9yOiBUb2tlbjtcbiAgICByaWdodDogQVNUO1xuICAgIGNvbnN0cnVjdG9yKGxlZnQ6IEFTVCwgb3BlcmF0b3I6IFRva2VuLCByaWdodDogQVNUKSB7XG4gICAgICAgIHN1cGVyKGxlZnQubGluZSwgbGVmdC5jb2wpO1xuICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB9XG4gICAgb3ZlcnJpZGUgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubGVmdH0gJHt0aGlzLm9wZXJhdG9yLnZhbHVlfSAke3RoaXMucmlnaHR9YDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbmRleEFjY2Vzc29yQVNUIGV4dGVuZHMgQVNUIHtcbiAgICBvd25lcjogQVNUO1xuICAgIGtleTogQVNUO1xuICAgIGNvbXB1dGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgY29uc3RydWN0b3Iob3duZXI6IEFTVCwga2V5OiBBU1QsIGNvbXB1dGVkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIob3duZXIubGluZSwgb3duZXIuY29sKTtcbiAgICAgICAgdGhpcy5vd25lciA9IG93bmVyO1xuICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgdGhpcy5jb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgIH1cbiAgICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5vd25lcn1bJHt0aGlzLmtleX1dYDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPYmplY3RFeHByZXNzaW9uIGV4dGVuZHMgQVNUIHtcbiAgICBwcm9wZXJ0aWVzOiBBU1RbXTtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wczogQVNUW10sIHN0YXJ0VG9rZW4/OiBUb2tlbiwgZW5kVG9rZW4/OiBUb2tlbikge1xuICAgICAgICBzdXBlcihzdGFydFRva2VuPy5saW5lLCBzdGFydFRva2VuPy5jb2wpO1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wcztcbiAgICB9XG4gICAgb3ZlcnJpZGUgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcInsuLi59XCI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJyYXlFeHByZXNzaW9uIGV4dGVuZHMgQVNUIHtcbiAgICBlbGVtZW50czogQVNUW107XG4gICAgY29uc3RydWN0b3IocHJvcHM6IEFTVFtdLCBzdGFydD86IEFTVCwgZW5kPzogQVNUKSB7XG4gICAgICAgIHN1cGVyKHN0YXJ0Py5saW5lLCBzdGFydD8uY29sKTtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHByb3BzO1xuICAgIH1cbiAgICBvdmVycmlkZSAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiWy4uLl1cIjtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgT2JqZWN0UHJvcGVydHkgZXh0ZW5kcyBBU1Qge1xuICAgIGtleTogQVNUO1xuICAgIHZhbHVlOiBBU1Q7XG4gICAgY29uc3RydWN0b3Ioa2V5OiBBU1QsIHZhbHVlOiBBU1QpIHtcbiAgICAgICAgc3VwZXIoa2V5LmxpbmUsIGtleS5jb2wpO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBXaGlsZUxvb3BTdGF0ZW1lbnQgZXh0ZW5kcyBBU1Qge1xuICAgIHRlc3Q6IEFTVDtcbiAgICBib2R5OiBBU1Q7XG4gICAgcmV0YWluOiBib29sZWFuID0gZmFsc2U7XG4gICAgY29uc3RydWN0b3IodGVzdDogQVNULCBib2R5OiBBU1QsIHN0YXJ0VG9rZW4/OiBUb2tlbiwgZW5kVG9rZW4/OiBUb2tlbiwgcmV0YWluOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKTtcbiAgICAgICAgdGhpcy50ZXN0ID0gdGVzdDtcbiAgICAgICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICAgICAgdGhpcy5yZXRhaW4gPSByZXRhaW47XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEZvckxvb3BTdGF0ZW1lbnQgZXh0ZW5kcyBBU1Qge1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGluaXQ6IEFzc2lnbm1lbnRFeHByZXNzaW9uQVNULFxuICAgICAgICBwdWJsaWMgdGVzdDogQVNULFxuICAgICAgICBwdWJsaWMgdXBkYXRlOiBBU1QsXG4gICAgICAgIHB1YmxpYyBkaXJlY3Rpb246IFRva2VuLFxuICAgICAgICBwdWJsaWMgYm9keTogQVNULFxuICAgICAgICBzdGFydFRva2VuPzogVG9rZW4sXG4gICAgICAgIGVuZFRva2VuPzogVG9rZW4sXG4gICAgICAgIHB1YmxpYyByZXRhaW46IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihzdGFydFRva2VuPy5saW5lLCBzdGFydFRva2VuPy5jb2wpXG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEZvck9mU3RhdGVtZW50IGV4dGVuZHMgQVNUIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGlkZW50aWZpZXI6IEFTVCxcbiAgICAgICAgcHVibGljIGNvbGxlY3Rpb246IEFTVCxcbiAgICAgICAgcHVibGljIGJvZHk6IEFTVCxcbiAgICAgICAgc3RhcnRUb2tlbj86IFRva2VuLFxuICAgICAgICBlbmRUb2tlbj86IFRva2VuLFxuICAgICAgICBwdWJsaWMgcmV0YWluOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoc3RhcnRUb2tlbj8ubGluZSwgc3RhcnRUb2tlbj8uY29sKVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBUdXBsZUV4cHJlc3Npb24gZXh0ZW5kcyBBU1Qge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBmaXJzdDogQVNULCBwdWJsaWMgc2Vjb25kOiBBU1QpIHtcbiAgICAgICAgc3VwZXIoZmlyc3QubGluZSwgZmlyc3QuY29sKVxuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBCcmVha0FTVCBleHRlbmRzIEFTVCB7XG4gICAgY29uc3RydWN0b3IobGluZT86IG51bWJlciwgY29sPzogbnVtYmVyKSB7XG4gICAgICAgIHN1cGVyKGxpbmUsIGNvbClcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgUmV0dXJuQVNUIGV4dGVuZHMgQVNUIHtcbiAgICB2YWx1ZT86IEFTVDtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZT86IEFTVCwgbGluZT86IG51bWJlciwgY29sPzogbnVtYmVyKSB7XG4gICAgICAgIHN1cGVyKGxpbmUsIGNvbClcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBDb250aW51ZUFTVCBleHRlbmRzIEFTVCB7XG4gICAgY29uc3RydWN0b3IobGluZT86IG51bWJlciwgY29sPzogbnVtYmVyKSB7XG4gICAgICAgIHN1cGVyKGxpbmUsIGNvbCk7XG4gICAgfVxufVxuY2xhc3MgUGFyc2VyIHtcbiAgICBzdGF0aWMgX2Jpbm9wUHJlY2RlbmNlczogeyBbazogbnVtYmVyXTogbnVtYmVyIH0gPSB7XG4gICAgICAgIFtUb2tlblR5cGUuZXFlcV06IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLm5vdEVxXTogMTAsXG4gICAgICAgIFtUb2tlblR5cGUuZ3JlYXRdOiAxMCxcbiAgICAgICAgW1Rva2VuVHlwZS5ncmVhdEVxXTogMTAsXG4gICAgICAgIFtUb2tlblR5cGUubGVzc106IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLmxlc3NFcV06IDEwLFxuICAgICAgICBbVG9rZW5UeXBlLnBsdXNdOiAyMCxcbiAgICAgICAgW1Rva2VuVHlwZS5taW51c106IDIwLFxuICAgICAgICBbVG9rZW5UeXBlLm11bHRdOiA0MCxcbiAgICAgICAgW1Rva2VuVHlwZS5kaXZdOiA0MCxcbiAgICAgICAgW1Rva2VuVHlwZS5tb2RdOiA0MCxcbiAgICB9O1xuXG4gICAgbGV4ZXIhOiBMZXhlcjtcbiAgICBjdXJyZW50VG9rZW4/OiBUb2tlbjtcbiAgICBjb25zdHJ1Y3RvcihsZXhlcjogTGV4ZXIpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSBsZXhlci5uZXh0VG9rZW4oKTtcbiAgICAgICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VhdCh0eXBlOiBUb2tlblR5cGUpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRoaXMubGV4ZXIubmV4dFRva2VuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcih0aGlzLmN1cnJlbnRUb2tlbiEsIHR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWF0RU9MKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5lb2wpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuZW9sKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VhdFNlbWlPckVPTCgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSBUb2tlblR5cGUuZW9sIHx8XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLnNlbWkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdCh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9lYXRTZW1pKCkge1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5zZW1pKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnNlbWkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFyaWFibGUoKTogSWRlbnRpZmllckFTVCB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgSWRlbnRpZmllckFTVCh0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmlkKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIHByaXZhdGUgX3JldHVybigpOiBBU1Qge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBsZXQgdmFsdWU6IEFTVCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCF0aGlzLl9leHBlY3QoVG9rZW5UeXBlLmVvbCkgJiYgIXRoaXMuX2V4cGVjdChUb2tlblR5cGUuc2VtaSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZXhwcmVzc2lvbigpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm5BU1QodmFsdWUsIHRva2VuPy5saW5lLCB0b2tlbj8uY29sKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZmFjdG9yKCk6IEFTVCB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW4hO1xuICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLnBsdXM6XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5taW51czpcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm5vdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVW5hcnlFeHByZXNzaW9uQVNUKHRva2VuISwgdGhpcy5fZXhwcmVzc2lvbigpKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm51bWJlckNvbnN0OlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubnVtYmVyQ29uc3QpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEFTVCh0b2tlbiwgdG9rZW4udmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5zdHJpbmdDb25zdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnN0cmluZ0NvbnN0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxBU1QodG9rZW4sIHRva2VuLnZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubHBhcmVuOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubHBhcmVuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucnBhcmVuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLlRSVUU6XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5GQUxTRTpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEFTVCh0b2tlbiwgdG9rZW4udmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5OVUxMOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuTlVMTCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsQVNUKHRva2VuLCBcIm51bGxcIik7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sYnJhY2tldDpcbiAgICAgICAgICAgICAgICAvLyBsaXRlcmFsIGFycmF5IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYXJyYXlFeHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5sYnJhY2U6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29iamVjdEV4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF90ZXJtKCk6IEFTVCB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy5fZmFjdG9yKCk7XG4gICAgICAgIG5vZGUgPSB0aGlzLl90cnlQYXJzaW5nTWVtYmVyRXhwcmVzc2lvbihub2RlKTtcbiAgICAgICAgbm9kZSA9IHRoaXMuX3RyeVBhcnNpbmdGdW5jdGlvbkNhbGwobm9kZSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2V4cHJlc3Npb24oKTogQVNUIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLl90ZXJtKCk7XG4gICAgICAgIG5vZGUgPSB0aGlzLl90cnlCaW5hcnlFeHByZXNzaW9uKDAsIG5vZGUpO1xuICAgICAgICB3aGlsZSAoW1Rva2VuVHlwZS5hbmQsIFRva2VuVHlwZS5vciwgVG9rZW5UeXBlLm51bGxpdHldLmluY2x1ZGVzKHRoaXMuY3VycmVudFRva2VuIS50eXBlKSkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgICAgICB0aGlzLl9lYXQodG9rZW4udHlwZSk7XG4gICAgICAgICAgICBub2RlID0gbmV3IExvZ2ljYWxFeHByZXNzaW9uQVNUKG5vZGUsIHRva2VuLCB0aGlzLl9leHByZXNzaW9uKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLmVxdWFsKSkge1xuICAgICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUIHx8IG5vZGUgaW5zdGFuY2VvZiBJbmRleEFjY2Vzc29yQVNUKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5lcXVhbCk7XG4gICAgICAgICAgICAgICAgbm9kZSA9IG5ldyBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVChub2RlLCB0aGlzLl9leHByZXNzaW9uKCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHRva2VuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBwcml2YXRlIF9vYmplY3RQcm9wZXJ0eSgpOiBPYmplY3RQcm9wZXJ0eSB7XG4gICAgICAgIGxldCBrZXk6IEFTVDtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuc3RyaW5nQ29uc3Q6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBuZXcgTGl0ZXJhbEFTVCh0aGlzLmN1cnJlbnRUb2tlbiwgdGhpcy5jdXJyZW50VG9rZW4udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnN0cmluZ0NvbnN0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGJyYWNrZXQ6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxicmFja2V0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cHIgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNrZXQpO1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBleHByO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5pZDpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5fdmFyaWFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbmV3IExpdGVyYWxBU1QobmV3IFRva2VuKFRva2VuVHlwZS5pZCwgaWQudmFsdWUsIGlkLmxpbmUsIGlkLmNvbCksIGlkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBgVW5leHBlY3RlZCB0b2tlbiAke3RoaXMuY3VycmVudFRva2VufWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb2xvbik7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RQcm9wZXJ0eShrZXkhLCB2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3Byb3BlcnR5KCk6IEFTVCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vYmplY3RQcm9wZXJ0eSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX29iamVjdFByb3BlcnRpZXMoKTogQVNUW10ge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBBU1RbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgIT0gVG9rZW5UeXBlLnJicmFjZSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0RU9MKCk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2godGhpcy5fcHJvcGVydHkoKSk7XG4gICAgICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IFRva2VuVHlwZS5jb21tYSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5jb21tYSk7XG4gICAgICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFjZSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaCh0aGlzLl9wcm9wZXJ0eSgpKTtcbiAgICAgICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX29iamVjdEV4cHJlc3Npb24oYnJhY2VUb2tlbj86IFRva2VuKTogQVNUIHtcbiAgICAgICAgdmFyIHRva2VuID0gYnJhY2VUb2tlbiA/PyB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgaWYgKCFicmFjZVRva2VuKSB0aGlzLl9lYXQoVG9rZW5UeXBlLmxicmFjZSk7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5fb2JqZWN0UHJvcGVydGllcygpO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFjZSk7XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzLCB0b2tlbiwgdGhpcy5jdXJyZW50VG9rZW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FycmF5RXhwcmVzc2lvbigpOiBBU1Qge1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxicmFja2V0KTtcbiAgICAgICAgY29uc3QgZWxlbWVudHM6IEFTVFtdID0gdGhpcy5fZXhwZWN0KFRva2VuVHlwZS5yYnJhY2tldCkgPyBbXSA6IHRoaXMuX2V4cHJlc3Npb25zTGlzdCgpO1xuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJicmFja2V0KTtcbiAgICAgICAgdmFyIHN0YXJ0Tm9kZSA9IGVsZW1lbnRzLmxlbmd0aCAhPT0gMCA/IGVsZW1lbnRzWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICB2YXIgbGFzdE5vZGUgPSBlbGVtZW50cy5sZW5ndGggIT09IDAgPyBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheUV4cHJlc3Npb24oZWxlbWVudHMsIHN0YXJ0Tm9kZSwgbGFzdE5vZGUpO1xuICAgIH1cbiAgICBwcml2YXRlIF90cnlQYXJzaW5nTWVtYmVyRXhwcmVzc2lvbihuOiBBU1QpOiBBU1Qge1xuICAgICAgICBsZXQgbm9kZSA9IG47XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFja2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxicmFja2V0KTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIG5vZGUgPSBuZXcgSW5kZXhBY2Nlc3NvckFTVChub2RlLCBrZXkpO1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5yYnJhY2tldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdHJ5QmluYXJ5RXhwcmVzc2lvbihwcmVjOiBudW1iZXIsIGxlZnQ6IEFTVCk6IEFTVCB7XG4gICAgICAgIGxldCBub2RlID0gbGVmdDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQcmVjID0gUGFyc2VyLl9iaW5vcFByZWNkZW5jZXNbdGhpcy5jdXJyZW50VG9rZW4hLnR5cGVdIHx8IC0xO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRQcmVjIDwgcHJlYykgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuY3VycmVudFRva2VuITtcbiAgICAgICAgICAgIHRoaXMuX2VhdChvcGVyYXRvci50eXBlKTtcbiAgICAgICAgICAgIGxldCByaWdodCA9IHRoaXMuX3Rlcm0oKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRQcmVjID0gUGFyc2VyLl9iaW5vcFByZWNkZW5jZXNbdGhpcy5jdXJyZW50VG9rZW4hLnR5cGVdIHx8IC0xO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRQcmVjIDwgbmV4dFByZWMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLl90cnlCaW5hcnlFeHByZXNzaW9uKGN1cnJlbnRQcmVjICsgMSwgcmlnaHQpO1xuICAgICAgICAgICAgICAgIGlmICh0bXAgPT09IG5vZGUpIHJldHVybiB0bXA7XG4gICAgICAgICAgICAgICAgcmlnaHQgPSB0bXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlID0gbmV3IEJpbmFyeUV4cHJlc3Npb25BU1Qobm9kZSwgb3BlcmF0b3IsIHJpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2V4cHJlc3Npb25zTGlzdCgpOiBBU1RbXSB7XG4gICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICAvLyBpZiAoZXhwZWN0KExleGVyLlRva2VuVHlwZS5SUEFSRU4pKSByZXR1cm4gZW1wdHlMaXN0KClcbiAgICAgICAgbGV0IGV4cHIgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbZXhwcl07XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUb2tlbj8udHlwZSA9PT0gVG9rZW5UeXBlLmNvbW1hKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmNvbW1hKTtcbiAgICAgICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2V4cGVjdChUb2tlblR5cGUucmJyYWNrZXQpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBleHByID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZXhwcik7XG4gICAgICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NhbGxFeHByZXNzaW9uKG5vZGU6IEFTVCk6IENhbGxFeHByZXNzaW9uQVNUIHtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5scGFyZW4pO1xuICAgICAgICBsZXQgYXJnczogQVNUW10gPSBbXTtcbiAgICAgICAgaWYgKCF0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJwYXJlbikpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB0aGlzLl9leHByZXNzaW9uc0xpc3QoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJwYXJlbik7XG4gICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSkge1xuICAgICAgICAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENhbGxFeHByZXNzaW9uQVNUKG5vZGUgYXMgSWRlbnRpZmllckFTVCwgYXJncyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdHJ5UGFyc2luZ0Z1bmN0aW9uQ2FsbChuOiBBU1QpOiBBU1Qge1xuICAgICAgICBsZXQgbm9kZSA9IG47XG4gICAgICAgIHdoaWxlICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxwYXJlbikge1xuICAgICAgICAgICAgLy8gcHJvYmFibGUgZnVuY3Rpb24gY2FsbFxuICAgICAgICAgICAgbm9kZSA9IHRoaXMuX2NhbGxFeHByZXNzaW9uKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3N0YXRlbWVudEV4cHJlc3Npb24oKTogQVNUIHtcblxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuXG4gICAgICAgIGlmICghW1Rva2VuVHlwZS5zZW1pLCBUb2tlblR5cGUuZW9sLCBUb2tlblR5cGUuZW9mXVxuICAgICAgICAgICAgLmluY2x1ZGVzKHRoaXMuY3VycmVudFRva2VuIS50eXBlKSkge1xuICAgICAgICAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9ibG9ja1N0YXRlbWVudChpZ25vcmVGaXJzdEJyYWNlID0gZmFsc2UpOiBCbG9ja1N0YXRlbWVudEFTVCB7XG4gICAgICAgIGlmICghaWdub3JlRmlyc3RCcmFjZSkgdGhpcy5fZWF0KFRva2VuVHlwZS5sYnJhY2UpO1xuICAgICAgICB0aGlzLl9lYXRFT0woKTtcbiAgICAgICAgaWYgKHRoaXMuX2V4cGVjdChUb2tlblR5cGUucmJyYWNlKSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5yYnJhY2UpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9ja1N0YXRlbWVudEFTVChbXSwgdGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zdCBib2R5ID0gX3N0YXRlbWVudHMoKTtcbiAgICAgICAgY29uc3QgYm9keSA9IFt0aGlzLl9zdGF0ZW1lbnQoKV07XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXRTZW1pT3JFT0woKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLnJicmFjZSB8fCB0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmVvZikge1xuICAgICAgICAgICAgICAgIC8vIF9lYXQodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keS5wdXNoKHRoaXMuX3N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9leHBlY3QoVG9rZW5UeXBlLnJicmFjZSkpIGJyZWFrO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuZW9sICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgIT09IFRva2VuVHlwZS5zZW1pICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4hLnR5cGUgIT09IFRva2VuVHlwZS5lb2YpIHtcbiAgICAgICAgICAgICAgICBlcnJvcih0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUucmJyYWNlKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuPy50eXBlID09PSBUb2tlblR5cGUucmJyYWNlKSB7XG4gICAgICAgICAgICAvLyBlbmRCbG9ja1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5yYnJhY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBCbG9ja1N0YXRlbWVudEFTVChib2R5LCB0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lmU3RhdGVtZW50KCk6IElmU3RhdGVtZW50QVNUIHtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5JRik7XG4gICAgICAgIGNvbnN0IHdpdGhQYXIgPSB0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxwYXJlbjtcbiAgICAgICAgaWYgKHdpdGhQYXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUubHBhcmVuKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXN0ID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICBpZiAod2l0aFBhcikge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5ycGFyZW4pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb25zZXF1ZW50OiBBU1Q7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFjZSkge1xuICAgICAgICAgICAgY29uc2VxdWVudCA9IHRoaXMuX2Jsb2NrU3RhdGVtZW50KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zZXF1ZW50ID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy5fZWF0U2VtaU9yRU9MKCk7XG4gICAgICAgIGxldCBhbHRlcm5hdGU6IEFTVCB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUuRUxTRSkge1xuICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5FTFNFKTtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5JRjpcbiAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gdGhpcy5faWZTdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGJyYWNlOlxuICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGUgPSB0aGlzLl9ibG9ja1N0YXRlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGUgPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IElmU3RhdGVtZW50QVNUKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3doaWxlTG9vcCgpOiBXaGlsZUxvb3BTdGF0ZW1lbnQge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuITtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5XSElMRV9USUxMKVxuICAgICAgICBjb25zdCB0ZXN0ID0gdGhpcy5fZXhwcmVzc2lvbigpXG4gICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFjZSA/IHRoaXMuX2Jsb2NrU3RhdGVtZW50KCkgOiB0aGlzLl9leHByZXNzaW9uKClcbiAgICAgICAgcmV0dXJuIG5ldyBXaGlsZUxvb3BTdGF0ZW1lbnQodGVzdCwgYm9keSwgdG9rZW4sIHRoaXMuY3VycmVudFRva2VuISlcbiAgICB9XG5cbiAgICBwcml2YXRlIF9mb3JPZklkZW50aWZpZXIoKTogQVNUIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubHBhcmVuOiB7XG4gICAgICAgICAgICAgICAgLy8gcHJvYmFibGUgdHVwbGVcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmxwYXJlbilcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdCA9IHRoaXMuX3ZhcmlhYmxlKClcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmNvbW1hKVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHRoaXMuX3ZhcmlhYmxlKClcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLnJwYXJlbilcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR1cGxlRXhwcmVzc2lvbihcbiAgICAgICAgICAgICAgICAgICAgZmlyc3QsXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUb2tlblR5cGUuTEJSQUNFIC0+IG9iamVjdFBhdHRlcm4oKVxuICAgICAgICAgICAgLy8gVG9rZW5UeXBlLkxCUkFDS0VUIC0+IGFycmF5UGF0dGVybigpXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YXJpYWJsZSgpXG4gICAgICAgIH1cblxuICAgIH1cbiAgICAvKipcbiAgICAgKiAjIEZvckxvb3BTdGF0ZW1lbnQgd2l0aCBzdGVwXG4gICAgICogKHNlZ2lua2F8Zm9yKSBhPTAgKGZvb3x0bykgMTAgKGtheXxrYWopIG5paW4gMiB7ICMgZm9yIGEgPSAwOyBhPDEwOyBhKz0yXG4gICAgICpcbiAgICAgKiB9XG4gICAgICogKHNlZ2lua2F8Zm9yKSBtYWxpIGtvbm8gYVxuICAgICAqL1xuICAgIHByaXZhdGUgX2Zvckxvb3AoKTogQVNUIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUb2tlbiA9IHRoaXMuY3VycmVudFRva2VuITtcbiAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5GT1JfTE9PUClcbiAgICAgICAgbGV0IGZvck9mID1cbiAgICAgICAgICAgIFtUb2tlblR5cGUubHBhcmVuXS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSk7XG4gICAgICAgIGxldCBub2RlOiBBU1Q7XG4gICAgICAgIGlmIChmb3JPZikge1xuICAgICAgICAgICAgbm9kZSA9IHRoaXMuX2Zvck9mSWRlbnRpZmllcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgIGlmICghKGV4cHIgaW5zdGFuY2VvZiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCkpIHtcbiAgICAgICAgICAgICAgICBmb3JPZiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlID0gZXhwcjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKCFmb3JPZiAmJiBub2RlIGluc3RhbmNlb2YgQXNzaWdubWVudEV4cHJlc3Npb25BU1QpIHtcbiAgICAgICAgICAgIC8vIG5vcm1hbCBmb3JcbiAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuVElMTCk7XG4gICAgICAgICAgICBjb25zdCB0ZXN0ID0gdGhpcy5fZXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbjogVG9rZW47XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLnVwIHx8IHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUuZG93bikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmN1cnJlbnRUb2tlbiE7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KHQudHlwZSlcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSB0XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IG5ldyBUb2tlbihUb2tlblR5cGUudXAsIFwidXBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdXBkYXRlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2V4cGVjdChUb2tlblR5cGUud2l0aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLndpdGgpXG4gICAgICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuX2V4cHJlc3Npb24oKTtcbiAgICAgICAgICAgICAgICB1cGRhdGUgPSBleHByXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSA9IG5ldyBMaXRlcmFsQVNUKG5ldyBUb2tlbihUb2tlblR5cGUubnVtYmVyQ29uc3QsIDEsIHRoaXMuY3VycmVudFRva2VuIS5saW5lLCB0aGlzLmN1cnJlbnRUb2tlbiEuY29sKSwgXCIxXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gKHRoaXMuY3VycmVudFRva2VuIS50eXBlID09PSBUb2tlblR5cGUubGJyYWNlKSA/IHRoaXMuX2Jsb2NrU3RhdGVtZW50KCkgOiB0aGlzLl9leHByZXNzaW9uKClcblxuICAgICAgICAgICAgbm9kZSA9IG5ldyBGb3JMb29wU3RhdGVtZW50KG5vZGUsIHRlc3QsIHVwZGF0ZSwgZGlyZWN0aW9uLCBib2R5LCBzdGFydFRva2VuLCB0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvck9mKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXQoVG9rZW5UeXBlLmluKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLl9leHByZXNzaW9uKCk7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gKHRoaXMuY3VycmVudFRva2VuISEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFjZSkgPyB0aGlzLl9ibG9ja1N0YXRlbWVudCgpIDogdGhpcy5fZXhwcmVzc2lvbigpXG4gICAgICAgICAgICBub2RlID0gbmV3IEZvck9mU3RhdGVtZW50KFxuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgIHN0YXJ0VG9rZW4sXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4hXG4gICAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcih0aGlzLmN1cnJlbnRUb2tlbiEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3RhdGVtZW50KCk6IEFTVCB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50VG9rZW4hLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkJSRUFLOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuQlJFQUspO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnJlYWtBU1QodGhpcy5jdXJyZW50VG9rZW4/LmxpbmUsIHRoaXMuY3VycmVudFRva2VuPy5jb2wpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuQ09OVElOVUU6XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5DT05USU5VRSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb250aW51ZUFTVCh0aGlzLmN1cnJlbnRUb2tlbj8ubGluZSwgdGhpcy5jdXJyZW50VG9rZW4/LmNvbCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5SRVRVUk46XG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0KFRva2VuVHlwZS5SRVRVUk4pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVybigpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuc2VtaTpcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXRTZW1pKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlbWVudCgpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZW9sOlxuICAgICAgICAgICAgICAgIHRoaXMuX2VhdEVPTCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLklGOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pZlN0YXRlbWVudCgpO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuV0hJTEVfVElMTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2hpbGVMb29wKCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5GT1JfTE9PUDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9yTG9vcCgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVtZW50RXhwcmVzc2lvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZXhwZWN0KHR5cGU6IFRva2VuVHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VG9rZW4/LnR5cGUgPT09IHR5cGU7XG4gICAgfVxuICAgIHByaXZhdGUgX2RlZmluaXRpb24oKTogQVNUW10ge1xuICAgICAgICB0aGlzLl9lYXRTZW1pT3JFT0woKTtcblxuICAgICAgICBpZiAodGhpcy5fZXhwZWN0KFRva2VuVHlwZS5lb2YpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFt0aGlzLl9zdGF0ZW1lbnQoKV07XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXRTZW1pT3JFT0woKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmVvZikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VhdChUb2tlblR5cGUuZW9mKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSA9PT0gVG9rZW5UeXBlLmxicmFjZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLl9ibG9ja1N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuX3N0YXRlbWVudCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmN1cnJlbnRUb2tlbiEudHlwZSAhPT0gVG9rZW5UeXBlLmVvbCAmJlxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuc2VtaSAmJlxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFRva2VuIS50eXBlICE9PSBUb2tlblR5cGUuZW9mKSB7XG4gICAgICAgICAgICAvLyAgICAgZXJyb3IodGhpcy5jdXJyZW50VG9rZW4hKTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yb290KCk6IFJvb3RBU1Qge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmxleGVyLnNvdXJjZTtcbiAgICAgICAgY29uc3QgbmFtZSA9IFwiPG1vZHVsZT5cIjtcbiAgICAgICAgY29uc3QgbGlzdCA9IHRoaXMuX2RlZmluaXRpb24oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSb290QVNUKGxpc3QsIG5hbWUsIHNvdXJjZSk7XG4gICAgfVxuXG4gICAgcGFyc2UoKTogQVNUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIExvb3BDb250cm9sIHtcbn1cbmV4cG9ydCBjbGFzcyBCcmVha0JyYW5jaCBleHRlbmRzIExvb3BDb250cm9sIHsgfVxuZXhwb3J0IGNsYXNzIENvbnRpbnVlQnJhbmNoIGV4dGVuZHMgTG9vcENvbnRyb2wgeyB9XG5leHBvcnQgY2xhc3MgUmV0dXJuQnJhbmNoIHtcbiAgICB2YWx1ZTogYW55O1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbn07XG5cbnR5cGUgRnVuYyA9IChub2RlOiBhbnkpID0+IGFueTtcbi8vIEFTVCBXYWxsa2VyXG5hYnN0cmFjdCBjbGFzcyBBTm9kZVZpc2l0b3Ige1xuICAgIHByb3RlY3RlZCBfbm9kZXNWaXNpdG9yczogeyBbazogc3RyaW5nXTogRnVuYyB9ID0ge307XG4gICAgcHJvdGVjdGVkIHJlZ2lzdGVyVmlzaXRvcih0eXBlOiBUeXBlPEFTVD4sIHZpc2l0b3I6IEZ1bmMpIHtcbiAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGB2aXNpdCR7dHlwZS5uYW1lfWA7XG4gICAgICAgIHRoaXMuX25vZGVzVmlzaXRvcnNbbWV0aG9kTmFtZV0gPSB2aXNpdG9yO1xuICAgIH1cblxuICAgIGFic3RyYWN0IHZpc2l0KG5vZGU6IEFTVCk6IGFueTtcbn1cblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTm9kZVZpc2l0b3IgZXh0ZW5kcyBBTm9kZVZpc2l0b3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihSb290QVNULCB0aGlzLnZpc2l0Um9vdEFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEJsb2NrU3RhdGVtZW50QVNULCB0aGlzLnZpc2l0QmxvY2tTdGF0ZW1lbnRBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihJZGVudGlmaWVyQVNULCB0aGlzLnZpc2l0SWRlbnRpZmllckFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKExpdGVyYWxBU1QsIHRoaXMudmlzaXRMaXRlcmFsQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQXNzaWdubWVudEV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEV4cHJlc3Npb25TdGF0ZW1lbnRBU1QsIHRoaXMudmlzaXRFeHByZXNzaW9uU3RhdGVtZW50QVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQ2FsbEV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRDYWxsRXhwcmVzc2lvbkFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEJpbmFyeUV4cHJlc3Npb25BU1QsIHRoaXMudmlzaXRCaW5hcnlFeHByZXNzaW9uQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoVW5hcnlFeHByZXNzaW9uQVNULCB0aGlzLnZpc2l0VW5hcnlFeHByZXNzaW9uQVNUKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoSWZTdGF0ZW1lbnRBU1QsIHRoaXMudmlzaXRJZlN0YXRlbWVudEFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKExvZ2ljYWxFeHByZXNzaW9uQVNULCB0aGlzLnZpc2l0TG9naWNhbEV4cHJlc3Npb25BU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihJbmRleEFjY2Vzc29yQVNULCB0aGlzLnZpc2l0SW5kZXhBY2Nlc3NvckFTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKE9iamVjdFByb3BlcnR5LCB0aGlzLnZpc2l0T2JqZWN0UHJvcGVydHkpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihPYmplY3RFeHByZXNzaW9uLCB0aGlzLnZpc2l0T2JqZWN0RXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKEFycmF5RXhwcmVzc2lvbiwgdGhpcy52aXNpdEFycmF5RXhwcmVzc2lvbik7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoV2hpbGVMb29wU3RhdGVtZW50LCB0aGlzLnZpc2l0V2hpbGVMb29wU3RhdGVtZW50KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoRm9yTG9vcFN0YXRlbWVudCwgdGhpcy52aXNpdEZvckxvb3BTdGF0ZW1lbnQpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihGb3JPZlN0YXRlbWVudCwgdGhpcy52aXNpdEZvck9mU3RhdGVtZW50KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpc2l0b3IoQnJlYWtBU1QsIHRoaXMudmlzaXRCcmVha0FTVCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaXNpdG9yKENvbnRpbnVlQVNULCB0aGlzLnZpc2l0Q29udGludWVBU1QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyVmlzaXRvcihSZXR1cm5BU1QsIHRoaXMudmlzaXRSZXR1cm5BU1QpO1xuICAgIH1cbiAgICBvdmVycmlkZSB2aXNpdChub2RlOiBBU1QpOiBhbnkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGB2aXNpdCR7bm9kZS5jb25zdHJ1Y3Rvci5uYW1lfWA7XG4gICAgICAgICAgICAvLyBjb25zdCBmbiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKVttZXRob2ROYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZuID0gdGhpcy5fbm9kZXNWaXNpdG9yc1ttZXRob2ROYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBmbj8uY2FsbCh0aGlzLCBub2RlKSA/PyBudWxsO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIGFzc2lnblByb3BlcnR5KG93bmVyOiBhbnksIHByb3BlcnR5OiBhbnksIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvd25lcikpIHtcbiAgICAgICAgICAgIG93bmVyW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvd25lciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIG93bmVyW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2UgeyB9XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRSb290QVNUKG5vZGU6IFJvb3RBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0QmxvY2tTdGF0ZW1lbnRBU1Qobm9kZTogQmxvY2tTdGF0ZW1lbnRBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0SWRlbnRpZmllckFTVChub2RlOiBJZGVudGlmaWVyQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdExpdGVyYWxBU1Qobm9kZTogQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKG5vZGU6IEFzc2lnbm1lbnRFeHByZXNzaW9uQVNUKTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudEFTVChub2RlOiBFeHByZXNzaW9uU3RhdGVtZW50QVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdENhbGxFeHByZXNzaW9uQVNUKG5vZGU6IENhbGxFeHByZXNzaW9uQVNUKTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0QmluYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBCaW5hcnlFeHByZXNzaW9uQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdFVuYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBVbmFyeUV4cHJlc3Npb25BU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0SWZTdGF0ZW1lbnRBU1Qobm9kZTogSWZTdGF0ZW1lbnRBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0TG9naWNhbEV4cHJlc3Npb25BU1Qobm9kZTogTG9naWNhbEV4cHJlc3Npb25BU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0SW5kZXhBY2Nlc3NvckFTVChub2RlOiBJbmRleEFjY2Vzc29yQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdE9iamVjdFByb3BlcnR5KG5vZGU6IEFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRPYmplY3RFeHByZXNzaW9uKGFzdDogQVNUKTogYW55O1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2aXNpdEFycmF5RXhwcmVzc2lvbihhc3Q6IEFTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRCcmVha0FTVChub2RlOiBCcmVha0FTVCk6IGFueTtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgdmlzaXRXaGlsZUxvb3BTdGF0ZW1lbnQobm9kZTogV2hpbGVMb29wU3RhdGVtZW50KTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Rm9yTG9vcFN0YXRlbWVudChub2RlOiBGb3JMb29wU3RhdGVtZW50KTogYW55O1xuXG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Rm9yT2ZTdGF0ZW1lbnQobm9kZTogRm9yT2ZTdGF0ZW1lbnQpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0Q29udGludWVBU1Qobm9kZTogQ29udGludWVBU1QpOiBhbnk7XG4gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZpc2l0UmV0dXJuQVNUKG5vZGU6IFJldHVybkFTVCk6IGFueTtcbn1cbmV4cG9ydCBjbGFzcyBNRXZlbnRTY29wZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcmVudD86IE1FdmVudFNjb3BlO1xuICAgIG1lbW9yeTogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIG1lbW9yeTogeyBbazogc3RyaW5nXTogYW55IH0sIHBhcmVudD86IE1FdmVudFNjb3BlKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMubWVtb3J5ID0gbWVtb3J5O1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgcmVzb2x2ZShrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLm1lbW9yeSkuaW5jbHVkZXMoa2V5KSA/IHRoaXMubWVtb3J5W2tleV0gOiAodGhpcy5wYXJlbnQ/LnJlc29sdmUoa2V5KSA/PyBudWxsKTtcbiAgICB9XG4gICAgY2hhbmdlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBkZWNsYXJlID0gdHJ1ZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5tZW1vcnkpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIC8vIGNoYW5nZSBoZXJlXG4gICAgICAgICAgICB0aGlzLm1lbW9yeVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuY2hhbmdlKGtleSwgdmFsdWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZWNsYXJlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZW1vcnlba2V5XSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5leHBvcnQgdHlwZSBNRXZlbnRvRkJpbmRpbmcgPSAoYXJnczogYW55W10sIHZtOiBNRXZlbnRvKSA9PiBhbnk7XG5leHBvcnQgY2xhc3MgTUV2ZW50byBleHRlbmRzIE5vZGVWaXNpdG9yIHtcblxuICAgIHJvb3RTY29wZTogTUV2ZW50U2NvcGUgPSBuZXcgTUV2ZW50U2NvcGUoXCJQcm9ncmFtXCIsIHt9KTtcbiAgICBwcm90ZWN0ZWQgY3VycmVudFNjb3BlPzogTUV2ZW50U2NvcGUgPSB0aGlzLnJvb3RTY29wZTtcblxuICAgIGRlYnVnID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dsb2JhbEZ1bmN0aW9uc1JlZ2lzdHJ5OiB7IFtrOiBzdHJpbmddOiBNRXZlbnRvRkJpbmRpbmcgfSA9IHt9O1xuICAgIHByaXZhdGUgc3RhdGljIF9jYWNoZTogTWFwPG51bWJlciwgQVNUPiA9IG5ldyBNYXAoKTtcbiAgICBwcm90ZWN0ZWQgX2Z1bmN0aW9uc1JlZ2lzdHJ5OiB7IFtrOiBzdHJpbmddOiBNRXZlbnRvRkJpbmRpbmcgfSA9IHt9O1xuICAgIHByb3RlY3RlZCBfZnVuY3Rpb25SZXNvbHZlcj86IChuYW1lOiBzdHJpbmcpID0+IE1FdmVudG9GQmluZGluZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnkgPSB7IC4uLk1FdmVudG8uX2dsb2JhbEZ1bmN0aW9uc1JlZ2lzdHJ5IH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNjb3BlPy5yZXNvbHZlKG5hbWUpID8/IG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBjaGFuZ2VWYXJpYWJsZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2NvcGU/LmNoYW5nZShuYW1lLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcHVzaFNjb3BlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzY29wZSA9IG5ldyBNRXZlbnRTY29wZShuYW1lLCB7fSwgdGhpcy5jdXJyZW50U2NvcGUpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTY29wZSA9IHNjb3BlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcG9wU2NvcGUoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNjb3BlID0gdGhpcy5jdXJyZW50U2NvcGU/LnBhcmVudDtcbiAgICB9XG4gICAgcHJvdGVjdGVkIGxvZyhtZXNzYWdlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0Um9vdEFTVChub2RlOiBSb290QVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGlzdCA9IG5vZGUuYm9keTtcbiAgICAgICAgbGV0IGxhc3Q7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBsaXN0KSB7XG4gICAgICAgICAgICBsYXN0ID0gdGhpcy52aXNpdChuKTtcbiAgICAgICAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3QudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3Q7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0QmxvY2tTdGF0ZW1lbnRBU1Qobm9kZTogQmxvY2tTdGF0ZW1lbnRBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBsaXN0ID0gbm9kZS5ib2R5O1xuICAgICAgICBsZXQgbGFzdDtcbiAgICAgICAgdGhpcy5wdXNoU2NvcGUoXCJCbG9ja1wiKTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGxpc3QpIHtcbiAgICAgICAgICAgIGxhc3QgPSB0aGlzLnZpc2l0KG4pO1xuICAgICAgICAgICAgaWYgKGxhc3QgaW5zdGFuY2VvZiBMb29wQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxhc3QgaW5zdGFuY2VvZiBSZXR1cm5CcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgICAgIHJldHVybiBsYXN0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdElkZW50aWZpZXJBU1Qobm9kZTogSWRlbnRpZmllckFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGlkID0gbm9kZS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM/LnJlc29sdmUoaWQpID8/IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0TGl0ZXJhbEFTVChub2RlOiBBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChub2RlIGFzIExpdGVyYWxBU1QpLnZhbHVlO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0QXNzaWdubWVudEV4cHJlc3Npb25BU1Qobm9kZTogQXNzaWdubWVudEV4cHJlc3Npb25BU1QpOiBhbnkge1xuXG4gICAgICAgIGNvbnN0IGlkOiBBU1QgPSBub2RlLmlkZW50aWZpZXI7XG5cbiAgICAgICAgY29uc3QgaW5pdDogQVNUID0gbm9kZS5pbml0O1xuICAgICAgICBsZXQgdmFsdWU6IGFueSA9IG51bGw7XG4gICAgICAgIGlmIChpZCBpbnN0YW5jZW9mIEluZGV4QWNjZXNzb3JBU1QpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnZpc2l0KGlkLm93bmVyKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy52aXNpdChub2RlLmluaXQpO1xuICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gdGhpcy52aXNpdChpZC5rZXkpO1xuICAgICAgICAgICAgdGhpcy5hc3NpZ25Qcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaWQgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudmlzaXQoaW5pdCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGlkLnZhbHVlLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRBU1Qobm9kZTogRXhwcmVzc2lvblN0YXRlbWVudEFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGV4cHIgPSBub2RlLmV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0KGV4cHIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdENhbGxFeHByZXNzaW9uQVNUKG5vZGU6IENhbGxFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICAgICAgICBjb25zdCBhcmdzID0gbm9kZS5hcmd1bWVudHM7XG4gICAgICAgIGNvbnN0IGNhbGxlZU5hbWUgPSBjYWxsZWUudmFsdWU7XG4gICAgICAgIGNvbnN0IGZuID0gdGhpcy5yZXNvbHZlRnVuY3Rpb24oY2FsbGVlTmFtZSk7XG4gICAgICAgIGNvbnN0IGFyZ1ZhbHVlcyA9IGFyZ3MubWFwKChlKSA9PiB0aGlzLnZpc2l0KGUpKTtcbiAgICAgICAgLy8gcHJpbnQoXCJhcmdWYWx1ZXM6OlwiLCBhcmdWYWx1ZXMpXG4gICAgICAgIHJldHVybiBmbj8uKGFyZ1ZhbHVlcywgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0QmluYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBCaW5hcnlFeHByZXNzaW9uQVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgbGVmdCA9IG5vZGUubGVmdDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgICAgICBjb25zdCBvcCA9IG5vZGUub3BlcmF0aW9uO1xuICAgICAgICBjb25zdCBsVmFsdWUgPSB0aGlzLnZpc2l0KGxlZnQpO1xuICAgICAgICBjb25zdCByVmFsdWUgPSB0aGlzLnZpc2l0KHJpZ2h0KTtcbiAgICAgICAgc3dpdGNoIChvcC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5wbHVzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSArIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2xWYWx1ZX0ke3JWYWx1ZX1gO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubWludXM6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIC0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcobFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzU3RyaW5nKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJWYWx1ZSAqIGxWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5tdWx0OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAqIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5kaXY6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoclZhbHVlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRpdmlzaW9uIGJ5IDBcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAvIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5tb2Q6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICUgclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmdyZWF0OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA+IHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ncmVhdEVxOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA+PSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGVzczpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPCByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubGVzc0VxOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA8PSByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZXFlcTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlID09PSByVmFsdWU7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ub3RFcTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICE9PSByVmFsdWU7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0VW5hcnlFeHByZXNzaW9uQVNUKG5vZGU6IFVuYXJ5RXhwcmVzc2lvbkFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IG5vZGUuYXJndW1lbnQ7XG4gICAgICAgIGNvbnN0IG9wID0gbm9kZS5vcGVyYXRpb247XG4gICAgICAgIGNvbnN0IGFyZ1ZhbHVlID0gdGhpcy52aXNpdChhcmcpO1xuICAgICAgICBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLm5vdCkge1xuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUoYXJnVmFsdWUpID09PSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW0oYXJnVmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLnBsdXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubWludXMpIHtcbiAgICAgICAgICAgIHJldHVybiAtYXJnVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0SWZTdGF0ZW1lbnRBU1Qobm9kZTogSWZTdGF0ZW1lbnRBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCB0ZXN0Tm9kZTogQVNUID0gbm9kZS50ZXN0O1xuICAgICAgICBjb25zdCB0ZXN0ID0gdGhpcy52aXNpdCh0ZXN0Tm9kZSk7XG4gICAgICAgIGNvbnN0IHRlc3RCb29sVmFsdWUgPSBfYm9vbFZhbHVlKHRlc3QpO1xuXG4gICAgICAgIGlmICh0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52aXNpdChub2RlLmNvbnNlcXVlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQobm9kZS5hbHRlcm5hdGUhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlOiBMb2dpY2FsRXhwcmVzc2lvbkFTVCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGxlZnROb2RlID0gbm9kZS5sZWZ0O1xuICAgICAgICBsZXQgdGVzdCA9IHRoaXMudmlzaXQobGVmdE5vZGUpO1xuICAgICAgICBpZiAobm9kZS5vcGVyYXRvci50eXBlID09PSBUb2tlblR5cGUubnVsbGl0eSkge1xuICAgICAgICAgICAgaWYgKHRlc3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQobm9kZS5yaWdodClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXN0Qm9vbFZhbHVlID0gX2Jvb2xWYWx1ZSh0ZXN0KTtcbiAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IudHlwZSA9PT0gVG9rZW5UeXBlLmFuZCkge1xuICAgICAgICAgICAgaWYgKCF0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUodGhpcy52aXNpdChub2RlLnJpZ2h0KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5vcGVyYXRvci50eXBlID09PSBUb2tlblR5cGUub3IpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZSh0aGlzLnZpc2l0KG5vZGUucmlnaHQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRJbmRleEFjY2Vzc29yQVNUKG5vZGU6IEluZGV4QWNjZXNzb3JBU1QpOiBhbnkge1xuICAgICAgICBjb25zdCBvd25lck5vZGUgPSAobm9kZSBhcyBJbmRleEFjY2Vzc29yQVNUKS5vd25lcjtcbiAgICAgICAgY29uc3Qgb3duZXIgPSB0aGlzLnZpc2l0KG93bmVyTm9kZSk7XG4gICAgICAgIGlmIChvd25lciA9PT0gbnVsbCB8fCBvd25lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG93bmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy52aXNpdChub2RlLmtleSk7XG4gICAgICAgICAgICByZXR1cm4gb3duZXJba2V5XTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG93bmVyKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy52aXNpdChub2RlLmtleSk7XG4gICAgICAgICAgICByZXR1cm4gaXNOdW0oa2V5KSAmJiBvd25lci5sZW5ndGggPCBrZXkgJiYga2V5ID49IDAgPyBvd25lcltrZXldIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRPYmplY3RQcm9wZXJ0eShub2RlOiBBU1QpOiBhbnkgeyB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRPYmplY3RFeHByZXNzaW9uKGFzdDogQVNUKTogYW55IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2U6IGFueSA9IHt9O1xuICAgICAgICBjb25zdCBub2RlID0gYXN0IGFzIE9iamVjdEV4cHJlc3Npb247XG4gICAgICAgIGZvciAoY29uc3QgaXQgb2Ygbm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAoaXQgaW5zdGFuY2VvZiBPYmplY3RQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIGxldCBrZXkgPSB0aGlzLnZpc2l0KGl0LmtleSk7XG4gICAgICAgICAgICAgICAga2V5ID0gaXNTdHJpbmcoa2V5KSA/IGtleSA6IGtleS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGluc3RhbmNlW2tleV0gPSB0aGlzLnZpc2l0KGl0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHZpc2l0QXJyYXlFeHByZXNzaW9uKGFzdDogQVNUKTogYW55IHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGFzdCBhcyBBcnJheUV4cHJlc3Npb247XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLnJlc29sdmVBcmd1bWVudHMobm9kZS5lbGVtZW50cyk7XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRCcmVha0FTVChub2RlOiBCcmVha0FTVCkge1xuICAgICAgICByZXR1cm4gbmV3IEJyZWFrQnJhbmNoKCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdFdoaWxlTG9vcFN0YXRlbWVudChub2RlOiBXaGlsZUxvb3BTdGF0ZW1lbnQpOiBhbnkge1xuICAgICAgICB0aGlzLmxvZyhgV2hpbGVMb29wU3RhdGVtZW50ICR7bm9kZS50ZXN0fSAke25vZGUuYm9keX1gKVxuICAgICAgICBjb25zdCByZXRhaW5lcjogYW55W10gfCB1bmRlZmluZWQgPSBub2RlLnJldGFpbiA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICB3aGlsZSAoX2Jvb2xWYWx1ZSh0aGlzLnZpc2l0KG5vZGUudGVzdCkpKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSB0aGlzLnZpc2l0KG5vZGUuYm9keSlcbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBCcmVha0JyYW5jaCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIENvbnRpbnVlQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IFxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFJldHVybkJyYW5jaCkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRhaW5lciA/PyBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdEZvckxvb3BTdGF0ZW1lbnQobm9kZTogRm9yTG9vcFN0YXRlbWVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHJldGFpbmVyOiBhbnlbXSB8IHVuZGVmaW5lZCA9IG5vZGUucmV0YWluID8gW10gOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGxvb3BJZGVudGlmaWVyID0gbm9kZS5pbml0LmlkZW50aWZpZXJcbiAgICAgICAgaWYgKCEobG9vcElkZW50aWZpZXIgaW5zdGFuY2VvZiBJZGVudGlmaWVyQVNUKSkgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBpZGVudGlmZXIgZm91bmRcIilcbiAgICAgICAgdGhpcy5wdXNoU2NvcGUoXCJGb3JMb29wU3RhdGVtZW50XCIpO1xuICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSB0aGlzLnZpc2l0KG5vZGUuaW5pdC5pbml0KVxuICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGxvb3BJZGVudGlmaWVyLnZhbHVlLCBpbml0aWFsVmFsdWUpXG4gICAgICAgIHJldGFpbmVyPy5wdXNoKGluaXRpYWxWYWx1ZSlcbiAgICAgICAgY29uc3QgdGVzdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS50ZXN0KVxuICAgICAgICAgICAgaWYgKGlzTnVtKHJldCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZGlyZWN0aW9uLnR5cGUgPT09IFRva2VuVHlwZS51cCA/IHJldCA+PSB0bXAgOiByZXQgPD0gdG1wXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShyZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gdGhpcy52aXNpdChub2RlLnVwZGF0ZSk7XG4gICAgICAgICAgICBpZiAoaXNOdW0odXBkYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gYXV0byBoYW5kbGVcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW0odG1wKSkgdGhyb3cgRXJyb3IoXCJDYW50IHVwZGF0ZSB2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGxvb3BJZGVudGlmaWVyLnZhbHVlLCBub2RlLmRpcmVjdGlvbi50eXBlID09PSBUb2tlblR5cGUudXAgPyB0bXAgKyB1cGRhdGVWYWx1ZSA6IHRtcCAtIHVwZGF0ZVZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVcGRhdGUgdmFsdWUgY2FudCBiZSBub24gbnVtYmVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0ZXN0KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IHRoaXMudmlzaXQobm9kZS5ib2R5KVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEJyZWFrQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQ29udGludWVCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBSZXR1cm5CcmFuY2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldGFpbmVyPy5wdXNoKHJldClcbiAgICAgICAgICAgIC8vIHVwZGF0ZVxuICAgICAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gcmV0YWluZXIgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRGb3JPZlN0YXRlbWVudChub2RlOiBGb3JPZlN0YXRlbWVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLnZpc2l0KG5vZGUuY29sbGVjdGlvbik7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW4gaXRlcmF0ZSBub24gYXJyYXkgb2JqZWN0XCIpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV0YWluZXI6IGFueVtdIHwgdW5kZWZpbmVkID0gbm9kZS5yZXRhaW4gPyBbXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wdXNoU2NvcGUoXCJGb3JPZlN0YXRlbWVudFwiKTtcbiAgICAgICAgZm9yIChjb25zdCBpdCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWNsYXJlRm9ySWRlbnRpZmllcihub2RlLmlkZW50aWZpZXIsIGl0KVxuICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy52aXNpdChub2RlLmJvZHkpXG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQnJlYWtCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBDb250aW51ZUJyYW5jaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIFJldHVybkJyYW5jaCkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0YWluZXI/LnB1c2gocmV0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgcmV0dXJuIHJldGFpbmVyID8/IG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSB2aXNpdENvbnRpbnVlQVNUKG5vZGU6IENvbnRpbnVlQVNUKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udGludWVCcmFuY2goKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIHZpc2l0UmV0dXJuQVNUKG5vZGU6IFJldHVybkFTVCk6IGFueSB7XG4gICAgICAgIHJldHVybiBuZXcgUmV0dXJuQnJhbmNoKG5vZGUudmFsdWUgIT0gbnVsbCA/IHRoaXMudmlzaXQobm9kZS52YWx1ZSkgOiBudWxsKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIF9kZWNsYXJlRm9ySWRlbnRpZmllcihub2RlOiBBU1QsIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIFR1cGxlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiVW5hYmxlIHRvIG1ha2UgYSB0dXBsZSBmcm9tIG5vbiBBcnJheSBlbGVtZW50XCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKChub2RlLmZpcnN0IGFzIElkZW50aWZpZXJBU1QpLnZhbHVlLCB2YWx1ZVswXSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKChub2RlLnNlY29uZCBhcyBJZGVudGlmaWVyQVNUKS52YWx1ZSwgdmFsdWVbMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhbmdlVmFyaWFibGUoKG5vZGUgYXMgSWRlbnRpZmllckFTVCkudmFsdWUsIHZhbHVlKTtcbiAgICB9XG4gICAgcmVzb2x2ZUFyZ3VtZW50cyhhcmdzOiBBU1RbXSk6IGFueSB7XG4gICAgICAgIHJldHVybiBhcmdzLm1hcCgoaXQ6IEFTVCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaXQoaXQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0RnVuY3Rpb25SZXNvbHZlcihyZXNvbHZlcjogKG5hbWU6IHN0cmluZykgPT4gTUV2ZW50b0ZCaW5kaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2Z1bmN0aW9uUmVzb2x2ZXIgPSByZXNvbHZlcjtcbiAgICB9XG4gICAgcmVzb2x2ZUZ1bmN0aW9uKG5hbWU6IHN0cmluZyk6IE1FdmVudG9GQmluZGluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtuYW1lXSA/PyB0aGlzLl9mdW5jdGlvblJlc29sdmVyPy4obmFtZSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZywgZm46IE1FdmVudG9GQmluZGluZykge1xuICAgICAgICB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtpZF0gPSBmbjtcbiAgICB9XG5cbiAgICB1bnJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZykge1xuICAgICAgICBkZWxldGUgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbaWRdO1xuICAgIH1cblxuICAgIGV4ZWN1dGUoc291cmNlOiBzdHJpbmcsIGNhY2hlID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBNRXZlbnRvLmNvbXBpbGUoc291cmNlLCBjYWNoZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0KG1vZHVsZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvbXBpbGUoc291cmNlOiBzdHJpbmcsIGNhY2hlID0gZmFsc2UpOiBBU1Qge1xuICAgICAgICBjb25zdCBoYXNoID0gaGFzaENvZGUoc291cmNlKTtcbiAgICAgICAgaWYgKGNhY2hlICYmIHRoaXMuX2NhY2hlLmhhcyhoYXNoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlLmdldChoYXNoKSE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGV4ZXIgPSBuZXcgTGV4ZXIoc291cmNlKTtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihsZXhlcik7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IHBhcnNlci5wYXJzZSgpO1xuXG4gICAgICAgIGlmIChjYWNoZSkgdGhpcy5fY2FjaGUuc2V0KGhhc2gsIG1vZHVsZSk7XG4gICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlZ2lzdGVyKGlkOiBzdHJpbmcsIGZuOiBNRXZlbnRvRkJpbmRpbmcpIHtcbiAgICAgICAgTUV2ZW50by5fZ2xvYmFsRnVuY3Rpb25zUmVnaXN0cnlbaWRdID0gZm47XG4gICAgfVxuXG4gICAgc3RhdGljIHVucmVnaXN0ZXIoaWQ6IHN0cmluZykge1xuICAgICAgICBkZWxldGUgTUV2ZW50by5fZ2xvYmFsRnVuY3Rpb25zUmVnaXN0cnlbaWRdO1xuICAgIH1cblxuICAgIHN0YXRpYyBydW4oc291cmNlOiBzdHJpbmcsIGNhY2hlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgbWV2ZW50byA9IG5ldyBNRXZlbnRvKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IE1FdmVudG8uY29tcGlsZShzb3VyY2UsIGNhY2hlKTtcbiAgICAgICAgcmV0dXJuIG1ldmVudG8udmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbmV3SW5zdGFuY2UoKTogTUV2ZW50byB7XG4gICAgICAgIC8vIGNvbnN0IGxleGVyID0gTGV4ZXIoc291cmNlKTtcbiAgICAgICAgLy8gY29uc3QgcGFyc2VyID0gUGFyc2VyKGxleGVyKTtcbiAgICAgICAgLy8gY29uc3QgbW9kdWxlID0gcGFyc2VyLnBhcnNlKCk7XG4gICAgICAgIHJldHVybiBuZXcgTUV2ZW50bygpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IE1FdmVudG8ge1xuICAgICAgICB2YXIgcmV0ID0gbmV3IE1FdmVudG8oKTtcbiAgICAgICAgcmV0Ll9mdW5jdGlvbnNSZWdpc3RyeSA9IHsgLi4uIHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5IH07XG4gICAgICAgIHJldC5yb290U2NvcGUubWVtb3J5ID0geyAuLi50aGlzLnJvb3RTY29wZS5tZW1vcnkgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgbmV3QXN5bmNJbnN0YW5jZSgpOiBNRXZlbnRvQXN5bmMge1xuICAgICAgICBjb25zdCBhc3luY0lucyA9IE1FdmVudG9Bc3luYy5uZXdJbnN0YW5jZSgpO1xuICAgICAgICBhc3luY0lucy5yb290U2NvcGUubWVtb3J5ID0gdGhpcy5yb290U2NvcGUubWVtb3J5O1xuICAgICAgICAvLy8gPz8/P1xuICAgICAgICBhc3luY0lucy5fZnVuY3Rpb25zUmVnaXN0cnkgPSB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeTtcbiAgICAgICAgcmV0dXJuIGFzeW5jSW5zO1xuICAgIH07XG5cbn1cblxuZXhwb3J0IGNsYXNzIE1FdmVudG9Bc3luYyBleHRlbmRzIE1FdmVudG8ge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0Um9vdEFTVChub2RlOiBSb290QVNUKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBub2RlLmJvZHk7XG4gICAgICAgIGxldCBsYXN0O1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgbGlzdCkge1xuICAgICAgICAgICAgbGFzdCA9IGF3YWl0IHRoaXMudmlzaXQobik7XG4gICAgICAgICAgICBpZiAobGFzdCBpbnN0YW5jZW9mIFJldHVybkJyYW5jaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0O1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRCbG9ja1N0YXRlbWVudEFTVChub2RlOiBCbG9ja1N0YXRlbWVudEFTVCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBub2RlLmJvZHk7XG4gICAgICAgIGxldCBsYXN0O1xuICAgICAgICB0aGlzLnB1c2hTY29wZShcIkJsb2NrXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgbGlzdCkge1xuICAgICAgICAgICAgbGFzdCA9IGF3YWl0IHRoaXMudmlzaXQobik7XG4gICAgICAgICAgICBpZiAobGFzdCBpbnN0YW5jZW9mIExvb3BDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGFzdCBpbnN0YW5jZW9mIFJldHVybkJyYW5jaCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICAgICAgcmV0dXJuIGxhc3Q7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdElkZW50aWZpZXJBU1Qobm9kZTogQVNUKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaWQgPSAobm9kZSBhcyBJZGVudGlmaWVyQVNUKS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZShpZCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdExpdGVyYWxBU1Qobm9kZTogTGl0ZXJhbEFTVCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRBc3NpZ25tZW50RXhwcmVzc2lvbkFTVChub2RlOiBBc3NpZ25tZW50RXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBpZDogQVNUID0gbm9kZS5pZGVudGlmaWVyO1xuXG4gICAgICAgIGNvbnN0IGluaXQ6IEFTVCA9IG5vZGUuaW5pdDtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBudWxsO1xuICAgICAgICBpZiAoaWQgaW5zdGFuY2VvZiBJbmRleEFjY2Vzc29yQVNUKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gYXdhaXQgdGhpcy52aXNpdChpZC5vd25lcik7XG4gICAgICAgICAgICB2YWx1ZSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5pbml0KTtcbiAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGF3YWl0IHRoaXMudmlzaXQoaWQua2V5KTtcbiAgICAgICAgICAgIHRoaXMuYXNzaWduUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlkIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCkge1xuICAgICAgICAgICAgdmFsdWUgPSBhd2FpdCB0aGlzLnZpc2l0KGluaXQpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VWYXJpYWJsZShpZC52YWx1ZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudEFTVChub2RlOiBFeHByZXNzaW9uU3RhdGVtZW50QVNUKSB7XG4gICAgICAgIGNvbnN0IGV4cHIgPSBub2RlLmV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZpc2l0KGV4cHIpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRDYWxsRXhwcmVzc2lvbkFTVChub2RlOiBDYWxsRXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBjYWxsZWUgPSBub2RlLmNhbGxlZTtcbiAgICAgICAgY29uc3QgYXJncyA9IG5vZGUuYXJndW1lbnRzO1xuICAgICAgICBjb25zdCBjYWxsZWVOYW1lID0gY2FsbGVlLnZhbHVlO1xuICAgICAgICBjb25zdCBmbiA9IHRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5W2NhbGxlZU5hbWVdO1xuICAgICAgICBjb25zdCBhcmdWYWx1ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChhcmdzLm1hcCgoZSkgPT4gdGhpcy52aXNpdChlKSkpO1xuICAgICAgICAvLyBwcmludChcImFyZ1ZhbHVlczo6XCIsIGFyZ1ZhbHVlcylcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZuPy4oYXJnVmFsdWVzLCB0aGlzKTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0QmluYXJ5RXhwcmVzc2lvbkFTVChub2RlOiBCaW5hcnlFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBub2RlLmxlZnQ7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gbm9kZS5yaWdodDtcbiAgICAgICAgY29uc3Qgb3AgPSBub2RlLm9wZXJhdGlvbjtcbiAgICAgICAgY29uc3QgbFZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChsZWZ0KTtcbiAgICAgICAgY29uc3QgclZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChyaWdodCk7XG4gICAgICAgIHN3aXRjaCAob3AudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUucGx1czpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKyByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtsVmFsdWV9JHtyVmFsdWV9YDtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLm1pbnVzOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAtIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlICogclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc1N0cmluZyhyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByVmFsdWUgKiBsVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgKiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZGl2OlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJWYWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkaXZpc2lvbiBieSAwXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgLyByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubW9kOlxuICAgICAgICAgICAgICAgIGlmIChpc051bShsVmFsdWUpICYmIGlzTnVtKHJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAlIHJWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ncmVhdDpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPiByVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7b3AudmFsdWV9IG5vdCBhbGxvd2VkIG5vIG51bSB2YWx1ZWApO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuZ3JlYXRFcTpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPj0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxlc3M6XG4gICAgICAgICAgICAgICAgaWYgKGlzTnVtKGxWYWx1ZSkgJiYgaXNOdW0oclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbFZhbHVlIDwgclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmxlc3NFcTpcbiAgICAgICAgICAgICAgICBpZiAoaXNOdW0obFZhbHVlKSAmJiBpc051bShyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsVmFsdWUgPD0gclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLmVxZXE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSA9PT0gclZhbHVlO1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUubm90RXE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZSAhPT0gclZhbHVlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRVbmFyeUV4cHJlc3Npb25BU1Qobm9kZTogVW5hcnlFeHByZXNzaW9uQVNUKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IG5vZGUuYXJndW1lbnQ7XG4gICAgICAgIGNvbnN0IG9wID0gbm9kZS5vcGVyYXRpb247XG4gICAgICAgIGNvbnN0IGFyZ1ZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChhcmcpO1xuICAgICAgICBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLm5vdCkge1xuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUoYXJnVmFsdWUpID09PSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW0oYXJnVmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke29wLnZhbHVlfSBub3QgYWxsb3dlZCBubyBudW0gdmFsdWVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3AudHlwZSA9PT0gVG9rZW5UeXBlLnBsdXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChvcC50eXBlID09PSBUb2tlblR5cGUubWludXMpIHtcbiAgICAgICAgICAgIHJldHVybiAtYXJnVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtvcC52YWx1ZX0gbm90IGFsbG93ZWQgbm8gbnVtIHZhbHVlYCk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSAgYXN5bmMgdmlzaXRJZlN0YXRlbWVudEFTVChub2RlOiBJZlN0YXRlbWVudEFTVCkge1xuICAgICAgICBjb25zdCB0ZXN0Tm9kZTogQVNUID0gbm9kZS50ZXN0O1xuICAgICAgICBjb25zdCB0ZXN0ID0gYXdhaXQgdGhpcy52aXNpdCh0ZXN0Tm9kZSk7XG4gICAgICAgIGNvbnN0IHRlc3RCb29sVmFsdWUgPSBfYm9vbFZhbHVlKHRlc3QpO1xuXG4gICAgICAgIGlmICh0ZXN0Qm9vbFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy52aXNpdChub2RlLmNvbnNlcXVlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQobm9kZS5hbHRlcm5hdGUhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbkFTVChub2RlOiBMb2dpY2FsRXhwcmVzc2lvbkFTVCkge1xuICAgICAgICBjb25zdCBsZWZ0Tm9kZSA9IG5vZGUubGVmdDtcbiAgICAgICAgbGV0IHRlc3QgPSBhd2FpdCB0aGlzLnZpc2l0KGxlZnROb2RlKTtcbiAgICAgICAgaWYgKG5vZGUub3BlcmF0b3IudHlwZSA9PT0gVG9rZW5UeXBlLm51bGxpdHkpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnZpc2l0KG5vZGUucmlnaHQpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGVzdEJvb2xWYWx1ZSA9IF9ib29sVmFsdWUodGVzdCk7XG4gICAgICAgIGlmIChub2RlLm9wZXJhdG9yLnR5cGUgPT09IFRva2VuVHlwZS5hbmQpIHtcbiAgICAgICAgICAgIGlmICghdGVzdEJvb2xWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfYm9vbFZhbHVlKGF3YWl0IHRoaXMudmlzaXQobm9kZS5yaWdodCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9wZXJhdG9yLnR5cGUgPT09IFRva2VuVHlwZS5vcikge1xuICAgICAgICAgICAgaWYgKHRlc3RCb29sVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIF9ib29sVmFsdWUoYXdhaXQgdGhpcy52aXNpdChub2RlLnJpZ2h0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRJbmRleEFjY2Vzc29yQVNUKG5vZGU6IEluZGV4QWNjZXNzb3JBU1QpIHtcbiAgICAgICAgY29uc3Qgb3duZXJOb2RlID0gKG5vZGUgYXMgSW5kZXhBY2Nlc3NvckFTVCkub3duZXI7XG4gICAgICAgIGNvbnN0IG93bmVyID0gYXdhaXQgdGhpcy52aXNpdChvd25lck5vZGUpO1xuICAgICAgICBpZiAob3duZXIgPT09IG51bGwgfHwgb3duZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBvd25lciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5rZXkpO1xuICAgICAgICAgICAgcmV0dXJuIG93bmVyW2tleV07XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvd25lcikpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5rZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGlzTnVtKGtleSkgJiYgb3duZXIubGVuZ3RoIDwga2V5ICYmIGtleSA+PSAwID8gb3duZXJba2V5XSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdE9iamVjdFByb3BlcnR5KG5vZGU6IEFTVCkgeyB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRPYmplY3RFeHByZXNzaW9uKGFzdDogQVNUKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlOiBhbnkgPSB7fTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGFzdCBhcyBPYmplY3RFeHByZXNzaW9uO1xuICAgICAgICBmb3IgKGNvbnN0IGl0IG9mIG5vZGUucHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKGl0IGluc3RhbmNlb2YgT2JqZWN0UHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gYXdhaXQgdGhpcy52aXNpdChpdC5rZXkpO1xuICAgICAgICAgICAgICAgIGtleSA9IGlzU3RyaW5nKGtleSkgPyBrZXkgOiBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gYXdhaXQgdGhpcy52aXNpdChpdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEFycmF5RXhwcmVzc2lvbihhc3Q6IEFTVCkge1xuICAgICAgICBjb25zdCBub2RlID0gYXN0IGFzIEFycmF5RXhwcmVzc2lvbjtcbiAgICAgICAgY29uc3QgYXJncyA9IGF3YWl0IHRoaXMucmVzb2x2ZUFyZ3VtZW50c0FzeW5jKG5vZGUuZWxlbWVudHMpO1xuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHZpc2l0V2hpbGVMb29wU3RhdGVtZW50KG5vZGU6IFdoaWxlTG9vcFN0YXRlbWVudCkge1xuICAgICAgICB0aGlzLmxvZyhgV2hpbGVMb29wU3RhdGVtZW50ICR7bm9kZS50ZXN0fSAke25vZGUuYm9keX1gKVxuICAgICAgICBjb25zdCByZXRhaW5lcjogYW55W10gfCB1bmRlZmluZWQgPSBub2RlLnJldGFpbiA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICB3aGlsZSAoX2Jvb2xWYWx1ZShhd2FpdCB0aGlzLnZpc2l0KG5vZGUudGVzdCkpKSB7XG4gICAgICAgICAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnZpc2l0KG5vZGUuYm9keSlcbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBCcmVha0JyYW5jaCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIENvbnRpbnVlQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgUmV0dXJuQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXRhaW5lcj8ucHVzaChyZXQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldGFpbmVyO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB2aXNpdEZvckxvb3BTdGF0ZW1lbnQobm9kZTogRm9yTG9vcFN0YXRlbWVudCkge1xuICAgICAgICBjb25zdCByZXRhaW5lcjogYW55W10gfCB1bmRlZmluZWQgPSBub2RlLnJldGFpbiA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBsb29wSWRlbnRpZmllciA9IG5vZGUuaW5pdC5pZGVudGlmaWVyXG4gICAgICAgIGlmICghKGxvb3BJZGVudGlmaWVyIGluc3RhbmNlb2YgSWRlbnRpZmllckFTVCkpIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgaWRlbnRpZmVyIGZvdW5kXCIpXG4gICAgICAgIHRoaXMucHVzaFNjb3BlKFwiRm9yTG9vcFN0YXRlbWVudFwiKTtcbiAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmluaXQuaW5pdClcbiAgICAgICAgdGhpcy5jaGFuZ2VWYXJpYWJsZShsb29wSWRlbnRpZmllci52YWx1ZSwgaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgcmV0YWluZXI/LnB1c2goaW5pdGlhbFZhbHVlKVxuICAgICAgICBjb25zdCB0ZXN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmV0ID0gYXdhaXQgdGhpcy52aXNpdChub2RlLnRlc3QpXG4gICAgICAgICAgICBpZiAoaXNOdW0ocmV0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IHRoaXMucmVzb2x2ZShsb29wSWRlbnRpZmllci52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZGlyZWN0aW9uLnR5cGUgPT09IFRva2VuVHlwZS51cCA/IHJldCA+PSB0bXAgOiByZXQgPD0gdG1wXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2Jvb2xWYWx1ZShyZXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gYXdhaXQgdGhpcy52aXNpdChub2RlLnVwZGF0ZSk7XG4gICAgICAgICAgICBpZiAoaXNOdW0odXBkYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gYXV0byBoYW5kbGVcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSB0aGlzLnJlc29sdmUobG9vcElkZW50aWZpZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW0odG1wKSkgdGhyb3cgRXJyb3IoXCJDYW50IHVwZGF0ZSB2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVZhcmlhYmxlKGxvb3BJZGVudGlmaWVyLnZhbHVlLCBub2RlLmRpcmVjdGlvbi50eXBlID09PSBUb2tlblR5cGUudXAgPyB0bXAgKyB1cGRhdGVWYWx1ZSA6IHRtcCAtIHVwZGF0ZVZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJVcGRhdGUgdmFsdWUgY2FudCBiZSBub24gbnVtYmVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChhd2FpdCB0ZXN0KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5ib2R5KVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEJyZWFrQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQ29udGludWVCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB1cGRhdGUoKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBSZXR1cm5CcmFuY2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldGFpbmVyPy5wdXNoKHJldClcbiAgICAgICAgICAgIC8vIHVwZGF0ZVxuICAgICAgICAgICAgYXdhaXQgdXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3BTY29wZSgpO1xuICAgICAgICByZXR1cm4gcmV0YWluZXIgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRGb3JPZlN0YXRlbWVudChub2RlOiBGb3JPZlN0YXRlbWVudCkge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gYXdhaXQgdGhpcy52aXNpdChub2RlLmNvbGxlY3Rpb24pO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiQ2FuIGl0ZXJhdGUgbm9uIGFycmF5IG9iamVjdFwiKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldGFpbmVyOiBhbnlbXSB8IHVuZGVmaW5lZCA9IG5vZGUucmV0YWluID8gW10gOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucHVzaFNjb3BlKFwiRm9yT2ZTdGF0ZW1lbnRcIik7XG4gICAgICAgIGZvciAoY29uc3QgaXQgb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZGVjbGFyZUZvcklkZW50aWZpZXIobm9kZS5pZGVudGlmaWVyLCBpdClcbiAgICAgICAgICAgIGNvbnN0IHJldCA9IGF3YWl0IHRoaXMudmlzaXQobm9kZS5ib2R5KVxuICAgICAgICAgICAgaWYgKHJldCBpbnN0YW5jZW9mIEJyZWFrQnJhbmNoKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgQ29udGludWVCcmFuY2gpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXQgaW5zdGFuY2VvZiBSZXR1cm5CcmFuY2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldGFpbmVyPy5wdXNoKHJldClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvcFNjb3BlKCk7XG4gICAgICAgIHJldHVybiByZXRhaW5lcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgdmlzaXRSZXR1cm5BU1Qobm9kZTogUmV0dXJuQVNUKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZXR1cm5CcmFuY2gobm9kZS52YWx1ZSAhPSBudWxsID8gYXdhaXQgdGhpcy52aXNpdChub2RlLnZhbHVlKSA6IG51bGwpO1xuICAgIH1cbiAgICBhc3luYyByZXNvbHZlQXJndW1lbnRzQXN5bmMoYXJnczogQVNUW10pOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChhcmdzLm1hcChhc3luYyAoaXQ6IEFTVCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQoaXQpO1xuICAgICAgICB9KSk7XG4gICAgfVxuICAgIG92ZXJyaWRlIHJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZywgZm46IE1FdmVudG9GQmluZGluZykge1xuICAgICAgICB0aGlzLl9mdW5jdGlvbnNSZWdpc3RyeVtpZF0gPSBmbjtcbiAgICB9XG5cbiAgICBvdmVycmlkZSB1bnJlZ2lzdGVyRnVuY3Rpb24oaWQ6IHN0cmluZykge1xuICAgICAgICBkZWxldGUgdGhpcy5fZnVuY3Rpb25zUmVnaXN0cnlbaWRdO1xuICAgIH1cbiAgICBvdmVycmlkZSAgYXN5bmMgZXhlY3V0ZShzb3VyY2U6IHN0cmluZywgY2FjaGUgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IE1FdmVudG8uY29tcGlsZShzb3VyY2UsIGNhY2hlKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgb3ZlcnJpZGUgYXN5bmMgcnVuKHNvdXJjZTogc3RyaW5nLCBjYWNoZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IG1ldmVudG8gPSBuZXcgTUV2ZW50b0FzeW5jKCk7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IE1FdmVudG8uY29tcGlsZShzb3VyY2UsIGNhY2hlKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG1ldmVudG8udmlzaXQobW9kdWxlKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgb3ZlcnJpZGUgbmV3SW5zdGFuY2UoKTogTUV2ZW50b0FzeW5jIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNRXZlbnRvQXN5bmMoKTtcbiAgICB9XG5cblxuICAgIG92ZXJyaWRlIGNsb25lKCk6IE1FdmVudG9Bc3luYyB7XG4gICAgICAgIHZhciByZXQgPSBuZXcgTUV2ZW50b0FzeW5jKCk7XG4gICAgICAgIHJldC5fZnVuY3Rpb25zUmVnaXN0cnkgPSB7IC4uLnRoaXMuX2Z1bmN0aW9uc1JlZ2lzdHJ5IH07XG4gICAgICAgIHJldC5yb290U2NvcGUubWVtb3J5ID0geyAuLi50aGlzLnJvb3RTY29wZS5tZW1vcnkgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG59XG4iXX0=
|