ontimize-web-ngx 15.6.1 → 15.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/esm2020/lib/components/list/o-list.component.mjs +15 -1
  2. package/esm2020/lib/components/o-service-base-component.class.mjs +10 -1
  3. package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +17 -11
  4. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +41 -64
  5. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.mjs +75 -8
  6. package/esm2020/lib/components/table/extensions/dialog/visible-columns/o-table-visible-columns-dialog.component.mjs +2 -2
  7. package/esm2020/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.mjs +19 -3
  8. package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +68 -51
  9. package/esm2020/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.mjs +26 -11
  10. package/esm2020/lib/components/table/extensions/o-table.dao.mjs +6 -3
  11. package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
  12. package/esm2020/lib/components/table/o-table.component.mjs +59 -7
  13. package/esm2020/lib/components/tree/o-tree-dao.service.mjs +32 -1
  14. package/esm2020/lib/components/tree/o-tree.component.mjs +144 -22
  15. package/esm2020/lib/components/tree/o-tree.datasource.mjs +28 -14
  16. package/esm2020/lib/components/tree/o-tree.module.mjs +1 -1
  17. package/esm2020/lib/components/tree/tree-node/tree-node.component.mjs +2 -20
  18. package/esm2020/lib/i18n/i18n.mjs +13 -4
  19. package/esm2020/lib/interfaces/pagination-data.interface.mjs +2 -0
  20. package/esm2020/lib/services/state/index.mjs +3 -1
  21. package/esm2020/lib/services/state/o-tree-component-state.class.mjs +1 -1
  22. package/esm2020/lib/services/state/o-tree-component-state.service.mjs +54 -14
  23. package/esm2020/lib/types/table/o-table-initialization-options.type.mjs +1 -1
  24. package/esm2020/lib/types/tree-flat-node.type.mjs +1 -1
  25. package/fesm2015/ontimize-web-ngx.mjs +614 -194
  26. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  27. package/fesm2020/ontimize-web-ngx.mjs +600 -193
  28. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  29. package/lib/components/list/o-list.component.d.ts +2 -0
  30. package/lib/components/o-service-base-component.class.d.ts +5 -1
  31. package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.d.ts +10 -3
  32. package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.d.ts +10 -3
  33. package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
  34. package/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.d.ts +19 -2
  35. package/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.d.ts +10 -9
  36. package/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.d.ts +7 -1
  37. package/lib/components/table/o-table-base.class.d.ts +12 -3
  38. package/lib/components/table/o-table.component.d.ts +10 -3
  39. package/lib/components/tree/o-tree-dao.service.d.ts +4 -2
  40. package/lib/components/tree/o-tree.component.d.ts +21 -2
  41. package/lib/components/tree/o-tree.datasource.d.ts +3 -0
  42. package/lib/components/tree/tree-node/tree-node.component.d.ts +0 -4
  43. package/lib/i18n/i18n.d.ts +9 -0
  44. package/lib/interfaces/pagination-data.interface.d.ts +6 -0
  45. package/lib/services/state/index.d.ts +2 -0
  46. package/lib/services/state/o-tree-component-state.class.d.ts +3 -0
  47. package/lib/services/state/o-tree-component-state.service.d.ts +4 -1
  48. package/lib/types/table/o-table-initialization-options.type.d.ts +4 -0
  49. package/lib/types/tree-flat-node.type.d.ts +5 -1
  50. package/package.json +1 -1
@@ -7,8 +7,8 @@ import { ColumnValueFilterOperator } from '../../../../types/table/o-column-valu
7
7
  import { Util } from '../../../../util/util';
8
8
  import { OContextMenuComponent } from '../../../contextmenu/o-context-menu.component';
9
9
  import { OTableGroupedRow } from '../row/o-table-row-group.class';
10
- import { OTableBase } from '../../o-table-base.class';
11
10
  import { OTableFilterByColumnService } from '../dialog/filter-by-column/o-table-filter-by-column.service';
11
+ import { OTableBase } from '../../o-table-base.class';
12
12
  import * as i0 from "@angular/core";
13
13
  import * as i1 from "@angular/common";
14
14
  import * as i2 from "../../../contextmenu/o-context-menu.component";
@@ -194,15 +194,21 @@ export class OTableContextMenuComponent {
194
194
  filterByValue() {
195
195
  const filterService = this.injector.get(OTableFilterByColumnService);
196
196
  const columnAttr = this.column.attr;
197
- const sourceDataType = this.table.getSourceDataByFilterColumn(this.column);
198
- const tableData = this.table.getValue();
199
- const selectedValue = this.row[columnAttr];
200
- const filter = this.table.dataSource.getColumnValueFilterByAttr(this.column.attr) ??
201
- this.createColumnValueFilter(columnAttr, selectedValue, sourceDataType);
202
- let columnData = filterService.parseListData(filter, this.column, tableData, this.table.pageable, sourceDataType);
203
- const selectedValues = this.getSelectedValues(columnData, selectedValue);
204
- filterService.applySelectedValuesToFilter(this.column, tableData, filter, selectedValues, sourceDataType, this.table.pageable, () => this.table.getComponentFilter());
205
- this.table.filterByColumn(filter);
197
+ const filterByColumnDefinition = this.table.getFilterColumnByAttr(this.column.attr);
198
+ const sourceDataType = filterByColumnDefinition.filterValuesInData;
199
+ const visibleColumns = filterByColumnDefinition.visibleColumns;
200
+ filterService.getDataForColumnFilter(this.injector, this.table, this.column, filterByColumnDefinition).subscribe(tableData => {
201
+ let selectedValue = this.row[columnAttr];
202
+ if (sourceDataType !== 'current-page' && visibleColumns?.length > 0) {
203
+ selectedValue = tableData.filter(registro => visibleColumns.some(prop => registro[prop] === selectedValue));
204
+ }
205
+ const filter = this.table.dataSource.getColumnValueFilterByAttr(this.column.attr) ??
206
+ this.createColumnValueFilter(columnAttr, selectedValue, sourceDataType);
207
+ let columnData = filterService.parseListData(filter, this.column, tableData, this.table.pageable, filterByColumnDefinition);
208
+ const selectedValues = this.getSelectedValues(columnData, selectedValue);
209
+ filterService.applySelectedValuesToFilter(this.column, tableData, filter, selectedValues, filterByColumnDefinition, this.table.pageable, () => this.table.getComponentFilter());
210
+ this.table.filterByColumn(filter);
211
+ });
206
212
  }
207
213
  createColumnValueFilter(attr, value, sourceData) {
208
214
  return {
@@ -342,4 +348,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
342
348
  type: ViewChild,
343
349
  args: ['defaultContextMenu']
344
350
  }] } });
345
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1jb250ZXh0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9jb250ZXh0bWVudS9vLXRhYmxlLWNvbnRleHQtbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2NvbnRleHRtZW51L28tdGFibGUtY29udGV4dC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDdkYsT0FBTyxFQUFFLHlCQUF5QixFQUFzQixNQUFNLG9EQUFvRCxDQUFDO0FBQ25ILE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUV0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkRBQTZELENBQUM7Ozs7Ozs7O0FBRzFHLE1BQU0sQ0FBQyxNQUFN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QVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVwRSxDQUFDO0lBQ0QsWUFBWTtRQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELENBQUM7O3VIQXJYVSwwQkFBMEIsMENBaUkzQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDOzJHQWpJM0IsMEJBQTBCLGttQkNqQ3ZDLDIzTEFzRUE7QUQwQkU7SUFBQyxxQkFBcUIsRUFBRTs7OytEQU12QjsyRkFyRVUsMEJBQTBCO2tCQU50QyxTQUFTOytCQUNFLHNCQUFzQixtQkFFZix1QkFBdUIsQ0FBQyxNQUFNLFVBQ3ZDLGlDQUFpQzs7MEJBbUl0QyxNQUFNOzJCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7NENBakVsQyxhQUFhLE1BeURQLGtCQUFrQjtzQkFEM0IsU0FBUzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbmplY3QsIEluamVjdG9yLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uLy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IE9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlL28tdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvciwgT0NvbHVtblZhbHVlRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tdmFsdWUtZmlsdGVyLnR5cGUnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0bWVudS9vLWNvbnRleHQtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUgeyBPQ29sdW1uIH0gZnJvbSAnLi4vLi4vY29sdW1uL28tY29sdW1uLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUdyb3VwZWRSb3cgfSBmcm9tICcuLi9yb3cvby10YWJsZS1yb3ctZ3JvdXAuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlQmFzZSB9IGZyb20gJy4uLy4uL28tdGFibGUtYmFzZS5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVGaWx0ZXJCeUNvbHVtblNlcnZpY2UgfSBmcm9tICcuLi9kaWFsb2cvZmlsdGVyLWJ5LWNvbHVtbi9vLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4uc2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uL3R5cGVzL3RhYmxlL28tdGFibGUtZmlsdGVyLWJ5LWNvbHVtbi1kYXRhLnR5cGUnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UQUJMRV9DT05URVhUX01FTlVfSU5QVVRTID0gW1xuICAnY29udGV4dE1lbnU6IGNvbnRleHQtbWVudScsXG4gICdzaG93SW5zZXJ0OiBpbnNlcnQnLFxuICAnc2hvd0VkaXQ6IGVkaXQnLFxuICAnc2hvd1ZpZXdEZXRhaWw6IHZpZXctZGV0YWlsJyxcbiAgJ3Nob3dDb3B5OiBjb3B5JyxcbiAgJ3Nob3dTZWxlY3RBbGw6IHNlbGVjdC1hbGwnLFxuICAnc2hvd1JlZnJlc2g6IHJlZnJlc2gnLFxuICAnc2hvd0RlbGV0ZTogZGVsZXRlJyxcbiAgJ3Nob3dGaWx0ZXI6IGZpbHRlcicsXG4gICdzaG93R3JvdXBCeVJvdzogZ3JvdXAtYnktcm93J1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby10YWJsZS1jb250ZXh0LW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vby10YWJsZS1jb250ZXh0LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW5wdXRzOiBERUZBVUxUX1RBQkxFX0NPTlRFWFRfTUVOVV9JTlBVVFNcbn0pXG5leHBvcnQgY2xhc3MgT1RhYmxlQ29udGV4dE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgcHVibGljIGNvbnRleHRNZW51OiBPQ29udGV4dE1lbnVDb21wb25lbnQ7XG4gIHB1YmxpYyBpc1Zpc2libGVJbnNlcnQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHB1YmxpYyBpc1Zpc2libGVFZGl0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwdWJsaWMgaXNWaXNpYmxlRGV0YWlsOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwdWJsaWMgaXNWaXNpYmxlQ29weTogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHVibGljIGlzVmlzaWJsZVNlbGVjdEFsbDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHVibGljIGlzVmlzaWJsZVJlZnJlc2g6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHB1YmxpYyBpc1Zpc2libGVEZWxldGU6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHB1YmxpYyBpc1Zpc2libGVGaWx0ZXI6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHB1YmxpYyBpc1Zpc2libGVHcm91cEJ5Um93OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwdWJsaWMgaXNFbmFibGVkR3JvdXBCeUNvbHVtbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHVibGljIGlzRW5hYmxlZFVuR3JvdXBCeUNvbHVtbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHB1YmxpYyBpc0VuYWJsZWRVbkdyb3VwQWxsQ29sdW1uOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBwdWJsaWMgaXNEYXRhQ2VsbDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHVibGljIGlzVGFibGVHcm91cGVkUm93OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwdWJsaWMgaXNHcm91cGFibGVDZWxsOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuXG4gIHNldCBzaG93SW5zZXJ0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB2YWx1ZSA9IFV0aWwucGFyc2VCb29sZWFuKHZhbHVlIGFzIGFueSk7XG4gICAgfVxuICAgIHRoaXMuaXNWaXNpYmxlSW5zZXJ0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNob3dJbnNlcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlSW5zZXJ0LmdldFZhbHVlKCk7XG4gIH1cblxuICBzZXQgc2hvd0VkaXQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHZhbHVlID0gVXRpbC5wYXJzZUJvb2xlYW4odmFsdWUgYXMgYW55KTtcbiAgICB9XG4gICAgdGhpcy5pc1Zpc2libGVFZGl0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNob3dFZGl0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZUVkaXQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHNldCBzaG93Vmlld0RldGFpbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgdmFsdWUgPSBVdGlsLnBhcnNlQm9vbGVhbih2YWx1ZSBhcyBhbnkpO1xuICAgIH1cbiAgICB0aGlzLmlzVmlzaWJsZURldGFpbC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzaG93Vmlld0RldGFpbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1Zpc2libGVEZXRhaWwuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHNldCBzaG93Q29weSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgdmFsdWUgPSBVdGlsLnBhcnNlQm9vbGVhbih2YWx1ZSBhcyBhbnkpO1xuICAgIH1cbiAgICB0aGlzLmlzVmlzaWJsZUNvcHkubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2hvd0NvcHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlQ29weS5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNldCBzaG93U2VsZWN0QWxsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB2YWx1ZSA9IFV0aWwucGFyc2VCb29sZWFuKHZhbHVlIGFzIGFueSk7XG4gICAgfVxuICAgIHRoaXMudGFibGUuaXNTZWxlY3Rpb25Nb2RlTm9uZSgpID8gdGhpcy5pc1Zpc2libGVTZWxlY3RBbGwubmV4dChmYWxzZSkgOiB0aGlzLmlzVmlzaWJsZVNlbGVjdEFsbC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzaG93U2VsZWN0QWxsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZVNlbGVjdEFsbC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgc2V0IHNob3dSZWZyZXNoKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB2YWx1ZSA9IFV0aWwucGFyc2VCb29sZWFuKHZhbHVlIGFzIGFueSk7XG4gICAgfVxuICAgIHRoaXMuaXNWaXNpYmxlUmVmcmVzaC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzaG93UmVmcmVzaCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1Zpc2libGVSZWZyZXNoLmdldFZhbHVlKCk7XG4gIH1cblxuICBzZXQgc2hvd0RlbGV0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgdmFsdWUgPSBVdGlsLnBhcnNlQm9vbGVhbih2YWx1ZSBhcyBhbnkpO1xuICAgIH1cbiAgICB0aGlzLmlzVmlzaWJsZURlbGV0ZS5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzaG93RGVsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZURlbGV0ZS5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgc2V0IHNob3dGaWx0ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHZhbHVlID0gVXRpbC5wYXJzZUJvb2xlYW4odmFsdWUgYXMgYW55KTtcbiAgICB9XG4gICAgdGhpcy5pc1Zpc2libGVGaWx0ZXIubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2hvd0ZpbHRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1Zpc2libGVGaWx0ZXIuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHNldCBzaG93R3JvdXBCeVJvdyh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgdmFsdWUgPSBVdGlsLnBhcnNlQm9vbGVhbih2YWx1ZSBhcyBhbnkpO1xuICAgIH1cbiAgICB0aGlzLmlzVmlzaWJsZUdyb3VwQnlSb3cubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2hvd0dyb3VwQnlSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlR3JvdXBCeVJvdy5nZXRWYWx1ZSgpO1xuICB9XG5cblxuICBAVmlld0NoaWxkKCdkZWZhdWx0Q29udGV4dE1lbnUnKVxuICBwcm90ZWN0ZWQgZGVmYXVsdENvbnRleHRNZW51OiBPQ29udGV4dE1lbnVDb21wb25lbnQ7XG4gIHByb3RlY3RlZCBfcm93OiBhbnk7XG4gIHByb3RlY3RlZCBjb2x1bW46IE9Db2x1bW47XG4gIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBPVHJhbnNsYXRlU2VydmljZTtcbiAgcHJvdGVjdGVkIGNvbnRleHRNZW51U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHB1YmxpYyBpc0RhdGVDb2x1bW46IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBPVGFibGVCYXNlKSkgcHVibGljIHRhYmxlOiBPVGFibGVCYXNlXG4gICkge1xuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UcmFuc2xhdGVTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnNob3dTZWxlY3RBbGwpKSB7XG4gICAgICB0aGlzLmlzVmlzaWJsZVNlbGVjdEFsbC5uZXh0KHRoaXMudGFibGUuc2VsZWN0QWxsQ2hlY2tib3gpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudGFibGUuZ3JvdXBhYmxlKSB7XG4gICAgICB0aGlzLmlzVmlzaWJsZUdyb3VwQnlSb3cubmV4dCh0aGlzLnRhYmxlLmdyb3VwYWJsZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbnRleHRNZW51KSB7XG4gICAgICB0aGlzLmRlZmF1bHRDb250ZXh0TWVudS5leHRlcm5hbENvbnRleHRNZW51SXRlbXMgPSB0aGlzLmNvbnRleHRNZW51Lm9Db250ZXh0TWVudUl0ZW1zO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlLnJlZ2lzdGVyQ29udGV4dE1lbnUodGhpcy5kZWZhdWx0Q29udGV4dE1lbnUpO1xuICAgIHRoaXMucmVnaXN0ZXJDb250ZXh0TWVudUxpc3RlbmVycygpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyQ29udGV4dE1lbnVMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jb250ZXh0TWVudVN1YnNjcmlwdGlvbi5hZGQodGhpcy5kZWZhdWx0Q29udGV4dE1lbnUub25DbG9zZS5zdWJzY3JpYmUoKHBhcmFtOiBhbnkpID0+IHtcbiAgICAgIGlmICghdGhpcy50YWJsZS5pc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpKSB7XG4gICAgICAgIHRoaXMudGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICB0aGlzLmNvbnRleHRNZW51U3Vic2NyaXB0aW9uLmFkZCh0aGlzLmRlZmF1bHRDb250ZXh0TWVudS5vblNob3cuc3Vic2NyaWJlKChwYXJhbTogYW55KSA9PiB7XG4gICAgICB0aGlzLmluaXRQcm9wZXJ0aWVzKHBhcmFtKTtcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgZ290b0RldGFpbHMoZXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YS5yb3dWYWx1ZTtcbiAgICB0aGlzLnRhYmxlLnZpZXdEZXRhaWwoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZWRpdChldmVudCk6IHZvaWQge1xuICAgIHRoaXMudGFibGUuZG9IYW5kbGVDbGljayhldmVudC5kYXRhLnJvd1ZhbHVlLCBldmVudC5kYXRhLmNlbGxOYW1lLCBldmVudC5kYXRhLnJvd0luZGV4LCBldmVudCk7XG4gIH1cblxuICBwdWJsaWMgYWRkKCk6IHZvaWQge1xuICAgIHRoaXMudGFibGUuYWRkKCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMudGFibGUuc2hvd0FuZFNlbGVjdEFsbENoZWNrYm94KCk7XG4gIH1cblxuICBwdWJsaWMgdW5TZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZS5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjb3B5QWxsKCk6IHZvaWQge1xuICAgIHRoaXMudGFibGUuY29weUFsbCgpO1xuICB9XG5cbiAgcHVibGljIGNvcHlDZWxsKGV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2VsbF9kYXRhID0gdGhpcy5kZWZhdWx0Q29udGV4dE1lbnUub3JpZ2luLmlubmVyVGV4dDtcbiAgICBVdGlsLmNvcHlUb0NsaXBib2FyZChjZWxsX2RhdGEpO1xuICB9XG5cbiAgcHVibGljIGNvcHlTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZS5jb3B5U2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgY29weVJvdyhldmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLnRhYmxlLmRhdGFTb3VyY2UuZ2V0UmVuZGVyZWREYXRhKFtldmVudC5kYXRhLnJvd1ZhbHVlXSkpO1xuICAgIFV0aWwuY29weVRvQ2xpcGJvYXJkKGRhdGEpO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZShldmVudCk6IHZvaWQge1xuICAgIHRoaXMudGFibGUucmVtb3ZlKCk7XG4gIH1cblxuICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLnJlZnJlc2goKTtcbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJCeVZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlclNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPVGFibGVGaWx0ZXJCeUNvbHVtblNlcnZpY2UpO1xuXG4gICAgY29uc3QgY29sdW1uQXR0ciA9IHRoaXMuY29sdW1uLmF0dHI7XG4gICAgY29uc3Qgc291cmNlRGF0YVR5cGUgPSB0aGlzLnRhYmxlLmdldFNvdXJjZURhdGFCeUZpbHRlckNvbHVtbih0aGlzLmNvbHVtbik7XG4gICAgY29uc3QgdGFibGVEYXRhID0gdGhpcy50YWJsZS5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLnJvd1tjb2x1bW5BdHRyXTtcblxuICAgIGNvbnN0IGZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyID1cbiAgICAgIHRoaXMudGFibGUuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlckJ5QXR0cih0aGlzLmNvbHVtbi5hdHRyKSA/P1xuICAgICAgdGhpcy5jcmVhdGVDb2x1bW5WYWx1ZUZpbHRlcihjb2x1bW5BdHRyLCBzZWxlY3RlZFZhbHVlLCBzb3VyY2VEYXRhVHlwZSk7XG5cbiAgICBsZXQgY29sdW1uRGF0YSA9IGZpbHRlclNlcnZpY2UucGFyc2VMaXN0RGF0YShmaWx0ZXIsIHRoaXMuY29sdW1uLCB0YWJsZURhdGEsIHRoaXMudGFibGUucGFnZWFibGUsIHNvdXJjZURhdGFUeXBlKTtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuZ2V0U2VsZWN0ZWRWYWx1ZXMoY29sdW1uRGF0YSwgc2VsZWN0ZWRWYWx1ZSk7XG4gICAgZmlsdGVyU2VydmljZS5hcHBseVNlbGVjdGVkVmFsdWVzVG9GaWx0ZXIoXG4gICAgICB0aGlzLmNvbHVtbixcbiAgICAgIHRhYmxlRGF0YSxcbiAgICAgIGZpbHRlcixcbiAgICAgIHNlbGVjdGVkVmFsdWVzLFxuICAgICAgc291cmNlRGF0YVR5cGUsXG4gICAgICB0aGlzLnRhYmxlLnBhZ2VhYmxlLFxuICAgICAgKCkgPT4gdGhpcy50YWJsZS5nZXRDb21wb25lbnRGaWx0ZXIoKVxuICAgICk7XG5cbiAgICB0aGlzLnRhYmxlLmZpbHRlckJ5Q29sdW1uKGZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbHVtblZhbHVlRmlsdGVyKGF0dHI6IHN0cmluZywgdmFsdWU6IGFueSwgc291cmNlRGF0YTogJ2N1cnJlbnQtcGFnZScgfCAnYWxsLWRhdGEnKTogT0NvbHVtblZhbHVlRmlsdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cixcbiAgICAgIG9wZXJhdG9yOiBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLklOLFxuICAgICAgdmFsdWVzOiBbdmFsdWVdLFxuICAgICAgYXZhaWxhYmxlVmFsdWVzOiBudWxsLFxuICAgICAgZmlsdGVyVmFsdWVzSW5EYXRhOiBzb3VyY2VEYXRhLFxuICAgICAgZmlsdGVyRXhwcmVzaW9uOiB0aGlzLnRhYmxlLmdldENvbXBvbmVudEZpbHRlcigpID8/IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkVmFsdWVzKGNvbHVtbkRhdGE6IFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhW10sIHRhcmdldFZhbHVlOiBhbnkpOiBUYWJsZUZpbHRlckJ5Q29sdW1uRGF0YVtdIHtcbiAgICByZXR1cm4gY29sdW1uRGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnZhbHVlID09PSB0YXJnZXRWYWx1ZSAmJiBpdGVtLnNlbGVjdGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBncm91cEJ5Q29sdW1uKGRhdGVUeXBlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZS5ncm91cEJ5Q29sdW1uKHRoaXMuY29sdW1uLCBkYXRlVHlwZSk7XG4gICAgdGhpcy5pc0VuYWJsZWRHcm91cEJ5Q29sdW1uLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHVuR3JvdXBCeUNvbHVtbigpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLnVuR3JvdXBCeUNvbHVtbih0aGlzLmNvbHVtbik7XG4gIH1cblxuICBwdWJsaWMgdW5Hcm91cEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLnVuR3JvdXBCeUFsbENvbHVtbnMoKTtcbiAgfVxuXG4gIGdldCBsYWJlbEZpbHRlckJ5Q29sdW1uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNvbHVtbiAmJiB0aGlzLmNvbHVtbi50aXRsZSkgPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdUQUJMRV9DT05URVhUX01FTlUuRklMVEVSX0JZJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRoaXMuY29sdW1uLnRpdGxlKSA6ICcnO1xuICB9XG5cbiAgZ2V0IGxhYmVsR3JvdXBCeUNvbHVtbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5jb2x1bW4gJiYgdGhpcy5jb2x1bW4udGl0bGUpID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnVEFCTEVfQ09OVEVYVF9NRU5VLkdST1VQX0JZX0NPTFVNTicpICsgJyAnICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0aGlzLmNvbHVtbi50aXRsZSkgOiAnJztcbiAgfVxuXG4gIGdldCBsYWJlbFVuR3JvdXBCeUNvbHVtbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5jb2x1bW4gJiYgdGhpcy5jb2x1bW4udGl0bGUpID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCgnVEFCTEVfQ09OVEVYVF9NRU5VLlVOR1JPVVBfQllfQ09MVU1OJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRoaXMuY29sdW1uLnRpdGxlKSA6ICcnO1xuICB9XG5cbiAgZ2V0IHJvdygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9yb3c7XG4gIH1cblxuICBzZXQgcm93KHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9yb3cgPSB2YWx1ZS5yb3dWYWx1ZTtcbiAgICBjb25zdCBpc1RhYmxlR3JvdXBlZFJvdyA9IHRoaXMuX3JvdyBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3c7XG4gICAgbGV0IGNvbHVtbk5hbWUgPSB2YWx1ZS5jZWxsTmFtZTtcbiAgICBpZiAoaXNUYWJsZUdyb3VwZWRSb3cpIHtcbiAgICAgIGNvbHVtbk5hbWUgPSBjb2x1bW5OYW1lLnN1YnN0cmluZygnZ3JvdXBIZWFkZXItJy5sZW5ndGgpO1xuICAgIH1cbiAgICB0aGlzLmNvbHVtbiA9IHRoaXMudGFibGUuZ2V0T0NvbHVtbihjb2x1bW5OYW1lKTtcbiAgICB0aGlzLmlzQ29sdW1uRGF0ZSgpO1xuICAgIHRoaXMuaXNEYXRhQ2VsbC5uZXh0KCFpc1RhYmxlR3JvdXBlZFJvdyk7XG4gICAgdGhpcy5pc1RhYmxlR3JvdXBlZFJvdy5uZXh0KGlzVGFibGVHcm91cGVkUm93KTtcbiAgICB0aGlzLmlzR3JvdXBhYmxlQ2VsbC5uZXh0KGlzVGFibGVHcm91cGVkUm93ICYmICh0aGlzLl9yb3cgYXMgT1RhYmxlR3JvdXBlZFJvdykuaGFzQ29sdW1uRGF0YSh0aGlzLmNvbHVtbi5hdHRyKSk7XG4gIH1cblxuICBnZXQgYXZhaWxhYmxlQ29sdW1uQWdncmVnYXRlcygpOiBzdHJpbmdbXSB7XG4gICAgbGV0IHJlc3VsdCA9IFV0aWwuY29sdW1uQWdncmVnYXRlcztcbiAgICBpZiAodGhpcy5yb3cgaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICBjb25zdCBncm91cGluZ0NvbXAgPSB0aGlzLnJvdy5nZXRDb2x1bW5Hcm91cGluZ0NvbXBvbmVudCh0aGlzLmNvbHVtbi5hdHRyKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChncm91cGluZ0NvbXAuYWdncmVnYXRlTmFtZSkpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKCk7XG4gICAgICAgIGlmIChyZXN1bHQuaW5jbHVkZXMoZ3JvdXBpbmdDb21wLmFnZ3JlZ2F0ZSkpIHtcbiAgICAgICAgICByZXN1bHQuc3BsaWNlKHJlc3VsdC5pbmRleE9mKGdyb3VwaW5nQ29tcC5hZ2dyZWdhdGUpLCAxLCBncm91cGluZ0NvbXAuYWdncmVnYXRlTmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXBpbmdDb21wLmFnZ3JlZ2F0ZU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyQnlDb2x1bW4oZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJsZS5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLnRhYmxlLmlzQ29sdW1uRmlsdGVyc0FjdGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLnRhYmxlLm9wZW5Db2x1bW5GaWx0ZXJEaWFsb2codGhpcy5jb2x1bW4sIGV2ZW50LmV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2hlY2tWaXNpYmxlRmlsdGVyKCk6IHZvaWQge1xuICAgIGxldCBpc1Zpc2libGUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5jb2x1bW4pIHtcbiAgICAgIGlzVmlzaWJsZSA9IHRoaXMuc2hvd0ZpbHRlciAmJiB0aGlzLnRhYmxlLmlzQ29sdW1uRmlsdGVyYWJsZSh0aGlzLmNvbHVtbik7XG4gICAgfVxuICAgIHRoaXMuaXNWaXNpYmxlRmlsdGVyLm5leHQoaXNWaXNpYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgZ3JvdXAgYnkgcm93IG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBjaGVja0dyb3VwQnlSb3dPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuaXNFbmFibGVkVW5Hcm91cEJ5Q29sdW1uLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuaXNFbmFibGVkVW5Hcm91cEFsbENvbHVtbi5uZXh0KGZhbHNlKTtcbiAgICBsZXQgZ3JvdXBlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmNvbHVtbi5ncm91cGFibGUgJiYgIVV0aWwuaXNBcnJheUVtcHR5KHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheSkgJiYgdGhpcy5mb3VuZENvbHVtbkluR3JvdXBlZENvbHVtbnModGhpcy5jb2x1bW4pKSB7XG4gICAgICB0aGlzLmlzRW5hYmxlZFVuR3JvdXBCeUNvbHVtbi5uZXh0KHRydWUpO1xuICAgICAgZ3JvdXBlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5pc0VuYWJsZWRHcm91cEJ5Q29sdW1uLm5leHQodGhpcy5jb2x1bW4uZ3JvdXBhYmxlICYmICFncm91cGVkKTtcbiAgICBpZiAoIVV0aWwuaXNBcnJheUVtcHR5KHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheSkpIHtcbiAgICAgIHRoaXMuaXNFbmFibGVkVW5Hcm91cEFsbENvbHVtbi5uZXh0KHRydWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZm91bmRDb2x1bW5Jbkdyb3VwZWRDb2x1bW5zKGNvbHVtbik6IGJvb2xlYW4ge1xuICAgIGxldCBmb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheS5mb3JFYWNoKGdyb3VwZWRDb2x1bW4gPT4geyBpZiAoZ3JvdXBlZENvbHVtbiA9PSBjb2x1bW4uYXR0cikgeyBmb3VuZCA9IHRydWUgfSB9KTtcbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cblxuXG4gIHB1YmxpYyBjaGFuZ2VBZ2dyZWdhdGVGdW5jdGlvbihhcmc6IGFueSwgYWdncmVnYXRlRm5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoYXJnLmRhdGEucm93VmFsdWUgaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICAoYXJnLmRhdGEucm93VmFsdWUgYXMgT1RhYmxlR3JvdXBlZFJvdykuc2V0Q29sdW1uQWN0aXZlQWdncmVnYXRlRnVuY3Rpb24odGhpcy5jb2x1bW4uYXR0ciwgYWdncmVnYXRlRm5OYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFByb3BlcnRpZXMocGFyYW06IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBwYXJhbS5kYXRhO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoZGF0YSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yb3cgPSB7IHJvd1ZhbHVlOiBkYXRhLnJvd1ZhbHVlLCBjZWxsTmFtZTogZGF0YS5jZWxsTmFtZSB9O1xuICAgIHRoaXMuY2hlY2tWaXNpYmxlRmlsdGVyKCk7XG4gICAgdGhpcy5jaGVja0dyb3VwQnlSb3dPcHRpb25zKCk7XG4gIH1cblxuICBleHBhbmRSb3dHcm91cHNTYW1lTGV2ZWwoKSB7XG4gICAgdGhpcy50YWJsZS5kYXRhU291cmNlLnNldFJvd0dyb3VwTGV2ZWxFeHBhbnNpb24odGhpcy5fcm93LCB0cnVlKTtcbiAgfVxuXG4gIGNvbGxhcHNlUm93R3JvdXBzU2FtZUxldmVsKCkge1xuICAgIHRoaXMudGFibGUuZGF0YVNvdXJjZS5zZXRSb3dHcm91cExldmVsRXhwYW5zaW9uKHRoaXMuX3JvdywgZmFsc2UpO1xuXG4gIH1cbiAgaXNDb2x1bW5EYXRlKCkge1xuICAgIHRoaXMuaXNEYXRlQ29sdW1uLm5leHQodGhpcy5jb2x1bW4udHlwZSA9PSAnZGF0ZScpO1xuICB9XG59XG4iLCI8by1jb250ZXh0LW1lbnUgI2RlZmF1bHRDb250ZXh0TWVudT5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEYXRhQ2VsbCB8IGFzeW5jXCI+XG4gICAgPG8tY29udGV4dC1tZW51LWl0ZW0gYXR0cj1cInJlZnJlc2hcIiBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5SRUZSRVNIXCIgc3ZnLWljb249XCJvbnRpbWl6ZTphdXRvcmVuZXdcIiAoZXhlY3V0ZSk9XCJyZWZyZXNoKClcIlxuICAgICAgW3Zpc2libGVdPVwiaXNWaXNpYmxlUmVmcmVzaCB8IGFzeW5jXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgIDxvLWNvbnRleHQtbWVudS1pdGVtIGF0dHI9XCJkZXRhaWxcIiBpY29uPVwiY2hldnJvbl9yaWdodFwiIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLlZJRVdfREVUQUlMXCIgKGV4ZWN1dGUpPVwiZ290b0RldGFpbHMoJGV2ZW50KVwiXG4gICAgICBbdmlzaWJsZV09XCJpc1Zpc2libGVEZXRhaWwgfCBhc3luY1wiPjwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICA8by1jb250ZXh0LW1lbnUtaXRlbSBhdHRyPVwiZWRpdFwiIGljb249XCJlZGl0XCIgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuRURJVFwiIChleGVjdXRlKT1cImVkaXQoJGV2ZW50KVwiIFt2aXNpYmxlXT1cImlzVmlzaWJsZUVkaXQgfCBhc3luY1wiPlxuICAgIDwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICA8by1jb250ZXh0LW1lbnUtaXRlbSBhdHRyPVwiaW5zZXJ0XCIgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuSU5TRVJUXCIgaWNvbj1cImFkZFwiIChleGVjdXRlKT1cImFkZCgpXCIgW3Zpc2libGVdPVwiaXNWaXNpYmxlSW5zZXJ0IHwgYXN5bmNcIj5cbiAgICA8L28tY29udGV4dC1tZW51LWl0ZW0+XG4gICAgPG8tY29udGV4dC1tZW51LWl0ZW0gYXR0cj1cImRlbGV0ZVwiIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLkRFTEVURVwiIGljb249XCJkZWxldGVcIiAoZXhlY3V0ZSk9XCJkZWxldGUoJGV2ZW50KVwiIFt2aXNpYmxlXT1cImlzVmlzaWJsZURlbGV0ZSB8IGFzeW5jXCI+XG4gICAgPC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgIDwhLS0gRklMVEVSIEdST1VQIC0tPlxuICAgIDxvLWNvbnRleHQtbWVudS1ncm91cCBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5GSUxURVJcIiBpY29uPVwiZmlsdGVyX2FsdFwiIHR5cGU9XCJncm91cFwiIFt2aXNpYmxlXT1cImlzVmlzaWJsZUZpbHRlciB8IGFzeW5jXCI+XG4gICAgICA8by1jb250ZXh0LW1lbnUtaXRlbSBpY29uPVwiZmlsdGVyX2FsdFwiIFtsYWJlbF09XCJsYWJlbEZpbHRlckJ5Q29sdW1uXCIgKGV4ZWN1dGUpPVwiZmlsdGVyQnlDb2x1bW4oJGV2ZW50KVwiPjwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICAgIDxvLWNvbnRleHQtbWVudS1pdGVtIGljb249XCJmaWx0ZXJfYWx0XCIgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuRklMVEVSX0JZX1ZBTFVFXCIgKGV4ZWN1dGUpPVwiZmlsdGVyQnlWYWx1ZSgpXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgIDwvby1jb250ZXh0LW1lbnUtZ3JvdXA+XG4gICAgPCEtLSBDT1BZIEdST1VQIC0tPlxuICAgIDxvLWNvbnRleHQtbWVudS1zZXBhcmF0b3IgW3Zpc2libGVdPVwiaXNWaXNpYmxlQ29weSB8IGFzeW5jXCI+PC9vLWNvbnRleHQtbWVudS1zZXBhcmF0b3I+XG4gICAgPG8tY29udGV4dC1tZW51LWdyb3VwIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLkNPUFlcIiBpY29uPVwiZmlsZV9jb3B5XCIgdHlwZT1cImdyb3VwXCIgW3Zpc2libGVdPVwiaXNWaXNpYmxlQ29weSB8IGFzeW5jXCI+XG4gICAgICA8by1jb250ZXh0LW1lbnUtaXRlbSBpY29uPVwiZmlsZV9jb3B5XCIgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuQ09QWV9DRUxMXCIgKGV4ZWN1dGUpPVwiY29weUNlbGwoJGV2ZW50KVwiPjwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICAgIDxvLWNvbnRleHQtbWVudS1pdGVtIGljb249XCJmaWxlX2NvcHlcIiBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5DT1BZX1JPV1wiIChleGVjdXRlKT1cImNvcHlSb3coJGV2ZW50KVwiPjwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICAgIDxvLWNvbnRleHQtbWVudS1pdGVtIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLkNPUFlfQUxMXCIgaWNvbj1cImZpbGVfY29weVwiIChleGVjdXRlKT1cImNvcHlBbGwoKVwiPjwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICAgIDxvLWNvbnRleHQtbWVudS1pdGVtIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLkNPUFlfU0VMRUNUSU9OXCIgaWNvbj1cImZpbGVfY29weVwiIChleGVjdXRlKT1cImNvcHlTZWxlY3Rpb24oKVwiPjwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICA8L28tY29udGV4dC1tZW51LWdyb3VwPlxuICAgIDxvLWNvbnRleHQtbWVudS1zZXBhcmF0b3IgW3Zpc2libGVdPVwiaXNWaXNpYmxlU2VsZWN0QWxsIHwgYXN5bmNcIj48L28tY29udGV4dC1tZW51LXNlcGFyYXRvcj5cbiAgICA8by1jb250ZXh0LW1lbnUtaXRlbSBhdHRyPVwic2VsZWN0LWFsbFwiIFtsYWJlbF09XCJ0YWJsZS5pc0FsbFNlbGVjdGVkKCkgPyAnVEFCTEVfQ09OVEVYVF9NRU5VLkRFU0VMRUNUX0FMTCc6ICdUQUJMRV9DT05URVhUX01FTlUuU0VMRUNUX0FMTCdcIlxuICAgICAgaWNvbj1cInNlbGVjdF9hbGxcIiAoZXhlY3V0ZSk9XCJ0YWJsZS5pc0FsbFNlbGVjdGVkKCkgPyB1blNlbGVjdEFsbCgpIDogc2VsZWN0QWxsKClcIiBbdmlzaWJsZV09XCJpc1Zpc2libGVTZWxlY3RBbGwgfCBhc3luY1wiPjwvby1jb250ZXh0LW1lbnUtaXRlbT5cblxuICAgIDwhLS0gR1JPVVAgQlkgLS0+XG4gICAgPG8tY29udGV4dC1tZW51LXNlcGFyYXRvciBbdmlzaWJsZV09XCJpc1Zpc2libGVHcm91cEJ5Um93IHwgYXN5bmNcIj48L28tY29udGV4dC1tZW51LXNlcGFyYXRvcj5cbiAgICA8by1jb250ZXh0LW1lbnUtZ3JvdXAgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuR1JPVVBfQllcIiBpY29uPVwiZm9ybWF0X2luZGVudF9pbmNyZWFzZVwiIHR5cGU9XCJncm91cFwiIFt2aXNpYmxlXT1cImlzVmlzaWJsZUdyb3VwQnlSb3cgfCBhc3luY1wiPlxuICAgICAgPG8tY29udGV4dC1tZW51LWl0ZW0gKm5nSWY9XCJpc0RhdGVDb2x1bW4gfCBhc3luY1wiIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLkdST1VQX0JZX1lFQVJcIiAoZXhlY3V0ZSk9XCJncm91cEJ5Q29sdW1uKCdZRUFSJylcIlxuICAgICAgICBpY29uPVwiZm9ybWF0X2luZGVudF9pbmNyZWFzZVwiIHR5cGU9XCJncm91cFwiIFt2aXNpYmxlXT1cImlzVmlzaWJsZUdyb3VwQnlSb3cgfCBhc3luY1wiIFtlbmFibGVkXT1cImlzRW5hYmxlZEdyb3VwQnlDb2x1bW4gfCBhc3luY1wiPlxuICAgICAgPC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgICAgPG8tY29udGV4dC1tZW51LWl0ZW0gKm5nSWY9XCJpc0RhdGVDb2x1bW4gfCBhc3luY1wiIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLkdST1VQX0JZX01PTlRIXCIgKGV4ZWN1dGUpPVwiZ3JvdXBCeUNvbHVtbignTU9OVEgnKVwiXG4gICAgICAgIGljb249XCJmb3JtYXRfaW5kZW50X2luY3JlYXNlXCIgdHlwZT1cImdyb3VwXCIgW3Zpc2libGVdPVwiaXNWaXNpYmxlR3JvdXBCeVJvdyB8IGFzeW5jXCIgW2VuYWJsZWRdPVwiaXNFbmFibGVkR3JvdXBCeUNvbHVtbiB8IGFzeW5jXCI+XG4gICAgICA8L28tY29udGV4dC1tZW51LWl0ZW0+XG4gICAgICA8by1jb250ZXh0LW1lbnUtaXRlbSAqbmdJZj1cImlzRGF0ZUNvbHVtbiB8IGFzeW5jXCIgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuR1JPVVBfQllfWUVBUl9NT05USFwiIGljb249XCJmb3JtYXRfaW5kZW50X2luY3JlYXNlXCIgdHlwZT1cImdyb3VwXCJcbiAgICAgICAgKGV4ZWN1dGUpPVwiZ3JvdXBCeUNvbHVtbignWUVBUl9NT05USCcpXCIgW3Zpc2libGVdPVwiaXNWaXNpYmxlR3JvdXBCeVJvdyB8IGFzeW5jXCIgW2VuYWJsZWRdPVwiaXNFbmFibGVkR3JvdXBCeUNvbHVtbiB8IGFzeW5jXCI+XG4gICAgICA8L28tY29udGV4dC1tZW51LWl0ZW0+XG4gICAgICA8by1jb250ZXh0LW1lbnUtaXRlbSAqbmdJZj1cImlzRGF0ZUNvbHVtbiB8IGFzeW5jXCIgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuR1JPVVBfQllfWUVBUl9NT05USF9EQVlcIiBpY29uPVwiZm9ybWF0X2luZGVudF9pbmNyZWFzZVwiIHR5cGU9XCJncm91cFwiXG4gICAgICAgIChleGVjdXRlKT1cImdyb3VwQnlDb2x1bW4oJ1lFQVJfTU9OVEhfREFZJylcIiBbdmlzaWJsZV09XCJpc1Zpc2libGVHcm91cEJ5Um93IHwgYXN5bmNcIiBbZW5hYmxlZF09XCJpc0VuYWJsZWRHcm91cEJ5Q29sdW1uIHwgYXN5bmNcIj5cbiAgICAgIDwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICAgIDxvLWNvbnRleHQtbWVudS1pdGVtICpuZ0lmPVwiIShpc0RhdGVDb2x1bW4gfCBhc3luYylcIiBpY29uPVwiZm9ybWF0X2luZGVudF9pbmNyZWFzZVwiIFtsYWJlbF09XCJsYWJlbEdyb3VwQnlDb2x1bW5cIiAoZXhlY3V0ZSk9XCJncm91cEJ5Q29sdW1uKClcIlxuICAgICAgICBbZW5hYmxlZF09XCJpc0VuYWJsZWRHcm91cEJ5Q29sdW1uIHwgYXN5bmNcIj48L28tY29udGV4dC1tZW51LWl0ZW0+XG4gICAgICA8by1jb250ZXh0LW1lbnUtaXRlbSAqbmdJZj1cImlzRW5hYmxlZFVuR3JvdXBCeUNvbHVtbiB8IGFzeW5jXCIgaWNvbj1cImZvcm1hdF9pbmRlbnRfZGVjcmVhc2VcIiBbbGFiZWxdPVwibGFiZWxVbkdyb3VwQnlDb2x1bW5cIlxuICAgICAgICAoZXhlY3V0ZSk9XCJ1bkdyb3VwQnlDb2x1bW4oKVwiIFtlbmFibGVkXT1cImlzRW5hYmxlZFVuR3JvdXBCeUNvbHVtbiB8IGFzeW5jXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgICAgPG8tY29udGV4dC1tZW51LWl0ZW0gaWNvbj1cImZvcm1hdF9saW5lX3NwYWNpbmdcIiBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5VTkdST1VQX0FMTENPTFVNTlNcIiAoZXhlY3V0ZSk9XCJ1bkdyb3VwQWxsKClcIlxuICAgICAgICBbZW5hYmxlZF09XCJpc0VuYWJsZWRVbkdyb3VwQWxsQ29sdW1uIHwgYXN5bmNcIj5cbiAgICAgIDwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICA8L28tY29udGV4dC1tZW51LWdyb3VwPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIEdST1VQIEJZIEhFQURFUiBDRUxMIEFHR1JFR0FURSBGVU5DVElPTiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzR3JvdXBhYmxlQ2VsbCB8IGFzeW5jXCI+XG4gICAgPG8tY29udGV4dC1tZW51LWdyb3VwIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLkdST1VQX0JZLkFHR1JFR0FURV9GVU5DVElPTlwiIGljb249XCJmb3JtYXRfaW5kZW50X2luY3JlYXNlXCIgdHlwZT1cImdyb3VwXCI+XG4gICAgICA8by1jb250ZXh0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgYWdncmVnYXRlRm4gb2YgYXZhaWxhYmxlQ29sdW1uQWdncmVnYXRlc1wiIGxhYmVsPVwie3sgJ0FHR1JFR0FURV9OQU1FLicgKyBhZ2dyZWdhdGVGbiB9fVwiXG4gICAgICAgIChleGVjdXRlKT1cImNoYW5nZUFnZ3JlZ2F0ZUZ1bmN0aW9uKCRldmVudCwgYWdncmVnYXRlRm4pXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgIDwvby1jb250ZXh0LW1lbnUtZ3JvdXA+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RhYmxlR3JvdXBlZFJvdyB8IGFzeW5jXCI+XG4gICAgPG8tY29udGV4dC1tZW51LWl0ZW0gaWNvbj1cInVuZm9sZF9tb3JlXCIgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuRVhQQU5EX0FMTF9HUk9VUFNcIiAoZXhlY3V0ZSk9XCJleHBhbmRSb3dHcm91cHNTYW1lTGV2ZWwoKVwiPjwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICA8by1jb250ZXh0LW1lbnUtaXRlbSBpY29uPVwidW5mb2xkX2xlc3NcIiBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5DT0xMQVBTRV9BTExfR1JPVVBTXCIgKGV4ZWN1dGUpPVwiY29sbGFwc2VSb3dHcm91cHNTYW1lTGV2ZWwoKVwiPlxuICAgIDwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgPC9uZy1jb250YWluZXI+XG5cbjwvby1jb250ZXh0LW1lbnU+XG4iXX0=
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1jb250ZXh0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9jb250ZXh0bWVudS9vLXRhYmxlLWNvbnRleHQtbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2NvbnRleHRtZW51L28tdGFibGUtY29udGV4dC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDdkYsT0FBTyxFQUFFLHlCQUF5QixFQUFzQixNQUFNLG9EQUFvRCxDQUFDO0FBQ25ILE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUV0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUUxRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7O0FBRXRELE1BQU0sQ0FBQyxNQUFN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QUEwQixrbUJDakN2QywyM0xBc0VBO0FEMEJFO0lBQUMscUJBQXFCLEVBQUU7OzsrREFNdkI7MkZBckVVLDBCQUEwQjtrQkFOdEMsU0FBUzsrQkFDRSxzQkFBc0IsbUJBRWYsdUJBQXVCLENBQUMsTUFBTSxVQUN2QyxpQ0FBaUM7OzBCQW1JdEMsTUFBTTsyQkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDOzRDQWpFbEMsYUFBYSxNQXlEUCxrQkFBa0I7c0JBRDNCLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0LCBJbmplY3RvciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBPVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS9vLXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IsIE9Db2x1bW5WYWx1ZUZpbHRlciB9IGZyb20gJy4uLy4uLy4uLy4uL3R5cGVzL3RhYmxlL28tY29sdW1uLXZhbHVlLWZpbHRlci50eXBlJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0NvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dG1lbnUvby1jb250ZXh0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgT0NvbHVtbiB9IGZyb20gJy4uLy4uL2NvbHVtbi9vLWNvbHVtbi5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVHcm91cGVkUm93IH0gZnJvbSAnLi4vcm93L28tdGFibGUtcm93LWdyb3VwLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUZpbHRlckJ5Q29sdW1uU2VydmljZSB9IGZyb20gJy4uL2RpYWxvZy9maWx0ZXItYnktY29sdW1uL28tdGFibGUtZmlsdGVyLWJ5LWNvbHVtbi5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhIH0gZnJvbSAnLi4vLi4vLi4vLi4vdHlwZXMvdGFibGUvby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEudHlwZSc7XG5pbXBvcnQgeyBPVGFibGVCYXNlIH0gZnJvbSAnLi4vLi4vby10YWJsZS1iYXNlLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEFCTEVfQ09OVEVYVF9NRU5VX0lOUFVUUyA9IFtcbiAgJ2NvbnRleHRNZW51OiBjb250ZXh0LW1lbnUnLFxuICAnc2hvd0luc2VydDogaW5zZXJ0JyxcbiAgJ3Nob3dFZGl0OiBlZGl0JyxcbiAgJ3Nob3dWaWV3RGV0YWlsOiB2aWV3LWRldGFpbCcsXG4gICdzaG93Q29weTogY29weScsXG4gICdzaG93U2VsZWN0QWxsOiBzZWxlY3QtYWxsJyxcbiAgJ3Nob3dSZWZyZXNoOiByZWZyZXNoJyxcbiAgJ3Nob3dEZWxldGU6IGRlbGV0ZScsXG4gICdzaG93RmlsdGVyOiBmaWx0ZXInLFxuICAnc2hvd0dyb3VwQnlSb3c6IGdyb3VwLWJ5LXJvdydcbl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdGFibGUtY29udGV4dC1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUtY29udGV4dC1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGlucHV0czogREVGQVVMVF9UQUJMRV9DT05URVhUX01FTlVfSU5QVVRTXG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZUNvbnRleHRNZW51Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHB1YmxpYyBjb250ZXh0TWVudTogT0NvbnRleHRNZW51Q29tcG9uZW50O1xuICBwdWJsaWMgaXNWaXNpYmxlSW5zZXJ0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwdWJsaWMgaXNWaXNpYmxlRWRpdDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHVibGljIGlzVmlzaWJsZURldGFpbDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHVibGljIGlzVmlzaWJsZUNvcHk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHB1YmxpYyBpc1Zpc2libGVTZWxlY3RBbGw6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHB1YmxpYyBpc1Zpc2libGVSZWZyZXNoOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwdWJsaWMgaXNWaXNpYmxlRGVsZXRlOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwdWJsaWMgaXNWaXNpYmxlRmlsdGVyOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwdWJsaWMgaXNWaXNpYmxlR3JvdXBCeVJvdzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHVibGljIGlzRW5hYmxlZEdyb3VwQnlDb2x1bW46IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHB1YmxpYyBpc0VuYWJsZWRVbkdyb3VwQnlDb2x1bW46IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwdWJsaWMgaXNFbmFibGVkVW5Hcm91cEFsbENvbHVtbjogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgcHVibGljIGlzRGF0YUNlbGw6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodHJ1ZSk7XG4gIHB1YmxpYyBpc1RhYmxlR3JvdXBlZFJvdzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHVibGljIGlzR3JvdXBhYmxlQ2VsbDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcblxuICBzZXQgc2hvd0luc2VydCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgdmFsdWUgPSBVdGlsLnBhcnNlQm9vbGVhbih2YWx1ZSBhcyBhbnkpO1xuICAgIH1cbiAgICB0aGlzLmlzVmlzaWJsZUluc2VydC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzaG93SW5zZXJ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZUluc2VydC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgc2V0IHNob3dFZGl0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB2YWx1ZSA9IFV0aWwucGFyc2VCb29sZWFuKHZhbHVlIGFzIGFueSk7XG4gICAgfVxuICAgIHRoaXMuaXNWaXNpYmxlRWRpdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBzaG93RWRpdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1Zpc2libGVFZGl0LmdldFZhbHVlKCk7XG4gIH1cblxuICBzZXQgc2hvd1ZpZXdEZXRhaWwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHZhbHVlID0gVXRpbC5wYXJzZUJvb2xlYW4odmFsdWUgYXMgYW55KTtcbiAgICB9XG4gICAgdGhpcy5pc1Zpc2libGVEZXRhaWwubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2hvd1ZpZXdEZXRhaWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlRGV0YWlsLmdldFZhbHVlKCk7XG4gIH1cblxuICBzZXQgc2hvd0NvcHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHZhbHVlID0gVXRpbC5wYXJzZUJvb2xlYW4odmFsdWUgYXMgYW55KTtcbiAgICB9XG4gICAgdGhpcy5pc1Zpc2libGVDb3B5Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNob3dDb3B5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZUNvcHkuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzZXQgc2hvd1NlbGVjdEFsbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgdmFsdWUgPSBVdGlsLnBhcnNlQm9vbGVhbih2YWx1ZSBhcyBhbnkpO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlLmlzU2VsZWN0aW9uTW9kZU5vbmUoKSA/IHRoaXMuaXNWaXNpYmxlU2VsZWN0QWxsLm5leHQoZmFsc2UpIDogdGhpcy5pc1Zpc2libGVTZWxlY3RBbGwubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2hvd1NlbGVjdEFsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1Zpc2libGVTZWxlY3RBbGwuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHNldCBzaG93UmVmcmVzaCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgdmFsdWUgPSBVdGlsLnBhcnNlQm9vbGVhbih2YWx1ZSBhcyBhbnkpO1xuICAgIH1cbiAgICB0aGlzLmlzVmlzaWJsZVJlZnJlc2gubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2hvd1JlZnJlc2goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlUmVmcmVzaC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgc2V0IHNob3dEZWxldGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHZhbHVlID0gVXRpbC5wYXJzZUJvb2xlYW4odmFsdWUgYXMgYW55KTtcbiAgICB9XG4gICAgdGhpcy5pc1Zpc2libGVEZWxldGUubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgc2hvd0RlbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1Zpc2libGVEZWxldGUuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHNldCBzaG93RmlsdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB2YWx1ZSA9IFV0aWwucGFyc2VCb29sZWFuKHZhbHVlIGFzIGFueSk7XG4gICAgfVxuICAgIHRoaXMuaXNWaXNpYmxlRmlsdGVyLm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNob3dGaWx0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlRmlsdGVyLmdldFZhbHVlKCk7XG4gIH1cblxuICBzZXQgc2hvd0dyb3VwQnlSb3codmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHZhbHVlID0gVXRpbC5wYXJzZUJvb2xlYW4odmFsdWUgYXMgYW55KTtcbiAgICB9XG4gICAgdGhpcy5pc1Zpc2libGVHcm91cEJ5Um93Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHNob3dHcm91cEJ5Um93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZUdyb3VwQnlSb3cuZ2V0VmFsdWUoKTtcbiAgfVxuXG5cbiAgQFZpZXdDaGlsZCgnZGVmYXVsdENvbnRleHRNZW51JylcbiAgcHJvdGVjdGVkIGRlZmF1bHRDb250ZXh0TWVudTogT0NvbnRleHRNZW51Q29tcG9uZW50O1xuICBwcm90ZWN0ZWQgX3JvdzogYW55O1xuICBwcm90ZWN0ZWQgY29sdW1uOiBPQ29sdW1uO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogT1RyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBjb250ZXh0TWVudVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwdWJsaWMgaXNEYXRlQ29sdW1uOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT1RhYmxlQmFzZSkpIHB1YmxpYyB0YWJsZTogT1RhYmxlQmFzZVxuICApIHtcbiAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChPVHJhbnNsYXRlU2VydmljZSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5zaG93U2VsZWN0QWxsKSkge1xuICAgICAgdGhpcy5pc1Zpc2libGVTZWxlY3RBbGwubmV4dCh0aGlzLnRhYmxlLnNlbGVjdEFsbENoZWNrYm94KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRhYmxlLmdyb3VwYWJsZSkge1xuICAgICAgdGhpcy5pc1Zpc2libGVHcm91cEJ5Um93Lm5leHQodGhpcy50YWJsZS5ncm91cGFibGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb250ZXh0TWVudSkge1xuICAgICAgdGhpcy5kZWZhdWx0Q29udGV4dE1lbnUuZXh0ZXJuYWxDb250ZXh0TWVudUl0ZW1zID0gdGhpcy5jb250ZXh0TWVudS5vQ29udGV4dE1lbnVJdGVtcztcbiAgICB9XG4gICAgdGhpcy50YWJsZS5yZWdpc3RlckNvbnRleHRNZW51KHRoaXMuZGVmYXVsdENvbnRleHRNZW51KTtcbiAgICB0aGlzLnJlZ2lzdGVyQ29udGV4dE1lbnVMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckNvbnRleHRNZW51TGlzdGVuZXJzKCkge1xuICAgIHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24uYWRkKHRoaXMuZGVmYXVsdENvbnRleHRNZW51Lm9uQ2xvc2Uuc3Vic2NyaWJlKChwYXJhbTogYW55KSA9PiB7XG4gICAgICBpZiAoIXRoaXMudGFibGUuaXNTZWxlY3Rpb25Nb2RlTXVsdGlwbGUoKSkge1xuICAgICAgICB0aGlzLnRhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgdGhpcy5jb250ZXh0TWVudVN1YnNjcmlwdGlvbi5hZGQodGhpcy5kZWZhdWx0Q29udGV4dE1lbnUub25TaG93LnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xuICAgICAgdGhpcy5pbml0UHJvcGVydGllcyhwYXJhbSk7XG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIGdvdG9EZXRhaWxzKGV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEucm93VmFsdWU7XG4gICAgdGhpcy50YWJsZS52aWV3RGV0YWlsKGRhdGEpO1xuICB9XG5cbiAgcHVibGljIGVkaXQoZXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLmRvSGFuZGxlQ2xpY2soZXZlbnQuZGF0YS5yb3dWYWx1ZSwgZXZlbnQuZGF0YS5jZWxsTmFtZSwgZXZlbnQuZGF0YS5yb3dJbmRleCwgZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGFkZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLmFkZCgpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLnNob3dBbmRTZWxlY3RBbGxDaGVja2JveCgpO1xuICB9XG5cbiAgcHVibGljIHVuU2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMudGFibGUuc2VsZWN0aW9uLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgY29weUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLmNvcHlBbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBjb3B5Q2VsbChldmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNlbGxfZGF0YSA9IHRoaXMuZGVmYXVsdENvbnRleHRNZW51Lm9yaWdpbi5pbm5lclRleHQ7XG4gICAgVXRpbC5jb3B5VG9DbGlwYm9hcmQoY2VsbF9kYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBjb3B5U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMudGFibGUuY29weVNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGNvcHlSb3coZXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkodGhpcy50YWJsZS5kYXRhU291cmNlLmdldFJlbmRlcmVkRGF0YShbZXZlbnQuZGF0YS5yb3dWYWx1ZV0pKTtcbiAgICBVdGlsLmNvcHlUb0NsaXBib2FyZChkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUoZXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLnJlbW92ZSgpO1xuICB9XG5cbiAgcHVibGljIHJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZS5yZWZyZXNoKCk7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyQnlWYWx1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT1RhYmxlRmlsdGVyQnlDb2x1bW5TZXJ2aWNlKTtcblxuICAgIGNvbnN0IGNvbHVtbkF0dHIgPSB0aGlzLmNvbHVtbi5hdHRyO1xuICAgIGNvbnN0IGZpbHRlckJ5Q29sdW1uRGVmaW5pdGlvbiA9IHRoaXMudGFibGUuZ2V0RmlsdGVyQ29sdW1uQnlBdHRyKHRoaXMuY29sdW1uLmF0dHIpO1xuICAgIGNvbnN0IHNvdXJjZURhdGFUeXBlID0gZmlsdGVyQnlDb2x1bW5EZWZpbml0aW9uLmZpbHRlclZhbHVlc0luRGF0YTtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGZpbHRlckJ5Q29sdW1uRGVmaW5pdGlvbi52aXNpYmxlQ29sdW1ucztcblxuICAgIGZpbHRlclNlcnZpY2UuZ2V0RGF0YUZvckNvbHVtbkZpbHRlcih0aGlzLmluamVjdG9yLCB0aGlzLnRhYmxlLCB0aGlzLmNvbHVtbiwgZmlsdGVyQnlDb2x1bW5EZWZpbml0aW9uKS5zdWJzY3JpYmUoXG4gICAgICB0YWJsZURhdGEgPT4ge1xuICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9IHRoaXMucm93W2NvbHVtbkF0dHJdO1xuICAgICAgICBpZiAoc291cmNlRGF0YVR5cGUgIT09ICdjdXJyZW50LXBhZ2UnICYmIHZpc2libGVDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IHRhYmxlRGF0YS5maWx0ZXIocmVnaXN0cm8gPT5cbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5zLnNvbWUocHJvcCA9PiByZWdpc3Ryb1twcm9wXSA9PT0gc2VsZWN0ZWRWYWx1ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyOiBPQ29sdW1uVmFsdWVGaWx0ZXIgPVxuICAgICAgICAgIHRoaXMudGFibGUuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlckJ5QXR0cih0aGlzLmNvbHVtbi5hdHRyKSA/P1xuICAgICAgICAgIHRoaXMuY3JlYXRlQ29sdW1uVmFsdWVGaWx0ZXIoY29sdW1uQXR0ciwgc2VsZWN0ZWRWYWx1ZSwgc291cmNlRGF0YVR5cGUpO1xuXG4gICAgICAgIGxldCBjb2x1bW5EYXRhID0gZmlsdGVyU2VydmljZS5wYXJzZUxpc3REYXRhKGZpbHRlciwgdGhpcy5jb2x1bW4sIHRhYmxlRGF0YSwgdGhpcy50YWJsZS5wYWdlYWJsZSwgZmlsdGVyQnlDb2x1bW5EZWZpbml0aW9uKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLmdldFNlbGVjdGVkVmFsdWVzKGNvbHVtbkRhdGEsIHNlbGVjdGVkVmFsdWUpO1xuICAgICAgICBmaWx0ZXJTZXJ2aWNlLmFwcGx5U2VsZWN0ZWRWYWx1ZXNUb0ZpbHRlcihcbiAgICAgICAgICB0aGlzLmNvbHVtbixcbiAgICAgICAgICB0YWJsZURhdGEsXG4gICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgIHNlbGVjdGVkVmFsdWVzLFxuICAgICAgICAgIGZpbHRlckJ5Q29sdW1uRGVmaW5pdGlvbixcbiAgICAgICAgICB0aGlzLnRhYmxlLnBhZ2VhYmxlLFxuICAgICAgICAgICgpID0+IHRoaXMudGFibGUuZ2V0Q29tcG9uZW50RmlsdGVyKClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckJ5Q29sdW1uKGZpbHRlcik7XG4gICAgICB9XG4gICAgKVxuXG5cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29sdW1uVmFsdWVGaWx0ZXIoYXR0cjogc3RyaW5nLCB2YWx1ZTogYW55LCBzb3VyY2VEYXRhOiAnY3VycmVudC1wYWdlJyB8ICdhbGwtZGF0YScpOiBPQ29sdW1uVmFsdWVGaWx0ZXIge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyLFxuICAgICAgb3BlcmF0b3I6IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU4sXG4gICAgICB2YWx1ZXM6IFt2YWx1ZV0sXG4gICAgICBhdmFpbGFibGVWYWx1ZXM6IG51bGwsXG4gICAgICBmaWx0ZXJWYWx1ZXNJbkRhdGE6IHNvdXJjZURhdGEsXG4gICAgICBmaWx0ZXJFeHByZXNpb246IHRoaXMudGFibGUuZ2V0Q29tcG9uZW50RmlsdGVyKCkgPz8gdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRWYWx1ZXMoY29sdW1uRGF0YTogVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFbXSwgdGFyZ2V0VmFsdWU6IGFueSk6IFRhYmxlRmlsdGVyQnlDb2x1bW5EYXRhW10ge1xuICAgIHJldHVybiBjb2x1bW5EYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0udmFsdWUgPT09IHRhcmdldFZhbHVlICYmIGl0ZW0uc2VsZWN0ZWQpO1xuICB9XG5cbiAgcHVibGljIGdyb3VwQnlDb2x1bW4oZGF0ZVR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlLmdyb3VwQnlDb2x1bW4odGhpcy5jb2x1bW4sIGRhdGVUeXBlKTtcbiAgICB0aGlzLmlzRW5hYmxlZEdyb3VwQnlDb2x1bW4ubmV4dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgdW5Hcm91cEJ5Q29sdW1uKCk6IHZvaWQge1xuICAgIHRoaXMudGFibGUudW5Hcm91cEJ5Q29sdW1uKHRoaXMuY29sdW1uKTtcbiAgfVxuXG4gIHB1YmxpYyB1bkdyb3VwQWxsKCk6IHZvaWQge1xuICAgIHRoaXMudGFibGUudW5Hcm91cEJ5QWxsQ29sdW1ucygpO1xuICB9XG5cbiAgZ2V0IGxhYmVsRmlsdGVyQnlDb2x1bW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuY29sdW1uICYmIHRoaXMuY29sdW1uLnRpdGxlKSA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoJ1RBQkxFX0NPTlRFWFRfTUVOVS5GSUxURVJfQlknKSArICcgJyArIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy5jb2x1bW4udGl0bGUpIDogJyc7XG4gIH1cblxuICBnZXQgbGFiZWxHcm91cEJ5Q29sdW1uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNvbHVtbiAmJiB0aGlzLmNvbHVtbi50aXRsZSkgPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdUQUJMRV9DT05URVhUX01FTlUuR1JPVVBfQllfQ09MVU1OJykgKyAnICcgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRoaXMuY29sdW1uLnRpdGxlKSA6ICcnO1xuICB9XG5cbiAgZ2V0IGxhYmVsVW5Hcm91cEJ5Q29sdW1uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNvbHVtbiAmJiB0aGlzLmNvbHVtbi50aXRsZSkgPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdUQUJMRV9DT05URVhUX01FTlUuVU5HUk9VUF9CWV9DT0xVTU4nKSArICcgJyArIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy5jb2x1bW4udGl0bGUpIDogJyc7XG4gIH1cblxuICBnZXQgcm93KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdztcbiAgfVxuXG4gIHNldCByb3codmFsdWU6IGFueSkge1xuICAgIHRoaXMuX3JvdyA9IHZhbHVlLnJvd1ZhbHVlO1xuICAgIGNvbnN0IGlzVGFibGVHcm91cGVkUm93ID0gdGhpcy5fcm93IGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdztcbiAgICBsZXQgY29sdW1uTmFtZSA9IHZhbHVlLmNlbGxOYW1lO1xuICAgIGlmIChpc1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgY29sdW1uTmFtZSA9IGNvbHVtbk5hbWUuc3Vic3RyaW5nKCdncm91cEhlYWRlci0nLmxlbmd0aCk7XG4gICAgfVxuICAgIHRoaXMuY29sdW1uID0gdGhpcy50YWJsZS5nZXRPQ29sdW1uKGNvbHVtbk5hbWUpO1xuICAgIHRoaXMuaXNDb2x1bW5EYXRlKCk7XG4gICAgdGhpcy5pc0RhdGFDZWxsLm5leHQoIWlzVGFibGVHcm91cGVkUm93KTtcbiAgICB0aGlzLmlzVGFibGVHcm91cGVkUm93Lm5leHQoaXNUYWJsZUdyb3VwZWRSb3cpO1xuICAgIHRoaXMuaXNHcm91cGFibGVDZWxsLm5leHQoaXNUYWJsZUdyb3VwZWRSb3cgJiYgKHRoaXMuX3JvdyBhcyBPVGFibGVHcm91cGVkUm93KS5oYXNDb2x1bW5EYXRhKHRoaXMuY29sdW1uLmF0dHIpKTtcbiAgfVxuXG4gIGdldCBhdmFpbGFibGVDb2x1bW5BZ2dyZWdhdGVzKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzdWx0ID0gVXRpbC5jb2x1bW5BZ2dyZWdhdGVzO1xuICAgIGlmICh0aGlzLnJvdyBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICAgIGNvbnN0IGdyb3VwaW5nQ29tcCA9IHRoaXMucm93LmdldENvbHVtbkdyb3VwaW5nQ29tcG9uZW50KHRoaXMuY29sdW1uLmF0dHIpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGdyb3VwaW5nQ29tcC5hZ2dyZWdhdGVOYW1lKSkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoKTtcbiAgICAgICAgaWYgKHJlc3VsdC5pbmNsdWRlcyhncm91cGluZ0NvbXAuYWdncmVnYXRlKSkge1xuICAgICAgICAgIHJlc3VsdC5zcGxpY2UocmVzdWx0LmluZGV4T2YoZ3JvdXBpbmdDb21wLmFnZ3JlZ2F0ZSksIDEsIGdyb3VwaW5nQ29tcC5hZ2dyZWdhdGVOYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQucHVzaChncm91cGluZ0NvbXAuYWdncmVnYXRlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBmaWx0ZXJCeUNvbHVtbihldmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRhYmxlLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMudGFibGUuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMudGFibGUub3BlbkNvbHVtbkZpbHRlckRpYWxvZyh0aGlzLmNvbHVtbiwgZXZlbnQuZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjaGVja1Zpc2libGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgbGV0IGlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmNvbHVtbikge1xuICAgICAgaXNWaXNpYmxlID0gdGhpcy5zaG93RmlsdGVyICYmIHRoaXMudGFibGUuaXNDb2x1bW5GaWx0ZXJhYmxlKHRoaXMuY29sdW1uKTtcbiAgICB9XG4gICAgdGhpcy5pc1Zpc2libGVGaWx0ZXIubmV4dChpc1Zpc2libGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBncm91cCBieSByb3cgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGNoZWNrR3JvdXBCeVJvd09wdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5pc0VuYWJsZWRVbkdyb3VwQnlDb2x1bW4ubmV4dChmYWxzZSk7XG4gICAgdGhpcy5pc0VuYWJsZWRVbkdyb3VwQWxsQ29sdW1uLm5leHQoZmFsc2UpO1xuICAgIGxldCBncm91cGVkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuY29sdW1uLmdyb3VwYWJsZSAmJiAhVXRpbC5pc0FycmF5RW1wdHkodGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5KSAmJiB0aGlzLmZvdW5kQ29sdW1uSW5Hcm91cGVkQ29sdW1ucyh0aGlzLmNvbHVtbikpIHtcbiAgICAgIHRoaXMuaXNFbmFibGVkVW5Hcm91cEJ5Q29sdW1uLm5leHQodHJ1ZSk7XG4gICAgICBncm91cGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzRW5hYmxlZEdyb3VwQnlDb2x1bW4ubmV4dCh0aGlzLmNvbHVtbi5ncm91cGFibGUgJiYgIWdyb3VwZWQpO1xuICAgIGlmICghVXRpbC5pc0FycmF5RW1wdHkodGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5KSkge1xuICAgICAgdGhpcy5pc0VuYWJsZWRVbkdyb3VwQWxsQ29sdW1uLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBmb3VuZENvbHVtbkluR3JvdXBlZENvbHVtbnMoY29sdW1uKTogYm9vbGVhbiB7XG4gICAgbGV0IGZvdW5kOiBib29sZWFuID0gZmFsc2U7XG4gICAgdGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5LmZvckVhY2goZ3JvdXBlZENvbHVtbiA9PiB7IGlmIChncm91cGVkQ29sdW1uID09IGNvbHVtbi5hdHRyKSB7IGZvdW5kID0gdHJ1ZSB9IH0pO1xuICAgIHJldHVybiBmb3VuZDtcbiAgfVxuXG5cbiAgcHVibGljIGNoYW5nZUFnZ3JlZ2F0ZUZ1bmN0aW9uKGFyZzogYW55LCBhZ2dyZWdhdGVGbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChhcmcuZGF0YS5yb3dWYWx1ZSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICAgIChhcmcuZGF0YS5yb3dWYWx1ZSBhcyBPVGFibGVHcm91cGVkUm93KS5zZXRDb2x1bW5BY3RpdmVBZ2dyZWdhdGVGdW5jdGlvbih0aGlzLmNvbHVtbi5hdHRyLCBhZ2dyZWdhdGVGbk5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0UHJvcGVydGllcyhwYXJhbTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IHBhcmFtLmRhdGE7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChkYXRhKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJvdyA9IHsgcm93VmFsdWU6IGRhdGEucm93VmFsdWUsIGNlbGxOYW1lOiBkYXRhLmNlbGxOYW1lIH07XG4gICAgdGhpcy5jaGVja1Zpc2libGVGaWx0ZXIoKTtcbiAgICB0aGlzLmNoZWNrR3JvdXBCeVJvd09wdGlvbnMoKTtcbiAgfVxuXG4gIGV4cGFuZFJvd0dyb3Vwc1NhbWVMZXZlbCgpIHtcbiAgICB0aGlzLnRhYmxlLmRhdGFTb3VyY2Uuc2V0Um93R3JvdXBMZXZlbEV4cGFuc2lvbih0aGlzLl9yb3csIHRydWUpO1xuICB9XG5cbiAgY29sbGFwc2VSb3dHcm91cHNTYW1lTGV2ZWwoKSB7XG4gICAgdGhpcy50YWJsZS5kYXRhU291cmNlLnNldFJvd0dyb3VwTGV2ZWxFeHBhbnNpb24odGhpcy5fcm93LCBmYWxzZSk7XG5cbiAgfVxuICBpc0NvbHVtbkRhdGUoKSB7XG4gICAgdGhpcy5pc0RhdGVDb2x1bW4ubmV4dCh0aGlzLmNvbHVtbi50eXBlID09ICdkYXRlJyk7XG4gIH1cbn1cbiIsIjxvLWNvbnRleHQtbWVudSAjZGVmYXVsdENvbnRleHRNZW51PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RhdGFDZWxsIHwgYXN5bmNcIj5cbiAgICA8by1jb250ZXh0LW1lbnUtaXRlbSBhdHRyPVwicmVmcmVzaFwiIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLlJFRlJFU0hcIiBzdmctaWNvbj1cIm9udGltaXplOmF1dG9yZW5ld1wiIChleGVjdXRlKT1cInJlZnJlc2goKVwiXG4gICAgICBbdmlzaWJsZV09XCJpc1Zpc2libGVSZWZyZXNoIHwgYXN5bmNcIj48L28tY29udGV4dC1tZW51LWl0ZW0+XG4gICAgPG8tY29udGV4dC1tZW51LWl0ZW0gYXR0cj1cImRldGFpbFwiIGljb249XCJjaGV2cm9uX3JpZ2h0XCIgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuVklFV19ERVRBSUxcIiAoZXhlY3V0ZSk9XCJnb3RvRGV0YWlscygkZXZlbnQpXCJcbiAgICAgIFt2aXNpYmxlXT1cImlzVmlzaWJsZURldGFpbCB8IGFzeW5jXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgIDxvLWNvbnRleHQtbWVudS1pdGVtIGF0dHI9XCJlZGl0XCIgaWNvbj1cImVkaXRcIiBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5FRElUXCIgKGV4ZWN1dGUpPVwiZWRpdCgkZXZlbnQpXCIgW3Zpc2libGVdPVwiaXNWaXNpYmxlRWRpdCB8IGFzeW5jXCI+XG4gICAgPC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgIDxvLWNvbnRleHQtbWVudS1pdGVtIGF0dHI9XCJpbnNlcnRcIiBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5JTlNFUlRcIiBpY29uPVwiYWRkXCIgKGV4ZWN1dGUpPVwiYWRkKClcIiBbdmlzaWJsZV09XCJpc1Zpc2libGVJbnNlcnQgfCBhc3luY1wiPlxuICAgIDwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICA8by1jb250ZXh0LW1lbnUtaXRlbSBhdHRyPVwiZGVsZXRlXCIgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuREVMRVRFXCIgaWNvbj1cImRlbGV0ZVwiIChleGVjdXRlKT1cImRlbGV0ZSgkZXZlbnQpXCIgW3Zpc2libGVdPVwiaXNWaXNpYmxlRGVsZXRlIHwgYXN5bmNcIj5cbiAgICA8L28tY29udGV4dC1tZW51LWl0ZW0+XG4gICAgPCEtLSBGSUxURVIgR1JPVVAgLS0+XG4gICAgPG8tY29udGV4dC1tZW51LWdyb3VwIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLkZJTFRFUlwiIGljb249XCJmaWx0ZXJfYWx0XCIgdHlwZT1cImdyb3VwXCIgW3Zpc2libGVdPVwiaXNWaXNpYmxlRmlsdGVyIHwgYXN5bmNcIj5cbiAgICAgIDxvLWNvbnRleHQtbWVudS1pdGVtIGljb249XCJmaWx0ZXJfYWx0XCIgW2xhYmVsXT1cImxhYmVsRmlsdGVyQnlDb2x1bW5cIiAoZXhlY3V0ZSk9XCJmaWx0ZXJCeUNvbHVtbigkZXZlbnQpXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgICAgPG8tY29udGV4dC1tZW51LWl0ZW0gaWNvbj1cImZpbHRlcl9hbHRcIiBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5GSUxURVJfQllfVkFMVUVcIiAoZXhlY3V0ZSk9XCJmaWx0ZXJCeVZhbHVlKClcIj48L28tY29udGV4dC1tZW51LWl0ZW0+XG4gICAgPC9vLWNvbnRleHQtbWVudS1ncm91cD5cbiAgICA8IS0tIENPUFkgR1JPVVAgLS0+XG4gICAgPG8tY29udGV4dC1tZW51LXNlcGFyYXRvciBbdmlzaWJsZV09XCJpc1Zpc2libGVDb3B5IHwgYXN5bmNcIj48L28tY29udGV4dC1tZW51LXNlcGFyYXRvcj5cbiAgICA8by1jb250ZXh0LW1lbnUtZ3JvdXAgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuQ09QWVwiIGljb249XCJmaWxlX2NvcHlcIiB0eXBlPVwiZ3JvdXBcIiBbdmlzaWJsZV09XCJpc1Zpc2libGVDb3B5IHwgYXN5bmNcIj5cbiAgICAgIDxvLWNvbnRleHQtbWVudS1pdGVtIGljb249XCJmaWxlX2NvcHlcIiBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5DT1BZX0NFTExcIiAoZXhlY3V0ZSk9XCJjb3B5Q2VsbCgkZXZlbnQpXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgICAgPG8tY29udGV4dC1tZW51LWl0ZW0gaWNvbj1cImZpbGVfY29weVwiIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLkNPUFlfUk9XXCIgKGV4ZWN1dGUpPVwiY29weVJvdygkZXZlbnQpXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgICAgPG8tY29udGV4dC1tZW51LWl0ZW0gbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuQ09QWV9BTExcIiBpY29uPVwiZmlsZV9jb3B5XCIgKGV4ZWN1dGUpPVwiY29weUFsbCgpXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgICAgPG8tY29udGV4dC1tZW51LWl0ZW0gbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuQ09QWV9TRUxFQ1RJT05cIiBpY29uPVwiZmlsZV9jb3B5XCIgKGV4ZWN1dGUpPVwiY29weVNlbGVjdGlvbigpXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgIDwvby1jb250ZXh0LW1lbnUtZ3JvdXA+XG4gICAgPG8tY29udGV4dC1tZW51LXNlcGFyYXRvciBbdmlzaWJsZV09XCJpc1Zpc2libGVTZWxlY3RBbGwgfCBhc3luY1wiPjwvby1jb250ZXh0LW1lbnUtc2VwYXJhdG9yPlxuICAgIDxvLWNvbnRleHQtbWVudS1pdGVtIGF0dHI9XCJzZWxlY3QtYWxsXCIgW2xhYmVsXT1cInRhYmxlLmlzQWxsU2VsZWN0ZWQoKSA/ICdUQUJMRV9DT05URVhUX01FTlUuREVTRUxFQ1RfQUxMJzogJ1RBQkxFX0NPTlRFWFRfTUVOVS5TRUxFQ1RfQUxMJ1wiXG4gICAgICBpY29uPVwic2VsZWN0X2FsbFwiIChleGVjdXRlKT1cInRhYmxlLmlzQWxsU2VsZWN0ZWQoKSA/IHVuU2VsZWN0QWxsKCkgOiBzZWxlY3RBbGwoKVwiIFt2aXNpYmxlXT1cImlzVmlzaWJsZVNlbGVjdEFsbCB8IGFzeW5jXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuXG4gICAgPCEtLSBHUk9VUCBCWSAtLT5cbiAgICA8by1jb250ZXh0LW1lbnUtc2VwYXJhdG9yIFt2aXNpYmxlXT1cImlzVmlzaWJsZUdyb3VwQnlSb3cgfCBhc3luY1wiPjwvby1jb250ZXh0LW1lbnUtc2VwYXJhdG9yPlxuICAgIDxvLWNvbnRleHQtbWVudS1ncm91cCBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5HUk9VUF9CWVwiIGljb249XCJmb3JtYXRfaW5kZW50X2luY3JlYXNlXCIgdHlwZT1cImdyb3VwXCIgW3Zpc2libGVdPVwiaXNWaXNpYmxlR3JvdXBCeVJvdyB8IGFzeW5jXCI+XG4gICAgICA8by1jb250ZXh0LW1lbnUtaXRlbSAqbmdJZj1cImlzRGF0ZUNvbHVtbiB8IGFzeW5jXCIgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuR1JPVVBfQllfWUVBUlwiIChleGVjdXRlKT1cImdyb3VwQnlDb2x1bW4oJ1lFQVInKVwiXG4gICAgICAgIGljb249XCJmb3JtYXRfaW5kZW50X2luY3JlYXNlXCIgdHlwZT1cImdyb3VwXCIgW3Zpc2libGVdPVwiaXNWaXNpYmxlR3JvdXBCeVJvdyB8IGFzeW5jXCIgW2VuYWJsZWRdPVwiaXNFbmFibGVkR3JvdXBCeUNvbHVtbiB8IGFzeW5jXCI+XG4gICAgICA8L28tY29udGV4dC1tZW51LWl0ZW0+XG4gICAgICA8by1jb250ZXh0LW1lbnUtaXRlbSAqbmdJZj1cImlzRGF0ZUNvbHVtbiB8IGFzeW5jXCIgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuR1JPVVBfQllfTU9OVEhcIiAoZXhlY3V0ZSk9XCJncm91cEJ5Q29sdW1uKCdNT05USCcpXCJcbiAgICAgICAgaWNvbj1cImZvcm1hdF9pbmRlbnRfaW5jcmVhc2VcIiB0eXBlPVwiZ3JvdXBcIiBbdmlzaWJsZV09XCJpc1Zpc2libGVHcm91cEJ5Um93IHwgYXN5bmNcIiBbZW5hYmxlZF09XCJpc0VuYWJsZWRHcm91cEJ5Q29sdW1uIHwgYXN5bmNcIj5cbiAgICAgIDwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICAgIDxvLWNvbnRleHQtbWVudS1pdGVtICpuZ0lmPVwiaXNEYXRlQ29sdW1uIHwgYXN5bmNcIiBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5HUk9VUF9CWV9ZRUFSX01PTlRIXCIgaWNvbj1cImZvcm1hdF9pbmRlbnRfaW5jcmVhc2VcIiB0eXBlPVwiZ3JvdXBcIlxuICAgICAgICAoZXhlY3V0ZSk9XCJncm91cEJ5Q29sdW1uKCdZRUFSX01PTlRIJylcIiBbdmlzaWJsZV09XCJpc1Zpc2libGVHcm91cEJ5Um93IHwgYXN5bmNcIiBbZW5hYmxlZF09XCJpc0VuYWJsZWRHcm91cEJ5Q29sdW1uIHwgYXN5bmNcIj5cbiAgICAgIDwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICAgIDxvLWNvbnRleHQtbWVudS1pdGVtICpuZ0lmPVwiaXNEYXRlQ29sdW1uIHwgYXN5bmNcIiBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5HUk9VUF9CWV9ZRUFSX01PTlRIX0RBWVwiIGljb249XCJmb3JtYXRfaW5kZW50X2luY3JlYXNlXCIgdHlwZT1cImdyb3VwXCJcbiAgICAgICAgKGV4ZWN1dGUpPVwiZ3JvdXBCeUNvbHVtbignWUVBUl9NT05USF9EQVknKVwiIFt2aXNpYmxlXT1cImlzVmlzaWJsZUdyb3VwQnlSb3cgfCBhc3luY1wiIFtlbmFibGVkXT1cImlzRW5hYmxlZEdyb3VwQnlDb2x1bW4gfCBhc3luY1wiPlxuICAgICAgPC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgICAgPG8tY29udGV4dC1tZW51LWl0ZW0gKm5nSWY9XCIhKGlzRGF0ZUNvbHVtbiB8IGFzeW5jKVwiIGljb249XCJmb3JtYXRfaW5kZW50X2luY3JlYXNlXCIgW2xhYmVsXT1cImxhYmVsR3JvdXBCeUNvbHVtblwiIChleGVjdXRlKT1cImdyb3VwQnlDb2x1bW4oKVwiXG4gICAgICAgIFtlbmFibGVkXT1cImlzRW5hYmxlZEdyb3VwQnlDb2x1bW4gfCBhc3luY1wiPjwvby1jb250ZXh0LW1lbnUtaXRlbT5cbiAgICAgIDxvLWNvbnRleHQtbWVudS1pdGVtICpuZ0lmPVwiaXNFbmFibGVkVW5Hcm91cEJ5Q29sdW1uIHwgYXN5bmNcIiBpY29uPVwiZm9ybWF0X2luZGVudF9kZWNyZWFzZVwiIFtsYWJlbF09XCJsYWJlbFVuR3JvdXBCeUNvbHVtblwiXG4gICAgICAgIChleGVjdXRlKT1cInVuR3JvdXBCeUNvbHVtbigpXCIgW2VuYWJsZWRdPVwiaXNFbmFibGVkVW5Hcm91cEJ5Q29sdW1uIHwgYXN5bmNcIj48L28tY29udGV4dC1tZW51LWl0ZW0+XG4gICAgICA8by1jb250ZXh0LW1lbnUtaXRlbSBpY29uPVwiZm9ybWF0X2xpbmVfc3BhY2luZ1wiIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLlVOR1JPVVBfQUxMQ09MVU1OU1wiIChleGVjdXRlKT1cInVuR3JvdXBBbGwoKVwiXG4gICAgICAgIFtlbmFibGVkXT1cImlzRW5hYmxlZFVuR3JvdXBBbGxDb2x1bW4gfCBhc3luY1wiPlxuICAgICAgPC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgIDwvby1jb250ZXh0LW1lbnUtZ3JvdXA+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gR1JPVVAgQlkgSEVBREVSIENFTEwgQUdHUkVHQVRFIEZVTkNUSU9OIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNHcm91cGFibGVDZWxsIHwgYXN5bmNcIj5cbiAgICA8by1jb250ZXh0LW1lbnUtZ3JvdXAgbGFiZWw9XCJUQUJMRV9DT05URVhUX01FTlUuR1JPVVBfQlkuQUdHUkVHQVRFX0ZVTkNUSU9OXCIgaWNvbj1cImZvcm1hdF9pbmRlbnRfaW5jcmVhc2VcIiB0eXBlPVwiZ3JvdXBcIj5cbiAgICAgIDxvLWNvbnRleHQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBhZ2dyZWdhdGVGbiBvZiBhdmFpbGFibGVDb2x1bW5BZ2dyZWdhdGVzXCIgbGFiZWw9XCJ7eyAnQUdHUkVHQVRFX05BTUUuJyArIGFnZ3JlZ2F0ZUZuIH19XCJcbiAgICAgICAgKGV4ZWN1dGUpPVwiY2hhbmdlQWdncmVnYXRlRnVuY3Rpb24oJGV2ZW50LCBhZ2dyZWdhdGVGbilcIj48L28tY29udGV4dC1tZW51LWl0ZW0+XG4gICAgPC9vLWNvbnRleHQtbWVudS1ncm91cD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGFibGVHcm91cGVkUm93IHwgYXN5bmNcIj5cbiAgICA8by1jb250ZXh0LW1lbnUtaXRlbSBpY29uPVwidW5mb2xkX21vcmVcIiBsYWJlbD1cIlRBQkxFX0NPTlRFWFRfTUVOVS5FWFBBTkRfQUxMX0dST1VQU1wiIChleGVjdXRlKT1cImV4cGFuZFJvd0dyb3Vwc1NhbWVMZXZlbCgpXCI+PC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICAgIDxvLWNvbnRleHQtbWVudS1pdGVtIGljb249XCJ1bmZvbGRfbGVzc1wiIGxhYmVsPVwiVEFCTEVfQ09OVEVYVF9NRU5VLkNPTExBUFNFX0FMTF9HUk9VUFNcIiAoZXhlY3V0ZSk9XCJjb2xsYXBzZVJvd0dyb3Vwc1NhbWVMZXZlbCgpXCI+XG4gICAgPC9vLWNvbnRleHQtbWVudS1pdGVtPlxuICA8L25nLWNvbnRhaW5lcj5cblxuPC9vLWNvbnRleHQtbWVudT5cbiJdfQ==