@oneteme/jquery-organizer 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,7 +7,11 @@ Bibliothèque Angular autonome pour la gestion décentralisée des configuration
7
7
  - **Adapters** — Fonctions de conversion ChartConfig ↔ OrganizerConfig avec auto-détection d'unités
8
8
  - **Facade** — Gestion centralisée d'état pour les champs visibles, regroupements, filtres
9
9
 
10
- **v0.0.43+**: Support complet pour **UnitConfig avec auto-scaling intelligent** des unités Y (ms → µs → s, etc.)
10
+ **Fonctionnalités principales** :
11
+ - **UnitConfig avec auto-scaling intelligent** des unités Y (ms → µs → s, etc.)
12
+ - **Template normalization** avec validation permissive des états et auto-détection de templates
13
+ - **Slice loading unification** dans le composant organizer (Promise/Observable dual-support)
14
+ - **Chart binding facade** pour simplifier l'intégration ChartConfig ↔ Organizer (50% réduction de boilerplate)
11
15
 
12
16
  ---
13
17
 
@@ -251,31 +255,87 @@ Valeur Format Raison
251
255
 
252
256
  ## Chart Adapter
253
257
 
254
- Les fonctions `organizer-chart-adapter.ts` convertissent entre `ChartConfig` (métier) et `OrganizerConfig` (UI) :
258
+ Les fonctions `organizer-chart-adapter.ts` fournissent une façade complète pour l'intégration ChartConfig ↔ OrganizerConfig :
259
+
260
+ ### Normalisation d'État (Étape 1)
261
+
262
+ ```typescript
263
+ // Valide permissivement un état contre une config
264
+ export function normalizeOrganizerState(
265
+ state: OrganizerState,
266
+ config: OrganizerConfig
267
+ ): OrganizerState
268
+ // - Filtre les références invalides (selectedY, selectedGroupBy, selectedSlices)
269
+ // - Maintient les fallbacks si nécessaire
270
+ // - Auto-détecte le template matching l'état final
271
+
272
+ // Applique un template et recalcule le template actif
273
+ export function normalizeTemplateToState(
274
+ template: OrganizerTemplate,
275
+ currentState: OrganizerState,
276
+ config: OrganizerConfig
277
+ ): OrganizerState
278
+ // - Applique les champs du template (xField, yField, groupBy, etc.)
279
+ // - Recalcule selectedTemplate en matchant l'état final contre tous les templates
280
+ // - Gère les fallbacks si le template n'est pas complet
281
+
282
+ // Trouve le template matching l'état courant
283
+ export function resolveMatchingTemplateId(
284
+ templates: OrganizerTemplate[],
285
+ state: OrganizerState,
286
+ config: OrganizerConfig
287
+ ): string | undefined
288
+ // - Itère sur tous les templates et retourne le premier match
289
+ // - Utilisé pour auto-set selectedTemplate lors de changements d'état
290
+ ```
291
+
292
+ ### Façade de Binding (Étape 3)
255
293
 
256
294
  ```typescript
257
- // ChartConfig → OrganizerConfig
295
+ // Interface pour les callbacks
296
+ export interface OrganizerChartBridgeOptions {
297
+ onFetchSliceData?: (filterKey: string) => Observable<any[]> | Promise<any[]>;
298
+ onExportVisual?: () => void;
299
+ onExportData?: () => void;
300
+ switchView?: {
301
+ currentView: 'chart' | 'table';
302
+ onSwitch: (newView: 'chart' | 'table') => void;
303
+ };
304
+ }
305
+
306
+ // Construit un binding prêt à utiliser
307
+ export function buildOrganizerChartBinding(
308
+ chartConfig: any,
309
+ options: OrganizerChartBridgeOptions
310
+ ): OrganizerChartBinding
311
+ // Retourne: { config: OrganizerConfig, state: OrganizerState }
312
+ // - Appelle chartConfigToOrganizer + normalizeOrganizerState
313
+ // - Injecte les options (callbacks, export, etc.)
314
+
315
+ // Gestion unifiée des événements organizer
316
+ export function handleOrganizerChartEvent(
317
+ event: OrganizerButtonEvent,
318
+ chartConfig: any,
319
+ currentBinding: OrganizerChartBinding,
320
+ options: OrganizerChartBridgeOptions
321
+ ): { binding: OrganizerChartBinding, shouldRefetch: boolean }
322
+ // - Applique l'événement au ChartConfig
323
+ // - Reconstruit le binding
324
+ // - Retourne shouldRefetch = true si ySelected ou templateSelected
325
+
326
+ // Utilitaires (existants, maintenant intégrés à la façade)
258
327
  export function chartConfigToOrganizer(
259
328
  chartConfig: any,
260
329
  options?: OrganizerChartBridgeOptions
261
330
  ): OrganizerConfig
262
331
 
263
- // ChartConfig → OrganizerState
264
332
  export function chartConfigToState(chartConfig: any): OrganizerState
265
333
 
266
- // ChartConfig → Événement + État unifié
267
- export function chartConfigToUnifiedState(
268
- chartConfig: any,
269
- viewMode?: 'chart' | 'table'
270
- ): OrganizerUnifiedState
271
-
272
- // Applique un OrganizerEvent à ChartConfig
273
334
  export function applyOrganizerEventToChart(
274
335
  event: OrganizerButtonEvent,
275
336
  chartConfig: any
276
337
  ): void
277
338
 
278
- // Résout l'unité Y pour l'événement
279
339
  export function resolveYUnit(
280
340
  chartConfig: any,
281
341
  selectedY?: string,
@@ -287,17 +347,12 @@ export function resolveYUnit(
287
347
 
288
348
  ## Intégration avec jquery-echarts
289
349
 
290
- ### Pattern 3-étapes
291
-
292
- 1. **Initialisation** : Construire OrganizerConfig depuis ChartConfig
293
- 2. **Réaction aux événements** : Appliquer OrganizerEvent à ChartConfig
294
- 3. **Refetch** : Recharger les données avec la nouvelle config
350
+ ### Pattern Simplifié avec Binding Facade (v0.0.44+) ⭐ **Recommandé**
295
351
 
296
- ### Exemple Complet
352
+ La **façade de binding** unifie les 3 étapes et réduit le boilerplate de ~50% :
297
353
 
298
354
  ```typescript
299
- import { OrganizerButtonEvent, OrganizerSliceState } from '@oneteme/jquery-organizer';
300
- import { chartConfigToOrganizer, chartConfigToState, applyOrganizerEventToChart } from '@oneteme/jquery-organizer';
355
+ import { buildOrganizerChartBinding, handleOrganizerChartEvent, OrganizerChartBridgeOptions } from '@oneteme/jquery-organizer';
301
356
 
302
357
  @Component({
303
358
  selector: 'app-kpi',
@@ -312,44 +367,56 @@ import { chartConfigToOrganizer, chartConfigToState, applyOrganizerEventToChart
312
367
  `
313
368
  })
314
369
  export class KpiComponent {
315
- $latency = {
316
- config: {},
317
- state: {},
318
- chartConfig: REST_LATENCY_CHART_CONFIG('day'),
319
- chartProvider: {},
320
- data: []
321
- };
370
+ $latency: any; // { config, state, chartProvider, data }
371
+ private $latencyChartConfig = REST_LATENCY_CHART_CONFIG('day');
372
+ @ViewChild('latencyChart') private _latencyChart: ChartComponent<any, any>;
322
373
 
323
374
  ngOnInit() {
324
- // Initialisation
325
- this.$latency.config = chartConfigToOrganizer(this.$latency.chartConfig);
326
- this.$latency.state = chartConfigToState(this.$latency.chartConfig);
375
+ // Initialisation unifiée via façade
376
+ this.$latency = buildOrganizerChartBinding(
377
+ this.$latencyChartConfig,
378
+ this._latencyOrganizerOptions()
379
+ );
327
380
  this._fetchLatency();
328
381
  }
329
382
 
330
383
  onLatencyViewChange(event: OrganizerButtonEvent): void {
331
- // Appliquer l'événement → met à jour ChartConfig
332
- applyOrganizerEventToChart(event, this.$latency.chartConfig);
333
-
334
- // Mettre à jour la UI du button
335
- this.$latency.state = event.state;
384
+ // Traitement événement + calcul intelligent du refetch
385
+ const result = handleOrganizerChartEvent(
386
+ event,
387
+ this.$latencyChartConfig,
388
+ this.$latency,
389
+ this._latencyOrganizerOptions()
390
+ );
391
+ this.$latency = result.binding;
336
392
 
337
- // Refetch
338
- this._fetchLatency();
393
+ // Refetch uniquement si nécessaire (ySelected, templateSelected, etc.)
394
+ if (result.shouldRefetch) {
395
+ this._fetchLatency();
396
+ }
397
+ }
398
+
399
+ private _latencyOrganizerOptions(): OrganizerChartBridgeOptions {
400
+ return {
401
+ onFetchSliceData: (filterKey: string) => this._fetchSliceData(filterKey),
402
+ onExportVisual: () => this._latencyChart?.exportImage('latence'),
403
+ onExportData: () => this._latencyChart?.exportData('latence')
404
+ };
339
405
  }
340
406
 
341
407
  private _fetchLatency(): void {
342
- const cfg = this.$latency.chartConfig;
408
+ const cfg = this.$latencyChartConfig;
343
409
  const ind = cfg.indicators.items.find(i => i.selected);
410
+ const grp = cfg.groups.items.find(g => g.selected);
344
411
 
345
- this._httpService.getLatency({ indicator: ind, ... }).subscribe(data => {
346
- const series = buildSeries(cfg.series.items, ind, cfg.groups.items[0], null, data);
412
+ this._httpService.getLatency({ indicator: ind, group: grp }).subscribe(data => {
413
+ const series = buildSeries(cfg.series.items, ind, grp, null, data);
347
414
 
348
- // Injection de l'unité (simple string ou UnitConfig)
349
415
  this.$latency.chartProvider = {
350
416
  ...this.BASE_CHART_PROVIDER,
351
417
  series,
352
- yUnit: ind?.unit // ← string | UnitConfig
418
+ xtitle: grp?.menu?.label || 'Date', // Titre X dynamique
419
+ yUnit: ind?.unit // ← string | UnitConfig (auto-scaling)
353
420
  };
354
421
 
355
422
  this.$latency.data = data;
@@ -358,6 +425,43 @@ export class KpiComponent {
358
425
  }
359
426
  ```
360
427
 
428
+ ### Architecture des 3 Étapes
429
+
430
+ **Étape 1: Normalisation d'État**
431
+ - `normalizeOrganizerState()` valide les références et auto-détecte le template
432
+ - Utilisée automatiquement par `buildOrganizerChartBinding()`
433
+ - Stratégie permissive : filtre les références invalides sans levée d'exception
434
+
435
+ **Étape 2: Chargement des Slices (organizer-button.component.ts)**
436
+ - Méthode `syncSliceState()` gère Promise et Observable uniformément
437
+ - Unifie les chemins manuels (onSliceClick) et template-driven (onTemplateSelect)
438
+ - Émet sliceStateChange pour mise à jour du binding côté app
439
+
440
+ **Étape 3: Façade de Binding**
441
+ - `buildOrganizerChartBinding()` : Construction du binding initial
442
+ - `handleOrganizerChartEvent()` : Traitement unifié avec retour du shouldRefetch
443
+ - Encapsule applyOrganizerEventToChart + normalisation + refetch logic
444
+
445
+ ### Pattern Détaillé (Utilitaires bas-niveau)
446
+
447
+ Pour des besoins avancés ou migration progressive :
448
+
449
+ ```typescript
450
+ import { chartConfigToOrganizer, chartConfigToState, applyOrganizerEventToChart } from '@oneteme/jquery-organizer';
451
+
452
+ onLatencyViewChange(event: OrganizerButtonEvent): void {
453
+ // Étape 1: Appliquer l'événement au ChartConfig
454
+ applyOrganizerEventToChart(event, this.$latencyChartConfig);
455
+
456
+ // Étape 2: Recalculer l'état (avec normalisation)
457
+ this.$latency.config = chartConfigToOrganizer(this.$latencyChartConfig);
458
+ this.$latency.state = chartConfigToState(this.$latencyChartConfig);
459
+
460
+ // Étape 3: Refetch
461
+ this._fetchLatency();
462
+ }
463
+ ```
464
+
361
465
  ---
362
466
 
363
467
  ## Intégration avec jquery-table
@@ -397,11 +501,22 @@ export { OrganizerButtonModule } from './organizer-button.module';
397
501
  export { SlicePanelComponent } from './slice-panel.component';
398
502
 
399
503
  // Interfaces
400
- export { OrganizerConfig, OrganizerState, OrganizerButtonEvent, OrganizerSliceState } from './organizer-config.interface';
504
+ export { OrganizerConfig, OrganizerState, OrganizerButtonEvent, OrganizerSliceState, OrganizerChartBinding } from './organizer-config.interface';
505
+ export { OrganizerChartBridgeOptions, OrganizerTemplate } from './organizer-chart-adapter';
401
506
  export { SliceConfig, SliceColumnDef, SliceCategory } from './slice-panel.model';
402
507
 
403
- // Adapters
508
+ // Adapters & Façade (v0.0.44+)
404
509
  export {
510
+ // Binding Facade (recommandé)
511
+ buildOrganizerChartBinding,
512
+ handleOrganizerChartEvent,
513
+
514
+ // Normalisation d'état
515
+ normalizeOrganizerState,
516
+ normalizeTemplateToState,
517
+ resolveMatchingTemplateId,
518
+
519
+ // Utilitaires bas-niveau
405
520
  chartConfigToOrganizer,
406
521
  chartConfigToState,
407
522
  chartConfigToUnifiedState,
@@ -418,22 +533,6 @@ export { OrganizerFacade } from './organizer-facade/organizer-facade';
418
533
 
419
534
  ---
420
535
 
421
- ## Changelog
422
-
423
- ### v0.0.43+ (2026-07-03)
424
- - Ajout du support **UnitConfig** avec auto-scaling intelligent
425
- - Exports des adapters (chartConfigToOrganizer, resolveYUnit, etc.)
426
- - Renommage des propriétés OrganizerFacade (Column → Field) dans jquery-table
427
- - Support des `ScaleConfig` pour conversion dynamique d'unités
428
- - Formatage adaptatif de la précision (smartFormatY) en chart-utils
429
- - Intégration complète avec REST_LATENCY_CHART_CONFIG
430
-
431
- ### v0.0.42
432
- - Refactoring des exports publics
433
- - Consolidation de SlicePanelComponent
434
-
435
- ---
436
-
437
536
  ## Support
438
537
 
439
538
  Pour des questions ou des bugs, ouvrir une issue dans le repository jquery-charts.
@@ -1,4 +1,4 @@
1
- import { buildYFields, resolveYKey } from './organizer-utils';
1
+ import { buildYFields, normalizeOrganizerState, resolveYKey } from './organizer-utils';
2
2
  export function chartConfigToOrganizer(chartConfig, options = {}) {
3
3
  if (!chartConfig)
4
4
  return {};
@@ -23,6 +23,7 @@ export function chartConfigToOrganizer(chartConfig, options = {}) {
23
23
  yFields,
24
24
  groups: mergedGroupFields,
25
25
  slices: (chartConfig.filters?.items || []).map(f => ({ id: f.key, label: f.menu.label || f.key })),
26
+ templates: chartConfig.templates,
26
27
  showReset: false,
27
28
  onFetchSliceData,
28
29
  showExport: !!(onExportVisual || onExportData),
@@ -39,13 +40,21 @@ export function chartConfigToState(chartConfig) {
39
40
  const activeGroup = chartConfig.groups?.items?.find(g => g.selected);
40
41
  const activeSlices = (chartConfig.filters?.items || []).filter(f => f.selected);
41
42
  const indicatorGroup = activeIndicator?.group;
42
- return {
43
+ const state = {
43
44
  selectedX: activeGroup?.key,
44
45
  selectedY: indicatorGroup ?? activeIndicator?.key,
45
46
  selectedYAggregate: indicatorGroup ? activeIndicator?.key : undefined,
46
47
  selectedGroupBy: activeStack?.key,
47
48
  selectedSlices: activeSlices.map(f => f.key),
48
49
  };
50
+ const organizerConfig = chartConfigToOrganizer(chartConfig);
51
+ return normalizeOrganizerState(state, organizerConfig);
52
+ }
53
+ export function buildOrganizerChartBinding(chartConfig, options = {}) {
54
+ return {
55
+ config: chartConfigToOrganizer(chartConfig, options),
56
+ state: chartConfigToState(chartConfig)
57
+ };
49
58
  }
50
59
  export function chartConfigToUnifiedState(chartConfig, viewMode = 'chart') {
51
60
  const state = chartConfigToState(chartConfig);
@@ -73,6 +82,31 @@ export function applyOrganizerEventToChart(event, chartConfig) {
73
82
  _applySliceSelection(state.selectedSlices, chartConfig);
74
83
  event.resolvedYUnit = resolveYUnit(chartConfig, event.state.selectedY, event.state.selectedYAggregate);
75
84
  }
85
+ export function handleOrganizerChartEvent(event, chartConfig, currentBinding, options = {}) {
86
+ if (event.type === 'viewSwitched') {
87
+ return {
88
+ binding: {
89
+ config: chartConfigToOrganizer(chartConfig, options),
90
+ state: { ...event.state }
91
+ },
92
+ shouldRefetch: false
93
+ };
94
+ }
95
+ applyOrganizerEventToChart(event, chartConfig);
96
+ if (event.type === 'ySelected' || event.type === 'templateSelected') {
97
+ return {
98
+ binding: buildOrganizerChartBinding(chartConfig, options),
99
+ shouldRefetch: true
100
+ };
101
+ }
102
+ return {
103
+ binding: {
104
+ config: currentBinding?.config ?? chartConfigToOrganizer(chartConfig, options),
105
+ state: event.state
106
+ },
107
+ shouldRefetch: event.type !== 'sliceSelected'
108
+ };
109
+ }
76
110
  export function resolveYUnit(chartConfig, selectedY, selectedYAggregate) {
77
111
  if (!chartConfig || !selectedY)
78
112
  return undefined;
@@ -161,4 +195,4 @@ function _applyGroupBySelection(effectiveGroupBy, chartConfig) {
161
195
  function _applySliceSelection(selectedSlices, chartConfig) {
162
196
  chartConfig.filters?.items?.forEach(f => { f.selected = selectedSlices.includes(f.key); });
163
197
  }
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQXVDOUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxXQUFnQixFQUNoQixVQUF1QyxFQUFFO0lBRXpDLElBQUksQ0FBQyxXQUFXO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDNUIsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQy9FLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU3RSxNQUFNLFdBQVcsR0FBc0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7U0FDckUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTNELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FDMUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQzlHLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7U0FDOUQsTUFBTSxDQUFDLENBQUMsQ0FBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkQsR0FBRyxDQUFDLENBQUMsQ0FBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWpGLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDbkMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3BFLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDckMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU87UUFDTCxPQUFPLEVBQUUsaUJBQWlCO1FBQzFCLE9BQU87UUFDUCxNQUFNLEVBQUUsaUJBQWlCO1FBQ3pCLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUF1QixDQUFDO1FBQ3hILFNBQVMsRUFBRSxLQUFLO1FBQ2hCLGdCQUFnQjtRQUNoQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLFlBQVksQ0FBQztRQUM5QyxjQUFjO1FBQ2QsWUFBWTtRQUNaLFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxXQUFnQjtJQUNqRCxJQUFJLENBQUMsV0FBVztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzVCLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3RSxNQUFNLFdBQVcsR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUcsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sWUFBWSxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sY0FBYyxHQUFHLGVBQWUsRUFBRSxLQUFLLENBQUM7SUFDOUMsT0FBTztRQUNMLFNBQVMsRUFBRSxXQUFXLEVBQUUsR0FBRztRQUMzQixTQUFTLEVBQUUsY0FBYyxJQUFJLGVBQWUsRUFBRSxHQUFHO1FBQ2pELGtCQUFrQixFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNyRSxlQUFlLEVBQUUsV0FBVyxFQUFFLEdBQUc7UUFDakMsY0FBYyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0tBQzdDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxXQUFnQixFQUNoQixXQUE4QixPQUFPO0lBRXJDLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLE9BQU87UUFDTCxRQUFRO1FBQ1IsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDOUQsZUFBZSxFQUFFLEtBQUssQ0FBQyxrQkFBa0I7UUFDekMsU0FBUyxFQUFFLEtBQUssQ0FBQyxlQUFlO1FBQ2hDLE9BQU8sRUFBRSxLQUFLLENBQUMsY0FBYztLQUM5QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsS0FBMkIsRUFDM0IsV0FBZ0I7SUFFaEIsSUFBSSxDQUFDLFdBQVc7UUFBRSxPQUFPO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUIsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVM7UUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ2xGLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTO1FBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUcsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZUFBZSxLQUFLLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN2RyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN0RCxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUztRQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEcsS0FBSyxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN6RyxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FDMUIsV0FBZ0IsRUFDaEIsU0FBNkIsRUFDN0Isa0JBQXNDO0lBRXRDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDakQsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdELE9BQU8sV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sZUFBZSxHQUFHLElBQUksT0FBTyxFQUFzQixDQUFDO0FBRTFELFNBQVMsY0FBYyxDQUFDLElBQXdCO0lBQzlDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsSUFBd0I7SUFDNUMsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFdBQWlDO0lBQ3pELFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEYsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3pDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQzVCLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyRztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxXQUFpQztJQUM1RSxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQzVFLElBQUksV0FBVyxFQUFFO1FBQ2YsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE9BQU87S0FDUjtJQUNELE1BQU0sU0FBUyxHQUF5QixXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEgsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDM0QsSUFBSSxTQUFTLEVBQUU7UUFDYixXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDM0MsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1lBQ2xCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDdEIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFPLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQzlGLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQyxDQUFDLENBQUM7S0FDTDtBQUNILENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFNBQWlCLEVBQUUsa0JBQXNDLEVBQUUsV0FBaUM7SUFDcEgsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdELFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRixXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdkMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQXFCLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxnQkFBb0MsRUFBRSxXQUFpQztJQUNyRyxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0UsTUFBTSxVQUFVLEdBQXlCLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDckYsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7UUFDbEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsT0FBTztLQUNSO0lBQ0QsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztJQUNyRSxJQUFJLFdBQVcsRUFBRTtRQUNmLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RSxPQUFPO0tBQ1I7SUFDRCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGdCQUFnQixDQUFDLENBQUM7SUFDakYsSUFBSSxTQUFTLElBQUksZUFBZSxFQUFFO1FBQ2hDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFO1lBQzFCLGVBQWUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ25FO2FBQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3hDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDOUQ7UUFDRCxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUNyRCxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUc7WUFDbEIsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7WUFDcEIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ3RDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTyxDQUFDLFVBQVUsRUFBRTtnQkFDaEQsU0FBUyxFQUFFLENBQUMsS0FBVSxFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUN4RCxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQyxDQUFDLENBQUM7S0FDTDtTQUFNO1FBQ0wsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEQ7QUFDSCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxjQUF3QixFQUFFLFdBQWlDO0lBQ3ZGLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3JnYW5pemVyQnV0dG9uRXZlbnQsIE9yZ2FuaXplckNvbmZpZywgT3JnYW5pemVyU3RhdGUsIE9yZ2FuaXplclVuaWZpZWRTdGF0ZSwgT3JnYW5pemVyVmlld1NsaWNlLCBPcmdhbml6ZXJYRmllbGQgfSBmcm9tICcuL29yZ2FuaXplci1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IGJ1aWxkWUZpZWxkcywgcmVzb2x2ZVlLZXkgfSBmcm9tICcuL29yZ2FuaXplci11dGlscyc7XG5pbXBvcnQgeyBVbml0Q29uZmlnIH0gZnJvbSAnQG9uZXRlbWUvanF1ZXJ5LWNvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0SXRlbSB7XG4gIGtleTogc3RyaW5nO1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgbWVudTogeyBsYWJlbDogc3RyaW5nIH07XG4gIHVuaXQ/OiBzdHJpbmcgfCBVbml0Q29uZmlnO1xuICBqcXVlcnk/OiB7XG4gICAgdmFsdWU6IChzPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgYnVpbGRBbGlhczogKHM/OiBzdHJpbmcpID0+IHN0cmluZztcbiAgICBidWlsZE5hbWU/OiAoaXRlbTogYW55LCB2YWx1ZT86IHN0cmluZykgPT4gc3RyaW5nO1xuICAgIGJ1aWxkQ29sb3I/OiAodmFsdWU/OiBzdHJpbmcpID0+IHN0cmluZztcbiAgfTtcbiAgZ3JvdXA/OiBzdHJpbmc7XG4gIGV4dHJhPzoge1xuICAgIHN0YWNrcz86IHsgb3B0aW9uYWw6IGJvb2xlYW47IGl0ZW1zOiBPcmdhbml6ZXJDaGFydEl0ZW1bXSB9O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydFNlY3Rpb24ge1xuICBvcHRpb25hbDogYm9vbGVhbjtcbiAgaXRlbXM6IE9yZ2FuaXplckNoYXJ0SXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0Q29uZmlnIHtcbiAgZ3JvdXBzOiBPcmdhbml6ZXJDaGFydFNlY3Rpb247XG4gIGluZGljYXRvcnM6IE9yZ2FuaXplckNoYXJ0U2VjdGlvbjtcbiAgZmlsdGVycz86IE9yZ2FuaXplckNoYXJ0U2VjdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydEJyaWRnZU9wdGlvbnMge1xuICBvbkZldGNoU2xpY2VEYXRhPzogT3JnYW5pemVyQ29uZmlnWydvbkZldGNoU2xpY2VEYXRhJ107XG4gIG9uRXhwb3J0VmlzdWFsPzogKCkgPT4gdm9pZDtcbiAgb25FeHBvcnREYXRhPzogKCkgPT4gdm9pZDtcbiAgc3dpdGNoVmlldz86IE9yZ2FuaXplckNvbmZpZ1snc3dpdGNoVmlldyddO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRDb25maWdUb09yZ2FuaXplcihcbiAgY2hhcnRDb25maWc6IGFueSxcbiAgb3B0aW9uczogT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zID0ge31cbik6IE9yZ2FuaXplckNvbmZpZyB7XG4gIGlmICghY2hhcnRDb25maWcpIHJldHVybiB7fTtcbiAgY29uc3QgeyBvbkZldGNoU2xpY2VEYXRhLCBvbkV4cG9ydFZpc3VhbCwgb25FeHBvcnREYXRhLCBzd2l0Y2hWaWV3IH0gPSBvcHRpb25zO1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuXG4gIGNvbnN0IGJhc2VYRmllbGRzOiBPcmdhbml6ZXJYRmllbGRbXSA9IChjaGFydENvbmZpZy5ncm91cHM/Lml0ZW1zIHx8IFtdKVxuICAgIC5maWx0ZXIoZyA9PiAhX2lzU3ludGhldGljKGcpKVxuICAgIC5tYXAoZyA9PiAoeyBpZDogZy5rZXksIGxhYmVsOiBnLm1lbnUubGFiZWwgfHwgZy5rZXkgfSkpO1xuXG4gIGNvbnN0IHlGaWVsZHMgPSBidWlsZFlGaWVsZHMoXG4gICAgKGNoYXJ0Q29uZmlnLmluZGljYXRvcnM/Lml0ZW1zIHx8IFtdKS5tYXAoaSA9PiAoeyBpZDogaS5rZXksIGxhYmVsOiBpLm1lbnUubGFiZWwgfHwgaS5rZXksIGdyb3VwOiBpLmdyb3VwIH0pKVxuICApO1xuXG4gIGNvbnN0IHN0YWNrRmllbGRzID0gKGFjdGl2ZUluZGljYXRvcj8uZXh0cmE/LnN0YWNrcz8uaXRlbXMgfHwgW10pXG4gICAgLmZpbHRlcigoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiAhX2lzU3ludGhldGljKHMpKVxuICAgIC5tYXAoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gKHsgaWQ6IHMua2V5LCBsYWJlbDogcy5tZW51LmxhYmVsIHx8IHMua2V5IH0pKTtcblxuICBjb25zdCBzZWVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBtZXJnZWRHcm91cEZpZWxkcyA9IFsuLi5iYXNlWEZpZWxkcywgLi4uc3RhY2tGaWVsZHNdLmZpbHRlcihmID0+IHtcbiAgICBpZiAoc2VlbktleXMuaGFzKGYuaWQpKSByZXR1cm4gZmFsc2U7XG4gICAgc2VlbktleXMuYWRkKGYuaWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHhGaWVsZHM6IG1lcmdlZEdyb3VwRmllbGRzLFxuICAgIHlGaWVsZHMsXG4gICAgZ3JvdXBzOiBtZXJnZWRHcm91cEZpZWxkcyxcbiAgICBzbGljZXM6IChjaGFydENvbmZpZy5maWx0ZXJzPy5pdGVtcyB8fCBbXSkubWFwKGYgPT4gKHsgaWQ6IGYua2V5LCBsYWJlbDogZi5tZW51LmxhYmVsIHx8IGYua2V5IH0pIGFzIE9yZ2FuaXplclZpZXdTbGljZSksXG4gICAgc2hvd1Jlc2V0OiBmYWxzZSxcbiAgICBvbkZldGNoU2xpY2VEYXRhLFxuICAgIHNob3dFeHBvcnQ6ICEhKG9uRXhwb3J0VmlzdWFsIHx8IG9uRXhwb3J0RGF0YSksXG4gICAgb25FeHBvcnRWaXN1YWwsXG4gICAgb25FeHBvcnREYXRhLFxuICAgIHN3aXRjaFZpZXcsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFydENvbmZpZ1RvU3RhdGUoY2hhcnRDb25maWc6IGFueSk6IE9yZ2FuaXplclN0YXRlIHtcbiAgaWYgKCFjaGFydENvbmZpZykgcmV0dXJuIHt9O1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuICBjb25zdCBhY3RpdmVTdGFjayA9IChhY3RpdmVJbmRpY2F0b3I/LmV4dHJhPy5zdGFja3M/Lml0ZW1zIHx8IFtdKS5maW5kKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+IHMuc2VsZWN0ZWQpO1xuICBjb25zdCBhY3RpdmVHcm91cCA9IGNoYXJ0Q29uZmlnLmdyb3Vwcz8uaXRlbXM/LmZpbmQoZyA9PiBnLnNlbGVjdGVkKTtcbiAgY29uc3QgYWN0aXZlU2xpY2VzID0gKGNoYXJ0Q29uZmlnLmZpbHRlcnM/Lml0ZW1zIHx8IFtdKS5maWx0ZXIoZiA9PiBmLnNlbGVjdGVkKTtcbiAgY29uc3QgaW5kaWNhdG9yR3JvdXAgPSBhY3RpdmVJbmRpY2F0b3I/Lmdyb3VwO1xuICByZXR1cm4ge1xuICAgIHNlbGVjdGVkWDogYWN0aXZlR3JvdXA/LmtleSxcbiAgICBzZWxlY3RlZFk6IGluZGljYXRvckdyb3VwID8/IGFjdGl2ZUluZGljYXRvcj8ua2V5LFxuICAgIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogaW5kaWNhdG9yR3JvdXAgPyBhY3RpdmVJbmRpY2F0b3I/LmtleSA6IHVuZGVmaW5lZCxcbiAgICBzZWxlY3RlZEdyb3VwQnk6IGFjdGl2ZVN0YWNrPy5rZXksXG4gICAgc2VsZWN0ZWRTbGljZXM6IGFjdGl2ZVNsaWNlcy5tYXAoZiA9PiBmLmtleSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFydENvbmZpZ1RvVW5pZmllZFN0YXRlKFxuICBjaGFydENvbmZpZzogYW55LFxuICB2aWV3TW9kZTogJ2NoYXJ0JyB8ICd0YWJsZScgPSAnY2hhcnQnXG4pOiBPcmdhbml6ZXJVbmlmaWVkU3RhdGUge1xuICBjb25zdCBzdGF0ZSA9IGNoYXJ0Q29uZmlnVG9TdGF0ZShjaGFydENvbmZpZyk7XG4gIHJldHVybiB7XG4gICAgdmlld01vZGUsXG4gICAgZGltZW5zaW9uOiBzdGF0ZS5zZWxlY3RlZFgsXG4gICAgbWV0cmljOiByZXNvbHZlWUtleShzdGF0ZS5zZWxlY3RlZFksIHN0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSksXG4gICAgbWV0cmljQWdncmVnYXRlOiBzdGF0ZS5zZWxlY3RlZFlBZ2dyZWdhdGUsXG4gICAgYnJlYWtkb3duOiBzdGF0ZS5zZWxlY3RlZEdyb3VwQnksXG4gICAgZmlsdGVyczogc3RhdGUuc2VsZWN0ZWRTbGljZXMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU9yZ2FuaXplckV2ZW50VG9DaGFydChcbiAgZXZlbnQ6IE9yZ2FuaXplckJ1dHRvbkV2ZW50LFxuICBjaGFydENvbmZpZzogYW55XG4pOiB2b2lkIHtcbiAgaWYgKCFjaGFydENvbmZpZykgcmV0dXJuO1xuICBjb25zdCBzdGF0ZSA9IGV2ZW50LnN0YXRlO1xuICBfY2xlYW5TeW50aGV0aWNzKGNoYXJ0Q29uZmlnKTtcbiAgaWYgKHN0YXRlLnNlbGVjdGVkWCAhPT0gdW5kZWZpbmVkKSBfYXBwbHlYU2VsZWN0aW9uKHN0YXRlLnNlbGVjdGVkWCwgY2hhcnRDb25maWcpO1xuICBpZiAoc3RhdGUuc2VsZWN0ZWRZICE9PSB1bmRlZmluZWQpIF9hcHBseVlTZWxlY3Rpb24oc3RhdGUuc2VsZWN0ZWRZLCBzdGF0ZS5zZWxlY3RlZFlBZ2dyZWdhdGUsIGNoYXJ0Q29uZmlnKTtcbiAgY29uc3QgZWZmZWN0aXZlR3JvdXBCeSA9IHN0YXRlLnNlbGVjdGVkR3JvdXBCeSAhPT0gc3RhdGUuc2VsZWN0ZWRYID8gc3RhdGUuc2VsZWN0ZWRHcm91cEJ5IDogdW5kZWZpbmVkO1xuICBfYXBwbHlHcm91cEJ5U2VsZWN0aW9uKGVmZmVjdGl2ZUdyb3VwQnksIGNoYXJ0Q29uZmlnKTtcbiAgaWYgKHN0YXRlLnNlbGVjdGVkU2xpY2VzICE9PSB1bmRlZmluZWQpIF9hcHBseVNsaWNlU2VsZWN0aW9uKHN0YXRlLnNlbGVjdGVkU2xpY2VzLCBjaGFydENvbmZpZyk7XG4gIGV2ZW50LnJlc29sdmVkWVVuaXQgPSByZXNvbHZlWVVuaXQoY2hhcnRDb25maWcsIGV2ZW50LnN0YXRlLnNlbGVjdGVkWSwgZXZlbnQuc3RhdGUuc2VsZWN0ZWRZQWdncmVnYXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVZVW5pdChcbiAgY2hhcnRDb25maWc6IGFueSxcbiAgc2VsZWN0ZWRZOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBVbml0Q29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjaGFydENvbmZpZyB8fCAhc2VsZWN0ZWRZKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBhY3R1YWxLZXkgPSByZXNvbHZlWUtleShzZWxlY3RlZFksIHNlbGVjdGVkWUFnZ3JlZ2F0ZSk7XG4gIHJldHVybiBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkua2V5ID09PSBhY3R1YWxLZXkpPy51bml0O1xufVxuXG5jb25zdCBfc3ludGhldGljSXRlbXMgPSBuZXcgV2Vha1NldDxPcmdhbml6ZXJDaGFydEl0ZW0+KCk7XG5cbmZ1bmN0aW9uIF9tYWtlU3ludGhldGljKGl0ZW06IE9yZ2FuaXplckNoYXJ0SXRlbSk6IE9yZ2FuaXplckNoYXJ0SXRlbSB7XG4gIF9zeW50aGV0aWNJdGVtcy5hZGQoaXRlbSk7XG4gIHJldHVybiBpdGVtO1xufVxuXG5mdW5jdGlvbiBfaXNTeW50aGV0aWMoaXRlbTogT3JnYW5pemVyQ2hhcnRJdGVtKTogYm9vbGVhbiB7XG4gIHJldHVybiBfc3ludGhldGljSXRlbXMuaGFzKGl0ZW0pO1xufVxuXG5mdW5jdGlvbiBfY2xlYW5TeW50aGV0aWNzKGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyk6IHZvaWQge1xuICBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMgPSBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMuZmlsdGVyKGcgPT4gIV9pc1N5bnRoZXRpYyhnKSk7XG4gIGNoYXJ0Q29uZmlnLmluZGljYXRvcnMuaXRlbXMuZm9yRWFjaChpbmQgPT4ge1xuICAgIGlmIChpbmQuZXh0cmE/LnN0YWNrcz8uaXRlbXMpIHtcbiAgICAgIGluZC5leHRyYS5zdGFja3MuaXRlbXMgPSBpbmQuZXh0cmEuc3RhY2tzLml0ZW1zLmZpbHRlcigoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiAhX2lzU3ludGhldGljKHMpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfYXBwbHlYU2VsZWN0aW9uKHNlbGVjdGVkWDogc3RyaW5nLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgaXNHcm91cEl0ZW0gPSBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMuc29tZShnID0+IGcua2V5ID09PSBzZWxlY3RlZFgpO1xuICBpZiAoaXNHcm91cEl0ZW0pIHtcbiAgICBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMuZm9yRWFjaChnID0+IHsgZy5zZWxlY3RlZCA9IGcua2V5ID09PSBzZWxlY3RlZFg7IH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBhbGxTdGFja3M6IE9yZ2FuaXplckNoYXJ0SXRlbVtdID0gY2hhcnRDb25maWcuaW5kaWNhdG9ycy5pdGVtcy5mbGF0TWFwKGkgPT4gaS5leHRyYT8uc3RhY2tzPy5pdGVtcyA/PyBbXSk7XG4gIGNvbnN0IHN0YWNrSXRlbSA9IGFsbFN0YWNrcy5maW5kKHMgPT4gcy5rZXkgPT09IHNlbGVjdGVkWCk7XG4gIGlmIChzdGFja0l0ZW0pIHtcbiAgICBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMuZm9yRWFjaChnID0+IHsgZy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgICBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMucHVzaChfbWFrZVN5bnRoZXRpYyh7XG4gICAgICBrZXk6IHN0YWNrSXRlbS5rZXksXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgIG1lbnU6IHN0YWNrSXRlbS5tZW51LFxuICAgICAganF1ZXJ5OiBzdGFja0l0ZW0uanF1ZXJ5XG4gICAgICAgID8geyB2YWx1ZTogKCkgPT4gc3RhY2tJdGVtLmpxdWVyeSEudmFsdWUoKSwgYnVpbGRBbGlhczogKCkgPT4gc3RhY2tJdGVtLmpxdWVyeSEuYnVpbGRBbGlhcygpIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hcHBseVlTZWxlY3Rpb24oc2VsZWN0ZWRZOiBzdHJpbmcsIHNlbGVjdGVkWUFnZ3JlZ2F0ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgYWN0dWFsS2V5ID0gcmVzb2x2ZVlLZXkoc2VsZWN0ZWRZLCBzZWxlY3RlZFlBZ2dyZWdhdGUpO1xuICBjaGFydENvbmZpZy5pbmRpY2F0b3JzLml0ZW1zLmZvckVhY2goaSA9PiB7IGkuc2VsZWN0ZWQgPSBpLmtleSA9PT0gYWN0dWFsS2V5OyB9KTtcbiAgY2hhcnRDb25maWcuaW5kaWNhdG9ycy5pdGVtcy5mb3JFYWNoKGkgPT4ge1xuICAgIGkuZXh0cmE/LnN0YWNrcz8uaXRlbXM/LmZvckVhY2goKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gX2FwcGx5R3JvdXBCeVNlbGVjdGlvbihlZmZlY3RpdmVHcm91cEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQsIGNoYXJ0Q29uZmlnOiBPcmdhbml6ZXJDaGFydENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzLml0ZW1zLmZpbmQoaSA9PiBpLnNlbGVjdGVkKTtcbiAgY29uc3Qgc3RhY2tJdGVtczogT3JnYW5pemVyQ2hhcnRJdGVtW10gPSBhY3RpdmVJbmRpY2F0b3I/LmV4dHJhPy5zdGFja3M/Lml0ZW1zID8/IFtdO1xuICBpZiAoZWZmZWN0aXZlR3JvdXBCeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBpc1N0YWNrSXRlbSA9IHN0YWNrSXRlbXMuc29tZShzID0+IHMua2V5ID09PSBlZmZlY3RpdmVHcm91cEJ5KTtcbiAgaWYgKGlzU3RhY2tJdGVtKSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gcy5rZXkgPT09IGVmZmVjdGl2ZUdyb3VwQnk7IH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBncm91cEl0ZW0gPSBjaGFydENvbmZpZy5ncm91cHMuaXRlbXMuZmluZChnID0+IGcua2V5ID09PSBlZmZlY3RpdmVHcm91cEJ5KTtcbiAgaWYgKGdyb3VwSXRlbSAmJiBhY3RpdmVJbmRpY2F0b3IpIHtcbiAgICBzdGFja0l0ZW1zLmZvckVhY2gocyA9PiB7IHMuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gICAgaWYgKCFhY3RpdmVJbmRpY2F0b3IuZXh0cmEpIHtcbiAgICAgIGFjdGl2ZUluZGljYXRvci5leHRyYSA9IHsgc3RhY2tzOiB7IG9wdGlvbmFsOiB0cnVlLCBpdGVtczogW10gfSB9O1xuICAgIH0gZWxzZSBpZiAoIWFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MpIHtcbiAgICAgIGFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MgPSB7IG9wdGlvbmFsOiB0cnVlLCBpdGVtczogW10gfTtcbiAgICB9XG4gICAgYWN0aXZlSW5kaWNhdG9yLmV4dHJhLnN0YWNrcy5pdGVtcy5wdXNoKF9tYWtlU3ludGhldGljKHtcbiAgICAgIGtleTogZ3JvdXBJdGVtLmtleSxcbiAgICAgIHNlbGVjdGVkOiB0cnVlLFxuICAgICAgbWVudTogZ3JvdXBJdGVtLm1lbnUsXG4gICAgICBqcXVlcnk6IGdyb3VwSXRlbS5qcXVlcnkgPyB7XG4gICAgICAgIHZhbHVlOiAoKSA9PiBncm91cEl0ZW0uanF1ZXJ5IS52YWx1ZSgpLFxuICAgICAgICBidWlsZEFsaWFzOiAoKSA9PiBncm91cEl0ZW0uanF1ZXJ5IS5idWlsZEFsaWFzKCksXG4gICAgICAgIGJ1aWxkTmFtZTogKF9pdGVtOiBhbnksIHZhbHVlOiBzdHJpbmcpID0+IFN0cmluZyh2YWx1ZSksXG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfSBlbHNlIHtcbiAgICBzdGFja0l0ZW1zLmZvckVhY2gocyA9PiB7IHMuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2FwcGx5U2xpY2VTZWxlY3Rpb24oc2VsZWN0ZWRTbGljZXM6IHN0cmluZ1tdLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY2hhcnRDb25maWcuZmlsdGVycz8uaXRlbXM/LmZvckVhY2goZiA9PiB7IGYuc2VsZWN0ZWQgPSBzZWxlY3RlZFNsaWNlcy5pbmNsdWRlcyhmLmtleSk7IH0pO1xufVxuIl19
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNoYXJ0LWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBNkIsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFpRGxILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsV0FBZ0IsRUFDaEIsVUFBdUMsRUFBRTtJQUV6QyxJQUFJLENBQUMsV0FBVztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzVCLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMvRSxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFN0UsTUFBTSxXQUFXLEdBQXNCLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1NBQ3JFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQzFCLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMs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QUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDeEQsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNkLENBQUMsQ0FBQyxDQUFDO0tBQ0w7U0FBTTtRQUNMLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2xEO0FBQ0gsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsY0FBd0IsRUFBRSxXQUFpQztJQUN2RixXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yZ2FuaXplckJ1dHRvbkV2ZW50LCBPcmdhbml6ZXJDb25maWcsIE9yZ2FuaXplclN0YXRlLCBPcmdhbml6ZXJVbmlmaWVkU3RhdGUsIE9yZ2FuaXplclZpZXdTbGljZSwgT3JnYW5pemVyWEZpZWxkIH0gZnJvbSAnLi9vcmdhbml6ZXItY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBidWlsZFlGaWVsZHMsIG5vcm1hbGl6ZU9yZ2FuaXplclN0YXRlLCByZXNvbHZlTWF0Y2hpbmdUZW1wbGF0ZUlkLCByZXNvbHZlWUtleSB9IGZyb20gJy4vb3JnYW5pemVyLXV0aWxzJztcbmltcG9ydCB7IFVuaXRDb25maWcgfSBmcm9tICdAb25ldGVtZS9qcXVlcnktY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRJdGVtIHtcbiAga2V5OiBzdHJpbmc7XG4gIHNlbGVjdGVkOiBib29sZWFuO1xuICBtZW51OiB7IGxhYmVsOiBzdHJpbmcgfTtcbiAgdW5pdD86IHN0cmluZyB8IFVuaXRDb25maWc7XG4gIGpxdWVyeT86IHtcbiAgICB2YWx1ZTogKHM/OiBzdHJpbmcpID0+IHN0cmluZztcbiAgICBidWlsZEFsaWFzOiAocz86IHN0cmluZykgPT4gc3RyaW5nO1xuICAgIGJ1aWxkTmFtZT86IChpdGVtOiBhbnksIHZhbHVlPzogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgYnVpbGRDb2xvcj86ICh2YWx1ZT86IHN0cmluZykgPT4gc3RyaW5nO1xuICB9O1xuICBncm91cD86IHN0cmluZztcbiAgZXh0cmE/OiB7XG4gICAgc3RhY2tzPzogeyBvcHRpb25hbDogYm9vbGVhbjsgaXRlbXM6IE9yZ2FuaXplckNoYXJ0SXRlbVtdIH07XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0U2VjdGlvbiB7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBpdGVtczogT3JnYW5pemVyQ2hhcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRDb25maWcge1xuICBncm91cHM6IE9yZ2FuaXplckNoYXJ0U2VjdGlvbjtcbiAgaW5kaWNhdG9yczogT3JnYW5pemVyQ2hhcnRTZWN0aW9uO1xuICBmaWx0ZXJzPzogT3JnYW5pemVyQ2hhcnRTZWN0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplckNoYXJ0QnJpZGdlT3B0aW9ucyB7XG4gIG9uRmV0Y2hTbGljZURhdGE/OiBPcmdhbml6ZXJDb25maWdbJ29uRmV0Y2hTbGljZURhdGEnXTtcbiAgb25FeHBvcnRWaXN1YWw/OiAoKSA9PiB2b2lkO1xuICBvbkV4cG9ydERhdGE/OiAoKSA9PiB2b2lkO1xuICBzd2l0Y2hWaWV3PzogT3JnYW5pemVyQ29uZmlnWydzd2l0Y2hWaWV3J107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ2hhcnRCaW5kaW5nIHtcbiAgY29uZmlnOiBPcmdhbml6ZXJDb25maWc7XG4gIHN0YXRlOiBPcmdhbml6ZXJTdGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJDaGFydEV2ZW50UmVzdWx0IHtcbiAgYmluZGluZzogT3JnYW5pemVyQ2hhcnRCaW5kaW5nO1xuICBzaG91bGRSZWZldGNoOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhcnRDb25maWdUb09yZ2FuaXplcihcbiAgY2hhcnRDb25maWc6IGFueSxcbiAgb3B0aW9uczogT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zID0ge31cbik6IE9yZ2FuaXplckNvbmZpZyB7XG4gIGlmICghY2hhcnRDb25maWcpIHJldHVybiB7fTtcbiAgY29uc3QgeyBvbkZldGNoU2xpY2VEYXRhLCBvbkV4cG9ydFZpc3VhbCwgb25FeHBvcnREYXRhLCBzd2l0Y2hWaWV3IH0gPSBvcHRpb25zO1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuXG4gIGNvbnN0IGJhc2VYRmllbGRzOiBPcmdhbml6ZXJYRmllbGRbXSA9IChjaGFydENvbmZpZy5ncm91cHM/Lml0ZW1zIHx8IFtdKVxuICAgIC5maWx0ZXIoZyA9PiAhX2lzU3ludGhldGljKGcpKVxuICAgIC5tYXAoZyA9PiAoeyBpZDogZy5rZXksIGxhYmVsOiBnLm1lbnUubGFiZWwgfHwgZy5rZXkgfSkpO1xuXG4gIGNvbnN0IHlGaWVsZHMgPSBidWlsZFlGaWVsZHMoXG4gICAgKGNoYXJ0Q29uZmlnLmluZGljYXRvcnM/Lml0ZW1zIHx8IFtdKS5tYXAoaSA9PiAoeyBpZDogaS5rZXksIGxhYmVsOiBpLm1lbnUubGFiZWwgfHwgaS5rZXksIGdyb3VwOiBpLmdyb3VwIH0pKVxuICApO1xuXG4gIGNvbnN0IHN0YWNrRmllbGRzID0gKGFjdGl2ZUluZGljYXRvcj8uZXh0cmE/LnN0YWNrcz8uaXRlbXMgfHwgW10pXG4gICAgLmZpbHRlcigoczogT3JnYW5pemVyQ2hhcnRJdGVtKSA9PiAhX2lzU3ludGhldGljKHMpKVxuICAgIC5tYXAoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gKHsgaWQ6IHMua2V5LCBsYWJlbDogcy5tZW51LmxhYmVsIHx8IHMua2V5IH0pKTtcblxuICBjb25zdCBzZWVuS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBtZXJnZWRHcm91cEZpZWxkcyA9IFsuLi5iYXNlWEZpZWxkcywgLi4uc3RhY2tGaWVsZHNdLmZpbHRlcihmID0+IHtcbiAgICBpZiAoc2VlbktleXMuaGFzKGYuaWQpKSByZXR1cm4gZmFsc2U7XG4gICAgc2VlbktleXMuYWRkKGYuaWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHhGaWVsZHM6IG1lcmdlZEdyb3VwRmllbGRzLFxuICAgIHlGaWVsZHMsXG4gICAgZ3JvdXBzOiBtZXJnZWRHcm91cEZpZWxkcyxcbiAgICBzbGljZXM6IChjaGFydENvbmZpZy5maWx0ZXJzPy5pdGVtcyB8fCBbXSkubWFwKGYgPT4gKHsgaWQ6IGYua2V5LCBsYWJlbDogZi5tZW51LmxhYmVsIHx8IGYua2V5IH0pIGFzIE9yZ2FuaXplclZpZXdTbGljZSksXG4gICAgdGVtcGxhdGVzOiBjaGFydENvbmZpZy50ZW1wbGF0ZXMsXG4gICAgc2hvd1Jlc2V0OiBmYWxzZSxcbiAgICBvbkZldGNoU2xpY2VEYXRhLFxuICAgIHNob3dFeHBvcnQ6ICEhKG9uRXhwb3J0VmlzdWFsIHx8IG9uRXhwb3J0RGF0YSksXG4gICAgb25FeHBvcnRWaXN1YWwsXG4gICAgb25FeHBvcnREYXRhLFxuICAgIHN3aXRjaFZpZXcsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFydENvbmZpZ1RvU3RhdGUoY2hhcnRDb25maWc6IGFueSk6IE9yZ2FuaXplclN0YXRlIHtcbiAgaWYgKCFjaGFydENvbmZpZykgcmV0dXJuIHt9O1xuICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBjaGFydENvbmZpZy5pbmRpY2F0b3JzPy5pdGVtcz8uZmluZChpID0+IGkuc2VsZWN0ZWQpO1xuICBjb25zdCBhY3RpdmVTdGFjayA9IChhY3RpdmVJbmRpY2F0b3I/LmV4dHJhPy5zdGFja3M/Lml0ZW1zIHx8IFtdKS5maW5kKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+IHMuc2VsZWN0ZWQpO1xuICBjb25zdCBhY3RpdmVHcm91cCA9IGNoYXJ0Q29uZmlnLmdyb3Vwcz8uaXRlbXM/LmZpbmQoZyA9PiBnLnNlbGVjdGVkKTtcbiAgY29uc3QgYWN0aXZlU2xpY2VzID0gKGNoYXJ0Q29uZmlnLmZpbHRlcnM/Lml0ZW1zIHx8IFtdKS5maWx0ZXIoZiA9PiBmLnNlbGVjdGVkKTtcbiAgY29uc3QgaW5kaWNhdG9yR3JvdXAgPSBhY3RpdmVJbmRpY2F0b3I/Lmdyb3VwO1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBzZWxlY3RlZFg6IGFjdGl2ZUdyb3VwPy5rZXksXG4gICAgc2VsZWN0ZWRZOiBpbmRpY2F0b3JHcm91cCA/PyBhY3RpdmVJbmRpY2F0b3I/LmtleSxcbiAgICBzZWxlY3RlZFlBZ2dyZWdhdGU6IGluZGljYXRvckdyb3VwID8gYWN0aXZlSW5kaWNhdG9yPy5rZXkgOiB1bmRlZmluZWQsXG4gICAgc2VsZWN0ZWRHcm91cEJ5OiBhY3RpdmVTdGFjaz8ua2V5LFxuICAgIHNlbGVjdGVkU2xpY2VzOiBhY3RpdmVTbGljZXMubWFwKGYgPT4gZi5rZXkpLFxuICB9O1xuICBjb25zdCBvcmdhbml6ZXJDb25maWcgPSBjaGFydENvbmZpZ1RvT3JnYW5pemVyKGNoYXJ0Q29uZmlnKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9yZ2FuaXplclN0YXRlKHN0YXRlLCBvcmdhbml6ZXJDb25maWcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRPcmdhbml6ZXJDaGFydEJpbmRpbmcoXG4gIGNoYXJ0Q29uZmlnOiBhbnksXG4gIG9wdGlvbnM6IE9yZ2FuaXplckNoYXJ0QnJpZGdlT3B0aW9ucyA9IHt9XG4pOiBPcmdhbml6ZXJDaGFydEJpbmRpbmcge1xuICByZXR1cm4ge1xuICAgIGNvbmZpZzogY2hhcnRDb25maWdUb09yZ2FuaXplcihjaGFydENvbmZpZywgb3B0aW9ucyksXG4gICAgc3RhdGU6IGNoYXJ0Q29uZmlnVG9TdGF0ZShjaGFydENvbmZpZylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJ0Q29uZmlnVG9VbmlmaWVkU3RhdGUoXG4gIGNoYXJ0Q29uZmlnOiBhbnksXG4gIHZpZXdNb2RlOiAnY2hhcnQnIHwgJ3RhYmxlJyA9ICdjaGFydCdcbik6IE9yZ2FuaXplclVuaWZpZWRTdGF0ZSB7XG4gIGNvbnN0IHN0YXRlID0gY2hhcnRDb25maWdUb1N0YXRlKGNoYXJ0Q29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICB2aWV3TW9kZSxcbiAgICBkaW1lbnNpb246IHN0YXRlLnNlbGVjdGVkWCxcbiAgICBtZXRyaWM6IHJlc29sdmVZS2V5KHN0YXRlLnNlbGVjdGVkWSwgc3RhdGUuc2VsZWN0ZWRZQWdncmVnYXRlKSxcbiAgICBtZXRyaWNBZ2dyZWdhdGU6IHN0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSxcbiAgICBicmVha2Rvd246IHN0YXRlLnNlbGVjdGVkR3JvdXBCeSxcbiAgICBmaWx0ZXJzOiBzdGF0ZS5zZWxlY3RlZFNsaWNlcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5T3JnYW5pemVyRXZlbnRUb0NoYXJ0KFxuICBldmVudDogT3JnYW5pemVyQnV0dG9uRXZlbnQsXG4gIGNoYXJ0Q29uZmlnOiBhbnlcbik6IHZvaWQge1xuICBpZiAoIWNoYXJ0Q29uZmlnKSByZXR1cm47XG4gIGNvbnN0IHN0YXRlID0gZXZlbnQuc3RhdGU7XG4gIF9jbGVhblN5bnRoZXRpY3MoY2hhcnRDb25maWcpO1xuICBpZiAoc3RhdGUuc2VsZWN0ZWRYICE9PSB1bmRlZmluZWQpIF9hcHBseVhTZWxlY3Rpb24oc3RhdGUuc2VsZWN0ZWRYLCBjaGFydENvbmZpZyk7XG4gIGlmIChzdGF0ZS5zZWxlY3RlZFkgIT09IHVuZGVmaW5lZCkgX2FwcGx5WVNlbGVjdGlvbihzdGF0ZS5zZWxlY3RlZFksIHN0YXRlLnNlbGVjdGVkWUFnZ3JlZ2F0ZSwgY2hhcnRDb25maWcpO1xuICBjb25zdCBlZmZlY3RpdmVHcm91cEJ5ID0gc3RhdGUuc2VsZWN0ZWRHcm91cEJ5ICE9PSBzdGF0ZS5zZWxlY3RlZFggPyBzdGF0ZS5zZWxlY3RlZEdyb3VwQnkgOiB1bmRlZmluZWQ7XG4gIF9hcHBseUdyb3VwQnlTZWxlY3Rpb24oZWZmZWN0aXZlR3JvdXBCeSwgY2hhcnRDb25maWcpO1xuICBpZiAoc3RhdGUuc2VsZWN0ZWRTbGljZXMgIT09IHVuZGVmaW5lZCkgX2FwcGx5U2xpY2VTZWxlY3Rpb24oc3RhdGUuc2VsZWN0ZWRTbGljZXMsIGNoYXJ0Q29uZmlnKTtcbiAgZXZlbnQucmVzb2x2ZWRZVW5pdCA9IHJlc29sdmVZVW5pdChjaGFydENvbmZpZywgZXZlbnQuc3RhdGUuc2VsZWN0ZWRZLCBldmVudC5zdGF0ZS5zZWxlY3RlZFlBZ2dyZWdhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlT3JnYW5pemVyQ2hhcnRFdmVudChcbiAgZXZlbnQ6IE9yZ2FuaXplckJ1dHRvbkV2ZW50LFxuICBjaGFydENvbmZpZzogYW55LFxuICBjdXJyZW50QmluZGluZzogT3JnYW5pemVyQ2hhcnRCaW5kaW5nIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBPcmdhbml6ZXJDaGFydEJyaWRnZU9wdGlvbnMgPSB7fVxuKTogT3JnYW5pemVyQ2hhcnRFdmVudFJlc3VsdCB7XG4gIGlmIChldmVudC50eXBlID09PSAndmlld1N3aXRjaGVkJykge1xuICAgIHJldHVybiB7XG4gICAgICBiaW5kaW5nOiB7XG4gICAgICAgIGNvbmZpZzogY2hhcnRDb25maWdUb09yZ2FuaXplcihjaGFydENvbmZpZywgb3B0aW9ucyksXG4gICAgICAgIHN0YXRlOiB7IC4uLmV2ZW50LnN0YXRlIH1cbiAgICAgIH0sXG4gICAgICBzaG91bGRSZWZldGNoOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBhcHBseU9yZ2FuaXplckV2ZW50VG9DaGFydChldmVudCwgY2hhcnRDb25maWcpO1xuXG4gIGlmIChldmVudC50eXBlID09PSAneVNlbGVjdGVkJyB8fCBldmVudC50eXBlID09PSAndGVtcGxhdGVTZWxlY3RlZCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmluZGluZzogYnVpbGRPcmdhbml6ZXJDaGFydEJpbmRpbmcoY2hhcnRDb25maWcsIG9wdGlvbnMpLFxuICAgICAgc2hvdWxkUmVmZXRjaDogdHJ1ZVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJpbmRpbmc6IHtcbiAgICAgIGNvbmZpZzogY3VycmVudEJpbmRpbmc/LmNvbmZpZyA/PyBjaGFydENvbmZpZ1RvT3JnYW5pemVyKGNoYXJ0Q29uZmlnLCBvcHRpb25zKSxcbiAgICAgIHN0YXRlOiBldmVudC5zdGF0ZVxuICAgIH0sXG4gICAgc2hvdWxkUmVmZXRjaDogZXZlbnQudHlwZSAhPT0gJ3NsaWNlU2VsZWN0ZWQnXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlWVVuaXQoXG4gIGNoYXJ0Q29uZmlnOiBhbnksXG4gIHNlbGVjdGVkWTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzZWxlY3RlZFlBZ2dyZWdhdGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgVW5pdENvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghY2hhcnRDb25maWcgfHwgIXNlbGVjdGVkWSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgYWN0dWFsS2V5ID0gcmVzb2x2ZVlLZXkoc2VsZWN0ZWRZLCBzZWxlY3RlZFlBZ2dyZWdhdGUpO1xuICByZXR1cm4gY2hhcnRDb25maWcuaW5kaWNhdG9ycz8uaXRlbXM/LmZpbmQoaSA9PiBpLmtleSA9PT0gYWN0dWFsS2V5KT8udW5pdDtcbn1cblxuY29uc3QgX3N5bnRoZXRpY0l0ZW1zID0gbmV3IFdlYWtTZXQ8T3JnYW5pemVyQ2hhcnRJdGVtPigpO1xuXG5mdW5jdGlvbiBfbWFrZVN5bnRoZXRpYyhpdGVtOiBPcmdhbml6ZXJDaGFydEl0ZW0pOiBPcmdhbml6ZXJDaGFydEl0ZW0ge1xuICBfc3ludGhldGljSXRlbXMuYWRkKGl0ZW0pO1xuICByZXR1cm4gaXRlbTtcbn1cblxuZnVuY3Rpb24gX2lzU3ludGhldGljKGl0ZW06IE9yZ2FuaXplckNoYXJ0SXRlbSk6IGJvb2xlYW4ge1xuICByZXR1cm4gX3N5bnRoZXRpY0l0ZW1zLmhhcyhpdGVtKTtcbn1cblxuZnVuY3Rpb24gX2NsZWFuU3ludGhldGljcyhjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zID0gY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZpbHRlcihnID0+ICFfaXNTeW50aGV0aWMoZykpO1xuICBjaGFydENvbmZpZy5pbmRpY2F0b3JzLml0ZW1zLmZvckVhY2goaW5kID0+IHtcbiAgICBpZiAoaW5kLmV4dHJhPy5zdGFja3M/Lml0ZW1zKSB7XG4gICAgICBpbmQuZXh0cmEuc3RhY2tzLml0ZW1zID0gaW5kLmV4dHJhLnN0YWNrcy5pdGVtcy5maWx0ZXIoKHM6IE9yZ2FuaXplckNoYXJ0SXRlbSkgPT4gIV9pc1N5bnRoZXRpYyhzKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gX2FwcGx5WFNlbGVjdGlvbihzZWxlY3RlZFg6IHN0cmluZywgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGlzR3JvdXBJdGVtID0gY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLnNvbWUoZyA9PiBnLmtleSA9PT0gc2VsZWN0ZWRYKTtcbiAgaWYgKGlzR3JvdXBJdGVtKSB7XG4gICAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZvckVhY2goZyA9PiB7IGcuc2VsZWN0ZWQgPSBnLmtleSA9PT0gc2VsZWN0ZWRYOyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYWxsU3RhY2tzOiBPcmdhbml6ZXJDaGFydEl0ZW1bXSA9IGNoYXJ0Q29uZmlnLmluZGljYXRvcnMuaXRlbXMuZmxhdE1hcChpID0+IGkuZXh0cmE/LnN0YWNrcz8uaXRlbXMgPz8gW10pO1xuICBjb25zdCBzdGFja0l0ZW0gPSBhbGxTdGFja3MuZmluZChzID0+IHMua2V5ID09PSBzZWxlY3RlZFgpO1xuICBpZiAoc3RhY2tJdGVtKSB7XG4gICAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZvckVhY2goZyA9PiB7IGcuc2VsZWN0ZWQgPSBmYWxzZTsgfSk7XG4gICAgY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLnB1c2goX21ha2VTeW50aGV0aWMoe1xuICAgICAga2V5OiBzdGFja0l0ZW0ua2V5LFxuICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICBtZW51OiBzdGFja0l0ZW0ubWVudSxcbiAgICAgIGpxdWVyeTogc3RhY2tJdGVtLmpxdWVyeVxuICAgICAgICA/IHsgdmFsdWU6ICgpID0+IHN0YWNrSXRlbS5qcXVlcnkhLnZhbHVlKCksIGJ1aWxkQWxpYXM6ICgpID0+IHN0YWNrSXRlbS5qcXVlcnkhLmJ1aWxkQWxpYXMoKSB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXBwbHlZU2VsZWN0aW9uKHNlbGVjdGVkWTogc3RyaW5nLCBzZWxlY3RlZFlBZ2dyZWdhdGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNvbnN0IGFjdHVhbEtleSA9IHJlc29sdmVZS2V5KHNlbGVjdGVkWSwgc2VsZWN0ZWRZQWdncmVnYXRlKTtcbiAgY2hhcnRDb25maWcuaW5kaWNhdG9ycy5pdGVtcy5mb3JFYWNoKGkgPT4geyBpLnNlbGVjdGVkID0gaS5rZXkgPT09IGFjdHVhbEtleTsgfSk7XG4gIGNoYXJ0Q29uZmlnLmluZGljYXRvcnMuaXRlbXMuZm9yRWFjaChpID0+IHtcbiAgICBpLmV4dHJhPy5zdGFja3M/Lml0ZW1zPy5mb3JFYWNoKChzOiBPcmdhbml6ZXJDaGFydEl0ZW0pID0+IHsgcy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9hcHBseUdyb3VwQnlTZWxlY3Rpb24oZWZmZWN0aXZlR3JvdXBCeTogc3RyaW5nIHwgdW5kZWZpbmVkLCBjaGFydENvbmZpZzogT3JnYW5pemVyQ2hhcnRDb25maWcpOiB2b2lkIHtcbiAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gY2hhcnRDb25maWcuaW5kaWNhdG9ycy5pdGVtcy5maW5kKGkgPT4gaS5zZWxlY3RlZCk7XG4gIGNvbnN0IHN0YWNrSXRlbXM6IE9yZ2FuaXplckNoYXJ0SXRlbVtdID0gYWN0aXZlSW5kaWNhdG9yPy5leHRyYT8uc3RhY2tzPy5pdGVtcyA/PyBbXTtcbiAgaWYgKGVmZmVjdGl2ZUdyb3VwQnkgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YWNrSXRlbXMuZm9yRWFjaChzID0+IHsgcy5zZWxlY3RlZCA9IGZhbHNlOyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaXNTdGFja0l0ZW0gPSBzdGFja0l0ZW1zLnNvbWUocyA9PiBzLmtleSA9PT0gZWZmZWN0aXZlR3JvdXBCeSk7XG4gIGlmIChpc1N0YWNrSXRlbSkge1xuICAgIHN0YWNrSXRlbXMuZm9yRWFjaChzID0+IHsgcy5zZWxlY3RlZCA9IHMua2V5ID09PSBlZmZlY3RpdmVHcm91cEJ5OyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZ3JvdXBJdGVtID0gY2hhcnRDb25maWcuZ3JvdXBzLml0ZW1zLmZpbmQoZyA9PiBnLmtleSA9PT0gZWZmZWN0aXZlR3JvdXBCeSk7XG4gIGlmIChncm91cEl0ZW0gJiYgYWN0aXZlSW5kaWNhdG9yKSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICAgIGlmICghYWN0aXZlSW5kaWNhdG9yLmV4dHJhKSB7XG4gICAgICBhY3RpdmVJbmRpY2F0b3IuZXh0cmEgPSB7IHN0YWNrczogeyBvcHRpb25hbDogdHJ1ZSwgaXRlbXM6IFtdIH0gfTtcbiAgICB9IGVsc2UgaWYgKCFhY3RpdmVJbmRpY2F0b3IuZXh0cmEuc3RhY2tzKSB7XG4gICAgICBhY3RpdmVJbmRpY2F0b3IuZXh0cmEuc3RhY2tzID0geyBvcHRpb25hbDogdHJ1ZSwgaXRlbXM6IFtdIH07XG4gICAgfVxuICAgIGFjdGl2ZUluZGljYXRvci5leHRyYS5zdGFja3MuaXRlbXMucHVzaChfbWFrZVN5bnRoZXRpYyh7XG4gICAgICBrZXk6IGdyb3VwSXRlbS5rZXksXG4gICAgICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgIG1lbnU6IGdyb3VwSXRlbS5tZW51LFxuICAgICAganF1ZXJ5OiBncm91cEl0ZW0uanF1ZXJ5ID8ge1xuICAgICAgICB2YWx1ZTogKCkgPT4gZ3JvdXBJdGVtLmpxdWVyeSEudmFsdWUoKSxcbiAgICAgICAgYnVpbGRBbGlhczogKCkgPT4gZ3JvdXBJdGVtLmpxdWVyeSEuYnVpbGRBbGlhcygpLFxuICAgICAgICBidWlsZE5hbWU6IChfaXRlbTogYW55LCB2YWx1ZTogc3RyaW5nKSA9PiBTdHJpbmcodmFsdWUpLFxuICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICB9KSk7XG4gIH0gZWxzZSB7XG4gICAgc3RhY2tJdGVtcy5mb3JFYWNoKHMgPT4geyBzLnNlbGVjdGVkID0gZmFsc2U7IH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9hcHBseVNsaWNlU2VsZWN0aW9uKHNlbGVjdGVkU2xpY2VzOiBzdHJpbmdbXSwgY2hhcnRDb25maWc6IE9yZ2FuaXplckNoYXJ0Q29uZmlnKTogdm9pZCB7XG4gIGNoYXJ0Q29uZmlnLmZpbHRlcnM/Lml0ZW1zPy5mb3JFYWNoKGYgPT4geyBmLnNlbGVjdGVkID0gc2VsZWN0ZWRTbGljZXMuaW5jbHVkZXMoZi5rZXkpOyB9KTtcbn1cblxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNsaWNlQ29uZmlnIH0gZnJvbSAnLi4vc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwubW9kZWwnO1xuaW1wb3J0IHsgVW5pdENvbmZpZyB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1jb3JlJztcblxuZXhwb3J0IHR5cGUgRmllbGRTdGF0ZSA9ICdyZWFkeScgfCAnbG9hZGluZycgfCAnZXJyb3InO1xuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3RmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgc3RhdGU/OiBGaWVsZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclhGaWVsZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZQWdncmVnYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZRmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBhZ2dyZWdhdGVzPzogT3JnYW5pemVyWUFnZ3JlZ2F0ZVtdO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyVmlld0dyb3VwIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3U2xpY2Uge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclRlbXBsYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgeEZpZWxkPzogc3RyaW5nO1xuICB5RmllbGQ/OiBzdHJpbmc7XG4gIHlBZ2dyZWdhdGU/OiBzdHJpbmc7XG4gIGdyb3VwQnk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ29uZmlnIHtcbiAgZmllbGRzPzogT3JnYW5pemVyVmlld0ZpZWxkW107XG4gIHhGaWVsZHM/OiBPcmdhbml6ZXJYRmllbGRbXTtcbiAgeUZpZWxkcz86IE9yZ2FuaXplcllGaWVsZFtdO1xuICBncm91cHM/OiBPcmdhbml6ZXJWaWV3R3JvdXBbXTtcbiAgc2xpY2VzPzogT3JnYW5pemVyVmlld1NsaWNlW107XG4gIHRlbXBsYXRlcz86IE9yZ2FuaXplclRlbXBsYXRlW107XG5cbiAgb25GZXRjaEZpZWxkRGF0YT86IChmaWVsZElkOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+W10+O1xuICBvbkZldGNoU2xpY2VEYXRhPzogKGZpbHRlcktleTogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPGFueVtdPiB8IFByb21pc2U8YW55W10+O1xuICBvblNsaWNlQ2xpY2s/OiAoKSA9PiB2b2lkO1xuXG4gIHNob3dFeHBvcnQ/OiBib29sZWFuO1xuICBvbkV4cG9ydD86ICgpID0+IHZvaWQ7XG4gIG9uRXhwb3J0VmlzdWFsPzogKCkgPT4gdm9pZDtcbiAgb25FeHBvcnREYXRhPzogKCkgPT4gdm9pZDtcblxuICBzaG93UHJlZmVyZW5jZXM/OiBib29sZWFuO1xuICBoYXNTYXZlZFByZWZlcmVuY2VzPzogYm9vbGVhbjtcbiAgb25QcmVmZXJlbmNlc0VkaXQ/OiAoKSA9PiB2b2lkO1xuICBvblByZWZlcmVuY2VzU2F2ZT86ICgpID0+IHZvaWQ7XG4gIG9uUHJlZmVyZW5jZXNDbGVhcj86ICgpID0+IHZvaWQ7XG5cbiAgc2hvd1Jlc2V0PzogYm9vbGVhbjtcbiAgbWVudVBvc2l0aW9uPzogJ2Fib3ZlJyB8ICdiZWxvdyc7XG4gIG1lbnVDbGFzcz86IHN0cmluZztcbiAgYnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIGJ1dHRvbkljb24/OiBzdHJpbmc7XG4gIHNob3dCdXR0b25JY29uPzogYm9vbGVhbjtcblxuICBzd2l0Y2hWaWV3Pzoge1xuICAgIGN1cnJlbnRWaWV3OiAnY2hhcnQnIHwgJ3RhYmxlJztcbiAgICBvblN3aXRjaDogKG5ld1ZpZXc6ICdjaGFydCcgfCAndGFibGUnKSA9PiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclNsaWNlU3RhdGUge1xuICBzbGljZUNvbmZpZ3M6IFNsaWNlQ29uZmlnPGFueT5bXTtcbiAgdGFza3M6IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclN0YXRlIHtcbiAgdmlld01vZGU/OiAnY2hhcnQnIHwgJ3RhYmxlJztcblxuICB2aXNpYmxlRmllbGRzPzogc3RyaW5nW107XG5cbiAgc2VsZWN0ZWRYPzogc3RyaW5nO1xuICBzZWxlY3RlZFk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkWUFnZ3JlZ2F0ZT86IHN0cmluZztcblxuICBzZWxlY3RlZEdyb3VwQnk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkU2xpY2VzPzogc3RyaW5nW107XG4gIHNlbGVjdGVkVGVtcGxhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQnV0dG9uRXZlbnQge1xuICB0eXBlOiAnZmllbGRUb2dnbGVkJyB8ICd4U2VsZWN0ZWQnIHwgJ3lTZWxlY3RlZCcgfCAnZ3JvdXBCeVNlbGVjdGVkJyB8ICd0ZW1wbGF0ZVNlbGVjdGVkJyB8ICdzbGljZVNlbGVjdGVkJyB8ICdyZXNldCcgfCAndmlld1N3aXRjaGVkJztcbiAgc3RhdGU6IE9yZ2FuaXplclN0YXRlO1xuICBzb3VyY2U/OiAndXNlcicgfCAnYXBpJztcbiAgcmVzb2x2ZWRZVW5pdD86IHN0cmluZyB8IFVuaXRDb25maWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyVW5pZmllZFN0YXRlIHtcbiAgdmlld01vZGU6ICdjaGFydCcgfCAndGFibGUnO1xuICBkaW1lbnNpb24/OiBzdHJpbmc7XG4gIG1ldHJpYz86IHN0cmluZztcbiAgbWV0cmljQWdncmVnYXRlPzogc3RyaW5nO1xuICBicmVha2Rvd24/OiBzdHJpbmc7XG4gIGZpbHRlcnM/OiBzdHJpbmdbXTtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9tb2RlbHMvb3JnYW5pemVyLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNsaWNlQ29uZmlnIH0gZnJvbSAnLi4vc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwubW9kZWwnO1xuaW1wb3J0IHsgVW5pdENvbmZpZyB9IGZyb20gJ0BvbmV0ZW1lL2pxdWVyeS1jb3JlJztcblxuZXhwb3J0IHR5cGUgRmllbGRTdGF0ZSA9ICdyZWFkeScgfCAnbG9hZGluZycgfCAnZXJyb3InO1xuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3RmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgc3RhdGU/OiBGaWVsZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclhGaWVsZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZQWdncmVnYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJZRmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBhZ2dyZWdhdGVzPzogT3JnYW5pemVyWUFnZ3JlZ2F0ZVtdO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyVmlld0dyb3VwIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbml6ZXJWaWV3U2xpY2Uge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclRlbXBsYXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgeEZpZWxkPzogc3RyaW5nO1xuICB5RmllbGQ/OiBzdHJpbmc7XG4gIHlBZ2dyZWdhdGU/OiBzdHJpbmc7XG4gIGdyb3VwQnk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkU2xpY2VzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQ29uZmlnIHtcbiAgZmllbGRzPzogT3JnYW5pemVyVmlld0ZpZWxkW107XG4gIHhGaWVsZHM/OiBPcmdhbml6ZXJYRmllbGRbXTtcbiAgeUZpZWxkcz86IE9yZ2FuaXplcllGaWVsZFtdO1xuICBncm91cHM/OiBPcmdhbml6ZXJWaWV3R3JvdXBbXTtcbiAgc2xpY2VzPzogT3JnYW5pemVyVmlld1NsaWNlW107XG4gIHRlbXBsYXRlcz86IE9yZ2FuaXplclRlbXBsYXRlW107XG5cbiAgb25GZXRjaEZpZWxkRGF0YT86IChmaWVsZElkOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+W10+O1xuICBvbkZldGNoU2xpY2VEYXRhPzogKGZpbHRlcktleTogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPGFueVtdPiB8IFByb21pc2U8YW55W10+O1xuICBvblNsaWNlQ2xpY2s/OiAoKSA9PiB2b2lkO1xuXG4gIHNob3dFeHBvcnQ/OiBib29sZWFuO1xuICBvbkV4cG9ydD86ICgpID0+IHZvaWQ7XG4gIG9uRXhwb3J0VmlzdWFsPzogKCkgPT4gdm9pZDtcbiAgb25FeHBvcnREYXRhPzogKCkgPT4gdm9pZDtcblxuICBzaG93UHJlZmVyZW5jZXM/OiBib29sZWFuO1xuICBoYXNTYXZlZFByZWZlcmVuY2VzPzogYm9vbGVhbjtcbiAgb25QcmVmZXJlbmNlc0VkaXQ/OiAoKSA9PiB2b2lkO1xuICBvblByZWZlcmVuY2VzU2F2ZT86ICgpID0+IHZvaWQ7XG4gIG9uUHJlZmVyZW5jZXNDbGVhcj86ICgpID0+IHZvaWQ7XG5cbiAgc2hvd1Jlc2V0PzogYm9vbGVhbjtcbiAgbWVudVBvc2l0aW9uPzogJ2Fib3ZlJyB8ICdiZWxvdyc7XG4gIG1lbnVDbGFzcz86IHN0cmluZztcbiAgYnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIGJ1dHRvbkljb24/OiBzdHJpbmc7XG4gIHNob3dCdXR0b25JY29uPzogYm9vbGVhbjtcblxuICBzd2l0Y2hWaWV3Pzoge1xuICAgIGN1cnJlbnRWaWV3OiAnY2hhcnQnIHwgJ3RhYmxlJztcbiAgICBvblN3aXRjaDogKG5ld1ZpZXc6ICdjaGFydCcgfCAndGFibGUnKSA9PiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclNsaWNlU3RhdGUge1xuICBzbGljZUNvbmZpZ3M6IFNsaWNlQ29uZmlnPGFueT5bXTtcbiAgdGFza3M6IGFueVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXplclN0YXRlIHtcbiAgdmlld01vZGU/OiAnY2hhcnQnIHwgJ3RhYmxlJztcblxuICB2aXNpYmxlRmllbGRzPzogc3RyaW5nW107XG5cbiAgc2VsZWN0ZWRYPzogc3RyaW5nO1xuICBzZWxlY3RlZFk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkWUFnZ3JlZ2F0ZT86IHN0cmluZztcblxuICBzZWxlY3RlZEdyb3VwQnk/OiBzdHJpbmc7XG4gIHNlbGVjdGVkU2xpY2VzPzogc3RyaW5nW107XG4gIHNlbGVjdGVkVGVtcGxhdGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyQnV0dG9uRXZlbnQge1xuICB0eXBlOiAnZmllbGRUb2dnbGVkJyB8ICd4U2VsZWN0ZWQnIHwgJ3lTZWxlY3RlZCcgfCAnZ3JvdXBCeVNlbGVjdGVkJyB8ICd0ZW1wbGF0ZVNlbGVjdGVkJyB8ICdzbGljZVNlbGVjdGVkJyB8ICdyZXNldCcgfCAndmlld1N3aXRjaGVkJztcbiAgc3RhdGU6IE9yZ2FuaXplclN0YXRlO1xuICBzb3VyY2U/OiAndXNlcicgfCAnYXBpJztcbiAgcmVzb2x2ZWRZVW5pdD86IHN0cmluZyB8IFVuaXRDb25maWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pemVyVW5pZmllZFN0YXRlIHtcbiAgdmlld01vZGU6ICdjaGFydCcgfCAndGFibGUnO1xuICBkaW1lbnNpb24/OiBzdHJpbmc7XG4gIG1ldHJpYz86IHN0cmluZztcbiAgbWV0cmljQWdncmVnYXRlPzogc3RyaW5nO1xuICBicmVha2Rvd24/OiBzdHJpbmc7XG4gIGZpbHRlcnM/OiBzdHJpbmdbXTtcbn1cbiJdfQ==