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.
Files changed (124) hide show
  1. package/README.md +463 -316
  2. package/esm2022/lib/core/config/bways-report-config.mjs +31 -32
  3. package/esm2022/lib/core/models/index.mjs +1 -1
  4. package/esm2022/lib/core/models/report-api-endpoint.model.mjs +8 -0
  5. package/esm2022/lib/core/models/report-component.model.mjs +1 -1
  6. package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
  7. package/esm2022/lib/core/services/index.mjs +2 -1
  8. package/esm2022/lib/core/services/report-api-execution.service.mjs +210 -0
  9. package/esm2022/lib/core/services/report-data-discovery.service.mjs +76 -4
  10. package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
  11. package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
  12. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  13. package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
  14. package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
  15. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +31 -1
  16. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +27 -2
  17. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
  18. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
  19. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
  20. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
  21. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +4 -37
  22. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +28 -51
  23. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
  24. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
  25. package/esm2022/lib/data-access/adapters/index.mjs +1 -1
  26. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
  27. package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
  28. package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
  29. package/esm2022/lib/data-access/contracts/index.mjs +1 -1
  30. package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
  31. package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
  32. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +536 -6
  33. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +55 -17
  34. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +546 -119
  35. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +3 -3
  36. package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +3 -3
  37. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +142 -8
  38. package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
  39. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +129 -28
  40. package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +3 -3
  41. package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
  42. package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +3 -3
  43. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +27 -13
  44. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
  45. package/esm2022/lib/features/designer/designer.component.mjs +109 -75
  46. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
  47. package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
  48. package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
  49. package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
  50. package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +2 -1
  51. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
  52. package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
  53. package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
  54. package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
  55. package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
  56. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +6 -4
  57. package/esm2022/lib/features/routing/report-routes.mjs +6 -6
  58. package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
  59. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
  60. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +23 -4
  61. package/esm2022/lib/features/runtime/report-execution.service.mjs +36 -6
  62. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +54 -11
  63. package/esm2022/lib/features/runtime/report-runtime.component.mjs +105 -68
  64. package/esm2022/lib/features/runtime/rpt-report.component.mjs +50 -42
  65. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
  66. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +16 -7
  67. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +53 -1
  68. package/esm2022/lib/primitives/components/index.mjs +2 -1
  69. package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +428 -0
  70. package/esm2022/lib/primitives/register-builtins.mjs +51 -2
  71. package/esm2022/lib/provide-reporting.mjs +11 -29
  72. package/fesm2022/bways-report.mjs +3745 -1281
  73. package/fesm2022/bways-report.mjs.map +1 -1
  74. package/lib/core/config/bways-report-config.d.ts +27 -5
  75. package/lib/core/models/index.d.ts +2 -1
  76. package/lib/core/models/report-api-endpoint.model.d.ts +30 -0
  77. package/lib/core/models/report-component.model.d.ts +16 -4
  78. package/lib/core/models/report-datasource.model.d.ts +21 -2
  79. package/lib/core/services/index.d.ts +1 -0
  80. package/lib/core/services/report-api-execution.service.d.ts +41 -0
  81. package/lib/core/services/report-data-discovery.service.d.ts +23 -1
  82. package/lib/core/services/report-session-context.service.d.ts +9 -0
  83. package/lib/core/tokens/designer-config.token.d.ts +4 -0
  84. package/lib/core/tokens/reporting-config.token.d.ts +4 -0
  85. package/lib/core/utils/report-endpoint.util.d.ts +12 -0
  86. package/lib/core/utils/report-request-scope.d.ts +14 -0
  87. package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +2 -0
  88. package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +1 -0
  89. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
  90. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
  91. package/lib/data-access/adapters/endpoint-tokens.d.ts +7 -0
  92. package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
  93. package/lib/data-access/adapters/http-lookup.adapter.d.ts +3 -4
  94. package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
  95. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
  96. package/lib/data-access/adapters/index.d.ts +1 -1
  97. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
  98. package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
  99. package/lib/data-access/adapters/session-headers.d.ts +3 -0
  100. package/lib/data-access/contracts/index.d.ts +1 -0
  101. package/lib/data-access/contracts/lookup.contract.d.ts +3 -0
  102. package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
  103. package/lib/features/designer/components/component-palette/component-palette.component.d.ts +16 -0
  104. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
  105. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
  106. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +21 -3
  107. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +20 -7
  108. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +2 -1
  109. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
  110. package/lib/features/designer/designer.component.d.ts +16 -2
  111. package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
  112. package/lib/features/designer/services/designer-config.service.d.ts +13 -0
  113. package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
  114. package/lib/features/persistence/services/report-store.service.d.ts +15 -1
  115. package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
  116. package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
  117. package/lib/features/runtime/report-execution.service.d.ts +4 -0
  118. package/lib/features/runtime/report-grid-bridge.component.d.ts +4 -1
  119. package/lib/features/runtime/report-runtime.component.d.ts +14 -1
  120. package/lib/features/runtime/rpt-report.component.d.ts +5 -0
  121. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
  122. package/lib/primitives/components/index.d.ts +2 -0
  123. package/lib/primitives/components/radio/rpt-radio.component.d.ts +77 -0
  124. package/package.json +2 -1
@@ -1,217 +1,66 @@
1
+ import { reportIdAvailability, reportIdInspection } from './report-id-availability';
2
+ import { ReportSessionContextService } from '../../core/services/report-session-context.service';
3
+ import { reportSessionHeaders } from './session-headers';
1
4
  import { inject, Injectable } from '@angular/core';
2
5
  import { HttpClient } from '@angular/common/http';
3
- import { of } from 'rxjs';
6
+ import { throwError } from 'rxjs';
4
7
  import { catchError } from 'rxjs/operators';
5
8
  import { ReportPersistenceAdapter } from '../contracts/report-persistence.contract';
6
9
  import { REPORTING_CONFIG } from '../../core/tokens/reporting-config.token';
7
10
  import * as i0 from "@angular/core";
8
- /**
9
- * Built-in HTTP adapter for report definitions persistence.
10
- * Connects to NestJS `/api/reporting/reports` endpoints.
11
- * Includes in-memory mock fallback when the remote backend is unreachable.
12
- */
11
+ /** HTTP-only persistence. Use withLocalStorage() explicitly for offline demos. */
13
12
  export class HttpReportPersistenceAdapter extends ReportPersistenceAdapter {
13
+ session = inject(ReportSessionContextService, { optional: true });
14
+ get headers() { return reportSessionHeaders(this.session?.getCurrentSessionContext() ?? {}); }
14
15
  http = inject(HttpClient, { optional: true });
15
16
  config = inject(REPORTING_CONFIG, { optional: true });
16
- mockStore = new Map();
17
- constructor() {
18
- super();
19
- this.seedDefaultMockReports();
17
+ checkId(reportId) {
18
+ if (!this.http || !this.config?.apiBaseUrl)
19
+ return throwError(() => new Error('HTTP report storage is not configured.'));
20
+ const url = this.config.apiBaseUrl.replace(/\/+$/, '') + '/reports/' + encodeURIComponent(reportId) + '/availability';
21
+ return reportIdAvailability(this.http, url, this.headers, () => super.checkId(reportId));
20
22
  }
21
- load(reportId) {
22
- const baseUrl = this.config?.apiBaseUrl;
23
- if (baseUrl && this.http) {
24
- return this.http
25
- .get(`${baseUrl}/reports/${encodeURIComponent(reportId)}`)
26
- .pipe(catchError((err) => {
27
- console.warn(`[HttpReportPersistenceAdapter] Failed to load remote report ${reportId}:`, err);
28
- return of(this.getMockReport(reportId));
29
- }));
30
- }
31
- return of(this.getMockReport(reportId));
23
+ inspectId(reportId) {
24
+ if (!this.http || !this.config?.apiBaseUrl)
25
+ return throwError(() => new Error('HTTP report storage is not configured.'));
26
+ const url = this.config.apiBaseUrl.replace(/\/+$/, '') + '/reports/' + encodeURIComponent(reportId) + '/availability';
27
+ return reportIdInspection(this.http, url, this.headers, () => super.inspectId(reportId));
32
28
  }
33
- save(report) {
34
- const baseUrl = this.config?.apiBaseUrl;
35
- if (baseUrl && this.http) {
36
- const payload = {
37
- id: report.id,
38
- name: report.name,
39
- description: report.description,
40
- category: report.category,
41
- version: report.version,
42
- isPublished: report.isPublished ?? false,
43
- definition: report,
44
- };
45
- return this.http
46
- .post(`${baseUrl}/reports`, payload)
47
- .pipe(catchError((err) => {
48
- console.warn('[HttpReportPersistenceAdapter] Failed to save remote report, storing in mock:', err);
49
- this.mockStore.set(report.id, { ...report, updatedAt: new Date().toISOString() });
50
- return of(report);
51
- }));
52
- }
53
- this.mockStore.set(report.id, { ...report, updatedAt: new Date().toISOString() });
54
- return of(report);
29
+ load(id) {
30
+ return this.request('GET', '/' + encodeURIComponent(id));
55
31
  }
56
- list() {
57
- const baseUrl = this.config?.apiBaseUrl;
58
- if (baseUrl && this.http) {
59
- return this.http.get(`${baseUrl}/reports`).pipe(catchError((err) => {
60
- console.warn('[HttpReportPersistenceAdapter] Failed to list remote reports, returning mock list:', err);
61
- return of(this.getMockSummaries());
62
- }));
63
- }
64
- return of(this.getMockSummaries());
32
+ save(report, options) {
33
+ return this.request('POST', '', {
34
+ id: report.id, name: report.name, description: report.description,
35
+ category: report.category, version: report.version,
36
+ isPublished: report.isPublished ?? false, definition: report,
37
+ ...(options?.createOnly ? { createOnly: true } : {}),
38
+ ...(options?.expectedVersion !== undefined ? { expectedVersion: options.expectedVersion } : {}),
39
+ });
65
40
  }
66
- delete(reportId) {
67
- const baseUrl = this.config?.apiBaseUrl;
68
- if (baseUrl && this.http) {
69
- return this.http
70
- .delete(`${baseUrl}/reports/${encodeURIComponent(reportId)}`)
71
- .pipe(catchError((err) => {
72
- console.warn(`[HttpReportPersistenceAdapter] Failed to delete remote report ${reportId}:`, err);
73
- this.mockStore.delete(reportId);
74
- return of(undefined);
75
- }));
76
- }
77
- this.mockStore.delete(reportId);
78
- return of(undefined);
41
+ list() {
42
+ return this.request('GET', '');
79
43
  }
80
- publish(reportId, version) {
81
- const baseUrl = this.config?.apiBaseUrl;
82
- if (baseUrl && this.http) {
83
- return this.http
84
- .post(`${baseUrl}/reports/${encodeURIComponent(reportId)}/publish`, { version })
85
- .pipe(catchError((err) => {
86
- console.warn(`[HttpReportPersistenceAdapter] Failed to publish remote report ${reportId}:`, err);
87
- const r = this.mockStore.get(reportId);
88
- if (r) {
89
- r.isPublished = true;
90
- r.version = version;
91
- }
92
- return of(undefined);
93
- }));
94
- }
95
- const r = this.mockStore.get(reportId);
96
- if (r) {
97
- r.isPublished = true;
98
- r.version = version;
99
- }
100
- return of(undefined);
44
+ delete(id) {
45
+ return this.request('DELETE', '/' + encodeURIComponent(id));
101
46
  }
102
- getMockReport(id) {
103
- const existing = this.mockStore.get(id);
104
- if (existing)
105
- return existing;
106
- const fallback = {
107
- id,
108
- name: 'Default Report',
109
- schemaVersion: 1,
110
- version: 1,
111
- isPublished: true,
112
- components: [],
113
- parameters: [],
114
- dataSources: [],
115
- layout: {
116
- columns: 12,
117
- gap: 16,
118
- padding: 16,
119
- },
120
- };
121
- this.mockStore.set(id, fallback);
122
- return fallback;
47
+ publish(id, version) {
48
+ return this.request('POST', '/' + encodeURIComponent(id) + '/publish', { version });
123
49
  }
124
- getMockSummaries() {
125
- return Array.from(this.mockStore.values()).map((r) => ({
126
- id: r.id,
127
- name: r.name,
128
- description: r.description,
129
- category: r.category,
130
- version: r.version,
131
- isPublished: Boolean(r.isPublished),
132
- updatedAt: r.updatedAt,
50
+ request(method, path, body) {
51
+ if (!this.http || !this.config?.apiBaseUrl) {
52
+ return throwError(() => new Error('[bways-report] HTTP persistence requires HttpClient and apiBaseUrl. Use withLocalStorage() for offline storage.'));
53
+ }
54
+ return this.http.request(method, this.config.apiBaseUrl.replace(/\/+$/, '') + '/reports' + path, { body, headers: this.headers }).pipe(catchError(err => {
55
+ const message = err?.error?.message || err?.message || 'Report persistence failed';
56
+ return throwError(() => new Error(Array.isArray(message) ? message.join(', ') : message));
133
57
  }));
134
58
  }
135
- seedDefaultMockReports() {
136
- const seed = {
137
- id: 'sales-summary',
138
- name: 'Sales Register & Analysis',
139
- description: 'Comprehensive sales performance and invoice tracking',
140
- category: 'Sales',
141
- schemaVersion: 1,
142
- version: 1,
143
- isPublished: true,
144
- parameters: [],
145
- dataSources: [
146
- {
147
- id: 'ds-sales',
148
- name: 'Sales Register SP',
149
- endpoint: 'usp_GetSalesRegister',
150
- method: 'STORED_PROCEDURE',
151
- },
152
- ],
153
- components: [
154
- {
155
- id: 'cmp-from-date',
156
- key: 'fromDate',
157
- type: 'date',
158
- properties: { label: 'From Date', placeholder: 'dd/MM/yyyy' },
159
- validation: {},
160
- },
161
- {
162
- id: 'cmp-to-date',
163
- key: 'toDate',
164
- type: 'date',
165
- properties: { label: 'To Date', placeholder: 'dd/MM/yyyy' },
166
- validation: {},
167
- },
168
- {
169
- id: 'cmp-customer',
170
- key: 'customerId',
171
- type: 'dropdown',
172
- properties: {
173
- label: 'Customer',
174
- sourceType: 'table',
175
- entityName: 'Customers',
176
- valueField: 'customerId',
177
- displayField: 'customerName',
178
- },
179
- validation: {},
180
- },
181
- {
182
- id: 'cmp-grid',
183
- key: 'salesGrid',
184
- type: 'grid',
185
- properties: {
186
- dataSourceId: 'ds-sales',
187
- pageSize: 25,
188
- enableSorting: true,
189
- enableFiltering: true,
190
- columns: [
191
- { field: 'invoiceNo', headerText: 'Invoice #' },
192
- { field: 'date', headerText: 'Date' },
193
- { field: 'customer', headerText: 'Customer' },
194
- { field: 'amount', headerText: 'Amount', format: 'currency' },
195
- { field: 'status', headerText: 'Status' },
196
- ],
197
- },
198
- validation: {},
199
- },
200
- ],
201
- layout: {
202
- columns: 12,
203
- gap: 16,
204
- padding: 16,
205
- },
206
- };
207
- this.mockStore.set(seed.id, seed);
208
- }
209
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportPersistenceAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
59
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportPersistenceAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
210
60
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportPersistenceAdapter });
211
61
  }
212
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportPersistenceAdapter, decorators: [{
213
63
  type: Injectable
214
- }], ctorParameters: () => [] });
215
- /** Convenience alias */
64
+ }] });
216
65
  export const HttpPersistenceAdapter = HttpReportPersistenceAdapter;
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1wZXJzaXN0ZW5jZS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvaHR0cC1wZXJzaXN0ZW5jZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUs1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFHNUU7Ozs7R0FJRztBQUVILE1BQU0sT0FBTyw0QkFBNkIsU0FBUSx3QkFBd0I7SUFDdkQsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5QyxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFdEQsU0FBUyxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO0lBRWpFO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxDQUFDLFFBQWdCO1FBQ25CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDO1FBQ3hDLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QixPQUFPLElBQUks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LE9BQU8sRUFBRSxFQUFFO2FBQ1o7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO3dHQXpOVSw0QkFBNEI7NEdBQTVCLDRCQUE0Qjs7NEZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVTs7QUE2Tlgsd0JBQXdCO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBSZXBvcnREZWZpbml0aW9uLFxuICBSZXBvcnRTdW1tYXJ5LFxufSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSBmcm9tICcuLi9jb250cmFjdHMvcmVwb3J0LXBlcnNpc3RlbmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFNhdmVSZXBvcnRSZXF1ZXN0RHRvIH0gZnJvbSAnLi4vY29udHJhY3RzL2FwaS1kdG9zJztcblxuLyoqXG4gKiBCdWlsdC1pbiBIVFRQIGFkYXB0ZXIgZm9yIHJlcG9ydCBkZWZpbml0aW9ucyBwZXJzaXN0ZW5jZS5cbiAqIENvbm5lY3RzIHRvIE5lc3RKUyBgL2FwaS9yZXBvcnRpbmcvcmVwb3J0c2AgZW5kcG9pbnRzLlxuICogSW5jbHVkZXMgaW4tbWVtb3J5IG1vY2sgZmFsbGJhY2sgd2hlbiB0aGUgcmVtb3RlIGJhY2tlbmQgaXMgdW5yZWFjaGFibGUuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIGV4dGVuZHMgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb2NrU3RvcmUgPSBuZXcgTWFwPHN0cmluZywgUmVwb3J0RGVmaW5pdGlvbj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2VlZERlZmF1bHRNb2NrUmVwb3J0cygpO1xuICB9XG5cbiAgbG9hZChyZXBvcnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZXBvcnREZWZpbml0aW9uPiB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnPy5hcGlCYXNlVXJsO1xuICAgIGlmIChiYXNlVXJsICYmIHRoaXMuaHR0cCkge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAuZ2V0PFJlcG9ydERlZmluaXRpb24+KGAke2Jhc2VVcmx9L3JlcG9ydHMvJHtlbmNvZGVVUklDb21wb25lbnQocmVwb3J0SWQpfWApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbSHR0cFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcl0gRmFpbGVkIHRvIGxvYWQgcmVtb3RlIHJlcG9ydCAke3JlcG9ydElkfTpgLCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuZ2V0TW9ja1JlcG9ydChyZXBvcnRJZCkpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvZih0aGlzLmdldE1vY2tSZXBvcnQocmVwb3J0SWQpKTtcbiAgfVxuXG4gIHNhdmUocmVwb3J0OiBSZXBvcnREZWZpbml0aW9uKTogT2JzZXJ2YWJsZTxSZXBvcnREZWZpbml0aW9uPiB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnPy5hcGlCYXNlVXJsO1xuICAgIGlmIChiYXNlVXJsICYmIHRoaXMuaHR0cCkge1xuICAgICAgY29uc3QgcGF5bG9hZDogU2F2ZVJlcG9ydFJlcXVlc3REdG8gPSB7XG4gICAgICAgIGlkOiByZXBvcnQuaWQsXG4gICAgICAgIG5hbWU6IHJlcG9ydC5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogcmVwb3J0LmRlc2NyaXB0aW9uLFxuICAgICAgICBjYXRlZ29yeTogcmVwb3J0LmNhdGVnb3J5LFxuICAgICAgICB2ZXJzaW9uOiByZXBvcnQudmVyc2lvbixcbiAgICAgICAgaXNQdWJsaXNoZWQ6IHJlcG9ydC5pc1B1Ymxpc2hlZCA/PyBmYWxzZSxcbiAgICAgICAgZGVmaW5pdGlvbjogcmVwb3J0LFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAucG9zdDxSZXBvcnREZWZpbml0aW9uPihgJHtiYXNlVXJsfS9yZXBvcnRzYCwgcGF5bG9hZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyXSBGYWlsZWQgdG8gc2F2ZSByZW1vdGUgcmVwb3J0LCBzdG9yaW5nIGluIG1vY2s6JywgZXJyKTtcbiAgICAgICAgICAgIHRoaXMubW9ja1N0b3JlLnNldChyZXBvcnQuaWQsIHsgLi4ucmVwb3J0LCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KTtcbiAgICAgICAgICAgIHJldHVybiBvZihyZXBvcnQpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5tb2NrU3RvcmUuc2V0KHJlcG9ydC5pZCwgeyAuLi5yZXBvcnQsIHVwZGF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pO1xuICAgIHJldHVybiBvZihyZXBvcnQpO1xuICB9XG5cbiAgbGlzdCgpOiBPYnNlcnZhYmxlPFJlcG9ydFN1bW1hcnlbXT4ge1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZz8uYXBpQmFzZVVybDtcbiAgICBpZiAoYmFzZVVybCAmJiB0aGlzLmh0dHApIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFJlcG9ydFN1bW1hcnlbXT4oYCR7YmFzZVVybH0vcmVwb3J0c2ApLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW0h0dHBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXJdIEZhaWxlZCB0byBsaXN0IHJlbW90ZSByZXBvcnRzLCByZXR1cm5pbmcgbW9jayBsaXN0OicsIGVycik7XG4gICAgICAgICAgcmV0dXJuIG9mKHRoaXMuZ2V0TW9ja1N1bW1hcmllcygpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvZih0aGlzLmdldE1vY2tTdW1tYXJpZXMoKSk7XG4gIH1cblxuICBkZWxldGUocmVwb3J0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZz8uYXBpQmFzZVVybDtcbiAgICBpZiAoYmFzZVVybCAmJiB0aGlzLmh0dHApIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgLmRlbGV0ZTx2b2lkPihgJHtiYXNlVXJsfS9yZXBvcnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlcG9ydElkKX1gKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW0h0dHBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXJdIEZhaWxlZCB0byBkZWxldGUgcmVtb3RlIHJlcG9ydCAke3JlcG9ydElkfTpgLCBlcnIpO1xuICAgICAgICAgICAgdGhpcy5tb2NrU3RvcmUuZGVsZXRlKHJlcG9ydElkKTtcbiAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHRoaXMubW9ja1N0b3JlLmRlbGV0ZShyZXBvcnRJZCk7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gIH1cblxuICBwdWJsaXNoKHJlcG9ydElkOiBzdHJpbmcsIHZlcnNpb246IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZz8uYXBpQmFzZVVybDtcbiAgICBpZiAoYmFzZVVybCAmJiB0aGlzLmh0dHApIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgLnBvc3Q8dm9pZD4oYCR7YmFzZVVybH0vcmVwb3J0cy8ke2VuY29kZVVSSUNvbXBvbmVudChyZXBvcnRJZCl9L3B1Ymxpc2hgLCB7IHZlcnNpb24gfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFtIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyXSBGYWlsZWQgdG8gcHVibGlzaCByZW1vdGUgcmVwb3J0ICR7cmVwb3J0SWR9OmAsIGVycik7XG4gICAgICAgICAgICBjb25zdCByID0gdGhpcy5tb2NrU3RvcmUuZ2V0KHJlcG9ydElkKTtcbiAgICAgICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgICAgIHIuaXNQdWJsaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICByLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgciA9IHRoaXMubW9ja1N0b3JlLmdldChyZXBvcnRJZCk7XG4gICAgaWYgKHIpIHtcbiAgICAgIHIuaXNQdWJsaXNoZWQgPSB0cnVlO1xuICAgICAgci52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIGdldE1vY2tSZXBvcnQoaWQ6IHN0cmluZyk6IFJlcG9ydERlZmluaXRpb24ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5tb2NrU3RvcmUuZ2V0KGlkKTtcbiAgICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblxuICAgIGNvbnN0IGZhbGxiYWNrOiBSZXBvcnREZWZpbml0aW9uID0ge1xuICAgICAgaWQsXG4gICAgICBuYW1lOiAnRGVmYXVsdCBSZXBvcnQnLFxuICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICBpc1B1Ymxpc2hlZDogdHJ1ZSxcbiAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgcGFyYW1ldGVyczogW10sXG4gICAgICBkYXRhU291cmNlczogW10sXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgY29sdW1uczogMTIsXG4gICAgICAgIGdhcDogMTYsXG4gICAgICAgIHBhZGRpbmc6IDE2LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubW9ja1N0b3JlLnNldChpZCwgZmFsbGJhY2spO1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9ja1N1bW1hcmllcygpOiBSZXBvcnRTdW1tYXJ5W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMubW9ja1N0b3JlLnZhbHVlcygpKS5tYXAoKHIpID0+ICh7XG4gICAgICBpZDogci5pZCxcbiAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiByLmRlc2NyaXB0aW9uLFxuICAgICAgY2F0ZWdvcnk6IHIuY2F0ZWdvcnksXG4gICAgICB2ZXJzaW9uOiByLnZlcnNpb24sXG4gICAgICBpc1B1Ymxpc2hlZDogQm9vbGVhbihyLmlzUHVibGlzaGVkKSxcbiAgICAgIHVwZGF0ZWRBdDogci51cGRhdGVkQXQsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWVkRGVmYXVsdE1vY2tSZXBvcnRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlZWQ6IFJlcG9ydERlZmluaXRpb24gPSB7XG4gICAgICBpZDogJ3NhbGVzLXN1bW1hcnknLFxuICAgICAgbmFtZTogJ1NhbGVzIFJlZ2lzdGVyICYgQW5hbHlzaXMnLFxuICAgICAgZGVzY3JpcHRpb246ICdDb21wcmVoZW5zaXZlIHNhbGVzIHBlcmZvcm1hbmNlIGFuZCBpbnZvaWNlIHRyYWNraW5nJyxcbiAgICAgIGNhdGVnb3J5OiAnU2FsZXMnLFxuICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICBpc1B1Ymxpc2hlZDogdHJ1ZSxcbiAgICAgIHBhcmFtZXRlcnM6IFtdLFxuICAgICAgZGF0YVNvdXJjZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnZHMtc2FsZXMnLFxuICAgICAgICAgIG5hbWU6ICdTYWxlcyBSZWdpc3RlciBTUCcsXG4gICAgICAgICAgZW5kcG9pbnQ6ICd1c3BfR2V0U2FsZXNSZWdpc3RlcicsXG4gICAgICAgICAgbWV0aG9kOiAnU1RPUkVEX1BST0NFRFVSRScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY29tcG9uZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdjbXAtZnJvbS1kYXRlJyxcbiAgICAgICAgICBrZXk6ICdmcm9tRGF0ZScsXG4gICAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHsgbGFiZWw6ICdGcm9tIERhdGUnLCBwbGFjZWhvbGRlcjogJ2RkL01NL3l5eXknIH0sXG4gICAgICAgICAgdmFsaWRhdGlvbjoge30sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2NtcC10by1kYXRlJyxcbiAgICAgICAgICBrZXk6ICd0b0RhdGUnLFxuICAgICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7IGxhYmVsOiAnVG8gRGF0ZScsIHBsYWNlaG9sZGVyOiAnZGQvTU0veXl5eScgfSxcbiAgICAgICAgICB2YWxpZGF0aW9uOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnY21wLWN1c3RvbWVyJyxcbiAgICAgICAgICBrZXk6ICdjdXN0b21lcklkJyxcbiAgICAgICAgICB0eXBlOiAnZHJvcGRvd24nLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGxhYmVsOiAnQ3VzdG9tZXInLFxuICAgICAgICAgICAgc291cmNlVHlwZTogJ3RhYmxlJyxcbiAgICAgICAgICAgIGVudGl0eU5hbWU6ICdDdXN0b21lcnMnLFxuICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2N1c3RvbWVySWQnLFxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAnY3VzdG9tZXJOYW1lJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHZhbGlkYXRpb246IHt9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdjbXAtZ3JpZCcsXG4gICAgICAgICAga2V5OiAnc2FsZXNHcmlkJyxcbiAgICAgICAgICB0eXBlOiAnZ3JpZCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZGF0YVNvdXJjZUlkOiAnZHMtc2FsZXMnLFxuICAgICAgICAgICAgcGFnZVNpemU6IDI1LFxuICAgICAgICAgICAgZW5hYmxlU29ydGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGVuYWJsZUZpbHRlcmluZzogdHJ1ZSxcbiAgICAgICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICAgICAgeyBmaWVsZDogJ2ludm9pY2VObycsIGhlYWRlclRleHQ6ICdJbnZvaWNlICMnIH0sXG4gICAgICAgICAgICAgIHsgZmllbGQ6ICdkYXRlJywgaGVhZGVyVGV4dDogJ0RhdGUnIH0sXG4gICAgICAgICAgICAgIHsgZmllbGQ6ICdjdXN0b21lcicsIGhlYWRlclRleHQ6ICdDdXN0b21lcicgfSxcbiAgICAgICAgICAgICAgeyBmaWVsZDogJ2Ftb3VudCcsIGhlYWRlclRleHQ6ICdBbW91bnQnLCBmb3JtYXQ6ICdjdXJyZW5jeScgfSxcbiAgICAgICAgICAgICAgeyBmaWVsZDogJ3N0YXR1cycsIGhlYWRlclRleHQ6ICdTdGF0dXMnIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmFsaWRhdGlvbjoge30sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIGNvbHVtbnM6IDEyLFxuICAgICAgICBnYXA6IDE2LFxuICAgICAgICBwYWRkaW5nOiAxNixcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1vY2tTdG9yZS5zZXQoc2VlZC5pZCwgc2VlZCk7XG4gIH1cbn1cblxuLyoqIENvbnZlbmllbmNlIGFsaWFzICovXG5leHBvcnQgY29uc3QgSHR0cFBlcnNpc3RlbmNlQWRhcHRlciA9IEh0dHBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXI7XG4iXX0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1wZXJzaXN0ZW5jZS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvYWRhcHRlcnMvaHR0cC1wZXJzaXN0ZW5jZS5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQXFDLE1BQU0sMENBQTBDLENBQUM7QUFDdkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7O0FBRTVFLGtGQUFrRjtBQUVsRixNQUFNLE9BQU8sNEJBQTZCLFNBQVEsd0JBQXdCO0lBQ3ZELE9BQU8sR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRixJQUFZLE9BQU8sS0FBSyxPQUFPLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckYsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENB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LE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVwb3J0SWRBdmFpbGFiaWxpdHksIHJlcG9ydElkSW5zcGVjdGlvbiB9IGZyb20gJy4vcmVwb3J0LWlkLWF2YWlsYWJpbGl0eSc7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyByZXBvcnRTZXNzaW9uSGVhZGVycyB9IGZyb20gJy4vc2Vzc2lvbi1oZWFkZXJzJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uLCBSZXBvcnRTdW1tYXJ5IH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLCBSZXBvcnRTYXZlT3B0aW9ucywgUmVwb3J0SWRTdGF0dXMgfSBmcm9tICcuLi9jb250cmFjdHMvcmVwb3J0LXBlcnNpc3RlbmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcblxuLyoqIEhUVFAtb25seSBwZXJzaXN0ZW5jZS4gVXNlIHdpdGhMb2NhbFN0b3JhZ2UoKSBleHBsaWNpdGx5IGZvciBvZmZsaW5lIGRlbW9zLiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEh0dHBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgZXh0ZW5kcyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIGdldCBoZWFkZXJzKCkgeyByZXR1cm4gcmVwb3J0U2Vzc2lvbkhlYWRlcnModGhpcy5zZXNzaW9uPy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKSA/PyB7fSk7IH1cbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgb3ZlcnJpZGUgY2hlY2tJZChyZXBvcnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmh0dHAgfHwgIXRoaXMuY29uZmlnPy5hcGlCYXNlVXJsKSByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ0hUVFAgcmVwb3J0IHN0b3JhZ2UgaXMgbm90IGNvbmZpZ3VyZWQuJykpO1xuICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmFwaUJhc2VVcmwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnL3JlcG9ydHMvJyArIGVuY29kZVVSSUNvbXBvbmVudChyZXBvcnRJZCkgKyAnL2F2YWlsYWJpbGl0eSc7XG4gICAgcmV0dXJuIHJlcG9ydElkQXZhaWxhYmlsaXR5KHRoaXMuaHR0cCwgdXJsLCB0aGlzLmhlYWRlcnMsICgpID0+IHN1cGVyLmNoZWNrSWQocmVwb3J0SWQpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGluc3BlY3RJZChyZXBvcnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZXBvcnRJZFN0YXR1cz4ge1xuICAgIGlmICghdGhpcy5odHRwIHx8ICF0aGlzLmNvbmZpZz8uYXBpQmFzZVVybCkgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdIVFRQIHJlcG9ydCBzdG9yYWdlIGlzIG5vdCBjb25maWd1cmVkLicpKTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmNvbmZpZy5hcGlCYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy9yZXBvcnRzLycgKyBlbmNvZGVVUklDb21wb25lbnQocmVwb3J0SWQpICsgJy9hdmFpbGFiaWxpdHknO1xuICAgIHJldHVybiByZXBvcnRJZEluc3BlY3Rpb24odGhpcy5odHRwLCB1cmwsIHRoaXMuaGVhZGVycywgKCkgPT4gc3VwZXIuaW5zcGVjdElkKHJlcG9ydElkKSk7XG4gIH1cblxuICBsb2FkKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJlcG9ydERlZmluaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdHRVQnLCAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoaWQpKTtcbiAgfVxuXG4gIHNhdmUocmVwb3J0OiBSZXBvcnREZWZpbml0aW9uLCBvcHRpb25zPzogUmVwb3J0U2F2ZU9wdGlvbnMpOiBPYnNlcnZhYmxlPFJlcG9ydERlZmluaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQT1NUJywgJycsIHtcbiAgICAgIGlkOiByZXBvcnQuaWQsIG5hbWU6IHJlcG9ydC5uYW1lLCBkZXNjcmlwdGlvbjogcmVwb3J0LmRlc2NyaXB0aW9uLFxuICAgICAgY2F0ZWdvcnk6IHJlcG9ydC5jYXRlZ29yeSwgdmVyc2lvbjogcmVwb3J0LnZlcnNpb24sXG4gICAgICBpc1B1Ymxpc2hlZDogcmVwb3J0LmlzUHVibGlzaGVkID8/IGZhbHNlLCBkZWZpbml0aW9uOiByZXBvcnQsXG4gICAgICAuLi4ob3B0aW9ucz8uY3JlYXRlT25seSA/IHsgY3JlYXRlT25seTogdHJ1ZSB9IDoge30pLFxuICAgICAgLi4uKG9wdGlvbnM/LmV4cGVjdGVkVmVyc2lvbiAhPT0gdW5kZWZpbmVkID8geyBleHBlY3RlZFZlcnNpb246IG9wdGlvbnMuZXhwZWN0ZWRWZXJzaW9uIH0gOiB7fSksXG4gICAgfSk7XG4gIH1cblxuICBsaXN0KCk6IE9ic2VydmFibGU8UmVwb3J0U3VtbWFyeVtdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnR0VUJywgJycpO1xuICB9XG5cbiAgZGVsZXRlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdERUxFVEUnLCAnLycgKyBlbmNvZGVVUklDb21wb25lbnQoaWQpKTtcbiAgfVxuXG4gIHB1Ymxpc2goaWQ6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUE9TVCcsICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChpZCkgKyAnL3B1Ymxpc2gnLCB7IHZlcnNpb24gfSk7XG4gIH1cblxuICBwcml2YXRlIHJlcXVlc3Q8VD4obWV0aG9kOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgYm9keT86IHVua25vd24pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBpZiAoIXRoaXMuaHR0cCB8fCAhdGhpcy5jb25maWc/LmFwaUJhc2VVcmwpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignW2J3YXlzLXJlcG9ydF0gSFRUUCBwZXJzaXN0ZW5jZSByZXF1aXJlcyBIdHRwQ2xpZW50IGFuZCBhcGlCYXNlVXJsLiBVc2Ugd2l0aExvY2FsU3RvcmFnZSgpIGZvciBvZmZsaW5lIHN0b3JhZ2UuJykpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3Q8VD4obWV0aG9kLCB0aGlzLmNvbmZpZy5hcGlCYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpICsgJy9yZXBvcnRzJyArIHBhdGgsIHsgYm9keSwgaGVhZGVyczogdGhpcy5oZWFkZXJzIH0pLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnI/LmVycm9yPy5tZXNzYWdlIHx8IGVycj8ubWVzc2FnZSB8fCAnUmVwb3J0IHBlcnNpc3RlbmNlIGZhaWxlZCc7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihBcnJheS5pc0FycmF5KG1lc3NhZ2UpID8gbWVzc2FnZS5qb2luKCcsICcpIDogbWVzc2FnZSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBIdHRwUGVyc2lzdGVuY2VBZGFwdGVyID0gSHR0cFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlcjtcbiJdfQ==
@@ -1,114 +1,66 @@
1
+ import { ReportSessionContextService } from '../../core/services/report-session-context.service';
2
+ import { reportSessionHeaders } from './session-headers';
1
3
  import { inject, Injectable } from '@angular/core';
2
4
  import { HttpClient } from '@angular/common/http';
3
- import { of } from 'rxjs';
5
+ import { of, throwError } from 'rxjs';
4
6
  import { catchError } from 'rxjs/operators';
5
7
  import { ReportSchemaDiscoveryAdapter, } from '../contracts/schema-discovery.contract';
6
8
  import { REPORTING_CONFIG } from '../../core/tokens/reporting-config.token';
7
9
  import * as i0 from "@angular/core";
8
10
  /**
9
11
  * Built-in HTTP adapter for backend database schema discovery.
10
- * Connects to NestJS / REST backend endpoints, with fallback mock schema for development.
12
+ * Connects to NestJS / REST backend endpoints, without fabricating metadata when requests fail.
11
13
  */
12
14
  export class HttpReportSchemaDiscoveryAdapter extends ReportSchemaDiscoveryAdapter {
15
+ session = inject(ReportSessionContextService, { optional: true });
16
+ get headers() { return reportSessionHeaders(this.session?.getCurrentSessionContext() ?? {}); }
13
17
  http = inject(HttpClient, { optional: true });
14
18
  config = inject(REPORTING_CONFIG, { optional: true });
15
- mockEntities = [
16
- { name: 'Customers', schema: 'dbo', type: 'table', friendlyName: 'Customer Directory', category: 'Sales & CRM', description: 'Active customer accounts and profiles' },
17
- { name: 'Branches', schema: 'dbo', type: 'table', friendlyName: 'Branch Locations', category: 'Master Data', description: 'Company branches and regional offices' },
18
- { name: 'Products', schema: 'dbo', type: 'table', friendlyName: 'Product Catalog', category: 'Inventory', description: 'Product catalog with category codes' },
19
- { name: 'PaymentMethods', schema: 'dbo', type: 'table', friendlyName: 'Payment Methods', category: 'Finance', description: 'Available payment modes' },
20
- { name: 'usp_GetCustomerList', schema: 'dbo', type: 'stored_procedure', friendlyName: 'Customer Directory (SP)', category: 'Sales & CRM', description: 'Returns filtered customers by branch' },
21
- { name: 'usp_GetBranchLookup', schema: 'dbo', type: 'stored_procedure', friendlyName: 'Active Branches (SP)', category: 'Master Data', description: 'Returns active branches' },
22
- ];
23
- mockColumns = {
24
- Customers: [
25
- { field: 'customerId', label: 'Customer ID', dataType: 'number', nullable: false },
26
- { field: 'customerName', label: 'Customer Name', dataType: 'string', nullable: false },
27
- { field: 'email', label: 'Email Address', dataType: 'string', nullable: true },
28
- { field: 'branchId', label: 'Branch ID', dataType: 'number', nullable: true },
29
- { field: 'isActive', label: 'Active Status', dataType: 'boolean', nullable: false },
30
- ],
31
- Branches: [
32
- { field: 'branchId', label: 'Branch ID', dataType: 'number', nullable: false },
33
- { field: 'branchName', label: 'Branch Name', dataType: 'string', nullable: false },
34
- { field: 'region', label: 'Region', dataType: 'string', nullable: true },
35
- ],
36
- Products: [
37
- { field: 'productId', label: 'Product ID', dataType: 'number', nullable: false },
38
- { field: 'productName', label: 'Product Name', dataType: 'string', nullable: false },
39
- { field: 'category', label: 'Category', dataType: 'string', nullable: true },
40
- { field: 'unitPrice', label: 'Unit Price', dataType: 'number', nullable: false },
41
- ],
42
- PaymentMethods: [
43
- { field: 'code', label: 'Payment Code', dataType: 'string', nullable: false },
44
- { field: 'title', label: 'Method Title', dataType: 'string', nullable: false },
45
- ],
46
- usp_GetCustomerList: [
47
- { field: 'id', label: 'ID', dataType: 'number', nullable: false },
48
- { field: 'name', label: 'Customer Name', dataType: 'string', nullable: false },
49
- { field: 'branch', label: 'Branch Code', dataType: 'string', nullable: true },
50
- ],
51
- usp_GetBranchLookup: [
52
- { field: 'id', label: 'Branch ID', dataType: 'number', nullable: false },
53
- { field: 'name', label: 'Branch Name', dataType: 'string', nullable: false },
54
- ],
55
- };
56
- mockParameters = {
57
- usp_GetCustomerList: [
58
- { name: '@BranchId', friendlyLabel: 'Branch Location', dataType: 'number', sqlType: 'INT', required: false, description: 'Filter customers belonging to this branch' },
59
- { name: '@ActiveOnly', friendlyLabel: 'Active Only', dataType: 'boolean', sqlType: 'BIT', required: false, defaultValue: true, description: 'Only show active customers' },
60
- ],
61
- usp_GetBranchLookup: [
62
- { name: '@Region', friendlyLabel: 'Geographical Region', dataType: 'string', sqlType: 'VARCHAR(50)', required: false, description: 'Filter by geographical region' },
63
- ],
64
- };
65
19
  getEntities(types) {
66
20
  const baseUrl = this.config?.apiBaseUrl;
67
21
  if (baseUrl && this.http) {
68
22
  const typeParam = types ? types.join(',') : '';
69
23
  return this.http
70
24
  .get(`${baseUrl}/schema/entities`, {
25
+ headers: this.headers,
71
26
  params: typeParam ? { types: typeParam } : {},
72
27
  })
73
28
  .pipe(catchError((err) => {
74
- console.warn('[HttpSchemaDiscovery] API request failed, falling back to mock schema:', err);
75
- return of(this.filterMockEntities(types));
29
+ console.warn('[HttpSchemaDiscovery] Schema discovery request failed:', err);
30
+ return throwError(() => new Error('[bways-report] Schema discovery requires a reachable HTTP backend.'));
76
31
  }));
77
32
  }
78
- return of(this.filterMockEntities(types));
33
+ return of([]);
79
34
  }
80
35
  getColumns(entityName, schema = 'dbo', type) {
81
36
  const baseUrl = this.config?.apiBaseUrl;
82
37
  if (baseUrl && this.http) {
83
38
  return this.http
84
39
  .get(`${baseUrl}/schema/columns`, {
40
+ headers: this.headers,
85
41
  params: { entityName, schema, ...(type ? { type } : {}) },
86
42
  })
87
43
  .pipe(catchError((err) => {
88
44
  console.warn(`[HttpSchemaDiscovery] Failed to get columns for ${entityName}:`, err);
89
- return of(this.mockColumns[entityName] ?? []);
45
+ return throwError(() => new Error('[bways-report] Column discovery failed or is not configured.'));
90
46
  }));
91
47
  }
92
- return of(this.mockColumns[entityName] ?? []);
48
+ return throwError(() => new Error('[bways-report] Column discovery failed or is not configured.'));
93
49
  }
94
50
  getParameters(entityName, schema = 'dbo') {
95
51
  const baseUrl = this.config?.apiBaseUrl;
96
52
  if (baseUrl && this.http) {
97
53
  return this.http
98
54
  .get(`${baseUrl}/schema/parameters`, {
55
+ headers: this.headers,
99
56
  params: { entityName, schema },
100
57
  })
101
58
  .pipe(catchError((err) => {
102
59
  console.warn(`[HttpSchemaDiscovery] Failed to get parameters for ${entityName}:`, err);
103
- return of(this.mockParameters[entityName] ?? []);
60
+ return throwError(() => new Error('[bways-report] Parameter discovery failed or is not configured.'));
104
61
  }));
105
62
  }
106
- return of(this.mockParameters[entityName] ?? []);
107
- }
108
- filterMockEntities(types) {
109
- if (!types || types.length === 0)
110
- return this.mockEntities;
111
- return this.mockEntities.filter((e) => types.includes(e.type));
63
+ return throwError(() => new Error('[bways-report] Parameter discovery failed or is not configured.'));
112
64
  }
113
65
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportSchemaDiscoveryAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
114
66
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportSchemaDiscoveryAdapter });
@@ -118,4 +70,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
118
70
  }] });
119
71
  /** Convenience alias */
120
72
  export const HttpSchemaDiscoveryAdapter = HttpReportSchemaDiscoveryAdapter;
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zY2hlbWEtZGlzY292ZXJ5LmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9odHRwLXNjaGVtYS1kaXNjb3ZlcnkuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUtMLDRCQUE0QixHQUM3QixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOztBQUU1RTs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sZ0NBQWlDLFNBQVEsNEJBQTRCO0lBQy9ELElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXRELFlBQVksR0FBNkI7UUFDeEQsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsdUNBQXVDLEVBQUU7UUFDdEssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsdUNBQXVDLEVBQUU7UUFDbkssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUscUNBQXFDLEVBQUU7UUFDOUosRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSx5QkFBeUIsRUFBRTtRQUN0SixFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsc0NBQXNDLEVBQUU7UUFDL0wsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFO0tBQ2hMLENBQUM7SUFFZSxXQUFXLEdBQTJDO1FBQ3JFLFNBQVMsRUFBRTtZQUNULEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtZQUNsRixFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDdEYsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQzlFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUM3RSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7U0FDcEY7UUFDRCxRQUFRLEVBQUU7WUFDUixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDOUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO1lBQ2xGLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtTQUN6RTtRQUNELFFBQVEsRUFBRTtZQUNSLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtZQUNoRixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7WUFDcEYsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQzVFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtTQUNqRjtRQUNELGNBQWMsRUFB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QUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO2FBQy9CLENBQUM7aUJBQ0QsSUFBSSxDQUNILFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxVQUFVLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdkYsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ04sQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQTRCO1FBQ3JELElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQzt3R0FwSFUsZ0NBQWdDOzRHQUFoQyxnQ0FBZ0M7OzRGQUFoQyxnQ0FBZ0M7a0JBRDVDLFVBQVU7O0FBd0hYLHdCQUF3QjtBQUN4QixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxnQ0FBZ0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGF0YWJhc2VFbnRpdHlNZXRhZGF0YSxcbiAgRGF0YWJhc2VFbnRpdHlUeXBlLFxuICBFbnRpdHlDb2x1bW5NZXRhZGF0YSxcbiAgUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGEsXG4gIFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG59IGZyb20gJy4uL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcblxuLyoqXG4gKiBCdWlsdC1pbiBIVFRQIGFkYXB0ZXIgZm9yIGJhY2tlbmQgZGF0YWJhc2Ugc2NoZW1hIGRpc2NvdmVyeS5cbiAqIENvbm5lY3RzIHRvIE5lc3RKUyAvIFJFU1QgYmFja2VuZCBlbmRwb2ludHMsIHdpdGggZmFsbGJhY2sgbW9jayBzY2hlbWEgZm9yIGRldmVsb3BtZW50LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIgZXh0ZW5kcyBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb2NrRW50aXRpZXM6IERhdGFiYXNlRW50aXR5TWV0YWRhdGFbXSA9IFtcbiAgICB7IG5hbWU6ICdDdXN0b21lcnMnLCBzY2hlbWE6ICdkYm8nLCB0eXBlOiAndGFibGUnLCBmcmllbmRseU5hbWU6ICdDdXN0b21lciBEaXJlY3RvcnknLCBjYXRlZ29yeTogJ1NhbGVzICYgQ1JNJywgZGVzY3JpcHRpb246ICdBY3RpdmUgY3VzdG9tZXIgYWNjb3VudHMgYW5kIHByb2ZpbGVzJyB9LFxuICAgIHsgbmFtZTogJ0JyYW5jaGVzJywgc2NoZW1hOiAnZGJvJywgdHlwZTogJ3RhYmxlJywgZnJpZW5kbHlOYW1lOiAnQnJhbmNoIExvY2F0aW9ucycsIGNhdGVnb3J5OiAnTWFzdGVyIERhdGEnLCBkZXNjcmlwdGlvbjogJ0NvbXBhbnkgYnJhbmNoZXMgYW5kIHJlZ2lvbmFsIG9mZmljZXMnIH0sXG4gICAgeyBuYW1lOiAnUHJvZHVjdHMnLCBzY2hlbWE6ICdkYm8nLCB0eXBlOiAndGFibGUnLCBmcmllbmRseU5hbWU6ICdQcm9kdWN0IENhdGFsb2cnLCBjYXRlZ29yeTogJ0ludmVudG9yeScsIGRlc2NyaXB0aW9uOiAnUHJvZHVjdCBjYXRhbG9nIHdpdGggY2F0ZWdvcnkgY29kZXMnIH0sXG4gICAgeyBuYW1lOiAnUGF5bWVudE1ldGhvZHMnLCBzY2hlbWE6ICdkYm8nLCB0eXBlOiAndGFibGUnLCBmcmllbmRseU5hbWU6ICdQYXltZW50IE1ldGhvZHMnLCBjYXRlZ29yeTogJ0ZpbmFuY2UnLCBkZXNjcmlwdGlvbjogJ0F2YWlsYWJsZSBwYXltZW50IG1vZGVzJyB9LFxuICAgIHsgbmFtZTogJ3VzcF9HZXRDdXN0b21lckxpc3QnLCBzY2hlbWE6ICdkYm8nLCB0eXBlOiAnc3RvcmVkX3Byb2NlZHVyZScsIGZyaWVuZGx5TmFtZTogJ0N1c3RvbWVyIERpcmVjdG9yeSAoU1ApJywgY2F0ZWdvcnk6ICdTYWxlcyAmIENSTScsIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBmaWx0ZXJlZCBjdXN0b21lcnMgYnkgYnJhbmNoJyB9LFxuICAgIHsgbmFtZTogJ3VzcF9HZXRCcmFuY2hMb29rdXAnLCBzY2hlbWE6ICdkYm8nLCB0eXBlOiAnc3RvcmVkX3Byb2NlZHVyZScsIGZyaWVuZGx5TmFtZTogJ0FjdGl2ZSBCcmFuY2hlcyAoU1ApJywgY2F0ZWdvcnk6ICdNYXN0ZXIgRGF0YScsIGRlc2NyaXB0aW9uOiAnUmV0dXJucyBhY3RpdmUgYnJhbmNoZXMnIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb2NrQ29sdW1uczogUmVjb3JkPHN0cmluZywgRW50aXR5Q29sdW1uTWV0YWRhdGFbXT4gPSB7XG4gICAgQ3VzdG9tZXJzOiBbXG4gICAgICB7IGZpZWxkOiAnY3VzdG9tZXJJZCcsIGxhYmVsOiAnQ3VzdG9tZXIgSUQnLCBkYXRhVHlwZTogJ251bWJlcicsIG51bGxhYmxlOiBmYWxzZSB9LFxuICAgICAgeyBmaWVsZDogJ2N1c3RvbWVyTmFtZScsIGxhYmVsOiAnQ3VzdG9tZXIgTmFtZScsIGRhdGFUeXBlOiAnc3RyaW5nJywgbnVsbGFibGU6IGZhbHNlIH0sXG4gICAgICB7IGZpZWxkOiAnZW1haWwnLCBsYWJlbDogJ0VtYWlsIEFkZHJlc3MnLCBkYXRhVHlwZTogJ3N0cmluZycsIG51bGxhYmxlOiB0cnVlIH0sXG4gICAgICB7IGZpZWxkOiAnYnJhbmNoSWQnLCBsYWJlbDogJ0JyYW5jaCBJRCcsIGRhdGFUeXBlOiAnbnVtYmVyJywgbnVsbGFibGU6IHRydWUgfSxcbiAgICAgIHsgZmllbGQ6ICdpc0FjdGl2ZScsIGxhYmVsOiAnQWN0aXZlIFN0YXR1cycsIGRhdGFUeXBlOiAnYm9vbGVhbicsIG51bGxhYmxlOiBmYWxzZSB9LFxuICAgIF0sXG4gICAgQnJhbmNoZXM6IFtcbiAgICAgIHsgZmllbGQ6ICdicmFuY2hJZCcsIGxhYmVsOiAnQnJhbmNoIElEJywgZGF0YVR5cGU6ICdudW1iZXInLCBudWxsYWJsZTogZmFsc2UgfSxcbiAgICAgIHsgZmllbGQ6ICdicmFuY2hOYW1lJywgbGFiZWw6ICdCcmFuY2ggTmFtZScsIGRhdGFUeXBlOiAnc3RyaW5nJywgbnVsbGFibGU6IGZhbHNlIH0sXG4gICAgICB7IGZpZWxkOiAncmVnaW9uJywgbGFiZWw6ICdSZWdpb24nLCBkYXRhVHlwZTogJ3N0cmluZycsIG51bGxhYmxlOiB0cnVlIH0sXG4gICAgXSxcbiAgICBQcm9kdWN0czogW1xuICAgICAgeyBmaWVsZDogJ3Byb2R1Y3RJZCcsIGxhYmVsOiAnUHJvZHVjdCBJRCcsIGRhdGFUeXBlOiAnbnVtYmVyJywgbnVsbGFibGU6IGZhbHNlIH0sXG4gICAgICB7IGZpZWxkOiAncHJvZHVjdE5hbWUnLCBsYWJlbDogJ1Byb2R1Y3QgTmFtZScsIGRhdGFUeXBlOiAnc3RyaW5nJywgbnVsbGFibGU6IGZhbHNlIH0sXG4gICAgICB7IGZpZWxkOiAnY2F0ZWdvcnknLCBsYWJlbDogJ0NhdGVnb3J5JywgZGF0YVR5cGU6ICdzdHJpbmcnLCBudWxsYWJsZTogdHJ1ZSB9LFxuICAgICAgeyBmaWVsZDogJ3VuaXRQcmljZScsIGxhYmVsOiAnVW5pdCBQcmljZScsIGRhdGFUeXBlOiAnbnVtYmVyJywgbnVsbGFibGU6IGZhbHNlIH0sXG4gICAgXSxcbiAgICBQYXltZW50TWV0aG9kczogW1xuICAgICAgeyBmaWVsZDogJ2NvZGUnLCBsYWJlbDogJ1BheW1lbnQgQ29kZScsIGRhdGFUeXBlOiAnc3RyaW5nJywgbnVsbGFibGU6IGZhbHNlIH0sXG4gICAgICB7IGZpZWxkOiAndGl0bGUnLCBsYWJlbDogJ01ldGhvZCBUaXRsZScsIGRhdGFUeXBlOiAnc3RyaW5nJywgbnVsbGFibGU6IGZhbHNlIH0sXG4gICAgXSxcbiAgICB1c3BfR2V0Q3VzdG9tZXJMaXN0OiBbXG4gICAgICB7IGZpZWxkOiAnaWQnLCBsYWJlbDogJ0lEJywgZGF0YVR5cGU6ICdudW1iZXInLCBudWxsYWJsZTogZmFsc2UgfSxcbiAgICAgIHsgZmllbGQ6ICduYW1lJywgbGFiZWw6ICdDdXN0b21lciBOYW1lJywgZGF0YVR5cGU6ICdzdHJpbmcnLCBudWxsYWJsZTogZmFsc2UgfSxcbiAgICAgIHsgZmllbGQ6ICdicmFuY2gnLCBsYWJlbDogJ0JyYW5jaCBDb2RlJywgZGF0YVR5cGU6ICdzdHJpbmcnLCBudWxsYWJsZTogdHJ1ZSB9LFxuICAgIF0sXG4gICAgdXNwX0dldEJyYW5jaExvb2t1cDogW1xuICAgICAgeyBmaWVsZDogJ2lkJywgbGFiZWw6ICdCcmFuY2ggSUQnLCBkYXRhVHlwZTogJ251bWJlcicsIG51bGxhYmxlOiBmYWxzZSB9LFxuICAgICAgeyBmaWVsZDogJ25hbWUnLCBsYWJlbDogJ0JyYW5jaCBOYW1lJywgZGF0YVR5cGU6ICdzdHJpbmcnLCBudWxsYWJsZTogZmFsc2UgfSxcbiAgICBdLFxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9ja1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10+ID0ge1xuICAgIHVzcF9HZXRDdXN0b21lckxpc3Q6IFtcbiAgICAgIHsgbmFtZTogJ0BCcmFuY2hJZCcsIGZyaWVuZGx5TGFiZWw6ICdCcmFuY2ggTG9jYXRpb24nLCBkYXRhVHlwZTogJ251bWJlcicsIHNxbFR5cGU6ICdJTlQnLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGN1c3RvbWVycyBiZWxvbmdpbmcgdG8gdGhpcyBicmFuY2gnIH0sXG4gICAgICB7IG5hbWU6ICdAQWN0aXZlT25seScsIGZyaWVuZGx5TGFiZWw6ICdBY3RpdmUgT25seScsIGRhdGFUeXBlOiAnYm9vbGVhbicsIHNxbFR5cGU6ICdCSVQnLCByZXF1aXJlZDogZmFsc2UsIGRlZmF1bHRWYWx1ZTogdHJ1ZSwgZGVzY3JpcHRpb246ICdPbmx5IHNob3cgYWN0aXZlIGN1c3RvbWVycycgfSxcbiAgICBdLFxuICAgIHVzcF9HZXRCcmFuY2hMb29rdXA6IFtcbiAgICAgIHsgbmFtZTogJ0BSZWdpb24nLCBmcmllbmRseUxhYmVsOiAnR2VvZ3JhcGhpY2FsIFJlZ2lvbicsIGRhdGFUeXBlOiAnc3RyaW5nJywgc3FsVHlwZTogJ1ZBUkNIQVIoNTApJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogJ0ZpbHRlciBieSBnZW9ncmFwaGljYWwgcmVnaW9uJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgZ2V0RW50aXRpZXModHlwZXM/OiBEYXRhYmFzZUVudGl0eVR5cGVbXSk6IE9ic2VydmFibGU8RGF0YWJhc2VFbnRpdHlNZXRhZGF0YVtdPiB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnPy5hcGlCYXNlVXJsO1xuICAgIGlmIChiYXNlVXJsICYmIHRoaXMuaHR0cCkge1xuICAgICAgY29uc3QgdHlwZVBhcmFtID0gdHlwZXMgPyB0eXBlcy5qb2luKCcsJykgOiAnJztcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgLmdldDxEYXRhYmFzZUVudGl0eU1ldGFkYXRhW10+KGAke2Jhc2VVcmx9L3NjaGVtYS9lbnRpdGllc2AsIHtcbiAgICAgICAgICBwYXJhbXM6IHR5cGVQYXJhbSA/IHsgdHlwZXM6IHR5cGVQYXJhbSB9IDoge30sXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbSHR0cFNjaGVtYURpc2NvdmVyeV0gQVBJIHJlcXVlc3QgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gbW9jayBzY2hlbWE6JywgZXJyKTtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmZpbHRlck1vY2tFbnRpdGllcyh0eXBlcykpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvZih0aGlzLmZpbHRlck1vY2tFbnRpdGllcyh0eXBlcykpO1xuICB9XG5cbiAgZ2V0Q29sdW1ucyhcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgc2NoZW1hID0gJ2RibycsXG4gICAgdHlwZT86IERhdGFiYXNlRW50aXR5VHlwZVxuICApOiBPYnNlcnZhYmxlPEVudGl0eUNvbHVtbk1ldGFkYXRhW10+IHtcbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWc/LmFwaUJhc2VVcmw7XG4gICAgaWYgKGJhc2VVcmwgJiYgdGhpcy5odHRwKSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgIC5nZXQ8RW50aXR5Q29sdW1uTWV0YWRhdGFbXT4oYCR7YmFzZVVybH0vc2NoZW1hL2NvbHVtbnNgLCB7XG4gICAgICAgICAgcGFyYW1zOiB7IGVudGl0eU5hbWUsIHNjaGVtYSwgLi4uKHR5cGUgPyB7IHR5cGUgfSA6IHt9KSB9LFxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW0h0dHBTY2hlbWFEaXNjb3ZlcnldIEZhaWxlZCB0byBnZXQgY29sdW1ucyBmb3IgJHtlbnRpdHlOYW1lfTpgLCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMubW9ja0NvbHVtbnNbZW50aXR5TmFtZV0gPz8gW10pO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvZih0aGlzLm1vY2tDb2x1bW5zW2VudGl0eU5hbWVdID8/IFtdKTtcbiAgfVxuXG4gIGdldFBhcmFtZXRlcnMoZW50aXR5TmFtZTogc3RyaW5nLCBzY2hlbWEgPSAnZGJvJyk6IE9ic2VydmFibGU8UHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXT4ge1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZz8uYXBpQmFzZVVybDtcbiAgICBpZiAoYmFzZVVybCAmJiB0aGlzLmh0dHApIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgLmdldDxQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YVtdPihgJHtiYXNlVXJsfS9zY2hlbWEvcGFyYW1ldGVyc2AsIHtcbiAgICAgICAgICBwYXJhbXM6IHsgZW50aXR5TmFtZSwgc2NoZW1hIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBbSHR0cFNjaGVtYURpc2NvdmVyeV0gRmFpbGVkIHRvIGdldCBwYXJhbWV0ZXJzIGZvciAke2VudGl0eU5hbWV9OmAsIGVycik7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5tb2NrUGFyYW1ldGVyc1tlbnRpdHlOYW1lXSA/PyBbXSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKHRoaXMubW9ja1BhcmFtZXRlcnNbZW50aXR5TmFtZV0gPz8gW10pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJNb2NrRW50aXRpZXModHlwZXM/OiBEYXRhYmFzZUVudGl0eVR5cGVbXSk6IERhdGFiYXNlRW50aXR5TWV0YWRhdGFbXSB7XG4gICAgaWYgKCF0eXBlcyB8fCB0eXBlcy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLm1vY2tFbnRpdGllcztcbiAgICByZXR1cm4gdGhpcy5tb2NrRW50aXRpZXMuZmlsdGVyKChlKSA9PiB0eXBlcy5pbmNsdWRlcyhlLnR5cGUpKTtcbiAgfVxufVxuXG4vKiogQ29udmVuaWVuY2UgYWxpYXMgKi9cbmV4cG9ydCBjb25zdCBIdHRwU2NoZW1hRGlzY292ZXJ5QWRhcHRlciA9IEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyO1xuIl19
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zY2hlbWEtZGlzY292ZXJ5LmFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9odHRwLXNjaGVtYS1kaXNjb3ZlcnkuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFLTCw0QkFBNEIsR0FDN0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFFNUU7OztHQUdHO0FBRUgsTUFBTSxPQUFPLGdDQUFpQyxTQUFRLDRCQUE0QjtJQUMvRCxPQUFPLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkYsSUFBWSxPQUFPLEtBQUssT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFB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QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDLENBQUM7WUFDeEcsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDLENBQUM7SUFDeEcsQ0FBQzt3R0EvRFUsZ0NBQWdDOzRHQUFoQyxnQ0FBZ0M7OzRGQUFoQyxnQ0FBZ0M7a0JBRDVDLFVBQVU7O0FBcUVYLHdCQUF3QjtBQUN4QixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxnQ0FBZ0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IHJlcG9ydFNlc3Npb25IZWFkZXJzIH0gZnJvbSAnLi9zZXNzaW9uLWhlYWRlcnMnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEYXRhYmFzZUVudGl0eU1ldGFkYXRhLFxuICBEYXRhYmFzZUVudGl0eVR5cGUsXG4gIEVudGl0eUNvbHVtbk1ldGFkYXRhLFxuICBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YSxcbiAgUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbn0gZnJvbSAnLi4vY29udHJhY3RzL3NjaGVtYS1kaXNjb3ZlcnkuY29udHJhY3QnO1xuaW1wb3J0IHsgUkVQT1JUSU5HX0NPTkZJRyB9IGZyb20gJy4uLy4uL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuXG4vKipcbiAqIEJ1aWx0LWluIEhUVFAgYWRhcHRlciBmb3IgYmFja2VuZCBkYXRhYmFzZSBzY2hlbWEgZGlzY292ZXJ5LlxuICogQ29ubmVjdHMgdG8gTmVzdEpTIC8gUkVTVCBiYWNrZW5kIGVuZHBvaW50cywgd2l0aG91dCBmYWJyaWNhdGluZyBtZXRhZGF0YSB3aGVuIHJlcXVlc3RzIGZhaWwuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIdHRwUmVwb3J0U2NoZW1hRGlzY292ZXJ5QWRhcHRlciBleHRlbmRzIFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIGdldCBoZWFkZXJzKCkgeyByZXR1cm4gcmVwb3J0U2Vzc2lvbkhlYWRlcnModGhpcy5zZXNzaW9uPy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKSA/PyB7fSk7IH1cbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgZ2V0RW50aXRpZXModHlwZXM/OiBEYXRhYmFzZUVudGl0eVR5cGVbXSk6IE9ic2VydmFibGU8RGF0YWJhc2VFbnRpdHlNZXRhZGF0YVtdPiB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnPy5hcGlCYXNlVXJsO1xuICAgIGlmIChiYXNlVXJsICYmIHRoaXMuaHR0cCkge1xuICAgICAgY29uc3QgdHlwZVBhcmFtID0gdHlwZXMgPyB0eXBlcy5qb2luKCcsJykgOiAnJztcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgLmdldDxEYXRhYmFzZUVudGl0eU1ldGFkYXRhW10+KGAke2Jhc2VVcmx9L3NjaGVtYS9lbnRpdGllc2AsIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgcGFyYW1zOiB0eXBlUGFyYW0gPyB7IHR5cGVzOiB0eXBlUGFyYW0gfSA6IHt9LFxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW0h0dHBTY2hlbWFEaXNjb3ZlcnldIFNjaGVtYSBkaXNjb3ZlcnkgcmVxdWVzdCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignW2J3YXlzLXJlcG9ydF0gU2NoZW1hIGRpc2NvdmVyeSByZXF1aXJlcyBhIHJlYWNoYWJsZSBIVFRQIGJhY2tlbmQuJykpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBvZihbXSk7XG4gIH1cblxuICBnZXRDb2x1bW5zKFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBzY2hlbWEgPSAnZGJvJyxcbiAgICB0eXBlPzogRGF0YWJhc2VFbnRpdHlUeXBlXG4gICk6IE9ic2VydmFibGU8RW50aXR5Q29sdW1uTWV0YWRhdGFbXT4ge1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZz8uYXBpQmFzZVVybDtcbiAgICBpZiAoYmFzZVVybCAmJiB0aGlzLmh0dHApIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgLmdldDxFbnRpdHlDb2x1bW5NZXRhZGF0YVtdPihgJHtiYXNlVXJsfS9zY2hlbWEvY29sdW1uc2AsIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgcGFyYW1zOiB7IGVudGl0eU5hbWUsIHNjaGVtYSwgLi4uKHR5cGUgPyB7IHR5cGUgfSA6IHt9KSB9LFxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgW0h0dHBTY2hlbWFEaXNjb3ZlcnldIEZhaWxlZCB0byBnZXQgY29sdW1ucyBmb3IgJHtlbnRpdHlOYW1lfTpgLCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBDb2x1bW4gZGlzY292ZXJ5IGZhaWxlZCBvciBpcyBub3QgY29uZmlndXJlZC4nKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdbYndheXMtcmVwb3J0XSBDb2x1bW4gZGlzY292ZXJ5IGZhaWxlZCBvciBpcyBub3QgY29uZmlndXJlZC4nKSk7XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJzKGVudGl0eU5hbWU6IHN0cmluZywgc2NoZW1hID0gJ2RibycpOiBPYnNlcnZhYmxlPFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10+IHtcbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWc/LmFwaUJhc2VVcmw7XG4gICAgaWYgKGJhc2VVcmwgJiYgdGhpcy5odHRwKSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgIC5nZXQ8UHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXT4oYCR7YmFzZVVybH0vc2NoZW1hL3BhcmFtZXRlcnNgLCB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgIHBhcmFtczogeyBlbnRpdHlOYW1lLCBzY2hlbWEgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFtIdHRwU2NoZW1hRGlzY292ZXJ5XSBGYWlsZWQgdG8gZ2V0IHBhcmFtZXRlcnMgZm9yICR7ZW50aXR5TmFtZX06YCwgZXJyKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignW2J3YXlzLXJlcG9ydF0gUGFyYW1ldGVyIGRpc2NvdmVyeSBmYWlsZWQgb3IgaXMgbm90IGNvbmZpZ3VyZWQuJykpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignW2J3YXlzLXJlcG9ydF0gUGFyYW1ldGVyIGRpc2NvdmVyeSBmYWlsZWQgb3IgaXMgbm90IGNvbmZpZ3VyZWQuJykpO1xuICB9XG5cblxufVxuXG4vKiogQ29udmVuaWVuY2UgYWxpYXMgKi9cbmV4cG9ydCBjb25zdCBIdHRwU2NoZW1hRGlzY292ZXJ5QWRhcHRlciA9IEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyO1xuIl19
@@ -12,4 +12,4 @@ export { EndpointLookupAdapter } from './endpoint-lookup.adapter';
12
12
  export { EndpointPersistenceAdapter } from './endpoint-persistence.adapter';
13
13
  export { EndpointMasterDataAdapter } from './endpoint-masterdata.adapter';
14
14
  export { BWAYS_REPORT_ENDPOINTS } from './endpoint-tokens';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLDBCQUEwQixHQUMzQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHNCQUFzQixHQUN2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsb0NBQW9DLEdBQ3JDLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUNMLDJCQUEyQixHQUM1QixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICBIdHRwU2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLXNjaGVtYS1kaXNjb3ZlcnkuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgSHR0cExvb2t1cEFkYXB0ZXIsXG59IGZyb20gJy4vaHR0cC1sb29rdXAuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gIEh0dHBEYXRhU291cmNlQWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLWRhdGFzb3VyY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBIdHRwUGVyc2lzdGVuY2VBZGFwdGVyLFxufSBmcm9tICcuL2h0dHAtcGVyc2lzdGVuY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwTWFzdGVyRGF0YUFkYXB0ZXIsXG59IGZyb20gJy4vaHR0cC1tYXN0ZXJkYXRhLmFkYXB0ZXInO1xuZXhwb3J0IHtcbiAgTG9jYWxTdG9yYWdlUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxufSBmcm9tICcuL2xvY2FsLXN0b3JhZ2UtcGVyc2lzdGVuY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBNb2NrUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG59IGZyb20gJy4vbW9jay1kYXRhc291cmNlLmFkYXB0ZXInO1xuXG4vLyBFbmRwb2ludC1iYXNlZCBhZGFwdGVycyAodXNlZCBieSBCd2F5c1JlcG9ydENvbmZpZyBzaW1wbGUgY29uZmlnKVxuZXhwb3J0IHsgRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIH0gZnJvbSAnLi9lbmRwb2ludC1zY2hlbWEtZGlzY292ZXJ5LmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyJztcbmV4cG9ydCB7IEVuZHBvaW50TG9va3VwQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtbG9va3VwLmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSBmcm9tICcuL2VuZHBvaW50LXBlcnNpc3RlbmNlLmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnRNYXN0ZXJEYXRhQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtbWFzdGVyZGF0YS5hZGFwdGVyJztcbmV4cG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgfSBmcm9tICcuL2VuZHBvaW50LXRva2Vucyc7XG5leHBvcnQgdHlwZSB7IEJ3YXlzUmVwb3J0RW5kcG9pbnRzIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuIl19
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLDBCQUEwQixHQUMzQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHNCQUFzQixHQUN2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsb0NBQW9DLEdBQ3JDLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUNMLDJCQUEyQixHQUM1QixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICBIdHRwU2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLXNjaGVtYS1kaXNjb3ZlcnkuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgSHR0cExvb2t1cEFkYXB0ZXIsXG59IGZyb20gJy4vaHR0cC1sb29rdXAuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gIEh0dHBEYXRhU291cmNlQWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLWRhdGFzb3VyY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBIdHRwUGVyc2lzdGVuY2VBZGFwdGVyLFxufSBmcm9tICcuL2h0dHAtcGVyc2lzdGVuY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwTWFzdGVyRGF0YUFkYXB0ZXIsXG59IGZyb20gJy4vaHR0cC1tYXN0ZXJkYXRhLmFkYXB0ZXInO1xuZXhwb3J0IHtcbiAgTG9jYWxTdG9yYWdlUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxufSBmcm9tICcuL2xvY2FsLXN0b3JhZ2UtcGVyc2lzdGVuY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBNb2NrUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG59IGZyb20gJy4vbW9jay1kYXRhc291cmNlLmFkYXB0ZXInO1xuXG4vLyBFbmRwb2ludC1iYXNlZCBhZGFwdGVycyAodXNlZCBieSBCd2F5c1JlcG9ydENvbmZpZyBzaW1wbGUgY29uZmlnKVxuZXhwb3J0IHsgRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIH0gZnJvbSAnLi9lbmRwb2ludC1zY2hlbWEtZGlzY292ZXJ5LmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyJztcbmV4cG9ydCB7IEVuZHBvaW50TG9va3VwQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtbG9va3VwLmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSBmcm9tICcuL2VuZHBvaW50LXBlcnNpc3RlbmNlLmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnRNYXN0ZXJEYXRhQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtbWFzdGVyZGF0YS5hZGFwdGVyJztcbmV4cG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgfSBmcm9tICcuL2VuZHBvaW50LXRva2Vucyc7XG5leHBvcnQgdHlwZSB7IEJ3YXlzUmVwb3J0RW5kcG9pbnRzLCBCd2F5c1JlcG9ydEFwaVVybHMgfSBmcm9tICcuL2VuZHBvaW50LXRva2Vucyc7XG4iXX0=