@bizdoc/core 2.3.34 → 2.3.36

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 (66) hide show
  1. package/esm2022/lib/admin/architecture/elements/matrix-view.component.mjs +3 -3
  2. package/esm2022/lib/admin/architecture/elements/performance-report.component.mjs +3 -4
  3. package/esm2022/lib/admin/diff/configuration-diff.component.mjs +3 -5
  4. package/esm2022/lib/admin/document-trace/document-trace.component.mjs +3 -5
  5. package/esm2022/lib/admin/form/workflow/workflow.component.mjs +3 -5
  6. package/esm2022/lib/admin/profiler/profiler.component.mjs +3 -5
  7. package/esm2022/lib/admin/utility.pane.component.mjs +3 -6
  8. package/esm2022/lib/browse/browse.pane.component.mjs +3 -5
  9. package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +3 -3
  10. package/esm2022/lib/chat/chat-info.mjs +2 -2
  11. package/esm2022/lib/chat/contacts.pane.component.mjs +3 -6
  12. package/esm2022/lib/chat/conversation.component.mjs +3 -4
  13. package/esm2022/lib/chat/conversation.pane.component.mjs +3 -5
  14. package/esm2022/lib/compose/action/action.pane.dialog.exp.mjs +3 -5
  15. package/esm2022/lib/compose/comments/comment.component.mjs +3 -3
  16. package/esm2022/lib/compose/comments/comments.component.mjs +3 -4
  17. package/esm2022/lib/compose/comments/comments.pane.component.mjs +3 -5
  18. package/esm2022/lib/compose/comments/edit-comment.component.mjs +3 -3
  19. package/esm2022/lib/compose/compose.pane.component.mjs +3 -5
  20. package/esm2022/lib/compose/tag/tags.component.mjs +3 -3
  21. package/esm2022/lib/compose/trace/trace.pane.component.mjs +3 -5
  22. package/esm2022/lib/compose/version-compare/version.pane.component.mjs +3 -5
  23. package/esm2022/lib/core/animations.mjs +9 -1
  24. package/esm2022/lib/core/inputs/combination-picker.mjs +3 -3
  25. package/esm2022/lib/core/slots/slots.component.mjs +9 -9
  26. package/esm2022/lib/core/sticky-toolbar.exp.mjs +30 -0
  27. package/esm2022/lib/core/tagging/edit-input.component.mjs +3 -3
  28. package/esm2022/lib/core/translations.mjs +14 -8
  29. package/esm2022/lib/core/virtual-tabs.component.exp.mjs +84 -0
  30. package/esm2022/lib/cube/explore/explore.pane.component.mjs +3 -5
  31. package/esm2022/lib/cube/explore/item.pane.component.mjs +3 -5
  32. package/esm2022/lib/cube/filter/filter-tags.component.exp.mjs +3 -3
  33. package/esm2022/lib/cube/filter/filter.component.mjs +3 -3
  34. package/esm2022/lib/cube/matrix/matrix.pane.component.mjs +3 -5
  35. package/esm2022/lib/cube/view.pane.component.mjs +3 -5
  36. package/esm2022/lib/dashboard/dashboard.pane.component.mjs +3 -3
  37. package/esm2022/lib/home/home.desktop.component.mjs +3 -3
  38. package/esm2022/lib/home/options/options.component.mjs +3 -3
  39. package/esm2022/lib/modules/chart.module.mjs +3 -3
  40. package/esm2022/lib/notifications/notifications.pane.component.mjs +3 -6
  41. package/esm2022/lib/options/options.component.mjs +21 -16
  42. package/esm2022/lib/options/options.service.mjs +2 -1
  43. package/esm2022/lib/reports/cube/role-performance.component.mjs +127 -34
  44. package/esm2022/lib/reports/report-viewer.component.mjs +2 -1
  45. package/esm2022/lib/reports/report.pane.component.mjs +3 -5
  46. package/esm2022/lib/routes.desktop.mjs +2 -2
  47. package/esm2022/lib/scheduler/schedule.component.mjs +3 -3
  48. package/esm2022/lib/scheduler/scheduler.pane.component.mjs +3 -6
  49. package/esm2022/lib/shared.module.mjs +7 -6
  50. package/esm2022/public-api.mjs +3 -2
  51. package/fesm2022/bizdoc-core.mjs +487 -348
  52. package/fesm2022/bizdoc-core.mjs.map +1 -1
  53. package/lib/admin/architecture/elements/performance-report.component.d.ts +0 -1
  54. package/lib/chat/conversation.component.d.ts +0 -1
  55. package/lib/compose/comments/comments.component.d.ts +0 -1
  56. package/lib/core/animations.d.ts +2 -0
  57. package/lib/core/slots/slots.component.d.ts +1 -1
  58. package/lib/core/translations.d.ts +11 -5
  59. package/lib/core/virtual-tabs.component.exp.d.ts +22 -0
  60. package/lib/options/options.component.d.ts +6 -5
  61. package/lib/reports/cube/role-performance.component.d.ts +26 -13
  62. package/lib/shared.module.d.ts +141 -140
  63. package/package.json +1 -1
  64. package/public-api.d.ts +2 -1
  65. package/esm2022/lib/core/StickyToolbar.mjs +0 -30
  66. /package/lib/core/{StickyToolbar.d.ts → sticky-toolbar.exp.d.ts} +0 -0
@@ -0,0 +1,30 @@
1
+ import { Directive } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class StickyToolbar {
4
+ constructor(_vc) {
5
+ this._vc = _vc;
6
+ this._previousTop = 0;
7
+ this._visible = true;
8
+ }
9
+ _listener(evt) {
10
+ const top = evt.currentTarget.scrollTop;
11
+ if (this._visible !== this._previousTop > top && top > 0) {
12
+ this._visible = !this._visible;
13
+ this._vc.element.nativeElement.classList.toggle('sticky');
14
+ }
15
+ this._previousTop = top;
16
+ }
17
+ ngOnInit() {
18
+ this._vc.element.nativeElement.parentElement.addEventListener('scroll', this._listener.bind(this));
19
+ }
20
+ ngOnDestroy() {
21
+ this._vc.element.nativeElement.parentElement.removeEventListener('scroll', this._listener);
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: StickyToolbar, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); }
24
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: StickyToolbar, selector: "bizdoc-sticky", ngImport: i0 }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: StickyToolbar, decorators: [{
27
+ type: Directive,
28
+ args: [{ selector: 'bizdoc-sticky' }]
29
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpY2t5LXRvb2xiYXIuZXhwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3N0aWNreS10b29sYmFyLmV4cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF1QyxNQUFNLGVBQWUsQ0FBQzs7QUFJL0UsTUFBTSxPQUFPLGFBQWE7SUFHeEIsWUFBb0IsR0FBcUI7UUFBckIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFGakMsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsYUFBUSxHQUFHLElBQUksQ0FBQztJQUd4QixDQUFDO0lBQ08sU0FBUyxDQUFDLEdBQWU7UUFDL0IsTUFBTSxHQUFHLEdBQUksR0FBRyxDQUFDLGFBQWdDLENBQUMsU0FBUyxDQUFDO1FBQzVELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBNkIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztJQUMxQixDQUFDO0lBQ0QsUUFBUTtRQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQTZCLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RILENBQUM7SUFDRCxXQUFXO1FBQ1IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBNkIsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RyxDQUFDOzhHQW5CVSxhQUFhO2tHQUFiLGFBQWE7OzJGQUFiLGFBQWE7a0JBRHpCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuXHJcbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ2JpemRvYy1zdGlja3knIH0pXHJcbmV4cG9ydCBjbGFzcyBTdGlja3lUb29sYmFyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX3ByZXZpb3VzVG9wID0gMDtcclxuICBwcml2YXRlIF92aXNpYmxlID0gdHJ1ZTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YzogVmlld0NvbnRhaW5lclJlZikge1xyXG5cclxuICB9XHJcbiAgcHJpdmF0ZSBfbGlzdGVuZXIoZXZ0OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCB0b3AgPSAoZXZ0LmN1cnJlbnRUYXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpLnNjcm9sbFRvcDtcclxuICAgIGlmICh0aGlzLl92aXNpYmxlICE9PSB0aGlzLl9wcmV2aW91c1RvcCA+IHRvcCAmJiB0b3AgPiAwKSB7XHJcbiAgICAgIHRoaXMuX3Zpc2libGUgPSAhdGhpcy5fdmlzaWJsZTtcclxuICAgICAgKHRoaXMuX3ZjLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LnRvZ2dsZSgnc3RpY2t5Jyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wcmV2aW91c1RvcCA9IHRvcDtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAodGhpcy5fdmMuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuX2xpc3RlbmVyLmJpbmQodGhpcykpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICh0aGlzLl92Yy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnBhcmVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5fbGlzdGVuZXIpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -188,11 +188,11 @@ export class EditInputComponent {
188
188
  this._image = null;
189
189
  }
190
190
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: EditInputComponent, deps: [{ token: i1.Popup }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
191
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: EditInputComponent, selector: "bizdoc-edit-text", inputs: { placeholder: "placeholder", text: "text", image: "image", resource: "resource", disabled: "disabled", autofocus: "autofocus", cache: "cache" }, outputs: { change: "change", onOk: "ok", onFocus: "focus", onBlur: "blur" }, viewQueries: [{ propertyName: "_textElement", first: true, predicate: ["textArea"], descendants: true }, { propertyName: "_rte", first: true, predicate: RichTextEditorComponent, descendants: true }], ngImport: i0, template: "<div class=\"column\">\n @switch (mode) {\n @case ('html') {\n <ejs-richtexteditor [value]=\"text\"\n (change)=\"_htmlChange($event)\"\n [toolbarSettings]=\"toolbarSettings\"></ejs-richtexteditor>\n }\n @default {\n <mat-form-field floatLabel=\"never\" class=\"flex\">\n <textarea matInput cdkTextareaAutosize [autofocus]=\"autofocus\"\n [(bizdocTagging)]=\"resource\"\n (keydown)=\"_key($event)\"\n (input)=\"_textChange($event)\"\n [value]=\"text\"\n (paste)=\"_paste($event)\"\n [placeholder]=\"(placeholder || 'TypeHere') | translate\"\n (focus)=\"onFocus.emit()\"\n (focusout)=\"onBlur.emit()\"\n #textArea></textarea>\n </mat-form-field>\n }\n }\n <div class=\"row nav-toolbar\">\n <button mat-icon-button (click)=\"_openDocument($event)\" [bizdocTooltip]=\"'Document'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>article</mat-icon></button>\n <button mat-icon-button (click)=\"_openMention($event)\" [bizdocTooltip]=\"'Mention'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>alternate_email</mat-icon></button>\n <button mat-icon-button (click)=\"_openEmoji($event)\" [bizdocTooltip]=\"'Emoji'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>insert_emoticon</mat-icon></button>\n <button mat-icon-button (click)=\"_toggleHtml()\" [bizdocTooltip]=\"'Text'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\"><mat-icon>text_fields</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"_ok()\" [disabled]=\"disabled\" class=\"tool\">\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\n </button>\n </div>\n</div>\n@if (_image) {\n <div>\n <img [src]=\"'data:image/png;base64,'+ _image\" />\n <button mat-icon-button (click)=\"_clearImage()\" [disabled]=\"disabled\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n}\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.mat-mdc-form-field{-ms-flex:1 auto;-webkit-flex:1 auto;flex:1 auto;padding:0 8px}.mat-mdc-form-field textarea{overflow:hidden}img{max-width:300px}\n"], dependencies: [{ kind: "component", type: i2.RichTextEditorComponent, selector: "ejs-richtexteditor", inputs: ["autoSaveOnIdle", "backgroundColor", "bulletFormatList", "cssClass", "editorMode", "emojiPickerSettings", "enableAutoUrl", "enableHtmlEncode", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "enableTabKey", "enableXhtml", "enabled", "enterKey", "fileManagerSettings", "floatingToolbarOffset", "fontColor", "fontFamily", "fontSize", "format", "formatPainterSettings", "formatter", "height", "htmlAttributes", "iframeSettings", "inlineMode", "insertAudioSettings", "insertImageSettings", "insertVideoSettings", "keyConfig", "locale", "maxLength", "numberFormatList", "pasteCleanupSettings", "placeholder", "quickToolbarSettings", "readonly", "saveInterval", "shiftEnterKey", "showCharCount", "showTooltip", "tableSettings", "toolbarSettings", "undoRedoSteps", "undoRedoTimer", "value", "valueTemplate", "width"], outputs: ["actionBegin", "actionComplete", "afterImageDelete", "afterMediaDelete", "afterPasteCleanup", "beforeDialogClose", "beforeDialogOpen", "beforeFileUpload", "beforeImageDrop", "beforeImageUpload", "beforePasteCleanup", "beforeQuickToolbarOpen", "beforeSanitizeHtml", "blur", "change", "created", "destroyed", "dialogClose", "dialogOpen", "fileRemoving", "fileSelected", "fileUploadFailed", "fileUploadSuccess", "fileUploading", "focus", "imageRemoving", "imageSelected", "imageUploadFailed", "imageUploadSuccess", "imageUploading", "quickToolbarClose", "quickToolbarOpen", "resizeStart", "resizeStop", "resizing", "toolbarClick", "toolbarStatusUpdate", "updatedToolbarStatus", "valueChange"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i6.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.TaggingDirective, selector: "[bizdocTagging]", inputs: ["bizdocTagging"], outputs: ["bizdocTaggingChange"] }, { kind: "directive", type: i9.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] }); }
191
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: EditInputComponent, selector: "bizdoc-edit-text", inputs: { placeholder: "placeholder", text: "text", image: "image", resource: "resource", disabled: "disabled", autofocus: "autofocus", cache: "cache" }, outputs: { change: "change", onOk: "ok", onFocus: "focus", onBlur: "blur" }, viewQueries: [{ propertyName: "_textElement", first: true, predicate: ["textArea"], descendants: true }, { propertyName: "_rte", first: true, predicate: RichTextEditorComponent, descendants: true }], ngImport: i0, template: "<div class=\"column\">\n @switch (mode) {\n @case ('html') {\n <ejs-richtexteditor [value]=\"text\"\n (change)=\"_htmlChange($event)\"\n [toolbarSettings]=\"toolbarSettings\"></ejs-richtexteditor>\n }\n @default {\n <mat-form-field floatLabel=\"never\" class=\"flex\">\n <textarea matInput cdkTextareaAutosize [autofocus]=\"autofocus\"\n [(bizdocTagging)]=\"resource\"\n (keydown)=\"_key($event)\"\n (input)=\"_textChange($event)\"\n [value]=\"text\"\n (paste)=\"_paste($event)\"\n [placeholder]=\"(placeholder || 'CommentHere') | translate\"\n (focus)=\"onFocus.emit()\"\n (focusout)=\"onBlur.emit()\"\n #textArea></textarea>\n </mat-form-field>\n }\n }\n <div class=\"row nav-toolbar\">\n <button mat-icon-button (click)=\"_openDocument($event)\" [bizdocTooltip]=\"'Document'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>article</mat-icon></button>\n <button mat-icon-button (click)=\"_openMention($event)\" [bizdocTooltip]=\"'Mention'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>alternate_email</mat-icon></button>\n <button mat-icon-button (click)=\"_openEmoji($event)\" [bizdocTooltip]=\"'Emoji'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>insert_emoticon</mat-icon></button>\n <button mat-icon-button (click)=\"_toggleHtml()\" [bizdocTooltip]=\"'Text'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\"><mat-icon>text_fields</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"_ok()\" [disabled]=\"disabled\" class=\"tool\">\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\n </button>\n </div>\n</div>\n@if (_image) {\n <div>\n <img [src]=\"'data:image/png;base64,'+ _image\" />\n <button mat-icon-button (click)=\"_clearImage()\" [disabled]=\"disabled\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n}\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.mat-mdc-form-field{-ms-flex:1 auto;-webkit-flex:1 auto;flex:1 auto;padding:0 8px}.mat-mdc-form-field textarea{overflow:hidden}img{max-width:300px}\n"], dependencies: [{ kind: "component", type: i2.RichTextEditorComponent, selector: "ejs-richtexteditor", inputs: ["autoSaveOnIdle", "backgroundColor", "bulletFormatList", "cssClass", "editorMode", "emojiPickerSettings", "enableAutoUrl", "enableHtmlEncode", "enableHtmlSanitizer", "enablePersistence", "enableResize", "enableRtl", "enableTabKey", "enableXhtml", "enabled", "enterKey", "fileManagerSettings", "floatingToolbarOffset", "fontColor", "fontFamily", "fontSize", "format", "formatPainterSettings", "formatter", "height", "htmlAttributes", "iframeSettings", "inlineMode", "insertAudioSettings", "insertImageSettings", "insertVideoSettings", "keyConfig", "locale", "maxLength", "numberFormatList", "pasteCleanupSettings", "placeholder", "quickToolbarSettings", "readonly", "saveInterval", "shiftEnterKey", "showCharCount", "showTooltip", "tableSettings", "toolbarSettings", "undoRedoSteps", "undoRedoTimer", "value", "valueTemplate", "width"], outputs: ["actionBegin", "actionComplete", "afterImageDelete", "afterMediaDelete", "afterPasteCleanup", "beforeDialogClose", "beforeDialogOpen", "beforeFileUpload", "beforeImageDrop", "beforeImageUpload", "beforePasteCleanup", "beforeQuickToolbarOpen", "beforeSanitizeHtml", "blur", "change", "created", "destroyed", "dialogClose", "dialogOpen", "fileRemoving", "fileSelected", "fileUploadFailed", "fileUploadSuccess", "fileUploading", "focus", "imageRemoving", "imageSelected", "imageUploadFailed", "imageUploadSuccess", "imageUploading", "quickToolbarClose", "quickToolbarOpen", "resizeStart", "resizeStop", "resizing", "toolbarClick", "toolbarStatusUpdate", "updatedToolbarStatus", "valueChange"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i6.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.TaggingDirective, selector: "[bizdocTagging]", inputs: ["bizdocTagging"], outputs: ["bizdocTaggingChange"] }, { kind: "directive", type: i9.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] }); }
192
192
  }
193
193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: EditInputComponent, decorators: [{
194
194
  type: Component,
195
- args: [{ selector: 'bizdoc-edit-text', template: "<div class=\"column\">\n @switch (mode) {\n @case ('html') {\n <ejs-richtexteditor [value]=\"text\"\n (change)=\"_htmlChange($event)\"\n [toolbarSettings]=\"toolbarSettings\"></ejs-richtexteditor>\n }\n @default {\n <mat-form-field floatLabel=\"never\" class=\"flex\">\n <textarea matInput cdkTextareaAutosize [autofocus]=\"autofocus\"\n [(bizdocTagging)]=\"resource\"\n (keydown)=\"_key($event)\"\n (input)=\"_textChange($event)\"\n [value]=\"text\"\n (paste)=\"_paste($event)\"\n [placeholder]=\"(placeholder || 'TypeHere') | translate\"\n (focus)=\"onFocus.emit()\"\n (focusout)=\"onBlur.emit()\"\n #textArea></textarea>\n </mat-form-field>\n }\n }\n <div class=\"row nav-toolbar\">\n <button mat-icon-button (click)=\"_openDocument($event)\" [bizdocTooltip]=\"'Document'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>article</mat-icon></button>\n <button mat-icon-button (click)=\"_openMention($event)\" [bizdocTooltip]=\"'Mention'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>alternate_email</mat-icon></button>\n <button mat-icon-button (click)=\"_openEmoji($event)\" [bizdocTooltip]=\"'Emoji'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>insert_emoticon</mat-icon></button>\n <button mat-icon-button (click)=\"_toggleHtml()\" [bizdocTooltip]=\"'Text'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\"><mat-icon>text_fields</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"_ok()\" [disabled]=\"disabled\" class=\"tool\">\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\n </button>\n </div>\n</div>\n@if (_image) {\n <div>\n <img [src]=\"'data:image/png;base64,'+ _image\" />\n <button mat-icon-button (click)=\"_clearImage()\" [disabled]=\"disabled\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n}\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.mat-mdc-form-field{-ms-flex:1 auto;-webkit-flex:1 auto;flex:1 auto;padding:0 8px}.mat-mdc-form-field textarea{overflow:hidden}img{max-width:300px}\n"] }]
195
+ args: [{ selector: 'bizdoc-edit-text', template: "<div class=\"column\">\n @switch (mode) {\n @case ('html') {\n <ejs-richtexteditor [value]=\"text\"\n (change)=\"_htmlChange($event)\"\n [toolbarSettings]=\"toolbarSettings\"></ejs-richtexteditor>\n }\n @default {\n <mat-form-field floatLabel=\"never\" class=\"flex\">\n <textarea matInput cdkTextareaAutosize [autofocus]=\"autofocus\"\n [(bizdocTagging)]=\"resource\"\n (keydown)=\"_key($event)\"\n (input)=\"_textChange($event)\"\n [value]=\"text\"\n (paste)=\"_paste($event)\"\n [placeholder]=\"(placeholder || 'CommentHere') | translate\"\n (focus)=\"onFocus.emit()\"\n (focusout)=\"onBlur.emit()\"\n #textArea></textarea>\n </mat-form-field>\n }\n }\n <div class=\"row nav-toolbar\">\n <button mat-icon-button (click)=\"_openDocument($event)\" [bizdocTooltip]=\"'Document'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>article</mat-icon></button>\n <button mat-icon-button (click)=\"_openMention($event)\" [bizdocTooltip]=\"'Mention'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>alternate_email</mat-icon></button>\n <button mat-icon-button (click)=\"_openEmoji($event)\" [bizdocTooltip]=\"'Emoji'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\" [disabled]=\"mode !== 'text'\"><mat-icon>insert_emoticon</mat-icon></button>\n <button mat-icon-button (click)=\"_toggleHtml()\" [bizdocTooltip]=\"'Text'|translate\" bizdocTooltipPosition=\"above\" class=\"tool\"><mat-icon>text_fields</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"_ok()\" [disabled]=\"disabled\" class=\"tool\">\n <mat-icon class=\"mat-icon-rtl-mirror\">send</mat-icon>\n </button>\n </div>\n</div>\n@if (_image) {\n <div>\n <img [src]=\"'data:image/png;base64,'+ _image\" />\n <button mat-icon-button (click)=\"_clearImage()\" [disabled]=\"disabled\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n}\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column}.mat-mdc-form-field{-ms-flex:1 auto;-webkit-flex:1 auto;flex:1 auto;padding:0 8px}.mat-mdc-form-field textarea{overflow:hidden}img{max-width:300px}\n"] }]
196
196
  }], ctorParameters: () => [{ type: i1.Popup }, { type: i0.ChangeDetectorRef }], propDecorators: { placeholder: [{
197
197
  type: Input
198
198
  }], text: [{
@@ -225,4 +225,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
225
225
  type: ViewChild,
226
226
  args: [RichTextEditorComponent]
227
227
  }] } });
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2NvcmUvdGFnZ2luZy9lZGl0LWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS90YWdnaW5nL2VkaXQtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzlELE9BQU8sRUFBbUIsVUFBVSxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTFLLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7QUFFdkQsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFM0MsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQztBQU9yQyxNQUFNLE9BQU8sa0JBQWtCO0lBVTdCLElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELGtEQUFrRDtJQUNsRCxJQUNXLElBQUksQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdB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LE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQzs4R0FyTFUsa0JBQWtCO2tHQUFsQixrQkFBa0IsZ2FBc0RsQix1QkFBdUIsZ0RDMUVwQyw2akVBeUNBOzsyRkRyQmEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGtCQUFrQjswR0FpQm5CLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUssSUFBSTtzQkFEZCxLQUFLO2dCQU9LLEtBQUs7c0JBRGYsS0FBSztnQkFRSyxRQUFRO3NCQURsQixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUssU0FBUztzQkFEbkIsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBSWEsTUFBTTtzQkFBeEIsTUFBTTtnQkFDZ0IsSUFBSTtzQkFBMUIsTUFBTTt1QkFBQyxJQUFJO2dCQUNjLE9BQU87c0JBQWhDLE1BQU07dUJBQUMsT0FBTztnQkFDVSxNQUFNO3NCQUE5QixNQUFNO3VCQUFDLE1BQU07Z0JBQ1MsWUFBWTtzQkFBbEMsU0FBUzt1QkFBQyxVQUFVO2dCQUNlLElBQUk7c0JBQXZDLFNBQVM7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBFbW9qaURhdGEgfSBmcm9tICdAY3RybC9uZ3gtZW1vamktbWFydC9uZ3gtZW1vamknO1xyXG5pbXBvcnQgeyBDaGFuZ2VFdmVudEFyZ3MsIEh0bWxFZGl0b3IsIFJpY2hUZXh0RWRpdG9yLCBSaWNoVGV4dEVkaXRvckNvbXBvbmVudCwgVG9vbGJhciwgVG9vbGJhclNldHRpbmdzTW9kZWwsIFRvb2xiYXJUeXBlIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcmljaHRleHRlZGl0b3InO1xyXG5pbXBvcnQgeyBQb3B1cCB9IGZyb20gJy4uL3BvcHVwL3BvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyVGFnZ2luZ0NvbXBvbmVudCB9IGZyb20gJy4vdXNlcnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRG9jdW1lbnRUYWdnaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9kb2N1bWVudHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFnZ2luZ0NvbXBvbmVudEJhc2UgfSBmcm9tICcuL3RhZ2dpbmcuY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBFbW9qaUhvc3RDb21wb25lbnQgfSBmcm9tICcuL2Vtb2ppLmNvbXBvbmVudCc7XHJcblxyXG5SaWNoVGV4dEVkaXRvci5JbmplY3QoVG9vbGJhciwgSHRtbEVkaXRvcik7XHJcblxyXG5leHBvcnQgY29uc3QgSFRNTF9FWFAgPSAvPFtcXC9cXHddKz4vZztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWVkaXQtdGV4dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VkaXQtaW5wdXQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRWRpdElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcmVhZG9ubHkgdG9vbGJhclNldHRpbmdzID0ge1xyXG4gICAgaXRlbXM6IFsnQm9sZCcsICdJdGFsaWMnLCAnVW5kZXJsaW5lJywgJ1N0cmlrZVRocm91Z2gnLFxyXG4gICAgICAnfCcsXHJcbiAgICAgICdGb3JtYXRzJywgJ0FsaWdubWVudHMnLCAnT3JkZXJlZExpc3QnLCAnVW5vcmRlcmVkTGlzdCcsXHJcbiAgICAgICdPdXRkZW50JywgJ0luZGVudCddLFxyXG4gICAgdHlwZTogVG9vbGJhclR5cGUuTXVsdGlSb3dcclxuICB9IGFzIFRvb2xiYXJTZXR0aW5nc01vZGVsO1xyXG4gIHByaXZhdGUgX3RleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgX29yaWdpbmFsVGV4dDogc3RyaW5nO1xyXG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgLy9AQ29udGVudENoaWxkKCdbZWRpdEhpbnRdJykgaGludD86IE5nVGVtcGxhdGU7XHJcbiAgLy9AQ29udGVudENoaWxkKCdbZWRpdExhYmVsXScpIGxhYmVsPzogTmdUZW1wbGF0ZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFRleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMubW9kZSA9IHZhbHVlICYmIEhUTUxfRVhQLnRlc3QodmFsdWUpID8gJ2h0bWwnIDogJ3RleHQnXHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBpbWFnZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vcmlnaW5hbEltYWdlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pbWFnZSA9IHZhbHVlO1xyXG4gIH1cclxuICBtb2RlOiAnaHRtbCcgfCAndGV4dCcgPSAndGV4dCc7XHJcbiAgcHJpdmF0ZSBfcmVzb3VyY2U6IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCByZXNvdXJjZSgpOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgcmVzb3VyY2UodmFsdWU6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KSB7XHJcbiAgICB0aGlzLl9yZXNvdXJjZSA9IHZhbHVlO1xyXG4gIH1cclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIF9hdXRvZm9jdXM6IGJvb2xlYW47XHJcbiAgcHVibGljIGdldCBhdXRvZm9jdXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXV0b2ZvY3VzO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgYXV0b2ZvY3VzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9hdXRvZm9jdXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIGNhY2hlOiBzdHJpbmc7XHJcbiAgX2ltYWdlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfb3JpZ2luYWxJbWFnZTogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCdvaycpIHJlYWRvbmx5IG9uT2sgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRUZXh0RXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgnZm9jdXMnKSByZWFkb25seSBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoJ2JsdXInKSByZWFkb25seSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQFZpZXdDaGlsZCgndGV4dEFyZWEnKSBfdGV4dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChSaWNoVGV4dEVkaXRvckNvbXBvbmVudCkgX3J0ZTogUmljaFRleHRFZGl0b3JDb21wb25lbnQ7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfcG9wdXA6IFBvcHVwLFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdGV4dCkge1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnaHRtbCcpXHJcbiAgICAgICAgdGhpcy5fcnRlLnZhbHVlID0gdGhpcy5fdGV4dDtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3RleHRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl90ZXh0O1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdXRvZm9jdXMgJiYgc2V0VGltZW91dCh0aGlzLmZvY3VzLmJpbmQodGhpcykpO1xyXG4gIH1cclxuICBfa2V5KGV2dDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2dC5rZXkgPT09ICdFbnRlcicgJiYgIWV2dC5zaGlmdEtleSkge1xyXG4gICAgICB0aGlzLl9zdWJtaXQoKTtcclxuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2dC5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIGlmICh0aGlzLl90ZXh0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlICYmIHRoaXMuX3RleHRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N1Ym1pdCgpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5tb2RlID09PSAndGV4dCcgP1xyXG4gICAgICB0aGlzLl90ZXh0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlLnRyaW0oKVxyXG4gICAgICA6XHJcbiAgICAgIHRoaXMuX3J0ZS52YWx1ZS50cmltKCk7XHJcblxyXG4gICAgaWYgKCh0ZXh0ICYmIHRleHQubGVuZ3RoICYmIHRleHQgIT09IHRoaXMuX29yaWdpbmFsVGV4dCkgfHxcclxuICAgICAgKHRoaXMuX29yaWdpbmFsSW1hZ2UgJiYgdGhpcy5faW1hZ2UgIT09IHRoaXMuX29yaWdpbmFsSW1hZ2UpKVxyXG4gICAgICB0aGlzLm9uT2suZW1pdCh7IHRleHQsIHJlc291cmNlOiB0aGlzLl9yZXNvdXJjZSwgaW1hZ2U6IHRoaXMuX2ltYWdlIH0pO1xyXG4gIH1cclxuICBfdGV4dENoYW5nZShldnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHRoaXMuX3RleHQgPSAoZXZ0LnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50KS52YWx1ZTtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5fdGV4dCk7XHJcbiAgfVxyXG4gIF9odG1sQ2hhbmdlKGV2dDogQ2hhbmdlRXZlbnRBcmdzKSB7XHJcbiAgICB0aGlzLl90ZXh0ID0gZXZ0LnZhbHVlO1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl90ZXh0KTtcclxuICB9XHJcbiAgX3RvZ2dsZUh0bWwoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnaHRtbCcpIHtcclxuICAgICAgaWYgKHRoaXMuX3RleHQpIHRoaXMuX3RleHQgPSB0aGlzLl9ydGUuZ2V0VGV4dCgpO1xyXG4gICAgICB0aGlzLm1vZGUgPSAndGV4dCc7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW9kZSA9ICdodG1sJztcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMuZm9jdXMoKTtcclxuICB9XHJcbiAgX29rKCkge1xyXG4gICAgdGhpcy5fc3VibWl0KCk7XHJcbiAgICB0aGlzLmZvY3VzKCk7XHJcbiAgfVxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5faW1hZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5fcmVzb3VyY2UgPSBudWxsO1xyXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAndGV4dCcpXHJcbiAgICAgIHRoaXMuX3RleHRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl9ydGUudmFsdWUgPSAnJztcclxuICB9XHJcbiAgZm9jdXMoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAndGV4dCcpXHJcbiAgICAgIHNldFRpbWVvdXQoKCk9PiB0aGlzLl90ZXh0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCksIDApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl9ydGUuZm9jdXNJbigpO1xyXG4gIH1cclxuICBfb3BlbkRvY3VtZW50KGV2dDogTW91c2VFdmVudCkge1xyXG4gICAgdGhpcy5fdGFnKERvY3VtZW50VGFnZ2luZ0NvbXBvbmVudCwgZXZ0LCAnIycpO1xyXG4gIH1cclxuICBfdGFnKGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUYWdnaW5nQ29tcG9uZW50QmFzZTxhbnk+PiwgZXZ0OiBNb3VzZUV2ZW50LCBwcmVmaXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgcG9wdXBSZWYgPSB0aGlzLl9wb3B1cC5vcGVuKGNvbXBvbmVudCwgZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgeyBwb3NpdGlvbjogJ2Fib3ZlJyB9KTtcclxuICAgIHBvcHVwUmVmLm9wZW5lZCgpLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgZS5vbkJpbmQoJycpO1xyXG4gICAgICBlLnNlbGVjdGVkLnBpcGUoKS5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgdGhpcy5fdGV4dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSArPSBwcmVmaXggKyBlLmtleTtcclxuICAgICAgICBjb25zdCBhcmdzID0ge307XHJcbiAgICAgICAgYXJnc1tlLmtleV0gPSBlLnZhbHVlO1xyXG4gICAgICAgIGlmICghdGhpcy5yZXNvdXJjZSlcclxuICAgICAgICAgIHRoaXMucmVzb3VyY2UgPSBhcmdzO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5yZXNvdXJjZSwgYXJncyk7XHJcbiAgICAgICAgcG9wdXBSZWYuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIF9vcGVuTWVudGlvbihldnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuX3RhZyhVc2VyVGFnZ2luZ0NvbXBvbmVudCwgZXZ0LCAnQCcpO1xyXG4gIH1cclxuICBfb3BlbkVtb2ppKGV2dDogTW91c2VFdmVudCkge1xyXG4gICAgdGhpcy5fcG9wdXAub3BlbihFbW9qaUhvc3RDb21wb25lbnQsIGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIHsgcG9zaXRpb246ICdhYm92ZScgfSkuY2xvc2VkKCkuXHJcbiAgICAgIHN1YnNjcmliZSgoZTogRW1vamlEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGUpIHtcclxuICAgICAgICAgIHRoaXMuX3RleHRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgKz0gZS5uYXRpdmU7XHJcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgX2FkZEVtb2ppKGV2ZW50KSB7XHJcbiAgICB0aGlzLl90ZXh0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlICs9IGV2ZW50LmVtb2ppLm5hdGl2ZTtcclxuICB9XHJcbiAgX3Bhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xyXG4gICAgY29uc3QgeyBpdGVtcyB9ID0gZXZlbnQuY2xpcGJvYXJkRGF0YTtcclxuICAgIGNvbnN0IG1lID0gdGhpcztcclxuICAgIGZvciAobGV0IGluZGV4IGluIGl0ZW1zKSB7XHJcbiAgICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xyXG4gICAgICBpZiAoaXRlbS5raW5kID09PSAnZmlsZScpIHtcclxuICAgICAgICBsZXQgYmxvYiA9IGl0ZW0uZ2V0QXNGaWxlKCk7XHJcbiAgICAgICAgbGV0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgY29uc3QgeyByZXN1bHQgfSA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICAgIG1lLl9pbWFnZSA9IChyZXN1bHQgYXMgc3RyaW5nKS5zdWJzdHJpbmcoMjIpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgX2NsZWFySW1hZ2UoKSB7XHJcbiAgICB0aGlzLl9pbWFnZSA9IG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRUZXh0RXZlbnQge1xyXG4gIGltYWdlPzogc3RyaW5nO1xyXG4gIHRleHQ/OiBzdHJpbmc7XHJcbiAgcmVzb3VyY2U/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgQHN3aXRjaCAobW9kZSkge1xuICAgIEBjYXNlICgnaHRtbCcpIHtcbiAgICAgIDxlanMtcmljaHRleHRlZGl0b3IgW3ZhbHVlXT1cInRleHRcIlxuICAgICAgICAoY2hhbmdlKT1cIl9odG1sQ2hhbmdlKCRldmVudClcIlxuICAgICAgW3Rvb2xiYXJTZXR0aW5nc109XCJ0b29sYmFyU2V0dGluZ3NcIj48L2Vqcy1yaWNodGV4dGVkaXRvcj5cbiAgICB9XG4gICAgQGRlZmF1bHQge1xuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZsb2F0TGFiZWw9XCJuZXZlclwiIGNsYXNzPVwiZmxleFwiPlxuICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgY2RrVGV4dGFyZWFBdXRvc2l6ZSBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgWyhiaXpkb2NUYWdnaW5nKV09XCJyZXNvdXJjZVwiXG4gICAgICAgICAgKGtleWRvd24pPVwiX2tleSgkZXZlbnQpXCJcbiAgICAgICAgICAoaW5wdXQpPVwiX3RleHRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW3ZhbHVlXT1cInRleHRcIlxuICAgICAgICAgIChwYXN0ZSk9XCJfcGFzdGUoJGV2ZW50KVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnVHlwZUhlcmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMuZW1pdCgpXCJcbiAgICAgICAgICAoZm9jdXNvdXQpPVwib25CbHVyLmVtaXQoKVwiXG4gICAgICAgICN0ZXh0QXJlYT48L3RleHRhcmVhPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICB9XG4gIH1cbiAgPGRpdiBjbGFzcz1cInJvdyBuYXYtdG9vbGJhclwiPlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJfb3BlbkRvY3VtZW50KCRldmVudClcIiBbYml6ZG9jVG9vbHRpcF09XCInRG9jdW1lbnQnfHRyYW5zbGF0ZVwiIGJpemRvY1Rvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgY2xhc3M9XCJ0b29sXCIgW2Rpc2FibGVkXT1cIm1vZGUgIT09ICd0ZXh0J1wiPjxtYXQtaWNvbj5hcnRpY2xlPC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiX29wZW5NZW50aW9uKCRldmVudClcIiBbYml6ZG9jVG9vbHRpcF09XCInTWVudGlvbid8dHJhbnNsYXRlXCIgYml6ZG9jVG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBjbGFzcz1cInRvb2xcIiBbZGlzYWJsZWRdPVwibW9kZSAhPT0gJ3RleHQnXCI+PG1hdC1pY29uPmFsdGVybmF0ZV9lbWFpbDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIl9vcGVuRW1vamkoJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidFbW9qaSd8dHJhbnNsYXRlXCIgYml6ZG9jVG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBjbGFzcz1cInRvb2xcIiBbZGlzYWJsZWRdPVwibW9kZSAhPT0gJ3RleHQnXCI+PG1hdC1pY29uPmluc2VydF9lbW90aWNvbjwvbWF0LWljb24+PC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIl90b2dnbGVIdG1sKClcIiBbYml6ZG9jVG9vbHRpcF09XCInVGV4dCd8dHJhbnNsYXRlXCIgYml6ZG9jVG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBjbGFzcz1cInRvb2xcIj48bWF0LWljb24+dGV4dF9maWVsZHM8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiX29rKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBjbGFzcz1cInRvb2xcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5zZW5kPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbkBpZiAoX2ltYWdlKSB7XG4gIDxkaXY+XG4gICAgPGltZyBbc3JjXT1cIidkYXRhOmltYWdlL3BuZztiYXNlNjQsJysgX2ltYWdlXCIgLz5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiX2NsZWFySW1hZ2UoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG59XG4iXX0=
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2NvcmUvdGFnZ2luZy9lZGl0LWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS90YWdnaW5nL2VkaXQtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hJLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzlELE9BQU8sRUFBbUIsVUFBVSxFQUFFLGNBQWMsRUFBRSx1QkFBdUIsRUFBRSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTFLLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7QUFFdkQsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFM0MsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQztBQU9yQyxNQUFNLE9BQU8sa0JBQWtCO0lBVTdCLElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELGtEQUFrRDtJQUNsRCxJQUNXLElBQUksQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdB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LE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQzs4R0FyTFUsa0JBQWtCO2tHQUFsQixrQkFBa0IsZ2FBc0RsQix1QkFBdUIsZ0RDMUVwQyxna0VBeUNBOzsyRkRyQmEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGtCQUFrQjswR0FpQm5CLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUssSUFBSTtzQkFEZCxLQUFLO2dCQU9LLEtBQUs7c0JBRGYsS0FBSztnQkFRSyxRQUFRO3NCQURsQixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUssU0FBUztzQkFEbkIsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBSWEsTUFBTTtzQkFBeEIsTUFBTTtnQkFDZ0IsSUFBSTtzQkFBMUIsTUFBTTt1QkFBQyxJQUFJO2dCQUNjLE9BQU87c0JBQWhDLE1BQU07dUJBQUMsT0FBTztnQkFDVSxNQUFNO3NCQUE5QixNQUFNO3VCQUFDLE1BQU07Z0JBQ1MsWUFBWTtzQkFBbEMsU0FBUzt1QkFBQyxVQUFVO2dCQUNlLElBQUk7c0JBQXZDLFNBQVM7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBFbW9qaURhdGEgfSBmcm9tICdAY3RybC9uZ3gtZW1vamktbWFydC9uZ3gtZW1vamknO1xyXG5pbXBvcnQgeyBDaGFuZ2VFdmVudEFyZ3MsIEh0bWxFZGl0b3IsIFJpY2hUZXh0RWRpdG9yLCBSaWNoVGV4dEVkaXRvckNvbXBvbmVudCwgVG9vbGJhciwgVG9vbGJhclNldHRpbmdzTW9kZWwsIFRvb2xiYXJUeXBlIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcmljaHRleHRlZGl0b3InO1xyXG5pbXBvcnQgeyBQb3B1cCB9IGZyb20gJy4uL3BvcHVwL3BvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyVGFnZ2luZ0NvbXBvbmVudCB9IGZyb20gJy4vdXNlcnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRG9jdW1lbnRUYWdnaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9kb2N1bWVudHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFnZ2luZ0NvbXBvbmVudEJhc2UgfSBmcm9tICcuL3RhZ2dpbmcuY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBFbW9qaUhvc3RDb21wb25lbnQgfSBmcm9tICcuL2Vtb2ppLmNvbXBvbmVudCc7XHJcblxyXG5SaWNoVGV4dEVkaXRvci5JbmplY3QoVG9vbGJhciwgSHRtbEVkaXRvcik7XHJcblxyXG5leHBvcnQgY29uc3QgSFRNTF9FWFAgPSAvPFtcXC9cXHddKz4vZztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWVkaXQtdGV4dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VkaXQtaW5wdXQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRWRpdElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcmVhZG9ubHkgdG9vbGJhclNldHRpbmdzID0ge1xyXG4gICAgaXRlbXM6IFsnQm9sZCcsICdJdGFsaWMnLCAnVW5kZXJsaW5lJywgJ1N0cmlrZVRocm91Z2gnLFxyXG4gICAgICAnfCcsXHJcbiAgICAgICdGb3JtYXRzJywgJ0FsaWdubWVudHMnLCAnT3JkZXJlZExpc3QnLCAnVW5vcmRlcmVkTGlzdCcsXHJcbiAgICAgICdPdXRkZW50JywgJ0luZGVudCddLFxyXG4gICAgdHlwZTogVG9vbGJhclR5cGUuTXVsdGlSb3dcclxuICB9IGFzIFRvb2xiYXJTZXR0aW5nc01vZGVsO1xyXG4gIHByaXZhdGUgX3RleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHByaXZhdGUgX29yaWdpbmFsVGV4dDogc3RyaW5nO1xyXG4gIHB1YmxpYyBnZXQgdGV4dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgLy9AQ29udGVudENoaWxkKCdbZWRpdEhpbnRdJykgaGludD86IE5nVGVtcGxhdGU7XHJcbiAgLy9AQ29udGVudENoaWxkKCdbZWRpdExhYmVsXScpIGxhYmVsPzogTmdUZW1wbGF0ZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vcmlnaW5hbFRleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMubW9kZSA9IHZhbHVlICYmIEhUTUxfRVhQLnRlc3QodmFsdWUpID8gJ2h0bWwnIDogJ3RleHQnXHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBpbWFnZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9vcmlnaW5hbEltYWdlID0gdmFsdWU7XHJcbiAgICB0aGlzLl9pbWFnZSA9IHZhbHVlO1xyXG4gIH1cclxuICBtb2RlOiAnaHRtbCcgfCAndGV4dCcgPSAndGV4dCc7XHJcbiAgcHJpdmF0ZSBfcmVzb3VyY2U6IHsgW2tleTogc3RyaW5nXTogYW55OyB9O1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCByZXNvdXJjZSgpOiB7IFtrZXk6IHN0cmluZ106IGFueTsgfSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgcmVzb3VyY2UodmFsdWU6IHsgW2tleTogc3RyaW5nXTogYW55OyB9KSB7XHJcbiAgICB0aGlzLl9yZXNvdXJjZSA9IHZhbHVlO1xyXG4gIH1cclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcclxuICBwcml2YXRlIF9hdXRvZm9jdXM6IGJvb2xlYW47XHJcbiAgcHVibGljIGdldCBhdXRvZm9jdXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXV0b2ZvY3VzO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgYXV0b2ZvY3VzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9hdXRvZm9jdXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIGNhY2hlOiBzdHJpbmc7XHJcbiAgX2ltYWdlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfb3JpZ2luYWxJbWFnZTogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCdvaycpIHJlYWRvbmx5IG9uT2sgPSBuZXcgRXZlbnRFbWl0dGVyPEVkaXRUZXh0RXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgnZm9jdXMnKSByZWFkb25seSBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoJ2JsdXInKSByZWFkb25seSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQFZpZXdDaGlsZCgndGV4dEFyZWEnKSBfdGV4dEVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChSaWNoVGV4dEVkaXRvckNvbXBvbmVudCkgX3J0ZTogUmljaFRleHRFZGl0b3JDb21wb25lbnQ7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfcG9wdXA6IFBvcHVwLFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdGV4dCkge1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnaHRtbCcpXHJcbiAgICAgICAgdGhpcy5fcnRlLnZhbHVlID0gdGhpcy5fdGV4dDtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX3RleHRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl90ZXh0O1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdXRvZm9jdXMgJiYgc2V0VGltZW91dCh0aGlzLmZvY3VzLmJpbmQodGhpcykpO1xyXG4gIH1cclxuICBfa2V5KGV2dDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2dC5rZXkgPT09ICdFbnRlcicgJiYgIWV2dC5zaGlmdEtleSkge1xyXG4gICAgICB0aGlzLl9zdWJtaXQoKTtcclxuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGV2dC5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIGlmICh0aGlzLl90ZXh0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlICYmIHRoaXMuX3RleHRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N1Ym1pdCgpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy5tb2RlID09PSAndGV4dCcgP1xyXG4gICAgICB0aGlzLl90ZXh0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlLnRyaW0oKVxyXG4gICAgICA6XHJcbiAgICAgIHRoaXMuX3J0ZS52YWx1ZS50cmltKCk7XHJcblxyXG4gICAgaWYgKCh0ZXh0ICYmIHRleHQubGVuZ3RoICYmIHRleHQgIT09IHRoaXMuX29yaWdpbmFsVGV4dCkgfHxcclxuICAgICAgKHRoaXMuX29yaWdpbmFsSW1hZ2UgJiYgdGhpcy5faW1hZ2UgIT09IHRoaXMuX29yaWdpbmFsSW1hZ2UpKVxyXG4gICAgICB0aGlzLm9uT2suZW1pdCh7IHRleHQsIHJlc291cmNlOiB0aGlzLl9yZXNvdXJjZSwgaW1hZ2U6IHRoaXMuX2ltYWdlIH0pO1xyXG4gIH1cclxuICBfdGV4dENoYW5nZShldnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHRoaXMuX3RleHQgPSAoZXZ0LnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50KS52YWx1ZTtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5fdGV4dCk7XHJcbiAgfVxyXG4gIF9odG1sQ2hhbmdlKGV2dDogQ2hhbmdlRXZlbnRBcmdzKSB7XHJcbiAgICB0aGlzLl90ZXh0ID0gZXZ0LnZhbHVlO1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl90ZXh0KTtcclxuICB9XHJcbiAgX3RvZ2dsZUh0bWwoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnaHRtbCcpIHtcclxuICAgICAgaWYgKHRoaXMuX3RleHQpIHRoaXMuX3RleHQgPSB0aGlzLl9ydGUuZ2V0VGV4dCgpO1xyXG4gICAgICB0aGlzLm1vZGUgPSAndGV4dCc7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMubW9kZSA9ICdodG1sJztcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMuZm9jdXMoKTtcclxuICB9XHJcbiAgX29rKCkge1xyXG4gICAgdGhpcy5fc3VibWl0KCk7XHJcbiAgICB0aGlzLmZvY3VzKCk7XHJcbiAgfVxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5faW1hZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5fcmVzb3VyY2UgPSBudWxsO1xyXG4gICAgdGhpcy5fdGV4dCA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAndGV4dCcpXHJcbiAgICAgIHRoaXMuX3RleHRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl9ydGUudmFsdWUgPSAnJztcclxuICB9XHJcbiAgZm9jdXMoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAndGV4dCcpXHJcbiAgICAgIHNldFRpbWVvdXQoKCk9PiB0aGlzLl90ZXh0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCksIDApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl9ydGUuZm9jdXNJbigpO1xyXG4gIH1cclxuICBfb3BlbkRvY3VtZW50KGV2dDogTW91c2VFdmVudCkge1xyXG4gICAgdGhpcy5fdGFnKERvY3VtZW50VGFnZ2luZ0NvbXBvbmVudCwgZXZ0LCAnIycpO1xyXG4gIH1cclxuICBfdGFnKGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUYWdnaW5nQ29tcG9uZW50QmFzZTxhbnk+PiwgZXZ0OiBNb3VzZUV2ZW50LCBwcmVmaXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgcG9wdXBSZWYgPSB0aGlzLl9wb3B1cC5vcGVuKGNvbXBvbmVudCwgZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCwgeyBwb3NpdGlvbjogJ2Fib3ZlJyB9KTtcclxuICAgIHBvcHVwUmVmLm9wZW5lZCgpLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgZS5vbkJpbmQoJycpO1xyXG4gICAgICBlLnNlbGVjdGVkLnBpcGUoKS5zdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgdGhpcy5fdGV4dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSArPSBwcmVmaXggKyBlLmtleTtcclxuICAgICAgICBjb25zdCBhcmdzID0ge307XHJcbiAgICAgICAgYXJnc1tlLmtleV0gPSBlLnZhbHVlO1xyXG4gICAgICAgIGlmICghdGhpcy5yZXNvdXJjZSlcclxuICAgICAgICAgIHRoaXMucmVzb3VyY2UgPSBhcmdzO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5yZXNvdXJjZSwgYXJncyk7XHJcbiAgICAgICAgcG9wdXBSZWYuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIF9vcGVuTWVudGlvbihldnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuX3RhZyhVc2VyVGFnZ2luZ0NvbXBvbmVudCwgZXZ0LCAnQCcpO1xyXG4gIH1cclxuICBfb3BlbkVtb2ppKGV2dDogTW91c2VFdmVudCkge1xyXG4gICAgdGhpcy5fcG9wdXAub3BlbihFbW9qaUhvc3RDb21wb25lbnQsIGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIHsgcG9zaXRpb246ICdhYm92ZScgfSkuY2xvc2VkKCkuXHJcbiAgICAgIHN1YnNjcmliZSgoZTogRW1vamlEYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGUpIHtcclxuICAgICAgICAgIHRoaXMuX3RleHRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgKz0gZS5uYXRpdmU7XHJcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgX2FkZEVtb2ppKGV2ZW50KSB7XHJcbiAgICB0aGlzLl90ZXh0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlICs9IGV2ZW50LmVtb2ppLm5hdGl2ZTtcclxuICB9XHJcbiAgX3Bhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xyXG4gICAgY29uc3QgeyBpdGVtcyB9ID0gZXZlbnQuY2xpcGJvYXJkRGF0YTtcclxuICAgIGNvbnN0IG1lID0gdGhpcztcclxuICAgIGZvciAobGV0IGluZGV4IGluIGl0ZW1zKSB7XHJcbiAgICAgIGxldCBpdGVtID0gaXRlbXNbaW5kZXhdO1xyXG4gICAgICBpZiAoaXRlbS5raW5kID09PSAnZmlsZScpIHtcclxuICAgICAgICBsZXQgYmxvYiA9IGl0ZW0uZ2V0QXNGaWxlKCk7XHJcbiAgICAgICAgbGV0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgY29uc3QgeyByZXN1bHQgfSA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICAgIG1lLl9pbWFnZSA9IChyZXN1bHQgYXMgc3RyaW5nKS5zdWJzdHJpbmcoMjIpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgX2NsZWFySW1hZ2UoKSB7XHJcbiAgICB0aGlzLl9pbWFnZSA9IG51bGw7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRUZXh0RXZlbnQge1xyXG4gIGltYWdlPzogc3RyaW5nO1xyXG4gIHRleHQ/OiBzdHJpbmc7XHJcbiAgcmVzb3VyY2U/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgQHN3aXRjaCAobW9kZSkge1xuICAgIEBjYXNlICgnaHRtbCcpIHtcbiAgICAgIDxlanMtcmljaHRleHRlZGl0b3IgW3ZhbHVlXT1cInRleHRcIlxuICAgICAgICAoY2hhbmdlKT1cIl9odG1sQ2hhbmdlKCRldmVudClcIlxuICAgICAgW3Rvb2xiYXJTZXR0aW5nc109XCJ0b29sYmFyU2V0dGluZ3NcIj48L2Vqcy1yaWNodGV4dGVkaXRvcj5cbiAgICB9XG4gICAgQGRlZmF1bHQge1xuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZsb2F0TGFiZWw9XCJuZXZlclwiIGNsYXNzPVwiZmxleFwiPlxuICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgY2RrVGV4dGFyZWFBdXRvc2l6ZSBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgWyhiaXpkb2NUYWdnaW5nKV09XCJyZXNvdXJjZVwiXG4gICAgICAgICAgKGtleWRvd24pPVwiX2tleSgkZXZlbnQpXCJcbiAgICAgICAgICAoaW5wdXQpPVwiX3RleHRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW3ZhbHVlXT1cInRleHRcIlxuICAgICAgICAgIChwYXN0ZSk9XCJfcGFzdGUoJGV2ZW50KVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnQ29tbWVudEhlcmUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMuZW1pdCgpXCJcbiAgICAgICAgICAoZm9jdXNvdXQpPVwib25CbHVyLmVtaXQoKVwiXG4gICAgICAgICN0ZXh0QXJlYT48L3RleHRhcmVhPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICB9XG4gIH1cbiAgPGRpdiBjbGFzcz1cInJvdyBuYXYtdG9vbGJhclwiPlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJfb3BlbkRvY3VtZW50KCRldmVudClcIiBbYml6ZG9jVG9vbHRpcF09XCInRG9jdW1lbnQnfHRyYW5zbGF0ZVwiIGJpemRvY1Rvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgY2xhc3M9XCJ0b29sXCIgW2Rpc2FibGVkXT1cIm1vZGUgIT09ICd0ZXh0J1wiPjxtYXQtaWNvbj5hcnRpY2xlPC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiX29wZW5NZW50aW9uKCRldmVudClcIiBbYml6ZG9jVG9vbHRpcF09XCInTWVudGlvbid8dHJhbnNsYXRlXCIgYml6ZG9jVG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBjbGFzcz1cInRvb2xcIiBbZGlzYWJsZWRdPVwibW9kZSAhPT0gJ3RleHQnXCI+PG1hdC1pY29uPmFsdGVybmF0ZV9lbWFpbDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIl9vcGVuRW1vamkoJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidFbW9qaSd8dHJhbnNsYXRlXCIgYml6ZG9jVG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBjbGFzcz1cInRvb2xcIiBbZGlzYWJsZWRdPVwibW9kZSAhPT0gJ3RleHQnXCI+PG1hdC1pY29uPmluc2VydF9lbW90aWNvbjwvbWF0LWljb24+PC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cIl90b2dnbGVIdG1sKClcIiBbYml6ZG9jVG9vbHRpcF09XCInVGV4dCd8dHJhbnNsYXRlXCIgYml6ZG9jVG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBjbGFzcz1cInRvb2xcIj48bWF0LWljb24+dGV4dF9maWVsZHM8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiX29rKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBjbGFzcz1cInRvb2xcIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5zZW5kPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbkBpZiAoX2ltYWdlKSB7XG4gIDxkaXY+XG4gICAgPGltZyBbc3JjXT1cIidkYXRhOmltYWdlL3BuZztiYXNlNjQsJysgX2ltYWdlXCIgLz5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiX2NsZWFySW1hZ2UoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG59XG4iXX0=