@cuby-ui/core 0.0.598 → 0.0.599
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.
|
@@ -11,6 +11,7 @@ export declare class CuiEditorComponent implements OnDestroy {
|
|
|
11
11
|
private readonly RETRY_DELAY;
|
|
12
12
|
private readonly emptyQueue;
|
|
13
13
|
private initChain;
|
|
14
|
+
private firstRender;
|
|
14
15
|
private lazyLoadObserver;
|
|
15
16
|
private lazyLoadSubscription;
|
|
16
17
|
private isSkipCombinedBlockOnChange;
|
|
@@ -85,6 +86,7 @@ export declare class CuiEditorComponent implements OnDestroy {
|
|
|
85
86
|
private setBlockIdsToMap;
|
|
86
87
|
private updateElementLocalIdWithMainId;
|
|
87
88
|
private setStartBlock;
|
|
89
|
+
private finishLoadedDocument;
|
|
88
90
|
private renderStartBlock;
|
|
89
91
|
private setFocus;
|
|
90
92
|
private checkIsEmpty;
|
|
@@ -4,7 +4,6 @@ export const getEditorConfig = (id, config = DEFAULT_CONFIG) => ({
|
|
|
4
4
|
holder: id,
|
|
5
5
|
logLevel: 'ERROR',
|
|
6
6
|
readOnly: config.readOnly,
|
|
7
|
-
autofocus: config.autofocus,
|
|
8
7
|
tools: {
|
|
9
8
|
paragraph: {
|
|
10
9
|
class: CuiCombinedTextBlockTool,
|
|
@@ -27,4 +26,4 @@ export const getEditorConfig = (id, config = DEFAULT_CONFIG) => ({
|
|
|
27
26
|
},
|
|
28
27
|
defaultBlock: COMBINED_TEXT_BLOCK_NAME
|
|
29
28
|
});
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL2NvbmZpZy9lZGl0b3IuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUzRyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxFQUFVLEVBQUUsU0FBMEIsY0FBYyxFQUFnQixFQUFFLENBQUMsQ0FBQztJQUNwRyxNQUFNLEVBQUUsRUFBRTtJQUNWLFFBQVEsRUFBRSxPQUFvQjtJQUM5QixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7SUFDekIsS0FBSyxFQUFFO1FBQ0gsU0FBUyxFQUFFO1lBQ1AsS0FBSyxFQUFFLHdCQUF3QjtZQUMvQixhQUFhLEVBQUUsSUFBSTtZQUNuQixNQUFNLEVBQUU7Z0JBQ0osV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUMvQixtQkFBbUIsRUFBRSxNQUFNLENBQUMsbUJBQW1CO2FBQ2xEO1NBQ0o7UUFDRCxJQUFJLEVBQUU7WUFDRixLQUFLLEVBQUUsYUFBYTtTQUN2QjtRQUNELElBQUksRUFBRTtZQUNGLEtBQUssRUFBRSxpQkFBaUI7U0FDM0I7UUFDRCxNQUFNLEVBQUU7WUFDSixLQUFLLEVBQUUsbUJBQW1CO1NBQzdCO1FBQ0QsR0FBRyxNQUFNLENBQUMsS0FBSztLQUNsQjtJQUNELFlBQVksRUFBRSx3QkFBd0I7Q0FDekMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFZGl0b3JDb25maWcsIExvZ0xldmVscyB9IGZyb20gJ0BlZGl0b3Jqcy9lZGl0b3Jqcyc7XHJcblxyXG5pbXBvcnQgeyBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsIERFRkFVTFRfQ09ORklHIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHR5cGUgeyBDdWlFZGl0b3JDb25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ3VpQ29tYmluZWRUZXh0QmxvY2tUb29sLCBDdWlCb2xkSW5saW5lVG9vbCwgQ3VpSXRhbGljSW5saW5lVG9vbCwgQ3VpTGlua01hcmtlciB9IGZyb20gJy4uL3Rvb2xzJztcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRFZGl0b3JDb25maWcgPSAoaWQ6IHN0cmluZywgY29uZmlnOiBDdWlFZGl0b3JDb25maWcgPSBERUZBVUxUX0NPTkZJRyk6IEVkaXRvckNvbmZpZyA9PiAoe1xyXG4gICAgaG9sZGVyOiBpZCxcclxuICAgIGxvZ0xldmVsOiAnRVJST1InIGFzIExvZ0xldmVscyxcclxuICAgIHJlYWRPbmx5OiBjb25maWcucmVhZE9ubHksXHJcbiAgICB0b29sczoge1xyXG4gICAgICAgIHBhcmFncmFwaDoge1xyXG4gICAgICAgICAgICBjbGFzczogQ3VpQ29tYmluZWRUZXh0QmxvY2tUb29sLFxyXG4gICAgICAgICAgICBpbmxpbmVUb29sYmFyOiB0cnVlLFxyXG4gICAgICAgICAgICBjb25maWc6IHtcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBjb25maWcucGxhY2Vob2xkZXIsXHJcbiAgICAgICAgICAgICAgICByZWFkb25seVBsYWNlaG9sZGVyOiBjb25maWcucmVhZG9ubHlQbGFjZWhvbGRlclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBsaW5rOiB7XHJcbiAgICAgICAgICAgIGNsYXNzOiBDdWlMaW5rTWFya2VyXHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2xkOiB7XHJcbiAgICAgICAgICAgIGNsYXNzOiBDdWlCb2xkSW5saW5lVG9vbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaXRhbGljOiB7XHJcbiAgICAgICAgICAgIGNsYXNzOiBDdWlJdGFsaWNJbmxpbmVUb29sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi5jb25maWcudG9vbHNcclxuICAgIH0sXHJcbiAgICBkZWZhdWx0QmxvY2s6IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRVxyXG59KTtcclxuIl19
|
|
@@ -20,6 +20,7 @@ export class CuiEditorComponent {
|
|
|
20
20
|
this.RETRY_DELAY = 3000;
|
|
21
21
|
this.emptyQueue = new Subject();
|
|
22
22
|
this.initChain = Promise.resolve();
|
|
23
|
+
this.firstRender = Promise.resolve();
|
|
23
24
|
this.lazyLoadObserver = null;
|
|
24
25
|
this.lazyLoadSubscription = null;
|
|
25
26
|
this.isSkipCombinedBlockOnChange = [];
|
|
@@ -380,7 +381,7 @@ export class CuiEditorComponent {
|
|
|
380
381
|
}
|
|
381
382
|
const version = this.lazyLoadVersion;
|
|
382
383
|
// TODO: есть варик что что то пойдет не так
|
|
383
|
-
this.editor.blocks.render({ blocks: [block] }).then(() => {
|
|
384
|
+
this.firstRender = this.editor.blocks.render({ blocks: [block] }).then(() => {
|
|
384
385
|
this.isSkip = false;
|
|
385
386
|
this.finishFirstRender(version);
|
|
386
387
|
});
|
|
@@ -429,8 +430,7 @@ export class CuiEditorComponent {
|
|
|
429
430
|
}
|
|
430
431
|
setStartBlock() {
|
|
431
432
|
if (this.blockIdsMap.size) {
|
|
432
|
-
this.
|
|
433
|
-
this.editorEmpty.emit(this.checkIsEmpty());
|
|
433
|
+
this.finishLoadedDocument();
|
|
434
434
|
return;
|
|
435
435
|
}
|
|
436
436
|
const version = this.lazyLoadVersion;
|
|
@@ -440,6 +440,15 @@ export class CuiEditorComponent {
|
|
|
440
440
|
}
|
|
441
441
|
this.editorService.setStartBlock(this.editorApiId(), this.requestOptions(), (block, id) => this.renderStartBlock(block, id, version));
|
|
442
442
|
}
|
|
443
|
+
finishLoadedDocument() {
|
|
444
|
+
this.firstRender.then(() => {
|
|
445
|
+
if (this.isDestroyed) {
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
this.setFocus();
|
|
449
|
+
this.editorEmpty.emit(this.checkIsEmpty());
|
|
450
|
+
});
|
|
451
|
+
}
|
|
443
452
|
async renderStartBlock(block, id, version) {
|
|
444
453
|
if (this.isDestroyed || version !== this.lazyLoadVersion) {
|
|
445
454
|
return;
|
|
@@ -469,6 +478,7 @@ export class CuiEditorComponent {
|
|
|
469
478
|
}
|
|
470
479
|
resetData() {
|
|
471
480
|
this.resetLazyLoad();
|
|
481
|
+
this.firstRender = Promise.resolve();
|
|
472
482
|
this.isEditorReady.set(false);
|
|
473
483
|
this.isSkipCombinedBlockOnChange = [];
|
|
474
484
|
this.isFirst = true;
|
|
@@ -513,4 +523,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
513
523
|
}
|
|
514
524
|
], template: "<div\n #editor\n data-editor\n [class._readonly]=\"config().readOnly\"\n [class._loading]=\"!isEditorReady()\"\n>\n <div [id]=\"editorId\"></div>\n <div\n #editorEnd\n class=\"editor-end\"\n ></div>\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-radius:8px;border:1px solid var(--cui-base-200);color:var(--textColor);background-color:var(--cui-base-10);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}@media (max-width: 650px){:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{border-color:var(--menuBorder);background-color:var(--menuBackground)}:host ::ng-deep .ce-toolbar__actions{inset:0 auto auto 0}}: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}@media (max-width: 650px){:host ::ng-deep [data-editor] .codex-editor{margin-left:0}}: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]._loading{pointer-events:none;-webkit-user-select:none;user-select:none}:host ::ng-deep [data-editor]._loading .combined-text-block[data-placeholder-active][data-empty=true]:before{content:none}: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:var(--cui-warning)}:host ::ng-deep .role-marker{color:var(--cui-info)}.editor-end{margin-top:-150px;height:150px;pointer-events:none}.form{height:100%}\n"] }]
|
|
515
525
|
}], ctorParameters: () => [] });
|
|
516
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTVDLE9BQU8sUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRyxPQUFPLEVBQUUscUJBQXFCLEVBQVksa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBVzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBaUJqRSxNQUFNLE9BQU8sa0JBQWtCO0lB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ZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBvdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIHZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB0eXBlIHsgQ3VpTnVsbGFibGUgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuaW1wb3J0IHsgQ3VpSWRTZXJ2aWNlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcbmltcG9ydCB0eXBlIHsgQVBJLCBCbG9ja011dGF0aW9uRXZlbnQsIE91dHB1dERhdGEgfSBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xuaW1wb3J0IEVkaXRvckpTIGZyb20gJ0BlZGl0b3Jqcy9lZGl0b3Jqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgY29uY2F0TWFwLCBFTVBUWSwgZmluYWxpemUsIG1hcCwgU3ViamVjdCwgdGFwLCB0aW1lciwgdG9BcnJheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ1VJX0pURVhUX0FQSV9TRVJWSUNFLCBDdWlCbG9jaywgQ3VpSlRleHRBcGlTZXJ2aWNlIH0gZnJvbSAnQGN1YnktdWkvYXBpJztcblxuaW1wb3J0IHsgZ2V0RWRpdG9yQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQ09NQklORURfVEVYVF9CTE9DS19OQU1FLCBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsIERFRkFVTFRfQ09ORklHIH0gZnJvbSAnLi9jb25zdGFudHMvZWRpdG9yLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBzZXRFZGl0b3JFdmVudHMgfSBmcm9tICcuL2V2ZW50cy9zZXQtZWRpdG9yLWV2ZW50cyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQ3VpQmxvY2tEYXRhLFxuICAgIEN1aUJsb2Nrc1JlcXVlc3REYXRhLFxuICAgIEN1aUNvbWJpbmVkQmxvY2tBZGRpbmdFdmVudCxcbiAgICBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGEsXG4gICAgQ3VpQ29tYmluZWRQYXJ0QmxvY2ssXG4gICAgQ3VpRWRpdG9yQ29uZmlnLFxuICAgIEN1aUV2ZW50QWN0aW9uRGF0YSxcbiAgICBDdWlGdWxsQmxvY2tEYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDdWlFZGl0b3JTZXJ2aWNlLCBFdmVudEFjdGlvbnMgfSBmcm9tICcuL3NlcnZpY2VzJztcbmltcG9ydCB7IHJlY2FsY3VsYXRlSW5kZXhlcyB9IGZyb20gJy4vdXRpbHMvcmVjYWxjdWxhdGUtaW5kZXhlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY3VpLWVkaXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgQ3VpRWRpdG9yU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogQ1VJX0pURVhUX0FQSV9TRVJWSUNFLFxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT5cbiAgICAgICAgICAgICAgICBpbmplY3QoQ1VJX0pURVhUX0FQSV9TRVJWSUNFLCB7IG9wdGlvbmFsOiB0cnVlLCBza2lwU2VsZjogdHJ1ZSB9KSA/PyBuZXcgQ3VpSlRleHRBcGlTZXJ2aWNlKClcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQ3VpRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjdWlJZFNlcnZpY2UgPSBpbmplY3QoQ3VpSWRTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVkaXRvclNlcnZpY2UgPSBpbmplY3QoQ3VpRWRpdG9yU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBqVGV4dFNlcnZpY2UgPSBpbmplY3QoQ1VJX0pURVhUX0FQSV9TRVJWSUNFKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgUE9PTElOR19ERUxBWSA9IDEwMDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IFJFVFJZX0RFTEFZID0gMzAwMDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW1wdHlRdWV1ZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIGluaXRDaGFpbjogUHJvbWlzZTx2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHByaXZhdGUgbGF6eUxvYWRPYnNlcnZlcjogQ3VpTnVsbGFibGU8SW50ZXJzZWN0aW9uT2JzZXJ2ZXI+ID0gbnVsbDtcbiAgICBwcml2YXRlIGxhenlMb2FkU3Vic2NyaXB0aW9uOiBDdWlOdWxsYWJsZTxTdWJzY3JpcHRpb24+ID0gbnVsbDtcbiAgICBwcml2YXRlIGlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZTogYm9vbGVhbltdID0gW107XG4gICAgcHJpdmF0ZSBpc0ZpcnN0ID0gdHJ1ZTtcbiAgICBwcml2YXRlIGlzQ2hhbmdpbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzU2tpcCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc1ByZWxvYWRGaW5pc2hlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaGFzRW5kTGVmdFpvbmUgPSBmYWxzZTtcbiAgICAvLyDQndGD0LbQtdC9INC00LvRjyDRgdC+0L7RgtC90L7RiNC10L3QuNGPINC70L7QutCw0LvRjNC90L7Qs9C+IElEINC4INC+0YHQvdC+0LLQvdC+0LPQviBJRCDQv9C+0YHQu9C1INGB0L7Qt9C00LDQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsFxuICAgIHByaXZhdGUgYmxvY2tJZHNNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIHByaXZhdGUgY29tYmluZWRCbG9ja3MgPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBpbmRleCA9IDA7XG4gICAgcHJpdmF0ZSBwYWdlID0gMDtcbiAgICBwcml2YXRlIGxhenlMb2FkVmVyc2lvbiA9IDA7XG4gICAgcHJpdmF0ZSBhZGRlZEJsb2NrczogQ3VpQmxvY2tEYXRhW10gPSBbXTtcbiAgICBwcml2YXRlIHVwZGF0ZWRCbG9ja3M6IEN1aUJsb2NrW10gPSBbXTtcbiAgICBwcml2YXRlIHJlbW92ZWRCbG9ja3NJZHM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBjaGFuZ2VzUXVldWU6IEJsb2NrTXV0YXRpb25FdmVudFtdW10gPSBbXTtcbiAgICBwcml2YXRlIGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNSZWFkb25seSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCk/LnJlYWRPbmx5KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKT8ucmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlZGl0b3JFbmRSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdlZGl0b3JFbmQnKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0VkaXRvclJlYWR5ID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZWRpdG9ySWQgPSB0aGlzLmN1aUlkU2VydmljZS5nZW5lcmF0ZSgpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdlZGl0b3InKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBlZGl0b3JBcGlJZCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQ8Q3VpRWRpdG9yQ29uZmlnPihERUZBVUxUX0NPTkZJRyk7XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVlc3RTaXplID0gaW5wdXQ8bnVtYmVyPig0MCk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgZWRpdG9yRW1wdHkgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWRpdG9yUmVhZHkgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBlZGl0b3IhOiBFZGl0b3JKUztcbiAgICBwdWJsaWMgZWRpdG9yRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW5pdEVkaXRvckVmZmVjdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5lbnF1ZXVlSW5pdCgoKSA9PiB0aGlzLnRlYXJkb3duRWRpdG9yKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmxhenlMb2FkVmVyc2lvbjtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucmVxdWVzdFNpemUoKTtcbiAgICAgICAgbGV0IGJsb2Nrc0NvdW50ID0gMDtcbiAgICAgICAgbGV0IGlzRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5sYXp5TG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMuZ2V0QmxvY2tzKHRoaXMucGFnZSwgc2l6ZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoYmxvY2tzKSA9PiAoYmxvY2tzQ291bnQgPSBibG9ja3MubGVuZ3RoKSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlzRmFpbGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5maW5pc2hQYWdlTG9hZChibG9ja3NDb3VudCwgc2l6ZSwgdmVyc2lvbiwgaXNGYWlsZWQpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluaXNoUGFnZUxvYWQoYmxvY2tzQ291bnQ6IG51bWJlciwgc2l6ZTogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIGlzRmFpbGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCB8fCB2ZXJzaW9uICE9PSB0aGlzLmxhenlMb2FkVmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRmFpbGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5UGFnZUxvYWQodmVyc2lvbik7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGFnZSsrO1xuICAgICAgICB0aGlzLnNjaGVkdWxlTmV4dFBhZ2UoYmxvY2tzQ291bnQsIHNpemUsIHZlcnNpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmV0cnlQYWdlTG9hZCh2ZXJzaW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1JlcXVlc3RlZCA9IHRydWU7XG5cbiAgICAgICAgdGltZXIodGhpcy5SRVRSWV9ERUxBWSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3kpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQgfHwgdmVyc2lvbiAhPT0gdGhpcy5sYXp5TG9hZFZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFBhZ2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2NoZWR1bGVOZXh0UGFnZShibG9ja3NDb3VudDogbnVtYmVyLCBzaXplOiBudW1iZXIsIHZlcnNpb246IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoYmxvY2tzQ291bnQgPCBzaXplKSB7XG4gICAgICAgICAgICB0aGlzLmxhenlMb2FkT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUHJlbG9hZCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lcih0aGlzLlBPT0xJTkdfREVMQVkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb250aW51ZUxhenlMb2FkKHZlcnNpb24pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnRpbnVlTGF6eUxvYWQodmVyc2lvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkIHx8IHZlcnNpb24gIT09IHRoaXMubGF6eUxvYWRWZXJzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb25maWcoKT8ud2l0aG91dFByZWxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUHJlbG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vYnNlcnZlRWRpdG9yRW5kKCk7XG4gICAgfVxuICAgIHByaXZhdGUgZmluaXNoUHJlbG9hZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQcmVsb2FkRmluaXNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNQcmVsb2FkRmluaXNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldFN0YXJ0QmxvY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmlzaEZpcnN0UmVuZGVyKHZlcnNpb246IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCB8fCB2ZXJzaW9uICE9PSB0aGlzLmxhenlMb2FkVmVyc2lvbiB8fCB0aGlzLmlzRWRpdG9yUmVhZHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0VkaXRvclJlYWR5LnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5lZGl0b3JSZWFkeS5lbWl0KCk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIG9uRWRpdG9yQ2hhbmdlKF86IEFQSSwgZXZlbnQ6IEJsb2NrTXV0YXRpb25FdmVudCB8IEJsb2NrTXV0YXRpb25FdmVudFtdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVhZG9ubHkoKSB8fCB0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudCA9IFtldmVudF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0NoYW5naW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXNRdWV1ZS51bnNoaWZ0KGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhcnRDaGFuZ2VzKGV2ZW50KTtcbiAgICAgICAgdGhpcy5lZGl0b3JFbXB0eS5lbWl0KHRoaXMuY2hlY2tJc0VtcHR5KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25BZGRlZENvbWJpbmVkQmxvY2soZGF0YTogQ3VpQ29tYmluZWRCbG9ja0FkZGluZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlLnBvcCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBibG9ja3NXaXRob3V0SWQgPSBkYXRhLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoe1xuICAgICAgICAgICAgYmxvY2s6IHsgLi4uYmxvY2ssIGlkOiB1bmRlZmluZWQgfSxcbiAgICAgICAgICAgIGlkOiBibG9jay5pZCFcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuYWRkZWRCbG9ja3MucHVzaCguLi5ibG9ja3NXaXRob3V0SWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25VcGRhdGVkQ29tYmluZWRCbG9jayh1cGRhdGVkQmxvY2tzOiBDdWlCbG9ja1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghdXBkYXRlZEJsb2Nrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlZEJsb2Nrcy5wdXNoKC4uLnVwZGF0ZWRCbG9ja3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25SZW1vdmVkQ29tYmluZWRCbG9jayhibG9ja0lkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFibG9ja0lkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVBbGxCbG9ja3NBZnRlclJlbW92YWwoYmxvY2tJZHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25FZGl0b3JFbmRNb3ZlKGVudHJ5OiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVxdWVzdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmhhc0VuZExlZnRab25lID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUHJlbG9hZCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb25maWcoKT8ud2l0aG91dFByZWxvYWQgJiYgIXRoaXMuaGFzRW5kTGVmdFpvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZFBhZ2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3JFZmZlY3QoKTogdm9pZCB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBcGlJZCgpIHx8IHRoaXMuY29uZmlnKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0RWRpdG9yQ2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3JDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVucXVldWVJbml0KCgpID0+IHRoaXMucnVuRWRpdG9ySW5pdCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY2FsY3VsYXRlQWxsQmxvY2tzQWZ0ZXJSZW1vdmFsKGJsb2NrSWRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1haW5pbmdSZW1vdmVkQmxvY2tJZHMgPSBuZXcgU2V0KGJsb2NrSWRzKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MgPSB0aGlzLnVwZGF0ZWRCbG9ja3MuZmlsdGVyKFxuICAgICAgICAgICAgKHVwZGF0ZWRCbG9jaykgPT4gIXJlbWFpbmluZ1JlbW92ZWRCbG9ja0lkcy5oYXModXBkYXRlZEJsb2NrLmlkID8/ICcnKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFkZGVkQmxvY2tzID0gdGhpcy5hZGRlZEJsb2Nrcy5maWx0ZXIoKGFkZGVkQmxvY2spID0+IHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nUmVtb3ZlZEJsb2NrSWRzLmhhcyhhZGRlZEJsb2NrLmlkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW1haW5pbmdSZW1vdmVkQmxvY2tJZHMuZGVsZXRlKGFkZGVkQmxvY2suaWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVtb3ZlZEJsb2Nrc0lkcy5wdXNoKC4uLnJlbWFpbmluZ1JlbW92ZWRCbG9ja0lkcy52YWx1ZXMoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvYnNlcnZlRWRpdG9yRW5kKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlZGl0b3JFbmRFbGVtZW50ID0gdGhpcy5lZGl0b3JFbmRSZWYoKS5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMubGF6eUxvYWRPYnNlcnZlciA/Pz0gdGhpcy5jcmVhdGVMYXp5TG9hZE9ic2VydmVyKCk7XG4gICAgICAgIHRoaXMubGF6eUxvYWRPYnNlcnZlci51bm9ic2VydmUoZWRpdG9yRW5kRWxlbWVudCk7XG4gICAgICAgIHRoaXMubGF6eUxvYWRPYnNlcnZlci5vYnNlcnZlKGVkaXRvckVuZEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTGF6eUxvYWRPYnNlcnZlcigpOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHRoaXMub25FZGl0b3JFbmRNb3ZlKGVudHJpZXNbZW50cmllcy5sZW5ndGggLSAxXSksIHtcbiAgICAgICAgICAgIHJvb3Q6IHRoaXMuZ2V0Vmlld3BvcnRFbGVtZW50KClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWaWV3cG9ydEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcoKT8uZWxlbWVudCA/PyB0aGlzLmVkaXRvckVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yRXZlbnRzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRvbmx5KCk7XG5cbiAgICAgICAgaWYgKHJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRFZGl0b3JFdmVudHMoZWxlbWVudCwgdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRlYXJkb3duRWRpdG9yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuXG4gICAgICAgIHRoaXMuZWRpdG9yPy5kZXN0cm95Py4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVucXVldWVJbml0KGNhbGxiYWNrOiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRDaGFpbiA9IHRoaXMuaW5pdENoYWluLmNhdGNoKCgpID0+IHVuZGVmaW5lZCkudGhlbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBydW5FZGl0b3JJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnRlYXJkb3duRWRpdG9yKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWRpdG9yID0gdGhpcy5idWlsZEVkaXRvcih0aGlzLmVkaXRvcklkKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVkaXRvci5pc1JlYWR5O1xuXG4gICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndpcmVFZGl0b3IoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRWRpdG9yKGlkOiBzdHJpbmcpOiBFZGl0b3JKUyB7XG4gICAgICAgIHJldHVybiBuZXcgRWRpdG9ySlMoe1xuICAgICAgICAgICAgLi4uZ2V0RWRpdG9yQ29uZmlnKGlkLCB0aGlzLmNvbmZpZygpKSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uRWRpdG9yQ2hhbmdlLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3aXJlRWRpdG9yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvckVsZW1lbnQgPSB0aGlzLmVkaXRvclJlZigpLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5pbml0RWRpdG9yRXZlbnRzKHRoaXMuZWRpdG9yRWxlbWVudCk7XG4gICAgICAgIHRoaXMubG9hZFBhZ2UoKTtcbiAgICAgICAgdGhpcy5zZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGlzdGVuZXJzT25DdXN0b21CbG9ja0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcyh0aGlzLmVkaXRvciwge1xuICAgICAgICAgICAgcmVtb3ZlZENhbGxiYWNrOiB0aGlzLm9uUmVtb3ZlZENvbWJpbmVkQmxvY2suYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHVwZGF0ZWRDYWxsYmFjazogdGhpcy5vblVwZGF0ZWRDb21iaW5lZEJsb2NrLmJpbmQodGhpcyksXG4gICAgICAgICAgICBhZGRlZENhbGxiYWNrOiB0aGlzLm9uQWRkZWRDb21iaW5lZEJsb2NrLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydENoYW5nZXMoZXZlbnQ6IEJsb2NrTXV0YXRpb25FdmVudFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmlzU2tpcCB8fCB0aGlzLmlzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDaGFuZ2luZyA9IHRydWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvck91dHB1dCA9IGF3YWl0IHRoaXMuZWRpdG9yLnNhdmUoKTtcblxuICAgICAgICAgICAgcmVjYWxjdWxhdGVJbmRleGVzKHRoaXMuZWRpdG9yLmJsb2Nrcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGV2ZW50LmZpbHRlcigoZGF0YSkgPT4gZGF0YS5kZXRhaWwudGFyZ2V0Lm5hbWUgIT09IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja3MgPSB0aGlzLmVkaXRvclNlcnZpY2Uuc29ydEV2ZW50c0J5VHlwZXMoZXZlbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IHsgYWRkQmxvY2tzJCwgYWRkZWRCbG9ja3MgfSA9IHRoaXMuY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChibG9ja3MsIGVkaXRvck91dHB1dCk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkZWRCbG9ja3MgPSBbXTtcblxuICAgICAgICAgICAgYWRkQmxvY2tzJFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKGJsb2NrSWRzKSA9PiB0aGlzLnNldEJsb2NrSWRzVG9NYXAoYmxvY2tJZHMsIGFkZGVkQmxvY2tzKSksXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChibG9ja3MsIGVkaXRvck91dHB1dCkpLFxuICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5jb2xsZWN0UmVtb3ZlZEJsb2Nrc1JlcXVlc3QoYmxvY2tzKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB0aGlzLnN0YXJ0TmV4dENoYW5nZSgpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy5zdGFydE5leHRDaGFuZ2UoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0TmV4dENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbmV4dEV2ZW50cyA9IHRoaXMuY2hhbmdlc1F1ZXVlLnBvcCgpO1xuXG4gICAgICAgIGlmIChuZXh0RXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q2hhbmdlcyhuZXh0RXZlbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1wdHlRdWV1ZS5uZXh0KG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSwgZWRpdG9yT3V0cHV0OiBPdXRwdXREYXRhKTogQ3VpQmxvY2tzUmVxdWVzdERhdGEge1xuICAgICAgICBjb25zdCBkZWZhdWx0QmxvY2tzV2l0aEluZGV4ID0gYmxvY2tzW0V2ZW50QWN0aW9ucy5hZGRdLm1hcCgoYWRkZWRCbG9jaykgPT5cbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5nZXRGdWxsQmxvY2tEYXRhKGFkZGVkQmxvY2ssIGVkaXRvck91dHB1dClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29tYmluZWRCbG9ja3NXaXRoSW5kZXggPSB0aGlzLmFkZGVkQmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtaWQ9XCIke2Jsb2NrLmlkfVwiXWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIoZWxlbWVudD8uZGF0YXNldFsnaW5kZXgnXSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCBpbmRleCB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhZGRlZEJsb2NrcyA9IFsuLi5kZWZhdWx0QmxvY2tzV2l0aEluZGV4LCAuLi5jb21iaW5lZEJsb2Nrc1dpdGhJbmRleF0uc29ydChcbiAgICAgICAgICAgIChmaXJzdCwgc2Vjb25kKSA9PiBmaXJzdC5pbmRleCAtIHNlY29uZC5pbmRleFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBhZGRCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RBZGRlZEJsb2Nrc1JlcXVlc3QoXG4gICAgICAgICAgICB0aGlzLmVkaXRvckFwaUlkKCksXG4gICAgICAgICAgICBhZGRlZEJsb2NrcyxcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdE9wdGlvbnMoKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRlZEJsb2NrcyxcbiAgICAgICAgICAgIGFkZEJsb2NrcyRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSwgZWRpdG9yT3V0cHV0OiBPdXRwdXREYXRhKTogT2JzZXJ2YWJsZTxDdWlCbG9ja1tdPiB7XG4gICAgICAgIGJsb2Nrc1tFdmVudEFjdGlvbnMudXBkYXRlXS5mb3JFYWNoKCh1cGRhdGVCbG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBpZCwgYmxvY2sgfSA9IHRoaXMuZWRpdG9yU2VydmljZS5nZXRGdWxsQmxvY2tEYXRhKHVwZGF0ZUJsb2NrLCBlZGl0b3JPdXRwdXQpO1xuICAgICAgICAgICAgYmxvY2suaWQgPSBpZDtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVkQmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cGRhdGVCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChcbiAgICAgICAgICAgIHRoaXMudXBkYXRlZEJsb2NrcyxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tJZHNNYXAsXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RPcHRpb25zKClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MgPSBbXTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlQmxvY2tzJDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBibG9ja3NbRXZlbnRBY3Rpb25zLnJlbW92ZV0uZm9yRWFjaCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gYmxvY2suZGV0YWlsLnRhcmdldC5pZDtcblxuICAgICAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzLnB1c2goaWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZW1vdmVCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yQXBpSWQoKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZEJsb2Nrc0lkcyxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tJZHNNYXAsXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RPcHRpb25zKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzID0gW107XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZUJsb2NrcyQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja3MocGFnZSA9IDAsIHNpemUgPSA0MCk6IE9ic2VydmFibGU8Q3VpQmxvY2tbXT4ge1xuICAgICAgICBsZXQgY29tYmluZWRCbG9jazogQ3VpTnVsbGFibGU8Q3VpQmxvY2s+O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmpUZXh0U2VydmljZS5nZXRCbG9ja3ModGhpcy5lZGl0b3JBcGlJZCgpLCBwYWdlLCBzaXplLCB0aGlzLnJlcXVlc3RPcHRpb25zKCkpLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSxcbiAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29tYmluZWRCbG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jayk7XG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlY2FsY3VsYXRlSW5kZXhlcyh0aGlzLmVkaXRvci5ibG9ja3MpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0RhdGEgPSBibG9jay5kYXRhIGFzIHsgcGFyZW50SWQ6IHN0cmluZyB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21iaW5lZEJsb2NrICYmIGJsb2NrRGF0YS5wYXJlbnRJZCEgIT09IGNvbWJpbmVkQmxvY2s/LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJsb2NrID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSB0aGlzLnNldENvbWJpbmVkQmxvY2soYmxvY2spO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tYmluZWRCbG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jayk7XG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQmxvY2soYmxvY2spO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0b0FycmF5KClcbiAgICAgICAgKSBhcyB1bmtub3duIGFzIE9ic2VydmFibGU8Q3VpQmxvY2tbXT47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCbG9jayhibG9jazogQ3VpQmxvY2spOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBibG9jay50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmxvY2tJZHNNYXAuaGFzKGJsb2NrLmlkISkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmxvY2tJZHNNYXAuc2V0KGJsb2NrLmlkISwgYmxvY2suaWQhKTtcbiAgICAgICAgdGhpcy5pbnNlcnQoYmxvY2spO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrOiBDdWlCbG9jayk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5wdXNoKHRydWUpO1xuICAgICAgICBjb25zdCBibG9jayA9IHRoaXMuZWRpdG9yLmJsb2Nrcy5nZXRCeUlkKGNvbWJpbmVkQmxvY2suaWQgfHwgJycpO1xuXG4gICAgICAgIGlmIChibG9jaykge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuYmxvY2tzLnVwZGF0ZShibG9jay5pZCwgY29tYmluZWRCbG9jay5kYXRhIGFzIEN1aUNvbWJpbmVkUGFydEJsb2NrKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnNlcnQoY29tYmluZWRCbG9jayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnNlcnQoYmxvY2s6IEN1aUJsb2NrKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hlY2tGaXJzdChibG9jayk7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrRmlyc3QoYmxvY2s6IEN1aUJsb2NrKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLmlzU2tpcCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5ibG9ja3MuaW5zZXJ0KGJsb2NrLnR5cGUsIGJsb2NrLmRhdGEsIHt9LCB0aGlzLmluZGV4LCBmYWxzZSwgZmFsc2UsIGJsb2NrLmlkKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMubGF6eUxvYWRWZXJzaW9uO1xuXG4gICAgICAgIC8vIFRPRE86INC10YHRgtGMINCy0LDRgNC40Log0YfRgtC+INGH0YLQviDRgtC+INC/0L7QudC00LXRgiDQvdC1INGC0LDQulxuICAgICAgICB0aGlzLmVkaXRvci5ibG9ja3MucmVuZGVyKHsgYmxvY2tzOiBbYmxvY2tdIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1NraXAgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoRmlyc3RSZW5kZXIodmVyc2lvbik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzRmlyc3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENvbWJpbmVkQmxvY2soYmxvY2s6IEN1aUJsb2NrKTogQ3VpQmxvY2sge1xuICAgICAgICBjb25zdCBjb21iaW5lZEJsb2NrRGF0YSA9IGJsb2NrLmRhdGEgYXMgeyBwYXJlbnRJZDogc3RyaW5nIH07XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuY29tYmluZWRCbG9ja3MuZ2V0KGNvbWJpbmVkQmxvY2tEYXRhLnBhcmVudElkKTtcblxuICAgICAgICBpZiAocGFyZW50ICYmIHRoaXMuYmxvY2tJZHNNYXAuaGFzKGJsb2NrLmlkISkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsb2NrSWRzTWFwLnNldChibG9jay5pZCEsIGJsb2NrLmlkISk7XG5cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50RGF0YSA9IHBhcmVudC5kYXRhIGFzIHsgdGV4dEJsb2NrczogQ3VpQmxvY2tbXSB9O1xuICAgICAgICAgICAgcGFyZW50RGF0YS50ZXh0QmxvY2tzLnB1c2goYmxvY2spO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50T2JqZWN0OiBDdWlCbG9jayA9IHtcbiAgICAgICAgICAgIGlkOiBjb21iaW5lZEJsb2NrRGF0YS5wYXJlbnRJZCxcbiAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBpZDogY29tYmluZWRCbG9ja0RhdGEucGFyZW50SWQsXG4gICAgICAgICAgICAgICAgdGV4dEJsb2NrczogW2Jsb2NrXVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY29tYmluZWRCbG9ja3Muc2V0KGNvbWJpbmVkQmxvY2tEYXRhLnBhcmVudElkLCBwYXJlbnRPYmplY3QpO1xuXG4gICAgICAgIHJldHVybiBwYXJlbnRPYmplY3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRCbG9ja0lkc1RvTWFwKGJsb2NrSWRzOiBzdHJpbmdbXSwgYWRkZWRCbG9ja3M6IEN1aUZ1bGxCbG9ja0RhdGFbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIWJsb2NrSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50TG9jYWxJZFdpdGhNYWluSWQoYmxvY2tJZHMsIGFkZGVkQmxvY2tzKTtcbiAgICAgICAgYWRkZWRCbG9ja3MuZm9yRWFjaCgoYmxvY2tEYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ibG9ja0lkc01hcC5zZXQoYmxvY2tEYXRhLmlkLCBibG9ja0lkc1tpbmRleF0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUVsZW1lbnRMb2NhbElkV2l0aE1haW5JZChibG9ja0lkczogc3RyaW5nW10sIGJsb2NrczogQ3VpRnVsbEJsb2NrRGF0YVtdKTogdm9pZCB7XG4gICAgICAgIGJsb2Nrcy5mb3JFYWNoKChibG9jaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYFtkYXRhLWlkPVwiJHtibG9jay5pZH1cIl1gKTtcblxuICAgICAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbGVtZW50LmRhdGFzZXRbJ2lkJ10gPSBibG9ja0lkc1tpbmRleF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3RhcnRCbG9jaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tJZHNNYXAuc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JFbXB0eS5lbWl0KHRoaXMuY2hlY2tJc0VtcHR5KCkpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5sYXp5TG9hZFZlcnNpb247XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkb25seSgpKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5yZW5kZXIoeyBibG9ja3M6IFtdIH0pLnRoZW4oKCkgPT4gdGhpcy5maW5pc2hGaXJzdFJlbmRlcih2ZXJzaW9uKSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRTdGFydEJsb2NrKFxuICAgICAgICAgICAgdGhpcy5lZGl0b3JBcGlJZCgpLFxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0T3B0aW9ucygpLFxuICAgICAgICAgICAgKGJsb2NrOiBDdWlCbG9jazxDdWlDb21iaW5lZEJsb2NrVG9vbERhdGE+LCBpZDogc3RyaW5nKSA9PiB0aGlzLnJlbmRlclN0YXJ0QmxvY2soYmxvY2ssIGlkLCB2ZXJzaW9uKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVuZGVyU3RhcnRCbG9jayhcbiAgICAgICAgYmxvY2s6IEN1aUJsb2NrPEN1aUNvbWJpbmVkQmxvY2tUb29sRGF0YT4sXG4gICAgICAgIGlkOiBzdHJpbmcsXG4gICAgICAgIHZlcnNpb246IG51bWJlclxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCB8fCB2ZXJzaW9uICE9PSB0aGlzLmxhenlMb2FkVmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ibG9ja0lkc01hcC5zZXQoaWQsIGlkKTtcbiAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UucHVzaCh0cnVlKTtcbiAgICAgICAgdGhpcy5lZGl0b3IucmVuZGVyKHsgYmxvY2tzOiBbYmxvY2tdIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maW5pc2hGaXJzdFJlbmRlcih2ZXJzaW9uKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoKTtcbiAgICAgICAgICAgIHJlY2FsY3VsYXRlSW5kZXhlcyh0aGlzLmVkaXRvci5ibG9ja3MpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnKCk/LmF1dG9mb2N1cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lZGl0b3IuY2FyZXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYmxvY2tzQ291bnQgPSB0aGlzLmVkaXRvci5ibG9ja3M/LmdldEJsb2Nrc0NvdW50KCkgPz8gMDtcblxuICAgICAgICBpZiAoIWJsb2Nrc0NvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFJFREFDVE9SX1NFTEVDVE9SID0gJy5jb2RleC1lZGl0b3JfX3JlZGFjdG9yJztcbiAgICAgICAgY29uc3QgcmVkYWN0b3JUZXh0Q29udGVudCA9IHRoaXMuZWRpdG9yRWxlbWVudC5xdWVyeVNlbGVjdG9yKFJFREFDVE9SX1NFTEVDVE9SKT8udGV4dENvbnRlbnQ/LnRyaW0oKTtcblxuICAgICAgICByZXR1cm4gIXJlZGFjdG9yVGV4dENvbnRlbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzZXRMYXp5TG9hZCgpO1xuICAgICAgICB0aGlzLmlzRWRpdG9yUmVhZHkuc2V0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UgPSBbXTtcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTa2lwID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYmxvY2tJZHNNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgICB0aGlzLmNvbWJpbmVkQmxvY2tzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5hZGRlZEJsb2NrcyA9IFtdO1xuICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MgPSBbXTtcbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzID0gW107XG4gICAgICAgIHRoaXMuY2hhbmdlc1F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRMYXp5TG9hZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sYXp5TG9hZFZlcnNpb24rKztcbiAgICAgICAgdGhpcy5sYXp5TG9hZE9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICAgIHRoaXMubGF6eUxvYWRPYnNlcnZlciA9IG51bGw7XG4gICAgICAgIHRoaXMubGF6eUxvYWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubGF6eUxvYWRTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLmlzUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQcmVsb2FkRmluaXNoZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNFbmRMZWZ0Wm9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhZ2UgPSAwO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICAjZWRpdG9yXG4gICAgZGF0YS1lZGl0b3JcbiAgICBbY2xhc3MuX3JlYWRvbmx5XT1cImNvbmZpZygpLnJlYWRPbmx5XCJcbiAgICBbY2xhc3MuX2xvYWRpbmddPVwiIWlzRWRpdG9yUmVhZHkoKVwiXG4+XG4gICAgPGRpdiBbaWRdPVwiZWRpdG9ySWRcIj48L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAgICNlZGl0b3JFbmRcbiAgICAgICAgY2xhc3M9XCJlZGl0b3ItZW5kXCJcbiAgICA+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
526
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTVDLE9BQU8sUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRyxPQUFPLEVBQUUscUJBQXFCLEVBQVksa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBVzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBaUJqRSxNQUFNLE9BQU8sa0JBQWtCO0lB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eUNhLGtCQUFrQjtrQkFmOUIsU0FBUzsrQkFDSSxZQUFZLGNBQ1YsSUFBSSxtQkFHQyx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNQLGdCQUFnQjt3QkFDaEI7NEJBQ0ksT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUNiLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRTt5QkFDcEc7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgRGVzdHJveVJlZixcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgdmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHR5cGUgeyBDdWlOdWxsYWJsZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgeyBDdWlJZFNlcnZpY2UgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuaW1wb3J0IHR5cGUgeyBBUEksIEJsb2NrTXV0YXRpb25FdmVudCwgT3V0cHV0RGF0YSB9IGZyb20gJ0BlZGl0b3Jqcy9lZGl0b3Jqcyc7XG5pbXBvcnQgRWRpdG9ySlMgZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcbmltcG9ydCB0eXBlIHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIEVNUFRZLCBmaW5hbGl6ZSwgbWFwLCBTdWJqZWN0LCB0YXAsIHRpbWVyLCB0b0FycmF5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDVUlfSlRFWFRfQVBJX1NFUlZJQ0UsIEN1aUJsb2NrLCBDdWlKVGV4dEFwaVNlcnZpY2UgfSBmcm9tICdAY3VieS11aS9hcGknO1xuXG5pbXBvcnQgeyBnZXRFZGl0b3JDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCwgREVGQVVMVF9DT05GSUcgfSBmcm9tICcuL2NvbnN0YW50cy9lZGl0b3IuY29uc3RhbnRzJztcbmltcG9ydCB7IHNldEVkaXRvckV2ZW50cyB9IGZyb20gJy4vZXZlbnRzL3NldC1lZGl0b3ItZXZlbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgICBDdWlCbG9ja0RhdGEsXG4gICAgQ3VpQmxvY2tzUmVxdWVzdERhdGEsXG4gICAgQ3VpQ29tYmluZWRCbG9ja0FkZGluZ0V2ZW50LFxuICAgIEN1aUNvbWJpbmVkQmxvY2tUb29sRGF0YSxcbiAgICBDdWlDb21iaW5lZFBhcnRCbG9jayxcbiAgICBDdWlFZGl0b3JDb25maWcsXG4gICAgQ3VpRXZlbnRBY3Rpb25EYXRhLFxuICAgIEN1aUZ1bGxCbG9ja0RhdGFcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEN1aUVkaXRvclNlcnZpY2UsIEV2ZW50QWN0aW9ucyB9IGZyb20gJy4vc2VydmljZXMnO1xuaW1wb3J0IHsgcmVjYWxjdWxhdGVJbmRleGVzIH0gZnJvbSAnLi91dGlscy9yZWNhbGN1bGF0ZS1pbmRleGVzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjdWktZWRpdG9yJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2VkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBDdWlFZGl0b3JTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBDVUlfSlRFWFRfQVBJX1NFUlZJQ0UsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PlxuICAgICAgICAgICAgICAgIGluamVjdChDVUlfSlRFWFRfQVBJX1NFUlZJQ0UsIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlIH0pID8/IG5ldyBDdWlKVGV4dEFwaVNlcnZpY2UoKVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBDdWlFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1aUlkU2VydmljZSA9IGluamVjdChDdWlJZFNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWRpdG9yU2VydmljZSA9IGluamVjdChDdWlFZGl0b3JTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGpUZXh0U2VydmljZSA9IGluamVjdChDVUlfSlRFWFRfQVBJX1NFUlZJQ0UpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBQT09MSU5HX0RFTEFZID0gMTAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgUkVUUllfREVMQVkgPSAzMDAwO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbXB0eVF1ZXVlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByaXZhdGUgaW5pdENoYWluOiBQcm9taXNlPHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgcHJpdmF0ZSBmaXJzdFJlbmRlcjogUHJvbWlzZTx2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHByaXZhdGUgbGF6eUxvYWRPYnNlcnZlcjogQ3VpTnVsbGFibGU8SW50ZXJzZWN0aW9uT2JzZXJ2ZXI+ID0gbnVsbDtcbiAgICBwcml2YXRlIGxhenlMb2FkU3Vic2NyaXB0aW9uOiBDdWlOdWxsYWJsZTxTdWJzY3JpcHRpb24+ID0gbnVsbDtcbiAgICBwcml2YXRlIGlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZTogYm9vbGVhbltdID0gW107XG4gICAgcHJpdmF0ZSBpc0ZpcnN0ID0gdHJ1ZTtcbiAgICBwcml2YXRlIGlzQ2hhbmdpbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzU2tpcCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc1ByZWxvYWRGaW5pc2hlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaGFzRW5kTGVmdFpvbmUgPSBmYWxzZTtcbiAgICAvLyDQndGD0LbQtdC9INC00LvRjyDRgdC+0L7RgtC90L7RiNC10L3QuNGPINC70L7QutCw0LvRjNC90L7Qs9C+IElEINC4INC+0YHQvdC+0LLQvdC+0LPQviBJRCDQv9C+0YHQu9C1INGB0L7Qt9C00LDQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsFxuICAgIHByaXZhdGUgYmxvY2tJZHNNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIHByaXZhdGUgY29tYmluZWRCbG9ja3MgPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBpbmRleCA9IDA7XG4gICAgcHJpdmF0ZSBwYWdlID0gMDtcbiAgICBwcml2YXRlIGxhenlMb2FkVmVyc2lvbiA9IDA7XG4gICAgcHJpdmF0ZSBhZGRlZEJsb2NrczogQ3VpQmxvY2tEYXRhW10gPSBbXTtcbiAgICBwcml2YXRlIHVwZGF0ZWRCbG9ja3M6IEN1aUJsb2NrW10gPSBbXTtcbiAgICBwcml2YXRlIHJlbW92ZWRCbG9ja3NJZHM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBjaGFuZ2VzUXVldWU6IEJsb2NrTXV0YXRpb25FdmVudFtdW10gPSBbXTtcbiAgICBwcml2YXRlIGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNSZWFkb25seSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCk/LnJlYWRPbmx5KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb25maWcoKT8ucmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlZGl0b3JFbmRSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdlZGl0b3JFbmQnKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0VkaXRvclJlYWR5ID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZWRpdG9ySWQgPSB0aGlzLmN1aUlkU2VydmljZS5nZW5lcmF0ZSgpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdlZGl0b3InKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBlZGl0b3JBcGlJZCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQ8Q3VpRWRpdG9yQ29uZmlnPihERUZBVUxUX0NPTkZJRyk7XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVlc3RTaXplID0gaW5wdXQ8bnVtYmVyPig0MCk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgZWRpdG9yRW1wdHkgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWRpdG9yUmVhZHkgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAgIHB1YmxpYyBlZGl0b3IhOiBFZGl0b3JKUztcbiAgICBwdWJsaWMgZWRpdG9yRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW5pdEVkaXRvckVmZmVjdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5lbnF1ZXVlSW5pdCgoKSA9PiB0aGlzLnRlYXJkb3duRWRpdG9yKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmxhenlMb2FkVmVyc2lvbjtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucmVxdWVzdFNpemUoKTtcbiAgICAgICAgbGV0IGJsb2Nrc0NvdW50ID0gMDtcbiAgICAgICAgbGV0IGlzRmFpbGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5sYXp5TG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMuZ2V0QmxvY2tzKHRoaXMucGFnZSwgc2l6ZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoYmxvY2tzKSA9PiAoYmxvY2tzQ291bnQgPSBibG9ja3MubGVuZ3RoKSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlzRmFpbGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5maW5pc2hQYWdlTG9hZChibG9ja3NDb3VudCwgc2l6ZSwgdmVyc2lvbiwgaXNGYWlsZWQpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluaXNoUGFnZUxvYWQoYmxvY2tzQ291bnQ6IG51bWJlciwgc2l6ZTogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIGlzRmFpbGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCB8fCB2ZXJzaW9uICE9PSB0aGlzLmxhenlMb2FkVmVyc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRmFpbGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5UGFnZUxvYWQodmVyc2lvbik7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGFnZSsrO1xuICAgICAgICB0aGlzLnNjaGVkdWxlTmV4dFBhZ2UoYmxvY2tzQ291bnQsIHNpemUsIHZlcnNpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmV0cnlQYWdlTG9hZCh2ZXJzaW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1JlcXVlc3RlZCA9IHRydWU7XG5cbiAgICAgICAgdGltZXIodGhpcy5SRVRSWV9ERUxBWSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3kpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQgfHwgdmVyc2lvbiAhPT0gdGhpcy5sYXp5TG9hZFZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFBhZ2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2NoZWR1bGVOZXh0UGFnZShibG9ja3NDb3VudDogbnVtYmVyLCBzaXplOiBudW1iZXIsIHZlcnNpb246IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoYmxvY2tzQ291bnQgPCBzaXplKSB7XG4gICAgICAgICAgICB0aGlzLmxhenlMb2FkT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUHJlbG9hZCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lcih0aGlzLlBPT0xJTkdfREVMQVkpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb250aW51ZUxhenlMb2FkKHZlcnNpb24pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnRpbnVlTGF6eUxvYWQodmVyc2lvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkIHx8IHZlcnNpb24gIT09IHRoaXMubGF6eUxvYWRWZXJzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb25maWcoKT8ud2l0aG91dFByZWxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUHJlbG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vYnNlcnZlRWRpdG9yRW5kKCk7XG4gICAgfVxuICAgIHByaXZhdGUgZmluaXNoUHJlbG9hZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQcmVsb2FkRmluaXNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNQcmVsb2FkRmluaXNoZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldFN0YXJ0QmxvY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmlzaEZpcnN0UmVuZGVyKHZlcnNpb246IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCB8fCB2ZXJzaW9uICE9PSB0aGlzLmxhenlMb2FkVmVyc2lvbiB8fCB0aGlzLmlzRWRpdG9yUmVhZHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0VkaXRvclJlYWR5LnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5lZGl0b3JSZWFkeS5lbWl0KCk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIG9uRWRpdG9yQ2hhbmdlKF86IEFQSSwgZXZlbnQ6IEJsb2NrTXV0YXRpb25FdmVudCB8IEJsb2NrTXV0YXRpb25FdmVudFtdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVhZG9ubHkoKSB8fCB0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudCA9IFtldmVudF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0NoYW5naW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXNRdWV1ZS51bnNoaWZ0KGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhcnRDaGFuZ2VzKGV2ZW50KTtcbiAgICAgICAgdGhpcy5lZGl0b3JFbXB0eS5lbWl0KHRoaXMuY2hlY2tJc0VtcHR5KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25BZGRlZENvbWJpbmVkQmxvY2soZGF0YTogQ3VpQ29tYmluZWRCbG9ja0FkZGluZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlLnBvcCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBibG9ja3NXaXRob3V0SWQgPSBkYXRhLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoe1xuICAgICAgICAgICAgYmxvY2s6IHsgLi4uYmxvY2ssIGlkOiB1bmRlZmluZWQgfSxcbiAgICAgICAgICAgIGlkOiBibG9jay5pZCFcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuYWRkZWRCbG9ja3MucHVzaCguLi5ibG9ja3NXaXRob3V0SWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25VcGRhdGVkQ29tYmluZWRCbG9jayh1cGRhdGVkQmxvY2tzOiBDdWlCbG9ja1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghdXBkYXRlZEJsb2Nrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlZEJsb2Nrcy5wdXNoKC4uLnVwZGF0ZWRCbG9ja3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25SZW1vdmVkQ29tYmluZWRCbG9jayhibG9ja0lkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFibG9ja0lkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVBbGxCbG9ja3NBZnRlclJlbW92YWwoYmxvY2tJZHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25FZGl0b3JFbmRNb3ZlKGVudHJ5OiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVxdWVzdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmhhc0VuZExlZnRab25lID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUHJlbG9hZCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb25maWcoKT8ud2l0aG91dFByZWxvYWQgJiYgIXRoaXMuaGFzRW5kTGVmdFpvbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZFBhZ2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3JFZmZlY3QoKTogdm9pZCB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBcGlJZCgpIHx8IHRoaXMuY29uZmlnKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0RWRpdG9yQ2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3JDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVucXVldWVJbml0KCgpID0+IHRoaXMucnVuRWRpdG9ySW5pdCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY2FsY3VsYXRlQWxsQmxvY2tzQWZ0ZXJSZW1vdmFsKGJsb2NrSWRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1haW5pbmdSZW1vdmVkQmxvY2tJZHMgPSBuZXcgU2V0KGJsb2NrSWRzKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MgPSB0aGlzLnVwZGF0ZWRCbG9ja3MuZmlsdGVyKFxuICAgICAgICAgICAgKHVwZGF0ZWRCbG9jaykgPT4gIXJlbWFpbmluZ1JlbW92ZWRCbG9ja0lkcy5oYXModXBkYXRlZEJsb2NrLmlkID8/ICcnKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFkZGVkQmxvY2tzID0gdGhpcy5hZGRlZEJsb2Nrcy5maWx0ZXIoKGFkZGVkQmxvY2spID0+IHtcbiAgICAgICAgICAgIGlmICghcmVtYWluaW5nUmVtb3ZlZEJsb2NrSWRzLmhhcyhhZGRlZEJsb2NrLmlkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW1haW5pbmdSZW1vdmVkQmxvY2tJZHMuZGVsZXRlKGFkZGVkQmxvY2suaWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVtb3ZlZEJsb2Nrc0lkcy5wdXNoKC4uLnJlbWFpbmluZ1JlbW92ZWRCbG9ja0lkcy52YWx1ZXMoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvYnNlcnZlRWRpdG9yRW5kKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlZGl0b3JFbmRFbGVtZW50ID0gdGhpcy5lZGl0b3JFbmRSZWYoKS5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMubGF6eUxvYWRPYnNlcnZlciA/Pz0gdGhpcy5jcmVhdGVMYXp5TG9hZE9ic2VydmVyKCk7XG4gICAgICAgIHRoaXMubGF6eUxvYWRPYnNlcnZlci51bm9ic2VydmUoZWRpdG9yRW5kRWxlbWVudCk7XG4gICAgICAgIHRoaXMubGF6eUxvYWRPYnNlcnZlci5vYnNlcnZlKGVkaXRvckVuZEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTGF6eUxvYWRPYnNlcnZlcigpOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHRoaXMub25FZGl0b3JFbmRNb3ZlKGVudHJpZXNbZW50cmllcy5sZW5ndGggLSAxXSksIHtcbiAgICAgICAgICAgIHJvb3Q6IHRoaXMuZ2V0Vmlld3BvcnRFbGVtZW50KClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWaWV3cG9ydEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcoKT8uZWxlbWVudCA/PyB0aGlzLmVkaXRvckVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yRXZlbnRzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRvbmx5KCk7XG5cbiAgICAgICAgaWYgKHJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRFZGl0b3JFdmVudHMoZWxlbWVudCwgdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRlYXJkb3duRWRpdG9yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuXG4gICAgICAgIHRoaXMuZWRpdG9yPy5kZXN0cm95Py4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVucXVldWVJbml0KGNhbGxiYWNrOiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRDaGFpbiA9IHRoaXMuaW5pdENoYWluLmNhdGNoKCgpID0+IHVuZGVmaW5lZCkudGhlbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBydW5FZGl0b3JJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnRlYXJkb3duRWRpdG9yKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWRpdG9yID0gdGhpcy5idWlsZEVkaXRvcih0aGlzLmVkaXRvcklkKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmVkaXRvci5pc1JlYWR5O1xuXG4gICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndpcmVFZGl0b3IoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRWRpdG9yKGlkOiBzdHJpbmcpOiBFZGl0b3JKUyB7XG4gICAgICAgIHJldHVybiBuZXcgRWRpdG9ySlMoe1xuICAgICAgICAgICAgLi4uZ2V0RWRpdG9yQ29uZmlnKGlkLCB0aGlzLmNvbmZpZygpKSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uRWRpdG9yQ2hhbmdlLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3aXJlRWRpdG9yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvckVsZW1lbnQgPSB0aGlzLmVkaXRvclJlZigpLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5pbml0RWRpdG9yRXZlbnRzKHRoaXMuZWRpdG9yRWxlbWVudCk7XG4gICAgICAgIHRoaXMubG9hZFBhZ2UoKTtcbiAgICAgICAgdGhpcy5zZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGlzdGVuZXJzT25DdXN0b21CbG9ja0NoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcyh0aGlzLmVkaXRvciwge1xuICAgICAgICAgICAgcmVtb3ZlZENhbGxiYWNrOiB0aGlzLm9uUmVtb3ZlZENvbWJpbmVkQmxvY2suYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHVwZGF0ZWRDYWxsYmFjazogdGhpcy5vblVwZGF0ZWRDb21iaW5lZEJsb2NrLmJpbmQodGhpcyksXG4gICAgICAgICAgICBhZGRlZENhbGxiYWNrOiB0aGlzLm9uQWRkZWRDb21iaW5lZEJsb2NrLmJpbmQodGhpcylcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydENoYW5nZXMoZXZlbnQ6IEJsb2NrTXV0YXRpb25FdmVudFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmlzU2tpcCB8fCB0aGlzLmlzQ2hhbmdpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDaGFuZ2luZyA9IHRydWU7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvck91dHB1dCA9IGF3YWl0IHRoaXMuZWRpdG9yLnNhdmUoKTtcblxuICAgICAgICAgICAgcmVjYWxjdWxhdGVJbmRleGVzKHRoaXMuZWRpdG9yLmJsb2Nrcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IGV2ZW50LmZpbHRlcigoZGF0YSkgPT4gZGF0YS5kZXRhaWwudGFyZ2V0Lm5hbWUgIT09IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja3MgPSB0aGlzLmVkaXRvclNlcnZpY2Uuc29ydEV2ZW50c0J5VHlwZXMoZXZlbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IHsgYWRkQmxvY2tzJCwgYWRkZWRCbG9ja3MgfSA9IHRoaXMuY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChibG9ja3MsIGVkaXRvck91dHB1dCk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkZWRCbG9ja3MgPSBbXTtcblxuICAgICAgICAgICAgYWRkQmxvY2tzJFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKGJsb2NrSWRzKSA9PiB0aGlzLnNldEJsb2NrSWRzVG9NYXAoYmxvY2tJZHMsIGFkZGVkQmxvY2tzKSksXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChibG9ja3MsIGVkaXRvck91dHB1dCkpLFxuICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5jb2xsZWN0UmVtb3ZlZEJsb2Nrc1JlcXVlc3QoYmxvY2tzKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB0aGlzLnN0YXJ0TmV4dENoYW5nZSgpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy5zdGFydE5leHRDaGFuZ2UoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0TmV4dENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbmV4dEV2ZW50cyA9IHRoaXMuY2hhbmdlc1F1ZXVlLnBvcCgpO1xuXG4gICAgICAgIGlmIChuZXh0RXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0Q2hhbmdlcyhuZXh0RXZlbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1wdHlRdWV1ZS5uZXh0KG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSwgZWRpdG9yT3V0cHV0OiBPdXRwdXREYXRhKTogQ3VpQmxvY2tzUmVxdWVzdERhdGEge1xuICAgICAgICBjb25zdCBkZWZhdWx0QmxvY2tzV2l0aEluZGV4ID0gYmxvY2tzW0V2ZW50QWN0aW9ucy5hZGRdLm1hcCgoYWRkZWRCbG9jaykgPT5cbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5nZXRGdWxsQmxvY2tEYXRhKGFkZGVkQmxvY2ssIGVkaXRvck91dHB1dClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29tYmluZWRCbG9ja3NXaXRoSW5kZXggPSB0aGlzLmFkZGVkQmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtaWQ9XCIke2Jsb2NrLmlkfVwiXWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBOdW1iZXIoZWxlbWVudD8uZGF0YXNldFsnaW5kZXgnXSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7IC4uLmJsb2NrLCBpbmRleCB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhZGRlZEJsb2NrcyA9IFsuLi5kZWZhdWx0QmxvY2tzV2l0aEluZGV4LCAuLi5jb21iaW5lZEJsb2Nrc1dpdGhJbmRleF0uc29ydChcbiAgICAgICAgICAgIChmaXJzdCwgc2Vjb25kKSA9PiBmaXJzdC5pbmRleCAtIHNlY29uZC5pbmRleFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBhZGRCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RBZGRlZEJsb2Nrc1JlcXVlc3QoXG4gICAgICAgICAgICB0aGlzLmVkaXRvckFwaUlkKCksXG4gICAgICAgICAgICBhZGRlZEJsb2NrcyxcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdE9wdGlvbnMoKVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRlZEJsb2NrcyxcbiAgICAgICAgICAgIGFkZEJsb2NrcyRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSwgZWRpdG9yT3V0cHV0OiBPdXRwdXREYXRhKTogT2JzZXJ2YWJsZTxDdWlCbG9ja1tdPiB7XG4gICAgICAgIGJsb2Nrc1tFdmVudEFjdGlvbnMudXBkYXRlXS5mb3JFYWNoKCh1cGRhdGVCbG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBpZCwgYmxvY2sgfSA9IHRoaXMuZWRpdG9yU2VydmljZS5nZXRGdWxsQmxvY2tEYXRhKHVwZGF0ZUJsb2NrLCBlZGl0b3JPdXRwdXQpO1xuICAgICAgICAgICAgYmxvY2suaWQgPSBpZDtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVkQmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cGRhdGVCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChcbiAgICAgICAgICAgIHRoaXMudXBkYXRlZEJsb2NrcyxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tJZHNNYXAsXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RPcHRpb25zKClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MgPSBbXTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlQmxvY2tzJDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBibG9ja3NbRXZlbnRBY3Rpb25zLnJlbW92ZV0uZm9yRWFjaCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gYmxvY2suZGV0YWlsLnRhcmdldC5pZDtcblxuICAgICAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzLnB1c2goaWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZW1vdmVCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yQXBpSWQoKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZEJsb2Nrc0lkcyxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tJZHNNYXAsXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RPcHRpb25zKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzID0gW107XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZUJsb2NrcyQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja3MocGFnZSA9IDAsIHNpemUgPSA0MCk6IE9ic2VydmFibGU8Q3VpQmxvY2tbXT4ge1xuICAgICAgICBsZXQgY29tYmluZWRCbG9jazogQ3VpTnVsbGFibGU8Q3VpQmxvY2s+O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmpUZXh0U2VydmljZS5nZXRCbG9ja3ModGhpcy5lZGl0b3JBcGlJZCgpLCBwYWdlLCBzaXplLCB0aGlzLnJlcXVlc3RPcHRpb25zKCkpLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSxcbiAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29tYmluZWRCbG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jayk7XG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlY2FsY3VsYXRlSW5kZXhlcyh0aGlzLmVkaXRvci5ibG9ja3MpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0RhdGEgPSBibG9jay5kYXRhIGFzIHsgcGFyZW50SWQ6IHN0cmluZyB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21iaW5lZEJsb2NrICYmIGJsb2NrRGF0YS5wYXJlbnRJZCEgIT09IGNvbWJpbmVkQmxvY2s/LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJsb2NrID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSB0aGlzLnNldENvbWJpbmVkQmxvY2soYmxvY2spO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tYmluZWRCbG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jayk7XG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQmxvY2soYmxvY2spO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0b0FycmF5KClcbiAgICAgICAgKSBhcyB1bmtub3duIGFzIE9ic2VydmFibGU8Q3VpQmxvY2tbXT47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCbG9jayhibG9jazogQ3VpQmxvY2spOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBibG9jay50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYmxvY2tJZHNNYXAuaGFzKGJsb2NrLmlkISkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmxvY2tJZHNNYXAuc2V0KGJsb2NrLmlkISwgYmxvY2suaWQhKTtcbiAgICAgICAgdGhpcy5pbnNlcnQoYmxvY2spO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrOiBDdWlCbG9jayk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5wdXNoKHRydWUpO1xuICAgICAgICBjb25zdCBibG9jayA9IHRoaXMuZWRpdG9yLmJsb2Nrcy5nZXRCeUlkKGNvbWJpbmVkQmxvY2suaWQgfHwgJycpO1xuXG4gICAgICAgIGlmIChibG9jaykge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuYmxvY2tzLnVwZGF0ZShibG9jay5pZCwgY29tYmluZWRCbG9jay5kYXRhIGFzIEN1aUNvbWJpbmVkUGFydEJsb2NrKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnNlcnQoY29tYmluZWRCbG9jayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnNlcnQoYmxvY2s6IEN1aUJsb2NrKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hlY2tGaXJzdChibG9jayk7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrRmlyc3QoYmxvY2s6IEN1aUJsb2NrKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLmlzU2tpcCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5ibG9ja3MuaW5zZXJ0KGJsb2NrLnR5cGUsIGJsb2NrLmRhdGEsIHt9LCB0aGlzLmluZGV4LCBmYWxzZSwgZmFsc2UsIGJsb2NrLmlkKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMubGF6eUxvYWRWZXJzaW9uO1xuXG4gICAgICAgIC8vIFRPRE86INC10YHRgtGMINCy0LDRgNC40Log0YfRgtC+INGH0YLQviDRgtC+INC/0L7QudC00LXRgiDQvdC1INGC0LDQulxuICAgICAgICB0aGlzLmZpcnN0UmVuZGVyID0gdGhpcy5lZGl0b3IuYmxvY2tzLnJlbmRlcih7IGJsb2NrczogW2Jsb2NrXSB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaEZpcnN0UmVuZGVyKHZlcnNpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDb21iaW5lZEJsb2NrKGJsb2NrOiBDdWlCbG9jayk6IEN1aUJsb2NrIHtcbiAgICAgICAgY29uc3QgY29tYmluZWRCbG9ja0RhdGEgPSBibG9jay5kYXRhIGFzIHsgcGFyZW50SWQ6IHN0cmluZyB9O1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmNvbWJpbmVkQmxvY2tzLmdldChjb21iaW5lZEJsb2NrRGF0YS5wYXJlbnRJZCk7XG5cbiAgICAgICAgaWYgKHBhcmVudCAmJiB0aGlzLmJsb2NrSWRzTWFwLmhhcyhibG9jay5pZCEpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ibG9ja0lkc01hcC5zZXQoYmxvY2suaWQhLCBibG9jay5pZCEpO1xuXG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudERhdGEgPSBwYXJlbnQuZGF0YSBhcyB7IHRleHRCbG9ja3M6IEN1aUJsb2NrW10gfTtcbiAgICAgICAgICAgIHBhcmVudERhdGEudGV4dEJsb2Nrcy5wdXNoKGJsb2NrKTtcblxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudE9iamVjdDogQ3VpQmxvY2sgPSB7XG4gICAgICAgICAgICBpZDogY29tYmluZWRCbG9ja0RhdGEucGFyZW50SWQsXG4gICAgICAgICAgICB0eXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgaWQ6IGNvbWJpbmVkQmxvY2tEYXRhLnBhcmVudElkLFxuICAgICAgICAgICAgICAgIHRleHRCbG9ja3M6IFtibG9ja11cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmNvbWJpbmVkQmxvY2tzLnNldChjb21iaW5lZEJsb2NrRGF0YS5wYXJlbnRJZCwgcGFyZW50T2JqZWN0KTtcblxuICAgICAgICByZXR1cm4gcGFyZW50T2JqZWN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0QmxvY2tJZHNUb01hcChibG9ja0lkczogc3RyaW5nW10sIGFkZGVkQmxvY2tzOiBDdWlGdWxsQmxvY2tEYXRhW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFibG9ja0lkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudExvY2FsSWRXaXRoTWFpbklkKGJsb2NrSWRzLCBhZGRlZEJsb2Nrcyk7XG4gICAgICAgIGFkZGVkQmxvY2tzLmZvckVhY2goKGJsb2NrRGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmxvY2tJZHNNYXAuc2V0KGJsb2NrRGF0YS5pZCwgYmxvY2tJZHNbaW5kZXhdKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVFbGVtZW50TG9jYWxJZFdpdGhNYWluSWQoYmxvY2tJZHM6IHN0cmluZ1tdLCBibG9ja3M6IEN1aUZ1bGxCbG9ja0RhdGFbXSk6IHZvaWQge1xuICAgICAgICBibG9ja3MuZm9yRWFjaCgoYmxvY2ssIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lZGl0b3JFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGBbZGF0YS1pZD1cIiR7YmxvY2suaWR9XCJdYCk7XG5cbiAgICAgICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWxlbWVudC5kYXRhc2V0WydpZCddID0gYmxvY2tJZHNbaW5kZXhdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFN0YXJ0QmxvY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmJsb2NrSWRzTWFwLnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoTG9hZGVkRG9jdW1lbnQoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMubGF6eUxvYWRWZXJzaW9uO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IucmVuZGVyKHsgYmxvY2tzOiBbXSB9KS50aGVuKCgpID0+IHRoaXMuZmluaXNoRmlyc3RSZW5kZXIodmVyc2lvbikpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0U3RhcnRCbG9jayhcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yQXBpSWQoKSxcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdE9wdGlvbnMoKSxcbiAgICAgICAgICAgIChibG9jazogQ3VpQmxvY2s8Q3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhPiwgaWQ6IHN0cmluZykgPT4gdGhpcy5yZW5kZXJTdGFydEJsb2NrKGJsb2NrLCBpZCwgdmVyc2lvbilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmlzaExvYWRlZERvY3VtZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpcnN0UmVuZGVyLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yRW1wdHkuZW1pdCh0aGlzLmNoZWNrSXNFbXB0eSgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZW5kZXJTdGFydEJsb2NrKFxuICAgICAgICBibG9jazogQ3VpQmxvY2s8Q3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhPixcbiAgICAgICAgaWQ6IHN0cmluZyxcbiAgICAgICAgdmVyc2lvbjogbnVtYmVyXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkIHx8IHZlcnNpb24gIT09IHRoaXMubGF6eUxvYWRWZXJzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsb2NrSWRzTWFwLnNldChpZCwgaWQpO1xuICAgICAgICB0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5wdXNoKHRydWUpO1xuICAgICAgICB0aGlzLmVkaXRvci5yZW5kZXIoeyBibG9ja3M6IFtibG9ja10gfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaEZpcnN0UmVuZGVyKHZlcnNpb24pO1xuICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgICAgICAgICAgcmVjYWxjdWxhdGVJbmRleGVzKHRoaXMuZWRpdG9yLmJsb2Nrcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcoKT8uYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVkaXRvci5jYXJldC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBibG9ja3NDb3VudCA9IHRoaXMuZWRpdG9yLmJsb2Nrcz8uZ2V0QmxvY2tzQ291bnQoKSA/PyAwO1xuXG4gICAgICAgIGlmICghYmxvY2tzQ291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgUkVEQUNUT1JfU0VMRUNUT1IgPSAnLmNvZGV4LWVkaXRvcl9fcmVkYWN0b3InO1xuICAgICAgICBjb25zdCByZWRhY3RvclRleHRDb250ZW50ID0gdGhpcy5lZGl0b3JFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoUkVEQUNUT1JfU0VMRUNUT1IpPy50ZXh0Q29udGVudD8udHJpbSgpO1xuXG4gICAgICAgIHJldHVybiAhcmVkYWN0b3JUZXh0Q29udGVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNldExhenlMb2FkKCk7XG4gICAgICAgIHRoaXMuZmlyc3RSZW5kZXIgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgdGhpcy5pc0VkaXRvclJlYWR5LnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlID0gW107XG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzU2tpcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJsb2NrSWRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgICAgdGhpcy5jb21iaW5lZEJsb2NrcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIHRoaXMuYWRkZWRCbG9ja3MgPSBbXTtcbiAgICAgICAgdGhpcy51cGRhdGVkQmxvY2tzID0gW107XG4gICAgICAgIHRoaXMucmVtb3ZlZEJsb2Nrc0lkcyA9IFtdO1xuICAgICAgICB0aGlzLmNoYW5nZXNRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0TGF6eUxvYWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGF6eUxvYWRWZXJzaW9uKys7XG4gICAgICAgIHRoaXMubGF6eUxvYWRPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgICAgICB0aGlzLmxhenlMb2FkT2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmxhenlMb2FkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxhenlMb2FkU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc1JlcXVlc3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUHJlbG9hZEZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzRW5kTGVmdFpvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYWdlID0gMDtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgI2VkaXRvclxuICAgIGRhdGEtZWRpdG9yXG4gICAgW2NsYXNzLl9yZWFkb25seV09XCJjb25maWcoKS5yZWFkT25seVwiXG4gICAgW2NsYXNzLl9sb2FkaW5nXT1cIiFpc0VkaXRvclJlYWR5KClcIlxuPlxuICAgIDxkaXYgW2lkXT1cImVkaXRvcklkXCI+PC9kaXY+XG4gICAgPGRpdlxuICAgICAgICAjZWRpdG9yRW5kXG4gICAgICAgIGNsYXNzPVwiZWRpdG9yLWVuZFwiXG4gICAgPjwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -8318,7 +8318,6 @@ const getEditorConfig = (id, config = DEFAULT_CONFIG) => ({
|
|
|
8318
8318
|
holder: id,
|
|
8319
8319
|
logLevel: 'ERROR',
|
|
8320
8320
|
readOnly: config.readOnly,
|
|
8321
|
-
autofocus: config.autofocus,
|
|
8322
8321
|
tools: {
|
|
8323
8322
|
paragraph: {
|
|
8324
8323
|
class: CuiCombinedTextBlockTool,
|
|
@@ -8490,6 +8489,7 @@ class CuiEditorComponent {
|
|
|
8490
8489
|
this.RETRY_DELAY = 3000;
|
|
8491
8490
|
this.emptyQueue = new Subject();
|
|
8492
8491
|
this.initChain = Promise.resolve();
|
|
8492
|
+
this.firstRender = Promise.resolve();
|
|
8493
8493
|
this.lazyLoadObserver = null;
|
|
8494
8494
|
this.lazyLoadSubscription = null;
|
|
8495
8495
|
this.isSkipCombinedBlockOnChange = [];
|
|
@@ -8850,7 +8850,7 @@ class CuiEditorComponent {
|
|
|
8850
8850
|
}
|
|
8851
8851
|
const version = this.lazyLoadVersion;
|
|
8852
8852
|
// TODO: есть варик что что то пойдет не так
|
|
8853
|
-
this.editor.blocks.render({ blocks: [block] }).then(() => {
|
|
8853
|
+
this.firstRender = this.editor.blocks.render({ blocks: [block] }).then(() => {
|
|
8854
8854
|
this.isSkip = false;
|
|
8855
8855
|
this.finishFirstRender(version);
|
|
8856
8856
|
});
|
|
@@ -8899,8 +8899,7 @@ class CuiEditorComponent {
|
|
|
8899
8899
|
}
|
|
8900
8900
|
setStartBlock() {
|
|
8901
8901
|
if (this.blockIdsMap.size) {
|
|
8902
|
-
this.
|
|
8903
|
-
this.editorEmpty.emit(this.checkIsEmpty());
|
|
8902
|
+
this.finishLoadedDocument();
|
|
8904
8903
|
return;
|
|
8905
8904
|
}
|
|
8906
8905
|
const version = this.lazyLoadVersion;
|
|
@@ -8910,6 +8909,15 @@ class CuiEditorComponent {
|
|
|
8910
8909
|
}
|
|
8911
8910
|
this.editorService.setStartBlock(this.editorApiId(), this.requestOptions(), (block, id) => this.renderStartBlock(block, id, version));
|
|
8912
8911
|
}
|
|
8912
|
+
finishLoadedDocument() {
|
|
8913
|
+
this.firstRender.then(() => {
|
|
8914
|
+
if (this.isDestroyed) {
|
|
8915
|
+
return;
|
|
8916
|
+
}
|
|
8917
|
+
this.setFocus();
|
|
8918
|
+
this.editorEmpty.emit(this.checkIsEmpty());
|
|
8919
|
+
});
|
|
8920
|
+
}
|
|
8913
8921
|
async renderStartBlock(block, id, version) {
|
|
8914
8922
|
if (this.isDestroyed || version !== this.lazyLoadVersion) {
|
|
8915
8923
|
return;
|
|
@@ -8939,6 +8947,7 @@ class CuiEditorComponent {
|
|
|
8939
8947
|
}
|
|
8940
8948
|
resetData() {
|
|
8941
8949
|
this.resetLazyLoad();
|
|
8950
|
+
this.firstRender = Promise.resolve();
|
|
8942
8951
|
this.isEditorReady.set(false);
|
|
8943
8952
|
this.isSkipCombinedBlockOnChange = [];
|
|
8944
8953
|
this.isFirst = true;
|