ng-easycommerce 0.0.658-beta.1 → 0.0.660-beta.1
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/README.md +58 -22
- package/assets/ec-i18n/en.json +1 -3
- package/assets/ec-i18n/es.json +1 -3
- package/bundles/ng-easycommerce.umd.js +515 -181
- package/bundles/ng-easycommerce.umd.js.map +1 -1
- package/bundles/ng-easycommerce.umd.min.js +1 -1
- package/bundles/ng-easycommerce.umd.min.js.map +1 -1
- package/esm2015/lib/core.consts.js +1 -6
- package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +3 -5
- package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +5 -8
- package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +8 -13
- package/esm2015/lib/ec-component/collection-ec/collection-ec.component.js +450 -14
- package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +3 -30
- package/esm2015/lib/ec-component/product-ec/product-ec.component.js +2 -1
- package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +5 -8
- package/esm2015/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +3 -1
- package/esm2015/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +3 -3
- package/esm2015/lib/ec-pipe/ec-currency-symbol.pipe.js +1 -2
- package/esm2015/lib/services/cart.service.js +12 -27
- package/esm2015/lib/services/currency.service.js +7 -43
- package/esm5/lib/core.consts.js +1 -6
- package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +3 -5
- package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +5 -8
- package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +8 -13
- package/esm5/lib/ec-component/collection-ec/collection-ec.component.js +458 -13
- package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +3 -48
- package/esm5/lib/ec-component/product-ec/product-ec.component.js +2 -1
- package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +5 -8
- package/esm5/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +3 -1
- package/esm5/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +3 -3
- package/esm5/lib/ec-pipe/ec-currency-symbol.pipe.js +1 -2
- package/esm5/lib/services/cart.service.js +12 -27
- package/esm5/lib/services/currency.service.js +7 -43
- package/fesm2015/ng-easycommerce.js +502 -159
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +516 -182
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/core.consts.d.ts +0 -5
- package/lib/ec-component/account-ec/order-ec/order-ec.component.d.ts +0 -1
- package/lib/ec-component/cart-ec/cart-ec.component.d.ts +0 -1
- package/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.d.ts +1 -1
- package/lib/ec-component/collection-ec/collection-ec.component.d.ts +34 -4
- package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +0 -3
- package/lib/ec-component/sidebar-ec/sidebar-ec.component.d.ts +0 -1
- package/lib/services/cart.service.d.ts +2 -2
- package/lib/services/currency.service.d.ts +2 -14
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -51,7 +51,6 @@ let CartEcComponent = class CartEcComponent extends ComponentHelper {
|
|
|
51
51
|
this.creditAccountShowPrices = null;
|
|
52
52
|
this.showTaxLegend = false;
|
|
53
53
|
this.cartLoading = false;
|
|
54
|
-
this.enableFieldNotesInArticleFile = false;
|
|
55
54
|
this.toDecimal = (amount) => this.consts.toDecimal(amount);
|
|
56
55
|
this.redirectRegister = () => this.router.navigateByUrl(`/auth/login`);
|
|
57
56
|
this.getVariants = product => {
|
|
@@ -113,12 +112,11 @@ let CartEcComponent = class CartEcComponent extends ComponentHelper {
|
|
|
113
112
|
this.cartService.promotions.subscribe(promotions => this.promotions = promotions);
|
|
114
113
|
// console.log(this.cartService.getTaxes());
|
|
115
114
|
this.channelConfigService.channelConfig$.subscribe(channel => {
|
|
116
|
-
var _a, _b, _c, _d, _e, _f, _g, _h
|
|
115
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
117
116
|
this.hidePrices = (_b = (_a = channel) === null || _a === void 0 ? void 0 : _a.hidePrices, (_b !== null && _b !== void 0 ? _b : false));
|
|
118
117
|
this.hideDiscounts = (_d = (_c = channel) === null || _c === void 0 ? void 0 : _c.hideDiscounts, (_d !== null && _d !== void 0 ? _d : false));
|
|
119
118
|
this.hideTaxes = (_f = (_e = channel) === null || _e === void 0 ? void 0 : _e.hideTaxes, (_f !== null && _f !== void 0 ? _f : false));
|
|
120
119
|
this.showTaxLegend = (_h = (_g = channel) === null || _g === void 0 ? void 0 : _g.showTaxLegend, (_h !== null && _h !== void 0 ? _h : false));
|
|
121
|
-
this.enableFieldNotesInArticleFile = (_k = (_j = channel) === null || _j === void 0 ? void 0 : _j.enableFieldNotesInArticleFile, (_k !== null && _k !== void 0 ? _k : false));
|
|
122
120
|
if (this.hidePrices) {
|
|
123
121
|
this.router.navigate(['/']);
|
|
124
122
|
}
|
|
@@ -132,7 +130,7 @@ let CartEcComponent = class CartEcComponent extends ComponentHelper {
|
|
|
132
130
|
this.ecOnInit();
|
|
133
131
|
}
|
|
134
132
|
actualizarCantidad(item, cantidad, stock, id) {
|
|
135
|
-
var _a
|
|
133
|
+
var _a;
|
|
136
134
|
if (this.cartLoading) {
|
|
137
135
|
return;
|
|
138
136
|
}
|
|
@@ -152,11 +150,10 @@ let CartEcComponent = class CartEcComponent extends ComponentHelper {
|
|
|
152
150
|
newQuantity = Math.round(newQuantity / step) * step;
|
|
153
151
|
}
|
|
154
152
|
}
|
|
155
|
-
const keepSameComment = (_c = (_b = item) === null || _b === void 0 ? void 0 : _b.comments, (_c !== null && _c !== void 0 ? _c : undefined));
|
|
156
153
|
if (id) {
|
|
157
154
|
this.isDisabled = true; // Actualiza la propiedad vinculada a `[disabled]`
|
|
158
155
|
if (newQuantity > 0 && newQuantity <= stock) {
|
|
159
|
-
this.cartService.updateItemQuantity(item, newQuantity
|
|
156
|
+
this.cartService.updateItemQuantity(item, newQuantity);
|
|
160
157
|
}
|
|
161
158
|
else {
|
|
162
159
|
this.toastrService.show('out-of-stock-actually');
|
|
@@ -167,7 +164,7 @@ let CartEcComponent = class CartEcComponent extends ComponentHelper {
|
|
|
167
164
|
}
|
|
168
165
|
else {
|
|
169
166
|
if (newQuantity > 0 && newQuantity <= stock) {
|
|
170
|
-
this.cartService.updateItemQuantity(item, newQuantity
|
|
167
|
+
this.cartService.updateItemQuantity(item, newQuantity);
|
|
171
168
|
}
|
|
172
169
|
else {
|
|
173
170
|
this.toastrService.show('out-of-stock-actually');
|
|
@@ -429,4 +426,4 @@ CartEcComponent = __decorate([
|
|
|
429
426
|
})
|
|
430
427
|
], CartEcComponent);
|
|
431
428
|
export { CartEcComponent };
|
|
432
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM3RSxJQUFhLGVBQWUsR0FBNUIsTUFBYSxlQUFnQixTQUFRLGVBQWU7SUFzQmhELFlBQ1csV0FBd0IsRUFDeEIsV0FBd0IsRUFDckIsTUFBaUIsRUFDcEIsZUFBZ0MsRUFDaEMsTUFBYyxFQUNkLFlBQTRCLEVBQ3pCLGFBQTJCLEVBQzlCLGlCQUFvQyxFQUNwQyxvQkFBMEM7UUFDakQsS0FBSyxFQUFFLENBQUM7UUFURCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNyQixXQUFNLEdBQU4s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QyxDQUFDO1FBRXpFLElBQUksZUFBZSxHQUFHLEdBQUcsa0JBQWtCLE9BQU8sQ0FBQztRQUNuRCxPQUFPLGVBQWUsQ0FBQztJQUMzQixDQUFDO0NBU0osQ0FBQTs7WUF2YTJCLFdBQVc7WUFDWCxXQUFXO1lBQ2IsU0FBUztZQUNILGVBQWU7WUFDeEIsTUFBTTtZQUNBLGNBQWM7WUFDVixZQUFZO1lBQ1gsaUJBQWlCO1lBQ2Qsb0JBQW9COztBQS9CNUMsZUFBZTtJQUwzQixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsYUFBYTtRQUN2QixZQUF1Qzs7S0FFMUMsQ0FBQztHQUNXLGVBQWUsQ0E4YjNCO1NBOWJZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcclxuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwvYnMtbW9kYWwtcmVmLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tIFwiLi4vLi4vY29yZS5jb25zdHNcIjtcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9kdWN0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9kdWN0cy9wcm9kdWN0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCIuLi8uLi91dGlscy90b2FzdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGludGVydmFsLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQWRkcmVzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGVja291dC9hZGRyZXNzaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhbm5lbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtY2FydC1lYycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FydC1lYy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jYXJ0LWVjLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENhcnRFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICAgIHB1YmxpYyB2YXJpYW50c1RvU2hvdzogc3RyaW5nW10gPSBbJ1RBTExFJywgJ0NPTE9SJ107XHJcbiAgICBwdWJsaWMgaXNMb2dnZWRJbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIG1lZGlhVXJsID0gJyc7XHJcbiAgICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWYgfCBudWxsO1xyXG4gICAgcHVibGljIHByb21vdGlvbnMgPSBbXTtcclxuICAgIHB1YmxpYyBpdGVtczogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgcHJpdmF0ZSBjYXJnYW5kbzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNoYW5uZWw6IGFueSA9IHt9O1xyXG4gICAgcHVibGljIHVwZGF0ZVN0b2NrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZXhpdFVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoaWRlUHJpY2VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhpZGVUYXhlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNyZWRpdEFjY291bnRTaG93UHJpY2VzOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgc2hvd1RheExlZ2VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNhcnRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIGNvbnN0czogQ29uc3RhbnRzLFxyXG4gICAgICAgIHB1YmxpYyBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHVibGljIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgYWRkcmVzc2luZ1NlcnZpY2U6IEFkZHJlc3NpbmdTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLm1lZGlhVXJsID0gdGhpcy5jb25zdHMubWVkaWFVcmwoKTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTG9nZ2VkSW4oKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UucHJvbW90aW9ucy5zdWJzY3JpYmUocHJvbW90aW9ucyA9PiB0aGlzLnByb21vdGlvbnMgPSBwcm9tb3Rpb25zKTtcclxuICAgICAgICAvLyAgICBjb25zb2xlLmxvZyh0aGlzLmNhcnRTZXJ2aWNlLmdldFRheGVzKCkpO1xyXG5cclxuICAgICAgICB0aGlzLmNoYW5uZWxDb25maWdTZXJ2aWNlLmNoYW5uZWxDb25maWckLnN1YnNjcmliZShjaGFubmVsID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gY2hhbm5lbD8uaGlkZVByaWNlcyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gY2hhbm5lbD8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSBjaGFubmVsPy5oaWRlVGF4ZXMgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IGNoYW5uZWw/LnNob3dUYXhMZWdlbmQgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPSBjaGFubmVsPy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA/PyBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGVQcmljZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWRpdEFjY291bnRTaG93UHJpY2VzID0gc2hvd1ByaWNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UubG9hZGluZy5zdWJzY3JpYmUoaXNMb2FkaW5nID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYXJ0TG9hZGluZyA9IGlzTG9hZGluZztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVjT25Jbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdG9EZWNpbWFsID0gKGFtb3VudCkgPT4gdGhpcy5jb25zdHMudG9EZWNpbWFsKGFtb3VudCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIGFjdHVhbGl6YXJDYW50aWRhZChpdGVtOiBhbnksIGNhbnRpZGFkOiBudW1iZXIgfCBzdHJpbmcsIHN0b2NrOiBudW1iZXIsIGlkPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FydExvYWRpbmcpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtdWx0aXBsZVF1YW50aXR5ID0gaXRlbS5wcm9kdWN0Py52YXJpYW50cyAmJiBpdGVtLnByb2R1Y3QudmFyaWFudHMubGVuZ3RoID4gMCA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5IDogMDtcclxuICAgICAgICBjb25zdCBzdGVwID0gbXVsdGlwbGVRdWFudGl0eSAmJiBtdWx0aXBsZVF1YW50aXR5ID4gMCA/IG11bHRpcGxlUXVhbnRpdHkgOiAxO1xyXG5cclxuICAgICAgICBsZXQgbmV3UXVhbnRpdHk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYW50aWRhZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBwYXJzZUludChjYW50aWRhZCwgMTApO1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgJSBzdGVwICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IHN0ZXAgfSk7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuZXdRdWFudGl0eSA9IGNhbnRpZGFkO1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgJSBzdGVwICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGtlZXBTYW1lQ29tbWVudCA9IGl0ZW0/LmNvbW1lbnRzID8/IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHRydWU7IC8vIEFjdHVhbGl6YSBsYSBwcm9waWVkYWQgdmluY3VsYWRhIGEgYFtkaXNhYmxlZF1gXHJcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSA+IDAgJiYgbmV3UXVhbnRpdHkgPD0gc3RvY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gRnVuY2nDs24gZGUgZmxlY2hhIHBhcmEgcHJlc2VydmFyIGVsIGNvbnRleHRvXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgbmV3UXVhbnRpdHksIGtlZXBTYW1lQ29tbWVudCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICByZWRpcmVjdENoZWNrb3V0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnRTZXJ2aWNlLmhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2NoZWNrb3V0YCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vIHNlIHB1ZWRlIHJlZGlyaWdpciBhbCBjaGVja291dCBkZWJpZG8gYSB1bmEgdmFsaWRhY2nDs24gZmFsbGlkYS5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVkaXJlY3RSZWdpc3RlciA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9hdXRoL2xvZ2luYClcclxuXHJcbiAgICBvcGVuTW9kYWwodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwgeyBjbGFzczogJ21vZGFsLXhsJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZGlyZWN0RGV0YWlsUHJvZHVjdChwcm9kdWN0KSB7XHJcbiAgICAgICAgbGV0IHZhcmlhbnQgPSBwcm9kdWN0LnZhcmlhbnRzWzBdXHJcbiAgICAgICAgbGV0IHBhdGggPSAnL3Byb2R1Y3QvJ1xyXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5jb2RlXHJcbiAgICAgICAgcGF0aCArPSB2YXJpYW50Lm9wdGlvbnMubGVuZ3RoID8gXCI/dmFyaWFudD10cnVlXCIgOiBcIlwiXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChwYXRoKVxyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdERhdGUoZGF0ZSkge1xyXG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZSksXHJcbiAgICAgICAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXHJcbiAgICAgICAgICAgIGRheSA9ICcnICsgZC5nZXREYXRlKCksXHJcbiAgICAgICAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gICAgICAgIGlmIChtb250aC5sZW5ndGggPCAyKVxyXG4gICAgICAgICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgICAgIGlmIChkYXkubGVuZ3RoIDwgMilcclxuICAgICAgICAgICAgZGF5ID0gJzAnICsgZGF5O1xyXG5cclxuICAgICAgICByZXR1cm4gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjYXJnYU1vZGFsKGl0ZW0pIHtcclxuXHJcbiAgICAgICAgLy8gT2J0aWVuZSBsYXMgc2VkZXMgZGVsIGNsaWVudGVcclxuICAgICAgICBjb25zdCBzZWRlcyA9IGF3YWl0IHRoaXMuY2FydFNlcnZpY2UuZ2V0QWRkcmVzc0Jvb2soKTtcclxuXHJcbiAgICAgICAgLy8gQ3JlbyB1bmEgc2VyaWUgZGUgdmFyaWFibGVzIHF1ZSB2b3kgYSBuZWNlc2l0YXIsIGlkIHBhcmEgY29udHJvbGFyIGxhcyB2dWVsdGFzIHF1ZSBkYSB5IGN1YW50YXMgbGluZWFzIGhheSB5IGFsbElEIHBhcmEgYWxtYWNlbmFyIGxvcyBJRCBkZSBsb3MgbG90ZXMuXHJcbiAgICAgICAgdmFyIGlkID0gMTtcclxuICAgICAgICB2YXIgdGhpc18gPSB0aGlzO1xyXG4gICAgICAgIHZhciBhbGxJRCA9IFtdO1xyXG5cclxuICAgICAgICAvLyBBw7FhZGUgbG9zIGRhdG9zIGFsIGVuY2FiZXphZG8gZGVsIE1vZGFsXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuY2FiZXphZG9Nb2RhbCcpLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cInRpdGxlIHRleHQtZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZSBoNSBkLWJsb2NrIG0tMCBwLTAgbS0wIHAtMFwiPjxwIGNsYXNzPVwibm9tYnJlIG1iLTBcIiBpZD1cInByb2R1Y3ROYW1lXCI+JyArIGl0ZW1bJ3Byb2R1Y3QnXVsnbmFtZSddICsgJzwvcD48c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBwcy0yIG1zLTFcIiBpZD1cInByb2R1Y3RSZWZcIj5SZWY6JyArIGl0ZW1bJ3ZhcmlhbnRfaWQnXSArICc8L3NtYWxsPjwvYT4nO1xyXG5cclxuICAgICAgICAvLyBCb3JyYW1vcyB0b2RvcyBsb3MgZGF0b3MgZGUgbG9zIGxvdGVzIGFudGVyaW9yZXNcclxuICAgICAgICB2YXIgYm9keVRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb3RfYm9keV90YWJsZVwiKSBhcyBIVE1MVGFibGVFbGVtZW50O1xyXG4gICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcclxuXHJcbiAgICAgICAgLy8gUmVjb3JyZSB0b2RvcyBsb3MgYXJ0aWN1bG9zIHkgZW5jdWVudHJhIHNpIHRpZW5lbiBsb3RlcyBvIG5vLCBzaSB0aWVuZSBjcmVhIGxhcyBsaW5lYXNcclxuICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5nZXRDYXJ0MigpLmZvckVhY2goaSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoaVsnaXRlbV9pZCddID09IGl0ZW0uaXRlbV9pZCAmJiBpWydsb3QnXSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgYm9keVRhYmxlLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaVsnbG90J10uZm9yRWFjaChsb3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwyID0gcm93Lmluc2VydENlbGwoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw1ID0gcm93Lmluc2VydENlbGwoNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGxvdFsnZGF0ZV9yZXF1ZXN0J10pKTtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiJyArIGxvdC5pZCArICdcIiBkaXNhYmxlZD4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIGxvdC5xdWFudGl0eSArICdcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInICsgbG90LnF1YW50aXR5ICsgJ1wiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIHZhbHVlPVwiJyArIHRoaXMuZm9ybWF0RGF0ZShkYXRlKSArICdcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZGUuaWQgPT0gbG90LnNoaXBwaW5nX2FkZHJlc3NfaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCIgc2VsZWN0ZWQ+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCI+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcclxuICAgICAgICAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiB2YWx1ZT1cIicgKyBsb3QuaWQgKyAnXCIgY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0b24+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcclxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5jb2xTcGFuID0gNjtcclxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIicgKyBsb3Qubm90ZXMgKyAnXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhbGxJRC5wdXNoKGxvdFsnaWQnXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25BZ3JlZ2FyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIC8vIFNlIGNhbGN1bGEgbGEgY2FudGlkYWQgeSBlbCBjb250YWRvciBwYXJhIHF1ZSBubyBleGNlZGEgbGEgY2FudGlkYWQgZGUgbGEgbGluZWEgYWwgY3JlYXIgdW4gbnVldm8gbG90ZS5cclxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkQWN0dWFsID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRBY3R1YWwgPSBjYW50aWRhZEFjdHVhbCArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gU2UgYcOxYWRlIGxhIGxpbmVhIHNpZW1wcmUgeSBjdWFuZG8gbGEgY2FudGlkYWQgcmVzdGFudGUgbm8gc2VhIGNlcm8uXHJcbiAgICAgICAgICAgIGlmIChjYW50aWRhZEFjdHVhbCA8IGl0ZW1bJ3F1YW50aXR5J10pIHtcclxuICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDEgPSByb3cuaW5zZXJ0Q2VsbCgwKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDQgPSByb3cuaW5zZXJ0Q2VsbCgzKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XHJcbiAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiUGVuZHQuXCIgZGlzYWJsZWQ+JztcclxuICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIChpdGVtWydxdWFudGl0eSddIC0gY2FudGlkYWRBY3R1YWwpICsgJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicgKyAoaXRlbVsncXVhbnRpdHknXSAtIGNhbnRpZGFkQWN0dWFsKSArICdcIj4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPVwiZGVsaXZlcnlEYXRlJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxyXG4gICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHsgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nOyB9KTtcclxuICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XHJcbiAgICAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIHZhbHVlPVwiVmVyXCI+PC9pbnB1dD4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0PjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHZhciBmaWxhMiA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxyXG4gICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XHJcbiAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3QtbWF4LXF1YW50aXR5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEN1YW5kbyBzZSBwdWxzYSBlbCBib3RvbiBwYXJhIGd1YXJkYXIgZWwgbG90ZSByZWNvcnJlIGxhIGZ1bmNpb24geSBlbCBmb3IgLCByZWNvcnJlIGxpbmVhIGEgbGluZWEgeSBsYW56YSBlbCBlbmRwb2ludCBjb24gdW5hIHBhdXNhIHBhcmEgcXVlIG5vIHNlIHBpZXJkYSBuaW5ndW5vIHkgbm8gc2UgcXVlZGUgcGlsbGFkby5cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25HdWFyZGFyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2aW5nJyk7XHJcbiAgICAgICAgICAgIHRoaXNfLmNhcmdhbmRvID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIGxvdElEID0gJyc7XHJcbiAgICAgICAgICAgIHZhciBjYW50aWRhZExvdGVzID0gMDtcclxuICAgICAgICAgICAgLy9Db250cm9sYSBxdWUgbGFzIGNhbnRpZGFkZXMgZGUgbG9zIGxvdGVzIG5vIHNlYSBzdXBlcmlvciBhIGxhIGRlbCBwcm9kdWN0byBlbiBlbCBjYXJyaXRvLlxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW50aWRhZExvdGVzID0gY2FudGlkYWRMb3RlcyArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0ucXVhbnRpdHkgPj0gY2FudGlkYWRMb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2FudGlkYWRMb3Rlcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgeSA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudGl0eSA9IHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGl2ZXJ5RGF0ZSA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGl2ZXJ5RGF0ZVwiICsgaW5kZXgpKS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzcyA9ICQoXCIjc2hpcHBpbmdBZGRyZXNzXCIgKyBpbmRleCkudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RlcyA9ICQoXCIjbm90ZXNcIiArIGluZGV4KS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzc05hbWUgPSAkKCcjc2hpcHBpbmdBZGRyZXNzJyArIGluZGV4ICsgJyBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZFwiICsgaW5kZXgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb3RJRCA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXlJbmRleCA9IGFsbElELmluZGV4T2YocGFyc2VJbnQobG90SUQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxJRC5zcGxpY2UobXlJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb3RJRCA9PSAnUGVuZHQuJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbnVldm8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIDAsIGl0ZW0uaXRlbV9pZCwgcXVhbnRpdHksIGl0ZW0ucHJvZHVjdC5wcmljZSwgaXRlbS5xdWFudGl0eSwgaXRlbS5kaXNjb3VudCwgaXRlbS5wcm9kdWN0LnByaWNlICogcXVhbnRpdHksICduZXcnLCBkZWxpdmVyeURhdGUsIG5vdGVzLCBwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLCBzaGlwcGluZ0FkZHJlc3NOYW1lLCAnbmV3bG90Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG90SUQgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG90SUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgcGFyc2VJbnQobG90SUQpLCBpdGVtLml0ZW1faWQsIHF1YW50aXR5LCBpdGVtLnByb2R1Y3QucHJpY2UsIGl0ZW0ucXVhbnRpdHksIGl0ZW0uZGlzY291bnQsIGl0ZW0ucHJvZHVjdC5wcmljZSAqIHF1YW50aXR5LCAnZWRpdGVkJywgZGVsaXZlcnlEYXRlLCBub3RlcywgcGFyc2VJbnQoc2hpcHBpbmdBZGRyZXNzKSwgc2hpcHBpbmdBZGRyZXNzTmFtZSwgJ2VkaXRsb3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYWxsSUQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdib3JyYXInKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgZWxlbWVudCwgMCwgMCwgMCwgMCwgMCwgMCwgJ2RlbGV0ZScsIDAsICcnLCAwLCAnZGVsZXRlJywgJ2RlbGV0ZWxvdCcpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FydFNlcnZpY2UubG9hZENhcnRCeVRva2VuKHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpKTsgfSwgMzAwICogeSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LXNhdmVkJyk7IH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy5jYXJnYW5kbyA9IGZhbHNlIH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnTGEgY2FudGlkYWQgZGUgbG9zIGxvdGVzIGVzIHN1cGVyaW9yIGEgbGEgY2FudGlkYWQgZGVsIHByb2R1Y3RvLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNib3RvbkJvcnJhcicsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzKTtcclxuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VNb2RhbChpZCkge1xyXG4gICAgICAgICQoJyMnICsgaWQpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tTdG9jayhpdGVtKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFudC5zdG9jaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNvbG8gc2UgZWplY3V0YSBzaSBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUFsbFN0b2NrKCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBEZWZpbmUgbGEgc3VzY3JpcGNpw7NuIGFudGVzIGRlIHVzYXJsYVxyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnRJdGVtcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgaXRlbS5wcm9kdWN0LnZhcmlhbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZGVsZXRlQ2FydEl0ZW0oaXRlbSwgZmFsc2UpOyAvLyBCb3JyYSBlbCBhcnTDrWN1bG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnF1YW50aXR5ID4gdmFyaWFudC5zdG9jaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogdmFyaWFudC5zdG9jayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAgLy8gRGVzdXNjcsOtYmV0ZSBhbnRlcyBkZSBhY3R1YWxpemFyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEFsbFRvQ2FydChpdGVtcyk7ICAvLyBBY3R1YWxpemEgZWwgY2Fycml0b1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leGl0VXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMudXBkYXRlQWxsU3RvY2soKTsgIC8vIFZ1ZWx2ZSBhIHZlcmlmaWNhciBlbCBzdG9ja1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBnZXRWYXJpYW50cyA9IHByb2R1Y3QgPT4ge1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHByb2R1Y3QucHJvZHVjdFxyXG5cclxuICAgICAgICBpZiAoaXRlbS52YXJpYW50cyAmJiBpdGVtLnZhcmlhbnRzLmxlbmd0aCAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMgJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IGl0ZW0udmFyaWFudHNbMF0ub3B0aW9uc1xyXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHRoaXMudmFyaWFudHNUb1Nob3cuZmluZChuYW1lID0+IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpXHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zTWFwID0gW11cclxuICAgICAgICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaCgoZW50cnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uQWRkZWQgPSBmYWxzZTsgIC8vIFZhcmlhYmxlIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgaW5zZXJjaW9uZXNcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uMi52YWx1ZXMuZm9yRWFjaChjb2xvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yLmNvZGUgPT0gb3B0aW9uW2VudHJ5XSAmJiAhb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHsgbmFtZTogZW50cnksIHZhbHVlOiBvcHRpb25bZW50cnldLCBpbWFnZTogY29sb3IuaW1hZ2UsIG1vYmlsZUltYWdlOiBjb2xvci5tb2JpbGVJbWFnZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlOyAvLyBNYXJjYXIgb3BjacOzbiBhZ3JlZ2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgbm8gc2UgYcOxYWRpw7MgbGEgb3BjacOzbiBkZSBDT0xPUiwgbWFuZWphciBvdHJhcyBvcGNpb25lc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbjIuY29kZSAhPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9uW2VudHJ5XVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVEaXNjb3VudE1lc3NhZ2Uoc2FsZXByaWNlOiBudW1iZXIsIHByaWNlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChpc05hTihzYWxlcHJpY2UpIHx8IGlzTmFOKHByaWNlKSB8fCBzYWxlcHJpY2UgPj0gcHJpY2UgfHwgc2FsZXByaWNlIDw9IDAgfHwgcHJpY2UgPD0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGlzY291bnRQZXJjZW50YWdlID0gTWF0aC5yb3VuZCgoKHByaWNlIC0gc2FsZXByaWNlKSAvIHByaWNlKSAqIDEwMCk7XHJcblxyXG4gICAgICAgIGxldCBkaXNjb3VudE1lc3NhZ2UgPSBgJHtkaXNjb3VudFBlcmNlbnRhZ2V9JSBPRkZgO1xyXG4gICAgICAgIHJldHVybiBkaXNjb3VudE1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICBnZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbm5lbC50eXBlID09ICdiMmInID8gdGhpcy5jaGFubmVsLndob2xlc2FsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgOiB0aGlzLmNoYW5uZWwucmV0YWlsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZXhjZWVkc01pbmltdW1BbW91bnQgPSAodmFsdWU6IG51bWJlcikgPT4gdmFsdWUgPj0gdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSA/IHRoaXMucmVkaXJlY3RDaGVja291dCgpIDogdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3F1YW50aXR5LW5vdC1leGNlZWRlZCcsIHsgYW1vdW50OiB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpIH0pXHJcblxyXG5cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
|
|
429
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM3RSxJQUFhLGVBQWUsR0FBNUIsTUFBYSxlQUFnQixTQUFRLGVBQWU7SUFxQmhELFlBQ1csV0FBd0IsRUFDeEIsV0FBd0IsRUFDckIsTUFBaUIsRUFDcEIsZUFBZ0MsRUFDaEMsTUFBYyxFQUNkLFlBQTRCLEVBQ3pCLGFBQTJCLEVBQzlCLGlCQUFvQyxFQUNwQyxvQkFBMEM7UUFDakQsS0FBSyxFQUFFLENBQUM7UUFURCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ3BCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWdCO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQTNCOUMsbUJBQWMsR0FBYSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFFZCxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWYsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMzQixZQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsNEJBQXVCLEdBQW1CLElBQUksQ0FBQztRQUMvQyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQXFEM0IsY0FBUyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQXVEdEQscUJBQWdCLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUE7UUF5UGpFLGdCQUFXLEdBQUcsT0FBTyxDQUFDLEVBQUU7WUFFcEIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtZQUUxQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUN0RyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtnQkFDdEMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNqRyxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUE7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ2xDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFFLDZDQUE2Qzt3QkFFdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7NEJBQzNCLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUU7Z0NBQ3pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO29DQUMzQixJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO3dDQUM3QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzt3Q0FDM0csV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLHlCQUF5QjtxQ0FDaEQ7Z0NBQ0wsQ0FBQyxDQUFDLENBQUM7NkJBQ047d0JBQ0wsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsNkRBQTZEO3dCQUM3RCxJQUFJLENBQUMsV0FBVyxFQUFFOzRCQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dDQUUzQixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO29DQUMxQixVQUFVLENBQUMsSUFBSSxDQUFDO3dDQUNaLElBQUksRUFBRSxLQUFLO3dDQUNYLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO3FDQUV2QixDQUFDLENBQUM7b0NBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQztpQ0FDdEI7NEJBQ0wsQ0FBQyxDQUFDLENBQUM7eUJBQ047b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxVQUFVLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sVUFBVSxDQUFDO2FBRXJCO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFBO2FBQ2Q7UUFFTCxDQUFDLENBQUE7UUFZRCw2QkFBd0IsR0FBRyxHQUFHLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUE7UUFFakksQ0FBQyxDQUFBO1FBRUQseUJBQW9CLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQXZaeE0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFM0MsQ0FBQztJQUdELFdBQVc7UUFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVELFFBQVE7UUFDSixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ2xGLCtDQUErQztRQUUvQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTs7WUFDekQsSUFBSSxDQUFDLFVBQVUsZUFBRyxPQUFPLDBDQUFFLFVBQVUsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDL0MsSUFBSSxDQUFDLGFBQWEsZUFBRyxPQUFPLDBDQUFFLGFBQWEsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDckQsSUFBSSxDQUFDLFNBQVMsZUFBRyxPQUFPLDBDQUFFLFNBQVMsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDN0MsSUFBSSxDQUFDLGFBQWEsZUFBRyxPQUFPLDBDQUFFLGFBQWEsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFFckQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0I7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFFbkIsQ0FBQztJQUlTLGtCQUFrQixDQUFDLElBQVMsRUFBRSxRQUF5QixFQUFFLEtBQWEsRUFBRSxFQUFXOztRQUN6RixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxPQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLFFBQVEsS0FBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BJLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RSxJQUFJLFdBQW1CLENBQUM7UUFFeEIsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDOUIsV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDaEUsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzthQUN2RDtTQUNKO2FBQU07WUFDSCxXQUFXLEdBQUcsUUFBUSxDQUFDO1lBQ3ZCLElBQUksV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUU7Z0JBQzFCLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDdkQ7U0FDSjtRQUVELElBQUksRUFBRSxFQUFFO1lBQ0osSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxrREFBa0Q7WUFDMUUsSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLFdBQVcsSUFBSSxLQUFLLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQzFEO2lCQUFNO2dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7YUFDcEQ7WUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQzVCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNaO2FBQU07WUFDSCxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxJQUFJLEtBQUssRUFBRTtnQkFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDMUQ7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUNwRDtTQUNKO0lBQ0wsQ0FBQztJQUFBLENBQUM7SUFHRixnQkFBZ0I7UUFDWixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0NBQWdDLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztTQUNmO2FBQU07WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLG9FQUFvRSxDQUFDLENBQUM7WUFDbkYsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBSUQsU0FBUyxDQUFDLFFBQTBCO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQscUJBQXFCLENBQUMsT0FBTztRQUN6QixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pDLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQTtRQUN0QixJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQTtRQUNwQixJQUFJLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBSTtRQUNYLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNsQixLQUFLLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUMvQixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFDdEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUUzQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNoQixLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNkLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBRXBCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUssVUFBVSxDQUFDLElBQUk7O1lBRWpCLGdDQUFnQztZQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEQseUpBQXlKO1lBQ3pKLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNYLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFFZiwwQ0FBMEM7WUFDMUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsR0FBRyxxSEFBcUgsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsa0VBQWtFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLGNBQWMsQ0FBQztZQUVsVCxtREFBbUQ7WUFDbkQsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBcUIsQ0FBQztZQUM5RSxTQUFTLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUV6Qix5RkFBeUY7WUFDekYsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBRXJDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDaEQsU0FBUyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ25CLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDckQsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyRCxLQUFLLENBQUMsU0FBUyxHQUFHLGVBQWUsR0FBRyxFQUFFLEdBQUcsK0JBQStCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUM7d0JBQ2xHLEtBQUssQ0FBQyxTQUFTLEdBQUcsbUNBQW1DLEdBQUcsRUFBRSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLGtDQUFrQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3dCQUNwSixLQUFLLENBQUMsU0FBUyxHQUFHLDRCQUE0QixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsb0JBQW9CLEdBQUcsRUFBRSxHQUFHLDhCQUE4QixDQUFDO3dCQUNwSSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUE7d0JBQ2pCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQ2pCLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsbUJBQW1CLEVBQUU7Z0NBQ3BDLFFBQVEsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQzs2QkFDM0c7aUNBQ0k7Z0NBQ0QsUUFBUSxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDOzZCQUNsRzt3QkFDTCxDQUFDLENBQUMsQ0FBQzt3QkFDSCxLQUFLLENBQUMsU0FBUyxHQUFHLDhCQUE4QixHQUFHLEVBQUUsR0FBRyw4QkFBOEIsR0FBRyxRQUFRLEdBQUcsV0FBVyxDQUFDO3dCQUNoSCxLQUFLLENBQUMsU0FBUyxHQUFHLGlJQUFpSSxHQUFHLEVBQUUsR0FBRyx3REFBd0QsR0FBRyxFQUFFLEdBQUcsd0JBQXdCLENBQUM7d0JBQ3BQLEtBQUssQ0FBQyxTQUFTLEdBQUcseUdBQXlHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyx3R0FBd0csQ0FBQzt3QkFDaFAsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN0RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO3dCQUM5QixLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQzt3QkFDbEIsS0FBSyxDQUFDLFNBQVMsR0FBRywyQ0FBMkMsR0FBRyxFQUFFLEdBQUcsb0JBQW9CLEdBQUcsRUFBRSxHQUFHLGdDQUFnQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcseUZBQXlGLENBQUM7d0JBQzFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUVaLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQzFCLENBQUMsQ0FBQyxDQUFDO2lCQUNOO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sR0FBRztnQkFFOUMsNkdBQTZHO2dCQUM3RyxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ3JDLElBQXNCLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFO3dCQUMvRCxjQUFjLEdBQUcsY0FBYyxHQUFHLFFBQVEsQ0FBb0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ3JIO2lCQUNKO2dCQUVELHVFQUF1RTtnQkFDdkUsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUNuQyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3JELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLEtBQUssQ0FBQyxTQUFTLEdBQUcsZUFBZSxHQUFHLEVBQUUsR0FBRyxnREFBZ0QsQ0FBQztvQkFDMUYsS0FBSyxDQUFDLFNBQVMsR0FBRyxtQ0FBbUMsR0FBRyxFQUFFLEdBQUcsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLGtDQUFrQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDbE0sS0FBSyxDQUFDLFNBQVMsR0FBRyxxQ0FBcUMsR0FBRyxFQUFFLEdBQUcsOEJBQThCLENBQUM7b0JBQzlGLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQTtvQkFDakIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzSCxLQUFLLENBQUMsU0FBUyxHQUFHLDhCQUE4QixHQUFHLEVBQUUsR0FBRyw4QkFBOEIsR0FBRyxRQUFRLEdBQUcsV0FBVyxDQUFDO29CQUNoSCxLQUFLLENBQUMsU0FBUyxHQUFHLGlJQUFpSSxHQUFHLEVBQUUsR0FBRyx3REFBd0QsR0FBRyxFQUFFLEdBQUcsd0JBQXdCLENBQUM7b0JBQ3BQLEtBQUssQ0FBQyxTQUFTLEdBQUcsb01BQW9NLENBQUM7b0JBQ3ZOLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDOUIsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7b0JBQ2xCLEtBQUssQ0FBQyxTQUFTLEdBQUcsMkNBQTJDLEdBQUcsRUFBRSxHQUFHLG9CQUFvQixHQUFHLEVBQUUsR0FBRyw4R0FBOEcsQ0FBQztvQkFHaE4sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQ2Y7cUJBQU07b0JBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztpQkFDaEQ7WUFDTCxDQUFDLENBQUE7WUFFRCwyTEFBMkw7WUFDM0wsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLEdBQUc7Z0JBQzlDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN2QyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDdEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNmLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztnQkFDdEIsMkZBQTJGO2dCQUMzRixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUNyQyxJQUFzQixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRTt3QkFDL0QsYUFBYSxHQUFHLGFBQWEsR0FBRyxRQUFRLENBQW9CLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUNuSDtpQkFDSjtnQkFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksYUFBYSxFQUFFO29CQUNoQyw4QkFBOEI7b0JBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDVixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUVyQyxJQUF1QixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUUsRUFBRTs0QkFDakUsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFvQixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDL0YsSUFBSSxZQUFZLEdBQXNCLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBRSxDQUFDLEtBQUssQ0FBQzs0QkFDN0YsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUMxRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUN0QyxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt5QkFDdkY7d0JBQ0QsSUFBdUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFFLEVBQUU7NEJBQzNELEtBQUssR0FBc0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFFLENBQUMsS0FBSyxDQUFDOzRCQUN4RSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzRCQUM3QyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRTtnQ0FDaEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7NkJBQzVCO3lCQUVKO3dCQUNELElBQUksS0FBSyxJQUFJLFFBQVEsRUFBRTs0QkFDbkIsd0JBQXdCOzRCQUN4QixLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQzt5QkFFbFE7NkJBQU0sSUFBSSxLQUFLLElBQUksRUFBRSxFQUFFOzRCQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNuQixLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLENBQUMsQ0FBQzt5QkFDcFI7d0JBQ0QsQ0FBQyxHQUFHLEtBQUssQ0FBQztxQkFDYjtvQkFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUNwQiwyQkFBMkI7d0JBQzNCLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQ3ZJLENBQUMsQ0FBQyxDQUFDO29CQUNILFVBQVUsQ0FBQyxjQUFjLEtBQUssQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBRTFHLFVBQVUsQ0FBQyxjQUFjLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFFNUUsVUFBVSxDQUFDLGNBQWMsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUUvRDtxQkFBTTtvQkFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO2lCQUNoRztZQUNMLENBQUMsQ0FBQztZQUVGLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEtBQUs7Z0JBQ25ELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIscUJBQXFCO2dCQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRW5DLENBQUMsQ0FBQyxDQUFDO1FBRVAsQ0FBQztLQUFBO0lBRUQsVUFBVSxDQUFDLEVBQUU7UUFDVCxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQUk7UUFDWCxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNsQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO29CQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDeEIsT0FBTyxHQUFHLENBQUM7aUJBQ2Q7cUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUN4QixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7aUJBQ3hCO2FBQ0o7U0FDSjtRQUNELE9BQU8sS0FBSyxDQUFDLENBQUMsK0NBQStDO0lBQ2pFLENBQUM7SUFFRCxjQUFjO1FBQ1YsTUFBTSxLQUFLLEdBQVUsRUFBRSxDQUFDO1FBRXhCLHdDQUF3QztRQUV4QyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDZixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO29CQUN6QyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7d0JBQ3RELElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7NEJBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjt5QkFDckU7NkJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUU7NEJBQ3RDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0NBQ1AsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQ0FDNUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dDQUN2QixXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUk7NkJBQzVCLENBQUMsQ0FBQzt5QkFDTjs2QkFBTTs0QkFDSCxLQUFLLENBQUMsSUFBSSxDQUFDO2dDQUNQLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0NBQzVCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQ0FDdkIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJOzZCQUM1QixDQUFDLENBQUM7eUJBQ047cUJBQ0o7aUJBQ0o7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUN0QyxtRUFBbUU7Z0JBQ25FLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUUsdUJBQXVCO2dCQUM5RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLHlEQUF5RDthQUM1RDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQW9ERCxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLEtBQWE7UUFDbEQsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3hGLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUV6RSxJQUFJLGVBQWUsR0FBRyxHQUFHLGtCQUFrQixPQUFPLENBQUM7UUFDbkQsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztDQVNKLENBQUE7O1lBcGEyQixXQUFXO1lBQ1gsV0FBVztZQUNiLFNBQVM7WUFDSCxlQUFlO1lBQ3hCLE1BQU07WUFDQSxjQUFjO1lBQ1YsWUFBWTtZQUNYLGlCQUFpQjtZQUNkLG9CQUFvQjs7QUE5QjVDLGVBQWU7SUFMM0IsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGFBQWE7UUFDdkIsWUFBdUM7O0tBRTFDLENBQUM7R0FDVyxlQUFlLENBMGIzQjtTQTFiWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL21vZGFsXCI7XHJcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsL2JzLW1vZGFsLXJlZi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSBcIi4uLy4uL2NvcmUuY29uc3RzXCI7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvZHVjdHMvcHJvZHVjdHMuc2VydmljZSc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlclwiO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZVwiO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFkZHJlc3NpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvYWRkcmVzc2luZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLWNhcnQtZWMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhcnQtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FydC1lYy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJ0RWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuXHJcbiAgICBwdWJsaWMgdmFyaWFudHNUb1Nob3c6IHN0cmluZ1tdID0gWydUQUxMRScsICdDT0xPUiddO1xyXG4gICAgcHVibGljIGlzTG9nZ2VkSW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBtZWRpYVVybCA9ICcnO1xyXG4gICAgcHVibGljIG1vZGFsUmVmOiBCc01vZGFsUmVmIHwgbnVsbDtcclxuICAgIHB1YmxpYyBwcm9tb3Rpb25zID0gW107XHJcbiAgICBwdWJsaWMgaXRlbXM6IE9ic2VydmFibGU8YW55PjtcclxuICAgIHByaXZhdGUgY2FyZ2FuZG86IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjaGFubmVsOiBhbnkgPSB7fTtcclxuICAgIHB1YmxpYyB1cGRhdGVTdG9jazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGV4aXRVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGlkZVByaWNlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhpZGVEaXNjb3VudHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoaWRlVGF4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG4gICAgcHVibGljIHNob3dUYXhMZWdlbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjYXJ0TG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgY29uc3RzOiBDb25zdGFudHMsXHJcbiAgICAgICAgcHVibGljIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhZGRyZXNzaW5nU2VydmljZTogQWRkcmVzc2luZ1NlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsQ29uZmlnU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5lY09uQ29uc3RydWN0KClcclxuICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgICAgIHRoaXMubWVkaWFVcmwgPSB0aGlzLmNvbnN0cy5tZWRpYVVybCgpO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMb2dnZWRJbigpIHtcclxuICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgMCk7XHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5wcm9tb3Rpb25zLnN1YnNjcmliZShwcm9tb3Rpb25zID0+IHRoaXMucHJvbW90aW9ucyA9IHByb21vdGlvbnMpO1xyXG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKHRoaXMuY2FydFNlcnZpY2UuZ2V0VGF4ZXMoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbENvbmZpZyQuc3Vic2NyaWJlKGNoYW5uZWwgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVQcmljZXMgPSBjaGFubmVsPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVEaXNjb3VudHMgPSBjaGFubmVsPy5oaWRlRGlzY291bnRzID8/IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVUYXhlcyA9IGNoYW5uZWw/LmhpZGVUYXhlcyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93VGF4TGVnZW5kID0gY2hhbm5lbD8uc2hvd1RheExlZ2VuZCA/PyBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGVQcmljZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWRpdEFjY291bnRTaG93UHJpY2VzID0gc2hvd1ByaWNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UubG9hZGluZy5zdWJzY3JpYmUoaXNMb2FkaW5nID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jYXJ0TG9hZGluZyA9IGlzTG9hZGluZztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVjT25Jbml0KClcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdG9EZWNpbWFsID0gKGFtb3VudCkgPT4gdGhpcy5jb25zdHMudG9EZWNpbWFsKGFtb3VudCk7XHJcblxyXG4gICAgcHJvdGVjdGVkIGFjdHVhbGl6YXJDYW50aWRhZChpdGVtOiBhbnksIGNhbnRpZGFkOiBudW1iZXIgfCBzdHJpbmcsIHN0b2NrOiBudW1iZXIsIGlkPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FydExvYWRpbmcpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtdWx0aXBsZVF1YW50aXR5ID0gaXRlbS5wcm9kdWN0Py52YXJpYW50cyAmJiBpdGVtLnByb2R1Y3QudmFyaWFudHMubGVuZ3RoID4gMCA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5IDogMDtcclxuICAgICAgICBjb25zdCBzdGVwID0gbXVsdGlwbGVRdWFudGl0eSAmJiBtdWx0aXBsZVF1YW50aXR5ID4gMCA/IG11bHRpcGxlUXVhbnRpdHkgOiAxO1xyXG5cclxuICAgICAgICBsZXQgbmV3UXVhbnRpdHk6IG51bWJlcjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYW50aWRhZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBwYXJzZUludChjYW50aWRhZCwgMTApO1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgJSBzdGVwICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IHN0ZXAgfSk7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBuZXdRdWFudGl0eSA9IGNhbnRpZGFkO1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgJSBzdGVwICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlOyAvLyBBY3R1YWxpemEgbGEgcHJvcGllZGFkIHZpbmN1bGFkYSBhIGBbZGlzYWJsZWRdYFxyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgPiAwICYmIG5ld1F1YW50aXR5IDw9IHN0b2NrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCBuZXdRdWFudGl0eSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBGdW5jacOzbiBkZSBmbGVjaGEgcGFyYSBwcmVzZXJ2YXIgZWwgY29udGV4dG9cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgPiAwICYmIG5ld1F1YW50aXR5IDw9IHN0b2NrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCBuZXdRdWFudGl0eSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICByZWRpcmVjdENoZWNrb3V0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnRTZXJ2aWNlLmhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2NoZWNrb3V0YCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIk5vIHNlIHB1ZWRlIHJlZGlyaWdpciBhbCBjaGVja291dCBkZWJpZG8gYSB1bmEgdmFsaWRhY2nDs24gZmFsbGlkYS5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVkaXJlY3RSZWdpc3RlciA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9hdXRoL2xvZ2luYClcclxuXHJcbiAgICBvcGVuTW9kYWwodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwgeyBjbGFzczogJ21vZGFsLXhsJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZGlyZWN0RGV0YWlsUHJvZHVjdChwcm9kdWN0KSB7XHJcbiAgICAgICAgbGV0IHZhcmlhbnQgPSBwcm9kdWN0LnZhcmlhbnRzWzBdXHJcbiAgICAgICAgbGV0IHBhdGggPSAnL3Byb2R1Y3QvJ1xyXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5jb2RlXHJcbiAgICAgICAgcGF0aCArPSB2YXJpYW50Lm9wdGlvbnMubGVuZ3RoID8gXCI/dmFyaWFudD10cnVlXCIgOiBcIlwiXHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChwYXRoKVxyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdERhdGUoZGF0ZSkge1xyXG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZSksXHJcbiAgICAgICAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXHJcbiAgICAgICAgICAgIGRheSA9ICcnICsgZC5nZXREYXRlKCksXHJcbiAgICAgICAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gICAgICAgIGlmIChtb250aC5sZW5ndGggPCAyKVxyXG4gICAgICAgICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgICAgIGlmIChkYXkubGVuZ3RoIDwgMilcclxuICAgICAgICAgICAgZGF5ID0gJzAnICsgZGF5O1xyXG5cclxuICAgICAgICByZXR1cm4gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oJy0nKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjYXJnYU1vZGFsKGl0ZW0pIHtcclxuXHJcbiAgICAgICAgLy8gT2J0aWVuZSBsYXMgc2VkZXMgZGVsIGNsaWVudGVcclxuICAgICAgICBjb25zdCBzZWRlcyA9IGF3YWl0IHRoaXMuY2FydFNlcnZpY2UuZ2V0QWRkcmVzc0Jvb2soKTtcclxuXHJcbiAgICAgICAgLy8gQ3JlbyB1bmEgc2VyaWUgZGUgdmFyaWFibGVzIHF1ZSB2b3kgYSBuZWNlc2l0YXIsIGlkIHBhcmEgY29udHJvbGFyIGxhcyB2dWVsdGFzIHF1ZSBkYSB5IGN1YW50YXMgbGluZWFzIGhheSB5IGFsbElEIHBhcmEgYWxtYWNlbmFyIGxvcyBJRCBkZSBsb3MgbG90ZXMuXHJcbiAgICAgICAgdmFyIGlkID0gMTtcclxuICAgICAgICB2YXIgdGhpc18gPSB0aGlzO1xyXG4gICAgICAgIHZhciBhbGxJRCA9IFtdO1xyXG5cclxuICAgICAgICAvLyBBw7FhZGUgbG9zIGRhdG9zIGFsIGVuY2FiZXphZG8gZGVsIE1vZGFsXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuY2FiZXphZG9Nb2RhbCcpLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cInRpdGxlIHRleHQtZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZSBoNSBkLWJsb2NrIG0tMCBwLTAgbS0wIHAtMFwiPjxwIGNsYXNzPVwibm9tYnJlIG1iLTBcIiBpZD1cInByb2R1Y3ROYW1lXCI+JyArIGl0ZW1bJ3Byb2R1Y3QnXVsnbmFtZSddICsgJzwvcD48c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBwcy0yIG1zLTFcIiBpZD1cInByb2R1Y3RSZWZcIj5SZWY6JyArIGl0ZW1bJ3ZhcmlhbnRfaWQnXSArICc8L3NtYWxsPjwvYT4nO1xyXG5cclxuICAgICAgICAvLyBCb3JyYW1vcyB0b2RvcyBsb3MgZGF0b3MgZGUgbG9zIGxvdGVzIGFudGVyaW9yZXNcclxuICAgICAgICB2YXIgYm9keVRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb3RfYm9keV90YWJsZVwiKSBhcyBIVE1MVGFibGVFbGVtZW50O1xyXG4gICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcclxuXHJcbiAgICAgICAgLy8gUmVjb3JyZSB0b2RvcyBsb3MgYXJ0aWN1bG9zIHkgZW5jdWVudHJhIHNpIHRpZW5lbiBsb3RlcyBvIG5vLCBzaSB0aWVuZSBjcmVhIGxhcyBsaW5lYXNcclxuICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5nZXRDYXJ0MigpLmZvckVhY2goaSA9PiB7XHJcblxyXG4gICAgICAgICAgICBpZiAoaVsnaXRlbV9pZCddID09IGl0ZW0uaXRlbV9pZCAmJiBpWydsb3QnXSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgYm9keVRhYmxlLmlubmVySFRNTCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgaVsnbG90J10uZm9yRWFjaChsb3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwyID0gcm93Lmluc2VydENlbGwoMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw1ID0gcm93Lmluc2VydENlbGwoNCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGxvdFsnZGF0ZV9yZXF1ZXN0J10pKTtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiJyArIGxvdC5pZCArICdcIiBkaXNhYmxlZD4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIGxvdC5xdWFudGl0eSArICdcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInICsgbG90LnF1YW50aXR5ICsgJ1wiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIHZhbHVlPVwiJyArIHRoaXMuZm9ybWF0RGF0ZShkYXRlKSArICdcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZGUuaWQgPT0gbG90LnNoaXBwaW5nX2FkZHJlc3NfaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCIgc2VsZWN0ZWQ+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCI+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcclxuICAgICAgICAgICAgICAgICAgICBjZWxsNi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbC0xIGZsZXgtZ3Jvdy0wIHRleHQtcmlnaHQgYnRuQm9ycmFyIGQtbm9uZSBkLW1kLWJsb2NrIGQtbm9uZSBkLW1kLWJsb2NrXCI+PGJ1dHRvbiB2YWx1ZT1cIicgKyBsb3QuaWQgKyAnXCIgY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0b24+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcclxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5jb2xTcGFuID0gNjtcclxuICAgICAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIicgKyBsb3Qubm90ZXMgKyAnXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhbGxJRC5wdXNoKGxvdFsnaWQnXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25BZ3JlZ2FyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIC8vIFNlIGNhbGN1bGEgbGEgY2FudGlkYWQgeSBlbCBjb250YWRvciBwYXJhIHF1ZSBubyBleGNlZGEgbGEgY2FudGlkYWQgZGUgbGEgbGluZWEgYWwgY3JlYXIgdW4gbnVldm8gbG90ZS5cclxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkQWN0dWFsID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRBY3R1YWwgPSBjYW50aWRhZEFjdHVhbCArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gU2UgYcOxYWRlIGxhIGxpbmVhIHNpZW1wcmUgeSBjdWFuZG8gbGEgY2FudGlkYWQgcmVzdGFudGUgbm8gc2VhIGNlcm8uXHJcbiAgICAgICAgICAgIGlmIChjYW50aWRhZEFjdHVhbCA8IGl0ZW1bJ3F1YW50aXR5J10pIHtcclxuICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDEgPSByb3cuaW5zZXJ0Q2VsbCgwKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDQgPSByb3cuaW5zZXJ0Q2VsbCgzKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XHJcbiAgICAgICAgICAgICAgICBjZWxsMS5pbm5lckhUTUwgPSAnPGlucHV0IGlkPVwiaWQnICsgaWQgKyAnXCIgIHN0eWxlPVwiYm9yZGVyOiAwO1wiIHZhbHVlPVwiUGVuZHQuXCIgZGlzYWJsZWQ+JztcclxuICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIChpdGVtWydxdWFudGl0eSddIC0gY2FudGlkYWRBY3R1YWwpICsgJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicgKyAoaXRlbVsncXVhbnRpdHknXSAtIGNhbnRpZGFkQWN0dWFsKSArICdcIj4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDMuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiZGF0ZVwiIGlkPVwiZGVsaXZlcnlEYXRlJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxyXG4gICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHsgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nOyB9KTtcclxuICAgICAgICAgICAgICAgIGNlbGw0LmlubmVySFRNTCA9ICc8c2VsZWN0ICBpZD1cInNoaXBwaW5nQWRkcmVzcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JyArIG9wY2lvbmVzICsgJzwvc2VsZWN0Pic7XHJcbiAgICAgICAgICAgICAgICBjZWxsNS5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG5TZWd1aXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIHZhbHVlPVwiVmVyXCI+PC9pbnB1dD4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0PjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93MiA9IGJvZHlUYWJsZS5pbnNlcnRSb3coYm9keVRhYmxlLnJvd3MubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHZhciBmaWxhMiA9IHJvdzIuaW5zZXJ0Q2VsbCgwKVxyXG4gICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XHJcbiAgICAgICAgICAgICAgICBmaWxhMi5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgaWQ9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCI+PGlucHV0IGlkPVwibm90ZXMnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3QtbWF4LXF1YW50aXR5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEN1YW5kbyBzZSBwdWxzYSBlbCBib3RvbiBwYXJhIGd1YXJkYXIgZWwgbG90ZSByZWNvcnJlIGxhIGZ1bmNpb24geSBlbCBmb3IgLCByZWNvcnJlIGxpbmVhIGEgbGluZWEgeSBsYW56YSBlbCBlbmRwb2ludCBjb24gdW5hIHBhdXNhIHBhcmEgcXVlIG5vIHNlIHBpZXJkYSBuaW5ndW5vIHkgbm8gc2UgcXVlZGUgcGlsbGFkby5cclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90b25HdWFyZGFyJykub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2aW5nJyk7XHJcbiAgICAgICAgICAgIHRoaXNfLmNhcmdhbmRvID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyIGxvdElEID0gJyc7XHJcbiAgICAgICAgICAgIHZhciBjYW50aWRhZExvdGVzID0gMDtcclxuICAgICAgICAgICAgLy9Db250cm9sYSBxdWUgbGFzIGNhbnRpZGFkZXMgZGUgbG9zIGxvdGVzIG5vIHNlYSBzdXBlcmlvciBhIGxhIGRlbCBwcm9kdWN0byBlbiBlbCBjYXJyaXRvLlxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYW50aWRhZExvdGVzID0gY2FudGlkYWRMb3RlcyArIHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW0ucXVhbnRpdHkgPj0gY2FudGlkYWRMb3Rlcykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2FudGlkYWRMb3Rlcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgeSA9IDA7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWFudGl0eSA9IHBhcnNlSW50KCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGl2ZXJ5RGF0ZSA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGl2ZXJ5RGF0ZVwiICsgaW5kZXgpKS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzcyA9ICQoXCIjc2hpcHBpbmdBZGRyZXNzXCIgKyBpbmRleCkudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RlcyA9ICQoXCIjbm90ZXNcIiArIGluZGV4KS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzc05hbWUgPSAkKCcjc2hpcHBpbmdBZGRyZXNzJyArIGluZGV4ICsgJyBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZFwiICsgaW5kZXgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb3RJRCA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXlJbmRleCA9IGFsbElELmluZGV4T2YocGFyc2VJbnQobG90SUQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxJRC5zcGxpY2UobXlJbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsb3RJRCA9PSAnUGVuZHQuJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbnVldm8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIDAsIGl0ZW0uaXRlbV9pZCwgcXVhbnRpdHksIGl0ZW0ucHJvZHVjdC5wcmljZSwgaXRlbS5xdWFudGl0eSwgaXRlbS5kaXNjb3VudCwgaXRlbS5wcm9kdWN0LnByaWNlICogcXVhbnRpdHksICduZXcnLCBkZWxpdmVyeURhdGUsIG5vdGVzLCBwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLCBzaGlwcGluZ0FkZHJlc3NOYW1lLCAnbmV3bG90Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG90SUQgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG90SUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgcGFyc2VJbnQobG90SUQpLCBpdGVtLml0ZW1faWQsIHF1YW50aXR5LCBpdGVtLnByb2R1Y3QucHJpY2UsIGl0ZW0ucXVhbnRpdHksIGl0ZW0uZGlzY291bnQsIGl0ZW0ucHJvZHVjdC5wcmljZSAqIHF1YW50aXR5LCAnZWRpdGVkJywgZGVsaXZlcnlEYXRlLCBub3RlcywgcGFyc2VJbnQoc2hpcHBpbmdBZGRyZXNzKSwgc2hpcHBpbmdBZGRyZXNzTmFtZSwgJ2VkaXRsb3QnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IGluZGV4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYWxsSUQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdib3JyYXInKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzXy5jYXJ0U2VydmljZS5hZGRUb0xvdChpdGVtLnByb2R1Y3QsIDAsIGl0ZW0udmFyaWFudF9pZCwgZWxlbWVudCwgMCwgMCwgMCwgMCwgMCwgMCwgJ2RlbGV0ZScsIDAsICcnLCAwLCAnZGVsZXRlJywgJ2RlbGV0ZWxvdCcpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FydFNlcnZpY2UubG9hZENhcnRCeVRva2VuKHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpKTsgfSwgMzAwICogeSk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LXNhdmVkJyk7IH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy5jYXJnYW5kbyA9IGZhbHNlIH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnTGEgY2FudGlkYWQgZGUgbG9zIGxvdGVzIGVzIHN1cGVyaW9yIGEgbGEgY2FudGlkYWQgZGVsIHByb2R1Y3RvLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJyNib3RvbkJvcnJhcicsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzKTtcclxuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VNb2RhbChpZCkge1xyXG4gICAgICAgICQoJyMnICsgaWQpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tTdG9jayhpdGVtKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN0b2NrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFudC5zdG9jaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNvbG8gc2UgZWplY3V0YSBzaSBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzblxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUFsbFN0b2NrKCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBEZWZpbmUgbGEgc3VzY3JpcGNpw7NuIGFudGVzIGRlIHVzYXJsYVxyXG5cclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmNhcnRJdGVtcy5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgaXRlbS5wcm9kdWN0LnZhcmlhbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZGVsZXRlQ2FydEl0ZW0oaXRlbSwgZmFsc2UpOyAvLyBCb3JyYSBlbCBhcnTDrWN1bG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnF1YW50aXR5ID4gdmFyaWFudC5zdG9jaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogdmFyaWFudC5zdG9jayxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAgLy8gRGVzdXNjcsOtYmV0ZSBhbnRlcyBkZSBhY3R1YWxpemFyXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmFkZEFsbFRvQ2FydChpdGVtcyk7ICAvLyBBY3R1YWxpemEgZWwgY2Fycml0b1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leGl0VXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMudXBkYXRlQWxsU3RvY2soKTsgIC8vIFZ1ZWx2ZSBhIHZlcmlmaWNhciBlbCBzdG9ja1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBnZXRWYXJpYW50cyA9IHByb2R1Y3QgPT4ge1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHByb2R1Y3QucHJvZHVjdFxyXG5cclxuICAgICAgICBpZiAoaXRlbS52YXJpYW50cyAmJiBpdGVtLnZhcmlhbnRzLmxlbmd0aCAmJiBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnMgJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgb3B0aW9ucyA9IGl0ZW0udmFyaWFudHNbMF0ub3B0aW9uc1xyXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHRoaXMudmFyaWFudHNUb1Nob3cuZmluZChuYW1lID0+IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpXHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zTWFwID0gW11cclxuICAgICAgICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaCgoZW50cnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uQWRkZWQgPSBmYWxzZTsgIC8vIFZhcmlhYmxlIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgaW5zZXJjaW9uZXNcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uMi52YWx1ZXMuZm9yRWFjaChjb2xvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yLmNvZGUgPT0gb3B0aW9uW2VudHJ5XSAmJiAhb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc01hcC5wdXNoKHsgbmFtZTogZW50cnksIHZhbHVlOiBvcHRpb25bZW50cnldLCBpbWFnZTogY29sb3IuaW1hZ2UsIG1vYmlsZUltYWdlOiBjb2xvci5tb2JpbGVJbWFnZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlOyAvLyBNYXJjYXIgb3BjacOzbiBhZ3JlZ2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2kgbm8gc2UgYcOxYWRpw7MgbGEgb3BjacOzbiBkZSBDT0xPUiwgbWFuZWphciBvdHJhcyBvcGNpb25lc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbjIuY29kZSAhPT0gJ0NPTE9SJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVudHJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9uW2VudHJ5XVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnNNYXA7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVEaXNjb3VudE1lc3NhZ2Uoc2FsZXByaWNlOiBudW1iZXIsIHByaWNlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChpc05hTihzYWxlcHJpY2UpIHx8IGlzTmFOKHByaWNlKSB8fCBzYWxlcHJpY2UgPj0gcHJpY2UgfHwgc2FsZXByaWNlIDw9IDAgfHwgcHJpY2UgPD0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZGlzY291bnRQZXJjZW50YWdlID0gTWF0aC5yb3VuZCgoKHByaWNlIC0gc2FsZXByaWNlKSAvIHByaWNlKSAqIDEwMCk7XHJcblxyXG4gICAgICAgIGxldCBkaXNjb3VudE1lc3NhZ2UgPSBgJHtkaXNjb3VudFBlcmNlbnRhZ2V9JSBPRkZgO1xyXG4gICAgICAgIHJldHVybiBkaXNjb3VudE1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICBnZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQgPSAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbm5lbC50eXBlID09ICdiMmInID8gdGhpcy5jaGFubmVsLndob2xlc2FsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnQgOiB0aGlzLmNoYW5uZWwucmV0YWlsZXJNaW5pbXVtUHVyY2hhc2VBbW91bnRcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZXhjZWVkc01pbmltdW1BbW91bnQgPSAodmFsdWU6IG51bWJlcikgPT4gdmFsdWUgPj0gdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSA/IHRoaXMucmVkaXJlY3RDaGVja291dCgpIDogdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3F1YW50aXR5LW5vdC1leGNlZWRlZCcsIHsgYW1vdW50OiB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpIH0pXHJcblxyXG5cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiJdfQ==
|