bways-report 0.1.9 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +463 -316
  2. package/esm2022/lib/core/config/bways-report-config.mjs +29 -32
  3. package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
  4. package/esm2022/lib/core/services/report-api-execution.service.mjs +33 -11
  5. package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
  6. package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
  7. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  8. package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
  9. package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
  10. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +8 -1
  11. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +5 -2
  12. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
  13. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
  14. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
  15. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
  16. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +4 -37
  17. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +4 -50
  18. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
  19. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
  20. package/esm2022/lib/data-access/adapters/index.mjs +1 -1
  21. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
  22. package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
  23. package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
  24. package/esm2022/lib/data-access/contracts/index.mjs +1 -1
  25. package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
  26. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +50 -40
  27. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +546 -119
  28. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +12 -6
  29. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +9 -8
  30. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +9 -4
  31. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
  32. package/esm2022/lib/features/designer/designer.component.mjs +100 -67
  33. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
  34. package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
  35. package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
  36. package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
  37. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
  38. package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
  39. package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
  40. package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
  41. package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
  42. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +5 -3
  43. package/esm2022/lib/features/routing/report-routes.mjs +6 -6
  44. package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
  45. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
  46. package/esm2022/lib/features/runtime/report-execution.service.mjs +18 -5
  47. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +4 -2
  48. package/esm2022/lib/features/runtime/report-runtime.component.mjs +94 -71
  49. package/esm2022/lib/features/runtime/rpt-report.component.mjs +49 -41
  50. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
  51. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +13 -1
  52. package/esm2022/lib/provide-reporting.mjs +9 -29
  53. package/fesm2022/bways-report.mjs +1789 -1041
  54. package/fesm2022/bways-report.mjs.map +1 -1
  55. package/lib/core/config/bways-report-config.d.ts +14 -5
  56. package/lib/core/models/report-datasource.model.d.ts +5 -0
  57. package/lib/core/services/report-session-context.service.d.ts +9 -0
  58. package/lib/core/tokens/designer-config.token.d.ts +4 -0
  59. package/lib/core/tokens/reporting-config.token.d.ts +4 -0
  60. package/lib/core/utils/report-endpoint.util.d.ts +12 -0
  61. package/lib/core/utils/report-request-scope.d.ts +14 -0
  62. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
  63. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
  64. package/lib/data-access/adapters/endpoint-tokens.d.ts +4 -0
  65. package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
  66. package/lib/data-access/adapters/http-lookup.adapter.d.ts +1 -3
  67. package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
  68. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
  69. package/lib/data-access/adapters/index.d.ts +1 -1
  70. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
  71. package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
  72. package/lib/data-access/adapters/session-headers.d.ts +3 -0
  73. package/lib/data-access/contracts/index.d.ts +1 -0
  74. package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
  75. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
  76. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
  77. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -3
  78. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +1 -0
  79. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +1 -0
  80. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
  81. package/lib/features/designer/designer.component.d.ts +15 -2
  82. package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
  83. package/lib/features/designer/services/designer-config.service.d.ts +13 -0
  84. package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
  85. package/lib/features/persistence/services/report-store.service.d.ts +15 -1
  86. package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
  87. package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
  88. package/lib/features/runtime/report-execution.service.d.ts +3 -0
  89. package/lib/features/runtime/report-grid-bridge.component.d.ts +1 -0
  90. package/lib/features/runtime/report-runtime.component.d.ts +1 -0
  91. package/lib/features/runtime/rpt-report.component.d.ts +5 -0
  92. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
  93. package/package.json +2 -1
@@ -1,4 +1,5 @@
1
1
  import { ChangeDetectionStrategy, Component, DestroyRef, inject, signal } from '@angular/core';
2
+ import { reportRouteIdentifier } from '../resolvers/report-route-identifier';
2
3
  import { CommonModule } from '@angular/common';
3
4
  import { ActivatedRoute, Router, RouterModule } from '@angular/router';
4
5
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@@ -13,19 +14,20 @@ export class RoutedReportRuntimeComponent {
13
14
  destroyRef = inject(DestroyRef);
14
15
  report = signal(null);
15
16
  loading = signal(true);
16
- canEdit = signal(true);
17
+ canEdit = signal(false);
17
18
  ngOnInit() {
18
19
  // Check if route resolved the report
19
20
  this.route.data
20
21
  .pipe(takeUntilDestroyed(this.destroyRef))
21
22
  .subscribe((data) => {
23
+ this.canEdit.set(data['canEdit'] === true);
22
24
  if (data && data['report']) {
23
25
  this.report.set(data['report']);
24
26
  this.loading.set(false);
25
27
  return;
26
28
  }
27
29
  // Otherwise fallback to resolving via paramMap
28
- const identifier = this.route.snapshot.paramMap.get('slug') ?? this.route.snapshot.paramMap.get('reportId');
30
+ const identifier = reportRouteIdentifier(this.route.snapshot);
29
31
  if (identifier) {
30
32
  this.store.loadReportBySlug(identifier)
31
33
  .pipe(takeUntilDestroyed(this.destroyRef))
@@ -160,4 +162,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
160
162
  </div>
161
163
  `, styles: [".rpt-routed-container{display:flex;flex-direction:column;gap:var(--rpt-space-md, 16px);width:100%;min-height:100%;box-sizing:border-box;padding:var(--rpt-space-md, 16px)}.rpt-routed-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:var(--rpt-space-sm, 8px);border-bottom:1px solid var(--rpt-border-color, #e2e8f0)}.rpt-routed-title-row{display:flex;align-items:center;gap:12px}.rpt-routed-title{font-size:1.25rem;font-weight:700;color:var(--rpt-text-color, #0f172a);margin:0}.rpt-routed-version{font-size:.75rem;font-weight:600;padding:2px 8px;border-radius:9999px;background:var(--rpt-bg-subtle, #f1f5f9);color:var(--rpt-text-muted, #64748b)}.rpt-routed-loading,.rpt-routed-error{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;color:var(--rpt-text-muted, #64748b)}.rpt-error-card{background:var(--rpt-surface-bg, #ffffff);border:1px solid var(--rpt-border-color, #e2e8f0);border-radius:var(--rpt-radius-md, 8px);padding:32px 40px;box-shadow:var(--rpt-shadow-sm, 0 1px 3px rgba(0,0,0,.05))}.rpt-error-card h3{color:var(--rpt-error-color, #ef4444);margin-top:0}.rpt-spinner{width:36px;height:36px;border:3px solid var(--rpt-border-color, #e2e8f0);border-top-color:var(--rpt-primary, #2563eb);border-radius:50%;animation:rpt-spin .8s linear infinite;margin-bottom:12px}@keyframes rpt-spin{to{transform:rotate(360deg)}}.rpt-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;font-size:.875rem;font-weight:500;border-radius:var(--rpt-radius-md, 6px);cursor:pointer;border:1px solid transparent;transition:all .15s ease}.rpt-btn-sm{padding:5px 10px;font-size:.8125rem}.rpt-btn-primary{background:var(--rpt-primary, #2563eb);color:#fff}.rpt-btn-primary:hover{background:var(--rpt-primary-hover, #1d4ed8)}.rpt-btn-secondary{background:var(--rpt-surface-bg, #ffffff);color:var(--rpt-text-color, #1e293b);border-color:var(--rpt-border-color, #cbd5e1)}.rpt-btn-secondary:hover{background:var(--rpt-bg-subtle, #f8fafc)}.rpt-btn-ghost{background:transparent;color:var(--rpt-text-muted, #64748b)}.rpt-btn-ghost:hover{color:var(--rpt-text-color, #1e293b);background:var(--rpt-bg-subtle, #f1f5f9)}\n"] }]
162
164
  }] });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVkLXJlcG9ydC1ydW50aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3JvdXRpbmcvY29tcG9uZW50cy9yb3V0ZWQtcmVwb3J0LXJ1bnRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFHVixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7QUFxTDFGLE1BQU0sT0FBTyw0QkFBNEI7SUFDdEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLEtBQUssR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sR0FBRyxNQUFNLENBQTBCLElBQUksQ0FBQyxDQUFDO0lBQy9DLE9BQU8sR0FBRyxNQUFNLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDaEMsT0FBTyxHQUFHLE1BQU0sQ0FBVSxJQUFJLENB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ICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLFxuICBPbkluaXQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzJztcbmltcG9ydCB7IFJlcG9ydFN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL3BlcnNpc3RlbmNlL3NlcnZpY2VzL3JlcG9ydC1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ydW50aW1lL3JlcG9ydC1ydW50aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LXJvdXRlZC1ydW50aW1lJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUm91dGVyTW9kdWxlLCBSZXBvcnRSdW50aW1lQ29tcG9uZW50LCBScHRJY29uQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1yb3V0ZWQtY29udGFpbmVyXCI+XG4gICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1sb2FkaW5nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgPHA+TG9hZGluZyByZXBvcnQgZGVmaW5pdGlvbi4uLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChyZXBvcnQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJ0biBycHQtYnRuLWdob3N0IHJwdC1idG4tc21cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkdvIGJhY2tcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImFycm93LWxlZnRcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkJhY2s8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cInJwdC1yb3V0ZWQtdGl0bGVcIj57eyByZXBvcnQoKT8ubmFtZSB9fTwvaDE+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1yb3V0ZWQtdmVyc2lvblwiPnZ7eyByZXBvcnQoKT8udmVyc2lvbiA/PyAxIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgQGlmIChjYW5FZGl0KCkpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJ0biBycHQtYnRuLXNlY29uZGFyeSBycHQtYnRuLXNtXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRSZXBvcnQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwic2V0dGluZ3NcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkVkaXQgUmVwb3J0PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8cnB0LXJ1bnRpbWUgW3JlcG9ydF09XCJyZXBvcnQoKSFcIiAoZXhlY3V0ZSk9XCJvblJlcG9ydEV4ZWN1dGVkKCRldmVudClcIiAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLWVycm9yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1lcnJvci1jYXJkXCI+XG4gICAgICAgICAgICA8aDM+UmVwb3J0IE5vdCBGb3VuZDwvaDM+XG4gICAgICAgICAgICA8cD5UaGUgcmVxdWVzdGVkIHJlcG9ydCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaGFzIG5vdCBiZWVuIHB1Ymxpc2hlZCB5ZXQuPC9wPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJycHQtYnRuIHJwdC1idG4tcHJpbWFyeVwiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAgICBSZXR1cm4gdG8gUHJldmlvdXMgUGFnZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLnJwdC1yb3V0ZWQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiB2YXIoLS1ycHQtc3BhY2UtbWQsIDE2cHgpO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IHZhcigtLXJwdC1zcGFjZS1tZCwgMTZweCk7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgcGFkZGluZy1ib3R0b206IHZhcigtLXJwdC1zcGFjZS1zbSwgOHB4KTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjZTJlOGYwKTtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC10aXRsZS1yb3cge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDEycHg7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtdmVyc2lvbiB7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgcGFkZGluZzogMnB4IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1iZy1zdWJ0bGUsICNmMWY1ZjkpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC1sb2FkaW5nLFxuICAgIC5ycHQtcm91dGVkLWVycm9yIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgcGFkZGluZzogNjBweCAyMHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAucnB0LWVycm9yLWNhcmQge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXN1cmZhY2UtYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtcmFkaXVzLW1kLCA4cHgpO1xuICAgICAgcGFkZGluZzogMzJweCA0MHB4O1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LXNoYWRvdy1zbSwgMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNSkpO1xuICAgIH1cblxuICAgIC5ycHQtZXJyb3ItY2FyZCBoMyB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWVycm9yLWNvbG9yLCAjZWY0NDQ0KTtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuXG4gICAgLnJwdC1zcGlubmVyIHtcbiAgICAgIHdpZHRoOiAzNnB4O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBhbmltYXRpb246IHJwdC1zcGluIDAuOHMgbGluZWFyIGluZmluaXRlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIHJwdC1zcGluIHtcbiAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxuICAgIH1cblxuICAgIC5ycHQtYnRuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBwYWRkaW5nOiA4cHggMTRweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LXJhZGl1cy1tZCwgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgfVxuXG4gICAgLnJwdC1idG4tc20ge1xuICAgICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1wcmltYXJ5IHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIH1cbiAgICAucnB0LWJ0bi1wcmltYXJ5OmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1zZWNvbmRhcnkge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXN1cmZhY2UtYmcsICNmZmZmZmYpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMWUyOTNiKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2NiZDVlMSk7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNlY29uZGFyeTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjhmYWZjKTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1naG9zdCB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgfVxuICAgIC5ycHQtYnRuLWdob3N0OmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzFlMjkzYik7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjFmNWY5KTtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFJvdXRlZFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChSZXBvcnRTdG9yZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcmVhZG9ubHkgcmVwb3J0ID0gc2lnbmFsPFJlcG9ydERlZmluaXRpb24gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgY2FuRWRpdCA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiByb3V0ZSByZXNvbHZlZCB0aGUgcmVwb3J0XG4gICAgdGhpcy5yb3V0ZS5kYXRhXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YVsncmVwb3J0J10pIHtcbiAgICAgICAgICB0aGlzLnJlcG9ydC5zZXQoZGF0YVsncmVwb3J0J10pO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjayB0byByZXNvbHZpbmcgdmlhIHBhcmFtTWFwXG4gICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnc2x1ZycpID8/IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdyZXBvcnRJZCcpO1xuICAgICAgICBpZiAoaWRlbnRpZmllcikge1xuICAgICAgICAgIHRoaXMuc3RvcmUubG9hZFJlcG9ydEJ5U2x1ZyhpZGVudGlmaWVyKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgbmV4dDogKHJlcCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0LnNldChyZXApO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0LnNldChudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgb25SZXBvcnRFeGVjdXRlZChmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgLy8gSG9zdCBjYW4gb2JzZXJ2ZSBvciBoYW5kbGUgZXhlY3V0aW9ucyBpZiBuZWVkZWRcbiAgfVxuXG4gIGVkaXRSZXBvcnQoKTogdm9pZCB7XG4gICAgY29uc3QgcmVwID0gdGhpcy5yZXBvcnQoKTtcbiAgICBpZiAocmVwKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2VkaXQnXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdvQmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLyddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gIH1cbn1cbiJdfQ==
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVkLXJlcG9ydC1ydW50aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3JvdXRpbmcvY29tcG9uZW50cy9yb3V0ZWQtcmVwb3J0LXJ1bnRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFHVixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7QUFxTDFGLE1BQU0sT0FBTyw0QkFBNEI7SUFDdEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLEtBQUssR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sR0FBRyxNQUFNLENBQTBCLElBQUksQ0FBQyxDQUFDO0lBQy9DLE9BQU8sR0FBRyxNQUFNLENBQVUsSUFB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OztHQWdEVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIERlc3Ryb3lSZWYsXG4gIE9uSW5pdCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcmVwb3J0Um91dGVJZGVudGlmaWVyIH0gZnJvbSAnLi4vcmVzb2x2ZXJzL3JlcG9ydC1yb3V0ZS1pZGVudGlmaWVyJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzJztcbmltcG9ydCB7IFJlcG9ydFN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL3BlcnNpc3RlbmNlL3NlcnZpY2VzL3JlcG9ydC1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9ydW50aW1lL3JlcG9ydC1ydW50aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBScHRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vcHJpbWl0aXZlcy9jb21wb25lbnRzL2ljb24vcnB0LWljb24uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LXJvdXRlZC1ydW50aW1lJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUm91dGVyTW9kdWxlLCBSZXBvcnRSdW50aW1lQ29tcG9uZW50LCBScHRJY29uQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1yb3V0ZWQtY29udGFpbmVyXCI+XG4gICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1sb2FkaW5nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1zcGlubmVyXCI+PC9kaXY+XG4gICAgICAgICAgPHA+TG9hZGluZyByZXBvcnQgZGVmaW5pdGlvbi4uLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChyZXBvcnQoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC1oZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXJvdXRlZC10aXRsZS1yb3dcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJ0biBycHQtYnRuLWdob3N0IHJwdC1idG4tc21cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkdvIGJhY2tcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImFycm93LWxlZnRcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkJhY2s8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxoMSBjbGFzcz1cInJwdC1yb3V0ZWQtdGl0bGVcIj57eyByZXBvcnQoKT8ubmFtZSB9fTwvaDE+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1yb3V0ZWQtdmVyc2lvblwiPnZ7eyByZXBvcnQoKT8udmVyc2lvbiA/PyAxIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgQGlmIChjYW5FZGl0KCkpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicnB0LWJ0biBycHQtYnRuLXNlY29uZGFyeSBycHQtYnRuLXNtXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRSZXBvcnQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwic2V0dGluZ3NcIiBbc2l6ZV09XCIxNFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuPkVkaXQgUmVwb3J0PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8cnB0LXJ1bnRpbWUgW3JlcG9ydF09XCJyZXBvcnQoKSFcIiAoZXhlY3V0ZSk9XCJvblJlcG9ydEV4ZWN1dGVkKCRldmVudClcIiAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtcm91dGVkLWVycm9yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1lcnJvci1jYXJkXCI+XG4gICAgICAgICAgICA8aDM+UmVwb3J0IE5vdCBGb3VuZDwvaDM+XG4gICAgICAgICAgICA8cD5UaGUgcmVxdWVzdGVkIHJlcG9ydCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaGFzIG5vdCBiZWVuIHB1Ymxpc2hlZCB5ZXQuPC9wPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJycHQtYnRuIHJwdC1idG4tcHJpbWFyeVwiIChjbGljayk9XCJnb0JhY2soKVwiPlxuICAgICAgICAgICAgICBSZXR1cm4gdG8gUHJldmlvdXMgUGFnZVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgLnJwdC1yb3V0ZWQtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiB2YXIoLS1ycHQtc3BhY2UtbWQsIDE2cHgpO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IHZhcigtLXJwdC1zcGFjZS1tZCwgMTZweCk7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgcGFkZGluZy1ib3R0b206IHZhcigtLXJwdC1zcGFjZS1zbSwgOHB4KTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ycHQtYm9yZGVyLWNvbG9yLCAjZTJlOGYwKTtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC10aXRsZS1yb3cge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDEycHg7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgLnJwdC1yb3V0ZWQtdmVyc2lvbiB7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgcGFkZGluZzogMnB4IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1iZy1zdWJ0bGUsICNmMWY1ZjkpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAucnB0LXJvdXRlZC1sb2FkaW5nLFxuICAgIC5ycHQtcm91dGVkLWVycm9yIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgcGFkZGluZzogNjBweCAyMHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICB9XG5cbiAgICAucnB0LWVycm9yLWNhcmQge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXN1cmZhY2UtYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtcmFkaXVzLW1kLCA4cHgpO1xuICAgICAgcGFkZGluZzogMzJweCA0MHB4O1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LXNoYWRvdy1zbSwgMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNSkpO1xuICAgIH1cblxuICAgIC5ycHQtZXJyb3ItY2FyZCBoMyB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWVycm9yLWNvbG9yLCAjZWY0NDQ0KTtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuXG4gICAgLnJwdC1zcGlubmVyIHtcbiAgICAgIHdpZHRoOiAzNnB4O1xuICAgICAgaGVpZ2h0OiAzNnB4O1xuICAgICAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2UyZThmMCk7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1ycHQtcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBhbmltYXRpb246IHJwdC1zcGluIDAuOHMgbGluZWFyIGluZmluaXRlO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIHJwdC1zcGluIHtcbiAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfVxuICAgIH1cblxuICAgIC5ycHQtYnRuIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBwYWRkaW5nOiA4cHggMTRweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LXJhZGl1cy1tZCwgNnB4KTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgfVxuXG4gICAgLnJwdC1idG4tc20ge1xuICAgICAgcGFkZGluZzogNXB4IDEwcHg7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1wcmltYXJ5IHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIH1cbiAgICAucnB0LWJ0bi1wcmltYXJ5OmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1zZWNvbmRhcnkge1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LXN1cmZhY2UtYmcsICNmZmZmZmYpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC10ZXh0LWNvbG9yLCAjMWUyOTNiKTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWJvcmRlci1jb2xvciwgI2NiZDVlMSk7XG4gICAgfVxuICAgIC5ycHQtYnRuLXNlY29uZGFyeTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjhmYWZjKTtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1naG9zdCB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgfVxuICAgIC5ycHQtYnRuLWdob3N0OmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtdGV4dC1jb2xvciwgIzFlMjkzYik7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtYmctc3VidGxlLCAjZjFmNWY5KTtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFJvdXRlZFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChSZXBvcnRTdG9yZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgcmVhZG9ubHkgcmVwb3J0ID0gc2lnbmFsPFJlcG9ydERlZmluaXRpb24gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgY2FuRWRpdCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgcm91dGUgcmVzb2x2ZWQgdGhlIHJlcG9ydFxuICAgIHRoaXMucm91dGUuZGF0YVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuRWRpdC5zZXQoZGF0YVsnY2FuRWRpdCddID09PSB0cnVlKTtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YVsncmVwb3J0J10pIHtcbiAgICAgICAgICB0aGlzLnJlcG9ydC5zZXQoZGF0YVsncmVwb3J0J10pO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjayB0byByZXNvbHZpbmcgdmlhIHBhcmFtTWFwXG4gICAgICAgIGNvbnN0IGlkZW50aWZpZXIgPSByZXBvcnRSb3V0ZUlkZW50aWZpZXIodGhpcy5yb3V0ZS5zbmFwc2hvdCk7XG4gICAgICAgIGlmIChpZGVudGlmaWVyKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5sb2FkUmVwb3J0QnlTbHVnKGlkZW50aWZpZXIpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICBuZXh0OiAocmVwKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KHJlcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnQuc2V0KG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBvblJlcG9ydEV4ZWN1dGVkKGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkIHtcbiAgICAvLyBIb3N0IGNhbiBvYnNlcnZlIG9yIGhhbmRsZSBleGVjdXRpb25zIGlmIG5lZWRlZFxuICB9XG5cbiAgZWRpdFJlcG9ydCgpOiB2b2lkIHtcbiAgICBjb25zdCByZXAgPSB0aGlzLnJlcG9ydCgpO1xuICAgIGlmIChyZXApIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnZWRpdCddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgfVxuICB9XG5cbiAgZ29CYWNrKCk6IHZvaWQge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4vJ10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxufVxuIl19
@@ -19,7 +19,7 @@ export function createReportRoutes(config) {
19
19
  const enableDesigner = config?.enableDesignerRoutes !== false;
20
20
  const runtimeGuards = config?.runtimeGuards ?? [];
21
21
  const designerGuards = config?.designerGuards ?? [];
22
- const extraData = config?.extraRouteData ?? {};
22
+ const extraData = { ...config?.extraRouteData, reportIdParam: reportParam };
23
23
  const routes = [];
24
24
  if (enableDesigner) {
25
25
  routes.push({
@@ -42,7 +42,7 @@ export function createReportRoutes(config) {
42
42
  report: reportResolver
43
43
  },
44
44
  canActivate: runtimeGuards,
45
- data: { ...extraData }
45
+ data: { ...extraData, canEdit: enableDesigner }
46
46
  });
47
47
  return routes;
48
48
  }
@@ -67,13 +67,13 @@ export function bwaysReportRoutes(options) {
67
67
  path: 'new',
68
68
  component: RoutedReportDesignerComponent,
69
69
  canActivate: options.builderGuards ?? [],
70
- data: { isNew: true, ...(options.extraData ?? {}) }
70
+ data: { isNew: true, ...(options.extraData ?? {}), reportIdParam: param }
71
71
  });
72
72
  routes.push({
73
73
  path: `:${param}/edit`,
74
74
  component: RoutedReportDesignerComponent,
75
75
  canActivate: options.builderGuards ?? [],
76
- data: { isEdit: true, ...(options.extraData ?? {}) }
76
+ data: { isEdit: true, ...(options.extraData ?? {}), reportIdParam: param }
77
77
  });
78
78
  }
79
79
  routes.push({
@@ -83,8 +83,8 @@ export function bwaysReportRoutes(options) {
83
83
  report: reportResolver
84
84
  },
85
85
  canActivate: options?.runtimeGuards ?? [],
86
- data: { ...(options?.extraData ?? {}) }
86
+ data: { ...(options?.extraData ?? {}), reportIdParam: param, canEdit: !!options?.includeBuilder }
87
87
  });
88
88
  return routes;
89
89
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3JvdXRpbmcvcmVwb3J0LXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDNUYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFOUY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQTRCO0lBQzdELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxhQUFhLElBQUksVUFBVSxDQUFDO0lBQ3hELE1BQU0sY0FBYyxHQUFHLE1BQU0sRUFBRSxvQkFBb0IsS0FBSyxLQUFLLENBQUM7SUFDOUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUM7SUFDbEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7SUFDcEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7SUFFL0MsTUFBTSxNQUFNLEdBQVcsRUFBRSxDQUFDO0lBRTFCLElBQUksY0FBYyxFQUFFLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLElBQUksRUFBRSxLQUFLO1lBQ1gsU0FBUyxFQUFFLDZCQUE2QjtZQUN4QyxXQUFXLEVBQUUsY0FBYztZQUMzQixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsU0FBUyxFQUFFO1NBQ3BDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDVixJQUFJLEVBQUUsSUFBSSxXQUFXLE9BQU87WUFDNUIsU0FBUyxFQUFFLDZCQUE2QjtZQUN4QyxXQUFXLEVBQUUsY0FBYztZQUMzQixJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsU0FBUyxFQUFFO1NBQ3JDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ1YsSUFBSSxFQUFFLElBQUksV0FBVyxFQUFFO1FBQ3ZCLFNBQVMsRUFBRSw0QkFBNEI7UUFDdkMsT0FBTyxFQUFFO1lBQ1AsTUFBTSxFQUFFLGNBQWM7U0FDdkI7UUFDRCxXQUFXLEVBQUUsYUFBYTtRQUMxQixJQUFJLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRTtLQUN2QixDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBaUNEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUFrQztJQUNsRSxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7SUFFMUIsSUFBSSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLElBQUksRUFBRSxLQUFLO1lBQ1gsU0FBUyxFQUFFLDZCQUE2QjtZQUN4QyxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFO1lBQ3hDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUU7U0FDcEQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLElBQUksRUFBRSxJQUFJLEtBQUssT0FBTztZQUN0QixTQUFTLEVBQUUsNkJBQTZCO1lBQ3hDLFdBQVcsRUFBRSxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUU7WUFDeEMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRTtTQUNyRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNWLElBQUksRUFBRSxJQUFJLEtBQUssRUFBRTtRQUNqQixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxjQUFjO1NBQ3ZCO1FBQ0QsV0FBVyxFQUFFLE9BQU8sRUFBRSxhQUFhLElBQUksRUFBRTtRQUN6QyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsRUFBRTtLQUN4QyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJlcG9ydFJvdXRpbmdDb25maWcgfSBmcm9tICcuL21vZGVscy9yZXBvcnQtcm91dGUubW9kZWxzJztcbmltcG9ydCB7IHJlcG9ydFJlc29sdmVyIH0gZnJvbSAnLi9yZXNvbHZlcnMvcmVwb3J0LnJlc29sdmVyJztcbmltcG9ydCB7IFJvdXRlZFJlcG9ydFJ1bnRpbWVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcm91dGVkLXJlcG9ydC1ydW50aW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSb3V0ZWRSZXBvcnREZXNpZ25lckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9yb3V0ZWQtcmVwb3J0LWRlc2lnbmVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogR2VuZXJhdGVzIEFuZ3VsYXIgUm91dGUgZGVmaW5pdGlvbnMgZm9yIGR5bmFtaWMgcmVwb3J0aW5nIHBhZ2VzIGluIGEgaG9zdCBhcHBsaWNhdGlvbi5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlIGluIGhvc3QgYXBwJ3MgYXBwLnJvdXRlcy50czpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICdyZXBvcnRzJyxcbiAqICAgICBjaGlsZHJlbjogY3JlYXRlUmVwb3J0Um91dGVzKClcbiAqICAgfVxuICogXTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVwb3J0Um91dGVzKGNvbmZpZz86IFJlcG9ydFJvdXRpbmdDb25maWcpOiBSb3V0ZXMge1xuICBjb25zdCByZXBvcnRQYXJhbSA9IGNvbmZpZz8ucmVwb3J0SWRQYXJhbSA/PyAncmVwb3J0SWQnO1xuICBjb25zdCBlbmFibGVEZXNpZ25lciA9IGNvbmZpZz8uZW5hYmxlRGVzaWduZXJSb3V0ZXMgIT09IGZhbHNlO1xuICBjb25zdCBydW50aW1lR3VhcmRzID0gY29uZmlnPy5ydW50aW1lR3VhcmRzID8/IFtdO1xuICBjb25zdCBkZXNpZ25lckd1YXJkcyA9IGNvbmZpZz8uZGVzaWduZXJHdWFyZHMgPz8gW107XG4gIGNvbnN0IGV4dHJhRGF0YSA9IGNvbmZpZz8uZXh0cmFSb3V0ZURhdGEgPz8ge307XG5cbiAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXTtcblxuICBpZiAoZW5hYmxlRGVzaWduZXIpIHtcbiAgICByb3V0ZXMucHVzaCh7XG4gICAgICBwYXRoOiAnbmV3JyxcbiAgICAgIGNvbXBvbmVudDogUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQsXG4gICAgICBjYW5BY3RpdmF0ZTogZGVzaWduZXJHdWFyZHMsXG4gICAgICBkYXRhOiB7IGlzTmV3OiB0cnVlLCAuLi5leHRyYURhdGEgfVxuICAgIH0pO1xuXG4gICAgcm91dGVzLnB1c2goe1xuICAgICAgcGF0aDogYDoke3JlcG9ydFBhcmFtfS9lZGl0YCxcbiAgICAgIGNvbXBvbmVudDogUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQsXG4gICAgICBjYW5BY3RpdmF0ZTogZGVzaWduZXJHdWFyZHMsXG4gICAgICBkYXRhOiB7IGlzRWRpdDogdHJ1ZSwgLi4uZXh0cmFEYXRhIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJvdXRlcy5wdXNoKHtcbiAgICBwYXRoOiBgOiR7cmVwb3J0UGFyYW19YCxcbiAgICBjb21wb25lbnQ6IFJvdXRlZFJlcG9ydFJ1bnRpbWVDb21wb25lbnQsXG4gICAgcmVzb2x2ZToge1xuICAgICAgcmVwb3J0OiByZXBvcnRSZXNvbHZlclxuICAgIH0sXG4gICAgY2FuQWN0aXZhdGU6IHJ1bnRpbWVHdWFyZHMsXG4gICAgZGF0YTogeyAuLi5leHRyYURhdGEgfVxuICB9KTtcblxuICByZXR1cm4gcm91dGVzO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYGJ3YXlzUmVwb3J0Um91dGVzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCd2F5c1JlcG9ydFJvdXRlc09wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIGRlc2lnbmVyL2J1aWxkZXIgcm91dGVzICgnbmV3JyBhbmQgJzpzbHVnL2VkaXQnKS5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2UgKHNpbmNlIGRldmVsb3BlcnMgY2FuIGVtYmVkIDxid2F5cy1yZXBvcnQtYnVpbGRlcj4gZGlyZWN0bHkpLlxuICAgKi9cbiAgaW5jbHVkZUJ1aWxkZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gcm91dGUgZ3VhcmRzIGZvciBsaXZlIHJlcG9ydCBwYWdlcy5cbiAgICovXG4gIHJ1bnRpbWVHdWFyZHM/OiBhbnlbXTtcblxuICAvKipcbiAgICogQ3VzdG9tIHJvdXRlIGd1YXJkcyBmb3IgYnVpbGRlci9kZXNpZ25lciBwYWdlcyBpZiBlbmFibGVkLlxuICAgKi9cbiAgYnVpbGRlckd1YXJkcz86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gcm91dGUgcGFyYW1ldGVyIG5hbWUuIERlZmF1bHRzIHRvICdzbHVnJy5cbiAgICovXG4gIHNsdWdQYXJhbT86IHN0cmluZztcblxuICAvKipcbiAgICogRXh0cmEgc3RhdGljIGRhdGEgcGFzc2VkIGludG8gdGhlIHJvdXRlIGRlZmluaXRpb25zLlxuICAgKi9cbiAgZXh0cmFEYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogRHJvcC1pbiByb3V0ZSBkZWZpbml0aW9ucyBmb3IgYndheXMtcmVwb3J0LlxuICpcbiAqIEV4YW1wbGUgdXNhZ2UgaW4gaG9zdCBhcHBsaWNhdGlvbiBgYXBwLnJvdXRlcy50c2A6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAncmVwb3J0cycsXG4gKiAgICAgY2hpbGRyZW46IGJ3YXlzUmVwb3J0Um91dGVzKCkgIC8vIC9yZXBvcnRzLzpzbHVnIC0+IGxpdmUgcmVwb3J0IHBhZ2VcbiAqICAgfVxuICogXTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gYndheXNSZXBvcnRSb3V0ZXMob3B0aW9ucz86IEJ3YXlzUmVwb3J0Um91dGVzT3B0aW9ucyk6IFJvdXRlcyB7XG4gIGNvbnN0IHBhcmFtID0gb3B0aW9ucz8uc2x1Z1BhcmFtID8/ICdzbHVnJztcbiAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXTtcblxuICBpZiAob3B0aW9ucz8uaW5jbHVkZUJ1aWxkZXIpIHtcbiAgICByb3V0ZXMucHVzaCh7XG4gICAgICBwYXRoOiAnbmV3JyxcbiAgICAgIGNvbXBvbmVudDogUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQsXG4gICAgICBjYW5BY3RpdmF0ZTogb3B0aW9ucy5idWlsZGVyR3VhcmRzID8/IFtdLFxuICAgICAgZGF0YTogeyBpc05ldzogdHJ1ZSwgLi4uKG9wdGlvbnMuZXh0cmFEYXRhID8/IHt9KSB9XG4gICAgfSk7XG5cbiAgICByb3V0ZXMucHVzaCh7XG4gICAgICBwYXRoOiBgOiR7cGFyYW19L2VkaXRgLFxuICAgICAgY29tcG9uZW50OiBSb3V0ZWRSZXBvcnREZXNpZ25lckNvbXBvbmVudCxcbiAgICAgIGNhbkFjdGl2YXRlOiBvcHRpb25zLmJ1aWxkZXJHdWFyZHMgPz8gW10sXG4gICAgICBkYXRhOiB7IGlzRWRpdDogdHJ1ZSwgLi4uKG9wdGlvbnMuZXh0cmFEYXRhID8/IHt9KSB9XG4gICAgfSk7XG4gIH1cblxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYDoke3BhcmFtfWAsXG4gICAgY29tcG9uZW50OiBSb3V0ZWRSZXBvcnRSdW50aW1lQ29tcG9uZW50LFxuICAgIHJlc29sdmU6IHtcbiAgICAgIHJlcG9ydDogcmVwb3J0UmVzb2x2ZXJcbiAgICB9LFxuICAgIGNhbkFjdGl2YXRlOiBvcHRpb25zPy5ydW50aW1lR3VhcmRzID8/IFtdLFxuICAgIGRhdGE6IHsgLi4uKG9wdGlvbnM/LmV4dHJhRGF0YSA/PyB7fSkgfVxuICB9KTtcblxuICByZXR1cm4gcm91dGVzO1xufVxuIl19
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3JvdXRpbmcvcmVwb3J0LXJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDNUYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFOUY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQTRCO0lBQzdELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxhQUFhLElBQUksVUFBVSxDQUFDO0lBQ3hELE1BQU0sY0FBYyxHQUFHLE1BQU0sRUFBRSxvQkFBb0IsS0FBSyxLQUFLLENBQUM7SUFDOUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxFQUFFLGFBQWEsSUFBSSxFQUFFLENBQUM7SUFDbEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxFQUFFLGNBQWMsSUFBSSxFQUFFLENBQUM7SUFDcEQsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBRTVFLE1BQU0sTUFBTSxHQUFXLEVBQUUsQ0FBQztJQUUxQixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDVixJQUFJLEVBQUUsS0FBSztZQUNYLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsV0FBVyxFQUFFLGNBQWM7WUFDM0IsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFNBQVMsRUFBRTtTQUNwQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsSUFBSSxFQUFFLElBQUksV0FBVyxPQUFPO1lBQzVCLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsV0FBVyxFQUFFLGNBQWM7WUFDM0IsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFNBQVMsRUFBRTtTQUNyQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNWLElBQUksRUFBRSxJQUFJLFdBQVcsRUFBRTtRQUN2QixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxjQUFjO1NBQ3ZCO1FBQ0QsV0FBVyxFQUFFLGFBQWE7UUFDMUIsSUFBSSxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRTtLQUNoRCxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBaUNEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUFrQztJQUNsRSxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsU0FBUyxJQUFJLE1BQU0sQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7SUFFMUIsSUFBSSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLElBQUksRUFBRSxLQUFLO1lBQ1gsU0FBUyxFQUFFLDZCQUE2QjtZQUN4QyxXQUFXLEVBQUUsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFO1lBQ3hDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRTtTQUMxRSxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsSUFBSSxFQUFFLElBQUksS0FBSyxPQUFPO1lBQ3RCLFNBQVMsRUFBRSw2QkFBNkI7WUFDeEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksRUFBRTtZQUN4QyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUU7U0FDM0UsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDVixJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUU7UUFDakIsU0FBUyxFQUFFLDRCQUE0QjtRQUN2QyxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsY0FBYztTQUN2QjtRQUNELFdBQVcsRUFBRSxPQUFPLEVBQUUsYUFBYSxJQUFJLEVBQUU7UUFDekMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUU7S0FDbEcsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBSZXBvcnRSb3V0aW5nQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvcmVwb3J0LXJvdXRlLm1vZGVscyc7XG5pbXBvcnQgeyByZXBvcnRSZXNvbHZlciB9IGZyb20gJy4vcmVzb2x2ZXJzL3JlcG9ydC5yZXNvbHZlcic7XG5pbXBvcnQgeyBSb3V0ZWRSZXBvcnRSdW50aW1lQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3JvdXRlZC1yZXBvcnQtcnVudGltZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcm91dGVkLXJlcG9ydC1kZXNpZ25lci5jb21wb25lbnQnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBBbmd1bGFyIFJvdXRlIGRlZmluaXRpb25zIGZvciBkeW5hbWljIHJlcG9ydGluZyBwYWdlcyBpbiBhIGhvc3QgYXBwbGljYXRpb24uXG4gKlxuICogRXhhbXBsZSB1c2FnZSBpbiBob3N0IGFwcCdzIGFwcC5yb3V0ZXMudHM6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAncmVwb3J0cycsXG4gKiAgICAgY2hpbGRyZW46IGNyZWF0ZVJlcG9ydFJvdXRlcygpXG4gKiAgIH1cbiAqIF07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlcG9ydFJvdXRlcyhjb25maWc/OiBSZXBvcnRSb3V0aW5nQ29uZmlnKTogUm91dGVzIHtcbiAgY29uc3QgcmVwb3J0UGFyYW0gPSBjb25maWc/LnJlcG9ydElkUGFyYW0gPz8gJ3JlcG9ydElkJztcbiAgY29uc3QgZW5hYmxlRGVzaWduZXIgPSBjb25maWc/LmVuYWJsZURlc2lnbmVyUm91dGVzICE9PSBmYWxzZTtcbiAgY29uc3QgcnVudGltZUd1YXJkcyA9IGNvbmZpZz8ucnVudGltZUd1YXJkcyA/PyBbXTtcbiAgY29uc3QgZGVzaWduZXJHdWFyZHMgPSBjb25maWc/LmRlc2lnbmVyR3VhcmRzID8/IFtdO1xuICBjb25zdCBleHRyYURhdGEgPSB7IC4uLmNvbmZpZz8uZXh0cmFSb3V0ZURhdGEsIHJlcG9ydElkUGFyYW06IHJlcG9ydFBhcmFtIH07XG5cbiAgY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXTtcblxuICBpZiAoZW5hYmxlRGVzaWduZXIpIHtcbiAgICByb3V0ZXMucHVzaCh7XG4gICAgICBwYXRoOiAnbmV3JyxcbiAgICAgIGNvbXBvbmVudDogUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQsXG4gICAgICBjYW5BY3RpdmF0ZTogZGVzaWduZXJHdWFyZHMsXG4gICAgICBkYXRhOiB7IGlzTmV3OiB0cnVlLCAuLi5leHRyYURhdGEgfVxuICAgIH0pO1xuXG4gICAgcm91dGVzLnB1c2goe1xuICAgICAgcGF0aDogYDoke3JlcG9ydFBhcmFtfS9lZGl0YCxcbiAgICAgIGNvbXBvbmVudDogUm91dGVkUmVwb3J0RGVzaWduZXJDb21wb25lbnQsXG4gICAgICBjYW5BY3RpdmF0ZTogZGVzaWduZXJHdWFyZHMsXG4gICAgICBkYXRhOiB7IGlzRWRpdDogdHJ1ZSwgLi4uZXh0cmFEYXRhIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJvdXRlcy5wdXNoKHtcbiAgICBwYXRoOiBgOiR7cmVwb3J0UGFyYW19YCxcbiAgICBjb21wb25lbnQ6IFJvdXRlZFJlcG9ydFJ1bnRpbWVDb21wb25lbnQsXG4gICAgcmVzb2x2ZToge1xuICAgICAgcmVwb3J0OiByZXBvcnRSZXNvbHZlclxuICAgIH0sXG4gICAgY2FuQWN0aXZhdGU6IHJ1bnRpbWVHdWFyZHMsXG4gICAgZGF0YTogeyAuLi5leHRyYURhdGEsIGNhbkVkaXQ6IGVuYWJsZURlc2lnbmVyIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJvdXRlcztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBid2F5c1JlcG9ydFJvdXRlc2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQndheXNSZXBvcnRSb3V0ZXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSBkZXNpZ25lci9idWlsZGVyIHJvdXRlcyAoJ25ldycgYW5kICc6c2x1Zy9lZGl0JykuXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlIChzaW5jZSBkZXZlbG9wZXJzIGNhbiBlbWJlZCA8YndheXMtcmVwb3J0LWJ1aWxkZXI+IGRpcmVjdGx5KS5cbiAgICovXG4gIGluY2x1ZGVCdWlsZGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIHJvdXRlIGd1YXJkcyBmb3IgbGl2ZSByZXBvcnQgcGFnZXMuXG4gICAqL1xuICBydW50aW1lR3VhcmRzPzogYW55W107XG5cbiAgLyoqXG4gICAqIEN1c3RvbSByb3V0ZSBndWFyZHMgZm9yIGJ1aWxkZXIvZGVzaWduZXIgcGFnZXMgaWYgZW5hYmxlZC5cbiAgICovXG4gIGJ1aWxkZXJHdWFyZHM/OiBhbnlbXTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIHJvdXRlIHBhcmFtZXRlciBuYW1lLiBEZWZhdWx0cyB0byAnc2x1ZycuXG4gICAqL1xuICBzbHVnUGFyYW0/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dHJhIHN0YXRpYyBkYXRhIHBhc3NlZCBpbnRvIHRoZSByb3V0ZSBkZWZpbml0aW9ucy5cbiAgICovXG4gIGV4dHJhRGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKipcbiAqIERyb3AtaW4gcm91dGUgZGVmaW5pdGlvbnMgZm9yIGJ3YXlzLXJlcG9ydC5cbiAqXG4gKiBFeGFtcGxlIHVzYWdlIGluIGhvc3QgYXBwbGljYXRpb24gYGFwcC5yb3V0ZXMudHNgOlxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJ3JlcG9ydHMnLFxuICogICAgIGNoaWxkcmVuOiBid2F5c1JlcG9ydFJvdXRlcygpICAvLyAvcmVwb3J0cy86c2x1ZyAtPiBsaXZlIHJlcG9ydCBwYWdlXG4gKiAgIH1cbiAqIF07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ3YXlzUmVwb3J0Um91dGVzKG9wdGlvbnM/OiBCd2F5c1JlcG9ydFJvdXRlc09wdGlvbnMpOiBSb3V0ZXMge1xuICBjb25zdCBwYXJhbSA9IG9wdGlvbnM/LnNsdWdQYXJhbSA/PyAnc2x1Zyc7XG4gIGNvbnN0IHJvdXRlczogUm91dGVzID0gW107XG5cbiAgaWYgKG9wdGlvbnM/LmluY2x1ZGVCdWlsZGVyKSB7XG4gICAgcm91dGVzLnB1c2goe1xuICAgICAgcGF0aDogJ25ldycsXG4gICAgICBjb21wb25lbnQ6IFJvdXRlZFJlcG9ydERlc2lnbmVyQ29tcG9uZW50LFxuICAgICAgY2FuQWN0aXZhdGU6IG9wdGlvbnMuYnVpbGRlckd1YXJkcyA/PyBbXSxcbiAgICAgIGRhdGE6IHsgaXNOZXc6IHRydWUsIC4uLihvcHRpb25zLmV4dHJhRGF0YSA/PyB7fSksIHJlcG9ydElkUGFyYW06IHBhcmFtIH1cbiAgICB9KTtcblxuICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgIHBhdGg6IGA6JHtwYXJhbX0vZWRpdGAsXG4gICAgICBjb21wb25lbnQ6IFJvdXRlZFJlcG9ydERlc2lnbmVyQ29tcG9uZW50LFxuICAgICAgY2FuQWN0aXZhdGU6IG9wdGlvbnMuYnVpbGRlckd1YXJkcyA/PyBbXSxcbiAgICAgIGRhdGE6IHsgaXNFZGl0OiB0cnVlLCAuLi4ob3B0aW9ucy5leHRyYURhdGEgPz8ge30pLCByZXBvcnRJZFBhcmFtOiBwYXJhbSB9XG4gICAgfSk7XG4gIH1cblxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYDoke3BhcmFtfWAsXG4gICAgY29tcG9uZW50OiBSb3V0ZWRSZXBvcnRSdW50aW1lQ29tcG9uZW50LFxuICAgIHJlc29sdmU6IHtcbiAgICAgIHJlcG9ydDogcmVwb3J0UmVzb2x2ZXJcbiAgICB9LFxuICAgIGNhbkFjdGl2YXRlOiBvcHRpb25zPy5ydW50aW1lR3VhcmRzID8/IFtdLFxuICAgIGRhdGE6IHsgLi4uKG9wdGlvbnM/LmV4dHJhRGF0YSA/PyB7fSksIHJlcG9ydElkUGFyYW06IHBhcmFtLCBjYW5FZGl0OiAhIW9wdGlvbnM/LmluY2x1ZGVCdWlsZGVyIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJvdXRlcztcbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export function reportRouteIdentifier(route) {
2
+ const key = route.data?.['reportIdParam'];
3
+ return (key ? route.paramMap.get(key) : null) ?? route.paramMap.get('slug') ?? route.paramMap.get('reportId');
4
+ }
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXJvdXRlLWlkZW50aWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9yb3V0aW5nL3Jlc29sdmVycy9yZXBvcnQtcm91dGUtaWRlbnRpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBNkI7SUFDakUsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBdUIsQ0FBQztJQUNoRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0Um91dGVJZGVudGlmaWVyKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGtleSA9IHJvdXRlLmRhdGE/LlsncmVwb3J0SWRQYXJhbSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChrZXkgPyByb3V0ZS5wYXJhbU1hcC5nZXQoa2V5KSA6IG51bGwpID8/IHJvdXRlLnBhcmFtTWFwLmdldCgnc2x1ZycpID8/IHJvdXRlLnBhcmFtTWFwLmdldCgncmVwb3J0SWQnKTtcbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { reportRouteIdentifier } from './report-route-identifier';
1
2
  import { inject } from '@angular/core';
2
3
  import { of } from 'rxjs';
3
4
  import { catchError } from 'rxjs/operators';
@@ -8,7 +9,7 @@ import { ReportStoreService } from '../../persistence/services/report-store.serv
8
9
  */
9
10
  export const reportResolver = (route, _state) => {
10
11
  const store = inject(ReportStoreService);
11
- const identifier = route.paramMap.get('slug') ?? route.paramMap.get('reportId');
12
+ const identifier = reportRouteIdentifier(route);
12
13
  if (!identifier) {
13
14
  return of(null);
14
15
  }
@@ -17,4 +18,4 @@ export const reportResolver = (route, _state) => {
17
18
  return of(null);
18
19
  }));
19
20
  };
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LnJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcm91dGluZy9yZXNvbHZlcnMvcmVwb3J0LnJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFckY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUF1QyxDQUNoRSxLQUE2QixFQUM3QixNQUEyQixFQUNVLEVBQUU7SUFDdkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDekMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFaEYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQzVDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJlc29sdmVGbiwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xuaW1wb3J0IHsgUmVwb3J0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcGVyc2lzdGVuY2Uvc2VydmljZXMvcmVwb3J0LXN0b3JlLnNlcnZpY2UnO1xuXG4vKipcbiAqIEZ1bmN0aW9uYWwgcmVzb2x2ZXIgdGhhdCBmZXRjaGVzIGEgUmVwb3J0RGVmaW5pdGlvbiB1c2luZyBSZXBvcnRTdG9yZVNlcnZpY2VcbiAqIGJhc2VkIG9uIHRoZSA6c2x1ZyBvciA6cmVwb3J0SWQgcm91dGUgcGFyYW1ldGVyLlxuICovXG5leHBvcnQgY29uc3QgcmVwb3J0UmVzb2x2ZXI6IFJlc29sdmVGbjxSZXBvcnREZWZpbml0aW9uIHwgbnVsbD4gPSAoXG4gIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBfc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3Rcbik6IE9ic2VydmFibGU8UmVwb3J0RGVmaW5pdGlvbiB8IG51bGw+ID0+IHtcbiAgY29uc3Qgc3RvcmUgPSBpbmplY3QoUmVwb3J0U3RvcmVTZXJ2aWNlKTtcbiAgY29uc3QgaWRlbnRpZmllciA9IHJvdXRlLnBhcmFtTWFwLmdldCgnc2x1ZycpID8/IHJvdXRlLnBhcmFtTWFwLmdldCgncmVwb3J0SWQnKTtcblxuICBpZiAoIWlkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICByZXR1cm4gc3RvcmUubG9hZFJlcG9ydEJ5U2x1ZyhpZGVudGlmaWVyKS5waXBlKFxuICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgW2J3YXlzLXJlcG9ydF0gRmFpbGVkIHRvIHJlc29sdmUgcmVwb3J0ICcke2lkZW50aWZpZXJ9JzpgLCBlcnIpO1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH0pXG4gICk7XG59O1xuIl19
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LnJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcm91dGluZy9yZXNvbHZlcnMvcmVwb3J0LnJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkMsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsVUFBVSxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFckY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUF1QyxDQUNoRSxLQUE2QixFQUM3QixNQUEyQixFQUNVLEVBQUU7SUFDdkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDekMsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFaEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQzVDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNENBQTRDLFVBQVUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXBvcnRSb3V0ZUlkZW50aWZpZXIgfSBmcm9tICcuL3JlcG9ydC1yb3V0ZS1pZGVudGlmaWVyJztcbmltcG9ydCB7IGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUmVzb2x2ZUZuLCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3QgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscyc7XG5pbXBvcnQgeyBSZXBvcnRTdG9yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9wZXJzaXN0ZW5jZS9zZXJ2aWNlcy9yZXBvcnQtc3RvcmUuc2VydmljZSc7XG5cbi8qKlxuICogRnVuY3Rpb25hbCByZXNvbHZlciB0aGF0IGZldGNoZXMgYSBSZXBvcnREZWZpbml0aW9uIHVzaW5nIFJlcG9ydFN0b3JlU2VydmljZVxuICogYmFzZWQgb24gdGhlIDpzbHVnIG9yIDpyZXBvcnRJZCByb3V0ZSBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCByZXBvcnRSZXNvbHZlcjogUmVzb2x2ZUZuPFJlcG9ydERlZmluaXRpb24gfCBudWxsPiA9IChcbiAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIF9zdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuKTogT2JzZXJ2YWJsZTxSZXBvcnREZWZpbml0aW9uIHwgbnVsbD4gPT4ge1xuICBjb25zdCBzdG9yZSA9IGluamVjdChSZXBvcnRTdG9yZVNlcnZpY2UpO1xuICBjb25zdCBpZGVudGlmaWVyID0gcmVwb3J0Um91dGVJZGVudGlmaWVyKHJvdXRlKTtcblxuICBpZiAoIWlkZW50aWZpZXIpIHtcbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICByZXR1cm4gc3RvcmUubG9hZFJlcG9ydEJ5U2x1ZyhpZGVudGlmaWVyKS5waXBlKFxuICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgW2J3YXlzLXJlcG9ydF0gRmFpbGVkIHRvIHJlc29sdmUgcmVwb3J0ICcke2lkZW50aWZpZXJ9JzpgLCBlcnIpO1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH0pXG4gICk7XG59O1xuIl19
@@ -1,5 +1,7 @@
1
+ import { BWAYS_REPORT_ENDPOINTS } from '../../data-access/adapters/endpoint-tokens';
2
+ import { REPORTING_CONFIG } from '../../core/tokens/reporting-config.token';
1
3
  import { inject, Injectable } from '@angular/core';
2
- import { throwError } from 'rxjs';
4
+ import { throwError, map, timeout, take } from 'rxjs';
3
5
  import { ReportDataSourceAdapter } from '../../data-access/contracts/data-source.contract';
4
6
  import { ReportSessionContextService } from '../../core/services/report-session-context.service';
5
7
  import { ReportApiExecutionService } from '../../core/services/report-api-execution.service';
@@ -10,6 +12,17 @@ import * as i0 from "@angular/core";
10
12
  * Live Preview and the designer canvas so all three behave identically.
11
13
  */
12
14
  export class ReportExecutionService {
15
+ config = inject(REPORTING_CONFIG, { optional: true });
16
+ endpoints = inject(BWAYS_REPORT_ENDPOINTS, { optional: true });
17
+ guard(source) {
18
+ const context = () => JSON.stringify([this.session?.getCurrentSessionContext() ?? {}, this.endpoints ? { ...this.endpoints } : null]);
19
+ const captured = context();
20
+ return source.pipe(take(1), timeout({ first: this.config?.executionTimeoutMs ?? this.config?.lookupTimeoutMs ?? 300000 }), map(value => {
21
+ if (captured !== context())
22
+ throw new Error('Reporting context changed. Please run the report again.');
23
+ return value;
24
+ }));
25
+ }
13
26
  adapter = inject(ReportDataSourceAdapter, { optional: true });
14
27
  session = inject(ReportSessionContextService, { optional: true });
15
28
  apiExecutionService = inject(ReportApiExecutionService, { optional: true });
@@ -49,19 +62,19 @@ export class ReportExecutionService {
49
62
  ds.endpoint.startsWith('https://') ||
50
63
  (ds.type !== 'table' && ds.type !== 'view' && ds.type !== 'stored_procedure' && ds.endpoint.startsWith('/'));
51
64
  if (isApiSource && this.apiExecutionService) {
52
- return this.apiExecutionService.executeApi({
65
+ return this.guard(this.apiExecutionService.executeApi({
53
66
  endpoint: ds.endpoint,
54
67
  method: ds.method,
55
68
  dataPath: ds.dataPath,
56
69
  headers: ds.headers,
57
70
  useProxy: ds.useProxy,
58
71
  bodyTemplate: ds.bodyTemplate,
59
- }, flattenedFormValues, resolved);
72
+ }, flattenedFormValues, resolved));
60
73
  }
61
74
  if (!this.adapter) {
62
75
  return throwError(() => new Error('No ReportDataSourceAdapter provided to execute the data source.'));
63
76
  }
64
- return this.adapter.execute({ ...ds, name: ds.name || ds.endpoint, type: ds.type ?? 'stored_procedure' }, params);
77
+ return this.guard(this.adapter.execute({ ...ds, name: ds.name || ds.endpoint, type: ds.type ?? 'stored_procedure' }, params));
65
78
  }
66
79
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportExecutionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
67
80
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportExecutionService, providedIn: 'root' });
@@ -70,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
70
83
  type: Injectable,
71
84
  args: [{ providedIn: 'root' }]
72
85
  }] });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4ZWN1dGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcnVudGltZS9yZXBvcnQtZXhlY3V0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDBCQUEwQixFQUMxQix3QkFBd0IsR0FDekIsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFFaEQ7OztHQUdHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQUNoQixPQUFPLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUQsT0FBTyxHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTdGLDhFQUE4RTtJQUM5RSxnQkFBZ0IsQ0FBQyxHQUFxQixFQUFFLFVBQW1DO1FBQ3pFLE1BQU0sRUFBRSxHQUFHLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sdUJBQXVCLENBQUMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBcUIsRUFBRSxVQUFtQztRQUNoRSxNQUFNLEVBQUUsR0FBRywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDUixPQUFPLFVBQVUsQ0FDZixHQUFHLEVBQUUsQ0FDSCxJQUFJLEtBQUssQ0FDUCxtSEFBbUgsQ0FDcEgsQ0FDSixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcsd0JBQXdCLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVyRixtRkFBbUY7UUFDbkYsTUFBTSxtQkFBbUIsR0FBNEIsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQ3ZFLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxNQUFNLEdBQUcsR0FBRyxDQUE0QixDQUFDO2dCQUN6QyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNqQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUMvQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUM5QyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMxQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDO3dCQUFFLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDcEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQzt3QkFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hGLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBRXZELDBFQUEwRTtRQUMxRSxNQUFNLFdBQVcsR0FDZixFQUFFLENBQUMsSUFBSSxLQUFLLEtBQUs7WUFDakIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ2pDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUNsQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssa0JBQWtCLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUvRyxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQ3hDO2dCQUNFLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUTtnQkFDckIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFhO2dCQUN4QixRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVE7Z0JBQ3JCLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTztnQkFDbkIsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRO2dCQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVk7YUFDOUIsRUFDRCxtQkFBbUIsRUFDbkIsUUFBUSxDQUNULENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3pCLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxFQUM1RSxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7d0dBekVVLHNCQUFzQjs0R0FBdEIsc0JBQXNCLGNBRFQsTUFBTTs7NEZBQ25CLHNCQUFzQjtrQkFEbEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnREYXRhU291cmNlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9kYXRhLXNvdXJjZS5jb250cmFjdCc7XG5pbXBvcnQgeyBSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zZXNzaW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRBcGlFeGVjdXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtYXBpLWV4ZWN1dGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGZpbmRNaXNzaW5nQ2FudmFzRmllbGRzLFxuICByZXNvbHZlRXhlY3V0aW9uRGF0YVNvdXJjZSxcbiAgcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzLFxufSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL3JlcG9ydC1wYXJhbWV0ZXIudXRpbCc7XG5cbi8qKlxuICogUnVucyBhIHJlcG9ydCdzIHJlc3VsdCBxdWVyeS4gU2hhcmVkIGJ5IHRoZSBMaXZlIFJ1bnRpbWUsIHRoZSBkZXNpZ25lcidzXG4gKiBMaXZlIFByZXZpZXcgYW5kIHRoZSBkZXNpZ25lciBjYW52YXMgc28gYWxsIHRocmVlIGJlaGF2ZSBpZGVudGljYWxseS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRFeGVjdXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhZGFwdGVyID0gaW5qZWN0KFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaUV4ZWN1dGlvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogQ2FudmFzIGZpZWxkIGtleXMgdGhlIHVzZXIgc3RpbGwgaGFzIHRvIGZpbGwgYmVmb3JlIHRoZSByZXBvcnQgY2FuIHJ1bi4gKi9cbiAgZ2V0TWlzc2luZ0ZpZWxkcyhkZWY6IFJlcG9ydERlZmluaXRpb24sIGZvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRzID0gcmVzb2x2ZUV4ZWN1dGlvbkRhdGFTb3VyY2UoZGVmKTtcbiAgICByZXR1cm4gZmluZE1pc3NpbmdDYW52YXNGaWVsZHMoZHM/LnBhcmFtZXRlck1hcHBpbmdzLCBmb3JtVmFsdWVzKTtcbiAgfVxuXG4gIGV4ZWN1dGUoZGVmOiBSZXBvcnREZWZpbml0aW9uLCBmb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IE9ic2VydmFibGU8dW5rbm93bltdPiB7XG4gICAgY29uc3QgZHMgPSByZXNvbHZlRXhlY3V0aW9uRGF0YVNvdXJjZShkZWYpO1xuICAgIGlmICghZHMpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICdObyBkYXRhIHNvdXJjZSBjb25maWd1cmVkLiBTZWxlY3QgdGhlIFJ1biBSZXBvcnQgYnV0dG9uIGFuZCBjaG9vc2UgYSBzdG9yZWQgcHJvY2VkdXJlIGluIGl0cyBSZXBvcnQgRGF0YSBzZWN0aW9uLidcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb24/LmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzKGRzLnBhcmFtZXRlck1hcHBpbmdzLCBzZXNzaW9uLCBmb3JtVmFsdWVzKTtcblxuICAgIC8vIEV4cGFuZCBjb21wb3VuZCBvYmplY3RzIChlLmcuIGRhdGVSYW5nZTogeyBmcm9tLCB0byB9KSBpbnRvIHRvcC1sZXZlbCBwYXJhbWV0ZXJzXG4gICAgY29uc3QgZmxhdHRlbmVkRm9ybVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmZvcm1WYWx1ZXMgfTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhmb3JtVmFsdWVzKSkge1xuICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGlmICgnZnJvbScgaW4gb2JqICYmICd0bycgaW4gb2JqKSB7XG4gICAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlc1tgJHtrfV9mcm9tYF0gPSBvYmpbJ2Zyb20nXTtcbiAgICAgICAgICBmbGF0dGVuZWRGb3JtVmFsdWVzW2Ake2t9X3RvYF0gPSBvYmpbJ3RvJ107XG4gICAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlc1tgJHtrfUZyb21gXSA9IG9ialsnZnJvbSddO1xuICAgICAgICAgIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbYCR7a31Ub2BdID0gb2JqWyd0byddO1xuICAgICAgICAgIGlmICghZmxhdHRlbmVkRm9ybVZhbHVlc1snZnJvbURhdGUnXSkgZmxhdHRlbmVkRm9ybVZhbHVlc1snZnJvbURhdGUnXSA9IG9ialsnZnJvbSddO1xuICAgICAgICAgIGlmICghZmxhdHRlbmVkRm9ybVZhbHVlc1sndG9EYXRlJ10pIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbJ3RvRGF0ZSddID0gb2JqWyd0byddO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0geyAuLi5mbGF0dGVuZWRGb3JtVmFsdWVzLCAuLi5yZXNvbHZlZCB9O1xuXG4gICAgLy8gRGVsZWdhdGUgdG8gUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSBpZiBkYXRhIHNvdXJjZSBpcyBhbiBBUEkgZW5kcG9pbnRcbiAgICBjb25zdCBpc0FwaVNvdXJjZSA9XG4gICAgICBkcy50eXBlID09PSAnYXBpJyB8fFxuICAgICAgZHMuZW5kcG9pbnQuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8XG4gICAgICBkcy5lbmRwb2ludC5zdGFydHNXaXRoKCdodHRwczovLycpIHx8XG4gICAgICAoZHMudHlwZSAhPT0gJ3RhYmxlJyAmJiBkcy50eXBlICE9PSAndmlldycgJiYgZHMudHlwZSAhPT0gJ3N0b3JlZF9wcm9jZWR1cmUnICYmIGRzLmVuZHBvaW50LnN0YXJ0c1dpdGgoJy8nKSk7XG5cbiAgICBpZiAoaXNBcGlTb3VyY2UgJiYgdGhpcy5hcGlFeGVjdXRpb25TZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGlFeGVjdXRpb25TZXJ2aWNlLmV4ZWN1dGVBcGkoXG4gICAgICAgIHtcbiAgICAgICAgICBlbmRwb2ludDogZHMuZW5kcG9pbnQsXG4gICAgICAgICAgbWV0aG9kOiBkcy5tZXRob2QgYXMgYW55LFxuICAgICAgICAgIGRhdGFQYXRoOiBkcy5kYXRhUGF0aCxcbiAgICAgICAgICBoZWFkZXJzOiBkcy5oZWFkZXJzLFxuICAgICAgICAgIHVzZVByb3h5OiBkcy51c2VQcm94eSxcbiAgICAgICAgICBib2R5VGVtcGxhdGU6IGRzLmJvZHlUZW1wbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlcyxcbiAgICAgICAgcmVzb2x2ZWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTm8gUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgcHJvdmlkZWQgdG8gZXhlY3V0ZSB0aGUgZGF0YSBzb3VyY2UuJykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZXhlY3V0ZShcbiAgICAgIHsgLi4uZHMsIG5hbWU6IGRzLm5hbWUgfHwgZHMuZW5kcG9pbnQsIHR5cGU6IGRzLnR5cGUgPz8gJ3N0b3JlZF9wcm9jZWR1cmUnIH0sXG4gICAgICBwYXJhbXNcbiAgICApO1xuICB9XG59XG4iXX0=
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4ZWN1dGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcnVudGltZS9yZXBvcnQtZXhlY3V0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDBCQUEwQixFQUMxQix3QkFBd0IsR0FDekIsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFFaEQ7OztHQUdHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEQsU0FBUyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLEtBQUssQ0FBSSxNQUFxQjtRQUNwQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RJLE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckksSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztZQUN2RyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBQ2dCLE9BQU8sR0FBRyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RCxPQUFPLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEUsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFN0YsOEVBQThFO0lBQzlFLGdCQUFnQixDQUFDLEdBQXFCLEVBQUUsVUFBbUM7UUFDekUsTUFBTSxFQUFFLEdBQUcsMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsT0FBTyx1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFxQixFQUFFLFVBQW1DO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNSLE9BQU8sVUFBVSxDQUNmLEdBQUcsRUFBRSxDQUNILElBQUksS0FBSyxDQUNQLG1IQUFtSCxDQUNwSCxDQUNKLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvRCxNQUFNLFFBQVEsR0FBRyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXJGLG1GQUFtRjtRQUNuRixNQUFNLG1CQUFtQixHQUE0QixFQUFFLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdkUsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELE1BQU0sR0FBRyxHQUFHLENBQTRCLENBQUM7Z0JBQ3pDLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2pDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQy9DLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzlDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7d0JBQUUsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwRixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDO3dCQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEYsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFFdkQsMEVBQTBFO1FBQzFFLE1BQU0sV0FBVyxHQUNmLEVBQUUsQ0FBQyxJQUFJLEtBQUssS0FBSztZQUNqQixFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDakMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQ2xDLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxrQkFBa0IsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRS9HLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUNuRDtnQkFDRSxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVE7Z0JBQ3JCLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBYTtnQkFDeEIsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRO2dCQUNyQixPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU87Z0JBQ25CLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUTtnQkFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZO2FBQzlCLEVBQ0QsbUJBQW1CLEVBQ25CLFFBQVEsQ0FDVCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDcEMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLEVBQzVFLE1BQU0sQ0FDUCxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQW5GVSxzQkFBc0I7NEdBQXRCLHNCQUFzQixjQURULE1BQU07OzRGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQldBWVNfUkVQT1JUX0VORFBPSU5UUyB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2VuZHBvaW50LXRva2Vucyc7XG5pbXBvcnQgeyBSRVBPUlRJTkdfQ09ORklHIH0gZnJvbSAnLi4vLi4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIG1hcCwgdGltZW91dCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL2RhdGEtc291cmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEFwaUV4ZWN1dGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1hcGktZXhlY3V0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgZmluZE1pc3NpbmdDYW52YXNGaWVsZHMsXG4gIHJlc29sdmVFeGVjdXRpb25EYXRhU291cmNlLFxuICByZXNvbHZlUGFyYW1ldGVyTWFwcGluZ3MsXG59IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvcmVwb3J0LXBhcmFtZXRlci51dGlsJztcblxuLyoqXG4gKiBSdW5zIGEgcmVwb3J0J3MgcmVzdWx0IHF1ZXJ5LiBTaGFyZWQgYnkgdGhlIExpdmUgUnVudGltZSwgdGhlIGRlc2lnbmVyJ3NcbiAqIExpdmUgUHJldmlldyBhbmQgdGhlIGRlc2lnbmVyIGNhbnZhcyBzbyBhbGwgdGhyZWUgYmVoYXZlIGlkZW50aWNhbGx5LlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFJlcG9ydEV4ZWN1dGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50cyA9IGluamVjdChCV0FZU19SRVBPUlRfRU5EUE9JTlRTLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIGd1YXJkPFQ+KHNvdXJjZTogT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSAoKSA9PiBKU09OLnN0cmluZ2lmeShbdGhpcy5zZXNzaW9uPy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKSA/PyB7fSwgdGhpcy5lbmRwb2ludHMgPyB7IC4uLnRoaXMuZW5kcG9pbnRzIH0gOiBudWxsXSk7XG4gICAgY29uc3QgY2FwdHVyZWQgPSBjb250ZXh0KCk7XG4gICAgcmV0dXJuIHNvdXJjZS5waXBlKHRha2UoMSksIHRpbWVvdXQoeyBmaXJzdDogdGhpcy5jb25maWc/LmV4ZWN1dGlvblRpbWVvdXRNcyA/PyB0aGlzLmNvbmZpZz8ubG9va3VwVGltZW91dE1zID8/IDMwMDAwMCB9KSwgbWFwKHZhbHVlID0+IHtcbiAgICAgIGlmIChjYXB0dXJlZCAhPT0gY29udGV4dCgpKSB0aHJvdyBuZXcgRXJyb3IoJ1JlcG9ydGluZyBjb250ZXh0IGNoYW5nZWQuIFBsZWFzZSBydW4gdGhlIHJlcG9ydCBhZ2Fpbi4nKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KSk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBhZGFwdGVyID0gaW5qZWN0KFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaUV4ZWN1dGlvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogQ2FudmFzIGZpZWxkIGtleXMgdGhlIHVzZXIgc3RpbGwgaGFzIHRvIGZpbGwgYmVmb3JlIHRoZSByZXBvcnQgY2FuIHJ1bi4gKi9cbiAgZ2V0TWlzc2luZ0ZpZWxkcyhkZWY6IFJlcG9ydERlZmluaXRpb24sIGZvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRzID0gcmVzb2x2ZUV4ZWN1dGlvbkRhdGFTb3VyY2UoZGVmKTtcbiAgICByZXR1cm4gZmluZE1pc3NpbmdDYW52YXNGaWVsZHMoZHM/LnBhcmFtZXRlck1hcHBpbmdzLCBmb3JtVmFsdWVzKTtcbiAgfVxuXG4gIGV4ZWN1dGUoZGVmOiBSZXBvcnREZWZpbml0aW9uLCBmb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IE9ic2VydmFibGU8dW5rbm93bltdPiB7XG4gICAgY29uc3QgZHMgPSByZXNvbHZlRXhlY3V0aW9uRGF0YVNvdXJjZShkZWYpO1xuICAgIGlmICghZHMpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICdObyBkYXRhIHNvdXJjZSBjb25maWd1cmVkLiBTZWxlY3QgdGhlIFJ1biBSZXBvcnQgYnV0dG9uIGFuZCBjaG9vc2UgYSBzdG9yZWQgcHJvY2VkdXJlIGluIGl0cyBSZXBvcnQgRGF0YSBzZWN0aW9uLidcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb24/LmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzKGRzLnBhcmFtZXRlck1hcHBpbmdzLCBzZXNzaW9uLCBmb3JtVmFsdWVzKTtcblxuICAgIC8vIEV4cGFuZCBjb21wb3VuZCBvYmplY3RzIChlLmcuIGRhdGVSYW5nZTogeyBmcm9tLCB0byB9KSBpbnRvIHRvcC1sZXZlbCBwYXJhbWV0ZXJzXG4gICAgY29uc3QgZmxhdHRlbmVkRm9ybVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmZvcm1WYWx1ZXMgfTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhmb3JtVmFsdWVzKSkge1xuICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGlmICgnZnJvbScgaW4gb2JqICYmICd0bycgaW4gb2JqKSB7XG4gICAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlc1tgJHtrfV9mcm9tYF0gPSBvYmpbJ2Zyb20nXTtcbiAgICAgICAgICBmbGF0dGVuZWRGb3JtVmFsdWVzW2Ake2t9X3RvYF0gPSBvYmpbJ3RvJ107XG4gICAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlc1tgJHtrfUZyb21gXSA9IG9ialsnZnJvbSddO1xuICAgICAgICAgIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbYCR7a31Ub2BdID0gb2JqWyd0byddO1xuICAgICAgICAgIGlmICghZmxhdHRlbmVkRm9ybVZhbHVlc1snZnJvbURhdGUnXSkgZmxhdHRlbmVkRm9ybVZhbHVlc1snZnJvbURhdGUnXSA9IG9ialsnZnJvbSddO1xuICAgICAgICAgIGlmICghZmxhdHRlbmVkRm9ybVZhbHVlc1sndG9EYXRlJ10pIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbJ3RvRGF0ZSddID0gb2JqWyd0byddO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0geyAuLi5mbGF0dGVuZWRGb3JtVmFsdWVzLCAuLi5yZXNvbHZlZCB9O1xuXG4gICAgLy8gRGVsZWdhdGUgdG8gUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSBpZiBkYXRhIHNvdXJjZSBpcyBhbiBBUEkgZW5kcG9pbnRcbiAgICBjb25zdCBpc0FwaVNvdXJjZSA9XG4gICAgICBkcy50eXBlID09PSAnYXBpJyB8fFxuICAgICAgZHMuZW5kcG9pbnQuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8XG4gICAgICBkcy5lbmRwb2ludC5zdGFydHNXaXRoKCdodHRwczovLycpIHx8XG4gICAgICAoZHMudHlwZSAhPT0gJ3RhYmxlJyAmJiBkcy50eXBlICE9PSAndmlldycgJiYgZHMudHlwZSAhPT0gJ3N0b3JlZF9wcm9jZWR1cmUnICYmIGRzLmVuZHBvaW50LnN0YXJ0c1dpdGgoJy8nKSk7XG5cbiAgICBpZiAoaXNBcGlTb3VyY2UgJiYgdGhpcy5hcGlFeGVjdXRpb25TZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5ndWFyZCh0aGlzLmFwaUV4ZWN1dGlvblNlcnZpY2UuZXhlY3V0ZUFwaShcbiAgICAgICAge1xuICAgICAgICAgIGVuZHBvaW50OiBkcy5lbmRwb2ludCxcbiAgICAgICAgICBtZXRob2Q6IGRzLm1ldGhvZCBhcyBhbnksXG4gICAgICAgICAgZGF0YVBhdGg6IGRzLmRhdGFQYXRoLFxuICAgICAgICAgIGhlYWRlcnM6IGRzLmhlYWRlcnMsXG4gICAgICAgICAgdXNlUHJveHk6IGRzLnVzZVByb3h5LFxuICAgICAgICAgIGJvZHlUZW1wbGF0ZTogZHMuYm9keVRlbXBsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBmbGF0dGVuZWRGb3JtVmFsdWVzLFxuICAgICAgICByZXNvbHZlZFxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTm8gUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgcHJvdmlkZWQgdG8gZXhlY3V0ZSB0aGUgZGF0YSBzb3VyY2UuJykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmd1YXJkKHRoaXMuYWRhcHRlci5leGVjdXRlKFxuICAgICAgeyAuLi5kcywgbmFtZTogZHMubmFtZSB8fCBkcy5lbmRwb2ludCwgdHlwZTogZHMudHlwZSA/PyAnc3RvcmVkX3Byb2NlZHVyZScgfSxcbiAgICAgIHBhcmFtc1xuICAgICkpO1xuICB9XG59XG4iXX0=