@colijnit/transaction 12.1.185 → 12.1.187
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 +320 -217
- package/bundles/colijnit-transaction.umd.js.map +1 -1
- package/colijnit-transaction.d.ts +177 -175
- package/colijnit-transaction.metadata.json +1 -1
- package/esm2015/colijnit-transaction.js +178 -176
- package/esm2015/lib/component/add-product/add-product.component.js +7 -2
- package/esm2015/lib/component/avatar/avatar.component.js +2 -2
- package/esm2015/lib/component/core/base/transaction-payment-base.component.js +1 -1
- package/esm2015/lib/component/dialog/catalog/dialog-catalog/dialog-catalog.component.js +3 -3
- package/esm2015/lib/component/payment-qr-code/payment-qr-code.component.js +1 -1
- package/esm2015/lib/component/payment-qr-code/payment-qr-code.module.js +6 -6
- package/esm2015/lib/component/payment-to-pay/payment-to-pay.component.js +2 -2
- package/esm2015/lib/component/shared/transaction-article-text/transaction-article-text.component.js +3 -2
- package/esm2015/lib/component/transaction/transaction.component.js +1 -1
- package/esm2015/lib/component/transaction-button-bar/transaction-button-bar-button/transaction-sales-picking-button-bar-button.component.js +3 -1
- package/esm2015/lib/component/transaction-button-bar/transaction-button-bar.component.js +1 -16
- package/esm2015/lib/component/transaction-card/transaction-card-header/transaction-card-header.component.js +1 -1
- package/esm2015/lib/component/transaction-card/transaction-card-order-delivery/transaction-card-order-delivery.component.js +1 -1
- package/esm2015/lib/component/transaction-cash-register-dialog/transaction-cash-register-dialog.component.js +3 -3
- package/esm2015/lib/component/transaction-cash-register-dialog/transaction-cash-register-dialog.module.js +5 -5
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/components/transaction-cash-register-payment-buttons.component.js +2 -2
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/components/transaction-cash-register-payment-buttons.module.js +5 -5
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/components/transaction-cash-register-payment-cash.module.js +8 -8
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/components/transaction-cash-register-payment-done.component.js +4 -4
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/components/transaction-cash-register-payment-method.component.js +5 -5
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/components/transaction-cash-register-payment-pin.component.js +1 -1
- package/esm2015/lib/component/transaction-copy-order/transaction-copy-order.component.js +13 -13
- package/esm2015/lib/component/transaction-internal/transaction-internal.component.js +8 -5
- package/esm2015/lib/component/transaction-line-side-panel-planning/transaction-line-side-panel-planning.component.js +63 -54
- package/esm2015/lib/component/transaction-lines-side-panel/transaction-lines-side-panel/transaction-lines-side-panel.component.js +1 -1
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access/transaction-quick-access.module.js +4 -2
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-planning/transaction-quick-access-planning.component.js +67 -0
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-planning/transaction-quick-access-planning.module.js +35 -0
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-sales-quotation/transaction-quick-access-sales-quotation.component.js +22 -22
- package/esm2015/lib/component/transaction-search/transaction-filter-content/sales-quotation-filter-content/transaction-sales-quotation-filter-content-order/transaction-sales-quotation-filter-content-order.component.js +1 -1
- package/esm2015/lib/service/transaction-base.service.js +2 -5
- package/esm2015/lib/service/transaction-connector-adapter.service.js +3 -3
- package/esm2015/lib/service/transaction-connector.service.js +1 -1
- package/esm2015/lib/service/transaction-mapping.service.js +3 -1
- package/esm2015/lib/service/transaction.service.js +1 -1
- package/esm2015/lib/transaction-version.js +3 -3
- package/fesm2015/colijnit-transaction.js +169 -86
- package/fesm2015/colijnit-transaction.js.map +1 -1
- package/lib/component/add-product/add-product.component.d.ts +1 -0
- package/lib/component/dialog/catalog/dialog-catalog/dialog-catalog.component.d.ts +5 -1
- package/lib/component/transaction-button-bar/transaction-button-bar.component.d.ts +0 -3
- package/lib/component/transaction-card/transaction-card-header/transaction-card-header.component.d.ts +1 -1
- package/lib/component/transaction-cash-register-dialog/transaction-cash-register-dialog.component.d.ts +6 -6
- package/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/components/transaction-cash-register-payment-buttons.component.d.ts +1 -1
- package/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/components/transaction-cash-register-payment-done.component.d.ts +2 -2
- package/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/components/transaction-cash-register-payment-method.component.d.ts +5 -5
- package/lib/component/transaction-copy-order/transaction-copy-order.component.d.ts +14 -14
- package/lib/component/transaction-line-side-panel-planning/style/_layout.scss +47 -5
- package/lib/component/transaction-line-side-panel-planning/style/_material-definition.scss +6 -0
- package/lib/component/transaction-line-side-panel-planning/transaction-line-side-panel-planning.component.d.ts +3 -2
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel/style/_layout.scss +2 -1
- package/lib/component/transaction-lines-side-panel/transaction-lines-side-panel/style/_material-definition.scss +1 -1
- package/lib/component/transaction-quick-access/transaction-quick-access-planning/style/_layout.scss +27 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-planning/style/_material-definition.scss +3 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-planning/style/_theme.scss +6 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-planning/style/material.scss +4 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-planning/transaction-quick-access-planning.component.d.ts +28 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-planning/transaction-quick-access-planning.module.d.ts +2 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-sales-quotation/transaction-quick-access-sales-quotation.component.d.ts +16 -16
- package/lib/service/transaction-base.service.d.ts +0 -2
- package/lib/service/transaction-connector-adapter.service.d.ts +2 -2
- package/lib/service/transaction-connector.service.d.ts +2 -2
- package/package.json +5 -5
- package/esm2015/lib/model/payment-transaction-view-model.js +0 -3
- package/lib/model/payment-transaction-view-model.d.ts +0 -12
|
@@ -83,7 +83,6 @@ export class TransactionBaseService extends BaseModuleService {
|
|
|
83
83
|
// not being used at the moment, so it should be false
|
|
84
84
|
this._readonly = false;
|
|
85
85
|
this._activeRubric = TransactionTypeCategory.SalesOrderOverview;
|
|
86
|
-
this._transactionKind = TransactionKind.SalesOrder;
|
|
87
86
|
this._relation = new Relation();
|
|
88
87
|
this._purchaseOrdersCompleted = false;
|
|
89
88
|
this._receiveGoodsCompleted = false;
|
|
@@ -97,8 +96,6 @@ export class TransactionBaseService extends BaseModuleService {
|
|
|
97
96
|
this._alreadyLocked = false;
|
|
98
97
|
this._transactionDirty = false;
|
|
99
98
|
this._salesOrderConfirmationSent = false;
|
|
100
|
-
this._answerRecalculationDeposit = false;
|
|
101
|
-
this._dontAskForRecalculationDeposit = false;
|
|
102
99
|
}
|
|
103
100
|
set activeRubric(value) {
|
|
104
101
|
this._activeRubric = value;
|
|
@@ -120,8 +117,8 @@ export class TransactionBaseService extends BaseModuleService {
|
|
|
120
117
|
if (this._transactionKind !== value) {
|
|
121
118
|
this._transactionKind = value;
|
|
122
119
|
this.activeRubric = this._defaultActiveRubricFromTransactionKind.get(value);
|
|
120
|
+
this.transactionKindSet.next(true);
|
|
123
121
|
}
|
|
124
|
-
this.transactionKindSet.next(true);
|
|
125
122
|
}
|
|
126
123
|
get transactionKind() {
|
|
127
124
|
return this._transactionKind;
|
|
@@ -542,4 +539,4 @@ TransactionBaseService.ctorParameters = () => [
|
|
|
542
539
|
{ type: RelationService },
|
|
543
540
|
{ type: TransactionScreenConfigurationService }
|
|
544
541
|
];
|
|
545
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJhbnNhY3Rpb24vc3JjL2xpYi9zZXJ2aWNlL3RyYW5zYWN0aW9uLWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxtRUFBbUUsQ0FBQztBQUMxRyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDMUYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQzVGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBQ25HLE9BQU8sRUFBc0IseUJBQXlCLEVBQUMsTUFBTSwrREFBK0QsQ0FB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QUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUM7U0FDbEk7SUFDSCxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQjtZQUM1RSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsZUFBZSxLQUFLLGVBQWUsQ0FBQyxhQUFhO2dCQUN4RixJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLGVBQWUsS0FBSyxlQUFlLENBQUMsVUFBVTtnQkFDdEYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7OztZQWppQkYsVUFBVTs7O1lBakNILDBCQUEwQjtZQUMxQixhQUFhO1lBQ2IsMkJBQTJCO1lBQzNCLHVCQUF1QjtZQUN2QixpQkFBaUI7WUFDakIsdUJBQXVCO1lBQ3ZCLGVBQWU7WUF1QmYscUNBQXFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc2FjdGlvbkxvY2tSZXN1bHR9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1sb2NrLXJlc3VsdC5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25TZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4vdHJhbnNhY3Rpb24tc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnLi9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25Db25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuL3RyYW5zYWN0aW9uLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtBcnRpY2xlQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi9hcnRpY2xlLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSAnLi9kaWN0aW9uYXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlfSBmcm9tICcuL3RyYW5zYWN0aW9uLWV2ZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlbGF0aW9uU2VydmljZX0gZnJvbSAnLi9yZWxhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8tcmVzcG9uc2UuYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uS2luZH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vdHJhbnNhY3Rpb24ta2luZC5lbnVtJztcclxuaW1wb3J0IHtSZWxhdGlvbn0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLmJvJztcclxuaW1wb3J0IHtDdXN0b21lckZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9jdXN0b21lci1mdWxsLW9iamVjdC5ibyc7XHJcbmltcG9ydCB7U3VwcGxpZXJGdWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvc3VwcGxpZXItZnVsbC1vYmplY3QuYm8nO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7UHVyY2hhc2VQb3J0YWxMaW5lfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcHVyY2hhc2UtcG9ydGFsLWxpbmUuYm8nO1xyXG5pbXBvcnQge0RvY0RlbGl2ZXJ5QmF0Y2h9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kb2MtZGVsaXZlcnktYmF0Y2guYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uTGluZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3RyYW5zYWN0aW9uLWxpbmUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVJbmZvLCBUcmFuc2FjdGlvblJlZlRyYW5zYWN0aW9ufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbGluZS1pbmZvLmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9IaXN0b3J5fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1oaXN0b3J5LmJvJztcclxuaW1wb3J0IHtHZXRQdXJjaGFzZVBvcnRhbExpbmV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9nZXQtcHVyY2hhc2UtcG9ydGFsLWxpbmUnO1xyXG5pbXBvcnQge1JlZlRyYW5zYWN0aW9ufSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVmLXRyYW5zYWN0aW9uLmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvblNlYXJjaFZpZXdSZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tc2VhcmNoLXZpZXctcmVxdWVzdCc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25TZWFyY2hSZXN1bHR9IGZyb20gJy4uL21vZGVsL3RyYW5zYWN0aW9uLXNlYXJjaC1yZXN1bHQnO1xyXG5pbXBvcnQge1JlbGF0aW9uU21hbGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1zbWFsbC1vYmplY3QuYm8nO1xyXG5pbXBvcnQge1JlbGF0aW9uS2luZH0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS9yZWxhdGlvbi1raW5kLmVudW0nO1xyXG5pbXBvcnQge1JlbGF0aW9uU3RhdHVzfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9lbnVtL3JlbGF0aW9uLXN0YXR1cy5lbnVtJztcclxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvblR5cGVDYXRlZ29yeX0gZnJvbSAnLi4vZW51bS90cmFuc2FjdGlvbi10eXBlLWNhdGVnb3J5LmVudW0nO1xyXG5pbXBvcnQge0ljb259IGZyb20gJy4uL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtCYXNlTW9kdWxlU2VydmljZX0gZnJvbSAnQGNvbGlqbml0L2NvcmVjb21wb25lbnRzX3YxMic7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25TY3JlZW5Db25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi90cmFuc2FjdGlvbi1zY3JlZW4tY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtSZWxhdGlvbkFueVR5cGV9IGZyb20gJy4uL21vZGVsL3JlbGF0aW9uLWFueS10eXBlJztcclxuaW1wb3J0IHtSZWxhdGlvbk5hbWVLaW5kfSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvZW51bS9yZWxhdGlvbi1uYW1lLWtpbmQuZW51bSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJhc2VTZXJ2aWNlIGV4dGVuZHMgQmFzZU1vZHVsZVNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlbGF0aW9uQ2xhc3NGcm9tVHJhbnNhY3Rpb25LaW5kOiBNYXA8VHJhbnNhY3Rpb25LaW5kLCB0eXBlb2YgUmVsYXRpb24+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIHR5cGVvZiBSZWxhdGlvbj4oW1xyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBDdXN0b21lckZ1bGxPYmplY3RdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBTdXBwbGllckZ1bGxPYmplY3RdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc1F1b3RhdGlvbiwgQ3VzdG9tZXJGdWxsT2JqZWN0XVxyXG4gIF0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF90aXRsZUZyb21UcmFuc2FjdGlvbktpbmQ6IE1hcDxUcmFuc2FjdGlvbktpbmQsIHN0cmluZz4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgc3RyaW5nPihbXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFwiUkVUQUlMXCJdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBcIlBVUkNIQVNFXCJdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc1F1b3RhdGlvbiwgXCJRVU9UQVRJT05cIl1cclxuICBdKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaWNvbkZyb21UcmFuc2FjdGlvbktpbmQ6IE1hcDxUcmFuc2FjdGlvbktpbmQsIEljb24+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIEljb24+KFtcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgSWNvbi5DYXJ0U2hvcHBpbmdSZWd1bGFyXSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgSWNvbi5QYWxsZXRCb3hlc1NoYXJwUmVndWxhcl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzUXVvdGF0aW9uLCBJY29uLlJlZ3VsYXJDYXJ0U2hvcHBpbmdDaXJjbGVRdWVzdGlvbl1cclxuICBdKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEFjdGl2ZVJ1YnJpY0Zyb21UcmFuc2FjdGlvbktpbmQ6IE1hcDxUcmFuc2FjdGlvbktpbmQsIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5PiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25LaW5kLCBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeT4oW1xyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyT3ZlcnZpZXddLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5QdXJjaGFzZU9yZGVyT3ZlcnZpZXddLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc1F1b3RhdGlvbiwgVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlclF1b3RhdGlvbl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLkNhc2hEZXNrLCBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyQ2FzaFJlZ2lzdGVyXVxyXG4gIF0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9jaGVja291dFBheW1lbnRTdGVwVGl0bGVGcm9tVHJhbnNhY3Rpb25LaW5kOiBNYXA8VHJhbnNhY3Rpb25LaW5kLCBzdHJpbmc+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIHN0cmluZz4oW1xyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBcIk9WRVJWSUVXX0FORF9QQVlNRU5UXCJdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBcIk9WRVJWSUVXXCJdXHJcbiAgXSk7XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHB1YmxpYyB0cmFuc2FjdGlvblVwZGF0ZWQ6IEJlaGF2aW9yU3ViamVjdDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPih1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyByZWxhdGlvblVwZGF0ZWQ6IEJlaGF2aW9yU3ViamVjdDxSZWxhdGlvbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlbGF0aW9uPih1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyB0cmFuc2FjdGlvbktpbmRTZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwdWJsaWMgY3VycmVudEJyYW5jaDogc3RyaW5nID0gXCIxXCI7IC8vIGN1cnJlbnQgdXNlciBicmFuY2gsIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgd2UgY2FuIGRvIGFueXRoaW5nIHdpdGggdHJhbnNhY3Rpb25zXHJcbiAgcHVibGljIGF1dG9TYXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFwcGxpY2F0aW9uVXNlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbnZvaWNlQWRkcmVzc1NhbWVBc0RlbGl2ZXJ5OiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2V0IGFjdGl2ZVJ1YnJpYyh2YWx1ZTogVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkpIHtcclxuICAgIHRoaXMuX2FjdGl2ZVJ1YnJpYyA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5hY3RpdmVSdWJyaWNDaGFuZ2UubmV4dCh0aGlzLl9hY3RpdmVSdWJyaWMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhY3RpdmVSdWJyaWMoKTogVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVJ1YnJpYztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZWxhdGlvbk9uUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwdWJsaWMgZ2V0IHRpdGxlRm9yQ2hlY2tvdXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90aXRsZUZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaWNvbkZvckNoZWNrb3V0KCk6IEljb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ljb25Gcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh0aGlzLnRyYW5zYWN0aW9uS2luZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHBheW1lbnRTdGVwVGl0bGVGb3JDaGVja291dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoZWNrb3V0UGF5bWVudFN0ZXBUaXRsZUZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdHJhbnNhY3Rpb25LaW5kKHZhbHVlOiBUcmFuc2FjdGlvbktpbmQpIHtcclxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbktpbmQgIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uS2luZCA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmFjdGl2ZVJ1YnJpYyA9IHRoaXMuX2RlZmF1bHRBY3RpdmVSdWJyaWNGcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uS2luZFNldC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0cmFuc2FjdGlvbktpbmQoKTogVHJhbnNhY3Rpb25LaW5kIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbktpbmQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3VycmVudFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IG5ldyBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSgpO1xyXG4gIHB1YmxpYyBoYXNUcmFuc2FjdGlvbkxpbmVzOiBib29sZWFuO1xyXG5cclxuICBwdWJsaWMgc2V0IHB1cmNoYXNlT3JkZXJzQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9wdXJjaGFzZU9yZGVyc0NvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyR2VuZXJhdGVQdXJjaGFzZU9yZGVyc0NvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9wdXJjaGFzZU9yZGVyc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHB1cmNoYXNlT3JkZXJzQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3B1cmNoYXNlT3JkZXJzQ29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZWNlaXZlR29vZHNDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3JlY2VpdmVHb29kc0NvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5wdXJjaGFzZU9yZGVyUmVjZWl2ZUdvb2RzQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3JlY2VpdmVHb29kc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJlY2VpdmVHb29kc0NvbXBsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWNlaXZlR29vZHNDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFsbG9jYXRlR29vZHNDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2FsbG9jYXRlR29vZHNDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlckFsbG9jYXRlR29vZHNDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fYWxsb2NhdGVHb29kc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNhbGVzT3JkZXJQaWNraW5nR29vZHNDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3BpY2tpbmdHb29kc0NvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyUGlja2luZ0dvb2RzQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3BpY2tpbmdHb29kc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNhbGVzT3JkZXJQaWNrZWRDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3BpY2tlZENvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyUGlja2VkQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3BpY2tlZENvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNhbGVzT3JkZXJUb0JlUGlja2VkQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl90b0JlUGlja2VkQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJUb0JlUGlja2VkQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3RvQmVQaWNrZWRDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhbGxvY2F0ZUdvb2RzQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FsbG9jYXRlR29vZHNDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHB1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3B1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UucHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZWxpdmVyeUNvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGVsaXZlcnlDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlckRlbGl2ZXJ5Q29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX2RlbGl2ZXJ5Q29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVsaXZlcnlDb21wbGV0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVsaXZlcnlDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGludm9pY2VDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2ludm9pY2VDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UuaW52b2ljZUNvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9pbnZvaWNlQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2FsZXNPcmRlckNvbmZpcm1hdGlvblNlbnQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3NhbGVzT3JkZXJDb25maXJtYXRpb25TZW50ID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJDb25maXJtYXRpb25TZW50Q2hhbmdlZC5uZXh0KHRoaXMuX3NhbGVzT3JkZXJDb25maXJtYXRpb25TZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2FsZXNPcmRlckNvbmZpcm1hdGlvblNlbnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FsZXNPcmRlckNvbmZpcm1hdGlvblNlbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGludm9pY2VDb21wbGV0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW52b2ljZUNvbXBsZXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcmVsYXRpb24odmFsdWU6IFJlbGF0aW9uKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5fcmVsYXRpb24gPSB2YWx1ZTtcclxuICAgICAgdGhpcy5yZWxhdGlvblVwZGF0ZWQubmV4dCh0aGlzLl9yZWxhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgcmVsYXRpb24oKTogUmVsYXRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlbGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCB0cmFuc2FjdGlvbkRpcnR5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl90cmFuc2FjdGlvbkRpcnR5ID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnRyYW5zYWN0aW9uSGVhZGVyRGlydHkubmV4dCh0aGlzLl90cmFuc2FjdGlvbkRpcnR5KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdHJhbnNhY3Rpb25EaXJ0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbkRpcnR5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHB1cmNoYXNlUG9ydGFsTGluZTogUHVyY2hhc2VQb3J0YWxMaW5lW10gPSBbXTtcclxuICBwdWJsaWMgZG9jRGVsaXZlcnlCYXRjaDogRG9jRGVsaXZlcnlCYXRjaCA9IG5ldyBEb2NEZWxpdmVyeUJhdGNoKClcclxuICBwdWJsaWMgaW50ZXJuYWxQYXJhbWV0ZXJBbGxvd3NEcm9wU2hpcG1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaW50ZXJuYWxQYXJhbWV0ZXJSZWNlaXZlR29vZHNXaXRoRGF0YVRlcm1pbmFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVyUGFrQmlubmVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVyTUxvY2F0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVySnNQaWNraW5nTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbnZpdGVSZWxhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgYXJ0aWNsZUFtb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHVibGljIGdldCB0cmFuc2FjdGlvbkxvY2tlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9hbHJlYWR5TG9ja2VkO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uTGluZUFkZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gbm90IGJlaW5nIHVzZWQgYXQgdGhlIG1vbWVudCwgc28gaXQgc2hvdWxkIGJlIGZhbHNlXHJcbiAgcHJvdGVjdGVkIF9yZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9hY3RpdmVSdWJyaWM6IFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5ID0gVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlck92ZXJ2aWV3O1xyXG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uS2luZDogVHJhbnNhY3Rpb25LaW5kID0gVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXI7XHJcbiAgcHJpdmF0ZSBfcmVsYXRpb246IFJlbGF0aW9uID0gbmV3IFJlbGF0aW9uKCk7XHJcbiAgcHJpdmF0ZSBfcHVyY2hhc2VPcmRlcnNDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9yZWNlaXZlR29vZHNDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9hbGxvY2F0ZUdvb2RzQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcGlja2luZ0dvb2RzQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcGlja2VkQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfdG9CZVBpY2tlZENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3B1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9kZWxpdmVyeUNvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2ludm9pY2VDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9hbHJlYWR5TG9ja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb25EaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NhbGVzT3JkZXJDb25maXJtYXRpb25TZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfYW5zd2VyUmVjYWxjdWxhdGlvbkRlcG9zaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9kb250QXNrRm9yUmVjYWxjdWxhdGlvbkRlcG9zaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgb3B0aW9uc1NlcnZpY2U6IFRyYW5zYWN0aW9uU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgY29ubmVjdG9yOiBUcmFuc2FjdGlvbkNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgYXJ0aWNsZUNvbm5lY3RvcjogQXJ0aWNsZUNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZGljdGlvbmFyeVNlcnZpY2U6IERpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlOiBUcmFuc2FjdGlvbkV2ZW50U2VydmljZSxcclxuICAgIHByb3RlY3RlZCByZWxhdGlvblNlcnZpY2U6IFJlbGF0aW9uU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBzY3JlZW5Db25maWdTZXJ2aWNlOiBUcmFuc2FjdGlvblNjcmVlbkNvbmZpZ3VyYXRpb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzY3JlZW5Db25maWdTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBpbml0KG9wdGlvbnM6IGFueSwgcmVzZXRDdXJyZW50VHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAocmVzZXRDdXJyZW50VHJhbnNhY3Rpb24pIHtcclxuICAgICAgdGhpcy5yZXNldEN1cnJlbnRUcmFuc2FjdGlvbigpO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5vcHRpb25zU2VydmljZS5pbml0aWFsaXplKG9wdGlvbnMpO1xyXG4gICAgYXdhaXQgdGhpcy5jb25uZWN0b3IuY29ubmVjdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZU5ld1JlbGF0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY2xheno6IHR5cGVvZiBSZWxhdGlvbiA9IHRoaXMuX2dldFJlbGF0aW9uQ2xhc3ModGhpcy50cmFuc2FjdGlvbktpbmQpO1xyXG4gICAgdGhpcy5yZWxhdGlvbiA9IG5ldyBjbGF6ejtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRSZWxhdGlvbk9uVHJhbnNhY3Rpb24ocmVsYXRpb25OcjogbnVtYmVyLCByZWxhdGlvbktpbmQ6IFJlbGF0aW9uS2luZCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgcmVsYXRpb246IFJlbGF0aW9uQW55VHlwZSA9IGF3YWl0IHRoaXMucmVsYXRpb25TZXJ2aWNlLmdldFJlbGF0aW9uKHJlbGF0aW9uS2luZCwgcmVsYXRpb25Ocik7XHJcbiAgICBpZiAocmVsYXRpb24pIHtcclxuICAgICAgdGhpcy5yZWxhdGlvbiA9IHJlbGF0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoZWNrSW52aXRlUmVsYXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pbnZpdGVSZWxhdGlvbikge1xyXG4gICAgICBpZiAodGhpcy5yZWxhdGlvbikge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBpZiAodGhpcy5yZWxhdGlvbi51c2VybmFtZSkgeyAvLyBhbHJlYWR5IGFjY291bnQsIGNoZWNrIGZvciByZS1pbnZpdGVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaW52aXRlUmVsYXRpb24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldEN1cnJlbnRUcmFuc2FjdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKCk7XHJcbiAgICB0aGlzLl9yZWxhdGlvbiA9IG5ldyBDdXN0b21lckZ1bGxPYmplY3QoKTtcclxuICAgIHRoaXMuYXJ0aWNsZUFtb3VudCA9IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2F2ZVRyYW5zYWN0aW9uKHJlbWVtYmVyVHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4ge1xyXG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uTG9ja2VkKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbik7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zYXZlVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQpXHJcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuaXNTdWNjZXNzKSB7XHJcbiAgICAgIHRoaXMucmVzZXRMb2NrVHJhbnNhY3Rpb24oKTtcclxuICAgICAgaWYgKHJlbWVtYmVyVHJhbnNhY3Rpb24pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbW1pdCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRoaXMucmVzZXRMb2NrVHJhbnNhY3Rpb24oKTtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5jb21taXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyByb2xsYmFjayhyZWZyZXNoOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHJvbGxiYWNrU3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnJvbGxiYWNrKCk7XHJcbiAgICBpZiAocm9sbGJhY2tTdWNjZXNzKSB7XHJcbiAgICAgIHRoaXMucmVzZXRMb2NrVHJhbnNhY3Rpb24oKTtcclxuICAgICAgaWYgKHJlZnJlc2ggJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCkge1xyXG4gICAgICAgIHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByb2xsYmFja1N1Y2Nlc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VhcmNoVHJhbnNhY3Rpb25zKHJlcXVlc3Q6IFRyYW5zYWN0aW9uU2VhcmNoVmlld1JlcXVlc3QpOiBQcm9taXNlPFRyYW5zYWN0aW9uU2VhcmNoUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3Iuc2VhcmNoVHJhbnNhY3Rpb25zKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uQnlJZCh0cmFuc2FjdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlJZCh0cmFuc2FjdGlvbklkKTtcclxuICAgIGlmICh0cmFuc2FjdGlvbkluZm9SZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgYXdhaXQgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25CeU5yQW5kS2luZCh0cmFuc2FjdGlvbk5yOiBudW1iZXIsIHRyYW5zYWN0aW9uS2luZDogVHJhbnNhY3Rpb25LaW5kKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0cmFuc2FjdGlvbkluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkJ5TnJBbmRLaW5kKHRyYW5zYWN0aW9uS2luZCwgdHJhbnNhY3Rpb25Ocik7XHJcbiAgICBpZiAodHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UuaXNTdWNjZXNzKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFdlYlNlc3Npb25TYWxlc09yZGVyKHRyYW5zYWN0aW9uVXVpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCB0cmFuc2FjdGlvbkluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRXZWJTZXNzaW9uU2FsZXNPcmRlcih0cmFuc2FjdGlvblV1aWQpO1xyXG4gICAgaWYgKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlICYmIHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICBhd2FpdCB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdHJ5VG9Mb2NrVHJhbnNhY3Rpb24oaWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyLCBzZWNvbmRBdHRlbXB0OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICghaWQpIHsgLy8gaXQncyBhIG5ldyB0cmFuc2FjdGlvbiwgbm8gbmVlZCB0byBsb2NrXHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5fYWxyZWFkeUxvY2tlZCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxvY2tSZXNwb25zZTogVHJhbnNhY3Rpb25Mb2NrUmVzdWx0ID0gYXdhaXQgdGhpcy5fbG9ja1RyYW5zYWN0aW9uKGlkLCB2ZXJzaW9uKTtcclxuICAgIGlmIChsb2NrUmVzcG9uc2UpIHtcclxuICAgICAgaWYgKCFsb2NrUmVzcG9uc2UuaXNMb2NrU3VjY2Vzcykge1xyXG4gICAgICAgIGlmIChzZWNvbmRBdHRlbXB0KSB7IC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Vycm9yKFwiVFJBTlNBQ1RJT05fVkVSU0lPTl9NSVNNQVRDSF9FUlJPUlwiLCB0cnVlKTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFsb2NrUmVzcG9uc2UuaXNMYXRlc3RWZXJzaW9uKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd1RvYXN0KFwiVFJBTlNBQ1RJT05fVkVSU0lPTl9NSVNNQVRDSFwiLCB0cnVlKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb25CeUlkKGlkKTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5oaWRlVG9hc3RBZnRlck1zKDMwMDApO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJ5VG9Mb2NrVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkLCB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udmVyc2lvbiwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGxvY2tEZXRhaWxzOiBzdHJpbmcgPSBgJHt0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldChcIkJZXCIpfTogJHtsb2NrUmVzcG9uc2UubG9ja2VkQnl9XHJcbiAgICAgICAgICAgICAgICAke3RoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0KFwiU0lOQ0VcIiwgZmFsc2UpfSAke2xvY2tSZXNwb25zZS5sb2NrZWRTaW5jZS50b0xvY2FsZVN0cmluZygpfWA7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0Vycm9yKFwiVFJBTlNBQ1RJT05fQUxSRUFEWV9MT0NLRURcIiwgdHJ1ZSwgbG9ja0RldGFpbHMpO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9hbHJlYWR5TG9ja2VkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uSW5mbyh0cmFuc0lkOiBudW1iZXIsIGxpbmVJZDogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkluZm9IaXN0b3J5W10+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkluZm8odHJhbnNJZCwgbGluZUlkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRSZWZUcmFuc2FjdGlvbnModHJhbnNJZDogbnVtYmVyKTogUHJvbWlzZTxSZWZUcmFuc2FjdGlvbltdPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UmVmVHJhbnNhY3Rpb25zKHRyYW5zSWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFB1cmNoYXNlUG9ydGFsTGluZXMocmVxdWVzdDogR2V0UHVyY2hhc2VQb3J0YWxMaW5lKTogUHJvbWlzZTxQdXJjaGFzZVBvcnRhbExpbmVbXT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFB1cmNoYXNlUG9ydGFsTGluZXMocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2F2ZVRyYW5zYWN0aW9uQW5kQ29tbWl0KHJlc3BvbnNlPzogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIC8vIHdlIGNhbiBzYWZlbHkgc2F2ZS9jb21taXQgdGhlIGNoYW5nZXNcclxuICAgIGNvbnN0IHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuc2F2ZVRyYW5zYWN0aW9uKGZhbHNlKTtcclxuICAgIGlmIChzYXZlVHJhbnNhY3Rpb25SZXNwb25zZSAmJiBzYXZlVHJhbnNhY3Rpb25SZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgYXdhaXQgdGhpcy5jb21taXQoKTtcclxuICAgICAgYXdhaXQgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihzYXZlVHJhbnNhY3Rpb25SZXNwb25zZSk7XHJcbiAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZUFmdGVyUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gd2UgbmVlZCB0byBkbyBhbiBleHRyYSBjb21taXQgdG8gcmVsZWFzZSB0aGUgbG9ja1xyXG4gICAgLy8gY29uc3QgY29tbWl0U3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuY29tbWl0KCk7XHJcbiAgICByZXR1cm4gc2F2ZVRyYW5zYWN0aW9uUmVzcG9uc2UgJiYgc2F2ZVRyYW5zYWN0aW9uUmVzcG9uc2UuaXNTdWNjZXNzIC8qJiYgY29tbWl0U3VjY2VzcyovO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHZhbHVlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5faGFuZGxlQmVmb3JlUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odmFsdWUpO1xyXG4gICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25LaW5kID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uS2luZDtcclxuICAgIHRoaXMuaGFzVHJhbnNhY3Rpb25MaW5lcyA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMgJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcy5sZW5ndGggPiAwO1xyXG4gICAgdGhpcy5fc2V0QW1vdW50KCk7XHJcbiAgICB0aGlzLl9jaGVja0hlYWRlclN0YXR1cygpO1xyXG4gICAgdGhpcy5jaGVja1JlZlRyYW5zYWN0aW9uKCk7IC8vIHRvZG86IGdldCBmcm9tIHRoZSBoZWFkZXIgc3RhdHVzXHJcbiAgICBpZiAodGhpcy5nZXRSZWxhdGlvbk9uUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24pIHtcclxuICAgICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24ucmVsYXRpb25JZCkge1xyXG4gICAgICAgIGlmICghdGhpcy5yZWxhdGlvbiB8fCB0aGlzLnJlbGF0aW9uLnJlbGF0aW9uSWQgIT09IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbi5yZWxhdGlvbklkKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9nZXRSZWxhdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlbGF0aW9uVXBkYXRlZC5uZXh0KHRoaXMucmVsYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbGF0aW9uID0gbmV3IEN1c3RvbWVyRnVsbE9iamVjdCgpO1xyXG4gICAgICAgIHRoaXMucmVsYXRpb24udHlwZSA9IFJlbGF0aW9uTmFtZUtpbmQuUHJpdmF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudHJhbnNhY3Rpb25VcGRhdGVkLm5leHQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24pO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS50cmFuc2FjdGlvblNldC5uZXh0KHRoaXMuY3VycmVudFRyYW5zYWN0aW9uKTtcclxuICAgIGF3YWl0IHRoaXMuX2hhbmRsZUFmdGVyUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24oKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfY2hlY2tIZWFkZXJTdGF0dXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzKSB7XHJcbiAgICAgIC8vc2FsZXMgb3JkZXJcclxuICAgICAgdGhpcy5wdXJjaGFzZU9yZGVyc0NvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlPcmRlcmVkO1xyXG4gICAgICB0aGlzLmFsbG9jYXRlR29vZHNDb21wbGV0ZWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5QWxsb2NhdGVkO1xyXG4gICAgICB0aGlzLnNhbGVzT3JkZXJQaWNrZWRDb21wbGV0ZWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5UGlja2VkO1xyXG4gICAgICB0aGlzLnNhbGVzT3JkZXJUb0JlUGlja2VkQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseVRvQmVQaWNrZWQ7XHJcbiAgICAgIHRoaXMuZGVsaXZlcnlDb21wbGV0ZWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5RGVsaXZlcmVkO1xyXG4gICAgICB0aGlzLmludm9pY2VDb21wbGV0ZWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5SW52b2ljZWQ7XHJcbiAgICAgIC8vIHB1cmNoYXNlXHJcbiAgICAgIHRoaXMucHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlQdXJjaGFzZUNvbmZpcm1lZDtcclxuICAgICAgdGhpcy5yZWNlaXZlR29vZHNDb21wbGV0ZWQgPSB0aGlzLmludGVybmFsUGFyYW1ldGVyUGFrQmlubmVuID8gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseVJlY2VpdmVkVW5Qcm9jZXNzZWQgOiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5UmVjZWl2ZWQ7XHJcbiAgICAgIHRoaXMuc2FsZXNPcmRlckNvbmZpcm1hdGlvblNlbnQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0NvbmZpcm1hdGlvblNlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hlY2tSZWZUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9zaG91bGRDaGVja1JlZlRyYW5zYWN0aW9ucygpKSB7XHJcbiAgICAgIGNvbnN0IHRyYW5zSWQ6IG51bWJlciA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZDtcclxuICAgICAgaWYgKCF0cmFuc0lkKSB7IC8vIG5ldyB0cmFuc2FjdGlvbiwgZ2V0IG91dFxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhcnRpY2xlVHJhbnNMaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mb1tdID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcy5maWx0ZXIodCA9PiB0LmlzQXJ0aWNsZSk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJ0aWNsZVRyYW5zTGluZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgcmVmVHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvblJlZlRyYW5zYWN0aW9uW10gPSBbXTtcclxuICAgICAgICBjb25zdCB0cmFuc0xpbmU6IFRyYW5zYWN0aW9uTGluZUluZm8gPSBhcnRpY2xlVHJhbnNMaW5lc1tpXTtcclxuICAgICAgICB0cmFuc0xpbmUucmVmVHJhbnNhY3Rpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5nZXRSZWZUcmFuc2FjdGlvbnModHJhbnNJZCkudGhlbihhc3luYyAocmVmczogUmVmVHJhbnNhY3Rpb25bXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlZnMgJiYgcmVmcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNhbGVzT3JkZXJzOiBSZWZUcmFuc2FjdGlvbltdID0gcmVmcy5maWx0ZXIociA9PiByLnJlZlRyYW5zYWN0aW9uVHlwZSA9PT0gVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNhbGVzT3JkZXJzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdDogVHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdCA9IG5ldyBUcmFuc2FjdGlvblNlYXJjaFZpZXdSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgICAgcmVxdWVzdC50cmFuc2FjdGlvbktpbmQgPSBzYWxlc09yZGVyc1tqXS5yZWZUcmFuc2FjdGlvblR5cGU7XHJcbiAgICAgICAgICAgICAgcmVxdWVzdC50cmFuc05yID0gcGFyc2VJbnQoc2FsZXNPcmRlcnNbal0ucmVmVHJhbnNhY3Rpb25Ocik7XHJcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNTZWFyY2hSZXN1bHQ6IFRyYW5zYWN0aW9uU2VhcmNoUmVzdWx0ID0gYXdhaXQgdGhpcy5zZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9ucyAmJiB0cmFuc1NlYXJjaFJlc3VsdC50cmFuc2FjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmVmVHJhbnNhY3Rpb25zLnB1c2gobmV3IFRyYW5zYWN0aW9uUmVmVHJhbnNhY3Rpb24oXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS50cmFuc0lkLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc1NlYXJjaFJlc3VsdC50cmFuc2FjdGlvbnNbMF0udHJhbnNOci50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc1NlYXJjaFJlc3VsdC50cmFuc2FjdGlvbnNbMF0udHJhbnNhY3Rpb25LaW5kLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc1NlYXJjaFJlc3VsdC50cmFuc2FjdGlvbnNbMF0ucmVsYXRpb25OcixcclxuICAgICAgICAgICAgICAgICAgdHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zWzBdLnJlbGF0aW9uTmFtZSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0cmFuc0xpbmUucmVmVHJhbnNhY3Rpb25zID0gcmVmVHJhbnNhY3Rpb25zO1xyXG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS50cmFuc2FjdGlvbkxpbmVSZWZUcmFuc2FjdGlvbnNDaGFuZ2VkLm5leHQodHJhbnNMaW5lKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25EZXBvc2l0QW1vdW50KHV1aWQ6IHN0cmluZywgYW1vdW50OiBudW1iZXIsIHNhdmVUcmFuc2FjdGlvbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICB9XHJcbiAgcHVibGljIHVwZGF0ZUhlYWRlclRyYW5zYWN0aW9uRGVwb3NpdFBlcmNlbnRhZ2UodXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0TG9ja1RyYW5zYWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fYWxyZWFkeUxvY2tlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkRpcnR5ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2hhbmRsZUJlZm9yZVJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9oYW5kbGVBZnRlclJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGluaXRpYWxpemVUcmFuc2FjdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5yZWxhdGlvbikge1xyXG4gICAgICB0aGlzLnJlbGF0aW9uID0gbmV3IEN1c3RvbWVyRnVsbE9iamVjdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlbGF0aW9uLnJlbGF0aW9uSWQpIHtcclxuICAgICAgaWYgKHRoaXMucmVsYXRpb24ucmVsYXRpb25UeXBlID09PSBSZWxhdGlvbktpbmQuQ3VzdG9tZXIpIHtcclxuICAgICAgICAodGhpcy5yZWxhdGlvbiBhcyBDdXN0b21lckZ1bGxPYmplY3QpLnJlbGF0aW9uU3RhdHVzID0gUmVsYXRpb25TdGF0dXMuUmVndWxhckN1c3RvbWVyO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVsYXRpb24uc3RhcnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucHJlZmVycmVkRGVsaXZlcnlEYXRlMiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5wcmVmZXJyZWREZWxpdmVyeURhdGUyID0gXCI9XCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9sb2NrVHJhbnNhY3Rpb24odHJhbnNJZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uTG9ja1Jlc3VsdD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmxvY2tUcmFuc2FjdGlvbkJ5SWQodHJhbnNJZCwgdmVyc2lvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRSZWxhdGlvbkNsYXNzKHRyYW5zYWN0aW9uS2luZDogVHJhbnNhY3Rpb25LaW5kKTogdHlwZW9mIFJlbGF0aW9uIHtcclxuICAgIGlmICh0aGlzLl9yZWxhdGlvbkNsYXNzRnJvbVRyYW5zYWN0aW9uS2luZC5oYXModHJhbnNhY3Rpb25LaW5kKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fcmVsYXRpb25DbGFzc0Zyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRyYW5zYWN0aW9uS2luZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUmVsYXRpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRSZWxhdGlvbihyZWxhdGlvbjogUmVsYXRpb25TbWFsbE9iamVjdCk6IHZvaWQge1xyXG4gICAgaWYgKHJlbGF0aW9uKSB7XHJcbiAgICAgIHRoaXMucmVsYXRpb25TZXJ2aWNlLmdldFJlbGF0aW9uTnVtYmVyKHJlbGF0aW9uLnJlbGF0aW9uSWQpLnRoZW4oKHJlbGF0aW9uTnI6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChyZWxhdGlvbi5yZWxhdGlvblR5cGUgPT09IFJlbGF0aW9uS2luZC5DdXN0b21lcikge1xyXG4gICAgICAgICAgdGhpcy5yZWxhdGlvblNlcnZpY2UuZ2V0Q3VzdG9tZXJGdWxsT2JqZWN0KHBhcnNlSW50KHJlbGF0aW9uTnIsIDApKS50aGVuKChjdXN0b21lcjogQ3VzdG9tZXJGdWxsT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjdXN0b21lci5hZGRyZXNzZXMgJiYgY3VzdG9tZXIuYWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjdXN0b21lci5hZGRyZXNzZXMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSA8IGIuc2VxdWVuY2UgPyAtMSA6IDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb24gPSBjdXN0b21lcjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVsYXRpb24ucmVsYXRpb25UeXBlID09PSBSZWxhdGlvbktpbmQuU3VwcGxpZXIpIHtcclxuICAgICAgICAgIHRoaXMucmVsYXRpb25TZXJ2aWNlLmdldFN1cHBsaWVyRnVsbE9iamVjdChwYXJzZUludChyZWxhdGlvbk5yLCAwKSkudGhlbigoc3VwcGxpZXI6IFN1cHBsaWVyRnVsbE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3VwcGxpZXIuYWRkcmVzc2VzICYmIHN1cHBsaWVyLmFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgc3VwcGxpZXIuYWRkcmVzc2VzLnNvcnQoKGEsIGIpID0+IGEuc2VxdWVuY2UgPCBiLnNlcXVlbmNlID8gLTEgOiAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbGF0aW9uID0gc3VwcGxpZXI7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWxhdGlvblVwZGF0ZWQubmV4dChudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEFtb3VudCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzKSB7XHJcbiAgICAgIHRoaXMuYXJ0aWNsZUFtb3VudCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKHQgPT4gdC5saW5lVHlwZSA9PT0gVHJhbnNhY3Rpb25MaW5lVHlwZS5BcnRpY2xlTGluZSkubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvdWxkQ2hlY2tSZWZUcmFuc2FjdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiAhIXRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMgJiZcclxuICAgICAgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby50cmFuc2FjdGlvbktpbmQgPT09IFRyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyIHx8XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uS2luZCA9PT0gVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIgfHxcclxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25LaW5kID09PSBUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
542
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJhbnNhY3Rpb24vc3JjL2xpYi9zZXJ2aWNlL3RyYW5zYWN0aW9uLWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxtRUFBbUUsQ0FBQztBQUMxRyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDMUYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDREQUE0RCxDQUFDO0FBQzVGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBQ25HLE9BQU8sRUFBc0IseUJBQXlCLEVBQUMsTUFBTSwrREFBK0QsQ0FB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QyxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQ2xJO0lBQ0gsQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0I7WUFDNUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLGVBQWUsS0FBSyxlQUFlLENBQUMsYUFBYTtnQkFDeEYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLFVBQVU7Z0JBQ3RGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsZUFBZSxLQUFLLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRyxDQUFDOzs7WUEvaEJGLFVBQVU7OztZQWpDSCwwQkFBMEI7WUFDMUIsYUFBYTtZQUNiLDJCQUEyQjtZQUMzQix1QkFBdUI7WUFDdkIsaUJBQWlCO1lBQ2pCLHVCQUF1QjtZQUN2QixlQUFlO1lBdUJmLHFDQUFxQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHJhbnNhY3Rpb25Mb2NrUmVzdWx0fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbG9jay1yZXN1bHQuYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuL3RyYW5zYWN0aW9uLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gJy4vZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi90cmFuc2FjdGlvbi1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7QXJ0aWNsZUNvbm5lY3RvclNlcnZpY2V9IGZyb20gJy4vYXJ0aWNsZS1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7RGljdGlvbmFyeVNlcnZpY2V9IGZyb20gJy4vZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkV2ZW50U2VydmljZX0gZnJvbSAnLi90cmFuc2FjdGlvbi1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtSZWxhdGlvblNlcnZpY2V9IGZyb20gJy4vcmVsYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2V9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLXJlc3BvbnNlLmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbktpbmR9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3RyYW5zYWN0aW9uLWtpbmQuZW51bSc7XHJcbmltcG9ydCB7UmVsYXRpb259IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi5ibyc7XHJcbmltcG9ydCB7Q3VzdG9tZXJGdWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvY3VzdG9tZXItZnVsbC1vYmplY3QuYm8nO1xyXG5pbXBvcnQge1N1cHBsaWVyRnVsbE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL3N1cHBsaWVyLWZ1bGwtb2JqZWN0LmJvJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1B1cmNoYXNlUG9ydGFsTGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLXBvcnRhbC1saW5lLmJvJztcclxuaW1wb3J0IHtEb2NEZWxpdmVyeUJhdGNofSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZG9jLWRlbGl2ZXJ5LWJhdGNoLmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVUeXBlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS90cmFuc2FjdGlvbi1saW5lLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lSW5mbywgVHJhbnNhY3Rpb25SZWZUcmFuc2FjdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWxpbmUtaW5mby5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25JbmZvSGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8taGlzdG9yeS5ibyc7XHJcbmltcG9ydCB7R2V0UHVyY2hhc2VQb3J0YWxMaW5lfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ2V0LXB1cmNoYXNlLXBvcnRhbC1saW5lJztcclxuaW1wb3J0IHtSZWZUcmFuc2FjdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlZi10cmFuc2FjdGlvbi5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLXNlYXJjaC12aWV3LXJlcXVlc3QnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2VhcmNoUmVzdWx0fSBmcm9tICcuLi9tb2RlbC90cmFuc2FjdGlvbi1zZWFyY2gtcmVzdWx0JztcclxuaW1wb3J0IHtSZWxhdGlvblNtYWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tc21hbGwtb2JqZWN0LmJvJztcclxuaW1wb3J0IHtSZWxhdGlvbktpbmR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2VudW0vcmVsYXRpb24ta2luZC5lbnVtJztcclxuaW1wb3J0IHtSZWxhdGlvblN0YXR1c30gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS9yZWxhdGlvbi1zdGF0dXMuZW51bSc7XHJcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnl9IGZyb20gJy4uL2VudW0vdHJhbnNhY3Rpb24tdHlwZS1jYXRlZ29yeS5lbnVtJztcclxuaW1wb3J0IHtJY29ufSBmcm9tICcuLi9lbnVtL2ljb24uZW51bSc7XHJcbmltcG9ydCB7QmFzZU1vZHVsZVNlcnZpY2V9IGZyb20gJ0Bjb2xpam5pdC9jb3JlY29tcG9uZW50c192MTInO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2NyZWVuQ29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4vdHJhbnNhY3Rpb24tc2NyZWVuLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7UmVsYXRpb25BbnlUeXBlfSBmcm9tICcuLi9tb2RlbC9yZWxhdGlvbi1hbnktdHlwZSc7XHJcbmltcG9ydCB7UmVsYXRpb25OYW1lS2luZH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL2VudW0vcmVsYXRpb24tbmFtZS1raW5kLmVudW0nO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CYXNlU2VydmljZSBleHRlbmRzIEJhc2VNb2R1bGVTZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9yZWxhdGlvbkNsYXNzRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgdHlwZW9mIFJlbGF0aW9uPiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25LaW5kLCB0eXBlb2YgUmVsYXRpb24+KFtcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgQ3VzdG9tZXJGdWxsT2JqZWN0XSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgU3VwcGxpZXJGdWxsT2JqZWN0XSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24sIEN1c3RvbWVyRnVsbE9iamVjdF1cclxuICBdKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdGl0bGVGcm9tVHJhbnNhY3Rpb25LaW5kOiBNYXA8VHJhbnNhY3Rpb25LaW5kLCBzdHJpbmc+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIHN0cmluZz4oW1xyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBcIlJFVEFJTFwiXSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgXCJQVVJDSEFTRVwiXSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24sIFwiUVVPVEFUSU9OXCJdXHJcbiAgXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ljb25Gcm9tVHJhbnNhY3Rpb25LaW5kOiBNYXA8VHJhbnNhY3Rpb25LaW5kLCBJY29uPiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25LaW5kLCBJY29uPihbXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIEljb24uQ2FydFNob3BwaW5nUmVndWxhcl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIEljb24uUGFsbGV0Qm94ZXNTaGFycFJlZ3VsYXJdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc1F1b3RhdGlvbiwgSWNvbi5SZWd1bGFyQ2FydFNob3BwaW5nQ2lyY2xlUXVlc3Rpb25dXHJcbiAgXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRBY3RpdmVSdWJyaWNGcm9tVHJhbnNhY3Rpb25LaW5kOiBNYXA8VHJhbnNhY3Rpb25LaW5kLCBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeT4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnk+KFtcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlck92ZXJ2aWV3XSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuUHVyY2hhc2VPcmRlck92ZXJ2aWV3XSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24sIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlNhbGVzT3JkZXJRdW90YXRpb25dLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5DYXNoRGVzaywgVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlckNhc2hSZWdpc3Rlcl1cclxuICBdKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hlY2tvdXRQYXltZW50U3RlcFRpdGxlRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgc3RyaW5nPiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25LaW5kLCBzdHJpbmc+KFtcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgXCJPVkVSVklFV19BTkRfUEFZTUVOVFwiXSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgXCJPVkVSVklFV1wiXVxyXG4gIF0pO1xyXG5cclxuICBwdWJsaWMgbG9nb3V0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwdWJsaWMgdHJhbnNhY3Rpb25VcGRhdGVkOiBCZWhhdmlvclN1YmplY3Q8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4odW5kZWZpbmVkKTtcclxuICBwdWJsaWMgcmVsYXRpb25VcGRhdGVkOiBCZWhhdmlvclN1YmplY3Q8UmVsYXRpb24+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWxhdGlvbj4odW5kZWZpbmVkKTtcclxuICBwdWJsaWMgdHJhbnNhY3Rpb25LaW5kU2V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcHVibGljIGN1cnJlbnRCcmFuY2g6IHN0cmluZyA9IFwiMVwiOyAvLyBjdXJyZW50IHVzZXIgYnJhbmNoLCBuZWVkcyB0byBiZSBzZXQgYmVmb3JlIHdlIGNhbiBkbyBhbnl0aGluZyB3aXRoIHRyYW5zYWN0aW9uc1xyXG4gIHB1YmxpYyBhdXRvU2F2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBhcHBsaWNhdGlvblVzZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaW52b2ljZUFkZHJlc3NTYW1lQXNEZWxpdmVyeTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIHNldCBhY3RpdmVSdWJyaWModmFsdWU6IFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5KSB7XHJcbiAgICB0aGlzLl9hY3RpdmVSdWJyaWMgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UuYWN0aXZlUnVicmljQ2hhbmdlLm5leHQodGhpcy5fYWN0aXZlUnVicmljKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgYWN0aXZlUnVicmljKCk6IFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5IHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVSdWJyaWM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVsYXRpb25PblJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHVibGljIGdldCB0aXRsZUZvckNoZWNrb3V0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGl0bGVGcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh0aGlzLnRyYW5zYWN0aW9uS2luZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGljb25Gb3JDaGVja291dCgpOiBJY29uIHtcclxuICAgIHJldHVybiB0aGlzLl9pY29uRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodGhpcy50cmFuc2FjdGlvbktpbmQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwYXltZW50U3RlcFRpdGxlRm9yQ2hlY2tvdXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGVja291dFBheW1lbnRTdGVwVGl0bGVGcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh0aGlzLnRyYW5zYWN0aW9uS2luZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHRyYW5zYWN0aW9uS2luZCh2YWx1ZTogVHJhbnNhY3Rpb25LaW5kKSB7XHJcbiAgICBpZiAodGhpcy5fdHJhbnNhY3Rpb25LaW5kICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl90cmFuc2FjdGlvbktpbmQgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5hY3RpdmVSdWJyaWMgPSB0aGlzLl9kZWZhdWx0QWN0aXZlUnVicmljRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodmFsdWUpO1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uS2luZFNldC5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0cmFuc2FjdGlvbktpbmQoKTogVHJhbnNhY3Rpb25LaW5kIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbktpbmQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3VycmVudFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IG5ldyBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSgpO1xyXG4gIHB1YmxpYyBoYXNUcmFuc2FjdGlvbkxpbmVzOiBib29sZWFuO1xyXG5cclxuICBwdWJsaWMgc2V0IHB1cmNoYXNlT3JkZXJzQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9wdXJjaGFzZU9yZGVyc0NvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyR2VuZXJhdGVQdXJjaGFzZU9yZGVyc0NvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9wdXJjaGFzZU9yZGVyc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHB1cmNoYXNlT3JkZXJzQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3B1cmNoYXNlT3JkZXJzQ29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZWNlaXZlR29vZHNDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3JlY2VpdmVHb29kc0NvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5wdXJjaGFzZU9yZGVyUmVjZWl2ZUdvb2RzQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3JlY2VpdmVHb29kc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJlY2VpdmVHb29kc0NvbXBsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWNlaXZlR29vZHNDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFsbG9jYXRlR29vZHNDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2FsbG9jYXRlR29vZHNDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlckFsbG9jYXRlR29vZHNDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fYWxsb2NhdGVHb29kc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNhbGVzT3JkZXJQaWNraW5nR29vZHNDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3BpY2tpbmdHb29kc0NvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyUGlja2luZ0dvb2RzQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3BpY2tpbmdHb29kc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNhbGVzT3JkZXJQaWNrZWRDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3BpY2tlZENvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyUGlja2VkQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3BpY2tlZENvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNhbGVzT3JkZXJUb0JlUGlja2VkQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl90b0JlUGlja2VkQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJUb0JlUGlja2VkQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3RvQmVQaWNrZWRDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhbGxvY2F0ZUdvb2RzQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FsbG9jYXRlR29vZHNDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHB1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3B1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UucHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZWxpdmVyeUNvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGVsaXZlcnlDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlckRlbGl2ZXJ5Q29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX2RlbGl2ZXJ5Q29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVsaXZlcnlDb21wbGV0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVsaXZlcnlDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGludm9pY2VDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2ludm9pY2VDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UuaW52b2ljZUNvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9pbnZvaWNlQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2FsZXNPcmRlckNvbmZpcm1hdGlvblNlbnQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3NhbGVzT3JkZXJDb25maXJtYXRpb25TZW50ID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJDb25maXJtYXRpb25TZW50Q2hhbmdlZC5uZXh0KHRoaXMuX3NhbGVzT3JkZXJDb25maXJtYXRpb25TZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2FsZXNPcmRlckNvbmZpcm1hdGlvblNlbnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FsZXNPcmRlckNvbmZpcm1hdGlvblNlbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGludm9pY2VDb21wbGV0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW52b2ljZUNvbXBsZXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcmVsYXRpb24odmFsdWU6IFJlbGF0aW9uKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5fcmVsYXRpb24gPSB2YWx1ZTtcclxuICAgICAgdGhpcy5yZWxhdGlvblVwZGF0ZWQubmV4dCh0aGlzLl9yZWxhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgcmVsYXRpb24oKTogUmVsYXRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlbGF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCB0cmFuc2FjdGlvbkRpcnR5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl90cmFuc2FjdGlvbkRpcnR5ID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnRyYW5zYWN0aW9uSGVhZGVyRGlydHkubmV4dCh0aGlzLl90cmFuc2FjdGlvbkRpcnR5KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdHJhbnNhY3Rpb25EaXJ0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbkRpcnR5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHB1cmNoYXNlUG9ydGFsTGluZTogUHVyY2hhc2VQb3J0YWxMaW5lW10gPSBbXTtcclxuICBwdWJsaWMgZG9jRGVsaXZlcnlCYXRjaDogRG9jRGVsaXZlcnlCYXRjaCA9IG5ldyBEb2NEZWxpdmVyeUJhdGNoKClcclxuICBwdWJsaWMgaW50ZXJuYWxQYXJhbWV0ZXJBbGxvd3NEcm9wU2hpcG1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaW50ZXJuYWxQYXJhbWV0ZXJSZWNlaXZlR29vZHNXaXRoRGF0YVRlcm1pbmFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVyUGFrQmlubmVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVyTUxvY2F0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVySnNQaWNraW5nTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbnZpdGVSZWxhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgYXJ0aWNsZUFtb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHVibGljIGdldCB0cmFuc2FjdGlvbkxvY2tlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9hbHJlYWR5TG9ja2VkO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uTGluZUFkZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gbm90IGJlaW5nIHVzZWQgYXQgdGhlIG1vbWVudCwgc28gaXQgc2hvdWxkIGJlIGZhbHNlXHJcbiAgcHJvdGVjdGVkIF9yZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9hY3RpdmVSdWJyaWM6IFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5ID0gVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlck92ZXJ2aWV3O1xyXG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uS2luZDogVHJhbnNhY3Rpb25LaW5kO1xyXG4gIHByaXZhdGUgX3JlbGF0aW9uOiBSZWxhdGlvbiA9IG5ldyBSZWxhdGlvbigpO1xyXG4gIHByaXZhdGUgX3B1cmNoYXNlT3JkZXJzQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcmVjZWl2ZUdvb2RzQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfYWxsb2NhdGVHb29kc0NvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3BpY2tpbmdHb29kc0NvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3BpY2tlZENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3RvQmVQaWNrZWRDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZGVsaXZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pbnZvaWNlQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfYWxyZWFkeUxvY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3RyYW5zYWN0aW9uRGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zYWxlc09yZGVyQ29uZmlybWF0aW9uU2VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBvcHRpb25zU2VydmljZTogVHJhbnNhY3Rpb25TZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBjb25uZWN0b3I6IFRyYW5zYWN0aW9uQ29ubmVjdG9yU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBhcnRpY2xlQ29ubmVjdG9yOiBBcnRpY2xlQ29ubmVjdG9yU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBkaWN0aW9uYXJ5U2VydmljZTogRGljdGlvbmFyeVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgdHJhbnNhY3Rpb25FdmVudFNlcnZpY2U6IFRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHJlbGF0aW9uU2VydmljZTogUmVsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHNjcmVlbkNvbmZpZ1NlcnZpY2U6IFRyYW5zYWN0aW9uU2NyZWVuQ29uZmlndXJhdGlvblNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKHNjcmVlbkNvbmZpZ1NlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXQob3B0aW9uczogYW55LCByZXNldEN1cnJlbnRUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChyZXNldEN1cnJlbnRUcmFuc2FjdGlvbikge1xyXG4gICAgICB0aGlzLnJlc2V0Q3VycmVudFRyYW5zYWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLm9wdGlvbnNTZXJ2aWNlLmluaXRpYWxpemUob3B0aW9ucyk7XHJcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rvci5jb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlTmV3UmVsYXRpb24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBjbGF6ejogdHlwZW9mIFJlbGF0aW9uID0gdGhpcy5fZ2V0UmVsYXRpb25DbGFzcyh0aGlzLnRyYW5zYWN0aW9uS2luZCk7XHJcbiAgICB0aGlzLnJlbGF0aW9uID0gbmV3IGNsYXp6O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldFJlbGF0aW9uT25UcmFuc2FjdGlvbihyZWxhdGlvbk5yOiBudW1iZXIsIHJlbGF0aW9uS2luZDogUmVsYXRpb25LaW5kKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCByZWxhdGlvbjogUmVsYXRpb25BbnlUeXBlID0gYXdhaXQgdGhpcy5yZWxhdGlvblNlcnZpY2UuZ2V0UmVsYXRpb24ocmVsYXRpb25LaW5kLCByZWxhdGlvbk5yKTtcclxuICAgIGlmIChyZWxhdGlvbikge1xyXG4gICAgICB0aGlzLnJlbGF0aW9uID0gcmVsYXRpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hlY2tJbnZpdGVSZWxhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmludml0ZVJlbGF0aW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLnJlbGF0aW9uKSB7XHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIGlmICh0aGlzLnJlbGF0aW9uLnVzZXJuYW1lKSB7IC8vIGFscmVhZHkgYWNjb3VudCwgY2hlY2sgZm9yIHJlLWludml0ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5pbnZpdGVSZWxhdGlvbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0Q3VycmVudFRyYW5zYWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UoKTtcclxuICAgIHRoaXMuX3JlbGF0aW9uID0gbmV3IEN1c3RvbWVyRnVsbE9iamVjdCgpO1xyXG4gICAgdGhpcy5hcnRpY2xlQW1vdW50ID0gMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzYXZlVHJhbnNhY3Rpb24ocmVtZW1iZXJUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb25Mb2NrZWQpIHtcclxuICAgICAgYXdhaXQgdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLnNhdmVUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udXVpZClcclxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSlcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5yZXNldExvY2tUcmFuc2FjdGlvbigpO1xyXG4gICAgICBpZiAocmVtZW1iZXJUcmFuc2FjdGlvbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tbWl0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5yZXNldExvY2tUcmFuc2FjdGlvbigpO1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNvbW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrKHJlZnJlc2g6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3Qgcm9sbGJhY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iucm9sbGJhY2soKTtcclxuICAgIGlmIChyb2xsYmFja1N1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5yZXNldExvY2tUcmFuc2FjdGlvbigpO1xyXG4gICAgICBpZiAocmVmcmVzaCAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKSB7XHJcbiAgICAgICAgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvbGxiYWNrU3VjY2VzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdDogVHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25TZWFyY2hSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQpO1xyXG4gICAgaWYgKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICBhd2FpdCB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkJ5TnJBbmRLaW5kKHRyYW5zYWN0aW9uTnI6IG51bWJlciwgdHJhbnNhY3Rpb25LaW5kOiBUcmFuc2FjdGlvbktpbmQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlOckFuZEtpbmQodHJhbnNhY3Rpb25LaW5kLCB0cmFuc2FjdGlvbk5yKTtcclxuICAgIGlmICh0cmFuc2FjdGlvbkluZm9SZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgYXdhaXQgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0V2ViU2Vzc2lvblNhbGVzT3JkZXIodHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFdlYlNlc3Npb25TYWxlc09yZGVyKHRyYW5zYWN0aW9uVXVpZCk7XHJcbiAgICBpZiAodHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgJiYgdHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UuaXNTdWNjZXNzKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB0cnlUb0xvY2tUcmFuc2FjdGlvbihpZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHNlY29uZEF0dGVtcHQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFpZCkgeyAvLyBpdCdzIGEgbmV3IHRyYW5zYWN0aW9uLCBubyBuZWVkIHRvIGxvY2tcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9hbHJlYWR5TG9ja2VkKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbG9ja1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkxvY2tSZXN1bHQgPSBhd2FpdCB0aGlzLl9sb2NrVHJhbnNhY3Rpb24oaWQsIHZlcnNpb24pO1xyXG4gICAgaWYgKGxvY2tSZXNwb25zZSkge1xyXG4gICAgICBpZiAoIWxvY2tSZXNwb25zZS5pc0xvY2tTdWNjZXNzKSB7XHJcbiAgICAgICAgaWYgKHNlY29uZEF0dGVtcHQpIHsgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93RXJyb3IoXCJUUkFOU0FDVElPTl9WRVJTSU9OX01JU01BVENIX0VSUk9SXCIsIHRydWUpO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWxvY2tSZXNwb25zZS5pc0xhdGVzdFZlcnNpb24pIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93VG9hc3QoXCJUUkFOU0FDVElPTl9WRVJTSU9OX01JU01BVENIXCIsIHRydWUpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQoaWQpO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmhpZGVUb2FzdEFmdGVyTXMoMzAwMCk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgbG9ja0RldGFpbHM6IHN0cmluZyA9IGAke3RoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0KFwiQllcIil9OiAke2xvY2tSZXNwb25zZS5sb2NrZWRCeX1cclxuICAgICAgICAgICAgICAgICR7dGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXQoXCJTSU5DRVwiLCBmYWxzZSl9ICR7bG9ja1Jlc3BvbnNlLmxvY2tlZFNpbmNlLnRvTG9jYWxlU3RyaW5nKCl9YDtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93RXJyb3IoXCJUUkFOU0FDVElPTl9BTFJFQURZX0xPQ0tFRFwiLCB0cnVlLCBsb2NrRGV0YWlscyk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FscmVhZHlMb2NrZWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25JbmZvKHRyYW5zSWQ6IG51bWJlciwgbGluZUlkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb0hpc3RvcnlbXT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uSW5mbyh0cmFuc0lkLCBsaW5lSWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFJlZlRyYW5zYWN0aW9ucyh0cmFuc0lkOiBudW1iZXIpOiBQcm9taXNlPFJlZlRyYW5zYWN0aW9uW10+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRSZWZUcmFuc2FjdGlvbnModHJhbnNJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VQb3J0YWxMaW5lcyhyZXF1ZXN0OiBHZXRQdXJjaGFzZVBvcnRhbExpbmUpOiBQcm9taXNlPFB1cmNoYXNlUG9ydGFsTGluZVtdPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VQb3J0YWxMaW5lcyhyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzYXZlVHJhbnNhY3Rpb25BbmRDb21taXQocmVzcG9uc2U/OiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gd2UgY2FuIHNhZmVseSBzYXZlL2NvbW1pdCB0aGUgY2hhbmdlc1xyXG4gICAgY29uc3Qgc2F2ZVRyYW5zYWN0aW9uUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5zYXZlVHJhbnNhY3Rpb24oZmFsc2UpO1xyXG4gICAgaWYgKHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlICYmIHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICBhd2FpdCB0aGlzLmNvbW1pdCgpO1xyXG4gICAgICBhd2FpdCB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlKTtcclxuICAgICAgaWYgKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlQWZ0ZXJSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB3ZSBuZWVkIHRvIGRvIGFuIGV4dHJhIGNvbW1pdCB0byByZWxlYXNlIHRoZSBsb2NrXHJcbiAgICAvLyBjb25zdCBjb21taXRTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb21taXQoKTtcclxuICAgIHJldHVybiBzYXZlVHJhbnNhY3Rpb25SZXNwb25zZSAmJiBzYXZlVHJhbnNhY3Rpb25SZXNwb25zZS5pc1N1Y2Nlc3MgLyomJiBjb21taXRTdWNjZXNzKi87XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odmFsdWU6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9oYW5kbGVCZWZvcmVSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih2YWx1ZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbktpbmQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25LaW5kO1xyXG4gICAgdGhpcy5oYXNUcmFuc2FjdGlvbkxpbmVzID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcyAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmxlbmd0aCA+IDA7XHJcbiAgICB0aGlzLl9zZXRBbW91bnQoKTtcclxuICAgIHRoaXMuX2NoZWNrSGVhZGVyU3RhdHVzKCk7XHJcbiAgICB0aGlzLmNoZWNrUmVmVHJhbnNhY3Rpb24oKTsgLy8gdG9kbzogZ2V0IGZyb20gdGhlIGhlYWRlciBzdGF0dXNcclxuICAgIGlmICh0aGlzLmdldFJlbGF0aW9uT25SZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbikge1xyXG4gICAgICBpZiAodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbi5yZWxhdGlvbklkKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlbGF0aW9uIHx8IHRoaXMucmVsYXRpb24ucmVsYXRpb25JZCAhPT0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnJlbGF0aW9uLnJlbGF0aW9uSWQpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2dldFJlbGF0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVsYXRpb25VcGRhdGVkLm5leHQodGhpcy5yZWxhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVsYXRpb24gPSBuZXcgQ3VzdG9tZXJGdWxsT2JqZWN0KCk7XHJcbiAgICAgICAgdGhpcy5yZWxhdGlvbi50eXBlID0gUmVsYXRpb25OYW1lS2luZC5Qcml2YXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmFuc2FjdGlvblVwZGF0ZWQubmV4dCh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbik7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnRyYW5zYWN0aW9uU2V0Lm5leHQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24pO1xyXG4gICAgYXdhaXQgdGhpcy5faGFuZGxlQWZ0ZXJSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9jaGVja0hlYWRlclN0YXR1cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMpIHtcclxuICAgICAgLy9zYWxlcyBvcmRlclxyXG4gICAgICB0aGlzLnB1cmNoYXNlT3JkZXJzQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseU9yZGVyZWQ7XHJcbiAgICAgIHRoaXMuYWxsb2NhdGVHb29kc0NvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlBbGxvY2F0ZWQ7XHJcbiAgICAgIHRoaXMuc2FsZXNPcmRlclBpY2tlZENvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlQaWNrZWQ7XHJcbiAgICAgIHRoaXMuc2FsZXNPcmRlclRvQmVQaWNrZWRDb21wbGV0ZWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5VG9CZVBpY2tlZDtcclxuICAgICAgdGhpcy5kZWxpdmVyeUNvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlEZWxpdmVyZWQ7XHJcbiAgICAgIHRoaXMuaW52b2ljZUNvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlJbnZvaWNlZDtcclxuICAgICAgLy8gcHVyY2hhc2VcclxuICAgICAgdGhpcy5wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseVB1cmNoYXNlQ29uZmlybWVkO1xyXG4gICAgICB0aGlzLnJlY2VpdmVHb29kc0NvbXBsZXRlZCA9IHRoaXMuaW50ZXJuYWxQYXJhbWV0ZXJQYWtCaW5uZW4gPyB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5UmVjZWl2ZWRVblByb2Nlc3NlZCA6IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlSZWNlaXZlZDtcclxuICAgICAgdGhpcy5zYWxlc09yZGVyQ29uZmlybWF0aW9uU2VudCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzQ29uZmlybWF0aW9uU2VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGVja1JlZlRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX3Nob3VsZENoZWNrUmVmVHJhbnNhY3Rpb25zKCkpIHtcclxuICAgICAgY29uc3QgdHJhbnNJZDogbnVtYmVyID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkO1xyXG4gICAgICBpZiAoIXRyYW5zSWQpIHsgLy8gbmV3IHRyYW5zYWN0aW9uLCBnZXQgb3V0XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFydGljbGVUcmFuc0xpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcih0ID0+IHQuaXNBcnRpY2xlKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnRpY2xlVHJhbnNMaW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCByZWZUcmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uUmVmVHJhbnNhY3Rpb25bXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zTGluZTogVHJhbnNhY3Rpb25MaW5lSW5mbyA9IGFydGljbGVUcmFuc0xpbmVzW2ldO1xyXG4gICAgICAgIHRyYW5zTGluZS5yZWZUcmFuc2FjdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmdldFJlZlRyYW5zYWN0aW9ucyh0cmFuc0lkKS50aGVuKGFzeW5jIChyZWZzOiBSZWZUcmFuc2FjdGlvbltdKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVmcyAmJiByZWZzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2FsZXNPcmRlcnM6IFJlZlRyYW5zYWN0aW9uW10gPSByZWZzLmZpbHRlcihyID0+IHIucmVmVHJhbnNhY3Rpb25UeXBlID09PSBUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlcik7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2FsZXNPcmRlcnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0OiBUcmFuc2FjdGlvblNlYXJjaFZpZXdSZXF1ZXN0ID0gbmV3IFRyYW5zYWN0aW9uU2VhcmNoVmlld1JlcXVlc3QoKTtcclxuICAgICAgICAgICAgICByZXF1ZXN0LnRyYW5zYWN0aW9uS2luZCA9IHNhbGVzT3JkZXJzW2pdLnJlZlRyYW5zYWN0aW9uVHlwZTtcclxuICAgICAgICAgICAgICByZXF1ZXN0LnRyYW5zTnIgPSBwYXJzZUludChzYWxlc09yZGVyc1tqXS5yZWZUcmFuc2FjdGlvbk5yKTtcclxuICAgICAgICAgICAgICBjb25zdCB0cmFuc1NlYXJjaFJlc3VsdDogVHJhbnNhY3Rpb25TZWFyY2hSZXN1bHQgPSBhd2FpdCB0aGlzLnNlYXJjaFRyYW5zYWN0aW9ucyhyZXF1ZXN0KTtcclxuICAgICAgICAgICAgICBpZiAodHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zICYmIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZWZUcmFuc2FjdGlvbnMucHVzaChuZXcgVHJhbnNhY3Rpb25SZWZUcmFuc2FjdGlvbihcclxuICAgICAgICAgICAgICAgICAgdHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zWzBdLnRyYW5zSWQsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS50cmFuc05yLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS50cmFuc2FjdGlvbktpbmQsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS5yZWxhdGlvbk5yLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc1NlYXJjaFJlc3VsdC50cmFuc2FjdGlvbnNbMF0ucmVsYXRpb25OYW1lKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRyYW5zTGluZS5yZWZUcmFuc2FjdGlvbnMgPSByZWZUcmFuc2FjdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnRyYW5zYWN0aW9uTGluZVJlZlRyYW5zYWN0aW9uc0NoYW5nZWQubmV4dCh0cmFuc0xpbmUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVIZWFkZXJUcmFuc2FjdGlvbkRlcG9zaXRBbW91bnQodXVpZDogc3RyaW5nLCBhbW91bnQ6IG51bWJlciwgc2F2ZVRyYW5zYWN0aW9uOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gIH1cclxuICBwdWJsaWMgdXBkYXRlSGVhZGVyVHJhbnNhY3Rpb25EZXBvc2l0UGVyY2VudGFnZSh1dWlkOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBzYXZlVHJhbnNhY3Rpb246IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRMb2NrVHJhbnNhY3Rpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hbHJlYWR5TG9ja2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfaGFuZGxlQmVmb3JlUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2hhbmRsZUFmdGVyUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnJlbGF0aW9uKSB7XHJcbiAgICAgIHRoaXMucmVsYXRpb24gPSBuZXcgQ3VzdG9tZXJGdWxsT2JqZWN0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucmVsYXRpb24ucmVsYXRpb25JZCkge1xyXG4gICAgICBpZiAodGhpcy5yZWxhdGlvbi5yZWxhdGlvblR5cGUgPT09IFJlbGF0aW9uS2luZC5DdXN0b21lcikge1xyXG4gICAgICAgICh0aGlzLnJlbGF0aW9uIGFzIEN1c3RvbWVyRnVsbE9iamVjdCkucmVsYXRpb25TdGF0dXMgPSBSZWxhdGlvblN0YXR1cy5SZWd1bGFyQ3VzdG9tZXI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZWxhdGlvbi5zdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5wcmVmZXJyZWREZWxpdmVyeURhdGUyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnByZWZlcnJlZERlbGl2ZXJ5RGF0ZTIgPSBcIj1cIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvY2tUcmFuc2FjdGlvbih0cmFuc0lkOiBudW1iZXIsIHZlcnNpb246IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25Mb2NrUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IubG9ja1RyYW5zYWN0aW9uQnlJZCh0cmFuc0lkLCB2ZXJzaW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFJlbGF0aW9uQ2xhc3ModHJhbnNhY3Rpb25LaW5kOiBUcmFuc2FjdGlvbktpbmQpOiB0eXBlb2YgUmVsYXRpb24ge1xyXG4gICAgaWYgKHRoaXMuX3JlbGF0aW9uQ2xhc3NGcm9tVHJhbnNhY3Rpb25LaW5kLmhhcyh0cmFuc2FjdGlvbktpbmQpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9yZWxhdGlvbkNsYXNzRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodHJhbnNhY3Rpb25LaW5kKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBSZWxhdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFJlbGF0aW9uKHJlbGF0aW9uOiBSZWxhdGlvblNtYWxsT2JqZWN0KTogdm9pZCB7XHJcbiAgICBpZiAocmVsYXRpb24pIHtcclxuICAgICAgdGhpcy5yZWxhdGlvblNlcnZpY2UuZ2V0UmVsYXRpb25OdW1iZXIocmVsYXRpb24ucmVsYXRpb25JZCkudGhlbigocmVsYXRpb25Ocjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlbGF0aW9uLnJlbGF0aW9uVHlwZSA9PT0gUmVsYXRpb25LaW5kLkN1c3RvbWVyKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbGF0aW9uU2VydmljZS5nZXRDdXN0b21lckZ1bGxPYmplY3QocGFyc2VJbnQocmVsYXRpb25OciwgMCkpLnRoZW4oKGN1c3RvbWVyOiBDdXN0b21lckZ1bGxPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgaWYgKGN1c3RvbWVyLmFkZHJlc3NlcyAmJiBjdXN0b21lci5hZGRyZXNzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGN1c3RvbWVyLmFkZHJlc3Nlcy5zb3J0KChhLCBiKSA9PiBhLnNlcXVlbmNlIDwgYi5zZXF1ZW5jZSA/IC0xIDogMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZWxhdGlvbiA9IGN1c3RvbWVyO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbi5yZWxhdGlvblR5cGUgPT09IFJlbGF0aW9uS2luZC5TdXBwbGllcikge1xyXG4gICAgICAgICAgdGhpcy5yZWxhdGlvblNlcnZpY2UuZ2V0U3VwcGxpZXJGdWxsT2JqZWN0KHBhcnNlSW50KHJlbGF0aW9uTnIsIDApKS50aGVuKChzdXBwbGllcjogU3VwcGxpZXJGdWxsT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdXBwbGllci5hZGRyZXNzZXMgJiYgc3VwcGxpZXIuYWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBzdXBwbGllci5hZGRyZXNzZXMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSA8IGIuc2VxdWVuY2UgPyAtMSA6IDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb24gPSBzdXBwbGllcjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbGF0aW9uVXBkYXRlZC5uZXh0KG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0QW1vdW50KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMpIHtcclxuICAgICAgdGhpcy5hcnRpY2xlQW1vdW50ID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcy5maWx0ZXIodCA9PiB0LmxpbmVUeXBlID09PSBUcmFuc2FjdGlvbkxpbmVUeXBlLkFydGljbGVMaW5lKS5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG91bGRDaGVja1JlZlRyYW5zYWN0aW9ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmICEhdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcyAmJlxyXG4gICAgICAodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uS2luZCA9PT0gVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIgfHxcclxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25LaW5kID09PSBUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciB8fFxyXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby50cmFuc2FjdGlvbktpbmQgPT09IFRyYW5zYWN0aW9uS2luZC5TYWxlc1F1b3RhdGlvbik7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|