bways-report 0.1.1 → 0.1.3

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 (100) hide show
  1. package/README.md +153 -51
  2. package/esm2022/lib/core/errors/reporting-errors.mjs +2 -2
  3. package/esm2022/lib/core/index.mjs +3 -1
  4. package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
  5. package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
  6. package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  7. package/esm2022/lib/core/services/report-session-context.service.mjs +50 -5
  8. package/esm2022/lib/core/utils/data-normalization.util.mjs +56 -0
  9. package/esm2022/lib/core/utils/report-parameter.util.mjs +180 -0
  10. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +82 -0
  11. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +34 -9
  12. package/esm2022/lib/data-access/adapters/http-masterdata.adapter.mjs +38 -0
  13. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +217 -0
  14. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +3 -1
  15. package/esm2022/lib/data-access/adapters/index.mjs +8 -3
  16. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +167 -0
  17. package/esm2022/lib/data-access/adapters/mock-datasource.adapter.mjs +60 -0
  18. package/esm2022/lib/data-access/contracts/api-dtos.mjs +6 -0
  19. package/esm2022/lib/data-access/contracts/index.mjs +2 -1
  20. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +665 -90
  21. package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +593 -0
  22. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +164 -23
  23. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +458 -14
  24. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +173 -2
  25. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +182 -6
  26. package/esm2022/lib/features/designer/designer.component.mjs +101 -12
  27. package/esm2022/lib/features/designer/index.mjs +4 -1
  28. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +102 -0
  29. package/esm2022/lib/features/designer/services/designer-state.service.mjs +10 -9
  30. package/esm2022/lib/features/designer/services/report-template.service.mjs +318 -0
  31. package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +41 -9
  32. package/esm2022/lib/features/export/index.mjs +2 -2
  33. package/esm2022/lib/features/export/models/export.models.mjs +1 -1
  34. package/esm2022/lib/features/export/services/report-export.service.mjs +420 -5
  35. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +2 -2
  36. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +231 -33
  37. package/esm2022/lib/features/runtime/index.mjs +2 -1
  38. package/esm2022/lib/features/runtime/report-execution.service.mjs +64 -0
  39. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +224 -26
  40. package/esm2022/lib/features/runtime/report-runtime.component.mjs +341 -7
  41. package/esm2022/lib/features/runtime/rpt-report.component.mjs +537 -0
  42. package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +26 -9
  43. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +18 -7
  44. package/esm2022/lib/primitives/components/date-range/rpt-date-range.component.mjs +346 -0
  45. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +727 -73
  46. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +8 -1
  47. package/esm2022/lib/primitives/components/index.mjs +2 -1
  48. package/esm2022/lib/primitives/register-builtins.mjs +51 -2
  49. package/esm2022/lib/provide-reporting.mjs +145 -24
  50. package/fesm2022/bways-report.mjs +8051 -1672
  51. package/fesm2022/bways-report.mjs.map +1 -1
  52. package/lib/core/index.d.ts +2 -0
  53. package/lib/core/models/report-datasource.model.d.ts +9 -0
  54. package/lib/core/models/report-definition.model.d.ts +2 -0
  55. package/lib/core/models/report-grid.model.d.ts +44 -0
  56. package/lib/core/services/report-session-context.service.d.ts +6 -1
  57. package/lib/core/utils/data-normalization.util.d.ts +15 -0
  58. package/lib/core/utils/report-parameter.util.d.ts +35 -0
  59. package/lib/data-access/adapters/http-datasource.adapter.d.ts +20 -0
  60. package/lib/data-access/adapters/http-lookup.adapter.d.ts +3 -0
  61. package/lib/data-access/adapters/http-masterdata.adapter.d.ts +13 -0
  62. package/lib/data-access/adapters/http-persistence.adapter.d.ts +27 -0
  63. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +2 -0
  64. package/lib/data-access/adapters/index.d.ts +7 -2
  65. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +19 -0
  66. package/lib/data-access/adapters/mock-datasource.adapter.d.ts +9 -0
  67. package/lib/data-access/contracts/api-dtos.d.ts +67 -0
  68. package/lib/data-access/contracts/index.d.ts +1 -0
  69. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +24 -0
  70. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +1 -1
  71. package/lib/features/designer/components/property-editor/property-editor-action.component.d.ts +33 -0
  72. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -0
  73. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +18 -2
  74. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +7 -0
  75. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +9 -0
  76. package/lib/features/designer/designer.component.d.ts +5 -0
  77. package/lib/features/designer/index.d.ts +4 -0
  78. package/lib/features/designer/rpt-report-designer.component.d.ts +38 -0
  79. package/lib/features/designer/services/designer-state.service.d.ts +1 -1
  80. package/lib/features/designer/services/report-template.service.d.ts +32 -0
  81. package/lib/features/designer/utilities/canvas-layout.util.d.ts +4 -0
  82. package/lib/features/export/index.d.ts +2 -2
  83. package/lib/features/export/models/export.models.d.ts +23 -0
  84. package/lib/features/export/services/report-export.service.d.ts +31 -2
  85. package/lib/features/runtime/dynamic-renderer.component.d.ts +39 -2
  86. package/lib/features/runtime/index.d.ts +2 -0
  87. package/lib/features/runtime/report-execution.service.d.ts +16 -0
  88. package/lib/features/runtime/report-grid-bridge.component.d.ts +129 -6
  89. package/lib/features/runtime/report-runtime.component.d.ts +83 -1
  90. package/lib/features/runtime/rpt-report.component.d.ts +66 -0
  91. package/lib/primitives/components/button/rpt-button.component.d.ts +5 -2
  92. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +1 -0
  93. package/lib/primitives/components/date-range/rpt-date-range.component.d.ts +43 -0
  94. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +55 -7
  95. package/lib/primitives/components/index.d.ts +2 -0
  96. package/lib/provide-reporting.d.ts +79 -26
  97. package/package.json +2 -1
  98. package/schematics/collection.json +10 -0
  99. package/schematics/ng-add/index.js +45 -0
  100. package/schematics/ng-add/schema.json +17 -0
package/README.md CHANGED
@@ -4,75 +4,186 @@
4
4
 
5
5
  It allows non-developers to visually design reporting pages with filters, KPI metric cards, charts, and grids. The report configuration is saved purely as JSON metadata (`ReportDefinition`), and the runtime engine dynamically instantiates the reactive forms, controls, data queries, and results grid on the fly.
6
6
 
7
+ ---
8
+ [![npm version](https://img.shields.io/npm/v/bways-report.svg)](https://www.npmjs.com/package/bways-report)
9
+ [![license](https://img.shields.io/npm/l/bways-report.svg)](https://github.com/ccplProject/BWays-CustomeReport)
7
10
  ---
8
11
 
9
12
  ## Table of Contents
10
13
 
11
- 1. [Installation](#1-installation)
12
- 2. [Quick Start (App Configuration)](#2-quick-start-app-configuration)
13
- 3. [Implementing Host Adapters](#3-implementing-host-adapters)
14
+ 1. [Automated Setup (ng add)](#1-automated-setup-ng-add)
15
+ 2. [Quick Start (Rule of 1)](#2-quick-start-rule-of-1)
16
+ - [A. 1-Line App Setup](#a-1-line-app-setup)
17
+ - [B. 1-Tag Runtime Page](#b-1-tag-runtime-page)
18
+ - [C. 1-Tag Visual Report Designer](#c-1-tag-visual-report-designer)
19
+ - [D. Saved Views & Presets in JSON](#d-saved-views--presets-in-json)
20
+ 3. [Configuration Options & Zero-Backend Dev](#3-configuration-options--zero-backend-dev)
21
+ 4. [Implementing Host Adapters (Advanced)](#4-implementing-host-adapters)
14
22
  - [A. Data Source Adapter (Query Execution)](#a-data-source-adapter)
15
23
  - [B. Persistence Adapter (Saving & Loading Reports)](#b-persistence-adapter)
16
24
  - [C. Master Data Provider (Dropdown Lookups)](#c-master-data-provider)
17
- 4. [Routing & ERP Navigation Integration](#4-routing--erp-navigation-integration)
18
- - [Dynamic Route Generation](#dynamic-route-generation)
19
- - [Categorized ERP Sidebar / Header Navigation](#categorized-erp-sidebar--header-navigation)
20
- 5. [Embedding Components Directly](#5-embedding-components-directly)
21
- - [Report Runtime (Interactive Report Page)](#report-runtime-interactive-report-page)
22
- - [Visual Drag-and-Drop Designer](#visual-drag-and-drop-designer)
23
- 6. [Grid & Chart Bridge Integration (BWays-Grid)](#6-grid--chart-bridge-integration-bways-grid)
24
- 7. [Theming & CSS Custom Properties](#7-theming--css-custom-properties)
25
- 8. [Registering Custom Host Controls](#8-registering-custom-host-controls)
26
- 9. [Exporting Data (CSV & JSON)](#9-exporting-data-csv--json)
25
+ 5. [Routing & ERP Navigation Integration](#5-routing--erp-navigation-integration)
26
+ 6. [Drill-Down Drill-Through & Slide-Over Drawers](#6-drill-down--slide-over-drawers)
27
+ 7. [Starter Blueprints Gallery & Branded Exports](#7-starter-blueprints--branded-exports)
27
28
 
28
29
  ---
29
30
 
30
- ## 1. Installation
31
+ ## 1. Automated Setup (ng add)
31
32
 
32
- Install `bways-report` and its peer dependency `@angular/cdk` from npm:
33
+ Run the Angular CLI schematic to configure your application in seconds:
33
34
 
34
35
  ```bash
35
- npm install bways-report @angular/cdk
36
+ ng add bways-report
36
37
  ```
37
38
 
38
- > **Requirements:**
39
- > - Angular 18.0.0 or higher
40
- > - Modern browser support (Chrome, Edge, Firefox, Safari)
39
+ This automatically installs required dependencies and adds `provideReporting()` to your `src/app/app.config.ts`.
41
40
 
42
41
  ---
43
42
 
44
- ## 2. Quick Start (App Configuration)
43
+ ## 2. Quick Start (Rule of 1)
44
+
45
+ ### A. 1-Line App Setup
45
46
 
46
- In your Angular host application's `app.config.ts`, register the library using `provideReporting()`:
47
+ In your Angular 18+ application:
47
48
 
48
49
  ```typescript
49
50
  // src/app/app.config.ts
50
- import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
51
- import { provideRouter } from '@angular/router';
51
+ import { ApplicationConfig } from '@angular/core';
52
52
  import { provideReporting } from 'bways-report';
53
- import { routes } from './app.routes';
54
- import { ErpDataSourceAdapter } from './services/erp-datasource.adapter';
55
- import { ErpPersistenceAdapter } from './services/erp-persistence.adapter';
56
- import { ErpMasterDataProvider } from './services/erp-masterdata.provider';
57
- // Optional: import your grid component (e.g., BWaysGridComponent from 'bways-grid')
58
- import { BWaysGridComponent } from 'bways-grid';
59
53
 
54
+ export const appConfig: ApplicationConfig = {
55
+ providers: [
56
+ // 1-line setup: automatically hooks up HTTP adapters, UltraGridComponent, and session headers
57
+ provideReporting({ apiBaseUrl: '/api/reporting' }),
58
+ ],
59
+ };
60
+ ```
61
+
62
+ > **Zero-Backend / Local Storage Mode:**
63
+ > For local prototyping, offline demos, or frontend-only dev, use:
64
+ > ```typescript
65
+ > provideReporting(withLocalStorage()); // seeds built-in blueprints and saves to browser localStorage
66
+ > ```
67
+
68
+ ---
69
+
70
+ ### B. 1-Tag Runtime Page
71
+
72
+ Render any saved report with its dynamic filter form, auto-bound stored procedure results, top toolbar, export actions, and saved view presets:
73
+
74
+ ```typescript
75
+ import { Component } from '@angular/core';
76
+ import { RptReportComponent } from 'bways-report';
77
+
78
+ @Component({
79
+ standalone: true,
80
+ imports: [RptReportComponent],
81
+ template: `
82
+ <!-- 1 tag to run and render the full report page -->
83
+ <rpt-report [id]="'sales-ledger'" />
84
+ `,
85
+ })
86
+ export class SalesReportPage {}
87
+ ```
88
+
89
+ ---
90
+
91
+ ### C. 1-Tag Visual Report Designer
92
+
93
+ Embed the full drag-and-drop report builder into your ERP settings or admin portal:
94
+
95
+ ```typescript
96
+ import { Component } from '@angular/core';
97
+ import { RptReportDesignerComponent } from 'bways-report';
98
+
99
+ @Component({
100
+ standalone: true,
101
+ imports: [RptReportDesignerComponent],
102
+ template: `
103
+ <!-- 1 tag to build, preview, or modify any report -->
104
+ <rpt-report-designer
105
+ [id]="'sales-ledger'"
106
+ (saved)="onReportSaved($event)"
107
+ />
108
+ `,
109
+ })
110
+ export class ReportBuilderPage {
111
+ onReportSaved(definition: any) {
112
+ console.log('Report saved successfully:', definition);
113
+ }
114
+ }
115
+ ```
116
+
117
+ ---
118
+
119
+ ### D. Saved Views & Presets in JSON
120
+
121
+ When users filter, reorder, group, or format columns in the grid, they can click **"+ Save View"** to persist their customized view preset. Presets are saved directly into the report's JSON:
122
+
123
+ ```json
124
+ {
125
+ "grid": {
126
+ "dataSourceId": "ds-sales",
127
+ "columns": [...],
128
+ "options": {
129
+ "presets": [
130
+ {
131
+ "id": "preset_1728200000",
132
+ "name": "Q3 High Value Clients",
133
+ "gridState": {
134
+ "filters": { "amount": { "operator": "gte", "value": 50000 } },
135
+ "columnOrder": ["invoiceId", "amount", "customerName"]
136
+ }
137
+ }
138
+ ]
139
+ }
140
+ }
141
+ }
142
+ ```
143
+ Users can switch between views seamlessly from the top dropdown, keeping all formatting and custom filters intact.
144
+
145
+ ---
146
+
147
+ ### Backend Integration: Mounting `BwaysReportingModule` in NestJS
148
+
149
+ To power the built-in HTTP adapters, mount `BwaysReportingModule` directly inside your existing NestJS host application:
150
+
151
+ ```typescript
152
+ // app.module.ts (in your NestJS backend)
153
+ import { Module } from '@nestjs/common';
154
+ import { BwaysReportingModule } from '@bways/reporting-backend';
155
+
156
+ @Module({
157
+ imports: [
158
+ BwaysReportingModule.forRoot({
159
+ security: {
160
+ allowedSchemas: ['dbo', 'reporting'],
161
+ disallowRawSql: true, // SQL injection prevention
162
+ validateEntitiesAgainstCatalog: true, // Checks sys.procedures catalog
163
+ },
164
+ }),
165
+ ],
166
+ })
167
+ export class AppModule {}
168
+ ```
169
+
170
+ ---
171
+
172
+ ### Option B: Custom Adapters (Full Manual Control)
173
+
174
+ If you don't use the standard backend endpoints, you can implement your own adapters:
175
+
176
+ ```typescript
60
177
  export const appConfig: ApplicationConfig = {
61
178
  providers: [
62
179
  provideZoneChangeDetection({ eventCoalescing: true }),
63
180
  provideRouter(routes),
64
- provideReporting({
65
- // Grid component delegation (falls back to built-in table if omitted)
181
+ provideBwaysReport({
66
182
  gridComponent: BWaysGridComponent,
67
-
68
- // Host ERP backend implementations
69
- dataSourceAdapter: ErpDataSourceAdapter,
70
- persistenceAdapter: ErpPersistenceAdapter,
71
- masterDataProvider: ErpMasterDataProvider,
72
-
73
- // Global defaults
183
+ dataSourceAdapter: MyCustomDataSourceAdapter,
184
+ persistenceAdapter: MyCustomPersistenceAdapter,
185
+ masterDataProvider: MyCustomMasterDataProvider,
74
186
  defaultPageSize: 25,
75
- dateFormat: 'dd/MM/yyyy',
76
187
  enableDesigner: true,
77
188
  }),
78
189
  ],
@@ -321,10 +432,10 @@ export class MyDesignerPageComponent {
321
432
 
322
433
  ### Using BWays-Grid or Custom Grid
323
434
 
324
- Provide your grid component via the `GRID_COMPONENT` token in `provideReporting()`:
435
+ Provide your grid component via the `GRID_COMPONENT` token in `provideBwaysReport()`:
325
436
 
326
437
  ```typescript
327
- provideReporting({
438
+ provideBwaysReport({
328
439
  gridComponent: BWaysGridComponent, // or AgGridWrapperComponent
329
440
  })
330
441
  ```
@@ -336,7 +447,7 @@ provideReporting({
336
447
  Provide a chart component wrapper (Chart.js, ApexCharts, Highcharts) via `chartComponent`:
337
448
 
338
449
  ```typescript
339
- provideReporting({
450
+ provideBwaysReport({
340
451
  chartComponent: MyHostChartComponent,
341
452
  })
342
453
  ```
@@ -375,15 +486,6 @@ If not provided, the built-in SVG visual chart renderer outputs crisp, responsiv
375
486
  --rpt-warning-color: #f59e0b;
376
487
  --rpt-error-color: #ef4444;
377
488
  }
378
-
379
- /* Dark Mode Theme */
380
- [data-theme='dark'] {
381
- --rpt-surface-bg: #1e293b;
382
- --rpt-bg-subtle: #0f172a;
383
- --rpt-text-color: #f8fafc;
384
- --rpt-text-muted: #94a3b8;
385
- --rpt-border-color: #334155;
386
- }
387
489
  ```
388
490
 
389
491
  ---
@@ -57,9 +57,9 @@ export class SchemaVersionError extends Error {
57
57
  export class AdapterNotProvidedError extends Error {
58
58
  adapterName;
59
59
  constructor(adapterName) {
60
- super(`[BWays-Report] ${adapterName} is not provided. Configure it via provideReporting({ ... }).`);
60
+ super(`[BWays-Report] ${adapterName} is not provided. Configure it via provideBwaysReport({ ... }).`);
61
61
  this.adapterName = adapterName;
62
62
  this.name = 'AdapterNotProvidedError';
63
63
  }
64
64
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLWVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvZXJyb3JzL3JlcG9ydGluZy1lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxLQUFLO0lBQ0Q7SUFBN0MsWUFBWSxPQUFlLEVBQWtCLFFBQWlCO1FBQzVELEtBQUssQ0FBQyx5Q0FBeUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQztRQURwRCxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBRTVELElBQUksQ0FBQyxJQUFJLEdBQUcsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsS0FBSztJQUN4QjtJQUE1QixZQUE0QixhQUFxQjtRQUMvQyxLQUFLLENBQUMsa0NBQWtDLGFBQWEsMkVBQTJFLENBQUMsQ0FBQztRQUR4RyxrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUUvQyxJQUFJLENBQUMsSUFBSSxHQUFHLDZCQUE2QixDQUFDO0lBQzVDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsS0FBSztJQUNLO0lBQTdDLFlBQVksT0FBZSxFQUFrQixZQUFxQjtRQUNoRSxLQUFLLENBQUMsbUNBQW1DLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFEdEQsaUJBQVksR0FBWixZQUFZLENBQVM7UUFFaEUsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxLQUFLO0lBRXpCO0lBQ0E7SUFGbEIsWUFDa0IsY0FBc0IsRUFDdEIsZ0JBQXdCLEVBQ3hDLGFBQXNCO1FBRXRCLEtBQUssQ0FDSCxhQUFhO1lBQ1gsaUNBQWlDLGNBQWMsaURBQWlELGdCQUFnQixFQUFFLENBQ3JILENBQUM7UUFQYyxtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUN0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVE7UUFPeEMsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxLQUFLO0lBQ3BCO0lBQTVCLFlBQTRCLFdBQW1CO1FBQzdDLEtBQUssQ0FBQyxrQkFBa0IsV0FBVywrREFBK0QsQ0FBQyxDQUFDO1FBRDFFLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBRTdDLElBQUksQ0FBQyxJQUFJLEdBQUcseUJBQXlCLENBQUM7SUFDeEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnRpbmcgbGlicmFyeSBlcnJvciB0eXBlcy5cbiAqXG4gKiBFYWNoIGVycm9yIHR5cGUgaGFzIGEgZGlzdGluY3QgY2xhc3MgZm9yIHRhcmdldGVkIGNhdGNoaW5nXG4gKiBhbmQgY2xlYXIgc3RhY2sgdHJhY2VzLlxuICovXG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSByZXBvcnQgZGVmaW5pdGlvbiBmYWlscyB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUmVwb3J0RGVmaW5pdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyByZWFkb25seSByZXBvcnRJZD86IHN0cmluZykge1xuICAgIHN1cGVyKGBbQldheXMtUmVwb3J0XSBSZXBvcnQgZGVmaW5pdGlvbiBlcnJvciR7cmVwb3J0SWQgPyBgICgke3JlcG9ydElkfSlgIDogJyd9OiAke21lc3NhZ2V9YCk7XG4gICAgdGhpcy5uYW1lID0gJ1JlcG9ydERlZmluaXRpb25FcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIGNvbXBvbmVudCB0eXBlIGlzIG5vdCBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnROb3RSZWdpc3RlcmVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjb21wb25lbnRUeXBlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgW0JXYXlzLVJlcG9ydF0gQ29tcG9uZW50IHR5cGUgXCIke2NvbXBvbmVudFR5cGV9XCIgaXMgbm90IHJlZ2lzdGVyZWQuIERpZCB5b3UgZm9yZ2V0IHRvIHJlZ2lzdGVyIGl0IHZpYSBDb21wb25lbnRSZWdpc3RyeT9gKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29tcG9uZW50Tm90UmVnaXN0ZXJlZEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgZGF0YSBzb3VyY2UgZXhlY3V0aW9uIGZhaWxzLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyByZWFkb25seSBkYXRhU291cmNlSWQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihgW0JXYXlzLVJlcG9ydF0gRGF0YSBzb3VyY2UgZXJyb3Ike2RhdGFTb3VyY2VJZCA/IGAgKCR7ZGF0YVNvdXJjZUlkfSlgIDogJyd9OiAke21lc3NhZ2V9YCk7XG4gICAgdGhpcy5uYW1lID0gJ0RhdGFTb3VyY2VFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIHJlcG9ydCBkZWZpbml0aW9uJ3Mgc2NoZW1hIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYVZlcnNpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRWZXJzaW9uOiBudW1iZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRlZFZlcnNpb246IG51bWJlcixcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgY3VzdG9tTWVzc2FnZSA/P1xuICAgICAgICBgW0JXYXlzLVJlcG9ydF0gU2NoZW1hIHZlcnNpb24gJHtjdXJyZW50VmVyc2lvbn0gaXMgbm90IHN1cHBvcnRlZC4gQ3VycmVudCBzdXBwb3J0ZWQgdmVyc2lvbjogJHtzdXBwb3J0ZWRWZXJzaW9ufWBcbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdTY2hlbWFWZXJzaW9uRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSByZXF1aXJlZCBhZGFwdGVyL3Byb3ZpZGVyIGlzIG5vdCBjb25maWd1cmVkLlxuICovXG5leHBvcnQgY2xhc3MgQWRhcHRlck5vdFByb3ZpZGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBhZGFwdGVyTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFtCV2F5cy1SZXBvcnRdICR7YWRhcHRlck5hbWV9IGlzIG5vdCBwcm92aWRlZC4gQ29uZmlndXJlIGl0IHZpYSBwcm92aWRlUmVwb3J0aW5nKHsgLi4uIH0pLmApO1xuICAgIHRoaXMubmFtZSA9ICdBZGFwdGVyTm90UHJvdmlkZWRFcnJvcic7XG4gIH1cbn1cbiJdfQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLWVycm9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvZXJyb3JzL3JlcG9ydGluZy1lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSDs7R0FFRztBQUNILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxLQUFLO0lBQ0Q7SUFBN0MsWUFBWSxPQUFlLEVBQWtCLFFBQWlCO1FBQzVELEtBQUssQ0FBQyx5Q0FBeUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQztRQURwRCxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBRTVELElBQUksQ0FBQyxJQUFJLEdBQUcsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsS0FBSztJQUN4QjtJQUE1QixZQUE0QixhQUFxQjtRQUMvQyxLQUFLLENBQUMsa0NBQWtDLGFBQWEsMkVBQTJFLENBQUMsQ0FBQztRQUR4RyxrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUUvQyxJQUFJLENBQUMsSUFBSSxHQUFHLDZCQUE2QixDQUFDO0lBQzVDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsS0FBSztJQUNLO0lBQTdDLFlBQVksT0FBZSxFQUFrQixZQUFxQjtRQUNoRSxLQUFLLENBQUMsbUNBQW1DLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFEdEQsaUJBQVksR0FBWixZQUFZLENBQVM7UUFFaEUsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxLQUFLO0lBRXpCO0lBQ0E7SUFGbEIsWUFDa0IsY0FBc0IsRUFDdEIsZ0JBQXdCLEVBQ3hDLGFBQXNCO1FBRXRCLEtBQUssQ0FDSCxhQUFhO1lBQ1gsaUNBQWlDLGNBQWMsaURBQWlELGdCQUFnQixFQUFFLENBQ3JILENBQUM7UUFQYyxtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUN0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVE7UUFPeEMsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxLQUFLO0lBQ3BCO0lBQTVCLFlBQTRCLFdBQW1CO1FBQzdDLEtBQUssQ0FBQyxrQkFBa0IsV0FBVyxpRUFBaUUsQ0FBQyxDQUFDO1FBRDVFLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBRTdDLElBQUksQ0FBQyxJQUFJLEdBQUcseUJBQXlCLENBQUM7SUFDeEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnRpbmcgbGlicmFyeSBlcnJvciB0eXBlcy5cbiAqXG4gKiBFYWNoIGVycm9yIHR5cGUgaGFzIGEgZGlzdGluY3QgY2xhc3MgZm9yIHRhcmdldGVkIGNhdGNoaW5nXG4gKiBhbmQgY2xlYXIgc3RhY2sgdHJhY2VzLlxuICovXG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSByZXBvcnQgZGVmaW5pdGlvbiBmYWlscyB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUmVwb3J0RGVmaW5pdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyByZWFkb25seSByZXBvcnRJZD86IHN0cmluZykge1xuICAgIHN1cGVyKGBbQldheXMtUmVwb3J0XSBSZXBvcnQgZGVmaW5pdGlvbiBlcnJvciR7cmVwb3J0SWQgPyBgICgke3JlcG9ydElkfSlgIDogJyd9OiAke21lc3NhZ2V9YCk7XG4gICAgdGhpcy5uYW1lID0gJ1JlcG9ydERlZmluaXRpb25FcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIGNvbXBvbmVudCB0eXBlIGlzIG5vdCBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnROb3RSZWdpc3RlcmVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjb21wb25lbnRUeXBlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgW0JXYXlzLVJlcG9ydF0gQ29tcG9uZW50IHR5cGUgXCIke2NvbXBvbmVudFR5cGV9XCIgaXMgbm90IHJlZ2lzdGVyZWQuIERpZCB5b3UgZm9yZ2V0IHRvIHJlZ2lzdGVyIGl0IHZpYSBDb21wb25lbnRSZWdpc3RyeT9gKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29tcG9uZW50Tm90UmVnaXN0ZXJlZEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgZGF0YSBzb3VyY2UgZXhlY3V0aW9uIGZhaWxzLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyByZWFkb25seSBkYXRhU291cmNlSWQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihgW0JXYXlzLVJlcG9ydF0gRGF0YSBzb3VyY2UgZXJyb3Ike2RhdGFTb3VyY2VJZCA/IGAgKCR7ZGF0YVNvdXJjZUlkfSlgIDogJyd9OiAke21lc3NhZ2V9YCk7XG4gICAgdGhpcy5uYW1lID0gJ0RhdGFTb3VyY2VFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIHJlcG9ydCBkZWZpbml0aW9uJ3Mgc2NoZW1hIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYVZlcnNpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnRWZXJzaW9uOiBudW1iZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IHN1cHBvcnRlZFZlcnNpb246IG51bWJlcixcbiAgICBjdXN0b21NZXNzYWdlPzogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgY3VzdG9tTWVzc2FnZSA/P1xuICAgICAgICBgW0JXYXlzLVJlcG9ydF0gU2NoZW1hIHZlcnNpb24gJHtjdXJyZW50VmVyc2lvbn0gaXMgbm90IHN1cHBvcnRlZC4gQ3VycmVudCBzdXBwb3J0ZWQgdmVyc2lvbjogJHtzdXBwb3J0ZWRWZXJzaW9ufWBcbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdTY2hlbWFWZXJzaW9uRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSByZXF1aXJlZCBhZGFwdGVyL3Byb3ZpZGVyIGlzIG5vdCBjb25maWd1cmVkLlxuICovXG5leHBvcnQgY2xhc3MgQWRhcHRlck5vdFByb3ZpZGVkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBhZGFwdGVyTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFtCV2F5cy1SZXBvcnRdICR7YWRhcHRlck5hbWV9IGlzIG5vdCBwcm92aWRlZC4gQ29uZmlndXJlIGl0IHZpYSBwcm92aWRlQndheXNSZXBvcnQoeyAuLi4gfSkuYCk7XG4gICAgdGhpcy5uYW1lID0gJ0FkYXB0ZXJOb3RQcm92aWRlZEVycm9yJztcbiAgfVxufVxuIl19
@@ -5,4 +5,6 @@ export * from './errors';
5
5
  export * from './validation';
6
6
  export * from './services';
7
7
  export * from './utilities';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWdpc3RyeSc7XG5leHBvcnQgKiBmcm9tICcuL3Rva2Vucyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycyc7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxpdGllcyc7XG4iXX0=
8
+ export * from './utils/data-normalization.util';
9
+ export * from './utils/report-parameter.util';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVnaXN0cnknO1xuZXhwb3J0ICogZnJvbSAnLi90b2tlbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9lcnJvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi92YWxpZGF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsaXRpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9kYXRhLW5vcm1hbGl6YXRpb24udXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL3JlcG9ydC1wYXJhbWV0ZXIudXRpbCc7XG4iXX0=
@@ -6,4 +6,4 @@
6
6
  * `ReportDataSourceAdapter` contract.
7
7
  */
8
8
  export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRhdGFzb3VyY2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZGF0YXNvdXJjZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcG9ydCBkYXRhIHNvdXJjZSBkZWZpbml0aW9ucy5cbiAqXG4gKiBBIGRhdGEgc291cmNlIGRlc2NyaWJlcyBob3cgdG8gZmV0Y2ggZGF0YSBmb3IgdGhlIHJlcG9ydCdzIHJlc3VsdCBncmlkLlxuICogVGhlIGFjdHVhbCBmZXRjaGluZyBpcyBkb25lIGJ5IHRoZSBob3N0IGFwcGxpY2F0aW9uIHRocm91Z2ggdGhlXG4gKiBgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXJgIGNvbnRyYWN0LlxuICovXG5cbi8qKlxuICogRGVmaW5lcyBhIHNpbmdsZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHJlcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBkYXRhIHNvdXJjZS4gKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKiogSHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIGRhdGEgc291cmNlLiAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIEVuZHBvaW50IGlkZW50aWZpZXIsIHN0b3JlZCBwcm9jZWR1cmUgbmFtZSwgb3IgcXVlcnkgcmVmZXJlbmNlLiAqL1xuICBlbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKiBIVFRQIG1ldGhvZCBvciBleGVjdXRpb24gbWV0aG9kIGhpbnQuICovXG4gIG1ldGhvZD86ICdHRVQnIHwgJ1BPU1QnIHwgJ1NUT1JFRF9QUk9DRURVUkUnIHwgJ0NVU1RPTSc7XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlciBrZXlzIHRoYXQgdGhpcyBkYXRhIHNvdXJjZSByZXF1aXJlcy5cbiAgICogVGhlc2UgYXJlIHJlc29sdmVkIGZyb20gdGhlIHJlcG9ydCdzIGN1cnJlbnQgcGFyYW1ldGVyIHZhbHVlc1xuICAgKiBiZWZvcmUgY2FsbGluZyB0aGUgYFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyYC5cbiAgICovXG4gIHBhcmFtZXRlcktleXM/OiBzdHJpbmdbXTtcblxuICAvKiogV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGV4ZWN1dGUgdGhpcyBkYXRhIHNvdXJjZSBvbiByZXBvcnQgbG9hZC4gKi9cbiAgYXV0b0V4ZWN1dGU/OiBib29sZWFuO1xuXG4gIC8qKiBDYWNoaW5nIHN0cmF0ZWd5LiAqL1xuICBjYWNoZT86IERhdGFTb3VyY2VDYWNoZURlZmluaXRpb247XG59XG5cbi8qKlxuICogQ2FjaGluZyBjb25maWd1cmF0aW9uIGZvciBhIGRhdGEgc291cmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTb3VyY2VDYWNoZURlZmluaXRpb24ge1xuICAvKiogV2hldGhlciBjYWNoaW5nIGlzIGVuYWJsZWQgZm9yIHRoaXMgZGF0YSBzb3VyY2UuICovXG4gIGVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqIENhY2hlIGR1cmF0aW9uIGluIHNlY29uZHMuICovXG4gIHR0bFNlY29uZHM/OiBudW1iZXI7XG59XG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRhdGFzb3VyY2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZGF0YXNvdXJjZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcG9ydCBkYXRhIHNvdXJjZSBkZWZpbml0aW9ucy5cbiAqXG4gKiBBIGRhdGEgc291cmNlIGRlc2NyaWJlcyBob3cgdG8gZmV0Y2ggZGF0YSBmb3IgdGhlIHJlcG9ydCdzIHJlc3VsdCBncmlkLlxuICogVGhlIGFjdHVhbCBmZXRjaGluZyBpcyBkb25lIGJ5IHRoZSBob3N0IGFwcGxpY2F0aW9uIHRocm91Z2ggdGhlXG4gKiBgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXJgIGNvbnRyYWN0LlxuICovXG5cbi8qKlxuICogRGVmaW5lcyBhIHNpbmdsZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHJlcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBkYXRhIHNvdXJjZS4gKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKiogSHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgdGhlIGRhdGEgc291cmNlLiAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIEVuZHBvaW50IGlkZW50aWZpZXIsIHN0b3JlZCBwcm9jZWR1cmUgbmFtZSwgb3IgcXVlcnkgcmVmZXJlbmNlLiAqL1xuICBlbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKiBIVFRQIG1ldGhvZCBvciBleGVjdXRpb24gbWV0aG9kIGhpbnQuICovXG4gIG1ldGhvZD86ICdHRVQnIHwgJ1BPU1QnIHwgJ1NUT1JFRF9QUk9DRURVUkUnIHwgJ0NVU1RPTSc7XG5cbiAgLyoqIERhdGFiYXNlIHNjaGVtYSAoZGVmYXVsdHMgdG8gJ2RibycpLiAqL1xuICBzY2hlbWE/OiBzdHJpbmc7XG5cbiAgLyoqIEJhY2tlbmQgZXhlY3V0aW9uIHR5cGUuICovXG4gIHR5cGU/OiAnc3RvcmVkX3Byb2NlZHVyZScgfCAndGFibGUnIHwgJ3ZpZXcnIHwgJ3NxbCcgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyIG1hcHBpbmdzLiBWYWx1ZXMgbWF5IGJlIGZpeGVkLCBvciB0b2tlbnM6XG4gICAqIGB7e3Nlc3Npb24uYnJhbmNoSWR9fWAsIGB7e2NvbnRleHQudG9kYXl9fWAsIGB7e2ZpZWxkS2V5fX1gIChjYW52YXMgZmllbGQpLlxuICAgKi9cbiAgcGFyYW1ldGVyTWFwcGluZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcblxuICAvKipcbiAgICogUGFyYW1ldGVyIGtleXMgdGhhdCB0aGlzIGRhdGEgc291cmNlIHJlcXVpcmVzLlxuICAgKiBUaGVzZSBhcmUgcmVzb2x2ZWQgZnJvbSB0aGUgcmVwb3J0J3MgY3VycmVudCBwYXJhbWV0ZXIgdmFsdWVzXG4gICAqIGJlZm9yZSBjYWxsaW5nIHRoZSBgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXJgLlxuICAgKi9cbiAgcGFyYW1ldGVyS2V5cz86IHN0cmluZ1tdO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZSB0aGlzIGRhdGEgc291cmNlIG9uIHJlcG9ydCBsb2FkLiAqL1xuICBhdXRvRXhlY3V0ZT86IGJvb2xlYW47XG5cbiAgLyoqIENhY2hpbmcgc3RyYXRlZ3kuICovXG4gIGNhY2hlPzogRGF0YVNvdXJjZUNhY2hlRGVmaW5pdGlvbjtcbn1cblxuLyoqXG4gKiBDYWNoaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGEgZGF0YSBzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNvdXJjZUNhY2hlRGVmaW5pdGlvbiB7XG4gIC8qKiBXaGV0aGVyIGNhY2hpbmcgaXMgZW5hYmxlZCBmb3IgdGhpcyBkYXRhIHNvdXJjZS4gKi9cbiAgZW5hYmxlZDogYm9vbGVhbjtcblxuICAvKiogQ2FjaGUgZHVyYXRpb24gaW4gc2Vjb25kcy4gKi9cbiAgdHRsU2Vjb25kcz86IG51bWJlcjtcbn1cbiJdfQ==
@@ -10,4 +10,4 @@
10
10
  * the required controls, layout, and bindings at runtime.
11
11
  */
12
12
  export {};
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRlZmluaXRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnREZWZpbml0aW9uIOKAlCB0aGUgY2VudHJhbCBkb21haW4gb2JqZWN0LlxuICpcbiAqIEEgYFJlcG9ydERlZmluaXRpb25gIGlzIGEgY29tcGxldGUsIHZlcnNpb25lZCwgc2VyaWFsaXphYmxlIGRlc2NyaXB0aW9uXG4gKiBvZiBhIHJlcG9ydCBwYWdlLiBJdCBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYm90aCB0aGVcbiAqIERlc2lnbmVyIGFuZCB0aGUgUnVudGltZS5cbiAqXG4gKiBLZXkgcHJpbmNpcGxlOiAqKkEgcmVwb3J0IGlzIGRhdGEsIG5vdCBBbmd1bGFyIHNvdXJjZSBjb2RlLioqXG4gKiBUaGUgbWV0YWRhdGEgaXMgc2F2ZWQvbG9hZGVkIGFzIEpTT04uIEFuZ3VsYXIgZHluYW1pY2FsbHkgY29uc3RydWN0c1xuICogdGhlIHJlcXVpcmVkIGNvbnRyb2xzLCBsYXlvdXQsIGFuZCBiaW5kaW5ncyBhdCBydW50aW1lLlxuICovXG5cbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0UGFyYW1ldGVyRGVmaW5pdGlvbiB9IGZyb20gJy4vcmVwb3J0LXBhcmFtZXRlci5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4vcmVwb3J0LWRhdGFzb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0R3JpZERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydExheW91dERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1sYXlvdXQubW9kZWwnO1xuXG4vKipcbiAqIFBlcm1pc3Npb24gc2V0dGluZ3MgZm9yIGEgcmVwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFBlcm1pc3Npb25EZWZpbml0aW9uIHtcbiAgLyoqIFJvbGVzIHRoYXQgY2FuIHZpZXcvZXhlY3V0ZSB0aGlzIHJlcG9ydC4gKi9cbiAgdmlld1JvbGVzPzogc3RyaW5nW107XG5cbiAgLyoqIFJvbGVzIHRoYXQgY2FuIGVkaXQgdGhpcyByZXBvcnQgaW4gdGhlIGRlc2lnbmVyLiAqL1xuICBlZGl0Um9sZXM/OiBzdHJpbmdbXTtcblxuICAvKiogV2hldGhlciB0aGlzIHJlcG9ydCBpcyBwdWJsaWNseSBhY2Nlc3NpYmxlLiAqL1xuICBpc1B1YmxpYz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3VtbWFyeSBpbmZvcm1hdGlvbiBmb3IgbGlzdGluZyByZXBvcnRzICh3aXRob3V0IGZ1bGwgZGVmaW5pdGlvbikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U3VtbWFyeSB7XG4gIC8qKiBVbmlxdWUgcmVwb3J0IGlkZW50aWZpZXIuICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqIFJlcG9ydCBkaXNwbGF5IG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKiogQnJpZWYgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKiBDYXRlZ29yeSBvciBncm91cCBmb3Igb3JnYW5pemluZyByZXBvcnRzLiAqL1xuICBjYXRlZ29yeT86IHN0cmluZztcblxuICAvKiogQ3VycmVudCB2ZXJzaW9uIG51bWJlci4gKi9cbiAgdmVyc2lvbjogbnVtYmVyO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSByZXBvcnQgaXMgcHVibGlzaGVkICh2cy4gZHJhZnQpLiAqL1xuICBpc1B1Ymxpc2hlZDogYm9vbGVhbjtcblxuICAvKiogSVNPIGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24uICovXG4gIGxhc3RNb2RpZmllZD86IHN0cmluZztcblxuICAvKiogVXNlciB3aG8gbGFzdCBtb2RpZmllZC4gKi9cbiAgbGFzdE1vZGlmaWVkQnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29tcGxldGUgcmVwb3J0IGRlZmluaXRpb24g4oCUIHRoZSBzb3VyY2Ugb2YgdHJ1dGguXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJpZFwiOiBcInNhbGVzLXJlZ2lzdGVyXCIsXG4gKiAgIFwibmFtZVwiOiBcIlNhbGVzIFJlZ2lzdGVyXCIsXG4gKiAgIFwic2NoZW1hVmVyc2lvblwiOiAxLFxuICogICBcInZlcnNpb25cIjogMSxcbiAqICAgXCJsYXlvdXRcIjogeyBcImNvbHVtbnNcIjogNCwgXCJnYXBcIjogMTYgfSxcbiAqICAgXCJjb21wb25lbnRzXCI6IFsuLi5dLFxuICogICBcInBhcmFtZXRlcnNcIjogWy4uLl0sXG4gKiAgIFwiZGF0YVNvdXJjZXNcIjogWy4uLl0sXG4gKiAgIFwiZ3JpZFwiOiB7IC4uLiB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnREZWZpbml0aW9uIHtcbiAgLyoqIFVuaXF1ZSByZXBvcnQgaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKiogRGlzcGxheSBuYW1lLiAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIEJyaWVmIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKiogTWV0YWRhdGEgc2NoZW1hIHZlcnNpb24g4oCUIHVzZWQgZm9yIG1pZ3JhdGlvbi4gKi9cbiAgc2NoZW1hVmVyc2lvbjogbnVtYmVyO1xuXG4gIC8qKiBSZXBvcnQgY29udGVudCB2ZXJzaW9uIOKAlCBpbmNyZW1lbnRlZCBvbiBlYWNoIHNhdmUuICovXG4gIHZlcnNpb246IG51bWJlcjtcblxuICAvKiogQ2F0ZWdvcnkgb3IgZ3JvdXAgZm9yIG9yZ2FuaXppbmcgcmVwb3J0cy4gKi9cbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG5cbiAgLyoqIFBhZ2UgbGF5b3V0IGNvbmZpZ3VyYXRpb24uICovXG4gIGxheW91dDogUmVwb3J0TGF5b3V0RGVmaW5pdGlvbjtcblxuICAvKiogQ29tcG9uZW50cyAoY29udHJvbHMsIGJ1dHRvbnMsIGRpc3BsYXkgZWxlbWVudHMpIG9uIHRoaXMgcmVwb3J0IHBhZ2UuICovXG4gIGNvbXBvbmVudHM6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb25bXTtcblxuICAvKiogUGFyYW1ldGVycyB0aGF0IGJyaWRnZSBpbnB1dHMgdG8gZGF0YSBzb3VyY2VzLiAqL1xuICBwYXJhbWV0ZXJzOiBSZXBvcnRQYXJhbWV0ZXJEZWZpbml0aW9uW107XG5cbiAgLyoqIERhdGEgc291cmNlcyBmb3IgZXhlY3V0aW5nIHF1ZXJpZXMuICovXG4gIGRhdGFTb3VyY2VzOiBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbltdO1xuXG4gIC8qKiBSZXN1bHQgZ3JpZCBkZWZpbml0aW9uLiAqL1xuICBncmlkPzogUmVwb3J0R3JpZERlZmluaXRpb247XG5cbiAgLyoqIEFjY2VzcyBjb250cm9sIHNldHRpbmdzLiAqL1xuICBwZXJtaXNzaW9ucz86IFJlcG9ydFBlcm1pc3Npb25EZWZpbml0aW9uO1xuXG4gIC8qKiBDdXN0b20gbWV0YWRhdGEgZm9yIGhvc3Qtc3BlY2lmaWMgZXh0ZW5zaW9ucy4gKi9cbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKiogSVNPIGRhdGUgb2YgY3JlYXRpb24uICovXG4gIGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKiogSVNPIGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24uICovXG4gIHVwZGF0ZWRBdD86IHN0cmluZztcblxuICAvKiogVXNlciB3aG8gbGFzdCBtb2RpZmllZC4gKi9cbiAgdXBkYXRlZEJ5Pzogc3RyaW5nO1xufVxuIl19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRlZmluaXRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnREZWZpbml0aW9uIOKAlCB0aGUgY2VudHJhbCBkb21haW4gb2JqZWN0LlxuICpcbiAqIEEgYFJlcG9ydERlZmluaXRpb25gIGlzIGEgY29tcGxldGUsIHZlcnNpb25lZCwgc2VyaWFsaXphYmxlIGRlc2NyaXB0aW9uXG4gKiBvZiBhIHJlcG9ydCBwYWdlLiBJdCBpcyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgYm90aCB0aGVcbiAqIERlc2lnbmVyIGFuZCB0aGUgUnVudGltZS5cbiAqXG4gKiBLZXkgcHJpbmNpcGxlOiAqKkEgcmVwb3J0IGlzIGRhdGEsIG5vdCBBbmd1bGFyIHNvdXJjZSBjb2RlLioqXG4gKiBUaGUgbWV0YWRhdGEgaXMgc2F2ZWQvbG9hZGVkIGFzIEpTT04uIEFuZ3VsYXIgZHluYW1pY2FsbHkgY29uc3RydWN0c1xuICogdGhlIHJlcXVpcmVkIGNvbnRyb2xzLCBsYXlvdXQsIGFuZCBiaW5kaW5ncyBhdCBydW50aW1lLlxuICovXG5cbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0UGFyYW1ldGVyRGVmaW5pdGlvbiB9IGZyb20gJy4vcmVwb3J0LXBhcmFtZXRlci5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlRGVmaW5pdGlvbiB9IGZyb20gJy4vcmVwb3J0LWRhdGFzb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0R3JpZERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydExheW91dERlZmluaXRpb24gfSBmcm9tICcuL3JlcG9ydC1sYXlvdXQubW9kZWwnO1xuXG4vKipcbiAqIFBlcm1pc3Npb24gc2V0dGluZ3MgZm9yIGEgcmVwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydFBlcm1pc3Npb25EZWZpbml0aW9uIHtcbiAgLyoqIFJvbGVzIHRoYXQgY2FuIHZpZXcvZXhlY3V0ZSB0aGlzIHJlcG9ydC4gKi9cbiAgdmlld1JvbGVzPzogc3RyaW5nW107XG5cbiAgLyoqIFJvbGVzIHRoYXQgY2FuIGVkaXQgdGhpcyByZXBvcnQgaW4gdGhlIGRlc2lnbmVyLiAqL1xuICBlZGl0Um9sZXM/OiBzdHJpbmdbXTtcblxuICAvKiogV2hldGhlciB0aGlzIHJlcG9ydCBpcyBwdWJsaWNseSBhY2Nlc3NpYmxlLiAqL1xuICBpc1B1YmxpYz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3VtbWFyeSBpbmZvcm1hdGlvbiBmb3IgbGlzdGluZyByZXBvcnRzICh3aXRob3V0IGZ1bGwgZGVmaW5pdGlvbikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0U3VtbWFyeSB7XG4gIC8qKiBVbmlxdWUgcmVwb3J0IGlkZW50aWZpZXIuICovXG4gIGlkOiBzdHJpbmc7XG5cbiAgLyoqIFJlcG9ydCBkaXNwbGF5IG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKiogQnJpZWYgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKiBDYXRlZ29yeSBvciBncm91cCBmb3Igb3JnYW5pemluZyByZXBvcnRzLiAqL1xuICBjYXRlZ29yeT86IHN0cmluZztcblxuICAvKiogQ3VycmVudCB2ZXJzaW9uIG51bWJlci4gKi9cbiAgdmVyc2lvbjogbnVtYmVyO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSByZXBvcnQgaXMgcHVibGlzaGVkICh2cy4gZHJhZnQpLiAqL1xuICBpc1B1Ymxpc2hlZDogYm9vbGVhbjtcblxuICAvKiogSVNPIGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24uICovXG4gIGxhc3RNb2RpZmllZD86IHN0cmluZztcblxuICAvKiogVXNlciB3aG8gbGFzdCBtb2RpZmllZC4gKi9cbiAgbGFzdE1vZGlmaWVkQnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29tcGxldGUgcmVwb3J0IGRlZmluaXRpb24g4oCUIHRoZSBzb3VyY2Ugb2YgdHJ1dGguXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJpZFwiOiBcInNhbGVzLXJlZ2lzdGVyXCIsXG4gKiAgIFwibmFtZVwiOiBcIlNhbGVzIFJlZ2lzdGVyXCIsXG4gKiAgIFwic2NoZW1hVmVyc2lvblwiOiAxLFxuICogICBcInZlcnNpb25cIjogMSxcbiAqICAgXCJsYXlvdXRcIjogeyBcImNvbHVtbnNcIjogNCwgXCJnYXBcIjogMTYgfSxcbiAqICAgXCJjb21wb25lbnRzXCI6IFsuLi5dLFxuICogICBcInBhcmFtZXRlcnNcIjogWy4uLl0sXG4gKiAgIFwiZGF0YVNvdXJjZXNcIjogWy4uLl0sXG4gKiAgIFwiZ3JpZFwiOiB7IC4uLiB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnREZWZpbml0aW9uIHtcbiAgLyoqIFVuaXF1ZSByZXBvcnQgaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKiogRGlzcGxheSBuYW1lLiAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqIEJyaWVmIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKiogTWV0YWRhdGEgc2NoZW1hIHZlcnNpb24g4oCUIHVzZWQgZm9yIG1pZ3JhdGlvbi4gKi9cbiAgc2NoZW1hVmVyc2lvbjogbnVtYmVyO1xuXG4gIC8qKiBSZXBvcnQgY29udGVudCB2ZXJzaW9uIOKAlCBpbmNyZW1lbnRlZCBvbiBlYWNoIHNhdmUuICovXG4gIHZlcnNpb246IG51bWJlcjtcblxuICAvKiogQ2F0ZWdvcnkgb3IgZ3JvdXAgZm9yIG9yZ2FuaXppbmcgcmVwb3J0cy4gKi9cbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHJlcG9ydCBpcyBwdWJsaXNoZWQgKHZzLiBkcmFmdCkuICovXG4gIGlzUHVibGlzaGVkPzogYm9vbGVhbjtcblxuICAvKiogUGFnZSBsYXlvdXQgY29uZmlndXJhdGlvbi4gKi9cbiAgbGF5b3V0OiBSZXBvcnRMYXlvdXREZWZpbml0aW9uO1xuXG4gIC8qKiBDb21wb25lbnRzIChjb250cm9scywgYnV0dG9ucywgZGlzcGxheSBlbGVtZW50cykgb24gdGhpcyByZXBvcnQgcGFnZS4gKi9cbiAgY29tcG9uZW50czogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbltdO1xuXG4gIC8qKiBQYXJhbWV0ZXJzIHRoYXQgYnJpZGdlIGlucHV0cyB0byBkYXRhIHNvdXJjZXMuICovXG4gIHBhcmFtZXRlcnM6IFJlcG9ydFBhcmFtZXRlckRlZmluaXRpb25bXTtcblxuICAvKiogRGF0YSBzb3VyY2VzIGZvciBleGVjdXRpbmcgcXVlcmllcy4gKi9cbiAgZGF0YVNvdXJjZXM6IFJlcG9ydERhdGFTb3VyY2VEZWZpbml0aW9uW107XG5cbiAgLyoqIFJlc3VsdCBncmlkIGRlZmluaXRpb24uICovXG4gIGdyaWQ/OiBSZXBvcnRHcmlkRGVmaW5pdGlvbjtcblxuICAvKiogQWNjZXNzIGNvbnRyb2wgc2V0dGluZ3MuICovXG4gIHBlcm1pc3Npb25zPzogUmVwb3J0UGVybWlzc2lvbkRlZmluaXRpb247XG5cbiAgLyoqIEN1c3RvbSBtZXRhZGF0YSBmb3IgaG9zdC1zcGVjaWZpYyBleHRlbnNpb25zLiAqL1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBJU08gZGF0ZSBvZiBjcmVhdGlvbi4gKi9cbiAgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKiBJU08gZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbi4gKi9cbiAgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKiBVc2VyIHdobyBsYXN0IG1vZGlmaWVkLiAqL1xuICB1cGRhdGVkQnk/OiBzdHJpbmc7XG59XG4iXX0=
@@ -7,4 +7,4 @@
7
7
  * whatever the host's grid component (BWays-grid, AG Grid, etc.) expects.
8
8
  */
9
9
  export {};
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnQgZ3JpZCBkZWZpbml0aW9ucy5cbiAqXG4gKiBEZXNjcmliZXMgdGhlIGxvZ2ljYWwgc3RydWN0dXJlIG9mIHRoZSByZXN1bHQgZ3JpZCDigJQgY29sdW1ucywgZmllbGRzLFxuICogZm9ybWF0dGluZywgc29ydGluZywgYW5kIGZpbHRlcmluZy4gVGhpcyBpcyAqKm5vdCoqIGEgc3BlY2lmaWMgZ3JpZFxuICogbGlicmFyeSdzIEFQSS4gVGhlIGBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50YCB0cmFuc2xhdGVzIHRoaXMgaW50b1xuICogd2hhdGV2ZXIgdGhlIGhvc3QncyBncmlkIGNvbXBvbmVudCAoQldheXMtZ3JpZCwgQUcgR3JpZCwgZXRjLikgZXhwZWN0cy5cbiAqL1xuXG4vKipcbiAqIERlZmluZXMgdGhlIHJlc3VsdCBncmlkIGZvciBhIHJlcG9ydC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRHcmlkRGVmaW5pdGlvbiB7XG4gIC8qKiBUaGUgZGF0YSBzb3VyY2UgSUQgdGhhdCBwcm92aWRlcyBkYXRhIGZvciB0aGlzIGdyaWQuICovXG4gIGRhdGFTb3VyY2VJZDogc3RyaW5nO1xuXG4gIC8qKiBDb2x1bW4gZGVmaW5pdGlvbnMuICovXG4gIGNvbHVtbnM6IEdyaWRDb2x1bW5EZWZpbml0aW9uW107XG5cbiAgLyoqIEdyaWQtbGV2ZWwgb3B0aW9ucy4gKi9cbiAgb3B0aW9ucz86IEdyaWRPcHRpb25zRGVmaW5pdGlvbjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgc2luZ2xlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IGdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZENvbHVtbkRlZmluaXRpb24ge1xuICAvKiogVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGRhdGEgcm93IG9iamVjdC4gKi9cbiAgZmllbGQ6IHN0cmluZztcblxuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIGNvbHVtbiBoZWFkZXIuICovXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqIENvbHVtbiBkYXRhIHR5cGUg4oCUIHVzZWQgZm9yIGZvcm1hdHRpbmcgYW5kIHNvcnRpbmcuICovXG4gIGRhdGFUeXBlPzogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICdib29sZWFuJyB8ICdjdXJyZW5jeSc7XG5cbiAgLyoqIERpc3BsYXkgZm9ybWF0IChlLmcuLCAnZGQvTU0veXl5eScgZm9yIGRhdGVzLCAnMS4yLTInIGZvciBudW1iZXJzKS4gKi9cbiAgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKiBDb2x1bW4gd2lkdGggKENTUyB2YWx1ZSwgZS5nLiwgJzE1MHB4JywgJzIwJScpLiAqL1xuICB3aWR0aD86IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyBzb3J0YWJsZS4gRGVmYXVsdHMgdG8gYHRydWVgLiAqL1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBjb2x1bW4gaXMgZmlsdGVyYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gKi9cbiAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFRleHQgYWxpZ25tZW50LiAqL1xuICBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyB2aXNpYmxlLiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIHZpc2libGU/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgY29sdW1uIGlzIHBpbm5lZC9mcm96ZW4uICovXG4gIHBpbm5lZD86ICdsZWZ0JyB8ICdyaWdodCcgfCBmYWxzZTtcblxuICAvKiogQ29sdW1uIGRpc3BsYXkgb3JkZXIgKGxvd2VyID0gZmlyc3QpLiAqL1xuICBvcmRlcj86IG51bWJlcjtcblxuICAvKiogQWdncmVnYXRlIGZ1bmN0aW9uIHRvIGRpc3BsYXkgaW4gYSBmb290ZXIgcm93LiAqL1xuICBhZ2dyZWdhdGU/OiAnc3VtJyB8ICdhdmcnIHwgJ2NvdW50JyB8ICdtaW4nIHwgJ21heCcgfCAnbm9uZSc7XG59XG5cbi8qKlxuICogR3JpZC1sZXZlbCBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRPcHRpb25zRGVmaW5pdGlvbiB7XG4gIC8qKiBOdW1iZXIgb2Ygcm93cyBwZXIgcGFnZS4gKi9cbiAgcGFnZVNpemU/OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgcGFnaW5hdGlvbiBpcyBlbmFibGVkLiAqL1xuICBwYWdpbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciByb3cgc2VsZWN0aW9uIGlzIGVuYWJsZWQuICovXG4gIHNlbGVjdGFibGU/OiBib29sZWFuO1xuXG4gIC8qKiBTZWxlY3Rpb24gbW9kZSB3aGVuIHNlbGVjdGFibGUgaXMgdHJ1ZS4gKi9cbiAgc2VsZWN0aW9uTW9kZT86ICdzaW5nbGUnIHwgJ211bHRpcGxlJztcblxuICAvKiogV2hldGhlciB0byBzaG93IHJvdyBudW1iZXJzLiAqL1xuICBzaG93Um93TnVtYmVycz86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgY29sdW1uIHJlb3JkZXJpbmcuICovXG4gIGFsbG93Q29sdW1uUmVvcmRlcj86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgZXhwb3J0aW5nLiAqL1xuICBhbGxvd0V4cG9ydD86IGJvb2xlYW47XG5cbiAgLyoqIEV4cG9ydCBmb3JtYXRzIHRvIG9mZmVyLiAqL1xuICBleHBvcnRGb3JtYXRzPzogKCdjc3YnIHwgJ2V4Y2VsJyB8ICdwZGYnKVtdO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgYSBmb290ZXIgcm93IHdpdGggYWdncmVnYXRlcy4gKi9cbiAgc2hvd0Zvb3Rlcj86IGJvb2xlYW47XG5cbiAgLyoqIEhlaWdodCBvZiB0aGUgZ3JpZCAoQ1NTIHZhbHVlKS4gKi9cbiAgaGVpZ2h0Pzogc3RyaW5nO1xufVxuIl19
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnQgZ3JpZCBkZWZpbml0aW9ucy5cbiAqXG4gKiBEZXNjcmliZXMgdGhlIGxvZ2ljYWwgc3RydWN0dXJlIG9mIHRoZSByZXN1bHQgZ3JpZCDigJQgY29sdW1ucywgZmllbGRzLFxuICogZm9ybWF0dGluZywgc29ydGluZywgYW5kIGZpbHRlcmluZy4gVGhpcyBpcyAqKm5vdCoqIGEgc3BlY2lmaWMgZ3JpZFxuICogbGlicmFyeSdzIEFQSS4gVGhlIGBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50YCB0cmFuc2xhdGVzIHRoaXMgaW50b1xuICogd2hhdGV2ZXIgdGhlIGhvc3QncyBncmlkIGNvbXBvbmVudCAoQldheXMtZ3JpZCwgQUcgR3JpZCwgZXRjLikgZXhwZWN0cy5cbiAqL1xuXG4vKipcbiAqIEludGVyYWN0aXZlIGFjdGlvbiB0cmlnZ2VyZWQgd2hlbiBhIHJvdyBvciBjZWxsIGluIHRoZSByZXN1bHQgZ3JpZCBpcyBjbGlja2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRSb3dDbGlja0FjdGlvbiB7XG4gIC8qKlxuICAgKiBBY3Rpb24gdHlwZTpcbiAgICogLSAnZHJpbGxkb3duLXJlcG9ydCc6IG5hdmlnYXRlcyB0byBvciBvcGVucyBhIHRhcmdldCBzdWItcmVwb3J0XG4gICAqIC0gJ29wZW4tZHJhd2VyJzogb3BlbnMgYW4gaW4tcGFnZSBzbGlkZS1vdmVyIGRyYXdlciBydW5uaW5nIHRoZSB0YXJnZXQgcmVwb3J0XG4gICAqIC0gJ25hdmlnYXRlJzogb3BlbnMgYW4gZXh0ZXJuYWwgVVJMIG9yIGFwcGxpY2F0aW9uIHJvdXRlXG4gICAqIC0gJ2VtaXQtY3VzdG9tJzogZW1pdHMgYSBjdXN0b20gZXZlbnQgZm9yIHRoZSBob3N0IGFwcGxpY2F0aW9uXG4gICAqL1xuICB0eXBlOiAnZHJpbGxkb3duLXJlcG9ydCcgfCAnb3Blbi1kcmF3ZXInIHwgJ25hdmlnYXRlJyB8ICdlbWl0LWN1c3RvbSc7XG5cbiAgLyoqIFRhcmdldCByZXBvcnQgSUQgdG8gb3Blbi9kcmlsbCBpbnRvIChlLmcuICdyZXBfY3VzdG9tZXJfbGVkZ2VyJykuICovXG4gIHRhcmdldFJlcG9ydElkPzogc3RyaW5nO1xuXG4gIC8qKiBFeHRlcm5hbCBVUkwgb3Igcm91dGUgdGVtcGxhdGUgaWYgdHlwZSA9PT0gJ25hdmlnYXRlJy4gU3VwcG9ydHMgYHt7cm93LmZpZWxkfX1gIHJlcGxhY2VtZW50cy4gKi9cbiAgdGFyZ2V0VXJsPzogc3RyaW5nO1xuXG4gIC8qKiBUYXJnZXQgYnJvd3NpbmcgY29udGV4dDogJ19ibGFuaycgfCAnX3NlbGYnIHdoZW4gbmF2aWdhdGluZy4gKi9cbiAgb3Blbk5ld1RhYj86IGJvb2xlYW47XG5cbiAgLyoqIFRpdGxlIGZvciB0aGUgc2xpZGUtb3ZlciBkcmF3ZXIgb3IgZGlhbG9nLiBTdXBwb3J0cyBge3tyb3cuZmllbGR9fWAgcmVwbGFjZW1lbnRzLiAqL1xuICBkcmF3ZXJUaXRsZT86IHN0cmluZztcblxuICAvKiogV2lkdGggb2YgdGhlIHNsaWRlIGRyYXdlciAoQ1NTIHZhbHVlLCBlLmcuICc2ODBweCcsICc1MHZ3JykuIERlZmF1bHQ6ICc3MjBweCcuICovXG4gIGRyYXdlcldpZHRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXBzIHBhcmFtZXRlciBrZXlzIG9mIHRoZSB0YXJnZXQgc3ViLXJlcG9ydCB0byBleHByZXNzaW9uczpcbiAgICogZS5nLiB7IFwiQEN1c3RDb2RlXCI6IFwicm93LmN1c3RvbWVySWRcIiwgXCJAQnJhbmNoSWRcIjogXCJzZXNzaW9uLmJyYW5jaElkXCIsIFwiZnJvbURhdGVcIjogXCJmb3JtLmZyb21EYXRlXCIgfVxuICAgKi9cbiAgcGFyYW1ldGVyTWFwcGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqIEN1c3RvbSBldmVudCBvciBhY3Rpb24gaWRlbnRpZmllciB3aGVuIHR5cGUgPT09ICdlbWl0LWN1c3RvbScuICovXG4gIGN1c3RvbUFjdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgcmVzdWx0IGdyaWQgZm9yIGEgcmVwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyaWREZWZpbml0aW9uIHtcbiAgLyoqIFRoZSBkYXRhIHNvdXJjZSBJRCB0aGF0IHByb3ZpZGVzIGRhdGEgZm9yIHRoaXMgZ3JpZC4gKi9cbiAgZGF0YVNvdXJjZUlkOiBzdHJpbmc7XG5cbiAgLyoqIENvbHVtbiBkZWZpbml0aW9ucy4gKi9cbiAgY29sdW1uczogR3JpZENvbHVtbkRlZmluaXRpb25bXTtcblxuICAvKiogR3JpZC1sZXZlbCBvcHRpb25zLiAqL1xuICBvcHRpb25zPzogR3JpZE9wdGlvbnNEZWZpbml0aW9uO1xuXG4gIC8qKiBEZWNsYXJhdGl2ZSByb3ctY2xpY2sgYWN0aW9uIGZvciBtYXN0ZXItZGV0YWlsIGRyaWxsLWRvd25zLiAqL1xuICByb3dDbGlja0FjdGlvbj86IEdyaWRSb3dDbGlja0FjdGlvbjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgc2luZ2xlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IGdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZENvbHVtbkRlZmluaXRpb24ge1xuICAvKiogVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGRhdGEgcm93IG9iamVjdC4gKi9cbiAgZmllbGQ6IHN0cmluZztcblxuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIGNvbHVtbiBoZWFkZXIuICovXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqIENvbHVtbiBkYXRhIHR5cGUg4oCUIHVzZWQgZm9yIGZvcm1hdHRpbmcgYW5kIHNvcnRpbmcuICovXG4gIGRhdGFUeXBlPzogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICdib29sZWFuJyB8ICdjdXJyZW5jeSc7XG5cbiAgLyoqIERpc3BsYXkgZm9ybWF0IChlLmcuLCAnZGQvTU0veXl5eScgZm9yIGRhdGVzLCAnMS4yLTInIGZvciBudW1iZXJzKS4gKi9cbiAgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKiBDb2x1bW4gd2lkdGggKENTUyB2YWx1ZSwgZS5nLiwgJzE1MHB4JywgJzIwJScpLiAqL1xuICB3aWR0aD86IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyBzb3J0YWJsZS4gRGVmYXVsdHMgdG8gYHRydWVgLiAqL1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBjb2x1bW4gaXMgZmlsdGVyYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gKi9cbiAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFRleHQgYWxpZ25tZW50LiAqL1xuICBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyB2aXNpYmxlLiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIHZpc2libGU/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgY29sdW1uIGlzIHBpbm5lZC9mcm96ZW4uICovXG4gIHBpbm5lZD86ICdsZWZ0JyB8ICdyaWdodCcgfCBmYWxzZTtcblxuICAvKiogQ29sdW1uIGRpc3BsYXkgb3JkZXIgKGxvd2VyID0gZmlyc3QpLiAqL1xuICBvcmRlcj86IG51bWJlcjtcblxuICAvKiogQWdncmVnYXRlIGZ1bmN0aW9uIHRvIGRpc3BsYXkgaW4gYSBmb290ZXIgcm93LiAqL1xuICBhZ2dyZWdhdGU/OiAnc3VtJyB8ICdhdmcnIHwgJ2NvdW50JyB8ICdtaW4nIHwgJ21heCcgfCAnbm9uZSc7XG5cbiAgLyoqIE9wdGlvbmFsIGNlbGwtc3BlY2lmaWMgY2xpY2sgYWN0aW9uIChvdmVycmlkZXMgZ3JpZC1sZXZlbCByb3dDbGlja0FjdGlvbiBmb3IgdGhpcyBjb2x1bW4pLiAqL1xuICBhY3Rpb24/OiBHcmlkUm93Q2xpY2tBY3Rpb247XG59XG5cbi8qKlxuICogR3JpZC1sZXZlbCBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRPcHRpb25zRGVmaW5pdGlvbiB7XG4gIC8qKiBOdW1iZXIgb2Ygcm93cyBwZXIgcGFnZS4gKi9cbiAgcGFnZVNpemU/OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgcGFnaW5hdGlvbiBpcyBlbmFibGVkLiAqL1xuICBwYWdpbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciByb3cgc2VsZWN0aW9uIGlzIGVuYWJsZWQuICovXG4gIHNlbGVjdGFibGU/OiBib29sZWFuO1xuXG4gIC8qKiBTZWxlY3Rpb24gbW9kZSB3aGVuIHNlbGVjdGFibGUgaXMgdHJ1ZS4gKi9cbiAgc2VsZWN0aW9uTW9kZT86ICdzaW5nbGUnIHwgJ211bHRpcGxlJztcblxuICAvKiogV2hldGhlciB0byBzaG93IHJvdyBudW1iZXJzLiAqL1xuICBzaG93Um93TnVtYmVycz86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgY29sdW1uIHJlb3JkZXJpbmcuICovXG4gIGFsbG93Q29sdW1uUmVvcmRlcj86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgZXhwb3J0aW5nLiAqL1xuICBhbGxvd0V4cG9ydD86IGJvb2xlYW47XG5cbiAgLyoqIEV4cG9ydCBmb3JtYXRzIHRvIG9mZmVyLiAqL1xuICBleHBvcnRGb3JtYXRzPzogKCdjc3YnIHwgJ2V4Y2VsJyB8ICdwZGYnKVtdO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgYSBmb290ZXIgcm93IHdpdGggYWdncmVnYXRlcy4gKi9cbiAgc2hvd0Zvb3Rlcj86IGJvb2xlYW47XG5cbiAgLyoqIEhlaWdodCBvZiB0aGUgZ3JpZCAoQ1NTIHZhbHVlKS4gKi9cbiAgaGVpZ2h0Pzogc3RyaW5nO1xuXG4gIC8qKiBBY3RpdmUgY29sdW1uIGdyb3VwaW5nIGZpZWxkcyBpbiBvcmRlciAoZS5nLiBbJ2JyYW5jaCcsICdjdXN0b21lciddKS4gKi9cbiAgZ3JvdXBNb2RlbD86IHN0cmluZ1tdO1xuXG4gIC8qKiBBY3RpdmUgc29ydCBtb2RlbCBkZWZpbml0aW9ucy4gKi9cbiAgc29ydE1vZGVsPzogdW5rbm93bltdO1xuXG4gIC8qKiBDb21wbGV0ZSBzZXJpYWxpemVkIGdyaWQgcmVwb3J0IHN0YXRlIChmaWx0ZXJzLCBoaWdobGlnaHRzLCBncm91cHMpLiAqL1xuICByZXBvcnRTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBWaWV3IHByZXNldHMgLyBzYXZlZCBjdXN0b20gZ3JpZCB2aWV3cy4gKi9cbiAgcHJlc2V0cz86IHVua25vd25bXTtcblxuICAvKiogRGVjbGFyYXRpdmUgcm93LWNsaWNrIGFjdGlvbiBmb3IgbWFzdGVyLWRldGFpbCBkcmlsbC1kb3ducy4gKi9cbiAgcm93Q2xpY2tBY3Rpb24/OiBHcmlkUm93Q2xpY2tBY3Rpb247XG59XG4iXX0=
@@ -79,7 +79,9 @@ export class ReportSessionContextService {
79
79
  }
80
80
  }
81
81
  const manualMap = this.manualRuntimeContext();
82
+ const autoDetected = this.detectBrowserSession();
82
83
  return {
84
+ ...autoDetected,
83
85
  ...providerMap,
84
86
  ...tokenMap,
85
87
  ...manualMap,
@@ -186,16 +188,58 @@ export class ReportSessionContextService {
186
188
  return {};
187
189
  }
188
190
  }
191
+ /**
192
+ * Safely detects session parameters from host project browser storage
193
+ * (sessionStorage: user_Info, currentUser; localStorage: currentUser, CompanyData, user_Info).
194
+ */
195
+ detectBrowserSession() {
196
+ const result = {};
197
+ if (typeof window === 'undefined')
198
+ return result;
199
+ const sources = [
200
+ { storage: typeof sessionStorage !== 'undefined' ? sessionStorage : null, key: 'user_Info' },
201
+ { storage: typeof localStorage !== 'undefined' ? localStorage : null, key: 'currentUser' },
202
+ { storage: typeof localStorage !== 'undefined' ? localStorage : null, key: 'CompanyData' },
203
+ { storage: typeof sessionStorage !== 'undefined' ? sessionStorage : null, key: 'currentUser' },
204
+ { storage: typeof localStorage !== 'undefined' ? localStorage : null, key: 'user_Info' },
205
+ ];
206
+ for (const src of sources) {
207
+ if (!src.storage)
208
+ continue;
209
+ try {
210
+ const item = src.storage.getItem(src.key);
211
+ if (item) {
212
+ const parsed = JSON.parse(item);
213
+ if (parsed && typeof parsed === 'object') {
214
+ for (const [k, v] of Object.entries(parsed)) {
215
+ if (v !== undefined &&
216
+ v !== null &&
217
+ (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')) {
218
+ if (!(k in result)) {
219
+ result[k] = v;
220
+ }
221
+ }
222
+ }
223
+ }
224
+ }
225
+ }
226
+ catch {
227
+ // Ignore JSON parse errors in storage
228
+ }
229
+ }
230
+ return result;
231
+ }
189
232
  /**
190
233
  * Normalizes a parameter or session key into a lowercase alphanumeric string
191
234
  * for reliable, case-insensitive, and symbol-insensitive matching.
192
- * E.g. '@BranchId' -> 'branchid', 'branch_id' -> 'branchid', 'BranchID' -> 'branchid'
235
+ * Strips SQL Server Hungarian type prefixes (e.g. '@chrCompanyId' -> 'companyid').
193
236
  */
194
237
  normalizeKey(key) {
195
238
  if (!key || typeof key !== 'string')
196
239
  return '';
197
240
  return key
198
241
  .replace(/^@+/, '')
242
+ .replace(/^(chr|int|vchr|nchr|dt|str|num|bit|dec|flt)+/i, '')
199
243
  .replace(/[_\-\s]+/g, '')
200
244
  .toLowerCase();
201
245
  }
@@ -231,10 +275,11 @@ export class ReportSessionContextService {
231
275
  }
232
276
  // 3. Common ERP synonym groups (bidirectional matching)
233
277
  const synonymGroups = [
234
- ['branch', 'branchid', 'bid', 'branchcode', 'locationid', 'location'],
278
+ ['branch', 'branchid', 'bid', 'branchcode', 'locationid', 'location', 'compunit', 'compunitid', 'unitcode', 'unitid', 'compunits'],
235
279
  ['company', 'companyid', 'cid', 'companycode', 'tenant', 'tenantid'],
236
- ['user', 'userid', 'uid', 'usercode', 'operatorid', 'loginuser'],
237
- ['financialyear', 'financialyearid', 'yearid', 'fyear', 'fiscalyear'],
280
+ ['user', 'userid', 'uid', 'usercode', 'operatorid', 'loginuser', 'username'],
281
+ ['financialyear', 'financialyearid', 'yearid', 'fyear', 'fiscalyear', 'finyear'],
282
+ ['loginidentity', 'login_identity', 'statuscode', 'status_code'],
238
283
  ['org', 'orgid', 'organization', 'organizationid'],
239
284
  ];
240
285
  for (const group of synonymGroups) {
@@ -311,4 +356,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
311
356
  providedIn: 'root',
312
357
  }]
313
358
  }], ctorParameters: () => [] });
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUVWLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsR0FLeEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFrQm5FOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFDckIsU0FBUyxHQUFHLE1BQU0sQ0FBOEIsc0JBQXNCLEVBQUU7UUFDdkYsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDLENBQUM7SUFDYyxlQUFlLEdBQUcsTUFBTSxDQUFnQyx1QkFBdUIsRUFBRTtRQUNoRyxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUVILHdHQUF3RztJQUN2RixvQkFBb0IsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELHFCQUFxQixHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDdEQsdUJBQXVCLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUVqRSxhQUFhLENBQWdCO0lBQzdCLFdBQVcsQ0FBZ0I7SUFFbkM7Ozs7T0FJRztJQUNNLGNBQWMsR0FBOEIsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNqRSxJQUFJLFdBQVcsR0FBc0IsRUFBRSxDQUFDO1FBQ3hDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3JELElBQUksT0FBTyxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQzlCLE1BQU0sR0FBRyxHQUFJLEdBQStCLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQ25DLFdBQVcsR0FBRyxHQUFHLENBQUM7b0JBQ3BCLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM3QixXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQy9DLENBQUM7cUJBQU0sSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDOUQsV0FBVyxHQUFHLEdBQXdCLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLHFFQUFxRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNGLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxRQUFRLEdBQXNCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDMUMsQ0FBQztxQkFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDaEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUM3QixJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUM5QixNQUFNLFFBQVEsR0FBSSxHQUFxQixFQUFFLENBQUM7d0JBQzFDLFFBQVEsR0FBRyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBRSxRQUE4QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzdGLENBQUM7eUJBQU0sSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDN0IsUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUMxQyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sUUFBUSxHQUFHLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFFLEdBQXlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDOUUsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUN6RSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDNUIsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDMUYsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUU5QyxPQUFPO1lBQ0wsR0FBRyxXQUFXO1lBQ2QsR0FBRyxRQUFRO1lBQ1gsR0FBRyxTQUFTO1NBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDTSxlQUFlLEdBQWtDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFNUY7UUFDRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDNUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ1osSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQ25DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQzdDLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLHNFQUFzRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUM1RixDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3JELElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQzt3QkFDL0IsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7NEJBQ1osSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7Z0NBQ25DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7NEJBQy9DLENBQUM7d0JBQ0gsQ0FBQzt3QkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTs0QkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLHVFQUF1RSxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUM3RixDQUFDO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLElBQ0wsR0FBRztvQkFDSCxPQUFPLEdBQUcsS0FBSyxRQUFRO29CQUN2QixNQUFNLElBQUksR0FBRztvQkFDYixPQUFRLEdBQXdCLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFDcEQsQ0FBQztvQkFDQSxHQUFrQzt5QkFDaEMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ1osSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7NEJBQ25DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7d0JBQy9DLENBQUM7b0JBQ0gsQ0FBQyxDQUFDO3lCQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0VBQW9FLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzFGLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLG9FQUFvRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLE9BQTBCO1FBQzFDLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsQ0FBQyxHQUFXLEVBQUUsS0FBNEI7UUFDM0QsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsR0FBRyxPQUFPO1lBQ1YsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsd0JBQXdCO1FBQ3RCLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxtRUFBbUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN2RixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FBQyxHQUFXO1FBQ3RCLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQy9DLE9BQU8sR0FBRzthQUNQLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO2FBQ2xCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2FBQ3hCLFdBQVcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsU0FBaUI7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRTFDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckQsNkJBQTZCO1FBQzdCLElBQUksU0FBUyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLEtBQUssRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUN6QixhQUFhLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxDQUFDO2FBQzdDLENBQUM7UUFDSixDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLEtBQUssTUFBTSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7WUFDOUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLGVBQWUsRUFBRSxDQUFDO2dCQUMvQyxPQUFPO29CQUNMLFNBQVMsRUFBRSxJQUFJO29CQUNmLFVBQVUsRUFBRSxHQUFHO29CQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDO29CQUNuQixhQUFhLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDO2lCQUN2QyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsTUFBTSxhQUFhLEdBQWU7WUFDaEMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQztZQUNyRSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDO1lBQ3BFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7WUFDaEUsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUM7WUFDckUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQztTQUNuRCxDQUFDO1FBRUYsS0FBSyxNQUFNLEtBQUssSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUMzQyxPQUFPOzRCQUNMLFNBQVMsRUFBRSxJQUFJOzRCQUNmLFVBQVUsRUFBRSxHQUFHOzRCQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDOzRCQUNuQixhQUFhLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDO3lCQUN2QyxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0IsQ0FDZCxRQUFzQyxFQUN0QyxtQkFBNEMsRUFBRTtRQUU5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFdBQVcsR0FBNEIsRUFBRSxDQUFDO1FBQ2hELE1BQU0sV0FBVyxHQUFzQyxFQUFFLENBQUM7UUFDMUQsTUFBTSxrQkFBa0IsR0FBaUMsRUFBRSxDQUFDO1FBRTVELEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7WUFDN0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM3QixNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVoRCxxRkFBcUY7WUFDckYsTUFBTSxXQUFXLEdBQUcsV0FBVyxLQUFLLFNBQVMsSUFBSSxXQUFXLEtBQUssRUFBRSxJQUFJLFdBQVcsS0FBSyxJQUFJLENBQUM7WUFFNUYsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztnQkFDckMsU0FBUztZQUNYLENBQUM7WUFFRCxrQ0FBa0M7WUFDbEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRCxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNwRixXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztnQkFDNUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFlBQVksQ0FBQztnQkFDdEMsU0FBUztZQUNYLENBQUM7WUFFRCw4Q0FBOEM7WUFDOUMsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNwRSxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztnQkFDNUMsU0FBUztZQUNYLENBQUM7WUFFRCxnQ0FBZ0M7WUFDaEMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25CLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDO1FBQ0gsQ0FBQztRQUVELDRFQUE0RTtRQUM1RSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQzdFLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsVUFBVSxFQUFFLFdBQVc7WUFDdkIsaUJBQWlCLEVBQUUsV0FBVztZQUM5Qix3QkFBd0IsRUFBRSxrQkFBa0I7U0FDN0MsQ0FBQztJQUNKLENBQUM7d0dBeFRVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLGNBRjFCLE1BQU07OzRGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBSRVBPUlRfU0VTU0lPTl9DT05URVhULFxuICBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUixcbiAgU2Vzc2lvbkNvbnRleHRNYXAsXG4gIFNlc3Npb25Db250ZXh0UHJvdmlkZXIsXG4gIFNlc3Npb25Db250ZXh0U291cmNlLFxuICBTZXNzaW9uUGFyYW1QcmltaXRpdmUsXG59IGZyb20gJy4uL3Rva2Vucy9zZXNzaW9uLWNvbnRleHQudG9rZW4nO1xuaW1wb3J0IHsgUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvc2NoZW1hLWRpc2NvdmVyeS5jb250cmFjdCc7XG5pbXBvcnQgeyBodW1hbml6ZUlkZW50aWZpZXIgfSBmcm9tICcuLi91dGlscy9pZGVudGlmaWVyLWh1bWFuaXplcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblBhcmFtTWF0Y2gge1xuICBpc01hdGNoZWQ6IGJvb2xlYW47XG4gIHNlc3Npb25LZXk6IHN0cmluZztcbiAgdmFsdWU6IFNlc3Npb25QYXJhbVByaW1pdGl2ZTtcbiAgZnJpZW5kbHlMYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcml2ZWRQYXJhbWV0ZXJzUmVzdWx0IHtcbiAgLyoqIFRoZSBjb25zb2xpZGF0ZWQgcGFyYW1ldGVyIHBheWxvYWQgZm9yIHN0b3JlZCBwcm9jZWR1cmUgZXhlY3V0aW9uICovXG4gIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogTWFwIG9mIHdoaWNoIFNQIHBhcmFtZXRlcnMgd2VyZSBhdXRvLWRlcml2ZWQgZnJvbSBzZXNzaW9uIGNvbnRleHQgKi9cbiAgYXV0b0Rlcml2ZWRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbU1hdGNoPjtcbiAgLyoqIEFueSByZXF1aXJlZCBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBuZWl0aGVyIGluIHNlc3Npb24gY29udGV4dCBub3IgZXhwbGljaXRseSBtYXBwZWQgKi9cbiAgdW5yZXNvbHZlZFJlcXVpcmVkUGFyYW1zOiBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YVtdO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBtYW5hZ2VzIGhvc3QgYXBwbGljYXRpb24gc2Vzc2lvbiBjb250ZXh0IHBhcmFtZXRlcnMgKGUuZy4gYnJhbmNoSWQsIGNvbXBhbnlJZCwgdXNlcklkKVxuICogYXQgcnVudGltZSBhbmQgYXV0b21hdGljYWxseSBkZXRlY3RzIGFuZCBiaW5kcyB0aGVtIHRvIFN0b3JlZCBQcm9jZWR1cmUgcGFyYW1ldGVycy5cbiAqXG4gKiBEZXNpZ25lZCB0byBjb21wbGV0ZWx5IHNoaWVsZCBlbmQgdXNlcnMgZnJvbSBlbnRlcmluZyB0ZWNobmljYWwgc2Vzc2lvbiBwYXJhbWV0ZXJzIHdoaWxlXG4gKiBlbGltaW5hdGluZyBzaWxlbnQgZmFpbHVyZXMgb3IgdGhyZWFkIGNyYXNoZXMgaW4gaG9zdCBpbnRlZ3JhdGlvbnMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHJhd1NvdXJjZSA9IGluamVjdDxTZXNzaW9uQ29udGV4dFNvdXJjZSB8IG51bGw+KFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblByb3ZpZGVyID0gaW5qZWN0PFNlc3Npb25Db250ZXh0UHJvdmlkZXIgfCBudWxsPihSRVBPUlRfU0VTU0lPTl9QUk9WSURFUiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcblxuICAvKiogSW50ZXJuYWwgbWFudWFsIHJ1bnRpbWUgc2Vzc2lvbiBvdmVycmlkZXMgKGUuZy4gc2V0IHZpYSBzZXRTZXNzaW9uQ29udGV4dCBvciBzZXRTZXNzaW9uUGFyYW1ldGVyKSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbnVhbFJ1bnRpbWVDb250ZXh0ID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF0ZXN0T2JzZXJ2YWJsZVZhbHVlID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcblxuICBwcml2YXRlIG9ic2VydmFibGVTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcHJvdmlkZXJTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZlIHNpZ25hbCBleHBvc2luZyB0aGUgbGl2ZSBzZXNzaW9uIGNvbnRleHQgcGFyYW1ldGVycy5cbiAgICogVXBkYXRlcyBhdXRvbWF0aWNhbGx5IHdoZW4gaG9zdCBhcHAgbXV0YXRlcyBydW50aW1lIHN0YXRlLCB3aGVuIG9ic2VydmFibGVzIGVtaXQsXG4gICAqIG9yIHdoZW4gcmVhY3RpdmUgc2lnbmFscyB1cGRhdGUuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29udGV4dDogU2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgcHJvdmlkZXJNYXA6IFNlc3Npb25Db250ZXh0TWFwID0ge307XG4gICAgaWYgKHRoaXMuc2Vzc2lvblByb3ZpZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNlc3Npb25Qcm92aWRlci5nZXRTZXNzaW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IChyZXMgYXMgKCkgPT4gU2Vzc2lvbkNvbnRleHRNYXApKCk7XG4gICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcHJvdmlkZXJNYXAgPSB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShyZXMpKSB7XG4gICAgICAgICAgcHJvdmlkZXJNYXAgPSB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICEoJ3RoZW4nIGluIHJlcykpIHtcbiAgICAgICAgICBwcm92aWRlck1hcCA9IHJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgcmVhZGluZyBTZXNzaW9uQ29udGV4dFByb3ZpZGVyOicsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRva2VuTWFwOiBTZXNzaW9uQ29udGV4dE1hcCA9IHt9O1xuICAgIGlmICh0aGlzLnJhd1NvdXJjZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZSh0aGlzLnJhd1NvdXJjZSkpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmF3U291cmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5yYXdTb3VyY2UoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJSZXMgPSAocmVzIGFzICgpID0+IHVua25vd24pKCk7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IGlubmVyUmVzICYmIHR5cGVvZiBpbm5lclJlcyA9PT0gJ29iamVjdCcgPyAoaW5uZXJSZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUocmVzKSkge1xuICAgICAgICAgICAgdG9rZW5NYXAgPSB0aGlzLmxhdGVzdE9ic2VydmFibGVWYWx1ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyA/IChyZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJhd1NvdXJjZSA9PT0gJ29iamVjdCcgJiYgdGhpcy5yYXdTb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMucmF3U291cmNlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBldmFsdWF0aW5nIHJhdyBzZXNzaW9uIHNvdXJjZTonLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hbnVhbE1hcCA9IHRoaXMubWFudWFsUnVudGltZUNvbnRleHQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5wcm92aWRlck1hcCxcbiAgICAgIC4uLnRva2VuTWFwLFxuICAgICAgLi4ubWFudWFsTWFwLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHN0cmVhbSBvZiBsaXZlIHNlc3Npb24gcGFyYW1ldGVycyBmb3IgUnhKUy1iYXNlZCBpbnRlZ3JhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29udGV4dCQ6IE9ic2VydmFibGU8U2Vzc2lvbkNvbnRleHRNYXA+ID0gdG9PYnNlcnZhYmxlKHRoaXMuc2Vzc2lvbkNvbnRleHQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub2JzZXJ2YWJsZVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnByb3ZpZGVyU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yYXdTb3VyY2UgJiYgaXNPYnNlcnZhYmxlKHRoaXMucmF3U291cmNlKSkge1xuICAgICAgdGhpcy5vYnNlcnZhYmxlU3ViID0gdGhpcy5yYXdTb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHZhbCkgPT4ge1xuICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBmcm9tIHNlc3Npb24gY29udGV4dCBvYnNlcnZhYmxlOicsIGVycik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZXNzaW9uUHJvdmlkZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2Vzc2lvblByb3ZpZGVyLmdldFNlc3Npb25Db250ZXh0KCk7XG4gICAgICAgIGlmIChpc09ic2VydmFibGUocmVzKSkge1xuICAgICAgICAgIHRoaXMucHJvdmlkZXJTdWIgPSByZXMuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUuc2V0KHsgLi4udmFsIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBmcm9tIHNlc3Npb24gcHJvdmlkZXIgb2JzZXJ2YWJsZTonLCBlcnIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICByZXMgJiZcbiAgICAgICAgICB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICd0aGVuJyBpbiByZXMgJiZcbiAgICAgICAgICB0eXBlb2YgKHJlcyBhcyBQcm9taXNlPHVua25vd24+KS50aGVuID09PSAnZnVuY3Rpb24nXG4gICAgICAgICkge1xuICAgICAgICAgIChyZXMgYXMgUHJvbWlzZTxTZXNzaW9uQ29udGV4dE1hcD4pXG4gICAgICAgICAgICAudGhlbigodmFsKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIHByb3ZpZGVyIHByb21pc2U6JywgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBpbml0aWFsaXppbmcgc2Vzc2lvbiBwcm92aWRlcjonLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG9yIHJlcGxhY2VzIHRoZSBydW50aW1lIHNlc3Npb24gY29udGV4dC5cbiAgICogQ2FuIGJlIGNhbGxlZCBkeW5hbWljYWxseSBhZnRlciB1c2VyIGF1dGhlbnRpY2F0aW9uLCBicmFuY2ggY2hhbmdlLCBldGMuXG4gICAqL1xuICBzZXRTZXNzaW9uQ29udGV4dChjb250ZXh0OiBTZXNzaW9uQ29udGV4dE1hcCk6IHZvaWQge1xuICAgIGlmIChjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoeyAuLi5jb250ZXh0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnNldCh7fSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgb3Igc2V0cyBhIHNwZWNpZmljIHNlc3Npb24gcGFyYW1ldGVyIGF0IHJ1bnRpbWUgKGUuZy4gYnJhbmNoSWQgPSAyKS5cbiAgICovXG4gIHNldFNlc3Npb25QYXJhbWV0ZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXNzaW9uUGFyYW1QcmltaXRpdmUpOiB2b2lkIHtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQudXBkYXRlKChjdXJyZW50KSA9PiAoe1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFueSBydW50aW1lIHNlc3Npb24gcGFyYW1ldGVycyBzZXQgdmlhIGBzZXRTZXNzaW9uQ29udGV4dGAgb3IgYHNldFNlc3Npb25QYXJhbWV0ZXJgLlxuICAgKi9cbiAgY2xlYXJTZXNzaW9uQ29udGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnNldCh7fSk7XG4gIH1cblxuICAvKipcbiAgICogU2FmZWx5IHJldHVybnMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBjb250ZXh0IG1hcC5cbiAgICogQWx3YXlzIHB1bGxzIHRoZSBsYXRlc3QgcnVudGltZSBzdGF0ZS4gTmV2ZXIgdGhyb3dzIG9yIGNyYXNoZXMgdGhlIHRocmVhZC5cbiAgICovXG4gIGdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpOiBTZXNzaW9uQ29udGV4dE1hcCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb25Db250ZXh0KCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEZhaWxlZCB0byBldmFsdWF0ZSBzZXNzaW9uIGNvbnRleHQ6JywgZXJyKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplcyBhIHBhcmFtZXRlciBvciBzZXNzaW9uIGtleSBpbnRvIGEgbG93ZXJjYXNlIGFscGhhbnVtZXJpYyBzdHJpbmdcbiAgICogZm9yIHJlbGlhYmxlLCBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgc3ltYm9sLWluc2Vuc2l0aXZlIG1hdGNoaW5nLlxuICAgKiBFLmcuICdAQnJhbmNoSWQnIC0+ICdicmFuY2hpZCcsICdicmFuY2hfaWQnIC0+ICdicmFuY2hpZCcsICdCcmFuY2hJRCcgLT4gJ2JyYW5jaGlkJ1xuICAgKi9cbiAgbm9ybWFsaXplS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWtleSB8fCB0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcmV0dXJuICcnO1xuICAgIHJldHVybiBrZXlcbiAgICAgIC5yZXBsYWNlKC9eQCsvLCAnJylcbiAgICAgIC5yZXBsYWNlKC9bX1xcLVxcc10rL2csICcnKVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgYSBzdG9yZWQgcHJvY2VkdXJlIHBhcmFtZXRlciBtYXRjaGVzIGFueSBrZXkgaW4gdGhlIGFjdGl2ZSBzZXNzaW9uIGNvbnRleHQuXG4gICAqIFN1cHBvcnRzIGV4YWN0LCBub3JtYWxpemVkLCBhbmQgY29tbW9uIEVSUCBzeW5vbnltcy5cbiAgICovXG4gIG1hdGNoUGFyYW1ldGVyKHBhcmFtTmFtZTogc3RyaW5nKTogU2Vzc2lvblBhcmFtTWF0Y2ggfCBudWxsIHtcbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKTtcbiAgICBjb25zdCBzZXNzaW9uS2V5cyA9IE9iamVjdC5rZXlzKHNlc3Npb24pO1xuICAgIGlmIChzZXNzaW9uS2V5cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplZFBhcmFtID0gdGhpcy5ub3JtYWxpemVLZXkocGFyYW1OYW1lKTtcblxuICAgIC8vIDEuIEV4YWN0IG1hdGNoIG9uIHJhdyBuYW1lXG4gICAgaWYgKHBhcmFtTmFtZSBpbiBzZXNzaW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc01hdGNoZWQ6IHRydWUsXG4gICAgICAgIHNlc3Npb25LZXk6IHBhcmFtTmFtZSxcbiAgICAgICAgdmFsdWU6IHNlc3Npb25bcGFyYW1OYW1lXSxcbiAgICAgICAgZnJpZW5kbHlMYWJlbDogaHVtYW5pemVJZGVudGlmaWVyKHBhcmFtTmFtZSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIDIuIERpcmVjdCBub3JtYWxpemVkIG1hdGNoXG4gICAgZm9yIChjb25zdCBrZXkgb2Ygc2Vzc2lvbktleXMpIHtcbiAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZUtleShrZXkpID09PSBub3JtYWxpemVkUGFyYW0pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc01hdGNoZWQ6IHRydWUsXG4gICAgICAgICAgc2Vzc2lvbktleToga2V5LFxuICAgICAgICAgIHZhbHVlOiBzZXNzaW9uW2tleV0sXG4gICAgICAgICAgZnJpZW5kbHlMYWJlbDogaHVtYW5pemVJZGVudGlmaWVyKGtleSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gQ29tbW9uIEVSUCBzeW5vbnltIGdyb3VwcyAoYmlkaXJlY3Rpb25hbCBtYXRjaGluZylcbiAgICBjb25zdCBzeW5vbnltR3JvdXBzOiBzdHJpbmdbXVtdID0gW1xuICAgICAgWydicmFuY2gnLCAnYnJhbmNoaWQnLCAnYmlkJywgJ2JyYW5jaGNvZGUnLCAnbG9jYXRpb25pZCcsICdsb2NhdGlvbiddLFxuICAgICAgWydjb21wYW55JywgJ2NvbXBhbnlpZCcsICdjaWQnLCAnY29tcGFueWNvZGUnLCAndGVuYW50JywgJ3RlbmFudGlkJ10sXG4gICAgICBbJ3VzZXInLCAndXNlcmlkJywgJ3VpZCcsICd1c2VyY29kZScsICdvcGVyYXRvcmlkJywgJ2xvZ2ludXNlciddLFxuICAgICAgWydmaW5hbmNpYWx5ZWFyJywgJ2ZpbmFuY2lhbHllYXJpZCcsICd5ZWFyaWQnLCAnZnllYXInLCAnZmlzY2FseWVhciddLFxuICAgICAgWydvcmcnLCAnb3JnaWQnLCAnb3JnYW5pemF0aW9uJywgJ29yZ2FuaXphdGlvbmlkJ10sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc3lub255bUdyb3Vwcykge1xuICAgICAgaWYgKGdyb3VwLmluY2x1ZGVzKG5vcm1hbGl6ZWRQYXJhbSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2Vzc2lvbktleXMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXAuaW5jbHVkZXModGhpcy5ub3JtYWxpemVLZXkoa2V5KSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2Vzc2lvbktleToga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogc2Vzc2lvbltrZXldLFxuICAgICAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGRlcml2ZXMgYWxsIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyczpcbiAgICogLSBQcmVzZXJ2ZXMgZXhwbGljaXQgb3ZlcnJpZGVzIChlLmcuIGZyb20gY2FudmFzIGZvcm0gY29udHJvbHMgb3IgbWFudWFsIGlucHV0cylcbiAgICogLSBBdXRvbWF0aWNhbGx5IGluamVjdHMgbWF0Y2hlZCBzZXNzaW9uIHBhcmFtZXRlcnNcbiAgICogLSBWYWxpZGF0ZXMgd2hldGhlciByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBmdWxmaWxsZWRcbiAgICovXG4gIGRlcml2ZVBhcmFtZXRlcnMoXG4gICAgc3BQYXJhbXM6IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10sXG4gICAgZXhwbGljaXRNYXBwaW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxuICApOiBEZXJpdmVkUGFyYW1ldGVyc1Jlc3VsdCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCk7XG4gICAgY29uc3QgZmluYWxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgY29uc3QgYXV0b0Rlcml2ZWQ6IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbU1hdGNoPiA9IHt9O1xuICAgIGNvbnN0IHVucmVzb2x2ZWRSZXF1aXJlZDogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBzcFBhcmFtcykge1xuICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW0ubmFtZTtcbiAgICAgIGNvbnN0IGV4cGxpY2l0VmFsID0gZXhwbGljaXRNYXBwaW5nc1twYXJhbU5hbWVdO1xuXG4gICAgICAvLyBDaGVjayBpZiB1c2VyIG9yIGNhbnZhcyBleHBsaWNpdGx5IHByb3ZpZGVkIGEgdmFsdWUgKGFuZCBub3QgYW4gZW1wdHkgcGxhY2Vob2xkZXIpXG4gICAgICBjb25zdCBoYXNFeHBsaWNpdCA9IGV4cGxpY2l0VmFsICE9PSB1bmRlZmluZWQgJiYgZXhwbGljaXRWYWwgIT09ICcnICYmIGV4cGxpY2l0VmFsICE9PSBudWxsO1xuXG4gICAgICBpZiAoaGFzRXhwbGljaXQpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IGV4cGxpY2l0VmFsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHNlc3Npb24gY29udGV4dCBtYXRjaFxuICAgICAgY29uc3Qgc2Vzc2lvbk1hdGNoID0gdGhpcy5tYXRjaFBhcmFtZXRlcihwYXJhbU5hbWUpO1xuICAgICAgaWYgKHNlc3Npb25NYXRjaCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IHNlc3Npb25NYXRjaC52YWx1ZTtcbiAgICAgICAgYXV0b0Rlcml2ZWRbcGFyYW1OYW1lXSA9IHNlc3Npb25NYXRjaDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGRlZmF1bHQgdmFsdWUgaXMgcHJvdmlkZWQgaW4gU1AgbWV0YWRhdGFcbiAgICAgIGlmIChwYXJhbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwYXJhbS5kZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IHBhcmFtLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHJlcXVpcmVkIGJ1dCBub3Qgc2F0aXNmaWVkXG4gICAgICBpZiAocGFyYW0ucmVxdWlyZWQpIHtcbiAgICAgICAgdW5yZXNvbHZlZFJlcXVpcmVkLnB1c2gocGFyYW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsc28gaW5jbHVkZSBhbnkgZXh0cmEgZXhwbGljaXQgbWFwcGluZ3MgdGhhdCBkaWRuJ3QgbWF0Y2ggcGFyYW1ldGVyIGxpc3RcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoZXhwbGljaXRNYXBwaW5ncykpIHtcbiAgICAgIGlmICghKGtleSBpbiBmaW5hbFBhcmFtcykgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgZmluYWxQYXJhbXNba2V5XSA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1ldGVyczogZmluYWxQYXJhbXMsXG4gICAgICBhdXRvRGVyaXZlZFBhcmFtczogYXV0b0Rlcml2ZWQsXG4gICAgICB1bnJlc29sdmVkUmVxdWlyZWRQYXJhbXM6IHVucmVzb2x2ZWRSZXF1aXJlZCxcbiAgICB9O1xuICB9XG59XG4iXX0=
359
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUVWLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsR0FLeEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFrQm5FOzs7Ozs7R0FNRztBQUlILE1BQU0sT0FBTywyQkFBMkI7SUFDckIsU0FBUyxHQUFHLE1BQU0sQ0FBOEIsc0JBQXNCLEVBQUU7UUFDdkYsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDLENBQUM7SUFDYyxlQUFlLEdBQUcsTUFBTSxDQUFnQyx1QkFBdUIsRUFBRTtRQUNoRyxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUVILHdHQUF3RztJQUN2RixvQkFBb0IsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELHFCQUFxQixHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDdEQsdUJBQXVCLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsQ0FBQztJQUVqRSxhQUFhLENBQWdCO0lBQzdCLFdBQVcsQ0FBZ0I7SUFFbkM7Ozs7T0FJRztJQUNNLGNBQWMsR0FBOEIsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNqRSxJQUFJLFdBQVcsR0FB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U0FDN0MsQ0FBQztJQUNKLENBQUM7d0dBeFdVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLGNBRjFCLE1BQU07OzRGQUVQLDJCQUEyQjtrQkFIdkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBSRVBPUlRfU0VTU0lPTl9DT05URVhULFxuICBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUixcbiAgU2Vzc2lvbkNvbnRleHRNYXAsXG4gIFNlc3Npb25Db250ZXh0UHJvdmlkZXIsXG4gIFNlc3Npb25Db250ZXh0U291cmNlLFxuICBTZXNzaW9uUGFyYW1QcmltaXRpdmUsXG59IGZyb20gJy4uL3Rva2Vucy9zZXNzaW9uLWNvbnRleHQudG9rZW4nO1xuaW1wb3J0IHsgUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvc2NoZW1hLWRpc2NvdmVyeS5jb250cmFjdCc7XG5pbXBvcnQgeyBodW1hbml6ZUlkZW50aWZpZXIgfSBmcm9tICcuLi91dGlscy9pZGVudGlmaWVyLWh1bWFuaXplcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblBhcmFtTWF0Y2gge1xuICBpc01hdGNoZWQ6IGJvb2xlYW47XG4gIHNlc3Npb25LZXk6IHN0cmluZztcbiAgdmFsdWU6IFNlc3Npb25QYXJhbVByaW1pdGl2ZTtcbiAgZnJpZW5kbHlMYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcml2ZWRQYXJhbWV0ZXJzUmVzdWx0IHtcbiAgLyoqIFRoZSBjb25zb2xpZGF0ZWQgcGFyYW1ldGVyIHBheWxvYWQgZm9yIHN0b3JlZCBwcm9jZWR1cmUgZXhlY3V0aW9uICovXG4gIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogTWFwIG9mIHdoaWNoIFNQIHBhcmFtZXRlcnMgd2VyZSBhdXRvLWRlcml2ZWQgZnJvbSBzZXNzaW9uIGNvbnRleHQgKi9cbiAgYXV0b0Rlcml2ZWRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbU1hdGNoPjtcbiAgLyoqIEFueSByZXF1aXJlZCBwYXJhbWV0ZXJzIHRoYXQgd2VyZSBuZWl0aGVyIGluIHNlc3Npb24gY29udGV4dCBub3IgZXhwbGljaXRseSBtYXBwZWQgKi9cbiAgdW5yZXNvbHZlZFJlcXVpcmVkUGFyYW1zOiBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YVtdO1xufVxuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBtYW5hZ2VzIGhvc3QgYXBwbGljYXRpb24gc2Vzc2lvbiBjb250ZXh0IHBhcmFtZXRlcnMgKGUuZy4gYnJhbmNoSWQsIGNvbXBhbnlJZCwgdXNlcklkKVxuICogYXQgcnVudGltZSBhbmQgYXV0b21hdGljYWxseSBkZXRlY3RzIGFuZCBiaW5kcyB0aGVtIHRvIFN0b3JlZCBQcm9jZWR1cmUgcGFyYW1ldGVycy5cbiAqXG4gKiBEZXNpZ25lZCB0byBjb21wbGV0ZWx5IHNoaWVsZCBlbmQgdXNlcnMgZnJvbSBlbnRlcmluZyB0ZWNobmljYWwgc2Vzc2lvbiBwYXJhbWV0ZXJzIHdoaWxlXG4gKiBlbGltaW5hdGluZyBzaWxlbnQgZmFpbHVyZXMgb3IgdGhyZWFkIGNyYXNoZXMgaW4gaG9zdCBpbnRlZ3JhdGlvbnMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHJhd1NvdXJjZSA9IGluamVjdDxTZXNzaW9uQ29udGV4dFNvdXJjZSB8IG51bGw+KFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblByb3ZpZGVyID0gaW5qZWN0PFNlc3Npb25Db250ZXh0UHJvdmlkZXIgfCBudWxsPihSRVBPUlRfU0VTU0lPTl9QUk9WSURFUiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcblxuICAvKiogSW50ZXJuYWwgbWFudWFsIHJ1bnRpbWUgc2Vzc2lvbiBvdmVycmlkZXMgKGUuZy4gc2V0IHZpYSBzZXRTZXNzaW9uQ29udGV4dCBvciBzZXRTZXNzaW9uUGFyYW1ldGVyKSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbnVhbFJ1bnRpbWVDb250ZXh0ID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF0ZXN0T2JzZXJ2YWJsZVZhbHVlID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcblxuICBwcml2YXRlIG9ic2VydmFibGVTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcHJvdmlkZXJTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZlIHNpZ25hbCBleHBvc2luZyB0aGUgbGl2ZSBzZXNzaW9uIGNvbnRleHQgcGFyYW1ldGVycy5cbiAgICogVXBkYXRlcyBhdXRvbWF0aWNhbGx5IHdoZW4gaG9zdCBhcHAgbXV0YXRlcyBydW50aW1lIHN0YXRlLCB3aGVuIG9ic2VydmFibGVzIGVtaXQsXG4gICAqIG9yIHdoZW4gcmVhY3RpdmUgc2lnbmFscyB1cGRhdGUuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29udGV4dDogU2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgcHJvdmlkZXJNYXA6IFNlc3Npb25Db250ZXh0TWFwID0ge307XG4gICAgaWYgKHRoaXMuc2Vzc2lvblByb3ZpZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNlc3Npb25Qcm92aWRlci5nZXRTZXNzaW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IChyZXMgYXMgKCkgPT4gU2Vzc2lvbkNvbnRleHRNYXApKCk7XG4gICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcHJvdmlkZXJNYXAgPSB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShyZXMpKSB7XG4gICAgICAgICAgcHJvdmlkZXJNYXAgPSB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICEoJ3RoZW4nIGluIHJlcykpIHtcbiAgICAgICAgICBwcm92aWRlck1hcCA9IHJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgcmVhZGluZyBTZXNzaW9uQ29udGV4dFByb3ZpZGVyOicsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRva2VuTWFwOiBTZXNzaW9uQ29udGV4dE1hcCA9IHt9O1xuICAgIGlmICh0aGlzLnJhd1NvdXJjZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZSh0aGlzLnJhd1NvdXJjZSkpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmF3U291cmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5yYXdTb3VyY2UoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJSZXMgPSAocmVzIGFzICgpID0+IHVua25vd24pKCk7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IGlubmVyUmVzICYmIHR5cGVvZiBpbm5lclJlcyA9PT0gJ29iamVjdCcgPyAoaW5uZXJSZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUocmVzKSkge1xuICAgICAgICAgICAgdG9rZW5NYXAgPSB0aGlzLmxhdGVzdE9ic2VydmFibGVWYWx1ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyA/IChyZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJhd1NvdXJjZSA9PT0gJ29iamVjdCcgJiYgdGhpcy5yYXdTb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMucmF3U291cmNlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBldmFsdWF0aW5nIHJhdyBzZXNzaW9uIHNvdXJjZTonLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hbnVhbE1hcCA9IHRoaXMubWFudWFsUnVudGltZUNvbnRleHQoKTtcbiAgICBjb25zdCBhdXRvRGV0ZWN0ZWQgPSB0aGlzLmRldGVjdEJyb3dzZXJTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXV0b0RldGVjdGVkLFxuICAgICAgLi4ucHJvdmlkZXJNYXAsXG4gICAgICAuLi50b2tlbk1hcCxcbiAgICAgIC4uLm1hbnVhbE1hcCxcbiAgICB9O1xuICB9KTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgbGl2ZSBzZXNzaW9uIHBhcmFtZXRlcnMgZm9yIFJ4SlMtYmFzZWQgaW50ZWdyYXRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbkNvbnRleHQkOiBPYnNlcnZhYmxlPFNlc3Npb25Db250ZXh0TWFwPiA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlc3Npb25Db250ZXh0KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9ic2VydmFibGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5wcm92aWRlclN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmF3U291cmNlICYmIGlzT2JzZXJ2YWJsZSh0aGlzLnJhd1NvdXJjZSkpIHtcbiAgICAgIHRoaXMub2JzZXJ2YWJsZVN1YiA9IHRoaXMucmF3U291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWwpID0+IHtcbiAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdE9ic2VydmFibGVWYWx1ZS5zZXQoeyAuLi52YWwgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIGNvbnRleHQgb2JzZXJ2YWJsZTonLCBlcnIpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Vzc2lvblByb3ZpZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNlc3Npb25Qcm92aWRlci5nZXRTZXNzaW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHtcbiAgICAgICAgICB0aGlzLnByb3ZpZGVyU3ViID0gcmVzLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAodmFsKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIHByb3ZpZGVyIG9ic2VydmFibGU6JywgZXJyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgcmVzICYmXG4gICAgICAgICAgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAndGhlbicgaW4gcmVzICYmXG4gICAgICAgICAgdHlwZW9mIChyZXMgYXMgUHJvbWlzZTx1bmtub3duPikudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICApIHtcbiAgICAgICAgICAocmVzIGFzIFByb21pc2U8U2Vzc2lvbkNvbnRleHRNYXA+KVxuICAgICAgICAgICAgLnRoZW4oKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm92aWRlck9ic2VydmFibGVWYWx1ZS5zZXQoeyAuLi52YWwgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEVycm9yIGZyb20gc2Vzc2lvbiBwcm92aWRlciBwcm9taXNlOicsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgaW5pdGlhbGl6aW5nIHNlc3Npb24gcHJvdmlkZXI6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBvciByZXBsYWNlcyB0aGUgcnVudGltZSBzZXNzaW9uIGNvbnRleHQuXG4gICAqIENhbiBiZSBjYWxsZWQgZHluYW1pY2FsbHkgYWZ0ZXIgdXNlciBhdXRoZW50aWNhdGlvbiwgYnJhbmNoIGNoYW5nZSwgZXRjLlxuICAgKi9cbiAgc2V0U2Vzc2lvbkNvbnRleHQoY29udGV4dDogU2Vzc2lvbkNvbnRleHRNYXApOiB2b2lkIHtcbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQuc2V0KHsgLi4uY29udGV4dCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoe30pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIG9yIHNldHMgYSBzcGVjaWZpYyBzZXNzaW9uIHBhcmFtZXRlciBhdCBydW50aW1lIChlLmcuIGJyYW5jaElkID0gMikuXG4gICAqL1xuICBzZXRTZXNzaW9uUGFyYW1ldGVyKGtleTogc3RyaW5nLCB2YWx1ZTogU2Vzc2lvblBhcmFtUHJpbWl0aXZlKTogdm9pZCB7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnVwZGF0ZSgoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbnkgcnVudGltZSBzZXNzaW9uIHBhcmFtZXRlcnMgc2V0IHZpYSBgc2V0U2Vzc2lvbkNvbnRleHRgIG9yIGBzZXRTZXNzaW9uUGFyYW1ldGVyYC5cbiAgICovXG4gIGNsZWFyU2Vzc2lvbkNvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSByZXR1cm5zIHRoZSBjdXJyZW50IHNlc3Npb24gY29udGV4dCBtYXAuXG4gICAqIEFsd2F5cyBwdWxscyB0aGUgbGF0ZXN0IHJ1bnRpbWUgc3RhdGUuIE5ldmVyIHRocm93cyBvciBjcmFzaGVzIHRoZSB0aHJlYWQuXG4gICAqL1xuICBnZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKTogU2Vzc2lvbkNvbnRleHRNYXAge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXNzaW9uQ29udGV4dCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBGYWlsZWQgdG8gZXZhbHVhdGUgc2Vzc2lvbiBjb250ZXh0OicsIGVycik7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSBkZXRlY3RzIHNlc3Npb24gcGFyYW1ldGVycyBmcm9tIGhvc3QgcHJvamVjdCBicm93c2VyIHN0b3JhZ2VcbiAgICogKHNlc3Npb25TdG9yYWdlOiB1c2VyX0luZm8sIGN1cnJlbnRVc2VyOyBsb2NhbFN0b3JhZ2U6IGN1cnJlbnRVc2VyLCBDb21wYW55RGF0YSwgdXNlcl9JbmZvKS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZWN0QnJvd3NlclNlc3Npb24oKTogU2Vzc2lvbkNvbnRleHRNYXAge1xuICAgIGNvbnN0IHJlc3VsdDogU2Vzc2lvbkNvbnRleHRNYXAgPSB7fTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiByZXN1bHQ7XG5cbiAgICBjb25zdCBzb3VyY2VzOiBBcnJheTx7IHN0b3JhZ2U6IFN0b3JhZ2UgfCBudWxsOyBrZXk6IHN0cmluZyB9PiA9IFtcbiAgICAgIHsgc3RvcmFnZTogdHlwZW9mIHNlc3Npb25TdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IHNlc3Npb25TdG9yYWdlIDogbnVsbCwga2V5OiAndXNlcl9JbmZvJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZSA6IG51bGwsIGtleTogJ2N1cnJlbnRVc2VyJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZSA6IG51bGwsIGtleTogJ0NvbXBhbnlEYXRhJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gc2Vzc2lvblN0b3JhZ2UgOiBudWxsLCBrZXk6ICdjdXJyZW50VXNlcicgfSxcbiAgICAgIHsgc3RvcmFnZTogdHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhbFN0b3JhZ2UgOiBudWxsLCBrZXk6ICd1c2VyX0luZm8nIH0sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZXMpIHtcbiAgICAgIGlmICghc3JjLnN0b3JhZ2UpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNyYy5zdG9yYWdlLmdldEl0ZW0oc3JjLmtleSk7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICAgICAgICBpZiAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB2ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoayBpbiByZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHRba10gPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBKU09OIHBhcnNlIGVycm9ycyBpbiBzdG9yYWdlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgcGFyYW1ldGVyIG9yIHNlc3Npb24ga2V5IGludG8gYSBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHN0cmluZ1xuICAgKiBmb3IgcmVsaWFibGUsIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBzeW1ib2wtaW5zZW5zaXRpdmUgbWF0Y2hpbmcuXG4gICAqIFN0cmlwcyBTUUwgU2VydmVyIEh1bmdhcmlhbiB0eXBlIHByZWZpeGVzIChlLmcuICdAY2hyQ29tcGFueUlkJyAtPiAnY29tcGFueWlkJykuXG4gICAqL1xuICBub3JtYWxpemVLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICgha2V5IHx8IHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGtleVxuICAgICAgLnJlcGxhY2UoL15AKy8sICcnKVxuICAgICAgLnJlcGxhY2UoL14oY2hyfGludHx2Y2hyfG5jaHJ8ZHR8c3RyfG51bXxiaXR8ZGVjfGZsdCkrL2ksICcnKVxuICAgICAgLnJlcGxhY2UoL1tfXFwtXFxzXSsvZywgJycpXG4gICAgICAudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyIG1hdGNoZXMgYW55IGtleSBpbiB0aGUgYWN0aXZlIHNlc3Npb24gY29udGV4dC5cbiAgICogU3VwcG9ydHMgZXhhY3QsIG5vcm1hbGl6ZWQsIGFuZCBjb21tb24gRVJQIHN5bm9ueW1zLlxuICAgKi9cbiAgbWF0Y2hQYXJhbWV0ZXIocGFyYW1OYW1lOiBzdHJpbmcpOiBTZXNzaW9uUGFyYW1NYXRjaCB8IG51bGwge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpO1xuICAgIGNvbnN0IHNlc3Npb25LZXlzID0gT2JqZWN0LmtleXMoc2Vzc2lvbik7XG4gICAgaWYgKHNlc3Npb25LZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBub3JtYWxpemVkUGFyYW0gPSB0aGlzLm5vcm1hbGl6ZUtleShwYXJhbU5hbWUpO1xuXG4gICAgLy8gMS4gRXhhY3QgbWF0Y2ggb24gcmF3IG5hbWVcbiAgICBpZiAocGFyYW1OYW1lIGluIHNlc3Npb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgc2Vzc2lvbktleTogcGFyYW1OYW1lLFxuICAgICAgICB2YWx1ZTogc2Vzc2lvbltwYXJhbU5hbWVdLFxuICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIocGFyYW1OYW1lKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gMi4gRGlyZWN0IG5vcm1hbGl6ZWQgbWF0Y2hcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzZXNzaW9uS2V5cykge1xuICAgICAgaWYgKHRoaXMubm9ybWFsaXplS2V5KGtleSkgPT09IG5vcm1hbGl6ZWRQYXJhbSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICBzZXNzaW9uS2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHNlc3Npb25ba2V5XSxcbiAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBDb21tb24gRVJQIHN5bm9ueW0gZ3JvdXBzIChiaWRpcmVjdGlvbmFsIG1hdGNoaW5nKVxuICAgIGNvbnN0IHN5bm9ueW1Hcm91cHM6IHN0cmluZ1tdW10gPSBbXG4gICAgICBbJ2JyYW5jaCcsICdicmFuY2hpZCcsICdiaWQnLCAnYnJhbmNoY29kZScsICdsb2NhdGlvbmlkJywgJ2xvY2F0aW9uJywgJ2NvbXB1bml0JywgJ2NvbXB1bml0aWQnLCAndW5pdGNvZGUnLCAndW5pdGlkJywgJ2NvbXB1bml0cyddLFxuICAgICAgWydjb21wYW55JywgJ2NvbXBhbnlpZCcsICdjaWQnLCAnY29tcGFueWNvZGUnLCAndGVuYW50JywgJ3RlbmFudGlkJ10sXG4gICAgICBbJ3VzZXInLCAndXNlcmlkJywgJ3VpZCcsICd1c2VyY29kZScsICdvcGVyYXRvcmlkJywgJ2xvZ2ludXNlcicsICd1c2VybmFtZSddLFxuICAgICAgWydmaW5hbmNpYWx5ZWFyJywgJ2ZpbmFuY2lhbHllYXJpZCcsICd5ZWFyaWQnLCAnZnllYXInLCAnZmlzY2FseWVhcicsICdmaW55ZWFyJ10sXG4gICAgICBbJ2xvZ2luaWRlbnRpdHknLCAnbG9naW5faWRlbnRpdHknLCAnc3RhdHVzY29kZScsICdzdGF0dXNfY29kZSddLFxuICAgICAgWydvcmcnLCAnb3JnaWQnLCAnb3JnYW5pemF0aW9uJywgJ29yZ2FuaXphdGlvbmlkJ10sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc3lub255bUdyb3Vwcykge1xuICAgICAgaWYgKGdyb3VwLmluY2x1ZGVzKG5vcm1hbGl6ZWRQYXJhbSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2Vzc2lvbktleXMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXAuaW5jbHVkZXModGhpcy5ub3JtYWxpemVLZXkoa2V5KSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2Vzc2lvbktleToga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogc2Vzc2lvbltrZXldLFxuICAgICAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGRlcml2ZXMgYWxsIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyczpcbiAgICogLSBQcmVzZXJ2ZXMgZXhwbGljaXQgb3ZlcnJpZGVzIChlLmcuIGZyb20gY2FudmFzIGZvcm0gY29udHJvbHMgb3IgbWFudWFsIGlucHV0cylcbiAgICogLSBBdXRvbWF0aWNhbGx5IGluamVjdHMgbWF0Y2hlZCBzZXNzaW9uIHBhcmFtZXRlcnNcbiAgICogLSBWYWxpZGF0ZXMgd2hldGhlciByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBmdWxmaWxsZWRcbiAgICovXG4gIGRlcml2ZVBhcmFtZXRlcnMoXG4gICAgc3BQYXJhbXM6IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10sXG4gICAgZXhwbGljaXRNYXBwaW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxuICApOiBEZXJpdmVkUGFyYW1ldGVyc1Jlc3VsdCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCk7XG4gICAgY29uc3QgZmluYWxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgY29uc3QgYXV0b0Rlcml2ZWQ6IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbU1hdGNoPiA9IHt9O1xuICAgIGNvbnN0IHVucmVzb2x2ZWRSZXF1aXJlZDogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBzcFBhcmFtcykge1xuICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW0ubmFtZTtcbiAgICAgIGNvbnN0IGV4cGxpY2l0VmFsID0gZXhwbGljaXRNYXBwaW5nc1twYXJhbU5hbWVdO1xuXG4gICAgICAvLyBDaGVjayBpZiB1c2VyIG9yIGNhbnZhcyBleHBsaWNpdGx5IHByb3ZpZGVkIGEgdmFsdWUgKGFuZCBub3QgYW4gZW1wdHkgcGxhY2Vob2xkZXIpXG4gICAgICBjb25zdCBoYXNFeHBsaWNpdCA9IGV4cGxpY2l0VmFsICE9PSB1bmRlZmluZWQgJiYgZXhwbGljaXRWYWwgIT09ICcnICYmIGV4cGxpY2l0VmFsICE9PSBudWxsO1xuXG4gICAgICBpZiAoaGFzRXhwbGljaXQpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IGV4cGxpY2l0VmFsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHNlc3Npb24gY29udGV4dCBtYXRjaFxuICAgICAgY29uc3Qgc2Vzc2lvbk1hdGNoID0gdGhpcy5tYXRjaFBhcmFtZXRlcihwYXJhbU5hbWUpO1xuICAgICAgaWYgKHNlc3Npb25NYXRjaCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IHNlc3Npb25NYXRjaC52YWx1ZTtcbiAgICAgICAgYXV0b0Rlcml2ZWRbcGFyYW1OYW1lXSA9IHNlc3Npb25NYXRjaDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGRlZmF1bHQgdmFsdWUgaXMgcHJvdmlkZWQgaW4gU1AgbWV0YWRhdGFcbiAgICAgIGlmIChwYXJhbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwYXJhbS5kZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IHBhcmFtLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHJlcXVpcmVkIGJ1dCBub3Qgc2F0aXNmaWVkXG4gICAgICBpZiAocGFyYW0ucmVxdWlyZWQpIHtcbiAgICAgICAgdW5yZXNvbHZlZFJlcXVpcmVkLnB1c2gocGFyYW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsc28gaW5jbHVkZSBhbnkgZXh0cmEgZXhwbGljaXQgbWFwcGluZ3MgdGhhdCBkaWRuJ3QgbWF0Y2ggcGFyYW1ldGVyIGxpc3RcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoZXhwbGljaXRNYXBwaW5ncykpIHtcbiAgICAgIGlmICghKGtleSBpbiBmaW5hbFBhcmFtcykgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSBudWxsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgZmluYWxQYXJhbXNba2V5XSA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1ldGVyczogZmluYWxQYXJhbXMsXG4gICAgICBhdXRvRGVyaXZlZFBhcmFtczogYXV0b0Rlcml2ZWQsXG4gICAgICB1bnJlc29sdmVkUmVxdWlyZWRQYXJhbXM6IHVucmVzb2x2ZWRSZXF1aXJlZCxcbiAgICB9O1xuICB9XG59XG4iXX0=