@eqproject/eqp-dynamic-module 2.10.104 → 2.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +35 -15
  2. package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +2 -2
  3. package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +26 -26
  4. package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +4 -4
  5. package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +18 -18
  6. package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +7 -7
  7. package/esm2020/lib/components/private/dbg-templates/list-value-dbg-template/list-value-dbg-template.component.mjs +4 -4
  8. package/esm2020/lib/components/private/dbgetter/dbgetter.component.mjs +5 -5
  9. package/esm2020/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.mjs +5 -5
  10. package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +5 -5
  11. package/esm2020/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.mjs +10 -10
  12. package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +3 -3
  13. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +11 -11
  14. package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +16 -9
  15. package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +6 -6
  16. package/esm2020/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +6 -6
  17. package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +5 -5
  18. package/esm2020/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.mjs +16 -16
  19. package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +19 -19
  20. package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +18 -18
  21. package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +32 -9
  22. package/esm2020/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.mjs +7 -7
  23. package/esm2020/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.mjs +8 -8
  24. package/esm2020/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.mjs +4 -4
  25. package/esm2020/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.mjs +7 -7
  26. package/esm2020/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.mjs +18 -11
  27. package/esm2020/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.mjs +7 -7
  28. package/esm2020/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.mjs +7 -7
  29. package/esm2020/lib/components/private/graphs/graphs.component.mjs +4 -4
  30. package/esm2020/lib/components/private/tmw-image-drawer/tmw-image-drawer.component.mjs +5 -5
  31. package/esm2020/lib/components/private/tmw-image-marker/tmw-image-marker.component.mjs +6 -6
  32. package/esm2020/lib/components/private/trigger-creator/trigger-creator.component.mjs +8 -10
  33. package/esm2020/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.mjs +5 -5
  34. package/esm2020/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.mjs +5 -5
  35. package/esm2020/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.mjs +4 -4
  36. package/esm2020/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.mjs +15 -8
  37. package/esm2020/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.mjs +7 -7
  38. package/esm2020/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.mjs +7 -7
  39. package/esm2020/lib/eqp-dynamic-module.module.mjs +22 -44
  40. package/esm2020/lib/models/dynAttachment.mjs +1 -1
  41. package/fesm2015/eqproject-eqp-dynamic-module.mjs +275 -253
  42. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  43. package/fesm2020/eqproject-eqp-dynamic-module.mjs +274 -253
  44. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  45. package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +1 -1
  46. package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +8 -8
  47. package/lib/components/private/add-form-field/add-form-field.component.d.ts +14 -14
  48. package/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.d.ts +2 -2
  49. package/lib/components/private/field-templates/date-field-template/date-field-template.component.d.ts +1 -1
  50. package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +2 -2
  51. package/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.d.ts +11 -11
  52. package/lib/components/private/form-records/list-form-record/list-form-record.component.d.ts +11 -11
  53. package/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.d.ts +9 -9
  54. package/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.d.ts +4 -3
  55. package/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.d.ts +1 -1
  56. package/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.d.ts +1 -1
  57. package/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.d.ts +1 -1
  58. package/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.d.ts +3 -3
  59. package/lib/components/private/trigger-creator/trigger-creator.component.d.ts +0 -2
  60. package/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.d.ts +1 -1
  61. package/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.d.ts +1 -1
  62. package/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.d.ts +3 -3
  63. package/lib/eqp-dynamic-module.module.d.ts +9 -26
  64. package/lib/models/dynAttachment.d.ts +2 -2
  65. package/package.json +8 -15
@@ -4,8 +4,8 @@ import { fabric } from 'fabric';
4
4
  import { Observable, of } from 'rxjs';
5
5
  import { switchMap } from 'rxjs/operators';
6
6
  import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/material/icon";
8
- import * as i2 from "@angular/common";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "tmw-icons";
9
9
  export class TmwImageDrawerComponent {
10
10
  constructor() {
11
11
  this.closeDialog = new EventEmitter();
@@ -350,10 +350,10 @@ export class TmwImageDrawerComponent {
350
350
  }
351
351
  }
352
352
  TmwImageDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TmwImageDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
353
- TmwImageDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TmwImageDrawerComponent, selector: "tmw-image-drawer", inputs: { src: "src", width: "width", height: "height", forceSizeCanvas: "forceSizeCanvas", forceSizeExport: "forceSizeExport", enableRemoveImage: "enableRemoveImage", enableLoadAnotherImage: "enableLoadAnotherImage", enableTooltip: "enableTooltip", showCancelButton: "showCancelButton", inConfig: "inConfig", i18nUser: ["i18n", "i18nUser"], locale: "locale", loadingTemplate: "loadingTemplate", errorTemplate: "errorTemplate", outputMimeType: "outputMimeType", outputQuality: "outputQuality", borderCss: "borderCss", drawingSizes: "drawingSizes", colors: "colors" }, outputs: { closeDialog: "closeDialog", save: "save", loadOriginal: "loadOriginal" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"loading\" *ngIf=\"isLoading && loadingTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\r\n</div>\r\n<div class=\"error\" *ngIf=\"hasError\">\r\n <ng-container *ngTemplateOutlet=\"errorTemplate ? errorTemplate : defaultError\"></ng-container>\r\n</div>\r\n\r\n<!-- <ng-template #defaultLoading>\r\n <p>{{ getTextTranslated('loading') }}</p>\r\n</ng-template> -->\r\n<ng-template #defaultError>\r\n <p>{{ errorMessage }}</p>\r\n</ng-template>\r\n\r\n<div class=\"toolbar\" *ngIf=\"!isLoading\">\r\n <div class=\"tools\">\r\n\r\n <div class=\"brush\">\r\n <i class=\"title\">tools</i>\r\n <div class=\"internal\">\r\n <i class=\"material-icons btn\" [class.selected]=\"currentTool == 'brush'\" (click)=\"selectTool('brush')\"\r\n [title]=\"getTooltipTranslated('tools.brush')\"><mat-icon>brush</mat-icon></i>\r\n <span *ngFor=\"let drawingSizeName of drawingSizesName\" class=\"size btn mr-1\"\r\n [style.width.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n [style.height.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n [style.borderRadius.px]=\"drawingSizes[drawingSizeName] * 0.4 + 4\"\r\n [class.selected]=\"currentSize == drawingSizeName\" [title]=\"getTooltipTranslated('sizes.' + drawingSizeName)\"\r\n (click)=\"selectDrawingSize(drawingSizeName)\">\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"commands\">\r\n <i class=\"title\">options</i>\r\n <div class=\"internal\">\r\n <i class=\"material-icons btn\" [class.disabled]=\"!canUndo\" (click)=\"undo()\"\r\n [title]=\"getTooltipTranslated('undo')\"><mat-icon>undo</mat-icon></i>\r\n <i class=\"material-icons btn\" [class.disabled]=\"!canRedo\" (click)=\"redo()\"\r\n [title]=\"getTooltipTranslated('redo')\"><mat-icon>redo</mat-icon></i>\r\n <i class=\"material-icons btn\" (click)=\"clearCanvas()\" [title]=\"getTooltipTranslated('clear')\"><mat-icon>clear</mat-icon></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"colors\">\r\n <i class=\"title\">colors</i>\r\n <div class=\"internal\">\r\n <div *ngFor=\"let colorName of colorsName\" [class.selected]=\"currentColor == colorName\" class=\"color\"\r\n [ngClass]=\"colorName\" [style.background]=\"colors[colorName]\"\r\n [title]=\"getTooltipTranslated('colors.' + colorName)\" (click)=\"selectColor(colorName)\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <i class=\"title\">actions</i>\r\n <div class=\"internal\">\r\n <a href=\"#\" class=\"btn btn-success\" (click)=\"saveImage(); $event.preventDefault()\" *ngIf=\"!inConfig\">{{\r\n getTextTranslated('saveBtn') }}</a>\r\n <a href=\"#\" class=\"btn btn-warning\" *ngIf=\"showCancelButton && !inConfig\" (click)=\"doLoadOriginal(); $event.preventDefault()\">{{\r\n getTextTranslated('cancelBtn') }}</a>\r\n <a href=\"#\" class=\"btn btn-danger\" *ngIf=\"showCancelButton\" (click)=\"close(); $event.preventDefault()\">{{\r\n getTextTranslated('closeDialog') }}</a>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Any additional toolbar buttons to be projected by the consuming app -->\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n<div [ngStyle]=\"{ border: borderCss }\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n</div>", styles: [":host{display:flex;flex-direction:column;align-items:center}:host .toolbar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap}:host .tools{display:inline-flex;flex-direction:row;margin:10px;background:#fff;border-radius:6px;box-shadow:0 3px 10px #0006}:host .tools .brush,:host .tools .commands,:host .tools .colors,:host .tools .actions{display:flex}:host .tools .brush .title,:host .tools .commands .title,:host .tools .colors .title,:host .tools .actions .title{display:flex;vertical-align:middle;background-color:#00a8ff;color:#fff;padding:10px}:host .tools .brush .internal,:host .tools .commands .internal,:host .tools .colors .internal,:host .tools .actions .internal{display:flex;vertical-align:middle;align-items:center;padding:0 15px}:host .tools .brush .internal>*,:host .tools .commands .internal>*,:host .tools .colors .internal>*,:host .tools .actions .internal>*{margin-right:5px}:host .tools .brush .internal .disabled,:host .tools .commands .internal .disabled,:host .tools .colors .internal .disabled,:host .tools .actions .internal .disabled{border:0;color:red}:host .row{display:flex;justify-content:space-around;align-items:center}:host .row:first-child{margin-bottom:10px}:host .size{background-color:#000}:host .size.selected{background-color:#bdbdbd}:host .color{width:28px;height:28px;border-radius:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}:host .color.selected:after{content:\"\";width:10px;height:10px;background:#000;display:flex;border-radius:5px}:host .color.black{background-color:#000}:host .color.black.selected:after{background:#fff}:host .color.white{border:1px solid #a7a7a7}:host .buttons{margin:10px;display:flex;flex-direction:column}:host .button{cursor:pointer;outline:0;border:none;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;min-width:64px;line-height:36px;padding:3px 16px;border-radius:4px;overflow:visible;transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow .28s cubic-bezier(.4,0,.2,1);margin:10px}:host .button:hover{text-decoration:none!important}\n"], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
353
+ TmwImageDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TmwImageDrawerComponent, selector: "tmw-image-drawer", inputs: { src: "src", width: "width", height: "height", forceSizeCanvas: "forceSizeCanvas", forceSizeExport: "forceSizeExport", enableRemoveImage: "enableRemoveImage", enableLoadAnotherImage: "enableLoadAnotherImage", enableTooltip: "enableTooltip", showCancelButton: "showCancelButton", inConfig: "inConfig", i18nUser: ["i18n", "i18nUser"], locale: "locale", loadingTemplate: "loadingTemplate", errorTemplate: "errorTemplate", outputMimeType: "outputMimeType", outputQuality: "outputQuality", borderCss: "borderCss", drawingSizes: "drawingSizes", colors: "colors" }, outputs: { closeDialog: "closeDialog", save: "save", loadOriginal: "loadOriginal" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"loading\" *ngIf=\"isLoading && loadingTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\r\n</div>\r\n<div class=\"error\" *ngIf=\"hasError\">\r\n <ng-container *ngTemplateOutlet=\"errorTemplate ? errorTemplate : defaultError\"></ng-container>\r\n</div>\r\n\r\n<!-- <ng-template #defaultLoading>\r\n <p>{{ getTextTranslated('loading') }}</p>\r\n</ng-template> -->\r\n<ng-template #defaultError>\r\n <p>{{ errorMessage }}</p>\r\n</ng-template>\r\n\r\n<div class=\"toolbar\" *ngIf=\"!isLoading\">\r\n <div class=\"tools\">\r\n\r\n <div class=\"brush\">\r\n <i class=\"title\">tools</i>\r\n <div class=\"internal\">\r\n <i class=\"btn\" [class.selected]=\"currentTool == 'brush'\" (click)=\"selectTool('brush')\"\r\n [title]=\"getTooltipTranslated('tools.brush')\"><tmw-icon class=\"mat-icon\" name=\"brush\"></tmw-icon></i>\r\n <span *ngFor=\"let drawingSizeName of drawingSizesName\" class=\"size btn mr-1\"\r\n [style.width.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n [style.height.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n [style.borderRadius.px]=\"drawingSizes[drawingSizeName] * 0.4 + 4\"\r\n [class.selected]=\"currentSize == drawingSizeName\" [title]=\"getTooltipTranslated('sizes.' + drawingSizeName)\"\r\n (click)=\"selectDrawingSize(drawingSizeName)\">\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"commands\">\r\n <i class=\"title\">options</i>\r\n <div class=\"internal\">\r\n <i class=\"btn\" [class.disabled]=\"!canUndo\" (click)=\"undo()\"\r\n [title]=\"getTooltipTranslated('undo')\"><tmw-icon class=\"mat-icon\" name=\"arrow-back-up\"></tmw-icon></i>\r\n <i class=\"btn\" [class.disabled]=\"!canRedo\" (click)=\"redo()\"\r\n [title]=\"getTooltipTranslated('redo')\"><tmw-icon class=\"mat-icon\" name=\"arrow-forward-up\"></tmw-icon></i>\r\n <i class=\"btn\" (click)=\"clearCanvas()\" [title]=\"getTooltipTranslated('clear')\"><tmw-icon class=\"mat-icon\" name=\"x\"></tmw-icon></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"colors\">\r\n <i class=\"title\">colors</i>\r\n <div class=\"internal\">\r\n <div *ngFor=\"let colorName of colorsName\" [class.selected]=\"currentColor == colorName\" class=\"color\"\r\n [ngClass]=\"colorName\" [style.background]=\"colors[colorName]\"\r\n [title]=\"getTooltipTranslated('colors.' + colorName)\" (click)=\"selectColor(colorName)\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <i class=\"title\">actions</i>\r\n <div class=\"internal\">\r\n <a href=\"#\" class=\"btn btn-success\" (click)=\"saveImage(); $event.preventDefault()\" *ngIf=\"!inConfig\">{{\r\n getTextTranslated('saveBtn') }}</a>\r\n <a href=\"#\" class=\"btn btn-warning\" *ngIf=\"showCancelButton && !inConfig\" (click)=\"doLoadOriginal(); $event.preventDefault()\">{{\r\n getTextTranslated('cancelBtn') }}</a>\r\n <a href=\"#\" class=\"btn btn-danger\" *ngIf=\"showCancelButton\" (click)=\"close(); $event.preventDefault()\">{{\r\n getTextTranslated('closeDialog') }}</a>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Any additional toolbar buttons to be projected by the consuming app -->\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n<div [ngStyle]=\"{ border: borderCss }\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n</div>", styles: [":host{display:flex;flex-direction:column;align-items:center}:host .toolbar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap}:host .tools{display:inline-flex;flex-direction:row;margin:10px;background:#fff;border-radius:6px;box-shadow:0 3px 10px #0006}:host .tools .brush,:host .tools .commands,:host .tools .colors,:host .tools .actions{display:flex}:host .tools .brush .title,:host .tools .commands .title,:host .tools .colors .title,:host .tools .actions .title{display:flex;vertical-align:middle;background-color:#00a8ff;color:#fff;padding:10px}:host .tools .brush .internal,:host .tools .commands .internal,:host .tools .colors .internal,:host .tools .actions .internal{display:flex;vertical-align:middle;align-items:center;padding:0 15px}:host .tools .brush .internal>*,:host .tools .commands .internal>*,:host .tools .colors .internal>*,:host .tools .actions .internal>*{margin-right:5px}:host .tools .brush .internal .disabled,:host .tools .commands .internal .disabled,:host .tools .colors .internal .disabled,:host .tools .actions .internal .disabled{border:0;color:red}:host .row{display:flex;justify-content:space-around;align-items:center}:host .row:first-child{margin-bottom:10px}:host .size{background-color:#000}:host .size.selected{background-color:#bdbdbd}:host .color{width:28px;height:28px;border-radius:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}:host .color.selected:after{content:\"\";width:10px;height:10px;background:#000;display:flex;border-radius:5px}:host .color.black{background-color:#000}:host .color.black.selected:after{background:#fff}:host .color.white{border:1px solid #a7a7a7}:host .buttons{margin:10px;display:flex;flex-direction:column}:host .button{cursor:pointer;outline:0;border:none;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;min-width:64px;line-height:36px;padding:3px 16px;border-radius:4px;overflow:visible;transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow .28s cubic-bezier(.4,0,.2,1);margin:10px}:host .button:hover{text-decoration:none!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.TmwIconComponent, selector: "tmw-icon", inputs: ["name", "size", "ariaLabel", "variant", "strokeWidth"] }] });
354
354
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TmwImageDrawerComponent, decorators: [{
355
355
  type: Component,
356
- args: [{ selector: 'tmw-image-drawer', template: "<div class=\"loading\" *ngIf=\"isLoading && loadingTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\r\n</div>\r\n<div class=\"error\" *ngIf=\"hasError\">\r\n <ng-container *ngTemplateOutlet=\"errorTemplate ? errorTemplate : defaultError\"></ng-container>\r\n</div>\r\n\r\n<!-- <ng-template #defaultLoading>\r\n <p>{{ getTextTranslated('loading') }}</p>\r\n</ng-template> -->\r\n<ng-template #defaultError>\r\n <p>{{ errorMessage }}</p>\r\n</ng-template>\r\n\r\n<div class=\"toolbar\" *ngIf=\"!isLoading\">\r\n <div class=\"tools\">\r\n\r\n <div class=\"brush\">\r\n <i class=\"title\">tools</i>\r\n <div class=\"internal\">\r\n <i class=\"material-icons btn\" [class.selected]=\"currentTool == 'brush'\" (click)=\"selectTool('brush')\"\r\n [title]=\"getTooltipTranslated('tools.brush')\"><mat-icon>brush</mat-icon></i>\r\n <span *ngFor=\"let drawingSizeName of drawingSizesName\" class=\"size btn mr-1\"\r\n [style.width.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n [style.height.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n [style.borderRadius.px]=\"drawingSizes[drawingSizeName] * 0.4 + 4\"\r\n [class.selected]=\"currentSize == drawingSizeName\" [title]=\"getTooltipTranslated('sizes.' + drawingSizeName)\"\r\n (click)=\"selectDrawingSize(drawingSizeName)\">\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"commands\">\r\n <i class=\"title\">options</i>\r\n <div class=\"internal\">\r\n <i class=\"material-icons btn\" [class.disabled]=\"!canUndo\" (click)=\"undo()\"\r\n [title]=\"getTooltipTranslated('undo')\"><mat-icon>undo</mat-icon></i>\r\n <i class=\"material-icons btn\" [class.disabled]=\"!canRedo\" (click)=\"redo()\"\r\n [title]=\"getTooltipTranslated('redo')\"><mat-icon>redo</mat-icon></i>\r\n <i class=\"material-icons btn\" (click)=\"clearCanvas()\" [title]=\"getTooltipTranslated('clear')\"><mat-icon>clear</mat-icon></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"colors\">\r\n <i class=\"title\">colors</i>\r\n <div class=\"internal\">\r\n <div *ngFor=\"let colorName of colorsName\" [class.selected]=\"currentColor == colorName\" class=\"color\"\r\n [ngClass]=\"colorName\" [style.background]=\"colors[colorName]\"\r\n [title]=\"getTooltipTranslated('colors.' + colorName)\" (click)=\"selectColor(colorName)\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <i class=\"title\">actions</i>\r\n <div class=\"internal\">\r\n <a href=\"#\" class=\"btn btn-success\" (click)=\"saveImage(); $event.preventDefault()\" *ngIf=\"!inConfig\">{{\r\n getTextTranslated('saveBtn') }}</a>\r\n <a href=\"#\" class=\"btn btn-warning\" *ngIf=\"showCancelButton && !inConfig\" (click)=\"doLoadOriginal(); $event.preventDefault()\">{{\r\n getTextTranslated('cancelBtn') }}</a>\r\n <a href=\"#\" class=\"btn btn-danger\" *ngIf=\"showCancelButton\" (click)=\"close(); $event.preventDefault()\">{{\r\n getTextTranslated('closeDialog') }}</a>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Any additional toolbar buttons to be projected by the consuming app -->\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n<div [ngStyle]=\"{ border: borderCss }\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n</div>", styles: [":host{display:flex;flex-direction:column;align-items:center}:host .toolbar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap}:host .tools{display:inline-flex;flex-direction:row;margin:10px;background:#fff;border-radius:6px;box-shadow:0 3px 10px #0006}:host .tools .brush,:host .tools .commands,:host .tools .colors,:host .tools .actions{display:flex}:host .tools .brush .title,:host .tools .commands .title,:host .tools .colors .title,:host .tools .actions .title{display:flex;vertical-align:middle;background-color:#00a8ff;color:#fff;padding:10px}:host .tools .brush .internal,:host .tools .commands .internal,:host .tools .colors .internal,:host .tools .actions .internal{display:flex;vertical-align:middle;align-items:center;padding:0 15px}:host .tools .brush .internal>*,:host .tools .commands .internal>*,:host .tools .colors .internal>*,:host .tools .actions .internal>*{margin-right:5px}:host .tools .brush .internal .disabled,:host .tools .commands .internal .disabled,:host .tools .colors .internal .disabled,:host .tools .actions .internal .disabled{border:0;color:red}:host .row{display:flex;justify-content:space-around;align-items:center}:host .row:first-child{margin-bottom:10px}:host .size{background-color:#000}:host .size.selected{background-color:#bdbdbd}:host .color{width:28px;height:28px;border-radius:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}:host .color.selected:after{content:\"\";width:10px;height:10px;background:#000;display:flex;border-radius:5px}:host .color.black{background-color:#000}:host .color.black.selected:after{background:#fff}:host .color.white{border:1px solid #a7a7a7}:host .buttons{margin:10px;display:flex;flex-direction:column}:host .button{cursor:pointer;outline:0;border:none;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;min-width:64px;line-height:36px;padding:3px 16px;border-radius:4px;overflow:visible;transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow .28s cubic-bezier(.4,0,.2,1);margin:10px}:host .button:hover{text-decoration:none!important}\n"] }]
356
+ args: [{ selector: 'tmw-image-drawer', template: "<div class=\"loading\" *ngIf=\"isLoading && loadingTemplate\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\r\n</div>\r\n<div class=\"error\" *ngIf=\"hasError\">\r\n <ng-container *ngTemplateOutlet=\"errorTemplate ? errorTemplate : defaultError\"></ng-container>\r\n</div>\r\n\r\n<!-- <ng-template #defaultLoading>\r\n <p>{{ getTextTranslated('loading') }}</p>\r\n</ng-template> -->\r\n<ng-template #defaultError>\r\n <p>{{ errorMessage }}</p>\r\n</ng-template>\r\n\r\n<div class=\"toolbar\" *ngIf=\"!isLoading\">\r\n <div class=\"tools\">\r\n\r\n <div class=\"brush\">\r\n <i class=\"title\">tools</i>\r\n <div class=\"internal\">\r\n <i class=\"btn\" [class.selected]=\"currentTool == 'brush'\" (click)=\"selectTool('brush')\"\r\n [title]=\"getTooltipTranslated('tools.brush')\"><tmw-icon class=\"mat-icon\" name=\"brush\"></tmw-icon></i>\r\n <span *ngFor=\"let drawingSizeName of drawingSizesName\" class=\"size btn mr-1\"\r\n [style.width.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n [style.height.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n [style.borderRadius.px]=\"drawingSizes[drawingSizeName] * 0.4 + 4\"\r\n [class.selected]=\"currentSize == drawingSizeName\" [title]=\"getTooltipTranslated('sizes.' + drawingSizeName)\"\r\n (click)=\"selectDrawingSize(drawingSizeName)\">\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"commands\">\r\n <i class=\"title\">options</i>\r\n <div class=\"internal\">\r\n <i class=\"btn\" [class.disabled]=\"!canUndo\" (click)=\"undo()\"\r\n [title]=\"getTooltipTranslated('undo')\"><tmw-icon class=\"mat-icon\" name=\"arrow-back-up\"></tmw-icon></i>\r\n <i class=\"btn\" [class.disabled]=\"!canRedo\" (click)=\"redo()\"\r\n [title]=\"getTooltipTranslated('redo')\"><tmw-icon class=\"mat-icon\" name=\"arrow-forward-up\"></tmw-icon></i>\r\n <i class=\"btn\" (click)=\"clearCanvas()\" [title]=\"getTooltipTranslated('clear')\"><tmw-icon class=\"mat-icon\" name=\"x\"></tmw-icon></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"colors\">\r\n <i class=\"title\">colors</i>\r\n <div class=\"internal\">\r\n <div *ngFor=\"let colorName of colorsName\" [class.selected]=\"currentColor == colorName\" class=\"color\"\r\n [ngClass]=\"colorName\" [style.background]=\"colors[colorName]\"\r\n [title]=\"getTooltipTranslated('colors.' + colorName)\" (click)=\"selectColor(colorName)\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n <i class=\"title\">actions</i>\r\n <div class=\"internal\">\r\n <a href=\"#\" class=\"btn btn-success\" (click)=\"saveImage(); $event.preventDefault()\" *ngIf=\"!inConfig\">{{\r\n getTextTranslated('saveBtn') }}</a>\r\n <a href=\"#\" class=\"btn btn-warning\" *ngIf=\"showCancelButton && !inConfig\" (click)=\"doLoadOriginal(); $event.preventDefault()\">{{\r\n getTextTranslated('cancelBtn') }}</a>\r\n <a href=\"#\" class=\"btn btn-danger\" *ngIf=\"showCancelButton\" (click)=\"close(); $event.preventDefault()\">{{\r\n getTextTranslated('closeDialog') }}</a>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Any additional toolbar buttons to be projected by the consuming app -->\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n<div [ngStyle]=\"{ border: borderCss }\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n</div>", styles: [":host{display:flex;flex-direction:column;align-items:center}:host .toolbar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap}:host .tools{display:inline-flex;flex-direction:row;margin:10px;background:#fff;border-radius:6px;box-shadow:0 3px 10px #0006}:host .tools .brush,:host .tools .commands,:host .tools .colors,:host .tools .actions{display:flex}:host .tools .brush .title,:host .tools .commands .title,:host .tools .colors .title,:host .tools .actions .title{display:flex;vertical-align:middle;background-color:#00a8ff;color:#fff;padding:10px}:host .tools .brush .internal,:host .tools .commands .internal,:host .tools .colors .internal,:host .tools .actions .internal{display:flex;vertical-align:middle;align-items:center;padding:0 15px}:host .tools .brush .internal>*,:host .tools .commands .internal>*,:host .tools .colors .internal>*,:host .tools .actions .internal>*{margin-right:5px}:host .tools .brush .internal .disabled,:host .tools .commands .internal .disabled,:host .tools .colors .internal .disabled,:host .tools .actions .internal .disabled{border:0;color:red}:host .row{display:flex;justify-content:space-around;align-items:center}:host .row:first-child{margin-bottom:10px}:host .size{background-color:#000}:host .size.selected{background-color:#bdbdbd}:host .color{width:28px;height:28px;border-radius:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}:host .color.selected:after{content:\"\";width:10px;height:10px;background:#000;display:flex;border-radius:5px}:host .color.black{background-color:#000}:host .color.black.selected:after{background:#fff}:host .color.white{border:1px solid #a7a7a7}:host .buttons{margin:10px;display:flex;flex-direction:column}:host .button{cursor:pointer;outline:0;border:none;white-space:nowrap;text-decoration:none;vertical-align:baseline;text-align:center;min-width:64px;line-height:36px;padding:3px 16px;border-radius:4px;overflow:visible;transition:background .4s cubic-bezier(.25,.8,.25,1),box-shadow .28s cubic-bezier(.4,0,.2,1);margin:10px}:host .button:hover{text-decoration:none!important}\n"] }]
357
357
  }], ctorParameters: function () { return []; }, propDecorators: { closeDialog: [{
358
358
  type: Output
359
359
  }], src: [{
@@ -400,4 +400,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
400
400
  }], loadOriginal: [{
401
401
  type: Output
402
402
  }] } });
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG13LWltYWdlLWRyYXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvdG13LWltYWdlLWRyYXdlci90bXctaW1hZ2UtZHJhd2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS90bXctaW1hZ2UtZHJhd2VyL3Rtdy1pbWFnZS1kcmF3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUE4QixNQUFNLGVBQWUsQ0FBQztBQUNySSxPQUFPLEVBQUUsTUFBTSxFQUFpQixhQUFhLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFPM0MsTUFBTSxPQUFPLHVCQUF1QjtJQXNFbEM7UUFwRVUsZ0JBQVcsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQU1yRCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUV4QixhQUFRLEdBQWEsS0FBSyxDQUFDO1FBSTNCLFdBQU0sR0FBVyxJQUFJLENB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QXBCLE1BQU07Z0JBQ1UsWUFBWTtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSTE4bkVuLCBJMThuSW50ZXJmYWNlLCBpMThuTGFuZ3VhZ2VzIH0gZnJvbSAnLi9pMThuJztcclxuaW1wb3J0IHsgZmFicmljIH0gZnJvbSAnZmFicmljJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0bXctaW1hZ2UtZHJhd2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdG13LWltYWdlLWRyYXdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdG13LWltYWdlLWRyYXdlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbXdJbWFnZURyYXdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQE91dHB1dCgpIGNsb3NlRGlhbG9nOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzcmM/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcHVibGljIHdpZHRoPzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBoZWlnaHQ/OiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JjZVNpemVDYW52YXMgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JjZVNpemVFeHBvcnQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgZW5hYmxlUmVtb3ZlSW1hZ2UgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgZW5hYmxlTG9hZEFub3RoZXJJbWFnZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBlbmFibGVUb29sdGlwID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHNob3dDYW5jZWxCdXR0b24gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgaW5Db25maWc/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIEB0cy1pZ25vcmVcclxuICBASW5wdXQoJ2kxOG4nKSBwdWJsaWMgaTE4blVzZXI6IEkxOG5JbnRlcmZhY2U7XHJcbiAgQElucHV0KCkgcHVibGljIGxvY2FsZTogc3RyaW5nID0gJ2VuJztcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGxvYWRpbmdUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgcHVibGljIGVycm9yVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgb3V0cHV0TWltZVR5cGUgPSAnaW1hZ2UvanBlZyc7XHJcbiAgQElucHV0KCkgcHVibGljIG91dHB1dFF1YWxpdHkgPSAwLjg7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBib3JkZXJDc3M6IHN0cmluZyA9ICdub25lJztcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGRyYXdpbmdTaXplczogeyBbbmFtZTogc3RyaW5nXTogbnVtYmVyIH0gPSB7XHJcbiAgICBzbWFsbDogNSxcclxuICAgIG1lZGl1bTogMTAsXHJcbiAgICBsYXJnZTogMjUsXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGNvbG9yczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgICBibGFjazogJyMwMDAnLFxyXG4gICAgd2hpdGU6ICcjZmZmJyxcclxuICAgIHllbGxvdzogJyNmZmViM2InLFxyXG4gICAgcmVkOiAnI2Y0NDMzNicsXHJcbiAgICBibHVlOiAnIzIxOTZmMycsXHJcbiAgICBncmVlbjogJyM0Y2FmNTAnLFxyXG4gICAgcHVycGxlOiAnIzdhMDhhZicsXHJcbiAgfTtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBzYXZlOiBFdmVudEVtaXR0ZXI8QmxvYj4gPSBuZXcgRXZlbnRFbWl0dGVyPEJsb2I+KCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyBsb2FkT3JpZ2luYWw6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGN1cnJlbnRUb29sID0gJ2JydXNoJztcclxuICBwdWJsaWMgY3VycmVudFNpemUgPSAnbWVkaXVtJztcclxuICBwdWJsaWMgY3VycmVudENvbG9yID0gJ2JsYWNrJztcclxuICBwdWJsaWMgaTE4bjogSTE4bkludGVyZmFjZSA9IEkxOG5FbjtcclxuXHJcbiAgcHVibGljIGNhblVuZG8gPSBmYWxzZTtcclxuICBwdWJsaWMgY2FuUmVkbyA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgaXNMb2FkaW5nID0gdHJ1ZTtcclxuICBwdWJsaWMgaGFzRXJyb3IgPSBmYWxzZTtcclxuICBwdWJsaWMgZXJyb3JNZXNzYWdlID0gJyc7XHJcblxyXG4gIHByaXZhdGUgY2FudmFzOiBmYWJyaWMuQ2FudmFzO1xyXG4gIHByaXZhdGUgc3RhY2s6IGZhYnJpYy5PYmplY3RbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgY29sb3JzTmFtZTogc3RyaW5nW10gPSBbXTtcclxuICBwdWJsaWMgZHJhd2luZ1NpemVzTmFtZTogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBpbWFnZVVzZWQ/OiBmYWJyaWMuSW1hZ2U7XHJcblxyXG4gIGNvbXBvbmVudEd1aWQ6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbXBvbmVudEd1aWQgPSAneHh4eC14eHh4LXh4eHgteHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsXHJcbiAgICAgICAgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxyXG4gICAgdGhpcy5jb2xvcnNOYW1lID0gT2JqZWN0LmtleXModGhpcy5jb2xvcnMpO1xyXG4gICAgdGhpcy5kcmF3aW5nU2l6ZXNOYW1lID0gT2JqZWN0LmtleXModGhpcy5kcmF3aW5nU2l6ZXMpO1xyXG5cclxuICAgIGNvbnN0IGNhbnZhc1NjYWxlZEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNvbXBvbmVudEd1aWQpO1xyXG4gICAgdGhpcy5jYW52YXMgPSBuZXcgZmFicmljLkNhbnZhcyhjYW52YXNTY2FsZWRFbGVtZW50LCB7XHJcbiAgICAgIGhvdmVyQ3Vyc29yOiAncG9pbnRlcicsXHJcbiAgICAgIGlzRHJhd2luZ01vZGU6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2FudmFzLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7XHJcblxyXG4gICAgaWYgKHRoaXMuc3JjKSB7XHJcbiAgICAgIHRoaXMuaW1wb3J0UGhvdG9Gcm9tU3JjKHRoaXMuc3JjKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy53aWR0aCB8fCAhdGhpcy5oZWlnaHQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHdpZHRoIG9yIGhpZ2h0IGdpdmVuICEnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jYW52YXMuc2V0V2lkdGgodGhpcy53aWR0aCk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNldEhlaWdodCh0aGlzLmhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oJ3BhdGg6Y3JlYXRlZCcsICgpID0+IHtcclxuICAgICAgdGhpcy5zdGFjayA9IFtdO1xyXG4gICAgICB0aGlzLnNldFVuZG9SZWRvKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdFRvb2wodGhpcy5jdXJyZW50VG9vbCk7XHJcbiAgICB0aGlzLnNlbGVjdENvbG9yKHRoaXMuY3VycmVudENvbG9yKTtcclxuICAgIHRoaXMuc2VsZWN0RHJhd2luZ1NpemUodGhpcy5jdXJyZW50U2l6ZSk7XHJcblxyXG4gICAgaWYgKHRoaXMubG9jYWxlICYmIGkxOG5MYW5ndWFnZXNbdGhpcy5sb2NhbGUudG9Mb3dlckNhc2UoKV0pIHtcclxuICAgICAgdGhpcy5pMThuID0gaTE4bkxhbmd1YWdlc1t0aGlzLmxvY2FsZS50b0xvd2VyQ2FzZSgpXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLnNyYyAmJiAhY2hhbmdlcy5zcmMuZmlyc3RDaGFuZ2UgJiYgY2hhbmdlcy5zcmMuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY2hhbmdlcy5zcmMuY3VycmVudFZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMuaW1wb3J0UGhvdG9Gcm9tU3JjKGNoYW5nZXMuc3JjLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlcy5zcmMuY3VycmVudFZhbHVlIGluc3RhbmNlb2YgQmxvYikge1xyXG4gICAgICAgIHRoaXMuaW1wb3J0UGhvdG9Gcm9tQmxvYihjaGFuZ2VzLnNyYy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUb29sc1xyXG4gIHB1YmxpYyBzZWxlY3RUb29sKHRvb2w6IHN0cmluZykge1xyXG4gICAgdGhpcy5jdXJyZW50VG9vbCA9IHRvb2w7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0RHJhd2luZ1NpemUoc2l6ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRTaXplID0gc2l6ZTtcclxuICAgIGlmICh0aGlzLmNhbnZhcykge1xyXG4gICAgICB0aGlzLmNhbnZhcy5mcmVlRHJhd2luZ0JydXNoLndpZHRoID0gdGhpcy5kcmF3aW5nU2l6ZXNbc2l6ZV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0Q29sb3IoY29sb3I6IHN0cmluZykge1xyXG4gICAgdGhpcy5jdXJyZW50Q29sb3IgPSBjb2xvcjtcclxuICAgIGlmICh0aGlzLmNhbnZhcykge1xyXG4gICAgICB0aGlzLmNhbnZhcy5mcmVlRHJhd2luZ0JydXNoLmNvbG9yID0gdGhpcy5jb2xvcnNbY29sb3JdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQWN0aW9uc1xyXG4gIHB1YmxpYyB1bmRvKCkge1xyXG4gICAgaWYgKHRoaXMuY2FuVW5kbykge1xyXG4gICAgICBjb25zdCBsYXN0SWQgPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoIC0gMTtcclxuICAgICAgY29uc3QgbGFzdE9iaiA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKVtsYXN0SWRdO1xyXG4gICAgICB0aGlzLnN0YWNrLnB1c2gobGFzdE9iaik7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShsYXN0T2JqKTtcclxuICAgICAgdGhpcy5zZXRVbmRvUmVkbygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZG8oKSB7XHJcbiAgICBpZiAodGhpcy5jYW5SZWRvKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0SW5TdGFjayA9IHRoaXMuc3RhY2suc3BsaWNlKC0xLCAxKVswXTtcclxuICAgICAgaWYgKGZpcnN0SW5TdGFjaykge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLmluc2VydEF0KGZpcnN0SW5TdGFjaywgdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpLmxlbmd0aCAtIDEsIGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldFVuZG9SZWRvKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJDYW52YXMoKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXMpIHtcclxuICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKC4uLnRoaXMuY2FudmFzLmdldE9iamVjdHMoKSk7XHJcbiAgICAgIHRoaXMuc2V0VW5kb1JlZG8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlSW1hZ2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuZm9yY2VTaXplRXhwb3J0IHx8ICh0aGlzLmZvcmNlU2l6ZUV4cG9ydCAmJiB0aGlzLndpZHRoICYmIHRoaXMuaGVpZ2h0KSkge1xyXG4gICAgICBjb25zdCBjYW52YXNTY2FsZWRFbGVtZW50OiBIVE1MQ2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjb25zdCBjYW52YXNTY2FsZWQgPSBuZXcgZmFicmljLkNhbnZhcyhjYW52YXNTY2FsZWRFbGVtZW50KTtcclxuICAgICAgY2FudmFzU2NhbGVkLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7XHJcblxyXG4gICAgICBuZXcgT2JzZXJ2YWJsZTxmYWJyaWMuQ2FudmFzPihvYnNlcnZlciA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VVc2VkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JjZVNpemVFeHBvcnQpIHtcclxuICAgICAgICAgICAgY2FudmFzU2NhbGVkLnNldFdpZHRoKHRoaXMud2lkdGgpO1xyXG4gICAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0SGVpZ2h0KHRoaXMuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VVc2VkLmNsb25lQXNJbWFnZShpbWFnZUNsb25lZCA9PiB7XHJcbiAgICAgICAgICAgICAgaW1hZ2VDbG9uZWQuc2NhbGVUb1dpZHRoKHRoaXMud2lkdGgsIGZhbHNlKTtcclxuICAgICAgICAgICAgICBpbWFnZUNsb25lZC5zY2FsZVRvSGVpZ2h0KHRoaXMuaGVpZ2h0LCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5zZXRCYWNrZ3JvdW5kSW1hZ2UoaW1hZ2VDbG9uZWQsIChpbWc6IEhUTUxJbWFnZUVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghaW1nKSB7XHJcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBFcnJvcignSW1wb3NzaWJsZSB0byBkcmF3IHRoZSBpbWFnZSBvbiB0aGUgdGVtcG9yYXJ5IGNhbnZhcycpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGNhbnZhc1NjYWxlZCk7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcclxuICAgICAgICAgICAgICAgIG9yaWdpblg6ICdsZWZ0JyxcclxuICAgICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2FudmFzU2NhbGVkLnNldEJhY2tncm91bmRJbWFnZSh0aGlzLmltYWdlVXNlZCwgKGltZzogSFRNTEltYWdlRWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghaW1nKSB7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ0ltcG9zc2libGUgdG8gZHJhdyB0aGUgaW1hZ2Ugb24gdGhlIHRlbXBvcmFyeSBjYW52YXMnKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0V2lkdGgoaW1nLndpZHRoKTtcclxuICAgICAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0SGVpZ2h0KGltZy5oZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGNhbnZhc1NjYWxlZCk7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcclxuICAgICAgICAgICAgICBvcmlnaW5YOiAnbGVmdCcsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNhbnZhc1NjYWxlZC5zZXRXaWR0aCh0aGlzLndpZHRoKTtcclxuICAgICAgICAgIGNhbnZhc1NjYWxlZC5zZXRIZWlnaHQodGhpcy5oZWlnaHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IHByb2Nlc3MgPSBvZihjYW52YXNTY2FsZWQpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCByYXRpb1ggPSBjYW52YXNTY2FsZWQuZ2V0V2lkdGgoKSAvIHRoaXMuY2FudmFzLmdldFdpZHRoKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhdGlvWSA9IGNhbnZhc1NjYWxlZC5nZXRIZWlnaHQoKSAvIHRoaXMuY2FudmFzLmdldEhlaWdodCgpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpLmZvckVhY2goKG9yaWdpbmFsT2JqZWN0OiBmYWJyaWMuT2JqZWN0LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICBwcm9jZXNzID0gcHJvY2Vzcy5waXBlKHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8ZmFicmljLkNhbnZhcz4ob2JzZXJ2ZXJPYmplY3QgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbE9iamVjdC5jbG9uZSgoY2xvbmVkT2JqZWN0OiBmYWJyaWMuT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVkT2JqZWN0LnNldCgnbGVmdCcsIG9yaWdpbmFsT2JqZWN0LmxlZnQgKiByYXRpb1gpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zZXQoJ3RvcCcsIG9yaWdpbmFsT2JqZWN0LnRvcCAqIHJhdGlvWSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVkT2JqZWN0LnNjYWxlVG9XaWR0aChvcmlnaW5hbE9iamVjdC53aWR0aCAqIHJhdGlvWCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVkT2JqZWN0LnNjYWxlVG9IZWlnaHQob3JpZ2luYWxPYmplY3QuaGVpZ2h0ICogcmF0aW9ZKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FudmFzU2NhbGVkLmluc2VydEF0KGNsb25lZE9iamVjdCwgaSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5yZW5kZXJBbGwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJPYmplY3QubmV4dChjYW52YXNTY2FsZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyT2JqZWN0LmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBwcm9jZXNzO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgY2FudmFzU2NhbGVkLnJlbmRlckFsbCgpO1xyXG4gICAgICAgIGNhbnZhc1NjYWxlZC5nZXRFbGVtZW50KCkudG9CbG9iKFxyXG4gICAgICAgICAgKGRhdGE6IEJsb2IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zYXZlLmVtaXQoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdGhpcy5vdXRwdXRNaW1lVHlwZSxcclxuICAgICAgICAgIHRoaXMub3V0cHV0UXVhbGl0eVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYW52YXMuZ2V0RWxlbWVudCgpLnRvQmxvYihcclxuICAgICAgICAoZGF0YTogQmxvYikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zYXZlLmVtaXQoZGF0YSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLm91dHB1dE1pbWVUeXBlLFxyXG4gICAgICAgIHRoaXMub3V0cHV0UXVhbGl0eVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRvTG9hZE9yaWdpbmFsKCkge1xyXG4gICAgdGhpcy5sb2FkT3JpZ2luYWwuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRleHRUcmFuc2xhdGVkKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyT2sgPSBuYW1lLnNwbGl0KCcuJykucmVkdWNlKChvLCBpKSA9PiBvW2ldLCB0aGlzLmkxOG4gYXMgYW55KTtcclxuXHJcbiAgICBpZiAodGhpcy5pMThuVXNlcikge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHN0ciA9IG5hbWUuc3BsaXQoJy4nKS5yZWR1Y2UoKG8sIGkpID0+IG9baV0sIHRoaXMuaTE4blVzZXIgYXMgYW55KTtcclxuICAgICAgICBpZiAoc3RyKSB7XHJcbiAgICAgICAgICBzdHJPayA9IHN0cjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvLyBpZiB3ZSBwYXNzIGhlcmUsIGlnbm9yZWRcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghc3RyT2spIHtcclxuICAgICAgY29uc29sZS5lcnJvcihuYW1lICsgJyB0cmFuc2xhdGlvbiBub3QgZm91bmQgIScpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHJPaztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUb29sdGlwVHJhbnNsYXRlZChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlVG9vbHRpcCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRUZXh0VHJhbnNsYXRlZChuYW1lKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVbmRvUmVkbygpIHtcclxuICAgIHRoaXMuY2FuVW5kbyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggPiAwO1xyXG4gICAgdGhpcy5jYW5SZWRvID0gdGhpcy5zdGFjay5sZW5ndGggPiAwO1xyXG4gICAgLy8gdGhpcy5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW1wb3J0UGhvdG9Gcm9tRmlsZShldmVudDogRXZlbnQgfCBhbnkpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuZmlsZXMgJiYgZXZlbnQudGFyZ2V0LmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgICAgaWYgKGZpbGUudHlwZS5tYXRjaCgnaW1hZ2UuKicpKSB7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRQaG90b0Zyb21CbG9iKGZpbGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFuIGltYWdlICEnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUltYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuaW1hZ2VVc2VkKSB7XHJcbiAgICAgIHRoaXMuaW1hZ2VVc2VkLmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5pbWFnZVVzZWQgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jYW52YXMuYmFja2dyb3VuZEltYWdlID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCkge1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZXRXaWR0aCh0aGlzLndpZHRoKTtcclxuICAgICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KHRoaXMuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaGFzSW1hZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmNhbnZhcy5iYWNrZ3JvdW5kSW1hZ2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGltcG9ydFBob3RvRnJvbVNyYyhzcmM6IHN0cmluZykge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IGlzRmlyc3RUcnkgPSB0cnVlO1xyXG4gICAgY29uc3QgaW1nRWwgPSBuZXcgSW1hZ2UoKTtcclxuICAgIGltZ0VsLnNldEF0dHJpYnV0ZSgnY3Jvc3NPcmlnaW4nLCAnYW5vbnltb3VzJyk7XHJcbiAgICBpbWdFbC5zcmMgPSBzcmM7XHJcbiAgICBpbWdFbC5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICAvLyBSZXRyeSB3aXRoIGNvcnMgcHJveHlcclxuICAgICAgaWYgKGlzRmlyc3RUcnkpIHtcclxuICAgICAgICBpbWdFbC5zcmMgPSAnaHR0cHM6Ly9jb3JzLWFueXdoZXJlLmhlcm9rdWFwcC5jb20vJyArIHRoaXMuc3JjO1xyXG4gICAgICAgIGlzRmlyc3RUcnkgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRUZXh0VHJhbnNsYXRlZCgnbG9hZEVycm9yJykucmVwbGFjZSgnJUAnLCB0aGlzLnNyYyBhcyBzdHJpbmcpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgaW1nRWwub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmltYWdlVXNlZCA9IG5ldyBmYWJyaWMuSW1hZ2UoaW1nRWwpO1xyXG5cclxuICAgICAgdGhpcy5pbWFnZVVzZWQuY2xvbmVBc0ltYWdlKGltYWdlID0+IHtcclxuICAgICAgICBsZXQgd2lkdGggPSBpbWdFbC53aWR0aDtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gaW1nRWwuaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy53aWR0aCkge1xyXG4gICAgICAgICAgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5oZWlnaHQpIHtcclxuICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW1hZ2Uuc2NhbGVUb1dpZHRoKHdpZHRoLCBmYWxzZSk7XHJcbiAgICAgICAgaW1hZ2Uuc2NhbGVUb0hlaWdodChoZWlnaHQsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QmFja2dyb3VuZEltYWdlKGltYWdlLCAoKGltZzogSFRNTEltYWdlRWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGltZykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JjZVNpemVDYW52YXMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRXaWR0aCh3aWR0aCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KGhlaWdodCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0V2lkdGgoaW1hZ2UuZ2V0U2NhbGVkV2lkdGgoKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KGltYWdlLmdldFNjYWxlZEhlaWdodCgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLCB7XHJcbiAgICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsXHJcbiAgICAgICAgICBvcmlnaW5YOiAnbGVmdCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGltcG9ydFBob3RvRnJvbUJsb2IoZmlsZTogQmxvYiB8IEZpbGUpIHtcclxuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgIHJlYWRlci5vbmxvYWQgPSAoZXZ0UmVhZGVyOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGV2dFJlYWRlci50YXJnZXQucmVhZHlTdGF0ZSA9PSBGaWxlUmVhZGVyLkRPTkUpIHtcclxuICAgICAgICB0aGlzLmltcG9ydFBob3RvRnJvbVNyYyhldnRSZWFkZXIudGFyZ2V0LnJlc3VsdCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW1wb3J0UGhvdG9Gcm9tVXJsKCkge1xyXG4gICAgY29uc3QgdXJsID0gcHJvbXB0KHRoaXMuZ2V0VG9vbHRpcFRyYW5zbGF0ZWQoJ2xvYWRJbWFnZVVybCcpKTtcclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgdGhpcy5pbXBvcnRQaG90b0Zyb21TcmModXJsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZSgpe1xyXG4gICAgdGhpcy5jbG9zZURpYWxvZy5lbWl0KCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJsb2FkaW5nXCIgKm5nSWY9XCJpc0xvYWRpbmcgJiYgbG9hZGluZ1RlbXBsYXRlXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImVycm9yXCIgKm5nSWY9XCJoYXNFcnJvclwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlcnJvclRlbXBsYXRlID8gZXJyb3JUZW1wbGF0ZSA6IGRlZmF1bHRFcnJvclwiPjwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPG5nLXRlbXBsYXRlICNkZWZhdWx0TG9hZGluZz5cclxuICAgIDxwPnt7IGdldFRleHRUcmFuc2xhdGVkKCdsb2FkaW5nJykgfX08L3A+XHJcbjwvbmctdGVtcGxhdGU+IC0tPlxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRFcnJvcj5cclxuICA8cD57eyBlcnJvck1lc3NhZ2UgfX08L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48ZGl2IGNsYXNzPVwidG9vbGJhclwiICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0b29sc1wiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImJydXNoXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cInRpdGxlXCI+dG9vbHM8L2k+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW50ZXJuYWxcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBidG5cIiBbY2xhc3Muc2VsZWN0ZWRdPVwiY3VycmVudFRvb2wgPT0gJ2JydXNoJ1wiIChjbGljayk9XCJzZWxlY3RUb29sKCdicnVzaCcpXCJcclxuICAgICAgICAgICAgICBbdGl0bGVdPVwiZ2V0VG9vbHRpcFRyYW5zbGF0ZWQoJ3Rvb2xzLmJydXNoJylcIj48bWF0LWljb24+YnJ1c2g8L21hdC1pY29uPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGRyYXdpbmdTaXplTmFtZSBvZiBkcmF3aW5nU2l6ZXNOYW1lXCIgY2xhc3M9XCJzaXplIGJ0biBtci0xXCJcclxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiZHJhd2luZ1NpemVzW2RyYXdpbmdTaXplTmFtZV0gKiAwLjggKyA4XCJcclxuICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRyYXdpbmdTaXplc1tkcmF3aW5nU2l6ZU5hbWVdICogMC44ICsgOFwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlclJhZGl1cy5weF09XCJkcmF3aW5nU2l6ZXNbZHJhd2luZ1NpemVOYW1lXSAqIDAuNCArIDRcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJjdXJyZW50U2l6ZSA9PSBkcmF3aW5nU2l6ZU5hbWVcIiBbdGl0bGVdPVwiZ2V0VG9vbHRpcFRyYW5zbGF0ZWQoJ3NpemVzLicgKyBkcmF3aW5nU2l6ZU5hbWUpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RHJhd2luZ1NpemUoZHJhd2luZ1NpemVOYW1lKVwiPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29tbWFuZHNcIj5cclxuICAgICAgICA8aSBjbGFzcz1cInRpdGxlXCI+b3B0aW9uczwvaT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW50ZXJuYWxcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgYnRuXCIgW2NsYXNzLmRpc2FibGVkXT1cIiFjYW5VbmRvXCIgKGNsaWNrKT1cInVuZG8oKVwiXHJcbiAgICAgICAgICBbdGl0bGVdPVwiZ2V0VG9vbHRpcFRyYW5zbGF0ZWQoJ3VuZG8nKVwiPjxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj48L2k+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGJ0blwiIFtjbGFzcy5kaXNhYmxlZF09XCIhY2FuUmVkb1wiIChjbGljayk9XCJyZWRvKClcIlxyXG4gICAgICAgICAgICBbdGl0bGVdPVwiZ2V0VG9vbHRpcFRyYW5zbGF0ZWQoJ3JlZG8nKVwiPjxtYXQtaWNvbj5yZWRvPC9tYXQtaWNvbj48L2k+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGJ0blwiIChjbGljayk9XCJjbGVhckNhbnZhcygpXCIgW3RpdGxlXT1cImdldFRvb2x0aXBUcmFuc2xhdGVkKCdjbGVhcicpXCI+PG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj48L2k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbG9yc1wiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwidGl0bGVcIj5jb2xvcnM8L2k+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImludGVybmFsXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2xvck5hbWUgb2YgY29sb3JzTmFtZVwiIFtjbGFzcy5zZWxlY3RlZF09XCJjdXJyZW50Q29sb3IgPT0gY29sb3JOYW1lXCIgY2xhc3M9XCJjb2xvclwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2xvck5hbWVcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJjb2xvcnNbY29sb3JOYW1lXVwiXHJcbiAgICAgICAgICBbdGl0bGVdPVwiZ2V0VG9vbHRpcFRyYW5zbGF0ZWQoJ2NvbG9ycy4nICsgY29sb3JOYW1lKVwiIChjbGljayk9XCJzZWxlY3RDb2xvcihjb2xvck5hbWUpXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwidGl0bGVcIj5hY3Rpb25zPC9pPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnRlcm5hbFwiPlxyXG4gICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJzYXZlSW1hZ2UoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAqbmdJZj1cIiFpbkNvbmZpZ1wiPnt7XHJcbiAgICAgICAgICAgIGdldFRleHRUcmFuc2xhdGVkKCdzYXZlQnRuJykgfX08L2E+XHJcbiAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nXCIgKm5nSWY9XCJzaG93Q2FuY2VsQnV0dG9uICYmICFpbkNvbmZpZ1wiIChjbGljayk9XCJkb0xvYWRPcmlnaW5hbCgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPnt7XHJcbiAgICAgICAgICAgIGdldFRleHRUcmFuc2xhdGVkKCdjYW5jZWxCdG4nKSB9fTwvYT5cclxuICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiICpuZ0lmPVwic2hvd0NhbmNlbEJ1dHRvblwiIChjbGljayk9XCJjbG9zZSgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPnt7XHJcbiAgICAgICAgICAgIGdldFRleHRUcmFuc2xhdGVkKCdjbG9zZURpYWxvZycpIH19PC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBBbnkgYWRkaXRpb25hbCB0b29sYmFyIGJ1dHRvbnMgdG8gYmUgcHJvamVjdGVkIGJ5IHRoZSBjb25zdW1pbmcgYXBwIC0tPlxyXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuPC9kaXY+XHJcblxyXG48ZGl2IFtuZ1N0eWxlXT1cInsgYm9yZGVyOiBib3JkZXJDc3MgfVwiPlxyXG4gIDxjYW52YXMgW2lkXT1cImNvbXBvbmVudEd1aWRcIj48L2NhbnZhcz5cclxuPC9kaXY+Il19
403
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG13LWltYWdlLWRyYXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvdG13LWltYWdlLWRyYXdlci90bXctaW1hZ2UtZHJhd2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS90bXctaW1hZ2UtZHJhd2VyL3Rtdy1pbWFnZS1kcmF3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUE4QixNQUFNLGVBQWUsQ0FBQztBQUNySSxPQUFPLEVBQUUsTUFBTSxFQUFpQixhQUFhLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFPM0MsTUFBTSxPQUFPLHVCQUF1QjtJQXNFbEM7UUFwRVUsZ0JBQVcsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQU1yRCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUV4QixhQUFRLEdBQWEsS0FBSyxDQUFDO1FBSTNCLFdBQU0sR0FBVyxJQUFJLENB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QUFwQixNQUFNO2dCQUNVLFlBQVk7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEkxOG5FbiwgSTE4bkludGVyZmFjZSwgaTE4bkxhbmd1YWdlcyB9IGZyb20gJy4vaTE4bic7XHJcbmltcG9ydCB7IGZhYnJpYyB9IGZyb20gJ2ZhYnJpYyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndG13LWltYWdlLWRyYXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Rtdy1pbWFnZS1kcmF3ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Rtdy1pbWFnZS1kcmF3ZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG13SW1hZ2VEcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBPdXRwdXQoKSBjbG9zZURpYWxvZzogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgc3JjPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB3aWR0aD86IG51bWJlcjtcclxuICBASW5wdXQoKSBwdWJsaWMgaGVpZ2h0PzogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgZm9yY2VTaXplQ2FudmFzID0gdHJ1ZTtcclxuICBASW5wdXQoKSBwdWJsaWMgZm9yY2VTaXplRXhwb3J0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGVuYWJsZVJlbW92ZUltYWdlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGVuYWJsZUxvYWRBbm90aGVySW1hZ2UgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgZW5hYmxlVG9vbHRpcCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93Q2FuY2VsQnV0dG9uID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGluQ29uZmlnPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBAdHMtaWdub3JlXHJcbiAgQElucHV0KCdpMThuJykgcHVibGljIGkxOG5Vc2VyOiBJMThuSW50ZXJmYWNlO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2NhbGU6IHN0cmluZyA9ICdlbic7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBlcnJvclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIG91dHB1dE1pbWVUeXBlID0gJ2ltYWdlL2pwZWcnO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBvdXRwdXRRdWFsaXR5ID0gMC44O1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgYm9yZGVyQ3NzOiBzdHJpbmcgPSAnbm9uZSc7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBkcmF3aW5nU2l6ZXM6IHsgW25hbWU6IHN0cmluZ106IG51bWJlciB9ID0ge1xyXG4gICAgc21hbGw6IDUsXHJcbiAgICBtZWRpdW06IDEwLFxyXG4gICAgbGFyZ2U6IDI1LFxyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBjb2xvcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgYmxhY2s6ICcjMDAwJyxcclxuICAgIHdoaXRlOiAnI2ZmZicsXHJcbiAgICB5ZWxsb3c6ICcjZmZlYjNiJyxcclxuICAgIHJlZDogJyNmNDQzMzYnLFxyXG4gICAgYmx1ZTogJyMyMTk2ZjMnLFxyXG4gICAgZ3JlZW46ICcjNGNhZjUwJyxcclxuICAgIHB1cnBsZTogJyM3YTA4YWYnLFxyXG4gIH07XHJcblxyXG4gIEBPdXRwdXQoKSBwdWJsaWMgc2F2ZTogRXZlbnRFbWl0dGVyPEJsb2I+ID0gbmV3IEV2ZW50RW1pdHRlcjxCbG9iPigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgbG9hZE9yaWdpbmFsOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50VG9vbCA9ICdicnVzaCc7XHJcbiAgcHVibGljIGN1cnJlbnRTaXplID0gJ21lZGl1bSc7XHJcbiAgcHVibGljIGN1cnJlbnRDb2xvciA9ICdibGFjayc7XHJcbiAgcHVibGljIGkxOG46IEkxOG5JbnRlcmZhY2UgPSBJMThuRW47XHJcblxyXG4gIHB1YmxpYyBjYW5VbmRvID0gZmFsc2U7XHJcbiAgcHVibGljIGNhblJlZG8gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGlzTG9hZGluZyA9IHRydWU7XHJcbiAgcHVibGljIGhhc0Vycm9yID0gZmFsc2U7XHJcbiAgcHVibGljIGVycm9yTWVzc2FnZSA9ICcnO1xyXG5cclxuICBwcml2YXRlIGNhbnZhczogZmFicmljLkNhbnZhcztcclxuICBwcml2YXRlIHN0YWNrOiBmYWJyaWMuT2JqZWN0W10gPSBbXTtcclxuXHJcbiAgcHVibGljIGNvbG9yc05hbWU6IHN0cmluZ1tdID0gW107XHJcbiAgcHVibGljIGRyYXdpbmdTaXplc05hbWU6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHByaXZhdGUgaW1hZ2VVc2VkPzogZmFicmljLkltYWdlO1xyXG5cclxuICBjb21wb25lbnRHdWlkOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21wb25lbnRHdWlkID0gJ3h4eHgteHh4eC14eHh4LXh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLFxyXG4gICAgICAgIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcclxuICAgIHRoaXMuY29sb3JzTmFtZSA9IE9iamVjdC5rZXlzKHRoaXMuY29sb3JzKTtcclxuICAgIHRoaXMuZHJhd2luZ1NpemVzTmFtZSA9IE9iamVjdC5rZXlzKHRoaXMuZHJhd2luZ1NpemVzKTtcclxuXHJcbiAgICBjb25zdCBjYW52YXNTY2FsZWRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5jb21wb25lbnRHdWlkKSBhcyBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgIHRoaXMuY2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXMoY2FudmFzU2NhbGVkRWxlbWVudCwge1xyXG4gICAgICBob3ZlckN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICBpc0RyYXdpbmdNb2RlOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNhbnZhcy5iYWNrZ3JvdW5kQ29sb3IgPSAnd2hpdGUnO1xyXG5cclxuICAgIGlmICh0aGlzLnNyYykge1xyXG4gICAgICB0aGlzLmltcG9ydFBob3RvRnJvbVNyYyh0aGlzLnNyYyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoIXRoaXMud2lkdGggfHwgIXRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB3aWR0aCBvciBoaWdodCBnaXZlbiAhJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2FudmFzLnNldFdpZHRoKHRoaXMud2lkdGgpO1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZXRIZWlnaHQodGhpcy5oZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKCdwYXRoOmNyZWF0ZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RhY2sgPSBbXTtcclxuICAgICAgdGhpcy5zZXRVbmRvUmVkbygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RUb29sKHRoaXMuY3VycmVudFRvb2wpO1xyXG4gICAgdGhpcy5zZWxlY3RDb2xvcih0aGlzLmN1cnJlbnRDb2xvcik7XHJcbiAgICB0aGlzLnNlbGVjdERyYXdpbmdTaXplKHRoaXMuY3VycmVudFNpemUpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvY2FsZSAmJiBpMThuTGFuZ3VhZ2VzW3RoaXMubG9jYWxlLnRvTG93ZXJDYXNlKCldKSB7XHJcbiAgICAgIHRoaXMuaTE4biA9IGkxOG5MYW5ndWFnZXNbdGhpcy5sb2NhbGUudG9Mb3dlckNhc2UoKV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlcy5zcmMgJiYgIWNoYW5nZXMuc3JjLmZpcnN0Q2hhbmdlICYmIGNoYW5nZXMuc3JjLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICBpZiAodHlwZW9mIGNoYW5nZXMuc3JjLmN1cnJlbnRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aGlzLmltcG9ydFBob3RvRnJvbVNyYyhjaGFuZ2VzLnNyYy5jdXJyZW50VmFsdWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZXMuc3JjLmN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIEJsb2IpIHtcclxuICAgICAgICB0aGlzLmltcG9ydFBob3RvRnJvbUJsb2IoY2hhbmdlcy5zcmMuY3VycmVudFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gVG9vbHNcclxuICBwdWJsaWMgc2VsZWN0VG9vbCh0b29sOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY3VycmVudFRvb2wgPSB0b29sO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdERyYXdpbmdTaXplKHNpemU6IHN0cmluZykge1xyXG4gICAgdGhpcy5jdXJyZW50U2l6ZSA9IHNpemU7XHJcbiAgICBpZiAodGhpcy5jYW52YXMpIHtcclxuICAgICAgdGhpcy5jYW52YXMuZnJlZURyYXdpbmdCcnVzaC53aWR0aCA9IHRoaXMuZHJhd2luZ1NpemVzW3NpemVdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdENvbG9yKGNvbG9yOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY3VycmVudENvbG9yID0gY29sb3I7XHJcbiAgICBpZiAodGhpcy5jYW52YXMpIHtcclxuICAgICAgdGhpcy5jYW52YXMuZnJlZURyYXdpbmdCcnVzaC5jb2xvciA9IHRoaXMuY29sb3JzW2NvbG9yXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEFjdGlvbnNcclxuICBwdWJsaWMgdW5kbygpIHtcclxuICAgIGlmICh0aGlzLmNhblVuZG8pIHtcclxuICAgICAgY29uc3QgbGFzdElkID0gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpLmxlbmd0aCAtIDE7XHJcbiAgICAgIGNvbnN0IGxhc3RPYmogPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKClbbGFzdElkXTtcclxuICAgICAgdGhpcy5zdGFjay5wdXNoKGxhc3RPYmopO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZW1vdmUobGFzdE9iaik7XHJcbiAgICAgIHRoaXMuc2V0VW5kb1JlZG8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWRvKCkge1xyXG4gICAgaWYgKHRoaXMuY2FuUmVkbykge1xyXG4gICAgICBjb25zdCBmaXJzdEluU3RhY2sgPSB0aGlzLnN0YWNrLnNwbGljZSgtMSwgMSlbMF07XHJcbiAgICAgIGlmIChmaXJzdEluU3RhY2spIHtcclxuICAgICAgICB0aGlzLmNhbnZhcy5pbnNlcnRBdChmaXJzdEluU3RhY2ssIHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggLSAxLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRVbmRvUmVkbygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyQ2FudmFzKCkge1xyXG4gICAgaWYgKHRoaXMuY2FudmFzKSB7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlbW92ZSguLi50aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkpO1xyXG4gICAgICB0aGlzLnNldFVuZG9SZWRvKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUltYWdlKCkge1xyXG4gICAgaWYgKCF0aGlzLmZvcmNlU2l6ZUV4cG9ydCB8fCAodGhpcy5mb3JjZVNpemVFeHBvcnQgJiYgdGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCkpIHtcclxuICAgICAgY29uc3QgY2FudmFzU2NhbGVkRWxlbWVudDogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgY29uc3QgY2FudmFzU2NhbGVkID0gbmV3IGZhYnJpYy5DYW52YXMoY2FudmFzU2NhbGVkRWxlbWVudCk7XHJcbiAgICAgIGNhbnZhc1NjYWxlZC5iYWNrZ3JvdW5kQ29sb3IgPSAnd2hpdGUnO1xyXG5cclxuICAgICAgbmV3IE9ic2VydmFibGU8ZmFicmljLkNhbnZhcz4ob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlVXNlZCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZm9yY2VTaXplRXhwb3J0KSB7XHJcbiAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5zZXRXaWR0aCh0aGlzLndpZHRoKTtcclxuICAgICAgICAgICAgY2FudmFzU2NhbGVkLnNldEhlaWdodCh0aGlzLmhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmltYWdlVXNlZC5jbG9uZUFzSW1hZ2UoaW1hZ2VDbG9uZWQgPT4ge1xyXG4gICAgICAgICAgICAgIGltYWdlQ2xvbmVkLnNjYWxlVG9XaWR0aCh0aGlzLndpZHRoLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgaW1hZ2VDbG9uZWQuc2NhbGVUb0hlaWdodCh0aGlzLmhlaWdodCwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0QmFja2dyb3VuZEltYWdlKGltYWdlQ2xvbmVkLCAoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWltZykge1xyXG4gICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ0ltcG9zc2libGUgdG8gZHJhdyB0aGUgaW1hZ2Ugb24gdGhlIHRlbXBvcmFyeSBjYW52YXMnKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChjYW52YXNTY2FsZWQpO1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiAnbGVmdCcsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJ1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5zZXRCYWNrZ3JvdW5kSW1hZ2UodGhpcy5pbWFnZVVzZWQsIChpbWc6IEhUTUxJbWFnZUVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWltZykge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IobmV3IEVycm9yKCdJbXBvc3NpYmxlIHRvIGRyYXcgdGhlIGltYWdlIG9uIHRoZSB0ZW1wb3JhcnkgY2FudmFzJykpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY2FudmFzU2NhbGVkLnNldFdpZHRoKGltZy53aWR0aCk7XHJcbiAgICAgICAgICAgICAgY2FudmFzU2NhbGVkLnNldEhlaWdodChpbWcuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChjYW52YXNTY2FsZWQpO1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogJ2xlZnQnLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0V2lkdGgodGhpcy53aWR0aCk7XHJcbiAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0SGVpZ2h0KHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIGxldCBwcm9jZXNzID0gb2YoY2FudmFzU2NhbGVkKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcmF0aW9YID0gY2FudmFzU2NhbGVkLmdldFdpZHRoKCkgLyB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgICAgICAgICBjb25zdCByYXRpb1kgPSBjYW52YXNTY2FsZWQuZ2V0SGVpZ2h0KCkgLyB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5mb3JFYWNoKChvcmlnaW5hbE9iamVjdDogZmFicmljLk9iamVjdCwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcHJvY2VzcyA9IHByb2Nlc3MucGlwZShzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGZhYnJpYy5DYW52YXM+KG9ic2VydmVyT2JqZWN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxPYmplY3QuY2xvbmUoKGNsb25lZE9iamVjdDogZmFicmljLk9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zZXQoJ2xlZnQnLCBvcmlnaW5hbE9iamVjdC5sZWZ0ICogcmF0aW9YKTtcclxuICAgICAgICAgICAgICAgICAgICBjbG9uZWRPYmplY3Quc2V0KCd0b3AnLCBvcmlnaW5hbE9iamVjdC50b3AgKiByYXRpb1kpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zY2FsZVRvV2lkdGgob3JpZ2luYWxPYmplY3Qud2lkdGggKiByYXRpb1gpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zY2FsZVRvSGVpZ2h0KG9yaWdpbmFsT2JqZWN0LmhlaWdodCAqIHJhdGlvWSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5pbnNlcnRBdChjbG9uZWRPYmplY3QsIGksIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBjYW52YXNTY2FsZWQucmVuZGVyQWxsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyT2JqZWN0Lm5leHQoY2FudmFzU2NhbGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlck9iamVjdC5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcHJvY2VzcztcclxuICAgICAgICB9KSxcclxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGNhbnZhc1NjYWxlZC5yZW5kZXJBbGwoKTtcclxuICAgICAgICBjYW52YXNTY2FsZWQuZ2V0RWxlbWVudCgpLnRvQmxvYihcclxuICAgICAgICAgIChkYXRhOiBCbG9iKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZS5lbWl0KGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRoaXMub3V0cHV0TWltZVR5cGUsXHJcbiAgICAgICAgICB0aGlzLm91dHB1dFF1YWxpdHlcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FudmFzLmdldEVsZW1lbnQoKS50b0Jsb2IoXHJcbiAgICAgICAgKGRhdGE6IEJsb2IpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2F2ZS5lbWl0KGRhdGEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGhpcy5vdXRwdXRNaW1lVHlwZSxcclxuICAgICAgICB0aGlzLm91dHB1dFF1YWxpdHlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb0xvYWRPcmlnaW5hbCgpIHtcclxuICAgIHRoaXMubG9hZE9yaWdpbmFsLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUZXh0VHJhbnNsYXRlZChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IHN0ck9rID0gbmFtZS5zcGxpdCgnLicpLnJlZHVjZSgobywgaSkgPT4gb1tpXSwgdGhpcy5pMThuIGFzIGFueSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaTE4blVzZXIpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBzdHIgPSBuYW1lLnNwbGl0KCcuJykucmVkdWNlKChvLCBpKSA9PiBvW2ldLCB0aGlzLmkxOG5Vc2VyIGFzIGFueSk7XHJcbiAgICAgICAgaWYgKHN0cikge1xyXG4gICAgICAgICAgc3RyT2sgPSBzdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgLy8gaWYgd2UgcGFzcyBoZXJlLCBpZ25vcmVkXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXN0ck9rKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IobmFtZSArICcgdHJhbnNsYXRpb24gbm90IGZvdW5kICEnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyT2s7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VG9vbHRpcFRyYW5zbGF0ZWQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmVuYWJsZVRvb2x0aXApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VGV4dFRyYW5zbGF0ZWQobmFtZSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VW5kb1JlZG8oKSB7XHJcbiAgICB0aGlzLmNhblVuZG8gPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoID4gMDtcclxuICAgIHRoaXMuY2FuUmVkbyA9IHRoaXMuc3RhY2subGVuZ3RoID4gMDtcclxuICAgIC8vIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGltcG9ydFBob3RvRnJvbUZpbGUoZXZlbnQ6IEV2ZW50IHwgYW55KSB7XHJcbiAgICBpZiAoZXZlbnQudGFyZ2V0LmZpbGVzICYmIGV2ZW50LnRhcmdldC5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICAgIGlmIChmaWxlLnR5cGUubWF0Y2goJ2ltYWdlLionKSkge1xyXG4gICAgICAgIHRoaXMuaW1wb3J0UGhvdG9Gcm9tQmxvYihmaWxlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbiBpbWFnZSAhJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVJbWFnZSgpIHtcclxuICAgIGlmICh0aGlzLmltYWdlVXNlZCkge1xyXG4gICAgICB0aGlzLmltYWdlVXNlZC5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMuaW1hZ2VVc2VkID0gbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuY2FudmFzLmJhY2tncm91bmRJbWFnZSA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpIHtcclxuICAgICAgdGhpcy5jYW52YXMuc2V0V2lkdGgodGhpcy53aWR0aCk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNldEhlaWdodCh0aGlzLmhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGhhc0ltYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5jYW52YXMuYmFja2dyb3VuZEltYWdlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbXBvcnRQaG90b0Zyb21TcmMoc3JjOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGxldCBpc0ZpcnN0VHJ5ID0gdHJ1ZTtcclxuICAgIGNvbnN0IGltZ0VsID0gbmV3IEltYWdlKCk7XHJcbiAgICBpbWdFbC5zZXRBdHRyaWJ1dGUoJ2Nyb3NzT3JpZ2luJywgJ2Fub255bW91cycpO1xyXG4gICAgaW1nRWwuc3JjID0gc3JjO1xyXG4gICAgaW1nRWwub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgLy8gUmV0cnkgd2l0aCBjb3JzIHByb3h5XHJcbiAgICAgIGlmIChpc0ZpcnN0VHJ5KSB7XHJcbiAgICAgICAgaW1nRWwuc3JjID0gJ2h0dHBzOi8vY29ycy1hbnl3aGVyZS5oZXJva3VhcHAuY29tLycgKyB0aGlzLnNyYztcclxuICAgICAgICBpc0ZpcnN0VHJ5ID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0VGV4dFRyYW5zbGF0ZWQoJ2xvYWRFcnJvcicpLnJlcGxhY2UoJyVAJywgdGhpcy5zcmMgYXMgc3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGltZ0VsLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pbWFnZVVzZWQgPSBuZXcgZmFicmljLkltYWdlKGltZ0VsKTtcclxuXHJcbiAgICAgIHRoaXMuaW1hZ2VVc2VkLmNsb25lQXNJbWFnZShpbWFnZSA9PiB7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gaW1nRWwud2lkdGg7XHJcbiAgICAgICAgbGV0IGhlaWdodCA9IGltZ0VsLmhlaWdodDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMud2lkdGgpIHtcclxuICAgICAgICAgIHdpZHRoID0gdGhpcy53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGltYWdlLnNjYWxlVG9XaWR0aCh3aWR0aCwgZmFsc2UpO1xyXG4gICAgICAgIGltYWdlLnNjYWxlVG9IZWlnaHQoaGVpZ2h0LCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzLnNldEJhY2tncm91bmRJbWFnZShpbWFnZSwgKChpbWc6IEhUTUxJbWFnZUVsZW1lbnQpID0+IHtcclxuICAgICAgICAgIGlmIChpbWcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9yY2VTaXplQ2FudmFzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0V2lkdGgod2lkdGgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldEhlaWdodChoZWlnaHQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldFdpZHRoKGltYWdlLmdldFNjYWxlZFdpZHRoKCkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldEhlaWdodChpbWFnZS5nZXRTY2FsZWRIZWlnaHQoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSwge1xyXG4gICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxyXG4gICAgICAgICAgb3JpZ2luWDogJ2xlZnQnLFxyXG4gICAgICAgICAgb3JpZ2luWTogJ3RvcCdcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbXBvcnRQaG90b0Zyb21CbG9iKGZpbGU6IEJsb2IgfCBGaWxlKSB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICByZWFkZXIub25sb2FkID0gKGV2dFJlYWRlcjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChldnRSZWFkZXIudGFyZ2V0LnJlYWR5U3RhdGUgPT0gRmlsZVJlYWRlci5ET05FKSB7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRQaG90b0Zyb21TcmMoZXZ0UmVhZGVyLnRhcmdldC5yZXN1bHQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGltcG9ydFBob3RvRnJvbVVybCgpIHtcclxuICAgIGNvbnN0IHVybCA9IHByb21wdCh0aGlzLmdldFRvb2x0aXBUcmFuc2xhdGVkKCdsb2FkSW1hZ2VVcmwnKSk7XHJcbiAgICBpZiAodXJsKSB7XHJcbiAgICAgIHRoaXMuaW1wb3J0UGhvdG9Gcm9tU3JjKHVybCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2UoKXtcclxuICAgIHRoaXMuY2xvc2VEaWFsb2cuZW1pdCgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibG9hZGluZ1wiICpuZ0lmPVwiaXNMb2FkaW5nICYmIGxvYWRpbmdUZW1wbGF0ZVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJlcnJvclwiICpuZ0lmPVwiaGFzRXJyb3JcIj5cclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZXJyb3JUZW1wbGF0ZSA/IGVycm9yVGVtcGxhdGUgOiBkZWZhdWx0RXJyb3JcIj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcblxyXG48IS0tIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdExvYWRpbmc+XHJcbiAgICA8cD57eyBnZXRUZXh0VHJhbnNsYXRlZCgnbG9hZGluZycpIH19PC9wPlxyXG48L25nLXRlbXBsYXRlPiAtLT5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RXJyb3I+XHJcbiAgPHA+e3sgZXJyb3JNZXNzYWdlIH19PC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPGRpdiBjbGFzcz1cInRvb2xiYXJcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwidG9vbHNcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJicnVzaFwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJ0aXRsZVwiPnRvb2xzPC9pPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImludGVybmFsXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiYnRuXCIgW2NsYXNzLnNlbGVjdGVkXT1cImN1cnJlbnRUb29sID09ICdicnVzaCdcIiAoY2xpY2spPVwic2VsZWN0VG9vbCgnYnJ1c2gnKVwiXHJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cImdldFRvb2x0aXBUcmFuc2xhdGVkKCd0b29scy5icnVzaCcpXCI+PHRtdy1pY29uIGNsYXNzPVwibWF0LWljb25cIiBuYW1lPVwiYnJ1c2hcIj48L3Rtdy1pY29uPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGRyYXdpbmdTaXplTmFtZSBvZiBkcmF3aW5nU2l6ZXNOYW1lXCIgY2xhc3M9XCJzaXplIGJ0biBtci0xXCJcclxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiZHJhd2luZ1NpemVzW2RyYXdpbmdTaXplTmFtZV0gKiAwLjggKyA4XCJcclxuICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRyYXdpbmdTaXplc1tkcmF3aW5nU2l6ZU5hbWVdICogMC44ICsgOFwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlclJhZGl1cy5weF09XCJkcmF3aW5nU2l6ZXNbZHJhd2luZ1NpemVOYW1lXSAqIDAuNCArIDRcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJjdXJyZW50U2l6ZSA9PSBkcmF3aW5nU2l6ZU5hbWVcIiBbdGl0bGVdPVwiZ2V0VG9vbHRpcFRyYW5zbGF0ZWQoJ3NpemVzLicgKyBkcmF3aW5nU2l6ZU5hbWUpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RHJhd2luZ1NpemUoZHJhd2luZ1NpemVOYW1lKVwiPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29tbWFuZHNcIj5cclxuICAgICAgICA8aSBjbGFzcz1cInRpdGxlXCI+b3B0aW9uczwvaT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW50ZXJuYWxcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiYnRuXCIgW2NsYXNzLmRpc2FibGVkXT1cIiFjYW5VbmRvXCIgKGNsaWNrKT1cInVuZG8oKVwiXHJcbiAgICAgICAgICBbdGl0bGVdPVwiZ2V0VG9vbHRpcFRyYW5zbGF0ZWQoJ3VuZG8nKVwiPjx0bXctaWNvbiBjbGFzcz1cIm1hdC1pY29uXCIgbmFtZT1cImFycm93LWJhY2stdXBcIj48L3Rtdy1pY29uPjwvaT5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiYnRuXCIgW2NsYXNzLmRpc2FibGVkXT1cIiFjYW5SZWRvXCIgKGNsaWNrKT1cInJlZG8oKVwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJnZXRUb29sdGlwVHJhbnNsYXRlZCgncmVkbycpXCI+PHRtdy1pY29uIGNsYXNzPVwibWF0LWljb25cIiBuYW1lPVwiYXJyb3ctZm9yd2FyZC11cFwiPjwvdG13LWljb24+PC9pPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJidG5cIiAoY2xpY2spPVwiY2xlYXJDYW52YXMoKVwiIFt0aXRsZV09XCJnZXRUb29sdGlwVHJhbnNsYXRlZCgnY2xlYXInKVwiPjx0bXctaWNvbiBjbGFzcz1cIm1hdC1pY29uXCIgbmFtZT1cInhcIj48L3Rtdy1pY29uPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sb3JzXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJ0aXRsZVwiPmNvbG9yczwvaT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW50ZXJuYWxcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbG9yTmFtZSBvZiBjb2xvcnNOYW1lXCIgW2NsYXNzLnNlbGVjdGVkXT1cImN1cnJlbnRDb2xvciA9PSBjb2xvck5hbWVcIiBjbGFzcz1cImNvbG9yXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbG9yTmFtZVwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImNvbG9yc1tjb2xvck5hbWVdXCJcclxuICAgICAgICAgIFt0aXRsZV09XCJnZXRUb29sdGlwVHJhbnNsYXRlZCgnY29sb3JzLicgKyBjb2xvck5hbWUpXCIgKGNsaWNrKT1cInNlbGVjdENvbG9yKGNvbG9yTmFtZSlcIj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJ0aXRsZVwiPmFjdGlvbnM8L2k+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImludGVybmFsXCI+XHJcbiAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cInNhdmVJbWFnZSgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiICpuZ0lmPVwiIWluQ29uZmlnXCI+e3tcclxuICAgICAgICAgICAgZ2V0VGV4dFRyYW5zbGF0ZWQoJ3NhdmVCdG4nKSB9fTwvYT5cclxuICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmdcIiAqbmdJZj1cInNob3dDYW5jZWxCdXR0b24gJiYgIWluQ29uZmlnXCIgKGNsaWNrKT1cImRvTG9hZE9yaWdpbmFsKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+e3tcclxuICAgICAgICAgICAgZ2V0VGV4dFRyYW5zbGF0ZWQoJ2NhbmNlbEJ0bicpIH19PC9hPlxyXG4gICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgKm5nSWY9XCJzaG93Q2FuY2VsQnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+e3tcclxuICAgICAgICAgICAgZ2V0VGV4dFRyYW5zbGF0ZWQoJ2Nsb3NlRGlhbG9nJykgfX08L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEFueSBhZGRpdGlvbmFsIHRvb2xiYXIgYnV0dG9ucyB0byBiZSBwcm9qZWN0ZWQgYnkgdGhlIGNvbnN1bWluZyBhcHAgLS0+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgW25nU3R5bGVdPVwieyBib3JkZXI6IGJvcmRlckNzcyB9XCI+XHJcbiAgPGNhbnZhcyBbaWRdPVwiY29tcG9uZW50R3VpZFwiPjwvY2FudmFzPlxyXG48L2Rpdj4iXX0=
@@ -3,9 +3,9 @@ import { fabric } from 'fabric';
3
3
  import { Observable, of, switchMap } from 'rxjs';
4
4
  import { GlobalService } from '../../../services/global.service';
5
5
  import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/material/icon";
7
- import * as i2 from "@angular/forms";
8
- import * as i3 from "@angular/common";
6
+ import * as i1 from "@angular/forms";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "tmw-icons";
9
9
  import * as i4 from "@angular/cdk/drag-drop";
10
10
  export class TmwImageMarkerComponent {
11
11
  constructor() {
@@ -312,10 +312,10 @@ export class TmwImageMarkerComponent {
312
312
  }
313
313
  }
314
314
  TmwImageMarkerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TmwImageMarkerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
315
- TmwImageMarkerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TmwImageMarkerComponent, selector: "tmw-image-marker", inputs: { src: "src", width: "width", height: "height", inConfig: "inConfig", savedMarkers: "savedMarkers", outputMimeType: "outputMimeType", outputQuality: "outputQuality", forceSizeCanvas: "forceSizeCanvas" }, outputs: { closeDialog: "closeDialog", save: "save" }, ngImport: i0, template: "<div class=\"canvas-container\">\r\n <div class=\"canvas\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n </div>\r\n <div class=\"floating-toolbar\" cdkDrag cdkDragBoundary=\".canvas-container\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <span></span><span></span><span></span>\r\n </div>\r\n <button class=\"btn btn-primary markerButton\" (click)=\"newMarker()\">Crea nuovo marker</button>\r\n <div class=\"legend_overflow_container mt-2\">\r\n <div class=\"legend_container\" *ngFor=\"let marker of markers; index as i\">\r\n <div class=\"caption\" [innerHTML]=\"marker.caption\"></div>\r\n <div class=\"textarea\"><textarea [(ngModel)]=\"marker.description\" (click)=\"log(marker.description)\"></textarea></div>\r\n <div class=\"delete\" (click)=\"deleteMarkerByIndex(i)\"><mat-icon>delete</mat-icon></div>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-success markerButton mt-2\" *ngIf=\"!inConfig\" (click)=\"saveImage()\">Salva Immagine</button>\r\n <button class=\"btn btn-warning markerButton mt-2\" (click)=\"removeAllMarkers()\">Rimuovi tutti i markers</button>\r\n <button class=\"btn btn-danger markerButton mt-2\" (click)=\"close()\">Annulla Disegno</button>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;height:100%}.canvas-container{position:relative;width:100%;height:100%;background-color:#2a2a2a}.canvas-container>.canvas{width:100%;height:100%;display:flex;justify-content:center;align-items:center;overflow:auto}.canvas-container>.floating-toolbar{position:absolute;top:12px;right:12px;z-index:100;background:rgba(255,255,255,.9);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:12px;box-shadow:0 8px 32px #0000004d;padding:14px;min-width:220px;max-width:260px;max-height:calc(100% - 24px);overflow-y:auto}.canvas-container>.floating-toolbar.cdk-drag-dragging{box-shadow:0 12px 40px #00000073;opacity:.95}.canvas-container>.floating-toolbar .drag-handle{display:flex;flex-direction:column;align-items:center;gap:3px;padding:2px 0 10px;cursor:grab}.canvas-container>.floating-toolbar .drag-handle:active{cursor:grabbing}.canvas-container>.floating-toolbar .drag-handle span{display:block;width:28px;height:3px;background:rgba(0,0,0,.25);border-radius:2px}.canvas-container>.floating-toolbar .markerButton{width:100%}.canvas-container>.floating-toolbar .legend_overflow_container{max-height:250px;overflow-y:auto}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container{display:flex;flex-flow:row;padding:5px 0}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.caption{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:#00008b;color:#fff;margin-right:5px;border-radius:4px;font-size:12px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea{flex:1;height:35px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea textarea{width:100%;height:35px;padding:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:red;color:#fff;margin-left:5px;cursor:pointer;border-radius:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete mat-icon{padding:0;margin:0;width:16px;height:16px;font-size:16px;line-height:16px}\n"], dependencies: [{ kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }] });
315
+ TmwImageMarkerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: TmwImageMarkerComponent, selector: "tmw-image-marker", inputs: { src: "src", width: "width", height: "height", inConfig: "inConfig", savedMarkers: "savedMarkers", outputMimeType: "outputMimeType", outputQuality: "outputQuality", forceSizeCanvas: "forceSizeCanvas" }, outputs: { closeDialog: "closeDialog", save: "save" }, ngImport: i0, template: "<div class=\"canvas-container\">\r\n <div class=\"canvas\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n </div>\r\n <div class=\"floating-toolbar\" cdkDrag cdkDragBoundary=\".canvas-container\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <span></span><span></span><span></span>\r\n </div>\r\n <button class=\"btn btn-primary markerButton\" (click)=\"newMarker()\">Crea nuovo marker</button>\r\n <div class=\"legend_overflow_container mt-2\">\r\n <div class=\"legend_container\" *ngFor=\"let marker of markers; index as i\">\r\n <div class=\"caption\" [innerHTML]=\"marker.caption\"></div>\r\n <div class=\"textarea\"><textarea [(ngModel)]=\"marker.description\" (click)=\"log(marker.description)\"></textarea></div>\r\n <div class=\"delete\" (click)=\"deleteMarkerByIndex(i)\"><tmw-icon class=\"mat-icon\" name=\"trash\"></tmw-icon></div>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-success markerButton mt-2\" *ngIf=\"!inConfig\" (click)=\"saveImage()\">Salva Immagine</button>\r\n <button class=\"btn btn-warning markerButton mt-2\" (click)=\"removeAllMarkers()\">Rimuovi tutti i markers</button>\r\n <button class=\"btn btn-danger markerButton mt-2\" (click)=\"close()\">Annulla Disegno</button>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;height:100%}.canvas-container{position:relative;width:100%;height:100%;background-color:#2a2a2a}.canvas-container>.canvas{width:100%;height:100%;display:flex;justify-content:center;align-items:center;overflow:auto}.canvas-container>.floating-toolbar{position:absolute;top:12px;right:12px;z-index:100;background:rgba(255,255,255,.9);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:12px;box-shadow:0 8px 32px #0000004d;padding:14px;min-width:220px;max-width:260px;max-height:calc(100% - 24px);overflow-y:auto}.canvas-container>.floating-toolbar.cdk-drag-dragging{box-shadow:0 12px 40px #00000073;opacity:.95}.canvas-container>.floating-toolbar .drag-handle{display:flex;flex-direction:column;align-items:center;gap:3px;padding:2px 0 10px;cursor:grab}.canvas-container>.floating-toolbar .drag-handle:active{cursor:grabbing}.canvas-container>.floating-toolbar .drag-handle span{display:block;width:28px;height:3px;background:rgba(0,0,0,.25);border-radius:2px}.canvas-container>.floating-toolbar .markerButton{width:100%}.canvas-container>.floating-toolbar .legend_overflow_container{max-height:250px;overflow-y:auto}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container{display:flex;flex-flow:row;padding:5px 0}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.caption{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:#00008b;color:#fff;margin-right:5px;border-radius:4px;font-size:12px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea{flex:1;height:35px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea textarea{width:100%;height:35px;padding:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:red;color:#fff;margin-left:5px;cursor:pointer;border-radius:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete mat-icon{padding:0;margin:0;width:16px;height:16px;font-size:16px;line-height:16px}\n"], dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.TmwIconComponent, selector: "tmw-icon", inputs: ["name", "size", "ariaLabel", "variant", "strokeWidth"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i4.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }] });
316
316
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TmwImageMarkerComponent, decorators: [{
317
317
  type: Component,
318
- args: [{ selector: 'tmw-image-marker', template: "<div class=\"canvas-container\">\r\n <div class=\"canvas\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n </div>\r\n <div class=\"floating-toolbar\" cdkDrag cdkDragBoundary=\".canvas-container\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <span></span><span></span><span></span>\r\n </div>\r\n <button class=\"btn btn-primary markerButton\" (click)=\"newMarker()\">Crea nuovo marker</button>\r\n <div class=\"legend_overflow_container mt-2\">\r\n <div class=\"legend_container\" *ngFor=\"let marker of markers; index as i\">\r\n <div class=\"caption\" [innerHTML]=\"marker.caption\"></div>\r\n <div class=\"textarea\"><textarea [(ngModel)]=\"marker.description\" (click)=\"log(marker.description)\"></textarea></div>\r\n <div class=\"delete\" (click)=\"deleteMarkerByIndex(i)\"><mat-icon>delete</mat-icon></div>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-success markerButton mt-2\" *ngIf=\"!inConfig\" (click)=\"saveImage()\">Salva Immagine</button>\r\n <button class=\"btn btn-warning markerButton mt-2\" (click)=\"removeAllMarkers()\">Rimuovi tutti i markers</button>\r\n <button class=\"btn btn-danger markerButton mt-2\" (click)=\"close()\">Annulla Disegno</button>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;height:100%}.canvas-container{position:relative;width:100%;height:100%;background-color:#2a2a2a}.canvas-container>.canvas{width:100%;height:100%;display:flex;justify-content:center;align-items:center;overflow:auto}.canvas-container>.floating-toolbar{position:absolute;top:12px;right:12px;z-index:100;background:rgba(255,255,255,.9);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:12px;box-shadow:0 8px 32px #0000004d;padding:14px;min-width:220px;max-width:260px;max-height:calc(100% - 24px);overflow-y:auto}.canvas-container>.floating-toolbar.cdk-drag-dragging{box-shadow:0 12px 40px #00000073;opacity:.95}.canvas-container>.floating-toolbar .drag-handle{display:flex;flex-direction:column;align-items:center;gap:3px;padding:2px 0 10px;cursor:grab}.canvas-container>.floating-toolbar .drag-handle:active{cursor:grabbing}.canvas-container>.floating-toolbar .drag-handle span{display:block;width:28px;height:3px;background:rgba(0,0,0,.25);border-radius:2px}.canvas-container>.floating-toolbar .markerButton{width:100%}.canvas-container>.floating-toolbar .legend_overflow_container{max-height:250px;overflow-y:auto}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container{display:flex;flex-flow:row;padding:5px 0}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.caption{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:#00008b;color:#fff;margin-right:5px;border-radius:4px;font-size:12px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea{flex:1;height:35px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea textarea{width:100%;height:35px;padding:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:red;color:#fff;margin-left:5px;cursor:pointer;border-radius:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete mat-icon{padding:0;margin:0;width:16px;height:16px;font-size:16px;line-height:16px}\n"] }]
318
+ args: [{ selector: 'tmw-image-marker', template: "<div class=\"canvas-container\">\r\n <div class=\"canvas\">\r\n <canvas [id]=\"componentGuid\"></canvas>\r\n </div>\r\n <div class=\"floating-toolbar\" cdkDrag cdkDragBoundary=\".canvas-container\">\r\n <div class=\"drag-handle\" cdkDragHandle>\r\n <span></span><span></span><span></span>\r\n </div>\r\n <button class=\"btn btn-primary markerButton\" (click)=\"newMarker()\">Crea nuovo marker</button>\r\n <div class=\"legend_overflow_container mt-2\">\r\n <div class=\"legend_container\" *ngFor=\"let marker of markers; index as i\">\r\n <div class=\"caption\" [innerHTML]=\"marker.caption\"></div>\r\n <div class=\"textarea\"><textarea [(ngModel)]=\"marker.description\" (click)=\"log(marker.description)\"></textarea></div>\r\n <div class=\"delete\" (click)=\"deleteMarkerByIndex(i)\"><tmw-icon class=\"mat-icon\" name=\"trash\"></tmw-icon></div>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-success markerButton mt-2\" *ngIf=\"!inConfig\" (click)=\"saveImage()\">Salva Immagine</button>\r\n <button class=\"btn btn-warning markerButton mt-2\" (click)=\"removeAllMarkers()\">Rimuovi tutti i markers</button>\r\n <button class=\"btn btn-danger markerButton mt-2\" (click)=\"close()\">Annulla Disegno</button>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;height:100%}.canvas-container{position:relative;width:100%;height:100%;background-color:#2a2a2a}.canvas-container>.canvas{width:100%;height:100%;display:flex;justify-content:center;align-items:center;overflow:auto}.canvas-container>.floating-toolbar{position:absolute;top:12px;right:12px;z-index:100;background:rgba(255,255,255,.9);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:12px;box-shadow:0 8px 32px #0000004d;padding:14px;min-width:220px;max-width:260px;max-height:calc(100% - 24px);overflow-y:auto}.canvas-container>.floating-toolbar.cdk-drag-dragging{box-shadow:0 12px 40px #00000073;opacity:.95}.canvas-container>.floating-toolbar .drag-handle{display:flex;flex-direction:column;align-items:center;gap:3px;padding:2px 0 10px;cursor:grab}.canvas-container>.floating-toolbar .drag-handle:active{cursor:grabbing}.canvas-container>.floating-toolbar .drag-handle span{display:block;width:28px;height:3px;background:rgba(0,0,0,.25);border-radius:2px}.canvas-container>.floating-toolbar .markerButton{width:100%}.canvas-container>.floating-toolbar .legend_overflow_container{max-height:250px;overflow-y:auto}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container{display:flex;flex-flow:row;padding:5px 0}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.caption{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:#00008b;color:#fff;margin-right:5px;border-radius:4px;font-size:12px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea{flex:1;height:35px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.textarea textarea{width:100%;height:35px;padding:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete{display:flex;justify-content:center;align-items:center;min-width:28px;width:28px;background-color:red;color:#fff;margin-left:5px;cursor:pointer;border-radius:4px}.canvas-container>.floating-toolbar .legend_overflow_container .legend_container>.delete mat-icon{padding:0;margin:0;width:16px;height:16px;font-size:16px;line-height:16px}\n"] }]
319
319
  }], ctorParameters: function () { return []; }, propDecorators: { src: [{
320
320
  type: Input
321
321
  }], width: [{
@@ -349,4 +349,4 @@ export class OutMarker {
349
349
  }
350
350
  export class MarkedImage {
351
351
  }
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG13LWltYWdlLW1hcmtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvdG13LWltYWdlLW1hcmtlci90bXctaW1hZ2UtbWFya2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS90bXctaW1hZ2UtbWFya2VyL3Rtdy1pbWFnZS1tYXJrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQU9qRSxNQUFNLE9BQU8sdUJBQXVCO0lBa0NsQztRQTdCUyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBRXJCLG1CQUFjLEdBQUcsWUFBWSxDQUFDO1FBQzlCLGtCQUFhLEdBQUcsR0FBRyxDQUFDO1FBRXBCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTdCLGdCQUFXLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDM0QsU0FBSSxHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDO1FBRzVFLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUdsQixVQUFLLEdBQW9CLEVBQUUsQ0FBQztRQUVwQyxZ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QUM7SUFDMUIsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQUcsRUFBRSxHQUFHO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFFRCxHQUFHLENBQUMsRUFBRTtRQUNKLGFBQWEsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7cUhBellVLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLG1VQ1ZwQyx1MUNBcUJBOzRGRFhhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxrQkFBa0I7MEVBTW5CLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFVSxjQUFjO3NCQUE3QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBRVUsZUFBZTtzQkFBOUIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTs7QUErWFQsTUFBTSxPQUFPLE1BQU07SUFBbkI7UUFPRSxnQkFBVyxHQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8sU0FBUztJQUF0QjtRQUlFLGdCQUFXLEdBQVcsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxXQUFXO0NBR3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZmFicmljIH0gZnJvbSAnZmFicmljJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0bXctaW1hZ2UtbWFya2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdG13LWltYWdlLW1hcmtlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdG13LWltYWdlLW1hcmtlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUbXdJbWFnZU1hcmtlckNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIHNyYzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBudW1iZXI7XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzYXZlZE1hcmtlcnM6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBvdXRwdXRNaW1lVHlwZSA9ICdpbWFnZS9qcGVnJztcclxuICBASW5wdXQoKSBwdWJsaWMgb3V0cHV0UXVhbGl0eSA9IDAuODtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGZvcmNlU2l6ZUNhbnZhcyA9IHRydWU7XHJcblxyXG4gIEBPdXRwdXQoKSBjbG9zZURpYWxvZzogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBzYXZlOiBFdmVudEVtaXR0ZXI8TWFya2VkSW1hZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxNYXJrZWRJbWFnZT4oKTtcclxuXHJcbiAgY29tcG9uZW50R3VpZDogc3RyaW5nO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgaGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBjYW52YXM6IGZhYnJpYy5DYW52YXM7XHJcbiAgcHJpdmF0ZSBzdGFjazogZmFicmljLk9iamVjdFtdID0gW107XHJcblxyXG4gIG1hcmtlcnM6IEFycmF5PE1hcmtlcj4gPSBuZXcgQXJyYXk8TWFya2VyPigpO1xyXG4gIG91dG1hcmtlcnM6IEFycmF5PE91dE1hcmtlcj4gPSBuZXcgQXJyYXk8T3V0TWFya2VyPigpO1xyXG4gIG1hcmtlZEltYWdlOiBNYXJrZWRJbWFnZSA9IG5ldyBNYXJrZWRJbWFnZSgpO1xyXG5cclxuICBjYW5VbmRvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2FuUmVkbzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHByaXZhdGUgaW1hZ2VVc2VkPzogZmFicmljLkltYWdlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBDcmVhemlvbmUgZGkgdW5hIEdVSUQgdW5pY2EgcGVyIGlsIGNvbXBvbmVudGVcclxuICAgIHRoaXMuY29tcG9uZW50R3VpZCA9ICd4eHh4LXh4eHgteHh4eC14eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCxcclxuICAgICAgICB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjYW52YXNTY2FsZWRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5jb21wb25lbnRHdWlkKTtcclxuICAgIHRoaXMuY2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXMoY2FudmFzU2NhbGVkRWxlbWVudCwge1xyXG4gICAgICBob3ZlckN1cnNvcjogJ3BvaW50ZXInLFxyXG4gICAgICBpc0RyYXdpbmdNb2RlOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYW52YXMuYmFja2dyb3VuZENvbG9yID0gJ3doaXRlJztcclxuXHJcbiAgICBpZiAodGhpcy5zcmMpIHtcclxuICAgICAgdGhpcy5pbXBvcnRQaG90b0Zyb21TcmModGhpcy5zcmMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKCF0aGlzLndpZHRoIHx8ICF0aGlzLmhlaWdodCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gd2lkdGggb3IgaGlnaHQgZ2l2ZW4gIScpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNhbnZhcy5zZXRXaWR0aCh0aGlzLndpZHRoKTtcclxuICAgICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KHRoaXMuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbigncGF0aDpjcmVhdGVkJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLnN0YWNrID0gW107XHJcbiAgICAgIHRoaXMuc2V0VW5kb1JlZG8oKTtcclxuICAgIH0pO1xyXG5cclxuICB9ICBcclxuXHJcbiAgbmV3TWFya2VyKCl7XHJcbiAgICB2YXIgc3RhcnRYID0gNDA7XHJcbiAgICB2YXIgc3RhcnRZID0gNDA7XHJcblxyXG4gICAgLy92YXIgbGVmdCA9IHRoaXMucmFuZG9tSW50RnJvbUludGVydmFsKHN0YXJ0WC0xMDAsc3RhcnRYKzEwMCk7XHJcbiAgICAvL3ZhciB0b3AgPSB0aGlzLnJhbmRvbUludEZyb21JbnRlcnZhbChzdGFydFktMTAwLHN0YXJ0WSsxMDApO1xyXG4gICAgdmFyIGxlZnQgPSBzdGFydFg7XHJcbiAgICB2YXIgdG9wID0gc3RhcnRZO1xyXG4gICAgdmFyIGRlc2NyaXB0aW9uOiAnJztcclxuICAgIHZhciBjYXB0aW9uID0gJzAnO1xyXG5cclxuICAgIC8vIENyZWF6aW9uZSBkZWxsYSBjYXB0aW9uXHJcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMDAwMDA7IGkrKyl7XHJcbiAgICAgIGlmICh0aGlzLm1hcmtlcnMuZmluZCh4ID0+IHguY2FwdGlvbiA9PSBpLnRvU3RyaW5nKCkpID09IG51bGwpe1xyXG4gICAgICAgIGNhcHRpb24gPSBpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIHRoaXMuY3JlYXRlTWFya2VyKHRvcCxsZWZ0LGNhcHRpb24sZGVzY3JpcHRpb24pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlTWFya2VyKHRvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXIsIGNhcHRpb246IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyl7XHJcblxyXG4gICAgLypcclxuICAgICogQ3JlbyB1biBudW92byBNYXJrZXJcclxuICAgICovXHJcblxyXG4gICAgLy8gQ3JlbyBpbCBjZXJjaGlvXHJcbiAgICB2YXIgY2lyY2xlID0gbmV3IGZhYnJpYy5DaXJjbGUoe1xyXG4gICAgICByYWRpdXM6IDMwLFxyXG4gICAgICBvcGFjaXR5OiAwLjcsXHJcbiAgICAgIGZpbGw6ICdkYXJrYmx1ZScsXHJcbiAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgIG9yaWdpblg6ICdjZW50ZXInLCBcclxuICAgICAgb3JpZ2luWTogJ2NlbnRlcicgXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVvIGlsIHRlc3RvIGRlbnRybyBhbCBjZXJjaGlvIFxyXG4gICAgdmFyIHRleHQgPSBuZXcgZmFicmljLlRleHQoY2FwdGlvbixcclxuICAgIHsgIGZvbnRTaXplOiAyNSwgXHJcbiAgICAgICAgb3JpZ2luWDogJ2NlbnRlcicsIFxyXG4gICAgICAgIG9yaWdpblk6ICdjZW50ZXInLFxyXG4gICAgICAgIGZpbGwgOiAnd2hpdGUnIFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBDcmVvIGlsIGdydXBwbyBuZWwgcXVhbGUgbWV0dG8gY2VyY2hpbyBlIHRlc3RvIGluIG1vZG8gY2hlIHNpIG11b3Zhbm8gaW5zaWVtZVxyXG4gICAgdmFyIGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbIGNpcmNsZSwgdGV4dCBdLCB7ICBsZWZ0OiBsZWZ0LCB0b3A6IHRvcCB9KTsgICAgXHJcblxyXG4gICAgLy8gQ3JlbyB1biBvZ2dldHRvIG1hcmtlciBjaGUgY29udGllbmUgZ2xpIGVsZW1lbnRpIGF0b21pY2kuIFNlcnZlIHBlciBsZSBjYW5jZWxsYXppb25pIGUgaWwgcm9sbGJhY2svbW9kaWZpY2EgZGVnbGkgZWxlbWVudGlcclxuICAgIHZhciBtYXJrZXI6IE1hcmtlciA9IG5ldyBNYXJrZXIoKTtcclxuICAgIG1hcmtlci5jaXJjbGUgPSBjaXJjbGU7XHJcbiAgICBtYXJrZXIudGV4dCA9IHRleHQ7XHJcbiAgICBtYXJrZXIuZ3JvdXAgPSBncm91cDtcclxuICAgIG1hcmtlci5jYXB0aW9uID0gY2FwdGlvbjtcclxuICAgIG1hcmtlci5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xyXG5cclxuICAgIC8vIEFnZ2l1bmdvIGlsIGdydXBwbyBuZWxsYSBsaXN0YSBkZWkgZ3J1cHBpXHJcbiAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xyXG4gICAgdGhpcy5tYXJrZXJzLnNvcnQoKGEsYik9PiB7IHJldHVybiBOdW1iZXIoYS5jYXB0aW9uKSAtIE51bWJlcihiLmNhcHRpb24pIH0pO1xyXG5cclxuICAgIC8vIEFnZ2l1bmdvIGlsIGdydXBwbyBhbGwnaW1tYWdpbmUgYSBzY2hlcm1vXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTWFya2VyQnlJbmRleChpbmRleDogbnVtYmVyKXtcclxuICAgIHRoaXMuY2FudmFzLnJlbW92ZSh0aGlzLm1hcmtlcnNbaW5kZXhdLmdyb3VwKTtcclxuICAgIHRoaXMubWFya2Vycy5zcGxpY2UoaW5kZXgsMSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGxNYXJrZXJzKCl7XHJcbiAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiB7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShtYXJrZXIuZ3JvdXApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLm1hcmtlcnMgPSBuZXcgQXJyYXk8TWFya2VyPigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVbmRvUmVkbygpIHtcclxuICAgIHRoaXMuY2FuVW5kbyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggPiAwO1xyXG4gICAgdGhpcy5jYW5SZWRvID0gdGhpcy5zdGFjay5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgLypcclxuXHJcbiAgICAvLyBBY3Rpb25zXHJcbiAgICBwdWJsaWMgdW5kbygpIHtcclxuICAgICAgaWYgKHRoaXMuY2FuVW5kbykge1xyXG4gICAgICAgIGNvbnN0IGxhc3RJZCA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggLSAxO1xyXG4gICAgICAgIGNvbnN0IGxhc3RPYmogPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKClbbGFzdElkXTtcclxuICAgICAgICB0aGlzLnN0YWNrLnB1c2gobGFzdE9iaik7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKGxhc3RPYmopO1xyXG4gICAgICAgIHRoaXMuc2V0VW5kb1JlZG8oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIFxyXG4gICAgcHVibGljIHJlZG8oKSB7XHJcbiAgICAgIGlmICh0aGlzLmNhblJlZG8pIHtcclxuICAgICAgICBjb25zdCBmaXJzdEluU3RhY2sgPSB0aGlzLnN0YWNrLnNwbGljZSgtMSwgMSlbMF07XHJcbiAgICAgICAgaWYgKGZpcnN0SW5TdGFjaykge1xyXG4gICAgICAgICAgdGhpcy5jYW52YXMuaW5zZXJ0QXQoZmlyc3RJblN0YWNrLCB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoIC0gMSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFVuZG9SZWRvKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICBcclxuICAgIHB1YmxpYyBjbGVhckNhbnZhcygpIHtcclxuICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKC4uLnRoaXMuY2FudmFzLmdldE9iamVjdHMoKSk7XHJcbiAgICAgICAgdGhpcy5zZXRVbmRvUmVkbygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4qL1xyXG5cclxuICBwcml2YXRlIGltcG9ydFBob3RvRnJvbVNyYyhzcmM6IHN0cmluZykge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IGlzRmlyc3RUcnkgPSB0cnVlO1xyXG4gICAgY29uc3QgaW1nRWwgPSBuZXcgSW1hZ2UoKTtcclxuICAgIGltZ0VsLnNldEF0dHJpYnV0ZSgnY3Jvc3NPcmlnaW4nLCAnYW5vbnltb3VzJyk7XHJcbiAgICBpbWdFbC5zcmMgPSBzcmM7XHJcbiAgICBpbWdFbC5vbmVycm9yID0gKCkgPT4ge1xyXG4gICAgICAvLyBSZXRyeSB3aXRoIGNvcnMgcHJveHlcclxuICAgICAgaWYgKGlzRmlyc3RUcnkpIHtcclxuICAgICAgICBpbWdFbC5zcmMgPSAnaHR0cHM6Ly9jb3JzLWFueXdoZXJlLmhlcm9rdWFwcC5jb20vJyArIHRoaXMuc3JjO1xyXG4gICAgICAgIGlzRmlyc3RUcnkgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gXCJDT1JTIEVycm9yXCI7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBpbWdFbC5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW1hZ2VVc2VkID0gbmV3IGZhYnJpYy5JbWFnZShpbWdFbCk7XHJcblxyXG4gICAgICB0aGlzLmltYWdlVXNlZC5jbG9uZUFzSW1hZ2UoaW1hZ2UgPT4ge1xyXG4gICAgICAgIGxldCB3aWR0aCA9IGltZ0VsLndpZHRoO1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSBpbWdFbC5oZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLndpZHRoKSB7XHJcbiAgICAgICAgICB3aWR0aCA9IHRoaXMud2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmhlaWdodCkge1xyXG4gICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByaWNhbGNvbG8gbGUgZGltZW5zaW9uaSBkZWxsJ2ltbWFnaW5lIHBlciBmYXJsYSBlbnRyYXJlIG5lbGxvIHNjaGVybW9cclxuICAgICAgICAvLyBkaW1pbnVpc2NvIGRpIHVuIDUlIGFsbGEgdm9sdGEgbGUgZGltZW5zaW9uaSBmaW5vIGEgcmllbnRyYXJlIG5lbGwnODUlIGRlbGxhIGdyYW5kZXp6YSBkZWxsYSBmaW5lc3RyYVxyXG4gICAgICAgIGxldCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgIGxldCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICAgICAgd2hpbGUod2lkdGggPiB3aW5kb3dXaWR0aCAqIDAuODUpe1xyXG4gICAgICAgICAgd2lkdGggPSB3aWR0aCAqIDAuOTU7XHJcbiAgICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKiAwLjk1O1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZShoZWlnaHQgPiB3aW5kb3dIZWlnaHQgKiAwLjg1KXtcclxuICAgICAgICAgIHdpZHRoID0gd2lkdGggKiAwLjk1O1xyXG4gICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICogMC45NTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpbWFnZS5zY2FsZVRvV2lkdGgod2lkdGgsIGZhbHNlKTtcclxuICAgICAgICBpbWFnZS5zY2FsZVRvSGVpZ2h0KGhlaWdodCwgZmFsc2UpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy5zZXRCYWNrZ3JvdW5kSW1hZ2UoaW1hZ2UsICgoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaW1nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcmNlU2l6ZUNhbnZhcykge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldFdpZHRoKHdpZHRoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRIZWlnaHQoaGVpZ2h0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRXaWR0aChpbWFnZS5nZXRTY2FsZWRXaWR0aCgpKTtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRIZWlnaHQoaW1hZ2UuZ2V0U2NhbGVkSGVpZ2h0KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksIHtcclxuICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcclxuICAgICAgICAgIG9yaWdpblg6ICdsZWZ0JyxcclxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2F2ZWRNYXJrZXJzICE9IG51bGwpeyB0aGlzLmxvYWRNYXJrZXJzKCk7IH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBsb2FkTWFya2Vycygpe1xyXG4gICAgdmFyIG1hcmtlcnNPYmo6IEFycmF5PE91dE1hcmtlcj4gPSBKU09OLnBhcnNlKHRoaXMuc2F2ZWRNYXJrZXJzKTtcclxuICAgIG1hcmtlcnNPYmouZm9yRWFjaCgobWFya2VyKSA9PiB7XHJcbiAgICAgIHRoaXMuY3JlYXRlTWFya2VyKG1hcmtlci50b3AsbWFya2VyLmxlZnQsbWFya2VyLmNhcHRpb24sbWFya2VyLmRlc2NyaXB0aW9uKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVJbWFnZSgpe1xyXG5cclxuICAgIHRoaXMub3V0bWFya2VycyA9IG5ldyBBcnJheTxPdXRNYXJrZXI+KCk7XHJcblxyXG4gICAgdGhpcy5tYXJrZXJzLmZvckVhY2goKG1hcmtlcikgPT4ge1xyXG4gICAgICB2YXIgb3V0bWFya2VyID0gbmV3IE91dE1hcmtlcigpO1xyXG4gICAgICBvdXRtYXJrZXIuY2FwdGlvbiA9IG1hcmtlci5jYXB0aW9uO1xyXG4gICAgICBvdXRtYXJrZXIuZGVzY3JpcHRpb24gPSBtYXJrZXIuZGVzY3JpcHRpb247XHJcbiAgICAgIG91dG1hcmtlci50b3AgPSBtYXJrZXIuZ3JvdXAudG9wO1xyXG4gICAgICBvdXRtYXJrZXIubGVmdCA9IG1hcmtlci5ncm91cC5sZWZ0O1xyXG4gICAgICB0aGlzLm91dG1hcmtlcnMucHVzaChvdXRtYXJrZXIpO1xyXG4gICAgfSlcclxuXHJcbiAgICBpZiAodGhpcy53aWR0aCAmJiB0aGlzLmhlaWdodCkge1xyXG4gICAgICBjb25zdCBjYW52YXNTY2FsZWRFbGVtZW50OiBIVE1MQ2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjb25zdCBjYW52YXNTY2FsZWQgPSBuZXcgZmFicmljLkNhbnZhcyhjYW52YXNTY2FsZWRFbGVtZW50KTtcclxuICAgICAgY2FudmFzU2NhbGVkLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7XHJcblxyXG4gICAgICBuZXcgT2JzZXJ2YWJsZTxmYWJyaWMuQ2FudmFzPihvYnNlcnZlciA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VVc2VkKSB7XHJcblxyXG4gICAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0QmFja2dyb3VuZEltYWdlKHRoaXMuaW1hZ2VVc2VkLCAoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFpbWcpIHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKG5ldyBFcnJvcignSW1wb3NzaWJsZSB0byBkcmF3IHRoZSBpbWFnZSBvbiB0aGUgdGVtcG9yYXJ5IGNhbnZhcycpKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5zZXRXaWR0aChpbWcud2lkdGgpO1xyXG4gICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5zZXRIZWlnaHQoaW1nLmhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoY2FudmFzU2NhbGVkKTtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46ICdhbm9ueW1vdXMnLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6ICdsZWZ0JyxcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0V2lkdGgodGhpcy53aWR0aCk7XHJcbiAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0SGVpZ2h0KHRoaXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgIGxldCBwcm9jZXNzID0gb2YoY2FudmFzU2NhbGVkKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcmF0aW9YID0gY2FudmFzU2NhbGVkLmdldFdpZHRoKCkgLyB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgICAgICAgICBjb25zdCByYXRpb1kgPSBjYW52YXNTY2FsZWQuZ2V0SGVpZ2h0KCkgLyB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5mb3JFYWNoKChvcmlnaW5hbE9iamVjdDogZmFicmljLk9iamVjdCwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgcHJvY2VzcyA9IHByb2Nlc3MucGlwZShzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGZhYnJpYy5DYW52YXM+KG9ic2VydmVyT2JqZWN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxPYmplY3QuY2xvbmUoKGNsb25lZE9iamVjdDogZmFicmljLk9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zZXQoJ2xlZnQnLCBvcmlnaW5hbE9iamVjdC5sZWZ0ICogcmF0aW9YKTtcclxuICAgICAgICAgICAgICAgICAgICBjbG9uZWRPYmplY3Quc2V0KCd0b3AnLCBvcmlnaW5hbE9iamVjdC50b3AgKiByYXRpb1kpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zY2FsZVRvV2lkdGgob3JpZ2luYWxPYmplY3Qud2lkdGggKiByYXRpb1gpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsb25lZE9iamVjdC5zY2FsZVRvSGVpZ2h0KG9yaWdpbmFsT2JqZWN0LmhlaWdodCAqIHJhdGlvWSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhbnZhc1NjYWxlZC5pbnNlcnRBdChjbG9uZWRPYmplY3QsIGksIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBjYW52YXNTY2FsZWQucmVuZGVyQWxsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyT2JqZWN0Lm5leHQoY2FudmFzU2NhbGVkKTtcclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlck9iamVjdC5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcHJvY2VzcztcclxuICAgICAgICB9KSxcclxuICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGNhbnZhc1NjYWxlZC5yZW5kZXJBbGwoKTtcclxuICAgICAgICBjYW52YXNTY2FsZWQuZ2V0RWxlbWVudCgpLnRvQmxvYihcclxuICAgICAgICAgIChkYXRhOiBCbG9iKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWFya2VkSW1hZ2UuaW1hZ2UgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLm1hcmtlZEltYWdlLm91dG1hcmtlcnMgPSB0aGlzLm91dG1hcmtlcnM7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZS5lbWl0KHRoaXMubWFya2VkSW1hZ2UpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHRoaXMub3V0cHV0TWltZVR5cGUsXHJcbiAgICAgICAgICB0aGlzLm91dHB1dFF1YWxpdHlcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FudmFzLmdldEVsZW1lbnQoKS50b0Jsb2IoXHJcbiAgICAgICAgKGRhdGE6IEJsb2IpID0+IHtcclxuICAgICAgICAgIHRoaXMubWFya2VkSW1hZ2UuaW1hZ2UgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5tYXJrZWRJbWFnZS5vdXRtYXJrZXJzID0gdGhpcy5vdXRtYXJrZXJzO1xyXG4gICAgICAgICAgdGhpcy5zYXZlLmVtaXQodGhpcy5tYXJrZWRJbWFnZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzLm91dHB1dE1pbWVUeXBlLFxyXG4gICAgICAgIHRoaXMub3V0cHV0UXVhbGl0eVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvL3RoaXMuc2F2ZS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2UoKXtcclxuICAgIHRoaXMuY2xvc2VEaWFsb2cuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcmFuZG9tSW50RnJvbUludGVydmFsKG1pbiwgbWF4KSB7IC8vIG1pbiBhbmQgbWF4IGluY2x1ZGVkIFxyXG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbilcclxuICB9XHJcblxyXG4gIGxvZyhlbCl7XHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiaW1hZ2VNYXJrZXIgZWxlbWVudCBcIixlbCk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hcmtlciB7XHJcbiAgY2lyY2xlOiBmYWJyaWMuQ2lyY2xlO1xyXG4gIHRleHQ6IGZhYnJpYy5UZXh0O1xyXG4gIGdyb3VwOiBmYWJyaWMuR3JvdXA7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgbGVmdDogbnVtYmVyO1xyXG4gIGNhcHRpb246IHN0cmluZztcclxuICBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJcIjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE91dE1hcmtlciB7XHJcbiAgdG9wOiBudW1iZXI7XHJcbiAgbGVmdDogbnVtYmVyO1xyXG4gIGNhcHRpb246IHN0cmluZztcclxuICBkZXNjcmlwdGlvbjogc3RyaW5nID0gXCJcIjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hcmtlZEltYWdlIHtcclxuICBvdXRtYXJrZXJzOiBBcnJheTxPdXRNYXJrZXI+O1xyXG4gIGltYWdlOiBCbG9iO1xyXG59IiwiPGRpdiBjbGFzcz1cImNhbnZhcy1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYW52YXNcIj5cclxuICAgICAgICA8Y2FudmFzIFtpZF09XCJjb21wb25lbnRHdWlkXCI+PC9jYW52YXM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbG9hdGluZy10b29sYmFyXCIgY2RrRHJhZyBjZGtEcmFnQm91bmRhcnk9XCIuY2FudmFzLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcmFnLWhhbmRsZVwiIGNka0RyYWdIYW5kbGU+XHJcbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbWFya2VyQnV0dG9uXCIgKGNsaWNrKT1cIm5ld01hcmtlcigpXCI+Q3JlYSBudW92byBtYXJrZXI8L2J1dHRvbj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kX292ZXJmbG93X2NvbnRhaW5lciBtdC0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmRfY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IG1hcmtlciBvZiBtYXJrZXJzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwdGlvblwiIFtpbm5lckhUTUxdPVwibWFya2VyLmNhcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0YXJlYVwiPjx0ZXh0YXJlYSBbKG5nTW9kZWwpXT1cIm1hcmtlci5kZXNjcmlwdGlvblwiIChjbGljayk9XCJsb2cobWFya2VyLmRlc2NyaXB0aW9uKVwiPjwvdGV4dGFyZWE+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlXCIgKGNsaWNrKT1cImRlbGV0ZU1hcmtlckJ5SW5kZXgoaSlcIj48bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc3VjY2VzcyBtYXJrZXJCdXR0b24gbXQtMlwiICpuZ0lmPVwiIWluQ29uZmlnXCIgKGNsaWNrKT1cInNhdmVJbWFnZSgpXCI+U2FsdmEgSW1tYWdpbmU8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nIG1hcmtlckJ1dHRvbiBtdC0yXCIgKGNsaWNrKT1cInJlbW92ZUFsbE1hcmtlcnMoKVwiPlJpbXVvdmkgdHV0dGkgaSBtYXJrZXJzPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyIG1hcmtlckJ1dHRvbiBtdC0yXCIgKGNsaWNrKT1cImNsb3NlKClcIj5Bbm51bGxhIERpc2Vnbm88L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG13LWltYWdlLW1hcmtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvdG13LWltYWdlLW1hcmtlci90bXctaW1hZ2UtbWFya2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS90bXctaW1hZ2UtbWFya2VyL3Rtdy1pbWFnZS1tYXJrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQU9qRSxNQUFNLE9BQU8sdUJBQXVCO0lBa0NsQztRQTdCUyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBRXJCLG1CQUFjLEdBQUcsWUFBWSxDQUFDO1FBQzlCLGtCQUFhLEdBQUcsR0FBRyxDQUFDO1FBRXBCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTdCLGdCQUFXLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDM0QsU0FBSSxHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDO1FBRzVFLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUdsQixVQUFLLEdBQW9CLEVBQUUsQ0FBQztRQUVwQyxZ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QUFDO0lBQzFCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsR0FBRztRQUM1QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQTtJQUMxRCxDQUFDO0lBRUQsR0FBRyxDQUFDLEVBQUU7UUFDSixhQUFhLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7O3FIQXpZVSx1QkFBdUI7eUdBQXZCLHVCQUF1QixtVUNWcEMsbTNDQXFCQTs0RkRYYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usa0JBQWtCOzBFQU1uQixHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRVUsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUVVLGVBQWU7c0JBQTlCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07O0FBK1hULE1BQU0sT0FBTyxNQUFNO0lBQW5CO1FBT0UsZ0JBQVcsR0FBVyxFQUFFLENBQUM7SUFDM0IsQ0FBQztDQUFBO0FBRUQsTUFBTSxPQUFPLFNBQVM7SUFBdEI7UUFJRSxnQkFBVyxHQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQUE7QUFFRCxNQUFNLE9BQU8sV0FBVztDQUd2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZhYnJpYyB9IGZyb20gJ2ZhYnJpYyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndG13LWltYWdlLW1hcmtlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Rtdy1pbWFnZS1tYXJrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Rtdy1pbWFnZS1tYXJrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG13SW1hZ2VNYXJrZXJDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoKSBzcmM6IHN0cmluZztcclxuICBASW5wdXQoKSB3aWR0aDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGhlaWdodDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2F2ZWRNYXJrZXJzOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgb3V0cHV0TWltZVR5cGUgPSAnaW1hZ2UvanBlZyc7XHJcbiAgQElucHV0KCkgcHVibGljIG91dHB1dFF1YWxpdHkgPSAwLjg7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JjZVNpemVDYW52YXMgPSB0cnVlO1xyXG5cclxuICBAT3V0cHV0KCkgY2xvc2VEaWFsb2c6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgc2F2ZTogRXZlbnRFbWl0dGVyPE1hcmtlZEltYWdlPiA9IG5ldyBFdmVudEVtaXR0ZXI8TWFya2VkSW1hZ2U+KCk7XHJcblxyXG4gIGNvbXBvbmVudEd1aWQ6IHN0cmluZztcclxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgY2FudmFzOiBmYWJyaWMuQ2FudmFzO1xyXG4gIHByaXZhdGUgc3RhY2s6IGZhYnJpYy5PYmplY3RbXSA9IFtdO1xyXG5cclxuICBtYXJrZXJzOiBBcnJheTxNYXJrZXI+ID0gbmV3IEFycmF5PE1hcmtlcj4oKTtcclxuICBvdXRtYXJrZXJzOiBBcnJheTxPdXRNYXJrZXI+ID0gbmV3IEFycmF5PE91dE1hcmtlcj4oKTtcclxuICBtYXJrZWRJbWFnZTogTWFya2VkSW1hZ2UgPSBuZXcgTWFya2VkSW1hZ2UoKTtcclxuXHJcbiAgY2FuVW5kbzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNhblJlZG86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICBwcml2YXRlIGltYWdlVXNlZD86IGZhYnJpYy5JbWFnZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgLy8gQ3JlYXppb25lIGRpIHVuYSBHVUlEIHVuaWNhIHBlciBpbCBjb21wb25lbnRlXHJcbiAgICB0aGlzLmNvbXBvbmVudEd1aWQgPSAneHh4eC14eHh4LXh4eHgteHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsXHJcbiAgICAgICAgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgY2FudmFzU2NhbGVkRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuY29tcG9uZW50R3VpZCkgYXMgSFRNTENhbnZhc0VsZW1lbnQ7XHJcbiAgICB0aGlzLmNhbnZhcyA9IG5ldyBmYWJyaWMuQ2FudmFzKGNhbnZhc1NjYWxlZEVsZW1lbnQsIHtcclxuICAgICAgaG92ZXJDdXJzb3I6ICdwb2ludGVyJyxcclxuICAgICAgaXNEcmF3aW5nTW9kZTogZmFsc2UsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2FudmFzLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7XHJcblxyXG4gICAgaWYgKHRoaXMuc3JjKSB7XHJcbiAgICAgIHRoaXMuaW1wb3J0UGhvdG9Gcm9tU3JjKHRoaXMuc3JjKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghdGhpcy53aWR0aCB8fCAhdGhpcy5oZWlnaHQpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHdpZHRoIG9yIGhpZ2h0IGdpdmVuICEnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jYW52YXMuc2V0V2lkdGgodGhpcy53aWR0aCk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNldEhlaWdodCh0aGlzLmhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oJ3BhdGg6Y3JlYXRlZCcsICgpID0+IHtcclxuICAgICAgdGhpcy5zdGFjayA9IFtdO1xyXG4gICAgICB0aGlzLnNldFVuZG9SZWRvKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfSAgXHJcblxyXG4gIG5ld01hcmtlcigpe1xyXG4gICAgdmFyIHN0YXJ0WCA9IDQwO1xyXG4gICAgdmFyIHN0YXJ0WSA9IDQwO1xyXG5cclxuICAgIC8vdmFyIGxlZnQgPSB0aGlzLnJhbmRvbUludEZyb21JbnRlcnZhbChzdGFydFgtMTAwLHN0YXJ0WCsxMDApO1xyXG4gICAgLy92YXIgdG9wID0gdGhpcy5yYW5kb21JbnRGcm9tSW50ZXJ2YWwoc3RhcnRZLTEwMCxzdGFydFkrMTAwKTtcclxuICAgIHZhciBsZWZ0ID0gc3RhcnRYO1xyXG4gICAgdmFyIHRvcCA9IHN0YXJ0WTtcclxuICAgIHZhciBkZXNjcmlwdGlvbjogJyc7XHJcbiAgICB2YXIgY2FwdGlvbiA9ICcwJztcclxuXHJcbiAgICAvLyBDcmVhemlvbmUgZGVsbGEgY2FwdGlvblxyXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTAwMDAwOyBpKyspe1xyXG4gICAgICBpZiAodGhpcy5tYXJrZXJzLmZpbmQoeCA9PiB4LmNhcHRpb24gPT0gaS50b1N0cmluZygpKSA9PSBudWxsKXtcclxuICAgICAgICBjYXB0aW9uID0gaS50b1N0cmluZygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICB0aGlzLmNyZWF0ZU1hcmtlcih0b3AsbGVmdCxjYXB0aW9uLGRlc2NyaXB0aW9uKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZU1hcmtlcih0b3A6IG51bWJlciwgbGVmdDogbnVtYmVyLCBjYXB0aW9uOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpe1xyXG5cclxuICAgIC8qXHJcbiAgICAqIENyZW8gdW4gbnVvdm8gTWFya2VyXHJcbiAgICAqL1xyXG5cclxuICAgIC8vIENyZW8gaWwgY2VyY2hpb1xyXG4gICAgdmFyIGNpcmNsZSA9IG5ldyBmYWJyaWMuQ2lyY2xlKHtcclxuICAgICAgcmFkaXVzOiAzMCxcclxuICAgICAgb3BhY2l0eTogMC43LFxyXG4gICAgICBmaWxsOiAnZGFya2JsdWUnLFxyXG4gICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICBvcmlnaW5YOiAnY2VudGVyJywgXHJcbiAgICAgIG9yaWdpblk6ICdjZW50ZXInIFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlbyBpbCB0ZXN0byBkZW50cm8gYWwgY2VyY2hpbyBcclxuICAgIHZhciB0ZXh0ID0gbmV3IGZhYnJpYy5UZXh0KGNhcHRpb24sXHJcbiAgICB7ICBmb250U2l6ZTogMjUsIFxyXG4gICAgICAgIG9yaWdpblg6ICdjZW50ZXInLCBcclxuICAgICAgICBvcmlnaW5ZOiAnY2VudGVyJyxcclxuICAgICAgICBmaWxsIDogJ3doaXRlJyBcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlbyBpbCBncnVwcG8gbmVsIHF1YWxlIG1ldHRvIGNlcmNoaW8gZSB0ZXN0byBpbiBtb2RvIGNoZSBzaSBtdW92YW5vIGluc2llbWVcclxuICAgIHZhciBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoWyBjaXJjbGUsIHRleHQgXSwgeyAgbGVmdDogbGVmdCwgdG9wOiB0b3AgfSk7ICAgIFxyXG5cclxuICAgIC8vIENyZW8gdW4gb2dnZXR0byBtYXJrZXIgY2hlIGNvbnRpZW5lIGdsaSBlbGVtZW50aSBhdG9taWNpLiBTZXJ2ZSBwZXIgbGUgY2FuY2VsbGF6aW9uaSBlIGlsIHJvbGxiYWNrL21vZGlmaWNhIGRlZ2xpIGVsZW1lbnRpXHJcbiAgICB2YXIgbWFya2VyOiBNYXJrZXIgPSBuZXcgTWFya2VyKCk7XHJcbiAgICBtYXJrZXIuY2lyY2xlID0gY2lyY2xlO1xyXG4gICAgbWFya2VyLnRleHQgPSB0ZXh0O1xyXG4gICAgbWFya2VyLmdyb3VwID0gZ3JvdXA7XHJcbiAgICBtYXJrZXIuY2FwdGlvbiA9IGNhcHRpb247XHJcbiAgICBtYXJrZXIuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcclxuXHJcbiAgICAvLyBBZ2dpdW5nbyBpbCBncnVwcG8gbmVsbGEgbGlzdGEgZGVpIGdydXBwaVxyXG4gICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTtcclxuICAgIHRoaXMubWFya2Vycy5zb3J0KChhLGIpPT4geyByZXR1cm4gTnVtYmVyKGEuY2FwdGlvbikgLSBOdW1iZXIoYi5jYXB0aW9uKSB9KTtcclxuXHJcbiAgICAvLyBBZ2dpdW5nbyBpbCBncnVwcG8gYWxsJ2ltbWFnaW5lIGEgc2NoZXJtb1xyXG4gICAgdGhpcy5jYW52YXMuYWRkKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZU1hcmtlckJ5SW5kZXgoaW5kZXg6IG51bWJlcil7XHJcbiAgICB0aGlzLmNhbnZhcy5yZW1vdmUodGhpcy5tYXJrZXJzW2luZGV4XS5ncm91cCk7XHJcbiAgICB0aGlzLm1hcmtlcnMuc3BsaWNlKGluZGV4LDEpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQWxsTWFya2Vycygpe1xyXG4gICAgdGhpcy5tYXJrZXJzLmZvckVhY2goKG1hcmtlcikgPT4ge1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZW1vdmUobWFya2VyLmdyb3VwKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5tYXJrZXJzID0gbmV3IEFycmF5PE1hcmtlcj4oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VW5kb1JlZG8oKSB7XHJcbiAgICB0aGlzLmNhblVuZG8gPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoID4gMDtcclxuICAgIHRoaXMuY2FuUmVkbyA9IHRoaXMuc3RhY2subGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIC8qXHJcblxyXG4gICAgLy8gQWN0aW9uc1xyXG4gICAgcHVibGljIHVuZG8oKSB7XHJcbiAgICAgIGlmICh0aGlzLmNhblVuZG8pIHtcclxuICAgICAgICBjb25zdCBsYXN0SWQgPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoIC0gMTtcclxuICAgICAgICBjb25zdCBsYXN0T2JqID0gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpW2xhc3RJZF07XHJcbiAgICAgICAgdGhpcy5zdGFjay5wdXNoKGxhc3RPYmopO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShsYXN0T2JqKTtcclxuICAgICAgICB0aGlzLnNldFVuZG9SZWRvKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICBcclxuICAgIHB1YmxpYyByZWRvKCkge1xyXG4gICAgICBpZiAodGhpcy5jYW5SZWRvKSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RJblN0YWNrID0gdGhpcy5zdGFjay5zcGxpY2UoLTEsIDEpWzBdO1xyXG4gICAgICAgIGlmIChmaXJzdEluU3RhY2spIHtcclxuICAgICAgICAgIHRoaXMuY2FudmFzLmluc2VydEF0KGZpcnN0SW5TdGFjaywgdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpLmxlbmd0aCAtIDEsIGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRVbmRvUmVkbygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgXHJcbiAgICBwdWJsaWMgY2xlYXJDYW52YXMoKSB7XHJcbiAgICAgIGlmICh0aGlzLmNhbnZhcykge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZSguLi50aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkpO1xyXG4gICAgICAgIHRoaXMuc2V0VW5kb1JlZG8oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuKi9cclxuXHJcbiAgcHJpdmF0ZSBpbXBvcnRQaG90b0Zyb21TcmMoc3JjOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGxldCBpc0ZpcnN0VHJ5ID0gdHJ1ZTtcclxuICAgIGNvbnN0IGltZ0VsID0gbmV3IEltYWdlKCk7XHJcbiAgICBpbWdFbC5zZXRBdHRyaWJ1dGUoJ2Nyb3NzT3JpZ2luJywgJ2Fub255bW91cycpO1xyXG4gICAgaW1nRWwuc3JjID0gc3JjO1xyXG4gICAgaW1nRWwub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgLy8gUmV0cnkgd2l0aCBjb3JzIHByb3h5XHJcbiAgICAgIGlmIChpc0ZpcnN0VHJ5KSB7XHJcbiAgICAgICAgaW1nRWwuc3JjID0gJ2h0dHBzOi8vY29ycy1hbnl3aGVyZS5oZXJva3VhcHAuY29tLycgKyB0aGlzLnNyYztcclxuICAgICAgICBpc0ZpcnN0VHJ5ID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IFwiQ09SUyBFcnJvclwiO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgaW1nRWwub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmltYWdlVXNlZCA9IG5ldyBmYWJyaWMuSW1hZ2UoaW1nRWwpO1xyXG5cclxuICAgICAgdGhpcy5pbWFnZVVzZWQuY2xvbmVBc0ltYWdlKGltYWdlID0+IHtcclxuICAgICAgICBsZXQgd2lkdGggPSBpbWdFbC53aWR0aDtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gaW1nRWwuaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy53aWR0aCkge1xyXG4gICAgICAgICAgd2lkdGggPSB0aGlzLndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5oZWlnaHQpIHtcclxuICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmljYWxjb2xvIGxlIGRpbWVuc2lvbmkgZGVsbCdpbW1hZ2luZSBwZXIgZmFybGEgZW50cmFyZSBuZWxsbyBzY2hlcm1vXHJcbiAgICAgICAgLy8gZGltaW51aXNjbyBkaSB1biA1JSBhbGxhIHZvbHRhIGxlIGRpbWVuc2lvbmkgZmlubyBhIHJpZW50cmFyZSBuZWxsJzg1JSBkZWxsYSBncmFuZGV6emEgZGVsbGEgZmluZXN0cmFcclxuICAgICAgICBsZXQgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgICAgICBsZXQgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgICAgIHdoaWxlKHdpZHRoID4gd2luZG93V2lkdGggKiAwLjg1KXtcclxuICAgICAgICAgIHdpZHRoID0gd2lkdGggKiAwLjk1O1xyXG4gICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICogMC45NTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2hpbGUoaGVpZ2h0ID4gd2luZG93SGVpZ2h0ICogMC44NSl7XHJcbiAgICAgICAgICB3aWR0aCA9IHdpZHRoICogMC45NTtcclxuICAgICAgICAgIGhlaWdodCA9IGhlaWdodCAqIDAuOTU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaW1hZ2Uuc2NhbGVUb1dpZHRoKHdpZHRoLCBmYWxzZSk7XHJcbiAgICAgICAgaW1hZ2Uuc2NhbGVUb0hlaWdodChoZWlnaHQsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QmFja2dyb3VuZEltYWdlKGltYWdlLCAoKGltZzogSFRNTEltYWdlRWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGltZykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JjZVNpemVDYW52YXMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRXaWR0aCh3aWR0aCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KGhlaWdodCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0V2lkdGgoaW1hZ2UuZ2V0U2NhbGVkV2lkdGgoKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KGltYWdlLmdldFNjYWxlZEhlaWdodCgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLCB7XHJcbiAgICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsXHJcbiAgICAgICAgICBvcmlnaW5YOiAnbGVmdCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNhdmVkTWFya2VycyAhPSBudWxsKXsgdGhpcy5sb2FkTWFya2VycygpOyB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgbG9hZE1hcmtlcnMoKXtcclxuICAgIHZhciBtYXJrZXJzT2JqOiBBcnJheTxPdXRNYXJrZXI+ID0gSlNPTi5wYXJzZSh0aGlzLnNhdmVkTWFya2Vycyk7XHJcbiAgICBtYXJrZXJzT2JqLmZvckVhY2goKG1hcmtlcikgPT4ge1xyXG4gICAgICB0aGlzLmNyZWF0ZU1hcmtlcihtYXJrZXIudG9wLG1hcmtlci5sZWZ0LG1hcmtlci5jYXB0aW9uLG1hcmtlci5kZXNjcmlwdGlvbik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlSW1hZ2UoKXtcclxuXHJcbiAgICB0aGlzLm91dG1hcmtlcnMgPSBuZXcgQXJyYXk8T3V0TWFya2VyPigpO1xyXG5cclxuICAgIHRoaXMubWFya2Vycy5mb3JFYWNoKChtYXJrZXIpID0+IHtcclxuICAgICAgdmFyIG91dG1hcmtlciA9IG5ldyBPdXRNYXJrZXIoKTtcclxuICAgICAgb3V0bWFya2VyLmNhcHRpb24gPSBtYXJrZXIuY2FwdGlvbjtcclxuICAgICAgb3V0bWFya2VyLmRlc2NyaXB0aW9uID0gbWFya2VyLmRlc2NyaXB0aW9uO1xyXG4gICAgICBvdXRtYXJrZXIudG9wID0gbWFya2VyLmdyb3VwLnRvcDtcclxuICAgICAgb3V0bWFya2VyLmxlZnQgPSBtYXJrZXIuZ3JvdXAubGVmdDtcclxuICAgICAgdGhpcy5vdXRtYXJrZXJzLnB1c2gob3V0bWFya2VyKTtcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMud2lkdGggJiYgdGhpcy5oZWlnaHQpIHtcclxuICAgICAgY29uc3QgY2FudmFzU2NhbGVkRWxlbWVudDogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgY29uc3QgY2FudmFzU2NhbGVkID0gbmV3IGZhYnJpYy5DYW52YXMoY2FudmFzU2NhbGVkRWxlbWVudCk7XHJcbiAgICAgIGNhbnZhc1NjYWxlZC5iYWNrZ3JvdW5kQ29sb3IgPSAnd2hpdGUnO1xyXG5cclxuICAgICAgbmV3IE9ic2VydmFibGU8ZmFicmljLkNhbnZhcz4ob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmltYWdlVXNlZCkge1xyXG5cclxuICAgICAgICAgICAgY2FudmFzU2NhbGVkLnNldEJhY2tncm91bmRJbWFnZSh0aGlzLmltYWdlVXNlZCwgKGltZzogSFRNTEltYWdlRWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghaW1nKSB7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihuZXcgRXJyb3IoJ0ltcG9zc2libGUgdG8gZHJhdyB0aGUgaW1hZ2Ugb24gdGhlIHRlbXBvcmFyeSBjYW52YXMnKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0V2lkdGgoaW1nLndpZHRoKTtcclxuICAgICAgICAgICAgICBjYW52YXNTY2FsZWQuc2V0SGVpZ2h0KGltZy5oZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGNhbnZhc1NjYWxlZCk7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcclxuICAgICAgICAgICAgICBvcmlnaW5YOiAnbGVmdCcsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2FudmFzU2NhbGVkLnNldFdpZHRoKHRoaXMud2lkdGgpO1xyXG4gICAgICAgICAgY2FudmFzU2NhbGVkLnNldEhlaWdodCh0aGlzLmhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgcHJvY2VzcyA9IG9mKGNhbnZhc1NjYWxlZCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhdGlvWCA9IGNhbnZhc1NjYWxlZC5nZXRXaWR0aCgpIC8gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTtcclxuICAgICAgICAgICAgY29uc3QgcmF0aW9ZID0gY2FudmFzU2NhbGVkLmdldEhlaWdodCgpIC8gdGhpcy5jYW52YXMuZ2V0SGVpZ2h0KCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkuZm9yRWFjaCgob3JpZ2luYWxPYmplY3Q6IGZhYnJpYy5PYmplY3QsIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIHByb2Nlc3MgPSBwcm9jZXNzLnBpcGUoc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxmYWJyaWMuQ2FudmFzPihvYnNlcnZlck9iamVjdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsT2JqZWN0LmNsb25lKChjbG9uZWRPYmplY3Q6IGZhYnJpYy5PYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjbG9uZWRPYmplY3Quc2V0KCdsZWZ0Jywgb3JpZ2luYWxPYmplY3QubGVmdCAqIHJhdGlvWCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVkT2JqZWN0LnNldCgndG9wJywgb3JpZ2luYWxPYmplY3QudG9wICogcmF0aW9ZKTtcclxuICAgICAgICAgICAgICAgICAgICBjbG9uZWRPYmplY3Quc2NhbGVUb1dpZHRoKG9yaWdpbmFsT2JqZWN0LndpZHRoICogcmF0aW9YKTtcclxuICAgICAgICAgICAgICAgICAgICBjbG9uZWRPYmplY3Quc2NhbGVUb0hlaWdodChvcmlnaW5hbE9iamVjdC5oZWlnaHQgKiByYXRpb1kpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYW52YXNTY2FsZWQuaW5zZXJ0QXQoY2xvbmVkT2JqZWN0LCBpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FudmFzU2NhbGVkLnJlbmRlckFsbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlck9iamVjdC5uZXh0KGNhbnZhc1NjYWxlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJPYmplY3QuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHByb2Nlc3M7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBjYW52YXNTY2FsZWQucmVuZGVyQWxsKCk7XHJcbiAgICAgICAgY2FudmFzU2NhbGVkLmdldEVsZW1lbnQoKS50b0Jsb2IoXHJcbiAgICAgICAgICAoZGF0YTogQmxvYikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1hcmtlZEltYWdlLmltYWdlID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5tYXJrZWRJbWFnZS5vdXRtYXJrZXJzID0gdGhpcy5vdXRtYXJrZXJzO1xyXG4gICAgICAgICAgICB0aGlzLnNhdmUuZW1pdCh0aGlzLm1hcmtlZEltYWdlKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0aGlzLm91dHB1dE1pbWVUeXBlLFxyXG4gICAgICAgICAgdGhpcy5vdXRwdXRRdWFsaXR5XHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhbnZhcy5nZXRFbGVtZW50KCkudG9CbG9iKFxyXG4gICAgICAgIChkYXRhOiBCbG9iKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1hcmtlZEltYWdlLmltYWdlID0gZGF0YTtcclxuICAgICAgICAgIHRoaXMubWFya2VkSW1hZ2Uub3V0bWFya2VycyA9IHRoaXMub3V0bWFya2VycztcclxuICAgICAgICAgIHRoaXMuc2F2ZS5lbWl0KHRoaXMubWFya2VkSW1hZ2UpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGhpcy5vdXRwdXRNaW1lVHlwZSxcclxuICAgICAgICB0aGlzLm91dHB1dFF1YWxpdHlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLy90aGlzLnNhdmUuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlKCl7XHJcbiAgICB0aGlzLmNsb3NlRGlhbG9nLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHJhbmRvbUludEZyb21JbnRlcnZhbChtaW4sIG1heCkgeyAvLyBtaW4gYW5kIG1heCBpbmNsdWRlZCBcclxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pXHJcbiAgfVxyXG5cclxuICBsb2coZWwpe1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZyhcImltYWdlTWFya2VyIGVsZW1lbnQgXCIsZWwpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXJrZXIge1xyXG4gIGNpcmNsZTogZmFicmljLkNpcmNsZTtcclxuICB0ZXh0OiBmYWJyaWMuVGV4dDtcclxuICBncm91cDogZmFicmljLkdyb3VwO1xyXG4gIHRvcDogbnVtYmVyO1xyXG4gIGxlZnQ6IG51bWJlcjtcclxuICBjYXB0aW9uOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZyA9IFwiXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBPdXRNYXJrZXIge1xyXG4gIHRvcDogbnVtYmVyO1xyXG4gIGxlZnQ6IG51bWJlcjtcclxuICBjYXB0aW9uOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZyA9IFwiXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNYXJrZWRJbWFnZSB7XHJcbiAgb3V0bWFya2VyczogQXJyYXk8T3V0TWFya2VyPjtcclxuICBpbWFnZTogQmxvYjtcclxufSIsIjxkaXYgY2xhc3M9XCJjYW52YXMtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FudmFzXCI+XHJcbiAgICAgICAgPGNhbnZhcyBbaWRdPVwiY29tcG9uZW50R3VpZFwiPjwvY2FudmFzPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxvYXRpbmctdG9vbGJhclwiIGNka0RyYWcgY2RrRHJhZ0JvdW5kYXJ5PVwiLmNhbnZhcy1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1oYW5kbGVcIiBjZGtEcmFnSGFuZGxlPlxyXG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPjxzcGFuPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1hcmtlckJ1dHRvblwiIChjbGljayk9XCJuZXdNYXJrZXIoKVwiPkNyZWEgbnVvdm8gbWFya2VyPC9idXR0b24+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZF9vdmVyZmxvd19jb250YWluZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kX2NvbnRhaW5lclwiICpuZ0Zvcj1cImxldCBtYXJrZXIgb2YgbWFya2VyczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcHRpb25cIiBbaW5uZXJIVE1MXT1cIm1hcmtlci5jYXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dGFyZWFcIj48dGV4dGFyZWEgWyhuZ01vZGVsKV09XCJtYXJrZXIuZGVzY3JpcHRpb25cIiAoY2xpY2spPVwibG9nKG1hcmtlci5kZXNjcmlwdGlvbilcIj48L3RleHRhcmVhPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlbGV0ZVwiIChjbGljayk9XCJkZWxldGVNYXJrZXJCeUluZGV4KGkpXCI+PHRtdy1pY29uIGNsYXNzPVwibWF0LWljb25cIiBuYW1lPVwidHJhc2hcIj48L3Rtdy1pY29uPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIG1hcmtlckJ1dHRvbiBtdC0yXCIgKm5nSWY9XCIhaW5Db25maWdcIiAoY2xpY2spPVwic2F2ZUltYWdlKClcIj5TYWx2YSBJbW1hZ2luZTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdhcm5pbmcgbWFya2VyQnV0dG9uIG10LTJcIiAoY2xpY2spPVwicmVtb3ZlQWxsTWFya2VycygpXCI+UmltdW92aSB0dXR0aSBpIG1hcmtlcnM8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgbWFya2VyQnV0dG9uIG10LTJcIiAoY2xpY2spPVwiY2xvc2UoKVwiPkFubnVsbGEgRGlzZWdubzwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=