ng-easycommerce 0.1.1 → 1.1.3
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 +14 -0
- package/assets/ec-i18n/ct.json +4 -0
- package/assets/ec-i18n/en.json +4 -0
- package/assets/ec-i18n/es.json +4 -0
- package/assets/ec-i18n/fr.json +4 -0
- package/assets/ec-i18n/gl.json +4 -0
- package/assets/ec-i18n/pr.json +4 -0
- package/bundles/ng-easycommerce.umd.js +5191 -3521
- 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/api/connection.service.js +2 -2
- package/esm2015/lib/core.consts.js +4 -5
- package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
- package/esm2015/lib/ec-component/cart-bootstrap-navigation.js +27 -0
- package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +11 -1
- package/esm2015/lib/ec-component/checkout-ec/checkout-ec.component.js +28 -3
- package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +185 -13
- package/esm2015/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
- package/esm2015/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +26 -9
- package/esm2015/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
- package/esm2015/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +4 -2
- package/esm2015/lib/ec-component/coupon-ec/coupon-ec.component.js +6 -1
- package/esm2015/lib/guards/able-buyer-guard.service.js +2 -2
- package/esm2015/lib/guards/auth-guard.service.js +2 -2
- package/esm2015/lib/guards/checkout-ready.service.js +3 -3
- package/esm2015/lib/guards/loggedin-guard.service.js +2 -2
- package/esm2015/lib/guards/user-role-guard.service.js +2 -2
- package/esm2015/lib/interfaces/checkout-data.js +1 -1
- package/esm2015/lib/services/account/orders.service.js +6 -4
- package/esm2015/lib/services/auth.service.js +4 -3
- package/esm2015/lib/services/captcha.service.js +6 -4
- package/esm2015/lib/services/cart.service.js +1194 -74
- package/esm2015/lib/services/channel-config.service.js +4 -6
- package/esm2015/lib/services/checkout/addressing.service.js +65 -9
- package/esm2015/lib/services/checkout/checkout.service.js +58 -9
- package/esm2015/lib/services/checkout/error-handler.service.js +4 -3
- package/esm2015/lib/services/checkout/payment.service.js +35 -15
- package/esm2015/lib/services/checkout/shipment.service.js +54 -3
- package/esm2015/lib/services/concatenated-associations.service.js +4 -3
- package/esm2015/lib/services/currency.service.js +5 -3
- package/esm2015/lib/services/filters.service.js +2 -2
- package/esm2015/lib/services/footer/footer.service.js +4 -3
- package/esm2015/lib/services/gift-card.service.js +56 -5
- package/esm2015/lib/services/parameters.service.js +5 -3
- package/esm2015/lib/services/reviews.service.js +5 -4
- package/esm2015/lib/services/seo.service.js +4 -5
- package/esm2015/lib/services/stores.service.js +4 -3
- package/esm2015/lib/services/wishlist.service.js +3 -4
- package/esm2015/lib/utils/analytics/google-analytics.service.js +1 -1
- package/esm2015/lib/utils/order-util.service.js +22 -2
- package/esm2015/lib/utils/price-presentation.service.js +2 -3
- package/esm2015/lib/utils/shipping-price-display.service.js +2 -3
- package/esm5/lib/api/connection.service.js +2 -2
- package/esm5/lib/core.consts.js +4 -5
- package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +2 -2
- package/esm5/lib/ec-component/cart-bootstrap-navigation.js +27 -0
- package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +11 -1
- package/esm5/lib/ec-component/checkout-ec/checkout-ec.component.js +28 -3
- package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +206 -12
- package/esm5/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.js +6 -2
- package/esm5/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.js +31 -14
- package/esm5/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.js +11 -3
- package/esm5/lib/ec-component/checkout-ec/shipment-ec/shipment-ec.component.js +5 -3
- package/esm5/lib/ec-component/coupon-ec/coupon-ec.component.js +6 -1
- package/esm5/lib/guards/able-buyer-guard.service.js +2 -2
- package/esm5/lib/guards/auth-guard.service.js +2 -2
- package/esm5/lib/guards/checkout-ready.service.js +3 -3
- package/esm5/lib/guards/loggedin-guard.service.js +2 -2
- package/esm5/lib/guards/user-role-guard.service.js +2 -2
- package/esm5/lib/interfaces/checkout-data.js +1 -1
- package/esm5/lib/services/account/orders.service.js +6 -4
- package/esm5/lib/services/auth.service.js +4 -3
- package/esm5/lib/services/captcha.service.js +6 -4
- package/esm5/lib/services/cart.service.js +1243 -94
- package/esm5/lib/services/channel-config.service.js +4 -6
- package/esm5/lib/services/checkout/addressing.service.js +65 -9
- package/esm5/lib/services/checkout/checkout.service.js +65 -13
- package/esm5/lib/services/checkout/error-handler.service.js +4 -3
- package/esm5/lib/services/checkout/payment.service.js +29 -11
- package/esm5/lib/services/checkout/shipment.service.js +58 -7
- package/esm5/lib/services/concatenated-associations.service.js +4 -3
- package/esm5/lib/services/currency.service.js +5 -3
- package/esm5/lib/services/filters.service.js +2 -2
- package/esm5/lib/services/footer/footer.service.js +4 -3
- package/esm5/lib/services/gift-card.service.js +59 -5
- package/esm5/lib/services/parameters.service.js +5 -3
- package/esm5/lib/services/reviews.service.js +5 -4
- package/esm5/lib/services/seo.service.js +4 -5
- package/esm5/lib/services/stores.service.js +4 -3
- package/esm5/lib/services/wishlist.service.js +3 -4
- package/esm5/lib/utils/analytics/google-analytics.service.js +1 -1
- package/esm5/lib/utils/order-util.service.js +22 -2
- package/esm5/lib/utils/price-presentation.service.js +2 -3
- package/esm5/lib/utils/shipping-price-display.service.js +2 -3
- package/fesm2015/ng-easycommerce.js +4360 -2745
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +5193 -3523
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/ec-component/cart-bootstrap-navigation.d.ts +7 -0
- package/lib/ec-component/cart-ec/cart-ec.component.d.ts +5 -2
- package/lib/ec-component/checkout-ec/checkout-ec.component.d.ts +6 -1
- package/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.d.ts +27 -3
- package/lib/ec-component/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +1 -1
- package/lib/ec-component/checkout-ec/payment-ec/payment-ec.component.d.ts +3 -0
- package/lib/ec-component/checkout-ec/payment-ec-single/payment-ec-single.component.d.ts +3 -0
- package/lib/interfaces/checkout-data.d.ts +6 -1
- package/lib/services/cart.service.d.ts +123 -7
- package/lib/services/checkout/addressing.service.d.ts +1 -1
- package/lib/services/checkout/checkout.service.d.ts +3 -0
- package/lib/services/checkout/shipment.service.d.ts +2 -2
- package/lib/services/gift-card.service.d.ts +1 -0
- package/lib/utils/order-util.service.d.ts +1 -0
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -76,6 +76,7 @@ import { ToastService } from "../../utils/toast.service";
|
|
|
76
76
|
import { AddressingService } from '../../services/checkout/addressing.service';
|
|
77
77
|
import { ChannelConfigService } from '../../services/channel-config.service';
|
|
78
78
|
import { SeoService } from '../../services/seo.service';
|
|
79
|
+
import { navigateHomeAfterCartBootstrapRecovery } from '../cart-bootstrap-navigation';
|
|
79
80
|
var CartEcComponent = /** @class */ (function (_super) {
|
|
80
81
|
__extends(CartEcComponent, _super);
|
|
81
82
|
function CartEcComponent(cartService, authService, consts, productsService, router, modalService, toastrService, addressingService, channelConfigService, seo) {
|
|
@@ -109,6 +110,9 @@ var CartEcComponent = /** @class */ (function (_super) {
|
|
|
109
110
|
_this.activeUnitPromotionItemId = null;
|
|
110
111
|
_this.activeUnitPromotionSummaryStyles = {};
|
|
111
112
|
_this.supportsUnitPromotionHover = false;
|
|
113
|
+
_this.handleCartBootstrapRecovery = function () {
|
|
114
|
+
navigateHomeAfterCartBootstrapRecovery(_this.router.url, 'cart', function () { return _this.cartService.consumeCartBootstrapRecovery(); }, function () { return _this.router.navigateByUrl('/'); });
|
|
115
|
+
};
|
|
112
116
|
_this.updateCartSeo = function () {
|
|
113
117
|
var siteName = _this.seo.getSiteName();
|
|
114
118
|
_this.seo.setTitle("Carrito | " + siteName);
|
|
@@ -445,6 +449,8 @@ var CartEcComponent = /** @class */ (function (_super) {
|
|
|
445
449
|
};
|
|
446
450
|
CartEcComponent.prototype.ngOnInit = function () {
|
|
447
451
|
var _this = this;
|
|
452
|
+
this.cartBootstrapRecoverySubscription = this.cartService.cartBootstrapRecovery.subscribe(this.handleCartBootstrapRecovery);
|
|
453
|
+
this.handleCartBootstrapRecovery();
|
|
448
454
|
window.scroll(0, 0);
|
|
449
455
|
this.updateUnitPromotionViewportMode();
|
|
450
456
|
this.cartService.promotions.subscribe(function (promotions) { return _this.promotions = promotions; });
|
|
@@ -470,6 +476,10 @@ var CartEcComponent = /** @class */ (function (_super) {
|
|
|
470
476
|
this.updateCartSeo();
|
|
471
477
|
this.ecOnInit();
|
|
472
478
|
};
|
|
479
|
+
CartEcComponent.prototype.ngOnDestroy = function () {
|
|
480
|
+
var _a;
|
|
481
|
+
(_a = this.cartBootstrapRecoverySubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
482
|
+
};
|
|
473
483
|
/** Cierra el resumen al hacer click fuera en desktop. */
|
|
474
484
|
CartEcComponent.prototype.handleDocumentClick = function () {
|
|
475
485
|
if (!this.supportsUnitPromotionHover) {
|
|
@@ -829,4 +839,4 @@ var CartEcComponent = /** @class */ (function (_super) {
|
|
|
829
839
|
return CartEcComponent;
|
|
830
840
|
}(ComponentHelper));
|
|
831
841
|
export { CartEcComponent };
|
|
832
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ25GLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBU3hEO0lBQXFDLG1DQUFlO0lBMkJoRCx5QkFDVyxXQUF3QixFQUN4QixXQUF3QixFQUNyQixNQUFpQixFQUNwQixlQUFnQyxFQUNoQyxNQUFjLEVBQ2QsWUFBNEIsRUFDekIsYUFBMkIsRUFDOUIsaUJBQW9DLEVBQ3BDLG9CQUEwQyxFQUN2QyxHQUFl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QW9CO2dCQUNsQyxVQUFVOztJQTJRN0I7UUFEQyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7OERBUTlCO0lBSUQ7UUFEQyxZQUFZLENBQUMsZUFBZSxDQUFDOzZEQUk3QjtJQUlEO1FBREMsWUFBWSxDQUFDLGVBQWUsQ0FBQzs2REFPN0I7SUF4VVEsZUFBZTtRQUwzQixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsYUFBYTtZQUN2QixZQUF1Qzs7U0FFMUMsQ0FBQztPQUNXLGVBQWUsQ0FpeEIzQjtJQUFELHNCQUFDO0NBQUEsQUFqeEJELENBQXFDLGVBQWUsR0FpeEJuRDtTQWp4QlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVGVtcGxhdGVSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsL2JzLW1vZGFsLXJlZi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gXCIuLi8uLi9jb3JlLmNvbnN0c1wiO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvZHVjdHMvcHJvZHVjdHMuc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9jb21wb25lbnQtaGVscGVyXCI7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZVwiO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQWRkcmVzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGVja291dC9hZGRyZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlby5zZXJ2aWNlJztcbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1jYXJ0LWVjJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FydC1lYy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FydC1lYy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhcnRFY0NvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEhlbHBlciBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cblxuICAgIHB1YmxpYyB2YXJpYW50c1RvU2hvdzogc3RyaW5nW10gPSBbJ1RBTExFJywgJ0NPTE9SJ107XG4gICAgcHVibGljIGlzTG9nZ2VkSW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgbWVkaWFVcmwgPSAnJztcbiAgICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWYgfCBudWxsO1xuICAgIHB1YmxpYyBwcm9tb3Rpb25zID0gW107XG4gICAgcHVibGljIGl0ZW1zOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcHJpdmF0ZSBjYXJnYW5kbzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjaGFubmVsOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgdXBkYXRlU3RvY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgZXhpdFVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaWRlVGF4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgc2hvd1RheExlZ2VuZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjYXJ0TG9hZGluZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBlbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzdW1tYXJ5UHJvbW90aW9uQW1vdW50JDtcbiAgICBwdWJsaWMgaGFzQXBwbGllZENvdXBvbiQ7XG4gICAgcHVibGljIGFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBhY3RpdmVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIHB1YmxpYyBzdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3ZlciA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHVibGljIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYWRkcmVzc2luZ1NlcnZpY2U6IEFkZHJlc3NpbmdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgc2VvOiBTZW9TZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgICAgIHRoaXMubWVkaWFVcmwgPSB0aGlzLmNvbnN0cy5tZWRpYVVybCgpO1xuICAgICAgICB0aGlzLnN1bW1hcnlQcm9tb3Rpb25BbW91bnQkID0gdGhpcy5jYXJ0U2VydmljZS5nZXRTdW1tYXJ5UHJvbW90aW9uQW1vdW50KCk7XG4gICAgICAgIHRoaXMuaGFzQXBwbGllZENvdXBvbiQgPSB0aGlzLmNhcnRTZXJ2aWNlLmhhc0FwcGxpZWRDb3Vwb24oKTtcblxuICAgIH1cblxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlTG9nZ2VkSW4oKSB7XG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgMCk7XG4gICAgICAgIHRoaXMudXBkYXRlVW5pdFByb21vdGlvblZpZXdwb3J0TW9kZSgpO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnByb21vdGlvbnMuc3Vic2NyaWJlKHByb21vdGlvbnMgPT4gdGhpcy5wcm9tb3Rpb25zID0gcHJvbW90aW9ucyk7XG4gICAgICAgIC8vICAgIGNvbnNvbGUubG9nKHRoaXMuY2FydFNlcnZpY2UuZ2V0VGF4ZXMoKSk7XG5cbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gY2hhbm5lbD8uaGlkZVByaWNlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZURpc2NvdW50cyA9IGNoYW5uZWw/LmhpZGVEaXNjb3VudHMgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmhpZGVUYXhlcyA9IGNoYW5uZWw/LmhpZGVUYXhlcyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IGNoYW5uZWw/LnNob3dUYXhMZWdlbmQgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlID0gY2hhbm5lbD8uZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPz8gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhpZGVQcmljZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnNob3dQcmljZSQuc3Vic2NyaWJlKChzaG93UHJpY2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlZGl0QWNjb3VudFNob3dQcmljZXMgPSBzaG93UHJpY2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmxvYWRpbmcuc3Vic2NyaWJlKGlzTG9hZGluZyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhcnRMb2FkaW5nID0gaXNMb2FkaW5nO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0U2VvKCk7XG4gICAgICAgIHRoaXMuZWNPbkluaXQoKVxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0U2VvID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzaXRlTmFtZSA9IHRoaXMuc2VvLmdldFNpdGVOYW1lKCk7XG4gICAgICAgIHRoaXMuc2VvLnNldFRpdGxlKGBDYXJyaXRvIHwgJHtzaXRlTmFtZX1gKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0RGVzY3JpcHRpb24oYFJldmlzw6EgbG9zIHByb2R1Y3RvcyBzZWxlY2Npb25hZG9zIHkgZmluYWxpesOhIHR1IGNvbXByYSBlbiAke3NpdGVOYW1lfS5gKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0T2dUeXBlKCd3ZWJzaXRlJyk7XG4gICAgICAgIHRoaXMuc2VvLnNldE5vSW5kZXgodHJ1ZSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlby5zZXRDYW5vbmljYWwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmllcnRlIHVuIG1vbnRvIGNydWRvIGFsIGZvcm1hdG8gZGVjaW1hbCBlc3BlcmFkbyBwb3IgbGEgVUkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYW1vdW50IE1vbnRvIGVuIGNlbnRhdm9zIG8gZW50ZXJvIGNydWRvLlxuICAgICAqIEByZXR1cm5zIE1vbnRvIGRlY2ltYWwuXG4gICAgICovXG4gICAgdG9EZWNpbWFsID0gKGFtb3VudCkgPT4gdGhpcy5jb25zdHMudG9EZWNpbWFsKGFtb3VudCk7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIFBvcmNlbnRhamUgZGUgZGVzY3VlbnRvIGxlZ2FjeSBwYXJhIGVsIGJhZGdlIGAlIE9GRmAuICovXG4gICAgZ2V0SXRlbURpc2NvdW50ID0gKGl0ZW0pOiBudW1iZXIgPT4gTnVtYmVyKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/LmRpc2NvdW50UGVyY2VudCB8fCAwKTtcblxuICAgIC8qKlxuICAgICAqIERldnVlbHZlIGVsIHBvcmNlbnRhamUgZWZlY3Rpdm8gdG90YWwgZGVsIMOtdGVtLCBjb25zaWRlcmFuZG8gcHJvbW9jaW9uZXMgdW5pdGFyaWFzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uXG4gICAgICogQHJldHVybnMgUG9yY2VudGFqZSBlbnRlcm8gY2FsY3VsYWRvIGNvbnRyYSBlbCBwcmVjaW8gZGUgcmVmZXJlbmNpYSBkZWwgw610ZW0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFNpIGV4aXN0ZSBwcmVjaW8gdGFjaGFkbywgY29tcGFyYSBgZmluYWxQcmljZWAgY29udHJhIGBzdHJpa2VQcmljZWAuXG4gICAgICogU2kgbm8gZXhpc3RlLCB1c2EgYGJhc2VQcmljZWAgY29tbyByZWZlcmVuY2lhLlxuICAgICAqIEVzdG8gcGVybWl0ZSBtb3N0cmFyIHVuIGJhZGdlIGNvaGVyZW50ZSBjdWFuZG8gZWwgcHJlY2lvIHZpc2libGUgeWEgaW5jbHV5ZVxuICAgICAqIGRlc2N1ZW50b3MvcHJvbW9jaW9uZXMgdW5pdGFyaWFzIGFkaWNpb25hbGVzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIC8vIHN0cmlrZVByaWNlIDI0MDAwMCwgZmluYWxQcmljZSA0NTAwMCA9PiA4MVxuICAgICAqIHRoaXMuZ2V0SXRlbUVmZmVjdGl2ZURpc2NvdW50KGl0ZW0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldEl0ZW1FZmZlY3RpdmVEaXNjb3VudCA9IChpdGVtKTogbnVtYmVyID0+IE51bWJlcih0aGlzLmNhcnRTZXJ2aWNlLmdldEl0ZW1QcmljaW5nKGl0ZW0pPy5lZmZlY3RpdmVEaXNjb3VudFBlcmNlbnQgfHwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBTdWJ0b3RhbCBhY3R1YWwgZGVsIHJlbmdsw7NuLlxuICAgICAqXG4gICAgICogRWwgYmFja2VuZCBudWV2byBpbmZvcm1hIGBpdGVtLnN1YnRvdGFsYCBzaW4gaW1wdWVzdG9zIG5pIGRlc2N1ZW50b3NcbiAgICAgKiBnZW5lcmFsZXMgZGUgb3JkZW4uIExhcyByZXNwdWVzdGFzIGxlZ2FjeSBjb250aW7DumFuIHVzYW5kbyBgaXRlbS50b3RhbGAuXG4gICAgICovXG4gICAgZ2V0RGlzcGxheWVkSXRlbVRvdGFsID0gKGl0ZW0pOiBudW1iZXIgPT5cbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0SXRlbVByaWNlUHJlc2VudGF0aW9uKGl0ZW0sIHRoaXMuY2hhbm5lbCkuc3VidG90YWw7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIGB0cnVlYCBzaSBlbCBiYWNrZW5kIGluZm9ybcOzIHByb21vY2lvbmVzIHVuaXRhcmlhcy4gKi9cbiAgICBoYXNVbml0UHJvbW90aW9ucyA9IChpdGVtKTogYm9vbGVhbiA9PiBCb29sZWFuKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/Lmhhc1VuaXRQcm9tb3Rpb25zKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbXMgw410ZW1zIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBgdHJ1ZWAgc2kgYWwgbWVub3MgdW4gw610ZW0gdGllbmUgcHJvbW9jaW9uZXMgdW5pdGFyaWFzLiAqL1xuICAgIGhhc0FueVVuaXRQcm9tb3Rpb25zID0gKGl0ZW1zOiBhbnlbXSA9IFtdKTogYm9vbGVhbiA9PiBpdGVtcy5zb21lKGl0ZW0gPT4gdGhpcy5oYXNVbml0UHJvbW90aW9ucyhpdGVtKSk7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIGB0cnVlYCBzaSBlbCByZXN1bWVuIGFjdGl2byBwZXJ0ZW5lY2UgYSBlc2Ugw610ZW0uICovXG4gICAgaXNVbml0UHJvbW90aW9uU3VtbWFyeU9wZW4gPSAoaXRlbSk6IGJvb2xlYW4gPT4gdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uSXRlbUlkID09PSBpdGVtPy5pdGVtX2lkO1xuXG4gICAgLyoqXG4gICAgICogQWJyZSBlbCByZXN1bWVuIGRlbCDDrXRlbSBhbCBlbnRyYXIgY29uIGVsIG1vdXNlIGVuIGRlc2t0b3AuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by5cbiAgICAgKiBAcGFyYW0gYW5jaG9yIEVsZW1lbnRvIHVzYWRvIGNvbW8gYW5jbGEgdmlzdWFsLlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqL1xuICAgIGhhbmRsZVVuaXRQcm9tb3Rpb25Nb3VzZUVudGVyID0gKGl0ZW0sIGFuY2hvcjogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRzVW5pdFByb21vdGlvbkhvdmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wZW5Vbml0UHJvbW90aW9uU3VtbWFyeShpdGVtLCBhbmNob3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENpZXJyYSBlbCByZXN1bWVuIGFsIHNhbGlyIGNvbiBlbCBtb3VzZSBlbiBkZXNrdG9wLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gYXNvY2lhZG8gYWwgcmVzdW1lbi5cbiAgICAgKiBAcmV0dXJucyBgdm9pZGBcbiAgICAgKi9cbiAgICBoYW5kbGVVbml0UHJvbW90aW9uTW91c2VMZWF2ZSA9IChpdGVtKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3Zlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZVVuaXRQcm9tb3Rpb25TdW1tYXJ5KGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFicmUgZWwgcmVzdW1lbiBkZSBwcm9tb2Npb25lcyB1bml0YXJpYXMgcGFyYSB1biDDrXRlbSBwdW50dWFsLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uXG4gICAgICogQHBhcmFtIGFuY2hvciBFbGVtZW50byBkZSByZWZlcmVuY2lhIHBhcmEgcG9zaWNpb25hbWllbnRvLlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqL1xuICAgIG9wZW5Vbml0UHJvbW90aW9uU3VtbWFyeSA9IChpdGVtLCBhbmNob3I/OiBIVE1MRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVW5pdFByb21vdGlvbnMoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlVW5pdFByb21vdGlvbkl0ZW1JZCA9IGl0ZW0/Lml0ZW1faWQgPz8gbnVsbDtcbiAgICAgICAgdGhpcy51cGRhdGVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyhhbmNob3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENpZXJyYSBlbCByZXN1bWVuIGFjdGl2by5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIFNpIHNlIGVudsOtYSwgc29sbyBjaWVycmEgY3VhbmRvIGNvaW5jaWRlIGNvbiBlbCDDrXRlbSBhY3Rpdm8uXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgY2xvc2VVbml0UHJvbW90aW9uU3VtbWFyeSA9IChpdGVtPyk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWl0ZW0gfHwgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uSXRlbUlkID09PSBpdGVtPy5pdGVtX2lkKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWx0ZXJuYSBtYW51YWxtZW50ZSBsYSBhcGVydHVyYSBkZWwgcmVzdW1lbiBwYXJhIHVuIMOtdGVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uXG4gICAgICogQHBhcmFtIGFuY2hvciBFbGVtZW50byBkZSByZWZlcmVuY2lhLlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHB1bnRlcm8uXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgdG9nZ2xlVW5pdFByb21vdGlvblN1bW1hcnkgPSAoaXRlbSwgYW5jaG9yOiBIVE1MRWxlbWVudCwgZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICghdGhpcy5oYXNVbml0UHJvbW90aW9ucyhpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNVbml0UHJvbW90aW9uU3VtbWFyeU9wZW4oaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VVbml0UHJvbW90aW9uU3VtbWFyeShpdGVtKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3BlblVuaXRQcm9tb3Rpb25TdW1tYXJ5KGl0ZW0sIGFuY2hvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFuZWphIGVsIGNsaWNrL3RhcCBzb2JyZSBlbCBwcmVjaW8gZW4gZGlzcG9zaXRpdm9zIHNpbiBob3Zlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLlxuICAgICAqIEBwYXJhbSBhbmNob3IgRWxlbWVudG8gdXNhZG8gY29tbyB0cmlnZ2VyLlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGUgY2xpY2svdGFwLlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqL1xuICAgIGhhbmRsZVVuaXRQcm9tb3Rpb25QcmljZUNsaWNrID0gKGl0ZW0sIGFuY2hvcjogSFRNTEVsZW1lbnQsIGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3Zlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2dnbGVVbml0UHJvbW90aW9uU3VtbWFyeShpdGVtLCBhbmNob3IsIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdml0YSBxdWUgZXZlbnRvcyBkZW50cm8gZGVsIHJlc3VtZW4gc2UgcHJvcGFndWVuIGFsIGRvY3VtZW50by5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHB1bnRlcm8uXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgc3RvcFVuaXRQcm9tb3Rpb25TdW1tYXJ5RXZlbnQgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgUHJlY2lvIHVuaXRhcmlvIGJhc2UgKGBzYWxlcHJpY2VgIG8gYHByaWNlYCkuICovXG4gICAgZ2V0T3JpZ2luYWxVbml0UHJpY2UgPSAoaXRlbSk6IG51bWJlciA9PiB7XG4gICAgICAgIGNvbnN0IHByZXNlbnRhdGlvbiA9IHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydEl0ZW1QcmljZVByZXNlbnRhdGlvbihpdGVtLCB0aGlzLmNoYW5uZWwpO1xuICAgICAgICByZXR1cm4gcHJlc2VudGF0aW9uLnNvdXJjZSA9PT0gJ2xpbmVQcmljaW5nJ1xuICAgICAgICAgICAgPyBwcmVzZW50YXRpb24udW5pdFByaWNlXG4gICAgICAgICAgICA6IE51bWJlcih0aGlzLmNhcnRTZXJ2aWNlLmdldEl0ZW1QcmljaW5nKGl0ZW0pPy5iYXNlUHJpY2UgfHwgMCk7XG4gICAgfVxuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBQcmVjaW8gdGFjaGFkbyBsZWdhY3kgbyBgMGAuICovXG4gICAgZ2V0U3RyaWtlVGhyb3VnaFVuaXRQcmljZSA9IChpdGVtKTogbnVtYmVyID0+XG4gICAgICAgIE51bWJlcih0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRJdGVtUHJpY2VQcmVzZW50YXRpb24oaXRlbSwgdGhpcy5jaGFubmVsKS5wcmV2aW91cyB8fCAwKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgU3VtYSBkZSBwcm9tb2Npb25lcyB1bml0YXJpYXMgYXBsaWNhZGFzLiAqL1xuICAgIGdldFVuaXRQcm9tb3Rpb25Ub3RhbCA9IChpdGVtKTogbnVtYmVyID0+XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydEl0ZW1QcmljZVByZXNlbnRhdGlvbihpdGVtLCB0aGlzLmNoYW5uZWwpLmRpc2NvdW50O1xuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBQcmVjaW8gZmluYWwgdW5pdGFyaW8gbHVlZ28gZGUgcHJvbW9jaW9uZXMuICovXG4gICAgZ2V0RmluYWxVbml0UHJpY2UgPSAoaXRlbSk6IG51bWJlciA9PlxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRJdGVtUHJpY2VQcmVzZW50YXRpb24oaXRlbSwgdGhpcy5jaGFubmVsKS51bml0UHJpY2U7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIFByZWNpbyBwcmluY2lwYWwgYSBtb3N0cmFyIGp1bnRvIGFsIHRyaWdnZXIuICovXG4gICAgZ2V0RGlzcGxheWVkVW5pdFByaWNlID0gKGl0ZW0pOiBudW1iZXIgPT5cbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0SXRlbVByaWNlUHJlc2VudGF0aW9uKGl0ZW0sIHRoaXMuY2hhbm5lbCkudW5pdFByaWNlO1xuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBgdHJ1ZWAgc2kgZGViZSBtb3N0cmFyc2UgZWwgcHJlY2lvIGJhc2UganVudG8gYWwgZmluYWwuICovXG4gICAgc2hvdWxkU2hvd09yaWdpbmFsVW5pdFByaWNlID0gKGl0ZW0pOiBib29sZWFuID0+XG4gICAgICAgIHRoaXMuaGFzVW5pdFByb21vdGlvbnMoaXRlbSkgJiYgdGhpcy5nZXRGaW5hbFVuaXRQcmljZShpdGVtKSAhPT0gdGhpcy5nZXRPcmlnaW5hbFVuaXRQcmljZShpdGVtKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgYHRydWVgIHNpIGFkZW3DoXMgZGVsIGJhc2UgcHJpY2UgZXhpc3RlIHRhY2hhZG8gbGVnYWN5LiAqL1xuICAgIHNob3VsZFNob3dMZWdhY3lQcmljZU9yaWdpbiA9IChpdGVtKTogYm9vbGVhbiA9PlxuICAgICAgICB0aGlzLmdldFN0cmlrZVRocm91Z2hVbml0UHJpY2UoaXRlbSkgPiB0aGlzLmdldE9yaWdpbmFsVW5pdFByaWNlKGl0ZW0pO1xuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBFdGlxdWV0YSBmaW5hbCBkZWwgcmVzdW1lbi4gKi9cbiAgICBnZXRVbml0UHJvbW90aW9uRmluYWxQcmljZUxhYmVsID0gKGl0ZW0pOiBzdHJpbmcgPT5cbiAgICAgICAgdGhpcy5oYXNVbml0UHJvbW90aW9ucyhpdGVtKSA/ICdQcmVjaW8gZmluYWwnIDogJ1ByZWNpbyB1bml0YXJpbyc7XG5cbiAgICAvKipcbiAgICAgKiBCdXNjYSBkZW50cm8gZGUgdW5hIGxpc3RhIGVsIMOtdGVtIHF1ZSB0aWVuZSBhY3R1YWxtZW50ZSBlbCByZXN1bWVuIGFiaWVydG8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbXMgTGlzdGEgZGUgw610ZW1zIGRlbCBjYXJyaXRvLlxuICAgICAqIEByZXR1cm5zIMONdGVtIGFjdGl2byBvIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXRBY3RpdmVVbml0UHJvbW90aW9uSXRlbSA9IChpdGVtcykgPT5cbiAgICAgICAgaXRlbXM/LmZpbmQoaXRlbSA9PiBpdGVtPy5pdGVtX2lkID09PSB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQpIHx8IG51bGw7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIFByb21vY2lvbmVzIHVuaXRhcmlhcyBjcnVkYXMgZGVsIGJhY2tlbmQuICovXG4gICAgZ2V0VW5pdFByb21vdGlvbnMgPSAoaXRlbSk6IGFueVtdID0+IEFycmF5LmlzQXJyYXkoaXRlbT8udW5pdFByb21vdGlvbnMpID8gaXRlbS51bml0UHJvbW90aW9ucyA6IFtdO1xuXG4gICAgLyoqIENpZXJyYSBlbCByZXN1bWVuIGFsIGhhY2VyIGNsaWNrIGZ1ZXJhIGVuIGRlc2t0b3AuICovXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKVxuICAgIGhhbmRsZURvY3VtZW50Q2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3Zlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uSXRlbUlkID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyA9IHt9O1xuICAgIH1cblxuICAgIC8qKiBSZWNhbGN1bGEgZWwgbW9kbyBkZSBpbnRlcmFjY2nDs24geSBjaWVycmEgZWwgcmVzdW1lbiBhbCBjYW1iaWFyIGVsIHZpZXdwb3J0LiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICAgIGhhbmRsZVdpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVVbml0UHJvbW90aW9uVmlld3BvcnRNb2RlKCk7XG4gICAgICAgIHRoaXMuY2xvc2VVbml0UHJvbW90aW9uU3VtbWFyeSgpO1xuICAgIH1cblxuICAgIC8qKiBDaWVycmEgZWwgcmVzdW1lbiBlbiBtb2JpbGUgYWwgaGFjZXIgc2Nyb2xsIHBhcmEgZXZpdGFyIGRlc2FsaW5lYWNpw7NuIHZpc3VhbC4gKi9cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcbiAgICBoYW5kbGVXaW5kb3dTY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRzVW5pdFByb21vdGlvbkhvdmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlVW5pdFByb21vdGlvblN1bW1hcnkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlY3RhIHNpIGVsIGRpc3Bvc2l0aXZvIHNvcG9ydGEgYGhvdmVyYCByZWFsIHkgZGViZSBjb21wb3J0YXJzZSBjb21vIGRlc2t0b3AuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdm9pZGBcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVVuaXRQcm9tb3Rpb25WaWV3cG9ydE1vZGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuc3VwcG9ydHNVbml0UHJvbW90aW9uSG92ZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgJiYgdHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKGhvdmVyOiBob3ZlcikgYW5kIChwb2ludGVyOiBmaW5lKScpLm1hdGNoZXNcbiAgICAgICAgICAgICYmIHdpbmRvdy5pbm5lcldpZHRoID49IDc2ODtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhIGVzdGlsb3MgaW5saW5lIHBhcmEgbWFudGVuZXIgZWwgcmVzdW1lbiBtb2JpbGUgZGVudHJvIGRlbCB2aWV3cG9ydC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhbmNob3IgRWxlbWVudG8gdXNhZG8gY29tbyBhbmNsYSB2aXN1YWwuXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyA9IChhbmNob3I/OiBIVE1MRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3ZlciB8fCAhYW5jaG9yIHx8IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25TdW1tYXJ5U3R5bGVzID0ge307XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aWV3cG9ydFBhZGRpbmcgPSAxMjtcbiAgICAgICAgY29uc3QgcmVjdCA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgZXN0aW1hdGVkUG9wdXBIZWlnaHQgPSAyNjA7XG4gICAgICAgIGNvbnN0IG5leHRUb3AgPSByZWN0LmJvdHRvbSArIDg7XG4gICAgICAgIGNvbnN0IG1heFRvcCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGVzdGltYXRlZFBvcHVwSGVpZ2h0IC0gdmlld3BvcnRQYWRkaW5nO1xuICAgICAgICBjb25zdCB0b3AgPSBNYXRoLm1heCh2aWV3cG9ydFBhZGRpbmcsIE1hdGgubWluKG5leHRUb3AsIG1heFRvcCkpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlVW5pdFByb21vdGlvblN1bW1hcnlTdHlsZXMgPSB7XG4gICAgICAgICAgICBsZWZ0OiBgJHt2aWV3cG9ydFBhZGRpbmd9cHhgLFxuICAgICAgICAgICAgcmlnaHQ6IGAke3ZpZXdwb3J0UGFkZGluZ31weGAsXG4gICAgICAgICAgICB0b3A6IGAke3RvcH1weGAsXG4gICAgICAgICAgICB3aWR0aDogJ2F1dG8nLFxuICAgICAgICAgICAgJ21heC13aWR0aCc6ICdub25lJyxcbiAgICAgICAgICAgICdtYXgtaGVpZ2h0JzogYGNhbGMoMTAwdmggLSAke3RvcCArIHZpZXdwb3J0UGFkZGluZ31weClgLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFjdHVhbGl6YXJDYW50aWRhZChpdGVtOiBhbnksIGNhbnRpZGFkOiBudW1iZXIgfCBzdHJpbmcsIHN0b2NrOiBudW1iZXIsIGlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhcnRMb2FkaW5nKSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdWFudGl0eSA9IGl0ZW0ucHJvZHVjdD8udmFyaWFudHMgJiYgaXRlbS5wcm9kdWN0LnZhcmlhbnRzLmxlbmd0aCA+IDAgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSA6IDA7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtdWx0aXBsZVF1YW50aXR5ICYmIG11bHRpcGxlUXVhbnRpdHkgPiAwID8gbXVsdGlwbGVRdWFudGl0eSA6IDE7XG5cbiAgICAgICAgbGV0IG5ld1F1YW50aXR5OiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYW50aWRhZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gcGFyc2VJbnQoY2FudGlkYWQsIDEwKTtcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IHN0ZXAgfSk7XG4gICAgICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBNYXRoLnJvdW5kKG5ld1F1YW50aXR5IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBjYW50aWRhZDtcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZWVwU2FtZUNvbW1lbnQgPSBpdGVtPy5jb21tZW50cyA/PyB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlOyAvLyBBY3R1YWxpemEgbGEgcHJvcGllZGFkIHZpbmN1bGFkYSBhIGBbZGlzYWJsZWRdYFxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBGdW5jacOzbiBkZSBmbGVjaGEgcGFyYSBwcmVzZXJ2YXIgZWwgY29udGV4dG9cbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBjYXJ0SXRlbVBsdXMgPSAoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG11bHRpcGxlUXR5OiBudW1iZXIgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/Lm11bHRpcGxlUXVhbnRpdHkgfHwgMDtcbiAgICAgICAgY29uc3Qgc3RlcCA9IG11bHRpcGxlUXR5IHx8IDE7XG4gICAgICAgIGNvbnN0IHN0b2NrID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5zdG9jaztcbiAgICAgICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gaXRlbS5xdWFudGl0eTtcblxuICAgICAgICBjb25zdCBuZXh0ID0gc3RlcCA+IDEgJiYgY3VycmVudCAlIHN0ZXAgIT09IDBcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKGN1cnJlbnQgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgICAgIDogY3VycmVudCArIHN0ZXA7XG5cbiAgICAgICAgdGhpcy5hY3R1YWxpemFyQ2FudGlkYWQoaXRlbSwgbmV4dCwgc3RvY2ssICdjYXJ0UGx1cycpO1xuICAgIH1cblxuICAgIGNhcnRJdGVtTGVzcyA9IChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdHk6IG51bWJlciA9IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSB8fCAwO1xuICAgICAgICBjb25zdCBtaW5pbXVtUXR5OiBudW1iZXIgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/Lm1pbmltdW1JdGVtc1F1YW50aXR5IHx8IDA7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtdWx0aXBsZVF0eSB8fCAxO1xuICAgICAgICBjb25zdCBmbG9vciA9IG1pbmltdW1RdHkgfHwgc3RlcDtcbiAgICAgICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gaXRlbS5xdWFudGl0eTtcblxuICAgICAgICBjb25zdCBuZXh0ID0gc3RlcCA+IDEgJiYgY3VycmVudCAlIHN0ZXAgIT09IDBcbiAgICAgICAgICAgID8gTWF0aC5mbG9vcihjdXJyZW50IC8gc3RlcCkgKiBzdGVwXG4gICAgICAgICAgICA6IGN1cnJlbnQgLSBzdGVwO1xuXG4gICAgICAgIGlmIChuZXh0ID49IGZsb29yKSB7XG4gICAgICAgICAgICB0aGlzLmFjdHVhbGl6YXJDYW50aWRhZChpdGVtLCBuZXh0LCBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnN0b2NrLCAnY2FydExlc3MnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZGlyZWN0Q2hlY2tvdXQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmNhcnRTZXJ2aWNlLmhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9jaGVja291dGApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBzZSBwdWVkZSByZWRpcmlnaXIgYWwgY2hlY2tvdXQgZGViaWRvIGEgdW5hIHZhbGlkYWNpw7NuIGZhbGxpZGEuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVkaXJlY3RSZWdpc3RlciA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9hdXRoL2xvZ2luYClcblxuICAgIG9wZW5Nb2RhbCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwgeyBjbGFzczogJ21vZGFsLXhsJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHJlZGlyZWN0RGV0YWlsUHJvZHVjdChwcm9kdWN0KSB7XG4gICAgICAgIGxldCB2YXJpYW50ID0gcHJvZHVjdC52YXJpYW50c1swXVxuICAgICAgICBsZXQgcGF0aCA9ICcvcHJvZHVjdC8nXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5jb2RlXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5vcHRpb25zLmxlbmd0aCA/IFwiP3ZhcmlhbnQ9dHJ1ZVwiIDogXCJcIlxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHBhdGgpXG4gICAgfVxuXG4gICAgZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZSksXG4gICAgICAgICAgICBtb250aCA9ICcnICsgKGQuZ2V0TW9udGgoKSArIDEpLFxuICAgICAgICAgICAgZGF5ID0gJycgKyBkLmdldERhdGUoKSxcbiAgICAgICAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgaWYgKG1vbnRoLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xuICAgICAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpXG4gICAgICAgICAgICBkYXkgPSAnMCcgKyBkYXk7XG5cbiAgICAgICAgcmV0dXJuIFt5ZWFyLCBtb250aCwgZGF5XS5qb2luKCctJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2FyZ2FNb2RhbChpdGVtKSB7XG5cbiAgICAgICAgLy8gT2J0aWVuZSBsYXMgc2VkZXMgZGVsIGNsaWVudGVcbiAgICAgICAgY29uc3Qgc2VkZXMgPSBhd2FpdCB0aGlzLmNhcnRTZXJ2aWNlLmdldEFkZHJlc3NCb29rKCk7XG5cbiAgICAgICAgLy8gQ3JlbyB1bmEgc2VyaWUgZGUgdmFyaWFibGVzIHF1ZSB2b3kgYSBuZWNlc2l0YXIsIGlkIHBhcmEgY29udHJvbGFyIGxhcyB2dWVsdGFzIHF1ZSBkYSB5IGN1YW50YXMgbGluZWFzIGhheSB5IGFsbElEIHBhcmEgYWxtYWNlbmFyIGxvcyBJRCBkZSBsb3MgbG90ZXMuXG4gICAgICAgIHZhciBpZCA9IDE7XG4gICAgICAgIHZhciB0aGlzXyA9IHRoaXM7XG4gICAgICAgIHZhciBhbGxJRCA9IFtdO1xuXG4gICAgICAgIC8vIEHDsWFkZSBsb3MgZGF0b3MgYWwgZW5jYWJlemFkbyBkZWwgTW9kYWxcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuY2FiZXphZG9Nb2RhbCcpLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cInRpdGxlIHRleHQtZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZSBoNSBkLWJsb2NrIG0tMCBwLTAgbS0wIHAtMFwiPjxwIGNsYXNzPVwibm9tYnJlIG1iLTBcIiBpZD1cInByb2R1Y3ROYW1lXCI+JyArIGl0ZW1bJ3Byb2R1Y3QnXVsnbmFtZSddICsgJzwvcD48c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBwcy0yIG1zLTFcIiBpZD1cInByb2R1Y3RSZWZcIj5SZWY6JyArIGl0ZW1bJ3ZhcmlhbnRfaWQnXSArICc8L3NtYWxsPjwvYT4nO1xuXG4gICAgICAgIC8vIEJvcnJhbW9zIHRvZG9zIGxvcyBkYXRvcyBkZSBsb3MgbG90ZXMgYW50ZXJpb3Jlc1xuICAgICAgICB2YXIgYm9keVRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb3RfYm9keV90YWJsZVwiKSBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgICAgICBib2R5VGFibGUuaW5uZXJIVE1MID0gJyc7XG5cbiAgICAgICAgLy8gUmVjb3JyZSB0b2RvcyBsb3MgYXJ0aWN1bG9zIHkgZW5jdWVudHJhIHNpIHRpZW5lbiBsb3RlcyBvIG5vLCBzaSB0aWVuZSBjcmVhIGxhcyBsaW5lYXNcbiAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuZ2V0Q2FydDIoKS5mb3JFYWNoKGkgPT4ge1xuXG4gICAgICAgICAgICBpZiAoaVsnaXRlbV9pZCddID09IGl0ZW0uaXRlbV9pZCAmJiBpWydsb3QnXSAhPSAnJykge1xuICAgICAgICAgICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgICAgICBpWydsb3QnXS5mb3JFYWNoKGxvdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMSA9IHJvdy5pbnNlcnRDZWxsKDApO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDIgPSByb3cuaW5zZXJ0Q2VsbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNCA9IHJvdy5pbnNlcnRDZWxsKDMpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDUgPSByb3cuaW5zZXJ0Q2VsbCg0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShsb3RbJ2RhdGVfcmVxdWVzdCddKSk7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwxLmlubmVySFRNTCA9ICc8aW5wdXQgaWQ9XCJpZCcgKyBpZCArICdcIiAgc3R5bGU9XCJib3JkZXI6IDA7XCIgdmFsdWU9XCInICsgbG90LmlkICsgJ1wiIGRpc2FibGVkPic7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIGxvdC5xdWFudGl0eSArICdcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInICsgbG90LnF1YW50aXR5ICsgJ1wiPic7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiB2YWx1ZT1cIicgKyB0aGlzLmZvcm1hdERhdGUoZGF0ZSkgKyAnXCIgaWQ9XCJkZWxpdmVyeURhdGUnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPic7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvcGNpb25lcyA9IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWRlLmlkID09IGxvdC5zaGlwcGluZ19hZGRyZXNzX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIiBzZWxlY3RlZD4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2VsbDQuaW5uZXJIVE1MID0gJzxzZWxlY3QgIGlkPVwic2hpcHBpbmdBZGRyZXNzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nICsgb3BjaW9uZXMgKyAnPC9zZWxlY3Q+JztcbiAgICAgICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcbiAgICAgICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gdmFsdWU9XCInICsgbG90LmlkICsgJ1wiIGNsYXNzPVwiYnRuXCIgaWQ9XCJib3RvbkJvcnJhclwiPjxpbWcgc3JjPVwiLi9hc3NldHMvbWFxdWV0YWRvL2ltZy9pYy1ib3JyYXIuc3ZnXCIgYWx0PVwiXCI+IDwvYnV0dG9uPjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cyID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcbiAgICAgICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XG4gICAgICAgICAgICAgICAgICAgIGZpbGEyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sbGFwc2VcIiBpZD1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIj48aW5wdXQgaWQ9XCJub3RlcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHZhbHVlPVwiJyArIGxvdC5ub3RlcyArICdcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xuXG4gICAgICAgICAgICAgICAgICAgIGFsbElELnB1c2gobG90WydpZCddKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdG9uQWdyZWdhcicpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIC8vIC8vIFNlIGNhbGN1bGEgbGEgY2FudGlkYWQgeSBlbCBjb250YWRvciBwYXJhIHF1ZSBubyBleGNlZGEgbGEgY2FudGlkYWQgZGUgbGEgbGluZWEgYWwgY3JlYXIgdW4gbnVldm8gbG90ZS5cbiAgICAgICAgICAgIHZhciBjYW50aWRhZEFjdHVhbCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbnRpZGFkQWN0dWFsID0gY2FudGlkYWRBY3R1YWwgKyBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZSBhw7FhZGUgbGEgbGluZWEgc2llbXByZSB5IGN1YW5kbyBsYSBjYW50aWRhZCByZXN0YW50ZSBubyBzZWEgY2Vyby5cbiAgICAgICAgICAgIGlmIChjYW50aWRhZEFjdHVhbCA8IGl0ZW1bJ3F1YW50aXR5J10pIHtcbiAgICAgICAgICAgICAgICB2YXIgcm93ID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsMSA9IHJvdy5pbnNlcnRDZWxsKDApO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsMyA9IHJvdy5pbnNlcnRDZWxsKDIpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsNCA9IHJvdy5pbnNlcnRDZWxsKDMpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsNiA9IHJvdy5pbnNlcnRDZWxsKDUpO1xuICAgICAgICAgICAgICAgIGNlbGwxLmlubmVySFRNTCA9ICc8aW5wdXQgaWQ9XCJpZCcgKyBpZCArICdcIiAgc3R5bGU9XCJib3JkZXI6IDA7XCIgdmFsdWU9XCJQZW5kdC5cIiBkaXNhYmxlZD4nO1xuICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIChpdGVtWydxdWFudGl0eSddIC0gY2FudGlkYWRBY3R1YWwpICsgJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicgKyAoaXRlbVsncXVhbnRpdHknXSAtIGNhbnRpZGFkQWN0dWFsKSArICdcIj4nO1xuICAgICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcbiAgICAgICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBcIlwiXG4gICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHsgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nOyB9KTtcbiAgICAgICAgICAgICAgICBjZWxsNC5pbm5lckhUTUwgPSAnPHNlbGVjdCAgaWQ9XCJzaGlwcGluZ0FkZHJlc3MnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPicgKyBvcGNpb25lcyArICc8L3NlbGVjdD4nO1xuICAgICAgICAgICAgICAgIGNlbGw1LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0blNlZ3VpclwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS1icy10YXJnZXQ9XCIjY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgdmFsdWU9XCJWZXJcIj48L2lucHV0Pic7XG4gICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0PjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgdmFyIHJvdzIgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGEyID0gcm93Mi5pbnNlcnRDZWxsKDApXG4gICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XG4gICAgICAgICAgICAgICAgZmlsYTIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2xsYXBzZVwiIGlkPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiPjxpbnB1dCBpZD1cIm5vdGVzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xuXG5cbiAgICAgICAgICAgICAgICBpZCA9IGlkICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3QtbWF4LXF1YW50aXR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdWFuZG8gc2UgcHVsc2EgZWwgYm90b24gcGFyYSBndWFyZGFyIGVsIGxvdGUgcmVjb3JyZSBsYSBmdW5jaW9uIHkgZWwgZm9yICwgcmVjb3JyZSBsaW5lYSBhIGxpbmVhIHkgbGFuemEgZWwgZW5kcG9pbnQgY29uIHVuYSBwYXVzYSBwYXJhIHF1ZSBubyBzZSBwaWVyZGEgbmluZ3VubyB5IG5vIHNlIHF1ZWRlIHBpbGxhZG8uXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3Rvbkd1YXJkYXInKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2aW5nJyk7XG4gICAgICAgICAgICB0aGlzXy5jYXJnYW5kbyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgbG90SUQgPSAnJztcbiAgICAgICAgICAgIHZhciBjYW50aWRhZExvdGVzID0gMDtcbiAgICAgICAgICAgIC8vQ29udHJvbGEgcXVlIGxhcyBjYW50aWRhZGVzIGRlIGxvcyBsb3RlcyBubyBzZWEgc3VwZXJpb3IgYSBsYSBkZWwgcHJvZHVjdG8gZW4gZWwgY2Fycml0by5cbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRMb3RlcyA9IGNhbnRpZGFkTG90ZXMgKyBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5xdWFudGl0eSA+PSBjYW50aWRhZExvdGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2FudGlkYWRMb3Rlcyk7XG4gICAgICAgICAgICAgICAgdmFyIHkgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXR5ID0gcGFyc2VJbnQoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGl2ZXJ5RGF0ZSA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGl2ZXJ5RGF0ZVwiICsgaW5kZXgpKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGlwcGluZ0FkZHJlc3MgPSAkKFwiI3NoaXBwaW5nQWRkcmVzc1wiICsgaW5kZXgpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGVzID0gJChcIiNub3Rlc1wiICsgaW5kZXgpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzc05hbWUgPSAkKCcjc2hpcHBpbmdBZGRyZXNzJyArIGluZGV4ICsgJyBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb3RJRCA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG15SW5kZXggPSBhbGxJRC5pbmRleE9mKHBhcnNlSW50KGxvdElEKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXlJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxJRC5zcGxpY2UobXlJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobG90SUQgPT0gJ1BlbmR0LicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdudWV2bycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIDAsIGl0ZW0uaXRlbV9pZCwgcXVhbnRpdHksIGl0ZW0ucHJvZHVjdC5wcmljZSwgaXRlbS5xdWFudGl0eSwgaXRlbS5kaXNjb3VudCwgaXRlbS5wcm9kdWN0LnByaWNlICogcXVhbnRpdHksICduZXcnLCBkZWxpdmVyeURhdGUsIG5vdGVzLCBwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLCBzaGlwcGluZ0FkZHJlc3NOYW1lLCAnbmV3bG90Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb3RJRCAhPSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG90SUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIHBhcnNlSW50KGxvdElEKSwgaXRlbS5pdGVtX2lkLCBxdWFudGl0eSwgaXRlbS5wcm9kdWN0LnByaWNlLCBpdGVtLnF1YW50aXR5LCBpdGVtLmRpc2NvdW50LCBpdGVtLnByb2R1Y3QucHJpY2UgKiBxdWFudGl0eSwgJ2VkaXRlZCcsIGRlbGl2ZXJ5RGF0ZSwgbm90ZXMsIHBhcnNlSW50KHNoaXBwaW5nQWRkcmVzcyksIHNoaXBwaW5nQWRkcmVzc05hbWUsICdlZGl0bG90Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeSA9IGluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhbGxJRC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdib3JyYXInKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIGVsZW1lbnQsIDAsIDAsIDAsIDAsIDAsIDAsICdkZWxldGUnLCAwLCAnJywgMCwgJ2RlbGV0ZScsICdkZWxldGVsb3QnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FydFNlcnZpY2UubG9hZENhcnRCeVRva2VuKHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpKTsgfSwgMzAwICogeSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2ZWQnKTsgfSwgMzAwICogeSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FyZ2FuZG8gPSBmYWxzZSB9LCAzMDAgKiB5KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ0xhIGNhbnRpZGFkIGRlIGxvcyBsb3RlcyBlcyBzdXBlcmlvciBhIGxhIGNhbnRpZGFkIGRlbCBwcm9kdWN0by4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnI2JvdG9uQm9ycmFyJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcyk7XG4gICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykucmVtb3ZlKCk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBjbG9zZU1vZGFsKGlkKSB7XG4gICAgICAgICQoJyMnICsgaWQpLm1vZGFsKCdoaWRlJyk7XG4gICAgfVxuXG4gICAgY2hlY2tTdG9jayhpdGVtKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBpdGVtLnByb2R1Y3QudmFyaWFudHMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnZhcmlhbnRfaWQgPT09IHZhcmlhbnQuY29kZSkge1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYW50LnN0b2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNvbG8gc2UgZWplY3V0YSBzaSBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzblxuICAgIH1cblxuICAgIHVwZGF0ZUFsbFN0b2NrKCkge1xuICAgICAgICBjb25zdCBpdGVtczogYW55W10gPSBbXTtcblxuICAgICAgICAvLyBEZWZpbmUgbGEgc3VzY3JpcGNpw7NuIGFudGVzIGRlIHVzYXJsYVxuXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUgJiYgIXRoaXMuZXhpdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmRlbGV0ZUNhcnRJdGVtKGl0ZW0sIGZhbHNlKTsgLy8gQm9ycmEgZWwgYXJ0w61jdWxvXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucXVhbnRpdHkgPiB2YXJpYW50LnN0b2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiB2YXJpYW50LnN0b2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgIC8vIERlc3VzY3LDrWJldGUgYW50ZXMgZGUgYWN0dWFsaXphclxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkQWxsVG9DYXJ0KGl0ZW1zKTsgIC8vIEFjdHVhbGl6YSBlbCBjYXJyaXRvXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhpdFVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy51cGRhdGVBbGxTdG9jaygpOyAgLy8gVnVlbHZlIGEgdmVyaWZpY2FyIGVsIHN0b2NrXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG5cbiAgICBnZXRWYXJpYW50cyA9IHByb2R1Y3QgPT4ge1xuXG4gICAgICAgIGxldCBpdGVtID0gcHJvZHVjdC5wcm9kdWN0XG5cbiAgICAgICAgaWYgKGl0ZW0udmFyaWFudHMgJiYgaXRlbS52YXJpYW50cy5sZW5ndGggJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zICYmIGl0ZW0udmFyaWFudHNbMF0ub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gaXRlbS52YXJpYW50c1swXS5vcHRpb25zXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHRoaXMudmFyaWFudHNUb1Nob3cuZmluZChuYW1lID0+IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpXG4gICAgICAgICAgICBsZXQgb3B0aW9uc01hcCA9IFtdXG4gICAgICAgICAgICBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbkFkZGVkID0gZmFsc2U7ICAvLyBWYXJpYWJsZSBwYXJhIGV2aXRhciBtw7psdGlwbGVzIGluc2VyY2lvbmVzXG5cbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uMi5jb2RlID09ICdDT0xPUicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24yLnZhbHVlcy5mb3JFYWNoKGNvbG9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yLmNvZGUgPT0gb3B0aW9uW2VudHJ5XSAmJiAhb3B0aW9uQWRkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7IG5hbWU6IGVudHJ5LCB2YWx1ZTogb3B0aW9uW2VudHJ5XSwgaW1hZ2U6IGNvbG9yLmltYWdlLCBtb2JpbGVJbWFnZTogY29sb3IubW9iaWxlSW1hZ2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7IC8vIE1hcmNhciBvcGNpw7NuIGFncmVnYWRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIG5vIHNlIGHDsWFkacOzIGxhIG9wY2nDs24gZGUgQ09MT1IsIG1hbmVqYXIgb3RyYXMgb3BjaW9uZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25BZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uMi5jb2RlICE9PSAnQ09MT1InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25bZW50cnldXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkFkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBjcmVhdGVEaXNjb3VudE1lc3NhZ2Uoc2FsZXByaWNlOiBudW1iZXIsIHByaWNlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoaXNOYU4oc2FsZXByaWNlKSB8fCBpc05hTihwcmljZSkgfHwgc2FsZXByaWNlID49IHByaWNlIHx8IHNhbGVwcmljZSA8PSAwIHx8IHByaWNlIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkaXNjb3VudFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKCgocHJpY2UgLSBzYWxlcHJpY2UpIC8gcHJpY2UpICogMTAwKTtcblxuICAgICAgICBsZXQgZGlzY291bnRNZXNzYWdlID0gYCR7ZGlzY291bnRQZXJjZW50YWdlfSUgT0ZGYDtcbiAgICAgICAgcmV0dXJuIGRpc2NvdW50TWVzc2FnZTtcbiAgICB9XG4gICAgZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsLnR5cGUgPT0gJ2IyYicgPyB0aGlzLmNoYW5uZWwud2hvbGVzYWxlck1pbmltdW1QdXJjaGFzZUFtb3VudCA6IHRoaXMuY2hhbm5lbC5yZXRhaWxlck1pbmltdW1QdXJjaGFzZUFtb3VudFxuXG4gICAgfVxuXG4gICAgZXhjZWVkc01pbmltdW1BbW91bnQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPj0gdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVkaXJlY3RDaGVja291dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVmVyaWZpY2FyIHNpIGhheSB1biBiYWxhbmNlIGRlIGNsaWVudGUgYWN0aXZvXG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmJhbGFuY2VDdXN0b21lciQuc3Vic2NyaWJlKGJhbGFuY2VDdXN0b21lciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGJhbGFuY2VDdXN0b21lciAmJiBiYWxhbmNlQ3VzdG9tZXIuY3JlZGl0QW1vdW50ICE9PSBudWxsICYmIGJhbGFuY2VDdXN0b21lci5jcmVkaXRBbW91bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncXVhbnRpdHktbm90LWV4Y2VlZGVkLXdoaXRvdXQtYW1vdW50Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3F1YW50aXR5LW5vdC1leGNlZWRlZCcsIHsgYW1vdW50OiB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnVuc3Vic2NyaWJlKCk7IC8vIERlc3VzY3JpYmlyc2UgaW5tZWRpYXRhbWVudGUgZGVzcHXDqXMgZGUgb2J0ZW5lciBlbCB2YWxvclxuICAgICAgICB9XG4gICAgfVxuXG5cbn1cblxuXG5cbiJdfQ==
|
|
842
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBeUMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzlGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBU3RGO0lBQXFDLG1DQUFlO0lBb0NoRCx5QkFDVyxXQUF3QixFQUN4QixXQUF3QixFQUNyQixNQUFpQixFQUNwQixlQUFnQyxFQUNoQyxNQUFjLEVBQ2QsWUFBNEIsRUFD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O0lBb0RELCtDQUFxQixHQUFyQixVQUFzQixTQUFpQixFQUFFLEtBQWE7UUFDbEQsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ3hGLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUV6RSxJQUFJLGVBQWUsR0FBTSxrQkFBa0IsVUFBTyxDQUFDO1FBQ25ELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7O2dCQXJ1QnVCLFdBQVc7Z0JBQ1gsV0FBVztnQkFDYixTQUFTO2dCQUNILGVBQWU7Z0JBQ3hCLE1BQU07Z0JBQ0EsY0FBYztnQkFDVixZQUFZO2dCQUNYLGlCQUFpQjtnQkFDZCxvQkFBb0I7Z0JBQ2xDLFVBQVU7O0lBaVI3QjtRQURDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQzs4REFROUI7SUFJRDtRQURDLFlBQVksQ0FBQyxlQUFlLENBQUM7NkRBSTdCO0lBSUQ7UUFEQyxZQUFZLENBQUMsZUFBZSxDQUFDOzZEQU83QjtJQXZWUSxlQUFlO1FBTDNCLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLFlBQXVDOztTQUUxQyxDQUFDO09BQ1csZUFBZSxDQWd5QjNCO0lBQUQsc0JBQUM7Q0FBQSxBQWh5QkQsQ0FBcUMsZUFBZSxHQWd5Qm5EO1NBaHlCWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBIb3N0TGlzdGVuZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL21vZGFsXCI7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbC9icy1tb2RhbC1yZWYuc2VydmljZSc7XG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tIFwiLi4vLi4vY29yZS5jb25zdHNcIjtcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2R1Y3RzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2R1Y3RzL3Byb2R1Y3RzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlclwiO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2VcIjtcbmltcG9ydCB7IGludGVydmFsLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQWRkcmVzc2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGVja291dC9hZGRyZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlby5zZXJ2aWNlJztcbmltcG9ydCB7IG5hdmlnYXRlSG9tZUFmdGVyQ2FydEJvb3RzdHJhcFJlY292ZXJ5IH0gZnJvbSAnLi4vY2FydC1ib290c3RyYXAtbmF2aWdhdGlvbic7XG5kZWNsYXJlIHZhciAkOiBhbnk7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtY2FydC1lYycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhcnQtZWMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NhcnQtZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDYXJ0RWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cblxuICAgIHB1YmxpYyB2YXJpYW50c1RvU2hvdzogc3RyaW5nW10gPSBbJ1RBTExFJywgJ0NPTE9SJ107XG4gICAgcHVibGljIGlzTG9nZ2VkSW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgbWVkaWFVcmwgPSAnJztcbiAgICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWYgfCBudWxsO1xuICAgIHB1YmxpYyBwcm9tb3Rpb25zID0gW107XG4gICAgcHVibGljIGl0ZW1zOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcHJpdmF0ZSBjYXJnYW5kbzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjaGFubmVsOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgdXBkYXRlU3RvY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgZXhpdFVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgaGlkZURpc2NvdW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBoaWRlVGF4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgc2hvd1RheExlZ2VuZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBjYXJ0TG9hZGluZyA9IGZhbHNlO1xuICAgIHB1YmxpYyBlbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHB1YmxpYyBzdW1tYXJ5UHJvbW90aW9uQW1vdW50JDtcbiAgICBwdWJsaWMgaGFzQXBwbGllZENvdXBvbiQ7XG4gICAgcHVibGljIGFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBhY3RpdmVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgIHB1YmxpYyBzdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3ZlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgY2FydEJvb3RzdHJhcFJlY292ZXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBoYW5kbGVDYXJ0Qm9vdHN0cmFwUmVjb3ZlcnkgPSAoKSA9PiB7XG4gICAgICAgIG5hdmlnYXRlSG9tZUFmdGVyQ2FydEJvb3RzdHJhcFJlY292ZXJ5KFxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIudXJsLFxuICAgICAgICAgICAgJ2NhcnQnLFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5jYXJ0U2VydmljZS5jb25zdW1lQ2FydEJvb3RzdHJhcFJlY292ZXJ5KCksXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJylcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjYXJ0U2VydmljZTogQ2FydFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBjb25zdHM6IENvbnN0YW50cyxcbiAgICAgICAgcHVibGljIHByb2R1Y3RzU2VydmljZTogUHJvZHVjdHNTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgdG9hc3RyU2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgYWRkcmVzc2luZ1NlcnZpY2U6IEFkZHJlc3NpbmdTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgc2VvOiBTZW9TZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgICAgIHRoaXMubWVkaWFVcmwgPSB0aGlzLmNvbnN0cy5tZWRpYVVybCgpO1xuICAgICAgICB0aGlzLnN1bW1hcnlQcm9tb3Rpb25BbW91bnQkID0gdGhpcy5jYXJ0U2VydmljZS5nZXRTdW1tYXJ5UHJvbW90aW9uQW1vdW50KCk7XG4gICAgICAgIHRoaXMuaGFzQXBwbGllZENvdXBvbiQgPSB0aGlzLmNhcnRTZXJ2aWNlLmhhc0FwcGxpZWRDb3Vwb24oKTtcblxuICAgIH1cblxuXG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlTG9nZ2VkSW4oKSB7XG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY2FydEJvb3RzdHJhcFJlY292ZXJ5U3Vic2NyaXB0aW9uID0gdGhpcy5jYXJ0U2VydmljZS5jYXJ0Qm9vdHN0cmFwUmVjb3Zlcnkuc3Vic2NyaWJlKHRoaXMuaGFuZGxlQ2FydEJvb3RzdHJhcFJlY292ZXJ5KTtcbiAgICAgICAgdGhpcy5oYW5kbGVDYXJ0Qm9vdHN0cmFwUmVjb3ZlcnkoKTtcbiAgICAgICAgd2luZG93LnNjcm9sbCgwLCAwKTtcbiAgICAgICAgdGhpcy51cGRhdGVVbml0UHJvbW90aW9uVmlld3BvcnRNb2RlKCk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UucHJvbW90aW9ucy5zdWJzY3JpYmUocHJvbW90aW9ucyA9PiB0aGlzLnByb21vdGlvbnMgPSBwcm9tb3Rpb25zKTtcbiAgICAgICAgLy8gICAgY29uc29sZS5sb2codGhpcy5jYXJ0U2VydmljZS5nZXRUYXhlcygpKTtcblxuICAgICAgICB0aGlzLmNoYW5uZWxDb25maWdTZXJ2aWNlLmNoYW5uZWxDb25maWckLnN1YnNjcmliZShjaGFubmVsID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWwgfHwge307XG4gICAgICAgICAgICB0aGlzLmhpZGVQcmljZXMgPSBjaGFubmVsPy5oaWRlUHJpY2VzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gY2hhbm5lbD8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRheGVzID0gY2hhbm5lbD8uaGlkZVRheGVzID8/IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93VGF4TGVnZW5kID0gY2hhbm5lbD8uc2hvd1RheExlZ2VuZCA/PyBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPSBjaGFubmVsPy5lbmFibGVGaWVsZE5vdGVzSW5BcnRpY2xlRmlsZSA/PyBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGlkZVByaWNlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2Uuc2hvd1ByaWNlJC5zdWJzY3JpYmUoKHNob3dQcmljZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UubG9hZGluZy5zdWJzY3JpYmUoaXNMb2FkaW5nID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FydExvYWRpbmcgPSBpc0xvYWRpbmc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRTZW8oKTtcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXG5cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jYXJ0Qm9vdHN0cmFwUmVjb3ZlcnlTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0U2VvID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBzaXRlTmFtZSA9IHRoaXMuc2VvLmdldFNpdGVOYW1lKCk7XG4gICAgICAgIHRoaXMuc2VvLnNldFRpdGxlKGBDYXJyaXRvIHwgJHtzaXRlTmFtZX1gKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0RGVzY3JpcHRpb24oYFJldmlzw6EgbG9zIHByb2R1Y3RvcyBzZWxlY2Npb25hZG9zIHkgZmluYWxpesOhIHR1IGNvbXByYSBlbiAke3NpdGVOYW1lfS5gKTtcbiAgICAgICAgdGhpcy5zZW8uc2V0T2dUeXBlKCd3ZWJzaXRlJyk7XG4gICAgICAgIHRoaXMuc2VvLnNldE5vSW5kZXgodHJ1ZSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlby5zZXRDYW5vbmljYWwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmllcnRlIHVuIG1vbnRvIGNydWRvIGFsIGZvcm1hdG8gZGVjaW1hbCBlc3BlcmFkbyBwb3IgbGEgVUkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYW1vdW50IE1vbnRvIGVuIGNlbnRhdm9zIG8gZW50ZXJvIGNydWRvLlxuICAgICAqIEByZXR1cm5zIE1vbnRvIGRlY2ltYWwuXG4gICAgICovXG4gICAgdG9EZWNpbWFsID0gKGFtb3VudCkgPT4gdGhpcy5jb25zdHMudG9EZWNpbWFsKGFtb3VudCk7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIFBvcmNlbnRhamUgZGUgZGVzY3VlbnRvIGxlZ2FjeSBwYXJhIGVsIGJhZGdlIGAlIE9GRmAuICovXG4gICAgZ2V0SXRlbURpc2NvdW50ID0gKGl0ZW0pOiBudW1iZXIgPT4gTnVtYmVyKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/LmRpc2NvdW50UGVyY2VudCB8fCAwKTtcblxuICAgIC8qKlxuICAgICAqIERldnVlbHZlIGVsIHBvcmNlbnRhamUgZWZlY3Rpdm8gdG90YWwgZGVsIMOtdGVtLCBjb25zaWRlcmFuZG8gcHJvbW9jaW9uZXMgdW5pdGFyaWFzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uXG4gICAgICogQHJldHVybnMgUG9yY2VudGFqZSBlbnRlcm8gY2FsY3VsYWRvIGNvbnRyYSBlbCBwcmVjaW8gZGUgcmVmZXJlbmNpYSBkZWwgw610ZW0uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFNpIGV4aXN0ZSBwcmVjaW8gdGFjaGFkbywgY29tcGFyYSBgZmluYWxQcmljZWAgY29udHJhIGBzdHJpa2VQcmljZWAuXG4gICAgICogU2kgbm8gZXhpc3RlLCB1c2EgYGJhc2VQcmljZWAgY29tbyByZWZlcmVuY2lhLlxuICAgICAqIEVzdG8gcGVybWl0ZSBtb3N0cmFyIHVuIGJhZGdlIGNvaGVyZW50ZSBjdWFuZG8gZWwgcHJlY2lvIHZpc2libGUgeWEgaW5jbHV5ZVxuICAgICAqIGRlc2N1ZW50b3MvcHJvbW9jaW9uZXMgdW5pdGFyaWFzIGFkaWNpb25hbGVzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIC8vIHN0cmlrZVByaWNlIDI0MDAwMCwgZmluYWxQcmljZSA0NTAwMCA9PiA4MVxuICAgICAqIHRoaXMuZ2V0SXRlbUVmZmVjdGl2ZURpc2NvdW50KGl0ZW0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldEl0ZW1FZmZlY3RpdmVEaXNjb3VudCA9IChpdGVtKTogbnVtYmVyID0+IE51bWJlcih0aGlzLmNhcnRTZXJ2aWNlLmdldEl0ZW1QcmljaW5nKGl0ZW0pPy5lZmZlY3RpdmVEaXNjb3VudFBlcmNlbnQgfHwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBTdWJ0b3RhbCBhY3R1YWwgZGVsIHJlbmdsw7NuLlxuICAgICAqXG4gICAgICogRWwgYmFja2VuZCBudWV2byBpbmZvcm1hIGBpdGVtLnN1YnRvdGFsYCBzaW4gaW1wdWVzdG9zIG5pIGRlc2N1ZW50b3NcbiAgICAgKiBnZW5lcmFsZXMgZGUgb3JkZW4uIExhcyByZXNwdWVzdGFzIGxlZ2FjeSBjb250aW7DumFuIHVzYW5kbyBgaXRlbS50b3RhbGAuXG4gICAgICovXG4gICAgZ2V0RGlzcGxheWVkSXRlbVRvdGFsID0gKGl0ZW0pOiBudW1iZXIgPT5cbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0SXRlbVByaWNlUHJlc2VudGF0aW9uKGl0ZW0sIHRoaXMuY2hhbm5lbCkuc3VidG90YWw7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIGB0cnVlYCBzaSBlbCBiYWNrZW5kIGluZm9ybcOzIHByb21vY2lvbmVzIHVuaXRhcmlhcy4gKi9cbiAgICBoYXNVbml0UHJvbW90aW9ucyA9IChpdGVtKTogYm9vbGVhbiA9PiBCb29sZWFuKHRoaXMuY2FydFNlcnZpY2UuZ2V0SXRlbVByaWNpbmcoaXRlbSk/Lmhhc1VuaXRQcm9tb3Rpb25zKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbXMgw410ZW1zIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBgdHJ1ZWAgc2kgYWwgbWVub3MgdW4gw610ZW0gdGllbmUgcHJvbW9jaW9uZXMgdW5pdGFyaWFzLiAqL1xuICAgIGhhc0FueVVuaXRQcm9tb3Rpb25zID0gKGl0ZW1zOiBhbnlbXSA9IFtdKTogYm9vbGVhbiA9PiBpdGVtcy5zb21lKGl0ZW0gPT4gdGhpcy5oYXNVbml0UHJvbW90aW9ucyhpdGVtKSk7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIGB0cnVlYCBzaSBlbCByZXN1bWVuIGFjdGl2byBwZXJ0ZW5lY2UgYSBlc2Ugw610ZW0uICovXG4gICAgaXNVbml0UHJvbW90aW9uU3VtbWFyeU9wZW4gPSAoaXRlbSk6IGJvb2xlYW4gPT4gdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uSXRlbUlkID09PSBpdGVtPy5pdGVtX2lkO1xuXG4gICAgLyoqXG4gICAgICogQWJyZSBlbCByZXN1bWVuIGRlbCDDrXRlbSBhbCBlbnRyYXIgY29uIGVsIG1vdXNlIGVuIGRlc2t0b3AuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by5cbiAgICAgKiBAcGFyYW0gYW5jaG9yIEVsZW1lbnRvIHVzYWRvIGNvbW8gYW5jbGEgdmlzdWFsLlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqL1xuICAgIGhhbmRsZVVuaXRQcm9tb3Rpb25Nb3VzZUVudGVyID0gKGl0ZW0sIGFuY2hvcjogSFRNTEVsZW1lbnQpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN1cHBvcnRzVW5pdFByb21vdGlvbkhvdmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wZW5Vbml0UHJvbW90aW9uU3VtbWFyeShpdGVtLCBhbmNob3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENpZXJyYSBlbCByZXN1bWVuIGFsIHNhbGlyIGNvbiBlbCBtb3VzZSBlbiBkZXNrdG9wLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gYXNvY2lhZG8gYWwgcmVzdW1lbi5cbiAgICAgKiBAcmV0dXJucyBgdm9pZGBcbiAgICAgKi9cbiAgICBoYW5kbGVVbml0UHJvbW90aW9uTW91c2VMZWF2ZSA9IChpdGVtKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3Zlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZVVuaXRQcm9tb3Rpb25TdW1tYXJ5KGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFicmUgZWwgcmVzdW1lbiBkZSBwcm9tb2Npb25lcyB1bml0YXJpYXMgcGFyYSB1biDDrXRlbSBwdW50dWFsLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uXG4gICAgICogQHBhcmFtIGFuY2hvciBFbGVtZW50byBkZSByZWZlcmVuY2lhIHBhcmEgcG9zaWNpb25hbWllbnRvLlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqL1xuICAgIG9wZW5Vbml0UHJvbW90aW9uU3VtbWFyeSA9IChpdGVtLCBhbmNob3I/OiBIVE1MRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVW5pdFByb21vdGlvbnMoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlVW5pdFByb21vdGlvbkl0ZW1JZCA9IGl0ZW0/Lml0ZW1faWQgPz8gbnVsbDtcbiAgICAgICAgdGhpcy51cGRhdGVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyhhbmNob3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENpZXJyYSBlbCByZXN1bWVuIGFjdGl2by5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIFNpIHNlIGVudsOtYSwgc29sbyBjaWVycmEgY3VhbmRvIGNvaW5jaWRlIGNvbiBlbCDDrXRlbSBhY3Rpdm8uXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgY2xvc2VVbml0UHJvbW90aW9uU3VtbWFyeSA9IChpdGVtPyk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWl0ZW0gfHwgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uSXRlbUlkID09PSBpdGVtPy5pdGVtX2lkKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWx0ZXJuYSBtYW51YWxtZW50ZSBsYSBhcGVydHVyYSBkZWwgcmVzdW1lbiBwYXJhIHVuIMOtdGVtLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uXG4gICAgICogQHBhcmFtIGFuY2hvciBFbGVtZW50byBkZSByZWZlcmVuY2lhLlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHB1bnRlcm8uXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgdG9nZ2xlVW5pdFByb21vdGlvblN1bW1hcnkgPSAoaXRlbSwgYW5jaG9yOiBIVE1MRWxlbWVudCwgZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICghdGhpcy5oYXNVbml0UHJvbW90aW9ucyhpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNVbml0UHJvbW90aW9uU3VtbWFyeU9wZW4oaXRlbSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VVbml0UHJvbW90aW9uU3VtbWFyeShpdGVtKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3BlblVuaXRQcm9tb3Rpb25TdW1tYXJ5KGl0ZW0sIGFuY2hvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWFuZWphIGVsIGNsaWNrL3RhcCBzb2JyZSBlbCBwcmVjaW8gZW4gZGlzcG9zaXRpdm9zIHNpbiBob3Zlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLlxuICAgICAqIEBwYXJhbSBhbmNob3IgRWxlbWVudG8gdXNhZG8gY29tbyB0cmlnZ2VyLlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGUgY2xpY2svdGFwLlxuICAgICAqIEByZXR1cm5zIGB2b2lkYFxuICAgICAqL1xuICAgIGhhbmRsZVVuaXRQcm9tb3Rpb25QcmljZUNsaWNrID0gKGl0ZW0sIGFuY2hvcjogSFRNTEVsZW1lbnQsIGV2ZW50OiBFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3Zlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2dnbGVVbml0UHJvbW90aW9uU3VtbWFyeShpdGVtLCBhbmNob3IsIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdml0YSBxdWUgZXZlbnRvcyBkZW50cm8gZGVsIHJlc3VtZW4gc2UgcHJvcGFndWVuIGFsIGRvY3VtZW50by5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZGVsIHB1bnRlcm8uXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgc3RvcFVuaXRQcm9tb3Rpb25TdW1tYXJ5RXZlbnQgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgUHJlY2lvIHVuaXRhcmlvIGJhc2UgKGBzYWxlcHJpY2VgIG8gYHByaWNlYCkuICovXG4gICAgZ2V0T3JpZ2luYWxVbml0UHJpY2UgPSAoaXRlbSk6IG51bWJlciA9PiB7XG4gICAgICAgIGNvbnN0IHByZXNlbnRhdGlvbiA9IHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydEl0ZW1QcmljZVByZXNlbnRhdGlvbihpdGVtLCB0aGlzLmNoYW5uZWwpO1xuICAgICAgICByZXR1cm4gcHJlc2VudGF0aW9uLnNvdXJjZSA9PT0gJ2xpbmVQcmljaW5nJ1xuICAgICAgICAgICAgPyBwcmVzZW50YXRpb24udW5pdFByaWNlXG4gICAgICAgICAgICA6IE51bWJlcih0aGlzLmNhcnRTZXJ2aWNlLmdldEl0ZW1QcmljaW5nKGl0ZW0pPy5iYXNlUHJpY2UgfHwgMCk7XG4gICAgfVxuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBQcmVjaW8gdGFjaGFkbyBsZWdhY3kgbyBgMGAuICovXG4gICAgZ2V0U3RyaWtlVGhyb3VnaFVuaXRQcmljZSA9IChpdGVtKTogbnVtYmVyID0+XG4gICAgICAgIE51bWJlcih0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRJdGVtUHJpY2VQcmVzZW50YXRpb24oaXRlbSwgdGhpcy5jaGFubmVsKS5wcmV2aW91cyB8fCAwKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgU3VtYSBkZSBwcm9tb2Npb25lcyB1bml0YXJpYXMgYXBsaWNhZGFzLiAqL1xuICAgIGdldFVuaXRQcm9tb3Rpb25Ub3RhbCA9IChpdGVtKTogbnVtYmVyID0+XG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydEl0ZW1QcmljZVByZXNlbnRhdGlvbihpdGVtLCB0aGlzLmNoYW5uZWwpLmRpc2NvdW50O1xuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBQcmVjaW8gZmluYWwgdW5pdGFyaW8gbHVlZ28gZGUgcHJvbW9jaW9uZXMuICovXG4gICAgZ2V0RmluYWxVbml0UHJpY2UgPSAoaXRlbSk6IG51bWJlciA9PlxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmdldENhcnRJdGVtUHJpY2VQcmVzZW50YXRpb24oaXRlbSwgdGhpcy5jaGFubmVsKS51bml0UHJpY2U7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIFByZWNpbyBwcmluY2lwYWwgYSBtb3N0cmFyIGp1bnRvIGFsIHRyaWdnZXIuICovXG4gICAgZ2V0RGlzcGxheWVkVW5pdFByaWNlID0gKGl0ZW0pOiBudW1iZXIgPT5cbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5nZXRDYXJ0SXRlbVByaWNlUHJlc2VudGF0aW9uKGl0ZW0sIHRoaXMuY2hhbm5lbCkudW5pdFByaWNlO1xuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBgdHJ1ZWAgc2kgZGViZSBtb3N0cmFyc2UgZWwgcHJlY2lvIGJhc2UganVudG8gYWwgZmluYWwuICovXG4gICAgc2hvdWxkU2hvd09yaWdpbmFsVW5pdFByaWNlID0gKGl0ZW0pOiBib29sZWFuID0+XG4gICAgICAgIHRoaXMuaGFzVW5pdFByb21vdGlvbnMoaXRlbSkgJiYgdGhpcy5nZXRGaW5hbFVuaXRQcmljZShpdGVtKSAhPT0gdGhpcy5nZXRPcmlnaW5hbFVuaXRQcmljZShpdGVtKTtcblxuICAgIC8qKiBAcGFyYW0gaXRlbSDDjXRlbSBkZWwgY2Fycml0by4gQHJldHVybnMgYHRydWVgIHNpIGFkZW3DoXMgZGVsIGJhc2UgcHJpY2UgZXhpc3RlIHRhY2hhZG8gbGVnYWN5LiAqL1xuICAgIHNob3VsZFNob3dMZWdhY3lQcmljZU9yaWdpbiA9IChpdGVtKTogYm9vbGVhbiA9PlxuICAgICAgICB0aGlzLmdldFN0cmlrZVRocm91Z2hVbml0UHJpY2UoaXRlbSkgPiB0aGlzLmdldE9yaWdpbmFsVW5pdFByaWNlKGl0ZW0pO1xuXG4gICAgLyoqIEBwYXJhbSBpdGVtIMONdGVtIGRlbCBjYXJyaXRvLiBAcmV0dXJucyBFdGlxdWV0YSBmaW5hbCBkZWwgcmVzdW1lbi4gKi9cbiAgICBnZXRVbml0UHJvbW90aW9uRmluYWxQcmljZUxhYmVsID0gKGl0ZW0pOiBzdHJpbmcgPT5cbiAgICAgICAgdGhpcy5oYXNVbml0UHJvbW90aW9ucyhpdGVtKSA/ICdQcmVjaW8gZmluYWwnIDogJ1ByZWNpbyB1bml0YXJpbyc7XG5cbiAgICAvKipcbiAgICAgKiBCdXNjYSBkZW50cm8gZGUgdW5hIGxpc3RhIGVsIMOtdGVtIHF1ZSB0aWVuZSBhY3R1YWxtZW50ZSBlbCByZXN1bWVuIGFiaWVydG8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbXMgTGlzdGEgZGUgw610ZW1zIGRlbCBjYXJyaXRvLlxuICAgICAqIEByZXR1cm5zIMONdGVtIGFjdGl2byBvIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXRBY3RpdmVVbml0UHJvbW90aW9uSXRlbSA9IChpdGVtcykgPT5cbiAgICAgICAgaXRlbXM/LmZpbmQoaXRlbSA9PiBpdGVtPy5pdGVtX2lkID09PSB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25JdGVtSWQpIHx8IG51bGw7XG5cbiAgICAvKiogQHBhcmFtIGl0ZW0gw410ZW0gZGVsIGNhcnJpdG8uIEByZXR1cm5zIFByb21vY2lvbmVzIHVuaXRhcmlhcyBjcnVkYXMgZGVsIGJhY2tlbmQuICovXG4gICAgZ2V0VW5pdFByb21vdGlvbnMgPSAoaXRlbSk6IGFueVtdID0+IEFycmF5LmlzQXJyYXkoaXRlbT8udW5pdFByb21vdGlvbnMpID8gaXRlbS51bml0UHJvbW90aW9ucyA6IFtdO1xuXG4gICAgLyoqIENpZXJyYSBlbCByZXN1bWVuIGFsIGhhY2VyIGNsaWNrIGZ1ZXJhIGVuIGRlc2t0b3AuICovXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKVxuICAgIGhhbmRsZURvY3VtZW50Q2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3Zlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uSXRlbUlkID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyA9IHt9O1xuICAgIH1cblxuICAgIC8qKiBSZWNhbGN1bGEgZWwgbW9kbyBkZSBpbnRlcmFjY2nDs24geSBjaWVycmEgZWwgcmVzdW1lbiBhbCBjYW1iaWFyIGVsIHZpZXdwb3J0LiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICAgIGhhbmRsZVdpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVVbml0UHJvbW90aW9uVmlld3BvcnRNb2RlKCk7XG4gICAgICAgIHRoaXMuY2xvc2VVbml0UHJvbW90aW9uU3VtbWFyeSgpO1xuICAgIH1cblxuICAgIC8qKiBDaWVycmEgZWwgcmVzdW1lbiBlbiBtb2JpbGUgYWwgaGFjZXIgc2Nyb2xsIHBhcmEgZXZpdGFyIGRlc2FsaW5lYWNpw7NuIHZpc3VhbC4gKi9cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcbiAgICBoYW5kbGVXaW5kb3dTY3JvbGwoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRzVW5pdFByb21vdGlvbkhvdmVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlVW5pdFByb21vdGlvblN1bW1hcnkoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlY3RhIHNpIGVsIGRpc3Bvc2l0aXZvIHNvcG9ydGEgYGhvdmVyYCByZWFsIHkgZGViZSBjb21wb3J0YXJzZSBjb21vIGRlc2t0b3AuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdm9pZGBcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVVuaXRQcm9tb3Rpb25WaWV3cG9ydE1vZGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuc3VwcG9ydHNVbml0UHJvbW90aW9uSG92ZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgJiYgdHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKGhvdmVyOiBob3ZlcikgYW5kIChwb2ludGVyOiBmaW5lKScpLm1hdGNoZXNcbiAgICAgICAgICAgICYmIHdpbmRvdy5pbm5lcldpZHRoID49IDc2ODtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhIGVzdGlsb3MgaW5saW5lIHBhcmEgbWFudGVuZXIgZWwgcmVzdW1lbiBtb2JpbGUgZGVudHJvIGRlbCB2aWV3cG9ydC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhbmNob3IgRWxlbWVudG8gdXNhZG8gY29tbyBhbmNsYSB2aXN1YWwuXG4gICAgICogQHJldHVybnMgYHZvaWRgXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVVbml0UHJvbW90aW9uU3VtbWFyeVN0eWxlcyA9IChhbmNob3I/OiBIVE1MRWxlbWVudCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5zdXBwb3J0c1VuaXRQcm9tb3Rpb25Ib3ZlciB8fCAhYW5jaG9yIHx8IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVVuaXRQcm9tb3Rpb25TdW1tYXJ5U3R5bGVzID0ge307XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aWV3cG9ydFBhZGRpbmcgPSAxMjtcbiAgICAgICAgY29uc3QgcmVjdCA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgZXN0aW1hdGVkUG9wdXBIZWlnaHQgPSAyNjA7XG4gICAgICAgIGNvbnN0IG5leHRUb3AgPSByZWN0LmJvdHRvbSArIDg7XG4gICAgICAgIGNvbnN0IG1heFRvcCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGVzdGltYXRlZFBvcHVwSGVpZ2h0IC0gdmlld3BvcnRQYWRkaW5nO1xuICAgICAgICBjb25zdCB0b3AgPSBNYXRoLm1heCh2aWV3cG9ydFBhZGRpbmcsIE1hdGgubWluKG5leHRUb3AsIG1heFRvcCkpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlVW5pdFByb21vdGlvblN1bW1hcnlTdHlsZXMgPSB7XG4gICAgICAgICAgICBsZWZ0OiBgJHt2aWV3cG9ydFBhZGRpbmd9cHhgLFxuICAgICAgICAgICAgcmlnaHQ6IGAke3ZpZXdwb3J0UGFkZGluZ31weGAsXG4gICAgICAgICAgICB0b3A6IGAke3RvcH1weGAsXG4gICAgICAgICAgICB3aWR0aDogJ2F1dG8nLFxuICAgICAgICAgICAgJ21heC13aWR0aCc6ICdub25lJyxcbiAgICAgICAgICAgICdtYXgtaGVpZ2h0JzogYGNhbGMoMTAwdmggLSAke3RvcCArIHZpZXdwb3J0UGFkZGluZ31weClgLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFjdHVhbGl6YXJDYW50aWRhZChpdGVtOiBhbnksIGNhbnRpZGFkOiBudW1iZXIgfCBzdHJpbmcsIHN0b2NrOiBudW1iZXIsIGlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNhcnRMb2FkaW5nKSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdWFudGl0eSA9IGl0ZW0ucHJvZHVjdD8udmFyaWFudHMgJiYgaXRlbS5wcm9kdWN0LnZhcmlhbnRzLmxlbmd0aCA+IDAgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSA6IDA7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtdWx0aXBsZVF1YW50aXR5ICYmIG11bHRpcGxlUXVhbnRpdHkgPiAwID8gbXVsdGlwbGVRdWFudGl0eSA6IDE7XG5cbiAgICAgICAgbGV0IG5ld1F1YW50aXR5OiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjYW50aWRhZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gcGFyc2VJbnQoY2FudGlkYWQsIDEwKTtcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IHN0ZXAgfSk7XG4gICAgICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBNYXRoLnJvdW5kKG5ld1F1YW50aXR5IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBjYW50aWRhZDtcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSAlIHN0ZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICBuZXdRdWFudGl0eSA9IE1hdGgucm91bmQobmV3UXVhbnRpdHkgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZWVwU2FtZUNvbW1lbnQgPSBpdGVtPy5jb21tZW50cyA/PyB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlOyAvLyBBY3R1YWxpemEgbGEgcHJvcGllZGFkIHZpbmN1bGFkYSBhIGBbZGlzYWJsZWRdYFxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBGdW5jacOzbiBkZSBmbGVjaGEgcGFyYSBwcmVzZXJ2YXIgZWwgY29udGV4dG9cbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrLWFjdHVhbGx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBjYXJ0SXRlbVBsdXMgPSAoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG11bHRpcGxlUXR5OiBudW1iZXIgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/Lm11bHRpcGxlUXVhbnRpdHkgfHwgMDtcbiAgICAgICAgY29uc3Qgc3RlcCA9IG11bHRpcGxlUXR5IHx8IDE7XG4gICAgICAgIGNvbnN0IHN0b2NrID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5zdG9jaztcbiAgICAgICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gaXRlbS5xdWFudGl0eTtcblxuICAgICAgICBjb25zdCBuZXh0ID0gc3RlcCA+IDEgJiYgY3VycmVudCAlIHN0ZXAgIT09IDBcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKGN1cnJlbnQgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgICAgIDogY3VycmVudCArIHN0ZXA7XG5cbiAgICAgICAgdGhpcy5hY3R1YWxpemFyQ2FudGlkYWQoaXRlbSwgbmV4dCwgc3RvY2ssICdjYXJ0UGx1cycpO1xuICAgIH1cblxuICAgIGNhcnRJdGVtTGVzcyA9IChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdHk6IG51bWJlciA9IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8ubXVsdGlwbGVRdWFudGl0eSB8fCAwO1xuICAgICAgICBjb25zdCBtaW5pbXVtUXR5OiBudW1iZXIgPSBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/Lm1pbmltdW1JdGVtc1F1YW50aXR5IHx8IDA7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBtdWx0aXBsZVF0eSB8fCAxO1xuICAgICAgICBjb25zdCBmbG9vciA9IG1pbmltdW1RdHkgfHwgc3RlcDtcbiAgICAgICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gaXRlbS5xdWFudGl0eTtcblxuICAgICAgICBjb25zdCBuZXh0ID0gc3RlcCA+IDEgJiYgY3VycmVudCAlIHN0ZXAgIT09IDBcbiAgICAgICAgICAgID8gTWF0aC5mbG9vcihjdXJyZW50IC8gc3RlcCkgKiBzdGVwXG4gICAgICAgICAgICA6IGN1cnJlbnQgLSBzdGVwO1xuXG4gICAgICAgIGlmIChuZXh0ID49IGZsb29yKSB7XG4gICAgICAgICAgICB0aGlzLmFjdHVhbGl6YXJDYW50aWRhZChpdGVtLCBuZXh0LCBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnN0b2NrLCAnY2FydExlc3MnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZGlyZWN0Q2hlY2tvdXQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmNhcnRTZXJ2aWNlLmhhc1N1ZmZpY2llbnRDcmVkaXRzRm9yQ2FydFRvdGFsKCkpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9jaGVja291dGApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBzZSBwdWVkZSByZWRpcmlnaXIgYWwgY2hlY2tvdXQgZGViaWRvIGEgdW5hIHZhbGlkYWNpw7NuIGZhbGxpZGEuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVkaXJlY3RSZWdpc3RlciA9ICgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9hdXRoL2xvZ2luYClcblxuICAgIG9wZW5Nb2RhbCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZSwgeyBjbGFzczogJ21vZGFsLXhsJywga2V5Ym9hcmQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHJlZGlyZWN0RGV0YWlsUHJvZHVjdChwcm9kdWN0KSB7XG4gICAgICAgIGxldCB2YXJpYW50ID0gcHJvZHVjdC52YXJpYW50c1swXVxuICAgICAgICBsZXQgcGF0aCA9ICcvcHJvZHVjdC8nXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5jb2RlXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5vcHRpb25zLmxlbmd0aCA/IFwiP3ZhcmlhbnQ9dHJ1ZVwiIDogXCJcIlxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHBhdGgpXG4gICAgfVxuXG4gICAgZm9ybWF0RGF0ZShkYXRlKSB7XG4gICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZSksXG4gICAgICAgICAgICBtb250aCA9ICcnICsgKGQuZ2V0TW9udGgoKSArIDEpLFxuICAgICAgICAgICAgZGF5ID0gJycgKyBkLmdldERhdGUoKSxcbiAgICAgICAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgaWYgKG1vbnRoLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xuICAgICAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpXG4gICAgICAgICAgICBkYXkgPSAnMCcgKyBkYXk7XG5cbiAgICAgICAgcmV0dXJuIFt5ZWFyLCBtb250aCwgZGF5XS5qb2luKCctJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2FyZ2FNb2RhbChpdGVtKSB7XG5cbiAgICAgICAgLy8gT2J0aWVuZSBsYXMgc2VkZXMgZGVsIGNsaWVudGVcbiAgICAgICAgY29uc3Qgc2VkZXMgPSBhd2FpdCB0aGlzLmNhcnRTZXJ2aWNlLmdldEFkZHJlc3NCb29rKCk7XG5cbiAgICAgICAgLy8gQ3JlbyB1bmEgc2VyaWUgZGUgdmFyaWFibGVzIHF1ZSB2b3kgYSBuZWNlc2l0YXIsIGlkIHBhcmEgY29udHJvbGFyIGxhcyB2dWVsdGFzIHF1ZSBkYSB5IGN1YW50YXMgbGluZWFzIGhheSB5IGFsbElEIHBhcmEgYWxtYWNlbmFyIGxvcyBJRCBkZSBsb3MgbG90ZXMuXG4gICAgICAgIHZhciBpZCA9IDE7XG4gICAgICAgIHZhciB0aGlzXyA9IHRoaXM7XG4gICAgICAgIHZhciBhbGxJRCA9IFtdO1xuXG4gICAgICAgIC8vIEHDsWFkZSBsb3MgZGF0b3MgYWwgZW5jYWJlemFkbyBkZWwgTW9kYWxcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VuY2FiZXphZG9Nb2RhbCcpLmlubmVySFRNTCA9ICc8YSBjbGFzcz1cInRpdGxlIHRleHQtZGFyayB0ZXh0LWRlY29yYXRpb24tbm9uZSBoNSBkLWJsb2NrIG0tMCBwLTAgbS0wIHAtMFwiPjxwIGNsYXNzPVwibm9tYnJlIG1iLTBcIiBpZD1cInByb2R1Y3ROYW1lXCI+JyArIGl0ZW1bJ3Byb2R1Y3QnXVsnbmFtZSddICsgJzwvcD48c21hbGwgY2xhc3M9XCJ0ZXh0LXNlY29uZGFyeSBwcy0yIG1zLTFcIiBpZD1cInByb2R1Y3RSZWZcIj5SZWY6JyArIGl0ZW1bJ3ZhcmlhbnRfaWQnXSArICc8L3NtYWxsPjwvYT4nO1xuXG4gICAgICAgIC8vIEJvcnJhbW9zIHRvZG9zIGxvcyBkYXRvcyBkZSBsb3MgbG90ZXMgYW50ZXJpb3Jlc1xuICAgICAgICB2YXIgYm9keVRhYmxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsb3RfYm9keV90YWJsZVwiKSBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgICAgICBib2R5VGFibGUuaW5uZXJIVE1MID0gJyc7XG5cbiAgICAgICAgLy8gUmVjb3JyZSB0b2RvcyBsb3MgYXJ0aWN1bG9zIHkgZW5jdWVudHJhIHNpIHRpZW5lbiBsb3RlcyBvIG5vLCBzaSB0aWVuZSBjcmVhIGxhcyBsaW5lYXNcbiAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuZ2V0Q2FydDIoKS5mb3JFYWNoKGkgPT4ge1xuXG4gICAgICAgICAgICBpZiAoaVsnaXRlbV9pZCddID09IGl0ZW0uaXRlbV9pZCAmJiBpWydsb3QnXSAhPSAnJykge1xuICAgICAgICAgICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgICAgICBpWydsb3QnXS5mb3JFYWNoKGxvdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMSA9IHJvdy5pbnNlcnRDZWxsKDApO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDIgPSByb3cuaW5zZXJ0Q2VsbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGwzID0gcm93Lmluc2VydENlbGwoMik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNCA9IHJvdy5pbnNlcnRDZWxsKDMpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbDUgPSByb3cuaW5zZXJ0Q2VsbCg0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGw2ID0gcm93Lmluc2VydENlbGwoNSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShsb3RbJ2RhdGVfcmVxdWVzdCddKSk7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwxLmlubmVySFRNTCA9ICc8aW5wdXQgaWQ9XCJpZCcgKyBpZCArICdcIiAgc3R5bGU9XCJib3JkZXI6IDA7XCIgdmFsdWU9XCInICsgbG90LmlkICsgJ1wiIGRpc2FibGVkPic7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIGxvdC5xdWFudGl0eSArICdcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInICsgbG90LnF1YW50aXR5ICsgJ1wiPic7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiB2YWx1ZT1cIicgKyB0aGlzLmZvcm1hdERhdGUoZGF0ZSkgKyAnXCIgaWQ9XCJkZWxpdmVyeURhdGUnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPic7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvcGNpb25lcyA9IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWRlLmlkID09IGxvdC5zaGlwcGluZ19hZGRyZXNzX2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIiBzZWxlY3RlZD4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2VsbDQuaW5uZXJIVE1MID0gJzxzZWxlY3QgIGlkPVwic2hpcHBpbmdBZGRyZXNzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIHctNzVcIj4nICsgb3BjaW9uZXMgKyAnPC9zZWxlY3Q+JztcbiAgICAgICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcbiAgICAgICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gdmFsdWU9XCInICsgbG90LmlkICsgJ1wiIGNsYXNzPVwiYnRuXCIgaWQ9XCJib3RvbkJvcnJhclwiPjxpbWcgc3JjPVwiLi9hc3NldHMvbWFxdWV0YWRvL2ltZy9pYy1ib3JyYXIuc3ZnXCIgYWx0PVwiXCI+IDwvYnV0dG9uPjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cyID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcbiAgICAgICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XG4gICAgICAgICAgICAgICAgICAgIGZpbGEyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sbGFwc2VcIiBpZD1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIj48aW5wdXQgaWQ9XCJub3RlcycgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHZhbHVlPVwiJyArIGxvdC5ub3RlcyArICdcIiBwbGFjZWhvbGRlcj1cIkluZ3Jlc2UgdW4gY29tZW50YXJpbyBlbiBjYXNvIGRlIHF1ZSBzZWEgbmVjZXNhcmlvLlwiIHR5cGU9XCJ0ZXh0XCIvPjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgICAgIGlkID0gaWQgKyAxO1xuXG4gICAgICAgICAgICAgICAgICAgIGFsbElELnB1c2gobG90WydpZCddKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdG9uQWdyZWdhcicpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIC8vIC8vIFNlIGNhbGN1bGEgbGEgY2FudGlkYWQgeSBlbCBjb250YWRvciBwYXJhIHF1ZSBubyBleGNlZGEgbGEgY2FudGlkYWQgZGUgbGEgbGluZWEgYWwgY3JlYXIgdW4gbnVldm8gbG90ZS5cbiAgICAgICAgICAgIHZhciBjYW50aWRhZEFjdHVhbCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgaWQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbnRpZGFkQWN0dWFsID0gY2FudGlkYWRBY3R1YWwgKyBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTZSBhw7FhZGUgbGEgbGluZWEgc2llbXByZSB5IGN1YW5kbyBsYSBjYW50aWRhZCByZXN0YW50ZSBubyBzZWEgY2Vyby5cbiAgICAgICAgICAgIGlmIChjYW50aWRhZEFjdHVhbCA8IGl0ZW1bJ3F1YW50aXR5J10pIHtcbiAgICAgICAgICAgICAgICB2YXIgcm93ID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsMSA9IHJvdy5pbnNlcnRDZWxsKDApO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsMyA9IHJvdy5pbnNlcnRDZWxsKDIpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsNCA9IHJvdy5pbnNlcnRDZWxsKDMpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xuICAgICAgICAgICAgICAgIHZhciBjZWxsNiA9IHJvdy5pbnNlcnRDZWxsKDUpO1xuICAgICAgICAgICAgICAgIGNlbGwxLmlubmVySFRNTCA9ICc8aW5wdXQgaWQ9XCJpZCcgKyBpZCArICdcIiAgc3R5bGU9XCJib3JkZXI6IDA7XCIgdmFsdWU9XCJQZW5kdC5cIiBkaXNhYmxlZD4nO1xuICAgICAgICAgICAgICAgIGNlbGwyLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cIm51bWJlclwiIGlkPVwicXVhbnRpdHknICsgaWQgKyAnXCIgdmFsdWU9IFwiJyArIChpdGVtWydxdWFudGl0eSddIC0gY2FudGlkYWRBY3R1YWwpICsgJ1wiY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy01MFwiIG1heD1cIicgKyAoaXRlbVsncXVhbnRpdHknXSAtIGNhbnRpZGFkQWN0dWFsKSArICdcIj4nO1xuICAgICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcbiAgICAgICAgICAgICAgICB2YXIgb3BjaW9uZXMgPSBcIlwiXG4gICAgICAgICAgICAgICAgc2VkZXMuZm9yRWFjaChzZWRlID0+IHsgb3BjaW9uZXMgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgc2VkZS5pZCArICdcIj4nICsgc2VkZS5jaXR5ICsgJyAtICcgKyBzZWRlLnN0cmVldCArICc8L29wdGlvbj4nOyB9KTtcbiAgICAgICAgICAgICAgICBjZWxsNC5pbm5lckhUTUwgPSAnPHNlbGVjdCAgaWQ9XCJzaGlwcGluZ0FkZHJlc3MnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPicgKyBvcGNpb25lcyArICc8L3NlbGVjdD4nO1xuICAgICAgICAgICAgICAgIGNlbGw1LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0blNlZ3VpclwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS1icy10YXJnZXQ9XCIjY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgdmFsdWU9XCJWZXJcIj48L2lucHV0Pic7XG4gICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gY2xhc3M9XCJidG5cIiBpZD1cImJvdG9uQm9ycmFyXCI+PGltZyBzcmM9XCIuL2Fzc2V0cy9tYXF1ZXRhZG8vaW1nL2ljLWJvcnJhci5zdmdcIiBhbHQ9XCJcIj4gPC9idXR0PjwvZGl2Pic7XG4gICAgICAgICAgICAgICAgdmFyIHJvdzIgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdmFyIGZpbGEyID0gcm93Mi5pbnNlcnRDZWxsKDApXG4gICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XG4gICAgICAgICAgICAgICAgZmlsYTIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2xsYXBzZVwiIGlkPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiPjxpbnB1dCBpZD1cIm5vdGVzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xuXG5cbiAgICAgICAgICAgICAgICBpZCA9IGlkICsgMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3QtbWF4LXF1YW50aXR5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdWFuZG8gc2UgcHVsc2EgZWwgYm90b24gcGFyYSBndWFyZGFyIGVsIGxvdGUgcmVjb3JyZSBsYSBmdW5jaW9uIHkgZWwgZm9yICwgcmVjb3JyZSBsaW5lYSBhIGxpbmVhIHkgbGFuemEgZWwgZW5kcG9pbnQgY29uIHVuYSBwYXVzYSBwYXJhIHF1ZSBubyBzZSBwaWVyZGEgbmluZ3VubyB5IG5vIHNlIHF1ZWRlIHBpbGxhZG8uXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3Rvbkd1YXJkYXInKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2aW5nJyk7XG4gICAgICAgICAgICB0aGlzXy5jYXJnYW5kbyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgbG90SUQgPSAnJztcbiAgICAgICAgICAgIHZhciBjYW50aWRhZExvdGVzID0gMDtcbiAgICAgICAgICAgIC8vQ29udHJvbGEgcXVlIGxhcyBjYW50aWRhZGVzIGRlIGxvcyBsb3RlcyBubyBzZWEgc3VwZXJpb3IgYSBsYSBkZWwgcHJvZHVjdG8gZW4gZWwgY2Fycml0by5cbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIgKyBpbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRMb3RlcyA9IGNhbnRpZGFkTG90ZXMgKyBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5xdWFudGl0eSA+PSBjYW50aWRhZExvdGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY2FudGlkYWRMb3Rlcyk7XG4gICAgICAgICAgICAgICAgdmFyIHkgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXR5ID0gcGFyc2VJbnQoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbGl2ZXJ5RGF0ZSA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGl2ZXJ5RGF0ZVwiICsgaW5kZXgpKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGlwcGluZ0FkZHJlc3MgPSAkKFwiI3NoaXBwaW5nQWRkcmVzc1wiICsgaW5kZXgpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGVzID0gJChcIiNub3Rlc1wiICsgaW5kZXgpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoaXBwaW5nQWRkcmVzc05hbWUgPSAkKCcjc2hpcHBpbmdBZGRyZXNzJyArIGluZGV4ICsgJyBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb3RJRCA9ICg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXCIgKyBpbmRleCkpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG15SW5kZXggPSBhbGxJRC5pbmRleE9mKHBhcnNlSW50KGxvdElEKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXlJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxJRC5zcGxpY2UobXlJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobG90SUQgPT0gJ1BlbmR0LicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdudWV2bycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIDAsIGl0ZW0uaXRlbV9pZCwgcXVhbnRpdHksIGl0ZW0ucHJvZHVjdC5wcmljZSwgaXRlbS5xdWFudGl0eSwgaXRlbS5kaXNjb3VudCwgaXRlbS5wcm9kdWN0LnByaWNlICogcXVhbnRpdHksICduZXcnLCBkZWxpdmVyeURhdGUsIG5vdGVzLCBwYXJzZUludChzaGlwcGluZ0FkZHJlc3MpLCBzaGlwcGluZ0FkZHJlc3NOYW1lLCAnbmV3bG90Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb3RJRCAhPSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG90SUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIHBhcnNlSW50KGxvdElEKSwgaXRlbS5pdGVtX2lkLCBxdWFudGl0eSwgaXRlbS5wcm9kdWN0LnByaWNlLCBpdGVtLnF1YW50aXR5LCBpdGVtLmRpc2NvdW50LCBpdGVtLnByb2R1Y3QucHJpY2UgKiBxdWFudGl0eSwgJ2VkaXRlZCcsIGRlbGl2ZXJ5RGF0ZSwgbm90ZXMsIHBhcnNlSW50KHNoaXBwaW5nQWRkcmVzcyksIHNoaXBwaW5nQWRkcmVzc05hbWUsICdlZGl0bG90Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeSA9IGluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhbGxJRC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdib3JyYXInKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIGVsZW1lbnQsIDAsIDAsIDAsIDAsIDAsIDAsICdkZWxldGUnLCAwLCAnJywgMCwgJ2RlbGV0ZScsICdkZWxldGVsb3QnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FydFNlcnZpY2UubG9hZENhcnRCeVRva2VuKHRoaXNfLmNhcnRTZXJ2aWNlLmdldENhcnRUb2tlbigpKTsgfSwgMzAwICogeSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18udG9hc3RyU2VydmljZS5zaG93KCdsb3Qtc2F2ZWQnKTsgfSwgMzAwICogeSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FyZ2FuZG8gPSBmYWxzZSB9LCAzMDAgKiB5KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ0xhIGNhbnRpZGFkIGRlIGxvcyBsb3RlcyBlcyBzdXBlcmlvciBhIGxhIGNhbnRpZGFkIGRlbCBwcm9kdWN0by4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnI2JvdG9uQm9ycmFyJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcyk7XG4gICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykucmVtb3ZlKCk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBjbG9zZU1vZGFsKGlkKSB7XG4gICAgICAgICQoJyMnICsgaWQpLm1vZGFsKCdoaWRlJyk7XG4gICAgfVxuXG4gICAgY2hlY2tTdG9jayhpdGVtKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBpdGVtLnByb2R1Y3QudmFyaWFudHMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnZhcmlhbnRfaWQgPT09IHZhcmlhbnQuY29kZSkge1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYW50LnN0b2NrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFNvbG8gc2UgZWplY3V0YSBzaSBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzblxuICAgIH1cblxuICAgIHVwZGF0ZUFsbFN0b2NrKCkge1xuICAgICAgICBjb25zdCBpdGVtczogYW55W10gPSBbXTtcblxuICAgICAgICAvLyBEZWZpbmUgbGEgc3VzY3JpcGNpw7NuIGFudGVzIGRlIHVzYXJsYVxuXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UuY2FydEl0ZW1zLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS52YXJpYW50X2lkID09PSB2YXJpYW50LmNvZGUgJiYgIXRoaXMuZXhpdFVwZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3RvY2sgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmRlbGV0ZUNhcnRJdGVtKGl0ZW0sIGZhbHNlKTsgLy8gQm9ycmEgZWwgYXJ0w61jdWxvXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucXVhbnRpdHkgPiB2YXJpYW50LnN0b2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiB2YXJpYW50LnN0b2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50LmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwICYmICF0aGlzLmV4aXRVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgIC8vIERlc3VzY3LDrWJldGUgYW50ZXMgZGUgYWN0dWFsaXphclxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkQWxsVG9DYXJ0KGl0ZW1zKTsgIC8vIEFjdHVhbGl6YSBlbCBjYXJyaXRvXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhpdFVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy51cGRhdGVBbGxTdG9jaygpOyAgLy8gVnVlbHZlIGEgdmVyaWZpY2FyIGVsIHN0b2NrXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG5cbiAgICBnZXRWYXJpYW50cyA9IHByb2R1Y3QgPT4ge1xuXG4gICAgICAgIGxldCBpdGVtID0gcHJvZHVjdC5wcm9kdWN0XG5cbiAgICAgICAgaWYgKGl0ZW0udmFyaWFudHMgJiYgaXRlbS52YXJpYW50cy5sZW5ndGggJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zICYmIGl0ZW0udmFyaWFudHNbMF0ub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gaXRlbS52YXJpYW50c1swXS5vcHRpb25zXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHRoaXMudmFyaWFudHNUb1Nob3cuZmluZChuYW1lID0+IG9wdGlvbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkpXG4gICAgICAgICAgICBsZXQgb3B0aW9uc01hcCA9IFtdXG4gICAgICAgICAgICBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbikuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbkFkZGVkID0gZmFsc2U7ICAvLyBWYXJpYWJsZSBwYXJhIGV2aXRhciBtw7psdGlwbGVzIGluc2VyY2lvbmVzXG5cbiAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uMi5jb2RlID09ICdDT0xPUicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24yLnZhbHVlcy5mb3JFYWNoKGNvbG9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9yLmNvZGUgPT0gb3B0aW9uW2VudHJ5XSAmJiAhb3B0aW9uQWRkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7IG5hbWU6IGVudHJ5LCB2YWx1ZTogb3B0aW9uW2VudHJ5XSwgaW1hZ2U6IGNvbG9yLmltYWdlLCBtb2JpbGVJbWFnZTogY29sb3IubW9iaWxlSW1hZ2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25BZGRlZCA9IHRydWU7IC8vIE1hcmNhciBvcGNpw7NuIGFncmVnYWRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIG5vIHNlIGHDsWFkacOzIGxhIG9wY2nDs24gZGUgQ09MT1IsIG1hbmVqYXIgb3RyYXMgb3BjaW9uZXNcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25BZGRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcHRpb25zLmZvckVhY2gob3B0aW9uMiA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uMi5jb2RlICE9PSAnQ09MT1InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnRyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25bZW50cnldXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkFkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBjcmVhdGVEaXNjb3VudE1lc3NhZ2Uoc2FsZXByaWNlOiBudW1iZXIsIHByaWNlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoaXNOYU4oc2FsZXByaWNlKSB8fCBpc05hTihwcmljZSkgfHwgc2FsZXByaWNlID49IHByaWNlIHx8IHNhbGVwcmljZSA8PSAwIHx8IHByaWNlIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBkaXNjb3VudFBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKCgocHJpY2UgLSBzYWxlcHJpY2UpIC8gcHJpY2UpICogMTAwKTtcblxuICAgICAgICBsZXQgZGlzY291bnRNZXNzYWdlID0gYCR7ZGlzY291bnRQZXJjZW50YWdlfSUgT0ZGYDtcbiAgICAgICAgcmV0dXJuIGRpc2NvdW50TWVzc2FnZTtcbiAgICB9XG4gICAgZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsLnR5cGUgPT0gJ2IyYicgPyB0aGlzLmNoYW5uZWwud2hvbGVzYWxlck1pbmltdW1QdXJjaGFzZUFtb3VudCA6IHRoaXMuY2hhbm5lbC5yZXRhaWxlck1pbmltdW1QdXJjaGFzZUFtb3VudFxuXG4gICAgfVxuXG4gICAgZXhjZWVkc01pbmltdW1BbW91bnQgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPj0gdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVkaXJlY3RDaGVja291dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVmVyaWZpY2FyIHNpIGhheSB1biBiYWxhbmNlIGRlIGNsaWVudGUgYWN0aXZvXG4gICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmJhbGFuY2VDdXN0b21lciQuc3Vic2NyaWJlKGJhbGFuY2VDdXN0b21lciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGJhbGFuY2VDdXN0b21lciAmJiBiYWxhbmNlQ3VzdG9tZXIuY3JlZGl0QW1vdW50ICE9PSBudWxsICYmIGJhbGFuY2VDdXN0b21lci5jcmVkaXRBbW91bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncXVhbnRpdHktbm90LWV4Y2VlZGVkLXdoaXRvdXQtYW1vdW50Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3F1YW50aXR5LW5vdC1leGNlZWRlZCcsIHsgYW1vdW50OiB0aGlzLmdldE1pbmltdW1QdXJjaGFzZUFtb3VudCgpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnVuc3Vic2NyaWJlKCk7IC8vIERlc3VzY3JpYmlyc2UgaW5tZWRpYXRhbWVudGUgZGVzcHXDqXMgZGUgb2J0ZW5lciBlbCB2YWxvclxuICAgICAgICB9XG4gICAgfVxuXG5cbn1cblxuXG5cbiJdfQ==
|