@libs-ui/components-inputs-mention 0.2.304 → 0.2.306-10
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.
- package/defines/template.define.d.ts +1 -1
- package/esm2022/defines/caret-coords.define.mjs +9 -9
- package/esm2022/defines/keyboard.define.mjs +1 -1
- package/esm2022/defines/template.define.mjs +5 -4
- package/esm2022/defines/utils.define.mjs +8 -9
- package/esm2022/index.mjs +1 -1
- package/esm2022/interfaces/mention.interface.mjs +1 -1
- package/esm2022/list/list.component.mjs +25 -26
- package/esm2022/mention.directive.mjs +31 -29
- package/fesm2022/libs-ui-components-inputs-mention.mjs +52 -51
- package/fesm2022/libs-ui-components-inputs-mention.mjs.map +1 -1
- package/interfaces/mention.interface.d.ts +2 -2
- package/list/list.component.d.ts +1 -1
- package/mention.directive.d.ts +3 -3
- package/package.json +6 -6
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, model, signal, viewChild, viewChildren } from
|
|
2
|
-
import { LibsUiComponentsAvatarComponent } from
|
|
3
|
-
import { LibsUiComponentsPopoverComponent } from
|
|
4
|
-
import { set } from
|
|
5
|
-
import { fromEvent, Subject, takeUntil } from
|
|
6
|
-
import { getCaretCoordinates } from
|
|
7
|
-
import { KEY_ENTER } from
|
|
8
|
-
import { getContentEditableCaretCoords, isInputOrTextAreaElement } from
|
|
1
|
+
import { ChangeDetectionStrategy, Component, model, signal, viewChild, viewChildren } from '@angular/core';
|
|
2
|
+
import { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';
|
|
3
|
+
import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
|
|
4
|
+
import { set } from '@libs-ui/utils';
|
|
5
|
+
import { fromEvent, Subject, takeUntil } from 'rxjs';
|
|
6
|
+
import { getCaretCoordinates } from '../defines/caret-coords.define';
|
|
7
|
+
import { KEY_ENTER } from '../defines/keyboard.define';
|
|
8
|
+
import { getContentEditableCaretCoords, isInputOrTextAreaElement } from '../defines/utils.define';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
export class LibsUiComponentsInputsMentionListComponent {
|
|
11
11
|
// #region PROPERTY
|
|
@@ -38,7 +38,9 @@ export class LibsUiComponentsInputsMentionListComponent {
|
|
|
38
38
|
}
|
|
39
39
|
/* FUNCTIONS */
|
|
40
40
|
initEvent(element, eventName) {
|
|
41
|
-
fromEvent(element, eventName)
|
|
41
|
+
fromEvent(element, eventName)
|
|
42
|
+
.pipe(takeUntil(this.onDestroy))
|
|
43
|
+
.subscribe((event) => {
|
|
42
44
|
if (eventName === 'resize' || !this.elementEl()?.nativeElement.contains(event.target)) {
|
|
43
45
|
this.handlerListenClose(event);
|
|
44
46
|
}
|
|
@@ -55,10 +57,10 @@ export class LibsUiComponentsInputsMentionListComponent {
|
|
|
55
57
|
if (isInputOrTextAreaElement(nativeParentElement)) {
|
|
56
58
|
// parent elements need to have postition:relative for this to work correctly?
|
|
57
59
|
this.coords.set(getCaretCoordinates(nativeParentElement, nativeParentElement.selectionStart));
|
|
58
|
-
this.coords.update(item => ({
|
|
60
|
+
this.coords.update((item) => ({
|
|
59
61
|
...item,
|
|
60
62
|
top: nativeParentElement.offsetTop + item.top - nativeParentElement.scrollTop,
|
|
61
|
-
left: nativeParentElement.offsetLeft + item.left - nativeParentElement.scrollLeft + nativeParentElement.getBoundingClientRect().left
|
|
63
|
+
left: nativeParentElement.offsetLeft + item.left - nativeParentElement.scrollLeft + nativeParentElement.getBoundingClientRect().left,
|
|
62
64
|
}));
|
|
63
65
|
// getCretCoordinates() for text/input elements needs an additional offset to position the list correctly
|
|
64
66
|
this.offset.set(this.getBlockCursorDimensions(nativeParentElement).height);
|
|
@@ -71,15 +73,15 @@ export class LibsUiComponentsInputsMentionListComponent {
|
|
|
71
73
|
const caretRelativeToView = getContentEditableCaretCoords(context);
|
|
72
74
|
const doc = document.documentElement;
|
|
73
75
|
const scrollLeft = (window.scrollX || doc.scrollLeft) - (doc.clientLeft || 0);
|
|
74
|
-
this.coords.update(item => ({
|
|
76
|
+
this.coords.update((item) => ({
|
|
75
77
|
...item,
|
|
76
78
|
left: caretRelativeToView.left - scrollLeft - (leftDiv || 0),
|
|
77
|
-
bottom: window.parent.innerHeight - caretRelativeToView.top + 18
|
|
79
|
+
bottom: window.parent.innerHeight - caretRelativeToView.top + 18,
|
|
78
80
|
}));
|
|
79
81
|
if (caretRelativeToView.bottom && caretRelativeToView.bottom !== -1) {
|
|
80
|
-
this.coords.update(item => ({
|
|
82
|
+
this.coords.update((item) => ({
|
|
81
83
|
...item,
|
|
82
|
-
bottom: caretRelativeToView.bottom
|
|
84
|
+
bottom: caretRelativeToView.bottom,
|
|
83
85
|
}));
|
|
84
86
|
}
|
|
85
87
|
this.positionElement();
|
|
@@ -90,11 +92,11 @@ export class LibsUiComponentsInputsMentionListComponent {
|
|
|
90
92
|
const scrollTop = (window.scrollX || doc.scrollTop) - (doc.clientTop || 0);
|
|
91
93
|
// bounding rectangles are relative to view, offsets are relative to container?
|
|
92
94
|
const caretRelativeToView = getContentEditableCaretCoords({ iframe, parent: null });
|
|
93
|
-
this.coords.update(item => ({
|
|
95
|
+
this.coords.update((item) => ({
|
|
94
96
|
...item,
|
|
95
97
|
top: caretRelativeToView.top - scrollTop + 10,
|
|
96
98
|
left: caretRelativeToView.left - scrollLeft - (leftDiv || 0),
|
|
97
|
-
bottom: caretRelativeToView.bottom
|
|
99
|
+
bottom: caretRelativeToView.bottom,
|
|
98
100
|
}));
|
|
99
101
|
this.positionElement();
|
|
100
102
|
}
|
|
@@ -118,7 +120,7 @@ export class LibsUiComponentsInputsMentionListComponent {
|
|
|
118
120
|
positionElement(left = this.coords().left, top = this.coords().top, dropUp = this.dropUp(), bottom = this.coords().bottom || 0) {
|
|
119
121
|
const el = this.elementEl()?.nativeElement;
|
|
120
122
|
top += dropUp ? 0 : this.offset(); // top of list is next line
|
|
121
|
-
el.style.position =
|
|
123
|
+
el.style.position = 'absolute';
|
|
122
124
|
el.style.left = left + 'px';
|
|
123
125
|
el.style.top = bottom !== -1 ? 'auto' : top + 'px';
|
|
124
126
|
el.style.bottom = bottom === -1 ? 'auto' : bottom + 'px';
|
|
@@ -128,7 +130,7 @@ export class LibsUiComponentsInputsMentionListComponent {
|
|
|
128
130
|
const parentStyles = window.getComputedStyle(nativeParentElement);
|
|
129
131
|
return {
|
|
130
132
|
height: parseFloat(parentStyles.lineHeight),
|
|
131
|
-
width: parseFloat(parentStyles.fontSize)
|
|
133
|
+
width: parseFloat(parentStyles.fontSize),
|
|
132
134
|
};
|
|
133
135
|
}
|
|
134
136
|
handleActiveItem(event, index) {
|
|
@@ -136,7 +138,7 @@ export class LibsUiComponentsInputsMentionListComponent {
|
|
|
136
138
|
this.activeIndex.set(index);
|
|
137
139
|
}
|
|
138
140
|
scrollToActive() {
|
|
139
|
-
if (!this.itemsEl() ||
|
|
141
|
+
if (!this.itemsEl() || this.itemsEl().length <= this.activeIndex()) {
|
|
140
142
|
return;
|
|
141
143
|
}
|
|
142
144
|
this.itemsEl()[this.activeIndex()].nativeElement.scrollIntoView();
|
|
@@ -154,13 +156,10 @@ export class LibsUiComponentsInputsMentionListComponent {
|
|
|
154
156
|
this.onDestroy.complete();
|
|
155
157
|
}
|
|
156
158
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsMentionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
157
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsInputsMentionListComponent, isStandalone: true, selector: "libs_ui-components-inputs-mention-list", inputs: { labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, isIframe: { classPropertyName: "isIframe", publicName: "isIframe", isSignal: true, isRequired: true, transformFunction: null }, defaultAvatar: { classPropertyName: "defaultAvatar", publicName: "defaultAvatar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { labelKey: "labelKeyChange", zIndex: "zIndexChange", isIframe: "isIframeChange", defaultAvatar: "defaultAvatarChange" }, viewQueries: [{ propertyName: "elementEl", first: true, predicate: ["element"], descendants: true, isSignal: true }, { propertyName: "itemsEl", predicate: ["item"], descendants: true, isSignal: true }], ngImport: i0, template: "<div
|
|
159
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsInputsMentionListComponent, isStandalone: true, selector: "libs_ui-components-inputs-mention-list", inputs: { labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, isIframe: { classPropertyName: "isIframe", publicName: "isIframe", isSignal: true, isRequired: true, transformFunction: null }, defaultAvatar: { classPropertyName: "defaultAvatar", publicName: "defaultAvatar", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { labelKey: "labelKeyChange", zIndex: "zIndexChange", isIframe: "isIframeChange", defaultAvatar: "defaultAvatarChange" }, viewQueries: [{ propertyName: "elementEl", first: true, predicate: ["element"], descendants: true, isSignal: true }, { propertyName: "itemsEl", predicate: ["item"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #element\n class=\"libs-ui-mention-list\"\n [style.zIndex]=\"zIndex()\"\n [class.hidden]=\"hidden()\">\n @for (item of items(); track item) {\n <div\n #item\n class=\"libs-ui-mention-list-item\"\n [class.libs-ui-mention-list-item-active]=\"$index === activeIndex()\"\n (mousedown)=\"handlerClick($event, $index)\"\n (mouseenter)=\"handleActiveItem($event, $index)\">\n <div class=\"px-[12px] py-[6px] flex items-center\">\n <libs_ui-components-avatar\n [size]=\"24\"\n [linkAvatar]=\"item.avatar\"\n [linkAvatarError]=\"defaultAvatar()\"\n [getLastTextAfterSpace]=\"true\"\n [textAvatar]=\"item.name\"\n [idGenColor]=\"item.id\" />\n <libs_ui-components-popover\n [classInclude]=\"'libs-ui-font-h5r'\"\n [type]=\"'text'\"\n [ignoreShowPopover]=\"true\"\n [config]=\"{ width: 250 }\">\n <!-- // ta.m \u1EA9n show tooltip v\u00EC ch\u01B0a x\u1EED l\u00FD \u0111c v\u1ECB tr\u00ED -->\n {{ item.name + ' (' + item.username + ')' }}\n </libs_ui-components-popover>\n </div>\n </div>\n }\n</div>\n", styles: [".libs-ui-mention-list{position:absolute;top:-999px;left:-9999px;z-index:1202;float:left;width:315px;padding:4px 0;background-color:#fff;border:solid 1px #e6e8ed;border-radius:5px;max-height:190px;overflow:auto;box-shadow:0 2px 10px 1px #3333331a}.libs-ui-mention-list .libs-ui-mention-list-item{background:#fff;cursor:pointer}.libs-ui-mention-list .libs-ui-mention-list-item:hover,.libs-ui-mention-list .libs-ui-mention-list-item-active{background-color:var(--libs-ui-color-light-3, #f4f8ff)}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsAvatarComponent, selector: "libs_ui-components-avatar", inputs: ["typeShape", "classInclude", "size", "linkAvatar", "linkAvatarError", "classImageInclude", "zIndexPreviewImage", "clickPreviewImage", "idGenColor", "getLastTextAfterSpace", "textAvatar", "textAvatarClassInclude", "containertextAvatarClassInclude"], outputs: ["outAvatarError", "outEventPreviewImage"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "initEventInElementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
158
160
|
}
|
|
159
161
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsMentionListComponent, decorators: [{
|
|
160
162
|
type: Component,
|
|
161
|
-
args: [{ selector: 'libs_ui-components-inputs-mention-list', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
162
|
-
LibsUiComponentsAvatarComponent,
|
|
163
|
-
LibsUiComponentsPopoverComponent
|
|
164
|
-
], template: "<div #element\n class=\"libs-ui-mention-list\"\n [style.zIndex]=\"zIndex()\"\n [class.hidden]=\"hidden()\">\n @for (item of items(); track item) {\n <div #item\n class=\"libs-ui-mention-list-item\"\n [class.libs-ui-mention-list-item-active]=\"$index === activeIndex()\"\n (mousedown)=\"handlerClick($event, $index)\"\n (mouseenter)=\"handleActiveItem($event, $index)\">\n <div class=\"px-[12px] py-[6px] flex items-center\">\n <libs_ui-components-avatar [size]=\"24\"\n [linkAvatar]=\"item.avatar\"\n [linkAvatarError]=\"defaultAvatar()\"\n [getLastTextAfterSpace]=\"true\"\n [textAvatar]=\"item.name\"\n [idGenColor]=\"item.id\" />\n <libs_ui-components-popover [classInclude]=\"'libs-ui-font-h5r'\"\n [type]=\"'text'\"\n [ignoreShowPopover]=\"true\"\n [config]=\"{width: 250}\">\n <!-- // ta.m \u1EA9n show tooltip v\u00EC ch\u01B0a x\u1EED l\u00FD \u0111c v\u1ECB tr\u00ED -->\n {{ item.name + ' (' + item.username + ')' }}\n </libs_ui-components-popover>\n </div>\n </div>\n }\n</div>\n", styles: [".libs-ui-mention-list{position:absolute;top:-999px;left:-9999px;z-index:1202;float:left;width:315px;padding:4px 0;background-color:#fff;border:solid 1px #e6e8ed;border-radius:5px;max-height:190px;overflow:auto;box-shadow:0 2px 10px 1px #3333331a}.libs-ui-mention-list .libs-ui-mention-list-item{background:#fff;cursor:pointer}.libs-ui-mention-list .libs-ui-mention-list-item:hover,.libs-ui-mention-list .libs-ui-mention-list-item-active{background-color:var(--libs-ui-color-light-3, #f4f8ff)}\n"] }]
|
|
163
|
+
args: [{ selector: 'libs_ui-components-inputs-mention-list', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent], template: "<div\n #element\n class=\"libs-ui-mention-list\"\n [style.zIndex]=\"zIndex()\"\n [class.hidden]=\"hidden()\">\n @for (item of items(); track item) {\n <div\n #item\n class=\"libs-ui-mention-list-item\"\n [class.libs-ui-mention-list-item-active]=\"$index === activeIndex()\"\n (mousedown)=\"handlerClick($event, $index)\"\n (mouseenter)=\"handleActiveItem($event, $index)\">\n <div class=\"px-[12px] py-[6px] flex items-center\">\n <libs_ui-components-avatar\n [size]=\"24\"\n [linkAvatar]=\"item.avatar\"\n [linkAvatarError]=\"defaultAvatar()\"\n [getLastTextAfterSpace]=\"true\"\n [textAvatar]=\"item.name\"\n [idGenColor]=\"item.id\" />\n <libs_ui-components-popover\n [classInclude]=\"'libs-ui-font-h5r'\"\n [type]=\"'text'\"\n [ignoreShowPopover]=\"true\"\n [config]=\"{ width: 250 }\">\n <!-- // ta.m \u1EA9n show tooltip v\u00EC ch\u01B0a x\u1EED l\u00FD \u0111c v\u1ECB tr\u00ED -->\n {{ item.name + ' (' + item.username + ')' }}\n </libs_ui-components-popover>\n </div>\n </div>\n }\n</div>\n", styles: [".libs-ui-mention-list{position:absolute;top:-999px;left:-9999px;z-index:1202;float:left;width:315px;padding:4px 0;background-color:#fff;border:solid 1px #e6e8ed;border-radius:5px;max-height:190px;overflow:auto;box-shadow:0 2px 10px 1px #3333331a}.libs-ui-mention-list .libs-ui-mention-list-item{background:#fff;cursor:pointer}.libs-ui-mention-list .libs-ui-mention-list-item:hover,.libs-ui-mention-list .libs-ui-mention-list-item-active{background-color:var(--libs-ui-color-light-3, #f4f8ff)}\n"] }]
|
|
165
164
|
}] });
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL2xpc3QvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL2xpc3QvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBY2xHLE1BQU0sT0FBTywwQ0FBMEM7SUFFckQsbUJBQW1CO0lBQ1osS0FBSyxHQUFHLE1BQU0sQ0FBNEMsRUFBRSxDQUFDLENBQUM7SUFDOUQsV0FBVyxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNoQyxNQUFNLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDbEMsb0JBQW9CLEdBQUcsTUFBTSxDQUE2RSxTQUFTLENBQUMsQ0FBQztJQUVsSCxNQUFNLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRWxDLE1BQU0sR0FBRyxNQUFNLENBQWlELEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsbUJBQW1CLEdBQUcsTUFBTSxDQUErQixTQUFTLENBQUMsQ0FBQztJQUN0RSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV4QyxnQkFBZ0I7SUFDaEIsUUFBUSxHQUFHLEtBQUssQ0FBUyxPQUFPLENBQUMsQ0FBQztJQUNsQyxNQUFNLEdBQUcsS0FBSyxDQUFTLElBQUksQ0FBQyxDQUFDO0lBQzdCLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFXLENBQUM7SUFDckMsYUFBYSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBRWhDLGdCQUFnQjtJQUNQLFNBQVMsR0FBRyxTQUFTLENBQWEsU0FBUyxDQUFDLENBQUM7SUFDN0MsT0FBTyxHQUFHLFlBQVksQ0FBYSxNQUFNLENBQUMsQ0FBQztJQUVwRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGVBQWU7SUFDUCxTQUFTLENBQUMsT0FBZSxFQUFFLFNBQWlCO1FBQ2xELFNBQVMsQ0FBUSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUM5RixJQUFJLFNBQVMsS0FBSyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFZO1FBQ3JDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxxRUFBcUU7SUFDckUsUUFBUSxDQUFDLG1CQUFxQyxFQUFFLE1BQTBCLEVBQUUsT0FBZ0I7UUFDMUYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xELElBQUksd0JBQXdCLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1lBQ2xELDhFQUE4RTtZQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQzlGLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUIsR0FBRyxJQUFJO2dCQUNQLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQyxTQUFTO2dCQUM3RSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSTthQUNySSxDQUFDLENBQUMsQ0FBQztZQUVKLHlHQUF5RztZQUN6RyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxPQUFPLEdBQWtGLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMzSywrQ0FBK0M7WUFDL0MsTUFBTSxtQkFBbUIsR0FBRyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1lBQ3JDLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUIsR0FBRyxJQUFJO2dCQUNQLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztnQkFDNUQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsR0FBRyxFQUFFO2FBQ2pFLENBQUMsQ0FBQyxDQUFDO1lBQ0osSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksbUJBQW1CLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDMUIsR0FBRyxJQUFJO29CQUNQLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxNQUFNO2lCQUNuQyxDQUFDLENBQUMsQ0FBQztZQUNOLENBQUM7WUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFFdkIsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNFLCtFQUErRTtRQUMvRSxNQUFNLG1CQUFtQixHQUFHLDZCQUE2QixDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXBGLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQixHQUFHLElBQUk7WUFDUCxHQUFHLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFO1lBQzdDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztZQUM1RCxNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTTtTQUNuQyxDQUFDLENBQUMsQ0FBQTtRQUNILElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVTLFlBQVksQ0FBQyxLQUFZLEVBQUUsS0FBYTtRQUNoRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNqSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUFlLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBYyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQWtCLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFpQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDckssTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsQ0FBQztRQUUzQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLDJCQUEyQjtRQUM5RCxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDL0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUM1QixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNuRCxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUN6RCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU8sd0JBQXdCLENBQUMsbUJBQXFDO1FBQ3BFLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRWxFLE9BQU87WUFDTCxNQUFNLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDM0MsS0FBSyxFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1NBQ3pDLENBQUM7SUFDSixDQUFDO0lBRVMsZ0JBQWdCLENBQUMsS0FBWSxFQUFFLEtBQWE7UUFDcEQsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDckUsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3BFLENBQUM7SUFFRCxhQUFhO1FBQ1gsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQXpLVSwwQ0FBMEM7NEZBQTFDLDBDQUEwQyx3OEJDckJ2RCx3bkNBNEJBLHdpQkRYSSwrQkFBK0IsNlhBQy9CLGdDQUFnQzs7NEZBR3ZCLDBDQUEwQztrQkFadEQsU0FBUzsrQkFFRSx3Q0FBd0MsY0FHdEMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLCtCQUErQjt3QkFDL0IsZ0NBQWdDO3FCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgc2lnbmFsLCB2aWV3Q2hpbGQsIHZpZXdDaGlsZHJlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtYXZhdGFyXCI7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IHNldCB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZ2V0Q2FyZXRDb29yZGluYXRlcyB9IGZyb20gXCIuLi9kZWZpbmVzL2NhcmV0LWNvb3Jkcy5kZWZpbmVcIjtcbmltcG9ydCB7IEtFWV9FTlRFUiB9IGZyb20gXCIuLi9kZWZpbmVzL2tleWJvYXJkLmRlZmluZVwiO1xuaW1wb3J0IHsgZ2V0Q29udGVudEVkaXRhYmxlQ2FyZXRDb29yZHMsIGlzSW5wdXRPclRleHRBcmVhRWxlbWVudCB9IGZyb20gXCIuLi9kZWZpbmVzL3V0aWxzLmRlZmluZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLW1lbnRpb24tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIExpYnNVaUNvbXBvbmVudHNBdmF0YXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzTWVudGlvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwdWJsaWMgaXRlbXMgPSBzaWduYWw8QXJyYXk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPj4+KFtdKTtcbiAgcHVibGljIGFjdGl2ZUluZGV4ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHB1YmxpYyBoaWRkZW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgc3R5bGVPZmYgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcGFyZW50SGFuZGxlcktleURvd24gPSBzaWduYWw8KChlOiBFdmVudCwgZWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IHVuZGVmaW5lZCkgPT4gdW5rbm93bikgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJvdGVjdGVkIGRyb3BVcCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBjb29yZHMgPSBzaWduYWw8eyB0b3A6IG51bWJlciwgbGVmdDogbnVtYmVyLCBib3R0b20/OiBudW1iZXIgfT4oeyB0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogMCB9KTtcbiAgcHJpdmF0ZSBvZmZzZXQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBuYXRpdmVQYXJlbnRFbGVtZW50ID0gc2lnbmFsPEhUTUxJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIGxhYmVsS2V5ID0gbW9kZWw8c3RyaW5nPignbGFiZWwnKTtcbiAgekluZGV4ID0gbW9kZWw8bnVtYmVyPigxMDAwKTtcbiAgaXNJZnJhbWUgPSBtb2RlbC5yZXF1aXJlZDxib29sZWFuPigpO1xuICBkZWZhdWx0QXZhdGFyID0gbW9kZWw8c3RyaW5nPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcmVhZG9ubHkgZWxlbWVudEVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdlbGVtZW50Jyk7XG4gIHJlYWRvbmx5IGl0ZW1zRWwgPSB2aWV3Q2hpbGRyZW48RWxlbWVudFJlZj4oJ2l0ZW0nKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5pc0lmcmFtZSgpKSB7XG4gICAgICB0aGlzLmluaXRFdmVudCh3aW5kb3cucGFyZW50LCAnd2hlZWwnKTtcbiAgICAgIHRoaXMuaW5pdEV2ZW50KHdpbmRvdy5wYXJlbnQsICdyZXNpemUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbml0RXZlbnQod2luZG93LCAnd2hlZWwnKTtcbiAgICB0aGlzLmluaXRFdmVudCh3aW5kb3csICdyZXNpemUnKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcml2YXRlIGluaXRFdmVudChlbGVtZW50OiBXaW5kb3csIGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgZnJvbUV2ZW50PEV2ZW50PihlbGVtZW50LCBldmVudE5hbWUpLnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudE5hbWUgPT09ICdyZXNpemUnIHx8ICF0aGlzLmVsZW1lbnRFbCgpPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyTGlzdGVuQ2xvc2UoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTGlzdGVuQ2xvc2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gdGhpcy5lbGVtZW50RWwoKT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5oaWRkZW4uc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGxvdHMgb2YgY29uZnVzaW9uIGhlcmUgYmV0d2VlbiByZWxhdGl2ZSBjb29yZGluYXRlcyBhbmQgY29udGFpbmVyc1xuICBwb3NpdGlvbihuYXRpdmVQYXJlbnRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50LCBpZnJhbWU/OiBIVE1MSUZyYW1lRWxlbWVudCwgbGVmdERpdj86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubmF0aXZlUGFyZW50RWxlbWVudC5zZXQobmF0aXZlUGFyZW50RWxlbWVudCk7XG4gICAgaWYgKGlzSW5wdXRPclRleHRBcmVhRWxlbWVudChuYXRpdmVQYXJlbnRFbGVtZW50KSkge1xuICAgICAgLy8gcGFyZW50IGVsZW1lbnRzIG5lZWQgdG8gaGF2ZSBwb3N0aXRpb246cmVsYXRpdmUgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHk/XG4gICAgICB0aGlzLmNvb3Jkcy5zZXQoZ2V0Q2FyZXRDb29yZGluYXRlcyhuYXRpdmVQYXJlbnRFbGVtZW50LCBuYXRpdmVQYXJlbnRFbGVtZW50LnNlbGVjdGlvblN0YXJ0KSk7XG4gICAgICB0aGlzLmNvb3Jkcy51cGRhdGUoaXRlbSA9PiAoe1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0b3A6IG5hdGl2ZVBhcmVudEVsZW1lbnQub2Zmc2V0VG9wICsgaXRlbS50b3AgLSBuYXRpdmVQYXJlbnRFbGVtZW50LnNjcm9sbFRvcCxcbiAgICAgICAgbGVmdDogbmF0aXZlUGFyZW50RWxlbWVudC5vZmZzZXRMZWZ0ICsgaXRlbS5sZWZ0IC0gbmF0aXZlUGFyZW50RWxlbWVudC5zY3JvbGxMZWZ0ICsgbmF0aXZlUGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0XG4gICAgICB9KSk7XG5cbiAgICAgIC8vIGdldENyZXRDb29yZGluYXRlcygpIGZvciB0ZXh0L2lucHV0IGVsZW1lbnRzIG5lZWRzIGFuIGFkZGl0aW9uYWwgb2Zmc2V0IHRvIHBvc2l0aW9uIHRoZSBsaXN0IGNvcnJlY3RseVxuICAgICAgdGhpcy5vZmZzZXQuc2V0KHRoaXMuZ2V0QmxvY2tDdXJzb3JEaW1lbnNpb25zKG5hdGl2ZVBhcmVudEVsZW1lbnQpLmhlaWdodCk7XG4gICAgICB0aGlzLnBvc2l0aW9uRWxlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaWZyYW1lKSB7XG4gICAgICBjb25zdCBjb250ZXh0OiB7IGlmcmFtZTogSFRNTElGcmFtZUVsZW1lbnQsIHBhcmVudDogRWxlbWVudCB8IG51bGwsIHdpbmRvd1BhcmVudD86IGJvb2xlYW4gfSA9IHsgaWZyYW1lOiBpZnJhbWUsIHBhcmVudDogd2luZG93LnBhcmVudC5kb2N1bWVudC5ib2R5LCB3aW5kb3dQYXJlbnQ6IHRydWUgfTtcbiAgICAgIC8vIGNvbnN0IHJlY3QgPSBpZnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjYXJldFJlbGF0aXZlVG9WaWV3ID0gZ2V0Q29udGVudEVkaXRhYmxlQ2FyZXRDb29yZHMoY29udGV4dCk7XG4gICAgICBjb25zdCBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKHdpbmRvdy5zY3JvbGxYIHx8IGRvYy5zY3JvbGxMZWZ0KSAtIChkb2MuY2xpZW50TGVmdCB8fCAwKTtcbiAgICAgIHRoaXMuY29vcmRzLnVwZGF0ZShpdGVtID0+ICh7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIGxlZnQ6IGNhcmV0UmVsYXRpdmVUb1ZpZXcubGVmdCAtIHNjcm9sbExlZnQgLSAobGVmdERpdiB8fCAwKSxcbiAgICAgICAgYm90dG9tOiB3aW5kb3cucGFyZW50LmlubmVySGVpZ2h0IC0gY2FyZXRSZWxhdGl2ZVRvVmlldy50b3AgKyAxOFxuICAgICAgfSkpO1xuICAgICAgaWYgKGNhcmV0UmVsYXRpdmVUb1ZpZXcuYm90dG9tICYmIGNhcmV0UmVsYXRpdmVUb1ZpZXcuYm90dG9tICE9PSAtMSkge1xuICAgICAgICB0aGlzLmNvb3Jkcy51cGRhdGUoaXRlbSA9PiAoe1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgYm90dG9tOiBjYXJldFJlbGF0aXZlVG9WaWV3LmJvdHRvbVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBvc2l0aW9uRWxlbWVudCgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKHdpbmRvdy5zY3JvbGxYIHx8IGRvYy5zY3JvbGxMZWZ0KSAtIChkb2MuY2xpZW50TGVmdCB8fCAwKTtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAod2luZG93LnNjcm9sbFggfHwgZG9jLnNjcm9sbFRvcCkgLSAoZG9jLmNsaWVudFRvcCB8fCAwKTtcbiAgICAvLyBib3VuZGluZyByZWN0YW5nbGVzIGFyZSByZWxhdGl2ZSB0byB2aWV3LCBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byBjb250YWluZXI/XG4gICAgY29uc3QgY2FyZXRSZWxhdGl2ZVRvVmlldyA9IGdldENvbnRlbnRFZGl0YWJsZUNhcmV0Q29vcmRzKHsgaWZyYW1lLCBwYXJlbnQ6IG51bGwgfSk7XG5cbiAgICB0aGlzLmNvb3Jkcy51cGRhdGUoaXRlbSA9PiAoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIHRvcDogY2FyZXRSZWxhdGl2ZVRvVmlldy50b3AgLSBzY3JvbGxUb3AgKyAxMCxcbiAgICAgIGxlZnQ6IGNhcmV0UmVsYXRpdmVUb1ZpZXcubGVmdCAtIHNjcm9sbExlZnQgLSAobGVmdERpdiB8fCAwKSxcbiAgICAgIGJvdHRvbTogY2FyZXRSZWxhdGl2ZVRvVmlldy5ib3R0b21cbiAgICB9KSlcbiAgICB0aGlzLnBvc2l0aW9uRWxlbWVudCgpO1xuICB9XG5cbiAgZ2V0IEFjdGl2ZUl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMoKVt0aGlzLmFjdGl2ZUluZGV4KCldO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGljayhldmVudDogRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmFjdGl2ZUluZGV4LnNldChpbmRleCk7XG4gICAgc2V0KGV2ZW50LCAna2V5Q29kZScsIEtFWV9FTlRFUik7XG4gICAgdGhpcy5wYXJlbnRIYW5kbGVyS2V5RG93bigpPy4oZXZlbnQsIHRoaXMubmF0aXZlUGFyZW50RWxlbWVudCgpKTtcbiAgfVxuXG4gIGFjdGl2YXRlTmV4dEl0ZW0oKSB7XG4gICAgdGhpcy5hY3RpdmVJbmRleC5zZXQodGhpcy5pdGVtcygpLmxlbmd0aCAtIDEgPiB0aGlzLmFjdGl2ZUluZGV4KCkgPyB0aGlzLmFjdGl2ZUluZGV4KCkgKyAxIDogdGhpcy5hY3RpdmVJbmRleCgpKTtcbiAgICB0aGlzLnNjcm9sbFRvQWN0aXZlKCk7XG4gIH1cblxuICBhY3RpdmF0ZVByZXZpb3VzSXRlbSgpIHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4LnNldCh0aGlzLmFjdGl2ZUluZGV4KCkgPiAwID8gdGhpcy5hY3RpdmVJbmRleCgpIC0gMSA6IHRoaXMuYWN0aXZlSW5kZXgoKSk7XG4gICAgdGhpcy5zY3JvbGxUb0FjdGl2ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvbkVsZW1lbnQobGVmdDogbnVtYmVyID0gdGhpcy5jb29yZHMoKS5sZWZ0LCB0b3A6IG51bWJlciA9IHRoaXMuY29vcmRzKCkudG9wLCBkcm9wVXA6IGJvb2xlYW4gPSB0aGlzLmRyb3BVcCgpLCBib3R0b206IG51bWJlciA9IHRoaXMuY29vcmRzKCkuYm90dG9tIHx8IDApIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudEVsKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0b3AgKz0gZHJvcFVwID8gMCA6IHRoaXMub2Zmc2V0KCk7IC8vIHRvcCBvZiBsaXN0IGlzIG5leHQgbGluZVxuICAgIGVsLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIGVsLnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcbiAgICBlbC5zdHlsZS50b3AgPSBib3R0b20gIT09IC0xID8gJ2F1dG8nIDogdG9wICsgJ3B4JztcbiAgICBlbC5zdHlsZS5ib3R0b20gPSBib3R0b20gPT09IC0xID8gJ2F1dG8nIDogYm90dG9tICsgJ3B4JztcbiAgICB0aGlzLm5hdGl2ZVBhcmVudEVsZW1lbnQoKT8ubm9ybWFsaXplKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEJsb2NrQ3Vyc29yRGltZW5zaW9ucyhuYXRpdmVQYXJlbnRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgY29uc3QgcGFyZW50U3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobmF0aXZlUGFyZW50RWxlbWVudCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiBwYXJzZUZsb2F0KHBhcmVudFN0eWxlcy5saW5lSGVpZ2h0KSxcbiAgICAgIHdpZHRoOiBwYXJzZUZsb2F0KHBhcmVudFN0eWxlcy5mb250U2l6ZSlcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUFjdGl2ZUl0ZW0oZXZlbnQ6IEV2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5hY3RpdmVJbmRleC5zZXQoaW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb0FjdGl2ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXRlbXNFbCgpIHx8ICh0aGlzLml0ZW1zRWwoKS5sZW5ndGggPD0gdGhpcy5hY3RpdmVJbmRleCgpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLml0ZW1zRWwoKVt0aGlzLmFjdGl2ZUluZGV4KCldLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgfVxuXG4gIHNjcm9sbENvbnRlbnQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50RWwoKTtcbiAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG5cbn1cbiIsIjxkaXYgI2VsZW1lbnRcbiAgY2xhc3M9XCJsaWJzLXVpLW1lbnRpb24tbGlzdFwiXG4gIFtzdHlsZS56SW5kZXhdPVwiekluZGV4KClcIlxuICBbY2xhc3MuaGlkZGVuXT1cImhpZGRlbigpXCI+XG4gIEBmb3IgKGl0ZW0gb2YgaXRlbXMoKTsgdHJhY2sgaXRlbSkge1xuICAgIDxkaXYgI2l0ZW1cbiAgICAgIGNsYXNzPVwibGlicy11aS1tZW50aW9uLWxpc3QtaXRlbVwiXG4gICAgICBbY2xhc3MubGlicy11aS1tZW50aW9uLWxpc3QtaXRlbS1hY3RpdmVdPVwiJGluZGV4ID09PSBhY3RpdmVJbmRleCgpXCJcbiAgICAgIChtb3VzZWRvd24pPVwiaGFuZGxlckNsaWNrKCRldmVudCwgJGluZGV4KVwiXG4gICAgICAobW91c2VlbnRlcik9XCJoYW5kbGVBY3RpdmVJdGVtKCRldmVudCwgJGluZGV4KVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInB4LVsxMnB4XSBweS1bNnB4XSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWF2YXRhciBbc2l6ZV09XCIyNFwiXG4gICAgICAgICAgW2xpbmtBdmF0YXJdPVwiaXRlbS5hdmF0YXJcIlxuICAgICAgICAgIFtsaW5rQXZhdGFyRXJyb3JdPVwiZGVmYXVsdEF2YXRhcigpXCJcbiAgICAgICAgICBbZ2V0TGFzdFRleHRBZnRlclNwYWNlXT1cInRydWVcIlxuICAgICAgICAgIFt0ZXh0QXZhdGFyXT1cIml0ZW0ubmFtZVwiXG4gICAgICAgICAgW2lkR2VuQ29sb3JdPVwiaXRlbS5pZFwiIC8+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY2xhc3NJbmNsdWRlXT1cIidsaWJzLXVpLWZvbnQtaDVyJ1wiXG4gICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7d2lkdGg6IDI1MH1cIj5cbiAgICAgICAgICA8IS0tIC8vIHRhLm0g4bqpbiBzaG93IHRvb2x0aXAgdsOsIGNoxrBhIHjhu60gbMO9IMSRYyB24buLIHRyw60gLS0+XG4gICAgICAgICAge3sgaXRlbS5uYW1lICsgJyAoJyArIGl0ZW0udXNlcm5hbWUgKyAnKScgfX1cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL2xpc3QvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL21lbnRpb24vc3JjL2xpc3QvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBV2xHLE1BQU0sT0FBTywwQ0FBMEM7SUFDckQsbUJBQW1CO0lBQ1osS0FBSyxHQUFHLE1BQU0sQ0FBNEMsRUFBRSxDQUFDLENBQUM7SUFDOUQsV0FBVyxHQUFHLE1BQU0sQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUNoQyxNQUFNLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDbEMsb0JBQW9CLEdBQUcsTUFBTSxDQUE2RSxTQUFTLENBQUMsQ0FBQztJQUVsSCxNQUFNLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRWxDLE1BQU0sR0FBRyxNQUFNLENBQWlELEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0IsbUJBQW1CLEdBQUcsTUFBTSxDQUErQixTQUFTLENBQUMsQ0FBQztJQUN0RSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUV4QyxnQkFBZ0I7SUFDaEIsUUFBUSxHQUFHLEtBQUssQ0FBUyxPQUFPLENBQUMsQ0FBQztJQUNsQyxNQUFNLEdBQUcsS0FBSyxDQUFTLElBQUksQ0FBQyxDQUFDO0lBQzdCLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFXLENBQUM7SUFDckMsYUFBYSxHQUFHLEtBQUssRUFBVSxDQUFDO0lBRWhDLGdCQUFnQjtJQUNQLFNBQVMsR0FBRyxTQUFTLENBQWEsU0FBUyxDQUFDLENBQUM7SUFDN0MsT0FBTyxHQUFHLFlBQVksQ0FBYSxNQUFNLENBQUMsQ0FBQztJQUVwRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGVBQWU7SUFDUCxTQUFTLENBQUMsT0FBZSxFQUFFLFNBQWlCO1FBQ2xELFNBQVMsQ0FBUSxPQUFPLEVBQUUsU0FBUyxDQUFDO2FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQzFCLElBQUksU0FBUyxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN0RixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQVk7UUFDckMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxRQUFRLENBQUMsbUJBQXFDLEVBQUUsTUFBMEIsRUFBRSxPQUFnQjtRQUMxRixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEQsSUFBSSx3QkFBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDbEQsOEVBQThFO1lBQzlFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzVCLEdBQUcsSUFBSTtnQkFDUCxHQUFHLEVBQUUsbUJBQW1CLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsbUJBQW1CLENBQUMsU0FBUztnQkFDN0UsSUFBSSxFQUFFLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUk7YUFDckksQ0FBQyxDQUFDLENBQUM7WUFFSix5R0FBeUc7WUFDekcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sT0FBTyxHQUFrRixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDM0ssK0NBQStDO1lBQy9DLE1BQU0sbUJBQW1CLEdBQUcsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkUsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUIsR0FBRyxJQUFJO2dCQUNQLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsVUFBVSxHQUFHLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztnQkFDNUQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsR0FBRyxFQUFFO2FBQ2pFLENBQUMsQ0FBQyxDQUFDO1lBQ0osSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUksbUJBQW1CLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM1QixHQUFHLElBQUk7b0JBQ1AsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE1BQU07aUJBQ25DLENBQUMsQ0FBQyxDQUFDO1lBQ04sQ0FBQztZQUNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUV2QixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0UsK0VBQStFO1FBQy9FLE1BQU0sbUJBQW1CLEdBQUcsNkJBQTZCLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFcEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUIsR0FBRyxJQUFJO1lBQ1AsR0FBRyxFQUFFLG1CQUFtQixDQUFDLEdBQUcsR0FBRyxTQUFTLEdBQUcsRUFBRTtZQUM3QyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7WUFDNUQsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE1BQU07U0FDbkMsQ0FBQyxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFUyxZQUFZLENBQUMsS0FBWSxFQUFFLEtBQWE7UUFDaEQsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLEdBQUcsQ0FBQyxLQUFzQixFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2pILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQWUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxNQUFjLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBa0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQWlCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQztRQUNySyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsYUFBYSxDQUFDO1FBRTNDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsMkJBQTJCO1FBQzlELEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMvQixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQzVCLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ25ELEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ3pELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxtQkFBcUM7UUFDcEUsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFbEUsT0FBTztZQUNMLE1BQU0sRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztZQUMzQyxLQUFLLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7U0FDekMsQ0FBQztJQUNKLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxLQUFZLEVBQUUsS0FBYTtRQUNwRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ25FLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNwRSxDQUFDO0lBRUQsYUFBYTtRQUNYLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0ExS1UsMENBQTBDOzRGQUExQywwQ0FBMEMsdzhCQ2xCdkQsMHBDQWdDQSx3aUJEaEJZLCtCQUErQiw2WEFBRSxnQ0FBZ0M7OzRGQUVoRSwwQ0FBMEM7a0JBVHRELFNBQVM7K0JBRUUsd0NBQXdDLGNBR3RDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLCtCQUErQixFQUFFLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwsIHZpZXdDaGlsZCwgdmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1hdmF0YXInO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGdldENhcmV0Q29vcmRpbmF0ZXMgfSBmcm9tICcuLi9kZWZpbmVzL2NhcmV0LWNvb3Jkcy5kZWZpbmUnO1xuaW1wb3J0IHsgS0VZX0VOVEVSIH0gZnJvbSAnLi4vZGVmaW5lcy9rZXlib2FyZC5kZWZpbmUnO1xuaW1wb3J0IHsgZ2V0Q29udGVudEVkaXRhYmxlQ2FyZXRDb29yZHMsIGlzSW5wdXRPclRleHRBcmVhRWxlbWVudCB9IGZyb20gJy4uL2RlZmluZXMvdXRpbHMuZGVmaW5lJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy1tZW50aW9uLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2xpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtMaWJzVWlDb21wb25lbnRzQXZhdGFyQ29tcG9uZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNJbnB1dHNNZW50aW9uTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwdWJsaWMgaXRlbXMgPSBzaWduYWw8QXJyYXk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPj4+KFtdKTtcbiAgcHVibGljIGFjdGl2ZUluZGV4ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHB1YmxpYyBoaWRkZW4gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgc3R5bGVPZmYgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcGFyZW50SGFuZGxlcktleURvd24gPSBzaWduYWw8KChlOiBFdmVudCwgZWxlbWVudDogSFRNTElucHV0RWxlbWVudCB8IHVuZGVmaW5lZCkgPT4gdW5rbm93bikgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJvdGVjdGVkIGRyb3BVcCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBjb29yZHMgPSBzaWduYWw8eyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyOyBib3R0b20/OiBudW1iZXIgfT4oeyB0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogMCB9KTtcbiAgcHJpdmF0ZSBvZmZzZXQgPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBuYXRpdmVQYXJlbnRFbGVtZW50ID0gc2lnbmFsPEhUTUxJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIGxhYmVsS2V5ID0gbW9kZWw8c3RyaW5nPignbGFiZWwnKTtcbiAgekluZGV4ID0gbW9kZWw8bnVtYmVyPigxMDAwKTtcbiAgaXNJZnJhbWUgPSBtb2RlbC5yZXF1aXJlZDxib29sZWFuPigpO1xuICBkZWZhdWx0QXZhdGFyID0gbW9kZWw8c3RyaW5nPigpO1xuXG4gIC8qIFZJRVcgQ0hJTEQgKi9cbiAgcmVhZG9ubHkgZWxlbWVudEVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdlbGVtZW50Jyk7XG4gIHJlYWRvbmx5IGl0ZW1zRWwgPSB2aWV3Q2hpbGRyZW48RWxlbWVudFJlZj4oJ2l0ZW0nKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5pc0lmcmFtZSgpKSB7XG4gICAgICB0aGlzLmluaXRFdmVudCh3aW5kb3cucGFyZW50LCAnd2hlZWwnKTtcbiAgICAgIHRoaXMuaW5pdEV2ZW50KHdpbmRvdy5wYXJlbnQsICdyZXNpemUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbml0RXZlbnQod2luZG93LCAnd2hlZWwnKTtcbiAgICB0aGlzLmluaXRFdmVudCh3aW5kb3csICdyZXNpemUnKTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBwcml2YXRlIGluaXRFdmVudChlbGVtZW50OiBXaW5kb3csIGV2ZW50TmFtZTogc3RyaW5nKSB7XG4gICAgZnJvbUV2ZW50PEV2ZW50PihlbGVtZW50LCBldmVudE5hbWUpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudE5hbWUgPT09ICdyZXNpemUnIHx8ICF0aGlzLmVsZW1lbnRFbCgpPy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZXJMaXN0ZW5DbG9zZShldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVyTGlzdGVuQ2xvc2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gdGhpcy5lbGVtZW50RWwoKT8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5oaWRkZW4uc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGxvdHMgb2YgY29uZnVzaW9uIGhlcmUgYmV0d2VlbiByZWxhdGl2ZSBjb29yZGluYXRlcyBhbmQgY29udGFpbmVyc1xuICBwb3NpdGlvbihuYXRpdmVQYXJlbnRFbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50LCBpZnJhbWU/OiBIVE1MSUZyYW1lRWxlbWVudCwgbGVmdERpdj86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubmF0aXZlUGFyZW50RWxlbWVudC5zZXQobmF0aXZlUGFyZW50RWxlbWVudCk7XG4gICAgaWYgKGlzSW5wdXRPclRleHRBcmVhRWxlbWVudChuYXRpdmVQYXJlbnRFbGVtZW50KSkge1xuICAgICAgLy8gcGFyZW50IGVsZW1lbnRzIG5lZWQgdG8gaGF2ZSBwb3N0aXRpb246cmVsYXRpdmUgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHk/XG4gICAgICB0aGlzLmNvb3Jkcy5zZXQoZ2V0Q2FyZXRDb29yZGluYXRlcyhuYXRpdmVQYXJlbnRFbGVtZW50LCBuYXRpdmVQYXJlbnRFbGVtZW50LnNlbGVjdGlvblN0YXJ0KSk7XG4gICAgICB0aGlzLmNvb3Jkcy51cGRhdGUoKGl0ZW0pID0+ICh7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHRvcDogbmF0aXZlUGFyZW50RWxlbWVudC5vZmZzZXRUb3AgKyBpdGVtLnRvcCAtIG5hdGl2ZVBhcmVudEVsZW1lbnQuc2Nyb2xsVG9wLFxuICAgICAgICBsZWZ0OiBuYXRpdmVQYXJlbnRFbGVtZW50Lm9mZnNldExlZnQgKyBpdGVtLmxlZnQgLSBuYXRpdmVQYXJlbnRFbGVtZW50LnNjcm9sbExlZnQgKyBuYXRpdmVQYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsXG4gICAgICB9KSk7XG5cbiAgICAgIC8vIGdldENyZXRDb29yZGluYXRlcygpIGZvciB0ZXh0L2lucHV0IGVsZW1lbnRzIG5lZWRzIGFuIGFkZGl0aW9uYWwgb2Zmc2V0IHRvIHBvc2l0aW9uIHRoZSBsaXN0IGNvcnJlY3RseVxuICAgICAgdGhpcy5vZmZzZXQuc2V0KHRoaXMuZ2V0QmxvY2tDdXJzb3JEaW1lbnNpb25zKG5hdGl2ZVBhcmVudEVsZW1lbnQpLmhlaWdodCk7XG4gICAgICB0aGlzLnBvc2l0aW9uRWxlbWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaWZyYW1lKSB7XG4gICAgICBjb25zdCBjb250ZXh0OiB7IGlmcmFtZTogSFRNTElGcmFtZUVsZW1lbnQ7IHBhcmVudDogRWxlbWVudCB8IG51bGw7IHdpbmRvd1BhcmVudD86IGJvb2xlYW4gfSA9IHsgaWZyYW1lOiBpZnJhbWUsIHBhcmVudDogd2luZG93LnBhcmVudC5kb2N1bWVudC5ib2R5LCB3aW5kb3dQYXJlbnQ6IHRydWUgfTtcbiAgICAgIC8vIGNvbnN0IHJlY3QgPSBpZnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjYXJldFJlbGF0aXZlVG9WaWV3ID0gZ2V0Q29udGVudEVkaXRhYmxlQ2FyZXRDb29yZHMoY29udGV4dCk7XG4gICAgICBjb25zdCBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKHdpbmRvdy5zY3JvbGxYIHx8IGRvYy5zY3JvbGxMZWZ0KSAtIChkb2MuY2xpZW50TGVmdCB8fCAwKTtcbiAgICAgIHRoaXMuY29vcmRzLnVwZGF0ZSgoaXRlbSkgPT4gKHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgbGVmdDogY2FyZXRSZWxhdGl2ZVRvVmlldy5sZWZ0IC0gc2Nyb2xsTGVmdCAtIChsZWZ0RGl2IHx8IDApLFxuICAgICAgICBib3R0b206IHdpbmRvdy5wYXJlbnQuaW5uZXJIZWlnaHQgLSBjYXJldFJlbGF0aXZlVG9WaWV3LnRvcCArIDE4LFxuICAgICAgfSkpO1xuICAgICAgaWYgKGNhcmV0UmVsYXRpdmVUb1ZpZXcuYm90dG9tICYmIGNhcmV0UmVsYXRpdmVUb1ZpZXcuYm90dG9tICE9PSAtMSkge1xuICAgICAgICB0aGlzLmNvb3Jkcy51cGRhdGUoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICBib3R0b206IGNhcmV0UmVsYXRpdmVUb1ZpZXcuYm90dG9tLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBvc2l0aW9uRWxlbWVudCgpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKHdpbmRvdy5zY3JvbGxYIHx8IGRvYy5zY3JvbGxMZWZ0KSAtIChkb2MuY2xpZW50TGVmdCB8fCAwKTtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAod2luZG93LnNjcm9sbFggfHwgZG9jLnNjcm9sbFRvcCkgLSAoZG9jLmNsaWVudFRvcCB8fCAwKTtcbiAgICAvLyBib3VuZGluZyByZWN0YW5nbGVzIGFyZSByZWxhdGl2ZSB0byB2aWV3LCBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byBjb250YWluZXI/XG4gICAgY29uc3QgY2FyZXRSZWxhdGl2ZVRvVmlldyA9IGdldENvbnRlbnRFZGl0YWJsZUNhcmV0Q29vcmRzKHsgaWZyYW1lLCBwYXJlbnQ6IG51bGwgfSk7XG5cbiAgICB0aGlzLmNvb3Jkcy51cGRhdGUoKGl0ZW0pID0+ICh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgdG9wOiBjYXJldFJlbGF0aXZlVG9WaWV3LnRvcCAtIHNjcm9sbFRvcCArIDEwLFxuICAgICAgbGVmdDogY2FyZXRSZWxhdGl2ZVRvVmlldy5sZWZ0IC0gc2Nyb2xsTGVmdCAtIChsZWZ0RGl2IHx8IDApLFxuICAgICAgYm90dG9tOiBjYXJldFJlbGF0aXZlVG9WaWV3LmJvdHRvbSxcbiAgICB9KSk7XG4gICAgdGhpcy5wb3NpdGlvbkVsZW1lbnQoKTtcbiAgfVxuXG4gIGdldCBBY3RpdmVJdGVtKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1zKClbdGhpcy5hY3RpdmVJbmRleCgpXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2soZXZlbnQ6IEV2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5hY3RpdmVJbmRleC5zZXQoaW5kZXgpO1xuICAgIHNldChldmVudCBhcyBLZXlib2FyZEV2ZW50LCAna2V5Q29kZScsIEtFWV9FTlRFUik7XG4gICAgdGhpcy5wYXJlbnRIYW5kbGVyS2V5RG93bigpPy4oZXZlbnQsIHRoaXMubmF0aXZlUGFyZW50RWxlbWVudCgpKTtcbiAgfVxuXG4gIGFjdGl2YXRlTmV4dEl0ZW0oKSB7XG4gICAgdGhpcy5hY3RpdmVJbmRleC5zZXQodGhpcy5pdGVtcygpLmxlbmd0aCAtIDEgPiB0aGlzLmFjdGl2ZUluZGV4KCkgPyB0aGlzLmFjdGl2ZUluZGV4KCkgKyAxIDogdGhpcy5hY3RpdmVJbmRleCgpKTtcbiAgICB0aGlzLnNjcm9sbFRvQWN0aXZlKCk7XG4gIH1cblxuICBhY3RpdmF0ZVByZXZpb3VzSXRlbSgpIHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4LnNldCh0aGlzLmFjdGl2ZUluZGV4KCkgPiAwID8gdGhpcy5hY3RpdmVJbmRleCgpIC0gMSA6IHRoaXMuYWN0aXZlSW5kZXgoKSk7XG4gICAgdGhpcy5zY3JvbGxUb0FjdGl2ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3NpdGlvbkVsZW1lbnQobGVmdDogbnVtYmVyID0gdGhpcy5jb29yZHMoKS5sZWZ0LCB0b3A6IG51bWJlciA9IHRoaXMuY29vcmRzKCkudG9wLCBkcm9wVXA6IGJvb2xlYW4gPSB0aGlzLmRyb3BVcCgpLCBib3R0b206IG51bWJlciA9IHRoaXMuY29vcmRzKCkuYm90dG9tIHx8IDApIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudEVsKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICB0b3AgKz0gZHJvcFVwID8gMCA6IHRoaXMub2Zmc2V0KCk7IC8vIHRvcCBvZiBsaXN0IGlzIG5leHQgbGluZVxuICAgIGVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBlbC5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7XG4gICAgZWwuc3R5bGUudG9wID0gYm90dG9tICE9PSAtMSA/ICdhdXRvJyA6IHRvcCArICdweCc7XG4gICAgZWwuc3R5bGUuYm90dG9tID0gYm90dG9tID09PSAtMSA/ICdhdXRvJyA6IGJvdHRvbSArICdweCc7XG4gICAgdGhpcy5uYXRpdmVQYXJlbnRFbGVtZW50KCk/Lm5vcm1hbGl6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCbG9ja0N1cnNvckRpbWVuc2lvbnMobmF0aXZlUGFyZW50RWxlbWVudDogSFRNTElucHV0RWxlbWVudCkge1xuICAgIGNvbnN0IHBhcmVudFN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5hdGl2ZVBhcmVudEVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogcGFyc2VGbG9hdChwYXJlbnRTdHlsZXMubGluZUhlaWdodCksXG4gICAgICB3aWR0aDogcGFyc2VGbG9hdChwYXJlbnRTdHlsZXMuZm9udFNpemUpLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQWN0aXZlSXRlbShldmVudDogRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmFjdGl2ZUluZGV4LnNldChpbmRleCk7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvQWN0aXZlKCkge1xuICAgIGlmICghdGhpcy5pdGVtc0VsKCkgfHwgdGhpcy5pdGVtc0VsKCkubGVuZ3RoIDw9IHRoaXMuYWN0aXZlSW5kZXgoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLml0ZW1zRWwoKVt0aGlzLmFjdGl2ZUluZGV4KCldLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgfVxuXG4gIHNjcm9sbENvbnRlbnQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50RWwoKTtcbiAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8ZGl2XG4gICNlbGVtZW50XG4gIGNsYXNzPVwibGlicy11aS1tZW50aW9uLWxpc3RcIlxuICBbc3R5bGUuekluZGV4XT1cInpJbmRleCgpXCJcbiAgW2NsYXNzLmhpZGRlbl09XCJoaWRkZW4oKVwiPlxuICBAZm9yIChpdGVtIG9mIGl0ZW1zKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICA8ZGl2XG4gICAgICAjaXRlbVxuICAgICAgY2xhc3M9XCJsaWJzLXVpLW1lbnRpb24tbGlzdC1pdGVtXCJcbiAgICAgIFtjbGFzcy5saWJzLXVpLW1lbnRpb24tbGlzdC1pdGVtLWFjdGl2ZV09XCIkaW5kZXggPT09IGFjdGl2ZUluZGV4KClcIlxuICAgICAgKG1vdXNlZG93bik9XCJoYW5kbGVyQ2xpY2soJGV2ZW50LCAkaW5kZXgpXCJcbiAgICAgIChtb3VzZWVudGVyKT1cImhhbmRsZUFjdGl2ZUl0ZW0oJGV2ZW50LCAkaW5kZXgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHgtWzEycHhdIHB5LVs2cHhdIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYXZhdGFyXG4gICAgICAgICAgW3NpemVdPVwiMjRcIlxuICAgICAgICAgIFtsaW5rQXZhdGFyXT1cIml0ZW0uYXZhdGFyXCJcbiAgICAgICAgICBbbGlua0F2YXRhckVycm9yXT1cImRlZmF1bHRBdmF0YXIoKVwiXG4gICAgICAgICAgW2dldExhc3RUZXh0QWZ0ZXJTcGFjZV09XCJ0cnVlXCJcbiAgICAgICAgICBbdGV4dEF2YXRhcl09XCJpdGVtLm5hbWVcIlxuICAgICAgICAgIFtpZEdlbkNvbG9yXT1cIml0ZW0uaWRcIiAvPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidsaWJzLXVpLWZvbnQtaDVyJ1wiXG4gICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7IHdpZHRoOiAyNTAgfVwiPlxuICAgICAgICAgIDwhLS0gLy8gdGEubSDhuqluIHNob3cgdG9vbHRpcCB2w6wgY2jGsGEgeOG7rSBsw70gxJFjIHbhu4sgdHLDrSAtLT5cbiAgICAgICAgICB7eyBpdGVtLm5hbWUgKyAnICgnICsgaXRlbS51c2VybmFtZSArICcpJyB9fVxuICAgICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
|