@firestitch/report 18.9.0 → 18.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/anchor-at-point.d.ts +14 -0
- package/app/reports/canvas-landing-page.d.ts +2 -0
- package/app/reports/components/component-chart/component-chart.component.d.ts +18 -2
- package/app/reports/components/component-kpi/component-kpi.component.d.ts +4 -1
- package/app/reports/components/report-canvas/report-canvas.component.d.ts +3 -0
- package/app/reports/components/report-component/report-component.component.d.ts +35 -1
- package/app/reports/components/report-view-picker/report-view-picker.component.d.ts +21 -0
- package/app/reports/data/report.data.d.ts +17 -2
- package/app/reports/dialogs/component-settings/component-settings.component.d.ts +18 -3
- package/app/reports/dialogs/report-settings/report-settings.component.d.ts +15 -6
- package/app/reports/dialogs/report-view/report-view-dialog.component.d.ts +13 -0
- package/app/reports/drill-crumbs.d.ts +12 -0
- package/app/reports/export/report-export-collector.service.d.ts +13 -4
- package/app/reports/export/report-filter-lines.d.ts +18 -0
- package/app/reports/filter-settings-rules.d.ts +33 -0
- package/app/reports/format.d.ts +0 -1
- package/app/reports/interfaces/canvas-landing-input.interface.d.ts +8 -0
- package/app/reports/interfaces/component-data-applied.interface.d.ts +13 -0
- package/app/reports/interfaces/component-data-drill.interface.d.ts +22 -0
- package/app/reports/interfaces/filter-bar-placement.type.d.ts +1 -0
- package/app/reports/interfaces/filter-component-toggle-state.interface.d.ts +4 -0
- package/app/reports/interfaces/filter-settings-option.interface.d.ts +4 -0
- package/app/reports/interfaces/filter-type-select-state.interface.d.ts +5 -0
- package/app/reports/interfaces/report-chart-hit.interface.d.ts +5 -0
- package/app/reports/interfaces/report-chat-viewer-cross-filter-field.interface.d.ts +4 -0
- package/app/reports/interfaces/report-chat-viewer-cross-filter.interface.d.ts +7 -0
- package/app/reports/interfaces/report-chat-viewer-detail.interface.d.ts +4 -0
- package/app/reports/interfaces/report-chat-viewer-drill-step.interface.d.ts +5 -0
- package/app/reports/interfaces/report-chat-viewer-drill.interface.d.ts +5 -0
- package/app/reports/interfaces/report-chat-viewer-filter.interface.d.ts +3 -0
- package/app/reports/interfaces/report-chat-viewer-selection.interface.d.ts +5 -0
- package/app/reports/interfaces/report-chat-viewer-state.interface.d.ts +12 -0
- package/app/reports/interfaces/report-drill-crumb.interface.d.ts +6 -0
- package/app/reports/interfaces/report-drill-refusal.type.d.ts +1 -0
- package/app/reports/interfaces/report-drill-step.interface.d.ts +5 -0
- package/app/reports/interfaces/report-export-line-kind.type.d.ts +1 -0
- package/app/reports/interfaces/report-export-line.interface.d.ts +8 -0
- package/app/reports/interfaces/report-export-lines-input.interface.d.ts +9 -0
- package/app/reports/interfaces/report-export-snapshot.interface.d.ts +15 -0
- package/app/reports/interfaces/report-filter-line-context.interface.d.ts +8 -0
- package/app/reports/interfaces/report-filter-line-form.type.d.ts +1 -0
- package/app/reports/interfaces/report-filter-match.type.d.ts +1 -0
- package/app/reports/interfaces/report-filter-option-pair.interface.d.ts +4 -0
- package/app/reports/interfaces/report-filter-options-ask.interface.d.ts +6 -0
- package/app/reports/interfaces/report-filter-options-list.interface.d.ts +7 -0
- package/app/reports/interfaces/report-filter-options-request.interface.d.ts +6 -0
- package/app/reports/interfaces/report-filter-options-stream.interface.d.ts +11 -0
- package/app/reports/interfaces/report-filter-options.interface.d.ts +7 -0
- package/app/reports/interfaces/report-filter-skip.type.d.ts +1 -0
- package/app/reports/interfaces/report-mark-action.type.d.ts +1 -0
- package/app/reports/interfaces/report-mark-click.interface.d.ts +13 -0
- package/app/reports/interfaces/report-mark-context.interface.d.ts +6 -0
- package/app/reports/interfaces/report-mark-decision.interface.d.ts +6 -0
- package/app/reports/interfaces/report-mark-event.interface.d.ts +11 -0
- package/app/reports/interfaces/report-mark-point.interface.d.ts +8 -0
- package/app/reports/interfaces/report-temporary-state.interface.d.ts +4 -0
- package/app/reports/interfaces/report-tile-state.interface.d.ts +8 -0
- package/app/reports/interfaces/report-url-link.interface.d.ts +4 -0
- package/app/reports/interfaces/report-url-value-name.type.d.ts +1 -0
- package/app/reports/interfaces/report-url-write.interface.d.ts +4 -0
- package/app/reports/interfaces/report-view-config.interface.d.ts +11 -0
- package/app/reports/interfaces/report-view-create.interface.d.ts +7 -0
- package/app/reports/interfaces/report-view-deleted.interface.d.ts +4 -0
- package/app/reports/interfaces/report-view-dialog-data.interface.d.ts +7 -0
- package/app/reports/interfaces/report-view-dropped.interface.d.ts +5 -0
- package/app/reports/interfaces/report-view-menu-item.interface.d.ts +10 -0
- package/app/reports/interfaces/report-view-summary.interface.d.ts +11 -0
- package/app/reports/interfaces/report-view.interface.d.ts +7 -0
- package/app/reports/interfaces/report-viewer-feature.type.d.ts +1 -0
- package/app/reports/interfaces/report-views.interface.d.ts +7 -0
- package/app/reports/interfaces/report.interface.d.ts +27 -3
- package/app/reports/interfaces/tile-load-result.interface.d.ts +4 -0
- package/app/reports/mark-click.d.ts +20 -0
- package/app/reports/option-builder.d.ts +12 -1
- package/app/reports/report-chat-viewer-state.d.ts +8 -0
- package/app/reports/report-date-presets.d.ts +2 -0
- package/app/reports/report-filter-items.d.ts +27 -22
- package/app/reports/report-tile.d.ts +2 -0
- package/app/reports/report-url-state.d.ts +27 -10
- package/app/reports/report-view-config.d.ts +36 -0
- package/app/reports/report-view-menu.d.ts +15 -0
- package/app/reports/report-viewer-features.d.ts +5 -0
- package/app/reports/services/report-filter-options.service.d.ts +26 -0
- package/app/reports/services/report-filter-state.service.d.ts +64 -1
- package/app/reports/services/report-view.service.d.ts +51 -0
- package/app/reports/tile-data-state.d.ts +7 -0
- package/app/reports/tile-loads.d.ts +4 -0
- package/app/reports/views/report/fs-ai-report.component.d.ts +9 -1
- package/app/reports/views/report/report.component.d.ts +6 -0
- package/esm2022/app/reports/anchor-at-point.mjs +49 -0
- package/esm2022/app/reports/canvas-landing-page.mjs +25 -0
- package/esm2022/app/reports/components/component-chart/component-chart.component.mjs +97 -5
- package/esm2022/app/reports/components/component-kpi/component-kpi.component.mjs +11 -4
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +7 -1
- package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +47 -32
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +257 -61
- package/esm2022/app/reports/components/report-view-picker/report-view-picker.component.mjs +115 -0
- package/esm2022/app/reports/data/report.data.mjs +87 -10
- package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +106 -51
- package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +86 -90
- package/esm2022/app/reports/dialogs/report-view/report-view-dialog.component.mjs +52 -0
- package/esm2022/app/reports/drill-crumbs.mjs +73 -0
- package/esm2022/app/reports/export/report-export-collector.service.mjs +187 -117
- package/esm2022/app/reports/export/report-filter-lines.mjs +235 -0
- package/esm2022/app/reports/export/report-pdf.service.mjs +12 -7
- package/esm2022/app/reports/export/report-pptx.service.mjs +18 -14
- package/esm2022/app/reports/filter-settings-rules.mjs +283 -0
- package/esm2022/app/reports/format.mjs +2 -22
- package/esm2022/app/reports/interfaces/canvas-landing-input.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/component-data-applied.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/component-data-drill.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/filter-bar-placement.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/filter-component-toggle-state.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/filter-settings-option.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/filter-type-select-state.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chart-hit.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-cross-filter-field.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-cross-filter.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-detail.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-drill-step.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-drill.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-filter.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-chat-viewer-selection.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-chat-viewer-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-drill-crumb.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-drill-refusal.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-drill-step.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-export-line-kind.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-export-line.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-export-lines-input.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-export-snapshot.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-line-context.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-line-form.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-match.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-option-pair.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-options-ask.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-options-list.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-options-request.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-options-stream.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-options.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-filter-skip.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-action.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-click.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-context.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-decision.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-event.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-mark-point.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-tile-state.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-url-link.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-url-value-name.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-url-write.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-config.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-create.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-deleted.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-dialog-data.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-dropped.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-menu-item.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view-summary.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-view.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-viewer-feature.type.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-views.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/tile-load-result.interface.mjs +2 -0
- package/esm2022/app/reports/mark-click.mjs +193 -0
- package/esm2022/app/reports/option-builder.mjs +159 -15
- package/esm2022/app/reports/report-chat-viewer-state.mjs +34 -0
- package/esm2022/app/reports/report-date-presets.mjs +18 -0
- package/esm2022/app/reports/report-filter-items.mjs +343 -72
- package/esm2022/app/reports/report-tile.mjs +12 -0
- package/esm2022/app/reports/report-url-state.mjs +596 -108
- package/esm2022/app/reports/report-view-config.mjs +697 -0
- package/esm2022/app/reports/report-view-menu.mjs +119 -0
- package/esm2022/app/reports/report-viewer-features.mjs +42 -0
- package/esm2022/app/reports/services/report-filter-options.service.mjs +238 -0
- package/esm2022/app/reports/services/report-filter-state.service.mjs +697 -62
- package/esm2022/app/reports/services/report-view.service.mjs +358 -0
- package/esm2022/app/reports/tile-data-state.mjs +127 -0
- package/esm2022/app/reports/tile-loads.mjs +38 -0
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +177 -46
- package/esm2022/app/reports/views/report/report.component.mjs +103 -23
- package/esm2022/public_api.mjs +23 -1
- package/fesm2022/{firestitch-report-echarts-DBMOHmBF.mjs → firestitch-report-echarts-UBg8Wlhd.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-DBMOHmBF.mjs.map → firestitch-report-echarts-UBg8Wlhd.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-CqbXT1gh.mjs → firestitch-report-firestitch-report-B1keNrcK.mjs} +9063 -4272
- package/fesm2022/firestitch-report-firestitch-report-B1keNrcK.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +22 -0
- package/fesm2022/firestitch-report-firestitch-report-CqbXT1gh.mjs.map +0 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { catchError, filter, map, merge, of, switchMap, timer } from 'rxjs';
|
|
2
|
+
// A sweep of changes (a few filters set in a row, every value of an applied
|
|
3
|
+
// view) settles for this long before a tile refetches, so the sweep costs one
|
|
4
|
+
// request, not one per change.
|
|
5
|
+
export const TILE_REFRESH_DEBOUNCE_MS = 300;
|
|
6
|
+
// A tile's data as one stream: the first load at once, then one load per
|
|
7
|
+
// settled burst of refresh triggers.
|
|
8
|
+
//
|
|
9
|
+
// - Each trigger starts over (switchMap): it cancels the wait for the one
|
|
10
|
+
// before it and the request in flight, then waits for the sweep to settle.
|
|
11
|
+
// So an answer to an older request never lands, not even while the next
|
|
12
|
+
// load still waits, and the bar stays on until the settled load answers.
|
|
13
|
+
// - Each load notes the state version it was sent under (stateVersion), and
|
|
14
|
+
// its answer is dropped when the version has moved since. apply() and
|
|
15
|
+
// resetToBase() move the version and announce a full change together, so
|
|
16
|
+
// the load for the new state is already on its way.
|
|
17
|
+
// - A failed load ends only itself: its message comes through as the answer,
|
|
18
|
+
// and the next trigger loads again.
|
|
19
|
+
export function tileLoads(refresh$, load, version) {
|
|
20
|
+
return merge(of(0), refresh$.pipe(map(() => TILE_REFRESH_DEBOUNCE_MS)))
|
|
21
|
+
.pipe(switchMap((wait) => (wait ? timer(wait) : of(0))
|
|
22
|
+
.pipe(switchMap(() => oneLoad(load, version)))));
|
|
23
|
+
}
|
|
24
|
+
// One request: its answer, or its failure as a message, dropped when the
|
|
25
|
+
// state version moved while it was out.
|
|
26
|
+
function oneLoad(load, version) {
|
|
27
|
+
const sentAt = version();
|
|
28
|
+
return load()
|
|
29
|
+
.pipe(map((data) => ({ data, error: null })), catchError((error) => of({ data: null, error: loadErrorMessage(error) })), filter(() => version() === sentAt));
|
|
30
|
+
}
|
|
31
|
+
// What a failed request says: the server's message, else the error's own,
|
|
32
|
+
// else a plain fallback.
|
|
33
|
+
function loadErrorMessage(error) {
|
|
34
|
+
const failure = error;
|
|
35
|
+
const message = failure?.error?.message ?? failure?.message;
|
|
36
|
+
return typeof message === 'string' && message ? message : 'Failed to load data';
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1sb2Fkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy90aWxlLWxvYWRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLeEYsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrQkFBK0I7QUFDL0IsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBRTVDLHlFQUF5RTtBQUN6RSxxQ0FBcUM7QUFDckMsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSw2RUFBNkU7QUFDN0UsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSw0RUFBNEU7QUFDNUUsd0VBQXdFO0FBQ3hFLDJFQUEyRTtBQUMzRSxzREFBc0Q7QUFDdEQsNkVBQTZFO0FBQzdFLHNDQUFzQztBQUN0QyxNQUFNLFVBQVUsU0FBUyxDQUN2QixRQUE2QixFQUM3QixJQUF5QixFQUN6QixPQUFxQjtJQUVyQixPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1NBQ3BFLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QyxJQUFJLENBQ0gsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FDeEMsQ0FBQyxDQUNMLENBQUM7QUFDTixDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLHdDQUF3QztBQUN4QyxTQUFTLE9BQU8sQ0FBSSxJQUF5QixFQUFFLE9BQXFCO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBRXpCLE9BQU8sSUFBSSxFQUFFO1NBQ1YsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBcUIsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFDekQsVUFBVSxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQW9CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3JHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FDbkMsQ0FBQztBQUNOLENBQUM7QUFFRCwwRUFBMEU7QUFDMUUseUJBQXlCO0FBQ3pCLFNBQVMsZ0JBQWdCLENBQUMsS0FBYztJQUN0QyxNQUFNLE9BQU8sR0FBRyxLQUFvRSxDQUFDO0lBQ3JGLE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLE9BQU8sRUFBRSxPQUFPLENBQUM7SUFFNUQsT0FBTyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0FBQ2xGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgbWVyZ2UsIG9mLCBzd2l0Y2hNYXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFRpbGVMb2FkUmVzdWx0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3RpbGUtbG9hZC1yZXN1bHQuaW50ZXJmYWNlJztcblxuXG4vLyBBIHN3ZWVwIG9mIGNoYW5nZXMgKGEgZmV3IGZpbHRlcnMgc2V0IGluIGEgcm93LCBldmVyeSB2YWx1ZSBvZiBhbiBhcHBsaWVkXG4vLyB2aWV3KSBzZXR0bGVzIGZvciB0aGlzIGxvbmcgYmVmb3JlIGEgdGlsZSByZWZldGNoZXMsIHNvIHRoZSBzd2VlcCBjb3N0cyBvbmVcbi8vIHJlcXVlc3QsIG5vdCBvbmUgcGVyIGNoYW5nZS5cbmV4cG9ydCBjb25zdCBUSUxFX1JFRlJFU0hfREVCT1VOQ0VfTVMgPSAzMDA7XG5cbi8vIEEgdGlsZSdzIGRhdGEgYXMgb25lIHN0cmVhbTogdGhlIGZpcnN0IGxvYWQgYXQgb25jZSwgdGhlbiBvbmUgbG9hZCBwZXJcbi8vIHNldHRsZWQgYnVyc3Qgb2YgcmVmcmVzaCB0cmlnZ2Vycy5cbi8vXG4vLyAtIEVhY2ggdHJpZ2dlciBzdGFydHMgb3ZlciAoc3dpdGNoTWFwKTogaXQgY2FuY2VscyB0aGUgd2FpdCBmb3IgdGhlIG9uZVxuLy8gICBiZWZvcmUgaXQgYW5kIHRoZSByZXF1ZXN0IGluIGZsaWdodCwgdGhlbiB3YWl0cyBmb3IgdGhlIHN3ZWVwIHRvIHNldHRsZS5cbi8vICAgU28gYW4gYW5zd2VyIHRvIGFuIG9sZGVyIHJlcXVlc3QgbmV2ZXIgbGFuZHMsIG5vdCBldmVuIHdoaWxlIHRoZSBuZXh0XG4vLyAgIGxvYWQgc3RpbGwgd2FpdHMsIGFuZCB0aGUgYmFyIHN0YXlzIG9uIHVudGlsIHRoZSBzZXR0bGVkIGxvYWQgYW5zd2Vycy5cbi8vIC0gRWFjaCBsb2FkIG5vdGVzIHRoZSBzdGF0ZSB2ZXJzaW9uIGl0IHdhcyBzZW50IHVuZGVyIChzdGF0ZVZlcnNpb24pLCBhbmRcbi8vICAgaXRzIGFuc3dlciBpcyBkcm9wcGVkIHdoZW4gdGhlIHZlcnNpb24gaGFzIG1vdmVkIHNpbmNlLiBhcHBseSgpIGFuZFxuLy8gICByZXNldFRvQmFzZSgpIG1vdmUgdGhlIHZlcnNpb24gYW5kIGFubm91bmNlIGEgZnVsbCBjaGFuZ2UgdG9nZXRoZXIsIHNvXG4vLyAgIHRoZSBsb2FkIGZvciB0aGUgbmV3IHN0YXRlIGlzIGFscmVhZHkgb24gaXRzIHdheS5cbi8vIC0gQSBmYWlsZWQgbG9hZCBlbmRzIG9ubHkgaXRzZWxmOiBpdHMgbWVzc2FnZSBjb21lcyB0aHJvdWdoIGFzIHRoZSBhbnN3ZXIsXG4vLyAgIGFuZCB0aGUgbmV4dCB0cmlnZ2VyIGxvYWRzIGFnYWluLlxuZXhwb3J0IGZ1bmN0aW9uIHRpbGVMb2FkczxUPihcbiAgcmVmcmVzaCQ6IE9ic2VydmFibGU8dW5rbm93bj4sXG4gIGxvYWQ6ICgpID0+IE9ic2VydmFibGU8VD4sXG4gIHZlcnNpb246ICgpID0+IG51bWJlcixcbik6IE9ic2VydmFibGU8VGlsZUxvYWRSZXN1bHQ8VD4+IHtcbiAgcmV0dXJuIG1lcmdlKG9mKDApLCByZWZyZXNoJC5waXBlKG1hcCgoKSA9PiBUSUxFX1JFRlJFU0hfREVCT1VOQ0VfTVMpKSlcbiAgICAucGlwZShcbiAgICAgIHN3aXRjaE1hcCgod2FpdCkgPT4gKHdhaXQgPyB0aW1lcih3YWl0KSA6IG9mKDApKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gb25lTG9hZChsb2FkLCB2ZXJzaW9uKSksXG4gICAgICAgICkpLFxuICAgICk7XG59XG5cbi8vIE9uZSByZXF1ZXN0OiBpdHMgYW5zd2VyLCBvciBpdHMgZmFpbHVyZSBhcyBhIG1lc3NhZ2UsIGRyb3BwZWQgd2hlbiB0aGVcbi8vIHN0YXRlIHZlcnNpb24gbW92ZWQgd2hpbGUgaXQgd2FzIG91dC5cbmZ1bmN0aW9uIG9uZUxvYWQ8VD4obG9hZDogKCkgPT4gT2JzZXJ2YWJsZTxUPiwgdmVyc2lvbjogKCkgPT4gbnVtYmVyKTogT2JzZXJ2YWJsZTxUaWxlTG9hZFJlc3VsdDxUPj4ge1xuICBjb25zdCBzZW50QXQgPSB2ZXJzaW9uKCk7XG5cbiAgcmV0dXJuIGxvYWQoKVxuICAgIC5waXBlKFxuICAgICAgbWFwKChkYXRhKTogVGlsZUxvYWRSZXN1bHQ8VD4gPT4gKHsgZGF0YSwgZXJyb3I6IG51bGwgfSkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IHVua25vd24pID0+IG9mPFRpbGVMb2FkUmVzdWx0PFQ+Pih7IGRhdGE6IG51bGwsIGVycm9yOiBsb2FkRXJyb3JNZXNzYWdlKGVycm9yKSB9KSksXG4gICAgICBmaWx0ZXIoKCkgPT4gdmVyc2lvbigpID09PSBzZW50QXQpLFxuICAgICk7XG59XG5cbi8vIFdoYXQgYSBmYWlsZWQgcmVxdWVzdCBzYXlzOiB0aGUgc2VydmVyJ3MgbWVzc2FnZSwgZWxzZSB0aGUgZXJyb3IncyBvd24sXG4vLyBlbHNlIGEgcGxhaW4gZmFsbGJhY2suXG5mdW5jdGlvbiBsb2FkRXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgY29uc3QgZmFpbHVyZSA9IGVycm9yIGFzIHsgZXJyb3I/OiB7IG1lc3NhZ2U/OiB1bmtub3duIH07IG1lc3NhZ2U/OiB1bmtub3duIH0gfCBudWxsO1xuICBjb25zdCBtZXNzYWdlID0gZmFpbHVyZT8uZXJyb3I/Lm1lc3NhZ2UgPz8gZmFpbHVyZT8ubWVzc2FnZTtcblxuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UgPyBtZXNzYWdlIDogJ0ZhaWxlZCB0byBsb2FkIGRhdGEnO1xufVxuIl19
|