@trudb/tru-common-lib 0.1.281 → 0.1.283
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/esm2022/lib/components/card-column/classes/tru-card-column-search-results-config-base.mjs +1 -1
- package/esm2022/lib/components/card-column/tru-card-column.mjs +73 -16
- package/fesm2022/trudb-tru-common-lib.mjs +72 -15
- package/fesm2022/trudb-tru-common-lib.mjs.map +1 -1
- package/lib/components/card-column/classes/tru-card-column-search-results-config-base.d.ts +1 -0
- package/lib/components/card-column/tru-card-column.d.ts +3 -3
- package/package.json +1 -1
package/esm2022/lib/components/card-column/classes/tru-card-column-search-results-config-base.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export class TruCardColumnSearchResultsConfigBase {
|
|
2
2
|
}
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWNhcmQtY29sdW1uLXNlYXJjaC1yZXN1bHRzLWNvbmZpZy1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtY29sdW1uL2NsYXNzZXMvdHJ1LWNhcmQtY29sdW1uLXNlYXJjaC1yZXN1bHRzLWNvbmZpZy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sT0FBZ0Isb0NBQW9DO0NBTXpEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5UXVlcnkgfSBmcm9tIFwiYnJlZXplLWNsaWVudFwiO1xyXG5pbXBvcnQgeyBUcnVFbnRpdHlCYXNlIH0gZnJvbSBcIi4uLy4uLy4uL2Jhc2UtY2xhc3Nlcy90cnUtZW50aXR5LWJhc2VcIjtcclxuaW1wb3J0IHsgVHJ1Q2FyZENvbHVtbkRhdGEgfSBmcm9tIFwiLi90cnUtY2FyZC1jb2x1bW4tZGF0YVwiO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRydUNhcmRDb2x1bW5TZWFyY2hSZXN1bHRzQ29uZmlnQmFzZSB7XHJcbiAgYWJzdHJhY3Qgcm93RGF0YUVuaGFuY2VyOiAoKSA9PiBUcnVDYXJkQ29sdW1uRGF0YTtcclxuICBhYnN0cmFjdCBjYXJkU29ydDogKGNhcmRzOiBBcnJheTxhbnk+KSA9PiBhbnlcclxuICBhYnN0cmFjdCBxdWVyeT86IChicmVlemVRdWVyeTogRW50aXR5UXVlcnksIHByb3BlcnR5TmFtZTogc3RyaW5nKSA9PiBhbnk7XHJcbiAgYWJzdHJhY3QgY2FyZENvbHVtbklkOiAoZW50aXR5OiBhbnkpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbiAgYWJzdHJhY3QgY2FyZElkOiAoZW50aXR5OiBhbnkpID0+IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbn1cclxuIl19
|
|
@@ -21,8 +21,6 @@ export class TruCardColumn {
|
|
|
21
21
|
childTablePluralLabel;
|
|
22
22
|
parentQuery = null;
|
|
23
23
|
lockProperty;
|
|
24
|
-
unassignedVisible;
|
|
25
|
-
unassignedName;
|
|
26
24
|
unassignedLocked;
|
|
27
25
|
unassignedDraggable;
|
|
28
26
|
unassignedDroppable;
|
|
@@ -47,13 +45,15 @@ export class TruCardColumn {
|
|
|
47
45
|
color;
|
|
48
46
|
unassignedColor;
|
|
49
47
|
key;
|
|
48
|
+
unassignedVisible;
|
|
49
|
+
unassignedName;
|
|
50
|
+
userHasParentTableRole = true; //parentTableModel.canDisplay;
|
|
50
51
|
constructor(dataContext, modelTypeLookup, searchViewEventHandler) {
|
|
51
52
|
this.dataContext = dataContext;
|
|
52
53
|
this.modelTypeLookup = modelTypeLookup;
|
|
53
54
|
this.searchViewEventHandler = searchViewEventHandler;
|
|
54
55
|
}
|
|
55
56
|
parentTableModel = null; //dataService.model.tables[parentTableName];
|
|
56
|
-
userHasParentTableRole = null; //parentTableModel.canDisplay;
|
|
57
57
|
createDataForEntity = (entity) => {
|
|
58
58
|
var data = this.config.resultConfig.rowDataEnhancer();
|
|
59
59
|
return data;
|
|
@@ -511,11 +511,11 @@ class CardView {
|
|
|
511
511
|
}
|
|
512
512
|
class Column {
|
|
513
513
|
cardColumn;
|
|
514
|
-
data;
|
|
515
514
|
cards = [];
|
|
516
515
|
locked;
|
|
517
516
|
parentElement;
|
|
518
517
|
columnElement;
|
|
518
|
+
data;
|
|
519
519
|
cardScrollPortElement;
|
|
520
520
|
selectAllButton;
|
|
521
521
|
constructor(cardColumn, data, parentElement, locked, index) {
|
|
@@ -531,7 +531,7 @@ class Column {
|
|
|
531
531
|
this.columnElement = columnElement;
|
|
532
532
|
this.cardScrollPortElement = document.createElement('div');
|
|
533
533
|
this.cardScrollPortElement.classList.add('tru-card-portal-card-scroll-port');
|
|
534
|
-
|
|
534
|
+
new ColumnHeader(this.cardColumn, this);
|
|
535
535
|
this.columnElement.appendChild(this.cardScrollPortElement);
|
|
536
536
|
this.columnElement.addEventListener('filter-cards', (e) => {
|
|
537
537
|
this.updateDataByFilter();
|
|
@@ -539,11 +539,6 @@ class Column {
|
|
|
539
539
|
this.updateData();
|
|
540
540
|
this.parentElement.appendChild(this.columnElement);
|
|
541
541
|
}
|
|
542
|
-
addCard = (card) => {
|
|
543
|
-
card.data.$entity[this.cardColumn.key] = this.data.Ref;
|
|
544
|
-
this.data.cards.unshift(card.data);
|
|
545
|
-
this.cards.unshift(new Card(this.cardColumn, this, card.data, true));
|
|
546
|
-
};
|
|
547
542
|
addEmptyCard = () => {
|
|
548
543
|
let emptyCards = _.filter(this.cards, function (card) { return !card.data; });
|
|
549
544
|
if (!emptyCards.length)
|
|
@@ -579,10 +574,6 @@ class Column {
|
|
|
579
574
|
this.addEmptyCard();
|
|
580
575
|
card = null;
|
|
581
576
|
};
|
|
582
|
-
selectAll = (selectAll) => {
|
|
583
|
-
for (var i = 0; i < this.cards.length; i++)
|
|
584
|
-
this.cards[i].selectAll(selectAll);
|
|
585
|
-
};
|
|
586
577
|
updateDataByFilter = () => {
|
|
587
578
|
let cardFilterStr = this.cardColumn.cardFilterStr;
|
|
588
579
|
if (cardFilterStr) {
|
|
@@ -638,6 +629,15 @@ class Column {
|
|
|
638
629
|
this.addEmptyCard();
|
|
639
630
|
}
|
|
640
631
|
};
|
|
632
|
+
selectAll = (selectAll) => {
|
|
633
|
+
for (var i = 0; i < this.cards.length; i++)
|
|
634
|
+
this.cards[i].selectAll(selectAll);
|
|
635
|
+
};
|
|
636
|
+
addCard = (card) => {
|
|
637
|
+
card.data.$entity[this.cardColumn.key] = this.data.Ref;
|
|
638
|
+
this.data.cards.unshift(card.data);
|
|
639
|
+
this.cards.unshift(new Card(this.cardColumn, this, card.data, true));
|
|
640
|
+
};
|
|
641
641
|
}
|
|
642
642
|
class Card {
|
|
643
643
|
cardColumn;
|
|
@@ -719,7 +719,7 @@ class Card {
|
|
|
719
719
|
}
|
|
720
720
|
else {
|
|
721
721
|
var cardText = document.createElement('p');
|
|
722
|
-
let value = this.cardColumn.config.resultConfig.cardId(this.data
|
|
722
|
+
let value = this.cardColumn.config.resultConfig.cardId(this.data);
|
|
723
723
|
if (value)
|
|
724
724
|
cardText.innerHTML = value;
|
|
725
725
|
this.cardElement.appendChild(cardText);
|
|
@@ -736,4 +736,61 @@ class Card {
|
|
|
736
736
|
}
|
|
737
737
|
};
|
|
738
738
|
}
|
|
739
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWNhcmQtY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtY29sdW1uL3RydS1jYXJkLWNvbHVtbi50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9jYXJkLWNvbHVtbi90cnUtY2FyZC1jb2x1bW4uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUtwQyxPQUFPLEVBQWdCLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQVVwRCxNQUFNLE9BQU8sYUFBYTtJQTZDZDtJQUNBO0lBQ0E7SUE5Q0QsTUFBTSxDQUF1QjtJQUM3QixJQUFJLENBQU87SUFFd0IsTUFBTSxDQUFjO0lBRXhELGVBQWUsQ0FBVTtJQUN6QixzQkFBc0IsQ0FBVTtJQUNoQyxjQUFjLENBQVU7SUFDeEIscUJBQXFCLENBQVU7SUFDL0IsV0FBVyxHQUFHLElBQUksQ0FBQztJQUNuQixZQUFZLENBQWlCO0lBRTdCLGlCQUFpQixDQUFXO0lBQzVCLGNBQWMsQ0FBaUI7SUFDL0IsZ0JBQWdCLENBQVU7SUFDMUIsbUJBQW1CLENBQVc7SUFDOUIsbUJBQW1CLENBQVc7SUFFOUIsZUFBZSxDQUFXO0lBQzFCLGlCQUFpQixDQUFXO0lBQzVCLGlCQUFpQixDQUFXO0lBRTVCLFVBQVUsQ0FBc0M7SUFDaEQsUUFBUSxDQUFvQztJ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QUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFeEMsSUFBSSxzQkFBc0IsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pELHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUM1RCxzQkFBc0IsQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7WUFFckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICd1bmRlcnNjb3JlJztcclxuaW1wb3J0IHsgYnJlZXplIH0gZnJvbSAnYnJlZXplLWNsaWVudCc7XHJcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBUcnVEYXRhQ29udGV4dCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1kYXRhLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBUcnVFbnRpdHlCYXNlIH0gZnJvbSAnLi4vLi4vYmFzZS1jbGFzc2VzL3RydS1lbnRpdHktYmFzZSc7XHJcbmltcG9ydCB7IFRydU1vZGVsVHlwZUxvb2t1cCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RydS1tb2RlbC10eXBlLWxvb2t1cCc7XHJcbmltcG9ydCB7IElUcnVDYXJkQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi9jbGFzc2VzL3RydS1jYXJkLWNvbHVtbi1jb25maWcnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZvcmtKb2luLCBza2lwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRydVNlYXJjaFZpZXdFdmVudEhhbmRsZXIgfSBmcm9tICcuLi8uLi9iYXNlLXZpZXdzL3NlYXJjaC9zZXJ2aWNlcy90cnUtc2VhcmNoLXZpZXctZXZlbnQtaGFuZGxlcic7XHJcbmltcG9ydCB7IEhUTUwgfSBmcm9tICduZ3gtZWRpdG9yL2xpYi90cnVzdGVkVHlwZXNVdGlsJztcclxuaW1wb3J0IHsgcmVzdWx0IH0gZnJvbSAnbG9kYXNoJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHJ1LWNhcmQtY29sdW1uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHJ1LWNhcmQtY29sdW1uLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RydS1jYXJkLWNvbHVtbi5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJ1Q2FyZENvbHVtbiB7XHJcbiAgQElucHV0KCkgY29uZmlnITogSVRydUNhcmRDb2x1bW5Db25maWdcclxuICBASW5wdXQoKSBuYW1lITogYW55O1xyXG5cclxuICBAVmlld0NoaWxkKCdjYXJkUG9ydGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHBvcnRhbCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgcGFyZW50VGFibGVOYW1lITogc3RyaW5nO1xyXG4gIHByaXZhdGUgcGFyZW50VGFibGVQbHVyYWxMYWJlbCE6IHN0cmluZztcclxuICBwcml2YXRlIGNoaWxkVGFibGVOYW1lITogc3RyaW5nO1xyXG4gIHByaXZhdGUgY2hpbGRUYWJsZVBsdXJhbExhYmVsITogc3RyaW5nO1xyXG4gIHByaXZhdGUgcGFyZW50UXVlcnkgPSBudWxsO1xyXG4gIHByaXZhdGUgbG9ja1Byb3BlcnR5ITogc3RyaW5nIHwgbnVsbDtcclxuICBcclxuICBwcml2YXRlIHVuYXNzaWduZWRWaXNpYmxlITogYm9vbGVhbjtcclxuICBwcml2YXRlIHVuYXNzaWduZWROYW1lITogc3RyaW5nIHwgbnVsbDtcclxuICBwcml2YXRlIHVuYXNzaWduZWRMb2NrZWQhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB1bmFzc2lnbmVkRHJhZ2dhYmxlITogYm9vbGVhbjtcclxuICBwcml2YXRlIHVuYXNzaWduZWREcm9wcGFibGUhOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIGluYWN0aXZlVmlzaWJsZSE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBpbmFjdGl2ZURyYWdnYWJsZSE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBpbmFjdGl2ZURyb3BwYWJsZSE6IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgY29sdW1uU29ydDogKChjb2x1bW5zOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBjYXJkU29ydDogKChjYXJkczogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIHJlbGF0ZWRQYXJlbnROYW1lITogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVsYXRlZENoaWxkTmFtZSE6IHN0cmluZztcclxuICBwcml2YXRlIGluc2VydEJlZm9yZTogYW55O1xyXG4gIHByaXZhdGUgdW5pcXVlSWQhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzdWJzOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcblxyXG4gIGJ1c3lNZXNzYWdlOiBzdHJpbmcgPSAnUmVuZGVyaW5nLi4uJztcclxuICBpc0J1c3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb2x1bW5zOiBhbnkgPSBbXTtcclxuICBjYXJkczogYW55ID0gW107XHJcbiAgbG9ja2VkQ29sdW1uczogYW55ID0gW107XHJcbiAgY29sdW1uRmlsdGVyUmVmcyA9IFtdO1xyXG4gIGNhcmRGaWx0ZXJTdHI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHNlbGVjdGVkQ2FyZHM6IEFycmF5PENhcmQ+ID0gW107XHJcbiAgY29sb3IhOiBzdHJpbmcgfCBudWxsO1xyXG4gIHVuYXNzaWduZWRDb2xvciE6IHN0cmluZyB8IG51bGw7XHJcbiAga2V5ITogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGF0YUNvbnRleHQ6IFRydURhdGFDb250ZXh0LFxyXG4gICAgcHJpdmF0ZSBtb2RlbFR5cGVMb29rdXA6IFRydU1vZGVsVHlwZUxvb2t1cCxcclxuICAgIHByaXZhdGUgc2VhcmNoVmlld0V2ZW50SGFuZGxlcjogVHJ1U2VhcmNoVmlld0V2ZW50SGFuZGxlcikge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJlbnRUYWJsZU1vZGVsID0gbnVsbDsvL2RhdGFTZXJ2aWNlLm1vZGVsLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdO1xyXG4gIHByaXZhdGUgdXNlckhhc1BhcmVudFRhYmxlUm9sZSA9IG51bGw7IC8vcGFyZW50VGFibGVNb2RlbC5jYW5EaXNwbGF5O1xyXG5cclxuICBwcml2YXRlIGNyZWF0ZURhdGFGb3JFbnRpdHkgPSAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICB2YXIgZGF0YSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5yb3dEYXRhRW5oYW5jZXIoKTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFzVW5kZWZpbmVkQ2hpbGRyZW4gPSAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICB0eXBlIEVudGl0eU9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBlbnRpdHlQcm9wZXJ0eU5hbWUgPSB0aGlzLmNvbmZpZy5wYXJlbnRUb0NoaWxkUmVsYXRpb25zaGlwTmFtZSBhcyBFbnRpdHlPYmplY3RLZXk7XHJcbiAgICByZXR1cm4gIWVudGl0eVtlbnRpdHlQcm9wZXJ0eU5hbWVdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNFbXB0eUNoaWxkcmVuID0gKGVudGl0eTogVHJ1RW50aXR5QmFzZSkgPT4ge1xyXG4gICAgdHlwZSBFbnRpdHlPYmplY3RLZXkgPSBrZXlvZiB0eXBlb2YgZW50aXR5O1xyXG4gICAgY29uc3QgZW50aXR5UHJvcGVydHlOYW1lID0gdGhpcy5jb25maWcucGFyZW50VG9DaGlsZFJlbGF0aW9uc2hpcE5hbWUgYXMgRW50aXR5T2JqZWN0S2V5O1xyXG4gICAgcmV0dXJuICFlbnRpdHlbZW50aXR5UHJvcGVydHlOYW1lXS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc0luYWN0aXZlQ2hpbGRyZW4gPSAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICB0eXBlIEVudGl0eU9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBlbnRpdHlQcm9wZXJ0eU5hbWUgPSB0aGlzLmNvbmZpZy5wYXJlbnRUb0NoaWxkUmVsYXRpb25zaGlwTmFtZSBhcyBFbnRpdHlPYmplY3RLZXk7XHJcbiAgICByZXR1cm4gXy5ldmVyeShbZW50aXR5UHJvcGVydHlOYW1lXSwgKGNoaWxkOiBhbnkpID0+IHsgcmV0dXJuICFjaGlsZC5hY3RpdmU7IH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNBZGRlZFVuc2F2ZWRDaGlsZHJlbiA9IChlbnRpdGllczogQXJyYXk8VHJ1RW50aXR5QmFzZT4sIHBhcmVudFJlZjogbnVtYmVyKSA9PiB7XHJcbiAgICByZXR1cm4gXy5zb21lKGVudGl0aWVzLCAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICAgIHR5cGUgRW50aXR5T2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIGVudGl0eTtcclxuICAgICAgY29uc3QgZW50aXR5UHJvcGVydHlOYW1lID0gdGhpcy5rZXkgYXMgRW50aXR5T2JqZWN0S2V5O1xyXG4gICAgICByZXR1cm4gZW50aXR5W2VudGl0eVByb3BlcnR5TmFtZV0gPT09IHBhcmVudFJlZlxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyID0gKCkgPT4ge1xyXG4gICAgdmFyIGxvY2tlZENvbHVtbnMgPSB0aGlzLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sb2NrZWQtY29sdW1ucycpWzBdO1xyXG4gICAgdmFyIHVubG9ja2VkQ29sdW1ucyA9IHRoaXMucG9ydGFsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnVubG9ja2VkLWNvbHVtbnMnKVswXTtcclxuXHJcbiAgICB3aGlsZSAobG9ja2VkQ29sdW1ucyAmJiBsb2NrZWRDb2x1bW5zLmxhc3RDaGlsZCkgeyBsb2NrZWRDb2x1bW5zLnJlbW92ZUNoaWxkKGxvY2tlZENvbHVtbnMubGFzdENoaWxkKTsgfTtcclxuICAgIHdoaWxlICh1bmxvY2tlZENvbHVtbnMgJiYgdW5sb2NrZWRDb2x1bW5zLmxhc3RDaGlsZCkgeyB1bmxvY2tlZENvbHVtbnMucmVtb3ZlQ2hpbGQodW5sb2NrZWRDb2x1bW5zLmxhc3RDaGlsZCk7IH1cclxuICAgIHdoaWxlICh0aGlzLnNlbGVjdGVkQ2FyZHMubGVuZ3RoKSB7IHRoaXMuc2VsZWN0ZWRDYXJkcy5wb3AoKTsgfTtcclxuICAgIC8vdGhpcy5jb25maWcub25TZWxlY3Rpb25DaGFuZ2VkKFtdKTtcclxuICAgIC8vdGhpcy5jb25maWcuY2xlYXJGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFZhbHVlRnJvbVNvcnRQYXRoID0gKGFyZ3M6IFthbnksIHN0cmluZ1tdXSk6IGFueSA9PiB7XHJcbiAgICBsZXQgY3VycmVudDogYW55ID0gYXJnc1swXTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBhcmdzWzFdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwYXJ0TmFtZTogc3RyaW5nO1xyXG4gICAgICBpZiAoaSAhPT0gYXJnc1sxXS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgcGFydE5hbWUgPSAnbycgKyBhcmdzWzFdW2ldO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcnROYW1lID0gYXJnc1sxXVtpXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGN1cnJlbnRbcGFydE5hbWVdKSB7XHJcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGFydE5hbWVdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlSXRlbXNTb3VyY2UobmV3RW50aXRpZXM6IEFycmF5PGFueT4sIHJldmVydDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKCFyZXZlcnQpXHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzY3JvbGxfcG9zaXRpb24nICsgdXVpZHY0KCksICcwJyk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJSZWZzID0gW107XHJcbiAgICB0aGlzLmNhcmRGaWx0ZXJTdHIgPSBudWxsO1xyXG5cclxuICAgIGlmICghbmV3RW50aXRpZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubG9ja2VkQ29sdW1ucyA9IFtdO1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsb2NrZWRDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBsZXQgZW1wdHlQYXJlbnRzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBsZXQgY29sdW1uczogQXJyYXk8YW55PiA9IFtdO1xyXG5cclxuICAgIGxldCBxdWVyeSA9IG5ldyBicmVlemUuRW50aXR5UXVlcnkoJ1F1ZXJ5JyArIHRoaXMucGFyZW50VGFibGVOYW1lKTtcclxuICAgIGxldCBwYXJlbnRSZWZzID0gbmV3RW50aXRpZXMubWFwKChlOiBhbnkpID0+IHsgcmV0dXJuIGVbdGhpcy5wYXJlbnRUYWJsZU5hbWUgKyAnUmVmJ107IH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5xdWVyeSlcclxuICAgICAgcXVlcnkgPSB0aGlzLmNvbmZpZy5xdWVyeShxdWVyeSwgdGhpcy5jb25maWcucGFyZW50VG9DaGlsZFJlbGF0aW9uc2hpcE5hbWUpO1xyXG4gICAgZWxzZVxyXG4gICAgICBxdWVyeSA9IHF1ZXJ5LmV4cGFuZCh0aGlzLmNvbmZpZy5wYXJlbnRUb0NoaWxkUmVsYXRpb25zaGlwTmFtZSk7XHJcblxyXG4gICAgbGV0IHVuaXF1ZVBhcmVudFJlZnMgPSBbLi4ubmV3IFNldChwYXJlbnRSZWZzKV1cclxuICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUodGhpcy5wYXJlbnRUYWJsZU5hbWUgKyAnUmVmJywgJ2luJywgdW5pcXVlUGFyZW50UmVmcyk7XHJcblxyXG4gICAgLy9pZiAodGhpcy5wYXJlbnRRdWVyeSlcclxuICAgIC8vICBxdWVyeSA9IHF1ZXJpZXNbdGhpcy5wYXJlbnRRdWVyeV0ocXVlcnkpO1xyXG5cclxuICAgIHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuY3VzdG9tU2VhcmNoKHRoaXMubW9kZWxUeXBlTG9va3VwLmdldFR5cGUodGhpcy5wYXJlbnRUYWJsZU5hbWUpLCBxdWVyeSkuc3Vic2NyaWJlKChwYXJlbnRzKSA9PiB7XHJcbiAgICAgIC8vdGhpcy5jb25maWcuYWRkUGFyZW50c1RvRmlsdGVyKHBhcmVudHMpO1xyXG5cclxuICAgICAgZW1wdHlQYXJlbnRzID0gXy5maWx0ZXIocGFyZW50cywgKHBhcmVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1VuZGVmaW5lZENoaWxkcmVuKHBhcmVudCkgfHwgdGhpcy5oYXNFbXB0eUNoaWxkcmVuKHBhcmVudCkgfHwgdGhpcy5oYXNJbmFjdGl2ZUNoaWxkcmVuKHBhcmVudCkpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5oYXNBZGRlZFVuc2F2ZWRDaGlsZHJlbihuZXdFbnRpdGllcywgcGFyZW50LlJlZikpIHtcclxuICAgICAgICAgICAgcGFyZW50WydjYXJkcyddID0gW107XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgcXVlcnlhYmxlUGFyZW50UmVmcyA9IF8ucGx1Y2socGFyZW50cywgdGhpcy5rZXkpXHJcblxyXG4gICAgICBsZXQgaW5hY3RpdmVXaXRoUGFyZW50OiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgIGxldCBhY3RpdmVXaXRob3V0UGFyZW50OiBBcnJheTxhbnk+ID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVuYXNzaWduZWQ6IHRydWUsXHJcbiAgICAgICAgICBjYXJkczogW11cclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcblxyXG4gICAgICBwYXJlbnRzLmZvckVhY2goKHBhcmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgcGFyZW50WydjYXJkcyddID0gW107XHJcbiAgICAgICAgaWYgKHF1ZXJ5YWJsZVBhcmVudFJlZnMuaW5kZXhPZihwYXJlbnRbdGhpcy5rZXldKSAhPT0gLTEpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmxvY2tQcm9wZXJ0eSAhPT0gbnVsbCAmJiBwYXJlbnRbdGhpcy5sb2NrUHJvcGVydHldKSB7XHJcbiAgICAgICAgICAgIGxvY2tlZENvbHVtbnMucHVzaChwYXJlbnQpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxvY2tQcm9wZXJ0eSA9PT0gbnVsbCB8fCAhcGFyZW50W3RoaXMubG9ja1Byb3BlcnR5XSAmJiAhXy5jb250YWlucyhlbXB0eVBhcmVudHMsIHBhcmVudCkpIHtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHBhcmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBhcmVudFsnaW5hY3RpdmUnXSA9IHRydWU7XHJcbiAgICAgICAgICBpbmFjdGl2ZVdpdGhQYXJlbnQucHVzaChwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBuZXdFbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcclxuICAgICAgICB2YXIgZW50aXR5UGFyZW50ID0gXy5maW5kKHBhcmVudHMsIChwKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW50aXR5WydvJyArIHRoaXMucmVsYXRlZFBhcmVudE5hbWVdKVxyXG4gICAgICAgICAgICByZXR1cm4gcC5SZWYgPT09IGVudGl0eVsnbycgKyB0aGlzLnJlbGF0ZWRQYXJlbnROYW1lXS5SZWY7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChlbnRpdHlQYXJlbnQpIHtcclxuICAgICAgICAgIGlmIChxdWVyeWFibGVQYXJlbnRSZWZzLmluZGV4T2YoZW50aXR5UGFyZW50W3RoaXMua2V5XSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGVudGl0eVBhcmVudC5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVudGl0eVBhcmVudC5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgIWVudGl0eVBhcmVudCAmJlxyXG4gICAgICAgICAgZW50aXR5WydvJyArIHRoaXMucmVsYXRlZFBhcmVudE5hbWVdICYmXHJcbiAgICAgICAgICBlbnRpdHlbJ28nICsgdGhpcy5yZWxhdGVkUGFyZW50TmFtZV0uUmVmID4gMCkge1xyXG4gICAgICAgICAgbGV0IGluYWN0aXZlUGFyZW50ID0gZW50aXR5WydvJyArIHRoaXMucmVsYXRlZFBhcmVudE5hbWVdO1xyXG4gICAgICAgICAgaWYgKGluYWN0aXZlV2l0aFBhcmVudC5pbmRleE9mKGluYWN0aXZlUGFyZW50KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgaW5hY3RpdmVQYXJlbnRbJ2NhcmRzJ10gPSBbXTtcclxuICAgICAgICAgICAgaW5hY3RpdmVQYXJlbnRbJ2luYWN0aXZlJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICBpbmFjdGl2ZVdpdGhQYXJlbnQucHVzaChpbmFjdGl2ZVBhcmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbmFjdGl2ZVBhcmVudC5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYWN0aXZlV2l0aG91dFBhcmVudFswXS5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY29sdW1uU29ydCkge1xyXG4gICAgICAgIHZhciBjb2x1bW5Tb3J0UGFydHMgPSBbJyddOyAvL3RoaXMuY29sdW1uU29ydC5zcGxpdCgnLycpO1xyXG5cclxuICAgICAgICBsb2NrZWRDb2x1bW5zID0gXy5zb3J0QnkobG9ja2VkQ29sdW1ucywgKG8pID0+IHtcclxuICAgICAgICAgIHZhciB2ID0gdGhpcy5nZXRWYWx1ZUZyb21Tb3J0UGF0aChbbywgY29sdW1uU29ydFBhcnRzXSk7XHJcbiAgICAgICAgICBpZiAodilcclxuICAgICAgICAgICAgcmV0dXJuIF8uaXNTdHJpbmcodikgPyB2LnRyaW0oKSA6IHY7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbHVtbnMgPSBfLnNvcnRCeShjb2x1bW5zLCAobykgPT4ge1xyXG4gICAgICAgICAgdmFyIHYgPSB0aGlzLmdldFZhbHVlRnJvbVNvcnRQYXRoKFtvLCBjb2x1bW5Tb3J0UGFydHNdKTtcclxuICAgICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2KSA/IHYudHJpbSgpIDogdjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaW5hY3RpdmVXaXRoUGFyZW50ID0gXy5zb3J0QnkoaW5hY3RpdmVXaXRoUGFyZW50LCAobykgPT4ge1xyXG4gICAgICAgICAgdmFyIHYgPSB0aGlzLmdldFZhbHVlRnJvbVNvcnRQYXRoKFtvLCBjb2x1bW5Tb3J0UGFydHNdKTtcclxuICAgICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2KSA/IHYudHJpbSgpIDogdjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZW1wdHlQYXJlbnRzID0gXy5zb3J0QnkoZW1wdHlQYXJlbnRzLCAobykgPT4ge1xyXG4gICAgICAgICAgdmFyIHYgPSB0aGlzLmdldFZhbHVlRnJvbVNvcnRQYXRoKFtvLCBjb2x1bW5Tb3J0UGFydHNdKTtcclxuICAgICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2KSA/IHYudHJpbSgpIDogdjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcuY2FyZFNvcnQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBsb2NrZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgICAgY29sdW1uLmNhcmRzID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmNhcmRTb3J0KGNvbHVtbi5jYXJkcyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICBjb2x1bW4uY2FyZHMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuY2FyZFNvcnQoY29sdW1uLmNhcmRzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaW5hY3RpdmVXaXRoUGFyZW50LmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgICAgY29sdW1uLmNhcmRzID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmNhcmRTb3J0KGNvbHVtbi5jYXJkcyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGFjdGl2ZVdpdGhvdXRQYXJlbnQuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICBjb2x1bW4uY2FyZHMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuY2FyZFNvcnQoY29sdW1uLmNhcmRzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuaW5hY3RpdmVWaXNpYmxlKVxyXG4gICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChpbmFjdGl2ZVdpdGhQYXJlbnQpO1xyXG5cclxuICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KGVtcHR5UGFyZW50cyk7XHJcblxyXG4gICAgICBpZiAodGhpcy51bmFzc2lnbmVkVmlzaWJsZSAmJiAhdGhpcy51bmFzc2lnbmVkTG9ja2VkKVxyXG4gICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChhY3RpdmVXaXRob3V0UGFyZW50KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnVuYXNzaWduZWRWaXNpYmxlICYmIHRoaXMudW5hc3NpZ25lZExvY2tlZClcclxuICAgICAgICBsb2NrZWRDb2x1bW5zID0gY29sdW1ucy5jb25jYXQobG9ja2VkQ29sdW1ucyk7XHJcblxyXG4gICAgICB0aGlzLmxvY2tlZENvbHVtbnMgPSBsb2NrZWRDb2x1bW5zO1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgIG5ldyBDYXJkVmlldyh0aGlzLCB0aGlzLmxvY2tlZENvbHVtbnMsIHRoaXMuY29sdW1ucyk7XHJcblxyXG4gICAgICAgIGlmIChyZXZlcnQpIHtcclxuICAgICAgICAgIGxldCBjb2x1bW5FbGVtZW50ID0gdGhpcy5wb3J0YWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudHJ1LWNhcmQtcG9ydGFsLWNvbHVtbnMnKVswXTtcclxuICAgICAgICAgIGxldCBwcmV2aW91c1Njcm9sbFBvc2l0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Njcm9sbF9wb3NpdGlvbicgKyB1dWlkdjQoKSk7XHJcbiAgICAgICAgICBjb2x1bW5FbGVtZW50LnNjcm9sbExlZnQgPSBwcmV2aW91c1Njcm9sbFBvc2l0aW9uID8gK3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24gOiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG8gPSAoKSA9PiB7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLnNlYXJjaFZpZXdFdmVudEhhbmRsZXIub25TZWFyY2goKS5waXBlKHNraXAoMSkpLnN1YnNjcmliZSgoc2V0dXBRdWVyeTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25TZWFyY2goc2V0dXBRdWVyeSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2VhcmNoID0gKHNldHVwUXVlcnk6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5pc0J1c3kgPSB0cnVlO1xyXG4gICAgdGhpcy5idXN5TWVzc2FnZSA9ICdTZWFyY2hpbmcuLi4nO1xyXG4gICAgbGV0IGpvaW5zID0gW107XHJcblxyXG4gICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaChcclxuICAgICAgdGhpcy5tb2RlbFR5cGVMb29rdXAuZ2V0VHlwZSh0aGlzLmNoaWxkVGFibGVOYW1lKSxcclxuICAgICAgc2V0dXBRdWVyeSxcclxuICAgICAgbnVsbCwgZmFsc2UpKTtcclxuXHJcbiAgICBmb3JrSm9pbihqb2lucykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogcmVzdWx0cyA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJkcyA9IHJlc3VsdHNbMF07XHJcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtc1NvdXJjZShyZXN1bHRzWzBdLCBmYWxzZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJ1c3lNZXNzYWdlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0aW9uID0gKGNhcmQ6IENhcmQpID0+IHtcclxuICAgIGlmICghY2FyZC5zZWxlY3RlZCkge1xyXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdGVkQ2FyZHMuaW5kZXhPZihjYXJkKTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2FyZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgIGNhcmQuY2FyZEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndHJ1LWNhcmQtc2VsZWN0ZWQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBpbmRleCA9IHRoaXMuc2VsZWN0ZWRDYXJkcy5pbmRleE9mKGNhcmQpO1xyXG4gICAgICBpZiAoaW5kZXggPT09IC0xKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkcy5wdXNoKGNhcmQpO1xyXG5cclxuICAgICAgY2FyZC5jYXJkRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1zZWxlY3RlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vc2NvcGUuY29uZmlnLm9uU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3RlZENhcmRzKTtcclxuICB9XHJcblxyXG4gIGRyYWdTdGFydCA9IChlOiBhbnksIGNhcmQ6IENhcmQpID0+IHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgLy9zY29wZS5jb25maWcuY2xvc2VTZWFyY2hQYW5lbCgpO1xyXG5cclxuICAgIGlmICgoY2FyZC5jb2x1bW4uZGF0YS51bmFzc2lnbmVkICYmICF0aGlzLnVuYXNzaWduZWREcmFnZ2FibGUpIHx8XHJcbiAgICAgIChjYXJkLmNvbHVtbi5kYXRhLmluYWN0aXZlICYmICF0aGlzLmluYWN0aXZlRHJhZ2dhYmxlKSkge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xyXG5cclxuICAgIGlmICghY2FyZC5zZWxlY3RlZCkge1xyXG4gICAgICBjYXJkLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oY2FyZClcclxuICAgIH0gICBcclxuXHJcbiAgICBsZXQgY2xvbmVkTm9kZSA9IGUudGFyZ2V0LmNsb25lTm9kZSh0cnVlKTtcclxuICAgIGNsb25lZE5vZGUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICBjbG9uZWROb2RlLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBjbG9uZWROb2RlLnN0eWxlLmxlZnQgPSBcIi0xMDAwMHB4XCI7XHJcbiAgICBjbG9uZWROb2RlLnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xyXG4gICAgY2xvbmVkTm9kZS5jbGFzc0xpc3QuYWRkKCdjbG9uZWQtY2FyZCcpO1xyXG5cclxuICAgIHZhciBpbm5lciA9IGNsb25lZE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRydS1jYXJkLXBvcnRhbC1jYXJkXCIpWzBdO1xyXG4gICAgaW5uZXIuc3R5bGUudHJhbnNmb3JtID0gXCJyb3RhdGUoLTEwZGVnKVwiO1xyXG4gICAgaW5uZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgaW5uZXIuc3R5bGUuekluZGV4ID0gMTA7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjbG9uZWROb2RlKTtcclxuICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShjbG9uZWROb2RlLCA1MCwgNTApO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZHJhZ092ZXIgPSAoZTogYW55LCBjYXJkOiBDYXJkKSA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgIGlmICghdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndHJ1LWNhcmQtcG9ydGFsLWNhcmQtY29udGFpbmVyJykgfHxcclxuICAgICAgKGNhcmQuY29sdW1uLmRhdGEudW5hc3NpZ25lZCAmJiAhdGhpcy51bmFzc2lnbmVkRHJvcHBhYmxlKSB8fFxyXG4gICAgICAoY2FyZC5jb2x1bW4uZGF0YS5pbmFjdGl2ZSAmJiAhdGhpcy5pbmFjdGl2ZURyb3BwYWJsZSkpIHtcclxuICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdub25lJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnRW5kID0gKGU6IGFueSkgPT4ge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBsZXQgZWxlbWVudHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjbG9uZWQtY2FyZCcpO1xyXG4gICAgd2hpbGUgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZWxlbWVudHNbMF0ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoZWxlbWVudHNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHJ1LWNhcmQtcGxhY2Vob2xkZXInKTtcclxuICAgIHdoaWxlIChlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGVsZW1lbnRzWzBdLnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGVsZW1lbnRzWzBdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyb3AgPSAoZTogYW55LCBjYXJkOiBDYXJkKSA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnNlbGVjdGVkQ2FyZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcclxuICAgICAgbGV0IGluZGV4ID0gY2FyZC5jb2x1bW4uY2FyZHMuaW5kZXhPZih0aGlzLnNlbGVjdGVkQ2FyZHNbaV0pO1xyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkc1tpXS51cGRhdGVEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNhcmQuY29sdW1uLmRhdGEudW5hc3NpZ25lZCAmJiAhdGhpcy51bmFzc2lnbmVkRHJvcHBhYmxlIHx8XHJcbiAgICAgIGNhcmQuY29sdW1uLmRhdGEuaW5hY3RpdmUgJiYgIXRoaXMuaW5hY3RpdmVEcm9wcGFibGUgfHxcclxuICAgICAgIXRoaXMuc2VsZWN0ZWRDYXJkcy5sZW5ndGgpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZyA9PT0gbnVsbCkge1xyXG4gICAgICAvL3RoaXMuY29uZmlnLm9uRHJvcChjYXJkLCB0aGlzLnNlbGVjdGVkQ2FyZHMsIHRoaXMuY29uZmlnLCB0aGlzLnBvcnRhbCwgZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRDYXJkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNhcmQuY29sdW1uLmFkZENhcmQodGhpcy5zZWxlY3RlZENhcmRzW2ldKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc2VsZWN0ZWRDYXJkcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkc1tpXS5jb2x1bW4ucmVtb3ZlQ2FyZCh0aGlzLnNlbGVjdGVkQ2FyZHNbaV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3aGlsZSAodGhpcy5zZWxlY3RlZENhcmRzLmxlbmd0aCkgeyB0aGlzLnNlbGVjdGVkQ2FyZHMucG9wKCk7IH07XHJcbiAgICAgIFxyXG4gICAgICAvL2xldCBzYXZlUHJvbWlzZSA9IC5jb25maWcuc2F2ZSgpO1xyXG4gICAgICAvL2lmIChzYXZlUHJvbWlzZSkge1xyXG4gICAgICAvLyAgdGhpcy5wb3J0YWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtZGlzYWJsZWQnKTtcclxuICAgICAgLy8gIGF3YWl0IHNhdmVQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyAgICB0aGlzLnBvcnRhbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3RydS1jYXJkLXBvcnRhbC1kaXNhYmxlZCcpO1xyXG4gICAgICAvLyAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAvLyAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIC8vICAgIHZhciBjb2x1bW5FbGVtZW50ID0gdGhpcy5wb3J0YWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudHJ1LWNhcmQtcG9ydGFsLWNvbHVtbnMnKVswXTtcclxuICAgICAgLy8gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Njcm9sbF9wb3NpdGlvbicgKyB0aGlzLnVuaXF1ZUlkLCBjb2x1bW5FbGVtZW50LnNjcm9sbExlZnQpO1xyXG4gICAgICAvLyAgICBzY29wZS5jb25maWcucmV2ZXJ0KCk7XHJcbiAgICAgIC8vICAgIHRoaXMucG9ydGFsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndHJ1LWNhcmQtcG9ydGFsLWRpc2FibGVkJyk7XHJcbiAgICAgIC8vICB9KTtcclxuICAgICAgLy99IGVsc2Uge1xyXG4gICAgICAvLyAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAvLyAgdmFyIGNvbHVtbkVsZW1lbnQgPSB0aGlzLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50cnUtY2FyZC1wb3J0YWwtY29sdW1ucycpWzBdO1xyXG4gICAgICAvLyAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Njcm9sbF9wb3NpdGlvbicgKyB0aGlzLnVuaXF1ZUlkLCBjb2x1bW5FbGVtZW50LnNjcm9sbExlZnQpO1xyXG4gICAgICAvLyAgc2NvcGUuY29uZmlnLnJldmVydCgpO1xyXG4gICAgICAvL31cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhcmVudFRhYmxlTmFtZSA9IHRoaXMuY29uZmlnLnBhcmVudFRhYmxlTmFtZTtcclxuICAgIHRoaXMucGFyZW50VGFibGVQbHVyYWxMYWJlbCA9IHRoaXMuY29uZmlnLnBhcmVudFRhYmxlUGx1cmFsTGFiZWw7XHJcbiAgICB0aGlzLmNoaWxkVGFibGVOYW1lID0gdGhpcy5jb25maWcuY2hpbGRUYWJsZU5hbWU7XHJcbiAgICB0aGlzLmNoaWxkVGFibGVQbHVyYWxMYWJlbCA9IHRoaXMuY29uZmlnLmNoaWxkVGFibGVQbHVyYWxMYWJlbDtcclxuICAgIHRoaXMua2V5ID0gdGhpcy5jb25maWcua2V5O1xyXG4gICAgdGhpcy5wYXJlbnRRdWVyeSA9IG51bGxcclxuICAgIHRoaXMubG9ja1Byb3BlcnR5ID0gdGhpcy5jb25maWcubG9ja1Byb3BlcnR5O1xyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMuY29uZmlnLmNvbG9yO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkVmlzaWJsZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWRWaXNpYmxlO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkTmFtZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWROYW1lO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkTG9ja2VkID0gdGhpcy5jb25maWcudW5hc3NpZ25lZExvY2tlZDtcclxuICAgIHRoaXMudW5hc3NpZ25lZENvbG9yID0gdGhpcy5jb25maWcudW5hc3NpZ25lZENvbG9yO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkRHJhZ2dhYmxlID0gdGhpcy5jb25maWcudW5hc3NpZ25lZERyYWdnYWJsZTtcclxuICAgIHRoaXMudW5hc3NpZ25lZERyb3BwYWJsZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWREcm9wcGFibGU7XHJcblxyXG4gICAgdGhpcy5pbmFjdGl2ZVZpc2libGUgPSB0aGlzLmNvbmZpZy5pbmFjdGl2ZVZpc2libGU7XHJcbiAgICB0aGlzLmluYWN0aXZlRHJhZ2dhYmxlID0gdGhpcy5jb25maWcuaW5hY3RpdmVEcmFnZ2FibGU7XHJcbiAgICB0aGlzLmluYWN0aXZlRHJvcHBhYmxlID0gdGhpcy5jb25maWcuaW5hY3RpdmVEcm9wcGFibGU7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5Tb3J0ID0gdGhpcy5jb25maWcuY29sdW1uU29ydDtcclxuICAgIHRoaXMuY2FyZFNvcnQgPSB0aGlzLmNvbmZpZy5jYXJkU29ydDtcclxuXHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLmtleS5sYXN0SW5kZXhPZih0aGlzLnBhcmVudFRhYmxlTmFtZSk7XHJcbiAgICBsZXQgcHJlZml4ID0gdGhpcy5rZXkuc3Vic3RyaW5nKGluZGV4LCAtMSk7XHJcbiAgICBpZiAocHJlZml4KSB7XHJcbiAgICAgIHRoaXMucmVsYXRlZFBhcmVudE5hbWUgPSBwcmVmaXggKyB0aGlzLnBhcmVudFRhYmxlTmFtZTtcclxuICAgICAgdGhpcy5yZWxhdGVkQ2hpbGROYW1lID0gcHJlZml4ICsgdGhpcy5jaGlsZFRhYmxlUGx1cmFsTGFiZWw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbGF0ZWRQYXJlbnROYW1lID0gdGhpcy5wYXJlbnRUYWJsZU5hbWU7XHJcbiAgICAgIHRoaXMucmVsYXRlZENoaWxkTmFtZSA9IHRoaXMuY2hpbGRUYWJsZVBsdXJhbExhYmVsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudW5pcXVlSWQgPSB1dWlkdjQoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG8oKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdGlvbiA9IChjYXJkOiBDYXJkKSA9PiB7XHJcbiAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdGVkQ2FyZHMuaW5kZXhPZihjYXJkKTtcclxuICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIGNhcmQuY2FyZEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndHJ1LWNhcmQtc2VsZWN0ZWQnKTtcclxuXHJcbiAgICAvL3Njb3BlLmNvbmZpZy5vblNlbGVjdGlvbkNoYW5nZWQoc2VsZWN0ZWRDYXJkcyk7XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBDYXJkVmlldyB7XHJcbiAgcHJpdmF0ZSBsb2NrZWRDb2x1bW5zRWxlbWVudDtcclxuICBwcml2YXRlIHVubG9ja2VkQ29sdW1uc0VsZW1lbnRcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhcmRDb2x1bW46IFRydUNhcmRDb2x1bW4sXHJcbiAgICBwcml2YXRlIGxvY2tlZENvbHVtbnM6IGFueSxcclxuICAgIHByaXZhdGUgY29sdW1uczogYW55KSB7XHJcbiAgICB0aGlzLmxvY2tlZENvbHVtbnNFbGVtZW50ID0gdGhpcy5jYXJkQ29sdW1uLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sb2NrZWQtY29sdW1ucycpWzBdO1xyXG4gICAgdGhpcy51bmxvY2tlZENvbHVtbnNFbGVtZW50ID0gdGhpcy5jYXJkQ29sdW1uLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy51bmxvY2tlZC1jb2x1bW5zJylbMF07XHJcblxyXG4gICAgaWYgKGxvY2tlZENvbHVtbnMgJiYgbG9ja2VkQ29sdW1ucy5sZW5ndGgpXHJcbiAgICAgIHRoaXMuYWRkQ29sdW1ucyhsb2NrZWRDb2x1bW5zLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aClcclxuICAgICAgdGhpcy5hZGRDb2x1bW5zKGNvbHVtbnMsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29sdW1uVmlld3M6IEFycmF5PENvbHVtbj4gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBhZGRDb2x1bW5zID0gKGNvbHVtbkRhdGE6IEFycmF5PGFueT4sIGxvY2tlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgbGV0IGNvbHVtbnNFbGVtZW50OiBIVE1MRGl2RWxlbWVudDtcclxuICAgIGlmIChsb2NrZWQpXHJcbiAgICAgIGNvbHVtbnNFbGVtZW50ID0gdGhpcy5jYXJkQ29sdW1uLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sb2NrZWQtY29sdW1ucycpWzBdO1xyXG4gICAgZWxzZVxyXG4gICAgICBjb2x1bW5zRWxlbWVudCA9IHRoaXMuY2FyZENvbHVtbi5wb3J0YWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudW5sb2NrZWQtY29sdW1ucycpWzBdO1xyXG5cclxuICAgIGxldCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbkRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5jb2x1bW5WaWV3cy5wdXNoKG5ldyBDb2x1bW4odGhpcy5jYXJkQ29sdW1uLCBjb2x1bW5EYXRhW2ldLCBjb2x1bW5zRWxlbWVudCwgbG9ja2VkLCBpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29sdW1uc0VsZW1lbnQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xyXG5cclxuICAgIHRoaXMuY2FyZENvbHVtbi5idXN5TWVzc2FnZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ29sdW1ucyA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLmNhcmRDb2x1bW4uY29sdW1uRmlsdGVyUmVmcyAmJiB0aGlzLmNhcmRDb2x1bW4uY29sdW1uRmlsdGVyUmVmcy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGZpbHRlcmVkQ29sdW1ucztcclxuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKCFjb2x1bW4ubG9ja2VkICYmIGNvbHVtbi5kYXRhLmVudGl0eUFzcGVjdCkge1xyXG4gICAgICAgICAgdmFyIGZvdW5kID0gdGhpcy5jYXJkQ29sdW1uLmNvbHVtbkZpbHRlclJlZnMuZmlsdGVyKHggPT4geCA9PT0gY29sdW1uLmRhdGEuUmVmKS5sZW5ndGggPiAwO1xyXG5cclxuICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICBjb2x1bW4uY29sdW1uRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd0cnUtY2FyZC1wb3J0YWwtY29sdW1uLWZpbHRlcmVkJyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb2x1bW4uY29sdW1uRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY29sdW1uLWZpbHRlcmVkJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbaV07XHJcbiAgICAgICAgY29sdW1uLmNvbHVtbkVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndHJ1LWNhcmQtcG9ydGFsLWNvbHVtbi1maWx0ZXJlZCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBDb2x1bW4ge1xyXG5cclxuICBwcml2YXRlIGRhdGE6IGFueTtcclxuICBwcml2YXRlIGNhcmRzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgcHJpdmF0ZSBsb2NrZWQ6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBwYXJlbnRFbGVtZW50OiBIVE1MRGl2RWxlbWVudDtcclxuICBwcml2YXRlIGNvbHVtbkVsZW1lbnQ7XHJcblxyXG4gIGNhcmRTY3JvbGxQb3J0RWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XHJcbiAgc2VsZWN0QWxsQnV0dG9uITogSFRNTEFuY2hvckVsZW1lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjYXJkQ29sdW1uOiBUcnVDYXJkQ29sdW1uLFxyXG4gICAgZGF0YTogYW55LFxyXG4gICAgcGFyZW50RWxlbWVudDogSFRNTERpdkVsZW1lbnQsXHJcbiAgICBsb2NrZWQ6IGJvb2xlYW4sXHJcbiAgICBpbmRleDogbnVtYmVyKSB7XHJcblxyXG4gICAgdGhpcy5sb2NrZWQgPSBsb2NrZWQ7XHJcbiAgICB0aGlzLnBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50O1xyXG5cclxuICAgIGxldCBjb2x1bW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBjb2x1bW5FbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3RydS1jYXJkLXBvcnRhbC1jb2x1bW4nKTtcclxuICAgIGNvbHVtbkVsZW1lbnQuaWQgPSBpbmRleC50b1N0cmluZygpO1xyXG5cclxuICAgIGlmIChkYXRhPy5pbmFjdGl2ZSlcclxuICAgICAgY29sdW1uRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY29sdW1uLWluYWN0aXZlJyk7XHJcbiAgICBjb2x1bW5FbGVtZW50LnN0eWxlLndpZHRoID0gdGhpcy5jYXJkQ29sdW1uLmNvbmZpZy53aWR0aCArICdweCc7XHJcbiAgICB0aGlzLmNvbHVtbkVsZW1lbnQgPSBjb2x1bW5FbGVtZW50O1xyXG5cclxuICAgIHRoaXMuY2FyZFNjcm9sbFBvcnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0aGlzLmNhcmRTY3JvbGxQb3J0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY2FyZC1zY3JvbGwtcG9ydCcpO1xyXG5cclxuXHJcbiAgICAvL3RoaXMuY29sdW1uSGVhZGVyID0gbmV3IENvbHVtbkhlYWRlcihfdGhpcyk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5FbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY2FyZFNjcm9sbFBvcnRFbGVtZW50KTtcclxuICAgIHRoaXMuY29sdW1uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmaWx0ZXItY2FyZHMnLCAoZSkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZURhdGFCeUZpbHRlcigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY29sdW1uRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBhZGRDYXJkID0gKGNhcmQ6IGFueSkgPT4ge1xyXG4gICAgY2FyZC5kYXRhLiRlbnRpdHlbdGhpcy5jYXJkQ29sdW1uLmtleV0gPSB0aGlzLmRhdGEuUmVmO1xyXG4gICAgdGhpcy5kYXRhLmNhcmRzLnVuc2hpZnQoY2FyZC5kYXRhKTtcclxuICAgIHRoaXMuY2FyZHMudW5zaGlmdChuZXcgQ2FyZCh0aGlzLmNhcmRDb2x1bW4sIHRoaXMsIGNhcmQuZGF0YSwgdHJ1ZSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRFbXB0eUNhcmQgPSAoKSA9PiB7XHJcbiAgICBsZXQgZW1wdHlDYXJkcyA9IF8uZmlsdGVyKHRoaXMuY2FyZHMsIGZ1bmN0aW9uIChjYXJkKSB7IHJldHVybiAhY2FyZC5kYXRhIH0pO1xyXG4gICAgaWYgKCFlbXB0eUNhcmRzLmxlbmd0aClcclxuICAgICAgdGhpcy5jYXJkcy5wdXNoKG5ldyBDYXJkKHRoaXMuY2FyZENvbHVtbiwgdGhpcywgbnVsbCwgZmFsc2UpKTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdEFsbEJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVFbXB0eUNhcmQgPSAoKSA9PiB7XHJcbiAgICB2YXIgZW1wdHlDYXJkcyA9IF8uZmlsdGVyKHRoaXMuY2FyZHMsIChjYXJkKSA9PiB7IHJldHVybiAhY2FyZC5kYXRhIH0pO1xyXG4gICAgaWYgKGVtcHR5Q2FyZHMubGVuZ3RoKSB7XHJcbiAgICAgIHZhciBlbXB0eUNhcmQgPSBlbXB0eUNhcmRzWzBdO1xyXG4gICAgICB2YXIgZW1wdHlDYXJkRWxlbWVudCA9IGVtcHR5Q2FyZC5jYXJkQ29udGFpbmVyRWxlbWVudDtcclxuICAgICAgZW1wdHlDYXJkRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVtcHR5Q2FyZEVsZW1lbnQpO1xyXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLmNhcmRzLmluZGV4T2YoZW1wdHlDYXJkc1swXSk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgICAgdGhpcy5jYXJkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0QWxsQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2x1bW5Jc1Zpc3VhbGx5RW1wdHkgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jYXJkcy5ldmVyeShmdW5jdGlvbiAoY2FyZCkge1xyXG4gICAgICByZXR1cm4gY2FyZC5jYXJkQ29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ3RydS1jYXJkLXBvcnRhbC1jYXJkLWZpbHRlcmVkJyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQ2FyZCA9IChjYXJkOiBhbnkpID0+IHtcclxuICAgIGNhcmQuY2FyZENvbnRhaW5lckVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjYXJkLmNhcmRDb250YWluZXJFbGVtZW50KTtcclxuXHJcbiAgICB2YXIgaW5kZXggPSB0aGlzLmRhdGEuY2FyZHMuaW5kZXhPZihjYXJkLmRhdGEpO1xyXG4gICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgdGhpcy5kYXRhLmNhcmRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICBpbmRleCA9IHRoaXMuY2FyZHMuaW5kZXhPZihjYXJkKTtcclxuICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgIHRoaXMuY2FyZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIGlmICghdGhpcy5jYXJkcy5sZW5ndGggfHwgdGhpcy5jb2x1bW5Jc1Zpc3VhbGx5RW1wdHkoKSlcclxuICAgICAgdGhpcy5hZGRFbXB0eUNhcmQoKTtcclxuXHJcbiAgICBjYXJkID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0QWxsID0gKHNlbGVjdEFsbDogYm9vbGVhbikgPT4ge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhcmRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICB0aGlzLmNhcmRzW2ldLnNlbGVjdEFsbChzZWxlY3RBbGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVEYXRhQnlGaWx0ZXIgPSAoKSA9PiB7XHJcbiAgICBsZXQgY2FyZEZpbHRlclN0ciA9IHRoaXMuY2FyZENvbHVtbi5jYXJkRmlsdGVyU3RyO1xyXG4gICAgaWYgKGNhcmRGaWx0ZXJTdHIpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhcmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGNhcmQgPSB0aGlzLmNhcmRzW2ldO1xyXG5cclxuICAgICAgICBpZiAoY2FyZC5kYXRhICYmIGNhcmQuZGF0YS4kZW50aXR5KSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyUGFydHMgPSBjYXJkRmlsdGVyU3RyLnNwbGl0KC8oXFxzKykvKS5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMudHJpbSgpLmxlbmd0aCA+IDA7IH0pO1xyXG4gICAgICAgICAgbGV0IGNhcmRGaWx0ZXJSZXN1bHQ7XHJcbiAgICAgICAgICAvL2lmIChzY29wZS5jb25maWcuY2FyZElkKSB7XHJcbiAgICAgICAgICAvLyAgY2FyZEZpbHRlclJlc3VsdCA9IGZpbHRlclBhcnRzLmV2ZXJ5KGZ1bmN0aW9uIChwYXJ0KSB7XHJcbiAgICAgICAgICAvLyAgICByZXR1cm4gc2NvcGUuY29uZmlnLmNhcmRJZChjYXJkLmRhdGEuJGVudGl0eSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHBhcnQpICE9IC0xO1xyXG4gICAgICAgICAgLy8gIH0pO1xyXG4gICAgICAgICAgLy99IGVsc2Uge1xyXG4gICAgICAgICAgLy8gIGNhcmRGaWx0ZXJSZXN1bHQgPSBzY29wZS5jb25maWcuY2FyZEZpbHRlcihjYXJkLmRhdGEsIGNhcmRGaWx0ZXJTdHIpXHJcbiAgICAgICAgICAvL31cclxuXHJcbiAgICAgICAgICBpZiAoY2FyZEZpbHRlclJlc3VsdCkge1xyXG4gICAgICAgICAgICBjYXJkLmNhcmRDb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3RydS1jYXJkLXBvcnRhbC1jYXJkLWZpbHRlcmVkJyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjYXJkLmNhcmRDb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3RydS1jYXJkLXBvcnRhbC1jYXJkLWZpbHRlcmVkJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FyZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY2FyZCA9IHRoaXMuY2FyZHNbaV07XHJcbiAgICAgICAgY2FyZC5jYXJkQ29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd0cnUtY2FyZC1wb3J0YWwtY2FyZC1maWx0ZXJlZCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNhcmRFbGVtZW50cyA9IHRoaXMuY29sdW1uRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudHJ1LWNhcmQtcG9ydGFsLWNhcmQtY29udGFpbmVyOm5vdCgudHJ1LWNhcmQtcG9ydGFsLWNhcmQtZmlsdGVyZWQpOm5vdCguZW1wdHkpJyk7XHJcbiAgICBpZiAoY2FyZEVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlbW92ZUVtcHR5Q2FyZCgpO1xyXG4gICAgICBpZiAoIXRoaXMubG9ja2VkKSB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmNvbHVtbkVsZW1lbnQsIHRoaXMucGFyZW50RWxlbWVudC5maXJzdENoaWxkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGRFbXB0eUNhcmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZURhdGEgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNhcmRTY3JvbGxQb3J0RWxlbWVudC5pbm5lckhUTUwgPSAnJztcclxuXHJcbiAgICB3aGlsZSAodGhpcy5jYXJkcy5sZW5ndGgpIHsgdGhpcy5jYXJkcy5wb3AoKTsgfTtcclxuXHJcbiAgICBpZiAodGhpcy5jYXJkQ29sdW1uLmNhcmRzLmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FyZENvbHVtbi5jYXJkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB0aGlzLmNhcmRzLnB1c2gobmV3IENhcmQodGhpcy5jYXJkQ29sdW1uLCB0aGlzLCB0aGlzLmNhcmRDb2x1bW4uY2FyZHNbaV0sIGZhbHNlKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZEVtcHR5Q2FyZCgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgQ2FyZCB7XHJcbiAgcHJpdmF0ZSBjYXJkQ29udGFpbmVyRWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XHJcbiAgcHJpdmF0ZSBkYXRhO1xyXG5cclxuICBjb2x1bW47XHJcbiAgY2FyZEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50O1xyXG4gIHNlbGVjdGVkID0gZmFsc2U7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2FyZENvbHVtbjogVHJ1Q2FyZENvbHVtbixcclxuICAgIGNvbHVtbjogYW55LFxyXG4gICAgZGF0YTogYW55LFxyXG4gICAgZHJvcHBlZDogYm9vbGVhbikge1xyXG5cclxuICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xyXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcclxuXHJcbiAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3RydS1jYXJkLXBvcnRhbC1jYXJkLWNvbnRhaW5lcicpO1xyXG5cclxuICAgIGlmIChkcm9wcGVkKSB7XHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYW5pbWF0ZWQnKTtcclxuICAgICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdydWJiZXJCYW5kJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RyYWdnYWJsZScsICd0cnVlJyk7XHJcbiAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnZHJvcHBhYmxlJywgJ3RydWUnKTtcclxuXHJcbiAgICB0aGlzLmNhcmRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0aGlzLmNhcmRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3RydS1jYXJkLXBvcnRhbC1jYXJkJyk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbHVtbi5kYXRhPy51bmFzc2lnbmVkKVxyXG4gICAgICB0aGlzLmNhcmRFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY2FyZENvbHVtbi5jb2xvciA/IHRoaXMuY2FyZENvbHVtbi5jb2xvciA6ICcjZmZmJztcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jYXJkRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmNhcmRDb2x1bW4udW5hc3NpZ25lZENvbG9yID8gdGhpcy5jYXJkQ29sdW1uLnVuYXNzaWduZWRDb2xvciA6ICcjZmZmJztcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgKGUpID0+IHtcclxuICAgICAgICB0aGlzLmNhcmRDb2x1bW4uZHJhZ1N0YXJ0KGUsIHRoaXMpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnT3ZlcihlLCB0aGlzKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnRW5kKGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJkQ29sdW1uLmRyb3AoZSwgdGhpcyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkID0gIXRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5jYXJkQ29sdW1uLnVwZGF0ZVNlbGVjdGlvbih0aGlzKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIC8vZ29Ub0RldGFpbCh0aGlzLmRhdGEuJGVudGl0eS5SZWYpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnT3ZlcihlLCB0aGlzKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnRW5kKGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJkQ29sdW1uLmRyb3AoZSwgdGhpcyk7XHJcbiAgICAgICAgaWYgKCFlLmRlZmF1bHRQcmV2ZW50ZWQpXHJcbiAgICAgICAgICB0aGlzLmNvbHVtbi5yZW1vdmVFbXB0eUNhcmQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNhcmRFbGVtZW50KTtcclxuXHJcbiAgICBpZiAoZHJvcHBlZClcclxuICAgICAgdGhpcy5jb2x1bW4uY2FyZFNjcm9sbFBvcnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LCB0aGlzLmNvbHVtbi5jYXJkU2Nyb2xsUG9ydEVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuY29sdW1uLmNhcmRTY3JvbGxQb3J0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNhcmRDb250YWluZXJFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEFsbCA9IChzZWxlY3RBbGw6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdEFsbDtcclxuICAgIHRoaXMuY2FyZENvbHVtbi51cGRhdGVTZWxlY3Rpb24odGhpcyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXRhID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jYXJkRWxlbWVudC5pbm5lckhUTUwgPSAnJztcclxuICAgIHRoaXMuY2FyZENvbHVtbi5yZW1vdmVTZWxlY3Rpb24odGhpcylcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmIChmYWxzZSkge1xyXG4gICAgICAgIC8vc2NvcGUuY29uZmlnLmN1c3RvbUNhcmRWaWV3RmFjdG9yeShfdGhpcywgc2NvcGUuY29uZmlnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgY2FyZFRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5jYXJkQ29sdW1uLmNvbmZpZy5yZXN1bHRDb25maWcuY2FyZElkKHRoaXMuZGF0YS4kZW50aXR5KTtcclxuICAgICAgICBpZiAodmFsdWUpXHJcbiAgICAgICAgICBjYXJkVGV4dC5pbm5lckhUTUwgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmNhcmRFbGVtZW50LmFwcGVuZENoaWxkKGNhcmRUZXh0KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RyYWdnYWJsZScsICdmYWxzZScpO1xyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2VtcHR5Jyk7XHJcbiAgICAgIHRoaXMuY2FyZEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZW1wdHknKTtcclxuXHJcbiAgICAgIHZhciBjYXJkQ29udGFpbmVyRW1wdHlUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xyXG4gICAgICBjYXJkQ29udGFpbmVyRW1wdHlUZXh0LmNsYXNzTGlzdC5hZGQoJ2V4Y2x1ZGUtZnJvbS1maWx0ZXInKTtcclxuICAgICAgY2FyZENvbnRhaW5lckVtcHR5VGV4dC5pbm5lckhUTUwgPSAnRHJhZyBpdGVtcyBoZXJlJztcclxuXHJcbiAgICAgIHRoaXMuY2FyZEVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FyZENvbnRhaW5lckVtcHR5VGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0cnUtY2FyZFwiPlxyXG4gIDxkaXYgKm5nSWY9XCJpc0J1c3lcIlxyXG4gICAgICAgY2xhc3M9XCJ0cnUtY2FyZC1idXN5LWluZGljYXRvclwiPlxyXG4gICAgPHA+U2VhcmNoaW5nIGZvciB7e2NvbmZpZy5jaGlsZFRhYmxlUGx1cmFsTGFiZWx9fS4uLjwvcD5cclxuICA8L2Rpdj5cclxuICA8IS0tPHRydS10b29sYmFyIFtjb25maWddPVwiY29uZmlnLnRvb2xiYXJDb25maWdcIiBjbGFzcz1cIm1haW4tdG9vbGJhclwiPjwvdHJ1LXRvb2xiYXI+LS0+XHJcbiAgPGRpdiBjbGFzcz1cInRydS1jYXJkLXBvcnRhbFwiICNjYXJkUG9ydGFsPlxyXG4gICAgPGRpdiBbbmdTdHlsZV09XCJ7J3dpZHRoJzogKChjb25maWcud2lkdGggKiBsb2NrZWRDb2x1bW5zLmxlbmd0aCkgKyAoMTAgKiBsb2NrZWRDb2x1bW5zLmxlbmd0aCAtIDEpKSArICdweCcgfVwiXHJcbiAgICAgICAgIFtuZ0NsYXNzXT1cInsndHJ1LWNhcmQtcG9ydGFsLWxvY2tlZC1jb2x1bW5zLWRpdmlkZXInOiBsb2NrZWRDb2x1bW5zLmxlbmd0aH1cIlxyXG4gICAgICAgICAqbmdJZj1cImxvY2tlZENvbHVtbnMubGVuZ3RoXCJcclxuICAgICAgICAgY2xhc3M9XCJ0cnUtY2FyZC1wb3J0YWwtbG9ja2VkLWNvbHVtbnMgbG9ja2VkLWNvbHVtbnNcIj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgW25nU3R5bGVdPVwieydsZWZ0JzogbG9ja2VkQ29sdW1ucy5sZW5ndGggPyAoKGNvbmZpZy53aWR0aCAqIGxvY2tlZENvbHVtbnMubGVuZ3RoKSArICgxMCAqIGxvY2tlZENvbHVtbnMubGVuZ3RoIC0gMSkgKyAyMikgKyAncHgnIDogMCB9XCJcclxuICAgICAgICAgY2xhc3M9XCJ0cnUtY2FyZC1wb3J0YWwtY29sdW1ucyB1bmxvY2tlZC1jb2x1bW5zXCI+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
739
|
+
class ColumnHeader {
|
|
740
|
+
cardColumn;
|
|
741
|
+
constructor(cardColumn, column) {
|
|
742
|
+
this.cardColumn = cardColumn;
|
|
743
|
+
let columnHeaderElement = document.createElement('div');
|
|
744
|
+
columnHeaderElement.classList.add('tru-card-portal-column-header');
|
|
745
|
+
new ColumnHeaderText(cardColumn, column, columnHeaderElement);
|
|
746
|
+
new ColumnHeaderButton(column, columnHeaderElement);
|
|
747
|
+
column.columnElement.insertBefore(columnHeaderElement, column.columnElement.firstChild);
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
class ColumnHeaderText {
|
|
751
|
+
cardColumn;
|
|
752
|
+
data;
|
|
753
|
+
constructor(cardColumn, column, parentElement) {
|
|
754
|
+
this.cardColumn = cardColumn;
|
|
755
|
+
this.data = column.data;
|
|
756
|
+
let headerText = document.createElement('p');
|
|
757
|
+
headerText.classList.add('tru-card-portal-column-headertext');
|
|
758
|
+
if (this.cardColumn.userHasParentTableRole) {
|
|
759
|
+
headerText.addEventListener('click', () => { alert('goToDetail'); });
|
|
760
|
+
headerText.classList.add('tru-card-portal-column-headertext-hover');
|
|
761
|
+
}
|
|
762
|
+
if (!this.data?.unassigned) {
|
|
763
|
+
let value = this.cardColumn.config.resultConfig.cardColumnId(column.data);
|
|
764
|
+
if (value)
|
|
765
|
+
headerText.innerHTML = value;
|
|
766
|
+
}
|
|
767
|
+
if (this.data?.unassigned && this.cardColumn.unassignedVisible)
|
|
768
|
+
headerText.innerHTML = this.cardColumn.unassignedName ? this.cardColumn.unassignedName : 'Unassigned';
|
|
769
|
+
parentElement.appendChild(headerText);
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
class ColumnHeaderButton {
|
|
773
|
+
column;
|
|
774
|
+
selectAll = false;
|
|
775
|
+
constructor(column, parentElement) {
|
|
776
|
+
this.column = column;
|
|
777
|
+
var linkButtonContainer = document.createElement('div');
|
|
778
|
+
linkButtonContainer.classList.add('tru-card-portal-column-header-extras');
|
|
779
|
+
let linkButton = document.createElement('a');
|
|
780
|
+
linkButton.classList.add('tru-card-portal-column-header-extra-button');
|
|
781
|
+
linkButton.classList.add('dark-hover');
|
|
782
|
+
linkButton.href = '#';
|
|
783
|
+
let linkButtonText = document.createElement('span');
|
|
784
|
+
linkButtonText.classList.add('tru-card-icon-small');
|
|
785
|
+
linkButtonText.classList.add('icon-check-square-o');
|
|
786
|
+
linkButtonText.addEventListener('click', () => {
|
|
787
|
+
this.selectAll = !this.selectAll;
|
|
788
|
+
this.column.selectAll(this.selectAll);
|
|
789
|
+
});
|
|
790
|
+
linkButton.appendChild(linkButtonText);
|
|
791
|
+
linkButtonContainer.appendChild(linkButton);
|
|
792
|
+
this.column.selectAllButton = linkButtonContainer;
|
|
793
|
+
parentElement.appendChild(linkButtonContainer);
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1LWNhcmQtY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJ1LWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtY29sdW1uL3RydS1jYXJkLWNvbHVtbi50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydS1jb21tb24tbGliL3NyYy9saWIvY29tcG9uZW50cy9jYXJkLWNvbHVtbi90cnUtY2FyZC1jb2x1bW4uaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUtwQyxPQUFPLEVBQWdCLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQVVwRCxNQUFNLE9BQU8sYUFBYTtJQThDZDtJQUNBO0lBQ0E7SUEvQ0QsTUFBTSxDQUF1QjtJQUM3QixJQUFJLENBQU87SUFFd0IsTUFBTSxDQUFjO0lBRXhELGVBQWUsQ0FBVTtJQUN6QixzQkFBc0IsQ0FBVTtJQUNoQyxjQUFjLENBQVU7SUFDeEIscUJBQXFCLENBQVU7SUFDL0IsV0FBVyxHQUFHLElBQUksQ0FBQztJQUNuQixZQUFZLENBQWlCO0lBRTdCLGdCQUFnQixDQUFVO0lBQzFCLG1CQUFtQixDQUFXO0lBQzlCLG1CQUFtQixDQUFXO0lBRTlCLGVBQWUsQ0FBVztJQUMxQixpQkFBaUIsQ0FBVztJQUM1QixpQkFBaUIsQ0FBVztJQUU1QixVQUFVLENBQXNDO0lBQ2hELFFBQVEsQ0FBb0M7SUFFNUMsaUJBQWlCLENBQVU7SUFDM0IsZ0JBQWdCLENBQVU7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ZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAndW5kZXJzY29yZSc7XHJcbmltcG9ydCB7IGJyZWV6ZSB9IGZyb20gJ2JyZWV6ZS1jbGllbnQnO1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgVHJ1RGF0YUNvbnRleHQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtZGF0YS1jb250ZXh0JztcclxuaW1wb3J0IHsgVHJ1RW50aXR5QmFzZSB9IGZyb20gJy4uLy4uL2Jhc2UtY2xhc3Nlcy90cnUtZW50aXR5LWJhc2UnO1xyXG5pbXBvcnQgeyBUcnVNb2RlbFR5cGVMb29rdXAgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cnUtbW9kZWwtdHlwZS1sb29rdXAnO1xyXG5pbXBvcnQgeyBJVHJ1Q2FyZENvbHVtbkNvbmZpZyB9IGZyb20gJy4vY2xhc3Nlcy90cnUtY2FyZC1jb2x1bW4tY29uZmlnJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmb3JrSm9pbiwgc2tpcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcnVTZWFyY2hWaWV3RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vYmFzZS12aWV3cy9zZWFyY2gvc2VydmljZXMvdHJ1LXNlYXJjaC12aWV3LWV2ZW50LWhhbmRsZXInO1xyXG5pbXBvcnQgeyBIVE1MIH0gZnJvbSAnbmd4LWVkaXRvci9saWIvdHJ1c3RlZFR5cGVzVXRpbCc7XHJcbmltcG9ydCB7IHJlc3VsdCB9IGZyb20gJ2xvZGFzaCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RydS1jYXJkLWNvbHVtbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RydS1jYXJkLWNvbHVtbi5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cnUtY2FyZC1jb2x1bW4uY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRydUNhcmRDb2x1bW4ge1xyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IElUcnVDYXJkQ29sdW1uQ29uZmlnXHJcbiAgQElucHV0KCkgbmFtZSE6IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY2FyZFBvcnRhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwb3J0YWwhOiBFbGVtZW50UmVmO1xyXG5cclxuICBwcml2YXRlIHBhcmVudFRhYmxlTmFtZSE6IHN0cmluZztcclxuICBwcml2YXRlIHBhcmVudFRhYmxlUGx1cmFsTGFiZWwhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBjaGlsZFRhYmxlTmFtZSE6IHN0cmluZztcclxuICBwcml2YXRlIGNoaWxkVGFibGVQbHVyYWxMYWJlbCE6IHN0cmluZztcclxuICBwcml2YXRlIHBhcmVudFF1ZXJ5ID0gbnVsbDtcclxuICBwcml2YXRlIGxvY2tQcm9wZXJ0eSE6IHN0cmluZyB8IG51bGw7XHJcbiBcclxuICBwcml2YXRlIHVuYXNzaWduZWRMb2NrZWQhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSB1bmFzc2lnbmVkRHJhZ2dhYmxlITogYm9vbGVhbjtcclxuICBwcml2YXRlIHVuYXNzaWduZWREcm9wcGFibGUhOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIGluYWN0aXZlVmlzaWJsZSE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBpbmFjdGl2ZURyYWdnYWJsZSE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBpbmFjdGl2ZURyb3BwYWJsZSE6IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgY29sdW1uU29ydDogKChjb2x1bW5zOiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBjYXJkU29ydDogKChjYXJkczogYW55KSA9PiBhbnkpIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIHJlbGF0ZWRQYXJlbnROYW1lITogc3RyaW5nO1xyXG4gIHByaXZhdGUgcmVsYXRlZENoaWxkTmFtZSE6IHN0cmluZztcclxuICBwcml2YXRlIGluc2VydEJlZm9yZTogYW55O1xyXG4gIHByaXZhdGUgdW5pcXVlSWQhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBzdWJzOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcblxyXG4gIGJ1c3lNZXNzYWdlOiBzdHJpbmcgPSAnUmVuZGVyaW5nLi4uJztcclxuICBpc0J1c3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjb2x1bW5zOiBhbnkgPSBbXTtcclxuICBjYXJkczogYW55ID0gW107XHJcbiAgbG9ja2VkQ29sdW1uczogYW55ID0gW107XHJcbiAgY29sdW1uRmlsdGVyUmVmcyA9IFtdO1xyXG4gIGNhcmRGaWx0ZXJTdHI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHNlbGVjdGVkQ2FyZHM6IEFycmF5PENhcmQ+ID0gW107XHJcbiAgY29sb3IhOiBzdHJpbmcgfCBudWxsO1xyXG4gIHVuYXNzaWduZWRDb2xvciE6IHN0cmluZyB8IG51bGw7XHJcbiAga2V5ITogc3RyaW5nO1xyXG4gIHVuYXNzaWduZWRWaXNpYmxlITogYm9vbGVhbjtcclxuICB1bmFzc2lnbmVkTmFtZSE6IHN0cmluZyB8IG51bGw7XHJcbiAgdXNlckhhc1BhcmVudFRhYmxlUm9sZSA9IHRydWU7IC8vcGFyZW50VGFibGVNb2RlbC5jYW5EaXNwbGF5O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGF0YUNvbnRleHQ6IFRydURhdGFDb250ZXh0LFxyXG4gICAgcHJpdmF0ZSBtb2RlbFR5cGVMb29rdXA6IFRydU1vZGVsVHlwZUxvb2t1cCxcclxuICAgIHByaXZhdGUgc2VhcmNoVmlld0V2ZW50SGFuZGxlcjogVHJ1U2VhcmNoVmlld0V2ZW50SGFuZGxlcikge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJlbnRUYWJsZU1vZGVsID0gbnVsbDsvL2RhdGFTZXJ2aWNlLm1vZGVsLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdO1xyXG5cclxuICBwcml2YXRlIGNyZWF0ZURhdGFGb3JFbnRpdHkgPSAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICB2YXIgZGF0YSA9IHRoaXMuY29uZmlnLnJlc3VsdENvbmZpZy5yb3dEYXRhRW5oYW5jZXIoKTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFzVW5kZWZpbmVkQ2hpbGRyZW4gPSAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICB0eXBlIEVudGl0eU9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBlbnRpdHlQcm9wZXJ0eU5hbWUgPSB0aGlzLmNvbmZpZy5wYXJlbnRUb0NoaWxkUmVsYXRpb25zaGlwTmFtZSBhcyBFbnRpdHlPYmplY3RLZXk7XHJcbiAgICByZXR1cm4gIWVudGl0eVtlbnRpdHlQcm9wZXJ0eU5hbWVdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNFbXB0eUNoaWxkcmVuID0gKGVudGl0eTogVHJ1RW50aXR5QmFzZSkgPT4ge1xyXG4gICAgdHlwZSBFbnRpdHlPYmplY3RLZXkgPSBrZXlvZiB0eXBlb2YgZW50aXR5O1xyXG4gICAgY29uc3QgZW50aXR5UHJvcGVydHlOYW1lID0gdGhpcy5jb25maWcucGFyZW50VG9DaGlsZFJlbGF0aW9uc2hpcE5hbWUgYXMgRW50aXR5T2JqZWN0S2V5O1xyXG4gICAgcmV0dXJuICFlbnRpdHlbZW50aXR5UHJvcGVydHlOYW1lXS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc0luYWN0aXZlQ2hpbGRyZW4gPSAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICB0eXBlIEVudGl0eU9iamVjdEtleSA9IGtleW9mIHR5cGVvZiBlbnRpdHk7XHJcbiAgICBjb25zdCBlbnRpdHlQcm9wZXJ0eU5hbWUgPSB0aGlzLmNvbmZpZy5wYXJlbnRUb0NoaWxkUmVsYXRpb25zaGlwTmFtZSBhcyBFbnRpdHlPYmplY3RLZXk7XHJcbiAgICByZXR1cm4gXy5ldmVyeShbZW50aXR5UHJvcGVydHlOYW1lXSwgKGNoaWxkOiBhbnkpID0+IHsgcmV0dXJuICFjaGlsZC5hY3RpdmU7IH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYXNBZGRlZFVuc2F2ZWRDaGlsZHJlbiA9IChlbnRpdGllczogQXJyYXk8VHJ1RW50aXR5QmFzZT4sIHBhcmVudFJlZjogbnVtYmVyKSA9PiB7XHJcbiAgICByZXR1cm4gXy5zb21lKGVudGl0aWVzLCAoZW50aXR5OiBUcnVFbnRpdHlCYXNlKSA9PiB7XHJcbiAgICAgIHR5cGUgRW50aXR5T2JqZWN0S2V5ID0ga2V5b2YgdHlwZW9mIGVudGl0eTtcclxuICAgICAgY29uc3QgZW50aXR5UHJvcGVydHlOYW1lID0gdGhpcy5rZXkgYXMgRW50aXR5T2JqZWN0S2V5O1xyXG4gICAgICByZXR1cm4gZW50aXR5W2VudGl0eVByb3BlcnR5TmFtZV0gPT09IHBhcmVudFJlZlxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyID0gKCkgPT4ge1xyXG4gICAgdmFyIGxvY2tlZENvbHVtbnMgPSB0aGlzLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sb2NrZWQtY29sdW1ucycpWzBdO1xyXG4gICAgdmFyIHVubG9ja2VkQ29sdW1ucyA9IHRoaXMucG9ydGFsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnVubG9ja2VkLWNvbHVtbnMnKVswXTtcclxuXHJcbiAgICB3aGlsZSAobG9ja2VkQ29sdW1ucyAmJiBsb2NrZWRDb2x1bW5zLmxhc3RDaGlsZCkgeyBsb2NrZWRDb2x1bW5zLnJlbW92ZUNoaWxkKGxvY2tlZENvbHVtbnMubGFzdENoaWxkKTsgfTtcclxuICAgIHdoaWxlICh1bmxvY2tlZENvbHVtbnMgJiYgdW5sb2NrZWRDb2x1bW5zLmxhc3RDaGlsZCkgeyB1bmxvY2tlZENvbHVtbnMucmVtb3ZlQ2hpbGQodW5sb2NrZWRDb2x1bW5zLmxhc3RDaGlsZCk7IH1cclxuICAgIHdoaWxlICh0aGlzLnNlbGVjdGVkQ2FyZHMubGVuZ3RoKSB7IHRoaXMuc2VsZWN0ZWRDYXJkcy5wb3AoKTsgfTtcclxuICAgIC8vdGhpcy5jb25maWcub25TZWxlY3Rpb25DaGFuZ2VkKFtdKTtcclxuICAgIC8vdGhpcy5jb25maWcuY2xlYXJGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFZhbHVlRnJvbVNvcnRQYXRoID0gKGFyZ3M6IFthbnksIHN0cmluZ1tdXSk6IGFueSA9PiB7XHJcbiAgICBsZXQgY3VycmVudDogYW55ID0gYXJnc1swXTtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBhcmdzWzFdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwYXJ0TmFtZTogc3RyaW5nO1xyXG4gICAgICBpZiAoaSAhPT0gYXJnc1sxXS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgcGFydE5hbWUgPSAnbycgKyBhcmdzWzFdW2ldO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcnROYW1lID0gYXJnc1sxXVtpXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGN1cnJlbnRbcGFydE5hbWVdKSB7XHJcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGFydE5hbWVdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlSXRlbXNTb3VyY2UobmV3RW50aXRpZXM6IEFycmF5PGFueT4sIHJldmVydDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5jbGVhcigpO1xyXG4gICAgaWYgKCFyZXZlcnQpXHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzY3JvbGxfcG9zaXRpb24nICsgdXVpZHY0KCksICcwJyk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5GaWx0ZXJSZWZzID0gW107XHJcbiAgICB0aGlzLmNhcmRGaWx0ZXJTdHIgPSBudWxsO1xyXG5cclxuICAgIGlmICghbmV3RW50aXRpZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubG9ja2VkQ29sdW1ucyA9IFtdO1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsb2NrZWRDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBsZXQgZW1wdHlQYXJlbnRzOiBBcnJheTxhbnk+ID0gW107XHJcbiAgICBsZXQgY29sdW1uczogQXJyYXk8YW55PiA9IFtdO1xyXG5cclxuICAgIGxldCBxdWVyeSA9IG5ldyBicmVlemUuRW50aXR5UXVlcnkoJ1F1ZXJ5JyArIHRoaXMucGFyZW50VGFibGVOYW1lKTtcclxuICAgIGxldCBwYXJlbnRSZWZzID0gbmV3RW50aXRpZXMubWFwKChlOiBhbnkpID0+IHsgcmV0dXJuIGVbdGhpcy5wYXJlbnRUYWJsZU5hbWUgKyAnUmVmJ107IH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5xdWVyeSlcclxuICAgICAgcXVlcnkgPSB0aGlzLmNvbmZpZy5xdWVyeShxdWVyeSwgdGhpcy5jb25maWcucGFyZW50VG9DaGlsZFJlbGF0aW9uc2hpcE5hbWUpO1xyXG4gICAgZWxzZVxyXG4gICAgICBxdWVyeSA9IHF1ZXJ5LmV4cGFuZCh0aGlzLmNvbmZpZy5wYXJlbnRUb0NoaWxkUmVsYXRpb25zaGlwTmFtZSk7XHJcblxyXG4gICAgbGV0IHVuaXF1ZVBhcmVudFJlZnMgPSBbLi4ubmV3IFNldChwYXJlbnRSZWZzKV1cclxuICAgIHF1ZXJ5ID0gcXVlcnkud2hlcmUodGhpcy5wYXJlbnRUYWJsZU5hbWUgKyAnUmVmJywgJ2luJywgdW5pcXVlUGFyZW50UmVmcyk7XHJcblxyXG4gICAgLy9pZiAodGhpcy5wYXJlbnRRdWVyeSlcclxuICAgIC8vICBxdWVyeSA9IHF1ZXJpZXNbdGhpcy5wYXJlbnRRdWVyeV0ocXVlcnkpO1xyXG5cclxuICAgIHRoaXMuZGF0YUNvbnRleHQuZW50aXR5QWNjZXNzKCkuY3VzdG9tU2VhcmNoKHRoaXMubW9kZWxUeXBlTG9va3VwLmdldFR5cGUodGhpcy5wYXJlbnRUYWJsZU5hbWUpLCBxdWVyeSkuc3Vic2NyaWJlKChwYXJlbnRzKSA9PiB7XHJcbiAgICAgIC8vdGhpcy5jb25maWcuYWRkUGFyZW50c1RvRmlsdGVyKHBhcmVudHMpO1xyXG5cclxuICAgICAgZW1wdHlQYXJlbnRzID0gXy5maWx0ZXIocGFyZW50cywgKHBhcmVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1VuZGVmaW5lZENoaWxkcmVuKHBhcmVudCkgfHwgdGhpcy5oYXNFbXB0eUNoaWxkcmVuKHBhcmVudCkgfHwgdGhpcy5oYXNJbmFjdGl2ZUNoaWxkcmVuKHBhcmVudCkpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5oYXNBZGRlZFVuc2F2ZWRDaGlsZHJlbihuZXdFbnRpdGllcywgcGFyZW50LlJlZikpIHtcclxuICAgICAgICAgICAgcGFyZW50WydjYXJkcyddID0gW107XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgcXVlcnlhYmxlUGFyZW50UmVmcyA9IF8ucGx1Y2socGFyZW50cywgdGhpcy5rZXkpXHJcblxyXG4gICAgICBsZXQgaW5hY3RpdmVXaXRoUGFyZW50OiBBcnJheTxhbnk+ID0gW107XHJcbiAgICAgIGxldCBhY3RpdmVXaXRob3V0UGFyZW50OiBBcnJheTxhbnk+ID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVuYXNzaWduZWQ6IHRydWUsXHJcbiAgICAgICAgICBjYXJkczogW11cclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcblxyXG4gICAgICBwYXJlbnRzLmZvckVhY2goKHBhcmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgcGFyZW50WydjYXJkcyddID0gW107XHJcbiAgICAgICAgaWYgKHF1ZXJ5YWJsZVBhcmVudFJlZnMuaW5kZXhPZihwYXJlbnRbdGhpcy5rZXldKSAhPT0gLTEpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmxvY2tQcm9wZXJ0eSAhPT0gbnVsbCAmJiBwYXJlbnRbdGhpcy5sb2NrUHJvcGVydHldKSB7XHJcbiAgICAgICAgICAgIGxvY2tlZENvbHVtbnMucHVzaChwYXJlbnQpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxvY2tQcm9wZXJ0eSA9PT0gbnVsbCB8fCAhcGFyZW50W3RoaXMubG9ja1Byb3BlcnR5XSAmJiAhXy5jb250YWlucyhlbXB0eVBhcmVudHMsIHBhcmVudCkpIHtcclxuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHBhcmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBhcmVudFsnaW5hY3RpdmUnXSA9IHRydWU7XHJcbiAgICAgICAgICBpbmFjdGl2ZVdpdGhQYXJlbnQucHVzaChwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBuZXdFbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcclxuICAgICAgICB2YXIgZW50aXR5UGFyZW50ID0gXy5maW5kKHBhcmVudHMsIChwKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW50aXR5WydvJyArIHRoaXMucmVsYXRlZFBhcmVudE5hbWVdKVxyXG4gICAgICAgICAgICByZXR1cm4gcC5SZWYgPT09IGVudGl0eVsnbycgKyB0aGlzLnJlbGF0ZWRQYXJlbnROYW1lXS5SZWY7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChlbnRpdHlQYXJlbnQpIHtcclxuICAgICAgICAgIGlmIChxdWVyeWFibGVQYXJlbnRSZWZzLmluZGV4T2YoZW50aXR5UGFyZW50W3RoaXMua2V5XSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGVudGl0eVBhcmVudC5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVudGl0eVBhcmVudC5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgIWVudGl0eVBhcmVudCAmJlxyXG4gICAgICAgICAgZW50aXR5WydvJyArIHRoaXMucmVsYXRlZFBhcmVudE5hbWVdICYmXHJcbiAgICAgICAgICBlbnRpdHlbJ28nICsgdGhpcy5yZWxhdGVkUGFyZW50TmFtZV0uUmVmID4gMCkge1xyXG4gICAgICAgICAgbGV0IGluYWN0aXZlUGFyZW50ID0gZW50aXR5WydvJyArIHRoaXMucmVsYXRlZFBhcmVudE5hbWVdO1xyXG4gICAgICAgICAgaWYgKGluYWN0aXZlV2l0aFBhcmVudC5pbmRleE9mKGluYWN0aXZlUGFyZW50KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgaW5hY3RpdmVQYXJlbnRbJ2NhcmRzJ10gPSBbXTtcclxuICAgICAgICAgICAgaW5hY3RpdmVQYXJlbnRbJ2luYWN0aXZlJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICBpbmFjdGl2ZVdpdGhQYXJlbnQucHVzaChpbmFjdGl2ZVBhcmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbmFjdGl2ZVBhcmVudC5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYWN0aXZlV2l0aG91dFBhcmVudFswXS5jYXJkcy5wdXNoKHRoaXMuY3JlYXRlRGF0YUZvckVudGl0eShlbnRpdHkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY29sdW1uU29ydCkge1xyXG4gICAgICAgIHZhciBjb2x1bW5Tb3J0UGFydHMgPSBbJyddOyAvL3RoaXMuY29sdW1uU29ydC5zcGxpdCgnLycpO1xyXG5cclxuICAgICAgICBsb2NrZWRDb2x1bW5zID0gXy5zb3J0QnkobG9ja2VkQ29sdW1ucywgKG8pID0+IHtcclxuICAgICAgICAgIHZhciB2ID0gdGhpcy5nZXRWYWx1ZUZyb21Tb3J0UGF0aChbbywgY29sdW1uU29ydFBhcnRzXSk7XHJcbiAgICAgICAgICBpZiAodilcclxuICAgICAgICAgICAgcmV0dXJuIF8uaXNTdHJpbmcodikgPyB2LnRyaW0oKSA6IHY7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbHVtbnMgPSBfLnNvcnRCeShjb2x1bW5zLCAobykgPT4ge1xyXG4gICAgICAgICAgdmFyIHYgPSB0aGlzLmdldFZhbHVlRnJvbVNvcnRQYXRoKFtvLCBjb2x1bW5Tb3J0UGFydHNdKTtcclxuICAgICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2KSA/IHYudHJpbSgpIDogdjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaW5hY3RpdmVXaXRoUGFyZW50ID0gXy5zb3J0QnkoaW5hY3RpdmVXaXRoUGFyZW50LCAobykgPT4ge1xyXG4gICAgICAgICAgdmFyIHYgPSB0aGlzLmdldFZhbHVlRnJvbVNvcnRQYXRoKFtvLCBjb2x1bW5Tb3J0UGFydHNdKTtcclxuICAgICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2KSA/IHYudHJpbSgpIDogdjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZW1wdHlQYXJlbnRzID0gXy5zb3J0QnkoZW1wdHlQYXJlbnRzLCAobykgPT4ge1xyXG4gICAgICAgICAgdmFyIHYgPSB0aGlzLmdldFZhbHVlRnJvbVNvcnRQYXRoKFtvLCBjb2x1bW5Tb3J0UGFydHNdKTtcclxuICAgICAgICAgIGlmICh2KVxyXG4gICAgICAgICAgICByZXR1cm4gXy5pc1N0cmluZyh2KSA/IHYudHJpbSgpIDogdjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcuY2FyZFNvcnQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBsb2NrZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgICAgY29sdW1uLmNhcmRzID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmNhcmRTb3J0KGNvbHVtbi5jYXJkcyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICBjb2x1bW4uY2FyZHMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuY2FyZFNvcnQoY29sdW1uLmNhcmRzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaW5hY3RpdmVXaXRoUGFyZW50LmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgICAgY29sdW1uLmNhcmRzID0gdGhpcy5jb25maWcucmVzdWx0Q29uZmlnLmNhcmRTb3J0KGNvbHVtbi5jYXJkcyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGFjdGl2ZVdpdGhvdXRQYXJlbnQuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICBjb2x1bW4uY2FyZHMgPSB0aGlzLmNvbmZpZy5yZXN1bHRDb25maWcuY2FyZFNvcnQoY29sdW1uLmNhcmRzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuaW5hY3RpdmVWaXNpYmxlKVxyXG4gICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChpbmFjdGl2ZVdpdGhQYXJlbnQpO1xyXG5cclxuICAgICAgY29sdW1ucyA9IGNvbHVtbnMuY29uY2F0KGVtcHR5UGFyZW50cyk7XHJcblxyXG4gICAgICBpZiAodGhpcy51bmFzc2lnbmVkVmlzaWJsZSAmJiAhdGhpcy51bmFzc2lnbmVkTG9ja2VkKVxyXG4gICAgICAgIGNvbHVtbnMgPSBjb2x1bW5zLmNvbmNhdChhY3RpdmVXaXRob3V0UGFyZW50KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnVuYXNzaWduZWRWaXNpYmxlICYmIHRoaXMudW5hc3NpZ25lZExvY2tlZClcclxuICAgICAgICBsb2NrZWRDb2x1bW5zID0gY29sdW1ucy5jb25jYXQobG9ja2VkQ29sdW1ucyk7XHJcblxyXG4gICAgICB0aGlzLmxvY2tlZENvbHVtbnMgPSBsb2NrZWRDb2x1bW5zO1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgIG5ldyBDYXJkVmlldyh0aGlzLCB0aGlzLmxvY2tlZENvbHVtbnMsIHRoaXMuY29sdW1ucyk7XHJcblxyXG4gICAgICAgIGlmIChyZXZlcnQpIHtcclxuICAgICAgICAgIGxldCBjb2x1bW5FbGVtZW50ID0gdGhpcy5wb3J0YWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudHJ1LWNhcmQtcG9ydGFsLWNvbHVtbnMnKVswXTtcclxuICAgICAgICAgIGxldCBwcmV2aW91c1Njcm9sbFBvc2l0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Njcm9sbF9wb3NpdGlvbicgKyB1dWlkdjQoKSk7XHJcbiAgICAgICAgICBjb2x1bW5FbGVtZW50LnNjcm9sbExlZnQgPSBwcmV2aW91c1Njcm9sbFBvc2l0aW9uID8gK3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24gOiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG8gPSAoKSA9PiB7XHJcbiAgICB0aGlzLnN1YnMucHVzaCh0aGlzLnNlYXJjaFZpZXdFdmVudEhhbmRsZXIub25TZWFyY2goKS5waXBlKHNraXAoMSkpLnN1YnNjcmliZSgoc2V0dXBRdWVyeTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25TZWFyY2goc2V0dXBRdWVyeSk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uU2VhcmNoID0gKHNldHVwUXVlcnk6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5pc0J1c3kgPSB0cnVlO1xyXG4gICAgdGhpcy5idXN5TWVzc2FnZSA9ICdTZWFyY2hpbmcuLi4nO1xyXG4gICAgbGV0IGpvaW5zID0gW107XHJcblxyXG4gICAgam9pbnMucHVzaCh0aGlzLmRhdGFDb250ZXh0LmVudGl0eUFjY2VzcygpLnNlYXJjaChcclxuICAgICAgdGhpcy5tb2RlbFR5cGVMb29rdXAuZ2V0VHlwZSh0aGlzLmNoaWxkVGFibGVOYW1lKSxcclxuICAgICAgc2V0dXBRdWVyeSxcclxuICAgICAgbnVsbCwgZmFsc2UpKTtcclxuXHJcbiAgICBmb3JrSm9pbihqb2lucykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogcmVzdWx0cyA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJkcyA9IHJlc3VsdHNbMF07XHJcbiAgICAgICAgdGhpcy51cGRhdGVJdGVtc1NvdXJjZShyZXN1bHRzWzBdLCBmYWxzZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmJ1c3lNZXNzYWdlID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0aW9uID0gKGNhcmQ6IENhcmQpID0+IHtcclxuICAgIGlmICghY2FyZC5zZWxlY3RlZCkge1xyXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdGVkQ2FyZHMuaW5kZXhPZihjYXJkKTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2FyZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgIGNhcmQuY2FyZEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndHJ1LWNhcmQtc2VsZWN0ZWQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBpbmRleCA9IHRoaXMuc2VsZWN0ZWRDYXJkcy5pbmRleE9mKGNhcmQpO1xyXG4gICAgICBpZiAoaW5kZXggPT09IC0xKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkcy5wdXNoKGNhcmQpO1xyXG5cclxuICAgICAgY2FyZC5jYXJkRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1zZWxlY3RlZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vc2NvcGUuY29uZmlnLm9uU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3RlZENhcmRzKTtcclxuICB9XHJcblxyXG4gIGRyYWdTdGFydCA9IChlOiBhbnksIGNhcmQ6IENhcmQpID0+IHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgLy9zY29wZS5jb25maWcuY2xvc2VTZWFyY2hQYW5lbCgpO1xyXG5cclxuICAgIGlmICgoY2FyZC5jb2x1bW4uZGF0YS51bmFzc2lnbmVkICYmICF0aGlzLnVuYXNzaWduZWREcmFnZ2FibGUpIHx8XHJcbiAgICAgIChjYXJkLmNvbHVtbi5kYXRhLmluYWN0aXZlICYmICF0aGlzLmluYWN0aXZlRHJhZ2dhYmxlKSkge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnO1xyXG5cclxuICAgIGlmICghY2FyZC5zZWxlY3RlZCkge1xyXG4gICAgICBjYXJkLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oY2FyZClcclxuICAgIH0gICBcclxuXHJcbiAgICBsZXQgY2xvbmVkTm9kZSA9IGUudGFyZ2V0LmNsb25lTm9kZSh0cnVlKTtcclxuICAgIGNsb25lZE5vZGUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICBjbG9uZWROb2RlLnN0eWxlLnRvcCA9IFwiMHB4XCI7XHJcbiAgICBjbG9uZWROb2RlLnN0eWxlLmxlZnQgPSBcIi0xMDAwMHB4XCI7XHJcbiAgICBjbG9uZWROb2RlLnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xyXG4gICAgY2xvbmVkTm9kZS5jbGFzc0xpc3QuYWRkKCdjbG9uZWQtY2FyZCcpO1xyXG5cclxuICAgIHZhciBpbm5lciA9IGNsb25lZE5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRydS1jYXJkLXBvcnRhbC1jYXJkXCIpWzBdO1xyXG4gICAgaW5uZXIuc3R5bGUudHJhbnNmb3JtID0gXCJyb3RhdGUoLTEwZGVnKVwiO1xyXG4gICAgaW5uZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgaW5uZXIuc3R5bGUuekluZGV4ID0gMTA7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjbG9uZWROb2RlKTtcclxuICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShjbG9uZWROb2RlLCA1MCwgNTApO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZHJhZ092ZXIgPSAoZTogYW55LCBjYXJkOiBDYXJkKSA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcclxuICAgIGlmICghdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndHJ1LWNhcmQtcG9ydGFsLWNhcmQtY29udGFpbmVyJykgfHxcclxuICAgICAgKGNhcmQuY29sdW1uLmRhdGEudW5hc3NpZ25lZCAmJiAhdGhpcy51bmFzc2lnbmVkRHJvcHBhYmxlKSB8fFxyXG4gICAgICAoY2FyZC5jb2x1bW4uZGF0YS5pbmFjdGl2ZSAmJiAhdGhpcy5pbmFjdGl2ZURyb3BwYWJsZSkpIHtcclxuICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdub25lJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmFnRW5kID0gKGU6IGFueSkgPT4ge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBsZXQgZWxlbWVudHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjbG9uZWQtY2FyZCcpO1xyXG4gICAgd2hpbGUgKGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZWxlbWVudHNbMF0ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoZWxlbWVudHNbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndHJ1LWNhcmQtcGxhY2Vob2xkZXInKTtcclxuICAgIHdoaWxlIChlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGVsZW1lbnRzWzBdLnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGVsZW1lbnRzWzBdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyb3AgPSAoZTogYW55LCBjYXJkOiBDYXJkKSA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSB0aGlzLnNlbGVjdGVkQ2FyZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcclxuICAgICAgbGV0IGluZGV4ID0gY2FyZC5jb2x1bW4uY2FyZHMuaW5kZXhPZih0aGlzLnNlbGVjdGVkQ2FyZHNbaV0pO1xyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkc1tpXS51cGRhdGVEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNhcmQuY29sdW1uLmRhdGEudW5hc3NpZ25lZCAmJiAhdGhpcy51bmFzc2lnbmVkRHJvcHBhYmxlIHx8XHJcbiAgICAgIGNhcmQuY29sdW1uLmRhdGEuaW5hY3RpdmUgJiYgIXRoaXMuaW5hY3RpdmVEcm9wcGFibGUgfHxcclxuICAgICAgIXRoaXMuc2VsZWN0ZWRDYXJkcy5sZW5ndGgpIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZyA9PT0gbnVsbCkge1xyXG4gICAgICAvL3RoaXMuY29uZmlnLm9uRHJvcChjYXJkLCB0aGlzLnNlbGVjdGVkQ2FyZHMsIHRoaXMuY29uZmlnLCB0aGlzLnBvcnRhbCwgZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRDYXJkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNhcmQuY29sdW1uLmFkZENhcmQodGhpcy5zZWxlY3RlZENhcmRzW2ldKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMuc2VsZWN0ZWRDYXJkcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkc1tpXS5jb2x1bW4ucmVtb3ZlQ2FyZCh0aGlzLnNlbGVjdGVkQ2FyZHNbaV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3aGlsZSAodGhpcy5zZWxlY3RlZENhcmRzLmxlbmd0aCkgeyB0aGlzLnNlbGVjdGVkQ2FyZHMucG9wKCk7IH07XHJcbiAgICAgIFxyXG4gICAgICAvL2xldCBzYXZlUHJvbWlzZSA9IC5jb25maWcuc2F2ZSgpO1xyXG4gICAgICAvL2lmIChzYXZlUHJvbWlzZSkge1xyXG4gICAgICAvLyAgdGhpcy5wb3J0YWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtZGlzYWJsZWQnKTtcclxuICAgICAgLy8gIGF3YWl0IHNhdmVQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG4gICAgICAvLyAgICB0aGlzLnBvcnRhbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3RydS1jYXJkLXBvcnRhbC1kaXNhYmxlZCcpO1xyXG4gICAgICAvLyAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAvLyAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIC8vICAgIHZhciBjb2x1bW5FbGVtZW50ID0gdGhpcy5wb3J0YWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudHJ1LWNhcmQtcG9ydGFsLWNvbHVtbnMnKVswXTtcclxuICAgICAgLy8gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Njcm9sbF9wb3NpdGlvbicgKyB0aGlzLnVuaXF1ZUlkLCBjb2x1bW5FbGVtZW50LnNjcm9sbExlZnQpO1xyXG4gICAgICAvLyAgICBzY29wZS5jb25maWcucmV2ZXJ0KCk7XHJcbiAgICAgIC8vICAgIHRoaXMucG9ydGFsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndHJ1LWNhcmQtcG9ydGFsLWRpc2FibGVkJyk7XHJcbiAgICAgIC8vICB9KTtcclxuICAgICAgLy99IGVsc2Uge1xyXG4gICAgICAvLyAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAvLyAgdmFyIGNvbHVtbkVsZW1lbnQgPSB0aGlzLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50cnUtY2FyZC1wb3J0YWwtY29sdW1ucycpWzBdO1xyXG4gICAgICAvLyAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Njcm9sbF9wb3NpdGlvbicgKyB0aGlzLnVuaXF1ZUlkLCBjb2x1bW5FbGVtZW50LnNjcm9sbExlZnQpO1xyXG4gICAgICAvLyAgc2NvcGUuY29uZmlnLnJldmVydCgpO1xyXG4gICAgICAvL31cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhcmVudFRhYmxlTmFtZSA9IHRoaXMuY29uZmlnLnBhcmVudFRhYmxlTmFtZTtcclxuICAgIHRoaXMucGFyZW50VGFibGVQbHVyYWxMYWJlbCA9IHRoaXMuY29uZmlnLnBhcmVudFRhYmxlUGx1cmFsTGFiZWw7XHJcbiAgICB0aGlzLmNoaWxkVGFibGVOYW1lID0gdGhpcy5jb25maWcuY2hpbGRUYWJsZU5hbWU7XHJcbiAgICB0aGlzLmNoaWxkVGFibGVQbHVyYWxMYWJlbCA9IHRoaXMuY29uZmlnLmNoaWxkVGFibGVQbHVyYWxMYWJlbDtcclxuICAgIHRoaXMua2V5ID0gdGhpcy5jb25maWcua2V5O1xyXG4gICAgdGhpcy5wYXJlbnRRdWVyeSA9IG51bGxcclxuICAgIHRoaXMubG9ja1Byb3BlcnR5ID0gdGhpcy5jb25maWcubG9ja1Byb3BlcnR5O1xyXG4gICAgdGhpcy5jb2xvciA9IHRoaXMuY29uZmlnLmNvbG9yO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkVmlzaWJsZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWRWaXNpYmxlO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkTmFtZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWROYW1lO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkTG9ja2VkID0gdGhpcy5jb25maWcudW5hc3NpZ25lZExvY2tlZDtcclxuICAgIHRoaXMudW5hc3NpZ25lZENvbG9yID0gdGhpcy5jb25maWcudW5hc3NpZ25lZENvbG9yO1xyXG4gICAgdGhpcy51bmFzc2lnbmVkRHJhZ2dhYmxlID0gdGhpcy5jb25maWcudW5hc3NpZ25lZERyYWdnYWJsZTtcclxuICAgIHRoaXMudW5hc3NpZ25lZERyb3BwYWJsZSA9IHRoaXMuY29uZmlnLnVuYXNzaWduZWREcm9wcGFibGU7XHJcblxyXG4gICAgdGhpcy5pbmFjdGl2ZVZpc2libGUgPSB0aGlzLmNvbmZpZy5pbmFjdGl2ZVZpc2libGU7XHJcbiAgICB0aGlzLmluYWN0aXZlRHJhZ2dhYmxlID0gdGhpcy5jb25maWcuaW5hY3RpdmVEcmFnZ2FibGU7XHJcbiAgICB0aGlzLmluYWN0aXZlRHJvcHBhYmxlID0gdGhpcy5jb25maWcuaW5hY3RpdmVEcm9wcGFibGU7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5Tb3J0ID0gdGhpcy5jb25maWcuY29sdW1uU29ydDtcclxuICAgIHRoaXMuY2FyZFNvcnQgPSB0aGlzLmNvbmZpZy5jYXJkU29ydDtcclxuXHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLmtleS5sYXN0SW5kZXhPZih0aGlzLnBhcmVudFRhYmxlTmFtZSk7XHJcbiAgICBsZXQgcHJlZml4ID0gdGhpcy5rZXkuc3Vic3RyaW5nKGluZGV4LCAtMSk7XHJcbiAgICBpZiAocHJlZml4KSB7XHJcbiAgICAgIHRoaXMucmVsYXRlZFBhcmVudE5hbWUgPSBwcmVmaXggKyB0aGlzLnBhcmVudFRhYmxlTmFtZTtcclxuICAgICAgdGhpcy5yZWxhdGVkQ2hpbGROYW1lID0gcHJlZml4ICsgdGhpcy5jaGlsZFRhYmxlUGx1cmFsTGFiZWw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbGF0ZWRQYXJlbnROYW1lID0gdGhpcy5wYXJlbnRUYWJsZU5hbWU7XHJcbiAgICAgIHRoaXMucmVsYXRlZENoaWxkTmFtZSA9IHRoaXMuY2hpbGRUYWJsZVBsdXJhbExhYmVsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudW5pcXVlSWQgPSB1dWlkdjQoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG8oKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdGlvbiA9IChjYXJkOiBDYXJkKSA9PiB7XHJcbiAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdGVkQ2FyZHMuaW5kZXhPZihjYXJkKTtcclxuICAgIGlmIChpbmRleCAhPT0gLTEpXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIGNhcmQuY2FyZEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndHJ1LWNhcmQtc2VsZWN0ZWQnKTtcclxuXHJcbiAgICAvL3Njb3BlLmNvbmZpZy5vblNlbGVjdGlvbkNoYW5nZWQoc2VsZWN0ZWRDYXJkcyk7XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBDYXJkVmlldyB7XHJcbiAgcHJpdmF0ZSBsb2NrZWRDb2x1bW5zRWxlbWVudDtcclxuICBwcml2YXRlIHVubG9ja2VkQ29sdW1uc0VsZW1lbnRcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhcmRDb2x1bW46IFRydUNhcmRDb2x1bW4sXHJcbiAgICBwcml2YXRlIGxvY2tlZENvbHVtbnM6IGFueSxcclxuICAgIHByaXZhdGUgY29sdW1uczogYW55KSB7XHJcbiAgICB0aGlzLmxvY2tlZENvbHVtbnNFbGVtZW50ID0gdGhpcy5jYXJkQ29sdW1uLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sb2NrZWQtY29sdW1ucycpWzBdO1xyXG4gICAgdGhpcy51bmxvY2tlZENvbHVtbnNFbGVtZW50ID0gdGhpcy5jYXJkQ29sdW1uLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy51bmxvY2tlZC1jb2x1bW5zJylbMF07XHJcblxyXG4gICAgaWYgKGxvY2tlZENvbHVtbnMgJiYgbG9ja2VkQ29sdW1ucy5sZW5ndGgpXHJcbiAgICAgIHRoaXMuYWRkQ29sdW1ucyhsb2NrZWRDb2x1bW5zLCB0cnVlKTtcclxuXHJcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aClcclxuICAgICAgdGhpcy5hZGRDb2x1bW5zKGNvbHVtbnMsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29sdW1uVmlld3M6IEFycmF5PENvbHVtbj4gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBhZGRDb2x1bW5zID0gKGNvbHVtbkRhdGE6IEFycmF5PGFueT4sIGxvY2tlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgbGV0IGNvbHVtbnNFbGVtZW50OiBIVE1MRGl2RWxlbWVudDtcclxuICAgIGlmIChsb2NrZWQpXHJcbiAgICAgIGNvbHVtbnNFbGVtZW50ID0gdGhpcy5jYXJkQ29sdW1uLnBvcnRhbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5sb2NrZWQtY29sdW1ucycpWzBdO1xyXG4gICAgZWxzZVxyXG4gICAgICBjb2x1bW5zRWxlbWVudCA9IHRoaXMuY2FyZENvbHVtbi5wb3J0YWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudW5sb2NrZWQtY29sdW1ucycpWzBdO1xyXG5cclxuICAgIGxldCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbkRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5jb2x1bW5WaWV3cy5wdXNoKG5ldyBDb2x1bW4odGhpcy5jYXJkQ29sdW1uLCBjb2x1bW5EYXRhW2ldLCBjb2x1bW5zRWxlbWVudCwgbG9ja2VkLCBpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29sdW1uc0VsZW1lbnQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xyXG5cclxuICAgIHRoaXMuY2FyZENvbHVtbi5idXN5TWVzc2FnZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ29sdW1ucyA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLmNhcmRDb2x1bW4uY29sdW1uRmlsdGVyUmVmcyAmJiB0aGlzLmNhcmRDb2x1bW4uY29sdW1uRmlsdGVyUmVmcy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGZpbHRlcmVkQ29sdW1ucztcclxuXHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpXTtcclxuXHJcbiAgICAgICAgaWYgKCFjb2x1bW4ubG9ja2VkICYmIGNvbHVtbi5kYXRhLmVudGl0eUFzcGVjdCkge1xyXG4gICAgICAgICAgdmFyIGZvdW5kID0gdGhpcy5jYXJkQ29sdW1uLmNvbHVtbkZpbHRlclJlZnMuZmlsdGVyKHggPT4geCA9PT0gY29sdW1uLmRhdGEuUmVmKS5sZW5ndGggPiAwO1xyXG5cclxuICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICBjb2x1bW4uY29sdW1uRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd0cnUtY2FyZC1wb3J0YWwtY29sdW1uLWZpbHRlcmVkJyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb2x1bW4uY29sdW1uRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY29sdW1uLWZpbHRlcmVkJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbaV07XHJcbiAgICAgICAgY29sdW1uLmNvbHVtbkVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndHJ1LWNhcmQtcG9ydGFsLWNvbHVtbi1maWx0ZXJlZCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jbGFzcyBDb2x1bW4ge1xyXG4gIHByaXZhdGUgY2FyZHM6IEFycmF5PGFueT4gPSBbXTtcclxuICBwcml2YXRlIGxvY2tlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIHBhcmVudEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50O1xyXG5cclxuICBjb2x1bW5FbGVtZW50O1xyXG4gIGRhdGE6IGFueTtcclxuICBjYXJkU2Nyb2xsUG9ydEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50O1xyXG4gIHNlbGVjdEFsbEJ1dHRvbiE6IEhUTUxEaXZFbGVtZW50O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2FyZENvbHVtbjogVHJ1Q2FyZENvbHVtbixcclxuICAgIGRhdGE6IGFueSxcclxuICAgIHBhcmVudEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50LFxyXG4gICAgbG9ja2VkOiBib29sZWFuLFxyXG4gICAgaW5kZXg6IG51bWJlcikge1xyXG5cclxuICAgIHRoaXMubG9ja2VkID0gbG9ja2VkO1xyXG4gICAgdGhpcy5wYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudDtcclxuXHJcbiAgICBsZXQgY29sdW1uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgY29sdW1uRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY29sdW1uJyk7XHJcbiAgICBjb2x1bW5FbGVtZW50LmlkID0gaW5kZXgudG9TdHJpbmcoKTtcclxuXHJcbiAgICBpZiAoZGF0YT8uaW5hY3RpdmUpXHJcbiAgICAgIGNvbHVtbkVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHJ1LWNhcmQtcG9ydGFsLWNvbHVtbi1pbmFjdGl2ZScpO1xyXG4gICAgY29sdW1uRWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuY2FyZENvbHVtbi5jb25maWcud2lkdGggKyAncHgnO1xyXG4gICAgdGhpcy5jb2x1bW5FbGVtZW50ID0gY29sdW1uRWxlbWVudDtcclxuXHJcbiAgICB0aGlzLmNhcmRTY3JvbGxQb3J0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgdGhpcy5jYXJkU2Nyb2xsUG9ydEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndHJ1LWNhcmQtcG9ydGFsLWNhcmQtc2Nyb2xsLXBvcnQnKTtcclxuXHJcbiAgICBuZXcgQ29sdW1uSGVhZGVyKHRoaXMuY2FyZENvbHVtbiwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5jb2x1bW5FbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY2FyZFNjcm9sbFBvcnRFbGVtZW50KTtcclxuICAgIHRoaXMuY29sdW1uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmaWx0ZXItY2FyZHMnLCAoZSkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZURhdGFCeUZpbHRlcigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY29sdW1uRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEVtcHR5Q2FyZCA9ICgpID0+IHtcclxuICAgIGxldCBlbXB0eUNhcmRzID0gXy5maWx0ZXIodGhpcy5jYXJkcywgZnVuY3Rpb24gKGNhcmQpIHsgcmV0dXJuICFjYXJkLmRhdGEgfSk7XHJcbiAgICBpZiAoIWVtcHR5Q2FyZHMubGVuZ3RoKVxyXG4gICAgICB0aGlzLmNhcmRzLnB1c2gobmV3IENhcmQodGhpcy5jYXJkQ29sdW1uLCB0aGlzLCBudWxsLCBmYWxzZSkpO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0QWxsQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUVtcHR5Q2FyZCA9ICgpID0+IHtcclxuICAgIHZhciBlbXB0eUNhcmRzID0gXy5maWx0ZXIodGhpcy5jYXJkcywgKGNhcmQpID0+IHsgcmV0dXJuICFjYXJkLmRhdGEgfSk7XHJcbiAgICBpZiAoZW1wdHlDYXJkcy5sZW5ndGgpIHtcclxuICAgICAgdmFyIGVtcHR5Q2FyZCA9IGVtcHR5Q2FyZHNbMF07XHJcbiAgICAgIHZhciBlbXB0eUNhcmRFbGVtZW50ID0gZW1wdHlDYXJkLmNhcmRDb250YWluZXJFbGVtZW50O1xyXG4gICAgICBlbXB0eUNhcmRFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZW1wdHlDYXJkRWxlbWVudCk7XHJcbiAgICAgIHZhciBpbmRleCA9IHRoaXMuY2FyZHMuaW5kZXhPZihlbXB0eUNhcmRzWzBdKTtcclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgICB0aGlzLmNhcmRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RBbGxCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbHVtbklzVmlzdWFsbHlFbXB0eSA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLmNhcmRzLmV2ZXJ5KGZ1bmN0aW9uIChjYXJkKSB7XHJcbiAgICAgIHJldHVybiBjYXJkLmNhcmRDb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygndHJ1LWNhcmQtcG9ydGFsLWNhcmQtZmlsdGVyZWQnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVDYXJkID0gKGNhcmQ6IGFueSkgPT4ge1xyXG4gICAgY2FyZC5jYXJkQ29udGFpbmVyRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNhcmQuY2FyZENvbnRhaW5lckVsZW1lbnQpO1xyXG5cclxuICAgIHZhciBpbmRleCA9IHRoaXMuZGF0YS5jYXJkcy5pbmRleE9mKGNhcmQuZGF0YSk7XHJcbiAgICBpZiAoaW5kZXggIT09IC0xKVxyXG4gICAgICB0aGlzLmRhdGEuY2FyZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIGluZGV4ID0gdGhpcy5jYXJkcy5pbmRleE9mKGNhcmQpO1xyXG4gICAgaWYgKGluZGV4ICE9PSAtMSlcclxuICAgICAgdGhpcy5jYXJkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgaWYgKCF0aGlzLmNhcmRzLmxlbmd0aCB8fCB0aGlzLmNvbHVtbklzVmlzdWFsbHlFbXB0eSgpKVxyXG4gICAgICB0aGlzLmFkZEVtcHR5Q2FyZCgpO1xyXG5cclxuICAgIGNhcmQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVEYXRhQnlGaWx0ZXIgPSAoKSA9PiB7XHJcbiAgICBsZXQgY2FyZEZpbHRlclN0ciA9IHRoaXMuY2FyZENvbHVtbi5jYXJkRmlsdGVyU3RyO1xyXG4gICAgaWYgKGNhcmRGaWx0ZXJTdHIpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhcmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGNhcmQgPSB0aGlzLmNhcmRzW2ldO1xyXG5cclxuICAgICAgICBpZiAoY2FyZC5kYXRhICYmIGNhcmQuZGF0YS4kZW50aXR5KSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyUGFydHMgPSBjYXJkRmlsdGVyU3RyLnNwbGl0KC8oXFxzKykvKS5maWx0ZXIoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMudHJpbSgpLmxlbmd0aCA+IDA7IH0pO1xyXG4gICAgICAgICAgbGV0IGNhcmRGaWx0ZXJSZXN1bHQ7XHJcbiAgICAgICAgICAvL2lmIChzY29wZS5jb25maWcuY2FyZElkKSB7XHJcbiAgICAgICAgICAvLyAgY2FyZEZpbHRlclJlc3VsdCA9IGZpbHRlclBhcnRzLmV2ZXJ5KGZ1bmN0aW9uIChwYXJ0KSB7XHJcbiAgICAgICAgICAvLyAgICByZXR1cm4gc2NvcGUuY29uZmlnLmNhcmRJZChjYXJkLmRhdGEuJGVudGl0eSkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHBhcnQpICE9IC0xO1xyXG4gICAgICAgICAgLy8gIH0pO1xyXG4gICAgICAgICAgLy99IGVsc2Uge1xyXG4gICAgICAgICAgLy8gIGNhcmRGaWx0ZXJSZXN1bHQgPSBzY29wZS5jb25maWcuY2FyZEZpbHRlcihjYXJkLmRhdGEsIGNhcmRGaWx0ZXJTdHIpXHJcbiAgICAgICAgICAvL31cclxuXHJcbiAgICAgICAgICBpZiAoY2FyZEZpbHRlclJlc3VsdCkge1xyXG4gICAgICAgICAgICBjYXJkLmNhcmRDb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3RydS1jYXJkLXBvcnRhbC1jYXJkLWZpbHRlcmVkJyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjYXJkLmNhcmRDb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3RydS1jYXJkLXBvcnRhbC1jYXJkLWZpbHRlcmVkJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FyZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgY2FyZCA9IHRoaXMuY2FyZHNbaV07XHJcbiAgICAgICAgY2FyZC5jYXJkQ29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCd0cnUtY2FyZC1wb3J0YWwtY2FyZC1maWx0ZXJlZCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNhcmRFbGVtZW50cyA9IHRoaXMuY29sdW1uRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudHJ1LWNhcmQtcG9ydGFsLWNhcmQtY29udGFpbmVyOm5vdCgudHJ1LWNhcmQtcG9ydGFsLWNhcmQtZmlsdGVyZWQpOm5vdCguZW1wdHkpJyk7XHJcbiAgICBpZiAoY2FyZEVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlbW92ZUVtcHR5Q2FyZCgpO1xyXG4gICAgICBpZiAoIXRoaXMubG9ja2VkKSB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmNvbHVtbkVsZW1lbnQsIHRoaXMucGFyZW50RWxlbWVudC5maXJzdENoaWxkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hZGRFbXB0eUNhcmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZURhdGEgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNhcmRTY3JvbGxQb3J0RWxlbWVudC5pbm5lckhUTUwgPSAnJztcclxuXHJcbiAgICB3aGlsZSAodGhpcy5jYXJkcy5sZW5ndGgpIHsgdGhpcy5jYXJkcy5wb3AoKTsgfTtcclxuXHJcbiAgICBpZiAodGhpcy5jYXJkQ29sdW1uLmNhcmRzLmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FyZENvbHVtbi5jYXJkcy5sZW5ndGg7IGkrKylcclxuICAgICAgICB0aGlzLmNhcmRzLnB1c2gobmV3IENhcmQodGhpcy5jYXJkQ29sdW1uLCB0aGlzLCB0aGlzLmNhcmRDb2x1bW4uY2FyZHNbaV0sIGZhbHNlKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFkZEVtcHR5Q2FyZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWxsID0gKHNlbGVjdEFsbDogYm9vbGVhbikgPT4ge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhcmRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICB0aGlzLmNhcmRzW2ldLnNlbGVjdEFsbChzZWxlY3RBbGwpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ2FyZCA9IChjYXJkOiBhbnkpID0+IHtcclxuICAgIGNhcmQuZGF0YS4kZW50aXR5W3RoaXMuY2FyZENvbHVtbi5rZXldID0gdGhpcy5kYXRhLlJlZjtcclxuICAgIHRoaXMuZGF0YS5jYXJkcy51bnNoaWZ0KGNhcmQuZGF0YSk7XHJcbiAgICB0aGlzLmNhcmRzLnVuc2hpZnQobmV3IENhcmQodGhpcy5jYXJkQ29sdW1uLCB0aGlzLCBjYXJkLmRhdGEsIHRydWUpKTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIENhcmQge1xyXG4gIHByaXZhdGUgY2FyZENvbnRhaW5lckVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50O1xyXG4gIHByaXZhdGUgZGF0YTtcclxuXHJcbiAgY29sdW1uO1xyXG4gIGNhcmRFbGVtZW50OiBIVE1MRGl2RWxlbWVudDtcclxuICBzZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2FyZENvbHVtbjogVHJ1Q2FyZENvbHVtbixcclxuICAgIGNvbHVtbjogYW55LFxyXG4gICAgZGF0YTogYW55LFxyXG4gICAgZHJvcHBlZDogYm9vbGVhbikge1xyXG5cclxuICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xyXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcclxuXHJcbiAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3RydS1jYXJkLXBvcnRhbC1jYXJkLWNvbnRhaW5lcicpO1xyXG5cclxuICAgIGlmIChkcm9wcGVkKSB7XHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYW5pbWF0ZWQnKTtcclxuICAgICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdydWJiZXJCYW5kJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RyYWdnYWJsZScsICd0cnVlJyk7XHJcbiAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnZHJvcHBhYmxlJywgJ3RydWUnKTtcclxuXHJcbiAgICB0aGlzLmNhcmRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0aGlzLmNhcmRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3RydS1jYXJkLXBvcnRhbC1jYXJkJyk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmNvbHVtbi5kYXRhPy51bmFzc2lnbmVkKVxyXG4gICAgICB0aGlzLmNhcmRFbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuY2FyZENvbHVtbi5jb2xvciA/IHRoaXMuY2FyZENvbHVtbi5jb2xvciA6ICcjZmZmJztcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jYXJkRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmNhcmRDb2x1bW4udW5hc3NpZ25lZENvbG9yID8gdGhpcy5jYXJkQ29sdW1uLnVuYXNzaWduZWRDb2xvciA6ICcjZmZmJztcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ3N0YXJ0JywgKGUpID0+IHtcclxuICAgICAgICB0aGlzLmNhcmRDb2x1bW4uZHJhZ1N0YXJ0KGUsIHRoaXMpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnT3ZlcihlLCB0aGlzKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnRW5kKGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJkQ29sdW1uLmRyb3AoZSwgdGhpcyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkID0gIXRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5jYXJkQ29sdW1uLnVwZGF0ZVNlbGVjdGlvbih0aGlzKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIC8vZ29Ub0RldGFpbCh0aGlzLmRhdGEuJGVudGl0eS5SZWYpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnT3ZlcihlLCB0aGlzKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2FyZENvbHVtbi5kcmFnRW5kKGUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJkQ29sdW1uLmRyb3AoZSwgdGhpcyk7XHJcbiAgICAgICAgaWYgKCFlLmRlZmF1bHRQcmV2ZW50ZWQpXHJcbiAgICAgICAgICB0aGlzLmNvbHVtbi5yZW1vdmVFbXB0eUNhcmQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNhcmRFbGVtZW50KTtcclxuXHJcbiAgICBpZiAoZHJvcHBlZClcclxuICAgICAgdGhpcy5jb2x1bW4uY2FyZFNjcm9sbFBvcnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmNhcmRDb250YWluZXJFbGVtZW50LCB0aGlzLmNvbHVtbi5jYXJkU2Nyb2xsUG9ydEVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuY29sdW1uLmNhcmRTY3JvbGxQb3J0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNhcmRDb250YWluZXJFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEFsbCA9IChzZWxlY3RBbGw6IGFueSkgPT4ge1xyXG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdEFsbDtcclxuICAgIHRoaXMuY2FyZENvbHVtbi51cGRhdGVTZWxlY3Rpb24odGhpcyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXRhID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jYXJkRWxlbWVudC5pbm5lckhUTUwgPSAnJztcclxuICAgIHRoaXMuY2FyZENvbHVtbi5yZW1vdmVTZWxlY3Rpb24odGhpcylcclxuXHJcbiAgICBpZiAodGhpcy5kYXRhKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmIChmYWxzZSkge1xyXG4gICAgICAgIC8vc2NvcGUuY29uZmlnLmN1c3RvbUNhcmRWaWV3RmFjdG9yeShfdGhpcywgc2NvcGUuY29uZmlnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgY2FyZFRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5jYXJkQ29sdW1uLmNvbmZpZy5yZXN1bHRDb25maWcuY2FyZElkKHRoaXMuZGF0YSk7XHJcbiAgICAgICAgaWYgKHZhbHVlKVxyXG4gICAgICAgICAgY2FyZFRleHQuaW5uZXJIVE1MID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5jYXJkRWxlbWVudC5hcHBlbmRDaGlsZChjYXJkVGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FyZENvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKCdkcmFnZ2FibGUnLCAnZmFsc2UnKTtcclxuICAgICAgdGhpcy5jYXJkQ29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdlbXB0eScpO1xyXG4gICAgICB0aGlzLmNhcmRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2VtcHR5Jyk7XHJcblxyXG4gICAgICB2YXIgY2FyZENvbnRhaW5lckVtcHR5VGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcclxuICAgICAgY2FyZENvbnRhaW5lckVtcHR5VGV4dC5jbGFzc0xpc3QuYWRkKCdleGNsdWRlLWZyb20tZmlsdGVyJyk7XHJcbiAgICAgIGNhcmRDb250YWluZXJFbXB0eVRleHQuaW5uZXJIVE1MID0gJ0RyYWcgaXRlbXMgaGVyZSc7XHJcblxyXG4gICAgICB0aGlzLmNhcmRFbGVtZW50LmFwcGVuZENoaWxkKGNhcmRDb250YWluZXJFbXB0eVRleHQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgQ29sdW1uSGVhZGVyIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNhcmRDb2x1bW46IFRydUNhcmRDb2x1bW4sIGNvbHVtbjogQ29sdW1uKSB7XHJcbiAgICBsZXQgY29sdW1uSGVhZGVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgY29sdW1uSGVhZGVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY29sdW1uLWhlYWRlcicpO1xyXG5cclxuICAgIG5ldyBDb2x1bW5IZWFkZXJUZXh0KGNhcmRDb2x1bW4sIGNvbHVtbiwgY29sdW1uSGVhZGVyRWxlbWVudCk7XHJcbiAgICBuZXcgQ29sdW1uSGVhZGVyQnV0dG9uKGNvbHVtbiwgY29sdW1uSGVhZGVyRWxlbWVudCk7XHJcblxyXG4gICAgY29sdW1uLmNvbHVtbkVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNvbHVtbkhlYWRlckVsZW1lbnQsIGNvbHVtbi5jb2x1bW5FbGVtZW50LmZpcnN0Q2hpbGQpO1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgQ29sdW1uSGVhZGVyVGV4dCB7XHJcbiAgcHJpdmF0ZSBkYXRhOiBhbnk7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjYXJkQ29sdW1uOiBUcnVDYXJkQ29sdW1uLCBjb2x1bW46IENvbHVtbiwgcGFyZW50RWxlbWVudDogSFRNTERpdkVsZW1lbnQpIHtcclxuICAgIHRoaXMuZGF0YSA9IGNvbHVtbi5kYXRhO1xyXG5cclxuICAgIGxldCBoZWFkZXJUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xyXG4gICAgaGVhZGVyVGV4dC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY29sdW1uLWhlYWRlcnRleHQnKTtcclxuXHJcbiAgICBpZiAodGhpcy5jYXJkQ29sdW1uLnVzZXJIYXNQYXJlbnRUYWJsZVJvbGUpIHtcclxuICAgICAgaGVhZGVyVGV4dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsgYWxlcnQoJ2dvVG9EZXRhaWwnKSB9KTtcclxuICAgICAgaGVhZGVyVGV4dC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY29sdW1uLWhlYWRlcnRleHQtaG92ZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZGF0YT8udW5hc3NpZ25lZCkge1xyXG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmNhcmRDb2x1bW4uY29uZmlnLnJlc3VsdENvbmZpZy5jYXJkQ29sdW1uSWQoY29sdW1uLmRhdGEpO1xyXG4gICAgICBpZiAodmFsdWUpXHJcbiAgICAgICAgaGVhZGVyVGV4dC5pbm5lckhUTUwgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhPy51bmFzc2lnbmVkICYmIHRoaXMuY2FyZENvbHVtbi51bmFzc2lnbmVkVmlzaWJsZSlcclxuICAgICAgaGVhZGVyVGV4dC5pbm5lckhUTUwgPSB0aGlzLmNhcmRDb2x1bW4udW5hc3NpZ25lZE5hbWUgPyB0aGlzLmNhcmRDb2x1bW4udW5hc3NpZ25lZE5hbWUgOiAnVW5hc3NpZ25lZCc7XHJcblxyXG4gICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChoZWFkZXJUZXh0KTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIENvbHVtbkhlYWRlckJ1dHRvbiB7IFxyXG4gIHByaXZhdGUgY29sdW1uOiBDb2x1bW47XHJcbiAgcHJpdmF0ZSBzZWxlY3RBbGwgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoY29sdW1uOiBDb2x1bW4sIHBhcmVudEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50KSB7XHJcbiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcclxuXHJcbiAgICB2YXIgbGlua0J1dHRvbkNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgbGlua0J1dHRvbkNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1wb3J0YWwtY29sdW1uLWhlYWRlci1leHRyYXMnKTtcclxuXHJcbiAgICBsZXQgbGlua0J1dHRvbjogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ3RydS1jYXJkLXBvcnRhbC1jb2x1bW4taGVhZGVyLWV4dHJhLWJ1dHRvbicpO1xyXG4gICAgbGlua0J1dHRvbi5jbGFzc0xpc3QuYWRkKCdkYXJrLWhvdmVyJyk7XHJcbiAgICBsaW5rQnV0dG9uLmhyZWYgPSAnIyc7XHJcblxyXG4gICAgbGV0IGxpbmtCdXR0b25UZXh0OiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICBsaW5rQnV0dG9uVGV4dC5jbGFzc0xpc3QuYWRkKCd0cnUtY2FyZC1pY29uLXNtYWxsJyk7XHJcbiAgICBsaW5rQnV0dG9uVGV4dC5jbGFzc0xpc3QuYWRkKCdpY29uLWNoZWNrLXNxdWFyZS1vJyk7XHJcblxyXG4gICAgbGlua0J1dHRvblRleHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gIXRoaXMuc2VsZWN0QWxsO1xyXG4gICAgICB0aGlzLmNvbHVtbi5zZWxlY3RBbGwodGhpcy5zZWxlY3RBbGwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGlua0J1dHRvbi5hcHBlbmRDaGlsZChsaW5rQnV0dG9uVGV4dCk7XHJcbiAgICBsaW5rQnV0dG9uQ29udGFpbmVyLmFwcGVuZENoaWxkKGxpbmtCdXR0b24pO1xyXG5cclxuICAgIHRoaXMuY29sdW1uLnNlbGVjdEFsbEJ1dHRvbiA9IGxpbmtCdXR0b25Db250YWluZXI7XHJcblxyXG4gICAgcGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZChsaW5rQnV0dG9uQ29udGFpbmVyKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRydS1jYXJkXCI+XHJcbiAgPGRpdiAqbmdJZj1cImlzQnVzeVwiXHJcbiAgICAgICBjbGFzcz1cInRydS1jYXJkLWJ1c3ktaW5kaWNhdG9yXCI+XHJcbiAgICA8cD5TZWFyY2hpbmcgZm9yIHt7Y29uZmlnLmNoaWxkVGFibGVQbHVyYWxMYWJlbH19Li4uPC9wPlxyXG4gIDwvZGl2PlxyXG4gIDwhLS08dHJ1LXRvb2xiYXIgW2NvbmZpZ109XCJjb25maWcudG9vbGJhckNvbmZpZ1wiIGNsYXNzPVwibWFpbi10b29sYmFyXCI+PC90cnUtdG9vbGJhcj4tLT5cclxuICA8ZGl2IGNsYXNzPVwidHJ1LWNhcmQtcG9ydGFsXCIgI2NhcmRQb3J0YWw+XHJcbiAgICA8ZGl2IFtuZ1N0eWxlXT1cInsnd2lkdGgnOiAoKGNvbmZpZy53aWR0aCAqIGxvY2tlZENvbHVtbnMubGVuZ3RoKSArICgxMCAqIGxvY2tlZENvbHVtbnMubGVuZ3RoIC0gMSkpICsgJ3B4JyB9XCJcclxuICAgICAgICAgW25nQ2xhc3NdPVwieyd0cnUtY2FyZC1wb3J0YWwtbG9ja2VkLWNvbHVtbnMtZGl2aWRlcic6IGxvY2tlZENvbHVtbnMubGVuZ3RofVwiXHJcbiAgICAgICAgICpuZ0lmPVwibG9ja2VkQ29sdW1ucy5sZW5ndGhcIlxyXG4gICAgICAgICBjbGFzcz1cInRydS1jYXJkLXBvcnRhbC1sb2NrZWQtY29sdW1ucyBsb2NrZWQtY29sdW1uc1wiPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBbbmdTdHlsZV09XCJ7J2xlZnQnOiBsb2NrZWRDb2x1bW5zLmxlbmd0aCA/ICgoY29uZmlnLndpZHRoICogbG9ja2VkQ29sdW1ucy5sZW5ndGgpICsgKDEwICogbG9ja2VkQ29sdW1ucy5sZW5ndGggLSAxKSArIDIyKSArICdweCcgOiAwIH1cIlxyXG4gICAgICAgICBjbGFzcz1cInRydS1jYXJkLXBvcnRhbC1jb2x1bW5zIHVubG9ja2VkLWNvbHVtbnNcIj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|