ng-easycommerce 0.0.660-beta.1 → 0.0.661

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.
Files changed (47) hide show
  1. package/README.md +22 -58
  2. package/assets/ec-i18n/en.json +3 -1
  3. package/assets/ec-i18n/es.json +3 -1
  4. package/bundles/ng-easycommerce.umd.js +179 -512
  5. package/bundles/ng-easycommerce.umd.js.map +1 -1
  6. package/bundles/ng-easycommerce.umd.min.js +1 -1
  7. package/bundles/ng-easycommerce.umd.min.js.map +1 -1
  8. package/esm2015/lib/core.consts.js +6 -1
  9. package/esm2015/lib/ec-component/account-ec/order-ec/order-ec.component.js +5 -3
  10. package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +8 -5
  11. package/esm2015/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +11 -5
  12. package/esm2015/lib/ec-component/collection-ec/collection-ec.component.js +14 -450
  13. package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +30 -3
  14. package/esm2015/lib/ec-component/product-ec/product-ec.component.js +1 -2
  15. package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +8 -5
  16. package/esm2015/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +1 -3
  17. package/esm2015/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +3 -3
  18. package/esm2015/lib/ec-pipe/ec-currency-symbol.pipe.js +2 -1
  19. package/esm2015/lib/services/cart.service.js +27 -12
  20. package/esm2015/lib/services/currency.service.js +43 -7
  21. package/esm5/lib/core.consts.js +6 -1
  22. package/esm5/lib/ec-component/account-ec/order-ec/order-ec.component.js +5 -3
  23. package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +8 -5
  24. package/esm5/lib/ec-component/checkout-ec/dataform-ec/dataform-ec.component.js +11 -5
  25. package/esm5/lib/ec-component/collection-ec/collection-ec.component.js +13 -458
  26. package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +48 -3
  27. package/esm5/lib/ec-component/product-ec/product-ec.component.js +1 -2
  28. package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +8 -5
  29. package/esm5/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +1 -3
  30. package/esm5/lib/ec-component/widgets-ec/price-ec/price-ec.component.js +3 -3
  31. package/esm5/lib/ec-pipe/ec-currency-symbol.pipe.js +2 -1
  32. package/esm5/lib/services/cart.service.js +27 -12
  33. package/esm5/lib/services/currency.service.js +43 -7
  34. package/fesm2015/ng-easycommerce.js +157 -499
  35. package/fesm2015/ng-easycommerce.js.map +1 -1
  36. package/fesm5/ng-easycommerce.js +180 -513
  37. package/fesm5/ng-easycommerce.js.map +1 -1
  38. package/lib/core.consts.d.ts +5 -0
  39. package/lib/ec-component/account-ec/order-ec/order-ec.component.d.ts +1 -0
  40. package/lib/ec-component/cart-ec/cart-ec.component.d.ts +1 -0
  41. package/lib/ec-component/collection-ec/collection-ec.component.d.ts +4 -34
  42. package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +3 -0
  43. package/lib/ec-component/sidebar-ec/sidebar-ec.component.d.ts +1 -0
  44. package/lib/services/cart.service.d.ts +2 -2
  45. package/lib/services/currency.service.d.ts +14 -2
  46. package/ng-easycommerce.metadata.json +1 -1
  47. package/package.json +1 -1
@@ -103,6 +103,7 @@ var CartEcComponent = /** @class */ (function (_super) {
103
103
  _this.creditAccountShowPrices = null;
104
104
  _this.showTaxLegend = false;
105
105
  _this.cartLoading = false;
106
+ _this.enableFieldNotesInArticleFile = false;
106
107
  _this.toDecimal = function (amount) { return _this.consts.toDecimal(amount); };
107
108
  _this.redirectRegister = function () { return _this.router.navigateByUrl("/auth/login"); };
108
109
  _this.getVariants = function (product) {
@@ -166,11 +167,12 @@ var CartEcComponent = /** @class */ (function (_super) {
166
167
  this.cartService.promotions.subscribe(function (promotions) { return _this.promotions = promotions; });
167
168
  // console.log(this.cartService.getTaxes());
168
169
  this.channelConfigService.channelConfig$.subscribe(function (channel) {
169
- var _a, _b, _c, _d, _e, _f, _g, _h;
170
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
170
171
  _this.hidePrices = (_b = (_a = channel) === null || _a === void 0 ? void 0 : _a.hidePrices, (_b !== null && _b !== void 0 ? _b : false));
171
172
  _this.hideDiscounts = (_d = (_c = channel) === null || _c === void 0 ? void 0 : _c.hideDiscounts, (_d !== null && _d !== void 0 ? _d : false));
172
173
  _this.hideTaxes = (_f = (_e = channel) === null || _e === void 0 ? void 0 : _e.hideTaxes, (_f !== null && _f !== void 0 ? _f : false));
173
174
  _this.showTaxLegend = (_h = (_g = channel) === null || _g === void 0 ? void 0 : _g.showTaxLegend, (_h !== null && _h !== void 0 ? _h : false));
175
+ _this.enableFieldNotesInArticleFile = (_k = (_j = channel) === null || _j === void 0 ? void 0 : _j.enableFieldNotesInArticleFile, (_k !== null && _k !== void 0 ? _k : false));
174
176
  if (_this.hidePrices) {
175
177
  _this.router.navigate(['/']);
176
178
  }
@@ -185,7 +187,7 @@ var CartEcComponent = /** @class */ (function (_super) {
185
187
  };
186
188
  CartEcComponent.prototype.actualizarCantidad = function (item, cantidad, stock, id) {
187
189
  var _this = this;
188
- var _a;
190
+ var _a, _b, _c;
189
191
  if (this.cartLoading) {
190
192
  return;
191
193
  }
@@ -205,10 +207,11 @@ var CartEcComponent = /** @class */ (function (_super) {
205
207
  newQuantity = Math.round(newQuantity / step) * step;
206
208
  }
207
209
  }
210
+ var keepSameComment = (_c = (_b = item) === null || _b === void 0 ? void 0 : _b.comments, (_c !== null && _c !== void 0 ? _c : undefined));
208
211
  if (id) {
209
212
  this.isDisabled = true; // Actualiza la propiedad vinculada a `[disabled]`
210
213
  if (newQuantity > 0 && newQuantity <= stock) {
211
- this.cartService.updateItemQuantity(item, newQuantity);
214
+ this.cartService.updateItemQuantity(item, newQuantity, keepSameComment);
212
215
  }
213
216
  else {
214
217
  this.toastrService.show('out-of-stock-actually');
@@ -219,7 +222,7 @@ var CartEcComponent = /** @class */ (function (_super) {
219
222
  }
220
223
  else {
221
224
  if (newQuantity > 0 && newQuantity <= stock) {
222
- this.cartService.updateItemQuantity(item, newQuantity);
225
+ this.cartService.updateItemQuantity(item, newQuantity, keepSameComment);
223
226
  }
224
227
  else {
225
228
  this.toastrService.show('out-of-stock-actually');
@@ -511,4 +514,4 @@ var CartEcComponent = /** @class */ (function (_super) {
511
514
  return CartEcComponent;
512
515
  }(ComponentHelper));
513
516
  export { CartEcComponent };
514
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM3RTtJQUFxQyxtQ0FBZTtJQXFCaEQseUJBQ1csV0FBd0IsRUFDeEIsV0FBd0IsRUFDckIsTUFBaUIsRUFDcEIsZUFBZ0MsRUFDaEMsTUFBYyxFQUNkLFlBQTRCLEVBQ3pCLGFBQTJCLEVBQzlCLGlCQUFvQyxFQUNwQyxvQkFBMEM7UUFUckQsWUFVSSxpQkFBTyxTQUtWO1FBZFUsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVcsR0FB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LGVBQWUsR0FBTSxrQkFBa0IsVUFBTyxDQUFDO1FBQ25ELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7O2dCQTNadUIsV0FBVztnQkFDWCxXQUFXO2dCQUNiLFNBQVM7Z0JBQ0gsZUFBZTtnQkFDeEIsTUFBTTtnQkFDQSxjQUFjO2dCQUNWLFlBQVk7Z0JBQ1gsaUJBQWlCO2dCQUNkLG9CQUFvQjs7SUE5QjVDLGVBQWU7UUFMM0IsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLGFBQWE7WUFDdkIsWUFBdUM7O1NBRTFDLENBQUM7T0FDVyxlQUFlLENBMGIzQjtJQUFELHNCQUFDO0NBQUEsQUExYkQsQ0FBcUMsZUFBZSxHQTBibkQ7U0ExYlksZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC9tb2RhbFwiO1xyXG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbC9icy1tb2RhbC1yZWYuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gXCIuLi8uLi9jb3JlLmNvbnN0c1wiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2R1Y3RzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2R1Y3RzL3Byb2R1Y3RzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDYXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEhlbHBlciB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL2NvbXBvbmVudC1oZWxwZXJcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3RvYXN0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgaW50ZXJ2YWwsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBBZGRyZXNzaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoZWNrb3V0L2FkZHJlc3Npbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDaGFubmVsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5uZWwtY29uZmlnLnNlcnZpY2UnO1xyXG5kZWNsYXJlIHZhciAkOiBhbnk7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2FwcC1jYXJ0LWVjJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJ0LWVjLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NhcnQtZWMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FydEVjQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50SGVscGVyIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG4gICAgcHVibGljIHZhcmlhbnRzVG9TaG93OiBzdHJpbmdbXSA9IFsnVEFMTEUnLCAnQ09MT1InXTtcclxuICAgIHB1YmxpYyBpc0xvZ2dlZEluID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgbWVkaWFVcmwgPSAnJztcclxuICAgIHB1YmxpYyBtb2RhbFJlZjogQnNNb2RhbFJlZiB8IG51bGw7XHJcbiAgICBwdWJsaWMgcHJvbW90aW9ucyA9IFtdO1xyXG4gICAgcHVibGljIGl0ZW1zOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICBwcml2YXRlIGNhcmdhbmRvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY2hhbm5lbDogYW55ID0ge307XHJcbiAgICBwdWJsaWMgdXBkYXRlU3RvY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBleGl0VXBkYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhpZGVQcmljZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoaWRlRGlzY291bnRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGlkZVRheGVzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY3JlZGl0QWNjb3VudFNob3dQcmljZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuICAgIHB1YmxpYyBzaG93VGF4TGVnZW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgY2FydExvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgY2FydFNlcnZpY2U6IENhcnRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIGNvbnN0czogQ29uc3RhbnRzLFxyXG4gICAgICAgIHB1YmxpYyBwcm9kdWN0c1NlcnZpY2U6IFByb2R1Y3RzU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHVibGljIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIHRvYXN0clNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgYWRkcmVzc2luZ1NlcnZpY2U6IEFkZHJlc3NpbmdTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBjaGFubmVsQ29uZmlnU2VydmljZTogQ2hhbm5lbENvbmZpZ1NlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZWNPbkNvbnN0cnVjdCgpXHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgICAgICB0aGlzLm1lZGlhVXJsID0gdGhpcy5jb25zdHMubWVkaWFVcmwoKTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIG5nT25DaGFuZ2VzKCkge1xyXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTG9nZ2VkSW4oKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvZ2dlZEluID0gdGhpcy5hdXRoU2VydmljZS5pc0F1dGhlbnRpY2F0ZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsKDAsIDApO1xyXG4gICAgICAgIHRoaXMuY2FydFNlcnZpY2UucHJvbW90aW9ucy5zdWJzY3JpYmUocHJvbW90aW9ucyA9PiB0aGlzLnByb21vdGlvbnMgPSBwcm9tb3Rpb25zKTtcclxuICAgICAgICAvLyAgICBjb25zb2xlLmxvZyh0aGlzLmNhcnRTZXJ2aWNlLmdldFRheGVzKCkpO1xyXG5cclxuICAgICAgICB0aGlzLmNoYW5uZWxDb25maWdTZXJ2aWNlLmNoYW5uZWxDb25maWckLnN1YnNjcmliZShjaGFubmVsID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlUHJpY2VzID0gY2hhbm5lbD8uaGlkZVByaWNlcyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlRGlzY291bnRzID0gY2hhbm5lbD8uaGlkZURpc2NvdW50cyA/PyBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlVGF4ZXMgPSBjaGFubmVsPy5oaWRlVGF4ZXMgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RheExlZ2VuZCA9IGNoYW5uZWw/LnNob3dUYXhMZWdlbmQgPz8gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5oaWRlUHJpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnNob3dQcmljZSQuc3Vic2NyaWJlKChzaG93UHJpY2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmxvYWRpbmcuc3Vic2NyaWJlKGlzTG9hZGluZyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FydExvYWRpbmcgPSBpc0xvYWRpbmc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRvRGVjaW1hbCA9IChhbW91bnQpID0+IHRoaXMuY29uc3RzLnRvRGVjaW1hbChhbW91bnQpO1xyXG5cclxuICAgIHByb3RlY3RlZCBhY3R1YWxpemFyQ2FudGlkYWQoaXRlbTogYW55LCBjYW50aWRhZDogbnVtYmVyIHwgc3RyaW5nLCBzdG9jazogbnVtYmVyLCBpZD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnRMb2FkaW5nKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdWFudGl0eSA9IGl0ZW0ucHJvZHVjdD8udmFyaWFudHMgJiYgaXRlbS5wcm9kdWN0LnZhcmlhbnRzLmxlbmd0aCA+IDAgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSA6IDA7XHJcbiAgICAgICAgY29uc3Qgc3RlcCA9IG11bHRpcGxlUXVhbnRpdHkgJiYgbXVsdGlwbGVRdWFudGl0eSA+IDAgPyBtdWx0aXBsZVF1YW50aXR5IDogMTtcclxuXHJcbiAgICAgICAgbGV0IG5ld1F1YW50aXR5OiBudW1iZXI7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgY2FudGlkYWQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gcGFyc2VJbnQoY2FudGlkYWQsIDEwKTtcclxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ICUgc3RlcCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3QtYmUtbXVsdGlwbGUnLCB7IHF1YW50aXR5OiBzdGVwIH0pO1xyXG4gICAgICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBNYXRoLnJvdW5kKG5ld1F1YW50aXR5IC8gc3RlcCkgKiBzdGVwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBjYW50aWRhZDtcclxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ICUgc3RlcCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBNYXRoLnJvdW5kKG5ld1F1YW50aXR5IC8gc3RlcCkgKiBzdGVwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdHJ1ZTsgLy8gQWN0dWFsaXphIGxhIHByb3BpZWRhZCB2aW5jdWxhZGEgYSBgW2Rpc2FibGVkXWBcclxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgbmV3UXVhbnRpdHkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gRnVuY2nDs24gZGUgZmxlY2hhIHBhcmEgcHJlc2VydmFyIGVsIGNvbnRleHRvXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ID4gMCAmJiBuZXdRdWFudGl0eSA8PSBzdG9jaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS51cGRhdGVJdGVtUXVhbnRpdHkoaXRlbSwgbmV3UXVhbnRpdHkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcblxyXG4gICAgcmVkaXJlY3RDaGVja291dCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jYXJ0U2VydmljZS5oYXNTdWZmaWNpZW50Q3JlZGl0c0ZvckNhcnRUb3RhbCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9jaGVja291dGApO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBzZSBwdWVkZSByZWRpcmlnaXIgYWwgY2hlY2tvdXQgZGViaWRvIGEgdW5hIHZhbGlkYWNpw7NuIGZhbGxpZGEuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZGlyZWN0UmVnaXN0ZXIgPSAoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvYXV0aC9sb2dpbmApXHJcblxyXG4gICAgb3Blbk1vZGFsKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIHsgY2xhc3M6ICdtb2RhbC14bCcsIGtleWJvYXJkOiBmYWxzZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWRpcmVjdERldGFpbFByb2R1Y3QocHJvZHVjdCkge1xyXG4gICAgICAgIGxldCB2YXJpYW50ID0gcHJvZHVjdC52YXJpYW50c1swXVxyXG4gICAgICAgIGxldCBwYXRoID0gJy9wcm9kdWN0LydcclxuICAgICAgICBwYXRoICs9IHZhcmlhbnQuY29kZVxyXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5vcHRpb25zLmxlbmd0aCA/IFwiP3ZhcmlhbnQ9dHJ1ZVwiIDogXCJcIlxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocGF0aClcclxuICAgIH1cclxuXHJcbiAgICBmb3JtYXREYXRlKGRhdGUpIHtcclxuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGRhdGUpLFxyXG4gICAgICAgICAgICBtb250aCA9ICcnICsgKGQuZ2V0TW9udGgoKSArIDEpLFxyXG4gICAgICAgICAgICBkYXkgPSAnJyArIGQuZ2V0RGF0ZSgpLFxyXG4gICAgICAgICAgICB5ZWFyID0gZC5nZXRGdWxsWWVhcigpO1xyXG5cclxuICAgICAgICBpZiAobW9udGgubGVuZ3RoIDwgMilcclxuICAgICAgICAgICAgbW9udGggPSAnMCcgKyBtb250aDtcclxuICAgICAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpXHJcbiAgICAgICAgICAgIGRheSA9ICcwJyArIGRheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFt5ZWFyLCBtb250aCwgZGF5XS5qb2luKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2FyZ2FNb2RhbChpdGVtKSB7XHJcblxyXG4gICAgICAgIC8vIE9idGllbmUgbGFzIHNlZGVzIGRlbCBjbGllbnRlXHJcbiAgICAgICAgY29uc3Qgc2VkZXMgPSBhd2FpdCB0aGlzLmNhcnRTZXJ2aWNlLmdldEFkZHJlc3NCb29rKCk7XHJcblxyXG4gICAgICAgIC8vIENyZW8gdW5hIHNlcmllIGRlIHZhcmlhYmxlcyBxdWUgdm95IGEgbmVjZXNpdGFyLCBpZCBwYXJhIGNvbnRyb2xhciBsYXMgdnVlbHRhcyBxdWUgZGEgeSBjdWFudGFzIGxpbmVhcyBoYXkgeSBhbGxJRCBwYXJhIGFsbWFjZW5hciBsb3MgSUQgZGUgbG9zIGxvdGVzLlxyXG4gICAgICAgIHZhciBpZCA9IDE7XHJcbiAgICAgICAgdmFyIHRoaXNfID0gdGhpcztcclxuICAgICAgICB2YXIgYWxsSUQgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gQcOxYWRlIGxvcyBkYXRvcyBhbCBlbmNhYmV6YWRvIGRlbCBNb2RhbFxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmNhYmV6YWRvTW9kYWwnKS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJ0aXRsZSB0ZXh0LWRhcmsgdGV4dC1kZWNvcmF0aW9uLW5vbmUgaDUgZC1ibG9jayBtLTAgcC0wIG0tMCBwLTBcIj48cCBjbGFzcz1cIm5vbWJyZSBtYi0wXCIgaWQ9XCJwcm9kdWN0TmFtZVwiPicgKyBpdGVtWydwcm9kdWN0J11bJ25hbWUnXSArICc8L3A+PHNtYWxsIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgcHMtMiBtcy0xXCIgaWQ9XCJwcm9kdWN0UmVmXCI+UmVmOicgKyBpdGVtWyd2YXJpYW50X2lkJ10gKyAnPC9zbWFsbD48L2E+JztcclxuXHJcbiAgICAgICAgLy8gQm9ycmFtb3MgdG9kb3MgbG9zIGRhdG9zIGRlIGxvcyBsb3RlcyBhbnRlcmlvcmVzXHJcbiAgICAgICAgdmFyIGJvZHlUYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibG90X2JvZHlfdGFibGVcIikgYXMgSFRNTFRhYmxlRWxlbWVudDtcclxuICAgICAgICBib2R5VGFibGUuaW5uZXJIVE1MID0gJyc7XHJcblxyXG4gICAgICAgIC8vIFJlY29ycmUgdG9kb3MgbG9zIGFydGljdWxvcyB5IGVuY3VlbnRyYSBzaSB0aWVuZW4gbG90ZXMgbyBubywgc2kgdGllbmUgY3JlYSBsYXMgbGluZWFzXHJcbiAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuZ2V0Q2FydDIoKS5mb3JFYWNoKGkgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKGlbJ2l0ZW1faWQnXSA9PSBpdGVtLml0ZW1faWQgJiYgaVsnbG90J10gIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICAgICAgICAgIGlbJ2xvdCddLmZvckVhY2gobG90ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMSA9IHJvdy5pbnNlcnRDZWxsKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMyA9IHJvdy5pbnNlcnRDZWxsKDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNCA9IHJvdy5pbnNlcnRDZWxsKDMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNiA9IHJvdy5pbnNlcnRDZWxsKDUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShsb3RbJ2RhdGVfcmVxdWVzdCddKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDEuaW5uZXJIVE1MID0gJzxpbnB1dCBpZD1cImlkJyArIGlkICsgJ1wiICBzdHlsZT1cImJvcmRlcjogMDtcIiB2YWx1ZT1cIicgKyBsb3QuaWQgKyAnXCIgZGlzYWJsZWQ+JztcclxuICAgICAgICAgICAgICAgICAgICBjZWxsMi5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInF1YW50aXR5JyArIGlkICsgJ1wiIHZhbHVlPSBcIicgKyBsb3QucXVhbnRpdHkgKyAnXCJjbGFzcz1cImZvcm0tY29udHJvbCB3LTUwXCIgbWF4PVwiJyArIGxvdC5xdWFudGl0eSArICdcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiB2YWx1ZT1cIicgKyB0aGlzLmZvcm1hdERhdGUoZGF0ZSkgKyAnXCIgaWQ9XCJkZWxpdmVyeURhdGUnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNlZGVzLmZvckVhY2goc2VkZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWRlLmlkID09IGxvdC5zaGlwcGluZ19hZGRyZXNzX2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25lcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBzZWRlLmlkICsgJ1wiIHNlbGVjdGVkPicgKyBzZWRlLmNpdHkgKyAnIC0gJyArIHNlZGUuc3RyZWV0ICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25lcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBzZWRlLmlkICsgJ1wiPicgKyBzZWRlLmNpdHkgKyAnIC0gJyArIHNlZGUuc3RyZWV0ICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsNC5pbm5lckhUTUwgPSAnPHNlbGVjdCAgaWQ9XCJzaGlwcGluZ0FkZHJlc3MnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPicgKyBvcGNpb25lcyArICc8L3NlbGVjdD4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGw1LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0blNlZ3VpclwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS1icy10YXJnZXQ9XCIjY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgdmFsdWU9XCJWZXJcIj48L2lucHV0Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gdmFsdWU9XCInICsgbG90LmlkICsgJ1wiIGNsYXNzPVwiYnRuXCIgaWQ9XCJib3RvbkJvcnJhclwiPjxpbWcgc3JjPVwiLi9hc3NldHMvbWFxdWV0YWRvL2ltZy9pYy1ib3JyYXIuc3ZnXCIgYWx0PVwiXCI+IDwvYnV0dG9uPjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdzIgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGEyID0gcm93Mi5pbnNlcnRDZWxsKDApXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsYTIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2xsYXBzZVwiIGlkPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiPjxpbnB1dCBpZD1cIm5vdGVzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdmFsdWU9XCInICsgbG90Lm5vdGVzICsgJ1wiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSB1biBjb21lbnRhcmlvIGVuIGNhc28gZGUgcXVlIHNlYSBuZWNlc2FyaW8uXCIgdHlwZT1cInRleHRcIi8+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICBpZCA9IGlkICsgMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsSUQucHVzaChsb3RbJ2lkJ10pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdG9uQWdyZWdhcicpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAvLyAvLyBTZSBjYWxjdWxhIGxhIGNhbnRpZGFkIHkgZWwgY29udGFkb3IgcGFyYSBxdWUgbm8gZXhjZWRhIGxhIGNhbnRpZGFkIGRlIGxhIGxpbmVhIGFsIGNyZWFyIHVuIG51ZXZvIGxvdGUuXHJcbiAgICAgICAgICAgIHZhciBjYW50aWRhZEFjdHVhbCA9IDA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbnRpZGFkQWN0dWFsID0gY2FudGlkYWRBY3R1YWwgKyBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGHDsWFkZSBsYSBsaW5lYSBzaWVtcHJlIHkgY3VhbmRvIGxhIGNhbnRpZGFkIHJlc3RhbnRlIG5vIHNlYSBjZXJvLlxyXG4gICAgICAgICAgICBpZiAoY2FudGlkYWRBY3R1YWwgPCBpdGVtWydxdWFudGl0eSddKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93ID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDIgPSByb3cuaW5zZXJ0Q2VsbCgxKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsMyA9IHJvdy5pbnNlcnRDZWxsKDIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDUgPSByb3cuaW5zZXJ0Q2VsbCg0KTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsNiA9IHJvdy5pbnNlcnRDZWxsKDUpO1xyXG4gICAgICAgICAgICAgICAgY2VsbDEuaW5uZXJIVE1MID0gJzxpbnB1dCBpZD1cImlkJyArIGlkICsgJ1wiICBzdHlsZT1cImJvcmRlcjogMDtcIiB2YWx1ZT1cIlBlbmR0LlwiIGRpc2FibGVkPic7XHJcbiAgICAgICAgICAgICAgICBjZWxsMi5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInF1YW50aXR5JyArIGlkICsgJ1wiIHZhbHVlPSBcIicgKyAoaXRlbVsncXVhbnRpdHknXSAtIGNhbnRpZGFkQWN0dWFsKSArICdcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInICsgKGl0ZW1bJ3F1YW50aXR5J10gLSBjYW50aWRhZEFjdHVhbCkgKyAnXCI+JztcclxuICAgICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcclxuICAgICAgICAgICAgICAgIHZhciBvcGNpb25lcyA9IFwiXCJcclxuICAgICAgICAgICAgICAgIHNlZGVzLmZvckVhY2goc2VkZSA9PiB7IG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCI+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JzsgfSk7XHJcbiAgICAgICAgICAgICAgICBjZWxsNC5pbm5lckhUTUwgPSAnPHNlbGVjdCAgaWQ9XCJzaGlwcGluZ0FkZHJlc3MnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPicgKyBvcGNpb25lcyArICc8L3NlbGVjdD4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcclxuICAgICAgICAgICAgICAgIGNlbGw2LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sLTEgZmxleC1ncm93LTAgdGV4dC1yaWdodCBidG5Cb3JyYXIgZC1ub25lIGQtbWQtYmxvY2sgZC1ub25lIGQtbWQtYmxvY2tcIj48YnV0dG9uIGNsYXNzPVwiYnRuXCIgaWQ9XCJib3RvbkJvcnJhclwiPjxpbWcgc3JjPVwiLi9hc3NldHMvbWFxdWV0YWRvL2ltZy9pYy1ib3JyYXIuc3ZnXCIgYWx0PVwiXCI+IDwvYnV0dD48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJvdzIgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcclxuICAgICAgICAgICAgICAgIGZpbGEyLmNvbFNwYW4gPSA2O1xyXG4gICAgICAgICAgICAgICAgZmlsYTIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2xsYXBzZVwiIGlkPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiPjxpbnB1dCBpZD1cIm5vdGVzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBpZCA9IGlkICsgMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LW1heC1xdWFudGl0eScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDdWFuZG8gc2UgcHVsc2EgZWwgYm90b24gcGFyYSBndWFyZGFyIGVsIGxvdGUgcmVjb3JyZSBsYSBmdW5jaW9uIHkgZWwgZm9yICwgcmVjb3JyZSBsaW5lYSBhIGxpbmVhIHkgbGFuemEgZWwgZW5kcG9pbnQgY29uIHVuYSBwYXVzYSBwYXJhIHF1ZSBubyBzZSBwaWVyZGEgbmluZ3VubyB5IG5vIHNlIHF1ZWRlIHBpbGxhZG8uXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdG9uR3VhcmRhcicpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LXNhdmluZycpO1xyXG4gICAgICAgICAgICB0aGlzXy5jYXJnYW5kbyA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBsb3RJRCA9ICcnO1xyXG4gICAgICAgICAgICB2YXIgY2FudGlkYWRMb3RlcyA9IDA7XHJcbiAgICAgICAgICAgIC8vQ29udHJvbGEgcXVlIGxhcyBjYW50aWRhZGVzIGRlIGxvcyBsb3RlcyBubyBzZWEgc3VwZXJpb3IgYSBsYSBkZWwgcHJvZHVjdG8gZW4gZWwgY2Fycml0by5cclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRMb3RlcyA9IGNhbnRpZGFkTG90ZXMgKyBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtLnF1YW50aXR5ID49IGNhbnRpZGFkTG90ZXMpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNhbnRpZGFkTG90ZXMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpdHkgPSBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWxpdmVyeURhdGUgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWxpdmVyeURhdGVcIiArIGluZGV4KSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGlwcGluZ0FkZHJlc3MgPSAkKFwiI3NoaXBwaW5nQWRkcmVzc1wiICsgaW5kZXgpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90ZXMgPSAkKFwiI25vdGVzXCIgKyBpbmRleCkudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGlwcGluZ0FkZHJlc3NOYW1lID0gJCgnI3NoaXBwaW5nQWRkcmVzcycgKyBpbmRleCArICcgb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRcIiArIGluZGV4KSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG90SUQgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZFwiICsgaW5kZXgpKS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG15SW5kZXggPSBhbGxJRC5pbmRleE9mKHBhcnNlSW50KGxvdElEKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsSUQuc3BsaWNlKG15SW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAobG90SUQgPT0gJ1BlbmR0LicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ251ZXZvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfLmNhcnRTZXJ2aWNlLmFkZFRvTG90KGl0ZW0ucHJvZHVjdCwgMCwgaXRlbS52YXJpYW50X2lkLCAwLCBpdGVtLml0ZW1faWQsIHF1YW50aXR5LCBpdGVtLnByb2R1Y3QucHJpY2UsIGl0ZW0ucXVhbnRpdHksIGl0ZW0uZGlzY291bnQsIGl0ZW0ucHJvZHVjdC5wcmljZSAqIHF1YW50aXR5LCAnbmV3JywgZGVsaXZlcnlEYXRlLCBub3RlcywgcGFyc2VJbnQoc2hpcHBpbmdBZGRyZXNzKSwgc2hpcHBpbmdBZGRyZXNzTmFtZSwgJ25ld2xvdCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvdElEICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxvdElEKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIHBhcnNlSW50KGxvdElEKSwgaXRlbS5pdGVtX2lkLCBxdWFudGl0eSwgaXRlbS5wcm9kdWN0LnByaWNlLCBpdGVtLnF1YW50aXR5LCBpdGVtLmRpc2NvdW50LCBpdGVtLnByb2R1Y3QucHJpY2UgKiBxdWFudGl0eSwgJ2VkaXRlZCcsIGRlbGl2ZXJ5RGF0ZSwgbm90ZXMsIHBhcnNlSW50KHNoaXBwaW5nQWRkcmVzcyksIHNoaXBwaW5nQWRkcmVzc05hbWUsICdlZGl0bG90Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBpbmRleDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGFsbElELmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnYm9ycmFyJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIGVsZW1lbnQsIDAsIDAsIDAsIDAsIDAsIDAsICdkZWxldGUnLCAwLCAnJywgMCwgJ2RlbGV0ZScsICdkZWxldGVsb3QnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoaXNfLmNhcnRTZXJ2aWNlLmxvYWRDYXJ0QnlUb2tlbih0aGlzXy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSk7IH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ2xvdC1zYXZlZCcpOyB9LCAzMDAgKiB5KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FyZ2FuZG8gPSBmYWxzZSB9LCAzMDAgKiB5KTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ0xhIGNhbnRpZGFkIGRlIGxvcyBsb3RlcyBlcyBzdXBlcmlvciBhIGxhIGNhbnRpZGFkIGRlbCBwcm9kdWN0by4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcjYm90b25Cb3JyYXInLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcyk7XHJcbiAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlTW9kYWwoaWQpIHtcclxuICAgICAgICAkKCcjJyArIGlkKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrU3RvY2soaXRlbSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBpdGVtLnByb2R1Y3QudmFyaWFudHMpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5zdG9jayA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucXVhbnRpdHkgPiB2YXJpYW50LnN0b2NrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhbnQuc3RvY2s7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBTb2xvIHNlIGVqZWN1dGEgc2kgbm8gc2UgY3VtcGxlIGxhIGNvbmRpY2nDs25cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVBbGxTdG9jaygpIHtcclxuICAgICAgICBjb25zdCBpdGVtczogYW55W10gPSBbXTtcclxuXHJcbiAgICAgICAgLy8gRGVmaW5lIGxhIHN1c2NyaXBjacOzbiBhbnRlcyBkZSB1c2FybGFcclxuXHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jYXJ0SXRlbXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhcmlhbnRfaWQgPT09IHZhcmlhbnQuY29kZSAmJiAhdGhpcy5leGl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmRlbGV0ZUNhcnRJdGVtKGl0ZW0sIGZhbHNlKTsgLy8gQm9ycmEgZWwgYXJ0w61jdWxvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IHZhcmlhbnQuc3RvY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudENvZGU6IHZhcmlhbnQuY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCAmJiAhdGhpcy5leGl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgIC8vIERlc3VzY3LDrWJldGUgYW50ZXMgZGUgYWN0dWFsaXphclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRBbGxUb0NhcnQoaXRlbXMpOyAgLy8gQWN0dWFsaXphIGVsIGNhcnJpdG9cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhpdFVwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnVwZGF0ZUFsbFN0b2NrKCk7ICAvLyBWdWVsdmUgYSB2ZXJpZmljYXIgZWwgc3RvY2tcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgZ2V0VmFyaWFudHMgPSBwcm9kdWN0ID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSBwcm9kdWN0LnByb2R1Y3RcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0udmFyaWFudHMgJiYgaXRlbS52YXJpYW50cy5sZW5ndGggJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zICYmIGl0ZW0udmFyaWFudHNbMF0ub3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnNcclxuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiB0aGlzLnZhcmlhbnRzVG9TaG93LmZpbmQobmFtZSA9PiBvcHRpb24uaGFzT3duUHJvcGVydHkobmFtZSkpKVxyXG4gICAgICAgICAgICBsZXQgb3B0aW9uc01hcCA9IFtdXHJcbiAgICAgICAgICAgIG9wdGlvbnMubWFwKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goKGVudHJ5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbkFkZGVkID0gZmFsc2U7ICAvLyBWYXJpYWJsZSBwYXJhIGV2aXRhciBtw7psdGlwbGVzIGluc2VyY2lvbmVzXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbjIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uMi5jb2RlID09ICdDT0xPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbjIudmFsdWVzLmZvckVhY2goY29sb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvci5jb2RlID09IG9wdGlvbltlbnRyeV0gJiYgIW9wdGlvbkFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7IG5hbWU6IGVudHJ5LCB2YWx1ZTogb3B0aW9uW2VudHJ5XSwgaW1hZ2U6IGNvbG9yLmltYWdlLCBtb2JpbGVJbWFnZTogY29sb3IubW9iaWxlSW1hZ2UgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkFkZGVkID0gdHJ1ZTsgLy8gTWFyY2FyIG9wY2nDs24gYWdyZWdhZGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIG5vIHNlIGHDsWFkacOzIGxhIG9wY2nDs24gZGUgQ09MT1IsIG1hbmVqYXIgb3RyYXMgb3BjaW9uZXNcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbkFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbjIgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgIT09ICdDT0xPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnRyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbltlbnRyeV1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlRGlzY291bnRNZXNzYWdlKHNhbGVwcmljZTogbnVtYmVyLCBwcmljZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoaXNOYU4oc2FsZXByaWNlKSB8fCBpc05hTihwcmljZSkgfHwgc2FsZXByaWNlID49IHByaWNlIHx8IHNhbGVwcmljZSA8PSAwIHx8IHByaWNlIDw9IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGRpc2NvdW50UGVyY2VudGFnZSA9IE1hdGgucm91bmQoKChwcmljZSAtIHNhbGVwcmljZSkgLyBwcmljZSkgKiAxMDApO1xyXG5cclxuICAgICAgICBsZXQgZGlzY291bnRNZXNzYWdlID0gYCR7ZGlzY291bnRQZXJjZW50YWdlfSUgT0ZGYDtcclxuICAgICAgICByZXR1cm4gZGlzY291bnRNZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwudHlwZSA9PSAnYjJiJyA/IHRoaXMuY2hhbm5lbC53aG9sZXNhbGVyTWluaW11bVB1cmNoYXNlQW1vdW50IDogdGhpcy5jaGFubmVsLnJldGFpbGVyTWluaW11bVB1cmNoYXNlQW1vdW50XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGV4Y2VlZHNNaW5pbXVtQW1vdW50ID0gKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlID49IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkgPyB0aGlzLnJlZGlyZWN0Q2hlY2tvdXQoKSA6IHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdxdWFudGl0eS1ub3QtZXhjZWVkZWQnLCB7IGFtb3VudDogdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSB9KVxyXG5cclxuXHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iXX0=
517
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy1lYXN5Y29tbWVyY2UvIiwic291cmNlcyI6WyJsaWIvZWMtY29tcG9uZW50L2NhcnQtZWMvY2FydC1lYy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBOEIsTUFBTSxlQUFlLENBQUE7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVM3RTtJQUFxQyxtQ0FBZTtJQXNCaEQseUJBQ1csV0FBd0IsRUFDeEIsV0FBd0IsRUFDckIsTUFBaUIsRUFDcEIsZUFBZ0MsRUFDaEMsTUFBYyxFQUNkLFlBQTRCLEVBQ3pCLGFBQTJCLEVBQzlCLGlCQUFvQyxFQUNwQyxvQkFBMEM7UUFUckQsWUFVSSxpQkFBTyxTQUtWO1FBZFUsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVcsR0FBWCxXQUFXLENBQWE7UUFDckIsWUFBTSxHQUFOLE1BQU0sQ0FBVztRQUNwQixxQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsWUFBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGtCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUN6QixtQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUM5Qix1QkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLDBCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUE1QjlDLG9CQUFjLEdBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUMsZ0JBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsY0FBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLGdCQUFVLEdBQUcsRUFBRSxDQUFDO1FBRWYsY0FBUSxHQUFZLEtBQUssQ0FBQztRQUMzQixhQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLGlCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGdCQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGdCQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGdCQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLG1CQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGVBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsNkJBQXVCLEdBQW1CLElBQUksQ0FBQztRQUMvQyxtQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixpQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixtQ0FBNkIsR0FBWSxLQUFLLENBQUM7UUFzRHRELGVBQVMsR0FBRyxVQUFDLE1BQU0sSUFBSyxPQUFBLEtBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUE3QixDQUE2QixDQUFDO1FBeUR0RCxzQkFBZ0IsR0FBRyxjQUFNLE9BQUEsS0FBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEVBQXhDLENBQXdDLENBQUE7UUF5UGpFLGlCQUFXLEdBQUcsVUFBQSxPQUFPO1lBRWpCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUE7WUFFMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDdEcsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7Z0JBQ3RDLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsS0FBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUEzQixDQUEyQixDQUFDLEVBQTdELENBQTZELENBQUMsQ0FBQTtnQkFDakcsSUFBSSxZQUFVLEdBQUcsRUFBRSxDQUFBO2dCQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQUEsTUFBTTtvQkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEtBQUs7d0JBQzlCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFFLDZDQUE2Qzt3QkFFdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBQSxPQUFPOzRCQUN4QixJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFO2dDQUN6QixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFBLEtBQUs7b0NBQ3hCLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7d0NBQzdDLFlBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO3dDQUMzRyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMseUJBQXlCO3FDQUNoRDtnQ0FDTCxDQUFDLENBQUMsQ0FBQzs2QkFDTjt3QkFDTCxDQUFDLENBQUMsQ0FBQzt3QkFDSCw2REFBNkQ7d0JBQzdELElBQUksQ0FBQyxXQUFXLEVBQUU7NEJBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBQSxPQUFPO2dDQUV4QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO29DQUMxQixZQUFVLENBQUMsSUFBSSxDQUFDO3dDQUNaLElBQUksRUFBRSxLQUFLO3dDQUNYLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO3FDQUV2QixDQUFDLENBQUM7b0NBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQztpQ0FDdEI7NEJBQ0wsQ0FBQyxDQUFDLENBQUM7eUJBQ047b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxZQUFVLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sWUFBVSxDQUFDO2FBRXJCO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFBO2FBQ2Q7UUFFTCxDQUFDLENBQUE7UUFZRCw4QkFBd0IsR0FBRztZQUN2QixPQUFPLEtBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQTtRQUVqSSxDQUFDLENBQUE7UUFFRCwwQkFBb0IsR0FBRyxVQUFDLEtBQWEsSUFBSyxPQUFBLEtBQUssSUFBSSxLQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsRUFBbEssQ0FBa0ssQ0FBQTtRQTFaeE0sS0FBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3BCLEtBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyRCxLQUFJLENBQUMsUUFBUSxHQUFHLEtBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7O0lBRTNDLENBQUM7SUFHRCxxQ0FBVyxHQUFYO1FBQ0ksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRCx3Q0FBYyxHQUFkO1FBQ0ksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRCxrQ0FBUSxHQUFSO1FBQUEsaUJBd0JDO1FBdkJHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFBLFVBQVUsSUFBSSxPQUFBLEtBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxFQUE1QixDQUE0QixDQUFDLENBQUM7UUFDbEYsK0NBQStDO1FBRS9DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFVBQUEsT0FBTzs7WUFDdEQsS0FBSSxDQUFDLFVBQVUsZUFBRyxPQUFPLDBDQUFFLFVBQVUsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDL0MsS0FBSSxDQUFDLGFBQWEsZUFBRyxPQUFPLDBDQUFFLGFBQWEsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDckQsS0FBSSxDQUFDLFNBQVMsZUFBRyxPQUFPLDBDQUFFLFNBQVMsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDN0MsS0FBSSxDQUFDLGFBQWEsZUFBRyxPQUFPLDBDQUFFLGFBQWEsdUNBQUksS0FBSyxFQUFBLENBQUM7WUFDckQsS0FBSSxDQUFDLDZCQUE2QixlQUFHLE9BQU8sMENBQUUsNkJBQTZCLHVDQUFJLEtBQUssRUFBQSxDQUFDO1lBRXJGLElBQUksS0FBSSxDQUFDLFVBQVUsRUFBRTtnQkFDakIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQy9CO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBQyxTQUFTO1lBQzVDLEtBQUksQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBQSxTQUFTO1lBQ3hDLEtBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO0lBRW5CLENBQUM7SUFJUyw0Q0FBa0IsR0FBNUIsVUFBNkIsSUFBUyxFQUFFLFFBQXlCLEVBQUUsS0FBYSxFQUFFLEVBQVc7UUFBN0YsaUJBMENDOztRQXpDRyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBQ0QsSUFBTSxnQkFBZ0IsR0FBRyxPQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLFFBQVEsS0FBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BJLElBQU0sSUFBSSxHQUFHLGdCQUFnQixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RSxJQUFJLFdBQW1CLENBQUM7UUFFeEIsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7WUFDOUIsV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDaEUsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzthQUN2RDtTQUNKO2FBQU07WUFDSCxXQUFXLEdBQUcsUUFBUSxDQUFDO1lBQ3ZCLElBQUksV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUU7Z0JBQzFCLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDdkQ7U0FDSjtRQUVELElBQU0sZUFBZSxlQUFHLElBQUksMENBQUUsUUFBUSx1Q0FBSSxTQUFTLEVBQUEsQ0FBQztRQUVwRCxJQUFJLEVBQUUsRUFBRTtZQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsa0RBQWtEO1lBQzFFLElBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxXQUFXLElBQUksS0FBSyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7YUFDM0U7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUNwRDtZQUVELFVBQVUsQ0FBQztnQkFDUCxLQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUM1QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDWjthQUFNO1lBQ0gsSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLFdBQVcsSUFBSSxLQUFLLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQzthQUMzRTtpQkFBTTtnQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2FBQ3BEO1NBQ0o7SUFDTCxDQUFDO0lBQUEsQ0FBQztJQUdGLDBDQUFnQixHQUFoQjtRQUNJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7YUFBTTtZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLENBQUMsQ0FBQztZQUNuRixPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNMLENBQUM7SUFJRCxtQ0FBUyxHQUFULFVBQVUsUUFBMEI7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCwrQ0FBcUIsR0FBckIsVUFBc0IsT0FBTztRQUN6QixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pDLElBQUksSUFBSSxHQUFHLFdBQVcsQ0FBQTtRQUN0QixJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQTtRQUNwQixJQUFJLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ25DLENBQUM7SUFFRCxvQ0FBVSxHQUFWLFVBQVcsSUFBSTtRQUNYLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNsQixLQUFLLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUMvQixHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFDdEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUUzQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNoQixLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNkLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBRXBCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUssb0NBQVUsR0FBaEIsVUFBaUIsSUFBSTs7Ozs7OzRCQUdILHFCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEVBQUE7O3dCQUEvQyxLQUFLLEdBQUcsU0FBdUM7d0JBR2pELEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ1AsS0FBSyxHQUFHLElBQUksQ0FBQzt3QkFDYixLQUFLLEdBQUcsRUFBRSxDQUFDO3dCQUVmLDBDQUEwQzt3QkFDMUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsR0FBRyxxSEFBcUgsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsa0VBQWtFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLGNBQWMsQ0FBQzt3QkFHOVMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQXFCLENBQUM7d0JBQzlFLFNBQVMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO3dCQUV6Qix5RkFBeUY7d0JBQ3pGLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQzs0QkFFbEMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFO2dDQUNoRCxTQUFTLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztnQ0FDekIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLEdBQUc7b0NBQ2hCLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQ0FDckQsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDOUIsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO29DQUNyRCxLQUFLLENBQUMsU0FBUyxHQUFHLGVBQWUsR0FBRyxFQUFFLEdBQUcsK0JBQStCLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUM7b0NBQ2xHLEtBQUssQ0FBQyxTQUFTLEdBQUcsbUNBQW1DLEdBQUcsRUFBRSxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLGtDQUFrQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO29DQUNwSixLQUFLLENBQUMsU0FBUyxHQUFHLDRCQUE0QixHQUFHLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsb0JBQW9CLEdBQUcsRUFBRSxHQUFHLDhCQUE4QixDQUFDO29DQUNwSSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUE7b0NBQ2pCLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJO3dDQUNkLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsbUJBQW1CLEVBQUU7NENBQ3BDLFFBQVEsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQzt5Q0FDM0c7NkNBQ0k7NENBQ0QsUUFBUSxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO3lDQUNsRztvQ0FDTCxDQUFDLENBQUMsQ0FBQztvQ0FDSCxLQUFLLENBQUMsU0FBUyxHQUFHLDhCQUE4QixHQUFHLEVBQUUsR0FBRyw4QkFBOEIsR0FBRyxRQUFRLEdBQUcsV0FBVyxDQUFDO29DQUNoSCxLQUFLLENBQUMsU0FBUyxHQUFHLGlJQUFpSSxHQUFHLEVBQUUsR0FBRyx3REFBd0QsR0FBRyxFQUFFLEdBQUcsd0JBQXdCLENBQUM7b0NBQ3BQLEtBQUssQ0FBQyxTQUFTLEdBQUcseUdBQXlHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyx3R0FBd0csQ0FBQztvQ0FDaFAsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29DQUN0RCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO29DQUM5QixLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztvQ0FDbEIsS0FBSyxDQUFDLFNBQVMsR0FBRywyQ0FBMkMsR0FBRyxFQUFFLEdBQUcsb0JBQW9CLEdBQUcsRUFBRSxHQUFHLGdDQUFnQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcseUZBQXlGLENBQUM7b0NBQzFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29DQUVaLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0NBQzFCLENBQUMsQ0FBQyxDQUFDOzZCQUNOO3dCQUNMLENBQUMsQ0FBQyxDQUFDO3dCQUVILFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxHQUFHOzRCQUU5Qyw2R0FBNkc7NEJBQzdHLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQzs0QkFDdkIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQ0FDckMsSUFBc0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUU7b0NBQy9ELGNBQWMsR0FBRyxjQUFjLEdBQUcsUUFBUSxDQUFvQixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQ0FDckg7NkJBQ0o7NEJBRUQsdUVBQXVFOzRCQUN2RSxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0NBQ25DLElBQUksR0FBRyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQ0FDckQsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDOUIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDOUIsS0FBSyxDQUFDLFNBQVMsR0FBRyxlQUFlLEdBQUcsRUFBRSxHQUFHLGdEQUFnRCxDQUFDO2dDQUMxRixLQUFLLENBQUMsU0FBUyxHQUFHLG1DQUFtQyxHQUFHLEVBQUUsR0FBRyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsY0FBYyxDQUFDLEdBQUcsa0NBQWtDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dDQUNsTSxLQUFLLENBQUMsU0FBUyxHQUFHLHFDQUFxQyxHQUFHLEVBQUUsR0FBRyw4QkFBOEIsQ0FBQztnQ0FDOUYsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFBO2dDQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUEsSUFBSSxJQUFNLFFBQVEsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUMzSCxLQUFLLENBQUMsU0FBUyxHQUFHLDhCQUE4QixHQUFHLEVBQUUsR0FBRyw4QkFBOEIsR0FBRyxRQUFRLEdBQUcsV0FBVyxDQUFDO2dDQUNoSCxLQUFLLENBQUMsU0FBUyxHQUFHLGlJQUFpSSxHQUFHLEVBQUUsR0FBRyx3REFBd0QsR0FBRyxFQUFFLEdBQUcsd0JBQXdCLENBQUM7Z0NBQ3BQLEtBQUssQ0FBQyxTQUFTLEdBQUcsb01BQW9NLENBQUM7Z0NBQ3ZOLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQ0FDdEQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQ0FDOUIsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0NBQ2xCLEtBQUssQ0FBQyxTQUFTLEdBQUcsMkNBQTJDLEdBQUcsRUFBRSxHQUFHLG9CQUFvQixHQUFHLEVBQUUsR0FBRyw4R0FBOEcsQ0FBQztnQ0FHaE4sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7NkJBQ2Y7aUNBQU07Z0NBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQzs2QkFDaEQ7d0JBQ0wsQ0FBQyxDQUFBO3dCQUVELDJMQUEyTDt3QkFDM0wsUUFBUSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLEdBQUc7NEJBQzlDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUN2QyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzs0QkFDdEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDOzRCQUNmLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQzs0QkFDdEIsMkZBQTJGOzRCQUMzRixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO2dDQUNyQyxJQUFzQixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFBRTtvQ0FDL0QsYUFBYSxHQUFHLGFBQWEsR0FBRyxRQUFRLENBQW9CLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lDQUNuSDs2QkFDSjs0QkFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksYUFBYSxFQUFFO2dDQUNoQyw4QkFBOEI7Z0NBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQ0FDVixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO29DQUVyQyxJQUF1QixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUUsRUFBRTt3Q0FDakUsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFvQixRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3Q0FDL0YsSUFBSSxZQUFZLEdBQXNCLFFBQVEsQ0FBQyxjQUFjLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBRSxDQUFDLEtBQUssQ0FBQzt3Q0FDN0YsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dDQUMxRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO3dDQUN0QyxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztxQ0FDdkY7b0NBQ0QsSUFBdUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFFLEVBQUU7d0NBQzNELEtBQUssR0FBc0IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFFLENBQUMsS0FBSyxDQUFDO3dDQUN4RSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dDQUM3QyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRTs0Q0FDaEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7eUNBQzVCO3FDQUVKO29DQUNELElBQUksS0FBSyxJQUFJLFFBQVEsRUFBRTt3Q0FDbkIsd0JBQXdCO3dDQUN4QixLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQztxQ0FFbFE7eUNBQU0sSUFBSSxLQUFLLElBQUksRUFBRSxFQUFFO3dDQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dDQUNuQixLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLENBQUMsQ0FBQztxQ0FDcFI7b0NBQ0QsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQ0FDYjtnQ0FDRCxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQUEsT0FBTztvQ0FDakIsMkJBQTJCO29DQUMzQixLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dDQUN2SSxDQUFDLENBQUMsQ0FBQztnQ0FDSCxVQUFVLENBQUMsY0FBYyxLQUFLLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dDQUUxRyxVQUFVLENBQUMsY0FBYyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0NBRTVFLFVBQVUsQ0FBQyxjQUFjLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQzs2QkFFL0Q7aUNBQU07Z0NBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsa0VBQWtFLENBQUMsQ0FBQzs2QkFDaEc7d0JBQ0wsQ0FBQyxDQUFDO3dCQUVGLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEtBQUs7NEJBQ25ELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzs0QkFDdkIscUJBQXFCOzRCQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUVuQyxDQUFDLENBQUMsQ0FBQzs7Ozs7S0FFTjtJQUVELG9DQUFVLEdBQVYsVUFBVyxFQUFFO1FBQ1QsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELG9DQUFVLEdBQVYsVUFBVyxJQUFJOzs7WUFDWCxLQUFzQixJQUFBLEtBQUEsU0FBQSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQSxnQkFBQSw0QkFBRTtnQkFBeEMsSUFBTSxPQUFPLFdBQUE7Z0JBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQ2xDLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7d0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO3dCQUN4QixPQUFPLEdBQUcsQ0FBQztxQkFDZDt5QkFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRTt3QkFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7d0JBQ3hCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztxQkFDeEI7aUJBQ0o7YUFDSjs7Ozs7Ozs7O1FBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQywrQ0FBK0M7SUFDakUsQ0FBQztJQUVELHdDQUFjLEdBQWQ7UUFBQSxpQkFtQ0M7UUFsQ0csSUFBTSxLQUFLLEdBQVUsRUFBRSxDQUFDO1FBRXhCLHdDQUF3QztRQUV4QyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBQSxHQUFHO1lBQ3BDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJOzs7b0JBQ1osS0FBc0IsSUFBQSxLQUFBLFNBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUEsZ0JBQUEsNEJBQUU7d0JBQXhDLElBQU0sT0FBTyxXQUFBO3dCQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSSxDQUFDLFVBQVUsRUFBRTs0QkFDdEQsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtnQ0FDckIsS0FBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsb0JBQW9COzZCQUNyRTtpQ0FBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRTtnQ0FDdEMsS0FBSyxDQUFDLElBQUksQ0FBQztvQ0FDUCxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29DQUM1QixRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUs7b0NBQ3ZCLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSTtpQ0FDNUIsQ0FBQyxDQUFDOzZCQUNOO2lDQUFNO2dDQUNILEtBQUssQ0FBQyxJQUFJLENBQUM7b0NBQ1AsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtvQ0FDNUIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO29DQUN2QixXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUk7aUNBQzVCLENBQUMsQ0FBQzs2QkFDTjt5QkFDSjtxQkFDSjs7Ozs7Ozs7O1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLFVBQVUsRUFBRTtnQkFDdEMsbUVBQW1FO2dCQUNuRSxLQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLHVCQUF1QjtnQkFDOUQsS0FBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLEtBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2Qix5REFBeUQ7YUFDNUQ7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFvREQsK0NBQXFCLEdBQXJCLFVBQXNCLFNBQWlCLEVBQUUsS0FBYTtRQUNsRCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxJQUFJLEtBQUssSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDeEYsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUVELElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRXpFLElBQUksZUFBZSxHQUFNLGtCQUFrQixVQUFPLENBQUM7UUFDbkQsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQzs7Z0JBOVp1QixXQUFXO2dCQUNYLFdBQVc7Z0JBQ2IsU0FBUztnQkFDSCxlQUFlO2dCQUN4QixNQUFNO2dCQUNBLGNBQWM7Z0JBQ1YsWUFBWTtnQkFDWCxpQkFBaUI7Z0JBQ2Qsb0JBQW9COztJQS9CNUMsZUFBZTtRQUwzQixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsYUFBYTtZQUN2QixZQUF1Qzs7U0FFMUMsQ0FBQztPQUNXLGVBQWUsQ0E4YjNCO0lBQUQsc0JBQUM7Q0FBQSxBQTliRCxDQUFxQyxlQUFlLEdBOGJuRDtTQTliWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL21vZGFsXCI7XHJcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsL2JzLW1vZGFsLXJlZi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSBcIi4uLy4uL2NvcmUuY29uc3RzXCI7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvZHVjdHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvZHVjdHMvcHJvZHVjdHMuc2VydmljZSc7XHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50SGVscGVyIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvY29tcG9uZW50LWhlbHBlclwiO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdG9hc3Quc2VydmljZVwiO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEFkZHJlc3NpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hlY2tvdXQvYWRkcmVzc2luZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbm5lbC1jb25maWcuc2VydmljZSc7XHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYXBwLWNhcnQtZWMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhcnQtZWMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY2FydC1lYy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJ0RWNDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRIZWxwZXIgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuXHJcbiAgICBwdWJsaWMgdmFyaWFudHNUb1Nob3c6IHN0cmluZ1tdID0gWydUQUxMRScsICdDT0xPUiddO1xyXG4gICAgcHVibGljIGlzTG9nZ2VkSW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBtZWRpYVVybCA9ICcnO1xyXG4gICAgcHVibGljIG1vZGFsUmVmOiBCc01vZGFsUmVmIHwgbnVsbDtcclxuICAgIHB1YmxpYyBwcm9tb3Rpb25zID0gW107XHJcbiAgICBwdWJsaWMgaXRlbXM6IE9ic2VydmFibGU8YW55PjtcclxuICAgIHByaXZhdGUgY2FyZ2FuZG86IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjaGFubmVsOiBhbnkgPSB7fTtcclxuICAgIHB1YmxpYyB1cGRhdGVTdG9jazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGV4aXRVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaGlkZVByaWNlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGhpZGVEaXNjb3VudHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBoaWRlVGF4ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG4gICAgcHVibGljIHNob3dUYXhMZWdlbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjYXJ0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgcHVibGljIGVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGNhcnRTZXJ2aWNlOiBDYXJ0U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBjb25zdHM6IENvbnN0YW50cyxcclxuICAgICAgICBwdWJsaWMgcHJvZHVjdHNTZXJ2aWNlOiBQcm9kdWN0c1NlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHB1YmxpYyBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGFkZHJlc3NpbmdTZXJ2aWNlOiBBZGRyZXNzaW5nU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmVjT25Db25zdHJ1Y3QoKVxyXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICAgICAgdGhpcy5tZWRpYVVybCA9IHRoaXMuY29uc3RzLm1lZGlhVXJsKCk7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBuZ09uQ2hhbmdlcygpIHtcclxuICAgICAgICB0aGlzLmlzTG9nZ2VkSW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxvZ2dlZEluKCkge1xyXG4gICAgICAgIHRoaXMuaXNMb2dnZWRJbiA9IHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbCgwLCAwKTtcclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnByb21vdGlvbnMuc3Vic2NyaWJlKHByb21vdGlvbnMgPT4gdGhpcy5wcm9tb3Rpb25zID0gcHJvbW90aW9ucyk7XHJcbiAgICAgICAgLy8gICAgY29uc29sZS5sb2codGhpcy5jYXJ0U2VydmljZS5nZXRUYXhlcygpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUoY2hhbm5lbCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZVByaWNlcyA9IGNoYW5uZWw/LmhpZGVQcmljZXMgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZURpc2NvdW50cyA9IGNoYW5uZWw/LmhpZGVEaXNjb3VudHMgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZVRheGVzID0gY2hhbm5lbD8uaGlkZVRheGVzID8/IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dUYXhMZWdlbmQgPSBjaGFubmVsPy5zaG93VGF4TGVnZW5kID8/IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZUZpZWxkTm90ZXNJbkFydGljbGVGaWxlID0gY2hhbm5lbD8uZW5hYmxlRmllbGROb3Rlc0luQXJ0aWNsZUZpbGUgPz8gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5oaWRlUHJpY2VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnNob3dQcmljZSQuc3Vic2NyaWJlKChzaG93UHJpY2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmxvYWRpbmcuc3Vic2NyaWJlKGlzTG9hZGluZyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FydExvYWRpbmcgPSBpc0xvYWRpbmc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5lY09uSW5pdCgpXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRvRGVjaW1hbCA9IChhbW91bnQpID0+IHRoaXMuY29uc3RzLnRvRGVjaW1hbChhbW91bnQpO1xyXG5cclxuICAgIHByb3RlY3RlZCBhY3R1YWxpemFyQ2FudGlkYWQoaXRlbTogYW55LCBjYW50aWRhZDogbnVtYmVyIHwgc3RyaW5nLCBzdG9jazogbnVtYmVyLCBpZD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnRMb2FkaW5nKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbXVsdGlwbGVRdWFudGl0eSA9IGl0ZW0ucHJvZHVjdD8udmFyaWFudHMgJiYgaXRlbS5wcm9kdWN0LnZhcmlhbnRzLmxlbmd0aCA+IDAgPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ubXVsdGlwbGVRdWFudGl0eSA6IDA7XHJcbiAgICAgICAgY29uc3Qgc3RlcCA9IG11bHRpcGxlUXVhbnRpdHkgJiYgbXVsdGlwbGVRdWFudGl0eSA+IDAgPyBtdWx0aXBsZVF1YW50aXR5IDogMTtcclxuXHJcbiAgICAgICAgbGV0IG5ld1F1YW50aXR5OiBudW1iZXI7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgY2FudGlkYWQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIG5ld1F1YW50aXR5ID0gcGFyc2VJbnQoY2FudGlkYWQsIDEwKTtcclxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ICUgc3RlcCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3QtYmUtbXVsdGlwbGUnLCB7IHF1YW50aXR5OiBzdGVwIH0pO1xyXG4gICAgICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBNYXRoLnJvdW5kKG5ld1F1YW50aXR5IC8gc3RlcCkgKiBzdGVwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBjYW50aWRhZDtcclxuICAgICAgICAgICAgaWYgKG5ld1F1YW50aXR5ICUgc3RlcCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgbmV3UXVhbnRpdHkgPSBNYXRoLnJvdW5kKG5ld1F1YW50aXR5IC8gc3RlcCkgKiBzdGVwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBrZWVwU2FtZUNvbW1lbnQgPSBpdGVtPy5jb21tZW50cyA/PyB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGlmIChpZCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSB0cnVlOyAvLyBBY3R1YWxpemEgbGEgcHJvcGllZGFkIHZpbmN1bGFkYSBhIGBbZGlzYWJsZWRdYFxyXG4gICAgICAgICAgICBpZiAobmV3UXVhbnRpdHkgPiAwICYmIG5ld1F1YW50aXR5IDw9IHN0b2NrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCBuZXdRdWFudGl0eSwga2VlcFNhbWVDb21tZW50KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdvdXQtb2Ytc3RvY2stYWN0dWFsbHknKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IC8vIEZ1bmNpw7NuIGRlIGZsZWNoYSBwYXJhIHByZXNlcnZhciBlbCBjb250ZXh0b1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChuZXdRdWFudGl0eSA+IDAgJiYgbmV3UXVhbnRpdHkgPD0gc3RvY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UudXBkYXRlSXRlbVF1YW50aXR5KGl0ZW0sIG5ld1F1YW50aXR5LCBrZWVwU2FtZUNvbW1lbnQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ291dC1vZi1zdG9jay1hY3R1YWxseScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcblxyXG4gICAgcmVkaXJlY3RDaGVja291dCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jYXJ0U2VydmljZS5oYXNTdWZmaWNpZW50Q3JlZGl0c0ZvckNhcnRUb3RhbCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9jaGVja291dGApO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBzZSBwdWVkZSByZWRpcmlnaXIgYWwgY2hlY2tvdXQgZGViaWRvIGEgdW5hIHZhbGlkYWNpw7NuIGZhbGxpZGEuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZGlyZWN0UmVnaXN0ZXIgPSAoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvYXV0aC9sb2dpbmApXHJcblxyXG4gICAgb3Blbk1vZGFsKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIHsgY2xhc3M6ICdtb2RhbC14bCcsIGtleWJvYXJkOiBmYWxzZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWRpcmVjdERldGFpbFByb2R1Y3QocHJvZHVjdCkge1xyXG4gICAgICAgIGxldCB2YXJpYW50ID0gcHJvZHVjdC52YXJpYW50c1swXVxyXG4gICAgICAgIGxldCBwYXRoID0gJy9wcm9kdWN0LydcclxuICAgICAgICBwYXRoICs9IHZhcmlhbnQuY29kZVxyXG4gICAgICAgIHBhdGggKz0gdmFyaWFudC5vcHRpb25zLmxlbmd0aCA/IFwiP3ZhcmlhbnQ9dHJ1ZVwiIDogXCJcIlxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwocGF0aClcclxuICAgIH1cclxuXHJcbiAgICBmb3JtYXREYXRlKGRhdGUpIHtcclxuICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGRhdGUpLFxyXG4gICAgICAgICAgICBtb250aCA9ICcnICsgKGQuZ2V0TW9udGgoKSArIDEpLFxyXG4gICAgICAgICAgICBkYXkgPSAnJyArIGQuZ2V0RGF0ZSgpLFxyXG4gICAgICAgICAgICB5ZWFyID0gZC5nZXRGdWxsWWVhcigpO1xyXG5cclxuICAgICAgICBpZiAobW9udGgubGVuZ3RoIDwgMilcclxuICAgICAgICAgICAgbW9udGggPSAnMCcgKyBtb250aDtcclxuICAgICAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpXHJcbiAgICAgICAgICAgIGRheSA9ICcwJyArIGRheTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFt5ZWFyLCBtb250aCwgZGF5XS5qb2luKCctJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2FyZ2FNb2RhbChpdGVtKSB7XHJcblxyXG4gICAgICAgIC8vIE9idGllbmUgbGFzIHNlZGVzIGRlbCBjbGllbnRlXHJcbiAgICAgICAgY29uc3Qgc2VkZXMgPSBhd2FpdCB0aGlzLmNhcnRTZXJ2aWNlLmdldEFkZHJlc3NCb29rKCk7XHJcblxyXG4gICAgICAgIC8vIENyZW8gdW5hIHNlcmllIGRlIHZhcmlhYmxlcyBxdWUgdm95IGEgbmVjZXNpdGFyLCBpZCBwYXJhIGNvbnRyb2xhciBsYXMgdnVlbHRhcyBxdWUgZGEgeSBjdWFudGFzIGxpbmVhcyBoYXkgeSBhbGxJRCBwYXJhIGFsbWFjZW5hciBsb3MgSUQgZGUgbG9zIGxvdGVzLlxyXG4gICAgICAgIHZhciBpZCA9IDE7XHJcbiAgICAgICAgdmFyIHRoaXNfID0gdGhpcztcclxuICAgICAgICB2YXIgYWxsSUQgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gQcOxYWRlIGxvcyBkYXRvcyBhbCBlbmNhYmV6YWRvIGRlbCBNb2RhbFxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbmNhYmV6YWRvTW9kYWwnKS5pbm5lckhUTUwgPSAnPGEgY2xhc3M9XCJ0aXRsZSB0ZXh0LWRhcmsgdGV4dC1kZWNvcmF0aW9uLW5vbmUgaDUgZC1ibG9jayBtLTAgcC0wIG0tMCBwLTBcIj48cCBjbGFzcz1cIm5vbWJyZSBtYi0wXCIgaWQ9XCJwcm9kdWN0TmFtZVwiPicgKyBpdGVtWydwcm9kdWN0J11bJ25hbWUnXSArICc8L3A+PHNtYWxsIGNsYXNzPVwidGV4dC1zZWNvbmRhcnkgcHMtMiBtcy0xXCIgaWQ9XCJwcm9kdWN0UmVmXCI+UmVmOicgKyBpdGVtWyd2YXJpYW50X2lkJ10gKyAnPC9zbWFsbD48L2E+JztcclxuXHJcbiAgICAgICAgLy8gQm9ycmFtb3MgdG9kb3MgbG9zIGRhdG9zIGRlIGxvcyBsb3RlcyBhbnRlcmlvcmVzXHJcbiAgICAgICAgdmFyIGJvZHlUYWJsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibG90X2JvZHlfdGFibGVcIikgYXMgSFRNTFRhYmxlRWxlbWVudDtcclxuICAgICAgICBib2R5VGFibGUuaW5uZXJIVE1MID0gJyc7XHJcblxyXG4gICAgICAgIC8vIFJlY29ycmUgdG9kb3MgbG9zIGFydGljdWxvcyB5IGVuY3VlbnRyYSBzaSB0aWVuZW4gbG90ZXMgbyBubywgc2kgdGllbmUgY3JlYSBsYXMgbGluZWFzXHJcbiAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuZ2V0Q2FydDIoKS5mb3JFYWNoKGkgPT4ge1xyXG5cclxuICAgICAgICAgICAgaWYgKGlbJ2l0ZW1faWQnXSA9PSBpdGVtLml0ZW1faWQgJiYgaVsnbG90J10gIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIGJvZHlUYWJsZS5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICAgICAgICAgIGlbJ2xvdCddLmZvckVhY2gobG90ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMSA9IHJvdy5pbnNlcnRDZWxsKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMiA9IHJvdy5pbnNlcnRDZWxsKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsMyA9IHJvdy5pbnNlcnRDZWxsKDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNCA9IHJvdy5pbnNlcnRDZWxsKDMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNSA9IHJvdy5pbnNlcnRDZWxsKDQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjZWxsNiA9IHJvdy5pbnNlcnRDZWxsKDUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShsb3RbJ2RhdGVfcmVxdWVzdCddKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDEuaW5uZXJIVE1MID0gJzxpbnB1dCBpZD1cImlkJyArIGlkICsgJ1wiICBzdHlsZT1cImJvcmRlcjogMDtcIiB2YWx1ZT1cIicgKyBsb3QuaWQgKyAnXCIgZGlzYWJsZWQ+JztcclxuICAgICAgICAgICAgICAgICAgICBjZWxsMi5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInF1YW50aXR5JyArIGlkICsgJ1wiIHZhbHVlPSBcIicgKyBsb3QucXVhbnRpdHkgKyAnXCJjbGFzcz1cImZvcm0tY29udHJvbCB3LTUwXCIgbWF4PVwiJyArIGxvdC5xdWFudGl0eSArICdcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiB2YWx1ZT1cIicgKyB0aGlzLmZvcm1hdERhdGUoZGF0ZSkgKyAnXCIgaWQ9XCJkZWxpdmVyeURhdGUnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9wY2lvbmVzID0gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNlZGVzLmZvckVhY2goc2VkZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWRlLmlkID09IGxvdC5zaGlwcGluZ19hZGRyZXNzX2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25lcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBzZWRlLmlkICsgJ1wiIHNlbGVjdGVkPicgKyBzZWRlLmNpdHkgKyAnIC0gJyArIHNlZGUuc3RyZWV0ICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNpb25lcyArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBzZWRlLmlkICsgJ1wiPicgKyBzZWRlLmNpdHkgKyAnIC0gJyArIHNlZGUuc3RyZWV0ICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjZWxsNC5pbm5lckhUTUwgPSAnPHNlbGVjdCAgaWQ9XCJzaGlwcGluZ0FkZHJlc3MnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPicgKyBvcGNpb25lcyArICc8L3NlbGVjdD4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGNlbGw1LmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0blNlZ3VpclwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS1icy10YXJnZXQ9XCIjY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgdmFsdWU9XCJWZXJcIj48L2lucHV0Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgY2VsbDYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2wtMSBmbGV4LWdyb3ctMCB0ZXh0LXJpZ2h0IGJ0bkJvcnJhciBkLW5vbmUgZC1tZC1ibG9jayBkLW5vbmUgZC1tZC1ibG9ja1wiPjxidXR0b24gdmFsdWU9XCInICsgbG90LmlkICsgJ1wiIGNsYXNzPVwiYnRuXCIgaWQ9XCJib3RvbkJvcnJhclwiPjxpbWcgc3JjPVwiLi9hc3NldHMvbWFxdWV0YWRvL2ltZy9pYy1ib3JyYXIuc3ZnXCIgYWx0PVwiXCI+IDwvYnV0dG9uPjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdzIgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGEyID0gcm93Mi5pbnNlcnRDZWxsKDApXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsYTIuY29sU3BhbiA9IDY7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsYTIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2xsYXBzZVwiIGlkPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiPjxpbnB1dCBpZD1cIm5vdGVzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdmFsdWU9XCInICsgbG90Lm5vdGVzICsgJ1wiIHBsYWNlaG9sZGVyPVwiSW5ncmVzZSB1biBjb21lbnRhcmlvIGVuIGNhc28gZGUgcXVlIHNlYSBuZWNlc2FyaW8uXCIgdHlwZT1cInRleHRcIi8+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICBpZCA9IGlkICsgMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsSUQucHVzaChsb3RbJ2lkJ10pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdG9uQWdyZWdhcicpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAvLyAvLyBTZSBjYWxjdWxhIGxhIGNhbnRpZGFkIHkgZWwgY29udGFkb3IgcGFyYSBxdWUgbm8gZXhjZWRhIGxhIGNhbnRpZGFkIGRlIGxhIGxpbmVhIGFsIGNyZWFyIHVuIG51ZXZvIGxvdGUuXHJcbiAgICAgICAgICAgIHZhciBjYW50aWRhZEFjdHVhbCA9IDA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBpZDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIiArIGluZGV4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbnRpZGFkQWN0dWFsID0gY2FudGlkYWRBY3R1YWwgKyBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGHDsWFkZSBsYSBsaW5lYSBzaWVtcHJlIHkgY3VhbmRvIGxhIGNhbnRpZGFkIHJlc3RhbnRlIG5vIHNlYSBjZXJvLlxyXG4gICAgICAgICAgICBpZiAoY2FudGlkYWRBY3R1YWwgPCBpdGVtWydxdWFudGl0eSddKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcm93ID0gYm9keVRhYmxlLmluc2VydFJvdyhib2R5VGFibGUucm93cy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGwxID0gcm93Lmluc2VydENlbGwoMCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDIgPSByb3cuaW5zZXJ0Q2VsbCgxKTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsMyA9IHJvdy5pbnNlcnRDZWxsKDIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGw0ID0gcm93Lmluc2VydENlbGwoMyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2VsbDUgPSByb3cuaW5zZXJ0Q2VsbCg0KTtcclxuICAgICAgICAgICAgICAgIHZhciBjZWxsNiA9IHJvdy5pbnNlcnRDZWxsKDUpO1xyXG4gICAgICAgICAgICAgICAgY2VsbDEuaW5uZXJIVE1MID0gJzxpbnB1dCBpZD1cImlkJyArIGlkICsgJ1wiICBzdHlsZT1cImJvcmRlcjogMDtcIiB2YWx1ZT1cIlBlbmR0LlwiIGRpc2FibGVkPic7XHJcbiAgICAgICAgICAgICAgICBjZWxsMi5pbm5lckhUTUwgPSAnPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInF1YW50aXR5JyArIGlkICsgJ1wiIHZhbHVlPSBcIicgKyAoaXRlbVsncXVhbnRpdHknXSAtIGNhbnRpZGFkQWN0dWFsKSArICdcImNsYXNzPVwiZm9ybS1jb250cm9sIHctNTBcIiBtYXg9XCInICsgKGl0ZW1bJ3F1YW50aXR5J10gLSBjYW50aWRhZEFjdHVhbCkgKyAnXCI+JztcclxuICAgICAgICAgICAgICAgIGNlbGwzLmlubmVySFRNTCA9ICc8aW5wdXQgdHlwZT1cImRhdGVcIiBpZD1cImRlbGl2ZXJ5RGF0ZScgKyBpZCArICdcIiBjbGFzcz1cImZvcm0tY29udHJvbCB3LTc1XCI+JztcclxuICAgICAgICAgICAgICAgIHZhciBvcGNpb25lcyA9IFwiXCJcclxuICAgICAgICAgICAgICAgIHNlZGVzLmZvckVhY2goc2VkZSA9PiB7IG9wY2lvbmVzICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHNlZGUuaWQgKyAnXCI+JyArIHNlZGUuY2l0eSArICcgLSAnICsgc2VkZS5zdHJlZXQgKyAnPC9vcHRpb24+JzsgfSk7XHJcbiAgICAgICAgICAgICAgICBjZWxsNC5pbm5lckhUTUwgPSAnPHNlbGVjdCAgaWQ9XCJzaGlwcGluZ0FkZHJlc3MnICsgaWQgKyAnXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy03NVwiPicgKyBvcGNpb25lcyArICc8L3NlbGVjdD4nO1xyXG4gICAgICAgICAgICAgICAgY2VsbDUuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuU2VndWlyXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUV4YW1wbGUnICsgaWQgKyAnXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRXhhbXBsZScgKyBpZCArICdcIiB2YWx1ZT1cIlZlclwiPjwvaW5wdXQ+JztcclxuICAgICAgICAgICAgICAgIGNlbGw2LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiY29sLTEgZmxleC1ncm93LTAgdGV4dC1yaWdodCBidG5Cb3JyYXIgZC1ub25lIGQtbWQtYmxvY2sgZC1ub25lIGQtbWQtYmxvY2tcIj48YnV0dG9uIGNsYXNzPVwiYnRuXCIgaWQ9XCJib3RvbkJvcnJhclwiPjxpbWcgc3JjPVwiLi9hc3NldHMvbWFxdWV0YWRvL2ltZy9pYy1ib3JyYXIuc3ZnXCIgYWx0PVwiXCI+IDwvYnV0dD48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJvdzIgPSBib2R5VGFibGUuaW5zZXJ0Um93KGJvZHlUYWJsZS5yb3dzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmlsYTIgPSByb3cyLmluc2VydENlbGwoMClcclxuICAgICAgICAgICAgICAgIGZpbGEyLmNvbFNwYW4gPSA2O1xyXG4gICAgICAgICAgICAgICAgZmlsYTIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJjb2xsYXBzZVwiIGlkPVwiY29sbGFwc2VFeGFtcGxlJyArIGlkICsgJ1wiPjxpbnB1dCBpZD1cIm5vdGVzJyArIGlkICsgJ1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJJbmdyZXNlIHVuIGNvbWVudGFyaW8gZW4gY2FzbyBkZSBxdWUgc2VhIG5lY2VzYXJpby5cIiB0eXBlPVwidGV4dFwiLz48L2Rpdj4nO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBpZCA9IGlkICsgMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LW1heC1xdWFudGl0eScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDdWFuZG8gc2UgcHVsc2EgZWwgYm90b24gcGFyYSBndWFyZGFyIGVsIGxvdGUgcmVjb3JyZSBsYSBmdW5jaW9uIHkgZWwgZm9yICwgcmVjb3JyZSBsaW5lYSBhIGxpbmVhIHkgbGFuemEgZWwgZW5kcG9pbnQgY29uIHVuYSBwYXVzYSBwYXJhIHF1ZSBubyBzZSBwaWVyZGEgbmluZ3VubyB5IG5vIHNlIHF1ZWRlIHBpbGxhZG8uXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdG9uR3VhcmRhcicpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXNfLnRvYXN0clNlcnZpY2Uuc2hvdygnbG90LXNhdmluZycpO1xyXG4gICAgICAgICAgICB0aGlzXy5jYXJnYW5kbyA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBsb3RJRCA9ICcnO1xyXG4gICAgICAgICAgICB2YXIgY2FudGlkYWRMb3RlcyA9IDA7XHJcbiAgICAgICAgICAgIC8vQ29udHJvbGEgcXVlIGxhcyBjYW50aWRhZGVzIGRlIGxvcyBsb3RlcyBubyBzZWEgc3VwZXJpb3IgYSBsYSBkZWwgcHJvZHVjdG8gZW4gZWwgY2Fycml0by5cclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FudGlkYWRMb3RlcyA9IGNhbnRpZGFkTG90ZXMgKyBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtLnF1YW50aXR5ID49IGNhbnRpZGFkTG90ZXMpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNhbnRpZGFkTG90ZXMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGlkOyBpbmRleCsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpdHkgPSBwYXJzZUludCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiICsgaW5kZXgpKS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWxpdmVyeURhdGUgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWxpdmVyeURhdGVcIiArIGluZGV4KSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGlwcGluZ0FkZHJlc3MgPSAkKFwiI3NoaXBwaW5nQWRkcmVzc1wiICsgaW5kZXgpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90ZXMgPSAkKFwiI25vdGVzXCIgKyBpbmRleCkudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGlwcGluZ0FkZHJlc3NOYW1lID0gJCgnI3NoaXBwaW5nQWRkcmVzcycgKyBpbmRleCArICcgb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRcIiArIGluZGV4KSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG90SUQgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZFwiICsgaW5kZXgpKS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG15SW5kZXggPSBhbGxJRC5pbmRleE9mKHBhcnNlSW50KGxvdElEKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsSUQuc3BsaWNlKG15SW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAobG90SUQgPT0gJ1BlbmR0LicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ251ZXZvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfLmNhcnRTZXJ2aWNlLmFkZFRvTG90KGl0ZW0ucHJvZHVjdCwgMCwgaXRlbS52YXJpYW50X2lkLCAwLCBpdGVtLml0ZW1faWQsIHF1YW50aXR5LCBpdGVtLnByb2R1Y3QucHJpY2UsIGl0ZW0ucXVhbnRpdHksIGl0ZW0uZGlzY291bnQsIGl0ZW0ucHJvZHVjdC5wcmljZSAqIHF1YW50aXR5LCAnbmV3JywgZGVsaXZlcnlEYXRlLCBub3RlcywgcGFyc2VJbnQoc2hpcHBpbmdBZGRyZXNzKSwgc2hpcHBpbmdBZGRyZXNzTmFtZSwgJ25ld2xvdCcpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvdElEICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxvdElEKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIHBhcnNlSW50KGxvdElEKSwgaXRlbS5pdGVtX2lkLCBxdWFudGl0eSwgaXRlbS5wcm9kdWN0LnByaWNlLCBpdGVtLnF1YW50aXR5LCBpdGVtLmRpc2NvdW50LCBpdGVtLnByb2R1Y3QucHJpY2UgKiBxdWFudGl0eSwgJ2VkaXRlZCcsIGRlbGl2ZXJ5RGF0ZSwgbm90ZXMsIHBhcnNlSW50KHNoaXBwaW5nQWRkcmVzcyksIHNoaXBwaW5nQWRkcmVzc05hbWUsICdlZGl0bG90Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBpbmRleDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGFsbElELmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnYm9ycmFyJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpc18uY2FydFNlcnZpY2UuYWRkVG9Mb3QoaXRlbS5wcm9kdWN0LCAwLCBpdGVtLnZhcmlhbnRfaWQsIGVsZW1lbnQsIDAsIDAsIDAsIDAsIDAsIDAsICdkZWxldGUnLCAwLCAnJywgMCwgJ2RlbGV0ZScsICdkZWxldGVsb3QnKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRoaXNfLmNhcnRTZXJ2aWNlLmxvYWRDYXJ0QnlUb2tlbih0aGlzXy5jYXJ0U2VydmljZS5nZXRDYXJ0VG9rZW4oKSk7IH0sIDMwMCAqIHkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ2xvdC1zYXZlZCcpOyB9LCAzMDAgKiB5KTtcclxuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgdGhpc18uY2FyZ2FuZG8gPSBmYWxzZSB9LCAzMDAgKiB5KTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzXy50b2FzdHJTZXJ2aWNlLnNob3coJ0xhIGNhbnRpZGFkIGRlIGxvcyBsb3RlcyBlcyBzdXBlcmlvciBhIGxhIGNhbnRpZGFkIGRlbCBwcm9kdWN0by4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcjYm90b25Cb3JyYXInLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcyk7XHJcbiAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5yZW1vdmUoKTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlTW9kYWwoaWQpIHtcclxuICAgICAgICAkKCcjJyArIGlkKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrU3RvY2soaXRlbSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiBpdGVtLnByb2R1Y3QudmFyaWFudHMpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0udmFyaWFudF9pZCA9PT0gdmFyaWFudC5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5zdG9jayA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0ucXVhbnRpdHkgPiB2YXJpYW50LnN0b2NrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTdG9jayA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhbnQuc3RvY2s7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBTb2xvIHNlIGVqZWN1dGEgc2kgbm8gc2UgY3VtcGxlIGxhIGNvbmRpY2nDs25cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVBbGxTdG9jaygpIHtcclxuICAgICAgICBjb25zdCBpdGVtczogYW55W10gPSBbXTtcclxuXHJcbiAgICAgICAgLy8gRGVmaW5lIGxhIHN1c2NyaXBjacOzbiBhbnRlcyBkZSB1c2FybGFcclxuXHJcbiAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5jYXJ0SXRlbXMuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIGl0ZW0ucHJvZHVjdC52YXJpYW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhcmlhbnRfaWQgPT09IHZhcmlhbnQuY29kZSAmJiAhdGhpcy5leGl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LnN0b2NrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcnRTZXJ2aWNlLmRlbGV0ZUNhcnRJdGVtKGl0ZW0sIGZhbHNlKTsgLy8gQm9ycmEgZWwgYXJ0w61jdWxvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5xdWFudGl0eSA+IHZhcmlhbnQuc3RvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IHZhcmlhbnQuc3RvY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudENvZGU6IHZhcmlhbnQuY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCAmJiAhdGhpcy5leGl0VXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgIC8vIERlc3VzY3LDrWJldGUgYW50ZXMgZGUgYWN0dWFsaXphclxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRBbGxUb0NhcnQoaXRlbXMpOyAgLy8gQWN0dWFsaXphIGVsIGNhcnJpdG9cclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3RvY2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhpdFVwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnVwZGF0ZUFsbFN0b2NrKCk7ICAvLyBWdWVsdmUgYSB2ZXJpZmljYXIgZWwgc3RvY2tcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgZ2V0VmFyaWFudHMgPSBwcm9kdWN0ID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSBwcm9kdWN0LnByb2R1Y3RcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0udmFyaWFudHMgJiYgaXRlbS52YXJpYW50cy5sZW5ndGggJiYgaXRlbS52YXJpYW50c1swXS5vcHRpb25zICYmIGl0ZW0udmFyaWFudHNbMF0ub3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IG9wdGlvbnMgPSBpdGVtLnZhcmlhbnRzWzBdLm9wdGlvbnNcclxuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiB0aGlzLnZhcmlhbnRzVG9TaG93LmZpbmQobmFtZSA9PiBvcHRpb24uaGFzT3duUHJvcGVydHkobmFtZSkpKVxyXG4gICAgICAgICAgICBsZXQgb3B0aW9uc01hcCA9IFtdXHJcbiAgICAgICAgICAgIG9wdGlvbnMubWFwKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goKGVudHJ5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbkFkZGVkID0gZmFsc2U7ICAvLyBWYXJpYWJsZSBwYXJhIGV2aXRhciBtw7psdGlwbGVzIGluc2VyY2lvbmVzXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbjIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uMi5jb2RlID09ICdDT0xPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbjIudmFsdWVzLmZvckVhY2goY29sb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvci5jb2RlID09IG9wdGlvbltlbnRyeV0gJiYgIW9wdGlvbkFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAucHVzaCh7IG5hbWU6IGVudHJ5LCB2YWx1ZTogb3B0aW9uW2VudHJ5XSwgaW1hZ2U6IGNvbG9yLmltYWdlLCBtb2JpbGVJbWFnZTogY29sb3IubW9iaWxlSW1hZ2UgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkFkZGVkID0gdHJ1ZTsgLy8gTWFyY2FyIG9wY2nDs24gYWdyZWdhZGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIG5vIHNlIGHDsWFkacOzIGxhIG9wY2nDs24gZGUgQ09MT1IsIG1hbmVqYXIgb3RyYXMgb3BjaW9uZXNcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbkFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3B0aW9ucy5mb3JFYWNoKG9wdGlvbjIgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24yLmNvZGUgIT09ICdDT0xPUicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zTWFwLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBlbnRyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbltlbnRyeV1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uQWRkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zTWFwO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlRGlzY291bnRNZXNzYWdlKHNhbGVwcmljZTogbnVtYmVyLCBwcmljZTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoaXNOYU4oc2FsZXByaWNlKSB8fCBpc05hTihwcmljZSkgfHwgc2FsZXByaWNlID49IHByaWNlIHx8IHNhbGVwcmljZSA8PSAwIHx8IHByaWNlIDw9IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGRpc2NvdW50UGVyY2VudGFnZSA9IE1hdGgucm91bmQoKChwcmljZSAtIHNhbGVwcmljZSkgLyBwcmljZSkgKiAxMDApO1xyXG5cclxuICAgICAgICBsZXQgZGlzY291bnRNZXNzYWdlID0gYCR7ZGlzY291bnRQZXJjZW50YWdlfSUgT0ZGYDtcclxuICAgICAgICByZXR1cm4gZGlzY291bnRNZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwudHlwZSA9PSAnYjJiJyA/IHRoaXMuY2hhbm5lbC53aG9sZXNhbGVyTWluaW11bVB1cmNoYXNlQW1vdW50IDogdGhpcy5jaGFubmVsLnJldGFpbGVyTWluaW11bVB1cmNoYXNlQW1vdW50XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGV4Y2VlZHNNaW5pbXVtQW1vdW50ID0gKHZhbHVlOiBudW1iZXIpID0+IHZhbHVlID49IHRoaXMuZ2V0TWluaW11bVB1cmNoYXNlQW1vdW50KCkgPyB0aGlzLnJlZGlyZWN0Q2hlY2tvdXQoKSA6IHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdxdWFudGl0eS1ub3QtZXhjZWVkZWQnLCB7IGFtb3VudDogdGhpcy5nZXRNaW5pbXVtUHVyY2hhc2VBbW91bnQoKSB9KVxyXG5cclxuXHJcbn1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iXX0=