@alfresco/adf-process-services-cloud 8.1.0-16476939464 → 8.1.0-16490789997
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/esm2022/lib/form/components/form-cloud.component.mjs +27 -4
- package/esm2022/lib/form/services/form-cloud.service.mjs +2 -2
- package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +2 -2
- package/esm2022/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.mjs +35 -3
- package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +35 -3
- package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +10 -3
- package/fesm2022/adf-process-services-cloud.mjs +106 -12
- package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
- package/lib/form/components/form-cloud.component.d.ts +12 -1
- package/lib/form/services/form-cloud.service.d.ts +1 -1
- package/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.d.ts +21 -1
- package/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.d.ts +21 -1
- package/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.d.ts +6 -1
- package/package.json +4 -4
|
@@ -45,6 +45,16 @@ export class FormCloudComponent extends FormBaseComponent {
|
|
|
45
45
|
this.appName = '';
|
|
46
46
|
/** Toggle rendering of the `Complete` button. */
|
|
47
47
|
this.showCompleteButton = false;
|
|
48
|
+
/**
|
|
49
|
+
* Custom text for the `Save` button.
|
|
50
|
+
* If not provided, the default text will be used.
|
|
51
|
+
*/
|
|
52
|
+
this.customSaveButtonText = '';
|
|
53
|
+
/**
|
|
54
|
+
* Custom text for the `Complete` button.
|
|
55
|
+
* If not provided, the default text will be used.
|
|
56
|
+
*/
|
|
57
|
+
this.customCompleteButtonText = '';
|
|
48
58
|
/** Emitted when the form is submitted with the `Save` or custom outcomes. */
|
|
49
59
|
this.formSaved = new EventEmitter();
|
|
50
60
|
/** Emitted when the form is submitted with the `Complete` outcome. */
|
|
@@ -173,6 +183,15 @@ export class FormCloudComponent extends FormBaseComponent {
|
|
|
173
183
|
}
|
|
174
184
|
}));
|
|
175
185
|
}
|
|
186
|
+
getCustomOutcomeButtonText(outcome) {
|
|
187
|
+
if (outcome?.id === FormModel.SAVE_OUTCOME || outcome?.name === FormOutcomeModel.SAVE_ACTION) {
|
|
188
|
+
return this.customSaveButtonText;
|
|
189
|
+
}
|
|
190
|
+
else if (outcome?.id === FormModel.COMPLETE_OUTCOME || outcome?.name === FormOutcomeModel.COMPLETE_ACTION) {
|
|
191
|
+
return this.customCompleteButtonText;
|
|
192
|
+
}
|
|
193
|
+
return '';
|
|
194
|
+
}
|
|
176
195
|
isAProcessTask(taskRepresentation) {
|
|
177
196
|
return taskRepresentation.processDefinitionId && taskRepresentation.processDefinitionDeploymentId !== 'null';
|
|
178
197
|
}
|
|
@@ -279,7 +298,7 @@ export class FormCloudComponent extends FormBaseComponent {
|
|
|
279
298
|
* @returns list of form outcomes
|
|
280
299
|
*/
|
|
281
300
|
getFormDefinitionOutcomes(form) {
|
|
282
|
-
return [new FormOutcomeModel(form, { id:
|
|
301
|
+
return [new FormOutcomeModel(form, { id: FormModel.SAVE_OUTCOME, name: FormOutcomeModel.SAVE_ACTION, isSystem: true })];
|
|
283
302
|
}
|
|
284
303
|
checkVisibility(field) {
|
|
285
304
|
if (field?.form) {
|
|
@@ -339,7 +358,7 @@ export class FormCloudComponent extends FormBaseComponent {
|
|
|
339
358
|
}
|
|
340
359
|
}
|
|
341
360
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormCloudComponent, deps: [{ token: FORM_CLOUD_FIELD_VALIDATORS_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
342
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormCloudComponent, isStandalone: true, selector: "adf-cloud-form", inputs: { appName: "appName", appVersion: "appVersion", formId: "formId", processInstanceId: "processInstanceId", taskId: "taskId", data: "data", displayModeConfigurations: "displayModeConfigurations", showCompleteButton: "showCompleteButton" }, outputs: { formSaved: "formSaved", formCompleted: "formCompleted", formLoaded: "formLoaded", formDataRefreshed: "formDataRefreshed", formContentClicked: "formContentClicked", displayModeOn: "displayModeOn", displayModeOff: "displayModeOff" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, providers: [FormCloudSpinnerService], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!hasForm()\">\n <ng-content select=\"[empty-form]\" />\n</div>\n\n<div\n *ngIf=\"hasForm()\"\n class=\"adf-cloud-form-container adf-cloud-form-{{ displayConfiguration?.options?.fullscreen ? 'fullscreen' : 'inline' }}-container\"\n [style]=\"formStyle\"\n>\n <div class=\"adf-cloud-form-content\" [cdkTrapFocus]=\"displayConfiguration?.options?.trapFocus\" cdkTrapFocusAutoCapture>\n <adf-toolbar class=\"adf-cloud-form-toolbar\" *ngIf=\"displayConfiguration?.options?.displayToolbar\">\n <div class=\"adf-cloud-form__form-title\">\n <span class=\"adf-cloud-form__display-name\" [title]=\"form.taskName\">\n {{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </div>\n\n <adf-toolbar-divider *ngIf=\"displayConfiguration?.options?.displayCloseButton\" />\n <button\n *ngIf=\"displayConfiguration?.options?.displayCloseButton\"\n class=\"adf-cloud-form-close-button\"\n data-automation-id=\"adf-toolbar-right-back\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n [attr.data-automation-id]=\"'adf-cloud-form-close-button'\"\n [title]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n mat-icon-button\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\"\n (click)=\"switchToDisplayMode()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </adf-toolbar>\n\n <mat-card\n appearance=\"outlined\"\n class=\"adf-cloud-form-content-card\"\n [class.adf-cloud-form-content-card-fullscreen]=\"displayMode === 'fullScreen'\"\n >\n <div class=\"adf-cloud-form-content-card-container\">\n <mat-card-header *ngIf=\"showTitle || showRefreshButton || showValidationIcon\">\n <mat-card-title>\n <h4>\n <div *ngIf=\"showValidationIcon\" class=\"adf-form-validation-button\">\n <i id=\"adf-valid-form-icon\" class=\"material-icons\" *ngIf=\"form.isValid; else no_valid_form\">check_circle</i>\n <ng-template #no_valid_form>\n <i id=\"adf-invalid-form-icon\" class=\"material-icons adf-invalid-color\">error</i>\n </ng-template>\n </div>\n <div\n *ngIf=\"!displayConfiguration?.options?.fullscreen && findDisplayConfiguration('fullScreen')\"\n class=\"adf-cloud-form-fullscreen-button\"\n >\n <button\n mat-icon-button\n (click)=\"switchToDisplayMode('fullScreen')\"\n [attr.data-automation-id]=\"'adf-cloud-form-fullscreen-button'\"\n >\n <mat-icon>fullscreen</mat-icon>\n </button>\n </div>\n <div *ngIf=\"showRefreshButton\" class=\"adf-cloud-form-reload-button\" [title]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <button mat-icon-button (click)=\"onRefreshClicked()\" [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n <span *ngIf=\"isTitleEnabled()\" class=\"adf-cloud-form-title\" [title]=\"form.taskName\"\n >{{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content class=\"adf-form-container-card-content\">\n <adf-form-renderer [formDefinition]=\"form\" [readOnly]=\"readOnly\" />\n </mat-card-content>\n <mat-card-actions *ngIf=\"form.hasOutcomes()\" class=\"adf-cloud-form-content-card-actions\" align=\"end\">\n <ng-content select=\"adf-cloud-form-custom-outcomes\" />\n <ng-container *ngFor=\"let outcome of form.outcomes\">\n <button\n *ngIf=\"outcome.isVisible\"\n [id]=\"'adf-form-' + outcome.name | formatSpace\"\n [color]=\"getColorForOutcome(outcome.name)\"\n mat-button\n [disabled]=\"!isOutcomeButtonEnabled(outcome)\"\n [class.adf-form-hide-button]=\"!isOutcomeButtonVisible(outcome, form.readOnly)\"\n class=\"adf-cloud-form-custom-outcome-button\"\n (click)=\"onOutcomeClicked(outcome)\"\n >\n {{ outcome.name | translate | uppercase }}\n </button>\n </ng-container>\n </mat-card-actions>\n </div>\n </mat-card>\n </div>\n</div>\n", styles: [".adf-full-screen,.adf-cloud-form-inline-container,.adf-cloud-form-container .adf-cloud-form-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-cloud-form-container .adf-cloud-form-content{flex:1;flex-direction:column;display:flex;position:relative}.adf-cloud-form-fullscreen-container .adf-cloud-form-content{position:fixed;top:0;left:0;z-index:100000}.adf-cloud-form-toolbar .mat-toolbar{background-color:var(--adf-theme-background-card-color-087)}.adf-cloud-form-fullscreen-button{position:absolute;right:70px;top:30px}.adf-cloud-form__display-name{font-size:var(--theme-subheading-2-font-size);opacity:.87;line-height:1.5;letter-spacing:-.4px;font-weight:400;font-style:normal;font-stretch:normal;max-width:400px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:middle;color:var(--adf-theme-foreground-text-color)}.adf-cloud-form__form-title{text-align:center;flex:1 1 auto}.adf-cloud-form-content-card{padding-bottom:2em;overflow-y:auto;position:static;height:70%}.adf-cloud-form-content-card-fullscreen{padding:0;height:100%;width:100%;position:relative}.adf-cloud-form-content-card-fullscreen-container{display:flex;flex-direction:column;height:100%}.adf-cloud-form-content-card-fullscreen-container .mat-mdc-card-content{height:100%;overflow:hidden auto}.adf-cloud-form-content-card-container .adf-form-container-card-content{padding-left:1%;padding-right:1%}.adf-cloud-form-sidebars{display:flex;flex:1 1 auto}.adf-cloud-form-sidebars adf-viewer-render{order:1;flex:1 1 auto;display:flex}.adf-cloud-form .adf-label{white-space:normal}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: FormatSpacePipe, name: "formatSpace" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: FormRendererComponent, selector: "adf-form-renderer", inputs: ["formDefinition", "readOnly"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ToolbarDividerComponent, selector: "adf-toolbar-divider" }, { kind: "component", type: ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i5.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] }); }
|
|
361
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormCloudComponent, isStandalone: true, selector: "adf-cloud-form", inputs: { appName: "appName", appVersion: "appVersion", formId: "formId", processInstanceId: "processInstanceId", taskId: "taskId", data: "data", displayModeConfigurations: "displayModeConfigurations", showCompleteButton: "showCompleteButton", customSaveButtonText: "customSaveButtonText", customCompleteButtonText: "customCompleteButtonText" }, outputs: { formSaved: "formSaved", formCompleted: "formCompleted", formLoaded: "formLoaded", formDataRefreshed: "formDataRefreshed", formContentClicked: "formContentClicked", displayModeOn: "displayModeOn", displayModeOff: "displayModeOff" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, providers: [FormCloudSpinnerService], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!hasForm()\">\n <ng-content select=\"[empty-form]\" />\n</div>\n\n<div\n *ngIf=\"hasForm()\"\n class=\"adf-cloud-form-container adf-cloud-form-{{ displayConfiguration?.options?.fullscreen ? 'fullscreen' : 'inline' }}-container\"\n [style]=\"formStyle\"\n>\n <div class=\"adf-cloud-form-content\" [cdkTrapFocus]=\"displayConfiguration?.options?.trapFocus\" cdkTrapFocusAutoCapture>\n <adf-toolbar class=\"adf-cloud-form-toolbar\" *ngIf=\"displayConfiguration?.options?.displayToolbar\">\n <div class=\"adf-cloud-form__form-title\">\n <span class=\"adf-cloud-form__display-name\" [title]=\"form.taskName\">\n {{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </div>\n\n <adf-toolbar-divider *ngIf=\"displayConfiguration?.options?.displayCloseButton\" />\n <button\n *ngIf=\"displayConfiguration?.options?.displayCloseButton\"\n class=\"adf-cloud-form-close-button\"\n data-automation-id=\"adf-toolbar-right-back\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n [attr.data-automation-id]=\"'adf-cloud-form-close-button'\"\n [title]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n mat-icon-button\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\"\n (click)=\"switchToDisplayMode()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </adf-toolbar>\n\n <mat-card\n appearance=\"outlined\"\n class=\"adf-cloud-form-content-card\"\n [class.adf-cloud-form-content-card-fullscreen]=\"displayMode === 'fullScreen'\"\n >\n <div class=\"adf-cloud-form-content-card-container\">\n <mat-card-header *ngIf=\"showTitle || showRefreshButton || showValidationIcon\">\n <mat-card-title>\n <h4>\n <div *ngIf=\"showValidationIcon\" class=\"adf-form-validation-button\">\n <i id=\"adf-valid-form-icon\" class=\"material-icons\" *ngIf=\"form.isValid; else no_valid_form\">check_circle</i>\n <ng-template #no_valid_form>\n <i id=\"adf-invalid-form-icon\" class=\"material-icons adf-invalid-color\">error</i>\n </ng-template>\n </div>\n <div\n *ngIf=\"!displayConfiguration?.options?.fullscreen && findDisplayConfiguration('fullScreen')\"\n class=\"adf-cloud-form-fullscreen-button\"\n >\n <button\n mat-icon-button\n (click)=\"switchToDisplayMode('fullScreen')\"\n [attr.data-automation-id]=\"'adf-cloud-form-fullscreen-button'\"\n >\n <mat-icon>fullscreen</mat-icon>\n </button>\n </div>\n <div *ngIf=\"showRefreshButton\" class=\"adf-cloud-form-reload-button\" [title]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <button mat-icon-button (click)=\"onRefreshClicked()\" [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n <span *ngIf=\"isTitleEnabled()\" class=\"adf-cloud-form-title\" [title]=\"form.taskName\"\n >{{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content class=\"adf-form-container-card-content\">\n <adf-form-renderer [formDefinition]=\"form\" [readOnly]=\"readOnly\" />\n </mat-card-content>\n <mat-card-actions *ngIf=\"form.hasOutcomes()\" class=\"adf-cloud-form-content-card-actions\" align=\"end\">\n <ng-content select=\"adf-cloud-form-custom-outcomes\" />\n <ng-container *ngFor=\"let outcome of form.outcomes\">\n <button\n *ngIf=\"outcome.isVisible\"\n [id]=\"'adf-form-' + outcome.name | formatSpace\"\n [color]=\"getColorForOutcome(outcome.name)\"\n mat-button\n [disabled]=\"!isOutcomeButtonEnabled(outcome)\"\n [class.adf-form-hide-button]=\"!isOutcomeButtonVisible(outcome, form.readOnly)\"\n class=\"adf-cloud-form-custom-outcome-button\"\n (click)=\"onOutcomeClicked(outcome)\"\n >\n {{ getCustomOutcomeButtonText(outcome) || (outcome.name | translate | uppercase) }}\n </button>\n </ng-container>\n </mat-card-actions>\n </div>\n </mat-card>\n </div>\n</div>\n", styles: [".adf-full-screen,.adf-cloud-form-inline-container,.adf-cloud-form-container .adf-cloud-form-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-cloud-form-container .adf-cloud-form-content{flex:1;flex-direction:column;display:flex;position:relative}.adf-cloud-form-fullscreen-container .adf-cloud-form-content{position:fixed;top:0;left:0;z-index:100000}.adf-cloud-form-toolbar .mat-toolbar{background-color:var(--adf-theme-background-card-color-087)}.adf-cloud-form-fullscreen-button{position:absolute;right:70px;top:30px}.adf-cloud-form__display-name{font-size:var(--theme-subheading-2-font-size);opacity:.87;line-height:1.5;letter-spacing:-.4px;font-weight:400;font-style:normal;font-stretch:normal;max-width:400px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:middle;color:var(--adf-theme-foreground-text-color)}.adf-cloud-form__form-title{text-align:center;flex:1 1 auto}.adf-cloud-form-content-card{padding-bottom:2em;overflow-y:auto;position:static;height:70%}.adf-cloud-form-content-card-fullscreen{padding:0;height:100%;width:100%;position:relative}.adf-cloud-form-content-card-fullscreen-container{display:flex;flex-direction:column;height:100%}.adf-cloud-form-content-card-fullscreen-container .mat-mdc-card-content{height:100%;overflow:hidden auto}.adf-cloud-form-content-card-container .adf-form-container-card-content{padding-left:1%;padding-right:1%}.adf-cloud-form-sidebars{display:flex;flex:1 1 auto}.adf-cloud-form-sidebars adf-viewer-render{order:1;flex:1 1 auto;display:flex}.adf-cloud-form .adf-label{white-space:normal}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: FormatSpacePipe, name: "formatSpace" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i3.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i3.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: FormRendererComponent, selector: "adf-form-renderer", inputs: ["formDefinition", "readOnly"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ToolbarDividerComponent, selector: "adf-toolbar-divider" }, { kind: "component", type: ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i5.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] }); }
|
|
343
362
|
}
|
|
344
363
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormCloudComponent, decorators: [{
|
|
345
364
|
type: Component,
|
|
@@ -354,7 +373,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
354
373
|
ToolbarDividerComponent,
|
|
355
374
|
ToolbarComponent,
|
|
356
375
|
A11yModule
|
|
357
|
-
], providers: [FormCloudSpinnerService], template: "<div *ngIf=\"!hasForm()\">\n <ng-content select=\"[empty-form]\" />\n</div>\n\n<div\n *ngIf=\"hasForm()\"\n class=\"adf-cloud-form-container adf-cloud-form-{{ displayConfiguration?.options?.fullscreen ? 'fullscreen' : 'inline' }}-container\"\n [style]=\"formStyle\"\n>\n <div class=\"adf-cloud-form-content\" [cdkTrapFocus]=\"displayConfiguration?.options?.trapFocus\" cdkTrapFocusAutoCapture>\n <adf-toolbar class=\"adf-cloud-form-toolbar\" *ngIf=\"displayConfiguration?.options?.displayToolbar\">\n <div class=\"adf-cloud-form__form-title\">\n <span class=\"adf-cloud-form__display-name\" [title]=\"form.taskName\">\n {{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </div>\n\n <adf-toolbar-divider *ngIf=\"displayConfiguration?.options?.displayCloseButton\" />\n <button\n *ngIf=\"displayConfiguration?.options?.displayCloseButton\"\n class=\"adf-cloud-form-close-button\"\n data-automation-id=\"adf-toolbar-right-back\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n [attr.data-automation-id]=\"'adf-cloud-form-close-button'\"\n [title]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n mat-icon-button\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\"\n (click)=\"switchToDisplayMode()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </adf-toolbar>\n\n <mat-card\n appearance=\"outlined\"\n class=\"adf-cloud-form-content-card\"\n [class.adf-cloud-form-content-card-fullscreen]=\"displayMode === 'fullScreen'\"\n >\n <div class=\"adf-cloud-form-content-card-container\">\n <mat-card-header *ngIf=\"showTitle || showRefreshButton || showValidationIcon\">\n <mat-card-title>\n <h4>\n <div *ngIf=\"showValidationIcon\" class=\"adf-form-validation-button\">\n <i id=\"adf-valid-form-icon\" class=\"material-icons\" *ngIf=\"form.isValid; else no_valid_form\">check_circle</i>\n <ng-template #no_valid_form>\n <i id=\"adf-invalid-form-icon\" class=\"material-icons adf-invalid-color\">error</i>\n </ng-template>\n </div>\n <div\n *ngIf=\"!displayConfiguration?.options?.fullscreen && findDisplayConfiguration('fullScreen')\"\n class=\"adf-cloud-form-fullscreen-button\"\n >\n <button\n mat-icon-button\n (click)=\"switchToDisplayMode('fullScreen')\"\n [attr.data-automation-id]=\"'adf-cloud-form-fullscreen-button'\"\n >\n <mat-icon>fullscreen</mat-icon>\n </button>\n </div>\n <div *ngIf=\"showRefreshButton\" class=\"adf-cloud-form-reload-button\" [title]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <button mat-icon-button (click)=\"onRefreshClicked()\" [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n <span *ngIf=\"isTitleEnabled()\" class=\"adf-cloud-form-title\" [title]=\"form.taskName\"\n >{{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content class=\"adf-form-container-card-content\">\n <adf-form-renderer [formDefinition]=\"form\" [readOnly]=\"readOnly\" />\n </mat-card-content>\n <mat-card-actions *ngIf=\"form.hasOutcomes()\" class=\"adf-cloud-form-content-card-actions\" align=\"end\">\n <ng-content select=\"adf-cloud-form-custom-outcomes\" />\n <ng-container *ngFor=\"let outcome of form.outcomes\">\n <button\n *ngIf=\"outcome.isVisible\"\n [id]=\"'adf-form-' + outcome.name | formatSpace\"\n [color]=\"getColorForOutcome(outcome.name)\"\n mat-button\n [disabled]=\"!isOutcomeButtonEnabled(outcome)\"\n [class.adf-form-hide-button]=\"!isOutcomeButtonVisible(outcome, form.readOnly)\"\n class=\"adf-cloud-form-custom-outcome-button\"\n (click)=\"onOutcomeClicked(outcome)\"\n >\n {{ outcome.name | translate | uppercase }}\n </button>\n </ng-container>\n </mat-card-actions>\n </div>\n </mat-card>\n </div>\n</div>\n", styles: [".adf-full-screen,.adf-cloud-form-inline-container,.adf-cloud-form-container .adf-cloud-form-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-cloud-form-container .adf-cloud-form-content{flex:1;flex-direction:column;display:flex;position:relative}.adf-cloud-form-fullscreen-container .adf-cloud-form-content{position:fixed;top:0;left:0;z-index:100000}.adf-cloud-form-toolbar .mat-toolbar{background-color:var(--adf-theme-background-card-color-087)}.adf-cloud-form-fullscreen-button{position:absolute;right:70px;top:30px}.adf-cloud-form__display-name{font-size:var(--theme-subheading-2-font-size);opacity:.87;line-height:1.5;letter-spacing:-.4px;font-weight:400;font-style:normal;font-stretch:normal;max-width:400px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:middle;color:var(--adf-theme-foreground-text-color)}.adf-cloud-form__form-title{text-align:center;flex:1 1 auto}.adf-cloud-form-content-card{padding-bottom:2em;overflow-y:auto;position:static;height:70%}.adf-cloud-form-content-card-fullscreen{padding:0;height:100%;width:100%;position:relative}.adf-cloud-form-content-card-fullscreen-container{display:flex;flex-direction:column;height:100%}.adf-cloud-form-content-card-fullscreen-container .mat-mdc-card-content{height:100%;overflow:hidden auto}.adf-cloud-form-content-card-container .adf-form-container-card-content{padding-left:1%;padding-right:1%}.adf-cloud-form-sidebars{display:flex;flex:1 1 auto}.adf-cloud-form-sidebars adf-viewer-render{order:1;flex:1 1 auto;display:flex}.adf-cloud-form .adf-label{white-space:normal}\n"] }]
|
|
376
|
+
], providers: [FormCloudSpinnerService], template: "<div *ngIf=\"!hasForm()\">\n <ng-content select=\"[empty-form]\" />\n</div>\n\n<div\n *ngIf=\"hasForm()\"\n class=\"adf-cloud-form-container adf-cloud-form-{{ displayConfiguration?.options?.fullscreen ? 'fullscreen' : 'inline' }}-container\"\n [style]=\"formStyle\"\n>\n <div class=\"adf-cloud-form-content\" [cdkTrapFocus]=\"displayConfiguration?.options?.trapFocus\" cdkTrapFocusAutoCapture>\n <adf-toolbar class=\"adf-cloud-form-toolbar\" *ngIf=\"displayConfiguration?.options?.displayToolbar\">\n <div class=\"adf-cloud-form__form-title\">\n <span class=\"adf-cloud-form__display-name\" [title]=\"form.taskName\">\n {{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </div>\n\n <adf-toolbar-divider *ngIf=\"displayConfiguration?.options?.displayCloseButton\" />\n <button\n *ngIf=\"displayConfiguration?.options?.displayCloseButton\"\n class=\"adf-cloud-form-close-button\"\n data-automation-id=\"adf-toolbar-right-back\"\n [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n [attr.data-automation-id]=\"'adf-cloud-form-close-button'\"\n [title]=\"'ADF_VIEWER.ACTIONS.CLOSE' | translate\"\n mat-icon-button\n title=\"{{ 'ADF_VIEWER.ACTIONS.CLOSE' | translate }}\"\n (click)=\"switchToDisplayMode()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </adf-toolbar>\n\n <mat-card\n appearance=\"outlined\"\n class=\"adf-cloud-form-content-card\"\n [class.adf-cloud-form-content-card-fullscreen]=\"displayMode === 'fullScreen'\"\n >\n <div class=\"adf-cloud-form-content-card-container\">\n <mat-card-header *ngIf=\"showTitle || showRefreshButton || showValidationIcon\">\n <mat-card-title>\n <h4>\n <div *ngIf=\"showValidationIcon\" class=\"adf-form-validation-button\">\n <i id=\"adf-valid-form-icon\" class=\"material-icons\" *ngIf=\"form.isValid; else no_valid_form\">check_circle</i>\n <ng-template #no_valid_form>\n <i id=\"adf-invalid-form-icon\" class=\"material-icons adf-invalid-color\">error</i>\n </ng-template>\n </div>\n <div\n *ngIf=\"!displayConfiguration?.options?.fullscreen && findDisplayConfiguration('fullScreen')\"\n class=\"adf-cloud-form-fullscreen-button\"\n >\n <button\n mat-icon-button\n (click)=\"switchToDisplayMode('fullScreen')\"\n [attr.data-automation-id]=\"'adf-cloud-form-fullscreen-button'\"\n >\n <mat-icon>fullscreen</mat-icon>\n </button>\n </div>\n <div *ngIf=\"showRefreshButton\" class=\"adf-cloud-form-reload-button\" [title]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <button mat-icon-button (click)=\"onRefreshClicked()\" [attr.aria-label]=\"'ADF_VIEWER.ACTIONS.FULLSCREEN' | translate\">\n <mat-icon>refresh</mat-icon>\n </button>\n </div>\n <span *ngIf=\"isTitleEnabled()\" class=\"adf-cloud-form-title\" [title]=\"form.taskName\"\n >{{ form.taskName }}\n <ng-container *ngIf=\"!form.taskName\">\n {{ 'FORM.FORM_RENDERER.NAMELESS_TASK' | translate }}\n </ng-container>\n </span>\n </h4>\n </mat-card-title>\n </mat-card-header>\n <mat-card-content class=\"adf-form-container-card-content\">\n <adf-form-renderer [formDefinition]=\"form\" [readOnly]=\"readOnly\" />\n </mat-card-content>\n <mat-card-actions *ngIf=\"form.hasOutcomes()\" class=\"adf-cloud-form-content-card-actions\" align=\"end\">\n <ng-content select=\"adf-cloud-form-custom-outcomes\" />\n <ng-container *ngFor=\"let outcome of form.outcomes\">\n <button\n *ngIf=\"outcome.isVisible\"\n [id]=\"'adf-form-' + outcome.name | formatSpace\"\n [color]=\"getColorForOutcome(outcome.name)\"\n mat-button\n [disabled]=\"!isOutcomeButtonEnabled(outcome)\"\n [class.adf-form-hide-button]=\"!isOutcomeButtonVisible(outcome, form.readOnly)\"\n class=\"adf-cloud-form-custom-outcome-button\"\n (click)=\"onOutcomeClicked(outcome)\"\n >\n {{ getCustomOutcomeButtonText(outcome) || (outcome.name | translate | uppercase) }}\n </button>\n </ng-container>\n </mat-card-actions>\n </div>\n </mat-card>\n </div>\n</div>\n", styles: [".adf-full-screen,.adf-cloud-form-inline-container,.adf-cloud-form-container .adf-cloud-form-content{width:100%;height:100%;background-color:var(--adf-theme-background-card-color)}.adf-cloud-form-container .adf-cloud-form-content{flex:1;flex-direction:column;display:flex;position:relative}.adf-cloud-form-fullscreen-container .adf-cloud-form-content{position:fixed;top:0;left:0;z-index:100000}.adf-cloud-form-toolbar .mat-toolbar{background-color:var(--adf-theme-background-card-color-087)}.adf-cloud-form-fullscreen-button{position:absolute;right:70px;top:30px}.adf-cloud-form__display-name{font-size:var(--theme-subheading-2-font-size);opacity:.87;line-height:1.5;letter-spacing:-.4px;font-weight:400;font-style:normal;font-stretch:normal;max-width:400px;text-overflow:ellipsis;overflow:hidden;display:inline-block;vertical-align:middle;color:var(--adf-theme-foreground-text-color)}.adf-cloud-form__form-title{text-align:center;flex:1 1 auto}.adf-cloud-form-content-card{padding-bottom:2em;overflow-y:auto;position:static;height:70%}.adf-cloud-form-content-card-fullscreen{padding:0;height:100%;width:100%;position:relative}.adf-cloud-form-content-card-fullscreen-container{display:flex;flex-direction:column;height:100%}.adf-cloud-form-content-card-fullscreen-container .mat-mdc-card-content{height:100%;overflow:hidden auto}.adf-cloud-form-content-card-container .adf-form-container-card-content{padding-left:1%;padding-right:1%}.adf-cloud-form-sidebars{display:flex;flex:1 1 auto}.adf-cloud-form-sidebars adf-viewer-render{order:1;flex:1 1 auto;display:flex}.adf-cloud-form .adf-label{white-space:normal}\n"] }]
|
|
358
377
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
359
378
|
type: Optional
|
|
360
379
|
}, {
|
|
@@ -376,6 +395,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
376
395
|
type: Input
|
|
377
396
|
}], showCompleteButton: [{
|
|
378
397
|
type: Input
|
|
398
|
+
}], customSaveButtonText: [{
|
|
399
|
+
type: Input
|
|
400
|
+
}], customCompleteButtonText: [{
|
|
401
|
+
type: Input
|
|
379
402
|
}], formSaved: [{
|
|
380
403
|
type: Output
|
|
381
404
|
}], formCompleted: [{
|
|
@@ -394,4 +417,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
394
417
|
type: HostListener,
|
|
395
418
|
args: ['keydown', ['$event']]
|
|
396
419
|
}] } });
|
|
397
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jbG91ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy9mb3JtLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL2Zvcm0tY2xvdWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFDSCxzQkFBc0IsRUFFdEIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixTQUFTLEVBR1QsU0FBUyxFQUNULGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFdBQVcsRUFFWCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLEVBQUUsSUFBSSxjQUFjLEVBQUUsTUFBTSxNQUFN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RGpCLEtBQUs7Z0JBS04sU0FBUztzQkFEUixNQUFNO2dCQUtQLGFBQWE7c0JBRFosTUFBTTtnQkFLUCxVQUFVO3NCQURULE1BQU07Z0JBS1AsaUJBQWlCO3NCQURoQixNQUFNO2dCQUtQLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFLUCxhQUFhO3NCQURaLE1BQU07Z0JBS1AsY0FBYztzQkFEYixNQUFNO2dCQXFEUCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIENvbmZpcm1EaWFsb2dDb21wb25lbnQsXG4gICAgQ29udGVudExpbmtNb2RlbCxcbiAgICBGb3JtYXRTcGFjZVBpcGUsXG4gICAgRm9ybUJhc2VDb21wb25lbnQsXG4gICAgRm9ybUV2ZW50LFxuICAgIEZvcm1GaWVsZE1vZGVsLFxuICAgIEZvcm1GaWVsZFZhbGlkYXRvcixcbiAgICBGb3JtTW9kZWwsXG4gICAgRm9ybU91dGNvbWVFdmVudCxcbiAgICBGb3JtT3V0Y29tZU1vZGVsLFxuICAgIEZvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICBGb3JtU2VydmljZSxcbiAgICBGb3JtVmFsdWVzLFxuICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgVG9vbGJhckRpdmlkZXJDb21wb25lbnQsXG4gICAgVXBsb2FkV2lkZ2V0Q29udGVudExpbmtNb2RlbCxcbiAgICBXaWRnZXRWaXNpYmlsaXR5U2VydmljZVxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgRm9ybUNsb3VkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm0tY2xvdWQuc2VydmljZSc7XG5pbXBvcnQgeyBUYXNrVmFyaWFibGVDbG91ZCB9IGZyb20gJy4uL21vZGVscy90YXNrLXZhcmlhYmxlLWNsb3VkLm1vZGVsJztcbmltcG9ydCB7IFRhc2tEZXRhaWxzQ2xvdWRNb2RlbCB9IGZyb20gJy4uLy4uL3Rhc2svbW9kZWxzL3Rhc2stZGV0YWlscy1jbG91ZC5tb2RlbCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZEdlbmVyYXRpb24gfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IEZvcm1DbG91ZERpc3BsYXlNb2RlLCBGb3JtQ2xvdWREaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLWZpZWxkcy5pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZvcm1DbG91ZFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3Bpbm5lci9mb3JtLWNsb3VkLXNwaW5uZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEaXNwbGF5TW9kZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kaXNwbGF5LW1vZGUuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5cbmV4cG9ydCBjb25zdCBGT1JNX0NMT1VEX0ZJRUxEX1ZBTElEQVRPUlNfVE9LRU4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Rm9ybUZpZWxkVmFsaWRhdG9yW10+KCdGT1JNX0NMT1VEX0ZJRUxEX1ZBTElEQVRPUlNfVE9LRU4nKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtY2xvdWQtZm9ybScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgRm9ybWF0U3BhY2VQaXBlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdENhcmRNb2R1bGUsXG4gICAgICAgIEZvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgVG9vbGJhckRpdmlkZXJDb21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIEExMXlNb2R1bGVcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0Zvcm1DbG91ZFNwaW5uZXJTZXJ2aWNlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1jbG91ZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybS1jbG91ZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1DbG91ZENvbXBvbmVudCBleHRlbmRzIEZvcm1CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIC8qKiBBcHAgbmFtZSB0byBmZXRjaCBjb3JyZXNwb25kaW5nIGZvcm0gYW5kIHZhbHVlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcE5hbWU6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIFRoZSBhcHBsaWNhdGlvbiB2ZXJzaW9uIHRvIHVzZSB3aGVuIGZldGNoaW5nIGRhdGEgKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcFZlcnNpb24/OiBudW1iZXI7XG5cbiAgICAvKiogVGFzayBpZCB0byBmZXRjaCBjb3JyZXNwb25kaW5nIGZvcm0gYW5kIHZhbHVlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZvcm1JZDogc3RyaW5nO1xuXG4gICAgLyoqIFByb2Nlc3NJbnN0YW5jZUlkIGlkIHRvIGZldGNoIGNvcnJlc3BvbmRpbmcgZm9ybSBhbmQgdmFsdWVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc0luc3RhbmNlSWQ6IHN0cmluZztcblxuICAgIC8qKiBUYXNrIGlkIHRvIGZldGNoIGNvcnJlc3BvbmRpbmcgZm9ybSBhbmQgdmFsdWVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFza0lkOiBzdHJpbmc7XG5cbiAgICAvKiogQ3VzdG9tIGZvcm0gdmFsdWVzIG1hcCB0byBiZSB1c2VkIHdpdGggdGhlIHJlbmRlcmVkIGZvcm0uICovXG4gICAgQElucHV0KClcbiAgICBkYXRhOiBUYXNrVmFyaWFibGVDbG91ZFtdO1xuXG4gICAgLyoqIFRoZSBhdmFpbGFibGUgZGlzcGxheSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGZvcm0gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlNb2RlQ29uZmlndXJhdGlvbnM6IEZvcm1DbG91ZERpc3BsYXlNb2RlQ29uZmlndXJhdGlvbltdO1xuXG4gICAgLyoqIFRvZ2dsZSByZW5kZXJpbmcgb2YgdGhlIGBDb21wbGV0ZWAgYnV0dG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0NvbXBsZXRlQnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCB3aXRoIHRoZSBgU2F2ZWAgb3IgY3VzdG9tIG91dGNvbWVzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1TYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybU1vZGVsPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2l0aCB0aGUgYENvbXBsZXRlYCBvdXRjb21lLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1Db21wbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Nb2RlbD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGZvcm0gaXMgbG9hZGVkIG9yIHJlbG9hZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvcm1Mb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Nb2RlbD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gZm9ybSB2YWx1ZXMgYXJlIHJlZnJlc2hlZCBkdWUgdG8gYSBkYXRhIHByb3BlcnR5IGNoYW5nZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBmb3JtRGF0YVJlZnJlc2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybU1vZGVsPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBmb3JtIGNvbnRlbnQgaXMgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBmb3JtQ29udGVudENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENvbnRlbnRMaW5rTW9kZWw+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZGlzcGxheSBtb2RlIGNvbmZpZ3VyYXRpb24gaXMgdHVybmVkIG9uLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRpc3BsYXlNb2RlT24gPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1DbG91ZERpc3BsYXlNb2RlQ29uZmlndXJhdGlvbj4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBkaXNwbGF5IG1vZGUgY29uZmlndXJhdGlvbiBpcyB0dXJuZWQgb2ZmLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRpc3BsYXlNb2RlT2ZmID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtQ2xvdWREaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24+KCk7XG5cbiAgICBwcm90ZWN0ZWQgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBmb3JtQ2xvdWRSZXByZXNlbnRhdGlvbkpTT046IGFueTtcbiAgICBmaWVsZFZhbGlkYXRvcnM6IEZvcm1GaWVsZFZhbGlkYXRvcltdID0gW107XG5cbiAgICByZWFkb25seSBpZDogc3RyaW5nO1xuICAgIGRpc3BsYXlNb2RlOiBzdHJpbmc7XG4gICAgZGlzcGxheUNvbmZpZ3VyYXRpb246IEZvcm1DbG91ZERpc3BsYXlNb2RlQ29uZmlndXJhdGlvbiA9IERpc3BsYXlNb2RlU2VydmljZS5ERUZBVUxUX0RJU1BMQVlfTU9ERV9DT05GSUdVUkFUSU9OU1swXTtcbiAgICBzdHlsZTogc3RyaW5nID0gJyc7XG5cbiAgICBwcm90ZWN0ZWQgZm9ybUNsb3VkU2VydmljZSA9IGluamVjdChGb3JtQ2xvdWRTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgZm9ybVNlcnZpY2UgPSBpbmplY3QoRm9ybVNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCB2aXNpYmlsaXR5U2VydmljZSA9IGluamVjdChXaWRnZXRWaXNpYmlsaXR5U2VydmljZSk7XG4gICAgcHJvdGVjdGVkIGRpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICAgIHByb3RlY3RlZCBzcGlubmVyU2VydmljZSA9IGluamVjdChGb3JtQ2xvdWRTcGlubmVyU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIGRpc3BsYXlNb2RlU2VydmljZSA9IGluamVjdChEaXNwbGF5TW9kZVNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KEZPUk1fQ0xPVURfRklFTERfVkFMSURBVE9SU19UT0tFTikgaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnM/OiBGb3JtRmllbGRWYWxpZGF0b3JbXSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvYWRJbmplY3RlZEZpZWxkVmFsaWRhdG9ycyhpbmplY3RlZEZpZWxkVmFsaWRhdG9ycyk7XG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaW5pdFNwaW5uZXJIYW5kbGluZyh0aGlzLmRlc3Ryb3lSZWYpO1xuXG4gICAgICAgIHRoaXMuaWQgPSB1dWlkR2VuZXJhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZm9ybUNvbnRlbnRDbGlja2VkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoY29udGVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBVcGxvYWRXaWRnZXRDb250ZW50TGlua01vZGVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnNldE5vZGVJZFZhbHVlRm9yVmlld2Vyc0xpbmtlZFRvVXBsb2FkV2lkZ2V0KGNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Gb3JtRGF0YVJlZnJlc2hlZCh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZm9ybURhdGFSZWZyZXNoZWQubmV4dChuZXcgRm9ybUV2ZW50KHRoaXMuZm9ybSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250ZW50Q2xpY2tlZC5lbWl0KGNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUZvcm1WYWx1ZXNSZXF1ZXN0ZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSkuc3Vic2NyaWJlKCh2YWx1ZXNUb1NldElmTm90UHJlc2VudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmFkZFZhbHVlc05vdFByZXNlbnQodmFsdWVzVG9TZXRJZk5vdFByZXNlbnQpO1xuICAgICAgICAgICAgdGhpcy5vbkZvcm1EYXRhUmVmcmVzaGVkKHRoaXMuZm9ybSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuZm9ybUZpZWxkVmFsdWVDaGFuZ2VkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlU2F2ZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNhdmVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgYXBwTmFtZSA9IGNoYW5nZXNbJ2FwcE5hbWUnXTtcblxuICAgICAgICBpZiAoYXBwTmFtZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50YXNrSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEZvcm1CeVRhc2tJZChhcHBOYW1lLmN1cnJlbnRWYWx1ZSwgdGhpcy50YXNrSWQsIHRoaXMuYXBwVmVyc2lvbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybUlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRGb3JtQnlJZChhcHBOYW1lLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtSWQsIHRoaXMuYXBwVmVyc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3JtSWQgPSBjaGFuZ2VzWydmb3JtSWQnXTtcbiAgICAgICAgaWYgKGZvcm1JZD8uY3VycmVudFZhbHVlICYmIHRoaXMuYXBwTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGb3JtQnlJZCh0aGlzLmFwcE5hbWUsIGZvcm1JZC5jdXJyZW50VmFsdWUsIHRoaXMuYXBwVmVyc2lvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXNrSWQgPSBjaGFuZ2VzWyd0YXNrSWQnXTtcbiAgICAgICAgaWYgKHRhc2tJZD8uY3VycmVudFZhbHVlICYmIHRoaXMuYXBwTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGb3JtQnlUYXNrSWQodGhpcy5hcHBOYW1lLCB0YXNrSWQuY3VycmVudFZhbHVlLCB0aGlzLmFwcFZlcnNpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGNoYW5nZXNbJ2RhdGEnXT8uY3VycmVudFZhbHVlO1xuICAgICAgICBpZiAoZGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRm9ybURhdGEoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZvcm1SZXByZXNlbnRhdGlvbiA9IGNoYW5nZXNbJ2Zvcm0nXTtcblxuICAgICAgICBpZiAoZm9ybVJlcHJlc2VudGF0aW9uPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybSA9IGZvcm1SZXByZXNlbnRhdGlvbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLm9uRm9ybUxvYWRlZCh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIERpc3BsYXlNb2RlU2VydmljZS5kaXNwbGF5TW9kZSRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoY2hhbmdlKSA9PiBjaGFuZ2UuaWQgPT09IHRoaXMuaWQpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkaXNwbGF5TW9kZUNoYW5nZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZERpc3BsYXlNb2RlID0gdGhpcy5kaXNwbGF5TW9kZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlID0gZGlzcGxheU1vZGVDaGFuZ2UuZGlzcGxheU1vZGU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvbGREaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24gPSB0aGlzLmRpc3BsYXlNb2RlU2VydmljZS5maW5kQ29uZmlndXJhdGlvbihvbGREaXNwbGF5TW9kZSwgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdEaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24gPSB0aGlzLmRpc3BsYXlNb2RlU2VydmljZS5maW5kQ29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheU1vZGVDaGFuZ2UuZGlzcGxheU1vZGUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU1vZGVDb25maWd1cmF0aW9uc1xuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAob2xkRGlzcGxheU1vZGVDb25maWd1cmF0aW9uPy5kaXNwbGF5TW9kZSAhPT0gbmV3RGlzcGxheU1vZGVDb25maWd1cmF0aW9uPy5kaXNwbGF5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2xkRGlzcGxheU1vZGVDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlT2ZmLmVtaXQob2xkRGlzcGxheU1vZGVDb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3RGlzcGxheU1vZGVDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlT24uZW1pdChuZXdEaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5Q29uZmlndXJhdGlvbiA9IG5ld0Rpc3BsYXlNb2RlQ29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB1c2VyIGNsaWNrcyBmb3JtIHJlZnJlc2ggYnV0dG9uLlxuICAgICAqL1xuICAgIG9uUmVmcmVzaENsaWNrZWQoKSB7XG4gICAgICAgIHRoaXMubG9hZEZvcm0oKTtcbiAgICB9XG5cbiAgICBsb2FkRm9ybSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYXBwTmFtZSAmJiB0aGlzLnRhc2tJZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRGb3JtQnlUYXNrSWQodGhpcy5hcHBOYW1lLCB0aGlzLnRhc2tJZCwgdGhpcy5hcHBWZXJzaW9uKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFwcE5hbWUgJiYgdGhpcy5mb3JtSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUJ5SWQodGhpcy5hcHBOYW1lLCB0aGlzLmZvcm1JZCwgdGhpcy5hcHBWZXJzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbmRQcm9jZXNzVmFyaWFibGVzQnlUYXNrSWQoYXBwTmFtZTogc3RyaW5nLCB0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VGFza1ZhcmlhYmxlQ2xvdWRbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQ2xvdWRTZXJ2aWNlLmdldFRhc2soYXBwTmFtZSwgdGFza0lkKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh0YXNrKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBUHJvY2Vzc1Rhc2sodGFzaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNsb3VkU2VydmljZS5nZXRUYXNrVmFyaWFibGVzKGFwcE5hbWUsIHRhc2tJZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzQVByb2Nlc3NUYXNrKHRhc2tSZXByZXNlbnRhdGlvbjogVGFza0RldGFpbHNDbG91ZE1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0YXNrUmVwcmVzZW50YXRpb24ucHJvY2Vzc0RlZmluaXRpb25JZCAmJiB0YXNrUmVwcmVzZW50YXRpb24ucHJvY2Vzc0RlZmluaXRpb25EZXBsb3ltZW50SWQgIT09ICdudWxsJztcbiAgICB9XG5cbiAgICBnZXRGb3JtQnlUYXNrSWQoYXBwTmFtZTogc3RyaW5nLCB0YXNrSWQ6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcik6IFByb21pc2U8Rm9ybU1vZGVsPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxGb3JtTW9kZWw+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBmb3JrSm9pbih0aGlzLmZvcm1DbG91ZFNlcnZpY2UuZ2V0VGFza0Zvcm0oYXBwTmFtZSwgdGFza0lkLCB2ZXJzaW9uKSwgdGhpcy5mb3JtQ2xvdWRTZXJ2aWNlLmdldFRhc2tWYXJpYWJsZXMoYXBwTmFtZSwgdGFza0lkKSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ2xvdWRSZXByZXNlbnRhdGlvbkpTT04gPSBkYXRhWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTi5wcm9jZXNzVmFyaWFibGVzID0gZGF0YVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGFbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEZvcm0gPSB0aGlzLnBhcnNlRm9ybSh0aGlzLmZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLnJlZnJlc2hWaXNpYmlsaXR5KHBhcnNlZEZvcm0sIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRGb3JtLnZhbGlkYXRlRm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtID0gcGFyc2VkRm9ybTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5ub2RlSWQgPSAnLW15LSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRm9ybUxvYWRlZCh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEZvcm1CeUlkKGFwcE5hbWU6IHN0cmluZywgZm9ybUlkOiBzdHJpbmcsIGFwcFZlcnNpb24/OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5mb3JtQ2xvdWRTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0Rm9ybShhcHBOYW1lLCBmb3JtSWQsIGFwcFZlcnNpb24pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGZvcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxhdHRlbkZvcm0gPSB7IC4uLmZvcm0uZm9ybVJlcHJlc2VudGF0aW9uLCAuLi5mb3JtLmZvcm1SZXByZXNlbnRhdGlvbi5mb3JtRGVmaW5pdGlvbiB9O1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmxhdHRlbkZvcm0uZm9ybURlZmluaXRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGF0dGVuRm9ybTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAoZm9ybSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTiA9IGZvcm07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNsb3VkUmVwcmVzZW50YXRpb25KU09OLnByb2Nlc3NWYXJpYWJsZXMgPSB0aGlzLmRhdGEgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEZvcm0gPSB0aGlzLnBhcnNlRm9ybShmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5yZWZyZXNoVmlzaWJpbGl0eShwYXJzZWRGb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRm9ybT8udmFsaWRhdGVGb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybSA9IHBhcnNlZEZvcm07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5ub2RlSWQgPSAnLW15LSc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Gb3JtTG9hZGVkKHRoaXMuZm9ybSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzYXZlVGFza0Zvcm0oKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0gJiYgdGhpcy5hcHBOYW1lICYmIHRoaXMudGFza0lkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1DbG91ZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuc2F2ZVRhc2tGb3JtKHRoaXMuYXBwTmFtZSwgdGhpcy50YXNrSWQsIHRoaXMucHJvY2Vzc0luc3RhbmNlSWQsIGAke3RoaXMuZm9ybS5pZH1gLCB0aGlzLmZvcm0udmFsdWVzKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25UYXNrU2F2ZWQodGhpcy5mb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB0aGlzLm9uVGFza1NhdmVkRXJyb3IoZXJyb3IpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU1vZGVTZXJ2aWNlLm9uU2F2ZVRhc2sodGhpcy5pZCwgdGhpcy5kaXNwbGF5TW9kZSwgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBsZXRlVGFza0Zvcm0ob3V0Y29tZT86IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5mb3JtPy5jb25maXJtTWVzc2FnZT8uc2hvdyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLmZvcm0uY29uZmlybU1lc3NhZ2UubWVzc2FnZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICc0NTBweCdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUZvcm0ob3V0Y29tZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlRm9ybShvdXRjb21lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpc3BsYXlNb2RlU2VydmljZS5vbkNvbXBsZXRlVGFzayh0aGlzLmlkLCB0aGlzLmRpc3BsYXlNb2RlLCB0aGlzLmRpc3BsYXlNb2RlQ29uZmlndXJhdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGxldGVGb3JtKG91dGNvbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybSAmJiB0aGlzLmFwcE5hbWUgJiYgdGhpcy50YXNrSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNsb3VkU2VydmljZVxuICAgICAgICAgICAgICAgIC5jb21wbGV0ZVRhc2tGb3JtKHRoaXMuYXBwTmFtZSwgdGhpcy50YXNrSWQsIHRoaXMucHJvY2Vzc0luc3RhbmNlSWQsIGAke3RoaXMuZm9ybS5pZH1gLCB0aGlzLmZvcm0udmFsdWVzLCBvdXRjb21lLCB0aGlzLmFwcFZlcnNpb24pXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblRhc2tDb21wbGV0ZWQodGhpcy5mb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB0aGlzLm9uVGFza0NvbXBsZXRlZEVycm9yKGVycm9yKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJzZUZvcm0oZm9ybUNsb3VkUmVwcmVzZW50YXRpb25KU09OPzogYW55KTogRm9ybU1vZGVsIHwgbnVsbCB7XG4gICAgICAgIGlmIChmb3JtQ2xvdWRSZXByZXNlbnRhdGlvbkpTT04pIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZXM6IEZvcm1WYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgICh0aGlzLmRhdGEgfHwgW10pLmZvckVhY2goKHZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybVZhbHVlc1t2YXJpYWJsZS5uYW1lXSA9IHZhcmlhYmxlLnZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybU1vZGVsKGZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTiwgZm9ybVZhbHVlcywgdGhpcy5yZWFkT25seSwgdGhpcy5mb3JtU2VydmljZSwgdW5kZWZpbmVkLCB0aGlzLmZpZWxkVmFsaWRhdG9ycyk7XG4gICAgICAgICAgICBpZiAoIWZvcm0pIHtcbiAgICAgICAgICAgICAgICBmb3JtLm91dGNvbWVzID0gdGhpcy5nZXRGb3JtRGVmaW5pdGlvbk91dGNvbWVzKGZvcm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvcm07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY3VzdG9tIHNldCBvZiBvdXRjb21lcyBmb3IgYSBGb3JtIERlZmluaXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm9ybSBGb3JtIGRlZmluaXRpb24gbW9kZWwuXG4gICAgICogQHJldHVybnMgbGlzdCBvZiBmb3JtIG91dGNvbWVzXG4gICAgICovXG4gICAgZ2V0Rm9ybURlZmluaXRpb25PdXRjb21lcyhmb3JtOiBGb3JtTW9kZWwpOiBGb3JtT3V0Y29tZU1vZGVsW10ge1xuICAgICAgICByZXR1cm4gW25ldyBGb3JtT3V0Y29tZU1vZGVsKGZvcm0sIHsgaWQ6ICckc2F2ZScsIG5hbWU6IEZvcm1PdXRjb21lTW9kZWwuU0FWRV9BQ1RJT04sIGlzU3lzdGVtOiB0cnVlIH0pXTtcbiAgICB9XG5cbiAgICBjaGVja1Zpc2liaWxpdHkoZmllbGQ6IEZvcm1GaWVsZE1vZGVsKSB7XG4gICAgICAgIGlmIChmaWVsZD8uZm9ybSkge1xuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5yZWZyZXNoVmlzaWJpbGl0eShmaWVsZC5mb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaEZvcm1EYXRhKCkge1xuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLnBhcnNlRm9ybSh0aGlzLmZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTik7XG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMub25Gb3JtTG9hZGVkKHRoaXMuZm9ybSk7XG4gICAgICAgICAgICB0aGlzLm9uRm9ybURhdGFSZWZyZXNoZWQodGhpcy5mb3JtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkZvcm1Mb2FkZWQoZm9ybTogRm9ybU1vZGVsKSB7XG4gICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlQ29uZmlndXJhdGlvbnMgPSB0aGlzLmRpc3BsYXlNb2RlU2VydmljZS5nZXREaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zKHRoaXMuZGlzcGxheU1vZGVDb25maWd1cmF0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlID0gdGhpcy5kaXNwbGF5TW9kZVNlcnZpY2Uuc3dpdGNoVG9EaXNwbGF5TW9kZShcbiAgICAgICAgICAgICAgICB0aGlzLmlkLFxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5qc29uLmRpc3BsYXlNb2RlLFxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU1vZGUsXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlDb25maWd1cmF0aW9uID0gdGhpcy5kaXNwbGF5TW9kZVNlcnZpY2UuZmluZENvbmZpZ3VyYXRpb24odGhpcy5kaXNwbGF5TW9kZSwgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zKTtcblxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TW9kZU9uLmVtaXQodGhpcy5kaXNwbGF5Q29uZmlndXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5mb3JtTG9hZGVkLmVtaXQoZm9ybSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRm9ybURhdGFSZWZyZXNoZWQoZm9ybTogRm9ybU1vZGVsKSB7XG4gICAgICAgIHRoaXMuZm9ybURhdGFSZWZyZXNoZWQuZW1pdChmb3JtKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25UYXNrU2F2ZWQoZm9ybTogRm9ybU1vZGVsKSB7XG4gICAgICAgIHRoaXMuZm9ybVNhdmVkLmVtaXQoZm9ybSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uVGFza1NhdmVkRXJyb3IoZXJyb3I6IGFueSkge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25UYXNrQ29tcGxldGVkKGZvcm06IEZvcm1Nb2RlbCkge1xuICAgICAgICB0aGlzLmZvcm1Db21wbGV0ZWQuZW1pdChmb3JtKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25UYXNrQ29tcGxldGVkRXJyb3IoZXJyb3I6IGFueSkge1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25FeGVjdXRlT3V0Y29tZShvdXRjb21lOiBGb3JtT3V0Y29tZU1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBuZXcgRm9ybU91dGNvbWVFdmVudChvdXRjb21lKTtcblxuICAgICAgICBpZiAoYXJncy5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV4ZWN1dGVPdXRjb21lLmVtaXQoYXJncyk7XG4gICAgICAgIHJldHVybiAhYXJncy5kZWZhdWx0UHJldmVudGVkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzdG9yZUZvcm1Bc01ldGFkYXRhKCkge31cblxuICAgIHN3aXRjaFRvRGlzcGxheU1vZGUobmV3RGlzcGxheU1vZGU/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5TW9kZVNlcnZpY2Uuc3dpdGNoVG9EaXNwbGF5TW9kZSh0aGlzLmlkLCBGb3JtQ2xvdWREaXNwbGF5TW9kZVtuZXdEaXNwbGF5TW9kZV0sIHRoaXMuZGlzcGxheU1vZGUsIHRoaXMuZGlzcGxheU1vZGVDb25maWd1cmF0aW9ucyk7XG4gICAgfVxuXG4gICAgZmluZERpc3BsYXlDb25maWd1cmF0aW9uKGRpc3BsYXlNb2RlPzogc3RyaW5nKTogRm9ybUNsb3VkRGlzcGxheU1vZGVDb25maWd1cmF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheU1vZGVTZXJ2aWNlLmZpbmRDb25maWd1cmF0aW9uKEZvcm1DbG91ZERpc3BsYXlNb2RlW2Rpc3BsYXlNb2RlXSwgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zKTtcbiAgICB9XG5cbiAgICBsb2FkSW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnMoaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnM6IEZvcm1GaWVsZFZhbGlkYXRvcltdKTogdm9pZCB7XG4gICAgICAgIGlmIChpbmplY3RlZEZpZWxkVmFsaWRhdG9ycyAmJiBpbmplY3RlZEZpZWxkVmFsaWRhdG9ycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdG9ycyA9IFsuLi50aGlzLmZpZWxkVmFsaWRhdG9ycywgLi4uaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnNdO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiAqbmdJZj1cIiFoYXNGb3JtKClcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZW1wdHktZm9ybV1cIiAvPlxuPC9kaXY+XG5cbjxkaXZcbiAgICAqbmdJZj1cImhhc0Zvcm0oKVwiXG4gICAgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1jb250YWluZXIgYWRmLWNsb3VkLWZvcm0te3sgZGlzcGxheUNvbmZpZ3VyYXRpb24/Lm9wdGlvbnM/LmZ1bGxzY3JlZW4gPyAnZnVsbHNjcmVlbicgOiAnaW5saW5lJyB9fS1jb250YWluZXJcIlxuICAgIFtzdHlsZV09XCJmb3JtU3R5bGVcIlxuPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1jb250ZW50XCIgW2Nka1RyYXBGb2N1c109XCJkaXNwbGF5Q29uZmlndXJhdGlvbj8ub3B0aW9ucz8udHJhcEZvY3VzXCIgY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmU+XG4gICAgICAgIDxhZGYtdG9vbGJhciBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLXRvb2xiYXJcIiAqbmdJZj1cImRpc3BsYXlDb25maWd1cmF0aW9uPy5vcHRpb25zPy5kaXNwbGF5VG9vbGJhclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1jbG91ZC1mb3JtX19mb3JtLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtY2xvdWQtZm9ybV9fZGlzcGxheS1uYW1lXCIgW3RpdGxlXT1cImZvcm0udGFza05hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZm9ybS50YXNrTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZvcm0udGFza05hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdGT1JNLkZPUk1fUkVOREVSRVIuTkFNRUxFU1NfVEFTSycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxhZGYtdG9vbGJhci1kaXZpZGVyICpuZ0lmPVwiZGlzcGxheUNvbmZpZ3VyYXRpb24/Lm9wdGlvbnM/LmRpc3BsYXlDbG9zZUJ1dHRvblwiIC8+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkaXNwbGF5Q29uZmlndXJhdGlvbj8ub3B0aW9ucz8uZGlzcGxheUNsb3NlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLWNsb3NlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXRvb2xiYXItcmlnaHQtYmFja1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX1ZJRVdFUi5BQ1RJT05TLkNMT1NFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZm9ybS1jbG9zZS1idXR0b24nXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERl9WSUVXRVIuQUNUSU9OUy5DTE9TRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FERl9WSUVXRVIuQUNUSU9OUy5DTE9TRScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUb0Rpc3BsYXlNb2RlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9hZGYtdG9vbGJhcj5cblxuICAgICAgICA8bWF0LWNhcmRcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLWNvbnRlbnQtY2FyZFwiXG4gICAgICAgICAgICBbY2xhc3MuYWRmLWNsb3VkLWZvcm0tY29udGVudC1jYXJkLWZ1bGxzY3JlZW5dPVwiZGlzcGxheU1vZGUgPT09ICdmdWxsU2NyZWVuJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1jb250ZW50LWNhcmQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkLWhlYWRlciAqbmdJZj1cInNob3dUaXRsZSB8fCBzaG93UmVmcmVzaEJ1dHRvbiB8fCBzaG93VmFsaWRhdGlvbkljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93VmFsaWRhdGlvbkljb25cIiBjbGFzcz1cImFkZi1mb3JtLXZhbGlkYXRpb24tYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGlkPVwiYWRmLXZhbGlkLWZvcm0taWNvblwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiAqbmdJZj1cImZvcm0uaXNWYWxpZDsgZWxzZSBub192YWxpZF9mb3JtXCI+Y2hlY2tfY2lyY2xlPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vX3ZhbGlkX2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBpZD1cImFkZi1pbnZhbGlkLWZvcm0taWNvblwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgYWRmLWludmFsaWQtY29sb3JcIj5lcnJvcjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpc3BsYXlDb25maWd1cmF0aW9uPy5vcHRpb25zPy5mdWxsc2NyZWVuICYmIGZpbmREaXNwbGF5Q29uZmlndXJhdGlvbignZnVsbFNjcmVlbicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1mdWxsc2NyZWVuLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzd2l0Y2hUb0Rpc3BsYXlNb2RlKCdmdWxsU2NyZWVuJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtY2xvdWQtZm9ybS1mdWxsc2NyZWVuLWJ1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZnVsbHNjcmVlbjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UmVmcmVzaEJ1dHRvblwiIGNsYXNzPVwiYWRmLWNsb3VkLWZvcm0tcmVsb2FkLWJ1dHRvblwiIFt0aXRsZV09XCInQURGX1ZJRVdFUi5BQ1RJT05TLkZVTExTQ1JFRU4nIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJvblJlZnJlc2hDbGlja2VkKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREZfVklFV0VSLkFDVElPTlMuRlVMTFNDUkVFTicgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1RpdGxlRW5hYmxlZCgpXCIgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS10aXRsZVwiIFt0aXRsZV09XCJmb3JtLnRhc2tOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGZvcm0udGFza05hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JtLnRhc2tOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnRk9STS5GT1JNX1JFTkRFUkVSLk5BTUVMRVNTX1RBU0snIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJhZGYtZm9ybS1jb250YWluZXItY2FyZC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhZGYtZm9ybS1yZW5kZXJlciBbZm9ybURlZmluaXRpb25dPVwiZm9ybVwiIFtyZWFkT25seV09XCJyZWFkT25seVwiIC8+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucyAqbmdJZj1cImZvcm0uaGFzT3V0Y29tZXMoKVwiIGNsYXNzPVwiYWRmLWNsb3VkLWZvcm0tY29udGVudC1jYXJkLWFjdGlvbnNcIiBhbGlnbj1cImVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWNsb3VkLWZvcm0tY3VzdG9tLW91dGNvbWVzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG91dGNvbWUgb2YgZm9ybS5vdXRjb21lc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvdXRjb21lLmlzVmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInYWRmLWZvcm0tJyArIG91dGNvbWUubmFtZSB8IGZvcm1hdFNwYWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImdldENvbG9yRm9yT3V0Y29tZShvdXRjb21lLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzT3V0Y29tZUJ1dHRvbkVuYWJsZWQob3V0Y29tZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWZvcm0taGlkZS1idXR0b25dPVwiIWlzT3V0Y29tZUJ1dHRvblZpc2libGUob3V0Y29tZSwgZm9ybS5yZWFkT25seSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLWN1c3RvbS1vdXRjb21lLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk91dGNvbWVDbGlja2VkKG91dGNvbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG91dGNvbWUubmFtZSB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
420
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jbG91ZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy9mb3JtLWNsb3VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL2Zvcm0tY2xvdWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBRVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFDSCxzQkFBc0IsRUFFdEIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixTQUFTLEVBR1QsU0FBUyxFQUNULGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLFdBQVcsRUFFWCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1Qix1QkFBdUIsRUFDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLEVBQUUsSUFBSSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLG9CQUFvQixFQUFxQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ2hILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7O0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLElBQUksY0FBYyxDQUF1QixtQ0FBbUMsQ0FBQyxDQUFDO0FBcUIvSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsaUJBQWlCO0lBK0ZyRCxZQUFtRSx1QkFBOEM7UUFDN0csS0FBSyxFQUFFLENBQUM7UUEvRlosdURBQXVEO1FBRXZELFlBQU8sR0FBVyxFQUFFLENBQUM7UUEwQnJCLGlEQUFpRDtRQUVqRCx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFM0I7OztXQUdHO1FBRUgseUJBQW9CLEdBQVcsRUFBRSxDQUFDO1FBRWxDOzs7V0FHRztRQUVILDZCQUF3QixHQUFXLEVBQUUsQ0FBQztRQUV0Qyw2RUFBNkU7UUFFN0UsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFFMUMsc0VBQXNFO1FBRXRFLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUU5QyxtREFBbUQ7UUFFbkQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFFM0MsNEVBQTRFO1FBRTVFLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFFbEQsNENBQTRDO1FBRTVDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRTFELDhEQUE4RDtRQUU5RCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFxQyxDQUFDO1FBRXRFLCtEQUErRDtRQUUvRCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFxQyxDQUFDO1FBRTdELGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUc3QyxvQkFBZSxHQUF5QixFQUFFLENBQUM7UUFJM0MseUJBQW9CLEdBQXNDLGtCQUFrQixDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BILFVBQUssR0FBVyxFQUFFLENBQUM7UUFFVCxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxzQkFBaUIsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNwRCxXQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDakQsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEQsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVwQyxlQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBSTdDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pGLElBQUksT0FBTyxZQUFZLDRCQUE0QixFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsNENBQTRDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxFQUFFO1lBQ3hHLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDN0UsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztZQUNuQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBR0QsU0FBUyxDQUFDLEtBQW9CO1FBQzFCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVuQyxJQUFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUN4QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0UsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7WUFDRCxPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxJQUFJLE1BQU0sRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyRSxPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxJQUFJLE1BQU0sRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6RSxPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxZQUFZLENBQUM7UUFDM0MsSUFBSSxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNDLElBQUksa0JBQWtCLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsT0FBTztRQUNYLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLGtCQUFrQixDQUFDLFlBQVk7YUFDMUIsSUFBSSxDQUNELE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQ3pDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdEM7YUFDQSxTQUFTLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO1lBQzdCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7WUFFakQsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzlILE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUN6RSxpQkFBaUIsQ0FBQyxXQUFXLEVBQzdCLElBQUksQ0FBQyx5QkFBeUIsQ0FDakMsQ0FBQztZQUVGLElBQUksMkJBQTJCLEVBQUUsV0FBVyxLQUFLLDJCQUEyQixFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUN4RixJQUFJLDJCQUEyQixFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBQzFELENBQUM7Z0JBQ0QsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO29CQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO1lBQ0wsQ0FBQztZQUVELElBQUksQ0FBQyxvQkFBb0IsR0FBRywyQkFBMkIsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNaLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0wsQ0FBQztJQUVELDRCQUE0QixDQUFDLE9BQWUsRUFBRSxNQUFjO1FBQ3hELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUN0RCxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNmLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELDBCQUEwQixDQUFDLE9BQXlCO1FBQ2hELElBQUksT0FBTyxFQUFFLEVBQUUsS0FBSyxTQUFTLENBQUMsWUFBWSxJQUFJLE9BQU8sRUFBRSxJQUFJLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0YsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDckMsQ0FBQzthQUFNLElBQUksT0FBTyxFQUFFLEVBQUUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLElBQUksT0FBTyxFQUFFLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxRyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsY0FBYyxDQUFDLGtCQUF5QztRQUNwRCxPQUFPLGtCQUFrQixDQUFDLG1CQUFtQixJQUFJLGtCQUFrQixDQUFDLDZCQUE2QixLQUFLLE1BQU0sQ0FBQztJQUNqSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQWUsRUFBRSxNQUFjLEVBQUUsT0FBZ0I7UUFDN0QsT0FBTyxJQUFJLE9BQU8sQ0FBWSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3RDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDekgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDekMsU0FBUyxDQUNOLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ0wsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFM0MsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXBCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoRSxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO2dCQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDLENBQ0osQ0FBQztRQUNWLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFlLEVBQUUsTUFBYyxFQUFFLFVBQW1CO1FBQzVELElBQUksQ0FBQyxnQkFBZ0I7YUFDaEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDO2FBQ3BDLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNULE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDOUYsT0FBTyxXQUFXLENBQUMsY0FBYyxDQUFDO1lBQ2xDLE9BQU8sV0FBVyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdEM7YUFDQSxTQUFTLENBQ04sQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNMLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7WUFDeEMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3BFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JELFVBQVUsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FDSixDQUFDO0lBQ1YsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGdCQUFnQjtpQkFDaEIsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2lCQUNwRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUN6QyxTQUFTLENBQ04sR0FBRyxFQUFFO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUMxQyxDQUFDO1lBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDbEcsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFnQjtRQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtnQkFDdkQsSUFBSSxFQUFFO29CQUNGLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPO2lCQUM1QztnQkFDRCxRQUFRLEVBQUUsT0FBTzthQUNwQixDQUFDLENBQUM7WUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3pDLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvQixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFTyxZQUFZLENBQUMsT0FBZ0I7UUFDakMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0I7aUJBQ2hCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNsSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUN6QyxTQUFTLENBQ04sR0FBRyxFQUFFO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUM5QyxDQUFDO1FBQ1YsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsMkJBQWlDO1FBQ3ZDLElBQUksMkJBQTJCLEVBQUUsQ0FBQztZQUM5QixNQUFNLFVBQVUsR0FBZSxFQUFFLENBQUM7WUFDbEMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNuQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdEksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUJBQXlCLENBQUMsSUFBZTtRQUNyQyxPQUFPLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUgsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFxQjtRQUNqQyxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM3RCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNMLENBQUM7SUFFUyxZQUFZLENBQUMsSUFBZTtRQUNsQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUN0SCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FDMUQsSUFBSSxDQUFDLEVBQUUsRUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQzFCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyx5QkFBeUIsQ0FDakMsQ0FBQztZQUVGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUV4SCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRVMsbUJBQW1CLENBQUMsSUFBZTtRQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFUyxXQUFXLENBQUMsSUFBZTtRQUNqQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRVMsZ0JBQWdCLENBQUMsS0FBVTtRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFUyxlQUFlLENBQUMsSUFBZTtRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRVMsb0JBQW9CLENBQUMsS0FBVTtRQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFUyxnQkFBZ0IsQ0FBQyxPQUF5QjtRQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDbEMsQ0FBQztJQUVTLG1CQUFtQixLQUFJLENBQUM7SUFFbEMsbUJBQW1CLENBQUMsY0FBdUI7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNqSixDQUFDO0lBRUQsd0JBQXdCLENBQUMsV0FBb0I7UUFDekMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDeEgsQ0FBQztJQUVELDJCQUEyQixDQUFDLHVCQUE2QztRQUNyRSxJQUFJLHVCQUF1QixJQUFJLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7SUFDTCxDQUFDOytHQTliUSxrQkFBa0Isa0JBK0ZLLGlDQUFpQzttR0EvRnhELGtCQUFrQixtc0JBSmhCLENBQUMsdUJBQXVCLENBQUMsc0VDdkZ4Qyxpd0xBcUdBLG9vRER6QlEsWUFBWSx3VEFDWixhQUFhLDZDQUNiLGVBQWUsbURBQ2YsZUFBZSx3VUFDZixhQUFhLGtoQkFDYixxQkFBcUIscUdBQ3JCLGFBQWEsb0xBQ2IsdUJBQXVCLGdFQUN2QixnQkFBZ0IsbUZBQ2hCLFVBQVU7OzRGQU1MLGtCQUFrQjtrQkFuQjlCLFNBQVM7K0JBQ0ksZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixxQkFBcUI7d0JBQ3JCLGFBQWE7d0JBQ2IsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBQ2hCLFVBQVU7cUJBQ2IsYUFDVSxDQUFDLHVCQUF1QixDQUFDOzswQkFtR3ZCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUNBQWlDO3lDQTVGakUsT0FBTztzQkFETixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixNQUFNO3NCQURMLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS04seUJBQXlCO3NCQUR4QixLQUFLO2dCQUtOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFRTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBUU4sd0JBQXdCO3NCQUR2QixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsTUFBTTtnQkFLUCxhQUFhO3NCQURaLE1BQU07Z0JBS1AsVUFBVTtzQkFEVCxNQUFNO2dCQUtQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixNQUFNO2dCQUtQLGNBQWM7c0JBRGIsTUFBTTtnQkFxRFAsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBDb25maXJtRGlhbG9nQ29tcG9uZW50LFxuICAgIENvbnRlbnRMaW5rTW9kZWwsXG4gICAgRm9ybWF0U3BhY2VQaXBlLFxuICAgIEZvcm1CYXNlQ29tcG9uZW50LFxuICAgIEZvcm1FdmVudCxcbiAgICBGb3JtRmllbGRNb2RlbCxcbiAgICBGb3JtRmllbGRWYWxpZGF0b3IsXG4gICAgRm9ybU1vZGVsLFxuICAgIEZvcm1PdXRjb21lRXZlbnQsXG4gICAgRm9ybU91dGNvbWVNb2RlbCxcbiAgICBGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgRm9ybVNlcnZpY2UsXG4gICAgRm9ybVZhbHVlcyxcbiAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgIFRvb2xiYXJEaXZpZGVyQ29tcG9uZW50LFxuICAgIFVwbG9hZFdpZGdldENvbnRlbnRMaW5rTW9kZWwsXG4gICAgV2lkZ2V0VmlzaWJpbGl0eVNlcnZpY2Vcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IEZvcm1DbG91ZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtLWNsb3VkLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFza1ZhcmlhYmxlQ2xvdWQgfSBmcm9tICcuLi9tb2RlbHMvdGFzay12YXJpYWJsZS1jbG91ZC5tb2RlbCc7XG5pbXBvcnQgeyBUYXNrRGV0YWlsc0Nsb3VkTW9kZWwgfSBmcm9tICcuLi8uLi90YXNrL21vZGVscy90YXNrLWRldGFpbHMtY2xvdWQubW9kZWwnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IHY0IGFzIHV1aWRHZW5lcmF0aW9uIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBGb3JtQ2xvdWREaXNwbGF5TW9kZSwgRm9ybUNsb3VkRGlzcGxheU1vZGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1maWVsZHMuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3JtQ2xvdWRTcGlubmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NwaW5uZXIvZm9ybS1jbG91ZC1zcGlubmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlzcGxheU1vZGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGlzcGxheS1tb2RlLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuXG5leHBvcnQgY29uc3QgRk9STV9DTE9VRF9GSUVMRF9WQUxJREFUT1JTX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEZvcm1GaWVsZFZhbGlkYXRvcltdPignRk9STV9DTE9VRF9GSUVMRF9WQUxJREFUT1JTX1RPS0VOJyk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWNsb3VkLWZvcm0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIEZvcm1hdFNwYWNlUGlwZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRDYXJkTW9kdWxlLFxuICAgICAgICBGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIFRvb2xiYXJEaXZpZGVyQ29tcG9uZW50LFxuICAgICAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgICAgICBBMTF5TW9kdWxlXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtGb3JtQ2xvdWRTcGlubmVyU2VydmljZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tY2xvdWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2Zvcm0tY2xvdWQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ2xvdWRDb21wb25lbnQgZXh0ZW5kcyBGb3JtQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcbiAgICAvKiogQXBwIG5hbWUgdG8gZmV0Y2ggY29ycmVzcG9uZGluZyBmb3JtIGFuZCB2YWx1ZXMuICovXG4gICAgQElucHV0KClcbiAgICBhcHBOYW1lOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBUaGUgYXBwbGljYXRpb24gdmVyc2lvbiB0byB1c2Ugd2hlbiBmZXRjaGluZyBkYXRhICovXG4gICAgQElucHV0KClcbiAgICBhcHBWZXJzaW9uPzogbnVtYmVyO1xuXG4gICAgLyoqIFRhc2sgaWQgdG8gZmV0Y2ggY29ycmVzcG9uZGluZyBmb3JtIGFuZCB2YWx1ZXMuICovXG4gICAgQElucHV0KClcbiAgICBmb3JtSWQ6IHN0cmluZztcblxuICAgIC8qKiBQcm9jZXNzSW5zdGFuY2VJZCBpZCB0byBmZXRjaCBjb3JyZXNwb25kaW5nIGZvcm0gYW5kIHZhbHVlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHByb2Nlc3NJbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgICAvKiogVGFzayBpZCB0byBmZXRjaCBjb3JyZXNwb25kaW5nIGZvcm0gYW5kIHZhbHVlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHRhc2tJZDogc3RyaW5nO1xuXG4gICAgLyoqIEN1c3RvbSBmb3JtIHZhbHVlcyBtYXAgdG8gYmUgdXNlZCB3aXRoIHRoZSByZW5kZXJlZCBmb3JtLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGF0YTogVGFza1ZhcmlhYmxlQ2xvdWRbXTtcblxuICAgIC8qKiBUaGUgYXZhaWxhYmxlIGRpc3BsYXkgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBmb3JtICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zOiBGb3JtQ2xvdWREaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25bXTtcblxuICAgIC8qKiBUb2dnbGUgcmVuZGVyaW5nIG9mIHRoZSBgQ29tcGxldGVgIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dDb21wbGV0ZUJ1dHRvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIHRleHQgZm9yIHRoZSBgU2F2ZWAgYnV0dG9uLlxuICAgICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGRlZmF1bHQgdGV4dCB3aWxsIGJlIHVzZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21TYXZlQnV0dG9uVGV4dDogc3RyaW5nID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gdGV4dCBmb3IgdGhlIGBDb21wbGV0ZWAgYnV0dG9uLlxuICAgICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGRlZmF1bHQgdGV4dCB3aWxsIGJlIHVzZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjdXN0b21Db21wbGV0ZUJ1dHRvblRleHQ6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2l0aCB0aGUgYFNhdmVgIG9yIGN1c3RvbSBvdXRjb21lcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBmb3JtU2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Nb2RlbD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggdGhlIGBDb21wbGV0ZWAgb3V0Y29tZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBmb3JtQ29tcGxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtTW9kZWw+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBmb3JtIGlzIGxvYWRlZCBvciByZWxvYWRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBmb3JtTG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtTW9kZWw+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGZvcm0gdmFsdWVzIGFyZSByZWZyZXNoZWQgZHVlIHRvIGEgZGF0YSBwcm9wZXJ0eSBjaGFuZ2UuICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybURhdGFSZWZyZXNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Nb2RlbD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gZm9ybSBjb250ZW50IGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9ybUNvbnRlbnRDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDb250ZW50TGlua01vZGVsPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIGRpc3BsYXkgbW9kZSBjb25maWd1cmF0aW9uIGlzIHR1cm5lZCBvbi4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBkaXNwbGF5TW9kZU9uID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtQ2xvdWREaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZGlzcGxheSBtb2RlIGNvbmZpZ3VyYXRpb24gaXMgdHVybmVkIG9mZi4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBkaXNwbGF5TW9kZU9mZiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybUNsb3VkRGlzcGxheU1vZGVDb25maWd1cmF0aW9uPigpO1xuXG4gICAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gICAgbm9kZUlkOiBzdHJpbmc7XG4gICAgZm9ybUNsb3VkUmVwcmVzZW50YXRpb25KU09OOiBhbnk7XG4gICAgZmllbGRWYWxpZGF0b3JzOiBGb3JtRmllbGRWYWxpZGF0b3JbXSA9IFtdO1xuXG4gICAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgICBkaXNwbGF5TW9kZTogc3RyaW5nO1xuICAgIGRpc3BsYXlDb25maWd1cmF0aW9uOiBGb3JtQ2xvdWREaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb24gPSBEaXNwbGF5TW9kZVNlcnZpY2UuREVGQVVMVF9ESVNQTEFZX01PREVfQ09ORklHVVJBVElPTlNbMF07XG4gICAgc3R5bGU6IHN0cmluZyA9ICcnO1xuXG4gICAgcHJvdGVjdGVkIGZvcm1DbG91ZFNlcnZpY2UgPSBpbmplY3QoRm9ybUNsb3VkU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIGZvcm1TZXJ2aWNlID0gaW5qZWN0KEZvcm1TZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgdmlzaWJpbGl0eVNlcnZpY2UgPSBpbmplY3QoV2lkZ2V0VmlzaWJpbGl0eVNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCBkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgICBwcm90ZWN0ZWQgc3Bpbm5lclNlcnZpY2UgPSBpbmplY3QoRm9ybUNsb3VkU3Bpbm5lclNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCBkaXNwbGF5TW9kZVNlcnZpY2UgPSBpbmplY3QoRGlzcGxheU1vZGVTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChGT1JNX0NMT1VEX0ZJRUxEX1ZBTElEQVRPUlNfVE9LRU4pIGluamVjdGVkRmllbGRWYWxpZGF0b3JzPzogRm9ybUZpZWxkVmFsaWRhdG9yW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb2FkSW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnMoaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnMpO1xuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmluaXRTcGlubmVySGFuZGxpbmcodGhpcy5kZXN0cm95UmVmKTtcblxuICAgICAgICB0aGlzLmlkID0gdXVpZEdlbmVyYXRpb24oKTtcblxuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmZvcm1Db250ZW50Q2xpY2tlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgVXBsb2FkV2lkZ2V0Q29udGVudExpbmtNb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zZXROb2RlSWRWYWx1ZUZvclZpZXdlcnNMaW5rZWRUb1VwbG9hZFdpZGdldChjb250ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRm9ybURhdGFSZWZyZXNoZWQodGhpcy5mb3JtKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmZvcm1EYXRhUmVmcmVzaGVkLm5leHQobmV3IEZvcm1FdmVudCh0aGlzLmZvcm0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udGVudENsaWNrZWQuZW1pdChjb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS51cGRhdGVGb3JtVmFsdWVzUmVxdWVzdGVkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgodmFsdWVzVG9TZXRJZk5vdFByZXNlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5hZGRWYWx1ZXNOb3RQcmVzZW50KHZhbHVlc1RvU2V0SWZOb3RQcmVzZW50KTtcbiAgICAgICAgICAgIHRoaXMub25Gb3JtRGF0YVJlZnJlc2hlZCh0aGlzLmZvcm0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmZvcm1GaWVsZFZhbHVlQ2hhbmdlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZVNhdmVCdXR0b24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IGFwcE5hbWUgPSBjaGFuZ2VzWydhcHBOYW1lJ107XG5cbiAgICAgICAgaWYgKGFwcE5hbWU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudGFza0lkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRGb3JtQnlUYXNrSWQoYXBwTmFtZS5jdXJyZW50VmFsdWUsIHRoaXMudGFza0lkLCB0aGlzLmFwcFZlcnNpb24pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvcm1JZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUJ5SWQoYXBwTmFtZS5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybUlkLCB0aGlzLmFwcFZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybUlkID0gY2hhbmdlc1snZm9ybUlkJ107XG4gICAgICAgIGlmIChmb3JtSWQ/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmFwcE5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUJ5SWQodGhpcy5hcHBOYW1lLCBmb3JtSWQuY3VycmVudFZhbHVlLCB0aGlzLmFwcFZlcnNpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFza0lkID0gY2hhbmdlc1sndGFza0lkJ107XG4gICAgICAgIGlmICh0YXNrSWQ/LmN1cnJlbnRWYWx1ZSAmJiB0aGlzLmFwcE5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUJ5VGFza0lkKHRoaXMuYXBwTmFtZSwgdGFza0lkLmN1cnJlbnRWYWx1ZSwgdGhpcy5hcHBWZXJzaW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBjaGFuZ2VzWydkYXRhJ10/LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKGRhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEZvcm1EYXRhKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3JtUmVwcmVzZW50YXRpb24gPSBjaGFuZ2VzWydmb3JtJ107XG5cbiAgICAgICAgaWYgKGZvcm1SZXByZXNlbnRhdGlvbj8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0gPSBmb3JtUmVwcmVzZW50YXRpb24uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5vbkZvcm1Mb2FkZWQodGhpcy5mb3JtKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBEaXNwbGF5TW9kZVNlcnZpY2UuZGlzcGxheU1vZGUkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGNoYW5nZSkgPT4gY2hhbmdlLmlkID09PSB0aGlzLmlkKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGlzcGxheU1vZGVDaGFuZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvbGREaXNwbGF5TW9kZSA9IHRoaXMuZGlzcGxheU1vZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TW9kZSA9IGRpc3BsYXlNb2RlQ2hhbmdlLmRpc3BsYXlNb2RlO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkRGlzcGxheU1vZGVDb25maWd1cmF0aW9uID0gdGhpcy5kaXNwbGF5TW9kZVNlcnZpY2UuZmluZENvbmZpZ3VyYXRpb24ob2xkRGlzcGxheU1vZGUsIHRoaXMuZGlzcGxheU1vZGVDb25maWd1cmF0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RGlzcGxheU1vZGVDb25maWd1cmF0aW9uID0gdGhpcy5kaXNwbGF5TW9kZVNlcnZpY2UuZmluZENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlNb2RlQ2hhbmdlLmRpc3BsYXlNb2RlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlQ29uZmlndXJhdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKG9sZERpc3BsYXlNb2RlQ29uZmlndXJhdGlvbj8uZGlzcGxheU1vZGUgIT09IG5ld0Rpc3BsYXlNb2RlQ29uZmlndXJhdGlvbj8uZGlzcGxheU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZERpc3BsYXlNb2RlQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TW9kZU9mZi5lbWl0KG9sZERpc3BsYXlNb2RlQ29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0Rpc3BsYXlNb2RlQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TW9kZU9uLmVtaXQobmV3RGlzcGxheU1vZGVDb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUNvbmZpZ3VyYXRpb24gPSBuZXdEaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb247XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gdXNlciBjbGlja3MgZm9ybSByZWZyZXNoIGJ1dHRvbi5cbiAgICAgKi9cbiAgICBvblJlZnJlc2hDbGlja2VkKCkge1xuICAgICAgICB0aGlzLmxvYWRGb3JtKCk7XG4gICAgfVxuXG4gICAgbG9hZEZvcm0oKSB7XG4gICAgICAgIGlmICh0aGlzLmFwcE5hbWUgJiYgdGhpcy50YXNrSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUJ5VGFza0lkKHRoaXMuYXBwTmFtZSwgdGhpcy50YXNrSWQsIHRoaXMuYXBwVmVyc2lvbik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBOYW1lICYmIHRoaXMuZm9ybUlkKSB7XG4gICAgICAgICAgICB0aGlzLmdldEZvcm1CeUlkKHRoaXMuYXBwTmFtZSwgdGhpcy5mb3JtSWQsIHRoaXMuYXBwVmVyc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaW5kUHJvY2Vzc1ZhcmlhYmxlc0J5VGFza0lkKGFwcE5hbWU6IHN0cmluZywgdGFza0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRhc2tWYXJpYWJsZUNsb3VkW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNsb3VkU2VydmljZS5nZXRUYXNrKGFwcE5hbWUsIHRhc2tJZCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgodGFzaykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQVByb2Nlc3NUYXNrKHRhc2spKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1DbG91ZFNlcnZpY2UuZ2V0VGFza1ZhcmlhYmxlcyhhcHBOYW1lLCB0YXNrSWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRDdXN0b21PdXRjb21lQnV0dG9uVGV4dChvdXRjb21lOiBGb3JtT3V0Y29tZU1vZGVsKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKG91dGNvbWU/LmlkID09PSBGb3JtTW9kZWwuU0FWRV9PVVRDT01FIHx8IG91dGNvbWU/Lm5hbWUgPT09IEZvcm1PdXRjb21lTW9kZWwuU0FWRV9BQ1RJT04pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVNhdmVCdXR0b25UZXh0O1xuICAgICAgICB9IGVsc2UgaWYgKG91dGNvbWU/LmlkID09PSBGb3JtTW9kZWwuQ09NUExFVEVfT1VUQ09NRSB8fCBvdXRjb21lPy5uYW1lID09PSBGb3JtT3V0Y29tZU1vZGVsLkNPTVBMRVRFX0FDVElPTikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tQ29tcGxldGVCdXR0b25UZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpc0FQcm9jZXNzVGFzayh0YXNrUmVwcmVzZW50YXRpb246IFRhc2tEZXRhaWxzQ2xvdWRNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGFza1JlcHJlc2VudGF0aW9uLnByb2Nlc3NEZWZpbml0aW9uSWQgJiYgdGFza1JlcHJlc2VudGF0aW9uLnByb2Nlc3NEZWZpbml0aW9uRGVwbG95bWVudElkICE9PSAnbnVsbCc7XG4gICAgfVxuXG4gICAgZ2V0Rm9ybUJ5VGFza0lkKGFwcE5hbWU6IHN0cmluZywgdGFza0lkOiBzdHJpbmcsIHZlcnNpb24/OiBudW1iZXIpOiBQcm9taXNlPEZvcm1Nb2RlbD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8Rm9ybU1vZGVsPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgZm9ya0pvaW4odGhpcy5mb3JtQ2xvdWRTZXJ2aWNlLmdldFRhc2tGb3JtKGFwcE5hbWUsIHRhc2tJZCwgdmVyc2lvbiksIHRoaXMuZm9ybUNsb3VkU2VydmljZS5nZXRUYXNrVmFyaWFibGVzKGFwcE5hbWUsIHRhc2tJZCkpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNsb3VkUmVwcmVzZW50YXRpb25KU09OID0gZGF0YVswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ2xvdWRSZXByZXNlbnRhdGlvbkpTT04ucHJvY2Vzc1ZhcmlhYmxlcyA9IGRhdGFbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRGb3JtID0gdGhpcy5wYXJzZUZvcm0odGhpcy5mb3JtQ2xvdWRSZXByZXNlbnRhdGlvbkpTT04pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5yZWZyZXNoVmlzaWJpbGl0eShwYXJzZWRGb3JtLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkRm9ybS52YWxpZGF0ZUZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybSA9IHBhcnNlZEZvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ubm9kZUlkID0gJy1teS0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZvcm1Mb2FkZWQodGhpcy5mb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5mb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRGb3JtQnlJZChhcHBOYW1lOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nLCBhcHBWZXJzaW9uPzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZm9ybUNsb3VkU2VydmljZVxuICAgICAgICAgICAgLmdldEZvcm0oYXBwTmFtZSwgZm9ybUlkLCBhcHBWZXJzaW9uKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChmb3JtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5Gb3JtID0geyAuLi5mb3JtLmZvcm1SZXByZXNlbnRhdGlvbiwgLi4uZm9ybS5mb3JtUmVwcmVzZW50YXRpb24uZm9ybURlZmluaXRpb24gfTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZsYXR0ZW5Gb3JtLmZvcm1EZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxhdHRlbkZvcm07XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKGZvcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ2xvdWRSZXByZXNlbnRhdGlvbkpTT04gPSBmb3JtO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTi5wcm9jZXNzVmFyaWFibGVzID0gdGhpcy5kYXRhIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRGb3JtID0gdGhpcy5wYXJzZUZvcm0oZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UucmVmcmVzaFZpc2liaWxpdHkocGFyc2VkRm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZEZvcm0/LnZhbGlkYXRlRm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0gPSBwYXJzZWRGb3JtO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0ubm9kZUlkID0gJy1teS0nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRm9ybUxvYWRlZCh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgc2F2ZVRhc2tGb3JtKCkge1xuICAgICAgICBpZiAodGhpcy5mb3JtICYmIHRoaXMuYXBwTmFtZSAmJiB0aGlzLnRhc2tJZCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ2xvdWRTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLnNhdmVUYXNrRm9ybSh0aGlzLmFwcE5hbWUsIHRoaXMudGFza0lkLCB0aGlzLnByb2Nlc3NJbnN0YW5jZUlkLCBgJHt0aGlzLmZvcm0uaWR9YCwgdGhpcy5mb3JtLnZhbHVlcylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uVGFza1NhdmVkKHRoaXMuZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4gdGhpcy5vblRhc2tTYXZlZEVycm9yKGVycm9yKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlU2VydmljZS5vblNhdmVUYXNrKHRoaXMuaWQsIHRoaXMuZGlzcGxheU1vZGUsIHRoaXMuZGlzcGxheU1vZGVDb25maWd1cmF0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wbGV0ZVRhc2tGb3JtKG91dGNvbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybT8uY29uZmlybU1lc3NhZ2U/LnNob3cgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5mb3JtLmNvbmZpcm1NZXNzYWdlLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnNDUwcHgnXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVGb3JtKG91dGNvbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZUZvcm0ob3V0Y29tZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwbGF5TW9kZVNlcnZpY2Uub25Db21wbGV0ZVRhc2sodGhpcy5pZCwgdGhpcy5kaXNwbGF5TW9kZSwgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBsZXRlRm9ybShvdXRjb21lPzogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0gJiYgdGhpcy5hcHBOYW1lICYmIHRoaXMudGFza0lkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1DbG91ZFNlcnZpY2VcbiAgICAgICAgICAgICAgICAuY29tcGxldGVUYXNrRm9ybSh0aGlzLmFwcE5hbWUsIHRoaXMudGFza0lkLCB0aGlzLnByb2Nlc3NJbnN0YW5jZUlkLCBgJHt0aGlzLmZvcm0uaWR9YCwgdGhpcy5mb3JtLnZhbHVlcywgb3V0Y29tZSwgdGhpcy5hcHBWZXJzaW9uKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25UYXNrQ29tcGxldGVkKHRoaXMuZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4gdGhpcy5vblRhc2tDb21wbGV0ZWRFcnJvcihlcnJvcilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VGb3JtKGZvcm1DbG91ZFJlcHJlc2VudGF0aW9uSlNPTj86IGFueSk6IEZvcm1Nb2RlbCB8IG51bGwge1xuICAgICAgICBpZiAoZm9ybUNsb3VkUmVwcmVzZW50YXRpb25KU09OKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtVmFsdWVzOiBGb3JtVmFsdWVzID0ge307XG4gICAgICAgICAgICAodGhpcy5kYXRhIHx8IFtdKS5mb3JFYWNoKCh2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXNbdmFyaWFibGUubmFtZV0gPSB2YXJpYWJsZS52YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1Nb2RlbChmb3JtQ2xvdWRSZXByZXNlbnRhdGlvbkpTT04sIGZvcm1WYWx1ZXMsIHRoaXMucmVhZE9ubHksIHRoaXMuZm9ybVNlcnZpY2UsIHVuZGVmaW5lZCwgdGhpcy5maWVsZFZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgaWYgKCFmb3JtKSB7XG4gICAgICAgICAgICAgICAgZm9ybS5vdXRjb21lcyA9IHRoaXMuZ2V0Rm9ybURlZmluaXRpb25PdXRjb21lcyhmb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGN1c3RvbSBzZXQgb2Ygb3V0Y29tZXMgZm9yIGEgRm9ybSBEZWZpbml0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZvcm0gRm9ybSBkZWZpbml0aW9uIG1vZGVsLlxuICAgICAqIEByZXR1cm5zIGxpc3Qgb2YgZm9ybSBvdXRjb21lc1xuICAgICAqL1xuICAgIGdldEZvcm1EZWZpbml0aW9uT3V0Y29tZXMoZm9ybTogRm9ybU1vZGVsKTogRm9ybU91dGNvbWVNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgRm9ybU91dGNvbWVNb2RlbChmb3JtLCB7IGlkOiBGb3JtTW9kZWwuU0FWRV9PVVRDT01FLCBuYW1lOiBGb3JtT3V0Y29tZU1vZGVsLlNBVkVfQUNUSU9OLCBpc1N5c3RlbTogdHJ1ZSB9KV07XG4gICAgfVxuXG4gICAgY2hlY2tWaXNpYmlsaXR5KGZpZWxkOiBGb3JtRmllbGRNb2RlbCkge1xuICAgICAgICBpZiAoZmllbGQ/LmZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UucmVmcmVzaFZpc2liaWxpdHkoZmllbGQuZm9ybSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hGb3JtRGF0YSgpIHtcbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5wYXJzZUZvcm0odGhpcy5mb3JtQ2xvdWRSZXByZXNlbnRhdGlvbkpTT04pO1xuICAgICAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICAgICAgICB0aGlzLm9uRm9ybUxvYWRlZCh0aGlzLmZvcm0pO1xuICAgICAgICAgICAgdGhpcy5vbkZvcm1EYXRhUmVmcmVzaGVkKHRoaXMuZm9ybSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25Gb3JtTG9hZGVkKGZvcm06IEZvcm1Nb2RlbCkge1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TW9kZUNvbmZpZ3VyYXRpb25zID0gdGhpcy5kaXNwbGF5TW9kZVNlcnZpY2UuZ2V0RGlzcGxheU1vZGVDb25maWd1cmF0aW9ucyh0aGlzLmRpc3BsYXlNb2RlQ29uZmlndXJhdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TW9kZSA9IHRoaXMuZGlzcGxheU1vZGVTZXJ2aWNlLnN3aXRjaFRvRGlzcGxheU1vZGUoXG4gICAgICAgICAgICAgICAgdGhpcy5pZCxcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uanNvbi5kaXNwbGF5TW9kZSxcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlNb2RlLFxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU1vZGVDb25maWd1cmF0aW9uc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5Q29uZmlndXJhdGlvbiA9IHRoaXMuZGlzcGxheU1vZGVTZXJ2aWNlLmZpbmRDb25maWd1cmF0aW9uKHRoaXMuZGlzcGxheU1vZGUsIHRoaXMuZGlzcGxheU1vZGVDb25maWd1cmF0aW9ucyk7XG5cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU1vZGVPbi5lbWl0KHRoaXMuZGlzcGxheUNvbmZpZ3VyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuZm9ybUxvYWRlZC5lbWl0KGZvcm0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkZvcm1EYXRhUmVmcmVzaGVkKGZvcm06IEZvcm1Nb2RlbCkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhUmVmcmVzaGVkLmVtaXQoZm9ybSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uVGFza1NhdmVkKGZvcm06IEZvcm1Nb2RlbCkge1xuICAgICAgICB0aGlzLmZvcm1TYXZlZC5lbWl0KGZvcm0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblRhc2tTYXZlZEVycm9yKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uVGFza0NvbXBsZXRlZChmb3JtOiBGb3JtTW9kZWwpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29tcGxldGVkLmVtaXQoZm9ybSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uVGFza0NvbXBsZXRlZEVycm9yKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRXhlY3V0ZU91dGNvbWUob3V0Y29tZTogRm9ybU91dGNvbWVNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBhcmdzID0gbmV3IEZvcm1PdXRjb21lRXZlbnQob3V0Y29tZSk7XG5cbiAgICAgICAgaWYgKGFyZ3MuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leGVjdXRlT3V0Y29tZS5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gIWFyZ3MuZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc3RvcmVGb3JtQXNNZXRhZGF0YSgpIHt9XG5cbiAgICBzd2l0Y2hUb0Rpc3BsYXlNb2RlKG5ld0Rpc3BsYXlNb2RlPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheU1vZGVTZXJ2aWNlLnN3aXRjaFRvRGlzcGxheU1vZGUodGhpcy5pZCwgRm9ybUNsb3VkRGlzcGxheU1vZGVbbmV3RGlzcGxheU1vZGVdLCB0aGlzLmRpc3BsYXlNb2RlLCB0aGlzLmRpc3BsYXlNb2RlQ29uZmlndXJhdGlvbnMpO1xuICAgIH1cblxuICAgIGZpbmREaXNwbGF5Q29uZmlndXJhdGlvbihkaXNwbGF5TW9kZT86IHN0cmluZyk6IEZvcm1DbG91ZERpc3BsYXlNb2RlQ29uZmlndXJhdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlNb2RlU2VydmljZS5maW5kQ29uZmlndXJhdGlvbihGb3JtQ2xvdWREaXNwbGF5TW9kZVtkaXNwbGF5TW9kZV0sIHRoaXMuZGlzcGxheU1vZGVDb25maWd1cmF0aW9ucyk7XG4gICAgfVxuXG4gICAgbG9hZEluamVjdGVkRmllbGRWYWxpZGF0b3JzKGluamVjdGVkRmllbGRWYWxpZGF0b3JzOiBGb3JtRmllbGRWYWxpZGF0b3JbXSk6IHZvaWQge1xuICAgICAgICBpZiAoaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnMgJiYgaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRvcnMgPSBbLi4udGhpcy5maWVsZFZhbGlkYXRvcnMsIC4uLmluamVjdGVkRmllbGRWYWxpZGF0b3JzXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCIhaGFzRm9ybSgpXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2VtcHR5LWZvcm1dXCIgLz5cbjwvZGl2PlxuXG48ZGl2XG4gICAgKm5nSWY9XCJoYXNGb3JtKClcIlxuICAgIGNsYXNzPVwiYWRmLWNsb3VkLWZvcm0tY29udGFpbmVyIGFkZi1jbG91ZC1mb3JtLXt7IGRpc3BsYXlDb25maWd1cmF0aW9uPy5vcHRpb25zPy5mdWxsc2NyZWVuID8gJ2Z1bGxzY3JlZW4nIDogJ2lubGluZScgfX0tY29udGFpbmVyXCJcbiAgICBbc3R5bGVdPVwiZm9ybVN0eWxlXCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLWNsb3VkLWZvcm0tY29udGVudFwiIFtjZGtUcmFwRm9jdXNdPVwiZGlzcGxheUNvbmZpZ3VyYXRpb24/Lm9wdGlvbnM/LnRyYXBGb2N1c1wiIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlPlxuICAgICAgICA8YWRmLXRvb2xiYXIgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS10b29sYmFyXCIgKm5nSWY9XCJkaXNwbGF5Q29uZmlndXJhdGlvbj8ub3B0aW9ucz8uZGlzcGxheVRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybV9fZm9ybS10aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLWNsb3VkLWZvcm1fX2Rpc3BsYXktbmFtZVwiIFt0aXRsZV09XCJmb3JtLnRhc2tOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZvcm0udGFza05hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JtLnRhc2tOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnRk9STS5GT1JNX1JFTkRFUkVSLk5BTUVMRVNTX1RBU0snIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YWRmLXRvb2xiYXItZGl2aWRlciAqbmdJZj1cImRpc3BsYXlDb25maWd1cmF0aW9uPy5vcHRpb25zPy5kaXNwbGF5Q2xvc2VCdXR0b25cIiAvPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGlzcGxheUNvbmZpZ3VyYXRpb24/Lm9wdGlvbnM/LmRpc3BsYXlDbG9zZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1jbG9zZS1idXR0b25cIlxuICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi10b29sYmFyLXJpZ2h0LWJhY2tcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERl9WSUVXRVIuQUNUSU9OUy5DTE9TRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWZvcm0tY2xvc2UtYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBREZfVklFV0VSLkFDVElPTlMuQ0xPU0UnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBREZfVklFV0VSLkFDVElPTlMuQ0xPU0UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVG9EaXNwbGF5TW9kZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvYWRmLXRvb2xiYXI+XG5cbiAgICAgICAgPG1hdC1jYXJkXG4gICAgICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZWRcIlxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1jb250ZW50LWNhcmRcIlxuICAgICAgICAgICAgW2NsYXNzLmFkZi1jbG91ZC1mb3JtLWNvbnRlbnQtY2FyZC1mdWxsc2NyZWVuXT1cImRpc3BsYXlNb2RlID09PSAnZnVsbFNjcmVlbidcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWNsb3VkLWZvcm0tY29udGVudC1jYXJkLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZC1oZWFkZXIgKm5nSWY9XCJzaG93VGl0bGUgfHwgc2hvd1JlZnJlc2hCdXR0b24gfHwgc2hvd1ZhbGlkYXRpb25JY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1ZhbGlkYXRpb25JY29uXCIgY2xhc3M9XCJhZGYtZm9ybS12YWxpZGF0aW9uLWJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBpZD1cImFkZi12YWxpZC1mb3JtLWljb25cIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgKm5nSWY9XCJmb3JtLmlzVmFsaWQ7IGVsc2Ugbm9fdmFsaWRfZm9ybVwiPmNoZWNrX2NpcmNsZTwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub192YWxpZF9mb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgaWQ9XCJhZGYtaW52YWxpZC1mb3JtLWljb25cIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGFkZi1pbnZhbGlkLWNvbG9yXCI+ZXJyb3I8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFkaXNwbGF5Q29uZmlndXJhdGlvbj8ub3B0aW9ucz8uZnVsbHNjcmVlbiAmJiBmaW5kRGlzcGxheUNvbmZpZ3VyYXRpb24oJ2Z1bGxTY3JlZW4nKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNsb3VkLWZvcm0tZnVsbHNjcmVlbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVG9EaXNwbGF5TW9kZSgnZnVsbFNjcmVlbicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWNsb3VkLWZvcm0tZnVsbHNjcmVlbi1idXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmZ1bGxzY3JlZW48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1JlZnJlc2hCdXR0b25cIiBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLXJlbG9hZC1idXR0b25cIiBbdGl0bGVdPVwiJ0FERl9WSUVXRVIuQUNUSU9OUy5GVUxMU0NSRUVOJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib25SZWZyZXNoQ2xpY2tlZCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX1ZJRVdFUi5BQ1RJT05TLkZVTExTQ1JFRU4nIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNUaXRsZUVuYWJsZWQoKVwiIGNsYXNzPVwiYWRmLWNsb3VkLWZvcm0tdGl0bGVcIiBbdGl0bGVdPVwiZm9ybS50YXNrTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBmb3JtLnRhc2tOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9ybS50YXNrTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0ZPUk0uRk9STV9SRU5ERVJFUi5OQU1FTEVTU19UQVNLJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50IGNsYXNzPVwiYWRmLWZvcm0tY29udGFpbmVyLWNhcmQtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8YWRmLWZvcm0tcmVuZGVyZXIgW2Zvcm1EZWZpbml0aW9uXT1cImZvcm1cIiBbcmVhZE9ubHldPVwicmVhZE9ubHlcIiAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jYXJkLWFjdGlvbnMgKm5nSWY9XCJmb3JtLmhhc091dGNvbWVzKClcIiBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLWNvbnRlbnQtY2FyZC1hY3Rpb25zXCIgYWxpZ249XCJlbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFkZi1jbG91ZC1mb3JtLWN1c3RvbS1vdXRjb21lc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvdXRjb21lIG9mIGZvcm0ub3V0Y29tZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3V0Y29tZS5pc1Zpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2FkZi1mb3JtLScgKyBvdXRjb21lLm5hbWUgfCBmb3JtYXRTcGFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJnZXRDb2xvckZvck91dGNvbWUob3V0Y29tZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc091dGNvbWVCdXR0b25FbmFibGVkKG91dGNvbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFkZi1mb3JtLWhpZGUtYnV0dG9uXT1cIiFpc091dGNvbWVCdXR0b25WaXNpYmxlKG91dGNvbWUsIGZvcm0ucmVhZE9ubHkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1jdXN0b20tb3V0Y29tZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25PdXRjb21lQ2xpY2tlZChvdXRjb21lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRDdXN0b21PdXRjb21lQnV0dG9uVGV4dChvdXRjb21lKSB8fCAob3V0Y29tZS5uYW1lIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1jYXJkPlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -163,7 +163,7 @@ export class FormCloudService extends BaseCloudService {
|
|
|
163
163
|
*
|
|
164
164
|
* @param json JSON data to create the form
|
|
165
165
|
* @param data Values for the form's fields
|
|
166
|
-
* @param readOnly Toggles whether
|
|
166
|
+
* @param readOnly Toggles whether the form should be read-only
|
|
167
167
|
* @returns Form created from the JSON specification
|
|
168
168
|
*/
|
|
169
169
|
parseForm(json, data, readOnly = false) {
|
|
@@ -198,4 +198,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
198
198
|
type: Inject,
|
|
199
199
|
args: [FORM_CLOUD_SERVICE_FIELD_VALIDATORS_TOKEN]
|
|
200
200
|
}] }] });
|
|
201
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jbG91ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMtY2xvdWQvc3JjL2xpYi9mb3JtL3NlcnZpY2VzL2Zvcm0tY2xvdWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBYyxTQUFTLEVBQXVDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEcsT0FBTyxFQUFjLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBOEIsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFFdkQsTUFBTSxDQUFDLE1BQU0seUNBQXlDLEdBQUcsSUFBSSxjQUFjLENBQXVCLDJDQUEyQyxDQUFDLENBQUM7QUFLL0ksTUFBTSxPQUFPLGdCQUFpQixTQUFRLGdCQUFnQjtJQUdsRCxJQUFJLFNBQVM7UUFDVCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFDSSxh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TSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsU0FBUyxDQUFDLElBQVMsRUFBRSxJQUEwQixFQUFFLFdBQW9CLEtBQUs7UUFDdEUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sV0FBVyxHQUFHO2dCQUNoQixHQUFHLElBQUksQ0FBQyxrQkFBa0I7Z0JBQzFCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWM7YUFDNUMsQ0FBQztZQUNGLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUVsQyxNQUFNLFVBQVUsR0FBZSxFQUFFLENBQUM7WUFDbEMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzlCLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUMvQyxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxlQUFlO1FBQ1gsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzsrR0F6TVEsZ0JBQWdCLCtDQVVELHlDQUF5QzttSEFWeEQsZ0JBQWdCLGNBRmIsTUFBTTs7NEZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBV1EsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx5Q0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtVmFsdWVzLCBGb3JtTW9kZWwsIEZvcm1GaWVsZE9wdGlvbiwgRm9ybUZpZWxkVmFsaWRhdG9yIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleHBhbmQsIG1hcCwgcmVkdWNlLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYXNrRGV0YWlsc0Nsb3VkTW9kZWwgfSBmcm9tICcuLi8uLi90YXNrL21vZGVscy90YXNrLWRldGFpbHMtY2xvdWQubW9kZWwnO1xuaW1wb3J0IHsgQ29tcGxldGVGb3JtUmVwcmVzZW50YXRpb24sIFVwbG9hZEFwaSB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgVGFza1ZhcmlhYmxlQ2xvdWQgfSBmcm9tICcuLi9tb2RlbHMvdGFzay12YXJpYWJsZS1jbG91ZC5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlQ2xvdWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZS1jbG91ZC5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Db250ZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1maWVsZHMuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3JtQ2xvdWRTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi9mb3JtLWNsb3VkLnNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFkZkh0dHBDbGllbnQgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUvYXBpJztcblxuZXhwb3J0IGNvbnN0IEZPUk1fQ0xPVURfU0VSVklDRV9GSUVMRF9WQUxJREFUT1JTX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEZvcm1GaWVsZFZhbGlkYXRvcltdPignRk9STV9DTE9VRF9TRVJWSUNFX0ZJRUxEX1ZBTElEQVRPUlNfVE9LRU4nKTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ2xvdWRTZXJ2aWNlIGV4dGVuZHMgQmFzZUNsb3VkU2VydmljZSBpbXBsZW1lbnRzIEZvcm1DbG91ZFNlcnZpY2VJbnRlcmZhY2Uge1xuICAgIHByaXZhdGUgX3VwbG9hZEFwaTogVXBsb2FkQXBpO1xuICAgIHByaXZhdGUgZmllbGRWYWxpZGF0b3JzOiBGb3JtRmllbGRWYWxpZGF0b3JbXTtcbiAgICBnZXQgdXBsb2FkQXBpKCk6IFVwbG9hZEFwaSB7XG4gICAgICAgIHRoaXMuX3VwbG9hZEFwaSA9IHRoaXMuX3VwbG9hZEFwaSA/PyBuZXcgVXBsb2FkQXBpKHRoaXMuYXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZEFwaTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgYWRmSHR0cENsaWVudDogQWRmSHR0cENsaWVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChGT1JNX0NMT1VEX1NFUlZJQ0VfRklFTERfVkFMSURBVE9SU19UT0tFTikgaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnM/OiBGb3JtRmllbGRWYWxpZGF0b3JbXVxuICAgICkge1xuICAgICAgICBzdXBlcihhZGZIdHRwQ2xpZW50KTtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRvcnMgPSBpbmplY3RlZEZpZWxkVmFsaWRhdG9ycyB8fCBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBmb3JtIGRlZmluaXRpb24gb2YgYSB0YXNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcE5hbWUgTmFtZSBvZiB0aGUgYXBwXG4gICAgICogQHBhcmFtIHRhc2tJZCBJRCBvZiB0aGUgdGFyZ2V0IHRhc2tcbiAgICAgKiBAcGFyYW0gdmVyc2lvbiBWZXJzaW9uIG9mIHRoZSBmb3JtXG4gICAgICogQHJldHVybnMgRm9ybSBkZWZpbml0aW9uXG4gICAgICovXG4gICAgZ2V0VGFza0Zvcm0oYXBwTmFtZTogc3RyaW5nLCB0YXNrSWQ6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRhc2soYXBwTmFtZSwgdGFza0lkKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh0YXNrKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybShhcHBOYW1lLCB0YXNrLmZvcm1LZXksIHZlcnNpb24pLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoZm9ybTogRm9ybUNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5Gb3JtID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZvcm0uZm9ybVJlcHJlc2VudGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZvcm0uZm9ybVJlcHJlc2VudGF0aW9uLmZvcm1EZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tJZDogdGFzay5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrTmFtZTogdGFzay5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEZWZpbml0aW9uSWQ6IHRhc2sucHJvY2Vzc0RlZmluaXRpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5zdGFuY2VJZDogdGFzay5wcm9jZXNzSW5zdGFuY2VJZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmbGF0dGVuRm9ybS5mb3JtRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGF0dGVuRm9ybTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgYSB0YXNrIGZvcm0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXBwTmFtZSBOYW1lIG9mIHRoZSBhcHBcbiAgICAgKiBAcGFyYW0gdGFza0lkIElEIG9mIHRoZSB0YXJnZXQgdGFza1xuICAgICAqIEBwYXJhbSBwcm9jZXNzSW5zdGFuY2VJZCBJRCBvZiBwcm9jZXNzSW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gZm9ybUlkIElEIG9mIHRoZSBmb3JtIHRvIHNhdmVcbiAgICAgKiBAcGFyYW0gdmFsdWVzIEZvcm0gdmFsdWVzIG9iamVjdFxuICAgICAqIEByZXR1cm5zIFVwZGF0ZWQgdGFzayBkZXRhaWxzXG4gICAgICovXG4gICAgc2F2ZVRhc2tGb3JtKGFwcE5hbWU6IHN0cmluZywgdGFza0lkOiBzdHJpbmcsIHByb2Nlc3NJbnN0YW5jZUlkOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nLCB2YWx1ZXM6IEZvcm1WYWx1ZXMpOiBPYnNlcnZhYmxlPFRhc2tEZXRhaWxzQ2xvdWRNb2RlbD4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLmdldEJhc2VQYXRoKGFwcE5hbWUpfS9mb3JtL3YxL2Zvcm1zLyR7Zm9ybUlkfS9zYXZlYDtcbiAgICAgICAgY29uc3Qgc2F2ZUZvcm1SZXByZXNlbnRhdGlvbjogYW55ID0ge1xuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgdGFza0lkLFxuICAgICAgICAgICAgcHJvY2Vzc0luc3RhbmNlSWRcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0KGFwaVVybCwgc2F2ZUZvcm1SZXByZXNlbnRhdGlvbikucGlwZShtYXAoKHJlczogYW55KSA9PiByZXMuZW50cnkpKTtcbiAgICB9XG5cbiAgICBjcmVhdGVUZW1wb3JhcnlSYXdSZWxhdGVkQ29udGVudChmaWxlOiBhbnksIG5vZGVJZDogc3RyaW5nLCBjb250ZW50SG9zdDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlZENvbmZpZyA9IHRoaXMuYXBpU2VydmljZS5sYXN0Q29uZmlnO1xuICAgICAgICBjaGFuZ2VkQ29uZmlnLnByb3ZpZGVyID0gJ0FMTCc7XG4gICAgICAgIGNoYW5nZWRDb25maWcuaG9zdEVjbSA9IGNvbnRlbnRIb3N0LnJlcGxhY2UoJy9hbGZyZXNjbycsICcnKTtcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkuc2V0Q29uZmlnKGNoYW5nZWRDb25maWcpO1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLnVwbG9hZEFwaS51cGxvYWRGaWxlKGZpbGUsICcnLCBub2RlSWQsIG51bGwsIHsgb3ZlcndyaXRlOiB0cnVlIH0pKS5waXBlKG1hcCgocmVzOiBhbnkpID0+IHJlcy5lbnRyeSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBsZXRlcyBhIHRhc2sgZm9ybS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcHBOYW1lIE5hbWUgb2YgdGhlIGFwcFxuICAgICAqIEBwYXJhbSB0YXNrSWQgSUQgb2YgdGhlIHRhcmdldCB0YXNrXG4gICAgICogQHBhcmFtIHByb2Nlc3NJbnN0YW5jZUlkIElEIG9mIHByb2Nlc3NJbnN0YW5jZVxuICAgICAqIEBwYXJhbSBmb3JtSWQgSUQgb2YgdGhlIGZvcm0gdG8gY29tcGxldGVcbiAgICAgKiBAcGFyYW0gZm9ybVZhbHVlcyBGb3JtIHZhbHVlcyBvYmplY3RcbiAgICAgKiBAcGFyYW0gb3V0Y29tZSBGb3JtIG91dGNvbWVcbiAgICAgKiBAcGFyYW0gdmVyc2lvbiBvZiB0aGUgZm9ybVxuICAgICAqIEByZXR1cm5zIFVwZGF0ZWQgdGFzayBkZXRhaWxzXG4gICAgICovXG4gICAgY29tcGxldGVUYXNrRm9ybShcbiAgICAgICAgYXBwTmFtZTogc3RyaW5nLFxuICAgICAgICB0YXNrSWQ6IHN0cmluZyxcbiAgICAgICAgcHJvY2Vzc0luc3RhbmNlSWQ6IHN0cmluZyxcbiAgICAgICAgZm9ybUlkOiBzdHJpbmcsXG4gICAgICAgIGZvcm1WYWx1ZXM6IEZvcm1WYWx1ZXMsXG4gICAgICAgIG91dGNvbWU6IHN0cmluZyxcbiAgICAgICAgdmVyc2lvbjogbnVtYmVyXG4gICAgKTogT2JzZXJ2YWJsZTxUYXNrRGV0YWlsc0Nsb3VkTW9kZWw+IHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5nZXRCYXNlUGF0aChhcHBOYW1lKX0vZm9ybS92MS9mb3Jtcy8ke2Zvcm1JZH0vc3VibWl0L3ZlcnNpb25zLyR7dmVyc2lvbn1gO1xuICAgICAgICBjb25zdCBjb21wbGV0ZUZvcm1SZXByZXNlbnRhdGlvbiA9IHtcbiAgICAgICAgICAgIHZhbHVlczogZm9ybVZhbHVlcyxcbiAgICAgICAgICAgIHRhc2tJZCxcbiAgICAgICAgICAgIHByb2Nlc3NJbnN0YW5jZUlkXG4gICAgICAgIH0gYXMgQ29tcGxldGVGb3JtUmVwcmVzZW50YXRpb247XG5cbiAgICAgICAgaWYgKG91dGNvbWUpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlRm9ybVJlcHJlc2VudGF0aW9uLm91dGNvbWUgPSBvdXRjb21lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdChhcGlVcmwsIGNvbXBsZXRlRm9ybVJlcHJlc2VudGF0aW9uKS5waXBlKG1hcCgocmVzOiBhbnkpID0+IHJlcy5lbnRyeSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgZGV0YWlscyBvZiBhIHRhc2tcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcHBOYW1lIE5hbWUgb2YgdGhlIGFwcFxuICAgICAqIEBwYXJhbSB0YXNrSWQgSUQgb2YgdGhlIHRhcmdldCB0YXNrXG4gICAgICogQHJldHVybnMgRGV0YWlscyBvZiB0aGUgdGFza1xuICAgICAqL1xuICAgIGdldFRhc2soYXBwTmFtZTogc3RyaW5nLCB0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VGFza0RldGFpbHNDbG91ZE1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuZ2V0QmFzZVBhdGgoYXBwTmFtZSl9L3F1ZXJ5L3YxL3Rhc2tzLyR7dGFza0lkfWA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGFwaVVybCkucGlwZShtYXAoKHJlczogYW55KSA9PiByZXMuZW50cnkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YXJpYWJsZXMgb2YgYSB0YXNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcE5hbWUgTmFtZSBvZiB0aGUgYXBwXG4gICAgICogQHBhcmFtIHRhc2tJZCBJRCBvZiB0aGUgdGFyZ2V0IHRhc2tcbiAgICAgKiBAcmV0dXJucyBUYXNrIHZhcmlhYmxlc1xuICAgICAqL1xuICAgIGdldFRhc2tWYXJpYWJsZXMoYXBwTmFtZTogc3RyaW5nLCB0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VGFza1ZhcmlhYmxlQ2xvdWRbXT4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLmdldEJhc2VQYXRoKGFwcE5hbWUpfS9xdWVyeS92MS90YXNrcy8ke3Rhc2tJZH0vdmFyaWFibGVzYDtcbiAgICAgICAgbGV0IHNraXBDb3VudCA9IDA7XG4gICAgICAgIGNvbnN0IG1heEl0ZW1zID0gMTAwMDtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXQoYXBpVXJsLCB7IG1heEl0ZW1zLCBza2lwQ291bnQgfSkucGlwZShcbiAgICAgICAgICAgIGV4cGFuZCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBza2lwQ291bnQgKz0gbWF4SXRlbXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5saXN0LnBhZ2luYXRpb24uaGFzTW9yZUl0ZW1zXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXQoYXBpVXJsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heEl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IEVNUFRZO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMubGlzdC5lbnRyaWVzLm1hcCgodmFyaWFibGUpID0+IG5ldyBUYXNrVmFyaWFibGVDbG91ZCh2YXJpYWJsZS5lbnRyeSkpKSxcbiAgICAgICAgICAgIHJlZHVjZSgoYWNjLCByZXMpID0+IGFjYy5jb25jYXQocmVzKSwgW10pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIGZvcm0gZGVmaW5pdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcHBOYW1lIE5hbWUgb2YgdGhlIGFwcFxuICAgICAqIEBwYXJhbSBmb3JtS2V5IGtleSBvZiB0aGUgdGFyZ2V0IHRhc2tcbiAgICAgKiBAcGFyYW0gdmVyc2lvbiBWZXJzaW9uIG9mIHRoZSBmb3JtXG4gICAgICogQHJldHVybnMgRm9ybSBkZWZpbml0aW9uXG4gICAgICovXG4gICAgZ2V0Rm9ybShhcHBOYW1lOiBzdHJpbmcsIGZvcm1LZXk6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcik6IE9ic2VydmFibGU8Rm9ybUNvbnRlbnQ+IHtcbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuZ2V0QmFzZVBhdGgoYXBwTmFtZSl9L2Zvcm0vdjEvZm9ybXMvJHtmb3JtS2V5fWA7XG5cbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIHVybCArPSBgL3ZlcnNpb25zLyR7dmVyc2lvbn1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0UmVzdFdpZGdldERhdGEoZm9ybU5hbWU6IHN0cmluZywgd2lkZ2V0SWQ6IHN0cmluZywgYm9keTogYW55ID0ge30pOiBPYnNlcnZhYmxlPEZvcm1GaWVsZE9wdGlvbltdPiB7XG4gICAgICAgIGNvbnN0IGFwcE5hbWUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0KCdhbGZyZXNjby1kZXBsb3llZC1hcHBzJylbMF0/Lm5hbWU7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuZ2V0QmFzZVBhdGgoYXBwTmFtZSl9L2Zvcm0vdjEvZm9ybXMvJHtmb3JtTmFtZX0vdmFsdWVzLyR7d2lkZ2V0SWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdChhcGlVcmwsIGJvZHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBKU09OIGRhdGEgdG8gY3JlYXRlIGEgY29ycmVzcG9uZGluZyBmb3JtLlxuICAgICAqXG4gICAgICogQHBhcmFtIGpzb24gSlNPTiBkYXRhIHRvIGNyZWF0ZSB0aGUgZm9ybVxuICAgICAqIEBwYXJhbSBkYXRhIFZhbHVlcyBmb3IgdGhlIGZvcm0ncyBmaWVsZHNcbiAgICAgKiBAcGFyYW0gcmVhZE9ubHkgVG9nZ2xlcyB3aGV0aGVyIG9yIG5vdCB0aGUgZm9ybSBzaG91bGQgYmUgcmVhZC1vbmx5XG4gICAgICogQHJldHVybnMgRm9ybSBjcmVhdGVkIGZyb20gdGhlIEpTT04gc3BlY2lmaWNhdGlvblxuICAgICAqL1xuICAgIHBhcnNlRm9ybShqc29uOiBhbnksIGRhdGE/OiBUYXNrVmFyaWFibGVDbG91ZFtdLCByZWFkT25seTogYm9vbGVhbiA9IGZhbHNlKTogRm9ybU1vZGVsIHtcbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5Gb3JtID0ge1xuICAgICAgICAgICAgICAgIC4uLmpzb24uZm9ybVJlcHJlc2VudGF0aW9uLFxuICAgICAgICAgICAgICAgIC4uLmpzb24uZm9ybVJlcHJlc2VudGF0aW9uLmZvcm1EZWZpbml0aW9uXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGVsZXRlIGZsYXR0ZW5Gb3JtLmZvcm1EZWZpbml0aW9uO1xuXG4gICAgICAgICAgICBjb25zdCBmb3JtVmFsdWVzOiBGb3JtVmFsdWVzID0ge307XG4gICAgICAgICAgICAoZGF0YSB8fCBbXSkuZm9yRWFjaCgodmFyaWFibGUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtVmFsdWVzW3ZhcmlhYmxlLm5hbWVdID0gdmFyaWFibGUudmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb3JtTW9kZWwoZmxhdHRlbkZvcm0sIGZvcm1WYWx1ZXMsIHJlYWRPbmx5LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy5maWVsZFZhbGlkYXRvcnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFByZXZpZXdTdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jbG91ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMtY2xvdWQvc3JjL2xpYi9mb3JtL3NlcnZpY2VzL2Zvcm0tY2xvdWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBYyxTQUFTLEVBQXVDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEcsT0FBTyxFQUFjLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBOEIsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUFFdkQsTUFBTSxDQUFDLE1BQU0seUNBQXlDLEdBQUcsSUFBSSxjQUFjLENBQXVCLDJDQUEyQyxDQUFDLENBQUM7QUFLL0ksTUFBTSxPQUFPLGdCQUFpQixTQUFRLGdCQUFnQjtJQUdsRCxJQUFJLFNBQVM7UUFDVCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFDSSxh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TSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsU0FBUyxDQUFDLElBQVMsRUFBRSxJQUEwQixFQUFFLFdBQW9CLEtBQUs7UUFDdEUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sV0FBVyxHQUFHO2dCQUNoQixHQUFHLElBQUksQ0FBQyxrQkFBa0I7Z0JBQzFCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWM7YUFDNUMsQ0FBQztZQUNGLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQztZQUVsQyxNQUFNLFVBQVUsR0FBZSxFQUFFLENBQUM7WUFDbEMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzlCLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUMvQyxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxlQUFlO1FBQ1gsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzsrR0F6TVEsZ0JBQWdCLCtDQVVELHlDQUF5QzttSEFWeEQsZ0JBQWdCLGNBRmIsTUFBTTs7NEZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBV1EsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx5Q0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtVmFsdWVzLCBGb3JtTW9kZWwsIEZvcm1GaWVsZE9wdGlvbiwgRm9ybUZpZWxkVmFsaWRhdG9yIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20sIEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleHBhbmQsIG1hcCwgcmVkdWNlLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYXNrRGV0YWlsc0Nsb3VkTW9kZWwgfSBmcm9tICcuLi8uLi90YXNrL21vZGVscy90YXNrLWRldGFpbHMtY2xvdWQubW9kZWwnO1xuaW1wb3J0IHsgQ29tcGxldGVGb3JtUmVwcmVzZW50YXRpb24sIFVwbG9hZEFwaSB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgVGFza1ZhcmlhYmxlQ2xvdWQgfSBmcm9tICcuLi9tb2RlbHMvdGFzay12YXJpYWJsZS1jbG91ZC5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlQ2xvdWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZS1jbG91ZC5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Db250ZW50IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1maWVsZHMuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3JtQ2xvdWRTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi9mb3JtLWNsb3VkLnNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFkZkh0dHBDbGllbnQgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUvYXBpJztcblxuZXhwb3J0IGNvbnN0IEZPUk1fQ0xPVURfU0VSVklDRV9GSUVMRF9WQUxJREFUT1JTX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPEZvcm1GaWVsZFZhbGlkYXRvcltdPignRk9STV9DTE9VRF9TRVJWSUNFX0ZJRUxEX1ZBTElEQVRPUlNfVE9LRU4nKTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ2xvdWRTZXJ2aWNlIGV4dGVuZHMgQmFzZUNsb3VkU2VydmljZSBpbXBsZW1lbnRzIEZvcm1DbG91ZFNlcnZpY2VJbnRlcmZhY2Uge1xuICAgIHByaXZhdGUgX3VwbG9hZEFwaTogVXBsb2FkQXBpO1xuICAgIHByaXZhdGUgZmllbGRWYWxpZGF0b3JzOiBGb3JtRmllbGRWYWxpZGF0b3JbXTtcbiAgICBnZXQgdXBsb2FkQXBpKCk6IFVwbG9hZEFwaSB7XG4gICAgICAgIHRoaXMuX3VwbG9hZEFwaSA9IHRoaXMuX3VwbG9hZEFwaSA/PyBuZXcgVXBsb2FkQXBpKHRoaXMuYXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwbG9hZEFwaTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgYWRmSHR0cENsaWVudDogQWRmSHR0cENsaWVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChGT1JNX0NMT1VEX1NFUlZJQ0VfRklFTERfVkFMSURBVE9SU19UT0tFTikgaW5qZWN0ZWRGaWVsZFZhbGlkYXRvcnM/OiBGb3JtRmllbGRWYWxpZGF0b3JbXVxuICAgICkge1xuICAgICAgICBzdXBlcihhZGZIdHRwQ2xpZW50KTtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRvcnMgPSBpbmplY3RlZEZpZWxkVmFsaWRhdG9ycyB8fCBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBmb3JtIGRlZmluaXRpb24gb2YgYSB0YXNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcE5hbWUgTmFtZSBvZiB0aGUgYXBwXG4gICAgICogQHBhcmFtIHRhc2tJZCBJRCBvZiB0aGUgdGFyZ2V0IHRhc2tcbiAgICAgKiBAcGFyYW0gdmVyc2lvbiBWZXJzaW9uIG9mIHRoZSBmb3JtXG4gICAgICogQHJldHVybnMgRm9ybSBkZWZpbml0aW9uXG4gICAgICovXG4gICAgZ2V0VGFza0Zvcm0oYXBwTmFtZTogc3RyaW5nLCB0YXNrSWQ6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRhc2soYXBwTmFtZSwgdGFza0lkKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh0YXNrKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybShhcHBOYW1lLCB0YXNrLmZvcm1LZXksIHZlcnNpb24pLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoZm9ybTogRm9ybUNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5Gb3JtID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZvcm0uZm9ybVJlcHJlc2VudGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZvcm0uZm9ybVJlcHJlc2VudGF0aW9uLmZvcm1EZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tJZDogdGFzay5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrTmFtZTogdGFzay5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NEZWZpbml0aW9uSWQ6IHRhc2sucHJvY2Vzc0RlZmluaXRpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5zdGFuY2VJZDogdGFzay5wcm9jZXNzSW5zdGFuY2VJZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmbGF0dGVuRm9ybS5mb3JtRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGF0dGVuRm9ybTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgYSB0YXNrIGZvcm0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXBwTmFtZSBOYW1lIG9mIHRoZSBhcHBcbiAgICAgKiBAcGFyYW0gdGFza0lkIElEIG9mIHRoZSB0YXJnZXQgdGFza1xuICAgICAqIEBwYXJhbSBwcm9jZXNzSW5zdGFuY2VJZCBJRCBvZiBwcm9jZXNzSW5zdGFuY2VcbiAgICAgKiBAcGFyYW0gZm9ybUlkIElEIG9mIHRoZSBmb3JtIHRvIHNhdmVcbiAgICAgKiBAcGFyYW0gdmFsdWVzIEZvcm0gdmFsdWVzIG9iamVjdFxuICAgICAqIEByZXR1cm5zIFVwZGF0ZWQgdGFzayBkZXRhaWxzXG4gICAgICovXG4gICAgc2F2ZVRhc2tGb3JtKGFwcE5hbWU6IHN0cmluZywgdGFza0lkOiBzdHJpbmcsIHByb2Nlc3NJbnN0YW5jZUlkOiBzdHJpbmcsIGZvcm1JZDogc3RyaW5nLCB2YWx1ZXM6IEZvcm1WYWx1ZXMpOiBPYnNlcnZhYmxlPFRhc2tEZXRhaWxzQ2xvdWRNb2RlbD4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLmdldEJhc2VQYXRoKGFwcE5hbWUpfS9mb3JtL3YxL2Zvcm1zLyR7Zm9ybUlkfS9zYXZlYDtcbiAgICAgICAgY29uc3Qgc2F2ZUZvcm1SZXByZXNlbnRhdGlvbjogYW55ID0ge1xuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgdGFza0lkLFxuICAgICAgICAgICAgcHJvY2Vzc0luc3RhbmNlSWRcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0KGFwaVVybCwgc2F2ZUZvcm1SZXByZXNlbnRhdGlvbikucGlwZShtYXAoKHJlczogYW55KSA9PiByZXMuZW50cnkpKTtcbiAgICB9XG5cbiAgICBjcmVhdGVUZW1wb3JhcnlSYXdSZWxhdGVkQ29udGVudChmaWxlOiBhbnksIG5vZGVJZDogc3RyaW5nLCBjb250ZW50SG9zdDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlZENvbmZpZyA9IHRoaXMuYXBpU2VydmljZS5sYXN0Q29uZmlnO1xuICAgICAgICBjaGFuZ2VkQ29uZmlnLnByb3ZpZGVyID0gJ0FMTCc7XG4gICAgICAgIGNoYW5nZWRDb25maWcuaG9zdEVjbSA9IGNvbnRlbnRIb3N0LnJlcGxhY2UoJy9hbGZyZXNjbycsICcnKTtcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkuc2V0Q29uZmlnKGNoYW5nZWRDb25maWcpO1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLnVwbG9hZEFwaS51cGxvYWRGaWxlKGZpbGUsICcnLCBub2RlSWQsIG51bGwsIHsgb3ZlcndyaXRlOiB0cnVlIH0pKS5waXBlKG1hcCgocmVzOiBhbnkpID0+IHJlcy5lbnRyeSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBsZXRlcyBhIHRhc2sgZm9ybS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcHBOYW1lIE5hbWUgb2YgdGhlIGFwcFxuICAgICAqIEBwYXJhbSB0YXNrSWQgSUQgb2YgdGhlIHRhcmdldCB0YXNrXG4gICAgICogQHBhcmFtIHByb2Nlc3NJbnN0YW5jZUlkIElEIG9mIHByb2Nlc3NJbnN0YW5jZVxuICAgICAqIEBwYXJhbSBmb3JtSWQgSUQgb2YgdGhlIGZvcm0gdG8gY29tcGxldGVcbiAgICAgKiBAcGFyYW0gZm9ybVZhbHVlcyBGb3JtIHZhbHVlcyBvYmplY3RcbiAgICAgKiBAcGFyYW0gb3V0Y29tZSBGb3JtIG91dGNvbWVcbiAgICAgKiBAcGFyYW0gdmVyc2lvbiBvZiB0aGUgZm9ybVxuICAgICAqIEByZXR1cm5zIFVwZGF0ZWQgdGFzayBkZXRhaWxzXG4gICAgICovXG4gICAgY29tcGxldGVUYXNrRm9ybShcbiAgICAgICAgYXBwTmFtZTogc3RyaW5nLFxuICAgICAgICB0YXNrSWQ6IHN0cmluZyxcbiAgICAgICAgcHJvY2Vzc0luc3RhbmNlSWQ6IHN0cmluZyxcbiAgICAgICAgZm9ybUlkOiBzdHJpbmcsXG4gICAgICAgIGZvcm1WYWx1ZXM6IEZvcm1WYWx1ZXMsXG4gICAgICAgIG91dGNvbWU6IHN0cmluZyxcbiAgICAgICAgdmVyc2lvbjogbnVtYmVyXG4gICAgKTogT2JzZXJ2YWJsZTxUYXNrRGV0YWlsc0Nsb3VkTW9kZWw+IHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5nZXRCYXNlUGF0aChhcHBOYW1lKX0vZm9ybS92MS9mb3Jtcy8ke2Zvcm1JZH0vc3VibWl0L3ZlcnNpb25zLyR7dmVyc2lvbn1gO1xuICAgICAgICBjb25zdCBjb21wbGV0ZUZvcm1SZXByZXNlbnRhdGlvbiA9IHtcbiAgICAgICAgICAgIHZhbHVlczogZm9ybVZhbHVlcyxcbiAgICAgICAgICAgIHRhc2tJZCxcbiAgICAgICAgICAgIHByb2Nlc3NJbnN0YW5jZUlkXG4gICAgICAgIH0gYXMgQ29tcGxldGVGb3JtUmVwcmVzZW50YXRpb247XG5cbiAgICAgICAgaWYgKG91dGNvbWUpIHtcbiAgICAgICAgICAgIGNvbXBsZXRlRm9ybVJlcHJlc2VudGF0aW9uLm91dGNvbWUgPSBvdXRjb21lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdChhcGlVcmwsIGNvbXBsZXRlRm9ybVJlcHJlc2VudGF0aW9uKS5waXBlKG1hcCgocmVzOiBhbnkpID0+IHJlcy5lbnRyeSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgZGV0YWlscyBvZiBhIHRhc2tcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcHBOYW1lIE5hbWUgb2YgdGhlIGFwcFxuICAgICAqIEBwYXJhbSB0YXNrSWQgSUQgb2YgdGhlIHRhcmdldCB0YXNrXG4gICAgICogQHJldHVybnMgRGV0YWlscyBvZiB0aGUgdGFza1xuICAgICAqL1xuICAgIGdldFRhc2soYXBwTmFtZTogc3RyaW5nLCB0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VGFza0RldGFpbHNDbG91ZE1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuZ2V0QmFzZVBhdGgoYXBwTmFtZSl9L3F1ZXJ5L3YxL3Rhc2tzLyR7dGFza0lkfWA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KGFwaVVybCkucGlwZShtYXAoKHJlczogYW55KSA9PiByZXMuZW50cnkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YXJpYWJsZXMgb2YgYSB0YXNrLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcE5hbWUgTmFtZSBvZiB0aGUgYXBwXG4gICAgICogQHBhcmFtIHRhc2tJZCBJRCBvZiB0aGUgdGFyZ2V0IHRhc2tcbiAgICAgKiBAcmV0dXJucyBUYXNrIHZhcmlhYmxlc1xuICAgICAqL1xuICAgIGdldFRhc2tWYXJpYWJsZXMoYXBwTmFtZTogc3RyaW5nLCB0YXNrSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VGFza1ZhcmlhYmxlQ2xvdWRbXT4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLmdldEJhc2VQYXRoKGFwcE5hbWUpfS9xdWVyeS92MS90YXNrcy8ke3Rhc2tJZH0vdmFyaWFibGVzYDtcbiAgICAgICAgbGV0IHNraXBDb3VudCA9IDA7XG4gICAgICAgIGNvbnN0IG1heEl0ZW1zID0gMTAwMDtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXQoYXBpVXJsLCB7IG1heEl0ZW1zLCBza2lwQ291bnQgfSkucGlwZShcbiAgICAgICAgICAgIGV4cGFuZCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBza2lwQ291bnQgKz0gbWF4SXRlbXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcy5saXN0LnBhZ2luYXRpb24uaGFzTW9yZUl0ZW1zXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXQoYXBpVXJsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heEl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ291bnRcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IEVNUFRZO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAoKHJlczogYW55KSA9PiByZXMubGlzdC5lbnRyaWVzLm1hcCgodmFyaWFibGUpID0+IG5ldyBUYXNrVmFyaWFibGVDbG91ZCh2YXJpYWJsZS5lbnRyeSkpKSxcbiAgICAgICAgICAgIHJlZHVjZSgoYWNjLCByZXMpID0+IGFjYy5jb25jYXQocmVzKSwgW10pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIGZvcm0gZGVmaW5pdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhcHBOYW1lIE5hbWUgb2YgdGhlIGFwcFxuICAgICAqIEBwYXJhbSBmb3JtS2V5IGtleSBvZiB0aGUgdGFyZ2V0IHRhc2tcbiAgICAgKiBAcGFyYW0gdmVyc2lvbiBWZXJzaW9uIG9mIHRoZSBmb3JtXG4gICAgICogQHJldHVybnMgRm9ybSBkZWZpbml0aW9uXG4gICAgICovXG4gICAgZ2V0Rm9ybShhcHBOYW1lOiBzdHJpbmcsIGZvcm1LZXk6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcik6IE9ic2VydmFibGU8Rm9ybUNvbnRlbnQ+IHtcbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuZ2V0QmFzZVBhdGgoYXBwTmFtZSl9L2Zvcm0vdjEvZm9ybXMvJHtmb3JtS2V5fWA7XG5cbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIHVybCArPSBgL3ZlcnNpb25zLyR7dmVyc2lvbn1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0UmVzdFdpZGdldERhdGEoZm9ybU5hbWU6IHN0cmluZywgd2lkZ2V0SWQ6IHN0cmluZywgYm9keTogYW55ID0ge30pOiBPYnNlcnZhYmxlPEZvcm1GaWVsZE9wdGlvbltdPiB7XG4gICAgICAgIGNvbnN0IGFwcE5hbWUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0KCdhbGZyZXNjby1kZXBsb3llZC1hcHBzJylbMF0/Lm5hbWU7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuZ2V0QmFzZVBhdGgoYXBwTmFtZSl9L2Zvcm0vdjEvZm9ybXMvJHtmb3JtTmFtZX0vdmFsdWVzLyR7d2lkZ2V0SWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdChhcGlVcmwsIGJvZHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBKU09OIGRhdGEgdG8gY3JlYXRlIGEgY29ycmVzcG9uZGluZyBmb3JtLlxuICAgICAqXG4gICAgICogQHBhcmFtIGpzb24gSlNPTiBkYXRhIHRvIGNyZWF0ZSB0aGUgZm9ybVxuICAgICAqIEBwYXJhbSBkYXRhIFZhbHVlcyBmb3IgdGhlIGZvcm0ncyBmaWVsZHNcbiAgICAgKiBAcGFyYW0gcmVhZE9ubHkgVG9nZ2xlcyB3aGV0aGVyIHRoZSBmb3JtIHNob3VsZCBiZSByZWFkLW9ubHlcbiAgICAgKiBAcmV0dXJucyBGb3JtIGNyZWF0ZWQgZnJvbSB0aGUgSlNPTiBzcGVjaWZpY2F0aW9uXG4gICAgICovXG4gICAgcGFyc2VGb3JtKGpzb246IGFueSwgZGF0YT86IFRhc2tWYXJpYWJsZUNsb3VkW10sIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2UpOiBGb3JtTW9kZWwge1xuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgICAgY29uc3QgZmxhdHRlbkZvcm0gPSB7XG4gICAgICAgICAgICAgICAgLi4uanNvbi5mb3JtUmVwcmVzZW50YXRpb24sXG4gICAgICAgICAgICAgICAgLi4uanNvbi5mb3JtUmVwcmVzZW50YXRpb24uZm9ybURlZmluaXRpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkZWxldGUgZmxhdHRlbkZvcm0uZm9ybURlZmluaXRpb247XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1WYWx1ZXM6IEZvcm1WYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgIChkYXRhIHx8IFtdKS5mb3JFYWNoKCh2YXJpYWJsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXNbdmFyaWFibGUubmFtZV0gPSB2YXJpYWJsZS52YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvcm1Nb2RlbChmbGF0dGVuRm9ybSwgZm9ybVZhbHVlcywgcmVhZE9ubHksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLmZpZWxkVmFsaWRhdG9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0UHJldmlld1N0YXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIl19
|