@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
499 lines • 72.5 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, ContentChild, ElementRef, EventEmitter, HostBinding, Injector, Input, Output, TemplateRef, ViewChild } from '@angular/core';
import { SmeSchemaProperty } from '../../../schema/schema-decorator';
import { ArrayPropertySchemaFieldLoaderComponent } from '../../../schema/schema-field-host.component';
import { SchemaPrimitiveType } from '../../../schema/schema-models';
import { SchemaUtilities } from '../../../schema/schema-utilities';
import { SmeInternalFormFieldComponent } from '../form-field.component';
import { FormFieldIsolatorComponent } from '../isolator/isolator.component';
import { ArrayFormFieldAccessibilityManagerService } from './array-form-field-accessibility-manager.service';
import * as i0 from "@angular/core";
import * as i1 from "@angular/forms";
import * as i2 from "../../../schema/schema-field-host.component";
import * as i3 from "../form-field-accessor.directive";
import * as i4 from "../form-field-validator.directive";
import * as i5 from "../form-field-async-validator.directive";
import * as i6 from "./array-form-field-accessibility-manager.service";
import * as i7 from "../../../accordion/accordion.component";
import * as i8 from "../../../accordion/accordion-panel/accordion-panel.component";
import * as i9 from "@angular/common";
import * as i10 from "../../../../directives/template-outlet/template-outlet.directive";
import * as i11 from "../../../../directives/disabled/disabled.directive";
import * as i12 from "../../../tooltip/tooltip.directive";
import * as i13 from "../../validation-alert/validation-alert.component";
import * as i14 from "../../fieldset/fieldset.directive";
import * as i15 from "../../form-field-layout/form-field-layout.component";
const _c0 = ["field"];
function ArrayFormFieldLoaderComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelement(0, "sme-schema-field-host", 2);
} if (rf & 2) {
const model_r2 = ctx.$implicit;
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵproperty("propertySchema", ctx_r1.propertySchema.item)("context", ctx_r1.context)("data", model_r2);
} }
const _c1 = ["addButton"];
const _c2 = ["type", "array"];
const _c3 = function (a0, a1) { return { index: a0, ariaLabelId: a1 }; };
function ArrayFormFieldComponent_sme_accordion_panel_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementContainer(0, 15);
} if (rf & 2) {
const ctx_r8 = i0.ɵɵnextContext();
const item_r2 = ctx_r8.$implicit;
const i_r3 = ctx_r8.index;
const ctx_r4 = i0.ɵɵnextContext();
i0.ɵɵproperty("template", ctx_r4.headerTemplate)("data", item_r2)("hostData", i0.ɵɵpureFunction2(3, _c3, i_r3, ctx_r4.getItemAriaId(i_r3, "itemHeader")));
} }
function ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template(rf, ctx) { if (rf & 1) {
const _r11 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 16);
i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.moveUp(item_r2)); });
i0.ɵɵelement(1, "span", 17);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r5 = i0.ɵɵnextContext(2);
i0.ɵɵproperty("title", ctx_r5.strings.MsftSmeShell.Angular.Form.Array.promoteButtonTooltip)("smeDisabled", ctx_r5.loadingOrDisabled);
i0.ɵɵattribute("aria-label", ctx_r5.strings.MsftSmeShell.Angular.Form.Array.promoteButtonAriaLabel);
} }
function ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template(rf, ctx) { if (rf & 1) {
const _r14 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 18);
i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r12 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r12.moveDown(item_r2)); });
i0.ɵɵelement(1, "span", 19);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r6 = i0.ɵɵnextContext(2);
i0.ɵɵproperty("title", ctx_r6.strings.MsftSmeShell.Angular.Form.Array.demoteButtonTooltip)("smeDisabled", ctx_r6.loadingOrDisabled);
i0.ɵɵattribute("aria-label", ctx_r6.strings.MsftSmeShell.Angular.Form.Array.demoteButtonAriaLabel);
} }
function ArrayFormFieldComponent_sme_accordion_panel_3_button_5_Template(rf, ctx) { if (rf & 1) {
const _r17 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 20);
i0.ɵɵlistener("click", function ArrayFormFieldComponent_sme_accordion_panel_3_button_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const item_r2 = i0.ɵɵnextContext().$implicit; const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.delete(item_r2)); });
i0.ɵɵelement(1, "span", 21);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r7 = i0.ɵɵnextContext(2);
i0.ɵɵproperty("title", ctx_r7.strings.MsftSmeShell.Angular.Form.Array.removeButtonTooltip)("smeDisabled", ctx_r7.loadingOrDisabled);
i0.ɵɵattribute("aria-label", ctx_r7.strings.MsftSmeShell.Angular.Form.Array.removeButtonAriaLabel);
} }
function ArrayFormFieldComponent_sme_accordion_panel_3_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "sme-accordion-panel", 7)(1, "sme-panel-control");
i0.ɵɵtemplate(2, ArrayFormFieldComponent_sme_accordion_panel_3_ng_container_2_Template, 1, 6, "ng-container", 8);
i0.ɵɵtemplate(3, ArrayFormFieldComponent_sme_accordion_panel_3_button_3_Template, 2, 3, "button", 9);
i0.ɵɵtemplate(4, ArrayFormFieldComponent_sme_accordion_panel_3_button_4_Template, 2, 3, "button", 10);
i0.ɵɵtemplate(5, ArrayFormFieldComponent_sme_accordion_panel_3_button_5_Template, 2, 3, "button", 11);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(6, "span", 12);
i0.ɵɵtext(7);
i0.ɵɵelementEnd();
i0.ɵɵelementStart(8, "fieldset", 13)(9, "div", 14);
i0.ɵɵelementContainer(10, 15);
i0.ɵɵelementEnd()()();
} if (rf & 2) {
const item_r2 = ctx.$implicit;
const i_r3 = ctx.index;
const ctx_r0 = i0.ɵɵnextContext();
i0.ɵɵproperty("header", ctx_r0.getItemTitle(item_r2, i_r3))("isExpandable", false);
i0.ɵɵattribute("data-uta-id", "array-form-field-item-" + i_r3);
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", ctx_r0.headerTemplate);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r0.showMove);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r0.showMove);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx_r0.getShowRemove(item_r2, i_r3));
i0.ɵɵadvance(1);
i0.ɵɵproperty("id", ctx_r0.getItemAriaId(i_r3, "item"));
i0.ɵɵadvance(1);
i0.ɵɵtextInterpolate(ctx_r0.itemTitle);
i0.ɵɵadvance(1);
i0.ɵɵclassProp("sme-subform-indent-none", ctx_r0.orientation === "horizontal");
i0.ɵɵattribute("aria-labelledby", ctx_r0.getItemAriaId(i_r3, "item"));
i0.ɵɵadvance(1);
i0.ɵɵproperty("id", ctx_r0.getItemAriaId(i_r3, "itemContainer"));
i0.ɵɵadvance(1);
i0.ɵɵproperty("template", ctx_r0.itemTemplate)("data", item_r2)("hostData", i0.ɵɵpureFunction2(16, _c3, i_r3, ctx_r0.getItemAriaId(i_r3, "item")));
} }
function ArrayFormFieldComponent_button_4_Template(rf, ctx) { if (rf & 1) {
const _r20 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "button", 22, 23);
i0.ɵɵlistener("click", function ArrayFormFieldComponent_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r19.add()); });
i0.ɵɵtext(2);
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r1 = i0.ɵɵnextContext();
i0.ɵɵproperty("smeDisabled", ctx_r1.loadingOrDisabled || ctx_r1.maxItems !== -1 && ctx_r1.value.length >= ctx_r1.maxItems)("title", ctx_r1.strings.MsftSmeShell.Angular.Form.Array.addButtonTooltip);
i0.ɵɵattribute("aria-label", ctx_r1.strings.MsftSmeShell.Angular.Form.Array.addButtonAriaLabel);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx_r1.addButtonText);
} }
/* eslint-disable max-len */
export class ArrayFormFieldLoaderComponent extends ArrayPropertySchemaFieldLoaderComponent {
askForNewItem($event) {
const item = SchemaUtilities.generateDataBasedOnSchemaProperty(this.propertySchema.item);
$event.item = item;
}
shouldAdjustControlButtonLocation() {
const itemPropertySchema = this.propertySchema.item;
let result = !!(this.propertySchema.item.label || this.propertySchema.item.description);
if (!result) {
let columnCount = 1;
if (itemPropertySchema.options && itemPropertySchema.options.columnCount) {
columnCount = itemPropertySchema.options.columnCount;
}
for (let i = 0; i < columnCount && i < itemPropertySchema.properties.length; i++) {
if (itemPropertySchema.properties[i].label || itemPropertySchema.properties[i].description) {
result = true;
break;
}
}
}
return result;
}
}
/** @nocollapse */ ArrayFormFieldLoaderComponent.ɵfac = /** @pureOrBreakMyCode */ function () { let ɵArrayFormFieldLoaderComponent_BaseFactory; return function ArrayFormFieldLoaderComponent_Factory(t) { return (ɵArrayFormFieldLoaderComponent_BaseFactory || (ɵArrayFormFieldLoaderComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ArrayFormFieldLoaderComponent)))(t || ArrayFormFieldLoaderComponent); }; }();
/** @nocollapse */ ArrayFormFieldLoaderComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ArrayFormFieldLoaderComponent, selectors: [["ng-component"]], viewQuery: function ArrayFormFieldLoaderComponent_Query(rf, ctx) { if (rf & 1) {
i0.ɵɵviewQuery(_c0, 5);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.arrayFormFieldComponent = _t.first);
} }, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 9, consts: [["type", "array", 3, "ngModel", "name", "label", "required", "description", "adjustControlButtonLocation", "pendingMessage", "customAsyncValidateDisabled", "customAsyncValidateDebounceTime", "ngModelChange", "askForNewItem", "customValidate", "customAsyncValidate"], ["field", ""], [3, "propertySchema", "context", "data"]], template: function ArrayFormFieldLoaderComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "sme-form-field", 0, 1);
i0.ɵɵlistener("ngModelChange", function ArrayFormFieldLoaderComponent_Template_sme_form_field_ngModelChange_0_listener($event) { return ctx.data = $event; })("askForNewItem", function ArrayFormFieldLoaderComponent_Template_sme_form_field_askForNewItem_0_listener($event) { return ctx.askForNewItem($event); })("customValidate", function ArrayFormFieldLoaderComponent_Template_sme_form_field_customValidate_0_listener($event) { return ctx.resolveFunction(ctx.propertySchema.customValidation)($event); })("customAsyncValidate", function ArrayFormFieldLoaderComponent_Template_sme_form_field_customAsyncValidate_0_listener($event) { return ctx.propertySchema.customAsyncValidation && ctx.resolveFunction(ctx.propertySchema.customAsyncValidation.handler)($event); });
i0.ɵɵtemplate(2, ArrayFormFieldLoaderComponent_ng_template_2_Template, 1, 3, "ng-template");
i0.ɵɵelementEnd();
} if (rf & 2) {
i0.ɵɵproperty("ngModel", ctx.data)("name", ctx.propertySchema.name)("label", ctx.localize(ctx.propertySchema.label))("required", ctx.propertySchema.required)("description", ctx.localize(ctx.propertySchema.description))("adjustControlButtonLocation", ctx.shouldAdjustControlButtonLocation())("pendingMessage", ctx.propertySchema.customAsyncValidation && ctx.localize(ctx.propertySchema.customAsyncValidation.pendingMessage))("customAsyncValidateDisabled", ctx.shouldCustomAsyncValidationBeDisabled())("customAsyncValidateDebounceTime", ctx.propertySchema.customAsyncValidation && +ctx.propertySchema.customAsyncValidation.handler);
} }, dependencies: function () { return [i1.NgControlStatus, i1.RequiredValidator, i1.NgModel, i2.SchemaFieldHostComponent, ArrayFormFieldComponent, i3.FormFieldAccessorDirective, i4.FormFieldValidatorDirective, i5.FormFieldAsyncValidatorDirective]; }, encapsulation: 2 });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArrayFormFieldLoaderComponent, [{
type: Component,
args: [{
template: `
<sme-form-field #field type="array" [(ngModel)]="data" [name]="propertySchema.name" [label]="localize(propertySchema.label)"
[required]="propertySchema.required" [description]="localize(propertySchema.description)" (askForNewItem)="askForNewItem($event)"
[adjustControlButtonLocation]="shouldAdjustControlButtonLocation()"
(customValidate)="resolveFunction(propertySchema.customValidation)($event)"
(customAsyncValidate)="propertySchema.customAsyncValidation && resolveFunction(propertySchema.customAsyncValidation.handler)($event)"
[pendingMessage]="propertySchema.customAsyncValidation && localize(propertySchema.customAsyncValidation.pendingMessage)"
[customAsyncValidateDisabled]="shouldCustomAsyncValidationBeDisabled()"
[customAsyncValidateDebounceTime]="propertySchema.customAsyncValidation && +propertySchema.customAsyncValidation.handler"
>
<ng-template let-model>
<sme-schema-field-host [propertySchema]="propertySchema.item"
[context]="context" [data]="model"></sme-schema-field-host>
</ng-template>
</sme-form-field>
`
}]
}], null, { arrayFormFieldComponent: [{
type: ViewChild,
args: ['field']
}] }); })();
/**
* Accessible Implementation of a form field for .sme-array
*/
let ArrayFormFieldComponent = class ArrayFormFieldComponent extends SmeInternalFormFieldComponent {
/**
* Initializes a new instance of the JsonFormFieldComponent
*/
constructor(injector, arrayFormFieldAccessibilityManagerService) {
super(injector);
this.arrayFormFieldAccessibilityManagerService = arrayFormFieldAccessibilityManagerService;
/**
* When no "newItem" is provided. This output will be called anytime a new item is required.
*/
this.askForNewItem = new EventEmitter();
// Event used to provide a custom function that builds individual item headers
this.askForItemHeader = new EventEmitter();
// Event used to provide a custom function that evaluates whether to show or hide individual remove buttons
this.askForRemoveEvaluator = new EventEmitter();
/**
* Indicates that the array item button locations should be adjusted to account for no item label.
*/
this.adjustControlButtonLocation = false;
this.showAdd = true;
this.showRemove = true;
this.maxItems = -1;
this.showMove = true;
this.canCloseAll = true;
this.canCloseAny = false;
this.canOpenMultiple = true;
this.addButtonText = MsftSme.self().Resources.strings.MsftSmeShell.Angular.Common.add;
this._itemTitle = MsftSme.self().Resources.strings.MsftSmeShell.Angular.Form.Array.itemTitle;
this.screenReaderEvent = '';
}
/**
* The source name to use for logging
*/
get logSourceName() {
return 'ArrayFormFieldComponent';
}
/**
* Gets the item template from either the subFormTemplate or subFieldIsolator if provided.
*/
get itemTemplate() {
if (this.subFieldIsolator && this.subFieldIsolator.subFieldTemplate) {
return this.subFieldIsolator.subFieldTemplate;
}
return this.subFormTemplate;
}
set itemTitle(value) {
this._itemTitle = `${value} {0}`;
}
get itemTitle() {
return this._itemTitle;
}
/**
* The aria label for this instance.
*/
get ariaLabel() {
return this.getMergedDescriptionLabel();
}
/**
* The method called after the component is initialized.
*/
ngOnInit() {
super.ngOnInit();
this.setAttribute('role', 'group');
if (this.subFieldIsolator) {
this.subscriptions.push(this.subFieldIsolator.statusChanged.subscribe((status) => {
if (status.pending) {
this.ngModel.control.markAsPending();
}
if (status.dirty) {
this.ngModel.control.markAsDirty();
}
if (status.touched) {
this.ngModel.control.markAsTouched();
}
this.ngModel.control.updateValueAndValidity();
}));
}
}
/**
* Updates a hidden aria-live region with information about changes to the page; if the same event is being repeated, the event string
* is set in lowercase, so the screen reader thinks it's a new string. Clearing and re-setting the field does not prompt the screen
* reader to read the aria-live region.
* @param event the string to be announced
*/
updateScreenReaderEvent(event) {
this.screenReaderEvent = event === this.screenReaderEvent ? event.toLocaleLowerCase() : event;
}
/**
* Adds an item to the array
*/
add() {
const item = this.getNewItem();
this.value.push(item);
this.triggerValueChange();
this.arrayFormFieldAccessibilityManagerService.add(this.value, this.addButton, this.hostElement);
}
/**
* Deletes an item from the array
*/
delete(item) {
const index = this.value.indexOf(item);
this.value.splice(index, 1);
this.triggerValueChange();
this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.removeButtonEvent);
this.arrayFormFieldAccessibilityManagerService.delete(this.value, this.addButton, this.hostElement);
}
/**
* Decreases the index of an item by 1
*/
moveUp(item) {
const index = this.value.indexOf(item);
if (index > 0) {
const temp = { ...item };
this.value[index] = { ...this.value[index - 1] };
this.value[index - 1] = temp;
this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.promoteButtonEvent);
this.arrayFormFieldAccessibilityManagerService.promote(this.value, this.hostElement, index);
}
else {
this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.promoteButtonPreventedEvent);
}
}
/**
* Increases the index of an item by 1
*/
moveDown(item) {
const index = this.value.indexOf(item);
if (index < this.value.length - 1) {
const temp = { ...item };
this.value[index] = { ...this.value[index + 1] };
this.value[index + 1] = temp;
this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.demoteButtonEvent);
this.arrayFormFieldAccessibilityManagerService.demote(this.value, this.hostElement, index);
}
else {
this.updateScreenReaderEvent(this.strings.MsftSmeShell.Angular.Form.Array.demoteButtonPreventedEvent);
}
}
/**
* The method called when a <select> element's value changes.
*/
triggerValueChange() {
this.value = [...this.value];
}
getItemAriaId(index, idName) {
switch (idName) {
case 'item':
return `${this.idBag['item']}-${index}`;
case 'itemHeader':
return `${this.idBag['item']}-header-${index}`;
case 'itemContainer':
return `${this.idBag['item']}-container-${index}`;
default: return null;
}
}
getItemTitle(item, index) {
const event = { headerEvalFunc: null };
this.askForItemHeader.emit(event);
return event.headerEvalFunc ? event.headerEvalFunc(item, index) : this.itemTitle.format(index);
}
getShowRemove(item, index) {
const event = { removeEvalFunc: null };
this.askForRemoveEvaluator.emit(event);
return event.removeEvalFunc ? event.removeEvalFunc(item, index) : this.showRemove;
}
/**
* Performs validation that is internal to this control
* @param c The form control attached to this instance
*/
validate(c) {
if (this.required) {
if (MsftSme.isNullOrUndefined(this.value)) {
return { required: true };
}
if (!this.value.length) {
return { required: true };
}
}
if (this.subFieldIsolator && !this.subFieldIsolator.isValid) {
return {
invalidSubField: {
hidden: true
}
};
}
return super.validate(c);
}
/**
* Creates the idBag used by this component to store unique element ids.
* id values will be assigned be the @see BaseComponent super class.
*/
createIdBag() {
return {
...super.createIdBag(),
detailsSpan: '',
item: ''
};
}
/**
* Generates a new item to be added to the array
*/
getNewItem() {
if (this.newItem) {
return MsftSme.deepCopy(this.newItem);
}
else {
const event = { item: null };
this.askForNewItem.emit(event);
return event.item || {};
}
}
};
/** @nocollapse */ ArrayFormFieldComponent.ɵfac = function ArrayFormFieldComponent_Factory(t) { return new (t || ArrayFormFieldComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i6.ArrayFormFieldAccessibilityManagerService)); };
/** @nocollapse */ ArrayFormFieldComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: ArrayFormFieldComponent, selectors: [["sme-form-field", "type", "array"]], contentQueries: function ArrayFormFieldComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
i0.ɵɵcontentQuery(dirIndex, FormFieldIsolatorComponent, 7);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.subFieldIsolator = _t.first);
} }, viewQuery: function ArrayFormFieldComponent_Query(rf, ctx) { if (rf & 1) {
i0.ɵɵviewQuery(_c1, 5);
} if (rf & 2) {
let _t;
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.addButton = _t.first);
} }, hostVars: 1, hostBindings: function ArrayFormFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {
i0.ɵɵattribute("aria-label", ctx.ariaLabel);
} }, inputs: { adjustControlButtonLocation: "adjustControlButtonLocation", newItem: "newItem", showAdd: "showAdd", showRemove: "showRemove", showMove: "showMove", canCloseAll: "canCloseAll", canCloseAny: "canCloseAny", canOpenMultiple: "canOpenMultiple", maxItems: "maxItems", addButtonText: "addButtonText", headerTemplate: "headerTemplate", itemTitle: "itemTitle" }, outputs: { askForNewItem: "askForNewItem", askForItemHeader: "askForItemHeader", askForRemoveEvaluator: "askForRemoveEvaluator" }, features: [i0.ɵɵInheritDefinitionFeature], attrs: _c2, decls: 8, vars: 8, consts: [[3, "formField"], [1, "sme-array"], [3, "canCloseAny", "canCloseAll", "canOpenMultiple"], [3, "header", "isExpandable", 4, "ngFor", "ngForOf"], ["type", "button", "data-uta-id", "add-button", "class", "sme-button-trigger sme-button-auto-width sme-icon sme-icon-add sme-margin-bottom-xs", 3, "smeDisabled", "title", "click", 4, "ngIf"], [3, "alert"], ["aria-live", "assertive", "aria-relevant", "all", 1, "sme-screen-reader"], [3, "header", "isExpandable"], ["smeTemplateOutlet", "", "hostDataName", "context", 3, "template", "data", "hostData", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs", "data-uta-id", "promote-button", 3, "title", "smeDisabled", "click", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs", "data-uta-id", "demote-button", 3, "title", "smeDisabled", "click", 4, "ngIf"], ["type", "button", "class", "sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs", "data-uta-id", "remove-button", 3, "title", "smeDisabled", "click", 4, "ngIf"], [1, "sme-screen-reader", 3, "id"], [1, "sme-arrange-stack-h", "sme-margin-bottom-lg", "sme-array-item"], [1, "sme-position-flex-auto", "sme-padding-inset-md", 3, "id"], ["smeTemplateOutlet", "", "hostDataName", "context", 3, "template", "data", "hostData"], ["type", "button", "data-uta-id", "promote-button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-form-field-height", "sme-padding-horizontal-xs", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-up"], ["type", "button", "data-uta-id", "demote-button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-form-field-height", "sme-padding-horizontal-xs", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-down"], ["type", "button", "data-uta-id", "remove-button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-form-field-height", "sme-padding-horizontal-xs", 3, "title", "smeDisabled", "click"], [1, "sme-icon", "sme-icon-delete", "sme-color-red"], ["type", "button", "data-uta-id", "add-button", 1, "sme-button-trigger", "sme-button-auto-width", "sme-icon", "sme-icon-add", "sme-margin-bottom-xs", 3, "smeDisabled", "title", "click"], ["addButton", ""]], template: function ArrayFormFieldComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "sme-form-field-layout", 0)(1, "div", 1)(2, "sme-accordion", 2);
i0.ɵɵtemplate(3, ArrayFormFieldComponent_sme_accordion_panel_3_Template, 11, 19, "sme-accordion-panel", 3);
i0.ɵɵelementEnd();
i0.ɵɵtemplate(4, ArrayFormFieldComponent_button_4_Template, 3, 4, "button", 4);
i0.ɵɵelementEnd();
i0.ɵɵelement(5, "sme-validation-alert", 5);
i0.ɵɵelementStart(6, "div", 6);
i0.ɵɵtext(7);
i0.ɵɵelementEnd()();
} if (rf & 2) {
i0.ɵɵproperty("formField", ctx);
i0.ɵɵadvance(2);
i0.ɵɵproperty("canCloseAny", ctx.canCloseAny)("canCloseAll", ctx.canCloseAll)("canOpenMultiple", ctx.canOpenMultiple);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngForOf", ctx.value);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.showAdd);
i0.ɵɵadvance(1);
i0.ɵɵproperty("alert", ctx.alert);
i0.ɵɵadvance(2);
i0.ɵɵtextInterpolate(ctx.screenReaderEvent);
} }, dependencies: [i7.AccordionComponent, i8.AccordionPanelComponent, i8.PanelControlComponent, i9.NgForOf, i9.NgIf, i10.TemplateOutletDirective, i11.DisabledDirective, i12.TooltipDirective, i13.ValidationAlertComponent, i14.FieldsetDirective, i15.FormFieldLayoutComponent], encapsulation: 2 });
ArrayFormFieldComponent = __decorate([
SmeSchemaProperty({
type: SchemaPrimitiveType.Array,
format: 'simple-list',
isDefaultFormat: true,
description: `A form field control binding to array data.`,
loaderComponent: ArrayFormFieldLoaderComponent
}),
__metadata("design:paramtypes", [Injector,
ArrayFormFieldAccessibilityManagerService])
], ArrayFormFieldComponent);
export { ArrayFormFieldComponent };
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArrayFormFieldComponent, [{
type: Component,
args: [{ selector: 'sme-form-field[type="array"]', template: "<sme-form-field-layout [formField]=\"this\">\r\n <div class=\"sme-array\">\r\n <sme-accordion [canCloseAny]=\"canCloseAny\" [canCloseAll]=\"canCloseAll\" [canOpenMultiple]=\"canOpenMultiple\">\r\n <sme-accordion-panel *ngFor=\"let item of value; let i = index\" [header]=\"getItemTitle(item, i)\" [isExpandable]=\"false\" [attr.data-uta-id]=\"'array-form-field-item-' + i\">\r\n <sme-panel-control>\r\n <ng-container *ngIf=\"headerTemplate\" smeTemplateOutlet [template]=\"headerTemplate\" [data]=\"item\" hostDataName=\"context\"\r\n [hostData]=\"{index: i, ariaLabelId: getItemAriaId(i, 'itemHeader')}\"></ng-container>\r\n <button *ngIf=\"showMove\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.promoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.promoteButtonTooltip\" (click)=\"moveUp(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"promote-button\">\r\n <span class=\"sme-icon sme-icon-up\"></span>\r\n </button>\r\n <button *ngIf=\"showMove\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.demoteButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.demoteButtonTooltip\" (click)=\"moveDown(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"demote-button\">\r\n <span class=\"sme-icon sme-icon-down\"></span>\r\n </button>\r\n <button *ngIf=\"getShowRemove(item, i)\" type=\"button\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-form-field-height sme-padding-horizontal-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.removeButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.removeButtonTooltip\" (click)=\"delete(item)\"\r\n [smeDisabled]=\"loadingOrDisabled\" data-uta-id=\"remove-button\">\r\n <span class=\"sme-icon sme-icon-delete sme-color-red\"></span>\r\n </button>\r\n </sme-panel-control>\r\n <span class=\"sme-screen-reader\" [id]=\"getItemAriaId(i, 'item')\">{{itemTitle}}</span>\r\n <fieldset [attr.aria-labelledby]=\"getItemAriaId(i, 'item')\"\r\n class=\"sme-arrange-stack-h sme-margin-bottom-lg sme-array-item\"\r\n [class.sme-subform-indent-none]=\"orientation==='horizontal'\">\r\n <div class=\"sme-position-flex-auto sme-padding-inset-md\" [id]=\"getItemAriaId(i, 'itemContainer')\">\r\n <ng-container smeTemplateOutlet [template]=\"itemTemplate\" [data]=\"item\" hostDataName=\"context\"\r\n [hostData]=\"{index: i, ariaLabelId: getItemAriaId(i, 'item')}\"></ng-container>\r\n </div>\r\n </fieldset>\r\n </sme-accordion-panel>\r\n </sme-accordion>\r\n <button #addButton *ngIf=\"showAdd\" type=\"button\" data-uta-id=\"add-button\"\r\n [smeDisabled]=\"loadingOrDisabled || (maxItems !== -1 && value.length >= maxItems)\"\r\n class=\"sme-button-trigger sme-button-auto-width sme-icon sme-icon-add sme-margin-bottom-xs\"\r\n [attr.aria-label]=\"strings.MsftSmeShell.Angular.Form.Array.addButtonAriaLabel\"\r\n [title]=\"strings.MsftSmeShell.Angular.Form.Array.addButtonTooltip\" (click)=\"add()\">{{addButtonText}}</button>\r\n </div>\r\n <sme-validation-alert [alert]=\"alert\"></sme-validation-alert>\r\n <div class=\"sme-screen-reader\" aria-live=\"assertive\" aria-relevant=\"all\">{{screenReaderEvent}}</div>\r\n</sme-form-field-layout>\r\n" }]
}], function () { return [{ type: i0.Injector }, { type: i6.ArrayFormFieldAccessibilityManagerService }]; }, { subFieldIsolator: [{
type: ContentChild,
args: [FormFieldIsolatorComponent, { static: true }]
}], askForNewItem: [{
type: Output
}], askForItemHeader: [{
type: Output
}], askForRemoveEvaluator: [{
type: Output
}], adjustControlButtonLocation: [{
type: Input
}], newItem: [{
type: Input
}], showAdd: [{
type: Input
}], showRemove: [{
type: Input
}], showMove: [{
type: Input
}], canCloseAll: [{
type: Input
}], canCloseAny: [{
type: Input
}], canOpenMultiple: [{
type: Input
}], maxItems: [{
type: Input
}], addButtonText: [{
type: Input
}], headerTemplate: [{
type: Input
}], itemTitle: [{
type: Input
}], ariaLabel: [{
type: HostBinding,
args: ['attr.aria-label']
}], addButton: [{
type: ViewChild,
args: ['addButton']
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9hbmd1bGFyL3NyYy9jb250cm9scy9mb3JtL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RyxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBYyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBMkJqRywyQ0FDK0Q7Ozs7SUFEeEMsMkRBQXNDLDJCQUFBLGtCQUFBOzs7Ozs7SUM1Qy9ELDRCQUNzRjs7Ozs7O0lBRC9CLGdEQUEyQixpQkFBQSx3RkFBQTs7OztJQUVsRixrQ0FJaUU7SUFEUSw0T0FBUyxlQUFBLHNCQUFZLENBQUEsSUFBQztJQUU3RiwyQkFBMEM7SUFDNUMsaUJBQVM7OztJQUhQLDJGQUFzRSx5Q0FBQTtJQUR0RSxtR0FBa0Y7Ozs7SUFLcEYsa0NBSWdFO0lBRFEsNk9BQVMsZUFBQSx5QkFBYyxDQUFBLElBQUM7SUFFOUYsMkJBQTRDO0lBQzlDLGlCQUFTOzs7SUFIUCwwRkFBcUUseUNBQUE7SUFEckUsa0dBQWlGOzs7O0lBS25GLGtDQUlnRTtJQURRLDZPQUFTLGVBQUEsdUJBQVksQ0FBQSxJQUFDO0lBRTVGLDJCQUE0RDtJQUM5RCxpQkFBUzs7O0lBSFAsMEZBQXFFLHlDQUFBO0lBRHJFLGtHQUFpRjs7O0lBcEJ2Riw4Q0FBeUssd0JBQUE7SUFFckssZ0hBQ3NGO0lBQ3RGLG9HQU1TO0lBQ1QscUdBTVM7SUFDVCxxR0FNUztJQUNYLGlCQUFvQjtJQUNwQixnQ0FBZ0U7SUFBQSxZQUFhO0lBQUEsaUJBQU87SUFDcEYsb0NBRStELGNBQUE7SUFFM0QsNkJBQ2dGO0lBQ2xGLGlCQUFNLEVBQUEsRUFBQTs7Ozs7SUFqQ3FELDJEQUFnQyx1QkFBQTtJQUF3Qiw4REFBaUQ7SUFFckosZUFBb0I7SUFBcEIsNENBQW9CO0lBRTFCLGVBQWM7SUFBZCxzQ0FBYztJQU9kLGVBQWM7SUFBZCxzQ0FBYztJQU9kLGVBQTRCO0lBQTVCLDBEQUE0QjtJQVFQLGVBQStCO0lBQS9CLHVEQUErQjtJQUFDLGVBQWE7SUFBYixzQ0FBYTtJQUczRSxlQUE0RDtJQUE1RCw4RUFBNEQ7SUFGcEQscUVBQWlEO0lBR0EsZUFBd0M7SUFBeEMsZ0VBQXdDO0lBQy9ELGVBQXlCO0lBQXpCLDhDQUF5QixpQkFBQSxtRkFBQTs7OztJQU1qRSxzQ0FJcUY7SUFBaEIseUtBQVMsZUFBQSxhQUFLLENBQUEsSUFBQztJQUFDLFlBQWlCO0lBQUEsaUJBQVM7OztJQUg3RywwSEFBa0YsMEVBQUE7SUFFbEYsK0ZBQThFO0lBQ0ssZUFBaUI7SUFBakIsMENBQWlCOztBRFIxRyw0QkFBNEI7QUFvQjVCLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSx1Q0FBdUM7SUFJL0UsYUFBYSxDQUFDLE1BQU07UUFDdkIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekYsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVNLGlDQUFpQztRQUNwQyxNQUFNLGtCQUFrQixHQUF5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztRQUMxRSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLGtCQUFrQixDQUFDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUN0RSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQzthQUN4RDtZQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlFLElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO29CQUN4RixNQUFNLEdBQUcsSUFBSSxDQUFDO29CQUNkLE1BQU07aUJBQ1Q7YUFDSjtTQUNKO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQzs7d1VBekJRLDZCQUE2QixTQUE3Qiw2QkFBNkI7K0dBQTdCLDZCQUE2Qjs7Ozs7O1FBakJ0Qyw0Q0FRSztRQVIrQiw2SkFBa0IsMkhBQ3lELHlCQUFxQixJQUQ5RSw2SEFHaEMsd0RBQWdELFFBQVEsSUFIeEIsbUxBSWEscUVBQTZELFFBQVEsSUFKbEY7UUFTbEQsMkZBR2M7UUFDbEIsaUJBQWlCOztRQWJtQixrQ0FBa0IsaUNBQUEsaURBQUEseUNBQUEsNkRBQUEsd0VBQUEscUlBQUEsNEVBQUEsa0lBQUE7Z0lBMkQ3Qyx1QkFBdUI7dUZBMUN2Qiw2QkFBNkI7Y0FuQnpDLFNBQVM7ZUFBQztnQkFDUCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7OztLQWVUO2FBQ0o7Z0JBSVcsdUJBQXVCO2tCQUQ5QixTQUFTO21CQUFDLE9BQU87O0FBMkJ0Qjs7R0FFRztBQVlJLElBQU0sdUJBQXVCLEdBQTdCLE1BQU0sdUJBQXdCLFNBQVEsNkJBQW9DO0lBcUg3RTs7T0FFRztJQUNILFlBQ0ksUUFBa0IsRUFDUix5Q0FBb0Y7UUFFOUYsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRk4sOENBQXlDLEdBQXpDLHlDQUF5QyxDQUEyQztRQS9GbEc7O1dBRUc7UUFFSSxrQkFBYSxHQUF5QyxJQUFJLFlBQVksRUFBMEIsQ0FBQztRQUV4Ryw4RUFBOEU7UUFFdkUscUJBQWdCLEdBQXVDLElBQUksWUFBWSxFQUF3QixDQUFDO1FBRXZHLDJHQUEyRztRQUVwRywwQkFBcUIsR0FBMkMsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFFcEg7O1dBRUc7UUFFSSxnQ0FBMkIsR0FBRyxLQUFLLENBQUM7UUFnRnZDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBYSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDakcsSUFBSSxDQUFDLFVBQVUsR0FBYSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQVEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQXBJRDs7T0FFRztJQUNILElBQWMsYUFBYTtRQUN2QixPQUFPLHlCQUF5QixDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsWUFBWTtRQUNuQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUU7WUFDakUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUM7U0FDakQ7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQTBFRCxJQUNXLFNBQVMsQ0FBQyxLQUFhO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxLQUFLLE1BQU0sQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBOEJEOztPQUVHO0lBQ0ksUUFBUTtRQUNYLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFrQixFQUFFLEVBQUU7Z0JBQ2pFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ3hDO2dCQUVELElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtvQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDdEM7Z0JBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO29CQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDeEM7Z0JBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNsRCxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ1g7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyx1QkFBdUIsQ0FBQyxLQUFhO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2xHLENBQUM7SUFFRDs7T0FFRztJQUNJLEdBQUc7UUFDTixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxJQUFTO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUU3RixJQUFJLENBQUMseUNBQXlDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEcsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLElBQVM7UUFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRTlGLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQy9GO2FBQU07WUFDSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztTQUMxRztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxJQUFTO1FBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQixNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFFN0YsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDOUY7YUFBTTtZQUNILElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQ3pHO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksa0JBQWtCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sYUFBYSxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQzlDLFFBQVEsTUFBTSxFQUFFO1lBQ1osS0FBSyxNQUFNO2dCQUNQLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQzVDLEtBQUssWUFBWTtnQkFDYixPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxLQUFLLEVBQUUsQ0FBQztZQUNuRCxLQUFLLGVBQWU7Z0JBQ2hCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEtBQUssRUFBRSxDQUFDO1lBQ3RELE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDO1NBQ3hCO0lBQ0wsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFTLEVBQUUsS0FBYTtRQUN4QyxNQUFNLEtBQUssR0FBeUIsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQyxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRU0sYUFBYSxDQUFDLElBQVMsRUFBRSxLQUFhO1FBQ3pDLE1BQU0sS0FBSyxHQUE2QixFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXZDLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDdEYsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFFBQVEsQ0FBQyxDQUFjO1FBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUM3QjtZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDcEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUM3QjtTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO1lBQ3pELE9BQU87Z0JBQ0gsZUFBZSxFQUFFO29CQUNiLE1BQU0sRUFBRSxJQUFJO2lCQUNmO2FBQ0osQ0FBQztTQUNMO1FBRUQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7SUFDTyxXQUFXO1FBQ2pCLE9BQU87WUFDSCxHQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFDdkIsV0FBVyxFQUFFLEVBQUU7WUFDZixJQUFJLEVBQUUsRUFBRTtTQUNYLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVO1FBQ2QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN6QzthQUFNO1lBQ0gsTUFBTSxLQUFLLEdBQTJCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDOztpSEF4VFEsdUJBQXVCO3lHQUF2Qix1QkFBdUI7b0NBd0JsQiwwQkFBMEI7Ozs7Ozs7Ozs7OztRQzFINUMsZ0RBQTBDLGFBQUEsdUJBQUE7UUFHcEMsMEdBbUNzQjtRQUN4QixpQkFBZ0I7UUFDaEIsOEVBSStHO1FBQ2pILGlCQUFNO1FBQ04sMENBQTZEO1FBQzdELDhCQUF5RTtRQUFBLFlBQXFCO1FBQUEsaUJBQU0sRUFBQTs7UUEvQy9FLCtCQUFrQjtRQUV0QixlQUEyQjtRQUEzQiw2Q0FBMkIsZ0NBQUEsd0NBQUE7UUFDRixlQUFVO1FBQVYsbUNBQVU7UUFxQzlCLGVBQWE7UUFBYixrQ0FBYTtRQU1iLGVBQWU7UUFBZixpQ0FBZTtRQUNvQyxlQUFxQjtRQUFyQiwyQ0FBcUI7O0FEbURuRix1QkFBdUI7SUFYbkMsaUJBQWlCLENBQUM7UUFDZixJQUFJLEVBQUUsbUJBQW1CLENBQUMsS0FBSztRQUMvQixNQUFNLEVBQUUsYUFBYTtRQUNyQixlQUFlLEVBQUUsSUFBSTtRQUNyQixXQUFXLEVBQUUsNkNBQTZDO1FBQzFELGVBQWUsRUFBRSw2QkFBNkI7S0FDakQsQ0FBQztxQ0E4SGdCLFFBQVE7UUFDbUMseUNBQXlDO0dBMUh6Rix1QkFBdUIsQ0F5VG5DO1NBelRZLHVCQUF1Qjt1RkFBdkIsdUJBQXVCO2NBSm5DLFNBQVM7MkJBQ0ksOEJBQThCO21IQTRCakMsZ0JBQWdCO2tCQUR0QixZQUFZO21CQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQU9uRCxhQUFhO2tCQURuQixNQUFNO1lBS0EsZ0JBQWdCO2tCQUR0QixNQUFNO1lBS0EscUJBQXFCO2tCQUQzQixNQUFNO1lBT0EsMkJBQTJCO2tCQURqQyxLQUFLO1lBT0MsT0FBTztrQkFEYixLQUFLO1lBT0MsT0FBTztrQkFEYixLQUFLO1lBT0MsVUFBVTtrQkFEaEIsS0FBSztZQU9DLFFBQVE7a0JBRGQsS0FBSztZQUlDLFdBQVc7a0JBRGpCLEtBQUs7WUFJQyxXQUFXO2tCQURqQixLQUFLO1lBSUMsZUFBZTtrQkFEckIsS0FBSztZQU9DLFFBQVE7a0JBRGQsS0FBSztZQUlDLGFBQWE7a0JBRG5CLEtBQUs7WUFJQyxjQUFjO2tCQURwQixLQUFLO1lBSUssU0FBUztrQkFEbkIsS0FBSztZQWFLLFNBQVM7a0JBRG5CLFdBQVc7bUJBQUMsaUJBQWlCO1lBV3RCLFNBQVM7a0JBRGhCLFNBQVM7bUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb250ZW50Q2hpbGQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN0cmluZ3MgfSBmcm9tICcuLi8uLi8uLi8uLi9nZW5lcmF0ZWQvc3RyaW5ncyc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25BbGVydHMgfSBmcm9tICcuLi8uLi8uLi9mb3JtL3ZhbGlkYXRpb24tYWxlcnQvdmFsaWRhdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNtZVNjaGVtYVByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vc2NoZW1hL3NjaGVtYS1kZWNvcmF0b3InO1xyXG5pbXBvcnQgeyBBcnJheVByb3BlcnR5U2NoZW1hRmllbGRMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLWZpZWxkLWhvc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2NoZW1hT2JqZWN0UHJvcGVydHksIFNjaGVtYVByaW1pdGl2ZVR5cGUgfSBmcm9tICcuLi8uLi8uLi9zY2hlbWEvc2NoZW1hLW1vZGVscyc7XHJcbmltcG9ydCB7IFNjaGVtYVV0aWxpdGllcyB9IGZyb20gJy4uLy4uLy4uL3NjaGVtYS9zY2hlbWEtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgU21lSW50ZXJuYWxGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZElzb2xhdG9yQ29tcG9uZW50LCBGb3JtU3RhdHVzIH0gZnJvbSAnLi4vaXNvbGF0b3IvaXNvbGF0b3IuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXJyYXlGb3JtRmllbGRBY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2UgfSBmcm9tICcuL2FycmF5LWZvcm0tZmllbGQtYWNjZXNzaWJpbGl0eS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JOZXdJdGVtRXZlbnRBcmdzIHtcclxuICAgIGl0ZW06IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JJdGVtSGVhZGVyQXJncyB7XHJcbiAgICBoZWFkZXJFdmFsRnVuYzogTXNmdFNtZS5GdW5jMjxhbnksIG51bWJlciwgc3RyaW5nPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBc2tGb3JSZW1vdmVFdmFsRnVuY0FyZ3Mge1xyXG4gICAgcmVtb3ZlRXZhbEZ1bmM6IE1zZnRTbWUuRnVuYzI8YW55LCBudW1iZXIsIGJvb2xlYW4+O1xyXG59XHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxzbWUtZm9ybS1maWVsZCAjZmllbGQgdHlwZT1cImFycmF5XCIgWyhuZ01vZGVsKV09XCJkYXRhXCIgW25hbWVdPVwicHJvcGVydHlTY2hlbWEubmFtZVwiIFtsYWJlbF09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5sYWJlbClcIlxyXG4gICAgICAgIFtyZXF1aXJlZF09XCJwcm9wZXJ0eVNjaGVtYS5yZXF1aXJlZFwiIFtkZXNjcmlwdGlvbl09XCJsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5kZXNjcmlwdGlvbilcIiAoYXNrRm9yTmV3SXRlbSk9XCJhc2tGb3JOZXdJdGVtKCRldmVudClcIlxyXG4gICAgICAgIFthZGp1c3RDb250cm9sQnV0dG9uTG9jYXRpb25dPVwic2hvdWxkQWRqdXN0Q29udHJvbEJ1dHRvbkxvY2F0aW9uKClcIlxyXG4gICAgICAgIChjdXN0b21WYWxpZGF0ZSk9XCJyZXNvbHZlRnVuY3Rpb24ocHJvcGVydHlTY2hlbWEuY3VzdG9tVmFsaWRhdGlvbikoJGV2ZW50KVwiXHJcbiAgICAgICAgKGN1c3RvbUFzeW5jVmFsaWRhdGUpPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmIHJlc29sdmVGdW5jdGlvbihwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlcikoJGV2ZW50KVwiXHJcbiAgICAgICAgW3BlbmRpbmdNZXNzYWdlXT1cInByb3BlcnR5U2NoZW1hLmN1c3RvbUFzeW5jVmFsaWRhdGlvbiAmJiBsb2NhbGl6ZShwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24ucGVuZGluZ01lc3NhZ2UpXCJcclxuICAgICAgICBbY3VzdG9tQXN5bmNWYWxpZGF0ZURpc2FibGVkXT1cInNob3VsZEN1c3RvbUFzeW5jVmFsaWRhdGlvbkJlRGlzYWJsZWQoKVwiXHJcbiAgICAgICAgW2N1c3RvbUFzeW5jVmFsaWRhdGVEZWJvdW5jZVRpbWVdPVwicHJvcGVydHlTY2hlbWEuY3VzdG9tQXN5bmNWYWxpZGF0aW9uICYmICtwcm9wZXJ0eVNjaGVtYS5jdXN0b21Bc3luY1ZhbGlkYXRpb24uaGFuZGxlclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbW9kZWw+XHJcbiAgICAgICAgICAgIDxzbWUtc