bways-report 0.1.8 → 0.2.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/README.md +463 -316
- package/esm2022/lib/core/config/bways-report-config.mjs +31 -32
- package/esm2022/lib/core/models/index.mjs +1 -1
- package/esm2022/lib/core/models/report-api-endpoint.model.mjs +8 -0
- package/esm2022/lib/core/models/report-component.model.mjs +1 -1
- package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
- package/esm2022/lib/core/services/index.mjs +2 -1
- package/esm2022/lib/core/services/report-api-execution.service.mjs +210 -0
- package/esm2022/lib/core/services/report-data-discovery.service.mjs +76 -4
- package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
- package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
- package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
- package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
- package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
- package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +31 -1
- package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +27 -2
- package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
- package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
- package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
- package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
- package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +4 -37
- package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +28 -51
- package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
- package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
- package/esm2022/lib/data-access/adapters/index.mjs +1 -1
- package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
- package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
- package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
- package/esm2022/lib/data-access/contracts/index.mjs +1 -1
- package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
- package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
- package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +536 -6
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +55 -17
- package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +546 -119
- package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +142 -8
- package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +129 -28
- package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +3 -3
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +27 -13
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
- package/esm2022/lib/features/designer/designer.component.mjs +109 -75
- package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
- package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
- package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
- package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
- package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +2 -1
- package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
- package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
- package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
- package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
- package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
- package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +6 -4
- package/esm2022/lib/features/routing/report-routes.mjs +6 -6
- package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
- package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
- package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +23 -4
- package/esm2022/lib/features/runtime/report-execution.service.mjs +36 -6
- package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +54 -11
- package/esm2022/lib/features/runtime/report-runtime.component.mjs +105 -68
- package/esm2022/lib/features/runtime/rpt-report.component.mjs +50 -42
- package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
- package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +16 -7
- package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +53 -1
- package/esm2022/lib/primitives/components/index.mjs +2 -1
- package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +428 -0
- package/esm2022/lib/primitives/register-builtins.mjs +51 -2
- package/esm2022/lib/provide-reporting.mjs +11 -29
- package/fesm2022/bways-report.mjs +3745 -1281
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/core/config/bways-report-config.d.ts +27 -5
- package/lib/core/models/index.d.ts +2 -1
- package/lib/core/models/report-api-endpoint.model.d.ts +30 -0
- package/lib/core/models/report-component.model.d.ts +16 -4
- package/lib/core/models/report-datasource.model.d.ts +21 -2
- package/lib/core/services/index.d.ts +1 -0
- package/lib/core/services/report-api-execution.service.d.ts +41 -0
- package/lib/core/services/report-data-discovery.service.d.ts +23 -1
- package/lib/core/services/report-session-context.service.d.ts +9 -0
- package/lib/core/tokens/designer-config.token.d.ts +4 -0
- package/lib/core/tokens/reporting-config.token.d.ts +4 -0
- package/lib/core/utils/report-endpoint.util.d.ts +12 -0
- package/lib/core/utils/report-request-scope.d.ts +14 -0
- package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +2 -0
- package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +1 -0
- package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
- package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
- package/lib/data-access/adapters/endpoint-tokens.d.ts +7 -0
- package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
- package/lib/data-access/adapters/http-lookup.adapter.d.ts +3 -4
- package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
- package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
- package/lib/data-access/adapters/index.d.ts +1 -1
- package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
- package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
- package/lib/data-access/adapters/session-headers.d.ts +3 -0
- package/lib/data-access/contracts/index.d.ts +1 -0
- package/lib/data-access/contracts/lookup.contract.d.ts +3 -0
- package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
- package/lib/features/designer/components/component-palette/component-palette.component.d.ts +16 -0
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
- package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
- package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +21 -3
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +20 -7
- package/lib/features/designer/components/property-editor/property-editor.component.d.ts +2 -1
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
- package/lib/features/designer/designer.component.d.ts +16 -2
- package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
- package/lib/features/designer/services/designer-config.service.d.ts +13 -0
- package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
- package/lib/features/persistence/services/report-store.service.d.ts +15 -1
- package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
- package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
- package/lib/features/runtime/report-execution.service.d.ts +4 -0
- package/lib/features/runtime/report-grid-bridge.component.d.ts +4 -1
- package/lib/features/runtime/report-runtime.component.d.ts +14 -1
- package/lib/features/runtime/rpt-report.component.d.ts +5 -0
- package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
- package/lib/primitives/components/index.d.ts +2 -0
- package/lib/primitives/components/radio/rpt-radio.component.d.ts +77 -0
- package/package.json +2 -1
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Simplified configuration for bways-report.
|
|
3
|
-
*
|
|
4
|
-
* This is the developer-facing config object that makes integration
|
|
5
|
-
* as simple as 3–4 endpoint URLs + optional overrides.
|
|
6
|
-
* The normalizer converts this into the internal `ReportingConfig`
|
|
7
|
-
* plus adapter wiring decisions.
|
|
8
|
-
*/
|
|
1
|
+
import { resolveReportsEndpoint } from '../utils/report-endpoint.util';
|
|
9
2
|
/**
|
|
10
3
|
* Mapping from friendly palette category names to internal category IDs.
|
|
11
4
|
*/
|
|
@@ -18,22 +11,29 @@ export const PALETTE_CATEGORY_MAP = {
|
|
|
18
11
|
};
|
|
19
12
|
/**
|
|
20
13
|
* Normalizes a `BwaysReportConfig` into the internal format.
|
|
21
|
-
* Validates
|
|
14
|
+
* Validates supplied endpoints and maps friendly names to internal IDs.
|
|
22
15
|
*/
|
|
23
16
|
export function normalizeBwaysConfig(config) {
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
// Capabilities are optional; validate only URLs the host supplies.
|
|
18
|
+
for (const key of ['spEndpoint', 'tablesEndpoint', 'executeEndpoint', 'lookupEndpoint', 'reportsEndpoint', 'apisEndpoint']) {
|
|
19
|
+
if (config[key] !== undefined && (typeof config[key] !== 'string' || !config[key]?.trim())) {
|
|
20
|
+
throw new Error('[bways-report] "' + key + '" must be a non-empty URL when supplied.');
|
|
21
|
+
}
|
|
28
22
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
if (!config.executeEndpoint || typeof config.executeEndpoint !== 'string' || config.executeEndpoint.trim() === '') {
|
|
34
|
-
throw new Error(`[bways-report] "executeEndpoint" is required in BwaysReportConfig. ` +
|
|
35
|
-
`Please provide the URL for executing queries, e.g. '/api/reporting/execute'.`);
|
|
23
|
+
for (const key of ['lookupTimeoutMs', 'executionTimeoutMs']) {
|
|
24
|
+
if (config[key] !== undefined && (!Number.isFinite(config[key]) || config[key] <= 0))
|
|
25
|
+
throw new Error(key + ' must be a positive timeout.');
|
|
36
26
|
}
|
|
27
|
+
if (config.trustedApiOrigins !== undefined && (!Array.isArray(config.trustedApiOrigins) || config.trustedApiOrigins.some(origin => {
|
|
28
|
+
try {
|
|
29
|
+
const parsed = new URL(origin);
|
|
30
|
+
return !/^https?:$/.test(parsed.protocol) || parsed.origin !== origin || !!parsed.username || !!parsed.password;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
})))
|
|
36
|
+
throw new Error('trustedApiOrigins must contain exact HTTP(S) origins, without paths or credentials.');
|
|
37
37
|
// Map component palette categories
|
|
38
38
|
let allowedCategories = null;
|
|
39
39
|
if (config.components && config.components.length > 0) {
|
|
@@ -47,23 +47,20 @@ export function normalizeBwaysConfig(config) {
|
|
|
47
47
|
return internal;
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
|
-
|
|
51
|
-
const reportsEndpoint = config.reportsEndpoint?.trim() || null;
|
|
52
|
-
if (!reportsEndpoint) {
|
|
53
|
-
console.warn(`[bways-report] No "reportsEndpoint" provided. Reports will be saved to browser localStorage. ` +
|
|
54
|
-
`For shared report menus across users, provide a reportsEndpoint, e.g. '/api/reporting/reports'.`);
|
|
55
|
-
}
|
|
50
|
+
const reportsEndpoint = resolveReportsEndpoint(config);
|
|
56
51
|
const lookupEndpoint = config.lookupEndpoint?.trim()
|
|
57
52
|
? cleanUrl(config.lookupEndpoint)
|
|
58
|
-
: config.executeEndpoint
|
|
53
|
+
: config.executeEndpoint?.includes('/execute')
|
|
59
54
|
? cleanUrl(config.executeEndpoint.replace(/\/execute\/?$/, '/lookup'))
|
|
60
55
|
: null;
|
|
61
56
|
return {
|
|
62
|
-
spEndpoint: cleanUrl(config.spEndpoint),
|
|
63
|
-
tablesEndpoint: cleanUrl(config.tablesEndpoint),
|
|
64
|
-
executeEndpoint: cleanUrl(config.executeEndpoint),
|
|
57
|
+
spEndpoint: config.spEndpoint ? cleanUrl(config.spEndpoint) : '',
|
|
58
|
+
tablesEndpoint: config.tablesEndpoint ? cleanUrl(config.tablesEndpoint) : '',
|
|
59
|
+
executeEndpoint: config.executeEndpoint ? cleanUrl(config.executeEndpoint) : '',
|
|
65
60
|
lookupEndpoint,
|
|
66
|
-
reportsEndpoint
|
|
61
|
+
reportsEndpoint,
|
|
62
|
+
apisEndpoint: config.apisEndpoint?.trim() ? cleanUrl(config.apisEndpoint) : null,
|
|
63
|
+
apiEndpoints: Array.isArray(config.apiEndpoints) ? config.apiEndpoints : [],
|
|
67
64
|
allowedCategories,
|
|
68
65
|
autoParameter: config.autoParameter !== false, // default true
|
|
69
66
|
routeBase: config.routeBase?.trim() || 'reports',
|
|
@@ -74,10 +71,12 @@ export function normalizeBwaysConfig(config) {
|
|
|
74
71
|
defaultPageSize: config.defaultPageSize ?? 25,
|
|
75
72
|
dateFormat: config.dateFormat ?? 'dd/MM/yyyy',
|
|
76
73
|
lookupTimeoutMs: config.lookupTimeoutMs ?? 300000,
|
|
74
|
+
executionTimeoutMs: config.executionTimeoutMs,
|
|
75
|
+
trustedApiOrigins: config.trustedApiOrigins ?? [],
|
|
77
76
|
};
|
|
78
77
|
}
|
|
79
78
|
/** Remove trailing slashes from a URL */
|
|
80
79
|
function cleanUrl(url) {
|
|
81
80
|
return url.trim().replace(/\/+$/, '');
|
|
82
81
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYndheXMtcmVwb3J0LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvY29uZmlnL2J3YXlzLXJlcG9ydC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQXVCSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFvQztJQUNuRSxVQUFVLEVBQUUsT0FBTztJQUNuQixhQUFhLEVBQUUsUUFBUTtJQUN2QixhQUFhLEVBQUUsU0FBUztJQUN4QixXQUFXLEVBQUUsTUFBTTtJQUNuQixNQUFNLEVBQUUsUUFBUTtDQUNqQixDQUFDO0FBbUtGOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUF5QjtJQUM1RCw4QkFBOEI7SUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksT0FBTyxNQUFNLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ25HLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0VBQWdFO1lBQ2hFLDBGQUEwRixDQUMzRixDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLE9BQU8sTUFBTSxDQUFDLGNBQWMsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMvRyxNQUFNLElBQUksS0FBSyxDQUNiLG9FQUFvRTtZQUNwRSxpRkFBaUYsQ0FDbEYsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxPQUFPLE1BQU0sQ0FBQyxlQUFlLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFB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bnRlbnQiOlsiLyoqXG4gKiBTaW1wbGlmaWVkIGNvbmZpZ3VyYXRpb24gZm9yIGJ3YXlzLXJlcG9ydC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBkZXZlbG9wZXItZmFjaW5nIGNvbmZpZyBvYmplY3QgdGhhdCBtYWtlcyBpbnRlZ3JhdGlvblxuICogYXMgc2ltcGxlIGFzIDPigJM0IGVuZHBvaW50IFVSTHMgKyBvcHRpb25hbCBvdmVycmlkZXMuXG4gKiBUaGUgbm9ybWFsaXplciBjb252ZXJ0cyB0aGlzIGludG8gdGhlIGludGVybmFsIGBSZXBvcnRpbmdDb25maWdgXG4gKiBwbHVzIGFkYXB0ZXIgd2lyaW5nIGRlY2lzaW9ucy5cbiAqL1xuXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZXNzaW9uQ29udGV4dFByb3ZpZGVyLCBTZXNzaW9uQ29udGV4dFNvdXJjZSB9IGZyb20gJy4uL3Rva2Vucy9zZXNzaW9uLWNvbnRleHQudG9rZW4nO1xuXG4vKipcbiAqIFBhbGV0dGUgY29tcG9uZW50IGNhdGVnb3J5IG5hbWVzIHRoZSBkZXZlbG9wZXIgY2FuIHVzZVxuICogd2hlbiByZXN0cmljdGluZyB0aGUgZGVzaWduZXIgY29tcG9uZW50IHBhbGV0dGUuXG4gKlxuICogTWFwcyB0byBpbnRlcm5hbCByZWdpc3RyeSBjYXRlZ29yeSBJRHM6XG4gKiAtIGBmb3JtSW5wdXRzYCAgICDihpIgYGlucHV0YFxuICogLSBgYWN0aW9uQnV0dG9uc2Ag4oaSIGBhY3Rpb25gXG4gKiAtIGBkaXNwbGF5TGFiZWxzYCDihpIgYGRpc3BsYXlgXG4gKiAtIGBkYXRhTG9va3Vwc2AgICDihpIgYGRhdGFgXG4gKiAtIGBsYXlvdXRgICAgICAgICDihpIgYGxheW91dGBcbiAqL1xuZXhwb3J0IHR5cGUgUGFsZXR0ZUNhdGVnb3J5ID1cbiAgfCAnZm9ybUlucHV0cydcbiAgfCAnYWN0aW9uQnV0dG9ucydcbiAgfCAnZGlzcGxheUxhYmVscydcbiAgfCAnZGF0YUxvb2t1cHMnXG4gIHwgJ2xheW91dCc7XG5cbi8qKlxuICogTWFwcGluZyBmcm9tIGZyaWVuZGx5IHBhbGV0dGUgY2F0ZWdvcnkgbmFtZXMgdG8gaW50ZXJuYWwgY2F0ZWdvcnkgSURzLlxuICovXG5leHBvcnQgY29uc3QgUEFMRVRURV9DQVRFR09SWV9NQVA6IFJlY29yZDxQYWxldHRlQ2F0ZWdvcnksIHN0cmluZz4gPSB7XG4gIGZvcm1JbnB1dHM6ICdpbnB1dCcsXG4gIGFjdGlvbkJ1dHRvbnM6ICdhY3Rpb24nLFxuICBkaXNwbGF5TGFiZWxzOiAnZGlzcGxheScsXG4gIGRhdGFMb29rdXBzOiAnZGF0YScsXG4gIGxheW91dDogJ2xheW91dCcsXG59O1xuXG4vKipcbiAqIFNpbXBsaWZpZWQsIGRldmVsb3Blci1mYWNpbmcgY29uZmlndXJhdGlvbiBmb3IgYndheXMtcmVwb3J0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXBvcnRDb25maWc6IEJ3YXlzUmVwb3J0Q29uZmlnID0ge1xuICogICBzcEVuZHBvaW50OiAgICAgICcvYXBpL3JlcG9ydGluZy9wcm9jZWR1cmVzJyxcbiAqICAgdGFibGVzRW5kcG9pbnQ6ICAnL2FwaS9yZXBvcnRpbmcvdGFibGVzJyxcbiAqICAgZXhlY3V0ZUVuZHBvaW50OiAnL2FwaS9yZXBvcnRpbmcvZXhlY3V0ZScsXG4gKiAgIHJlcG9ydHNFbmRwb2ludDogJy9hcGkvcmVwb3J0aW5nL3JlcG9ydHMnLFxuICogICBjb21wb25lbnRzOiBbJ2Zvcm1JbnB1dHMnLCAnYWN0aW9uQnV0dG9ucycsICdkaXNwbGF5TGFiZWxzJ10sXG4gKiAgIGF1dG9QYXJhbWV0ZXI6IHRydWUsXG4gKiAgIHNlc3Npb246ICgpID0+IGluamVjdChBdXRoU2VydmljZSkuc2Vzc2lvbigpLFxuICogICByb3V0ZUJhc2U6ICdyZXBvcnRzJyxcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCd2F5c1JlcG9ydENvbmZpZyB7XG4gIC8vIOKUgOKUgOKUgCBCYWNrZW5kIGVuZHBvaW50cyAodGhlIDPigJM0IGVuZHBvaW50IGNvbnRyYWN0KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogR0VUIGVuZHBvaW50IHJldHVybmluZyB0aGUgbGlzdCBvZiBzdG9yZWQgcHJvY2VkdXJlcyB3aXRoIHRoZWlyIHBhcmFtZXRlcnMuXG4gICAqIFJlc3BvbnNlOiBgW3sgbmFtZSwgc2NoZW1hLCBwYXJhbWV0ZXJzOiBbeyBuYW1lLCBzcWxUeXBlLCByZXF1aXJlZCwgZGVmYXVsdFZhbHVlPyB9XSB9XWBcbiAgICovXG4gIHNwRW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogR0VUIGVuZHBvaW50IHJldHVybmluZyB0aGUgbGlzdCBvZiB0YWJsZXMvdmlld3Mgd2l0aCB0aGVpciBjb2x1bW5zLlxuICAgKiBSZXNwb25zZTogYFt7IG5hbWUsIHNjaGVtYSwgdHlwZTogJ3RhYmxlJ3wndmlldycsIGNvbHVtbnM6IFt7IG5hbWUsIHNxbFR5cGUgfV0gfV1gXG4gICAqL1xuICB0YWJsZXNFbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQT1NUIGVuZHBvaW50IHRoYXQgcnVucyBhIHN0b3JlZCBwcm9jZWR1cmUgb3IgdGFibGUgcXVlcnkgYW5kIHJldHVybnMgcm93cy5cbiAgICogQm9keTogYHsga2luZDogJ3Byb2NlZHVyZSd8J3RhYmxlJywgbmFtZSwgc2NoZW1hLCBwYXJhbWV0ZXJzLCBjb2x1bW5zPywgdG9wPyB9YFxuICAgKiBSZXNwb25zZTogYHJvd3NbXWBcbiAgICovXG4gIGV4ZWN1dGVFbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBQT1NUIGVuZHBvaW50IGZvciBmZXRjaGluZyBkcm9wZG93biBtYXN0ZXIgZGF0YSBhbmQgbG9va3VwIG9wdGlvbnMuXG4gICAqIERlZmF1bHRzIHRvIHJlcGxhY2luZyBgL2V4ZWN1dGVgIHdpdGggYC9sb29rdXBgIGlmIG9taXR0ZWQuXG4gICAqL1xuICBsb29rdXBFbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgQ1JVRCBlbmRwb2ludCBmb3Igc2F2aW5nL2xvYWRpbmcgcmVwb3J0IHBhZ2UgZGVmaW5pdGlvbnMuXG4gICAqIFdoZW4gb21pdHRlZCwgcmVwb3J0cyBhcmUgc2F2ZWQgdG8gYnJvd3NlciBsb2NhbFN0b3JhZ2Ugd2l0aCBhIGNvbnNvbGUgd2FybmluZy5cbiAgICogLSBHRVQgICAg4oaSIGxpc3Qgc2F2ZWQgcmVwb3J0c1xuICAgKiAtIEdFVCAvOmlkIOKGkiBsb2FkIGEgc3BlY2lmaWMgcmVwb3J0XG4gICAqIC0gUE9TVCAgIOKGkiBzYXZlIGEgbmV3IG9yIHVwZGF0ZWQgcmVwb3J0XG4gICAqIC0gREVMRVRFIC86aWQg4oaSIGRlbGV0ZSBhIHJlcG9ydFxuICAgKi9cbiAgcmVwb3J0c0VuZHBvaW50Pzogc3RyaW5nO1xuXG4gIC8vIOKUgOKUgOKUgCBEZXNpZ25lciBvcHRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgcGFsZXR0ZSBncm91cHMgdG8gc2hvdyBpbiB0aGUgZGVzaWduZXIuXG4gICAqIERlZmF1bHRzIHRvIGFsbCBncm91cHMgd2hlbiBub3Qgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAZXhhbXBsZSBbJ2Zvcm1JbnB1dHMnLCAnYWN0aW9uQnV0dG9ucycsICdkaXNwbGF5TGFiZWxzJ11cbiAgICovXG4gIGNvbXBvbmVudHM/OiBQYWxldHRlQ2F0ZWdvcnlbXTtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCBzdG9yZWQgcHJvY2VkdXJlIHBhcmFtZXRlcnMgbGlrZSBgQEJyYW5jaElkYCwgYEBDb21wYW55SWRgXG4gICAqIGFyZSBhdXRvbWF0aWNhbGx5IGJvdW5kIGZyb20gdGhlIHNlc3Npb24gY29udGV4dC5cbiAgICogUmVxdWlyZXMgYHNlc3Npb25gIHRvIGJlIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBhdXRvUGFyYW1ldGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2Vzc2lvbiBjb250ZXh0IHByb3ZpZGVyIGZvciBhdXRvLXBhcmFtZXRlciBiaW5kaW5nLlxuICAgKiBDYW4gYmUgYSBzZXJ2aWNlIGNsYXNzIGltcGxlbWVudGluZyBgU2Vzc2lvbkNvbnRleHRQcm92aWRlcmAsXG4gICAqIGEgcGxhaW4gb2JqZWN0LCBhIGZhY3RvcnkgZnVuY3Rpb24sIGFuIE9ic2VydmFibGUsIG9yIGEgU2lnbmFsLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBzZXNzaW9uOiBQbGF5Z3JvdW5kU2Vzc2lvblNlcnZpY2VcbiAgICogc2Vzc2lvbjogKCkgPT4gaW5qZWN0KEF1dGhTZXJ2aWNlKS5zZXNzaW9uKClcbiAgICogc2Vzc2lvbjogeyBicmFuY2hJZDogMSwgY29tcGFueUlkOiAxMCB9XG4gICAqL1xuICBzZXNzaW9uPzogVHlwZTxTZXNzaW9uQ29udGV4dFByb3ZpZGVyPiB8IFNlc3Npb25Db250ZXh0U291cmNlIHwgKCgpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgc2VydmljZSBjbGFzcyBpbXBsZW1lbnRpbmcgYFNlc3Npb25Db250ZXh0UHJvdmlkZXJgLlxuICAgKiBFcXVpdmFsZW50IHRvIGBzZXNzaW9uOiBNeVNlc3Npb25TZXJ2aWNlYC5cbiAgICovXG4gIHNlc3Npb25Qcm92aWRlcj86IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj47XG5cbiAgLy8g4pSA4pSA4pSAIExpdmUgcGFnZSBvcHRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBCYXNlIHBhdGggZm9yIGxpdmUgcmVwb3J0IHBhZ2VzLlxuICAgKiBHZW5lcmF0ZWQgcmVwb3J0IHBhZ2VzIG9wZW4gYXQgYC88cm91dGVCYXNlPi88c2x1Zz5gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAncmVwb3J0cydcbiAgICovXG4gIHJvdXRlQmFzZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgQW5ndWxhciBjb21wb25lbnQgZm9yIHJlbmRlcmluZyBkYXRhIGdyaWRzLlxuICAgKiBQYXNzIHlvdXIgZ3JpZCBjb21wb25lbnQgKEJXYXlzLWdyaWQsIEFHIEdyaWQgd3JhcHBlciwgZXRjLikuXG4gICAqL1xuICBncmlkPzogVHlwZTx1bmtub3duPjtcblxuICAvKipcbiAgICogT3B0aW9uYWwgQW5ndWxhciBjb21wb25lbnQgZm9yIHJlbmRlcmluZyBjaGFydHMuXG4gICAqL1xuICBjaGFydD86IFR5cGU8dW5rbm93bj47XG5cbiAgLy8g4pSA4pSA4pSAIEdlbmVyYWwgb3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogRGVmYXVsdCBwYWdlIHNpemUgZm9yIGdyaWQgcmVzdWx0cy4gQGRlZmF1bHQgMjUgKi9cbiAgZGVmYXVsdFBhZ2VTaXplPzogbnVtYmVyO1xuXG4gIC8qKiBEYXRlIGZvcm1hdCBzdHJpbmcgdXNlZCBhY3Jvc3MgdGhlIGxpYnJhcnkuIEBkZWZhdWx0ICdkZC9NTS95eXl5JyAqL1xuICBkYXRlRm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKiBUaW1lb3V0IGluIG1zIGZvciBsb29rdXAvZXhlY3V0ZSBxdWVyaWVzLiBAZGVmYXVsdCAzMDAwMDAgKi9cbiAgbG9va3VwVGltZW91dE1zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBub3JtYWxpemluZyBhIGBCd2F5c1JlcG9ydENvbmZpZ2AgZm9yIGludGVybmFsIHVzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3JtYWxpemVkQndheXNDb25maWcge1xuICAvKiogRW5kcG9pbnQgVVJMcyAqL1xuICBzcEVuZHBvaW50OiBzdHJpbmc7XG4gIHRhYmxlc0VuZHBvaW50OiBzdHJpbmc7XG4gIGV4ZWN1dGVFbmRwb2ludDogc3RyaW5nO1xuICBsb29rdXBFbmRwb2ludDogc3RyaW5nIHwgbnVsbDtcbiAgcmVwb3J0c0VuZHBvaW50OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKiBSZXNvbHZlZCBpbnRlcm5hbCBjYXRlZ29yeSBJRHMgKGUuZy4gWydpbnB1dCcsICdhY3Rpb24nLCAnZGlzcGxheSddKSAqL1xuICBhbGxvd2VkQ2F0ZWdvcmllczogc3RyaW5nW10gfCBudWxsO1xuXG4gIC8qKiBXaGV0aGVyIGF1dG8tcGFyYW1ldGVyIGJpbmRpbmcgaXMgZW5hYmxlZCAqL1xuICBhdXRvUGFyYW1ldGVyOiBib29sZWFuO1xuXG4gIC8qKiBSb3V0ZSBiYXNlIHBhdGggKi9cbiAgcm91dGVCYXNlOiBzdHJpbmc7XG5cbiAgLyoqIFNlc3Npb24gc291cmNlICovXG4gIHNlc3Npb246IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBTZXNzaW9uQ29udGV4dFNvdXJjZSB8ICgoKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfCBudWxsO1xuICBzZXNzaW9uUHJvdmlkZXI6IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBudWxsO1xuXG4gIC8qKiBHcmlkIGNvbXBvbmVudCAqL1xuICBncmlkQ29tcG9uZW50OiBUeXBlPHVua25vd24+IHwgbnVsbDtcblxuICAvKiogQ2hhcnQgY29tcG9uZW50ICovXG4gIGNoYXJ0Q29tcG9uZW50OiBUeXBlPHVua25vd24+IHwgbnVsbDtcblxuICAvKiogR2VuZXJhbCBjb25maWcgdmFsdWVzICovXG4gIGRlZmF1bHRQYWdlU2l6ZTogbnVtYmVyO1xuICBkYXRlRm9ybWF0OiBzdHJpbmc7XG4gIGxvb2t1cFRpbWVvdXRNczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBgQndheXNSZXBvcnRDb25maWdgIGludG8gdGhlIGludGVybmFsIGZvcm1hdC5cbiAqIFZhbGlkYXRlcyByZXF1aXJlZCBmaWVsZHMgYW5kIG1hcHMgZnJpZW5kbHkgbmFtZXMgdG8gaW50ZXJuYWwgSURzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQndheXNDb25maWcoY29uZmlnOiBCd2F5c1JlcG9ydENvbmZpZyk6IE5vcm1hbGl6ZWRCd2F5c0NvbmZpZyB7XG4gIC8vIFZhbGlkYXRlIHJlcXVpcmVkIGVuZHBvaW50c1xuICBpZiAoIWNvbmZpZy5zcEVuZHBvaW50IHx8IHR5cGVvZiBjb25maWcuc3BFbmRwb2ludCAhPT0gJ3N0cmluZycgfHwgY29uZmlnLnNwRW5kcG9pbnQudHJpbSgpID09PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBbYndheXMtcmVwb3J0XSBcInNwRW5kcG9pbnRcIiBpcyByZXF1aXJlZCBpbiBCd2F5c1JlcG9ydENvbmZpZy4gYCArXG4gICAgICBgUGxlYXNlIHByb3ZpZGUgdGhlIFVSTCBmb3IgZmV0Y2hpbmcgc3RvcmVkIHByb2NlZHVyZXMsIGUuZy4gJy9hcGkvcmVwb3J0aW5nL3Byb2NlZHVyZXMnLmBcbiAgICApO1xuICB9XG4gIGlmICghY29uZmlnLnRhYmxlc0VuZHBvaW50IHx8IHR5cGVvZiBjb25maWcudGFibGVzRW5kcG9pbnQgIT09ICdzdHJpbmcnIHx8IGNvbmZpZy50YWJsZXNFbmRwb2ludC50cmltKCkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFtid2F5cy1yZXBvcnRdIFwidGFibGVzRW5kcG9pbnRcIiBpcyByZXF1aXJlZCBpbiBCd2F5c1JlcG9ydENvbmZpZy4gYCArXG4gICAgICBgUGxlYXNlIHByb3ZpZGUgdGhlIFVSTCBmb3IgZmV0Y2hpbmcgdGFibGVzL3ZpZXdzLCBlLmcuICcvYXBpL3JlcG9ydGluZy90YWJsZXMnLmBcbiAgICApO1xuICB9XG4gIGlmICghY29uZmlnLmV4ZWN1dGVFbmRwb2ludCB8fCB0eXBlb2YgY29uZmlnLmV4ZWN1dGVFbmRwb2ludCAhPT0gJ3N0cmluZycgfHwgY29uZmlnLmV4ZWN1dGVFbmRwb2ludC50cmltKCkgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFtid2F5cy1yZXBvcnRdIFwiZXhlY3V0ZUVuZHBvaW50XCIgaXMgcmVxdWlyZWQgaW4gQndheXNSZXBvcnRDb25maWcuIGAgK1xuICAgICAgYFBsZWFzZSBwcm92aWRlIHRoZSBVUkwgZm9yIGV4ZWN1dGluZyBxdWVyaWVzLCBlLmcuICcvYXBpL3JlcG9ydGluZy9leGVjdXRlJy5gXG4gICAgKTtcbiAgfVxuXG4gIC8vIE1hcCBjb21wb25lbnQgcGFsZXR0ZSBjYXRlZ29yaWVzXG4gIGxldCBhbGxvd2VkQ2F0ZWdvcmllczogc3RyaW5nW10gfCBudWxsID0gbnVsbDtcbiAgaWYgKGNvbmZpZy5jb21wb25lbnRzICYmIGNvbmZpZy5jb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICBhbGxvd2VkQ2F0ZWdvcmllcyA9IGNvbmZpZy5jb21wb25lbnRzLm1hcCgoZnJpZW5kbHkpID0+IHtcbiAgICAgIGNvbnN0IGludGVybmFsID0gUEFMRVRURV9DQVRFR09SWV9NQVBbZnJpZW5kbHldO1xuICAgICAgaWYgKCFpbnRlcm5hbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtid2F5cy1yZXBvcnRdIFVua25vd24gY29tcG9uZW50IGNhdGVnb3J5IFwiJHtmcmllbmRseX1cIi4gYCArXG4gICAgICAgICAgYFZhbGlkIG9wdGlvbnM6ICR7T2JqZWN0LmtleXMoUEFMRVRURV9DQVRFR09SWV9NQVApLmpvaW4oJywgJyl9LmBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZyaWVuZGx5OyAvLyBQYXNzIHRocm91Z2ggdW5rbm93biBjYXRlZ29yaWVzIGFzLWlzXG4gICAgICB9XG4gICAgICByZXR1cm4gaW50ZXJuYWw7XG4gICAgfSk7XG4gIH1cblxuICAvLyBXYXJuIGlmIHJlcG9ydHNFbmRwb2ludCBpcyBtaXNzaW5nXG4gIGNvbnN0IHJlcG9ydHNFbmRwb2ludCA9IGNvbmZpZy5yZXBvcnRzRW5kcG9pbnQ/LnRyaW0oKSB8fCBudWxsO1xuICBpZiAoIXJlcG9ydHNFbmRwb2ludCkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBbYndheXMtcmVwb3J0XSBObyBcInJlcG9ydHNFbmRwb2ludFwiIHByb3ZpZGVkLiBSZXBvcnRzIHdpbGwgYmUgc2F2ZWQgdG8gYnJvd3NlciBsb2NhbFN0b3JhZ2UuIGAgK1xuICAgICAgYEZvciBzaGFyZWQgcmVwb3J0IG1lbnVzIGFjcm9zcyB1c2VycywgcHJvdmlkZSBhIHJlcG9ydHNFbmRwb2ludCwgZS5nLiAnL2FwaS9yZXBvcnRpbmcvcmVwb3J0cycuYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBsb29rdXBFbmRwb2ludCA9IGNvbmZpZy5sb29rdXBFbmRwb2ludD8udHJpbSgpXG4gICAgPyBjbGVhblVybChjb25maWcubG9va3VwRW5kcG9pbnQpXG4gICAgOiBjb25maWcuZXhlY3V0ZUVuZHBvaW50LmluY2x1ZGVzKCcvZXhlY3V0ZScpXG4gICAgPyBjbGVhblVybChjb25maWcuZXhlY3V0ZUVuZHBvaW50LnJlcGxhY2UoL1xcL2V4ZWN1dGVcXC8/JC8sICcvbG9va3VwJykpXG4gICAgOiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgc3BFbmRwb2ludDogY2xlYW5VcmwoY29uZmlnLnNwRW5kcG9pbnQpLFxuICAgIHRhYmxlc0VuZHBvaW50OiBjbGVhblVybChjb25maWcudGFibGVzRW5kcG9pbnQpLFxuICAgIGV4ZWN1dGVFbmRwb2ludDogY2xlYW5VcmwoY29uZmlnLmV4ZWN1dGVFbmRwb2ludCksXG4gICAgbG9va3VwRW5kcG9pbnQsXG4gICAgcmVwb3J0c0VuZHBvaW50OiByZXBvcnRzRW5kcG9pbnQgPyBjbGVhblVybChyZXBvcnRzRW5kcG9pbnQpIDogbnVsbCxcblxuICAgIGFsbG93ZWRDYXRlZ29yaWVzLFxuICAgIGF1dG9QYXJhbWV0ZXI6IGNvbmZpZy5hdXRvUGFyYW1ldGVyICE9PSBmYWxzZSwgLy8gZGVmYXVsdCB0cnVlXG4gICAgcm91dGVCYXNlOiBjb25maWcucm91dGVCYXNlPy50cmltKCkgfHwgJ3JlcG9ydHMnLFxuICAgIHNlc3Npb246IGNvbmZpZy5zZXNzaW9uID8/IG51bGwsXG4gICAgc2Vzc2lvblByb3ZpZGVyOiBjb25maWcuc2Vzc2lvblByb3ZpZGVyID8/IG51bGwsXG5cbiAgICBncmlkQ29tcG9uZW50OiBjb25maWcuZ3JpZCA/PyBudWxsLFxuICAgIGNoYXJ0Q29tcG9uZW50OiBjb25maWcuY2hhcnQgPz8gbnVsbCxcblxuICAgIGRlZmF1bHRQYWdlU2l6ZTogY29uZmlnLmRlZmF1bHRQYWdlU2l6ZSA/PyAyNSxcbiAgICBkYXRlRm9ybWF0OiBjb25maWcuZGF0ZUZvcm1hdCA/PyAnZGQvTU0veXl5eScsXG4gICAgbG9va3VwVGltZW91dE1zOiBjb25maWcubG9va3VwVGltZW91dE1zID8/IDMwMDAwMCxcbiAgfTtcbn1cblxuLyoqIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzIGZyb20gYSBVUkwgKi9cbmZ1bmN0aW9uIGNsZWFuVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHVybC50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG59XG4iXX0=
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYndheXMtcmVwb3J0LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvY29uZmlnL2J3YXlzLXJlcG9ydC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFnQ3ZFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQW9DO0lBQ25FLFVBQVUsRUFBRSxPQUFPO0lBQ25CLGFBQWEsRUFBRSxRQUFRO0lBQ3ZCLGFBQWEsRUFBRSxTQUFTO0lBQ3hCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUE0TEY7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BQXlCO0lBQzVELG1FQUFtRTtJQUNuRSxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsQ0FBVSxFQUFFLENBQUM7UUFDcEksSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzRixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsR0FBRywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLG9CQUFvQixDQUFVLEVBQUUsQ0FBQztRQUNyRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLElBQUksQ0FB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LENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDaEYsWUFBWSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBRTNFLGlCQUFpQjtRQUNqQixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsS0FBSyxLQUFLLEVBQUUsZUFBZTtRQUM5RCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxTQUFTO1FBQ2hELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUk7UUFDL0IsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlLElBQUksSUFBSTtRQUUvQyxhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJO1FBQ2xDLGNBQWMsRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUk7UUFFcEMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlLElBQUksRUFBRTtRQUM3QyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsSUFBSSxZQUFZO1FBQzdDLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZSxJQUFJLE1BQU07UUFDakQsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtRQUM3QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCLElBQUksRUFBRTtLQUNsRCxDQUFDO0FBQ0osQ0FBQztBQUVELHlDQUF5QztBQUN6QyxTQUFTLFFBQVEsQ0FBQyxHQUFXO0lBQzNCLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmVSZXBvcnRzRW5kcG9pbnQgfSBmcm9tICcuLi91dGlscy9yZXBvcnQtZW5kcG9pbnQudXRpbCc7XG4vKipcbiAqIFNpbXBsaWZpZWQgY29uZmlndXJhdGlvbiBmb3IgYndheXMtcmVwb3J0LlxuICpcbiAqIFRoaXMgaXMgdGhlIGRldmVsb3Blci1mYWNpbmcgY29uZmlnIG9iamVjdCB0aGF0IG1ha2VzIGludGVncmF0aW9uXG4gKiBhcyBzaW1wbGUgYXMgM+KAkzQgZW5kcG9pbnQgVVJMcyArIG9wdGlvbmFsIG92ZXJyaWRlcy5cbiAqIFRoZSBub3JtYWxpemVyIGNvbnZlcnRzIHRoaXMgaW50byB0aGUgaW50ZXJuYWwgYFJlcG9ydGluZ0NvbmZpZ2BcbiAqIHBsdXMgYWRhcHRlciB3aXJpbmcgZGVjaXNpb25zLlxuICovXG5cbmltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlc3Npb25Db250ZXh0UHJvdmlkZXIsIFNlc3Npb25Db250ZXh0U291cmNlIH0gZnJvbSAnLi4vdG9rZW5zL3Nlc3Npb24tY29udGV4dC50b2tlbic7XG5pbXBvcnQgeyBSZXBvcnRBcGlFbmRwb2ludERlZmluaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvcmVwb3J0LWFwaS1lbmRwb2ludC5tb2RlbCc7XG5cbi8qKlxuICogUGFsZXR0ZSBjb21wb25lbnQgY2F0ZWdvcnkgbmFtZXMgdGhlIGRldmVsb3BlciBjYW4gdXNlXG4gKiB3aGVuIHJlc3RyaWN0aW5nIHRoZSBkZXNpZ25lciBjb21wb25lbnQgcGFsZXR0ZS5cbiAqXG4gKiBNYXBzIHRvIGludGVybmFsIHJlZ2lzdHJ5IGNhdGVnb3J5IElEczpcbiAqIC0gYGZvcm1JbnB1dHNgICAgIOKGkiBgaW5wdXRgXG4gKiAtIGBhY3Rpb25CdXR0b25zYCDihpIgYGFjdGlvbmBcbiAqIC0gYGRpc3BsYXlMYWJlbHNgIOKGkiBgZGlzcGxheWBcbiAqIC0gYGRhdGFMb29rdXBzYCAgIOKGkiBgZGF0YWBcbiAqIC0gYGxheW91dGAgICAgICAgIOKGkiBgbGF5b3V0YFxuICovXG5leHBvcnQgdHlwZSBQYWxldHRlQ2F0ZWdvcnkgPVxuICB8ICdmb3JtSW5wdXRzJ1xuICB8ICdhY3Rpb25CdXR0b25zJ1xuICB8ICdkaXNwbGF5TGFiZWxzJ1xuICB8ICdkYXRhTG9va3VwcydcbiAgfCAnbGF5b3V0JztcblxuLyoqXG4gKiBNYXBwaW5nIGZyb20gZnJpZW5kbHkgcGFsZXR0ZSBjYXRlZ29yeSBuYW1lcyB0byBpbnRlcm5hbCBjYXRlZ29yeSBJRHMuXG4gKi9cbmV4cG9ydCBjb25zdCBQQUxFVFRFX0NBVEVHT1JZX01BUDogUmVjb3JkPFBhbGV0dGVDYXRlZ29yeSwgc3RyaW5nPiA9IHtcbiAgZm9ybUlucHV0czogJ2lucHV0JyxcbiAgYWN0aW9uQnV0dG9uczogJ2FjdGlvbicsXG4gIGRpc3BsYXlMYWJlbHM6ICdkaXNwbGF5JyxcbiAgZGF0YUxvb2t1cHM6ICdkYXRhJyxcbiAgbGF5b3V0OiAnbGF5b3V0Jyxcbn07XG5cbi8qKlxuICogU2ltcGxpZmllZCwgZGV2ZWxvcGVyLWZhY2luZyBjb25maWd1cmF0aW9uIGZvciBid2F5cy1yZXBvcnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlcG9ydENvbmZpZzogQndheXNSZXBvcnRDb25maWcgPSB7XG4gKiAgIHNwRW5kcG9pbnQ6ICAgICAgJy9hcGkvcmVwb3J0aW5nL3Byb2NlZHVyZXMnLFxuICogICB0YWJsZXNFbmRwb2ludDogICcvYXBpL3JlcG9ydGluZy90YWJsZXMnLFxuICogICBleGVjdXRlRW5kcG9pbnQ6ICcvYXBpL3JlcG9ydGluZy9leGVjdXRlJyxcbiAqICAgcmVwb3J0c0VuZHBvaW50OiAnL2FwaS9yZXBvcnRpbmcvcmVwb3J0cycsXG4gKiAgIGNvbXBvbmVudHM6IFsnZm9ybUlucHV0cycsICdhY3Rpb25CdXR0b25zJywgJ2Rpc3BsYXlMYWJlbHMnXSxcbiAqICAgYXV0b1BhcmFtZXRlcjogdHJ1ZSxcbiAqICAgc2Vzc2lvbjogKCkgPT4gaW5qZWN0KEF1dGhTZXJ2aWNlKS5zZXNzaW9uKCksXG4gKiAgIHJvdXRlQmFzZTogJ3JlcG9ydHMnLFxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ3YXlzUmVwb3J0Q29uZmlnIHtcbiAgLy8g4pSA4pSA4pSAIEJhY2tlbmQgZW5kcG9pbnRzICh0aGUgM+KAkzQgZW5kcG9pbnQgY29udHJhY3QpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBHRVQgZW5kcG9pbnQgcmV0dXJuaW5nIHRoZSBsaXN0IG9mIHN0b3JlZCBwcm9jZWR1cmVzIHdpdGggdGhlaXIgcGFyYW1ldGVycy5cbiAgICogUmVzcG9uc2U6IGBbeyBuYW1lLCBzY2hlbWEsIHBhcmFtZXRlcnM6IFt7IG5hbWUsIHNxbFR5cGUsIHJlcXVpcmVkLCBkZWZhdWx0VmFsdWU/IH1dIH1dYFxuICAgKi9cbiAgc3BFbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogR0VUIGVuZHBvaW50IHJldHVybmluZyB0aGUgbGlzdCBvZiB0YWJsZXMvdmlld3Mgd2l0aCB0aGVpciBjb2x1bW5zLlxuICAgKiBSZXNwb25zZTogYFt7IG5hbWUsIHNjaGVtYSwgdHlwZTogJ3RhYmxlJ3wndmlldycsIGNvbHVtbnM6IFt7IG5hbWUsIHNxbFR5cGUgfV0gfV1gXG4gICAqL1xuICB0YWJsZXNFbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogUE9TVCBlbmRwb2ludCB0aGF0IHJ1bnMgYSBzdG9yZWQgcHJvY2VkdXJlIG9yIHRhYmxlIHF1ZXJ5IGFuZCByZXR1cm5zIHJvd3MuXG4gICAqIEJvZHk6IGB7IGtpbmQ6ICdwcm9jZWR1cmUnfCd0YWJsZScsIG5hbWUsIHNjaGVtYSwgcGFyYW1ldGVycywgY29sdW1ucz8sIHRvcD8gfWBcbiAgICogUmVzcG9uc2U6IGByb3dzW11gXG4gICAqL1xuICBleGVjdXRlRW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIFBPU1QgZW5kcG9pbnQgZm9yIGZldGNoaW5nIGRyb3Bkb3duIG1hc3RlciBkYXRhIGFuZCBsb29rdXAgb3B0aW9ucy5cbiAgICogRGVmYXVsdHMgdG8gcmVwbGFjaW5nIGAvZXhlY3V0ZWAgd2l0aCBgL2xvb2t1cGAgaWYgb21pdHRlZC5cbiAgICovXG4gIGxvb2t1cEVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBDUlVEIGVuZHBvaW50IGZvciBzYXZpbmcvbG9hZGluZyByZXBvcnQgcGFnZSBkZWZpbml0aW9ucy5cbiAgICogV2hlbiBvbWl0dGVkLCB1c2VzIHRoZSByZXBvcnRpbmcgc2VydmljZSBiYXNlIGluZmVycmVkIGZyb20gdGhlIGNvbmZpZ3VyZWQgZW5kcG9pbnRzLlxuICAgKiBEZWZhdWx0cyB0byAvYXBpL3JlcG9ydGluZy9yZXBvcnRzOyB0aGUgYmFja2VuZCBzdG9yZXMgZGVmaW5pdGlvbnMgaW4gZGJvLkNORlJFUE9SVERFRi5cbiAgICogLSBHRVQgICAg4oaSIGxpc3Qgc2F2ZWQgcmVwb3J0c1xuICAgKiAtIEdFVCAvOmlkIOKGkiBsb2FkIGEgc3BlY2lmaWMgcmVwb3J0XG4gICAqIC0gUE9TVCAgIOKGkiBzYXZlIGEgbmV3IG9yIHVwZGF0ZWQgcmVwb3J0XG4gICAqIC0gREVMRVRFIC86aWQg4oaSIGRlbGV0ZSBhIHJlcG9ydFxuICAgKi9cbiAgcmVwb3J0c0VuZHBvaW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBHRVQgZW5kcG9pbnQgcmV0dXJuaW5nIHRoZSBjYXRhbG9nIG9mIHJlZ2lzdGVyZWQgUkVTVCBBUElzLlxuICAgKiBSZXNwb25zZTogUmVwb3J0QXBpRW5kcG9pbnREZWZpbml0aW9uW11cbiAgICovXG4gIGFwaXNFbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgc3RhdGljL2luLW1lbW9yeSBBUEkgZW5kcG9pbnRzIHJlZ2lzdGVyZWQgZGlyZWN0bHkgaW4gdGhlIGhvc3QgYXBwbGljYXRpb24uXG4gICAqIE1lcmdlZCB3aXRoIGJhY2tlbmQtZGlzY292ZXJlZCBBUElzIGluIHRoZSBWaXN1YWwgRGVzaWduZXIuXG4gICAqL1xuICBhcGlFbmRwb2ludHM/OiBSZXBvcnRBcGlFbmRwb2ludERlZmluaXRpb25bXTtcblxuICAvLyDilIDilIDilIAgRGVzaWduZXIgb3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQ29tcG9uZW50IHBhbGV0dGUgZ3JvdXBzIHRvIHNob3cgaW4gdGhlIGRlc2lnbmVyLlxuICAgKiBEZWZhdWx0cyB0byBhbGwgZ3JvdXBzIHdoZW4gbm90IHNwZWNpZmllZC5cbiAgICpcbiAgICogQGV4YW1wbGUgWydmb3JtSW5wdXRzJywgJ2FjdGlvbkJ1dHRvbnMnLCAnZGlzcGxheUxhYmVscyddXG4gICAqL1xuICBjb21wb25lbnRzPzogUGFsZXR0ZUNhdGVnb3J5W107XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgc3RvcmVkIHByb2NlZHVyZSBwYXJhbWV0ZXJzIGxpa2UgYEBCcmFuY2hJZGAsIGBAQ29tcGFueUlkYFxuICAgKiBhcmUgYXV0b21hdGljYWxseSBib3VuZCBmcm9tIHRoZSBzZXNzaW9uIGNvbnRleHQuXG4gICAqIFJlcXVpcmVzIGBzZXNzaW9uYCB0byBiZSBwcm92aWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b1BhcmFtZXRlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlc3Npb24gY29udGV4dCBwcm92aWRlciBmb3IgYXV0by1wYXJhbWV0ZXIgYmluZGluZy5cbiAgICogQ2FuIGJlIGEgc2VydmljZSBjbGFzcyBpbXBsZW1lbnRpbmcgYFNlc3Npb25Db250ZXh0UHJvdmlkZXJgLFxuICAgKiBhIHBsYWluIG9iamVjdCwgYSBmYWN0b3J5IGZ1bmN0aW9uLCBhbiBPYnNlcnZhYmxlLCBvciBhIFNpZ25hbC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc2Vzc2lvbjogUGxheWdyb3VuZFNlc3Npb25TZXJ2aWNlXG4gICAqIHNlc3Npb246ICgpID0+IGluamVjdChBdXRoU2VydmljZSkuc2Vzc2lvbigpXG4gICAqIHNlc3Npb246IHsgYnJhbmNoSWQ6IDEsIGNvbXBhbnlJZDogMTAgfVxuICAgKi9cbiAgc2Vzc2lvbj86IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBTZXNzaW9uQ29udGV4dFNvdXJjZSB8ICgoKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHNlcnZpY2UgY2xhc3MgaW1wbGVtZW50aW5nIGBTZXNzaW9uQ29udGV4dFByb3ZpZGVyYC5cbiAgICogRXF1aXZhbGVudCB0byBgc2Vzc2lvbjogTXlTZXNzaW9uU2VydmljZWAuXG4gICAqL1xuICBzZXNzaW9uUHJvdmlkZXI/OiBUeXBlPFNlc3Npb25Db250ZXh0UHJvdmlkZXI+O1xuXG4gIC8vIOKUgOKUgOKUgCBMaXZlIHBhZ2Ugb3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQmFzZSBwYXRoIGZvciBsaXZlIHJlcG9ydCBwYWdlcy5cbiAgICogR2VuZXJhdGVkIHJlcG9ydCBwYWdlcyBvcGVuIGF0IGAvPHJvdXRlQmFzZT4vPHNsdWc+YC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ3JlcG9ydHMnXG4gICAqL1xuICByb3V0ZUJhc2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEFuZ3VsYXIgY29tcG9uZW50IGZvciByZW5kZXJpbmcgZGF0YSBncmlkcy5cbiAgICogUGFzcyB5b3VyIGdyaWQgY29tcG9uZW50IChCV2F5cy1ncmlkLCBBRyBHcmlkIHdyYXBwZXIsIGV0Yy4pLlxuICAgKi9cbiAgZ3JpZD86IFR5cGU8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEFuZ3VsYXIgY29tcG9uZW50IGZvciByZW5kZXJpbmcgY2hhcnRzLlxuICAgKi9cbiAgY2hhcnQ/OiBUeXBlPHVua25vd24+O1xuXG4gIC8vIOKUgOKUgOKUgCBHZW5lcmFsIG9wdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIERlZmF1bHQgcGFnZSBzaXplIGZvciBncmlkIHJlc3VsdHMuIEBkZWZhdWx0IDI1ICovXG4gIGRlZmF1bHRQYWdlU2l6ZT86IG51bWJlcjtcblxuICAvKiogRGF0ZSBmb3JtYXQgc3RyaW5nIHVzZWQgYWNyb3NzIHRoZSBsaWJyYXJ5LiBAZGVmYXVsdCAnZGQvTU0veXl5eScgKi9cbiAgZGF0ZUZvcm1hdD86IHN0cmluZztcblxuICAvKiogVGltZW91dCBpbiBtcyBmb3IgbG9va3VwL2V4ZWN1dGUgcXVlcmllcy4gQGRlZmF1bHQgMzAwMDAwICovXG4gIGxvb2t1cFRpbWVvdXRNcz86IG51bWJlcjtcblxuICAvKiogTWF4aW11bSBkdXJhdGlvbiBvZiBhbiBleGVjdXRpb24gcmVxdWVzdCAoZGVmYXVsdHMgdG8gbG9va3VwVGltZW91dE1zKS4gKi9cbiAgZXhlY3V0aW9uVGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogRXhhY3QgSFRUUChTKSBvcmlnaW5zIHBlcm1pdHRlZCB0byByZWNlaXZlIEFQSSBjcmVkZW50aWFscyBhbmQgY3VzdG9tIGhlYWRlcnMuIFNhbWUtb3JpZ2luIGlzIHRydXN0ZWQgYnkgZGVmYXVsdC4gKi9cbiAgdHJ1c3RlZEFwaU9yaWdpbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Ygbm9ybWFsaXppbmcgYSBgQndheXNSZXBvcnRDb25maWdgIGZvciBpbnRlcm5hbCB1c2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9ybWFsaXplZEJ3YXlzQ29uZmlnIHtcbiAgLyoqIEVuZHBvaW50IFVSTHMgKi9cbiAgc3BFbmRwb2ludDogc3RyaW5nO1xuICB0YWJsZXNFbmRwb2ludDogc3RyaW5nO1xuICBleGVjdXRlRW5kcG9pbnQ6IHN0cmluZztcbiAgbG9va3VwRW5kcG9pbnQ6IHN0cmluZyB8IG51bGw7XG4gIHJlcG9ydHNFbmRwb2ludDogc3RyaW5nIHwgbnVsbDtcbiAgYXBpc0VuZHBvaW50OiBzdHJpbmcgfCBudWxsO1xuICBhcGlFbmRwb2ludHM6IFJlcG9ydEFwaUVuZHBvaW50RGVmaW5pdGlvbltdO1xuXG4gIC8qKiBSZXNvbHZlZCBpbnRlcm5hbCBjYXRlZ29yeSBJRHMgKGUuZy4gWydpbnB1dCcsICdhY3Rpb24nLCAnZGlzcGxheSddKSAqL1xuICBhbGxvd2VkQ2F0ZWdvcmllczogc3RyaW5nW10gfCBudWxsO1xuXG4gIC8qKiBXaGV0aGVyIGF1dG8tcGFyYW1ldGVyIGJpbmRpbmcgaXMgZW5hYmxlZCAqL1xuICBhdXRvUGFyYW1ldGVyOiBib29sZWFuO1xuXG4gIC8qKiBSb3V0ZSBiYXNlIHBhdGggKi9cbiAgcm91dGVCYXNlOiBzdHJpbmc7XG5cbiAgLyoqIFNlc3Npb24gc291cmNlICovXG4gIHNlc3Npb246IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBTZXNzaW9uQ29udGV4dFNvdXJjZSB8ICgoKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfCBudWxsO1xuICBzZXNzaW9uUHJvdmlkZXI6IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBudWxsO1xuXG4gIC8qKiBHcmlkIGNvbXBvbmVudCAqL1xuICBncmlkQ29tcG9uZW50OiBUeXBlPHVua25vd24+IHwgbnVsbDtcblxuICAvKiogQ2hhcnQgY29tcG9uZW50ICovXG4gIGNoYXJ0Q29tcG9uZW50OiBUeXBlPHVua25vd24+IHwgbnVsbDtcblxuICAvKiogR2VuZXJhbCBjb25maWcgdmFsdWVzICovXG4gIGRlZmF1bHRQYWdlU2l6ZTogbnVtYmVyO1xuICBkYXRlRm9ybWF0OiBzdHJpbmc7XG4gIGxvb2t1cFRpbWVvdXRNczogbnVtYmVyO1xuXG4gIC8qKiBNYXhpbXVtIGR1cmF0aW9uIG9mIGFuIGV4ZWN1dGlvbiByZXF1ZXN0IChkZWZhdWx0cyB0byBsb29rdXBUaW1lb3V0TXMpLiAqL1xuICBleGVjdXRpb25UaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBFeGFjdCBIVFRQKFMpIG9yaWdpbnMgcGVybWl0dGVkIHRvIHJlY2VpdmUgQVBJIGNyZWRlbnRpYWxzIGFuZCBjdXN0b20gaGVhZGVycy4gU2FtZS1vcmlnaW4gaXMgdHJ1c3RlZCBieSBkZWZhdWx0LiAqL1xuICB0cnVzdGVkQXBpT3JpZ2lucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBgQndheXNSZXBvcnRDb25maWdgIGludG8gdGhlIGludGVybmFsIGZvcm1hdC5cbiAqIFZhbGlkYXRlcyBzdXBwbGllZCBlbmRwb2ludHMgYW5kIG1hcHMgZnJpZW5kbHkgbmFtZXMgdG8gaW50ZXJuYWwgSURzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQndheXNDb25maWcoY29uZmlnOiBCd2F5c1JlcG9ydENvbmZpZyk6IE5vcm1hbGl6ZWRCd2F5c0NvbmZpZyB7XG4gIC8vIENhcGFiaWxpdGllcyBhcmUgb3B0aW9uYWw7IHZhbGlkYXRlIG9ubHkgVVJMcyB0aGUgaG9zdCBzdXBwbGllcy5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydzcEVuZHBvaW50JywgJ3RhYmxlc0VuZHBvaW50JywgJ2V4ZWN1dGVFbmRwb2ludCcsICdsb29rdXBFbmRwb2ludCcsICdyZXBvcnRzRW5kcG9pbnQnLCAnYXBpc0VuZHBvaW50J10gYXMgY29uc3QpIHtcbiAgICBpZiAoY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGNvbmZpZ1trZXldICE9PSAnc3RyaW5nJyB8fCAhY29uZmlnW2tleV0/LnRyaW0oKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW2J3YXlzLXJlcG9ydF0gXCInICsga2V5ICsgJ1wiIG11c3QgYmUgYSBub24tZW1wdHkgVVJMIHdoZW4gc3VwcGxpZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydsb29rdXBUaW1lb3V0TXMnLCAnZXhlY3V0aW9uVGltZW91dE1zJ10gYXMgY29uc3QpIHtcbiAgICBpZiAoY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25maWdba2V5XSkgfHwgY29uZmlnW2tleV0hIDw9IDApKSB0aHJvdyBuZXcgRXJyb3Ioa2V5ICsgJyBtdXN0IGJlIGEgcG9zaXRpdmUgdGltZW91dC4nKTtcbiAgfVxuICBpZiAoY29uZmlnLnRydXN0ZWRBcGlPcmlnaW5zICE9PSB1bmRlZmluZWQgJiYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy50cnVzdGVkQXBpT3JpZ2lucykgfHwgY29uZmlnLnRydXN0ZWRBcGlPcmlnaW5zLnNvbWUob3JpZ2luID0+IHtcbiAgICB0cnkgeyBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKG9yaWdpbik7IHJldHVybiAhL15odHRwcz86JC8udGVzdChwYXJzZWQucHJvdG9jb2wpIHx8IHBhcnNlZC5vcmlnaW4gIT09IG9yaWdpbiB8fCAhIXBhcnNlZC51c2VybmFtZSB8fCAhIXBhcnNlZC5wYXNzd29yZDsgfVxuICAgIGNhdGNoIHsgcmV0dXJuIHRydWU7IH1cbiAgfSkpKSB0aHJvdyBuZXcgRXJyb3IoJ3RydXN0ZWRBcGlPcmlnaW5zIG11c3QgY29udGFpbiBleGFjdCBIVFRQKFMpIG9yaWdpbnMsIHdpdGhvdXQgcGF0aHMgb3IgY3JlZGVudGlhbHMuJyk7XG5cbiAgLy8gTWFwIGNvbXBvbmVudCBwYWxldHRlIGNhdGVnb3JpZXNcbiAgbGV0IGFsbG93ZWRDYXRlZ29yaWVzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuICBpZiAoY29uZmlnLmNvbXBvbmVudHMgJiYgY29uZmlnLmNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xuICAgIGFsbG93ZWRDYXRlZ29yaWVzID0gY29uZmlnLmNvbXBvbmVudHMubWFwKChmcmllbmRseSkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJuYWwgPSBQQUxFVFRFX0NBVEVHT1JZX01BUFtmcmllbmRseV07XG4gICAgICBpZiAoIWludGVybmFsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2J3YXlzLXJlcG9ydF0gVW5rbm93biBjb21wb25lbnQgY2F0ZWdvcnkgXCIke2ZyaWVuZGx5fVwiLiBgICtcbiAgICAgICAgICBgVmFsaWQgb3B0aW9uczogJHtPYmplY3Qua2V5cyhQQUxFVFRFX0NBVEVHT1JZX01BUCkuam9pbignLCAnKX0uYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZnJpZW5kbHk7IC8vIFBhc3MgdGhyb3VnaCB1bmtub3duIGNhdGVnb3JpZXMgYXMtaXNcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnRlcm5hbDtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlcG9ydHNFbmRwb2ludCA9IHJlc29sdmVSZXBvcnRzRW5kcG9pbnQoY29uZmlnKTtcblxuICBjb25zdCBsb29rdXBFbmRwb2ludCA9IGNvbmZpZy5sb29rdXBFbmRwb2ludD8udHJpbSgpXG4gICAgPyBjbGVhblVybChjb25maWcubG9va3VwRW5kcG9pbnQpXG4gICAgOiBjb25maWcuZXhlY3V0ZUVuZHBvaW50Py5pbmNsdWRlcygnL2V4ZWN1dGUnKVxuICAgID8gY2xlYW5VcmwoY29uZmlnLmV4ZWN1dGVFbmRwb2ludC5yZXBsYWNlKC9cXC9leGVjdXRlXFwvPyQvLCAnL2xvb2t1cCcpKVxuICAgIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIHNwRW5kcG9pbnQ6IGNvbmZpZy5zcEVuZHBvaW50ID8gY2xlYW5VcmwoY29uZmlnLnNwRW5kcG9pbnQpIDogJycsXG4gICAgdGFibGVzRW5kcG9pbnQ6IGNvbmZpZy50YWJsZXNFbmRwb2ludCA/IGNsZWFuVXJsKGNvbmZpZy50YWJsZXNFbmRwb2ludCkgOiAnJyxcbiAgICBleGVjdXRlRW5kcG9pbnQ6IGNvbmZpZy5leGVjdXRlRW5kcG9pbnQgPyBjbGVhblVybChjb25maWcuZXhlY3V0ZUVuZHBvaW50KSA6ICcnLFxuICAgIGxvb2t1cEVuZHBvaW50LFxuICAgIHJlcG9ydHNFbmRwb2ludCxcbiAgICBhcGlzRW5kcG9pbnQ6IGNvbmZpZy5hcGlzRW5kcG9pbnQ/LnRyaW0oKSA/IGNsZWFuVXJsKGNvbmZpZy5hcGlzRW5kcG9pbnQpIDogbnVsbCxcbiAgICBhcGlFbmRwb2ludHM6IEFycmF5LmlzQXJyYXkoY29uZmlnLmFwaUVuZHBvaW50cykgPyBjb25maWcuYXBpRW5kcG9pbnRzIDogW10sXG5cbiAgICBhbGxvd2VkQ2F0ZWdvcmllcyxcbiAgICBhdXRvUGFyYW1ldGVyOiBjb25maWcuYXV0b1BhcmFtZXRlciAhPT0gZmFsc2UsIC8vIGRlZmF1bHQgdHJ1ZVxuICAgIHJvdXRlQmFzZTogY29uZmlnLnJvdXRlQmFzZT8udHJpbSgpIHx8ICdyZXBvcnRzJyxcbiAgICBzZXNzaW9uOiBjb25maWcuc2Vzc2lvbiA/PyBudWxsLFxuICAgIHNlc3Npb25Qcm92aWRlcjogY29uZmlnLnNlc3Npb25Qcm92aWRlciA/PyBudWxsLFxuXG4gICAgZ3JpZENvbXBvbmVudDogY29uZmlnLmdyaWQgPz8gbnVsbCxcbiAgICBjaGFydENvbXBvbmVudDogY29uZmlnLmNoYXJ0ID8/IG51bGwsXG5cbiAgICBkZWZhdWx0UGFnZVNpemU6IGNvbmZpZy5kZWZhdWx0UGFnZVNpemUgPz8gMjUsXG4gICAgZGF0ZUZvcm1hdDogY29uZmlnLmRhdGVGb3JtYXQgPz8gJ2RkL01NL3l5eXknLFxuICAgIGxvb2t1cFRpbWVvdXRNczogY29uZmlnLmxvb2t1cFRpbWVvdXRNcyA/PyAzMDAwMDAsXG4gICAgZXhlY3V0aW9uVGltZW91dE1zOiBjb25maWcuZXhlY3V0aW9uVGltZW91dE1zLFxuICAgIHRydXN0ZWRBcGlPcmlnaW5zOiBjb25maWcudHJ1c3RlZEFwaU9yaWdpbnMgPz8gW10sXG4gIH07XG59XG5cbi8qKiBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIGEgVVJMICovXG5mdW5jdGlvbiBjbGVhblVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB1cmwudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgJycpO1xufVxuIl19
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
* Barrel export for all core domain models.
|
|
3
3
|
*/
|
|
4
4
|
export {};
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQmFycmVsIGV4cG9ydCBmb3IgYWxsIGNvcmUgZG9tYWluIG1vZGVscy5cbiAqL1xuXG5leHBvcnQgdHlwZSB7XG4gIFJlcG9ydERlZmluaXRpb24sXG4gIFJlcG9ydFN1bW1hcnksXG4gIFJlcG9ydFBlcm1pc3Npb25EZWZpbml0aW9uLFxufSBmcm9tICcuL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcblxuZXhwb3J0IHR5cGUge1xuICBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uLFxuICBDb21wb25lbnRCaW5kaW5nRGVmaW5pdGlvbixcbiAgQ29tcG9uZW50RGF0YVNvdXJjZURlZmluaXRpb24sXG4gIERyb3Bkb3duU291cmNlVHlwZSxcbiAgVmlzaWJpbGl0eURlZmluaXRpb24sXG59IGZyb20gJy4vcmVwb3J0LWNvbXBvbmVudC5tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIHtcbiAgUmVwb3J0QXBpRW5kcG9pbnREZWZpbml0aW9uLFxuICBSZXBvcnRBcGlQYXJhbWV0ZXJEZWZpbml0aW9uLFxufSBmcm9tICcuL3JlcG9ydC1hcGktZW5kcG9pbnQubW9kZWwnO1xuXG5leHBvcnQgdHlwZSB7XG4gIFJlcG9ydFBhcmFtZXRlckRlZmluaXRpb24sXG59IGZyb20gJy4vcmVwb3J0LXBhcmFtZXRlci5tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIHtcbiAgUmVwb3J0RGF0YVNvdXJjZURlZmluaXRpb24sXG4gIERhdGFTb3VyY2VDYWNoZURlZmluaXRpb24sXG59IGZyb20gJy4vcmVwb3J0LWRhdGFzb3VyY2UubW9kZWwnO1xuXG5leHBvcnQgdHlwZSB7XG4gIFJlcG9ydEdyaWREZWZpbml0aW9uLFxuICBHcmlkQ29sdW1uRGVmaW5pdGlvbixcbiAgR3JpZE9wdGlvbnNEZWZpbml0aW9uLFxufSBmcm9tICcuL3JlcG9ydC1ncmlkLm1vZGVsJztcblxuZXhwb3J0IHR5cGUge1xuICBSZXBvcnRMYXlvdXREZWZpbml0aW9uLFxuICBDb21wb25lbnRMYXlvdXREZWZpbml0aW9uLFxufSBmcm9tICcuL3JlcG9ydC1sYXlvdXQubW9kZWwnO1xuXG5leHBvcnQgdHlwZSB7XG4gIFZhbGlkYXRpb25EZWZpbml0aW9uLFxufSBmcm9tICcuL3ZhbGlkYXRpb24ubW9kZWwnO1xuXG5leHBvcnQgdHlwZSB7XG4gIENvbXBvbmVudEV2ZW50RGVmaW5pdGlvbixcbiAgQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbixcbn0gZnJvbSAnLi9jb21wb25lbnQtZXZlbnQubW9kZWwnO1xuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Definitions for API-based data retrieval endpoints.
|
|
3
|
+
*
|
|
4
|
+
* Enables reports and form components to consume REST / HTTP APIs
|
|
5
|
+
* with parameter interpolation, custom headers, and data path resolution.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWFwaS1lbmRwb2ludC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvbW9kZWxzL3JlcG9ydC1hcGktZW5kcG9pbnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlZmluaXRpb25zIGZvciBBUEktYmFzZWQgZGF0YSByZXRyaWV2YWwgZW5kcG9pbnRzLlxuICpcbiAqIEVuYWJsZXMgcmVwb3J0cyBhbmQgZm9ybSBjb21wb25lbnRzIHRvIGNvbnN1bWUgUkVTVCAvIEhUVFAgQVBJc1xuICogd2l0aCBwYXJhbWV0ZXIgaW50ZXJwb2xhdGlvbiwgY3VzdG9tIGhlYWRlcnMsIGFuZCBkYXRhIHBhdGggcmVzb2x1dGlvbi5cbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEFwaVBhcmFtZXRlckRlZmluaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2RhdGUnIHwgJ2FycmF5JztcbiAgaW46ICdxdWVyeScgfCAncGF0aCcgfCAnYm9keScgfCAnaGVhZGVyJztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRBcGlFbmRwb2ludERlZmluaXRpb24ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIG1ldGhvZD86ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjYXRlZ29yeT86IHN0cmluZztcbiAgZGF0YVBhdGg/OiBzdHJpbmc7XG4gIHRvdGFsUGF0aD86IHN0cmluZztcbiAgcGFyYW1ldGVycz86IFJlcG9ydEFwaVBhcmFtZXRlckRlZmluaXRpb25bXTtcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlc3BvbnNlU2FtcGxlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbiAgdXNlUHJveHk/OiBib29sZWFuO1xufVxuIl19
|
|
@@ -7,4 +7,4 @@
|
|
|
7
7
|
* in the renderer.
|
|
8
8
|
*/
|
|
9
9
|
export {};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWNvbXBvbmVudC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVwb3J0IGNvbXBvbmVudCBkZWZpbml0aW9uIOKAlCB0aGUgbWV0YWRhdGEgZm9yIGEgc2luZ2xlIFVJIGVsZW1lbnRcbiAqIHRoYXQgYXBwZWFycyBvbiBhIHJlcG9ydCBwYWdlLlxuICpcbiAqIFRoZSBgdHlwZWAgZmllbGQgaXMgdGhlIHJlZ2lzdHJ5IGtleSB1c2VkIHRvIHJlc29sdmUgdGhlIEFuZ3VsYXIgY29tcG9uZW50XG4gKiBhdCBydW50aW1lIHZpYSBgQ29tcG9uZW50UmVnaXN0cnlgLiBUaGlzIGF2b2lkcyBoYXJkLWNvZGluZyBjb21wb25lbnQgdHlwZXNcbiAqIGluIHRoZSByZW5kZXJlci5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnRMYXlvdXREZWZpbml0aW9uIH0gZnJvbSAnLi9yZXBvcnQtbGF5b3V0Lm1vZGVsJztcbmltcG9ydCB7IFZhbGlkYXRpb25EZWZpbml0aW9uIH0gZnJvbSAnLi92YWxpZGF0aW9uLm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudEV2ZW50RGVmaW5pdGlvbiB9IGZyb20gJy4vY29tcG9uZW50LWV2ZW50Lm1vZGVsJztcblxuLyoqXG4gKiBCaW5kaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gYSBkYXRhIHNvdXJjZSBvciBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50QmluZGluZ0RlZmluaXRpb24ge1xuICAvKiogVGhlIGRhdGEgc291cmNlIElEIHRoaXMgY29tcG9uZW50IHJlYWRzIGZyb20uICovXG4gIGRhdGFTb3VyY2VJZD86IHN0cmluZztcblxuICAvKiogVGhlIGZpZWxkIHdpdGhpbiB0aGUgZGF0YSBzb3VyY2UgdG8gYmluZCB0byAoZm9yIGRpc3BsYXkgY29tcG9uZW50cykuICovXG4gIGZpZWxkPzogc3RyaW5nO1xuXG4gIC8qKiBUaGUgcGFyYW1ldGVyIGtleSB0aGlzIGNvbXBvbmVudCB3cml0ZXMgdG8gKGZvciBpbnB1dCBjb21wb25lbnRzKS4gKi9cbiAgcGFyYW1ldGVyS2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBEcm9wZG93blNvdXJjZVR5cGUgPSAnc3RhdGljJyB8ICd0YWJsZScgfCAncHJvY2VkdXJlJyB8ICdtYXN0ZXInIHwgJ2FwaSc7XG5cbi8qKlxuICogRGF0YSBzb3VyY2UgY29uZmlndXJhdGlvbiBmb3IgY29tcG9uZW50cyB0aGF0IGxvYWQgdGhlaXIgb3duIGRhdGFcbiAqIChlLmcuLCBkcm9wZG93bnMgbG9hZGluZyBvcHRpb25zIGZyb20gZGF0YWJhc2UgdGFibGVzLCBzdG9yZWQgcHJvY2VkdXJlcywgbWFzdGVyIGRhdGEsIG9yIFJFU1QgQVBJcykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGF0YVNvdXJjZURlZmluaXRpb24ge1xuICAvKiogU291cmNlIHR5cGU6ICdzdGF0aWMnIHwgJ3RhYmxlJyB8ICdwcm9jZWR1cmUnIHwgJ21hc3RlcicgfCAnYXBpJyAqL1xuICBzb3VyY2VUeXBlPzogRHJvcGRvd25Tb3VyY2VUeXBlO1xuXG4gIC8qKiBEYXRhYmFzZSBzY2hlbWEsIGUuZy4gJ2RibycgKGRlZmF1bHRzIHRvICdkYm8nKS4gKi9cbiAgc2NoZW1hPzogc3RyaW5nO1xuXG4gIC8qKiBEYXRhYmFzZSB0YWJsZSwgdmlldywgb3Igc3RvcmVkIHByb2NlZHVyZSBuYW1lIChlLmcuICdDdXN0b21lcnMnIG9yICd1c3BfR2V0QnJhbmNoZXMnKS4gKi9cbiAgZW50aXR5TmFtZT86IHN0cmluZztcblxuICAvKiogTWFzdGVyIGRhdGEgbmFtZSBmb3IgbGVnYWN5IG1hc3RlciBkYXRhIHByb3ZpZGVyIHJlc29sdXRpb24uICovXG4gIG1hc3Rlck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIERpc3BsYXkgZmllbGQgbmFtZSBpbiB0aGUgcmV0dXJuZWQgZGF0YSBpdGVtcyAoZS5nLiAnQ3VzdG9tZXJOYW1lJykuICovXG4gIGRpc3BsYXlGaWVsZD86IHN0cmluZztcblxuICAvKiogVmFsdWUgZmllbGQgbmFtZSBpbiB0aGUgcmV0dXJuZWQgZGF0YSBpdGVtcyAoZS5nLiAnQ3VzdG9tZXJJRCcpLiAqL1xuICB2YWx1ZUZpZWxkPzogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBzdGF0aWMgZmlsdGVyIHBhcmFtZXRlcnMgKGUuZy4geyBpc0FjdGl2ZTogMSB9KS4gKi9cbiAgZmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIFBhcmFtZXRlciBtYXBwaW5ncyAoZS5nLiB7ICdAQnJhbmNoSWQnOiAne3ticmFuY2hTZWxlY3R9fScsICdAQWN0aXZlT25seSc6IHRydWUgfSkuICovXG4gIHBhcmFtZXRlck1hcHBpbmdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG5cbiAgLyoqIEtleXMgb2Ygb3RoZXIgZm9ybSBjb21wb25lbnRzIHdob3NlIHZhbHVlcyB0aGlzIGRhdGEgc291cmNlIGRlcGVuZHMgb24gKGZvciBDYXNjYWRpbmcgRHJvcGRvd25zKS4gKi9cbiAgZGVwZW5kc09uPzogc3RyaW5nW107XG5cbiAgLyoqIENhY2hlIHRpbWUtdG8tbGl2ZSBpbiBzZWNvbmRzIChkZWZhdWx0IDMwMHMpLiAqL1xuICBjYWNoZVR0bD86IG51bWJlcjtcblxuICAvLyDilIDilIDilIAgQVBJIERhdGEgU291cmNlIFByb3BlcnRpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8qKiBSZWdpc3RlcmVkIEFQSSBlbmRwb2ludCBJRCBvciByYXcgVVJMIHBhdGggKGUuZy4gJ2FwaS1jdXN0b21lcnMnIG9yICcvYXBpL3YxL2N1c3RvbWVycycpICovXG4gIGFwaUVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIC8qKiBIVFRQIG1ldGhvZCB0byB1c2UgKGRlZmF1bHRzIHRvICdHRVQnKSAqL1xuICBhcGlNZXRob2Q/OiAnR0VUJyB8ICdQT1NUJztcblxuICAvKiogRG90LW5vdGF0aW9uIHBhdGggdG8gdGhlIGFycmF5IG9mIGl0ZW1zIGluIHRoZSByZXNwb25zZSBKU09OIChlLmcuICdkYXRhLml0ZW1zJyBvciAncm93cycpICovXG4gIGRhdGFQYXRoPzogc3RyaW5nO1xuXG4gIC8qKiBDdXN0b20gcXVlcnkgcGFyYW1ldGVycyBvciBwYXlsb2FkIG1hcHBpbmdzIGZvciB0aGUgQVBJIHJlcXVlc3QgKi9cbiAgYXBpUGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXJzIChlLmcuIHsgJ1gtQ3VzdG9tLVRlbmFudCc6ICd7e3Nlc3Npb24udGVuYW50SWR9fScgfSkgKi9cbiAgYXBpSGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqIFdoZXRoZXIgcmVxdWVzdCBzaG91bGQgYmUgcHJveGllZCB2aWEgYmFja2VuZCByZXBvcnRpbmcgZ2F0ZXdheSAqL1xuICB1c2VQcm94eT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udHJvbHMgd2hlbiBhIGNvbXBvbmVudCBpcyB2aXNpYmxlIGJhc2VkIG9uIG90aGVyIGNvbXBvbmVudCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlzaWJpbGl0eURlZmluaXRpb24ge1xuICAvKiogVGhlIGNvbXBvbmVudCBrZXkgd2hvc2UgdmFsdWUgZGV0ZXJtaW5lcyB2aXNpYmlsaXR5LiAqL1xuICBkZXBlbmRzT246IHN0cmluZztcblxuICAvKiogVGhlIG9wZXJhdG9yIGZvciB0aGUgY29uZGl0aW9uLiAqL1xuICBvcGVyYXRvcjogJ2VxdWFscycgfCAnbm90RXF1YWxzJyB8ICdjb250YWlucycgfCAnZ3JlYXRlclRoYW4nIHwgJ2xlc3NUaGFuJyB8ICdpc05vdEVtcHR5JyB8ICdpc0VtcHR5JztcblxuICAvKiogVGhlIHZhbHVlIHRvIGNvbXBhcmUgYWdhaW5zdC4gKi9cbiAgdmFsdWU/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIEZ1bGwgbWV0YWRhdGEgZGVmaW5pdGlvbiBmb3IgYSBzaW5nbGUgY29tcG9uZW50IG9uIGEgcmVwb3J0IHBhZ2UuXG4gKlxuICogVGhpcyBpcyB0aGUgY29yZSBidWlsZGluZyBibG9jayBvZiBhIGBSZXBvcnREZWZpbml0aW9uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIHtcbiAgLyoqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGNvbXBvbmVudCBpbnN0YW5jZS4gKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKiogUmVnaXN0cnkga2V5IOKAlCBtYXBzIHRvIGFuIEFuZ3VsYXIgY29tcG9uZW50IHZpYSBgQ29tcG9uZW50UmVnaXN0cnlgLiAqL1xuICB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqIEZvcm0gY29udHJvbCBrZXkgLyBwYXJhbWV0ZXIgYmluZGluZyBuYW1lLiAqL1xuICBrZXk/OiBzdHJpbmc7XG5cbiAgLyoqIERpc3BsYXkgbGFiZWwgKG9yIHRyYW5zbGF0aW9uIGtleSkuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKiBSZW5kZXIgb3JkZXIgKGxvd2VyID0gZmlyc3QpLiAqL1xuICBvcmRlcj86IG51bWJlcjtcblxuICAvKiogUG9zaXRpb24gd2l0aGluIHRoZSByZXBvcnQgbGF5b3V0IGdyaWQuICovXG4gIGxheW91dD86IENvbXBvbmVudExheW91dERlZmluaXRpb247XG5cbiAgLyoqIENvbXBvbmVudC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIChlLmcuLCBwbGFjZWhvbGRlciwgZm9ybWF0LCBvcHRpb25zKS4gKi9cbiAgcHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBEYXRhIGJpbmRpbmcgY29uZmlndXJhdGlvbi4gKi9cbiAgYmluZGluZz86IENvbXBvbmVudEJpbmRpbmdEZWZpbml0aW9uO1xuXG4gIC8qKiBWYWxpZGF0aW9uIHJ1bGVzLiAqL1xuICB2YWxpZGF0aW9uPzogVmFsaWRhdGlvbkRlZmluaXRpb247XG5cbiAgLyoqIERhdGEgc291cmNlIGZvciB0aGlzIGNvbXBvbmVudCdzIG9wdGlvbnMvZGF0YS4gKi9cbiAgZGF0YVNvdXJjZT86IENvbXBvbmVudERhdGFTb3VyY2VEZWZpbml0aW9uO1xuXG4gIC8qKiBFdmVudCDihpIgYWN0aW9uIGJpbmRpbmdzLiAqL1xuICBldmVudHM/OiBDb21wb25lbnRFdmVudERlZmluaXRpb25bXTtcblxuICAvKiogQ29uZGl0aW9uYWwgdmlzaWJpbGl0eSBydWxlcy4gKi9cbiAgdmlzaWJpbGl0eT86IFZpc2liaWxpdHlEZWZpbml0aW9uO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgY29tcG9uZW50IGlzIGVuYWJsZWQuIERlZmF1bHRzIHRvIGB0cnVlYC4gKi9cbiAgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqIENTUyBjbGFzcyBuYW1lcyB0byBhZGQgdG8gdGhlIGNvbXBvbmVudCB3cmFwcGVyLiAqL1xuICBjc3NDbGFzcz86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
* `ReportDataSourceAdapter` contract.
|
|
7
7
|
*/
|
|
8
8
|
export {};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRhdGFzb3VyY2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZGF0YXNvdXJjZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcG9ydCBkYXRhIHNvdXJjZSBkZWZpbml0aW9ucy5cbiAqXG4gKiBBIGRhdGEgc291cmNlIGRlc2NyaWJlcyBob3cgdG8gZmV0Y2ggZGF0YSBmb3IgdGhlIHJlcG9ydCdzIHJlc3VsdCBncmlkLlxuICogVGhlIGFjdHVhbCBmZXRjaGluZyBpcyBkb25lIGJ5IHRoZSBob3N0IGFwcGxpY2F0aW9uIHRocm91Z2ggdGhlXG4gKiBgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXJgIGNvbnRyYWN0LlxuICovXG5cbi8qKlxuICogRGVmaW5lcyBhIHNpbmdsZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHJlcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBkYXRhIHNvdXJjZS4gKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKiogSHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIGRhdGEgc291cmNlLiAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIEVuZHBvaW50IGlkZW50aWZpZXIsIHN0b3JlZCBwcm9jZWR1cmUgbmFtZSwgb3IgcXVlcnkgcmVmZXJlbmNlLiAqL1xuICBlbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKiBIVFRQIG1ldGhvZCBvciBleGVjdXRpb24gbWV0aG9kIGhpbnQuICovXG4gIG1ldGhvZD86ICdHRVQnIHwgJ1BPU1QnIHwgJ1NUT1JFRF9QUk9DRURVUkUnIHwgJ0NVU1RPTSc7XG5cbiAgLyoqIERhdGFiYXNlIHNjaGVtYSAoZGVmYXVsdHMgdG8gJ2RibycpLiAqL1xuICBzY2hlbWE/
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRhdGFzb3VyY2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZGF0YXNvdXJjZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcG9ydCBkYXRhIHNvdXJjZSBkZWZpbml0aW9ucy5cbiAqXG4gKiBBIGRhdGEgc291cmNlIGRlc2NyaWJlcyBob3cgdG8gZmV0Y2ggZGF0YSBmb3IgdGhlIHJlcG9ydCdzIHJlc3VsdCBncmlkLlxuICogVGhlIGFjdHVhbCBmZXRjaGluZyBpcyBkb25lIGJ5IHRoZSBob3N0IGFwcGxpY2F0aW9uIHRocm91Z2ggdGhlXG4gKiBgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXJgIGNvbnRyYWN0LlxuICovXG5cbi8qKlxuICogRGVmaW5lcyBhIHNpbmdsZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHJlcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBkYXRhIHNvdXJjZS4gKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKiogSHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIGRhdGEgc291cmNlLiAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIEVuZHBvaW50IGlkZW50aWZpZXIsIHN0b3JlZCBwcm9jZWR1cmUgbmFtZSwgb3IgcXVlcnkgcmVmZXJlbmNlLiAqL1xuICBlbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKiBIVFRQIG1ldGhvZCBvciBleGVjdXRpb24gbWV0aG9kIGhpbnQuICovXG4gIG1ldGhvZD86ICdHRVQnIHwgJ1BPU1QnIHwgJ1NUT1JFRF9QUk9DRURVUkUnIHwgJ0NVU1RPTSc7XG5cbiAgLyoqIERhdGFiYXNlIHNjaGVtYSAoZGVmYXVsdHMgdG8gJ2RibycpLiAqL1xuICBzY2hlbWE/OiBzdHJpbmc7XG5cbiAgLyoqIE9wdGlvbmFsIHRhYmxlL3ZpZXcgY29sdW1uIHByb2plY3Rpb24gYW5kIG1heGltdW0gcmVzdWx0IHJvd3MuICovXG4gIGNvbHVtbnM/OiBzdHJpbmdbXTtcbiAgdG9wPzogbnVtYmVyO1xuICAvKiogRXhwbGljaXQgdGFibGUgZXF1YWxpdHkgZmlsdGVycy4gVmFsdWVzIGNhbiByZWZlcmVuY2UgZm9ybS9zZXNzaW9uIHRva2Vucy4gKi9cbiAgZmlsdGVyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj47XG5cbiAgLyoqIEJhY2tlbmQgZXhlY3V0aW9uIHR5cGUuICovXG4gIHR5cGU/OiAnc3RvcmVkX3Byb2NlZHVyZScgfCAndGFibGUnIHwgJ3ZpZXcnIHwgJ3NxbCcgfCAnYXBpJyB8IHN0cmluZztcblxuICAvKipcbiAgICogUGFyYW1ldGVyIG1hcHBpbmdzLiBWYWx1ZXMgbWF5IGJlIGZpeGVkLCBvciB0b2tlbnM6XG4gICAqIGB7e3Nlc3Npb24uYnJhbmNoSWR9fWAsIGB7e2NvbnRleHQudG9kYXl9fWAsIGB7e2ZpZWxkS2V5fX1gIChjYW52YXMgZmllbGQpLlxuICAgKi9cbiAgcGFyYW1ldGVyTWFwcGluZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcblxuICAvKipcbiAgICogUGFyYW1ldGVyIGtleXMgdGhhdCB0aGlzIGRhdGEgc291cmNlIHJlcXVpcmVzLlxuICAgKiBUaGVzZSBhcmUgcmVzb2x2ZWQgZnJvbSB0aGUgcmVwb3J0J3MgY3VycmVudCBwYXJhbWV0ZXIgdmFsdWVzXG4gICAqIGJlZm9yZSBjYWxsaW5nIHRoZSBgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXJgLlxuICAgKi9cbiAgcGFyYW1ldGVyS2V5cz86IHN0cmluZ1tdO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZSB0aGlzIGRhdGEgc291cmNlIG9uIHJlcG9ydCBsb2FkLiAqL1xuICBhdXRvRXhlY3V0ZT86IGJvb2xlYW47XG5cbiAgLyoqIENhY2hpbmcgc3RyYXRlZ3kuICovXG4gIGNhY2hlPzogRGF0YVNvdXJjZUNhY2hlRGVmaW5pdGlvbjtcblxuICAvLyDilIDilIDilIAgQVBJIEVuZHBvaW50IEV4ZWN1dGlvbiBNZXRhZGF0YSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLyoqIEJhc2UgVVJMIG92ZXJyaWRlIChpZiBjYWxsaW5nIGFuIGV4dGVybmFsIHNlcnZpY2Ugb3V0c2lkZSBhcGlCYXNlVXJsKSAqL1xuICBiYXNlVXJsPzogc3RyaW5nO1xuXG4gIC8qKiBEb3Qtbm90YXRpb24gcGF0aCB0byB0aGUgYXJyYXkgb2YgcmVjb3JkcyBpbiB0aGUgcmVzcG9uc2UgKGUuZy4gJ2RhdGEuaXRlbXMnIG9yICdyb3dzJykgKi9cbiAgZGF0YVBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqIERvdC1ub3RhdGlvbiBwYXRoIHRvIHRvdGFsIGNvdW50IGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uIChlLmcuICdyZXN1bHQudG90YWwnKSAqL1xuICB0b3RhbFBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqIFBhcmFtZXRlciBwbGFjZW1lbnQ6ICdxdWVyeScgfCAnYm9keScgfCAnYXV0bycgKi9cbiAgcGFyYW1QbGFjZW1lbnQ/OiAncXVlcnknIHwgJ2JvZHknIHwgJ2F1dG8nO1xuXG4gIC8qKiBSZXF1ZXN0IGJvZHkgdGVtcGxhdGUgZm9yIFBPU1QgcmVxdWVzdHMgKi9cbiAgYm9keVRlbXBsYXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIEN1c3RvbSBIVFRQIGhlYWRlcnMgdG8gaW5jbHVkZSB3aXRoIHRoZSBBUEkgcmVxdWVzdCAqL1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKiogV2hldGhlciB0byByb3V0ZSB0aHJvdWdoIHRoZSBiYWNrZW5kIHByb3h5IGdhdGV3YXkgKi9cbiAgdXNlUHJveHk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENhY2hpbmcgY29uZmlndXJhdGlvbiBmb3IgYSBkYXRhIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU291cmNlQ2FjaGVEZWZpbml0aW9uIHtcbiAgLyoqIFdoZXRoZXIgY2FjaGluZyBpcyBlbmFibGVkIGZvciB0aGlzIGRhdGEgc291cmNlLiAqL1xuICBlbmFibGVkOiBib29sZWFuO1xuXG4gIC8qKiBDYWNoZSBkdXJhdGlvbiBpbiBzZWNvbmRzLiAqL1xuICB0dGxTZWNvbmRzPzogbnVtYmVyO1xufVxuIl19
|
|
@@ -2,4 +2,5 @@ export { DynamicFormBuilder } from './dynamic-form-builder.service';
|
|
|
2
2
|
export { ReportSessionContextService } from './report-session-context.service';
|
|
3
3
|
export { ReportStorageService } from './report-storage.service';
|
|
4
4
|
export { ReportDataDiscoveryService } from './report-data-discovery.service';
|
|
5
|
-
|
|
5
|
+
export { ReportApiExecutionService } from './report-api-execution.service';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBSy9FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRHluYW1pY0Zvcm1CdWlsZGVyIH0gZnJvbSAnLi9keW5hbWljLWZvcm0tYnVpbGRlci5zZXJ2aWNlJztcbmV4cG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4vcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmV4cG9ydCB0eXBlIHtcbiAgU2Vzc2lvblBhcmFtTWF0Y2gsXG4gIERlcml2ZWRQYXJhbWV0ZXJzUmVzdWx0LFxufSBmcm9tICcuL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5leHBvcnQgeyBSZXBvcnRTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vcmVwb3J0LXN0b3JhZ2Uuc2VydmljZSc7XG5leHBvcnQgeyBSZXBvcnREYXRhRGlzY292ZXJ5U2VydmljZSB9IGZyb20gJy4vcmVwb3J0LWRhdGEtZGlzY292ZXJ5LnNlcnZpY2UnO1xuZXhwb3J0IHsgUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSB9IGZyb20gJy4vcmVwb3J0LWFwaS1leGVjdXRpb24uc2VydmljZSc7XG4iXX0=
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { HttpClient } from '@angular/common/http';
|
|
3
|
+
import { throwError } from 'rxjs';
|
|
4
|
+
import { catchError, map, timeout } from 'rxjs/operators';
|
|
5
|
+
import { ReportSessionContextService } from './report-session-context.service';
|
|
6
|
+
import { REPORTING_CONFIG } from '../tokens/reporting-config.token';
|
|
7
|
+
import { BWAYS_REPORT_ENDPOINTS } from '../../data-access/adapters/endpoint-tokens';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
/**
|
|
10
|
+
* Service responsible for executing API-based data retrieval requests.
|
|
11
|
+
*
|
|
12
|
+
* Supports URL path parameter interpolation (:id, {{id}}), query string parameter
|
|
13
|
+
* placement, JSON payload mapping, session header substitution, proxy routing,
|
|
14
|
+
* and dot-path response data extraction.
|
|
15
|
+
*/
|
|
16
|
+
export class ReportApiExecutionService {
|
|
17
|
+
http = inject(HttpClient, { optional: true });
|
|
18
|
+
session = inject(ReportSessionContextService, { optional: true });
|
|
19
|
+
reportingConfig = inject(REPORTING_CONFIG, { optional: true });
|
|
20
|
+
endpoints = inject(BWAYS_REPORT_ENDPOINTS, { optional: true });
|
|
21
|
+
getRegisteredEndpoints() {
|
|
22
|
+
return this.endpoints?.apiEndpoints || [];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Executes a parameterized REST API request and extracts the result array.
|
|
26
|
+
*
|
|
27
|
+
* @param options Target endpoint configuration, URL, method, and data path.
|
|
28
|
+
* @param formValues Active parameter and filter values from the form/context.
|
|
29
|
+
* @param customMappings Additional fixed or mapped parameter values.
|
|
30
|
+
*/
|
|
31
|
+
executeApi(options, formValues = {}, customMappings = {}) {
|
|
32
|
+
if (!this.http) {
|
|
33
|
+
return throwError(() => new Error('[ReportApiExecutionService] HttpClient is not provided in injector.'));
|
|
34
|
+
}
|
|
35
|
+
const rawUrl = options.url || options.endpoint;
|
|
36
|
+
if (!rawUrl || typeof rawUrl !== 'string' || rawUrl.trim() === '') {
|
|
37
|
+
return throwError(() => new Error('[ReportApiExecutionService] No valid URL or endpoint provided for API execution.'));
|
|
38
|
+
}
|
|
39
|
+
const sessionContext = this.session?.getCurrentSessionContext() ?? {};
|
|
40
|
+
const allValuesForPath = {
|
|
41
|
+
...sessionContext,
|
|
42
|
+
...formValues,
|
|
43
|
+
...customMappings,
|
|
44
|
+
};
|
|
45
|
+
// 1. Interpolate Path Variables: /api/orders/:orderId or /api/orders/{{orderId}}
|
|
46
|
+
const pathKeys = new Set();
|
|
47
|
+
const resolvedUrl = rawUrl.replace(/(^|\/):([a-zA-Z_][a-zA-Z0-9_]*)|\{\{([a-zA-Z0-9_]+)\}\}/g, (_, prefix, pathKey, templateKey) => {
|
|
48
|
+
const key = pathKey || templateKey;
|
|
49
|
+
pathKeys.add(key);
|
|
50
|
+
const val = allValuesForPath[key];
|
|
51
|
+
return (prefix || '') + (val !== undefined && val !== null ? encodeURIComponent(String(val)) : '');
|
|
52
|
+
});
|
|
53
|
+
let destination;
|
|
54
|
+
const browserOrigin = typeof location !== 'undefined' ? location.origin : undefined;
|
|
55
|
+
try {
|
|
56
|
+
destination = new URL(resolvedUrl, browserOrigin);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return throwError(() => new Error('Invalid API destination URL.'));
|
|
60
|
+
}
|
|
61
|
+
if (!/^https?:$/.test(destination.protocol) || destination.username || destination.password) {
|
|
62
|
+
return throwError(() => new Error('API destinations must use HTTP(S) without embedded credentials.'));
|
|
63
|
+
}
|
|
64
|
+
const trusted = destination.origin === browserOrigin || (this.reportingConfig?.trustedApiOrigins ?? []).includes(destination.origin);
|
|
65
|
+
const method = (options.method || 'GET').toUpperCase();
|
|
66
|
+
const queryParams = {};
|
|
67
|
+
const bodyPayload = { ...(options.bodyTemplate || {}) };
|
|
68
|
+
const payloadValues = {
|
|
69
|
+
...formValues,
|
|
70
|
+
...customMappings,
|
|
71
|
+
};
|
|
72
|
+
// 2. Separate remaining params into Query params and Body payload
|
|
73
|
+
for (const [k, v] of Object.entries(payloadValues)) {
|
|
74
|
+
if (pathKeys.has(k) || v === undefined || v === null || v === '')
|
|
75
|
+
continue;
|
|
76
|
+
if (method === 'GET' || method === 'DELETE') {
|
|
77
|
+
if (typeof v === 'object') {
|
|
78
|
+
queryParams[k] = JSON.stringify(v);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
queryParams[k] = String(v);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
bodyPayload[k] = v;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (!trusted) {
|
|
89
|
+
const secrets = Object.entries(sessionContext).filter(([key, value]) => /token|secret|password|authorization|api.?key/i.test(key) && value != null && String(value).length > 0).map(([, value]) => String(value));
|
|
90
|
+
const payloadText = JSON.stringify([queryParams, bodyPayload]);
|
|
91
|
+
if (secrets.some(secret => resolvedUrl.includes(secret) || resolvedUrl.includes(encodeURIComponent(secret)) || payloadText.includes(secret))) {
|
|
92
|
+
return throwError(() => new Error('Session credentials may only be sent to a trusted API origin.'));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// 3. Resolve Headers with Token Interpolation & Standard Session Context
|
|
96
|
+
const headers = {};
|
|
97
|
+
if (trusted && sessionContext['companyId'] !== undefined && sessionContext['companyId'] !== null) {
|
|
98
|
+
headers['X-Company-Id'] = String(sessionContext['companyId']);
|
|
99
|
+
}
|
|
100
|
+
if (trusted && sessionContext['branchId'] !== undefined && sessionContext['branchId'] !== null) {
|
|
101
|
+
headers['X-Branch-Id'] = String(sessionContext['branchId']);
|
|
102
|
+
}
|
|
103
|
+
if (trusted && sessionContext['userId'] !== undefined && sessionContext['userId'] !== null) {
|
|
104
|
+
headers['X-User-Id'] = String(sessionContext['userId']);
|
|
105
|
+
}
|
|
106
|
+
if (trusted && sessionContext['token'] !== undefined && sessionContext['token'] !== null) {
|
|
107
|
+
headers['Authorization'] = `Bearer ${sessionContext['token']}`;
|
|
108
|
+
}
|
|
109
|
+
if (options.headers) {
|
|
110
|
+
for (const [hk, hv] of Object.entries(options.headers)) {
|
|
111
|
+
// Report JSON cannot opt an external origin into receiving session credentials.
|
|
112
|
+
if (!trusted && (!/^(accept|content-type)$/i.test(hk) || /\{\{/.test(String(hv))))
|
|
113
|
+
continue;
|
|
114
|
+
if (typeof hv === 'string') {
|
|
115
|
+
headers[hk] = hv.replace(/\{\{session\.([a-zA-Z0-9_]+)\}\}|\{\{([a-zA-Z0-9_]+)\}\}/g, (_, sk1, sk2) => {
|
|
116
|
+
const key = sk1 || sk2;
|
|
117
|
+
return sessionContext[key] !== undefined ? String(sessionContext[key]) : '';
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
headers[hk] = String(hv);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// 4. Determine Request: Direct vs. Backend Proxy Gateway
|
|
126
|
+
const useProxy = options.useProxy === true;
|
|
127
|
+
let request$;
|
|
128
|
+
if (useProxy) {
|
|
129
|
+
const proxyBase = this.endpoints?.apisEndpoint ||
|
|
130
|
+
(this.reportingConfig?.apiBaseUrl ? `${this.reportingConfig.apiBaseUrl}/apis` : '/api/reporting/apis');
|
|
131
|
+
const proxyUrl = `${proxyBase.replace(/\/+$/, '')}/proxy`;
|
|
132
|
+
request$ = this.http.post(proxyUrl, {
|
|
133
|
+
endpoint: resolvedUrl,
|
|
134
|
+
url: resolvedUrl,
|
|
135
|
+
method,
|
|
136
|
+
parameters: queryParams,
|
|
137
|
+
queryParams,
|
|
138
|
+
body: Object.keys(bodyPayload).length > 0 ? bodyPayload : undefined,
|
|
139
|
+
headers,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
if (method === 'GET') {
|
|
144
|
+
request$ = this.http.get(resolvedUrl, { params: queryParams, headers });
|
|
145
|
+
}
|
|
146
|
+
else if (method === 'POST') {
|
|
147
|
+
request$ = this.http.post(resolvedUrl, bodyPayload, { params: queryParams, headers });
|
|
148
|
+
}
|
|
149
|
+
else if (method === 'PUT') {
|
|
150
|
+
request$ = this.http.put(resolvedUrl, bodyPayload, { params: queryParams, headers });
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
request$ = this.http.request(method, resolvedUrl, {
|
|
154
|
+
body: bodyPayload,
|
|
155
|
+
params: queryParams,
|
|
156
|
+
headers,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// 5. Extract & Normalize Target Data Array
|
|
161
|
+
return request$.pipe(timeout({ first: this.reportingConfig?.executionTimeoutMs ?? this.reportingConfig?.lookupTimeoutMs ?? 300000 }), map((response) => this.extractDataArray(response, options.dataPath)), catchError((err) => {
|
|
162
|
+
console.error(`[ReportApiExecutionService] API execution error [${method} ${resolvedUrl}]:`, err);
|
|
163
|
+
const message = err?.error?.message ||
|
|
164
|
+
err?.message ||
|
|
165
|
+
`API request failed with status ${err?.status || 'unknown'}`;
|
|
166
|
+
return throwError(() => new Error(message));
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Dot-notation extractor: 'data.items' -> response.data.items
|
|
171
|
+
*/
|
|
172
|
+
extractDataArray(response, dataPath) {
|
|
173
|
+
if (!response)
|
|
174
|
+
return [];
|
|
175
|
+
if (Array.isArray(response))
|
|
176
|
+
return response;
|
|
177
|
+
if (dataPath && typeof dataPath === 'string' && dataPath.trim() !== '') {
|
|
178
|
+
const parts = dataPath.trim().split('.');
|
|
179
|
+
let current = response;
|
|
180
|
+
for (const part of parts) {
|
|
181
|
+
if (current && typeof current === 'object' && part in current) {
|
|
182
|
+
current = current[part];
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
current = null;
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (Array.isArray(current))
|
|
190
|
+
return current;
|
|
191
|
+
}
|
|
192
|
+
// Auto-detect common response collection containers
|
|
193
|
+
for (const key of ['data', 'items', 'rows', 'records', 'results', 'result']) {
|
|
194
|
+
if (Array.isArray(response[key]))
|
|
195
|
+
return response[key];
|
|
196
|
+
}
|
|
197
|
+
// If single object returned, wrap in array for grid display
|
|
198
|
+
if (typeof response === 'object' && response !== null) {
|
|
199
|
+
return [response];
|
|
200
|
+
}
|
|
201
|
+
return [];
|
|
202
|
+
}
|
|
203
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportApiExecutionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
204
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportApiExecutionService, providedIn: 'root' });
|
|
205
|
+
}
|
|
206
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportApiExecutionService, decorators: [{
|
|
207
|
+
type: Injectable,
|
|
208
|
+
args: [{ providedIn: 'root' }]
|
|
209
|
+
}] });
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWFwaS1leGVjdXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvc2VydmljZXMvcmVwb3J0LWFwaS1leGVjdXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQW1CLE1BQU0sa0NBQWtDLENBQUM7QUFDckYsT0FBTyxFQUFFLHNCQUFzQixFQUF3QixNQUFNLDRDQUE0QyxDQUFDOztBQWMxRzs7Ozs7O0dBTUc7QUFFSCxNQUFNLE9BQU8seUJBQXlCO0lBQ25CLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUMsT0FBTyxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLGVBQWUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQTJCLENBQUM7SUFDekYsU0FBUyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBZ0MsQ0FBQztJQUUvRyxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMs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QyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFBRSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsNERBQTREO1FBQzVELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN0RCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzt3R0F4TVUseUJBQXlCOzRHQUF6Qix5QkFBeUIsY0FEWixNQUFNOzs0RkFDbkIseUJBQXlCO2tCQURyQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4vcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcsIFJlcG9ydGluZ0NvbmZpZyB9IGZyb20gJy4uL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMsIEJ3YXlzUmVwb3J0RW5kcG9pbnRzIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvYWRhcHRlcnMvZW5kcG9pbnQtdG9rZW5zJztcbmltcG9ydCB7IFJlcG9ydEFwaUVuZHBvaW50RGVmaW5pdGlvbiB9IGZyb20gJy4uL21vZGVscy9yZXBvcnQtYXBpLWVuZHBvaW50Lm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBBcGlFeGVjdXRpb25PcHRpb25zIHtcbiAgdXJsPzogc3RyaW5nO1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBkYXRhUGF0aD86IHN0cmluZztcbiAgdG90YWxQYXRoPzogc3RyaW5nO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgdXNlUHJveHk/OiBib29sZWFuO1xuICBib2R5VGVtcGxhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIHJlc3BvbnNpYmxlIGZvciBleGVjdXRpbmcgQVBJLWJhc2VkIGRhdGEgcmV0cmlldmFsIHJlcXVlc3RzLlxuICpcbiAqIFN1cHBvcnRzIFVSTCBwYXRoIHBhcmFtZXRlciBpbnRlcnBvbGF0aW9uICg6aWQsIHt7aWR9fSksIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJcbiAqIHBsYWNlbWVudCwgSlNPTiBwYXlsb2FkIG1hcHBpbmcsIHNlc3Npb24gaGVhZGVyIHN1YnN0aXR1dGlvbiwgcHJveHkgcm91dGluZyxcbiAqIGFuZCBkb3QtcGF0aCByZXNwb25zZSBkYXRhIGV4dHJhY3Rpb24uXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50LCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9ydGluZ0NvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pIGFzIFJlcG9ydGluZ0NvbmZpZyB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzID0gaW5qZWN0KEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMsIHsgb3B0aW9uYWw6IHRydWUgfSkgYXMgQndheXNSZXBvcnRFbmRwb2ludHMgfCBudWxsO1xuXG4gIGdldFJlZ2lzdGVyZWRFbmRwb2ludHMoKTogUmVwb3J0QXBpRW5kcG9pbnREZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmVuZHBvaW50cz8uYXBpRW5kcG9pbnRzIHx8IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgcGFyYW1ldGVyaXplZCBSRVNUIEFQSSByZXF1ZXN0IGFuZCBleHRyYWN0cyB0aGUgcmVzdWx0IGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUYXJnZXQgZW5kcG9pbnQgY29uZmlndXJhdGlvbiwgVVJMLCBtZXRob2QsIGFuZCBkYXRhIHBhdGguXG4gICAqIEBwYXJhbSBmb3JtVmFsdWVzIEFjdGl2ZSBwYXJhbWV0ZXIgYW5kIGZpbHRlciB2YWx1ZXMgZnJvbSB0aGUgZm9ybS9jb250ZXh0LlxuICAgKiBAcGFyYW0gY3VzdG9tTWFwcGluZ3MgQWRkaXRpb25hbCBmaXhlZCBvciBtYXBwZWQgcGFyYW1ldGVyIHZhbHVlcy5cbiAgICovXG4gIGV4ZWN1dGVBcGkoXG4gICAgb3B0aW9uczogQXBpRXhlY3V0aW9uT3B0aW9ucyB8IFBhcnRpYWw8UmVwb3J0QXBpRW5kcG9pbnREZWZpbml0aW9uPixcbiAgICBmb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9LFxuICAgIGN1c3RvbU1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9XG4gICk6IE9ic2VydmFibGU8dW5rbm93bltdPiB7XG4gICAgaWYgKCF0aGlzLmh0dHApIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignW1JlcG9ydEFwaUV4ZWN1dGlvblNlcnZpY2VdIEh0dHBDbGllbnQgaXMgbm90IHByb3ZpZGVkIGluIGluamVjdG9yLicpKTtcbiAgICB9XG5cbiAgICBjb25zdCByYXdVcmwgPSBvcHRpb25zLnVybCB8fCBvcHRpb25zLmVuZHBvaW50O1xuICAgIGlmICghcmF3VXJsIHx8IHR5cGVvZiByYXdVcmwgIT09ICdzdHJpbmcnIHx8IHJhd1VybC50cmltKCkgPT09ICcnKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ1tSZXBvcnRBcGlFeGVjdXRpb25TZXJ2aWNlXSBObyB2YWxpZCBVUkwgb3IgZW5kcG9pbnQgcHJvdmlkZWQgZm9yIEFQSSBleGVjdXRpb24uJykpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb25Db250ZXh0ID0gdGhpcy5zZXNzaW9uPy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcbiAgICBjb25zdCBhbGxWYWx1ZXNGb3JQYXRoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIC4uLnNlc3Npb25Db250ZXh0LFxuICAgICAgLi4uZm9ybVZhbHVlcyxcbiAgICAgIC4uLmN1c3RvbU1hcHBpbmdzLFxuICAgIH07XG5cbiAgICAvLyAxLiBJbnRlcnBvbGF0ZSBQYXRoIFZhcmlhYmxlczogL2FwaS9vcmRlcnMvOm9yZGVySWQgb3IgL2FwaS9vcmRlcnMve3tvcmRlcklkfX1cbiAgICBjb25zdCBwYXRoS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHJlc29sdmVkVXJsID0gcmF3VXJsLnJlcGxhY2UoLyhefFxcLyk6KFthLXpBLVpfXVthLXpBLVowLTlfXSopfFxce1xceyhbYS16QS1aMC05X10rKVxcfVxcfS9nLCAoXywgcHJlZml4LCBwYXRoS2V5LCB0ZW1wbGF0ZUtleSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gcGF0aEtleSB8fCB0ZW1wbGF0ZUtleTtcbiAgICAgIHBhdGhLZXlzLmFkZChrZXkpO1xuICAgICAgY29uc3QgdmFsID0gYWxsVmFsdWVzRm9yUGF0aFtrZXldO1xuICAgICAgcmV0dXJuIChwcmVmaXggfHwgJycpICsgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCA/IGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodmFsKSkgOiAnJyk7XG4gICAgfSk7XG5cbiAgICBsZXQgZGVzdGluYXRpb246IFVSTDtcbiAgICBjb25zdCBicm93c2VyT3JpZ2luID0gdHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyA/IGxvY2F0aW9uLm9yaWdpbiA6IHVuZGVmaW5lZDtcbiAgICB0cnkgeyBkZXN0aW5hdGlvbiA9IG5ldyBVUkwocmVzb2x2ZWRVcmwsIGJyb3dzZXJPcmlnaW4pOyB9XG4gICAgY2F0Y2ggeyByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ0ludmFsaWQgQVBJIGRlc3RpbmF0aW9uIFVSTC4nKSk7IH1cbiAgICBpZiAoIS9eaHR0cHM/OiQvLnRlc3QoZGVzdGluYXRpb24ucHJvdG9jb2wpIHx8IGRlc3RpbmF0aW9uLnVzZXJuYW1lIHx8IGRlc3RpbmF0aW9uLnBhc3N3b3JkKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ0FQSSBkZXN0aW5hdGlvbnMgbXVzdCB1c2UgSFRUUChTKSB3aXRob3V0IGVtYmVkZGVkIGNyZWRlbnRpYWxzLicpKTtcbiAgICB9XG4gICAgY29uc3QgdHJ1c3RlZCA9IGRlc3RpbmF0aW9uLm9yaWdpbiA9PT0gYnJvd3Nlck9yaWdpbiB8fCAodGhpcy5yZXBvcnRpbmdDb25maWc/LnRydXN0ZWRBcGlPcmlnaW5zID8/IFtdKS5pbmNsdWRlcyhkZXN0aW5hdGlvbi5vcmlnaW4pO1xuXG4gICAgY29uc3QgbWV0aG9kID0gKG9wdGlvbnMubWV0aG9kIHx8ICdHRVQnKS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgY29uc3QgYm9keVBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi4oKG9wdGlvbnMgYXMgYW55KS5ib2R5VGVtcGxhdGUgfHwge30pIH07XG5cbiAgICBjb25zdCBwYXlsb2FkVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIC4uLmZvcm1WYWx1ZXMsXG4gICAgICAuLi5jdXN0b21NYXBwaW5ncyxcbiAgICB9O1xuXG4gICAgLy8gMi4gU2VwYXJhdGUgcmVtYWluaW5nIHBhcmFtcyBpbnRvIFF1ZXJ5IHBhcmFtcyBhbmQgQm9keSBwYXlsb2FkXG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocGF5bG9hZFZhbHVlcykpIHtcbiAgICAgIGlmIChwYXRoS2V5cy5oYXMoaykgfHwgdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGwgfHwgdiA9PT0gJycpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAobWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdERUxFVEUnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBxdWVyeVBhcmFtc1trXSA9IEpTT04uc3RyaW5naWZ5KHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zW2tdID0gU3RyaW5nKHYpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBib2R5UGF5bG9hZFtrXSA9IHY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0cnVzdGVkKSB7XG4gICAgICBjb25zdCBzZWNyZXRzID0gT2JqZWN0LmVudHJpZXMoc2Vzc2lvbkNvbnRleHQpLmZpbHRlcigoW2tleSwgdmFsdWVdKSA9PiAvdG9rZW58c2VjcmV0fHBhc3N3b3JkfGF1dGhvcml6YXRpb258YXBpLj9rZXkvaS50ZXN0KGtleSkgJiYgdmFsdWUgIT0gbnVsbCAmJiBTdHJpbmcodmFsdWUpLmxlbmd0aCA+IDApLm1hcCgoWywgdmFsdWVdKSA9PiBTdHJpbmcodmFsdWUpKTtcbiAgICAgIGNvbnN0IHBheWxvYWRUZXh0ID0gSlNPTi5zdHJpbmdpZnkoW3F1ZXJ5UGFyYW1zLCBib2R5UGF5bG9hZF0pO1xuICAgICAgaWYgKHNlY3JldHMuc29tZShzZWNyZXQgPT4gcmVzb2x2ZWRVcmwuaW5jbHVkZXMoc2VjcmV0KSB8fCByZXNvbHZlZFVybC5pbmNsdWRlcyhlbmNvZGVVUklDb21wb25lbnQoc2VjcmV0KSkgfHwgcGF5bG9hZFRleHQuaW5jbHVkZXMoc2VjcmV0KSkpIHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdTZXNzaW9uIGNyZWRlbnRpYWxzIG1heSBvbmx5IGJlIHNlbnQgdG8gYSB0cnVzdGVkIEFQSSBvcmlnaW4uJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIFJlc29sdmUgSGVhZGVycyB3aXRoIFRva2VuIEludGVycG9sYXRpb24gJiBTdGFuZGFyZCBTZXNzaW9uIENvbnRleHRcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgaWYgKHRydXN0ZWQgJiYgc2Vzc2lvbkNvbnRleHRbJ2NvbXBhbnlJZCddICE9PSB1bmRlZmluZWQgJiYgc2Vzc2lvbkNvbnRleHRbJ2NvbXBhbnlJZCddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzWydYLUNvbXBhbnktSWQnXSA9IFN0cmluZyhzZXNzaW9uQ29udGV4dFsnY29tcGFueUlkJ10pO1xuICAgIH1cbiAgICBpZiAodHJ1c3RlZCAmJiBzZXNzaW9uQ29udGV4dFsnYnJhbmNoSWQnXSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25Db250ZXh0WydicmFuY2hJZCddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzWydYLUJyYW5jaC1JZCddID0gU3RyaW5nKHNlc3Npb25Db250ZXh0WydicmFuY2hJZCddKTtcbiAgICB9XG4gICAgaWYgKHRydXN0ZWQgJiYgc2Vzc2lvbkNvbnRleHRbJ3VzZXJJZCddICE9PSB1bmRlZmluZWQgJiYgc2Vzc2lvbkNvbnRleHRbJ3VzZXJJZCddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzWydYLVVzZXItSWQnXSA9IFN0cmluZyhzZXNzaW9uQ29udGV4dFsndXNlcklkJ10pO1xuICAgIH1cbiAgICBpZiAodHJ1c3RlZCAmJiBzZXNzaW9uQ29udGV4dFsndG9rZW4nXSAhPT0gdW5kZWZpbmVkICYmIHNlc3Npb25Db250ZXh0Wyd0b2tlbiddICE9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7c2Vzc2lvbkNvbnRleHRbJ3Rva2VuJ119YDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtoaywgaHZdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuaGVhZGVycykpIHtcbiAgICAgICAgLy8gUmVwb3J0IEpTT04gY2Fubm90IG9wdCBhbiBleHRlcm5hbCBvcmlnaW4gaW50byByZWNlaXZpbmcgc2Vzc2lvbiBjcmVkZW50aWFscy5cbiAgICAgICAgaWYgKCF0cnVzdGVkICYmICghL14oYWNjZXB0fGNvbnRlbnQtdHlwZSkkL2kudGVzdChoaykgfHwgL1xce1xcey8udGVzdChTdHJpbmcoaHYpKSkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIGh2ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGhlYWRlcnNbaGtdID0gaHYucmVwbGFjZSgvXFx7XFx7c2Vzc2lvblxcLihbYS16QS1aMC05X10rKVxcfVxcfXxcXHtcXHsoW2EtekEtWjAtOV9dKylcXH1cXH0vZywgKF8sIHNrMSwgc2syKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzazEgfHwgc2syO1xuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb25Db250ZXh0W2tleV0gIT09IHVuZGVmaW5lZCA/IFN0cmluZyhzZXNzaW9uQ29udGV4dFtrZXldKSA6ICcnO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhlYWRlcnNbaGtdID0gU3RyaW5nKGh2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIERldGVybWluZSBSZXF1ZXN0OiBEaXJlY3QgdnMuIEJhY2tlbmQgUHJveHkgR2F0ZXdheVxuICAgIGNvbnN0IHVzZVByb3h5ID0gb3B0aW9ucy51c2VQcm94eSA9PT0gdHJ1ZTtcbiAgICBsZXQgcmVxdWVzdCQ6IE9ic2VydmFibGU8dW5rbm93bj47XG5cbiAgICBpZiAodXNlUHJveHkpIHtcbiAgICAgIGNvbnN0IHByb3h5QmFzZSA9XG4gICAgICAgIHRoaXMuZW5kcG9pbnRzPy5hcGlzRW5kcG9pbnQgfHxcbiAgICAgICAgKHRoaXMucmVwb3J0aW5nQ29uZmlnPy5hcGlCYXNlVXJsID8gYCR7dGhpcy5yZXBvcnRpbmdDb25maWcuYXBpQmFzZVVybH0vYXBpc2AgOiAnL2FwaS9yZXBvcnRpbmcvYXBpcycpO1xuICAgICAgY29uc3QgcHJveHlVcmwgPSBgJHtwcm94eUJhc2UucmVwbGFjZSgvXFwvKyQvLCAnJyl9L3Byb3h5YDtcblxuICAgICAgcmVxdWVzdCQgPSB0aGlzLmh0dHAucG9zdDx1bmtub3duPihwcm94eVVybCwge1xuICAgICAgICBlbmRwb2ludDogcmVzb2x2ZWRVcmwsXG4gICAgICAgIHVybDogcmVzb2x2ZWRVcmwsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgcGFyYW1ldGVyczogcXVlcnlQYXJhbXMsXG4gICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICBib2R5OiBPYmplY3Qua2V5cyhib2R5UGF5bG9hZCkubGVuZ3RoID4gMCA/IGJvZHlQYXlsb2FkIDogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtZXRob2QgPT09ICdHRVQnKSB7XG4gICAgICAgIHJlcXVlc3QkID0gdGhpcy5odHRwLmdldDx1bmtub3duPihyZXNvbHZlZFVybCwgeyBwYXJhbXM6IHF1ZXJ5UGFyYW1zLCBoZWFkZXJzIH0pO1xuICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdQT1NUJykge1xuICAgICAgICByZXF1ZXN0JCA9IHRoaXMuaHR0cC5wb3N0PHVua25vd24+KHJlc29sdmVkVXJsLCBib2R5UGF5bG9hZCwgeyBwYXJhbXM6IHF1ZXJ5UGFyYW1zLCBoZWFkZXJzIH0pO1xuICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdQVVQnKSB7XG4gICAgICAgIHJlcXVlc3QkID0gdGhpcy5odHRwLnB1dDx1bmtub3duPihyZXNvbHZlZFVybCwgYm9keVBheWxvYWQsIHsgcGFyYW1zOiBxdWVyeVBhcmFtcywgaGVhZGVycyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3QkID0gdGhpcy5odHRwLnJlcXVlc3Q8dW5rbm93bj4obWV0aG9kLCByZXNvbHZlZFVybCwge1xuICAgICAgICAgIGJvZHk6IGJvZHlQYXlsb2FkLFxuICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gRXh0cmFjdCAmIE5vcm1hbGl6ZSBUYXJnZXQgRGF0YSBBcnJheVxuICAgIHJldHVybiByZXF1ZXN0JC5waXBlKFxuICAgICAgdGltZW91dCh7IGZpcnN0OiB0aGlzLnJlcG9ydGluZ0NvbmZpZz8uZXhlY3V0aW9uVGltZW91dE1zID8/IHRoaXMucmVwb3J0aW5nQ29uZmlnPy5sb29rdXBUaW1lb3V0TXMgPz8gMzAwMDAwIH0pLFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4gdGhpcy5leHRyYWN0RGF0YUFycmF5KHJlc3BvbnNlLCBvcHRpb25zLmRhdGFQYXRoKSksXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1JlcG9ydEFwaUV4ZWN1dGlvblNlcnZpY2VdIEFQSSBleGVjdXRpb24gZXJyb3IgWyR7bWV0aG9kfSAke3Jlc29sdmVkVXJsfV06YCwgZXJyKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fFxuICAgICAgICAgIGVycj8ubWVzc2FnZSB8fFxuICAgICAgICAgIGBBUEkgcmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgJHtlcnI/LnN0YXR1cyB8fCAndW5rbm93bid9YDtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3Qtbm90YXRpb24gZXh0cmFjdG9yOiAnZGF0YS5pdGVtcycgLT4gcmVzcG9uc2UuZGF0YS5pdGVtc1xuICAgKi9cbiAgZXh0cmFjdERhdGFBcnJheShyZXNwb25zZTogYW55LCBkYXRhUGF0aD86IHN0cmluZyk6IHVua25vd25bXSB7XG4gICAgaWYgKCFyZXNwb25zZSkgcmV0dXJuIFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlKSkgcmV0dXJuIHJlc3BvbnNlO1xuXG4gICAgaWYgKGRhdGFQYXRoICYmIHR5cGVvZiBkYXRhUGF0aCA9PT0gJ3N0cmluZycgJiYgZGF0YVBhdGgudHJpbSgpICE9PSAnJykge1xuICAgICAgY29uc3QgcGFydHMgPSBkYXRhUGF0aC50cmltKCkuc3BsaXQoJy4nKTtcbiAgICAgIGxldCBjdXJyZW50OiBhbnkgPSByZXNwb25zZTtcbiAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgICBpZiAoY3VycmVudCAmJiB0eXBlb2YgY3VycmVudCA9PT0gJ29iamVjdCcgJiYgcGFydCBpbiBjdXJyZW50KSB7XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGFydF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSByZXR1cm4gY3VycmVudDtcbiAgICB9XG5cbiAgICAvLyBBdXRvLWRldGVjdCBjb21tb24gcmVzcG9uc2UgY29sbGVjdGlvbiBjb250YWluZXJzXG4gICAgZm9yIChjb25zdCBrZXkgb2YgWydkYXRhJywgJ2l0ZW1zJywgJ3Jvd3MnLCAncmVjb3JkcycsICdyZXN1bHRzJywgJ3Jlc3VsdCddKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNwb25zZVtrZXldKSkgcmV0dXJuIHJlc3BvbnNlW2tleV07XG4gICAgfVxuXG4gICAgLy8gSWYgc2luZ2xlIG9iamVjdCByZXR1cm5lZCwgd3JhcCBpbiBhcnJheSBmb3IgZ3JpZCBkaXNwbGF5XG4gICAgaWYgKHR5cGVvZiByZXNwb25zZSA9PT0gJ29iamVjdCcgJiYgcmVzcG9uc2UgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBbcmVzcG9uc2VdO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIl19
|