bways-report 0.1.5 → 0.1.7

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 (107) hide show
  1. package/README.md +291 -422
  2. package/esm2022/lib/core/config/bways-report-config.mjs +83 -0
  3. package/esm2022/lib/core/index.mjs +2 -1
  4. package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
  5. package/esm2022/lib/core/services/index.mjs +2 -1
  6. package/esm2022/lib/core/services/report-data-discovery.service.mjs +138 -0
  7. package/esm2022/lib/core/services/report-session-context.service.mjs +11 -7
  8. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  9. package/esm2022/lib/core/utils/data-normalization.util.mjs +87 -1
  10. package/esm2022/lib/core/utils/identifier-humanizer.mjs +15 -4
  11. package/esm2022/lib/core/utils/report-parameter.util.mjs +119 -3
  12. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +69 -0
  13. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +98 -0
  14. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +57 -0
  15. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +85 -0
  16. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +163 -0
  17. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +12 -0
  18. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +20 -30
  19. package/esm2022/lib/data-access/adapters/index.mjs +8 -1
  20. package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
  21. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +12 -2
  22. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +71 -13
  23. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +407 -0
  24. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +403 -222
  25. package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +41 -34
  26. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +142 -20
  27. package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
  28. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +154 -5
  29. package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +11 -5
  30. package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
  31. package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +15 -3
  32. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +112 -39
  33. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +204 -10
  34. package/esm2022/lib/features/designer/designer.component.mjs +44 -3
  35. package/esm2022/lib/features/designer/services/designer-state.service.mjs +70 -3
  36. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +207 -0
  37. package/esm2022/lib/features/embed/bways-report-menu.component.mjs +433 -0
  38. package/esm2022/lib/features/embed/bways-report-page.component.mjs +204 -0
  39. package/esm2022/lib/features/embed/index.mjs +5 -0
  40. package/esm2022/lib/features/embed/inject-report-menu.mjs +99 -0
  41. package/esm2022/lib/features/index.mjs +2 -1
  42. package/esm2022/lib/features/persistence/services/report-store.service.mjs +43 -5
  43. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +4 -4
  44. package/esm2022/lib/features/routing/index.mjs +2 -2
  45. package/esm2022/lib/features/routing/models/report-route.models.mjs +1 -1
  46. package/esm2022/lib/features/routing/report-routes.mjs +42 -1
  47. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +6 -8
  48. package/esm2022/lib/features/routing/services/report-menu.service.mjs +14 -4
  49. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +22 -3
  50. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +121 -15
  51. package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +28 -5
  52. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +113 -20
  53. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +8 -1
  54. package/esm2022/lib/primitives/components/index.mjs +2 -1
  55. package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +9 -3
  56. package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +386 -0
  57. package/esm2022/lib/provide-reporting.mjs +156 -11
  58. package/fesm2022/bways-report.mjs +5703 -1766
  59. package/fesm2022/bways-report.mjs.map +1 -1
  60. package/lib/core/config/bways-report-config.d.ts +161 -0
  61. package/lib/core/index.d.ts +1 -0
  62. package/lib/core/models/report-definition.model.d.ts +16 -0
  63. package/lib/core/services/index.d.ts +1 -0
  64. package/lib/core/services/report-data-discovery.service.d.ts +38 -0
  65. package/lib/core/services/report-session-context.service.d.ts +1 -0
  66. package/lib/core/tokens/reporting-config.token.d.ts +18 -0
  67. package/lib/core/utils/data-normalization.util.d.ts +10 -0
  68. package/lib/core/utils/report-parameter.util.d.ts +18 -1
  69. package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +13 -0
  70. package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +14 -0
  71. package/lib/data-access/adapters/endpoint-masterdata.adapter.d.ts +11 -0
  72. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +15 -0
  73. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +21 -0
  74. package/lib/data-access/adapters/endpoint-tokens.d.ts +21 -0
  75. package/lib/data-access/adapters/http-lookup.adapter.d.ts +2 -1
  76. package/lib/data-access/adapters/index.d.ts +7 -0
  77. package/lib/data-access/contracts/lookup.contract.d.ts +2 -2
  78. package/lib/features/designer/components/component-palette/component-palette.component.d.ts +1 -0
  79. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +6 -2
  80. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +34 -0
  81. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +6 -0
  82. package/lib/features/designer/components/property-editor/property-editor-action.component.d.ts +3 -0
  83. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +12 -2
  84. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +41 -1
  85. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +19 -0
  86. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +13 -1
  87. package/lib/features/designer/designer.component.d.ts +4 -0
  88. package/lib/features/designer/services/designer-state.service.d.ts +12 -1
  89. package/lib/features/embed/bways-report-builder.component.d.ts +48 -0
  90. package/lib/features/embed/bways-report-menu.component.d.ts +40 -0
  91. package/lib/features/embed/bways-report-page.component.d.ts +61 -0
  92. package/lib/features/embed/index.d.ts +4 -0
  93. package/lib/features/embed/inject-report-menu.d.ts +44 -0
  94. package/lib/features/index.d.ts +1 -0
  95. package/lib/features/persistence/services/report-store.service.d.ts +5 -0
  96. package/lib/features/routing/index.d.ts +1 -1
  97. package/lib/features/routing/models/report-route.models.d.ts +3 -0
  98. package/lib/features/routing/report-routes.d.ts +40 -0
  99. package/lib/features/routing/resolvers/report.resolver.d.ts +1 -1
  100. package/lib/features/runtime/dynamic-renderer.component.d.ts +1 -0
  101. package/lib/features/runtime/report-grid-bridge.component.d.ts +8 -59
  102. package/lib/primitives/components/button/rpt-button.component.d.ts +3 -0
  103. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +18 -2
  104. package/lib/primitives/components/index.d.ts +2 -0
  105. package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +89 -0
  106. package/lib/provide-reporting.d.ts +28 -6
  107. package/package.json +1 -1
@@ -1,21 +1,22 @@
1
1
  import { inject, Injectable } from '@angular/core';
2
2
  import { HttpClient, HttpHeaders } from '@angular/common/http';
3
3
  import { of, throwError } from 'rxjs';
4
- import { catchError, map, tap } from 'rxjs/operators';
4
+ import { catchError, finalize, map, shareReplay, tap } from 'rxjs/operators';
5
5
  import { ReportLookupAdapter, } from '../contracts/lookup.contract';
6
6
  import { REPORTING_CONFIG } from '../../core/tokens/reporting-config.token';
7
7
  import { ReportSessionContextService } from '../../core/services/report-session-context.service';
8
- import { extractRowArray } from '../../core/utils/data-normalization.util';
8
+ import { extractLookupOptionItem, extractRowArray } from '../../core/utils/data-normalization.util';
9
9
  import * as i0 from "@angular/core";
10
10
  /**
11
11
  * Built-in HTTP adapter for fetching dropdown options from backend database tables and SPs.
12
- * Includes in-memory caching with TTL and rich fallback mock data for testing.
12
+ * Includes in-memory caching with TTL, in-flight request deduplication, and fallback mock data.
13
13
  */
14
14
  export class HttpReportLookupAdapter extends ReportLookupAdapter {
15
15
  http = inject(HttpClient, { optional: true });
16
16
  config = inject(REPORTING_CONFIG, { optional: true });
17
17
  sessionService = inject(ReportSessionContextService, { optional: true });
18
18
  cache = new Map();
19
+ inFlight = new Map();
19
20
  mockDataStore = {
20
21
  Customers: [
21
22
  { customerId: 101, customerName: 'Acme Corporation', branchId: 1, isActive: true },
@@ -62,6 +63,10 @@ export class HttpReportLookupAdapter extends ReportLookupAdapter {
62
63
  if (cached && cached.expiresAt > now) {
63
64
  return of(cached.data);
64
65
  }
66
+ const running = this.inFlight.get(cacheKey);
67
+ if (running) {
68
+ return running;
69
+ }
65
70
  const baseUrl = this.config?.apiBaseUrl;
66
71
  if (baseUrl && this.http) {
67
72
  const session = this.sessionService?.sessionContext() ?? {};
@@ -72,30 +77,27 @@ export class HttpReportLookupAdapter extends ReportLookupAdapter {
72
77
  if (session['branchId'] !== undefined && session['branchId'] !== null) {
73
78
  headers = headers.set('X-Branch-Id', String(session['branchId']));
74
79
  }
75
- return this.http.post(`${baseUrl}/lookup`, request, { headers }).pipe(map((response) => {
80
+ const obs$ = this.http.post(`${baseUrl}/lookup`, request, { headers }).pipe(map((response) => {
76
81
  const rawItems = extractRowArray(response);
77
- return rawItems.map((r) => {
78
- if (r && typeof r === 'object' && 'value' in r) {
79
- return r;
80
- }
81
- const val = r?.[request.valueField] ?? r?.id ?? r?.code ?? String(r ?? '');
82
- const lbl = r?.[request.displayField] ?? r?.name ?? r?.title ?? String(val);
83
- return { value: val, label: lbl, raw: r };
84
- });
82
+ return rawItems.map((r) => extractLookupOptionItem(r, request.valueField, request.displayField));
85
83
  }), tap((items) => {
86
84
  // Never cache empty results: parameters may simply not have been filled yet.
87
85
  if (items.length > 0)
88
- this.setCache(cacheKey, items);
86
+ this.setCache(cacheKey, items, 600);
89
87
  }), catchError((err) => {
90
88
  const msg = err?.error?.message || err?.message || 'Lookup request failed';
91
89
  return throwError(() => new Error(Array.isArray(msg) ? msg.join(', ') : msg));
92
- }));
90
+ }), finalize(() => {
91
+ this.inFlight.delete(cacheKey);
92
+ }), shareReplay({ bufferSize: 1, refCount: true }));
93
+ this.inFlight.set(cacheKey, obs$);
94
+ return obs$;
93
95
  }
94
96
  const fallback = this.resolveMockOptions(request);
95
- this.setCache(cacheKey, fallback);
97
+ this.setCache(cacheKey, fallback, 600);
96
98
  return of(fallback);
97
99
  }
98
- setCache(key, data, ttlSeconds = 300) {
100
+ setCache(key, data, ttlSeconds = 600) {
99
101
  this.cache.set(key, {
100
102
  expiresAt: Date.now() + ttlSeconds * 1000,
101
103
  data,
@@ -107,19 +109,7 @@ export class HttpReportLookupAdapter extends ReportLookupAdapter {
107
109
  resolveMockOptions(req) {
108
110
  const entity = req.entityName || '';
109
111
  const records = this.mockDataStore[entity] ?? [];
110
- const valKey = req.valueField;
111
- const labelKey = req.displayField;
112
- let filteredRecords = records;
113
- const branchParam = req.parameters?.['@BranchId'] ?? req.parameters?.['branchId'];
114
- if (branchParam !== undefined && branchParam !== null && branchParam !== '') {
115
- const matchNum = Number(branchParam);
116
- filteredRecords = records.filter((r) => r['branchId'] === undefined || r['branchId'] === matchNum || r['branch'] === String(branchParam));
117
- }
118
- return filteredRecords.map((r) => ({
119
- value: r[valKey] ?? String(r['id'] ?? r['code'] ?? ''),
120
- label: r[labelKey] ?? String(r['name'] ?? r['title'] ?? ''),
121
- raw: r,
122
- }));
112
+ return records.map((r) => extractLookupOptionItem(r, req.valueField, req.displayField));
123
113
  }
124
114
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportLookupAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
125
115
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HttpReportLookupAdapter });
@@ -129,4 +119,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
129
119
  }] });
130
120
  /** Convenience alias */
131
121
  export const HttpLookupAdapter = HttpReportLookupAdapter;
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1sb29rdXAuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2h0dHAtbG9va3VwLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBR0wsbUJBQW1CLEdBQ3BCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOztBQU8zRTs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsbUJBQW1CO0lBQzdDLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELGNBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUV6RSxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7SUFFdEMsYUFBYSxHQUFzRDtRQUNsRixTQUFTLEVBQUU7WUFDVCxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNuRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUN0RixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNuRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtTQUNuRjtRQUNELFFBQVEsRUFBRTtZQUNSLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtZQUNuRixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7WUFDdkUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFO1lBQzNFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtTQUNqRjtRQUNELFFBQVEsRUFBRTtZQUNSLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1lBQzVGLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1lBQ3ZGLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQy9GLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7U0FDcEc7UUFDRCxjQUFjLEVBQUU7WUFDZCxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUU7WUFDdkQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtZQUM3QyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFO1NBQzlDO1FBQ0QsbUJBQW1CLEVBQUU7WUFDbkIsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDckUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7WUFDeEUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDdEUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7U0FDeEU7UUFDRCxtQkFBbUIsRUFBRTtZQUNuQixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ25DLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ2hDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1NBQzVCO0tBQ0YsQ0FBQztJQUVGLFlBQVksQ0FBQyxPQUEyQjtRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXZCLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDckMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQztRQUN4QyxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUN4RSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3RFLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBVSxHQUFHLE9BQU8sU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM1RSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDZixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29CQUM3QixJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUMvQyxPQUFPLENBQXFCLENBQUM7b0JBQy9CLENBQUM7b0JBQ0QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUMzRSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ1osNkVBQTZFO2dCQUM3RSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakIsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQztnQkFDM0UsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoRixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQVcsRUFBRSxJQUF3QixFQUFFLFVBQVUsR0FBRyxHQUFHO1FBQ3RFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNsQixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFVBQVUsR0FBRyxJQUFJO1lBQ3pDLElBQUk7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsR0FBdUI7UUFDOUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2pLLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxHQUF1QjtRQUNoRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQzlCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7UUFFbEMsSUFBSSxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQzlCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEYsSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLFdBQVcsS0FBSyxJQUFJLElBQUksV0FBVyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzVFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyQyxlQUFlLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUN4RyxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqQyxLQUFLLEVBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBcUIsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0UsS0FBSyxFQUFHLENBQUMsQ0FBQyxRQUFRLENBQVksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkUsR0FBRyxFQUFFLENBQUM7U0FDUCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7d0dBOUhVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVOztBQWtJWCx3QkFBd0I7QUFDeEIsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgTG9va3VwT3B0aW9uSXRlbSxcbiAgTG9va3VwUXVlcnlSZXF1ZXN0LFxuICBSZXBvcnRMb29rdXBBZGFwdGVyLFxufSBmcm9tICcuLi9jb250cmFjdHMvbG9va3VwLmNvbnRyYWN0JztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IGV4dHJhY3RSb3dBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuXG5pbnRlcmZhY2UgQ2FjaGVFbnRyeSB7XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICBkYXRhOiBMb29rdXBPcHRpb25JdGVtW107XG59XG5cbi8qKlxuICogQnVpbHQtaW4gSFRUUCBhZGFwdGVyIGZvciBmZXRjaGluZyBkcm9wZG93biBvcHRpb25zIGZyb20gYmFja2VuZCBkYXRhYmFzZSB0YWJsZXMgYW5kIFNQcy5cbiAqIEluY2x1ZGVzIGluLW1lbW9yeSBjYWNoaW5nIHdpdGggVFRMIGFuZCByaWNoIGZhbGxiYWNrIG1vY2sgZGF0YSBmb3IgdGVzdGluZy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyIGV4dGVuZHMgUmVwb3J0TG9va3VwQWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50LCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENhY2hlRW50cnk+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb2NrRGF0YVN0b3JlOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTx7IFtrZXk6IHN0cmluZ106IHVua25vd24gfT4+ID0ge1xuICAgIEN1c3RvbWVyczogW1xuICAgICAgeyBjdXN0b21lcklkOiAxMDEsIGN1c3RvbWVyTmFtZTogJ0FjbWUgQ29ycG9yYXRpb24nLCBicmFuY2hJZDogMSwgaXNBY3RpdmU6IHRydWUgfSxcbiAgICAgIHsgY3VzdG9tZXJJZDogMTAyLCBjdXN0b21lck5hbWU6ICdHbG9iZXggSW5kdXN0cmllcycsIGJyYW5jaElkOiAyLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgICAgeyBjdXN0b21lcklkOiAxMDMsIGN1c3RvbWVyTmFtZTogJ0luaXRlY2ggU29mdHdhcmUnLCBicmFuY2hJZDogMSwgaXNBY3RpdmU6IHRydWUgfSxcbiAgICAgIHsgY3VzdG9tZXJJZDogMTA0LCBjdXN0b21lck5hbWU6ICdVbWJyZWxsYSBDb3Jwb3JhdGlvbicsIGJyYW5jaElkOiAzLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgICAgeyBjdXN0b21lcklkOiAxMDUsIGN1c3RvbWVyTmFtZTogJ1dheW5lIEVudGVycHJpc2VzJywgYnJhbmNoSWQ6IDIsIGlzQWN0aXZlOiB0cnVlIH0sXG4gICAgICB7IGN1c3RvbWVySWQ6IDEwNiwgY3VzdG9tZXJOYW1lOiAnU3RhcmsgSW5kdXN0cmllcycsIGJyYW5jaElkOiAxLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgIF0sXG4gICAgQnJhbmNoZXM6IFtcbiAgICAgIHsgYnJhbmNoSWQ6IDEsIGJyYW5jaE5hbWU6ICdOb3J0aCBBbWVyaWNhIEhRIChOZXcgWW9yayknLCByZWdpb246ICdOb3J0aCBBbWVyaWNhJyB9LFxuICAgICAgeyBicmFuY2hJZDogMiwgYnJhbmNoTmFtZTogJ0VNRUEgRGl2aXNpb24gKExvbmRvbiknLCByZWdpb246ICdFdXJvcGUnIH0sXG4gICAgICB7IGJyYW5jaElkOiAzLCBicmFuY2hOYW1lOiAnQVBBQyBIdWIgKFNpbmdhcG9yZSknLCByZWdpb246ICdBc2lhIFBhY2lmaWMnIH0sXG4gICAgICB7IGJyYW5jaElkOiA0LCBicmFuY2hOYW1lOiAnTEFUQU0gT2ZmaWNlIChTw6NvIFBhdWxvKScsIHJlZ2lvbjogJ0xhdGluIEFtZXJpY2EnIH0sXG4gICAgXSxcbiAgICBQcm9kdWN0czogW1xuICAgICAgeyBwcm9kdWN0SWQ6IDEsIHByb2R1Y3ROYW1lOiAnRW50ZXJwcmlzZSBFUlAgU3VpdGUnLCBjYXRlZ29yeTogJ1NvZnR3YXJlJywgdW5pdFByaWNlOiAyNDAwIH0sXG4gICAgICB7IHByb2R1Y3RJZDogMiwgcHJvZHVjdE5hbWU6ICdDbG91ZCBBbmFseXRpY3MgUHJvJywgY2F0ZWdvcnk6ICdTYWFTJywgdW5pdFByaWNlOiAxMjAwIH0sXG4gICAgICB7IHByb2R1Y3RJZDogMywgcHJvZHVjdE5hbWU6ICdTZWN1cml0eSBTaGllbGQgRW5kcG9pbnQnLCBjYXRlZ29yeTogJ1NlY3VyaXR5JywgdW5pdFByaWNlOiA4NTAgfSxcbiAgICAgIHsgcHJvZHVjdElkOiA0LCBwcm9kdWN0TmFtZTogJ0RlZGljYXRlZCBBUEkgR2F0ZXdheScsIGNhdGVnb3J5OiAnSW5mcmFzdHJ1Y3R1cmUnLCB1bml0UHJpY2U6IDMxMDAgfSxcbiAgICBdLFxuICAgIFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7IGNvZGU6ICdCQU5LX1RSQU5TRkVSJywgdGl0bGU6ICdEaXJlY3QgQmFuayBXaXJlJyB9LFxuICAgICAgeyBjb2RlOiAnQ1JFRElUX0NBUkQnLCB0aXRsZTogJ0NvcnBvcmF0ZSBDcmVkaXQgQ2FyZCcgfSxcbiAgICAgIHsgY29kZTogJ1BBWVBBTCcsIHRpdGxlOiAnUGF5UGFsIENvcnBvcmF0ZScgfSxcbiAgICAgIHsgY29kZTogJ05FVF8zMCcsIHRpdGxlOiAnTmV0IDMwIEludm9pY2luZycgfSxcbiAgICBdLFxuICAgIHVzcF9HZXRDdXN0b21lckxpc3Q6IFtcbiAgICAgIHsgaWQ6IDEwMSwgbmFtZTogJ0FjbWUgQ29ycG9yYXRpb24gKFNQKScsIGJyYW5jaElkOiAxLCBicmFuY2g6ICdOQScgfSxcbiAgICAgIHsgaWQ6IDEwMiwgbmFtZTogJ0dsb2JleCBJbmR1c3RyaWVzIChTUCknLCBicmFuY2hJZDogMiwgYnJhbmNoOiAnRU1FQScgfSxcbiAgICAgIHsgaWQ6IDEwNSwgbmFtZTogJ1dheW5lIEVudGVycHJpc2VzIChTUCknLCBicmFuY2hJZDogMSwgYnJhbmNoOiAnTkEnIH0sXG4gICAgICB7IGlkOiAxMDYsIG5hbWU6ICdTdGFyayBJbmR1c3RyaWVzIChTUCknLCBicmFuY2hJZDogMywgYnJhbmNoOiAnQVBBQycgfSxcbiAgICBdLFxuICAgIHVzcF9HZXRCcmFuY2hMb29rdXA6IFtcbiAgICAgIHsgaWQ6IDEsIG5hbWU6ICdOb3J0aCBBbWVyaWNhIEhRJyB9LFxuICAgICAgeyBpZDogMiwgbmFtZTogJ0VNRUEgRGl2aXNpb24nIH0sXG4gICAgICB7IGlkOiAzLCBuYW1lOiAnQVBBQyBIdWInIH0sXG4gICAgXSxcbiAgfTtcblxuICBmZXRjaE9wdGlvbnMocmVxdWVzdDogTG9va3VwUXVlcnlSZXF1ZXN0KTogT2JzZXJ2YWJsZTxMb29rdXBPcHRpb25JdGVtW10+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShyZXF1ZXN0KTtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGlmIChjYWNoZWQgJiYgY2FjaGVkLmV4cGlyZXNBdCA+IG5vdykge1xuICAgICAgcmV0dXJuIG9mKGNhY2hlZC5kYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWc/LmFwaUJhc2VVcmw7XG4gICAgaWYgKGJhc2VVcmwgJiYgdGhpcy5odHRwKSB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uc2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcbiAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgICBpZiAoc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gbnVsbCkge1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQ29tcGFueS1JZCcsIFN0cmluZyhzZXNzaW9uWydjb21wYW55SWQnXSkpO1xuICAgICAgfVxuICAgICAgaWYgKHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydicmFuY2hJZCddICE9PSBudWxsKSB7XG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1CcmFuY2gtSWQnLCBTdHJpbmcoc2Vzc2lvblsnYnJhbmNoSWQnXSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dW5rbm93bj4oYCR7YmFzZVVybH0vbG9va3VwYCwgcmVxdWVzdCwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zdCByYXdJdGVtcyA9IGV4dHJhY3RSb3dBcnJheShyZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIHJhd0l0ZW1zLm1hcCgocjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAociAmJiB0eXBlb2YgciA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiByKSB7XG4gICAgICAgICAgICAgIHJldHVybiByIGFzIExvb2t1cE9wdGlvbkl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWwgPSByPy5bcmVxdWVzdC52YWx1ZUZpZWxkXSA/PyByPy5pZCA/PyByPy5jb2RlID8/IFN0cmluZyhyID8/ICcnKTtcbiAgICAgICAgICAgIGNvbnN0IGxibCA9IHI/LltyZXF1ZXN0LmRpc3BsYXlGaWVsZF0gPz8gcj8ubmFtZSA/PyByPy50aXRsZSA/PyBTdHJpbmcodmFsKTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB2YWwsIGxhYmVsOiBsYmwsIHJhdzogciB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKChpdGVtcykgPT4ge1xuICAgICAgICAgIC8vIE5ldmVyIGNhY2hlIGVtcHR5IHJlc3VsdHM6IHBhcmFtZXRlcnMgbWF5IHNpbXBseSBub3QgaGF2ZSBiZWVuIGZpbGxlZCB5ZXQuXG4gICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHRoaXMuc2V0Q2FjaGUoY2FjaGVLZXksIGl0ZW1zKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdMb29rdXAgcmVxdWVzdCBmYWlsZWQnO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihBcnJheS5pc0FycmF5KG1zZykgPyBtc2cuam9pbignLCAnKSA6IG1zZykpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmYWxsYmFjayA9IHRoaXMucmVzb2x2ZU1vY2tPcHRpb25zKHJlcXVlc3QpO1xuICAgIHRoaXMuc2V0Q2FjaGUoY2FjaGVLZXksIGZhbGxiYWNrKTtcbiAgICByZXR1cm4gb2YoZmFsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYWNoZShrZXk6IHN0cmluZywgZGF0YTogTG9va3VwT3B0aW9uSXRlbVtdLCB0dGxTZWNvbmRzID0gMzAwKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB7XG4gICAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyB0dGxTZWNvbmRzICogMTAwMCxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2FjaGVLZXkocmVxOiBMb29rdXBRdWVyeVJlcXVlc3QpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtyZXEuc291cmNlVHlwZX06JHtyZXEuZW50aXR5TmFtZX06JHtyZXEudmFsdWVGaWVsZH06JHtyZXEuZGlzcGxheUZpZWxkfToke0pTT04uc3RyaW5naWZ5KHJlcS5maWx0ZXIgPz8ge30pfToke0pTT04uc3RyaW5naWZ5KHJlcS5wYXJhbWV0ZXJzID8/IHt9KX1gO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlTW9ja09wdGlvbnMocmVxOiBMb29rdXBRdWVyeVJlcXVlc3QpOiBMb29rdXBPcHRpb25JdGVtW10ge1xuICAgIGNvbnN0IGVudGl0eSA9IHJlcS5lbnRpdHlOYW1lIHx8ICcnO1xuICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLm1vY2tEYXRhU3RvcmVbZW50aXR5XSA/PyBbXTtcbiAgICBjb25zdCB2YWxLZXkgPSByZXEudmFsdWVGaWVsZDtcbiAgICBjb25zdCBsYWJlbEtleSA9IHJlcS5kaXNwbGF5RmllbGQ7XG5cbiAgICBsZXQgZmlsdGVyZWRSZWNvcmRzID0gcmVjb3JkcztcbiAgICBjb25zdCBicmFuY2hQYXJhbSA9IHJlcS5wYXJhbWV0ZXJzPy5bJ0BCcmFuY2hJZCddID8/IHJlcS5wYXJhbWV0ZXJzPy5bJ2JyYW5jaElkJ107XG4gICAgaWYgKGJyYW5jaFBhcmFtICE9PSB1bmRlZmluZWQgJiYgYnJhbmNoUGFyYW0gIT09IG51bGwgJiYgYnJhbmNoUGFyYW0gIT09ICcnKSB7XG4gICAgICBjb25zdCBtYXRjaE51bSA9IE51bWJlcihicmFuY2hQYXJhbSk7XG4gICAgICBmaWx0ZXJlZFJlY29yZHMgPSByZWNvcmRzLmZpbHRlcihcbiAgICAgICAgKHIpID0+IHJbJ2JyYW5jaElkJ10gPT09IHVuZGVmaW5lZCB8fCByWydicmFuY2hJZCddID09PSBtYXRjaE51bSB8fCByWydicmFuY2gnXSA9PT0gU3RyaW5nKGJyYW5jaFBhcmFtKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyZWRSZWNvcmRzLm1hcCgocikgPT4gKHtcbiAgICAgIHZhbHVlOiAoclt2YWxLZXldIGFzIHN0cmluZyB8IG51bWJlcikgPz8gU3RyaW5nKHJbJ2lkJ10gPz8gclsnY29kZSddID8/ICcnKSxcbiAgICAgIGxhYmVsOiAocltsYWJlbEtleV0gYXMgc3RyaW5nKSA/PyBTdHJpbmcoclsnbmFtZSddID8/IHJbJ3RpdGxlJ10gPz8gJycpLFxuICAgICAgcmF3OiByLFxuICAgIH0pKTtcbiAgfVxufVxuXG4vKiogQ29udmVuaWVuY2UgYWxpYXMgKi9cbmV4cG9ydCBjb25zdCBIdHRwTG9va3VwQWRhcHRlciA9IEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyO1xuIl19
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1sb29rdXAuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2h0dHAtbG9va3VwLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFHTCxtQkFBbUIsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7O0FBT3BHOzs7R0FHRztBQUVILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxtQkFBbUI7SUFDN0MsSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5QyxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEQsY0FBYyxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRXpFLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUN0QyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQTBDLENBQUM7SUFFN0QsYUFBYSxHQUFzRDtRQUNsRixTQUFTLEVBQUU7WUFDVCxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNuRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUN0RixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNuRixFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtTQUNuRjtRQUNELFFBQVEsRUFBRTtZQUNSLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTtZQUNuRixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7WUFDdkUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFO1lBQzNFLEVBQUUsUUFB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Q2xCLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsVUFBVSxHQUFHLElBQUk7WUFDekMsSUFBSTtTQUNMLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxHQUF1QjtRQUM5QyxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDakssQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQXVCO1FBQ2hELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQzVCLHVCQUF1QixDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FDN0QsQ0FBQztJQUNKLENBQUM7d0dBeEhVLHVCQUF1Qjs0R0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVOztBQTRIWCx3QkFBd0I7QUFDeEIsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIHNoYXJlUmVwbGF5LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBMb29rdXBPcHRpb25JdGVtLFxuICBMb29rdXBRdWVyeVJlcXVlc3QsXG4gIFJlcG9ydExvb2t1cEFkYXB0ZXIsXG59IGZyb20gJy4uL2NvbnRyYWN0cy9sb29rdXAuY29udHJhY3QnO1xuaW1wb3J0IHsgUkVQT1JUSU5HX0NPTkZJRyB9IGZyb20gJy4uLy4uL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZXh0cmFjdExvb2t1cE9wdGlvbkl0ZW0sIGV4dHJhY3RSb3dBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvZGF0YS1ub3JtYWxpemF0aW9uLnV0aWwnO1xuXG5pbnRlcmZhY2UgQ2FjaGVFbnRyeSB7XG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICBkYXRhOiBMb29rdXBPcHRpb25JdGVtW107XG59XG5cbi8qKlxuICogQnVpbHQtaW4gSFRUUCBhZGFwdGVyIGZvciBmZXRjaGluZyBkcm9wZG93biBvcHRpb25zIGZyb20gYmFja2VuZCBkYXRhYmFzZSB0YWJsZXMgYW5kIFNQcy5cbiAqIEluY2x1ZGVzIGluLW1lbW9yeSBjYWNoaW5nIHdpdGggVFRMLCBpbi1mbGlnaHQgcmVxdWVzdCBkZWR1cGxpY2F0aW9uLCBhbmQgZmFsbGJhY2sgbW9jayBkYXRhLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSHR0cFJlcG9ydExvb2t1cEFkYXB0ZXIgZXh0ZW5kcyBSZXBvcnRMb29rdXBBZGFwdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQ2FjaGVFbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbkZsaWdodCA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPExvb2t1cE9wdGlvbkl0ZW1bXT4+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb2NrRGF0YVN0b3JlOiBSZWNvcmQ8c3RyaW5nLCBBcnJheTx7IFtrZXk6IHN0cmluZ106IHVua25vd24gfT4+ID0ge1xuICAgIEN1c3RvbWVyczogW1xuICAgICAgeyBjdXN0b21lcklkOiAxMDEsIGN1c3RvbWVyTmFtZTogJ0FjbWUgQ29ycG9yYXRpb24nLCBicmFuY2hJZDogMSwgaXNBY3RpdmU6IHRydWUgfSxcbiAgICAgIHsgY3VzdG9tZXJJZDogMTAyLCBjdXN0b21lck5hbWU6ICdHbG9iZXggSW5kdXN0cmllcycsIGJyYW5jaElkOiAyLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgICAgeyBjdXN0b21lcklkOiAxMDMsIGN1c3RvbWVyTmFtZTogJ0luaXRlY2ggU29mdHdhcmUnLCBicmFuY2hJZDogMSwgaXNBY3RpdmU6IHRydWUgfSxcbiAgICAgIHsgY3VzdG9tZXJJZDogMTA0LCBjdXN0b21lck5hbWU6ICdVbWJyZWxsYSBDb3Jwb3JhdGlvbicsIGJyYW5jaElkOiAzLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgICAgeyBjdXN0b21lcklkOiAxMDUsIGN1c3RvbWVyTmFtZTogJ1dheW5lIEVudGVycHJpc2VzJywgYnJhbmNoSWQ6IDIsIGlzQWN0aXZlOiB0cnVlIH0sXG4gICAgICB7IGN1c3RvbWVySWQ6IDEwNiwgY3VzdG9tZXJOYW1lOiAnU3RhcmsgSW5kdXN0cmllcycsIGJyYW5jaElkOiAxLCBpc0FjdGl2ZTogdHJ1ZSB9LFxuICAgIF0sXG4gICAgQnJhbmNoZXM6IFtcbiAgICAgIHsgYnJhbmNoSWQ6IDEsIGJyYW5jaE5hbWU6ICdOb3J0aCBBbWVyaWNhIEhRIChOZXcgWW9yayknLCByZWdpb246ICdOb3J0aCBBbWVyaWNhJyB9LFxuICAgICAgeyBicmFuY2hJZDogMiwgYnJhbmNoTmFtZTogJ0VNRUEgRGl2aXNpb24gKExvbmRvbiknLCByZWdpb246ICdFdXJvcGUnIH0sXG4gICAgICB7IGJyYW5jaElkOiAzLCBicmFuY2hOYW1lOiAnQVBBQyBIdWIgKFNpbmdhcG9yZSknLCByZWdpb246ICdBc2lhIFBhY2lmaWMnIH0sXG4gICAgICB7IGJyYW5jaElkOiA0LCBicmFuY2hOYW1lOiAnTEFUQU0gT2ZmaWNlIChTw6NvIFBhdWxvKScsIHJlZ2lvbjogJ0xhdGluIEFtZXJpY2EnIH0sXG4gICAgXSxcbiAgICBQcm9kdWN0czogW1xuICAgICAgeyBwcm9kdWN0SWQ6IDEsIHByb2R1Y3ROYW1lOiAnRW50ZXJwcmlzZSBFUlAgU3VpdGUnLCBjYXRlZ29yeTogJ1NvZnR3YXJlJywgdW5pdFByaWNlOiAyNDAwIH0sXG4gICAgICB7IHByb2R1Y3RJZDogMiwgcHJvZHVjdE5hbWU6ICdDbG91ZCBBbmFseXRpY3MgUHJvJywgY2F0ZWdvcnk6ICdTYWFTJywgdW5pdFByaWNlOiAxMjAwIH0sXG4gICAgICB7IHByb2R1Y3RJZDogMywgcHJvZHVjdE5hbWU6ICdTZWN1cml0eSBTaGllbGQgRW5kcG9pbnQnLCBjYXRlZ29yeTogJ1NlY3VyaXR5JywgdW5pdFByaWNlOiA4NTAgfSxcbiAgICAgIHsgcHJvZHVjdElkOiA0LCBwcm9kdWN0TmFtZTogJ0RlZGljYXRlZCBBUEkgR2F0ZXdheScsIGNhdGVnb3J5OiAnSW5mcmFzdHJ1Y3R1cmUnLCB1bml0UHJpY2U6IDMxMDAgfSxcbiAgICBdLFxuICAgIFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7IGNvZGU6ICdCQU5LX1RSQU5TRkVSJywgdGl0bGU6ICdEaXJlY3QgQmFuayBXaXJlJyB9LFxuICAgICAgeyBjb2RlOiAnQ1JFRElUX0NBUkQnLCB0aXRsZTogJ0NvcnBvcmF0ZSBDcmVkaXQgQ2FyZCcgfSxcbiAgICAgIHsgY29kZTogJ1BBWVBBTCcsIHRpdGxlOiAnUGF5UGFsIENvcnBvcmF0ZScgfSxcbiAgICAgIHsgY29kZTogJ05FVF8zMCcsIHRpdGxlOiAnTmV0IDMwIEludm9pY2luZycgfSxcbiAgICBdLFxuICAgIHVzcF9HZXRDdXN0b21lckxpc3Q6IFtcbiAgICAgIHsgaWQ6IDEwMSwgbmFtZTogJ0FjbWUgQ29ycG9yYXRpb24gKFNQKScsIGJyYW5jaElkOiAxLCBicmFuY2g6ICdOQScgfSxcbiAgICAgIHsgaWQ6IDEwMiwgbmFtZTogJ0dsb2JleCBJbmR1c3RyaWVzIChTUCknLCBicmFuY2hJZDogMiwgYnJhbmNoOiAnRU1FQScgfSxcbiAgICAgIHsgaWQ6IDEwNSwgbmFtZTogJ1dheW5lIEVudGVycHJpc2VzIChTUCknLCBicmFuY2hJZDogMSwgYnJhbmNoOiAnTkEnIH0sXG4gICAgICB7IGlkOiAxMDYsIG5hbWU6ICdTdGFyayBJbmR1c3RyaWVzIChTUCknLCBicmFuY2hJZDogMywgYnJhbmNoOiAnQVBBQycgfSxcbiAgICBdLFxuICAgIHVzcF9HZXRCcmFuY2hMb29rdXA6IFtcbiAgICAgIHsgaWQ6IDEsIG5hbWU6ICdOb3J0aCBBbWVyaWNhIEhRJyB9LFxuICAgICAgeyBpZDogMiwgbmFtZTogJ0VNRUEgRGl2aXNpb24nIH0sXG4gICAgICB7IGlkOiAzLCBuYW1lOiAnQVBBQyBIdWInIH0sXG4gICAgXSxcbiAgfTtcblxuICBmZXRjaE9wdGlvbnMocmVxdWVzdDogTG9va3VwUXVlcnlSZXF1ZXN0KTogT2JzZXJ2YWJsZTxMb29rdXBPcHRpb25JdGVtW10+IHtcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShyZXF1ZXN0KTtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGlmIChjYWNoZWQgJiYgY2FjaGVkLmV4cGlyZXNBdCA+IG5vdykge1xuICAgICAgcmV0dXJuIG9mKGNhY2hlZC5kYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdCBydW5uaW5nID0gdGhpcy5pbkZsaWdodC5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChydW5uaW5nKSB7XG4gICAgICByZXR1cm4gcnVubmluZztcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpcy5jb25maWc/LmFwaUJhc2VVcmw7XG4gICAgaWYgKGJhc2VVcmwgJiYgdGhpcy5odHRwKSB7XG4gICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5zZXNzaW9uU2VydmljZT8uc2Vzc2lvbkNvbnRleHQoKSA/PyB7fTtcbiAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgICBpZiAoc2Vzc2lvblsnY29tcGFueUlkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydjb21wYW55SWQnXSAhPT0gbnVsbCkge1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtQ29tcGFueS1JZCcsIFN0cmluZyhzZXNzaW9uWydjb21wYW55SWQnXSkpO1xuICAgICAgfVxuICAgICAgaWYgKHNlc3Npb25bJ2JyYW5jaElkJ10gIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uWydicmFuY2hJZCddICE9PSBudWxsKSB7XG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnWC1CcmFuY2gtSWQnLCBTdHJpbmcoc2Vzc2lvblsnYnJhbmNoSWQnXSkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvYnMkID0gdGhpcy5odHRwLnBvc3Q8dW5rbm93bj4oYCR7YmFzZVVybH0vbG9va3VwYCwgcmVxdWVzdCwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zdCByYXdJdGVtcyA9IGV4dHJhY3RSb3dBcnJheShyZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIHJhd0l0ZW1zLm1hcCgocjogYW55KSA9PlxuICAgICAgICAgICAgZXh0cmFjdExvb2t1cE9wdGlvbkl0ZW0ociwgcmVxdWVzdC52YWx1ZUZpZWxkLCByZXF1ZXN0LmRpc3BsYXlGaWVsZClcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKChpdGVtcykgPT4ge1xuICAgICAgICAgIC8vIE5ldmVyIGNhY2hlIGVtcHR5IHJlc3VsdHM6IHBhcmFtZXRlcnMgbWF5IHNpbXBseSBub3QgaGF2ZSBiZWVuIGZpbGxlZCB5ZXQuXG4gICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHRoaXMuc2V0Q2FjaGUoY2FjaGVLZXksIGl0ZW1zLCA2MDApO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbXNnID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0xvb2t1cCByZXF1ZXN0IGZhaWxlZCc7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKEFycmF5LmlzQXJyYXkobXNnKSA/IG1zZy5qb2luKCcsICcpIDogbXNnKSk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbkZsaWdodC5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICB9KSxcbiAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KVxuICAgICAgKTtcblxuICAgICAgdGhpcy5pbkZsaWdodC5zZXQoY2FjaGVLZXksIG9icyQpO1xuICAgICAgcmV0dXJuIG9icyQ7XG4gICAgfVxuXG4gICAgY29uc3QgZmFsbGJhY2sgPSB0aGlzLnJlc29sdmVNb2NrT3B0aW9ucyhyZXF1ZXN0KTtcbiAgICB0aGlzLnNldENhY2hlKGNhY2hlS2V5LCBmYWxsYmFjaywgNjAwKTtcbiAgICByZXR1cm4gb2YoZmFsbGJhY2spO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDYWNoZShrZXk6IHN0cmluZywgZGF0YTogTG9va3VwT3B0aW9uSXRlbVtdLCB0dGxTZWNvbmRzID0gNjAwKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB7XG4gICAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyB0dGxTZWNvbmRzICogMTAwMCxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQ2FjaGVLZXkocmVxOiBMb29rdXBRdWVyeVJlcXVlc3QpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtyZXEuc291cmNlVHlwZX06JHtyZXEuZW50aXR5TmFtZX06JHtyZXEudmFsdWVGaWVsZH06JHtyZXEuZGlzcGxheUZpZWxkfToke0pTT04uc3RyaW5naWZ5KHJlcS5maWx0ZXIgPz8ge30pfToke0pTT04uc3RyaW5naWZ5KHJlcS5wYXJhbWV0ZXJzID8/IHt9KX1gO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlTW9ja09wdGlvbnMocmVxOiBMb29rdXBRdWVyeVJlcXVlc3QpOiBMb29rdXBPcHRpb25JdGVtW10ge1xuICAgIGNvbnN0IGVudGl0eSA9IHJlcS5lbnRpdHlOYW1lIHx8ICcnO1xuICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLm1vY2tEYXRhU3RvcmVbZW50aXR5XSA/PyBbXTtcbiAgICByZXR1cm4gcmVjb3Jkcy5tYXAoKHI6IGFueSkgPT5cbiAgICAgIGV4dHJhY3RMb29rdXBPcHRpb25JdGVtKHIsIHJlcS52YWx1ZUZpZWxkLCByZXEuZGlzcGxheUZpZWxkKVxuICAgICk7XG4gIH1cbn1cblxuLyoqIENvbnZlbmllbmNlIGFsaWFzICovXG5leHBvcnQgY29uc3QgSHR0cExvb2t1cEFkYXB0ZXIgPSBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcjtcbiJdfQ==
@@ -5,4 +5,11 @@ export { HttpReportPersistenceAdapter, HttpPersistenceAdapter, } from './http-pe
5
5
  export { HttpMasterDataAdapter, } from './http-masterdata.adapter';
6
6
  export { LocalStorageReportPersistenceAdapter, } from './local-storage-persistence.adapter';
7
7
  export { MockReportDataSourceAdapter, } from './mock-datasource.adapter';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLDBCQUEwQixHQUMzQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHNCQUFzQixHQUN2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsb0NBQW9DLEdBQ3JDLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUNMLDJCQUEyQixHQUM1QixNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgSHR0cFJlcG9ydFNjaGVtYURpc2NvdmVyeUFkYXB0ZXIsXG4gIEh0dHBTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxufSBmcm9tICcuL2h0dHAtc2NoZW1hLWRpc2NvdmVyeS5hZGFwdGVyJztcbmV4cG9ydCB7XG4gIEh0dHBSZXBvcnRMb29rdXBBZGFwdGVyLFxuICBIdHRwTG9va3VwQWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLWxvb2t1cC5hZGFwdGVyJztcbmV4cG9ydCB7XG4gIEh0dHBSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbiAgSHR0cERhdGFTb3VyY2VBZGFwdGVyLFxufSBmcm9tICcuL2h0dHAtZGF0YXNvdXJjZS5hZGFwdGVyJztcbmV4cG9ydCB7XG4gIEh0dHBSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG4gIEh0dHBQZXJzaXN0ZW5jZUFkYXB0ZXIsXG59IGZyb20gJy4vaHR0cC1wZXJzaXN0ZW5jZS5hZGFwdGVyJztcbmV4cG9ydCB7XG4gIEh0dHBNYXN0ZXJEYXRhQWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLW1hc3RlcmRhdGEuYWRhcHRlcic7XG5leHBvcnQge1xuICBMb2NhbFN0b3JhZ2VSZXBvcnRQZXJzaXN0ZW5jZUFkYXB0ZXIsXG59IGZyb20gJy4vbG9jYWwtc3RvcmFnZS1wZXJzaXN0ZW5jZS5hZGFwdGVyJztcbmV4cG9ydCB7XG4gIE1vY2tSZXBvcnREYXRhU291cmNlQWRhcHRlcixcbn0gZnJvbSAnLi9tb2NrLWRhdGFzb3VyY2UuYWRhcHRlcic7XG4iXX0=
8
+ // Endpoint-based adapters (used by BwaysReportConfig simple config)
9
+ export { EndpointSchemaDiscoveryAdapter } from './endpoint-schema-discovery.adapter';
10
+ export { EndpointDataSourceAdapter } from './endpoint-datasource.adapter';
11
+ export { EndpointLookupAdapter } from './endpoint-lookup.adapter';
12
+ export { EndpointPersistenceAdapter } from './endpoint-persistence.adapter';
13
+ export { EndpointMasterDataAdapter } from './endpoint-masterdata.adapter';
14
+ export { BWAYS_REPORT_ENDPOINTS } from './endpoint-tokens';
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9kYXRhLWFjY2Vzcy9hZGFwdGVycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLDBCQUEwQixHQUMzQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLHNCQUFzQixHQUN2QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxxQkFBcUIsR0FDdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsb0NBQW9DLEdBQ3JDLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUNMLDJCQUEyQixHQUM1QixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLG9FQUFvRTtBQUNwRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNyRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIEh0dHBSZXBvcnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyLFxuICBIdHRwU2NoZW1hRGlzY292ZXJ5QWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLXNjaGVtYS1kaXNjb3ZlcnkuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0TG9va3VwQWRhcHRlcixcbiAgSHR0cExvb2t1cEFkYXB0ZXIsXG59IGZyb20gJy4vaHR0cC1sb29rdXAuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG4gIEh0dHBEYXRhU291cmNlQWRhcHRlcixcbn0gZnJvbSAnLi9odHRwLWRhdGFzb3VyY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxuICBIdHRwUGVyc2lzdGVuY2VBZGFwdGVyLFxufSBmcm9tICcuL2h0dHAtcGVyc2lzdGVuY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBIdHRwTWFzdGVyRGF0YUFkYXB0ZXIsXG59IGZyb20gJy4vaHR0cC1tYXN0ZXJkYXRhLmFkYXB0ZXInO1xuZXhwb3J0IHtcbiAgTG9jYWxTdG9yYWdlUmVwb3J0UGVyc2lzdGVuY2VBZGFwdGVyLFxufSBmcm9tICcuL2xvY2FsLXN0b3JhZ2UtcGVyc2lzdGVuY2UuYWRhcHRlcic7XG5leHBvcnQge1xuICBNb2NrUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsXG59IGZyb20gJy4vbW9jay1kYXRhc291cmNlLmFkYXB0ZXInO1xuXG4vLyBFbmRwb2ludC1iYXNlZCBhZGFwdGVycyAodXNlZCBieSBCd2F5c1JlcG9ydENvbmZpZyBzaW1wbGUgY29uZmlnKVxuZXhwb3J0IHsgRW5kcG9pbnRTY2hlbWFEaXNjb3ZlcnlBZGFwdGVyIH0gZnJvbSAnLi9lbmRwb2ludC1zY2hlbWEtZGlzY292ZXJ5LmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtZGF0YXNvdXJjZS5hZGFwdGVyJztcbmV4cG9ydCB7IEVuZHBvaW50TG9va3VwQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtbG9va3VwLmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnRQZXJzaXN0ZW5jZUFkYXB0ZXIgfSBmcm9tICcuL2VuZHBvaW50LXBlcnNpc3RlbmNlLmFkYXB0ZXInO1xuZXhwb3J0IHsgRW5kcG9pbnRNYXN0ZXJEYXRhQWRhcHRlciB9IGZyb20gJy4vZW5kcG9pbnQtbWFzdGVyZGF0YS5hZGFwdGVyJztcbmV4cG9ydCB7IEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMgfSBmcm9tICcuL2VuZHBvaW50LXRva2Vucyc7XG5leHBvcnQgdHlwZSB7IEJ3YXlzUmVwb3J0RW5kcG9pbnRzIH0gZnJvbSAnLi9lbmRwb2ludC10b2tlbnMnO1xuIl19
@@ -3,4 +3,4 @@
3
3
  */
4
4
  export class ReportLookupAdapter {
5
5
  }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvY29udHJhY3RzL2xvb2t1cC5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQkE7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtDQUt4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERyb3Bkb3duU291cmNlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuXG4vKipcbiAqIFJlcXVlc3QgcGF5bG9hZCBmb3IgcXVlcnlpbmcgbG9va3VwIGRhdGEgZnJvbSB0aGUgaG9zdCBiYWNrZW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwUXVlcnlSZXF1ZXN0IHtcbiAgc291cmNlVHlwZTogRHJvcGRvd25Tb3VyY2VUeXBlO1xuICBlbnRpdHlOYW1lPzogc3RyaW5nO1xuICBzY2hlbWE/OiBzdHJpbmc7XG4gIHZhbHVlRmllbGQ6IHN0cmluZztcbiAgZGlzcGxheUZpZWxkOiBzdHJpbmc7XG4gIGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBwYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZWQgb3B0aW9uIGl0ZW0gZm9yIGRyb3Bkb3ducyBhbmQgc2VsZWN0b3JzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwT3B0aW9uSXRlbSB7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJhdz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIEFic3RyYWN0IGNvbnRyYWN0IGZvciBmZXRjaGluZyBkeW5hbWljIGxvb2t1cC9vcHRpb24gZGF0YSBmb3IgcmVwb3J0IGRyb3Bkb3duIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXBvcnRMb29rdXBBZGFwdGVyIHtcbiAgLyoqXG4gICAqIEZldGNoZXMgZHJvcGRvd24gb3B0aW9uIHJvd3MgZnJvbSBkYXRhYmFzZSB0YWJsZSBvciBzdG9yZWQgcHJvY2VkdXJlLlxuICAgKi9cbiAgYWJzdHJhY3QgZmV0Y2hPcHRpb25zKHJlcXVlc3Q6IExvb2t1cFF1ZXJ5UmVxdWVzdCk6IE9ic2VydmFibGU8TG9va3VwT3B0aW9uSXRlbVtdPjtcbn1cbiJdfQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLmNvbnRyYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZGF0YS1hY2Nlc3MvY29udHJhY3RzL2xvb2t1cC5jb250cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQkE7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1CQUFtQjtDQUt4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERyb3Bkb3duU291cmNlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuXG4vKipcbiAqIFJlcXVlc3QgcGF5bG9hZCBmb3IgcXVlcnlpbmcgbG9va3VwIGRhdGEgZnJvbSB0aGUgaG9zdCBiYWNrZW5kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwUXVlcnlSZXF1ZXN0IHtcbiAgc291cmNlVHlwZTogRHJvcGRvd25Tb3VyY2VUeXBlO1xuICBlbnRpdHlOYW1lPzogc3RyaW5nO1xuICBzY2hlbWE/OiBzdHJpbmc7XG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XG4gIGRpc3BsYXlGaWVsZD86IHN0cmluZztcbiAgZmlsdGVyPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbGltaXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTm9ybWFsaXplZCBvcHRpb24gaXRlbSBmb3IgZHJvcGRvd25zIGFuZCBzZWxlY3RvcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb29rdXBPcHRpb25JdGVtIHtcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgcmF3PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogQWJzdHJhY3QgY29udHJhY3QgZm9yIGZldGNoaW5nIGR5bmFtaWMgbG9va3VwL29wdGlvbiBkYXRhIGZvciByZXBvcnQgZHJvcGRvd24gY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlcG9ydExvb2t1cEFkYXB0ZXIge1xuICAvKipcbiAgICogRmV0Y2hlcyBkcm9wZG93biBvcHRpb24gcm93cyBmcm9tIGRhdGFiYXNlIHRhYmxlIG9yIHN0b3JlZCBwcm9jZWR1cmUuXG4gICAqL1xuICBhYnN0cmFjdCBmZXRjaE9wdGlvbnMocmVxdWVzdDogTG9va3VwUXVlcnlSZXF1ZXN0KTogT2JzZXJ2YWJsZTxMb29rdXBPcHRpb25JdGVtW10+O1xufVxuIl19
@@ -5,12 +5,14 @@ import { DragDropModule } from '@angular/cdk/drag-drop';
5
5
  import { ComponentRegistry } from '../../../../core/registry/component-registry';
6
6
  import { DesignerStateService } from '../../services/designer-state.service';
7
7
  import { RptIconComponent } from '../../../../primitives/components/icon/rpt-icon.component';
8
+ import { REPORTING_CONFIG } from '../../../../core/tokens/reporting-config.token';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@angular/forms";
10
11
  import * as i2 from "@angular/cdk/drag-drop";
11
12
  export class ComponentPaletteComponent {
12
13
  registry = inject(ComponentRegistry);
13
14
  designerState = inject(DesignerStateService);
15
+ reportingConfig = inject(REPORTING_CONFIG, { optional: true });
14
16
  collapseRequested = output();
15
17
  searchQuery = signal('');
16
18
  /** Layout view mode: 'grid' (2-column side-by-side grid) or 'list' (compact row list). Defaults to 'grid'. */
@@ -28,9 +30,17 @@ export class ComponentPaletteComponent {
28
30
  filteredCategories = computed(() => {
29
31
  const all = this.registry.getAll();
30
32
  const query = this.searchQuery();
31
- const filtered = query
33
+ const allowedCats = this.reportingConfig?.allowedCategories;
34
+ let filtered = query
32
35
  ? all.filter((c) => matchesSearchQuery(c, query))
33
36
  : all;
37
+ // Filter by allowed categories if configured
38
+ if (allowedCats && allowedCats.length > 0) {
39
+ filtered = filtered.filter((c) => {
40
+ const cat = c.category || 'input';
41
+ return allowedCats.includes(cat);
42
+ });
43
+ }
34
44
  const groups = new Map();
35
45
  for (const item of filtered) {
36
46
  const cat = item.category || 'input';
@@ -192,4 +202,4 @@ export function matchesSearchQuery(item, rawQuery) {
192
202
  ];
193
203
  return tokens.every((token) => targetWords.some((word) => fuzzyMatchWord(word, token)));
194
204
  }
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXBhbGV0dGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvY29tcG9uZW50cy9jb21wb25lbnQtcGFsZXR0ZS9jb21wb25lbnQtcGFsZXR0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9kZXNpZ25lci9jb21wb25lbnRzL2NvbXBvbmVudC1wYWxldHRlL2NvbXBvbmVudC1wYWxldHRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBd0IsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGlCQUFpQixFQUEwQixNQUFNLDhDQUE4QyxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDOzs7O0FBVTdGLE1BQU0sT0FBTyx5QkFBeUI7SUFDbkIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLGFBQWEsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUVyRCxpQkFBaUIsR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUVuQyxXQUFXLEdBQUcsTUFBTSxD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cG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IENvbXBvbmVudFJlZ2lzdHJ5LCBSZXBvcnRpbmdDb21wb25lbnRNZXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9yZWdpc3RyeS9jb21wb25lbnQtcmVnaXN0cnknO1xuaW1wb3J0IHsgRGVzaWduZXJTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kZXNpZ25lci1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9wcmltaXRpdmVzL2NvbXBvbmVudHMvaWNvbi9ycHQtaWNvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtY29tcG9uZW50LXBhbGV0dGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgRHJhZ0Ryb3BNb2R1bGUsIFJwdEljb25Db21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tcG9uZW50LXBhbGV0dGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY29tcG9uZW50LXBhbGV0dGUuY29tcG9uZW50LmNzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRQYWxldHRlQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RyeSA9IGluamVjdChDb21wb25lbnRSZWdpc3RyeSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzaWduZXJTdGF0ZSA9IGluamVjdChEZXNpZ25lclN0YXRlU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgY29sbGFwc2VSZXF1ZXN0ZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICByZWFkb25seSBzZWFyY2hRdWVyeSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcblxuICAvKiogTGF5b3V0IHZpZXcgbW9kZTogJ2dyaWQnICgyLWNvbHVtbiBzaWRlLWJ5LXNpZGUgZ3JpZCkgb3IgJ2xpc3QnIChjb21wYWN0IHJvdyBsaXN0KS4gRGVmYXVsdHMgdG8gJ2dyaWQnLiAqL1xuICByZWFkb25seSBsYXlvdXRNb2RlID0gc2lnbmFsPCdncmlkJyB8ICdsaXN0Jz4oJ2dyaWQnKTtcblxuICAvKiogU2V0IG9mIGV4cGFuZGVkIGNhdGVnb3J5IElEcyAqL1xuICByZWFkb25seSBleHBhbmRlZENhdGVnb3JpZXMgPSBzaWduYWw8U2V0PHN0cmluZz4+KFxuICAgIG5ldyBTZXQoWydpbnB1dCcsICdhY3Rpb24nLCAnZGlzcGxheScsICdkYXRhJywgJ2xheW91dCddKVxuICApO1xuXG4gIHJlYWRvbmx5IHRvdGFsQ29tcG9uZW50Q291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZ2lzdHJ5LmdldEFsbCgpLmxlbmd0aCk7XG5cbiAgcmVhZG9ubHkgY2F0ZWdvcnlNZXRhOiBSZWNvcmQ8c3RyaW5nLCB7IGxhYmVsOiBzdHJpbmc7IGljb246IHN0cmluZyB9PiA9IHtcbiAgICBpbnB1dDogeyBsYWJlbDogJ0Zvcm0gSW5wdXRzJywgaWNvbjogJ3RleHQtZmllbGRzJyB9LFxuICAgIGFjdGlvbjogeyBsYWJlbDogJ0FjdGlvbiBCdXR0b25zJywgaWNvbjogJ2xpZ2h0bmluZycgfSxcbiAgICBkaXNwbGF5OiB7IGxhYmVsOiAnRGlzcGxheSAmIExhYmVscycsIGljb246ICdjaGFydC1iYXInIH0sXG4gICAgZGF0YTogeyBsYWJlbDogJ0RhdGEgJiBMb29rdXBzJywgaWNvbjogJ2dyaWQnIH0sXG4gICAgbGF5b3V0OiB7IGxhYmVsOiAnTGF5b3V0ICYgQ29udGFpbmVycycsIGljb246ICdsYXlvdXQnIH0sXG4gIH07XG5cbiAgcmVhZG9ubHkgZmlsdGVyZWRDYXRlZ29yaWVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGFsbCA9IHRoaXMucmVnaXN0cnkuZ2V0QWxsKCk7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnNlYXJjaFF1ZXJ5KCk7XG5cbiAgICBjb25zdCBmaWx0ZXJlZCA9IHF1ZXJ5XG4gICAgICA/IGFsbC5maWx0ZXIoKGMpID0+IG1hdGNoZXNTZWFyY2hRdWVyeShjLCBxdWVyeSkpXG4gICAgICA6IGFsbDtcblxuICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBSZXBvcnRpbmdDb21wb25lbnRNZXRhW10+KCk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbHRlcmVkKSB7XG4gICAgICBjb25zdCBjYXQgPSBpdGVtLmNhdGVnb3J5IHx8ICdpbnB1dCc7XG4gICAgICBpZiAoIWdyb3Vwcy5oYXMoY2F0KSkge1xuICAgICAgICBncm91cHMuc2V0KGNhdCwgW10pO1xuICAgICAgfVxuICAgICAgZ3JvdXBzLmdldChjYXQpIS5wdXNoKGl0ZW0pO1xuICAgIH1cblxuICAgIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy5lbnRyaWVzKCkpLm1hcCgoW2NhdCwgaXRlbXNdKSA9PiB7XG4gICAgICBjb25zdCBtZXRhID0gdGhpcy5jYXRlZ29yeU1ldGFbY2F0XTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGNhdCxcbiAgICAgICAgbGFiZWw6IG1ldGE/LmxhYmVsID8/IGNhdCxcbiAgICAgICAgaWNvbjogbWV0YT8uaWNvbiA/PyAnYm94JyxcbiAgICAgICAgaXRlbXMsXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcblxuICByZWFkb25seSBhbGxFeHBhbmRlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjYXRzID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXMoKTtcbiAgICBpZiAoY2F0cy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzKCk7XG4gICAgcmV0dXJuIGNhdHMuZXZlcnkoKGMpID0+IGV4cGFuZGVkLmhhcyhjLm5hbWUpKTtcbiAgfSk7XG5cbiAgaXNDYXRlZ29yeUV4cGFuZGVkKGNhdGVnb3J5TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gV2hlbiBzZWFyY2hpbmcsIGF1dG8tZXhwYW5kIGNhdGVnb3JpZXMgdGhhdCBjb250YWluIG1hdGNoaW5nIHJlc3VsdHNcbiAgICBpZiAodGhpcy5zZWFyY2hRdWVyeSgpLnRyaW0oKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkQ2F0ZWdvcmllcygpLmhhcyhjYXRlZ29yeU5hbWUpO1xuICB9XG5cbiAgdG9nZ2xlQ2F0ZWdvcnkoY2F0ZWdvcnlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50ID0gbmV3IFNldCh0aGlzLmV4cGFuZGVkQ2F0ZWdvcmllcygpKTtcbiAgICBpZiAoY3VycmVudC5oYXMoY2F0ZWdvcnlOYW1lKSkge1xuICAgICAgY3VycmVudC5kZWxldGUoY2F0ZWdvcnlOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudC5hZGQoY2F0ZWdvcnlOYW1lKTtcbiAgICB9XG4gICAgdGhpcy5leHBhbmRlZENhdGVnb3JpZXMuc2V0KGN1cnJlbnQpO1xuICB9XG5cbiAgdG9nZ2xlQWxsQ2F0ZWdvcmllcygpOiB2b2lkIHtcbiAgICBjb25zdCBjYXRzID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXMoKTtcbiAgICBpZiAodGhpcy5hbGxFeHBhbmRlZCgpKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkQ2F0ZWdvcmllcy5zZXQobmV3IFNldCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5leHBhbmRlZENhdGVnb3JpZXMuc2V0KG5ldyBTZXQoY2F0cy5tYXAoKGMpID0+IGMubmFtZSkpKTtcbiAgICB9XG4gIH1cblxuICBnZXRJY29uTmFtZShpdGVtOiBSZXBvcnRpbmdDb21wb25lbnRNZXRhKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGl0ZW0udHlwZSkge1xuICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgICByZXR1cm4gJ3RleHQtZmllbGRzJztcbiAgICAgIGNhc2UgJ2Ryb3Bkb3duJzpcbiAgICAgICAgcmV0dXJuICdkcm9wZG93bic7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuICdjYWxlbmRhcic7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gJ251bWJlcic7XG4gICAgICBjYXNlICdjaGVja2JveCc6XG4gICAgICAgIHJldHVybiAnY2hlY2tib3gnO1xuICAgICAgY2FzZSAnYnV0dG9uJzpcbiAgICAgICAgcmV0dXJuICdidXR0b24nO1xuICAgICAgY2FzZSAna3BpLWNhcmQnOlxuICAgICAgICByZXR1cm4gJ2twaSc7XG4gICAgICBjYXNlICdjaGFydCc6XG4gICAgICAgIHJldHVybiAnY2hhcnQtYmFyJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnYm94JztcbiAgICB9XG4gIH1cblxuXG4gIG9uSXRlbURvdWJsZUNsaWNrKHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5hZGRDb21wb25lbnQodHlwZSk7XG4gIH1cblxuICBvbkFkZENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCB0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmRlc2lnbmVyU3RhdGUuYWRkQ29tcG9uZW50KHR5cGUpO1xuICB9XG59XG5cbi8qKiBEaWN0aW9uYXJ5IG9mIHN5bm9ueW1zIGZvciBjb21wb25lbnQgdHlwZXMgYW5kIFVJIGNvbmNlcHRzICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX1NZTk9OWU1TOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gIGlucHV0OiBbJ3RleHRib3gnLCAndGV4dCcsICdmaWVsZCcsICdzdHJpbmcnLCAnZW50cnknLCAncHJvbXB0J10sXG4gIGRyb3Bkb3duOiBbJ3NlbGVjdCcsICdjb21ib2JveCcsICdwaWNrZXInLCAnb3B0aW9ucycsICdjaG9pY2UnLCAnbWVudScsICdsaXN0J10sXG4gIGRhdGU6IFsnY2FsZW5kYXInLCAndGltZScsICdkYXRldGltZScsICdkYXknLCAnbW9udGgnLCAneWVhcicsICdzY2hlZHVsZScsICdwaWNrZXInXSxcbiAgbnVtYmVyOiBbJ251bWVyaWMnLCAnaW50ZWdlcicsICdmbG9hdCcsICdhbW91bnQnLCAnY3VycmVuY3knLCAncHJpY2UnLCAncXVhbnRpdHknLCAnY291bnRlcicsICdkaWdpdHMnLCAnc3VtJ10sXG4gIGNoZWNrYm94OiBbJ3RvZ2dsZScsICdzd2l0Y2gnLCAnYm9vbGVhbicsICdjaGVjaycsICd0aWNrJywgJ2ZsYWcnLCAneWVzL25vJ10sXG4gIGJ1dHRvbjogWydhY3Rpb24nLCAnc3VibWl0JywgJ3RyaWdnZXInLCAnY2xpY2snLCAnY3RhJywgJ3ByZXNzJywgJ2V4ZWN1dGUnXSxcbiAgJ2twaS1jYXJkJzogWydrcGknLCAnbWV0cmljJywgJ3N0YXQnLCAnY2FyZCcsICdpbmRpY2F0b3InLCAnc3VtbWFyeScsICdmaWd1cmUnLCAnYW5hbHl0aWNzJywgJ21lYXN1cmUnLCAndG90YWwnXSxcbiAgY2hhcnQ6IFsnZ3JhcGgnLCAnYmFyJywgJ2RvbnV0JywgJ2xpbmUnLCAndmlzdWFsJywgJ2FuYWx5dGljcycsICdwbG90JywgJ3BpZScsICdkaWFncmFtJ10sXG59O1xuXG4vKiogQ29tcHV0ZSBMZXZlbnNodGVpbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byBzdHJpbmdzIGZvciB0eXBvIHRvbGVyYW5jZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxldmVuc2h0ZWluRGlzdGFuY2UoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIDA7XG4gIGlmICghYS5sZW5ndGgpIHJldHVybiBiLmxlbmd0aDtcbiAgaWYgKCFiLmxlbmd0aCkgcmV0dXJuIGEubGVuZ3RoO1xuXG4gIGNvbnN0IHJvdyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGIubGVuZ3RoICsgMSB9LCAoXywgaSkgPT4gaSk7XG4gIGZvciAobGV0IGkgPSAxOyBpIDw9IGEubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgcHJldiA9IGk7XG4gICAgZm9yIChsZXQgaiA9IDE7IGogPD0gYi5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgdmFsID0gYVtpIC0gMV0gPT09IGJbaiAtIDFdID8gcm93W2ogLSAxXSA6IE1hdGgubWluKHJvd1tqIC0gMV0sIHJvd1tqXSwgcHJldikgKyAxO1xuICAgICAgcm93W2ogLSAxXSA9IHByZXY7XG4gICAgICBwcmV2ID0gdmFsO1xuICAgIH1cbiAgICByb3dbYi5sZW5ndGhdID0gcHJldjtcbiAgfVxuICByZXR1cm4gcm93W2IubGVuZ3RoXTtcbn1cblxuLyoqIENoZWNrIGlmIGEgc2VhcmNoIHRlcm0gbWF0Y2hlcyBhIHRhcmdldCB3b3JkIChzdWJzdHJpbmcgb3IgbWlzc3BlbGxpbmcpICovXG5leHBvcnQgZnVuY3Rpb24gZnV6enlNYXRjaFdvcmQodGFyZ2V0OiBzdHJpbmcsIHRlcm06IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodGFyZ2V0LmluY2x1ZGVzKHRlcm0pIHx8IHRlcm0uaW5jbHVkZXModGFyZ2V0KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0ZXJtLmxlbmd0aCA+PSA0ICYmIHRhcmdldC5sZW5ndGggPj0gNCkge1xuICAgIGNvbnN0IG1heERpc3QgPSB0ZXJtLmxlbmd0aCA+PSA3ID8gMiA6IDE7XG4gICAgaWYgKGxldmVuc2h0ZWluRGlzdGFuY2UodGFyZ2V0LCB0ZXJtKSA8PSBtYXhEaXN0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiogUHVyZSBwcmVkaWNhdGUgdG8gY2hlY2sgaWYgYSBjb21wb25lbnQgbWV0YWRhdGEgaXRlbSBtYXRjaGVzIGEgc2VhcmNoIHF1ZXJ5ICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlc1NlYXJjaFF1ZXJ5KGl0ZW06IFJlcG9ydGluZ0NvbXBvbmVudE1ldGEsIHJhd1F1ZXJ5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFyYXdRdWVyeSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGNsZWFuID0gcmF3UXVlcnkudHJpbSgpO1xuICBpZiAoIWNsZWFuKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBsb3dlciA9IGNsZWFuLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gVG9rZW5pemUgYnkgcHVuY3R1YXRpb24gYW5kIHdoaXRlc3BhY2VcbiAgY29uc3QgdG9rZW5zID0gbG93ZXJcbiAgICAucmVwbGFjZSgvW15cXHdcXHMtXS9nLCAnICcpXG4gICAgLnNwbGl0KC9bXFxzLV0rLylcbiAgICAuZmlsdGVyKCh0KSA9PiB0Lmxlbmd0aCA+IDApO1xuXG4gIC8vIElmIHF1ZXJ5IGNvbnNpc3RzIG9ubHkgb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChlLmcuLCBcIiQkJFwiIG9yIFwiKioqXCIpXG4gIGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGl0ZW0uZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlcikgfHxcbiAgICAgIGl0ZW0udHlwZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyKSB8fFxuICAgICAgaXRlbS5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBzeW5vbnltcyA9IENPTVBPTkVOVF9TWU5PTllNU1tpdGVtLnR5cGVdIHx8IFtdO1xuICBjb25zdCB0YXJnZXRXb3JkcyA9IFtcbiAgICBpdGVtLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgaXRlbS50eXBlLnRvTG93ZXJDYXNlKCksXG4gICAgaXRlbS5jYXRlZ29yeS50b0xvd2VyQ2FzZSgpLFxuICAgIC4uLml0ZW0uZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5zcGxpdCgvXFxzKy8pLFxuICAgIC4uLml0ZW0udHlwZS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bLV9dKy8pLFxuICAgIC4uLnN5bm9ueW1zLFxuICBdO1xuXG4gIHJldHVybiB0b2tlbnMuZXZlcnkoKHRva2VuKSA9PiB0YXJnZXRXb3Jkcy5zb21lKCh3b3JkKSA9PiBmdXp6eU1hdGNoV29yZCh3b3JkLCB0b2tlbikpKTtcbn1cblxuIiwiICAgIDxkaXYgY2xhc3M9XCJwYWxldHRlLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBhbGV0dGUtaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWxldHRlLXRpdGxlLWFyZWFcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJwYWxldHRlLXRpdGxlXCI+Q29tcG9uZW50czwvaDM+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWxldHRlLWNvdW50XCIgW3RpdGxlXT1cInRvdGFsQ29tcG9uZW50Q291bnQoKSArICcgY29tcG9uZW50cyBhdmFpbGFibGUnXCI+XG4gICAgICAgICAgICB7eyB0b3RhbENvbXBvbmVudENvdW50KCkgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWxldHRlLWFjdGlvbnNcIj5cbiAgICAgICAgICA8IS0tIFZpZXcgTW9kZSBUb2dnbGU6IDItQ29sdW1uIEdyaWQgdnMgMS1Db2x1bW4gTGlzdCAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmlldy1tb2RlLXRvZ2dsZVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWw9XCJQYWxldHRlIGxheW91dCB2aWV3XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInRvZ2dsZS1idG5cIlxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImxheW91dE1vZGUoKSA9PT0gJ2dyaWQnXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cImxheW91dE1vZGUoKSA9PT0gJ2dyaWQnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImxheW91dE1vZGUuc2V0KCdncmlkJylcIlxuICAgICAgICAgICAgICB0aXRsZT1cIjItQ29sdW1uIEdyaWQgVmlld1wiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCIyLUNvbHVtbiBHcmlkIFZpZXdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImdyaWRcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWJ0blwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwibGF5b3V0TW9kZSgpID09PSAnbGlzdCdcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwibGF5b3V0TW9kZSgpID09PSAnbGlzdCdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibGF5b3V0TW9kZS5zZXQoJ2xpc3QnKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiQ29tcGFjdCBMaXN0IFZpZXdcIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ29tcGFjdCBMaXN0IFZpZXdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImxpc3RcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJwYWxldHRlLWFjdGlvbi1idG4gaWNvbi1vbmx5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBbGxDYXRlZ29yaWVzKClcIlxuICAgICAgICAgICAgW3RpdGxlXT1cImFsbEV4cGFuZGVkKCkgPyAnQ29sbGFwc2UgQWxsIFNlY3Rpb25zJyA6ICdFeHBhbmQgQWxsIFNlY3Rpb25zJ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFsbEV4cGFuZGVkKCkgPyAnQ29sbGFwc2UgQWxsIFNlY3Rpb25zJyA6ICdFeHBhbmQgQWxsIFNlY3Rpb25zJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImFsbEV4cGFuZGVkKCkgPyAnY2hldnJvbi11cCcgOiAnY2hldnJvbi1kb3duJ1wiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJwYWxldHRlLWFjdGlvbi1idG4gaWNvbi1vbmx5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjb2xsYXBzZVJlcXVlc3RlZC5lbWl0KClcIlxuICAgICAgICAgICAgdGl0bGU9XCJDb2xsYXBzZSBDb21wb25lbnQgUGFsZXR0ZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ29sbGFwc2UgQ29tcG9uZW50IFBhbGV0dGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY2hldnJvbi1sZWZ0XCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNlYXJjaCBGaWx0ZXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwicGFsZXR0ZS1zZWFyY2gtd3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LWJveFwiPlxuICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwic2VhcmNoXCIgW3NpemVdPVwiMTNcIiBjbGFzcz1cInNlYXJjaC1wcmVmaXgtaWNvblwiIC8+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cInBhbGV0dGUtc2VhcmNoLWlucHV0XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGNvbnRyb2xzLi4uXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFF1ZXJ5KClcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoUXVlcnkuc2V0KCRldmVudClcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlYXJjaCBjb21wb25lbnRzXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIEBpZiAoc2VhcmNoUXVlcnkoKSkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjbGVhci1zZWFyY2gtYnRuXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaFF1ZXJ5LnNldCgnJylcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkNsZWFyIHNlYXJjaFwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhciBzZWFyY2hcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNsb3NlXCIgW3NpemVdPVwiMTJcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFBhbGV0dGUgQ2F0ZWdvcmllcyBEcm9wIExpc3Qgd2l0aCBBY2NvcmRpb24gLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicGFsZXR0ZS1zY3JvbGwtYXJlYVwiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIGlkPVwiZGVzaWduZXItcGFsZXR0ZS1kcm9wLWxpc3RcIlxuICAgICAgICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICA+XG4gICAgICAgIEBmb3IgKGNhdGVnb3J5IG9mIGZpbHRlcmVkQ2F0ZWdvcmllcygpOyB0cmFjayBjYXRlZ29yeS5uYW1lKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1pdGVtXCIgW2NsYXNzLmlzLWV4cGFuZGVkXT1cImlzQ2F0ZWdvcnlFeHBhbmRlZChjYXRlZ29yeS5uYW1lKVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhdGVnb3J5KGNhdGVnb3J5Lm5hbWUpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0NhdGVnb3J5RXhwYW5kZWQoY2F0ZWdvcnkubmFtZSlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIidwYWxldHRlLXNlY3Rpb24tJyArIGNhdGVnb3J5Lm5hbWVcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ3BhbGV0dGUtaGVhZGVyLScgKyBjYXRlZ29yeS5uYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXItbGVmdFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWNjb3JkaW9uLWNoZXZyb25cIiBbY2xhc3Mucm90YXRlZF09XCIhaXNDYXRlZ29yeUV4cGFuZGVkKGNhdGVnb3J5Lm5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNoZXZyb24tZG93blwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhdGVnb3J5LWljb24taW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiY2F0ZWdvcnkuaWNvblwiIFtzaXplXT1cIjEzXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhdGVnb3J5LW5hbWVcIj57eyBjYXRlZ29yeS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnktYmFkZ2VcIj57eyBjYXRlZ29yeS5pdGVtcy5sZW5ndGggfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImFjY29yZGlvbi1jb2xsYXBzZS13cmFwcGVyXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmV4cGFuZGVkXT1cImlzQ2F0ZWdvcnlFeHBhbmRlZChjYXRlZ29yeS5uYW1lKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFpc0NhdGVnb3J5RXhwYW5kZWQoY2F0ZWdvcnkubmFtZSlcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ3BhbGV0dGUtc2VjdGlvbi0nICsgY2F0ZWdvcnkubmFtZVwiXG4gICAgICAgICAgICAgIHJvbGU9XCJyZWdpb25cIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiJ3BhbGV0dGUtaGVhZGVyLScgKyBjYXRlZ29yeS5uYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY29yZGlvbi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjYXRlZ29yeS1pdGVtc1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZ3JpZC12aWV3XT1cImxheW91dE1vZGUoKSA9PT0gJ2dyaWQnXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5saXN0LXZpZXddPVwibGF5b3V0TW9kZSgpID09PSAnbGlzdCdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgY2F0ZWdvcnkuaXRlbXM7IHRyYWNrIGl0ZW0udHlwZSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWxldHRlLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQWRkICcgKyBpdGVtLmRpc3BsYXlOYW1lICsgJyB0byBjYW52YXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cIml0ZW0udHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cIm9uSXRlbURvdWJsZUNsaWNrKGl0ZW0udHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uSXRlbURvdWJsZUNsaWNrKGl0ZW0udHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIm9uSXRlbURvdWJsZUNsaWNrKGl0ZW0udHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInRHJhZyBvbnRvIGNhbnZhcyBvciBkb3VibGUtY2xpY2sgdG8gYWRkICcgKyBpdGVtLmRpc3BsYXlOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWljb24tYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiZ2V0SWNvbk5hbWUoaXRlbSlcIiBbc2l6ZV09XCJsYXlvdXRNb2RlKCkgPT09ICdncmlkJyA/IDE2IDogMTVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10aXRsZVwiIFt0aXRsZV09XCJpdGVtLmRpc3BsYXlOYW1lXCI+e3sgaXRlbS5kaXNwbGF5TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXRlbS10eXBlLWNvZGVcIj57eyBpdGVtLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0tYWRkLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGRDbGljaygkZXZlbnQsIGl0ZW0udHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQWRkIHRvIGNhbnZhc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWRkIHRvIGNhbnZhc1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJwbHVzXCIgW3NpemVdPVwibGF5b3V0TW9kZSgpID09PSAnZ3JpZCcgPyAxMiA6IDEzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ0RLIERyYWcgUGxhY2Vob2xkZXIgLyBQcmV2aWV3IC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKmNka0RyYWdQbGFjZWhvbGRlciBjbGFzcz1cImRyYWctcGxhY2Vob2xkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpjZGtEcmFnUHJldmlldyBjbGFzcz1cImRyYWctcHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHJwdC1pY29uIFtuYW1lXT1cImdldEljb25OYW1lKGl0ZW0pXCIgW3NpemVdPVwiMTZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5kaXNwbGF5TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGZpbHRlcmVkQ2F0ZWdvcmllcygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1yZXN1bHRzXCI+XG4gICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInNlYXJjaFwiIFtzaXplXT1cIjIwXCIgY2xhc3M9XCJuby1yZXN1bHRzLWljb25cIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuby1yZXN1bHRzLXRleHRcIj5ObyBjb21wb25lbnRzIG1hdGNoaW5nIFwie3sgc2VhcmNoUXVlcnkoKSB9fVwiPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJuby1yZXN1bHRzLWNsZWFyLWJ0blwiIChjbGljayk9XCJzZWFyY2hRdWVyeS5zZXQoJycpXCI+XG4gICAgICAgICAgICAgIENsZWFyIFNlYXJjaFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiJdfQ==
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXBhbGV0dGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvY29tcG9uZW50cy9jb21wb25lbnQtcGFsZXR0ZS9jb21wb25lbnQtcGFsZXR0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9kZXNpZ25lci9jb21wb25lbnRzL2NvbXBvbmVudC1wYWxldHRlL2NvbXBvbmVudC1wYWxldHRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBd0IsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGlCQUFpQixFQUEwQixNQUFNLDhDQUE4QyxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOzs7O0FBVWxGLE1BQU0sT0FBTyx5QkFBeUI7SUFDbkIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JDLGFBQWEsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM3QyxlQUFl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QyxXQUFXLEVBQUU7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7UUFDM0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDOUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDekMsR0FBRyxRQUFRO0tBQ1osQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBEcmFnRHJvcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVnaXN0cnksIFJlcG9ydGluZ0NvbXBvbmVudE1ldGEgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3JlZ2lzdHJ5L2NvbXBvbmVudC1yZWdpc3RyeSc7XG5pbXBvcnQgeyBEZXNpZ25lclN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Rlc2lnbmVyLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSRVBPUlRJTkdfQ09ORklHIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1jb21wb25lbnQtcGFsZXR0ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBEcmFnRHJvcE1vZHVsZSwgUnB0SWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wb25lbnQtcGFsZXR0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb21wb25lbnQtcGFsZXR0ZS5jb21wb25lbnQuY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENvbXBvbmVudFBhbGV0dGVDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJ5ID0gaW5qZWN0KENvbXBvbmVudFJlZ2lzdHJ5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXNpZ25lclN0YXRlID0gaW5qZWN0KERlc2lnbmVyU3RhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvcnRpbmdDb25maWcgPSBpbmplY3QoUkVQT1JUSU5HX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBjb2xsYXBzZVJlcXVlc3RlZCA9IG91dHB1dDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IHNlYXJjaFF1ZXJ5ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuXG4gIC8qKiBMYXlvdXQgdmlldyBtb2RlOiAnZ3JpZCcgKDItY29sdW1uIHNpZGUtYnktc2lkZSBncmlkKSBvciAnbGlzdCcgKGNvbXBhY3Qgcm93IGxpc3QpLiBEZWZhdWx0cyB0byAnZ3JpZCcuICovXG4gIHJlYWRvbmx5IGxheW91dE1vZGUgPSBzaWduYWw8J2dyaWQnIHwgJ2xpc3QnPignZ3JpZCcpO1xuXG4gIC8qKiBTZXQgb2YgZXhwYW5kZWQgY2F0ZWdvcnkgSURzICovXG4gIHJlYWRvbmx5IGV4cGFuZGVkQ2F0ZWdvcmllcyA9IHNpZ25hbDxTZXQ8c3RyaW5nPj4oXG4gICAgbmV3IFNldChbJ2lucHV0JywgJ2FjdGlvbicsICdkaXNwbGF5JywgJ2RhdGEnLCAnbGF5b3V0J10pXG4gICk7XG5cbiAgcmVhZG9ubHkgdG90YWxDb21wb25lbnRDb3VudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVnaXN0cnkuZ2V0QWxsKCkubGVuZ3RoKTtcblxuICByZWFkb25seSBjYXRlZ29yeU1ldGE6IFJlY29yZDxzdHJpbmcsIHsgbGFiZWw6IHN0cmluZzsgaWNvbjogc3RyaW5nIH0+ID0ge1xuICAgIGlucHV0OiB7IGxhYmVsOiAnRm9ybSBJbnB1dHMnLCBpY29uOiAndGV4dC1maWVsZHMnIH0sXG4gICAgYWN0aW9uOiB7IGxhYmVsOiAnQWN0aW9uIEJ1dHRvbnMnLCBpY29uOiAnbGlnaHRuaW5nJyB9LFxuICAgIGRpc3BsYXk6IHsgbGFiZWw6ICdEaXNwbGF5ICYgTGFiZWxzJywgaWNvbjogJ2NoYXJ0LWJhcicgfSxcbiAgICBkYXRhOiB7IGxhYmVsOiAnRGF0YSAmIExvb2t1cHMnLCBpY29uOiAnZ3JpZCcgfSxcbiAgICBsYXlvdXQ6IHsgbGFiZWw6ICdMYXlvdXQgJiBDb250YWluZXJzJywgaWNvbjogJ2xheW91dCcgfSxcbiAgfTtcblxuICByZWFkb25seSBmaWx0ZXJlZENhdGVnb3JpZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYWxsID0gdGhpcy5yZWdpc3RyeS5nZXRBbGwoKTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VhcmNoUXVlcnkoKTtcbiAgICBjb25zdCBhbGxvd2VkQ2F0cyA9IHRoaXMucmVwb3J0aW5nQ29uZmlnPy5hbGxvd2VkQ2F0ZWdvcmllcztcblxuICAgIGxldCBmaWx0ZXJlZCA9IHF1ZXJ5XG4gICAgICA/IGFsbC5maWx0ZXIoKGMpID0+IG1hdGNoZXNTZWFyY2hRdWVyeShjLCBxdWVyeSkpXG4gICAgICA6IGFsbDtcblxuICAgIC8vIEZpbHRlciBieSBhbGxvd2VkIGNhdGVnb3JpZXMgaWYgY29uZmlndXJlZFxuICAgIGlmIChhbGxvd2VkQ2F0cyAmJiBhbGxvd2VkQ2F0cy5sZW5ndGggPiAwKSB7XG4gICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigoYykgPT4ge1xuICAgICAgICBjb25zdCBjYXQgPSBjLmNhdGVnb3J5IHx8ICdpbnB1dCc7XG4gICAgICAgIHJldHVybiBhbGxvd2VkQ2F0cy5pbmNsdWRlcyhjYXQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIFJlcG9ydGluZ0NvbXBvbmVudE1ldGFbXT4oKTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyZWQpIHtcbiAgICAgIGNvbnN0IGNhdCA9IGl0ZW0uY2F0ZWdvcnkgfHwgJ2lucHV0JztcbiAgICAgIGlmICghZ3JvdXBzLmhhcyhjYXQpKSB7XG4gICAgICAgIGdyb3Vwcy5zZXQoY2F0LCBbXSk7XG4gICAgICB9XG4gICAgICBncm91cHMuZ2V0KGNhdCkhLnB1c2goaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLmVudHJpZXMoKSkubWFwKChbY2F0LCBpdGVtc10pID0+IHtcbiAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLmNhdGVnb3J5TWV0YVtjYXRdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogY2F0LFxuICAgICAgICBsYWJlbDogbWV0YT8ubGFiZWwgPz8gY2F0LFxuICAgICAgICBpY29uOiBtZXRhPy5pY29uID8/ICdib3gnLFxuICAgICAgICBpdGVtcyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFsbEV4cGFuZGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNhdHMgPSB0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllcygpO1xuICAgIGlmIChjYXRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZENhdGVnb3JpZXMoKTtcbiAgICByZXR1cm4gY2F0cy5ldmVyeSgoYykgPT4gZXhwYW5kZWQuaGFzKGMubmFtZSkpO1xuICB9KTtcblxuICBpc0NhdGVnb3J5RXhwYW5kZWQoY2F0ZWdvcnlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBXaGVuIHNlYXJjaGluZywgYXV0by1leHBhbmQgY2F0ZWdvcmllcyB0aGF0IGNvbnRhaW4gbWF0Y2hpbmcgcmVzdWx0c1xuICAgIGlmICh0aGlzLnNlYXJjaFF1ZXJ5KCkudHJpbSgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzKCkuaGFzKGNhdGVnb3J5TmFtZSk7XG4gIH1cblxuICB0b2dnbGVDYXRlZ29yeShjYXRlZ29yeU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBuZXcgU2V0KHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzKCkpO1xuICAgIGlmIChjdXJyZW50LmhhcyhjYXRlZ29yeU5hbWUpKSB7XG4gICAgICBjdXJyZW50LmRlbGV0ZShjYXRlZ29yeU5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50LmFkZChjYXRlZ29yeU5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmV4cGFuZGVkQ2F0ZWdvcmllcy5zZXQoY3VycmVudCk7XG4gIH1cblxuICB0b2dnbGVBbGxDYXRlZ29yaWVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNhdHMgPSB0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllcygpO1xuICAgIGlmICh0aGlzLmFsbEV4cGFuZGVkKCkpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWRDYXRlZ29yaWVzLnNldChuZXcgU2V0KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cGFuZGVkQ2F0ZWdvcmllcy5zZXQobmV3IFNldChjYXRzLm1hcCgoYykgPT4gYy5uYW1lKSkpO1xuICAgIH1cbiAgfVxuXG4gIGdldEljb25OYW1lKGl0ZW06IFJlcG9ydGluZ0NvbXBvbmVudE1ldGEpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICBjYXNlICdpbnB1dCc6XG4gICAgICAgIHJldHVybiAndGV4dC1maWVsZHMnO1xuICAgICAgY2FzZSAnZHJvcGRvd24nOlxuICAgICAgICByZXR1cm4gJ2Ryb3Bkb3duJztcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICByZXR1cm4gJ2NhbGVuZGFyJztcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICAgIGNhc2UgJ2NoZWNrYm94JzpcbiAgICAgICAgcmV0dXJuICdjaGVja2JveCc7XG4gICAgICBjYXNlICdidXR0b24nOlxuICAgICAgICByZXR1cm4gJ2J1dHRvbic7XG4gICAgICBjYXNlICdrcGktY2FyZCc6XG4gICAgICAgIHJldHVybiAna3BpJztcbiAgICAgIGNhc2UgJ2NoYXJ0JzpcbiAgICAgICAgcmV0dXJuICdjaGFydC1iYXInO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdib3gnO1xuICAgIH1cbiAgfVxuXG5cbiAgb25JdGVtRG91YmxlQ2xpY2sodHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kZXNpZ25lclN0YXRlLmFkZENvbXBvbmVudCh0eXBlKTtcbiAgfVxuXG4gIG9uQWRkQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZGVzaWduZXJTdGF0ZS5hZGRDb21wb25lbnQodHlwZSk7XG4gIH1cbn1cblxuLyoqIERpY3Rpb25hcnkgb2Ygc3lub255bXMgZm9yIGNvbXBvbmVudCB0eXBlcyBhbmQgVUkgY29uY2VwdHMgKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfU1lOT05ZTVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcbiAgaW5wdXQ6IFsndGV4dGJveCcsICd0ZXh0JywgJ2ZpZWxkJywgJ3N0cmluZycsICdlbnRyeScsICdwcm9tcHQnXSxcbiAgZHJvcGRvd246IFsnc2VsZWN0JywgJ2NvbWJvYm94JywgJ3BpY2tlcicsICdvcHRpb25zJywgJ2Nob2ljZScsICdtZW51JywgJ2xpc3QnXSxcbiAgZGF0ZTogWydjYWxlbmRhcicsICd0aW1lJywgJ2RhdGV0aW1lJywgJ2RheScsICdtb250aCcsICd5ZWFyJywgJ3NjaGVkdWxlJywgJ3BpY2tlciddLFxuICBudW1iZXI6IFsnbnVtZXJpYycsICdpbnRlZ2VyJywgJ2Zsb2F0JywgJ2Ftb3VudCcsICdjdXJyZW5jeScsICdwcmljZScsICdxdWFudGl0eScsICdjb3VudGVyJywgJ2RpZ2l0cycsICdzdW0nXSxcbiAgY2hlY2tib3g6IFsndG9nZ2xlJywgJ3N3aXRjaCcsICdib29sZWFuJywgJ2NoZWNrJywgJ3RpY2snLCAnZmxhZycsICd5ZXMvbm8nXSxcbiAgYnV0dG9uOiBbJ2FjdGlvbicsICdzdWJtaXQnLCAndHJpZ2dlcicsICdjbGljaycsICdjdGEnLCAncHJlc3MnLCAnZXhlY3V0ZSddLFxuICAna3BpLWNhcmQnOiBbJ2twaScsICdtZXRyaWMnLCAnc3RhdCcsICdjYXJkJywgJ2luZGljYXRvcicsICdzdW1tYXJ5JywgJ2ZpZ3VyZScsICdhbmFseXRpY3MnLCAnbWVhc3VyZScsICd0b3RhbCddLFxuICBjaGFydDogWydncmFwaCcsICdiYXInLCAnZG9udXQnLCAnbGluZScsICd2aXN1YWwnLCAnYW5hbHl0aWNzJywgJ3Bsb3QnLCAncGllJywgJ2RpYWdyYW0nXSxcbn07XG5cbi8qKiBDb21wdXRlIExldmVuc2h0ZWluIGRpc3RhbmNlIGJldHdlZW4gdHdvIHN0cmluZ3MgZm9yIHR5cG8gdG9sZXJhbmNlICovXG5leHBvcnQgZnVuY3Rpb24gbGV2ZW5zaHRlaW5EaXN0YW5jZShhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gMDtcbiAgaWYgKCFhLmxlbmd0aCkgcmV0dXJuIGIubGVuZ3RoO1xuICBpZiAoIWIubGVuZ3RoKSByZXR1cm4gYS5sZW5ndGg7XG5cbiAgY29uc3Qgcm93ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogYi5sZW5ndGggKyAxIH0sIChfLCBpKSA9PiBpKTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgIGxldCBwcmV2ID0gaTtcbiAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBiLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCB2YWwgPSBhW2kgLSAxXSA9PT0gYltqIC0gMV0gPyByb3dbaiAtIDFdIDogTWF0aC5taW4ocm93W2ogLSAxXSwgcm93W2pdLCBwcmV2KSArIDE7XG4gICAgICByb3dbaiAtIDFdID0gcHJldjtcbiAgICAgIHByZXYgPSB2YWw7XG4gICAgfVxuICAgIHJvd1tiLmxlbmd0aF0gPSBwcmV2O1xuICB9XG4gIHJldHVybiByb3dbYi5sZW5ndGhdO1xufVxuXG4vKiogQ2hlY2sgaWYgYSBzZWFyY2ggdGVybSBtYXRjaGVzIGEgdGFyZ2V0IHdvcmQgKHN1YnN0cmluZyBvciBtaXNzcGVsbGluZykgKi9cbmV4cG9ydCBmdW5jdGlvbiBmdXp6eU1hdGNoV29yZCh0YXJnZXQ6IHN0cmluZywgdGVybTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0YXJnZXQuaW5jbHVkZXModGVybSkgfHwgdGVybS5pbmNsdWRlcyh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHRlcm0ubGVuZ3RoID49IDQgJiYgdGFyZ2V0Lmxlbmd0aCA+PSA0KSB7XG4gICAgY29uc3QgbWF4RGlzdCA9IHRlcm0ubGVuZ3RoID49IDcgPyAyIDogMTtcbiAgICBpZiAobGV2ZW5zaHRlaW5EaXN0YW5jZSh0YXJnZXQsIHRlcm0pIDw9IG1heERpc3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBQdXJlIHByZWRpY2F0ZSB0byBjaGVjayBpZiBhIGNvbXBvbmVudCBtZXRhZGF0YSBpdGVtIG1hdGNoZXMgYSBzZWFyY2ggcXVlcnkgKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaGVzU2VhcmNoUXVlcnkoaXRlbTogUmVwb3J0aW5nQ29tcG9uZW50TWV0YSwgcmF3UXVlcnk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIXJhd1F1ZXJ5KSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgY2xlYW4gPSByYXdRdWVyeS50cmltKCk7XG4gIGlmICghY2xlYW4pIHJldHVybiB0cnVlO1xuXG4gIGNvbnN0IGxvd2VyID0gY2xlYW4udG9Mb3dlckNhc2UoKTtcblxuICAvLyBUb2tlbml6ZSBieSBwdW5jdHVhdGlvbiBhbmQgd2hpdGVzcGFjZVxuICBjb25zdCB0b2tlbnMgPSBsb3dlclxuICAgIC5yZXBsYWNlKC9bXlxcd1xccy1dL2csICcgJylcbiAgICAuc3BsaXQoL1tcXHMtXSsvKVxuICAgIC5maWx0ZXIoKHQpID0+IHQubGVuZ3RoID4gMCk7XG5cbiAgLy8gSWYgcXVlcnkgY29uc2lzdHMgb25seSBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgKGUuZy4sIFwiJCQkXCIgb3IgXCIqKipcIilcbiAgaWYgKHRva2Vucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXRlbS5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyKSB8fFxuICAgICAgaXRlbS50eXBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXIpIHx8XG4gICAgICBpdGVtLmNhdGVnb3J5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXIpXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHN5bm9ueW1zID0gQ09NUE9ORU5UX1NZTk9OWU1TW2l0ZW0udHlwZV0gfHwgW107XG4gIGNvbnN0IHRhcmdldFdvcmRzID0gW1xuICAgIGl0ZW0uZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICBpdGVtLnR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICBpdGVtLmNhdGVnb3J5LnRvTG93ZXJDYXNlKCksXG4gICAgLi4uaXRlbS5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9cXHMrLyksXG4gICAgLi4uaXRlbS50eXBlLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1stX10rLyksXG4gICAgLi4uc3lub255bXMsXG4gIF07XG5cbiAgcmV0dXJuIHRva2Vucy5ldmVyeSgodG9rZW4pID0+IHRhcmdldFdvcmRzLnNvbWUoKHdvcmQpID0+IGZ1enp5TWF0Y2hXb3JkKHdvcmQsIHRva2VuKSkpO1xufVxuXG4iLCIgICAgPGRpdiBjbGFzcz1cInBhbGV0dGUtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicGFsZXR0ZS1oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbGV0dGUtdGl0bGUtYXJlYVwiPlxuICAgICAgICAgIDxoMyBjbGFzcz1cInBhbGV0dGUtdGl0bGVcIj5Db21wb25lbnRzPC9oMz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhbGV0dGUtY291bnRcIiBbdGl0bGVdPVwidG90YWxDb21wb25lbnRDb3VudCgpICsgJyBjb21wb25lbnRzIGF2YWlsYWJsZSdcIj5cbiAgICAgICAgICAgIHt7IHRvdGFsQ29tcG9uZW50Q291bnQoKSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbGV0dGUtYWN0aW9uc1wiPlxuICAgICAgICAgIDwhLS0gVmlldyBNb2RlIFRvZ2dsZTogMi1Db2x1bW4gR3JpZCB2cyAxLUNvbHVtbiBMaXN0IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2aWV3LW1vZGUtdG9nZ2xlXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlBhbGV0dGUgbGF5b3V0IHZpZXdcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWJ0blwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwibGF5b3V0TW9kZSgpID09PSAnZ3JpZCdcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwibGF5b3V0TW9kZSgpID09PSAnZ3JpZCdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibGF5b3V0TW9kZS5zZXQoJ2dyaWQnKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiMi1Db2x1bW4gR3JpZCBWaWV3XCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIjItQ29sdW1uIEdyaWQgVmlld1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiZ3JpZFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0b2dnbGUtYnRuXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJsYXlvdXRNb2RlKCkgPT09ICdsaXN0J1wiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJsYXlvdXRNb2RlKCkgPT09ICdsaXN0J1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJsYXlvdXRNb2RlLnNldCgnbGlzdCcpXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJDb21wYWN0IExpc3QgVmlld1wiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb21wYWN0IExpc3QgVmlld1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwibGlzdFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInBhbGV0dGUtYWN0aW9uLWJ0biBpY29uLW9ubHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbENhdGVnb3JpZXMoKVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiYWxsRXhwYW5kZWQoKSA/ICdDb2xsYXBzZSBBbGwgU2VjdGlvbnMnIDogJ0V4cGFuZCBBbGwgU2VjdGlvbnMnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYWxsRXhwYW5kZWQoKSA/ICdDb2xsYXBzZSBBbGwgU2VjdGlvbnMnIDogJ0V4cGFuZCBBbGwgU2VjdGlvbnMnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiYWxsRXhwYW5kZWQoKSA/ICdjaGV2cm9uLXVwJyA6ICdjaGV2cm9uLWRvd24nXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInBhbGV0dGUtYWN0aW9uLWJ0biBpY29uLW9ubHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNvbGxhcHNlUmVxdWVzdGVkLmVtaXQoKVwiXG4gICAgICAgICAgICB0aXRsZT1cIkNvbGxhcHNlIENvbXBvbmVudCBQYWxldHRlXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb2xsYXBzZSBDb21wb25lbnQgUGFsZXR0ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJjaGV2cm9uLWxlZnRcIiBbc2l6ZV09XCIxM1wiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2VhcmNoIEZpbHRlciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwYWxldHRlLXNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtYm94XCI+XG4gICAgICAgICAgPHJwdC1pY29uIG5hbWU9XCJzZWFyY2hcIiBbc2l6ZV09XCIxM1wiIGNsYXNzPVwic2VhcmNoLXByZWZpeC1pY29uXCIgLz5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwicGFsZXR0ZS1zZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggY29udHJvbHMuLi5cIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoUXVlcnkoKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWFyY2hRdWVyeS5zZXQoJGV2ZW50KVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VhcmNoIGNvbXBvbmVudHNcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgQGlmIChzZWFyY2hRdWVyeSgpKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImNsZWFyLXNlYXJjaC1idG5cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoUXVlcnkuc2V0KCcnKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiQ2xlYXIgc2VhcmNoXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIHNlYXJjaFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY2xvc2VcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUGFsZXR0ZSBDYXRlZ29yaWVzIERyb3AgTGlzdCB3aXRoIEFjY29yZGlvbiAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwYWxldHRlLXNjcm9sbC1hcmVhXCJcbiAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgaWQ9XCJkZXNpZ25lci1wYWxldHRlLWRyb3AtbGlzdFwiXG4gICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgICAgQGZvciAoY2F0ZWdvcnkgb2YgZmlsdGVyZWRDYXRlZ29yaWVzKCk7IHRyYWNrIGNhdGVnb3J5Lm5hbWUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWl0ZW1cIiBbY2xhc3MuaXMtZXhwYW5kZWRdPVwiaXNDYXRlZ29yeUV4cGFuZGVkKGNhdGVnb3J5Lm5hbWUpXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2F0ZWdvcnkoY2F0ZWdvcnkubmFtZSlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzQ2F0ZWdvcnlFeHBhbmRlZChjYXRlZ29yeS5uYW1lKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiJ3BhbGV0dGUtc2VjdGlvbi0nICsgY2F0ZWdvcnkubmFtZVwiXG4gICAgICAgICAgICAgIFtpZF09XCIncGFsZXR0ZS1oZWFkZXItJyArIGNhdGVnb3J5Lm5hbWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlci1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY2NvcmRpb24tY2hldnJvblwiIFtjbGFzcy5yb3RhdGVkXT1cIiFpc0NhdGVnb3J5RXhwYW5kZWQoY2F0ZWdvcnkubmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiY2hldnJvbi1kb3duXCIgW3NpemVdPVwiMTJcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnktaWNvbi1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJjYXRlZ29yeS5pY29uXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnktbmFtZVwiPnt7IGNhdGVnb3J5LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXRlZ29yeS1iYWRnZVwiPnt7IGNhdGVnb3J5Lml0ZW1zLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiYWNjb3JkaW9uLWNvbGxhcHNlLXdyYXBwZXJcIlxuICAgICAgICAgICAgICBbY2xhc3MuZXhwYW5kZWRdPVwiaXNDYXRlZ29yeUV4cGFuZGVkKGNhdGVnb3J5Lm5hbWUpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWlzQ2F0ZWdvcnlFeHBhbmRlZChjYXRlZ29yeS5uYW1lKVwiXG4gICAgICAgICAgICAgIFtpZF09XCIncGFsZXR0ZS1zZWN0aW9uLScgKyBjYXRlZ29yeS5uYW1lXCJcbiAgICAgICAgICAgICAgcm9sZT1cInJlZ2lvblwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCIncGFsZXR0ZS1oZWFkZXItJyArIGNhdGVnb3J5Lm5hbWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjb3JkaW9uLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNhdGVnb3J5LWl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5ncmlkLXZpZXddPVwibGF5b3V0TW9kZSgpID09PSAnZ3JpZCdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmxpc3Qtdmlld109XCJsYXlvdXRNb2RlKCkgPT09ICdsaXN0J1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBjYXRlZ29yeS5pdGVtczsgdHJhY2sgaXRlbS50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhbGV0dGUtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBZGQgJyArIGl0ZW0uZGlzcGxheU5hbWUgKyAnIHRvIGNhbnZhcydcIlxuICAgICAgICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiaXRlbS50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwib25JdGVtRG91YmxlQ2xpY2soaXRlbS50eXBlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25JdGVtRG91YmxlQ2xpY2soaXRlbS50eXBlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib25JdGVtRG91YmxlQ2xpY2soaXRlbS50eXBlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidEcmFnIG9udG8gY2FudmFzIG9yIGRvdWJsZS1jbGljayB0byBhZGQgJyArIGl0ZW0uZGlzcGxheU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0taWNvbi1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJnZXRJY29uTmFtZShpdGVtKVwiIFtzaXplXT1cImxheW91dE1vZGUoKSA9PT0gJ2dyaWQnID8gMTYgOiAxNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0taW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXRpdGxlXCIgW3RpdGxlXT1cIml0ZW0uZGlzcGxheU5hbWVcIj57eyBpdGVtLmRpc3BsYXlOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpdGVtLXR5cGUtY29kZVwiPnt7IGl0ZW0udHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS1hZGQtYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFkZENsaWNrKCRldmVudCwgaXRlbS50eXBlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJBZGQgdG8gY2FudmFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBZGQgdG8gY2FudmFzXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cInBsdXNcIiBbc2l6ZV09XCJsYXlvdXRNb2RlKCkgPT09ICdncmlkJyA/IDEyIDogMTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBDREsgRHJhZyBQbGFjZWhvbGRlciAvIFByZXZpZXcgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqY2RrRHJhZ1BsYWNlaG9sZGVyIGNsYXNzPVwiZHJhZy1wbGFjZWhvbGRlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKmNka0RyYWdQcmV2aWV3IGNsYXNzPVwiZHJhZy1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cnB0LWljb24gW25hbWVdPVwiZ2V0SWNvbk5hbWUoaXRlbSlcIiBbc2l6ZV09XCIxNlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLmRpc3BsYXlOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoZmlsdGVyZWRDYXRlZ29yaWVzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdHNcIj5cbiAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwic2VhcmNoXCIgW3NpemVdPVwiMjBcIiBjbGFzcz1cIm5vLXJlc3VsdHMtaWNvblwiIC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5vLXJlc3VsdHMtdGV4dFwiPk5vIGNvbXBvbmVudHMgbWF0Y2hpbmcgXCJ7eyBzZWFyY2hRdWVyeSgpIH19XCI8L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm5vLXJlc3VsdHMtY2xlYXItYnRuXCIgKGNsaWNrKT1cInNlYXJjaFF1ZXJ5LnNldCgnJylcIj5cbiAgICAgICAgICAgICAgQ2xlYXIgU2VhcmNoXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+Il19