@cuby-ui/core 0.0.274 → 0.0.276

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.
@@ -5,6 +5,7 @@ import type { CuiEditorConfig } from './interfaces';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class CuiEditorComponent implements OnDestroy {
7
7
  private readonly destroy;
8
+ private readonly cuiIdService;
8
9
  private readonly editorService;
9
10
  private readonly jTextService;
10
11
  private readonly POOLING_DELAY;
@@ -12,11 +13,6 @@ export declare class CuiEditorComponent implements OnDestroy {
12
13
  private readonly SCROLL_THROTTLE_TIME;
13
14
  private readonly isReadonly;
14
15
  private readonly emptyQueue;
15
- protected readonly editorRef: ElementRef;
16
- readonly editorEmpty: EventEmitter<boolean>;
17
- editorID: string;
18
- config: CuiEditorConfig;
19
- requestSize: number;
20
16
  private poolingSubscription;
21
17
  private scrollSubscription;
22
18
  private isSkipCombinedBlockOnChange;
@@ -34,6 +30,12 @@ export declare class CuiEditorComponent implements OnDestroy {
34
30
  private removedBlocksIds;
35
31
  private changesQueue;
36
32
  private abortController;
33
+ protected readonly editorId: string;
34
+ protected readonly editorRef: ElementRef;
35
+ readonly editorEmpty: EventEmitter<boolean>;
36
+ editorApiId: string;
37
+ config: CuiEditorConfig;
38
+ requestSize: number;
37
39
  editor: EditorJS;
38
40
  editorElement: HTMLElement;
39
41
  ngOnChanges(changes: SimpleChanges): void;
@@ -67,5 +69,5 @@ export declare class CuiEditorComponent implements OnDestroy {
67
69
  private checkIsEmpty;
68
70
  private resetData;
69
71
  static ɵfac: i0.ɵɵFactoryDeclaration<CuiEditorComponent, never>;
70
- static ɵcmp: i0.ɵɵComponentDeclaration<CuiEditorComponent, "cui-editor", never, { "editorID": { "alias": "editorID"; "required": true; }; "config": { "alias": "config"; "required": false; }; "requestSize": { "alias": "requestSize"; "required": false; }; }, { "editorEmpty": "editorEmpty"; }, never, never, true, never>;
72
+ static ɵcmp: i0.ɵɵComponentDeclaration<CuiEditorComponent, "cui-editor", never, { "editorApiId": { "alias": "editorApiId"; "required": true; }; "config": { "alias": "config"; "required": false; }; "requestSize": { "alias": "requestSize"; "required": false; }; }, { "editorEmpty": "editorEmpty"; }, never, never, true, never>;
71
73
  }
@@ -1,5 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component, computed, DestroyRef, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';
2
2
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
+ import { CuiIdService } from '@cuby-ui/cdk';
3
4
  import EditorJS from '@editorjs/editorjs';
4
5
  import { concatMap, delay, finalize, fromEvent, map, Subject, takeWhile, tap, throttleTime, timer, toArray } from 'rxjs';
5
6
  import { getEditorConfig } from './config';
@@ -11,6 +12,7 @@ import * as i0 from "@angular/core";
11
12
  export class CuiEditorComponent {
12
13
  constructor() {
13
14
  this.destroy = inject(DestroyRef);
15
+ this.cuiIdService = inject(CuiIdService);
14
16
  this.editorService = inject(CuiEditorService);
15
17
  this.jTextService = inject(CuiJTextApiService);
16
18
  this.POOLING_DELAY = 100;
@@ -18,9 +20,6 @@ export class CuiEditorComponent {
18
20
  this.SCROLL_THROTTLE_TIME = 200;
19
21
  this.isReadonly = computed(() => this.config?.readOnly);
20
22
  this.emptyQueue = new Subject();
21
- this.editorEmpty = new EventEmitter();
22
- this.config = DEFAULT_CONFIG;
23
- this.requestSize = 40;
24
23
  this.isSkipCombinedBlockOnChange = [];
25
24
  this.isFirst = true;
26
25
  this.isChanging = false;
@@ -36,9 +35,13 @@ export class CuiEditorComponent {
36
35
  this.removedBlocksIds = [];
37
36
  this.changesQueue = [];
38
37
  this.abortController = new AbortController();
38
+ this.editorId = this.cuiIdService.generate();
39
+ this.editorEmpty = new EventEmitter();
40
+ this.config = DEFAULT_CONFIG;
41
+ this.requestSize = 40;
39
42
  }
40
43
  ngOnChanges(changes) {
41
- if (changes['editorID'] || changes['config']) {
44
+ if (changes['editorApiId'] || changes['config']) {
42
45
  this.initEditorChanges();
43
46
  }
44
47
  }
@@ -105,7 +108,7 @@ export class CuiEditorComponent {
105
108
  }
106
109
  initEditorChanges() {
107
110
  this.jTextService.addOptions(this.config.requestOptions);
108
- this.editor = this.initEditor(this.editorID);
111
+ this.editor = this.initEditor(this.editorId);
109
112
  this.editor.isReady.then(() => {
110
113
  if (this.isDestroyed) {
111
114
  return;
@@ -209,7 +212,7 @@ export class CuiEditorComponent {
209
212
  return { ...block, index };
210
213
  });
211
214
  const addedBlocks = [...defaultBlocksWithIndex, ...combinedBlocksWithIndex].sort((first, second) => first.index - second.index);
212
- const addBlocks$ = this.editorService.collectAddedBlocksRequest(this.editorID, addedBlocks);
215
+ const addBlocks$ = this.editorService.collectAddedBlocksRequest(this.editorApiId, addedBlocks);
213
216
  return {
214
217
  addedBlocks,
215
218
  addBlocks$
@@ -230,13 +233,13 @@ export class CuiEditorComponent {
230
233
  const id = block.detail.target.id;
231
234
  this.removedBlocksIds.push(id);
232
235
  });
233
- const removeBlocks$ = this.editorService.collectRemovedBlocksRequest(this.editorID, this.removedBlocksIds, this.blockIdsMap);
236
+ const removeBlocks$ = this.editorService.collectRemovedBlocksRequest(this.editorApiId, this.removedBlocksIds, this.blockIdsMap);
234
237
  this.removedBlocksIds = [];
235
238
  return removeBlocks$;
236
239
  }
237
240
  getBlocks(page = 0, size = 40) {
238
241
  let combinedBlock;
239
- return this.jTextService.getBlocks(this.editorID, page, size).pipe(takeUntilDestroyed(this.destroy), finalize(() => {
242
+ return this.jTextService.getBlocks(this.editorApiId, page, size).pipe(takeUntilDestroyed(this.destroy), finalize(() => {
240
243
  if (combinedBlock) {
241
244
  this.addCombinedBlock(combinedBlock);
242
245
  combinedBlock = null;
@@ -327,7 +330,7 @@ export class CuiEditorComponent {
327
330
  this.editor.render({ blocks: [] });
328
331
  return;
329
332
  }
330
- this.editorService.setStartBlock(this.editorID, async (block, id) => {
333
+ this.editorService.setStartBlock(this.editorApiId, async (block, id) => {
331
334
  this.blockIdsMap.set(id, id);
332
335
  this.isSkipCombinedBlockOnChange.push(true);
333
336
  await this.editor.render({ blocks: [block] });
@@ -367,17 +370,17 @@ export class CuiEditorComponent {
367
370
  this.abortController = new AbortController();
368
371
  }
369
372
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
370
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CuiEditorComponent, isStandalone: true, selector: "cui-editor", inputs: { editorID: "editorID", config: "config", requestSize: "requestSize" }, outputs: { editorEmpty: "editorEmpty" }, providers: [CuiEditorService, CuiJTextApiService], viewQueries: [{ propertyName: "editorRef", first: true, predicate: ["editor"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #editor\n [id]=\"editorID\"\n [class._readonly]=\"config.readOnly\"\n data-editor\n></div>\n", styles: [":host{--textColor: var(--cui-base-900);--menuBackground: var(--cui-base-0);--menuBorder: var(--cui-base-200);--menuItemHover: var(--cui-base-10);--menuItemBackground: var(cui-base-900);--menuIconBackground: var(--cui-base-50);--menuIconHover: var(--cui-base-10);font-weight:400;font-size:14px;line-height:20px;font-family:var(--cui-main-font)}:host ::ng-deep .ce-popover{--color-background: var(--menuBackground);--color-text-primary: var(--textColor);--color-border: var(--menuBorder);--color-border-icon: var(--menuBorder);--color-background-item: var(--menuItemBackground);--color-background-item-hover: var(--menuItemHover)}:host ::ng-deep .ce-popover__search{background:var(--menuIconBackground)}:host ::ng-deep .ce-popover .ce-popover-item__icon{background:var(--menuIconBackground)}:host ::ng-deep .ce-conversion-toolbar{background-color:var(--menuBackground);border-color:var(--menuBorder)}:host ::ng-deep .ce-conversion-toolbar__tools{padding:0 6px 6px}:host ::ng-deep .ce-conversion-tool{padding:3px;border-radius:6px}:host ::ng-deep .ce-conversion-tool__icon{border:1px solid var(--menuBorder);background-color:var(--menuIconBackground);box-shadow:none}:host ::ng-deep .ce-conversion-tool:hover{background-color:var(--menuItemHover)}:host ::ng-deep .ce-conversion-tool:hover .ce-conversion-tool__icon{border-color:var(--menuIconHover)}:host ::ng-deep .combined-text-block{padding:.4em 0;line-height:1.6em;outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part{outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child,:host ::ng-deep .combined-text-block .combined-text-block-part._selected{display:list-item}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child::marker,:host ::ng-deep .combined-text-block .combined-text-block-part._selected::marker{content:\"\"}:host ::ng-deep .image-tool__image{border:1px solid var(--cui-base-200);background-color:var(--cui-base-0)}:host ::ng-deep .image-tool__image-preloader{background-color:var(--cui-base-200)}:host ::ng-deep .image-tool__image-preloader:after{border:1px solid var(--cui-base-200);border-top:1px solid var(--cui-blue-600)}:host ::ng-deep .cdx-button{border:1px solid var(--cui-base-200);color:var(--textColor);background-color:var(--cui-base-0);box-shadow:none}:host ::ng-deep .ce-inline-toolbar{border-color:var(--cui-base-100);color:var(--textColor);background-color:var(--cui-base-0)}:host ::ng-deep .ce-inline-toolbar__dropdown:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-inline-tool:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{color:var(--cui-base-500)}:host ::ng-deep .ce-toolbar__plus:hover,:host ::ng-deep .ce-toolbar__settings-btn:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__actions{right:100%}:host ::ng-deep .ce-toolbar__content{max-width:none}:host ::ng-deep .ce-block--selected .ce-block__content{background-color:var(--cui-base-200)}:host ::ng-deep .ce-block__content{max-width:100%}:host ::ng-deep .ce-block:only-of-type .combined-text-block[data-placeholder-active][data-empty=true]:before{content:attr(data-placeholder-active);position:absolute;color:var(--cui-base-400)}:host ::ng-deep [data-editor]{padding-right:4px;width:100%;height:100%;min-height:200px;overflow:hidden auto;scrollbar-gutter:stable}:host ::ng-deep [data-editor] .codex-editor{margin-left:60px}:host ::ng-deep [data-editor] .codex-editor--narrow .ce-popover{right:auto}:host ::ng-deep [data-editor] .codex-editor__redactor{margin-right:auto;padding-bottom:260px!important}:host ::ng-deep [data-editor]._readonly{min-height:auto}:host ::ng-deep [data-editor]._readonly .codex-editor{margin:auto}:host ::ng-deep [data-editor]._readonly .codex-editor__redactor{padding-bottom:0!important}:host ::ng-deep [data-editor]._readonly .combined-text-block{padding:0}:host ::ng-deep [data-editor] [data-item-name=move-up],:host ::ng-deep [data-editor] [data-item-name=move-down],:host ::ng-deep [data-editor] [data-tool=paragraph]{display:none}:host ::ng-deep [data-editor] *::selection{background:var(--cui-base-200)}:host ::ng-deep [data-editor] a{color:var(--cui-light-blue-600)}:host ::ng-deep .marker{cursor:pointer;text-decoration:underline;color:var(--cui-light-blue-600);background-color:transparent}:host ::ng-deep .tool-marker,:host ::ng-deep .role-marker{margin:0 5px}:host ::ng-deep .tool-marker{color:#e97c00}:host ::ng-deep .role-marker{color:#8803f1}.form{height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
373
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CuiEditorComponent, isStandalone: true, selector: "cui-editor", inputs: { editorApiId: "editorApiId", config: "config", requestSize: "requestSize" }, outputs: { editorEmpty: "editorEmpty" }, providers: [CuiEditorService, CuiJTextApiService], viewQueries: [{ propertyName: "editorRef", first: true, predicate: ["editor"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #editor\n [id]=\"editorId\"\n data-editor\n [class._readonly]=\"config.readOnly\"\n></div>\n", styles: [":host{--textColor: var(--cui-base-900);--menuBackground: var(--cui-base-0);--menuBorder: var(--cui-base-200);--menuItemHover: var(--cui-base-10);--menuItemBackground: var(cui-base-900);--menuIconBackground: var(--cui-base-50);--menuIconHover: var(--cui-base-10);font-weight:400;font-size:14px;line-height:20px;font-family:var(--cui-main-font)}:host ::ng-deep .ce-popover{--color-background: var(--menuBackground);--color-text-primary: var(--textColor);--color-border: var(--menuBorder);--color-border-icon: var(--menuBorder);--color-background-item: var(--menuItemBackground);--color-background-item-hover: var(--menuItemHover)}:host ::ng-deep .ce-popover__search{background:var(--menuIconBackground)}:host ::ng-deep .ce-popover .ce-popover-item__icon{background:var(--menuIconBackground)}:host ::ng-deep .ce-conversion-toolbar{background-color:var(--menuBackground);border-color:var(--menuBorder)}:host ::ng-deep .ce-conversion-toolbar__tools{padding:0 6px 6px}:host ::ng-deep .ce-conversion-tool{padding:3px;border-radius:6px}:host ::ng-deep .ce-conversion-tool__icon{border:1px solid var(--menuBorder);background-color:var(--menuIconBackground);box-shadow:none}:host ::ng-deep .ce-conversion-tool:hover{background-color:var(--menuItemHover)}:host ::ng-deep .ce-conversion-tool:hover .ce-conversion-tool__icon{border-color:var(--menuIconHover)}:host ::ng-deep .combined-text-block{padding:.4em 0;line-height:1.6em;outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part{outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child,:host ::ng-deep .combined-text-block .combined-text-block-part._selected{display:list-item}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child::marker,:host ::ng-deep .combined-text-block .combined-text-block-part._selected::marker{content:\"\"}:host ::ng-deep .image-tool__image{border:1px solid var(--cui-base-200);background-color:var(--cui-base-0)}:host ::ng-deep .image-tool__image-preloader{background-color:var(--cui-base-200)}:host ::ng-deep .image-tool__image-preloader:after{border:1px solid var(--cui-base-200);border-top:1px solid var(--cui-blue-600)}:host ::ng-deep .cdx-button{border:1px solid var(--cui-base-200);color:var(--textColor);background-color:var(--cui-base-0);box-shadow:none}:host ::ng-deep .ce-inline-toolbar{border-color:var(--cui-base-100);color:var(--textColor);background-color:var(--cui-base-0)}:host ::ng-deep .ce-inline-toolbar__dropdown:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-inline-tool:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{color:var(--cui-base-500)}:host ::ng-deep .ce-toolbar__plus:hover,:host ::ng-deep .ce-toolbar__settings-btn:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__actions{right:100%}:host ::ng-deep .ce-toolbar__content{max-width:none}:host ::ng-deep .ce-block--selected .ce-block__content{background-color:var(--cui-base-200)}:host ::ng-deep .ce-block__content{max-width:100%}:host ::ng-deep .ce-block:only-of-type .combined-text-block[data-placeholder-active][data-empty=true]:before{content:attr(data-placeholder-active);position:absolute;color:var(--cui-base-400)}:host ::ng-deep [data-editor]{padding-right:4px;width:100%;height:100%;min-height:200px;overflow:hidden auto;scrollbar-gutter:stable}:host ::ng-deep [data-editor] .codex-editor{margin-left:60px}:host ::ng-deep [data-editor] .codex-editor--narrow .ce-popover{right:auto}:host ::ng-deep [data-editor] .codex-editor__redactor{margin-right:auto;padding-bottom:260px!important}:host ::ng-deep [data-editor]._readonly{min-height:auto}:host ::ng-deep [data-editor]._readonly .codex-editor{margin:auto}:host ::ng-deep [data-editor]._readonly .codex-editor__redactor{padding-bottom:0!important}:host ::ng-deep [data-editor]._readonly .combined-text-block{padding:0}:host ::ng-deep [data-editor] [data-item-name=move-up],:host ::ng-deep [data-editor] [data-item-name=move-down],:host ::ng-deep [data-editor] [data-tool=paragraph]{display:none}:host ::ng-deep [data-editor] *::selection{background:var(--cui-base-200)}:host ::ng-deep [data-editor] a{color:var(--cui-light-blue-600)}:host ::ng-deep .marker{cursor:pointer;text-decoration:underline;color:var(--cui-light-blue-600);background-color:transparent}:host ::ng-deep .tool-marker,:host ::ng-deep .role-marker{margin:0 5px}:host ::ng-deep .tool-marker{color:#e97c00}:host ::ng-deep .role-marker{color:#8803f1}.form{height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
371
374
  }
372
375
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiEditorComponent, decorators: [{
373
376
  type: Component,
374
- args: [{ selector: 'cui-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [CuiEditorService, CuiJTextApiService], template: "<div\n #editor\n [id]=\"editorID\"\n [class._readonly]=\"config.readOnly\"\n data-editor\n></div>\n", styles: [":host{--textColor: var(--cui-base-900);--menuBackground: var(--cui-base-0);--menuBorder: var(--cui-base-200);--menuItemHover: var(--cui-base-10);--menuItemBackground: var(cui-base-900);--menuIconBackground: var(--cui-base-50);--menuIconHover: var(--cui-base-10);font-weight:400;font-size:14px;line-height:20px;font-family:var(--cui-main-font)}:host ::ng-deep .ce-popover{--color-background: var(--menuBackground);--color-text-primary: var(--textColor);--color-border: var(--menuBorder);--color-border-icon: var(--menuBorder);--color-background-item: var(--menuItemBackground);--color-background-item-hover: var(--menuItemHover)}:host ::ng-deep .ce-popover__search{background:var(--menuIconBackground)}:host ::ng-deep .ce-popover .ce-popover-item__icon{background:var(--menuIconBackground)}:host ::ng-deep .ce-conversion-toolbar{background-color:var(--menuBackground);border-color:var(--menuBorder)}:host ::ng-deep .ce-conversion-toolbar__tools{padding:0 6px 6px}:host ::ng-deep .ce-conversion-tool{padding:3px;border-radius:6px}:host ::ng-deep .ce-conversion-tool__icon{border:1px solid var(--menuBorder);background-color:var(--menuIconBackground);box-shadow:none}:host ::ng-deep .ce-conversion-tool:hover{background-color:var(--menuItemHover)}:host ::ng-deep .ce-conversion-tool:hover .ce-conversion-tool__icon{border-color:var(--menuIconHover)}:host ::ng-deep .combined-text-block{padding:.4em 0;line-height:1.6em;outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part{outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child,:host ::ng-deep .combined-text-block .combined-text-block-part._selected{display:list-item}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child::marker,:host ::ng-deep .combined-text-block .combined-text-block-part._selected::marker{content:\"\"}:host ::ng-deep .image-tool__image{border:1px solid var(--cui-base-200);background-color:var(--cui-base-0)}:host ::ng-deep .image-tool__image-preloader{background-color:var(--cui-base-200)}:host ::ng-deep .image-tool__image-preloader:after{border:1px solid var(--cui-base-200);border-top:1px solid var(--cui-blue-600)}:host ::ng-deep .cdx-button{border:1px solid var(--cui-base-200);color:var(--textColor);background-color:var(--cui-base-0);box-shadow:none}:host ::ng-deep .ce-inline-toolbar{border-color:var(--cui-base-100);color:var(--textColor);background-color:var(--cui-base-0)}:host ::ng-deep .ce-inline-toolbar__dropdown:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-inline-tool:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{color:var(--cui-base-500)}:host ::ng-deep .ce-toolbar__plus:hover,:host ::ng-deep .ce-toolbar__settings-btn:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__actions{right:100%}:host ::ng-deep .ce-toolbar__content{max-width:none}:host ::ng-deep .ce-block--selected .ce-block__content{background-color:var(--cui-base-200)}:host ::ng-deep .ce-block__content{max-width:100%}:host ::ng-deep .ce-block:only-of-type .combined-text-block[data-placeholder-active][data-empty=true]:before{content:attr(data-placeholder-active);position:absolute;color:var(--cui-base-400)}:host ::ng-deep [data-editor]{padding-right:4px;width:100%;height:100%;min-height:200px;overflow:hidden auto;scrollbar-gutter:stable}:host ::ng-deep [data-editor] .codex-editor{margin-left:60px}:host ::ng-deep [data-editor] .codex-editor--narrow .ce-popover{right:auto}:host ::ng-deep [data-editor] .codex-editor__redactor{margin-right:auto;padding-bottom:260px!important}:host ::ng-deep [data-editor]._readonly{min-height:auto}:host ::ng-deep [data-editor]._readonly .codex-editor{margin:auto}:host ::ng-deep [data-editor]._readonly .codex-editor__redactor{padding-bottom:0!important}:host ::ng-deep [data-editor]._readonly .combined-text-block{padding:0}:host ::ng-deep [data-editor] [data-item-name=move-up],:host ::ng-deep [data-editor] [data-item-name=move-down],:host ::ng-deep [data-editor] [data-tool=paragraph]{display:none}:host ::ng-deep [data-editor] *::selection{background:var(--cui-base-200)}:host ::ng-deep [data-editor] a{color:var(--cui-light-blue-600)}:host ::ng-deep .marker{cursor:pointer;text-decoration:underline;color:var(--cui-light-blue-600);background-color:transparent}:host ::ng-deep .tool-marker,:host ::ng-deep .role-marker{margin:0 5px}:host ::ng-deep .tool-marker{color:#e97c00}:host ::ng-deep .role-marker{color:#8803f1}.form{height:100%}\n"] }]
377
+ args: [{ selector: 'cui-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, providers: [CuiEditorService, CuiJTextApiService], template: "<div\n #editor\n [id]=\"editorId\"\n data-editor\n [class._readonly]=\"config.readOnly\"\n></div>\n", styles: [":host{--textColor: var(--cui-base-900);--menuBackground: var(--cui-base-0);--menuBorder: var(--cui-base-200);--menuItemHover: var(--cui-base-10);--menuItemBackground: var(cui-base-900);--menuIconBackground: var(--cui-base-50);--menuIconHover: var(--cui-base-10);font-weight:400;font-size:14px;line-height:20px;font-family:var(--cui-main-font)}:host ::ng-deep .ce-popover{--color-background: var(--menuBackground);--color-text-primary: var(--textColor);--color-border: var(--menuBorder);--color-border-icon: var(--menuBorder);--color-background-item: var(--menuItemBackground);--color-background-item-hover: var(--menuItemHover)}:host ::ng-deep .ce-popover__search{background:var(--menuIconBackground)}:host ::ng-deep .ce-popover .ce-popover-item__icon{background:var(--menuIconBackground)}:host ::ng-deep .ce-conversion-toolbar{background-color:var(--menuBackground);border-color:var(--menuBorder)}:host ::ng-deep .ce-conversion-toolbar__tools{padding:0 6px 6px}:host ::ng-deep .ce-conversion-tool{padding:3px;border-radius:6px}:host ::ng-deep .ce-conversion-tool__icon{border:1px solid var(--menuBorder);background-color:var(--menuIconBackground);box-shadow:none}:host ::ng-deep .ce-conversion-tool:hover{background-color:var(--menuItemHover)}:host ::ng-deep .ce-conversion-tool:hover .ce-conversion-tool__icon{border-color:var(--menuIconHover)}:host ::ng-deep .combined-text-block{padding:.4em 0;line-height:1.6em;outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part{outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child,:host ::ng-deep .combined-text-block .combined-text-block-part._selected{display:list-item}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child::marker,:host ::ng-deep .combined-text-block .combined-text-block-part._selected::marker{content:\"\"}:host ::ng-deep .image-tool__image{border:1px solid var(--cui-base-200);background-color:var(--cui-base-0)}:host ::ng-deep .image-tool__image-preloader{background-color:var(--cui-base-200)}:host ::ng-deep .image-tool__image-preloader:after{border:1px solid var(--cui-base-200);border-top:1px solid var(--cui-blue-600)}:host ::ng-deep .cdx-button{border:1px solid var(--cui-base-200);color:var(--textColor);background-color:var(--cui-base-0);box-shadow:none}:host ::ng-deep .ce-inline-toolbar{border-color:var(--cui-base-100);color:var(--textColor);background-color:var(--cui-base-0)}:host ::ng-deep .ce-inline-toolbar__dropdown:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-inline-tool:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{color:var(--cui-base-500)}:host ::ng-deep .ce-toolbar__plus:hover,:host ::ng-deep .ce-toolbar__settings-btn:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__actions{right:100%}:host ::ng-deep .ce-toolbar__content{max-width:none}:host ::ng-deep .ce-block--selected .ce-block__content{background-color:var(--cui-base-200)}:host ::ng-deep .ce-block__content{max-width:100%}:host ::ng-deep .ce-block:only-of-type .combined-text-block[data-placeholder-active][data-empty=true]:before{content:attr(data-placeholder-active);position:absolute;color:var(--cui-base-400)}:host ::ng-deep [data-editor]{padding-right:4px;width:100%;height:100%;min-height:200px;overflow:hidden auto;scrollbar-gutter:stable}:host ::ng-deep [data-editor] .codex-editor{margin-left:60px}:host ::ng-deep [data-editor] .codex-editor--narrow .ce-popover{right:auto}:host ::ng-deep [data-editor] .codex-editor__redactor{margin-right:auto;padding-bottom:260px!important}:host ::ng-deep [data-editor]._readonly{min-height:auto}:host ::ng-deep [data-editor]._readonly .codex-editor{margin:auto}:host ::ng-deep [data-editor]._readonly .codex-editor__redactor{padding-bottom:0!important}:host ::ng-deep [data-editor]._readonly .combined-text-block{padding:0}:host ::ng-deep [data-editor] [data-item-name=move-up],:host ::ng-deep [data-editor] [data-item-name=move-down],:host ::ng-deep [data-editor] [data-tool=paragraph]{display:none}:host ::ng-deep [data-editor] *::selection{background:var(--cui-base-200)}:host ::ng-deep [data-editor] a{color:var(--cui-light-blue-600)}:host ::ng-deep .marker{cursor:pointer;text-decoration:underline;color:var(--cui-light-blue-600);background-color:transparent}:host ::ng-deep .tool-marker,:host ::ng-deep .role-marker{margin:0 5px}:host ::ng-deep .tool-marker{color:#e97c00}:host ::ng-deep .role-marker{color:#8803f1}.form{height:100%}\n"] }]
375
378
  }], propDecorators: { editorRef: [{
376
379
  type: ViewChild,
377
380
  args: ['editor']
378
381
  }], editorEmpty: [{
379
382
  type: Output
380
- }], editorID: [{
383
+ }], editorApiId: [{
381
384
  type: Input,
382
385
  args: [{ required: true }]
383
386
  }], config: [{
@@ -385,4 +388,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
385
388
  }], requestSize: [{
386
389
  type: Input
387
390
  }] } });
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR2hFLE9BQU8sUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBRTFDLE9BQU8sRUFDSCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBQ1QsR0FBRyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQ1QsR0FBRyxFQUNILFlBQVksRUFDWixLQUFLLEVBQ0wsT0FBTyxFQUNWLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQ0gsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4QixjQUFjLEVBQ2pCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBVzdELE9BQU8sRUFBUyxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBVWpFLE1BQU0sT0FBTyxrQkFBa0I7SUFSL0I7UUFTcUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxn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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHR5cGUgeyBDdWlOdWxsYWJsZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgdHlwZSB7IEFQSSwgQmxvY2tNdXRhdGlvbkV2ZW50LCBPdXRwdXREYXRhIH0gZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcbmltcG9ydCBFZGl0b3JKUyBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xuaW1wb3J0IHR5cGUgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgY29uY2F0TWFwLFxuICAgIGRlbGF5LFxuICAgIGZpbmFsaXplLFxuICAgIGZyb21FdmVudCxcbiAgICBtYXAsXG4gICAgU3ViamVjdCxcbiAgICB0YWtlV2hpbGUsXG4gICAgdGFwLFxuICAgIHRocm90dGxlVGltZSxcbiAgICB0aW1lcixcbiAgICB0b0FycmF5XG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBnZXRFZGl0b3JDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSxcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsXG4gICAgREVGQVVMVF9DT05GSUdcbn0gZnJvbSAnLi9jb25zdGFudHMvZWRpdG9yLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBzZXRFZGl0b3JFdmVudHMgfSBmcm9tICcuL2V2ZW50cy9zZXQtZWRpdG9yLWV2ZW50cyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQ3VpQmxvY2tEYXRhLFxuICAgIEN1aUJsb2Nrc1JlcXVlc3REYXRhLFxuICAgIEN1aUNvbWJpbmVkQmxvY2tBZGRpbmdFdmVudCxcbiAgICBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGEsXG4gICAgQ3VpQ29tYmluZWRQYXJ0QmxvY2ssXG4gICAgQ3VpRWRpdG9yQ29uZmlnLFxuICAgIEN1aUV2ZW50QWN0aW9uRGF0YSxcbiAgICBDdWlGdWxsQmxvY2tEYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBCbG9jaywgQ3VpRWRpdG9yU2VydmljZSwgQ3VpSlRleHRBcGlTZXJ2aWNlLCBFdmVudEFjdGlvbnMgfSBmcm9tICcuL3NlcnZpY2VzJztcbmltcG9ydCB7IHJlY2FsY3VsYXRlSW5kZXhlcyB9IGZyb20gJy4vdXRpbHMvcmVjYWxjdWxhdGUtaW5kZXhlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY3VpLWVkaXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtDdWlFZGl0b3JTZXJ2aWNlLCBDdWlKVGV4dEFwaVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEN1aUVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95ID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWRpdG9yU2VydmljZSA9IGluamVjdChDdWlFZGl0b3JTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGpUZXh0U2VydmljZSA9IGluamVjdChDdWlKVGV4dEFwaVNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBQT09MSU5HX0RFTEFZID0gMTAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgRUxFTUVOVF9TUEFDRV9UT19CT1RUT00gPSAxNTA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBTQ1JPTExfVEhST1RUTEVfVElNRSA9IDIwMDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNSZWFkb25seSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnPy5yZWFkT25seSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbXB0eVF1ZXVlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2VkaXRvcicpXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVkaXRvclJlZiE6IEVsZW1lbnRSZWY7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWRpdG9yRW1wdHkgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHB1YmxpYyBlZGl0b3JJRCE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbmZpZzogQ3VpRWRpdG9yQ29uZmlnID0gREVGQVVMVF9DT05GSUc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZXF1ZXN0U2l6ZSA9IDQwO1xuXG4gICAgcHJpdmF0ZSBwb29saW5nU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgc2Nyb2xsU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlOiBib29sZWFuW10gPSBbXTtcbiAgICBwcml2YXRlIGlzRmlyc3QgPSB0cnVlO1xuICAgIHByaXZhdGUgaXNDaGFuZ2luZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNTa2lwID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc1JlcXVlc3RlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGJsb2NrSWRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGNvbWJpbmVkQmxvY2tzID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgaW5kZXggPSAwO1xuICAgIHByaXZhdGUgcGFnZSA9IDA7XG4gICAgcHJpdmF0ZSBhZGRlZEJsb2NrczogQ3VpQmxvY2tEYXRhW10gPSBbXTtcbiAgICBwcml2YXRlIHVwZGF0ZWRCbG9ja3M6IEJsb2NrW10gPSBbXTtcbiAgICBwcml2YXRlIHJlbW92ZWRCbG9ja3NJZHM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBjaGFuZ2VzUXVldWU6IEJsb2NrTXV0YXRpb25FdmVudFtdW10gPSBbXTtcbiAgICBwcml2YXRlIGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIHB1YmxpYyBlZGl0b3IhOiBFZGl0b3JKUztcbiAgICBwdWJsaWMgZWRpdG9yRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2VkaXRvcklEJ10gfHwgY2hhbmdlc1snY29uZmlnJ10pIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdEVkaXRvckNoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVzdHJveUVkaXRvcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TY3JvbGxFdmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvdmVyYWxsSGVpZ2h0ID0gZWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLkVMRU1FTlRfU1BBQ0VfVE9fQk9UVE9NO1xuICAgICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gZWxlbWVudC5zY3JvbGxUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgICBpZiAoY3VycmVudEhlaWdodCA8IG92ZXJhbGxIZWlnaHQgfHwgdGhpcy5pc1JlcXVlc3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1JlcXVlc3RlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucmVxdWVzdFNpemU7XG4gICAgICAgIGxldCBibG9ja3NDb3VudCA9IDA7XG5cbiAgICAgICAgdGhpcy5nZXRCbG9ja3ModGhpcy5wYWdlLCBzaXplKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChibG9ja3MpID0+IChibG9ja3NDb3VudCA9IGJsb2Nrcy5sZW5ndGgpKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tzQ291bnQgPj0gc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAgIHRoaXMucGFnZSsrO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25FZGl0b3JDaGFuZ2UoXzogQVBJLCBldmVudDogQmxvY2tNdXRhdGlvbkV2ZW50IHwgQmxvY2tNdXRhdGlvbkV2ZW50W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkb25seSgpIHx8IHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICAgIGV2ZW50ID0gW2V2ZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY2FsY3VsYXRlSW5kZXhlcyh0aGlzLmVkaXRvci5ibG9ja3MpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlc1F1ZXVlLnVuc2hpZnQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGFydENoYW5nZXMoZXZlbnQpO1xuICAgICAgICB0aGlzLmVkaXRvckVtcHR5LmVtaXQodGhpcy5jaGVja0lzRW1wdHkoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFkZGVkQ29tYmluZWRCbG9jayhkYXRhOiBDdWlDb21iaW5lZEJsb2NrQWRkaW5nRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UucG9wKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJsb2Nrc1dpdGhvdXRJZCA9IGRhdGEuYmxvY2tzLm1hcCgoYmxvY2spID0+ICh7XG4gICAgICAgICAgICBibG9jazogeyAuLi5ibG9jaywgaWQ6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgaWQ6IGJsb2NrLmlkIVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5hZGRlZEJsb2Nrcy5wdXNoKC4uLmJsb2Nrc1dpdGhvdXRJZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblVwZGF0ZWRDb21iaW5lZEJsb2NrKHVwZGF0ZWRCbG9ja3M6IEJsb2NrW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1cGRhdGVkQmxvY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVkQmxvY2tzLnB1c2goLi4udXBkYXRlZEJsb2Nrcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblJlbW92ZWRDb21iaW5lZEJsb2NrKGJsb2NrSWRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIWJsb2NrSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzLnB1c2goLi4uYmxvY2tJZHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEVkaXRvckNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMualRleHRTZXJ2aWNlLmFkZE9wdGlvbnModGhpcy5jb25maWcucmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuZWRpdG9yID0gdGhpcy5pbml0RWRpdG9yKHRoaXMuZWRpdG9ySUQpO1xuICAgICAgICB0aGlzLmVkaXRvci5pc1JlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdEVkaXRvckV2ZW50cyh0aGlzLmVkaXRvckVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5pbml0U2Nyb2xsT2JzZXJ2ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRQb29saW5nKHRoaXMucmVxdWVzdFNpemUpO1xuICAgICAgICAgICAgdGhpcy5zZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3IoaWQ6IHN0cmluZyk6IEVkaXRvckpTIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgICAgICAgdGhpcy5kZXN0cm95RWRpdG9yKCk7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvckpTKHtcbiAgICAgICAgICAgIC4uLmdldEVkaXRvckNvbmZpZyhpZCwgY29uZmlnKSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uRWRpdG9yQ2hhbmdlLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFNjcm9sbE9ic2VydmVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jb25maWc/LmVsZW1lbnQgPz8gdGhpcy5lZGl0b3JFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxPYnNlcnZlciA9IGZyb21FdmVudChlbGVtZW50LCAnc2Nyb2xsJyk7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24gPSBzY3JvbGxPYnNlcnZlclxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveSksXG4gICAgICAgICAgICAgICAgdGhyb3R0bGVUaW1lKHRoaXMuU0NST0xMX1RIUk9UVExFX1RJTUUsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICBsZWFkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0cmFpbGluZzogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLm9uU2Nyb2xsRXZlbnQoZWxlbWVudCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yRXZlbnRzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRvbmx5KCk7XG5cbiAgICAgICAgaWYgKHJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRFZGl0b3JFdmVudHMoZWxlbWVudCwgdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0UG9vbGluZyhzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuY29uZmlnPy5lbGVtZW50ID8/IHRoaXMuZWRpdG9yRWxlbWVudDtcbiAgICAgICAgY29uc3Qgd2l0aG91dFByZWxvYWQgPSB0aGlzLmNvbmZpZz8ud2l0aG91dFByZWxvYWQ7XG5cbiAgICAgICAgdGhpcy5wb29saW5nU3Vic2NyaXB0aW9uID0gdGltZXIoMCwgdGhpcy5QT09MSU5HX0RFTEFZKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuZ2V0QmxvY2tzKHRoaXMucGFnZSwgc2l6ZSkucGlwZShkZWxheSh0aGlzLlBPT0xJTkdfREVMQVkpKSksXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMucGFnZSsrKSxcbiAgICAgICAgICAgICAgICB0YWtlV2hpbGUoXG4gICAgICAgICAgICAgICAgICAgIChibG9ja3MpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAhd2l0aG91dFByZWxvYWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IDw9IHNjcm9sbEVsZW1lbnQuY2xpZW50SGVpZ2h0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3MubGVuZ3RoID49IHNpemVcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhcnRCbG9jaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95RWRpdG9yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgICAvLyBUT0RPOiDQsiDRgNCw0L3QtNC+0Lwg0LrQtdC50YHQsNGFINC/0LDQtNCw0LXRgiDQvtGI0LjQsdC60LAg0LXRgdC70Lgg0YPQsdGA0LDRgtGMINC/0YDQvtCy0LXRgNC60YMg0L3QsCDQstGL0LfQvtCyIGRlc3Ryb3lcbiAgICAgICAgdGhpcy5lZGl0b3I/LmRlc3Ryb3k/LigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGlzdGVuZXJzT25DdXN0b21CbG9ja0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcyh0aGlzLmVkaXRvciwge1xuICAgICAgICAgICAgcmVtb3ZlZENhbGxiYWNrOiB0aGlzLm9uUmVtb3ZlZENvbWJpbmVkQmxvY2suYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHVwZGF0ZWRDYWxsYmFjazogdGhpcy5vblVwZGF0ZWRDb21iaW5lZEJsb2NrLmJpbmQodGhpcyksXG4gICAgICAgICAgICBhZGRlZENhbGxiYWNrOiB0aGlzLm9uQWRkZWRDb21iaW5lZEJsb2NrLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydENoYW5nZXMoZXZlbnQ6IEJsb2NrTXV0YXRpb25FdmVudFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmlzU2tpcCB8fCB0aGlzLmlzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDaGFuZ2luZyA9IHRydWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvck91dHB1dCA9IGF3YWl0IHRoaXMuZWRpdG9yLnNhdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGV2ZW50LmZpbHRlcigoZGF0YSkgPT4gZGF0YS5kZXRhaWwudGFyZ2V0Lm5hbWUgIT09IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja3MgPSB0aGlzLmVkaXRvclNlcnZpY2Uuc29ydEV2ZW50c0J5VHlwZXMoZXZlbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IHsgYWRkQmxvY2tzJCwgYWRkZWRCbG9ja3MgfSA9IHRoaXMuY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChibG9ja3MsIGVkaXRvck91dHB1dCk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkZWRCbG9ja3MgPSBbXTtcblxuICAgICAgICAgICAgYWRkQmxvY2tzJFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKGJsb2NrSWRzKSA9PiB0aGlzLnNldEJsb2NrSWRzVG9NYXAoYmxvY2tJZHMsIGFkZGVkQmxvY2tzKSksXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChibG9ja3MsIGVkaXRvck91dHB1dCkpLFxuICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5jb2xsZWN0UmVtb3ZlZEJsb2Nrc1JlcXVlc3QoYmxvY2tzKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB0aGlzLnN0YXJ0TmV4dENoYW5nZSgpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy5zdGFydE5leHRDaGFuZ2UoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0TmV4dENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbmV4dEV2ZW50cyA9IHRoaXMuY2hhbmdlc1F1ZXVlLnBvcCgpO1xuXG4gICAgICAgIGlmIChuZXh0RXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q2hhbmdlcyhuZXh0RXZlbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1wdHlRdWV1ZS5uZXh0KG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSwgZWRpdG9yT3V0cHV0OiBPdXRwdXREYXRhKTogQ3VpQmxvY2tzUmVxdWVzdERhdGEge1xuICAgICAgICBjb25zdCBkZWZhdWx0QmxvY2tzV2l0aEluZGV4ID0gYmxvY2tzW0V2ZW50QWN0aW9ucy5hZGRdLm1hcCgoYWRkZWRCbG9jaykgPT5cbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5nZXRGdWxsQmxvY2tEYXRhKGFkZGVkQmxvY2ssIGVkaXRvck91dHB1dClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29tYmluZWRCbG9ja3NXaXRoSW5kZXggPSB0aGlzLmFkZGVkQmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtaWQ9XCIke2Jsb2NrLmlkfVwiXWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIoZWxlbWVudD8uZGF0YXNldFsnaW5kZXgnXSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCBpbmRleCB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhZGRlZEJsb2NrcyA9IFsuLi5kZWZhdWx0QmxvY2tzV2l0aEluZGV4LCAuLi5jb21iaW5lZEJsb2Nrc1dpdGhJbmRleF0uc29ydCgoZmlyc3QsIHNlY29uZCkgPT4gZmlyc3QuaW5kZXggLSBzZWNvbmQuaW5kZXgpO1xuICAgICAgICBjb25zdCBhZGRCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RBZGRlZEJsb2Nrc1JlcXVlc3QodGhpcy5lZGl0b3JJRCwgYWRkZWRCbG9ja3MpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRlZEJsb2NrcyxcbiAgICAgICAgICAgIGFkZEJsb2NrcyRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSwgZWRpdG9yT3V0cHV0OiBPdXRwdXREYXRhKTogT2JzZXJ2YWJsZTxCbG9ja1tdPiB7XG4gICAgICAgIGJsb2Nrc1tFdmVudEFjdGlvbnMudXBkYXRlXS5mb3JFYWNoKCh1cGRhdGVCbG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBpZCwgYmxvY2sgfSA9IHRoaXMuZWRpdG9yU2VydmljZS5nZXRGdWxsQmxvY2tEYXRhKHVwZGF0ZUJsb2NrLCBlZGl0b3JPdXRwdXQpO1xuICAgICAgICAgICAgYmxvY2suaWQgPSBpZDtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVkQmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cGRhdGVCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdCh0aGlzLnVwZGF0ZWRCbG9ja3MsIHRoaXMuYmxvY2tJZHNNYXApO1xuXG4gICAgICAgIHRoaXMudXBkYXRlZEJsb2NrcyA9IFtdO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVCbG9ja3MkO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29sbGVjdFJlbW92ZWRCbG9ja3NSZXF1ZXN0KGJsb2NrczogQ3VpRXZlbnRBY3Rpb25EYXRhKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGJsb2Nrc1tFdmVudEFjdGlvbnMucmVtb3ZlXS5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBibG9jay5kZXRhaWwudGFyZ2V0LmlkO1xuXG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRCbG9ja3NJZHMucHVzaChpZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZUJsb2NrcyQgPSB0aGlzLmVkaXRvclNlcnZpY2UuY29sbGVjdFJlbW92ZWRCbG9ja3NSZXF1ZXN0KFxuICAgICAgICAgICAgdGhpcy5lZGl0b3JJRCxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZEJsb2Nrc0lkcyxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tJZHNNYXBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzID0gW107XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZUJsb2NrcyQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja3MocGFnZSA9IDAsIHNpemUgPSA0MCk6IE9ic2VydmFibGU8QmxvY2tbXT4ge1xuICAgICAgICBsZXQgY29tYmluZWRCbG9jazogQ3VpTnVsbGFibGU8QmxvY2s+O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmpUZXh0U2VydmljZS5nZXRCbG9ja3ModGhpcy5lZGl0b3JJRCwgcGFnZSwgc2l6ZSkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3kpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb21iaW5lZEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRCbG9jayA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVJbmRleGVzKHRoaXMuZWRpdG9yLmJsb2Nrcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gQ09NQklORURfVEVYVF9CTE9DS19QQVJUKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrRGF0YSA9IGJsb2NrLmRhdGEgYXMgeyBwYXJlbnRJZDogc3RyaW5nIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbWJpbmVkQmxvY2sgJiYgYmxvY2tEYXRhLnBhcmVudElkISAhPT0gY29tYmluZWRCbG9jaz8uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRCbG9jayA9IHRoaXMuc2V0Q29tYmluZWRCbG9jayhibG9jayk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb21iaW5lZEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRCbG9jayA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRCbG9jayhibG9jayk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRvQXJyYXkoKVxuICAgICAgICApIGFzIHVua25vd24gYXMgT2JzZXJ2YWJsZTxCbG9ja1tdPjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEJsb2NrKGJsb2NrOiBCbG9jayk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIGJsb2NrLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsb2NrSWRzTWFwLnNldChibG9jay5pZCEsIGJsb2NrLmlkISk7XG4gICAgICAgIHRoaXMuaW5zZXJ0KGJsb2NrKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jazogQmxvY2spOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UucHVzaCh0cnVlKTtcbiAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmVkaXRvci5ibG9ja3MuZ2V0QnlJZChjb21iaW5lZEJsb2NrLmlkIHx8ICcnKTtcblxuICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmJsb2Nrcy51cGRhdGUoYmxvY2suaWQsIGNvbWJpbmVkQmxvY2suZGF0YSBhcyBDdWlDb21iaW5lZFBhcnRCbG9jayk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5zZXJ0KGNvbWJpbmVkQmxvY2spO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5zZXJ0KGJsb2NrOiBCbG9jayk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoZWNrRmlyc3QoYmxvY2spO1xuICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0ZpcnN0KGJsb2NrOiBCbG9jayk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNGaXJzdCkge1xuICAgICAgICAgICAgdGhpcy5pc1NraXAgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuYmxvY2tzLmluc2VydChibG9jay50eXBlLCBibG9jay5kYXRhLCB7fSwgdGhpcy5pbmRleCwgZmFsc2UsIGZhbHNlLCBibG9jay5pZCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86INC10YHRgtGMINCy0LDRgNC40Log0YfRgtC+INGH0YLQviDRgtC+INC/0L7QudC00LXRgiDQvdC1INGC0LDQulxuICAgICAgICB0aGlzLmVkaXRvci5ibG9ja3MucmVuZGVyKHsgYmxvY2tzOiBbYmxvY2tdIH0pLnRoZW4oKCkgPT4gdGhpcy5pc1NraXAgPSBmYWxzZSk7XG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29tYmluZWRCbG9jayhibG9jazogQmxvY2spOiBCbG9jayB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkQmxvY2tEYXRhID0gYmxvY2suZGF0YSBhcyB7IHBhcmVudElkOiBzdHJpbmcgfTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5jb21iaW5lZEJsb2Nrcy5nZXQoY29tYmluZWRCbG9ja0RhdGEucGFyZW50SWQpO1xuXG4gICAgICAgIHRoaXMuYmxvY2tJZHNNYXAuc2V0KGJsb2NrLmlkISwgYmxvY2suaWQhKTtcblxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnREYXRhID0gcGFyZW50LmRhdGEgYXMgeyB0ZXh0QmxvY2tzOiBCbG9ja1tdIH07XG4gICAgICAgICAgICBwYXJlbnREYXRhLnRleHRCbG9ja3MucHVzaChibG9jayk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRPYmplY3Q6IEJsb2NrID0ge1xuICAgICAgICAgICAgaWQ6IGNvbWJpbmVkQmxvY2tEYXRhLnBhcmVudElkLFxuICAgICAgICAgICAgdHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGlkOiBjb21iaW5lZEJsb2NrRGF0YS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICB0ZXh0QmxvY2tzOiBbYmxvY2tdXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb21iaW5lZEJsb2Nrcy5zZXQoY29tYmluZWRCbG9ja0RhdGEucGFyZW50SWQsIHBhcmVudE9iamVjdCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudE9iamVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEJsb2NrSWRzVG9NYXAoYmxvY2tJZHM6IHN0cmluZ1tdLCBhZGRlZEJsb2NrczogQ3VpRnVsbEJsb2NrRGF0YVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghYmxvY2tJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhZGRlZEJsb2Nrcy5mb3JFYWNoKChibG9ja0RhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJsb2NrSWRzTWFwLnNldChibG9ja0RhdGEuaWQsIGJsb2NrSWRzW2luZGV4XSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3RhcnRCbG9jaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tJZHNNYXAuc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JFbXB0eS5lbWl0KHRoaXMuY2hlY2tJc0VtcHR5KCkpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnJlbmRlcih7IGJsb2NrczogW10gfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRTdGFydEJsb2NrKHRoaXMuZWRpdG9ySUQsIGFzeW5jIChibG9jazogQmxvY2s8Q3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhPiwgaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5ibG9ja0lkc01hcC5zZXQoaWQsIGlkKTtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlLnB1c2godHJ1ZSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZWRpdG9yLnJlbmRlcih7IGJsb2NrczogW2Jsb2NrXSB9KTtcblxuICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgICAgICAgICAgcmVjYWxjdWxhdGVJbmRleGVzKHRoaXMuZWRpdG9yLmJsb2Nrcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWc/LmF1dG9mb2N1cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lZGl0b3IuY2FyZXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgTUlOX0JMT0NLU19DT1VOVCA9IDE7XG4gICAgICAgIGNvbnN0IFJFREFDVE9SX1NFTEVDVE9SID0gJy5jb2RleC1lZGl0b3JfX3JlZGFjdG9yJztcbiAgICAgICAgY29uc3QgcmVkYWN0b3IgPSB0aGlzLmVkaXRvckVsZW1lbnQucXVlcnlTZWxlY3RvcihSRURBQ1RPUl9TRUxFQ1RPUik7XG4gICAgICAgIGNvbnN0IGJsb2Nrc0NvdW50ID0gcmVkYWN0b3I/LmNoaWxkRWxlbWVudENvdW50ID8/IDA7XG5cbiAgICAgICAgcmV0dXJuIGJsb2Nrc0NvdW50IDw9IE1JTl9CTE9DS1NfQ09VTlQgJiYgIXJlZGFjdG9yPy50ZXh0Q29udGVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucG9vbGluZ1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UgPSBbXTtcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTa2lwID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ibG9ja0lkc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgIHRoaXMuY29tYmluZWRCbG9ja3MgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLnBhZ2UgPSAwO1xuICAgICAgICB0aGlzLmFkZGVkQmxvY2tzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlZEJsb2NrcyA9IFtdO1xuICAgICAgICB0aGlzLnJlbW92ZWRCbG9ja3NJZHMgPSBbXTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgICNlZGl0b3JcbiAgICBbaWRdPVwiZWRpdG9ySURcIlxuICAgIFtjbGFzcy5fcmVhZG9ubHldPVwiY29uZmlnLnJlYWRPbmx5XCJcbiAgICBkYXRhLWVkaXRvclxuPjwvZGl2PlxuIl19
391
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUMsT0FBTyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxHQUFHLEVBQ0gsT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFHLEVBQ0gsWUFBWSxFQUNaLEtBQUssRUFDTCxPQUFPLEVBQ1YsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFDSCx3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLGNBQWMsRUFDakIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFXN0QsT0FBTyxFQUFTLGdCQUFnQixFQUFFLGtCQUFrQixFQUFnQixNQUFNLFlBQVksQ0FBQztBQUN2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFVakUsTUFBTSxPQUFPLGtCQUFrQjtJQVIvQjtRQVNxQixZQUFPLEdBQUcsTUFBTSxDQUFDLFVB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QUFTO3VCQUFDLFFBQVE7Z0JBSUgsV0FBVztzQkFEMUIsTUFBTTtnQkFJQSxXQUFXO3NCQURqQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFJbEIsTUFBTTtzQkFEWixLQUFLO2dCQUlDLFdBQVc7c0JBRGpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgdHlwZSB7IEN1aU51bGxhYmxlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcbmltcG9ydCB7IEN1aUlkU2VydmljZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgdHlwZSB7IEFQSSwgQmxvY2tNdXRhdGlvbkV2ZW50LCBPdXRwdXREYXRhIH0gZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcbmltcG9ydCBFZGl0b3JKUyBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xuaW1wb3J0IHR5cGUgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgY29uY2F0TWFwLFxuICAgIGRlbGF5LFxuICAgIGZpbmFsaXplLFxuICAgIGZyb21FdmVudCxcbiAgICBtYXAsXG4gICAgU3ViamVjdCxcbiAgICB0YWtlV2hpbGUsXG4gICAgdGFwLFxuICAgIHRocm90dGxlVGltZSxcbiAgICB0aW1lcixcbiAgICB0b0FycmF5XG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBnZXRFZGl0b3JDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSxcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsXG4gICAgREVGQVVMVF9DT05GSUdcbn0gZnJvbSAnLi9jb25zdGFudHMvZWRpdG9yLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBzZXRFZGl0b3JFdmVudHMgfSBmcm9tICcuL2V2ZW50cy9zZXQtZWRpdG9yLWV2ZW50cyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQ3VpQmxvY2tEYXRhLFxuICAgIEN1aUJsb2Nrc1JlcXVlc3REYXRhLFxuICAgIEN1aUNvbWJpbmVkQmxvY2tBZGRpbmdFdmVudCxcbiAgICBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGEsXG4gICAgQ3VpQ29tYmluZWRQYXJ0QmxvY2ssXG4gICAgQ3VpRWRpdG9yQ29uZmlnLFxuICAgIEN1aUV2ZW50QWN0aW9uRGF0YSxcbiAgICBDdWlGdWxsQmxvY2tEYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBCbG9jaywgQ3VpRWRpdG9yU2VydmljZSwgQ3VpSlRleHRBcGlTZXJ2aWNlLCBFdmVudEFjdGlvbnMgfSBmcm9tICcuL3NlcnZpY2VzJztcbmltcG9ydCB7IHJlY2FsY3VsYXRlSW5kZXhlcyB9IGZyb20gJy4vdXRpbHMvcmVjYWxjdWxhdGUtaW5kZXhlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY3VpLWVkaXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtDdWlFZGl0b3JTZXJ2aWNlLCBDdWlKVGV4dEFwaVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEN1aUVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95ID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VpSWRTZXJ2aWNlID0gaW5qZWN0KEN1aUlkU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlZGl0b3JTZXJ2aWNlID0gaW5qZWN0KEN1aUVkaXRvclNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgalRleHRTZXJ2aWNlID0gaW5qZWN0KEN1aUpUZXh0QXBpU2VydmljZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IFBPT0xJTkdfREVMQVkgPSAxMDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBFTEVNRU5UX1NQQUNFX1RPX0JPVFRPTSA9IDE1MDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IFNDUk9MTF9USFJPVFRMRV9USU1FID0gMjAwO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBpc1JlYWRvbmx5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWc/LnJlYWRPbmx5KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVtcHR5UXVldWUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSBwb29saW5nU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgc2Nyb2xsU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlOiBib29sZWFuW10gPSBbXTtcbiAgICBwcml2YXRlIGlzRmlyc3QgPSB0cnVlO1xuICAgIHByaXZhdGUgaXNDaGFuZ2luZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNTa2lwID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc1JlcXVlc3RlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGJsb2NrSWRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGNvbWJpbmVkQmxvY2tzID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgaW5kZXggPSAwO1xuICAgIHByaXZhdGUgcGFnZSA9IDA7XG4gICAgcHJpdmF0ZSBhZGRlZEJsb2NrczogQ3VpQmxvY2tEYXRhW10gPSBbXTtcbiAgICBwcml2YXRlIHVwZGF0ZWRCbG9ja3M6IEJsb2NrW10gPSBbXTtcbiAgICBwcml2YXRlIHJlbW92ZWRCbG9ja3NJZHM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBjaGFuZ2VzUXVldWU6IEJsb2NrTXV0YXRpb25FdmVudFtdW10gPSBbXTtcbiAgICBwcml2YXRlIGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JJZCA9IHRoaXMuY3VpSWRTZXJ2aWNlLmdlbmVyYXRlKCk7XG5cbiAgICBAVmlld0NoaWxkKCdlZGl0b3InKVxuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JSZWYhOiBFbGVtZW50UmVmO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvckVtcHR5ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBwdWJsaWMgZWRpdG9yQXBpSWQhOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb25maWc6IEN1aUVkaXRvckNvbmZpZyA9IERFRkFVTFRfQ09ORklHO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVxdWVzdFNpemUgPSA0MDtcblxuICAgIHB1YmxpYyBlZGl0b3IhOiBFZGl0b3JKUztcbiAgICBwdWJsaWMgZWRpdG9yRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2VkaXRvckFwaUlkJ10gfHwgY2hhbmdlc1snY29uZmlnJ10pIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdEVkaXRvckNoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVzdHJveUVkaXRvcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TY3JvbGxFdmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvdmVyYWxsSGVpZ2h0ID0gZWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLkVMRU1FTlRfU1BBQ0VfVE9fQk9UVE9NO1xuICAgICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gZWxlbWVudC5zY3JvbGxUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgICBpZiAoY3VycmVudEhlaWdodCA8IG92ZXJhbGxIZWlnaHQgfHwgdGhpcy5pc1JlcXVlc3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1JlcXVlc3RlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucmVxdWVzdFNpemU7XG4gICAgICAgIGxldCBibG9ja3NDb3VudCA9IDA7XG5cbiAgICAgICAgdGhpcy5nZXRCbG9ja3ModGhpcy5wYWdlLCBzaXplKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChibG9ja3MpID0+IChibG9ja3NDb3VudCA9IGJsb2Nrcy5sZW5ndGgpKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tzQ291bnQgPj0gc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAgIHRoaXMucGFnZSsrO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25FZGl0b3JDaGFuZ2UoXzogQVBJLCBldmVudDogQmxvY2tNdXRhdGlvbkV2ZW50IHwgQmxvY2tNdXRhdGlvbkV2ZW50W10pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkb25seSgpIHx8IHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICAgIGV2ZW50ID0gW2V2ZW50XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY2FsY3VsYXRlSW5kZXhlcyh0aGlzLmVkaXRvci5ibG9ja3MpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlc1F1ZXVlLnVuc2hpZnQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGFydENoYW5nZXMoZXZlbnQpO1xuICAgICAgICB0aGlzLmVkaXRvckVtcHR5LmVtaXQodGhpcy5jaGVja0lzRW1wdHkoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFkZGVkQ29tYmluZWRCbG9jayhkYXRhOiBDdWlDb21iaW5lZEJsb2NrQWRkaW5nRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UucG9wKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJsb2Nrc1dpdGhvdXRJZCA9IGRhdGEuYmxvY2tzLm1hcCgoYmxvY2spID0+ICh7XG4gICAgICAgICAgICBibG9jazogeyAuLi5ibG9jaywgaWQ6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgaWQ6IGJsb2NrLmlkIVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5hZGRlZEJsb2Nrcy5wdXNoKC4uLmJsb2Nrc1dpdGhvdXRJZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblVwZGF0ZWRDb21iaW5lZEJsb2NrKHVwZGF0ZWRCbG9ja3M6IEJsb2NrW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1cGRhdGVkQmxvY2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVkQmxvY2tzLnB1c2goLi4udXBkYXRlZEJsb2Nrcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblJlbW92ZWRDb21iaW5lZEJsb2NrKGJsb2NrSWRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIWJsb2NrSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzLnB1c2goLi4uYmxvY2tJZHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEVkaXRvckNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMualRleHRTZXJ2aWNlLmFkZE9wdGlvbnModGhpcy5jb25maWcucmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuZWRpdG9yID0gdGhpcy5pbml0RWRpdG9yKHRoaXMuZWRpdG9ySWQpO1xuICAgICAgICB0aGlzLmVkaXRvci5pc1JlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdEVkaXRvckV2ZW50cyh0aGlzLmVkaXRvckVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5pbml0U2Nyb2xsT2JzZXJ2ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRQb29saW5nKHRoaXMucmVxdWVzdFNpemUpO1xuICAgICAgICAgICAgdGhpcy5zZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3IoaWQ6IHN0cmluZyk6IEVkaXRvckpTIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgICAgICAgdGhpcy5kZXN0cm95RWRpdG9yKCk7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvckpTKHtcbiAgICAgICAgICAgIC4uLmdldEVkaXRvckNvbmZpZyhpZCwgY29uZmlnKSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uRWRpdG9yQ2hhbmdlLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFNjcm9sbE9ic2VydmVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jb25maWc/LmVsZW1lbnQgPz8gdGhpcy5lZGl0b3JFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxPYnNlcnZlciA9IGZyb21FdmVudChlbGVtZW50LCAnc2Nyb2xsJyk7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24gPSBzY3JvbGxPYnNlcnZlclxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveSksXG4gICAgICAgICAgICAgICAgdGhyb3R0bGVUaW1lKHRoaXMuU0NST0xMX1RIUk9UVExFX1RJTUUsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICBsZWFkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0cmFpbGluZzogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLm9uU2Nyb2xsRXZlbnQoZWxlbWVudCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yRXZlbnRzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRvbmx5KCk7XG5cbiAgICAgICAgaWYgKHJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRFZGl0b3JFdmVudHMoZWxlbWVudCwgdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0UG9vbGluZyhzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuY29uZmlnPy5lbGVtZW50ID8/IHRoaXMuZWRpdG9yRWxlbWVudDtcbiAgICAgICAgY29uc3Qgd2l0aG91dFByZWxvYWQgPSB0aGlzLmNvbmZpZz8ud2l0aG91dFByZWxvYWQ7XG5cbiAgICAgICAgdGhpcy5wb29saW5nU3Vic2NyaXB0aW9uID0gdGltZXIoMCwgdGhpcy5QT09MSU5HX0RFTEFZKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuZ2V0QmxvY2tzKHRoaXMucGFnZSwgc2l6ZSkucGlwZShkZWxheSh0aGlzLlBPT0xJTkdfREVMQVkpKSksXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMucGFnZSsrKSxcbiAgICAgICAgICAgICAgICB0YWtlV2hpbGUoXG4gICAgICAgICAgICAgICAgICAgIChibG9ja3MpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAhd2l0aG91dFByZWxvYWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IDw9IHNjcm9sbEVsZW1lbnQuY2xpZW50SGVpZ2h0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3MubGVuZ3RoID49IHNpemVcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhcnRCbG9jaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95RWRpdG9yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgICAvLyBUT0RPOiDQsiDRgNCw0L3QtNC+0Lwg0LrQtdC50YHQsNGFINC/0LDQtNCw0LXRgiDQvtGI0LjQsdC60LAg0LXRgdC70Lgg0YPQsdGA0LDRgtGMINC/0YDQvtCy0LXRgNC60YMg0L3QsCDQstGL0LfQvtCyIGRlc3Ryb3lcbiAgICAgICAgdGhpcy5lZGl0b3I/LmRlc3Ryb3k/LigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGlzdGVuZXJzT25DdXN0b21CbG9ja0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcyh0aGlzLmVkaXRvciwge1xuICAgICAgICAgICAgcmVtb3ZlZENhbGxiYWNrOiB0aGlzLm9uUmVtb3ZlZENvbWJpbmVkQmxvY2suYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHVwZGF0ZWRDYWxsYmFjazogdGhpcy5vblVwZGF0ZWRDb21iaW5lZEJsb2NrLmJpbmQodGhpcyksXG4gICAgICAgICAgICBhZGRlZENhbGxiYWNrOiB0aGlzLm9uQWRkZWRDb21iaW5lZEJsb2NrLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydENoYW5nZXMoZXZlbnQ6IEJsb2NrTXV0YXRpb25FdmVudFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmlzU2tpcCB8fCB0aGlzLmlzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDaGFuZ2luZyA9IHRydWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvck91dHB1dCA9IGF3YWl0IHRoaXMuZWRpdG9yLnNhdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGV2ZW50LmZpbHRlcigoZGF0YSkgPT4gZGF0YS5kZXRhaWwudGFyZ2V0Lm5hbWUgIT09IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja3MgPSB0aGlzLmVkaXRvclNlcnZpY2Uuc29ydEV2ZW50c0J5VHlwZXMoZXZlbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IHsgYWRkQmxvY2tzJCwgYWRkZWRCbG9ja3MgfSA9IHRoaXMuY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChibG9ja3MsIGVkaXRvck91dHB1dCk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkZWRCbG9ja3MgPSBbXTtcblxuICAgICAgICAgICAgYWRkQmxvY2tzJFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKGJsb2NrSWRzKSA9PiB0aGlzLnNldEJsb2NrSWRzVG9NYXAoYmxvY2tJZHMsIGFkZGVkQmxvY2tzKSksXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChibG9ja3MsIGVkaXRvck91dHB1dCkpLFxuICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5jb2xsZWN0UmVtb3ZlZEJsb2Nrc1JlcXVlc3QoYmxvY2tzKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB0aGlzLnN0YXJ0TmV4dENoYW5nZSgpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy5zdGFydE5leHRDaGFuZ2UoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0TmV4dENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbmV4dEV2ZW50cyA9IHRoaXMuY2hhbmdlc1F1ZXVlLnBvcCgpO1xuXG4gICAgICAgIGlmIChuZXh0RXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q2hhbmdlcyhuZXh0RXZlbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1wdHlRdWV1ZS5uZXh0KG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSwgZWRpdG9yT3V0cHV0OiBPdXRwdXREYXRhKTogQ3VpQmxvY2tzUmVxdWVzdERhdGEge1xuICAgICAgICBjb25zdCBkZWZhdWx0QmxvY2tzV2l0aEluZGV4ID0gYmxvY2tzW0V2ZW50QWN0aW9ucy5hZGRdLm1hcCgoYWRkZWRCbG9jaykgPT5cbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5nZXRGdWxsQmxvY2tEYXRhKGFkZGVkQmxvY2ssIGVkaXRvck91dHB1dClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29tYmluZWRCbG9ja3NXaXRoSW5kZXggPSB0aGlzLmFkZGVkQmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtaWQ9XCIke2Jsb2NrLmlkfVwiXWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIoZWxlbWVudD8uZGF0YXNldFsnaW5kZXgnXSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCBpbmRleCB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhZGRlZEJsb2NrcyA9IFsuLi5kZWZhdWx0QmxvY2tzV2l0aEluZGV4LCAuLi5jb21iaW5lZEJsb2Nrc1dpdGhJbmRleF0uc29ydCgoZmlyc3QsIHNlY29uZCkgPT4gZmlyc3QuaW5kZXggLSBzZWNvbmQuaW5kZXgpO1xuICAgICAgICBjb25zdCBhZGRCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RBZGRlZEJsb2Nrc1JlcXVlc3QodGhpcy5lZGl0b3JBcGlJZCwgYWRkZWRCbG9ja3MpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRlZEJsb2NrcyxcbiAgICAgICAgICAgIGFkZEJsb2NrcyRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSwgZWRpdG9yT3V0cHV0OiBPdXRwdXREYXRhKTogT2JzZXJ2YWJsZTxCbG9ja1tdPiB7XG4gICAgICAgIGJsb2Nrc1tFdmVudEFjdGlvbnMudXBkYXRlXS5mb3JFYWNoKCh1cGRhdGVCbG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBpZCwgYmxvY2sgfSA9IHRoaXMuZWRpdG9yU2VydmljZS5nZXRGdWxsQmxvY2tEYXRhKHVwZGF0ZUJsb2NrLCBlZGl0b3JPdXRwdXQpO1xuICAgICAgICAgICAgYmxvY2suaWQgPSBpZDtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVkQmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cGRhdGVCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdCh0aGlzLnVwZGF0ZWRCbG9ja3MsIHRoaXMuYmxvY2tJZHNNYXApO1xuXG4gICAgICAgIHRoaXMudXBkYXRlZEJsb2NrcyA9IFtdO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVCbG9ja3MkO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29sbGVjdFJlbW92ZWRCbG9ja3NSZXF1ZXN0KGJsb2NrczogQ3VpRXZlbnRBY3Rpb25EYXRhKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGJsb2Nrc1tFdmVudEFjdGlvbnMucmVtb3ZlXS5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBibG9jay5kZXRhaWwudGFyZ2V0LmlkO1xuXG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRCbG9ja3NJZHMucHVzaChpZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZUJsb2NrcyQgPSB0aGlzLmVkaXRvclNlcnZpY2UuY29sbGVjdFJlbW92ZWRCbG9ja3NSZXF1ZXN0KFxuICAgICAgICAgICAgdGhpcy5lZGl0b3JBcGlJZCxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZEJsb2Nrc0lkcyxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tJZHNNYXBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzID0gW107XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZUJsb2NrcyQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja3MocGFnZSA9IDAsIHNpemUgPSA0MCk6IE9ic2VydmFibGU8QmxvY2tbXT4ge1xuICAgICAgICBsZXQgY29tYmluZWRCbG9jazogQ3VpTnVsbGFibGU8QmxvY2s+O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmpUZXh0U2VydmljZS5nZXRCbG9ja3ModGhpcy5lZGl0b3JBcGlJZCwgcGFnZSwgc2l6ZSkucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3kpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb21iaW5lZEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRCbG9jayA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVJbmRleGVzKHRoaXMuZWRpdG9yLmJsb2Nrcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2sudHlwZSA9PT0gQ09NQklORURfVEVYVF9CTE9DS19QQVJUKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrRGF0YSA9IGJsb2NrLmRhdGEgYXMgeyBwYXJlbnRJZDogc3RyaW5nIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbWJpbmVkQmxvY2sgJiYgYmxvY2tEYXRhLnBhcmVudElkISAhPT0gY29tYmluZWRCbG9jaz8uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRCbG9jayA9IHRoaXMuc2V0Q29tYmluZWRCbG9jayhibG9jayk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb21iaW5lZEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRCbG9jayA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRCbG9jayhibG9jayk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRvQXJyYXkoKVxuICAgICAgICApIGFzIHVua25vd24gYXMgT2JzZXJ2YWJsZTxCbG9ja1tdPjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEJsb2NrKGJsb2NrOiBCbG9jayk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIGJsb2NrLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsb2NrSWRzTWFwLnNldChibG9jay5pZCEsIGJsb2NrLmlkISk7XG4gICAgICAgIHRoaXMuaW5zZXJ0KGJsb2NrKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jazogQmxvY2spOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UucHVzaCh0cnVlKTtcbiAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmVkaXRvci5ibG9ja3MuZ2V0QnlJZChjb21iaW5lZEJsb2NrLmlkIHx8ICcnKTtcblxuICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmJsb2Nrcy51cGRhdGUoYmxvY2suaWQsIGNvbWJpbmVkQmxvY2suZGF0YSBhcyBDdWlDb21iaW5lZFBhcnRCbG9jayk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5zZXJ0KGNvbWJpbmVkQmxvY2spO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5zZXJ0KGJsb2NrOiBCbG9jayk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoZWNrRmlyc3QoYmxvY2spO1xuICAgICAgICB0aGlzLmluZGV4Kys7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0ZpcnN0KGJsb2NrOiBCbG9jayk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNGaXJzdCkge1xuICAgICAgICAgICAgdGhpcy5pc1NraXAgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuYmxvY2tzLmluc2VydChibG9jay50eXBlLCBibG9jay5kYXRhLCB7fSwgdGhpcy5pbmRleCwgZmFsc2UsIGZhbHNlLCBibG9jay5pZCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86INC10YHRgtGMINCy0LDRgNC40Log0YfRgtC+INGH0YLQviDRgtC+INC/0L7QudC00LXRgiDQvdC1INGC0LDQulxuICAgICAgICB0aGlzLmVkaXRvci5ibG9ja3MucmVuZGVyKHsgYmxvY2tzOiBbYmxvY2tdIH0pLnRoZW4oKCkgPT4gdGhpcy5pc1NraXAgPSBmYWxzZSk7XG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29tYmluZWRCbG9jayhibG9jazogQmxvY2spOiBCbG9jayB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkQmxvY2tEYXRhID0gYmxvY2suZGF0YSBhcyB7IHBhcmVudElkOiBzdHJpbmcgfTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5jb21iaW5lZEJsb2Nrcy5nZXQoY29tYmluZWRCbG9ja0RhdGEucGFyZW50SWQpO1xuXG4gICAgICAgIHRoaXMuYmxvY2tJZHNNYXAuc2V0KGJsb2NrLmlkISwgYmxvY2suaWQhKTtcblxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnREYXRhID0gcGFyZW50LmRhdGEgYXMgeyB0ZXh0QmxvY2tzOiBCbG9ja1tdIH07XG4gICAgICAgICAgICBwYXJlbnREYXRhLnRleHRCbG9ja3MucHVzaChibG9jayk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRPYmplY3Q6IEJsb2NrID0ge1xuICAgICAgICAgICAgaWQ6IGNvbWJpbmVkQmxvY2tEYXRhLnBhcmVudElkLFxuICAgICAgICAgICAgdHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGlkOiBjb21iaW5lZEJsb2NrRGF0YS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICB0ZXh0QmxvY2tzOiBbYmxvY2tdXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb21iaW5lZEJsb2Nrcy5zZXQoY29tYmluZWRCbG9ja0RhdGEucGFyZW50SWQsIHBhcmVudE9iamVjdCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudE9iamVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEJsb2NrSWRzVG9NYXAoYmxvY2tJZHM6IHN0cmluZ1tdLCBhZGRlZEJsb2NrczogQ3VpRnVsbEJsb2NrRGF0YVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghYmxvY2tJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhZGRlZEJsb2Nrcy5mb3JFYWNoKChibG9ja0RhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJsb2NrSWRzTWFwLnNldChibG9ja0RhdGEuaWQsIGJsb2NrSWRzW2luZGV4XSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3RhcnRCbG9jaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tJZHNNYXAuc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JFbXB0eS5lbWl0KHRoaXMuY2hlY2tJc0VtcHR5KCkpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnJlbmRlcih7IGJsb2NrczogW10gfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRTdGFydEJsb2NrKHRoaXMuZWRpdG9yQXBpSWQsIGFzeW5jIChibG9jazogQmxvY2s8Q3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhPiwgaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5ibG9ja0lkc01hcC5zZXQoaWQsIGlkKTtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlLnB1c2godHJ1ZSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZWRpdG9yLnJlbmRlcih7IGJsb2NrczogW2Jsb2NrXSB9KTtcblxuICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgICAgICAgICAgcmVjYWxjdWxhdGVJbmRleGVzKHRoaXMuZWRpdG9yLmJsb2Nrcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWc/LmF1dG9mb2N1cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lZGl0b3IuY2FyZXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgTUlOX0JMT0NLU19DT1VOVCA9IDE7XG4gICAgICAgIGNvbnN0IFJFREFDVE9SX1NFTEVDVE9SID0gJy5jb2RleC1lZGl0b3JfX3JlZGFjdG9yJztcbiAgICAgICAgY29uc3QgcmVkYWN0b3IgPSB0aGlzLmVkaXRvckVsZW1lbnQucXVlcnlTZWxlY3RvcihSRURBQ1RPUl9TRUxFQ1RPUik7XG4gICAgICAgIGNvbnN0IGJsb2Nrc0NvdW50ID0gcmVkYWN0b3I/LmNoaWxkRWxlbWVudENvdW50ID8/IDA7XG5cbiAgICAgICAgcmV0dXJuIGJsb2Nrc0NvdW50IDw9IE1JTl9CTE9DS1NfQ09VTlQgJiYgIXJlZGFjdG9yPy50ZXh0Q29udGVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucG9vbGluZ1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UgPSBbXTtcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTa2lwID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ibG9ja0lkc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgIHRoaXMuY29tYmluZWRCbG9ja3MgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLnBhZ2UgPSAwO1xuICAgICAgICB0aGlzLmFkZGVkQmxvY2tzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlZEJsb2NrcyA9IFtdO1xuICAgICAgICB0aGlzLnJlbW92ZWRCbG9ja3NJZHMgPSBbXTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgICNlZGl0b3JcbiAgICBbaWRdPVwiZWRpdG9ySWRcIlxuICAgIGRhdGEtZWRpdG9yXG4gICAgW2NsYXNzLl9yZWFkb25seV09XCJjb25maWcucmVhZE9ubHlcIlxuPjwvZGl2PlxuIl19
@@ -1,6 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component, effect, ElementRef, input, output, signal, viewChild } from '@angular/core';
2
2
  import { TranslocoDirective } from '@jsverse/transloco';
3
- import { CuiButtonModule, CuiHintModule, CuiContentWrapperComponent } from '../../../components';
3
+ import { CuiButtonModule, CuiContentWrapperComponent, CuiHintModule } from '../../../components';
4
4
  import { CuiTooltip } from '../../../directives';
5
5
  import { CuiEditorComponent } from '../../editor.component';
6
6
  import { CuiEditorModalComponent } from '../editor-modal/editor-modal.component';
@@ -46,7 +46,7 @@ export class CuiEditorBlockComponent {
46
46
  }, { allowSignalWrites: true });
47
47
  }
48
48
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiEditorBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
49
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiEditorBlockComponent, isStandalone: true, selector: "cui-editor-block", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, editorId: { classPropertyName: "editorId", publicName: "editorId", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editorEmpty: "editorEmpty" }, viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div class=\"wrapper\">\n <span class=\"title\">\n {{ t('DESCRIPTION') }}\n @if (required()) {\n <span class=\"title__required\">*</span>\n }\n </span>\n <ng-template #button>\n <button\n [cuiTooltip]=\"t('EXPAND_EDITOR_TO_FULLSCREEN')\"\n cuiButton\n size=\"xxs\"\n type=\"button\"\n appearance=\"ghost\"\n icon=\"cuiIconMaximizeSm\"\n (click)=\"onToggleDescriptionModal()\"\n ></button>\n </ng-template>\n <cui-editor-modal\n [title]=\"title()\"\n [editorId]=\"editorId()\"\n [buttonTemplate]=\"button\"\n [config]=\"config()\"\n (modalClosed)=\"onToggleDescriptionModal()\"\n />\n </div>\n <div\n #editorContainer\n cuiContentWrapper\n class=\"editor\"\n [class.editor_invalid]=\"required() && isDescriptionEmpty()\"\n >\n @if (!isDescriptionModalOpen() && editorConfig()) {\n <cui-editor\n #editorComponent\n [editorID]=\"editorId()\"\n [config]=\"editorConfig()!\"\n (editorEmpty)=\"onDescriptionChange($event)\"\n />\n }\n </div>\n @if (required() && isDescriptionEmpty()) {\n <cui-hint hintType=\"error\">{{ t('DESCRIPTION_IS_REQUIRED') }}</cui-hint>\n }\n</ng-container>\n", styles: [":host{--max-editor-height: 650px;padding:16px;display:flex;flex-direction:column;gap:8px;background:var(--cui-base-10);border-radius:8px}:host .editor{max-height:var(--max-editor-height)}.wrapper{display:flex;gap:8px;align-items:center;justify-content:space-between}.editor{padding-top:16px;padding-bottom:16px;display:block;overflow:auto}.editor_invalid{border:1px solid var(--cui-danger)}.title{font-weight:500;font-size:14px;line-height:20px}.title__required{color:var(--cui-danger)}\n"], dependencies: [{ kind: "ngmodule", type: CuiButtonModule }, { kind: "component", type: i1.CuiButtonComponent, selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "size"] }, { kind: "component", type: CuiEditorModalComponent, selector: "cui-editor-modal", inputs: ["title", "buttonTemplate", "config", "editorId"], outputs: ["editorCreated", "modalClosed"] }, { kind: "component", type: CuiEditorComponent, selector: "cui-editor", inputs: ["editorID", "config", "requestSize"], outputs: ["editorEmpty"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: CuiContentWrapperComponent, selector: "cui-content-wrapper, [cuiContentWrapper]", inputs: ["backgroundColor", "gap"] }, { kind: "directive", type: i2.CuiTooltipDirective, selector: "[cuiTooltip]:not(ng-container):not(ng-template)", inputs: ["cuiTooltipContext", "cuiTooltipAppearance", "cuiTooltip"] }, { kind: "ngmodule", type: CuiHintModule }, { kind: "component", type: i3.CuiHintComponent, selector: "cui-hint", inputs: ["hintType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
49
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiEditorBlockComponent, isStandalone: true, selector: "cui-editor-block", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, editorId: { classPropertyName: "editorId", publicName: "editorId", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editorEmpty: "editorEmpty" }, viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\n <div class=\"wrapper\">\n <span class=\"title\">\n {{ t('DESCRIPTION') }}\n @if (required()) {\n <span class=\"title__required\">*</span>\n }\n </span>\n <ng-template #button>\n <button\n [cuiTooltip]=\"t('EXPAND_EDITOR_TO_FULLSCREEN')\"\n cuiButton\n size=\"xxs\"\n type=\"button\"\n appearance=\"ghost\"\n icon=\"cuiIconMaximizeSm\"\n (click)=\"onToggleDescriptionModal()\"\n ></button>\n </ng-template>\n <cui-editor-modal\n [title]=\"title()\"\n [editorId]=\"editorId()\"\n [buttonTemplate]=\"button\"\n [config]=\"config()\"\n (modalClosed)=\"onToggleDescriptionModal()\"\n />\n </div>\n <div\n #editorContainer\n cuiContentWrapper\n class=\"editor\"\n [class.editor_invalid]=\"required() && isDescriptionEmpty()\"\n >\n @if (!isDescriptionModalOpen() && editorConfig()) {\n <cui-editor\n #editorComponent\n [editorApiId]=\"editorId()\"\n [config]=\"editorConfig()!\"\n (editorEmpty)=\"onDescriptionChange($event)\"\n />\n }\n </div>\n @if (required() && isDescriptionEmpty()) {\n <cui-hint hintType=\"error\">{{ t('DESCRIPTION_IS_REQUIRED') }}</cui-hint>\n }\n</ng-container>\n", styles: [":host{--max-editor-height: 650px;padding:16px;display:flex;flex-direction:column;gap:8px;background:var(--cui-base-10);border-radius:8px}:host .editor{max-height:var(--max-editor-height)}.wrapper{display:flex;gap:8px;align-items:center;justify-content:space-between}.editor{padding-top:16px;padding-bottom:16px;display:block;overflow:auto}.editor_invalid{border:1px solid var(--cui-danger)}.title{font-weight:500;font-size:14px;line-height:20px}.title__required{color:var(--cui-danger)}\n"], dependencies: [{ kind: "ngmodule", type: CuiButtonModule }, { kind: "component", type: i1.CuiButtonComponent, selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "size"] }, { kind: "component", type: CuiEditorModalComponent, selector: "cui-editor-modal", inputs: ["title", "buttonTemplate", "config", "editorId"], outputs: ["editorCreated", "modalClosed"] }, { kind: "component", type: CuiEditorComponent, selector: "cui-editor", inputs: ["editorApiId", "config", "requestSize"], outputs: ["editorEmpty"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: CuiContentWrapperComponent, selector: "cui-content-wrapper, [cuiContentWrapper]", inputs: ["backgroundColor", "gap"] }, { kind: "directive", type: i2.CuiTooltipDirective, selector: "[cuiTooltip]:not(ng-container):not(ng-template)", inputs: ["cuiTooltipContext", "cuiTooltipAppearance", "cuiTooltip"] }, { kind: "ngmodule", type: CuiHintModule }, { kind: "component", type: i3.CuiHintComponent, selector: "cui-hint", inputs: ["hintType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
50
50
  }
51
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiEditorBlockComponent, decorators: [{
52
52
  type: Component,
@@ -58,6 +58,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
58
58
  CuiContentWrapperComponent,
59
59
  CuiTooltip,
60
60
  CuiHintModule
61
- ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *transloco=\"let t\">\n <div class=\"wrapper\">\n <span class=\"title\">\n {{ t('DESCRIPTION') }}\n @if (required()) {\n <span class=\"title__required\">*</span>\n }\n </span>\n <ng-template #button>\n <button\n [cuiTooltip]=\"t('EXPAND_EDITOR_TO_FULLSCREEN')\"\n cuiButton\n size=\"xxs\"\n type=\"button\"\n appearance=\"ghost\"\n icon=\"cuiIconMaximizeSm\"\n (click)=\"onToggleDescriptionModal()\"\n ></button>\n </ng-template>\n <cui-editor-modal\n [title]=\"title()\"\n [editorId]=\"editorId()\"\n [buttonTemplate]=\"button\"\n [config]=\"config()\"\n (modalClosed)=\"onToggleDescriptionModal()\"\n />\n </div>\n <div\n #editorContainer\n cuiContentWrapper\n class=\"editor\"\n [class.editor_invalid]=\"required() && isDescriptionEmpty()\"\n >\n @if (!isDescriptionModalOpen() && editorConfig()) {\n <cui-editor\n #editorComponent\n [editorID]=\"editorId()\"\n [config]=\"editorConfig()!\"\n (editorEmpty)=\"onDescriptionChange($event)\"\n />\n }\n </div>\n @if (required() && isDescriptionEmpty()) {\n <cui-hint hintType=\"error\">{{ t('DESCRIPTION_IS_REQUIRED') }}</cui-hint>\n }\n</ng-container>\n", styles: [":host{--max-editor-height: 650px;padding:16px;display:flex;flex-direction:column;gap:8px;background:var(--cui-base-10);border-radius:8px}:host .editor{max-height:var(--max-editor-height)}.wrapper{display:flex;gap:8px;align-items:center;justify-content:space-between}.editor{padding-top:16px;padding-bottom:16px;display:block;overflow:auto}.editor_invalid{border:1px solid var(--cui-danger)}.title{font-weight:500;font-size:14px;line-height:20px}.title__required{color:var(--cui-danger)}\n"] }]
61
+ ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *transloco=\"let t\">\n <div class=\"wrapper\">\n <span class=\"title\">\n {{ t('DESCRIPTION') }}\n @if (required()) {\n <span class=\"title__required\">*</span>\n }\n </span>\n <ng-template #button>\n <button\n [cuiTooltip]=\"t('EXPAND_EDITOR_TO_FULLSCREEN')\"\n cuiButton\n size=\"xxs\"\n type=\"button\"\n appearance=\"ghost\"\n icon=\"cuiIconMaximizeSm\"\n (click)=\"onToggleDescriptionModal()\"\n ></button>\n </ng-template>\n <cui-editor-modal\n [title]=\"title()\"\n [editorId]=\"editorId()\"\n [buttonTemplate]=\"button\"\n [config]=\"config()\"\n (modalClosed)=\"onToggleDescriptionModal()\"\n />\n </div>\n <div\n #editorContainer\n cuiContentWrapper\n class=\"editor\"\n [class.editor_invalid]=\"required() && isDescriptionEmpty()\"\n >\n @if (!isDescriptionModalOpen() && editorConfig()) {\n <cui-editor\n #editorComponent\n [editorApiId]=\"editorId()\"\n [config]=\"editorConfig()!\"\n (editorEmpty)=\"onDescriptionChange($event)\"\n />\n }\n </div>\n @if (required() && isDescriptionEmpty()) {\n <cui-hint hintType=\"error\">{{ t('DESCRIPTION_IS_REQUIRED') }}</cui-hint>\n }\n</ng-container>\n", styles: [":host{--max-editor-height: 650px;padding:16px;display:flex;flex-direction:column;gap:8px;background:var(--cui-base-10);border-radius:8px}:host .editor{max-height:var(--max-editor-height)}.wrapper{display:flex;gap:8px;align-items:center;justify-content:space-between}.editor{padding-top:16px;padding-bottom:16px;display:block;overflow:auto}.editor_invalid{border:1px solid var(--cui-danger)}.title{font-weight:500;font-size:14px;line-height:20px}.title__required{color:var(--cui-danger)}\n"] }]
62
62
  }], ctorParameters: () => [] });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWJsb2NrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL3dpZGdldHMvZWRpdG9yLWJsb2NrL2VkaXRvci1ibG9jay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci93aWRnZXRzL2VkaXRvci1ibG9jay9lZGl0b3ItYmxvY2suY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7O0FBa0JqRixNQUFNLE9BQU8sdUJBQXVCO0lBa0JoQztRQWpCUSx3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFFaEIsaUJBQVksR0FBRyxNQUFNLENBQStCLElBQUksQ0FBQyxDQUFDO1FBQzFELDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2Qyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEMsb0JBQWUsR0FBRyxTQUFTLENBQWtDLGlCQUFpQixFQUFFO1lBQzVGLElBQUksRUFBRSxVQUFVO1NBQ25CLENBQUMsQ0FBQztRQUVhLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDakMsYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNwQyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBbUIsQ0FBQztRQUMzQyxhQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhCLGdCQUFXLEdBQUcsTUFBTSxFQUFXLENBQUM7UUFHNUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVTLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxLQUFjO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUVqQyxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxhQUFhLENBQUM7WUFFdEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNYLE9BQU87WUFDWCxDQUFDO1lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7K0dBakRRLHVCQUF1QjttR0FBdkIsdUJBQXVCLGt0QkFRdEIsVUFBVSw2Q0M1Q3hCLHdnREE4Q0EsaWlCRHZCUSxlQUFlLDJOQUNmLHVCQUF1QixtS0FDdkIsa0JBQWtCLGdJQUNsQixrQkFBa0IsZ01BQ2xCLDBCQUEwQiwrU0FFMUIsYUFBYTs7NEZBT1IsdUJBQXVCO2tCQWhCbkMsU0FBUzsrQkFDSSxrQkFBa0IsV0FDbkI7d0JBQ0wsZUFBZTt3QkFDZix1QkFBdUI7d0JBQ3ZCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQiwwQkFBMEI7d0JBQzFCLFVBQVU7d0JBQ1YsYUFBYTtxQkFDaEIsY0FDVyxJQUFJLG1CQUdDLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBlZmZlY3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBpbnB1dCxcbiAgICBvdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIHZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQ3VpTnVsbGFibGUgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuaW1wb3J0IHsgVHJhbnNsb2NvRGlyZWN0aXZlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcblxuaW1wb3J0IHsgQ3VpQnV0dG9uTW9kdWxlLCBDdWlIaW50TW9kdWxlLCBDdWlDb250ZW50V3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ3VpVG9vbHRpcCB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuXG5pbXBvcnQgdHlwZSB7IEN1aUVkaXRvckNvbmZpZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ3VpRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdWlFZGl0b3JNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2VkaXRvci1tb2RhbC9lZGl0b3ItbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjdWktZWRpdG9yLWJsb2NrJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEN1aUJ1dHRvbk1vZHVsZSxcbiAgICAgICAgQ3VpRWRpdG9yTW9kYWxDb21wb25lbnQsXG4gICAgICAgIEN1aUVkaXRvckNvbXBvbmVudCxcbiAgICAgICAgVHJhbnNsb2NvRGlyZWN0aXZlLFxuICAgICAgICBDdWlDb250ZW50V3JhcHBlckNvbXBvbmVudCxcbiAgICAgICAgQ3VpVG9vbHRpcCxcbiAgICAgICAgQ3VpSGludE1vZHVsZVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLWJsb2NrLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0b3ItYmxvY2suY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDdWlFZGl0b3JCbG9ja0NvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBza2lwRmlyc3RWYWxpZGF0aW9uID0gdHJ1ZTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JDb25maWcgPSBzaWduYWw8Q3VpTnVsbGFibGU8Q3VpRWRpdG9yQ29uZmlnPj4obnVsbCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRGVzY3JpcHRpb25Nb2RhbE9wZW4gPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0Rlc2NyaXB0aW9uRW1wdHkgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvckNvbnRhaW5lciA9IHZpZXdDaGlsZDxzdHJpbmcsIEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignZWRpdG9yQ29udGFpbmVyJywge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdGl0bGUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvcklkID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICAgIHB1YmxpYyByZWFkb25seSBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxDdWlFZGl0b3JDb25maWc+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVpcmVkID0gaW5wdXQoZmFsc2UpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvckVtcHR5ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0RWRpdG9yQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uVG9nZ2xlRGVzY3JpcHRpb25Nb2RhbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0Rlc2NyaXB0aW9uTW9kYWxPcGVuLnVwZGF0ZSgocHJldikgPT4gIXByZXYpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkRlc2NyaXB0aW9uQ2hhbmdlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yRW1wdHkuZW1pdCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2tpcEZpcnN0VmFsaWRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5za2lwRmlyc3RWYWxpZGF0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNEZXNjcmlwdGlvbkVtcHR5LnNldCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yQ29uZmlnKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlZmZlY3RSZWYgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWRpdG9yQ29udGFpbmVyKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lZGl0b3JDb25maWcuc2V0KHsgZWxlbWVudCwgLi4udGhpcy5jb25maWcoKSB9KTtcbiAgICAgICAgICAgIGVmZmVjdFJlZi5kZXN0cm95KCk7XG4gICAgICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqdHJhbnNsb2NvPVwibGV0IHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICB7eyB0KCdERVNDUklQVElPTicpIH19XG4gICAgICAgICAgICBAaWYgKHJlcXVpcmVkKCkpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlX19yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNidXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgW2N1aVRvb2x0aXBdPVwidCgnRVhQQU5EX0VESVRPUl9UT19GVUxMU0NSRUVOJylcIlxuICAgICAgICAgICAgICAgIGN1aUJ1dHRvblxuICAgICAgICAgICAgICAgIHNpemU9XCJ4eHNcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImN1aUljb25NYXhpbWl6ZVNtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ub2dnbGVEZXNjcmlwdGlvbk1vZGFsKClcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8Y3VpLWVkaXRvci1tb2RhbFxuICAgICAgICAgICAgW3RpdGxlXT1cInRpdGxlKClcIlxuICAgICAgICAgICAgW2VkaXRvcklkXT1cImVkaXRvcklkKClcIlxuICAgICAgICAgICAgW2J1dHRvblRlbXBsYXRlXT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImNvbmZpZygpXCJcbiAgICAgICAgICAgIChtb2RhbENsb3NlZCk9XCJvblRvZ2dsZURlc2NyaXB0aW9uTW9kYWwoKVwiXG4gICAgICAgIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgICAjZWRpdG9yQ29udGFpbmVyXG4gICAgICAgIGN1aUNvbnRlbnRXcmFwcGVyXG4gICAgICAgIGNsYXNzPVwiZWRpdG9yXCJcbiAgICAgICAgW2NsYXNzLmVkaXRvcl9pbnZhbGlkXT1cInJlcXVpcmVkKCkgJiYgaXNEZXNjcmlwdGlvbkVtcHR5KClcIlxuICAgID5cbiAgICAgICAgQGlmICghaXNEZXNjcmlwdGlvbk1vZGFsT3BlbigpICYmIGVkaXRvckNvbmZpZygpKSB7XG4gICAgICAgICAgICA8Y3VpLWVkaXRvclxuICAgICAgICAgICAgICAgICNlZGl0b3JDb21wb25lbnRcbiAgICAgICAgICAgICAgICBbZWRpdG9ySURdPVwiZWRpdG9ySWQoKVwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJlZGl0b3JDb25maWcoKSFcIlxuICAgICAgICAgICAgICAgIChlZGl0b3JFbXB0eSk9XCJvbkRlc2NyaXB0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAocmVxdWlyZWQoKSAmJiBpc0Rlc2NyaXB0aW9uRW1wdHkoKSkge1xuICAgICAgICA8Y3VpLWhpbnQgaGludFR5cGU9XCJlcnJvclwiPnt7IHQoJ0RFU0NSSVBUSU9OX0lTX1JFUVVJUkVEJykgfX08L2N1aS1oaW50PlxuICAgIH1cbjwvbmctY29udGFpbmVyPlxuIl19
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWJsb2NrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL3dpZGdldHMvZWRpdG9yLWJsb2NrL2VkaXRvci1ibG9jay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci93aWRnZXRzL2VkaXRvci1ibG9jay9lZGl0b3ItYmxvY2suY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsTUFBTSxFQUNOLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSwwQkFBMEIsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7O0FBa0JqRixNQUFNLE9BQU8sdUJBQXVCO0lBa0JoQztRQWpCUSx3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFFaEIsaUJBQVksR0FBRyxNQUFNLENBQStCLElBQUksQ0FBQyxDQUFDO1FBQzFELDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2Qyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFdEMsb0JBQWUsR0FBRyxTQUFTLENBQWtDLGlCQUFpQixFQUFFO1lBQzVGLElBQUksRUFBRSxVQUFVO1NBQ25CLENBQUMsQ0FBQztRQUVhLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFDakMsYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNwQyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBbUIsQ0FBQztRQUMzQyxhQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhCLGdCQUFXLEdBQUcsTUFBTSxFQUFXLENBQUM7UUFHNUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVTLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxLQUFjO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztZQUVqQyxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxhQUFhLENBQUM7WUFFdEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNYLE9BQU87WUFDWCxDQUFDO1lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7K0dBakRRLHVCQUF1QjttR0FBdkIsdUJBQXVCLGt0QkFRdEIsVUFBVSw2Q0M1Q3hCLDJnREE4Q0EsaWlCRHZCUSxlQUFlLDJOQUNmLHVCQUF1QixtS0FDdkIsa0JBQWtCLG1JQUNsQixrQkFBa0IsZ01BQ2xCLDBCQUEwQiwrU0FFMUIsYUFBYTs7NEZBT1IsdUJBQXVCO2tCQWhCbkMsU0FBUzsrQkFDSSxrQkFBa0IsV0FDbkI7d0JBQ0wsZUFBZTt3QkFDZix1QkFBdUI7d0JBQ3ZCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQiwwQkFBMEI7d0JBQzFCLFVBQVU7d0JBQ1YsYUFBYTtxQkFDaEIsY0FDVyxJQUFJLG1CQUdDLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBlZmZlY3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBpbnB1dCxcbiAgICBvdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIHZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQ3VpTnVsbGFibGUgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuaW1wb3J0IHsgVHJhbnNsb2NvRGlyZWN0aXZlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcblxuaW1wb3J0IHsgQ3VpQnV0dG9uTW9kdWxlLCBDdWlDb250ZW50V3JhcHBlckNvbXBvbmVudCwgQ3VpSGludE1vZHVsZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ3VpVG9vbHRpcCB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuXG5pbXBvcnQgeyBDdWlFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgQ3VpRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDdWlFZGl0b3JNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2VkaXRvci1tb2RhbC9lZGl0b3ItbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjdWktZWRpdG9yLWJsb2NrJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEN1aUJ1dHRvbk1vZHVsZSxcbiAgICAgICAgQ3VpRWRpdG9yTW9kYWxDb21wb25lbnQsXG4gICAgICAgIEN1aUVkaXRvckNvbXBvbmVudCxcbiAgICAgICAgVHJhbnNsb2NvRGlyZWN0aXZlLFxuICAgICAgICBDdWlDb250ZW50V3JhcHBlckNvbXBvbmVudCxcbiAgICAgICAgQ3VpVG9vbHRpcCxcbiAgICAgICAgQ3VpSGludE1vZHVsZVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLWJsb2NrLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0b3ItYmxvY2suY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDdWlFZGl0b3JCbG9ja0NvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBza2lwRmlyc3RWYWxpZGF0aW9uID0gdHJ1ZTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JDb25maWcgPSBzaWduYWw8Q3VpTnVsbGFibGU8Q3VpRWRpdG9yQ29uZmlnPj4obnVsbCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRGVzY3JpcHRpb25Nb2RhbE9wZW4gPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0Rlc2NyaXB0aW9uRW1wdHkgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvckNvbnRhaW5lciA9IHZpZXdDaGlsZDxzdHJpbmcsIEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignZWRpdG9yQ29udGFpbmVyJywge1xuICAgICAgICByZWFkOiBFbGVtZW50UmVmXG4gICAgfSk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdGl0bGUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvcklkID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICAgIHB1YmxpYyByZWFkb25seSBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxDdWlFZGl0b3JDb25maWc+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVpcmVkID0gaW5wdXQoZmFsc2UpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvckVtcHR5ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0RWRpdG9yQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uVG9nZ2xlRGVzY3JpcHRpb25Nb2RhbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0Rlc2NyaXB0aW9uTW9kYWxPcGVuLnVwZGF0ZSgocHJldikgPT4gIXByZXYpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkRlc2NyaXB0aW9uQ2hhbmdlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yRW1wdHkuZW1pdCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2tpcEZpcnN0VmFsaWRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5za2lwRmlyc3RWYWxpZGF0aW9uID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNEZXNjcmlwdGlvbkVtcHR5LnNldCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yQ29uZmlnKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlZmZlY3RSZWYgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWRpdG9yQ29udGFpbmVyKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lZGl0b3JDb25maWcuc2V0KHsgZWxlbWVudCwgLi4udGhpcy5jb25maWcoKSB9KTtcbiAgICAgICAgICAgIGVmZmVjdFJlZi5kZXN0cm95KCk7XG4gICAgICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqdHJhbnNsb2NvPVwibGV0IHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICB7eyB0KCdERVNDUklQVElPTicpIH19XG4gICAgICAgICAgICBAaWYgKHJlcXVpcmVkKCkpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlX19yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNidXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgW2N1aVRvb2x0aXBdPVwidCgnRVhQQU5EX0VESVRPUl9UT19GVUxMU0NSRUVOJylcIlxuICAgICAgICAgICAgICAgIGN1aUJ1dHRvblxuICAgICAgICAgICAgICAgIHNpemU9XCJ4eHNcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImN1aUljb25NYXhpbWl6ZVNtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ub2dnbGVEZXNjcmlwdGlvbk1vZGFsKClcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8Y3VpLWVkaXRvci1tb2RhbFxuICAgICAgICAgICAgW3RpdGxlXT1cInRpdGxlKClcIlxuICAgICAgICAgICAgW2VkaXRvcklkXT1cImVkaXRvcklkKClcIlxuICAgICAgICAgICAgW2J1dHRvblRlbXBsYXRlXT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImNvbmZpZygpXCJcbiAgICAgICAgICAgIChtb2RhbENsb3NlZCk9XCJvblRvZ2dsZURlc2NyaXB0aW9uTW9kYWwoKVwiXG4gICAgICAgIC8+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgICAjZWRpdG9yQ29udGFpbmVyXG4gICAgICAgIGN1aUNvbnRlbnRXcmFwcGVyXG4gICAgICAgIGNsYXNzPVwiZWRpdG9yXCJcbiAgICAgICAgW2NsYXNzLmVkaXRvcl9pbnZhbGlkXT1cInJlcXVpcmVkKCkgJiYgaXNEZXNjcmlwdGlvbkVtcHR5KClcIlxuICAgID5cbiAgICAgICAgQGlmICghaXNEZXNjcmlwdGlvbk1vZGFsT3BlbigpICYmIGVkaXRvckNvbmZpZygpKSB7XG4gICAgICAgICAgICA8Y3VpLWVkaXRvclxuICAgICAgICAgICAgICAgICNlZGl0b3JDb21wb25lbnRcbiAgICAgICAgICAgICAgICBbZWRpdG9yQXBpSWRdPVwiZWRpdG9ySWQoKVwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJlZGl0b3JDb25maWcoKSFcIlxuICAgICAgICAgICAgICAgIChlZGl0b3JFbXB0eSk9XCJvbkRlc2NyaXB0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAocmVxdWlyZWQoKSAmJiBpc0Rlc2NyaXB0aW9uRW1wdHkoKSkge1xuICAgICAgICA8Y3VpLWhpbnQgaGludFR5cGU9XCJlcnJvclwiPnt7IHQoJ0RFU0NSSVBUSU9OX0lTX1JFUVVJUkVEJykgfX08L2N1aS1oaW50PlxuICAgIH1cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -33,7 +33,7 @@ export class CuiEditorModalComponent {
33
33
  this.modalClosed.emit();
34
34
  }
35
35
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiEditorModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
36
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiEditorModalComponent, isStandalone: true, selector: "cui-editor-modal", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, buttonTemplate: { classPropertyName: "buttonTemplate", publicName: "buttonTemplate", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, editorId: { classPropertyName: "editorId", publicName: "editorId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editorCreated: "editorCreated", modalClosed: "modalClosed" }, ngImport: i0, template: "@if (buttonTemplate(); as template) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onModalOpen()\"\n >\n <ng-container [ngTemplateOutlet]=\"template\" />\n </button>\n} @else {\n <button\n class=\"description\"\n cuiButton\n type=\"button\"\n appearance=\"outlined-gray\"\n icon=\"cuiIconRichText\"\n size=\"sm\"\n (click)=\"onModalOpen()\"\n [disabled]=\"isButtonDisabled()\"\n >\n @if (editorId()) {\n <span class=\"description__text _created\">{{ 'Description' }}</span>\n <cui-svg\n class=\"description__icon\"\n icon=\"cuiIconEdit\"\n color=\"var(--cui-base-500)\"\n />\n } @else {\n <cui-svg\n class=\"description__icon\"\n icon=\"cuiIconPlus\"\n color=\"var(--cui-light-blue-600)\"\n />\n <span class=\"description__text\">{{ 'Add description' }}</span>\n }\n </button>\n}\n@if (isOpen()) {\n <div class=\"wrapper\">\n @if (editorId(); as id) {\n <header class=\"header\">\n <div class=\"info\">\n <button\n cuiButton\n type=\"button\"\n icon=\"cuiIconChevronLeft\"\n size=\"xxs\"\n appearance=\"secondary\"\n shape=\"rounded\"\n (click)=\"close()\"\n ></button>\n <h1 class=\"title\">{{ title() }}</h1>\n </div>\n <div class=\"actions\">\n <!-- <cui-loader /> -->\n <button\n type=\"button\"\n cuiButton\n size=\"xs\"\n (click)=\"close()\"\n >\n {{ 'Done' }}\n </button>\n </div>\n </header>\n\n <section class=\"section\">\n <cui-editor\n #editorComponent\n class=\"editor\"\n [editorID]=\"id\"\n [config]=\"config()\"\n />\n </section>\n }\n </div>\n}\n", styles: [":host ::ng-deep .delete{width:max-content}:host ::ng-deep .delete .c-content{display:flex;align-items:center;gap:4px;color:var(--cui-danger)}:host ::ng-deep .description .c-content{display:flex;align-items:center;gap:4px}.button{padding:0}.description{width:max-content}.description__text{color:var(--cui-light-blue-600)}.description__text._created{color:var(--cui-base-900)}.description__icon{padding:4px}.wrapper{position:fixed;z-index:10;inset:0;background-color:var(--cui-base-0)}.header{display:flex;justify-content:space-between;padding:8px 16px;border-bottom:.5px solid var(--cui-base-200);background:var(--cui-base-0)}.info,.actions{display:flex;gap:12px;align-items:center}.section{padding-right:24px;padding-left:24px;padding-top:24px;height:calc(100% - 50px);overflow:hidden}.title{font-weight:500;font-size:14px;line-height:20px;margin:0}.editor{padding-right:32px;padding-left:32px;padding-top:32px;display:block;margin:0 auto;max-width:750px;height:100%}\n"], dependencies: [{ kind: "component", type: CuiEditorComponent, selector: "cui-editor", inputs: ["editorID", "config", "requestSize"], outputs: ["editorEmpty"] }, { kind: "ngmodule", type: CuiButtonModule }, { kind: "component", type: i1.CuiButtonComponent, selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "size"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: CuiSvgModule }, { kind: "component", type: i2.CuiSvgComponent, selector: "cui-svg[icon]", inputs: ["width", "height", "strokeWidth", "color", "icon"] }] }); }
36
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiEditorModalComponent, isStandalone: true, selector: "cui-editor-modal", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, buttonTemplate: { classPropertyName: "buttonTemplate", publicName: "buttonTemplate", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, editorId: { classPropertyName: "editorId", publicName: "editorId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editorCreated: "editorCreated", modalClosed: "modalClosed" }, ngImport: i0, template: "@if (buttonTemplate(); as template) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onModalOpen()\"\n >\n <ng-container [ngTemplateOutlet]=\"template\" />\n </button>\n} @else {\n <button\n class=\"description\"\n cuiButton\n type=\"button\"\n appearance=\"outlined-gray\"\n icon=\"cuiIconRichText\"\n size=\"sm\"\n (click)=\"onModalOpen()\"\n [disabled]=\"isButtonDisabled()\"\n >\n @if (editorId()) {\n <span class=\"description__text _created\">{{ 'Description' }}</span>\n <cui-svg\n class=\"description__icon\"\n icon=\"cuiIconEdit\"\n color=\"var(--cui-base-500)\"\n />\n } @else {\n <cui-svg\n class=\"description__icon\"\n icon=\"cuiIconPlus\"\n color=\"var(--cui-light-blue-600)\"\n />\n <span class=\"description__text\">{{ 'Add description' }}</span>\n }\n </button>\n}\n@if (isOpen()) {\n <div class=\"wrapper\">\n @if (editorId(); as id) {\n <header class=\"header\">\n <div class=\"info\">\n <button\n cuiButton\n type=\"button\"\n icon=\"cuiIconChevronLeft\"\n size=\"xxs\"\n appearance=\"secondary\"\n shape=\"rounded\"\n (click)=\"close()\"\n ></button>\n <h1 class=\"title\">{{ title() }}</h1>\n </div>\n <div class=\"actions\">\n <!-- <cui-loader /> -->\n <button\n type=\"button\"\n cuiButton\n size=\"xs\"\n (click)=\"close()\"\n >\n {{ 'Done' }}\n </button>\n </div>\n </header>\n\n <section class=\"section\">\n <cui-editor\n #editorComponent\n class=\"editor\"\n [editorApiId]=\"id\"\n [config]=\"config()\"\n />\n </section>\n }\n </div>\n}\n", styles: [":host ::ng-deep .delete{width:max-content}:host ::ng-deep .delete .c-content{display:flex;align-items:center;gap:4px;color:var(--cui-danger)}:host ::ng-deep .description .c-content{display:flex;align-items:center;gap:4px}.button{padding:0}.description{width:max-content}.description__text{color:var(--cui-light-blue-600)}.description__text._created{color:var(--cui-base-900)}.description__icon{padding:4px}.wrapper{position:fixed;z-index:10;inset:0;background-color:var(--cui-base-0)}.header{display:flex;justify-content:space-between;padding:8px 16px;border-bottom:.5px solid var(--cui-base-200);background:var(--cui-base-0)}.info,.actions{display:flex;gap:12px;align-items:center}.section{padding-right:24px;padding-left:24px;padding-top:24px;height:calc(100% - 50px);overflow:hidden}.title{font-weight:500;font-size:14px;line-height:20px;margin:0}.editor{padding-right:32px;padding-left:32px;padding-top:32px;display:block;margin:0 auto;max-width:750px;height:100%}\n"], dependencies: [{ kind: "component", type: CuiEditorComponent, selector: "cui-editor", inputs: ["editorApiId", "config", "requestSize"], outputs: ["editorEmpty"] }, { kind: "ngmodule", type: CuiButtonModule }, { kind: "component", type: i1.CuiButtonComponent, selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "size"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: CuiSvgModule }, { kind: "component", type: i2.CuiSvgComponent, selector: "cui-svg[icon]", inputs: ["width", "height", "strokeWidth", "color", "icon"] }] }); }
37
37
  }
38
38
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiEditorModalComponent, decorators: [{
39
39
  type: Component,
@@ -42,6 +42,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
42
42
  CuiButtonModule,
43
43
  NgTemplateOutlet,
44
44
  CuiSvgModule
45
- ], standalone: true, template: "@if (buttonTemplate(); as template) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onModalOpen()\"\n >\n <ng-container [ngTemplateOutlet]=\"template\" />\n </button>\n} @else {\n <button\n class=\"description\"\n cuiButton\n type=\"button\"\n appearance=\"outlined-gray\"\n icon=\"cuiIconRichText\"\n size=\"sm\"\n (click)=\"onModalOpen()\"\n [disabled]=\"isButtonDisabled()\"\n >\n @if (editorId()) {\n <span class=\"description__text _created\">{{ 'Description' }}</span>\n <cui-svg\n class=\"description__icon\"\n icon=\"cuiIconEdit\"\n color=\"var(--cui-base-500)\"\n />\n } @else {\n <cui-svg\n class=\"description__icon\"\n icon=\"cuiIconPlus\"\n color=\"var(--cui-light-blue-600)\"\n />\n <span class=\"description__text\">{{ 'Add description' }}</span>\n }\n </button>\n}\n@if (isOpen()) {\n <div class=\"wrapper\">\n @if (editorId(); as id) {\n <header class=\"header\">\n <div class=\"info\">\n <button\n cuiButton\n type=\"button\"\n icon=\"cuiIconChevronLeft\"\n size=\"xxs\"\n appearance=\"secondary\"\n shape=\"rounded\"\n (click)=\"close()\"\n ></button>\n <h1 class=\"title\">{{ title() }}</h1>\n </div>\n <div class=\"actions\">\n <!-- <cui-loader /> -->\n <button\n type=\"button\"\n cuiButton\n size=\"xs\"\n (click)=\"close()\"\n >\n {{ 'Done' }}\n </button>\n </div>\n </header>\n\n <section class=\"section\">\n <cui-editor\n #editorComponent\n class=\"editor\"\n [editorID]=\"id\"\n [config]=\"config()\"\n />\n </section>\n }\n </div>\n}\n", styles: [":host ::ng-deep .delete{width:max-content}:host ::ng-deep .delete .c-content{display:flex;align-items:center;gap:4px;color:var(--cui-danger)}:host ::ng-deep .description .c-content{display:flex;align-items:center;gap:4px}.button{padding:0}.description{width:max-content}.description__text{color:var(--cui-light-blue-600)}.description__text._created{color:var(--cui-base-900)}.description__icon{padding:4px}.wrapper{position:fixed;z-index:10;inset:0;background-color:var(--cui-base-0)}.header{display:flex;justify-content:space-between;padding:8px 16px;border-bottom:.5px solid var(--cui-base-200);background:var(--cui-base-0)}.info,.actions{display:flex;gap:12px;align-items:center}.section{padding-right:24px;padding-left:24px;padding-top:24px;height:calc(100% - 50px);overflow:hidden}.title{font-weight:500;font-size:14px;line-height:20px;margin:0}.editor{padding-right:32px;padding-left:32px;padding-top:32px;display:block;margin:0 auto;max-width:750px;height:100%}\n"] }]
45
+ ], standalone: true, template: "@if (buttonTemplate(); as template) {\n <button\n type=\"button\"\n class=\"button\"\n (click)=\"onModalOpen()\"\n >\n <ng-container [ngTemplateOutlet]=\"template\" />\n </button>\n} @else {\n <button\n class=\"description\"\n cuiButton\n type=\"button\"\n appearance=\"outlined-gray\"\n icon=\"cuiIconRichText\"\n size=\"sm\"\n (click)=\"onModalOpen()\"\n [disabled]=\"isButtonDisabled()\"\n >\n @if (editorId()) {\n <span class=\"description__text _created\">{{ 'Description' }}</span>\n <cui-svg\n class=\"description__icon\"\n icon=\"cuiIconEdit\"\n color=\"var(--cui-base-500)\"\n />\n } @else {\n <cui-svg\n class=\"description__icon\"\n icon=\"cuiIconPlus\"\n color=\"var(--cui-light-blue-600)\"\n />\n <span class=\"description__text\">{{ 'Add description' }}</span>\n }\n </button>\n}\n@if (isOpen()) {\n <div class=\"wrapper\">\n @if (editorId(); as id) {\n <header class=\"header\">\n <div class=\"info\">\n <button\n cuiButton\n type=\"button\"\n icon=\"cuiIconChevronLeft\"\n size=\"xxs\"\n appearance=\"secondary\"\n shape=\"rounded\"\n (click)=\"close()\"\n ></button>\n <h1 class=\"title\">{{ title() }}</h1>\n </div>\n <div class=\"actions\">\n <!-- <cui-loader /> -->\n <button\n type=\"button\"\n cuiButton\n size=\"xs\"\n (click)=\"close()\"\n >\n {{ 'Done' }}\n </button>\n </div>\n </header>\n\n <section class=\"section\">\n <cui-editor\n #editorComponent\n class=\"editor\"\n [editorApiId]=\"id\"\n [config]=\"config()\"\n />\n </section>\n }\n </div>\n}\n", styles: [":host ::ng-deep .delete{width:max-content}:host ::ng-deep .delete .c-content{display:flex;align-items:center;gap:4px;color:var(--cui-danger)}:host ::ng-deep .description .c-content{display:flex;align-items:center;gap:4px}.button{padding:0}.description{width:max-content}.description__text{color:var(--cui-light-blue-600)}.description__text._created{color:var(--cui-base-900)}.description__icon{padding:4px}.wrapper{position:fixed;z-index:10;inset:0;background-color:var(--cui-base-0)}.header{display:flex;justify-content:space-between;padding:8px 16px;border-bottom:.5px solid var(--cui-base-200);background:var(--cui-base-0)}.info,.actions{display:flex;gap:12px;align-items:center}.section{padding-right:24px;padding-left:24px;padding-top:24px;height:calc(100% - 50px);overflow:hidden}.title{font-weight:500;font-size:14px;line-height:20px;margin:0}.editor{padding-right:32px;padding-left:32px;padding-top:32px;display:block;margin:0 auto;max-width:750px;height:100%}\n"] }]
46
46
  }] });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL3dpZGdldHMvZWRpdG9yLW1vZGFsL2VkaXRvci1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci93aWRnZXRzL2VkaXRvci1tb2RhbC9lZGl0b3ItbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7O0FBZTVELE1BQU0sT0FBTyx1QkFBdUI7SUFacEM7UUFhdUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixxQkFBZ0IsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFN0MsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNqQyxtQkFBYyxHQUFHLEtBQUssRUFBNEIsQ0FBQztRQUNuRCxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBbUIsQ0FBQztRQUMzQyxhQUFRLEdBQUcsS0FBSyxFQUF1QixDQUFDO1FBRXhDLGtCQUFhLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDekIsZ0JBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQztLQXNCMUM7SUFwQmEsV0FBVztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRVosT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFDTSxJQUFJO1FBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVNLEtBQUs7UUFDUixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQzsrR0EvQlEsdUJBQXVCO21HQUF2Qix1QkFBdUIsc3FCQ3JCcEMsNjFFQTRFQSxvZ0NEaEVRLGtCQUFrQiwrSEFDbEIsZUFBZSwyTkFDZixnQkFBZ0IsbUpBQ2hCLFlBQVk7OzRGQU1QLHVCQUF1QjtrQkFabkMsU0FBUzsrQkFDSSxrQkFBa0IsV0FDbkI7d0JBQ0wsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsWUFBWTtxQkFDZixjQUNXLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IEN1aU51bGxhYmxlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcblxuaW1wb3J0IHsgQ3VpQnV0dG9uTW9kdWxlLCBDdWlTdmdNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzJztcbmltcG9ydCB7IEN1aUVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUgeyBDdWlFZGl0b3JDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjdWktZWRpdG9yLW1vZGFsJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEN1aUVkaXRvckNvbXBvbmVudCxcbiAgICAgICAgQ3VpQnV0dG9uTW9kdWxlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBDdWlTdmdNb2R1bGVcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2VkaXRvci1tb2RhbC5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgQ3VpRWRpdG9yTW9kYWxDb21wb25lbnQge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0J1dHRvbkRpc2FibGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIHB1YmxpYyByZWFkb25seSB0aXRsZSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYnV0dG9uVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD4+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmZpZyA9IGlucHV0LnJlcXVpcmVkPEN1aUVkaXRvckNvbmZpZz4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWRpdG9ySWQgPSBpbnB1dDxDdWlOdWxsYWJsZTxzdHJpbmc+PigpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvckNyZWF0ZWQgPSBvdXRwdXQoKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbW9kYWxDbG9zZWQgPSBvdXRwdXQoKTtcblxuICAgIHByb3RlY3RlZCBvbk1vZGFsT3BlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkLnNldCh0cnVlKTtcblxuICAgICAgICBpZiAodGhpcy5lZGl0b3JJZCgpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lZGl0b3JDcmVhdGVkLmVtaXQoKTtcbiAgICB9XG4gICAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZC5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLm1vZGFsQ2xvc2VkLmVtaXQoKTtcbiAgICB9XG59XG4iLCJAaWYgKGJ1dHRvblRlbXBsYXRlKCk7IGFzIHRlbXBsYXRlKSB7XG4gICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwib25Nb2RhbE9wZW4oKVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCIgLz5cbiAgICA8L2J1dHRvbj5cbn0gQGVsc2Uge1xuICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgIGN1aUJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVkLWdyYXlcIlxuICAgICAgICBpY29uPVwiY3VpSWNvblJpY2hUZXh0XCJcbiAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uTW9kYWxPcGVuKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNCdXR0b25EaXNhYmxlZCgpXCJcbiAgICA+XG4gICAgICAgIEBpZiAoZWRpdG9ySWQoKSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXNjcmlwdGlvbl9fdGV4dCBfY3JlYXRlZFwiPnt7ICdEZXNjcmlwdGlvbicgfX08L3NwYW4+XG4gICAgICAgICAgICA8Y3VpLXN2Z1xuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVzY3JpcHRpb25fX2ljb25cIlxuICAgICAgICAgICAgICAgIGljb249XCJjdWlJY29uRWRpdFwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJ2YXIoLS1jdWktYmFzZS01MDApXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGN1aS1zdmdcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRlc2NyaXB0aW9uX19pY29uXCJcbiAgICAgICAgICAgICAgICBpY29uPVwiY3VpSWNvblBsdXNcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwidmFyKC0tY3VpLWxpZ2h0LWJsdWUtNjAwKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXNjcmlwdGlvbl9fdGV4dFwiPnt7ICdBZGQgZGVzY3JpcHRpb24nIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgPC9idXR0b24+XG59XG5AaWYgKGlzT3BlbigpKSB7XG4gICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgQGlmIChlZGl0b3JJZCgpOyBhcyBpZCkge1xuICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiY3VpSWNvbkNoZXZyb25MZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4eHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRpdGxlXCI+e3sgdGl0bGUoKSB9fTwvaDE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8Y3VpLWxvYWRlciAvPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdEb25lJyB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8Y3VpLWVkaXRvclxuICAgICAgICAgICAgICAgICAgICAjZWRpdG9yQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW2VkaXRvcklEXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJjb25maWcoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxufVxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL3dpZGdldHMvZWRpdG9yLW1vZGFsL2VkaXRvci1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci93aWRnZXRzL2VkaXRvci1tb2RhbC9lZGl0b3ItbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7O0FBZTVELE1BQU0sT0FBTyx1QkFBdUI7SUFacEM7UUFhdUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixxQkFBZ0IsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFN0MsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNqQyxtQkFBYyxHQUFHLEtBQUssRUFBNEIsQ0FBQztRQUNuRCxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBbUIsQ0FBQztRQUMzQyxhQUFRLEdBQUcsS0FBSyxFQUF1QixDQUFDO1FBRXhDLGtCQUFhLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDekIsZ0JBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQztLQXNCMUM7SUFwQmEsV0FBVztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRVosT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFDTSxJQUFJO1FBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVNLEtBQUs7UUFDUixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQzsrR0EvQlEsdUJBQXVCO21HQUF2Qix1QkFBdUIsc3FCQ3JCcEMsZzJFQTRFQSxvZ0NEaEVRLGtCQUFrQixrSUFDbEIsZUFBZSwyTkFDZixnQkFBZ0IsbUpBQ2hCLFlBQVk7OzRGQU1QLHVCQUF1QjtrQkFabkMsU0FBUzsrQkFDSSxrQkFBa0IsV0FDbkI7d0JBQ0wsa0JBQWtCO3dCQUNsQixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsWUFBWTtxQkFDZixjQUNXLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IEN1aU51bGxhYmxlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcblxuaW1wb3J0IHsgQ3VpQnV0dG9uTW9kdWxlLCBDdWlTdmdNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzJztcbmltcG9ydCB7IEN1aUVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUgeyBDdWlFZGl0b3JDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjdWktZWRpdG9yLW1vZGFsJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEN1aUVkaXRvckNvbXBvbmVudCxcbiAgICAgICAgQ3VpQnV0dG9uTW9kdWxlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBDdWlTdmdNb2R1bGVcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2VkaXRvci1tb2RhbC5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgQ3VpRWRpdG9yTW9kYWxDb21wb25lbnQge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0J1dHRvbkRpc2FibGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIHB1YmxpYyByZWFkb25seSB0aXRsZSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgYnV0dG9uVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD4+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmZpZyA9IGlucHV0LnJlcXVpcmVkPEN1aUVkaXRvckNvbmZpZz4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWRpdG9ySWQgPSBpbnB1dDxDdWlOdWxsYWJsZTxzdHJpbmc+PigpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvckNyZWF0ZWQgPSBvdXRwdXQoKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbW9kYWxDbG9zZWQgPSBvdXRwdXQoKTtcblxuICAgIHByb3RlY3RlZCBvbk1vZGFsT3BlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkLnNldCh0cnVlKTtcblxuICAgICAgICBpZiAodGhpcy5lZGl0b3JJZCgpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lZGl0b3JDcmVhdGVkLmVtaXQoKTtcbiAgICB9XG4gICAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZC5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLm1vZGFsQ2xvc2VkLmVtaXQoKTtcbiAgICB9XG59XG4iLCJAaWYgKGJ1dHRvblRlbXBsYXRlKCk7IGFzIHRlbXBsYXRlKSB7XG4gICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwib25Nb2RhbE9wZW4oKVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCIgLz5cbiAgICA8L2J1dHRvbj5cbn0gQGVsc2Uge1xuICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgIGN1aUJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVkLWdyYXlcIlxuICAgICAgICBpY29uPVwiY3VpSWNvblJpY2hUZXh0XCJcbiAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uTW9kYWxPcGVuKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNCdXR0b25EaXNhYmxlZCgpXCJcbiAgICA+XG4gICAgICAgIEBpZiAoZWRpdG9ySWQoKSkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXNjcmlwdGlvbl9fdGV4dCBfY3JlYXRlZFwiPnt7ICdEZXNjcmlwdGlvbicgfX08L3NwYW4+XG4gICAgICAgICAgICA8Y3VpLXN2Z1xuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVzY3JpcHRpb25fX2ljb25cIlxuICAgICAgICAgICAgICAgIGljb249XCJjdWlJY29uRWRpdFwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJ2YXIoLS1jdWktYmFzZS01MDApXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGN1aS1zdmdcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRlc2NyaXB0aW9uX19pY29uXCJcbiAgICAgICAgICAgICAgICBpY29uPVwiY3VpSWNvblBsdXNcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwidmFyKC0tY3VpLWxpZ2h0LWJsdWUtNjAwKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZXNjcmlwdGlvbl9fdGV4dFwiPnt7ICdBZGQgZGVzY3JpcHRpb24nIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgPC9idXR0b24+XG59XG5AaWYgKGlzT3BlbigpKSB7XG4gICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgQGlmIChlZGl0b3JJZCgpOyBhcyBpZCkge1xuICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiY3VpSWNvbkNoZXZyb25MZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4eHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFwZT1cInJvdW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInRpdGxlXCI+e3sgdGl0bGUoKSB9fTwvaDE+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8Y3VpLWxvYWRlciAvPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjdWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdEb25lJyB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaGVhZGVyPlxuXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8Y3VpLWVkaXRvclxuICAgICAgICAgICAgICAgICAgICAjZWRpdG9yQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW2VkaXRvckFwaUlkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJjb25maWcoKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxufVxuIl19