@colijnit/transaction 12.1.98 → 12.1.99
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/bundles/colijnit-transaction.umd.js +705 -455
- package/bundles/colijnit-transaction.umd.js.map +1 -1
- package/colijnit-transaction.d.ts +155 -151
- package/colijnit-transaction.metadata.json +1 -1
- package/esm2015/colijnit-transaction.js +156 -152
- package/esm2015/lib/component/checkout/checkout-overview-delivery-edit/checkout-overview-delivery-edit.component.js +2 -2
- package/esm2015/lib/component/core/base/transaction-base.component.js +10 -1
- package/esm2015/lib/component/dialog/transaction-header/dialog-transaction-header-branch/dialog-transaction-header-branch.component.js +47 -0
- package/esm2015/lib/component/dialog/transaction-header/dialog-transaction-header-branch/dialog-transaction-header-branch.module.js +28 -0
- package/esm2015/lib/component/dialog/transaction-line/dialog-transaction-line-vat/dialog-transaction-line-vat.component.js +2 -1
- package/esm2015/lib/component/dialog/transaction-line/dialog-transaction-line-warehouse-cc/dialog-transaction-line-warehouse-cc.component.js +9 -5
- package/esm2015/lib/component/payment/payment.component.js +8 -8
- package/esm2015/lib/component/transaction/transaction.module.js +4 -2
- package/esm2015/lib/component/transaction-button-bar/transaction-button-bar.component.js +15 -5
- package/esm2015/lib/component/transaction-card/transaction-card-header/transaction-card-header.component.js +2 -4
- package/esm2015/lib/component/transaction-create-date-label/transaction-create-date-label.component.js +2 -2
- package/esm2015/lib/component/transaction-grid/transaction-lines-grid/transaction-lines-grid.module.js +19 -17
- package/esm2015/lib/component/transaction-header/transaction-header-order/transaction-header-order.component.js +2 -2
- package/esm2015/lib/component/transaction-header-fields/transaction-header-branch.component.js +18 -10
- package/esm2015/lib/component/transaction-line/transaction-base-line/transaction-base-line.component.js +24 -42
- package/esm2015/lib/component/transaction-line/transaction-line/transaction-line.component.js +9 -2
- package/esm2015/lib/component/transaction-line/transaction-text-line/transaction-text-line.component.js +37 -0
- package/esm2015/lib/component/transaction-line/transaction-text-line/transaction-text-line.module.js +21 -0
- package/esm2015/lib/component/transaction-line-fields/transaction-line-commission-code.component.js +16 -1
- package/esm2015/lib/component/transaction-line-fields/transaction-line-commission-code.module.js +4 -3
- package/esm2015/lib/component/transaction-line-fields/transaction-line-delivery-method.component.js +5 -1
- package/esm2015/lib/component/transaction-line-fields/transaction-line-delivery-method.module.js +4 -3
- package/esm2015/lib/component/transaction-line-fields/transaction-line-vat-button.component.js +22 -13
- package/esm2015/lib/component/transaction-line-fields/transaction-line-vat.component.js +12 -5
- package/esm2015/lib/component/transaction-line-fields/transaction-line-warehouse.component.js +5 -8
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-overview/transaction-quick-access-overview.component.js +4 -11
- package/esm2015/lib/component/transaction-send-documents/transaction-send-documents.component.js +6 -5
- package/esm2015/lib/component/transaction-send-documents/transaction-send-documents.module.js +4 -2
- package/esm2015/lib/res/dictionary/dictionaries.js +3 -3
- package/esm2015/lib/service/dialog.service.js +15 -35
- package/esm2015/lib/service/pending-reason.service.js +4 -4
- package/esm2015/lib/service/transaction-base.service.js +36 -25
- package/esm2015/lib/service/transaction-connector-adapter.service.js +15 -3
- package/esm2015/lib/service/transaction-connector.service.js +10 -3
- package/esm2015/lib/service/transaction.service.js +77 -37
- package/esm2015/lib/transaction-version.js +3 -3
- package/fesm2015/colijnit-transaction.js +529 -317
- package/fesm2015/colijnit-transaction.js.map +1 -1
- package/lib/component/add-product/style/_layout.scss +0 -10
- package/lib/component/add-product/style/_theme.scss +10 -0
- package/lib/component/core/base/transaction-base.component.d.ts +1 -0
- package/lib/component/dialog/transaction-header/dialog-transaction-header-branch/dialog-transaction-header-branch.component.d.ts +8 -0
- package/lib/component/dialog/transaction-header/dialog-transaction-header-branch/dialog-transaction-header-branch.module.d.ts +2 -0
- package/lib/component/dialog/transaction-header/dialog-transaction-header-branch/style/_layout.scss +7 -0
- package/lib/component/dialog/transaction-header/dialog-transaction-header-branch/style/_material-definition.scss +2 -0
- package/lib/component/dialog/transaction-line/dialog-transaction-line-warehouse-cc/dialog-transaction-line-warehouse-cc.component.d.ts +3 -2
- package/lib/component/payment/payment.component.d.ts +9 -9
- package/lib/component/transaction/style/material.scss +1 -0
- package/lib/component/transaction-button-bar/transaction-button-bar.component.d.ts +3 -1
- package/lib/component/transaction-card/transaction-card-header/transaction-card-header.component.d.ts +0 -1
- package/lib/component/transaction-header-fields/transaction-header-branch.component.d.ts +10 -6
- package/lib/component/transaction-line/transaction-base-line/style/_layout.scss +0 -10
- package/lib/component/transaction-line/transaction-base-line/transaction-base-line.component.d.ts +0 -1
- package/lib/component/transaction-line/transaction-text-line/style/_layout.scss +22 -0
- package/lib/component/transaction-line/transaction-text-line/style/_material-definition.scss +2 -0
- package/lib/component/transaction-line/transaction-text-line/style/_theme.scss +4 -0
- package/lib/component/transaction-line/transaction-text-line/style/material.scss +4 -0
- package/lib/component/transaction-line/transaction-text-line/transaction-text-line.component.d.ts +11 -0
- package/lib/component/transaction-line/transaction-text-line/transaction-text-line.module.d.ts +2 -0
- package/lib/component/transaction-line-fields/transaction-line-commission-code.component.d.ts +2 -0
- package/lib/component/transaction-line-fields/transaction-line-vat-button.component.d.ts +5 -3
- package/lib/component/transaction-line-fields/transaction-line-vat.component.d.ts +1 -0
- package/lib/component/transaction-line-fields/transaction-line-warehouse.component.d.ts +4 -5
- package/lib/component/transaction-lines/style/material.scss +1 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-overview/style/_layout.scss +0 -9
- package/lib/component/transaction-quick-access/transaction-quick-access-overview/style/_material-definition.scss +1 -1
- package/lib/component/transaction-quick-access/transaction-quick-access-overview/transaction-quick-access-overview.component.d.ts +1 -2
- package/lib/component/transaction-quick-access/transaction-quick-access-purchase-order-overview/style/_layout.scss +0 -9
- package/lib/res/dictionary/dictionaries.d.ts +13 -0
- package/lib/service/dialog.service.d.ts +9 -13
- package/lib/service/transaction-base.service.d.ts +25 -20
- package/lib/service/transaction-connector-adapter.service.d.ts +2 -2
- package/lib/service/transaction-connector.service.d.ts +2 -2
- package/lib/service/transaction.service.d.ts +67 -65
- package/package.json +3 -3
- package/lib/component/shopping-cart-OLD/shopping-cart-manager/shopping-cart-manager.component.scss +0 -53
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { Injectable } from
|
|
3
|
-
import { SequenceName } from
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { SalesOrderLineAllocationDetails } from "@colijnit/transactionapi/build/model/sales-order-line-allocation-details";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { SequenceName } from '@colijnit/transactionapi/build/enum/sequence-name.enum';
|
|
4
|
+
import { throwError } from 'rxjs';
|
|
5
|
+
import { PendingReasonService } from './pending-reason.service';
|
|
6
|
+
import { ReceiveGoodsForPurchaseOrderRequest } from '@colijnit/transactionapi/build/model/receive-goods-for-purchase-order-request.bo';
|
|
7
|
+
import { AllocateGoodsForSalesOrderRequest } from '@colijnit/transactionapi/build/model/allocate-goods-for-sales-order-request';
|
|
8
|
+
import { TransactionKind } from '@colijnit/transactionapi/build/enum/transaction-kind.enum';
|
|
9
|
+
import { CreateTransactionRequest } from '@colijnit/transactionapi/build/model/create-transaction-request';
|
|
10
|
+
import { RelationKind } from '@colijnit/articleapi/build/enum/relation-kind.enum';
|
|
11
|
+
import { TransactionTypeCategory } from '../enum/transaction-type-category.enum';
|
|
12
|
+
import { AppPopupButtonType } from '../component/core/enum/app-popup-button-type.enum';
|
|
13
|
+
import { PurchaseOrderLineReceiptDetails } from '@colijnit/transactionapi/build/model/purchase-order-line-receipt-details.bo';
|
|
14
|
+
import { SalesOrderLineAllocationDetails } from '@colijnit/transactionapi/build/model/sales-order-line-allocation-details';
|
|
16
15
|
import * as i0 from "@angular/core";
|
|
17
16
|
import * as i1 from "./options.service";
|
|
18
17
|
import * as i2 from "./dialog.service";
|
|
@@ -456,15 +455,17 @@ export class TransactionService extends PendingReasonService {
|
|
|
456
455
|
}
|
|
457
456
|
createSalesOrder(request) {
|
|
458
457
|
return __awaiter(this, void 0, void 0, function* () {
|
|
459
|
-
return new Promise((resolve) => {
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
458
|
+
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
459
|
+
yield this._checkBranch();
|
|
460
|
+
if (!this.currentBranch) {
|
|
461
|
+
return reject();
|
|
462
|
+
}
|
|
463
|
+
request.branchNr = this.currentBranch;
|
|
463
464
|
this.connector.createSalesOrder(request).then((response) => {
|
|
464
465
|
this.rememberCurrentTransaction(response);
|
|
465
466
|
resolve(true);
|
|
466
467
|
});
|
|
467
|
-
});
|
|
468
|
+
}));
|
|
468
469
|
});
|
|
469
470
|
}
|
|
470
471
|
createCashRegisterOrder(request) {
|
|
@@ -479,26 +480,32 @@ export class TransactionService extends PendingReasonService {
|
|
|
479
480
|
}
|
|
480
481
|
createPurchaseOrder(request) {
|
|
481
482
|
return __awaiter(this, void 0, void 0, function* () {
|
|
482
|
-
return new Promise((resolve) => {
|
|
483
|
-
|
|
484
|
-
|
|
483
|
+
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
484
|
+
yield this._checkBranch();
|
|
485
|
+
if (!this.currentBranch) {
|
|
486
|
+
return reject();
|
|
487
|
+
}
|
|
488
|
+
request.branchNr = this.currentBranch;
|
|
485
489
|
this.connector.createPurchaseOrder(request).then((response) => {
|
|
486
490
|
this.rememberCurrentTransaction(response);
|
|
487
491
|
resolve(true);
|
|
488
492
|
});
|
|
489
|
-
});
|
|
493
|
+
}));
|
|
490
494
|
});
|
|
491
495
|
}
|
|
492
496
|
createServiceOrder(request) {
|
|
493
497
|
return __awaiter(this, void 0, void 0, function* () {
|
|
494
|
-
return new Promise((resolve) => {
|
|
495
|
-
|
|
496
|
-
|
|
498
|
+
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
499
|
+
yield this._checkBranch();
|
|
500
|
+
if (!this.currentBranch) {
|
|
501
|
+
return reject();
|
|
502
|
+
}
|
|
503
|
+
request.branchNr = this.currentBranch;
|
|
497
504
|
this.connector.createServiceOrder(request).then((response) => {
|
|
498
505
|
this.rememberCurrentTransaction(response);
|
|
499
506
|
resolve(true);
|
|
500
507
|
});
|
|
501
|
-
});
|
|
508
|
+
}));
|
|
502
509
|
});
|
|
503
510
|
}
|
|
504
511
|
createSalesQuotation(request) {
|
|
@@ -513,7 +520,10 @@ export class TransactionService extends PendingReasonService {
|
|
|
513
520
|
}
|
|
514
521
|
addRelationToTransaction(relationId) {
|
|
515
522
|
return __awaiter(this, void 0, void 0, function* () {
|
|
516
|
-
yield this._checkAndCreateTransaction();
|
|
523
|
+
const created = yield this._checkAndCreateTransaction();
|
|
524
|
+
if (!created) {
|
|
525
|
+
return false;
|
|
526
|
+
}
|
|
517
527
|
const response = yield this.connector.addRelationToTransaction(this.currentTransaction.transactionInfo.uuid, relationId);
|
|
518
528
|
if (response) {
|
|
519
529
|
return this.handleHeaderOperationStatuses(response);
|
|
@@ -551,12 +561,15 @@ export class TransactionService extends PendingReasonService {
|
|
|
551
561
|
getSalesPersons(date) {
|
|
552
562
|
return this.connector.getSalesPersons(date);
|
|
553
563
|
}
|
|
554
|
-
addArticle(articleNo,
|
|
564
|
+
addArticle(articleNo, quantity = 1, aboveLineNr = 0, belowLineNr = 0) {
|
|
555
565
|
return __awaiter(this, void 0, void 0, function* () {
|
|
556
|
-
yield this._checkAndCreateTransaction();
|
|
566
|
+
const created = yield this._checkAndCreateTransaction();
|
|
567
|
+
if (!created) {
|
|
568
|
+
return false;
|
|
569
|
+
}
|
|
557
570
|
const lockSuccess = yield this.tryToLockTransaction(this.currentTransaction.transactionInfo.id, this.currentTransaction.transactionInfo.version);
|
|
558
571
|
if (lockSuccess) {
|
|
559
|
-
const response = yield this.connector.addTransactionLine(this.currentTransaction.transactionInfo.uuid,
|
|
572
|
+
const response = yield this.connector.addTransactionLine(this.currentTransaction.transactionInfo.uuid, articleNo, quantity, aboveLineNr, belowLineNr);
|
|
560
573
|
return this.handleLineOperationStatuses(response);
|
|
561
574
|
}
|
|
562
575
|
else {
|
|
@@ -566,7 +579,10 @@ export class TransactionService extends PendingReasonService {
|
|
|
566
579
|
}
|
|
567
580
|
addTextLine(showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr) {
|
|
568
581
|
return __awaiter(this, void 0, void 0, function* () {
|
|
569
|
-
yield this._checkAndCreateTransaction();
|
|
582
|
+
const created = yield this._checkAndCreateTransaction();
|
|
583
|
+
if (!created) {
|
|
584
|
+
return false;
|
|
585
|
+
}
|
|
570
586
|
const lockSuccess = yield this.tryToLockTransaction(this.currentTransaction.transactionInfo.id, this.currentTransaction.transactionInfo.version);
|
|
571
587
|
if (lockSuccess) {
|
|
572
588
|
const response = yield this.connector.addTextLineToTransaction(this.currentTransaction.transactionInfo.uuid, showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr);
|
|
@@ -734,14 +750,17 @@ export class TransactionService extends PendingReasonService {
|
|
|
734
750
|
getVatLists() {
|
|
735
751
|
return this.connector.getVatList();
|
|
736
752
|
}
|
|
753
|
+
getTransVatCodes(type, date) {
|
|
754
|
+
return this.connector.getTransVatCodes(type, date);
|
|
755
|
+
}
|
|
737
756
|
getTags(category) {
|
|
738
757
|
return this.connector.getTags(category);
|
|
739
758
|
}
|
|
740
759
|
getOnHoldCodes() {
|
|
741
760
|
return this.connector.getOnHoldCodes();
|
|
742
761
|
}
|
|
743
|
-
getWarehouses(
|
|
744
|
-
return this.connector.getWarehouses(
|
|
762
|
+
getWarehouses() {
|
|
763
|
+
return this.connector.getWarehouses(this.currentBranch);
|
|
745
764
|
}
|
|
746
765
|
getHistoricStateValues() {
|
|
747
766
|
return this.connector.getHistoricStateValues();
|
|
@@ -1104,13 +1123,34 @@ export class TransactionService extends PendingReasonService {
|
|
|
1104
1123
|
if (!this.currentTransaction || !this.currentTransaction.transactionInfo || !this.currentTransaction.transactionInfo.transactionNr) {
|
|
1105
1124
|
const createMethod = this._createTransactionMethods.get(this.transactionKind);
|
|
1106
1125
|
if (createMethod) {
|
|
1107
|
-
|
|
1108
|
-
|
|
1126
|
+
return new Promise((resolve) => {
|
|
1127
|
+
const request = new CreateTransactionRequest();
|
|
1128
|
+
createMethod(request)
|
|
1129
|
+
.then(() => {
|
|
1130
|
+
resolve(true);
|
|
1131
|
+
})
|
|
1132
|
+
.catch(() => {
|
|
1133
|
+
resolve(false);
|
|
1134
|
+
});
|
|
1135
|
+
});
|
|
1109
1136
|
}
|
|
1110
1137
|
else {
|
|
1111
1138
|
throwError("Failed to create transaction");
|
|
1112
1139
|
}
|
|
1113
1140
|
}
|
|
1141
|
+
else {
|
|
1142
|
+
return Promise.resolve(true);
|
|
1143
|
+
}
|
|
1144
|
+
});
|
|
1145
|
+
}
|
|
1146
|
+
_checkBranch() {
|
|
1147
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
1148
|
+
if (!this.currentBranch) {
|
|
1149
|
+
const response = yield this.dialogService.showBranch(this.currentTransaction);
|
|
1150
|
+
if (response.button !== AppPopupButtonType.Cancel) {
|
|
1151
|
+
this.currentBranch = response.output ? response.output.toString() : undefined;
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1114
1154
|
});
|
|
1115
1155
|
}
|
|
1116
1156
|
}
|
|
@@ -1120,4 +1160,4 @@ TransactionService.decorators = [
|
|
|
1120
1160
|
providedIn: "root"
|
|
1121
1161
|
},] }
|
|
1122
1162
|
];
|
|
1123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RyYW5zYWN0aW9uL3NyYy9saWIvc2VydmljZS90cmFuc2FjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUNwRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQWlCbkcsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsbUNBQW1DLEVBQUMsTUFBTSxrRkFBa0YsQ0FBQztBQWFySSxPQUFPLEVBQUMsaUNBQWlDLEVBQUMsTUFBTSw2RUFBNkUsQ0FBQztBQWU5SCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDMUYsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0saUVBQWlFLENBQUM7QUFDekcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBTWhGLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBSy9FLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ3JGLE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLDZFQUE2RSxDQUFDO0FBQzVILE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLDBFQUEwRSxDQUFDOzs7Ozs7Ozs7O0FBaUJ6SCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsb0JBQW9CO0lBSDVEOztRQUttQiw4QkFBeUIsR0FBOEMsSUFBSSxHQUFHLENBQXVDO1lBQ3BJLENBQUMsZUFBZSxDQUFDLFVB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LElBQUksQ0FBQywyQkFBMkIsQ0FBQztRQUMxQyxDQUFDO0tBQUE7SUFFYSwwQkFBMEI7O1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUU7Z0JBQ2xJLE1BQU0sWUFBWSxHQUF3QixJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDbkcsSUFBSSxZQUFZLEVBQUU7b0JBQ2hCLE1BQU0sT0FBTyxHQUE2QixJQUFJLHdCQUF3QixFQUFFLENBQUM7b0JBQ3pFLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQ3pDO3FCQUFNO29CQUNMLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2lCQUM1QzthQUNGO1FBQ0gsQ0FBQztLQUFBOzs7O1lBOS9CRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge0Rpc2NvdW50VHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL2Rpc2NvdW50LXR5cGUuZW51bVwiO1xuaW1wb3J0IHtTZXF1ZW5jZU5hbWV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9zZXF1ZW5jZS1uYW1lLmVudW1cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lVHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3RyYW5zYWN0aW9uLWxpbmUtdHlwZS5lbnVtXCI7XG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZnVsbC1vYmplY3RcIjtcbmltcG9ydCB7Q2FzaFJlZ2lzdGVyfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2Nhc2gtcmVnaXN0ZXJcIjtcbmltcG9ydCB7Q29kZURlc2NyaXB0aW9ufSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NvZGUtZGVzY3JpcHRpb25cIjtcbmltcG9ydCB7Q291bnRyeX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb3VudHJ5LmJvXCI7XG5pbXBvcnQge0N1c3RvbWVyR3JvdXB9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3VzdG9tZXItZ3JvdXAuYm9cIjtcbmltcG9ydCB7RGVsaXZlcnlNZXRob2R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktbWV0aG9kLmJvXCI7XG5pbXBvcnQge0RlbGl2ZXJ5T3B0aW9ufSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RlbGl2ZXJ5LW9wdGlvbi5ib1wiO1xuaW1wb3J0IHtNYXJrZXRpbmd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbWFya2V0aW5nLmJvXCI7XG5pbXBvcnQge09uSG9sZENvZGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvb24taG9sZC1jb2RlLmJvXCI7XG5pbXBvcnQge1ByaWNlTGlzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmljZS1saXN0XCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1hcnRpY2xlLXdhcmVob3VzZS5ib1wiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLXJlc3BvbnNlLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uTGluZUluZm99IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbGluZS1pbmZvLmJvXCI7XG5pbXBvcnQge1ZhbGlkYXRpb25SZXN1bHR9IGZyb20gXCJAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC92YWxpZGF0aW9uLXJlc3VsdFwiO1xuaW1wb3J0IHtWYXR9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdmF0XCI7XG5pbXBvcnQge1dhcmVob3VzZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC93YXJlaG91c2UuYm9cIjtcbmltcG9ydCB7dGhyb3dFcnJvcn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7U3RhbmRhcmRUZXh0fSBmcm9tIFwiLi4vbW9kZWwvc3RhbmRhcmQtdGV4dFwiO1xuaW1wb3J0IHtQZW5kaW5nUmVhc29uU2VydmljZX0gZnJvbSBcIi4vcGVuZGluZy1yZWFzb24uc2VydmljZVwiO1xuaW1wb3J0IHtSZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWNlaXZlLWdvb2RzLWZvci1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0LmJvXCI7XG5pbXBvcnQge1JlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJDb3JyZWN0aW9uUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWNlaXZlLWdvb2RzLWZvci1wdXJjaGFzZS1vcmRlci1jb3JyZWN0aW9uLXJlcXVlc3QuYm9cIjtcbmltcG9ydCB7QXJ0aWNsZUV4dGVuZGVkUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZXh0ZW5kZWQtcmVxdWVzdFwiO1xuaW1wb3J0IHtBcnRpY2xlTGlnaHR9IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWxpZ2h0LmJvXCI7XG5pbXBvcnQge1R1cm5vdmVyR3JvdXBJbWFnZX0gZnJvbSBcIkBjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL3R1cm5vdmVyLWdyb3VwLWltYWdlLmJvXCI7XG5pbXBvcnQge01haW5BcnRpY2xlfSBmcm9tIFwiQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvbWFpbi1hcnRpY2xlLmJvXCI7XG5pbXBvcnQge1B1cmNoYXNlUG9ydGFsTGluZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wdXJjaGFzZS1wb3J0YWwtbGluZS5ib1wiO1xuaW1wb3J0IHtHZXRQdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9ufSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dldC1wdXJjaGFzZS1vcmRlci1jb25maXJtYXRpb25cIjtcbmltcG9ydCB7VGFnfSBmcm9tIFwiQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvdGFnXCI7XG5pbXBvcnQge0NvRG9tYWluVmFsdWV9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb21haW4tdmFsdWUuYm9cIjtcbmltcG9ydCB7UmVsYXRpb25Qcml2YWN5U2V0dGluZ30gZnJvbSBcIkBjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1wcml2YWN5LXNldHRpbmcuYm9cIjtcbmltcG9ydCB7U2FsZXNQZXJzb259IGZyb20gXCJAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvc2FsZXMtcGVyc29uLmJvXCI7XG5pbXBvcnQge0F2YWlsYWJsZVN0b2NrfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2F2YWlsYWJsZS1zdG9jay5ib1wiO1xuaW1wb3J0IHtBbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlclJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYWxsb2NhdGUtZ29vZHMtZm9yLXNhbGVzLW9yZGVyLXJlcXVlc3RcIjtcbmltcG9ydCB7QWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXJDb3JyZWN0aW9uUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9hbGxvY2F0ZS1nb29kcy1mb3Itc2FsZXMtb3JkZXItY29ycmVjdGlvbi1yZXF1ZXN0XCI7XG5pbXBvcnQge1JlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsfSBmcm9tIFwiQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcmVwb3J0LWxheW91dC1zZWxlY3Rpb24tZW1haWwuYm9cIjtcbmltcG9ydCB7UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnR9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9yZXBvcnQtbGF5b3V0LXNlbGVjdGlvbi1wcmludC5ib1wiO1xuaW1wb3J0IHtQcmludE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3ByaW50LW9yZGVyLWNvbmZpcm1hdGlvbi1yZXF1ZXN0XCI7XG5pbXBvcnQge0VtYWlsT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0fSBmcm9tIFwiQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvZW1haWwtb3JkZXItY29uZmlybWF0aW9uLXJlcXVlc3RcIjtcbmltcG9ydCB7UGRmT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0fSBmcm9tIFwiQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcGRmLW9yZGVyLWNvbmZpcm1hdGlvbi1yZXF1ZXN0XCI7XG5pbXBvcnQge1ByaW50UHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9wcmludC1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0XCI7XG5pbXBvcnQge0VtYWlsUHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0XCI7XG5pbXBvcnQge1BkZlB1cmNoYXNlT3JkZXJSZXF1ZXN0fSBmcm9tIFwiQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcGRmLXB1cmNoYXNlLW9yZGVyLXJlcXVlc3RcIjtcbmltcG9ydCB7Q3JlYXRlU2FsZXNPcmRlclJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLXNhbGVzLW9yZGVyLXJlcXVlc3RcIjtcbmltcG9ydCB7Q3JlYXRlQ2FzaFJlZ2lzdGVyT3JkZXJSZXF1ZXN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS1jYXNoLXJlZ2lzdGVyLW9yZGVyLXJlcXVlc3RcIjtcbmltcG9ydCB7Q3JlYXRlUHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3JlYXRlLXB1cmNoYXNlLW9yZGVyLXJlcXVlc3RcIjtcbmltcG9ydCB7Q3JlYXRlU2VydmljZU9yZGVyUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtc2VydmljZS1vcmRlci1yZXF1ZXN0XCI7XG5pbXBvcnQge0NyZWF0ZVNhbGVzUXVvdGF0aW9uUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtc2FsZXMtcXVvdGF0aW9uLXJlcXVlc3RcIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25LaW5kfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vdHJhbnNhY3Rpb24ta2luZC5lbnVtXCI7XG5pbXBvcnQge0NyZWF0ZVRyYW5zYWN0aW9uUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtdHJhbnNhY3Rpb24tcmVxdWVzdFwiO1xuaW1wb3J0IHtSZWxhdGlvbktpbmR9IGZyb20gXCJAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9lbnVtL3JlbGF0aW9uLWtpbmQuZW51bVwiO1xuaW1wb3J0IHtQdXJjaGFzZUFkdmljZUxpbmV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHVyY2hhc2UtYWR2aWNlLWxpbmUuYm9cIjtcbmltcG9ydCB7UHVyY2hhc2VBZHZpY2VGaWx0ZXJzfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLWFkdmljZS1maWx0ZXJzXCI7XG5pbXBvcnQge0VtYWlsRGVsaXZlcnlOb3RlUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1kZWxpdmVyeS1ub3RlLXJlcXVlc3RcIjtcbmltcG9ydCB7UGRmRGVsaXZlcnlOb3RlUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtZGVsaXZlcnktbm90ZS1yZXF1ZXN0XCI7XG5pbXBvcnQge1ByaW50RGVsaXZlcnlOb3RlUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wcmludC1kZWxpdmVyeS1ub3RlLXJlcXVlc3RcIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnl9IGZyb20gXCIuLi9lbnVtL3RyYW5zYWN0aW9uLXR5cGUtY2F0ZWdvcnkuZW51bVwiO1xuaW1wb3J0IHtFbWFpbEludm9pY2VSZXF1ZXN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2VtYWlsLWludm9pY2UtcmVxdWVzdFwiO1xuaW1wb3J0IHtQZGZJbnZvaWNlUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wZGYtaW52b2ljZS1yZXF1ZXN0XCI7XG5pbXBvcnQge1ByaW50SW52b2ljZVJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtaW52b2ljZS1yZXF1ZXN0XCI7XG5pbXBvcnQge0RpYWxvZ1Jlc3BvbnNlSW50ZXJmYWNlfSBmcm9tIFwiLi4vaW50ZXJmYWNlL2RpYWxvZy1yZXNwb25zZS5pbnRlcmZhY2VcIjtcbmltcG9ydCB7QXBwUG9wdXBCdXR0b25UeXBlfSBmcm9tIFwiLi4vY29tcG9uZW50L2NvcmUvZW51bS9hcHAtcG9wdXAtYnV0dG9uLXR5cGUuZW51bVwiO1xuaW1wb3J0IHtQdXJjaGFzZU9yZGVyTGluZVJlY2VpcHREZXRhaWxzfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLW9yZGVyLWxpbmUtcmVjZWlwdC1kZXRhaWxzLmJvXCI7XG5pbXBvcnQge1NhbGVzT3JkZXJMaW5lQWxsb2NhdGlvbkRldGFpbHN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvc2FsZXMtb3JkZXItbGluZS1hbGxvY2F0aW9uLWRldGFpbHNcIjtcbmltcG9ydCB7VGFnVHJlZUl0ZW19IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC90YWctdHJlZS1pdGVtLmJvXCI7XG5pbXBvcnQge0ludGVybmFsUGFyYW19IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL2ludGVybmFsLXBhcmFtLmVudW1cIjtcbmltcG9ydCB7R29vZHNSZWNlaXB0SGlzdG9yeX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nb29kcy1yZWNlaXB0LWhpc3RvcnkuYm9cIjtcbmltcG9ydCB7R29vZHNBbGxvY2F0aW9uSGlzdG9yeX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nb29kcy1hbGxvY2F0aW9uLWhpc3RvcnkuYm9cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25JbmZvSGlzdG9yeX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLWhpc3RvcnkuYm9cIjtcbmltcG9ydCB7TGF5b3V0Q29kZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL2xheW91dC1jb2RlLmVudW1cIjtcbmltcG9ydCB7SGlzdG9yaWNSZXBvcnR9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvaGlzdG9yaWMtcmVwb3J0LmJvXCI7XG5pbXBvcnQge1ByaW50ZXJ9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9wcmludGVyLmJvXCI7XG5pbXBvcnQge0N1cnJlbmN5fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jdXJyZW5jeS5ibyc7XG5pbXBvcnQge1BheW1lbnRDb25kaXRpb259IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3BheW1lbnQtY29uZGl0aW9uLmJvJztcblxudHlwZSBDcmVhdGVUcmFuc2FjdGlvbkZuID0gKHJlcXVlc3Q6IENyZWF0ZVNhbGVzT3JkZXJSZXF1ZXN0IHwgQ3JlYXRlUHVyY2hhc2VPcmRlclJlcXVlc3QpID0+IFByb21pc2U8Ym9vbGVhbj47XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogXCJyb290XCJcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25TZXJ2aWNlIGV4dGVuZHMgUGVuZGluZ1JlYXNvblNlcnZpY2Uge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NyZWF0ZVRyYW5zYWN0aW9uTWV0aG9kczogTWFwPFRyYW5zYWN0aW9uS2luZCwgQ3JlYXRlVHJhbnNhY3Rpb25Gbj4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgQ3JlYXRlVHJhbnNhY3Rpb25Gbj4oW1xuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgKHJlcXVlc3Q6IENyZWF0ZVNhbGVzT3JkZXJSZXF1ZXN0KSA9PiB0aGlzLmNyZWF0ZVNhbGVzT3JkZXIocmVxdWVzdCldLFxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgKHJlcXVlc3Q6IENyZWF0ZVB1cmNoYXNlT3JkZXJSZXF1ZXN0KSA9PiB0aGlzLmNyZWF0ZVB1cmNoYXNlT3JkZXIocmVxdWVzdCldXG4gIF0pXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVsYXRpb25LaW5kRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgUmVsYXRpb25LaW5kPiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25LaW5kLCBSZWxhdGlvbktpbmQ+KFtcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFJlbGF0aW9uS2luZC5DdXN0b21lcl0sXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBSZWxhdGlvbktpbmQuU3VwcGxpZXJdXG4gIF0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzU3RhdHVzSW5kZXg6IE1hcDxUcmFuc2FjdGlvblR5cGVDYXRlZ29yeSwgbnVtYmVyPiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnksIG51bWJlcj4oW1xuICAgIFtUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyUHVyY2hhc2UsIDBdLFxuICAgIFtUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyQWxsb2NhdGlvbiwgMV0sXG4gICAgW1RyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlNhbGVzT3JkZXJEZWxpdmVyeU5vdGUsIDddLFxuICAgIFtUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVySW52b2ljZSwgOF1cbiAgXSk7XG5cbiAgcHJpdmF0ZSBfYW5zd2VyUmVjYWxjdWxhdGlvbkRlcG9zaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZG9udEFza0ZvclJlY2FsY3VsYXRpb25EZXBvc2l0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGdldEZvY3VzU3RhdHVzSW5kZXgoY2F0ZWdvcnk6IFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZm9jdXNTdGF0dXNJbmRleC5nZXQoY2F0ZWdvcnkpO1xuICB9XG5cbiAgcHVibGljIGdldFJlbGF0aW9uS2luZEZyb21UcmFuc2FjdGlvbktpbmQoKTogUmVsYXRpb25LaW5kIHtcbiAgICBpZiAodGhpcy5fcmVsYXRpb25LaW5kRnJvbVRyYW5zYWN0aW9uS2luZC5oYXModGhpcy50cmFuc2FjdGlvbktpbmQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVsYXRpb25LaW5kRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodGhpcy50cmFuc2FjdGlvbktpbmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUmVsYXRpb25LaW5kLkN1c3RvbWVyO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaG93V2FyZWhvdXNlTG9jYXRpb25Qb3B1cE9uY2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLndhcmVob3VzZUxvY2F0aW9uUG9wdXBTaG93biAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzKSB7XG4gICAgICB0aGlzLndhcmVob3VzZUxvY2F0aW9uUG9wdXBTaG93biA9IHRydWU7XG4gICAgICBjb25zdCBsaW5lc1RoYXRTaG91bGRIYXZlTG9jYXRpb246IFRyYW5zYWN0aW9uTGluZUluZm9bXSA9XG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKGwgPT4gbC5pc0xvY2F0aW9uUmVxdWlyZWQgJiYgbC5hcnRpY2xlTGluZVN0YXR1cy5xdWFudGl0eVRvUmVjZWl2ZSA+IDAgJiYgIWwubG9jYXRpb25Ocik7XG4gICAgICBpZiAobGluZXNUaGF0U2hvdWxkSGF2ZUxvY2F0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERpYWxvZ1Jlc3BvbnNlSW50ZXJmYWNlID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dXYXJlaG91c2VMb2NhdGlvbigwLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICBpZiAocmVzcG9uc2UuYnV0dG9uID09PSBBcHBQb3B1cEJ1dHRvblR5cGUuT2spIHtcbiAgICAgICAgICBsaW5lc1RoYXRTaG91bGRIYXZlTG9jYXRpb24uZm9yRWFjaChsID0+IGwubG9jYXRpb25OciA9IHJlc3BvbnNlLm91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mbyAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpIHtcbiAgICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcbiAgICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgICBjb25zdCByZXNwb25zZTogRGlhbG9nUmVzcG9uc2VJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd1llc05vKCdERUxFVEUnLCAnREVMRVRFX1RSQU5TQUNUSU9OX1FVRVNUSU9OJyk7XG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZTogYm9vbGVhbiA9IHJlc3BvbnNlLmJ1dHRvbiA9PT0gQXBwUG9wdXBCdXR0b25UeXBlLlllcztcbiAgICAgICAgaWYgKHNob3VsZERlbGV0ZSkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmRlbGV0ZVRyYW5zYWN0aW9uQnlVdUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkKTtcbiAgICAgICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UsIGZhbHNlKTtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnRyYW5zYWN0aW9uRGVsZXRlZC5uZXh0KCk7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVQcmljZVRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHByaWNlOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUHJpY2UodXVpZCwgbGluZVV1aWQsIHByaWNlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVSZWZlcmVuY2VUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVSZWZlcmVuY2UodXVpZCwgbGluZVV1aWQsIHJlZmVyZW5jZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlR29vZERlc2NyaXB0aW9uVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgZ29vZERlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lR29vZERlc2NyaXB0aW9uKHV1aWQsIGxpbmVVdWlkLCBnb29kRGVzY3JpcHRpb24pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVmaW5pdGl2ZSh1dWlkOiBzdHJpbmcsIGRlZmluaXRpdmU6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWZpbml0aXZlKHV1aWQsIGRlZmluaXRpdmUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyRGVsaXZlcnlBZGRyZXNzKHV1aWQ6IHN0cmluZywgbmV3TmF3TnI6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJEZWxpdmVyeUFkZHJlc3ModXVpZCwgbmV3TmF3TnIpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVySW52b2ljZUFkZHJlc3ModXVpZDogc3RyaW5nLCBuZXdOYXdOcjogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlckludm9pY2VBZGRyZXNzKHV1aWQsIG5ld05hd05yKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlEYXRlKHV1aWQ6IHN0cmluZywgZGF0ZTogRGF0ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5RGF0ZSh1dWlkLCBkYXRlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlEYXRlRGVmaW5pdGl2ZSh1dWlkOiBzdHJpbmcsIGRlZmluaXRpdmU6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeURhdGVEZWZpbml0aXZlKHV1aWQsIGRlZmluaXRpdmUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25SZW1hcmsodXVpZDogc3RyaW5nLCByZW1hcms6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblJlbWFyayh1dWlkLCByZW1hcmspO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25SZWZlcmVuY2UodXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblJlZmVyZW5jZSh1dWlkLCByZWZlcmVuY2UpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25SZWxhdGlvblJlZmVyZW5jZSh1dWlkOiBzdHJpbmcsIHJlZmVyZW5jZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUmVsYXRpb25SZWZlcmVuY2UodXVpZCwgcmVmZXJlbmNlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVwb3NpdEFtb3VudCh1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlckRlcG9zaXRBbW91bnQodXVpZCwgYW1vdW50KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVwb3NpdFBlcmNlbnRhZ2UodXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJEZXBvc2l0UGVyY2VudGFnZSh1dWlkLCBhbW91bnQpO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uUHJlZmVycmVkRGVsaXZlcnlEYXRlKHV1aWQ6IHN0cmluZywgZGF0ZTogRGF0ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblByZWZlcnJlZERlbGl2ZXJ5RGF0ZSh1dWlkLCBkYXRlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlNZXRob2QodXVpZDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5TWV0aG9kKHV1aWQsIG1ldGhvZCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9ucyh1dWlkOiBzdHJpbmcsIG9wdGlvbnM6IHN0cmluZ1tdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKHV1aWQsIG9wdGlvbnMpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25QYXJ0aWFsRGVsaXZlcnkodXVpZDogc3RyaW5nLCBhbGxvd1BhcnRpYWw6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25QYXJ0aWFsRGVsaXZlcnkodXVpZCwgYWxsb3dQYXJ0aWFsKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uQnJhbmNoKHV1aWQ6IHN0cmluZywgYnJhbmNoOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25CcmFuY2godXVpZCwgYnJhbmNoKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uUHJpY2VLaW5kKHV1aWQ6IHN0cmluZywgcHJpY2VLaW5kOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25QcmljZUtpbmQodXVpZCwgcHJpY2VLaW5kKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uQWRtQ29vcmRpbmF0b3IodXVpZDogc3RyaW5nLCByZWxhdGlvbjogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uQWRtQ29vcmRpbmF0b3IodXVpZCwgcmVsYXRpb24pO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25TYWxlc1BlcnNvbih1dWlkOiBzdHJpbmcsIHJlbGF0aW9uOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBub3QgaW4gbWlkZGxldGllciB5ZXRcbiAgICAvLyBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25TYWxlc09yZGVyKHV1aWQsIHJlbGF0aW9uKTtcbiAgICAvLyBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAvLyB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25DdXJyZW5jeSh1dWlkOiBzdHJpbmcsIGN1cnJlbmN5SWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIG5vdCBpbiBtaWRkbGV0aWVyIHlldFxuICAgIC8vIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkN1cnJlbmN5KHV1aWQsIGN1cnJlbmN5SWQpO1xuICAgIC8vIGlmIChyZXNwb25zZSkge1xuICAgIC8vICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIC8vIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblBheW1lbnRDb25kaXRpb24odXVpZDogc3RyaW5nLCBjb25kaXRpb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIG5vdCBpbiBtaWRkbGV0aWVyIHlldFxuICAgIC8vIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblBheW1lbnRDb25kaXRpb24odXVpZCwgY29uZGl0aW9uKTtcbiAgICAvLyBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAvLyB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25NYXJrZXRpbmcodXVpZDogc3RyaW5nLCBjb2RlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25NYXJrZXRpbmcodXVpZCwgY29kZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRpc2NvdW50KHV1aWQ6IHN0cmluZywgdHlwZTogRGlzY291bnRUeXBlLCBhbW91bnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRpc2NvdW50KHV1aWQsIHR5cGUsIGFtb3VudCk7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUXVhbnRpdHlUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KHV1aWQsIGxpbmVVdWlkLCBxdWFudGl0eSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlRGVsaXZlcnlEYXRlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgZGF0ZTogRGF0ZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVEZWxpdmVyeURhdGUodXVpZCwgbGluZVV1aWQsIGRhdGUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVByaWNlTGlzdFRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHByaWNlTGlzdDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVByaWNlTGlzdCh1dWlkLCBsaW5lVXVpZCwgcHJpY2VMaXN0KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVWYXRUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBpZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVZhdCh1dWlkLCBsaW5lVXVpZCwgaWQpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUNvbW1pc3Npb25Db2RlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZUNvbW1pc3Npb25Db2RlKHV1aWQsIGxpbmVVdWlkLCBjb2RlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVTdXBwbGllclRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGlkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lU3VwcGxpZXIodXVpZCwgbGluZVV1aWQsIGlkKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVXYXJlaG91c2VUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCB3YXJlaG91c2VOdW1iZXI6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVXYXJlaG91c2UodXVpZCwgbGluZVV1aWQsIHdhcmVob3VzZU51bWJlcik7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlRGVsaXZlcnlNZXRob2RUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVEZWxpdmVyeU1ldGhvZCh1dWlkLCBsaW5lVXVpZCwgbWV0aG9kKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVEaXNjb3VudFRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIHR5cGU6IERpc2NvdW50VHlwZSwgZGlzY291bnQ6IG51bWJlciwgcmVhc29uOiBzdHJpbmcgPSBcIlwiLCBjb2RlOiBzdHJpbmcgPSBcIlwiKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZUxpbmVEaXNjb3VudCh1dWlkLCBsaW5lVXVpZCwgdHlwZSwgZGlzY291bnQsIHJlYXNvbiwgY29kZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlRHJvcFNoaXBtZW50VHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgbmV3RHJvcFNoaXBtZW50OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZURyb3BTaGlwbWVudCh1dWlkLCBsaW5lVXVpZCwgbmV3RHJvcFNoaXBtZW50KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZW5lcmF0ZUNvbW1pc3Npb25PcmRlcnModHJhbnNJZDogbnVtYmVyLCBvbmx5R2VuZXJhdGVGb3JEaXJlY3RTZWxsU3VwcGxpZXJzOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJHZW5lcmF0ZVB1cmNoYXNlT3JkZXJzLm5leHQodHJ1ZSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZW5lcmF0ZUNvbW1pc3Npb25PcmRlcnModHJhbnNJZCwgb25seUdlbmVyYXRlRm9yRGlyZWN0U2VsbFN1cHBsaWVycyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJHZW5lcmF0ZVB1cmNoYXNlT3JkZXJzLm5leHQoZmFsc2UpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlUmVsYXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gdGhpcy5fY2xlYW5SZWxhdGlvbkJlZm9yZVNhdmUoKTtcbiAgICB0aGlzLmluaXRpYWxpemVUcmFuc2FjdGlvbigpO1xuICAgIGlmICghdGhpcy5yZWxhdGlvbi5yZWxhdGlvbklkKSB7XG4gICAgICB0aGlzLnJlbGF0aW9uID0gYXdhaXQgdGhpcy5yZWxhdGlvblNlcnZpY2UuaW5zZXJ0UmVsYXRpb24odGhpcy5fcmVsYXRpb25LaW5kRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodGhpcy50cmFuc2FjdGlvbktpbmQpLCB0aGlzLnJlbGF0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbG9ja2VkOiBWYWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgdGhpcy5yZWxhdGlvblNlcnZpY2UubG9ja1JlbGF0aW9uKHRoaXMucmVsYXRpb24ucmVsYXRpb25UeXBlLCBwYXJzZUludCh0aGlzLnJlbGF0aW9uLnJlbGF0aW9uTnVtYmVyKSk7XG4gICAgICBpZiAobG9ja2VkICYmIGxvY2tlZC5zdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVsYXRpb24gPSBhd2FpdCB0aGlzLnJlbGF0aW9uU2VydmljZS51cGRhdGVSZWxhdGlvbih0aGlzLl9yZWxhdGlvbktpbmRGcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh0aGlzLnRyYW5zYWN0aW9uS2luZCksIHRoaXMucmVsYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dJbmZvcm1hdGlvbih0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldCgnUkVMQVRJT05fQUxSRUFEWV9MT0NLRUQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gYXdhaXQgdGhpcy5yZWxhdGlvblNlcnZpY2UuY29tbWl0KCk7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbih0aGlzLnJlbGF0aW9uLnJlbGF0aW9uSWQpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZXF1ZW5jZVZhbHVlKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFNlcXVlbmNlVmFsdWUoU2VxdWVuY2VOYW1lLlJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGdldFJlbGF0aW9uUHJpdmFjeVNldHRpbmdzKCk6IFByb21pc2U8UmVsYXRpb25Qcml2YWN5U2V0dGluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFJlbGF0aW9uUHJpdmFjeVNldHRpbmdzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXJ0aWNsZUJvdW5kVGV4dExpbmVzT2ZBcnRpY2xlTGluZShhcnRpY2xlTGluZVV1aWQ6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25MaW5lSW5mb1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEFydGljbGVCb3VuZFRleHRMaW5lc09mQXJ0aWNsZUxpbmUoYXJ0aWNsZUxpbmVVdWlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVTYWxlc09yZGVyKHJlcXVlc3Q6IENyZWF0ZVNhbGVzT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuICAgICAgLy8gdG9kbyBmaXggdGhpc1xuICAgICAgLy8gY29Vc2VyIG9waGFsZW4/XG4gICAgICByZXF1ZXN0LmJyYW5jaE5yID0gXCIxXCI7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5jcmVhdGVTYWxlc09yZGVyKHJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUNhc2hSZWdpc3Rlck9yZGVyKHJlcXVlc3Q6IENyZWF0ZUNhc2hSZWdpc3Rlck9yZGVyUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdG9yLmNyZWF0ZUNhc2hSZWdpc3Rlck9yZGVyKHJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZVB1cmNoYXNlT3JkZXIocmVxdWVzdDogQ3JlYXRlUHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICAvLyB0b2RvIGZpeCB0aGlzXG4gICAgICByZXF1ZXN0LmJyYW5jaE5yID0gXCIxXCI7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5jcmVhdGVQdXJjaGFzZU9yZGVyKHJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZVNlcnZpY2VPcmRlcihyZXF1ZXN0OiBDcmVhdGVTZXJ2aWNlT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuICAgICAgLy8gdG9kbyBmaXggdGhpc1xuICAgICAgcmVxdWVzdC5icmFuY2hOciA9IFwiMVwiO1xuICAgICAgdGhpcy5jb25uZWN0b3IuY3JlYXRlU2VydmljZU9yZGVyKHJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZVNhbGVzUXVvdGF0aW9uKHJlcXVlc3Q6IENyZWF0ZVNhbGVzUXVvdGF0aW9uUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuY29ubmVjdG9yLmNyZWF0ZVNhbGVzUXVvdGF0aW9uKHJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbihyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWRkUmVsYXRpb25Ub1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCByZWxhdGlvbklkKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldENvbW1pc3Npb25Db2RlcyhsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8Q29Eb21haW5WYWx1ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldENvbW1pc3Npb25Db2RlcyhsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldEluT3V0Q29sbGVjdGlvbihsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8Q29Eb21haW5WYWx1ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEluT3V0Q29sbGVjdGlvbihsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldFR1cm5vdmVyR3JvdXBzKCk6IFByb21pc2U8VHVybm92ZXJHcm91cEltYWdlW10+IHtcbiAgICByZXR1cm4gdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldFR1cm5vdmVyR3JvdXBzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlcyhnb29kSWQ6IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlcyhnb29kSWQpO1xuICB9XG5cbiAgcHVibGljIGdldE1hcmtldGluZ0NvZGVzKCk6IFByb21pc2U8TWFya2V0aW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0TWFya2V0aW5nQ29kZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBcnRpY2xlcyhyZXF1ZXN0OiBBcnRpY2xlRXh0ZW5kZWRSZXF1ZXN0KTogUHJvbWlzZTxBcnRpY2xlTGlnaHRbXT4ge1xuICAgIHJldHVybiB0aGlzLmFydGljbGVDb25uZWN0b3Iuc2VhcmNoQXJ0aWNsZXMocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWFpbkFydGljbGVzKCk6IFByb21pc2U8TWFpbkFydGljbGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmFydGljbGVDb25uZWN0b3IuZ2V0TWFpbkFydGljbGVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVsaXZlcnlNZXRob2RzKCk6IFByb21pc2U8RGVsaXZlcnlNZXRob2RbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU1ldGhvZHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWxpdmVyeU9wdGlvbnMoKTogUHJvbWlzZTxEZWxpdmVyeU9wdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldERlbGl2ZXJ5T3B0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGdldFNhbGVzUGVyc29ucyhkYXRlPzogRGF0ZSk6IFByb21pc2U8U2FsZXNQZXJzb25bXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRTYWxlc1BlcnNvbnMoZGF0ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkQXJ0aWNsZShhcnRpY2xlTm86IHN0cmluZywgaXNSZXR1cm46IGJvb2xlYW4gPSBmYWxzZSwgYWJvdmVMaW5lTnI6IG51bWJlciA9IDAsIGJlbG93TGluZU5yOiBudW1iZXIgPSAwKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5fY2hlY2tBbmRDcmVhdGVUcmFuc2FjdGlvbigpO1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5hZGRUcmFuc2FjdGlvbkxpbmUoXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCBUcmFuc2FjdGlvbkxpbmVUeXBlLkFydGljbGVMaW5lLCBhcnRpY2xlTm8sIG51bGwsIGlzUmV0dXJuLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRUZXh0TGluZShzaG93T25Eb2N1bWVudHM6IG51bWJlciwgdGV4dDogc3RyaW5nLCBhbW91bnQ6IG51bWJlcixhcnRpY2xlQm91bmQ6IGJvb2xlYW4sIHJlZkFydGljbGVMaW5lTnI6IG51bWJlciwgYWJvdmVMaW5lTnI/OiBudW1iZXIsIGJlbG93TGluZU5yPzogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5fY2hlY2tBbmRDcmVhdGVUcmFuc2FjdGlvbigpO1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5hZGRUZXh0TGluZVRvVHJhbnNhY3Rpb24oXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCBzaG93T25Eb2N1bWVudHMsIHRleHQsIGFtb3VudCwgYXJ0aWNsZUJvdW5kLCByZWZBcnRpY2xlTGluZU5yLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VMaW5lU2VxdWVuY2UobGluZVV1aWQ6IHN0cmluZywgYWJvdmVMaW5lTnI/OiBudW1iZXIsIGJlbG93TGluZU5yPzogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlTGluZVNlcXVlbmNlKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCBsaW5lVXVpZCwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVRyYW5zYWN0aW9uTGluZSh0cmFuc2FjdGlvblV1aWQ6IHN0cmluZywgVHJhbnNhY3Rpb25MaW5lVXVpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZGVsZXRlVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZCwgVHJhbnNhY3Rpb25MaW5lVXVpZCk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVRdWFudGl0eSh0cmFuc2FjdGlvblV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgbmV3UXVhbnRpdHk6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KHRyYW5zYWN0aW9uVXVpZCwgbGluZVV1aWQsIG5ld1F1YW50aXR5KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFJlbGF0aW9uQnlVc2VyKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5zZXRSZWxhdGlvbkJ5VXNlcih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgdXNlcm5hbWUsIHBhc3N3b3JkKVxuICAgICAgICAudGhlbihhc3luYyAoaXNTdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShpc1N1Y2Nlc3MpO1xuICAgICAgICB9KS5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwdWJsaWMgYXN5bmMgc2V0UmVsYXRpb25CeVVzZXIodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAvLyAgIGNvbnN0IHJlc3BvbnNlOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2V0UmVsYXRpb25CeVVzZXIodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udXVpZCwgdXNlcm5hbWUsIHBhc3N3b3JkKTtcbiAgLy8gICByZXR1cm4gcmVzcG9uc2U7XG4gIC8vIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZHNSZWNlaXB0SGlzdG9yeSh0cmFuc0lkOiBudW1iZXIsIGxpbmVOcjogbnVtYmVyKTogUHJvbWlzZTxHb29kc1JlY2VpcHRIaXN0b3J5PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEdvb2RzUmVjZWlwdEhpc3RvcnkodHJhbnNJZCwgbGluZU5yKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCByZXF1ZXN0OiBSZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyUmVjZWl2ZUdvb2RzLm5leHQodHJ1ZSk7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5yZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJSZWNlaXZlR29vZHMubmV4dChmYWxzZSk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IHRydWU7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJDb3JyZWN0aW9uKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCByZXF1ZXN0OiBSZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyQ29ycmVjdGlvblJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlclJlY2VpdmVHb29kcy5uZXh0KHRydWUpO1xuICAgICAgbGV0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJDb3JyZWN0aW9uKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJSZWNlaXZlR29vZHMubmV4dChmYWxzZSk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IHRydWU7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCByZXF1ZXN0OiBBbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlclJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckFsbG9jYXRlR29vZHMubmV4dCh0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJBbGxvY2F0ZUdvb2RzLm5leHQoZmFsc2UpO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlckNvcnJlY3Rpb24odHJhbnNhY3Rpb25JZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHJlcXVlc3Q6IEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvblJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckFsbG9jYXRlR29vZHMubmV4dCh0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvbihyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyQWxsb2NhdGVHb29kcy5uZXh0KGZhbHNlKTtcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbih0cmFuc2FjdGlvbklkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbjogR2V0UHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uLm5leHQodHJ1ZSk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnB1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ocHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbik7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLl9jaGVja1B1cmNoYXNlT3JkZXJDb25maXJtYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUHVyY2hhc2VQb3J0YWxMaW5lcyh0cmFuc2FjdGlvbklkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgcHVyY2hhc2VQb3J0YWxMaW5lOiBQdXJjaGFzZVBvcnRhbExpbmUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbi5uZXh0KHRydWUpO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci51cGRhdGVQdXJjaGFzZVBvcnRhbExpbmVzKHB1cmNoYXNlUG9ydGFsTGluZSk7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLl9jaGVja1B1cmNoYXNlT3JkZXJDb25maXJtYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VGV4dFR5cGVzKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VGV4dFR5cGVzKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhbmRhcmRUZXh0cyhsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8U3RhbmRhcmRUZXh0W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U3RhbmRhcmRUZXh0cyhsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xuICB9XG5cbiAgcHVibGljIGdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1OiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q291bnRyeShjb3VudHJ5Q29kZTogc3RyaW5nKTogUHJvbWlzZTxDb3VudHJ5PiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldENvdW50cnkoY291bnRyeUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldENhc2hSZWdpc3RlcnMoYnJhbmNoPzogc3RyaW5nLCBncm91cD86IG51bWJlcik6IFByb21pc2U8Q2FzaFJlZ2lzdGVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0Q2FzaFJlZ2lzdGVycyhicmFuY2gsIGdyb3VwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmljZUxpc3RzKCk6IFByb21pc2U8UHJpY2VMaXN0W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UHJpY2VMaXN0cygpO1xuICB9XG5cbiAgcHVibGljIGdldFZhdExpc3RzKCk6IFByb21pc2U8VmF0W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VmF0TGlzdCgpO1xuICB9XG5cbiAgcHVibGljIGdldFRhZ3MoY2F0ZWdvcnk6IG51bWJlcik6IFByb21pc2U8VGFnW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VGFncyhjYXRlZ29yeSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0T25Ib2xkQ29kZXMoKTogUHJvbWlzZTxPbkhvbGRDb2RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0T25Ib2xkQ29kZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRXYXJlaG91c2VzKGJyYW5jaE5yPzogc3RyaW5nKTogUHJvbWlzZTxXYXJlaG91c2VbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRXYXJlaG91c2VzKGJyYW5jaE5yKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRIaXN0b3JpY1N0YXRlVmFsdWVzKCk6IFByb21pc2U8Q29kZURlc2NyaXB0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0SGlzdG9yaWNTdGF0ZVZhbHVlcygpO1xuICB9XG5cbiAgcHVibGljIGdldEN1c3RvbWVyR3JvdXBzKCk6IFByb21pc2U8Q3VzdG9tZXJHcm91cFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldEN1c3RvbWVyR3JvdXBzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9ja1B1cmNoYXNlUG9ydGFsTGluZXModHJhbnNJZFB1cmNoYXNlOiBudW1iZXIsIGxpbmVJZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmxvY2tQdXJjaGFzZVBvcnRhbExpbmVzKHRyYW5zSWRQdXJjaGFzZSwgbGluZUlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBdmFpbGFibGVTdG9ja0dyb3VwZWRCeVdMQlNCeVRyYW5zSWRMaW5lTnIodHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8QXZhaWxhYmxlU3RvY2tbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRBdmFpbGFibGVTdG9ja0dyb3VwZWRCeVdMQlNCeVRyYW5zSWRMaW5lTnIodHJhbnNJZCwgbGluZU5yKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kc0FsbG9jYXRpb25IaXN0b3J5KHRyYW5zSWQ6IG51bWJlciwgbGluZU5yOiBudW1iZXIpOiBQcm9taXNlPEdvb2RzQWxsb2NhdGlvbkhpc3Rvcnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0R29vZHNBbGxvY2F0aW9uSGlzdG9yeSh0cmFuc0lkLCBsaW5lTnIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE9yZGVyQ29uZmlybWF0aW9uRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE9yZGVyQ29uZmlybWF0aW9uRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJDb25maXJtYXRpb25QcmludExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0T3JkZXJDb25maXJtYXRpb25QcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRPcmRlckNvbmZpcm1hdGlvbkRlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldE9yZGVyQ29uZmlybWF0aW9uRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JPcmRlckNvbmZpcm1hdGlvbih0cmFuc2FjdGlvblVVSUQpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9yT3JkZXJDb25maXJtYXRpb24odHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludE9yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3Q6IFByaW50T3JkZXJDb25maXJtYXRpb25SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50T3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1haWxPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0OiBFbWFpbE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbE9yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBkZk9yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3Q6IFBkZk9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcmludFB1cmNoYXNlT3JkZXIocmVxdWVzdDogUHJpbnRQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcmludFB1cmNoYXNlT3JkZXIocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1haWxQdXJjaGFzZU9yZGVyKHJlcXVlc3Q6IEVtYWlsUHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxQdXJjaGFzZU9yZGVyKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBkZlB1cmNoYXNlT3JkZXIocmVxdWVzdDogUGRmUHVyY2hhc2VPcmRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IucGRmUHVyY2hhc2VPcmRlcihyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQdXJjaGFzZU9yZGVyRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFB1cmNoYXNlT3JkZXJFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQdXJjaGFzZU9yZGVyUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFB1cmNoYXNlT3JkZXJQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQdXJjaGFzZU9yZGVyRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VPcmRlckRlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlQW5kU2VuZFB1cmNoYXNlT3JkZXJzRm9yU2FsZXNPcmRlcih0cmFuc2FjdGlvbklkOiBudW1iZXIsIHZlcnNpb246IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyR2VuZXJhdGVQdXJjaGFzZU9yZGVycy5uZXh0KHRydWUpO1xuICAgICAgLy8gZ2V0IGxpbmVOdW1iZXJzXG4gICAgICBjb25zdCBsaW5lTnVtYmVyczogbnVtYmVyW10gPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcihsID0+IGwuc2VsZWN0ZWQpLm1hcChsID0+IGwubGluZU5yKTtcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2VuZXJhdGVBbmRTZW5kUHVyY2hhc2VPcmRlcnNGb3JTYWxlc09yZGVyKHRyYW5zYWN0aW9uSWQsIGxpbmVOdW1iZXJzKTtcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckdlbmVyYXRlUHVyY2hhc2VPcmRlcnMubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VBZHZpY2VMaW5lcyhmaWx0ZXJzOiBQdXJjaGFzZUFkdmljZUZpbHRlcnMsIGdvb2RJZD86IG51bWJlcik6IFByb21pc2U8UHVyY2hhc2VBZHZpY2VMaW5lW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VBZHZpY2VMaW5lcyhmaWx0ZXJzLCBnb29kSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlQW5kU2VuZFB1cmNoYXNlT3JkZXJzKHB1cmNoYXNlQWR2aWNlTGluZXM6IFB1cmNoYXNlQWR2aWNlTGluZVtdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdlbmVyYXRlQW5kU2VuZFB1cmNoYXNlT3JkZXJzKHB1cmNoYXNlQWR2aWNlTGluZXMpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVtYWlsRGVsaXZlcnlOb3RlKGVtYWlsRGVsaXZlcnlOb3RlUmVxdWVzdDogRW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJEZWxpdmVyeS5uZXh0KHRydWUpO1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZW1haWxEZWxpdmVyeU5vdGUoZW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyRGVsaXZlcnkubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGRmRGVsaXZlcnlOb3RlKHBkZkRlbGl2ZXJ5Tm90ZVJlcXVlc3Q6IFBkZkRlbGl2ZXJ5Tm90ZVJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckRlbGl2ZXJ5Lm5leHQodHJ1ZSk7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZEZWxpdmVyeU5vdGUocGRmRGVsaXZlcnlOb3RlUmVxdWVzdCk7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckRlbGl2ZXJ5Lm5leHQoZmFsc2UpO1xuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50RGVsaXZlcnlOb3RlKHByaW50RGVsaXZlcnlOb3RlUmVxdWVzdDogUHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJEZWxpdmVyeS5uZXh0KHRydWUpO1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnREZWxpdmVyeU5vdGUocHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyRGVsaXZlcnkubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlOb3RlRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlOb3RlRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlOb3RlRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlbGl2ZXJ5Tm90ZUVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5Tm90ZVByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU5vdGVQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvckludm9pY2UodHJhbnNhY3Rpb25VVUlEKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvckludm9pY2UodHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbEludm9pY2UoZW1haWxJbnZvaWNlUmVxdWVzdDogRW1haWxJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdJbnZvaWNlLm5leHQodHJ1ZSk7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbEludm9pY2UoZW1haWxJbnZvaWNlUmVxdWVzdCk7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nSW52b2ljZS5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZGZJbnZvaWNlKHBkZkludm9pY2VSZXF1ZXN0OiBQZGZJbnZvaWNlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdJbnZvaWNlLm5leHQodHJ1ZSk7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZJbnZvaWNlKHBkZkludm9pY2VSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdJbnZvaWNlLm5leHQoZmFsc2UpO1xuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50SW52b2ljZShwcmludEludm9pY2VSZXF1ZXN0OiBQcmludEludm9pY2VSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ0ludm9pY2UubmV4dCh0cnVlKTtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50SW52b2ljZShwcmludEludm9pY2VSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdJbnZvaWNlLm5leHQoZmFsc2UpO1xuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgLy8gcHVibGljIGFzeW5jIGdldEludm9pY2VEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAvLyAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRJbnZvaWNlRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZCk7XG4gIC8vIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SW52b2ljZUVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uRW1haWxbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRJbnZvaWNlRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SW52b2ljZVByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRJbnZvaWNlUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UGFja2FnZVN0aWNrZXJQcmludExheW91dHMoKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFBhY2thZ2VTdGlja2VyUHJpbnRMYXlvdXRzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJpbnRlcnMoKTogUHJvbWlzZTxQcmludGVyW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHJpbnRlcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDdXJyZW5jaWVzKGFjdGl2ZTogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPEN1cnJlbmN5W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Q3VycmVuY2llcyhhY3RpdmUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFBheW1lbnRDb25kaXRpb25zKG5hbWU/OiBzdHJpbmcpOiBQcm9taXNlPFBheW1lbnRDb25kaXRpb25bXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQYXltZW50Q29uZGl0aW9ucyhuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRKb2luZWRUYWdzKHRhYmxlOiBzdHJpbmcsIGtleTogc3RyaW5nKTogUHJvbWlzZTxUYWdUcmVlSXRlbVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEpvaW5lZFRhZ3ModGFibGUsIGtleSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SW50ZXJuYWxQYXJhbWV0ZXIocGFyYW06IEludGVybmFsUGFyYW0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SW50ZXJuYWxQYXJhbWV0ZXJWYWx1ZShwYXJhbSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SGlzdG9yaWNEb2N1bWVudHModHJhbnNJZDogbnVtYmVyLCBkb2N1bWVudENvZGU6IExheW91dENvZGUpOiBQcm9taXNlPEhpc3RvcmljUmVwb3J0W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0SGlzdG9yaWNEb2N1bWVudHModHJhbnNJZCwgZG9jdW1lbnRDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVSZWNlaXZlU2VsZWN0ZWRQdXJjaGFzZU9yZGVycyhkYXRlOiBEYXRlLCBwYWNraW5nU2xpcE5yOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBzZWxlY3RlZExpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcigobGluZSkgPT4gbGluZS5zZWxlY3RlZCAmJiBsaW5lLmFydGljbGVMaW5lU3RhdHVzLnF1YW50aXR5VG9SZWNlaXZlID4gMCk7XG4gICAgaWYgKHNlbGVjdGVkTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVjZWl2ZWRHb29kc1JlcXVlc3Q6IFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJSZXF1ZXN0ID0gbmV3IFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJSZXF1ZXN0KCk7XG4gICAgICByZWNlaXZlZEdvb2RzUmVxdWVzdC50cmFuc0lkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3QucmVjZWl2ZWREYXRlID0gZGF0ZTtcbiAgICAgIHJlY2VpdmVkR29vZHNSZXF1ZXN0LnBhY2tpbmdTbGlwTnIgPSBwYWNraW5nU2xpcE5yO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3QucHJpbnRlck5hbWUgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucHJpbnRlck5hbWU7XG4gICAgICByZWNlaXZlZEdvb2RzUmVxdWVzdC5yZXBvcnRJZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZXBvcnRJZDtcbiAgICAgIHJlY2VpdmVkR29vZHNSZXF1ZXN0LnNhdmVEZWZhdWx0UHJpbnRlckZvckFsbFVzZXJzID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnNhdmVEZWZhdWx0UHJpbnRlckZvckFsbFVzZXJzO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3Quc2F2ZURlZmF1bHRQcmludGVyRm9yVXNlciA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5zYXZlRGVmYXVsdFByaW50ZXJGb3JVc2VyO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3QucHVyY2hhc2VPcmRlckxpbmVSZWNlaXB0RGV0YWlsc0RUT1MgPSBbXTtcbiAgICAgIHNlbGVjdGVkTGluZXMuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgICBjb25zdCBkZXRhaWw6IFB1cmNoYXNlT3JkZXJMaW5lUmVjZWlwdERldGFpbHMgPSBuZXcgUHVyY2hhc2VPcmRlckxpbmVSZWNlaXB0RGV0YWlscygpO1xuICAgICAgICBkZXRhaWwubGluZU5yID0gbGluZS5saW5lTnI7XG4gICAgICAgIGRldGFpbC5xdWFudGl0eVRvUmVjZWl2ZSA9IGxpbmUuYXJ0aWNsZUxpbmVTdGF0dXMucXVhbnRpdHlUb1JlY2VpdmU7XG4gICAgICAgIGRldGFpbC53YXJlaG91c2VOciA9IGxpbmUud2FyZWhvdXNlTnVtYmVyO1xuICAgICAgICBkZXRhaWwubG9jYXRpb25OciA9IGxpbmUubG9jYXRpb25OcjtcbiAgICAgICAgZGV0YWlsLm51bWJlck9mU3RpY2tlcnMgPSBsaW5lLnN0aWNrZXJBbW91bnQ7XG4gICAgICAgIGRldGFpbC5wcmludGVyTmFtZSA9IGxpbmUucHJpbnRlck5hbWU7XG4gICAgICAgIGRldGFpbC5yZXBvcnRJZCA9IGxpbmUucmVwb3J0SWQ7XG4gICAgICAgIHJlY2VpdmVkR29vZHNSZXF1ZXN0LnB1cmNoYXNlT3JkZXJMaW5lUmVjZWlwdERldGFpbHNEVE9TLnB1c2goZGV0YWlsKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMucmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlcihcbiAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbiwgcmVjZWl2ZWRHb29kc1JlcXVlc3QpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlQWxsb2NhdGVTZWxlY3RlZFB1cmNoYXNlT3JkZXJzKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHNlbGVjdGVkTGluZXM6IFRyYW5zYWN0aW9uTGluZUluZm9bXSA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnNlbGVjdGVkICYmIGxpbmUucXVhbnRpdHlUb0FsbG9jYXRlID4gMCk7XG4gICAgaWYgKHNlbGVjdGVkTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWxsb2NhdGVHb29kc1JlcXVlc3Q6IEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyUmVxdWVzdCA9IG5ldyBBbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlclJlcXVlc3QoKTtcbiAgICAgIGFsbG9jYXRlR29vZHNSZXF1ZXN0LnRyYW5zSWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQ7XG4gICAgICBhbGxvY2F0ZUdvb2RzUmVxdWVzdC5zYWxlc09yZGVyTGluZUFsbG9jYXRpb25EZXRhaWxzRFRPUyA9IFtdO1xuICAgICAgc2VsZWN0ZWRMaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldGFpbDogU2FsZXNPcmRlckxpbmVBbGxvY2F0aW9uRGV0YWlscyA9IG5ldyBTYWxlc09yZGVyTGluZUFsbG9jYXRpb25EZXRhaWxzKCk7XG4gICAgICAgIGRldGFpbC5saW5lTnIgPSBsaW5lLmxpbmVOcjtcbiAgICAgICAgZGV0YWlsLnF1YW50aXR5VG9BbGxvY2F0ZSA9IGxpbmUucXVhbnRpdHlUb0FsbG9jYXRlO1xuICAgICAgICBkZXRhaWwud2FyZWhvdXNlTnIgPSBsaW5lLndhcmVob3VzZU51bWJlcjtcbiAgICAgICAgZGV0YWlsLmxvY2F0aW9uTnIgPSBsaW5lLmxvY2F0aW9uTnI7XG4gICAgICAgIGFsbG9jYXRlR29vZHNSZXF1ZXN0LnNhbGVzT3JkZXJMaW5lQWxsb2NhdGlvbkRldGFpbHNEVE9TLnB1c2goZGV0YWlsKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMuYWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXIoXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24sIGFsbG9jYXRlR29vZHNSZXF1ZXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldFB1cmNoYXNlT3JkZXJGb3JUcmFuc2FjdGlvbkxpbmUodHJhbnNJZDogbnVtYmVyLCB0cmFuc0xpbmU6IFRyYW5zYWN0aW9uTGluZUluZm8pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLmdldFRyYW5zYWN0aW9uSW5mbyh0cmFuc0lkLCB0cmFuc0xpbmUubGluZU5yKS50aGVuKCh0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uSW5mb0hpc3RvcnlbXSkgPT4ge1xuICAgICAgICBpZiAodHJhbnNhY3Rpb25zICYmIHRyYW5zYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdHJhbnNMaW5lLnB1cmNoYXNlT3JkZXJJZCA9IHRyYW5zYWN0aW9uc1swXS50cmFuc0lkO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgX2hhbmRsZUFmdGVyUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX2lzVmFsaWRUcmFuc2FjdGlvbigpKSB7XG4gICAgICBjb25zdCBoYXNEZXBvc2l0QW1vdW50QmVlblJlY2FsY3VsYXRlZDogYm9vbGVhbiA9IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLnRyYW5zYWN0aW9uVG90YWwuaGFzRGVwb3NpdEFtb3VudEJlZW5SZWNhbGN1bGF0ZWQ7XG4gICAgICBjb25zdCBoYXNEZXBvc2l0UnVsZTogYm9vbGVhbiA9IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLnRyYW5zYWN0aW9uVG90YWwuaGFzRGVwb3NpdFJ1bGU7XG4gICAgICBpZiAoaGFzRGVwb3NpdEFtb3VudEJlZW5SZWNhbGN1bGF0ZWQpIHtcbiAgICAgICAgY29uc3QgZGVwb3NpdEFtb3VudFRyYW5zYWN0aW9uOiBudW1iZXIgPSB0cmFuc2FjdGlvbkluZm9SZXNwb25zZS50cmFuc2FjdGlvbkluZm8uZGVwb3NpdEFtb3VudDtcbiAgICAgICAgaWYgKGhhc0RlcG9zaXRSdWxlKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlQnVzaW5lc3NSdWxlRGVwb3NpdEFtb3VudCh0cmFuc2FjdGlvbkluZm9SZXNwb25zZSwgZGVwb3NpdEFtb3VudFRyYW5zYWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVCdXNpbmVzc1J1bGVEZXBvc2l0UGVyY2VudGFnZUFtb3VudCh0cmFuc2FjdGlvbkluZm9SZXNwb25zZSwgZGVwb3NpdEFtb3VudFRyYW5zYWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUJ1c2luZXNzUnVsZURlcG9zaXRQZXJjZW50YWdlQW1vdW50KHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgZGVwb3NpdEFtb3VudFRyYW5zYWN0aW9uOiBudW1iZXIpIHtcbiAgICBjb25zdCBkZXBvc2l0UGVyY2VudGFnZVRyYW5zYWN0aW9uOiBudW1iZXIgPSB0cmFuc2FjdGlvbkluZm9SZXNwb25zZS50cmFuc2FjdGlvbkluZm8uZGVwb3NpdFBlcmNlbnRhZ2U7XG4gICAgY29uc3QgZGVwb3NpdEFtb3VudEJ5UGVyY2VudGFnZTogbnVtYmVyID0gdHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UudHJhbnNhY3Rpb25Ub3RhbC5kZXBvc2l0QW1vdW50QnlQZXJjZW50YWdlO1xuICAgIGlmIChkZXBvc2l0UGVyY2VudGFnZVRyYW5zYWN0aW9uICYmIGRlcG9zaXRBbW91bnRCeVBlcmNlbnRhZ2UgIT09IGRlcG9zaXRBbW91bnRUcmFuc2FjdGlvbikge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuX3VzZXJEZWNpc2lvblNob3VsZERlcG9zaXRSZWNhbGN1bGF0aW9uKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlcG9zaXRQZXJjZW50YWdlKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLnRyYW5zYWN0aW9uSW5mby51dWlkLCBkZXBvc2l0UGVyY2VudGFnZVRyYW5zYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVCdXNpbmVzc1J1bGVEZXBvc2l0QW1vdW50KHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSwgZGVwb3NpdEFtb3VudFRyYW5zYWN0aW9uOiBudW1iZXIpIHtcbiAgICBjb25zdCBkZXBvc2l0QW1vdW50QnlEZXBvc2l0QnVzaW5lc3NSdWxlOiBudW1iZXIgPSB0cmFuc2FjdGlvbkluZm9SZXNwb25zZS50cmFuc2FjdGlvblRvdGFsLmRlcG9zaXRBbW91bnRCeURlcG9zaXRCdXNpbmVzc1J1bGU7XG4gICAgaWYgKGRlcG9zaXRBbW91bnRCeURlcG9zaXRCdXNpbmVzc1J1bGUgIT09IGRlcG9zaXRBbW91bnRUcmFuc2FjdGlvbikge1xuICAgICAgaWYgKGF3YWl0IHRoaXMuX3VzZXJEZWNpc2lvblNob3VsZERlcG9zaXRSZWNhbGN1bGF0aW9uKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlcG9zaXRBbW91bnQodHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UudHJhbnNhY3Rpb25JbmZvLnV1aWQsIGRlcG9zaXRBbW91bnRCeURlcG9zaXRCdXNpbmVzc1J1bGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3VzZXJEZWNpc2lvblNob3VsZERlcG9zaXRSZWNhbGN1bGF0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5fZG9udEFza0ZvclJlY2FsY3VsYXRpb25EZXBvc2l0KSB7XG4gICAgICBjb25zdCByZXNwb25zZTogRGlhbG9nUmVzcG9uc2VJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd1llc05vKCdERVBPU0lUX1JFQ0FMQ1VMQVRFJywgJ1JFQ0FMQ1VMQVRFX0RFUE9TSVRfQU1PVU5UJywgdHJ1ZSk7XG4gICAgICB0aGlzLl9hbnN3ZXJSZWNhbGN1bGF0aW9uRGVwb3NpdCA9IHJlc3BvbnNlLmJ1dHRvbiA9PT0gQXBwUG9wdXBCdXR0b25UeXBlLlllcztcbiAgICAgIHRoaXMuX2RvbnRBc2tGb3JSZWNhbGN1bGF0aW9uRGVwb3NpdCA9IHJlc3BvbnNlLnJlbWVtYmVyQ2hvaWNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYW5zd2VyUmVjYWxjdWxhdGlvbkRlcG9zaXQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gfHwgIXRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mbyB8fCAhdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uTnIpIHtcbiAgICAgIGNvbnN0IGNyZWF0ZU1ldGhvZDogQ3JlYXRlVHJhbnNhY3Rpb25GbiA9IHRoaXMuX2NyZWF0ZVRyYW5zYWN0aW9uTWV0aG9kcy5nZXQodGhpcy50cmFuc2FjdGlvbktpbmQpO1xuICAgICAgaWYgKGNyZWF0ZU1ldGhvZCkge1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBDcmVhdGVUcmFuc2FjdGlvblJlcXVlc3QgPSBuZXcgQ3JlYXRlVHJhbnNhY3Rpb25SZXF1ZXN0KCk7XG4gICAgICAgIHJldHVybiBjcmVhdGVNZXRob2QuY2FsbCh0aGlzLCByZXF1ZXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIHRyYW5zYWN0aW9uXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
1163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RyYW5zYWN0aW9uL3NyYy9saWIvc2VydmljZS90cmFuc2FjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQWlCcEYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsbUNBQW1DLEVBQUMsTUFBTSxrRkFBa0YsQ0FBQztBQWVySSxPQUFPLEVBQUMsaUNBQWlDLEVBQUMsTUFBTSw2RUFBNkUsQ0FBQztBQWlCOUgsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlFQUFpRSxDQUFDO0FBQ3pHLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQU1oRixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUsvRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUNyRixPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSw2RUFBNkUsQ0FBQztBQUM1SCxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSwwRUFBMEUsQ0FBQzs7Ozs7Ozs7OztBQWlCekgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLG9CQUFvQjtJQUg1RDs7UUFLbUIsOEJBQXlCLEdBQThDLElBQUksR0FBRyxDQUF1QztZQUNwSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFnQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMs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QkFDdkMsTUFBTSxPQUFPLEdBQTZCLElBQUksd0JBQXdCLEVBQUUsQ0FBQzt3QkFDekUsWUFBWSxDQUFDLE9BQU8sQ0FBQzs2QkFDbEIsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2hCLENBQUMsQ0FBQzs2QkFDSCxLQUFLLENBQUMsR0FBRyxFQUFFOzRCQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDakIsQ0FBQyxDQUFDLENBQUE7b0JBQ0osQ0FBQyxDQUFDLENBQUM7aUJBQ0o7cUJBQU07b0JBQ0wsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUM7aUJBQzVDO2FBQ0Y7aUJBQU07Z0JBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlCO1FBQ0gsQ0FBQztLQUFBO0lBRWEsWUFBWTs7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3ZCLE1BQU0sUUFBUSxHQUE0QixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUN2RyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssa0JBQWtCLENBQUMsTUFBTSxFQUFFO29CQUNqRCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztpQkFDL0U7YUFDRjtRQUNILENBQUM7S0FBQTs7OztZQXRpQ0YsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGlzY291bnRUeXBlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9kaXNjb3VudC10eXBlLmVudW0nO1xuaW1wb3J0IHtTZXF1ZW5jZU5hbWV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3NlcXVlbmNlLW5hbWUuZW51bSc7XG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1mdWxsLW9iamVjdCc7XG5pbXBvcnQge0Nhc2hSZWdpc3Rlcn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2Nhc2gtcmVnaXN0ZXInO1xuaW1wb3J0IHtDb2RlRGVzY3JpcHRpb259IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb2RlLWRlc2NyaXB0aW9uJztcbmltcG9ydCB7Q291bnRyeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NvdW50cnkuYm8nO1xuaW1wb3J0IHtDdXN0b21lckdyb3VwfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3VzdG9tZXItZ3JvdXAuYm8nO1xuaW1wb3J0IHtEZWxpdmVyeU1ldGhvZH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RlbGl2ZXJ5LW1ldGhvZC5ibyc7XG5pbXBvcnQge0RlbGl2ZXJ5T3B0aW9ufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktb3B0aW9uLmJvJztcbmltcG9ydCB7TWFya2V0aW5nfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbWFya2V0aW5nLmJvJztcbmltcG9ydCB7T25Ib2xkQ29kZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL29uLWhvbGQtY29kZS5ibyc7XG5pbXBvcnQge1ByaWNlTGlzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaWNlLWxpc3QnO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2V9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1hcnRpY2xlLXdhcmVob3VzZS5ibyc7XG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1yZXNwb25zZS5ibyc7XG5pbXBvcnQge1RyYW5zYWN0aW9uTGluZUluZm99IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1saW5lLWluZm8uYm8nO1xuaW1wb3J0IHtWYWxpZGF0aW9uUmVzdWx0fSBmcm9tICdAY29saWpuaXQvaW9uZWNvbm5lY3Rvci9idWlsZC9tb2RlbC92YWxpZGF0aW9uLXJlc3VsdCc7XG5pbXBvcnQge1ZhdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ZhdCc7XG5pbXBvcnQge1dhcmVob3VzZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3dhcmVob3VzZS5ibyc7XG5pbXBvcnQge3Rocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtTdGFuZGFyZFRleHR9IGZyb20gJy4uL21vZGVsL3N0YW5kYXJkLXRleHQnO1xuaW1wb3J0IHtQZW5kaW5nUmVhc29uU2VydmljZX0gZnJvbSAnLi9wZW5kaW5nLXJlYXNvbi5zZXJ2aWNlJztcbmltcG9ydCB7UmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWNlaXZlLWdvb2RzLWZvci1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0LmJvJztcbmltcG9ydCB7XG4gIFJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJDb3JyZWN0aW9uUmVxdWVzdFxufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVjZWl2ZS1nb29kcy1mb3ItcHVyY2hhc2Utb3JkZXItY29ycmVjdGlvbi1yZXF1ZXN0LmJvJztcbmltcG9ydCB7QXJ0aWNsZUV4dGVuZGVkUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZS1leHRlbmRlZC1yZXF1ZXN0JztcbmltcG9ydCB7QXJ0aWNsZUxpZ2h0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWxpZ2h0LmJvJztcbmltcG9ydCB7VHVybm92ZXJHcm91cEltYWdlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC90dXJub3Zlci1ncm91cC1pbWFnZS5ibyc7XG5pbXBvcnQge01haW5BcnRpY2xlfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9tYWluLWFydGljbGUuYm8nO1xuaW1wb3J0IHtQdXJjaGFzZVBvcnRhbExpbmV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wdXJjaGFzZS1wb3J0YWwtbGluZS5ibyc7XG5pbXBvcnQge0dldFB1cmNoYXNlT3JkZXJDb25maXJtYXRpb259IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nZXQtcHVyY2hhc2Utb3JkZXItY29uZmlybWF0aW9uJztcbmltcG9ydCB7VGFnfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC90YWcnO1xuaW1wb3J0IHtDb0RvbWFpblZhbHVlfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb21haW4tdmFsdWUuYm8nO1xuaW1wb3J0IHtSZWxhdGlvblByaXZhY3lTZXR0aW5nfSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcHJpdmFjeS1zZXR0aW5nLmJvJztcbmltcG9ydCB7U2FsZXNQZXJzb259IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9zYWxlcy1wZXJzb24uYm8nO1xuaW1wb3J0IHtBdmFpbGFibGVTdG9ja30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2F2YWlsYWJsZS1zdG9jay5ibyc7XG5pbXBvcnQge0FsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FsbG9jYXRlLWdvb2RzLWZvci1zYWxlcy1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7XG4gIEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvblJlcXVlc3Rcbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FsbG9jYXRlLWdvb2RzLWZvci1zYWxlcy1vcmRlci1jb3JyZWN0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcmVwb3J0LWxheW91dC1zZWxlY3Rpb24tZW1haWwuYm8nO1xuaW1wb3J0IHtSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcmVwb3J0LWxheW91dC1zZWxlY3Rpb24tcHJpbnQuYm8nO1xuaW1wb3J0IHtQcmludE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcHJpbnQtb3JkZXItY29uZmlybWF0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtFbWFpbE9yZGVyQ29uZmlybWF0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvZW1haWwtb3JkZXItY29uZmlybWF0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtQZGZPcmRlckNvbmZpcm1hdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3BkZi1vcmRlci1jb25maXJtYXRpb24tcmVxdWVzdCc7XG5pbXBvcnQge1ByaW50UHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3ByaW50LXB1cmNoYXNlLW9yZGVyLXJlcXVlc3QnO1xuaW1wb3J0IHtFbWFpbFB1cmNoYXNlT3JkZXJSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7UGRmUHVyY2hhc2VPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3BkZi1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7Q3JlYXRlU2FsZXNPcmRlclJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtc2FsZXMtb3JkZXItcmVxdWVzdCc7XG5pbXBvcnQge0NyZWF0ZUNhc2hSZWdpc3Rlck9yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS1jYXNoLXJlZ2lzdGVyLW9yZGVyLXJlcXVlc3QnO1xuaW1wb3J0IHtDcmVhdGVQdXJjaGFzZU9yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS1wdXJjaGFzZS1vcmRlci1yZXF1ZXN0JztcbmltcG9ydCB7Q3JlYXRlU2VydmljZU9yZGVyUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS1zZXJ2aWNlLW9yZGVyLXJlcXVlc3QnO1xuaW1wb3J0IHtDcmVhdGVTYWxlc1F1b3RhdGlvblJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jcmVhdGUtc2FsZXMtcXVvdGF0aW9uLXJlcXVlc3QnO1xuaW1wb3J0IHtUcmFuc2FjdGlvbktpbmR9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3RyYW5zYWN0aW9uLWtpbmQuZW51bSc7XG5pbXBvcnQge0NyZWF0ZVRyYW5zYWN0aW9uUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NyZWF0ZS10cmFuc2FjdGlvbi1yZXF1ZXN0JztcbmltcG9ydCB7UmVsYXRpb25LaW5kfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9lbnVtL3JlbGF0aW9uLWtpbmQuZW51bSc7XG5pbXBvcnQge1B1cmNoYXNlQWR2aWNlTGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLWFkdmljZS1saW5lLmJvJztcbmltcG9ydCB7UHVyY2hhc2VBZHZpY2VGaWx0ZXJzfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHVyY2hhc2UtYWR2aWNlLWZpbHRlcnMnO1xuaW1wb3J0IHtFbWFpbERlbGl2ZXJ5Tm90ZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1kZWxpdmVyeS1ub3RlLXJlcXVlc3QnO1xuaW1wb3J0IHtQZGZEZWxpdmVyeU5vdGVSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcGRmLWRlbGl2ZXJ5LW5vdGUtcmVxdWVzdCc7XG5pbXBvcnQge1ByaW50RGVsaXZlcnlOb3RlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3ByaW50LWRlbGl2ZXJ5LW5vdGUtcmVxdWVzdCc7XG5pbXBvcnQge1RyYW5zYWN0aW9uVHlwZUNhdGVnb3J5fSBmcm9tICcuLi9lbnVtL3RyYW5zYWN0aW9uLXR5cGUtY2F0ZWdvcnkuZW51bSc7XG5pbXBvcnQge0VtYWlsSW52b2ljZVJlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9lbWFpbC1pbnZvaWNlLXJlcXVlc3QnO1xuaW1wb3J0IHtQZGZJbnZvaWNlUmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3BkZi1pbnZvaWNlLXJlcXVlc3QnO1xuaW1wb3J0IHtQcmludEludm9pY2VSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHJpbnQtaW52b2ljZS1yZXF1ZXN0JztcbmltcG9ydCB7RGlhbG9nUmVzcG9uc2VJbnRlcmZhY2V9IGZyb20gJy4uL2ludGVyZmFjZS9kaWFsb2ctcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7QXBwUG9wdXBCdXR0b25UeXBlfSBmcm9tICcuLi9jb21wb25lbnQvY29yZS9lbnVtL2FwcC1wb3B1cC1idXR0b24tdHlwZS5lbnVtJztcbmltcG9ydCB7UHVyY2hhc2VPcmRlckxpbmVSZWNlaXB0RGV0YWlsc30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLW9yZGVyLWxpbmUtcmVjZWlwdC1kZXRhaWxzLmJvJztcbmltcG9ydCB7U2FsZXNPcmRlckxpbmVBbGxvY2F0aW9uRGV0YWlsc30gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3NhbGVzLW9yZGVyLWxpbmUtYWxsb2NhdGlvbi1kZXRhaWxzJztcbmltcG9ydCB7VGFnVHJlZUl0ZW19IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL3RhZy10cmVlLWl0ZW0uYm8nO1xuaW1wb3J0IHtJbnRlcm5hbFBhcmFtfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL2ludGVybmFsLXBhcmFtLmVudW0nO1xuaW1wb3J0IHtHb29kc1JlY2VpcHRIaXN0b3J5fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ29vZHMtcmVjZWlwdC1oaXN0b3J5LmJvJztcbmltcG9ydCB7R29vZHNBbGxvY2F0aW9uSGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dvb2RzLWFsbG9jYXRpb24taGlzdG9yeS5ibyc7XG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb0hpc3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLWhpc3RvcnkuYm8nO1xuaW1wb3J0IHtMYXlvdXRDb2RlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9sYXlvdXQtY29kZS5lbnVtJztcbmltcG9ydCB7SGlzdG9yaWNSZXBvcnR9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9oaXN0b3JpYy1yZXBvcnQuYm8nO1xuaW1wb3J0IHtQcmludGVyfSBmcm9tICdAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9wcmludGVyLmJvJztcbmltcG9ydCB7Q3VycmVuY3l9IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL21vZGVsL2N1cnJlbmN5LmJvJztcbmltcG9ydCB7UGF5bWVudENvbmRpdGlvbn0gZnJvbSAnQGNvbGlqbml0L21haW5hcGkvYnVpbGQvbW9kZWwvcGF5bWVudC1jb25kaXRpb24uYm8nO1xuXG50eXBlIENyZWF0ZVRyYW5zYWN0aW9uRm4gPSAocmVxdWVzdDogQ3JlYXRlVHJhbnNhY3Rpb25SZXF1ZXN0KSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uU2VydmljZSBleHRlbmRzIFBlbmRpbmdSZWFzb25TZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jcmVhdGVUcmFuc2FjdGlvbk1ldGhvZHM6IE1hcDxUcmFuc2FjdGlvbktpbmQsIENyZWF0ZVRyYW5zYWN0aW9uRm4+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIENyZWF0ZVRyYW5zYWN0aW9uRm4+KFtcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIChyZXF1ZXN0OiBDcmVhdGVTYWxlc09yZGVyUmVxdWVzdCkgPT4gdGhpcy5jcmVhdGVTYWxlc09yZGVyKHJlcXVlc3QpXSxcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIChyZXF1ZXN0OiBDcmVhdGVQdXJjaGFzZU9yZGVyUmVxdWVzdCkgPT4gdGhpcy5jcmVhdGVQdXJjaGFzZU9yZGVyKHJlcXVlc3QpXVxuICBdKVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbGF0aW9uS2luZEZyb21UcmFuc2FjdGlvbktpbmQ6IE1hcDxUcmFuc2FjdGlvbktpbmQsIFJlbGF0aW9uS2luZD4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgUmVsYXRpb25LaW5kPihbXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBSZWxhdGlvbktpbmQuQ3VzdG9tZXJdLFxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgUmVsYXRpb25LaW5kLlN1cHBsaWVyXVxuICBdKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9mb2N1c1N0YXR1c0luZGV4OiBNYXA8VHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnksIG51bWJlcj4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LCBudW1iZXI+KFtcbiAgICBbVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlclB1cmNoYXNlLCAwXSxcbiAgICBbVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlckFsbG9jYXRpb24sIDFdLFxuICAgIFtUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyRGVsaXZlcnlOb3RlLCA3XSxcbiAgICBbVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlckludm9pY2UsIDhdXG4gIF0pO1xuXG4gIHByaXZhdGUgX2Fuc3dlclJlY2FsY3VsYXRpb25EZXBvc2l0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RvbnRBc2tGb3JSZWNhbGN1bGF0aW9uRGVwb3NpdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBnZXRGb2N1c1N0YXR1c0luZGV4KGNhdGVnb3J5OiBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzU3RhdHVzSW5kZXguZ2V0KGNhdGVnb3J5KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWxhdGlvbktpbmRGcm9tVHJhbnNhY3Rpb25LaW5kKCk6IFJlbGF0aW9uS2luZCB7XG4gICAgaWYgKHRoaXMuX3JlbGF0aW9uS2luZEZyb21UcmFuc2FjdGlvbktpbmQuaGFzKHRoaXMudHJhbnNhY3Rpb25LaW5kKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbGF0aW9uS2luZEZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFJlbGF0aW9uS2luZC5DdXN0b21lcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2hvd1dhcmVob3VzZUxvY2F0aW9uUG9wdXBPbmNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy53YXJlaG91c2VMb2NhdGlvblBvcHVwU2hvd24gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcykge1xuICAgICAgdGhpcy53YXJlaG91c2VMb2NhdGlvblBvcHVwU2hvd24gPSB0cnVlO1xuICAgICAgY29uc3QgbGluZXNUaGF0U2hvdWxkSGF2ZUxvY2F0aW9uOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPVxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcihsID0+IGwuaXNMb2NhdGlvblJlcXVpcmVkICYmIGwuYXJ0aWNsZUxpbmVTdGF0dXMucXVhbnRpdHlUb1JlY2VpdmUgPiAwICYmICFsLmxvY2F0aW9uTnIpO1xuICAgICAgaWYgKGxpbmVzVGhhdFNob3VsZEhhdmVMb2NhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBEaWFsb2dSZXNwb25zZUludGVyZmFjZSA9IGF3YWl0IHRoaXMuZGlhbG9nU2VydmljZS5zaG93V2FyZWhvdXNlTG9jYXRpb24oMCwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmJ1dHRvbiA9PT0gQXBwUG9wdXBCdXR0b25UeXBlLk9rKSB7XG4gICAgICAgICAgbGluZXNUaGF0U2hvdWxkSGF2ZUxvY2F0aW9uLmZvckVhY2gobCA9PiBsLmxvY2F0aW9uTnIgPSByZXNwb25zZS5vdXRwdXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKSB7XG4gICAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERpYWxvZ1Jlc3BvbnNlSW50ZXJmYWNlID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dZZXNObygnREVMRVRFJywgJ0RFTEVURV9UUkFOU0FDVElPTl9RVUVTVElPTicpO1xuICAgICAgICBjb25zdCBzaG91bGREZWxldGU6IGJvb2xlYW4gPSByZXNwb25zZS5idXR0b24gPT09IEFwcFBvcHVwQnV0dG9uVHlwZS5ZZXM7XG4gICAgICAgIGlmIChzaG91bGREZWxldGUpIHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5kZWxldGVUcmFuc2FjdGlvbkJ5VXVJZCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCk7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlLCBmYWxzZSk7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS50cmFuc2FjdGlvbkRlbGV0ZWQubmV4dCgpO1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUHJpY2VUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBwcmljZTogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVByaWNlKHV1aWQsIGxpbmVVdWlkLCBwcmljZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUmVmZXJlbmNlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUmVmZXJlbmNlKHV1aWQsIGxpbmVVdWlkLCByZWZlcmVuY2UpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUdvb2REZXNjcmlwdGlvblRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGdvb2REZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZUdvb2REZXNjcmlwdGlvbih1dWlkLCBsaW5lVXVpZCwgZ29vZERlc2NyaXB0aW9uKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlZmluaXRpdmUodXVpZDogc3RyaW5nLCBkZWZpbml0aXZlOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVmaW5pdGl2ZSh1dWlkLCBkZWZpbml0aXZlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlckRlbGl2ZXJ5QWRkcmVzcyh1dWlkOiBzdHJpbmcsIG5ld05hd05yOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVsaXZlcnlBZGRyZXNzKHV1aWQsIG5ld05hd05yKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlckludm9pY2VBZGRyZXNzKHV1aWQ6IHN0cmluZywgbmV3TmF3TnI6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJJbnZvaWNlQWRkcmVzcyh1dWlkLCBuZXdOYXdOcik7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5RGF0ZSh1dWlkOiBzdHJpbmcsIGRhdGU6IERhdGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeURhdGUodXVpZCwgZGF0ZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5RGF0ZURlZmluaXRpdmUodXVpZDogc3RyaW5nLCBkZWZpbml0aXZlOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uRGVsaXZlcnlEYXRlRGVmaW5pdGl2ZSh1dWlkLCBkZWZpbml0aXZlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uUmVtYXJrKHV1aWQ6IHN0cmluZywgcmVtYXJrOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25SZW1hcmsodXVpZCwgcmVtYXJrKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uUmVmZXJlbmNlKHV1aWQ6IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25SZWZlcmVuY2UodXVpZCwgcmVmZXJlbmNlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uUmVsYXRpb25SZWZlcmVuY2UodXVpZDogc3RyaW5nLCByZWZlcmVuY2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvblJlbGF0aW9uUmVmZXJlbmNlKHV1aWQsIHJlZmVyZW5jZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlcG9zaXRBbW91bnQodXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJEZXBvc2l0QW1vdW50KHV1aWQsIGFtb3VudCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlcG9zaXRQZXJjZW50YWdlKHV1aWQ6IHN0cmluZywgYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyRGVwb3NpdFBlcmNlbnRhZ2UodXVpZCwgYW1vdW50KTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblByZWZlcnJlZERlbGl2ZXJ5RGF0ZSh1dWlkOiBzdHJpbmcsIGRhdGU6IERhdGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25QcmVmZXJyZWREZWxpdmVyeURhdGUodXVpZCwgZGF0ZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5TWV0aG9kKHV1aWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeU1ldGhvZCh1dWlkLCBtZXRob2QpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnModXVpZDogc3RyaW5nLCBvcHRpb25zOiBzdHJpbmdbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9ucyh1dWlkLCBvcHRpb25zKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uUGFydGlhbERlbGl2ZXJ5KHV1aWQ6IHN0cmluZywgYWxsb3dQYXJ0aWFsOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUGFydGlhbERlbGl2ZXJ5KHV1aWQsIGFsbG93UGFydGlhbCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkJyYW5jaCh1dWlkOiBzdHJpbmcsIGJyYW5jaDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uQnJhbmNoKHV1aWQsIGJyYW5jaCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvblByaWNlS2luZCh1dWlkOiBzdHJpbmcsIHByaWNlS2luZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uUHJpY2VLaW5kKHV1aWQsIHByaWNlS2luZCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkFkbUNvb3JkaW5hdG9yKHV1aWQ6IHN0cmluZywgcmVsYXRpb246IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VIZWFkZXJUcmFuc2FjdGlvbkFkbUNvb3JkaW5hdG9yKHV1aWQsIHJlbGF0aW9uKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uU2FsZXNQZXJzb24odXVpZDogc3RyaW5nLCByZWxhdGlvbjogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gbm90IGluIG1pZGRsZXRpZXIgeWV0XG4gICAgLy8gY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uU2FsZXNPcmRlcih1dWlkLCByZWxhdGlvbik7XG4gICAgLy8gaWYgKHJlc3BvbnNlKSB7XG4gICAgLy8gICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgLy8gfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uQ3VycmVuY3kodXVpZDogc3RyaW5nLCBjdXJyZW5jeUlkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBub3QgaW4gbWlkZGxldGllciB5ZXRcbiAgICAvLyBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25DdXJyZW5jeSh1dWlkLCBjdXJyZW5jeUlkKTtcbiAgICAvLyBpZiAocmVzcG9uc2UpIHtcbiAgICAvLyAgIHJldHVybiB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAvLyB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25QYXltZW50Q29uZGl0aW9uKHV1aWQ6IHN0cmluZywgY29uZGl0aW9uOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBub3QgaW4gbWlkZGxldGllciB5ZXRcbiAgICAvLyBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25QYXltZW50Q29uZGl0aW9uKHV1aWQsIGNvbmRpdGlvbik7XG4gICAgLy8gaWYgKHJlc3BvbnNlKSB7XG4gICAgLy8gICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgLy8gfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uTWFya2V0aW5nKHV1aWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZUhlYWRlclRyYW5zYWN0aW9uTWFya2V0aW5nKHV1aWQsIGNvZGUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25EaXNjb3VudCh1dWlkOiBzdHJpbmcsIHR5cGU6IERpc2NvdW50VHlwZSwgYW1vdW50OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlSGVhZGVyVHJhbnNhY3Rpb25EaXNjb3VudCh1dWlkLCB0eXBlLCBhbW91bnQpO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVF1YW50aXR5VHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVRdWFudGl0eSh1dWlkLCBsaW5lVXVpZCwgcXVhbnRpdHkpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZURlbGl2ZXJ5RGF0ZVRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGRhdGU6IERhdGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lRGVsaXZlcnlEYXRlKHV1aWQsIGxpbmVVdWlkLCBkYXRlKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVQcmljZUxpc3RUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBwcmljZUxpc3Q6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVQcmljZUxpc3QodXVpZCwgbGluZVV1aWQsIHByaWNlTGlzdCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlVmF0VHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgaWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVWYXQodXVpZCwgbGluZVV1aWQsIGlkKTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVDb21taXNzaW9uQ29kZVRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVDb21taXNzaW9uQ29kZSh1dWlkLCBsaW5lVXVpZCwgY29kZSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlU3VwcGxpZXJUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCBpZDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlIHwgYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVN1cHBsaWVyKHV1aWQsIGxpbmVVdWlkLCBpZCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlV2FyZWhvdXNlVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgd2FyZWhvdXNlTnVtYmVyOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lV2FyZWhvdXNlKHV1aWQsIGxpbmVVdWlkLCB3YXJlaG91c2VOdW1iZXIpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZURlbGl2ZXJ5TWV0aG9kVHJhbnNhY3Rpb25MaW5lKHV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgfCBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lRGVsaXZlcnlNZXRob2QodXVpZCwgbGluZVV1aWQsIG1ldGhvZCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlRGlzY291bnRUcmFuc2FjdGlvbkxpbmUodXVpZDogc3RyaW5nLCBsaW5lVXVpZDogc3RyaW5nLCB0eXBlOiBEaXNjb3VudFR5cGUsIGRpc2NvdW50OiBudW1iZXIsIHJlYXNvbjogc3RyaW5nID0gXCJcIiwgY29kZTogc3RyaW5nID0gXCJcIik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVMaW5lRGlzY291bnQodXVpZCwgbGluZVV1aWQsIHR5cGUsIGRpc2NvdW50LCByZWFzb24sIGNvZGUpO1xuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZURyb3BTaGlwbWVudFRyYW5zYWN0aW9uTGluZSh1dWlkOiBzdHJpbmcsIGxpbmVVdWlkOiBzdHJpbmcsIG5ld0Ryb3BTaGlwbWVudDogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSB8IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jaGFuZ2VUcmFuc2FjdGlvbkxpbmVEcm9wU2hpcG1lbnQodXVpZCwgbGluZVV1aWQsIG5ld0Ryb3BTaGlwbWVudCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGVDb21taXNzaW9uT3JkZXJzKHRyYW5zSWQ6IG51bWJlciwgb25seUdlbmVyYXRlRm9yRGlyZWN0U2VsbFN1cHBsaWVyczogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyR2VuZXJhdGVQdXJjaGFzZU9yZGVycy5uZXh0KHRydWUpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2VuZXJhdGVDb21taXNzaW9uT3JkZXJzKHRyYW5zSWQsIG9ubHlHZW5lcmF0ZUZvckRpcmVjdFNlbGxTdXBwbGllcnMpO1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyR2VuZXJhdGVQdXJjaGFzZU9yZGVycy5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2F2ZVJlbGF0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIHRoaXMuX2NsZWFuUmVsYXRpb25CZWZvcmVTYXZlKCk7XG4gICAgdGhpcy5pbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbiAgICBpZiAoIXRoaXMucmVsYXRpb24ucmVsYXRpb25JZCkge1xuICAgICAgdGhpcy5yZWxhdGlvbiA9IGF3YWl0IHRoaXMucmVsYXRpb25TZXJ2aWNlLmluc2VydFJlbGF0aW9uKHRoaXMuX3JlbGF0aW9uS2luZEZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKSwgdGhpcy5yZWxhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxvY2tlZDogVmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMucmVsYXRpb25TZXJ2aWNlLmxvY2tSZWxhdGlvbih0aGlzLnJlbGF0aW9uLnJlbGF0aW9uVHlwZSwgcGFyc2VJbnQodGhpcy5yZWxhdGlvbi5yZWxhdGlvbk51bWJlcikpO1xuICAgICAgaWYgKGxvY2tlZCAmJiBsb2NrZWQuc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlbGF0aW9uID0gYXdhaXQgdGhpcy5yZWxhdGlvblNlcnZpY2UudXBkYXRlUmVsYXRpb24odGhpcy5fcmVsYXRpb25LaW5kRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodGhpcy50cmFuc2FjdGlvbktpbmQpLCB0aGlzLnJlbGF0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93SW5mb3JtYXRpb24odGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXQoJ1JFTEFUSU9OX0FMUkVBRFlfTE9DS0VEJykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGF3YWl0IHRoaXMucmVsYXRpb25TZXJ2aWNlLmNvbW1pdCgpO1xuICAgIGlmICghdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24odGhpcy5yZWxhdGlvbi5yZWxhdGlvbklkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VxdWVuY2VWYWx1ZSgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRTZXF1ZW5jZVZhbHVlKFNlcXVlbmNlTmFtZS5SZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWxhdGlvblByaXZhY3lTZXR0aW5ncygpOiBQcm9taXNlPFJlbGF0aW9uUHJpdmFjeVNldHRpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRSZWxhdGlvblByaXZhY3lTZXR0aW5ncygpO1xuICB9XG5cbiAgcHVibGljIGdldEFydGljbGVCb3VuZFRleHRMaW5lc09mQXJ0aWNsZUxpbmUoYXJ0aWNsZUxpbmVVdWlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uTGluZUluZm9bXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRBcnRpY2xlQm91bmRUZXh0TGluZXNPZkFydGljbGVMaW5lKGFydGljbGVMaW5lVXVpZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlU2FsZXNPcmRlcihyZXF1ZXN0OiBDcmVhdGVTYWxlc09yZGVyUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPihhc3luYyAocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuX2NoZWNrQnJhbmNoKCk7XG4gICAgICBpZiAoIXRoaXMuY3VycmVudEJyYW5jaCkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KCk7XG4gICAgICB9XG4gICAgICByZXF1ZXN0LmJyYW5jaE5yID0gdGhpcy5jdXJyZW50QnJhbmNoO1xuICAgICAgdGhpcy5jb25uZWN0b3IuY3JlYXRlU2FsZXNPcmRlcihyZXF1ZXN0KS50aGVuKChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYXNoUmVnaXN0ZXJPcmRlcihyZXF1ZXN0OiBDcmVhdGVDYXNoUmVnaXN0ZXJPcmRlclJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5jcmVhdGVDYXNoUmVnaXN0ZXJPcmRlcihyZXF1ZXN0KS50aGVuKChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVQdXJjaGFzZU9yZGVyKHJlcXVlc3Q6IENyZWF0ZVB1cmNoYXNlT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KGFzeW5jIChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5fY2hlY2tCcmFuY2goKTtcbiAgICAgIGlmICghdGhpcy5jdXJyZW50QnJhbmNoKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoKTtcbiAgICAgIH1cbiAgICAgIHJlcXVlc3QuYnJhbmNoTnIgPSB0aGlzLmN1cnJlbnRCcmFuY2g7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5jcmVhdGVQdXJjaGFzZU9yZGVyKHJlcXVlc3QpLnRoZW4oKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZVNlcnZpY2VPcmRlcihyZXF1ZXN0OiBDcmVhdGVTZXJ2aWNlT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KGFzeW5jIChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5fY2hlY2tCcmFuY2goKTtcbiAgICAgIGlmICghdGhpcy5jdXJyZW50QnJhbmNoKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoKTtcbiAgICAgIH1cbiAgICAgIHJlcXVlc3QuYnJhbmNoTnIgPSB0aGlzLmN1cnJlbnRCcmFuY2g7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5jcmVhdGVTZXJ2aWNlT3JkZXIocmVxdWVzdCkudGhlbigocmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlU2FsZXNRdW90YXRpb24ocmVxdWVzdDogQ3JlYXRlU2FsZXNRdW90YXRpb25SZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0b3IuY3JlYXRlU2FsZXNRdW90YXRpb24ocmVxdWVzdCkudGhlbigocmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkUmVsYXRpb25Ub1RyYW5zYWN0aW9uKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNyZWF0ZWQ6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKCFjcmVhdGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFkZFJlbGF0aW9uVG9UcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgcmVsYXRpb25JZCk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJbk91dENvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRJbk91dENvbGxlY3Rpb24obGFuZ3VhZ2VDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUdXJub3Zlckdyb3VwcygpOiBQcm9taXNlPFR1cm5vdmVyR3JvdXBJbWFnZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuYXJ0aWNsZUNvbm5lY3Rvci5nZXRUdXJub3Zlckdyb3VwcygpO1xuICB9XG5cbiAgcHVibGljIGdldFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZXMoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZXMoZ29vZElkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXJrZXRpbmdDb2RlcygpOiBQcm9taXNlPE1hcmtldGluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldE1hcmtldGluZ0NvZGVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXJ0aWNsZXMocmVxdWVzdDogQXJ0aWNsZUV4dGVuZGVkUmVxdWVzdCk6IFByb21pc2U8QXJ0aWNsZUxpZ2h0W10+IHtcbiAgICByZXR1cm4gdGhpcy5hcnRpY2xlQ29ubmVjdG9yLnNlYXJjaEFydGljbGVzKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGdldE1haW5BcnRpY2xlcygpOiBQcm9taXNlPE1haW5BcnRpY2xlW10+IHtcbiAgICByZXR1cm4gdGhpcy5hcnRpY2xlQ29ubmVjdG9yLmdldE1haW5BcnRpY2xlcygpO1xuICB9XG5cbiAgcHVibGljIGdldERlbGl2ZXJ5TWV0aG9kcygpOiBQcm9taXNlPERlbGl2ZXJ5TWV0aG9kW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlNZXRob2RzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVsaXZlcnlPcHRpb25zKCk6IFByb21pc2U8RGVsaXZlcnlPcHRpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU9wdGlvbnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTYWxlc1BlcnNvbnMoZGF0ZT86IERhdGUpOiBQcm9taXNlPFNhbGVzUGVyc29uW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U2FsZXNQZXJzb25zKGRhdGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZEFydGljbGUoYXJ0aWNsZU5vOiBzdHJpbmcsIHF1YW50aXR5OiBudW1iZXIgPSAxLCBhYm92ZUxpbmVOcjogbnVtYmVyID0gMCwgYmVsb3dMaW5lTnI6IG51bWJlciA9IDApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjcmVhdGVkOiBib29sZWFuID0gYXdhaXQgdGhpcy5fY2hlY2tBbmRDcmVhdGVUcmFuc2FjdGlvbigpO1xuICAgIGlmICghY3JlYXRlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9XG4gICAgICBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCwgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuYWRkVHJhbnNhY3Rpb25MaW5lKFxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgYXJ0aWNsZU5vLCBxdWFudGl0eSwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yKTtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUxpbmVPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkVGV4dExpbmUoc2hvd09uRG9jdW1lbnRzOiBudW1iZXIsIHRleHQ6IHN0cmluZywgYW1vdW50OiBudW1iZXIsYXJ0aWNsZUJvdW5kOiBib29sZWFuLCByZWZBcnRpY2xlTGluZU5yOiBudW1iZXIsIGFib3ZlTGluZU5yPzogbnVtYmVyLCBiZWxvd0xpbmVOcj86IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNyZWF0ZWQ6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLl9jaGVja0FuZENyZWF0ZVRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKCFjcmVhdGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID1cbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5hZGRUZXh0TGluZVRvVHJhbnNhY3Rpb24oXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCBzaG93T25Eb2N1bWVudHMsIHRleHQsIGFtb3VudCwgYXJ0aWNsZUJvdW5kLCByZWZBcnRpY2xlTGluZU5yLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpO1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VMaW5lU2VxdWVuY2UobGluZVV1aWQ6IHN0cmluZywgYWJvdmVMaW5lTnI/OiBudW1iZXIsIGJlbG93TGluZU5yPzogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuY2hhbmdlTGluZVNlcXVlbmNlKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby51dWlkLCBsaW5lVXVpZCwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZVRyYW5zYWN0aW9uTGluZSh0cmFuc2FjdGlvblV1aWQ6IHN0cmluZywgVHJhbnNhY3Rpb25MaW5lVXVpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZGVsZXRlVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZCwgVHJhbnNhY3Rpb25MaW5lVXVpZCk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTGluZU9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGFuZ2VUcmFuc2FjdGlvbkxpbmVRdWFudGl0eSh0cmFuc2FjdGlvblV1aWQ6IHN0cmluZywgbGluZVV1aWQ6IHN0cmluZywgbmV3UXVhbnRpdHk6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KHRyYW5zYWN0aW9uVXVpZCwgbGluZVV1aWQsIG5ld1F1YW50aXR5KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMaW5lT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFJlbGF0aW9uQnlVc2VyKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLmNvbm5lY3Rvci5zZXRSZWxhdGlvbkJ5VXNlcih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZCwgdXNlcm5hbWUsIHBhc3N3b3JkKVxuICAgICAgICAudGhlbihhc3luYyAoaXNTdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShpc1N1Y2Nlc3MpO1xuICAgICAgICB9KS5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBwdWJsaWMgYXN5bmMgc2V0UmVsYXRpb25CeVVzZXIodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAvLyAgIGNvbnN0IHJlc3BvbnNlOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iuc2V0UmVsYXRpb25CeVVzZXIodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udXVpZCwgdXNlcm5hbWUsIHBhc3N3b3JkKTtcbiAgLy8gICByZXR1cm4gcmVzcG9uc2U7XG4gIC8vIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZHNSZWNlaXB0SGlzdG9yeSh0cmFuc0lkOiBudW1iZXIsIGxpbmVOcjogbnVtYmVyKTogUHJvbWlzZTxHb29kc1JlY2VpcHRIaXN0b3J5PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEdvb2RzUmVjZWlwdEhpc3RvcnkodHJhbnNJZCwgbGluZU5yKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCByZXF1ZXN0OiBSZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyUmVjZWl2ZUdvb2RzLm5leHQodHJ1ZSk7XG4gICAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5yZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJSZWNlaXZlR29vZHMubmV4dChmYWxzZSk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IHRydWU7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJDb3JyZWN0aW9uKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCByZXF1ZXN0OiBSZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyQ29ycmVjdGlvblJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlclJlY2VpdmVHb29kcy5uZXh0KHRydWUpO1xuICAgICAgbGV0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnJlY2VpdmVHb29kc0ZvclB1cmNoYXNlT3JkZXJDb3JyZWN0aW9uKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJSZWNlaXZlR29vZHMubmV4dChmYWxzZSk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IHRydWU7XG4gICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuaGFuZGxlSGVhZGVyT3BlcmF0aW9uU3RhdHVzZXMocmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCByZXF1ZXN0OiBBbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlclJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckFsbG9jYXRlR29vZHMubmV4dCh0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyKHJlcXVlc3QpO1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJBbGxvY2F0ZUdvb2RzLm5leHQoZmFsc2UpO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmhhbmRsZUhlYWRlck9wZXJhdGlvblN0YXR1c2VzKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlckNvcnJlY3Rpb24odHJhbnNhY3Rpb25JZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHJlcXVlc3Q6IEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvblJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckFsbG9jYXRlR29vZHMubmV4dCh0cnVlKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyQ29ycmVjdGlvbihyZXF1ZXN0KTtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyQWxsb2NhdGVHb29kcy5uZXh0KGZhbHNlKTtcbiAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5oYW5kbGVIZWFkZXJPcGVyYXRpb25TdGF0dXNlcyhyZXNwb25zZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbih0cmFuc2FjdGlvbklkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbjogR2V0UHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTtcbiAgICBpZiAobG9ja1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdQdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uLm5leHQodHJ1ZSk7XG4gICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnB1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ocHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbik7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLl9jaGVja1B1cmNoYXNlT3JkZXJDb25maXJtYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlUHVyY2hhc2VQb3J0YWxMaW5lcyh0cmFuc2FjdGlvbklkOiBudW1iZXIsIHZlcnNpb246IG51bWJlciwgcHVyY2hhc2VQb3J0YWxMaW5lOiBQdXJjaGFzZVBvcnRhbExpbmUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2NrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgdmVyc2lvbik7XG4gICAgaWYgKGxvY2tTdWNjZXNzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nUHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbi5uZXh0KHRydWUpO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci51cGRhdGVQdXJjaGFzZVBvcnRhbExpbmVzKHB1cmNoYXNlUG9ydGFsTGluZSk7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLl9jaGVja1B1cmNoYXNlT3JkZXJDb25maXJtYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1B1cmNoYXNlT3JkZXJDb25maXJtYXRpb24ubmV4dChmYWxzZSk7XG4gICAgICByZXR1cm4gc3VjY2VzcztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VGV4dFR5cGVzKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VGV4dFR5cGVzKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhbmRhcmRUZXh0cyhsYW5ndWFnZUNvZGU6IHN0cmluZyk6IFByb21pc2U8U3RhbmRhcmRUZXh0W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0U3RhbmRhcmRUZXh0cyhsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQpO1xuICB9XG5cbiAgcHVibGljIGdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1OiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q291bnRyeShjb3VudHJ5Q29kZTogc3RyaW5nKTogUHJvbWlzZTxDb3VudHJ5PiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmdldENvdW50cnkoY291bnRyeUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGdldENhc2hSZWdpc3RlcnMoYnJhbmNoPzogc3RyaW5nLCBncm91cD86IG51bWJlcik6IFByb21pc2U8Q2FzaFJlZ2lzdGVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0Q2FzaFJlZ2lzdGVycyhicmFuY2gsIGdyb3VwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmljZUxpc3RzKCk6IFByb21pc2U8UHJpY2VMaXN0W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0UHJpY2VMaXN0cygpO1xuICB9XG5cbiAgcHVibGljIGdldFZhdExpc3RzKCk6IFByb21pc2U8VmF0W10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VmF0TGlzdCgpO1xuICB9XG5cbiAgcHVibGljIGdldFRyYW5zVmF0Q29kZXModHlwZTogc3RyaW5nLCBkYXRlOiBEYXRlKTogUHJvbWlzZTxWYXRbXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc1ZhdENvZGVzKHR5cGUsIGRhdGUpO1xuICB9XG5cbiAgcHVibGljIGdldFRhZ3MoY2F0ZWdvcnk6IG51bWJlcik6IFByb21pc2U8VGFnW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0VGFncyhjYXRlZ29yeSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0T25Ib2xkQ29kZXMoKTogUHJvbWlzZTxPbkhvbGRDb2RlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0T25Ib2xkQ29kZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRXYXJlaG91c2VzKCk6IFByb21pc2U8V2FyZWhvdXNlW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0V2FyZWhvdXNlcyh0aGlzLmN1cnJlbnRCcmFuY2gpO1xuICB9XG5cbiAgcHVibGljIGdldEhpc3RvcmljU3RhdGVWYWx1ZXMoKTogUHJvbWlzZTxDb2RlRGVzY3JpcHRpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5nZXRIaXN0b3JpY1N0YXRlVmFsdWVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VzdG9tZXJHcm91cHMoKTogUHJvbWlzZTxDdXN0b21lckdyb3VwW10+IHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IuZ2V0Q3VzdG9tZXJHcm91cHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2NrUHVyY2hhc2VQb3J0YWxMaW5lcyh0cmFuc0lkUHVyY2hhc2U6IG51bWJlciwgbGluZUlkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IubG9ja1B1cmNoYXNlUG9ydGFsTGluZXModHJhbnNJZFB1cmNoYXNlLCBsaW5lSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEF2YWlsYWJsZVN0b2NrR3JvdXBlZEJ5V0xCU0J5VHJhbnNJZExpbmVOcih0cmFuc0lkOiBudW1iZXIsIGxpbmVOcjogbnVtYmVyKTogUHJvbWlzZTxBdmFpbGFibGVTdG9ja1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEF2YWlsYWJsZVN0b2NrR3JvdXBlZEJ5V0xCU0J5VHJhbnNJZExpbmVOcih0cmFuc0lkLCBsaW5lTnIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEdvb2RzQWxsb2NhdGlvbkhpc3RvcnkodHJhbnNJZDogbnVtYmVyLCBsaW5lTnI6IG51bWJlcik6IFByb21pc2U8R29vZHNBbGxvY2F0aW9uSGlzdG9yeT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRHb29kc0FsbG9jYXRpb25IaXN0b3J5KHRyYW5zSWQsIGxpbmVOcik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0T3JkZXJDb25maXJtYXRpb25FbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0T3JkZXJDb25maXJtYXRpb25FbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRPcmRlckNvbmZpcm1hdGlvblByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQ6IHN0cmluZyk6IFByb21pc2U8UmVwb3J0TGF5b3V0U2VsZWN0aW9uUHJpbnRbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRPcmRlckNvbmZpcm1hdGlvblByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE9yZGVyQ29uZmlybWF0aW9uRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0T3JkZXJDb25maXJtYXRpb25EZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWZhdWx0RW1haWxBZGRyZXNzTGlzdEZvck9yZGVyQ29uZmlybWF0aW9uKHRyYW5zYWN0aW9uVVVJRCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVmYXVsdEVtYWlsQWRkcmVzc0xpc3RGb3JPcmRlckNvbmZpcm1hdGlvbih0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50T3JkZXJDb25maXJtYXRpb24ocmVxdWVzdDogUHJpbnRPcmRlckNvbmZpcm1hdGlvblJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRPcmRlckNvbmZpcm1hdGlvbihyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbE9yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3Q6IEVtYWlsT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGRmT3JkZXJDb25maXJtYXRpb24ocmVxdWVzdDogUGRmT3JkZXJDb25maXJtYXRpb25SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLnBkZk9yZGVyQ29uZmlybWF0aW9uKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByaW50UHVyY2hhc2VPcmRlcihyZXF1ZXN0OiBQcmludFB1cmNoYXNlT3JkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLnByaW50UHVyY2hhc2VPcmRlcihyZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbWFpbFB1cmNoYXNlT3JkZXIocmVxdWVzdDogRW1haWxQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbFB1cmNoYXNlT3JkZXIocmVxdWVzdCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGRmUHVyY2hhc2VPcmRlcihyZXF1ZXN0OiBQZGZQdXJjaGFzZU9yZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wZGZQdXJjaGFzZU9yZGVyKHJlcXVlc3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlT3JkZXJFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VPcmRlckVtYWlsTGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlT3JkZXJQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VPcmRlclByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlT3JkZXJEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQdXJjaGFzZU9yZGVyRGVmYXVsdFNlbmRNZXRob2QocmVsYXRpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGVBbmRTZW5kUHVyY2hhc2VPcmRlcnNGb3JTYWxlc09yZGVyKHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgbG9ja1N1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLnRyeVRvTG9ja1RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pO1xuICAgIGlmIChsb2NrU3VjY2Vzcykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJHZW5lcmF0ZVB1cmNoYXNlT3JkZXJzLm5leHQodHJ1ZSk7XG4gICAgICAvLyBnZXQgbGluZU51bWJlcnNcbiAgICAgIGNvbnN0IGxpbmVOdW1iZXJzOiBudW1iZXJbXSA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKGwgPT4gbC5zZWxlY3RlZCkubWFwKGwgPT4gbC5saW5lTnIpO1xuICAgICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZW5lcmF0ZUFuZFNlbmRQdXJjaGFzZU9yZGVyc0ZvclNhbGVzT3JkZXIodHJhbnNhY3Rpb25JZCwgbGluZU51bWJlcnMpO1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodHJhbnNhY3Rpb25JZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyR2VuZXJhdGVQdXJjaGFzZU9yZGVycy5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQdXJjaGFzZUFkdmljZUxpbmVzKGZpbHRlcnM6IFB1cmNoYXNlQWR2aWNlRmlsdGVycywgZ29vZElkPzogbnVtYmVyKTogUHJvbWlzZTxQdXJjaGFzZUFkdmljZUxpbmVbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQdXJjaGFzZUFkdmljZUxpbmVzKGZpbHRlcnMsIGdvb2RJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuZXJhdGVBbmRTZW5kUHVyY2hhc2VPcmRlcnMocHVyY2hhc2VBZHZpY2VMaW5lczogUHVyY2hhc2VBZHZpY2VMaW5lW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2VuZXJhdGVBbmRTZW5kUHVyY2hhc2VPcmRlcnMocHVyY2hhc2VBZHZpY2VMaW5lcyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZW1haWxEZWxpdmVyeU5vdGUoZW1haWxEZWxpdmVyeU5vdGVSZXF1ZXN0OiBFbWFpbERlbGl2ZXJ5Tm90ZVJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckRlbGl2ZXJ5Lm5leHQodHJ1ZSk7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5lbWFpbERlbGl2ZXJ5Tm90ZShlbWFpbERlbGl2ZXJ5Tm90ZVJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJEZWxpdmVyeS5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwZGZEZWxpdmVyeU5vdGUocGRmRGVsaXZlcnlOb3RlUmVxdWVzdDogUGRmRGVsaXZlcnlOb3RlUmVxdWVzdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyRGVsaXZlcnkubmV4dCh0cnVlKTtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnBkZkRlbGl2ZXJ5Tm90ZShwZGZEZWxpdmVyeU5vdGVSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdTYWxlc09yZGVyRGVsaXZlcnkubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJpbnREZWxpdmVyeU5vdGUocHJpbnREZWxpdmVyeU5vdGVSZXF1ZXN0OiBQcmludERlbGl2ZXJ5Tm90ZVJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nU2FsZXNPcmRlckRlbGl2ZXJ5Lm5leHQodHJ1ZSk7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5wcmludERlbGl2ZXJ5Tm90ZShwcmludERlbGl2ZXJ5Tm90ZVJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ1NhbGVzT3JkZXJEZWxpdmVyeS5uZXh0KGZhbHNlKTtcbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWxpdmVyeU5vdGVEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXREZWxpdmVyeU5vdGVEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZWxpdmVyeU5vdGVFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEOiBzdHJpbmcpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvbkVtYWlsW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0RGVsaXZlcnlOb3RlRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVsaXZlcnlOb3RlUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlbGl2ZXJ5Tm90ZVByaW50TGF5b3V0cyh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9ySW52b2ljZSh0cmFuc2FjdGlvblVVSUQpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldERlZmF1bHRFbWFpbEFkZHJlc3NMaXN0Rm9ySW52b2ljZSh0cmFuc2FjdGlvblVVSUQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGVtYWlsSW52b2ljZShlbWFpbEludm9pY2VSZXF1ZXN0OiBFbWFpbEludm9pY2VSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ0ludm9pY2UubmV4dCh0cnVlKTtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmVtYWlsSW52b2ljZShlbWFpbEludm9pY2VSZXF1ZXN0KTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudXBkYXRpbmdJbnZvaWNlLm5leHQoZmFsc2UpO1xuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHBkZkludm9pY2UocGRmSW52b2ljZVJlcXVlc3Q6IFBkZkludm9pY2VSZXF1ZXN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ0ludm9pY2UubmV4dCh0cnVlKTtcbiAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnBkZkludm9pY2UocGRmSW52b2ljZVJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ0ludm9pY2UubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJpbnRJbnZvaWNlKHByaW50SW52b2ljZVJlcXVlc3Q6IFByaW50SW52b2ljZVJlcXVlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnVwZGF0aW5nSW52b2ljZS5uZXh0KHRydWUpO1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3IucHJpbnRJbnZvaWNlKHByaW50SW52b2ljZVJlcXVlc3QpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5jb21taXQoKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS51cGRhdGluZ0ludm9pY2UubmV4dChmYWxzZSk7XG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICAvLyBwdWJsaWMgYXN5bmMgZ2V0SW52b2ljZURlZmF1bHRTZW5kTWV0aG9kKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gIC8vICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEludm9pY2VEZWZhdWx0U2VuZE1ldGhvZChyZWxhdGlvbklkKTtcbiAgLy8gfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJbnZvaWNlRW1haWxMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25FbWFpbFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEludm9pY2VFbWFpbExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJbnZvaWNlUHJpbnRMYXlvdXRzKHRyYW5zYWN0aW9uVVVJRDogc3RyaW5nKTogUHJvbWlzZTxSZXBvcnRMYXlvdXRTZWxlY3Rpb25QcmludFtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldEludm9pY2VQcmludExheW91dHModHJhbnNhY3Rpb25VVUlEKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQYWNrYWdlU3RpY2tlclByaW50TGF5b3V0cygpOiBQcm9taXNlPFJlcG9ydExheW91dFNlbGVjdGlvblByaW50W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UGFja2FnZVN0aWNrZXJQcmludExheW91dHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcmludGVycygpOiBQcm9taXNlPFByaW50ZXJbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRQcmludGVycygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEN1cnJlbmNpZXMoYWN0aXZlOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8Q3VycmVuY3lbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRDdXJyZW5jaWVzKGFjdGl2ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UGF5bWVudENvbmRpdGlvbnMobmFtZT86IHN0cmluZyk6IFByb21pc2U8UGF5bWVudENvbmRpdGlvbltdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFBheW1lbnRDb25kaXRpb25zKG5hbWUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEpvaW5lZFRhZ3ModGFibGU6IHN0cmluZywga2V5OiBzdHJpbmcpOiBQcm9taXNlPFRhZ1RyZWVJdGVtW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0Sm9pbmVkVGFncyh0YWJsZSwga2V5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRJbnRlcm5hbFBhcmFtZXRlcihwYXJhbTogSW50ZXJuYWxQYXJhbSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRJbnRlcm5hbFBhcmFtZXRlclZhbHVlKHBhcmFtKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRIaXN0b3JpY0RvY3VtZW50cyh0cmFuc0lkOiBudW1iZXIsIGRvY3VtZW50Q29kZTogTGF5b3V0Q29kZSk6IFByb21pc2U8SGlzdG9yaWNSZXBvcnRbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRIaXN0b3JpY0RvY3VtZW50cyh0cmFuc0lkLCBkb2N1bWVudENvZGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhhbmRsZVJlY2VpdmVTZWxlY3RlZFB1cmNoYXNlT3JkZXJzKGRhdGU6IERhdGUsIHBhY2tpbmdTbGlwTnI6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHNlbGVjdGVkTGluZXM6IFRyYW5zYWN0aW9uTGluZUluZm9bXSA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnNlbGVjdGVkICYmIGxpbmUuYXJ0aWNsZUxpbmVTdGF0dXMucXVhbnRpdHlUb1JlY2VpdmUgPiAwKTtcbiAgICBpZiAoc2VsZWN0ZWRMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZWNlaXZlZEdvb2RzUmVxdWVzdDogUmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlclJlcXVlc3QgPSBuZXcgUmVjZWl2ZUdvb2RzRm9yUHVyY2hhc2VPcmRlclJlcXVlc3QoKTtcbiAgICAgIHJlY2VpdmVkR29vZHNSZXF1ZXN0LnRyYW5zSWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQ7XG4gICAgICByZWNlaXZlZEdvb2RzUmVxdWVzdC5yZWNlaXZlZERhdGUgPSBkYXRlO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3QucGFja2luZ1NsaXBOciA9IHBhY2tpbmdTbGlwTnI7XG4gICAgICByZWNlaXZlZEdvb2RzUmVxdWVzdC5wcmludGVyTmFtZSA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5wcmludGVyTmFtZTtcbiAgICAgIHJlY2VpdmVkR29vZHNSZXF1ZXN0LnJlcG9ydElkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlcG9ydElkO1xuICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3Quc2F2ZURlZmF1bHRQcmludGVyRm9yQWxsVXNlcnMgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uc2F2ZURlZmF1bHRQcmludGVyRm9yQWxsVXNlcnM7XG4gICAgICByZWNlaXZlZEdvb2RzUmVxdWVzdC5zYXZlRGVmYXVsdFByaW50ZXJGb3JVc2VyID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnNhdmVEZWZhdWx0UHJpbnRlckZvclVzZXI7XG4gICAgICByZWNlaXZlZEdvb2RzUmVxdWVzdC5wdXJjaGFzZU9yZGVyTGluZVJlY2VpcHREZXRhaWxzRFRPUyA9IFtdO1xuICAgICAgc2VsZWN0ZWRMaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldGFpbDogUHVyY2hhc2VPcmRlckxpbmVSZWNlaXB0RGV0YWlscyA9IG5ldyBQdXJjaGFzZU9yZGVyTGluZVJlY2VpcHREZXRhaWxzKCk7XG4gICAgICAgIGRldGFpbC5saW5lTnIgPSBsaW5lLmxpbmVOcjtcbiAgICAgICAgZGV0YWlsLnF1YW50aXR5VG9SZWNlaXZlID0gbGluZS5hcnRpY2xlTGluZVN0YXR1cy5xdWFudGl0eVRvUmVjZWl2ZTtcbiAgICAgICAgZGV0YWlsLndhcmVob3VzZU5yID0gbGluZS53YXJlaG91c2VOdW1iZXI7XG4gICAgICAgIGRldGFpbC5sb2NhdGlvbk5yID0gbGluZS5sb2NhdGlvbk5yO1xuICAgICAgICBkZXRhaWwubnVtYmVyT2ZTdGlja2VycyA9IGxpbmUuc3RpY2tlckFtb3VudDtcbiAgICAgICAgZGV0YWlsLnByaW50ZXJOYW1lID0gbGluZS5wcmludGVyTmFtZTtcbiAgICAgICAgZGV0YWlsLnJlcG9ydElkID0gbGluZS5yZXBvcnRJZDtcbiAgICAgICAgcmVjZWl2ZWRHb29kc1JlcXVlc3QucHVyY2hhc2VPcmRlckxpbmVSZWNlaXB0RGV0YWlsc0RUT1MucHVzaChkZXRhaWwpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5yZWNlaXZlR29vZHNGb3JQdXJjaGFzZU9yZGVyKFxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uLCByZWNlaXZlZEdvb2RzUmVxdWVzdCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGVBbGxvY2F0ZVNlbGVjdGVkUHVyY2hhc2VPcmRlcnMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRMaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mb1tdID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcy5maWx0ZXIoKGxpbmUpID0+IGxpbmUuc2VsZWN0ZWQgJiYgbGluZS5xdWFudGl0eVRvQWxsb2NhdGUgPiAwKTtcbiAgICBpZiAoc2VsZWN0ZWRMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBhbGxvY2F0ZUdvb2RzUmVxdWVzdDogQWxsb2NhdGVHb29kc0ZvclNhbGVzT3JkZXJSZXF1ZXN0ID0gbmV3IEFsbG9jYXRlR29vZHNGb3JTYWxlc09yZGVyUmVxdWVzdCgpO1xuICAgICAgYWxsb2NhdGVHb29kc1JlcXVlc3QudHJhbnNJZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZDtcbiAgICAgIGFsbG9jYXRlR29vZHNSZXF1ZXN0LnNhbGVzT3JkZXJMaW5lQWxsb2NhdGlvbkRldGFpbHNEVE9TID0gW107XG4gICAgICBzZWxlY3RlZExpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgY29uc3QgZGV0YWlsOiBTYWxlc09yZGVyTGluZUFsbG9jYXRpb25EZXRhaWxzID0gbmV3IFNhbGVzT3JkZXJMaW5lQWxsb2NhdGlvbkRldGFpbHMoKTtcbiAgICAgICAgZGV0YWlsLmxpbmVOciA9IGxpbmUubGluZU5yO1xuICAgICAgICBkZXRhaWwucXVhbnRpdHlUb0FsbG9jYXRlID0gbGluZS5xdWFudGl0eVRvQWxsb2NhdGU7XG4gICAgICAgIGRldGFpbC53YXJlaG91c2VOciA9IGxpbmUud2FyZWhvdXNlTnVtYmVyO1xuICAgICAgICBkZXRhaWwubG9jYXRpb25OciA9IGxpbmUubG9jYXRpb25OcjtcbiAgICAgICAgYWxsb2NhdGVHb29kc1JlcXVlc3Quc2FsZXNPcmRlckxpbmVBbGxvY2F0aW9uRGV0YWlsc0RUT1MucHVzaChkZXRhaWwpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5hbGxvY2F0ZUdvb2RzRm9yU2FsZXNPcmRlcihcbiAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbiwgYWxsb2NhdGVHb29kc1JlcXVlc3QpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0UHVyY2hhc2VPcmRlckZvclRyYW5zYWN0aW9uTGluZSh0cmFuc0lkOiBudW1iZXIsIHRyYW5zTGluZTogVHJhbnNhY3Rpb25MaW5lSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuZ2V0VHJhbnNhY3Rpb25JbmZvKHRyYW5zSWQsIHRyYW5zTGluZS5saW5lTnIpLnRoZW4oKHRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25JbmZvSGlzdG9yeVtdKSA9PiB7XG4gICAgICAgIGlmICh0cmFuc2FjdGlvbnMgJiYgdHJhbnNhY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0cmFuc0xpbmUucHVyY2hhc2VPcmRlcklkID0gdHJhbnNhY3Rpb25zWzBdLnRyYW5zSWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBfaGFuZGxlQWZ0ZXJSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5faXNWYWxpZFRyYW5zYWN0aW9uKCkpIHtcbiAgICAgIGNvbnN0IGhhc0RlcG9zaXRBbW91bnRCZWVuUmVjYWxjdWxhdGVkOiBib29sZWFuID0gdHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UudHJhbnNhY3Rpb25Ub3RhbC5oYXNEZXBvc2l0QW1vdW50QmVlblJlY2FsY3VsYXRlZDtcbiAgICAgIGNvbnN0IGhhc0RlcG9zaXRSdWxlOiBib29sZWFuID0gdHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UudHJhbnNhY3Rpb25Ub3RhbC5oYXNEZXBvc2l0UnVsZTtcbiAgICAgIGlmIChoYXNEZXBvc2l0QW1vdW50QmVlblJlY2FsY3VsYXRlZCkge1xuICAgICAgICBjb25zdCBkZXBvc2l0QW1vdW50VHJhbnNhY3Rpb246IG51bWJlciA9IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLnRyYW5zYWN0aW9uSW5mby5kZXBvc2l0QW1vdW50O1xuICAgICAgICBpZiAoaGFzRGVwb3NpdFJ1bGUpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVCdXNpbmVzc1J1bGVEZXBvc2l0QW1vdW50KHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCBkZXBvc2l0QW1vdW50VHJhbnNhY3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZUJ1c2luZXNzUnVsZURlcG9zaXRQZXJjZW50YWdlQW1vdW50KHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCBkZXBvc2l0QW1vdW50VHJhbnNhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlQnVzaW5lc3NSdWxlRGVwb3NpdFBlcmNlbnRhZ2VBbW91bnQodHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCBkZXBvc2l0QW1vdW50VHJhbnNhY3Rpb246IG51bWJlcikge1xuICAgIGNvbnN0IGRlcG9zaXRQZXJjZW50YWdlVHJhbnNhY3Rpb246IG51bWJlciA9IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLnRyYW5zYWN0aW9uSW5mby5kZXBvc2l0UGVyY2VudGFnZTtcbiAgICBjb25zdCBkZXBvc2l0QW1vdW50QnlQZXJjZW50YWdlOiBudW1iZXIgPSB0cmFuc2FjdGlvbkluZm9SZXNwb25zZS50cmFuc2FjdGlvblRvdGFsLmRlcG9zaXRBbW91bnRCeVBlcmNlbnRhZ2U7XG4gICAgaWYgKGRlcG9zaXRQZXJjZW50YWdlVHJhbnNhY3Rpb24gJiYgZGVwb3NpdEFtb3VudEJ5UGVyY2VudGFnZSAhPT0gZGVwb3NpdEFtb3VudFRyYW5zYWN0aW9uKSB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy5fdXNlckRlY2lzaW9uU2hvdWxkRGVwb3NpdFJlY2FsY3VsYXRpb24oKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVwb3NpdFBlcmNlbnRhZ2UodHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UudHJhbnNhY3Rpb25JbmZvLnV1aWQsIGRlcG9zaXRQZXJjZW50YWdlVHJhbnNhY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2hhbmRsZUJ1c2luZXNzUnVsZURlcG9zaXRBbW91bnQodHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLCBkZXBvc2l0QW1vdW50VHJhbnNhY3Rpb246IG51bWJlcikge1xuICAgIGNvbnN0IGRlcG9zaXRBbW91bnRCeURlcG9zaXRCdXNpbmVzc1J1bGU6IG51bWJlciA9IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLnRyYW5zYWN0aW9uVG90YWwuZGVwb3NpdEFtb3VudEJ5RGVwb3NpdEJ1c2luZXNzUnVsZTtcbiAgICBpZiAoZGVwb3NpdEFtb3VudEJ5RGVwb3NpdEJ1c2luZXNzUnVsZSAhPT0gZGVwb3NpdEFtb3VudFRyYW5zYWN0aW9uKSB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy5fdXNlckRlY2lzaW9uU2hvdWxkRGVwb3NpdFJlY2FsY3VsYXRpb24oKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVwb3NpdEFtb3VudCh0cmFuc2FjdGlvbkluZm9SZXNwb25zZS50cmFuc2FjdGlvbkluZm8udXVpZCwgZGVwb3NpdEFtb3VudEJ5RGVwb3NpdEJ1c2luZXNzUnVsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfdXNlckRlY2lzaW9uU2hvdWxkRGVwb3NpdFJlY2FsY3VsYXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLl9kb250QXNrRm9yUmVjYWxjdWxhdGlvbkRlcG9zaXQpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBEaWFsb2dSZXNwb25zZUludGVyZmFjZSA9IGF3YWl0IHRoaXMuZGlhbG9nU2VydmljZS5zaG93WWVzTm8oJ0RFUE9TSVRfUkVDQUxDVUxBVEUnLCAnUkVDQUxDVUxBVEVfREVQT1NJVF9BTU9VTlQnLCB0cnVlKTtcbiAgICAgIHRoaXMuX2Fuc3dlclJlY2FsY3VsYXRpb25EZXBvc2l0ID0gcmVzcG9uc2UuYnV0dG9uID09PSBBcHBQb3B1cEJ1dHRvblR5cGUuWWVzO1xuICAgICAgdGhpcy5fZG9udEFza0ZvclJlY2FsY3VsYXRpb25EZXBvc2l0ID0gcmVzcG9uc2UucmVtZW1iZXJDaG9pY2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hbnN3ZXJSZWNhbGN1bGF0aW9uRGVwb3NpdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2NoZWNrQW5kQ3JlYXRlVHJhbnNhY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiB8fCAhdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvIHx8ICF0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25Ocikge1xuICAgICAgY29uc3QgY3JlYXRlTWV0aG9kOiBDcmVhdGVUcmFuc2FjdGlvbkZuID0gdGhpcy5fY3JlYXRlVHJhbnNhY3Rpb25NZXRob2RzLmdldCh0aGlzLnRyYW5zYWN0aW9uS2luZCk7XG4gICAgICBpZiAoY3JlYXRlTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0OiBDcmVhdGVUcmFuc2FjdGlvblJlcXVlc3QgPSBuZXcgQ3JlYXRlVHJhbnNhY3Rpb25SZXF1ZXN0KCk7XG4gICAgICAgICAgY3JlYXRlTWV0aG9kKHJlcXVlc3QpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93RXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIHRyYW5zYWN0aW9uXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2NoZWNrQnJhbmNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jdXJyZW50QnJhbmNoKSB7XG4gICAgICBjb25zdCByZXNwb25zZTogRGlhbG9nUmVzcG9uc2VJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0JyYW5jaCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbik7XG4gICAgICBpZiAocmVzcG9uc2UuYnV0dG9uICE9PSBBcHBQb3B1cEJ1dHRvblR5cGUuQ2FuY2VsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEJyYW5jaCA9IHJlc3BvbnNlLm91dHB1dCA/IHJlc3BvbnNlLm91dHB1dC50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|