@syncfusion/ej2-angular-spreadsheet
Version:
Feature-rich JavaScript Spreadsheet (Excel) control with built-in support for selection, editing, formatting, importing and exporting to Excel for Angular
181 lines • 32.2 kB
JavaScript
import { __decorate } from "tslib";
import { Component, ChangeDetectionStrategy, ContentChild } from '@angular/core';
import { ComponentBase, ComponentMixins, setValue } from '@syncfusion/ej2-angular-base';
import { Spreadsheet } from '@syncfusion/ej2-spreadsheet';
import { Template } from '@syncfusion/ej2-angular-base';
import { SheetsDirective } from './sheets.directive';
import { DefinedNamesDirective } from './definednames.directive';
import * as i0 from "@angular/core";
export const inputs = ['activeSheetIndex', 'allowAutoFill', 'allowCellFormatting', 'allowChart', 'allowConditionalFormat', 'allowDataValidation', 'allowDelete', 'allowEditing', 'allowFiltering', 'allowFindAndReplace', 'allowFreezePane', 'allowHyperlink', 'allowImage', 'allowInsert', 'allowMerge', 'allowNumberFormatting', 'allowOpen', 'allowPrint', 'allowResizing', 'allowSave', 'allowScrolling', 'allowSorting', 'allowUndoRedo', 'allowWrap', 'autoFillSettings', 'calculationMode', 'cellStyle', 'cssClass', 'currencyCode', 'definedNames', 'enableClipboard', 'enableContextMenu', 'enableKeyboardNavigation', 'enableKeyboardShortcut', 'enableNotes', 'enablePersistence', 'enableRtl', 'height', 'isProtected', 'listSeparator', 'locale', 'openSettings', 'openUrl', 'password', 'saveUrl', 'scrollSettings', 'selectionSettings', 'sheets', 'showAggregate', 'showFormulaBar', 'showRibbon', 'showSheetTabs', 'width'];
export const outputs = ['actionBegin', 'actionComplete', 'afterHyperlinkClick', 'afterHyperlinkCreate', 'beforeCellFormat', 'beforeCellRender', 'beforeCellSave', 'beforeCellUpdate', 'beforeConditionalFormat', 'beforeDataBound', 'beforeHyperlinkClick', 'beforeHyperlinkCreate', 'beforeOpen', 'beforeSave', 'beforeSelect', 'beforeSort', 'cellEdit', 'cellEdited', 'cellEditing', 'cellSave', 'contextMenuBeforeClose', 'contextMenuBeforeOpen', 'contextMenuItemSelect', 'created', 'dataBound', 'dataSourceChanged', 'dialogBeforeOpen', 'fileMenuBeforeClose', 'fileMenuBeforeOpen', 'fileMenuItemSelect', 'openComplete', 'openFailure', 'queryCellInfo', 'saveComplete', 'select', 'sortComplete'];
export const twoWays = [''];
/**
* `ejs-spreadsheet` represents the Angular Spreadsheet Component.
* ```html
* <ejs-spreadsheet></ejs-spreadsheet>
* ```
*/
let SpreadsheetComponent = class SpreadsheetComponent extends Spreadsheet {
constructor(ngEle, srenderer, viewContainerRef, injector) {
super();
this.ngEle = ngEle;
this.srenderer = srenderer;
this.viewContainerRef = viewContainerRef;
this.injector = injector;
this.tags = ['sheets', 'definedNames'];
this.element = this.ngEle.nativeElement;
this.injectedModules = this.injectedModules || [];
try {
let mod = this.injector.get('SpreadsheetClipboard');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetEdit');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetKeyboardNavigation');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetKeyboardShortcut');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetSelection');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetContextMenu');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetFormulaBar');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetRibbon');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetSave');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetOpen');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetSheetTabs');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetDataBind');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetCellFormat');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetNumberFormat');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
try {
let mod = this.injector.get('SpreadsheetFormula');
if (this.injectedModules.indexOf(mod) === -1) {
this.injectedModules.push(mod);
}
}
catch { }
this.registerEvents(outputs);
this.addTwoWay.call(this, twoWays);
setValue('currentInstance', this, this.viewContainerRef);
this.context = new ComponentBase();
}
ngOnInit() {
this.context.ngOnInit(this);
}
ngAfterViewInit() {
this.context.ngAfterViewInit(this);
}
ngOnDestroy() {
this.context.ngOnDestroy(this);
}
ngAfterContentChecked() {
this.tagObjects[0].instance = this.childSheets;
if (this.childDefinedNames) {
this.tagObjects[1].instance = this.childDefinedNames;
}
this.context.ngAfterContentChecked(this);
}
};
SpreadsheetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SpreadsheetComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
SpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: SpreadsheetComponent, selector: "ejs-spreadsheet", inputs: { activeSheetIndex: "activeSheetIndex", allowAutoFill: "allowAutoFill", allowCellFormatting: "allowCellFormatting", allowChart: "allowChart", allowConditionalFormat: "allowConditionalFormat", allowDataValidation: "allowDataValidation", allowDelete: "allowDelete", allowEditing: "allowEditing", allowFiltering: "allowFiltering", allowFindAndReplace: "allowFindAndReplace", allowFreezePane: "allowFreezePane", allowHyperlink: "allowHyperlink", allowImage: "allowImage", allowInsert: "allowInsert", allowMerge: "allowMerge", allowNumberFormatting: "allowNumberFormatting", allowOpen: "allowOpen", allowPrint: "allowPrint", allowResizing: "allowResizing", allowSave: "allowSave", allowScrolling: "allowScrolling", allowSorting: "allowSorting", allowUndoRedo: "allowUndoRedo", allowWrap: "allowWrap", autoFillSettings: "autoFillSettings", calculationMode: "calculationMode", cellStyle: "cellStyle", cssClass: "cssClass", currencyCode: "currencyCode", definedNames: "definedNames", enableClipboard: "enableClipboard", enableContextMenu: "enableContextMenu", enableKeyboardNavigation: "enableKeyboardNavigation", enableKeyboardShortcut: "enableKeyboardShortcut", enableNotes: "enableNotes", enablePersistence: "enablePersistence", enableRtl: "enableRtl", height: "height", isProtected: "isProtected", listSeparator: "listSeparator", locale: "locale", openSettings: "openSettings", openUrl: "openUrl", password: "password", saveUrl: "saveUrl", scrollSettings: "scrollSettings", selectionSettings: "selectionSettings", sheets: "sheets", showAggregate: "showAggregate", showFormulaBar: "showFormulaBar", showRibbon: "showRibbon", showSheetTabs: "showSheetTabs", width: "width" }, outputs: { actionBegin: "actionBegin", actionComplete: "actionComplete", afterHyperlinkClick: "afterHyperlinkClick", afterHyperlinkCreate: "afterHyperlinkCreate", beforeCellFormat: "beforeCellFormat", beforeCellRender: "beforeCellRender", beforeCellSave: "beforeCellSave", beforeCellUpdate: "beforeCellUpdate", beforeConditionalFormat: "beforeConditionalFormat", beforeDataBound: "beforeDataBound", beforeHyperlinkClick: "beforeHyperlinkClick", beforeHyperlinkCreate: "beforeHyperlinkCreate", beforeOpen: "beforeOpen", beforeSave: "beforeSave", beforeSelect: "beforeSelect", beforeSort: "beforeSort", cellEdit: "cellEdit", cellEdited: "cellEdited", cellEditing: "cellEditing", cellSave: "cellSave", contextMenuBeforeClose: "contextMenuBeforeClose", contextMenuBeforeOpen: "contextMenuBeforeOpen", contextMenuItemSelect: "contextMenuItemSelect", created: "created", dataBound: "dataBound", dataSourceChanged: "dataSourceChanged", dialogBeforeOpen: "dialogBeforeOpen", fileMenuBeforeClose: "fileMenuBeforeClose", fileMenuBeforeOpen: "fileMenuBeforeOpen", fileMenuItemSelect: "fileMenuItemSelect", openComplete: "openComplete", openFailure: "openFailure", queryCellInfo: "queryCellInfo", saveComplete: "saveComplete", select: "select", sortComplete: "sortComplete" }, queries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true }, { propertyName: "childSheets", first: true, predicate: SheetsDirective, descendants: true }, { propertyName: "childDefinedNames", first: true, predicate: DefinedNamesDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
__decorate([
Template()
], SpreadsheetComponent.prototype, "template", void 0);
SpreadsheetComponent = __decorate([
ComponentMixins([ComponentBase])
], SpreadsheetComponent);
export { SpreadsheetComponent };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: SpreadsheetComponent, decorators: [{
type: Component,
args: [{
selector: 'ejs-spreadsheet',
inputs: inputs,
outputs: outputs,
template: '',
changeDetection: ChangeDetectionStrategy.OnPush,
queries: {
childSheets: new ContentChild(SheetsDirective),
childDefinedNames: new ContentChild(DefinedNamesDirective)
}
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i0.Injector }]; }, propDecorators: { template: [{
type: ContentChild,
args: ['template']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByZWFkc2hlZXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NwcmVhZHNoZWV0L3NwcmVhZHNoZWV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZ0MsdUJBQXVCLEVBQWlELFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5SixPQUFPLEVBQUUsYUFBYSxFQUErQixlQUFlLEVBQTBCLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdJLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUVqRSxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQWEsQ0FBQyxrQkFBa0IsRUFBQyxlQUFlLEVBQUMscUJBQXFCLEVBQUMsWUFBWSxFQUFDLHdCQUF3QixFQUFDLHFCQUFxQixFQUFDLGFBQWEsRUFBQyxjQUFjLEVBQUMsZ0JBQWdCLEVBQUMscUJBQXFCLEVBQUMsaUJBQWlCLEVBQUMsZ0JBQWdCLEVBQUMsWUFBWSxFQUFDLGFBQWEsRUFBQyxZQUFZLEVBQUMsdUJBQXVCLEVBQUMsV0FBVyxFQUFDLFlBQVksRUFBQyxlQUFlLEVBQUMsV0FBVyxFQUFDLGdCQUFnQixFQUFDLGNBQWMsRUFBQyxlQUFlLEVBQUMsV0FBVyxFQUFDLGtCQUFrQixFQUFDLGlCQUFpQixFQUFDLFdBQVcsRUFBQyxVQUFVLEVBQUMsY0FBYyxFQUFDLGNBQWMsRUFBQyxpQkFBaUIsRUFBQyxtQkFBbUIsRUFBQywwQkFBMEIsRUFBQyx3QkFBd0IsRUFBQyxhQUFhLEVBQUMsbUJBQW1CLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxhQUFhLEVBQUMsZUFBZSxFQUFDLFFBQVEsRUFBQyxjQUFjLEVBQUMsU0FBUyxFQUFDLFVBQVUsRUFBQyxTQUFTLEVBQUMsZ0JBQWdCLEVBQUMsbUJBQW1CLEVBQUMsUUFBUSxFQUFDLGVBQWUsRUFBQyxnQkFBZ0IsRUFBQyxZQUFZLEVBQUMsZUFBZSxFQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ24yQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQWEsQ0FBQyxhQUFhLEVBQUMsZ0JBQWdCLEVBQUMscUJBQXFCLEVBQUMsc0JBQXNCLEVBQUMsa0JBQWtCLEVBQUMsa0JBQWtCLEVBQUMsZ0JBQWdCLEVBQUMsa0JBQWtCLEVBQUMseUJBQXlCLEVBQUMsaUJBQWlCLEVBQUMsc0JBQXNCLEVBQUMsdUJBQXVCLEVBQUMsWUFBWSxFQUFDLFlBQVksRUFBQyxjQUFjLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxZQUFZLEVBQUMsYUFBYSxFQUFDLFVBQVUsRUFBQyx3QkFBd0IsRUFBQyx1QkFBdUIsRUFBQyx1QkFBdUIsRUFBQyxTQUFTLEVBQUMsV0FBVyxFQUFDLG1CQUFtQixFQUFDLGtCQUFrQixFQUFDLHFCQUFxQixFQUFDLG9CQUFvQixFQUFDLG9CQUFvQixFQUFDLGNBQWMsRUFBQyxhQUFhLEVBQUMsZUFBZSxFQUFDLGNBQWMsRUFBQyxRQUFRLEVBQUMsY0FBYyxDQUFDLENBQUM7QUFDcnBCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXRDOzs7OztHQUtHO0lBYVUsb0JBQW9CLFNBQXBCLG9CQUFxQixTQUFRLFdBQVc7SUE4Q2pELFlBQW9CLEtBQWlCLEVBQVUsU0FBb0IsRUFBVSxnQkFBaUMsRUFBVSxRQUFrQjtRQUN0SSxLQUFLLEVBQUUsQ0FBQztRQURRLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFMbkksU0FBSSxHQUFhLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBTy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDeEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztRQUNsRCxJQUFJO1lBQ0ksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUNwRCxJQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNqQztTQUNKO1FBQUMsTUFBTSxHQUFHO1FBRWYsSUFBSTtZQUNJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDL0MsSUFBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDakM7U0FDSjtRQUFDLE1BQU0sR0FBRztRQUVmLElBQUk7WUFDSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1lBQzdELElBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQ2pDO1NBQ0o7UUFBQyxNQUFNLEdBQUc7UUFFZixJQUFJO1lBQ0ksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUMzRCxJQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNqQztTQUNKO1FBQUMsTUFBTSxHQUFHO1FBRWYsSUFBSTtZQUNJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDcEQsSUFBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDakM7U0FDSjtRQUFDLE1BQU0sR0FBRztRQUVmLElBQUk7WUFDSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQ3RELElBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQ2pDO1NBQ0o7UUFBQyxNQUFNLEdBQUc7UUFFZixJQUFJO1lBQ0ksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNyRCxJQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNqQztTQUNKO1FBQUMsTUFBTSxHQUFHO1FBRWYsSUFBSTtZQUNJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDakQsSUFBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDakM7U0FDSjtRQUFDLE1BQU0sR0FBRztRQUVmLElBQUk7WUFDSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQy9DLElBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQ2pDO1NBQ0o7UUFBQyxNQUFNLEdBQUc7UUFFZixJQUFJO1lBQ0ksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMvQyxJQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNqQztTQUNKO1FBQUMsTUFBTSxHQUFHO1FBRWYsSUFBSTtZQUNJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDcEQsSUFBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDakM7U0FDSjtRQUFDLE1BQU0sR0FBRztRQUVmLElBQUk7WUFDSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ25ELElBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQ2pDO1NBQ0o7UUFBQyxNQUFNLEdBQUc7UUFFZixJQUFJO1lBQ0ksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNyRCxJQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNqQztTQUNKO1FBQUMsTUFBTSxHQUFHO1FBRWYsSUFBSTtZQUNJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDdkQsSUFBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDakM7U0FDSjtRQUFDLE1BQU0sR0FBRztRQUVmLElBQUk7WUFDSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ2xELElBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQ2pDO1NBQ0o7UUFBQyxNQUFNLEdBQUc7UUFFZixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxPQUFPLEdBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU0sUUFBUTtRQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLHFCQUFxQjtRQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBd0IsQ0FBQztTQUMvRDtRQUNULElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUlKLENBQUE7aUhBdkxZLG9CQUFvQjtxR0FBcEIsb0JBQW9CLHNqR0FMSyxlQUFlLG9GQUNULHFCQUFxQix1RUFKbkQsRUFBRTtBQW9EWjtJQURDLFFBQVEsRUFBRTtzREFDVTtBQTVDWixvQkFBb0I7SUFEaEMsZUFBZSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7R0FDcEIsb0JBQW9CLENBdUxoQztTQXZMWSxvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFaaEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixNQUFNLEVBQUUsTUFBTTtvQkFDZCxPQUFPLEVBQUUsT0FBTztvQkFDaEIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRTt3QkFDTCxXQUFXLEVBQUUsSUFBSSxZQUFZLENBQUMsZUFBZSxDQUFDO3dCQUM5QyxpQkFBaUIsRUFBRSxJQUFJLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztxQkFDN0Q7aUJBQ0o7K0tBOENVLFFBQVE7c0JBRmQsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q29udGFpbmVyUmVmLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIEluamVjdG9yLCBWYWx1ZVByb3ZpZGVyLCBDb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2UsIElDb21wb25lbnRCYXNlLCBhcHBseU1peGlucywgQ29tcG9uZW50TWl4aW5zLCBQcm9wZXJ0eUNvbGxlY3Rpb25JbmZvLCBzZXRWYWx1ZSB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWJhc2UnO1xuaW1wb3J0IHsgU3ByZWFkc2hlZXQgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItc3ByZWFkc2hlZXQnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYW5ndWxhci1iYXNlJztcbmltcG9ydCB7IFNoZWV0c0RpcmVjdGl2ZSB9IGZyb20gJy4vc2hlZXRzLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEZWZpbmVkTmFtZXNEaXJlY3RpdmUgfSBmcm9tICcuL2RlZmluZWRuYW1lcy5kaXJlY3RpdmUnO1xuXG5leHBvcnQgY29uc3QgaW5wdXRzOiBzdHJpbmdbXSA9IFsnYWN0aXZlU2hlZXRJbmRleCcsJ2FsbG93QXV0b0ZpbGwnLCdhbGxvd0NlbGxGb3JtYXR0aW5nJywnYWxsb3dDaGFydCcsJ2FsbG93Q29uZGl0aW9uYWxGb3JtYXQnLCdhbGxvd0RhdGFWYWxpZGF0aW9uJywnYWxsb3dEZWxldGUnLCdhbGxvd0VkaXRpbmcnLCdhbGxvd0ZpbHRlcmluZycsJ2FsbG93RmluZEFuZFJlcGxhY2UnLCdhbGxvd0ZyZWV6ZVBhbmUnLCdhbGxvd0h5cGVybGluaycsJ2FsbG93SW1hZ2UnLCdhbGxvd0luc2VydCcsJ2FsbG93TWVyZ2UnLCdhbGxvd051bWJlckZvcm1hdHRpbmcnLCdhbGxvd09wZW4nLCdhbGxvd1ByaW50JywnYWxsb3dSZXNpemluZycsJ2FsbG93U2F2ZScsJ2FsbG93U2Nyb2xsaW5nJywnYWxsb3dTb3J0aW5nJywnYWxsb3dVbmRvUmVkbycsJ2FsbG93V3JhcCcsJ2F1dG9GaWxsU2V0dGluZ3MnLCdjYWxjdWxhdGlvbk1vZGUnLCdjZWxsU3R5bGUnLCdjc3NDbGFzcycsJ2N1cnJlbmN5Q29kZScsJ2RlZmluZWROYW1lcycsJ2VuYWJsZUNsaXBib2FyZCcsJ2VuYWJsZUNvbnRleHRNZW51JywnZW5hYmxlS2V5Ym9hcmROYXZpZ2F0aW9uJywnZW5hYmxlS2V5Ym9hcmRTaG9ydGN1dCcsJ2VuYWJsZU5vdGVzJywnZW5hYmxlUGVyc2lzdGVuY2UnLCdlbmFibGVSdGwnLCdoZWlnaHQnLCdpc1Byb3RlY3RlZCcsJ2xpc3RTZXBhcmF0b3InLCdsb2NhbGUnLCdvcGVuU2V0dGluZ3MnLCdvcGVuVXJsJywncGFzc3dvcmQnLCdzYXZlVXJsJywnc2Nyb2xsU2V0dGluZ3MnLCdzZWxlY3Rpb25TZXR0aW5ncycsJ3NoZWV0cycsJ3Nob3dBZ2dyZWdhdGUnLCdzaG93Rm9ybXVsYUJhcicsJ3Nob3dSaWJib24nLCdzaG93U2hlZXRUYWJzJywnd2lkdGgnXTtcbmV4cG9ydCBjb25zdCBvdXRwdXRzOiBzdHJpbmdbXSA9IFsnYWN0aW9uQmVnaW4nLCdhY3Rpb25Db21wbGV0ZScsJ2FmdGVySHlwZXJsaW5rQ2xpY2snLCdhZnRlckh5cGVybGlua0NyZWF0ZScsJ2JlZm9yZUNlbGxGb3JtYXQnLCdiZWZvcmVDZWxsUmVuZGVyJywnYmVmb3JlQ2VsbFNhdmUnLCdiZWZvcmVDZWxsVXBkYXRlJywnYmVmb3JlQ29uZGl0aW9uYWxGb3JtYXQnLCdiZWZvcmVEYXRhQm91bmQnLCdiZWZvcmVIeXBlcmxpbmtDbGljaycsJ2JlZm9yZUh5cGVybGlua0NyZWF0ZScsJ2JlZm9yZU9wZW4nLCdiZWZvcmVTYXZlJywnYmVmb3JlU2VsZWN0JywnYmVmb3JlU29ydCcsJ2NlbGxFZGl0JywnY2VsbEVkaXRlZCcsJ2NlbGxFZGl0aW5nJywnY2VsbFNhdmUnLCdjb250ZXh0TWVudUJlZm9yZUNsb3NlJywnY29udGV4dE1lbnVCZWZvcmVPcGVuJywnY29udGV4dE1lbnVJdGVtU2VsZWN0JywnY3JlYXRlZCcsJ2RhdGFCb3VuZCcsJ2RhdGFTb3VyY2VDaGFuZ2VkJywnZGlhbG9nQmVmb3JlT3BlbicsJ2ZpbGVNZW51QmVmb3JlQ2xvc2UnLCdmaWxlTWVudUJlZm9yZU9wZW4nLCdmaWxlTWVudUl0ZW1TZWxlY3QnLCdvcGVuQ29tcGxldGUnLCdvcGVuRmFpbHVyZScsJ3F1ZXJ5Q2VsbEluZm8nLCdzYXZlQ29tcGxldGUnLCdzZWxlY3QnLCdzb3J0Q29tcGxldGUnXTtcbmV4cG9ydCBjb25zdCB0d29XYXlzOiBzdHJpbmdbXSA9IFsnJ107XG5cbi8qKlxuICogYGVqcy1zcHJlYWRzaGVldGAgcmVwcmVzZW50cyB0aGUgQW5ndWxhciBTcHJlYWRzaGVldCBDb21wb25lbnQuXG4gKiBgYGBodG1sXG4gKiA8ZWpzLXNwcmVhZHNoZWV0PjwvZWpzLXNwcmVhZHNoZWV0PlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZWpzLXNwcmVhZHNoZWV0JyxcbiAgICBpbnB1dHM6IGlucHV0cyxcbiAgICBvdXRwdXRzOiBvdXRwdXRzLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBxdWVyaWVzOiB7XG4gICAgICAgIGNoaWxkU2hlZXRzOiBuZXcgQ29udGVudENoaWxkKFNoZWV0c0RpcmVjdGl2ZSksIFxuICAgICAgICBjaGlsZERlZmluZWROYW1lczogbmV3IENvbnRlbnRDaGlsZChEZWZpbmVkTmFtZXNEaXJlY3RpdmUpXG4gICAgfVxufSlcbkBDb21wb25lbnRNaXhpbnMoW0NvbXBvbmVudEJhc2VdKVxuZXhwb3J0IGNsYXNzIFNwcmVhZHNoZWV0Q29tcG9uZW50IGV4dGVuZHMgU3ByZWFkc2hlZXQgaW1wbGVtZW50cyBJQ29tcG9uZW50QmFzZSB7XG4gICAgcHVibGljIGNvbnRleHQgOiBhbnk7XG4gICAgcHVibGljIHRhZ09iamVjdHM6IGFueTtcblx0YWN0aW9uQmVnaW46IGFueTtcblx0YWN0aW9uQ29tcGxldGU6IGFueTtcblx0YWZ0ZXJIeXBlcmxpbmtDbGljazogYW55O1xuXHRhZnRlckh5cGVybGlua0NyZWF0ZTogYW55O1xuXHRiZWZvcmVDZWxsRm9ybWF0OiBhbnk7XG5cdGJlZm9yZUNlbGxSZW5kZXI6IGFueTtcblx0YmVmb3JlQ2VsbFNhdmU6IGFueTtcblx0YmVmb3JlQ2VsbFVwZGF0ZTogYW55O1xuXHRiZWZvcmVDb25kaXRpb25hbEZvcm1hdDogYW55O1xuXHRiZWZvcmVEYXRhQm91bmQ6IGFueTtcblx0YmVmb3JlSHlwZXJsaW5rQ2xpY2s6IGFueTtcblx0YmVmb3JlSHlwZXJsaW5rQ3JlYXRlOiBhbnk7XG5cdGJlZm9yZU9wZW46IGFueTtcblx0YmVmb3JlU2F2ZTogYW55O1xuXHRiZWZvcmVTZWxlY3Q6IGFueTtcblx0YmVmb3JlU29ydDogYW55O1xuXHRjZWxsRWRpdDogYW55O1xuXHRjZWxsRWRpdGVkOiBhbnk7XG5cdGNlbGxFZGl0aW5nOiBhbnk7XG5cdGNlbGxTYXZlOiBhbnk7XG5cdGNvbnRleHRNZW51QmVmb3JlQ2xvc2U6IGFueTtcblx0Y29udGV4dE1lbnVCZWZvcmVPcGVuOiBhbnk7XG5cdGNvbnRleHRNZW51SXRlbVNlbGVjdDogYW55O1xuXHRjcmVhdGVkOiBhbnk7XG5cdGRhdGFCb3VuZDogYW55O1xuXHRkYXRhU291cmNlQ2hhbmdlZDogYW55O1xuXHRkaWFsb2dCZWZvcmVPcGVuOiBhbnk7XG5cdGZpbGVNZW51QmVmb3JlQ2xvc2U6IGFueTtcblx0ZmlsZU1lbnVCZWZvcmVPcGVuOiBhbnk7XG5cdGZpbGVNZW51SXRlbVNlbGVjdDogYW55O1xuXHRvcGVuQ29tcGxldGU6IGFueTtcblx0b3BlbkZhaWx1cmU6IGFueTtcblx0cXVlcnlDZWxsSW5mbzogYW55O1xuXHRzYXZlQ29tcGxldGU6IGFueTtcblx0c2VsZWN0OiBhbnk7XG5cdHB1YmxpYyBzb3J0Q29tcGxldGU6IGFueTtcbiAgICBwdWJsaWMgY2hpbGRTaGVldHM6IFF1ZXJ5TGlzdDxTaGVldHNEaXJlY3RpdmU+O1xuICAgIHB1YmxpYyBjaGlsZERlZmluZWROYW1lczogUXVlcnlMaXN0PERlZmluZWROYW1lc0RpcmVjdGl2ZT47XG4gICAgcHVibGljIHRhZ3M6IHN0cmluZ1tdID0gWydzaGVldHMnLCAnZGVmaW5lZE5hbWVzJ107XG4gICAgQENvbnRlbnRDaGlsZCgndGVtcGxhdGUnKVxuICAgIEBUZW1wbGF0ZSgpXG4gICAgcHVibGljIHRlbXBsYXRlOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nRWxlOiBFbGVtZW50UmVmLCBwcml2YXRlIHNyZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6Vmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gdGhpcy5uZ0VsZS5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmluamVjdGVkTW9kdWxlcyA9IHRoaXMuaW5qZWN0ZWRNb2R1bGVzIHx8IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBtb2QgPSB0aGlzLmluamVjdG9yLmdldCgnU3ByZWFkc2hlZXRDbGlwYm9hcmQnKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmluamVjdGVkTW9kdWxlcy5pbmRleE9mKG1vZCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0ZWRNb2R1bGVzLnB1c2gobW9kKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggeyB9XG5cciAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9kID0gdGhpcy5pbmplY3Rvci5nZXQoJ1NwcmVhZHNoZWV0RWRpdCcpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuaW5qZWN0ZWRNb2R1bGVzLmluZGV4T2YobW9kKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RlZE1vZHVsZXMucHVzaChtb2QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7IH1cblxyICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBtb2QgPSB0aGlzLmluamVjdG9yLmdldCgnU3ByZWFkc2hlZXRLZXlib2FyZE5hdmlnYXRpb24nKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmluamVjdGVkTW9kdWxlcy5pbmRleE9mKG1vZCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0ZWRNb2R1bGVzLnB1c2gobW9kKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggeyB9XG5cciAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9kID0gdGhpcy5pbmplY3Rvci5nZXQoJ1NwcmVhZHNoZWV0S2V5Ym9hcmRTaG9ydGN1dCcpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuaW5qZWN0ZWRNb2R1bGVzLmluZGV4T2YobW9kKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RlZE1vZHVsZXMucHVzaChtb2QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7IH1cblxyICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBtb2QgPSB0aGlzLmluamVjdG9yLmdldCgnU3ByZWFkc2hlZXRTZWxlY3Rpb24nKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmluamVjdGVkTW9kdWxlcy5pbmRleE9mKG1vZCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0ZWRNb2R1bGVzLnB1c2gobW9kKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggeyB9XG5cciAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9kID0gdGhpcy5pbmplY3Rvci5nZXQoJ1NwcmVhZHNoZWV0Q29udGV4dE1lbnUnKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmluamVjdGVkTW9kdWxlcy5pbmRleE9mKG1vZCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0ZWRNb2R1bGVzLnB1c2gobW9kKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggeyB9XG5cciAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9kID0gdGhpcy5pbmplY3Rvci5nZXQoJ1NwcmVhZHNoZWV0Rm9ybXVsYUJhcicpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuaW5qZWN0ZWRNb2R1bGVzLmluZGV4T2YobW9kKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RlZE1vZHVsZXMucHVzaChtb2QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7IH1cblxyICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBtb2QgPSB0aGlzLmluamVjdG9yLmdldCgnU3ByZWFkc2hlZXRSaWJib24nKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmluamVjdGVkTW9kdWxlcy5pbmRleE9mKG1vZCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5qZWN0ZWRNb2R1bGVzLnB1c2gobW9kKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggeyB9XG5cciAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9kID0gdGhpcy5pbmplY3Rvci5nZXQoJ1NwcmVhZHNoZWV0U2F2ZScpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuaW5qZWN0ZWRNb2R1bGVzLmluZGV4T2YobW9kKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RlZE1vZHVsZXMucHVzaChtb2QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7IH1cblxyICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBtb2QgPSB0aGlzLmluamVjdG9yLmdldCgnU3ByZWFkc2hlZXRPcGVuJyk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5pbmplY3RlZE1vZHVsZXMuaW5kZXhPZihtb2QpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdGVkTW9kdWxlcy5wdXNoKG1vZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIHsgfVxuXHIgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IG1vZCA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdTcHJlYWRzaGVldFNoZWV0VGFicycpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuaW5qZWN0ZWRNb2R1bGVzLmluZGV4T2YobW9kKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RlZE1vZHVsZXMucHVzaChtb2QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7IH1cblxyICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBtb2QgPSB0aGlzLmluamVjdG9yLmdldCgnU3ByZWFkc2hlZXREYXRhQmluZCcpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuaW5qZWN0ZWRNb2R1bGVzLmluZGV4T2YobW9kKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RlZE1vZHVsZXMucHVzaChtb2QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7IH1cblxyICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBtb2QgPSB0aGlzLmluamVjdG9yLmdldCgnU3ByZWFkc2hlZXRDZWxsRm9ybWF0Jyk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5pbmplY3RlZE1vZHVsZXMuaW5kZXhPZihtb2QpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdGVkTW9kdWxlcy5wdXNoKG1vZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIHsgfVxuXHIgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbGV0IG1vZCA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdTcHJlYWRzaGVldE51bWJlckZvcm1hdCcpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuaW5qZWN0ZWRNb2R1bGVzLmluZGV4T2YobW9kKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmplY3RlZE1vZHVsZXMucHVzaChtb2QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCB7IH1cblxyICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCBtb2QgPSB0aGlzLmluamVjdG9yLmdldCgnU3ByZWFkc2hlZXRGb3JtdWxhJyk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5pbmplY3RlZE1vZHVsZXMuaW5kZXhPZihtb2QpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdGVkTW9kdWxlcy5wdXNoKG1vZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIHsgfVxuXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50cyhvdXRwdXRzKTtcbiAgICAgICAgdGhpcy5hZGRUd29XYXkuY2FsbCh0aGlzLCB0d29XYXlzKTtcbiAgICAgICAgc2V0VmFsdWUoJ2N1cnJlbnRJbnN0YW5jZScsIHRoaXMsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIHRoaXMuY29udGV4dCAgPSBuZXcgQ29tcG9uZW50QmFzZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm5nT25Jbml0KHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGV4dC5uZ0FmdGVyVmlld0luaXQodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRleHQubmdPbkRlc3Ryb3kodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWdPYmplY3RzWzBdLmluc3RhbmNlID0gdGhpcy5jaGlsZFNoZWV0cztcbiAgICAgICAgaWYgKHRoaXMuY2hpbGREZWZpbmVkTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWdPYmplY3RzWzFdLmluc3RhbmNlID0gdGhpcy5jaGlsZERlZmluZWROYW1lcyBhcyBhbnk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHQubmdBZnRlckNvbnRlbnRDaGVja2VkKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlckV2ZW50czogKGV2ZW50TGlzdDogc3RyaW5nW10pID0+IHZvaWQ7XG4gICAgcHVibGljIGFkZFR3b1dheTogKHByb3BMaXN0OiBzdHJpbmdbXSkgPT4gdm9pZDtcbn1cblxuIl19