@schneideress/dashboardframework 0.0.209 → 0.0.210

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.
@@ -155,7 +155,6 @@ var RAWidgetContainer = /** @class */ (function () {
155
155
  size.width = this.width;
156
156
  size.cellHeight = this.gridCellHeight;
157
157
  this.widgetElement.widgetResized(size);
158
- this.setTitleLineFor1xView();
159
158
  }
160
159
  };
161
160
  /**
@@ -441,6 +440,7 @@ var RAWidgetContainer = /** @class */ (function () {
441
440
  */
442
441
  function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
443
442
  var titleLineEnabled;
443
+ var _this = this;
444
444
  return tslib_1.__generator(this, function (_a) {
445
445
  switch (_a.label) {
446
446
  case 0:
@@ -468,6 +468,19 @@ var RAWidgetContainer = /** @class */ (function () {
468
468
  function (e) {
469
469
  widgetContainer.setEmptyState(e.detail);
470
470
  }));
471
+ widgetContainer.widgetElement.addEventListener('set-title-underline', (/**
472
+ * @param {?} e
473
+ * @return {?}
474
+ */
475
+ function (e) {
476
+ console.log("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
477
+ console.log(e);
478
+ console.log(e.details);
479
+ if (e.detail == true)
480
+ _this.enableTitleLine = true;
481
+ else
482
+ _this.enableTitleLine = _this.enableTitleLineActual;
483
+ }));
471
484
  titleLineEnabled = widgetContainer.widgetElement.titleLineEnabled();
472
485
  if (typeof (titleLineEnabled) != 'undefined') {
473
486
  this.enableTitleLine = titleLineEnabled;
@@ -515,7 +528,6 @@ var RAWidgetContainer = /** @class */ (function () {
515
528
  return [4 /*yield*/, widgetContainer.setDownloadIcon()];
516
529
  case 2:
517
530
  _a.sent();
518
- this.setTitleLineFor1xView();
519
531
  return [2 /*return*/];
520
532
  }
521
533
  });
@@ -1018,22 +1030,6 @@ var RAWidgetContainer = /** @class */ (function () {
1018
1030
  else
1019
1031
  this.noPadding = false;
1020
1032
  };
1021
- /**
1022
- * @private
1023
- * @return {?}
1024
- */
1025
- RAWidgetContainer.prototype.setTitleLineFor1xView = /**
1026
- * @private
1027
- * @return {?}
1028
- */
1029
- function () {
1030
- /** @type {?} */
1031
- var titleLineEnabled1x = this.widgetElement.titleLineEnabledFor1xView();
1032
- if (typeof (titleLineEnabled1x) != 'undefined' && titleLineEnabled1x && (this.height == 1 || this.width == 1))
1033
- this.enableTitleLine = true;
1034
- else
1035
- this.enableTitleLine = this.enableTitleLineActual;
1036
- };
1037
1033
  RAWidgetContainer.decorators = [
1038
1034
  { type: Component, args: [{
1039
1035
  selector: 'ra-widget-container',
@@ -1235,4 +1231,4 @@ if (false) {
1235
1231
  */
1236
1232
  RAWidgetContainer.prototype.raPermissionService;
1237
1233
  }
1238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBb0UsTUFBTSxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBZ0QsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwTCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2xGO0lBNkVFLDJCQUFvQixnQkFBb0MsRUFDOUMsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLE1BQWMsRUFDZCxRQUF5QixFQUN6QixRQUFtQixFQUNuQixtQkFBd0M7UUFObEQsaUJBaUJDO1FBakJtQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsV0FBTSxH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Qzs7SUFDbEMseUNBQXFDOztJQUNyQyw2Q0FBd0M7O0lBSXhDLHNDQUFpRTs7SUFDakUsMkNBQTJFOztJQUMzRSx3Q0FBcUU7O0lBQ3JFLHNDQUFpRTs7SUFFakUsNkNBQXNEOztJQUN0RCx5Q0FBMEM7O0lBQzFDLGlDQUF5Qjs7SUFDekIsZ0RBQTZEOztJQUM3RCxzQ0FBMkM7O0lBQzNDLGtDQUFxQzs7SUFDckMsbUNBQXVDOztJQUN2QywyQ0FBa0Q7O0lBR2xELDBDQUFxRDs7SUFDckQsc0NBQXlCOztJQUN6QixvREFBZ0Q7O0lBQ2hELDZDQUFxQzs7SUFDckMsdUNBQTJCOztJQUMzQix3Q0FBb0M7O0lBQ3BDLHlDQUF5Qjs7SUFDekIsMENBQTZCOztJQUM3QixvQ0FBdUI7O0lBQ3ZCLDBDQUFzQzs7SUFDdEMsOENBQWlDOztJQUNqQyxrREFBOEM7Ozs7O0lBTWxDLDZDQUE0Qzs7Ozs7SUFDdEQsdUNBQXNDOzs7OztJQUN0Qyw2Q0FBNEM7Ozs7O0lBQzVDLG1DQUFzQjs7Ozs7SUFDdEIscUNBQWlDOzs7OztJQUNqQyxxQ0FBMkI7Ozs7O0lBQzNCLGdEQUFnRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIE9uRGVzdHJveSwgTmdab25lLCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJhRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCwgUkFFdmVudEtleSB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBJQXBwQ29uZmlnLCBJV2lkZ2V0Q29uZmlnRmlsdGVyLCBJV2lkZ2V0SW5mbywgUkFEb3dubG9hZFR5cGUsIFJBRG93bmxvYWRPcHRpb24sIFJhV2lkZ2V0bG9ja1N0YXR1cywgV2lkZ2V0Vmlld1N0YXRlLCBJY29uZmlnQ2hhbmdlcyB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTmd4VWlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItbm90aWZpZXInO1xyXG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UsIFJBUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XHJcblxyXG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLXdpZGdldC1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUkFXaWRnZXRDb250YWluZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIHNob3dQYW5lbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBpc1dpZGdldExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgd2lkZ2V0RWxlbWVudDogYW55O1xyXG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlZDogYW55O1xyXG4gIHB1YmxpYyB3aWRnZXRIZWlnaHQ6IG51bWJlcjtcclxuICBwdWJsaWMgbG9ja0NsYXNzOiBzdHJpbmcgPSBcInVubG9ja2VkXCI7XHJcbiAgcHVibGljIGxvY2tTdGF0dXM6IFJhV2lkZ2V0bG9ja1N0YXR1cyA9IFJhV2lkZ2V0bG9ja1N0YXR1cy5VbmxvY2tlZDtcclxuICBwdWJsaWMgaXNEb3dubG9hZEljb25WaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzQ2hhcnREb3dubG9hZFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNHcmlkRG93bmxvYWRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRvd25sb2FkSWNvblR5cGU6IFJBRG93bmxvYWRUeXBlO1xyXG4gIHB1YmxpYyBlbmFibGVUaXRsZUxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNHbG9iYWxGaWx0ZXJBcHBsaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAgJztcclxuICBwdWJsaWMgdG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgbG9ja0RldGFpbHM6IGFueTtcclxuICBwdWJsaWMgbG9ja1RlbXBsYXRlSW5mbzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwdWJsaWMgZWRpdFRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBjb3B5VG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIG1vdmVUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZXhjZWxUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZGVsZXRlVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGVkaXRUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgY29weVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBtb3ZlVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGV4Y2VsVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGRlbGV0ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBlZGl0VG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgY29weVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIG1vdmVUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBleGNlbFRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGRlbGV0ZVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIHdpZGdldFNldHRpbmdzOiBhbnk7XHJcbiAgcHVibGljIG5vUGFkZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc01vdXNlSG92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1NldHRpbmdzTGluazogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnY3RsV2lkZ2V0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGN0bFdpZGdldDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd3aWRnZXREcm9wZG93bicsIHsgc3RhdGljOiBmYWxzZSB9KSB3aWRnZXREcm9wZG93bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd3Y1dyYXBwZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgd2NXcmFwcGVyOiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoJ3dpZGdldC1pbnN0YW5jZS1pZCcpIHdpZGdldEluc3RhbmNlSWQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dsb2JhbC1maWx0ZXInKSBnbG9iYWxGaWx0ZXI6IGFueTtcclxuICBASW5wdXQoJ2RhdGEnKSBkYXRhOiBhbnk7XHJcbiAgQElucHV0KCdldmVudC1idXMnKSByYURhc2hib2FyZEV2ZW50QnVzOiBSQURhc2hib2FyZEV2ZW50QnVzO1xyXG4gIEBJbnB1dCgnYXBwLWNvbmZpZycpIGFwcENvbmZpZzogSUFwcENvbmZpZztcclxuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZHRoOiBudW1iZXI7XHJcbiAgQElucHV0KCd3aWRnZXQtaGVpZ2h0JykgaGVpZ2h0OiBudW1iZXI7XHJcbiAgQElucHV0KCdncmlkLWNlbGwtaGVpZ2h0JykgZ3JpZENlbGxIZWlnaHQ6IG51bWJlcjtcclxuXHJcblxyXG4gIEBPdXRwdXQoKSB3aWRnZXREZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgcHVibGljIGxvY2tUaXRsZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc1dpZGdldFN0YXRlQXBwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB3aWRnZXRFbXB0eVN0YXRlOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZG9tUmVzaXplZDogYm9vbGVhbjtcclxuICBwdWJsaWMgbG9ja1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbG9ja2VkRmllbGRzOiBhbnk7XHJcbiAgcHVibGljIGRldGFpbFBhZ2VVcmw6IHN0cmluZztcclxuICBwdWJsaWMgYmFzZVVybDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc1dpZGdldE1nbW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIFdpZGdldERpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIGVuYWJsZVRpdGxlTGluZUFjdHVhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgnZG9tLXJlc2l6ZWQnKVxyXG4gIHNldCBzZXRSZXNpemVkKHJlc2l6ZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IFJhRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBSQVRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBub3RpZmllcjogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSByYVBlcm1pc3Npb25TZXJ2aWNlOiBSQVBlcm1pc3Npb25TZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2NsaWNrJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSAhPSAnZmFsIGZhLWVsbGlwc2lzLXYgd2lkZ2V0LW1lbnUtZWxsaXBzZScpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5XaWRnZXREaXNwbGF5TmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi4nICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUsIHRydWUpO1xyXG4gIH1cclxuICBnZXQgd2lkZ2V0Vmlld1N0YXRlKCkgeyByZXR1cm4gV2lkZ2V0Vmlld1N0YXRlOyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNXaWRnZXRNZ21udCA9IHRoaXMucmFQZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9uKCdyYS53aWRnZXRtYW5hZ2VtZW50Jyk7XHJcbiAgICBpZiAoY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZVdpdGhLZXkoUkFFdmVudC5Db25maWdDaGFuZ2VkLCBSQUV2ZW50S2V5LldpZGdldEluc3RhbmNlSWQsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQudG9TdHJpbmcoKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlRXZlbnRIYW5kbGVyKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIGNoYW5nZXMuZ2xvYmFsRmlsdGVyICYmIGNoYW5nZXMuZ2xvYmFsRmlsdGVyLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmdsb2JhbEZpbHRlci5wcmV2aW91c1ZhbHVlKSB7XHJcblxyXG4gICAgICBsZXQgZmlsdGVyT2JqID0gdGhpcy5nZXRQYXJzZWRDb25maWcodGhpcy5nbG9iYWxGaWx0ZXIpO1xyXG4gICAgICBpZiAoZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCAhPSBmaWx0ZXJPYmouV2lkZ2V0SW5zdGFuY2VJZClcclxuICAgICAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLndpZHRoICYmIGNoYW5nZXMud2lkdGguY3VycmVudFZhbHVlICE9IGNoYW5nZXMud2lkdGgucHJldmlvdXNWYWx1ZSB8fFxyXG4gICAgICAoY2hhbmdlcy5oZWlnaHQgJiYgY2hhbmdlcy5oZWlnaHQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuaGVpZ2h0LnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKSB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGxldCBzaXplOiBhbnkgPSB7fTtcclxuICAgICAgc2l6ZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgc2l6ZS53aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgIHNpemUuY2VsbEhlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC53aWRnZXRSZXNpemVkKHNpemUpO1xyXG4gICAgICB0aGlzLnNldFRpdGxlTGluZUZvcjF4VmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG1vdXNlSG92ZXIoaXNIb3ZlciA9IHRydWUpIHtcclxuICAgIHRoaXMuaXNNb3VzZUhvdmVyID0gaXNIb3ZlcjtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LmhvdmVyU3RhdHVzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuaG92ZXJTdGF0dXMoaXNIb3Zlcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk2Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgfSlcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGl0ZW0gPSBqUXVlcnkodGhpcy53Y1dyYXBwZXIubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnZ3JpZHN0ZXItaXRlbScpO1xyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnQ2hhbmdlZClcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFRvIEVkaXQgY3VycmVudCB3aWRnZXQgY29uZmlndXJhdGlvbiovXHJcbiAgcHVibGljIGVkaXRXaWRnZXQoKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyOiBJV2lkZ2V0Q29uZmlnRmlsdGVyO1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5nZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgbGV0IGNvbmZpZ0RhdGEgPSB0aGlzLndpZGdldEVsZW1lbnQuZ2V0Q29uZmlnRmlsdGVyKCk7XHJcbiAgICAgIGlmIChjb25maWdEYXRhKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyID0gY29uZmlnRGF0YTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHdpZGdldENvbmZpZ0ZpbHRlcikge1xyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEVkaXRDbGlja2VkLCB3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhID0gdGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcihmYWxzZSk7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0RWRpdENsaWNrZWQsIHdpZGdldENvbmZpZ0ZpbHRlckRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFRvIERlbGV0ZSBjdXJyZW50IHdpZGdldCBmcm9tIERPTSovXHJcbiAgcHVibGljIGRlbGV0ZVdpZGdldCgpIHtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubmd4U2VydmljZS5zdGFydCgpO1xyXG4gICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5kYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZVdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RvcCgpO1xyXG4gICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXREZWxldGVkLmVtaXQodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5ub3RpZmllci5ub3RpZnkoJ2Vycm9yJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdGYWlsZWRUb1JlbW92ZVdpZGdldCcpICsgXCIgIChcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi4nICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUsIHRydWUpICsgXCIpIVwiKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIE1vdmUgb3IgY2hhbmdlIHBvc2l0aW9uIGlmIGN1cnJlbnQgd2lkZ2V0IGNvbnRhaW5lciovXHJcbiAgcHVibGljIG1vdmVXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50Lk1vdmVXaWRnZXQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIC8vIHRoaXMuZGFzaGJvYXJkU2VydmljZS5tb3ZlV2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIENvcHkgQ3VycmVudCB3aWRnZXQgd2l0aCBzYW1lIGNvbmZpZ3VyYXRpb24qL1xyXG4gIHB1YmxpYyBjb3B5V2lkZ2V0KCkge1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5Db3B5V2lkZ2V0LCB0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAvL3RoaXMuZGFzaGJvYXJkU2VydmljZS5jb3B5V2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZpc2l0UGFnZSgpIHtcclxuICAgIHRoaXMuYmFzZVVybCA9IHRoaXMuZ2V0SG9zdFVybCgpO1xyXG4gICAgbGV0IHVybCA9IHRoaXMuYmFzZVVybCArIHRoaXMuZGV0YWlsUGFnZVVybDtcclxuICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mbyAmJiB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlUGFyYW1zKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMud2lkZ2V0RWxlbWVudC5nZXRQYWdlUGFyYW1zQ2xpY2tlZCgpO1xyXG4gICAgICAgIGlmIChwYXJhbXMpXHJcbiAgICAgICAgICB1cmwgPSB1cmwgKyAnPycgKyBwYXJhbXM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SG9zdFVybCgpIHtcclxuICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgKHdpbmRvdy5sb2NhdGlvbi5wb3J0ID8gJzonICsgd2luZG93LmxvY2F0aW9uLnBvcnQgOiAnJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uZmlnQ2hhbmdlRXZlbnRIYW5kbGVyKHdpZGdldEluZm8pIHtcclxuICAgIHRoaXMuZGF0YS53aWRnZXRJbmZvID0gd2lkZ2V0SW5mbztcclxuICAgIGlmICh0aGlzLmdyaWRDZWxsSGVpZ2h0ID4gMCkge1xyXG4gICAgICB0aGlzLmRhdGEud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhpcy53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcih0aGlzLmdlbmVyYXRlQ29uZmlnRmlsdGVyKHRydWUpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3dpZGdldCBmcmFtZXdvcmsgb3V0ZGF0ZWQsIHBsZWFzZSB1cGRhdGUgdG8gdmVyc2lvbiAwLjAuOTgnKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbmZpZ0ZpbHRlcihjb25maWdDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBhcHBDb25maWc6IHRoaXMuYXBwQ29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICB3aWRnZXRJbmZvOiB0aGlzLmRhdGEud2lkZ2V0SW5mbyxcclxuICAgICAgY29uZmlnOiB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgY29uZmlnQ2hhbmdlczogdGhpcy5nZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YTtcclxuICB9XHJcblxyXG5cclxuICAvKiogIFRvIGxvYWQgZXh0ZXJuYWwgY3VzdG9tIGVsZW1lbnQgdG8gdGhlIHdpZGdldCBjb250YWluZXIqL1xyXG4gIGFzeW5jIGxvYWRXaWRnZXQod2lkZ2V0SW5mbzogYW55KSB7XHJcbiAgICB3aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBjb25maWc6IHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSlcclxuICAgIH1cclxuICAgIGlmICh3aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0U2V0dGluZ3MgPSB0aGlzLmdldFBhcnNlZENvbmZpZyh3aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgdGhpcy5hcHBsYXlXaWRnZXRTZXR0aW5ncyh0aGlzLndpZGdldFNldHRpbmdzKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGV0YWlsUGFnZVVybCA9IHdpZGdldEluZm8uZGV0YWlsUGFnZVVybDtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXIgPSB0aGlzO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmxvYWRFeHRlcm5hbFNjcmlwdCh3aWRnZXRJbmZvLnNjcmlwdFVybCwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmxvYWRUcmFuc2xhdGlvbnModGhpcy5hcHBDb25maWcuYXBwTWFuYWdlbWVudEJhc2VVcmwsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldE5hbWUsIGZhbHNlKS50aGVuKCgpID0+IHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQod2lkZ2V0SW5mby5jdXN0b21UYWcpO1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LnNldEF0dHJpYnV0ZShcIndpZGdldC1pbnN0YW5jZS1pZFwiLCB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3dpZGdldGluaXRpYXRlZCcgKyB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdvbi1kYXRhLWxvYWQnLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsKVxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLnNob3dQYW5lbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLnNob3dQYW5lbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29uZmlnLWVkaXQtY2xpY2tlZCcsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXRDb250YWluZXIuZWRpdFdpZGdldCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2VuYWJsZS1kZWZhdWx0LXN0YXRlJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5zZXRFbXB0eVN0YXRlKGUuZGV0YWlsKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgdGl0bGVMaW5lRW5hYmxlZCA9IHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LnRpdGxlTGluZUVuYWJsZWQoKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAodGl0bGVMaW5lRW5hYmxlZCkgIT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRpdGxlTGluZSA9IHRpdGxlTGluZUVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmVBY3R1YWwgPSB0aXRsZUxpbmVFbmFibGVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVkaXRUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5lZGl0VG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb3B5VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvcHlUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29weVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb3B5VG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXhjZWxUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhjZWxUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKTtcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2VsVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5pc1dpZGdldExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5hcHBDb25maWcgPSB0aGlzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnQ2hhbmdlcyA9IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSk7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci53aWRnZXRJbmZvLndpZGdldE5hbWUgPSB3aWRnZXRJbmZvLndpZGdldE5hbWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHdpZGdldENvbnRhaW5lci5zZXRMb2NrKHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWcpO1xyXG4gICAgICAgICAgICBhd2FpdCB3aWRnZXRDb250YWluZXIuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGl0bGVMaW5lRm9yMXhWaWV3KCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmN0bFdpZGdldC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMud2lkZ2V0RWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipUbyBzZXQgRGVmYXVsdCBTdGF0ZSBmb3IgdGhlIHdpZGdldCB3aGVuIGl0IGlzIG5vdCBjb25maWd1cmVkICovXHJcbiAgc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm86IElXaWRnZXRJbmZvLCBmb3JjZUVuYWJsZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoKHdpZGdldEluZm8uc2hvd0RlZmF1bHRTdGF0ZSAmJiAod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyA9PSBcIlwiIHx8IE9iamVjdC5rZXlzKEpTT04ucGFyc2Uod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZykpLmxlbmd0aCA9PSAwKSkgfHwgKGZvcmNlRW5hYmxlKSkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gV2lkZ2V0Vmlld1N0YXRlLmVtcHR5Q29uZmlnLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gJyc7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlRvIGNvbmZpZ3VyZSBlbXB0eSBzdGF0ZSBmb3IgdGhlIHdpZGdldCAgKi9cclxuICBzZXRFbXB0eVN0YXRlKHdpZGdldFN0YXRlOiBhbnkpIHtcclxuICAgIHRoaXMud2lkZ2V0RW1wdHlTdGF0ZSA9IHdpZGdldFN0YXRlLndpZGdldFZpZXdTdGF0ZTtcclxuICAgIHRoaXMuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkID0gd2lkZ2V0U3RhdGUuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkO1xyXG4gICAgaWYgKHdpZGdldFN0YXRlICE9IFdpZGdldFZpZXdTdGF0ZS5ub3JtYWwpIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh3aWRnZXRTdGF0ZSkge1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lbXB0eUNvbmZpZzpcclxuICAgICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVtcHR5RGF0YTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZXJyb3I6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IGNvbmZpZ0NoYW5nZXMgPSA8SWNvbmZpZ0NoYW5nZXM+e1xyXG4gICAgICBpc0NvbmZpZ1VwZGF0ZWQ6IGNvbmZpZ0NoYW5nZWQsXHJcbiAgICAgIHVwZGF0ZWRDb25maWdQcm9wZXJ0eTogW11cclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWdDaGFuZ2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJlZnJlc2ggd2lkZ2V0IG9uIGlucHV0IGNvbmZpZyBjaGFuZ2VzICovXHJcbiAgYXN5bmMgcmVmcmVzaFdpZGdldCh3aWRnZXRJbmZvOiBJV2lkZ2V0SW5mbywgY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLldpZGdldERpc3BsYXlOYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLicgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSwgdHJ1ZSk7XHJcbiAgICB3aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuXHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBjb25maWc6IHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIGFwcENvbmZpZzogdGhpcy5hcHBDb25maWcsXHJcbiAgICAgIHdpZGdldEluZm86IHdpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aWRnZXRDb250YWluZXJDb250ZXh0LmlzV2lkZ2V0TG9hZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcih3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RWxlbWVudC5sb2FkQ29udGVudCh3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNldExvY2sod2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZyk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW91c2VPdmVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMudG9vbFRpcFZhbHVlID0gJyAnO1xyXG4gICAgdGhpcy50b29sVGlwV2lkdGggPSAnMHB4JztcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGVsZW1lbnQub2Zmc2V0V2lkdGggPCBlbGVtZW50LnNjcm9sbFdpZHRoKSB7XHJcbiAgICAgIHRoaXMudG9vbFRpcFZhbHVlID0gZWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzMwMHB4JztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICcwcHgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRMb2NrKGNvbmZpZzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmxvY2tUZW1wbGF0ZUluZm8gPSB0aGlzLndpZGdldEVsZW1lbnQubG9hZExvY2tJbmZvKCk7XHJcbiAgICB2YXIgY29uZmlnT2JqOiBhbnk7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGNvbmZpZ09iaiA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgaWYgKGNvbmZpZ09iaiAmJiBjb25maWdPYmouTG9ja3MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzRGF0ZXNMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzUGFydGljaXBhbnRMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzU291cmNlTG9ja2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gW107XHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzRGF0ZUxvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNEYXRlc0xvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRlUmFuZ2UnKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1BhcnRpY2lwYW50TG9ja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGl2aXNpb25Pckdyb3Vwb3JTaXRlJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1NvdXJjZUxvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRhU3RyZWFtJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXREb3dubG9hZEljb24oKSB7XHJcbiAgICBsZXQgZG93bmxvYWRUeXBlID0gYXdhaXQgdGhpcy53aWRnZXRFbGVtZW50LmdldERvd25sb2FkVHlwZSgpO1xyXG4gICAgdGhpcy5kb3dubG9hZEljb25UeXBlID0gZG93bmxvYWRUeXBlO1xyXG4gICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSBmYWxzZTtcclxuICAgIGlmIChkb3dubG9hZFR5cGUgIT0gUkFEb3dubG9hZFR5cGUuTm9uZSkge1xyXG4gICAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmlzV2lkZ2V0TWdtbnQgJiYgIXRoaXMuZGV0YWlsUGFnZVVybCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzTGluayA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvd25sb2FkVHlwZSA9PSBSQURvd25sb2FkVHlwZS5DaGFydCkge1xyXG4gICAgICB0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuR3JpZCkge1xyXG4gICAgICB0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvd25sb2FkSWNvbkNsaWNrZWQodHlwZTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBcIkNTVlwiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLkNTVik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQTkdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5QTkcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUERGXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uUERGKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlNWR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlNWRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJKUEVHXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uSlBFRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZU1lbnUoKSB7XHJcbiAgICBqUXVlcnkoJyNyYS1kYi13aWRnZXQtbWVudScpLnJlbW92ZSgpO1xyXG4gIH1cclxuICAvKipTaG93IGRyb3Bkb3duIG9uIGdlYXIgaWNvbiBjbGljayAgKi9cclxuICBwdWJsaWMgc2hvd0Ryb3BEb3duKGU6IGFueSkge1xyXG4gICAgdGhpcy5zZXREb3dubG9hZEljb24oKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0UG9zID0gZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGxldCBzdHlsZTogc3RyaW5nID0gXCJwb3NpdGlvbjpmaXhlZDt0b3A6XCIgKyAodGFyZ2V0UG9zLnkgKyAxNSkgKyAncHgnICsgJztsZWZ0OicgKyAoZS5wYWdlWCAtIDEyMikgKyAncHg7ei1pbmRleDoxMDAwOyc7XHJcbiAgICAgIGxldCBodG1sID0gdGhpcy5nZXRDb250ZW54dEh0bWwoc3R5bGUpO1xyXG5cclxuICAgICAgalF1ZXJ5KGh0bWwpLmFwcGVuZFRvKCdib2R5Jyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0VkaXRXaWRnZXQnLCB0aGlzLmVkaXRXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NDb3B5V2lkZ2V0JywgdGhpcy5jb3B5V2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djTW92ZVdpZGdldCcsIHRoaXMubW92ZVdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1dpZGdldERlbGV0ZScsIHRoaXMuZGVsZXRlV2lkZ2V0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kZXRhaWxQYWdlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1Zpc2l0V2lkZ2V0JywgdGhpcy52aXNpdFBhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRQbmcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdQTkcnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRKcGcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdKUEVHJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkUGRmJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnUERGJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkU3ZnJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnU1ZHJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkRXhjZWwnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdDU1YnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmEtZGItd2lkZ2V0LW1lbnUnKS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51ID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEV2ZW50TGlzdGVuZXIoaWQ6IHN0cmluZywgZXZlbnQ6IGFueSwgcGFyYW1zPzogYW55KSB7XHJcbiAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgZXZlbnQuY2FsbCh0aGlzLCBwYXJhbXMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29udGVueHRIdG1sKHN0eWxlOiBzdHJpbmcpIHtcclxuICAgIGxldCBodG1sOiBzdHJpbmcgPSAnPGRpdiBpZD1cInJhLWRiLXdpZGdldC1tZW51XCInICsgJ3N0eWxlPVwiJyArIHN0eWxlICsgJ1wiIGNsYXNzPVwiZG93bmxvYWQtY29udGVudCBkcm9wZG93bi1jb250ZW50IHdpZGdldC1jb25maWctaXRlbSBkcm9wZG93bi1jbGlja1wiIHN0eWxlPVwiei1pbmRleDogMTAwMjtcIj4nO1xyXG5cclxuICAgIGxldCBzZXR0aW5ncyA9ICcnO1xyXG4gICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRWRpdFdpZGdldCcsICdmYWwgZmEtZWRpdCcsIHRoaXMuZWRpdFRleHQpO1xyXG4gICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djQ29weVdpZGdldCcsICdmYWwgZmEtY29weScsIHRoaXMuY29weVRleHQpO1xyXG4gICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djTW92ZVdpZGdldCcsICdmYWwgZmEtYXJyb3dzLWFsdCcsIHRoaXMubW92ZVRleHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGV0YWlsUGFnZVVybCkge1xyXG4gICAgICBzZXR0aW5ncyArPSAnPGEgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMHB4O2FsaWduLWl0ZW1zOiBjZW50ZXI7YWxpZ24tY29udGVudDogY2VudGVyOyBkaXNwbGF5OiBmbGV4O1wiIGlkPVwid2NWaXNpdFdpZGdldFwiPic7XHJcbiAgICAgIHNldHRpbmdzICs9ICc8aSBzdHlsZT1cInBhZGRpbmctbGVmdDogNHB4O2ZvbnQtc2l6ZTogMjdweCAhaW1wb3J0YW50O1wiIGNsYXNzPVwiZmFsIGZhLWFuZ2xlLXJpZ2h0XCI+PC9pPiAnO1xyXG4gICAgICBzZXR0aW5ncyArPSAnPHNwYW4gc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDExcHg7bWFyZ2luLXRvcDogMnB4O1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA2cHg7XCI+JztcclxuICAgICAgc2V0dGluZ3MgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnZpc2l0cGFnZScpO1xyXG4gICAgICBzZXR0aW5ncyArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGV0YWlsUGFnZVVybCB8fCB0aGlzLmlzV2lkZ2V0TWdtbnQpIHtcclxuICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT1cImNvbG9yOiAjOUZBMEE0O2ZvbnQtc2l6ZTogMTJweDtwYWRkaW5nLXRvcDogOHB4O3BhZGRpbmctbGVmdDogMTJweDtcIj4nO1xyXG4gICAgICBodG1sICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zZXR0aW5ncycpICsgJzwvZGl2Pic7XHJcbiAgICAgIGh0bWwgKz0gc2V0dGluZ3M7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5nZXRIcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSkge1xyXG4gICAgICBpZiAodGhpcy5kZXRhaWxQYWdlVXJsIHx8IHRoaXMuaXNXaWRnZXRNZ21udClcclxuICAgICAgICBodG1sICs9ICc8c3BhbiBzdHlsZT1cImNvbG9yOiAjOUZBMEE0O2ZvbnQtc2l6ZTogMTJweDtcIj4nO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaHRtbCArPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogIzlGQTBBNDtmb250LXNpemU6IDEycHg7cGFkZGluZy10b3A6NXB4O2Rpc3BsYXk6YmxvY2s7XCI+JztcclxuXHJcbiAgICAgIGh0bWwgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRvd25sb2FkcycpO1xyXG4gICAgICBodG1sICs9ICc8L3NwYW4+JztcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6IDEwcHg7XCIgY2xhc3M9XCJjaGFydERvd25sb2FkXCI+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBuZycsICdmYWwgZmEtZmlsZS1pbWFnZScsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5wbmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRKcGcnLCAnZmFsIGZhLWZpbGUtaW1hZ2UnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uanBlZycpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBkZicsICdmYWwgZmEtZmlsZS1wZGYnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ucGRmJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkU3ZnJywgJ2ZhbCBmYS1maWxlLWFsdCcsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zdmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPVwiZ3JpZERvd25sb2FkXCI+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZEV4Y2VsJywgJ2ZhbCBmYS1kb3dubG9hZCcsIHRoaXMuZXhjZWxUZXh0KTtcclxuICAgICAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgJiYgdGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5nZXRIcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBodG1sICs9ICc8YSBpZD1cIndjV2lkZ2V0RGVsZXRlXCI+PGkgY2xhc3M9XCJmYWwgZmEtdGltZXNcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogM3B4O2NvbG9yOiByZWQ7XCI+PC9pPjxzcGFuPic7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5kZWxldGVUZXh0O1xyXG4gICAgICBodG1sICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICB9XHJcblxyXG4gICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgIHJldHVybiBodG1sO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIcigpIHtcclxuICAgIHJldHVybiAnPGhyIGNsYXNzPVwiaHJcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDVweDttYXJnaW4tYm90dG9tOiA1cHg7XCI+JztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHRtbEZvckJ1dHRvbihpZDogc3RyaW5nLCBmb250Q2xhc3M6IHN0cmluZywgdGV4dDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaHRtbCA9ICc8YSBpZD1cIicgKyBpZCArICdcIj48aSBzdHlsZT1cIndpZHRoOjE2cHhcIiBjbGFzcz1cIicgKyBmb250Q2xhc3MgKyAnXCI+PC9pPiA8c3BhbiBzdHlsZT1cInBhZGRpbmctbGVmdDogNnB4O1wiPic7XHJcbiAgICBodG1sICs9IHRleHQ7XHJcbiAgICBodG1sICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICByZXR1cm4gaHRtbDtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGdldFBhcnNlZENvbmZpZyhjb25maWc6IGFueSkge1xyXG4gICAgbGV0IHBhcnNlZENvbmZpZzogYW55O1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcGFyc2VkQ29uZmlnID0gSlNPTi5wYXJzZShjb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICBwYXJzZWRDb25maWcgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZENvbmZpZztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbGF5V2lkZ2V0U2V0dGluZ3Moc2V0dGluZ3M6IGFueSkge1xyXG4gICAgaWYgKHNldHRpbmdzLk5vUGFkZGluZylcclxuICAgICAgdGhpcy5ub1BhZGRpbmcgPSB0cnVlXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubm9QYWRkaW5nID0gZmFsc2VcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGl0bGVMaW5lRm9yMXhWaWV3KCkge1xyXG4gICAgdmFyIHRpdGxlTGluZUVuYWJsZWQxeCA9IHRoaXMud2lkZ2V0RWxlbWVudC50aXRsZUxpbmVFbmFibGVkRm9yMXhWaWV3KCk7XHJcbiAgICBpZiAodHlwZW9mICh0aXRsZUxpbmVFbmFibGVkMXgpICE9ICd1bmRlZmluZWQnICYmIHRpdGxlTGluZUVuYWJsZWQxeCAmJiAodGhpcy5oZWlnaHQgPT0gMSB8fCB0aGlzLndpZHRoID09IDEpKVxyXG4gICAgICB0aGlzLmVuYWJsZVRpdGxlTGluZSA9IHRydWVcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmUgPSB0aGlzLmVuYWJsZVRpdGxlTGluZUFjdHVhbDtcclxuICB9XHJcbn1cclxuIl19
1234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEud2lkZ2V0LmNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS13aWRnZXQtY29udGFpbmVyL3JhLndpZGdldC5jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBb0UsTUFBTSxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUN4TSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZELE9BQU8sRUFBZ0QsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBa0IsTUFBTSwrQkFBK0IsQ0FBQztBQUNwTCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2xGO0lBNkVFLDJCQUFvQixnQkFBb0MsRUFDOUMsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLE1BQWMsRUFDZCxRQUF5QixFQUN6QixRQUFtQixFQUNuQixtQkFBd0M7UUFObEQsaUJBaUJDO1FBakJtQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7UUFDcEMsV0FBTSxH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OztJQUNyQyw2Q0FBd0M7O0lBSXhDLHNDQUFpRTs7SUFDakUsMkNBQTJFOztJQUMzRSx3Q0FBcUU7O0lBQ3JFLHNDQUFpRTs7SUFFakUsNkNBQXNEOztJQUN0RCx5Q0FBMEM7O0lBQzFDLGlDQUF5Qjs7SUFDekIsZ0RBQTZEOztJQUM3RCxzQ0FBMkM7O0lBQzNDLGtDQUFxQzs7SUFDckMsbUNBQXVDOztJQUN2QywyQ0FBa0Q7O0lBR2xELDBDQUFxRDs7SUFDckQsc0NBQXlCOztJQUN6QixvREFBZ0Q7O0lBQ2hELDZDQUFxQzs7SUFDckMsdUNBQTJCOztJQUMzQix3Q0FBb0M7O0lBQ3BDLHlDQUF5Qjs7SUFDekIsMENBQTZCOztJQUM3QixvQ0FBdUI7O0lBQ3ZCLDBDQUFzQzs7SUFDdEMsOENBQWlDOztJQUNqQyxrREFBOEM7Ozs7O0lBTWxDLDZDQUE0Qzs7Ozs7SUFDdEQsdUNBQXNDOzs7OztJQUN0Qyw2Q0FBNEM7Ozs7O0lBQzVDLG1DQUFzQjs7Ozs7SUFDdEIscUNBQWlDOzs7OztJQUNqQyxxQ0FBMkI7Ozs7O0lBQzNCLGdEQUFnRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIE9uRGVzdHJveSwgTmdab25lLCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJhRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSQURhc2hib2FyZEV2ZW50QnVzIH0gZnJvbSAnLi4vcmEuZGFzaGJhcmQuZXZlbnQuYnVzJztcclxuaW1wb3J0IHsgUkFFdmVudCwgUkFFdmVudEtleSB9IGZyb20gJy4uL3JhLmV2ZW50LmVudW0nO1xyXG5pbXBvcnQgeyBJQXBwQ29uZmlnLCBJV2lkZ2V0Q29uZmlnRmlsdGVyLCBJV2lkZ2V0SW5mbywgUkFEb3dubG9hZFR5cGUsIFJBRG93bmxvYWRPcHRpb24sIFJhV2lkZ2V0bG9ja1N0YXR1cywgV2lkZ2V0Vmlld1N0YXRlLCBJY29uZmlnQ2hhbmdlcyB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTmd4VWlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItbm90aWZpZXInO1xyXG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UsIFJBUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XHJcblxyXG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhLXdpZGdldC1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYS53aWRnZXQuY29udGFpbmVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUkFXaWRnZXRDb250YWluZXIgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIHNob3dQYW5lbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBpc1dpZGdldExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgd2lkZ2V0RWxlbWVudDogYW55O1xyXG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlZDogYW55O1xyXG4gIHB1YmxpYyB3aWRnZXRIZWlnaHQ6IG51bWJlcjtcclxuICBwdWJsaWMgbG9ja0NsYXNzOiBzdHJpbmcgPSBcInVubG9ja2VkXCI7XHJcbiAgcHVibGljIGxvY2tTdGF0dXM6IFJhV2lkZ2V0bG9ja1N0YXR1cyA9IFJhV2lkZ2V0bG9ja1N0YXR1cy5VbmxvY2tlZDtcclxuICBwdWJsaWMgaXNEb3dubG9hZEljb25WaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzQ2hhcnREb3dubG9hZFZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNHcmlkRG93bmxvYWRWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGRvd25sb2FkSWNvblR5cGU6IFJBRG93bmxvYWRUeXBlO1xyXG4gIHB1YmxpYyBlbmFibGVUaXRsZUxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNHbG9iYWxGaWx0ZXJBcHBsaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAgJztcclxuICBwdWJsaWMgdG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgbG9ja0RldGFpbHM6IGFueTtcclxuICBwdWJsaWMgbG9ja1RlbXBsYXRlSW5mbzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwdWJsaWMgZWRpdFRvb2xUaXBWYWx1ZTogc3RyaW5nID0gJyAnO1xyXG4gIHB1YmxpYyBjb3B5VG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIG1vdmVUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZXhjZWxUb29sVGlwVmFsdWU6IHN0cmluZyA9ICcgJztcclxuICBwdWJsaWMgZGVsZXRlVG9vbFRpcFZhbHVlOiBzdHJpbmcgPSAnICc7XHJcbiAgcHVibGljIGVkaXRUZXh0OiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgY29weVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBtb3ZlVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGV4Y2VsVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIGRlbGV0ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBlZGl0VG9vbFRpcFdpZHRoOiBzdHJpbmcgPSAnMHB4JztcclxuICBwdWJsaWMgY29weVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIG1vdmVUb29sVGlwV2lkdGg6IHN0cmluZyA9ICcwcHgnO1xyXG4gIHB1YmxpYyBleGNlbFRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIGRlbGV0ZVRvb2xUaXBXaWR0aDogc3RyaW5nID0gJzBweCc7XHJcbiAgcHVibGljIHdpZGdldFNldHRpbmdzOiBhbnk7XHJcbiAgcHVibGljIG5vUGFkZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc01vdXNlSG92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd1NldHRpbmdzTGluazogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnY3RsV2lkZ2V0JywgeyBzdGF0aWM6IGZhbHNlIH0pIGN0bFdpZGdldDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd3aWRnZXREcm9wZG93bicsIHsgc3RhdGljOiBmYWxzZSB9KSB3aWRnZXREcm9wZG93bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzZWFyY2hJbnB1dDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd3Y1dyYXBwZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgd2NXcmFwcGVyOiBFbGVtZW50UmVmO1xyXG5cclxuICBASW5wdXQoJ3dpZGdldC1pbnN0YW5jZS1pZCcpIHdpZGdldEluc3RhbmNlSWQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2dsb2JhbC1maWx0ZXInKSBnbG9iYWxGaWx0ZXI6IGFueTtcclxuICBASW5wdXQoJ2RhdGEnKSBkYXRhOiBhbnk7XHJcbiAgQElucHV0KCdldmVudC1idXMnKSByYURhc2hib2FyZEV2ZW50QnVzOiBSQURhc2hib2FyZEV2ZW50QnVzO1xyXG4gIEBJbnB1dCgnYXBwLWNvbmZpZycpIGFwcENvbmZpZzogSUFwcENvbmZpZztcclxuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZHRoOiBudW1iZXI7XHJcbiAgQElucHV0KCd3aWRnZXQtaGVpZ2h0JykgaGVpZ2h0OiBudW1iZXI7XHJcbiAgQElucHV0KCdncmlkLWNlbGwtaGVpZ2h0JykgZ3JpZENlbGxIZWlnaHQ6IG51bWJlcjtcclxuXHJcblxyXG4gIEBPdXRwdXQoKSB3aWRnZXREZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgcHVibGljIGxvY2tUaXRsZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc1dpZGdldFN0YXRlQXBwbGljYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB3aWRnZXRFbXB0eVN0YXRlOiBzdHJpbmcgPSAnJztcclxuICBwdWJsaWMgZG9tUmVzaXplZDogYm9vbGVhbjtcclxuICBwdWJsaWMgbG9ja1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbG9ja2VkRmllbGRzOiBhbnk7XHJcbiAgcHVibGljIGRldGFpbFBhZ2VVcmw6IHN0cmluZztcclxuICBwdWJsaWMgYmFzZVVybDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc1dpZGdldE1nbW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIFdpZGdldERpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIGVuYWJsZVRpdGxlTGluZUFjdHVhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgnZG9tLXJlc2l6ZWQnKVxyXG4gIHNldCBzZXRSZXNpemVkKHJlc2l6ZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IFJhRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBSQVRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBub3RpZmllcjogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSByYVBlcm1pc3Npb25TZXJ2aWNlOiBSQVBlcm1pc3Npb25TZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2NsaWNrJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZS50YXJnZXQuY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgaWYgKGUudGFyZ2V0LmNsYXNzTmFtZSAhPSAnZmFsIGZhLWVsbGlwc2lzLXYgd2lkZ2V0LW1lbnUtZWxsaXBzZScpIHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5XaWRnZXREaXNwbGF5TmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi4nICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUsIHRydWUpO1xyXG4gIH1cclxuICBnZXQgd2lkZ2V0Vmlld1N0YXRlKCkgeyByZXR1cm4gV2lkZ2V0Vmlld1N0YXRlOyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNXaWRnZXRNZ21udCA9IHRoaXMucmFQZXJtaXNzaW9uU2VydmljZS5oYXNQZXJtaXNzaW9uKCdyYS53aWRnZXRtYW5hZ2VtZW50Jyk7XHJcbiAgICBpZiAoY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZVdpdGhLZXkoUkFFdmVudC5Db25maWdDaGFuZ2VkLCBSQUV2ZW50S2V5LldpZGdldEluc3RhbmNlSWQsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQudG9TdHJpbmcoKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29uZmlnQ2hhbmdlRXZlbnRIYW5kbGVyKGUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50ICYmIGNoYW5nZXMuZ2xvYmFsRmlsdGVyICYmIGNoYW5nZXMuZ2xvYmFsRmlsdGVyLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmdsb2JhbEZpbHRlci5wcmV2aW91c1ZhbHVlKSB7XHJcblxyXG4gICAgICBsZXQgZmlsdGVyT2JqID0gdGhpcy5nZXRQYXJzZWRDb25maWcodGhpcy5nbG9iYWxGaWx0ZXIpO1xyXG4gICAgICBpZiAoZmlsdGVyT2JqLldpZGdldEluc3RhbmNlSWQpIHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCAhPSBmaWx0ZXJPYmouV2lkZ2V0SW5zdGFuY2VJZClcclxuICAgICAgICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoV2lkZ2V0KHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLndpZHRoICYmIGNoYW5nZXMud2lkdGguY3VycmVudFZhbHVlICE9IGNoYW5nZXMud2lkdGgucHJldmlvdXNWYWx1ZSB8fFxyXG4gICAgICAoY2hhbmdlcy5oZWlnaHQgJiYgY2hhbmdlcy5oZWlnaHQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuaGVpZ2h0LnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuaW52b2tlV2lkZ2V0UmVzaXplZEV2ZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnZva2VXaWRnZXRSZXNpemVkRXZlbnQoKSB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGxldCBzaXplOiBhbnkgPSB7fTtcclxuICAgICAgc2l6ZS5oZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgc2l6ZS53aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgIHNpemUuY2VsbEhlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC53aWRnZXRSZXNpemVkKHNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG1vdXNlSG92ZXIoaXNIb3ZlciA9IHRydWUpIHtcclxuICAgIHRoaXMuaXNNb3VzZUhvdmVyID0gaXNIb3ZlcjtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRFbGVtZW50KSB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy53aWRnZXRFbGVtZW50LmhvdmVyU3RhdHVzID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuaG92ZXJTdGF0dXMoaXNIb3Zlcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCd3aWRnZXQgZnJhbWV3b3JrIG91dGRhdGVkLCBwbGVhc2UgdXBkYXRlIHRvIHZlcnNpb24gMC4wLjk2Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRXaWRnZXQodGhpcy5kYXRhLndpZGdldEluZm8pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgfSlcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgbGV0IGl0ZW0gPSBqUXVlcnkodGhpcy53Y1dyYXBwZXIubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnZ3JpZHN0ZXItaXRlbScpO1xyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpdGVtLmJpbmQoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmdyaWRzdGVySXRlbUVudGVyID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVudSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnQ2hhbmdlZClcclxuICAgICAgdGhpcy5jb25maWdDaGFuZ2VkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFRvIEVkaXQgY3VycmVudCB3aWRnZXQgY29uZmlndXJhdGlvbiovXHJcbiAgcHVibGljIGVkaXRXaWRnZXQoKSB7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyOiBJV2lkZ2V0Q29uZmlnRmlsdGVyO1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5nZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgbGV0IGNvbmZpZ0RhdGEgPSB0aGlzLndpZGdldEVsZW1lbnQuZ2V0Q29uZmlnRmlsdGVyKCk7XHJcbiAgICAgIGlmIChjb25maWdEYXRhKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyID0gY29uZmlnRGF0YTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHdpZGdldENvbmZpZ0ZpbHRlcikge1xyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEVkaXRDbGlja2VkLCB3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhID0gdGhpcy5nZW5lcmF0ZUNvbmZpZ0ZpbHRlcihmYWxzZSk7XHJcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0RWRpdENsaWNrZWQsIHdpZGdldENvbmZpZ0ZpbHRlckRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFRvIERlbGV0ZSBjdXJyZW50IHdpZGdldCBmcm9tIERPTSovXHJcbiAgcHVibGljIGRlbGV0ZVdpZGdldCgpIHtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQubmd4U2VydmljZS5zdGFydCgpO1xyXG4gICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5kYXNoYm9hcmRTZXJ2aWNlLmRlbGV0ZVdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICB3aWRnZXRDb250YWluZXJDb250ZXh0Lm5neFNlcnZpY2Uuc3RvcCgpO1xyXG4gICAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXREZWxldGVkLmVtaXQodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC5ub3RpZmllci5ub3RpZnkoJ2Vycm9yJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdGYWlsZWRUb1JlbW92ZVdpZGdldCcpICsgXCIgIChcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi4nICsgdGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0VGl0bGUsIHRydWUpICsgXCIpIVwiKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIE1vdmUgb3IgY2hhbmdlIHBvc2l0aW9uIGlmIGN1cnJlbnQgd2lkZ2V0IGNvbnRhaW5lciovXHJcbiAgcHVibGljIG1vdmVXaWRnZXQoKSB7XHJcbiAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50Lk1vdmVXaWRnZXQsIHRoaXMuZGF0YS53aWRnZXRJbmZvKTtcclxuICAgIC8vIHRoaXMuZGFzaGJvYXJkU2VydmljZS5tb3ZlV2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIENvcHkgQ3VycmVudCB3aWRnZXQgd2l0aCBzYW1lIGNvbmZpZ3VyYXRpb24qL1xyXG4gIHB1YmxpYyBjb3B5V2lkZ2V0KCkge1xyXG4gICAgdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnB1Ymxpc2goUkFFdmVudC5Db3B5V2lkZ2V0LCB0aGlzLmRhdGEud2lkZ2V0SW5mbyk7XHJcbiAgICAvL3RoaXMuZGFzaGJvYXJkU2VydmljZS5jb3B5V2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZpc2l0UGFnZSgpIHtcclxuICAgIHRoaXMuYmFzZVVybCA9IHRoaXMuZ2V0SG9zdFVybCgpO1xyXG4gICAgbGV0IHVybCA9IHRoaXMuYmFzZVVybCArIHRoaXMuZGV0YWlsUGFnZVVybDtcclxuICAgIGlmICh0aGlzLmRhdGEud2lkZ2V0SW5mbyAmJiB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRTZXR0aW5ncykge1xyXG4gICAgICB0aGlzLndpZGdldFNldHRpbmdzID0gdGhpcy5nZXRQYXJzZWRDb25maWcodGhpcy5kYXRhLndpZGdldEluZm8ud2lkZ2V0U2V0dGluZ3MpO1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRTZXR0aW5ncy5jdXN0b21QYWdlUGFyYW1zKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMud2lkZ2V0RWxlbWVudC5nZXRQYWdlUGFyYW1zQ2xpY2tlZCgpO1xyXG4gICAgICAgIGlmIChwYXJhbXMpXHJcbiAgICAgICAgICB1cmwgPSB1cmwgKyAnPycgKyBwYXJhbXM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxvY2F0aW9uLmhyZWYgPSB1cmw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SG9zdFVybCgpIHtcclxuICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgKHdpbmRvdy5sb2NhdGlvbi5wb3J0ID8gJzonICsgd2luZG93LmxvY2F0aW9uLnBvcnQgOiAnJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29uZmlnQ2hhbmdlRXZlbnRIYW5kbGVyKHdpZGdldEluZm8pIHtcclxuICAgIHRoaXMuZGF0YS53aWRnZXRJbmZvID0gd2lkZ2V0SW5mbztcclxuICAgIGlmICh0aGlzLmdyaWRDZWxsSGVpZ2h0ID4gMCkge1xyXG4gICAgICB0aGlzLmRhdGEud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSB0aGlzLmdyaWRDZWxsSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RWxlbWVudCAmJiB0eXBlb2YgKHRoaXMud2lkZ2V0RWxlbWVudC5zZXRDb25maWdGaWx0ZXIpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhpcy53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcih0aGlzLmdlbmVyYXRlQ29uZmlnRmlsdGVyKHRydWUpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3dpZGdldCBmcmFtZXdvcmsgb3V0ZGF0ZWQsIHBsZWFzZSB1cGRhdGUgdG8gdmVyc2lvbiAwLjAuOTgnKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVmcmVzaFdpZGdldCh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbmZpZ0ZpbHRlcihjb25maWdDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGxldCB3aWRnZXRDb25maWdGaWx0ZXJEYXRhID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBhcHBDb25maWc6IHRoaXMuYXBwQ29uZmlnLFxyXG4gICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZ2xvYmFsRmlsdGVyLFxyXG4gICAgICB3aWRnZXRJbmZvOiB0aGlzLmRhdGEud2lkZ2V0SW5mbyxcclxuICAgICAgY29uZmlnOiB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyxcclxuICAgICAgY29uZmlnQ2hhbmdlczogdGhpcy5nZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gd2lkZ2V0Q29uZmlnRmlsdGVyRGF0YTtcclxuICB9XHJcblxyXG5cclxuICAvKiogIFRvIGxvYWQgZXh0ZXJuYWwgY3VzdG9tIGVsZW1lbnQgdG8gdGhlIHdpZGdldCBjb250YWluZXIqL1xyXG4gIGFzeW5jIGxvYWRXaWRnZXQod2lkZ2V0SW5mbzogYW55KSB7XHJcbiAgICB3aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBjb25maWc6IHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSlcclxuICAgIH1cclxuICAgIGlmICh3aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0U2V0dGluZ3MgPSB0aGlzLmdldFBhcnNlZENvbmZpZyh3aWRnZXRJbmZvLndpZGdldFNldHRpbmdzKTtcclxuICAgICAgdGhpcy5hcHBsYXlXaWRnZXRTZXR0aW5ncyh0aGlzLndpZGdldFNldHRpbmdzKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGV0YWlsUGFnZVVybCA9IHdpZGdldEluZm8uZGV0YWlsUGFnZVVybDtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXIgPSB0aGlzO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmxvYWRFeHRlcm5hbFNjcmlwdCh3aWRnZXRJbmZvLnNjcmlwdFVybCwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmxvYWRUcmFuc2xhdGlvbnModGhpcy5hcHBDb25maWcuYXBwTWFuYWdlbWVudEJhc2VVcmwsIHRoaXMuZGF0YS53aWRnZXRJbmZvLndpZGdldE5hbWUsIGZhbHNlKS50aGVuKCgpID0+IHtcclxuICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQod2lkZ2V0SW5mby5jdXN0b21UYWcpO1xyXG4gICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LnNldEF0dHJpYnV0ZShcIndpZGdldC1pbnN0YW5jZS1pZFwiLCB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3dpZGdldGluaXRpYXRlZCcgKyB3aWRnZXRJbmZvLndpZGdldEluc3RhbmNlSWQsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdvbi1kYXRhLWxvYWQnLCAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsKVxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLnNob3dQYW5lbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLnNob3dQYW5lbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgd2lkZ2V0Q29udGFpbmVyLndpZGdldEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29uZmlnLWVkaXQtY2xpY2tlZCcsIChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB3aWRnZXRDb250YWluZXIuZWRpdFdpZGdldCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2VuYWJsZS1kZWZhdWx0LXN0YXRlJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5zZXRFbXB0eVN0YXRlKGUuZGV0YWlsKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB3aWRnZXRDb250YWluZXIud2lkZ2V0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzZXQtdGl0bGUtdW5kZXJsaW5lJywgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKytcIik7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coZS5kZXRhaWxzKTtcclxuICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwgPT0gdHJ1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlVGl0bGVMaW5lID0gdHJ1ZVxyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlVGl0bGVMaW5lID0gdGhpcy5lbmFibGVUaXRsZUxpbmVBY3R1YWxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgdGl0bGVMaW5lRW5hYmxlZCA9IHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LnRpdGxlTGluZUVuYWJsZWQoKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAodGl0bGVMaW5lRW5hYmxlZCkgIT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmVuYWJsZVRpdGxlTGluZSA9IHRpdGxlTGluZUVuYWJsZWQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5lbmFibGVUaXRsZUxpbmVBY3R1YWwgPSB0aXRsZUxpbmVFbmFibGVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVkaXRUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5lZGl0JykubGVuZ3RoID4gNikge1xyXG4gICAgICAgICAgICAgIHRoaXMuZWRpdFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5lZGl0VG9vbFRpcFZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmVkaXQnKTtcclxuICAgICAgICAgICAgICB0aGlzLmVkaXRUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb3B5VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uY29weScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvcHlUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29weVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5jb3B5Jyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb3B5VG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVRleHQgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ubW92ZScpLmxlbmd0aCA+IDYpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1vdmVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMubW92ZVRvb2xUaXBWYWx1ZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5tb3ZlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5tb3ZlVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZXhjZWxUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5leGNlbFRleHQgPSAodGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmV4Y2VsJykuc3Vic3RyaW5nKDAsIDYpICsgJy4uLicpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXhjZWxUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZXhjZWwnKTtcclxuICAgICAgICAgICAgICB0aGlzLmV4Y2VsVG9vbFRpcFdpZHRoID0gXCIzMDBweFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlVGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5sZW5ndGggPiA2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUZXh0ID0gKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5kZWxldGUnKS5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwVmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uZGVsZXRlJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVUb29sVGlwV2lkdGggPSBcIjMwMHB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci5pc1dpZGdldExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci5hcHBDb25maWcgPSB0aGlzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnRmlsdGVyLndpZGdldEluZm8gPSB3aWRnZXRJbmZvO1xyXG4gICAgICAgICAgICB3aWRnZXRDb25maWdGaWx0ZXIuY29uZmlnQ2hhbmdlcyA9IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhmYWxzZSk7XHJcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ0ZpbHRlci53aWRnZXRJbmZvLndpZGdldE5hbWUgPSB3aWRnZXRJbmZvLndpZGdldE5hbWU7XHJcbiAgICAgICAgICAgIHdpZGdldENvbnRhaW5lci53aWRnZXRFbGVtZW50LmxvYWRDb250ZW50KHdpZGdldENvbmZpZ0ZpbHRlcik7XHJcbiAgICAgICAgICAgIGF3YWl0IHdpZGdldENvbnRhaW5lci5zZXRMb2NrKHdpZGdldENvbmZpZ0ZpbHRlci5jb25maWcpO1xyXG4gICAgICAgICAgICBhd2FpdCB3aWRnZXRDb250YWluZXIuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmN0bFdpZGdldC5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMud2lkZ2V0RWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipUbyBzZXQgRGVmYXVsdCBTdGF0ZSBmb3IgdGhlIHdpZGdldCB3aGVuIGl0IGlzIG5vdCBjb25maWd1cmVkICovXHJcbiAgc2V0Tm90Q29uZmlndXJlZFN0YXRlKHdpZGdldEluZm86IElXaWRnZXRJbmZvLCBmb3JjZUVuYWJsZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoKHdpZGdldEluZm8uc2hvd0RlZmF1bHRTdGF0ZSAmJiAod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZyA9PSBcIlwiIHx8IE9iamVjdC5rZXlzKEpTT04ucGFyc2Uod2lkZ2V0SW5mby53aWRnZXRDb25maWdJbmZvLmNvbmZpZykpLmxlbmd0aCA9PSAwKSkgfHwgKGZvcmNlRW5hYmxlKSkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0U3RhdGVBcHBsaWNhYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gV2lkZ2V0Vmlld1N0YXRlLmVtcHR5Q29uZmlnLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy53aWRnZXRFbXB0eVN0YXRlID0gJyc7XHJcbiAgICAgIHRoaXMuaXNXaWRnZXRTdGF0ZUFwcGxpY2FibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlRvIGNvbmZpZ3VyZSBlbXB0eSBzdGF0ZSBmb3IgdGhlIHdpZGdldCAgKi9cclxuICBzZXRFbXB0eVN0YXRlKHdpZGdldFN0YXRlOiBhbnkpIHtcclxuICAgIHRoaXMud2lkZ2V0RW1wdHlTdGF0ZSA9IHdpZGdldFN0YXRlLndpZGdldFZpZXdTdGF0ZTtcclxuICAgIHRoaXMuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkID0gd2lkZ2V0U3RhdGUuaXNHbG9iYWxGaWx0ZXJBcHBsaWVkO1xyXG4gICAgaWYgKHdpZGdldFN0YXRlICE9IFdpZGdldFZpZXdTdGF0ZS5ub3JtYWwpIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNEb3dubG9hZEljb25WaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc1dpZGdldFN0YXRlQXBwbGljYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh3aWRnZXRTdGF0ZSkge1xyXG4gICAgICBjYXNlIFdpZGdldFZpZXdTdGF0ZS5lbXB0eUNvbmZpZzpcclxuICAgICAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh0aGlzLmRhdGEud2lkZ2V0SW5mbywgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgV2lkZ2V0Vmlld1N0YXRlLmVtcHR5RGF0YTpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBXaWRnZXRWaWV3U3RhdGUuZXJyb3I6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWdDaGFuZ2VzKGNvbmZpZ0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IGNvbmZpZ0NoYW5nZXMgPSA8SWNvbmZpZ0NoYW5nZXM+e1xyXG4gICAgICBpc0NvbmZpZ1VwZGF0ZWQ6IGNvbmZpZ0NoYW5nZWQsXHJcbiAgICAgIHVwZGF0ZWRDb25maWdQcm9wZXJ0eTogW11cclxuICAgIH1cclxuICAgIHJldHVybiBjb25maWdDaGFuZ2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvIHJlZnJlc2ggd2lkZ2V0IG9uIGlucHV0IGNvbmZpZyBjaGFuZ2VzICovXHJcbiAgYXN5bmMgcmVmcmVzaFdpZGdldCh3aWRnZXRJbmZvOiBJV2lkZ2V0SW5mbywgY29uZmlnQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLldpZGdldERpc3BsYXlOYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLicgKyB0aGlzLmRhdGEud2lkZ2V0SW5mby53aWRnZXRUaXRsZSwgdHJ1ZSk7XHJcbiAgICB3aWRnZXRJbmZvLnJvd0hlaWdodCA9IHRoaXMuZ3JpZENlbGxIZWlnaHQ7XHJcbiAgICB0aGlzLnNldE5vdENvbmZpZ3VyZWRTdGF0ZSh3aWRnZXRJbmZvKTtcclxuICAgIGxldCB3aWRnZXRDb250YWluZXJDb250ZXh0ID0gdGhpcztcclxuXHJcbiAgICBsZXQgd2lkZ2V0Q29uZmlnRmlsdGVyID0gPElXaWRnZXRDb25maWdGaWx0ZXI+e1xyXG4gICAgICBjb25maWc6IHdpZGdldEluZm8ud2lkZ2V0Q29uZmlnSW5mby5jb25maWcsXHJcbiAgICAgIGdsb2JhbEZpbHRlcjogdGhpcy5nbG9iYWxGaWx0ZXIsXHJcbiAgICAgIGFwcENvbmZpZzogdGhpcy5hcHBDb25maWcsXHJcbiAgICAgIHdpZGdldEluZm86IHdpZGdldEluZm8sXHJcbiAgICAgIGNvbmZpZ0NoYW5nZXM6IHRoaXMuZ2V0Q29uZmlnQ2hhbmdlcyhjb25maWdDaGFuZ2VkKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aWRnZXRDb250YWluZXJDb250ZXh0LmlzV2lkZ2V0TG9hZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldEVsZW1lbnQgJiYgdHlwZW9mICh0aGlzLndpZGdldEVsZW1lbnQuc2V0Q29uZmlnRmlsdGVyKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgd2lkZ2V0Q29udGFpbmVyQ29udGV4dC53aWRnZXRFbGVtZW50LnNldENvbmZpZ0ZpbHRlcih3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIHdpZGdldENvbnRhaW5lckNvbnRleHQud2lkZ2V0RWxlbWVudC5sb2FkQ29udGVudCh3aWRnZXRDb25maWdGaWx0ZXIpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNldExvY2sod2lkZ2V0Q29uZmlnRmlsdGVyLmNvbmZpZyk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0RG93bmxvYWRJY29uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW91c2VPdmVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMudG9vbFRpcFZhbHVlID0gJyAnO1xyXG4gICAgdGhpcy50b29sVGlwV2lkdGggPSAnMHB4JztcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5zZWFyY2hJbnB1dC5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKGVsZW1lbnQub2Zmc2V0V2lkdGggPCBlbGVtZW50LnNjcm9sbFdpZHRoKSB7XHJcbiAgICAgIHRoaXMudG9vbFRpcFZhbHVlID0gZWxlbWVudC5pbm5lckhUTUw7XHJcbiAgICAgIHRoaXMudG9vbFRpcFdpZHRoID0gJzMwMHB4JztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRvb2xUaXBXaWR0aCA9ICcwcHgnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXRMb2NrKGNvbmZpZzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmxvY2tUZW1wbGF0ZUluZm8gPSB0aGlzLndpZGdldEVsZW1lbnQubG9hZExvY2tJbmZvKCk7XHJcbiAgICB2YXIgY29uZmlnT2JqOiBhbnk7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIGNvbmZpZ09iaiA9IEpTT04ucGFyc2UoY29uZmlnKTtcclxuICAgICAgaWYgKGNvbmZpZ09iaiAmJiBjb25maWdPYmouTG9ja3MgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc0RhdGVMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzRGF0ZXNMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzUGFydGljaXBhbnRMb2NrZWQgfHwgY29uZmlnT2JqLkxvY2tzLklzU291cmNlTG9ja2VkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2tEZXRhaWxzID0gW107XHJcbiAgICAgICAgICBpZiAoY29uZmlnT2JqLkxvY2tzLklzRGF0ZUxvY2tlZCB8fCBjb25maWdPYmouTG9ja3MuSXNEYXRlc0xvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRlUmFuZ2UnKSk7XHJcblxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1BhcnRpY2lwYW50TG9ja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMucHVzaCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uRGl2aXNpb25Pckdyb3Vwb3JTaXRlJykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbmZpZ09iai5Mb2Nrcy5Jc1NvdXJjZUxvY2tlZClcclxuICAgICAgICAgICAgdGhpcy5sb2NrRGV0YWlscy5wdXNoKHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5EYXRhU3RyZWFtJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9ja0RldGFpbHMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXREb3dubG9hZEljb24oKSB7XHJcbiAgICBsZXQgZG93bmxvYWRUeXBlID0gYXdhaXQgdGhpcy53aWRnZXRFbGVtZW50LmdldERvd25sb2FkVHlwZSgpO1xyXG4gICAgdGhpcy5kb3dubG9hZEljb25UeXBlID0gZG93bmxvYWRUeXBlO1xyXG4gICAgdGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNDaGFydERvd25sb2FkVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUgPSBmYWxzZTtcclxuICAgIGlmIChkb3dubG9hZFR5cGUgIT0gUkFEb3dubG9hZFR5cGUuTm9uZSkge1xyXG4gICAgICB0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLmlzV2lkZ2V0TWdtbnQgJiYgIXRoaXMuZGV0YWlsUGFnZVVybCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NldHRpbmdzTGluayA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRvd25sb2FkVHlwZSA9PSBSQURvd25sb2FkVHlwZS5DaGFydCkge1xyXG4gICAgICB0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb3dubG9hZFR5cGUgPT0gUkFEb3dubG9hZFR5cGUuR3JpZCkge1xyXG4gICAgICB0aGlzLmlzR3JpZERvd25sb2FkVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvd25sb2FkSWNvbkNsaWNrZWQodHlwZTogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBcIkNTVlwiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLkNTVik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJQTkdcIjpcclxuICAgICAgICB0aGlzLndpZGdldEVsZW1lbnQuZG93bmxvYWRDbGlja2VkKHRoaXMuZG93bmxvYWRJY29uVHlwZSwgUkFEb3dubG9hZE9wdGlvbi5QTkcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiUERGXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uUERGKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlNWR1wiOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0RWxlbWVudC5kb3dubG9hZENsaWNrZWQodGhpcy5kb3dubG9hZEljb25UeXBlLCBSQURvd25sb2FkT3B0aW9uLlNWRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJKUEVHXCI6XHJcbiAgICAgICAgdGhpcy53aWRnZXRFbGVtZW50LmRvd25sb2FkQ2xpY2tlZCh0aGlzLmRvd25sb2FkSWNvblR5cGUsIFJBRG93bmxvYWRPcHRpb24uSlBFRyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZU1lbnUoKSB7XHJcbiAgICBqUXVlcnkoJyNyYS1kYi13aWRnZXQtbWVudScpLnJlbW92ZSgpO1xyXG4gIH1cclxuICAvKipTaG93IGRyb3Bkb3duIG9uIGdlYXIgaWNvbiBjbGljayAgKi9cclxuICBwdWJsaWMgc2hvd0Ryb3BEb3duKGU6IGFueSkge1xyXG4gICAgdGhpcy5zZXREb3dubG9hZEljb24oKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgdGFyZ2V0UG9zID0gZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIGxldCBzdHlsZTogc3RyaW5nID0gXCJwb3NpdGlvbjpmaXhlZDt0b3A6XCIgKyAodGFyZ2V0UG9zLnkgKyAxNSkgKyAncHgnICsgJztsZWZ0OicgKyAoZS5wYWdlWCAtIDEyMikgKyAncHg7ei1pbmRleDoxMDAwOyc7XHJcbiAgICAgIGxldCBodG1sID0gdGhpcy5nZXRDb250ZW54dEh0bWwoc3R5bGUpO1xyXG5cclxuICAgICAgalF1ZXJ5KGh0bWwpLmFwcGVuZFRvKCdib2R5Jyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0VkaXRXaWRnZXQnLCB0aGlzLmVkaXRXaWRnZXQpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2NDb3B5V2lkZ2V0JywgdGhpcy5jb3B5V2lkZ2V0KTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djTW92ZVdpZGdldCcsIHRoaXMubW92ZVdpZGdldCk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1dpZGdldERlbGV0ZScsIHRoaXMuZGVsZXRlV2lkZ2V0KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kZXRhaWxQYWdlVXJsKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y1Zpc2l0V2lkZ2V0JywgdGhpcy52aXNpdFBhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRQbmcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdQTkcnKTtcclxuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3djRG93bmxvYWRKcGcnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdKUEVHJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkUGRmJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnUERGJyk7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkU3ZnJywgdGhpcy5kb3dubG9hZEljb25DbGlja2VkLCAnU1ZHJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXNHcmlkRG93bmxvYWRWaXNpYmxlKSB7XHJcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCd3Y0Rvd25sb2FkRXhjZWwnLCB0aGlzLmRvd25sb2FkSWNvbkNsaWNrZWQsICdDU1YnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JhLWRiLXdpZGdldC1tZW51JykuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcclxuICAgICAgICB3aW5kb3cubW91c2VPdmVyV2lkZ2V0TWVudSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmEtZGItd2lkZ2V0LW1lbnUnKS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5tb3VzZU92ZXJXaWRnZXRNZW51ID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXdpbmRvdy5ncmlkc3Rlckl0ZW1FbnRlcikge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1lbnUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZEV2ZW50TGlzdGVuZXIoaWQ6IHN0cmluZywgZXZlbnQ6IGFueSwgcGFyYW1zPzogYW55KSB7XHJcbiAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgZXZlbnQuY2FsbCh0aGlzLCBwYXJhbXMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29udGVueHRIdG1sKHN0eWxlOiBzdHJpbmcpIHtcclxuICAgIGxldCBodG1sOiBzdHJpbmcgPSAnPGRpdiBpZD1cInJhLWRiLXdpZGdldC1tZW51XCInICsgJ3N0eWxlPVwiJyArIHN0eWxlICsgJ1wiIGNsYXNzPVwiZG93bmxvYWQtY29udGVudCBkcm9wZG93bi1jb250ZW50IHdpZGdldC1jb25maWctaXRlbSBkcm9wZG93bi1jbGlja1wiIHN0eWxlPVwiei1pbmRleDogMTAwMjtcIj4nO1xyXG5cclxuICAgIGxldCBzZXR0aW5ncyA9ICcnO1xyXG4gICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRWRpdFdpZGdldCcsICdmYWwgZmEtZWRpdCcsIHRoaXMuZWRpdFRleHQpO1xyXG4gICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djQ29weVdpZGdldCcsICdmYWwgZmEtY29weScsIHRoaXMuY29weVRleHQpO1xyXG4gICAgICBzZXR0aW5ncyArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djTW92ZVdpZGdldCcsICdmYWwgZmEtYXJyb3dzLWFsdCcsIHRoaXMubW92ZVRleHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGV0YWlsUGFnZVVybCkge1xyXG4gICAgICBzZXR0aW5ncyArPSAnPGEgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMHB4O2FsaWduLWl0ZW1zOiBjZW50ZXI7YWxpZ24tY29udGVudDogY2VudGVyOyBkaXNwbGF5OiBmbGV4O1wiIGlkPVwid2NWaXNpdFdpZGdldFwiPic7XHJcbiAgICAgIHNldHRpbmdzICs9ICc8aSBzdHlsZT1cInBhZGRpbmctbGVmdDogNHB4O2ZvbnQtc2l6ZTogMjdweCAhaW1wb3J0YW50O1wiIGNsYXNzPVwiZmFsIGZhLWFuZ2xlLXJpZ2h0XCI+PC9pPiAnO1xyXG4gICAgICBzZXR0aW5ncyArPSAnPHNwYW4gc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDExcHg7bWFyZ2luLXRvcDogMnB4O1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA2cHg7XCI+JztcclxuICAgICAgc2V0dGluZ3MgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLnZpc2l0cGFnZScpO1xyXG4gICAgICBzZXR0aW5ncyArPSAnPC9zcGFuPjwvYT4nO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGV0YWlsUGFnZVVybCB8fCB0aGlzLmlzV2lkZ2V0TWdtbnQpIHtcclxuICAgICAgaHRtbCArPSAnPGRpdiBzdHlsZT1cImNvbG9yOiAjOUZBMEE0O2ZvbnQtc2l6ZTogMTJweDtwYWRkaW5nLXRvcDogOHB4O3BhZGRpbmctbGVmdDogMTJweDtcIj4nO1xyXG4gICAgICBodG1sICs9IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zZXR0aW5ncycpICsgJzwvZGl2Pic7XHJcbiAgICAgIGh0bWwgKz0gc2V0dGluZ3M7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5nZXRIcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzRG93bmxvYWRJY29uVmlzaWJsZSkge1xyXG4gICAgICBpZiAodGhpcy5kZXRhaWxQYWdlVXJsIHx8IHRoaXMuaXNXaWRnZXRNZ21udClcclxuICAgICAgICBodG1sICs9ICc8c3BhbiBzdHlsZT1cImNvbG9yOiAjOUZBMEE0O2ZvbnQtc2l6ZTogMTJweDtcIj4nO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaHRtbCArPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogIzlGQTBBNDtmb250LXNpemU6IDEycHg7cGFkZGluZy10b3A6NXB4O2Rpc3BsYXk6YmxvY2s7XCI+JztcclxuXHJcbiAgICAgIGh0bWwgKz0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnQ29tbW9uLmRvd25sb2FkcycpO1xyXG4gICAgICBodG1sICs9ICc8L3NwYW4+JztcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQ2hhcnREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICBodG1sICs9ICc8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6IDEwcHg7XCIgY2xhc3M9XCJjaGFydERvd25sb2FkXCI+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBuZycsICdmYWwgZmEtZmlsZS1pbWFnZScsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5wbmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSB0aGlzLmdldEh0bWxGb3JCdXR0b24oJ3djRG93bmxvYWRKcGcnLCAnZmFsIGZhLWZpbGUtaW1hZ2UnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24uanBlZycpKTtcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZFBkZicsICdmYWwgZmEtZmlsZS1wZGYnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdDb21tb24ucGRmJykpO1xyXG4gICAgICAgIGh0bWwgKz0gdGhpcy5nZXRIdG1sRm9yQnV0dG9uKCd3Y0Rvd25sb2FkU3ZnJywgJ2ZhbCBmYS1maWxlLWFsdCcsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0NvbW1vbi5zdmcnKSk7XHJcbiAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0dyaWREb3dubG9hZFZpc2libGUpIHtcclxuICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPVwiZ3JpZERvd25sb2FkXCI+JztcclxuICAgICAgICBodG1sICs9IHRoaXMuZ2V0SHRtbEZvckJ1dHRvbignd2NEb3dubG9hZEV4Y2VsJywgJ2ZhbCBmYS1kb3dubG9hZCcsIHRoaXMuZXhjZWxUZXh0KTtcclxuICAgICAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0Rvd25sb2FkSWNvblZpc2libGUgJiYgdGhpcy5pc1dpZGdldE1nbW50KSB7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5nZXRIcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNXaWRnZXRNZ21udCkge1xyXG4gICAgICBodG1sICs9ICc8YSBpZD1cIndjV2lkZ2V0RGVsZXRlXCI+PGkgY2xhc3M9XCJmYWwgZmEtdGltZXNcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogM3B4O2NvbG9yOiByZWQ7XCI+PC9pPjxzcGFuPic7XHJcbiAgICAgIGh0bWwgKz0gdGhpcy5kZWxldGVUZXh0O1xyXG4gICAgICBodG1sICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICB9XHJcblxyXG4gICAgaHRtbCArPSAnPC9kaXY+JztcclxuICAgIHJldHVybiBodG1sO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIcigpIHtcclxuICAgIHJldHVybiAnPGhyIGNsYXNzPVwiaHJcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDVweDttYXJnaW4tYm90dG9tOiA1cHg7XCI+JztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SHRtbEZvckJ1dHRvbihpZDogc3RyaW5nLCBmb250Q2xhc3M6IHN0cmluZywgdGV4dDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaHRtbCA9ICc8YSBpZD1cIicgKyBpZCArICdcIj48aSBzdHlsZT1cIndpZHRoOjE2cHhcIiBjbGFzcz1cIicgKyBmb250Q2xhc3MgKyAnXCI+PC9pPiA8c3BhbiBzdHlsZT1cInBhZGRpbmctbGVmdDogNnB4O1wiPic7XHJcbiAgICBodG1sICs9IHRleHQ7XHJcbiAgICBodG1sICs9ICc8L3NwYW4+PC9hPic7XHJcbiAgICByZXR1cm4gaHRtbDtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGdldFBhcnNlZENvbmZpZyhjb25maWc6IGFueSkge1xyXG4gICAgbGV0IHBhcnNlZENvbmZpZzogYW55O1xyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgcGFyc2VkQ29uZmlnID0gSlNPTi5wYXJzZShjb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICBwYXJzZWRDb25maWcgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZENvbmZpZztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbGF5V2lkZ2V0U2V0dGluZ3Moc2V0dGluZ3M6IGFueSkge1xyXG4gICAgaWYgKHNldHRpbmdzLk5vUGFkZGluZylcclxuICAgICAgdGhpcy5ub1BhZGRpbmcgPSB0cnVlXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubm9QYWRkaW5nID0gZmFsc2VcclxuICB9XHJcbiBcclxufVxyXG4iXX0=
@@ -1409,7 +1409,6 @@ class RAWidgetContainer {
1409
1409
  size.width = this.width;
1410
1410
  size.cellHeight = this.gridCellHeight;
1411
1411
  this.widgetElement.widgetResized(size);
1412
- this.setTitleLineFor1xView();
1413
1412
  }
1414
1413
  }
1415
1414
  /**
@@ -1660,6 +1659,19 @@ class RAWidgetContainer {
1660
1659
  (e) => {
1661
1660
  widgetContainer.setEmptyState(e.detail);
1662
1661
  }));
1662
+ widgetContainer.widgetElement.addEventListener('set-title-underline', (/**
1663
+ * @param {?} e
1664
+ * @return {?}
1665
+ */
1666
+ (e) => {
1667
+ console.log("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
1668
+ console.log(e);
1669
+ console.log(e.details);
1670
+ if (e.detail == true)
1671
+ this.enableTitleLine = true;
1672
+ else
1673
+ this.enableTitleLine = this.enableTitleLineActual;
1674
+ }));
1663
1675
  /** @type {?} */
1664
1676
  let titleLineEnabled = widgetContainer.widgetElement.titleLineEnabled();
1665
1677
  if (typeof (titleLineEnabled) != 'undefined') {
@@ -1704,7 +1716,6 @@ class RAWidgetContainer {
1704
1716
  widgetContainer.widgetElement.loadContent(widgetConfigFilter);
1705
1717
  yield widgetContainer.setLock(widgetConfigFilter.config);
1706
1718
  yield widgetContainer.setDownloadIcon();
1707
- this.setTitleLineFor1xView();
1708
1719
  })));
1709
1720
  })));
1710
1721
  this.ctlWidget.nativeElement.appendChild(this.widgetElement);
@@ -2094,18 +2105,6 @@ class RAWidgetContainer {
2094
2105
  else
2095
2106
  this.noPadding = false;
2096
2107
  }
2097
- /**
2098
- * @private
2099
- * @return {?}
2100
- */
2101
- setTitleLineFor1xView() {
2102
- /** @type {?} */
2103
- var titleLineEnabled1x = this.widgetElement.titleLineEnabledFor1xView();
2104
- if (typeof (titleLineEnabled1x) != 'undefined' && titleLineEnabled1x && (this.height == 1 || this.width == 1))
2105
- this.enableTitleLine = true;
2106
- else
2107
- this.enableTitleLine = this.enableTitleLineActual;
2108
- }
2109
2108
  }
2110
2109
  RAWidgetContainer.decorators = [
2111
2110
  { type: Component, args: [{