bways-report 0.1.3 → 0.1.5

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 (46) hide show
  1. package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  2. package/esm2022/lib/core/services/index.mjs +2 -1
  3. package/esm2022/lib/core/services/report-storage.service.mjs +63 -0
  4. package/esm2022/lib/core/tokens/index.mjs +2 -1
  5. package/esm2022/lib/core/tokens/storage.token.mjs +128 -0
  6. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +16 -44
  7. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +5 -352
  8. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +6 -1011
  9. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +66 -683
  10. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +3 -789
  11. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +14 -480
  12. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +88 -25
  13. package/esm2022/lib/features/designer/designer.component.mjs +194 -65
  14. package/esm2022/lib/features/designer/services/designer-state.service.mjs +9 -2
  15. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +2 -2
  16. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +11 -3
  17. package/esm2022/lib/features/runtime/report-execution.service.mjs +1 -9
  18. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +223 -24
  19. package/esm2022/lib/features/runtime/report-runtime.component.mjs +11 -3
  20. package/esm2022/lib/features/runtime/rpt-report.component.mjs +11 -3
  21. package/esm2022/lib/primitives/components/checkbox/rpt-checkbox.component.mjs +3 -3
  22. package/esm2022/lib/primitives/components/date/rpt-date.component.mjs +3 -3
  23. package/esm2022/lib/primitives/components/date-range/rpt-date-range.component.mjs +3 -3
  24. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +4 -422
  25. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +23 -1
  26. package/esm2022/lib/primitives/components/input/rpt-input.component.mjs +3 -3
  27. package/esm2022/lib/primitives/components/kpi-card/rpt-kpi-card.component.mjs +3 -3
  28. package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +3 -3
  29. package/fesm2022/bways-report.mjs +2094 -5139
  30. package/fesm2022/bways-report.mjs.map +1 -1
  31. package/lib/core/models/report-grid.model.d.ts +23 -1
  32. package/lib/core/services/index.d.ts +1 -0
  33. package/lib/core/services/report-storage.service.d.ts +26 -0
  34. package/lib/core/tokens/index.d.ts +2 -0
  35. package/lib/core/tokens/storage.token.d.ts +48 -0
  36. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +1 -0
  37. package/lib/features/designer/components/component-palette/component-palette.component.d.ts +2 -1
  38. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +9 -0
  39. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +4 -1
  40. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +5 -1
  41. package/lib/features/designer/designer.component.d.ts +6 -0
  42. package/lib/features/runtime/dynamic-renderer.component.d.ts +4 -1
  43. package/lib/features/runtime/report-grid-bridge.component.d.ts +47 -4
  44. package/lib/features/runtime/report-runtime.component.d.ts +4 -1
  45. package/lib/features/runtime/rpt-report.component.d.ts +4 -1
  46. package/package.json +9 -1
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal, } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, input, output, signal, } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { ReportPersistenceAdapter } from '../../data-access/contracts/report-persistence.contract';
@@ -40,15 +40,59 @@ export class DesignerComponent {
40
40
  toggleRightPanel() {
41
41
  this.isRightPanelCollapsed.update((v) => !v);
42
42
  }
43
+ openLeftPanelOnly() {
44
+ this.isLeftPanelCollapsed.set(false);
45
+ this.isRightPanelCollapsed.set(true);
46
+ }
47
+ openRightPanelOnly() {
48
+ this.isRightPanelCollapsed.set(false);
49
+ this.isLeftPanelCollapsed.set(true);
50
+ }
51
+ closeAllPanels() {
52
+ this.isLeftPanelCollapsed.set(true);
53
+ this.isRightPanelCollapsed.set(true);
54
+ }
55
+ onResize() {
56
+ if (typeof window !== 'undefined' && window.innerWidth < 900) {
57
+ if (!this.isLeftPanelCollapsed() && !this.isRightPanelCollapsed()) {
58
+ this.isRightPanelCollapsed.set(true);
59
+ }
60
+ }
61
+ }
62
+ onKeyDown(event) {
63
+ const isCtrlOrCmd = event.ctrlKey || event.metaKey;
64
+ const target = event.target;
65
+ const isInput = target && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable);
66
+ if (isInput)
67
+ return;
68
+ if (isCtrlOrCmd && !event.altKey && event.key.toLowerCase() === 'b') {
69
+ event.preventDefault();
70
+ this.toggleLeftPanel();
71
+ }
72
+ else if (isCtrlOrCmd && event.altKey && event.key.toLowerCase() === 'b') {
73
+ event.preventDefault();
74
+ this.toggleRightPanel();
75
+ }
76
+ }
43
77
  formattedJson = computed(() => {
44
78
  return JSON.stringify(this.currentDefinition(), null, 2);
45
79
  });
46
80
  loadedReportId = null;
47
81
  loadedReportDef = null;
82
+ lastEmittedDef = null;
48
83
  constructor() {
49
84
  effect(() => {
50
85
  const def = this.definition();
51
- if (def && (def !== this.loadedReportDef || def.id !== this.loadedReportId)) {
86
+ if (!def)
87
+ return;
88
+ // Skip if this definition is reference-identical to what the designer just emitted or current internal state
89
+ if (def === this.lastEmittedDef || def === this.designerState.definition()) {
90
+ this.loadedReportDef = def;
91
+ return;
92
+ }
93
+ // Only reload if report ID changed (different report), or initial load, or external definition when not actively editing
94
+ const isNewReport = def.id !== this.loadedReportId;
95
+ if (isNewReport || (def !== this.loadedReportDef && !this.designerState.isDirty())) {
52
96
  this.loadedReportId = def.id;
53
97
  this.loadedReportDef = def;
54
98
  this.designerState.loadDefinition(def);
@@ -59,6 +103,7 @@ export class DesignerComponent {
59
103
  if (id && id !== this.loadedReportId && !this.definition() && this.persistenceAdapter) {
60
104
  this.loadedReportId = id;
61
105
  this.persistenceAdapter.load(id).subscribe((def) => {
106
+ this.loadedReportDef = def;
62
107
  this.designerState.loadDefinition(def);
63
108
  });
64
109
  }
@@ -66,11 +111,23 @@ export class DesignerComponent {
66
111
  effect(() => {
67
112
  const current = this.designerState.definition();
68
113
  if (this.designerState.isDirty()) {
114
+ this.lastEmittedDef = current;
115
+ this.loadedReportDef = current;
116
+ this.loadedReportId = current.id;
69
117
  this.definitionChanged.emit(current);
70
118
  }
71
119
  });
72
120
  }
73
121
  ngOnInit() {
122
+ if (typeof window !== 'undefined') {
123
+ if (window.innerWidth < 900) {
124
+ this.isLeftPanelCollapsed.set(true);
125
+ this.isRightPanelCollapsed.set(true);
126
+ }
127
+ else if (window.innerWidth < 1200) {
128
+ this.isRightPanelCollapsed.set(true);
129
+ }
130
+ }
74
131
  if (!this.definition() && !this.reportId()) {
75
132
  // Start with a clean report definition
76
133
  this.designerState.loadDefinition({
@@ -169,30 +226,35 @@ export class DesignerComponent {
169
226
  setTimeout(() => this.saveMessage.set(null), 3000);
170
227
  }
171
228
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
172
- 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" }, providers: [DesignerStateService], ngImport: i0, template: `
229
+ 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: `
173
230
  <div class="designer-shell">
174
- <!-- Top Actions Toolbar -->
175
- <rpt-designer-toolbar (saveRequested)="onSave()" />
231
+ <!-- Top Actions Toolbar with Sidebar Controls -->
232
+ <rpt-designer-toolbar
233
+ [isLeftPanelCollapsed]="isLeftPanelCollapsed()"
234
+ [isRightPanelCollapsed]="isRightPanelCollapsed()"
235
+ (toggleLeftPanel)="toggleLeftPanel()"
236
+ (toggleRightPanel)="toggleRightPanel()"
237
+ (saveRequested)="onSave()"
238
+ />
176
239
 
177
240
  <!-- Main 3-Panel Layout with CDK Drop List Group connecting Palette & Canvas -->
178
241
  <div class="designer-workbench" cdkDropListGroup>
242
+ <!-- Backdrop for compact/mobile slide-out drawers -->
243
+ @if (viewMode() === 'design' && (!isLeftPanelCollapsed() || !isRightPanelCollapsed())) {
244
+ <div
245
+ class="workbench-drawer-backdrop"
246
+ (click)="closeAllPanels()"
247
+ aria-hidden="true"
248
+ ></div>
249
+ }
250
+
179
251
  <!-- 1. Left Panel: Component Palette (only shown in design mode) -->
180
252
  @if (viewMode() === 'design') {
181
- <aside class="workbench-left-panel" [class.is-collapsed]="isLeftPanelCollapsed()">
182
- <rpt-component-palette />
183
- </aside>
184
-
185
- <!-- Left Panel Collapse/Expand Toggle -->
186
- <button
187
- type="button"
188
- class="workbench-collapse-btn btn-collapse-left"
189
- [class.is-collapsed]="isLeftPanelCollapsed()"
190
- (click)="toggleLeftPanel()"
191
- [title]="isLeftPanelCollapsed() ? 'Expand Component Palette' : 'Collapse Component Palette'"
192
- [attr.aria-label]="isLeftPanelCollapsed() ? 'Expand Component Palette' : 'Collapse Component Palette'"
193
- >
194
- <rpt-icon [name]="isLeftPanelCollapsed() ? 'chevron-right' : 'chevron-left'" [size]="12" />
195
- </button>
253
+ <div class="workbench-left-container" [class.is-collapsed]="isLeftPanelCollapsed()">
254
+ <aside class="workbench-left-panel">
255
+ <rpt-component-palette (collapseRequested)="toggleLeftPanel()" />
256
+ </aside>
257
+ </div>
196
258
  }
197
259
 
198
260
  <!-- 2. Center Panel: Design Canvas OR Live Preview OR JSON Schema -->
@@ -236,23 +298,51 @@ export class DesignerComponent {
236
298
 
237
299
  <!-- 3. Right Panel: Property Editor (only shown in design mode) -->
238
300
  @if (viewMode() === 'design') {
239
- <!-- Right Panel Collapse/Expand Toggle -->
301
+ <div class="workbench-right-container" [class.is-collapsed]="isRightPanelCollapsed()">
302
+ <aside class="workbench-right-panel">
303
+ <rpt-property-editor (collapseRequested)="toggleRightPanel()" />
304
+ </aside>
305
+ </div>
306
+ }
307
+ </div>
308
+
309
+ <!-- Compact/Mobile Workbench Bottom Navigation Bar -->
310
+ @if (viewMode() === 'design') {
311
+ <nav class="compact-workbench-bar" aria-label="Mobile Workbench Navigation">
240
312
  <button
241
313
  type="button"
242
- class="workbench-collapse-btn btn-collapse-right"
243
- [class.is-collapsed]="isRightPanelCollapsed()"
244
- (click)="toggleRightPanel()"
245
- [title]="isRightPanelCollapsed() ? 'Expand Property Editor' : 'Collapse Property Editor'"
246
- [attr.aria-label]="isRightPanelCollapsed() ? 'Expand Property Editor' : 'Collapse Property Editor'"
314
+ class="compact-nav-btn"
315
+ [class.active]="!isLeftPanelCollapsed()"
316
+ (click)="openLeftPanelOnly()"
317
+ title="Open Component Palette"
247
318
  >
248
- <rpt-icon [name]="isRightPanelCollapsed() ? 'chevron-left' : 'chevron-right'" [size]="12" />
319
+ <rpt-icon name="layers" [size]="14" />
320
+ <span>Components</span>
249
321
  </button>
250
322
 
251
- <aside class="workbench-right-panel" [class.is-collapsed]="isRightPanelCollapsed()">
252
- <rpt-property-editor />
253
- </aside>
254
- }
255
- </div>
323
+ <button
324
+ type="button"
325
+ class="compact-nav-btn"
326
+ [class.active]="isLeftPanelCollapsed() && isRightPanelCollapsed()"
327
+ (click)="closeAllPanels()"
328
+ title="Full Canvas View"
329
+ >
330
+ <rpt-icon name="edit" [size]="14" />
331
+ <span>Canvas</span>
332
+ </button>
333
+
334
+ <button
335
+ type="button"
336
+ class="compact-nav-btn"
337
+ [class.active]="!isRightPanelCollapsed()"
338
+ (click)="openRightPanelOnly()"
339
+ title="Open Properties Inspector"
340
+ >
341
+ <rpt-icon name="settings" [size]="14" />
342
+ <span>Properties</span>
343
+ </button>
344
+ </nav>
345
+ }
256
346
 
257
347
  <!-- Save Notification Toast -->
258
348
  @if (saveMessage()) {
@@ -262,7 +352,7 @@ export class DesignerComponent {
262
352
  </div>
263
353
  }
264
354
  </div>
265
- `, isInline: true, styles: [":host{display:block;width:100%;height:100%;min-height:600px;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}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative}.workbench-left-panel{width:250px;flex-shrink:0;height:100%;overflow:hidden;z-index:10;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff}.workbench-left-panel.is-collapsed{width:0!important;border-right:none;visibility:hidden}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0}.workbench-right-panel{width:320px;flex-shrink:0;height:100%;overflow:hidden;z-index:10;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff}.workbench-right-panel.is-collapsed{width:0!important;border-left:none;visibility:hidden}.workbench-collapse-btn{position:absolute;top:14px;width:18px;height:36px;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);color:var(--rpt-color-text-muted, #64748b);cursor:pointer;z-index:25;display:flex;align-items:center;justify-content:center;padding:0;box-shadow:0 2px 4px #0000000f;transition:all var(--rpt-transition-speed, .15s) ease}.workbench-collapse-btn:hover{background:var(--rpt-color-surface-hover, #f8fafc);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb)}.btn-collapse-left{left:242px;border-radius:0 6px 6px 0;border-left:none;transition:left var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1)}.btn-collapse-left.is-collapsed{left:0;border-left:1px solid var(--rpt-color-border, #cbd5e1)}.btn-collapse-right{right:312px;border-radius:6px 0 0 6px;border-right:none;transition:right var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1)}.btn-collapse-right.is-collapsed{right:0;border-right:1px solid var(--rpt-color-border, #cbd5e1)}.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;overflow-y:auto;padding:24px;background-color:#0f172a;display:flex;flex-direction:column}.json-banner{display:flex;align-items:center;justify-content:space-between;color:#94a3b8;font-size:.8rem;font-weight:600;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #1e293b}.btn-copy-json{background:#ffffff1a;color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:4px;padding:4px 12px;font-size:.75rem;cursor:pointer;transition:all .15s ease}.btn-copy-json:hover{background:#fff3}.json-display{flex:1;margin:0;padding:20px;background:#090d16;border-radius:8px;border:1px solid #1e293b;color:#38bdf8;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.85rem;line-height:1.5;overflow-x:auto}.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: "component", type: DesignerToolbarComponent, selector: "rpt-designer-toolbar", outputs: ["saveRequested"] }, { kind: "component", type: ComponentPaletteComponent, selector: "rpt-component-palette" }, { kind: "component", type: DesignCanvasComponent, selector: "rpt-design-canvas" }, { kind: "component", type: PropertyEditorComponent, selector: "rpt-property-editor" }, { kind: "component", type: DynamicRendererComponent, selector: "rpt-dynamic-renderer", inputs: ["definition", "initialValues", "resultData"], outputs: ["executeRequested", "resetRequested", "exportRequested", "printRequested", "customActionTriggered", "gridStateChanged", "columnDefsChanged", "rowActionTriggered"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
355
+ `, 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:320px;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:320px;max-width:90vw;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:320px!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;overflow-y:auto;padding:24px;background-color:#0f172a;display:flex;flex-direction:column}.json-banner{display:flex;align-items:center;justify-content:space-between;color:#94a3b8;font-size:.8rem;font-weight:600;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #1e293b}.btn-copy-json{background:#ffffff1a;color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:4px;padding:4px 12px;font-size:.75rem;cursor:pointer;transition:all .15s ease}.btn-copy-json:hover{background:#fff3}.json-display{flex:1;margin:0;padding:20px;background:#090d16;border-radius:8px;border:1px solid #1e293b;color:#38bdf8;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.85rem;line-height:1.5;overflow-x:auto}.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: "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 });
266
356
  }
267
357
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerComponent, decorators: [{
268
358
  type: Component,
@@ -278,28 +368,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
278
368
  RptIconComponent,
279
369
  ], providers: [DesignerStateService], template: `
280
370
  <div class="designer-shell">
281
- <!-- Top Actions Toolbar -->
282
- <rpt-designer-toolbar (saveRequested)="onSave()" />
371
+ <!-- Top Actions Toolbar with Sidebar Controls -->
372
+ <rpt-designer-toolbar
373
+ [isLeftPanelCollapsed]="isLeftPanelCollapsed()"
374
+ [isRightPanelCollapsed]="isRightPanelCollapsed()"
375
+ (toggleLeftPanel)="toggleLeftPanel()"
376
+ (toggleRightPanel)="toggleRightPanel()"
377
+ (saveRequested)="onSave()"
378
+ />
283
379
 
284
380
  <!-- Main 3-Panel Layout with CDK Drop List Group connecting Palette & Canvas -->
285
381
  <div class="designer-workbench" cdkDropListGroup>
382
+ <!-- Backdrop for compact/mobile slide-out drawers -->
383
+ @if (viewMode() === 'design' && (!isLeftPanelCollapsed() || !isRightPanelCollapsed())) {
384
+ <div
385
+ class="workbench-drawer-backdrop"
386
+ (click)="closeAllPanels()"
387
+ aria-hidden="true"
388
+ ></div>
389
+ }
390
+
286
391
  <!-- 1. Left Panel: Component Palette (only shown in design mode) -->
287
392
  @if (viewMode() === 'design') {
288
- <aside class="workbench-left-panel" [class.is-collapsed]="isLeftPanelCollapsed()">
289
- <rpt-component-palette />
290
- </aside>
291
-
292
- <!-- Left Panel Collapse/Expand Toggle -->
293
- <button
294
- type="button"
295
- class="workbench-collapse-btn btn-collapse-left"
296
- [class.is-collapsed]="isLeftPanelCollapsed()"
297
- (click)="toggleLeftPanel()"
298
- [title]="isLeftPanelCollapsed() ? 'Expand Component Palette' : 'Collapse Component Palette'"
299
- [attr.aria-label]="isLeftPanelCollapsed() ? 'Expand Component Palette' : 'Collapse Component Palette'"
300
- >
301
- <rpt-icon [name]="isLeftPanelCollapsed() ? 'chevron-right' : 'chevron-left'" [size]="12" />
302
- </button>
393
+ <div class="workbench-left-container" [class.is-collapsed]="isLeftPanelCollapsed()">
394
+ <aside class="workbench-left-panel">
395
+ <rpt-component-palette (collapseRequested)="toggleLeftPanel()" />
396
+ </aside>
397
+ </div>
303
398
  }
304
399
 
305
400
  <!-- 2. Center Panel: Design Canvas OR Live Preview OR JSON Schema -->
@@ -343,23 +438,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
343
438
 
344
439
  <!-- 3. Right Panel: Property Editor (only shown in design mode) -->
345
440
  @if (viewMode() === 'design') {
346
- <!-- Right Panel Collapse/Expand Toggle -->
441
+ <div class="workbench-right-container" [class.is-collapsed]="isRightPanelCollapsed()">
442
+ <aside class="workbench-right-panel">
443
+ <rpt-property-editor (collapseRequested)="toggleRightPanel()" />
444
+ </aside>
445
+ </div>
446
+ }
447
+ </div>
448
+
449
+ <!-- Compact/Mobile Workbench Bottom Navigation Bar -->
450
+ @if (viewMode() === 'design') {
451
+ <nav class="compact-workbench-bar" aria-label="Mobile Workbench Navigation">
347
452
  <button
348
453
  type="button"
349
- class="workbench-collapse-btn btn-collapse-right"
350
- [class.is-collapsed]="isRightPanelCollapsed()"
351
- (click)="toggleRightPanel()"
352
- [title]="isRightPanelCollapsed() ? 'Expand Property Editor' : 'Collapse Property Editor'"
353
- [attr.aria-label]="isRightPanelCollapsed() ? 'Expand Property Editor' : 'Collapse Property Editor'"
454
+ class="compact-nav-btn"
455
+ [class.active]="!isLeftPanelCollapsed()"
456
+ (click)="openLeftPanelOnly()"
457
+ title="Open Component Palette"
354
458
  >
355
- <rpt-icon [name]="isRightPanelCollapsed() ? 'chevron-left' : 'chevron-right'" [size]="12" />
459
+ <rpt-icon name="layers" [size]="14" />
460
+ <span>Components</span>
356
461
  </button>
357
462
 
358
- <aside class="workbench-right-panel" [class.is-collapsed]="isRightPanelCollapsed()">
359
- <rpt-property-editor />
360
- </aside>
361
- }
362
- </div>
463
+ <button
464
+ type="button"
465
+ class="compact-nav-btn"
466
+ [class.active]="isLeftPanelCollapsed() && isRightPanelCollapsed()"
467
+ (click)="closeAllPanels()"
468
+ title="Full Canvas View"
469
+ >
470
+ <rpt-icon name="edit" [size]="14" />
471
+ <span>Canvas</span>
472
+ </button>
473
+
474
+ <button
475
+ type="button"
476
+ class="compact-nav-btn"
477
+ [class.active]="!isRightPanelCollapsed()"
478
+ (click)="openRightPanelOnly()"
479
+ title="Open Properties Inspector"
480
+ >
481
+ <rpt-icon name="settings" [size]="14" />
482
+ <span>Properties</span>
483
+ </button>
484
+ </nav>
485
+ }
363
486
 
364
487
  <!-- Save Notification Toast -->
365
488
  @if (saveMessage()) {
@@ -369,6 +492,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
369
492
  </div>
370
493
  }
371
494
  </div>
372
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;min-height:600px;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}.designer-workbench{display:flex;flex:1;overflow:hidden;position:relative}.workbench-left-panel{width:250px;flex-shrink:0;height:100%;overflow:hidden;z-index:10;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);border-right:1px solid var(--rpt-color-border, #cbd5e1);background:#fff}.workbench-left-panel.is-collapsed{width:0!important;border-right:none;visibility:hidden}.workbench-center-panel{flex:1;height:100%;overflow:hidden;display:flex;flex-direction:column;min-width:0}.workbench-right-panel{width:320px;flex-shrink:0;height:100%;overflow:hidden;z-index:10;transition:width var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1);border-left:1px solid var(--rpt-color-border, #cbd5e1);background:#fff}.workbench-right-panel.is-collapsed{width:0!important;border-left:none;visibility:hidden}.workbench-collapse-btn{position:absolute;top:14px;width:18px;height:36px;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);color:var(--rpt-color-text-muted, #64748b);cursor:pointer;z-index:25;display:flex;align-items:center;justify-content:center;padding:0;box-shadow:0 2px 4px #0000000f;transition:all var(--rpt-transition-speed, .15s) ease}.workbench-collapse-btn:hover{background:var(--rpt-color-surface-hover, #f8fafc);color:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb)}.btn-collapse-left{left:242px;border-radius:0 6px 6px 0;border-left:none;transition:left var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1)}.btn-collapse-left.is-collapsed{left:0;border-left:1px solid var(--rpt-color-border, #cbd5e1)}.btn-collapse-right{right:312px;border-radius:6px 0 0 6px;border-right:none;transition:right var(--rpt-transition-speed-smooth, .25s) cubic-bezier(.16,1,.3,1)}.btn-collapse-right.is-collapsed{right:0;border-right:1px solid var(--rpt-color-border, #cbd5e1)}.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;overflow-y:auto;padding:24px;background-color:#0f172a;display:flex;flex-direction:column}.json-banner{display:flex;align-items:center;justify-content:space-between;color:#94a3b8;font-size:.8rem;font-weight:600;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #1e293b}.btn-copy-json{background:#ffffff1a;color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:4px;padding:4px 12px;font-size:.75rem;cursor:pointer;transition:all .15s ease}.btn-copy-json:hover{background:#fff3}.json-display{flex:1;margin:0;padding:20px;background:#090d16;border-radius:8px;border:1px solid #1e293b;color:#38bdf8;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.85rem;line-height:1.5;overflow-x:auto}.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"] }]
373
- }], ctorParameters: () => [] });
374
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvZGVzaWduZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDbkcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDdkcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDakcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDakYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFFdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7QUE2VHhELE1BQU0sT0FBTyxpQkFB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Q2pCLGFBQ1UsQ0FBQyxvQkFBb0IsQ0FBQyxZQUN2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkZULG1CQTZNZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uSW5pdCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydFBlcnNpc3RlbmNlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9yZXBvcnQtcGVyc2lzdGVuY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvZGF0YS1zb3VyY2UuY29udHJhY3QnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVzaWduZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Rlc2lnbmVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVzaWduZXJUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Rvb2xiYXIvZGVzaWduZXItdG9vbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tcG9uZW50UGFsZXR0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb21wb25lbnQtcGFsZXR0ZS9jb21wb25lbnQtcGFsZXR0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVzaWduQ2FudmFzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Rlc2lnbi1jYW52YXMvZGVzaWduLWNhbnZhcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvcGVydHlFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHJvcGVydHktZWRpdG9yL3Byb3BlcnR5LWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY1JlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcnVudGltZS9keW5hbWljLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcblxuaW1wb3J0IHsgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWRlc2lnbmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICBEZXNpZ25lclRvb2xiYXJDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UGFsZXR0ZUNvbXBvbmVudCxcbiAgICBEZXNpZ25DYW52YXNDb21wb25lbnQsXG4gICAgUHJvcGVydHlFZGl0b3JDb21wb25lbnQsXG4gICAgRHluYW1pY1JlbmRlcmVyQ29tcG9uZW50LFxuICAgIFJwdEljb25Db21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW0Rlc2lnbmVyU3RhdGVTZXJ2aWNlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZGVzaWduZXItc2hlbGxcIj5cbiAgICAgIDwhLS0gVG9wIEFjdGlvbnMgVG9vbGJhciAtLT5cbiAgICAgIDxycHQtZGVzaWduZXItdG9vbGJhciAoc2F2ZVJlcXVlc3RlZCk9XCJvblNhdmUoKVwiIC8+XG5cbiAgICAgIDwhLS0gTWFpbiAzLVBhbmVsIExheW91dCB3aXRoIENESyBEcm9wIExpc3QgR3JvdXAgY29ubmVjdGluZyBQYWxldHRlICYgQ2FudmFzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImRlc2lnbmVyLXdvcmtiZW5jaFwiIGNka0Ryb3BMaXN0R3JvdXA+XG4gICAgICAgIDwhLS0gMS4gTGVmdCBQYW5lbDogQ29tcG9uZW50IFBhbGV0dGUgKG9ubHkgc2hvd24gaW4gZGVzaWduIG1vZGUpIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdkZXNpZ24nKSB7XG4gICAgICAgICAgPGFzaWRlIGNsYXNzPVwid29ya2JlbmNoLWxlZnQtcGFuZWxcIiBbY2xhc3MuaXMtY29sbGFwc2VkXT1cImlzTGVmdFBhbmVsQ29sbGFwc2VkKClcIj5cbiAgICAgICAgICAgIDxycHQtY29tcG9uZW50LXBhbGV0dGUgLz5cbiAgICAgICAgICA8L2FzaWRlPlxuXG4gICAgICAgICAgPCEtLSBMZWZ0IFBhbmVsIENvbGxhcHNlL0V4cGFuZCBUb2dnbGUgLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIndvcmtiZW5jaC1jb2xsYXBzZS1idG4gYnRuLWNvbGxhcHNlLWxlZnRcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWNvbGxhcHNlZF09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVMZWZ0UGFuZWwoKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKSA/ICdFeHBhbmQgQ29tcG9uZW50IFBhbGV0dGUnIDogJ0NvbGxhcHNlIENvbXBvbmVudCBQYWxldHRlJ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzTGVmdFBhbmVsQ29sbGFwc2VkKCkgPyAnRXhwYW5kIENvbXBvbmVudCBQYWxldHRlJyA6ICdDb2xsYXBzZSBDb21wb25lbnQgUGFsZXR0ZSdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpID8gJ2NoZXZyb24tcmlnaHQnIDogJ2NoZXZyb24tbGVmdCdcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIDIuIENlbnRlciBQYW5lbDogRGVzaWduIENhbnZhcyBPUiBMaXZlIFByZXZpZXcgT1IgSlNPTiBTY2hlbWEgLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwid29ya2JlbmNoLWNlbnRlci1wYW5lbFwiPlxuICAgICAgICAgIEBzd2l0Y2ggKHZpZXdNb2RlKCkpIHtcbiAgICAgICAgICAgIEBjYXNlICgnZGVzaWduJykge1xuICAgICAgICAgICAgICA8cnB0LWRlc2lnbi1jYW52YXMgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgncHJldmlldycpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctbW9kZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1iYW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZXllXCIgW3NpemVdPVwiMTVcIiAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TGl2ZSBQcmV2aWV3IE1vZGUg4oCUIFJ1bm5pbmcgd2l0aCBhY3R1YWwgUmVhY3RpdmUgRm9ybXMgJiBEeW5hbWljIEdyaWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHJwdC1keW5hbWljLXJlbmRlcmVyXG4gICAgICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImN1cnJlbnREZWZpbml0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICBbcmVzdWx0RGF0YV09XCJwcmV2aWV3RGF0YSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGV4ZWN1dGVSZXF1ZXN0ZWQpPVwib25QcmV2aWV3RXhlY3V0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdqc29uJykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwianNvbi1tb2RlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLWJhbm5lclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNvZGVcIiBbc2l6ZV09XCIxNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkxpdmUgUmVwb3J0RGVmaW5pdGlvbiBNZXRhZGF0YSBTY2hlbWE8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNvcHktanNvblwiIChjbGljayk9XCJjb3B5SnNvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJjb3B5U3RhdHVzKCkgPT09ICdDb3BpZWQhJyA/ICdjaGVjaycgOiAnY29weSdcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvcHlTdGF0dXMoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9XCJqc29uLWRpc3BsYXlcIj48Y29kZT57eyBmb3JtYXR0ZWRKc29uKCkgfX08L2NvZGU+PC9wcmU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDwhLS0gMy4gUmlnaHQgUGFuZWw6IFByb3BlcnR5IEVkaXRvciAob25seSBzaG93biBpbiBkZXNpZ24gbW9kZSkgLS0+XG4gICAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicpIHtcbiAgICAgICAgICA8IS0tIFJpZ2h0IFBhbmVsIENvbGxhcHNlL0V4cGFuZCBUb2dnbGUgLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIndvcmtiZW5jaC1jb2xsYXBzZS1idG4gYnRuLWNvbGxhcHNlLXJpZ2h0XCJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1jb2xsYXBzZWRdPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkKCkgPyAnRXhwYW5kIFByb3BlcnR5IEVkaXRvcicgOiAnQ29sbGFwc2UgUHJvcGVydHkgRWRpdG9yJ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzUmlnaHRQYW5lbENvbGxhcHNlZCgpID8gJ0V4cGFuZCBQcm9wZXJ0eSBFZGl0b3InIDogJ0NvbGxhcHNlIFByb3BlcnR5IEVkaXRvcidcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKSA/ICdjaGV2cm9uLWxlZnQnIDogJ2NoZXZyb24tcmlnaHQnXCIgW3NpemVdPVwiMTJcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGFzaWRlIGNsYXNzPVwid29ya2JlbmNoLXJpZ2h0LXBhbmVsXCIgW2NsYXNzLmlzLWNvbGxhcHNlZF09XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiPlxuICAgICAgICAgICAgPHJwdC1wcm9wZXJ0eS1lZGl0b3IgLz5cbiAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTYXZlIE5vdGlmaWNhdGlvbiBUb2FzdCAtLT5cbiAgICAgIEBpZiAoc2F2ZU1lc3NhZ2UoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZS10b2FzdFwiPlxuICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY2hlY2tcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgPHNwYW4+e3sgc2F2ZU1lc3NhZ2UoKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG5cbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiA2MDBweDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXNoZWxsIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmFmYztcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXdvcmtiZW5jaCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1wYW5lbCB7XG4gICAgICB3aWR0aDogMjUwcHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB6LWluZGV4OiAxMDtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLXNtb290aCwgMjUwbXMpIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtcGFuZWwuaXMtY29sbGFwc2VkIHtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuICAgIC53b3JrYmVuY2gtY2VudGVyLXBhbmVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtcmlnaHQtcGFuZWwge1xuICAgICAgd2lkdGg6IDMyMHB4O1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICB0cmFuc2l0aW9uOiB3aWR0aCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZC1zbW9vdGgsIDI1MG1zKSBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIH1cbiAgICAud29ya2JlbmNoLXJpZ2h0LXBhbmVsLmlzLWNvbGxhcHNlZCB7XG4gICAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgfVxuICAgIC53b3JrYmVuY2gtY29sbGFwc2UtYnRuIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMTRweDtcbiAgICAgIHdpZHRoOiAxOHB4O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHotaW5kZXg6IDI1O1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjA2KTtcbiAgICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2U7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtY29sbGFwc2UtYnRuOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjhmYWZjKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICB9XG4gICAgLmJ0bi1jb2xsYXBzZS1sZWZ0IHtcbiAgICAgIGxlZnQ6IDI0MnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMCA2cHggNnB4IDA7XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgIHRyYW5zaXRpb246IGxlZnQgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQtc21vb3RoLCAyNTBtcykgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgfVxuICAgIC5idG4tY29sbGFwc2UtbGVmdC5pcy1jb2xsYXBzZWQge1xuICAgICAgbGVmdDogMDtcbiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgfVxuICAgIC5idG4tY29sbGFwc2UtcmlnaHQge1xuICAgICAgcmlnaHQ6IDMxMnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4IDAgMCA2cHg7XG4gICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICB0cmFuc2l0aW9uOiByaWdodCB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZC1zbW9vdGgsIDI1MG1zKSBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICB9XG4gICAgLmJ0bi1jb2xsYXBzZS1yaWdodC5pcy1jb2xsYXBzZWQge1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLyogUHJldmlldyBNb2RlICovXG4gICAgLnByZXZpZXctbW9kZS1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjVmOTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5wcmV2aWV3LWJhbm5lciB7XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvIDE2cHggYXV0bztcbiAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7XG4gICAgICBjb2xvcjogIzFlNDBhZjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiZmRiZmU7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC44cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3cteHMsIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDQpKTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5wcmV2aWV3LWNvbnRlbnQge1xuICAgICAgbWF4LXdpZHRoOiAxNDAwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC8qIEpTT04gU2NoZW1hIE1vZGUgKi9cbiAgICAuanNvbi1tb2RlLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGYxNzJhO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICAgIC5qc29uLWJhbm5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMxZTI5M2I7XG4gICAgfVxuICAgIC5idG4tY29weS1qc29uIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgcGFkZGluZzogNHB4IDEycHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgZWFzZTtcbiAgICB9XG4gICAgLmJ0bi1jb3B5LWpzb246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICAgIH1cbiAgICAuanNvbi1kaXNwbGF5IHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgYmFja2dyb3VuZDogIzA5MGQxNjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMxZTI5M2I7XG4gICAgICBjb2xvcjogIzM4YmRmODtcbiAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlO1xuICAgICAgZm9udC1zaXplOiAwLjg1cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgfVxuICAgIC8qIFNhdmUgVG9hc3QgTm90aWZpY2F0aW9uICovXG4gICAgLnNhdmUtdG9hc3Qge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAyNHB4O1xuICAgICAgcmlnaHQ6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuODVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB6LWluZGV4OiAxMDA7XG4gICAgICBhbmltYXRpb246IHJwdC1mYWRlLWluIDIwMG1zIGVhc2U7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgcnB0LWZhZGUtaW4ge1xuICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfVxuICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZWFkb25seSBkZXNpZ25lclN0YXRlID0gaW5qZWN0KERlc2lnbmVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwZXJzaXN0ZW5jZUFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFTb3VyY2VBZGFwdGVyID0gaW5qZWN0KFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogT3B0aW9uYWwgcmVwb3J0SWQgdG8gbG9hZCBmcm9tIHBlcnNpc3RlbmNlIGFkYXB0ZXIgKi9cbiAgcmVhZG9ubHkgcmVwb3J0SWQgPSBpbnB1dDxzdHJpbmc+KCk7XG5cbiAgLyoqIE9wdGlvbmFsIGRlZmluaXRpb24gdG8gbG9hZCBkaXJlY3RseSAqL1xuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQ8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ2luaXRpYWxSZXBvcnQnIH0pO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgc2F2ZXMgdGhlIHJlcG9ydCAqL1xuICByZWFkb25seSByZXBvcnRTYXZlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPih7IGFsaWFzOiAnc2F2ZScgfSk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbmV2ZXIgdGhlIHJlcG9ydCBkZWZpbml0aW9uIGNoYW5nZXMgaW4gdGhlIHZpc3VhbCBkZXNpZ25lciAqL1xuICByZWFkb25seSBkZWZpbml0aW9uQ2hhbmdlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPih7IGFsaWFzOiAnZGVmaW5pdGlvbkNoYW5nZScgfSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERlZmluaXRpb24gPSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgdmlld01vZGUgPSB0aGlzLmRlc2lnbmVyU3RhdGUudmlld01vZGU7XG5cbiAgcmVhZG9ubHkgcHJldmlld0RhdGEgPSBzaWduYWw8dW5rbm93bltdIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNhdmVNZXNzYWdlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBjb3B5U3RhdHVzID0gc2lnbmFsPHN0cmluZz4oJ0NvcHkgSlNPTicpO1xuICByZWFkb25seSBpc0xlZnRQYW5lbENvbGxhcHNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgdG9nZ2xlTGVmdFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQudXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICB0b2dnbGVSaWdodFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnVwZGF0ZSgodikgPT4gIXYpO1xuICB9XG5cbiAgcmVhZG9ubHkgZm9ybWF0dGVkSnNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyZW50RGVmaW5pdGlvbigpLCBudWxsLCAyKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBsb2FkZWRSZXBvcnRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbG9hZGVkUmVwb3J0RGVmOiBSZXBvcnREZWZpbml0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLmRlZmluaXRpb24oKTtcbiAgICAgICAgaWYgKGRlZiAmJiAoZGVmICE9PSB0aGlzLmxvYWRlZFJlcG9ydERlZiB8fCBkZWYuaWQgIT09IHRoaXMubG9hZGVkUmVwb3J0SWQpKSB7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGRlZi5pZDtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydERlZiA9IGRlZjtcbiAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oZGVmKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5yZXBvcnRJZCgpO1xuICAgICAgICBpZiAoaWQgJiYgaWQgIT09IHRoaXMubG9hZGVkUmVwb3J0SWQgJiYgIXRoaXMuZGVmaW5pdGlvbigpICYmIHRoaXMucGVyc2lzdGVuY2VBZGFwdGVyKSB7XG4gICAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGlkO1xuICAgICAgICAgIHRoaXMucGVyc2lzdGVuY2VBZGFwdGVyLmxvYWQoaWQpLnN1YnNjcmliZSgoZGVmKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oZGVmKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZGVzaWduZXJTdGF0ZS5kZWZpbml0aW9uKCk7XG4gICAgICBpZiAodGhpcy5kZXNpZ25lclN0YXRlLmlzRGlydHkoKSkge1xuICAgICAgICB0aGlzLmRlZmluaXRpb25DaGFuZ2VkLmVtaXQoY3VycmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWZpbml0aW9uKCkgJiYgIXRoaXMucmVwb3J0SWQoKSkge1xuICAgICAgLy8gU3RhcnQgd2l0aCBhIGNsZWFuIHJlcG9ydCBkZWZpbml0aW9uXG4gICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubG9hZERlZmluaXRpb24oe1xuICAgICAgICBpZDogYHJwdC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA4KX1gLFxuICAgICAgICBuYW1lOiAnTmV3IEN1c3RvbSBSZXBvcnQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1Zpc3VhbGx5IGRlc2lnbmVkIHJlcG9ydGluZyBwYWdlIGNyZWF0ZWQgd2l0aCBCV2F5cy1SZXBvcnQuJyxcbiAgICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgbGF5b3V0OiB7IGNvbHVtbnM6IDEyLCBnYXA6IDE2LCBwYWRkaW5nOiAyNCwgZGlyZWN0aW9uOiAnbHRyJyB9LFxuICAgICAgICBjb21wb25lbnRzOiBbXSxcbiAgICAgICAgcGFyYW1ldGVyczogW10sXG4gICAgICAgIGRhdGFTb3VyY2VzOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50RGVmaW5pdGlvbigpO1xuICAgIGlmICh0aGlzLnBlcnNpc3RlbmNlQWRhcHRlcikge1xuICAgICAgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIuc2F2ZShjdXJyZW50KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoc2F2ZWREZWYpID0+IHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmVyU3RhdGUubWFya1NhdmVkKCk7XG4gICAgICAgICAgdGhpcy5yZXBvcnRTYXZlZC5lbWl0KHNhdmVkRGVmKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCgnUmVwb3J0IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tEZXNpZ25lcl0gU2F2ZSBmYWlsZWQ6JywgZXJyKTtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCgnRmFpbGVkIHRvIHNhdmUgcmVwb3J0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLm1hcmtTYXZlZCgpO1xuICAgICAgdGhpcy5yZXBvcnRTYXZlZC5lbWl0KGN1cnJlbnQpO1xuICAgICAgdGhpcy5zaG93VG9hc3QoJ1JlcG9ydCBzdGF0ZSBzYXZlZCcpO1xuICAgIH1cbiAgfVxuXG4gIG9uUHJldmlld0V4ZWN1dGUoZXZlbnQ6IHtcbiAgICBkZWZpbml0aW9uOiBSZXBvcnREZWZpbml0aW9uO1xuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgZ3JpZCA9IGV2ZW50LmRlZmluaXRpb24uZ3JpZDtcbiAgICBpZiAoIWdyaWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0Rlc2lnbmVyIFByZXZpZXddIE5vIGdyaWQgYXR0YWNoZWQgdG8gcmVwb3J0IGRlZmluaXRpb24uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGRzID0gZXZlbnQuZGVmaW5pdGlvbi5kYXRhU291cmNlcz8uZmluZCgoZCkgPT4gZC5pZCA9PT0gZ3JpZC5kYXRhU291cmNlSWQpO1xuICAgIGlmICghZHMgJiYgZXZlbnQuZGVmaW5pdGlvbi5kYXRhU291cmNlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgZHMgPSBldmVudC5kZWZpbml0aW9uLmRhdGFTb3VyY2VzWzBdO1xuICAgIH1cblxuICAgIGlmICghZHMpIHtcbiAgICAgIC8vIExvb2sgZm9yIFN0b3JlZCBQcm9jZWR1cmUgb3IgVGFibGUgY29uZmlndXJlZCBvbiBhbnkgY29tcG9uZW50IGluIHRoZSByZXBvcnRcbiAgICAgIGNvbnN0IGNvbXBXaXRoRW50aXR5ID0gZXZlbnQuZGVmaW5pdGlvbi5jb21wb25lbnRzLmZpbmQoKGMpID0+IGMuZGF0YVNvdXJjZT8uZW50aXR5TmFtZSk7XG4gICAgICBpZiAoY29tcFdpdGhFbnRpdHk/LmRhdGFTb3VyY2U/LmVudGl0eU5hbWUpIHtcbiAgICAgICAgZHMgPSB7XG4gICAgICAgICAgaWQ6ICdzcC0nICsgY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5lbnRpdHlOYW1lLFxuICAgICAgICAgIG5hbWU6IGNvbXBXaXRoRW50aXR5LmRhdGFTb3VyY2UuZW50aXR5TmFtZSxcbiAgICAgICAgICBlbmRwb2ludDogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5lbnRpdHlOYW1lLFxuICAgICAgICAgIHNjaGVtYTogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5zY2hlbWEgfHwgJ2RibycsXG4gICAgICAgICAgdHlwZTogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5zb3VyY2VUeXBlIHx8ICdwcm9jZWR1cmUnLFxuICAgICAgICAgIG1ldGhvZDogY29tcFdpdGhFbnRpdHkuZGF0YVNvdXJjZS5zb3VyY2VUeXBlID09PSAndGFibGUnID8gJ0dFVCcgOiAnU1RPUkVEX1BST0NFRFVSRScsXG4gICAgICAgICAgcGFyYW1ldGVyTWFwcGluZ3M6IGNvbXBXaXRoRW50aXR5LmRhdGFTb3VyY2UucGFyYW1ldGVyTWFwcGluZ3MsXG4gICAgICAgIH0gYXMgYW55O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZHMpIHtcbiAgICAgIGRzID0ge1xuICAgICAgICBpZDogJ2RlZmF1bHQtZHMnLFxuICAgICAgICBuYW1lOiAnUmVwb3J0IERhdGEnLFxuICAgICAgICBlbmRwb2ludDogJ2RlZmF1bHQnLFxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdGFTb3VyY2VBZGFwdGVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tEZXNpZ25lciBQcmV2aWV3XSBObyBkYXRhU291cmNlQWRhcHRlciBhdmFpbGFibGUuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2U/LmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuICAgIGNvbnN0IGNvbXBNYXBwaW5ncyA9IChkcyBhcyBhbnkpPy5wYXJhbWV0ZXJNYXBwaW5ncyB8fCB7fTtcbiAgICBjb25zdCBleGVjdXRpb25QYXJhbXMgPSB7IC4uLmNvbXBNYXBwaW5ncywgLi4uc2Vzc2lvbiwgLi4uZXZlbnQucGFyYW1ldGVycyB9O1xuXG4gICAgdGhpcy5kYXRhU291cmNlQWRhcHRlci5leGVjdXRlKGRzLCBleGVjdXRpb25QYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLnByZXZpZXdEYXRhLnNldChkYXRhKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbRGVzaWduZXIgUHJldmlld10gRXhlY3V0aW9uIGZhaWxlZDonLCBlcnIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvcHlKc29uKCk6IHZvaWQge1xuICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7XG4gICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLmZvcm1hdHRlZEpzb24oKSkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuY29weVN0YXR1cy5zZXQoJ0NvcGllZCEnKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvcHlTdGF0dXMuc2V0KCdDb3B5IEpTT04nKSwgMjAwMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dUb2FzdChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNhdmVNZXNzYWdlLnNldChtZXNzYWdlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2F2ZU1lc3NhZ2Uuc2V0KG51bGwpLCAzMDAwKTtcbiAgfVxufVxuIl19
495
+ `, 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:320px;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:320px;max-width:90vw;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:320px!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;overflow-y:auto;padding:24px;background-color:#0f172a;display:flex;flex-direction:column}.json-banner{display:flex;align-items:center;justify-content:space-between;color:#94a3b8;font-size:.8rem;font-weight:600;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #1e293b}.btn-copy-json{background:#ffffff1a;color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:4px;padding:4px 12px;font-size:.75rem;cursor:pointer;transition:all .15s ease}.btn-copy-json:hover{background:#fff3}.json-display{flex:1;margin:0;padding:20px;background:#090d16;border-radius:8px;border:1px solid #1e293b;color:#38bdf8;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.85rem;line-height:1.5;overflow-x:auto}.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"] }]
496
+ }], ctorParameters: () => [], propDecorators: { onResize: [{
497
+ type: HostListener,
498
+ args: ['window:resize']
499
+ }], onKeyDown: [{
500
+ type: HostListener,
501
+ args: ['window:keydown', ['$event']]
502
+ }] } });
503
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvZGVzaWduZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBQ25HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRXZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBaWN4RCxNQUFN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LDhCQUNYLGNBQWMsdUxBQ2Qsd0JBQXdCLCtMQUN4Qix5QkFBeUIsa0dBQ3pCLHFCQUFxQiw4REFDckIsdUJBQXVCLGdHQUN2Qix3QkFBd0IsNlVBQ3hCLGdCQUFnQjs7NEZBbWJQLGlCQUFpQjtrQkEvYjdCLFNBQVM7K0JBQ0UsY0FBYyxjQUNaLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCx3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIscUJBQXFCO3dCQUNyQix1QkFBdUI7d0JBQ3ZCLHdCQUF3Qjt3QkFDeEIsZ0JBQWdCO3FCQUNqQixhQUNVLENBQUMsb0JBQW9CLENBQUMsWUFDdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThIVCxtQkFnVGdCLHVCQUF1QixDQUFDLE1BQU07d0RBcUQvQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZTtnQkFVN0IsU0FBUztzQkFEUixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkluaXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhLWFjY2Vzcy9jb250cmFjdHMvcmVwb3J0LXBlcnNpc3RlbmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL2RhdGEtc291cmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IERlc2lnbmVyU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9kZXNpZ25lci1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IERlc2lnbmVyVG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90b29sYmFyL2Rlc2lnbmVyLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29tcG9uZW50LXBhbGV0dGUvY29tcG9uZW50LXBhbGV0dGUuY29tcG9uZW50JztcbmltcG9ydCB7IERlc2lnbkNhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kZXNpZ24tY2FudmFzL2Rlc2lnbi1jYW52YXMuY29tcG9uZW50JztcbmltcG9ydCB7IFByb3BlcnR5RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb3BlcnR5LWVkaXRvci9wcm9wZXJ0eS1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uL3J1bnRpbWUvZHluYW1pYy1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1kZXNpZ25lcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRHJhZ0Ryb3BNb2R1bGUsXG4gICAgRGVzaWduZXJUb29sYmFyQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQsXG4gICAgRGVzaWduQ2FudmFzQ29tcG9uZW50LFxuICAgIFByb3BlcnR5RWRpdG9yQ29tcG9uZW50LFxuICAgIER5bmFtaWNSZW5kZXJlckNvbXBvbmVudCxcbiAgICBScHRJY29uQ29tcG9uZW50LFxuICBdLFxuICBwcm92aWRlcnM6IFtEZXNpZ25lclN0YXRlU2VydmljZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImRlc2lnbmVyLXNoZWxsXCI+XG4gICAgICA8IS0tIFRvcCBBY3Rpb25zIFRvb2xiYXIgd2l0aCBTaWRlYmFyIENvbnRyb2xzIC0tPlxuICAgICAgPHJwdC1kZXNpZ25lci10b29sYmFyXG4gICAgICAgIFtpc0xlZnRQYW5lbENvbGxhcHNlZF09XCJpc0xlZnRQYW5lbENvbGxhcHNlZCgpXCJcbiAgICAgICAgW2lzUmlnaHRQYW5lbENvbGxhcHNlZF09XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICh0b2dnbGVMZWZ0UGFuZWwpPVwidG9nZ2xlTGVmdFBhbmVsKClcIlxuICAgICAgICAodG9nZ2xlUmlnaHRQYW5lbCk9XCJ0b2dnbGVSaWdodFBhbmVsKClcIlxuICAgICAgICAoc2F2ZVJlcXVlc3RlZCk9XCJvblNhdmUoKVwiXG4gICAgICAvPlxuXG4gICAgICA8IS0tIE1haW4gMy1QYW5lbCBMYXlvdXQgd2l0aCBDREsgRHJvcCBMaXN0IEdyb3VwIGNvbm5lY3RpbmcgUGFsZXR0ZSAmIENhbnZhcyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkZXNpZ25lci13b3JrYmVuY2hcIiBjZGtEcm9wTGlzdEdyb3VwPlxuICAgICAgICA8IS0tIEJhY2tkcm9wIGZvciBjb21wYWN0L21vYmlsZSBzbGlkZS1vdXQgZHJhd2VycyAtLT5cbiAgICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJyAmJiAoIWlzTGVmdFBhbmVsQ29sbGFwc2VkKCkgfHwgIWlzUmlnaHRQYW5lbENvbGxhcHNlZCgpKSkge1xuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwid29ya2JlbmNoLWRyYXdlci1iYWNrZHJvcFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VBbGxQYW5lbHMoKVwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gMS4gTGVmdCBQYW5lbDogQ29tcG9uZW50IFBhbGV0dGUgKG9ubHkgc2hvd24gaW4gZGVzaWduIG1vZGUpIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlKCkgPT09ICdkZXNpZ24nKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtiZW5jaC1sZWZ0LWNvbnRhaW5lclwiIFtjbGFzcy5pcy1jb2xsYXBzZWRdPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKVwiPlxuICAgICAgICAgICAgPGFzaWRlIGNsYXNzPVwid29ya2JlbmNoLWxlZnQtcGFuZWxcIj5cbiAgICAgICAgICAgICAgPHJwdC1jb21wb25lbnQtcGFsZXR0ZSAoY29sbGFwc2VSZXF1ZXN0ZWQpPVwidG9nZ2xlTGVmdFBhbmVsKClcIiAvPlxuICAgICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gMi4gQ2VudGVyIFBhbmVsOiBEZXNpZ24gQ2FudmFzIE9SIExpdmUgUHJldmlldyBPUiBKU09OIFNjaGVtYSAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJ3b3JrYmVuY2gtY2VudGVyLXBhbmVsXCI+XG4gICAgICAgICAgQHN3aXRjaCAodmlld01vZGUoKSkge1xuICAgICAgICAgICAgQGNhc2UgKCdkZXNpZ24nKSB7XG4gICAgICAgICAgICAgIDxycHQtZGVzaWduLWNhbnZhcyAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdwcmV2aWV3Jykge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1tb2RlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmV2aWV3LWJhbm5lclwiPlxuICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJleWVcIiBbc2l6ZV09XCIxNVwiIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5MaXZlIFByZXZpZXcgTW9kZSDigJQgUnVubmluZyB3aXRoIGFjdHVhbCBSZWFjdGl2ZSBGb3JtcyAmIER5bmFtaWMgR3JpZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8cnB0LWR5bmFtaWMtcmVuZGVyZXJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiY3VycmVudERlZmluaXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXN1bHREYXRhXT1cInByZXZpZXdEYXRhKClcIlxuICAgICAgICAgICAgICAgICAgICAoZXhlY3V0ZVJlcXVlc3RlZCk9XCJvblByZXZpZXdFeGVjdXRlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2pzb24nKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqc29uLW1vZGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzb24tYmFubmVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY29kZVwiIFtzaXplXT1cIjE1XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+TGl2ZSBSZXBvcnREZWZpbml0aW9uIE1ldGFkYXRhIFNjaGVtYTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY29weS1qc29uXCIgKGNsaWNrKT1cImNvcHlKc29uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImNvcHlTdGF0dXMoKSA9PT0gJ0NvcGllZCEnID8gJ2NoZWNrJyA6ICdjb3B5J1wiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY29weVN0YXR1cygpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHByZSBjbGFzcz1cImpzb24tZGlzcGxheVwiPjxjb2RlPnt7IGZvcm1hdHRlZEpzb24oKSB9fTwvY29kZT48L3ByZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPCEtLSAzLiBSaWdodCBQYW5lbDogUHJvcGVydHkgRWRpdG9yIChvbmx5IHNob3duIGluIGRlc2lnbiBtb2RlKSAtLT5cbiAgICAgICAgQGlmICh2aWV3TW9kZSgpID09PSAnZGVzaWduJykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3b3JrYmVuY2gtcmlnaHQtY29udGFpbmVyXCIgW2NsYXNzLmlzLWNvbGxhcHNlZF09XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiPlxuICAgICAgICAgICAgPGFzaWRlIGNsYXNzPVwid29ya2JlbmNoLXJpZ2h0LXBhbmVsXCI+XG4gICAgICAgICAgICAgIDxycHQtcHJvcGVydHktZWRpdG9yIChjb2xsYXBzZVJlcXVlc3RlZCk9XCJ0b2dnbGVSaWdodFBhbmVsKClcIiAvPlxuICAgICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ29tcGFjdC9Nb2JpbGUgV29ya2JlbmNoIEJvdHRvbSBOYXZpZ2F0aW9uIEJhciAtLT5cbiAgICAgIEBpZiAodmlld01vZGUoKSA9PT0gJ2Rlc2lnbicpIHtcbiAgICAgICAgPG5hdiBjbGFzcz1cImNvbXBhY3Qtd29ya2JlbmNoLWJhclwiIGFyaWEtbGFiZWw9XCJNb2JpbGUgV29ya2JlbmNoIE5hdmlnYXRpb25cIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29tcGFjdC1uYXYtYnRuXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiIWlzTGVmdFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5MZWZ0UGFuZWxPbmx5KClcIlxuICAgICAgICAgICAgdGl0bGU9XCJPcGVuIENvbXBvbmVudCBQYWxldHRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImxheWVyc1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkNvbXBvbmVudHM8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29tcGFjdC1uYXYtYnRuXCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWQoKSAmJiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQoKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VBbGxQYW5lbHMoKVwiXG4gICAgICAgICAgICB0aXRsZT1cIkZ1bGwgQ2FudmFzIFZpZXdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZWRpdFwiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPkNhbnZhczwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjb21wYWN0LW5hdi1idG5cIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCIhaXNSaWdodFBhbmVsQ29sbGFwc2VkKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5SaWdodFBhbmVsT25seSgpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiT3BlbiBQcm9wZXJ0aWVzIEluc3BlY3RvclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJzZXR0aW5nc1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgIDxzcGFuPlByb3BlcnRpZXM8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmF2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIFNhdmUgTm90aWZpY2F0aW9uIFRvYXN0IC0tPlxuICAgICAgQGlmIChzYXZlTWVzc2FnZSgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlLXRvYXN0XCI+XG4gICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJjaGVja1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICA8c3Bhbj57eyBzYXZlTWVzc2FnZSgpIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcblxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAuZGVzaWduZXItc2hlbGwge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmYWZjO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgLmRlc2lnbmVyLXdvcmtiZW5jaCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB3aWR0aDogMjUwcHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLXNtb290aCwgMjUwbXMpIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgei1pbmRleDogMjA7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtbGVmdC1wYW5lbCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCAud29ya2JlbmNoLWxlZnQtcGFuZWwge1xuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgIH1cblxuICAgIC53b3JrYmVuY2gtY2VudGVyLXBhbmVsIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuXG4gICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIHdpZHRoOiAzMjBweDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgdHJhbnNpdGlvbjogd2lkdGggdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQtc21vb3RoLCAyNTBtcykgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgICB6LWluZGV4OiAyMDtcbiAgICB9XG4gICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC53b3JrYmVuY2gtcmlnaHQtcGFuZWwge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgICAud29ya2JlbmNoLXJpZ2h0LWNvbnRhaW5lci5pcy1jb2xsYXBzZWQgLndvcmtiZW5jaC1yaWdodC1wYW5lbCB7XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICB9XG5cblxuXG4gICAgLmNvbXBhY3Qtd29ya2JlbmNoLWJhciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICAud29ya2JlbmNoLWRyYXdlci1iYWNrZHJvcCB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkge1xuICAgICAgLmNvbXBhY3Qtd29ya2JlbmNoLWJhciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xuICAgICAgICBoZWlnaHQ6IDQ4cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgICBwYWRkaW5nOiAwIDEycHg7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICB6LWluZGV4OiA0NTtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgLTJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjA0KTtcbiAgICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgcGFkZGluZzogNnB4IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLCA2cHgpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgICBmb250LXdlaWdodDogdmFyKC0tcnB0LWZvbnQtd2VpZ2h0LW1lZGl1bSwgNTAwKTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0biBycHQtaWNvbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgICAgfVxuICAgICAgLmNvbXBhY3QtbmF2LWJ0bjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLXN1YnRsZSwgI2UyZThmMCk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuOmhvdmVyIHJwdC1pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIH1cbiAgICAgIC5jb21wYWN0LW5hdi1idG4uYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnktbGlnaHQsICNlZmY2ZmYpO1xuICAgICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMzcsIDk5LCAyMzUsIDAuMjUpO1xuICAgICAgICBmb250LXdlaWdodDogdmFyKC0tcnB0LWZvbnQtd2VpZ2h0LXNlbWlib2xkLCA2MDApO1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSgzNywgOTksIDIzNSwgMC4wOCk7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuLmFjdGl2ZSBycHQtaWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICB9XG4gICAgICAuY29tcGFjdC1uYXYtYnRuOmZvY3VzLXZpc2libGUge1xuICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgICBvdXRsaW5lLW9mZnNldDogMXB4O1xuICAgICAgfVxuXG4gICAgICAud29ya2JlbmNoLWRyYXdlci1iYWNrZHJvcCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuMzUpO1xuICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMXB4KTtcbiAgICAgICAgei1pbmRleDogNTA7XG4gICAgICB9XG5cbiAgICAgIC53b3JrYmVuY2gtbGVmdC1jb250YWluZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICB3aWR0aDogMjgwcHg7XG4gICAgICAgIG1heC13aWR0aDogODV2dztcbiAgICAgICAgei1pbmRleDogNjA7XG4gICAgICAgIGJveC1zaGFkb3c6IDRweCAwIDI0cHggcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMjUwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSk7XG4gICAgICB9XG4gICAgICAud29ya2JlbmNoLWxlZnQtY29udGFpbmVyLmlzLWNvbGxhcHNlZCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7XG4gICAgICAgIHdpZHRoOiAyODBweCAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAud29ya2JlbmNoLXJpZ2h0LWNvbnRhaW5lciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICB3aWR0aDogMzIwcHg7XG4gICAgICAgIG1heC13aWR0aDogOTB2dztcbiAgICAgICAgei1pbmRleDogNjA7XG4gICAgICAgIGJveC1zaGFkb3c6IC00cHggMCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDI1MG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpO1xuICAgICAgfVxuICAgICAgLndvcmtiZW5jaC1yaWdodC1jb250YWluZXIuaXMtY29sbGFwc2VkIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xuICAgICAgICB3aWR0aDogMzIwcHggIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICB9XG4gICAgLyogUHJldmlldyBNb2RlICovXG4gICAgLnByZXZpZXctbW9kZS1jb250YWluZXIge1xuICAgICAgZmxleDogMTtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjVmOTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5wcmV2aWV3LWJhbm5lciB7XG4gICAgICBtYXgtd2lkdGg6IDE0MDBweDtcbiAgICAgIG1hcmdpbjogMCBhdXRvIDE2cHggYXV0bztcbiAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7XG4gICAgICBjb2xvcjogIzFlNDBhZjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiZmRiZmU7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC44cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3cteHMsIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDQpKTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5wcmV2aWV3LWNvbnRlbnQge1xuICAgICAgbWF4LXdpZHRoOiAxNDAwcHg7XG4gICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC8qIEpTT04gU2NoZW1hIE1vZGUgKi9cbiAgICAuanNvbi1tb2RlLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGYxNzJhO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICAgIC5qc29uLWJhbm5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGNvbG9yOiAjOTRhM2I4O1xuICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiAxMnB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMxZTI5M2I7XG4gICAgfVxuICAgIC5idG4tY29weS1qc29uIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgcGFkZGluZzogNHB4IDEycHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgZWFzZTtcbiAgICB9XG4gICAgLmJ0bi1jb3B5LWpzb246aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xuICAgIH1cbiAgICAuanNvbi1kaXNwbGF5IHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgYmFja2dyb3VuZDogIzA5MGQxNjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMxZTI5M2I7XG4gICAgICBjb2xvcjogIzM4YmRmODtcbiAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgbW9ub3NwYWNlO1xuICAgICAgZm9udC1zaXplOiAwLjg1cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgfVxuICAgIC8qIFNhdmUgVG9hc3QgTm90aWZpY2F0aW9uICovXG4gICAgLnNhdmUtdG9hc3Qge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAyNHB4O1xuICAgICAgcmlnaHQ6IDI0cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjMTBiOTgxO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBmb250LXNpemU6IDAuODVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDE1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICB6LWluZGV4OiAxMDA7XG4gICAgICBhbmltYXRpb246IHJwdC1mYWRlLWluIDIwMG1zIGVhc2U7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgcnB0LWZhZGUtaW4ge1xuICAgICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMHB4KTsgfVxuICAgICAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZWFkb25seSBkZXNpZ25lclN0YXRlID0gaW5qZWN0KERlc2lnbmVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwZXJzaXN0ZW5jZUFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFTb3VyY2VBZGFwdGVyID0gaW5qZWN0KFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogT3B0aW9uYWwgcmVwb3J0SWQgdG8gbG9hZCBmcm9tIHBlcnNpc3RlbmNlIGFkYXB0ZXIgKi9cbiAgcmVhZG9ubHkgcmVwb3J0SWQgPSBpbnB1dDxzdHJpbmc+KCk7XG5cbiAgLyoqIE9wdGlvbmFsIGRlZmluaXRpb24gdG8gbG9hZCBkaXJlY3RseSAqL1xuICByZWFkb25seSBkZWZpbml0aW9uID0gaW5wdXQ8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGwgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ2luaXRpYWxSZXBvcnQnIH0pO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgc2F2ZXMgdGhlIHJlcG9ydCAqL1xuICByZWFkb25seSByZXBvcnRTYXZlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPih7IGFsaWFzOiAnc2F2ZScgfSk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbmV2ZXIgdGhlIHJlcG9ydCBkZWZpbml0aW9uIGNoYW5nZXMgaW4gdGhlIHZpc3VhbCBkZXNpZ25lciAqL1xuICByZWFkb25seSBkZWZpbml0aW9uQ2hhbmdlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPih7IGFsaWFzOiAnZGVmaW5pdGlvbkNoYW5nZScgfSk7XG5cbiAgcmVhZG9ubHkgY3VycmVudERlZmluaXRpb24gPSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgdmlld01vZGUgPSB0aGlzLmRlc2lnbmVyU3RhdGUudmlld01vZGU7XG5cbiAgcmVhZG9ubHkgcHJldmlld0RhdGEgPSBzaWduYWw8dW5rbm93bltdIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNhdmVNZXNzYWdlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBjb3B5U3RhdHVzID0gc2lnbmFsPHN0cmluZz4oJ0NvcHkgSlNPTicpO1xuICByZWFkb25seSBpc0xlZnRQYW5lbENvbGxhcHNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgdG9nZ2xlTGVmdFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQudXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICB0b2dnbGVSaWdodFBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnVwZGF0ZSgodikgPT4gIXYpO1xuICB9XG5cbiAgb3BlbkxlZnRQYW5lbE9ubHkoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIG9wZW5SaWdodFBhbmVsT25seSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZC5zZXQoZmFsc2UpO1xuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICB9XG5cbiAgY2xvc2VBbGxQYW5lbHMoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIG9uUmVzaXplKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDkwMCkge1xuICAgICAgaWYgKCF0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkKCkgJiYgIXRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkKCkpIHtcbiAgICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQuc2V0KHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNDdHJsT3JDbWQgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBjb25zdCBpc0lucHV0ID0gdGFyZ2V0ICYmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCAodGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5pc0NvbnRlbnRFZGl0YWJsZSk7XG4gICAgaWYgKGlzSW5wdXQpIHJldHVybjtcblxuICAgIGlmIChpc0N0cmxPckNtZCAmJiAhZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnRvZ2dsZUxlZnRQYW5lbCgpO1xuICAgIH0gZWxzZSBpZiAoaXNDdHJsT3JDbWQgJiYgZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnYicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnRvZ2dsZVJpZ2h0UGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICByZWFkb25seSBmb3JtYXR0ZWRKc29uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmN1cnJlbnREZWZpbml0aW9uKCksIG51bGwsIDIpO1xuICB9KTtcblxuICBwcml2YXRlIGxvYWRlZFJlcG9ydElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsb2FkZWRSZXBvcnREZWY6IFJlcG9ydERlZmluaXRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZERlZjogUmVwb3J0RGVmaW5pdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgZGVmID0gdGhpcy5kZWZpbml0aW9uKCk7XG4gICAgICAgIGlmICghZGVmKSByZXR1cm47XG5cbiAgICAgICAgLy8gU2tpcCBpZiB0aGlzIGRlZmluaXRpb24gaXMgcmVmZXJlbmNlLWlkZW50aWNhbCB0byB3aGF0IHRoZSBkZXNpZ25lciBqdXN0IGVtaXR0ZWQgb3IgY3VycmVudCBpbnRlcm5hbCBzdGF0ZVxuICAgICAgICBpZiAoZGVmID09PSB0aGlzLmxhc3RFbWl0dGVkRGVmIHx8IGRlZiA9PT0gdGhpcy5kZXNpZ25lclN0YXRlLmRlZmluaXRpb24oKSkge1xuICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0RGVmID0gZGVmO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgcmVsb2FkIGlmIHJlcG9ydCBJRCBjaGFuZ2VkIChkaWZmZXJlbnQgcmVwb3J0KSwgb3IgaW5pdGlhbCBsb2FkLCBvciBleHRlcm5hbCBkZWZpbml0aW9uIHdoZW4gbm90IGFjdGl2ZWx5IGVkaXRpbmdcbiAgICAgICAgY29uc3QgaXNOZXdSZXBvcnQgPSBkZWYuaWQgIT09IHRoaXMubG9hZGVkUmVwb3J0SWQ7XG4gICAgICAgIGlmIChpc05ld1JlcG9ydCB8fCAoZGVmICE9PSB0aGlzLmxvYWRlZFJlcG9ydERlZiAmJiAhdGhpcy5kZXNpZ25lclN0YXRlLmlzRGlydHkoKSkpIHtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gZGVmLmlkO1xuICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0RGVmID0gZGVmO1xuICAgICAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5sb2FkRGVmaW5pdGlvbihkZWYpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnJlcG9ydElkKCk7XG4gICAgICAgIGlmIChpZCAmJiBpZCAhPT0gdGhpcy5sb2FkZWRSZXBvcnRJZCAmJiAhdGhpcy5kZWZpbml0aW9uKCkgJiYgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHtcbiAgICAgICAgICB0aGlzLmxvYWRlZFJlcG9ydElkID0gaWQ7XG4gICAgICAgICAgdGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIubG9hZChpZCkuc3Vic2NyaWJlKChkZWYpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkUmVwb3J0RGVmID0gZGVmO1xuICAgICAgICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKGRlZik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmRlc2lnbmVyU3RhdGUuZGVmaW5pdGlvbigpO1xuICAgICAgaWYgKHRoaXMuZGVzaWduZXJTdGF0ZS5pc0RpcnR5KCkpIHtcbiAgICAgICAgdGhpcy5sYXN0RW1pdHRlZERlZiA9IGN1cnJlbnQ7XG4gICAgICAgIHRoaXMubG9hZGVkUmVwb3J0RGVmID0gY3VycmVudDtcbiAgICAgICAgdGhpcy5sb2FkZWRSZXBvcnRJZCA9IGN1cnJlbnQuaWQ7XG4gICAgICAgIHRoaXMuZGVmaW5pdGlvbkNoYW5nZWQuZW1pdChjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCA5MDApIHtcbiAgICAgICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPCAxMjAwKSB7XG4gICAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbigpICYmICF0aGlzLnJlcG9ydElkKCkpIHtcbiAgICAgIC8vIFN0YXJ0IHdpdGggYSBjbGVhbiByZXBvcnQgZGVmaW5pdGlvblxuICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLmxvYWREZWZpbml0aW9uKHtcbiAgICAgICAgaWQ6IGBycHQtJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOCl9YCxcbiAgICAgICAgbmFtZTogJ05ldyBDdXN0b20gUmVwb3J0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdWaXN1YWxseSBkZXNpZ25lZCByZXBvcnRpbmcgcGFnZSBjcmVhdGVkIHdpdGggQldheXMtUmVwb3J0LicsXG4gICAgICAgIHNjaGVtYVZlcnNpb246IDEsXG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGxheW91dDogeyBjb2x1bW5zOiAxMiwgZ2FwOiAxNiwgcGFkZGluZzogMjQsIGRpcmVjdGlvbjogJ2x0cicgfSxcbiAgICAgICAgY29tcG9uZW50czogW10sXG4gICAgICAgIHBhcmFtZXRlcnM6IFtdLFxuICAgICAgICBkYXRhU291cmNlczogW10sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblNhdmUoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudERlZmluaXRpb24oKTtcbiAgICBpZiAodGhpcy5wZXJzaXN0ZW5jZUFkYXB0ZXIpIHtcbiAgICAgIHRoaXMucGVyc2lzdGVuY2VBZGFwdGVyLnNhdmUoY3VycmVudCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHNhdmVkRGVmKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25lclN0YXRlLm1hcmtTYXZlZCgpO1xuICAgICAgICAgIHRoaXMucmVwb3J0U2F2ZWQuZW1pdChzYXZlZERlZik7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QoJ1JlcG9ydCBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbRGVzaWduZXJdIFNhdmUgZmFpbGVkOicsIGVycik7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QoJ0ZhaWxlZCB0byBzYXZlIHJlcG9ydCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5tYXJrU2F2ZWQoKTtcbiAgICAgIHRoaXMucmVwb3J0U2F2ZWQuZW1pdChjdXJyZW50KTtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KCdSZXBvcnQgc3RhdGUgc2F2ZWQnKTtcbiAgICB9XG4gIH1cblxuICBvblByZXZpZXdFeGVjdXRlKGV2ZW50OiB7XG4gICAgZGVmaW5pdGlvbjogUmVwb3J0RGVmaW5pdGlvbjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IGdyaWQgPSBldmVudC5kZWZpbml0aW9uLmdyaWQ7XG4gICAgaWYgKCFncmlkKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tEZXNpZ25lciBQcmV2aWV3XSBObyBncmlkIGF0dGFjaGVkIHRvIHJlcG9ydCBkZWZpbml0aW9uLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBkcyA9IGV2ZW50LmRlZmluaXRpb24uZGF0YVNvdXJjZXM/LmZpbmQoKGQpID0+IGQuaWQgPT09IGdyaWQuZGF0YVNvdXJjZUlkKTtcbiAgICBpZiAoIWRzICYmIGV2ZW50LmRlZmluaXRpb24uZGF0YVNvdXJjZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGRzID0gZXZlbnQuZGVmaW5pdGlvbi5kYXRhU291cmNlc1swXTtcbiAgICB9XG5cbiAgICBpZiAoIWRzKSB7XG4gICAgICAvLyBMb29rIGZvciBTdG9yZWQgUHJvY2VkdXJlIG9yIFRhYmxlIGNvbmZpZ3VyZWQgb24gYW55IGNvbXBvbmVudCBpbiB0aGUgcmVwb3J0XG4gICAgICBjb25zdCBjb21wV2l0aEVudGl0eSA9IGV2ZW50LmRlZmluaXRpb24uY29tcG9uZW50cy5maW5kKChjKSA9PiBjLmRhdGFTb3VyY2U/LmVudGl0eU5hbWUpO1xuICAgICAgaWYgKGNvbXBXaXRoRW50aXR5Py5kYXRhU291cmNlPy5lbnRpdHlOYW1lKSB7XG4gICAgICAgIGRzID0ge1xuICAgICAgICAgIGlkOiAnc3AtJyArIGNvbXBXaXRoRW50aXR5LmRhdGFTb3VyY2UuZW50aXR5TmFtZSxcbiAgICAgICAgICBuYW1lOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgZW5kcG9pbnQ6IGNvbXBXaXRoRW50aXR5LmRhdGFTb3VyY2UuZW50aXR5TmFtZSxcbiAgICAgICAgICBzY2hlbWE6IGNvbXBXaXRoRW50aXR5LmRhdGFTb3VyY2Uuc2NoZW1hIHx8ICdkYm8nLFxuICAgICAgICAgIHR5cGU6IGNvbXBXaXRoRW50aXR5LmRhdGFTb3VyY2Uuc291cmNlVHlwZSB8fCAncHJvY2VkdXJlJyxcbiAgICAgICAgICBtZXRob2Q6IGNvbXBXaXRoRW50aXR5LmRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ3RhYmxlJyA/ICdHRVQnIDogJ1NUT1JFRF9QUk9DRURVUkUnLFxuICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmdzOiBjb21wV2l0aEVudGl0eS5kYXRhU291cmNlLnBhcmFtZXRlck1hcHBpbmdzLFxuICAgICAgICB9IGFzIGFueTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWRzKSB7XG4gICAgICBkcyA9IHtcbiAgICAgICAgaWQ6ICdkZWZhdWx0LWRzJyxcbiAgICAgICAgbmFtZTogJ1JlcG9ydCBEYXRhJyxcbiAgICAgICAgZW5kcG9pbnQ6ICdkZWZhdWx0JyxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kYXRhU291cmNlQWRhcHRlcikge1xuICAgICAgY29uc29sZS53YXJuKCdbRGVzaWduZXIgUHJldmlld10gTm8gZGF0YVNvdXJjZUFkYXB0ZXIgYXZhaWxhYmxlLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcbiAgICBjb25zdCBjb21wTWFwcGluZ3MgPSAoZHMgYXMgYW55KT8ucGFyYW1ldGVyTWFwcGluZ3MgfHwge307XG4gICAgY29uc3QgZXhlY3V0aW9uUGFyYW1zID0geyAuLi5jb21wTWFwcGluZ3MsIC4uLnNlc3Npb24sIC4uLmV2ZW50LnBhcmFtZXRlcnMgfTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZUFkYXB0ZXIuZXhlY3V0ZShkcywgZXhlY3V0aW9uUGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5wcmV2aWV3RGF0YS5zZXQoZGF0YSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0Rlc2lnbmVyIFByZXZpZXddIEV4ZWN1dGlvbiBmYWlsZWQ6JywgZXJyKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjb3B5SnNvbigpOiB2b2lkIHtcbiAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCkge1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5mb3JtYXR0ZWRKc29uKCkpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmNvcHlTdGF0dXMuc2V0KCdDb3BpZWQhJyk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb3B5U3RhdHVzLnNldCgnQ29weSBKU09OJyksIDIwMDApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93VG9hc3QobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zYXZlTWVzc2FnZS5zZXQobWVzc2FnZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNhdmVNZXNzYWdlLnNldChudWxsKSwgMzAwMCk7XG4gIH1cbn1cbiJdfQ==