@firestitch/report 18.4.0 → 18.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/components/component-list/component-list.component.d.ts +3 -6
- package/app/reports/components/report-canvas/report-canvas.component.d.ts +4 -4
- package/app/reports/components/report-component/report-component.component.d.ts +5 -5
- package/app/reports/components/timezone-select/timezone-select.component.d.ts +4 -6
- package/app/reports/consts/report-week.const.d.ts +2 -0
- package/app/reports/data/report-ai-chat.data.d.ts +12 -0
- package/app/reports/data/report.data.d.ts +3 -3
- package/app/reports/dialogs/component-settings/component-settings.component.d.ts +6 -6
- package/app/reports/dialogs/global-settings/components/semantic-database/semantic-database.component.d.ts +3 -0
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +5 -0
- package/app/reports/export/report-export-collector.service.d.ts +14 -2
- package/app/reports/export/report-pdf.service.d.ts +14 -1
- package/app/reports/export/report-pptx.service.d.ts +6 -1
- package/app/reports/format.d.ts +7 -0
- package/app/reports/interfaces/report-chat-viewer-filter.interface.d.ts +7 -0
- package/app/reports/interfaces/report-chat-viewer-state.interface.d.ts +7 -0
- package/app/reports/interfaces/report.interface.d.ts +19 -3
- package/app/reports/option-builder.d.ts +13 -1
- package/app/reports/pipes/report-date.pipe.d.ts +7 -0
- package/app/reports/report-filter-items.d.ts +5 -0
- package/app/reports/report-url-state.d.ts +14 -0
- package/app/reports/services/report-filter-state.service.d.ts +24 -2
- package/app/reports/text.d.ts +1 -0
- package/app/reports/theme/palette.d.ts +2 -0
- package/app/reports/theme/typography.d.ts +2 -0
- package/app/reports/views/report/fs-ai-report.component.d.ts +16 -8
- package/app/reports/views/report/report.component.d.ts +6 -6
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +29 -104
- package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +52 -44
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +55 -35
- package/esm2022/app/reports/components/timezone-select/timezone-select.component.mjs +23 -23
- package/esm2022/app/reports/consts/report-week.const.mjs +7 -0
- package/esm2022/app/reports/data/report-ai-chat.data.mjs +25 -0
- package/esm2022/app/reports/data/report.data.mjs +22 -9
- package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +25 -26
- package/esm2022/app/reports/dialogs/global-settings/components/semantic-database/semantic-database.component.mjs +28 -14
- package/esm2022/app/reports/dialogs/global-settings/global-settings.component.mjs +3 -3
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +38 -13
- package/esm2022/app/reports/export/report-export-collector.service.mjs +92 -28
- package/esm2022/app/reports/export/report-export.service.mjs +11 -8
- package/esm2022/app/reports/export/report-pdf.service.mjs +241 -81
- package/esm2022/app/reports/export/report-pptx.service.mjs +143 -60
- package/esm2022/app/reports/format.mjs +119 -8
- package/esm2022/app/reports/interfaces/report-chat-viewer-filter.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-state.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/option-builder.mjs +230 -17
- package/esm2022/app/reports/pipes/report-date.pipe.mjs +21 -0
- package/esm2022/app/reports/report-filter-items.mjs +42 -10
- package/esm2022/app/reports/report-url-state.mjs +144 -0
- package/esm2022/app/reports/services/report-filter-state.service.mjs +308 -64
- package/esm2022/app/reports/text.mjs +2 -2
- package/esm2022/app/reports/theme/echarts.mjs +6 -5
- package/esm2022/app/reports/theme/palette.mjs +9 -1
- package/esm2022/app/reports/theme/typography.mjs +6 -0
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +191 -90
- package/esm2022/app/reports/views/report/report.component.mjs +64 -62
- package/fesm2022/{firestitch-report-echarts-CFkoNvo_.mjs → firestitch-report-echarts-B9nl9XKM.mjs} +6 -6
- package/fesm2022/firestitch-report-echarts-B9nl9XKM.mjs.map +1 -0
- package/fesm2022/{firestitch-report-firestitch-report-PZzkYYTD.mjs → firestitch-report-firestitch-report-Bb65HEYB.mjs} +2348 -1161
- package/fesm2022/firestitch-report-firestitch-report-Bb65HEYB.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/app/reports/dialogs/report-settings/report-settings-default.d.ts +0 -2
- package/esm2022/app/reports/dialogs/report-settings/report-settings-default.mjs +0 -22
- package/fesm2022/firestitch-report-echarts-CFkoNvo_.mjs.map +0 -1
- package/fesm2022/firestitch-report-firestitch-report-PZzkYYTD.mjs.map +0 -1
|
@@ -138,7 +138,7 @@ export class GlobalSettingsComponent {
|
|
|
138
138
|
this.concurrency.set(settings.semanticBuildConcurrency);
|
|
139
139
|
}
|
|
140
140
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GlobalSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
141
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GlobalSettingsComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "semanticDatabase", first: true, predicate: SemanticDatabaseComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<form\n *fsSkeletonForm=\"loaded()\"\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <fs-dialog-title>\n Report Settings\n </fs-dialog-title>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"AI Knowledge\"\n name=\"knowledge\">\n <fs-ai-report-global-settings-ai-knowledge\n [content]=\"content()\"\n (contentChange)=\"content.set($event)\"\n [config]=\"editorConfig\">\n </fs-ai-report-global-settings-ai-knowledge>\n </mat-tab>\n <mat-tab\n label=\"Semantic Database\"\n name=\"build\">\n <fs-ai-report-global-settings-semantic-database>\n </fs-ai-report-global-settings-semantic-database>\n </mat-tab>\n <mat-tab\n label=\"General\"\n name=\"general\">\n <fs-ai-report-global-settings-general\n [concurrency]=\"concurrency()\"\n (concurrencyChange)=\"concurrency.set($event)\"\n [min]=\"settings()!.semanticBuildConcurrencyMin\"\n [max]=\"settings()!.semanticBuildConcurrencyMax\">\n </fs-ai-report-global-settings-general>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <!-- The footer follows the selected tab. AI Knowledge projects its own\n Save | View History | Cancel row (fs-form-dialog-actions renders\n projected content after Save/Cancel, so the default pair can't keep\n View History beside Save); General uses the default Save/Cancel; the\n Semantic Database tab is a read/run surface, so it gets a primary\n Close plus its Build/Rebuild/Stop action. -->\n <fs-form-dialog-actions [save]=\"selectedTab === 'general'\">\n @if (selectedTab === 'knowledge') {\n <button\n type=\"submit\"\n mat-button\n color=\"primary\">\n Save\n </button>\n <button\n type=\"button\"\n mat-button\n (click)=\"openHistory()\">\n View History\n </button>\n <button\n type=\"button\"\n mat-button\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n }\n @if (selectedTab === 'build') {\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n }\n @if (selectedTab === 'build' && semanticDatabase(); as db) {\n @if (db.buildActive()) {\n <button\n type=\"button\"\n mat-button\n color=\"warn\"\n (click)=\"db.stopBuild()\">\n Stop Build\n </button>\n } @else {\n
|
|
141
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GlobalSettingsComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "semanticDatabase", first: true, predicate: SemanticDatabaseComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<form\n *fsSkeletonForm=\"loaded()\"\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <fs-dialog-title>\n Report Settings\n </fs-dialog-title>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"AI Knowledge\"\n name=\"knowledge\">\n <fs-ai-report-global-settings-ai-knowledge\n [content]=\"content()\"\n (contentChange)=\"content.set($event)\"\n [config]=\"editorConfig\">\n </fs-ai-report-global-settings-ai-knowledge>\n </mat-tab>\n <mat-tab\n label=\"Semantic Database\"\n name=\"build\">\n <fs-ai-report-global-settings-semantic-database>\n </fs-ai-report-global-settings-semantic-database>\n </mat-tab>\n <mat-tab\n label=\"General\"\n name=\"general\">\n <fs-ai-report-global-settings-general\n [concurrency]=\"concurrency()\"\n (concurrencyChange)=\"concurrency.set($event)\"\n [min]=\"settings()!.semanticBuildConcurrencyMin\"\n [max]=\"settings()!.semanticBuildConcurrencyMax\">\n </fs-ai-report-global-settings-general>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <!-- The footer follows the selected tab. AI Knowledge projects its own\n Save | View History | Cancel row (fs-form-dialog-actions renders\n projected content after Save/Cancel, so the default pair can't keep\n View History beside Save); General uses the default Save/Cancel; the\n Semantic Database tab is a read/run surface, so it gets a primary\n Close plus its Build/Rebuild/Stop action. -->\n <fs-form-dialog-actions [save]=\"selectedTab === 'general'\">\n @if (selectedTab === 'knowledge') {\n <button\n type=\"submit\"\n mat-button\n color=\"primary\">\n Save\n </button>\n <button\n type=\"button\"\n mat-button\n (click)=\"openHistory()\">\n View History\n </button>\n <button\n type=\"button\"\n mat-button\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n }\n @if (selectedTab === 'build') {\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n }\n @if (selectedTab === 'build' && semanticDatabase(); as db) {\n @if (db.buildActive()) {\n <button\n type=\"button\"\n mat-button\n color=\"warn\"\n (click)=\"db.stopBuild()\">\n Stop Build\n </button>\n } @else {\n <!-- Never gated on the status load: a status response that fails\n must not take the Build action away with it. -->\n <button\n type=\"button\"\n mat-button\n (click)=\"db.build()\">\n {{ db.rebuild() ? 'Rebuild' : 'Build' }}\n </button>\n }\n }\n </fs-form-dialog-actions>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i2.FsDialogTitleComponent, selector: "fs-dialog-title", inputs: ["close", "dockToggle", "back"] }, { kind: "ngmodule", type: FsFormModule }, { kind: "directive", type: i3.FsFormDirective, selector: "[fsForm]", inputs: ["wrapperSelector", "messageSelector", "hintSelector", "labelSelector", "autocomplete", "shortcuts", "confirm", "confirmDialog", "confirmDrawer", "confirmBrowser", "dirtySubmitButton", "submit", "successDelay", "errorDelay", "deactivationGuard"], outputs: ["fsForm", "invalid", "valid", "submitted", "reseted", "cleared"], exportAs: ["fsForm"] }, { kind: "component", type: i3.FsFormDialogActionsComponent, selector: "fs-form-dialog-actions", inputs: ["save", "create", "close", "done", "closeData", "name"] }, { kind: "directive", type: i3.FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit"] }, { kind: "ngmodule", type: FsSkeletonModule }, { kind: "directive", type: i4.FsSkeletonFormDirective, selector: "[fsSkeletonForm]", inputs: ["fsSkeletonForm", "fsSkeletonFormLines"] }, { kind: "ngmodule", type: FsTabsModule }, { kind: "directive", type: i5.FsTabsHeaderTabGroupDirective, selector: "mat-tab-group, matTabGroup, [matTabGroup]", inputs: ["orientation", "selected", "selectedData"], outputs: ["selectedChange", "selectedDataChange"], exportAs: ["fsTabsHeaderTabGroup"] }, { kind: "directive", type: i5.FsTabsTabDirective, selector: "mat-tab,matTab", inputs: ["name", "data"], exportAs: ["fsTabsTab"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: AiKnowledgeComponent, selector: "fs-ai-report-global-settings-ai-knowledge", inputs: ["content", "config"], outputs: ["contentChange"] }, { kind: "component", type: GeneralComponent, selector: "fs-ai-report-global-settings-general", inputs: ["concurrency", "min", "max"], outputs: ["concurrencyChange"] }, { kind: "component", type: SemanticDatabaseComponent, selector: "fs-ai-report-global-settings-semantic-database" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
142
142
|
}
|
|
143
143
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GlobalSettingsComponent, decorators: [{
|
|
144
144
|
type: Component,
|
|
@@ -156,6 +156,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
156
156
|
AiKnowledgeComponent,
|
|
157
157
|
GeneralComponent,
|
|
158
158
|
SemanticDatabaseComponent,
|
|
159
|
-
], template: "<form\n *fsSkeletonForm=\"loaded()\"\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <fs-dialog-title>\n Report Settings\n </fs-dialog-title>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"AI Knowledge\"\n name=\"knowledge\">\n <fs-ai-report-global-settings-ai-knowledge\n [content]=\"content()\"\n (contentChange)=\"content.set($event)\"\n [config]=\"editorConfig\">\n </fs-ai-report-global-settings-ai-knowledge>\n </mat-tab>\n <mat-tab\n label=\"Semantic Database\"\n name=\"build\">\n <fs-ai-report-global-settings-semantic-database>\n </fs-ai-report-global-settings-semantic-database>\n </mat-tab>\n <mat-tab\n label=\"General\"\n name=\"general\">\n <fs-ai-report-global-settings-general\n [concurrency]=\"concurrency()\"\n (concurrencyChange)=\"concurrency.set($event)\"\n [min]=\"settings()!.semanticBuildConcurrencyMin\"\n [max]=\"settings()!.semanticBuildConcurrencyMax\">\n </fs-ai-report-global-settings-general>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <!-- The footer follows the selected tab. AI Knowledge projects its own\n Save | View History | Cancel row (fs-form-dialog-actions renders\n projected content after Save/Cancel, so the default pair can't keep\n View History beside Save); General uses the default Save/Cancel; the\n Semantic Database tab is a read/run surface, so it gets a primary\n Close plus its Build/Rebuild/Stop action. -->\n <fs-form-dialog-actions [save]=\"selectedTab === 'general'\">\n @if (selectedTab === 'knowledge') {\n <button\n type=\"submit\"\n mat-button\n color=\"primary\">\n Save\n </button>\n <button\n type=\"button\"\n mat-button\n (click)=\"openHistory()\">\n View History\n </button>\n <button\n type=\"button\"\n mat-button\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n }\n @if (selectedTab === 'build') {\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n }\n @if (selectedTab === 'build' && semanticDatabase(); as db) {\n @if (db.buildActive()) {\n <button\n type=\"button\"\n mat-button\n color=\"warn\"\n (click)=\"db.stopBuild()\">\n Stop Build\n </button>\n } @else {\n
|
|
159
|
+
], template: "<form\n *fsSkeletonForm=\"loaded()\"\n fsForm\n [submit]=\"save\">\n <fs-dialog>\n <fs-dialog-title>\n Report Settings\n </fs-dialog-title>\n <mat-dialog-content>\n <mat-tab-group [(selected)]=\"selectedTab\">\n <mat-tab\n label=\"AI Knowledge\"\n name=\"knowledge\">\n <fs-ai-report-global-settings-ai-knowledge\n [content]=\"content()\"\n (contentChange)=\"content.set($event)\"\n [config]=\"editorConfig\">\n </fs-ai-report-global-settings-ai-knowledge>\n </mat-tab>\n <mat-tab\n label=\"Semantic Database\"\n name=\"build\">\n <fs-ai-report-global-settings-semantic-database>\n </fs-ai-report-global-settings-semantic-database>\n </mat-tab>\n <mat-tab\n label=\"General\"\n name=\"general\">\n <fs-ai-report-global-settings-general\n [concurrency]=\"concurrency()\"\n (concurrencyChange)=\"concurrency.set($event)\"\n [min]=\"settings()!.semanticBuildConcurrencyMin\"\n [max]=\"settings()!.semanticBuildConcurrencyMax\">\n </fs-ai-report-global-settings-general>\n </mat-tab>\n </mat-tab-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <!-- The footer follows the selected tab. AI Knowledge projects its own\n Save | View History | Cancel row (fs-form-dialog-actions renders\n projected content after Save/Cancel, so the default pair can't keep\n View History beside Save); General uses the default Save/Cancel; the\n Semantic Database tab is a read/run surface, so it gets a primary\n Close plus its Build/Rebuild/Stop action. -->\n <fs-form-dialog-actions [save]=\"selectedTab === 'general'\">\n @if (selectedTab === 'knowledge') {\n <button\n type=\"submit\"\n mat-button\n color=\"primary\">\n Save\n </button>\n <button\n type=\"button\"\n mat-button\n (click)=\"openHistory()\">\n View History\n </button>\n <button\n type=\"button\"\n mat-button\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n }\n @if (selectedTab === 'build') {\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"undefined\">\n Close\n </button>\n }\n @if (selectedTab === 'build' && semanticDatabase(); as db) {\n @if (db.buildActive()) {\n <button\n type=\"button\"\n mat-button\n color=\"warn\"\n (click)=\"db.stopBuild()\">\n Stop Build\n </button>\n } @else {\n <!-- Never gated on the status load: a status response that fails\n must not take the Build action away with it. -->\n <button\n type=\"button\"\n mat-button\n (click)=\"db.build()\">\n {{ db.rebuild() ? 'Rebuild' : 'Build' }}\n </button>\n }\n }\n </fs-form-dialog-actions>\n </mat-dialog-actions>\n </fs-dialog>\n</form>\n", styles: [":host{display:block}\n"] }]
|
|
160
160
|
}], ctorParameters: () => [] });
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9kaWFsb2dzL2dsb2JhbC1zZXR0aW5ncy9nbG9iYWwtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RpYWxvZ3MvZ2xvYmFsLXNldHRpbmdzL2dsb2JhbC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1B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Q1osZ0JBQWdCLHdLQUNoQixZQUFZLG9hQUNaLFNBQVMsaUxBQ1QsZ0JBQWdCLDRIQUNoQixjQUFjLHFMQUNkLGdCQUFnQix3R0FDaEIsYUFBYSw2b0JBQ2Isb0JBQW9CLGlKQUNwQixnQkFBZ0Isd0pBQ2hCLHlCQUF5Qjs7NEZBR2hCLHVCQUF1QjtrQkFyQm5DLFNBQVM7c0NBR1MsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLGdCQUFnQjt3QkFDaEIseUJBQXlCO3FCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5cbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuaW1wb3J0IHsgRnNNYXJrZG93bkVkaXRvckNvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL21hcmtkb3duLWVkaXRvcic7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9za2VsZXRvbic7XG5pbXBvcnQgeyBGc1RhYnNNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC90YWJzJztcblxuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7IFJlcG9ydEluc3RydWN0aW9ucywgUmVwb3J0U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25IaXN0b3J5Q29tcG9uZW50IH0gZnJvbSAnLi4vaW5zdHJ1Y3Rpb24taGlzdG9yeS9pbnN0cnVjdGlvbi1oaXN0b3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBaUtub3dsZWRnZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9haS1rbm93bGVkZ2UvYWkta25vd2xlZGdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW5lcmFsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2dlbmVyYWwvZ2VuZXJhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VtYW50aWNEYXRhYmFzZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZW1hbnRpYy1kYXRhYmFzZS9zZW1hbnRpYy1kYXRhYmFzZS5jb21wb25lbnQnO1xuXG5cbi8vIE1hdGNoZXMgdGhlIGJhY2tlbmQgY2FwIChSZXBvcnRzVmlldzo6SU5TVFJVQ1RJT05TX01BWF9MRU5HVEgpIOKAlCB0aGUgZG9jdW1lbnRcbi8vIHJpZGVzIGFsb25nIG9uIGV2ZXJ5IGFnZW50IHR1cm4sIHNvIGl0IGlzIGEgcHJvbXB0LWJ1ZGdldCBndWFyZC5cbmNvbnN0IE1BWF9MRU5HVEggPSA1MDAwMDtcblxuLy8gU2VlZGVkIGludG8gdGhlIGVkaXRvciAoY2xpZW50LXNpZGUsIHVuc2F2ZWQpIHdoZW4gbm8gdmVyc2lvbiBleGlzdHMgeWV0LCBzb1xuLy8gdGhlIG9wZXJhdG9yIHNlZXMgdGhlIGludGVuZGVkIHNoYXBlIG9mIHRoZSBkb2N1bWVudC5cbmNvbnN0IFNDQUZGT0xEID0gW1xuICAnIyBHbG9zc2FyeScsXG4gICcnLFxuICAnKlRlcm1zIHlvdXIgdGVhbSB1c2VzIGFuZCB3aGF0IHRoZXkgbWVhbiBpbiB0aGUgZGF0YSDigJQgZS5nLiBcImNsaWVudHNcIiBhcmUgY2xpZW50IGFjY291bnRzLionLFxuICAnJyxcbiAgJyMgQnVzaW5lc3MgcnVsZXMnLFxuICAnJyxcbiAgJypSdWxlcyB0aGUgQUkgc2hvdWxkIGFwcGx5IHdoZW4gYnVpbGRpbmcgb3IgZXhwbGFpbmluZyByZXBvcnRzLionLFxuICAnJyxcbiAgJyMgU3BlY2lhbCBjYXNlcycsXG4gICcnLFxuICAnKktub3duIGV4Y2VwdGlvbnMgYW5kIGRhdGEgcXVpcmtzIHRoZSBBSSBjYW5ub3QgaW5mZXIgb24gaXRzIG93bi4qJyxcbiAgJycsXG5dLmpvaW4oJ1xcbicpO1xuXG5cbi8vIEdsb2JhbCByZXBvcnQgc2V0dGluZ3MsIG9wZW5lZCBmcm9tIHRoZSByZXBvcnRzIGxpc3RpbmcncyBnZWFyLiBBIHRoaW4gc2hlbGw6XG4vLyB0aGUgZGlhbG9nIGZyYW1lLCB0aGUgdGFiIGdyb3VwLCBhbmQgYSBwZXItdGFiIGZvb3Rlci4gRWFjaCB0YWIgaXMgaXRzIG93blxuLy8gY29tcG9uZW50IOKAlFxuLy8gICBBSSBLbm93bGVkZ2Ug4oCUIHRoZSBvcGVyYXRvci1hdXRob3JlZCBtYXJrZG93biBkb2N1bWVudCBhcHBlbmRlZCB0byB0aGVcbi8vICAgcmVwb3J0IGFnZW50J3Mgc3lzdGVtIGluc3RydWN0aW9ucyBvbiBldmVyeSBjaGF0IHR1cm4uIEl0cyBmb290ZXIgY2FycmllcyBhXG4vLyAgIFZpZXcgSGlzdG9yeSBidXR0b24gb3BlbmluZyB0aGUgdmVyc2lvbi1oaXN0b3J5IGRpYWxvZyAocmVzdG9yZXMgaGFwcGVuXG4vLyAgIHRoZXJlOyB0aGUgc2hlbGwgcmVmcmVzaGVzIG9uIGNsb3NlKS5cbi8vICAgU2VtYW50aWMgRGF0YWJhc2Ug4oCUIHRoZSBidWlsZCBzY29yZWJvYXJkIHRoZSBBSSBpcyBidWlsdCBmcm9tLCB3aXRoIGFcbi8vICAgc2VsZi1jb250YWluZWQgQnVpbGQgYWN0aW9uLlxuLy8gICBHZW5lcmFsIOKAlCByZXBvcnQtbW9kdWxlIHNldHRpbmdzICh0aGUgc2VtYW50aWMtYnVpbGQgY29uY3VycmVuY3kpLlxuLy8gVGhlIHNoZWxsIG93bnMgdGhlIHNoYXJlZCBkYXRhICh0aGUgaW5zdHJ1Y3Rpb25zIGRvY3VtZW50LCB0aGUgc2V0dGluZ3MgZm9yXG4vLyBHZW5lcmFsKSBwbHVzIHRoZSB0YWItYXdhcmUgc2F2ZTsgZXZlcnl0aGluZyBlbHNlIGxpdmVzIGluIHRoZSBjaGlsZHJlbi5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZ2xvYmFsLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2xvYmFsLXNldHRpbmdzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRnNEaWFsb2dNb2R1bGUsXG4gICAgRnNGb3JtTW9kdWxlLFxuICAgIEZzU2tlbGV0b25Nb2R1bGUsXG4gICAgRnNUYWJzTW9kdWxlLFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBBaUtub3dsZWRnZUNvbXBvbmVudCxcbiAgICBHZW5lcmFsQ29tcG9uZW50LFxuICAgIFNlbWFudGljRGF0YWJhc2VDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEdsb2JhbFNldHRpbmdzQ29tcG9uZW50IHtcblxuICBwdWJsaWMgc2VsZWN0ZWRUYWIgPSAna25vd2xlZGdlJztcblxuICAvLyBUaGUgU2VtYW50aWMgRGF0YWJhc2UgdGFiIGNvbXBvbmVudCwgc28gdGhlIHNoYXJlZCBmb290ZXIgY2FuIGRyaXZlIGl0c1xuICAvLyBCdWlsZC9SZWJ1aWxkL1N0b3AgYWN0aW9uIGlubGluZSBuZXh0IHRvIENsb3NlICh0aGUgYnVpbGQgc3RhdGUgbGl2ZXMgdGhlcmUpLlxuICBwdWJsaWMgcmVhZG9ubHkgc2VtYW50aWNEYXRhYmFzZSA9IHZpZXdDaGlsZChTZW1hbnRpY0RhdGFiYXNlQ29tcG9uZW50KTtcblxuICAvLyBUaGUgZWRpdG9yJ3MgZHJhZnQsIGhlbGQgb24gdGhlIHNoZWxsIHNvIHN3aXRjaGluZyB0YWJzIG5ldmVyIGxvc2VzIGFuIGVkaXRcbiAgLy8g4oCUIHNlZWRlZCBmcm9tIHRoZSBjdXJyZW50IHZlcnNpb24gKG9yIHRoZSBzY2FmZm9sZCkuXG4gIHB1YmxpYyByZWFkb25seSBjb250ZW50ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuXG4gIHB1YmxpYyByZWFkb25seSBlZGl0b3JDb25maWc6IEZzTWFya2Rvd25FZGl0b3JDb25maWcgPSB7XG4gICAgbWF4TGVuZ3RoOiBNQVhfTEVOR1RILFxuICAgIHBsYWNlaG9sZGVyOiAnVGVybWlub2xvZ3ksIGJ1c2luZXNzIHJ1bGVzIGFuZCBzcGVjaWFsIGNhc2VzIHRoZSByZXBvcnQgQUkgc2hvdWxkIGtub3figKYnLFxuICB9O1xuXG4gIC8vIEJvdGggbnVsbCB1bnRpbCBsb2FkZWQg4oCUIHRoZSBmb3JtIHdhaXRzIGJlaGluZCB0aGUgc2tlbGV0b24gdW50aWwgZWFjaCBpcyBpbi5cbiAgcHVibGljIHJlYWRvbmx5IGluc3RydWN0aW9ucyA9IHNpZ25hbDxSZXBvcnRJbnN0cnVjdGlvbnMgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHNldHRpbmdzID0gc2lnbmFsPFJlcG9ydFNldHRpbmdzIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gVGhlIEdlbmVyYWwgdGFiJ3MgY29uY3VycmVuY3kgZHJhZnQgKGJvdW5kIHRvIGl0cyBmaWVsZCksIHNlZWRlZCBmcm9tIHNldHRpbmdzLlxuICBwdWJsaWMgcmVhZG9ubHkgY29uY3VycmVuY3kgPSBzaWduYWw8bnVtYmVyPigwKTtcblxuICAvLyBHYXRlIHRoZSB3aG9sZSBmb3JtIG9uIGJvdGggbG9hZHMsIHNvIGV2ZXJ5IHRhYidzIGZpZWxkcyBhcmUgcmVhZHkgdG8gcmVuZGVyLlxuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gISF0aGlzLmluc3RydWN0aW9ucygpICYmICEhdGhpcy5zZXR0aW5ncygpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kaWFsb2dSZWYgPSBpbmplY3Q8TWF0RGlhbG9nUmVmPEdsb2JhbFNldHRpbmdzQ29tcG9uZW50Pj4oTWF0RGlhbG9nUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlcG9ydERhdGEgPSBpbmplY3QoUmVwb3J0RGF0YSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2UgPSBpbmplY3QoRnNNZXNzYWdlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICAvLyBUaGUgZm9vdGVyIFNhdmUgaXMgc2hhcmVkLCBzbyBpdCBzYXZlcyB3aGF0ZXZlciB0aGUgY3VycmVudCB0YWIgb3duczogdGhlXG4gIC8vIEdlbmVyYWwgdGFiIHBlcnNpc3RzIGl0cyBzZXR0aW5ncyAoYW5kIHN0YXlzIG9wZW4pOyBBSSBLbm93bGVkZ2Ugc2F2ZXMgYSBuZXdcbiAgLy8gZG9jdW1lbnQgdmVyc2lvbiBhbmQgY2xvc2VzLlxuICBwdWJsaWMgc2F2ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYiA9PT0gJ2dlbmVyYWwnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGF0YS5zYXZlU2V0dGluZ3MoeyBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3k6IHRoaXMuY29uY3VycmVuY3koKSB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHNldHRpbmdzOiBSZXBvcnRTZXR0aW5ncykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbHlTZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NldHRpbmdzIHNhdmVkJyk7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydERhdGEuc2F2ZUluc3RydWN0aW9ucyh0aGlzLmNvbnRlbnQoKSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25zKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdBSSBrbm93bGVkZ2Ugc2F2ZWQnKTtcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UoaW5zdHJ1Y3Rpb25zKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9O1xuXG4gIC8vIE9wZW4gdGhlIHZlcnNpb24taGlzdG9yeSBkaWFsb2cuIFJlc3RvcmVzIGhhcHBlbiBpbnNpZGUgaXQsIHNvIHdoZW4gaXRcbiAgLy8gY2xvc2VzIChob3dldmVyIGl0IGNsb3NlcykgcmUtZmV0Y2ggdGhlIGRvY3VtZW50OiBhIHJlc3RvcmUgY2hhbmdlZCB0aGVcbiAgLy8gY3VycmVudCB2ZXJzaW9uIGFuZCBtdXN0IHJlc2VlZCB0aGUgZWRpdG9yOyBvdGhlcndpc2UganVzdCByZWZyZXNoIHRoZVxuICAvLyB2ZXJzaW9uIGxpc3Qgd2l0aG91dCB0b3VjaGluZyBhbiB1bnNhdmVkIGRyYWZ0LlxuICBwdWJsaWMgb3Blbkhpc3RvcnkoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudElkID0gdGhpcy5pbnN0cnVjdGlvbnMoKT8uaW5zdHJ1Y3Rpb25zPy5pZDtcblxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKEluc3RydWN0aW9uSGlzdG9yeUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICBtYXhXaWR0aDogJzk1dncnLFxuICAgICAgbWF4SGVpZ2h0OiAnODV2aCcsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgZGF0YTogeyB2ZXJzaW9uczogdGhpcy5pbnN0cnVjdGlvbnMoKT8udmVyc2lvbnMgPz8gW10gfSxcbiAgICB9KVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fcmVwb3J0RGF0YS5pbnN0cnVjdGlvbnMoKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25zKSA9PiB7XG4gICAgICAgIGlmIChpbnN0cnVjdGlvbnMuaW5zdHJ1Y3Rpb25zPy5pZCAhPT0gY3VycmVudElkKSB7XG4gICAgICAgICAgdGhpcy5fYXBwbHlJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmluc3RydWN0aW9ucy5zZXQoaW5zdHJ1Y3Rpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlcG9ydERhdGEuaW5zdHJ1Y3Rpb25zKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25zKSA9PiB0aGlzLl9hcHBseUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpKTtcblxuICAgIHRoaXMuX3JlcG9ydERhdGEuc2V0dGluZ3MoKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoc2V0dGluZ3M6IFJlcG9ydFNldHRpbmdzKSA9PiB0aGlzLl9hcHBseVNldHRpbmdzKHNldHRpbmdzKSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IFJlcG9ydEluc3RydWN0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zLnNldChpbnN0cnVjdGlvbnMpO1xuICAgIHRoaXMuY29udGVudC5zZXQoaW5zdHJ1Y3Rpb25zLmluc3RydWN0aW9ucz8uY29udGVudCA/PyBTQ0FGRk9MRCk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVNldHRpbmdzKHNldHRpbmdzOiBSZXBvcnRTZXR0aW5ncyk6IHZvaWQge1xuICAgIHRoaXMuc2V0dGluZ3Muc2V0KHNldHRpbmdzKTtcbiAgICB0aGlzLmNvbmN1cnJlbmN5LnNldChzZXR0aW5ncy5zZW1hbnRpY0J1aWxkQ29uY3VycmVuY3kpO1xuICB9XG59XG4iLCI8Zm9ybVxuICAgICpmc1NrZWxldG9uRm9ybT1cImxvYWRlZCgpXCJcbiAgICBmc0Zvcm1cbiAgICBbc3VibWl0XT1cInNhdmVcIj5cbiAgPGZzLWRpYWxvZz5cbiAgICA8ZnMtZGlhbG9nLXRpdGxlPlxuICAgICAgUmVwb3J0IFNldHRpbmdzXG4gICAgPC9mcy1kaWFsb2ctdGl0bGU+XG4gICAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICAgIDxtYXQtdGFiLWdyb3VwIFsoc2VsZWN0ZWQpXT1cInNlbGVjdGVkVGFiXCI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIkFJIEtub3dsZWRnZVwiXG4gICAgICAgICAgICBuYW1lPVwia25vd2xlZGdlXCI+XG4gICAgICAgICAgPGZzLWFpLXJlcG9ydC1nbG9iYWwtc2V0dGluZ3MtYWkta25vd2xlZGdlXG4gICAgICAgICAgICAgIFtjb250ZW50XT1cImNvbnRlbnQoKVwiXG4gICAgICAgICAgICAgIChjb250ZW50Q2hhbmdlKT1cImNvbnRlbnQuc2V0KCRldmVudClcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImVkaXRvckNvbmZpZ1wiPlxuICAgICAgICAgIDwvZnMtYWktcmVwb3J0LWdsb2JhbC1zZXR0aW5ncy1haS1rbm93bGVkZ2U+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgIGxhYmVsPVwiU2VtYW50aWMgRGF0YWJhc2VcIlxuICAgICAgICAgICAgbmFtZT1cImJ1aWxkXCI+XG4gICAgICAgICAgPGZzLWFpLXJlcG9ydC1nbG9iYWwtc2V0dGluZ3Mtc2VtYW50aWMtZGF0YWJhc2U+XG4gICAgICAgICAgPC9mcy1haS1yZXBvcnQtZ2xvYmFsLXNldHRpbmdzLXNlbWFudGljLWRhdGFiYXNlPlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIkdlbmVyYWxcIlxuICAgICAgICAgICAgbmFtZT1cImdlbmVyYWxcIj5cbiAgICAgICAgICA8ZnMtYWktcmVwb3J0LWdsb2JhbC1zZXR0aW5ncy1nZW5lcmFsXG4gICAgICAgICAgICAgIFtjb25jdXJyZW5jeV09XCJjb25jdXJyZW5jeSgpXCJcbiAgICAgICAgICAgICAgKGNvbmN1cnJlbmN5Q2hhbmdlKT1cImNvbmN1cnJlbmN5LnNldCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW21pbl09XCJzZXR0aW5ncygpIS5zZW1hbnRpY0J1aWxkQ29uY3VycmVuY3lNaW5cIlxuICAgICAgICAgICAgICBbbWF4XT1cInNldHRpbmdzKCkhLnNlbWFudGljQnVpbGRDb25jdXJyZW5jeU1heFwiPlxuICAgICAgICAgIDwvZnMtYWktcmVwb3J0LWdsb2JhbC1zZXR0aW5ncy1nZW5lcmFsPlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgIDwhLS0gVGhlIGZvb3RlciBmb2xsb3dzIHRoZSBzZWxlY3RlZCB0YWIuIEFJIEtub3dsZWRnZSBwcm9qZWN0cyBpdHMgb3duXG4gICAgICAgICAgIFNhdmUgfCBWaWV3IEhpc3RvcnkgfCBDYW5jZWwgcm93IChmcy1mb3JtLWRpYWxvZy1hY3Rpb25zIHJlbmRlcnNcbiAgICAgICAgICAgcHJvamVjdGVkIGNvbnRlbnQgYWZ0ZXIgU2F2ZS9DYW5jZWwsIHNvIHRoZSBkZWZhdWx0IHBhaXIgY2FuJ3Qga2VlcFxuICAgICAgICAgICBWaWV3IEhpc3RvcnkgYmVzaWRlIFNhdmUpOyBHZW5lcmFsIHVzZXMgdGhlIGRlZmF1bHQgU2F2ZS9DYW5jZWw7IHRoZVxuICAgICAgICAgICBTZW1hbnRpYyBEYXRhYmFzZSB0YWIgaXMgYSByZWFkL3J1biBzdXJmYWNlLCBzbyBpdCBnZXRzIGEgcHJpbWFyeVxuICAgICAgICAgICBDbG9zZSBwbHVzIGl0cyBCdWlsZC9SZWJ1aWxkL1N0b3AgYWN0aW9uLiAtLT5cbiAgICAgIDxmcy1mb3JtLWRpYWxvZy1hY3Rpb25zIFtzYXZlXT1cInNlbGVjdGVkVGFiID09PSAnZ2VuZXJhbCdcIj5cbiAgICAgICAgQGlmIChzZWxlY3RlZFRhYiA9PT0gJ2tub3dsZWRnZScpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgU2F2ZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5IaXN0b3J5KClcIj5cbiAgICAgICAgICAgIFZpZXcgSGlzdG9yeVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzZWxlY3RlZFRhYiA9PT0gJ2J1aWxkJykge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwidW5kZWZpbmVkXCI+XG4gICAgICAgICAgICBDbG9zZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoc2VsZWN0ZWRUYWIgPT09ICdidWlsZCcgJiYgc2VtYW50aWNEYXRhYmFzZSgpOyBhcyBkYikge1xuICAgICAgICAgIEBpZiAoZGIuYnVpbGRBY3RpdmUoKSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkYi5zdG9wQnVpbGQoKVwiPlxuICAgICAgICAgICAgICBTdG9wIEJ1aWxkXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBpZiAoZGIuc3RhdHVzKCk7IGFzIGJ1aWxkU3RhdHVzKSB7XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRiLmJ1aWxkKClcIj5cbiAgICAgICAgICAgICAgICB7eyBidWlsZFN0YXR1cy5kZXRhaWwuZ2VuZXJhdGVkQXQgPyAnUmVidWlsZCcgOiAnQnVpbGQnIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9mcy1mb3JtLWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8L2ZzLWRpYWxvZz5cbjwvZm9ybT5cbiJdfQ==
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9kaWFsb2dzL2dsb2JhbC1zZXR0aW5ncy9nbG9iYWwtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RpYWxvZ3MvZ2xvYmFsLXNldHRpbmdzL2dsb2JhbC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1B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Q1osZ0JBQWdCLHdLQUNoQixZQUFZLG9hQUNaLFNBQVMsaUxBQ1QsZ0JBQWdCLDRIQUNoQixjQUFjLHFMQUNkLGdCQUFnQix3R0FDaEIsYUFBYSw2b0JBQ2Isb0JBQW9CLGlKQUNwQixnQkFBZ0Isd0pBQ2hCLHlCQUF5Qjs7NEZBR2hCLHVCQUF1QjtrQkFyQm5DLFNBQVM7c0NBR1MsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLGdCQUFnQjt3QkFDaEIseUJBQXlCO3FCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5cbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuaW1wb3J0IHsgRnNNYXJrZG93bkVkaXRvckNvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL21hcmtkb3duLWVkaXRvcic7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9za2VsZXRvbic7XG5pbXBvcnQgeyBGc1RhYnNNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC90YWJzJztcblxuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7IFJlcG9ydEluc3RydWN0aW9ucywgUmVwb3J0U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25IaXN0b3J5Q29tcG9uZW50IH0gZnJvbSAnLi4vaW5zdHJ1Y3Rpb24taGlzdG9yeS9pbnN0cnVjdGlvbi1oaXN0b3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBaUtub3dsZWRnZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9haS1rbm93bGVkZ2UvYWkta25vd2xlZGdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW5lcmFsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2dlbmVyYWwvZ2VuZXJhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VtYW50aWNEYXRhYmFzZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZW1hbnRpYy1kYXRhYmFzZS9zZW1hbnRpYy1kYXRhYmFzZS5jb21wb25lbnQnO1xuXG5cbi8vIE1hdGNoZXMgdGhlIGJhY2tlbmQgY2FwIChSZXBvcnRzVmlldzo6SU5TVFJVQ1RJT05TX01BWF9MRU5HVEgpIOKAlCB0aGUgZG9jdW1lbnRcbi8vIHJpZGVzIGFsb25nIG9uIGV2ZXJ5IGFnZW50IHR1cm4sIHNvIGl0IGlzIGEgcHJvbXB0LWJ1ZGdldCBndWFyZC5cbmNvbnN0IE1BWF9MRU5HVEggPSA1MDAwMDtcblxuLy8gU2VlZGVkIGludG8gdGhlIGVkaXRvciAoY2xpZW50LXNpZGUsIHVuc2F2ZWQpIHdoZW4gbm8gdmVyc2lvbiBleGlzdHMgeWV0LCBzb1xuLy8gdGhlIG9wZXJhdG9yIHNlZXMgdGhlIGludGVuZGVkIHNoYXBlIG9mIHRoZSBkb2N1bWVudC5cbmNvbnN0IFNDQUZGT0xEID0gW1xuICAnIyBHbG9zc2FyeScsXG4gICcnLFxuICAnKlRlcm1zIHlvdXIgdGVhbSB1c2VzIGFuZCB3aGF0IHRoZXkgbWVhbiBpbiB0aGUgZGF0YSDigJQgZS5nLiBcImNsaWVudHNcIiBhcmUgY2xpZW50IGFjY291bnRzLionLFxuICAnJyxcbiAgJyMgQnVzaW5lc3MgcnVsZXMnLFxuICAnJyxcbiAgJypSdWxlcyB0aGUgQUkgc2hvdWxkIGFwcGx5IHdoZW4gYnVpbGRpbmcgb3IgZXhwbGFpbmluZyByZXBvcnRzLionLFxuICAnJyxcbiAgJyMgU3BlY2lhbCBjYXNlcycsXG4gICcnLFxuICAnKktub3duIGV4Y2VwdGlvbnMgYW5kIGRhdGEgcXVpcmtzIHRoZSBBSSBjYW5ub3QgaW5mZXIgb24gaXRzIG93bi4qJyxcbiAgJycsXG5dLmpvaW4oJ1xcbicpO1xuXG5cbi8vIEdsb2JhbCByZXBvcnQgc2V0dGluZ3MsIG9wZW5lZCBmcm9tIHRoZSByZXBvcnRzIGxpc3RpbmcncyBnZWFyLiBBIHRoaW4gc2hlbGw6XG4vLyB0aGUgZGlhbG9nIGZyYW1lLCB0aGUgdGFiIGdyb3VwLCBhbmQgYSBwZXItdGFiIGZvb3Rlci4gRWFjaCB0YWIgaXMgaXRzIG93blxuLy8gY29tcG9uZW50IOKAlFxuLy8gICBBSSBLbm93bGVkZ2Ug4oCUIHRoZSBvcGVyYXRvci1hdXRob3JlZCBtYXJrZG93biBkb2N1bWVudCBhcHBlbmRlZCB0byB0aGVcbi8vICAgcmVwb3J0IGFnZW50J3Mgc3lzdGVtIGluc3RydWN0aW9ucyBvbiBldmVyeSBjaGF0IHR1cm4uIEl0cyBmb290ZXIgY2FycmllcyBhXG4vLyAgIFZpZXcgSGlzdG9yeSBidXR0b24gb3BlbmluZyB0aGUgdmVyc2lvbi1oaXN0b3J5IGRpYWxvZyAocmVzdG9yZXMgaGFwcGVuXG4vLyAgIHRoZXJlOyB0aGUgc2hlbGwgcmVmcmVzaGVzIG9uIGNsb3NlKS5cbi8vICAgU2VtYW50aWMgRGF0YWJhc2Ug4oCUIHRoZSBidWlsZCBzY29yZWJvYXJkIHRoZSBBSSBpcyBidWlsdCBmcm9tLCB3aXRoIGFcbi8vICAgc2VsZi1jb250YWluZWQgQnVpbGQgYWN0aW9uLlxuLy8gICBHZW5lcmFsIOKAlCByZXBvcnQtbW9kdWxlIHNldHRpbmdzICh0aGUgc2VtYW50aWMtYnVpbGQgY29uY3VycmVuY3kpLlxuLy8gVGhlIHNoZWxsIG93bnMgdGhlIHNoYXJlZCBkYXRhICh0aGUgaW5zdHJ1Y3Rpb25zIGRvY3VtZW50LCB0aGUgc2V0dGluZ3MgZm9yXG4vLyBHZW5lcmFsKSBwbHVzIHRoZSB0YWItYXdhcmUgc2F2ZTsgZXZlcnl0aGluZyBlbHNlIGxpdmVzIGluIHRoZSBjaGlsZHJlbi5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZ2xvYmFsLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2xvYmFsLXNldHRpbmdzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRnNEaWFsb2dNb2R1bGUsXG4gICAgRnNGb3JtTW9kdWxlLFxuICAgIEZzU2tlbGV0b25Nb2R1bGUsXG4gICAgRnNUYWJzTW9kdWxlLFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBBaUtub3dsZWRnZUNvbXBvbmVudCxcbiAgICBHZW5lcmFsQ29tcG9uZW50LFxuICAgIFNlbWFudGljRGF0YWJhc2VDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEdsb2JhbFNldHRpbmdzQ29tcG9uZW50IHtcblxuICBwdWJsaWMgc2VsZWN0ZWRUYWIgPSAna25vd2xlZGdlJztcblxuICAvLyBUaGUgU2VtYW50aWMgRGF0YWJhc2UgdGFiIGNvbXBvbmVudCwgc28gdGhlIHNoYXJlZCBmb290ZXIgY2FuIGRyaXZlIGl0c1xuICAvLyBCdWlsZC9SZWJ1aWxkL1N0b3AgYWN0aW9uIGlubGluZSBuZXh0IHRvIENsb3NlICh0aGUgYnVpbGQgc3RhdGUgbGl2ZXMgdGhlcmUpLlxuICBwdWJsaWMgcmVhZG9ubHkgc2VtYW50aWNEYXRhYmFzZSA9IHZpZXdDaGlsZChTZW1hbnRpY0RhdGFiYXNlQ29tcG9uZW50KTtcblxuICAvLyBUaGUgZWRpdG9yJ3MgZHJhZnQsIGhlbGQgb24gdGhlIHNoZWxsIHNvIHN3aXRjaGluZyB0YWJzIG5ldmVyIGxvc2VzIGFuIGVkaXRcbiAgLy8g4oCUIHNlZWRlZCBmcm9tIHRoZSBjdXJyZW50IHZlcnNpb24gKG9yIHRoZSBzY2FmZm9sZCkuXG4gIHB1YmxpYyByZWFkb25seSBjb250ZW50ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuXG4gIHB1YmxpYyByZWFkb25seSBlZGl0b3JDb25maWc6IEZzTWFya2Rvd25FZGl0b3JDb25maWcgPSB7XG4gICAgbWF4TGVuZ3RoOiBNQVhfTEVOR1RILFxuICAgIHBsYWNlaG9sZGVyOiAnVGVybWlub2xvZ3ksIGJ1c2luZXNzIHJ1bGVzIGFuZCBzcGVjaWFsIGNhc2VzIHRoZSByZXBvcnQgQUkgc2hvdWxkIGtub3figKYnLFxuICB9O1xuXG4gIC8vIEJvdGggbnVsbCB1bnRpbCBsb2FkZWQg4oCUIHRoZSBmb3JtIHdhaXRzIGJlaGluZCB0aGUgc2tlbGV0b24gdW50aWwgZWFjaCBpcyBpbi5cbiAgcHVibGljIHJlYWRvbmx5IGluc3RydWN0aW9ucyA9IHNpZ25hbDxSZXBvcnRJbnN0cnVjdGlvbnMgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHJlYWRvbmx5IHNldHRpbmdzID0gc2lnbmFsPFJlcG9ydFNldHRpbmdzIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gVGhlIEdlbmVyYWwgdGFiJ3MgY29uY3VycmVuY3kgZHJhZnQgKGJvdW5kIHRvIGl0cyBmaWVsZCksIHNlZWRlZCBmcm9tIHNldHRpbmdzLlxuICBwdWJsaWMgcmVhZG9ubHkgY29uY3VycmVuY3kgPSBzaWduYWw8bnVtYmVyPigwKTtcblxuICAvLyBHYXRlIHRoZSB3aG9sZSBmb3JtIG9uIGJvdGggbG9hZHMsIHNvIGV2ZXJ5IHRhYidzIGZpZWxkcyBhcmUgcmVhZHkgdG8gcmVuZGVyLlxuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gISF0aGlzLmluc3RydWN0aW9ucygpICYmICEhdGhpcy5zZXR0aW5ncygpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kaWFsb2dSZWYgPSBpbmplY3Q8TWF0RGlhbG9nUmVmPEdsb2JhbFNldHRpbmdzQ29tcG9uZW50Pj4oTWF0RGlhbG9nUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlcG9ydERhdGEgPSBpbmplY3QoUmVwb3J0RGF0YSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lc3NhZ2UgPSBpbmplY3QoRnNNZXNzYWdlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICAvLyBUaGUgZm9vdGVyIFNhdmUgaXMgc2hhcmVkLCBzbyBpdCBzYXZlcyB3aGF0ZXZlciB0aGUgY3VycmVudCB0YWIgb3duczogdGhlXG4gIC8vIEdlbmVyYWwgdGFiIHBlcnNpc3RzIGl0cyBzZXR0aW5ncyAoYW5kIHN0YXlzIG9wZW4pOyBBSSBLbm93bGVkZ2Ugc2F2ZXMgYSBuZXdcbiAgLy8gZG9jdW1lbnQgdmVyc2lvbiBhbmQgY2xvc2VzLlxuICBwdWJsaWMgc2F2ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYiA9PT0gJ2dlbmVyYWwnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGF0YS5zYXZlU2V0dGluZ3MoeyBzZW1hbnRpY0J1aWxkQ29uY3VycmVuY3k6IHRoaXMuY29uY3VycmVuY3koKSB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHNldHRpbmdzOiBSZXBvcnRTZXR0aW5ncykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYXBwbHlTZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ1NldHRpbmdzIHNhdmVkJyk7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydERhdGEuc2F2ZUluc3RydWN0aW9ucyh0aGlzLmNvbnRlbnQoKSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25zKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdBSSBrbm93bGVkZ2Ugc2F2ZWQnKTtcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UoaW5zdHJ1Y3Rpb25zKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9O1xuXG4gIC8vIE9wZW4gdGhlIHZlcnNpb24taGlzdG9yeSBkaWFsb2cuIFJlc3RvcmVzIGhhcHBlbiBpbnNpZGUgaXQsIHNvIHdoZW4gaXRcbiAgLy8gY2xvc2VzIChob3dldmVyIGl0IGNsb3NlcykgcmUtZmV0Y2ggdGhlIGRvY3VtZW50OiBhIHJlc3RvcmUgY2hhbmdlZCB0aGVcbiAgLy8gY3VycmVudCB2ZXJzaW9uIGFuZCBtdXN0IHJlc2VlZCB0aGUgZWRpdG9yOyBvdGhlcndpc2UganVzdCByZWZyZXNoIHRoZVxuICAvLyB2ZXJzaW9uIGxpc3Qgd2l0aG91dCB0b3VjaGluZyBhbiB1bnNhdmVkIGRyYWZ0LlxuICBwdWJsaWMgb3Blbkhpc3RvcnkoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudElkID0gdGhpcy5pbnN0cnVjdGlvbnMoKT8uaW5zdHJ1Y3Rpb25zPy5pZDtcblxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKEluc3RydWN0aW9uSGlzdG9yeUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICBtYXhXaWR0aDogJzk1dncnLFxuICAgICAgbWF4SGVpZ2h0OiAnODV2aCcsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgZGF0YTogeyB2ZXJzaW9uczogdGhpcy5pbnN0cnVjdGlvbnMoKT8udmVyc2lvbnMgPz8gW10gfSxcbiAgICB9KVxuICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fcmVwb3J0RGF0YS5pbnN0cnVjdGlvbnMoKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25zKSA9PiB7XG4gICAgICAgIGlmIChpbnN0cnVjdGlvbnMuaW5zdHJ1Y3Rpb25zPy5pZCAhPT0gY3VycmVudElkKSB7XG4gICAgICAgICAgdGhpcy5fYXBwbHlJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmluc3RydWN0aW9ucy5zZXQoaW5zdHJ1Y3Rpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3JlcG9ydERhdGEuaW5zdHJ1Y3Rpb25zKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25zKSA9PiB0aGlzLl9hcHBseUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpKTtcblxuICAgIHRoaXMuX3JlcG9ydERhdGEuc2V0dGluZ3MoKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoc2V0dGluZ3M6IFJlcG9ydFNldHRpbmdzKSA9PiB0aGlzLl9hcHBseVNldHRpbmdzKHNldHRpbmdzKSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IFJlcG9ydEluc3RydWN0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zLnNldChpbnN0cnVjdGlvbnMpO1xuICAgIHRoaXMuY29udGVudC5zZXQoaW5zdHJ1Y3Rpb25zLmluc3RydWN0aW9ucz8uY29udGVudCA/PyBTQ0FGRk9MRCk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVNldHRpbmdzKHNldHRpbmdzOiBSZXBvcnRTZXR0aW5ncyk6IHZvaWQge1xuICAgIHRoaXMuc2V0dGluZ3Muc2V0KHNldHRpbmdzKTtcbiAgICB0aGlzLmNvbmN1cnJlbmN5LnNldChzZXR0aW5ncy5zZW1hbnRpY0J1aWxkQ29uY3VycmVuY3kpO1xuICB9XG59XG4iLCI8Zm9ybVxuICAgICpmc1NrZWxldG9uRm9ybT1cImxvYWRlZCgpXCJcbiAgICBmc0Zvcm1cbiAgICBbc3VibWl0XT1cInNhdmVcIj5cbiAgPGZzLWRpYWxvZz5cbiAgICA8ZnMtZGlhbG9nLXRpdGxlPlxuICAgICAgUmVwb3J0IFNldHRpbmdzXG4gICAgPC9mcy1kaWFsb2ctdGl0bGU+XG4gICAgPG1hdC1kaWFsb2ctY29udGVudD5cbiAgICAgIDxtYXQtdGFiLWdyb3VwIFsoc2VsZWN0ZWQpXT1cInNlbGVjdGVkVGFiXCI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIkFJIEtub3dsZWRnZVwiXG4gICAgICAgICAgICBuYW1lPVwia25vd2xlZGdlXCI+XG4gICAgICAgICAgPGZzLWFpLXJlcG9ydC1nbG9iYWwtc2V0dGluZ3MtYWkta25vd2xlZGdlXG4gICAgICAgICAgICAgIFtjb250ZW50XT1cImNvbnRlbnQoKVwiXG4gICAgICAgICAgICAgIChjb250ZW50Q2hhbmdlKT1cImNvbnRlbnQuc2V0KCRldmVudClcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImVkaXRvckNvbmZpZ1wiPlxuICAgICAgICAgIDwvZnMtYWktcmVwb3J0LWdsb2JhbC1zZXR0aW5ncy1haS1rbm93bGVkZ2U+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgIGxhYmVsPVwiU2VtYW50aWMgRGF0YWJhc2VcIlxuICAgICAgICAgICAgbmFtZT1cImJ1aWxkXCI+XG4gICAgICAgICAgPGZzLWFpLXJlcG9ydC1nbG9iYWwtc2V0dGluZ3Mtc2VtYW50aWMtZGF0YWJhc2U+XG4gICAgICAgICAgPC9mcy1haS1yZXBvcnQtZ2xvYmFsLXNldHRpbmdzLXNlbWFudGljLWRhdGFiYXNlPlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDxtYXQtdGFiXG4gICAgICAgICAgICBsYWJlbD1cIkdlbmVyYWxcIlxuICAgICAgICAgICAgbmFtZT1cImdlbmVyYWxcIj5cbiAgICAgICAgICA8ZnMtYWktcmVwb3J0LWdsb2JhbC1zZXR0aW5ncy1nZW5lcmFsXG4gICAgICAgICAgICAgIFtjb25jdXJyZW5jeV09XCJjb25jdXJyZW5jeSgpXCJcbiAgICAgICAgICAgICAgKGNvbmN1cnJlbmN5Q2hhbmdlKT1cImNvbmN1cnJlbmN5LnNldCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW21pbl09XCJzZXR0aW5ncygpIS5zZW1hbnRpY0J1aWxkQ29uY3VycmVuY3lNaW5cIlxuICAgICAgICAgICAgICBbbWF4XT1cInNldHRpbmdzKCkhLnNlbWFudGljQnVpbGRDb25jdXJyZW5jeU1heFwiPlxuICAgICAgICAgIDwvZnMtYWktcmVwb3J0LWdsb2JhbC1zZXR0aW5ncy1nZW5lcmFsPlxuICAgICAgICA8L21hdC10YWI+XG4gICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICAgIDwhLS0gVGhlIGZvb3RlciBmb2xsb3dzIHRoZSBzZWxlY3RlZCB0YWIuIEFJIEtub3dsZWRnZSBwcm9qZWN0cyBpdHMgb3duXG4gICAgICAgICAgIFNhdmUgfCBWaWV3IEhpc3RvcnkgfCBDYW5jZWwgcm93IChmcy1mb3JtLWRpYWxvZy1hY3Rpb25zIHJlbmRlcnNcbiAgICAgICAgICAgcHJvamVjdGVkIGNvbnRlbnQgYWZ0ZXIgU2F2ZS9DYW5jZWwsIHNvIHRoZSBkZWZhdWx0IHBhaXIgY2FuJ3Qga2VlcFxuICAgICAgICAgICBWaWV3IEhpc3RvcnkgYmVzaWRlIFNhdmUpOyBHZW5lcmFsIHVzZXMgdGhlIGRlZmF1bHQgU2F2ZS9DYW5jZWw7IHRoZVxuICAgICAgICAgICBTZW1hbnRpYyBEYXRhYmFzZSB0YWIgaXMgYSByZWFkL3J1biBzdXJmYWNlLCBzbyBpdCBnZXRzIGEgcHJpbWFyeVxuICAgICAgICAgICBDbG9zZSBwbHVzIGl0cyBCdWlsZC9SZWJ1aWxkL1N0b3AgYWN0aW9uLiAtLT5cbiAgICAgIDxmcy1mb3JtLWRpYWxvZy1hY3Rpb25zIFtzYXZlXT1cInNlbGVjdGVkVGFiID09PSAnZ2VuZXJhbCdcIj5cbiAgICAgICAgQGlmIChzZWxlY3RlZFRhYiA9PT0gJ2tub3dsZWRnZScpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgU2F2ZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5IaXN0b3J5KClcIj5cbiAgICAgICAgICAgIFZpZXcgSGlzdG9yeVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwibnVsbFwiPlxuICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzZWxlY3RlZFRhYiA9PT0gJ2J1aWxkJykge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgW21hdC1kaWFsb2ctY2xvc2VdPVwidW5kZWZpbmVkXCI+XG4gICAgICAgICAgICBDbG9zZVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoc2VsZWN0ZWRUYWIgPT09ICdidWlsZCcgJiYgc2VtYW50aWNEYXRhYmFzZSgpOyBhcyBkYikge1xuICAgICAgICAgIEBpZiAoZGIuYnVpbGRBY3RpdmUoKSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkYi5zdG9wQnVpbGQoKVwiPlxuICAgICAgICAgICAgICBTdG9wIEJ1aWxkXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDwhLS0gTmV2ZXIgZ2F0ZWQgb24gdGhlIHN0YXR1cyBsb2FkOiBhIHN0YXR1cyByZXNwb25zZSB0aGF0IGZhaWxzXG4gICAgICAgICAgICAgICAgIG11c3Qgbm90IHRha2UgdGhlIEJ1aWxkIGFjdGlvbiBhd2F5IHdpdGggaXQuIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGIuYnVpbGQoKVwiPlxuICAgICAgICAgICAgICB7eyBkYi5yZWJ1aWxkKCkgPyAnUmVidWlsZCcgOiAnQnVpbGQnIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZnMtZm9ybS1kaWFsb2ctYWN0aW9ucz5cbiAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cbiAgPC9mcy1kaWFsb2c+XG48L2Zvcm0+XG4iXX0=
|