@vgip/meta-ui 1.4.3 → 1.5.0
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/esm2020/lib/common/metaAutofocus.directive.mjs +3 -3
- package/esm2020/lib/common/metaIcons.pipe.mjs +3 -3
- package/esm2020/lib/common/metaModel.pipe.mjs +3 -3
- package/esm2020/lib/common/metaNormalizer.mjs +10 -8
- package/esm2020/lib/common/metaStripHtml.pipe.mjs +3 -3
- package/esm2020/lib/common/utils/colorThemes.mjs +3 -1
- package/esm2020/lib/field.mjs +220 -189
- package/esm2020/lib/fieldAbstract.mjs +65 -65
- package/esm2020/lib/fieldBoolean/index.mjs +4 -4
- package/esm2020/lib/fieldDatetime/index.mjs +8 -8
- package/esm2020/lib/fieldInput/index.mjs +7 -7
- package/esm2020/lib/fieldRadio/index.mjs +8 -8
- package/esm2020/lib/fieldRichtext/index.mjs +8 -8
- package/esm2020/lib/fieldText/index.mjs +4 -4
- package/esm2020/lib/fieldUnknown/index.mjs +3 -3
- package/esm2020/lib/index.mjs +19 -21
- package/esm2020/lib/services/metaContext/index.mjs +3 -3
- package/esm2020/lib/services/metaMsg/index.mjs +3 -3
- package/esm2020/lib/services/metaReference/index.mjs +3 -3
- package/esm2020/lib/services/metaResource/index.mjs +3 -3
- package/esm2020/lib/services/metaResource/metaHttpClient.mjs +3 -3
- package/esm2020/lib/services/metaTracker/index.mjs +3 -3
- package/esm2020/lib/services/resourceDrafts/index.mjs +3 -3
- package/fesm2015/vgip-meta-ui.mjs +380 -347
- package/fesm2015/vgip-meta-ui.mjs.map +1 -1
- package/fesm2020/vgip-meta-ui.mjs +380 -347
- package/fesm2020/vgip-meta-ui.mjs.map +1 -1
- package/{vgip-meta-ui.d.ts → index.d.ts} +0 -0
- package/lib/common/metaAutofocus.directive.d.ts +1 -1
- package/lib/common/metaIcons.pipe.d.ts +1 -1
- package/lib/common/metaModel.pipe.d.ts +1 -1
- package/lib/common/metaStripHtml.pipe.d.ts +1 -1
- package/lib/field.d.ts +32 -26
- package/lib/fieldAbstract.d.ts +9 -9
- package/lib/fieldBoolean/index.d.ts +1 -1
- package/lib/fieldDatetime/index.d.ts +2 -2
- package/lib/fieldInput/index.d.ts +2 -2
- package/lib/fieldRadio/index.d.ts +2 -2
- package/lib/fieldRichtext/index.d.ts +1 -1
- package/lib/fieldText/index.d.ts +1 -1
- package/lib/fieldUnknown/index.d.ts +1 -1
- package/package.json +5 -5
package/esm2020/lib/field.mjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @Author: Alexander.Vangelov@vonage.com
|
|
3
3
|
* @Date: 2019-09-19 17:35:19
|
|
4
4
|
* @Last Modified by: Alexander.Vangelov@vonage.com
|
|
5
|
-
* @Last Modified time:
|
|
5
|
+
* @Last Modified time: 2023-01-17 12:48:56
|
|
6
6
|
*/
|
|
7
7
|
import { Directive, Component, Input, Output, ViewChild, EventEmitter } from '@angular/core';
|
|
8
8
|
import { ControlContainer, NgForm } from '@angular/forms';
|
|
@@ -48,6 +48,12 @@ export class MetaRefDialog {
|
|
|
48
48
|
}
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
|
+
get isEditable() {
|
|
52
|
+
return this.resources[this.currentResource].meta.layout.editable !== false;
|
|
53
|
+
}
|
|
54
|
+
get isPersistent() {
|
|
55
|
+
return this.resource && (this.resource.externalId || this.resource.id);
|
|
56
|
+
}
|
|
51
57
|
ngOnInit() {
|
|
52
58
|
let references = (this.reference instanceof Array) ? this.reference : [this.reference];
|
|
53
59
|
/* eslint-disable no-underscore-dangle */
|
|
@@ -121,12 +127,6 @@ export class MetaRefDialog {
|
|
|
121
127
|
}
|
|
122
128
|
this.applyTheme();
|
|
123
129
|
}
|
|
124
|
-
get isEditable() {
|
|
125
|
-
return this.resources[this.currentResource].meta.layout.editable !== false;
|
|
126
|
-
}
|
|
127
|
-
get isPersistent() {
|
|
128
|
-
return this.resource && (this.resource.externalId || this.resource.id);
|
|
129
|
-
}
|
|
130
130
|
close() {
|
|
131
131
|
this.modal.classList.remove('Vlt-modal_visible');
|
|
132
132
|
this.modal.classList.add('Vlt-modal--out');
|
|
@@ -149,14 +149,25 @@ export class MetaRefDialog {
|
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
|
-
MetaRefDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
153
|
-
MetaRefDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
154
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
152
|
+
MetaRefDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaRefDialog, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
153
|
+
MetaRefDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: MetaRefDialog, selector: "ng-component", ngImport: i0, template: "<div class='Vlt-modal Vlt-modal--large'>\n <div class=\"Vlt-modal__panel\">\n <div class=\"Vlt-tabs\">\n <div class='Vlt-tabs__header--background'>\n <div class=\"Vlt-tabs__header Vlt-tabs__header--shadow\">\n <svg class=\"Vlt-icon\" [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" /></svg>\n <div *ngFor='let r of resources | keyvalue: keepOrder' (click)='selectResource(r.key)' class=\"Vlt-tabs__link\" [ngClass]=\"{ 'Vlt-tabs__link_active': currentResource === r.key}\">\n {{r.key}}\n </div>\n <div class=\"Vlt-modal__dismiss\" (click)=\"dismiss()\">\n <svg class=\"Vlt-icon\"><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\" /></svg>\n </div>\n </div>\n </div>\n <div class=\"Vlt-tabs__content\" style='min-height: 90px;'>\n <ng-container *ngFor='let r of resources | keyvalue: keepOrder'>\n <div *ngIf='currentResource === r.key' class=\"Vlt-tabs__panel Vlt-tabs__panel_active\">\n <vgip-meta-resource [resource]='r.value' [model]='models[r.key]' [metaResourceServiceDelegated]='metaResource' (done)='onResourceDone($event)' theme='inherit' [attr.data-theme]='theme'></vgip-meta-resource>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [".Vlt-modal_visible{background:var(--vgip-meta-overlay-background)}.Vlt-modal__panel{padding:0;background:var(--vgip-meta-resource-bg-color);overflow:hidden}@media only screen and (max-width: 575px){.Vlt-modal__panel{height:100%;width:100%;max-height:none;border-bottom-left-radius:0;border-bottom-right-radius:0;margin:10px 6px 0}.Vlt-modal__panel ::ng-deep .busy-mask{min-height:calc(100vh - 58px)}}.Vlt-modal__panel .Vlt-tabs__header--background{border-top-left-radius:5px;border-top-right-radius:5px}.Vlt-modal__panel .Vlt-tabs__header{background:var(--vgip-meta-resource-bar-color);padding-left:52px;padding-right:45px;border-bottom:0;flex-wrap:wrap;min-height:52px;max-height:52px;align-items:center}.Vlt-modal__panel .Vlt-tabs__header>.Vlt-icon{position:absolute;left:14px}.Vlt-modal__panel .Vlt-tabs__header h5{margin-bottom:0;font-weight:initial}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link{padding-top:4px;padding-bottom:2px;color:var(--vgip-meta-input-label-color);text-transform:capitalize}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link_active{color:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link_active:after{background:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss{background-image:none;width:18px;height:18px;opacity:initial}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss svg{width:16px;height:16px;fill:var(--vgip-meta-input-label-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss:hover svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header::-webkit-scrollbar{width:8px}.Vlt-modal__panel .Vlt-tabs__header::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-modal__panel .Vlt-tabs__content{margin-top:0}.Vlt-modal__panel .Vlt-tabs__content .Vlt-tabs__link{font-size:1.8rem}.Vlt-modal__panel .Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-modal__panel .Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-modal__panel .Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-modal__panel .Vlt-modal__cancel{z-index:899}.Vlt-modal__panel .Vlt-modal__dismiss{right:16px;top:14px}.Vlt-modal__panel .Vlt-card__footer button{margin-top:0;margin-bottom:0}.Vlt-modal__panel .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-modal__panel ::ng-deep .form-content{min-height:0;max-height:calc(95vh - 172px)}@media only screen and (max-width: 575px){.Vlt-modal__panel ::ng-deep .form-content{min-height:calc(100vh - 113px)}}.resource-menu button{margin:0 -10px}.resource-menu button:not(:hover) .Vlt-icon{color:#616266;fill:#616266}.busy-mask{position:absolute;inset:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i0.forwardRef(function () { return MetaResource; }), selector: "vgip-meta-resource", inputs: ["resource", "model", "metaResourceServiceDelegated", "theme"], outputs: ["done"] }, { kind: "pipe", type: i0.forwardRef(function () { return i1.KeyValuePipe; }), name: "keyvalue" }] });
|
|
154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaRefDialog, decorators: [{
|
|
155
155
|
type: Component,
|
|
156
|
-
args: [{ template: "<div class='Vlt-modal Vlt-modal--large'>\n <div class=\"Vlt-modal__panel\">\n <div class=\"Vlt-tabs\">\n <div class='Vlt-tabs__header--background'>\n <div class=\"Vlt-tabs__header Vlt-tabs__header--shadow\">\n <svg class=\"Vlt-icon\" [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" /></svg>\n <div *ngFor='let r of resources | keyvalue: keepOrder' (click)='selectResource(r.key)' class=\"Vlt-tabs__link\" [ngClass]=\"{ 'Vlt-tabs__link_active': currentResource === r.key}\">\n {{r.key}}\n </div>\n <div class=\"Vlt-modal__dismiss\" (click)=\"dismiss()\">\n <svg class=\"Vlt-icon\"><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\" /></svg>\n </div>\n </div>\n </div>\n <div class=\"Vlt-tabs__content\" style='min-height: 90px;'>\n <ng-container *ngFor='let r of resources | keyvalue: keepOrder'>\n <div *ngIf='currentResource === r.key' class=\"Vlt-tabs__panel Vlt-tabs__panel_active\">\n <vgip-meta-resource [resource]='r.value' [model]='models[r.key]' [metaResourceServiceDelegated]='metaResource' (done)='onResourceDone($event)' theme='inherit' [attr.data-theme]='theme'></vgip-meta-resource>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [".Vlt-modal_visible{background:var(--vgip-meta-overlay-background)}.Vlt-modal__panel{padding:0;background:var(--vgip-meta-resource-bg-color);overflow:hidden}@media only screen and (max-width: 575px){.Vlt-modal__panel{height:100%;width:100%;max-height:none;border-bottom-left-radius:0;border-bottom-right-radius:0;margin:10px 6px 0}.Vlt-modal__panel ::ng-deep .busy-mask{min-height:calc(100vh - 58px)}}.Vlt-modal__panel .Vlt-tabs__header--background{border-top-left-radius:5px;border-top-right-radius:5px}.Vlt-modal__panel .Vlt-tabs__header{background:var(--vgip-meta-resource-bar-color);padding-left:52px;padding-right:45px;border-bottom:0;flex-wrap:wrap;min-height:52px;max-height:52px;align-items:center}.Vlt-modal__panel .Vlt-tabs__header>.Vlt-icon{position:absolute;left:14px}.Vlt-modal__panel .Vlt-tabs__header h5{margin-bottom:0;font-weight:initial}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link{padding-top:4px;padding-bottom:2px;color:var(--vgip-meta-input-label-color);text-transform:capitalize}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link_active{color:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link_active:after{background:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss{background-image:none;width:18px;height:18px;opacity:initial}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss svg{width:16px;height:16px;fill:var(--vgip-meta-input-label-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss:hover svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header::-webkit-scrollbar{width:8px}.Vlt-modal__panel .Vlt-tabs__header::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-modal__panel .Vlt-tabs__content{margin-top:0}.Vlt-modal__panel .Vlt-tabs__content .Vlt-tabs__link{font-size:1.8rem}.Vlt-modal__panel .Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-modal__panel .Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-modal__panel .Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-modal__panel .Vlt-modal__cancel{z-index:899}.Vlt-modal__panel .Vlt-modal__dismiss{right:16px;top:14px}.Vlt-modal__panel .Vlt-card__footer button{margin-top:0;margin-bottom:0}.Vlt-modal__panel .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-modal__panel ::ng-deep .form-content{min-height:0;max-height:calc(95vh - 172px)}@media only screen and (max-width: 575px){.Vlt-modal__panel ::ng-deep .form-content{min-height:calc(100vh - 113px)}}.resource-menu button{margin:0 -10px}.resource-menu button:not(:hover) .Vlt-icon{color:#616266;fill:#616266}.busy-mask{position:absolute;
|
|
156
|
+
args: [{ template: "<div class='Vlt-modal Vlt-modal--large'>\n <div class=\"Vlt-modal__panel\">\n <div class=\"Vlt-tabs\">\n <div class='Vlt-tabs__header--background'>\n <div class=\"Vlt-tabs__header Vlt-tabs__header--shadow\">\n <svg class=\"Vlt-icon\" [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\" /></svg>\n <div *ngFor='let r of resources | keyvalue: keepOrder' (click)='selectResource(r.key)' class=\"Vlt-tabs__link\" [ngClass]=\"{ 'Vlt-tabs__link_active': currentResource === r.key}\">\n {{r.key}}\n </div>\n <div class=\"Vlt-modal__dismiss\" (click)=\"dismiss()\">\n <svg class=\"Vlt-icon\"><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\" /></svg>\n </div>\n </div>\n </div>\n <div class=\"Vlt-tabs__content\" style='min-height: 90px;'>\n <ng-container *ngFor='let r of resources | keyvalue: keepOrder'>\n <div *ngIf='currentResource === r.key' class=\"Vlt-tabs__panel Vlt-tabs__panel_active\">\n <vgip-meta-resource [resource]='r.value' [model]='models[r.key]' [metaResourceServiceDelegated]='metaResource' (done)='onResourceDone($event)' theme='inherit' [attr.data-theme]='theme'></vgip-meta-resource>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n", styles: [".Vlt-modal_visible{background:var(--vgip-meta-overlay-background)}.Vlt-modal__panel{padding:0;background:var(--vgip-meta-resource-bg-color);overflow:hidden}@media only screen and (max-width: 575px){.Vlt-modal__panel{height:100%;width:100%;max-height:none;border-bottom-left-radius:0;border-bottom-right-radius:0;margin:10px 6px 0}.Vlt-modal__panel ::ng-deep .busy-mask{min-height:calc(100vh - 58px)}}.Vlt-modal__panel .Vlt-tabs__header--background{border-top-left-radius:5px;border-top-right-radius:5px}.Vlt-modal__panel .Vlt-tabs__header{background:var(--vgip-meta-resource-bar-color);padding-left:52px;padding-right:45px;border-bottom:0;flex-wrap:wrap;min-height:52px;max-height:52px;align-items:center}.Vlt-modal__panel .Vlt-tabs__header>.Vlt-icon{position:absolute;left:14px}.Vlt-modal__panel .Vlt-tabs__header h5{margin-bottom:0;font-weight:initial}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link{padding-top:4px;padding-bottom:2px;color:var(--vgip-meta-input-label-color);text-transform:capitalize}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link_active{color:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-tabs__link_active:after{background:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss{background-image:none;width:18px;height:18px;opacity:initial}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss svg{width:16px;height:16px;fill:var(--vgip-meta-input-label-color)}.Vlt-modal__panel .Vlt-tabs__header .Vlt-modal__dismiss:hover svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-modal__panel .Vlt-tabs__header::-webkit-scrollbar{width:8px}.Vlt-modal__panel .Vlt-tabs__header::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-modal__panel .Vlt-tabs__content{margin-top:0}.Vlt-modal__panel .Vlt-tabs__content .Vlt-tabs__link{font-size:1.8rem}.Vlt-modal__panel .Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-modal__panel .Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-modal__panel .Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-modal__panel .Vlt-modal__cancel{z-index:899}.Vlt-modal__panel .Vlt-modal__dismiss{right:16px;top:14px}.Vlt-modal__panel .Vlt-card__footer button{margin-top:0;margin-bottom:0}.Vlt-modal__panel .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-modal__panel ::ng-deep .form-content{min-height:0;max-height:calc(95vh - 172px)}@media only screen and (max-width: 575px){.Vlt-modal__panel ::ng-deep .form-content{min-height:calc(100vh - 113px)}}.resource-menu button{margin:0 -10px}.resource-menu button:not(:hover) .Vlt-icon{color:#616266;fill:#616266}.busy-mask{position:absolute;inset:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"] }]
|
|
157
157
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
|
|
158
158
|
//// COMPOSITE FIELD
|
|
159
159
|
export class FieldComposite extends FieldAbstract {
|
|
160
|
+
get isRow() {
|
|
161
|
+
return this.meta.subtype !== 'column';
|
|
162
|
+
}
|
|
163
|
+
get fields() {
|
|
164
|
+
return (this.meta.fields || []).map((f) => {
|
|
165
|
+
if (f.type === 'textarea') { // no textareas inside composite (use string)
|
|
166
|
+
delete f.type;
|
|
167
|
+
}
|
|
168
|
+
return f;
|
|
169
|
+
});
|
|
170
|
+
}
|
|
160
171
|
ngOnInit() {
|
|
161
172
|
// super.ngOnInit()
|
|
162
173
|
let nestedFieldsRegex;
|
|
@@ -195,21 +206,10 @@ export class FieldComposite extends FieldAbstract {
|
|
|
195
206
|
this.value = this.parent;
|
|
196
207
|
}
|
|
197
208
|
}
|
|
198
|
-
get isRow() {
|
|
199
|
-
return this.meta.subtype !== 'column';
|
|
200
|
-
}
|
|
201
|
-
get fields() {
|
|
202
|
-
return (this.meta.fields || []).map((f) => {
|
|
203
|
-
if (f.type === 'textarea') { // no textareas inside composite (use string)
|
|
204
|
-
delete f.type;
|
|
205
|
-
}
|
|
206
|
-
return f;
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
209
|
}
|
|
210
|
-
FieldComposite.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
211
|
-
FieldComposite.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
212
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
210
|
+
FieldComposite.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: FieldComposite, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
211
|
+
FieldComposite.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: FieldComposite, selector: "ng-component", inputs: { meta: "meta" }, usesInheritance: true, ngImport: i0, template: "<div [ngClass]=\"{ 'Vlt-grid Vlt-grid--narrow': isRow }\" >\n <div style='margin: 0;' [ngClass]=\"{ 'Vlt-col': isRow, 'Vlt-col--1of3': isRow && fields.length > 3 }\" *ngFor='let field of fields'>\n <vgip-meta-field *ngIf='!meta.$invisible' class='shown' [index]='index' [meta]='field' [parent]='value' [integrationCode]='integrationCode' [resourceType]='resourceType' [preview]='preview' theme='inherit'></vgip-meta-field>\n </div>\n</div>\n", styles: ["div>vgip-meta-field{display:none}div>vgip-meta-field.shown{display:initial}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(function () { return MetaField; }), selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "preview", "theme"], outputs: ["onChange", "onLeave"] }] });
|
|
212
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: FieldComposite, decorators: [{
|
|
213
213
|
type: Component,
|
|
214
214
|
args: [{ template: "<div [ngClass]=\"{ 'Vlt-grid Vlt-grid--narrow': isRow }\" >\n <div style='margin: 0;' [ngClass]=\"{ 'Vlt-col': isRow, 'Vlt-col--1of3': isRow && fields.length > 3 }\" *ngFor='let field of fields'>\n <vgip-meta-field *ngIf='!meta.$invisible' class='shown' [index]='index' [meta]='field' [parent]='value' [integrationCode]='integrationCode' [resourceType]='resourceType' [preview]='preview' theme='inherit'></vgip-meta-field>\n </div>\n</div>\n", styles: ["div>vgip-meta-field{display:none}div>vgip-meta-field.shown{display:initial}\n"] }]
|
|
215
215
|
}], propDecorators: { meta: [{
|
|
@@ -227,9 +227,14 @@ export class FieldSelect extends FieldAbstract {
|
|
|
227
227
|
if (event.target.className === 'Vlt-dropdown__link' && this.elementRef.nativeElement.contains(event.target)) {
|
|
228
228
|
this.focus();
|
|
229
229
|
}
|
|
230
|
-
else if (event.target !== this.input &&
|
|
230
|
+
else if (event.target !== this.input &&
|
|
231
|
+
!event.target.classList.contains('Vlt-dropdown__block') &&
|
|
232
|
+
!this.detectSearchBlock(event.target)) {
|
|
231
233
|
this.dismissDropdown();
|
|
232
234
|
}
|
|
235
|
+
else if (this.detectSearchBlock(event.target)) {
|
|
236
|
+
event.target.focus();
|
|
237
|
+
}
|
|
233
238
|
else {
|
|
234
239
|
this.focus();
|
|
235
240
|
}
|
|
@@ -296,8 +301,31 @@ export class FieldSelect extends FieldAbstract {
|
|
|
296
301
|
}
|
|
297
302
|
};
|
|
298
303
|
}
|
|
299
|
-
|
|
304
|
+
get options() {
|
|
305
|
+
return this.filteredOptions || this.asyncOptions || this.meta.options || this.meta.picklist || [];
|
|
306
|
+
}
|
|
307
|
+
get groupedOptions() {
|
|
308
|
+
return this.options.reduce((r, { group }) => {
|
|
309
|
+
if (!r.some(o => o.group === group)) {
|
|
310
|
+
r.push({ group, groupItem: this.options.filter(v => v.group === group) });
|
|
311
|
+
}
|
|
312
|
+
return r;
|
|
313
|
+
}, []);
|
|
300
314
|
}
|
|
315
|
+
get resourceService() {
|
|
316
|
+
if (!this.metaResourceService) {
|
|
317
|
+
const metaResourceConfig = {
|
|
318
|
+
integrationCode: this.integrationCode,
|
|
319
|
+
resourceType: this.resourceType
|
|
320
|
+
};
|
|
321
|
+
this.metaResourceService = this.metaResource.new(metaResourceConfig);
|
|
322
|
+
}
|
|
323
|
+
return this.metaResourceService;
|
|
324
|
+
}
|
|
325
|
+
get optionsBackup() {
|
|
326
|
+
return this.asyncOptions || this.meta.options || this.meta.picklist || [];
|
|
327
|
+
}
|
|
328
|
+
static setup(instance, parent, meta) { }
|
|
301
329
|
ngOnInit() {
|
|
302
330
|
// console.log('parent', this.parent);
|
|
303
331
|
this.validationAttributes = ['required'];
|
|
@@ -429,10 +457,13 @@ export class FieldSelect extends FieldAbstract {
|
|
|
429
457
|
}
|
|
430
458
|
this.showDropdown();
|
|
431
459
|
}
|
|
460
|
+
detectSearchBlock(element) {
|
|
461
|
+
return this.elementRef.nativeElement.querySelector('.Vlt-search_wrap').contains(element);
|
|
462
|
+
}
|
|
432
463
|
onBlur(ev) {
|
|
433
464
|
let internalControl = false;
|
|
434
465
|
if (ev.relatedTarget) {
|
|
435
|
-
if (!this.elementRef.nativeElement.contains(ev.relatedTarget)) {
|
|
466
|
+
if (!this.detectSearchBlock(ev.relatedTarget) && !this.elementRef.nativeElement.contains(ev.relatedTarget)) {
|
|
436
467
|
this.dismissDropdown();
|
|
437
468
|
}
|
|
438
469
|
else {
|
|
@@ -543,6 +574,17 @@ export class FieldSelect extends FieldAbstract {
|
|
|
543
574
|
}
|
|
544
575
|
delete this.activeSuggestionIndex;
|
|
545
576
|
}
|
|
577
|
+
onSearchChange() {
|
|
578
|
+
const search = new RegExp(this.searchInput, 'gi');
|
|
579
|
+
if (this.searchInput === '') {
|
|
580
|
+
this.filteredOptions = [...this.optionsBackup];
|
|
581
|
+
}
|
|
582
|
+
this.filteredOptions = this.optionsBackup.filter(option => option.label.match(search));
|
|
583
|
+
}
|
|
584
|
+
clearSearchField() {
|
|
585
|
+
this.searchInput = '';
|
|
586
|
+
this.onSearchChange();
|
|
587
|
+
}
|
|
546
588
|
ensureDropdownIsVisible() {
|
|
547
589
|
setTimeout(() => {
|
|
548
590
|
const holder = this.dropdown.closest('.Vlt-card__content');
|
|
@@ -589,17 +631,6 @@ export class FieldSelect extends FieldAbstract {
|
|
|
589
631
|
}
|
|
590
632
|
}
|
|
591
633
|
}
|
|
592
|
-
get options() {
|
|
593
|
-
return this.asyncOptions || this.meta.options || this.meta.picklist || [];
|
|
594
|
-
}
|
|
595
|
-
get groupedOptions() {
|
|
596
|
-
return this.options.reduce((r, { group }) => {
|
|
597
|
-
if (!r.some(o => o.group === group)) {
|
|
598
|
-
r.push({ group, groupItem: this.options.filter(v => v.group === group) });
|
|
599
|
-
}
|
|
600
|
-
return r;
|
|
601
|
-
}, []);
|
|
602
|
-
}
|
|
603
634
|
searchOptions(params) {
|
|
604
635
|
let searchUrl = `/fields/${this.meta.name}/search`;
|
|
605
636
|
if (this.meta.search) {
|
|
@@ -633,22 +664,12 @@ export class FieldSelect extends FieldAbstract {
|
|
|
633
664
|
delete this.searching;
|
|
634
665
|
});
|
|
635
666
|
}
|
|
636
|
-
get resourceService() {
|
|
637
|
-
if (!this.metaResourceService) {
|
|
638
|
-
const metaResourceConfig = {
|
|
639
|
-
integrationCode: this.integrationCode,
|
|
640
|
-
resourceType: this.resourceType
|
|
641
|
-
};
|
|
642
|
-
this.metaResourceService = this.metaResource.new(metaResourceConfig);
|
|
643
|
-
}
|
|
644
|
-
return this.metaResourceService;
|
|
645
|
-
}
|
|
646
667
|
}
|
|
647
|
-
FieldSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
648
|
-
FieldSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: FieldSelect, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n {{model.label || model.id || model}}\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element\" [ngClass]=\"{ 'Vlt-form__element--big': !meta.small ,'has-value': f.value, active: keyListenerActive, 'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched), 'no-x': meta.noX }\">\n\t<div class=\"Vlt-composite Vlt-dropdown Vlt-input\" style='display: block;' [ngClass]=\"{ 'has-append-button': isCreatable && !disabled }\">\n\t\t<div class=\"Vlt-select\">\n\t\t\t<label class='wrapper'>\n\t\t\t\t<label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required && options.length' class='Vlt-red'>*</span></label>\n\t\t\t\t<input class='main' [required]='validations.required && !!options.length' readonly [ngModel]='showText' #ft='ngModel' [ngModelOptions]=\"{standalone: true}\" type=\"text\" [placeholder]=\"meta.placeholder || ' '\" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [ngClass]=\"{ 'standalone': meta.standalone }\" [disabled]='disabled || !options.length' [attr.aria-label]='meta.label'/>\n\t\t\t</label>\n\t\t\t<select class='model' [required]='validations.required && !!options.length' style='display: none;' [(ngModel)]='model' [ngModelOptions]=\"{standalone: meta.standalone}\" (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name'></select>\n\t\t\t<div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n\t\t\t</div>\n\t\t\t<div class='Vlt-composite__append right-actions'>\n <div *ngIf='model && !meta.noX && !disabled' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n </div>\n\t\t</div>\n\t\t<div class='Vlt-dropdown__panel'>\n\t\t\t<div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\">\n\t\t\t\t<!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 15px;'>\n\t\t\t\t\tSelect ({{options.length}})\n\t\t\t\t\t<div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div> -->\n\t\t\t\t<div class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='dropdown' class='Vlt-dropdown__scroll'>\n\t\t\t\t\t<div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onOptionSelect($event, option)' *ngFor='let option of options; let i = index' class=\"Vlt-dropdown__link\">\n\t\t\t\t\t\t<div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__button\">\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" [checked]='model && model.indexOf(option) !== -1'/>\n\t\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__icon\"></span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{{option.label || (option.id === '' ? '--empty--' : option)}}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div *ngIf='!multiple' style='padding: 12px 20px;'>{{option.label || (option.id === '' ? '--empty--' : option)}}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\" style='margin-right: 8px;'>Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- <span *ngIf='isCreatable'>\n <button type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n\t\t</span> -->\n\t\t<div *ngIf='isCreatable && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon add-button\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n </div>\n\t</div>\n\t<small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n\t\t<span *ngIf=\"f.errors.required\">Required. </span>\n\t\t<span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n\t</small>\n\t<small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>", styles: [".Vlt-form__element.no-x input.main{padding-right:40px}.Vlt-form__element--big:not(.has-value)>.Vlt-input>.Vlt-select>label>label{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big input[readonly].main:not([disabled]){background:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color)}.Vlt-form__element--big:hover input[readonly].main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:focus input[readonly].main,.Vlt-form__element--big:focus .Vlt-composite__append button,.Vlt-form__element--big.active input[readonly].main,.Vlt-form__element--big.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button{border-color:#f25a6b;box-shadow:none}.Vlt-form__element--big .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon);margin-right:2px}.Vlt-form__element--big .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}.Vlt-composite.has-append-button input[readonly].main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-composite.has-append-button .Vlt-select:after{margin-right:-10px}.Vlt-composite__append{z-index:initial}.Vlt-composite__append button{height:48px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-right:16px;padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link{padding:0 20px 0 0}.Vlt-dropdown__panel .Vlt-dropdown__link.Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}input.main{cursor:pointer;padding-right:76px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:42px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:53px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "metaModel": i5.MetaModelPipe }, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
649
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
668
|
+
FieldSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: FieldSelect, deps: [{ token: i0.ComponentFactoryResolver }, { token: i2.MetaReferenceService }, { token: i3.MetaResourceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
669
|
+
FieldSelect.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: FieldSelect, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n {{model.label || model.id || model}}\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element\"\n [ngClass]=\"{ 'Vlt-form__element--big': !meta.small ,'has-value': f.value, active: keyListenerActive, 'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched), 'no-x': meta.noX }\">\n <div class=\"Vlt-composite Vlt-dropdown Vlt-input\" style='display: block;'\n [ngClass]=\"{ 'has-append-button': isCreatable && !disabled }\">\n <div class=\"Vlt-select\">\n <label class='wrapper'>\n <label class='Vlt-truncate'>{{meta.label || meta.name}}<span\n *ngIf='validations.required && options.length' class='Vlt-red'>*</span></label>\n <input class='main' [required]='validations.required && !!options.length' readonly [ngModel]='showText'\n #ft='ngModel' [ngModelOptions]=\"{standalone: true}\" type=\"text\"\n [placeholder]=\"meta.placeholder || ' '\" (click)='onActivated($event)' (focus)='onActivated($event)'\n (blur)='onBlur($event)' [ngClass]=\"{ 'standalone': meta.standalone }\"\n [disabled]='disabled' [attr.aria-label]='meta.label' />\n </label>\n <select class='model' [required]='validations.required && !!options.length' style='display: none;'\n [(ngModel)]='model' [ngModelOptions]=\"{standalone: meta.standalone}\"\n (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name'></select>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <div *ngIf='model && !meta.noX && !disabled' class=\"Vlt-composite__append--icon\"\n (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\" />\n </svg>\n </div>\n </div>\n </div>\n </div>\n <div class='Vlt-dropdown__panel'>\n <div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\">\n <!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 15px;'>\n Select ({{options.length}})\n <div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n <svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div> -->\n <div class=\"Vlt-dropdown__block Vlt-search_wrap\">\n <div *ngIf=\"optionsBackup.length > 12\" class=\"Vlt-composite\">\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\"\n style=\"top: 0; padding-top: 15px;\">\n <div class=\"Vlt-composite__icon\">\n <svg class='Vlt-grey'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-search\"></use>\n </svg>\n </div>\n </div>\n <div class=\"Vlt-input\">\n <input type=\"text\" class=\"vgip-search_input\" [(ngModel)]=\"searchInput\" placeholder=\"Search\" (input)=\"onSearchChange()\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n <div class=\"Vlt-composite__append--icon\"\n style=\"top: 2px;\" (click)=\"clearSearchField()\" [hidden]=\"searchInput === ''\">\n <div class=\"Vlt-composite__icon\">\n <svg class='Vlt-icon Vlt-icon--small'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/>\n </svg>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf='dropdown' class='Vlt-dropdown__scroll'>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\"\n (click)='onOptionSelect($event, option)' *ngFor='let option of options; let i = index'\n class=\"Vlt-dropdown__link\">\n <div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n <label>\n <span class=\"Vlt-checkbox__button\">\n <input type=\"checkbox\" [checked]='model && model.indexOf(option) !== -1' />\n <span class=\"Vlt-checkbox__icon\"></span>\n </span>\n {{option.label || (option.id === '' ? '--empty--' : option)}}\n </label>\n </div>\n <div *ngIf='!multiple' style='padding: 12px 20px;'>{{option.label || (option.id === '' ?\n '--empty--' : option)}}</div>\n </div>\n <!-- No Option Found -->\n <div class=\"Vlt-dropdown__link\" *ngIf=\"options.length === 0\">\n <div style='padding: 12px 20px;'>No Option Found</div>\n </div>\n </div>\n <div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\"\n style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button'\n class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\"\n style='margin-right: 8px;'>Clear all</button>\n <button (click)='dismissDropdown($event)' type='button'\n class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n </div>\n </div>\n <!-- <span *ngIf='isCreatable'>\n <button type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n </span> -->\n <div *ngIf='isCreatable && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' (click)='openResource($event)'\n class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon add-button\" aria-label='Add new'>\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\" />\n </svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))'\n class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required. </span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n </small>\n <small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element.no-x input.main{padding-right:40px}.Vlt-form__element--big:not(.has-value)>.Vlt-input>.Vlt-select>label>label{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big input[readonly].main:not([disabled]){background:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color)}.Vlt-form__element--big:hover input[readonly].main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:focus input[readonly].main,.Vlt-form__element--big:focus .Vlt-composite__append button,.Vlt-form__element--big.active input[readonly].main,.Vlt-form__element--big.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button{border-color:#f25a6b;box-shadow:none}.Vlt-form__element--big .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon);margin-right:2px}.Vlt-form__element--big .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}.Vlt-composite.has-append-button input[readonly].main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-composite.has-append-button .Vlt-select:after{margin-right:-10px}.Vlt-composite__append{z-index:initial}.Vlt-composite__append button{height:48px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-right:16px;padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link{padding:0 20px 0 0}.Vlt-dropdown__panel .Vlt-dropdown__link.Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}input.main{cursor:pointer;padding-right:76px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:42px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:53px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-search_wrap{padding-top:10px}.Vlt-search_wrap .vgip-search_input{padding:8px 36px 8px 38px;width:100%;border:1px solid var(--vgip-meta-input-border-color)!important;border-radius:6px!important}.Vlt-search_wrap .vgip-search_input:focus,.Vlt-search_wrap .vgip-search_input:active,.Vlt-search_wrap .vgip-search_input:hover{border-color:var(--vgip-meta-input-active-border-color)!important}.Vlt-search_wrap .Vlt-composite__append--icon{cursor:pointer}.Vlt-search_wrap .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-search_wrap .Vlt-composite__append--icon:focus svg,.Vlt-search_wrap .Vlt-composite__append--icon:active svg,.Vlt-search_wrap .Vlt-composite__append--icon:hover svg{fill:var(--vgip-meta-input-accent-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i5.MetaModelPipe, name: "metaModel" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
670
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: FieldSelect, decorators: [{
|
|
650
671
|
type: Component,
|
|
651
|
-
args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n {{model.label || model.id || model}}\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element\" [ngClass]=\"{ 'Vlt-form__element--big': !meta.small ,'has-value': f.value, active: keyListenerActive, 'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched), 'no-x': meta.noX }\">\n\t<div class=\"Vlt-composite Vlt-dropdown Vlt-input\" style='display: block;' [ngClass]=\"{ 'has-append-button': isCreatable && !disabled }\">\n\t\t<div class=\"Vlt-select\">\n\t\t\t<label class='wrapper'>\n\t\t\t\t<label class='Vlt-truncate'>{{meta.label || meta.name}}<span *ngIf='validations.required && options.length' class='Vlt-red'>*</span></label>\n\t\t\t\t<input class='main' [required]='validations.required && !!options.length' readonly [ngModel]='showText' #ft='ngModel' [ngModelOptions]=\"{standalone: true}\" type=\"text\" [placeholder]=\"meta.placeholder || ' '\" (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [ngClass]=\"{ 'standalone': meta.standalone }\" [disabled]='disabled || !options.length' [attr.aria-label]='meta.label'/>\n\t\t\t</label>\n\t\t\t<select class='model' [required]='validations.required && !!options.length' style='display: none;' [(ngModel)]='model' [ngModelOptions]=\"{standalone: meta.standalone}\" (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name'></select>\n\t\t\t<div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n\t\t\t</div>\n\t\t\t<div class='Vlt-composite__append right-actions'>\n <div *ngIf='model && !meta.noX && !disabled' class=\"Vlt-composite__append--icon\" (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n </div>\n\t\t</div>\n\t\t<div class='Vlt-dropdown__panel'>\n\t\t\t<div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\">\n\t\t\t\t<!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 15px;'>\n\t\t\t\t\tSelect ({{options.length}})\n\t\t\t\t\t<div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n\t\t\t\t\t</div>\n\t\t\t\t</div> -->\n\t\t\t\t<div class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='dropdown' class='Vlt-dropdown__scroll'>\n\t\t\t\t\t<div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onOptionSelect($event, option)' *ngFor='let option of options; let i = index' class=\"Vlt-dropdown__link\">\n\t\t\t\t\t\t<div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__button\">\n\t\t\t\t\t\t\t\t\t<input type=\"checkbox\" [checked]='model && model.indexOf(option) !== -1'/>\n\t\t\t\t\t\t\t\t\t<span class=\"Vlt-checkbox__icon\"></span>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{{option.label || (option.id === '' ? '--empty--' : option)}}\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div *ngIf='!multiple' style='padding: 12px 20px;'>{{option.label || (option.id === '' ? '--empty--' : option)}}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n\t\t\t\t<div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\" style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\" style='margin-right: 8px;'>Clear all</button>\n <button (click)='dismissDropdown($event)' type='button' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n\t\t\t</div>\n\t\t</div>\n\t\t<!-- <span *ngIf='isCreatable'>\n <button type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n\t\t</span> -->\n\t\t<div *ngIf='isCreatable && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon add-button\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n </div>\n\t</div>\n\t<small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n\t\t<span *ngIf=\"f.errors.required\">Required. </span>\n\t\t<span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n\t</small>\n\t<small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>", styles: [".Vlt-form__element.no-x input.main{padding-right:40px}.Vlt-form__element--big:not(.has-value)>.Vlt-input>.Vlt-select>label>label{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big input[readonly].main:not([disabled]){background:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color)}.Vlt-form__element--big:hover input[readonly].main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:focus input[readonly].main,.Vlt-form__element--big:focus .Vlt-composite__append button,.Vlt-form__element--big.active input[readonly].main,.Vlt-form__element--big.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button{border-color:#f25a6b;box-shadow:none}.Vlt-form__element--big .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon);margin-right:2px}.Vlt-form__element--big .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}.Vlt-composite.has-append-button input[readonly].main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-composite.has-append-button .Vlt-select:after{margin-right:-10px}.Vlt-composite__append{z-index:initial}.Vlt-composite__append button{height:48px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-right:16px;padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link{padding:0 20px 0 0}.Vlt-dropdown__panel .Vlt-dropdown__link.Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}input.main{cursor:pointer;padding-right:76px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:42px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:53px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}\n"] }]
|
|
672
|
+
args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div class='vgip-meta-field-value __gu'>\n {{model.label || model.id || model}}\n </div>\n</div>\n<div *ngIf='!preview' class=\"Vlt-form__element\"\n [ngClass]=\"{ 'Vlt-form__element--big': !meta.small ,'has-value': f.value, active: keyListenerActive, 'Vlt-form__element--error': f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched), 'no-x': meta.noX }\">\n <div class=\"Vlt-composite Vlt-dropdown Vlt-input\" style='display: block;'\n [ngClass]=\"{ 'has-append-button': isCreatable && !disabled }\">\n <div class=\"Vlt-select\">\n <label class='wrapper'>\n <label class='Vlt-truncate'>{{meta.label || meta.name}}<span\n *ngIf='validations.required && options.length' class='Vlt-red'>*</span></label>\n <input class='main' [required]='validations.required && !!options.length' readonly [ngModel]='showText'\n #ft='ngModel' [ngModelOptions]=\"{standalone: true}\" type=\"text\"\n [placeholder]=\"meta.placeholder || ' '\" (click)='onActivated($event)' (focus)='onActivated($event)'\n (blur)='onBlur($event)' [ngClass]=\"{ 'standalone': meta.standalone }\"\n [disabled]='disabled' [attr.aria-label]='meta.label' />\n </label>\n <select class='model' [required]='validations.required && !!options.length' style='display: none;'\n [(ngModel)]='model' [ngModelOptions]=\"{standalone: meta.standalone}\"\n (ngModelChange)=\"onModelChange($event)\" #f='ngModel' [name]='name'></select>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <div *ngIf='model && !meta.noX && !disabled' class=\"Vlt-composite__append--icon\"\n (click)='clear($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\" />\n </svg>\n </div>\n </div>\n </div>\n </div>\n <div class='Vlt-dropdown__panel'>\n <div class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\">\n <!-- <div class=\"Vlt-dropdown__title\" style='padding-left: 15px;'>\n Select ({{options.length}})\n <div class=\"Vlt-dropdown__close Vlt-white\" (click)='dismissDropdown($event)'>\n <svg class='Vlt-icon Vlt-icon--small'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div> -->\n <div class=\"Vlt-dropdown__block Vlt-search_wrap\">\n <div *ngIf=\"optionsBackup.length > 12\" class=\"Vlt-composite\">\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\"\n style=\"top: 0; padding-top: 15px;\">\n <div class=\"Vlt-composite__icon\">\n <svg class='Vlt-grey'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-search\"></use>\n </svg>\n </div>\n </div>\n <div class=\"Vlt-input\">\n <input type=\"text\" class=\"vgip-search_input\" [(ngModel)]=\"searchInput\" placeholder=\"Search\" (input)=\"onSearchChange()\" [ngModelOptions]=\"{standalone: true}\">\n </div>\n <div class=\"Vlt-composite__append--icon\"\n style=\"top: 2px;\" (click)=\"clearSearchField()\" [hidden]=\"searchInput === ''\">\n <div class=\"Vlt-composite__icon\">\n <svg class='Vlt-icon Vlt-icon--small'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/>\n </svg>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf='dropdown' class='Vlt-dropdown__scroll'>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\"\n (click)='onOptionSelect($event, option)' *ngFor='let option of options; let i = index'\n class=\"Vlt-dropdown__link\">\n <div *ngIf='multiple' class=\"Vlt-checkbox\" style='width: 100%;'>\n <label>\n <span class=\"Vlt-checkbox__button\">\n <input type=\"checkbox\" [checked]='model && model.indexOf(option) !== -1' />\n <span class=\"Vlt-checkbox__icon\"></span>\n </span>\n {{option.label || (option.id === '' ? '--empty--' : option)}}\n </label>\n </div>\n <div *ngIf='!multiple' style='padding: 12px 20px;'>{{option.label || (option.id === '' ?\n '--empty--' : option)}}</div>\n </div>\n <!-- No Option Found -->\n <div class=\"Vlt-dropdown__link\" *ngIf=\"options.length === 0\">\n <div style='padding: 12px 20px;'>No Option Found</div>\n </div>\n </div>\n <div *ngIf='!multiple' class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='multiple' class=\"Vlt-dropdown__block Vlt-dropdown__block--nowrap\"\n style='padding: 8px 16px 16px;'>\n <button (click)='clear($event)' type='button'\n class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small Vlt-btn--outline\"\n style='margin-right: 8px;'>Clear all</button>\n <button (click)='dismissDropdown($event)' type='button'\n class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--small\">Done</button>\n </div>\n </div>\n </div>\n <!-- <span *ngIf='isCreatable'>\n <button type='button' (click)='openResource($event)' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n </span> -->\n <div *ngIf='isCreatable && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' (click)='openResource($event)'\n class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon add-button\" aria-label='Add new'>\n <svg>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\" />\n </svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))'\n class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required. </span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n </small>\n <small *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element.no-x input.main{padding-right:40px}.Vlt-form__element--big:not(.has-value)>.Vlt-input>.Vlt-select>label>label{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big input[readonly].main:not([disabled]){background:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color)}.Vlt-form__element--big:hover input[readonly].main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:focus input[readonly].main,.Vlt-form__element--big:focus .Vlt-composite__append button,.Vlt-form__element--big.active input[readonly].main,.Vlt-form__element--big.active .Vlt-composite__append button{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error input[readonly].main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button{border-color:#f25a6b;box-shadow:none}.Vlt-form__element--big .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon);margin-right:2px}.Vlt-form__element--big .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}.Vlt-composite.has-append-button input[readonly].main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-composite.has-append-button .Vlt-select:after{margin-right:-10px}.Vlt-composite__append{z-index:initial}.Vlt-composite__append button{height:48px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-right:16px;padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-dropdown__panel{width:100%}.Vlt-dropdown__panel .Vlt-dropdown__link{padding:0 20px 0 0}.Vlt-dropdown__panel .Vlt-dropdown__link.Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel label{margin-top:0;padding:12px 20px;top:0;left:0;pointer-events:initial;position:initial;color:initial;font-size:inherit;transition:none;cursor:pointer}.Vlt-dropdown__panel label input{height:0}input.main{cursor:pointer;padding-right:76px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:42px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:53px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{width:36px;outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-search_wrap{padding-top:10px}.Vlt-search_wrap .vgip-search_input{padding:8px 36px 8px 38px;width:100%;border:1px solid var(--vgip-meta-input-border-color)!important;border-radius:6px!important}.Vlt-search_wrap .vgip-search_input:focus,.Vlt-search_wrap .vgip-search_input:active,.Vlt-search_wrap .vgip-search_input:hover{border-color:var(--vgip-meta-input-active-border-color)!important}.Vlt-search_wrap .Vlt-composite__append--icon{cursor:pointer}.Vlt-search_wrap .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-search_wrap .Vlt-composite__append--icon:focus svg,.Vlt-search_wrap .Vlt-composite__append--icon:active svg,.Vlt-search_wrap .Vlt-composite__append--icon:hover svg{fill:var(--vgip-meta-input-accent-color)}\n"] }]
|
|
652
673
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i2.MetaReferenceService }, { type: i3.MetaResourceService }]; } });
|
|
653
674
|
//// FIELD REFERENCE
|
|
654
675
|
export class FieldReference extends FieldAbstract {
|
|
@@ -748,6 +769,60 @@ export class FieldReference extends FieldAbstract {
|
|
|
748
769
|
}
|
|
749
770
|
};
|
|
750
771
|
}
|
|
772
|
+
get disabled() {
|
|
773
|
+
const superDisabled = this.logicalDisabled || this.validations.disabled || this.meta.disabled === true
|
|
774
|
+
|| (this.meta.updatable === false && this.isPersistedParent);
|
|
775
|
+
this.searchResourceTypeMeta.disabled = superDisabled;
|
|
776
|
+
return superDisabled;
|
|
777
|
+
}
|
|
778
|
+
get showTypes() {
|
|
779
|
+
return (typeof (this.meta.showTypes) !== 'undefined') ? this.meta.showTypes : true;
|
|
780
|
+
}
|
|
781
|
+
get suggestions() {
|
|
782
|
+
return this.smartSuggestions.concat(!this.searchResourceType.resourceType ?
|
|
783
|
+
// eslint-disable-next-line max-len
|
|
784
|
+
(this.asyncSuggestions || this.meta.suggestions || []) : (this.asyncSuggestions || this.meta.suggestions || []).filter((s) => s.type === this.searchResourceType.resourceType));
|
|
785
|
+
}
|
|
786
|
+
get hasAppendButton() {
|
|
787
|
+
if (!this.multiple && this.model) {
|
|
788
|
+
if (this.isPolymorphic) {
|
|
789
|
+
for (const ref of this.metaReference) {
|
|
790
|
+
if ((ref.name || ref.resourceType) === (this.model.type || this.model.resourceType)) {
|
|
791
|
+
return ref.updatable || (ref.creatable && ref.updatable !== false);
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
else {
|
|
796
|
+
return this.metaReference.updatable || (this.metaReference.creatable && this.metaReference.updatable !== false); // VGIS-6911
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
else if (this.metaReference instanceof Array) {
|
|
800
|
+
// setTimeout(() => {
|
|
801
|
+
// this.searchResourceTypesScope = this.metaReference.map(rt => rt.name).join(',');
|
|
802
|
+
// }, 0);
|
|
803
|
+
for (const rt of this.metaReference) {
|
|
804
|
+
if (rt.creatable) {
|
|
805
|
+
return true;
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
else {
|
|
810
|
+
return this.metaReference.creatable;
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
get resourceService() {
|
|
814
|
+
if (!this.metaResourceService) {
|
|
815
|
+
const metaResourceConfig = {
|
|
816
|
+
integrationCode: this.integrationCode,
|
|
817
|
+
resourceType: this.resourceType
|
|
818
|
+
};
|
|
819
|
+
this.metaResourceService = this.metaResource.new(metaResourceConfig);
|
|
820
|
+
}
|
|
821
|
+
return this.metaResourceService;
|
|
822
|
+
}
|
|
823
|
+
get metaReference() {
|
|
824
|
+
return this.meta.reference || {};
|
|
825
|
+
}
|
|
751
826
|
ngOnInit() {
|
|
752
827
|
this.multiple = (this.meta.type === 'multireference') || this.meta.multiple;
|
|
753
828
|
this.searchResourceTypeMeta.label = this.meta.label;
|
|
@@ -923,11 +998,11 @@ export class FieldReference extends FieldAbstract {
|
|
|
923
998
|
}
|
|
924
999
|
}
|
|
925
1000
|
}
|
|
926
|
-
if (this.meta.search) {
|
|
927
|
-
const searchParams = this.meta.search.params;
|
|
1001
|
+
if (this.meta.auto && this.meta.auto.search) {
|
|
1002
|
+
const searchParams = this.meta.auto.search.params;
|
|
928
1003
|
if (searchParams) {
|
|
929
1004
|
for (const par of Object.keys(searchParams)) {
|
|
930
|
-
const props = searchParams[par].split('
|
|
1005
|
+
const props = searchParams[par].split('.');
|
|
931
1006
|
const field = props[0];
|
|
932
1007
|
const prop = props[1];
|
|
933
1008
|
let parValue = this.parent[field];
|
|
@@ -938,7 +1013,7 @@ export class FieldReference extends FieldAbstract {
|
|
|
938
1013
|
if (parValue) {
|
|
939
1014
|
const params = {};
|
|
940
1015
|
params[par] = parValue;
|
|
941
|
-
this.
|
|
1016
|
+
this.searchAutoSuggestions(params);
|
|
942
1017
|
}
|
|
943
1018
|
}
|
|
944
1019
|
this.parentChangeSubject.subscribe((value) => {
|
|
@@ -949,7 +1024,7 @@ export class FieldReference extends FieldAbstract {
|
|
|
949
1024
|
}
|
|
950
1025
|
const params = {};
|
|
951
1026
|
params[par] = value[field];
|
|
952
|
-
this.
|
|
1027
|
+
this.searchAutoSuggestions(params);
|
|
953
1028
|
}
|
|
954
1029
|
}
|
|
955
1030
|
});
|
|
@@ -996,7 +1071,7 @@ export class FieldReference extends FieldAbstract {
|
|
|
996
1071
|
delete this.searchResults;
|
|
997
1072
|
return;
|
|
998
1073
|
}
|
|
999
|
-
const
|
|
1074
|
+
const showSearchResults = (results) => {
|
|
1000
1075
|
this.searching = false;
|
|
1001
1076
|
delete this.searchError;
|
|
1002
1077
|
delete this.activeSuggestionIndex;
|
|
@@ -1022,11 +1097,21 @@ export class FieldReference extends FieldAbstract {
|
|
|
1022
1097
|
if (this.meta.search.url) {
|
|
1023
1098
|
searchUrl = this.meta.search.url.replace(/\${\s*([\w\.]+)\s*}/g, (match, key) => {
|
|
1024
1099
|
if (searchParams.hasOwnProperty(key)) {
|
|
1025
|
-
const
|
|
1026
|
-
|
|
1027
|
-
|
|
1100
|
+
const props = searchParams[key].split('.');
|
|
1101
|
+
const field = props[0];
|
|
1102
|
+
const prop = props[1];
|
|
1103
|
+
delete searchParams[key]; // if it is URL param, remove it as query param
|
|
1104
|
+
let parValue = this.parent[field];
|
|
1105
|
+
if (parValue) {
|
|
1106
|
+
if (prop) {
|
|
1107
|
+
parValue = parValue[prop];
|
|
1108
|
+
}
|
|
1109
|
+
if (parValue) {
|
|
1110
|
+
return parValue;
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1028
1113
|
}
|
|
1029
|
-
return '';
|
|
1114
|
+
return 'undefined';
|
|
1030
1115
|
});
|
|
1031
1116
|
}
|
|
1032
1117
|
for (const p of Object.keys(searchParams)) {
|
|
@@ -1035,7 +1120,7 @@ export class FieldReference extends FieldAbstract {
|
|
|
1035
1120
|
searchUrl += `${searchUrl.indexOf('?') === -1 ? '?' : '&'}q=${encodeURIComponent(this.searchText)}`;
|
|
1036
1121
|
this.searching = true;
|
|
1037
1122
|
this.resourceService.getByPath(searchUrl).subscribe((results) => {
|
|
1038
|
-
|
|
1123
|
+
showSearchResults(results);
|
|
1039
1124
|
}, (error) => {
|
|
1040
1125
|
delete this.searching;
|
|
1041
1126
|
this.searchResults = [];
|
|
@@ -1053,7 +1138,7 @@ export class FieldReference extends FieldAbstract {
|
|
|
1053
1138
|
});
|
|
1054
1139
|
}
|
|
1055
1140
|
this.vr.searchIntegration(this.searchText, this.searchResourceType.name || this.searchResourceTypesScope).subscribe((results) => {
|
|
1056
|
-
|
|
1141
|
+
showSearchResults(results);
|
|
1057
1142
|
}, (error) => {
|
|
1058
1143
|
this.searching = false;
|
|
1059
1144
|
this.searchResults = [];
|
|
@@ -1331,52 +1416,11 @@ export class FieldReference extends FieldAbstract {
|
|
|
1331
1416
|
delete this.externalLink;
|
|
1332
1417
|
}
|
|
1333
1418
|
}
|
|
1334
|
-
|
|
1335
|
-
const superDisabled = this.logicalDisabled || this.validations.disabled || this.meta.disabled === true
|
|
1336
|
-
|| (this.meta.updatable === false && this.isPersistedParent);
|
|
1337
|
-
this.searchResourceTypeMeta.disabled = superDisabled;
|
|
1338
|
-
return superDisabled;
|
|
1339
|
-
}
|
|
1340
|
-
get showTypes() {
|
|
1341
|
-
return (typeof (this.meta.showTypes) !== 'undefined') ? this.meta.showTypes : true;
|
|
1342
|
-
}
|
|
1343
|
-
get suggestions() {
|
|
1344
|
-
return this.smartSuggestions.concat(!this.searchResourceType.resourceType ?
|
|
1345
|
-
// eslint-disable-next-line max-len
|
|
1346
|
-
(this.asyncSuggestions || this.meta.suggestions || []) : (this.asyncSuggestions || this.meta.suggestions || []).filter((s) => s.type === this.searchResourceType.resourceType));
|
|
1347
|
-
}
|
|
1348
|
-
get hasAppendButton() {
|
|
1349
|
-
if (!this.multiple && this.model) {
|
|
1350
|
-
if (this.isPolymorphic) {
|
|
1351
|
-
for (const ref of this.metaReference) {
|
|
1352
|
-
if ((ref.name || ref.resourceType) === (this.model.type || this.model.resourceType)) {
|
|
1353
|
-
return ref.updatable || (ref.creatable && ref.updatable !== false);
|
|
1354
|
-
}
|
|
1355
|
-
}
|
|
1356
|
-
}
|
|
1357
|
-
else {
|
|
1358
|
-
return this.metaReference.updatable || (this.metaReference.creatable && this.metaReference.updatable !== false); // VGIS-6911
|
|
1359
|
-
}
|
|
1360
|
-
}
|
|
1361
|
-
else if (this.metaReference instanceof Array) {
|
|
1362
|
-
// setTimeout(() => {
|
|
1363
|
-
// this.searchResourceTypesScope = this.metaReference.map(rt => rt.name).join(',');
|
|
1364
|
-
// }, 0);
|
|
1365
|
-
for (const rt of this.metaReference) {
|
|
1366
|
-
if (rt.creatable) {
|
|
1367
|
-
return true;
|
|
1368
|
-
}
|
|
1369
|
-
}
|
|
1370
|
-
}
|
|
1371
|
-
else {
|
|
1372
|
-
return this.metaReference.creatable;
|
|
1373
|
-
}
|
|
1374
|
-
}
|
|
1375
|
-
searchSuggestions(params) {
|
|
1419
|
+
searchAutoSuggestions(params) {
|
|
1376
1420
|
let searchUrl = `/suggestions/${this.meta.name}/search`;
|
|
1377
|
-
if (this.meta.search) {
|
|
1378
|
-
if (this.meta.search.url) {
|
|
1379
|
-
searchUrl = this.meta.search.url.replace(/\${\s*([\w\.]+)\s*}/g, (match, key) => {
|
|
1421
|
+
if (this.meta.auto && this.meta.auto.search) {
|
|
1422
|
+
if (this.meta.auto.search.url) {
|
|
1423
|
+
searchUrl = this.meta.auto.search.url.replace(/\${\s*([\w\.]+)\s*}/g, (match, key) => {
|
|
1380
1424
|
if (params.hasOwnProperty(key)) {
|
|
1381
1425
|
const val = params[key];
|
|
1382
1426
|
delete params[key];
|
|
@@ -1394,8 +1438,8 @@ export class FieldReference extends FieldAbstract {
|
|
|
1394
1438
|
if (result) {
|
|
1395
1439
|
let suggestions;
|
|
1396
1440
|
suggestions = result;
|
|
1397
|
-
if (this.meta.search.extract) {
|
|
1398
|
-
suggestions = result[this.meta.search.extract];
|
|
1441
|
+
if (this.meta.auto.search.extract) {
|
|
1442
|
+
suggestions = result[this.meta.auto.search.extract];
|
|
1399
1443
|
}
|
|
1400
1444
|
if (suggestions instanceof Array !== true) {
|
|
1401
1445
|
suggestions = [suggestions];
|
|
@@ -1425,25 +1469,12 @@ export class FieldReference extends FieldAbstract {
|
|
|
1425
1469
|
});
|
|
1426
1470
|
}
|
|
1427
1471
|
}
|
|
1428
|
-
get resourceService() {
|
|
1429
|
-
if (!this.metaResourceService) {
|
|
1430
|
-
const metaResourceConfig = {
|
|
1431
|
-
integrationCode: this.integrationCode,
|
|
1432
|
-
resourceType: this.resourceType
|
|
1433
|
-
};
|
|
1434
|
-
this.metaResourceService = this.metaResource.new(metaResourceConfig);
|
|
1435
|
-
}
|
|
1436
|
-
return this.metaResourceService;
|
|
1437
|
-
}
|
|
1438
|
-
get metaReference() {
|
|
1439
|
-
return this.meta.reference || {};
|
|
1440
|
-
}
|
|
1441
1472
|
}
|
|
1442
|
-
FieldReference.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1443
|
-
FieldReference.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: FieldReference, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n <label class='mobile-label hidden-mobile hidden-desktop'>Search</label>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <div *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:bold}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:bold;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"], components: [{ type: i0.forwardRef(function () { return MetaField; }), selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "preview", "theme"], outputs: ["onChange", "onLeave"] }], directives: [{ type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i0.forwardRef(function () { return i1.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i0.forwardRef(function () { return i4.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i0.forwardRef(function () { return i4.RequiredValidator; }), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i0.forwardRef(function () { return i4.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { type: i0.forwardRef(function () { return i4.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "metaModel": i0.forwardRef(function () { return i5.MetaModelPipe; }) }, viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
1444
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1473
|
+
FieldReference.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: FieldReference, deps: [{ token: i0.ComponentFactoryResolver }, { token: i2.MetaReferenceService }, { token: i3.MetaResourceService }, { token: i6.MetaMsgService }, { token: i7.MetaContextService }, { token: i8.MetaTrackerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1474
|
+
FieldReference.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: FieldReference, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n <label class='mobile-label hidden-mobile hidden-desktop'>Search</label>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <div *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:700}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:700;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgStyle; }), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.RequiredValidator; }), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i0.forwardRef(function () { return MetaField; }), selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "preview", "theme"], outputs: ["onChange", "onLeave"] }, { kind: "pipe", type: i0.forwardRef(function () { return i5.MetaModelPipe; }), name: "metaModel" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
1475
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: FieldReference, decorators: [{
|
|
1445
1476
|
type: Component,
|
|
1446
|
-
args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n <label class='mobile-label hidden-mobile hidden-desktop'>Search</label>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <div *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:bold}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:bold;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"] }]
|
|
1477
|
+
args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n <label class='mobile-label hidden-mobile hidden-desktop'>Search</label>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span> <span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <div *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:700}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:700;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"] }]
|
|
1447
1478
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i2.MetaReferenceService }, { type: i3.MetaResourceService }, { type: i6.MetaMsgService }, { type: i7.MetaContextService }, { type: i8.MetaTrackerService }]; } });
|
|
1448
1479
|
//// FIELD LIST
|
|
1449
1480
|
export class FieldList extends FieldAbstract {
|
|
@@ -1451,6 +1482,9 @@ export class FieldList extends FieldAbstract {
|
|
|
1451
1482
|
super(...arguments);
|
|
1452
1483
|
this.items = [];
|
|
1453
1484
|
}
|
|
1485
|
+
get list() {
|
|
1486
|
+
return this.meta.list || this.meta.reference;
|
|
1487
|
+
}
|
|
1454
1488
|
ngOnInit() {
|
|
1455
1489
|
const origValue = this.parent[this.meta.name];
|
|
1456
1490
|
Object.defineProperty(this.parent, this.meta.name, {
|
|
@@ -1479,9 +1513,6 @@ export class FieldList extends FieldAbstract {
|
|
|
1479
1513
|
}
|
|
1480
1514
|
}
|
|
1481
1515
|
}
|
|
1482
|
-
get list() {
|
|
1483
|
-
return this.meta.list || this.meta.reference;
|
|
1484
|
-
}
|
|
1485
1516
|
add() {
|
|
1486
1517
|
if (!this.model) {
|
|
1487
1518
|
this.model = [];
|
|
@@ -1496,9 +1527,9 @@ export class FieldList extends FieldAbstract {
|
|
|
1496
1527
|
this.value = this.model;
|
|
1497
1528
|
}
|
|
1498
1529
|
}
|
|
1499
|
-
FieldList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1500
|
-
FieldList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
1501
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1530
|
+
FieldList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: FieldList, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1531
|
+
FieldList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: FieldList, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div *ngIf='true' class=\"Vlt-form__element\" [ngClass]=\"{ 'Vlt-form__element--error': (f | metaModel)._parent.submitted && f.invalid }\">\n <label class=\"Vlt-label\">{{meta.label || meta.name}} ({{(model || []).length}})<span *ngIf='validations.required' class='Vlt-red'>*</span></label>\n <small style='margin-bottom: 4px;' *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <ng-container *ngIf='model'>\n <div *ngFor='let item of model; let i = index;' style='display: flex; border-bottom: 1px solid var(--vgip-meta-separator-color);'>\n <vgip-meta-field style='flex: 1;' [index]='i' [meta]='list' [parent]='item' [integrationCode]='integrationCode' [resourceType]='meta.resourceType || resourceType' theme='inherit'></vgip-meta-field>\n <vgip-meta-field *ngIf='meta.selectable' [meta]=\"{ name: meta.selectable.name, label: ' ', type: 'radio', options: [ { id: meta.selectable.value, label: meta.selectable.label } ] }\" [parent]='item' [integrationCode]='integrationCode' theme='inherit' style='margin-left: 12px; margin-top: 12px; margin-right: -12px;'></vgip-meta-field>\n <div style='padding-left: 12px; margin-top: 3px;'>\n <button type='button' (click)='remove(i)' class=\"Vlt-btn Vlt-btn--link item-remove-button\" [disabled]='model.length === (validations.min || 0)' aria-label='Remove'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-bin\"/></svg>\n </button>\n </div>\n </div>\n </ng-container>\n <button *ngIf='!validations.max || !model || model.length < validations.max' style='width: 100%;' type='button' (click)='add()' class=\"Vlt-btn Vlt-btn--small Vlt-btn--tertiary Vlt-btn--app Vlt-btn--no-focus item-add-button\" [disabled]='validations.max && model && model.length === validations.max'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>{{list.label}}\n </button>\n <small *ngIf='(f | metaModel)._parent.submitted && f.invalid' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.maxlength\">Length can not exceed {{validations.maxlength}} characters</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n </small>\n <small *ngIf='meta.helpText' class=\"Vlt-form__element__hint\">{{meta.helpText}}</small>\n</div>\n", styles: [".Vlt-btn--link:not([disabled]) svg{fill:#e84545}.Vlt-btn--link:not([disabled]):hover svg{fill:#de1c1c}.item-add-button{background-color:var(--vgip-meta-input-action-hover-bg-color);color:var(--vgip-meta-input-color)}.item-add-button svg{fill:var(--vgip-meta-input-color)}.item-add-button:hover{transform:scale(1.02);box-shadow:inset 0 0 0 1px var(--vgip-meta-input-active-border-color)}.item-remove-button{border:0}.item-remove-button:disabled{cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.DefaultValueAccessor; }), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.RequiredValidator; }), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgModel; }), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i0.forwardRef(function () { return MetaField; }), selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "preview", "theme"], outputs: ["onChange", "onLeave"] }, { kind: "pipe", type: i0.forwardRef(function () { return i5.MetaModelPipe; }), name: "metaModel" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
1532
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: FieldList, decorators: [{
|
|
1502
1533
|
type: Component,
|
|
1503
1534
|
args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div *ngIf='true' class=\"Vlt-form__element\" [ngClass]=\"{ 'Vlt-form__element--error': (f | metaModel)._parent.submitted && f.invalid }\">\n <label class=\"Vlt-label\">{{meta.label || meta.name}} ({{(model || []).length}})<span *ngIf='validations.required' class='Vlt-red'>*</span></label>\n <small style='margin-bottom: 4px;' *ngIf='meta.hint' class=\"Vlt-form__element__hint\">{{meta.hint}}</small>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <ng-container *ngIf='model'>\n <div *ngFor='let item of model; let i = index;' style='display: flex; border-bottom: 1px solid var(--vgip-meta-separator-color);'>\n <vgip-meta-field style='flex: 1;' [index]='i' [meta]='list' [parent]='item' [integrationCode]='integrationCode' [resourceType]='meta.resourceType || resourceType' theme='inherit'></vgip-meta-field>\n <vgip-meta-field *ngIf='meta.selectable' [meta]=\"{ name: meta.selectable.name, label: ' ', type: 'radio', options: [ { id: meta.selectable.value, label: meta.selectable.label } ] }\" [parent]='item' [integrationCode]='integrationCode' theme='inherit' style='margin-left: 12px; margin-top: 12px; margin-right: -12px;'></vgip-meta-field>\n <div style='padding-left: 12px; margin-top: 3px;'>\n <button type='button' (click)='remove(i)' class=\"Vlt-btn Vlt-btn--link item-remove-button\" [disabled]='model.length === (validations.min || 0)' aria-label='Remove'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-bin\"/></svg>\n </button>\n </div>\n </div>\n </ng-container>\n <button *ngIf='!validations.max || !model || model.length < validations.max' style='width: 100%;' type='button' (click)='add()' class=\"Vlt-btn Vlt-btn--small Vlt-btn--tertiary Vlt-btn--app Vlt-btn--no-focus item-add-button\" [disabled]='validations.max && model && model.length === validations.max'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>{{list.label}}\n </button>\n <small *ngIf='(f | metaModel)._parent.submitted && f.invalid' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.maxlength\">Length can not exceed {{validations.maxlength}} characters</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}} </span>\n </small>\n <small *ngIf='meta.helpText' class=\"Vlt-form__element__hint\">{{meta.helpText}}</small>\n</div>\n", styles: [".Vlt-btn--link:not([disabled]) svg{fill:#e84545}.Vlt-btn--link:not([disabled]):hover svg{fill:#de1c1c}.item-add-button{background-color:var(--vgip-meta-input-action-hover-bg-color);color:var(--vgip-meta-input-color)}.item-add-button svg{fill:var(--vgip-meta-input-color)}.item-add-button:hover{transform:scale(1.02);box-shadow:inset 0 0 0 1px var(--vgip-meta-input-active-border-color)}.item-remove-button{border:0}.item-remove-button:disabled{cursor:not-allowed}\n"] }]
|
|
1504
1535
|
}] });
|
|
@@ -1515,6 +1546,10 @@ export class MetaLayout {
|
|
|
1515
1546
|
this.showAll = false;
|
|
1516
1547
|
this.fieldsVisibilityChanged = new Subject();
|
|
1517
1548
|
}
|
|
1549
|
+
get isPersistedResource() {
|
|
1550
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
1551
|
+
return this.resource && this.resource._vgis && (this.resource._vgis.externalId || this.resource._vgis.id);
|
|
1552
|
+
}
|
|
1518
1553
|
ngOnInit() {
|
|
1519
1554
|
this.integrationCode = this.meta.integrationCode || this.integration;
|
|
1520
1555
|
this.resourceType = this.meta.resourceType || this.type;
|
|
@@ -1607,10 +1642,6 @@ export class MetaLayout {
|
|
|
1607
1642
|
}
|
|
1608
1643
|
});
|
|
1609
1644
|
}
|
|
1610
|
-
get isPersistedResource() {
|
|
1611
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
1612
|
-
return this.resource && this.resource._vgis && (this.resource._vgis.externalId || this.resource._vgis.id);
|
|
1613
|
-
}
|
|
1614
1645
|
applyTheme() {
|
|
1615
1646
|
const metaTheme = this.theme === 'dark' ? metaDark : metaLight;
|
|
1616
1647
|
for (const key of Object.keys(metaTheme.properties)) {
|
|
@@ -1618,11 +1649,11 @@ export class MetaLayout {
|
|
|
1618
1649
|
}
|
|
1619
1650
|
}
|
|
1620
1651
|
}
|
|
1621
|
-
MetaLayout.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1622
|
-
MetaLayout.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
1623
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1652
|
+
MetaLayout.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaLayout, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i3.MetaResourceService }, { token: i2.MetaReferenceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1653
|
+
MetaLayout.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: MetaLayout, selector: "vgip-meta-layout", inputs: { meta: "meta", resource: "resource", integration: "integration", type: "type", preview: "preview", theme: "theme" }, usesOnChanges: true, ngImport: i0, template: "<div *ngFor='let section of meta.sections' class='Vlt-section' [ngClass]=\"{ shown: showAll || section.visible || (!meta.oneTimeOptional && !section.$optional) || (meta.oneTimeOptional && !optionalFieldsCount) }\">\n\t<h5 *ngIf='section.label' class=\"Vlt-section__title\">{{section.label}}</h5>\n\t<div style='overflow: visible;' [ngClass]=\"{ 'for-preview': preview }\">\n\t\t<small *ngIf='section.description' class=\"Vlt-form__element__hint\">{{section.description}}</small>\n\t\t<div>\n\t\t\t<ng-container *ngFor='let field of section.fields'>\n\t\t\t\t<vgip-meta-field *ngIf='!field.$hidden && (showAll || section.visible || !field.$optional)' [meta]='field' [parent]='resource' [integrationCode]='integrationCode' [resourceType]='resourceType' [preview]='preview' [ngClass]=\"{ shown: !field.$invisible && (showAll || true) }\" theme='inherit' [attr.data-theme]='theme'></vgip-meta-field>\n\t\t\t</ng-container>\n\t\t</div>\n\t</div>\n</div>\n<div *ngIf='isPersistedResource && meta.children && preview'>\n\t<div *ngFor='let child of meta.children'>\n\t\t<h5 class='Vlt-children__title'>\n\t\t\t<svg class=\"Vlt-icon\"><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-stack\" /></svg> \n\t\t\t{{child.label}} <span class='Vlt-grey'>({{(resource[child.name] || []).length}})</span>\n\t\t</h5>\n\t\t<div *ngFor=\"let c of resource[child.name]\" style='position: relative;'>\n\n\t\t\t<div class=\"Vlt-card Vlt-bg-white\">\n\t\t\t\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t\t\t\t<h5>{{c.Subject || c.subject || c.summary || c.title || c.CaseNumber || c.comment || c.body || c.name || c.topic || c.content || '...' }}</h5>\n\t\t\t\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\t\t\t\tCreated: <span class='Vlt-black'>{{c._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\t\t\t\tEdited: <span class='Vlt-black'>{{c._vgis.modifiedDate | date:'medium'}}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{c._vgis.resourceType}}</div>\n\t\t\t\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t\t\t\t<a *ngIf='c._vgis.externalLink' attr.href='{{c._vgis.externalLink}}' target='_blank' rel='noopener' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t\t\t\t<button type='button' (click)='openChild(child, c)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\"><svg style='margin-left: 0; margin-right: 0;'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ child.reference.editable ? 'edit' : 'eye-negative' }}\"/></svg></button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<button style='width: 100%; margin-top: 0; max-width: 100%;' type='button' (click)='openChild(child)' class=\"Vlt-btn Vlt-btn--small Vlt-btn--secondary\" [disabled]='child.creatable === false'>\n\t\t\t<svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>{{child.reference.label}}\n\t\t</button>\n\t</div>\n</div>\n<div *ngIf='!(meta.oneTimeOptional && showAll)' [ngClass]='{ centered: !meta.oneTimeOptional }'>\n\t<button *ngIf='!preview && optionalFieldsCount' type='button' (click)='toggleOptionalFields()' class=\"Vlt-btn Vlt-btn--small Vlt-btn--link more-button\" style='margin: 0; margin-bottom: 10px;'>\n\t\t<svg><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-chevron-{{ showAll ? 'up' : 'down' }}\"/></svg>\n\t\t{{ showAll ? 'Hide' : 'Show' }} Optional Fields ({{optionalFieldsCount}})\n\t</button>\n</div>\n", styles: ["vgip-meta-field{display:none}vgip-meta-field.shown{display:initial}.Vlt-section__title{line-height:14px;padding:16px 16px 14px 3px;margin:-9px -1px 8px;background-color:var(--vgip-meta-resource-bg-color);color:var(--vgip-meta-resource-color);position:sticky;top:-9px;z-index:3;border-bottom:1px solid var(--vgip-meta-separator-color)}.Vlt-section{margin:0;padding-bottom:8px;display:none}.Vlt-section.shown{display:block}.Vlt-btn.vlt-add-child:hover{transform:scale(1.02)}.for-preview{margin-top:-6px}.Vlt-card{margin-bottom:16px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}button.more-button:focus{font-weight:700}.centered{text-align:center}.Vlt-btn--link{color:var(--vgip-meta-link-color)}.Vlt-btn--link:hover{color:var(--vgip-meta-link-hover-color)}.Vlt-btn--link svg{fill:var(--vgip-meta-link-color)}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(function () { return i1.NgClass; }), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i1.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(function () { return MetaField; }), selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "preview", "theme"], outputs: ["onChange", "onLeave"] }, { kind: "pipe", type: i0.forwardRef(function () { return i1.DatePipe; }), name: "date" }] });
|
|
1654
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaLayout, decorators: [{
|
|
1624
1655
|
type: Component,
|
|
1625
|
-
args: [{ selector: 'vgip-meta-layout', template: "<div *ngFor='let section of meta.sections' class='Vlt-section' [ngClass]=\"{ shown: showAll || section.visible || (!meta.oneTimeOptional && !section.$optional) || (meta.oneTimeOptional && !optionalFieldsCount) }\">\n\t<h5 *ngIf='section.label' class=\"Vlt-section__title\">{{section.label}}</h5>\n\t<div style='overflow: visible;' [ngClass]=\"{ 'for-preview': preview }\">\n\t\t<small *ngIf='section.description' class=\"Vlt-form__element__hint\">{{section.description}}</small>\n\t\t<div>\n\t\t\t<ng-container *ngFor='let field of section.fields'>\n\t\t\t\t<vgip-meta-field *ngIf='!field.$hidden && (showAll || section.visible || !field.$optional)' [meta]='field' [parent]='resource' [integrationCode]='integrationCode' [resourceType]='resourceType' [preview]='preview' [ngClass]=\"{ shown: !field.$invisible && (showAll || true) }\" theme='inherit' [attr.data-theme]='theme'></vgip-meta-field>\n\t\t\t</ng-container>\n\t\t</div>\n\t</div>\n</div>\n<div *ngIf='isPersistedResource && meta.children && preview'>\n\t<div *ngFor='let child of meta.children'>\n\t\t<h5 class='Vlt-children__title'>\n\t\t\t<svg class=\"Vlt-icon\"><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-stack\" /></svg> \n\t\t\t{{child.label}} <span class='Vlt-grey'>({{(resource[child.name] || []).length}})</span>\n\t\t</h5>\n\t\t<div *ngFor=\"let c of resource[child.name]\" style='position: relative;'>\n\n\t\t\t<div class=\"Vlt-card Vlt-bg-white\">\n\t\t\t\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t\t\t\t<h5>{{c.Subject || c.subject || c.summary || c.title || c.CaseNumber || c.comment || c.body || c.name || c.topic || c.content || '...' }}</h5>\n\t\t\t\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\t\t\t\tCreated: <span class='Vlt-black'>{{c._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\t\t\t\tEdited: <span class='Vlt-black'>{{c._vgis.modifiedDate | date:'medium'}}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{c._vgis.resourceType}}</div>\n\t\t\t\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t\t\t\t<a *ngIf='c._vgis.externalLink' attr.href='{{c._vgis.externalLink}}' target='_blank' rel='noopener' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t\t\t\t<button type='button' (click)='openChild(child, c)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\"><svg style='margin-left: 0; margin-right: 0;'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ child.reference.editable ? 'edit' : 'eye-negative' }}\"/></svg></button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<button style='width: 100%; margin-top: 0; max-width: 100%;' type='button' (click)='openChild(child)' class=\"Vlt-btn Vlt-btn--small Vlt-btn--secondary\" [disabled]='child.creatable === false'>\n\t\t\t<svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>{{child.reference.label}}\n\t\t</button>\n\t</div>\n</div>\n<div *ngIf='!(meta.oneTimeOptional && showAll)' [ngClass]='{ centered: !meta.oneTimeOptional }'>\n\t<button *ngIf='!preview && optionalFieldsCount' type='button' (click)='toggleOptionalFields()' class=\"Vlt-btn Vlt-btn--small Vlt-btn--link more-button\" style='margin: 0; margin-bottom: 10px;'>\n\t\t<svg><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-chevron-{{ showAll ? 'up' : 'down' }}\"/></svg>\n\t\t{{ showAll ? 'Hide' : 'Show' }} Optional Fields ({{optionalFieldsCount}})\n\t</button>\n</div>\n", styles: ["vgip-meta-field{display:none}vgip-meta-field.shown{display:initial}.Vlt-section__title{line-height:14px;padding:16px 16px 14px 3px;margin:-9px -1px 8px;background-color:var(--vgip-meta-resource-bg-color);color:var(--vgip-meta-resource-color);position:sticky;top:-9px;z-index:3;border-bottom:1px solid var(--vgip-meta-separator-color)}.Vlt-section{margin:0;padding-bottom:8px;display:none}.Vlt-section.shown{display:block}.Vlt-btn.vlt-add-child:hover{transform:scale(1.02)}.for-preview{margin-top:-6px}.Vlt-card{margin-bottom:16px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}button.more-button:focus{font-weight:
|
|
1656
|
+
args: [{ selector: 'vgip-meta-layout', template: "<div *ngFor='let section of meta.sections' class='Vlt-section' [ngClass]=\"{ shown: showAll || section.visible || (!meta.oneTimeOptional && !section.$optional) || (meta.oneTimeOptional && !optionalFieldsCount) }\">\n\t<h5 *ngIf='section.label' class=\"Vlt-section__title\">{{section.label}}</h5>\n\t<div style='overflow: visible;' [ngClass]=\"{ 'for-preview': preview }\">\n\t\t<small *ngIf='section.description' class=\"Vlt-form__element__hint\">{{section.description}}</small>\n\t\t<div>\n\t\t\t<ng-container *ngFor='let field of section.fields'>\n\t\t\t\t<vgip-meta-field *ngIf='!field.$hidden && (showAll || section.visible || !field.$optional)' [meta]='field' [parent]='resource' [integrationCode]='integrationCode' [resourceType]='resourceType' [preview]='preview' [ngClass]=\"{ shown: !field.$invisible && (showAll || true) }\" theme='inherit' [attr.data-theme]='theme'></vgip-meta-field>\n\t\t\t</ng-container>\n\t\t</div>\n\t</div>\n</div>\n<div *ngIf='isPersistedResource && meta.children && preview'>\n\t<div *ngFor='let child of meta.children'>\n\t\t<h5 class='Vlt-children__title'>\n\t\t\t<svg class=\"Vlt-icon\"><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-stack\" /></svg> \n\t\t\t{{child.label}} <span class='Vlt-grey'>({{(resource[child.name] || []).length}})</span>\n\t\t</h5>\n\t\t<div *ngFor=\"let c of resource[child.name]\" style='position: relative;'>\n\n\t\t\t<div class=\"Vlt-card Vlt-bg-white\">\n\t\t\t\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t\t\t\t<h5>{{c.Subject || c.subject || c.summary || c.title || c.CaseNumber || c.comment || c.body || c.name || c.topic || c.content || '...' }}</h5>\n\t\t\t\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\t\t\t\tCreated: <span class='Vlt-black'>{{c._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\t\t\t\tEdited: <span class='Vlt-black'>{{c._vgis.modifiedDate | date:'medium'}}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{c._vgis.resourceType}}</div>\n\t\t\t\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t\t\t\t<a *ngIf='c._vgis.externalLink' attr.href='{{c._vgis.externalLink}}' target='_blank' rel='noopener' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t\t\t\t<button type='button' (click)='openChild(child, c)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\"><svg style='margin-left: 0; margin-right: 0;'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ child.reference.editable ? 'edit' : 'eye-negative' }}\"/></svg></button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<button style='width: 100%; margin-top: 0; max-width: 100%;' type='button' (click)='openChild(child)' class=\"Vlt-btn Vlt-btn--small Vlt-btn--secondary\" [disabled]='child.creatable === false'>\n\t\t\t<svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>{{child.reference.label}}\n\t\t</button>\n\t</div>\n</div>\n<div *ngIf='!(meta.oneTimeOptional && showAll)' [ngClass]='{ centered: !meta.oneTimeOptional }'>\n\t<button *ngIf='!preview && optionalFieldsCount' type='button' (click)='toggleOptionalFields()' class=\"Vlt-btn Vlt-btn--small Vlt-btn--link more-button\" style='margin: 0; margin-bottom: 10px;'>\n\t\t<svg><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-chevron-{{ showAll ? 'up' : 'down' }}\"/></svg>\n\t\t{{ showAll ? 'Hide' : 'Show' }} Optional Fields ({{optionalFieldsCount}})\n\t</button>\n</div>\n", styles: ["vgip-meta-field{display:none}vgip-meta-field.shown{display:initial}.Vlt-section__title{line-height:14px;padding:16px 16px 14px 3px;margin:-9px -1px 8px;background-color:var(--vgip-meta-resource-bg-color);color:var(--vgip-meta-resource-color);position:sticky;top:-9px;z-index:3;border-bottom:1px solid var(--vgip-meta-separator-color)}.Vlt-section{margin:0;padding-bottom:8px;display:none}.Vlt-section.shown{display:block}.Vlt-btn.vlt-add-child:hover{transform:scale(1.02)}.for-preview{margin-top:-6px}.Vlt-card{margin-bottom:16px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}button.more-button:focus{font-weight:700}.centered{text-align:center}.Vlt-btn--link{color:var(--vgip-meta-link-color)}.Vlt-btn--link:hover{color:var(--vgip-meta-link-hover-color)}.Vlt-btn--link svg{fill:var(--vgip-meta-link-color)}\n"] }]
|
|
1626
1657
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i3.MetaResourceService }, { type: i2.MetaReferenceService }]; }, propDecorators: { meta: [{
|
|
1627
1658
|
type: Input
|
|
1628
1659
|
}], resource: [{
|
|
@@ -1653,6 +1684,37 @@ export class MetaResource {
|
|
|
1653
1684
|
document.removeEventListener('click', this.onMenuClickout);
|
|
1654
1685
|
};
|
|
1655
1686
|
}
|
|
1687
|
+
get niceFields() {
|
|
1688
|
+
if (!this.resource.niceFields
|
|
1689
|
+
&& this.resource.meta
|
|
1690
|
+
&& this.resource.meta.layout
|
|
1691
|
+
&& this.resource.meta.layout.sections) {
|
|
1692
|
+
const extractSectionFields = (s) => {
|
|
1693
|
+
for (const f of s.fields) {
|
|
1694
|
+
if (f.name) {
|
|
1695
|
+
this.resource.niceFields[f.name] = f;
|
|
1696
|
+
}
|
|
1697
|
+
if (f.fields && f.fields.length) {
|
|
1698
|
+
extractSectionFields(f);
|
|
1699
|
+
}
|
|
1700
|
+
}
|
|
1701
|
+
};
|
|
1702
|
+
this.resource.niceFields = {};
|
|
1703
|
+
for (const s of this.resource.meta.layout.sections) {
|
|
1704
|
+
extractSectionFields(s);
|
|
1705
|
+
}
|
|
1706
|
+
}
|
|
1707
|
+
return this.resource.niceFields;
|
|
1708
|
+
}
|
|
1709
|
+
get fieldNames() {
|
|
1710
|
+
const names = Object.keys(this.niceFields);
|
|
1711
|
+
if (this.resource.meta.layout.children) {
|
|
1712
|
+
for (const child of this.resource.meta.layout.children) {
|
|
1713
|
+
names.push(child.name);
|
|
1714
|
+
}
|
|
1715
|
+
}
|
|
1716
|
+
return names;
|
|
1717
|
+
}
|
|
1656
1718
|
ngOnInit() {
|
|
1657
1719
|
this.integrationCode = (this.resource.integrationCode || '').toUpperCase();
|
|
1658
1720
|
this.resourceType = this.resource.resourceType;
|
|
@@ -1933,37 +1995,6 @@ export class MetaResource {
|
|
|
1933
1995
|
clearFormErrors() {
|
|
1934
1996
|
delete this.formErrors;
|
|
1935
1997
|
}
|
|
1936
|
-
get niceFields() {
|
|
1937
|
-
if (!this.resource.niceFields
|
|
1938
|
-
&& this.resource.meta
|
|
1939
|
-
&& this.resource.meta.layout
|
|
1940
|
-
&& this.resource.meta.layout.sections) {
|
|
1941
|
-
const extractSectionFields = (s) => {
|
|
1942
|
-
for (const f of s.fields) {
|
|
1943
|
-
if (f.name) {
|
|
1944
|
-
this.resource.niceFields[f.name] = f;
|
|
1945
|
-
}
|
|
1946
|
-
if (f.fields && f.fields.length) {
|
|
1947
|
-
extractSectionFields(f);
|
|
1948
|
-
}
|
|
1949
|
-
}
|
|
1950
|
-
};
|
|
1951
|
-
this.resource.niceFields = {};
|
|
1952
|
-
for (const s of this.resource.meta.layout.sections) {
|
|
1953
|
-
extractSectionFields(s);
|
|
1954
|
-
}
|
|
1955
|
-
}
|
|
1956
|
-
return this.resource.niceFields;
|
|
1957
|
-
}
|
|
1958
|
-
get fieldNames() {
|
|
1959
|
-
const names = Object.keys(this.niceFields);
|
|
1960
|
-
if (this.resource.meta.layout.children) {
|
|
1961
|
-
for (const child of this.resource.meta.layout.children) {
|
|
1962
|
-
names.push(child.name);
|
|
1963
|
-
}
|
|
1964
|
-
}
|
|
1965
|
-
return names;
|
|
1966
|
-
}
|
|
1967
1998
|
suggestFieldProperty(key, value) {
|
|
1968
1999
|
if (key && value) {
|
|
1969
2000
|
const fieldNames = this.fieldNames;
|
|
@@ -2088,11 +2119,11 @@ export class MetaResource {
|
|
|
2088
2119
|
this.el.nativeElement.dispatchEvent(e);
|
|
2089
2120
|
}
|
|
2090
2121
|
}
|
|
2091
|
-
MetaResource.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2092
|
-
MetaResource.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
2093
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2122
|
+
MetaResource.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaResource, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i3.MetaResourceService }, { token: i7.MetaContextService }, { token: i6.MetaMsgService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2123
|
+
MetaResource.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: MetaResource, selector: "vgip-meta-resource", inputs: { resource: "resource", model: "model", metaResourceServiceDelegated: "metaResourceServiceDelegated", theme: "theme" }, outputs: { done: "done" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<div *ngIf='!meta' class=\"Vlt-progress\">\n\t<div class=\"Vlt-progress__bar\" [ngClass]=\"{ loading: metaLoading }\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuetext=\"Loading Metadata\" aria-valuemax=\"100\"></div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' novalidate>\n\t<div class='form-content' style='overflow: hidden;'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='editMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='isPersistent'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg> Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>", styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:before,.Vlt-spinner:after{border:6px solid #616266;border-color:#616266 transparent transparent}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media (hover: none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px #00000040;z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none;box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}.Vlt-progress{margin:0;position:sticky}.Vlt-progress .Vlt-progress__bar{width:0;transition:width 5s}.Vlt-progress .Vlt-progress__bar.loading{width:100%}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;inset:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: MetaLayout, selector: "vgip-meta-layout", inputs: ["meta", "resource", "integration", "type", "preview", "theme"] }, { kind: "directive", type: i9.MetaAutofocusDirective, selector: "[vgipMetaFormAutofocus]", inputs: ["vgipMetaFormAutofocus"] }] });
|
|
2124
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaResource, decorators: [{
|
|
2094
2125
|
type: Component,
|
|
2095
|
-
args: [{ selector: 'vgip-meta-resource', template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<div *ngIf='!meta' class=\"Vlt-progress\">\n\t<div class=\"Vlt-progress__bar\" [ngClass]=\"{ loading: metaLoading }\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuetext=\"Loading Metadata\" aria-valuemax=\"100\"></div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' novalidate>\n\t<div class='form-content' style='overflow: hidden;'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='editMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='isPersistent'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg> Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>", styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:before,.Vlt-spinner:after{border:6px solid #616266;border-color:#616266 transparent transparent}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media (hover: none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px #00000040;z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none;box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}.Vlt-progress{margin:0;position:sticky}.Vlt-progress .Vlt-progress__bar{width:0;transition:width 5s}.Vlt-progress .Vlt-progress__bar.loading{width:100%}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;
|
|
2126
|
+
args: [{ selector: 'vgip-meta-resource', template: "<div *ngIf='generalError' class=\"Vlt-callout Vlt-callout--critical\" style='overflow: auto; margin: 20px;'>\n\t<i></i>\n\t<div class=\"Vlt-callout__content\">\n\t\t<p>{{generalError}}</p>\n\t</div>\n</div>\n<div *ngIf='!meta' class=\"Vlt-progress\">\n\t<div class=\"Vlt-progress__bar\" [ngClass]=\"{ loading: metaLoading }\" role=\"progressbar\" aria-valuemin=\"0\" aria-valuetext=\"Loading Metadata\" aria-valuemax=\"100\"></div>\n</div>\n<form [vgipMetaFormAutofocus]='!resource || !resource.externalId' *ngIf='meta && !generalError' #resourceForm=\"ngForm\" [name]='resource.resourceType' (ngSubmit)='submit(resourceForm)' novalidate>\n\t<div class='form-content' style='overflow: hidden;'>\n\t\t<div [ngClass]=\"{ 'Vlt-callout--dismissed': !formErrors }\" class=\"Vlt-callout Vlt-callout--banner Vlt-callout--critical\">\n\t\t\t<i></i>\n\t\t\t<div class=\"Vlt-callout__content\" style=\"margin-top: auto;\">\n\t\t\t\t<p>There is a problem with one or more fields</p>\n\t\t\t\t<small style='font-weight: 600; font-size: 1.0em;' *ngIf='formErrors'>{{ formErrors.message || formErrors }}</small>\n\t\t\t</div>\n\t\t\t<button type='button' class=\"Vlt-callout__dismiss\" (click)='clearFormErrors()' aria-label=\"Dismiss\"></button>\n\t\t</div>\n\t\t<div class=\"Vlt-card__content\" style='min-height: 40px;'>\n\t\t\t<vgip-meta-layout *ngIf='edit' [meta]='meta.layout' [resource]='model' [preview]='false' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t\t<vgip-meta-layout *ngIf='!edit' [meta]='meta.layout' [resource]='model' [preview]='true' [integration]='meta.integration' [type]='resource.resourceType' theme='inherit'></vgip-meta-layout>\n\t\t</div>\n\t</div>\n\t<div class=\"Vlt-card__footer\">\n\t\t<button class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--app Vlt-btn--outline\" type='button' aria-label='Cancel' (click)='close()'>\n\t\t\t{{ edit ? 'Cancel' : 'Close' }}\n\t\t</button>\n\t\t<button *ngIf='edit' class=\"Vlt-btn Vlt-btn--app\" [ngClass]=\"{ 'Vlt-btn--primary': isPersistent, 'Vlt-btn--secondary': !isPersistent }\" type='submit'>\n\t\t\t{{ (resource && resource.externalId) ? 'Update' : 'Create' }}\n\t\t</button>\n\t\t<button (click)='editMode()' *ngIf='!edit && isEditable' [disabled]='!isEditable' class=\"Vlt-btn Vlt-btn--app Vlt-btn--primary\" type='button' aria-label='Edit'>\n\t\t\tEdit\n\t\t</button>\n\t\t<div style='margin-right: 8px; flex: 1;'>\n\t\t\t<div *ngIf='meta.availableLayouts && meta.availableLayouts.length' class=\"Vlt-form__element Vlt-form__element--big\" style='padding: 0; margin: -8px -18px -8px 0;'>\n\t\t\t\t<div class=\"Vlt-select\">\n\t\t\t\t\t<label style='all: inherit;'>\n\t\t\t\t\t\t<select style='border: 0; margin-top: 3px; background: transparent;' (change)='changeLayout()' [(ngModel)]='currentLayoutId' [ngModelOptions]='{ standalone: true }' [disabled]='isPersistent'>\n\t\t\t\t\t\t\t<option selected disabled>Select layout</option>\n\t\t\t\t\t\t\t<option *ngFor='let layout of meta.availableLayouts' [ngValue]='layout.id'>{{layout.name}}</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<label>Layout</label>\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"Vlt-dropdown resource-menu\" [ngClass]=\"{ 'Vlt-dropdown--expanded': resourceMenuVisible }\" style='margin-left: 2px;'>\n\t\t\t<div class=\"Vlt-dropdown__panel\" style='bottom: 40px; right: -4px; top: initial;'>\n\t\t\t\t<div class=\"Vlt-dropdown__panel__content\">\n\t\t\t\t\t<a class=\"Vlt-dropdown__link\" (click)='loadMetadata(currentLayoutId, true)'>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--smaller'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-refresh\"/></svg> Refresh metadata\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"Vlt-dropdown__trigger\">\n\t\t\t\t<button type='button' (click)='openResourceMenu()' class=\"Vlt-btn Vlt-btn--link\" aria-label='Resource menu'>\n\t\t\t\t\t<svg class='Vlt-icon Vlt-icon--small' style='margin: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-more-v-negative\"/></svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</form>\n<div class='busy-mask' [ngClass]=\"{ active: busy }\">\n\t<div style='height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;'>\n\t\t<div class=\"Vlt-spinner\"></div>\n\t</div>\n</div>", styles: [":host{flex:1;display:flex;flex-direction:column;min-height:0;color:var(--vgip-meta-resource-color)}.Vlt-callout--banner{justify-content:initial;text-align:initial;overflow-y:auto}.Vlt-callout--banner.Vlt-callout--dismissed{padding:0}.Vlt-callout--banner:not(.Vlt-callout--dismissed){min-height:78px}.Vlt-spinner:before,.Vlt-spinner:after{border:6px solid #616266;border-color:#616266 transparent transparent}.Vlt-card__content{padding:8px 8px 8px 16px;display:flex;flex-direction:column;min-height:0;flex:1;overflow-y:scroll;overflow-x:hidden;background-color:var(--vgip-meta-resource-bg-color)}@media (hover: none){.Vlt-card__content{padding-right:16px}}.Vlt-card__content::-webkit-scrollbar{width:8px}.Vlt-card__content::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}.Vlt-card__footer{background:var(--vgip-meta-resource-bar-color);border-top:1px solid var(--vgip-meta-separator-color);display:flex;flex-direction:row;margin:16px -24px -24px;padding:8px 8px 8px 16px;box-shadow:0 0 4px #00000040;z-index:1}.Vlt-card__footer .Vlt-select select{color:var(--vgip-meta-input-color)}.Vlt-card__footer .Vlt-select select:disabled{background:initial;cursor:not-allowed}.Vlt-card__footer .Vlt-select:after{background-image:var(--vgip-meta-dropdown-icon)}.Vlt-card__footer .resource-menu .Vlt-icon:not(:hover){fill:var(--vgip-meta-input-label-color)}.Vlt-card__footer button.Vlt-btn--secondary{border:none;box-shadow:inset 0 0 0 1px var(--vgip-meta-button-border-color)}.Vlt-card__footer button.Vlt-btn--secondary:not([type=submit]){color:var(--vgip-meta-input-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover{box-shadow:inset 0 0 0 1px var(--vgip-meta-input-accent-color)}.Vlt-card__footer button.Vlt-btn--secondary:hover[type=submit]{background-color:var(--vgip-meta-submit-hover-bg-color)}.Vlt-progress{margin:0;position:sticky}.Vlt-progress .Vlt-progress__bar{width:0;transition:width 5s}.Vlt-progress .Vlt-progress__bar.loading{width:100%}form{border-radius:6px;padding:24px;display:flex;flex-direction:column;min-height:0;flex:1}form .form-content{margin:-24px -24px -16px;padding-bottom:0;flex:1;display:flex;flex-direction:column}.busy-mask{position:absolute;inset:0;background:rgba(0,0,0,.32);opacity:1;z-index:898;display:none;border-bottom-left-radius:6px;border-bottom-right-radius:6px;margin:1px;cursor:progress}.busy-mask.active{display:block}\n"] }]
|
|
2096
2127
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i3.MetaResourceService }, { type: i7.MetaContextService }, { type: i6.MetaMsgService }]; }, propDecorators: { resource: [{
|
|
2097
2128
|
type: Input
|
|
2098
2129
|
}], model: [{
|
|
@@ -2130,9 +2161,9 @@ export class MetaResourceCard {
|
|
|
2130
2161
|
});
|
|
2131
2162
|
}
|
|
2132
2163
|
}
|
|
2133
|
-
MetaResourceCard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2134
|
-
MetaResourceCard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
2135
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2164
|
+
MetaResourceCard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaResourceCard, deps: [{ token: i0.ComponentFactoryResolver }, { token: i3.MetaResourceService }, { token: i2.MetaReferenceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2165
|
+
MetaResourceCard.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: MetaResourceCard, selector: "vgip-meta-resource-card", inputs: { resource: "resource", model: "model" }, ngImport: i0, template: "<div class=\"Vlt-card Vlt-bg-white\">\n\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t<h5>{{model.Subject || model.subject || model.summary || model.title || model.CaseNumber || model.comment || model.body || model.name || model.topic || '...' }}</h5>\n\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\tCreated: <span class='Vlt-black'>{{model._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\tEdited: <span class='Vlt-black'>{{model._vgis.modifiedDate | date:'medium'}}</span>\n\t\t</div>\n\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{model._vgis.resourceType}}</div>\n\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t<a *ngIf='model._vgis.externalLink' attr.href='{{model._vgis.externalLink}}' target='_blank' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t<button type='button' (click)='open(resource, model)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Edit'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg></button>\n\t\t</div>\n\t</div>\n</div>\n", styles: [".Vlt-card{margin-bottom:8px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
|
|
2166
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaResourceCard, decorators: [{
|
|
2136
2167
|
type: Component,
|
|
2137
2168
|
args: [{ selector: 'vgip-meta-resource-card', template: "<div class=\"Vlt-card Vlt-bg-white\">\n\t<div class=\"Vlt-card__content Vlt-btn-on-hover\">\n\t\t<h5>{{model.Subject || model.subject || model.summary || model.title || model.CaseNumber || model.comment || model.body || model.name || model.topic || '...' }}</h5>\n\t\t<div style='font-size: 12px; line-height: 16px;'>\n\t\t\tCreated: <span class='Vlt-black'>{{model._vgis.createdDate | date:'mediumDate'}}</span>\n\t\t\tEdited: <span class='Vlt-black'>{{model._vgis.modifiedDate | date:'medium'}}</span>\n\t\t</div>\n\t\t<div class=\"Vlt-badge Vlt-badge--app Vlt-badge--purple Vlt-badge--small\">{{model._vgis.resourceType}}</div>\n\t\t<div class=\"Vlt-btn-group Vlt-btn-group--hover\">\n\t\t\t<a *ngIf='model._vgis.externalLink' attr.href='{{model._vgis.externalLink}}' target='_blank' rel='noopener' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Open external'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg></a>\n\t\t\t<button type='button' (click)='open(resource, model)' class=\"Vlt-btn Vlt-btn--tertiary Vlt-btn--icon\" aria-label='Edit'><svg style='margin-left: 0; margin-right: 0;'><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg></button>\n\t\t</div>\n\t</div>\n</div>\n", styles: [".Vlt-card{margin-bottom:8px;padding:16px}.Vlt-card .Vlt-btn-group.Vlt-btn-group--hover{right:-8px}\n"] }]
|
|
2138
2169
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i3.MetaResourceService }, { type: i2.MetaReferenceService }]; }, propDecorators: { resource: [{
|
|
@@ -2193,9 +2224,9 @@ export class MetaFieldContentDirective {
|
|
|
2193
2224
|
this.viewContainerRef = viewContainerRef;
|
|
2194
2225
|
}
|
|
2195
2226
|
}
|
|
2196
|
-
MetaFieldContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2197
|
-
MetaFieldContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
2198
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2227
|
+
MetaFieldContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaFieldContentDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2228
|
+
MetaFieldContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.0", type: MetaFieldContentDirective, selector: "[metaFieldContent]", ngImport: i0 });
|
|
2229
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaFieldContentDirective, decorators: [{
|
|
2199
2230
|
type: Directive,
|
|
2200
2231
|
args: [{
|
|
2201
2232
|
selector: '[metaFieldContent]'
|
|
@@ -2239,11 +2270,11 @@ export class MetaField extends FieldAbstract {
|
|
|
2239
2270
|
});
|
|
2240
2271
|
}
|
|
2241
2272
|
}
|
|
2242
|
-
MetaField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2243
|
-
MetaField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", type: MetaField, selector: "vgip-meta-field", inputs: { meta: "meta", parent: "parent", integrationCode: "integrationCode", resourceType: "resourceType", index: "index", preview: "preview", theme: "theme" }, outputs: { onChange: "onChange", onLeave: "onLeave" }, viewQueries: [{ propertyName: "fieldContent", first: true, predicate: MetaFieldContentDirective, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: '<ng-template metaFieldContent>Loading</ng-template>', isInline: true, styles: [":host ::ng-deep label.wrapper{padding:0;pointer-events:initial;position:initial;top:initial;transition:none}@media only screen and (max-width: 575px){:host ::ng-deep .hidden-mobile{display:none}}@media only screen and (min-width: 576px){:host ::ng-deep .hidden-desktop{display:none}}:host ::ng-deep .Vlt-form__element>.Vlt-label,:host ::ng-deep .Vlt-form__element>label>.Vlt-label{margin-top:-6px}:host ::ng-deep .Vlt-form__element .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{color:var(--vgip-meta-input-color)}@media (hover: none){:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{font-size:16px}}:host ::ng-deep .Vlt-form__element .Vlt-input input::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-select select::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea::placeholder{color:var(--vgip-meta-input-placeholder-color)}:host ::ng-deep .Vlt-form__element label{color:var(--vgip-meta-input-label-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled{background:var(--vgip-meta-input-disabled-bg-color);border-color:var(--vgip-meta-input-disabled-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon .active{border-color:var(--vgip-meta-input-active-border-color)}:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-select select:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-custom-select__input:focus{border-color:#f25a6b}:host ::ng-deep .Vlt-dropdown__link{padding:12px}:host ::ng-deep .Vlt-dropdown__link svg{margin-left:0}:host ::ng-deep .Vlt-dropdown__link small{line-height:inherit}:host ::ng-deep .Vlt-dropdown__link.Vlt-dropdown__link--selected:after{width:20px;top:14px;background:var(--vgip-meta-dropdown-check-icon) no-repeat right center;background-size:contain}:host ::ng-deep .Vlt-dropdown__block{padding:2px 16px}:host ::ng-deep .meta-field-reference .Vlt-dropdown__link.has-type.Vlt-dropdown__link--selected:after{position:initial}:host ::ng-deep .Vlt-dropdown__panel__content{background:var(--vgip-meta-dropdown-bg-color);box-shadow:var(--vgip-meta-dropdown-shadow)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__link,:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__block{color:var(--vgip-meta-input-color)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar{width:8px}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}:host ::ng-deep .Vlt-dropdown__panel__content.suggestions{background:var(--vgip-meta-suggestions-bg-color)}:host ::ng-deep .Vlt-dropdown__panel{z-index:999}:host ::ng-deep .Vlt-dropdown__panel__content--scroll-area{padding:0}:host ::ng-deep .Vlt-composite__append--icon{bottom:0;height:initial}:host ::ng-deep .search-progress{display:block;position:relative;width:100%;height:3px;margin-top:-3px;padding-top:0!important;margin-bottom:0!important}:host ::ng-deep .search-progress .container{display:block;position:relative;overflow:hidden;width:100%;height:3px;transform:translate(0) scale(1)}:host ::ng-deep .search-progress .container .bar{position:absolute;left:0;top:0;bottom:0;width:100%;height:3px;border-radius:50%;transition:all .3s linear;animation:query .9s infinite cubic-bezier(.3,.6,.6,1)}@keyframes query{0%{opacity:1;transform:translate(35%) scaleX(.3)}to{opacity:0;transform:translate(-50%) scaleX(0)}}::ng-deep vgip-meta-field.shown vgip-meta-field{display:initial}::ng-deep vgip-meta-field .vgip-meta-field-preview{display:flex;flex-direction:row;padding-bottom:5px;padding-top:5px;margin-left:10px;border-bottom:1px solid #e7ebee}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-label{flex:1 1 100%;max-width:20%;max-height:100%;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-right:2px}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-value{min-width:0;width:0;box-sizing:border-box;flex:1;font-weight:bold}\n"], directives: [{ type: MetaFieldContentDirective, selector: "[metaFieldContent]" }] });
|
|
2244
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2273
|
+
MetaField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaField, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2274
|
+
MetaField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: MetaField, selector: "vgip-meta-field", inputs: { meta: "meta", parent: "parent", integrationCode: "integrationCode", resourceType: "resourceType", index: "index", preview: "preview", theme: "theme" }, outputs: { onChange: "onChange", onLeave: "onLeave" }, viewQueries: [{ propertyName: "fieldContent", first: true, predicate: MetaFieldContentDirective, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: '<ng-template metaFieldContent>Loading</ng-template>', isInline: true, styles: [":host ::ng-deep label.wrapper{padding:0;pointer-events:initial;position:initial;top:initial;transition:none}@media only screen and (max-width: 575px){:host ::ng-deep .hidden-mobile{display:none}}@media only screen and (min-width: 576px){:host ::ng-deep .hidden-desktop{display:none}}:host ::ng-deep .Vlt-form__element>.Vlt-label,:host ::ng-deep .Vlt-form__element>label>.Vlt-label{margin-top:-6px}:host ::ng-deep .Vlt-form__element .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{color:var(--vgip-meta-input-color)}@media (hover: none){:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{font-size:16px}}:host ::ng-deep .Vlt-form__element .Vlt-input input::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-select select::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea::placeholder{color:var(--vgip-meta-input-placeholder-color)}:host ::ng-deep .Vlt-form__element label{color:var(--vgip-meta-input-label-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled{background:var(--vgip-meta-input-disabled-bg-color);border-color:var(--vgip-meta-input-disabled-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon .active{border-color:var(--vgip-meta-input-active-border-color)}:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-select select:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-custom-select__input:focus{border-color:#f25a6b}:host ::ng-deep .Vlt-dropdown__link{padding:12px}:host ::ng-deep .Vlt-dropdown__link svg{margin-left:0}:host ::ng-deep .Vlt-dropdown__link small{line-height:inherit}:host ::ng-deep .Vlt-dropdown__link.Vlt-dropdown__link--selected:after{width:20px;top:14px;background:var(--vgip-meta-dropdown-check-icon) no-repeat right center;background-size:contain}:host ::ng-deep .Vlt-dropdown__block{padding:2px 16px}:host ::ng-deep .meta-field-reference .Vlt-dropdown__link.has-type.Vlt-dropdown__link--selected:after{position:initial}:host ::ng-deep .Vlt-dropdown__panel__content{background:var(--vgip-meta-dropdown-bg-color);box-shadow:var(--vgip-meta-dropdown-shadow)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__link,:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__block{color:var(--vgip-meta-input-color)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar{width:8px}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}:host ::ng-deep .Vlt-dropdown__panel__content.suggestions{background:var(--vgip-meta-suggestions-bg-color)}:host ::ng-deep .Vlt-dropdown__panel{z-index:999}:host ::ng-deep .Vlt-dropdown__panel__content--scroll-area{padding:0}:host ::ng-deep .Vlt-composite__append--icon{bottom:0;height:initial}:host ::ng-deep .search-progress{display:block;position:relative;width:100%;height:3px;margin-top:-3px;padding-top:0!important;margin-bottom:0!important}:host ::ng-deep .search-progress .container{display:block;position:relative;overflow:hidden;width:100%;height:3px;transform:translate(0) scale(1)}:host ::ng-deep .search-progress .container .bar{position:absolute;left:0;top:0;bottom:0;width:100%;height:3px;border-radius:50%;transition:all .3s linear;animation:query .9s infinite cubic-bezier(.3,.6,.6,1)}@keyframes query{0%{opacity:1;transform:translate(35%) scaleX(.3)}to{opacity:0;transform:translate(-50%) scaleX(0)}}::ng-deep vgip-meta-field.shown vgip-meta-field{display:initial}::ng-deep vgip-meta-field .vgip-meta-field-preview{display:flex;flex-direction:row;padding-bottom:5px;padding-top:5px;margin-left:10px;border-bottom:1px solid #e7ebee}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-label{flex:1 1 100%;max-width:20%;max-height:100%;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-right:2px}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-value{min-width:0;width:0;box-sizing:border-box;flex:1;font-weight:700}\n"], dependencies: [{ kind: "directive", type: MetaFieldContentDirective, selector: "[metaFieldContent]" }] });
|
|
2275
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: MetaField, decorators: [{
|
|
2245
2276
|
type: Component,
|
|
2246
|
-
args: [{ selector: 'vgip-meta-field', template: '<ng-template metaFieldContent>Loading</ng-template>', styles: [":host ::ng-deep label.wrapper{padding:0;pointer-events:initial;position:initial;top:initial;transition:none}@media only screen and (max-width: 575px){:host ::ng-deep .hidden-mobile{display:none}}@media only screen and (min-width: 576px){:host ::ng-deep .hidden-desktop{display:none}}:host ::ng-deep .Vlt-form__element>.Vlt-label,:host ::ng-deep .Vlt-form__element>label>.Vlt-label{margin-top:-6px}:host ::ng-deep .Vlt-form__element .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{color:var(--vgip-meta-input-color)}@media (hover: none){:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{font-size:16px}}:host ::ng-deep .Vlt-form__element .Vlt-input input::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-select select::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea::placeholder{color:var(--vgip-meta-input-placeholder-color)}:host ::ng-deep .Vlt-form__element label{color:var(--vgip-meta-input-label-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled{background:var(--vgip-meta-input-disabled-bg-color);border-color:var(--vgip-meta-input-disabled-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon .active{border-color:var(--vgip-meta-input-active-border-color)}:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-select select:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-custom-select__input:focus{border-color:#f25a6b}:host ::ng-deep .Vlt-dropdown__link{padding:12px}:host ::ng-deep .Vlt-dropdown__link svg{margin-left:0}:host ::ng-deep .Vlt-dropdown__link small{line-height:inherit}:host ::ng-deep .Vlt-dropdown__link.Vlt-dropdown__link--selected:after{width:20px;top:14px;background:var(--vgip-meta-dropdown-check-icon) no-repeat right center;background-size:contain}:host ::ng-deep .Vlt-dropdown__block{padding:2px 16px}:host ::ng-deep .meta-field-reference .Vlt-dropdown__link.has-type.Vlt-dropdown__link--selected:after{position:initial}:host ::ng-deep .Vlt-dropdown__panel__content{background:var(--vgip-meta-dropdown-bg-color);box-shadow:var(--vgip-meta-dropdown-shadow)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__link,:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__block{color:var(--vgip-meta-input-color)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar{width:8px}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}:host ::ng-deep .Vlt-dropdown__panel__content.suggestions{background:var(--vgip-meta-suggestions-bg-color)}:host ::ng-deep .Vlt-dropdown__panel{z-index:999}:host ::ng-deep .Vlt-dropdown__panel__content--scroll-area{padding:0}:host ::ng-deep .Vlt-composite__append--icon{bottom:0;height:initial}:host ::ng-deep .search-progress{display:block;position:relative;width:100%;height:3px;margin-top:-3px;padding-top:0!important;margin-bottom:0!important}:host ::ng-deep .search-progress .container{display:block;position:relative;overflow:hidden;width:100%;height:3px;transform:translate(0) scale(1)}:host ::ng-deep .search-progress .container .bar{position:absolute;left:0;top:0;bottom:0;width:100%;height:3px;border-radius:50%;transition:all .3s linear;animation:query .9s infinite cubic-bezier(.3,.6,.6,1)}@keyframes query{0%{opacity:1;transform:translate(35%) scaleX(.3)}to{opacity:0;transform:translate(-50%) scaleX(0)}}::ng-deep vgip-meta-field.shown vgip-meta-field{display:initial}::ng-deep vgip-meta-field .vgip-meta-field-preview{display:flex;flex-direction:row;padding-bottom:5px;padding-top:5px;margin-left:10px;border-bottom:1px solid #e7ebee}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-label{flex:1 1 100%;max-width:20%;max-height:100%;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-right:2px}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-value{min-width:0;width:0;box-sizing:border-box;flex:1;font-weight:bold}\n"] }]
|
|
2277
|
+
args: [{ selector: 'vgip-meta-field', template: '<ng-template metaFieldContent>Loading</ng-template>', styles: [":host ::ng-deep label.wrapper{padding:0;pointer-events:initial;position:initial;top:initial;transition:none}@media only screen and (max-width: 575px){:host ::ng-deep .hidden-mobile{display:none}}@media only screen and (min-width: 576px){:host ::ng-deep .hidden-desktop{display:none}}:host ::ng-deep .Vlt-form__element>.Vlt-label,:host ::ng-deep .Vlt-form__element>label>.Vlt-label{margin-top:-6px}:host ::ng-deep .Vlt-form__element .Vlt-form__element__hint{color:var(--vgip-meta-input-hint-color)}:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{color:var(--vgip-meta-input-color)}@media (hover: none){:host ::ng-deep .Vlt-form__element .Vlt-input input,:host ::ng-deep .Vlt-form__element .Vlt-select select,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea{font-size:16px}}:host ::ng-deep .Vlt-form__element .Vlt-input input::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-select select::placeholder,:host ::ng-deep .Vlt-form__element .Vlt-textarea textarea::placeholder{color:var(--vgip-meta-input-placeholder-color)}:host ::ng-deep .Vlt-form__element label{color:var(--vgip-meta-input-label-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:disabled,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:disabled{background:var(--vgip-meta-input-disabled-bg-color);border-color:var(--vgip-meta-input-disabled-border-color)}:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-form-error-style .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-input input.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-select select.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-textarea textarea.ng-untouched:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-custom-select__input:invalid .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-radio input.ng-untouched:invalid+.Vlt-checkbox__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-radio__icon .active,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:hover,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon:focus,:host ::ng-deep .Vlt-form__element:not(.Vlt-form__element--error) .Vlt-checkbox input.ng-untouched:invalid+.Vlt-checkbox__icon .active{border-color:var(--vgip-meta-input-active-border-color)}:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-input input:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-select select:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-textarea textarea:focus,:host ::ng-deep .Vlt-form__element.Vlt-form__element--error .Vlt-custom-select__input:focus{border-color:#f25a6b}:host ::ng-deep .Vlt-dropdown__link{padding:12px}:host ::ng-deep .Vlt-dropdown__link svg{margin-left:0}:host ::ng-deep .Vlt-dropdown__link small{line-height:inherit}:host ::ng-deep .Vlt-dropdown__link.Vlt-dropdown__link--selected:after{width:20px;top:14px;background:var(--vgip-meta-dropdown-check-icon) no-repeat right center;background-size:contain}:host ::ng-deep .Vlt-dropdown__block{padding:2px 16px}:host ::ng-deep .meta-field-reference .Vlt-dropdown__link.has-type.Vlt-dropdown__link--selected:after{position:initial}:host ::ng-deep .Vlt-dropdown__panel__content{background:var(--vgip-meta-dropdown-bg-color);box-shadow:var(--vgip-meta-dropdown-shadow)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__link,:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__block{color:var(--vgip-meta-input-color)}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar{width:8px}:host ::ng-deep .Vlt-dropdown__panel__content .Vlt-dropdown__scroll::-webkit-scrollbar-thumb{background-color:var(--vgip-meta-scrollbar-color);border:2px solid transparent;border-radius:6px;background-clip:content-box}:host ::ng-deep .Vlt-dropdown__panel__content.suggestions{background:var(--vgip-meta-suggestions-bg-color)}:host ::ng-deep .Vlt-dropdown__panel{z-index:999}:host ::ng-deep .Vlt-dropdown__panel__content--scroll-area{padding:0}:host ::ng-deep .Vlt-composite__append--icon{bottom:0;height:initial}:host ::ng-deep .search-progress{display:block;position:relative;width:100%;height:3px;margin-top:-3px;padding-top:0!important;margin-bottom:0!important}:host ::ng-deep .search-progress .container{display:block;position:relative;overflow:hidden;width:100%;height:3px;transform:translate(0) scale(1)}:host ::ng-deep .search-progress .container .bar{position:absolute;left:0;top:0;bottom:0;width:100%;height:3px;border-radius:50%;transition:all .3s linear;animation:query .9s infinite cubic-bezier(.3,.6,.6,1)}@keyframes query{0%{opacity:1;transform:translate(35%) scaleX(.3)}to{opacity:0;transform:translate(-50%) scaleX(0)}}::ng-deep vgip-meta-field.shown vgip-meta-field{display:initial}::ng-deep vgip-meta-field .vgip-meta-field-preview{display:flex;flex-direction:row;padding-bottom:5px;padding-top:5px;margin-left:10px;border-bottom:1px solid #e7ebee}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-label{flex:1 1 100%;max-width:20%;max-height:100%;box-sizing:border-box;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin-right:2px}::ng-deep vgip-meta-field .vgip-meta-field-preview .vgip-meta-field-value{min-width:0;width:0;box-sizing:border-box;flex:1;font-weight:700}\n"] }]
|
|
2247
2278
|
}], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.ElementRef }]; }, propDecorators: { meta: [{
|
|
2248
2279
|
type: Input
|
|
2249
2280
|
}], parent: [{
|
|
@@ -2266,4 +2297,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", ngImpor
|
|
|
2266
2297
|
type: ViewChild,
|
|
2267
2298
|
args: [MetaFieldContentDirective, { static: true }]
|
|
2268
2299
|
}] } });
|
|
2269
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVmRGlhbG9nL3ZpZXcuaHRtbCIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZENvbXBvc2l0ZS92aWV3Lmh0bWwiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRTZWxlY3Qvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL2ZpZWxkUmVmZXJlbmNlL3ZpZXcuaHRtbCIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZExpc3Qvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL2xheW91dC92aWV3Lmh0bWwiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVzb3VyY2Uvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL3Jlc291cmNlQ2FyZC92aWV3Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUMxQyxTQUFTLEVBQWdDLFlBQVksRUFDMUMsTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUXBFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FB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LENBQUM7SUFDTCxDQUFDOztzR0E5Q1UsU0FBUzswRkFBVCxTQUFTLDhUQWFULHlCQUF5QixxRkFoQnhCLHFEQUFxRCxzZ1ZBTnRELHlCQUF5QjsyRkFTekIsU0FBUztrQkFMckIsU0FBUzsrQkFDSSxpQkFBaUIsWUFDakIscURBQXFEO3dJQUl4RCxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUVHLE9BQU87c0JBQWhCLE1BQU07Z0JBRWlELFlBQVk7c0JBQW5FLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEBBdXRob3I6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tXG4gKiBARGF0ZTogMjAxOS0wOS0xOSAxNzozNToxOVxuICogQExhc3QgTW9kaWZpZWQgYnk6IEFsZXhhbmRlci5WYW5nZWxvdkB2b25hZ2UuY29tXG4gKiBATGFzdCBNb2RpZmllZCB0aW1lOiAyMDIwLTA0LTE4IDE4OjExOjQyXG4gKi9cblxuaW1wb3J0IHsgRGlyZWN0aXZlLCBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIE9uSW5pdCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLy8gaW1wb3J0IHsgTWV0YVJlZkRpYWxvZyB9IGZyb20gJy4vcmVmRGlhbG9nJztcbmltcG9ydCB7IE1ldGFSZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9tZXRhUmVmZXJlbmNlJztcbmltcG9ydCB7IE1ldGFSZXNvdXJjZVNlcnZpY2UsIElNZXRhUmVzb3VyY2VDb25maWcgfSBmcm9tICcuL3NlcnZpY2VzL21ldGFSZXNvdXJjZSc7XG5pbXBvcnQgeyBNZXRhTXNnU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbWV0YU1zZyc7XG5pbXBvcnQgeyBNZXRhQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL21ldGFDb250ZXh0JztcbmltcG9ydCB7IE1ldGFUcmFja2VyU2VydmljZSwgSU1ldGFUcmFja2VyRXZlbnQgfSBmcm9tICcuL3NlcnZpY2VzL21ldGFUcmFja2VyJztcbmltcG9ydCB7IG1ldGFEYXJrLCBtZXRhTGlnaHQgfSBmcm9tICcuL2NvbW1vbi91dGlscy9jb2xvclRoZW1lcyc7XG5pbXBvcnQgeyBtZXRhTm9ybWFsaXplciB9IGZyb20gJy4vY29tbW9uL21ldGFOb3JtYWxpemVyJztcbmltcG9ydCB7IHRlbXBsYXRlQnVpbGRlciB9IGZyb20gJy4vY29tbW9uL3V0aWxzL3RlbXBsYXRlQnVpbGRlcic7XG5cbmltcG9ydCB7IEZpZWxkQWJzdHJhY3QgfSBmcm9tICcuL2ZpZWxkQWJzdHJhY3QnO1xuaW1wb3J0IHsgRmllbGRVbmtub3duIH0gZnJvbSAnLi9maWVsZFVua25vd24nO1xuaW1wb3J0IHsgRmllbGRUZXh0IH0gZnJvbSAnLi9maWVsZFRleHQnO1xuaW1wb3J0IHsgRmllbGRJbnB1dCB9IGZyb20gJy4vZmllbGRJbnB1dCc7XG4vLyBpbXBvcnQgeyBGaWVsZFNlbGVjdCB9IGZyb20gJy4vZmllbGRTZWxlY3QnO1xuLy8gaW1wb3J0IHsgRmllbGRSZWZlcmVuY2UgfSBmcm9tICcuL2ZpZWxkUmVmZXJlbmNlJztcbi8vIGltcG9ydCB7IEZpZWxkQ29tcG9zaXRlIH0gZnJvbSAnLi9maWVsZENvbXBvc2l0ZSc7XG5pbXBvcnQgeyBGaWVsZEJvb2xlYW4gfSBmcm9tICcuL2ZpZWxkQm9vbGVhbic7XG5pbXBvcnQgeyBGaWVsZFJhZGlvIH0gZnJvbSAnLi9maWVsZFJhZGlvJztcbi8vIGltcG9ydCB7IEZpZWxkTGlzdCB9IGZyb20gJy4vZmllbGRMaXN0JztcbmltcG9ydCB7IEZpZWxkUmljaHRleHQgfSBmcm9tICcuL2ZpZWxkUmljaHRleHQnO1xuaW1wb3J0IHsgRmllbGREYXRldGltZSB9IGZyb20gJy4vZmllbGREYXRldGltZSc7XG5cblxuLy8vLyBSRUYgRElBTE9HXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZkRpYWxvZy92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWZEaWFsb2cvc3R5bGUuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFSZWZEaWFsb2cgaW1wbGVtZW50cyBPbkluaXQge1xuICBtb2RhbDogSFRNTEVsZW1lbnQ7XG4gIG9uQ29tcGxldGU6IChyZXN1bHQ/KSA9PiB1bmRlZmluZWQ7XG4gIGZ1bGxSZXNvdXJjZTogYW55O1xuICByZXNvdXJjZXM6IGFueSA9IHt9O1xuICBtb2RlbHM6IGFueSA9IHt9O1xuICByZWZlcmVuY2U6IGFueTtcbiAgY3VycmVudFJlc291cmNlOiBzdHJpbmc7XG4gIHNlcnZpY2VzOiBhbnkgPSB7fTtcbiAgaW50ZWdyYXRpb25Db2RlOiBzdHJpbmc7XG4gIHJlc291cmNlOiBhbnk7XG4gIG1ldGFSZXNvdXJjZTogTWV0YVJlc291cmNlU2VydmljZTtcbiAgaW50ZWdyYXRpb25JY29uOiBzdHJpbmc7XG4gIHByZWZlclJlc291cmNlVHlwZTogc3RyaW5nO1xuICB0aGVtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGxldCByZWZlcmVuY2VzID0gKHRoaXMucmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpID8gdGhpcy5yZWZlcmVuY2UgOiBbdGhpcy5yZWZlcmVuY2VdO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgaWYgKHRoaXMucmVzb3VyY2UgJiYgdGhpcy5yZXNvdXJjZS5fdmdpcykge1xuICAgICAgdGhpcy5mdWxsUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlO1xuICAgICAgdGhpcy5yZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UuX3ZnaXM7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbiAgICBpZiAodGhpcy5yZXNvdXJjZSkge1xuICAgICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmlsdGVyKChyKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc1R5cGUgPSByLm5hbWUgfHwgci5yZXNvdXJjZVR5cGUgfHwgJyc7XG4gICAgICAgIC8vIGNvbXBhcmluZyBjYXNlIGluc2Vuc2l0aXZlLCBiZWNhdXNlIG9mIFplbmRlc2sgY29tbWVudCB2cyBDb21tZW50XG4gICAgICAgIHJldHVybiAocmVzVHlwZS5pZCB8fCByZXNUeXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAodGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGUgfHwgdGhpcy5yZXNvdXJjZS50eXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZWYgb2YgcmVmZXJlbmNlcykge1xuICAgICAgaWYgKCFyZWYubmFtZSkge1xuICAgICAgICByZWYubmFtZSA9IHJlZi5yZXNvdXJjZVR5cGU7IC8vIHdoZW4gdGhlIHJlc291cmNlIGNvbWVzIGZyb20gcmVzb3VyY2VzIEFQSSwgbm90IGZyb20gbWV0YWRhdGFcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5jdXJyZW50UmVzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UmVzb3VyY2UgPSByZWYubmFtZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWYubmFtZSA9PT0gdGhpcy5wcmVmZXJSZXNvdXJjZVR5cGUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UmVzb3VyY2UgPSB0aGlzLnByZWZlclJlc291cmNlVHlwZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJzOiBhbnkgPSB7XG4gICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgIHJlc291cmNlVHlwZTogcmVmLnJlc291cmNlVHlwZSB8fCByZWYubmFtZSxcbiAgICAgICAgcmVmXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2UpIHtcbiAgICAgICAgcnMuZXh0ZXJuYWxJZCA9IHRoaXMucmVzb3VyY2UuaWQgfHwgdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkO1xuICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS5ldmVudElkKSB7XG4gICAgICAgICAgcnMuZXZlbnRJZCA9IHRoaXMucmVzb3VyY2UuZXZlbnRJZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mdWxsUmVzb3VyY2UpIHtcbiAgICAgICAgICBycy5hY3Rpdml0eSA9IHRoaXMuZnVsbFJlc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlc291cmNlLmxheW91dElkKSB7XG4gICAgICAgICAgcnMubGF5b3V0SWQgPSB0aGlzLnJlc291cmNlLmxheW91dElkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBycy5wYXJlbnQgPSByZWYucGFyZW50O1xuICAgICAgdGhpcy5yZXNvdXJjZXNbcmVmLm5hbWVdID0gcnM7XG4gICAgICB0aGlzLm1vZGVsc1tyZWYubmFtZV0gPSB7fTtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlKSB7XG4gICAgICAgIHRoaXMubW9kZWxzW3JlZi5uYW1lXS5fdmdpcyA9IHRoaXMucmVzb3VyY2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm1vZGFsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoaWxkTm9kZXNbMF07XG4gICAgdGhpcy5tb2RhbC5jbGFzc0xpc3QucmVtb3ZlKCdWbHQtbW9kYWwtLW91dCcpO1xuICAgIHRoaXMubW9kYWwuY2xhc3NMaXN0LmFkZCgnVmx0LW1vZGFsX3Zpc2libGUnKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlFdmVudExpc3RlbmVyKTtcblxuICAgIGlmICh0aGlzLmludGVncmF0aW9uQ29kZSA9PT0gJ21vY2tzJykge1xuICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSAnQnJhbmQtaWNvbi12b25hZ2UnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuaW50ZWdyYXRpb25Db2RlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnb2ZmaWNlMzY1JzpcbiAgICAgICAgICB0aGlzLmludGVncmF0aW9uSWNvbiA9ICdCcmFuZC1pY29uLW9mZmljZS1jb2xvcic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N1Z2FyJzpcbiAgICAgICAgICB0aGlzLmludGVncmF0aW9uSWNvbiA9ICdCcmFuZC1pY29uLXN1Z2FyY3JtLWNvbG9yJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbXNkeW5hbWljcyc6XG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSAnQnJhbmQtaWNvbi1keW5hbWljcy1jb2xvcic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSBgQnJhbmQtaWNvbi0keyh0aGlzLmludGVncmF0aW9uQ29kZSB8fCAnJykudG9Mb3dlckNhc2UoKX0tY29sb3JgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xuICB9XG5cbiAgZ2V0IGlzRWRpdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzW3RoaXMuY3VycmVudFJlc291cmNlXS5tZXRhLmxheW91dC5lZGl0YWJsZSAhPT0gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNQZXJzaXN0ZW50KCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlICYmICh0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgfHwgdGhpcy5yZXNvdXJjZS5pZCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLm1vZGFsLmNsYXNzTGlzdC5yZW1vdmUoJ1ZsdC1tb2RhbF92aXNpYmxlJyk7XG4gICAgdGhpcy5tb2RhbC5jbGFzc0xpc3QuYWRkKCdWbHQtbW9kYWwtLW91dCcpO1xuICB9XG5cbiAgZGlzbWlzcygpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5vbkNvbXBsZXRlKG51bGwpO1xuICB9XG5cbiAgb25SZXNvdXJjZURvbmUocmVzdWx0KSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIHRoaXMub25Db21wbGV0ZShyZXN1bHQpO1xuICB9XG5cbiAgc2VsZWN0UmVzb3VyY2UocmVzb3VyY2UpIHtcbiAgICB0aGlzLmN1cnJlbnRSZXNvdXJjZSA9IHJlc291cmNlO1xuICB9XG5cbiAga2VlcE9yZGVyID0gKGEsIGIpID0+IGE7XG5cbiAgcHJpdmF0ZSBrZXlFdmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleUV2ZW50TGlzdGVuZXIpO1xuICAgICAgdGhpcy5kaXNtaXNzKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgYXBwbHlUaGVtZSgpIHtcbiAgICBjb25zdCBtZXRhVGhlbWUgPSB0aGlzLnRoZW1lID09PSAnZGFyaycgPyBtZXRhRGFyayA6IG1ldGFMaWdodDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZXRhVGhlbWUucHJvcGVydGllcykpIHtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIG1ldGFUaGVtZS5wcm9wZXJ0aWVzW2tleV0pO1xuICAgIH1cbiAgfVxufVxuXG4vLy8vIENPTVBPU0lURSBGSUVMRFxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9maWVsZENvbXBvc2l0ZS92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWVsZENvbXBvc2l0ZS9zdHlsZS5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkQ29tcG9zaXRlIGV4dGVuZHMgRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIG1ldGE6IGFueTtcbiAgdmFsdWU6IGFueTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBzdXBlci5uZ09uSW5pdCgpXG4gICAgbGV0IG5lc3RlZEZpZWxkc1JlZ2V4OiBSZWdFeHA7XG4gICAgaWYgKHRoaXMubWV0YS5uYW1lKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdIHx8IHt9O1xuICAgICAgbmVzdGVkRmllbGRzUmVnZXggPSBuZXcgUmVnRXhwKGBeJHt0aGlzLm1ldGEubmFtZX1cXFxcLiguKilgKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnBhcmVudCwgdGhpcy5tZXRhLm5hbWUsIHtcbiAgICAgICAgc2V0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZVt2XSA9IHZhbHVlW3ZdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpICE9PSAne30nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRoaXMuc2VuZFRvU2VydmVyLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgZm9yIChjb25zdCBmIG9mIHRoaXMubWV0YS5maWVsZHMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSb3cpIHtcbiAgICAgICAgICBpZiAoZi50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgIGYudHlwZSA9ICdzdHJpbmcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXN0ZWRGaWVsZE1hdGNoID0gZi5uYW1lLm1hdGNoKG5lc3RlZEZpZWxkc1JlZ2V4KTtcbiAgICAgICAgaWYgKG5lc3RlZEZpZWxkTWF0Y2gpIHtcbiAgICAgICAgICBmLm5hbWUgPSBuZXN0ZWRGaWVsZE1hdGNoWzFdOyAvLyBmb3IgVkdJUyBWMiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vcm1hbGl6ZSBuYW1lIHdpdGggZG90dGVkIHN5bnRheFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcmVudDtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNSb3coKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YS5zdWJ0eXBlICE9PSAnY29sdW1uJztcbiAgfVxuXG4gIGdldCBmaWVsZHMoKSB7XG4gICAgcmV0dXJuICh0aGlzLm1ldGEuZmllbGRzIHx8IFtdKS5tYXAoKGYpID0+IHtcbiAgICAgIGlmIChmLnR5cGUgPT09ICd0ZXh0YXJlYScpIHsgLy8gbm8gdGV4dGFyZWFzIGluc2lkZSBjb21wb3NpdGUgKHVzZSBzdHJpbmcpXG4gICAgICAgIGRlbGV0ZSBmLnR5cGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZjtcbiAgICB9KTtcbiAgfVxufVxuXG4vLy8vIFNFTEVDVCBGSUVMRFxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpZWxkU2VsZWN0L3ZpZXcuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmllbGRTZWxlY3Qvc3R5bGUuc2NzcyddLFxuICAgIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgRmllbGRTZWxlY3QgZXh0ZW5kcyBGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbXVsdGlwbGU6IGJvb2xlYW47XG4gIGlucHV0OiBIVE1MSW5wdXRFbGVtZW50O1xuICBkcm9wZG93bjogSFRNTEVsZW1lbnQ7XG4gIGRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgc2hvd1RleHQ6IHN0cmluZztcbiAgYWN0aXZlU3VnZ2VzdGlvbkluZGV4OiBudW1iZXI7XG4gIHZhbHVlOiBhbnk7XG4gIGlzQ3JlYXRhYmxlID0gZmFsc2U7XG4gIGFzeW5jT3B0aW9uczogQXJyYXk8YW55PjtcbiAgc2VhcmNoaW5nOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWZlcmVuY2VTZXJ2aWNlOiBNZXRhUmVmZXJlbmNlU2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFSZXNvdXJjZTogTWV0YVJlc291cmNlU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgc3RhdGljIHNldHVwKGluc3RhbmNlLCBwYXJlbnQsIG1ldGEpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdwYXJlbnQnLCB0aGlzLnBhcmVudCk7XG4gICAgdGhpcy52YWxpZGF0aW9uQXR0cmlidXRlcyA9IFsncmVxdWlyZWQnXTtcbiAgICB0aGlzLm11bHRpcGxlID0gKHRoaXMubWV0YS50eXBlID09PSAnbXVsdGlwaWNrbGlzdCcpIHx8IHRoaXMubWV0YS5tdWx0aXBsZTtcbiAgICBjb25zdCBvcmlnVmFsdWUgPSB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV07XG4gICAgaWYgKHRoaXMubWV0YS5yZWZlcmVuY2UpIHtcbiAgICAgIHRoaXMuaXNDcmVhdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wYXJlbnQsIHRoaXMubWV0YS5uYW1lLCB7XG4gICAgICBzZXQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBvIG9mIHRoaXMub3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAoKHZhbHVlLmlkIHx8IHZhbHVlKSA9PT0gKG8uaWQgfHwgby52YWx1ZSB8fCBvLm5hbWUgfHwgMCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gW29dO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbdGhpcy5tb2RlbFRvVmFsdWUobywgdGhpcy5tZXRhLnZhbHVlVHlwZSldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdmFsdWUgfHwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkgPyB2YWx1ZSA6ICh2YWx1ZSB8fCAnJykuc3BsaXQoJzsnKTsgLy8gc2hvdWxkIG5vdCBoYW5kbGUgaW5jb3JyZWN0IHZhbHVlc1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbyBvZiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgodi5pZCB8fCB2KSA9PT0gKG8uaWQgfHwgby52YWx1ZSB8fCBvLm5hbWUgfHwgMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5wdXNoKG8pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5tb2RlbFRvVmFsdWUobywgdGhpcy5tZXRhLnZhbHVlVHlwZSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbC5sZW5ndGggJiYgIXRoaXMuaXNQZXJzaXN0ZWRQYXJlbnQpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zaG93VGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1RleHQgPSAodGhpcy5tb2RlbCB8fCBbXSkubWFwKChvKSA9PiBvLmxhYmVsIHx8IG8pLmpvaW4oJywgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBvIG9mIHRoaXMubWV0YS5vcHRpb25zKSB7XG4gICAgICAgICAgICAgIGlmICgodmFsdWUuaWQgfHwgdmFsdWUpID09PSAoby5pZCB8fCBvLnZhbHVlIHx8IG8ubmFtZSB8fCBvKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBvO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1vZGVsVG9WYWx1ZShvLCB0aGlzLm1ldGEudmFsdWVUeXBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dUZXh0ID0gby5sYWJlbCB8fCBvO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zaG93VGV4dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblN1YmplY3RDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgICAgIHRoaXMubWV0YS4kb3B0aW9uYWwgPSB0aGlzLmlzT3B0aW9uYWw7XG4gICAgICB9LFxuICAgICAgZ2V0OiAoKSA9PiB0aGlzLnZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdGhpcy5zZW5kVG9TZXJ2ZXIsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcblxuICAgIGlmIChvcmlnVmFsdWUpIHtcbiAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IG9yaWdWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZWZhdWx0ICYmICF0aGlzLm1vZGVsKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gdGhpcy5kZWZhdWx0LmlkIHx8IHRoaXMuZGVmYXVsdDtcbiAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YodGhpcy5tZXRhLmVuYWJsZWQpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YodGhpcy5tZXRhLmVuYWJsZWQpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhciBvZiBPYmplY3Qua2V5cyh0aGlzLm1ldGEuZW5hYmxlZCkpIHtcbiAgICAgICAgICBjb25zdCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W3Bhcl07XG4gICAgICAgICAgaWYgKHBhclZhbHVlKSB7XG4gICAgICAgICAgICAvLyBsb2dpYyBmb3Igc3BlY2lmaWMgdmFsdWVzLCB0aGlzIHdvcmtzIG9ubHkgZm9yIHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2dpY2FsRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KHBhcikpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2dpY2FsRGlzYWJsZWQgPSAhdmFsdWVbcGFyXTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMubG9naWNhbERpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5tZXRhLnNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5tZXRhLnNlYXJjaC5wYXJhbXM7XG4gICAgICBpZiAoc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFyIG9mIE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykpIHtcbiAgICAgICAgICBjb25zdCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W3NlYXJjaFBhcmFtc1twYXJdXTtcbiAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgcGFyYW1zW3Bhcl0gPSBwYXJWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoT3B0aW9ucyhwYXJhbXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KHNlYXJjaFBhcmFtc1twYXJdKSkge1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnModmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25BY3RpdmF0ZWQoZXYpIHtcbiAgICAvLyBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW5wdXQgPSBldi5zcmNFbGVtZW50O1xuICAgIGlmICghdGhpcy5kcm9wZG93bikge1xuICAgICAgdGhpcy5kcm9wZG93biA9IGV2LnNyY0VsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gIH1cblxuICBvbkJsdXIoZXYpIHtcbiAgICBsZXQgaW50ZXJuYWxDb250cm9sID0gZmFsc2U7XG4gICAgaWYgKGV2LnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXYucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVybmFsQ29udHJvbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmtleUxpc3RlbmVyQWN0aXZlICYmICFpbnRlcm5hbENvbnRyb2wpIHtcbiAgICAgIHRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmtleUxpc3RlbmVyQWN0aXZlKSB7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsaWNrb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSwgNDAwKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmtleUxpc3RlbmVyQWN0aXZlO1xuICAgIH1cbiAgICB0aGlzLm9uTGVhdmUuZW1pdChldik7XG4gIH1cblxuICBvbk9wdGlvblNlbGVjdChldiwgb3B0aW9uKSB7XG4gICAgaWYgKGV2KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuZm9jdXMoKTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5tb2RlbC5pbmRleE9mKG9wdGlvbik7XG4gICAgICBpZiAob3B0aW9uSW5kZXggPT09IC0xKSB7XG4gICAgICAgIHRoaXMubW9kZWwucHVzaChvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tb2RlbC5zcGxpY2Uob3B0aW9uSW5kZXgsIDEpO1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwubGVuZ3RoKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICAgIHRoaXMuc2hvd1RleHQgPSAodGhpcy5tb2RlbCB8fCBbXSkubWFwKChvKSA9PiBvLmxhYmVsIHx8IG8pLmpvaW4oJywgJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5zaG93VGV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgIHRoaXMubW9kZWwgPSBvcHRpb247XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uob3B0aW9uKTtcbiAgICAgIHRoaXMuc2hvd1RleHQgPSBvcHRpb24ubGFiZWwgfHwgKG9wdGlvbi5pZCA9PT0gJycgPyAnLS1lbXB0eS0tJyA6IG9wdGlvbik7XG4gICAgICBpZiAodHlwZW9mKG9wdGlvbikgPT09ICdvYmplY3QnICYmICFvcHRpb24uaWQgJiYgb3B0aW9uLmlkICE9PSAnJykge1xuICAgICAgICBkZWxldGUgdGhpcy5zaG93VGV4dDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbGVhcihldj8pIHtcbiAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgZGVsZXRlIHRoaXMuc2hvd1RleHQ7XG4gICAgaWYgKGV2KSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb3BlblJlc291cmNlKGV2KSB7XG4gICAgY29uc3QgcmVmRGlhbG9nRmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1ldGFSZWZEaWFsb2cpO1xuICAgIHRoaXMucmVmZXJlbmNlU2VydmljZS5vcGVuRGlhbG9nKFxuICAgICAgcmVmRGlhbG9nRmFjdG9yeSwgdGhpcy5tZXRhUmVzb3VyY2UsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCB0aGlzLm1ldGEucmVmZXJlbmNlLCBudWxsXG4gICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nT3B0aW9ucyA9ICh0aGlzLm1ldGEub3B0aW9ucyB8fCBbXSkuZmluZCgobykgPT4gKG8uaWQgPT09IHJlc3VsdC5pZCAmJiBvLnR5cGUgPT09IHJlc3VsdC50eXBlKSk7XG4gICAgICAgIGlmIChleGlzdGluZ09wdGlvbnMpIHtcbiAgICAgICAgICBleGlzdGluZ09wdGlvbnMubGFiZWwgPSByZXN1bHQubGFiZWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLm1ldGEub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5tZXRhLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tZXRhLm9wdGlvbnMudW5zaGlmdChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25PcHRpb25TZWxlY3QoZXYsIHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzaG93RHJvcGRvd24oKSB7XG4gICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QuYWRkKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgaWYgKCF0aGlzLmtleUxpc3RlbmVyQWN0aXZlKSB7XG4gICAgICB0aGlzLmlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICB9LCAyMDApO1xuICAgICAgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSA9IHRydWU7XG4gICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMubW9kZWwpIHtcbiAgICAgICAgZm9yIChsZXQgc3VnZ2VzdGlvbkluZGV4ID0gMDsgc3VnZ2VzdGlvbkluZGV4IDwgdGhpcy5vcHRpb25zLmxlbmd0aDsgc3VnZ2VzdGlvbkluZGV4KyspIHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbCA9PT0gdGhpcy5vcHRpb25zW3N1Z2dlc3Rpb25JbmRleF0pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gc3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVuc3VyZURyb3Bkb3duSXNWaXNpYmxlKCk7XG4gIH1cblxuICBkaXNtaXNzRHJvcGRvd24oZXZlbnQ/KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQnKTtcbiAgICB9XG4gICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGhvbGRlciA9IHRoaXMuZHJvcGRvd24uY2xvc2VzdCgnLlZsdC1jYXJkX19jb250ZW50Jyk7XG4gICAgICBpZiAoaG9sZGVyKSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLlZsdC1kcm9wZG93bl9fcGFuZWwnKTtcbiAgICAgICAgY29uc3QgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGhvbGRlclJlY3QgPSBob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChob2xkZXJSZWN0LnRvcCArIGhvbGRlclJlY3QuaGVpZ2h0IDwgZWxSZWN0LnRvcCArIGVsUmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnZW5kJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDQwMCk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZURyb3Bkb3duT3B0aW9uSXNWaXNpYmxlKCkge1xuICAgIGlmICghdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lcikge1xuICAgICAgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ucXVlcnlTZWxlY3RvcignLlZsdC1kcm9wZG93bl9fc2Nyb2xsJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyICYmIHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gNDQgKiB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICAgIGNvbnN0IHNjcm9sbEJvdHRvbSA9IDQ0ICogKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4IC0gNyk7XG4gICAgICBpZiAoc2Nyb2xsVG9wIDwgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3ApIHtcbiAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbEJvdHRvbSA+IHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0gc2Nyb2xsQm90dG9tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyT3B0aW9ucygpIHtcbiAgICB0aGlzLmFzeW5jT3B0aW9ucyA9IFtdO1xuICAgIGlmICghdGhpcy5sb2dpY2FsRGlzYWJsZWQpIHtcbiAgICAgIGZvciAoY29uc3QgbyBvZiB0aGlzLm1ldGEub3B0aW9ucykge1xuICAgICAgICBpZiAoby5mb3IpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBhciBvZiBPYmplY3Qua2V5cyhvLmZvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhclZhbHVlID0gdGhpcy5wYXJlbnRbcGFyXTtcbiAgICAgICAgICAgIGlmIChvLmZvcltwYXJdLmluZGV4T2YocGFyVmFsdWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLmFzeW5jT3B0aW9ucy5wdXNoKG8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFzeW5jT3B0aW9ucy5wdXNoKG8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGlja291dCA9IChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NOYW1lID09PSAnVmx0LWRyb3Bkb3duX19saW5rJyAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQgIT09IHRoaXMuaW5wdXQgJiYgIWV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ1ZsdC1kcm9wZG93bl9fYmxvY2snKSkge1xuICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzoge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4Kys7XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID49IHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleC0tO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5zdXJlRHJvcGRvd25PcHRpb25Jc1Zpc2libGUoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgY2FzZSAnICc6IHtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdChldmVudCwgdGhpcy5vcHRpb25zW3RoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4XSk7XG4gICAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRXNjYXBlJzoge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdCYWNrc3BhY2UnOiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5hc3luY09wdGlvbnMgfHwgdGhpcy5tZXRhLm9wdGlvbnMgfHwgdGhpcy5tZXRhLnBpY2tsaXN0IHx8IFtdO1xuICB9XG5cbiAgZ2V0IGdyb3VwZWRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmVkdWNlKChyLCB7IGdyb3VwIH0pID0+IHtcbiAgICAgIGlmICghci5zb21lKG8gPT4gby5ncm91cCA9PT0gZ3JvdXApKSB7XG4gICAgICAgIHIucHVzaCh7IGdyb3VwLCBncm91cEl0ZW06IHRoaXMub3B0aW9ucy5maWx0ZXIodiA9PiB2Lmdyb3VwID09PSBncm91cCkgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaE9wdGlvbnMocGFyYW1zPykge1xuICAgIGxldCBzZWFyY2hVcmwgPSBgL2ZpZWxkcy8ke3RoaXMubWV0YS5uYW1lfS9zZWFyY2hgO1xuICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoKSB7XG4gICAgICBpZiAodGhpcy5tZXRhLnNlYXJjaC51cmwpIHtcbiAgICAgICAgc2VhcmNoVXJsID0gdGhpcy5tZXRhLnNlYXJjaC51cmw7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLm1ldGEuc2VhcmNoLnBhcmFtcztcbiAgICAgIGlmIChzZWFyY2hQYXJhbXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXIgb2YgT2JqZWN0LmtleXMoc2VhcmNoUGFyYW1zKSkge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucGFyZW50W3NlYXJjaFBhcmFtc1twYXJdXTtcbiAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICBzZWFyY2hVcmwgKz0gYCR7c2VhcmNoVXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJid9JHtwYXJ9PSR7dmFsLmlkIHx8IHZhbH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0QnlQYXRoKHNlYXJjaFVybCkuc3Vic2NyaWJlKChvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLmFzeW5jT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICBsZXQgdmFsaWRWYWx1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgZm9yIChjb25zdCBvIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoKG8uaWQgfHwgbykgPT09ICh0aGlzLnZhbHVlLmlkIHx8IHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF2YWxpZFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hpbmc7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgcmVzb3VyY2VTZXJ2aWNlKCkge1xuICAgIGlmICghdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlKSB7XG4gICAgICBjb25zdCBtZXRhUmVzb3VyY2VDb25maWc6IElNZXRhUmVzb3VyY2VDb25maWcgPSB7XG4gICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGVcbiAgICAgIH07XG4gICAgICB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2UgPSB0aGlzLm1ldGFSZXNvdXJjZS5uZXcobWV0YVJlc291cmNlQ29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWV0YVJlc291cmNlU2VydmljZTtcbiAgfVxufVxuXG4vLy8vIEZJRUxEIFJFRkVSRU5DRVxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpZWxkUmVmZXJlbmNlL3ZpZXcuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmllbGRSZWZlcmVuY2Uvc3R5bGUuc2NzcyddLFxuICAgIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgRmllbGRSZWZlcmVuY2UgZXh0ZW5kcyBGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgaW5wdXQ6IGFueTtcbiAgZHJvcGRvd246IEhUTUxFbGVtZW50O1xuICBkcm9wZG93blNjcm9sbENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gIHNlYXJjaGluZzogYm9vbGVhbjtcbiAgc2VhcmNoUmVzb3VyY2VUeXBlOiBhbnkgPSB7fTtcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xuICBzZWFyY2hSZXN1bHRzOiBBcnJheTxhbnk+O1xuICBzZWFyY2hFcnJvcjogYW55O1xuICBhY3RpdmVTdWdnZXN0aW9uSW5kZXg6IG51bWJlcjtcbiAgc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlOiBzdHJpbmc7XG4gIHNlYXJjaFRleHRDaGFuZ2VkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIGlzQ3JlYXRhYmxlID0gZmFsc2U7XG4gIHZhbHVlOiBhbnk7XG4gIGlzUG9seW1vcnBoaWM6IGJvb2xlYW47XG4gIGlzU2VhcmNoYWJsZTogYm9vbGVhbjtcbiAgbXVsdGlwbGU6IGJvb2xlYW47XG4gIHZyOiBNZXRhUmVzb3VyY2VTZXJ2aWNlO1xuICBleHRlcm5hbExpbms6IHN0cmluZztcbiAgZHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG4gIHNlYXJjaFJlc291cmNlVHlwZU1ldGE6IGFueSA9IHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICBuYW1lOiAncmVzb3VyY2VUeXBlJyxcbiAgICBsYWJlbDogJ1R5cGUnLFxuICAgIG9wdGlvbnM6IFtdLCAvLyB7IGxhYmVsOiAnLS0gQWxsIHR5cGVzIC0tJyB9XSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG4gIH07XG4gIGZpbHRlcmVkU3VnZ2VzdGlvbnM6IEFycmF5PGFueT4gPSBbXTtcbiAgcGxhY2VIb2xkZXJMYWJlbDogc3RyaW5nO1xuICBhc3luY1N1Z2dlc3Rpb25zOiBBcnJheTxhbnk+O1xuICBzbWFydFN1Z2dlc3Rpb25zOiBBcnJheTxhbnk+ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHJlZmVyZW5jZVNlcnZpY2U6IE1ldGFSZWZlcmVuY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YVJlc291cmNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YU1zZ1NlcnZpY2U6IE1ldGFNc2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YUNvbnRleHQ6IE1ldGFDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFUcmFja2VyOiBNZXRhVHJhY2tlclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubXVsdGlwbGUgPSAodGhpcy5tZXRhLnR5cGUgPT09ICdtdWx0aXJlZmVyZW5jZScpIHx8IHRoaXMubWV0YS5tdWx0aXBsZTtcbiAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZU1ldGEubGFiZWwgPSB0aGlzLm1ldGEubGFiZWw7XG4gICAgaWYgKCF0aGlzLm1ldGEudmFsdWVUeXBlKSB7XG4gICAgICAvLyB0aGlzLm1ldGEudmFsdWVUeXBlID0gJ29iamVjdCc7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5tZXRhLCAndmFsdWVUeXBlJywge1xuICAgICAgICB2YWx1ZTogJ29iamVjdCdcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5tZXRhUmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHRoaXMuaXNQb2x5bW9ycGhpYyA9IHRydWU7XG4gICAgICB0aGlzLmlzU2VhcmNoYWJsZSA9IHRydWU7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5tYXAocnQgPT4gcnQubmFtZSkuam9pbignLCcpO1xuICAgICAgZm9yIChjb25zdCBydCBvZiB0aGlzLm1ldGFSZWZlcmVuY2UpIHtcbiAgICAgICAgaWYgKHJ0LmNyZWF0YWJsZSkge1xuICAgICAgICAgIHRoaXMuaXNDcmVhdGFibGUgPSB0cnVlO1xuICAgICAgICAgIGlmICh0eXBlb2YgKHJ0LnNlYXJjaGFibGUpICE9PSAndW5kZWZpbmVkJyAmJiAhcnQuc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5pc1NlYXJjaGFibGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubWV0YVJlZmVyZW5jZS5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlTWV0YS5vcHRpb25zLnB1c2goeyBpZDogci5uYW1lLCBsYWJlbDogci5sYWJlbCB8fCByLm5hbWUgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1NlYXJjaGFibGUgPSB0eXBlb2YgKHRoaXMubWV0YVJlZmVyZW5jZS5zZWFyY2hhYmxlKSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5tZXRhUmVmZXJlbmNlLnNlYXJjaGFibGU7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHRoaXMubWV0YVJlZmVyZW5jZTtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gdGhpcy5tZXRhUmVmZXJlbmNlLm5hbWUgfHwgdGhpcy5tZXRhUmVmZXJlbmNlLnJlc291cmNlVHlwZTtcbiAgICAgIHRoaXMuaXNDcmVhdGFibGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UuY3JlYXRhYmxlO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUGxhY2Vob2xkZXJMYWJlbCgpO1xuICAgIHRoaXMuc2VhcmNoVGV4dENoYW5nZWQucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2VhcmNoKCk7XG4gICAgfSk7XG4gICAgY29uc3Qgb3JpZ1ZhbHVlID0gdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdO1xuXG4gICAgLy8gdGhpcy5zdWdnZXN0aW9ucyA9IHRoaXMubWV0YS5zdWdnZXN0aW9uczsgLy8gVE9ETyBmaWx0ZXIgYnkgZGVmYXVsdCB0eXBlXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuc3VnZ2VzdGlvbnMnLCB0aGlzLnN1Z2dlc3Rpb25zKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnBhcmVudCwgdGhpcy5tZXRhLm5hbWUsIHtcbiAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh2KSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnB1c2goe1xuICAgICAgICAgICAgICAgICAgaWQ6IHYsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogdixcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMubWV0YVJlZmVyZW5jZS5uYW1lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsOyAvLyBwcm90ZWN0IHdoZW4gdmFsdWUgZnJvbSBzZXJ2ZXIgaXMgbm90IGFycmF5XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgICAgICBpZDogdmFsdWUsXG4gICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZSwgLy8gY291bGQgYmUgZm91bmQgd2l0aCBleHRyYSBjYWxsXG4gICAgICAgICAgICAgIHR5cGU6IHRoaXMubWV0YVJlZmVyZW5jZS5uYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZSA/ICgoIXZhbHVlLmxhYmVsIHx8IHZhbHVlLmxhYmVsID09PSAnICcpID8gYE4vQSAoJHt2YWx1ZS50eXBlfSMke3ZhbHVlLmlkfSlgIDogdmFsdWUubGFiZWwgfHwgdmFsdWUpIDogJyc7XG4gICAgICAgICAgLy8gaWYgKHRoaXMuaXNQb2x5bW9ycGhpYyAmJiB0aGlzLm1vZGVsKSB7IC8vVE9ETyBzaG93IG9yIG5vdD9cbiAgICAgICAgICAvLyAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlID0gdGhpcy5tZXRhUmVmZXJlbmNlLmZpbmQoKHJ0KT0+IHtcbiAgICAgICAgICAvLyAgICAgcmV0dXJuIHJ0Lm5hbWUgPT09IHRoaXMubW9kZWwudHlwZTtcbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vZGVsID0gdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1vZGVsVG9WYWx1ZSh2YWx1ZSwgdGhpcy5tZXRhLnZhbHVlVHlwZSB8fCAnb2JqZWN0Jyk7XG4gICAgICAgICAgdGhpcy5idWlsZEV4dGVybmFsTGluaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy5tb2RlbCA/IHRoaXMubW9kZWwgOiB0aGlzLm1vZGVsLm1hcCgobSkgPT4gdGhpcy5tb2RlbFRvVmFsdWUobSwgdGhpcy5tZXRhLnZhbHVlVHlwZSB8fCAnb2JqZWN0JykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YS4kb3B0aW9uYWwgPSB0aGlzLmlzT3B0aW9uYWw7XG4gICAgICB9LFxuICAgICAgZ2V0OiAoKSA9PiB0aGlzLnZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdGhpcy5zZW5kVG9TZXJ2ZXIsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBpZiAob3JpZ1ZhbHVlKSB7XG4gICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBvcmlnVmFsdWU7XG4gICAgfVxuICAgIGlmICghdGhpcy5tb2RlbCAmJiB0aGlzLmRlZmF1bHQpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0Lmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoY29uc3QgZHYgb2YgdGhpcy5kZWZhdWx0KSB7XG4gICAgICAgICAgICBpZiAoKGR2LmlkIHx8IGR2LnZhbHVlKSAmJiBkdi50eXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHtcbiAgICAgICAgICAgICAgICBpZDogZHYuaWQgfHwgZHYudmFsdWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGR2LmxhYmVsIHx8IGR2LmlkIHx8IGR2LnZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IGR2LnR5cGVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaWYgKGR2LmV4dGVybmFsTGluaykge1xuICAgICAgICAgICAgICAgIGl0ZW0uZXh0ZXJuYWxMaW5rID0gZHYuZXh0ZXJuYWxMaW5rO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHQuaWQgJiYgdGhpcy5kZWZhdWx0LmxhYmVsICYmIHRoaXMuZGVmYXVsdC50eXBlKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtOiBhbnkgPSB7XG4gICAgICAgICAgICAgIGlkOiB0aGlzLmRlZmF1bHQuaWQgfHwgdGhpcy5kZWZhdWx0LnZhbHVlLFxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5kZWZhdWx0LmxhYmVsIHx8IHRoaXMuZGVmYXVsdC5pZCB8fCB0aGlzLmRlZmF1bHQudmFsdWUsXG4gICAgICAgICAgICAgIHR5cGU6IHRoaXMuZGVmYXVsdC50eXBlLFxuICAgICAgICAgICAgICBzbWFydDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHQuZXh0ZXJuYWxMaW5rKSB7XG4gICAgICAgICAgICAgIGl0ZW0uZXh0ZXJuYWxMaW5rID0gdGhpcy5kZWZhdWx0LmV4dGVybmFsTGluaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IGl0ZW07XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCchISFkZWZhdWx0IHZhbHVlIGlzIG5vdCB2YWxpZCBmb3JtYXQnLCB0aGlzLm1ldGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZih0aGlzLm1ldGEuZGlzYWJsZWQpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YodGhpcy5tZXRhLmRpc2FibGVkKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIE9iamVjdC5rZXlzKHRoaXMubWV0YS5kaXNhYmxlZCkpIHtcbiAgICAgICAgICBjb25zdCBwcm9wcyA9IHAuc3BsaXQoJy4nKTtcbiAgICAgICAgICBpZiAodHlwZW9mICh0aGlzLnBhcmVudFtwcm9wc1swXV0pICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHZhbCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgICAgICAgIHZhbCA9IHZhbFtwcm9wXTtcbiAgICAgICAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gdGhpcy5tZXRhLmRpc2FibGVkW3BdKSB7XG4gICAgICAgICAgICAgIHRoaXMubG9naWNhbERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KHByb3BzWzBdKSkge1xuICAgICAgICAgICAgICBsZXQgdmFsID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgIHZhbCA9IHZhbFtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh2YWwgPT09IHRoaXMubWV0YS5kaXNhYmxlZFtwXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9naWNhbERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubG9naWNhbERpc2FibGVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5tZXRhLnNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5tZXRhLnNlYXJjaC5wYXJhbXM7XG4gICAgICBpZiAoc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFyIG9mIE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykpIHtcbiAgICAgICAgICBjb25zdCBwcm9wcyA9IHNlYXJjaFBhcmFtc1twYXJdLnNwbGl0KCcjJyk7XG4gICAgICAgICAgY29uc3QgZmllbGQgPSBwcm9wc1swXTtcbiAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbMV07XG4gICAgICAgICAgbGV0IHBhclZhbHVlID0gdGhpcy5wYXJlbnRbZmllbGRdO1xuICAgICAgICAgIGlmIChwYXJWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICAgICAgcGFyVmFsdWUgPSBwYXJWYWx1ZVtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJWYWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgICAgcGFyYW1zW3Bhcl0gPSBwYXJWYWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdWdnZXN0aW9ucyhwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkKSkge1xuICAgICAgICAgICAgICBpZiAodmFsdWVbZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlW2ZpZWxkXSA9IHZhbHVlW2ZpZWxkXVtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICAgICAgICAgICAgcGFyYW1zW3Bhcl0gPSB2YWx1ZVtmaWVsZF07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTdWdnZXN0aW9ucyhwYXJhbXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbGVhclNlYXJjaFJlc291cmNlVHlwZSgpIHtcbiAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHt9O1xuICAgIHRoaXMub25TZWFyY2hSZXNvdXJjZVR5cGVDaGFuZ2VkKCk7XG4gIH1cblxuICBvblNlYXJjaFJlc291cmNlVHlwZUNoYW5nZWQocmVzb3VyY2VUeXBlPykge1xuICAgIGlmICghcmVzb3VyY2VUeXBlIHx8ICFyZXNvdXJjZVR5cGUuaWQpIHtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA9IG51bGw7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9ICh0aGlzLm1ldGFSZWZlcmVuY2UgfHwgW10pLm1hcChydCA9PiBydC5uYW1lKS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA9IHJlc291cmNlVHlwZS5pZDtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gcmVzb3VyY2VUeXBlLmlkO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUGxhY2Vob2xkZXJMYWJlbCgpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgIXRoaXMuc2VhcmNoVGV4dCkgeyAvLyBmaWx0ZXIgc3VnZ2VzdGlvbnMgYnkgdHlwZVxuICAgICAgdGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zID0gIXJlc291cmNlVHlwZSA/ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pIDogKHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkuZmlsdGVyKFxuICAgICAgICAocykgPT4gcy50eXBlID09PSByZXNvdXJjZVR5cGUuaWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHsgLy8gcmVndWxhciBzZWFyY2ggKHJldHVybiBzY29wZWQgcmVzdWx0cylcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLnNlYXJjaCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaFJlc3VsdHMgJiYgcmVzb3VyY2VUeXBlKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IHRoaXMuc2VhcmNoUmVzdWx0cy5maWx0ZXIoKHMpID0+IHMudHlwZSA9PT0gcmVzb3VyY2VUeXBlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlIHRoaXMuc2VhcmNoRXJyb3I7XG4gIH1cblxuICBvblNlYXJjaFRleHRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlYXJjaFRleHRDaGFuZ2VkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgc2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICAvLyB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGV4dCB8fCB0aGlzLnNlYXJjaFRleHQubGVuZ3RoIDwgMikge1xuICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFJlc3VsdHM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dTZWFyY2hyZXN1bHRzID0gKHJlc3VsdHMpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hFcnJvcjtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICAgIGlmICghcmVzdWx0cyB8fCAhKHJlc3VsdHMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWV0YS5hY2NlcHROZXcgJiYgdGhpcy5tZXRhLmFjY2VwdE5ldy50eXBlICYmIHRoaXMubWV0YS5hY2NlcHROZXcucGF0dGVybikge1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodGhpcy5tZXRhLmFjY2VwdE5ldy5wYXR0ZXJuKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QodGhpcy5zZWFyY2hUZXh0KSkge1xuICAgICAgICAgIHJlc3VsdHMudW5zaGlmdCh7IGlkOiBudWxsLCBsYWJlbDogdGhpcy5zZWFyY2hUZXh0LCB0eXBlOiB0aGlzLm1ldGEuYWNjZXB0TmV3LnR5cGUgfSkgO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSByZXN1bHRzLm1hcCgocikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGFycm93LWJvZHktc3R5bGVcbiAgICAgICAgcmV0dXJuIHsgaWQ6IHIuaWQsIGxhYmVsOiByLmxhYmVsLCB0eXBlOiByLnR5cGUgfHwgci5yZXNvdXJjZVR5cGUgfHwgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUubmFtZSwgZXh0ZXJuYWxMaW5rOiByLmV4dGVybmFsTGluayB9O1xuICAgICAgfSk7XG4gICAgICBpZiAoIS9WbHQtZHJvcGRvd24tLWV4cGFuZGVkLy50ZXN0KHRoaXMuZHJvcGRvd24uY2xhc3NOYW1lKSkge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHRoaXMubWV0YS5zZWFyY2gpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMubWV0YS5zZWFyY2gucGFyYW1zIHx8IHt9O1xuICAgICAgbGV0IHNlYXJjaFVybCA9IGAvZmllbGRzLyR7dGhpcy5tZXRhLm5hbWV9L3NlYXJjaGA7XG4gICAgICBpZiAodGhpcy5tZXRhLnNlYXJjaC51cmwpIHtcbiAgICAgICAgc2VhcmNoVXJsID0gdGhpcy5tZXRhLnNlYXJjaC51cmwucmVwbGFjZSgvXFwke1xccyooW1xcd1xcLl0rKVxccyp9L2csIChtYXRjaCwga2V5KSA9PiB7XG4gICAgICAgICAgaWYgKHNlYXJjaFBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBzZWFyY2hQYXJhbXNba2V5XTtcbiAgICAgICAgICAgIGRlbGV0ZSBzZWFyY2hQYXJhbXNba2V5XTtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgT2JqZWN0LmtleXMoc2VhcmNoUGFyYW1zKSkge1xuICAgICAgICBzZWFyY2hVcmwgKz0gYCR7c2VhcmNoVXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJid9JHtlbmNvZGVVUklDb21wb25lbnQocCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlYXJjaFBhcmFtc1twXSl9YDtcbiAgICAgIH1cbiAgICAgIHNlYXJjaFVybCArPSBgJHtzZWFyY2hVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJ31xPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuc2VhcmNoVGV4dCl9YDtcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldEJ5UGF0aChzZWFyY2hVcmwpLnN1YnNjcmliZSgocmVzdWx0cykgPT4ge1xuICAgICAgICBzaG93U2VhcmNocmVzdWx0cyhyZXN1bHRzKTtcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5zZWFyY2hpbmc7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IFtdO1xuICAgICAgICB0aGlzLnNlYXJjaEVycm9yID0gZXJyb3IuZXJyb3IgPyBlcnJvci5lcnJvci5tZXNzYWdlIHx8IGVycm9yLmVycm9yIDogZXJyb3IubWVzc2FnZSB8fCBlcnJvcjtcbiAgICAgICAgaWYgKCEvVmx0LWRyb3Bkb3duLS1leHBhbmRlZC8udGVzdCh0aGlzLmRyb3Bkb3duLmNsYXNzTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLnZyKSB7XG4gICAgICAgIHRoaXMudnIgPSB0aGlzLm1ldGFSZXNvdXJjZS5uZXcoe1xuICAgICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy52ci5zZWFyY2hJbnRlZ3JhdGlvbihcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5uYW1lIHx8IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlXG4gICAgICApLnN1YnNjcmliZSgocmVzdWx0czogQXJyYXk8YW55PikgPT4ge1xuICAgICAgICBzaG93U2VhcmNocmVzdWx0cyhyZXN1bHRzKTtcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWFyY2hFcnJvciA9IGVycm9yLmVycm9yID8gZXJyb3IuZXJyb3IubWVzc2FnZSB8fCBlcnJvci5lcnJvciA6IGVycm9yLm1lc3NhZ2UgfHwgZXJyb3I7XG4gICAgICAgIGlmICghL1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQvLnRlc3QodGhpcy5kcm9wZG93bi5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25BY3RpdmF0ZWQoZXYpIHtcbiAgICAvLyBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW5wdXQgPSBldi5zcmNFbGVtZW50O1xuICAgIGlmICghdGhpcy5kcm9wZG93bikge1xuICAgICAgLy8gdGhpcy5kcm9wZG93biA9IGV2LnNyY0VsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgdGhpcy5kcm9wZG93biA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kcm9wZG93bi13cmFwcGVyJyk7XG4gICAgfVxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gIH1cblxuICBvbkJsdXIoZXYpIHtcbiAgICBsZXQgaW50ZXJuYWxDb250cm9sID0gZmFsc2U7XG4gICAgaWYgKGV2LnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXYucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVybmFsQ29udHJvbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmtleUxpc3RlbmVyQWN0aXZlICYmICFpbnRlcm5hbENvbnRyb2wpIHtcbiAgICAgIHRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmtleUxpc3RlbmVyQWN0aXZlKSB7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsaWNrb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSwgNDAwKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmtleUxpc3RlbmVyQWN0aXZlO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5tb2RlbCAmJiAhdGhpcy5zdWdnZXN0aW9ucy5maW5kKChzKSA9PiAocy5pZCA9PT0gdGhpcy5tb2RlbC5pZCAmJiBzLnR5cGUgPT09IHRoaXMubW9kZWwudHlwZSkpKSB7XG4gICAgICB0aGlzLnNtYXJ0U3VnZ2VzdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiB0aGlzLm1vZGVsLmlkLFxuICAgICAgICBsYWJlbDogdGhpcy5tb2RlbC5sYWJlbCxcbiAgICAgICAgdHlwZTogdGhpcy5tb2RlbC50eXBlLFxuICAgICAgICBzbWFydDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudCgnUkVNT1ZFJykpO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIG9uU3VnZ2VzdGlvblNlbGVjdChldiwgc3VnZ2VzdGlvbikge1xuICAgIGlmICghc3VnZ2VzdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQoJ1NFTEVDVCcpKTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgIH1cbiAgICAgIGxldCBleGlzdGluZ0VudHJ5O1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLm1vZGVsKSB7XG4gICAgICAgIGlmIChzdWdnZXN0aW9uLmlkICYmIChlbnRyeS5pZCA9PT0gc3VnZ2VzdGlvbi5pZCkpIHtcbiAgICAgICAgICBleGlzdGluZ0VudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VnZ2VzdGlvbi5sYWJlbCA9PT0gZW50cnkubGFiZWwpIHsgLy8gY3JlYXRlIG5ldyAoZ29vZ2xlIGVtYWlscylcbiAgICAgICAgICBleGlzdGluZ0VudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZXhpc3RpbmdFbnRyeSkge1xuICAgICAgICB0aGlzLm1vZGVsLnB1c2goc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hUZXh0O1xuICAgICAgdGhpcy5zZWFyY2hUZXh0Q2hhbmdlZC5uZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZWwgPSBzdWdnZXN0aW9uO1xuICAgICAgdGhpcy5leHRlcm5hbExpbmsgPSBzdWdnZXN0aW9uLmV4dGVybmFsTGluaztcbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZShzdWdnZXN0aW9uKTtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHN1Z2dlc3Rpb24ubGFiZWw7XG4gICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykuaW5kZXhPZihzdWdnZXN0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAvLyBpZiAodGhpcy5pc1BvbHltb3JwaGljKSB7XG4gICAgLy8gICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5maW5kKChydCk9PiB7XG4gICAgLy8gICAgIHJldHVybiBydC5uYW1lID09PSBzdWdnZXN0aW9uLnR5cGU7XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG4gIH1cblxuICBzaG93RHJvcGRvd24oKSB7XG4gICAgdGhpcy5kcm9wZG93blZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCcpO1xuICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgdGhpcy5pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuY2xpY2tvdXQpO1xuICAgICAgfSwgMjAwKTtcbiAgICAgIHRoaXMua2V5TGlzdGVuZXJBY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0aGlzLm1vZGVsICYmICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykpIHtcbiAgICAgICAgZm9yIChsZXQgc3VnZ2VzdGlvbkluZGV4ID0gMDsgc3VnZ2VzdGlvbkluZGV4IDwgKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5sZW5ndGg7IHN1Z2dlc3Rpb25JbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgaXRlbSA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucylbc3VnZ2VzdGlvbkluZGV4XTtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbC5pZCA9PT0gaXRlbS5pZCAmJiB0aGlzLm1vZGVsLnR5cGUgPT09IGl0ZW0udHlwZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSBzdWdnZXN0aW9uSW5kZXg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5lbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpO1xuICB9XG5cbiAgZGlzbWlzc0Ryb3Bkb3duKGV2ZW50Pykge1xuICAgIHRoaXMuZHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQnKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLnByZXZNb2RlbCA9IHRoaXMubW9kZWw7XG4gICAgZGVsZXRlIHRoaXMuc2VhcmNoVGV4dDtcbiAgICBkZWxldGUgdGhpcy5zZWFyY2hSZXN1bHRzO1xuICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgdGhpcy5vblNlYXJjaFRleHRDaGFuZ2VkKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgcmV2ZXJ0KCkge1xuICAgIHRoaXMubW9kZWwgPSB0aGlzLnByZXZNb2RlbDtcbiAgICBkZWxldGUgdGhpcy5wcmV2TW9kZWw7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIHJlbW92ZShldiwgaXRlbSkge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3Qgb3B0aW9uSW5kZXggPSB0aGlzLm1vZGVsLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKG9wdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5tb2RlbC5zcGxpY2Uob3B0aW9uSW5kZXgsIDEpO1xuICAgICAgaWYgKCF0aGlzLm1vZGVsLmxlbmd0aCkge1xuICAgICAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICAgICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgb3BlblJlc291cmNlKG1vZGVsPykge1xuICAgIHRoaXMua2V5TGlzdGVuZXJBY3RpdmUgPSB0cnVlOyAvLyBzdXBwcmVzcyBkcm9wZG93biBpbiB0aGlzIGNhc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVmRGlhbG9nRmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1ldGFSZWZEaWFsb2cpO1xuICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudChtb2RlbCA/ICdFRElUJyA6ICdORVcnKSk7XG4gICAgbGV0IHRoZW1lID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGF0YXNldC50aGVtZTtcbiAgICBpZiAoIXRoZW1lIHx8IHRoZW1lID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIGxldCBwYXJlbnRDb21wb25lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCd2Z2lwLW1ldGEtbGF5b3V0Jyk7XG4gICAgICBpZiAocGFyZW50Q29tcG9uZW50KSB7XG4gICAgICAgIHRoZW1lID0gcGFyZW50Q29tcG9uZW50LmRhdGFzZXQudGhlbWU7XG4gICAgICB9XG4gICAgICBpZiAoIXRoZW1lIHx8IHRoZW1lID09PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgcGFyZW50Q29tcG9uZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgndmdpcC1tZXRhLXJlc291cmNlJyk7XG4gICAgICAgIGlmIChwYXJlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICB0aGVtZSA9IHBhcmVudENvbXBvbmVudC5kYXRhc2V0LnRoZW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmZXJlbmNlU2VydmljZS5vcGVuRGlhbG9nKFxuICAgICAgcmVmRGlhbG9nRmFjdG9yeSwgdGhpcy5tZXRhUmVzb3VyY2UsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCB0aGlzLm1ldGFSZWZlcmVuY2UsIG1vZGVsLCBudWxsLCB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUsXG4gICAgICB0aGVtZVxuICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSByZXN1bHQ7XG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdChyZXN1bHQpO1xuICAgICAgICBjb25zdCBleGlzdGluZ1N1Z2dlc3Rpb24gPSAodGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKS5maW5kKChzKSA9PiAocy5pZCA9PT0gcmVzdWx0LmlkICYmIHMudHlwZSA9PT0gcmVzdWx0LnR5cGUpKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nU3VnZ2VzdGlvbikge1xuICAgICAgICAgIGV4aXN0aW5nU3VnZ2VzdGlvbi5sYWJlbCA9IHJlc3VsdC5sYWJlbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIXRoaXMubWV0YS5zdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubWV0YS5zdWdnZXN0aW9ucy51bnNoaWZ0KHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRhVHJhY2tlci5lbWl0KHRoaXMuYnVpbGRUcmFja0V2ZW50KG1vZGVsID8gJ1VQREFURScgOiAnQ1JFQVRFJywgcmVzdWx0LnR5cGUgfHwgcmVzdWx0LnJlc291cmNlVHlwZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tZXRhVHJhY2tlci5lbWl0KHRoaXMuYnVpbGRUcmFja0V2ZW50KG1vZGVsID8gJ0NBTkNFTF9FRElUJyA6ICdDQU5DRUxfVVBEQVRFJykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGhvbGRlciA9IHRoaXMuZHJvcGRvd24uY2xvc2VzdCgnLlZsdC1jYXJkX19jb250ZW50Jyk7XG4gICAgICBpZiAoaG9sZGVyKSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLlZsdC1kcm9wZG93bl9fcGFuZWwnKTtcbiAgICAgICAgY29uc3QgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGhvbGRlclJlY3QgPSBob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChob2xkZXJSZWN0LnRvcCArIGhvbGRlclJlY3QuaGVpZ2h0IDwgZWxSZWN0LnRvcCArIGVsUmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnZW5kJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDQwMCk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZURyb3Bkb3duT3B0aW9uSXNWaXNpYmxlKCkge1xuICAgIGlmICghdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lcikge1xuICAgICAgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ucXVlcnlTZWxlY3RvcignLlZsdC1kcm9wZG93bl9fc2Nyb2xsJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyICYmIHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gNDQgKiB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICAgIGNvbnN0IHNjcm9sbEJvdHRvbSA9IDQ0ICogKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4IC0gNyk7XG4gICAgICBpZiAoc2Nyb2xsVG9wIDwgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3ApIHtcbiAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbEJvdHRvbSA+IHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0gc2Nyb2xsQm90dG9tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xpY2tvdXQgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCBpbnRlcm5hbENvbnRyb2wgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChpbnRlcm5hbENvbnRyb2wgJiYgWydWbHQtZHJvcGRvd25fX2xpbmsnLCAnVmx0LWRyb3Bkb3duX19ibG9jayddLmluZGV4T2YoZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSkgIT09IC0xICkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoIWludGVybmFsQ29udHJvbCAmJiBldmVudC50YXJnZXQgIT09IHRoaXMuaW5wdXQgJiYgZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSAhPT0gJ1ZsdC1kcm9wZG93bl9fdGl0bGUnKSB7XG4gICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWludGVybmFsQ29udHJvbCAmJiBpbnRlcm5hbENvbnRyb2wudGFnTmFtZSAhPT0gJ0lOUFVUJykge1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgYnVpbGRUcmFja0V2ZW50KGFjdGlvbjogc3RyaW5nLCB2YWx1ZT86IHN0cmluZykge1xuICAgIGNvbnN0IGU6IElNZXRhVHJhY2tlckV2ZW50ID0ge1xuICAgICAgaW50ZWdyYXRpb246IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgcmVzb3VyY2U6IHRoaXMubW9kZWwgPyAodGhpcy5tb2RlbC50eXBlIHx8IHRoaXMubW9kZWwucmVzb3VyY2VUeXBlKSA6IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSxcbiAgICAgIGZpZWxkOiB0aGlzLm1ldGEubmFtZSxcbiAgICAgIGFjdGlvblxuICAgIH07XG4gICAgaWYgKHRoaXMubWV0YS4kaXNDb250YWN0YWJsZSkge1xuICAgICAgZS5pc0NvbnRhY3RhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZih2YWx1ZSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBsYWNlaG9sZGVyTGFiZWwoKSB7XG4gICAgdGhpcy5wbGFjZUhvbGRlckxhYmVsID0gdGhpcy5tZXRhLmxhYmVsO1xuICAgIGlmICh0aGlzLm11bHRpcGxlICYmICF0aGlzLmlzUG9seW1vcnBoaWMpIHtcbiAgICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCA9ICcrQWRkICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCA9ICh0aGlzLmlzU2VhcmNoYWJsZSAmJiAodGhpcy5tdWx0aXBsZSB8fCAhdGhpcy5pc1BvbHltb3JwaGljKSkgPyAnU2VhcmNoICcgOiAnJztcbiAgICB9XG4gICAgdGhpcy5wbGFjZUhvbGRlckxhYmVsICs9IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA/IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA6IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlO1xuICB9XG5cbiAgcHJpdmF0ZSBrZXlkb3duID0gKGV2ZW50KSA9PiB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IHtcbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCsrO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA+PSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuc3VyZURyb3Bkb3duT3B0aW9uSXNWaXNpYmxlKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0Fycm93VXAnOiB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykubGVuZ3RoIC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleC0tO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5sZW5ndGggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuc3VyZURyb3Bkb3duT3B0aW9uSXNWaXNpYmxlKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1NwYWNlJzpcbiAgICAgIGNhc2UgJ0VudGVyJzoge1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLm9uU3VnZ2VzdGlvblNlbGVjdChldmVudCwgKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKVt0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleF0pO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VzY2FwZSc6IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQmFja3NwYWNlJzoge1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgdGhpcy5tb2RlbCkgeyAvLyBIUEJSLTgyMjlcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgYnVpbGRFeHRlcm5hbExpbmsoKSB7XG4gICAgaWYgKHRoaXMubW9kZWwpIHtcbiAgICAgIGlmICh0aGlzLm1vZGVsLmV4dGVybmFsTGluaykge1xuICAgICAgICB0aGlzLmV4dGVybmFsTGluayA9IHRoaXMubW9kZWwuZXh0ZXJuYWxMaW5rO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1ldGFDb250ZXh0LnByb2ZpbGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlLnRvVXBwZXJDYXNlKCldKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmV4dGVybmFsTGluaztcbiAgICAgICAgdGhpcy5tZXRhTXNnU2VydmljZS5zZW5kTWVzc2FnZShcbiAgICAgICAgICB0aGlzLmludGVncmF0aW9uQ29kZS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ2J1aWxkRXh0ZXJuYWxMaW5rJyxcbiAgICAgICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgICAgICByZWY6IHRoaXMubW9kZWwsXG4gICAgICAgICAgICBwcm9maWxlOiB0aGlzLm1ldGFDb250ZXh0LnByb2ZpbGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlLnRvVXBwZXJDYXNlKCldXG4gICAgICAgICAgfSxcbiAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgdGhpcy5leHRlcm5hbExpbmsgPSByZXNwb25zZS5leHRlcm5hbExpbms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIGV4dGVybmFsIGxpbmsgc3VwcG9ydCBmb3InLCB0aGlzLmludGVncmF0aW9uQ29kZSwgdGhpcy5tb2RlbC5yZXNvdXJjZVR5cGUgfHwgdGhpcy5tb2RlbC50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmV4dGVybmFsTGluaztcbiAgICB9XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgY29uc3Qgc3VwZXJEaXNhYmxlZCA9IHRoaXMubG9naWNhbERpc2FibGVkIHx8IHRoaXMudmFsaWRhdGlvbnMuZGlzYWJsZWQgfHwgdGhpcy5tZXRhLmRpc2FibGVkID09PSB0cnVlXG4gICAgICB8fCAodGhpcy5tZXRhLnVwZGF0YWJsZSA9PT0gZmFsc2UgJiYgdGhpcy5pc1BlcnNpc3RlZFBhcmVudCk7XG4gICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVNZXRhLmRpc2FibGVkID0gc3VwZXJEaXNhYmxlZDtcbiAgICByZXR1cm4gc3VwZXJEaXNhYmxlZDtcbiAgfVxuXG4gIGdldCBzaG93VHlwZXMoKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgKHRoaXMubWV0YS5zaG93VHlwZXMpICE9PSAndW5kZWZpbmVkJykgPyB0aGlzLm1ldGEuc2hvd1R5cGVzIDogdHJ1ZTtcbiAgfVxuXG4gIGdldCBzdWdnZXN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zbWFydFN1Z2dlc3Rpb25zLmNvbmNhdChcbiAgICAgICF0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgP1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICh0aGlzLmFzeW5jU3VnZ2VzdGlvbnMgfHwgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKSA6ICh0aGlzLmFzeW5jU3VnZ2VzdGlvbnMgfHwgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKS5maWx0ZXIoKHMpID0+IHMudHlwZSA9PT0gdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlKVxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzQXBwZW5kQnV0dG9uKCkge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLm1vZGVsKSB7XG4gICAgICBpZiAodGhpcy5pc1BvbHltb3JwaGljKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXMubWV0YVJlZmVyZW5jZSkge1xuICAgICAgICAgIGlmICgocmVmLm5hbWUgfHwgcmVmLnJlc291cmNlVHlwZSkgPT09ICh0aGlzLm1vZGVsLnR5cGUgfHwgdGhpcy5tb2RlbC5yZXNvdXJjZVR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmLnVwZGF0YWJsZSB8fCAocmVmLmNyZWF0YWJsZSAmJiByZWYudXBkYXRhYmxlICE9PSBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRhUmVmZXJlbmNlLnVwZGF0YWJsZSB8fCAodGhpcy5tZXRhUmVmZXJlbmNlLmNyZWF0YWJsZSAmJiB0aGlzLm1ldGFSZWZlcmVuY2UudXBkYXRhYmxlICE9PSBmYWxzZSk7IC8vIFZHSVMtNjkxMVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhUmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5tYXAocnQgPT4gcnQubmFtZSkuam9pbignLCcpO1xuICAgICAgLy8gfSwgMCk7XG4gICAgICBmb3IgKGNvbnN0IHJ0IG9mIHRoaXMubWV0YVJlZmVyZW5jZSkge1xuICAgICAgICBpZiAocnQuY3JlYXRhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YVJlZmVyZW5jZS5jcmVhdGFibGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWFyY2hTdWdnZXN0aW9ucyhwYXJhbXM/KSB7XG4gICAgbGV0IHNlYXJjaFVybCA9IGAvc3VnZ2VzdGlvbnMvJHt0aGlzLm1ldGEubmFtZX0vc2VhcmNoYDtcbiAgICBpZiAodGhpcy5tZXRhLnNlYXJjaCkge1xuICAgICAgaWYgKHRoaXMubWV0YS5zZWFyY2gudXJsKSB7XG4gICAgICAgIHNlYXJjaFVybCA9IHRoaXMubWV0YS5zZWFyY2gudXJsLnJlcGxhY2UoL1xcJHtcXHMqKFtcXHdcXC5dKylcXHMqfS9nLCAobWF0Y2gsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gcGFyYW1zW2tleV07XG4gICAgICAgICAgICBkZWxldGUgcGFyYW1zW2tleV07XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBwIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgc2VhcmNoVXJsICs9IGAke3NlYXJjaFVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnfSR7ZW5jb2RlVVJJQ29tcG9uZW50KHApfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbXNbcF0pfWA7XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgICB0aGlzLnJlc291cmNlU2VydmljZS5nZXRCeVBhdGgoc2VhcmNoVXJsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5zZWFyY2hpbmc7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBsZXQgc3VnZ2VzdGlvbnM7XG4gICAgICAgICAgc3VnZ2VzdGlvbnMgPSByZXN1bHQ7XG4gICAgICAgICAgaWYgKHRoaXMubWV0YS5zZWFyY2guZXh0cmFjdCkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSByZXN1bHRbdGhpcy5tZXRhLnNlYXJjaC5leHRyYWN0XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zIGluc3RhbmNlb2YgQXJyYXkgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gW3N1Z2dlc3Rpb25zXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYXN5bmNTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICAgIHN1Z2dlc3Rpb25zLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgICAgIGlmIChzICYmIHMuaWQgJiYgcy50eXBlKSB7IC8vIFRPT0QgY2hlY2sgdGhlIHR5cGUgaXMgYWNjZXB0YWJsZVxuICAgICAgICAgICAgICBhc3luY1N1Z2dlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBzLmlkLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBzLmxhYmVsIHx8IGAke3MudHlwZX0jJHtzLmlkfWAsXG4gICAgICAgICAgICAgICAgdHlwZTogcy50eXBlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChhc3luY1N1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGFzeW5jU3VnZ2VzdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IGFzeW5jU3VnZ2VzdGlvbnNbMF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5hc3luY1N1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFzeW5jU3VnZ2VzdGlvbnMgPSBhc3luY1N1Z2dlc3Rpb25zO1xuICAgICAgICB9XG4gICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaGluZztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCByZXNvdXJjZVNlcnZpY2UoKSB7XG4gICAgaWYgKCF0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IG1ldGFSZXNvdXJjZUNvbmZpZzogSU1ldGFSZXNvdXJjZUNvbmZpZyA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25Db2RlOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiB0aGlzLnJlc291cmNlVHlwZVxuICAgICAgfTtcbiAgICAgIHRoaXMubWV0YVJlc291cmNlU2VydmljZSA9IHRoaXMubWV0YVJlc291cmNlLm5ldyhtZXRhUmVzb3VyY2VDb25maWcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0IG1ldGFSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YS5yZWZlcmVuY2UgfHwge307XG4gIH1cbn1cblxuLy8vLyBGSUVMRCBMSVNUXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpZWxkTGlzdC92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWVsZExpc3Qvc3R5bGUuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkTGlzdCBleHRlbmRzIEZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICB2YWx1ZTogYW55O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IG9yaWdWYWx1ZSA9IHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wYXJlbnQsIHRoaXMubWV0YS5uYW1lLCB7XG4gICAgICBzZXQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmluZGV4T2YoaSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMubW9kZWwucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubW9kZWw7XG4gICAgICAgIHRoaXMubWV0YS4kb3B0aW9uYWwgPSB0aGlzLmlzT3B0aW9uYWw7XG4gICAgICB9LFxuICAgICAgZ2V0OiAoKSA9PiB0aGlzLnZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChvcmlnVmFsdWUpIHtcbiAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IG9yaWdWYWx1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm1vZGVsICYmIHRoaXMudmFsaWRhdGlvbnMubWluKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsaWRhdGlvbnMubWluOyBpKyspIHtcbiAgICAgICAgdGhpcy5hZGQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgbGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhLmxpc3QgfHwgdGhpcy5tZXRhLnJlZmVyZW5jZTtcbiAgfVxuXG4gIGFkZCgpIHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRpb25zLm1heCB8fCAodGhpcy52YWxpZGF0aW9ucy5tYXggPiB0aGlzLm1vZGVsLmxlbmd0aCkpIHtcbiAgICAgIHRoaXMubW9kZWwucHVzaCh7fSk7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5tb2RlbDtcbiAgICB9XG4gIH1cblxuICByZW1vdmUoaXRlbUluZGV4KSB7XG4gICAgdGhpcy5tb2RlbC5zcGxpY2UoaXRlbUluZGV4LCAxKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5tb2RlbDtcbiAgfVxufVxuXG4vLy8vIExBWU9VVFxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd2Z2lwLW1ldGEtbGF5b3V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGF5b3V0L3ZpZXcuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbGF5b3V0L3N0eWxlLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNZXRhTGF5b3V0IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBtZXRhOiBhbnk7XG4gIEBJbnB1dCgpIHJlc291cmNlOiBhbnk7XG4gIEBJbnB1dCgpIGludGVncmF0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIHR5cGU6IGFueTtcbiAgQElucHV0KCkgcHJldmlldzogYm9vbGVhbjtcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcblxuICBvcHRpb25hbEZpZWxkczogYW55ID0ge307XG4gIG9wdGlvbmFsRmllbGRzQ291bnQ6IG51bWJlcjtcbiAgc2hvd0FsbCA9IGZhbHNlO1xuICBmaWVsZHNWaXNpYmlsaXR5Q2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICByZWZEaWFsb2dGYWN0b3J5OiBhbnk7XG4gIHBhcmVudEZvcm06IEhUTUxGb3JtRWxlbWVudDtcbiAgaW50ZWdyYXRpb25Db2RlOiBzdHJpbmc7XG4gIHJlc291cmNlVHlwZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2U6IE1ldGFSZXNvdXJjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWZlcmVuY2VTZXJ2aWNlOiBNZXRhUmVmZXJlbmNlU2VydmljZVxuICApIHtcbiAgICAvLyBjb25zb2xlLmxvZygnTWV0YUxheW91dCcsIHRoaXMubWV0YSk7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlID0gdGhpcy5tZXRhLmludGVncmF0aW9uQ29kZSB8fCB0aGlzLmludGVncmF0aW9uO1xuICAgIHRoaXMucmVzb3VyY2VUeXBlID0gdGhpcy5tZXRhLnJlc291cmNlVHlwZSB8fCB0aGlzLnR5cGU7XG4gICAgdGhpcy5wYXJlbnRGb3JtID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICB0aGlzLmNvbmZpZ3VyZU9wdGlvbmFsU2VjdGlvbnMoKTtcblxuICAgIHRoaXMuZmllbGRzVmlzaWJpbGl0eUNoYW5nZWQucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICB0aGlzLmNvdW50T3B0aW9uYWxGaWVsZHMoKTtcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY291bnRPcHRpb25hbEZpZWxkcygpO1xuICAgIH0sIDApO1xuXG4gICAgaWYgKHRoaXMucGFyZW50Rm9ybSkge1xuICAgICAgdGhpcy5wYXJlbnRGb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmllbGRzVmlzaWJpbGl0eUNoYW5nZWQubmV4dChKU09OLnN0cmluZ2lmeSh0aGlzLnJlc291cmNlKSk7XG4gICAgICAgICAgdGhpcy5jb3VudE9wdGlvbmFsRmllbGRzKCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGhlbWUgIT09ICdpbmhlcml0Jykge1xuICAgICAgdGhpcy5hcHBseVRoZW1lKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KSB7XG4gICAgaWYgKGNoYW5nZXMubWV0YSkge1xuICAgICAgdGhpcy5jb25maWd1cmVPcHRpb25hbFNlY3Rpb25zKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jb3VudE9wdGlvbmFsRmllbGRzKCk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZXMudGhlbWUpIHtcbiAgICAgIHRoaXMudGhlbWUgPSBjaGFuZ2VzLnRoZW1lLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNvdW50T3B0aW9uYWxGaWVsZHMoKSB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBjb25zdCBjb3VudFNlY3Rpb25GaWVsZHMgPSAocykgPT4ge1xuICAgICAgZm9yIChjb25zdCBmIG9mIHMuZmllbGRzKSB7XG4gICAgICAgIGlmIChmLmZpZWxkcyAmJiBmLmZpZWxkcy5sZW5ndGggJiYgIWYudmlzaWJsZSkge1xuICAgICAgICAgIGNvdW50U2VjdGlvbkZpZWxkcyhmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZi4kb3B0aW9uYWwgJiYgIWYuJGhpZGRlbikge1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLm1ldGEuc2VjdGlvbnMpIHtcbiAgICAgIGNvbnN0IG5vdE9wdGlvbmFsQW55ID0gcy5maWVsZHMuZmluZChmID0+ICFmLiRvcHRpb25hbCk7XG4gICAgICBzLiRvcHRpb25hbCA9ICFub3RPcHRpb25hbEFueTtcbiAgICAgIGlmICghcy52aXNpYmxlKSB7XG4gICAgICAgIGNvdW50U2VjdGlvbkZpZWxkcyhzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vcHRpb25hbEZpZWxkc0NvdW50ID0gY291bnQ7XG4gIH1cblxuICBjb25maWd1cmVPcHRpb25hbFNlY3Rpb25zKCkge1xuICAgIGlmICh0aGlzLm1ldGEgJiYgdGhpcy5tZXRhLnNlY3Rpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5tZXRhLnNlY3Rpb25zKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnJG9wdGlvbmFsJywge1xuICAgICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9nZ2xlT3B0aW9uYWxGaWVsZHMoKSB7XG4gICAgdGhpcy5zaG93QWxsID0gIXRoaXMuc2hvd0FsbDtcbiAgICB0aGlzLm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpO1xuICB9XG5cbiAgb3BlbkNoaWxkKGNoaWxkUmVzb3VyY2UsIGNoaWxkTW9kZWw/KSB7XG4gICAgY2hpbGRSZXNvdXJjZS5yZWZlcmVuY2UucGFyZW50ID0gdGhpcy5yZXNvdXJjZS5fdmdpczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIGlmICghdGhpcy5yZWZEaWFsb2dGYWN0b3J5KSB7XG4gICAgICB0aGlzLnJlZkRpYWxvZ0ZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShNZXRhUmVmRGlhbG9nKTtcbiAgICB9XG4gICAgdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLm9wZW5EaWFsb2coXG4gICAgICB0aGlzLnJlZkRpYWxvZ0ZhY3RvcnksIHRoaXMubWV0YVJlc291cmNlLCB0aGlzLmludGVncmF0aW9uQ29kZSwgY2hpbGRSZXNvdXJjZS5yZWZlcmVuY2UsIGNoaWxkTW9kZWwsXG4gICAgICBjaGlsZE1vZGVsICYmIChjaGlsZFJlc291cmNlLnJlZmVyZW5jZS5lZGl0YWJsZSA9PT0gZmFsc2UpIC8vIGlzIHByZXZpZXcgbW9kZVxuICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQucmF3KSB7XG4gICAgICAgIGlmICghdGhpcy5yZXNvdXJjZVtjaGlsZFJlc291cmNlLm5hbWVdKSB7XG4gICAgICAgICAgdGhpcy5yZXNvdXJjZVtjaGlsZFJlc291cmNlLm5hbWVdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNvdXJjZVtjaGlsZFJlc291cmNlLm5hbWVdLnB1c2gocmVzdWx0LnJhdyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXQgaXNQZXJzaXN0ZWRSZXNvdXJjZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZSAmJiB0aGlzLnJlc291cmNlLl92Z2lzICYmICh0aGlzLnJlc291cmNlLl92Z2lzLmV4dGVybmFsSWQgfHwgdGhpcy5yZXNvdXJjZS5fdmdpcy5pZCApO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRoZW1lKCkge1xuICAgIGNvbnN0IG1ldGFUaGVtZSA9IHRoaXMudGhlbWUgPT09ICdkYXJrJyA/IG1ldGFEYXJrIDogbWV0YUxpZ2h0O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1ldGFUaGVtZS5wcm9wZXJ0aWVzKSkge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGtleSwgbWV0YVRoZW1lLnByb3BlcnRpZXNba2V5XSk7XG4gICAgfVxuICB9XG59XG5cbi8vLy8gUkVTT1VSQ0VcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZnaXAtbWV0YS1yZXNvdXJjZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZS92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZS9zdHlsZS5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWV0YVJlc291cmNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSByZXNvdXJjZTogYW55O1xuICBASW5wdXQoKSBtb2RlbDogYW55O1xuICBASW5wdXQoKSBtZXRhUmVzb3VyY2VTZXJ2aWNlRGVsZWdhdGVkOiBNZXRhUmVzb3VyY2VTZXJ2aWNlOyAvLyBjYXJ5IGl0IGZyb20gdGhlIHBhcmVudCB0byBrZWVwIHRoZSBpbnRlcmNlcHRvcnNcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcbiAgQE91dHB1dCgpIHB1YmxpYyBkb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGludGVncmF0aW9uQ29kZTogc3RyaW5nO1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgbWV0YTogYW55O1xuICBzZXJ2aWNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlO1xuICBjdXJyZW50TGF5b3V0SWQ6IGFueTtcbiAgZm9ybUVycm9yczogYW55O1xuICBmaWVsZHNNYXA6IGFueTtcbiAgZWRpdCA9IHRydWU7XG4gIGJ1c3k6IGJvb2xlYW47XG4gIG1ldGFMb2FkaW5nOiBib29sZWFuO1xuICBnZW5lcmFsRXJyb3I6IHN0cmluZztcbiAgcmVzb3VyY2VNZW51VmlzaWJsZTogYm9vbGVhbjtcbiAgY29udGFjdHNTdWdnZXN0aW9uc0RvbmUgPSBmYWxzZTtcbiAgaXNFZGl0YWJsZTogYm9vbGVhbjtcbiAgaXNQZXJzaXN0ZW50OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2VTZXJ2aWNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YUNvbnRleHQ6IE1ldGFDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFNc2dTZXJ2aWNlOiBNZXRhTXNnU2VydmljZVxuICApIHtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUgPSAodGhpcy5yZXNvdXJjZS5pbnRlZ3JhdGlvbkNvZGUgfHwgJycpLnRvVXBwZXJDYXNlKCk7XG4gICAgdGhpcy5yZXNvdXJjZVR5cGUgPSB0aGlzLnJlc291cmNlLnJlc291cmNlVHlwZTtcbiAgICB0aGlzLnNlcnZpY2UgPSAodGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlRGVsZWdhdGVkIHx8IHRoaXMubWV0YVJlc291cmNlU2VydmljZSkubmV3KHRoaXMucmVzb3VyY2UpO1xuICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgdGhpcy5tb2RlbCA9IHt9O1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXNvdXJjZS5hY3Rpdml0eSAmJiB0aGlzLnJlc291cmNlLnJlZi5lZGl0YWJsZSA9PT0gZmFsc2UgJiYgIXRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCkge1xuICAgICAgdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkID0gJ01JU1NJTkdfRVhURVJOQUxfSUQnO1xuICAgIH1cbiAgICB0aGlzLmlzUGVyc2lzdGVudCA9IHRoaXMucmVzb3VyY2UgJiYgdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkO1xuICAgIGlmICghdGhpcy5yZXNvdXJjZS5tZXRhKSB7XG4gICAgICB0aGlzLmxvYWRNZXRhZGF0YSh0aGlzLnJlc291cmNlLmxheW91dElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gICBpZiAodGhpcy5pc1BlcnNpc3RlbnQgJiYgKCF0aGlzLmlzRWRpdGFibGUgfHwgdGhpcy5yZXNvdXJjZXNbcmVmLm5hbWVdLm1ldGEubGF5b3V0LmNoaWxkcmVuKSkge1xuICAgICAgLy8gICAgIHRoaXMuZWRpdCA9IGZhbHNlO1xuICAgICAgLy8gICB9XG4gICAgICB0aGlzLm1ldGEgPSB0aGlzLnJlc291cmNlLm1ldGE7XG4gICAgICB0aGlzLmN1cnJlbnRMYXlvdXRJZCA9IHRoaXMubWV0YS5sYXlvdXQuaWQ7XG4gICAgICB0aGlzLmdldERldGFpbHMoKTtcbiAgICAgIHRoaXMuZ2V0RmllbGRzTWFwKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRoZW1lICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSkge1xuICAgIGlmIChjaGFuZ2VzLnRoZW1lKSB7XG4gICAgICB0aGlzLnRoZW1lID0gY2hhbmdlcy50aGVtZS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAodGhpcy50aGVtZSAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVkaXRNb2RlKCkge1xuICAgIHRoaXMuZWRpdCA9IHRydWU7XG4gIH1cblxuICBsb2FkTWV0YWRhdGEobGF5b3V0SWQ/LCByZWZyZXNoID0gZmFsc2UpIHtcbiAgICBjb25zdCBsYXlvdXRTdG9yZUtleSA9IGB2Z2lzLmxheW91dF8ke3RoaXMubWV0YUNvbnRleHQudmdpcFVzZXJJZH1fJHt0aGlzLmludGVncmF0aW9uQ29kZX1fJHt0aGlzLnJlc291cmNlLnJlc291cmNlVHlwZX1gO1xuICAgIGlmICghbGF5b3V0SWQpIHtcbiAgICAgIGxheW91dElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0obGF5b3V0U3RvcmVLZXkpO1xuICAgIH1cbiAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5tZXRhTG9hZGluZyA9IHRydWU7XG4gICAgfSwgMCk7XG4gICAgZGVsZXRlIHRoaXMucmVzb3VyY2UubmljZUZpZWxkcztcbiAgICB0aGlzLnNlcnZpY2UuZ2V0TWV0YWRhdGEobGF5b3V0SWQsIHJlZnJlc2gpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAobWV0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudExheW91dElkID0gbWV0YS5sYXlvdXQuaWQ7XG4gICAgICAgIGlmIChsYXlvdXRJZCAhPT0gbWV0YS5sYXlvdXQuaWQgJiYgIXRoaXMuaXNQZXJzaXN0ZW50KSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obGF5b3V0U3RvcmVLZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YSA9IG1ldGFOb3JtYWxpemVyKG1ldGEsIHRoaXMuaW50ZWdyYXRpb25Db2RlLCB0aGlzLnJlc291cmNlLnJlc291cmNlVHlwZSk7XG4gICAgICAgIHRoaXMuaXNFZGl0YWJsZSA9IHRoaXMubWV0YS5sYXlvdXQgJiYgdGhpcy5tZXRhLmxheW91dC5lZGl0YWJsZSAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzb3VyY2UubWV0YSA9IHRoaXMubWV0YTtcbiAgICAgICAgaWYgKHRoaXMuaXNQZXJzaXN0ZW50ICYmICghdGhpcy5pc0VkaXRhYmxlIHx8IHRoaXMubWV0YS5sYXlvdXQuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgdGhpcy5lZGl0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgICAgdGhpcy5nZXREZXRhaWxzKCk7XG4gICAgICAgIHRoaXMuZ2V0RmllbGRzTWFwKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChtZXRhRXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgICB0aGlzLmdlbmVyYWxFcnJvciA9IGBFcnJvciBsb2FkaW5nIHJlc291cmNlIG1ldGFkYXRhICgke21ldGFFcnJvci5zdGF0dXNUZXh0fSlgO1xuICAgICAgfSxcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm1ldGFMb2FkaW5nO1xuICAgICAgICB0aGlzLmZvcmNlVWlVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZUxheW91dCgpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIGB2Z2lzLmxheW91dF8ke3RoaXMubWV0YUNvbnRleHQudmdpcFVzZXJJZH1fJHt0aGlzLmludGVncmF0aW9uQ29kZX1fJHt0aGlzLnJlc291cmNlLnJlc291cmNlVHlwZX1gLFxuICAgICAgdGhpcy5jdXJyZW50TGF5b3V0SWRcbiAgICApO1xuICAgIHRoaXMubG9hZE1ldGFkYXRhKHRoaXMuY3VycmVudExheW91dElkKTtcbiAgfVxuXG4gIGdldERldGFpbHMoKSB7XG4gICAgaWYgKHRoaXMucmVzb3VyY2UgJiYgKHRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCB8fCB0aGlzLnJlc291cmNlLmlkKSkge1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2UucGFyZW50ICYmIHRoaXMucmVzb3VyY2UuYWN0aXZpdHkgLy8gc2tpcCBmZXRjaFxuICAgICAgICAmJiB0aGlzLm1ldGEubGF5b3V0LmVkaXRhYmxlID09PSBmYWxzZSAmJiAhdGhpcy5tZXRhLmxheW91dC5jaGlsZHJlblxuICAgICAgKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBpbiB0aGlzLnJlc291cmNlLmFjdGl2aXR5KSB7XG4gICAgICAgICAgaWYgKHRoaXMucmVzb3VyY2UuYWN0aXZpdHlbcF0gJiYgdGhpcy5maWVsZE5hbWVzLmluZGV4T2YocCkgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsW3BdID0gdGhpcy5yZXNvdXJjZS5hY3Rpdml0eVtwXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2VydmljZS5nZXREZXRhaWxzKFxuICAgICAgICAgICh0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgfHwgdGhpcy5yZXNvdXJjZS5pZCksIHtcbiAgICAgICAgICAgIGV2ZW50SWQ6IHRoaXMucmVzb3VyY2UuZXZlbnRJZCAhPT0gJ05PX0VWRU5UJyA/IHRoaXMucmVzb3VyY2UuZXZlbnRJZCA6IG51bGwsIGxheW91dElkOiB0aGlzLnJlc291cmNlLmxheW91dElkXG4gICAgICAgICAgfVxuICAgICAgICApLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgICAgICAgICBpZiAocmVzb3VyY2UuX3ZnaXMpIHtcbiAgICAgICAgICAgICAgaWYgKHJlc291cmNlLl92Z2lzLmV2ZW50SWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGFDb250ZXh0LnZnaXBFdmVudElkID0gcmVzb3VyY2UuX3ZnaXMuZXZlbnRJZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzb3VyY2UubGF5b3V0SWQgJiYgcmVzb3VyY2UuX3ZnaXMubGF5b3V0SWQgIT09IHRoaXMuY3VycmVudExheW91dElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTWV0YWRhdGEocmVzb3VyY2UuX3ZnaXMubGF5b3V0SWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgaW4gcmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZihyZXNvdXJjZVtwXSAhPT0gJ3VuZGVmaW5lZCcpICYmICh0aGlzLmZpZWxkTmFtZXMuaW5kZXhPZihwKSAhPT0gLTEgfHwgcCA9PT0gJ192Z2lzJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsW3BdID0gcmVzb3VyY2VbcF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKHJlc291cmNlRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEVycm9yID0gcmVzb3VyY2VFcnJvci5lcnJvciA/IHJlc291cmNlRXJyb3IuZXJyb3IubWVzc2FnZSB8fCByZXNvdXJjZUVycm9yLm1lc3NhZ2UgOiByZXNvdXJjZUVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVaVVwZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlLnJlZiAmJiB0aGlzLnJlc291cmNlLnJlZi5hY3Rpdml0eSkgeyAvLyByZXVzZSBmYWlsZWQgYXV0b2FjdGl2aXRpZXMgZGF0YVxuICAgICAgICBmb3IgKGNvbnN0IHAgaW4gdGhpcy5yZXNvdXJjZS5yZWYuYWN0aXZpdHkpIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS5yZWYuYWN0aXZpdHkgJiYgdGhpcy5maWVsZE5hbWVzLmluZGV4T2YocCkgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsW3BdID0gdGhpcy5yZXNvdXJjZS5yZWYuYWN0aXZpdHlbcF07IC8vIFZHSVMtNzIxNSAoY29weSBvbmx5IHZhbGlkIGZpZWxkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMucGVyZm9ybUF1dG9GaWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcGVyZm9ybUF1dG9GaWxsKCkge1xuICAgIHRoaXMubWV0YU1zZ1NlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgIHtcbiAgICAgICAgYWN0aW9uOiAnYXV0b0ZpbGwnLFxuICAgICAgICBpbnRlZ3JhdGlvbjogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGUsXG4gICAgICAgIHJlc291cmNlOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMubW9kZWwpKSxcbiAgICAgICAgZmllbGRzOiB0aGlzLm5pY2VGaWVsZHMsXG4gICAgICAgIGV2ZW50OiB0aGlzLm1ldGFDb250ZXh0LmNvbnRleHQsXG4gICAgICAgIHByb2ZpbGU6IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdXG4gICAgICB9LFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGFmcCBpbiByZXNwb25zZS5hdXRvRmlsbCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsW2FmcF0pIHtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbFthZnBdID0gcmVzcG9uc2UuYXV0b0ZpbGxbYWZwXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0RmllbGRzTWFwKCkge1xuICAgIGlmICh0aGlzLm1ldGEuZmllbGRzTWFwKSB7XG4gICAgICB0aGlzLmZpZWxkc01hcCA9IHRoaXMubWV0YS5maWVsZHNNYXA7XG4gICAgICB0aGlzLm1hcmtDb250YWN0YWJsZXMoKTtcbiAgICAgIHRoaXMuYnVpbGRDb250YWN0c1N1Z2dlc3Rpb25zKCk7XG4gICAgICBpZiAoIXRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCkge1xuICAgICAgICB0aGlzLmJ1aWxkU3ViamVjdFRlbXBsYXRlKCk7XG4gICAgICAgIHRoaXMuZXhlY1RyYW5zZm9ybWVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWV0YU1zZ1NlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICB7IGFjdGlvbjogJ2ZpZWxkc01hcCcsIGludGVncmF0aW9uOiB0aGlzLmludGVncmF0aW9uQ29kZSwgcmVzb3VyY2VUeXBlOiB0aGlzLnJlc291cmNlVHlwZSB9LFxuICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAoIXJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkc01hcCA9IHJlc3BvbnNlLmZpZWxkc01hcDtcbiAgICAgICAgICAgIHRoaXMubWFya0NvbnRhY3RhYmxlcygpO1xuICAgICAgICAgICAgdGhpcy5idWlsZENvbnRhY3RzU3VnZ2VzdGlvbnMoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZXNvdXJjZS5leHRlcm5hbElkKSB7XG4gICAgICAgICAgICAgIHRoaXMuYnVpbGRTdWJqZWN0VGVtcGxhdGUoKTtcbiAgICAgICAgICAgICAgdGhpcy5leGVjVHJhbnNmb3JtZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGZpZWxkcyBtYXAnLCB0aGlzLmludGVncmF0aW9uQ29kZSwgdGhpcy5yZXNvdXJjZVR5cGUsIHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgb3BlblJlc291cmNlTWVudSgpIHtcbiAgICB0aGlzLnJlc291cmNlTWVudVZpc2libGUgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uTWVudUNsaWNrb3V0KTtcbiAgICB9LCAxMCk7XG4gIH1cblxuICBjbG9zZShyZXN1bHQ/KSB7XG4gICAgdGhpcy5kb25lLmVtaXQocmVzdWx0KTtcbiAgfVxuXG4gIHNob3dQYXJzZWRFcnJvcihyZXNvdXJjZUZvcm0sIHBhcnNlZEVycm9yKSB7XG4gICAgdGhpcy5mb3JtRXJyb3JzID0gcGFyc2VkRXJyb3IubWVzc2FnZSB8fCAnVGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggb25lIG9yIG1vcmUgZmllbGRzJztcbiAgICBpZiAocGFyc2VkRXJyb3IuZXJyb3JzICYmIHBhcnNlZEVycm9yLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZm9ybUVycm9ycyArPSBgICgke3BhcnNlZEVycm9yLmVycm9ycy5tYXAoZSA9PiBlLm1lc3NhZ2UpLmpvaW4oJywgJyl9KWA7XG4gICAgICBmb3IgKGNvbnN0IHBlIG9mIHBhcnNlZEVycm9yLmVycm9ycykge1xuICAgICAgICBpZiAocmVzb3VyY2VGb3JtLmNvbnRyb2xzW3BlLmZpZWxkXSkge1xuICAgICAgICAgIHJlc291cmNlRm9ybS5jb250cm9sc1twZS5maWVsZF0uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSwgY3VzdG9tOiBwZS5tZXNzYWdlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3RJbnZhbGlkOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZm9ybV9fZWxlbWVudC0tZXJyb3IgLm1haW46bm90KC5zdGFuZGFsb25lKScpO1xuICAgICAgICBpZiAoZmlyc3RJbnZhbGlkKSB7XG4gICAgICAgICAgZmlyc3RJbnZhbGlkLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1Ym1pdChyZXNvdXJjZUZvcm0pIHtcbiAgICBkZWxldGUgdGhpcy5mb3JtRXJyb3JzO1xuICAgIHJlc291cmNlRm9ybS5mb3JtLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgaWYgKHJlc291cmNlRm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLm1ldGFDb250ZXh0LnZnaXBFdmVudElkKSB7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5fdmdpcykge1xuICAgICAgICAgIHRoaXMubW9kZWwuX3ZnaXMgPSB7XG4gICAgICAgICAgICBjb25uZWN0b3I6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiB0aGlzLnJlc291cmNlVHlwZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC5fdmdpcy5sYXlvdXRJZCA9IHRoaXMuY3VycmVudExheW91dElkO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAvLyB0aGlzLm1vZGVsLl92Z2lzLnRpbWVab25lT2Zmc2V0SW5NaW51dGVzID0gMDsgLy8gd2UgYXJlIG5vdCBwcm92aWRpbmcgdGltZXpvbmUgYW55bW9yZSAoYXMgVjMpLCBpbnN0ZWFkIHRoZSAndGltZScgYW5kICdkYXRlJyBvYmplY3RzIGFyZSBjb252ZXJ0ZWQgc28gdGhlIFVUQyB0aW1lL2RhdGUgaXMgY29ycmVjdFxuICAgICAgICB0aGlzLm1vZGVsLl92Z2lzLmV2ZW50SWQgPSB0aGlzLm1ldGFDb250ZXh0LnZnaXBFdmVudElkO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgICB9XG4gICAgICB0aGlzLnNlcnZpY2Uuc2F2ZSh0aGlzLm1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UocmVzdWx0KTtcbiAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgIH0sIChlcnJvclJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAoKGVycm9yUmVzdWx0LnN0YXR1cyA9PT0gNDIyICYmIGVycm9yUmVzdWx0LmVycm9yICYmICFlcnJvclJlc3VsdC5lcnJvci5lcnJvcnMgJiYgZXJyb3JSZXN1bHQuZXJyb3IuaW50ZWdyYXRpb25FcnJvcilcbiAgICAgICAgICB8fCAoZXJyb3JSZXN1bHQuZXJyb3IgJiYgZXJyb3JSZXN1bHQuZXJyb3IuZXJyb3JzICYmIGVycm9yUmVzdWx0LmVycm9yLmVycm9ycy5sZW5ndGggJiYgIWVycm9yUmVzdWx0LmVycm9yLmVycm9yc1swXS5maWVsZClcbiAgICAgICAgICAvLyBiYWNrZW5kIGltcGxlbWVudGVkIGVycm9yIHBhcnNpbmcgYnV0IGJyb2tlbiBWR0lTLTczNjZcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gJ1RoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIG9uZSBvciBtb3JlIGZpZWxkcyc7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMubWV0YU1zZ1NlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICAgICAgICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWN0aW9uOiAncGFyc2VFcnJvck1lc3NhZ2UnLFxuICAgICAgICAgICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiBlcnJvclJlc3VsdC5lcnJvci5yZXNvdXJjZVR5cGUsXG4gICAgICAgICAgICAgICAgcmF3RXJyb3I6IGVycm9yUmVzdWx0LmVycm9yLmludGVncmF0aW9uRXJyb3IsXG4gICAgICAgICAgICAgICAgcHJvZmlsZTogdGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZS50b1VwcGVyQ2FzZSgpXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucGFyc2VkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BhcnNlZEVycm9yKHJlc291cmNlRm9ybSwgcmVzcG9uc2UucGFyc2VkRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGVycm9yIHBhcnNlciBmb3InLCB0aGlzLmludGVncmF0aW9uQ29kZSwgZXJyb3JSZXN1bHQuZXJyb3IuaW50ZWdyYXRpb25FcnJvcik7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSBlcnJvclJlc3VsdC5lcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnLi4uLicsIGVycik7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvclJlc3VsdC5zdGF0dXMgPT09IDQyMikge1xuICAgICAgICAgIHRoaXMuc2hvd1BhcnNlZEVycm9yKHJlc291cmNlRm9ybSwgZXJyb3JSZXN1bHQuZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9IGVycm9yUmVzdWx0LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtRXJyb3JzID0gT2JqZWN0LmtleXMocmVzb3VyY2VGb3JtLmNvbnRyb2xzKVxuICAgICAgICAuZmlsdGVyKChjKSA9PiByZXNvdXJjZUZvcm0uY29udHJvbHNbY10uaW52YWxpZClcbiAgICAgICAgLm1hcCgoZikgPT4gKHRoaXMubmljZUZpZWxkc1tmXSA/ICh0aGlzLm5pY2VGaWVsZHNbZl0ubGFiZWwgfHwgZikgOiBmKSkuam9pbignLCAnKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IGBmb3JtW25hbWU9XCIke3RoaXMucmVzb3VyY2VUeXBlfVwiXSAuVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yIC5tYWluOm5vdCguc3RhbmRhbG9uZSlgO1xuICAgICAgICBjb25zdCBmaXJzdEludmFsaWQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICAgIGlmIChmaXJzdEludmFsaWQpIHtcbiAgICAgICAgICBmaXJzdEludmFsaWQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJGb3JtRXJyb3JzKCkge1xuICAgIGRlbGV0ZSB0aGlzLmZvcm1FcnJvcnM7XG4gIH1cblxuICBnZXQgbmljZUZpZWxkcygpIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzXG4gICAgICAmJiB0aGlzLnJlc291cmNlLm1ldGFcbiAgICAgICYmIHRoaXMucmVzb3VyY2UubWV0YS5sYXlvdXRcbiAgICAgICYmIHRoaXMucmVzb3VyY2UubWV0YS5sYXlvdXQuc2VjdGlvbnNcbiAgICApIHtcbiAgICAgIGNvbnN0IGV4dHJhY3RTZWN0aW9uRmllbGRzID0gKHMpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIHMuZmllbGRzKSB7XG4gICAgICAgICAgaWYgKGYubmFtZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzW2YubmFtZV0gPSBmO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZi5maWVsZHMgJiYgZi5maWVsZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBleHRyYWN0U2VjdGlvbkZpZWxkcyhmKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnJlc291cmNlLm5pY2VGaWVsZHMgPSB7fTtcbiAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LnNlY3Rpb25zKSB7XG4gICAgICAgIGV4dHJhY3RTZWN0aW9uRmllbGRzKHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzO1xuICB9XG5cbiAgZ2V0IGZpZWxkTmFtZXMoKSB7XG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLm5pY2VGaWVsZHMpO1xuICAgIGlmICh0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMucmVzb3VyY2UubWV0YS5sYXlvdXQuY2hpbGRyZW4pIHtcbiAgICAgICAgbmFtZXMucHVzaChjaGlsZC5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5hbWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1lbnVDbGlja291dCA9ICgpID0+IHtcbiAgICBkZWxldGUgdGhpcy5yZXNvdXJjZU1lbnVWaXNpYmxlO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbk1lbnVDbGlja291dCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzdWdnZXN0RmllbGRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgZmllbGROYW1lcyA9IHRoaXMuZmllbGROYW1lcztcbiAgICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICAgIGNvbnN0IG5lc3RNYXRjaCA9IGtleS5tYXRjaCgvKFxcUyspXFxbXFxkXFxdXFwuKFxcUyspLyk7XG4gICAgICAgIGlmIChuZXN0TWF0Y2ggJiYgZmllbGROYW1lcy5pbmRleE9mKG5lc3RNYXRjaFsxXSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtuZXN0TWF0Y2hbMV1dID0gW107XG4gICAgICAgICAgY29uc3QgbmVzdEtleXM6IGFueSA9IHt9O1xuICAgICAgICAgIG5lc3RLZXlzW25lc3RNYXRjaFsyXV0gPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLm1vZGVsW25lc3RNYXRjaFsxXV0ucHVzaChuZXN0S2V5cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGROYW1lcy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4ZWNUcmFuc2Zvcm1lcigpIHtcbiAgICBpZiAodGhpcy5tZXRhQ29udGV4dCAmJiB0aGlzLmZpZWxkc01hcCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAucGhvbmVOdW1iZXIsIHRoaXMubWV0YUNvbnRleHQucGhvbmVOdW1iZXIpO1xuICAgICAgICBpZiAodGhpcy5maWVsZHNNYXAuZmlyc3ROYW1lIHx8IHRoaXMuZmllbGRzTWFwLmxhc3ROYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZXMgPSAodGhpcy5tZXRhQ29udGV4dC5kaXNwbGF5TmFtZSB8fCAnJykuc3BsaXQoJyAnKTtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3RGaWVsZFByb3BlcnR5KHRoaXMuZmllbGRzTWFwLmZpcnN0TmFtZSwgbmFtZXNbMF0pO1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAubGFzdE5hbWUsIG5hbWVzWzFdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkc01hcC5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAuZGlzcGxheU5hbWUsIHRoaXMubWV0YUNvbnRleHQuZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFya0NvbnRhY3RhYmxlcygpIHtcbiAgICBpZiAodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzICYmIHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLm5pY2VGaWVsZHNbY107XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJyRpc0NvbnRhY3RhYmxlJywge1xuICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN1YmplY3RUZW1wbGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubW9kZWxbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0gJiYgdGhpcy5maWVsZHNNYXAuc3ViamVjdCAmJiB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0pIHtcbiAgICAgIGxldCBzdWJqZWN0VGVtcGxhdGU6IHN0cmluZztcbiAgICAgIGlmICh0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdCkge1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdC5pZCB8fCB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZV0pIHtcbiAgICAgICAgY29uc3QgcHJvZmlsZSA9IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdIHx8IHt9O1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSBwcm9maWxlLmRlZmF1bHRTdWJqZWN0ID9cbiAgICAgICAgICBwcm9maWxlLmRlZmF1bHRTdWJqZWN0WygodGhpcy5tZXRhQ29udGV4dC5jb250ZXh0IHx8ICdDQUxMJykudHlwZSB8fCAnJykudG9VcHBlckNhc2UoKV0gOiBwcm9maWxlLmFjdGl2aXR5RGVmYXVsdFN1YmplY3RUZW1wbGF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzdWJqZWN0VGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5tb2RlbFt0aGlzLmZpZWxkc01hcC5zdWJqZWN0XSA9IHRlbXBsYXRlQnVpbGRlcih0aGlzLm1ldGFDb250ZXh0LCBzdWJqZWN0VGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb250YWN0c1N1Z2dlc3Rpb25zKCkge1xuICAgIC8vIGxldCBoYXNEZWZhdWx0Q29udGFjdCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm1ldGFDb250ZXh0LmNvbnRhY3RhYmxlc1t0aGlzLmludGVncmF0aW9uQ29kZV0gJiYgdGhpcy5tZXRhLmxheW91dCAmJiB0aGlzLm1ldGEubGF5b3V0LnNlY3Rpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5tZXRhLmxheW91dC5zZWN0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgKHMuZmllbGRzIHx8IFtdKSkge1xuICAgICAgICAgIGlmIChmLnR5cGUgPT09ICdyZWZlcmVuY2UnKSB7XG4gICAgICAgICAgICBjb25zdCByZWZUeXBlcyA9IChmLnJlZmVyZW5jZS5sZW5ndGggPyBmLnJlZmVyZW5jZSA6IFtmLnJlZmVyZW5jZV0pLm1hcChyID0+IHIubmFtZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5tZXRhQ29udGV4dC5jb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdKSB7XG4gICAgICAgICAgICAgIGlmIChyZWZUeXBlcy5pbmRleE9mKGMucmVzb3VyY2VUeXBlIHx8IGMudHlwZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICBmLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGYuc3VnZ2VzdGlvbnMgPSBmLnN1Z2dlc3Rpb25zLmZpbHRlcihzZyA9PiAhc2cuYXV0byk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCB0TGFiZWwgPSBjLmRpc3BsYXlOYW1lIHx8IGMubmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoYy5waG9uZU51bWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgIHRMYWJlbCArPSAoJyDinIYnICsgYy5waG9uZU51bWJlcnMubWFwKHAgPT4gcC5waG9uZU51bWJlcikuam9pbignLCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZi5zdWdnZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGlkOiBjLmV4dGVybmFsSWQgfHwgYy5pZGVudGlmaWVyIHx8IGMuaWQsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogdExhYmVsLFxuICAgICAgICAgICAgICAgICAgdHlwZTogYy5yZXNvdXJjZVR5cGUgfHwgYy50eXBlLFxuICAgICAgICAgICAgICAgICAgYXV0bzogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcyB8fCBbXSkuaW5kZXhPZihmLm5hbWUpICE9PSAtMSkgeyAvLyBldmFsdWF0ZSB1c2FiaWxpdHk/XG4gICAgICAgICAgICAgIGYuYWx3YXlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiAoXG4gICAgICAgICAgICAvLyAgICFoYXNEZWZhdWx0Q29udGFjdCAmJiB0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdXG4gICAgICAgICAgICAvLyAgICYmIHJlZlR5cGVzLmluZGV4T2YodGhpcy5tZXRhQ29udGV4dC5kZWZhdWx0Q29udGFjdGFibGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXS50eXBlKSAhPT0gLTFcbiAgICAgICAgICAgIC8vICkge1xuICAgICAgICAgICAgLy8gICB0aGlzLnJlc291cmNlW2YubmFtZV0gPSB0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdO1xuICAgICAgICAgICAgLy8gICBoYXNEZWZhdWx0Q29udGFjdCA9IHRydWU7XG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKCFoYXNEZWZhdWx0Q29udGFjdCAmJiB0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMgJiYgZi5zdWdnZXN0aW9ucyAmJiBmLnN1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gICBpZiAodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzLmluZGV4T2YoZi5uYW1lKSAhPT0gLTEgJiYgIWYuZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gICAgIGYuZGVmYXVsdCA9IGYuc3VnZ2VzdGlvbnNbMF07XG4gICAgICAgICAgICAvLyAgICAgaGFzRGVmYXVsdENvbnRhY3QgPSB0cnVlO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNvbnRhY3RzU3VnZ2VzdGlvbnNEb25lID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGhlbWUoKSB7XG4gICAgY29uc3QgbWV0YVRoZW1lID0gdGhpcy50aGVtZSA9PT0gJ2RhcmsnID8gbWV0YURhcmsgOiBtZXRhTGlnaHQ7XG4gICAgY29uc29sZS5sb2coJ3Jlc291cmNlIGFwcGx5IHRoZW1lJywgdGhpcy50aGVtZSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWV0YVRoZW1lLnByb3BlcnRpZXMpKSB7XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBtZXRhVGhlbWUucHJvcGVydGllc1trZXldKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcmNlVWlVcGRhdGUoKSB7IC8vIGlPUyB3ZWJ2aWV3IGRvZXMgbm90IHVwZGF0ZSB0aGUgVUkgYWZ0ZXIgYXN5YyBjaGFuZ2VzLiBUZW1wIGZpeCA6KFxuICAgIC8vIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50cycpO1xuICAgIGUuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIGZhbHNlKTtcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChlKTtcbiAgfVxufVxuXG4vLy8vIFJFU09VUkNFIENBUkRcbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndmdpcC1tZXRhLXJlc291cmNlLWNhcmQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZUNhcmQvdmlldy5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZUNhcmQvc3R5bGUuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFSZXNvdXJjZUNhcmQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSByZXNvdXJjZTogYW55O1xuICBASW5wdXQoKSBtb2RlbDogYW55O1xuXG4gIGludGVncmF0aW9uQ29kZTogc3RyaW5nO1xuICByZWZEaWFsb2dGYWN0b3J5OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIG1ldGFSZXNvdXJjZTogTWV0YVJlc291cmNlU2VydmljZSxcbiAgICBwcml2YXRlIHJlZmVyZW5jZVNlcnZpY2U6IE1ldGFSZWZlcmVuY2VTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmludGVncmF0aW9uQ29kZSA9ICh0aGlzLnJlc291cmNlLmludGVncmF0aW9uIHx8IHRoaXMucmVzb3VyY2UuaW50ZWdyYXRpb25Db2RlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgb3BlbihyZWZlcmVuY2UsIG1vZGVsPykge1xuICAgIGlmICghdGhpcy5yZWZEaWFsb2dGYWN0b3J5KSB7XG4gICAgICB0aGlzLnJlZkRpYWxvZ0ZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShNZXRhUmVmRGlhbG9nKTtcbiAgICB9XG4gICAgdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLm9wZW5EaWFsb2coXG4gICAgICB0aGlzLnJlZkRpYWxvZ0ZhY3RvcnksIHRoaXMubWV0YVJlc291cmNlLCB0aGlzLmludGVncmF0aW9uQ29kZSwgcmVmZXJlbmNlLCBtb2RlbCxcbiAgICAgIG1vZGVsICYmIChyZWZlcmVuY2UuZWRpdGFibGUgPT09IGZhbHNlKSAvLyBpcyBwcmV2aWV3IG1vZGVcbiAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdkaWFsb2cgcmVzdWx0JywgcmVzdWx0KTtcbiAgICAgIC8vIGlmIChyZXN1bHQgJiYgcmVzdWx0LnJhdykge1xuICAgICAgLy8gICBpZiAoIXRoaXMucGFyZW50W3JlZmVyZW5jZS50eXBlXSkge1xuICAgICAgLy8gICAgIHRoaXMucGFyZW50W3JlZmVyZW5jZS50eXBlXSA9IFtdO1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIHRoaXMucGFyZW50W3JlZmVyZW5jZS50eXBlXS5wdXNoKHJlc3VsdC5yYXcpO1xuICAgICAgLy8gfVxuICAgIH0pO1xuICB9XG5cbn1cblxuXG5jb25zdCBGTUFQID0gKGZUeXBlKSA9PiB7XG4gIHN3aXRjaCAoZlR5cGUpIHtcbiAgICBjYXNlICcnOlxuICAgIGNhc2UgbnVsbDpcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIC8vIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAvLyBjYXNlICd0aW1lJzpcbiAgICAvLyBjYXNlICdkYXRlJzpcbiAgICBjYXNlICdzdHJpbmcnOiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZmFsbHRocm91Z2hcbiAgICAgIHJldHVybiBGaWVsZElucHV0O1xuICAgIH1cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgY2FzZSAndGV4dCc6IHtcbiAgICAgIHJldHVybiBGaWVsZFRleHQ7XG4gICAgfVxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAnb3B0aW9ucyc6IHtcbiAgICAgIHJldHVybiBGaWVsZFNlbGVjdDtcbiAgICB9XG4gICAgY2FzZSAncmVmZXJlbmNlJzoge1xuICAgICAgcmV0dXJuIEZpZWxkUmVmZXJlbmNlO1xuICAgIH1cbiAgICBjYXNlICdjb21wb3NpdGUnOiB7XG4gICAgICByZXR1cm4gRmllbGRDb21wb3NpdGU7XG4gICAgfVxuICAgIGNhc2UgJ2Jvb2xlYW4nOiB7XG4gICAgICByZXR1cm4gRmllbGRCb29sZWFuO1xuICAgIH1cbiAgICBjYXNlICdyYWRpbyc6IHtcbiAgICAgIHJldHVybiBGaWVsZFJhZGlvO1xuICAgIH1cbiAgICBjYXNlICdsaXN0Jzoge1xuICAgICAgcmV0dXJuIEZpZWxkTGlzdDtcbiAgICB9XG4gICAgY2FzZSAncmljaHRleHQnOiB7XG4gICAgICByZXR1cm4gRmllbGRSaWNodGV4dDtcbiAgICB9XG4gICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgIGNhc2UgJ3RpbWUnOlxuICAgIGNhc2UgJ2RhdGUnOiB7XG4gICAgICByZXR1cm4gRmllbGREYXRldGltZTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIEZpZWxkVW5rbm93bjtcbiAgICB9XG4gIH1cbn07XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1ttZXRhRmllbGRDb250ZW50XSdcbn0pXG5leHBvcnQgY2xhc3MgTWV0YUZpZWxkQ29udGVudERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7IH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd2Z2lwLW1ldGEtZmllbGQnLFxuICAgIHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlIG1ldGFGaWVsZENvbnRlbnQ+TG9hZGluZzwvbmctdGVtcGxhdGU+JyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWVsZC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWV0YUZpZWxkIGV4dGVuZHMgRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIG1ldGE6IGFueTtcbiAgQElucHV0KCkgcGFyZW50OiBhbnk7XG4gIEBJbnB1dCgpIGludGVncmF0aW9uQ29kZTogYW55O1xuICBASW5wdXQoKSByZXNvdXJjZVR5cGU6IGFueTtcbiAgQElucHV0KCkgaW5kZXg6IG51bWJlcjtcbiAgQElucHV0KCkgcHJldmlldzogYm9vbGVhbjtcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIEBPdXRwdXQoKSBvbkxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoTWV0YUZpZWxkQ29udGVudERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZmllbGRDb250ZW50OiBNZXRhRmllbGRDb250ZW50RGlyZWN0aXZlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgcHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBGTUFQKHRoaXMubWV0YS50eXBlKTtcbiAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KTtcblxuICAgIHRoaXMuZmllbGRDb250ZW50LnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmZpZWxkQ29udGVudC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgICBjb25zdCBmaWVsZDogRmllbGRBYnN0cmFjdCA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICBpZiAoY29tcG9uZW50LnNldHVwKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnc2V0dXAnLCB7YTogdGhpcy5lbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZX0pXG4gICAgICBjb21wb25lbnQuc2V0dXAoZmllbGQsIHRoaXMucGFyZW50LCB0aGlzLm1ldGEpO1xuICAgIH1cbiAgICBmaWVsZC5tZXRhID0gdGhpcy5tZXRhO1xuICAgIGZpZWxkLnBhcmVudCA9IHRoaXMucGFyZW50O1xuICAgIGZpZWxkLmludGVncmF0aW9uQ29kZSA9ICh0aGlzLmludGVncmF0aW9uQ29kZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICBmaWVsZC5yZXNvdXJjZVR5cGUgPSAodGhpcy5yZXNvdXJjZVR5cGUgfHwgJycpO1xuICAgIGZpZWxkLmluZGV4ID0gdGhpcy5pbmRleDtcbiAgICBmaWVsZC5lbGVtZW50UmVmID0gdGhpcy5lbDtcbiAgICBmaWVsZC5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2U7XG4gICAgZmllbGQub25MZWF2ZSA9IHRoaXMub25MZWF2ZTtcbiAgICBmaWVsZC5wcmV2aWV3ID0gdGhpcy5wcmV2aWV3O1xuICAgIGZpZWxkLnRoZW1lID0gdGhpcy50aGVtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmllbGQubWV0YSwgJ3Vuc2V0Jywge1xuICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPSdWbHQtbW9kYWwgVmx0LW1vZGFsLS1sYXJnZSc+XG4gIDxkaXYgY2xhc3M9XCJWbHQtbW9kYWxfX3BhbmVsXCI+XG4gICAgPGRpdiBjbGFzcz1cIlZsdC10YWJzXCI+XG4gICAgICA8ZGl2IGNsYXNzPSdWbHQtdGFic19faGVhZGVyLS1iYWNrZ3JvdW5kJz5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC10YWJzX19oZWFkZXIgVmx0LXRhYnNfX2hlYWRlci0tc2hhZG93XCI+XG4gICAgICAgICAgPHN2ZyBjbGFzcz1cIlZsdC1pY29uXCIgW25nU3R5bGVdPVwie2ZpbGw6IGludGVncmF0aW9uSWNvbiA9PT0gJ0JyYW5kLWljb24tdm9uYWdlJyA/ICd2YXIoLS12Z2lwLW1ldGEtaW5wdXQtY29sb3IpJyA6ICcnfVwiPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIiAvPjwvc3ZnPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPSdsZXQgciBvZiByZXNvdXJjZXMgfCBrZXl2YWx1ZToga2VlcE9yZGVyJyAoY2xpY2spPSdzZWxlY3RSZXNvdXJjZShyLmtleSknIGNsYXNzPVwiVmx0LXRhYnNfX2xpbmtcIiBbbmdDbGFzc109XCJ7ICdWbHQtdGFic19fbGlua19hY3RpdmUnOiBjdXJyZW50UmVzb3VyY2UgPT09IHIua2V5fVwiPlxuICAgICAgICAgICAge3tyLmtleX19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1tb2RhbF9fZGlzbWlzc1wiIChjbGljayk9XCJkaXNtaXNzKClcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJWbHQtaWNvblwiPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jcm9zc1wiIC8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiVmx0LXRhYnNfX2NvbnRlbnRcIiBzdHlsZT0nbWluLWhlaWdodDogOTBweDsnPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj0nbGV0IHIgb2YgcmVzb3VyY2VzIHwga2V5dmFsdWU6IGtlZXBPcmRlcic+XG4gICAgICAgICAgPGRpdiAqbmdJZj0nY3VycmVudFJlc291cmNlID09PSByLmtleScgY2xhc3M9XCJWbHQtdGFic19fcGFuZWwgVmx0LXRhYnNfX3BhbmVsX2FjdGl2ZVwiPlxuICAgICAgICAgICAgPHZnaXAtbWV0YS1yZXNvdXJjZSBbcmVzb3VyY2VdPSdyLnZhbHVlJyBbbW9kZWxdPSdtb2RlbHNbci5rZXldJyBbbWV0YVJlc291cmNlU2VydmljZURlbGVnYXRlZF09J21ldGFSZXNvdXJjZScgKGRvbmUpPSdvblJlc291cmNlRG9uZSgkZXZlbnQpJyB0aGVtZT0naW5oZXJpdCcgW2F0dHIuZGF0YS10aGVtZV09J3RoZW1lJz48L3ZnaXAtbWV0YS1yZXNvdXJjZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiIsIjxkaXYgW25nQ2xhc3NdPVwieyAnVmx0LWdyaWQgVmx0LWdyaWQtLW5hcnJvdyc6IGlzUm93IH1cIiA+XG4gIDxkaXYgc3R5bGU9J21hcmdpbjogMDsnIFtuZ0NsYXNzXT1cInsgJ1ZsdC1jb2wnOiBpc1JvdywgJ1ZsdC1jb2wtLTFvZjMnOiBpc1JvdyAmJiBmaWVsZHMubGVuZ3RoID4gMyB9XCIgKm5nRm9yPSdsZXQgZmllbGQgb2YgZmllbGRzJz5cbiAgICA8dmdpcC1tZXRhLWZpZWxkICpuZ0lmPSchbWV0YS4kaW52aXNpYmxlJyBjbGFzcz0nc2hvd24nIFtpbmRleF09J2luZGV4JyBbbWV0YV09J2ZpZWxkJyBbcGFyZW50XT0ndmFsdWUnIFtpbnRlZ3JhdGlvbkNvZGVdPSdpbnRlZ3JhdGlvbkNvZGUnIFtyZXNvdXJjZVR5cGVdPSdyZXNvdXJjZVR5cGUnIFtwcmV2aWV3XT0ncHJldmlldycgdGhlbWU9J2luaGVyaXQnPjwvdmdpcC1tZXRhLWZpZWxkPlxuICA8L2Rpdj5cbjwvZGl2PlxuIiwiPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXByZXZpZXcnICpuZ0lmPSdwcmV2aWV3ICYmIG1vZGVsJz5cbiAgPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLWxhYmVsJz57e21ldGEubGFiZWwgfHwgbWV0YS5uYW1lfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXZhbHVlIF9fZ3UnPlxuICAgIHt7bW9kZWwubGFiZWwgfHwgbW9kZWwuaWQgfHwgbW9kZWx9fVxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj0nIXByZXZpZXcnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRcIiBbbmdDbGFzc109XCJ7ICdWbHQtZm9ybV9fZWxlbWVudC0tYmlnJzogIW1ldGEuc21hbGwgLCdoYXMtdmFsdWUnOiBmLnZhbHVlLCBhY3RpdmU6IGtleUxpc3RlbmVyQWN0aXZlLCAnVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yJzogZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKGZ0IHwgbWV0YU1vZGVsICkudG91Y2hlZCksICduby14JzogbWV0YS5ub1ggfVwiPlxuXHQ8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZSBWbHQtZHJvcGRvd24gVmx0LWlucHV0XCIgc3R5bGU9J2Rpc3BsYXk6IGJsb2NrOycgW25nQ2xhc3NdPVwieyAnaGFzLWFwcGVuZC1idXR0b24nOiBpc0NyZWF0YWJsZSAmJiAhZGlzYWJsZWQgfVwiPlxuXHRcdDxkaXYgY2xhc3M9XCJWbHQtc2VsZWN0XCI+XG5cdFx0XHQ8bGFiZWwgY2xhc3M9J3dyYXBwZXInPlxuXHRcdFx0XHQ8bGFiZWwgY2xhc3M9J1ZsdC10cnVuY2F0ZSc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PHNwYW4gKm5nSWY9J3ZhbGlkYXRpb25zLnJlcXVpcmVkICYmIG9wdGlvbnMubGVuZ3RoJyBjbGFzcz0nVmx0LXJlZCc+Kjwvc3Bhbj48L2xhYmVsPlxuXHRcdFx0XHQ8aW5wdXQgY2xhc3M9J21haW4nIFtyZXF1aXJlZF09J3ZhbGlkYXRpb25zLnJlcXVpcmVkICYmICEhb3B0aW9ucy5sZW5ndGgnIHJlYWRvbmx5IFtuZ01vZGVsXT0nc2hvd1RleHQnICNmdD0nbmdNb2RlbCcgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIm1ldGEucGxhY2Vob2xkZXIgfHwgJyAnXCIgKGNsaWNrKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGZvY3VzKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGJsdXIpPSdvbkJsdXIoJGV2ZW50KScgW25nQ2xhc3NdPVwieyAnc3RhbmRhbG9uZSc6IG1ldGEuc3RhbmRhbG9uZSB9XCIgW2Rpc2FibGVkXT0nZGlzYWJsZWQgfHwgIW9wdGlvbnMubGVuZ3RoJyBbYXR0ci5hcmlhLWxhYmVsXT0nbWV0YS5sYWJlbCcvPlxuXHRcdFx0PC9sYWJlbD5cblx0XHRcdDxzZWxlY3QgY2xhc3M9J21vZGVsJyBbcmVxdWlyZWRdPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCAmJiAhIW9wdGlvbnMubGVuZ3RoJyBzdHlsZT0nZGlzcGxheTogbm9uZTsnIFsobmdNb2RlbCldPSdtb2RlbCcgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiBtZXRhLnN0YW5kYWxvbmV9XCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgI2Y9J25nTW9kZWwnIFtuYW1lXT0nbmFtZSc+PC9zZWxlY3Q+XG5cdFx0XHQ8ZGl2ICpuZ0lmPSdzZWFyY2hpbmcnIGNsYXNzPSdzZWFyY2gtcHJvZ3Jlc3MnPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhciBWbHQtYmctcHVycGxlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPSdWbHQtY29tcG9zaXRlX19hcHBlbmQgcmlnaHQtYWN0aW9ucyc+XG4gICAgICAgIDxkaXYgKm5nSWY9J21vZGVsICYmICFtZXRhLm5vWCAmJiAhZGlzYWJsZWQnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uXCIgKGNsaWNrKT0nY2xlYXIoJGV2ZW50KSc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWNyb3NzXCIvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRcdDxkaXYgY2xhc3M9J1ZsdC1kcm9wZG93bl9fcGFuZWwnPlxuXHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnQgVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudC0tc2Nyb2xsLWFyZWFcIj5cblx0XHRcdFx0PCEtLSA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX190aXRsZVwiIHN0eWxlPSdwYWRkaW5nLWxlZnQ6IDE1cHg7Jz5cblx0XHRcdFx0XHRTZWxlY3QgKHt7b3B0aW9ucy5sZW5ndGh9fSlcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19jbG9zZSBWbHQtd2hpdGVcIiAoY2xpY2spPSdkaXNtaXNzRHJvcGRvd24oJGV2ZW50KSc+XG5cdFx0XHRcdFx0XHQ8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGwnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jcm9zc1wiLz48L3N2Zz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+IC0tPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiPjwvZGl2PlxuXHRcdFx0XHQ8ZGl2ICpuZ0lmPSdkcm9wZG93bicgY2xhc3M9J1ZsdC1kcm9wZG93bl9fc2Nyb2xsJz5cblx0XHRcdFx0XHQ8ZGl2IFtuZ0NsYXNzXT1cInsgJ1ZsdC1kcm9wZG93bl9fbGluay0tc2VsZWN0ZWQnOiBhY3RpdmVTdWdnZXN0aW9uSW5kZXggPT09IGkgfVwiIChjbGljayk9J29uT3B0aW9uU2VsZWN0KCRldmVudCwgb3B0aW9uKScgKm5nRm9yPSdsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IGxldCBpID0gaW5kZXgnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19saW5rXCI+XG5cdFx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9XCJWbHQtY2hlY2tib3hcIiBzdHlsZT0nd2lkdGg6IDEwMCU7Jz5cblx0XHRcdFx0XHRcdFx0PGxhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiVmx0LWNoZWNrYm94X19idXR0b25cIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09J21vZGVsICYmIG1vZGVsLmluZGV4T2Yob3B0aW9uKSAhPT0gLTEnLz5cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiVmx0LWNoZWNrYm94X19pY29uXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHR7e29wdGlvbi5sYWJlbCB8fCAob3B0aW9uLmlkID09PSAnJyA/ICctLWVtcHR5LS0nIDogb3B0aW9uKX19XG5cdFx0XHRcdFx0XHRcdDwvbGFiZWw+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDxkaXYgKm5nSWY9JyFtdWx0aXBsZScgc3R5bGU9J3BhZGRpbmc6IDEycHggMjBweDsnPnt7b3B0aW9uLmxhYmVsIHx8IChvcHRpb24uaWQgPT09ICcnID8gJy0tZW1wdHktLScgOiBvcHRpb24pfX08L2Rpdj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgKm5nSWY9JyFtdWx0aXBsZScgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCI+PC9kaXY+XG5cdFx0XHRcdDxkaXYgKm5nSWY9J211bHRpcGxlJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2sgVmx0LWRyb3Bkb3duX19ibG9jay0tbm93cmFwXCIgc3R5bGU9J3BhZGRpbmc6IDhweCAxNnB4IDE2cHg7Jz5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9J2NsZWFyKCRldmVudCknIHR5cGU9J2J1dHRvbicgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNlY29uZGFyeSBWbHQtYnRuLS1hcHAgVmx0LWJ0bi0tc21hbGwgVmx0LWJ0bi0tb3V0bGluZVwiIHN0eWxlPSdtYXJnaW4tcmlnaHQ6IDhweDsnPkNsZWFyIGFsbDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT0nZGlzbWlzc0Ryb3Bkb3duKCRldmVudCknIHR5cGU9J2J1dHRvbicgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNlY29uZGFyeSBWbHQtYnRuLS1hcHAgVmx0LWJ0bi0tc21hbGxcIj5Eb25lPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0PCEtLSA8c3BhbiAqbmdJZj0naXNDcmVhdGFibGUnPlxuICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5SZXNvdXJjZSgkZXZlbnQpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc2Vjb25kYXJ5IFZsdC1idG4tLWljb24gVmx0LWJ0bi0tbGFyZ2VcIiBzdHlsZT0nbWFyZ2luLWxlZnQ6IDEycHg7Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuXHRcdDwvc3Bhbj4gLS0+XG5cdFx0PGRpdiAqbmdJZj0naXNDcmVhdGFibGUgJiYgIWRpc2FibGVkJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZFwiPlxuICAgICAgPGJ1dHRvbiAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJyB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5SZXNvdXJjZSgkZXZlbnQpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0td2hpdGUgVmx0LWJ0bi0taWNvbiBhZGQtYnV0dG9uXCIgYXJpYS1sYWJlbD0nQWRkIG5ldyc+XG4gICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXBsdXNcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblx0PC9kaXY+XG5cdDxzbWFsbCAqbmdJZj0nZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKChmdCB8IG1ldGFNb2RlbCkudG91Y2hlZCAmJiBrZXlMaXN0ZW5lckFjdGl2ZSkpJyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19lcnJvclwiPlxuXHRcdDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMucmVxdWlyZWRcIj5SZXF1aXJlZC4mbmJzcDs8L3NwYW4+XG5cdFx0PHNwYW4gKm5nSWY9XCJmLmVycm9ycy5jdXN0b21cIj57e2YuZXJyb3JzLmN1c3RvbX19Jm5ic3A7PC9zcGFuPlxuXHQ8L3NtYWxsPlxuXHQ8c21hbGwgKm5nSWY9J21ldGEuaGludCcgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudF9faGludFwiPnt7bWV0YS5oaW50fX08L3NtYWxsPlxuPC9kaXY+IiwiPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXByZXZpZXcnICpuZ0lmPSdwcmV2aWV3ICYmIG1vZGVsICYmICghbXVsdGlwbGUgfHwgKG11bHRpcGxlICYmIG1vZGVsLmxlbmd0aCkpJz5cbiAgPGRpdiBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLWxhYmVsJz57e21ldGEubGFiZWwgfHwgbWV0YS5uYW1lfX08L2Rpdj5cbiAgPGRpdiAqbmdJZj0nIW11bHRpcGxlJyBjbGFzcz0ndmdpcC1tZXRhLWZpZWxkLXZhbHVlIF9fZ3UnPlxuICAgIDxzdmcgY2xhc3M9XCJWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGxlclwiIHN0eWxlPSdtYXJnaW4tdG9wOiAtM3B4Oyc+PHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1icmFuZC1pY29ucy5zdmcje3tpbnRlZ3JhdGlvbkljb259fVwiLz48L3N2Zz5cbiAgICB7e21vZGVsLmxhYmVsIHx8IG1vZGVsLmlkfX0gPHNwYW4gY2xhc3M9J1ZsdC1ncmV5Jz4oe3ttb2RlbC50eXBlfX0pPC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtdmFsdWUgX19ndSc+XG4gICAgPHNwYW4gKm5nRm9yPSdsZXQgbSBvZiAobW9kZWwgfHwgW10pJyBjbGFzcz0nVmx0LWJhZGdlIFZsdC1iYWRnZS0tYXBwJz5cbiAgICAgIHt7bS5sYWJlbCB8fCBtLmlkIHx8IG19fSA8c3BhbiBjbGFzcz0nVmx0LWdyZXktZGFyaycgKm5nSWY9J2lzUG9seW1vcnBoaWMnPih7e20udHlwZX19KTwvc3Bhbj5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPSchcHJldmlldycgY2xhc3M9XCJtZXRhLWZpZWxkLXJlZmVyZW5jZSBWbHQtZm9ybV9fZWxlbWVudCBWbHQtZm9ybV9fZWxlbWVudC0tYmlnXCIgW25nQ2xhc3NdPVwieyAnVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yJzogKHNlYXJjaEVycm9yICYmIGtleUxpc3RlbmVyQWN0aXZlKSB8fCAoZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKGZ0IHwgbWV0YU1vZGVsICkudG91Y2hlZCkpLCAnbXVsdGlwbGUnOiBtdWx0aXBsZSwgJ2hhcy12YWx1ZSc6IG1vZGVsLCBhY3RpdmU6IGtleUxpc3RlbmVyQWN0aXZlIH1cIj5cbiAgPGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPSdpdGVtcy1jb250YWluZXInIFtuZ0NsYXNzXT0neyBjcmVhdGFibGU6IGlzQ3JlYXRhYmxlIH0nPlxuICAgIDxkaXYgKm5nSWY9J21vZGVsJyBjbGFzcz0nYmFkZ2VzLWNvbnRhaW5lciBrZWVwLWZvY3VzJyAoY2xpY2spPSdmb2N1cygpJyBzdHlsZT0nd2lkdGg6IDEwMCU7Jz5cbiAgICAgIDxkaXYgKm5nRm9yPSdsZXQgaXRlbSBvZiBtb2RlbCcgY2xhc3M9XCJWbHQtYmFkZ2UgVmx0LWJhZGdlLS1hcHAgVmx0LWJhZGdlLS1sYXJnZSBrZWVwLWZvY3VzXCIgW25nQ2xhc3NdPVwieyBncmlkOiAoaXRlbS5sYWJlbCB8fCBpdGVtLmlkIHx8ICcnKS5sZW5ndGggPiA1Nn1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9J1ZsdC10cnVuY2F0ZSc+e3tpdGVtLmxhYmVsIHx8IGl0ZW0uaWQgfHwgaXRlbSB9fSA8c3BhbiAqbmdJZj0naXNQb2x5bW9ycGhpYycgY2xhc3M9J1ZsdC1ncmV5LWRhcmsnIHN0eWxlPSdmb250LXdlaWdodDogbm9ybWFsOyc+KHt7aXRlbS50eXBlfX0pPC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIlZsdC1iYWRnZV9fZGlzbWlzcyBrZWVwLWZvY3VzXCIgKGNsaWNrKT0ncmVtb3ZlKCRldmVudCwgaXRlbSknIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMnB4OyB0b3A6IDhweDsnIGFyaWEtbGFiZWw9J1JlbW92ZSc+PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlXCI+XG4gICAgPGRpdiBjbGFzcz0nZHJvcGRvd24td3JhcHBlciBWbHQtZHJvcGRvd24nIHN0eWxlPSd3aWR0aDogMTAwJTsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDQ4cHg7Jz5cbiAgICAgIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9J3NlYXJjaEVycm9yJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNhbGxvdXQgVmx0LWNhbGxvdXQtLWNyaXRpY2FsIGtlZXAtZm9jdXNcIj5cbiAgICAgICAgICAgIDxpPjwvaT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY2FsbG91dF9fY29udGVudFwiPnt7c2VhcmNoRXJyb3J9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0nIXNlYXJjaEVycm9yICYmIChzdWdnZXN0aW9ucy5sZW5ndGggfHwgc2VhcmNoUmVzdWx0cyknIFtuZ0NsYXNzXT1cInsgc3VnZ2VzdGlvbnM6ICFzZWFyY2hSZXN1bHRzfVwiIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudCBWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50LS1zY3JvbGwtYXJlYVwiIHN0eWxlPSdwYWRkaW5nOiAwOyc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSchc2VhcmNoUmVzdWx0cycgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3Njcm9sbFwiPlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdWbHQtZHJvcGRvd25fX2xpbmstLXNlbGVjdGVkJzogYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID09PSBpLCBzbWFydDogc3VnZ2VzdGlvbi5zbWFydCB9XCIgKGNsaWNrKT0nb25TdWdnZXN0aW9uU2VsZWN0KCRldmVudCwgc3VnZ2VzdGlvbiknICpuZ0Zvcj0nbGV0IHN1Z2dlc3Rpb24gb2Ygc3VnZ2VzdGlvbnM7IGxldCBpID0gaW5kZXgnICBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGluayBoYXMtdHlwZVwiPlxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiAgVmx0LWljb24tLXNtYWxsJz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIvPjwvc3ZnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdfX2d1JyBbdGl0bGVdPSdzdWdnZXN0aW9uLmxhYmVsJz57eyBzdWdnZXN0aW9uLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0nVmx0LWdyZXktZGFyaycgc3R5bGU9J3RleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyc+e3tzdWdnZXN0aW9uLnR5cGV9fTwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSdzZWFyY2hSZXN1bHRzJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fc2Nyb2xsXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSchc2VhcmNoUmVzdWx0cy5sZW5ndGgnIGNsYXNzPSdWbHQtZHJvcGRvd25fX2Jsb2NrJz4gTm8gcmVjb3JkcyBtYXRjaGluZyAnPGIgc3R5bGU9J3BvaW50ZXItZXZlbnRzOiBub25lOyc+e3tzZWFyY2hUZXh0fX08L2I+JyB3ZXJlIGZvdW5kLjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdWbHQtZHJvcGRvd25fX2xpbmstLXNlbGVjdGVkJzogYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID09PSBpIH1cIiAoY2xpY2spPSdvblN1Z2dlc3Rpb25TZWxlY3QoJGV2ZW50LCBzdWdnZXN0aW9uKScgKm5nRm9yPSdsZXQgc3VnZ2VzdGlvbiBvZiBzZWFyY2hSZXN1bHRzOyBsZXQgaSA9IGluZGV4JyAgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2xpbmsgaGFzLXR5cGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsJz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIvPjwvc3ZnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdfX2d1JyBbdGl0bGVdPSdzdWdnZXN0aW9uLmxhYmVsJz57eyBzdWdnZXN0aW9uLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0nVmx0LWdyZXktZGFyaycgc3R5bGU9J3RleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyc+e3tzdWdnZXN0aW9uLnR5cGV9fTwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9J3NlYXJjaFJlc3VsdHMnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiIHN0eWxlPSd0ZXh0LWFsaWduOiByaWdodDsgcGFkZGluZy10b3A6IDA7Jz5cbiAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAge3sgc2VhcmNoUmVzdWx0cyA/IHNlYXJjaFJlc3VsdHMubGVuZ3RoKycgcmVzdWx0cycgOiAnU3VnZ2VzdGlvbnMnIH19IDxzcGFuIHN0eWxlPSdmb250LXN0eWxlOiBpdGFsaWM7IGZvbnQtd2VpZ2h0OiBub3JtYWw7JyAqbmdJZj0nc2VhcmNoUmVzdWx0cyc+fnt7IG1vZGVsID8gJ2xhc3Qgc2VhcmNoJyA6IHNlYXJjaFRleHR9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3ByZXBlbmRcIiAqbmdJZj0naXNQb2x5bW9ycGhpYyAmJiBzaG93VHlwZXMgJiYgKG11bHRpcGxlIHx8ICFtb2RlbCB8fCAoZHJvcGRvd25WaXNpYmxlICYmICgoc3VnZ2VzdGlvbnMgfHwgc2VhcmNoUmVzdWx0cyB8fCBbXSkubGVuZ3RoIHx8IHNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUpKSknPlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1zY29wZVwiIFtuZ0NsYXNzXT1cInsgJ2hhcy12YWx1ZSc6IHNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgfVwiPlxuICAgICAgICA8dmdpcC1tZXRhLWZpZWxkIGNsYXNzPSdzaG93bicgW21ldGFdPSdzZWFyY2hSZXNvdXJjZVR5cGVNZXRhJyBbcGFyZW50XT0nc2VhcmNoUmVzb3VyY2VUeXBlJyAob25DaGFuZ2UpPSdvblNlYXJjaFJlc291cmNlVHlwZUNoYW5nZWQoJGV2ZW50KScgKG9uTGVhdmUpPSdvbkJsdXIoJGV2ZW50KScgW2ludGVncmF0aW9uQ29kZV09J2ludGVncmF0aW9uQ29kZScgdGhlbWU9J2luaGVyaXQnPjwvdmdpcC1tZXRhLWZpZWxkPlxuICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtZ3JleSBWbHQtaWNvbi0tc21hbGxlciB2aXNpYmxlLW1vYmlsZSBtb2JpbGUtaWNvbicgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxNXB4OyBsZWZ0OiAxNHB4OyBwb2ludGVyLWV2ZW50czogbm9uZTsnPlxuICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1tZW51XCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPGxhYmVsIGNsYXNzPSdtb2JpbGUtbGFiZWwgaGlkZGVuLW1vYmlsZSBoaWRkZW4tZGVza3RvcCc+U2VhcmNoPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9JyEoaXNQb2x5bW9ycGhpYyAmJiBzaG93VHlwZXMgJiYgKG11bHRpcGxlIHx8ICFtb2RlbCB8fCBkcm9wZG93blZpc2libGUpKSc+PCEtLSByZXF1aXJlZCBieSBjc3MgLS0+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3dyYXBwZXIgVmx0LWlucHV0XCIgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47JyBbbmdDbGFzc109XCJ7ICdoYXMtYXBwZW5kLWJ1dHRvbic6IGhhc0FwcGVuZEJ1dHRvbiAmJiAhZGlzYWJsZWQgfVwiPlxuICAgICAgPGxhYmVsIGNsYXNzPSd3cmFwcGVyJz5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3ByZXBlbmQgVmx0LWNvbXBvc2l0ZV9fcHJlcGVuZC0taWNvblwiIHN0eWxlPSd0b3A6IDA7IHBhZGRpbmctdG9wOiAxNXB4Oyc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9J2lzU2VhcmNoYWJsZSAmJiAoIW1vZGVsIHx8IG11bHRpcGxlKScgY2xhc3M9J1ZsdC1ncmV5Jz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi17eyBtdWx0aXBsZSA/ICdzdGFjaycgOiAnc2VhcmNoJ319XCIvPjwvc3ZnPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj0nIWlzU2VhcmNoYWJsZSB8fCAobW9kZWwgJiYgIW11bHRpcGxlKScgW25nU3R5bGVdPVwie2ZpbGw6IGludGVncmF0aW9uSWNvbiA9PT0gJ0JyYW5kLWljb24tdm9uYWdlJyA/ICd2YXIoLS12Z2lwLW1ldGEtaW5wdXQtY29sb3IpJyA6ICcnfVwiPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0nc3VnZ2VzdGlvbnMubGVuZ3RoJyBjbGFzcz1cIlZsdC1iYWRnZSBWbHQtYmFkZ2UtLXNtYWxsIFZsdC1iYWRnZS0tcHVycGxlXCIgc3R5bGU9J3BhZGRpbmc6IDBweCA0cHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAyNnB4OyBsZWZ0OiA0cHg7IHBvaW50ZXItZXZlbnRzOiBub25lOyBtaW4td2lkdGg6IDE0cHg7Jz57e3N1Z2dlc3Rpb25zLmxlbmd0aH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW5wdXQgY2xhc3M9J21vZGVsJyB0eXBlPSdoaWRkZW4nIFtyZXF1aXJlZF09J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBbKG5nTW9kZWwpXT0nbW9kZWwnICNmPSduZ01vZGVsJyBbbmFtZV09J25hbWUnIC8+XG4gICAgICAgIDxpbnB1dCBjbGFzcz0nbWFpbicgW3JlYWRvbmx5XT0nIWlzU2VhcmNoYWJsZSB8fCAobW9kZWwgJiYgIW11bHRpcGxlKScgW25nTW9kZWxdPSdzZWFyY2hUZXh0JyAjZnQ9J25nTW9kZWwnIChuZ01vZGVsQ2hhbmdlKT0nb25TZWFyY2hUZXh0Q2hhbmdlZCgkZXZlbnQpJyBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cInt7IHBsYWNlSG9sZGVyTGFiZWwgfHwgJyAnIH19XCIgW25nQ2xhc3NdPSd7IGV4dDogZXh0ZXJuYWxMaW5rIH0nIChjbGljayk9J29uQWN0aXZhdGVkKCRldmVudCknIChmb2N1cyk9J29uQWN0aXZhdGVkKCRldmVudCknIChibHVyKT0nb25CbHVyKCRldmVudCknIFtkaXNhYmxlZF09J2Rpc2FibGVkJyBbdGl0bGVdPVwibW9kZWwgPyBtb2RlbC5sYWJlbCA6ICcnXCIvPlxuICAgICAgICA8bGFiZWwgY2xhc3M9J1ZsdC10cnVuY2F0ZSBoaWRkZW4tbW9iaWxlJyBzdHlsZT0ncGFkZGluZy1sZWZ0OiAyNXB4OyBwYWRkaW5nLXJpZ2h0OiA0MnB4Oyc+e3sgKG11bHRpcGxlICYmIGlzUG9seW1vcnBoaWMpID8gJytBZGQgJyA6ICgobW9kZWwgfHwgIWlzUG9seW1vcnBoaWMpID8gbWV0YS5sYWJlbCA6ICggbWV0YS5zZWFyY2hMYWJlbCB8fCAnU2VhcmNoJykpIH19PHNwYW4gKm5nSWY9J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBjbGFzcz0nVmx0LXJlZCc+Kjwvc3Bhbj4mbmJzcDs8c3BhbiBzdHlsZT0nY29sb3I6IHZhcigtLXZnaXAtbWV0YS1pbnB1dC1jb2xvcik7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOycgKm5nSWY9J21vZGVsJz4oe3ttb2RlbC50eXBlIHx8IG1vZGVsLnJlc291cmNlVHlwZSB8fCBtb2RlbC5sZW5ndGh9fSk8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIGNsYXNzPSdWbHQtdHJ1bmNhdGUgaGlkZGVuLWRlc2t0b3AnIHN0eWxlPSdwYWRkaW5nLWxlZnQ6IDI1cHg7IHBhZGRpbmctcmlnaHQ6IDQycHg7Jz57e21ldGEubGFiZWwgfHwgbWV0YS5uYW1lfX08c3BhbiAqbmdJZj0ndmFsaWRhdGlvbnMucmVxdWlyZWQnIGNsYXNzPSdWbHQtcmVkJz4qPC9zcGFuPiZuYnNwOzxzcGFuIHN0eWxlPSdjb2xvcjogdmFyKC0tdmdpcC1tZXRhLWlucHV0LWNvbG9yKTsgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7JyAqbmdJZj0nbW9kZWwnPih7e21vZGVsLnR5cGUgfHwgbW9kZWwucmVzb3VyY2VUeXBlIHx8IG1vZGVsLmxlbmd0aH19KTwvc3Bhbj48L2xhYmVsPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxkaXYgKm5nSWY9J3NlYXJjaGluZycgY2xhc3M9J3NlYXJjaC1wcm9ncmVzcyc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFyIFZsdC1iZy1wdXJwbGVcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9J1ZsdC1jb21wb3NpdGVfX2FwcGVuZCByaWdodC1hY3Rpb25zJz5cbiAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPSdwcmV2TW9kZWwgJiYgIW1vZGVsJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIChjbGljayk9J3JldmVydCgpJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcmVwbHlcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj0nbW9kZWwgJiYgIW11bHRpcGxlJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIChjbGljayk9J3JlbW92ZVNlbGVjdGlvbigpJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tY3Jvc3NcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YSBbaHJlZl09J2V4dGVybmFsTGluayB8fCBtb2RlbC5leHRlcm5hbExpbmsnIHRhcmdldD0nX2JsYW5rJyByZWw9J25vb3BlbmVyJyAqbmdJZj0nZXh0ZXJuYWxMaW5rICYmIChtb2RlbCAmJiAhbXVsdGlwbGUpJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIGFyaWEtbGFiZWw9J09wZW4gZXh0ZXJuYWwnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1vcGVuXCIvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIDxzcGFuICpuZ0lmPSdoYXNDcmVhdGFibGVzJz5cbiAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyAqbmdJZj0nIW1vZGVsIHx8IG11bHRpcGxlJyAoY2xpY2spPSdvcGVuUmVzb3VyY2UoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNlY29uZGFyeSBWbHQtYnRuLS1pY29uIFZsdC1idG4tLWxhcmdlXCIgc3R5bGU9J21hcmdpbi1sZWZ0OiAxMnB4Oyc+XG4gICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXBsdXNcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyAqbmdJZj0nbW9kZWwgJiYgIW11bHRpcGxlJyAoY2xpY2spPSdvcGVuUmVzb3VyY2UobW9kZWwpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tcHJpbWFyeSBWbHQtYnRuLS1pY29uIFZsdC1idG4tLWxhcmdlXCIgc3R5bGU9J21hcmdpbi1sZWZ0OiAxMnB4Oyc+XG4gICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWVkaXRcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3NwYW4+IC0tPlxuICAgIDxkaXYgKm5nSWY9J2hhc0FwcGVuZEJ1dHRvbiAmJiAhZGlzYWJsZWQnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kXCI+XG4gICAgICA8YnV0dG9uIChmb2N1cyk9J29uQWN0aXZhdGVkKCRldmVudCknIChibHVyKT0nb25CbHVyKCRldmVudCknIHR5cGU9J2J1dHRvbicgKm5nSWY9JyFtb2RlbCB8fCBtdWx0aXBsZScgKGNsaWNrKT0nb3BlblJlc291cmNlKCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS13aGl0ZSBWbHQtYnRuLS1pY29uXCIgYXJpYS1sYWJlbD0nQWRkIG5ldyc+XG4gICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXBsdXNcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGZvY3VzKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGJsdXIpPSdvbkJsdXIoJGV2ZW50KScgdHlwZT0nYnV0dG9uJyAqbmdJZj0nbW9kZWwgJiYgIW11bHRpcGxlJyAoY2xpY2spPSdvcGVuUmVzb3VyY2UobW9kZWwpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0td2hpdGUgVmx0LWJ0bi0taWNvblwiIGFyaWEtbGFiZWw9J0VkaXQnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1lZGl0XCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8c21hbGwgKm5nSWY9J2YuaW52YWxpZCAmJiAoKGYgfCBtZXRhTW9kZWwpLl9wYXJlbnQuc3VibWl0dGVkIHx8ICgoZnQgfCBtZXRhTW9kZWwpLnRvdWNoZWQgJiYga2V5TGlzdGVuZXJBY3RpdmUpKScgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudF9fZXJyb3JcIj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLnJlcXVpcmVkXCI+UmVxdWlyZWQ8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5wYXR0ZXJuXCI+U2hvdWxkIG1hdGNoICd7e3ZhbGlkYXRpb25zLnBhdHRlcm59fScgcGF0dGVybjwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLmN1c3RvbVwiPnt7Zi5lcnJvcnMuY3VzdG9tfX0mbmJzcDs8L3NwYW4+XG4gIDwvc21hbGw+XG4gIDxzbWFsbCAqbmdJZj0nbWV0YS5oZWxwVGV4dCB8fCBtZXRhLmhpbnQnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2hpbnRcIj57e21ldGEuaGVscFRleHQgfHwgbWV0YS5oaW50fX08L3NtYWxsPlxuPC9kaXY+XG4iLCI8ZGl2ICpuZ0lmPSd0cnVlJyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50XCIgW25nQ2xhc3NdPVwieyAnVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yJzogKGYgfCBtZXRhTW9kZWwpLl9wYXJlbnQuc3VibWl0dGVkICYmIGYuaW52YWxpZCB9XCI+XG4gIDxsYWJlbCBjbGFzcz1cIlZsdC1sYWJlbFwiPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fSAoe3sobW9kZWwgfHwgW10pLmxlbmd0aH19KTxzcGFuICpuZ0lmPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCcgY2xhc3M9J1ZsdC1yZWQnPio8L3NwYW4+PC9sYWJlbD5cbiAgPHNtYWxsIHN0eWxlPSdtYXJnaW4tYm90dG9tOiA0cHg7JyAqbmdJZj0nbWV0YS5oaW50JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3ttZXRhLmhpbnR9fTwvc21hbGw+XG4gIDxpbnB1dCBjbGFzcz0nbW9kZWwnIHR5cGU9J2hpZGRlbicgW3JlcXVpcmVkXT0ndmFsaWRhdGlvbnMucmVxdWlyZWQnIFsobmdNb2RlbCldPSdtb2RlbCcgI2Y9J25nTW9kZWwnIFtuYW1lXT0nbmFtZScgLz5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0nbW9kZWwnPlxuICAgIDxkaXYgKm5nRm9yPSdsZXQgaXRlbSBvZiBtb2RlbDsgbGV0IGkgPSBpbmRleDsnIHN0eWxlPSdkaXNwbGF5OiBmbGV4OyBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tdmdpcC1tZXRhLXNlcGFyYXRvci1jb2xvcik7Jz5cbiAgICAgIDx2Z2lwLW1ldGEtZmllbGQgc3R5bGU9J2ZsZXg6IDE7JyBbaW5kZXhdPSdpJyBbbWV0YV09J2xpc3QnIFtwYXJlbnRdPSdpdGVtJyBbaW50ZWdyYXRpb25Db2RlXT0naW50ZWdyYXRpb25Db2RlJyBbcmVzb3VyY2VUeXBlXT0nbWV0YS5yZXNvdXJjZVR5cGUgfHwgcmVzb3VyY2VUeXBlJyB0aGVtZT0naW5oZXJpdCc+PC92Z2lwLW1ldGEtZmllbGQ+XG4gICAgICA8dmdpcC1tZXRhLWZpZWxkICpuZ0lmPSdtZXRhLnNlbGVjdGFibGUnIFttZXRhXT1cInsgbmFtZTogbWV0YS5zZWxlY3RhYmxlLm5hbWUsIGxhYmVsOiAnICcsIHR5cGU6ICdyYWRpbycsIG9wdGlvbnM6IFsgeyBpZDogbWV0YS5zZWxlY3RhYmxlLnZhbHVlLCBsYWJlbDogbWV0YS5zZWxlY3RhYmxlLmxhYmVsIH0gXSB9XCIgW3BhcmVudF09J2l0ZW0nIFtpbnRlZ3JhdGlvbkNvZGVdPSdpbnRlZ3JhdGlvbkNvZGUnIHRoZW1lPSdpbmhlcml0JyBzdHlsZT0nbWFyZ2luLWxlZnQ6IDEycHg7IG1hcmdpbi10b3A6IDEycHg7IG1hcmdpbi1yaWdodDogLTEycHg7Jz48L3ZnaXAtbWV0YS1maWVsZD5cbiAgICAgIDxkaXYgc3R5bGU9J3BhZGRpbmctbGVmdDogMTJweDsgbWFyZ2luLXRvcDogM3B4Oyc+XG4gICAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyAoY2xpY2spPSdyZW1vdmUoaSknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1saW5rIGl0ZW0tcmVtb3ZlLWJ1dHRvblwiIFtkaXNhYmxlZF09J21vZGVsLmxlbmd0aCA9PT0gKHZhbGlkYXRpb25zLm1pbiB8fCAwKScgYXJpYS1sYWJlbD0nUmVtb3ZlJz5cbiAgICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1iaW5cIi8+PC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8YnV0dG9uICpuZ0lmPSchdmFsaWRhdGlvbnMubWF4IHx8ICFtb2RlbCB8fCBtb2RlbC5sZW5ndGggPCB2YWxpZGF0aW9ucy5tYXgnIHN0eWxlPSd3aWR0aDogMTAwJTsnIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0nYWRkKCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zbWFsbCBWbHQtYnRuLS10ZXJ0aWFyeSBWbHQtYnRuLS1hcHAgVmx0LWJ0bi0tbm8tZm9jdXMgaXRlbS1hZGQtYnV0dG9uXCIgW2Rpc2FibGVkXT0ndmFsaWRhdGlvbnMubWF4ICYmIG1vZGVsICYmIG1vZGVsLmxlbmd0aCA9PT0gdmFsaWRhdGlvbnMubWF4Jz5cbiAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1wbHVzXCIvPjwvc3ZnPnt7bGlzdC5sYWJlbH19XG4gIDwvYnV0dG9uPlxuICA8c21hbGwgKm5nSWY9JyhmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCAmJiBmLmludmFsaWQnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2Vycm9yXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5yZXF1aXJlZFwiPlJlcXVpcmVkPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMubWF4bGVuZ3RoXCI+TGVuZ3RoIGNhbiBub3QgZXhjZWVkIHt7dmFsaWRhdGlvbnMubWF4bGVuZ3RofX0gY2hhcmFjdGVyczwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLmN1c3RvbVwiPnt7Zi5lcnJvcnMuY3VzdG9tfX0mbmJzcDs8L3NwYW4+XG4gIDwvc21hbGw+XG4gIDxzbWFsbCAqbmdJZj0nbWV0YS5oZWxwVGV4dCcgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudF9faGludFwiPnt7bWV0YS5oZWxwVGV4dH19PC9zbWFsbD5cbjwvZGl2PlxuIiwiPGRpdiAqbmdGb3I9J2xldCBzZWN0aW9uIG9mIG1ldGEuc2VjdGlvbnMnIGNsYXNzPSdWbHQtc2VjdGlvbicgW25nQ2xhc3NdPVwieyBzaG93bjogc2hvd0FsbCB8fCBzZWN0aW9uLnZpc2libGUgfHwgKCFtZXRhLm9uZVRpbWVPcHRpb25hbCAmJiAhc2VjdGlvbi4kb3B0aW9uYWwpIHx8IChtZXRhLm9uZVRpbWVPcHRpb25hbCAmJiAhb3B0aW9uYWxGaWVsZHNDb3VudCkgfVwiPlxuXHQ8aDUgKm5nSWY9J3NlY3Rpb24ubGFiZWwnIGNsYXNzPVwiVmx0LXNlY3Rpb25fX3RpdGxlXCI+e3tzZWN0aW9uLmxhYmVsfX08L2g1PlxuXHQ8ZGl2IHN0eWxlPSdvdmVyZmxvdzogdmlzaWJsZTsnIFtuZ0NsYXNzXT1cInsgJ2Zvci1wcmV2aWV3JzogcHJldmlldyB9XCI+XG5cdFx0PHNtYWxsICpuZ0lmPSdzZWN0aW9uLmRlc2NyaXB0aW9uJyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3tzZWN0aW9uLmRlc2NyaXB0aW9ufX08L3NtYWxsPlxuXHRcdDxkaXY+XG5cdFx0XHQ8bmctY29udGFpbmVyICpuZ0Zvcj0nbGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzJz5cblx0XHRcdFx0PHZnaXAtbWV0YS1maWVsZCAqbmdJZj0nIWZpZWxkLiRoaWRkZW4gJiYgKHNob3dBbGwgfHwgc2VjdGlvbi52aXNpYmxlIHx8ICFmaWVsZC4kb3B0aW9uYWwpJyBbbWV0YV09J2ZpZWxkJyBbcGFyZW50XT0ncmVzb3VyY2UnIFtpbnRlZ3JhdGlvbkNvZGVdPSdpbnRlZ3JhdGlvbkNvZGUnIFtyZXNvdXJjZVR5cGVdPSdyZXNvdXJjZVR5cGUnIFtwcmV2aWV3XT0ncHJldmlldycgW25nQ2xhc3NdPVwieyBzaG93bjogIWZpZWxkLiRpbnZpc2libGUgJiYgKHNob3dBbGwgfHwgdHJ1ZSkgfVwiIHRoZW1lPSdpbmhlcml0JyBbYXR0ci5kYXRhLXRoZW1lXT0ndGhlbWUnPjwvdmdpcC1tZXRhLWZpZWxkPlxuXHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPSdpc1BlcnNpc3RlZFJlc291cmNlICYmIG1ldGEuY2hpbGRyZW4gJiYgcHJldmlldyc+XG5cdDxkaXYgKm5nRm9yPSdsZXQgY2hpbGQgb2YgbWV0YS5jaGlsZHJlbic+XG5cdFx0PGg1IGNsYXNzPSdWbHQtY2hpbGRyZW5fX3RpdGxlJz5cblx0XHRcdDxzdmcgY2xhc3M9XCJWbHQtaWNvblwiPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1zdGFja1wiIC8+PC9zdmc+Jm5ic3A7XG5cdFx0XHR7e2NoaWxkLmxhYmVsfX0gPHNwYW4gY2xhc3M9J1ZsdC1ncmV5Jz4oe3socmVzb3VyY2VbY2hpbGQubmFtZV0gfHwgW10pLmxlbmd0aH19KTwvc3Bhbj5cblx0XHQ8L2g1PlxuXHRcdDxkaXYgKm5nRm9yPVwibGV0IGMgb2YgcmVzb3VyY2VbY2hpbGQubmFtZV1cIiBzdHlsZT0ncG9zaXRpb246IHJlbGF0aXZlOyc+XG5cblx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtY2FyZCBWbHQtYmctd2hpdGVcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1jYXJkX19jb250ZW50IFZsdC1idG4tb24taG92ZXJcIj5cblx0XHRcdFx0XHQ8aDU+e3tjLlN1YmplY3QgfHwgYy5zdWJqZWN0IHx8IGMuc3VtbWFyeSB8fCBjLnRpdGxlIHx8IGMuQ2FzZU51bWJlciB8fCBjLmNvbW1lbnQgfHwgYy5ib2R5IHx8IGMubmFtZSB8fCBjLnRvcGljIHx8IGMuY29udGVudCB8fCAnLi4uJyB9fTwvaDU+XG5cdFx0XHRcdFx0PGRpdiBzdHlsZT0nZm9udC1zaXplOiAxMnB4OyBsaW5lLWhlaWdodDogMTZweDsnPlxuXHRcdFx0XHRcdFx0Q3JlYXRlZDogPHNwYW4gY2xhc3M9J1ZsdC1ibGFjayc+e3tjLl92Z2lzLmNyZWF0ZWREYXRlIHwgZGF0ZTonbWVkaXVtRGF0ZSd9fTwvc3Bhbj5cblx0XHRcdFx0XHRcdEVkaXRlZDogPHNwYW4gY2xhc3M9J1ZsdC1ibGFjayc+e3tjLl92Z2lzLm1vZGlmaWVkRGF0ZSB8IGRhdGU6J21lZGl1bSd9fTwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWJhZGdlIFZsdC1iYWRnZS0tYXBwIFZsdC1iYWRnZS0tcHVycGxlIFZsdC1iYWRnZS0tc21hbGxcIj57e2MuX3ZnaXMucmVzb3VyY2VUeXBlfX08L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWJ0bi1ncm91cCBWbHQtYnRuLWdyb3VwLS1ob3ZlclwiPlxuXHRcdFx0XHRcdFx0PGEgKm5nSWY9J2MuX3ZnaXMuZXh0ZXJuYWxMaW5rJyBhdHRyLmhyZWY9J3t7Yy5fdmdpcy5leHRlcm5hbExpbmt9fScgdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9vcGVuZXInIHJlbD0nbm9vcGVuZXInIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS10ZXJ0aWFyeSBWbHQtYnRuLS1pY29uXCIgYXJpYS1sYWJlbD0nT3BlbiBleHRlcm5hbCc+PHN2ZyBzdHlsZT0nbWFyZ2luLWxlZnQ6IDA7IG1hcmdpbi1yaWdodDogMDsnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1vcGVuXCIvPjwvc3ZnPjwvYT5cblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT0nYnV0dG9uJyAoY2xpY2spPSdvcGVuQ2hpbGQoY2hpbGQsIGMpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tdGVydGlhcnkgVmx0LWJ0bi0taWNvblwiPjxzdmcgc3R5bGU9J21hcmdpbi1sZWZ0OiAwOyBtYXJnaW4tcmlnaHQ6IDA7Jz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi17eyBjaGlsZC5yZWZlcmVuY2UuZWRpdGFibGUgPyAnZWRpdCcgOiAnZXllLW5lZ2F0aXZlJyB9fVwiLz48L3N2Zz48L2J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8YnV0dG9uIHN0eWxlPSd3aWR0aDogMTAwJTsgbWFyZ2luLXRvcDogMDsgbWF4LXdpZHRoOiAxMDAlOycgdHlwZT0nYnV0dG9uJyAoY2xpY2spPSdvcGVuQ2hpbGQoY2hpbGQpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc21hbGwgVmx0LWJ0bi0tc2Vjb25kYXJ5XCIgW2Rpc2FibGVkXT0nY2hpbGQuY3JlYXRhYmxlID09PSBmYWxzZSc+XG5cdFx0XHQ8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1wbHVzXCIvPjwvc3ZnPnt7Y2hpbGQucmVmZXJlbmNlLmxhYmVsfX1cblx0XHQ8L2J1dHRvbj5cblx0PC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9JyEobWV0YS5vbmVUaW1lT3B0aW9uYWwgJiYgc2hvd0FsbCknIFtuZ0NsYXNzXT0neyBjZW50ZXJlZDogIW1ldGEub25lVGltZU9wdGlvbmFsIH0nPlxuXHQ8YnV0dG9uICpuZ0lmPSchcHJldmlldyAmJiBvcHRpb25hbEZpZWxkc0NvdW50JyB0eXBlPSdidXR0b24nIChjbGljayk9J3RvZ2dsZU9wdGlvbmFsRmllbGRzKCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zbWFsbCBWbHQtYnRuLS1saW5rIG1vcmUtYnV0dG9uXCIgc3R5bGU9J21hcmdpbjogMDsgbWFyZ2luLWJvdHRvbTogMTBweDsnPlxuXHRcdDxzdmc+PHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tY2hldnJvbi17eyBzaG93QWxsID8gJ3VwJyA6ICdkb3duJyB9fVwiLz48L3N2Zz5cblx0XHR7eyBzaG93QWxsID8gJ0hpZGUnIDogJ1Nob3cnIH19IE9wdGlvbmFsIEZpZWxkcyAoe3tvcHRpb25hbEZpZWxkc0NvdW50fX0pXG5cdDwvYnV0dG9uPlxuPC9kaXY+XG4iLCI8ZGl2ICpuZ0lmPSdnZW5lcmFsRXJyb3InIGNsYXNzPVwiVmx0LWNhbGxvdXQgVmx0LWNhbGxvdXQtLWNyaXRpY2FsXCIgc3R5bGU9J292ZXJmbG93OiBhdXRvOyBtYXJnaW46IDIwcHg7Jz5cblx0PGk+PC9pPlxuXHQ8ZGl2IGNsYXNzPVwiVmx0LWNhbGxvdXRfX2NvbnRlbnRcIj5cblx0XHQ8cD57e2dlbmVyYWxFcnJvcn19PC9wPlxuXHQ8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj0nIW1ldGEnIGNsYXNzPVwiVmx0LXByb2dyZXNzXCI+XG5cdDxkaXYgY2xhc3M9XCJWbHQtcHJvZ3Jlc3NfX2JhclwiIFtuZ0NsYXNzXT1cInsgbG9hZGluZzogbWV0YUxvYWRpbmcgfVwiIHJvbGU9XCJwcm9ncmVzc2JhclwiIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZXRleHQ9XCJMb2FkaW5nIE1ldGFkYXRhXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiPjwvZGl2PlxuPC9kaXY+XG48Zm9ybSBbdmdpcE1ldGFGb3JtQXV0b2ZvY3VzXT0nIXJlc291cmNlIHx8ICFyZXNvdXJjZS5leHRlcm5hbElkJyAqbmdJZj0nbWV0YSAmJiAhZ2VuZXJhbEVycm9yJyAjcmVzb3VyY2VGb3JtPVwibmdGb3JtXCIgW25hbWVdPSdyZXNvdXJjZS5yZXNvdXJjZVR5cGUnIChuZ1N1Ym1pdCk9J3N1Ym1pdChyZXNvdXJjZUZvcm0pJyBub3ZhbGlkYXRlPlxuXHQ8ZGl2IGNsYXNzPSdmb3JtLWNvbnRlbnQnIHN0eWxlPSdvdmVyZmxvdzogaGlkZGVuOyc+XG5cdFx0PGRpdiBbbmdDbGFzc109XCJ7ICdWbHQtY2FsbG91dC0tZGlzbWlzc2VkJzogIWZvcm1FcnJvcnMgfVwiIGNsYXNzPVwiVmx0LWNhbGxvdXQgVmx0LWNhbGxvdXQtLWJhbm5lciBWbHQtY2FsbG91dC0tY3JpdGljYWxcIj5cblx0XHRcdDxpPjwvaT5cblx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtY2FsbG91dF9fY29udGVudFwiIHN0eWxlPVwibWFyZ2luLXRvcDogYXV0bztcIj5cblx0XHRcdFx0PHA+VGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggb25lIG9yIG1vcmUgZmllbGRzPC9wPlxuXHRcdFx0XHQ8c21hbGwgc3R5bGU9J2ZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMS4wZW07JyAqbmdJZj0nZm9ybUVycm9ycyc+e3sgZm9ybUVycm9ycy5tZXNzYWdlIHx8IGZvcm1FcnJvcnMgfX08L3NtYWxsPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9XCJWbHQtY2FsbG91dF9fZGlzbWlzc1wiIChjbGljayk9J2NsZWFyRm9ybUVycm9ycygpJyBhcmlhLWxhYmVsPVwiRGlzbWlzc1wiPjwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHRcdDxkaXYgY2xhc3M9XCJWbHQtY2FyZF9fY29udGVudFwiIHN0eWxlPSdtaW4taGVpZ2h0OiA0MHB4Oyc+XG5cdFx0XHQ8dmdpcC1tZXRhLWxheW91dCAqbmdJZj0nZWRpdCcgW21ldGFdPSdtZXRhLmxheW91dCcgW3Jlc291cmNlXT0nbW9kZWwnIFtwcmV2aWV3XT0nZmFsc2UnIFtpbnRlZ3JhdGlvbl09J21ldGEuaW50ZWdyYXRpb24nIFt0eXBlXT0ncmVzb3VyY2UucmVzb3VyY2VUeXBlJyB0aGVtZT0naW5oZXJpdCc+PC92Z2lwLW1ldGEtbGF5b3V0PlxuXHRcdFx0PHZnaXAtbWV0YS1sYXlvdXQgKm5nSWY9JyFlZGl0JyBbbWV0YV09J21ldGEubGF5b3V0JyBbcmVzb3VyY2VdPSdtb2RlbCcgW3ByZXZpZXddPSd0cnVlJyBbaW50ZWdyYXRpb25dPSdtZXRhLmludGVncmF0aW9uJyBbdHlwZV09J3Jlc291cmNlLnJlc291cmNlVHlwZScgdGhlbWU9J2luaGVyaXQnPjwvdmdpcC1tZXRhLWxheW91dD5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdDxkaXYgY2xhc3M9XCJWbHQtY2FyZF9fZm9vdGVyXCI+XG5cdFx0PGJ1dHRvbiBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc2Vjb25kYXJ5IFZsdC1idG4tLWFwcCBWbHQtYnRuLS1vdXRsaW5lXCIgdHlwZT0nYnV0dG9uJyBhcmlhLWxhYmVsPSdDYW5jZWwnIChjbGljayk9J2Nsb3NlKCknPlxuXHRcdFx0e3sgZWRpdCA/ICdDYW5jZWwnIDogJ0Nsb3NlJyB9fVxuXHRcdDwvYnV0dG9uPlxuXHRcdDxidXR0b24gKm5nSWY9J2VkaXQnIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1hcHBcIiBbbmdDbGFzc109XCJ7ICdWbHQtYnRuLS1wcmltYXJ5JzogaXNQZXJzaXN0ZW50LCAnVmx0LWJ0bi0tc2Vjb25kYXJ5JzogIWlzUGVyc2lzdGVudCB9XCIgdHlwZT0nc3VibWl0Jz5cblx0XHRcdHt7IChyZXNvdXJjZSAmJiByZXNvdXJjZS5leHRlcm5hbElkKSA/ICdVcGRhdGUnIDogJ0NyZWF0ZScgfX1cblx0XHQ8L2J1dHRvbj5cblx0XHQ8YnV0dG9uIChjbGljayk9J2VkaXRNb2RlKCknICpuZ0lmPSchZWRpdCAmJiBpc0VkaXRhYmxlJyBbZGlzYWJsZWRdPSchaXNFZGl0YWJsZScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLWFwcCBWbHQtYnRuLS1wcmltYXJ5XCIgdHlwZT0nYnV0dG9uJyBhcmlhLWxhYmVsPSdFZGl0Jz5cblx0XHRcdEVkaXRcblx0XHQ8L2J1dHRvbj5cblx0XHQ8ZGl2IHN0eWxlPSdtYXJnaW4tcmlnaHQ6IDhweDsgZmxleDogMTsnPlxuXHRcdFx0PGRpdiAqbmdJZj0nbWV0YS5hdmFpbGFibGVMYXlvdXRzICYmIG1ldGEuYXZhaWxhYmxlTGF5b3V0cy5sZW5ndGgnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnQgVmx0LWZvcm1fX2VsZW1lbnQtLWJpZ1wiIHN0eWxlPSdwYWRkaW5nOiAwOyBtYXJnaW46IC04cHggLTE4cHggLThweCAwOyc+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtc2VsZWN0XCI+XG5cdFx0XHRcdFx0PGxhYmVsIHN0eWxlPSdhbGw6IGluaGVyaXQ7Jz5cblx0XHRcdFx0XHRcdDxzZWxlY3Qgc3R5bGU9J2JvcmRlcjogMDsgbWFyZ2luLXRvcDogM3B4OyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsnIChjaGFuZ2UpPSdjaGFuZ2VMYXlvdXQoKScgWyhuZ01vZGVsKV09J2N1cnJlbnRMYXlvdXRJZCcgW25nTW9kZWxPcHRpb25zXT0neyBzdGFuZGFsb25lOiB0cnVlIH0nIFtkaXNhYmxlZF09J2lzUGVyc2lzdGVudCc+XG5cdFx0XHRcdFx0XHRcdDxvcHRpb24gc2VsZWN0ZWQgZGlzYWJsZWQ+U2VsZWN0IGxheW91dDwvb3B0aW9uPlxuXHRcdFx0XHRcdFx0XHQ8b3B0aW9uICpuZ0Zvcj0nbGV0IGxheW91dCBvZiBtZXRhLmF2YWlsYWJsZUxheW91dHMnIFtuZ1ZhbHVlXT0nbGF5b3V0LmlkJz57e2xheW91dC5uYW1lfX08L29wdGlvbj5cblx0XHRcdFx0XHRcdDwvc2VsZWN0PlxuXHRcdFx0XHRcdFx0PGxhYmVsPkxheW91dDwvbGFiZWw+XG5cdFx0XHRcdFx0PC9sYWJlbD5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duIHJlc291cmNlLW1lbnVcIiBbbmdDbGFzc109XCJ7ICdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJzogcmVzb3VyY2VNZW51VmlzaWJsZSB9XCIgc3R5bGU9J21hcmdpbi1sZWZ0OiAycHg7Jz5cblx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsXCIgc3R5bGU9J2JvdHRvbTogNDBweDsgcmlnaHQ6IC00cHg7IHRvcDogaW5pdGlhbDsnPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudFwiPlxuXHRcdFx0XHRcdDxhIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19saW5rXCIgKGNsaWNrKT0nbG9hZE1ldGFkYXRhKGN1cnJlbnRMYXlvdXRJZCwgdHJ1ZSknPlxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsZXInPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1yZWZyZXNoXCIvPjwvc3ZnPiZuYnNwOyZuYnNwO1JlZnJlc2ggbWV0YWRhdGFcblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvYT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3RyaWdnZXJcIj5cblx0XHRcdFx0PGJ1dHRvbiB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5SZXNvdXJjZU1lbnUoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLWxpbmtcIiBhcmlhLWxhYmVsPSdSZXNvdXJjZSBtZW51Jz5cblx0XHRcdFx0XHQ8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGwnIHN0eWxlPSdtYXJnaW46IDA7Jz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tbW9yZS12LW5lZ2F0aXZlXCIvPjwvc3ZnPlxuXHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZm9ybT5cbjxkaXYgY2xhc3M9J2J1c3ktbWFzaycgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGJ1c3kgfVwiPlxuXHQ8ZGl2IHN0eWxlPSdoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyc+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1zcGlubmVyXCI+PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+IiwiPGRpdiBjbGFzcz1cIlZsdC1jYXJkIFZsdC1iZy13aGl0ZVwiPlxuXHQ8ZGl2IGNsYXNzPVwiVmx0LWNhcmRfX2NvbnRlbnQgVmx0LWJ0bi1vbi1ob3ZlclwiPlxuXHRcdDxoNT57e21vZGVsLlN1YmplY3QgfHwgbW9kZWwuc3ViamVjdCB8fCBtb2RlbC5zdW1tYXJ5IHx8IG1vZGVsLnRpdGxlIHx8IG1vZGVsLkNhc2VOdW1iZXIgfHwgbW9kZWwuY29tbWVudCB8fCBtb2RlbC5ib2R5IHx8IG1vZGVsLm5hbWUgfHwgbW9kZWwudG9waWMgfHwgJy4uLicgfX08L2g1PlxuXHRcdDxkaXYgc3R5bGU9J2ZvbnQtc2l6ZTogMTJweDsgbGluZS1oZWlnaHQ6IDE2cHg7Jz5cblx0XHRcdENyZWF0ZWQ6IDxzcGFuIGNsYXNzPSdWbHQtYmxhY2snPnt7bW9kZWwuX3ZnaXMuY3JlYXRlZERhdGUgfCBkYXRlOidtZWRpdW1EYXRlJ319PC9zcGFuPlxuXHRcdFx0RWRpdGVkOiA8c3BhbiBjbGFzcz0nVmx0LWJsYWNrJz57e21vZGVsLl92Z2lzLm1vZGlmaWVkRGF0ZSB8IGRhdGU6J21lZGl1bSd9fTwvc3Bhbj5cblx0XHQ8L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWJhZGdlIFZsdC1iYWRnZS0tYXBwIFZsdC1iYWRnZS0tcHVycGxlIFZsdC1iYWRnZS0tc21hbGxcIj57e21vZGVsLl92Z2lzLnJlc291cmNlVHlwZX19PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1idG4tZ3JvdXAgVmx0LWJ0bi1ncm91cC0taG92ZXJcIj5cblx0XHRcdDxhICpuZ0lmPSdtb2RlbC5fdmdpcy5leHRlcm5hbExpbmsnIGF0dHIuaHJlZj0ne3ttb2RlbC5fdmdpcy5leHRlcm5hbExpbmt9fScgdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9vcGVuZXInIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS10ZXJ0aWFyeSBWbHQtYnRuLS1pY29uXCIgYXJpYS1sYWJlbD0nT3BlbiBleHRlcm5hbCc+PHN2ZyBzdHlsZT0nbWFyZ2luLWxlZnQ6IDA7IG1hcmdpbi1yaWdodDogMDsnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1vcGVuXCIvPjwvc3ZnPjwvYT5cblx0XHRcdDxidXR0b24gdHlwZT0nYnV0dG9uJyAoY2xpY2spPSdvcGVuKHJlc291cmNlLCBtb2RlbCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS10ZXJ0aWFyeSBWbHQtYnRuLS1pY29uXCIgYXJpYS1sYWJlbD0nRWRpdCc+PHN2ZyBzdHlsZT0nbWFyZ2luLWxlZnQ6IDA7IG1hcmdpbi1yaWdodDogMDsnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1lZGl0XCIvPjwvc3ZnPjwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
2300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVmRGlhbG9nL3ZpZXcuaHRtbCIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZENvbXBvc2l0ZS92aWV3Lmh0bWwiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRTZWxlY3Qvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL2ZpZWxkUmVmZXJlbmNlL3ZpZXcuaHRtbCIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21ldGEtdWkvc3JjL2xpYi9maWVsZExpc3Qvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL2xheW91dC92aWV3Lmh0bWwiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvcmVzb3VyY2Uvdmlldy5odG1sIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWV0YS11aS9zcmMvbGliL3Jlc291cmNlQ2FyZC92aWV3Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQ0wsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUNuQyxTQUFTLEVBQWdDLFlBQVksRUFFdEQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUXBFLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FB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dm9uYWdlLmNvbVxuICogQERhdGU6IDIwMTktMDktMTkgMTc6MzU6MTlcbiAqIEBMYXN0IE1vZGlmaWVkIGJ5OiBBbGV4YW5kZXIuVmFuZ2Vsb3ZAdm9uYWdlLmNvbVxuICogQExhc3QgTW9kaWZpZWQgdGltZTogMjAyMy0wMS0xNyAxMjo0ODo1NlxuICovXG5cbmltcG9ydCB7XG4gIERpcmVjdGl2ZSwgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBPbkluaXQsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmLCBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBPbkNoYW5nZXNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vLyBpbXBvcnQgeyBNZXRhUmVmRGlhbG9nIH0gZnJvbSAnLi9yZWZEaWFsb2cnO1xuaW1wb3J0IHsgTWV0YVJlZmVyZW5jZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL21ldGFSZWZlcmVuY2UnO1xuaW1wb3J0IHsgTWV0YVJlc291cmNlU2VydmljZSwgSU1ldGFSZXNvdXJjZUNvbmZpZyB9IGZyb20gJy4vc2VydmljZXMvbWV0YVJlc291cmNlJztcbmltcG9ydCB7IE1ldGFNc2dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9tZXRhTXNnJztcbmltcG9ydCB7IE1ldGFDb250ZXh0U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvbWV0YUNvbnRleHQnO1xuaW1wb3J0IHsgTWV0YVRyYWNrZXJTZXJ2aWNlLCBJTWV0YVRyYWNrZXJFdmVudCB9IGZyb20gJy4vc2VydmljZXMvbWV0YVRyYWNrZXInO1xuaW1wb3J0IHsgbWV0YURhcmssIG1ldGFMaWdodCB9IGZyb20gJy4vY29tbW9uL3V0aWxzL2NvbG9yVGhlbWVzJztcbmltcG9ydCB7IG1ldGFOb3JtYWxpemVyIH0gZnJvbSAnLi9jb21tb24vbWV0YU5vcm1hbGl6ZXInO1xuaW1wb3J0IHsgdGVtcGxhdGVCdWlsZGVyIH0gZnJvbSAnLi9jb21tb24vdXRpbHMvdGVtcGxhdGVCdWlsZGVyJztcblxuaW1wb3J0IHsgRmllbGRBYnN0cmFjdCB9IGZyb20gJy4vZmllbGRBYnN0cmFjdCc7XG5pbXBvcnQgeyBGaWVsZFVua25vd24gfSBmcm9tICcuL2ZpZWxkVW5rbm93bic7XG5pbXBvcnQgeyBGaWVsZFRleHQgfSBmcm9tICcuL2ZpZWxkVGV4dCc7XG5pbXBvcnQgeyBGaWVsZElucHV0IH0gZnJvbSAnLi9maWVsZElucHV0Jztcbi8vIGltcG9ydCB7IEZpZWxkU2VsZWN0IH0gZnJvbSAnLi9maWVsZFNlbGVjdCc7XG4vLyBpbXBvcnQgeyBGaWVsZFJlZmVyZW5jZSB9IGZyb20gJy4vZmllbGRSZWZlcmVuY2UnO1xuLy8gaW1wb3J0IHsgRmllbGRDb21wb3NpdGUgfSBmcm9tICcuL2ZpZWxkQ29tcG9zaXRlJztcbmltcG9ydCB7IEZpZWxkQm9vbGVhbiB9IGZyb20gJy4vZmllbGRCb29sZWFuJztcbmltcG9ydCB7IEZpZWxkUmFkaW8gfSBmcm9tICcuL2ZpZWxkUmFkaW8nO1xuLy8gaW1wb3J0IHsgRmllbGRMaXN0IH0gZnJvbSAnLi9maWVsZExpc3QnO1xuaW1wb3J0IHsgRmllbGRSaWNodGV4dCB9IGZyb20gJy4vZmllbGRSaWNodGV4dCc7XG5pbXBvcnQgeyBGaWVsZERhdGV0aW1lIH0gZnJvbSAnLi9maWVsZERhdGV0aW1lJztcblxuXG4vLy8vIFJFRiBESUFMT0dcbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vcmVmRGlhbG9nL3ZpZXcuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlZkRpYWxvZy9zdHlsZS5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWV0YVJlZkRpYWxvZyBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG1vZGFsOiBIVE1MRWxlbWVudDtcbiAgb25Db21wbGV0ZTogKHJlc3VsdD8pID0+IHVuZGVmaW5lZDtcbiAgZnVsbFJlc291cmNlOiBhbnk7XG4gIHJlc291cmNlczogYW55ID0ge307XG4gIG1vZGVsczogYW55ID0ge307XG4gIHJlZmVyZW5jZTogYW55O1xuICBjdXJyZW50UmVzb3VyY2U6IHN0cmluZztcbiAgc2VydmljZXM6IGFueSA9IHt9O1xuICBpbnRlZ3JhdGlvbkNvZGU6IHN0cmluZztcbiAgcmVzb3VyY2U6IGFueTtcbiAgbWV0YVJlc291cmNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlO1xuICBpbnRlZ3JhdGlvbkljb246IHN0cmluZztcbiAgcHJlZmVyUmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIHRoZW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZlxuICApIHt9XG5cbiAgZ2V0IGlzRWRpdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzW3RoaXMuY3VycmVudFJlc291cmNlXS5tZXRhLmxheW91dC5lZGl0YWJsZSAhPT0gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNQZXJzaXN0ZW50KCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlICYmICh0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgfHwgdGhpcy5yZXNvdXJjZS5pZCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBsZXQgcmVmZXJlbmNlcyA9ICh0aGlzLnJlZmVyZW5jZSBpbnN0YW5jZW9mIEFycmF5KSA/IHRoaXMucmVmZXJlbmNlIDogW3RoaXMucmVmZXJlbmNlXTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgIGlmICh0aGlzLnJlc291cmNlICYmIHRoaXMucmVzb3VyY2UuX3ZnaXMpIHtcbiAgICAgIHRoaXMuZnVsbFJlc291cmNlID0gdGhpcy5yZXNvdXJjZTtcbiAgICAgIHRoaXMucmVzb3VyY2UgPSB0aGlzLnJlc291cmNlLl92Z2lzO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgaWYgKHRoaXMucmVzb3VyY2UpIHtcbiAgICAgIHJlZmVyZW5jZXMgPSByZWZlcmVuY2VzLmZpbHRlcigocikgPT4ge1xuICAgICAgICBjb25zdCByZXNUeXBlID0gci5uYW1lIHx8IHIucmVzb3VyY2VUeXBlIHx8ICcnO1xuICAgICAgICAvLyBjb21wYXJpbmcgY2FzZSBpbnNlbnNpdGl2ZSwgYmVjYXVzZSBvZiBaZW5kZXNrIGNvbW1lbnQgdnMgQ29tbWVudFxuICAgICAgICByZXR1cm4gKHJlc1R5cGUuaWQgfHwgcmVzVHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gKHRoaXMucmVzb3VyY2UucmVzb3VyY2VUeXBlIHx8IHRoaXMucmVzb3VyY2UudHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVmIG9mIHJlZmVyZW5jZXMpIHtcbiAgICAgIGlmICghcmVmLm5hbWUpIHtcbiAgICAgICAgcmVmLm5hbWUgPSByZWYucmVzb3VyY2VUeXBlOyAvLyB3aGVuIHRoZSByZXNvdXJjZSBjb21lcyBmcm9tIHJlc291cmNlcyBBUEksIG5vdCBmcm9tIG1ldGFkYXRhXG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY3VycmVudFJlc291cmNlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFJlc291cmNlID0gcmVmLm5hbWU7XG4gICAgICB9XG4gICAgICBpZiAocmVmLm5hbWUgPT09IHRoaXMucHJlZmVyUmVzb3VyY2VUeXBlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFJlc291cmNlID0gdGhpcy5wcmVmZXJSZXNvdXJjZVR5cGU7XG4gICAgICB9XG4gICAgICBjb25zdCByczogYW55ID0ge1xuICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICByZXNvdXJjZVR5cGU6IHJlZi5yZXNvdXJjZVR5cGUgfHwgcmVmLm5hbWUsXG4gICAgICAgIHJlZlxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlKSB7XG4gICAgICAgIHJzLmV4dGVybmFsSWQgPSB0aGlzLnJlc291cmNlLmlkIHx8IHRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZDtcbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2UuZXZlbnRJZCkge1xuICAgICAgICAgIHJzLmV2ZW50SWQgPSB0aGlzLnJlc291cmNlLmV2ZW50SWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZnVsbFJlc291cmNlKSB7XG4gICAgICAgICAgcnMuYWN0aXZpdHkgPSB0aGlzLmZ1bGxSZXNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS5sYXlvdXRJZCkge1xuICAgICAgICAgIHJzLmxheW91dElkID0gdGhpcy5yZXNvdXJjZS5sYXlvdXRJZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcnMucGFyZW50ID0gcmVmLnBhcmVudDtcbiAgICAgIHRoaXMucmVzb3VyY2VzW3JlZi5uYW1lXSA9IHJzO1xuICAgICAgdGhpcy5tb2RlbHNbcmVmLm5hbWVdID0ge307XG4gICAgICBpZiAodGhpcy5yZXNvdXJjZSkge1xuICAgICAgICB0aGlzLm1vZGVsc1tyZWYubmFtZV0uX3ZnaXMgPSB0aGlzLnJlc291cmNlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5tb2RhbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jaGlsZE5vZGVzWzBdO1xuICAgIHRoaXMubW9kYWwuY2xhc3NMaXN0LnJlbW92ZSgnVmx0LW1vZGFsLS1vdXQnKTtcbiAgICB0aGlzLm1vZGFsLmNsYXNzTGlzdC5hZGQoJ1ZsdC1tb2RhbF92aXNpYmxlJyk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5RXZlbnRMaXN0ZW5lcik7XG5cbiAgICBpZiAodGhpcy5pbnRlZ3JhdGlvbkNvZGUgPT09ICdtb2NrcycpIHtcbiAgICAgIHRoaXMuaW50ZWdyYXRpb25JY29uID0gJ0JyYW5kLWljb24tdm9uYWdlJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0aGlzLmludGVncmF0aW9uQ29kZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJ29mZmljZTM2NSc6XG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSAnQnJhbmQtaWNvbi1vZmZpY2UtY29sb3InO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdWdhcic6XG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkljb24gPSAnQnJhbmQtaWNvbi1zdWdhcmNybS1jb2xvcic7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21zZHluYW1pY3MnOlxuICAgICAgICAgIHRoaXMuaW50ZWdyYXRpb25JY29uID0gJ0JyYW5kLWljb24tZHluYW1pY3MtY29sb3InO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRoaXMuaW50ZWdyYXRpb25JY29uID0gYEJyYW5kLWljb24tJHsodGhpcy5pbnRlZ3JhdGlvbkNvZGUgfHwgJycpLnRvTG93ZXJDYXNlKCl9LWNvbG9yYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFwcGx5VGhlbWUoKTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMubW9kYWwuY2xhc3NMaXN0LnJlbW92ZSgnVmx0LW1vZGFsX3Zpc2libGUnKTtcbiAgICB0aGlzLm1vZGFsLmNsYXNzTGlzdC5hZGQoJ1ZsdC1tb2RhbC0tb3V0Jyk7XG4gIH1cblxuICBkaXNtaXNzKCkge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLm9uQ29tcGxldGUobnVsbCk7XG4gIH1cblxuICBvblJlc291cmNlRG9uZShyZXN1bHQpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgdGhpcy5vbkNvbXBsZXRlKHJlc3VsdCk7XG4gIH1cblxuICBzZWxlY3RSZXNvdXJjZShyZXNvdXJjZSkge1xuICAgIHRoaXMuY3VycmVudFJlc291cmNlID0gcmVzb3VyY2U7XG4gIH1cblxuICBrZWVwT3JkZXIgPSAoYSwgYikgPT4gYTtcblxuICBwcml2YXRlIGtleUV2ZW50TGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5RXZlbnRMaXN0ZW5lcik7XG4gICAgICB0aGlzLmRpc21pc3MoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBhcHBseVRoZW1lKCkge1xuICAgIGNvbnN0IG1ldGFUaGVtZSA9IHRoaXMudGhlbWUgPT09ICdkYXJrJyA/IG1ldGFEYXJrIDogbWV0YUxpZ2h0O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1ldGFUaGVtZS5wcm9wZXJ0aWVzKSkge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGtleSwgbWV0YVRoZW1lLnByb3BlcnRpZXNba2V5XSk7XG4gICAgfVxuICB9XG59XG5cbi8vLy8gQ09NUE9TSVRFIEZJRUxEXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpZWxkQ29tcG9zaXRlL3ZpZXcuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpZWxkQ29tcG9zaXRlL3N0eWxlLnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRDb21wb3NpdGUgZXh0ZW5kcyBGaWVsZEFic3RyYWN0IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbWV0YTogYW55O1xuICB2YWx1ZTogYW55O1xuXG4gIGdldCBpc1JvdygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhLnN1YnR5cGUgIT09ICdjb2x1bW4nO1xuICB9XG5cbiAgZ2V0IGZpZWxkcygpIHtcbiAgICByZXR1cm4gKHRoaXMubWV0YS5maWVsZHMgfHwgW10pLm1hcCgoZikgPT4ge1xuICAgICAgaWYgKGYudHlwZSA9PT0gJ3RleHRhcmVhJykgeyAvLyBubyB0ZXh0YXJlYXMgaW5zaWRlIGNvbXBvc2l0ZSAodXNlIHN0cmluZylcbiAgICAgICAgZGVsZXRlIGYudHlwZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gc3VwZXIubmdPbkluaXQoKVxuICAgIGxldCBuZXN0ZWRGaWVsZHNSZWdleDogUmVnRXhwO1xuICAgIGlmICh0aGlzLm1ldGEubmFtZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSB8fCB7fTtcbiAgICAgIG5lc3RlZEZpZWxkc1JlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7dGhpcy5tZXRhLm5hbWV9XFxcXC4oLiopYCk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wYXJlbnQsIHRoaXMubWV0YS5uYW1lLCB7XG4gICAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWVbdl0gPSB2YWx1ZVt2XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLnZhbHVlKSAhPT0gJ3t9Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0aGlzLnNlbmRUb1NlcnZlcixcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3QgZiBvZiB0aGlzLm1ldGEuZmllbGRzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUm93KSB7XG4gICAgICAgICAgaWYgKGYudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICBmLnR5cGUgPSAnc3RyaW5nJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmVzdGVkRmllbGRNYXRjaCA9IGYubmFtZS5tYXRjaChuZXN0ZWRGaWVsZHNSZWdleCk7XG4gICAgICAgIGlmIChuZXN0ZWRGaWVsZE1hdGNoKSB7XG4gICAgICAgICAgZi5uYW1lID0gbmVzdGVkRmllbGRNYXRjaFsxXTsgLy8gZm9yIFZHSVMgVjIgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3JtYWxpemUgbmFtZSB3aXRoIGRvdHRlZCBzeW50YXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5wYXJlbnQ7XG4gICAgfVxuICB9XG5cbn1cblxuLy8vLyBTRUxFQ1QgRklFTERcbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZmllbGRTZWxlY3Qvdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmllbGRTZWxlY3Qvc3R5bGUuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkU2VsZWN0IGV4dGVuZHMgRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG11bHRpcGxlOiBib29sZWFuO1xuICBpbnB1dDogSFRNTElucHV0RWxlbWVudDtcbiAgZHJvcGRvd246IEhUTUxFbGVtZW50O1xuICBkcm9wZG93blNjcm9sbENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gIHNob3dUZXh0OiBzdHJpbmc7XG4gIGFjdGl2ZVN1Z2dlc3Rpb25JbmRleDogbnVtYmVyO1xuICB2YWx1ZTogYW55O1xuICBpc0NyZWF0YWJsZSA9IGZhbHNlO1xuICBhc3luY09wdGlvbnM6IEFycmF5PGFueT47XG4gIHNlYXJjaGluZzogYm9vbGVhbjtcbiAgZmlsdGVyZWRPcHRpb25zOiBBcnJheTxhbnk+O1xuICBzZWFyY2hJbnB1dDogJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIHJlZmVyZW5jZVNlcnZpY2U6IE1ldGFSZWZlcmVuY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YVJlc291cmNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZE9wdGlvbnMgfHwgdGhpcy5hc3luY09wdGlvbnMgfHwgdGhpcy5tZXRhLm9wdGlvbnMgfHwgdGhpcy5tZXRhLnBpY2tsaXN0IHx8IFtdO1xuICB9XG5cbiAgZ2V0IGdyb3VwZWRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmVkdWNlKChyLCB7IGdyb3VwIH0pID0+IHtcbiAgICAgIGlmICghci5zb21lKG8gPT4gby5ncm91cCA9PT0gZ3JvdXApKSB7XG4gICAgICAgIHIucHVzaCh7IGdyb3VwLCBncm91cEl0ZW06IHRoaXMub3B0aW9ucy5maWx0ZXIodiA9PiB2Lmdyb3VwID09PSBncm91cCkgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9LCBbXSk7XG4gIH1cblxuICBnZXQgcmVzb3VyY2VTZXJ2aWNlKCkge1xuICAgIGlmICghdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlKSB7XG4gICAgICBjb25zdCBtZXRhUmVzb3VyY2VDb25maWc6IElNZXRhUmVzb3VyY2VDb25maWcgPSB7XG4gICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGVcbiAgICAgIH07XG4gICAgICB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2UgPSB0aGlzLm1ldGFSZXNvdXJjZS5uZXcobWV0YVJlc291cmNlQ29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWV0YVJlc291cmNlU2VydmljZTtcbiAgfVxuXG4gIGdldCBvcHRpb25zQmFja3VwKCkge1xuICAgIHJldHVybiB0aGlzLmFzeW5jT3B0aW9ucyB8fCB0aGlzLm1ldGEub3B0aW9ucyB8fCB0aGlzLm1ldGEucGlja2xpc3QgfHwgW107XG4gIH1cblxuICBzdGF0aWMgc2V0dXAoaW5zdGFuY2UsIHBhcmVudCwgbWV0YSkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncGFyZW50JywgdGhpcy5wYXJlbnQpO1xuICAgIHRoaXMudmFsaWRhdGlvbkF0dHJpYnV0ZXMgPSBbJ3JlcXVpcmVkJ107XG4gICAgdGhpcy5tdWx0aXBsZSA9ICh0aGlzLm1ldGEudHlwZSA9PT0gJ211bHRpcGlja2xpc3QnKSB8fCB0aGlzLm1ldGEubXVsdGlwbGU7XG4gICAgY29uc3Qgb3JpZ1ZhbHVlID0gdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdO1xuICAgIGlmICh0aGlzLm1ldGEucmVmZXJlbmNlKSB7XG4gICAgICB0aGlzLmlzQ3JlYXRhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMucGFyZW50LCB0aGlzLm1ldGEubmFtZSwge1xuICAgICAgc2V0OiAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbyBvZiB0aGlzLm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKCh2YWx1ZS5pZCB8fCB2YWx1ZSkgPT09IChvLmlkIHx8IG8udmFsdWUgfHwgby5uYW1lIHx8IDApKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IFtvXTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW3RoaXMubW9kZWxUb1ZhbHVlKG8sIHRoaXMubWV0YS52YWx1ZVR5cGUpXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpID8gdmFsdWUgOiAodmFsdWUgfHwgJycpLnNwbGl0KCc7Jyk7IC8vIHNob3VsZCBub3QgaGFuZGxlIGluY29ycmVjdCB2YWx1ZXNcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbXTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG8gb2YgdGhpcy5vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoKHYuaWQgfHwgdikgPT09IChvLmlkIHx8IG8udmFsdWUgfHwgby5uYW1lIHx8IDApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwucHVzaChvKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMubW9kZWxUb1ZhbHVlKG8sIHRoaXMubWV0YS52YWx1ZVR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwubGVuZ3RoICYmICF0aGlzLmlzUGVyc2lzdGVkUGFyZW50KSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2hvd1RleHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNob3dUZXh0ID0gKHRoaXMubW9kZWwgfHwgW10pLm1hcCgobykgPT4gby5sYWJlbCB8fCBvKS5qb2luKCcsICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbyBvZiB0aGlzLm1ldGEub3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAoKHZhbHVlLmlkIHx8IHZhbHVlKSA9PT0gKG8uaWQgfHwgby52YWx1ZSB8fCBvLm5hbWUgfHwgbykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gbztcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tb2RlbFRvVmFsdWUobywgdGhpcy5tZXRhLnZhbHVlVHlwZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93VGV4dCA9IG8ubGFiZWwgfHwgbztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2hvd1RleHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25TdWJqZWN0Q2hhbmdlKHRoaXMubW9kZWwpO1xuICAgICAgICB0aGlzLm1ldGEuJG9wdGlvbmFsID0gdGhpcy5pc09wdGlvbmFsO1xuICAgICAgfSxcbiAgICAgIGdldDogKCkgPT4gdGhpcy52YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuc2VuZFRvU2VydmVyLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAob3JpZ1ZhbHVlKSB7XG4gICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBvcmlnVmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGVmYXVsdCAmJiAhdGhpcy5tb2RlbCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IHRoaXMuZGVmYXVsdC5pZCB8fCB0aGlzLmRlZmF1bHQ7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mICh0aGlzLm1ldGEuZW5hYmxlZCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiAodGhpcy5tZXRhLmVuYWJsZWQpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhciBvZiBPYmplY3Qua2V5cyh0aGlzLm1ldGEuZW5hYmxlZCkpIHtcbiAgICAgICAgICBjb25zdCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W3Bhcl07XG4gICAgICAgICAgaWYgKHBhclZhbHVlKSB7XG4gICAgICAgICAgICAvLyBsb2dpYyBmb3Igc3BlY2lmaWMgdmFsdWVzLCB0aGlzIHdvcmtzIG9ubHkgZm9yIHRydWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2dpY2FsRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KHBhcikpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2dpY2FsRGlzYWJsZWQgPSAhdmFsdWVbcGFyXTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMubG9naWNhbERpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5tZXRhLnNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5tZXRhLnNlYXJjaC5wYXJhbXM7XG4gICAgICBpZiAoc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGFyIG9mIE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykpIHtcbiAgICAgICAgICBjb25zdCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W3NlYXJjaFBhcmFtc1twYXJdXTtcbiAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgcGFyYW1zW3Bhcl0gPSBwYXJWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoT3B0aW9ucyhwYXJhbXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KHNlYXJjaFBhcmFtc1twYXJdKSkge1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnModmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25BY3RpdmF0ZWQoZXYpIHtcbiAgICAvLyBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW5wdXQgPSBldi5zcmNFbGVtZW50O1xuICAgIGlmICghdGhpcy5kcm9wZG93bikge1xuICAgICAgdGhpcy5kcm9wZG93biA9IGV2LnNyY0VsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gIH1cblxuICBkZXRlY3RTZWFyY2hCbG9jayhlbGVtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5WbHQtc2VhcmNoX3dyYXAnKS5jb250YWlucyhlbGVtZW50KTtcbiAgfVxuXG4gIG9uQmx1cihldikge1xuICAgIGxldCBpbnRlcm5hbENvbnRyb2wgPSBmYWxzZTtcbiAgICBpZiAoZXYucmVsYXRlZFRhcmdldCkge1xuXG4gICAgICBpZiAoIXRoaXMuZGV0ZWN0U2VhcmNoQmxvY2soZXYucmVsYXRlZFRhcmdldCkgJiYgIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcm5hbENvbnRyb2wgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSAmJiAhaW50ZXJuYWxDb250cm9sKSB7XG4gICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDQwMCk7XG4gICAgICBkZWxldGUgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZTtcbiAgICB9XG4gICAgdGhpcy5vbkxlYXZlLmVtaXQoZXYpO1xuICB9XG5cbiAgb25PcHRpb25TZWxlY3QoZXYsIG9wdGlvbikge1xuICAgIGlmIChldikge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICB9XG4gICAgICBjb25zdCBvcHRpb25JbmRleCA9IHRoaXMubW9kZWwuaW5kZXhPZihvcHRpb24pO1xuICAgICAgaWYgKG9wdGlvbkluZGV4ID09PSAtMSkge1xuICAgICAgICB0aGlzLm1vZGVsLnB1c2gob3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9kZWwuc3BsaWNlKG9wdGlvbkluZGV4LCAxKTtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmxlbmd0aCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLnNob3dUZXh0ID0gKHRoaXMubW9kZWwgfHwgW10pLm1hcCgobykgPT4gby5sYWJlbCB8fCBvKS5qb2luKCcsICcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2hvd1RleHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICB0aGlzLm1vZGVsID0gb3B0aW9uO1xuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKG9wdGlvbik7XG4gICAgICB0aGlzLnNob3dUZXh0ID0gb3B0aW9uLmxhYmVsIHx8IChvcHRpb24uaWQgPT09ICcnID8gJy0tZW1wdHktLScgOiBvcHRpb24pO1xuICAgICAgaWYgKHR5cGVvZiAob3B0aW9uKSA9PT0gJ29iamVjdCcgJiYgIW9wdGlvbi5pZCAmJiBvcHRpb24uaWQgIT09ICcnKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNob3dUZXh0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyKGV2Pykge1xuICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICBkZWxldGUgdGhpcy5zaG93VGV4dDtcbiAgICBpZiAoZXYpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvcGVuUmVzb3VyY2UoZXYpIHtcbiAgICBjb25zdCByZWZEaWFsb2dGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTWV0YVJlZkRpYWxvZyk7XG4gICAgdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLm9wZW5EaWFsb2coXG4gICAgICByZWZEaWFsb2dGYWN0b3J5LCB0aGlzLm1ldGFSZXNvdXJjZSwgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMubWV0YS5yZWZlcmVuY2UsIG51bGxcbiAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdPcHRpb25zID0gKHRoaXMubWV0YS5vcHRpb25zIHx8IFtdKS5maW5kKChvKSA9PiAoby5pZCA9PT0gcmVzdWx0LmlkICYmIG8udHlwZSA9PT0gcmVzdWx0LnR5cGUpKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nT3B0aW9ucykge1xuICAgICAgICAgIGV4aXN0aW5nT3B0aW9ucy5sYWJlbCA9IHJlc3VsdC5sYWJlbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIXRoaXMubWV0YS5vcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm1ldGEub3B0aW9ucyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm1ldGEub3B0aW9ucy51bnNoaWZ0KHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdChldiwgcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNob3dEcm9wZG93bigpIHtcbiAgICB0aGlzLmRyb3Bkb3duLmNsYXNzTGlzdC5hZGQoJ1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQnKTtcbiAgICBpZiAoIXRoaXMua2V5TGlzdGVuZXJBY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsaWNrb3V0KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgICB0aGlzLmtleUxpc3RlbmVyQWN0aXZlID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5tb2RlbCkge1xuICAgICAgICBmb3IgKGxldCBzdWdnZXN0aW9uSW5kZXggPSAwOyBzdWdnZXN0aW9uSW5kZXggPCB0aGlzLm9wdGlvbnMubGVuZ3RoOyBzdWdnZXN0aW9uSW5kZXgrKykge1xuICAgICAgICAgIGlmICh0aGlzLm1vZGVsID09PSB0aGlzLm9wdGlvbnNbc3VnZ2VzdGlvbkluZGV4XSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSBzdWdnZXN0aW9uSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlRHJvcGRvd25Jc1Zpc2libGUoKTtcbiAgfVxuXG4gIGRpc21pc3NEcm9wZG93bihldmVudD8pIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZSgnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCcpO1xuICAgIH1cbiAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gIH1cblxuICBvblNlYXJjaENoYW5nZSgpIHtcbiAgICBjb25zdCBzZWFyY2ggPSBuZXcgUmVnRXhwKHRoaXMuc2VhcmNoSW5wdXQsICdnaScpO1xuICAgIGlmICh0aGlzLnNlYXJjaElucHV0ID09PSAnJykge1xuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zQmFja3VwXTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnNCYWNrdXAuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24ubGFiZWwubWF0Y2goc2VhcmNoKSk7XG4gIH1cblxuICBjbGVhclNlYXJjaEZpZWxkKCkge1xuICAgIHRoaXMuc2VhcmNoSW5wdXQgPSAnJztcbiAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZURyb3Bkb3duSXNWaXNpYmxlKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgaG9sZGVyID0gdGhpcy5kcm9wZG93bi5jbG9zZXN0KCcuVmx0LWNhcmRfX2NvbnRlbnQnKTtcbiAgICAgIGlmIChob2xkZXIpIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuVmx0LWRyb3Bkb3duX19wYW5lbCcpO1xuICAgICAgICBjb25zdCBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgaG9sZGVyUmVjdCA9IGhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKGhvbGRlclJlY3QudG9wICsgaG9sZGVyUmVjdC5oZWlnaHQgPCBlbFJlY3QudG9wICsgZWxSZWN0LmhlaWdodCkge1xuICAgICAgICAgIGVsLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdlbmQnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgNDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlRHJvcGRvd25PcHRpb25Jc1Zpc2libGUoKSB7XG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyID0gdGhpcy5kcm9wZG93bi5xdWVyeVNlbGVjdG9yKCcuVmx0LWRyb3Bkb3duX19zY3JvbGwnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIgJiYgdHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBzY3JvbGxUb3AgPSA0NCAqIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgICAgY29uc3Qgc2Nyb2xsQm90dG9tID0gNDQgKiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggLSA3KTtcbiAgICAgIGlmIChzY3JvbGxUb3AgPCB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsQm90dG9tID4gdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3ApIHtcbiAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxCb3R0b207XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJPcHRpb25zKCkge1xuICAgIHRoaXMuYXN5bmNPcHRpb25zID0gW107XG4gICAgaWYgKCF0aGlzLmxvZ2ljYWxEaXNhYmxlZCkge1xuICAgICAgZm9yIChjb25zdCBvIG9mIHRoaXMubWV0YS5vcHRpb25zKSB7XG4gICAgICAgIGlmIChvLmZvcikge1xuICAgICAgICAgIGZvciAoY29uc3QgcGFyIG9mIE9iamVjdC5rZXlzKG8uZm9yKSkge1xuICAgICAgICAgICAgY29uc3QgcGFyVmFsdWUgPSB0aGlzLnBhcmVudFtwYXJdO1xuICAgICAgICAgICAgaWYgKG8uZm9yW3Bhcl0uaW5kZXhPZihwYXJWYWx1ZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMuYXN5bmNPcHRpb25zLnB1c2gobyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYXN5bmNPcHRpb25zLnB1c2gobyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsaWNrb3V0ID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKFxuICAgICAgZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSA9PT0gJ1ZsdC1kcm9wZG93bl9fbGluaycgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBldmVudC50YXJnZXQgIT09IHRoaXMuaW5wdXQgJiZcbiAgICAgICFldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdWbHQtZHJvcGRvd25fX2Jsb2NrJykgJiZcbiAgICAgICF0aGlzLmRldGVjdFNlYXJjaEJsb2NrKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRldGVjdFNlYXJjaEJsb2NrKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIGV2ZW50LnRhcmdldC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUga2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgrKztcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPj0gdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuc3VyZURyb3Bkb3duT3B0aW9uSXNWaXNpYmxlKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0Fycm93VXAnOiB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4LS07XG4gICAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICdTcGFjZSc6XG4gICAgICBjYXNlICcgJzoge1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLm9uT3B0aW9uU2VsZWN0KGV2ZW50LCB0aGlzLm9wdGlvbnNbdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXhdKTtcbiAgICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFc2NhcGUnOiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgc2VhcmNoT3B0aW9ucyhwYXJhbXM/KSB7XG4gICAgbGV0IHNlYXJjaFVybCA9IGAvZmllbGRzLyR7dGhpcy5tZXRhLm5hbWV9L3NlYXJjaGA7XG4gICAgaWYgKHRoaXMubWV0YS5zZWFyY2gpIHtcbiAgICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoLnVybCkge1xuICAgICAgICBzZWFyY2hVcmwgPSB0aGlzLm1ldGEuc2VhcmNoLnVybDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMubWV0YS5zZWFyY2gucGFyYW1zO1xuICAgICAgaWYgKHNlYXJjaFBhcmFtcykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhciBvZiBPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpKSB7XG4gICAgICAgICAgY29uc3QgdmFsID0gdGhpcy5wYXJlbnRbc2VhcmNoUGFyYW1zW3Bhcl1dO1xuICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHNlYXJjaFVybCArPSBgJHtzZWFyY2hVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJ30ke3Bhcn09JHt2YWwuaWQgfHwgdmFsfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlc291cmNlU2VydmljZS5nZXRCeVBhdGgoc2VhcmNoVXJsKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgIHRoaXMuYXN5bmNPcHRpb25zID0gb3B0aW9ucztcbiAgICAgIGxldCB2YWxpZFZhbHVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IG8gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmICgoby5pZCB8fCBvKSA9PT0gKHRoaXMudmFsdWUuaWQgfHwgdGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkVmFsdWUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbGlkVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaGluZztcbiAgICB9KTtcbiAgfVxuXG59XG5cbi8vLy8gRklFTEQgUkVGRVJFTkNFXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpZWxkUmVmZXJlbmNlL3ZpZXcuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpZWxkUmVmZXJlbmNlL3N0eWxlLnNjc3MnXSxcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XVxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZFJlZmVyZW5jZSBleHRlbmRzIEZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICBpbnB1dDogYW55O1xuICBkcm9wZG93bjogSFRNTEVsZW1lbnQ7XG4gIGRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgc2VhcmNoaW5nOiBib29sZWFuO1xuICBzZWFyY2hSZXNvdXJjZVR5cGU6IGFueSA9IHt9O1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIHNlYXJjaFJlc3VsdHM6IEFycmF5PGFueT47XG4gIHNlYXJjaEVycm9yOiBhbnk7XG4gIGFjdGl2ZVN1Z2dlc3Rpb25JbmRleDogbnVtYmVyO1xuICBzZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGU6IHN0cmluZztcbiAgc2VhcmNoVGV4dENoYW5nZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgaXNDcmVhdGFibGUgPSBmYWxzZTtcbiAgdmFsdWU6IGFueTtcbiAgaXNQb2x5bW9ycGhpYzogYm9vbGVhbjtcbiAgaXNTZWFyY2hhYmxlOiBib29sZWFuO1xuICBtdWx0aXBsZTogYm9vbGVhbjtcbiAgdnI6IE1ldGFSZXNvdXJjZVNlcnZpY2U7XG4gIGV4dGVybmFsTGluazogc3RyaW5nO1xuICBkcm9wZG93blZpc2libGUgPSBmYWxzZTtcbiAgc2VhcmNoUmVzb3VyY2VUeXBlTWV0YTogYW55ID0ge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIG5hbWU6ICdyZXNvdXJjZVR5cGUnLFxuICAgIGxhYmVsOiAnVHlwZScsXG4gICAgb3B0aW9uczogW10sIC8vIHsgbGFiZWw6ICctLSBBbGwgdHlwZXMgLS0nIH1dLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbiAgfTtcbiAgZmlsdGVyZWRTdWdnZXN0aW9uczogQXJyYXk8YW55PiA9IFtdO1xuICBwbGFjZUhvbGRlckxhYmVsOiBzdHJpbmc7XG4gIGFzeW5jU3VnZ2VzdGlvbnM6IEFycmF5PGFueT47XG4gIHNtYXJ0U3VnZ2VzdGlvbnM6IEFycmF5PGFueT4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogTWV0YVJlZmVyZW5jZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2U6IE1ldGFSZXNvdXJjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhTXNnU2VydmljZTogTWV0YU1zZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhQ29udGV4dDogTWV0YUNvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YVRyYWNrZXI6IE1ldGFUcmFja2VyU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIGNvbnN0IHN1cGVyRGlzYWJsZWQgPSB0aGlzLmxvZ2ljYWxEaXNhYmxlZCB8fCB0aGlzLnZhbGlkYXRpb25zLmRpc2FibGVkIHx8IHRoaXMubWV0YS5kaXNhYmxlZCA9PT0gdHJ1ZVxuICAgICAgfHwgKHRoaXMubWV0YS51cGRhdGFibGUgPT09IGZhbHNlICYmIHRoaXMuaXNQZXJzaXN0ZWRQYXJlbnQpO1xuICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlTWV0YS5kaXNhYmxlZCA9IHN1cGVyRGlzYWJsZWQ7XG4gICAgcmV0dXJuIHN1cGVyRGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgc2hvd1R5cGVzKCkge1xuICAgIHJldHVybiAodHlwZW9mICh0aGlzLm1ldGEuc2hvd1R5cGVzKSAhPT0gJ3VuZGVmaW5lZCcpID8gdGhpcy5tZXRhLnNob3dUeXBlcyA6IHRydWU7XG4gIH1cblxuICBnZXQgc3VnZ2VzdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc21hcnRTdWdnZXN0aW9ucy5jb25jYXQoXG4gICAgICAhdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlID9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAodGhpcy5hc3luY1N1Z2dlc3Rpb25zIHx8IHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkgOiAodGhpcy5hc3luY1N1Z2dlc3Rpb25zIHx8IHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkuZmlsdGVyKChzKSA9PiBzLnR5cGUgPT09IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSlcbiAgICApO1xuICB9XG5cbiAgZ2V0IGhhc0FwcGVuZEJ1dHRvbigpIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgdGhpcy5tb2RlbCkge1xuICAgICAgaWYgKHRoaXMuaXNQb2x5bW9ycGhpYykge1xuICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzLm1ldGFSZWZlcmVuY2UpIHtcbiAgICAgICAgICBpZiAoKHJlZi5uYW1lIHx8IHJlZi5yZXNvdXJjZVR5cGUpID09PSAodGhpcy5tb2RlbC50eXBlIHx8IHRoaXMubW9kZWwucmVzb3VyY2VUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZi51cGRhdGFibGUgfHwgKHJlZi5jcmVhdGFibGUgJiYgcmVmLnVwZGF0YWJsZSAhPT0gZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YVJlZmVyZW5jZS51cGRhdGFibGUgfHwgKHRoaXMubWV0YVJlZmVyZW5jZS5jcmVhdGFibGUgJiYgdGhpcy5tZXRhUmVmZXJlbmNlLnVwZGF0YWJsZSAhPT0gZmFsc2UpOyAvLyBWR0lTLTY5MTFcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMubWV0YVJlZmVyZW5jZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UubWFwKHJ0ID0+IHJ0Lm5hbWUpLmpvaW4oJywnKTtcbiAgICAgIC8vIH0sIDApO1xuICAgICAgZm9yIChjb25zdCBydCBvZiB0aGlzLm1ldGFSZWZlcmVuY2UpIHtcbiAgICAgICAgaWYgKHJ0LmNyZWF0YWJsZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGFSZWZlcmVuY2UuY3JlYXRhYmxlO1xuICAgIH1cbiAgfVxuXG4gIGdldCByZXNvdXJjZVNlcnZpY2UoKSB7XG4gICAgaWYgKCF0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IG1ldGFSZXNvdXJjZUNvbmZpZzogSU1ldGFSZXNvdXJjZUNvbmZpZyA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25Db2RlOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiB0aGlzLnJlc291cmNlVHlwZVxuICAgICAgfTtcbiAgICAgIHRoaXMubWV0YVJlc291cmNlU2VydmljZSA9IHRoaXMubWV0YVJlc291cmNlLm5ldyhtZXRhUmVzb3VyY2VDb25maWcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0IG1ldGFSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YS5yZWZlcmVuY2UgfHwge307XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm11bHRpcGxlID0gKHRoaXMubWV0YS50eXBlID09PSAnbXVsdGlyZWZlcmVuY2UnKSB8fCB0aGlzLm1ldGEubXVsdGlwbGU7XG4gICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVNZXRhLmxhYmVsID0gdGhpcy5tZXRhLmxhYmVsO1xuICAgIGlmICghdGhpcy5tZXRhLnZhbHVlVHlwZSkge1xuICAgICAgLy8gdGhpcy5tZXRhLnZhbHVlVHlwZSA9ICdvYmplY3QnO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YSwgJ3ZhbHVlVHlwZScsIHtcbiAgICAgICAgdmFsdWU6ICdvYmplY3QnXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWV0YVJlZmVyZW5jZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICB0aGlzLmlzUG9seW1vcnBoaWMgPSB0cnVlO1xuICAgICAgdGhpcy5pc1NlYXJjaGFibGUgPSB0cnVlO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UubWFwKHJ0ID0+IHJ0Lm5hbWUpLmpvaW4oJywnKTtcbiAgICAgIGZvciAoY29uc3QgcnQgb2YgdGhpcy5tZXRhUmVmZXJlbmNlKSB7XG4gICAgICAgIGlmIChydC5jcmVhdGFibGUpIHtcbiAgICAgICAgICB0aGlzLmlzQ3JlYXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodHlwZW9mIChydC5zZWFyY2hhYmxlKSAhPT0gJ3VuZGVmaW5lZCcgJiYgIXJ0LnNlYXJjaGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hhYmxlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm1ldGFSZWZlcmVuY2UuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZU1ldGEub3B0aW9ucy5wdXNoKHsgaWQ6IHIubmFtZSwgbGFiZWw6IHIubGFiZWwgfHwgci5uYW1lIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNTZWFyY2hhYmxlID0gdHlwZW9mICh0aGlzLm1ldGFSZWZlcmVuY2Uuc2VhcmNoYWJsZSkgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMubWV0YVJlZmVyZW5jZS5zZWFyY2hhYmxlO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUgPSB0aGlzLm1ldGFSZWZlcmVuY2U7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5uYW1lIHx8IHRoaXMubWV0YVJlZmVyZW5jZS5yZXNvdXJjZVR5cGU7XG4gICAgICB0aGlzLmlzQ3JlYXRhYmxlID0gdGhpcy5tZXRhUmVmZXJlbmNlLmNyZWF0YWJsZTtcbiAgICB9XG4gICAgdGhpcy5idWlsZFBsYWNlaG9sZGVyTGFiZWwoKTtcbiAgICB0aGlzLnNlYXJjaFRleHRDaGFuZ2VkLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWU7XG4gICAgICB0aGlzLnNlYXJjaCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IG9yaWdWYWx1ZSA9IHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXTtcblxuICAgIC8vIHRoaXMuc3VnZ2VzdGlvbnMgPSB0aGlzLm1ldGEuc3VnZ2VzdGlvbnM7IC8vIFRPRE8gZmlsdGVyIGJ5IGRlZmF1bHQgdHlwZVxuICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLnN1Z2dlc3Rpb25zJywgdGhpcy5zdWdnZXN0aW9ucyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wYXJlbnQsIHRoaXMubWV0YS5uYW1lLCB7XG4gICAgICBzZXQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodikgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGlkOiB2LFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHYsXG4gICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLm1ldGFSZWZlcmVuY2UubmFtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gbnVsbDsgLy8gcHJvdGVjdCB3aGVuIHZhbHVlIGZyb20gc2VydmVyIGlzIG5vdCBhcnJheVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHtcbiAgICAgICAgICAgICAgaWQ6IHZhbHVlLFxuICAgICAgICAgICAgICBsYWJlbDogdmFsdWUsIC8vIGNvdWxkIGJlIGZvdW5kIHdpdGggZXh0cmEgY2FsbFxuICAgICAgICAgICAgICB0eXBlOiB0aGlzLm1ldGFSZWZlcmVuY2UubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWUgPyAoKCF2YWx1ZS5sYWJlbCB8fCB2YWx1ZS5sYWJlbCA9PT0gJyAnKSA/IGBOL0EgKCR7dmFsdWUudHlwZX0jJHt2YWx1ZS5pZH0pYCA6IHZhbHVlLmxhYmVsIHx8IHZhbHVlKSA6ICcnO1xuICAgICAgICAgIC8vIGlmICh0aGlzLmlzUG9seW1vcnBoaWMgJiYgdGhpcy5tb2RlbCkgeyAvL1RPRE8gc2hvdyBvciBub3Q/XG4gICAgICAgICAgLy8gICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5maW5kKChydCk9PiB7XG4gICAgICAgICAgLy8gICAgIHJldHVybiBydC5uYW1lID09PSB0aGlzLm1vZGVsLnR5cGU7XG4gICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbCA9IHZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tb2RlbFRvVmFsdWUodmFsdWUsIHRoaXMubWV0YS52YWx1ZVR5cGUgfHwgJ29iamVjdCcpO1xuICAgICAgICAgIHRoaXMuYnVpbGRFeHRlcm5hbExpbmsoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gIXRoaXMubW9kZWwgPyB0aGlzLm1vZGVsIDogdGhpcy5tb2RlbC5tYXAoKG0pID0+IHRoaXMubW9kZWxUb1ZhbHVlKG0sIHRoaXMubWV0YS52YWx1ZVR5cGUgfHwgJ29iamVjdCcpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1ldGEuJG9wdGlvbmFsID0gdGhpcy5pc09wdGlvbmFsO1xuICAgICAgfSxcbiAgICAgIGdldDogKCkgPT4gdGhpcy52YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRoaXMuc2VuZFRvU2VydmVyLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKG9yaWdWYWx1ZSkge1xuICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gb3JpZ1ZhbHVlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgdGhpcy5kZWZhdWx0KSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdC5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGR2IG9mIHRoaXMuZGVmYXVsdCkge1xuICAgICAgICAgICAgaWYgKChkdi5pZCB8fCBkdi52YWx1ZSkgJiYgZHYudHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCBpdGVtOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IGR2LmlkIHx8IGR2LnZhbHVlLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBkdi5sYWJlbCB8fCBkdi5pZCB8fCBkdi52YWx1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBkdi50eXBlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGlmIChkdi5leHRlcm5hbExpbmspIHtcbiAgICAgICAgICAgICAgICBpdGVtLmV4dGVybmFsTGluayA9IGR2LmV4dGVybmFsTGluaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0ucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0LmlkICYmIHRoaXMuZGVmYXVsdC5sYWJlbCAmJiB0aGlzLmRlZmF1bHQudHlwZSkge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbTogYW55ID0ge1xuICAgICAgICAgICAgICBpZDogdGhpcy5kZWZhdWx0LmlkIHx8IHRoaXMuZGVmYXVsdC52YWx1ZSxcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGVmYXVsdC5sYWJlbCB8fCB0aGlzLmRlZmF1bHQuaWQgfHwgdGhpcy5kZWZhdWx0LnZhbHVlLFxuICAgICAgICAgICAgICB0eXBlOiB0aGlzLmRlZmF1bHQudHlwZSxcbiAgICAgICAgICAgICAgc21hcnQ6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5kZWZhdWx0LmV4dGVybmFsTGluaykge1xuICAgICAgICAgICAgICBpdGVtLmV4dGVybmFsTGluayA9IHRoaXMuZGVmYXVsdC5leHRlcm5hbExpbms7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBpdGVtO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybignISEhZGVmYXVsdCB2YWx1ZSBpcyBub3QgdmFsaWQgZm9ybWF0JywgdGhpcy5tZXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgKHRoaXMubWV0YS5kaXNhYmxlZCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiAodGhpcy5tZXRhLmRpc2FibGVkKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIE9iamVjdC5rZXlzKHRoaXMubWV0YS5kaXNhYmxlZCkpIHtcbiAgICAgICAgICBjb25zdCBwcm9wcyA9IHAuc3BsaXQoJy4nKTtcbiAgICAgICAgICBpZiAodHlwZW9mICh0aGlzLnBhcmVudFtwcm9wc1swXV0pICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbGV0IHZhbCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHByb3BzKSB7XG4gICAgICAgICAgICAgIHZhbCA9IHZhbFtwcm9wXTtcbiAgICAgICAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gdGhpcy5tZXRhLmRpc2FibGVkW3BdKSB7XG4gICAgICAgICAgICAgIHRoaXMubG9naWNhbERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KHByb3BzWzBdKSkge1xuICAgICAgICAgICAgICBsZXQgdmFsID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgIHZhbCA9IHZhbFtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh2YWwgPT09IHRoaXMubWV0YS5kaXNhYmxlZFtwXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9naWNhbERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubG9naWNhbERpc2FibGVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5tZXRhLmF1dG8gJiYgdGhpcy5tZXRhLmF1dG8uc2VhcmNoKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLm1ldGEuYXV0by5zZWFyY2gucGFyYW1zO1xuICAgICAgaWYgKHNlYXJjaFBhcmFtcykge1xuICAgICAgICBmb3IgKGNvbnN0IHBhciBvZiBPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpKSB7XG4gICAgICAgICAgY29uc3QgcHJvcHMgPSBzZWFyY2hQYXJhbXNbcGFyXS5zcGxpdCgnLicpO1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gcHJvcHNbMF07XG4gICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzWzFdO1xuICAgICAgICAgIGxldCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W2ZpZWxkXTtcbiAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgICAgICAgIHBhclZhbHVlID0gcGFyVmFsdWVbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICAgICAgICAgIHBhcmFtc1twYXJdID0gcGFyVmFsdWU7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoQXV0b1N1Z2dlc3Rpb25zKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGFyZW50Q2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZVtmaWVsZF0pIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgICAgICAgdmFsdWVbZmllbGRdID0gdmFsdWVbZmllbGRdW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgICAgICAgICAgICBwYXJhbXNbcGFyXSA9IHZhbHVlW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEF1dG9TdWdnZXN0aW9ucyhwYXJhbXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbGVhclNlYXJjaFJlc291cmNlVHlwZSgpIHtcbiAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHt9O1xuICAgIHRoaXMub25TZWFyY2hSZXNvdXJjZVR5cGVDaGFuZ2VkKCk7XG4gIH1cblxuICBvblNlYXJjaFJlc291cmNlVHlwZUNoYW5nZWQocmVzb3VyY2VUeXBlPykge1xuICAgIGlmICghcmVzb3VyY2VUeXBlIHx8ICFyZXNvdXJjZVR5cGUuaWQpIHtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA9IG51bGw7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9ICh0aGlzLm1ldGFSZWZlcmVuY2UgfHwgW10pLm1hcChydCA9PiBydC5uYW1lKS5qb2luKCcsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA9IHJlc291cmNlVHlwZS5pZDtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gcmVzb3VyY2VUeXBlLmlkO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUGxhY2Vob2xkZXJMYWJlbCgpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgIXRoaXMuc2VhcmNoVGV4dCkgeyAvLyBmaWx0ZXIgc3VnZ2VzdGlvbnMgYnkgdHlwZVxuICAgICAgdGhpcy5maWx0ZXJlZFN1Z2dlc3Rpb25zID0gIXJlc291cmNlVHlwZSA/ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pIDogKHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkuZmlsdGVyKFxuICAgICAgICAocykgPT4gcy50eXBlID09PSByZXNvdXJjZVR5cGUuaWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHsgLy8gcmVndWxhciBzZWFyY2ggKHJldHVybiBzY29wZWQgcmVzdWx0cylcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLnNlYXJjaCgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaFJlc3VsdHMgJiYgcmVzb3VyY2VUeXBlKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IHRoaXMuc2VhcmNoUmVzdWx0cy5maWx0ZXIoKHMpID0+IHMudHlwZSA9PT0gcmVzb3VyY2VUeXBlLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlIHRoaXMuc2VhcmNoRXJyb3I7XG4gIH1cblxuICBvblNlYXJjaFRleHRDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlYXJjaFRleHRDaGFuZ2VkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgc2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICAvLyB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICBpZiAoIXRoaXMuc2VhcmNoVGV4dCB8fCB0aGlzLnNlYXJjaFRleHQubGVuZ3RoIDwgMikge1xuICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFJlc3VsdHM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNob3dTZWFyY2hSZXN1bHRzID0gKHJlc3VsdHMpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hFcnJvcjtcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICAgIGlmICghcmVzdWx0cyB8fCAhKHJlc3VsdHMgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWV0YS5hY2NlcHROZXcgJiYgdGhpcy5tZXRhLmFjY2VwdE5ldy50eXBlICYmIHRoaXMubWV0YS5hY2NlcHROZXcucGF0dGVybikge1xuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodGhpcy5tZXRhLmFjY2VwdE5ldy5wYXR0ZXJuKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QodGhpcy5zZWFyY2hUZXh0KSkge1xuICAgICAgICAgIHJlc3VsdHMudW5zaGlmdCh7IGlkOiBudWxsLCBsYWJlbDogdGhpcy5zZWFyY2hUZXh0LCB0eXBlOiB0aGlzLm1ldGEuYWNjZXB0TmV3LnR5cGUgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IHJlc3VsdHMubWFwKChyKSA9PiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgYXJyb3ctYm9keS1zdHlsZVxuICAgICAgICByZXR1cm4geyBpZDogci5pZCwgbGFiZWw6IHIubGFiZWwsIHR5cGU6IHIudHlwZSB8fCByLnJlc291cmNlVHlwZSB8fCB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5uYW1lLCBleHRlcm5hbExpbms6IHIuZXh0ZXJuYWxMaW5rIH07XG4gICAgICB9KTtcbiAgICAgIGlmICghL1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQvLnRlc3QodGhpcy5kcm9wZG93bi5jbGFzc05hbWUpKSB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLm1ldGEuc2VhcmNoLnBhcmFtcyB8fCB7fTtcbiAgICAgIGxldCBzZWFyY2hVcmwgPSBgL2ZpZWxkcy8ke3RoaXMubWV0YS5uYW1lfS9zZWFyY2hgO1xuICAgICAgaWYgKHRoaXMubWV0YS5zZWFyY2gudXJsKSB7XG4gICAgICAgIHNlYXJjaFVybCA9IHRoaXMubWV0YS5zZWFyY2gudXJsLnJlcGxhY2UoL1xcJHtcXHMqKFtcXHdcXC5dKylcXHMqfS9nLCAobWF0Y2gsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChzZWFyY2hQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBzZWFyY2hQYXJhbXNba2V5XS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBwcm9wc1swXTtcbiAgICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1sxXTtcbiAgICAgICAgICAgIGRlbGV0ZSBzZWFyY2hQYXJhbXNba2V5XTsgLy8gaWYgaXQgaXMgVVJMIHBhcmFtLCByZW1vdmUgaXQgYXMgcXVlcnkgcGFyYW1cbiAgICAgICAgICAgIGxldCBwYXJWYWx1ZSA9IHRoaXMucGFyZW50W2ZpZWxkXTtcbiAgICAgICAgICAgIGlmIChwYXJWYWx1ZSkge1xuICAgICAgICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgICAgIHBhclZhbHVlID0gcGFyVmFsdWVbcHJvcF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHBhclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhclZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgT2JqZWN0LmtleXMoc2VhcmNoUGFyYW1zKSkge1xuICAgICAgICBzZWFyY2hVcmwgKz0gYCR7c2VhcmNoVXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJid9JHtlbmNvZGVVUklDb21wb25lbnQocCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHNlYXJjaFBhcmFtc1twXSl9YDtcbiAgICAgIH1cbiAgICAgIHNlYXJjaFVybCArPSBgJHtzZWFyY2hVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJ31xPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuc2VhcmNoVGV4dCl9YDtcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldEJ5UGF0aChzZWFyY2hVcmwpLnN1YnNjcmliZSgocmVzdWx0cykgPT4ge1xuICAgICAgICBzaG93U2VhcmNoUmVzdWx0cyhyZXN1bHRzKTtcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5zZWFyY2hpbmc7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IFtdO1xuICAgICAgICB0aGlzLnNlYXJjaEVycm9yID0gZXJyb3IuZXJyb3IgPyBlcnJvci5lcnJvci5tZXNzYWdlIHx8IGVycm9yLmVycm9yIDogZXJyb3IubWVzc2FnZSB8fCBlcnJvcjtcbiAgICAgICAgaWYgKCEvVmx0LWRyb3Bkb3duLS1leHBhbmRlZC8udGVzdCh0aGlzLmRyb3Bkb3duLmNsYXNzTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLnZyKSB7XG4gICAgICAgIHRoaXMudnIgPSB0aGlzLm1ldGFSZXNvdXJjZS5uZXcoe1xuICAgICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgICAgcmVzb3VyY2VUeXBlOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy52ci5zZWFyY2hJbnRlZ3JhdGlvbihcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5uYW1lIHx8IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlXG4gICAgICApLnN1YnNjcmliZSgocmVzdWx0czogQXJyYXk8YW55PikgPT4ge1xuICAgICAgICBzaG93U2VhcmNoUmVzdWx0cyhyZXN1bHRzKTtcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWFyY2hFcnJvciA9IGVycm9yLmVycm9yID8gZXJyb3IuZXJyb3IubWVzc2FnZSB8fCBlcnJvci5lcnJvciA6IGVycm9yLm1lc3NhZ2UgfHwgZXJyb3I7XG4gICAgICAgIGlmICghL1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQvLnRlc3QodGhpcy5kcm9wZG93bi5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25BY3RpdmF0ZWQoZXYpIHtcbiAgICAvLyBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIC8vIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaW5wdXQgPSBldi5zcmNFbGVtZW50O1xuICAgIGlmICghdGhpcy5kcm9wZG93bikge1xuICAgICAgLy8gdGhpcy5kcm9wZG93biA9IGV2LnNyY0VsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgdGhpcy5kcm9wZG93biA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kcm9wZG93bi13cmFwcGVyJyk7XG4gICAgfVxuICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gIH1cblxuICBvbkJsdXIoZXYpIHtcbiAgICBsZXQgaW50ZXJuYWxDb250cm9sID0gZmFsc2U7XG4gICAgaWYgKGV2LnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXYucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVybmFsQ29udHJvbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmtleUxpc3RlbmVyQWN0aXZlICYmICFpbnRlcm5hbENvbnRyb2wpIHtcbiAgICAgIHRoaXMuaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmtleUxpc3RlbmVyQWN0aXZlKSB7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsaWNrb3V0KTtcbiAgICAgICAgfVxuICAgICAgfSwgNDAwKTtcbiAgICAgIGRlbGV0ZSB0aGlzLmtleUxpc3RlbmVyQWN0aXZlO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5tb2RlbCAmJiAhdGhpcy5zdWdnZXN0aW9ucy5maW5kKChzKSA9PiAocy5pZCA9PT0gdGhpcy5tb2RlbC5pZCAmJiBzLnR5cGUgPT09IHRoaXMubW9kZWwudHlwZSkpKSB7XG4gICAgICB0aGlzLnNtYXJ0U3VnZ2VzdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiB0aGlzLm1vZGVsLmlkLFxuICAgICAgICBsYWJlbDogdGhpcy5tb2RlbC5sYWJlbCxcbiAgICAgICAgdHlwZTogdGhpcy5tb2RlbC50eXBlLFxuICAgICAgICBzbWFydDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudCgnUkVNT1ZFJykpO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIG9uU3VnZ2VzdGlvblNlbGVjdChldiwgc3VnZ2VzdGlvbikge1xuICAgIGlmICghc3VnZ2VzdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQoJ1NFTEVDVCcpKTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgIH1cbiAgICAgIGxldCBleGlzdGluZ0VudHJ5O1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLm1vZGVsKSB7XG4gICAgICAgIGlmIChzdWdnZXN0aW9uLmlkICYmIChlbnRyeS5pZCA9PT0gc3VnZ2VzdGlvbi5pZCkpIHtcbiAgICAgICAgICBleGlzdGluZ0VudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VnZ2VzdGlvbi5sYWJlbCA9PT0gZW50cnkubGFiZWwpIHsgLy8gY3JlYXRlIG5ldyAoZ29vZ2xlIGVtYWlscylcbiAgICAgICAgICBleGlzdGluZ0VudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZXhpc3RpbmdFbnRyeSkge1xuICAgICAgICB0aGlzLm1vZGVsLnB1c2goc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hUZXh0O1xuICAgICAgdGhpcy5zZWFyY2hUZXh0Q2hhbmdlZC5uZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZWwgPSBzdWdnZXN0aW9uO1xuICAgICAgdGhpcy5leHRlcm5hbExpbmsgPSBzdWdnZXN0aW9uLmV4dGVybmFsTGluaztcbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZShzdWdnZXN0aW9uKTtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHN1Z2dlc3Rpb24ubGFiZWw7XG4gICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykuaW5kZXhPZihzdWdnZXN0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAvLyBpZiAodGhpcy5pc1BvbHltb3JwaGljKSB7XG4gICAgLy8gICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5maW5kKChydCk9PiB7XG4gICAgLy8gICAgIHJldHVybiBydC5uYW1lID09PSBzdWdnZXN0aW9uLnR5cGU7XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG4gIH1cblxuICBzaG93RHJvcGRvd24oKSB7XG4gICAgdGhpcy5kcm9wZG93blZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCcpO1xuICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgdGhpcy5pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuY2xpY2tvdXQpO1xuICAgICAgfSwgMjAwKTtcbiAgICAgIHRoaXMua2V5TGlzdGVuZXJBY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbCAmJiAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICAgIGZvciAobGV0IHN1Z2dlc3Rpb25JbmRleCA9IDA7IHN1Z2dlc3Rpb25JbmRleCA8ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykubGVuZ3RoOyBzdWdnZXN0aW9uSW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpW3N1Z2dlc3Rpb25JbmRleF07XG4gICAgICAgICAgaWYgKHRoaXMubW9kZWwuaWQgPT09IGl0ZW0uaWQgJiYgdGhpcy5tb2RlbC50eXBlID09PSBpdGVtLnR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gc3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlRHJvcGRvd25Jc1Zpc2libGUoKTtcbiAgfVxuXG4gIGRpc21pc3NEcm9wZG93bihldmVudD8pIHtcbiAgICB0aGlzLmRyb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93bikge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5wcmV2TW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFRleHQ7XG4gICAgZGVsZXRlIHRoaXMuc2VhcmNoUmVzdWx0cztcbiAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIHRoaXMub25TZWFyY2hUZXh0Q2hhbmdlZCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIHJldmVydCgpIHtcbiAgICB0aGlzLm1vZGVsID0gdGhpcy5wcmV2TW9kZWw7XG4gICAgZGVsZXRlIHRoaXMucHJldk1vZGVsO1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICByZW1vdmUoZXYsIGl0ZW0pIHtcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5tb2RlbC5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChvcHRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMubW9kZWwuc3BsaWNlKG9wdGlvbkluZGV4LCAxKTtcbiAgICAgIGlmICghdGhpcy5tb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5SZXNvdXJjZShtb2RlbD8pIHtcbiAgICB0aGlzLmtleUxpc3RlbmVyQWN0aXZlID0gdHJ1ZTsgLy8gc3VwcHJlc3MgZHJvcGRvd24gaW4gdGhpcyBjYXNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlZkRpYWxvZ0ZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShNZXRhUmVmRGlhbG9nKTtcbiAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQobW9kZWwgPyAnRURJVCcgOiAnTkVXJykpO1xuICAgIGxldCB0aGVtZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRhdGFzZXQudGhlbWU7XG4gICAgaWYgKCF0aGVtZSB8fCB0aGVtZSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICBsZXQgcGFyZW50Q29tcG9uZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgndmdpcC1tZXRhLWxheW91dCcpO1xuICAgICAgaWYgKHBhcmVudENvbXBvbmVudCkge1xuICAgICAgICB0aGVtZSA9IHBhcmVudENvbXBvbmVudC5kYXRhc2V0LnRoZW1lO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGVtZSB8fCB0aGVtZSA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICAgIHBhcmVudENvbXBvbmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3ZnaXAtbWV0YS1yZXNvdXJjZScpO1xuICAgICAgICBpZiAocGFyZW50Q29tcG9uZW50KSB7XG4gICAgICAgICAgdGhlbWUgPSBwYXJlbnRDb21wb25lbnQuZGF0YXNldC50aGVtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlZmVyZW5jZVNlcnZpY2Uub3BlbkRpYWxvZyhcbiAgICAgIHJlZkRpYWxvZ0ZhY3RvcnksIHRoaXMubWV0YVJlc291cmNlLCB0aGlzLmludGVncmF0aW9uQ29kZSwgdGhpcy5tZXRhUmVmZXJlbmNlLCBtb2RlbCwgbnVsbCwgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlLFxuICAgICAgdGhlbWVcbiAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gcmVzdWx0O1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQocmVzdWx0KTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdTdWdnZXN0aW9uID0gKHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkuZmluZCgocykgPT4gKHMuaWQgPT09IHJlc3VsdC5pZCAmJiBzLnR5cGUgPT09IHJlc3VsdC50eXBlKSk7XG4gICAgICAgIGlmIChleGlzdGluZ1N1Z2dlc3Rpb24pIHtcbiAgICAgICAgICBleGlzdGluZ1N1Z2dlc3Rpb24ubGFiZWwgPSByZXN1bHQubGFiZWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLm1ldGEuc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubWV0YS5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMudW5zaGlmdChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudChtb2RlbCA/ICdVUERBVEUnIDogJ0NSRUFURScsIHJlc3VsdC50eXBlIHx8IHJlc3VsdC5yZXNvdXJjZVR5cGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudChtb2RlbCA/ICdDQU5DRUxfRURJVCcgOiAnQ0FOQ0VMX1VQREFURScpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlRHJvcGRvd25Jc1Zpc2libGUoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBob2xkZXIgPSB0aGlzLmRyb3Bkb3duLmNsb3Nlc3QoJy5WbHQtY2FyZF9fY29udGVudCcpO1xuICAgICAgaWYgKGhvbGRlcikge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZHJvcGRvd25fX3BhbmVsJyk7XG4gICAgICAgIGNvbnN0IGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBob2xkZXJSZWN0ID0gaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAoaG9sZGVyUmVjdC50b3AgKyBob2xkZXJSZWN0LmhlaWdodCA8IGVsUmVjdC50b3AgKyBlbFJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ2VuZCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCA0MDApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIgPSB0aGlzLmRyb3Bkb3duLnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZHJvcGRvd25fX3Njcm9sbCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lciAmJiB0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IDQ0ICogdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICBjb25zdCBzY3JvbGxCb3R0b20gPSA0NCAqICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCAtIDcpO1xuICAgICAgaWYgKHNjcm9sbFRvcCA8IHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgfSBlbHNlIGlmIChzY3JvbGxCb3R0b20gPiB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IHNjcm9sbEJvdHRvbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsaWNrb3V0ID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgaW50ZXJuYWxDb250cm9sID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoaW50ZXJuYWxDb250cm9sICYmIFsnVmx0LWRyb3Bkb3duX19saW5rJywgJ1ZsdC1kcm9wZG93bl9fYmxvY2snXS5pbmRleE9mKGV2ZW50LnRhcmdldC5jbGFzc05hbWUpICE9PSAtMSkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoIWludGVybmFsQ29udHJvbCAmJiBldmVudC50YXJnZXQgIT09IHRoaXMuaW5wdXQgJiYgZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSAhPT0gJ1ZsdC1kcm9wZG93bl9fdGl0bGUnKSB7XG4gICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWludGVybmFsQ29udHJvbCAmJiBpbnRlcm5hbENvbnRyb2wudGFnTmFtZSAhPT0gJ0lOUFVUJykge1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgYnVpbGRUcmFja0V2ZW50KGFjdGlvbjogc3RyaW5nLCB2YWx1ZT86IHN0cmluZykge1xuICAgIGNvbnN0IGU6IElNZXRhVHJhY2tlckV2ZW50ID0ge1xuICAgICAgaW50ZWdyYXRpb246IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgcmVzb3VyY2U6IHRoaXMubW9kZWwgPyAodGhpcy5tb2RlbC50eXBlIHx8IHRoaXMubW9kZWwucmVzb3VyY2VUeXBlKSA6IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSxcbiAgICAgIGZpZWxkOiB0aGlzLm1ldGEubmFtZSxcbiAgICAgIGFjdGlvblxuICAgIH07XG4gICAgaWYgKHRoaXMubWV0YS4kaXNDb250YWN0YWJsZSkge1xuICAgICAgZS5pc0NvbnRhY3RhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiAodmFsdWUpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQbGFjZWhvbGRlckxhYmVsKCkge1xuICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCA9IHRoaXMubWV0YS5sYWJlbDtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5pc1BvbHltb3JwaGljKSB7XG4gICAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgPSAnK0FkZCAnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgPSAodGhpcy5pc1NlYXJjaGFibGUgJiYgKHRoaXMubXVsdGlwbGUgfHwgIXRoaXMuaXNQb2x5bW9ycGhpYykpID8gJ1NlYXJjaCAnIDogJyc7XG4gICAgfVxuICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCArPSB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgPyB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgOiB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZTtcbiAgfVxuXG4gIHByaXZhdGUga2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgrKztcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPj0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgtLTtcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdTcGFjZSc6XG4gICAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5vblN1Z2dlc3Rpb25TZWxlY3QoZXZlbnQsICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucylbdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXhdKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFc2NhcGUnOiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6IHtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIHRoaXMubW9kZWwpIHsgLy8gSFBCUi04MjI5XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGJ1aWxkRXh0ZXJuYWxMaW5rKCkge1xuICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbC5leHRlcm5hbExpbmspIHtcbiAgICAgICAgdGhpcy5leHRlcm5hbExpbmsgPSB0aGlzLm1vZGVsLmV4dGVybmFsTGluaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZS50b1VwcGVyQ2FzZSgpXSkge1xuICAgICAgICBkZWxldGUgdGhpcy5leHRlcm5hbExpbms7XG4gICAgICAgIHRoaXMubWV0YU1zZ1NlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdidWlsZEV4dGVybmFsTGluaycsXG4gICAgICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgICAgcmVmOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgcHJvZmlsZTogdGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZS50b1VwcGVyQ2FzZSgpXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxMaW5rID0gcmVzcG9uc2UuZXh0ZXJuYWxMaW5rO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBleHRlcm5hbCBsaW5rIHN1cHBvcnQgZm9yJywgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMubW9kZWwucmVzb3VyY2VUeXBlIHx8IHRoaXMubW9kZWwudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5leHRlcm5hbExpbms7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWFyY2hBdXRvU3VnZ2VzdGlvbnMocGFyYW1zPykge1xuICAgIGxldCBzZWFyY2hVcmwgPSBgL3N1Z2dlc3Rpb25zLyR7dGhpcy5tZXRhLm5hbWV9L3NlYXJjaGA7XG4gICAgaWYgKHRoaXMubWV0YS5hdXRvICYmIHRoaXMubWV0YS5hdXRvLnNlYXJjaCkge1xuICAgICAgaWYgKHRoaXMubWV0YS5hdXRvLnNlYXJjaC51cmwpIHtcbiAgICAgICAgc2VhcmNoVXJsID0gdGhpcy5tZXRhLmF1dG8uc2VhcmNoLnVybC5yZXBsYWNlKC9cXCR7XFxzKihbXFx3XFwuXSspXFxzKn0vZywgKG1hdGNoLCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBhcmFtc1trZXldO1xuICAgICAgICAgICAgZGVsZXRlIHBhcmFtc1trZXldO1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcCBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIHNlYXJjaFVybCArPSBgJHtzZWFyY2hVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJ30ke2VuY29kZVVSSUNvbXBvbmVudChwKX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1zW3BdKX1gO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0QnlQYXRoKHNlYXJjaFVybCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb25zO1xuICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcmVzdWx0O1xuICAgICAgICAgIGlmICh0aGlzLm1ldGEuYXV0by5zZWFyY2guZXh0cmFjdCkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSByZXN1bHRbdGhpcy5tZXRhLmF1dG8uc2VhcmNoLmV4dHJhY3RdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMgaW5zdGFuY2VvZiBBcnJheSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBbc3VnZ2VzdGlvbnNdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhc3luY1N1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgc3VnZ2VzdGlvbnMuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICAgICAgaWYgKHMgJiYgcy5pZCAmJiBzLnR5cGUpIHsgLy8gVE9PRCBjaGVjayB0aGUgdHlwZSBpcyBhY2NlcHRhYmxlXG4gICAgICAgICAgICAgIGFzeW5jU3VnZ2VzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IHMuaWQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHMubGFiZWwgfHwgYCR7cy50eXBlfSMke3MuaWR9YCxcbiAgICAgICAgICAgICAgICB0eXBlOiBzLnR5cGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGFzeW5jU3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoYXN5bmNTdWdnZXN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gYXN5bmNTdWdnZXN0aW9uc1swXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmFzeW5jU3VnZ2VzdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYXN5bmNTdWdnZXN0aW9ucyA9IGFzeW5jU3VnZ2VzdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cblxuLy8vLyBGSUVMRCBMSVNUXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpZWxkTGlzdC92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWVsZExpc3Qvc3R5bGUuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkTGlzdCBleHRlbmRzIEZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICB2YWx1ZTogYW55O1xuXG4gIGdldCBsaXN0KCkge1xuICAgIHJldHVybiB0aGlzLm1ldGEubGlzdCB8fCB0aGlzLm1ldGEucmVmZXJlbmNlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgb3JpZ1ZhbHVlID0gdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnBhcmVudCwgdGhpcy5tZXRhLm5hbWUsIHtcbiAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoY29uc3QgaSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuaW5kZXhPZihpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy5tb2RlbC5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5tb2RlbDtcbiAgICAgICAgdGhpcy5tZXRhLiRvcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbDtcbiAgICAgIH0sXG4gICAgICBnZXQ6ICgpID0+IHRoaXMudmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKG9yaWdWYWx1ZSkge1xuICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gb3JpZ1ZhbHVlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubW9kZWwgJiYgdGhpcy52YWxpZGF0aW9ucy5taW4pIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWxpZGF0aW9ucy5taW47IGkrKykge1xuICAgICAgICB0aGlzLmFkZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZCgpIHtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRpb25zLm1heCB8fCAodGhpcy52YWxpZGF0aW9ucy5tYXggPiB0aGlzLm1vZGVsLmxlbmd0aCkpIHtcbiAgICAgIHRoaXMubW9kZWwucHVzaCh7fSk7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5tb2RlbDtcbiAgICB9XG4gIH1cblxuICByZW1vdmUoaXRlbUluZGV4KSB7XG4gICAgdGhpcy5tb2RlbC5zcGxpY2UoaXRlbUluZGV4LCAxKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5tb2RlbDtcbiAgfVxufVxuXG4vLy8vIExBWU9VVFxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmdpcC1tZXRhLWxheW91dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9sYXlvdXQvdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGF5b3V0L3N0eWxlLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBNZXRhTGF5b3V0IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBtZXRhOiBhbnk7XG4gIEBJbnB1dCgpIHJlc291cmNlOiBhbnk7XG4gIEBJbnB1dCgpIGludGVncmF0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIHR5cGU6IGFueTtcbiAgQElucHV0KCkgcHJldmlldzogYm9vbGVhbjtcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcblxuICBvcHRpb25hbEZpZWxkczogYW55ID0ge307XG4gIG9wdGlvbmFsRmllbGRzQ291bnQ6IG51bWJlcjtcbiAgc2hvd0FsbCA9IGZhbHNlO1xuICBmaWVsZHNWaXNpYmlsaXR5Q2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICByZWZEaWFsb2dGYWN0b3J5OiBhbnk7XG4gIHBhcmVudEZvcm06IEhUTUxGb3JtRWxlbWVudDtcbiAgaW50ZWdyYXRpb25Db2RlOiBzdHJpbmc7XG4gIHJlc291cmNlVHlwZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2U6IE1ldGFSZXNvdXJjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWZlcmVuY2VTZXJ2aWNlOiBNZXRhUmVmZXJlbmNlU2VydmljZVxuICApIHtcbiAgICAvLyBjb25zb2xlLmxvZygnTWV0YUxheW91dCcsIHRoaXMubWV0YSk7XG5cbiAgfVxuXG4gIGdldCBpc1BlcnNpc3RlZFJlc291cmNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuICAgIHJldHVybiB0aGlzLnJlc291cmNlICYmIHRoaXMucmVzb3VyY2UuX3ZnaXMgJiYgKHRoaXMucmVzb3VyY2UuX3ZnaXMuZXh0ZXJuYWxJZCB8fCB0aGlzLnJlc291cmNlLl92Z2lzLmlkICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmludGVncmF0aW9uQ29kZSA9IHRoaXMubWV0YS5pbnRlZ3JhdGlvbkNvZGUgfHwgdGhpcy5pbnRlZ3JhdGlvbjtcbiAgICB0aGlzLnJlc291cmNlVHlwZSA9IHRoaXMubWV0YS5yZXNvdXJjZVR5cGUgfHwgdGhpcy50eXBlO1xuICAgIHRoaXMucGFyZW50Rm9ybSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdmb3JtJyk7XG4gICAgdGhpcy5jb25maWd1cmVPcHRpb25hbFNlY3Rpb25zKCk7XG5cbiAgICB0aGlzLmZpZWxkc1Zpc2liaWxpdHlDaGFuZ2VkLnBpcGUoZGVib3VuY2VUaW1lKDEwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgdGhpcy5jb3VudE9wdGlvbmFsRmllbGRzKCk7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNvdW50T3B0aW9uYWxGaWVsZHMoKTtcbiAgICB9LCAwKTtcblxuICAgIGlmICh0aGlzLnBhcmVudEZvcm0pIHtcbiAgICAgIHRoaXMucGFyZW50Rm9ybS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZpZWxkc1Zpc2liaWxpdHlDaGFuZ2VkLm5leHQoSlNPTi5zdHJpbmdpZnkodGhpcy5yZXNvdXJjZSkpO1xuICAgICAgICAgIHRoaXMuY291bnRPcHRpb25hbEZpZWxkcygpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRoZW1lICE9PSAnaW5oZXJpdCcpIHtcbiAgICAgIHRoaXMuYXBwbHlUaGVtZSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSkge1xuICAgIGlmIChjaGFuZ2VzLm1ldGEpIHtcbiAgICAgIHRoaXMuY29uZmlndXJlT3B0aW9uYWxTZWN0aW9ucygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY291bnRPcHRpb25hbEZpZWxkcygpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2VzLnRoZW1lKSB7XG4gICAgICB0aGlzLnRoZW1lID0gY2hhbmdlcy50aGVtZS5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLmFwcGx5VGhlbWUoKTtcbiAgICB9XG4gIH1cblxuICBjb3VudE9wdGlvbmFsRmllbGRzKCkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgY29uc3QgY291bnRTZWN0aW9uRmllbGRzID0gKHMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZiBvZiBzLmZpZWxkcykge1xuICAgICAgICBpZiAoZi5maWVsZHMgJiYgZi5maWVsZHMubGVuZ3RoICYmICFmLnZpc2libGUpIHtcbiAgICAgICAgICBjb3VudFNlY3Rpb25GaWVsZHMoZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGYuJG9wdGlvbmFsICYmICFmLiRoaWRkZW4pIHtcbiAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5tZXRhLnNlY3Rpb25zKSB7XG4gICAgICBjb25zdCBub3RPcHRpb25hbEFueSA9IHMuZmllbGRzLmZpbmQoZiA9PiAhZi4kb3B0aW9uYWwpO1xuICAgICAgcy4kb3B0aW9uYWwgPSAhbm90T3B0aW9uYWxBbnk7XG4gICAgICBpZiAoIXMudmlzaWJsZSkge1xuICAgICAgICBjb3VudFNlY3Rpb25GaWVsZHMocyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3B0aW9uYWxGaWVsZHNDb3VudCA9IGNvdW50O1xuICB9XG5cbiAgY29uZmlndXJlT3B0aW9uYWxTZWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5tZXRhICYmIHRoaXMubWV0YS5zZWN0aW9ucykge1xuICAgICAgZm9yIChjb25zdCBzIG9mIHRoaXMubWV0YS5zZWN0aW9ucykge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJyRvcHRpb25hbCcsIHtcbiAgICAgICAgICB2YWx1ZTogdHJ1ZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHRvZ2dsZU9wdGlvbmFsRmllbGRzKCkge1xuICAgIHRoaXMuc2hvd0FsbCA9ICF0aGlzLnNob3dBbGw7XG4gICAgdGhpcy5uZ0FmdGVyQ29udGVudENoZWNrZWQoKTtcbiAgfVxuXG4gIG9wZW5DaGlsZChjaGlsZFJlc291cmNlLCBjaGlsZE1vZGVsPykge1xuICAgIGNoaWxkUmVzb3VyY2UucmVmZXJlbmNlLnBhcmVudCA9IHRoaXMucmVzb3VyY2UuX3ZnaXM7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICBpZiAoIXRoaXMucmVmRGlhbG9nRmFjdG9yeSkge1xuICAgICAgdGhpcy5yZWZEaWFsb2dGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTWV0YVJlZkRpYWxvZyk7XG4gICAgfVxuICAgIHRoaXMucmVmZXJlbmNlU2VydmljZS5vcGVuRGlhbG9nKFxuICAgICAgdGhpcy5yZWZEaWFsb2dGYWN0b3J5LCB0aGlzLm1ldGFSZXNvdXJjZSwgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIGNoaWxkUmVzb3VyY2UucmVmZXJlbmNlLCBjaGlsZE1vZGVsLFxuICAgICAgY2hpbGRNb2RlbCAmJiAoY2hpbGRSZXNvdXJjZS5yZWZlcmVuY2UuZWRpdGFibGUgPT09IGZhbHNlKSAvLyBpcyBwcmV2aWV3IG1vZGVcbiAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnJhdykge1xuICAgICAgICBpZiAoIXRoaXMucmVzb3VyY2VbY2hpbGRSZXNvdXJjZS5uYW1lXSkge1xuICAgICAgICAgIHRoaXMucmVzb3VyY2VbY2hpbGRSZXNvdXJjZS5uYW1lXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzb3VyY2VbY2hpbGRSZXNvdXJjZS5uYW1lXS5wdXNoKHJlc3VsdC5yYXcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRoZW1lKCkge1xuICAgIGNvbnN0IG1ldGFUaGVtZSA9IHRoaXMudGhlbWUgPT09ICdkYXJrJyA/IG1ldGFEYXJrIDogbWV0YUxpZ2h0O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1ldGFUaGVtZS5wcm9wZXJ0aWVzKSkge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGtleSwgbWV0YVRoZW1lLnByb3BlcnRpZXNba2V5XSk7XG4gICAgfVxuICB9XG59XG5cbi8vLy8gUkVTT1VSQ0VcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZnaXAtbWV0YS1yZXNvdXJjZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZS92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZS9zdHlsZS5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWV0YVJlc291cmNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSByZXNvdXJjZTogYW55O1xuICBASW5wdXQoKSBtb2RlbDogYW55O1xuICBASW5wdXQoKSBtZXRhUmVzb3VyY2VTZXJ2aWNlRGVsZWdhdGVkOiBNZXRhUmVzb3VyY2VTZXJ2aWNlOyAvLyBjYXJ5IGl0IGZyb20gdGhlIHBhcmVudCB0byBrZWVwIHRoZSBpbnRlcmNlcHRvcnNcbiAgQElucHV0KCkgdGhlbWU6IHN0cmluZztcbiAgQE91dHB1dCgpIHB1YmxpYyBkb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGludGVncmF0aW9uQ29kZTogc3RyaW5nO1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgbWV0YTogYW55O1xuICBzZXJ2aWNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlO1xuICBjdXJyZW50TGF5b3V0SWQ6IGFueTtcbiAgZm9ybUVycm9yczogYW55O1xuICBmaWVsZHNNYXA6IGFueTtcbiAgZWRpdCA9IHRydWU7XG4gIGJ1c3k6IGJvb2xlYW47XG4gIG1ldGFMb2FkaW5nOiBib29sZWFuO1xuICBnZW5lcmFsRXJyb3I6IHN0cmluZztcbiAgcmVzb3VyY2VNZW51VmlzaWJsZTogYm9vbGVhbjtcbiAgY29udGFjdHNTdWdnZXN0aW9uc0RvbmUgPSBmYWxzZTtcbiAgaXNFZGl0YWJsZTogYm9vbGVhbjtcbiAgaXNQZXJzaXN0ZW50OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2VTZXJ2aWNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YUNvbnRleHQ6IE1ldGFDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFNc2dTZXJ2aWNlOiBNZXRhTXNnU2VydmljZVxuICApIHtcblxuICB9XG5cbiAgZ2V0IG5pY2VGaWVsZHMoKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMucmVzb3VyY2UubmljZUZpZWxkc1xuICAgICAgJiYgdGhpcy5yZXNvdXJjZS5tZXRhXG4gICAgICAmJiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0XG4gICAgICAmJiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LnNlY3Rpb25zXG4gICAgKSB7XG4gICAgICBjb25zdCBleHRyYWN0U2VjdGlvbkZpZWxkcyA9IChzKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBzLmZpZWxkcykge1xuICAgICAgICAgIGlmIChmLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UubmljZUZpZWxkc1tmLm5hbWVdID0gZjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGYuZmllbGRzICYmIGYuZmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZXh0cmFjdFNlY3Rpb25GaWVsZHMoZik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGhpcy5yZXNvdXJjZS5uaWNlRmllbGRzID0ge307XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5yZXNvdXJjZS5tZXRhLmxheW91dC5zZWN0aW9ucykge1xuICAgICAgICBleHRyYWN0U2VjdGlvbkZpZWxkcyhzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UubmljZUZpZWxkcztcbiAgfVxuXG4gIGdldCBmaWVsZE5hbWVzKCkge1xuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXModGhpcy5uaWNlRmllbGRzKTtcbiAgICBpZiAodGhpcy5yZXNvdXJjZS5tZXRhLmxheW91dC5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLnJlc291cmNlLm1ldGEubGF5b3V0LmNoaWxkcmVuKSB7XG4gICAgICAgIG5hbWVzLnB1c2goY2hpbGQubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuYW1lcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW50ZWdyYXRpb25Db2RlID0gKHRoaXMucmVzb3VyY2UuaW50ZWdyYXRpb25Db2RlIHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xuICAgIHRoaXMucmVzb3VyY2VUeXBlID0gdGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGU7XG4gICAgdGhpcy5zZXJ2aWNlID0gKHRoaXMubWV0YVJlc291cmNlU2VydmljZURlbGVnYXRlZCB8fCB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2UpLm5ldyh0aGlzLnJlc291cmNlKTtcbiAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgIHRoaXMubW9kZWwgPSB7fTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVzb3VyY2UuYWN0aXZpdHkgJiYgdGhpcy5yZXNvdXJjZS5yZWYuZWRpdGFibGUgPT09IGZhbHNlICYmICF0aGlzLnJlc291cmNlLmV4dGVybmFsSWQpIHtcbiAgICAgIHRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCA9ICdNSVNTSU5HX0VYVEVSTkFMX0lEJztcbiAgICB9XG4gICAgdGhpcy5pc1BlcnNpc3RlbnQgPSB0aGlzLnJlc291cmNlICYmIHRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZDtcbiAgICBpZiAoIXRoaXMucmVzb3VyY2UubWV0YSkge1xuICAgICAgdGhpcy5sb2FkTWV0YWRhdGEodGhpcy5yZXNvdXJjZS5sYXlvdXRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vICAgaWYgKHRoaXMuaXNQZXJzaXN0ZW50ICYmICghdGhpcy5pc0VkaXRhYmxlIHx8IHRoaXMucmVzb3VyY2VzW3JlZi5uYW1lXS5tZXRhLmxheW91dC5jaGlsZHJlbikpIHtcbiAgICAgIC8vICAgICB0aGlzLmVkaXQgPSBmYWxzZTtcbiAgICAgIC8vICAgfVxuICAgICAgdGhpcy5tZXRhID0gdGhpcy5yZXNvdXJjZS5tZXRhO1xuICAgICAgdGhpcy5jdXJyZW50TGF5b3V0SWQgPSB0aGlzLm1ldGEubGF5b3V0LmlkO1xuICAgICAgdGhpcy5nZXREZXRhaWxzKCk7XG4gICAgICB0aGlzLmdldEZpZWxkc01hcCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50aGVtZSAhPT0gJ2luaGVyaXQnKSB7XG4gICAgICB0aGlzLmFwcGx5VGhlbWUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBhbnkpIHtcbiAgICBpZiAoY2hhbmdlcy50aGVtZSkge1xuICAgICAgdGhpcy50aGVtZSA9IGNoYW5nZXMudGhlbWUuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKHRoaXMudGhlbWUgIT09ICdpbmhlcml0Jykge1xuICAgICAgICB0aGlzLmFwcGx5VGhlbWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlZGl0TW9kZSgpIHtcbiAgICB0aGlzLmVkaXQgPSB0cnVlO1xuICB9XG5cbiAgbG9hZE1ldGFkYXRhKGxheW91dElkPywgcmVmcmVzaCA9IGZhbHNlKSB7XG4gICAgY29uc3QgbGF5b3V0U3RvcmVLZXkgPSBgdmdpcy5sYXlvdXRfJHt0aGlzLm1ldGFDb250ZXh0LnZnaXBVc2VySWR9XyR7dGhpcy5pbnRlZ3JhdGlvbkNvZGV9XyR7dGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGV9YDtcbiAgICBpZiAoIWxheW91dElkKSB7XG4gICAgICBsYXlvdXRJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGxheW91dFN0b3JlS2V5KTtcbiAgICB9XG4gICAgdGhpcy5idXN5ID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubWV0YUxvYWRpbmcgPSB0cnVlO1xuICAgIH0sIDApO1xuICAgIGRlbGV0ZSB0aGlzLnJlc291cmNlLm5pY2VGaWVsZHM7XG4gICAgdGhpcy5zZXJ2aWNlLmdldE1ldGFkYXRhKGxheW91dElkLCByZWZyZXNoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKG1ldGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRMYXlvdXRJZCA9IG1ldGEubGF5b3V0LmlkO1xuICAgICAgICBpZiAobGF5b3V0SWQgIT09IG1ldGEubGF5b3V0LmlkICYmICF0aGlzLmlzUGVyc2lzdGVudCkge1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGxheW91dFN0b3JlS2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1ldGEgPSBtZXRhTm9ybWFsaXplcihtZXRhLCB0aGlzLmludGVncmF0aW9uQ29kZSwgdGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGUpO1xuICAgICAgICB0aGlzLmlzRWRpdGFibGUgPSB0aGlzLm1ldGEubGF5b3V0ICYmIHRoaXMubWV0YS5sYXlvdXQuZWRpdGFibGUgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc291cmNlLm1ldGEgPSB0aGlzLm1ldGE7XG4gICAgICAgIGlmICh0aGlzLmlzUGVyc2lzdGVudCAmJiAoIXRoaXMuaXNFZGl0YWJsZSB8fCB0aGlzLm1ldGEubGF5b3V0LmNoaWxkcmVuKSkge1xuICAgICAgICAgIHRoaXMuZWRpdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICAgIHRoaXMuZ2V0RGV0YWlscygpO1xuICAgICAgICB0aGlzLmdldEZpZWxkc01hcCgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAobWV0YUVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgICAgdGhpcy5nZW5lcmFsRXJyb3IgPSBgRXJyb3IgbG9hZGluZyByZXNvdXJjZSBtZXRhZGF0YSAoJHttZXRhRXJyb3Iuc3RhdHVzVGV4dH0pYDtcbiAgICAgIH0sXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICBkZWxldGUgdGhpcy5tZXRhTG9hZGluZztcbiAgICAgICAgdGhpcy5mb3JjZVVpVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjaGFuZ2VMYXlvdXQoKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICBgdmdpcy5sYXlvdXRfJHt0aGlzLm1ldGFDb250ZXh0LnZnaXBVc2VySWR9XyR7dGhpcy5pbnRlZ3JhdGlvbkNvZGV9XyR7dGhpcy5yZXNvdXJjZS5yZXNvdXJjZVR5cGV9YCxcbiAgICAgIHRoaXMuY3VycmVudExheW91dElkXG4gICAgKTtcbiAgICB0aGlzLmxvYWRNZXRhZGF0YSh0aGlzLmN1cnJlbnRMYXlvdXRJZCk7XG4gIH1cblxuICBnZXREZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLnJlc291cmNlICYmICh0aGlzLnJlc291cmNlLmV4dGVybmFsSWQgfHwgdGhpcy5yZXNvdXJjZS5pZCkpIHtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlLnBhcmVudCAmJiB0aGlzLnJlc291cmNlLmFjdGl2aXR5IC8vIHNraXAgZmV0Y2hcbiAgICAgICAgJiYgdGhpcy5tZXRhLmxheW91dC5lZGl0YWJsZSA9PT0gZmFsc2UgJiYgIXRoaXMubWV0YS5sYXlvdXQuY2hpbGRyZW5cbiAgICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IHAgaW4gdGhpcy5yZXNvdXJjZS5hY3Rpdml0eSkge1xuICAgICAgICAgIGlmICh0aGlzLnJlc291cmNlLmFjdGl2aXR5W3BdICYmIHRoaXMuZmllbGROYW1lcy5pbmRleE9mKHApICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbFtwXSA9IHRoaXMucmVzb3VyY2UuYWN0aXZpdHlbcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlcnZpY2UuZ2V0RGV0YWlscyhcbiAgICAgICAgICAodGhpcy5yZXNvdXJjZS5leHRlcm5hbElkIHx8IHRoaXMucmVzb3VyY2UuaWQpLCB7XG4gICAgICAgICAgZXZlbnRJZDogdGhpcy5yZXNvdXJjZS5ldmVudElkICE9PSAnTk9fRVZFTlQnID8gdGhpcy5yZXNvdXJjZS5ldmVudElkIDogbnVsbCwgbGF5b3V0SWQ6IHRoaXMucmVzb3VyY2UubGF5b3V0SWRcbiAgICAgICAgfVxuICAgICAgICApLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlc291cmNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgICAgICAgICBpZiAocmVzb3VyY2UuX3ZnaXMpIHtcbiAgICAgICAgICAgICAgaWYgKHJlc291cmNlLl92Z2lzLmV2ZW50SWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGFDb250ZXh0LnZnaXBFdmVudElkID0gcmVzb3VyY2UuX3ZnaXMuZXZlbnRJZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzb3VyY2UubGF5b3V0SWQgJiYgcmVzb3VyY2UuX3ZnaXMubGF5b3V0SWQgIT09IHRoaXMuY3VycmVudExheW91dElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTWV0YWRhdGEocmVzb3VyY2UuX3ZnaXMubGF5b3V0SWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgaW4gcmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAocmVzb3VyY2VbcF0gIT09ICd1bmRlZmluZWQnKSAmJiAodGhpcy5maWVsZE5hbWVzLmluZGV4T2YocCkgIT09IC0xIHx8IHAgPT09ICdfdmdpcycpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbFtwXSA9IHJlc291cmNlW3BdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChyZXNvdXJjZUVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYWxFcnJvciA9IHJlc291cmNlRXJyb3IuZXJyb3IgPyByZXNvdXJjZUVycm9yLmVycm9yLm1lc3NhZ2UgfHwgcmVzb3VyY2VFcnJvci5tZXNzYWdlIDogcmVzb3VyY2VFcnJvci5tZXNzYWdlO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYnVzeTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcmNlVWlVcGRhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5yZXNvdXJjZS5yZWYgJiYgdGhpcy5yZXNvdXJjZS5yZWYuYWN0aXZpdHkpIHsgLy8gcmV1c2UgZmFpbGVkIGF1dG9hY3Rpdml0aWVzIGRhdGFcbiAgICAgICAgZm9yIChjb25zdCBwIGluIHRoaXMucmVzb3VyY2UucmVmLmFjdGl2aXR5KSB7XG4gICAgICAgICAgaWYgKHRoaXMucmVzb3VyY2UucmVmLmFjdGl2aXR5ICYmIHRoaXMuZmllbGROYW1lcy5pbmRleE9mKHApICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbFtwXSA9IHRoaXMucmVzb3VyY2UucmVmLmFjdGl2aXR5W3BdOyAvLyBWR0lTLTcyMTUgKGNvcHkgb25seSB2YWxpZCBmaWVsZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnBlcmZvcm1BdXRvRmlsbCgpO1xuICAgIH1cbiAgfVxuXG4gIHBlcmZvcm1BdXRvRmlsbCgpIHtcbiAgICB0aGlzLm1ldGFNc2dTZXJ2aWNlLnNlbmRNZXNzYWdlKFxuICAgICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICB7XG4gICAgICAgIGFjdGlvbjogJ2F1dG9GaWxsJyxcbiAgICAgICAgaW50ZWdyYXRpb246IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICByZXNvdXJjZVR5cGU6IHRoaXMucmVzb3VyY2VUeXBlLFxuICAgICAgICByZXNvdXJjZTogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsKSksXG4gICAgICAgIGZpZWxkczogdGhpcy5uaWNlRmllbGRzLFxuICAgICAgICBldmVudDogdGhpcy5tZXRhQ29udGV4dC5jb250ZXh0LFxuICAgICAgICBwcm9maWxlOiB0aGlzLm1ldGFDb250ZXh0LnByb2ZpbGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXVxuICAgICAgfSxcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoIXJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBhZnAgaW4gcmVzcG9uc2UuYXV0b0ZpbGwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbFthZnBdKSB7XG4gICAgICAgICAgICAgIHRoaXMubW9kZWxbYWZwXSA9IHJlc3BvbnNlLmF1dG9GaWxsW2FmcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGdldEZpZWxkc01hcCgpIHtcbiAgICBpZiAodGhpcy5tZXRhLmZpZWxkc01hcCkge1xuICAgICAgdGhpcy5maWVsZHNNYXAgPSB0aGlzLm1ldGEuZmllbGRzTWFwO1xuICAgICAgdGhpcy5tYXJrQ29udGFjdGFibGVzKCk7XG4gICAgICB0aGlzLmJ1aWxkQ29udGFjdHNTdWdnZXN0aW9ucygpO1xuICAgICAgaWYgKCF0aGlzLnJlc291cmNlLmV4dGVybmFsSWQpIHtcbiAgICAgICAgdGhpcy5idWlsZFN1YmplY3RUZW1wbGF0ZSgpO1xuICAgICAgICB0aGlzLmV4ZWNUcmFuc2Zvcm1lcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1ldGFNc2dTZXJ2aWNlLnNlbmRNZXNzYWdlKFxuICAgICAgICB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgeyBhY3Rpb246ICdmaWVsZHNNYXAnLCBpbnRlZ3JhdGlvbjogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGUgfSxcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5maWVsZHNNYXAgPSByZXNwb25zZS5maWVsZHNNYXA7XG4gICAgICAgICAgICB0aGlzLm1hcmtDb250YWN0YWJsZXMoKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRDb250YWN0c1N1Z2dlc3Rpb25zKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucmVzb3VyY2UuZXh0ZXJuYWxJZCkge1xuICAgICAgICAgICAgICB0aGlzLmJ1aWxkU3ViamVjdFRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY1RyYW5zZm9ybWVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdObyBmaWVsZHMgbWFwJywgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMucmVzb3VyY2VUeXBlLCByZXNwb25zZS5lcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5SZXNvdXJjZU1lbnUoKSB7XG4gICAgdGhpcy5yZXNvdXJjZU1lbnVWaXNpYmxlID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbk1lbnVDbGlja291dCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgY2xvc2UocmVzdWx0Pykge1xuICAgIHRoaXMuZG9uZS5lbWl0KHJlc3VsdCk7XG4gIH1cblxuICBzaG93UGFyc2VkRXJyb3IocmVzb3VyY2VGb3JtLCBwYXJzZWRFcnJvcikge1xuICAgIHRoaXMuZm9ybUVycm9ycyA9IHBhcnNlZEVycm9yLm1lc3NhZ2UgfHwgJ1RoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIG9uZSBvciBtb3JlIGZpZWxkcyc7XG4gICAgaWYgKHBhcnNlZEVycm9yLmVycm9ycyAmJiBwYXJzZWRFcnJvci5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZvcm1FcnJvcnMgKz0gYCAoJHtwYXJzZWRFcnJvci5lcnJvcnMubWFwKGUgPT4gZS5tZXNzYWdlKS5qb2luKCcsICcpfSlgO1xuICAgICAgZm9yIChjb25zdCBwZSBvZiBwYXJzZWRFcnJvci5lcnJvcnMpIHtcbiAgICAgICAgaWYgKHJlc291cmNlRm9ybS5jb250cm9sc1twZS5maWVsZF0pIHtcbiAgICAgICAgICByZXNvdXJjZUZvcm0uY29udHJvbHNbcGUuZmllbGRdLnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUsIGN1c3RvbTogcGUubWVzc2FnZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0SW52YWxpZDogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yIC5tYWluOm5vdCguc3RhbmRhbG9uZSknKTtcbiAgICAgICAgaWYgKGZpcnN0SW52YWxpZCkge1xuICAgICAgICAgIGZpcnN0SW52YWxpZC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXQocmVzb3VyY2VGb3JtKSB7XG4gICAgZGVsZXRlIHRoaXMuZm9ybUVycm9ycztcbiAgICByZXNvdXJjZUZvcm0uZm9ybS5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgIGlmIChyZXNvdXJjZUZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XG4gICAgICBpZiAodGhpcy5tZXRhQ29udGV4dC52Z2lwRXZlbnRJZCkge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwuX3ZnaXMpIHtcbiAgICAgICAgICB0aGlzLm1vZGVsLl92Z2lzID0ge1xuICAgICAgICAgICAgY29ubmVjdG9yOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgICAgIHJlc291cmNlVHlwZTogdGhpcy5yZXNvdXJjZVR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWwuX3ZnaXMubGF5b3V0SWQgPSB0aGlzLmN1cnJlbnRMYXlvdXRJZDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgLy8gdGhpcy5tb2RlbC5fdmdpcy50aW1lWm9uZU9mZnNldEluTWludXRlcyA9IDA7IC8vIHdlIGFyZSBub3QgcHJvdmlkaW5nIHRpbWV6b25lIGFueW1vcmUgKGFzIFYzKSwgaW5zdGVhZCB0aGUgJ3RpbWUnIGFuZCAnZGF0ZScgb2JqZWN0cyBhcmUgY29udmVydGVkIHNvIHRoZSBVVEMgdGltZS9kYXRlIGlzIGNvcnJlY3RcbiAgICAgICAgdGhpcy5tb2RlbC5fdmdpcy5ldmVudElkID0gdGhpcy5tZXRhQ29udGV4dC52Z2lwRXZlbnRJZDtcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlLnNhdmUodGhpcy5tb2RlbCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKHJlc3VsdCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmJ1c3k7XG4gICAgICB9LCAoZXJyb3JSZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKChlcnJvclJlc3VsdC5zdGF0dXMgPT09IDQyMiAmJiBlcnJvclJlc3VsdC5lcnJvciAmJiAhZXJyb3JSZXN1bHQuZXJyb3IuZXJyb3JzICYmIGVycm9yUmVzdWx0LmVycm9yLmludGVncmF0aW9uRXJyb3IpXG4gICAgICAgICAgfHwgKGVycm9yUmVzdWx0LmVycm9yICYmIGVycm9yUmVzdWx0LmVycm9yLmVycm9ycyAmJiBlcnJvclJlc3VsdC5lcnJvci5lcnJvcnMubGVuZ3RoICYmICFlcnJvclJlc3VsdC5lcnJvci5lcnJvcnNbMF0uZmllbGQpXG4gICAgICAgICAgLy8gYmFja2VuZCBpbXBsZW1lbnRlZCBlcnJvciBwYXJzaW5nIGJ1dCBicm9rZW4gVkdJUy03MzY2XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZm9ybUVycm9ycyA9ICdUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCBvbmUgb3IgbW9yZSBmaWVsZHMnO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLm1ldGFNc2dTZXJ2aWNlLnNlbmRNZXNzYWdlKFxuICAgICAgICAgICAgICB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFjdGlvbjogJ3BhcnNlRXJyb3JNZXNzYWdlJyxcbiAgICAgICAgICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgICAgICAgIHJlc291cmNlVHlwZTogZXJyb3JSZXN1bHQuZXJyb3IucmVzb3VyY2VUeXBlLFxuICAgICAgICAgICAgICAgIHJhd0Vycm9yOiBlcnJvclJlc3VsdC5lcnJvci5pbnRlZ3JhdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgIHByb2ZpbGU6IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGUudG9VcHBlckNhc2UoKV1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnBhcnNlZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dQYXJzZWRFcnJvcihyZXNvdXJjZUZvcm0sIHJlc3BvbnNlLnBhcnNlZEVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdObyBlcnJvciBwYXJzZXIgZm9yJywgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIGVycm9yUmVzdWx0LmVycm9yLmludGVncmF0aW9uRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtRXJyb3JzID0gZXJyb3JSZXN1bHQuZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJy4uLi4nLCBlcnIpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3JSZXN1bHQuc3RhdHVzID09PSA0MjIpIHtcbiAgICAgICAgICB0aGlzLnNob3dQYXJzZWRFcnJvcihyZXNvdXJjZUZvcm0sIGVycm9yUmVzdWx0LmVycm9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZvcm1FcnJvcnMgPSBlcnJvclJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5idXN5O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUVycm9ycyA9IE9iamVjdC5rZXlzKHJlc291cmNlRm9ybS5jb250cm9scylcbiAgICAgICAgLmZpbHRlcigoYykgPT4gcmVzb3VyY2VGb3JtLmNvbnRyb2xzW2NdLmludmFsaWQpXG4gICAgICAgIC5tYXAoKGYpID0+ICh0aGlzLm5pY2VGaWVsZHNbZl0gPyAodGhpcy5uaWNlRmllbGRzW2ZdLmxhYmVsIHx8IGYpIDogZikpLmpvaW4oJywgJyk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBgZm9ybVtuYW1lPVwiJHt0aGlzLnJlc291cmNlVHlwZX1cIl0gLlZsdC1mb3JtX19lbGVtZW50LS1lcnJvciAubWFpbjpub3QoLnN0YW5kYWxvbmUpYDtcbiAgICAgICAgY29uc3QgZmlyc3RJbnZhbGlkOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgICBpZiAoZmlyc3RJbnZhbGlkKSB7XG4gICAgICAgICAgZmlyc3RJbnZhbGlkLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyRm9ybUVycm9ycygpIHtcbiAgICBkZWxldGUgdGhpcy5mb3JtRXJyb3JzO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1lbnVDbGlja291dCA9ICgpID0+IHtcbiAgICBkZWxldGUgdGhpcy5yZXNvdXJjZU1lbnVWaXNpYmxlO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbk1lbnVDbGlja291dCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzdWdnZXN0RmllbGRQcm9wZXJ0eShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgZmllbGROYW1lcyA9IHRoaXMuZmllbGROYW1lcztcbiAgICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICAgIGNvbnN0IG5lc3RNYXRjaCA9IGtleS5tYXRjaCgvKFxcUyspXFxbXFxkXFxdXFwuKFxcUyspLyk7XG4gICAgICAgIGlmIChuZXN0TWF0Y2ggJiYgZmllbGROYW1lcy5pbmRleE9mKG5lc3RNYXRjaFsxXSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtuZXN0TWF0Y2hbMV1dID0gW107XG4gICAgICAgICAgY29uc3QgbmVzdEtleXM6IGFueSA9IHt9O1xuICAgICAgICAgIG5lc3RLZXlzW25lc3RNYXRjaFsyXV0gPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLm1vZGVsW25lc3RNYXRjaFsxXV0ucHVzaChuZXN0S2V5cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGROYW1lcy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5tb2RlbFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4ZWNUcmFuc2Zvcm1lcigpIHtcbiAgICBpZiAodGhpcy5tZXRhQ29udGV4dCAmJiB0aGlzLmZpZWxkc01hcCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAucGhvbmVOdW1iZXIsIHRoaXMubWV0YUNvbnRleHQucGhvbmVOdW1iZXIpO1xuICAgICAgICBpZiAodGhpcy5maWVsZHNNYXAuZmlyc3ROYW1lIHx8IHRoaXMuZmllbGRzTWFwLmxhc3ROYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZXMgPSAodGhpcy5tZXRhQ29udGV4dC5kaXNwbGF5TmFtZSB8fCAnJykuc3BsaXQoJyAnKTtcbiAgICAgICAgICB0aGlzLnN1Z2dlc3RGaWVsZFByb3BlcnR5KHRoaXMuZmllbGRzTWFwLmZpcnN0TmFtZSwgbmFtZXNbMF0pO1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAubGFzdE5hbWUsIG5hbWVzWzFdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkc01hcC5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgIHRoaXMuc3VnZ2VzdEZpZWxkUHJvcGVydHkodGhpcy5maWVsZHNNYXAuZGlzcGxheU5hbWUsIHRoaXMubWV0YUNvbnRleHQuZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFya0NvbnRhY3RhYmxlcygpIHtcbiAgICBpZiAodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzICYmIHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLm5pY2VGaWVsZHNbY107XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJyRpc0NvbnRhY3RhYmxlJywge1xuICAgICAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN1YmplY3RUZW1wbGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubW9kZWxbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0gJiYgdGhpcy5maWVsZHNNYXAuc3ViamVjdCAmJiB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0pIHtcbiAgICAgIGxldCBzdWJqZWN0VGVtcGxhdGU6IHN0cmluZztcbiAgICAgIGlmICh0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdCkge1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdC5pZCB8fCB0aGlzLm5pY2VGaWVsZHNbdGhpcy5maWVsZHNNYXAuc3ViamVjdF0uZGVmYXVsdDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZV0pIHtcbiAgICAgICAgY29uc3QgcHJvZmlsZSA9IHRoaXMubWV0YUNvbnRleHQucHJvZmlsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdIHx8IHt9O1xuICAgICAgICBzdWJqZWN0VGVtcGxhdGUgPSBwcm9maWxlLmRlZmF1bHRTdWJqZWN0ID9cbiAgICAgICAgICBwcm9maWxlLmRlZmF1bHRTdWJqZWN0WygodGhpcy5tZXRhQ29udGV4dC5jb250ZXh0IHx8ICdDQUxMJykudHlwZSB8fCAnJykudG9VcHBlckNhc2UoKV0gOiBwcm9maWxlLmFjdGl2aXR5RGVmYXVsdFN1YmplY3RUZW1wbGF0ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzdWJqZWN0VGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5tb2RlbFt0aGlzLmZpZWxkc01hcC5zdWJqZWN0XSA9IHRlbXBsYXRlQnVpbGRlcih0aGlzLm1ldGFDb250ZXh0LCBzdWJqZWN0VGVtcGxhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb250YWN0c1N1Z2dlc3Rpb25zKCkge1xuICAgIC8vIGxldCBoYXNEZWZhdWx0Q29udGFjdCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm1ldGFDb250ZXh0LmNvbnRhY3RhYmxlc1t0aGlzLmludGVncmF0aW9uQ29kZV0gJiYgdGhpcy5tZXRhLmxheW91dCAmJiB0aGlzLm1ldGEubGF5b3V0LnNlY3Rpb25zKSB7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgdGhpcy5tZXRhLmxheW91dC5zZWN0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgKHMuZmllbGRzIHx8IFtdKSkge1xuICAgICAgICAgIGlmIChmLnR5cGUgPT09ICdyZWZlcmVuY2UnKSB7XG4gICAgICAgICAgICBjb25zdCByZWZUeXBlcyA9IChmLnJlZmVyZW5jZS5sZW5ndGggPyBmLnJlZmVyZW5jZSA6IFtmLnJlZmVyZW5jZV0pLm1hcChyID0+IHIubmFtZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5tZXRhQ29udGV4dC5jb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdKSB7XG4gICAgICAgICAgICAgIGlmIChyZWZUeXBlcy5pbmRleE9mKGMucmVzb3VyY2VUeXBlIHx8IGMudHlwZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmLnN1Z2dlc3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICBmLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGYuc3VnZ2VzdGlvbnMgPSBmLnN1Z2dlc3Rpb25zLmZpbHRlcihzZyA9PiAhc2cuYXV0byk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCB0TGFiZWwgPSBjLmRpc3BsYXlOYW1lIHx8IGMubmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoYy5waG9uZU51bWJlcnMpIHtcbiAgICAgICAgICAgICAgICAgIHRMYWJlbCArPSAoJyDinIYnICsgYy5waG9uZU51bWJlcnMubWFwKHAgPT4gcC5waG9uZU51bWJlcikuam9pbignLCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZi5zdWdnZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGlkOiBjLmV4dGVybmFsSWQgfHwgYy5pZGVudGlmaWVyIHx8IGMuaWQsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogdExhYmVsLFxuICAgICAgICAgICAgICAgICAgdHlwZTogYy5yZXNvdXJjZVR5cGUgfHwgYy50eXBlLFxuICAgICAgICAgICAgICAgICAgYXV0bzogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHRoaXMuZmllbGRzTWFwLmNvbnRhY3RhYmxlcyB8fCBbXSkuaW5kZXhPZihmLm5hbWUpICE9PSAtMSkgeyAvLyBldmFsdWF0ZSB1c2FiaWxpdHk/XG4gICAgICAgICAgICAgIGYuYWx3YXlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiAoXG4gICAgICAgICAgICAvLyAgICFoYXNEZWZhdWx0Q29udGFjdCAmJiB0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdXG4gICAgICAgICAgICAvLyAgICYmIHJlZlR5cGVzLmluZGV4T2YodGhpcy5tZXRhQ29udGV4dC5kZWZhdWx0Q29udGFjdGFibGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlXS50eXBlKSAhPT0gLTFcbiAgICAgICAgICAgIC8vICkge1xuICAgICAgICAgICAgLy8gICB0aGlzLnJlc291cmNlW2YubmFtZV0gPSB0aGlzLm1ldGFDb250ZXh0LmRlZmF1bHRDb250YWN0YWJsZXNbdGhpcy5pbnRlZ3JhdGlvbkNvZGVdO1xuICAgICAgICAgICAgLy8gICBoYXNEZWZhdWx0Q29udGFjdCA9IHRydWU7XG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKCFoYXNEZWZhdWx0Q29udGFjdCAmJiB0aGlzLmZpZWxkc01hcC5jb250YWN0YWJsZXMgJiYgZi5zdWdnZXN0aW9ucyAmJiBmLnN1Z2dlc3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gICBpZiAodGhpcy5maWVsZHNNYXAuY29udGFjdGFibGVzLmluZGV4T2YoZi5uYW1lKSAhPT0gLTEgJiYgIWYuZGVmYXVsdCkge1xuICAgICAgICAgICAgLy8gICAgIGYuZGVmYXVsdCA9IGYuc3VnZ2VzdGlvbnNbMF07XG4gICAgICAgICAgICAvLyAgICAgaGFzRGVmYXVsdENvbnRhY3QgPSB0cnVlO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNvbnRhY3RzU3VnZ2VzdGlvbnNEb25lID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGhlbWUoKSB7XG4gICAgY29uc3QgbWV0YVRoZW1lID0gdGhpcy50aGVtZSA9PT0gJ2RhcmsnID8gbWV0YURhcmsgOiBtZXRhTGlnaHQ7XG4gICAgY29uc29sZS5sb2coJ3Jlc291cmNlIGFwcGx5IHRoZW1lJywgdGhpcy50aGVtZSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWV0YVRoZW1lLnByb3BlcnRpZXMpKSB7XG4gICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBtZXRhVGhlbWUucHJvcGVydGllc1trZXldKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcmNlVWlVcGRhdGUoKSB7IC8vIGlPUyB3ZWJ2aWV3IGRvZXMgbm90IHVwZGF0ZSB0aGUgVUkgYWZ0ZXIgYXN5YyBjaGFuZ2VzLiBUZW1wIGZpeCA6KFxuICAgIC8vIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50cycpO1xuICAgIGUuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIGZhbHNlKTtcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChlKTtcbiAgfVxufVxuXG4vLy8vIFJFU09VUkNFIENBUkRcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZnaXAtbWV0YS1yZXNvdXJjZS1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Jlc291cmNlQ2FyZC92aWV3Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZUNhcmQvc3R5bGUuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFSZXNvdXJjZUNhcmQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSByZXNvdXJjZTogYW55O1xuICBASW5wdXQoKSBtb2RlbDogYW55O1xuXG4gIGludGVncmF0aW9uQ29kZTogc3RyaW5nO1xuICByZWZEaWFsb2dGYWN0b3J5OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIG1ldGFSZXNvdXJjZTogTWV0YVJlc291cmNlU2VydmljZSxcbiAgICBwcml2YXRlIHJlZmVyZW5jZVNlcnZpY2U6IE1ldGFSZWZlcmVuY2VTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUgPSAodGhpcy5yZXNvdXJjZS5pbnRlZ3JhdGlvbiB8fCB0aGlzLnJlc291cmNlLmludGVncmF0aW9uQ29kZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIG9wZW4ocmVmZXJlbmNlLCBtb2RlbD8pIHtcbiAgICBpZiAoIXRoaXMucmVmRGlhbG9nRmFjdG9yeSkge1xuICAgICAgdGhpcy5yZWZEaWFsb2dGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTWV0YVJlZkRpYWxvZyk7XG4gICAgfVxuICAgIHRoaXMucmVmZXJlbmNlU2VydmljZS5vcGVuRGlhbG9nKFxuICAgICAgdGhpcy5yZWZEaWFsb2dGYWN0b3J5LCB0aGlzLm1ldGFSZXNvdXJjZSwgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHJlZmVyZW5jZSwgbW9kZWwsXG4gICAgICBtb2RlbCAmJiAocmVmZXJlbmNlLmVkaXRhYmxlID09PSBmYWxzZSkgLy8gaXMgcHJldmlldyBtb2RlXG4gICAgKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnZGlhbG9nIHJlc3VsdCcsIHJlc3VsdCk7XG4gICAgICAvLyBpZiAocmVzdWx0ICYmIHJlc3VsdC5yYXcpIHtcbiAgICAgIC8vICAgaWYgKCF0aGlzLnBhcmVudFtyZWZlcmVuY2UudHlwZV0pIHtcbiAgICAgIC8vICAgICB0aGlzLnBhcmVudFtyZWZlcmVuY2UudHlwZV0gPSBbXTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICB0aGlzLnBhcmVudFtyZWZlcmVuY2UudHlwZV0ucHVzaChyZXN1bHQucmF3KTtcbiAgICAgIC8vIH1cbiAgICB9KTtcbiAgfVxuXG59XG5cblxuY29uc3QgRk1BUCA9IChmVHlwZSkgPT4ge1xuICBzd2l0Y2ggKGZUeXBlKSB7XG4gICAgY2FzZSAnJzpcbiAgICBjYXNlIG51bGw6XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAvLyBjYXNlICdkYXRldGltZSc6XG4gICAgLy8gY2FzZSAndGltZSc6XG4gICAgLy8gY2FzZSAnZGF0ZSc6XG4gICAgY2FzZSAnc3RyaW5nJzogeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWZhbGx0aHJvdWdoXG4gICAgICByZXR1cm4gRmllbGRJbnB1dDtcbiAgICB9XG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICByZXR1cm4gRmllbGRUZXh0O1xuICAgIH1cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ29wdGlvbnMnOiB7XG4gICAgICByZXR1cm4gRmllbGRTZWxlY3Q7XG4gICAgfVxuICAgIGNhc2UgJ3JlZmVyZW5jZSc6IHtcbiAgICAgIHJldHVybiBGaWVsZFJlZmVyZW5jZTtcbiAgICB9XG4gICAgY2FzZSAnY29tcG9zaXRlJzoge1xuICAgICAgcmV0dXJuIEZpZWxkQ29tcG9zaXRlO1xuICAgIH1cbiAgICBjYXNlICdib29sZWFuJzoge1xuICAgICAgcmV0dXJuIEZpZWxkQm9vbGVhbjtcbiAgICB9XG4gICAgY2FzZSAncmFkaW8nOiB7XG4gICAgICByZXR1cm4gRmllbGRSYWRpbztcbiAgICB9XG4gICAgY2FzZSAnbGlzdCc6IHtcbiAgICAgIHJldHVybiBGaWVsZExpc3Q7XG4gICAgfVxuICAgIGNhc2UgJ3JpY2h0ZXh0Jzoge1xuICAgICAgcmV0dXJuIEZpZWxkUmljaHRleHQ7XG4gICAgfVxuICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICBjYXNlICd0aW1lJzpcbiAgICBjYXNlICdkYXRlJzoge1xuICAgICAgcmV0dXJuIEZpZWxkRGF0ZXRpbWU7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBGaWVsZFVua25vd247XG4gICAgfVxuICB9XG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbWV0YUZpZWxkQ29udGVudF0nXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFGaWVsZENvbnRlbnREaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikgeyB9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZnaXAtbWV0YS1maWVsZCcsXG4gIHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlIG1ldGFGaWVsZENvbnRlbnQ+TG9hZGluZzwvbmctdGVtcGxhdGU+JyxcbiAgc3R5bGVVcmxzOiBbJy4vZmllbGQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE1ldGFGaWVsZCBleHRlbmRzIEZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBtZXRhOiBhbnk7XG4gIEBJbnB1dCgpIHBhcmVudDogYW55O1xuICBASW5wdXQoKSBpbnRlZ3JhdGlvbkNvZGU6IGFueTtcbiAgQElucHV0KCkgcmVzb3VyY2VUeXBlOiBhbnk7XG4gIEBJbnB1dCgpIGluZGV4OiBudW1iZXI7XG4gIEBJbnB1dCgpIHByZXZpZXc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRoZW1lOiBzdHJpbmc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBAT3V0cHV0KCkgb25MZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKE1ldGFGaWVsZENvbnRlbnREaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGZpZWxkQ29udGVudDogTWV0YUZpZWxkQ29udGVudERpcmVjdGl2ZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gRk1BUCh0aGlzLm1ldGEudHlwZSk7XG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XG5cbiAgICB0aGlzLmZpZWxkQ29udGVudC52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5maWVsZENvbnRlbnQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgY29uc3QgZmllbGQ6IEZpZWxkQWJzdHJhY3QgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgaWYgKGNvbXBvbmVudC5zZXR1cCkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ3NldHVwJywge2E6IHRoaXMuZWwubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGV9KVxuICAgICAgY29tcG9uZW50LnNldHVwKGZpZWxkLCB0aGlzLnBhcmVudCwgdGhpcy5tZXRhKTtcbiAgICB9XG4gICAgZmllbGQubWV0YSA9IHRoaXMubWV0YTtcbiAgICBmaWVsZC5wYXJlbnQgPSB0aGlzLnBhcmVudDtcbiAgICBmaWVsZC5pbnRlZ3JhdGlvbkNvZGUgPSAodGhpcy5pbnRlZ3JhdGlvbkNvZGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgZmllbGQucmVzb3VyY2VUeXBlID0gKHRoaXMucmVzb3VyY2VUeXBlIHx8ICcnKTtcbiAgICBmaWVsZC5pbmRleCA9IHRoaXMuaW5kZXg7XG4gICAgZmllbGQuZWxlbWVudFJlZiA9IHRoaXMuZWw7XG4gICAgZmllbGQub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlO1xuICAgIGZpZWxkLm9uTGVhdmUgPSB0aGlzLm9uTGVhdmU7XG4gICAgZmllbGQucHJldmlldyA9IHRoaXMucHJldmlldztcbiAgICBmaWVsZC50aGVtZSA9IHRoaXMudGhlbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLm1ldGEsICd1bnNldCcsIHtcbiAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz0nVmx0LW1vZGFsIFZsdC1tb2RhbC0tbGFyZ2UnPlxuICA8ZGl2IGNsYXNzPVwiVmx0LW1vZGFsX19wYW5lbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJWbHQtdGFic1wiPlxuICAgICAgPGRpdiBjbGFzcz0nVmx0LXRhYnNfX2hlYWRlci0tYmFja2dyb3VuZCc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtdGFic19faGVhZGVyIFZsdC10YWJzX19oZWFkZXItLXNoYWRvd1wiPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJWbHQtaWNvblwiIFtuZ1N0eWxlXT1cIntmaWxsOiBpbnRlZ3JhdGlvbkljb24gPT09ICdCcmFuZC1pY29uLXZvbmFnZScgPyAndmFyKC0tdmdpcC1tZXRhLWlucHV0LWNvbG9yKScgOiAnJ31cIj48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIgLz48L3N2Zz5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj0nbGV0IHIgb2YgcmVzb3VyY2VzIHwga2V5dmFsdWU6IGtlZXBPcmRlcicgKGNsaWNrKT0nc2VsZWN0UmVzb3VyY2Uoci5rZXkpJyBjbGFzcz1cIlZsdC10YWJzX19saW5rXCIgW25nQ2xhc3NdPVwieyAnVmx0LXRhYnNfX2xpbmtfYWN0aXZlJzogY3VycmVudFJlc291cmNlID09PSByLmtleX1cIj5cbiAgICAgICAgICAgIHt7ci5rZXl9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtbW9kYWxfX2Rpc21pc3NcIiAoY2xpY2spPVwiZGlzbWlzcygpXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwiVmx0LWljb25cIj48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tY3Jvc3NcIiAvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIlZsdC10YWJzX19jb250ZW50XCIgc3R5bGU9J21pbi1oZWlnaHQ6IDkwcHg7Jz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9J2xldCByIG9mIHJlc291cmNlcyB8IGtleXZhbHVlOiBrZWVwT3JkZXInPlxuICAgICAgICAgIDxkaXYgKm5nSWY9J2N1cnJlbnRSZXNvdXJjZSA9PT0gci5rZXknIGNsYXNzPVwiVmx0LXRhYnNfX3BhbmVsIFZsdC10YWJzX19wYW5lbF9hY3RpdmVcIj5cbiAgICAgICAgICAgIDx2Z2lwLW1ldGEtcmVzb3VyY2UgW3Jlc291cmNlXT0nci52YWx1ZScgW21vZGVsXT0nbW9kZWxzW3Iua2V5XScgW21ldGFSZXNvdXJjZVNlcnZpY2VEZWxlZ2F0ZWRdPSdtZXRhUmVzb3VyY2UnIChkb25lKT0nb25SZXNvdXJjZURvbmUoJGV2ZW50KScgdGhlbWU9J2luaGVyaXQnIFthdHRyLmRhdGEtdGhlbWVdPSd0aGVtZSc+PC92Z2lwLW1ldGEtcmVzb3VyY2U+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cInsgJ1ZsdC1ncmlkIFZsdC1ncmlkLS1uYXJyb3cnOiBpc1JvdyB9XCIgPlxuICA8ZGl2IHN0eWxlPSdtYXJnaW46IDA7JyBbbmdDbGFzc109XCJ7ICdWbHQtY29sJzogaXNSb3csICdWbHQtY29sLS0xb2YzJzogaXNSb3cgJiYgZmllbGRzLmxlbmd0aCA+IDMgfVwiICpuZ0Zvcj0nbGV0IGZpZWxkIG9mIGZpZWxkcyc+XG4gICAgPHZnaXAtbWV0YS1maWVsZCAqbmdJZj0nIW1ldGEuJGludmlzaWJsZScgY2xhc3M9J3Nob3duJyBbaW5kZXhdPSdpbmRleCcgW21ldGFdPSdmaWVsZCcgW3BhcmVudF09J3ZhbHVlJyBbaW50ZWdyYXRpb25Db2RlXT0naW50ZWdyYXRpb25Db2RlJyBbcmVzb3VyY2VUeXBlXT0ncmVzb3VyY2VUeXBlJyBbcHJldmlld109J3ByZXZpZXcnIHRoZW1lPSdpbmhlcml0Jz48L3ZnaXAtbWV0YS1maWVsZD5cbiAgPC9kaXY+XG48L2Rpdj5cbiIsIjxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1wcmV2aWV3JyAqbmdJZj0ncHJldmlldyAmJiBtb2RlbCc+XG4gIDxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1sYWJlbCc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PC9kaXY+XG4gIDxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz5cbiAgICB7e21vZGVsLmxhYmVsIHx8IG1vZGVsLmlkIHx8IG1vZGVsfX1cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9JyFwcmV2aWV3JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50XCJcbiAgW25nQ2xhc3NdPVwieyAnVmx0LWZvcm1fX2VsZW1lbnQtLWJpZyc6ICFtZXRhLnNtYWxsICwnaGFzLXZhbHVlJzogZi52YWx1ZSwgYWN0aXZlOiBrZXlMaXN0ZW5lckFjdGl2ZSwgJ1ZsdC1mb3JtX19lbGVtZW50LS1lcnJvcic6IGYuaW52YWxpZCAmJiAoKGYgfCBtZXRhTW9kZWwpLl9wYXJlbnQuc3VibWl0dGVkIHx8IChmdCB8IG1ldGFNb2RlbCApLnRvdWNoZWQpLCAnbm8teCc6IG1ldGEubm9YIH1cIj5cbiAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGUgVmx0LWRyb3Bkb3duIFZsdC1pbnB1dFwiIHN0eWxlPSdkaXNwbGF5OiBibG9jazsnXG4gICAgW25nQ2xhc3NdPVwieyAnaGFzLWFwcGVuZC1idXR0b24nOiBpc0NyZWF0YWJsZSAmJiAhZGlzYWJsZWQgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJWbHQtc2VsZWN0XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9J3dyYXBwZXInPlxuICAgICAgICA8bGFiZWwgY2xhc3M9J1ZsdC10cnVuY2F0ZSc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PHNwYW5cbiAgICAgICAgICAgICpuZ0lmPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCAmJiBvcHRpb25zLmxlbmd0aCcgY2xhc3M9J1ZsdC1yZWQnPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPGlucHV0IGNsYXNzPSdtYWluJyBbcmVxdWlyZWRdPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCAmJiAhIW9wdGlvbnMubGVuZ3RoJyByZWFkb25seSBbbmdNb2RlbF09J3Nob3dUZXh0J1xuICAgICAgICAgICNmdD0nbmdNb2RlbCcgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibWV0YS5wbGFjZWhvbGRlciB8fCAnICdcIiAoY2xpY2spPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJ1xuICAgICAgICAgIChibHVyKT0nb25CbHVyKCRldmVudCknIFtuZ0NsYXNzXT1cInsgJ3N0YW5kYWxvbmUnOiBtZXRhLnN0YW5kYWxvbmUgfVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT0nZGlzYWJsZWQnIFthdHRyLmFyaWEtbGFiZWxdPSdtZXRhLmxhYmVsJyAvPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxzZWxlY3QgY2xhc3M9J21vZGVsJyBbcmVxdWlyZWRdPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCAmJiAhIW9wdGlvbnMubGVuZ3RoJyBzdHlsZT0nZGlzcGxheTogbm9uZTsnXG4gICAgICAgIFsobmdNb2RlbCldPSdtb2RlbCcgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiBtZXRhLnN0YW5kYWxvbmV9XCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgI2Y9J25nTW9kZWwnIFtuYW1lXT0nbmFtZSc+PC9zZWxlY3Q+XG4gICAgICA8ZGl2ICpuZ0lmPSdzZWFyY2hpbmcnIGNsYXNzPSdzZWFyY2gtcHJvZ3Jlc3MnPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhciBWbHQtYmctcHVycGxlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSdWbHQtY29tcG9zaXRlX19hcHBlbmQgcmlnaHQtYWN0aW9ucyc+XG4gICAgICAgIDxkaXYgKm5nSWY9J21vZGVsICYmICFtZXRhLm5vWCAmJiAhZGlzYWJsZWQnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uXCJcbiAgICAgICAgICAoY2xpY2spPSdjbGVhcigkZXZlbnQpJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2Zz5cbiAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWNyb3NzXCIgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9J1ZsdC1kcm9wZG93bl9fcGFuZWwnPlxuICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnQgVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudC0tc2Nyb2xsLWFyZWFcIj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX190aXRsZVwiIHN0eWxlPSdwYWRkaW5nLWxlZnQ6IDE1cHg7Jz5cbiAgICAgICAgICBTZWxlY3QgKHt7b3B0aW9ucy5sZW5ndGh9fSlcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19jbG9zZSBWbHQtd2hpdGVcIiAoY2xpY2spPSdkaXNtaXNzRHJvcGRvd24oJGV2ZW50KSc+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGwnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jcm9zc1wiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9jayBWbHQtc2VhcmNoX3dyYXBcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3B0aW9uc0JhY2t1cC5sZW5ndGggPiAxMlwiIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3ByZXBlbmQgVmx0LWNvbXBvc2l0ZV9fcHJlcGVuZC0taWNvblwiXG4gICAgICAgICAgICAgIHN0eWxlPVwidG9wOiAwOyBwYWRkaW5nLXRvcDogMTVweDtcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtZ3JleSc+XG4gICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tc2VhcmNoXCI+PC91c2U+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWlucHV0XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwidmdpcC1zZWFyY2hfaW5wdXRcIiBbKG5nTW9kZWwpXT1cInNlYXJjaElucHV0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiAoaW5wdXQpPVwib25TZWFyY2hDaGFuZ2UoKVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiXG4gICAgICAgICAgICAgIHN0eWxlPVwidG9wOiAycHg7XCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoRmllbGQoKVwiIFtoaWRkZW5dPVwic2VhcmNoSW5wdXQgPT09ICcnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsJz5cbiAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jcm9zc1wiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9J2Ryb3Bkb3duJyBjbGFzcz0nVmx0LWRyb3Bkb3duX19zY3JvbGwnPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnVmx0LWRyb3Bkb3duX19saW5rLS1zZWxlY3RlZCc6IGFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9PT0gaSB9XCJcbiAgICAgICAgICAgIChjbGljayk9J29uT3B0aW9uU2VsZWN0KCRldmVudCwgb3B0aW9uKScgKm5nRm9yPSdsZXQgb3B0aW9uIG9mIG9wdGlvbnM7IGxldCBpID0gaW5kZXgnXG4gICAgICAgICAgICBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGlua1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPVwiVmx0LWNoZWNrYm94XCIgc3R5bGU9J3dpZHRoOiAxMDAlOyc+XG4gICAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIlZsdC1jaGVja2JveF9fYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPSdtb2RlbCAmJiBtb2RlbC5pbmRleE9mKG9wdGlvbikgIT09IC0xJyAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJWbHQtY2hlY2tib3hfX2ljb25cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7b3B0aW9uLmxhYmVsIHx8IChvcHRpb24uaWQgPT09ICcnID8gJy0tZW1wdHktLScgOiBvcHRpb24pfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0nIW11bHRpcGxlJyBzdHlsZT0ncGFkZGluZzogMTJweCAyMHB4Oyc+e3tvcHRpb24ubGFiZWwgfHwgKG9wdGlvbi5pZCA9PT0gJycgP1xuICAgICAgICAgICAgICAnLS1lbXB0eS0tJyA6IG9wdGlvbil9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gTm8gT3B0aW9uIEZvdW5kIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2xpbmtcIiAqbmdJZj1cIm9wdGlvbnMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPSdwYWRkaW5nOiAxMnB4IDIwcHg7Jz5ObyBPcHRpb24gRm91bmQ8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9JyFtdWx0aXBsZScgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9J211bHRpcGxlJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2sgVmx0LWRyb3Bkb3duX19ibG9jay0tbm93cmFwXCJcbiAgICAgICAgICBzdHlsZT0ncGFkZGluZzogOHB4IDE2cHggMTZweDsnPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT0nY2xlYXIoJGV2ZW50KScgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNlY29uZGFyeSBWbHQtYnRuLS1hcHAgVmx0LWJ0bi0tc21hbGwgVmx0LWJ0bi0tb3V0bGluZVwiXG4gICAgICAgICAgICBzdHlsZT0nbWFyZ2luLXJpZ2h0OiA4cHg7Jz5DbGVhciBhbGw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9J2Rpc21pc3NEcm9wZG93bigkZXZlbnQpJyB0eXBlPSdidXR0b24nXG4gICAgICAgICAgICBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc2Vjb25kYXJ5IFZsdC1idG4tLWFwcCBWbHQtYnRuLS1zbWFsbFwiPkRvbmU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIDxzcGFuICpuZ0lmPSdpc0NyZWF0YWJsZSc+XG4gICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0nb3BlblJlc291cmNlKCRldmVudCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0taWNvbiBWbHQtYnRuLS1sYXJnZVwiIHN0eWxlPSdtYXJnaW4tbGVmdDogMTJweDsnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1wbHVzXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPiAtLT5cbiAgICA8ZGl2ICpuZ0lmPSdpc0NyZWF0YWJsZSAmJiAhZGlzYWJsZWQnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kXCI+XG4gICAgICA8YnV0dG9uIChmb2N1cyk9J29uQWN0aXZhdGVkKCRldmVudCknIChibHVyKT0nb25CbHVyKCRldmVudCknIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0nb3BlblJlc291cmNlKCRldmVudCknXG4gICAgICAgIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS13aGl0ZSBWbHQtYnRuLS1pY29uIGFkZC1idXR0b25cIiBhcmlhLWxhYmVsPSdBZGQgbmV3Jz5cbiAgICAgICAgPHN2Zz5cbiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8c21hbGwgKm5nSWY9J2YuaW52YWxpZCAmJiAoKGYgfCBtZXRhTW9kZWwpLl9wYXJlbnQuc3VibWl0dGVkIHx8ICgoZnQgfCBtZXRhTW9kZWwpLnRvdWNoZWQgJiYga2V5TGlzdGVuZXJBY3RpdmUpKSdcbiAgICBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19lcnJvclwiPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMucmVxdWlyZWRcIj5SZXF1aXJlZC4mbmJzcDs8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5jdXN0b21cIj57e2YuZXJyb3JzLmN1c3RvbX19Jm5ic3A7PC9zcGFuPlxuICA8L3NtYWxsPlxuICA8c21hbGwgKm5nSWY9J21ldGEuaGludCcgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudF9faGludFwiPnt7bWV0YS5oaW50fX08L3NtYWxsPlxuPC9kaXY+XG4iLCI8ZGl2IGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtcHJldmlldycgKm5nSWY9J3ByZXZpZXcgJiYgbW9kZWwgJiYgKCFtdWx0aXBsZSB8fCAobXVsdGlwbGUgJiYgbW9kZWwubGVuZ3RoKSknPlxuICA8ZGl2IGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtbGFiZWwnPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fTwvZGl2PlxuICA8ZGl2ICpuZ0lmPSchbXVsdGlwbGUnIGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtdmFsdWUgX19ndSc+XG4gICAgPHN2ZyBjbGFzcz1cIlZsdC1pY29uIFZsdC1pY29uLS1zbWFsbGVyXCIgc3R5bGU9J21hcmdpbi10b3A6IC0zcHg7Jz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIvPjwvc3ZnPlxuICAgIHt7bW9kZWwubGFiZWwgfHwgbW9kZWwuaWR9fSA8c3BhbiBjbGFzcz0nVmx0LWdyZXknPih7e21vZGVsLnR5cGV9fSk8L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz5cbiAgICA8c3BhbiAqbmdGb3I9J2xldCBtIG9mIChtb2RlbCB8fCBbXSknIGNsYXNzPSdWbHQtYmFkZ2UgVmx0LWJhZGdlLS1hcHAnPlxuICAgICAge3ttLmxhYmVsIHx8IG0uaWQgfHwgbX19IDxzcGFuIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyAqbmdJZj0naXNQb2x5bW9ycGhpYyc+KHt7bS50eXBlfX0pPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9JyFwcmV2aWV3JyBjbGFzcz1cIm1ldGEtZmllbGQtcmVmZXJlbmNlIFZsdC1mb3JtX19lbGVtZW50IFZsdC1mb3JtX19lbGVtZW50LS1iaWdcIiBbbmdDbGFzc109XCJ7ICdWbHQtZm9ybV9fZWxlbWVudC0tZXJyb3InOiAoc2VhcmNoRXJyb3IgJiYga2V5TGlzdGVuZXJBY3RpdmUpIHx8IChmLmludmFsaWQgJiYgKChmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCB8fCAoZnQgfCBtZXRhTW9kZWwgKS50b3VjaGVkKSksICdtdWx0aXBsZSc6IG11bHRpcGxlLCAnaGFzLXZhbHVlJzogbW9kZWwsIGFjdGl2ZToga2V5TGlzdGVuZXJBY3RpdmUgfVwiPlxuICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9J2l0ZW1zLWNvbnRhaW5lcicgW25nQ2xhc3NdPSd7IGNyZWF0YWJsZTogaXNDcmVhdGFibGUgfSc+XG4gICAgPGRpdiAqbmdJZj0nbW9kZWwnIGNsYXNzPSdiYWRnZXMtY29udGFpbmVyIGtlZXAtZm9jdXMnIChjbGljayk9J2ZvY3VzKCknIHN0eWxlPSd3aWR0aDogMTAwJTsnPlxuICAgICAgPGRpdiAqbmdGb3I9J2xldCBpdGVtIG9mIG1vZGVsJyBjbGFzcz1cIlZsdC1iYWRnZSBWbHQtYmFkZ2UtLWFwcCBWbHQtYmFkZ2UtLWxhcmdlIGtlZXAtZm9jdXNcIiBbbmdDbGFzc109XCJ7IGdyaWQ6IChpdGVtLmxhYmVsIHx8IGl0ZW0uaWQgfHwgJycpLmxlbmd0aCA+IDU2fVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz0nVmx0LXRydW5jYXRlJz57e2l0ZW0ubGFiZWwgfHwgaXRlbS5pZCB8fCBpdGVtIH19IDxzcGFuICpuZ0lmPSdpc1BvbHltb3JwaGljJyBjbGFzcz0nVmx0LWdyZXktZGFyaycgc3R5bGU9J2ZvbnQtd2VpZ2h0OiBub3JtYWw7Jz4oe3tpdGVtLnR5cGV9fSk8L3NwYW4+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiVmx0LWJhZGdlX19kaXNtaXNzIGtlZXAtZm9jdXNcIiAoY2xpY2spPSdyZW1vdmUoJGV2ZW50LCBpdGVtKScgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDEycHg7IHRvcDogOHB4OycgYXJpYS1sYWJlbD0nUmVtb3ZlJz48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVcIj5cbiAgICA8ZGl2IGNsYXNzPSdkcm9wZG93bi13cmFwcGVyIFZsdC1kcm9wZG93bicgc3R5bGU9J3dpZHRoOiAxMDAlOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNDhweDsnPlxuICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxcIj5cbiAgICAgICAgPGRpdiAqbmdJZj0nc2VhcmNoRXJyb3InPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY2FsbG91dCBWbHQtY2FsbG91dC0tY3JpdGljYWwga2VlcC1mb2N1c1wiPlxuICAgICAgICAgICAgPGk+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jYWxsb3V0X19jb250ZW50XCI+e3tzZWFyY2hFcnJvcn19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSchc2VhcmNoRXJyb3IgJiYgKHN1Z2dlc3Rpb25zLmxlbmd0aCB8fCBzZWFyY2hSZXN1bHRzKScgW25nQ2xhc3NdPVwieyBzdWdnZXN0aW9uczogIXNlYXJjaFJlc3VsdHN9XCIgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50IFZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnQtLXNjcm9sbC1hcmVhXCIgc3R5bGU9J3BhZGRpbmc6IDA7Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9JyFzZWFyY2hSZXN1bHRzJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fc2Nyb2xsXCI+XG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ1ZsdC1kcm9wZG93bl9fbGluay0tc2VsZWN0ZWQnOiBhY3RpdmVTdWdnZXN0aW9uSW5kZXggPT09IGksIHNtYXJ0OiBzdWdnZXN0aW9uLnNtYXJ0IH1cIiAoY2xpY2spPSdvblN1Z2dlc3Rpb25TZWxlY3QoJGV2ZW50LCBzdWdnZXN0aW9uKScgKm5nRm9yPSdsZXQgc3VnZ2VzdGlvbiBvZiBzdWdnZXN0aW9uczsgbGV0IGkgPSBpbmRleCcgIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19saW5rIGhhcy10eXBlXCI+XG4gICAgICAgICAgICAgIDxzdmcgY2xhc3M9J1ZsdC1pY29uICBWbHQtaWNvbi0tc21hbGwnPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIi8+PC9zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9J19fZ3UnIFt0aXRsZV09J3N1Z2dlc3Rpb24ubGFiZWwnPnt7IHN1Z2dlc3Rpb24ubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyBzdHlsZT0ndGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7Jz57e3N1Z2dlc3Rpb24udHlwZX19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9J3NlYXJjaFJlc3VsdHMnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19zY3JvbGxcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9JyFzZWFyY2hSZXN1bHRzLmxlbmd0aCcgY2xhc3M9J1ZsdC1kcm9wZG93bl9fYmxvY2snPiBObyByZWNvcmRzIG1hdGNoaW5nICc8YiBzdHlsZT0ncG9pbnRlci1ldmVudHM6IG5vbmU7Jz57e3NlYXJjaFRleHR9fTwvYj4nIHdlcmUgZm91bmQuPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ1ZsdC1kcm9wZG93bl9fbGluay0tc2VsZWN0ZWQnOiBhY3RpdmVTdWdnZXN0aW9uSW5kZXggPT09IGkgfVwiIChjbGljayk9J29uU3VnZ2VzdGlvblNlbGVjdCgkZXZlbnQsIHN1Z2dlc3Rpb24pJyAqbmdGb3I9J2xldCBzdWdnZXN0aW9uIG9mIHNlYXJjaFJlc3VsdHM7IGxldCBpID0gaW5kZXgnICBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGluayBoYXMtdHlwZVwiPlxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGwnPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIi8+PC9zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9J19fZ3UnIFt0aXRsZV09J3N1Z2dlc3Rpb24ubGFiZWwnPnt7IHN1Z2dlc3Rpb24ubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyBzdHlsZT0ndGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7Jz57e3N1Z2dlc3Rpb24udHlwZX19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj0nc2VhcmNoUmVzdWx0cycgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCIgc3R5bGU9J3RleHQtYWxpZ246IHJpZ2h0OyBwYWRkaW5nLXRvcDogMDsnPlxuICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICB7eyBzZWFyY2hSZXN1bHRzID8gc2VhcmNoUmVzdWx0cy5sZW5ndGgrJyByZXN1bHRzJyA6ICdTdWdnZXN0aW9ucycgfX0gPHNwYW4gc3R5bGU9J2ZvbnQtc3R5bGU6IGl0YWxpYzsgZm9udC13ZWlnaHQ6IG5vcm1hbDsnICpuZ0lmPSdzZWFyY2hSZXN1bHRzJz5+e3sgbW9kZWwgPyAnbGFzdCBzZWFyY2gnIDogc2VhcmNoVGV4dH19PC9zcGFuPlxuICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fcHJlcGVuZFwiICpuZ0lmPSdpc1BvbHltb3JwaGljICYmIHNob3dUeXBlcyAmJiAobXVsdGlwbGUgfHwgIW1vZGVsIHx8IChkcm9wZG93blZpc2libGUgJiYgKChzdWdnZXN0aW9ucyB8fCBzZWFyY2hSZXN1bHRzIHx8IFtdKS5sZW5ndGggfHwgc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSkpKSc+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXNjb3BlXCIgW25nQ2xhc3NdPVwieyAnaGFzLXZhbHVlJzogc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSB9XCI+XG4gICAgICAgIDx2Z2lwLW1ldGEtZmllbGQgY2xhc3M9J3Nob3duJyBbbWV0YV09J3NlYXJjaFJlc291cmNlVHlwZU1ldGEnIFtwYXJlbnRdPSdzZWFyY2hSZXNvdXJjZVR5cGUnIChvbkNoYW5nZSk9J29uU2VhcmNoUmVzb3VyY2VUeXBlQ2hhbmdlZCgkZXZlbnQpJyAob25MZWF2ZSk9J29uQmx1cigkZXZlbnQpJyBbaW50ZWdyYXRpb25Db2RlXT0naW50ZWdyYXRpb25Db2RlJyB0aGVtZT0naW5oZXJpdCc+PC92Z2lwLW1ldGEtZmllbGQ+XG4gICAgICAgIDxzdmcgY2xhc3M9J1ZsdC1pY29uIFZsdC1ncmV5IFZsdC1pY29uLS1zbWFsbGVyIHZpc2libGUtbW9iaWxlIG1vYmlsZS1pY29uJyBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB0b3A6IDE1cHg7IGxlZnQ6IDE0cHg7IHBvaW50ZXItZXZlbnRzOiBub25lOyc+XG4gICAgICAgICAgPHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLW1lbnVcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8bGFiZWwgY2xhc3M9J21vYmlsZS1sYWJlbCBoaWRkZW4tbW9iaWxlIGhpZGRlbi1kZXNrdG9wJz5TZWFyY2g8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0nIShpc1BvbHltb3JwaGljICYmIHNob3dUeXBlcyAmJiAobXVsdGlwbGUgfHwgIW1vZGVsIHx8IGRyb3Bkb3duVmlzaWJsZSkpJz48IS0tIHJlcXVpcmVkIGJ5IGNzcyAtLT48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fd3JhcHBlciBWbHQtaW5wdXRcIiBzdHlsZT0nb3ZlcmZsb3c6IGhpZGRlbjsnIFtuZ0NsYXNzXT1cInsgJ2hhcy1hcHBlbmQtYnV0dG9uJzogaGFzQXBwZW5kQnV0dG9uICYmICFkaXNhYmxlZCB9XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9J3dyYXBwZXInPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fcHJlcGVuZCBWbHQtY29tcG9zaXRlX19wcmVwZW5kLS1pY29uXCIgc3R5bGU9J3RvcDogMDsgcGFkZGluZy10b3A6IDE1cHg7Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj0naXNTZWFyY2hhYmxlICYmICghbW9kZWwgfHwgbXVsdGlwbGUpJyBjbGFzcz0nVmx0LWdyZXknPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXt7IG11bHRpcGxlID8gJ3N0YWNrJyA6ICdzZWFyY2gnfX1cIi8+PC9zdmc+XG4gICAgICAgICAgICA8c3ZnICpuZ0lmPSchaXNTZWFyY2hhYmxlIHx8IChtb2RlbCAmJiAhbXVsdGlwbGUpJyBbbmdTdHlsZV09XCJ7ZmlsbDogaW50ZWdyYXRpb25JY29uID09PSAnQnJhbmQtaWNvbi12b25hZ2UnID8gJ3ZhcigtLXZnaXAtbWV0YS1pbnB1dC1jb2xvciknIDogJyd9XCI+PHVzZSBhdHRyLnhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1icmFuZC1pY29ucy5zdmcje3tpbnRlZ3JhdGlvbkljb259fVwiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSdzdWdnZXN0aW9ucy5sZW5ndGgnIGNsYXNzPVwiVmx0LWJhZGdlIFZsdC1iYWRnZS0tc21hbGwgVmx0LWJhZGdlLS1wdXJwbGVcIiBzdHlsZT0ncGFkZGluZzogMHB4IDRweDsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDI2cHg7IGxlZnQ6IDRweDsgcG9pbnRlci1ldmVudHM6IG5vbmU7IG1pbi13aWR0aDogMTRweDsnPnt7c3VnZ2VzdGlvbnMubGVuZ3RofX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dCBjbGFzcz0nbW9kZWwnIHR5cGU9J2hpZGRlbicgW3JlcXVpcmVkXT0ndmFsaWRhdGlvbnMucmVxdWlyZWQnIFsobmdNb2RlbCldPSdtb2RlbCcgI2Y9J25nTW9kZWwnIFtuYW1lXT0nbmFtZScgLz5cbiAgICAgICAgPGlucHV0IGNsYXNzPSdtYWluJyBbcmVhZG9ubHldPSchaXNTZWFyY2hhYmxlIHx8IChtb2RlbCAmJiAhbXVsdGlwbGUpJyBbbmdNb2RlbF09J3NlYXJjaFRleHQnICNmdD0nbmdNb2RlbCcgKG5nTW9kZWxDaGFuZ2UpPSdvblNlYXJjaFRleHRDaGFuZ2VkKCRldmVudCknIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwie3sgcGxhY2VIb2xkZXJMYWJlbCB8fCAnICcgfX1cIiBbbmdDbGFzc109J3sgZXh0OiBleHRlcm5hbExpbmsgfScgKGNsaWNrKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGZvY3VzKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGJsdXIpPSdvbkJsdXIoJGV2ZW50KScgW2Rpc2FibGVkXT0nZGlzYWJsZWQnIFt0aXRsZV09XCJtb2RlbCA/IG1vZGVsLmxhYmVsIDogJydcIi8+XG4gICAgICAgIDxsYWJlbCBjbGFzcz0nVmx0LXRydW5jYXRlIGhpZGRlbi1tb2JpbGUnIHN0eWxlPSdwYWRkaW5nLWxlZnQ6IDI1cHg7IHBhZGRpbmctcmlnaHQ6IDQycHg7Jz57eyAobXVsdGlwbGUgJiYgaXNQb2x5bW9ycGhpYykgPyAnK0FkZCAnIDogKChtb2RlbCB8fCAhaXNQb2x5bW9ycGhpYykgPyBtZXRhLmxhYmVsIDogKCBtZXRhLnNlYXJjaExhYmVsIHx8ICdTZWFyY2gnKSkgfX08c3BhbiAqbmdJZj0ndmFsaWRhdGlvbnMucmVxdWlyZWQnIGNsYXNzPSdWbHQtcmVkJz4qPC9zcGFuPiZuYnNwOzxzcGFuIHN0eWxlPSdjb2xvcjogdmFyKC0tdmdpcC1tZXRhLWlucHV0LWNvbG9yKTsgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7JyAqbmdJZj0nbW9kZWwnPih7e21vZGVsLnR5cGUgfHwgbW9kZWwucmVzb3VyY2VUeXBlIHx8IG1vZGVsLmxlbmd0aH19KTwvc3Bhbj48L2xhYmVsPlxuICAgICAgICA8bGFiZWwgY2xhc3M9J1ZsdC10cnVuY2F0ZSBoaWRkZW4tZGVza3RvcCcgc3R5bGU9J3BhZGRpbmctbGVmdDogMjVweDsgcGFkZGluZy1yaWdodDogNDJweDsnPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fTxzcGFuICpuZ0lmPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCcgY2xhc3M9J1ZsdC1yZWQnPio8L3NwYW4+Jm5ic3A7PHNwYW4gc3R5bGU9J2NvbG9yOiB2YXIoLS12Z2lwLW1ldGEtaW5wdXQtY29sb3IpOyB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTsnICpuZ0lmPSdtb2RlbCc+KHt7bW9kZWwudHlwZSB8fCBtb2RlbC5yZXNvdXJjZVR5cGUgfHwgbW9kZWwubGVuZ3RofX0pPC9zcGFuPjwvbGFiZWw+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGRpdiAqbmdJZj0nc2VhcmNoaW5nJyBjbGFzcz0nc2VhcmNoLXByb2dyZXNzJz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXIgVmx0LWJnLXB1cnBsZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0nVmx0LWNvbXBvc2l0ZV9fYXBwZW5kIHJpZ2h0LWFjdGlvbnMnPlxuICAgICAgICA8IS0tIDxkaXYgKm5nSWY9J3ByZXZNb2RlbCAmJiAhbW9kZWwnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uXCIgKGNsaWNrKT0ncmV2ZXJ0KCknPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1yZXBseVwiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPSdtb2RlbCAmJiAhbXVsdGlwbGUnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uXCIgKGNsaWNrKT0ncmVtb3ZlU2VsZWN0aW9uKCknPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jcm9zc1wiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhIFtocmVmXT0nZXh0ZXJuYWxMaW5rIHx8IG1vZGVsLmV4dGVybmFsTGluaycgdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9vcGVuZXInICpuZ0lmPSdleHRlcm5hbExpbmsgJiYgKG1vZGVsICYmICFtdWx0aXBsZSknIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uXCIgYXJpYS1sYWJlbD0nT3BlbiBleHRlcm5hbCc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLW9wZW5cIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gPHNwYW4gKm5nSWY9J2hhc0NyZWF0YWJsZXMnPlxuICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nICpuZ0lmPSchbW9kZWwgfHwgbXVsdGlwbGUnIChjbGljayk9J29wZW5SZXNvdXJjZSgpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tc2Vjb25kYXJ5IFZsdC1idG4tLWljb24gVmx0LWJ0bi0tbGFyZ2VcIiBzdHlsZT0nbWFyZ2luLWxlZnQ6IDEycHg7Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nICpuZ0lmPSdtb2RlbCAmJiAhbXVsdGlwbGUnIChjbGljayk9J29wZW5SZXNvdXJjZShtb2RlbCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1wcmltYXJ5IFZsdC1idG4tLWljb24gVmx0LWJ0bi0tbGFyZ2VcIiBzdHlsZT0nbWFyZ2luLWxlZnQ6IDEycHg7Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tZWRpdFwiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvc3Bhbj4gLS0+XG4gICAgPGRpdiAqbmdJZj0naGFzQXBwZW5kQnV0dG9uICYmICFkaXNhYmxlZCcgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmRcIj5cbiAgICAgIDxidXR0b24gKGZvY3VzKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGJsdXIpPSdvbkJsdXIoJGV2ZW50KScgdHlwZT0nYnV0dG9uJyAqbmdJZj0nIW1vZGVsIHx8IG11bHRpcGxlJyAoY2xpY2spPSdvcGVuUmVzb3VyY2UoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXdoaXRlIFZsdC1idG4tLWljb25cIiBhcmlhLWxhYmVsPSdBZGQgbmV3Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcGx1c1wiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJyB0eXBlPSdidXR0b24nICpuZ0lmPSdtb2RlbCAmJiAhbXVsdGlwbGUnIChjbGljayk9J29wZW5SZXNvdXJjZShtb2RlbCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS13aGl0ZSBWbHQtYnRuLS1pY29uXCIgYXJpYS1sYWJlbD0nRWRpdCc+XG4gICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWVkaXRcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxzbWFsbCAqbmdJZj0nZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKChmdCB8IG1ldGFNb2RlbCkudG91Y2hlZCAmJiBrZXlMaXN0ZW5lckFjdGl2ZSkpJyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19lcnJvclwiPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMucmVxdWlyZWRcIj5SZXF1aXJlZDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLnBhdHRlcm5cIj5TaG91bGQgbWF0Y2ggJ3t7dmFsaWRhdGlvbnMucGF0dGVybn19JyBwYXR0ZXJuPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMuY3VzdG9tXCI+e3tmLmVycm9ycy5jdXN0b219fSZuYnNwOzwvc3Bhbj5cbiAgPC9zbWFsbD5cbiAgPHNtYWxsICpuZ0lmPSdtZXRhLmhlbHBUZXh0IHx8IG1ldGEuaGludCcgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudF9faGludFwiPnt7bWV0YS5oZWxwVGV4dCB8fCBtZXRhLmhpbnR9fTwvc21hbGw+XG48L2Rpdj5cbiIsIjxkaXYgKm5nSWY9J3RydWUnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRcIiBbbmdDbGFzc109XCJ7ICdWbHQtZm9ybV9fZWxlbWVudC0tZXJyb3InOiAoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgJiYgZi5pbnZhbGlkIH1cIj5cbiAgPGxhYmVsIGNsYXNzPVwiVmx0LWxhYmVsXCI+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19ICh7eyhtb2RlbCB8fCBbXSkubGVuZ3RofX0pPHNwYW4gKm5nSWY9J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBjbGFzcz0nVmx0LXJlZCc+Kjwvc3Bhbj48L2xhYmVsPlxuICA8c21hbGwgc3R5bGU9J21hcmdpbi1ib3R0b206IDRweDsnICpuZ0lmPSdtZXRhLmhpbnQnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2hpbnRcIj57e21ldGEuaGludH19PC9zbWFsbD5cbiAgPGlucHV0IGNsYXNzPSdtb2RlbCcgdHlwZT0naGlkZGVuJyBbcmVxdWlyZWRdPSd2YWxpZGF0aW9ucy5yZXF1aXJlZCcgWyhuZ01vZGVsKV09J21vZGVsJyAjZj0nbmdNb2RlbCcgW25hbWVdPSduYW1lJyAvPlxuICA8bmctY29udGFpbmVyICpuZ0lmPSdtb2RlbCc+XG4gICAgPGRpdiAqbmdGb3I9J2xldCBpdGVtIG9mIG1vZGVsOyBsZXQgaSA9IGluZGV4Oycgc3R5bGU9J2Rpc3BsYXk6IGZsZXg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS12Z2lwLW1ldGEtc2VwYXJhdG9yLWNvbG9yKTsnPlxuICAgICAgPHZnaXAtbWV0YS1maWVsZCBzdHlsZT0nZmxleDogMTsnIFtpbmRleF09J2knIFttZXRhXT0nbGlzdCcgW3BhcmVudF09J2l0ZW0nIFtpbnRlZ3JhdGlvbkNvZGVdPSdpbnRlZ3JhdGlvbkNvZGUnIFtyZXNvdXJjZVR5cGVdPSdtZXRhLnJlc291cmNlVHlwZSB8fCByZXNvdXJjZVR5cGUnIHRoZW1lPSdpbmhlcml0Jz48L3ZnaXAtbWV0YS1maWVsZD5cbiAgICAgIDx2Z2lwLW1ldGEtZmllbGQgKm5nSWY9J21ldGEuc2VsZWN0YWJsZScgW21ldGFdPVwieyBuYW1lOiBtZXRhLnNlbGVjdGFibGUubmFtZSwgbGFiZWw6ICcgJywgdHlwZTogJ3JhZGlvJywgb3B0aW9uczogWyB7IGlkOiBtZXRhLnNlbGVjdGFibGUudmFsdWUsIGxhYmVsOiBtZXRhLnNlbGVjdGFibGUubGFiZWwgfSBdIH1cIiBbcGFyZW50XT0naXRlbScgW2ludGVncmF0aW9uQ29kZV09J2ludGVncmF0aW9uQ29kZScgdGhlbWU9J2luaGVyaXQnIHN0eWxlPSdtYXJnaW4tbGVmdDogMTJweDsgbWFyZ2luLXRvcDogMTJweDsgbWFyZ2luLXJpZ2h0OiAtMTJweDsnPjwvdmdpcC1tZXRhLWZpZWxkPlxuICAgICAgPGRpdiBzdHlsZT0ncGFkZGluZy1sZWZ0OiAxMnB4OyBtYXJnaW4tdG9wOiAzcHg7Jz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSdidXR0b24nIChjbGljayk9J3JlbW92ZShpKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLWxpbmsgaXRlbS1yZW1vdmUtYnV0dG9uXCIgW2Rpc2FibGVkXT0nbW9kZWwubGVuZ3RoID09PSAodmFsaWRhdGlvbnMubWluIHx8IDApJyBhcmlhLWxhYmVsPSdSZW1vdmUnPlxuICAgICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWJpblwiLz48L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxidXR0b24gKm5nSWY9JyF2YWxpZGF0aW9ucy5tYXggfHwgIW1vZGVsIHx8IG1vZGVsLmxlbmd0aCA8IHZhbGlkYXRpb25zLm1heCcgc3R5bGU9J3dpZHRoOiAxMDAlOycgdHlwZT0nYnV0dG9uJyAoY2xpY2spPSdhZGQoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNtYWxsIFZsdC1idG4tLXRlcnRpYXJ5IFZsdC1idG4tLWFwcCBWbHQtYnRuLS1uby1mb2N1cyBpdGVtLWFkZC1idXR0b25cIiBbZGlzYWJsZWRdPSd2YWxpZGF0aW9ucy5tYXggJiYgbW9kZWwgJiYgbW9kZWwubGVuZ3RoID09PSB2YWxpZGF0aW9ucy5tYXgnPlxuICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXBsdXNcIi8+PC9zdmc+e3tsaXN0LmxhYmVsfX1cbiAgPC9idXR0b24+XG4gIDxzbWFsbCAqbmdJZj0nKGYgfCBtZXRhTW9kZWwpLl9wYXJlbnQuc3VibWl0dGVkICYmIGYuaW52YWxpZCcgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudF9fZXJyb3JcIj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLnJlcXVpcmVkXCI+UmVxdWlyZWQ8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5tYXhsZW5ndGhcIj5MZW5ndGggY2FuIG5vdCBleGNlZWQge3t2YWxpZGF0aW9ucy5tYXhsZW5ndGh9fSBjaGFyYWN0ZXJzPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMuY3VzdG9tXCI+e3tmLmVycm9ycy5jdXN0b219fSZuYnNwOzwvc3Bhbj5cbiAgPC9zbWFsbD5cbiAgPHNtYWxsICpuZ0lmPSdtZXRhLmhlbHBUZXh0JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3ttZXRhLmhlbHBUZXh0fX08L3NtYWxsPlxuPC9kaXY+XG4iLCI8ZGl2ICpuZ0Zvcj0nbGV0IHNlY3Rpb24gb2YgbWV0YS5zZWN0aW9ucycgY2xhc3M9J1ZsdC1zZWN0aW9uJyBbbmdDbGFzc109XCJ7IHNob3duOiBzaG93QWxsIHx8IHNlY3Rpb24udmlzaWJsZSB8fCAoIW1ldGEub25lVGltZU9wdGlvbmFsICYmICFzZWN0aW9uLiRvcHRpb25hbCkgfHwgKG1ldGEub25lVGltZU9wdGlvbmFsICYmICFvcHRpb25hbEZpZWxkc0NvdW50KSB9XCI+XG5cdDxoNSAqbmdJZj0nc2VjdGlvbi5sYWJlbCcgY2xhc3M9XCJWbHQtc2VjdGlvbl9fdGl0bGVcIj57e3NlY3Rpb24ubGFiZWx9fTwvaDU+XG5cdDxkaXYgc3R5bGU9J292ZXJmbG93OiB2aXNpYmxlOycgW25nQ2xhc3NdPVwieyAnZm9yLXByZXZpZXcnOiBwcmV2aWV3IH1cIj5cblx0XHQ8c21hbGwgKm5nSWY9J3NlY3Rpb24uZGVzY3JpcHRpb24nIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2hpbnRcIj57e3NlY3Rpb24uZGVzY3JpcHRpb259fTwvc21hbGw+XG5cdFx0PGRpdj5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPSdsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHMnPlxuXHRcdFx0XHQ8dmdpcC1tZXRhLWZpZWxkICpuZ0lmPSchZmllbGQuJGhpZGRlbiAmJiAoc2hvd0FsbCB8fCBzZWN0aW9uLnZpc2libGUgfHwgIWZpZWxkLiRvcHRpb25hbCknIFttZXRhXT0nZmllbGQnIFtwYXJlbnRdPSdyZXNvdXJjZScgW2ludGVncmF0aW9uQ29kZV09J2ludGVncmF0aW9uQ29kZScgW3Jlc291cmNlVHlwZV09J3Jlc291cmNlVHlwZScgW3ByZXZpZXddPSdwcmV2aWV3JyBbbmdDbGFzc109XCJ7IHNob3duOiAhZmllbGQuJGludmlzaWJsZSAmJiAoc2hvd0FsbCB8fCB0cnVlKSB9XCIgdGhlbWU9J2luaGVyaXQnIFthdHRyLmRhdGEtdGhlbWVdPSd0aGVtZSc+PC92Z2lwLW1ldGEtZmllbGQ+XG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9J2lzUGVyc2lzdGVkUmVzb3VyY2UgJiYgbWV0YS5jaGlsZHJlbiAmJiBwcmV2aWV3Jz5cblx0PGRpdiAqbmdGb3I9J2xldCBjaGlsZCBvZiBtZXRhLmNoaWxkcmVuJz5cblx0XHQ8aDUgY2xhc3M9J1ZsdC1jaGlsZHJlbl9fdGl0bGUnPlxuXHRcdFx0PHN2ZyBjbGFzcz1cIlZsdC1pY29uXCI+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXN0YWNrXCIgLz48L3N2Zz4mbmJzcDtcblx0XHRcdHt7Y2hpbGQubGFiZWx9fSA8c3BhbiBjbGFzcz0nVmx0LWdyZXknPih7eyhyZXNvdXJjZVtjaGlsZC5uYW1lXSB8fCBbXSkubGVuZ3RofX0pPC9zcGFuPlxuXHRcdDwvaDU+XG5cdFx0PGRpdiAqbmdGb3I9XCJsZXQgYyBvZiByZXNvdXJjZVtjaGlsZC5uYW1lXVwiIHN0eWxlPSdwb3NpdGlvbjogcmVsYXRpdmU7Jz5cblxuXHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1jYXJkIFZsdC1iZy13aGl0ZVwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWNhcmRfX2NvbnRlbnQgVmx0LWJ0bi1vbi1ob3ZlclwiPlxuXHRcdFx0XHRcdDxoNT57e2MuU3ViamVjdCB8fCBjLnN1YmplY3QgfHwgYy5zdW1tYXJ5IHx8IGMudGl0bGUgfHwgYy5DYXNlTnVtYmVyIHx8IGMuY29tbWVudCB8fCBjLmJvZHkgfHwgYy5uYW1lIHx8IGMudG9waWMgfHwgYy5jb250ZW50IHx8ICcuLi4nIH19PC9oNT5cblx0XHRcdFx0XHQ8ZGl2IHN0eWxlPSdmb250LXNpemU6IDEycHg7IGxpbmUtaGVpZ2h0OiAxNnB4Oyc+XG5cdFx0XHRcdFx0XHRDcmVhdGVkOiA8c3BhbiBjbGFzcz0nVmx0LWJsYWNrJz57e2MuX3ZnaXMuY3JlYXRlZERhdGUgfCBkYXRlOidtZWRpdW1EYXRlJ319PC9zcGFuPlxuXHRcdFx0XHRcdFx0RWRpdGVkOiA8c3BhbiBjbGFzcz0nVmx0LWJsYWNrJz57e2MuX3ZnaXMubW9kaWZpZWREYXRlIHwgZGF0ZTonbWVkaXVtJ319PC9zcGFuPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtYmFkZ2UgVmx0LWJhZGdlLS1hcHAgVmx0LWJhZGdlLS1wdXJwbGUgVmx0LWJhZGdlLS1zbWFsbFwiPnt7Yy5fdmdpcy5yZXNvdXJjZVR5cGV9fTwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtYnRuLWdyb3VwIFZsdC1idG4tZ3JvdXAtLWhvdmVyXCI+XG5cdFx0XHRcdFx0XHQ8YSAqbmdJZj0nYy5fdmdpcy5leHRlcm5hbExpbmsnIGF0dHIuaHJlZj0ne3tjLl92Z2lzLmV4dGVybmFsTGlua319JyB0YXJnZXQ9J19ibGFuaycgcmVsPSdub29wZW5lcicgcmVsPSdub29wZW5lcicgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXRlcnRpYXJ5IFZsdC1idG4tLWljb25cIiBhcmlhLWxhYmVsPSdPcGVuIGV4dGVybmFsJz48c3ZnIHN0eWxlPSdtYXJnaW4tbGVmdDogMDsgbWFyZ2luLXJpZ2h0OiAwOyc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLW9wZW5cIi8+PC9zdmc+PC9hPlxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5DaGlsZChjaGlsZCwgYyknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS10ZXJ0aWFyeSBWbHQtYnRuLS1pY29uXCI+PHN2ZyBzdHlsZT0nbWFyZ2luLWxlZnQ6IDA7IG1hcmdpbi1yaWdodDogMDsnPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXt7IGNoaWxkLnJlZmVyZW5jZS5lZGl0YWJsZSA/ICdlZGl0JyA6ICdleWUtbmVnYXRpdmUnIH19XCIvPjwvc3ZnPjwvYnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRcdDxidXR0b24gc3R5bGU9J3dpZHRoOiAxMDAlOyBtYXJnaW4tdG9wOiAwOyBtYXgtd2lkdGg6IDEwMCU7JyB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW5DaGlsZChjaGlsZCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zbWFsbCBWbHQtYnRuLS1zZWNvbmRhcnlcIiBbZGlzYWJsZWRdPSdjaGlsZC5jcmVhdGFibGUgPT09IGZhbHNlJz5cblx0XHRcdDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXBsdXNcIi8+PC9zdmc+e3tjaGlsZC5yZWZlcmVuY2UubGFiZWx9fVxuXHRcdDwvYnV0dG9uPlxuXHQ8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj0nIShtZXRhLm9uZVRpbWVPcHRpb25hbCAmJiBzaG93QWxsKScgW25nQ2xhc3NdPSd7IGNlbnRlcmVkOiAhbWV0YS5vbmVUaW1lT3B0aW9uYWwgfSc+XG5cdDxidXR0b24gKm5nSWY9JyFwcmV2aWV3ICYmIG9wdGlvbmFsRmllbGRzQ291bnQnIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0ndG9nZ2xlT3B0aW9uYWxGaWVsZHMoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNtYWxsIFZsdC1idG4tLWxpbmsgbW9yZS1idXR0b25cIiBzdHlsZT0nbWFyZ2luOiAwOyBtYXJnaW4tYm90dG9tOiAxMHB4Oyc+XG5cdFx0PHN2Zz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1jaGV2cm9uLXt7IHNob3dBbGwgPyAndXAnIDogJ2Rvd24nIH19XCIvPjwvc3ZnPlxuXHRcdHt7IHNob3dBbGwgPyAnSGlkZScgOiAnU2hvdycgfX0gT3B0aW9uYWwgRmllbGRzICh7e29wdGlvbmFsRmllbGRzQ291bnR9fSlcblx0PC9idXR0b24+XG48L2Rpdj5cbiIsIjxkaXYgKm5nSWY9J2dlbmVyYWxFcnJvcicgY2xhc3M9XCJWbHQtY2FsbG91dCBWbHQtY2FsbG91dC0tY3JpdGljYWxcIiBzdHlsZT0nb3ZlcmZsb3c6IGF1dG87IG1hcmdpbjogMjBweDsnPlxuXHQ8aT48L2k+XG5cdDxkaXYgY2xhc3M9XCJWbHQtY2FsbG91dF9fY29udGVudFwiPlxuXHRcdDxwPnt7Z2VuZXJhbEVycm9yfX08L3A+XG5cdDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPSchbWV0YScgY2xhc3M9XCJWbHQtcHJvZ3Jlc3NcIj5cblx0PGRpdiBjbGFzcz1cIlZsdC1wcm9ncmVzc19fYmFyXCIgW25nQ2xhc3NdPVwieyBsb2FkaW5nOiBtZXRhTG9hZGluZyB9XCIgcm9sZT1cInByb2dyZXNzYmFyXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBhcmlhLXZhbHVldGV4dD1cIkxvYWRpbmcgTWV0YWRhdGFcIiBhcmlhLXZhbHVlbWF4PVwiMTAwXCI+PC9kaXY+XG48L2Rpdj5cbjxmb3JtIFt2Z2lwTWV0YUZvcm1BdXRvZm9jdXNdPSchcmVzb3VyY2UgfHwgIXJlc291cmNlLmV4dGVybmFsSWQnICpuZ0lmPSdtZXRhICYmICFnZW5lcmFsRXJyb3InICNyZXNvdXJjZUZvcm09XCJuZ0Zvcm1cIiBbbmFtZV09J3Jlc291cmNlLnJlc291cmNlVHlwZScgKG5nU3VibWl0KT0nc3VibWl0KHJlc291cmNlRm9ybSknIG5vdmFsaWRhdGU+XG5cdDxkaXYgY2xhc3M9J2Zvcm0tY29udGVudCcgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47Jz5cblx0XHQ8ZGl2IFtuZ0NsYXNzXT1cInsgJ1ZsdC1jYWxsb3V0LS1kaXNtaXNzZWQnOiAhZm9ybUVycm9ycyB9XCIgY2xhc3M9XCJWbHQtY2FsbG91dCBWbHQtY2FsbG91dC0tYmFubmVyIFZsdC1jYWxsb3V0LS1jcml0aWNhbFwiPlxuXHRcdFx0PGk+PC9pPlxuXHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1jYWxsb3V0X19jb250ZW50XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiBhdXRvO1wiPlxuXHRcdFx0XHQ8cD5UaGVyZSBpcyBhIHByb2JsZW0gd2l0aCBvbmUgb3IgbW9yZSBmaWVsZHM8L3A+XG5cdFx0XHRcdDxzbWFsbCBzdHlsZT0nZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxLjBlbTsnICpuZ0lmPSdmb3JtRXJyb3JzJz57eyBmb3JtRXJyb3JzLm1lc3NhZ2UgfHwgZm9ybUVycm9ycyB9fTwvc21hbGw+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz1cIlZsdC1jYWxsb3V0X19kaXNtaXNzXCIgKGNsaWNrKT0nY2xlYXJGb3JtRXJyb3JzKCknIGFyaWEtbGFiZWw9XCJEaXNtaXNzXCI+PC9idXR0b24+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdiBjbGFzcz1cIlZsdC1jYXJkX19jb250ZW50XCIgc3R5bGU9J21pbi1oZWlnaHQ6IDQwcHg7Jz5cblx0XHRcdDx2Z2lwLW1ldGEtbGF5b3V0ICpuZ0lmPSdlZGl0JyBbbWV0YV09J21ldGEubGF5b3V0JyBbcmVzb3VyY2VdPSdtb2RlbCcgW3ByZXZpZXddPSdmYWxzZScgW2ludGVncmF0aW9uXT0nbWV0YS5pbnRlZ3JhdGlvbicgW3R5cGVdPSdyZXNvdXJjZS5yZXNvdXJjZVR5cGUnIHRoZW1lPSdpbmhlcml0Jz48L3ZnaXAtbWV0YS1sYXlvdXQ+XG5cdFx0XHQ8dmdpcC1tZXRhLWxheW91dCAqbmdJZj0nIWVkaXQnIFttZXRhXT0nbWV0YS5sYXlvdXQnIFtyZXNvdXJjZV09J21vZGVsJyBbcHJldmlld109J3RydWUnIFtpbnRlZ3JhdGlvbl09J21ldGEuaW50ZWdyYXRpb24nIFt0eXBlXT0ncmVzb3VyY2UucmVzb3VyY2VUeXBlJyB0aGVtZT0naW5oZXJpdCc+PC92Z2lwLW1ldGEtbGF5b3V0PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cIlZsdC1jYXJkX19mb290ZXJcIj5cblx0XHQ8YnV0dG9uIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0tYXBwIFZsdC1idG4tLW91dGxpbmVcIiB0eXBlPSdidXR0b24nIGFyaWEtbGFiZWw9J0NhbmNlbCcgKGNsaWNrKT0nY2xvc2UoKSc+XG5cdFx0XHR7eyBlZGl0ID8gJ0NhbmNlbCcgOiAnQ2xvc2UnIH19XG5cdFx0PC9idXR0b24+XG5cdFx0PGJ1dHRvbiAqbmdJZj0nZWRpdCcgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLWFwcFwiIFtuZ0NsYXNzXT1cInsgJ1ZsdC1idG4tLXByaW1hcnknOiBpc1BlcnNpc3RlbnQsICdWbHQtYnRuLS1zZWNvbmRhcnknOiAhaXNQZXJzaXN0ZW50IH1cIiB0eXBlPSdzdWJtaXQnPlxuXHRcdFx0e3sgKHJlc291cmNlICYmIHJlc291cmNlLmV4dGVybmFsSWQpID8gJ1VwZGF0ZScgOiAnQ3JlYXRlJyB9fVxuXHRcdDwvYnV0dG9uPlxuXHRcdDxidXR0b24gKGNsaWNrKT0nZWRpdE1vZGUoKScgKm5nSWY9JyFlZGl0ICYmIGlzRWRpdGFibGUnIFtkaXNhYmxlZF09JyFpc0VkaXRhYmxlJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tYXBwIFZsdC1idG4tLXByaW1hcnlcIiB0eXBlPSdidXR0b24nIGFyaWEtbGFiZWw9J0VkaXQnPlxuXHRcdFx0RWRpdFxuXHRcdDwvYnV0dG9uPlxuXHRcdDxkaXYgc3R5bGU9J21hcmdpbi1yaWdodDogOHB4OyBmbGV4OiAxOyc+XG5cdFx0XHQ8ZGl2ICpuZ0lmPSdtZXRhLmF2YWlsYWJsZUxheW91dHMgJiYgbWV0YS5hdmFpbGFibGVMYXlvdXRzLmxlbmd0aCcgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudCBWbHQtZm9ybV9fZWxlbWVudC0tYmlnXCIgc3R5bGU9J3BhZGRpbmc6IDA7IG1hcmdpbjogLThweCAtMThweCAtOHB4IDA7Jz5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1zZWxlY3RcIj5cblx0XHRcdFx0XHQ8bGFiZWwgc3R5bGU9J2FsbDogaW5oZXJpdDsnPlxuXHRcdFx0XHRcdFx0PHNlbGVjdCBzdHlsZT0nYm9yZGVyOiAwOyBtYXJnaW4tdG9wOiAzcHg7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OycgKGNoYW5nZSk9J2NoYW5nZUxheW91dCgpJyBbKG5nTW9kZWwpXT0nY3VycmVudExheW91dElkJyBbbmdNb2RlbE9wdGlvbnNdPSd7IHN0YW5kYWxvbmU6IHRydWUgfScgW2Rpc2FibGVkXT0naXNQZXJzaXN0ZW50Jz5cblx0XHRcdFx0XHRcdFx0PG9wdGlvbiBzZWxlY3RlZCBkaXNhYmxlZD5TZWxlY3QgbGF5b3V0PC9vcHRpb24+XG5cdFx0XHRcdFx0XHRcdDxvcHRpb24gKm5nRm9yPSdsZXQgbGF5b3V0IG9mIG1ldGEuYXZhaWxhYmxlTGF5b3V0cycgW25nVmFsdWVdPSdsYXlvdXQuaWQnPnt7bGF5b3V0Lm5hbWV9fTwvb3B0aW9uPlxuXHRcdFx0XHRcdFx0PC9zZWxlY3Q+XG5cdFx0XHRcdFx0XHQ8bGFiZWw+TGF5b3V0PC9sYWJlbD5cblx0XHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRcdDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd24gcmVzb3VyY2UtbWVudVwiIFtuZ0NsYXNzXT1cInsgJ1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQnOiByZXNvdXJjZU1lbnVWaXNpYmxlIH1cIiBzdHlsZT0nbWFyZ2luLWxlZnQ6IDJweDsnPlxuXHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxcIiBzdHlsZT0nYm90dG9tOiA0MHB4OyByaWdodDogLTRweDsgdG9wOiBpbml0aWFsOyc+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50XCI+XG5cdFx0XHRcdFx0PGEgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2xpbmtcIiAoY2xpY2spPSdsb2FkTWV0YWRhdGEoY3VycmVudExheW91dElkLCB0cnVlKSc+XG5cdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHQ8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGxlcic+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXJlZnJlc2hcIi8+PC9zdmc+Jm5ic3A7Jm5ic3A7UmVmcmVzaCBtZXRhZGF0YVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9hPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fdHJpZ2dlclwiPlxuXHRcdFx0XHQ8YnV0dG9uIHR5cGU9J2J1dHRvbicgKGNsaWNrKT0nb3BlblJlc291cmNlTWVudSgpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tbGlua1wiIGFyaWEtbGFiZWw9J1Jlc291cmNlIG1lbnUnPlxuXHRcdFx0XHRcdDxzdmcgY2xhc3M9J1ZsdC1pY29uIFZsdC1pY29uLS1zbWFsbCcgc3R5bGU9J21hcmdpbjogMDsnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1tb3JlLXYtbmVnYXRpdmVcIi8+PC9zdmc+XG5cdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9mb3JtPlxuPGRpdiBjbGFzcz0nYnVzeS1tYXNrJyBbbmdDbGFzc109XCJ7IGFjdGl2ZTogYnVzeSB9XCI+XG5cdDxkaXYgc3R5bGU9J2hlaWdodDogMTAwJTsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Jz5cblx0XHQ8ZGl2IGNsYXNzPVwiVmx0LXNwaW5uZXJcIj48L2Rpdj5cblx0PC9kaXY+XG48L2Rpdj4iLCI8ZGl2IGNsYXNzPVwiVmx0LWNhcmQgVmx0LWJnLXdoaXRlXCI+XG5cdDxkaXYgY2xhc3M9XCJWbHQtY2FyZF9fY29udGVudCBWbHQtYnRuLW9uLWhvdmVyXCI+XG5cdFx0PGg1Pnt7bW9kZWwuU3ViamVjdCB8fCBtb2RlbC5zdWJqZWN0IHx8IG1vZGVsLnN1bW1hcnkgfHwgbW9kZWwudGl0bGUgfHwgbW9kZWwuQ2FzZU51bWJlciB8fCBtb2RlbC5jb21tZW50IHx8IG1vZGVsLmJvZHkgfHwgbW9kZWwubmFtZSB8fCBtb2RlbC50b3BpYyB8fCAnLi4uJyB9fTwvaDU+XG5cdFx0PGRpdiBzdHlsZT0nZm9udC1zaXplOiAxMnB4OyBsaW5lLWhlaWdodDogMTZweDsnPlxuXHRcdFx0Q3JlYXRlZDogPHNwYW4gY2xhc3M9J1ZsdC1ibGFjayc+e3ttb2RlbC5fdmdpcy5jcmVhdGVkRGF0ZSB8IGRhdGU6J21lZGl1bURhdGUnfX08L3NwYW4+XG5cdFx0XHRFZGl0ZWQ6IDxzcGFuIGNsYXNzPSdWbHQtYmxhY2snPnt7bW9kZWwuX3ZnaXMubW9kaWZpZWREYXRlIHwgZGF0ZTonbWVkaXVtJ319PC9zcGFuPlxuXHRcdDwvZGl2PlxuXHRcdDxkaXYgY2xhc3M9XCJWbHQtYmFkZ2UgVmx0LWJhZGdlLS1hcHAgVmx0LWJhZGdlLS1wdXJwbGUgVmx0LWJhZGdlLS1zbWFsbFwiPnt7bW9kZWwuX3ZnaXMucmVzb3VyY2VUeXBlfX08L2Rpdj5cblx0XHQ8ZGl2IGNsYXNzPVwiVmx0LWJ0bi1ncm91cCBWbHQtYnRuLWdyb3VwLS1ob3ZlclwiPlxuXHRcdFx0PGEgKm5nSWY9J21vZGVsLl92Z2lzLmV4dGVybmFsTGluaycgYXR0ci5ocmVmPSd7e21vZGVsLl92Z2lzLmV4dGVybmFsTGlua319JyB0YXJnZXQ9J19ibGFuaycgcmVsPSdub29wZW5lcicgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXRlcnRpYXJ5IFZsdC1idG4tLWljb25cIiBhcmlhLWxhYmVsPSdPcGVuIGV4dGVybmFsJz48c3ZnIHN0eWxlPSdtYXJnaW4tbGVmdDogMDsgbWFyZ2luLXJpZ2h0OiAwOyc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLW9wZW5cIi8+PC9zdmc+PC9hPlxuXHRcdFx0PGJ1dHRvbiB0eXBlPSdidXR0b24nIChjbGljayk9J29wZW4ocmVzb3VyY2UsIG1vZGVsKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXRlcnRpYXJ5IFZsdC1idG4tLWljb25cIiBhcmlhLWxhYmVsPSdFZGl0Jz48c3ZnIHN0eWxlPSdtYXJnaW4tbGVmdDogMDsgbWFyZ2luLXJpZ2h0OiAwOyc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWVkaXRcIi8+PC9zdmc+PC9idXR0b24+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuPC9kaXY+XG4iXX0=
|