bways-report 0.1.8 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +463 -316
  2. package/esm2022/lib/core/config/bways-report-config.mjs +31 -32
  3. package/esm2022/lib/core/models/index.mjs +1 -1
  4. package/esm2022/lib/core/models/report-api-endpoint.model.mjs +8 -0
  5. package/esm2022/lib/core/models/report-component.model.mjs +1 -1
  6. package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
  7. package/esm2022/lib/core/services/index.mjs +2 -1
  8. package/esm2022/lib/core/services/report-api-execution.service.mjs +210 -0
  9. package/esm2022/lib/core/services/report-data-discovery.service.mjs +76 -4
  10. package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
  11. package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
  12. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  13. package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
  14. package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
  15. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +31 -1
  16. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +27 -2
  17. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
  18. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
  19. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
  20. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
  21. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +4 -37
  22. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +28 -51
  23. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
  24. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
  25. package/esm2022/lib/data-access/adapters/index.mjs +1 -1
  26. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
  27. package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
  28. package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
  29. package/esm2022/lib/data-access/contracts/index.mjs +1 -1
  30. package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
  31. package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
  32. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +536 -6
  33. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +55 -17
  34. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +546 -119
  35. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +3 -3
  36. package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +3 -3
  37. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +142 -8
  38. package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
  39. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +129 -28
  40. package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +3 -3
  41. package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
  42. package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +3 -3
  43. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +27 -13
  44. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
  45. package/esm2022/lib/features/designer/designer.component.mjs +109 -75
  46. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
  47. package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
  48. package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
  49. package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
  50. package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +2 -1
  51. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
  52. package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
  53. package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
  54. package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
  55. package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
  56. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +6 -4
  57. package/esm2022/lib/features/routing/report-routes.mjs +6 -6
  58. package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
  59. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
  60. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +23 -4
  61. package/esm2022/lib/features/runtime/report-execution.service.mjs +36 -6
  62. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +54 -11
  63. package/esm2022/lib/features/runtime/report-runtime.component.mjs +105 -68
  64. package/esm2022/lib/features/runtime/rpt-report.component.mjs +50 -42
  65. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
  66. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +16 -7
  67. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +53 -1
  68. package/esm2022/lib/primitives/components/index.mjs +2 -1
  69. package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +428 -0
  70. package/esm2022/lib/primitives/register-builtins.mjs +51 -2
  71. package/esm2022/lib/provide-reporting.mjs +11 -29
  72. package/fesm2022/bways-report.mjs +3745 -1281
  73. package/fesm2022/bways-report.mjs.map +1 -1
  74. package/lib/core/config/bways-report-config.d.ts +27 -5
  75. package/lib/core/models/index.d.ts +2 -1
  76. package/lib/core/models/report-api-endpoint.model.d.ts +30 -0
  77. package/lib/core/models/report-component.model.d.ts +16 -4
  78. package/lib/core/models/report-datasource.model.d.ts +21 -2
  79. package/lib/core/services/index.d.ts +1 -0
  80. package/lib/core/services/report-api-execution.service.d.ts +41 -0
  81. package/lib/core/services/report-data-discovery.service.d.ts +23 -1
  82. package/lib/core/services/report-session-context.service.d.ts +9 -0
  83. package/lib/core/tokens/designer-config.token.d.ts +4 -0
  84. package/lib/core/tokens/reporting-config.token.d.ts +4 -0
  85. package/lib/core/utils/report-endpoint.util.d.ts +12 -0
  86. package/lib/core/utils/report-request-scope.d.ts +14 -0
  87. package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +2 -0
  88. package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +1 -0
  89. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
  90. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
  91. package/lib/data-access/adapters/endpoint-tokens.d.ts +7 -0
  92. package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
  93. package/lib/data-access/adapters/http-lookup.adapter.d.ts +3 -4
  94. package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
  95. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
  96. package/lib/data-access/adapters/index.d.ts +1 -1
  97. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
  98. package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
  99. package/lib/data-access/adapters/session-headers.d.ts +3 -0
  100. package/lib/data-access/contracts/index.d.ts +1 -0
  101. package/lib/data-access/contracts/lookup.contract.d.ts +3 -0
  102. package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
  103. package/lib/features/designer/components/component-palette/component-palette.component.d.ts +16 -0
  104. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
  105. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
  106. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +21 -3
  107. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +20 -7
  108. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +2 -1
  109. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
  110. package/lib/features/designer/designer.component.d.ts +16 -2
  111. package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
  112. package/lib/features/designer/services/designer-config.service.d.ts +13 -0
  113. package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
  114. package/lib/features/persistence/services/report-store.service.d.ts +15 -1
  115. package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
  116. package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
  117. package/lib/features/runtime/report-execution.service.d.ts +4 -0
  118. package/lib/features/runtime/report-grid-bridge.component.d.ts +4 -1
  119. package/lib/features/runtime/report-runtime.component.d.ts +14 -1
  120. package/lib/features/runtime/rpt-report.component.d.ts +5 -0
  121. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
  122. package/lib/primitives/components/index.d.ts +2 -0
  123. package/lib/primitives/components/radio/rpt-radio.component.d.ts +77 -0
  124. package/package.json +2 -1
@@ -1,4 +1,8 @@
1
- import { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, input, output, signal, } from '@angular/core';
1
+ import { ReportRequestScope } from '../../core/utils/report-request-scope';
2
+ import { normalizeReportDefinition } from '../persistence/services/schema-validator.service';
3
+ import { map } from 'rxjs';
4
+ import { DesignerConfigService } from './services/designer-config.service';
5
+ import { ChangeDetectionStrategy, Component, DestroyRef, computed, effect, HostListener, Input, Injector, inject, input, output, signal, untracked, } from '@angular/core';
2
6
  import { CommonModule } from '@angular/common';
3
7
  import { FormsModule } from '@angular/forms';
4
8
  import { ReportPersistenceAdapter } from '../../data-access/contracts/report-persistence.contract';
@@ -6,6 +10,7 @@ import { ReportDataSourceAdapter } from '../../data-access/contracts/data-source
6
10
  import { ReportSessionContextService } from '../../core/services/report-session-context.service';
7
11
  import { DesignerStateService } from './services/designer-state.service';
8
12
  import { Router } from '@angular/router';
13
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
14
  import { Dialog, DialogModule } from '@angular/cdk/dialog';
10
15
  import { REPORTING_CONFIG } from '../../core/tokens/reporting-config.token';
11
16
  import { ReportSavedDialogComponent } from './components/dialogs/report-saved-dialog.component';
@@ -13,16 +18,36 @@ import { DesignerToolbarComponent } from './components/toolbar/designer-toolbar.
13
18
  import { ComponentPaletteComponent } from './components/component-palette/component-palette.component';
14
19
  import { DesignCanvasComponent } from './components/design-canvas/design-canvas.component';
15
20
  import { PropertyEditorComponent } from './components/property-editor/property-editor.component';
16
- import { DynamicRendererComponent } from '../runtime/dynamic-renderer.component';
21
+ import { ReportRuntimeComponent } from '../runtime/report-runtime.component';
22
+ import { ReportExecutionService } from '../runtime/report-execution.service';
17
23
  import { RptIconComponent } from '../../primitives/components/icon/rpt-icon.component';
24
+ import { DesignerEndpointsService, DESIGNER_ENDPOINT_PROVIDERS } from './services/designer-endpoints.service';
18
25
  import { DragDropModule } from '@angular/cdk/drag-drop';
19
26
  import * as i0 from "@angular/core";
20
27
  import * as i1 from "@angular/cdk/drag-drop";
21
28
  export class DesignerComponent {
29
+ requests = new ReportRequestScope();
30
+ loadError = signal(null);
31
+ injector = inject(Injector);
32
+ destroyRef = inject(DestroyRef);
33
+ saveDialogOpen = false;
34
+ endpointScope = inject(DesignerEndpointsService);
35
+ configuration = inject(DesignerConfigService);
36
+ /** Page-local settings; omitted values inherit optional application defaults. */
37
+ set config(value) {
38
+ this.configuration.set(value);
39
+ this.sessionService?.configureDesignerSession(value);
40
+ this.endpointScope.refresh();
41
+ }
42
+ /** Override any subset of configured URLs for this designer and its preview. */
43
+ set apiUrl(value) {
44
+ this.endpointScope.setOverrides(value);
45
+ }
22
46
  designerState = inject(DesignerStateService);
23
47
  persistenceAdapter = inject(ReportPersistenceAdapter, { optional: true });
24
48
  dataSourceAdapter = inject(ReportDataSourceAdapter, { optional: true });
25
49
  sessionService = inject(ReportSessionContextService, { optional: true });
50
+ executionService = inject(ReportExecutionService, { optional: true });
26
51
  dialog = inject(Dialog, { optional: true });
27
52
  router = inject(Router, { optional: true });
28
53
  reportingConfig = inject(REPORTING_CONFIG, { optional: true });
@@ -103,10 +128,19 @@ export class DesignerComponent {
103
128
  loadedReportDef = null;
104
129
  lastEmittedDef = null;
105
130
  constructor() {
131
+ let previousContext = '';
132
+ effect(() => {
133
+ const context = this.requests.context();
134
+ if (context === previousContext)
135
+ return;
136
+ previousContext = context;
137
+ untracked(() => { this.requests.cancelAll(); this.previewData.set(null); this.loadedReportId = null; });
138
+ }, { allowSignalWrites: true });
106
139
  effect(() => {
107
140
  const def = this.definition();
108
141
  if (!def)
109
142
  return;
143
+ this.requests.cancel('definition');
110
144
  // Skip if this definition is reference-identical to what the designer just emitted or current internal state
111
145
  if (def === this.lastEmittedDef || def === this.designerState.definition()) {
112
146
  this.loadedReportDef = def;
@@ -117,17 +151,29 @@ export class DesignerComponent {
117
151
  if (isNewReport || (def !== this.loadedReportDef && !this.designerState.isDirty())) {
118
152
  this.loadedReportId = def.id;
119
153
  this.loadedReportDef = def;
120
- this.designerState.loadDefinition(def);
154
+ try {
155
+ this.designerState.loadDefinition(normalizeReportDefinition(def));
156
+ this.loadError.set(null);
157
+ }
158
+ catch (error) {
159
+ this.loadError.set(error instanceof Error ? error.message : String(error));
160
+ }
121
161
  }
122
162
  }, { allowSignalWrites: true });
123
163
  effect(() => {
124
164
  const id = this.reportId();
165
+ this.requests.context();
166
+ if (!id || this.definition()) {
167
+ this.requests.cancel('definition');
168
+ return;
169
+ }
125
170
  if (id && id !== this.loadedReportId && !this.definition() && this.persistenceAdapter) {
126
171
  this.loadedReportId = id;
127
- this.persistenceAdapter.load(id).subscribe((def) => {
172
+ this.requests.run('definition', () => this.persistenceAdapter.load(id).pipe(map(normalizeReportDefinition)), def => {
128
173
  this.loadedReportDef = def;
129
174
  this.designerState.loadDefinition(def);
130
- });
175
+ this.loadError.set(null);
176
+ }, error => { this.loadedReportId = null; this.loadError.set(error.message); });
131
177
  }
132
178
  }, { allowSignalWrites: true });
133
179
  effect(() => {
@@ -165,61 +211,58 @@ export class DesignerComponent {
165
211
  });
166
212
  }
167
213
  }
168
- onSave() {
169
- const current = this.currentDefinition();
170
- if (this.persistenceAdapter) {
171
- this.persistenceAdapter.save(current).subscribe({
172
- next: (savedDef) => {
173
- this.designerState.markSaved();
174
- this.reportSaved.emit(savedDef);
175
- this.showToast('Report saved successfully');
176
- this.openSavedDialog(savedDef);
177
- },
178
- error: (err) => {
179
- console.error('[Designer] Save failed:', err);
180
- this.showToast('Failed to save report');
181
- },
182
- });
183
- }
184
- else {
185
- this.designerState.markSaved();
186
- this.reportSaved.emit(current);
187
- this.showToast('Report state saved');
188
- this.openSavedDialog(current);
189
- }
214
+ retryLoad() {
215
+ const id = this.reportId();
216
+ if (!id || !this.persistenceAdapter)
217
+ return;
218
+ this.requests.run('definition', () => this.persistenceAdapter.load(id).pipe(map(normalizeReportDefinition)), def => {
219
+ this.loadedReportId = id;
220
+ this.loadedReportDef = def;
221
+ this.designerState.loadDefinition(def);
222
+ this.loadError.set(null);
223
+ }, error => this.loadError.set(error.message));
190
224
  }
191
- openSavedDialog(savedDef) {
192
- if (!this.dialog)
225
+ onSave() {
226
+ if (this.saveDialogOpen)
193
227
  return;
228
+ if (!this.dialog) {
229
+ this.showToast('The report review dialog is unavailable.');
230
+ return;
231
+ }
194
232
  const routeBase = this.reportingConfig?.routeBase || 'reports';
195
233
  const dialogRef = this.dialog.open(ReportSavedDialogComponent, {
196
- data: { report: savedDef, routeBase },
197
- width: 'min(860px, 92vw)',
198
- maxWidth: '860px',
199
- maxHeight: '84vh',
200
- panelClass: 'rpt-dialog-panel',
201
- disableClose: false,
234
+ injector: this.injector,
235
+ data: { report: this.currentDefinition(), routeBase },
236
+ width: 'min(860px, 92vw)', maxWidth: '860px', maxHeight: '84vh',
237
+ panelClass: 'rpt-dialog-panel', disableClose: false,
238
+ ariaLabelledBy: 'dialog-title', autoFocus: '#rpt-dlg-id',
202
239
  });
203
- dialogRef.closed.subscribe((result) => {
204
- if (result) {
205
- if (result.report) {
206
- this.designerState.updateReportSettings({
207
- name: result.report.name,
208
- description: result.report.description,
209
- slug: result.report.slug,
210
- menuGroup: result.report.menuGroup,
211
- isPublished: result.report.isPublished,
212
- });
213
- }
214
- if (result.action === 'open_live_page' && this.router) {
215
- const targetSlug = result.report.slug || result.report.id;
216
- const url = `/${routeBase.replace(/^\/+|\/+$/g, '')}/${targetSlug}`;
240
+ this.saveDialogOpen = true;
241
+ const unregisterDestroy = this.destroyRef.onDestroy(() => dialogRef.close());
242
+ dialogRef.closed.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(result => {
243
+ unregisterDestroy();
244
+ this.saveDialogOpen = false;
245
+ if (!result)
246
+ return;
247
+ this.designerState.updateReportSettings(result.report);
248
+ this.designerState.markSaved();
249
+ this.reportSaved.emit(result.report);
250
+ this.showToast('Report saved successfully');
251
+ if (result.action === 'open_live_page') {
252
+ const slug = result.report.slug || result.report.id;
253
+ const url = '/' + routeBase.replace(/^\/+|\/+$/g, '') + '/' + slug;
254
+ if (this.router)
217
255
  this.router.navigateByUrl(url);
218
- }
256
+ else if (typeof window !== 'undefined')
257
+ window.location.assign(url);
219
258
  }
220
259
  });
221
260
  }
222
261
  onPreviewExecute(event) {
262
+ if (this.executionService) {
263
+ this.requests.run('preview', () => this.executionService.execute(event.definition, event.parameters), data => this.previewData.set(data), error => this.loadError.set(error.message));
264
+ return;
265
+ }
223
266
  const grid = event.definition.grid;
224
267
  if (!grid) {
225
268
  console.warn('[Designer Preview] No grid attached to report definition.');
@@ -259,14 +302,7 @@ export class DesignerComponent {
259
302
  const session = this.sessionService?.getCurrentSessionContext() ?? {};
260
303
  const compMappings = ds?.parameterMappings || {};
261
304
  const executionParams = { ...compMappings, ...session, ...event.parameters };
262
- this.dataSourceAdapter.execute(ds, executionParams).subscribe({
263
- next: (data) => {
264
- this.previewData.set(data);
265
- },
266
- error: (err) => {
267
- console.error('[Designer Preview] Execution failed:', err);
268
- },
269
- });
305
+ this.requests.run('preview', () => this.dataSourceAdapter.execute(ds, executionParams), data => this.previewData.set(data), error => this.loadError.set(error.message));
270
306
  }
271
307
  copyJson() {
272
308
  if (navigator.clipboard) {
@@ -324,8 +360,9 @@ export class DesignerComponent {
324
360
  setTimeout(() => this.saveMessage.set(null), 3000);
325
361
  }
326
362
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
327
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DesignerComponent, isStandalone: true, selector: "rpt-designer", inputs: { reportId: { classPropertyName: "reportId", publicName: "reportId", isSignal: true, isRequired: false, transformFunction: null }, definition: { classPropertyName: "definition", publicName: "initialReport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { reportSaved: "save", definitionChanged: "definitionChange" }, host: { listeners: { "window:resize": "onResize()", "window:keydown": "onKeyDown($event)" } }, providers: [DesignerStateService], ngImport: i0, template: `
363
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DesignerComponent, isStandalone: true, selector: "rpt-designer", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: false, isRequired: false, transformFunction: null }, apiUrl: { classPropertyName: "apiUrl", publicName: "apiUrl", isSignal: false, isRequired: false, transformFunction: null }, reportId: { classPropertyName: "reportId", publicName: "reportId", isSignal: true, isRequired: false, transformFunction: null }, definition: { classPropertyName: "definition", publicName: "initialReport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { reportSaved: "save", definitionChanged: "definitionChange" }, host: { listeners: { "window:resize": "onResize()", "window:keydown": "onKeyDown($event)" } }, providers: [DesignerStateService, ...DESIGNER_ENDPOINT_PROVIDERS], ngImport: i0, template: `
328
364
  <div class="designer-shell">
365
+ @if (loadError()) { <div role="alert">{{ loadError() }} <button type="button" (click)="retryLoad()">Retry</button></div> }
329
366
  <!-- Top Actions Toolbar with Sidebar Controls -->
330
367
  <rpt-designer-toolbar
331
368
  [isLeftPanelCollapsed]="isLeftPanelCollapsed()"
@@ -368,11 +405,7 @@ export class DesignerComponent {
368
405
  <span>Live Preview Mode — Running with actual Reactive Forms & Dynamic Grid</span>
369
406
  </div>
370
407
  <div class="preview-content">
371
- <rpt-dynamic-renderer
372
- [definition]="currentDefinition()"
373
- [resultData]="previewData()"
374
- (executeRequested)="onPreviewExecute($event)"
375
- />
408
+ <rpt-runtime [report]="currentDefinition()" />
376
409
  </div>
377
410
  </div>
378
411
  }
@@ -528,7 +561,7 @@ export class DesignerComponent {
528
561
  </div>
529
562
  }
530
563
  </div>
531
- `, isInline: true, styles: [":host{display:block;width:100%;height:100%;min-height:400px;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:250px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: DesignerToolbarComponent, selector: "rpt-designer-toolbar", inputs: ["isLeftPanelCollapsed", "isRightPanelCollapsed"], outputs: ["toggleLeftPanel", "toggleRightPanel", "saveRequested"] }, { kind: "component", type: ComponentPaletteComponent, selector: "rpt-component-palette", outputs: ["collapseRequested"] }, { kind: "component", type: DesignCanvasComponent, selector: "rpt-design-canvas" }, { kind: "component", type: PropertyEditorComponent, selector: "rpt-property-editor", outputs: ["collapseRequested"] }, { kind: "component", type: DynamicRendererComponent, selector: "rpt-dynamic-renderer", inputs: ["definition", "initialValues", "resultData"], outputs: ["executeRequested", "resetRequested", "exportRequested", "printRequested", "customActionTriggered", "gridStateChanged", "columnDefsChanged", "selectionChange", "selectionChanged", "rowActionTriggered"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
564
+ `, isInline: true, styles: [":host{display:flex;flex-direction:column;flex:1 1 0%;min-width:0;width:100%;height:100%;min-height:0;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{flex:1;min-height:0;display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:268px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;min-height:0;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;min-height:0;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: DesignerToolbarComponent, selector: "rpt-designer-toolbar", inputs: ["isLeftPanelCollapsed", "isRightPanelCollapsed"], outputs: ["toggleLeftPanel", "toggleRightPanel", "saveRequested"] }, { kind: "component", type: ComponentPaletteComponent, selector: "rpt-component-palette", outputs: ["collapseRequested"] }, { kind: "component", type: DesignCanvasComponent, selector: "rpt-design-canvas" }, { kind: "component", type: PropertyEditorComponent, selector: "rpt-property-editor", outputs: ["collapseRequested"] }, { kind: "component", type: ReportRuntimeComponent, selector: "rpt-report-runtime, rpt-runtime", inputs: ["reportId", "report", "resultData"], outputs: ["resetRequested", "execute", "executed", "exportRequested", "printRequested", "customActionTriggered", "gridStateChange", "columnDefsChange", "selectionChange", "selectionChanged", "rowActionTriggered", "drilldownRequested"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
532
565
  }
533
566
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerComponent, decorators: [{
534
567
  type: Component,
@@ -541,10 +574,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
541
574
  ComponentPaletteComponent,
542
575
  DesignCanvasComponent,
543
576
  PropertyEditorComponent,
544
- DynamicRendererComponent,
577
+ ReportRuntimeComponent,
545
578
  RptIconComponent,
546
- ], providers: [DesignerStateService], template: `
579
+ ], providers: [DesignerStateService, ...DESIGNER_ENDPOINT_PROVIDERS], template: `
547
580
  <div class="designer-shell">
581
+ @if (loadError()) { <div role="alert">{{ loadError() }} <button type="button" (click)="retryLoad()">Retry</button></div> }
548
582
  <!-- Top Actions Toolbar with Sidebar Controls -->
549
583
  <rpt-designer-toolbar
550
584
  [isLeftPanelCollapsed]="isLeftPanelCollapsed()"
@@ -587,11 +621,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
587
621
  <span>Live Preview Mode — Running with actual Reactive Forms & Dynamic Grid</span>
588
622
  </div>
589
623
  <div class="preview-content">
590
- <rpt-dynamic-renderer
591
- [definition]="currentDefinition()"
592
- [resultData]="previewData()"
593
- (executeRequested)="onPreviewExecute($event)"
594
- />
624
+ <rpt-runtime [report]="currentDefinition()" />
595
625
  </div>
596
626
  </div>
597
627
  }
@@ -747,12 +777,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
747
777
  </div>
748
778
  }
749
779
  </div>
750
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;min-height:400px;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:250px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"] }]
751
- }], ctorParameters: () => [], propDecorators: { onResize: [{
780
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:flex;flex-direction:column;flex:1 1 0%;min-width:0;width:100%;height:100%;min-height:0;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.designer-shell{flex:1;min-height:0;display:flex;flex-direction:column;height:100%;background-color:#f8fafc;position:relative;overflow:hidden}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative;min-height:0}.workbench-left-container{display:flex;position:relative;width:268px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-left-container.is-collapsed{width:0!important}.workbench-left-panel{width:100%;height:100%;overflow:hidden;border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-left-container.is-collapsed .workbench-left-panel{visibility:hidden;border-right:none}.workbench-center-panel{flex:1;min-height:0;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0;position:relative}.workbench-right-container{display:flex;position:relative;width:420px;flex-shrink:0;height:100%;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);z-index:20}.workbench-right-container.is-collapsed{width:0!important}.workbench-right-panel{width:100%;height:100%;overflow:hidden;border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff;box-sizing:border-box}.workbench-right-container.is-collapsed .workbench-right-panel{visibility:hidden;border-left:none}.compact-workbench-bar,.workbench-drawer-backdrop{display:none}@media (max-width: 900px){.compact-workbench-bar{display:flex;align-items:center;justify-content:space-around;height:48px;background:var(--rpt-color-surface, #ffffff);border-top:1px solid var(--rpt-color-border, #cbd5e1);padding:0 12px;gap:8px;z-index:45;flex-shrink:0;box-shadow:0 -2px 8px #0000000a;font-family:var(--rpt-font-family, inherit)}.compact-nav-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:6px 14px;border-radius:var(--rpt-border-radius, 6px);border:1px solid transparent;background:transparent;font-family:var(--rpt-font-family, inherit);font-size:var(--rpt-font-size-sm, .75rem);font-weight:var(--rpt-font-weight-medium, 500);letter-spacing:-.01em;line-height:1.4;color:var(--rpt-color-text-secondary, #334155);cursor:pointer;-webkit-user-select:none;user-select:none;transition:all var(--rpt-transition-speed, .15s) ease;white-space:nowrap}.compact-nav-btn rpt-icon{display:inline-flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);transition:color var(--rpt-transition-speed, .15s) ease}.compact-nav-btn:hover{background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-text, #0f172a);border-color:var(--rpt-color-border-subtle, #e2e8f0)}.compact-nav-btn:hover rpt-icon{color:var(--rpt-color-text, #0f172a)}.compact-nav-btn.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:#2563eb40;font-weight:var(--rpt-font-weight-semibold, 600);box-shadow:0 1px 2px #2563eb14}.compact-nav-btn.active rpt-icon{color:var(--rpt-color-primary, #2563eb)}.compact-nav-btn:focus-visible{outline:2px solid var(--rpt-color-primary, #2563eb);outline-offset:1px}.workbench-drawer-backdrop{display:block;position:absolute;inset:0;background:#0f172a59;backdrop-filter:blur(1px);z-index:50}.workbench-left-container{position:absolute;left:0;top:0;bottom:0;width:280px;max-width:85vw;z-index:60;box-shadow:4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-left-container.is-collapsed{transform:translate(-100%);width:280px!important}.workbench-right-container{position:absolute;right:0;top:0;bottom:0;width:380px;max-width:95vw;z-index:60;box-shadow:-4px 0 24px #00000026;transform:translate(0);transition:transform .25s cubic-bezier(.16,1,.3,1)}.workbench-right-container.is-collapsed{transform:translate(100%);width:380px!important}}.preview-mode-container{flex:1;min-height:0;overflow-y:auto;padding:16px;background-color:#f1f5f9;box-sizing:border-box}.preview-banner{max-width:1400px;margin:0 auto 16px;background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe;padding:10px 18px;border-radius:var(--rpt-border-radius-lg, 8px);font-size:var(--rpt-font-size-sm, .8rem);font-weight:600;display:flex;align-items:center;gap:8px;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04));box-sizing:border-box}.preview-content{max-width:1400px;margin:0 auto;background:#fff;border-radius:var(--rpt-border-radius-lg, 8px);border:1px solid var(--rpt-color-border, #cbd5e1);box-shadow:0 4px 6px -1px #0000000d;padding:0;min-height:480px;box-sizing:border-box}.json-mode-container{flex:1;min-height:0;padding:20px 24px;background-color:var(--rpt-color-bg, #f8fafc);display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}.json-editor-card{flex:1;min-height:0;display:flex;flex-direction:column;background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border-subtle, #e2e8f0);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 1px 3px #0000000d,0 1px 2px -1px #00000008;overflow:hidden;transition:background-color .2s ease,border-color .2s ease}.json-editor-card.theme-dark{background:#0f172a;border-color:#1e293b;box-shadow:0 4px 12px #00000040}.json-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;background:var(--rpt-color-surface, #ffffff);border-bottom:1px solid var(--rpt-color-border-subtle, #e2e8f0);flex-shrink:0;transition:background-color .2s ease,border-color .2s ease}.theme-dark .json-banner{background:#0b1120;border-bottom-color:#1e293b}.json-banner-left{display:flex;align-items:center;gap:12px;min-width:0}.json-badge-icon{width:32px;height:32px;border-radius:var(--rpt-border-radius, 6px);background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border:1px solid rgba(37,99,235,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}.theme-dark .json-badge-icon{background:#2563eb33;color:#60a5fa;border-color:#60a5fa4d}.json-title-group{display:flex;flex-direction:column;gap:2px;min-width:0}.json-title-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.json-title{font-size:.875rem;font-weight:600;letter-spacing:-.01em;color:var(--rpt-color-text, #0f172a)}.theme-dark .json-title{color:#f1f5f9}.json-schema-tag{font-size:.6875rem;font-weight:600;letter-spacing:.02em;padding:1px 7px;border-radius:9999px;background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;text-transform:uppercase}.theme-dark .json-schema-tag{background:#1e293b;color:#94a3b8;border-color:#334155}.json-meta-row{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--rpt-color-text-muted, #64748b)}.theme-dark .json-meta-row{color:#64748b}.json-stat-pill strong{color:var(--rpt-color-text, #0f172a);font-weight:600}.theme-dark .json-stat-pill strong,.json-stat-divider{color:#cbd5e1}.theme-dark .json-stat-divider{color:#334155}.json-banner-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.btn-json-action{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text-secondary, #334155);background:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;transition:all .15s ease}.btn-json-action:hover{background:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.btn-json-action.active{background:var(--rpt-color-primary-light, #eff6ff);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);font-weight:600}.theme-dark .btn-json-action{background:#1e293b;border-color:#334155;color:#cbd5e1}.theme-dark .btn-json-action:hover{background:#334155;border-color:#475569;color:#fff}.theme-dark .btn-json-action.active{background:#2563eb40;color:#60a5fa;border-color:#3b82f6}.btn-copy-json{display:inline-flex;align-items:center;gap:6px;padding:5px 13px;font-size:.75rem;font-weight:600;color:#fff;background:var(--rpt-color-primary, #2563eb);border:1px solid var(--rpt-color-primary, #2563eb);border-radius:var(--rpt-border-radius, 6px);cursor:pointer;box-shadow:0 1px 2px #2563eb33;transition:all .15s ease}.btn-copy-json:hover{background:var(--rpt-color-primary-hover, #1d4ed8);border-color:var(--rpt-color-primary-hover, #1d4ed8)}.btn-copy-json.copied{background:#10b981;border-color:#10b981;box-shadow:0 1px 2px #10b98133}.json-viewport{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:background-color .2s ease}.theme-dark .json-viewport{background:#0f172a}.json-scroll-container{flex:1;min-height:0;overflow:auto}.json-code-table{width:100%;border-collapse:collapse;font-family:var(--rpt-font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);font-size:.8125rem;line-height:1.6}.json-code-row{transition:background-color .1s ease}.json-code-row:hover{background:#f8fafc}.theme-dark .json-code-row:hover{background:#1e293b99}.json-line-number{width:44px;min-width:44px;max-width:56px;padding:1px 12px 1px 8px;text-align:right;color:#94a3b8;background:#f8fafc;border-right:1px solid #e2e8f0;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;vertical-align:top;font-size:.75rem}.theme-dark .json-line-number{background:#0b1120;color:#475569;border-right-color:#1e293b}.json-line-text{padding:1px 16px;white-space:pre;vertical-align:top;color:#1e293b}.wrap-enabled .json-line-text{white-space:pre-wrap;word-break:break-all}.theme-dark .json-line-text{color:#e2e8f0}.json-token-key{color:#1e40af;font-weight:600}.json-token-string{color:#047857}.json-token-number{color:#7c3aed;font-weight:500}.json-token-boolean{color:#d97706;font-weight:600}.json-token-null{color:#dc2626;font-weight:600}.theme-dark .json-token-key{color:#60a5fa;font-weight:600}.theme-dark .json-token-string{color:#4ade80}.theme-dark .json-token-number{color:#c084fc;font-weight:500}.theme-dark .json-token-boolean{color:#fbbf24;font-weight:600}.theme-dark .json-token-null{color:#f87171;font-weight:600}.save-toast{position:absolute;bottom:24px;right:24px;background:#10b981;color:#fff;padding:10px 20px;border-radius:6px;font-size:.85rem;font-weight:600;box-shadow:0 10px 15px -3px #0000001a;z-index:100;animation:rpt-fade-in .2s ease}@keyframes rpt-fade-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"] }]
781
+ }], ctorParameters: () => [], propDecorators: { config: [{
782
+ type: Input
783
+ }], apiUrl: [{
784
+ type: Input
785
+ }], onResize: [{
752
786
  type: HostListener,
753
787
  args: ['window:resize']
754
788
  }], onKeyDown: [{
755
789
  type: HostListener,
756
790
  args: ['window:keydown', ['$event']]
757
791
  }] } });
758
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvZGVzaWduZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ25HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSwwQkFBMEIsRUFBMkIsTUFBTSxvREFBb0QsQ0FBQztBQUN6SCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN2RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMz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Qix1QkFBdUIsQ0FBQyxNQUFNO3dEQXdEL0MsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWU7Z0JBVTdCLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIEhvc3RMaXN0ZW5lcixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3JlcG9ydC1wZXJzaXN0ZW5jZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9kYXRhLXNvdXJjZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBEZXNpZ25lclN0YXRlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGVzaWduZXItc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGlhbG9nLCBEaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZGlhbG9nJztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydFNhdmVkRGlhbG9nQ29tcG9uZW50LCBSZXBvcnRTYXZlZERpYWxvZ1Jlc3VsdCB9IGZyb20gJy4vY29tcG9uZW50cy9kaWFsb2dzL3JlcG9ydC1zYXZlZC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IERlc2lnbmVyVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b29sYmFyL2Rlc2lnbmVyLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LXBhbGV0dGUvY29tcG9uZW50LXBhbGV0dGUuY29tcG9uZW50JztcbmltcG9ydCB7IERlc2lnbkNhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kZXNpZ24tY2FudmFzL2Rlc2lnbi1jYW52YXMuY29tcG9uZW50JztcbmltcG9ydCB7IFByb3BlcnR5RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb3BlcnR5LWVkaXRvci9wcm9wZXJ0eS1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL3J1bnRpbWUvZHluYW1pYy1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1kZXNpZ25lcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXG4gICAgRGlhbG9nTW9kdWxlLFxuICAgIERlc2lnbmVyVG9vbGJhckNvbXBvbmVudCxcbiAgICBDb21wb25lbnRQYWxldHRlQ29tcG9uZW50LFxuICAgIERlc2lnbkNhbnZhc0NvbXBvbmVudCxcbiAgICBQcm9wZXJ0eUVkaXRvckNvbXBvbmVudCxcbiAgICBEeW5hbWljUmVuZGVyZXJDb21wb25lbnQsXG4gICAgUnB0SWNvbkNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbRGVzaWduZXJTdGF0ZVNlcnZpY2VdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJkZXNpZ25lci1zaGVsbFwiPlxuICAgICAgPCEtLSBUb3AgQWN0aW9ucyBUb29sYmFyIHdpdGggU2lkZWJhciBDb250cm9scyAtLT5cbiAgICAgIDxycHQtZGVzaWduZXItdG9vbGJhclxuICAgICAgICBbaXNMZWZ0UGFuZWxDb2xsYXBzZWRdPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgIFtpc1JpZ2h0UGFuZWxDb2xsYXBzZWRdPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICAodG9nZ2xlTGVmdFBhbmVsKT1cInRvZ2dsZUxlZnRQYW5lbCgpXCJcbiAgICAgICAgKHRvZ2dsZVJpZ2h0UGFuZWwpPVwidG9nZ2xlUmlnaHRQYW5lbCgpXCJcbiAgICAgICAgKHNhdmVSZXF1ZXN0ZWQpPVwib25TYXZlKClcIlxuICAgICAgLz5cblxuICAgICAgPCEtLSBNYWluIDMtUGFuZWwgTGF5b3V0IHdpdGggQ0RLIERyb3AgTGlzdCBHcm91cCBjb25uZWN0aW5nIFBhbGV0dGUgJiBDYW52YXMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduZXItd29ya2JlbmNoXCIgY2RrRHJvcExpc3RHcm91cD5cbiAgICAgICAgPCEtLSBCYWNrZHJvcCBmb3IgY29tcGFjdC9tb2JpbGUgc2xpZGUtb3V0IGRyYXdlcnMgLS0+XG4gICAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicgJiYgKCFpc0xlZnRQYW5lbENvbGxhcHNlZCgpIHx8ICFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKSkpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIndvcmtiZW5jaC1kcmF3ZXItYmFja2Ryb3BcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlQWxsUGFuZWxzKClcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDEuIExlZnQgUGFuZWw6IENvbXBvbmVudCBQYWxldHRlIChvbmx5IHNob3duIGluIGRlc2lnbiBtb2RlKSAtLT5cbiAgICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3b3JrYmVuY2gtbGVmdC1jb250YWluZXJcIiBbY2xhc3MuaXMtY29sbGFwc2VkXT1cImlzTGVmdFBhbmVsQ29sbGFwc2VkKClcIj5cbiAgICAgICAgICAgIDxhc2lkZSBjbGFzcz1cIndvcmtiZW5jaC1sZWZ0LXBhbmVsXCI+XG4gICAgICAgICAgICAgIDxycHQtY29tcG9uZW50LXBhbGV0dGUgKGNvbGxhcHNlUmVxdWVzdGVkKT1cInRvZ2dsZUxlZnRQYW5lbCgpXCIgLz5cbiAgICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDIuIENlbnRlciBQYW5lbDogRGVzaWduIENhbnZhcyBPUiBMaXZlIFByZXZpZXcgT1IgSlNPTiBTY2hlbWEgLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwid29ya2JlbmNoLWNlbnRlci1wYW5lbFwiPlxuICAgICAgICAgIEBzd2l0Y2ggKHZpZXdNb2RlKCkpIHtcbiAgICAgICAgICAgIEBjYXNlICgnZGVzaWduJykge1xuICAgICAgICAgICAgICA8cnB0LWRlc2lnbi1jYW52YXMgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgncHJldmlldycpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctbW9kZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1iYW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZXllXCIgW3NpemVdPVwiMTVcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TGl2ZSBQcmV2aWV3IE1vZGUg4oCUIFJ1bm5pbmcgd2l0aCBhY3R1YWwgUmVhY3RpdmUgRm9ybXMgJiBEeW5hbWljIEdyaWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHJwdC1keW5hbWljLXJlbmRlcmVyXG4gICAgICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImN1cnJlbnREZWZpbml0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBbcmVzdWx0RGF0YV09XCJwcmV2aWV3RGF0YSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGV4ZWN1dGVSZXF1ZXN0ZWQpPVwib25QcmV2aWV3RXhlY3V0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdqc29uJykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1tb2RlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWVkaXRvci1jYXJkXCIgW2NsYXNzLnRoZW1lLWRhcmtdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIFRvcCBTY2hlbWEgVG9vbGJhciAtLT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWJhbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYW5uZXItbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWJhZGdlLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY29kZVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi10aXRsZS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi10aXRsZVwiPlJlcG9ydCBEZWZpbml0aW9uIFNjaGVtYTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXNjaGVtYS10YWdcIj52e3sgY3VycmVudERlZmluaXRpb24oKS5zY2hlbWFWZXJzaW9uIHx8IDEgfX0uMCDigKIgSlNPTjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tbWV0YS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgY3VycmVudERlZmluaXRpb24oKS5jb21wb25lbnRzLmxlbmd0aCB9fTwvc3Ryb25nPiBjb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtZGl2aWRlclwiPuKAojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sganNvblN0YXRzKCkubGluZXMgfX08L3N0cm9uZz4gbGluZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImpzb24tc3RhdC1kaXZpZGVyXCI+4oCiPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImpzb24tc3RhdC1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sganNvblN0YXRzKCkuc2l6ZUtiIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYW5uZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tanNvbi1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJ3cmFwTGluZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlV3JhcExpbmVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJUb2dnbGUgV29yZCBXcmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImxpc3RcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5XcmFwPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1qc29uLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRWRpdG9yVGhlbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnID8gJ1N3aXRjaCB0byBMaWdodCBUaGVtZScgOiAnU3dpdGNoIHRvIERhcmsgVGhlbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnID8gJ3NwYXJrbGVzJyA6ICdzbGlkZXJzJ1wiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGVkaXRvclRoZW1lKCkgPT09ICdkYXJrJyA/ICdEYXJrJyA6ICdMaWdodCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWpzb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEpzb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkRvd25sb2FkIGRlZmluaXRpb24gYXMgSlNPTiBmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImRvd25sb2FkXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+RXhwb3J0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1jb3B5LWpzb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvcGllZF09XCJjb3B5U3RhdHVzKCkgPT09ICdDb3BpZWQhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weUpzb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNvcHkgc2NoZW1hIEpTT04gdG8gY2xpcGJvYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiY29weVN0YXR1cygpID09PSAnQ29waWVkIScgPyAnY2hlY2snIDogJ2NvcHknXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29weVN0YXR1cygpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIENvZGUgVmlld3BvcnQgd2l0aCBMaW5lIE51bWJlcnMgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi12aWV3cG9ydFwiIFtjbGFzcy53cmFwLWVuYWJsZWRdPVwid3JhcExpbmVzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tc2Nyb2xsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImpzb24tY29kZS10YWJsZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAobGluZSBvZiBoaWdobGlnaHRlZExpbmVzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImpzb24tY29kZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImpzb24tbGluZS1udW1iZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj57eyAkaW5kZXggKyAxIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImpzb24tbGluZS10ZXh0XCI+PHNwYW4gW2lubmVySFRNTF09XCJsaW5lXCI+PC9zcGFuPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8IS0tIDMuIFJpZ2h0IFBhbmVsOiBQcm9wZXJ0eSBFZGl0b3IgKG9ubHkgc2hvd24gaW4gZGVzaWduIG1vZGUpIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdkZXNpZ24nKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtiZW5jaC1yaWdodC1jb250YWluZXJcIiBbY2xhc3MuaXMtY29sbGFwc2VkXT1cImlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCI+XG4gICAgICAgICAgICA8YXNpZGUgY2xhc3M9XCJ3b3JrYmVuY2gtcmlnaHQtcGFuZWxcIj5cbiAgICAgICAgICAgICAgPHJwdC1wcm9wZXJ0eS1lZGl0b3IgKGNvbGxhcHNlUmVxdWVzdGVkKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiIC8+XG4gICAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb21wYWN0L01vYmlsZSBXb3JrYmVuY2ggQm90dG9tIE5hdmlnYXRpb24gQmFyIC0tPlxuICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICA8bmF2IGNsYXNzPVwiY29tcGFjdC13b3JrYmVuY2gtYmFyXCIgYXJpYS1sYWJlbD1cIk1vYmlsZSBXb3JrYmVuY2ggTmF2aWdhdGlvblwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wYWN0LW5hdi1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCIhaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbkxlZnRQYW5lbE9ubHkoKVwiXG4gICAgICAgICAgICB0aXRsZT1cIk9wZW4gQ29tcG9uZW50IFBhbGV0dGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwibGF5ZXJzXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+Q29tcG9uZW50czwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wYWN0LW5hdi1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpICYmIGlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUFsbFBhbmVscygpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiRnVsbCBDYW52YXMgVmlld1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJlZGl0XCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+Q2FudmFzPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbXBhY3QtbmF2LWJ0blwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIiFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblJpZ2h0UGFuZWxPbmx5KClcIlxuICAgICAgICAgICAgdGl0bGU9XCJPcGVuIFByb3BlcnRpZXMgSW5zcGVjdG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInNldHRpbmdzXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+UHJvcGVydGllczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uYXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gU2F2ZSBOb3RpZmljYXRpb24gVG9hc3QgLS0+XG4gICAgICBAaWYgKHNhdmVNZXNzYWdlKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNhdmUtdG9hc3RcIj5cbiAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNoZWNrXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgIDxzcGFuPnt7IHNhdmVNZXNzYWdlKCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogNDAwcHg7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5kZXNpZ25lci1zaGVsbCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cbiAgICAuZGVzaWduZXItd29ya2JlbmNoIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAxO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAyNTBweDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgdHJhbnNpdGlvbjogd2lkdGggdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQtc21vb3RoLCAyNTBtcykgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgICB6LWluZGV4OiAyMDtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1sZWZ0LWNvbnRhaW5lci5pcy1jb2xsYXBzZWQge1xuICAgICAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1sZWZ0LXBhbmVsIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIuaXMtY29sbGFwc2VkIC53b3JrYmVuY2gtbGVmdC1wYW5lbCB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgfVxuXG4gICAgLndvcmtiZW5jaC1jZW50ZXItcGFuZWwge1xuICAgICAgZmxleDogMTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG5cbiAgICAud29ya2JlbmNoLXJpZ2h0LWNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgd2lkdGg6IDQyMHB4O1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB0cmFuc2l0aW9uOiB3aWR0aCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZC1zbW9vdGgsIDI1MG1zKSBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAgIHotaW5kZXg6IDIwO1xuICAgIH1cbiAgICAud29ya2JlbmNoLXJpZ2h0LWNvbnRhaW5lci5pcy1jb2xsYXBzZWQge1xuICAgICAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1yaWdodC1wYW5lbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCAud29ya2JlbmNoLXJpZ2h0LXBhbmVsIHtcbiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgIH1cblxuXG5cbiAgICAuY29tcGFjdC13b3JrYmVuY2gtYmFyIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtZHJhd2VyLWJhY2tkcm9wIHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7XG4gICAgICAuY29tcGFjdC13b3JrYmVuY2gtYmFyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgICAgIGhlaWdodDogNDhweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICAgIHBhZGRpbmc6IDAgMTJweDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIHotaW5kZXg6IDQ1O1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAtMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuICAgICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG4ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBwYWRkaW5nOiA2cHggMTRweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1ycHQtZm9udC13ZWlnaHQtbWVkaXVtLCA1MDApO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzMzNDE1NSk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuIHJwdC1pY29uIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UtaG92ZXIsICNmMWY1ZjkpO1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItc3VidGxlLCAjZTJlOGYwKTtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG46aG92ZXIgcnB0LWljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bi5hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1saWdodCwgI2VmZjZmZik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgzNywgOTksIDIzNSwgMC4yNSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1ycHQtZm9udC13ZWlnaHQtc2VtaWJvbGQsIDYwMCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDJweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjA4KTtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG4uYWN0aXZlIHJwdC1pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG46Zm9jdXMtdmlzaWJsZSB7XG4gICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAxcHg7XG4gICAgICB9XG5cbiAgICAgIC53b3JrYmVuY2gtZHJhd2VyLWJhY2tkcm9wIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC4zNSk7XG4gICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxcHgpO1xuICAgICAgICB6LWluZGV4OiA1MDtcbiAgICAgIH1cblxuICAgICAgLndvcmtiZW5jaC1sZWZ0LWNvbnRhaW5lciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHdpZHRoOiAyODBweDtcbiAgICAgICAgbWF4LXdpZHRoOiA4NXZ3O1xuICAgICAgICB6LWluZGV4OiA2MDtcbiAgICAgICAgYm94LXNoYWRvdzogNHB4IDAgMjRweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAgIH1cbiAgICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcbiAgICAgICAgd2lkdGg6IDI4MHB4ICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgIC53b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIHdpZHRoOiAzODBweDtcbiAgICAgICAgbWF4LXdpZHRoOiA5NXZ3O1xuICAgICAgICB6LWluZGV4OiA2MDtcbiAgICAgICAgYm94LXNoYWRvdzogLTRweCAwIDI0cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgICB9XG4gICAgICAud29ya2JlbmNoLXJpZ2h0LWNvbnRhaW5lci5pcy1jb2xsYXBzZWQge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgICAgIHdpZHRoOiAzODBweCAhaW1wb3J0YW50O1xuICAgICAgfVxuICAgIH1cbiAgICAvKiBQcmV2aWV3IE1vZGUgKi9cbiAgICAucHJldmlldy1tb2RlLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNWY5O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnByZXZpZXctYmFubmVyIHtcbiAgICAgIG1heC13aWR0aDogMTQwMHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG8gMTZweCBhdXRvO1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGNvbG9yOiAjMWU0MGFmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JmZGJmZTtcbiAgICAgIHBhZGRpbmc6IDEwcHggMThweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjhyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy14cywgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnByZXZpZXctY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLyogSlNPTiBTY2hlbWEgTW9kZSAtIEVudGVycHJpc2UgTGlnaHQgJiBBZGFwdGFibGUgRGVzaWduICovXG4gICAgLmpzb24tbW9kZS1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBwYWRkaW5nOiAyMHB4IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYmcsICNmOGZhZmMpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG5cbiAgICAuanNvbi1lZGl0b3ItY2FyZCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtbGcsIDhweCk7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpLCAwIDFweCAycHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDMpO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjAwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDIwMG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmpzb24tZWRpdG9yLWNhcmQudGhlbWUtZGFyayB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGYxNzJhO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMWUyOTNiO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gICAgfVxuXG4gICAgLyogU3ViLWhlYWRlciBiYW5uZXIgKi9cbiAgICAuanNvbi1iYW5uZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBnYXA6IDE2cHg7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE4cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGVhc2UsIGJvcmRlci1jb2xvciAyMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLWJhbm5lciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGIxMTIwO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzFlMjkzYjtcbiAgICB9XG5cbiAgICAuanNvbi1iYW5uZXItbGVmdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogMTJweDtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG5cbiAgICAuanNvbi1iYWRnZS1pY29uIHtcbiAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1saWdodCwgI2VmZjZmZik7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNywgOTksIDIzNSwgMC4xOCk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tYmFkZ2UtaWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjIpO1xuICAgICAgY29sb3I6ICM2MGE1ZmE7XG4gICAgICBib3JkZXItY29sb3I6IHJnYmEoOTYsIDE2NSwgMjUwLCAwLjMpO1xuICAgIH1cblxuICAgIC5qc29uLXRpdGxlLWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiAycHg7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuXG4gICAgLmpzb24tdGl0bGUtcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxuXG4gICAgLmpzb24tdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdGl0bGUge1xuICAgICAgY29sb3I6ICNmMWY1Zjk7XG4gICAgfVxuXG4gICAgLmpzb24tc2NoZW1hLXRhZyB7XG4gICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICAgICAgcGFkZGluZzogMXB4IDdweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgIGJhY2tncm91bmQ6ICNmMWY1Zjk7XG4gICAgICBjb2xvcjogIzQ3NTU2OTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXNjaGVtYS10YWcge1xuICAgICAgYmFja2dyb3VuZDogIzFlMjkzYjtcbiAgICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMzM0MTU1O1xuICAgIH1cblxuICAgIC5qc29uLW1ldGEtcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLW1ldGEtcm93IHtcbiAgICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgIH1cblxuICAgIC5qc29uLXN0YXQtcGlsbCBzdHJvbmcge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tc3RhdC1waWxsIHN0cm9uZyB7XG4gICAgICBjb2xvcjogI2NiZDVlMTtcbiAgICB9XG5cbiAgICAuanNvbi1zdGF0LWRpdmlkZXIge1xuICAgICAgY29sb3I6ICNjYmQ1ZTE7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tc3RhdC1kaXZpZGVyIHtcbiAgICAgIGNvbG9yOiAjMzM0MTU1O1xuICAgIH1cblxuICAgIC5qc29uLWJhbm5lci1hY3Rpb25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAuYnRuLWpzb24tYWN0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgcGFkZGluZzogNXB4IDExcHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzMzNDE1NSk7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmJ0bi1qc29uLWFjdGlvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2YxZjVmOSk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItaG92ZXIsICM5NGEzYjgpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICB9XG5cbiAgICAuYnRuLWpzb24tYWN0aW9uLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1saWdodCwgI2VmZjZmZik7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb24ge1xuICAgICAgYmFja2dyb3VuZDogIzFlMjkzYjtcbiAgICAgIGJvcmRlci1jb2xvcjogIzMzNDE1NTtcbiAgICAgIGNvbG9yOiAjY2JkNWUxO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogIzMzNDE1NTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzQ3NTU2OTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb24uYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzcsIDk5LCAyMzUsIDAuMjUpO1xuICAgICAgY29sb3I6ICM2MGE1ZmE7XG4gICAgICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gICAgfVxuXG4gICAgLmJ0bi1jb3B5LWpzb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBwYWRkaW5nOiA1cHggMTNweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgzNywgOTksIDIzNSwgMC4yKTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBlYXNlO1xuICAgIH1cblxuICAgIC5idG4tY29weS1qc29uOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cblxuICAgIC5idG4tY29weS1qc29uLmNvcGllZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMTBiOTgxO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgxNiwgMTg1LCAxMjksIDAuMik7XG4gICAgfVxuXG4gICAgLyogVmlld3BvcnQgJiBDb2RlIFRhYmxlICovXG4gICAgLmpzb24tdmlld3BvcnQge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXZpZXdwb3J0IHtcbiAgICAgIGJhY2tncm91bmQ6ICMwZjE3MmE7XG4gICAgfVxuXG4gICAgLmpzb24tc2Nyb2xsLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIH1cblxuICAgIC5qc29uLWNvZGUtdGFibGUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseS1tb25vLCB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlKTtcbiAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICB9XG5cbiAgICAuanNvbi1jb2RlLXJvdyB7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEwMG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmpzb24tY29kZS1yb3c6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1jb2RlLXJvdzpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCA0MSwgNTksIDAuNik7XG4gICAgfVxuXG4gICAgLmpzb24tbGluZS1udW1iZXIge1xuICAgICAgd2lkdGg6IDQ0cHg7XG4gICAgICBtaW4td2lkdGg6IDQ0cHg7XG4gICAgICBtYXgtd2lkdGg6IDU2cHg7XG4gICAgICBwYWRkaW5nOiAxcHggMTJweCAxcHggOHB4O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICBjb2xvcjogIzk0YTNiODtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1saW5lLW51bWJlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGIxMTIwO1xuICAgICAgY29sb3I6ICM0NzU1Njk7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICMxZTI5M2I7XG4gICAgfVxuXG4gICAgLmpzb24tbGluZS10ZXh0IHtcbiAgICAgIHBhZGRpbmc6IDFweCAxNnB4O1xuICAgICAgd2hpdGUtc3BhY2U6IHByZTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICBjb2xvcjogIzFlMjkzYjtcbiAgICB9XG5cbiAgICAud3JhcC1lbmFibGVkIC5qc29uLWxpbmUtdGV4dCB7XG4gICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tbGluZS10ZXh0IHtcbiAgICAgIGNvbG9yOiAjZTJlOGYwO1xuICAgIH1cblxuICAgIC8qIFN5bnRheCBUb2tlbnM6IExpZ2h0IE1vZGUgKENyaXNwICYgSGlnaC1Db250cmFzdCkgKi9cbiAgICAuanNvbi10b2tlbi1rZXkge1xuICAgICAgY29sb3I6ICMxZTQwYWY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLXN0cmluZyB7XG4gICAgICBjb2xvcjogIzA0Nzg1NztcbiAgICB9XG5cbiAgICAuanNvbi10b2tlbi1udW1iZXIge1xuICAgICAgY29sb3I6ICM3YzNhZWQ7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLWJvb2xlYW4ge1xuICAgICAgY29sb3I6ICNkOTc3MDY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLW51bGwge1xuICAgICAgY29sb3I6ICNkYzI2MjY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC8qIFN5bnRheCBUb2tlbnM6IERhcmsgTW9kZSAoQ2FsaWJyYXRlZCBOaWdodCBNb2RlKSAqL1xuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLWtleSB7XG4gICAgICBjb2xvcjogIzYwYTVmYTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tc3RyaW5nIHtcbiAgICAgIGNvbG9yOiAjNGFkZTgwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLW51bWJlciB7XG4gICAgICBjb2xvcjogI2MwODRmYztcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tYm9vbGVhbiB7XG4gICAgICBjb2xvcjogI2ZiYmYyNDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tbnVsbCB7XG4gICAgICBjb2xvcjogI2Y4NzE3MTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuICAgIC8qIFNhdmUgVG9hc3QgTm90aWZpY2F0aW9uICovXG4gICAgLnNhdmUtdG9hc3Qge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAyNHB4O1xuICAgICAgcmlnaHQ6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuODVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB6LWluZGV4OiAxMDA7XG4gICAgICBhbmltYXRpb246IHJwdC1mYWRlLWluIDIwMG1zIGVhc2U7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgcnB0LWZhZGUtaW4ge1xuICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfVxuICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZWFkb25seSBkZXNpZ25lclN0YXRlID0gaW5qZWN0KERlc2lnbmVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwZXJzaXN0ZW5jZUFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFTb3VyY2VBZGFwdGVyID0gaW5qZWN0KFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2cgPSBpbmplY3QoRGlhbG9nLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwb3J0aW5nQ29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgLyoqIE9wdGlvbmFsIHJlcG9ydElkIHRvIGxvYWQgZnJvbSBwZXJzaXN0ZW5jZSBhZGFwdGVyICovXG4gIHJlYWRvbmx5IHJlcG9ydElkID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIC8qKiBPcHRpb25hbCBkZWZpbml0aW9uIHRvIGxvYWQgZGlyZWN0bHkgKi9cbiAgcmVhZG9ubHkgZGVmaW5pdGlvbiA9IGlucHV0PFJlcG9ydERlZmluaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgYWxpYXM6ICdpbml0aWFsUmVwb3J0JyB9KTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIHNhdmVzIHRoZSByZXBvcnQgKi9cbiAgcmVhZG9ubHkgcmVwb3J0U2F2ZWQgPSBvdXRwdXQ8UmVwb3J0RGVmaW5pdGlvbj4oeyBhbGlhczogJ3NhdmUnIH0pO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW5ldmVyIHRoZSByZXBvcnQgZGVmaW5pdGlvbiBjaGFuZ2VzIGluIHRoZSB2aXN1YWwgZGVzaWduZXIgKi9cbiAgcmVhZG9ubHkgZGVmaW5pdGlvbkNoYW5nZWQgPSBvdXRwdXQ8UmVwb3J0RGVmaW5pdGlvbj4oeyBhbGlhczogJ2RlZmluaXRpb25DaGFuZ2UnIH0pO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnREZWZpbml0aW9uID0gdGhpcy5kZXNpZ25lclN0YXRlLmRlZmluaXRpb247XG4gIHJlYWRvbmx5IHZpZXdNb2RlID0gdGhpcy5kZXNpZ25lclN0YXRlLnZpZXdNb2RlO1xuXG4gIHJlYWRvbmx5IHByZXZpZXdEYXRhID0gc2lnbmFsPHVua25vd25bXSB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBzYXZlTWVzc2FnZSA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgY29weVN0YXR1cyA9IHNpZ25hbDxzdHJpbmc+KCdDb3B5IEpTT04nKTtcbiAgcmVhZG9ubHkgaXNMZWZ0UGFuZWxDb2xsYXBzZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHRvZ2dsZUxlZnRQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkLnVwZGF0ZSgodikgPT4gIXYpO1xuICB9XG5cbiAgdG9nZ2xlUmlnaHRQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC51cGRhdGUoKHYpID0+ICF2KTtcbiAgfVxuXG4gIG9wZW5MZWZ0UGFuZWxPbmx5KCk6IHZvaWQge1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gIH1cblxuICBvcGVuUmlnaHRQYW5lbE9ubHkoKTogdm9pZCB7XG4gICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlQWxsUGFuZWxzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmlubmVyV2lkdGggPCA5MDApIHtcbiAgICAgIGlmICghdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCgpICYmICF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCgpKSB7XG4gICAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlzQ3RybE9yQ21kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgY29uc3QgaXNJbnB1dCA9IHRhcmdldCAmJiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgKHRhcmdldCBhcyBIVE1MRWxlbWVudCkuaXNDb250ZW50RWRpdGFibGUpO1xuICAgIGlmIChpc0lucHV0KSByZXR1cm47XG5cbiAgICBpZiAoaXNDdHJsT3JDbWQgJiYgIWV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2InKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVMZWZ0UGFuZWwoKTtcbiAgICB9IGVsc2UgaWYgKGlzQ3RybE9yQ21kICYmIGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2InKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVSaWdodFBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgZm9ybWF0dGVkSnNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyZW50RGVmaW5pdGlvbigpLCBudWxsLCAyKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWRpdG9yVGhlbWUgPSBzaWduYWw8J2xpZ2h0JyB8ICdkYXJrJz4oJ2xpZ2h0Jyk7XG4gIHJlYWRvbmx5IHdyYXBMaW5lcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkganNvblN0YXRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLmZvcm1hdHRlZEpzb24oKTtcbiAgICBjb25zdCBsaW5lcyA9IGpzb24gPyBqc29uLnNwbGl0KCdcXG4nKS5sZW5ndGggOiAwO1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IEJsb2IoW2pzb25dKS5zaXplO1xuICAgIGNvbnN0IHNpemVLYiA9IGJ5dGVzIDwgMTAyNCA/IGAke2J5dGVzfSBCYCA6IGAkeyhieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYDtcbiAgICByZXR1cm4geyBsaW5lcywgc2l6ZUtiIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhpZ2hsaWdodGVkTGluZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZm9ybWF0dGVkSnNvbigpO1xuICAgIGlmICghanNvbikgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnN5bnRheEhpZ2hsaWdodEpzb24oanNvbikuc3BsaXQoJ1xcbicpO1xuICB9KTtcblxuICBwcml2YXRlIGxvYWRlZFJlcG9ydElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsb2FkZWRSZXBvcnREZWY6IFJlcG9ydERlZmluaXRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZERlZjogUmVwb3J0RGVmaW5pdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgZGVmID0gdGhpcy5kZWZpbml0aW9uKCk7XG4gICAgICAgIGlmICghZGVmKSByZXR1cm47XG5cbiAgICAgICAgLy8gU2tpcCBpZiB0aGlzIGRlZmluaXRpb24gaXMgcmVmZXJlbmNlLWlkZW50aWNhbCB0byB3aGF0IHRoZSBkZXNpZ25lciBqdXN0IGVtaXR0ZWQgb3IgY3VycmVudCBpbnRlcm5hbCBzdGF0ZVxuICAgICAgICBpZiAoZGVmID09PSB0aGlzLmxhc3RFbWl0dGVkRGVmIHx8IGRlZiA9PT0gdGhpcy5kZXNpZ25lclN0YXRlLmRlZmluaXRpb24oKSkge1xuICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0RGVmID0gZGVmO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgcmVsb2FkIGlmIHJlcG9ydCBJRCBjaGFuZ2VkIChkaWZmZXJlbnQgcmVwb3J0KSwgb3IgaW5pdGlhbCBsb2FkLCBvciBleHRlcm5hbCBkZWZpbml0aW9uIHdoZW4gbm90IGFjdGl2ZWx5IGVkaXRpbmdcbiAgICAgICAgY29uc3QgaXNOZXdSZXBvcnQgPSBkZWYuaWQgIT09IHRoaXMubG9hZGVkUmVwb3J0SWQ7XG4gICAgICAgIGlmIChpc05ld1JlcG9ydCB8fCAoZGVmICE9PSB0aGlzLmxvYWRlZFJlcG9ydERlZiAmJiAhdGhpcy5kZXNpZ25lclN0YXRlLmlzRGlydHkoKSkpIHtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gZGVmLmlkO1xuICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0RGVmID0gZGVmO1xuICAgICAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5sb2FkRGVmaW5pdGlvbihkZWYpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnJlcG9ydElkKCk7XG4gICAgICAgIGlmIChpZCAmJiBpZCAhPT0gdGhpcy5sb2FkZWRSZXBvcnRJZCAmJiAhdGhpcy5kZWZpbml0aW9uKCkgJiYgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gaWQ7XG4gICAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIubG9hZChpZCkuc3Vic2NyaWJlKChkZWYpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0RGVmID0gZGVmO1xuICAgICAgICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKGRlZik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbigpO1xuICAgICAgaWYgKHRoaXMuZGVzaWduZXJTdGF0ZS5pc0RpcnR5KCkpIHtcbiAgICAgICAgdGhpcy5sYXN0RW1pdHRlZERlZiA9IGN1cnJlbnQ7XG4gICAgICAgIHRoaXMubG9hZGVkUmVwb3J0RGVmID0gY3VycmVudDtcbiAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGN1cnJlbnQuaWQ7XG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbkNoYW5nZWQuZW1pdChjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCA5MDApIHtcbiAgICAgICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPCAxMjAwKSB7XG4gICAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbigpICYmICF0aGlzLnJlcG9ydElkKCkpIHtcbiAgICAgIC8vIFN0YXJ0IHdpdGggYSBjbGVhbiByZXBvcnQgZGVmaW5pdGlvblxuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKHtcbiAgICAgICAgaWQ6IGBycHQtJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOCl9YCxcbiAgICAgICAgbmFtZTogJ05ldyBDdXN0b20gUmVwb3J0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdWaXN1YWxseSBkZXNpZ25lZCByZXBvcnRpbmcgcGFnZSBjcmVhdGVkIHdpdGggQldheXMtUmVwb3J0LicsXG4gICAgICAgIHNjaGVtYVZlcnNpb246IDEsXG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGxheW91dDogeyBjb2x1bW5zOiAxMiwgZ2FwOiAxNiwgcGFkZGluZzogMjQsIGRpcmVjdGlvbjogJ2x0cicgfSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIHBhcmFtZXRlcnM6IFtdLFxuICAgICAgICBkYXRhU291cmNlczogW10sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblNhdmUoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudERlZmluaXRpb24oKTtcbiAgICBpZiAodGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHtcbiAgICAgIHRoaXMucGVyc2lzdGVuY2VBZGFwdGVyLnNhdmUoY3VycmVudCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHNhdmVkRGVmKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLm1hcmtTYXZlZCgpO1xuICAgICAgICAgIHRoaXMucmVwb3J0U2F2ZWQuZW1pdChzYXZlZERlZik7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QoJ1JlcG9ydCBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgICB0aGlzLm9wZW5TYXZlZERpYWxvZyhzYXZlZERlZik7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW0Rlc2lnbmVyXSBTYXZlIGZhaWxlZDonLCBlcnIpO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KCdGYWlsZWQgdG8gc2F2ZSByZXBvcnQnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubWFya1NhdmVkKCk7XG4gICAgICB0aGlzLnJlcG9ydFNhdmVkLmVtaXQoY3VycmVudCk7XG4gICAgICB0aGlzLnNob3dUb2FzdCgnUmVwb3J0IHN0YXRlIHNhdmVkJyk7XG4gICAgICB0aGlzLm9wZW5TYXZlZERpYWxvZyhjdXJyZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5TYXZlZERpYWxvZyhzYXZlZERlZjogUmVwb3J0RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaWFsb2cpIHJldHVybjtcblxuICAgIGNvbnN0IHJvdXRlQmFzZSA9IHRoaXMucmVwb3J0aW5nQ29uZmlnPy5yb3V0ZUJhc2UgfHwgJ3JlcG9ydHMnO1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW48UmVwb3J0U2F2ZWREaWFsb2dSZXN1bHQsIHsgcmVwb3J0OiBSZXBvcnREZWZpbml0aW9uOyByb3V0ZUJhc2U/OiBzdHJpbmcgfT4oXG4gICAgICBSZXBvcnRTYXZlZERpYWxvZ0NvbXBvbmVudCxcbiAgICAgIHtcbiAgICAgICAgZGF0YTogeyByZXBvcnQ6IHNhdmVkRGVmLCByb3V0ZUJhc2UgfSxcbiAgICAgICAgd2lkdGg6ICdtaW4oODYwcHgsIDkydncpJyxcbiAgICAgICAgbWF4V2lkdGg6ICc4NjBweCcsXG4gICAgICAgIG1heEhlaWdodDogJzg0dmgnLFxuICAgICAgICBwYW5lbENsYXNzOiAncnB0LWRpYWxvZy1wYW5lbCcsXG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICB9XG4gICAgKTtcblxuICAgIGRpYWxvZ1JlZi5jbG9zZWQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5yZXBvcnQpIHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUudXBkYXRlUmVwb3J0U2V0dGluZ3Moe1xuICAgICAgICAgICAgbmFtZTogcmVzdWx0LnJlcG9ydC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHJlc3VsdC5yZXBvcnQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBzbHVnOiByZXN1bHQucmVwb3J0LnNsdWcsXG4gICAgICAgICAgICBtZW51R3JvdXA6IHJlc3VsdC5yZXBvcnQubWVudUdyb3VwLFxuICAgICAgICAgICAgaXNQdWJsaXNoZWQ6IHJlc3VsdC5yZXBvcnQuaXNQdWJsaXNoZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5hY3Rpb24gPT09ICdvcGVuX2xpdmVfcGFnZScgJiYgdGhpcy5yb3V0ZXIpIHtcbiAgICAgICAgICBjb25zdCB0YXJnZXRTbHVnID0gcmVzdWx0LnJlcG9ydC5zbHVnIHx8IHJlc3VsdC5yZXBvcnQuaWQ7XG4gICAgICAgICAgY29uc3QgdXJsID0gYC8ke3JvdXRlQmFzZS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJyl9LyR7dGFyZ2V0U2x1Z31gO1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25QcmV2aWV3RXhlY3V0ZShldmVudDoge1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0pOiB2b2lkIHtcbiAgICBjb25zdCBncmlkID0gZXZlbnQuZGVmaW5pdGlvbi5ncmlkO1xuICAgIGlmICghZ3JpZCkge1xuICAgICAgY29uc29sZS53YXJuKCdbRGVzaWduZXIgUHJldmlld10gTm8gZ3JpZCBhdHRhY2hlZCB0byByZXBvcnQgZGVmaW5pdGlvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZHMgPSBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzPy5maW5kKChkKSA9PiBkLmlkID09PSBncmlkLmRhdGFTb3VyY2VJZCk7XG4gICAgaWYgKCFkcyAmJiBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzPy5sZW5ndGggPiAwKSB7XG4gICAgICBkcyA9IGV2ZW50LmRlZmluaXRpb24uZGF0YVNvdXJjZXNbMF07XG4gICAgfVxuXG4gICAgaWYgKCFkcykge1xuICAgICAgLy8gTG9vayBmb3IgU3RvcmVkIFByb2NlZHVyZSBvciBUYWJsZSBjb25maWd1cmVkIG9uIGFueSBjb21wb25lbnQgaW4gdGhlIHJlcG9ydFxuICAgICAgY29uc3QgY29tcFdpdGhFbnRpdHkgPSBldmVudC5kZWZpbml0aW9uLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5kYXRhU291cmNlPy5lbnRpdHlOYW1lKTtcbiAgICAgIGlmIChjb21wV2l0aEVudGl0eT8uZGF0YVNvdXJjZT8uZW50aXR5TmFtZSkge1xuICAgICAgICBkcyA9IHtcbiAgICAgICAgICBpZDogJ3NwLScgKyBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgbmFtZTogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5lbnRpdHlOYW1lLFxuICAgICAgICAgIGVuZHBvaW50OiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgc2NoZW1hOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNjaGVtYSB8fCAnZGJvJyxcbiAgICAgICAgICB0eXBlOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNvdXJjZVR5cGUgfHwgJ3Byb2NlZHVyZScsXG4gICAgICAgICAgbWV0aG9kOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICd0YWJsZScgPyAnR0VUJyA6ICdTVE9SRURfUFJPQ0VEVVJFJyxcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nczogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5wYXJhbWV0ZXJNYXBwaW5ncyxcbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFkcykge1xuICAgICAgZHMgPSB7XG4gICAgICAgIGlkOiAnZGVmYXVsdC1kcycsXG4gICAgICAgIG5hbWU6ICdSZXBvcnQgRGF0YScsXG4gICAgICAgIGVuZHBvaW50OiAnZGVmYXVsdCcsXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZUFkYXB0ZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0Rlc2lnbmVyIFByZXZpZXddIE5vIGRhdGFTb3VyY2VBZGFwdGVyIGF2YWlsYWJsZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgY29uc3QgY29tcE1hcHBpbmdzID0gKGRzIGFzIGFueSk/LnBhcmFtZXRlck1hcHBpbmdzIHx8IHt9O1xuICAgIGNvbnN0IGV4ZWN1dGlvblBhcmFtcyA9IHsgLi4uY29tcE1hcHBpbmdzLCAuLi5zZXNzaW9uLCAuLi5ldmVudC5wYXJhbWV0ZXJzIH07XG5cbiAgICB0aGlzLmRhdGFTb3VyY2VBZGFwdGVyLmV4ZWN1dGUoZHMsIGV4ZWN1dGlvblBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMucHJldmlld0RhdGEuc2V0KGRhdGEpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tEZXNpZ25lciBQcmV2aWV3XSBFeGVjdXRpb24gZmFpbGVkOicsIGVycik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgY29weUpzb24oKTogdm9pZCB7XG4gICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIHtcbiAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZm9ybWF0dGVkSnNvbigpKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb3B5U3RhdHVzLnNldCgnQ29waWVkIScpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29weVN0YXR1cy5zZXQoJ0NvcHkgSlNPTicpLCAyMDAwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRvd25sb2FkSnNvbigpOiB2b2lkIHtcbiAgICBjb25zdCBqc29uID0gdGhpcy5mb3JtYXR0ZWRKc29uKCk7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtqc29uXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGNvbnN0IHNsdWcgPSAodGhpcy5jdXJyZW50RGVmaW5pdGlvbigpLm5hbWUgfHwgJ3JlcG9ydCcpXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1teYS16MC05Xy1dL2csICctJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIGxpbmsuZG93bmxvYWQgPSBgJHtzbHVnfS5yZXBvcnQuanNvbmA7XG4gICAgbGluay5jbGljaygpO1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgfVxuXG4gIHRvZ2dsZUVkaXRvclRoZW1lKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yVGhlbWUudXBkYXRlKChjdXJyZW50KSA9PiAoY3VycmVudCA9PT0gJ2xpZ2h0JyA/ICdkYXJrJyA6ICdsaWdodCcpKTtcbiAgfVxuXG4gIHRvZ2dsZVdyYXBMaW5lcygpOiB2b2lkIHtcbiAgICB0aGlzLndyYXBMaW5lcy51cGRhdGUoKHYpID0+ICF2KTtcbiAgfVxuXG4gIHByaXZhdGUgc3ludGF4SGlnaGxpZ2h0SnNvbihqc29uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGVzY2FwZWQgPSBqc29uXG4gICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcblxuICAgIHJldHVybiBlc2NhcGVkLnJlcGxhY2UoXG4gICAgICAvKFwiKFxcXFx1W2EtekEtWjAtOV17NH18XFxcXFtedV18W15cXFxcXCJdKSpcIihcXHMqOik/fFxcYih0cnVlfGZhbHNlfG51bGwpXFxifC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK1xcLV0/XFxkKyk/KS9nLFxuICAgICAgKG1hdGNoKSA9PiB7XG4gICAgICAgIGxldCBjbHMgPSAnanNvbi10b2tlbi1udW1iZXInO1xuICAgICAgICBpZiAoL15cIi8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgICBpZiAoLzokLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4ta2V5JztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4tc3RyaW5nJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoL3RydWV8ZmFsc2UvLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4tYm9vbGVhbic7XG4gICAgICAgIH0gZWxzZSBpZiAoL251bGwvLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgICAgY2xzID0gJ2pzb24tdG9rZW4tbnVsbCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIiR7Y2xzfVwiPiR7bWF0Y2h9PC9zcGFuPmA7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1RvYXN0KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZU1lc3NhZ2Uuc2V0KG1lc3NhZ2UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zYXZlTWVzc2FnZS5zZXQobnVsbCksIDMwMDApO1xuICB9XG59XG4iXX0=
792
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvZGVzaWduZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxFQUNaLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ25HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxF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QUFDLE1BQU07d0RBYWxDLE1BQU07c0JBQWxCLEtBQUs7Z0JBT08sTUFBTTtzQkFBbEIsS0FBSztnQkEwRE4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWU7Z0JBVTdCLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcG9ydFJlcXVlc3RTY29wZSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvcmVwb3J0LXJlcXVlc3Qtc2NvcGUnO1xuaW1wb3J0IHsgbm9ybWFsaXplUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uL3BlcnNpc3RlbmNlL3NlcnZpY2VzL3NjaGVtYS12YWxpZGF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJ3YXlzUmVwb3J0Q29uZmlnIH0gZnJvbSAnLi4vLi4vY29yZS9jb25maWcvYndheXMtcmVwb3J0LWNvbmZpZyc7XG5pbXBvcnQgeyBEZXNpZ25lckNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Rlc2lnbmVyLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIEluamVjdG9yLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkluaXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9yZXBvcnQtcGVyc2lzdGVuY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvZGF0YS1zb3VyY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVzaWduZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Rlc2lnbmVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IERpYWxvZywgRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RpYWxvZyc7XG5pbXBvcnQgeyBSRVBPUlRJTkdfQ09ORklHIH0gZnJvbSAnLi4vLi4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBSZXBvcnRTYXZlZERpYWxvZ0NvbXBvbmVudCwgUmVwb3J0U2F2ZWREaWFsb2dSZXN1bHQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGlhbG9ncy9yZXBvcnQtc2F2ZWQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZXNpZ25lclRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdG9vbGJhci9kZXNpZ25lci10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21wb25lbnRQYWxldHRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbXBvbmVudC1wYWxldHRlL2NvbXBvbmVudC1wYWxldHRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZXNpZ25DYW52YXNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGVzaWduLWNhbnZhcy9kZXNpZ24tY2FudmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9wZXJ0eUVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcm9wZXJ0eS1lZGl0b3IvcHJvcGVydHktZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXBvcnRSdW50aW1lQ29tcG9uZW50IH0gZnJvbSAnLi4vcnVudGltZS9yZXBvcnQtcnVudGltZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVwb3J0RXhlY3V0aW9uU2VydmljZSB9IGZyb20gJy4uL3J1bnRpbWUvcmVwb3J0LWV4ZWN1dGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9wcmltaXRpdmVzL2NvbXBvbmVudHMvaWNvbi9ycHQtaWNvbi5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBCd2F5c1JlcG9ydEFwaVVybHMgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9lbmRwb2ludC10b2tlbnMnO1xuaW1wb3J0IHsgRGVzaWduZXJFbmRwb2ludHNTZXJ2aWNlLCBERVNJR05FUl9FTkRQT0lOVF9QUk9WSURFUlMgfSBmcm9tICcuL3NlcnZpY2VzL2Rlc2lnbmVyLWVuZHBvaW50cy5zZXJ2aWNlJztcblxuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWRlc2lnbmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgRGVzaWduZXJUb29sYmFyQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQsXG4gICAgRGVzaWduQ2FudmFzQ29tcG9uZW50LFxuICAgIFByb3BlcnR5RWRpdG9yQ29tcG9uZW50LFxuICAgIFJlcG9ydFJ1bnRpbWVDb21wb25lbnQsXG4gICAgUnB0SWNvbkNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbRGVzaWduZXJTdGF0ZVNlcnZpY2UsIC4uLkRFU0lHTkVSX0VORFBPSU5UX1BST1ZJREVSU10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRlc2lnbmVyLXNoZWxsXCI+XG4gICAgICBAaWYgKGxvYWRFcnJvcigpKSB7IDxkaXYgcm9sZT1cImFsZXJ0XCI+e3sgbG9hZEVycm9yKCkgfX0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJldHJ5TG9hZCgpXCI+UmV0cnk8L2J1dHRvbj48L2Rpdj4gfVxuICAgICAgPCEtLSBUb3AgQWN0aW9ucyBUb29sYmFyIHdpdGggU2lkZWJhciBDb250cm9scyAtLT5cbiAgICAgIDxycHQtZGVzaWduZXItdG9vbGJhclxuICAgICAgICBbaXNMZWZ0UGFuZWxDb2xsYXBzZWRdPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgIFtpc1JpZ2h0UGFuZWxDb2xsYXBzZWRdPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICAodG9nZ2xlTGVmdFBhbmVsKT1cInRvZ2dsZUxlZnRQYW5lbCgpXCJcbiAgICAgICAgKHRvZ2dsZVJpZ2h0UGFuZWwpPVwidG9nZ2xlUmlnaHRQYW5lbCgpXCJcbiAgICAgICAgKHNhdmVSZXF1ZXN0ZWQpPVwib25TYXZlKClcIlxuICAgICAgLz5cblxuICAgICAgPCEtLSBNYWluIDMtUGFuZWwgTGF5b3V0IHdpdGggQ0RLIERyb3AgTGlzdCBHcm91cCBjb25uZWN0aW5nIFBhbGV0dGUgJiBDYW52YXMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduZXItd29ya2JlbmNoXCIgY2RrRHJvcExpc3RHcm91cD5cbiAgICAgICAgPCEtLSBCYWNrZHJvcCBmb3IgY29tcGFjdC9tb2JpbGUgc2xpZGUtb3V0IGRyYXdlcnMgLS0+XG4gICAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicgJiYgKCFpc0xlZnRQYW5lbENvbGxhcHNlZCgpIHx8ICFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKSkpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIndvcmtiZW5jaC1kcmF3ZXItYmFja2Ryb3BcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlQWxsUGFuZWxzKClcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICA+PC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDEuIExlZnQgUGFuZWw6IENvbXBvbmVudCBQYWxldHRlIChvbmx5IHNob3duIGluIGRlc2lnbiBtb2RlKSAtLT5cbiAgICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3b3JrYmVuY2gtbGVmdC1jb250YWluZXJcIiBbY2xhc3MuaXMtY29sbGFwc2VkXT1cImlzTGVmdFBhbmVsQ29sbGFwc2VkKClcIj5cbiAgICAgICAgICAgIDxhc2lkZSBjbGFzcz1cIndvcmtiZW5jaC1sZWZ0LXBhbmVsXCI+XG4gICAgICAgICAgICAgIDxycHQtY29tcG9uZW50LXBhbGV0dGUgKGNvbGxhcHNlUmVxdWVzdGVkKT1cInRvZ2dsZUxlZnRQYW5lbCgpXCIgLz5cbiAgICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDIuIENlbnRlciBQYW5lbDogRGVzaWduIENhbnZhcyBPUiBMaXZlIFByZXZpZXcgT1IgSlNPTiBTY2hlbWEgLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwid29ya2JlbmNoLWNlbnRlci1wYW5lbFwiPlxuICAgICAgICAgIEBzd2l0Y2ggKHZpZXdNb2RlKCkpIHtcbiAgICAgICAgICAgIEBjYXNlICgnZGVzaWduJykge1xuICAgICAgICAgICAgICA8cnB0LWRlc2lnbi1jYW52YXMgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgncHJldmlldycpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctbW9kZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1iYW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZXllXCIgW3NpemVdPVwiMTVcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TGl2ZSBQcmV2aWV3IE1vZGUg4oCUIFJ1bm5pbmcgd2l0aCBhY3R1YWwgUmVhY3RpdmUgRm9ybXMgJiBEeW5hbWljIEdyaWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHJwdC1ydW50aW1lIFtyZXBvcnRdPVwiY3VycmVudERlZmluaXRpb24oKVwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdqc29uJykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1tb2RlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWVkaXRvci1jYXJkXCIgW2NsYXNzLnRoZW1lLWRhcmtdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIFRvcCBTY2hlbWEgVG9vbGJhciAtLT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWJhbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYW5uZXItbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWJhZGdlLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY29kZVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi10aXRsZS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tdGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwianNvbi10aXRsZVwiPlJlcG9ydCBEZWZpbml0aW9uIFNjaGVtYTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXNjaGVtYS10YWdcIj52e3sgY3VycmVudERlZmluaXRpb24oKS5zY2hlbWFWZXJzaW9uIHx8IDEgfX0uMCDigKIgSlNPTjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tbWV0YS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgY3VycmVudERlZmluaXRpb24oKS5jb21wb25lbnRzLmxlbmd0aCB9fTwvc3Ryb25nPiBjb21wb25lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtZGl2aWRlclwiPuKAojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJqc29uLXN0YXQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sganNvblN0YXRzKCkubGluZXMgfX08L3N0cm9uZz4gbGluZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImpzb24tc3RhdC1kaXZpZGVyXCI+4oCiPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImpzb24tc3RhdC1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sganNvblN0YXRzKCkuc2l6ZUtiIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1iYW5uZXItYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tanNvbi1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJ3cmFwTGluZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlV3JhcExpbmVzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJUb2dnbGUgV29yZCBXcmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImxpc3RcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5XcmFwPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1qc29uLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRWRpdG9yVGhlbWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnID8gJ1N3aXRjaCB0byBMaWdodCBUaGVtZScgOiAnU3dpdGNoIHRvIERhcmsgVGhlbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiZWRpdG9yVGhlbWUoKSA9PT0gJ2RhcmsnID8gJ3NwYXJrbGVzJyA6ICdzbGlkZXJzJ1wiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGVkaXRvclRoZW1lKCkgPT09ICdkYXJrJyA/ICdEYXJrJyA6ICdMaWdodCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWpzb24tYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZEpzb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkRvd25sb2FkIGRlZmluaXRpb24gYXMgSlNPTiBmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImRvd25sb2FkXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+RXhwb3J0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1jb3B5LWpzb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNvcGllZF09XCJjb3B5U3RhdHVzKCkgPT09ICdDb3BpZWQhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29weUpzb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkNvcHkgc2NoZW1hIEpTT04gdG8gY2xpcGJvYXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiY29weVN0YXR1cygpID09PSAnQ29waWVkIScgPyAnY2hlY2snIDogJ2NvcHknXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29weVN0YXR1cygpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIENvZGUgVmlld3BvcnQgd2l0aCBMaW5lIE51bWJlcnMgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi12aWV3cG9ydFwiIFtjbGFzcy53cmFwLWVuYWJsZWRdPVwid3JhcExpbmVzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tc2Nyb2xsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImpzb24tY29kZS10YWJsZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAobGluZSBvZiBoaWdobGlnaHRlZExpbmVzKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImpzb24tY29kZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImpzb24tbGluZS1udW1iZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj57eyAkaW5kZXggKyAxIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImpzb24tbGluZS10ZXh0XCI+PHNwYW4gW2lubmVySFRNTF09XCJsaW5lXCI+PC9zcGFuPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8IS0tIDMuIFJpZ2h0IFBhbmVsOiBQcm9wZXJ0eSBFZGl0b3IgKG9ubHkgc2hvd24gaW4gZGVzaWduIG1vZGUpIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdkZXNpZ24nKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtiZW5jaC1yaWdodC1jb250YWluZXJcIiBbY2xhc3MuaXMtY29sbGFwc2VkXT1cImlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCI+XG4gICAgICAgICAgICA8YXNpZGUgY2xhc3M9XCJ3b3JrYmVuY2gtcmlnaHQtcGFuZWxcIj5cbiAgICAgICAgICAgICAgPHJwdC1wcm9wZXJ0eS1lZGl0b3IgKGNvbGxhcHNlUmVxdWVzdGVkKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiIC8+XG4gICAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb21wYWN0L01vYmlsZSBXb3JrYmVuY2ggQm90dG9tIE5hdmlnYXRpb24gQmFyIC0tPlxuICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICA8bmF2IGNsYXNzPVwiY29tcGFjdC13b3JrYmVuY2gtYmFyXCIgYXJpYS1sYWJlbD1cIk1vYmlsZSBXb3JrYmVuY2ggTmF2aWdhdGlvblwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wYWN0LW5hdi1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCIhaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbkxlZnRQYW5lbE9ubHkoKVwiXG4gICAgICAgICAgICB0aXRsZT1cIk9wZW4gQ29tcG9uZW50IFBhbGV0dGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwibGF5ZXJzXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+Q29tcG9uZW50czwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wYWN0LW5hdi1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpICYmIGlzUmlnaHRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbG9zZUFsbFBhbmVscygpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiRnVsbCBDYW52YXMgVmlld1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJlZGl0XCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+Q2FudmFzPC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbXBhY3QtbmF2LWJ0blwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIiFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblJpZ2h0UGFuZWxPbmx5KClcIlxuICAgICAgICAgICAgdGl0bGU9XCJPcGVuIFByb3BlcnRpZXMgSW5zcGVjdG9yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInNldHRpbmdzXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgICAgPHNwYW4+UHJvcGVydGllczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uYXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gU2F2ZSBOb3RpZmljYXRpb24gVG9hc3QgLS0+XG4gICAgICBAaWYgKHNhdmVNZXNzYWdlKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInNhdmUtdG9hc3RcIj5cbiAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNoZWNrXCIgW3NpemVdPVwiMTRcIiAvPlxuICAgICAgICAgIDxzcGFuPnt7IHNhdmVNZXNzYWdlKCkgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGZsZXg6IDEgMSAwJTtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXNoZWxsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXdvcmtiZW5jaCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMjY4cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLXNtb290aCwgMjUwbXMpIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1wYW5lbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCAud29ya2JlbmNoLWxlZnQtcGFuZWwge1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgIH1cblxuICAgIC53b3JrYmVuY2gtY2VudGVyLXBhbmVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC53b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogNDIwcHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLXNtb290aCwgMjUwbXMpIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCB7XG4gICAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAud29ya2JlbmNoLXJpZ2h0LXBhbmVsIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIuaXMtY29sbGFwc2VkIC53b3JrYmVuY2gtcmlnaHQtcGFuZWwge1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgfVxuXG5cblxuICAgIC5jb21wYWN0LXdvcmtiZW5jaC1iYXIge1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1kcmF3ZXItYmFja2Ryb3Age1xuICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcbiAgICAgIC5jb21wYWN0LXdvcmtiZW5jaC1iYXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgICAgICAgaGVpZ2h0OiA0OHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgICAgcGFkZGluZzogMCAxMnB4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgei1pbmRleDogNDU7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBib3gtc2hhZG93OiAwIC0ycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxNHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLXJwdC1mb250LXdlaWdodC1tZWRpdW0sIDUwMCk7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtc2Vjb25kYXJ5LCAjMzM0MTU1KTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG4gcnB0LWljb24ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICAgIHRyYW5zaXRpb246IGNvbG9yIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG46aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2YxZjVmOSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bjpob3ZlciBycHQtaWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuLmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWxpZ2h0LCAjZWZmNmZmKTtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjI1KTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLXJwdC1mb250LXdlaWdodC1zZW1pYm9sZCwgNjAwKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMDgpO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bi5hY3RpdmUgcnB0LWljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bjpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDFweDtcbiAgICAgIH1cblxuICAgICAgLndvcmtiZW5jaC1kcmF3ZXItYmFja2Ryb3Age1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjM1KTtcbiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDFweCk7XG4gICAgICAgIHotaW5kZXg6IDUwO1xuICAgICAgfVxuXG4gICAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDI4MHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDg1dnc7XG4gICAgICAgIHotaW5kZXg6IDYwO1xuICAgICAgICBib3gtc2hhZG93OiA0cHggMCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgfVxuICAgICAgLndvcmtiZW5jaC1sZWZ0LWNvbnRhaW5lci5pcy1jb2xsYXBzZWQge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpO1xuICAgICAgICB3aWR0aDogMjgwcHggIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgd2lkdGg6IDM4MHB4O1xuICAgICAgICBtYXgtd2lkdGg6IDk1dnc7XG4gICAgICAgIHotaW5kZXg6IDYwO1xuICAgICAgICBib3gtc2hhZG93OiAtNHB4IDAgMjRweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAyNTBtcyBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAgIH1cbiAgICAgIC53b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICAgICAgd2lkdGg6IDM4MHB4ICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8qIFByZXZpZXcgTW9kZSAqL1xuICAgIC5wcmV2aWV3LW1vZGUtY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmNWY5O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnByZXZpZXctYmFubmVyIHtcbiAgICAgIG1heC13aWR0aDogMTQwMHB4O1xuICAgICAgbWFyZ2luOiAwIGF1dG8gMTZweCBhdXRvO1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGNvbG9yOiAjMWU0MGFmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JmZGJmZTtcbiAgICAgIHBhZGRpbmc6IDEwcHggMThweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjhyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy14cywgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnByZXZpZXctY29udGVudCB7XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3gtc2hhZG93OiAwIDRweCA2cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLyogSlNPTiBTY2hlbWEgTW9kZSAtIEVudGVycHJpc2UgTGlnaHQgJiBBZGFwdGFibGUgRGVzaWduICovXG4gICAgLmpzb24tbW9kZS1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBwYWRkaW5nOiAyMHB4IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYmcsICNmOGZhZmMpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG5cbiAgICAuanNvbi1lZGl0b3ItY2FyZCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtbGcsIDhweCk7XG4gICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpLCAwIDFweCAycHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMDMpO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMjAwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDIwMG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmpzb24tZWRpdG9yLWNhcmQudGhlbWUtZGFyayB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGYxNzJhO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMWUyOTNiO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gICAgfVxuXG4gICAgLyogU3ViLWhlYWRlciBiYW5uZXIgKi9cbiAgICAuanNvbi1iYW5uZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBnYXA6IDE2cHg7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE4cHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGVhc2UsIGJvcmRlci1jb2xvciAyMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLWJhbm5lciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGIxMTIwO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzFlMjkzYjtcbiAgICB9XG5cbiAgICAuanNvbi1iYW5uZXItbGVmdCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogMTJweDtcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG5cbiAgICAuanNvbi1iYWRnZS1pY29uIHtcbiAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgaGVpZ2h0OiAzMnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1saWdodCwgI2VmZjZmZik7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNywgOTksIDIzNSwgMC4xOCk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tYmFkZ2UtaWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjIpO1xuICAgICAgY29sb3I6ICM2MGE1ZmE7XG4gICAgICBib3JkZXItY29sb3I6IHJnYmEoOTYsIDE2NSwgMjUwLCAwLjMpO1xuICAgIH1cblxuICAgIC5qc29uLXRpdGxlLWdyb3VwIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiAycHg7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuXG4gICAgLmpzb24tdGl0bGUtcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxuXG4gICAgLmpzb24tdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdGl0bGUge1xuICAgICAgY29sb3I6ICNmMWY1Zjk7XG4gICAgfVxuXG4gICAgLmpzb24tc2NoZW1hLXRhZyB7XG4gICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICAgICAgcGFkZGluZzogMXB4IDdweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgIGJhY2tncm91bmQ6ICNmMWY1Zjk7XG4gICAgICBjb2xvcjogIzQ3NTU2OTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXNjaGVtYS10YWcge1xuICAgICAgYmFja2dyb3VuZDogIzFlMjkzYjtcbiAgICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMzM0MTU1O1xuICAgIH1cblxuICAgIC5qc29uLW1ldGEtcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLW1ldGEtcm93IHtcbiAgICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgIH1cblxuICAgIC5qc29uLXN0YXQtcGlsbCBzdHJvbmcge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tc3RhdC1waWxsIHN0cm9uZyB7XG4gICAgICBjb2xvcjogI2NiZDVlMTtcbiAgICB9XG5cbiAgICAuanNvbi1zdGF0LWRpdmlkZXIge1xuICAgICAgY29sb3I6ICNjYmQ1ZTE7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tc3RhdC1kaXZpZGVyIHtcbiAgICAgIGNvbG9yOiAjMzM0MTU1O1xuICAgIH1cblxuICAgIC5qc29uLWJhbm5lci1hY3Rpb25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAuYnRuLWpzb24tYWN0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNnB4O1xuICAgICAgcGFkZGluZzogNXB4IDExcHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzMzNDE1NSk7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDE1MG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmJ0bi1qc29uLWFjdGlvbjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2YxZjVmOSk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItaG92ZXIsICM5NGEzYjgpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICB9XG5cbiAgICAuYnRuLWpzb24tYWN0aW9uLmFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1saWdodCwgI2VmZjZmZik7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb24ge1xuICAgICAgYmFja2dyb3VuZDogIzFlMjkzYjtcbiAgICAgIGJvcmRlci1jb2xvcjogIzMzNDE1NTtcbiAgICAgIGNvbG9yOiAjY2JkNWUxO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogIzMzNDE1NTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzQ3NTU2OTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5idG4tanNvbi1hY3Rpb24uYWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzcsIDk5LCAyMzUsIDAuMjUpO1xuICAgICAgY29sb3I6ICM2MGE1ZmE7XG4gICAgICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gICAgfVxuXG4gICAgLmJ0bi1jb3B5LWpzb24ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBwYWRkaW5nOiA1cHggMTNweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgzNywgOTksIDIzNSwgMC4yKTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBlYXNlO1xuICAgIH1cblxuICAgIC5idG4tY29weS1qc29uOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktaG92ZXIsICMxZDRlZDgpO1xuICAgIH1cblxuICAgIC5idG4tY29weS1qc29uLmNvcGllZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMTBiOTgxO1xuICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IDAgcmdiYSgxNiwgMTg1LCAxMjksIDAuMik7XG4gICAgfVxuXG4gICAgLyogVmlld3BvcnQgJiBDb2RlIFRhYmxlICovXG4gICAgLmpzb24tdmlld3BvcnQge1xuICAgICAgZmxleDogMTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAyMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXZpZXdwb3J0IHtcbiAgICAgIGJhY2tncm91bmQ6ICMwZjE3MmE7XG4gICAgfVxuXG4gICAgLmpzb24tc2Nyb2xsLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIH1cblxuICAgIC5qc29uLWNvZGUtdGFibGUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseS1tb25vLCB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlKTtcbiAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNjtcbiAgICB9XG5cbiAgICAuanNvbi1jb2RlLXJvdyB7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEwMG1zIGVhc2U7XG4gICAgfVxuXG4gICAgLmpzb24tY29kZS1yb3c6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1jb2RlLXJvdzpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCA0MSwgNTksIDAuNik7XG4gICAgfVxuXG4gICAgLmpzb24tbGluZS1udW1iZXIge1xuICAgICAgd2lkdGg6IDQ0cHg7XG4gICAgICBtaW4td2lkdGg6IDQ0cHg7XG4gICAgICBtYXgtd2lkdGg6IDU2cHg7XG4gICAgICBwYWRkaW5nOiAxcHggMTJweCAxcHggOHB4O1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICBjb2xvcjogIzk0YTNiODtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICB9XG5cbiAgICAudGhlbWUtZGFyayAuanNvbi1saW5lLW51bWJlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMGIxMTIwO1xuICAgICAgY29sb3I6ICM0NzU1Njk7XG4gICAgICBib3JkZXItcmlnaHQtY29sb3I6ICMxZTI5M2I7XG4gICAgfVxuXG4gICAgLmpzb24tbGluZS10ZXh0IHtcbiAgICAgIHBhZGRpbmc6IDFweCAxNnB4O1xuICAgICAgd2hpdGUtc3BhY2U6IHByZTtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICBjb2xvcjogIzFlMjkzYjtcbiAgICB9XG5cbiAgICAud3JhcC1lbmFibGVkIC5qc29uLWxpbmUtdGV4dCB7XG4gICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tbGluZS10ZXh0IHtcbiAgICAgIGNvbG9yOiAjZTJlOGYwO1xuICAgIH1cblxuICAgIC8qIFN5bnRheCBUb2tlbnM6IExpZ2h0IE1vZGUgKENyaXNwICYgSGlnaC1Db250cmFzdCkgKi9cbiAgICAuanNvbi10b2tlbi1rZXkge1xuICAgICAgY29sb3I6ICMxZTQwYWY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLXN0cmluZyB7XG4gICAgICBjb2xvcjogIzA0Nzg1NztcbiAgICB9XG5cbiAgICAuanNvbi10b2tlbi1udW1iZXIge1xuICAgICAgY29sb3I6ICM3YzNhZWQ7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLWJvb2xlYW4ge1xuICAgICAgY29sb3I6ICNkOTc3MDY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC5qc29uLXRva2VuLW51bGwge1xuICAgICAgY29sb3I6ICNkYzI2MjY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgIH1cblxuICAgIC8qIFN5bnRheCBUb2tlbnM6IERhcmsgTW9kZSAoQ2FsaWJyYXRlZCBOaWdodCBNb2RlKSAqL1xuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLWtleSB7XG4gICAgICBjb2xvcjogIzYwYTVmYTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tc3RyaW5nIHtcbiAgICAgIGNvbG9yOiAjNGFkZTgwO1xuICAgIH1cblxuICAgIC50aGVtZS1kYXJrIC5qc29uLXRva2VuLW51bWJlciB7XG4gICAgICBjb2xvcjogI2MwODRmYztcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tYm9vbGVhbiB7XG4gICAgICBjb2xvcjogI2ZiYmYyNDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuXG4gICAgLnRoZW1lLWRhcmsgLmpzb24tdG9rZW4tbnVsbCB7XG4gICAgICBjb2xvcjogI2Y4NzE3MTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgfVxuICAgIC8qIFNhdmUgVG9hc3QgTm90aWZpY2F0aW9uICovXG4gICAgLnNhdmUtdG9hc3Qge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAyNHB4O1xuICAgICAgcmlnaHQ6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuODVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB6LWluZGV4OiAxMDA7XG4gICAgICBhbmltYXRpb246IHJwdC1mYWRlLWluIDIwMG1zIGVhc2U7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgcnB0LWZhZGUtaW4ge1xuICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfVxuICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RzID0gbmV3IFJlcG9ydFJlcXVlc3RTY29wZSgpO1xuICByZWFkb25seSBsb2FkRXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgc2F2ZURpYWxvZ09wZW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludFNjb3BlID0gaW5qZWN0KERlc2lnbmVyRW5kcG9pbnRzU2VydmljZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWd1cmF0aW9uID0gaW5qZWN0KERlc2lnbmVyQ29uZmlnU2VydmljZSk7XG5cbiAgLyoqIFBhZ2UtbG9jYWwgc2V0dGluZ3M7IG9taXR0ZWQgdmFsdWVzIGluaGVyaXQgb3B0aW9uYWwgYXBwbGljYXRpb24gZGVmYXVsdHMuICovXG4gIEBJbnB1dCgpIHNldCBjb25maWcodmFsdWU6IEJ3YXlzUmVwb3J0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZXQodmFsdWUpO1xuICAgIHRoaXMuc2Vzc2lvblNlcnZpY2U/LmNvbmZpZ3VyZURlc2lnbmVyU2Vzc2lvbih2YWx1ZSk7XG4gICAgdGhpcy5lbmRwb2ludFNjb3BlLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKiBPdmVycmlkZSBhbnkgc3Vic2V0IG9mIGNvbmZpZ3VyZWQgVVJMcyBmb3IgdGhpcyBkZXNpZ25lciBhbmQgaXRzIHByZXZpZXcuICovXG4gIEBJbnB1dCgpIHNldCBhcGlVcmwodmFsdWU6IEJ3YXlzUmVwb3J0QXBpVXJscyB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmVuZHBvaW50U2NvcGUuc2V0T3ZlcnJpZGVzKHZhbHVlKTtcbiAgfVxuXG4gIHJlYWRvbmx5IGRlc2lnbmVyU3RhdGUgPSBpbmplY3QoRGVzaWduZXJTdGF0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3RlbmNlQWRhcHRlciA9IGluamVjdChSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YVNvdXJjZUFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGlvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0RXhlY3V0aW9uU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2cgPSBpbmplY3QoRGlhbG9nLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwb3J0aW5nQ29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgLyoqIE9wdGlvbmFsIHJlcG9ydElkIHRvIGxvYWQgZnJvbSBwZXJzaXN0ZW5jZSBhZGFwdGVyICovXG4gIHJlYWRvbmx5IHJlcG9ydElkID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gIC8qKiBPcHRpb25hbCBkZWZpbml0aW9uIHRvIGxvYWQgZGlyZWN0bHkgKi9cbiAgcmVhZG9ubHkgZGVmaW5pdGlvbiA9IGlucHV0PFJlcG9ydERlZmluaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgYWxpYXM6ICdpbml0aWFsUmVwb3J0JyB9KTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIHNhdmVzIHRoZSByZXBvcnQgKi9cbiAgcmVhZG9ubHkgcmVwb3J0U2F2ZWQgPSBvdXRwdXQ8UmVwb3J0RGVmaW5pdGlvbj4oeyBhbGlhczogJ3NhdmUnIH0pO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW5ldmVyIHRoZSByZXBvcnQgZGVmaW5pdGlvbiBjaGFuZ2VzIGluIHRoZSB2aXN1YWwgZGVzaWduZXIgKi9cbiAgcmVhZG9ubHkgZGVmaW5pdGlvbkNoYW5nZWQgPSBvdXRwdXQ8UmVwb3J0RGVmaW5pdGlvbj4oeyBhbGlhczogJ2RlZmluaXRpb25DaGFuZ2UnIH0pO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnREZWZpbml0aW9uID0gdGhpcy5kZXNpZ25lclN0YXRlLmRlZmluaXRpb247XG4gIHJlYWRvbmx5IHZpZXdNb2RlID0gdGhpcy5kZXNpZ25lclN0YXRlLnZpZXdNb2RlO1xuXG4gIHJlYWRvbmx5IHByZXZpZXdEYXRhID0gc2lnbmFsPHVua25vd25bXSB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBzYXZlTWVzc2FnZSA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgY29weVN0YXR1cyA9IHNpZ25hbDxzdHJpbmc+KCdDb3B5IEpTT04nKTtcbiAgcmVhZG9ubHkgaXNMZWZ0UGFuZWxDb2xsYXBzZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHRvZ2dsZUxlZnRQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkLnVwZGF0ZSgodikgPT4gIXYpO1xuICB9XG5cbiAgdG9nZ2xlUmlnaHRQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC51cGRhdGUoKHYpID0+ICF2KTtcbiAgfVxuXG4gIG9wZW5MZWZ0UGFuZWxPbmx5KCk6IHZvaWQge1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gIH1cblxuICBvcGVuUmlnaHRQYW5lbE9ubHkoKTogdm9pZCB7XG4gICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlQWxsUGFuZWxzKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmlubmVyV2lkdGggPCA5MDApIHtcbiAgICAgIGlmICghdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCgpICYmICF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCgpKSB7XG4gICAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlzQ3RybE9yQ21kID0gZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5O1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgY29uc3QgaXNJbnB1dCA9IHRhcmdldCAmJiAodGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgKHRhcmdldCBhcyBIVE1MRWxlbWVudCkuaXNDb250ZW50RWRpdGFibGUpO1xuICAgIGlmIChpc0lucHV0KSByZXR1cm47XG5cbiAgICBpZiAoaXNDdHJsT3JDbWQgJiYgIWV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2InKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVMZWZ0UGFuZWwoKTtcbiAgICB9IGVsc2UgaWYgKGlzQ3RybE9yQ21kICYmIGV2ZW50LmFsdEtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2InKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVSaWdodFBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgZm9ybWF0dGVkSnNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyZW50RGVmaW5pdGlvbigpLCBudWxsLCAyKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWRpdG9yVGhlbWUgPSBzaWduYWw8J2xpZ2h0JyB8ICdkYXJrJz4oJ2xpZ2h0Jyk7XG4gIHJlYWRvbmx5IHdyYXBMaW5lcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcmVhZG9ubHkganNvblN0YXRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLmZvcm1hdHRlZEpzb24oKTtcbiAgICBjb25zdCBsaW5lcyA9IGpzb24gPyBqc29uLnNwbGl0KCdcXG4nKS5sZW5ndGggOiAwO1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IEJsb2IoW2pzb25dKS5zaXplO1xuICAgIGNvbnN0IHNpemVLYiA9IGJ5dGVzIDwgMTAyNCA/IGAke2J5dGVzfSBCYCA6IGAkeyhieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYDtcbiAgICByZXR1cm4geyBsaW5lcywgc2l6ZUtiIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhpZ2hsaWdodGVkTGluZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZm9ybWF0dGVkSnNvbigpO1xuICAgIGlmICghanNvbikgcmV0dXJuIFtdO1xuICAgIHJldHVybiB0aGlzLnN5bnRheEhpZ2hsaWdodEpzb24oanNvbikuc3BsaXQoJ1xcbicpO1xuICB9KTtcblxuICBwcml2YXRlIGxvYWRlZFJlcG9ydElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsb2FkZWRSZXBvcnREZWY6IFJlcG9ydERlZmluaXRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZERlZjogUmVwb3J0RGVmaW5pdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGxldCBwcmV2aW91c0NvbnRleHQgPSAnJztcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucmVxdWVzdHMuY29udGV4dCgpO1xuICAgICAgaWYgKGNvbnRleHQgPT09IHByZXZpb3VzQ29udGV4dCkgcmV0dXJuO1xuICAgICAgcHJldmlvdXNDb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB7IHRoaXMucmVxdWVzdHMuY2FuY2VsQWxsKCk7IHRoaXMucHJldmlld0RhdGEuc2V0KG51bGwpOyB0aGlzLmxvYWRlZFJlcG9ydElkID0gbnVsbDsgfSk7XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZiA9IHRoaXMuZGVmaW5pdGlvbigpO1xuICAgICAgICBpZiAoIWRlZikgcmV0dXJuO1xuICAgICAgICB0aGlzLnJlcXVlc3RzLmNhbmNlbCgnZGVmaW5pdGlvbicpO1xuXG4gICAgICAgIC8vIFNraXAgaWYgdGhpcyBkZWZpbml0aW9uIGlzIHJlZmVyZW5jZS1pZGVudGljYWwgdG8gd2hhdCB0aGUgZGVzaWduZXIganVzdCBlbWl0dGVkIG9yIGN1cnJlbnQgaW50ZXJuYWwgc3RhdGVcbiAgICAgICAgaWYgKGRlZiA9PT0gdGhpcy5sYXN0RW1pdHRlZERlZiB8fCBkZWYgPT09IHRoaXMuZGVzaWduZXJTdGF0ZS5kZWZpbml0aW9uKCkpIHtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydERlZiA9IGRlZjtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IHJlbG9hZCBpZiByZXBvcnQgSUQgY2hhbmdlZCAoZGlmZmVyZW50IHJlcG9ydCksIG9yIGluaXRpYWwgbG9hZCwgb3IgZXh0ZXJuYWwgZGVmaW5pdGlvbiB3aGVuIG5vdCBhY3RpdmVseSBlZGl0aW5nXG4gICAgICAgIGNvbnN0IGlzTmV3UmVwb3J0ID0gZGVmLmlkICE9PSB0aGlzLmxvYWRlZFJlcG9ydElkO1xuICAgICAgICBpZiAoaXNOZXdSZXBvcnQgfHwgKGRlZiAhPT0gdGhpcy5sb2FkZWRSZXBvcnREZWYgJiYgIXRoaXMuZGVzaWduZXJTdGF0ZS5pc0RpcnR5KCkpKSB7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGRlZi5pZDtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydERlZiA9IGRlZjtcbiAgICAgICAgICB0cnkgeyB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24obm9ybWFsaXplUmVwb3J0RGVmaW5pdGlvbihkZWYpKTsgdGhpcy5sb2FkRXJyb3Iuc2V0KG51bGwpOyB9XG4gICAgICAgICAgY2F0Y2ggKGVycm9yKSB7IHRoaXMubG9hZEVycm9yLnNldChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpOyB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMucmVwb3J0SWQoKTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0cy5jb250ZXh0KCk7XG4gICAgICAgIGlmICghaWQgfHwgdGhpcy5kZWZpbml0aW9uKCkpIHsgdGhpcy5yZXF1ZXN0cy5jYW5jZWwoJ2RlZmluaXRpb24nKTsgcmV0dXJuOyB9XG4gICAgICAgIGlmIChpZCAmJiBpZCAhPT0gdGhpcy5sb2FkZWRSZXBvcnRJZCAmJiAhdGhpcy5kZWZpbml0aW9uKCkgJiYgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gaWQ7XG4gICAgICAgICAgdGhpcy5yZXF1ZXN0cy5ydW4oJ2RlZmluaXRpb24nLCAoKSA9PiB0aGlzLnBlcnNpc3RlbmNlQWRhcHRlciEubG9hZChpZCkucGlwZShtYXAobm9ybWFsaXplUmVwb3J0RGVmaW5pdGlvbikpLCBkZWYgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnREZWYgPSBkZWY7XG4gICAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oZGVmKTsgdGhpcy5sb2FkRXJyb3Iuc2V0KG51bGwpO1xuICAgICAgICAgIH0sIGVycm9yID0+IHsgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IG51bGw7IHRoaXMubG9hZEVycm9yLnNldChlcnJvci5tZXNzYWdlKTsgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbigpO1xuICAgICAgaWYgKHRoaXMuZGVzaWduZXJTdGF0ZS5pc0RpcnR5KCkpIHtcbiAgICAgICAgdGhpcy5sYXN0RW1pdHRlZERlZiA9IGN1cnJlbnQ7XG4gICAgICAgIHRoaXMubG9hZGVkUmVwb3J0RGVmID0gY3VycmVudDtcbiAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGN1cnJlbnQuaWQ7XG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbkNoYW5nZWQuZW1pdChjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCA5MDApIHtcbiAgICAgICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPCAxMjAwKSB7XG4gICAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbigpICYmICF0aGlzLnJlcG9ydElkKCkpIHtcbiAgICAgIC8vIFN0YXJ0IHdpdGggYSBjbGVhbiByZXBvcnQgZGVmaW5pdGlvblxuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKHtcbiAgICAgICAgaWQ6IGBycHQtJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOCl9YCxcbiAgICAgICAgbmFtZTogJ05ldyBDdXN0b20gUmVwb3J0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdWaXN1YWxseSBkZXNpZ25lZCByZXBvcnRpbmcgcGFnZSBjcmVhdGVkIHdpdGggQldheXMtUmVwb3J0LicsXG4gICAgICAgIHNjaGVtYVZlcnNpb246IDEsXG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGxheW91dDogeyBjb2x1bW5zOiAxMiwgZ2FwOiAxNiwgcGFkZGluZzogMjQsIGRpcmVjdGlvbjogJ2x0cicgfSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIHBhcmFtZXRlcnM6IFtdLFxuICAgICAgICBkYXRhU291cmNlczogW10sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXRyeUxvYWQoKTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnJlcG9ydElkKCk7XG4gICAgaWYgKCFpZCB8fCAhdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHJldHVybjtcbiAgICB0aGlzLnJlcXVlc3RzLnJ1bignZGVmaW5pdGlvbicsICgpID0+IHRoaXMucGVyc2lzdGVuY2VBZGFwdGVyIS5sb2FkKGlkKS5waXBlKG1hcChub3JtYWxpemVSZXBvcnREZWZpbml0aW9uKSksIGRlZiA9PiB7XG4gICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gaWQ7IHRoaXMubG9hZGVkUmVwb3J0RGVmID0gZGVmO1xuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKGRlZik7IHRoaXMubG9hZEVycm9yLnNldChudWxsKTtcbiAgICB9LCBlcnJvciA9PiB0aGlzLmxvYWRFcnJvci5zZXQoZXJyb3IubWVzc2FnZSkpO1xuICB9XG5cbiAgb25TYXZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNhdmVEaWFsb2dPcGVuKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmRpYWxvZykge1xuICAgICAgdGhpcy5zaG93VG9hc3QoJ1RoZSByZXBvcnQgcmV2aWV3IGRpYWxvZyBpcyB1bmF2YWlsYWJsZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgcm91dGVCYXNlID0gdGhpcy5yZXBvcnRpbmdDb25maWc/LnJvdXRlQmFzZSB8fCAncmVwb3J0cyc7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxSZXBvcnRTYXZlZERpYWxvZ1Jlc3VsdCwgeyByZXBvcnQ6IFJlcG9ydERlZmluaXRpb247IHJvdXRlQmFzZT86IHN0cmluZyB9PihcbiAgICAgIFJlcG9ydFNhdmVkRGlhbG9nQ29tcG9uZW50LFxuICAgICAge1xuICAgICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvcixcbiAgICAgICAgZGF0YTogeyByZXBvcnQ6IHRoaXMuY3VycmVudERlZmluaXRpb24oKSwgcm91dGVCYXNlIH0sXG4gICAgICAgIHdpZHRoOiAnbWluKDg2MHB4LCA5MnZ3KScsIG1heFdpZHRoOiAnODYwcHgnLCBtYXhIZWlnaHQ6ICc4NHZoJyxcbiAgICAgICAgcGFuZWxDbGFzczogJ3JwdC1kaWFsb2ctcGFuZWwnLCBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICBhcmlhTGFiZWxsZWRCeTogJ2RpYWxvZy10aXRsZScsIGF1dG9Gb2N1czogJyNycHQtZGxnLWlkJyxcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuc2F2ZURpYWxvZ09wZW4gPSB0cnVlO1xuICAgIGNvbnN0IHVucmVnaXN0ZXJEZXN0cm95ID0gdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBkaWFsb2dSZWYuY2xvc2UoKSk7XG4gICAgZGlhbG9nUmVmLmNsb3NlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIHVucmVnaXN0ZXJEZXN0cm95KCk7XG4gICAgICB0aGlzLnNhdmVEaWFsb2dPcGVuID0gZmFsc2U7XG4gICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuO1xuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLnVwZGF0ZVJlcG9ydFNldHRpbmdzKHJlc3VsdC5yZXBvcnQpO1xuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLm1hcmtTYXZlZCgpO1xuICAgICAgdGhpcy5yZXBvcnRTYXZlZC5lbWl0KHJlc3VsdC5yZXBvcnQpO1xuICAgICAgdGhpcy5zaG93VG9hc3QoJ1JlcG9ydCBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIGlmIChyZXN1bHQuYWN0aW9uID09PSAnb3Blbl9saXZlX3BhZ2UnKSB7XG4gICAgICAgIGNvbnN0IHNsdWcgPSByZXN1bHQucmVwb3J0LnNsdWcgfHwgcmVzdWx0LnJlcG9ydC5pZDtcbiAgICAgICAgY29uc3QgdXJsID0gJy8nICsgcm91dGVCYXNlLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSArICcvJyArIHNsdWc7XG4gICAgICAgIGlmICh0aGlzLnJvdXRlcikgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25QcmV2aWV3RXhlY3V0ZShldmVudDoge1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5leGVjdXRpb25TZXJ2aWNlKSB7XG4gICAgICB0aGlzLnJlcXVlc3RzLnJ1bigncHJldmlldycsICgpID0+IHRoaXMuZXhlY3V0aW9uU2VydmljZSEuZXhlY3V0ZShldmVudC5kZWZpbml0aW9uLCBldmVudC5wYXJhbWV0ZXJzKSxcbiAgICAgICAgZGF0YSA9PiB0aGlzLnByZXZpZXdEYXRhLnNldChkYXRhKSwgZXJyb3IgPT4gdGhpcy5sb2FkRXJyb3Iuc2V0KGVycm9yLm1lc3NhZ2UpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBncmlkID0gZXZlbnQuZGVmaW5pdGlvbi5ncmlkO1xuICAgIGlmICghZ3JpZCkge1xuICAgICAgY29uc29sZS53YXJuKCdbRGVzaWduZXIgUHJldmlld10gTm8gZ3JpZCBhdHRhY2hlZCB0byByZXBvcnQgZGVmaW5pdGlvbi4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZHMgPSBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzPy5maW5kKChkKSA9PiBkLmlkID09PSBncmlkLmRhdGFTb3VyY2VJZCk7XG4gICAgaWYgKCFkcyAmJiBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzPy5sZW5ndGggPiAwKSB7XG4gICAgICBkcyA9IGV2ZW50LmRlZmluaXRpb24uZGF0YVNvdXJjZXNbMF07XG4gICAgfVxuXG4gICAgaWYgKCFkcykge1xuICAgICAgLy8gTG9vayBmb3IgU3RvcmVkIFByb2NlZHVyZSBvciBUYWJsZSBjb25maWd1cmVkIG9uIGFueSBjb21wb25lbnQgaW4gdGhlIHJlcG9ydFxuICAgICAgY29uc3QgY29tcFdpdGhFbnRpdHkgPSBldmVudC5kZWZpbml0aW9uLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5kYXRhU291cmNlPy5lbnRpdHlOYW1lKTtcbiAgICAgIGlmIChjb21wV2l0aEVudGl0eT8uZGF0YVNvdXJjZT8uZW50aXR5TmFtZSkge1xuICAgICAgICBkcyA9IHtcbiAgICAgICAgICBpZDogJ3NwLScgKyBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgbmFtZTogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5lbnRpdHlOYW1lLFxuICAgICAgICAgIGVuZHBvaW50OiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgc2NoZW1hOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNjaGVtYSB8fCAnZGJvJyxcbiAgICAgICAgICB0eXBlOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNvdXJjZVR5cGUgfHwgJ3Byb2NlZHVyZScsXG4gICAgICAgICAgbWV0aG9kOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICd0YWJsZScgPyAnR0VUJyA6ICdTVE9SRURfUFJPQ0VEVVJFJyxcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nczogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5wYXJhbWV0ZXJNYXBwaW5ncyxcbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFkcykge1xuICAgICAgZHMgPSB7XG4gICAgICAgIGlkOiAnZGVmYXVsdC1kcycsXG4gICAgICAgIG5hbWU6ICdSZXBvcnQgRGF0YScsXG4gICAgICAgIGVuZHBvaW50OiAnZGVmYXVsdCcsXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZUFkYXB0ZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0Rlc2lnbmVyIFByZXZpZXddIE5vIGRhdGFTb3VyY2VBZGFwdGVyIGF2YWlsYWJsZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgY29uc3QgY29tcE1hcHBpbmdzID0gKGRzIGFzIGFueSk/LnBhcmFtZXRlck1hcHBpbmdzIHx8IHt9O1xuICAgIGNvbnN0IGV4ZWN1dGlvblBhcmFtcyA9IHsgLi4uY29tcE1hcHBpbmdzLCAuLi5zZXNzaW9uLCAuLi5ldmVudC5wYXJhbWV0ZXJzIH07XG5cbiAgICB0aGlzLnJlcXVlc3RzLnJ1bigncHJldmlldycsICgpID0+IHRoaXMuZGF0YVNvdXJjZUFkYXB0ZXIhLmV4ZWN1dGUoZHMhLCBleGVjdXRpb25QYXJhbXMpLFxuICAgICAgZGF0YSA9PiB0aGlzLnByZXZpZXdEYXRhLnNldChkYXRhKSwgZXJyb3IgPT4gdGhpcy5sb2FkRXJyb3Iuc2V0KGVycm9yLm1lc3NhZ2UpKTtcbiAgfVxuXG4gIGNvcHlKc29uKCk6IHZvaWQge1xuICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7XG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmZvcm1hdHRlZEpzb24oKSkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuY29weVN0YXR1cy5zZXQoJ0NvcGllZCEnKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvcHlTdGF0dXMuc2V0KCdDb3B5IEpTT04nKSwgMjAwMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBkb3dubG9hZEpzb24oKTogdm9pZCB7XG4gICAgY29uc3QganNvbiA9IHRoaXMuZm9ybWF0dGVkSnNvbigpO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbanNvbl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODsnIH0pO1xuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBjb25zdCBzbHVnID0gKHRoaXMuY3VycmVudERlZmluaXRpb24oKS5uYW1lIHx8ICdyZXBvcnQnKVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV8tXS9nLCAnLScpO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICBsaW5rLmRvd25sb2FkID0gYCR7c2x1Z30ucmVwb3J0Lmpzb25gO1xuICAgIGxpbmsuY2xpY2soKTtcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gIH1cblxuICB0b2dnbGVFZGl0b3JUaGVtZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclRoZW1lLnVwZGF0ZSgoY3VycmVudCkgPT4gKGN1cnJlbnQgPT09ICdsaWdodCcgPyAnZGFyaycgOiAnbGlnaHQnKSk7XG4gIH1cblxuICB0b2dnbGVXcmFwTGluZXMoKTogdm9pZCB7XG4gICAgdGhpcy53cmFwTGluZXMudXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICBwcml2YXRlIHN5bnRheEhpZ2hsaWdodEpzb24oanNvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBlc2NhcGVkID0ganNvblxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG5cbiAgICByZXR1cm4gZXNjYXBlZC5yZXBsYWNlKFxuICAgICAgLyhcIihcXFxcdVthLXpBLVowLTldezR9fFxcXFxbXnVdfFteXFxcXFwiXSkqXCIoXFxzKjopP3xcXGIodHJ1ZXxmYWxzZXxudWxsKVxcYnwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPykvZyxcbiAgICAgIChtYXRjaCkgPT4ge1xuICAgICAgICBsZXQgY2xzID0gJ2pzb24tdG9rZW4tbnVtYmVyJztcbiAgICAgICAgaWYgKC9eXCIvLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgICAgaWYgKC86JC8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgICAgIGNscyA9ICdqc29uLXRva2VuLWtleSc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNscyA9ICdqc29uLXRva2VuLXN0cmluZyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKC90cnVlfGZhbHNlLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICAgIGNscyA9ICdqc29uLXRva2VuLWJvb2xlYW4nO1xuICAgICAgICB9IGVsc2UgaWYgKC9udWxsLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICAgIGNscyA9ICdqc29uLXRva2VuLW51bGwnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3M9XCIke2Nsc31cIj4ke21hdGNofTwvc3Bhbj5gO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNob3dUb2FzdChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNhdmVNZXNzYWdlLnNldChtZXNzYWdlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2F2ZU1lc3NhZ2Uuc2V0KG51bGwpLCAzMDAwKTtcbiAgfVxufVxuIl19