@firestitch/report 18.18.1 → 18.18.2

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.
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, DestroyRef, computed, inject, signal, viewChild } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, DestroyRef, inject, signal, viewChild } from '@angular/core';
2
2
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { MatButton } from '@angular/material/button';
@@ -13,7 +13,6 @@ import { switchMap, tap } from 'rxjs/operators';
13
13
  import { ReportData } from '../../data/report.data';
14
14
  import { InstructionHistoryComponent } from '../instruction-history/instruction-history.component';
15
15
  import { AiKnowledgeComponent } from './components/ai-knowledge/ai-knowledge.component';
16
- import { GeneralComponent } from './components/general/general.component';
17
16
  import { SemanticDatabaseComponent } from './components/semantic-database/semantic-database.component';
18
17
  import * as i0 from "@angular/core";
19
18
  import * as i1 from "@angular/forms";
@@ -22,8 +21,8 @@ import * as i3 from "@firestitch/form";
22
21
  import * as i4 from "@firestitch/skeleton";
23
22
  import * as i5 from "@firestitch/tabs";
24
23
  import * as i6 from "@angular/material/tabs";
25
- // Matches the backend cap (ReportsView::INSTRUCTIONS_MAX_LENGTH) — the document
26
- // rides along on every agent turn, so it is a prompt-budget guard.
24
+ // Matches the backend cap (CreateReportInstructionOperation::MAX_LENGTH) — the
25
+ // document rides along on every agent turn, so it is a prompt-budget guard.
27
26
  const MAX_LENGTH = 50000;
28
27
  // Seeded into the editor (client-side, unsaved) when no version exists yet, so
29
28
  // the operator sees the intended shape of the document.
@@ -34,25 +33,31 @@ const SCAFFOLD = [
34
33
  '',
35
34
  '# Business rules',
36
35
  '',
37
- '*Rules the AI should apply when building or explaining reports.*',
36
+ '*Rules to apply when building or explaining reports.*',
38
37
  '',
39
38
  '# Special cases',
40
39
  '',
41
- '*Known exceptions and data quirks the AI cannot infer on its own.*',
40
+ '*Known exceptions and data quirks that can\'t be worked out from the data alone.*',
42
41
  '',
43
42
  ].join('\n');
44
- // Global report settings, opened from the reports listing's gear. A thin shell:
45
- // the dialog frame, the tab group, and a per-tab footer. Each tab is its own
46
- // component —
47
- // AI Knowledge — the operator-authored markdown document appended to the
48
- // report agent's system instructions on every chat turn. Its footer carries a
43
+ // Global report settings, opened from the reports listing's gear. Neither tab
44
+ // is chat-only, so nothing here is worded as AI: an install that turns the
45
+ // report chat off and builds reports over MCP still keeps both up to date.
46
+ // A thin shell: the dialog frame, the tab group, and a per-tab footer. Each tab
47
+ // is its own component —
48
+ // Knowledge — the operator-authored markdown document every report build
49
+ // reads: the in-app agent's system instructions on each chat turn, and
50
+ // ReadReportKnowledgeOperation for a client over MCP. Its footer carries a
49
51
  // View History button opening the version-history dialog (restores happen
50
52
  // there; the shell refreshes on close).
51
- // Semantic Database — the build scoreboard the AI is built from, with a
52
- // self-contained Build action.
53
- // General — report-module settings (the semantic-build concurrency).
54
- // The shell owns the shared data (the instructions document, the settings for
55
- // General) plus the tab-aware save; everything else lives in the children.
53
+ // Semantic Database — the build scoreboard reports are built and run from,
54
+ // with a self-contained Build action.
55
+ // There is no General tab while the build's AI function pass is disabled
56
+ // (ReportSemanticBuildProcess::run): its one field, the semantic-build
57
+ // concurrency, is read only by that pass. The reports/settings route that
58
+ // stores it, and ReportData.settings()/saveSettings(), are left in place.
59
+ // The shell owns the instructions document and the save; everything else lives
60
+ // in the children.
56
61
  export class GlobalSettingsComponent {
57
62
  selectedTab = 'knowledge';
58
63
  // The Semantic Database tab component, so the shared footer can drive its
@@ -63,15 +68,10 @@ export class GlobalSettingsComponent {
63
68
  content = signal('');
64
69
  editorConfig = {
65
70
  maxLength: MAX_LENGTH,
66
- placeholder: 'Terminology, business rules and special cases the report AI should know…',
71
+ placeholder: 'Business terms, rules and special cases every report should follow…',
67
72
  };
68
- // Both null until loaded — the form waits behind the skeleton until each is in.
73
+ // null until loaded — the form waits behind the skeleton until it is in.
69
74
  instructions = signal(null);
70
- settings = signal(null);
71
- // The General tab's concurrency draft (bound to its field), seeded from settings.
72
- concurrency = signal(0);
73
- // Gate the whole form on both loads, so every tab's fields are ready to render.
74
- loaded = computed(() => !!this.instructions() && !!this.settings());
75
75
  _dialogRef = inject(MatDialogRef);
76
76
  _dialog = inject(MatDialog);
77
77
  _reportData = inject(ReportData);
@@ -80,23 +80,12 @@ export class GlobalSettingsComponent {
80
80
  constructor() {
81
81
  this._init();
82
82
  }
83
- // The footer Save is shared, so it saves whatever the current tab owns: the
84
- // General tab persists its settings (and stays open); AI Knowledge saves a new
85
- // document version and closes.
86
- save = () => {
87
- if (this.selectedTab === 'general') {
88
- return this._reportData.saveSettings({ semanticBuildConcurrency: this.concurrency() })
89
- .pipe(tap((settings) => {
90
- this._applySettings(settings);
91
- this._message.success('Settings saved');
92
- }));
93
- }
94
- return this._reportData.saveInstructions(this.content())
95
- .pipe(tap((instructions) => {
96
- this._message.success('AI knowledge saved');
97
- this._dialogRef.close(instructions);
98
- }));
99
- };
83
+ // Only the Knowledge tab saves: a new document version, then the dialog closes.
84
+ save = () => this._reportData.saveInstructions(this.content())
85
+ .pipe(tap((instructions) => {
86
+ this._message.success('Knowledge saved');
87
+ this._dialogRef.close(instructions);
88
+ }));
100
89
  // Open the version-history dialog. Restores happen inside it, so when it
101
90
  // closes (however it closes) re-fetch the document: a restore changed the
102
91
  // current version and must reseed the editor; otherwise just refresh the
@@ -125,20 +114,13 @@ export class GlobalSettingsComponent {
125
114
  this._reportData.instructions()
126
115
  .pipe(takeUntilDestroyed(this._destroyRef))
127
116
  .subscribe((instructions) => this._applyInstructions(instructions));
128
- this._reportData.settings()
129
- .pipe(takeUntilDestroyed(this._destroyRef))
130
- .subscribe((settings) => this._applySettings(settings));
131
117
  }
132
118
  _applyInstructions(instructions) {
133
119
  this.instructions.set(instructions);
134
120
  this.content.set(instructions.instructions?.content ?? SCAFFOLD);
135
121
  }
136
- _applySettings(settings) {
137
- this.settings.set(settings);
138
- this.concurrency.set(settings.semanticBuildConcurrency);
139
- }
140
122
  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 <!-- 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 });
123
+ 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=\"instructions()\"\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=\"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-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <!-- The footer follows the selected tab. 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); the Semantic Database tab is a read/run\n surface, so it gets a primary Close plus its Build/Rebuild/Stop\n action. Neither uses the default Save/Cancel pair. -->\n <fs-form-dialog-actions [save]=\"false\">\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: SemanticDatabaseComponent, selector: "fs-ai-report-global-settings-semantic-database" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
142
124
  }
143
125
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GlobalSettingsComponent, decorators: [{
144
126
  type: Component,
@@ -154,8 +136,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
154
136
  MatDialogContent,
155
137
  MatTabsModule,
156
138
  AiKnowledgeComponent,
157
- GeneralComponent,
158
139
  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 <!-- 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"] }]
140
+ ], template: "<form\n *fsSkeletonForm=\"instructions()\"\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=\"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-group>\n </mat-dialog-content>\n <mat-dialog-actions>\n <!-- The footer follows the selected tab. 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); the Semantic Database tab is a read/run\n surface, so it gets a primary Close plus its Build/Rebuild/Stop\n action. Neither uses the default Save/Cancel pair. -->\n <fs-form-dialog-actions [save]=\"false\">\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
141
  }], ctorParameters: () => [] });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9kaWFsb2dzL2dsb2JhbC1zZXR0aW5ncy9nbG9iYWwtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RpYWxvZ3MvZ2xvYmFsLXNldHRpbmdzL2dsb2JhbC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2SCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1B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Q1osZ0JBQWdCLHdLQUNoQixZQUFZLG9hQUNaLFNBQVMsaUxBQ1QsZ0JBQWdCLDRIQUNoQixjQUFjLHFMQUNkLGdCQUFnQix3R0FDaEIsYUFBYSw2b0JBQ2Isb0JBQW9CLGlKQUNwQixnQkFBZ0Isd0pBQ2hCLHlCQUF5Qjs7NEZBR2hCLHVCQUF1QjtrQkFyQm5DLFNBQVM7c0NBR1MsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLGdCQUFnQjt3QkFDaEIseUJBQXlCO3FCQUMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTWF0QnV0dG9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5cbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IEZzRm9ybU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2Zvcm0nO1xuaW1wb3J0IHsgRnNNYXJrZG93bkVkaXRvckNvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL21hcmtkb3duLWVkaXRvcic7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9za2VsZXRvbic7XG5pbXBvcnQgeyBGc1RhYnNNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC90YWJzJztcblxuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7IFJlcG9ydEluc3RydWN0aW9ucywgUmVwb3J0U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25IaXN0b3J5Q29tcG9uZW50IH0gZnJvbSAnLi4vaW5zdHJ1Y3Rpb24taGlzdG9yeS9pbnN0cnVjdGlvbi1oaXN0b3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBaUtub3dsZWRnZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9haS1rbm93bGVkZ2UvYWkta25vd2xlZGdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHZW5lcmFsQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2dlbmVyYWwvZ2VuZXJhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VtYW50aWNEYXRhYmFzZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZW1hbnRpYy1kYXRhYmFzZS9zZW1hbnRpYy1kYXRhYmFzZS5jb21wb25lbnQnO1xuXG5cbi8vIE1hdGNoZXMgdGhlIGJhY2tlbmQgY2FwIChSZXBvcnRzVmlldzo6SU5TVFJVQ1RJT05TX01BWF9MRU5HVEgpIOKAlCB0aGUgZG9jdW1lbnRcbi8vIHJpZGVzIGFsb25nIG9uIGV2ZXJ5IGFnZW50IHR1cm4sIHNvIGl0IGlzIGEgcHJvbXB0LWJ1ZGdldCBndWFyZC5cbmNvbnN0IE1BWF9MRU5HVEggPSA1MDAwMDtcblxuLy8gU2VlZGVkIGludG8gdGhlIGVkaXRvciAoY2xpZW50LXNpZGUsIHVuc2F2ZWQpIHdoZW4gbm8gdmVyc2lvbiBleGlzdHMgeWV0LCBzb1xuLy8gdGhlIG9wZXJhdG9yIHNlZXMgdGhlIGludGVuZGVkIHNoYXBlIG9mIHRoZSBkb2N1bWVudC5cbmNvbnN0IFNDQUZGT0xEID0gW1xuICAnIyBHbG9zc2FyeScsXG4gICcnLFxuICAnKlRlcm1zIHlvdXIgdGVhbSB1c2VzIGFuZCB3aGF0IHRoZXkgbWVhbiBpbiB0aGUgZGF0YSDigJQgZS5nLiBcImFjdGl2ZSBhY2NvdW50c1wiIGFyZSBhY2NvdW50cyB3aXRoIGFuIG9yZGVyIGluIHRoZSBsYXN0IDkwIGRheXMuKicsXG4gICcnLFxuICAnIyBCdXNpbmVzcyBydWxlcycsXG4gICcnLFxuICAnKlJ1bGVzIHRoZSBBSSBzaG91bGQgYXBwbHkgd2hlbiBidWlsZGluZyBvciBleHBsYWluaW5nIHJlcG9ydHMuKicsXG4gICcnLFxuICAnIyBTcGVjaWFsIGNhc2VzJyxcbiAgJycsXG4gICcqS25vd24gZXhjZXB0aW9ucyBhbmQgZGF0YSBxdWlya3MgdGhlIEFJIGNhbm5vdCBpbmZlciBvbiBpdHMgb3duLionLFxuICAnJyxcbl0uam9pbignXFxuJyk7XG5cblxuLy8gR2xvYmFsIHJlcG9ydCBzZXR0aW5ncywgb3BlbmVkIGZyb20gdGhlIHJlcG9ydHMgbGlzdGluZydzIGdlYXIuIEEgdGhpbiBzaGVsbDpcbi8vIHRoZSBkaWFsb2cgZnJhbWUsIHRoZSB0YWIgZ3JvdXAsIGFuZCBhIHBlci10YWIgZm9vdGVyLiBFYWNoIHRhYiBpcyBpdHMgb3duXG4vLyBjb21wb25lbnQg4oCUXG4vLyAgIEFJIEtub3dsZWRnZSDigJQgdGhlIG9wZXJhdG9yLWF1dGhvcmVkIG1hcmtkb3duIGRvY3VtZW50IGFwcGVuZGVkIHRvIHRoZVxuLy8gICByZXBvcnQgYWdlbnQncyBzeXN0ZW0gaW5zdHJ1Y3Rpb25zIG9uIGV2ZXJ5IGNoYXQgdHVybi4gSXRzIGZvb3RlciBjYXJyaWVzIGFcbi8vICAgVmlldyBIaXN0b3J5IGJ1dHRvbiBvcGVuaW5nIHRoZSB2ZXJzaW9uLWhpc3RvcnkgZGlhbG9nIChyZXN0b3JlcyBoYXBwZW5cbi8vICAgdGhlcmU7IHRoZSBzaGVsbCByZWZyZXNoZXMgb24gY2xvc2UpLlxuLy8gICBTZW1hbnRpYyBEYXRhYmFzZSDigJQgdGhlIGJ1aWxkIHNjb3JlYm9hcmQgdGhlIEFJIGlzIGJ1aWx0IGZyb20sIHdpdGggYVxuLy8gICBzZWxmLWNvbnRhaW5lZCBCdWlsZCBhY3Rpb24uXG4vLyAgIEdlbmVyYWwg4oCUIHJlcG9ydC1tb2R1bGUgc2V0dGluZ3MgKHRoZSBzZW1hbnRpYy1idWlsZCBjb25jdXJyZW5jeSkuXG4vLyBUaGUgc2hlbGwgb3ducyB0aGUgc2hhcmVkIGRhdGEgKHRoZSBpbnN0cnVjdGlvbnMgZG9jdW1lbnQsIHRoZSBzZXR0aW5ncyBmb3Jcbi8vIEdlbmVyYWwpIHBsdXMgdGhlIHRhYi1hd2FyZSBzYXZlOyBldmVyeXRoaW5nIGVsc2UgbGl2ZXMgaW4gdGhlIGNoaWxkcmVuLlxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9nbG9iYWwtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nbG9iYWwtc2V0dGluZ3MuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBGc0RpYWxvZ01vZHVsZSxcbiAgICBGc0Zvcm1Nb2R1bGUsXG4gICAgRnNTa2VsZXRvbk1vZHVsZSxcbiAgICBGc1RhYnNNb2R1bGUsXG4gICAgTWF0QnV0dG9uLFxuICAgIE1hdERpYWxvZ0FjdGlvbnMsXG4gICAgTWF0RGlhbG9nQ2xvc2UsXG4gICAgTWF0RGlhbG9nQ29udGVudCxcbiAgICBNYXRUYWJzTW9kdWxlLFxuICAgIEFpS25vd2xlZGdlQ29tcG9uZW50LFxuICAgIEdlbmVyYWxDb21wb25lbnQsXG4gICAgU2VtYW50aWNEYXRhYmFzZUNvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgR2xvYmFsU2V0dGluZ3NDb21wb25lbnQge1xuXG4gIHB1YmxpYyBzZWxlY3RlZFRhYiA9ICdrbm93bGVkZ2UnO1xuXG4gIC8vIFRoZSBTZW1hbnRpYyBEYXRhYmFzZSB0YWIgY29tcG9uZW50LCBzbyB0aGUgc2hhcmVkIGZvb3RlciBjYW4gZHJpdmUgaXRzXG4gIC8vIEJ1aWxkL1JlYnVpbGQvU3RvcCBhY3Rpb24gaW5saW5lIG5leHQgdG8gQ2xvc2UgKHRoZSBidWlsZCBzdGF0ZSBsaXZlcyB0aGVyZSkuXG4gIHB1YmxpYyByZWFkb25seSBzZW1hbnRpY0RhdGFiYXNlID0gdmlld0NoaWxkKFNlbWFudGljRGF0YWJhc2VDb21wb25lbnQpO1xuXG4gIC8vIFRoZSBlZGl0b3IncyBkcmFmdCwgaGVsZCBvbiB0aGUgc2hlbGwgc28gc3dpdGNoaW5nIHRhYnMgbmV2ZXIgbG9zZXMgYW4gZWRpdFxuICAvLyDigJQgc2VlZGVkIGZyb20gdGhlIGN1cnJlbnQgdmVyc2lvbiAob3IgdGhlIHNjYWZmb2xkKS5cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRlbnQgPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGVkaXRvckNvbmZpZzogRnNNYXJrZG93bkVkaXRvckNvbmZpZyA9IHtcbiAgICBtYXhMZW5ndGg6IE1BWF9MRU5HVEgsXG4gICAgcGxhY2Vob2xkZXI6ICdUZXJtaW5vbG9neSwgYnVzaW5lc3MgcnVsZXMgYW5kIHNwZWNpYWwgY2FzZXMgdGhlIHJlcG9ydCBBSSBzaG91bGQga25vd+KApicsXG4gIH07XG5cbiAgLy8gQm90aCBudWxsIHVudGlsIGxvYWRlZCDigJQgdGhlIGZvcm0gd2FpdHMgYmVoaW5kIHRoZSBza2VsZXRvbiB1bnRpbCBlYWNoIGlzIGluLlxuICBwdWJsaWMgcmVhZG9ubHkgaW5zdHJ1Y3Rpb25zID0gc2lnbmFsPFJlcG9ydEluc3RydWN0aW9ucyB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgcmVhZG9ubHkgc2V0dGluZ3MgPSBzaWduYWw8UmVwb3J0U2V0dGluZ3MgfCBudWxsPihudWxsKTtcblxuICAvLyBUaGUgR2VuZXJhbCB0YWIncyBjb25jdXJyZW5jeSBkcmFmdCAoYm91bmQgdG8gaXRzIGZpZWxkKSwgc2VlZGVkIGZyb20gc2V0dGluZ3MuXG4gIHB1YmxpYyByZWFkb25seSBjb25jdXJyZW5jeSA9IHNpZ25hbDxudW1iZXI+KDApO1xuXG4gIC8vIEdhdGUgdGhlIHdob2xlIGZvcm0gb24gYm90aCBsb2Fkcywgc28gZXZlcnkgdGFiJ3MgZmllbGRzIGFyZSByZWFkeSB0byByZW5kZXIuXG4gIHB1YmxpYyByZWFkb25seSBsb2FkZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiAhIXRoaXMuaW5zdHJ1Y3Rpb25zKCkgJiYgISF0aGlzLnNldHRpbmdzKCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZ1JlZiA9IGluamVjdDxNYXREaWFsb2dSZWY8R2xvYmFsU2V0dGluZ3NDb21wb25lbnQ+PihNYXREaWFsb2dSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZSA9IGluamVjdChGc01lc3NhZ2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIC8vIFRoZSBmb290ZXIgU2F2ZSBpcyBzaGFyZWQsIHNvIGl0IHNhdmVzIHdoYXRldmVyIHRoZSBjdXJyZW50IHRhYiBvd25zOiB0aGVcbiAgLy8gR2VuZXJhbCB0YWIgcGVyc2lzdHMgaXRzIHNldHRpbmdzIChhbmQgc3RheXMgb3Blbik7IEFJIEtub3dsZWRnZSBzYXZlcyBhIG5ld1xuICAvLyBkb2N1bWVudCB2ZXJzaW9uIGFuZCBjbG9zZXMuXG4gIHB1YmxpYyBzYXZlID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiID09PSAnZ2VuZXJhbCcpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZXBvcnREYXRhLnNhdmVTZXR0aW5ncyh7IHNlbWFudGljQnVpbGRDb25jdXJyZW5jeTogdGhpcy5jb25jdXJyZW5jeSgpIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgoc2V0dGluZ3M6IFJlcG9ydFNldHRpbmdzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9hcHBseVNldHRpbmdzKHNldHRpbmdzKTtcbiAgICAgICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnU2V0dGluZ3Mgc2F2ZWQnKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGF0YS5zYXZlSW5zdHJ1Y3Rpb25zKHRoaXMuY29udGVudCgpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoaW5zdHJ1Y3Rpb25zOiBSZXBvcnRJbnN0cnVjdGlvbnMpID0+IHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0FJIGtub3dsZWRnZSBzYXZlZCcpO1xuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShpbnN0cnVjdGlvbnMpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH07XG5cbiAgLy8gT3BlbiB0aGUgdmVyc2lvbi1oaXN0b3J5IGRpYWxvZy4gUmVzdG9yZXMgaGFwcGVuIGluc2lkZSBpdCwgc28gd2hlbiBpdFxuICAvLyBjbG9zZXMgKGhvd2V2ZXIgaXQgY2xvc2VzKSByZS1mZXRjaCB0aGUgZG9jdW1lbnQ6IGEgcmVzdG9yZSBjaGFuZ2VkIHRoZVxuICAvLyBjdXJyZW50IHZlcnNpb24gYW5kIG11c3QgcmVzZWVkIHRoZSBlZGl0b3I7IG90aGVyd2lzZSBqdXN0IHJlZnJlc2ggdGhlXG4gIC8vIHZlcnNpb24gbGlzdCB3aXRob3V0IHRvdWNoaW5nIGFuIHVuc2F2ZWQgZHJhZnQuXG4gIHB1YmxpYyBvcGVuSGlzdG9yeSgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50SWQgPSB0aGlzLmluc3RydWN0aW9ucygpPy5pbnN0cnVjdGlvbnM/LmlkO1xuXG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oSW5zdHJ1Y3Rpb25IaXN0b3J5Q29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgIG1heFdpZHRoOiAnOTV2dycsXG4gICAgICBtYXhIZWlnaHQ6ICc4NXZoJyxcbiAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICBkYXRhOiB7IHZlcnNpb25zOiB0aGlzLmluc3RydWN0aW9ucygpPy52ZXJzaW9ucyA/PyBbXSB9LFxuICAgIH0pXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9yZXBvcnREYXRhLmluc3RydWN0aW9ucygpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoaW5zdHJ1Y3Rpb25zOiBSZXBvcnRJbnN0cnVjdGlvbnMpID0+IHtcbiAgICAgICAgaWYgKGluc3RydWN0aW9ucy5pbnN0cnVjdGlvbnM/LmlkICE9PSBjdXJyZW50SWQpIHtcbiAgICAgICAgICB0aGlzLl9hcHBseUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25zLnNldChpbnN0cnVjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVwb3J0RGF0YS5pbnN0cnVjdGlvbnMoKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoaW5zdHJ1Y3Rpb25zOiBSZXBvcnRJbnN0cnVjdGlvbnMpID0+IHRoaXMuX2FwcGx5SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucykpO1xuXG4gICAgdGhpcy5fcmVwb3J0RGF0YS5zZXR0aW5ncygpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChzZXR0aW5nczogUmVwb3J0U2V0dGluZ3MpID0+IHRoaXMuX2FwcGx5U2V0dGluZ3Moc2V0dGluZ3MpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25zKTogdm9pZCB7XG4gICAgdGhpcy5pbnN0cnVjdGlvbnMuc2V0KGluc3RydWN0aW9ucyk7XG4gICAgdGhpcy5jb250ZW50LnNldChpbnN0cnVjdGlvbnMuaW5zdHJ1Y3Rpb25zPy5jb250ZW50ID8/IFNDQUZGT0xEKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5U2V0dGluZ3Moc2V0dGluZ3M6IFJlcG9ydFNldHRpbmdzKTogdm9pZCB7XG4gICAgdGhpcy5zZXR0aW5ncy5zZXQoc2V0dGluZ3MpO1xuICAgIHRoaXMuY29uY3VycmVuY3kuc2V0KHNldHRpbmdzLnNlbWFudGljQnVpbGRDb25jdXJyZW5jeSk7XG4gIH1cbn1cbiIsIjxmb3JtXG4gICAgKmZzU2tlbGV0b25Gb3JtPVwibG9hZGVkKClcIlxuICAgIGZzRm9ybVxuICAgIFtzdWJtaXRdPVwic2F2ZVwiPlxuICA8ZnMtZGlhbG9nPlxuICAgIDxmcy1kaWFsb2ctdGl0bGU+XG4gICAgICBSZXBvcnQgU2V0dGluZ3NcbiAgICA8L2ZzLWRpYWxvZy10aXRsZT5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPG1hdC10YWItZ3JvdXAgWyhzZWxlY3RlZCldPVwic2VsZWN0ZWRUYWJcIj5cbiAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgIGxhYmVsPVwiQUkgS25vd2xlZGdlXCJcbiAgICAgICAgICAgIG5hbWU9XCJrbm93bGVkZ2VcIj5cbiAgICAgICAgICA8ZnMtYWktcmVwb3J0LWdsb2JhbC1zZXR0aW5ncy1haS1rbm93bGVkZ2VcbiAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiY29udGVudCgpXCJcbiAgICAgICAgICAgICAgKGNvbnRlbnRDaGFuZ2UpPVwiY29udGVudC5zZXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwiZWRpdG9yQ29uZmlnXCI+XG4gICAgICAgICAgPC9mcy1haS1yZXBvcnQtZ2xvYmFsLXNldHRpbmdzLWFpLWtub3dsZWRnZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8bWF0LXRhYlxuICAgICAgICAgICAgbGFiZWw9XCJTZW1hbnRpYyBEYXRhYmFzZVwiXG4gICAgICAgICAgICBuYW1lPVwiYnVpbGRcIj5cbiAgICAgICAgICA8ZnMtYWktcmVwb3J0LWdsb2JhbC1zZXR0aW5ncy1zZW1hbnRpYy1kYXRhYmFzZT5cbiAgICAgICAgICA8L2ZzLWFpLXJlcG9ydC1nbG9iYWwtc2V0dGluZ3Mtc2VtYW50aWMtZGF0YWJhc2U+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgIGxhYmVsPVwiR2VuZXJhbFwiXG4gICAgICAgICAgICBuYW1lPVwiZ2VuZXJhbFwiPlxuICAgICAgICAgIDxmcy1haS1yZXBvcnQtZ2xvYmFsLXNldHRpbmdzLWdlbmVyYWxcbiAgICAgICAgICAgICAgW2NvbmN1cnJlbmN5XT1cImNvbmN1cnJlbmN5KClcIlxuICAgICAgICAgICAgICAoY29uY3VycmVuY3lDaGFuZ2UpPVwiY29uY3VycmVuY3kuc2V0KCRldmVudClcIlxuICAgICAgICAgICAgICBbbWluXT1cInNldHRpbmdzKCkhLnNlbWFudGljQnVpbGRDb25jdXJyZW5jeU1pblwiXG4gICAgICAgICAgICAgIFttYXhdPVwic2V0dGluZ3MoKSEuc2VtYW50aWNCdWlsZENvbmN1cnJlbmN5TWF4XCI+XG4gICAgICAgICAgPC9mcy1haS1yZXBvcnQtZ2xvYmFsLXNldHRpbmdzLWdlbmVyYWw+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgICAgPCEtLSBUaGUgZm9vdGVyIGZvbGxvd3MgdGhlIHNlbGVjdGVkIHRhYi4gQUkgS25vd2xlZGdlIHByb2plY3RzIGl0cyBvd25cbiAgICAgICAgICAgU2F2ZSB8IFZpZXcgSGlzdG9yeSB8IENhbmNlbCByb3cgKGZzLWZvcm0tZGlhbG9nLWFjdGlvbnMgcmVuZGVyc1xuICAgICAgICAgICBwcm9qZWN0ZWQgY29udGVudCBhZnRlciBTYXZlL0NhbmNlbCwgc28gdGhlIGRlZmF1bHQgcGFpciBjYW4ndCBrZWVwXG4gICAgICAgICAgIFZpZXcgSGlzdG9yeSBiZXNpZGUgU2F2ZSk7IEdlbmVyYWwgdXNlcyB0aGUgZGVmYXVsdCBTYXZlL0NhbmNlbDsgdGhlXG4gICAgICAgICAgIFNlbWFudGljIERhdGFiYXNlIHRhYiBpcyBhIHJlYWQvcnVuIHN1cmZhY2UsIHNvIGl0IGdldHMgYSBwcmltYXJ5XG4gICAgICAgICAgIENsb3NlIHBsdXMgaXRzIEJ1aWxkL1JlYnVpbGQvU3RvcCBhY3Rpb24uIC0tPlxuICAgICAgPGZzLWZvcm0tZGlhbG9nLWFjdGlvbnMgW3NhdmVdPVwic2VsZWN0ZWRUYWIgPT09ICdnZW5lcmFsJ1wiPlxuICAgICAgICBAaWYgKHNlbGVjdGVkVGFiID09PSAna25vd2xlZGdlJykge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICBTYXZlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbkhpc3RvcnkoKVwiPlxuICAgICAgICAgICAgVmlldyBIaXN0b3J5XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCI+XG4gICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNlbGVjdGVkVGFiID09PSAnYnVpbGQnKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJ1bmRlZmluZWRcIj5cbiAgICAgICAgICAgIENsb3NlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzZWxlY3RlZFRhYiA9PT0gJ2J1aWxkJyAmJiBzZW1hbnRpY0RhdGFiYXNlKCk7IGFzIGRiKSB7XG4gICAgICAgICAgQGlmIChkYi5idWlsZEFjdGl2ZSgpKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRiLnN0b3BCdWlsZCgpXCI+XG4gICAgICAgICAgICAgIFN0b3AgQnVpbGRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPCEtLSBOZXZlciBnYXRlZCBvbiB0aGUgc3RhdHVzIGxvYWQ6IGEgc3RhdHVzIHJlc3BvbnNlIHRoYXQgZmFpbHNcbiAgICAgICAgICAgICAgICAgbXVzdCBub3QgdGFrZSB0aGUgQnVpbGQgYWN0aW9uIGF3YXkgd2l0aCBpdC4gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkYi5idWlsZCgpXCI+XG4gICAgICAgICAgICAgIHt7IGRiLnJlYnVpbGQoKSA/ICdSZWJ1aWxkJyA6ICdCdWlsZCcgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9mcy1mb3JtLWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8L2ZzLWRpYWxvZz5cbjwvZm9ybT5cbiJdfQ==
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9kaWFsb2dzL2dsb2JhbC1zZXR0aW5ncy9nbG9iYWwtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RpYWxvZ3MvZ2xvYmFsLXNldHRpbmdzL2dsb2JhbC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0Is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QUNYLGNBQWMsOFRBQ2QsWUFBWSxteEJBQ1osZ0JBQWdCLHdLQUNoQixZQUFZLG9hQUNaLFNBQVMsaUxBQ1QsZ0JBQWdCLDRIQUNoQixjQUFjLHFMQUNkLGdCQUFnQix3R0FDaEIsYUFBYSw2b0JBQ2Isb0JBQW9CLGlKQUNwQix5QkFBeUI7OzRGQUdoQix1QkFBdUI7a0JBcEJuQyxTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQix5QkFBeUI7cUJBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRGVzdHJveVJlZiwgaW5qZWN0LCBzaWduYWwsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0FjdGlvbnMsIE1hdERpYWxvZ0Nsb3NlLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0VGFic01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuXG5pbXBvcnQgeyBGc0RpYWxvZ01vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2RpYWxvZyc7XG5pbXBvcnQgeyBGc0Zvcm1Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9mb3JtJztcbmltcG9ydCB7IEZzTWFya2Rvd25FZGl0b3JDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9tYXJrZG93bi1lZGl0b3InO1xuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1NrZWxldG9uTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2tlbGV0b24nO1xuaW1wb3J0IHsgRnNUYWJzTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvdGFicyc7XG5cbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBSZXBvcnREYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS9yZXBvcnQuZGF0YSc7XG5pbXBvcnQgeyBSZXBvcnRJbnN0cnVjdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25IaXN0b3J5Q29tcG9uZW50IH0gZnJvbSAnLi4vaW5zdHJ1Y3Rpb24taGlzdG9yeS9pbnN0cnVjdGlvbi1oaXN0b3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBaUtub3dsZWRnZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9haS1rbm93bGVkZ2UvYWkta25vd2xlZGdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZW1hbnRpY0RhdGFiYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NlbWFudGljLWRhdGFiYXNlL3NlbWFudGljLWRhdGFiYXNlLmNvbXBvbmVudCc7XG5cblxuLy8gTWF0Y2hlcyB0aGUgYmFja2VuZCBjYXAgKENyZWF0ZVJlcG9ydEluc3RydWN0aW9uT3BlcmF0aW9uOjpNQVhfTEVOR1RIKSDigJQgdGhlXG4vLyBkb2N1bWVudCByaWRlcyBhbG9uZyBvbiBldmVyeSBhZ2VudCB0dXJuLCBzbyBpdCBpcyBhIHByb21wdC1idWRnZXQgZ3VhcmQuXG5jb25zdCBNQVhfTEVOR1RIID0gNTAwMDA7XG5cbi8vIFNlZWRlZCBpbnRvIHRoZSBlZGl0b3IgKGNsaWVudC1zaWRlLCB1bnNhdmVkKSB3aGVuIG5vIHZlcnNpb24gZXhpc3RzIHlldCwgc29cbi8vIHRoZSBvcGVyYXRvciBzZWVzIHRoZSBpbnRlbmRlZCBzaGFwZSBvZiB0aGUgZG9jdW1lbnQuXG5jb25zdCBTQ0FGRk9MRCA9IFtcbiAgJyMgR2xvc3NhcnknLFxuICAnJyxcbiAgJypUZXJtcyB5b3VyIHRlYW0gdXNlcyBhbmQgd2hhdCB0aGV5IG1lYW4gaW4gdGhlIGRhdGEg4oCUIGUuZy4gXCJhY3RpdmUgYWNjb3VudHNcIiBhcmUgYWNjb3VudHMgd2l0aCBhbiBvcmRlciBpbiB0aGUgbGFzdCA5MCBkYXlzLionLFxuICAnJyxcbiAgJyMgQnVzaW5lc3MgcnVsZXMnLFxuICAnJyxcbiAgJypSdWxlcyB0byBhcHBseSB3aGVuIGJ1aWxkaW5nIG9yIGV4cGxhaW5pbmcgcmVwb3J0cy4qJyxcbiAgJycsXG4gICcjIFNwZWNpYWwgY2FzZXMnLFxuICAnJyxcbiAgJypLbm93biBleGNlcHRpb25zIGFuZCBkYXRhIHF1aXJrcyB0aGF0IGNhblxcJ3QgYmUgd29ya2VkIG91dCBmcm9tIHRoZSBkYXRhIGFsb25lLionLFxuICAnJyxcbl0uam9pbignXFxuJyk7XG5cblxuLy8gR2xvYmFsIHJlcG9ydCBzZXR0aW5ncywgb3BlbmVkIGZyb20gdGhlIHJlcG9ydHMgbGlzdGluZydzIGdlYXIuIE5laXRoZXIgdGFiXG4vLyBpcyBjaGF0LW9ubHksIHNvIG5vdGhpbmcgaGVyZSBpcyB3b3JkZWQgYXMgQUk6IGFuIGluc3RhbGwgdGhhdCB0dXJucyB0aGVcbi8vIHJlcG9ydCBjaGF0IG9mZiBhbmQgYnVpbGRzIHJlcG9ydHMgb3ZlciBNQ1Agc3RpbGwga2VlcHMgYm90aCB1cCB0byBkYXRlLlxuLy8gQSB0aGluIHNoZWxsOiB0aGUgZGlhbG9nIGZyYW1lLCB0aGUgdGFiIGdyb3VwLCBhbmQgYSBwZXItdGFiIGZvb3Rlci4gRWFjaCB0YWJcbi8vIGlzIGl0cyBvd24gY29tcG9uZW50IOKAlFxuLy8gICBLbm93bGVkZ2Ug4oCUIHRoZSBvcGVyYXRvci1hdXRob3JlZCBtYXJrZG93biBkb2N1bWVudCBldmVyeSByZXBvcnQgYnVpbGRcbi8vICAgcmVhZHM6IHRoZSBpbi1hcHAgYWdlbnQncyBzeXN0ZW0gaW5zdHJ1Y3Rpb25zIG9uIGVhY2ggY2hhdCB0dXJuLCBhbmRcbi8vICAgUmVhZFJlcG9ydEtub3dsZWRnZU9wZXJhdGlvbiBmb3IgYSBjbGllbnQgb3ZlciBNQ1AuIEl0cyBmb290ZXIgY2FycmllcyBhXG4vLyAgIFZpZXcgSGlzdG9yeSBidXR0b24gb3BlbmluZyB0aGUgdmVyc2lvbi1oaXN0b3J5IGRpYWxvZyAocmVzdG9yZXMgaGFwcGVuXG4vLyAgIHRoZXJlOyB0aGUgc2hlbGwgcmVmcmVzaGVzIG9uIGNsb3NlKS5cbi8vICAgU2VtYW50aWMgRGF0YWJhc2Ug4oCUIHRoZSBidWlsZCBzY29yZWJvYXJkIHJlcG9ydHMgYXJlIGJ1aWx0IGFuZCBydW4gZnJvbSxcbi8vICAgd2l0aCBhIHNlbGYtY29udGFpbmVkIEJ1aWxkIGFjdGlvbi5cbi8vIFRoZXJlIGlzIG5vIEdlbmVyYWwgdGFiIHdoaWxlIHRoZSBidWlsZCdzIEFJIGZ1bmN0aW9uIHBhc3MgaXMgZGlzYWJsZWRcbi8vIChSZXBvcnRTZW1hbnRpY0J1aWxkUHJvY2Vzczo6cnVuKTogaXRzIG9uZSBmaWVsZCwgdGhlIHNlbWFudGljLWJ1aWxkXG4vLyBjb25jdXJyZW5jeSwgaXMgcmVhZCBvbmx5IGJ5IHRoYXQgcGFzcy4gVGhlIHJlcG9ydHMvc2V0dGluZ3Mgcm91dGUgdGhhdFxuLy8gc3RvcmVzIGl0LCBhbmQgUmVwb3J0RGF0YS5zZXR0aW5ncygpL3NhdmVTZXR0aW5ncygpLCBhcmUgbGVmdCBpbiBwbGFjZS5cbi8vIFRoZSBzaGVsbCBvd25zIHRoZSBpbnN0cnVjdGlvbnMgZG9jdW1lbnQgYW5kIHRoZSBzYXZlOyBldmVyeXRoaW5nIGVsc2UgbGl2ZXNcbi8vIGluIHRoZSBjaGlsZHJlbi5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZ2xvYmFsLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2xvYmFsLXNldHRpbmdzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRnNEaWFsb2dNb2R1bGUsXG4gICAgRnNGb3JtTW9kdWxlLFxuICAgIEZzU2tlbGV0b25Nb2R1bGUsXG4gICAgRnNUYWJzTW9kdWxlLFxuICAgIE1hdEJ1dHRvbixcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgIE1hdERpYWxvZ0Nsb3NlLFxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBBaUtub3dsZWRnZUNvbXBvbmVudCxcbiAgICBTZW1hbnRpY0RhdGFiYXNlQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHbG9iYWxTZXR0aW5nc0NvbXBvbmVudCB7XG5cbiAgcHVibGljIHNlbGVjdGVkVGFiID0gJ2tub3dsZWRnZSc7XG5cbiAgLy8gVGhlIFNlbWFudGljIERhdGFiYXNlIHRhYiBjb21wb25lbnQsIHNvIHRoZSBzaGFyZWQgZm9vdGVyIGNhbiBkcml2ZSBpdHNcbiAgLy8gQnVpbGQvUmVidWlsZC9TdG9wIGFjdGlvbiBpbmxpbmUgbmV4dCB0byBDbG9zZSAodGhlIGJ1aWxkIHN0YXRlIGxpdmVzIHRoZXJlKS5cbiAgcHVibGljIHJlYWRvbmx5IHNlbWFudGljRGF0YWJhc2UgPSB2aWV3Q2hpbGQoU2VtYW50aWNEYXRhYmFzZUNvbXBvbmVudCk7XG5cbiAgLy8gVGhlIGVkaXRvcidzIGRyYWZ0LCBoZWxkIG9uIHRoZSBzaGVsbCBzbyBzd2l0Y2hpbmcgdGFicyBuZXZlciBsb3NlcyBhbiBlZGl0XG4gIC8vIOKAlCBzZWVkZWQgZnJvbSB0aGUgY3VycmVudCB2ZXJzaW9uIChvciB0aGUgc2NhZmZvbGQpLlxuICBwdWJsaWMgcmVhZG9ubHkgY29udGVudCA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZWRpdG9yQ29uZmlnOiBGc01hcmtkb3duRWRpdG9yQ29uZmlnID0ge1xuICAgIG1heExlbmd0aDogTUFYX0xFTkdUSCxcbiAgICBwbGFjZWhvbGRlcjogJ0J1c2luZXNzIHRlcm1zLCBydWxlcyBhbmQgc3BlY2lhbCBjYXNlcyBldmVyeSByZXBvcnQgc2hvdWxkIGZvbGxvd+KApicsXG4gIH07XG5cbiAgLy8gbnVsbCB1bnRpbCBsb2FkZWQg4oCUIHRoZSBmb3JtIHdhaXRzIGJlaGluZCB0aGUgc2tlbGV0b24gdW50aWwgaXQgaXMgaW4uXG4gIHB1YmxpYyByZWFkb25seSBpbnN0cnVjdGlvbnMgPSBzaWduYWw8UmVwb3J0SW5zdHJ1Y3Rpb25zIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nUmVmID0gaW5qZWN0PE1hdERpYWxvZ1JlZjxHbG9iYWxTZXR0aW5nc0NvbXBvbmVudD4+KE1hdERpYWxvZ1JlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXBvcnREYXRhID0gaW5qZWN0KFJlcG9ydERhdGEpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlID0gaW5qZWN0KEZzTWVzc2FnZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faW5pdCgpO1xuICB9XG5cbiAgLy8gT25seSB0aGUgS25vd2xlZGdlIHRhYiBzYXZlczogYSBuZXcgZG9jdW1lbnQgdmVyc2lvbiwgdGhlbiB0aGUgZGlhbG9nIGNsb3Nlcy5cbiAgcHVibGljIHNhdmUgPSAoKSA9PiB0aGlzLl9yZXBvcnREYXRhLnNhdmVJbnN0cnVjdGlvbnModGhpcy5jb250ZW50KCkpXG4gICAgLnBpcGUoXG4gICAgICB0YXAoKGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25zKSA9PiB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnS25vd2xlZGdlIHNhdmVkJyk7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShpbnN0cnVjdGlvbnMpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAvLyBPcGVuIHRoZSB2ZXJzaW9uLWhpc3RvcnkgZGlhbG9nLiBSZXN0b3JlcyBoYXBwZW4gaW5zaWRlIGl0LCBzbyB3aGVuIGl0XG4gIC8vIGNsb3NlcyAoaG93ZXZlciBpdCBjbG9zZXMpIHJlLWZldGNoIHRoZSBkb2N1bWVudDogYSByZXN0b3JlIGNoYW5nZWQgdGhlXG4gIC8vIGN1cnJlbnQgdmVyc2lvbiBhbmQgbXVzdCByZXNlZWQgdGhlIGVkaXRvcjsgb3RoZXJ3aXNlIGp1c3QgcmVmcmVzaCB0aGVcbiAgLy8gdmVyc2lvbiBsaXN0IHdpdGhvdXQgdG91Y2hpbmcgYW4gdW5zYXZlZCBkcmFmdC5cbiAgcHVibGljIG9wZW5IaXN0b3J5KCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRJZCA9IHRoaXMuaW5zdHJ1Y3Rpb25zKCk/Lmluc3RydWN0aW9ucz8uaWQ7XG5cbiAgICB0aGlzLl9kaWFsb2cub3BlbihJbnN0cnVjdGlvbkhpc3RvcnlDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgbWF4V2lkdGg6ICc5NXZ3JyxcbiAgICAgIG1heEhlaWdodDogJzg1dmgnLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIGRhdGE6IHsgdmVyc2lvbnM6IHRoaXMuaW5zdHJ1Y3Rpb25zKCk/LnZlcnNpb25zID8/IFtdIH0sXG4gICAgfSlcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX3JlcG9ydERhdGEuaW5zdHJ1Y3Rpb25zKCkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZiksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChpbnN0cnVjdGlvbnM6IFJlcG9ydEluc3RydWN0aW9ucykgPT4ge1xuICAgICAgICBpZiAoaW5zdHJ1Y3Rpb25zLmluc3RydWN0aW9ucz8uaWQgIT09IGN1cnJlbnRJZCkge1xuICAgICAgICAgIHRoaXMuX2FwcGx5SW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pbnN0cnVjdGlvbnMuc2V0KGluc3RydWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXBvcnREYXRhLmluc3RydWN0aW9ucygpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChpbnN0cnVjdGlvbnM6IFJlcG9ydEluc3RydWN0aW9ucykgPT4gdGhpcy5fYXBwbHlJbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseUluc3RydWN0aW9ucyhpbnN0cnVjdGlvbnM6IFJlcG9ydEluc3RydWN0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zLnNldChpbnN0cnVjdGlvbnMpO1xuICAgIHRoaXMuY29udGVudC5zZXQoaW5zdHJ1Y3Rpb25zLmluc3RydWN0aW9ucz8uY29udGVudCA/PyBTQ0FGRk9MRCk7XG4gIH1cbn1cbiIsIjxmb3JtXG4gICAgKmZzU2tlbGV0b25Gb3JtPVwiaW5zdHJ1Y3Rpb25zKClcIlxuICAgIGZzRm9ybVxuICAgIFtzdWJtaXRdPVwic2F2ZVwiPlxuICA8ZnMtZGlhbG9nPlxuICAgIDxmcy1kaWFsb2ctdGl0bGU+XG4gICAgICBSZXBvcnQgU2V0dGluZ3NcbiAgICA8L2ZzLWRpYWxvZy10aXRsZT5cbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgICAgPG1hdC10YWItZ3JvdXAgWyhzZWxlY3RlZCldPVwic2VsZWN0ZWRUYWJcIj5cbiAgICAgICAgPG1hdC10YWJcbiAgICAgICAgICAgIGxhYmVsPVwiS25vd2xlZGdlXCJcbiAgICAgICAgICAgIG5hbWU9XCJrbm93bGVkZ2VcIj5cbiAgICAgICAgICA8ZnMtYWktcmVwb3J0LWdsb2JhbC1zZXR0aW5ncy1haS1rbm93bGVkZ2VcbiAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiY29udGVudCgpXCJcbiAgICAgICAgICAgICAgKGNvbnRlbnRDaGFuZ2UpPVwiY29udGVudC5zZXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwiZWRpdG9yQ29uZmlnXCI+XG4gICAgICAgICAgPC9mcy1haS1yZXBvcnQtZ2xvYmFsLXNldHRpbmdzLWFpLWtub3dsZWRnZT5cbiAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8bWF0LXRhYlxuICAgICAgICAgICAgbGFiZWw9XCJTZW1hbnRpYyBEYXRhYmFzZVwiXG4gICAgICAgICAgICBuYW1lPVwiYnVpbGRcIj5cbiAgICAgICAgICA8ZnMtYWktcmVwb3J0LWdsb2JhbC1zZXR0aW5ncy1zZW1hbnRpYy1kYXRhYmFzZT5cbiAgICAgICAgICA8L2ZzLWFpLXJlcG9ydC1nbG9iYWwtc2V0dGluZ3Mtc2VtYW50aWMtZGF0YWJhc2U+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgICA8bWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgICAgPCEtLSBUaGUgZm9vdGVyIGZvbGxvd3MgdGhlIHNlbGVjdGVkIHRhYi4gS25vd2xlZGdlIHByb2plY3RzIGl0cyBvd25cbiAgICAgICAgICAgU2F2ZSB8IFZpZXcgSGlzdG9yeSB8IENhbmNlbCByb3cgKGZzLWZvcm0tZGlhbG9nLWFjdGlvbnMgcmVuZGVyc1xuICAgICAgICAgICBwcm9qZWN0ZWQgY29udGVudCBhZnRlciBTYXZlL0NhbmNlbCwgc28gdGhlIGRlZmF1bHQgcGFpciBjYW4ndCBrZWVwXG4gICAgICAgICAgIFZpZXcgSGlzdG9yeSBiZXNpZGUgU2F2ZSk7IHRoZSBTZW1hbnRpYyBEYXRhYmFzZSB0YWIgaXMgYSByZWFkL3J1blxuICAgICAgICAgICBzdXJmYWNlLCBzbyBpdCBnZXRzIGEgcHJpbWFyeSBDbG9zZSBwbHVzIGl0cyBCdWlsZC9SZWJ1aWxkL1N0b3BcbiAgICAgICAgICAgYWN0aW9uLiBOZWl0aGVyIHVzZXMgdGhlIGRlZmF1bHQgU2F2ZS9DYW5jZWwgcGFpci4gLS0+XG4gICAgICA8ZnMtZm9ybS1kaWFsb2ctYWN0aW9ucyBbc2F2ZV09XCJmYWxzZVwiPlxuICAgICAgICBAaWYgKHNlbGVjdGVkVGFiID09PSAna25vd2xlZGdlJykge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICBTYXZlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbkhpc3RvcnkoKVwiPlxuICAgICAgICAgICAgVmlldyBIaXN0b3J5XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCI+XG4gICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHNlbGVjdGVkVGFiID09PSAnYnVpbGQnKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJ1bmRlZmluZWRcIj5cbiAgICAgICAgICAgIENsb3NlXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzZWxlY3RlZFRhYiA9PT0gJ2J1aWxkJyAmJiBzZW1hbnRpY0RhdGFiYXNlKCk7IGFzIGRiKSB7XG4gICAgICAgICAgQGlmIChkYi5idWlsZEFjdGl2ZSgpKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRiLnN0b3BCdWlsZCgpXCI+XG4gICAgICAgICAgICAgIFN0b3AgQnVpbGRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPCEtLSBOZXZlciBnYXRlZCBvbiB0aGUgc3RhdHVzIGxvYWQ6IGEgc3RhdHVzIHJlc3BvbnNlIHRoYXQgZmFpbHNcbiAgICAgICAgICAgICAgICAgbXVzdCBub3QgdGFrZSB0aGUgQnVpbGQgYWN0aW9uIGF3YXkgd2l0aCBpdC4gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkYi5idWlsZCgpXCI+XG4gICAgICAgICAgICAgIHt7IGRiLnJlYnVpbGQoKSA/ICdSZWJ1aWxkJyA6ICdCdWlsZCcgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9mcy1mb3JtLWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8L2ZzLWRpYWxvZz5cbjwvZm9ybT5cbiJdfQ==
@@ -15,7 +15,7 @@ import * as i1 from "@firestitch/chip";
15
15
  import * as i2 from "@firestitch/date";
16
16
  import * as i3 from "@firestitch/dialog";
17
17
  import * as i4 from "@firestitch/message";
18
- // The AI Knowledge document's version history (append-only), each version
18
+ // The Knowledge document's version history (append-only), each version
19
19
  // previewed and restorable — opened from the Report Settings footer's View
20
20
  // History button. Restores happen here (confirm, then flip the current flag —
21
21
  // no new version is created); the opener refreshes its instructions after this
@@ -31,7 +31,7 @@ export class InstructionHistoryComponent {
31
31
  restore(version) {
32
32
  this._prompt.confirm({
33
33
  title: 'Restore version',
34
- template: 'Make this version the current AI knowledge? The newer versions stay in the history.',
34
+ template: 'Make this version the current knowledge? The newer versions stay in the history.',
35
35
  commitLabel: 'Restore',
36
36
  })
37
37
  .pipe(switchMap(() => this._reportData.restoreInstruction(version.id)), takeUntilDestroyed(this._destroyRef))
@@ -41,7 +41,7 @@ export class InstructionHistoryComponent {
41
41
  });
42
42
  }
43
43
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InstructionHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
44
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: InstructionHistoryComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <fs-dialog-title>\n AI Knowledge History\n </fs-dialog-title>\n <mat-dialog-content>\n @if (versions().length) {\n <div class=\"versions\">\n @for (version of versions(); track version.id) {\n <div class=\"version\">\n <div class=\"version-header\">\n <fs-date\n [date]=\"version.createDate\"\n format=\"date-time\">\n </fs-date>\n @if (version.accountName) {\n <span class=\"author\">{{ version.accountName }}</span>\n }\n <span class=\"spacer\"></span>\n @if (version.current) {\n <fs-chip\n size=\"tiny\"\n [backgroundColor]=\"'#2e7d32'\"\n color=\"#ffffff\">\n Current\n </fs-chip>\n } @else {\n <button\n type=\"button\"\n mat-stroked-button\n (click)=\"restore(version)\">\n Restore\n </button>\n }\n </div>\n <div class=\"version-preview\">\n <fs-markdown-renderer [markdown]=\"version.content\"></fs-markdown-renderer>\n </div>\n </div>\n }\n </div>\n } @else {\n <fs-message-info>\n No versions yet \u2014 every save of the AI Knowledge document lands here, and\n any version can be restored.\n </fs-message-info>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".version{border:1px solid rgba(0,0,0,.12);border-radius:6px;padding:12px}.version+.version{margin-top:12px}.version .version-header{display:flex;align-items:center;gap:8px}.version .version-header .author{color:#0009}.version .version-header .spacer{flex:1}.version .version-preview{margin-top:8px;max-height:200px;overflow-y:auto;border-top:1px solid rgba(0,0,0,.08);padding-top:8px}\n"], dependencies: [{ 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: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { 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: "ngmodule", type: FsChipModule }, { kind: "component", type: i1.FsChipComponent, selector: "fs-chip", inputs: ["selectable", "removable", "value", "maxWidth", "width", "backgroundColor", "borderColor", "color", "shape", "outlined", "outlineDash", "icon", "image", "selected", "disabled", "padding", "contrastColor", "size"], outputs: ["selectedToggled", "removed", "click"] }, { kind: "ngmodule", type: FsDateModule }, { kind: "component", type: i2.FsDateComponent, selector: "fs-date", inputs: ["date", "format", "timezone"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i3.FsDialogTitleComponent, selector: "fs-dialog-title", inputs: ["close", "dockToggle", "back"] }, { kind: "component", type: FsMarkdownRendererComponent, selector: "fs-markdown-renderer", inputs: ["config", "markdown"] }, { kind: "ngmodule", type: FsMessageModule }, { kind: "component", type: i4.FsMessageInfoComponent, selector: "fs-message-info" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
44
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: InstructionHistoryComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<fs-dialog>\n <fs-dialog-title>\n Knowledge History\n </fs-dialog-title>\n <mat-dialog-content>\n @if (versions().length) {\n <div class=\"versions\">\n @for (version of versions(); track version.id) {\n <div class=\"version\">\n <div class=\"version-header\">\n <fs-date\n [date]=\"version.createDate\"\n format=\"date-time\">\n </fs-date>\n @if (version.accountName) {\n <span class=\"author\">{{ version.accountName }}</span>\n }\n <span class=\"spacer\"></span>\n @if (version.current) {\n <fs-chip\n size=\"tiny\"\n [backgroundColor]=\"'#2e7d32'\"\n color=\"#ffffff\">\n Current\n </fs-chip>\n } @else {\n <button\n type=\"button\"\n mat-stroked-button\n (click)=\"restore(version)\">\n Restore\n </button>\n }\n </div>\n <div class=\"version-preview\">\n <fs-markdown-renderer [markdown]=\"version.content\"></fs-markdown-renderer>\n </div>\n </div>\n }\n </div>\n } @else {\n <fs-message-info>\n No versions yet \u2014 every save of the Knowledge document lands here, and\n any version can be restored.\n </fs-message-info>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".version{border:1px solid rgba(0,0,0,.12);border-radius:6px;padding:12px}.version+.version{margin-top:12px}.version .version-header{display:flex;align-items:center;gap:8px}.version .version-header .author{color:#0009}.version .version-header .spacer{flex:1}.version .version-preview{margin-top:8px;max-height:200px;overflow-y:auto;border-top:1px solid rgba(0,0,0,.08);padding-top:8px}\n"], dependencies: [{ 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: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { 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: "ngmodule", type: FsChipModule }, { kind: "component", type: i1.FsChipComponent, selector: "fs-chip", inputs: ["selectable", "removable", "value", "maxWidth", "width", "backgroundColor", "borderColor", "color", "shape", "outlined", "outlineDash", "icon", "image", "selected", "disabled", "padding", "contrastColor", "size"], outputs: ["selectedToggled", "removed", "click"] }, { kind: "ngmodule", type: FsDateModule }, { kind: "component", type: i2.FsDateComponent, selector: "fs-date", inputs: ["date", "format", "timezone"] }, { kind: "ngmodule", type: FsDialogModule }, { kind: "component", type: i3.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout"] }, { kind: "component", type: i3.FsDialogTitleComponent, selector: "fs-dialog-title", inputs: ["close", "dockToggle", "back"] }, { kind: "component", type: FsMarkdownRendererComponent, selector: "fs-markdown-renderer", inputs: ["config", "markdown"] }, { kind: "ngmodule", type: FsMessageModule }, { kind: "component", type: i4.FsMessageInfoComponent, selector: "fs-message-info" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
45
45
  }
46
46
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InstructionHistoryComponent, decorators: [{
47
47
  type: Component,
@@ -55,6 +55,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
55
55
  FsDialogModule,
56
56
  FsMarkdownRendererComponent,
57
57
  FsMessageModule,
58
- ], template: "<fs-dialog>\n <fs-dialog-title>\n AI Knowledge History\n </fs-dialog-title>\n <mat-dialog-content>\n @if (versions().length) {\n <div class=\"versions\">\n @for (version of versions(); track version.id) {\n <div class=\"version\">\n <div class=\"version-header\">\n <fs-date\n [date]=\"version.createDate\"\n format=\"date-time\">\n </fs-date>\n @if (version.accountName) {\n <span class=\"author\">{{ version.accountName }}</span>\n }\n <span class=\"spacer\"></span>\n @if (version.current) {\n <fs-chip\n size=\"tiny\"\n [backgroundColor]=\"'#2e7d32'\"\n color=\"#ffffff\">\n Current\n </fs-chip>\n } @else {\n <button\n type=\"button\"\n mat-stroked-button\n (click)=\"restore(version)\">\n Restore\n </button>\n }\n </div>\n <div class=\"version-preview\">\n <fs-markdown-renderer [markdown]=\"version.content\"></fs-markdown-renderer>\n </div>\n </div>\n }\n </div>\n } @else {\n <fs-message-info>\n No versions yet \u2014 every save of the AI Knowledge document lands here, and\n any version can be restored.\n </fs-message-info>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".version{border:1px solid rgba(0,0,0,.12);border-radius:6px;padding:12px}.version+.version{margin-top:12px}.version .version-header{display:flex;align-items:center;gap:8px}.version .version-header .author{color:#0009}.version .version-header .spacer{flex:1}.version .version-preview{margin-top:8px;max-height:200px;overflow-y:auto;border-top:1px solid rgba(0,0,0,.08);padding-top:8px}\n"] }]
58
+ ], template: "<fs-dialog>\n <fs-dialog-title>\n Knowledge History\n </fs-dialog-title>\n <mat-dialog-content>\n @if (versions().length) {\n <div class=\"versions\">\n @for (version of versions(); track version.id) {\n <div class=\"version\">\n <div class=\"version-header\">\n <fs-date\n [date]=\"version.createDate\"\n format=\"date-time\">\n </fs-date>\n @if (version.accountName) {\n <span class=\"author\">{{ version.accountName }}</span>\n }\n <span class=\"spacer\"></span>\n @if (version.current) {\n <fs-chip\n size=\"tiny\"\n [backgroundColor]=\"'#2e7d32'\"\n color=\"#ffffff\">\n Current\n </fs-chip>\n } @else {\n <button\n type=\"button\"\n mat-stroked-button\n (click)=\"restore(version)\">\n Restore\n </button>\n }\n </div>\n <div class=\"version-preview\">\n <fs-markdown-renderer [markdown]=\"version.content\"></fs-markdown-renderer>\n </div>\n </div>\n }\n </div>\n } @else {\n <fs-message-info>\n No versions yet \u2014 every save of the Knowledge document lands here, and\n any version can be restored.\n </fs-message-info>\n }\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n type=\"button\"\n mat-button\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Close\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".version{border:1px solid rgba(0,0,0,.12);border-radius:6px;padding:12px}.version+.version{margin-top:12px}.version .version-header{display:flex;align-items:center;gap:8px}.version .version-header .author{color:#0009}.version .version-header .spacer{flex:1}.version .version-preview{margin-top:8px;max-height:200px;overflow-y:auto;border-top:1px solid rgba(0,0,0,.08);padding-top:8px}\n"] }]
59
59
  }] });
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb24taGlzdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZGlhbG9ncy9pbnN0cnVjdGlvbi1oaXN0b3J5L2luc3RydWN0aW9uLWhpc3RvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RpYWxvZ3MvaW5zdHJ1Y3Rpb24taGlzdG9yeS9pbnN0cnVjdGlvbi1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBU3BELDBFQUEwRTtBQUMxRSwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSxrRUFBa0U7QUFrQmxFLE1BQU0sT0FBTywyQkFBMkI7SUFFckIsS0FBSyxHQUFHLE1BQU0sQ0FBK0IsZUFBZSxDQUFDLENBQUM7SUFFL0QsUUFBUSxHQUFHLE1BQU0sQ0FBc0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUUzRCxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0IsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxELDRFQUE0RTtJQUNyRSxPQUFPLENBQUMsT0FBMEI7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDbkIsS0FBSyxFQUFFLGlCQUFpQjtZQUN4QixRQUFRLEVBQUUscUZBQXFGO1lBQy9GLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCLENBQUM7YUFDQyxJQUFJLENBQ0gsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ2hFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLENBQUMsQ0FBQyxZQUFnQyxFQUFFLEVBQUU7WUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO3dHQTFCVSwyQkFBMkI7NEZBQTNCLDJCQUEyQix3RUM5Q3hDLHN2REF5REEsNGJEdEJJLFNBQVMsaUxBQ1QsZ0JBQWdCLHlHQUNoQixnQkFBZ0IsNEhBQ2hCLGNBQWMsb0xBQ2QsWUFBWSxxWEFDWixZQUFZLDRJQUNaLGNBQWMsK1RBQ2QsMkJBQTJCLGdHQUMzQixlQUFlOzs0RkFHTiwyQkFBMkI7a0JBakJ2QyxTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsMkJBQTJCO3dCQUMzQixlQUFlO3FCQUNoQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0FjdGlvbnMsIE1hdERpYWxvZ0Nsb3NlLCBNYXREaWFsb2dDb250ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgRnNDaGlwTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvY2hpcCc7XG5pbXBvcnQgeyBGc0RhdGVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kYXRlJztcbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IEZzTWFya2Rvd25SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJ0BmaXJlc3RpdGNoL21hcmtkb3duLWVkaXRvcic7XG5pbXBvcnQgeyBGc01lc3NhZ2UsIEZzTWVzc2FnZU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuXG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7IFJlcG9ydEluc3RydWN0aW9uLCBSZXBvcnRJbnN0cnVjdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdHJ1Y3Rpb25IaXN0b3J5RGlhbG9nRGF0YSB7XG4gIHZlcnNpb25zOiBSZXBvcnRJbnN0cnVjdGlvbltdO1xufVxuXG5cbi8vIFRoZSBBSSBLbm93bGVkZ2UgZG9jdW1lbnQncyB2ZXJzaW9uIGhpc3RvcnkgKGFwcGVuZC1vbmx5KSwgZWFjaCB2ZXJzaW9uXG4vLyBwcmV2aWV3ZWQgYW5kIHJlc3RvcmFibGUg4oCUIG9wZW5lZCBmcm9tIHRoZSBSZXBvcnQgU2V0dGluZ3MgZm9vdGVyJ3MgVmlld1xuLy8gSGlzdG9yeSBidXR0b24uIFJlc3RvcmVzIGhhcHBlbiBoZXJlIChjb25maXJtLCB0aGVuIGZsaXAgdGhlIGN1cnJlbnQgZmxhZyDigJRcbi8vIG5vIG5ldyB2ZXJzaW9uIGlzIGNyZWF0ZWQpOyB0aGUgb3BlbmVyIHJlZnJlc2hlcyBpdHMgaW5zdHJ1Y3Rpb25zIGFmdGVyIHRoaXNcbi8vIGRpYWxvZyBjbG9zZXMsIHNvIGEgcmVzdG9yZSBtYWRlIGhlcmUgcmVzZWVkcyB0aGUgZWRpdG9yIHRoZXJlLlxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9pbnN0cnVjdGlvbi1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5zdHJ1Y3Rpb24taGlzdG9yeS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdEJ1dHRvbixcbiAgICBNYXREaWFsb2dDb250ZW50LFxuICAgIE1hdERpYWxvZ0FjdGlvbnMsXG4gICAgTWF0RGlhbG9nQ2xvc2UsXG4gICAgRnNDaGlwTW9kdWxlLFxuICAgIEZzRGF0ZU1vZHVsZSxcbiAgICBGc0RpYWxvZ01vZHVsZSxcbiAgICBGc01hcmtkb3duUmVuZGVyZXJDb21wb25lbnQsXG4gICAgRnNNZXNzYWdlTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBJbnN0cnVjdGlvbkhpc3RvcnlDb21wb25lbnQge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEgPSBpbmplY3Q8SW5zdHJ1Y3Rpb25IaXN0b3J5RGlhbG9nRGF0YT4oTUFUX0RJQUxPR19EQVRBKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbnMgPSBzaWduYWw8UmVwb3J0SW5zdHJ1Y3Rpb25bXT4odGhpcy5fZGF0YS52ZXJzaW9ucyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvbXB0ID0gaW5qZWN0KEZzUHJvbXB0KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZSA9IGluamVjdChGc01lc3NhZ2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIC8vIE1ha2UgYW4gZWFybGllciB2ZXJzaW9uIGN1cnJlbnQg4oCUIGZsaXBzIHRoZSBmbGFnLCBjcmVhdGVzIG5vIG5ldyB2ZXJzaW9uLlxuICBwdWJsaWMgcmVzdG9yZSh2ZXJzaW9uOiBSZXBvcnRJbnN0cnVjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3Byb21wdC5jb25maXJtKHtcbiAgICAgIHRpdGxlOiAnUmVzdG9yZSB2ZXJzaW9uJyxcbiAgICAgIHRlbXBsYXRlOiAnTWFrZSB0aGlzIHZlcnNpb24gdGhlIGN1cnJlbnQgQUkga25vd2xlZGdlPyBUaGUgbmV3ZXIgdmVyc2lvbnMgc3RheSBpbiB0aGUgaGlzdG9yeS4nLFxuICAgICAgY29tbWl0TGFiZWw6ICdSZXN0b3JlJyxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9yZXBvcnREYXRhLnJlc3RvcmVJbnN0cnVjdGlvbih2ZXJzaW9uLmlkKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25zKSA9PiB7XG4gICAgICAgIHRoaXMudmVyc2lvbnMuc2V0KGluc3RydWN0aW9ucy52ZXJzaW9ucyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnVmVyc2lvbiByZXN0b3JlZCcpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxmcy1kaWFsb2c+XG4gIDxmcy1kaWFsb2ctdGl0bGU+XG4gICAgQUkgS25vd2xlZGdlIEhpc3RvcnlcbiAgPC9mcy1kaWFsb2ctdGl0bGU+XG4gIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgQGlmICh2ZXJzaW9ucygpLmxlbmd0aCkge1xuICAgICAgPGRpdiBjbGFzcz1cInZlcnNpb25zXCI+XG4gICAgICAgIEBmb3IgKHZlcnNpb24gb2YgdmVyc2lvbnMoKTsgdHJhY2sgdmVyc2lvbi5pZCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJzaW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVyc2lvbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGZzLWRhdGVcbiAgICAgICAgICAgICAgICAgIFtkYXRlXT1cInZlcnNpb24uY3JlYXRlRGF0ZVwiXG4gICAgICAgICAgICAgICAgICBmb3JtYXQ9XCJkYXRlLXRpbWVcIj5cbiAgICAgICAgICAgICAgPC9mcy1kYXRlPlxuICAgICAgICAgICAgICBAaWYgKHZlcnNpb24uYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dGhvclwiPnt7IHZlcnNpb24uYWNjb3VudE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGFjZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgIEBpZiAodmVyc2lvbi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgPGZzLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInRpbnlcIlxuICAgICAgICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIicjMmU3ZDMyJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiI2ZmZmZmZlwiPlxuICAgICAgICAgICAgICAgICAgQ3VycmVudFxuICAgICAgICAgICAgICAgIDwvZnMtY2hpcD5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXN0b3JlKHZlcnNpb24pXCI+XG4gICAgICAgICAgICAgICAgICBSZXN0b3JlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnNpb24tcHJldmlld1wiPlxuICAgICAgICAgICAgICA8ZnMtbWFya2Rvd24tcmVuZGVyZXIgW21hcmtkb3duXT1cInZlcnNpb24uY29udGVudFwiPjwvZnMtbWFya2Rvd24tcmVuZGVyZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZnMtbWVzc2FnZS1pbmZvPlxuICAgICAgICBObyB2ZXJzaW9ucyB5ZXQg4oCUIGV2ZXJ5IHNhdmUgb2YgdGhlIEFJIEtub3dsZWRnZSBkb2N1bWVudCBsYW5kcyBoZXJlLCBhbmRcbiAgICAgICAgYW55IHZlcnNpb24gY2FuIGJlIHJlc3RvcmVkLlxuICAgICAgPC9mcy1tZXNzYWdlLWluZm8+XG4gICAgfVxuICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIj5cbiAgICAgIENsb3NlXG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuPC9mcy1kaWFsb2c+XG4iXX0=
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb24taGlzdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvZGlhbG9ncy9pbnN0cnVjdGlvbi1oaXN0b3J5L2luc3RydWN0aW9uLWhpc3RvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL2RpYWxvZ3MvaW5zdHJ1Y3Rpb24taGlzdG9yeS9pbnN0cnVjdGlvbi1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBU3BELHVFQUF1RTtBQUN2RSwyRUFBMkU7QUFDM0UsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSxrRUFBa0U7QUFrQmxFLE1BQU0sT0FBTywyQkFBMkI7SUFFckIsS0FBSyxHQUFHLE1BQU0sQ0FBK0IsZUFBZSxDQUFDLENBQUM7SUFFL0QsUUFBUSxHQUFHLE1BQU0sQ0FBc0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUUzRCxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0IsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxELDRFQUE0RTtJQUNyRSxPQUFPLENBQUMsT0FBMEI7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDbkIsS0FBSyxFQUFFLGlCQUFpQjtZQUN4QixRQUFRLEVBQUUsa0ZBQWtGO1lBQzVGLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCLENBQUM7YUFDQyxJQUFJLENBQ0gsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ2hFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FDckM7YUFDQSxTQUFTLENBQUMsQ0FBQyxZQUFnQyxFQUFFLEVBQUU7WUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO3dHQTFCVSwyQkFBMkI7NEZBQTNCLDJCQUEyQix3RUM5Q3hDLGd2REF5REEsNGJEdEJJLFNBQVMsaUxBQ1QsZ0JBQWdCLHlHQUNoQixnQkFBZ0IsNEhBQ2hCLGNBQWMsb0xBQ2QsWUFBWSxxWEFDWixZQUFZLDRJQUNaLGNBQWMsK1RBQ2QsMkJBQTJCLGdHQUMzQixlQUFlOzs0RkFHTiwyQkFBMkI7a0JBakJ2QyxTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsWUFBWTt3QkFDWixZQUFZO3dCQUNaLGNBQWM7d0JBQ2QsMkJBQTJCO3dCQUMzQixlQUFlO3FCQUNoQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIERlc3Ryb3lSZWYsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0FjdGlvbnMsIE1hdERpYWxvZ0Nsb3NlLCBNYXREaWFsb2dDb250ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgRnNDaGlwTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvY2hpcCc7XG5pbXBvcnQgeyBGc0RhdGVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kYXRlJztcbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IEZzTWFya2Rvd25SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJ0BmaXJlc3RpdGNoL21hcmtkb3duLWVkaXRvcic7XG5pbXBvcnQgeyBGc01lc3NhZ2UsIEZzTWVzc2FnZU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuaW1wb3J0IHsgRnNQcm9tcHQgfSBmcm9tICdAZmlyZXN0aXRjaC9wcm9tcHQnO1xuXG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJlcG9ydERhdGEgfSBmcm9tICcuLi8uLi9kYXRhL3JlcG9ydC5kYXRhJztcbmltcG9ydCB7IFJlcG9ydEluc3RydWN0aW9uLCBSZXBvcnRJbnN0cnVjdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdHJ1Y3Rpb25IaXN0b3J5RGlhbG9nRGF0YSB7XG4gIHZlcnNpb25zOiBSZXBvcnRJbnN0cnVjdGlvbltdO1xufVxuXG5cbi8vIFRoZSBLbm93bGVkZ2UgZG9jdW1lbnQncyB2ZXJzaW9uIGhpc3RvcnkgKGFwcGVuZC1vbmx5KSwgZWFjaCB2ZXJzaW9uXG4vLyBwcmV2aWV3ZWQgYW5kIHJlc3RvcmFibGUg4oCUIG9wZW5lZCBmcm9tIHRoZSBSZXBvcnQgU2V0dGluZ3MgZm9vdGVyJ3MgVmlld1xuLy8gSGlzdG9yeSBidXR0b24uIFJlc3RvcmVzIGhhcHBlbiBoZXJlIChjb25maXJtLCB0aGVuIGZsaXAgdGhlIGN1cnJlbnQgZmxhZyDigJRcbi8vIG5vIG5ldyB2ZXJzaW9uIGlzIGNyZWF0ZWQpOyB0aGUgb3BlbmVyIHJlZnJlc2hlcyBpdHMgaW5zdHJ1Y3Rpb25zIGFmdGVyIHRoaXNcbi8vIGRpYWxvZyBjbG9zZXMsIHNvIGEgcmVzdG9yZSBtYWRlIGhlcmUgcmVzZWVkcyB0aGUgZWRpdG9yIHRoZXJlLlxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9pbnN0cnVjdGlvbi1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5zdHJ1Y3Rpb24taGlzdG9yeS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdEJ1dHRvbixcbiAgICBNYXREaWFsb2dDb250ZW50LFxuICAgIE1hdERpYWxvZ0FjdGlvbnMsXG4gICAgTWF0RGlhbG9nQ2xvc2UsXG4gICAgRnNDaGlwTW9kdWxlLFxuICAgIEZzRGF0ZU1vZHVsZSxcbiAgICBGc0RpYWxvZ01vZHVsZSxcbiAgICBGc01hcmtkb3duUmVuZGVyZXJDb21wb25lbnQsXG4gICAgRnNNZXNzYWdlTW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBJbnN0cnVjdGlvbkhpc3RvcnlDb21wb25lbnQge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RhdGEgPSBpbmplY3Q8SW5zdHJ1Y3Rpb25IaXN0b3J5RGlhbG9nRGF0YT4oTUFUX0RJQUxPR19EQVRBKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbnMgPSBzaWduYWw8UmVwb3J0SW5zdHJ1Y3Rpb25bXT4odGhpcy5fZGF0YS52ZXJzaW9ucyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVwb3J0RGF0YSA9IGluamVjdChSZXBvcnREYXRhKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvbXB0ID0gaW5qZWN0KEZzUHJvbXB0KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZSA9IGluamVjdChGc01lc3NhZ2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIC8vIE1ha2UgYW4gZWFybGllciB2ZXJzaW9uIGN1cnJlbnQg4oCUIGZsaXBzIHRoZSBmbGFnLCBjcmVhdGVzIG5vIG5ldyB2ZXJzaW9uLlxuICBwdWJsaWMgcmVzdG9yZSh2ZXJzaW9uOiBSZXBvcnRJbnN0cnVjdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX3Byb21wdC5jb25maXJtKHtcbiAgICAgIHRpdGxlOiAnUmVzdG9yZSB2ZXJzaW9uJyxcbiAgICAgIHRlbXBsYXRlOiAnTWFrZSB0aGlzIHZlcnNpb24gdGhlIGN1cnJlbnQga25vd2xlZGdlPyBUaGUgbmV3ZXIgdmVyc2lvbnMgc3RheSBpbiB0aGUgaGlzdG9yeS4nLFxuICAgICAgY29tbWl0TGFiZWw6ICdSZXN0b3JlJyxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9yZXBvcnREYXRhLnJlc3RvcmVJbnN0cnVjdGlvbih2ZXJzaW9uLmlkKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGluc3RydWN0aW9uczogUmVwb3J0SW5zdHJ1Y3Rpb25zKSA9PiB7XG4gICAgICAgIHRoaXMudmVyc2lvbnMuc2V0KGluc3RydWN0aW9ucy52ZXJzaW9ucyk7XG4gICAgICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnVmVyc2lvbiByZXN0b3JlZCcpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxmcy1kaWFsb2c+XG4gIDxmcy1kaWFsb2ctdGl0bGU+XG4gICAgS25vd2xlZGdlIEhpc3RvcnlcbiAgPC9mcy1kaWFsb2ctdGl0bGU+XG4gIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgQGlmICh2ZXJzaW9ucygpLmxlbmd0aCkge1xuICAgICAgPGRpdiBjbGFzcz1cInZlcnNpb25zXCI+XG4gICAgICAgIEBmb3IgKHZlcnNpb24gb2YgdmVyc2lvbnMoKTsgdHJhY2sgdmVyc2lvbi5pZCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZXJzaW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVyc2lvbi1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPGZzLWRhdGVcbiAgICAgICAgICAgICAgICAgIFtkYXRlXT1cInZlcnNpb24uY3JlYXRlRGF0ZVwiXG4gICAgICAgICAgICAgICAgICBmb3JtYXQ9XCJkYXRlLXRpbWVcIj5cbiAgICAgICAgICAgICAgPC9mcy1kYXRlPlxuICAgICAgICAgICAgICBAaWYgKHZlcnNpb24uYWNjb3VudE5hbWUpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF1dGhvclwiPnt7IHZlcnNpb24uYWNjb3VudE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGFjZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgIEBpZiAodmVyc2lvbi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgPGZzLWNoaXBcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInRpbnlcIlxuICAgICAgICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIicjMmU3ZDMyJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiI2ZmZmZmZlwiPlxuICAgICAgICAgICAgICAgICAgQ3VycmVudFxuICAgICAgICAgICAgICAgIDwvZnMtY2hpcD5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXN0b3JlKHZlcnNpb24pXCI+XG4gICAgICAgICAgICAgICAgICBSZXN0b3JlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnNpb24tcHJldmlld1wiPlxuICAgICAgICAgICAgICA8ZnMtbWFya2Rvd24tcmVuZGVyZXIgW21hcmtkb3duXT1cInZlcnNpb24uY29udGVudFwiPjwvZnMtbWFya2Rvd24tcmVuZGVyZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZnMtbWVzc2FnZS1pbmZvPlxuICAgICAgICBObyB2ZXJzaW9ucyB5ZXQg4oCUIGV2ZXJ5IHNhdmUgb2YgdGhlIEtub3dsZWRnZSBkb2N1bWVudCBsYW5kcyBoZXJlLCBhbmRcbiAgICAgICAgYW55IHZlcnNpb24gY2FuIGJlIHJlc3RvcmVkLlxuICAgICAgPC9mcy1tZXNzYWdlLWluZm8+XG4gICAgfVxuICA8L21hdC1kaWFsb2ctY29udGVudD5cbiAgPG1hdC1kaWFsb2ctYWN0aW9ucz5cbiAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIj5cbiAgICAgIENsb3NlXG4gICAgPC9idXR0b24+XG4gIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuPC9mcy1kaWFsb2c+XG4iXX0=
@@ -4,7 +4,7 @@ import * as echarts from 'echarts/core';
4
4
  export { echarts as default };
5
5
  import { LabelLayout } from 'echarts/features';
6
6
  import { CanvasRenderer } from 'echarts/renderers';
7
- import { R as REPORT_CHART_COLORS_CSS, a as REPORT_CHART_FONT_FAMILY, b as REPORT_AXIS_LABEL_FONT_SIZE } from './firestitch-report-firestitch-report-Bgr_IprU.mjs';
7
+ import { R as REPORT_CHART_COLORS_CSS, a as REPORT_CHART_FONT_FAMILY, b as REPORT_AXIS_LABEL_FONT_SIZE } from './firestitch-report-firestitch-report-CkTkXk5B.mjs';
8
8
 
9
9
  // Tree-shaken ECharts build for the reports renderer: only the chart types and
10
10
  // components the option-builder emits are registered, keeping the lazy chunk
@@ -63,4 +63,4 @@ echarts.registerTheme('report', {
63
63
  axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },
64
64
  },
65
65
  });
66
- //# sourceMappingURL=firestitch-report-echarts-DrTDdBIP.mjs.map
66
+ //# sourceMappingURL=firestitch-report-echarts-DKuqS_De.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"firestitch-report-echarts-DrTDdBIP.mjs","sources":["../../src/app/reports/theme/echarts.ts"],"sourcesContent":["// Tree-shaken ECharts build for the reports renderer: only the chart types and\n// components the option-builder emits are registered, keeping the lazy chunk\n// lean. Loaded on demand by ngx-echarts via provideEchartsCore — see\n// REPORT_ECHARTS_PROVIDERS in reports-echarts.provider.ts.\n//\n// The canvas renderer (not SVG) is deliberate: chart.getDataURL() needs it for\n// the high-res images the PPT/PDF exports will use.\n\nimport { BarChart, LineChart, PieChart } from 'echarts/charts';\nimport {\n DatasetComponent,\n GridComponent,\n LegendComponent,\n MarkAreaComponent,\n MarkLineComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport * as echarts from 'echarts/core';\nimport { LabelLayout } from 'echarts/features';\nimport { CanvasRenderer } from 'echarts/renderers';\n\nimport { REPORT_CHART_COLORS_CSS } from './palette';\nimport { REPORT_AXIS_LABEL_FONT_SIZE, REPORT_CHART_FONT_FAMILY } from './typography';\n\necharts.use([\n BarChart,\n LineChart,\n PieChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n DatasetComponent,\n // Reference lines and statistic lines (markLine), reference bands\n // (markArea), and the overlap hiding of 'auto' data labels (LabelLayout).\n MarkLineComponent,\n MarkAreaComponent,\n LabelLayout,\n CanvasRenderer,\n]);\n\n// The house theme — the single place report chart \"standards\" live (palette,\n// typography, tooltip styling). Polished defaults now; refined in the polish\n// phase.\necharts.registerTheme('report', {\n color: REPORT_CHART_COLORS_CSS,\n textStyle: {\n fontFamily: REPORT_CHART_FONT_FAMILY,\n },\n title: {\n textStyle: { color: '#1f2933', fontSize: 14, fontWeight: 600 },\n },\n legend: {\n textStyle: { color: '#52606d', fontSize: 11 },\n },\n tooltip: {\n backgroundColor: 'rgba(31, 41, 51, 0.92)',\n borderWidth: 0,\n textStyle: { color: '#fff', fontSize: 12 },\n },\n categoryAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisTick: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { show: false },\n },\n valueAxis: {\n axisLine: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { lineStyle: { color: '#e4e7eb' } },\n },\n timeAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n },\n});\n\nexport default echarts;\n"],"names":[],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA,OAAO,CAAC,GAAG,CAAC;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,gBAAgB;;;IAGhB,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,cAAc;AACf,CAAA,CAAC,CAAC;AAEH;AACA;AACA;AACA,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC9B,IAAA,KAAK,EAAE,uBAAuB;AAC9B,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,wBAAwB;AACrC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;AAC/D,KAAA;AACD,IAAA,MAAM,EAAE;QACN,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC9C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,eAAe,EAAE,wBAAwB;AACzC,QAAA,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC3C,KAAA;AACD,IAAA,YAAY,EAAE;QACZ,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC7C,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACtE,QAAA,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AAC3B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;QACtE,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC/C,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC7C,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACvE,KAAA;AACF,CAAA,CAAC"}
1
+ {"version":3,"file":"firestitch-report-echarts-DKuqS_De.mjs","sources":["../../src/app/reports/theme/echarts.ts"],"sourcesContent":["// Tree-shaken ECharts build for the reports renderer: only the chart types and\n// components the option-builder emits are registered, keeping the lazy chunk\n// lean. Loaded on demand by ngx-echarts via provideEchartsCore — see\n// REPORT_ECHARTS_PROVIDERS in reports-echarts.provider.ts.\n//\n// The canvas renderer (not SVG) is deliberate: chart.getDataURL() needs it for\n// the high-res images the PPT/PDF exports will use.\n\nimport { BarChart, LineChart, PieChart } from 'echarts/charts';\nimport {\n DatasetComponent,\n GridComponent,\n LegendComponent,\n MarkAreaComponent,\n MarkLineComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport * as echarts from 'echarts/core';\nimport { LabelLayout } from 'echarts/features';\nimport { CanvasRenderer } from 'echarts/renderers';\n\nimport { REPORT_CHART_COLORS_CSS } from './palette';\nimport { REPORT_AXIS_LABEL_FONT_SIZE, REPORT_CHART_FONT_FAMILY } from './typography';\n\necharts.use([\n BarChart,\n LineChart,\n PieChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n DatasetComponent,\n // Reference lines and statistic lines (markLine), reference bands\n // (markArea), and the overlap hiding of 'auto' data labels (LabelLayout).\n MarkLineComponent,\n MarkAreaComponent,\n LabelLayout,\n CanvasRenderer,\n]);\n\n// The house theme — the single place report chart \"standards\" live (palette,\n// typography, tooltip styling). Polished defaults now; refined in the polish\n// phase.\necharts.registerTheme('report', {\n color: REPORT_CHART_COLORS_CSS,\n textStyle: {\n fontFamily: REPORT_CHART_FONT_FAMILY,\n },\n title: {\n textStyle: { color: '#1f2933', fontSize: 14, fontWeight: 600 },\n },\n legend: {\n textStyle: { color: '#52606d', fontSize: 11 },\n },\n tooltip: {\n backgroundColor: 'rgba(31, 41, 51, 0.92)',\n borderWidth: 0,\n textStyle: { color: '#fff', fontSize: 12 },\n },\n categoryAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisTick: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { show: false },\n },\n valueAxis: {\n axisLine: { show: false },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n splitLine: { lineStyle: { color: '#e4e7eb' } },\n },\n timeAxis: {\n axisLine: { lineStyle: { color: '#cbd2d9' } },\n axisLabel: { color: '#52606d', fontSize: REPORT_AXIS_LABEL_FONT_SIZE },\n },\n});\n\nexport default echarts;\n"],"names":[],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA,OAAO,CAAC,GAAG,CAAC;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,gBAAgB;;;IAGhB,iBAAiB;IACjB,iBAAiB;IACjB,WAAW;IACX,cAAc;AACf,CAAA,CAAC,CAAC;AAEH;AACA;AACA;AACA,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE;AAC9B,IAAA,KAAK,EAAE,uBAAuB;AAC9B,IAAA,SAAS,EAAE;AACT,QAAA,UAAU,EAAE,wBAAwB;AACrC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;AAC/D,KAAA;AACD,IAAA,MAAM,EAAE;QACN,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC9C,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,eAAe,EAAE,wBAAwB;AACzC,QAAA,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC3C,KAAA;AACD,IAAA,YAAY,EAAE;QACZ,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC7C,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACtE,QAAA,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AAC3B,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACzB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;QACtE,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;AAC/C,KAAA;AACD,IAAA,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QAC7C,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACvE,KAAA;AACF,CAAA,CAAC"}