bways-report 0.1.1 → 0.1.3

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 (100) hide show
  1. package/README.md +153 -51
  2. package/esm2022/lib/core/errors/reporting-errors.mjs +2 -2
  3. package/esm2022/lib/core/index.mjs +3 -1
  4. package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
  5. package/esm2022/lib/core/models/report-definition.model.mjs +1 -1
  6. package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  7. package/esm2022/lib/core/services/report-session-context.service.mjs +50 -5
  8. package/esm2022/lib/core/utils/data-normalization.util.mjs +56 -0
  9. package/esm2022/lib/core/utils/report-parameter.util.mjs +180 -0
  10. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +82 -0
  11. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +34 -9
  12. package/esm2022/lib/data-access/adapters/http-masterdata.adapter.mjs +38 -0
  13. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +217 -0
  14. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +3 -1
  15. package/esm2022/lib/data-access/adapters/index.mjs +8 -3
  16. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +167 -0
  17. package/esm2022/lib/data-access/adapters/mock-datasource.adapter.mjs +60 -0
  18. package/esm2022/lib/data-access/contracts/api-dtos.mjs +6 -0
  19. package/esm2022/lib/data-access/contracts/index.mjs +2 -1
  20. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +665 -90
  21. package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +593 -0
  22. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +164 -23
  23. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +458 -14
  24. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +173 -2
  25. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +182 -6
  26. package/esm2022/lib/features/designer/designer.component.mjs +101 -12
  27. package/esm2022/lib/features/designer/index.mjs +4 -1
  28. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +102 -0
  29. package/esm2022/lib/features/designer/services/designer-state.service.mjs +10 -9
  30. package/esm2022/lib/features/designer/services/report-template.service.mjs +318 -0
  31. package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +41 -9
  32. package/esm2022/lib/features/export/index.mjs +2 -2
  33. package/esm2022/lib/features/export/models/export.models.mjs +1 -1
  34. package/esm2022/lib/features/export/services/report-export.service.mjs +420 -5
  35. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +2 -2
  36. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +231 -33
  37. package/esm2022/lib/features/runtime/index.mjs +2 -1
  38. package/esm2022/lib/features/runtime/report-execution.service.mjs +64 -0
  39. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +224 -26
  40. package/esm2022/lib/features/runtime/report-runtime.component.mjs +341 -7
  41. package/esm2022/lib/features/runtime/rpt-report.component.mjs +537 -0
  42. package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +26 -9
  43. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +18 -7
  44. package/esm2022/lib/primitives/components/date-range/rpt-date-range.component.mjs +346 -0
  45. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +727 -73
  46. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +8 -1
  47. package/esm2022/lib/primitives/components/index.mjs +2 -1
  48. package/esm2022/lib/primitives/register-builtins.mjs +51 -2
  49. package/esm2022/lib/provide-reporting.mjs +145 -24
  50. package/fesm2022/bways-report.mjs +8051 -1672
  51. package/fesm2022/bways-report.mjs.map +1 -1
  52. package/lib/core/index.d.ts +2 -0
  53. package/lib/core/models/report-datasource.model.d.ts +9 -0
  54. package/lib/core/models/report-definition.model.d.ts +2 -0
  55. package/lib/core/models/report-grid.model.d.ts +44 -0
  56. package/lib/core/services/report-session-context.service.d.ts +6 -1
  57. package/lib/core/utils/data-normalization.util.d.ts +15 -0
  58. package/lib/core/utils/report-parameter.util.d.ts +35 -0
  59. package/lib/data-access/adapters/http-datasource.adapter.d.ts +20 -0
  60. package/lib/data-access/adapters/http-lookup.adapter.d.ts +3 -0
  61. package/lib/data-access/adapters/http-masterdata.adapter.d.ts +13 -0
  62. package/lib/data-access/adapters/http-persistence.adapter.d.ts +27 -0
  63. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +2 -0
  64. package/lib/data-access/adapters/index.d.ts +7 -2
  65. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +19 -0
  66. package/lib/data-access/adapters/mock-datasource.adapter.d.ts +9 -0
  67. package/lib/data-access/contracts/api-dtos.d.ts +67 -0
  68. package/lib/data-access/contracts/index.d.ts +1 -0
  69. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +24 -0
  70. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +1 -1
  71. package/lib/features/designer/components/property-editor/property-editor-action.component.d.ts +33 -0
  72. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -0
  73. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +18 -2
  74. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +7 -0
  75. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +9 -0
  76. package/lib/features/designer/designer.component.d.ts +5 -0
  77. package/lib/features/designer/index.d.ts +4 -0
  78. package/lib/features/designer/rpt-report-designer.component.d.ts +38 -0
  79. package/lib/features/designer/services/designer-state.service.d.ts +1 -1
  80. package/lib/features/designer/services/report-template.service.d.ts +32 -0
  81. package/lib/features/designer/utilities/canvas-layout.util.d.ts +4 -0
  82. package/lib/features/export/index.d.ts +2 -2
  83. package/lib/features/export/models/export.models.d.ts +23 -0
  84. package/lib/features/export/services/report-export.service.d.ts +31 -2
  85. package/lib/features/runtime/dynamic-renderer.component.d.ts +39 -2
  86. package/lib/features/runtime/index.d.ts +2 -0
  87. package/lib/features/runtime/report-execution.service.d.ts +16 -0
  88. package/lib/features/runtime/report-grid-bridge.component.d.ts +129 -6
  89. package/lib/features/runtime/report-runtime.component.d.ts +83 -1
  90. package/lib/features/runtime/rpt-report.component.d.ts +66 -0
  91. package/lib/primitives/components/button/rpt-button.component.d.ts +5 -2
  92. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +1 -0
  93. package/lib/primitives/components/date-range/rpt-date-range.component.d.ts +43 -0
  94. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +55 -7
  95. package/lib/primitives/components/index.d.ts +2 -0
  96. package/lib/provide-reporting.d.ts +79 -26
  97. package/package.json +2 -1
  98. package/schematics/collection.json +10 -0
  99. package/schematics/ng-add/index.js +45 -0
  100. package/schematics/ng-add/schema.json +17 -0
@@ -77,7 +77,7 @@ export class DesignerStateService {
77
77
  /**
78
78
  * Adds a new component of the specified type onto the canvas.
79
79
  */
80
- addComponent(type, targetIndex) {
80
+ addComponent(type, targetIndex, overrides) {
81
81
  const meta = this.registry.resolve(type);
82
82
  const defaultConfig = meta?.createDefaultConfig() ?? {
83
83
  id: generateId(type),
@@ -88,17 +88,18 @@ export class DesignerStateService {
88
88
  const newComponent = {
89
89
  id: generateId(type),
90
90
  type,
91
- label: defaultConfig.label ?? meta?.displayName ?? type,
92
- key: defaultConfig.key ?? `${type}_${Math.random().toString(36).substring(2, 6)}`,
91
+ label: overrides?.label ?? defaultConfig.label ?? meta?.displayName ?? type,
92
+ key: overrides?.key ?? defaultConfig.key ?? `${type}_${Math.random().toString(36).substring(2, 6)}`,
93
93
  order: 0,
94
94
  layout: {
95
- columnSpan: defaultConfig.layout?.columnSpan ?? (type === 'button' ? 2 : 4),
95
+ columnSpan: overrides?.layout?.columnSpan ?? defaultConfig.layout?.columnSpan ?? (type === 'button' ? 2 : 4),
96
96
  ...defaultConfig.layout,
97
+ ...overrides?.layout,
97
98
  },
98
- properties: { ...(defaultConfig.properties ?? {}) },
99
- validation: defaultConfig.validation ? { ...defaultConfig.validation } : undefined,
100
- dataSource: defaultConfig.dataSource ? { ...defaultConfig.dataSource } : undefined,
101
- enabled: defaultConfig.enabled ?? true,
99
+ properties: { ...(defaultConfig.properties ?? {}), ...(overrides?.properties ?? {}) },
100
+ validation: overrides?.validation ?? (defaultConfig.validation ? { ...defaultConfig.validation } : undefined),
101
+ dataSource: overrides?.dataSource ?? (defaultConfig.dataSource ? { ...defaultConfig.dataSource } : undefined),
102
+ enabled: overrides?.enabled ?? defaultConfig.enabled ?? true,
102
103
  };
103
104
  const currentComponents = [...this.definition().components].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
104
105
  if (targetIndex !== undefined && targetIndex >= 0 && targetIndex <= currentComponents.length) {
@@ -307,4 +308,4 @@ export class DesignerStateService {
307
308
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerStateService, decorators: [{
308
309
  type: Injectable
309
310
  }] });
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL2Rlc2lnbmVyL3NlcnZpY2VzL2Rlc2lnbmVyLXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUtyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBS2xFLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUV2Qjs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFDZCxRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFdEQsdUNBQXVDO0lBQzlCLFVBQVUsR0FBRyxNQUFNLENBQW1CO1FBQzdDLEVBQUUsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3JCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsYUFBYSxFQUFFLENBQUM7UUFDaEIsT0FBTyxFQUFFLENBQUM7UUFDVixNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO1FBQy9ELFVBQVUsRUFBRSxFQUFFO1FBQ2QsVUFBVSxFQUFFLEVBQUU7UUFDZCxXQUFXLEVBQUUsRUFBRTtLQUNoQixDQUFDLENBQUM7SUFFSCxzQ0FBc0M7SUFDN0IsbUJBQW1CLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUUzRCxpQ0FBaUM7SUFDeEIsU0FBUyxHQUFHLE1BQU0sQ0FBb0IsWUFBWSxDQUFDLENB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O1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFxQjtRQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQzt3R0E3VVUsb0JBQW9COzRHQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWNvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBDb21wb25lbnRMYXlvdXREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWxheW91dC5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRHcmlkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9yZWdpc3RyeS9jb21wb25lbnQtcmVnaXN0cnknO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbGl0aWVzL2lkLWdlbmVyYXRvcic7XG5cbmV4cG9ydCB0eXBlIERlc2lnbmVyVmlld01vZGUgPSAnZGVzaWduJyB8ICdwcmV2aWV3JyB8ICdqc29uJztcbmV4cG9ydCB0eXBlIERlc2lnbmVyQWN0aXZlVGFiID0gJ3Byb3BlcnRpZXMnIHwgJ3JlcG9ydCcgfCAnZ3JpZCc7XG5cbmNvbnN0IE1BWF9ISVNUT1JZID0gMzA7XG5cbi8qKlxuICogRGVzaWduZXJTdGF0ZVNlcnZpY2UgY29vcmRpbmF0ZXMgc3RhdGUgZm9yIHRoZSB2aXN1YWwgcmVwb3J0IGRlc2lnbmVyLlxuICpcbiAqIFNjb3BlZCBhdCB0aGUgRGVzaWduZXIgY29tcG9uZW50IGxldmVsIChub3Qgcm9vdCkgdG8gZW5zdXJlIG11bHRpcGxlIGRlc2lnbmVyXG4gKiBpbnN0YW5jZXMgb3IgbmF2aWdhdGlvbiBmbG93cyByZW1haW4gc3RyaWN0bHkgaXNvbGF0ZWQuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZXNpZ25lclN0YXRlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuXG4gIC8qKiBDdXJyZW50IGFjdGl2ZSByZXBvcnQgZGVmaW5pdGlvbiAqL1xuICByZWFkb25seSBkZWZpbml0aW9uID0gc2lnbmFsPFJlcG9ydERlZmluaXRpb24+KHtcbiAgICBpZDogZ2VuZXJhdGVJZCgncnB0JyksXG4gICAgbmFtZTogJ1VudGl0bGVkIFJlcG9ydCcsXG4gICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICB2ZXJzaW9uOiAxLFxuICAgIGxheW91dDogeyBjb2x1bW5zOiAxMiwgZ2FwOiAxNiwgcGFkZGluZzogMjQsIGRpcmVjdGlvbjogJ2x0cicgfSxcbiAgICBjb21wb25lbnRzOiBbXSxcbiAgICBwYXJhbWV0ZXJzOiBbXSxcbiAgICBkYXRhU291cmNlczogW10sXG4gIH0pO1xuXG4gIC8qKiBTZWxlY3RlZCBjb21wb25lbnQgSUQgaW4gY2FudmFzICovXG4gIHJlYWRvbmx5IHNlbGVjdGVkQ29tcG9uZW50SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIEFjdGl2ZSBwcm9wZXJ0eSBlZGl0b3IgdGFiICovXG4gIHJlYWRvbmx5IGFjdGl2ZVRhYiA9IHNpZ25hbDxEZXNpZ25lckFjdGl2ZVRhYj4oJ3Byb3BlcnRpZXMnKTtcblxuICAvKiogQ3VycmVudCB2aWV3IG1vZGUgKGRlc2lnbiwgcHJldmlldywgb3IgcmF3IGpzb24pICovXG4gIHJlYWRvbmx5IHZpZXdNb2RlID0gc2lnbmFsPERlc2lnbmVyVmlld01vZGU+KCdkZXNpZ24nKTtcblxuICAvKiogRGlydHkgZmxhZyBpbmRpY2F0aW5nIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICByZWFkb25seSBpc0RpcnR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBIaXN0b3J5IHN0YWNrIGZvciBVbmRvIC8gUmVkb1xuICBwcml2YXRlIHJlYWRvbmx5IGhpc3RvcnkgPSBzaWduYWw8UmVwb3J0RGVmaW5pdGlvbltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlzdG9yeUluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuXG4gIHJlYWRvbmx5IGNhblVuZG8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhpc3RvcnlJbmRleCgpID4gMCk7XG4gIHJlYWRvbmx5IGNhblJlZG8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhpc3RvcnlJbmRleCgpID49IDAgJiYgdGhpcy5oaXN0b3J5SW5kZXgoKSA8IHRoaXMuaGlzdG9yeSgpLmxlbmd0aCAtIDEpO1xuXG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgY29tcG9uZW50IGluc3RhbmNlLCBvciBudWxsIGlmIG5vbmUgKi9cbiAgcmVhZG9ubHkgc2VsZWN0ZWRDb21wb25lbnQgPSBjb21wdXRlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zZWxlY3RlZENvbXBvbmVudElkKCk7XG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5pZCA9PT0gaWQpID8/IG51bGw7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBvciByZWxvYWRzIGEgcmVwb3J0IGRlZmluaXRpb24gaW50byB0aGUgZGVzaWduZXIuXG4gICAqL1xuICBsb2FkRGVmaW5pdGlvbihkZWY6IFJlcG9ydERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBjbG9uZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZikpIGFzIFJlcG9ydERlZmluaXRpb247XG4gICAgdGhpcy5kZWZpbml0aW9uLnNldChjbG9uZWQpO1xuICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnRJZC5zZXQobnVsbCk7XG4gICAgdGhpcy5pc0RpcnR5LnNldChmYWxzZSk7XG4gICAgdGhpcy5oaXN0b3J5LnNldChbSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjbG9uZWQpKV0pO1xuICAgIHRoaXMuaGlzdG9yeUluZGV4LnNldCgwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgY29tcG9uZW50IGZvciBwcm9wZXJ0eSBlZGl0aW5nLlxuICAgKi9cbiAgc2VsZWN0Q29tcG9uZW50KGlkOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudElkLnNldChpZCk7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRhYi5zZXQoJ3Byb3BlcnRpZXMnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYWN0aXZlIHZpZXcgbW9kZSAoZGVzaWduLCBsaXZlIHByZXZpZXcsIGpzb24gc2NoZW1hKS5cbiAgICovXG4gIHNldFZpZXdNb2RlKG1vZGU6IERlc2lnbmVyVmlld01vZGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdNb2RlLnNldChtb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhY3RpdmUgZWRpdG9yIHRhYi5cbiAgICovXG4gIHNldEFjdGl2ZVRhYih0YWI6IERlc2lnbmVyQWN0aXZlVGFiKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIuc2V0KHRhYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBjb21wb25lbnQgb2YgdGhlIHNwZWNpZmllZCB0eXBlIG9udG8gdGhlIGNhbnZhcy5cbiAgICovXG4gIGFkZENvbXBvbmVudCh0eXBlOiBzdHJpbmcsIHRhcmdldEluZGV4PzogbnVtYmVyKTogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMucmVnaXN0cnkucmVzb2x2ZSh0eXBlKTtcbiAgICBjb25zdCBkZWZhdWx0Q29uZmlnID0gbWV0YT8uY3JlYXRlRGVmYXVsdENvbmZpZygpID8/IHtcbiAgICAgIGlkOiBnZW5lcmF0ZUlkKHR5cGUpLFxuICAgICAgdHlwZSxcbiAgICAgIGxhYmVsOiBtZXRhPy5kaXNwbGF5TmFtZSA/PyB0eXBlLFxuICAgICAga2V5OiBgJHt0eXBlfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA2KX1gLFxuICAgIH07XG5cbiAgICBjb25zdCBuZXdDb21wb25lbnQ6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gPSB7XG4gICAgICBpZDogZ2VuZXJhdGVJZCh0eXBlKSxcbiAgICAgIHR5cGUsXG4gICAgICBsYWJlbDogZGVmYXVsdENvbmZpZy5sYWJlbCA/PyBtZXRhPy5kaXNwbGF5TmFtZSA/PyB0eXBlLFxuICAgICAga2V5OiBkZWZhdWx0Q29uZmlnLmtleSA/PyBgJHt0eXBlfV8ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA2KX1gLFxuICAgICAgb3JkZXI6IDAsXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgY29sdW1uU3BhbjogZGVmYXVsdENvbmZpZy5sYXlvdXQ/LmNvbHVtblNwYW4gPz8gKHR5cGUgPT09ICdidXR0b24nID8gMiA6IDQpLFxuICAgICAgICAuLi5kZWZhdWx0Q29uZmlnLmxheW91dCxcbiAgICAgIH0sXG4gICAgICBwcm9wZXJ0aWVzOiB7IC4uLihkZWZhdWx0Q29uZmlnLnByb3BlcnRpZXMgPz8ge30pIH0sXG4gICAgICB2YWxpZGF0aW9uOiBkZWZhdWx0Q29uZmlnLnZhbGlkYXRpb24gPyB7IC4uLmRlZmF1bHRDb25maWcudmFsaWRhdGlvbiB9IDogdW5kZWZpbmVkLFxuICAgICAgZGF0YVNvdXJjZTogZGVmYXVsdENvbmZpZy5kYXRhU291cmNlID8geyAuLi5kZWZhdWx0Q29uZmlnLmRhdGFTb3VyY2UgfSA6IHVuZGVmaW5lZCxcbiAgICAgIGVuYWJsZWQ6IGRlZmF1bHRDb25maWcuZW5hYmxlZCA/PyB0cnVlLFxuICAgIH07XG5cbiAgICBjb25zdCBjdXJyZW50Q29tcG9uZW50cyA9IFsuLi50aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMClcbiAgICApO1xuICAgIGlmICh0YXJnZXRJbmRleCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldEluZGV4ID49IDAgJiYgdGFyZ2V0SW5kZXggPD0gY3VycmVudENvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICBjdXJyZW50Q29tcG9uZW50cy5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIG5ld0NvbXBvbmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRDb21wb25lbnRzLnB1c2gobmV3Q29tcG9uZW50KTtcbiAgICB9XG5cbiAgICAvLyBSZWNhbGN1bGF0ZSBvcmRlciBpbmRpY2VzXG4gICAgY3VycmVudENvbXBvbmVudHMuZm9yRWFjaCgoYywgaWR4KSA9PiAoYy5vcmRlciA9IGlkeCArIDEpKTtcblxuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgY29tcG9uZW50czogY3VycmVudENvbXBvbmVudHMsXG4gICAgfSkpO1xuXG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQobmV3Q29tcG9uZW50LmlkKTtcbiAgICByZXR1cm4gbmV3Q29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjb21wb25lbnQgYnkgaXRzIElELlxuICAgKi9cbiAgcmVtb3ZlQ29tcG9uZW50KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50Q29tcG9uZW50cyA9IHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMuZmlsdGVyKChjKSA9PiBjLmlkICE9PSBpZCk7XG4gICAgY3VycmVudENvbXBvbmVudHMuZm9yRWFjaCgoYywgaWR4KSA9PiAoYy5vcmRlciA9IGlkeCArIDEpKTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29tcG9uZW50SWQoKSA9PT0gaWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnRJZC5zZXQobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRHVwbGljYXRlcyBhbiBleGlzdGluZyBjb21wb25lbnQuXG4gICAqL1xuICBkdXBsaWNhdGVDb21wb25lbnQoaWQ6IHN0cmluZyk6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5pZCA9PT0gaWQpO1xuICAgIGlmICghZXhpc3RpbmcpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgZHVwbGljYXRlZDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiA9IHtcbiAgICAgIC4uLkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXhpc3RpbmcpKSxcbiAgICAgIGlkOiBnZW5lcmF0ZUlkKGV4aXN0aW5nLnR5cGUpLFxuICAgICAga2V5OiBleGlzdGluZy5rZXkgPyBgJHtleGlzdGluZy5rZXl9X2NvcHlgIDogdW5kZWZpbmVkLFxuICAgICAgbGFiZWw6IGV4aXN0aW5nLmxhYmVsID8gYCR7ZXhpc3RpbmcubGFiZWx9IChDb3B5KWAgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRzID0gWy4uLnRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHNdLnNvcnQoXG4gICAgICAoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKVxuICAgICk7XG4gICAgY29uc3QgaW5kZXggPSBjdXJyZW50Q29tcG9uZW50cy5maW5kSW5kZXgoKGMpID0+IGMuaWQgPT09IGlkKTtcbiAgICBjdXJyZW50Q29tcG9uZW50cy5zcGxpY2UoaW5kZXggKyAxLCAwLCBkdXBsaWNhdGVkKTtcbiAgICBjdXJyZW50Q29tcG9uZW50cy5mb3JFYWNoKChjLCBpZHgpID0+IChjLm9yZGVyID0gaWR4ICsgMSkpO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG5cbiAgICB0aGlzLnNlbGVjdENvbXBvbmVudChkdXBsaWNhdGVkLmlkKTtcbiAgICByZXR1cm4gZHVwbGljYXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyBhIGNvbXBvbmVudCBmcm9tIHByZXZpb3VzIGluZGV4IHRvIGN1cnJlbnQgaW5kZXggKGUuZy4gZnJvbSBDREsgZHJhZyBkcm9wKS5cbiAgICovXG4gIG1vdmVDb21wb25lbnQocHJldmlvdXNJbmRleDogbnVtYmVyLCBjdXJyZW50SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChwcmV2aW91c0luZGV4ID09PSBjdXJyZW50SW5kZXgpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRzID0gWy4uLnRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHNdLnNvcnQoXG4gICAgICAoYSwgYikgPT4gKGEub3JkZXIgPz8gMCkgLSAoYi5vcmRlciA/PyAwKVxuICAgICk7XG4gICAgaWYgKHByZXZpb3VzSW5kZXggPCAwIHx8IHByZXZpb3VzSW5kZXggPj0gY3VycmVudENvbXBvbmVudHMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgdGFyZ2V0SWR4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY3VycmVudEluZGV4LCBjdXJyZW50Q29tcG9uZW50cy5sZW5ndGggLSAxKSk7XG5cbiAgICBjb25zdCBbbW92ZWRdID0gY3VycmVudENvbXBvbmVudHMuc3BsaWNlKHByZXZpb3VzSW5kZXgsIDEpO1xuICAgIGN1cnJlbnRDb21wb25lbnRzLnNwbGljZSh0YXJnZXRJZHgsIDAsIG1vdmVkKTtcbiAgICBjdXJyZW50Q29tcG9uZW50cy5mb3JFYWNoKChjLCBpZHgpID0+IChjLm9yZGVyID0gaWR4ICsgMSkpO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBwYXJ0aWFsIHByb3BlcnRpZXMgb2YgYSBjb21wb25lbnQuXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnQoaWQ6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRzID0gdGhpcy5kZWZpbml0aW9uKCkuY29tcG9uZW50cy5tYXAoKGMpID0+IHtcbiAgICAgIGlmIChjLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4geyAuLi5jLCAuLi51cGRhdGVzIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gYztcbiAgICB9KTtcblxuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgY29tcG9uZW50czogY3VycmVudENvbXBvbmVudHMsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBzaW5nbGUgY29tcG9uZW50IHByb3BlcnR5IHZhbHVlIHdpdGhpbiBgcHJvcGVydGllc2AuXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnRQcm9wZXJ0eShpZDogc3RyaW5nLCBwcm9wS2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENvbXBvbmVudHMgPSB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKGMuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi4oYy5wcm9wZXJ0aWVzID8/IHt9KSxcbiAgICAgICAgICAgIFtwcm9wS2V5XTogdmFsdWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBsYXlvdXQgcHJvcGVydGllcyBmb3IgYSBjb21wb25lbnQgKGUuZy4gY29sdW1uU3BhbikuXG4gICAqL1xuICB1cGRhdGVDb21wb25lbnRMYXlvdXQoaWQ6IHN0cmluZywgbGF5b3V0OiBQYXJ0aWFsPENvbXBvbmVudExheW91dERlZmluaXRpb24+KTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENvbXBvbmVudHMgPSB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLm1hcCgoYykgPT4ge1xuICAgICAgaWYgKGMuaWQgPT09IGlkKSB7XG4gICAgICAgIGNvbnN0IG5leHRMYXlvdXQgPSB7XG4gICAgICAgICAgLi4uKGMubGF5b3V0ID8/IHt9KSxcbiAgICAgICAgICAuLi5sYXlvdXQsXG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGxheW91dCkgYXMgKGtleW9mIENvbXBvbmVudExheW91dERlZmluaXRpb24pW10pIHtcbiAgICAgICAgICBpZiAobGF5b3V0W2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVsZXRlIG5leHRMYXlvdXRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIGxheW91dDogbmV4dExheW91dCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICBjb21wb25lbnRzOiBjdXJyZW50Q29tcG9uZW50cyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyByZXBvcnQtbGV2ZWwgc2V0dGluZ3MgKG5hbWUsIGRlc2NyaXB0aW9uLCBsYXlvdXQpLlxuICAgKi9cbiAgdXBkYXRlUmVwb3J0U2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8UmVwb3J0RGVmaW5pdGlvbj4pOiB2b2lkIHtcbiAgICB0aGlzLm11dGF0ZURlZmluaXRpb24oKGRlZikgPT4gKHtcbiAgICAgIC4uLmRlZixcbiAgICAgIC4uLnNldHRpbmdzLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGdyaWQgZGVmaW5pdGlvbiBzZXR0aW5ncy5cbiAgICovXG4gIHVwZGF0ZUdyaWRTZXR0aW5ncyhncmlkOiBSZXBvcnRHcmlkRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgZ3JpZCxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJ0cyB0byB0aGUgcHJldmlvdXMgc3RhdGUgaW4gaGlzdG9yeS5cbiAgICovXG4gIHVuZG8oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblVuZG8oKSkgcmV0dXJuO1xuICAgIGNvbnN0IG5ld0luZGV4ID0gdGhpcy5oaXN0b3J5SW5kZXgoKSAtIDE7XG4gICAgdGhpcy5oaXN0b3J5SW5kZXguc2V0KG5ld0luZGV4KTtcbiAgICBjb25zdCByZXN0b3JlZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5oaXN0b3J5KClbbmV3SW5kZXhdKSkgYXMgUmVwb3J0RGVmaW5pdGlvbjtcbiAgICB0aGlzLmRlZmluaXRpb24uc2V0KHJlc3RvcmVkKTtcbiAgICB0aGlzLmlzRGlydHkuc2V0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkdmFuY2VzIHRvIHRoZSBuZXh0IHN0YXRlIGluIGhpc3RvcnkuXG4gICAqL1xuICByZWRvKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SZWRvKCkpIHJldHVybjtcbiAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuaGlzdG9yeUluZGV4KCkgKyAxO1xuICAgIHRoaXMuaGlzdG9yeUluZGV4LnNldChuZXdJbmRleCk7XG4gICAgY29uc3QgcmVzdG9yZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuaGlzdG9yeSgpW25ld0luZGV4XSkpIGFzIFJlcG9ydERlZmluaXRpb247XG4gICAgdGhpcy5kZWZpbml0aW9uLnNldChyZXN0b3JlZCk7XG4gICAgdGhpcy5pc0RpcnR5LnNldCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgY3VycmVudCBkZWZpbml0aW9uIHN0YXRlIGFzIHNhdmVkLlxuICAgKi9cbiAgbWFya1NhdmVkKCk6IHZvaWQge1xuICAgIHRoaXMuaXNEaXJ0eS5zZXQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgYW4gaW1tdXRhYmxlIHN0YXRlIGNoYW5nZSBhbmQgcHVzaGVzIHRvIGhpc3RvcnkuXG4gICAqL1xuICBwcml2YXRlIG11dGF0ZURlZmluaXRpb24odXBkYXRlcjogKGN1cnJlbnQ6IFJlcG9ydERlZmluaXRpb24pID0+IFJlcG9ydERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gdXBkYXRlcih0aGlzLmRlZmluaXRpb24oKSk7XG4gICAgdGhpcy5kZWZpbml0aW9uLnNldChuZXh0KTtcbiAgICB0aGlzLmlzRGlydHkuc2V0KHRydWUpO1xuICAgIHRoaXMucHVzaEhpc3RvcnkobmV4dCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hIaXN0b3J5KGRlZjogUmVwb3J0RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRIaXN0ID0gdGhpcy5oaXN0b3J5KCkuc2xpY2UoMCwgdGhpcy5oaXN0b3J5SW5kZXgoKSArIDEpO1xuICAgIGN1cnJlbnRIaXN0LnB1c2goSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWYpKSk7XG4gICAgaWYgKGN1cnJlbnRIaXN0Lmxlbmd0aCA+IE1BWF9ISVNUT1JZKSB7XG4gICAgICBjdXJyZW50SGlzdC5zaGlmdCgpO1xuICAgIH1cbiAgICB0aGlzLmhpc3Rvcnkuc2V0KGN1cnJlbnRIaXN0KTtcbiAgICB0aGlzLmhpc3RvcnlJbmRleC5zZXQoY3VycmVudEhpc3QubGVuZ3RoIC0gMSk7XG4gIH1cbn1cbiJdfQ==
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL2Rlc2lnbmVyL3NlcnZpY2VzL2Rlc2lnbmVyLXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUtyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBS2xFLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUV2Qjs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFDZCxRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFdEQsdUNBQXVDO0lBQzlCLFVBQVUsR0FBRyxNQUFNLENBQW1CO1FBQzdDLEVBQUUsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3JCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsYUFBYSxFQUFFLENBQUM7UUFDaEIsT0FBTyxFQUFFLENBQUM7UUFDVixNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO1FBQy9ELFVBQVUsRUFBRSxFQUFFO1FBQ2QsVUFBVSxFQUFFLEVBQUU7UUFDZCxXQUFXLEVBQUUsRUFBRTtLQUNoQixDQUFDLENBQUM7SUFFSCxzQ0FBc0M7SUFDN0IsbUJBQW1CLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUUzRCxpQ0FBaUM7SUFDeEIsU0FBUyxHQUFHLE1BQU0sQ0FBb0IsWUFBWSxDQUFDLENB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QyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsT0FBd0Q7UUFDL0UsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFxQjtRQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQzt3R0FsVlUsb0JBQW9COzRHQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgaW5qZWN0LCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcG9ydERlZmluaXRpb24gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtZGVmaW5pdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWNvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBDb21wb25lbnRMYXlvdXREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWxheW91dC5tb2RlbCc7XG5pbXBvcnQgeyBSZXBvcnRHcmlkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9yZWdpc3RyeS9jb21wb25lbnQtcmVnaXN0cnknO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbGl0aWVzL2lkLWdlbmVyYXRvcic7XG5cbmV4cG9ydCB0eXBlIERlc2lnbmVyVmlld01vZGUgPSAnZGVzaWduJyB8ICdwcmV2aWV3JyB8ICdqc29uJztcbmV4cG9ydCB0eXBlIERlc2lnbmVyQWN0aXZlVGFiID0gJ3Byb3BlcnRpZXMnIHwgJ3JlcG9ydCcgfCAnZ3JpZCc7XG5cbmNvbnN0IE1BWF9ISVNUT1JZID0gMzA7XG5cbi8qKlxuICogRGVzaWduZXJTdGF0ZVNlcnZpY2UgY29vcmRpbmF0ZXMgc3RhdGUgZm9yIHRoZSB2aXN1YWwgcmVwb3J0IGRlc2lnbmVyLlxuICpcbiAqIFNjb3BlZCBhdCB0aGUgRGVzaWduZXIgY29tcG9uZW50IGxldmVsIChub3Qgcm9vdCkgdG8gZW5zdXJlIG11bHRpcGxlIGRlc2lnbmVyXG4gKiBpbnN0YW5jZXMgb3IgbmF2aWdhdGlvbiBmbG93cyByZW1haW4gc3RyaWN0bHkgaXNvbGF0ZWQuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZXNpZ25lclN0YXRlU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuXG4gIC8qKiBDdXJyZW50IGFjdGl2ZSByZXBvcnQgZGVmaW5pdGlvbiAqL1xuICByZWFkb25seSBkZWZpbml0aW9uID0gc2lnbmFsPFJlcG9ydERlZmluaXRpb24+KHtcbiAgICBpZDogZ2VuZXJhdGVJZCgncnB0JyksXG4gICAgbmFtZTogJ1VudGl0bGVkIFJlcG9ydCcsXG4gICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICB2ZXJzaW9uOiAxLFxuICAgIGxheW91dDogeyBjb2x1bW5zOiAxMiwgZ2FwOiAxNiwgcGFkZGluZzogMjQsIGRpcmVjdGlvbjogJ2x0cicgfSxcbiAgICBjb21wb25lbnRzOiBbXSxcbiAgICBwYXJhbWV0ZXJzOiBbXSxcbiAgICBkYXRhU291cmNlczogW10sXG4gIH0pO1xuXG4gIC8qKiBTZWxlY3RlZCBjb21wb25lbnQgSUQgaW4gY2FudmFzICovXG4gIHJlYWRvbmx5IHNlbGVjdGVkQ29tcG9uZW50SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIEFjdGl2ZSBwcm9wZXJ0eSBlZGl0b3IgdGFiICovXG4gIHJlYWRvbmx5IGFjdGl2ZVRhYiA9IHNpZ25hbDxEZXNpZ25lckFjdGl2ZVRhYj4oJ3Byb3BlcnRpZXMnKTtcblxuICAvKiogQ3VycmVudCB2aWV3IG1vZGUgKGRlc2lnbiwgcHJldmlldywgb3IgcmF3IGpzb24pICovXG4gIHJlYWRvbmx5IHZpZXdNb2RlID0gc2lnbmFsPERlc2lnbmVyVmlld01vZGU+KCdkZXNpZ24nKTtcblxuICAvKiogRGlydHkgZmxhZyBpbmRpY2F0aW5nIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICByZWFkb25seSBpc0RpcnR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAvLyBIaXN0b3J5IHN0YWNrIGZvciBVbmRvIC8gUmVkb1xuICBwcml2YXRlIHJlYWRvbmx5IGhpc3RvcnkgPSBzaWduYWw8UmVwb3J0RGVmaW5pdGlvbltdPihbXSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGlzdG9yeUluZGV4ID0gc2lnbmFsPG51bWJlcj4oLTEpO1xuXG4gIHJlYWRvbmx5IGNhblVuZG8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhpc3RvcnlJbmRleCgpID4gMCk7XG4gIHJlYWRvbmx5IGNhblJlZG8gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhpc3RvcnlJbmRleCgpID49IDAgJiYgdGhpcy5oaXN0b3J5SW5kZXgoKSA8IHRoaXMuaGlzdG9yeSgpLmxlbmd0aCAtIDEpO1xuXG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgY29tcG9uZW50IGluc3RhbmNlLCBvciBudWxsIGlmIG5vbmUgKi9cbiAgcmVhZG9ubHkgc2VsZWN0ZWRDb21wb25lbnQgPSBjb21wdXRlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zZWxlY3RlZENvbXBvbmVudElkKCk7XG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMuZmluZCgoYykgPT4gYy5pZCA9PT0gaWQpID8/IG51bGw7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyBvciByZWxvYWRzIGEgcmVwb3J0IGRlZmluaXRpb24gaW50byB0aGUgZGVzaWduZXIuXG4gICAqL1xuICBsb2FkRGVmaW5pdGlvbihkZWY6IFJlcG9ydERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBjbG9uZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZikpIGFzIFJlcG9ydERlZmluaXRpb247XG4gICAgdGhpcy5kZWZpbml0aW9uLnNldChjbG9uZWQpO1xuICAgIHRoaXMuc2VsZWN0ZWRDb21wb25lbnRJZC5zZXQobnVsbCk7XG4gICAgdGhpcy5pc0RpcnR5LnNldChmYWxzZSk7XG4gICAgdGhpcy5oaXN0b3J5LnNldChbSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjbG9uZWQpKV0pO1xuICAgIHRoaXMuaGlzdG9yeUluZGV4LnNldCgwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgY29tcG9uZW50IGZvciBwcm9wZXJ0eSBlZGl0aW5nLlxuICAgKi9cbiAgc2VsZWN0Q29tcG9uZW50KGlkOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZENvbXBvbmVudElkLnNldChpZCk7XG4gICAgaWYgKGlkKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRhYi5zZXQoJ3Byb3BlcnRpZXMnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYWN0aXZlIHZpZXcgbW9kZSAoZGVzaWduLCBsaXZlIHByZXZpZXcsIGpzb24gc2NoZW1hKS5cbiAgICovXG4gIHNldFZpZXdNb2RlKG1vZGU6IERlc2lnbmVyVmlld01vZGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdNb2RlLnNldChtb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhY3RpdmUgZWRpdG9yIHRhYi5cbiAgICovXG4gIHNldEFjdGl2ZVRhYih0YWI6IERlc2lnbmVyQWN0aXZlVGFiKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIuc2V0KHRhYik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBjb21wb25lbnQgb2YgdGhlIHNwZWNpZmllZCB0eXBlIG9udG8gdGhlIGNhbnZhcy5cbiAgICovXG4gIGFkZENvbXBvbmVudChcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgdGFyZ2V0SW5kZXg/OiBudW1iZXIsXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPlxuICApOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5yZWdpc3RyeS5yZXNvbHZlKHR5cGUpO1xuICAgIGNvbnN0IGRlZmF1bHRDb25maWcgPSBtZXRhPy5jcmVhdGVEZWZhdWx0Q29uZmlnKCkgPz8ge1xuICAgICAgaWQ6IGdlbmVyYXRlSWQodHlwZSksXG4gICAgICB0eXBlLFxuICAgICAgbGFiZWw6IG1ldGE/LmRpc3BsYXlOYW1lID8/IHR5cGUsXG4gICAgICBrZXk6IGAke3R5cGV9XyR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDYpfWAsXG4gICAgfTtcblxuICAgIGNvbnN0IG5ld0NvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiA9IHtcbiAgICAgIGlkOiBnZW5lcmF0ZUlkKHR5cGUpLFxuICAgICAgdHlwZSxcbiAgICAgIGxhYmVsOiBvdmVycmlkZXM/LmxhYmVsID8/IGRlZmF1bHRDb25maWcubGFiZWwgPz8gbWV0YT8uZGlzcGxheU5hbWUgPz8gdHlwZSxcbiAgICAgIGtleTogb3ZlcnJpZGVzPy5rZXkgPz8gZGVmYXVsdENvbmZpZy5rZXkgPz8gYCR7dHlwZX1fJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgNil9YCxcbiAgICAgIG9yZGVyOiAwLFxuICAgICAgbGF5b3V0OiB7XG4gICAgICAgIGNvbHVtblNwYW46IG92ZXJyaWRlcz8ubGF5b3V0Py5jb2x1bW5TcGFuID8/IGRlZmF1bHRDb25maWcubGF5b3V0Py5jb2x1bW5TcGFuID8/ICh0eXBlID09PSAnYnV0dG9uJyA/IDIgOiA0KSxcbiAgICAgICAgLi4uZGVmYXVsdENvbmZpZy5sYXlvdXQsXG4gICAgICAgIC4uLm92ZXJyaWRlcz8ubGF5b3V0LFxuICAgICAgfSxcbiAgICAgIHByb3BlcnRpZXM6IHsgLi4uKGRlZmF1bHRDb25maWcucHJvcGVydGllcyA/PyB7fSksIC4uLihvdmVycmlkZXM/LnByb3BlcnRpZXMgPz8ge30pIH0sXG4gICAgICB2YWxpZGF0aW9uOiBvdmVycmlkZXM/LnZhbGlkYXRpb24gPz8gKGRlZmF1bHRDb25maWcudmFsaWRhdGlvbiA/IHsgLi4uZGVmYXVsdENvbmZpZy52YWxpZGF0aW9uIH0gOiB1bmRlZmluZWQpLFxuICAgICAgZGF0YVNvdXJjZTogb3ZlcnJpZGVzPy5kYXRhU291cmNlID8/IChkZWZhdWx0Q29uZmlnLmRhdGFTb3VyY2UgPyB7IC4uLmRlZmF1bHRDb25maWcuZGF0YVNvdXJjZSB9IDogdW5kZWZpbmVkKSxcbiAgICAgIGVuYWJsZWQ6IG92ZXJyaWRlcz8uZW5hYmxlZCA/PyBkZWZhdWx0Q29uZmlnLmVuYWJsZWQgPz8gdHJ1ZSxcbiAgICB9O1xuXG4gICAgY29uc3QgY3VycmVudENvbXBvbmVudHMgPSBbLi4udGhpcy5kZWZpbml0aW9uKCkuY29tcG9uZW50c10uc29ydChcbiAgICAgIChhLCBiKSA9PiAoYS5vcmRlciA/PyAwKSAtIChiLm9yZGVyID8/IDApXG4gICAgKTtcbiAgICBpZiAodGFyZ2V0SW5kZXggIT09IHVuZGVmaW5lZCAmJiB0YXJnZXRJbmRleCA+PSAwICYmIHRhcmdldEluZGV4IDw9IGN1cnJlbnRDb21wb25lbnRzLmxlbmd0aCkge1xuICAgICAgY3VycmVudENvbXBvbmVudHMuc3BsaWNlKHRhcmdldEluZGV4LCAwLCBuZXdDb21wb25lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Q29tcG9uZW50cy5wdXNoKG5ld0NvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgLy8gUmVjYWxjdWxhdGUgb3JkZXIgaW5kaWNlc1xuICAgIGN1cnJlbnRDb21wb25lbnRzLmZvckVhY2goKGMsIGlkeCkgPT4gKGMub3JkZXIgPSBpZHggKyAxKSk7XG5cbiAgICB0aGlzLm11dGF0ZURlZmluaXRpb24oKGRlZikgPT4gKHtcbiAgICAgIC4uLmRlZixcbiAgICAgIGNvbXBvbmVudHM6IGN1cnJlbnRDb21wb25lbnRzLFxuICAgIH0pKTtcblxuICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50KG5ld0NvbXBvbmVudC5pZCk7XG4gICAgcmV0dXJuIG5ld0NvbXBvbmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY29tcG9uZW50IGJ5IGl0cyBJRC5cbiAgICovXG4gIHJlbW92ZUNvbXBvbmVudChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENvbXBvbmVudHMgPSB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gaWQpO1xuICAgIGN1cnJlbnRDb21wb25lbnRzLmZvckVhY2goKGMsIGlkeCkgPT4gKGMub3JkZXIgPSBpZHggKyAxKSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbXBvbmVudElkKCkgPT09IGlkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ29tcG9uZW50SWQuc2V0KG51bGwpO1xuICAgIH1cblxuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgY29tcG9uZW50czogY3VycmVudENvbXBvbmVudHMsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIER1cGxpY2F0ZXMgYW4gZXhpc3RpbmcgY29tcG9uZW50LlxuICAgKi9cbiAgZHVwbGljYXRlQ29tcG9uZW50KGlkOiBzdHJpbmcpOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLmZpbmQoKGMpID0+IGMuaWQgPT09IGlkKTtcbiAgICBpZiAoIWV4aXN0aW5nKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGR1cGxpY2F0ZWQ6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gPSB7XG4gICAgICAuLi5KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGV4aXN0aW5nKSksXG4gICAgICBpZDogZ2VuZXJhdGVJZChleGlzdGluZy50eXBlKSxcbiAgICAgIGtleTogZXhpc3Rpbmcua2V5ID8gYCR7ZXhpc3Rpbmcua2V5fV9jb3B5YCA6IHVuZGVmaW5lZCxcbiAgICAgIGxhYmVsOiBleGlzdGluZy5sYWJlbCA/IGAke2V4aXN0aW5nLmxhYmVsfSAoQ29weSlgIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICBjb25zdCBjdXJyZW50Q29tcG9uZW50cyA9IFsuLi50aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMClcbiAgICApO1xuICAgIGNvbnN0IGluZGV4ID0gY3VycmVudENvbXBvbmVudHMuZmluZEluZGV4KChjKSA9PiBjLmlkID09PSBpZCk7XG4gICAgY3VycmVudENvbXBvbmVudHMuc3BsaWNlKGluZGV4ICsgMSwgMCwgZHVwbGljYXRlZCk7XG4gICAgY3VycmVudENvbXBvbmVudHMuZm9yRWFjaCgoYywgaWR4KSA9PiAoYy5vcmRlciA9IGlkeCArIDEpKTtcblxuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgY29tcG9uZW50czogY3VycmVudENvbXBvbmVudHMsXG4gICAgfSkpO1xuXG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQoZHVwbGljYXRlZC5pZCk7XG4gICAgcmV0dXJuIGR1cGxpY2F0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgYSBjb21wb25lbnQgZnJvbSBwcmV2aW91cyBpbmRleCB0byBjdXJyZW50IGluZGV4IChlLmcuIGZyb20gQ0RLIGRyYWcgZHJvcCkuXG4gICAqL1xuICBtb3ZlQ29tcG9uZW50KHByZXZpb3VzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAocHJldmlvdXNJbmRleCA9PT0gY3VycmVudEluZGV4KSByZXR1cm47XG5cbiAgICBjb25zdCBjdXJyZW50Q29tcG9uZW50cyA9IFsuLi50aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMClcbiAgICApO1xuICAgIGlmIChwcmV2aW91c0luZGV4IDwgMCB8fCBwcmV2aW91c0luZGV4ID49IGN1cnJlbnRDb21wb25lbnRzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IHRhcmdldElkeCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGN1cnJlbnRJbmRleCwgY3VycmVudENvbXBvbmVudHMubGVuZ3RoIC0gMSkpO1xuXG4gICAgY29uc3QgW21vdmVkXSA9IGN1cnJlbnRDb21wb25lbnRzLnNwbGljZShwcmV2aW91c0luZGV4LCAxKTtcbiAgICBjdXJyZW50Q29tcG9uZW50cy5zcGxpY2UodGFyZ2V0SWR4LCAwLCBtb3ZlZCk7XG4gICAgY3VycmVudENvbXBvbmVudHMuZm9yRWFjaCgoYywgaWR4KSA9PiAoYy5vcmRlciA9IGlkeCArIDEpKTtcblxuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgY29tcG9uZW50czogY3VycmVudENvbXBvbmVudHMsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgcGFydGlhbCBwcm9wZXJ0aWVzIG9mIGEgY29tcG9uZW50LlxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50KGlkOiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4pOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50Q29tcG9uZW50cyA9IHRoaXMuZGVmaW5pdGlvbigpLmNvbXBvbmVudHMubWFwKChjKSA9PiB7XG4gICAgICBpZiAoYy5pZCA9PT0gaWQpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYywgLi4udXBkYXRlcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGM7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11dGF0ZURlZmluaXRpb24oKGRlZikgPT4gKHtcbiAgICAgIC4uLmRlZixcbiAgICAgIGNvbXBvbmVudHM6IGN1cnJlbnRDb21wb25lbnRzLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgc2luZ2xlIGNvbXBvbmVudCBwcm9wZXJ0eSB2YWx1ZSB3aXRoaW4gYHByb3BlcnRpZXNgLlxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50UHJvcGVydHkoaWQ6IHN0cmluZywgcHJvcEtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRzID0gdGhpcy5kZWZpbml0aW9uKCkuY29tcG9uZW50cy5tYXAoKGMpID0+IHtcbiAgICAgIGlmIChjLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmMsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgLi4uKGMucHJvcGVydGllcyA/PyB7fSksXG4gICAgICAgICAgICBbcHJvcEtleV06IHZhbHVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gYztcbiAgICB9KTtcblxuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgY29tcG9uZW50czogY3VycmVudENvbXBvbmVudHMsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgbGF5b3V0IHByb3BlcnRpZXMgZm9yIGEgY29tcG9uZW50IChlLmcuIGNvbHVtblNwYW4pLlxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50TGF5b3V0KGlkOiBzdHJpbmcsIGxheW91dDogUGFydGlhbDxDb21wb25lbnRMYXlvdXREZWZpbml0aW9uPik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRDb21wb25lbnRzID0gdGhpcy5kZWZpbml0aW9uKCkuY29tcG9uZW50cy5tYXAoKGMpID0+IHtcbiAgICAgIGlmIChjLmlkID09PSBpZCkge1xuICAgICAgICBjb25zdCBuZXh0TGF5b3V0ID0ge1xuICAgICAgICAgIC4uLihjLmxheW91dCA/PyB7fSksXG4gICAgICAgICAgLi4ubGF5b3V0LFxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhsYXlvdXQpIGFzIChrZXlvZiBDb21wb25lbnRMYXlvdXREZWZpbml0aW9uKVtdKSB7XG4gICAgICAgICAgaWYgKGxheW91dFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXh0TGF5b3V0W2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBsYXlvdXQ6IG5leHRMYXlvdXQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gYztcbiAgICB9KTtcblxuICAgIHRoaXMubXV0YXRlRGVmaW5pdGlvbigoZGVmKSA9PiAoe1xuICAgICAgLi4uZGVmLFxuICAgICAgY29tcG9uZW50czogY3VycmVudENvbXBvbmVudHMsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgcmVwb3J0LWxldmVsIHNldHRpbmdzIChuYW1lLCBkZXNjcmlwdGlvbiwgbGF5b3V0KS5cbiAgICovXG4gIHVwZGF0ZVJlcG9ydFNldHRpbmdzKHNldHRpbmdzOiBQYXJ0aWFsPFJlcG9ydERlZmluaXRpb24+KTogdm9pZCB7XG4gICAgdGhpcy5tdXRhdGVEZWZpbml0aW9uKChkZWYpID0+ICh7XG4gICAgICAuLi5kZWYsXG4gICAgICAuLi5zZXR0aW5ncyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBncmlkIGRlZmluaXRpb24gc2V0dGluZ3MuXG4gICAqL1xuICB1cGRhdGVHcmlkU2V0dGluZ3MoZ3JpZDogUmVwb3J0R3JpZERlZmluaXRpb24gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLm11dGF0ZURlZmluaXRpb24oKGRlZikgPT4gKHtcbiAgICAgIC4uLmRlZixcbiAgICAgIGdyaWQsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldmVydHMgdG8gdGhlIHByZXZpb3VzIHN0YXRlIGluIGhpc3RvcnkuXG4gICAqL1xuICB1bmRvKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5VbmRvKCkpIHJldHVybjtcbiAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuaGlzdG9yeUluZGV4KCkgLSAxO1xuICAgIHRoaXMuaGlzdG9yeUluZGV4LnNldChuZXdJbmRleCk7XG4gICAgY29uc3QgcmVzdG9yZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuaGlzdG9yeSgpW25ld0luZGV4XSkpIGFzIFJlcG9ydERlZmluaXRpb247XG4gICAgdGhpcy5kZWZpbml0aW9uLnNldChyZXN0b3JlZCk7XG4gICAgdGhpcy5pc0RpcnR5LnNldCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZHZhbmNlcyB0byB0aGUgbmV4dCBzdGF0ZSBpbiBoaXN0b3J5LlxuICAgKi9cbiAgcmVkbygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVkbygpKSByZXR1cm47XG4gICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmhpc3RvcnlJbmRleCgpICsgMTtcbiAgICB0aGlzLmhpc3RvcnlJbmRleC5zZXQobmV3SW5kZXgpO1xuICAgIGNvbnN0IHJlc3RvcmVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmhpc3RvcnkoKVtuZXdJbmRleF0pKSBhcyBSZXBvcnREZWZpbml0aW9uO1xuICAgIHRoaXMuZGVmaW5pdGlvbi5zZXQocmVzdG9yZWQpO1xuICAgIHRoaXMuaXNEaXJ0eS5zZXQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgdGhlIGN1cnJlbnQgZGVmaW5pdGlvbiBzdGF0ZSBhcyBzYXZlZC5cbiAgICovXG4gIG1hcmtTYXZlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlydHkuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGFuIGltbXV0YWJsZSBzdGF0ZSBjaGFuZ2UgYW5kIHB1c2hlcyB0byBoaXN0b3J5LlxuICAgKi9cbiAgcHJpdmF0ZSBtdXRhdGVEZWZpbml0aW9uKHVwZGF0ZXI6IChjdXJyZW50OiBSZXBvcnREZWZpbml0aW9uKSA9PiBSZXBvcnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHVwZGF0ZXIodGhpcy5kZWZpbml0aW9uKCkpO1xuICAgIHRoaXMuZGVmaW5pdGlvbi5zZXQobmV4dCk7XG4gICAgdGhpcy5pc0RpcnR5LnNldCh0cnVlKTtcbiAgICB0aGlzLnB1c2hIaXN0b3J5KG5leHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoSGlzdG9yeShkZWY6IFJlcG9ydERlZmluaXRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50SGlzdCA9IHRoaXMuaGlzdG9yeSgpLnNsaWNlKDAsIHRoaXMuaGlzdG9yeUluZGV4KCkgKyAxKTtcbiAgICBjdXJyZW50SGlzdC5wdXNoKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmKSkpO1xuICAgIGlmIChjdXJyZW50SGlzdC5sZW5ndGggPiBNQVhfSElTVE9SWSkge1xuICAgICAgY3VycmVudEhpc3Quc2hpZnQoKTtcbiAgICB9XG4gICAgdGhpcy5oaXN0b3J5LnNldChjdXJyZW50SGlzdCk7XG4gICAgdGhpcy5oaXN0b3J5SW5kZXguc2V0KGN1cnJlbnRIaXN0Lmxlbmd0aCAtIDEpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,318 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { generateId } from '../../../core/utilities/id-generator';
3
+ import * as i0 from "@angular/core";
4
+ const BUILTIN_BLUEPRINTS = [
5
+ {
6
+ id: 'blueprint-audit-register',
7
+ name: 'Standard Audit Register',
8
+ category: 'Registers & Logs',
9
+ description: 'Transaction and change audit log with relative date range filter, branch dropdown, and tabular data grid.',
10
+ icon: 'table',
11
+ tags: ['audit', 'register', 'transactions', 'date-range'],
12
+ definition: {
13
+ name: 'Standard Audit Register',
14
+ description: 'Audit log with relative date range filtering and tabular register.',
15
+ schemaVersion: 1,
16
+ version: 1,
17
+ parameters: [],
18
+ layout: {
19
+ columns: 12,
20
+ gap: 16,
21
+ padding: 24,
22
+ },
23
+ dataSources: [
24
+ {
25
+ id: 'ds-audit-log',
26
+ name: 'Audit Log Data',
27
+ endpoint: '/api/audit-log',
28
+ method: 'GET',
29
+ },
30
+ ],
31
+ components: [
32
+ {
33
+ id: 'comp-date-range',
34
+ type: 'date-range',
35
+ key: 'dateRange',
36
+ label: 'Audit Period',
37
+ order: 1,
38
+ layout: { columnSpan: 4 },
39
+ properties: {
40
+ defaultPreset: 'This Month',
41
+ },
42
+ },
43
+ {
44
+ id: 'comp-branch',
45
+ type: 'dropdown',
46
+ key: 'branch',
47
+ label: 'Branch Location',
48
+ order: 2,
49
+ layout: { columnSpan: 3 },
50
+ properties: {
51
+ placeholder: 'All Branches',
52
+ options: [
53
+ { label: 'All Branches', value: '' },
54
+ { label: 'Headquarters (HQ)', value: 'HQ' },
55
+ { label: 'APAC Regional Hub', value: 'APAC' },
56
+ { label: 'EMEA Office', value: 'EMEA' },
57
+ ],
58
+ },
59
+ },
60
+ {
61
+ id: 'comp-btn-run',
62
+ type: 'button',
63
+ label: 'Run Report',
64
+ order: 3,
65
+ layout: { columnSpan: 2 },
66
+ properties: {
67
+ action: 'execute-report',
68
+ variant: 'primary',
69
+ },
70
+ },
71
+ {
72
+ id: 'comp-btn-reset',
73
+ type: 'button',
74
+ label: 'Reset Filters',
75
+ order: 4,
76
+ layout: { columnSpan: 2 },
77
+ properties: {
78
+ action: 'reset',
79
+ variant: 'secondary',
80
+ },
81
+ },
82
+ ],
83
+ grid: {
84
+ dataSourceId: 'ds-audit-log',
85
+ columns: [
86
+ { field: 'timestamp', label: 'Timestamp', dataType: 'date', format: 'dd/MM/yyyy HH:mm' },
87
+ { field: 'userName', label: 'User', dataType: 'string' },
88
+ { field: 'actionType', label: 'Action', dataType: 'string' },
89
+ { field: 'recordRef', label: 'Reference #', dataType: 'string' },
90
+ { field: 'status', label: 'Status', dataType: 'string' },
91
+ ],
92
+ options: {
93
+ pagination: true,
94
+ pageSize: 20,
95
+ showRowNumbers: true,
96
+ allowExport: true,
97
+ },
98
+ },
99
+ },
100
+ },
101
+ {
102
+ id: 'blueprint-master-detail',
103
+ name: 'Master-Detail Account Statement',
104
+ category: 'Financial & Ledger',
105
+ description: 'Account selector with statement date range and drill-down transaction drawer.',
106
+ icon: 'file-text',
107
+ tags: ['finance', 'ledger', 'statement', 'drill-down'],
108
+ definition: {
109
+ name: 'Account Statement',
110
+ description: 'Account statement with slide-over line item drill-down.',
111
+ schemaVersion: 1,
112
+ version: 1,
113
+ parameters: [],
114
+ layout: {
115
+ columns: 12,
116
+ gap: 16,
117
+ padding: 24,
118
+ },
119
+ dataSources: [
120
+ {
121
+ id: 'ds-account-statement',
122
+ name: 'Account Statement Data',
123
+ endpoint: '/api/statements',
124
+ method: 'GET',
125
+ },
126
+ ],
127
+ components: [
128
+ {
129
+ id: 'comp-account-code',
130
+ type: 'dropdown',
131
+ key: 'accountCode',
132
+ label: 'Account / Customer',
133
+ order: 1,
134
+ layout: { columnSpan: 4 },
135
+ properties: {
136
+ placeholder: 'Search customer account...',
137
+ },
138
+ },
139
+ {
140
+ id: 'comp-statement-period',
141
+ type: 'date-range',
142
+ key: 'period',
143
+ label: 'Statement Period',
144
+ order: 2,
145
+ layout: { columnSpan: 5 },
146
+ properties: {
147
+ defaultPreset: 'This Month',
148
+ },
149
+ },
150
+ {
151
+ id: 'comp-btn-generate',
152
+ type: 'button',
153
+ label: 'Generate Statement',
154
+ order: 3,
155
+ layout: { columnSpan: 3 },
156
+ properties: {
157
+ action: 'execute-report',
158
+ variant: 'primary',
159
+ },
160
+ },
161
+ ],
162
+ grid: {
163
+ dataSourceId: 'ds-account-statement',
164
+ columns: [
165
+ { field: 'transDate', label: 'Date', dataType: 'date', format: 'dd/MM/yyyy' },
166
+ { field: 'documentNo', label: 'Document #', dataType: 'string' },
167
+ { field: 'description', label: 'Description', dataType: 'string' },
168
+ { field: 'debit', label: 'Debit', dataType: 'currency', align: 'right', aggregate: 'sum' },
169
+ { field: 'credit', label: 'Credit', dataType: 'currency', align: 'right', aggregate: 'sum' },
170
+ { field: 'balance', label: 'Balance', dataType: 'currency', align: 'right' },
171
+ ],
172
+ options: {
173
+ pagination: true,
174
+ pageSize: 25,
175
+ showFooter: true,
176
+ allowExport: true,
177
+ },
178
+ rowClickAction: {
179
+ type: 'open-drawer',
180
+ targetReportId: 'document-details-subreport',
181
+ drawerTitle: 'Transaction Details',
182
+ drawerWidth: '780px',
183
+ parameterMapping: {
184
+ docNo: 'row.documentNo',
185
+ account: 'form.accountCode',
186
+ },
187
+ },
188
+ },
189
+ },
190
+ },
191
+ {
192
+ id: 'blueprint-kpi-summary',
193
+ name: 'Executive Performance Summary',
194
+ category: 'Analytics & Executive',
195
+ description: 'High-level KPI register with date filter controls and exportable breakdown.',
196
+ icon: 'bar-chart-2',
197
+ tags: ['executive', 'kpi', 'performance', 'metrics'],
198
+ definition: {
199
+ name: 'Executive Performance Summary',
200
+ description: 'Departmental performance summary metrics.',
201
+ schemaVersion: 1,
202
+ version: 1,
203
+ parameters: [],
204
+ layout: {
205
+ columns: 12,
206
+ gap: 16,
207
+ padding: 24,
208
+ },
209
+ dataSources: [
210
+ {
211
+ id: 'ds-kpi-metrics',
212
+ name: 'Performance Metrics',
213
+ endpoint: '/api/metrics',
214
+ method: 'GET',
215
+ },
216
+ ],
217
+ components: [
218
+ {
219
+ id: 'comp-kpi-period',
220
+ type: 'date-range',
221
+ key: 'reportingPeriod',
222
+ label: 'Reporting Period',
223
+ order: 1,
224
+ layout: { columnSpan: 6 },
225
+ properties: {
226
+ defaultPreset: 'This Quarter',
227
+ },
228
+ },
229
+ {
230
+ id: 'comp-btn-refresh',
231
+ type: 'button',
232
+ label: 'Refresh Analytics',
233
+ order: 2,
234
+ layout: { columnSpan: 3 },
235
+ properties: {
236
+ action: 'execute-report',
237
+ variant: 'primary',
238
+ },
239
+ },
240
+ ],
241
+ grid: {
242
+ dataSourceId: 'ds-kpi-metrics',
243
+ columns: [
244
+ { field: 'department', label: 'Department / Unit', dataType: 'string' },
245
+ { field: 'targetRevenue', label: 'Target ($)', dataType: 'currency', align: 'right', aggregate: 'sum' },
246
+ { field: 'actualRevenue', label: 'Actual ($)', dataType: 'currency', align: 'right', aggregate: 'sum' },
247
+ { field: 'variance', label: 'Variance ($)', dataType: 'currency', align: 'right' },
248
+ { field: 'achievementPct', label: 'Achievement %', dataType: 'string', align: 'right' },
249
+ ],
250
+ options: {
251
+ pagination: true,
252
+ pageSize: 15,
253
+ showFooter: true,
254
+ allowExport: true,
255
+ },
256
+ },
257
+ },
258
+ },
259
+ ];
260
+ export class ReportTemplateService {
261
+ customBlueprints = [];
262
+ /**
263
+ * Returns all available report blueprints (built-in + user registered).
264
+ */
265
+ getTemplates() {
266
+ return [...BUILTIN_BLUEPRINTS, ...this.customBlueprints];
267
+ }
268
+ /**
269
+ * Retrieves a blueprint by its unique identifier.
270
+ */
271
+ getTemplateById(id) {
272
+ return this.getTemplates().find((t) => t.id === id);
273
+ }
274
+ /**
275
+ * Instantiates a new ReportDefinition from a template with unique IDs.
276
+ */
277
+ instantiateTemplate(templateId, customName) {
278
+ const blueprint = this.getTemplateById(templateId);
279
+ if (!blueprint) {
280
+ throw new Error(`Report blueprint "${templateId}" not found.`);
281
+ }
282
+ const reportId = generateId('rep');
283
+ const def = blueprint.definition;
284
+ return {
285
+ id: reportId,
286
+ name: customName || def.name,
287
+ description: def.description,
288
+ schemaVersion: def.schemaVersion ?? 1,
289
+ version: 1,
290
+ parameters: def.parameters ? JSON.parse(JSON.stringify(def.parameters)) : [],
291
+ layout: JSON.parse(JSON.stringify(def.layout)),
292
+ dataSources: JSON.parse(JSON.stringify(def.dataSources)),
293
+ components: JSON.parse(JSON.stringify(def.components)),
294
+ grid: def.grid ? JSON.parse(JSON.stringify(def.grid)) : undefined,
295
+ };
296
+ }
297
+ /**
298
+ * Registers a custom blueprint to make it available in the gallery.
299
+ */
300
+ registerTemplate(blueprint) {
301
+ const existingIdx = this.customBlueprints.findIndex((b) => b.id === blueprint.id);
302
+ if (existingIdx >= 0) {
303
+ this.customBlueprints[existingIdx] = blueprint;
304
+ }
305
+ else {
306
+ this.customBlueprints.push(blueprint);
307
+ }
308
+ }
309
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportTemplateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
310
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportTemplateService, providedIn: 'root' });
311
+ }
312
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportTemplateService, decorators: [{
313
+ type: Injectable,
314
+ args: [{
315
+ providedIn: 'root',
316
+ }]
317
+ }] });
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXRlbXBsYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9kZXNpZ25lci9zZXJ2aWNlcy9yZXBvcnQtdGVtcGxhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFZbEUsTUFBTSxrQkFBa0IsR0FBc0I7SUFDNUM7UUFDRSxFQUFFLEVBQUUsMEJBQTBCO1FBQzlCLElBQUksRUFBRSx5QkFBeUI7UUFDL0IsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QixXQUFXLEVBQUUsMkdBQTJHO1FBQ3hILElBQUksRUFBRSxPQUFPO1FBQ2IsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsWUFBWSxDQUFDO1FBQ3pELFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSx5QkFBeUI7WUFDL0IsV0FBVyxFQUFFLG9FQUFvRTtZQUNqRixhQUFhLEVBQUUsQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQztZQUNWLFVBQVUsRUFBRSxFQUFFO1lBQ2QsTUFBTSxFQUFFO2dCQUNOLE9BQU8sRUFBRSxFQUFFO2dCQUNYLEdBQUcsRUFBRSxFQUFFO2dCQUNQLE9BQU8sRUFBRSxFQUFFO2FBQ1o7WUFDRCxXQUFXLEVBQUU7Z0JBQ1g7b0JBQ0UsRUFBRSxFQUFFLGNBQWM7b0JBQ2xCLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLE1BQU0sRUFBRSxLQUFLO2lCQUNkO2FBQ0Y7WUFDRCxVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsRUFBRSxFQUFFLGlCQUFpQjtvQkFDckIsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLEdBQUcsRUFBRSxXQUFXO29CQUNoQixLQUFLLEVBQUUsY0FBYztvQkFDckIsS0FBSyxFQUFFLENBQUM7b0JBQ1IsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRTtvQkFDekIsVUFBVSxFQUFFO3dCQUNWLGFBQWEsRUFBRSxZQUFZO3FCQUM1QjtpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLEdBQUcsRUFBRSxRQUFRO29CQUNiLEtBQUssRUFBRSxpQkFBaUI7b0JBQ3hCLEtBQUssRUFBRSxDQUFDO29CQUNSLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7b0JBQ3pCLFVBQVUsRUFBRTt3QkFDVixXQUFXLEVBQUUsY0FBYzt3QkFDM0IsT0FBTyxFQUFFOzRCQUNQLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFOzRCQUNwQyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFOzRCQUMzQyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFOzRCQUM3QyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTt5QkFDeEM7cUJBQ0Y7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLGNBQWM7b0JBQ2xCLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxZQUFZO29CQUNuQixLQUFLLEVBQUUsQ0FBQztvQkFDUixNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFO29CQUN6QixVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLGdCQUFnQjt3QkFDeEIsT0FBTyxFQUFFLFNBQVM7cUJBQ25CO2lCQUNGO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxnQkFBZ0I7b0JBQ3BCLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxlQUFlO29CQUN0QixLQUFLLEVBQUUsQ0FBQztvQkFDUixNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFO29CQUN6QixVQUFVLEVBQUU7d0JBQ1YsTUFBTSxFQUFFLE9BQU87d0JBQ2YsT0FBTyxFQUFFLFdBQVc7cUJBQ3JCO2lCQUNGO2FBQ0Y7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osWUFBWSxFQUFFLGNBQWM7Z0JBQzVCLE9BQU8sRUFBRTtvQkFDUCxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRTtvQkFDeEYsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtvQkFDeEQsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtvQkFDNUQsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtvQkFDaEUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtpQkFDekQ7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsRUFBRTtvQkFDWixjQUFjLEVBQUUsSUFBSTtvQkFDcEIsV0FBVyxFQUFFLElBQUk7aUJBQ2xCO2FBQ0Y7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxFQUFFLEVBQUUseUJBQXlCO1FBQzdCLElBQUksRUFBRSxpQ0FBaUM7UUFDdkMsUUFBUSxFQUFFLG9CQUFvQjtRQUM5QixXQUFXLEVBQUUsK0VBQStFO1FBQzVGLElBQUksRUFBRSxXQUFXO1FBQ2pCLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQztRQUN0RCxVQUFVLEVBQUU7WUFDVixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLFdBQVcsRUFBRSx5REFBeUQ7WUFDdEUsYUFBYSxFQUFFLENBQUM7WUFDaEIsT0FBTyxFQUFFLENBQUM7WUFDVixVQUFVLEVBQUUsRUFBRTtZQUNkLE1BQU0sRUFBRTtnQkFDTixPQUFPLEVBQUUsRUFBRTtnQkFDWCxHQUFHLEVBQUUsRUFBRTtnQkFDUCxPQUFPLEVBQUUsRUFBRTthQUNaO1lBQ0QsV0FBVyxFQUFFO2dCQUNYO29CQUNFLEVBQUUsRUFBRSxzQkFBc0I7b0JBQzFCLElBQUksRUFBRSx3QkFBd0I7b0JBQzlCLFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLE1BQU0sRUFBRSxLQUFLO2lCQUNkO2FBQ0Y7WUFDRCxVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtvQkFDdkIsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLEdBQUcsRUFBRSxhQUFhO29CQUNsQixLQUFLLEVBQUUsb0JBQW9CO29CQUMzQixLQUFLLEVBQUUsQ0FBQztvQkFDUixNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFO29CQUN6QixVQUFVLEVBQUU7d0JBQ1YsV0FBVyxFQUFFLDRCQUE0QjtxQkFDMUM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLHVCQUF1QjtvQkFDM0IsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLEdBQUcsRUFBRSxRQUFRO29CQUNiLEtBQUssRUFBRSxrQkFBa0I7b0JBQ3pCLEtBQUssRUFBRSxDQUFDO29CQUNSLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7b0JBQ3pCLFVBQVUsRUFBRTt3QkFDVixhQUFhLEVBQUUsWUFBWTtxQkFDNUI7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsRUFBRSxFQUFFLG1CQUFtQjtvQkFDdkIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLG9CQUFvQjtvQkFDM0IsS0FBSyxFQUFFLENBQUM7b0JBQ1IsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRTtvQkFDekIsVUFBVSxFQUFFO3dCQUNWLE1BQU0sRUFBRSxnQkFBZ0I7d0JBQ3hCLE9BQU8sRUFBRSxTQUFTO3FCQUNuQjtpQkFDRjthQUNGO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLFlBQVksRUFBRSxzQkFBc0I7Z0JBQ3BDLE9BQU8sRUFBRTtvQkFDUCxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUU7b0JBQzdFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7b0JBQ2hFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7b0JBQ2xFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO29CQUMxRixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtvQkFDNUYsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2lCQUM3RTtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxFQUFFO29CQUNaLFVBQVUsRUFBRSxJQUFJO29CQUNoQixXQUFXLEVBQUUsSUFBSTtpQkFDbEI7Z0JBQ0QsY0FBYyxFQUFFO29CQUNkLElBQUksRUFBRSxhQUFhO29CQUNuQixjQUFjLEVBQUUsNEJBQTRCO29CQUM1QyxXQUFXLEVBQUUscUJBQXFCO29CQUNsQyxXQUFXLEVBQUUsT0FBTztvQkFDcEIsZ0JBQWdCLEVBQUU7d0JBQ2hCLEtBQUssRUFBRSxnQkFBZ0I7d0JBQ3ZCLE9BQU8sRUFBRSxrQkFBa0I7cUJBQzVCO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsdUJBQXVCO1FBQzNCLElBQUksRUFBRSwrQkFBK0I7UUFDckMsUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxXQUFXLEVBQUUsNkVBQTZFO1FBQzFGLElBQUksRUFBRSxhQUFhO1FBQ25CLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQztRQUNwRCxVQUFVLEVBQUU7WUFDVixJQUFJLEVBQUUsK0JBQStCO1lBQ3JDLFdBQVcsRUFBRSwyQ0FBMkM7WUFDeEQsYUFBYSxFQUFFLENBQUM7WUFDaEIsT0FBTyxFQUFFLENBQUM7WUFDVixVQUFVLEVBQUUsRUFBRTtZQUNkLE1BQU0sRUFBRTtnQkFDTixPQUFPLEVBQUUsRUFBRTtnQkFDWCxHQUFHLEVBQUUsRUFBRTtnQkFDUCxPQUFPLEVBQUUsRUFBRTthQUNaO1lBQ0QsV0FBVyxFQUFFO2dCQUNYO29CQUNFLEVBQUUsRUFBRSxnQkFBZ0I7b0JBQ3BCLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLFFBQVEsRUFBRSxjQUFjO29CQUN4QixNQUFNLEVBQUUsS0FBSztpQkFDZDthQUNGO1lBQ0QsVUFBVSxFQUFFO2dCQUNWO29CQUNFLEVBQUUsRUFBRSxpQkFBaUI7b0JBQ3JCLElBQUksRUFBRSxZQUFZO29CQUNsQixHQUFHLEVBQUUsaUJBQWlCO29CQUN0QixLQUFLLEVBQUUsa0JBQWtCO29CQUN6QixLQUFLLEVBQUUsQ0FBQztvQkFDUixNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFO29CQUN6QixVQUFVLEVBQUU7d0JBQ1YsYUFBYSxFQUFFLGNBQWM7cUJBQzlCO2lCQUNGO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxrQkFBa0I7b0JBQ3RCLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxtQkFBbUI7b0JBQzFCLEtBQUssRUFBRSxDQUFDO29CQUNSLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7b0JBQ3pCLFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUUsZ0JBQWdCO3dCQUN4QixPQUFPLEVBQUUsU0FBUztxQkFDbkI7aUJBQ0Y7YUFDRjtZQUNELElBQUksRUFBRTtnQkFDSixZQUFZLEVBQUUsZ0JBQWdCO2dCQUM5QixPQUFPLEVBQUU7b0JBQ1AsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO29CQUN2RSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtvQkFDdkcsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7b0JBQ3ZHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtvQkFDbEYsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7aUJBQ3hGO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFdBQVcsRUFBRSxJQUFJO2lCQUNsQjthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUM7QUFLRixNQUFNLE9BQU8scUJBQXFCO0lBQ2YsZ0JBQWdCLEdBQXNCLEVBQUUsQ0FBQztJQUUxRDs7T0FFRztJQUNILFlBQVk7UUFDVixPQUFPLENBQUMsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxFQUFVO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsQ0FBQyxVQUFrQixFQUFFLFVBQW1CO1FBQ3pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsVUFBVSxjQUFjLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFFakMsT0FBTztZQUNMLEVBQUUsRUFBRSxRQUFRO1lBQ1osSUFBSSxFQUFFLFVBQVUsSUFBSSxHQUFHLENBQUMsSUFBSTtZQUM1QixXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVc7WUFDNUIsYUFBYSxFQUFFLEdBQUcsQ0FBQyxhQUFhLElBQUksQ0FBQztZQUNyQyxPQUFPLEVBQUUsQ0FBQztZQUNWLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEQsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEQsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNsRSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsU0FBMEI7UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEYsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUNqRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7d0dBckRVLHFCQUFxQjs0R0FBckIscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbGl0aWVzL2lkLWdlbmVyYXRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVwb3J0Qmx1ZXByaW50IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBjYXRlZ29yeTogJ1JlZ2lzdGVycyAmIExvZ3MnIHwgJ0ZpbmFuY2lhbCAmIExlZGdlcicgfCAnQW5hbHl0aWNzICYgRXhlY3V0aXZlJyB8ICdDdXN0b20nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG4gIGRlZmluaXRpb246IE9taXQ8UmVwb3J0RGVmaW5pdGlvbiwgJ2lkJz47XG59XG5cbmNvbnN0IEJVSUxUSU5fQkxVRVBSSU5UUzogUmVwb3J0Qmx1ZXByaW50W10gPSBbXG4gIHtcbiAgICBpZDogJ2JsdWVwcmludC1hdWRpdC1yZWdpc3RlcicsXG4gICAgbmFtZTogJ1N0YW5kYXJkIEF1ZGl0IFJlZ2lzdGVyJyxcbiAgICBjYXRlZ29yeTogJ1JlZ2lzdGVycyAmIExvZ3MnLFxuICAgIGRlc2NyaXB0aW9uOiAnVHJhbnNhY3Rpb24gYW5kIGNoYW5nZSBhdWRpdCBsb2cgd2l0aCByZWxhdGl2ZSBkYXRlIHJhbmdlIGZpbHRlciwgYnJhbmNoIGRyb3Bkb3duLCBhbmQgdGFidWxhciBkYXRhIGdyaWQuJyxcbiAgICBpY29uOiAndGFibGUnLFxuICAgIHRhZ3M6IFsnYXVkaXQnLCAncmVnaXN0ZXInLCAndHJhbnNhY3Rpb25zJywgJ2RhdGUtcmFuZ2UnXSxcbiAgICBkZWZpbml0aW9uOiB7XG4gICAgICBuYW1lOiAnU3RhbmRhcmQgQXVkaXQgUmVnaXN0ZXInLFxuICAgICAgZGVzY3JpcHRpb246ICdBdWRpdCBsb2cgd2l0aCByZWxhdGl2ZSBkYXRlIHJhbmdlIGZpbHRlcmluZyBhbmQgdGFidWxhciByZWdpc3Rlci4nLFxuICAgICAgc2NoZW1hVmVyc2lvbjogMSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICBwYXJhbWV0ZXJzOiBbXSxcbiAgICAgIGxheW91dDoge1xuICAgICAgICBjb2x1bW5zOiAxMixcbiAgICAgICAgZ2FwOiAxNixcbiAgICAgICAgcGFkZGluZzogMjQsXG4gICAgICB9LFxuICAgICAgZGF0YVNvdXJjZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnZHMtYXVkaXQtbG9nJyxcbiAgICAgICAgICBuYW1lOiAnQXVkaXQgTG9nIERhdGEnLFxuICAgICAgICAgIGVuZHBvaW50OiAnL2FwaS9hdWRpdC1sb2cnLFxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY29tcG9uZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdjb21wLWRhdGUtcmFuZ2UnLFxuICAgICAgICAgIHR5cGU6ICdkYXRlLXJhbmdlJyxcbiAgICAgICAgICBrZXk6ICdkYXRlUmFuZ2UnLFxuICAgICAgICAgIGxhYmVsOiAnQXVkaXQgUGVyaW9kJyxcbiAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICBsYXlvdXQ6IHsgY29sdW1uU3BhbjogNCB9LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGRlZmF1bHRQcmVzZXQ6ICdUaGlzIE1vbnRoJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdjb21wLWJyYW5jaCcsXG4gICAgICAgICAgdHlwZTogJ2Ryb3Bkb3duJyxcbiAgICAgICAgICBrZXk6ICdicmFuY2gnLFxuICAgICAgICAgIGxhYmVsOiAnQnJhbmNoIExvY2F0aW9uJyxcbiAgICAgICAgICBvcmRlcjogMixcbiAgICAgICAgICBsYXlvdXQ6IHsgY29sdW1uU3BhbjogMyB9LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQWxsIEJyYW5jaGVzJyxcbiAgICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgICAgeyBsYWJlbDogJ0FsbCBCcmFuY2hlcycsIHZhbHVlOiAnJyB9LFxuICAgICAgICAgICAgICB7IGxhYmVsOiAnSGVhZHF1YXJ0ZXJzIChIUSknLCB2YWx1ZTogJ0hRJyB9LFxuICAgICAgICAgICAgICB7IGxhYmVsOiAnQVBBQyBSZWdpb25hbCBIdWInLCB2YWx1ZTogJ0FQQUMnIH0sXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICdFTUVBIE9mZmljZScsIHZhbHVlOiAnRU1FQScgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnY29tcC1idG4tcnVuJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICBsYWJlbDogJ1J1biBSZXBvcnQnLFxuICAgICAgICAgIG9yZGVyOiAzLFxuICAgICAgICAgIGxheW91dDogeyBjb2x1bW5TcGFuOiAyIH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgYWN0aW9uOiAnZXhlY3V0ZS1yZXBvcnQnLFxuICAgICAgICAgICAgdmFyaWFudDogJ3ByaW1hcnknLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2NvbXAtYnRuLXJlc2V0JyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICBsYWJlbDogJ1Jlc2V0IEZpbHRlcnMnLFxuICAgICAgICAgIG9yZGVyOiA0LFxuICAgICAgICAgIGxheW91dDogeyBjb2x1bW5TcGFuOiAyIH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgYWN0aW9uOiAncmVzZXQnLFxuICAgICAgICAgICAgdmFyaWFudDogJ3NlY29uZGFyeScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBncmlkOiB7XG4gICAgICAgIGRhdGFTb3VyY2VJZDogJ2RzLWF1ZGl0LWxvZycsXG4gICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICB7IGZpZWxkOiAndGltZXN0YW1wJywgbGFiZWw6ICdUaW1lc3RhbXAnLCBkYXRhVHlwZTogJ2RhdGUnLCBmb3JtYXQ6ICdkZC9NTS95eXl5IEhIOm1tJyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICd1c2VyTmFtZScsIGxhYmVsOiAnVXNlcicsIGRhdGFUeXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICdhY3Rpb25UeXBlJywgbGFiZWw6ICdBY3Rpb24nLCBkYXRhVHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICB7IGZpZWxkOiAncmVjb3JkUmVmJywgbGFiZWw6ICdSZWZlcmVuY2UgIycsIGRhdGFUeXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICdzdGF0dXMnLCBsYWJlbDogJ1N0YXR1cycsIGRhdGFUeXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICBdLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgcGFnaW5hdGlvbjogdHJ1ZSxcbiAgICAgICAgICBwYWdlU2l6ZTogMjAsXG4gICAgICAgICAgc2hvd1Jvd051bWJlcnM6IHRydWUsXG4gICAgICAgICAgYWxsb3dFeHBvcnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBpZDogJ2JsdWVwcmludC1tYXN0ZXItZGV0YWlsJyxcbiAgICBuYW1lOiAnTWFzdGVyLURldGFpbCBBY2NvdW50IFN0YXRlbWVudCcsXG4gICAgY2F0ZWdvcnk6ICdGaW5hbmNpYWwgJiBMZWRnZXInLFxuICAgIGRlc2NyaXB0aW9uOiAnQWNjb3VudCBzZWxlY3RvciB3aXRoIHN0YXRlbWVudCBkYXRlIHJhbmdlIGFuZCBkcmlsbC1kb3duIHRyYW5zYWN0aW9uIGRyYXdlci4nLFxuICAgIGljb246ICdmaWxlLXRleHQnLFxuICAgIHRhZ3M6IFsnZmluYW5jZScsICdsZWRnZXInLCAnc3RhdGVtZW50JywgJ2RyaWxsLWRvd24nXSxcbiAgICBkZWZpbml0aW9uOiB7XG4gICAgICBuYW1lOiAnQWNjb3VudCBTdGF0ZW1lbnQnLFxuICAgICAgZGVzY3JpcHRpb246ICdBY2NvdW50IHN0YXRlbWVudCB3aXRoIHNsaWRlLW92ZXIgbGluZSBpdGVtIGRyaWxsLWRvd24uJyxcbiAgICAgIHNjaGVtYVZlcnNpb246IDEsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgcGFyYW1ldGVyczogW10sXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgY29sdW1uczogMTIsXG4gICAgICAgIGdhcDogMTYsXG4gICAgICAgIHBhZGRpbmc6IDI0LFxuICAgICAgfSxcbiAgICAgIGRhdGFTb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2RzLWFjY291bnQtc3RhdGVtZW50JyxcbiAgICAgICAgICBuYW1lOiAnQWNjb3VudCBTdGF0ZW1lbnQgRGF0YScsXG4gICAgICAgICAgZW5kcG9pbnQ6ICcvYXBpL3N0YXRlbWVudHMnLFxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY29tcG9uZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdjb21wLWFjY291bnQtY29kZScsXG4gICAgICAgICAgdHlwZTogJ2Ryb3Bkb3duJyxcbiAgICAgICAgICBrZXk6ICdhY2NvdW50Q29kZScsXG4gICAgICAgICAgbGFiZWw6ICdBY2NvdW50IC8gQ3VzdG9tZXInLFxuICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgIGxheW91dDogeyBjb2x1bW5TcGFuOiA0IH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdTZWFyY2ggY3VzdG9tZXIgYWNjb3VudC4uLicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnY29tcC1zdGF0ZW1lbnQtcGVyaW9kJyxcbiAgICAgICAgICB0eXBlOiAnZGF0ZS1yYW5nZScsXG4gICAgICAgICAga2V5OiAncGVyaW9kJyxcbiAgICAgICAgICBsYWJlbDogJ1N0YXRlbWVudCBQZXJpb2QnLFxuICAgICAgICAgIG9yZGVyOiAyLFxuICAgICAgICAgIGxheW91dDogeyBjb2x1bW5TcGFuOiA1IH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgZGVmYXVsdFByZXNldDogJ1RoaXMgTW9udGgnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2NvbXAtYnRuLWdlbmVyYXRlJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICBsYWJlbDogJ0dlbmVyYXRlIFN0YXRlbWVudCcsXG4gICAgICAgICAgb3JkZXI6IDMsXG4gICAgICAgICAgbGF5b3V0OiB7IGNvbHVtblNwYW46IDMgfSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhY3Rpb246ICdleGVjdXRlLXJlcG9ydCcsXG4gICAgICAgICAgICB2YXJpYW50OiAncHJpbWFyeScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBncmlkOiB7XG4gICAgICAgIGRhdGFTb3VyY2VJZDogJ2RzLWFjY291bnQtc3RhdGVtZW50JyxcbiAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgIHsgZmllbGQ6ICd0cmFuc0RhdGUnLCBsYWJlbDogJ0RhdGUnLCBkYXRhVHlwZTogJ2RhdGUnLCBmb3JtYXQ6ICdkZC9NTS95eXl5JyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICdkb2N1bWVudE5vJywgbGFiZWw6ICdEb2N1bWVudCAjJywgZGF0YVR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgeyBmaWVsZDogJ2Rlc2NyaXB0aW9uJywgbGFiZWw6ICdEZXNjcmlwdGlvbicsIGRhdGFUeXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICdkZWJpdCcsIGxhYmVsOiAnRGViaXQnLCBkYXRhVHlwZTogJ2N1cnJlbmN5JywgYWxpZ246ICdyaWdodCcsIGFnZ3JlZ2F0ZTogJ3N1bScgfSxcbiAgICAgICAgICB7IGZpZWxkOiAnY3JlZGl0JywgbGFiZWw6ICdDcmVkaXQnLCBkYXRhVHlwZTogJ2N1cnJlbmN5JywgYWxpZ246ICdyaWdodCcsIGFnZ3JlZ2F0ZTogJ3N1bScgfSxcbiAgICAgICAgICB7IGZpZWxkOiAnYmFsYW5jZScsIGxhYmVsOiAnQmFsYW5jZScsIGRhdGFUeXBlOiAnY3VycmVuY3knLCBhbGlnbjogJ3JpZ2h0JyB9LFxuICAgICAgICBdLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgcGFnaW5hdGlvbjogdHJ1ZSxcbiAgICAgICAgICBwYWdlU2l6ZTogMjUsXG4gICAgICAgICAgc2hvd0Zvb3RlcjogdHJ1ZSxcbiAgICAgICAgICBhbGxvd0V4cG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgcm93Q2xpY2tBY3Rpb246IHtcbiAgICAgICAgICB0eXBlOiAnb3Blbi1kcmF3ZXInLFxuICAgICAgICAgIHRhcmdldFJlcG9ydElkOiAnZG9jdW1lbnQtZGV0YWlscy1zdWJyZXBvcnQnLFxuICAgICAgICAgIGRyYXdlclRpdGxlOiAnVHJhbnNhY3Rpb24gRGV0YWlscycsXG4gICAgICAgICAgZHJhd2VyV2lkdGg6ICc3ODBweCcsXG4gICAgICAgICAgcGFyYW1ldGVyTWFwcGluZzoge1xuICAgICAgICAgICAgZG9jTm86ICdyb3cuZG9jdW1lbnRObycsXG4gICAgICAgICAgICBhY2NvdW50OiAnZm9ybS5hY2NvdW50Q29kZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIGlkOiAnYmx1ZXByaW50LWtwaS1zdW1tYXJ5JyxcbiAgICBuYW1lOiAnRXhlY3V0aXZlIFBlcmZvcm1hbmNlIFN1bW1hcnknLFxuICAgIGNhdGVnb3J5OiAnQW5hbHl0aWNzICYgRXhlY3V0aXZlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0hpZ2gtbGV2ZWwgS1BJIHJlZ2lzdGVyIHdpdGggZGF0ZSBmaWx0ZXIgY29udHJvbHMgYW5kIGV4cG9ydGFibGUgYnJlYWtkb3duLicsXG4gICAgaWNvbjogJ2Jhci1jaGFydC0yJyxcbiAgICB0YWdzOiBbJ2V4ZWN1dGl2ZScsICdrcGknLCAncGVyZm9ybWFuY2UnLCAnbWV0cmljcyddLFxuICAgIGRlZmluaXRpb246IHtcbiAgICAgIG5hbWU6ICdFeGVjdXRpdmUgUGVyZm9ybWFuY2UgU3VtbWFyeScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0RlcGFydG1lbnRhbCBwZXJmb3JtYW5jZSBzdW1tYXJ5IG1ldHJpY3MuJyxcbiAgICAgIHNjaGVtYVZlcnNpb246IDEsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgcGFyYW1ldGVyczogW10sXG4gICAgICBsYXlvdXQ6IHtcbiAgICAgICAgY29sdW1uczogMTIsXG4gICAgICAgIGdhcDogMTYsXG4gICAgICAgIHBhZGRpbmc6IDI0LFxuICAgICAgfSxcbiAgICAgIGRhdGFTb3VyY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ2RzLWtwaS1tZXRyaWNzJyxcbiAgICAgICAgICBuYW1lOiAnUGVyZm9ybWFuY2UgTWV0cmljcycsXG4gICAgICAgICAgZW5kcG9pbnQ6ICcvYXBpL21ldHJpY3MnLFxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY29tcG9uZW50czogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdjb21wLWtwaS1wZXJpb2QnLFxuICAgICAgICAgIHR5cGU6ICdkYXRlLXJhbmdlJyxcbiAgICAgICAgICBrZXk6ICdyZXBvcnRpbmdQZXJpb2QnLFxuICAgICAgICAgIGxhYmVsOiAnUmVwb3J0aW5nIFBlcmlvZCcsXG4gICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgbGF5b3V0OiB7IGNvbHVtblNwYW46IDYgfSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBkZWZhdWx0UHJlc2V0OiAnVGhpcyBRdWFydGVyJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdjb21wLWJ0bi1yZWZyZXNoJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICBsYWJlbDogJ1JlZnJlc2ggQW5hbHl0aWNzJyxcbiAgICAgICAgICBvcmRlcjogMixcbiAgICAgICAgICBsYXlvdXQ6IHsgY29sdW1uU3BhbjogMyB9LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGFjdGlvbjogJ2V4ZWN1dGUtcmVwb3J0JyxcbiAgICAgICAgICAgIHZhcmlhbnQ6ICdwcmltYXJ5JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGdyaWQ6IHtcbiAgICAgICAgZGF0YVNvdXJjZUlkOiAnZHMta3BpLW1ldHJpY3MnLFxuICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgeyBmaWVsZDogJ2RlcGFydG1lbnQnLCBsYWJlbDogJ0RlcGFydG1lbnQgLyBVbml0JywgZGF0YVR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgeyBmaWVsZDogJ3RhcmdldFJldmVudWUnLCBsYWJlbDogJ1RhcmdldCAoJCknLCBkYXRhVHlwZTogJ2N1cnJlbmN5JywgYWxpZ246ICdyaWdodCcsIGFnZ3JlZ2F0ZTogJ3N1bScgfSxcbiAgICAgICAgICB7IGZpZWxkOiAnYWN0dWFsUmV2ZW51ZScsIGxhYmVsOiAnQWN0dWFsICgkKScsIGRhdGFUeXBlOiAnY3VycmVuY3knLCBhbGlnbjogJ3JpZ2h0JywgYWdncmVnYXRlOiAnc3VtJyB9LFxuICAgICAgICAgIHsgZmllbGQ6ICd2YXJpYW5jZScsIGxhYmVsOiAnVmFyaWFuY2UgKCQpJywgZGF0YVR5cGU6ICdjdXJyZW5jeScsIGFsaWduOiAncmlnaHQnIH0sXG4gICAgICAgICAgeyBmaWVsZDogJ2FjaGlldmVtZW50UGN0JywgbGFiZWw6ICdBY2hpZXZlbWVudCAlJywgZGF0YVR5cGU6ICdzdHJpbmcnLCBhbGlnbjogJ3JpZ2h0JyB9LFxuICAgICAgICBdLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgcGFnaW5hdGlvbjogdHJ1ZSxcbiAgICAgICAgICBwYWdlU2l6ZTogMTUsXG4gICAgICAgICAgc2hvd0Zvb3RlcjogdHJ1ZSxcbiAgICAgICAgICBhbGxvd0V4cG9ydDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbl07XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRUZW1wbGF0ZVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbUJsdWVwcmludHM6IFJlcG9ydEJsdWVwcmludFtdID0gW107XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGF2YWlsYWJsZSByZXBvcnQgYmx1ZXByaW50cyAoYnVpbHQtaW4gKyB1c2VyIHJlZ2lzdGVyZWQpLlxuICAgKi9cbiAgZ2V0VGVtcGxhdGVzKCk6IFJlcG9ydEJsdWVwcmludFtdIHtcbiAgICByZXR1cm4gWy4uLkJVSUxUSU5fQkxVRVBSSU5UUywgLi4udGhpcy5jdXN0b21CbHVlcHJpbnRzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBibHVlcHJpbnQgYnkgaXRzIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgKi9cbiAgZ2V0VGVtcGxhdGVCeUlkKGlkOiBzdHJpbmcpOiBSZXBvcnRCbHVlcHJpbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFRlbXBsYXRlcygpLmZpbmQoKHQpID0+IHQuaWQgPT09IGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZXMgYSBuZXcgUmVwb3J0RGVmaW5pdGlvbiBmcm9tIGEgdGVtcGxhdGUgd2l0aCB1bmlxdWUgSURzLlxuICAgKi9cbiAgaW5zdGFudGlhdGVUZW1wbGF0ZSh0ZW1wbGF0ZUlkOiBzdHJpbmcsIGN1c3RvbU5hbWU/OiBzdHJpbmcpOiBSZXBvcnREZWZpbml0aW9uIHtcbiAgICBjb25zdCBibHVlcHJpbnQgPSB0aGlzLmdldFRlbXBsYXRlQnlJZCh0ZW1wbGF0ZUlkKTtcbiAgICBpZiAoIWJsdWVwcmludCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXBvcnQgYmx1ZXByaW50IFwiJHt0ZW1wbGF0ZUlkfVwiIG5vdCBmb3VuZC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXBvcnRJZCA9IGdlbmVyYXRlSWQoJ3JlcCcpO1xuICAgIGNvbnN0IGRlZiA9IGJsdWVwcmludC5kZWZpbml0aW9uO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXBvcnRJZCxcbiAgICAgIG5hbWU6IGN1c3RvbU5hbWUgfHwgZGVmLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogZGVmLmRlc2NyaXB0aW9uLFxuICAgICAgc2NoZW1hVmVyc2lvbjogZGVmLnNjaGVtYVZlcnNpb24gPz8gMSxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICBwYXJhbWV0ZXJzOiBkZWYucGFyYW1ldGVycyA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmLnBhcmFtZXRlcnMpKSA6IFtdLFxuICAgICAgbGF5b3V0OiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZi5sYXlvdXQpKSxcbiAgICAgIGRhdGFTb3VyY2VzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZi5kYXRhU291cmNlcykpLFxuICAgICAgY29tcG9uZW50czogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWYuY29tcG9uZW50cykpLFxuICAgICAgZ3JpZDogZGVmLmdyaWQgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZi5ncmlkKSkgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjdXN0b20gYmx1ZXByaW50IHRvIG1ha2UgaXQgYXZhaWxhYmxlIGluIHRoZSBnYWxsZXJ5LlxuICAgKi9cbiAgcmVnaXN0ZXJUZW1wbGF0ZShibHVlcHJpbnQ6IFJlcG9ydEJsdWVwcmludCk6IHZvaWQge1xuICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jdXN0b21CbHVlcHJpbnRzLmZpbmRJbmRleCgoYikgPT4gYi5pZCA9PT0gYmx1ZXByaW50LmlkKTtcbiAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgdGhpcy5jdXN0b21CbHVlcHJpbnRzW2V4aXN0aW5nSWR4XSA9IGJsdWVwcmludDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXN0b21CbHVlcHJpbnRzLnB1c2goYmx1ZXByaW50KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==