@nova-design-system/nova-angular-18 3.19.0 → 3.20.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.
@@ -34,4 +34,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
34
34
  type: Input,
35
35
  args: [{ required: true }]
36
36
  }] } });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLWNlbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92YS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9udi1kYXRhdGFibGUtY2VsbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWUsTUFBTSxlQUFlLENBQUM7O0FBVzlEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILDhEQUE4RDtBQUM5RCxNQUFNLE9BQU8sd0JBQXdCO0lBT25DLFlBQW1CLFFBQWdEO1FBQWhELGFBQVEsR0FBUixRQUFRLENBQXdDO0lBQUcsQ0FBQzsrR0FQNUQsd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBTHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO2dGQU80QixlQUFlO3NCQUF6QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IENlbGxDb250ZXh0IH0gZnJvbSAnLi9kYXRhdGFibGUudXRpbHMnO1xuXG4vKipcbiAqIENvbnRleHQgdHlwZSBmb3IgY2VsbCB0ZW1wbGF0ZXMgLSB1c2VzIFRhblN0YWNrIFRhYmxlJ3MgQ2VsbENvbnRleHQgZGlyZWN0bHlcbiAqL1xuZXhwb3J0IHR5cGUgTnZEYXRhdGFibGVDZWxsQ29udGV4dDxUPiA9IHtcbiAgLyoqIFRoZSBjZWxsJ3MgYWN0dWFsIHZhbHVlICovXG4gICRpbXBsaWNpdDogQ2VsbENvbnRleHQ8VCwgdW5rbm93bj47XG59O1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byBtYXJrIG5nLXRlbXBsYXRlcyBhcyBjZWxsIHRlbXBsYXRlcyBmb3Igc3BlY2lmaWMgZmllbGRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8bnYtZGF0YXRhYmxlIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbcm93c109XCJkYXRhXCI+XG4gKiAgIDxuZy10ZW1wbGF0ZSBudkRhdGF0YWJsZUNlbGw9XCJuYW1lXCIgbGV0LWNvbnRleHQ+XG4gKiAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyBjb250ZXh0LnZhbHVlIH19PC9kaXY+XG4gKiAgIDwvbmctdGVtcGxhdGU+XG4gKlxuICogICA8bmctdGVtcGxhdGUgbnZEYXRhdGFibGVDZWxsPVwicHJpY2VcIiBsZXQtY29udGV4dD5cbiAqICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbW9ub1wiPiR7eyBjb250ZXh0LnZhbHVlIH19PC9zcGFuPlxuICogICA8L25nLXRlbXBsYXRlPlxuICogPC9udi1kYXRhdGFibGU+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbnZEYXRhdGFibGVDZWxsXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjbGFzcyBOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmU8VCA9IGFueT4ge1xuICAvKipcbiAgICogVGhlIGZpZWxkIG5hbWUgdGhpcyB0ZW1wbGF0ZSBzaG91bGQgcmVuZGVyLlxuICAgKiBTaG91bGQgbWF0Y2ggYSBmaWVsZCBpbiB5b3VyIGNvbHVtbiBkZWZpbml0aW9ucy5cbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG52RGF0YXRhYmxlQ2VsbCE6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPE52RGF0YXRhYmxlQ2VsbENvbnRleHQ8VD4+KSB7fVxufVxuIl19
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLWNlbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92YS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9udi1kYXRhdGFibGUtY2VsbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWUsTUFBTSxlQUFlLENBQUM7O0FBVzlEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUtILDhEQUE4RDtBQUM5RCxNQUFNLE9BQU8sd0JBQXdCO0lBT25DLFlBQW1CLFFBQW1EO1FBQW5ELGFBQVEsR0FBUixRQUFRLENBQTJDO0lBQUcsQ0FBQzsrR0FQL0Qsd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBTHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDhCQUE4QjtvQkFDeEMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO2dGQU80QixlQUFlO3NCQUF6QyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IENlbGxDb250ZXh0IH0gZnJvbSAnLi9kYXRhdGFibGUudXRpbHMnO1xuXG4vKipcbiAqIENvbnRleHQgdHlwZSBmb3IgY2VsbCB0ZW1wbGF0ZXMgLSB1c2VzIFRhblN0YWNrIFRhYmxlJ3MgQ2VsbENvbnRleHQgZGlyZWN0bHlcbiAqL1xuZXhwb3J0IHR5cGUgTnZEYXRhdGFibGVDZWxsQ29udGV4dDxULCBWPiA9IHtcbiAgLyoqIFRoZSBjZWxsJ3MgYWN0dWFsIHZhbHVlICovXG4gICRpbXBsaWNpdDogQ2VsbENvbnRleHQ8VCwgVj47XG59O1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byBtYXJrIG5nLXRlbXBsYXRlcyBhcyBjZWxsIHRlbXBsYXRlcyBmb3Igc3BlY2lmaWMgZmllbGRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8bnYtZGF0YXRhYmxlIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbcm93c109XCJkYXRhXCI+XG4gKiAgIDxuZy10ZW1wbGF0ZSBudkRhdGF0YWJsZUNlbGw9XCJuYW1lXCIgbGV0LWNvbnRleHQ+XG4gKiAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyBjb250ZXh0LnZhbHVlIH19PC9kaXY+XG4gKiAgIDwvbmctdGVtcGxhdGU+XG4gKlxuICogICA8bmctdGVtcGxhdGUgbnZEYXRhdGFibGVDZWxsPVwicHJpY2VcIiBsZXQtY29udGV4dD5cbiAqICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbW9ub1wiPiR7eyBjb250ZXh0LnZhbHVlIH19PC9zcGFuPlxuICogICA8L25nLXRlbXBsYXRlPlxuICogPC9udi1kYXRhdGFibGU+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbnZEYXRhdGFibGVDZWxsXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBjbGFzcyBOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmU8VCwgVj4ge1xuICAvKipcbiAgICogVGhlIGZpZWxkIG5hbWUgdGhpcyB0ZW1wbGF0ZSBzaG91bGQgcmVuZGVyLlxuICAgKiBTaG91bGQgbWF0Y2ggYSBmaWVsZCBpbiB5b3VyIGNvbHVtbiBkZWZpbml0aW9ucy5cbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG52RGF0YXRhYmxlQ2VsbCE6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPE52RGF0YXRhYmxlQ2VsbENvbnRleHQ8VCwgVj4+KSB7fVxufVxuIl19
@@ -3,12 +3,13 @@
3
3
  import { Component, computed, input, TemplateRef, CUSTOM_ELEMENTS_SCHEMA, ContentChild, ContentChildren, effect, signal, viewChild, } from '@angular/core';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { NvDatatableCellDirective, } from './nv-datatable-cell.directive';
6
- import { createAngularTable, getCoreRowModel, getPaginationRowModel, FlexRenderDirective, } from './datatable.utils'; // local copy of @tanstack/angular-table (required for storybook, the built version is not working)
6
+ // local copy of @tanstack/angular-table (required for multi angular versions, the built version is not working)
7
+ import { createAngularTable, getCoreRowModel, getPaginationRowModel, FlexRenderDirective, } from './datatable.utils';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/common";
9
- export { flexRenderComponent as nvDatatableRenderComponent } from './datatable.utils';
10
10
  /**
11
- * Nova Datatable built on TanStack Table (Angular).
11
+ * A powerful, flexible datatable component built on TanStack Table.
12
+ * Supports custom cell rendering, column configuration, pagination, and full TypeScript typing.
12
13
  */
13
14
  export class NvDatatable {
14
15
  /** Public getter for table instance. */
@@ -50,27 +51,41 @@ export class NvDatatable {
50
51
  const templateMap = this.cellTemplateMap();
51
52
  return this.columns()
52
53
  .filter((col) => !col.hidden)
53
- .map((col) => ({
54
- accessorKey: col.field,
55
- header: col.headerName || String(col.field),
56
- size: col.width,
57
- enableResizing: col.resizable ?? true,
58
- cell: (context) => {
54
+ .map((col) => {
55
+ // Shared cell renderer
56
+ const cellRenderer = (context) => {
59
57
  const fieldName = String(col.field);
60
58
  const cellTemplate = templateMap.get(fieldName);
61
59
  // Priority: template > renderCell > default
62
60
  if (cellTemplate) {
63
- // Return TemplateRef directly - FlexRender will handle it
61
+ // Return TemplateRef directly - getValue() returns formatted value
64
62
  return cellTemplate;
65
63
  }
66
64
  // Fall back to renderCell if provided
67
65
  if (col.renderCell) {
68
66
  return col.renderCell(context);
69
67
  }
70
- // Default: just return the value
68
+ // Default: just return the value (formatted if valueFormatter was used)
71
69
  return context.getValue();
72
- },
73
- }));
70
+ };
71
+ return {
72
+ accessorKey: col.field,
73
+ accessorFn: col.valueFormatter
74
+ ? (row) => {
75
+ const rawValue = row[col.field];
76
+ return col.valueFormatter({
77
+ value: rawValue,
78
+ row,
79
+ field: col.field,
80
+ });
81
+ }
82
+ : undefined,
83
+ header: col.headerName || String(col.field),
84
+ size: col.width,
85
+ enableResizing: col.resizable ?? true,
86
+ cell: cellRenderer,
87
+ };
88
+ });
74
89
  });
75
90
  /** TanStack table instance with Signals */
76
91
  this.tableInstance = createAngularTable(() => {
@@ -382,4 +397,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
382
397
  type: ContentChildren,
383
398
  args: [NvDatatableCellDirective]
384
399
  }] } });
385
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbnYtZGF0YXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsMENBQTBDO0FBRTFDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLFlBQVksRUFDWixlQUFlLEVBRWYsTUFBTSxFQUNOLE1BQU0sRUFFTixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx3QkFBd0IsR0FFekIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsbUJBQW1CLEdBS3BCLE1BQU0sbUJBQW1CLENBQUMsQ0FBQyxtR0FBbUc7OztBQUkvSCxPQUFPLEVBQUUsbUJBQW1CLElBQUksMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQXlHdEY7O0dBRUc7QUE0RUgsTUFBTSxPQUFPLFdBQVc7SUEwSXRCLHdDQUF3QztJQUN4QyxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQXlDRDtRQW5MQSx5QkFBeUI7UUFDekIsWUFBTyxHQUFHLEtBQUssQ0FBeUIsRUFBRSxDQUFDLENBQUM7UUFDNUMsZUFBZTtRQUNmLFNBQUksR0FBRyxLQUFLLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDdEIsd0NBQXdDO1FBQ3hDLGVBQVUsR0FBRyxLQUFLLENBQTBDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLHNFQUFzRTtRQUN0RSxpQkFBWSxHQUFHLEtBQUssQ0FBVSxL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SSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzsrR0F0UlUsV0FBVzttR0FBWCxXQUFXLDRyQkFhc0IsV0FBVyxnREFNdEMsd0JBQXdCLG9KQXpGL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0VULDJEQXRFUyxZQUFZLHNNQUFFLG1CQUFtQjs7NEZBd0VoQyxXQUFXO2tCQTNFdkIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztvQkFDNUMsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvRVQ7aUJBQ0Y7d0RBZUMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFPekQsYUFBYTtzQkFEWixlQUFlO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtanNkb2MgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtcmV0dXJucyAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIGVmZmVjdCxcbiAgc2lnbmFsLFxuICBFbGVtZW50UmVmLFxuICB2aWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlLFxuICB0eXBlIE52RGF0YXRhYmxlQ2VsbENvbnRleHQsXG59IGZyb20gJy4vbnYtZGF0YXRhYmxlLWNlbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gIGNyZWF0ZUFuZ3VsYXJUYWJsZSxcbiAgZ2V0Q29yZVJvd01vZGVsLFxuICBnZXRQYWdpbmF0aW9uUm93TW9kZWwsXG4gIEZsZXhSZW5kZXJEaXJlY3RpdmUsXG4gIHR5cGUgRmxleFJlbmRlckNvbXBvbmVudCxcbiAgdHlwZSBDb2x1bW5EZWYsXG4gIHR5cGUgQ2VsbENvbnRleHQsXG4gIHR5cGUgUGFnaW5hdGlvblN0YXRlLFxufSBmcm9tICcuL2RhdGF0YWJsZS51dGlscyc7IC8vIGxvY2FsIGNvcHkgb2YgQHRhbnN0YWNrL2FuZ3VsYXItdGFibGUgKHJlcXVpcmVkIGZvciBzdG9yeWJvb2ssIHRoZSBidWlsdCB2ZXJzaW9uIGlzIG5vdCB3b3JraW5nKVxuXG5leHBvcnQgdHlwZSB7IENlbGxDb250ZXh0IGFzIE52RGF0YXRhYmxlQ2VsbENvbnRleHQgfTtcblxuZXhwb3J0IHsgZmxleFJlbmRlckNvbXBvbmVudCBhcyBudkRhdGF0YWJsZVJlbmRlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0YXRhYmxlLnV0aWxzJztcblxuLyoqIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBkYXRhdGFibGUgcm93LiAqL1xuZXhwb3J0IHR5cGUgTnZEYXRhdGFibGVSb3cgPSBSZWNvcmQ8XG4gIHN0cmluZyxcbiAgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgfCB0eXBlb2YgRGF0ZVxuPjtcblxuLyoqIFBhcmFtZXRlcnMgZm9yIGN1c3RvbSBjZWxsIHJlbmRlcmluZyBmdW5jdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnZUYWJsZVJlbmRlckNlbGxQYXJhbXM8VCBleHRlbmRzIE52RGF0YXRhYmxlUm93LCBWPiB7XG4gIHZhbHVlOiBWO1xuICByb3c6IFQ7XG4gIGZpZWxkOiBrZXlvZiBUO1xuICByb3dJbmRleDogbnVtYmVyO1xufVxuXG4vKiogQ29sdW1uIGRlZmluaXRpb24gZm9yIE52RGF0YXRhYmxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZUNvbHVtbjxUIGV4dGVuZHMgTnZEYXRhdGFibGVSb3c+IHtcbiAgZmllbGQ6IGtleW9mIFQ7XG4gIGhlYWRlck5hbWU/OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICByZXNpemFibGU/OiBib29sZWFuO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICAvKipcbiAgICogQ3VzdG9tIGNlbGwgcmVuZGVyZXIgZnVuY3Rpb24gdGhhdCBjYW4gcmV0dXJuIGVpdGhlciBhIHN0cmluZyBvciBBbmd1bGFyIFRlbXBsYXRlUmVmLlxuICAgKiBVc2UgYCRpbXBsaWNpdGAgaW4geW91ciB0ZW1wbGF0ZSB0byByZWNlaXZlIHRoZSBDZWxsQ29udGV4dC5cbiAgICovXG4gIHJlbmRlckNlbGw/OiAoY29udGV4dDogQ2VsbENvbnRleHQ8VCwgdW5rbm93bj4pID0+XG4gICAgfCBzdHJpbmdcbiAgICB8IEZsZXhSZW5kZXJDb21wb25lbnRcbiAgICB8IFRlbXBsYXRlUmVmPHtcbiAgICAgICAgJGltcGxpY2l0OiBDZWxsQ29udGV4dDxULCB1bmtub3duPjtcbiAgICAgIH0+O1xufVxuXG4vKipcbiAqIFBhZ2luYXRpb24gY29uZmlndXJhdGlvbiBmb3IgTnZEYXRhdGFibGUuXG4gKiBTdXBwb3J0cyB0aHJlZSBtb2RlczogY2xpZW50LXNpZGUsIHNlcnZlci1zaWRlIHdpdGggYnV0dG9ucywgYW5kIGluZmluaXRlIHNjcm9sbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVBhZ2luYXRpb25Db25maWcge1xuICAvKiogUGFnaW5hdGlvbiBtb2RlICovXG4gIG1vZGU6ICdjbGllbnQnIHwgJ3NlcnZlcicgfCAnaW5maW5pdGUnO1xuICAvKiogSW5pdGlhbCBwYWdlIHNpemUgKGRlZmF1bHQ6IDEwKSAqL1xuICBpbml0aWFsUGFnZVNpemU/OiBudW1iZXI7XG4gIC8qKiBBdmFpbGFibGUgcGFnZSBzaXplIG9wdGlvbnMgKGRlZmF1bHQ6IFsxMCwgMjAsIDUwLCAxMDBdKSAqL1xuICBwYWdlU2l6ZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvLyBTZXJ2ZXItc2lkZSAoYnV0dG9ucykgc3BlY2lmaWMgcHJvcGVydGllc1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHJvd3MgKGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uKSAqL1xuICB0b3RhbFJvd0NvdW50PzogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHBhZ2VzIChmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbikgKi9cbiAgdG90YWxQYWdlQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBDYWxsYmFjayB3aGVuIHBhZ2luYXRpb24gc3RhdGUgY2hhbmdlcyAoZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24pICovXG4gIG9uUGFnaW5hdGlvbkNoYW5nZT86IChzdGF0ZToge1xuICAgIC8qKiBDdXJyZW50IHBhZ2UgaW5kZXggKi9cbiAgICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgICAvKiogQ3VycmVudCBwYWdlIHNpemUgKi9cbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICB9KSA9PiB2b2lkO1xuXG4gIC8vIEluZmluaXRlIHNjcm9sbCBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gIC8qKiBXaGV0aGVyIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIHRvIGxvYWQgKGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBkYXRhIGlzIGN1cnJlbnRseSBsb2FkaW5nIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICAvKiogRGlzdGFuY2UgZnJvbSBib3R0b20gaW4gcGl4ZWxzIHRvIHRyaWdnZXIgbG9hZCAoZGVmYXVsdDogNTAwKSAqL1xuICBsb2FkTW9yZVRocmVzaG9sZD86IG51bWJlcjtcbiAgLyoqIENhbGxiYWNrIHRvIGxvYWQgbW9yZSBkYXRhIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBvbkxvYWRNb3JlPzogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBBUEkgZXhwb3NlZCB0byBwYWdpbmF0aW9uIHRlbXBsYXRlIGZvciBidWlsZGluZyBjdXN0b20gcGFnaW5hdGlvbiBVSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVJlbmRlclBhZ2luYXRpb25BUEkge1xuICAvKiogQ3VycmVudCBwYWdlIGluZGV4ICh6ZXJvLWJhc2VkKSAqL1xuICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgLyoqIEN1cnJlbnQgcGFnZSBzaXplICovXG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2YgcGFnZXMgKi9cbiAgcGFnZUNvdW50OiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2Ygcm93cyAqL1xuICByb3dDb3VudDogbnVtYmVyO1xuICAvKiogTmF2aWdhdGUgdG8gZmlyc3QgcGFnZSAqL1xuICBmaXJzdFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBwcmV2aW91cyBwYWdlICovXG4gIHByZXZpb3VzUGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIG5leHQgcGFnZSAqL1xuICBuZXh0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIGxhc3QgcGFnZSAqL1xuICBsYXN0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIHNwZWNpZmljIHBhZ2UgYnkgaW5kZXggKi9cbiAgc2V0UGFnZUluZGV4OiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqIENoYW5nZSBwYWdlIHNpemUgKi9cbiAgc2V0UGFnZVNpemU6IChzaXplOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHByZXZpb3VzIHBhZ2UgaXMgYXZhaWxhYmxlICovXG4gIGNhblByZXZpb3VzUGFnZTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbmV4dCBwYWdlIGlzIGF2YWlsYWJsZSAqL1xuICBjYW5OZXh0UGFnZTogYm9vbGVhbjtcbiAgLyoqIExvYWRpbmcgc3RhdGUgKG9ubHkgZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbW9yZSBpdGVtcyBhcmUgYXZhaWxhYmxlIChvbmx5IGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE5vdmEgRGF0YXRhYmxlIGJ1aWx0IG9uIFRhblN0YWNrIFRhYmxlIChBbmd1bGFyKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnYtZGF0YXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRmxleFJlbmRlckRpcmVjdGl2ZV0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bnYtdGFibGU+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0aGVhZCBbYXR0ci5kYXRhLXN0aWNreS10b3BdPVwic3RpY2t5SGVhZGVyKCkgPyAndHJ1ZScgOiBudWxsXCI+XG4gICAgICAgICAgQGZvciAoaGVhZGVyR3JvdXAgb2YgdGFibGUoKS5nZXRIZWFkZXJHcm91cHMoKTsgdHJhY2sgaGVhZGVyR3JvdXAuaWQpXG4gICAgICAgICAge1xuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIEBmb3IgKGhlYWRlciBvZiBoZWFkZXJHcm91cC5oZWFkZXJzOyB0cmFjayBoZWFkZXIuaWQpIHtcbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGF0YXRhYmxlLWhlYWRlci0nICsgaGVhZGVyLmlkXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICAgICAgICAgIGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLnNpemVcbiAgICAgICAgICAgICAgICAgID8gaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuc2l6ZSArICdweCdcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLW5vLXJlc2l6ZV09XCJcbiAgICAgICAgICAgICAgICAhaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuZW5hYmxlUmVzaXppbmcgPyAndHJ1ZScgOiBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoIWhlYWRlci5pc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgIHt7IGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLmhlYWRlciB9fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RoZWFkPlxuXG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgICBAZm9yIChyb3cgb2YgdGFibGUoKS5nZXRSb3dNb2RlbCgpLnJvd3M7IHRyYWNrIHJvdy5pZDsgbGV0IGkgPSAkaW5kZXgpXG4gICAgICAgICAge1xuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2RhdGF0YWJsZS1yb3ctJyArIHJvdy5pZFwiXG4gICAgICAgICAgICAjdGFibGVSb3dcbiAgICAgICAgICAgIFthdHRyLmRhdGEtaXMtbGFzdF09XCJcbiAgICAgICAgICAgICAgaXNJbmZpbml0ZVNjcm9sbCgpICYmIGkgPT09IHRhYmxlKCkuZ2V0Um93TW9kZWwoKS5yb3dzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChjZWxsIG9mIHJvdy5nZXRWaXNpYmxlQ2VsbHMoKTsgdHJhY2sgY2VsbC5pZCkge1xuICAgICAgICAgICAgPHRkIFthdHRyLmRhdGEtdGVzdGlkXT1cIidkYXRhdGFibGUtY2VsbC0nICsgY2VsbC5pZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKmZsZXhSZW5kZXI9XCJcbiAgICAgICAgICAgICAgICAgIGNlbGwuY29sdW1uLmNvbHVtbkRlZi5jZWxsO1xuICAgICAgICAgICAgICAgICAgcHJvcHM6IGNlbGwuZ2V0Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgICAgbGV0IGNlbGxDb250ZW50XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGNlbGxDb250ZW50IH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9udi10YWJsZT5cblxuICAgIDwhLS0gUmVuZGVyIHBhZ2luYXRpb24gaWYgY29uZmlndXJlZCAtLT5cbiAgICBAaWYgKHBhZ2luYXRpb25BUEkoKSkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHBhZ2luYXRpb25UZW1wbGF0ZSB8fCBudWxsO1xuICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcGFnaW5hdGlvbkFQSSgpIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgTnZEYXRhdGFibGU8VCBleHRlbmRzIE52RGF0YXRhYmxlUm93ID0gTnZEYXRhdGFibGVSb3c+XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKiBDb2x1bW4gZGVmaW5pdGlvbnMgKi9cbiAgY29sdW1ucyA9IGlucHV0PE52RGF0YXRhYmxlQ29sdW1uPFQ+W10+KFtdKTtcbiAgLyoqIFJvdyBkYXRhICovXG4gIHJvd3MgPSBpbnB1dDxUW10+KFtdKTtcbiAgLyoqIE9wdGlvbmFsIHBhZ2luYXRpb24gY29uZmlndXJhdGlvbiAqL1xuICBwYWdpbmF0aW9uID0gaW5wdXQ8TnZEYXRhdGFibGVQYWdpbmF0aW9uQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogU2hvdWxkIHRoZSBoZWFkZXIgc3RpY2sgdG8gdGhlIHRvcCBvZiB0aGUgdGFibGUgd2hlbiBzY3JvbGxpbmc/ICovXG4gIHN0aWNreUhlYWRlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvKiogVGVtcGxhdGUgZm9yIGN1c3RvbSBwYWdpbmF0aW9uIFVJICovXG4gIEBDb250ZW50Q2hpbGQoJ3BhZ2luYXRpb25UZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcGFnaW5hdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8e1xuICAgICRpbXBsaWNpdDogTnZEYXRhdGFibGVSZW5kZXJQYWdpbmF0aW9uQVBJO1xuICB9PjtcblxuICAvKiogQ2VsbCB0ZW1wbGF0ZXMgcHJvdmlkZWQgdmlhIG52RGF0YXRhYmxlQ2VsbCBkaXJlY3RpdmUgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmUpXG4gIGNlbGxUZW1wbGF0ZXM/OiBRdWVyeUxpc3Q8TnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlPFQ+PjtcblxuICAvKiogU2lnbmFsIHRvIHRyYWNrIGNlbGwgdGVtcGxhdGVzIGFycmF5ICovXG4gIHByaXZhdGUgY2VsbFRlbXBsYXRlc1NpZ25hbCA9IHNpZ25hbDxOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmU8VD5bXT4oW10pO1xuXG4gIC8qKiBNYXAgb2YgZmllbGQgbmFtZXMgdG8gY2VsbCB0ZW1wbGF0ZXMgKi9cbiAgcHJpdmF0ZSBjZWxsVGVtcGxhdGVNYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIFRlbXBsYXRlUmVmPE52RGF0YXRhYmxlQ2VsbENvbnRleHQ8VD4+PigpO1xuICAgIHRoaXMuY2VsbFRlbXBsYXRlc1NpZ25hbCgpLmZvckVhY2goKGRpcmVjdGl2ZSkgPT4ge1xuICAgICAgbWFwLnNldChkaXJlY3RpdmUubnZEYXRhdGFibGVDZWxsLCBkaXJlY3RpdmUudGVtcGxhdGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBtYXA7XG4gIH0pO1xuXG4gIC8qKiBQYWdpbmF0aW9uIHN0YXRlIGZvciBzZXJ2ZXIgbW9kZSAqL1xuICBwcml2YXRlIHBhZ2luYXRpb25TdGF0ZSA9IHNpZ25hbDxQYWdpbmF0aW9uU3RhdGU+KHtcbiAgICBwYWdlSW5kZXg6IDAsXG4gICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdGlvbigpPy5pbml0aWFsUGFnZVNpemUgfHwgMTAsXG4gIH0pO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGFibGUgcm93cyBmb3IgaW5maW5pdGUgc2Nyb2xsIG9ic2VydmVyICovXG4gIHByaXZhdGUgdGFibGVSb3dzID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd0YWJsZVJvdycpO1xuXG4gIC8qKiBJbnRlcnNlY3Rpb24gb2JzZXJ2ZXIgZm9yIGluZmluaXRlIHNjcm9sbCAqL1xuICBwcml2YXRlIG9ic2VydmVyOiBJbnRlcnNlY3Rpb25PYnNlcnZlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBIZWxwZXIgdG8gY2hlY2sgaWYgdXNpbmcgaW5maW5pdGUgc2Nyb2xsICovXG4gIGlzSW5maW5pdGVTY3JvbGwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBhZ2luYXRpb24oKT8ubW9kZSA9PT0gJ2luZmluaXRlJyk7XG5cbiAgLyoqIENvbXB1dGVkIHRhYmxlIGNvbHVtbnMgd2l0aCBwcm9wZXIgdHlwaW5nIGFuZCBmaWx0ZXJpbmcuICovXG4gIHRhYmxlQ29sdW1ucyA9IGNvbXB1dGVkPENvbHVtbkRlZjxUPltdPigoKSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGVNYXAgPSB0aGlzLmNlbGxUZW1wbGF0ZU1hcCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucygpXG4gICAgICAuZmlsdGVyKChjb2wpID0+ICFjb2wuaGlkZGVuKVxuICAgICAgLm1hcCgoY29sKSA9PiAoe1xuICAgICAgICBhY2Nlc3NvcktleTogY29sLmZpZWxkIGFzIHN0cmluZyxcbiAgICAgICAgaGVhZGVyOiBjb2wuaGVhZGVyTmFtZSB8fCBTdHJpbmcoY29sLmZpZWxkKSxcbiAgICAgICAgc2l6ZTogY29sLndpZHRoLFxuICAgICAgICBlbmFibGVSZXNpemluZzogY29sLnJlc2l6YWJsZSA/PyB0cnVlLFxuICAgICAgICBjZWxsOiAoY29udGV4dDogQ2VsbENvbnRleHQ8VCwgdW5rbm93bj4pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBTdHJpbmcoY29sLmZpZWxkKTtcbiAgICAgICAgICBjb25zdCBjZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZU1hcC5nZXQoZmllbGROYW1lKTtcblxuICAgICAgICAgIC8vIFByaW9yaXR5OiB0ZW1wbGF0ZSA+IHJlbmRlckNlbGwgPiBkZWZhdWx0XG4gICAgICAgICAgaWYgKGNlbGxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgLy8gUmV0dXJuIFRlbXBsYXRlUmVmIGRpcmVjdGx5IC0gRmxleFJlbmRlciB3aWxsIGhhbmRsZSBpdFxuICAgICAgICAgICAgcmV0dXJuIGNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gcmVuZGVyQ2VsbCBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmIChjb2wucmVuZGVyQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbC5yZW5kZXJDZWxsKGNvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERlZmF1bHQ6IGp1c3QgcmV0dXJuIHRoZSB2YWx1ZVxuICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KSk7XG4gIH0pO1xuXG4gIC8qKiBUYW5TdGFjayB0YWJsZSBpbnN0YW5jZSB3aXRoIFNpZ25hbHMgKi9cbiAgcHJpdmF0ZSB0YWJsZUluc3RhbmNlID0gY3JlYXRlQW5ndWxhclRhYmxlKCgpID0+IHtcbiAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG5cbiAgICBpZiAoIXBhZ2luYXRpb25Db25maWcgfHwgcGFnaW5hdGlvbkNvbmZpZy5tb2RlID09PSAnaW5maW5pdGUnKSB7XG4gICAgICAvLyBObyBwYWdpbmF0aW9uIG9yIGluZmluaXRlIHNjcm9sbCAtIHNpbXBsZSBjb25maWdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHRoaXMucm93cygpLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLnRhYmxlQ29sdW1ucygpLFxuICAgICAgICBnZXRDb3JlUm93TW9kZWw6IGdldENvcmVSb3dNb2RlbCgpLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIC8vIENsaWVudC1zaWRlIHBhZ2luYXRpb25cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHRoaXMucm93cygpLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLnRhYmxlQ29sdW1ucygpLFxuICAgICAgICBnZXRDb3JlUm93TW9kZWw6IGdldENvcmVSb3dNb2RlbCgpLFxuICAgICAgICBnZXRQYWdpbmF0aW9uUm93TW9kZWw6IGdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLFxuICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbkNvbmZpZy5pbml0aWFsUGFnZVNpemUgfHwgMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlcnZlci1zaWRlIHBhZ2luYXRpb25cbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uU3RhdGUoKS5wYWdlU2l6ZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHRoaXMucm93cygpLFxuICAgICAgICBjb2x1bW5zOiB0aGlzLnRhYmxlQ29sdW1ucygpLFxuICAgICAgICBnZXRDb3JlUm93TW9kZWw6IGdldENvcmVSb3dNb2RlbCgpLFxuICAgICAgICBtYW51YWxQYWdpbmF0aW9uOiB0cnVlLFxuICAgICAgICBwYWdlQ291bnQ6XG4gICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VDb3VudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcudG90YWxQYWdlQ291bnRcbiAgICAgICAgICAgIDogcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJvd0NvdW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKHBhZ2luYXRpb25Db25maWcudG90YWxSb3dDb3VudCAvIHBhZ2VTaXplKVxuICAgICAgICAgICAgOiAtMSxcbiAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICBwYWdpbmF0aW9uOiB0aGlzLnBhZ2luYXRpb25TdGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgICBvblBhZ2luYXRpb25DaGFuZ2U6IChcbiAgICAgICAgICB1cGRhdGVyT3JWYWx1ZTpcbiAgICAgICAgICAgIHwgUGFnaW5hdGlvblN0YXRlXG4gICAgICAgICAgICB8ICgob2xkOiBQYWdpbmF0aW9uU3RhdGUpID0+IFBhZ2luYXRpb25TdGF0ZSksXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdXBkYXRlck9yVmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblN0YXRlLnNldCh1cGRhdGVyT3JWYWx1ZSh0aGlzLnBhZ2luYXRpb25TdGF0ZSgpKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblN0YXRlLnNldCh1cGRhdGVyT3JWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKiBQdWJsaWMgZ2V0dGVyIGZvciB0YWJsZSBpbnN0YW5jZS4gKi9cbiAgdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVJbnN0YW5jZSgpO1xuICB9XG5cbiAgLyoqIEJ1aWxkIHBhZ2luYXRpb24gQVBJIGZvciB0ZW1wbGF0ZSAqL1xuICBwYWdpbmF0aW9uQVBJID0gY29tcHV0ZWQ8TnZEYXRhdGFibGVSZW5kZXJQYWdpbmF0aW9uQVBJIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IHBhZ2luYXRpb25Db25maWcgPSB0aGlzLnBhZ2luYXRpb24oKTtcbiAgICBpZiAoIXBhZ2luYXRpb25Db25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZSgpO1xuICAgIGNvbnN0IHRhYmxlUGFnaW5hdGlvblN0YXRlID0gdGFibGUuZ2V0U3RhdGUoKS5wYWdpbmF0aW9uO1xuICAgIGNvbnN0IHBhZ2VDb3VudCA9IHRhYmxlLmdldFBhZ2VDb3VudCgpO1xuICAgIGNvbnN0IHJvd0NvdW50ID1cbiAgICAgIHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ3NlcnZlcidcbiAgICAgICAgPyBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUm93Q291bnQgfHwgdGhpcy5yb3dzKCkubGVuZ3RoXG4gICAgICAgIDogdGhpcy5yb3dzKCkubGVuZ3RoO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VJbmRleDogdGFibGVQYWdpbmF0aW9uU3RhdGUucGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHRhYmxlUGFnaW5hdGlvblN0YXRlLnBhZ2VTaXplLFxuICAgICAgcGFnZUNvdW50LFxuICAgICAgcm93Q291bnQsXG4gICAgICBmaXJzdFBhZ2U6ICgpID0+IHRhYmxlLnNldFBhZ2VJbmRleCgwKSxcbiAgICAgIHByZXZpb3VzUGFnZTogKCkgPT4gdGFibGUucHJldmlvdXNQYWdlKCksXG4gICAgICBuZXh0UGFnZTogKCkgPT4gdGFibGUubmV4dFBhZ2UoKSxcbiAgICAgIGxhc3RQYWdlOiAoKSA9PiB0YWJsZS5zZXRQYWdlSW5kZXgocGFnZUNvdW50IC0gMSksXG4gICAgICBzZXRQYWdlSW5kZXg6IChpbmRleDogbnVtYmVyKSA9PiB0YWJsZS5zZXRQYWdlSW5kZXgoaW5kZXgpLFxuICAgICAgc2V0UGFnZVNpemU6IChzaXplOiBudW1iZXIpID0+IHRhYmxlLnNldFBhZ2VTaXplKHNpemUpLFxuICAgICAgY2FuUHJldmlvdXNQYWdlOiB0YWJsZS5nZXRDYW5QcmV2aW91c1BhZ2UoKSxcbiAgICAgIGNhbk5leHRQYWdlOiB0YWJsZS5nZXRDYW5OZXh0UGFnZSgpLFxuICAgICAgaXNMb2FkaW5nOlxuICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm1vZGUgPT09ICdpbmZpbml0ZSdcbiAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcuaXNMb2FkaW5nXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBoYXNNb3JlOlxuICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm1vZGUgPT09ICdpbmZpbml0ZSdcbiAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcuaGFzTW9yZVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIFdhdGNoIHBhZ2luYXRpb24gc3RhdGUgY2hhbmdlcyBmb3Igc2VydmVyIG1vZGVcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25Db25maWcgPSB0aGlzLnBhZ2luYXRpb24oKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnBhZ2luYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnPy5tb2RlID09PSAnc2VydmVyJyAmJlxuICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25QYWdpbmF0aW9uQ2hhbmdlXG4gICAgICAgICkge1xuICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25QYWdpbmF0aW9uQ2hhbmdlKHtcbiAgICAgICAgICAgIHBhZ2VJbmRleDogc3RhdGUucGFnZUluZGV4LFxuICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlLnBhZ2VTaXplLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG5cbiAgICAvLyBTZXQgdXAgaW50ZXJzZWN0aW9uIG9ic2VydmVyIGZvciBpbmZpbml0ZSBzY3JvbGxcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRpb25Db25maWcgPSB0aGlzLnBhZ2luYXRpb24oKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMucm93cygpOyAvLyBUcmFjayByb3dzIGNoYW5nZXNcblxuICAgICAgICAvLyBDbGVhbiB1cCBleGlzdGluZyBvYnNlcnZlclxuICAgICAgICBpZiAodGhpcy5vYnNlcnZlcikge1xuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBzZXQgdXAgb2JzZXJ2ZXIgZm9yIGluZmluaXRlIHNjcm9sbCBtb2RlXG4gICAgICAgIGlmIChwYWdpbmF0aW9uQ29uZmlnPy5tb2RlICE9PSAnaW5maW5pdGUnIHx8IHJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZW5zdXJlIERPTSBpcyB1cGRhdGVkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IHBhZ2luYXRpb25Db25maWcubG9hZE1vcmVUaHJlc2hvbGQgfHwgNTAwO1xuXG4gICAgICAgICAgLy8gRmluZCB0aGUgbGFzdCByb3cgZWxlbWVudFxuICAgICAgICAgIGNvbnN0IHRhYmxlUm93RWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgJ1tkYXRhLWlzLWxhc3Q9XCJ0cnVlXCJdJyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGxhc3RSb3dFbGVtZW50ID0gdGFibGVSb3dFbGVtZW50c1t0YWJsZVJvd0VsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgaWYgKCFsYXN0Um93RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgICAgICAoZW50cmllcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbnRyeS5pc0ludGVyc2VjdGluZyAmJlxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2luZmluaXRlJyAmJlxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcuaGFzTW9yZSAmJlxuICAgICAgICAgICAgICAgICFwYWdpbmF0aW9uQ29uZmlnLmlzTG9hZGluZyAmJlxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25Mb2FkTW9yZVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm9uTG9hZE1vcmUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcm9vdE1hcmdpbjogYCR7dGhyZXNob2xkfXB4YCxcbiAgICAgICAgICAgICAgcm9vdDogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShsYXN0Um93RWxlbWVudCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFN5bmMgY2VsbCB0ZW1wbGF0ZXMgUXVlcnlMaXN0IHRvIHNpZ25hbFxuICAgIGlmICh0aGlzLmNlbGxUZW1wbGF0ZXMpIHtcbiAgICAgIHRoaXMuY2VsbFRlbXBsYXRlc1NpZ25hbC5zZXQodGhpcy5jZWxsVGVtcGxhdGVzLnRvQXJyYXkoKSk7XG5cbiAgICAgIC8vIFN1YnNjcmliZSB0byBjaGFuZ2VzIGluIHRoZSBRdWVyeUxpc3RcbiAgICAgIHRoaXMuY2VsbFRlbXBsYXRlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNlbGxUZW1wbGF0ZXMpIHtcbiAgICAgICAgICB0aGlzLmNlbGxUZW1wbGF0ZXNTaWduYWwuc2V0KHRoaXMuY2VsbFRlbXBsYXRlcy50b0FycmF5KCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vYnNlcnZlcikge1xuICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB0aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
400
+ /********************************* UTILS **************************************/
401
+ /**
402
+ * Creates a strongly-typed column factory for a given row type.
403
+ *
404
+ * @template Row The row data type (e.g., `Product`)
405
+ *
406
+ * @returns {function} A function that accepts a column definition and infers:
407
+ * - `K` as the field key (`keyof Row`)
408
+ * - `F` as the return type of `valueFormatter` (defaults to `Row[K]`)
409
+ *
410
+ * @example
411
+ * ```ts
412
+ * // Define your row type
413
+ * interface Product {
414
+ * name: string;
415
+ * price: number;
416
+ * }
417
+ *
418
+ * const col = makeColumn<Product>();
419
+ */
420
+ export function makeColumn() {
421
+ return function define(col) {
422
+ return col;
423
+ };
424
+ }
425
+ export { flexRenderComponent as nvDatatableRenderComponent } from './datatable.utils';
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbnYtZGF0YXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsMENBQTBDO0FBRTFDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLFlBQVksRUFDWixlQUFlLEVBRWYsTUFBTSxFQUNOLE1BQU0sRUFFTixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx3QkFBd0IsR0FFekIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2QyxnSEFBZ0g7QUFDaEgsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLG1CQUFtQixHQU1wQixNQUFNLG1CQUFtQixDQUFDOzs7QUFFM0I7OztHQUdHO0FBNEVILE1BQU0sT0FBTyxXQUFXO0lBNEp0Qix3Q0FBd0M7SUFDeEMsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUF5Q0Q7UUF2TUEseUJBQXlCO1FBQ3pCLFlBQU8sR0FBRyxLQUFLLENBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLGVBQWU7UUFDZixTQUFJLEdBQUcsS0FBSyxDQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLHdDQUF3QztRQUN4QyxlQUFVLEdBQUcsS0FBSyxDQUEwQyxTQUFTLENBQUMsQ0FBQztRQUN2RSxzRUFBc0U7UUFDdEUsaUJBQVksR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFZckMsMkNBQTJDO1FBQ25DLHdCQUFtQixHQUFHLE1BQU0sQ0FFbEMs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Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLFVBQVUsVUFBVTtJQUN4QixPQUFPLFNBQVMsTUFBTSxDQUNwQixHQUFpQztRQUVqQyxPQUFPLEdBQXdDLENBQUM7SUFDbEQsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE9BQU8sRUFBRSxtQkFBbUIsSUFBSSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1qc2RvYyAqL1xuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1yZXR1cm5zICovXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGlucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIFF1ZXJ5TGlzdCxcbiAgZWZmZWN0LFxuICBzaWduYWwsXG4gIEVsZW1lbnRSZWYsXG4gIHZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmUsXG4gIHR5cGUgTnZEYXRhdGFibGVDZWxsQ29udGV4dCxcbn0gZnJvbSAnLi9udi1kYXRhdGFibGUtY2VsbC5kaXJlY3RpdmUnO1xuXG4vLyBsb2NhbCBjb3B5IG9mIEB0YW5zdGFjay9hbmd1bGFyLXRhYmxlIChyZXF1aXJlZCBmb3IgbXVsdGkgYW5ndWxhciB2ZXJzaW9ucywgdGhlIGJ1aWx0IHZlcnNpb24gaXMgbm90IHdvcmtpbmcpXG5pbXBvcnQge1xuICBjcmVhdGVBbmd1bGFyVGFibGUsXG4gIGdldENvcmVSb3dNb2RlbCxcbiAgZ2V0UGFnaW5hdGlvblJvd01vZGVsLFxuICBGbGV4UmVuZGVyRGlyZWN0aXZlLFxuICB0eXBlIEZsZXhSZW5kZXJDb21wb25lbnQsXG4gIHR5cGUgQ29sdW1uRGVmLFxuICB0eXBlIENlbGxDb250ZXh0LFxuICB0eXBlIFBhZ2luYXRpb25TdGF0ZSxcbiAgdHlwZSBOb0luZmVyLFxufSBmcm9tICcuL2RhdGF0YWJsZS51dGlscyc7XG5cbi8qKlxuICogQSBwb3dlcmZ1bCwgZmxleGlibGUgZGF0YXRhYmxlIGNvbXBvbmVudCBidWlsdCBvbiBUYW5TdGFjayBUYWJsZS5cbiAqIFN1cHBvcnRzIGN1c3RvbSBjZWxsIHJlbmRlcmluZywgY29sdW1uIGNvbmZpZ3VyYXRpb24sIHBhZ2luYXRpb24sIGFuZCBmdWxsIFR5cGVTY3JpcHQgdHlwaW5nLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdudi1kYXRhdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGbGV4UmVuZGVyRGlyZWN0aXZlXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxudi10YWJsZT5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRoZWFkIFthdHRyLmRhdGEtc3RpY2t5LXRvcF09XCJzdGlja3lIZWFkZXIoKSA/ICd0cnVlJyA6IG51bGxcIj5cbiAgICAgICAgICBAZm9yIChoZWFkZXJHcm91cCBvZiB0YWJsZSgpLmdldEhlYWRlckdyb3VwcygpOyB0cmFjayBoZWFkZXJHcm91cC5pZClcbiAgICAgICAgICB7XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgQGZvciAoaGVhZGVyIG9mIGhlYWRlckdyb3VwLmhlYWRlcnM7IHRyYWNrIGhlYWRlci5pZCkge1xuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidkYXRhdGFibGUtaGVhZGVyLScgKyBoZWFkZXIuaWRcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiXG4gICAgICAgICAgICAgICAgaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuc2l6ZVxuICAgICAgICAgICAgICAgICAgPyBoZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5zaXplICsgJ3B4J1xuICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtbm8tcmVzaXplXT1cIlxuICAgICAgICAgICAgICAgICFoZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5lbmFibGVSZXNpemluZyA/ICd0cnVlJyA6IG51bGxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmICghaGVhZGVyLmlzUGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgICAge3sgaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuaGVhZGVyIH19XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIEBmb3IgKHJvdyBvZiB0YWJsZSgpLmdldFJvd01vZGVsKCkucm93czsgdHJhY2sgcm93LmlkOyBsZXQgaSA9ICRpbmRleClcbiAgICAgICAgICB7XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGF0YXRhYmxlLXJvdy0nICsgcm93LmlkXCJcbiAgICAgICAgICAgICN0YWJsZVJvd1xuICAgICAgICAgICAgW2F0dHIuZGF0YS1pcy1sYXN0XT1cIlxuICAgICAgICAgICAgICBpc0luZmluaXRlU2Nyb2xsKCkgJiYgaSA9PT0gdGFibGUoKS5nZXRSb3dNb2RlbCgpLnJvd3MubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgID8gJ3RydWUnXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBmb3IgKGNlbGwgb2Ygcm93LmdldFZpc2libGVDZWxscygpOyB0cmFjayBjZWxsLmlkKSB7XG4gICAgICAgICAgICA8dGQgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2RhdGF0YWJsZS1jZWxsLScgKyBjZWxsLmlkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqZmxleFJlbmRlcj1cIlxuICAgICAgICAgICAgICAgICAgY2VsbC5jb2x1bW4uY29sdW1uRGVmLmNlbGw7XG4gICAgICAgICAgICAgICAgICBwcm9wczogY2VsbC5nZXRDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgICBsZXQgY2VsbENvbnRlbnRcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY2VsbENvbnRlbnQgfX1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgfVxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L252LXRhYmxlPlxuXG4gICAgPCEtLSBSZW5kZXIgcGFnaW5hdGlvbiBpZiBjb25maWd1cmVkIC0tPlxuICAgIEBpZiAocGFnaW5hdGlvbkFQSSgpKSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgcGFnaW5hdGlvblRlbXBsYXRlIHx8IG51bGw7XG4gICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwYWdpbmF0aW9uQVBJKCkgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOdkRhdGF0YWJsZTxUPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBDb2x1bW4gZGVmaW5pdGlvbnMgKi9cbiAgY29sdW1ucyA9IGlucHV0PE52RGF0YXRhYmxlQ29sdW1uPFQ+W10+KFtdKTtcbiAgLyoqIFJvdyBkYXRhICovXG4gIHJvd3MgPSBpbnB1dDxUW10+KFtdKTtcbiAgLyoqIE9wdGlvbmFsIHBhZ2luYXRpb24gY29uZmlndXJhdGlvbiAqL1xuICBwYWdpbmF0aW9uID0gaW5wdXQ8TnZEYXRhdGFibGVQYWdpbmF0aW9uQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogU2hvdWxkIHRoZSBoZWFkZXIgc3RpY2sgdG8gdGhlIHRvcCBvZiB0aGUgdGFibGUgd2hlbiBzY3JvbGxpbmc/ICovXG4gIHN0aWNreUhlYWRlciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvKiogVGVtcGxhdGUgZm9yIGN1c3RvbSBwYWdpbmF0aW9uIFVJICovXG4gIEBDb250ZW50Q2hpbGQoJ3BhZ2luYXRpb25UZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcGFnaW5hdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8e1xuICAgICRpbXBsaWNpdDogTnZEYXRhdGFibGVSZW5kZXJQYWdpbmF0aW9uQVBJO1xuICB9PjtcblxuICAvKiogQ2VsbCB0ZW1wbGF0ZXMgcHJvdmlkZWQgdmlhIG52RGF0YXRhYmxlQ2VsbCBkaXJlY3RpdmUgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmUpXG4gIGNlbGxUZW1wbGF0ZXM/OiBRdWVyeUxpc3Q8TnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlPFQsIFRba2V5b2YgVF0+PjtcblxuICAvKiogU2lnbmFsIHRvIHRyYWNrIGNlbGwgdGVtcGxhdGVzIGFycmF5ICovXG4gIHByaXZhdGUgY2VsbFRlbXBsYXRlc1NpZ25hbCA9IHNpZ25hbDxcbiAgICBOdkRhdGF0YWJsZUNlbGxEaXJlY3RpdmU8VCwgVFtrZXlvZiBUXT5bXVxuICA+KFtdKTtcblxuICAvKiogTWFwIG9mIGZpZWxkIG5hbWVzIHRvIGNlbGwgdGVtcGxhdGVzICovXG4gIHByaXZhdGUgY2VsbFRlbXBsYXRlTWFwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXA8XG4gICAgICBzdHJpbmcsXG4gICAgICBUZW1wbGF0ZVJlZjxOdkRhdGF0YWJsZUNlbGxDb250ZXh0PFQsIFRba2V5b2YgVF0+PlxuICAgID4oKTtcbiAgICB0aGlzLmNlbGxUZW1wbGF0ZXNTaWduYWwoKS5mb3JFYWNoKChkaXJlY3RpdmUpID0+IHtcbiAgICAgIG1hcC5zZXQoZGlyZWN0aXZlLm52RGF0YXRhYmxlQ2VsbCwgZGlyZWN0aXZlLnRlbXBsYXRlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbWFwO1xuICB9KTtcblxuICAvKiogUGFnaW5hdGlvbiBzdGF0ZSBmb3Igc2VydmVyIG1vZGUgKi9cbiAgcHJpdmF0ZSBwYWdpbmF0aW9uU3RhdGUgPSBzaWduYWw8UGFnaW5hdGlvblN0YXRlPih7XG4gICAgcGFnZUluZGV4OiAwLFxuICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2luYXRpb24oKT8uaW5pdGlhbFBhZ2VTaXplIHx8IDEwLFxuICB9KTtcblxuICAvKiogUmVmZXJlbmNlIHRvIHRhYmxlIHJvd3MgZm9yIGluZmluaXRlIHNjcm9sbCBvYnNlcnZlciAqL1xuICBwcml2YXRlIHRhYmxlUm93cyA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndGFibGVSb3cnKTtcblxuICAvKiogSW50ZXJzZWN0aW9uIG9ic2VydmVyIGZvciBpbmZpbml0ZSBzY3JvbGwgKi9cbiAgcHJpdmF0ZSBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogSGVscGVyIHRvIGNoZWNrIGlmIHVzaW5nIGluZmluaXRlIHNjcm9sbCAqL1xuICBpc0luZmluaXRlU2Nyb2xsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wYWdpbmF0aW9uKCk/Lm1vZGUgPT09ICdpbmZpbml0ZScpO1xuXG4gIC8qKiBDb21wdXRlZCB0YWJsZSBjb2x1bW5zIHdpdGggcHJvcGVyIHR5cGluZyBhbmQgZmlsdGVyaW5nLiAqL1xuICB0YWJsZUNvbHVtbnMgPSBjb21wdXRlZDxDb2x1bW5EZWY8VCwgVFtrZXlvZiBUXT5bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHRlbXBsYXRlTWFwID0gdGhpcy5jZWxsVGVtcGxhdGVNYXAoKTtcblxuICAgIHJldHVybiB0aGlzLmNvbHVtbnMoKVxuICAgICAgLmZpbHRlcigoY29sKSA9PiAhY29sLmhpZGRlbilcbiAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAvLyBTaGFyZWQgY2VsbCByZW5kZXJlclxuICAgICAgICBjb25zdCBjZWxsUmVuZGVyZXIgPSAoY29udGV4dDogQ2VsbENvbnRleHQ8VCwgVFtrZXlvZiBUXT4pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBTdHJpbmcoY29sLmZpZWxkKTtcbiAgICAgICAgICBjb25zdCBjZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZU1hcC5nZXQoZmllbGROYW1lKTtcblxuICAgICAgICAgIC8vIFByaW9yaXR5OiB0ZW1wbGF0ZSA+IHJlbmRlckNlbGwgPiBkZWZhdWx0XG4gICAgICAgICAgaWYgKGNlbGxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgLy8gUmV0dXJuIFRlbXBsYXRlUmVmIGRpcmVjdGx5IC0gZ2V0VmFsdWUoKSByZXR1cm5zIGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIGNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gcmVuZGVyQ2VsbCBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmIChjb2wucmVuZGVyQ2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbC5yZW5kZXJDZWxsKGNvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERlZmF1bHQ6IGp1c3QgcmV0dXJuIHRoZSB2YWx1ZSAoZm9ybWF0dGVkIGlmIHZhbHVlRm9ybWF0dGVyIHdhcyB1c2VkKVxuICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY2Nlc3NvcktleTogY29sLmZpZWxkLFxuICAgICAgICAgIGFjY2Vzc29yRm46IGNvbC52YWx1ZUZvcm1hdHRlclxuICAgICAgICAgICAgPyAocm93OiBUKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sLnZhbHVlRm9ybWF0dGVyISh7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogcmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBoZWFkZXI6IGNvbC5oZWFkZXJOYW1lIHx8IFN0cmluZyhjb2wuZmllbGQpLFxuICAgICAgICAgIHNpemU6IGNvbC53aWR0aCxcbiAgICAgICAgICBlbmFibGVSZXNpemluZzogY29sLnJlc2l6YWJsZSA/PyB0cnVlLFxuICAgICAgICAgIGNlbGw6IGNlbGxSZW5kZXJlcixcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICB9KTtcblxuICAvKiogVGFuU3RhY2sgdGFibGUgaW5zdGFuY2Ugd2l0aCBTaWduYWxzICovXG4gIHByaXZhdGUgdGFibGVJbnN0YW5jZSA9IGNyZWF0ZUFuZ3VsYXJUYWJsZSgoKSA9PiB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkNvbmZpZyA9IHRoaXMucGFnaW5hdGlvbigpO1xuXG4gICAgaWYgKCFwYWdpbmF0aW9uQ29uZmlnIHx8IHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2luZmluaXRlJykge1xuICAgICAgLy8gTm8gcGFnaW5hdGlvbiBvciBpbmZpbml0ZSBzY3JvbGwgLSBzaW1wbGUgY29uZmlnXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB0aGlzLnJvd3MoKSxcbiAgICAgICAgY29sdW1uczogdGhpcy50YWJsZUNvbHVtbnMoKSxcbiAgICAgICAgZ2V0Q29yZVJvd01vZGVsOiBnZXRDb3JlUm93TW9kZWwoKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChwYWdpbmF0aW9uQ29uZmlnLm1vZGUgPT09ICdjbGllbnQnKSB7XG4gICAgICAvLyBDbGllbnQtc2lkZSBwYWdpbmF0aW9uXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB0aGlzLnJvd3MoKSxcbiAgICAgICAgY29sdW1uczogdGhpcy50YWJsZUNvbHVtbnMoKSxcbiAgICAgICAgZ2V0Q29yZVJvd01vZGVsOiBnZXRDb3JlUm93TW9kZWwoKSxcbiAgICAgICAgZ2V0UGFnaW5hdGlvblJvd01vZGVsOiBnZXRQYWdpbmF0aW9uUm93TW9kZWwoKSxcbiAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgcGFnZVNpemU6IHBhZ2luYXRpb25Db25maWcuaW5pdGlhbFBhZ2VTaXplIHx8IDEwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZXJ2ZXItc2lkZSBwYWdpbmF0aW9uXG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnaW5hdGlvblN0YXRlKCkucGFnZVNpemU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB0aGlzLnJvd3MoKSxcbiAgICAgICAgY29sdW1uczogdGhpcy50YWJsZUNvbHVtbnMoKSxcbiAgICAgICAgZ2V0Q29yZVJvd01vZGVsOiBnZXRDb3JlUm93TW9kZWwoKSxcbiAgICAgICAgbWFudWFsUGFnaW5hdGlvbjogdHJ1ZSxcbiAgICAgICAgcGFnZUNvdW50OlxuICAgICAgICAgIHBhZ2luYXRpb25Db25maWcudG90YWxQYWdlQ291bnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZUNvdW50XG4gICAgICAgICAgICA6IHBhZ2luYXRpb25Db25maWcudG90YWxSb3dDb3VudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IE1hdGguY2VpbChwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUm93Q291bnQgLyBwYWdlU2l6ZSlcbiAgICAgICAgICAgIDogLTEsXG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgcGFnaW5hdGlvbjogdGhpcy5wYWdpbmF0aW9uU3RhdGUoKSxcbiAgICAgICAgfSxcbiAgICAgICAgb25QYWdpbmF0aW9uQ2hhbmdlOiAoXG4gICAgICAgICAgdXBkYXRlck9yVmFsdWU6XG4gICAgICAgICAgICB8IFBhZ2luYXRpb25TdGF0ZVxuICAgICAgICAgICAgfCAoKG9sZDogUGFnaW5hdGlvblN0YXRlKSA9PiBQYWdpbmF0aW9uU3RhdGUpLFxuICAgICAgICApID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHVwZGF0ZXJPclZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TdGF0ZS5zZXQodXBkYXRlck9yVmFsdWUodGhpcy5wYWdpbmF0aW9uU3RhdGUoKSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TdGF0ZS5zZXQodXBkYXRlck9yVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvKiogUHVibGljIGdldHRlciBmb3IgdGFibGUgaW5zdGFuY2UuICovXG4gIHRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlSW5zdGFuY2UoKTtcbiAgfVxuXG4gIC8qKiBCdWlsZCBwYWdpbmF0aW9uIEFQSSBmb3IgdGVtcGxhdGUgKi9cbiAgcGFnaW5hdGlvbkFQSSA9IGNvbXB1dGVkPE52RGF0YXRhYmxlUmVuZGVyUGFnaW5hdGlvbkFQSSB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG4gICAgaWYgKCFwYWdpbmF0aW9uQ29uZmlnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGUoKTtcbiAgICBjb25zdCB0YWJsZVBhZ2luYXRpb25TdGF0ZSA9IHRhYmxlLmdldFN0YXRlKCkucGFnaW5hdGlvbjtcbiAgICBjb25zdCBwYWdlQ291bnQgPSB0YWJsZS5nZXRQYWdlQ291bnQoKTtcbiAgICBjb25zdCByb3dDb3VudCA9XG4gICAgICBwYWdpbmF0aW9uQ29uZmlnLm1vZGUgPT09ICdzZXJ2ZXInXG4gICAgICAgID8gcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJvd0NvdW50IHx8IHRoaXMucm93cygpLmxlbmd0aFxuICAgICAgICA6IHRoaXMucm93cygpLmxlbmd0aDtcblxuICAgIHJldHVybiB7XG4gICAgICBwYWdlSW5kZXg6IHRhYmxlUGFnaW5hdGlvblN0YXRlLnBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiB0YWJsZVBhZ2luYXRpb25TdGF0ZS5wYWdlU2l6ZSxcbiAgICAgIHBhZ2VDb3VudCxcbiAgICAgIHJvd0NvdW50LFxuICAgICAgZmlyc3RQYWdlOiAoKSA9PiB0YWJsZS5zZXRQYWdlSW5kZXgoMCksXG4gICAgICBwcmV2aW91c1BhZ2U6ICgpID0+IHRhYmxlLnByZXZpb3VzUGFnZSgpLFxuICAgICAgbmV4dFBhZ2U6ICgpID0+IHRhYmxlLm5leHRQYWdlKCksXG4gICAgICBsYXN0UGFnZTogKCkgPT4gdGFibGUuc2V0UGFnZUluZGV4KHBhZ2VDb3VudCAtIDEpLFxuICAgICAgc2V0UGFnZUluZGV4OiAoaW5kZXg6IG51bWJlcikgPT4gdGFibGUuc2V0UGFnZUluZGV4KGluZGV4KSxcbiAgICAgIHNldFBhZ2VTaXplOiAoc2l6ZTogbnVtYmVyKSA9PiB0YWJsZS5zZXRQYWdlU2l6ZShzaXplKSxcbiAgICAgIGNhblByZXZpb3VzUGFnZTogdGFibGUuZ2V0Q2FuUHJldmlvdXNQYWdlKCksXG4gICAgICBjYW5OZXh0UGFnZTogdGFibGUuZ2V0Q2FuTmV4dFBhZ2UoKSxcbiAgICAgIGlzTG9hZGluZzpcbiAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5tb2RlID09PSAnaW5maW5pdGUnXG4gICAgICAgICAgPyBwYWdpbmF0aW9uQ29uZmlnLmlzTG9hZGluZ1xuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgaGFzTW9yZTpcbiAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5tb2RlID09PSAnaW5maW5pdGUnXG4gICAgICAgICAgPyBwYWdpbmF0aW9uQ29uZmlnLmhhc01vcmVcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBXYXRjaCBwYWdpbmF0aW9uIHN0YXRlIGNoYW5nZXMgZm9yIHNlcnZlciBtb2RlXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5wYWdpbmF0aW9uU3RhdGUoKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZz8ubW9kZSA9PT0gJ3NlcnZlcicgJiZcbiAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm9uUGFnaW5hdGlvbkNoYW5nZVxuICAgICAgICApIHtcbiAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm9uUGFnaW5hdGlvbkNoYW5nZSh7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IHN0YXRlLnBhZ2VJbmRleCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBzdGF0ZS5wYWdlU2l6ZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuXG4gICAgLy8gU2V0IHVwIGludGVyc2VjdGlvbiBvYnNlcnZlciBmb3IgaW5maW5pdGUgc2Nyb2xsXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnJvd3MoKTsgLy8gVHJhY2sgcm93cyBjaGFuZ2VzXG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgZXhpc3Rpbmcgb2JzZXJ2ZXJcbiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgc2V0IHVwIG9ic2VydmVyIGZvciBpbmZpbml0ZSBzY3JvbGwgbW9kZVxuICAgICAgICBpZiAocGFnaW5hdGlvbkNvbmZpZz8ubW9kZSAhPT0gJ2luZmluaXRlJyB8fCByb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSBET00gaXMgdXBkYXRlZFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSBwYWdpbmF0aW9uQ29uZmlnLmxvYWRNb3JlVGhyZXNob2xkIHx8IDUwMDtcblxuICAgICAgICAgIC8vIEZpbmQgdGhlIGxhc3Qgcm93IGVsZW1lbnRcbiAgICAgICAgICBjb25zdCB0YWJsZVJvd0VsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICdbZGF0YS1pcy1sYXN0PVwidHJ1ZVwiXScsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBsYXN0Um93RWxlbWVudCA9IHRhYmxlUm93RWxlbWVudHNbdGFibGVSb3dFbGVtZW50cy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgIGlmICghbGFzdFJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZW50cnkuaXNJbnRlcnNlY3RpbmcgJiZcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm1vZGUgPT09ICdpbmZpbml0ZScgJiZcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLmhhc01vcmUgJiZcbiAgICAgICAgICAgICAgICAhcGFnaW5hdGlvbkNvbmZpZy5pc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm9uTG9hZE1vcmVcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5vbkxvYWRNb3JlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJvb3RNYXJnaW46IGAke3RocmVzaG9sZH1weGAsXG4gICAgICAgICAgICAgIHJvb3Q6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUobGFzdFJvd0VsZW1lbnQpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTeW5jIGNlbGwgdGVtcGxhdGVzIFF1ZXJ5TGlzdCB0byBzaWduYWxcbiAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGVzKSB7XG4gICAgICB0aGlzLmNlbGxUZW1wbGF0ZXNTaWduYWwuc2V0KHRoaXMuY2VsbFRlbXBsYXRlcy50b0FycmF5KCkpO1xuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiB0aGUgUXVlcnlMaXN0XG4gICAgICB0aGlzLmNlbGxUZW1wbGF0ZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGVzKSB7XG4gICAgICAgICAgdGhpcy5jZWxsVGVtcGxhdGVzU2lnbmFsLnNldCh0aGlzLmNlbGxUZW1wbGF0ZXMudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5vYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVVRJTFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cm9uZ2x5LXR5cGVkIGNvbHVtbiBmYWN0b3J5IGZvciBhIGdpdmVuIHJvdyB0eXBlLlxuICpcbiAqIEB0ZW1wbGF0ZSBSb3cgVGhlIHJvdyBkYXRhIHR5cGUgKGUuZy4sIGBQcm9kdWN0YClcbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgY29sdW1uIGRlZmluaXRpb24gYW5kIGluZmVyczpcbiAqIC0gYEtgIGFzIHRoZSBmaWVsZCBrZXkgKGBrZXlvZiBSb3dgKVxuICogLSBgRmAgYXMgdGhlIHJldHVybiB0eXBlIG9mIGB2YWx1ZUZvcm1hdHRlcmAgKGRlZmF1bHRzIHRvIGBSb3dbS11gKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gRGVmaW5lIHlvdXIgcm93IHR5cGVcbiAqIGludGVyZmFjZSBQcm9kdWN0IHtcbiAqICAgbmFtZTogc3RyaW5nO1xuICogICBwcmljZTogbnVtYmVyO1xuICogfVxuICpcbiAqIGNvbnN0IGNvbCA9IG1ha2VDb2x1bW48UHJvZHVjdD4oKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VDb2x1bW48Um93PigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlZmluZTxLIGV4dGVuZHMga2V5b2YgUm93LCBGID0gUm93W0tdPihcbiAgICBjb2w6IE52RGF0YXRhYmxlQ29sdW1uPFJvdywgSywgRj4sXG4gICkge1xuICAgIHJldHVybiBjb2wgYXMgdW5rbm93biBhcyBOdkRhdGF0YWJsZUNvbHVtbjxSb3c+O1xuICB9O1xufVxuXG5leHBvcnQgeyBmbGV4UmVuZGVyQ29tcG9uZW50IGFzIG52RGF0YXRhYmxlUmVuZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhdGFibGUudXRpbHMnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHR5cGUgeyBDZWxsQ29udGV4dCBhcyBOdkRhdGF0YWJsZUNlbGxDb250ZXh0IH07XG5cbi8qKiBDb2x1bW4gZGVmaW5pdGlvbiBmb3IgTnZEYXRhdGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIE52RGF0YXRhYmxlQ29sdW1uPFxuICBSb3csXG4gIEsgZXh0ZW5kcyBrZXlvZiBSb3cgPSBrZXlvZiBSb3csXG4gIEYgPSBSb3dbS10sXG4+IHtcbiAgLyoqIEZpZWxkIG5hbWUgZnJvbSByb3cgZGF0YSAqL1xuICBmaWVsZDogSztcbiAgLyoqIERpc3BsYXkgbmFtZSBmb3IgY29sdW1uIGhlYWRlciAqL1xuICBoZWFkZXJOYW1lPzogc3RyaW5nO1xuICAvKiogQ29sdW1uIHdpZHRoIGluIHBpeGVscyAqL1xuICB3aWR0aD86IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgY29sdW1uIGlzIHJlc2l6YWJsZSAqL1xuICByZXNpemFibGU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBjb2x1bW4gaXMgaGlkZGVuICovXG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhlIHJhdyB2YWx1ZSBiZWZvcmUgcmVuZGVyaW5nLiBSZWNlaXZlcyB0aGUgY2VsbCB2YWx1ZSBhbmQgZnVsbCByb3cgb2JqZWN0LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZm9ybWF0dGluZyBkYXRlcywgY29udmVydGluZyBhcnJheXMgdG8gc3RyaW5ncywgYWNjZXNzaW5nIG5lc3RlZCBvYmplY3RzLCBldGMuXG4gICAqIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBpcyB0aGVuIHBhc3NlZCB0byByZW5kZXJDZWxsIG9yIHRlbXBsYXRlcy5cbiAgICovXG4gIHZhbHVlRm9ybWF0dGVyPzogKHBhcmFtczogTnZUYWJsZVZhbHVlRm9ybWF0dGVyUGFyYW1zPFJvdywgUm93W0tdLCBLPikgPT4gRjtcbiAgLyoqXG4gICAqIEN1c3RvbSBjZWxsIHJlbmRlcmVyIGZ1bmN0aW9uIHRoYXQgY2FuIHJldHVybiBlaXRoZXIgYSBzdHJpbmcgb3IgQW5ndWxhciBUZW1wbGF0ZVJlZi5cbiAgICogVXNlIGAkaW1wbGljaXRgIGluIHlvdXIgdGVtcGxhdGUgdG8gcmVjZWl2ZSB0aGUgQ2VsbENvbnRleHQuXG4gICAqIE5vdGU6IElmIHZhbHVlRm9ybWF0dGVyIGlzIHByb3ZpZGVkLCByZW5kZXJDZWxsIHJlY2VpdmVzIHRoZSBmb3JtYXR0ZWQgdmFsdWUuXG4gICAqL1xuICByZW5kZXJDZWxsPzogKGNvbnRleHQ6IENlbGxDb250ZXh0PFJvdywgRj4pID0+XG4gICAgfCBzdHJpbmdcbiAgICB8IEZsZXhSZW5kZXJDb21wb25lbnRcbiAgICB8IFRlbXBsYXRlUmVmPHtcbiAgICAgICAgJGltcGxpY2l0OiBDZWxsQ29udGV4dDxSb3csIEY+O1xuICAgICAgfT47XG59XG5cbi8qKiBQYXJhbWV0ZXJzIGZvciBjdXN0b20gY2VsbCByZW5kZXJpbmcgZnVuY3Rpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIE52VGFibGVSZW5kZXJDZWxsUGFyYW1zPFJvdywgVmFsdWUsIEZpZWxkPiB7XG4gIC8qKiBDZWxsIHZhbHVlICovXG4gIHZhbHVlOiBWYWx1ZSB8IE5vSW5mZXI8VmFsdWU+O1xuICAvKiogUm93IGRhdGEgKi9cbiAgcm93OiBSb3c7XG4gIC8qKiBGaWVsZCBuYW1lICovXG4gIGZpZWxkOiBGaWVsZDtcbiAgLyoqIFJvdyBpbmRleCAqL1xuICByb3dJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHZhbHVlRm9ybWF0dGVyIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE52VGFibGVWYWx1ZUZvcm1hdHRlclBhcmFtczxSb3csIFZhbHVlLCBGaWVsZD4ge1xuICAvKiogQ2VsbCBvcmlnaW5hbCB2YWx1ZSAqL1xuICB2YWx1ZTogVmFsdWU7XG4gIC8qKiBSb3cgZGF0YSAqL1xuICByb3c6IFJvdztcbiAgLyoqIEZpZWxkIG5hbWUgKi9cbiAgZmllbGQ6IEZpZWxkO1xufVxuXG4vKipcbiAqIFBhZ2luYXRpb24gY29uZmlndXJhdGlvbiBmb3IgTnZEYXRhdGFibGUuXG4gKiBTdXBwb3J0cyB0aHJlZSBtb2RlczogY2xpZW50LXNpZGUsIHNlcnZlci1zaWRlIHdpdGggYnV0dG9ucywgYW5kIGluZmluaXRlIHNjcm9sbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVBhZ2luYXRpb25Db25maWcge1xuICAvKiogUGFnaW5hdGlvbiBtb2RlICovXG4gIG1vZGU6ICdjbGllbnQnIHwgJ3NlcnZlcicgfCAnaW5maW5pdGUnO1xuICAvKiogSW5pdGlhbCBwYWdlIHNpemUgKGRlZmF1bHQ6IDEwKSAqL1xuICBpbml0aWFsUGFnZVNpemU/OiBudW1iZXI7XG4gIC8qKiBBdmFpbGFibGUgcGFnZSBzaXplIG9wdGlvbnMgKGRlZmF1bHQ6IFsxMCwgMjAsIDUwLCAxMDBdKSAqL1xuICBwYWdlU2l6ZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvLyBTZXJ2ZXItc2lkZSAoYnV0dG9ucykgc3BlY2lmaWMgcHJvcGVydGllc1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHJvd3MgKGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uKSAqL1xuICB0b3RhbFJvd0NvdW50PzogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHBhZ2VzIChmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbikgKi9cbiAgdG90YWxQYWdlQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBDYWxsYmFjayB3aGVuIHBhZ2luYXRpb24gc3RhdGUgY2hhbmdlcyAoZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24pICovXG4gIG9uUGFnaW5hdGlvbkNoYW5nZT86IChzdGF0ZToge1xuICAgIC8qKiBDdXJyZW50IHBhZ2UgaW5kZXggKi9cbiAgICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgICAvKiogQ3VycmVudCBwYWdlIHNpemUgKi9cbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICB9KSA9PiB2b2lkO1xuXG4gIC8vIEluZmluaXRlIHNjcm9sbCBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gIC8qKiBXaGV0aGVyIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIHRvIGxvYWQgKGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBkYXRhIGlzIGN1cnJlbnRseSBsb2FkaW5nIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICAvKiogRGlzdGFuY2UgZnJvbSBib3R0b20gaW4gcGl4ZWxzIHRvIHRyaWdnZXIgbG9hZCAoZGVmYXVsdDogNTAwKSAqL1xuICBsb2FkTW9yZVRocmVzaG9sZD86IG51bWJlcjtcbiAgLyoqIENhbGxiYWNrIHRvIGxvYWQgbW9yZSBkYXRhIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBvbkxvYWRNb3JlPzogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBBUEkgZXhwb3NlZCB0byBwYWdpbmF0aW9uIHRlbXBsYXRlIGZvciBidWlsZGluZyBjdXN0b20gcGFnaW5hdGlvbiBVSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVJlbmRlclBhZ2luYXRpb25BUEkge1xuICAvKiogQ3VycmVudCBwYWdlIGluZGV4ICh6ZXJvLWJhc2VkKSAqL1xuICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgLyoqIEN1cnJlbnQgcGFnZSBzaXplICovXG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2YgcGFnZXMgKi9cbiAgcGFnZUNvdW50OiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2Ygcm93cyAqL1xuICByb3dDb3VudDogbnVtYmVyO1xuICAvKiogTmF2aWdhdGUgdG8gZmlyc3QgcGFnZSAqL1xuICBmaXJzdFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBwcmV2aW91cyBwYWdlICovXG4gIHByZXZpb3VzUGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIG5leHQgcGFnZSAqL1xuICBuZXh0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIGxhc3QgcGFnZSAqL1xuICBsYXN0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIHNwZWNpZmljIHBhZ2UgYnkgaW5kZXggKi9cbiAgc2V0UGFnZUluZGV4OiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqIENoYW5nZSBwYWdlIHNpemUgKi9cbiAgc2V0UGFnZVNpemU6IChzaXplOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHByZXZpb3VzIHBhZ2UgaXMgYXZhaWxhYmxlICovXG4gIGNhblByZXZpb3VzUGFnZTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbmV4dCBwYWdlIGlzIGF2YWlsYWJsZSAqL1xuICBjYW5OZXh0UGFnZTogYm9vbGVhbjtcbiAgLyoqIExvYWRpbmcgc3RhdGUgKG9ubHkgZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbW9yZSBpdGVtcyBhcmUgYXZhaWxhYmxlIChvbmx5IGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xufVxuIl19