@po-ui/ng-components 6.11.0 → 6.12.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 (51) hide show
  1. package/esm2020/lib/components/po-button/po-button-base.component.mjs +31 -8
  2. package/esm2020/lib/components/po-button/po-button.component.mjs +4 -4
  3. package/esm2020/lib/components/po-field/index.mjs +2 -1
  4. package/esm2020/lib/components/po-field/po-checkbox/po-checkbox.module.mjs +20 -0
  5. package/esm2020/lib/components/po-field/po-field.module.mjs +15 -13
  6. package/esm2020/lib/components/po-menu/po-menu-base.component.mjs +46 -6
  7. package/esm2020/lib/components/po-menu/po-menu.component.mjs +5 -5
  8. package/esm2020/lib/components/po-table/po-table-base.component.mjs +6 -2
  9. package/esm2020/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.mjs +17 -3
  10. package/esm2020/lib/components/po-table/po-table-detail/po-table-detail.component.mjs +40 -40
  11. package/esm2020/lib/components/po-table/po-table.component.mjs +441 -438
  12. package/esm2020/lib/components/po-table/po-table.module.mjs +12 -4
  13. package/esm2020/lib/services/po-notification/po-notification-base.service.mjs +6 -4
  14. package/esm2020/lib/services/po-notification/po-notification.interface.mjs +1 -1
  15. package/esm2020/lib/services/po-notification/po-notification.module.mjs +6 -4
  16. package/esm2020/lib/services/po-notification/po-notification.service.mjs +3 -2
  17. package/esm2020/lib/services/po-notification/po-toaster/po-toaster.component.mjs +49 -32
  18. package/esm2020/lib/services/po-notification/po-toaster/po-toaster.literals.mjs +15 -0
  19. package/fesm2015/po-ui-ng-components.mjs +968 -840
  20. package/fesm2015/po-ui-ng-components.mjs.map +1 -1
  21. package/fesm2020/po-ui-ng-components.mjs +960 -825
  22. package/fesm2020/po-ui-ng-components.mjs.map +1 -1
  23. package/lib/components/po-button/po-button-base.component.d.ts +16 -6
  24. package/lib/components/po-field/index.d.ts +1 -0
  25. package/lib/components/po-field/po-checkbox/po-checkbox.module.d.ts +9 -0
  26. package/lib/components/po-field/po-field.module.d.ts +54 -54
  27. package/lib/components/po-menu/po-menu-base.component.d.ts +19 -1
  28. package/lib/components/po-table/po-table-base.component.d.ts +2 -0
  29. package/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.d.ts +3 -0
  30. package/lib/components/po-table/po-table.component.d.ts +2 -0
  31. package/lib/components/po-table/po-table.module.d.ts +14 -12
  32. package/lib/services/po-notification/po-notification-base.service.d.ts +4 -2
  33. package/lib/services/po-notification/po-notification.interface.d.ts +5 -1
  34. package/lib/services/po-notification/po-notification.module.d.ts +3 -1
  35. package/lib/services/po-notification/po-toaster/po-toaster.component.d.ts +5 -1
  36. package/lib/services/po-notification/po-toaster/po-toaster.literals.d.ts +14 -0
  37. package/package.json +4 -4
  38. package/po-ui-ng-components-6.12.0.tgz +0 -0
  39. package/schematics/ng-add/index.js +1 -1
  40. package/schematics/ng-add/index.spec.js +5 -5
  41. package/schematics/ng-generate/po-page-default/index.spec.js +12 -12
  42. package/schematics/ng-generate/po-page-detail/index.spec.js +12 -12
  43. package/schematics/ng-generate/po-page-edit/index.spec.js +12 -12
  44. package/schematics/ng-generate/po-page-list/index.spec.js +12 -12
  45. package/schematics/ng-generate/sidemenu/index.spec.js +4 -4
  46. package/schematics/ng-update/v2/index.js +1 -1
  47. package/schematics/ng-update/v3/index.js +1 -1
  48. package/schematics/ng-update/v4/index.js +1 -1
  49. package/schematics/ng-update/v5/index.js +1 -1
  50. package/schematics/ng-update/v6/index.js +1 -1
  51. package/po-ui-ng-components-6.11.0.tgz +0 -0
@@ -356,6 +356,8 @@ export class PoTableBaseComponent {
356
356
  * @description
357
357
  *
358
358
  * Define a altura da tabela em *pixels* e fixa o cabeçalho.
359
+ *
360
+ * Ao utilizar essa propriedade será inserido o `virtual-scroll` na tabela melhorando a performance.
359
361
  */
360
362
  set height(height) {
361
363
  this._height = height;
@@ -776,7 +778,9 @@ export class PoTableBaseComponent {
776
778
  this.subtitleColumns = this.getSubtitleColumns();
777
779
  }
778
780
  sortArray(column, ascending) {
779
- this.items.sort((leftSide, rightSide) => sortValues(leftSide[column.property], rightSide[column.property], ascending));
781
+ const itemsList = [...this.items];
782
+ itemsList.sort((leftSide, rightSide) => sortValues(leftSide[column.property], rightSide[column.property], ascending));
783
+ this.items = itemsList;
780
784
  }
781
785
  unselectOtherRows(rows, row) {
782
786
  rows.forEach(item => {
@@ -950,4 +954,4 @@ __decorate([
950
954
  type: Input,
951
955
  args: ['p-service-api']
952
956
  }] }); })();
953
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tdGFibGUvcG8tdGFibGUtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBS1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFLbEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQU9oRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxRQUFRLENBQUM7QUFFaEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUc7SUFDcEMsRUFBRSxFQUFtQjtRQUNuQixTQUFTLEVBQUUseUJBQXlCO1FBQ3BDLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLGVBQWUsRUFBRSxtQkFBbUI7UUFDcEMsV0FBVyxFQUFFLFNBQVM7UUFDdEIsWUFBWSxFQUFFLGdCQUFnQjtRQUM5QixtQkFBbUIsRUFBRSx1QkFBdUI7UUFDNUMsZ0JBQWdCLEVBQUUsbUJBQW1CO1FBQ3JDLGNBQWMsRUFBRSxpQkFBaUI7S0FDbEM7SUFDRCxFQUFFLEVBQW1CO1FBQ25CLFNBQVMsRUFBRSx1QkFBdUI7UUFDbEMsTUFBTSxFQUFFLHNCQUFzQjtRQUM5QixlQUFlLEVBQUUsdUJBQXVC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LGlCQUFpQjtZQWFBLFVBQVU7a0JBQWpDLEtBQUs7bUJBQUMsZUFBZTtZQVFJLFdBQVc7a0JBQXBDLE1BQU07bUJBQUMsZ0JBQWdCO1lBUUksYUFBYTtrQkFBeEMsTUFBTTttQkFBQyxrQkFBa0I7WUFXSCxTQUFTO2tCQUEvQixNQUFNO21CQUFDLGFBQWE7WUFXQyxRQUFRO2tCQUE3QixNQUFNO21CQUFDLFlBQVk7WUFTRSxRQUFRO2tCQUE3QixNQUFNO21CQUFDLFlBQVk7WUFlRyxRQUFRO2tCQUE5QixNQUFNO21CQUFDLGFBQWE7WUFjQSxNQUFNO2tCQUExQixNQUFNO21CQUFDLFdBQVc7WUFRSyxVQUFVO2tCQUFqQyxNQUFNO21CQUFDLGNBQWM7WUFXYyxvQkFBb0I7a0JBQXZELE1BQU07bUJBQUMsMEJBQTBCO1lBV0Usb0JBQW9CO2tCQUF2RCxNQUFNO21CQUFDLDBCQUEwQjtZQW1DWixLQUFLO2tCQUExQixLQUFLO21CQUFDLFNBQVM7WUE0QlEsT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBZ0NRLFNBQVM7a0JBQWxDLEtBQUs7bUJBQUMsYUFBYTtZQWVHLE1BQU07a0JBQTVCLEtBQUs7bUJBQUMsVUFBVTtZQWtCVyxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUFnREcsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBd0JLLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQXVCTSxPQUFPO2tCQUE5QixLQUFLO21CQUFDLFdBQVc7WUF3QlMsVUFBVTtrQkFBcEMsS0FBSzttQkFBQyxjQUFjO1lBc0JXLGNBQWM7a0JBQTdDLEtBQUs7bUJBQUMsbUJBQW1CO1lBa0JlLHNCQUFzQjtrQkFBOUQsS0FBSzttQkFBQyw0QkFBNEI7WUFrQ1AsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIERpcmVjdGl2ZSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgY2FwaXRhbGl6ZUZpcnN0TGV0dGVyLCBjb252ZXJ0VG9Cb29sZWFuLCBpc1R5cGVvZiwgc29ydFZhbHVlcyB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9EYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWRhdGUvcG8tZGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBwb0xvY2FsZURlZmF1bHQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5jb25zdGFudCc7XG5cbmltcG9ydCB7IFBvVGFibGVBY3Rpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlQ29sdW1uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtblNvcnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtY29sdW1uLXNvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW5Tb3J0VHlwZSB9IGZyb20gJy4vZW51bXMvcG8tdGFibGUtY29sdW1uLXNvcnQtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBvVGFibGVMaXRlcmFscyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10YWJsZS1saXRlcmFscy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW5wdXRCb29sZWFuIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBQb1RhYmxlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcG8tdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBQb1RhYmxlUmVzcG9uc2VBcGkgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtcmVzcG9uc2UtYXBpLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlRmlsdGVyZWRJdGVtc1BhcmFtcyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10YWJsZS1maWx0ZXJlZC1pdGVtcy1wYXJhbXMuaW50ZXJmYWNlJztcblxuZXhwb3J0IHR5cGUgUXVlcnlQYXJhbXNUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcblxuZXhwb3J0IGNvbnN0IHBvVGFibGVDb250YWluZXIgPSBbJ2JvcmRlcicsICdzaGFkb3cnXTtcbmV4cG9ydCBjb25zdCBwb1RhYmxlQ29udGFpbmVyRGVmYXVsdCA9ICdib3JkZXInO1xuXG5leHBvcnQgY29uc3QgcG9UYWJsZUxpdGVyYWxzRGVmYXVsdCA9IHtcbiAgZW46IDxQb1RhYmxlTGl0ZXJhbHM+e1xuICAgIG5vQ29sdW1uczogJ0NvbHVtbnMgYXJlIG5vdCBkZWZpbmVkJyxcbiAgICBub0RhdGE6ICdObyBkYXRhIGZvdW5kJyxcbiAgICBub1Zpc2libGVDb2x1bW46ICdObyB2aXNpYmxlIGNvbHVtbicsXG4gICAgbG9hZGluZ0RhdGE6ICdMb2FkaW5nJyxcbiAgICBsb2FkTW9yZURhdGE6ICdMb2FkIG1vcmUgZGF0YScsXG4gICAgc2VlQ29tcGxldGVTdWJ0aXRsZTogJ1NlZSBjb21wbGV0ZSBzdWJ0aXRsZScsXG4gICAgY29tcGxldGVTdWJ0aXRsZTogJ0NvbXBsZXRlIHN1YnRpdGxlJyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ0NvbHVtbnMgbWFuYWdlcidcbiAgfSxcbiAgZXM6IDxQb1RhYmxlTGl0ZXJhbHM+e1xuICAgIG5vQ29sdW1uczogJ0NvbHVtbmFzIG5vIGRlZmluaWRhcycsXG4gICAgbm9EYXRhOiAnRGF0b3Mgbm8gZW5jb250cmFkb3MnLFxuICAgIG5vVmlzaWJsZUNvbHVtbjogJ1NpbiBjb2x1bW5hcyB2aXNpYmxlcycsXG4gICAgbG9hZGluZ0RhdGE6ICdDYXJnYW5kbyBkYXRvcycsXG4gICAgbG9hZE1vcmVEYXRhOiAnQ2FyZ2FyIG3DoXMgcmVzdWx0YWRvcycsXG4gICAgc2VlQ29tcGxldGVTdWJ0aXRsZTogJ1ZlciBzdWJ0aXR1bG8gY29tcGxldG8nLFxuICAgIGNvbXBsZXRlU3VidGl0bGU6ICdTdWJ0aXR1bG8gY29tcGxldG8nLFxuICAgIGNvbHVtbnNNYW5hZ2VyOiAnR2VyZW50ZSBkZSBjb2x1bW5hJ1xuICB9LFxuICBwdDogPFBvVGFibGVMaXRlcmFscz57XG4gICAgbm9Db2x1bW5zOiAnTmVuaHVtYSBkZWZpbmnDp8OjbyBkZSBjb2x1bmFzJyxcbiAgICBub0RhdGE6ICdOZW5odW0gZGFkbyBlbmNvbnRyYWRvJyxcbiAgICBub1Zpc2libGVDb2x1bW46ICdOZW5odW1hIGNvbHVuYSB2aXPDrXZlbCcsXG4gICAgbG9hZGluZ0RhdGE6ICdDYXJyZWdhbmRvJyxcbiAgICBsb2FkTW9yZURhdGE6ICdDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3MnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdWZXIgbGVnZW5kYSBjb21wbGV0YScsXG4gICAgY29tcGxldGVTdWJ0aXRsZTogJ0xlZ2VuZGEgY29tcGxldGEnLFxuICAgIGNvbHVtbnNNYW5hZ2VyOiAnR2VyZW5jaWFkb3IgZGUgY29sdW5hcydcbiAgfSxcbiAgcnU6IDxQb1RhYmxlTGl0ZXJhbHM+e1xuICAgIG5vQ29sdW1uczogJ9Cd0LXRgiDQvtC/0YDQtdC00LXQu9C10L3QuNGPINGB0YLQvtC70LHRhtCwJyxcbiAgICBub0RhdGE6ICfQlNCw0L3QvdGL0LUg0L3QtSDQvdCw0LnQtNC10L3RiycsXG4gICAgbm9WaXNpYmxlQ29sdW1uOiAn0L3QtdGCINCy0LjQtNC40LzRi9GFINGB0YLQvtC70LHRhtC+0LInLFxuICAgIGxvYWRpbmdEYXRhOiAn0L/QvtCz0YDRg9C30LrQsCcsXG4gICAgbG9hZE1vcmVEYXRhOiAn0LfQsNCz0YDRg9C30LrQsCcsXG4gICAgc2VlQ29tcGxldGVTdWJ0aXRsZTogJ9Cf0L7RgdC80L7RgtGA0LXRgtGMINC/0L7Qu9C90YvQuSDRgdGD0LHRgtC40YLRgCcsXG4gICAgY29tcGxldGVTdWJ0aXRsZTogJ9Cf0L7Qu9C90YvQuSDQt9Cw0LPQvtC70L7QstC+0LonLFxuICAgIGNvbHVtbnNNYW5hZ2VyOiAn0LzQtdC90LXQtNC20LXRgCDQutC+0LvQvtC90L7QuidcbiAgfVxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBFc3RlIGNvbXBvbmVudGUgZGUgdGFiZWxhIMOpIHV0aWxpemFkbyBwYXJhIGV4aWJpw6fDo28gZGUgZGFkb3MgY29tIGRpZmVyZW50ZXMgdGlwb3MgY29tbyBwb3IgZXhlbXBsbyB0ZXh0b3MsIGRhdGEsIGhvcmFzIGUgbsO6bWVyb3MgY29tXG4gKiBmb3JtYXRvIHBlcnNvbmFsaXphZG8uXG4gKlxuICogVGFtYsOpbSDDqSBwb3NzaXZlbCBjcmlhciB0YWJlbGFzIGNvbSBvcmRlbmHDp8OjbyBkZSBkYWRvcywgbGluaGFzIGNvbSBkZXRhbGhlcywgY29sdW5hIHBhcmEgc2VsZcOnw6NvIGRlIGxpbmhhcywgY29sdW5hIGNvbSBhw6fDtWVzIGUgdGFtYsOpbVxuICogY2FycmVnYW1lbnRvIHBvciBkZW1hbmRhIGF0cmF2w6lzIGRvIGJvdMOjbyAqKkNhcnJlZ2FyIG1haXMgcmVzdWx0YWRvcyoqLlxuICpcbiAqID4gQXMgbGluaGFzIGRlIGRldGFsaGVzIHBvZGVtIHRhbWLDqW0gc2VyIGN1c3RvbWl6YWRhcyBhdHJhdsOpcyBkbyBbYHAtdGFibGUtcm93LXRlbXBsYXRlYF0oL2RvY3VtZW50YXRpb24vcG8tdGFibGUtcm93LXRlbXBsYXRlKS5cbiAqXG4gKiA+IEFzIGNvbHVuYXMgcG9kZW0gc2VyIGN1c3RvbWl6YWRhcyBhdHJhdsOpcyBkb3MgdGVtcGxhdGVzIFtgcC10YWJsZS1jb2x1bW4tdGVtcGxhdGVgXSgvZG9jdW1lbnRhdGlvbi9wby10YWJsZS1jb2x1bW4tdGVtcGxhdGUpXG4gKiBlIFtgcC10YWJsZS1jZWxsLXRlbXBsYXRlYF0oL2RvY3VtZW50YXRpb24vcG8tdGFibGUtY2VsbC10ZW1wbGF0ZSkuXG4gKlxuICogTyBjb21wb25lbnRlIHBlcm1pdGUgZ2VyZW5jaWFyIGEgZXhpYmnDp8OjbyBkYXMgY29sdW5hcyBkaW5hbWljYW1lbnRlLiBFc3RhIGZ1bmNpb25hbGlkYWRlIHBvZGUgc2VyIGFjZXNzYWRhIGF0cmF2w6lzIGRvIMOtY29uZSBkZSBlbmdyZW5hZ2VtXG4gKiBubyBjYW50byBzdXBlcmlvciBkaXJlaXRvIGRvIGNhYmXDp2FsaG8gZGEgdGFiZWxhLlxuICpcbiAqIENhc28gYSBsYXJndXJhIGRlIHRvZGFzIGFzIGNvbHVuYXMgZm9yZW0gZGVmaW5pZGFzIGUgbyB0b3RhbCB1bHRyYXBhc3NhciBvIHRhbWFuaG8gdGFiZWxhLCBzZXLDoSBleGliaWRvIHVtICpzY3JvbGwqIG5hIGhvcml6b250YWwgcGFyYSBhXG4gKiBjb21wbGV0YSB2aXN1YWxpemHDp8OjbyBkb3MgZGFkb3MuXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBvVGFibGVCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBTZSB2ZXJkYWRlaXJvLCBoYWJpbGl0YSBhIHF1ZWJyYSBkZSB0ZXh0byBhbyB0cmFuc2JvcmRhLWxvIGRlbnRybyBkZSBxdWFscXVlciBjb2x1bmEuXG4gICAqID4gUXVhbmRvIG9jb3JyZXIgYSBxdWVicmEgZGUgdGV4dG8sIGFvIHBhc3NhciBvIG1vdXNlIG5vIGNvbnRlw7pkbyBkYSBjw6lsdWxhLFxuICAgKiBvIG1lc21vIHNlcsOhIGV4aWJpZG8gYXRyYXbDqXMgZG8gW2Bwby10b29sdGlwYF0oL2RvY3VtZW50YXRpb24vcG8tdG9vbHRpcCkuXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS10ZXh0LW92ZXJmbG93JykgQElucHV0Qm9vbGVhbigpIGhpZGVUZXh0T3ZlcmZsb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIHF1ZSBvIGdlcmVuY2lhZG9yIGRlIGNvbHVuYXMsIHJlc3BvbnPDoXZlbCBwZWxhIGRlZmluacOnw6NvIGRlIHF1YWlzIGNvbHVuYXMgc2Vyw6NvIGV4aWJpZGFzLCBzZWphIGVzY29uZGlkby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWhpZGUtY29sdW1ucy1tYW5hZ2VyJykgQElucHV0Qm9vbGVhbigpIGhpZGVDb2x1bW5zTWFuYWdlcj86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIGZlY2hhciB1bSBkZXRhbGhlIG91IHJvdyB0ZW1wbGF0ZSBhdXRvbWF0aWNhbWVudGUsIGFvIGFicmlyIG91dHJvIGl0ZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1hdXRvLWNvbGxhcHNlJykgQElucHV0Qm9vbGVhbigpIGF1dG9Db2xsYXBzZT86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIHF1ZSBzZWphIGFkaWNpb25hZG8gbyBlc3RhZG8gZGUgY2FycmVnYW1lbnRvIG5vIGJvdMOjbyBcIkNhcnJlZ2FyIG1haXMgcmVzdWx0YWRvc1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtbG9hZGluZy1zaG93LW1vcmUnKSBASW5wdXRCb29sZWFuKCkgbG9hZGluZ1Nob3dNb3JlPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIGVtIHRvZGFzIGFzIGNvbHVuYXMgYSBvcMOnw6NvIGRlIG9yZGVuYcOnw6NvIGRlIGRhZG9zLiBDYXNvIGEgY29sdW5hIHNlamEgZG8gdGlwbyAnZGF0YScgb3UgJ2RhdGVUaW1lJyBhXG4gICAqIG1lc21hIGRldmUgcmVzcGVpdGFyIG9zIHRpcG9zIGRlIGVudHJhZGEgZGVmaW5pZG9zIHBhcmEgcXVlIHNlamFtIG9yZGVuYWRhcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXNvcnQnKSBASW5wdXRCb29sZWFuKCkgc29ydDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybywgdG9ybmEgaGFiaWxpdGFkbyBvIGJvdMOjbyBcIkNhcnJlZ2FyIG1haXMgcmVzdWx0YWRvc1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atc2hvdy1tb3JlLWRpc2FibGVkJykgQElucHV0Qm9vbGVhbigpIHNob3dNb3JlRGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBvdSBkZXNhYmlsaXRhIG8gZXN0aWxvIGxpc3RyYWRvIGRhIHRhYmVsYSAoYHN0cmlwZWRgKS5cbiAgICogPiBSZWNvbWVuZGFkbyBwYXJhIHRhYmVsYXMgY29tIG1haW9yIG7Dum1lcm8gZGUgZGFkb3MsIGZhY2lsaXRhbmRvIGEgc3VhIHZpc3VhbGl6YcOnw6NvIG5hIHRhYmVsYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXN0cmlwZWQnKSBASW5wdXRCb29sZWFuKCkgc3RyaXBlZD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEVzY29uZGUgbyAqY2hlY2tib3gqIHBhcmEgc2VsZcOnw6NvIGRlIHRvZGFzIGFzIGxpbmhhcy5cbiAgICpcbiAgICogPiBTZW1wcmUgcmVjZWJlcsOhICp0cnVlKiBjYXNvIGEgc2VsZcOnw6NvIGRlIGFwZW5hcyB1bWEgbGluaGEgZXN0ZWphIGF0aXZhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaGlkZS1zZWxlY3QtYWxsJykgQElucHV0Qm9vbGVhbigpIGhpZGVTZWxlY3RBbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBxdWUgc29tZW50ZSB1bWEgbGluaGEgZGEgdGFiZWxhIHBvZGUgc2VyIHNlbGVjaW9uYWRhLlxuICAgKlxuICAgKiA+IEVzdGEgZGVmaW5pw6fDo28gbsOjbyBzZSBhcGxpY2EgYW9zIGl0ZW5zIGZpbGhvcywgb3MgbWVzbW9zIHBvc3N1ZW0gY29tcG9ydGFtZW50byBpbmRlcGVuZGVudGUgZG8gaXRlbSBwYWkuXG4gICAqL1xuICBASW5wdXQoJ3Atc2luZ2xlLXNlbGVjdCcpIEBJbnB1dEJvb2xlYW4oKSBzaW5nbGVTZWxlY3Q/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBhIGNvbHVuYSBkZSBhw6fDtWVzIGZpY2Fyw6Egbm8gbGFkbyBkaXJlaXRvIGRhIHRhYmVsYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWFjdGlvbnMtcmlnaHQnKSBASW5wdXRCb29sZWFuKCkgYWN0aW9uUmlnaHQ/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHVtYSBxdWFudGlkYWRlIG3DoXhpbWEgZGUgY29sdW5hcyBxdWUgc2Vyw6NvIGV4aWJpZGFzIG5hIHRhYmVsYS5cbiAgICpcbiAgICogUXVhbmRvIGNoZWdhciBubyB2YWxvciBpbmZvcm1hZG8sIGFzIGNvbHVuYXMgcXVlIG7Do28gZXN0aXZlcmVtIHNlbGVjaW9uYWRhcyBmaWNhcsOjb1xuICAgKiBkZXNhYmlsaXRhZGFzIGUgY2FzbyBob3V2ZXIgbWFpcyBjb2x1bmFzIHZpc8OtdmVpcyBkbyBxdWUgbyBwZXJtaXRpZG8sIGFzIGV4Y2VkZW50ZXNcbiAgICogc2Vyw6NvIGlnbm9yYWRhcyBwb3Igb3JkZW0gZGUgcG9zacOnw6NvLlxuICAgKi9cbiAgQElucHV0KCdwLW1heC1jb2x1bW5zJykgbWF4Q29sdW1ucz86IG51bWJlcjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZXhlY3V0YWRvIHF1YW5kbyB0b2RhcyBhcyBsaW5oYXMgc8OjbyBzZWxlY2lvbmFkYXMgcG9yIG1laW8gZG8gKmNoZWNrYm94KiBxdWUgc2VsZWNpb25hIHRvZGFzIGFzIGxpbmhhcy5cbiAgICovXG4gIEBPdXRwdXQoJ3AtYWxsLXNlbGVjdGVkJykgYWxsU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBxdWFuZG8gYSBzZWxlw6fDo28gZGFzIGxpbmhhcyDDqSBkZXNtYXJjYWRhIHBvciBtZWlvIGRvICpjaGVja2JveCogcXVlIHNlbGVjaW9uYSB0b2RhcyBhcyBsaW5oYXMuXG4gICAqL1xuICBAT3V0cHV0KCdwLWFsbC11bnNlbGVjdGVkJykgYWxsVW5zZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFvIGNvbGFwc2FyIHVtYSBsaW5oYSBkbyBgcG8tdGFibGVgLlxuICAgKlxuICAgKiA+IENvbW8gcGFyw6JtZXRybyBvIGNvbXBvbmVudGUgZW52aWEgbyBpdGVtIGNvbGFwc2Fkby5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY29sbGFwc2VkJykgY29sbGFwc2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYW8gZXhwYW5kaXIgdW1hIGxpbmhhIGRvIGBwby10YWJsZWAuXG4gICAqXG4gICAqID4gQ29tbyBwYXLDom1ldHJvIG8gY29tcG9uZW50ZSBlbnZpYSBvIGl0ZW0gZXhwYW5kaWRvLlxuICAgKi9cbiAgQE91dHB1dCgncC1leHBhbmRlZCcpIGV4cGFuZGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYW8gc2VsZWNpb25hciB1bWEgbGluaGEgZG8gYHBvLXRhYmxlYC5cbiAgICovXG4gIEBPdXRwdXQoJ3Atc2VsZWN0ZWQnKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBSZWNlYmUgdW1hIGHDp8OjbyBkZSBjbGlxdWUgcGFyYSBvIGJvdMOjbyBcIkNhcnJlZ2FyIG1haXMgcmVzdWx0YWRvc1wiLCBjYXNvIG5lbmh1bWEgYcOnw6NvIGZvciBkZWZpbmlkYSBvIG1lc21vXG4gICAqIG7Do28gw6kgdmlzw612ZWwuXG4gICAqXG4gICAqIFJlY2ViZSB1bSBvYmpldG8gYHsgY29sdW1uLCB0eXBlIH1gIG9uZGU6XG4gICAqXG4gICAqIC0gY29sdW1uIChgUG9UYWJsZUNvbHVtbmApOiBvYmpldG8gZGEgY29sdW5hIHF1ZSBlc3TDoSBvcmRlbmFkYS5cbiAgICogLSB0eXBlIChgUG9UYWJsZUNvbHVtblNvcnRUeXBlYCk6IHRpcG8gZGEgb3JkZW5hw6fDo28uXG4gICAqL1xuICBAT3V0cHV0KCdwLXNob3ctbW9yZScpIHNob3dNb3JlOiBFdmVudEVtaXR0ZXI8UG9UYWJsZUNvbHVtblNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb1RhYmxlQ29sdW1uU29ydD4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFvIG9yZGVuYXIgY29sdW5hcyBkYSB0YWJlbGEuXG4gICAqXG4gICAqIFJlY2ViZSB1bSBvYmpldG8gYHsgY29sdW1uLCB0eXBlIH1gIG9uZGU6XG4gICAqXG4gICAqIC0gY29sdW1uIChgUG9UYWJsZUNvbHVtbmApOiBvYmpldG8gZGEgY29sdW5hIHF1ZSBmb2kgY2xpY2FkYS9vcmRlbmFkYS5cbiAgICogLSB0eXBlIChgUG9UYWJsZUNvbHVtblNvcnRUeXBlYCk6IHRpcG8gZGEgb3JkZW5hw6fDo28uXG4gICAqL1xuICBAT3V0cHV0KCdwLXNvcnQtYnknKSBzb3J0Qnk6IEV2ZW50RW1pdHRlcjxQb1RhYmxlQ29sdW1uU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyPFBvVGFibGVDb2x1bW5Tb3J0PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBleGVjdXRhZG8gYW8gZGVzbWFyY2FyIGEgc2VsZcOnw6NvIGRlIHVtYSBsaW5oYSBkbyBgcG8tdGFibGVgLlxuICAgKi9cbiAgQE91dHB1dCgncC11bnNlbGVjdGVkJykgdW5zZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZGlzcGFyYWRvIGFvIGZlY2hhciBvIHBvcG92ZXIgZG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcyBhcMOzcyBhbHRlcmFyIGFzIGNvbHVuYXMgdmlzw612ZWlzLlxuICAgKlxuICAgKiBPIGNvbXBvbmVudGUgZW52aWEgY29tbyBwYXLDom1ldHJvIHVtIGFycmF5IGRlIHN0cmluZyBjb20gYXMgY29sdW5hcyB2aXPDrXZlaXMgYXR1YWxpemFkYXMuXG4gICAqIFBvciBleGVtcGxvOiBbXCJpZENhcmRcIiwgXCJuYW1lXCIsIFwiaGlyZVN0YXR1c1wiLCBcImFnZVwiXS5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY2hhbmdlLXZpc2libGUtY29sdW1ucycpIGNoYW5nZVZpc2libGVDb2x1bW5zID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxzdHJpbmc+PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBkaXNwYXJhZG8gYW8gY2xpY2FyIG5vIGJvdMOjbyBkZSByZXN0YXVyYXIgcGFkcsOjbyBubyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLlxuICAgKlxuICAgKiBPIGNvbXBvbmVudGUgZW52aWEgY29tbyBwYXLDom1ldHJvIHVtIGFycmF5IGRlIHN0cmluZyBjb20gYXMgY29sdW5hcyBjb25maWd1cmFkYXMgaW5pY2lhbG1lbnRlLlxuICAgKiBQb3IgZXhlbXBsbzogW1wiaWRDYXJkXCIsIFwibmFtZVwiLCBcImhpcmVTdGF0dXNcIiwgXCJhZ2VcIl0uXG4gICAqL1xuICBAT3V0cHV0KCdwLXJlc3RvcmUtY29sdW1uLW1hbmFnZXInKSBjb2x1bW5SZXN0b3JlTWFuYWdlciA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U3RyaW5nPj4oKTtcblxuICBhbGxDb2x1bW5zV2lkdGhQaXhlbHM6IGJvb2xlYW47XG4gIGNvbHVtbk1hc3RlckRldGFpbDogUG9UYWJsZUNvbHVtbjtcbiAgaGFzTWFpbkNvbHVtbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbWFpbkNvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+ID0gW107XG4gIHNlbGVjdEFsbCA9IGZhbHNlO1xuICBzb3J0ZWRDb2x1bW4gPSB7IHByb3BlcnR5OiA8UG9UYWJsZUNvbHVtbj5udWxsLCBhc2NlbmRpbmc6IHRydWUgfTtcbiAgc3VidGl0bGVDb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuICBwYWdlID0gMTtcbiAgcGFnZVNpemUgPSAxMDtcbiAgaGFzU2VydmljZT86IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW5pdGlhbENvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+O1xuICBwcml2YXRlIF9hY3Rpb25zPzogQXJyYXk8UG9UYWJsZUFjdGlvbj4gPSBbXTtcbiAgcHJpdmF0ZSBfY29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4gPSBbXTtcbiAgcHJpdmF0ZSBfY29udGFpbmVyPzogc3RyaW5nO1xuICBwcml2YXRlIF9oZWlnaHQ/OiBudW1iZXI7XG4gIHByaXZhdGUgX2hpZGVEZXRhaWw/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2l0ZW1zOiBBcnJheTxQb1RhYmxlQ29sdW1uPjtcbiAgcHJpdmF0ZSBfbGl0ZXJhbHM6IFBvVGFibGVMaXRlcmFscztcbiAgcHJpdmF0ZSBfbG9hZGluZz86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2VsZWN0YWJsZT86IGJvb2xlYW47XG4gIHByaXZhdGUgbGFuZ3VhZ2U6IHN0cmluZyA9IHBvTG9jYWxlRGVmYXVsdDtcbiAgcHJpdmF0ZSBfc2VydmljZUFwaTogc3RyaW5nO1xuICBwcml2YXRlIHBvVGFibGVTZXJ2aWNlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc29ydFN0b3JlOiBQb1RhYmxlQ29sdW1uU29ydDtcbiAgcHJpdmF0ZSBfaW5maW5pdGVTY3JvbGxEaXN0YW5jZT86IG51bWJlciA9IDEwMDtcbiAgcHJpdmF0ZSBfaW5maW5pdGVTY3JvbGw/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMaXN0YSBkZSBpdGVucyBkYSB0YWJlbGEuXG4gICAqID4gU2UgZmFsc28sIHNlcsOhIGluaWNpYWxpemFkbyBjb21vIHVtICphcnJheSogdmF6aW8uXG4gICAqL1xuICBASW5wdXQoJ3AtaXRlbXMnKSBzZXQgaXRlbXMoaXRlbXM6IEFycmF5PGFueT4pIHtcbiAgICB0aGlzLl9pdGVtcyA9IEFycmF5LmlzQXJyYXkoaXRlbXMpID8gaXRlbXMgOiBbXTtcblxuICAgIC8vIHdoZW4gaGF2ZW4ndCBpdGVtcywgc2VsZWN0QWxsIHNob3VsZCBiZSB1bmNoZWNrZWQuXG4gICAgaWYgKCF0aGlzLmhhc0l0ZW1zKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaGFzQ29sdW1ucykge1xuICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5nZXREZWZhdWx0Q29sdW1ucyhpdGVtc1swXSk7XG4gICAgfVxuXG4gICAgLy8gdGltZW91dCBuZWNlc3NhcmlvIHBhcmEgb3MgaXRlbnMgc2VyZW0gcmVmbGV0aWRvcyBuYSB0YWJlbGFcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hlY2tJbmZpbml0ZVNjcm9sbCgpKTtcbiAgfVxuXG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBMaXN0YSBkYXMgY29sdW5hcyBkYSB0YWJlbGEsIGRldmUgcmVjZWJlciB1bSAqYXJyYXkqIGRlIG9iamV0b3MgcXVlIGltcGxlbWVudGFtIGEgaW50ZXJmYWNlIGBQb1RhYmxlQ29sdW1uYC5cbiAgICogUG9yIHBhZHLDo28gcmVjZWJlcsOhIGNvbW8gdmFsb3IgYSBwcmltZWlyYSBjb2x1bmEgZGEgbGlzdGEgZGUgaXRlbnMgZGEgdGFiZWxhLlxuICAgKiA+IENhc28gbsOjbyBlbmNvbnRyZSB2YWxvciwgYSBtZW5zYWdlbSAnTmVuaHVtYSBkZWZpbmnDp8OjbyBkZSBjb2x1bmFzJyBzZXLDoSBleGliaWRhLlxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWNvbHVtbnMnKSBzZXQgY29sdW1ucyhjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPikge1xuICAgIGlmICh0aGlzLmluaXRpYWxDb2x1bW5zID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbHVtbnMgPSBjb2x1bW5zO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbHVtbnMgPSBjb2x1bW5zIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX2NvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNldENvbHVtbkxpbmsoKTtcbiAgICAgIHRoaXMuY2FsY3VsYXRlV2lkdGhIZWFkZXJzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmhhc0l0ZW1zKSB7XG4gICAgICB0aGlzLl9jb2x1bW5zID0gdGhpcy5nZXREZWZhdWx0Q29sdW1ucyh0aGlzLml0ZW1zWzBdKTtcbiAgICB9XG5cbiAgICB0aGlzLm9uQ2hhbmdlQ29sdW1ucygpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBZGljaW9uYSB1bSBjb250b3JubyBhcnJlZG9uZGFkbyBhbyBgcG8tdGFibGVgLCBhcyBvcMOnw7VlcyBzw6NvOlxuICAgKiAtIGBib3JkZXJgOiBjb20gYm9yZGFzL2xpbmhhcy5cbiAgICogLSBgc2hhZG93YDogY29tIHNvbWJyYXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBib3JkZXJgXG4gICAqL1xuICBASW5wdXQoJ3AtY29udGFpbmVyJykgc2V0IGNvbnRhaW5lcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29udGFpbmVyID0gcG9UYWJsZUNvbnRhaW5lci5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6IHBvVGFibGVDb250YWluZXJEZWZhdWx0O1xuICB9XG5cbiAgZ2V0IGNvbnRhaW5lcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgYSBhbHR1cmEgZGEgdGFiZWxhIGVtICpwaXhlbHMqIGUgZml4YSBvIGNhYmXDp2FsaG8uXG4gICAqL1xuICBASW5wdXQoJ3AtaGVpZ2h0Jykgc2V0IGhlaWdodChoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDtcbiAgICB0aGlzLmNhbGN1bGF0ZVdpZHRoSGVhZGVycygpO1xuICB9XG5cbiAgZ2V0IGhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgYSB2aXN1YWxpemHDp8OjbyBkYSBsaXN0YSBkZSBkZXRhbGhlcyBkZSBjYWRhIGxpbmhhIGRhIGNvbHVuYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWhpZGUtZGV0YWlsJykgc2V0IGhpZGVEZXRhaWwoaGlkZURldGFpbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2hpZGVEZXRhaWwgPSBoaWRlRGV0YWlsICE9IG51bGwgJiYgaGlkZURldGFpbC50b1N0cmluZygpID09PSAnJyA/IHRydWUgOiBjb252ZXJ0VG9Cb29sZWFuKGhpZGVEZXRhaWwpO1xuICAgIHRoaXMuY2FsY3VsYXRlV2lkdGhIZWFkZXJzKCk7XG4gIH1cblxuICBnZXQgaGlkZURldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faGlkZURldGFpbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby10YWJsZWAuXG4gICAqXG4gICAqIEV4aXN0ZW0gZHVhcyBtYW5laXJhcyBkZSBjdXN0b21pemFyIG8gY29tcG9uZW50ZSwgcGFzc2FuZG8gdW0gb2JqZXRvIGNvbSB0b2RhcyBhcyBsaXRlcmFpcyBkaXNwb27DrXZlaXM6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvVGFibGVMaXRlcmFscyA9IHtcbiAgICogICAgbG9hZE1vcmVEYXRhOiAnQnVzY2FyIG1haXMgZGFkb3MnLFxuICAgKiAgICBsb2FkaW5nRGF0YTogJ1Byb2Nlc3NhbmRvJyxcbiAgICogICAgbm9Db2x1bW5zOiAnU2VtIGNvbHVuYXMnLFxuICAgKiAgICBub0RhdGE6ICdTZW0gZGFkb3MnLFxuICAgKiAgICBzZWVDb21wbGV0ZVN1YnRpdGxlOiAnTW9zdHJhciBsZWdlbmRhIGNvbXBsZXRhJyxcbiAgICogICAgY29tcGxldGVTdWJ0aXRsZTogJ1RvZGFzIGxlZ2VuZGFzJ1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIE91IHBhc3NhbmRvIGFwZW5hcyBhcyBsaXRlcmFpcyBxdWUgZGVzZWphIGN1c3RvbWl6YXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvVGFibGVMaXRlcmFscyA9IHtcbiAgICogICAgbm9EYXRhOiAnU2VtIGRhZG9zJ1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIEUgcGFyYSBjYXJyZWdhciBhcyBsaXRlcmFpcyBjdXN0b21pemFkYXMsIGJhc3RhIGFwZW5hcyBwYXNzYXIgbyBvYmpldG8gcGFyYSBvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tdGFibGVcbiAgICogICBbcC1saXRlcmFsc109XCJjdXN0b21MaXRlcmFsc1wiPlxuICAgKiA8L3BvLXRhYmxlPlxuICAgKiBgYGBcbiAgICpcbiAgICogPiBPIG9iamV0byBwYWRyw6NvIGRlIGxpdGVyYWlzIHNlcsOhIHRyYWR1emlkbyBkZSBhY29yZG8gY29tIG8gaWRpb21hIGRvXG4gICAqIFtgUG9JMThuU2VydmljZWBdKC9kb2N1bWVudGF0aW9uL3BvLWkxOG4pIG91IGRvIGJyb3dzZXIuXG4gICAqL1xuICBASW5wdXQoJ3AtbGl0ZXJhbHMnKSBzZXQgbGl0ZXJhbHModmFsdWU6IFBvVGFibGVMaXRlcmFscykge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHtcbiAgICAgICAgLi4ucG9UYWJsZUxpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgICAuLi5wb1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdLFxuICAgICAgICAuLi52YWx1ZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGl0ZXJhbHMgPSBwb1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICAgIH1cbiAgfVxuICBnZXQgbGl0ZXJhbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xpdGVyYWxzIHx8IHBvVGFibGVMaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBCbG9xdWVpYSBhIGludGVyYcOnw6NvIGRvIHVzdcOhcmlvIGNvbSBvcyBkYWRvcyBkYSBfdGFibGVfLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtbG9hZGluZycpIHNldCBsb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sb2FkaW5nID0gY29udmVydFRvQm9vbGVhbihsb2FkaW5nKTtcbiAgICB0aGlzLmNhbGN1bGF0ZVdpZHRoSGVhZGVycygpO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgdW1hIGxpc3RhIGRlIGHDp8O1ZXMuXG4gICAqXG4gICAqIFF1YW5kbyBob3V2ZXIgYXBlbmFzIHVtYSBhw6fDo28gZGVmaW5pZGEgZWxhIHNlcsOhIGV4aWJpZGEgZGlyZXRhbWVudGUgbmEgY29sdW5hLCBjYXNvIGNvbnRyw6FyaW8sIG8gY29tcG9uZW50ZVxuICAgKiBzZSBlbmNhcnJlZ2EgZGUgYWdydXDDoS1sYXMgZXhpYmluZG8gbyDDrWNvbmUgWyoqcG8taWNvbi1tb3JlKipdKC9ndWlkZXMvaWNvbnMpIHF1ZSBsaXN0YXLDoSBhcyBhw6fDtWVzIGFvIHNlciBjbGljYWRvLlxuICAgKlxuICAgKiAqKkEgY29sdW5hIGRlIGHDp8O1ZXMgbsOjbyBzZXLDoSBleGliaWRhIHF1YW5kbzoqKlxuICAgKiAgLSBhIGxpc3RhIGNvbnRlciB2YWxvcmVzIGludsOhbGlkb3Mgb3UgaW5kZWZpbmlkb3MuXG4gICAqICAtIHRlbmhhIHVtYSDDum5pY2EgYcOnw6NvIGUgYSBtZXNtYSBuw6NvIGZvciB2aXPDrXZlbC5cbiAgICovXG4gIEBJbnB1dCgncC1hY3Rpb25zJykgc2V0IGFjdGlvbnMoYWN0aW9uczogQXJyYXk8UG9UYWJsZUFjdGlvbj4pIHtcbiAgICB0aGlzLl9hY3Rpb25zID0gYWN0aW9ucztcbiAgICB0aGlzLmNhbGN1bGF0ZVdpZHRoSGVhZGVycygpO1xuICB9XG5cbiAgZ2V0IGFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBQZXJtaXRlIGEgc2VsZcOnw6NvIGRlIGxpbmhhcyBuYSB0YWJlbGEgZSwgY2FzbyBhIHByb3ByaWVkYWRlIGBwLXNpbmdsZS1zZWxlY3RgIGVzdGVqYSBkZWZpbmlkYSBzZXLDoSBwb3Nzw612ZWxcbiAgICogc2VsZWNpb25hciBhcGVuYXMgdW1hIMO6bmljYSBsaW5oYS5cbiAgICpcbiAgICogKipJbXBvcnRhbnRlOioqXG4gICAqICAtIEFzIGxpbmhhcyBkZSBkZXRhbGhlIGRlZmluaWRhcyBlbSBgUG9UYWJsZURldGFpbGAgcG9zc3VlbSBjb21wb3J0YW1lbnRvIGluZGVwZW5kZW50ZSBkYSBsaW5oYSBtZXN0cmU7XG4gICAqICAtIENhZGEgbGluaGEgcG9zc3VpIHBvciBwYWRyw6NvIGEgcHJvcHJpZWRhZGUgZGluw6JtaWNhIGAkc2VsZWN0ZWRgLCBuYSBxdWFsIMOpIHBvc3PDrXZlbCB2YWxpZGFyIHNlIGEgbGluaGFcbiAgICogZXN0w6Egc2VsZWNpb25hZGEsIHBvciBleGVtcGxvOiBgaXRlbS4kc2VsZWN0ZWRgIG91IGBpdGVtWyckc2VsZWN0ZWQnXWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1zZWxlY3RhYmxlJykgc2V0IHNlbGVjdGFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zZWxlY3RhYmxlID0gPGFueT52YWx1ZSA9PT0gJycgPyB0cnVlIDogY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gICAgdGhpcy5jYWxjdWxhdGVXaWR0aEhlYWRlcnMoKTtcbiAgfVxuXG4gIGdldCBzZWxlY3RhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybywgYXRpdmEgYSBmdW5jaW9uYWxpZGFkZSBkZSBzY3JvbGwgaW5maW5pdG8gcGFyYSBhIHRhYmVsYSBlIG8gYm90w6NvIFwiQ2FycmVnYXIgTWFpc1wiIGRlaXhhcsOhIGRlIHNlciBleGliaWRvLiBBbyBjaGVnYXIgbm8gZmltIGRhIHRhYmVsYVxuICAgKiBleGVjdXRhcsOhIGEgZnVuw6fDo28gYHAtc2hvdy1tb3JlYC5cbiAgICpcbiAgICogKipSZWdyYXMgZGUgdXRpbGl6YcOnw6NvOioqXG4gICAqICAtIE8gc2Nyb2xsIGluZmluaXRvIHPDsyBmdW5jaW9uYSBwYXJhIHRhYmVsYXMgcXVlIHV0aWxpemFtIGEgcHJvcHJpZWRhZGUgYHAtaGVpZ2h0YCBlIHF1ZSBwb3NzdWVtIG8gc2Nyb2xsIGrDoSBuYSBjYXJnYSBpbmljaWFsIGRvcyBkYWRvcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWluZmluaXRlLXNjcm9sbCcpIHNldCBpbmZpbml0ZVNjcm9sbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2luZmluaXRlU2Nyb2xsID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSAmJiB0aGlzLmhlaWdodCA+IDApO1xuICB9XG5cbiAgZ2V0IGluZmluaXRlU2Nyb2xsKCkge1xuICAgIHJldHVybiB0aGlzLl9pbmZpbml0ZVNjcm9sbDtcbiAgfVxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgbyBwZXJjZW50dWFsIG5lY2Vzc8OhcmlvIHBhcmEgZGlzcGFyYXIgbyBldmVudG8gYHAtc2hvdy1tb3JlYCwgcXVlIMOpIHJlc3BvbnPDoXZlbCBwb3IgY2FycmVnYXIgbWFpcyBkYWRvcyBuYSB0YWJlbGEuIENhc28gbyB2YWxvciBpbmZvcm1hZG8gc2VqYSBtYWlvciBxdWUgMTAwIG91IG1lbm9yXG4gICAqIHF1ZSAwLCBvIHZhbG9yIHBhZHLDo28gc2Vyw6EgMTAwJVxuICAgKlxuICAgKiAqKkV4ZW1wbG9zOioqXG4gICAqICAtIHAtaW5maW5pdGUtc2Nyb2xsLWRpc3RhbmNlID0gODA6IFF1YW5kbyBhdGluZ2lyIDgwJSAgZG8gc2Nyb2xsIGRhIHRhYmVsYSwgbyBgcC1zaG93LW1vcmVgIHNlcsOhIGRpc3BhcmFkby5cbiAgICovXG4gIEBJbnB1dCgncC1pbmZpbml0ZS1zY3JvbGwtZGlzdGFuY2UnKSBzZXQgaW5maW5pdGVTY3JvbGxEaXN0YW5jZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW5maW5pdGVTY3JvbGxEaXN0YW5jZSA9IHZhbHVlID4gMTAwIHx8IHZhbHVlIDwgMCA/IDEwMCA6IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGluZmluaXRlU2Nyb2xsRGlzdGFuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXRlU2Nyb2xsRGlzdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBVUkwgZGEgQVBJIHJlc3BvbnPDoXZlbCBwb3IgcmV0b3JuYXIgb3MgcmVnaXN0cm9zLlxuICAgKlxuICAgKiBBbyByZWFsaXphciBhIGJ1c2NhIGRlIG1haXMgcmVnaXN0cm9zIHZpYSBwYWdpbmHDp8OjbyAoQ2FycmVnYXIgbWFpcyByZXN1bHRhZG9zKSwgc2Vyw6EgZW52aWFkbyBvcyBwYXLDom1ldHJvcyBgcGFnZWAgZSBgcGFnZVNpemVgLCBjb25mb3JtZSBhYmFpeG86XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTEwXG4gICAqIGBgYFxuICAgKlxuICAgKiBDYXNvIHV0aWxpemFyIG9yZGVuYcOnw6NvLCBhIGNvbHVuYSBvcmRlbmFkYSBzZXLDoSBlbnZpYWRhIGF0cmF2w6lzIGRvIHBhcsOibWV0cm8gYG9yZGVyYCwgcG9yIGV4ZW1wbG86XG4gICAqIC0gQ29sdW5hIGRlY3Jlc2NlbnRlOlxuICAgKiBgYGBcbiAgICogIHVybCArID9wYWdlPTEmcGFnZVNpemU9MTAmb3JkZXI9LW5hbWVcbiAgICogYGBgXG4gICAqXG4gICAqIC0gQ29sdW5hIGFzY2VuZGVudGU6XG4gICAqIGBgYFxuICAgKiAgdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0xMCZvcmRlcj1uYW1lXG4gICAqIGBgYFxuICAgKlxuICAgKiA+IEVzdGEgVVJMIGRldmUgcmV0b3JuYXIgZSByZWNlYmVyIG9zIGRhZG9zIG5vIHBhZHLDo28gZGUgW0FQSSBkbyBQTyBVSV0oaHR0cHM6Ly9wby11aS5pby9ndWlkZXMvYXBpKS5cbiAgICovXG4gIEBJbnB1dCgncC1zZXJ2aWNlLWFwaScpIHNldCBzZXJ2aWNlQXBpKHNlcnZpY2U6IHN0cmluZykge1xuICAgIHRoaXMuX3NlcnZpY2VBcGkgPSBzZXJ2aWNlO1xuICAgIHRoaXMuc2V0U2VydmljZSh0aGlzLnNlcnZpY2VBcGkpO1xuICAgIHRoaXMuaGFzU2VydmljZSA9ICEhc2VydmljZTtcbiAgICB0aGlzLnNob3dNb3JlRGlzYWJsZWQgPSAhdGhpcy5oYXNTZXJ2aWNlO1xuICAgIHRoaXMucGFnZSA9IDE7XG4gICAgdGhpcy5pbml0aWFsaXplRGF0YSgpO1xuICB9XG5cbiAgZ2V0IHNlcnZpY2VBcGkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VBcGk7XG4gIH1cblxuICBnZXQgaGFzQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGhhc0l0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoKTtcbiAgfVxuXG4gIGdldCBuYW1lQ29sdW1uRGV0YWlsKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbk1hc3RlckRldGFpbCA/IHRoaXMuY29sdW1uTWFzdGVyRGV0YWlsLnByb3BlcnR5IDogbnVsbDtcbiAgfVxuXG4gIGdldCB2YWxpZENvbHVtbnMoKSB7XG4gICAgY29uc3QgdHlwZXNWYWxpZCA9IFtcbiAgICAgICdzdHJpbmcnLFxuICAgICAgJ251bWJlcicsXG4gICAgICAnYm9vbGVhbicsXG4gICAgICAnZGF0ZScsXG4gICAgICAndGltZScsXG4gICAgICAnZGF0ZVRpbWUnLFxuICAgICAgJ2N1cnJlbmN5JyxcbiAgICAgICdzdWJ0aXRsZScsXG4gICAgICAnbGluaycsXG4gICAgICAnbGFiZWwnLFxuICAgICAgJ2ljb24nLFxuICAgICAgJ2NlbGxUZW1wbGF0ZScsXG4gICAgICAnY29sdW1uVGVtcGxhdGUnXG4gICAgXTtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT4gIWNvbC50eXBlIHx8IHR5cGVzVmFsaWQuaW5jbHVkZXMoY29sLnR5cGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHNvcnRUeXBlKCk6IFBvVGFibGVDb2x1bW5Tb3J0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuc29ydGVkQ29sdW1uLmFzY2VuZGluZyA/IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5Bc2NlbmRpbmcgOiBQb1RhYmxlQ29sdW1uU29ydFR5cGUuRGVzY2VuZGluZztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcG9EYXRlOiBQb0RhdGVTZXJ2aWNlLFxuICAgIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb1RhYmxlU2VydmljZTogUG9UYWJsZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnBvVGFibGVTZXJ2aWNlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNpbmdsZVNlbGVjdCB8fCB0aGlzLmhpZGVTZWxlY3RBbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gZmFsc2U7XG4gICAgICB0aGlzLmhpZGVTZWxlY3RBbGwgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmhlaWdodCkge1xuICAgICAgdGhpcy5jYWxjdWxhdGVIZWlnaHRUYWJsZUNvbnRhaW5lcih0aGlzLmhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0QWxsUm93cygpIHtcbiAgICBpZiAoIXRoaXMuaGlkZVNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSAhdGhpcy5zZWxlY3RBbGw7XG5cbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS4kc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdEFsbDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmVtaXRTZWxlY3RBbGxFdmVudHModGhpcy5zZWxlY3RBbGwsIFsuLi50aGlzLml0ZW1zXSk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Um93KHJvdzogYW55KSB7XG4gICAgcm93LiRzZWxlY3RlZCA9ICFyb3cuJHNlbGVjdGVkO1xuXG4gICAgdGhpcy5lbWl0U2VsZWN0RXZlbnRzKHJvdyk7XG5cbiAgICB0aGlzLmNvbmZpZ0FmdGVyU2VsZWN0Um93KHRoaXMuaXRlbXMsIHJvdyk7XG4gIH1cblxuICBzZWxlY3REZXRhaWxSb3cocm93OiBhbnkpIHtcbiAgICB0aGlzLmVtaXRTZWxlY3RFdmVudHMocm93KTtcbiAgfVxuXG4gIGdldENsYXNzQ29sb3Iocm93LCBjb2x1bW4pIHtcbiAgICByZXR1cm4gY29sdW1uLmNvbG9yID8gYHBvLXRleHQtJHt0aGlzLmdldENvbHVtbkNvbG9yKHJvdywgY29sdW1uKX1gIDogJyc7XG4gIH1cblxuICB0b2dnbGVEZXRhaWwocm93OiBhbnkpIHtcbiAgICBjb25zdCByb3dTaG93RGV0YWlsID0gcm93LiRzaG93RGV0YWlsO1xuICAgIGlmICh0aGlzLmF1dG9Db2xsYXBzZSkge1xuICAgICAgdGhpcy5jb2xsYXBzZUFsbEl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2hvd0RldGFpbChyb3csICFyb3dTaG93RGV0YWlsKTtcbiAgICB0aGlzLmVtaXRFeHBhbmRFdmVudHMocm93KTtcbiAgfVxuXG4gIHRvZ2dsZVJvd0FjdGlvbihyb3c6IGFueSkge1xuICAgIGNvbnN0IHRvZ2dsZVNob3dBY3Rpb24gPSByb3cuJHNob3dBY3Rpb247XG5cbiAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbS4kc2hvd0FjdGlvbikge1xuICAgICAgICBpdGVtLiRzaG93QWN0aW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcm93LiRzaG93QWN0aW9uID0gIXRvZ2dsZVNob3dBY3Rpb247XG4gIH1cblxuICBzb3J0Q29sdW1uKGNvbHVtbjogUG9UYWJsZUNvbHVtbikge1xuICAgIGlmICghdGhpcy5zb3J0IHx8IGNvbHVtbi50eXBlID09PSAnZGV0YWlsJyB8fCBjb2x1bW4uc29ydGFibGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4uYXNjZW5kaW5nID0gdGhpcy5zb3J0ZWRDb2x1bW4ucHJvcGVydHkgPT09IGNvbHVtbiA/ICF0aGlzLnNvcnRlZENvbHVtbi5hc2NlbmRpbmcgOiB0cnVlO1xuXG4gICAgdGhpcy5zb3J0QXJyYXkoY29sdW1uLCB0aGlzLnNvcnRlZENvbHVtbi5hc2NlbmRpbmcpO1xuICAgIHRoaXMuc29ydEJ5LmVtaXQoeyBjb2x1bW4sIHR5cGU6IHRoaXMuc29ydFR5cGUgfSk7XG4gICAgaWYgKHRoaXMuaGFzU2VydmljZSAmJiB0aGlzLnNvcnQpIHtcbiAgICAgIHRoaXMuc29ydFN0b3JlID0geyBjb2x1bW4sIHR5cGU6IHRoaXMuc29ydFR5cGUgfTtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRlZENvbHVtbi5wcm9wZXJ0eSA9IGNvbHVtbjtcbiAgfVxuXG4gIG9uU2hvd01vcmUoKTogdm9pZCB7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuc29ydGVkQ29sdW1uLnByb3BlcnR5ID8geyBjb2x1bW46IHRoaXMuc29ydGVkQ29sdW1uLnByb3BlcnR5LCB0eXBlOiB0aGlzLnNvcnRUeXBlIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGhpcy5oYXNTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnBhZ2UrKztcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmxvYWRpbmdTaG93TW9yZSA9IHRydWU7XG5cbiAgICAgIHRoaXMucG9UYWJsZVNlcnZpY2VTdWJzY3JpcHRpb24gPSB0aGlzLmdldEZpbHRlcmVkSXRlbXMoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbLi4udGhpcy5pdGVtcywgLi4uZGF0YS5pdGVtc107XG4gICAgICAgIHRoaXMuc2hvd01vcmVEaXNhYmxlZCA9ICFkYXRhLmhhc05leHQ7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmdTaG93TW9yZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93TW9yZS5lbWl0KHNvcnQpO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRJdGVtcyhxdWVyeVBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogUXVlcnlQYXJhbXNUeXBlIH0pOiBPYnNlcnZhYmxlPFBvVGFibGVSZXNwb25zZUFwaT4ge1xuICAgIGNvbnN0IGZpbHRlcmVkUGFyYW1zOiBQb1RhYmxlRmlsdGVyZWRJdGVtc1BhcmFtcyA9IHRoaXMuZ2V0RmlsdGVyZWRQYXJhbXMocXVlcnlQYXJhbXMpO1xuXG4gICAgcmV0dXJuIHRoaXMucG9UYWJsZVNlcnZpY2UuZ2V0RmlsdGVyZWRJdGVtcyhmaWx0ZXJlZFBhcmFtcyk7XG4gIH1cblxuICBzZXRUYWJsZVJlc3BvbnNlUHJvcGVydGllcyhkYXRhOiBQb1RhYmxlUmVzcG9uc2VBcGkpIHtcbiAgICB0aGlzLml0ZW1zID0gZGF0YS5pdGVtcyB8fCBbXTtcbiAgICB0aGlzLnNob3dNb3JlRGlzYWJsZWQgPSAhZGF0YS5oYXNOZXh0O1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgaW5pdGlhbGl6ZURhdGEocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBRdWVyeVBhcmFtc1R5cGUgfSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhhc1NlcnZpY2UpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmdldEZpbHRlcmVkSXRlbXMocGFyYW1zKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuc2V0VGFibGVSZXNwb25zZVByb3BlcnRpZXMoZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdENvbHVtbnMoaXRlbTogYW55KSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0pO1xuXG4gICAgcmV0dXJuIGtleXNcbiAgICAgIC5maWx0ZXIoa2V5ID0+IHR5cGVvZiBpdGVtW2tleV0gIT09ICdvYmplY3QnKVxuICAgICAgLm1hcChrZXkgPT4gKHsgbGFiZWw6IGNhcGl0YWxpemVGaXJzdExldHRlcihrZXkpLCBwcm9wZXJ0eToga2V5IH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTaG93RGV0YWlsKHJvd0lkZW50aWZpZXI6IGFueSB8IG51bWJlciwgaXNTaG93RGV0YWlsOiBib29sZWFuKSB7XG4gICAgY29uc3QgaXNSb3dJbmRleCA9IHR5cGVvZiByb3dJZGVudGlmaWVyID09PSAnbnVtYmVyJyAmJiB0aGlzLml0ZW1zW3Jvd0lkZW50aWZpZXJdO1xuXG4gICAgY29uc3Qgcm93ID0gaXNSb3dJbmRleCA/IHRoaXMuaXRlbXNbcm93SWRlbnRpZmllcl0gOiByb3dJZGVudGlmaWVyO1xuXG4gICAgcm93LiRzaG93RGV0YWlsID0gaXNTaG93RGV0YWlsO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZUFsbEl0ZW1zKGl0ZW1zOiBBcnJheTx7IFtrZXk6IHN0cmluZ106IGFueSB9Pikge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaWYgKGl0ZW0uJHNob3dEZXRhaWwpIHtcbiAgICAgICAgdGhpcy5zZXRTaG93RGV0YWlsKGl0ZW0sIGZhbHNlKTtcbiAgICAgICAgdGhpcy5lbWl0RXhwYW5kRXZlbnRzKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uZmlnQWZ0ZXJTZWxlY3RSb3cocm93czogQXJyYXk8YW55Piwgcm93KSB7XG4gICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0KSB7XG4gICAgICB0aGlzLnVuc2VsZWN0T3RoZXJSb3dzKHJvd3MsIHJvdyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5oaWRlU2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IHRoaXMuaXNFdmVyeVNlbGVjdGVkKHJvd3MpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdEV4cGFuZEV2ZW50cyhyb3c6IGFueSkge1xuICAgIHJvdy4kc2hvd0RldGFpbCA/IHRoaXMuZXhwYW5kZWQuZW1pdChyb3cpIDogdGhpcy5jb2xsYXBzZWQuZW1pdChyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0QWxsRXZlbnRzKHNlbGVjdEFsbDogYm9vbGVhbiwgcm93czogYW55KSB7XG4gICAgc2VsZWN0QWxsID8gdGhpcy5hbGxTZWxlY3RlZC5lbWl0KHJvd3MpIDogdGhpcy5hbGxVbnNlbGVjdGVkLmVtaXQocm93cyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTZWxlY3RFdmVudHMocm93OiBhbnkpIHtcbiAgICByb3cuJHNlbGVjdGVkID8gdGhpcy5zZWxlY3RlZC5lbWl0KHJvdykgOiB0aGlzLnVuc2VsZWN0ZWQuZW1pdChyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5Db2xvcihyb3csIGNvbHVtbikge1xuICAgIGNvbnN0IGNvbHVtbkNvbG9yID0gY29sdW1uLmNvbG9yO1xuXG4gICAgcmV0dXJuIGlzVHlwZW9mKGNvbHVtbkNvbG9yLCAnZnVuY3Rpb24nKSA/IGNvbHVtbkNvbG9yKHJvdywgY29sdW1uLnByb3BlcnR5KSA6IGNvbHVtbkNvbG9yO1xuICB9XG5cbiAgLy8gUmV0b3JuYSBhIGNvbHVuYSBkYSBsaXN0YSBkZSBjb2x1bmFzIHF1ZSDDqSBkbyB0aXBvIGRldGFpbFxuICBwcml2YXRlIGdldENvbHVtbk1hc3RlckRldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC50eXBlID09PSAnZGV0YWlsJyk7XG4gIH1cblxuICAvLyBDb2x1bmFzIHF1ZSBzw6NvIGluc2VyaWRhcyBubyA8aGVhZD4gZGEgdGFiZWxhXG4gIHByaXZhdGUgZ2V0TWFpbkNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLnZpc2libGUgIT09IGZhbHNlKTtcbiAgfVxuXG4gIC8vIFJldG9ybmEgYXMgY29sdW5hcyBjb20gc3RhdHVzXG4gIHByaXZhdGUgZ2V0U3VidGl0bGVDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wudHlwZSA9PT0gJ3N1YnRpdGxlJyk7XG4gIH1cblxuICBwcml2YXRlIGlzRXZlcnlTZWxlY3RlZChpdGVtczogQXJyYXk8YW55Pik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNvbWVDaGVja2VkT3JJbmRldGVybWluYXRlID0gaXRlbSA9PiBpdGVtLiRzZWxlY3RlZCB8fCBpdGVtLiRzZWxlY3RlZCA9PT0gbnVsbDtcbiAgICBjb25zdCBldmVyeUNoZWNrZWQgPSBpdGVtID0+IGl0ZW0uJHNlbGVjdGVkO1xuXG4gICAgaWYgKGl0ZW1zLmV2ZXJ5KGV2ZXJ5Q2hlY2tlZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpdGVtcy5zb21lKHNvbWVDaGVja2VkT3JJbmRldGVybWluYXRlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5zZXRNYWluQ29sdW1ucygpO1xuICAgIHRoaXMuc2V0Q29sdW1uTWFzdGVyRGV0YWlsKCk7XG4gICAgdGhpcy5zZXRTdWJ0aXRsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29sdW1uTGluaygpIHtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtblsndHlwZSddID09PSAnbGluaycgJiYgIWNvbHVtblsnbGluayddKSB7XG4gICAgICAgIGNvbHVtblsnbGluayddID0gJ2xpbmsnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb2x1bW5NYXN0ZXJEZXRhaWwoKSB7XG4gICAgdGhpcy5jb2x1bW5NYXN0ZXJEZXRhaWwgPSB0aGlzLmdldENvbHVtbk1hc3RlckRldGFpbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNYWluQ29sdW1ucygpIHtcbiAgICB0aGlzLm1haW5Db2x1bW5zID0gdGhpcy5nZXRNYWluQ29sdW1ucygpO1xuXG4gICAgdGhpcy5oYXNNYWluQ29sdW1ucyA9ICEhdGhpcy5tYWluQ29sdW1ucy5sZW5ndGg7XG5cbiAgICB0aGlzLmFsbENvbHVtbnNXaWR0aFBpeGVscyA9IHRoaXMudmVyaWZ5V2lkdGhDb2x1bW5zUGl4ZWxzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldFN1YnRpdGxlQ29sdW1ucygpIHtcbiAgICB0aGlzLnN1YnRpdGxlQ29sdW1ucyA9IHRoaXMuZ2V0U3VidGl0bGVDb2x1bW5zKCk7XG4gIH1cblxuICBwcml2YXRlIHNvcnRBcnJheShjb2x1bW46IFBvVGFibGVDb2x1bW4sIGFzY2VuZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuaXRlbXMuc29ydCgobGVmdFNpZGUsIHJpZ2h0U2lkZSk6IG51bWJlciA9PlxuICAgICAgc29ydFZhbHVlcyhsZWZ0U2lkZVtjb2x1bW4ucHJvcGVydHldLCByaWdodFNpZGVbY29sdW1uLnByb3BlcnR5XSwgYXNjZW5kaW5nKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVuc2VsZWN0T3RoZXJSb3dzKHJvd3M6IEFycmF5PGFueT4sIHJvdykge1xuICAgIHJvd3MuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtICE9PSByb3cpIHtcbiAgICAgICAgaXRlbS4kc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5V2lkdGhDb2x1bW5zUGl4ZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmhhc01haW5Db2x1bW5zID8gdGhpcy5tYWluQ29sdW1ucy5ldmVyeShjb2x1bW4gPT4gY29sdW1uLndpZHRoICYmIGNvbHVtbi53aWR0aC5pbmNsdWRlcygncHgnKSkgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2VydmljZShzZXJ2aWNlOiBzdHJpbmcpIHtcbiAgICBpZiAoc2VydmljZSAmJiBpc1R5cGVvZihzZXJ2aWNlLCAnc3RyaW5nJykpIHtcbiAgICAgIHRoaXMucG9UYWJsZVNlcnZpY2Uuc2V0VXJsKHNlcnZpY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRQYXJhbXMocXVlcnlQYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IFF1ZXJ5UGFyYW1zVHlwZSB9KSB7XG4gICAgY29uc3QgeyBwYWdlLCBwYWdlU2l6ZSwgc29ydFN0b3JlIH0gPSB0aGlzO1xuXG4gICAgY29uc3QgZmlsdGVyZWRQYXJhbXMgPSB7fTtcbiAgICBjb25zdCBvcmRlciA9IHRoaXMuZ2V0T3JkZXJQYXJhbShzb3J0U3RvcmUpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHsgcGFnZSwgcGFnZVNpemUsIG9yZGVyLCAuLi5xdWVyeVBhcmFtcyB9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcGFyYW1zKSB7XG4gICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgJiYgcGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmaWx0ZXJlZFBhcmFtc1trZXldID0gcGFyYW1zW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JkZXJQYXJhbShzb3J0OiBQb1RhYmxlQ29sdW1uU29ydCA9IHsgdHlwZTogdW5kZWZpbmVkIH0pIHtcbiAgICBjb25zdCB7IGNvbHVtbiwgdHlwZSB9ID0gc29ydDtcblxuICAgIGlmICghY29sdW1uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5EZXNjZW5kaW5nKSB7XG4gICAgICByZXR1cm4gYC0ke2NvbHVtbi5wcm9wZXJ0eX1gO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtjb2x1bW4ucHJvcGVydHl9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjYWxjdWxhdGVIZWlnaHRUYWJsZUNvbnRhaW5lcihoZWlnaHQpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjYWxjdWxhdGVXaWR0aEhlYWRlcnMoKTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2hlY2tJbmZpbml0ZVNjcm9sbCgpO1xufVxuIl19
957
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tdGFibGUvcG8tdGFibGUtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBS1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdqRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFLbEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQU9oRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxRQUFRLENBQUM7QUFFaEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUc7SUFDcEMsRUFBRSxFQUFtQjtRQUNuQixTQUFTLEVBQUUseUJBQXlCO1FBQ3BDLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLGVBQWUsRUFBRSxtQkFBbUI7UUFDcEMsV0FBVyxFQUFFLFNBQVM7UUFDdEIsWUFBWSxFQUFFLGdCQUFnQjtRQUM5QixtQkFBbUIsRUFBRSx1QkFBdUI7UUFDNUMsZ0JBQWdCLEVBQUUsbUJBQW1CO1FBQ3JDLGNBQWMsRUFBRSxpQkFBaUI7S0FDbEM7SUFDRCxFQUFFLEVBQW1CO1FBQ25CLFNBQVMsRUFBRSx1QkFBdUI7UUFDbEMsTUFBTSxFQUFFLHNCQUFzQjtRQUM5QixlQUFlLEVBQUUsdUJBQXVC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ImltcG9ydCB7XG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBEaXJlY3RpdmUsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGNhcGl0YWxpemVGaXJzdExldHRlciwgY29udmVydFRvQm9vbGVhbiwgaXNUeXBlb2YsIHNvcnRWYWx1ZXMgfSBmcm9tICcuLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IFBvRGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wby1kYXRlL3BvLWRhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9Mb2NhbGVEZWZhdWx0IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2UuY29uc3RhbnQnO1xuXG5pbXBvcnQgeyBQb1RhYmxlQWN0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby10YWJsZS1jb2x1bW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW5Tb3J0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWNvbHVtbi1zb3J0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb1RhYmxlQ29sdW1uU29ydFR5cGUgfSBmcm9tICcuL2VudW1zL3BvLXRhYmxlLWNvbHVtbi1zb3J0LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQb1RhYmxlTGl0ZXJhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtbGl0ZXJhbHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgUG9UYWJsZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLXRhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9UYWJsZVJlc3BvbnNlQXBpIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLXRhYmxlLXJlc3BvbnNlLWFwaS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9UYWJsZUZpbHRlcmVkSXRlbXNQYXJhbXMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tdGFibGUtZmlsdGVyZWQtaXRlbXMtcGFyYW1zLmludGVyZmFjZSc7XG5cbmV4cG9ydCB0eXBlIFF1ZXJ5UGFyYW1zVHlwZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG5cbmV4cG9ydCBjb25zdCBwb1RhYmxlQ29udGFpbmVyID0gWydib3JkZXInLCAnc2hhZG93J107XG5leHBvcnQgY29uc3QgcG9UYWJsZUNvbnRhaW5lckRlZmF1bHQgPSAnYm9yZGVyJztcblxuZXhwb3J0IGNvbnN0IHBvVGFibGVMaXRlcmFsc0RlZmF1bHQgPSB7XG4gIGVuOiA8UG9UYWJsZUxpdGVyYWxzPntcbiAgICBub0NvbHVtbnM6ICdDb2x1bW5zIGFyZSBub3QgZGVmaW5lZCcsXG4gICAgbm9EYXRhOiAnTm8gZGF0YSBmb3VuZCcsXG4gICAgbm9WaXNpYmxlQ29sdW1uOiAnTm8gdmlzaWJsZSBjb2x1bW4nLFxuICAgIGxvYWRpbmdEYXRhOiAnTG9hZGluZycsXG4gICAgbG9hZE1vcmVEYXRhOiAnTG9hZCBtb3JlIGRhdGEnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdTZWUgY29tcGxldGUgc3VidGl0bGUnLFxuICAgIGNvbXBsZXRlU3VidGl0bGU6ICdDb21wbGV0ZSBzdWJ0aXRsZScsXG4gICAgY29sdW1uc01hbmFnZXI6ICdDb2x1bW5zIG1hbmFnZXInXG4gIH0sXG4gIGVzOiA8UG9UYWJsZUxpdGVyYWxzPntcbiAgICBub0NvbHVtbnM6ICdDb2x1bW5hcyBubyBkZWZpbmlkYXMnLFxuICAgIG5vRGF0YTogJ0RhdG9zIG5vIGVuY29udHJhZG9zJyxcbiAgICBub1Zpc2libGVDb2x1bW46ICdTaW4gY29sdW1uYXMgdmlzaWJsZXMnLFxuICAgIGxvYWRpbmdEYXRhOiAnQ2FyZ2FuZG8gZGF0b3MnLFxuICAgIGxvYWRNb3JlRGF0YTogJ0NhcmdhciBtw6FzIHJlc3VsdGFkb3MnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICdWZXIgc3VidGl0dWxvIGNvbXBsZXRvJyxcbiAgICBjb21wbGV0ZVN1YnRpdGxlOiAnU3VidGl0dWxvIGNvbXBsZXRvJyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ0dlcmVudGUgZGUgY29sdW1uYSdcbiAgfSxcbiAgcHQ6IDxQb1RhYmxlTGl0ZXJhbHM+e1xuICAgIG5vQ29sdW1uczogJ05lbmh1bWEgZGVmaW5pw6fDo28gZGUgY29sdW5hcycsXG4gICAgbm9EYXRhOiAnTmVuaHVtIGRhZG8gZW5jb250cmFkbycsXG4gICAgbm9WaXNpYmxlQ29sdW1uOiAnTmVuaHVtYSBjb2x1bmEgdmlzw612ZWwnLFxuICAgIGxvYWRpbmdEYXRhOiAnQ2FycmVnYW5kbycsXG4gICAgbG9hZE1vcmVEYXRhOiAnQ2FycmVnYXIgbWFpcyByZXN1bHRhZG9zJyxcbiAgICBzZWVDb21wbGV0ZVN1YnRpdGxlOiAnVmVyIGxlZ2VuZGEgY29tcGxldGEnLFxuICAgIGNvbXBsZXRlU3VidGl0bGU6ICdMZWdlbmRhIGNvbXBsZXRhJyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ0dlcmVuY2lhZG9yIGRlIGNvbHVuYXMnXG4gIH0sXG4gIHJ1OiA8UG9UYWJsZUxpdGVyYWxzPntcbiAgICBub0NvbHVtbnM6ICfQndC10YIg0L7Qv9GA0LXQtNC10LvQtdC90LjRjyDRgdGC0L7Qu9Cx0YbQsCcsXG4gICAgbm9EYXRhOiAn0JTQsNC90L3Ri9C1INC90LUg0L3QsNC50LTQtdC90YsnLFxuICAgIG5vVmlzaWJsZUNvbHVtbjogJ9C90LXRgiDQstC40LTQuNC80YvRhSDRgdGC0L7Qu9Cx0YbQvtCyJyxcbiAgICBsb2FkaW5nRGF0YTogJ9C/0L7Qs9GA0YPQt9C60LAnLFxuICAgIGxvYWRNb3JlRGF0YTogJ9C30LDQs9GA0YPQt9C60LAnLFxuICAgIHNlZUNvbXBsZXRlU3VidGl0bGU6ICfQn9C+0YHQvNC+0YLRgNC10YLRjCDQv9C+0LvQvdGL0Lkg0YHRg9Cx0YLQuNGC0YAnLFxuICAgIGNvbXBsZXRlU3VidGl0bGU6ICfQn9C+0LvQvdGL0Lkg0LfQsNCz0L7Qu9C+0LLQvtC6JyxcbiAgICBjb2x1bW5zTWFuYWdlcjogJ9C80LXQvdC10LTQttC10YAg0LrQvtC70L7QvdC+0LonXG4gIH1cbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogRXN0ZSBjb21wb25lbnRlIGRlIHRhYmVsYSDDqSB1dGlsaXphZG8gcGFyYSBleGliacOnw6NvIGRlIGRhZG9zIGNvbSBkaWZlcmVudGVzIHRpcG9zIGNvbW8gcG9yIGV4ZW1wbG8gdGV4dG9zLCBkYXRhLCBob3JhcyBlIG7Dum1lcm9zIGNvbVxuICogZm9ybWF0byBwZXJzb25hbGl6YWRvLlxuICpcbiAqIFRhbWLDqW0gw6kgcG9zc2l2ZWwgY3JpYXIgdGFiZWxhcyBjb20gb3JkZW5hw6fDo28gZGUgZGFkb3MsIGxpbmhhcyBjb20gZGV0YWxoZXMsIGNvbHVuYSBwYXJhIHNlbGXDp8OjbyBkZSBsaW5oYXMsIGNvbHVuYSBjb20gYcOnw7VlcyBlIHRhbWLDqW1cbiAqIGNhcnJlZ2FtZW50byBwb3IgZGVtYW5kYSBhdHJhdsOpcyBkbyBib3TDo28gKipDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3MqKi5cbiAqXG4gKiA+IEFzIGxpbmhhcyBkZSBkZXRhbGhlcyBwb2RlbSB0YW1iw6ltIHNlciBjdXN0b21pemFkYXMgYXRyYXbDqXMgZG8gW2BwLXRhYmxlLXJvdy10ZW1wbGF0ZWBdKC9kb2N1bWVudGF0aW9uL3BvLXRhYmxlLXJvdy10ZW1wbGF0ZSkuXG4gKlxuICogPiBBcyBjb2x1bmFzIHBvZGVtIHNlciBjdXN0b21pemFkYXMgYXRyYXbDqXMgZG9zIHRlbXBsYXRlcyBbYHAtdGFibGUtY29sdW1uLXRlbXBsYXRlYF0oL2RvY3VtZW50YXRpb24vcG8tdGFibGUtY29sdW1uLXRlbXBsYXRlKVxuICogZSBbYHAtdGFibGUtY2VsbC10ZW1wbGF0ZWBdKC9kb2N1bWVudGF0aW9uL3BvLXRhYmxlLWNlbGwtdGVtcGxhdGUpLlxuICpcbiAqIE8gY29tcG9uZW50ZSBwZXJtaXRlIGdlcmVuY2lhciBhIGV4aWJpw6fDo28gZGFzIGNvbHVuYXMgZGluYW1pY2FtZW50ZS4gRXN0YSBmdW5jaW9uYWxpZGFkZSBwb2RlIHNlciBhY2Vzc2FkYSBhdHJhdsOpcyBkbyDDrWNvbmUgZGUgZW5ncmVuYWdlbVxuICogbm8gY2FudG8gc3VwZXJpb3IgZGlyZWl0byBkbyBjYWJlw6dhbGhvIGRhIHRhYmVsYS5cbiAqXG4gKiBDYXNvIGEgbGFyZ3VyYSBkZSB0b2RhcyBhcyBjb2x1bmFzIGZvcmVtIGRlZmluaWRhcyBlIG8gdG90YWwgdWx0cmFwYXNzYXIgbyB0YW1hbmhvIHRhYmVsYSwgc2Vyw6EgZXhpYmlkbyB1bSAqc2Nyb2xsKiBuYSBob3Jpem9udGFsIHBhcmEgYVxuICogY29tcGxldGEgdmlzdWFsaXphw6fDo28gZG9zIGRhZG9zLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb1RhYmxlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybywgaGFiaWxpdGEgYSBxdWVicmEgZGUgdGV4dG8gYW8gdHJhbnNib3JkYS1sbyBkZW50cm8gZGUgcXVhbHF1ZXIgY29sdW5hLlxuICAgKiA+IFF1YW5kbyBvY29ycmVyIGEgcXVlYnJhIGRlIHRleHRvLCBhbyBwYXNzYXIgbyBtb3VzZSBubyBjb250ZcO6ZG8gZGEgY8OpbHVsYSxcbiAgICogbyBtZXNtbyBzZXLDoSBleGliaWRvIGF0cmF2w6lzIGRvIFtgcG8tdG9vbHRpcGBdKC9kb2N1bWVudGF0aW9uL3BvLXRvb2x0aXApLlxuICAgKi9cbiAgQElucHV0KCdwLWhpZGUtdGV4dC1vdmVyZmxvdycpIEBJbnB1dEJvb2xlYW4oKSBoaWRlVGV4dE92ZXJmbG93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgbyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLCByZXNwb25zw6F2ZWwgcGVsYSBkZWZpbmnDp8OjbyBkZSBxdWFpcyBjb2x1bmFzIHNlcsOjbyBleGliaWRhcywgc2VqYSBlc2NvbmRpZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1oaWRlLWNvbHVtbnMtbWFuYWdlcicpIEBJbnB1dEJvb2xlYW4oKSBoaWRlQ29sdW1uc01hbmFnZXI/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBmZWNoYXIgdW0gZGV0YWxoZSBvdSByb3cgdGVtcGxhdGUgYXV0b21hdGljYW1lbnRlLCBhbyBhYnJpciBvdXRybyBpdGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtYXV0by1jb2xsYXBzZScpIEBJbnB1dEJvb2xlYW4oKSBhdXRvQ29sbGFwc2U/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBxdWUgc2VqYSBhZGljaW9uYWRvIG8gZXN0YWRvIGRlIGNhcnJlZ2FtZW50byBubyBib3TDo28gXCJDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3NcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWxvYWRpbmctc2hvdy1tb3JlJykgQElucHV0Qm9vbGVhbigpIGxvYWRpbmdTaG93TW9yZT86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBIYWJpbGl0YSBlbSB0b2RhcyBhcyBjb2x1bmFzIGEgb3DDp8OjbyBkZSBvcmRlbmHDp8OjbyBkZSBkYWRvcy4gQ2FzbyBhIGNvbHVuYSBzZWphIGRvIHRpcG8gJ2RhdGEnIG91ICdkYXRlVGltZScgYVxuICAgKiBtZXNtYSBkZXZlIHJlc3BlaXRhciBvcyB0aXBvcyBkZSBlbnRyYWRhIGRlZmluaWRvcyBwYXJhIHF1ZSBzZWphbSBvcmRlbmFkYXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1zb3J0JykgQElucHV0Qm9vbGVhbigpIHNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFNlIHZlcmRhZGVpcm8sIHRvcm5hIGhhYmlsaXRhZG8gbyBib3TDo28gXCJDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3NcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXNob3ctbW9yZS1kaXNhYmxlZCcpIEBJbnB1dEJvb2xlYW4oKSBzaG93TW9yZURpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSGFiaWxpdGEgb3UgZGVzYWJpbGl0YSBvIGVzdGlsbyBsaXN0cmFkbyBkYSB0YWJlbGEgKGBzdHJpcGVkYCkuXG4gICAqID4gUmVjb21lbmRhZG8gcGFyYSB0YWJlbGFzIGNvbSBtYWlvciBuw7ptZXJvIGRlIGRhZG9zLCBmYWNpbGl0YW5kbyBhIHN1YSB2aXN1YWxpemHDp8OjbyBuYSB0YWJlbGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1zdHJpcGVkJykgQElucHV0Qm9vbGVhbigpIHN0cmlwZWQ/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFc2NvbmRlIG8gKmNoZWNrYm94KiBwYXJhIHNlbGXDp8OjbyBkZSB0b2RhcyBhcyBsaW5oYXMuXG4gICAqXG4gICAqID4gU2VtcHJlIHJlY2ViZXLDoSAqdHJ1ZSogY2FzbyBhIHNlbGXDp8OjbyBkZSBhcGVuYXMgdW1hIGxpbmhhIGVzdGVqYSBhdGl2YS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWhpZGUtc2VsZWN0LWFsbCcpIEBJbnB1dEJvb2xlYW4oKSBoaWRlU2VsZWN0QWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIHNvbWVudGUgdW1hIGxpbmhhIGRhIHRhYmVsYSBwb2RlIHNlciBzZWxlY2lvbmFkYS5cbiAgICpcbiAgICogPiBFc3RhIGRlZmluacOnw6NvIG7Do28gc2UgYXBsaWNhIGFvcyBpdGVucyBmaWxob3MsIG9zIG1lc21vcyBwb3NzdWVtIGNvbXBvcnRhbWVudG8gaW5kZXBlbmRlbnRlIGRvIGl0ZW0gcGFpLlxuICAgKi9cbiAgQElucHV0KCdwLXNpbmdsZS1zZWxlY3QnKSBASW5wdXRCb29sZWFuKCkgc2luZ2xlU2VsZWN0PzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBxdWUgYSBjb2x1bmEgZGUgYcOnw7VlcyBmaWNhcsOhIG5vIGxhZG8gZGlyZWl0byBkYSB0YWJlbGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1hY3Rpb25zLXJpZ2h0JykgQElucHV0Qm9vbGVhbigpIGFjdGlvblJpZ2h0PzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSB1bWEgcXVhbnRpZGFkZSBtw6F4aW1hIGRlIGNvbHVuYXMgcXVlIHNlcsOjbyBleGliaWRhcyBuYSB0YWJlbGEuXG4gICAqXG4gICAqIFF1YW5kbyBjaGVnYXIgbm8gdmFsb3IgaW5mb3JtYWRvLCBhcyBjb2x1bmFzIHF1ZSBuw6NvIGVzdGl2ZXJlbSBzZWxlY2lvbmFkYXMgZmljYXLDo29cbiAgICogZGVzYWJpbGl0YWRhcyBlIGNhc28gaG91dmVyIG1haXMgY29sdW5hcyB2aXPDrXZlaXMgZG8gcXVlIG8gcGVybWl0aWRvLCBhcyBleGNlZGVudGVzXG4gICAqIHNlcsOjbyBpZ25vcmFkYXMgcG9yIG9yZGVtIGRlIHBvc2nDp8Ojby5cbiAgICovXG4gIEBJbnB1dCgncC1tYXgtY29sdW1ucycpIG1heENvbHVtbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBxdWFuZG8gdG9kYXMgYXMgbGluaGFzIHPDo28gc2VsZWNpb25hZGFzIHBvciBtZWlvIGRvICpjaGVja2JveCogcXVlIHNlbGVjaW9uYSB0b2RhcyBhcyBsaW5oYXMuXG4gICAqL1xuICBAT3V0cHV0KCdwLWFsbC1zZWxlY3RlZCcpIGFsbFNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBleGVjdXRhZG8gcXVhbmRvIGEgc2VsZcOnw6NvIGRhcyBsaW5oYXMgw6kgZGVzbWFyY2FkYSBwb3IgbWVpbyBkbyAqY2hlY2tib3gqIHF1ZSBzZWxlY2lvbmEgdG9kYXMgYXMgbGluaGFzLlxuICAgKi9cbiAgQE91dHB1dCgncC1hbGwtdW5zZWxlY3RlZCcpIGFsbFVuc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBhbyBjb2xhcHNhciB1bWEgbGluaGEgZG8gYHBvLXRhYmxlYC5cbiAgICpcbiAgICogPiBDb21vIHBhcsOibWV0cm8gbyBjb21wb25lbnRlIGVudmlhIG8gaXRlbSBjb2xhcHNhZG8uXG4gICAqL1xuICBAT3V0cHV0KCdwLWNvbGxhcHNlZCcpIGNvbGxhcHNlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFvIGV4cGFuZGlyIHVtYSBsaW5oYSBkbyBgcG8tdGFibGVgLlxuICAgKlxuICAgKiA+IENvbW8gcGFyw6JtZXRybyBvIGNvbXBvbmVudGUgZW52aWEgbyBpdGVtIGV4cGFuZGlkby5cbiAgICovXG4gIEBPdXRwdXQoJ3AtZXhwYW5kZWQnKSBleHBhbmRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFvIHNlbGVjaW9uYXIgdW1hIGxpbmhhIGRvIGBwby10YWJsZWAuXG4gICAqL1xuICBAT3V0cHV0KCdwLXNlbGVjdGVkJykgc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUmVjZWJlIHVtYSBhw6fDo28gZGUgY2xpcXVlIHBhcmEgbyBib3TDo28gXCJDYXJyZWdhciBtYWlzIHJlc3VsdGFkb3NcIiwgY2FzbyBuZW5odW1hIGHDp8OjbyBmb3IgZGVmaW5pZGEgbyBtZXNtb1xuICAgKiBuw6NvIMOpIHZpc8OtdmVsLlxuICAgKlxuICAgKiBSZWNlYmUgdW0gb2JqZXRvIGB7IGNvbHVtbiwgdHlwZSB9YCBvbmRlOlxuICAgKlxuICAgKiAtIGNvbHVtbiAoYFBvVGFibGVDb2x1bW5gKTogb2JqZXRvIGRhIGNvbHVuYSBxdWUgZXN0w6Egb3JkZW5hZGEuXG4gICAqIC0gdHlwZSAoYFBvVGFibGVDb2x1bW5Tb3J0VHlwZWApOiB0aXBvIGRhIG9yZGVuYcOnw6NvLlxuICAgKi9cbiAgQE91dHB1dCgncC1zaG93LW1vcmUnKSBzaG93TW9yZTogRXZlbnRFbWl0dGVyPFBvVGFibGVDb2x1bW5Tb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXI8UG9UYWJsZUNvbHVtblNvcnQ+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRXZlbnRvIGV4ZWN1dGFkbyBhbyBvcmRlbmFyIGNvbHVuYXMgZGEgdGFiZWxhLlxuICAgKlxuICAgKiBSZWNlYmUgdW0gb2JqZXRvIGB7IGNvbHVtbiwgdHlwZSB9YCBvbmRlOlxuICAgKlxuICAgKiAtIGNvbHVtbiAoYFBvVGFibGVDb2x1bW5gKTogb2JqZXRvIGRhIGNvbHVuYSBxdWUgZm9pIGNsaWNhZGEvb3JkZW5hZGEuXG4gICAqIC0gdHlwZSAoYFBvVGFibGVDb2x1bW5Tb3J0VHlwZWApOiB0aXBvIGRhIG9yZGVuYcOnw6NvLlxuICAgKi9cbiAgQE91dHB1dCgncC1zb3J0LWJ5Jykgc29ydEJ5OiBFdmVudEVtaXR0ZXI8UG9UYWJsZUNvbHVtblNvcnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxQb1RhYmxlQ29sdW1uU29ydD4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZXhlY3V0YWRvIGFvIGRlc21hcmNhciBhIHNlbGXDp8OjbyBkZSB1bWEgbGluaGEgZG8gYHBvLXRhYmxlYC5cbiAgICovXG4gIEBPdXRwdXQoJ3AtdW5zZWxlY3RlZCcpIHVuc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXZlbnRvIGRpc3BhcmFkbyBhbyBmZWNoYXIgbyBwb3BvdmVyIGRvIGdlcmVuY2lhZG9yIGRlIGNvbHVuYXMgYXDDs3MgYWx0ZXJhciBhcyBjb2x1bmFzIHZpc8OtdmVpcy5cbiAgICpcbiAgICogTyBjb21wb25lbnRlIGVudmlhIGNvbW8gcGFyw6JtZXRybyB1bSBhcnJheSBkZSBzdHJpbmcgY29tIGFzIGNvbHVuYXMgdmlzw612ZWlzIGF0dWFsaXphZGFzLlxuICAgKiBQb3IgZXhlbXBsbzogW1wiaWRDYXJkXCIsIFwibmFtZVwiLCBcImhpcmVTdGF0dXNcIiwgXCJhZ2VcIl0uXG4gICAqL1xuICBAT3V0cHV0KCdwLWNoYW5nZS12aXNpYmxlLWNvbHVtbnMnKSBjaGFuZ2VWaXNpYmxlQ29sdW1ucyA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8c3RyaW5nPj4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZGlzcGFyYWRvIGFvIGNsaWNhciBubyBib3TDo28gZGUgcmVzdGF1cmFyIHBhZHLDo28gbm8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcy5cbiAgICpcbiAgICogTyBjb21wb25lbnRlIGVudmlhIGNvbW8gcGFyw6JtZXRybyB1bSBhcnJheSBkZSBzdHJpbmcgY29tIGFzIGNvbHVuYXMgY29uZmlndXJhZGFzIGluaWNpYWxtZW50ZS5cbiAgICogUG9yIGV4ZW1wbG86IFtcImlkQ2FyZFwiLCBcIm5hbWVcIiwgXCJoaXJlU3RhdHVzXCIsIFwiYWdlXCJdLlxuICAgKi9cbiAgQE91dHB1dCgncC1yZXN0b3JlLWNvbHVtbi1tYW5hZ2VyJykgY29sdW1uUmVzdG9yZU1hbmFnZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFN0cmluZz4+KCk7XG5cbiAgYWxsQ29sdW1uc1dpZHRoUGl4ZWxzOiBib29sZWFuO1xuICBjb2x1bW5NYXN0ZXJEZXRhaWw6IFBvVGFibGVDb2x1bW47XG4gIGhhc01haW5Db2x1bW5zOiBib29sZWFuID0gZmFsc2U7XG4gIG1haW5Db2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuICBzZWxlY3RBbGwgPSBmYWxzZTtcbiAgc29ydGVkQ29sdW1uID0geyBwcm9wZXJ0eTogPFBvVGFibGVDb2x1bW4+bnVsbCwgYXNjZW5kaW5nOiB0cnVlIH07XG4gIHN1YnRpdGxlQ29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4gPSBbXTtcbiAgcGFnZSA9IDE7XG4gIHBhZ2VTaXplID0gMTA7XG4gIGhhc1NlcnZpY2U/OiBib29sZWFuID0gZmFsc2U7XG4gIGluaXRpYWxDb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPjtcbiAgcHJpdmF0ZSBfYWN0aW9ucz86IEFycmF5PFBvVGFibGVBY3Rpb24+ID0gW107XG4gIHByaXZhdGUgX2NvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+ID0gW107XG4gIHByaXZhdGUgX2NvbnRhaW5lcj86IHN0cmluZztcbiAgcHJpdmF0ZSBfaGVpZ2h0PzogbnVtYmVyO1xuICBwcml2YXRlIF9oaWRlRGV0YWlsPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pdGVtczogQXJyYXk8UG9UYWJsZUNvbHVtbj47XG4gIHByaXZhdGUgX2xpdGVyYWxzOiBQb1RhYmxlTGl0ZXJhbHM7XG4gIHByaXZhdGUgX2xvYWRpbmc/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3NlbGVjdGFibGU/OiBib29sZWFuO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmcgPSBwb0xvY2FsZURlZmF1bHQ7XG4gIHByaXZhdGUgX3NlcnZpY2VBcGk6IHN0cmluZztcbiAgcHJpdmF0ZSBwb1RhYmxlU2VydmljZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHNvcnRTdG9yZTogUG9UYWJsZUNvbHVtblNvcnQ7XG4gIHByaXZhdGUgX2luZmluaXRlU2Nyb2xsRGlzdGFuY2U/OiBudW1iZXIgPSAxMDA7XG4gIHByaXZhdGUgX2luZmluaXRlU2Nyb2xsPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGlzdGEgZGUgaXRlbnMgZGEgdGFiZWxhLlxuICAgKiA+IFNlIGZhbHNvLCBzZXLDoSBpbmljaWFsaXphZG8gY29tbyB1bSAqYXJyYXkqIHZhemlvLlxuICAgKi9cbiAgQElucHV0KCdwLWl0ZW1zJykgc2V0IGl0ZW1zKGl0ZW1zOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5faXRlbXMgPSBBcnJheS5pc0FycmF5KGl0ZW1zKSA/IGl0ZW1zIDogW107XG5cbiAgICAvLyB3aGVuIGhhdmVuJ3QgaXRlbXMsIHNlbGVjdEFsbCBzaG91bGQgYmUgdW5jaGVja2VkLlxuICAgIGlmICghdGhpcy5oYXNJdGVtcykge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmhhc0NvbHVtbnMpIHtcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ2V0RGVmYXVsdENvbHVtbnMoaXRlbXNbMF0pO1xuICAgIH1cblxuICAgIC8vIHRpbWVvdXQgbmVjZXNzYXJpbyBwYXJhIG9zIGl0ZW5zIHNlcmVtIHJlZmxldGlkb3MgbmEgdGFiZWxhXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrSW5maW5pdGVTY3JvbGwoKSk7XG4gIH1cblxuICBnZXQgaXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGlzdGEgZGFzIGNvbHVuYXMgZGEgdGFiZWxhLCBkZXZlIHJlY2ViZXIgdW0gKmFycmF5KiBkZSBvYmpldG9zIHF1ZSBpbXBsZW1lbnRhbSBhIGludGVyZmFjZSBgUG9UYWJsZUNvbHVtbmAuXG4gICAqIFBvciBwYWRyw6NvIHJlY2ViZXLDoSBjb21vIHZhbG9yIGEgcHJpbWVpcmEgY29sdW5hIGRhIGxpc3RhIGRlIGl0ZW5zIGRhIHRhYmVsYS5cbiAgICogPiBDYXNvIG7Do28gZW5jb250cmUgdmFsb3IsIGEgbWVuc2FnZW0gJ05lbmh1bWEgZGVmaW5pw6fDo28gZGUgY29sdW5hcycgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1jb2x1bW5zJykgc2V0IGNvbHVtbnMoY29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4pIHtcbiAgICBpZiAodGhpcy5pbml0aWFsQ29sdW1ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmluaXRpYWxDb2x1bW5zID0gY29sdW1ucztcbiAgICB9XG5cbiAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1ucyB8fCBbXTtcblxuICAgIGlmICh0aGlzLl9jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZXRDb2x1bW5MaW5rKCk7XG4gICAgICB0aGlzLmNhbGN1bGF0ZVdpZHRoSGVhZGVycygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5oYXNJdGVtcykge1xuICAgICAgdGhpcy5fY29sdW1ucyA9IHRoaXMuZ2V0RGVmYXVsdENvbHVtbnModGhpcy5pdGVtc1swXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vbkNoYW5nZUNvbHVtbnMoKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQWRpY2lvbmEgdW0gY29udG9ybm8gYXJyZWRvbmRhZG8gYW8gYHBvLXRhYmxlYCwgYXMgb3DDp8O1ZXMgc8OjbzpcbiAgICogLSBgYm9yZGVyYDogY29tIGJvcmRhcy9saW5oYXMuXG4gICAqIC0gYHNoYWRvd2A6IGNvbSBzb21icmFzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgYm9yZGVyYFxuICAgKi9cbiAgQElucHV0KCdwLWNvbnRhaW5lcicpIHNldCBjb250YWluZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbnRhaW5lciA9IHBvVGFibGVDb250YWluZXIuaW5jbHVkZXModmFsdWUpID8gdmFsdWUgOiBwb1RhYmxlQ29udGFpbmVyRGVmYXVsdDtcbiAgfVxuXG4gIGdldCBjb250YWluZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGEgYWx0dXJhIGRhIHRhYmVsYSBlbSAqcGl4ZWxzKiBlIGZpeGEgbyBjYWJlw6dhbGhvLlxuICAgKlxuICAgKiBBbyB1dGlsaXphciBlc3NhIHByb3ByaWVkYWRlIHNlcsOhIGluc2VyaWRvIG8gYHZpcnR1YWwtc2Nyb2xsYCBuYSB0YWJlbGEgbWVsaG9yYW5kbyBhIHBlcmZvcm1hbmNlLlxuICAgKi9cbiAgQElucHV0KCdwLWhlaWdodCcpIHNldCBoZWlnaHQoaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLl9oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy5jYWxjdWxhdGVXaWR0aEhlYWRlcnMoKTtcbiAgfVxuXG4gIGdldCBoZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEhhYmlsaXRhIGEgdmlzdWFsaXphw6fDo28gZGEgbGlzdGEgZGUgZGV0YWxoZXMgZGUgY2FkYSBsaW5oYSBkYSBjb2x1bmEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1oaWRlLWRldGFpbCcpIHNldCBoaWRlRGV0YWlsKGhpZGVEZXRhaWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9oaWRlRGV0YWlsID0gaGlkZURldGFpbCAhPSBudWxsICYmIGhpZGVEZXRhaWwudG9TdHJpbmcoKSA9PT0gJycgPyB0cnVlIDogY29udmVydFRvQm9vbGVhbihoaWRlRGV0YWlsKTtcbiAgICB0aGlzLmNhbGN1bGF0ZVdpZHRoSGVhZGVycygpO1xuICB9XG5cbiAgZ2V0IGhpZGVEZXRhaWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGVEZXRhaWw7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPYmpldG8gY29tIGFzIGxpdGVyYWlzIHVzYWRhcyBubyBgcG8tdGFibGVgLlxuICAgKlxuICAgKiBFeGlzdGVtIGR1YXMgbWFuZWlyYXMgZGUgY3VzdG9taXphciBvIGNvbXBvbmVudGUsIHBhc3NhbmRvIHVtIG9iamV0byBjb20gdG9kYXMgYXMgbGl0ZXJhaXMgZGlzcG9uw612ZWlzOlxuICAgKlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb1RhYmxlTGl0ZXJhbHMgPSB7XG4gICAqICAgIGxvYWRNb3JlRGF0YTogJ0J1c2NhciBtYWlzIGRhZG9zJyxcbiAgICogICAgbG9hZGluZ0RhdGE6ICdQcm9jZXNzYW5kbycsXG4gICAqICAgIG5vQ29sdW1uczogJ1NlbSBjb2x1bmFzJyxcbiAgICogICAgbm9EYXRhOiAnU2VtIGRhZG9zJyxcbiAgICogICAgc2VlQ29tcGxldGVTdWJ0aXRsZTogJ01vc3RyYXIgbGVnZW5kYSBjb21wbGV0YScsXG4gICAqICAgIGNvbXBsZXRlU3VidGl0bGU6ICdUb2RhcyBsZWdlbmRhcydcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBPdSBwYXNzYW5kbyBhcGVuYXMgYXMgbGl0ZXJhaXMgcXVlIGRlc2VqYSBjdXN0b21pemFyOlxuICAgKlxuICAgKiBgYGBcbiAgICogIGNvbnN0IGN1c3RvbUxpdGVyYWxzOiBQb1RhYmxlTGl0ZXJhbHMgPSB7XG4gICAqICAgIG5vRGF0YTogJ1NlbSBkYWRvcydcbiAgICogIH07XG4gICAqIGBgYFxuICAgKlxuICAgKiBFIHBhcmEgY2FycmVnYXIgYXMgbGl0ZXJhaXMgY3VzdG9taXphZGFzLCBiYXN0YSBhcGVuYXMgcGFzc2FyIG8gb2JqZXRvIHBhcmEgbyBjb21wb25lbnRlLlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLXRhYmxlXG4gICAqICAgW3AtbGl0ZXJhbHNdPVwiY3VzdG9tTGl0ZXJhbHNcIj5cbiAgICogPC9wby10YWJsZT5cbiAgICogYGBgXG4gICAqXG4gICAqID4gTyBvYmpldG8gcGFkcsOjbyBkZSBsaXRlcmFpcyBzZXLDoSB0cmFkdXppZG8gZGUgYWNvcmRvIGNvbSBvIGlkaW9tYSBkb1xuICAgKiBbYFBvSTE4blNlcnZpY2VgXSgvZG9jdW1lbnRhdGlvbi9wby1pMThuKSBvdSBkbyBicm93c2VyLlxuICAgKi9cbiAgQElucHV0KCdwLWxpdGVyYWxzJykgc2V0IGxpdGVyYWxzKHZhbHVlOiBQb1RhYmxlTGl0ZXJhbHMpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgdGhpcy5fbGl0ZXJhbHMgPSB7XG4gICAgICAgIC4uLnBvVGFibGVMaXRlcmFsc0RlZmF1bHRbcG9Mb2NhbGVEZWZhdWx0XSxcbiAgICAgICAgLi4ucG9UYWJsZUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXSxcbiAgICAgICAgLi4udmFsdWVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0gcG9UYWJsZUxpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgICB9XG4gIH1cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscyB8fCBwb1RhYmxlTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQmxvcXVlaWEgYSBpbnRlcmHDp8OjbyBkbyB1c3XDoXJpbyBjb20gb3MgZGFkb3MgZGEgX3RhYmxlXy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWxvYWRpbmcnKSBzZXQgbG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbG9hZGluZyA9IGNvbnZlcnRUb0Jvb2xlYW4obG9hZGluZyk7XG4gICAgdGhpcy5jYWxjdWxhdGVXaWR0aEhlYWRlcnMoKTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHVtYSBsaXN0YSBkZSBhw6fDtWVzLlxuICAgKlxuICAgKiBRdWFuZG8gaG91dmVyIGFwZW5hcyB1bWEgYcOnw6NvIGRlZmluaWRhIGVsYSBzZXLDoSBleGliaWRhIGRpcmV0YW1lbnRlIG5hIGNvbHVuYSwgY2FzbyBjb250csOhcmlvLCBvIGNvbXBvbmVudGVcbiAgICogc2UgZW5jYXJyZWdhIGRlIGFncnVww6EtbGFzIGV4aWJpbmRvIG8gw61jb25lIFsqKnBvLWljb24tbW9yZSoqXSgvZ3VpZGVzL2ljb25zKSBxdWUgbGlzdGFyw6EgYXMgYcOnw7VlcyBhbyBzZXIgY2xpY2Fkby5cbiAgICpcbiAgICogKipBIGNvbHVuYSBkZSBhw6fDtWVzIG7Do28gc2Vyw6EgZXhpYmlkYSBxdWFuZG86KipcbiAgICogIC0gYSBsaXN0YSBjb250ZXIgdmFsb3JlcyBpbnbDoWxpZG9zIG91IGluZGVmaW5pZG9zLlxuICAgKiAgLSB0ZW5oYSB1bWEgw7puaWNhIGHDp8OjbyBlIGEgbWVzbWEgbsOjbyBmb3Igdmlzw612ZWwuXG4gICAqL1xuICBASW5wdXQoJ3AtYWN0aW9ucycpIHNldCBhY3Rpb25zKGFjdGlvbnM6IEFycmF5PFBvVGFibGVBY3Rpb24+KSB7XG4gICAgdGhpcy5fYWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgdGhpcy5jYWxjdWxhdGVXaWR0aEhlYWRlcnMoKTtcbiAgfVxuXG4gIGdldCBhY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBhIHNlbGXDp8OjbyBkZSBsaW5oYXMgbmEgdGFiZWxhIGUsIGNhc28gYSBwcm9wcmllZGFkZSBgcC1zaW5nbGUtc2VsZWN0YCBlc3RlamEgZGVmaW5pZGEgc2Vyw6EgcG9zc8OtdmVsXG4gICAqIHNlbGVjaW9uYXIgYXBlbmFzIHVtYSDDum5pY2EgbGluaGEuXG4gICAqXG4gICAqICoqSW1wb3J0YW50ZToqKlxuICAgKiAgLSBBcyBsaW5oYXMgZGUgZGV0YWxoZSBkZWZpbmlkYXMgZW0gYFBvVGFibGVEZXRhaWxgIHBvc3N1ZW0gY29tcG9ydGFtZW50byBpbmRlcGVuZGVudGUgZGEgbGluaGEgbWVzdHJlO1xuICAgKiAgLSBDYWRhIGxpbmhhIHBvc3N1aSBwb3IgcGFkcsOjbyBhIHByb3ByaWVkYWRlIGRpbsOibWljYSBgJHNlbGVjdGVkYCwgbmEgcXVhbCDDqSBwb3Nzw612ZWwgdmFsaWRhciBzZSBhIGxpbmhhXG4gICAqIGVzdMOhIHNlbGVjaW9uYWRhLCBwb3IgZXhlbXBsbzogYGl0ZW0uJHNlbGVjdGVkYCBvdSBgaXRlbVsnJHNlbGVjdGVkJ11gLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atc2VsZWN0YWJsZScpIHNldCBzZWxlY3RhYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VsZWN0YWJsZSA9IDxhbnk+dmFsdWUgPT09ICcnID8gdHJ1ZSA6IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICAgIHRoaXMuY2FsY3VsYXRlV2lkdGhIZWFkZXJzKCk7XG4gIH1cblxuICBnZXQgc2VsZWN0YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFNlIHZlcmRhZGVpcm8sIGF0aXZhIGEgZnVuY2lvbmFsaWRhZGUgZGUgc2Nyb2xsIGluZmluaXRvIHBhcmEgYSB0YWJlbGEgZSBvIGJvdMOjbyBcIkNhcnJlZ2FyIE1haXNcIiBkZWl4YXLDoSBkZSBzZXIgZXhpYmlkby4gQW8gY2hlZ2FyIG5vIGZpbSBkYSB0YWJlbGFcbiAgICogZXhlY3V0YXLDoSBhIGZ1bsOnw6NvIGBwLXNob3ctbW9yZWAuXG4gICAqXG4gICAqICoqUmVncmFzIGRlIHV0aWxpemHDp8OjbzoqKlxuICAgKiAgLSBPIHNjcm9sbCBpbmZpbml0byBzw7MgZnVuY2lvbmEgcGFyYSB0YWJlbGFzIHF1ZSB1dGlsaXphbSBhIHByb3ByaWVkYWRlIGBwLWhlaWdodGAgZSBxdWUgcG9zc3VlbSBvIHNjcm9sbCBqw6EgbmEgY2FyZ2EgaW5pY2lhbCBkb3MgZGFkb3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1pbmZpbml0ZS1zY3JvbGwnKSBzZXQgaW5maW5pdGVTY3JvbGwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pbmZpbml0ZVNjcm9sbCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUgJiYgdGhpcy5oZWlnaHQgPiAwKTtcbiAgfVxuXG4gIGdldCBpbmZpbml0ZVNjcm9sbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5maW5pdGVTY3JvbGw7XG4gIH1cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIG8gcGVyY2VudHVhbCBuZWNlc3PDoXJpbyBwYXJhIGRpc3BhcmFyIG8gZXZlbnRvIGBwLXNob3ctbW9yZWAsIHF1ZSDDqSByZXNwb25zw6F2ZWwgcG9yIGNhcnJlZ2FyIG1haXMgZGFkb3MgbmEgdGFiZWxhLiBDYXNvIG8gdmFsb3IgaW5mb3JtYWRvIHNlamEgbWFpb3IgcXVlIDEwMCBvdSBtZW5vclxuICAgKiBxdWUgMCwgbyB2YWxvciBwYWRyw6NvIHNlcsOhIDEwMCVcbiAgICpcbiAgICogKipFeGVtcGxvczoqKlxuICAgKiAgLSBwLWluZmluaXRlLXNjcm9sbC1kaXN0YW5jZSA9IDgwOiBRdWFuZG8gYXRpbmdpciA4MCUgIGRvIHNjcm9sbCBkYSB0YWJlbGEsIG8gYHAtc2hvdy1tb3JlYCBzZXLDoSBkaXNwYXJhZG8uXG4gICAqL1xuICBASW5wdXQoJ3AtaW5maW5pdGUtc2Nyb2xsLWRpc3RhbmNlJykgc2V0IGluZmluaXRlU2Nyb2xsRGlzdGFuY2UodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2luZmluaXRlU2Nyb2xsRGlzdGFuY2UgPSB2YWx1ZSA+IDEwMCB8fCB2YWx1ZSA8IDAgPyAxMDAgOiB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbmZpbml0ZVNjcm9sbERpc3RhbmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbmZpbml0ZVNjcm9sbERpc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogVVJMIGRhIEFQSSByZXNwb25zw6F2ZWwgcG9yIHJldG9ybmFyIG9zIHJlZ2lzdHJvcy5cbiAgICpcbiAgICogQW8gcmVhbGl6YXIgYSBidXNjYSBkZSBtYWlzIHJlZ2lzdHJvcyB2aWEgcGFnaW5hw6fDo28gKENhcnJlZ2FyIG1haXMgcmVzdWx0YWRvcyksIHNlcsOhIGVudmlhZG8gb3MgcGFyw6JtZXRyb3MgYHBhZ2VgIGUgYHBhZ2VTaXplYCwgY29uZm9ybWUgYWJhaXhvOlxuICAgKlxuICAgKiBgYGBcbiAgICogdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0xMFxuICAgKiBgYGBcbiAgICpcbiAgICogQ2FzbyB1dGlsaXphciBvcmRlbmHDp8OjbywgYSBjb2x1bmEgb3JkZW5hZGEgc2Vyw6EgZW52aWFkYSBhdHJhdsOpcyBkbyBwYXLDom1ldHJvIGBvcmRlcmAsIHBvciBleGVtcGxvOlxuICAgKiAtIENvbHVuYSBkZWNyZXNjZW50ZTpcbiAgICogYGBgXG4gICAqICB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTEwJm9yZGVyPS1uYW1lXG4gICAqIGBgYFxuICAgKlxuICAgKiAtIENvbHVuYSBhc2NlbmRlbnRlOlxuICAgKiBgYGBcbiAgICogIHVybCArID9wYWdlPTEmcGFnZVNpemU9MTAmb3JkZXI9bmFtZVxuICAgKiBgYGBcbiAgICpcbiAgICogPiBFc3RhIFVSTCBkZXZlIHJldG9ybmFyIGUgcmVjZWJlciBvcyBkYWRvcyBubyBwYWRyw6NvIGRlIFtBUEkgZG8gUE8gVUldKGh0dHBzOi8vcG8tdWkuaW8vZ3VpZGVzL2FwaSkuXG4gICAqL1xuICBASW5wdXQoJ3Atc2VydmljZS1hcGknKSBzZXQgc2VydmljZUFwaShzZXJ2aWNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zZXJ2aWNlQXBpID0gc2VydmljZTtcbiAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5zZXJ2aWNlQXBpKTtcbiAgICB0aGlzLmhhc1NlcnZpY2UgPSAhIXNlcnZpY2U7XG4gICAgdGhpcy5zaG93TW9yZURpc2FibGVkID0gIXRoaXMuaGFzU2VydmljZTtcbiAgICB0aGlzLnBhZ2UgPSAxO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGEoKTtcbiAgfVxuXG4gIGdldCBzZXJ2aWNlQXBpKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXJ2aWNlQXBpO1xuICB9XG5cbiAgZ2V0IGhhc0NvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBoYXNJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCk7XG4gIH1cblxuICBnZXQgbmFtZUNvbHVtbkRldGFpbCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5NYXN0ZXJEZXRhaWwgPyB0aGlzLmNvbHVtbk1hc3RlckRldGFpbC5wcm9wZXJ0eSA6IG51bGw7XG4gIH1cblxuICBnZXQgdmFsaWRDb2x1bW5zKCkge1xuICAgIGNvbnN0IHR5cGVzVmFsaWQgPSBbXG4gICAgICAnc3RyaW5nJyxcbiAgICAgICdudW1iZXInLFxuICAgICAgJ2Jvb2xlYW4nLFxuICAgICAgJ2RhdGUnLFxuICAgICAgJ3RpbWUnLFxuICAgICAgJ2RhdGVUaW1lJyxcbiAgICAgICdjdXJyZW5jeScsXG4gICAgICAnc3VidGl0bGUnLFxuICAgICAgJ2xpbmsnLFxuICAgICAgJ2xhYmVsJyxcbiAgICAgICdpY29uJyxcbiAgICAgICdjZWxsVGVtcGxhdGUnLFxuICAgICAgJ2NvbHVtblRlbXBsYXRlJ1xuICAgIF07XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoY29sID0+ICFjb2wudHlwZSB8fCB0eXBlc1ZhbGlkLmluY2x1ZGVzKGNvbC50eXBlKSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBzb3J0VHlwZSgpOiBQb1RhYmxlQ29sdW1uU29ydFR5cGUge1xuICAgIHJldHVybiB0aGlzLnNvcnRlZENvbHVtbi5hc2NlbmRpbmcgPyBQb1RhYmxlQ29sdW1uU29ydFR5cGUuQXNjZW5kaW5nIDogUG9UYWJsZUNvbHVtblNvcnRUeXBlLkRlc2NlbmRpbmc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBvRGF0ZTogUG9EYXRlU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9UYWJsZVNlcnZpY2U6IFBvVGFibGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5wb1RhYmxlU2VydmljZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaW5nbGVTZWxlY3QgfHwgdGhpcy5oaWRlU2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xuICAgICAgdGhpcy5oaWRlU2VsZWN0QWxsID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5oZWlnaHQpIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlSGVpZ2h0VGFibGVDb250YWluZXIodGhpcy5oZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbFJvd3MoKSB7XG4gICAgaWYgKCF0aGlzLmhpZGVTZWxlY3RBbGwpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsID0gIXRoaXMuc2VsZWN0QWxsO1xuXG4gICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0uJHNlbGVjdGVkID0gdGhpcy5zZWxlY3RBbGw7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5lbWl0U2VsZWN0QWxsRXZlbnRzKHRoaXMuc2VsZWN0QWxsLCBbLi4udGhpcy5pdGVtc10pO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IGFueSkge1xuICAgIHJvdy4kc2VsZWN0ZWQgPSAhcm93LiRzZWxlY3RlZDtcblxuICAgIHRoaXMuZW1pdFNlbGVjdEV2ZW50cyhyb3cpO1xuXG4gICAgdGhpcy5jb25maWdBZnRlclNlbGVjdFJvdyh0aGlzLml0ZW1zLCByb3cpO1xuICB9XG5cbiAgc2VsZWN0RGV0YWlsUm93KHJvdzogYW55KSB7XG4gICAgdGhpcy5lbWl0U2VsZWN0RXZlbnRzKHJvdyk7XG4gIH1cblxuICBnZXRDbGFzc0NvbG9yKHJvdywgY29sdW1uKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5jb2xvciA/IGBwby10ZXh0LSR7dGhpcy5nZXRDb2x1bW5Db2xvcihyb3csIGNvbHVtbil9YCA6ICcnO1xuICB9XG5cbiAgdG9nZ2xlRGV0YWlsKHJvdzogYW55KSB7XG4gICAgY29uc3Qgcm93U2hvd0RldGFpbCA9IHJvdy4kc2hvd0RldGFpbDtcbiAgICBpZiAodGhpcy5hdXRvQ29sbGFwc2UpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VBbGxJdGVtcyh0aGlzLml0ZW1zKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNob3dEZXRhaWwocm93LCAhcm93U2hvd0RldGFpbCk7XG4gICAgdGhpcy5lbWl0RXhwYW5kRXZlbnRzKHJvdyk7XG4gIH1cblxuICB0b2dnbGVSb3dBY3Rpb24ocm93OiBhbnkpIHtcbiAgICBjb25zdCB0b2dnbGVTaG93QWN0aW9uID0gcm93LiRzaG93QWN0aW9uO1xuXG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0uJHNob3dBY3Rpb24pIHtcbiAgICAgICAgaXRlbS4kc2hvd0FjdGlvbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJvdy4kc2hvd0FjdGlvbiA9ICF0b2dnbGVTaG93QWN0aW9uO1xuICB9XG5cbiAgc29ydENvbHVtbihjb2x1bW46IFBvVGFibGVDb2x1bW4pIHtcbiAgICBpZiAoIXRoaXMuc29ydCB8fCBjb2x1bW4udHlwZSA9PT0gJ2RldGFpbCcgfHwgY29sdW1uLnNvcnRhYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc29ydGVkQ29sdW1uLmFzY2VuZGluZyA9IHRoaXMuc29ydGVkQ29sdW1uLnByb3BlcnR5ID09PSBjb2x1bW4gPyAhdGhpcy5zb3J0ZWRDb2x1bW4uYXNjZW5kaW5nIDogdHJ1ZTtcblxuICAgIHRoaXMuc29ydEFycmF5KGNvbHVtbiwgdGhpcy5zb3J0ZWRDb2x1bW4uYXNjZW5kaW5nKTtcbiAgICB0aGlzLnNvcnRCeS5lbWl0KHsgY29sdW1uLCB0eXBlOiB0aGlzLnNvcnRUeXBlIH0pO1xuICAgIGlmICh0aGlzLmhhc1NlcnZpY2UgJiYgdGhpcy5zb3J0KSB7XG4gICAgICB0aGlzLnNvcnRTdG9yZSA9IHsgY29sdW1uLCB0eXBlOiB0aGlzLnNvcnRUeXBlIH07XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4ucHJvcGVydHkgPSBjb2x1bW47XG4gIH1cblxuICBvblNob3dNb3JlKCk6IHZvaWQge1xuICAgIGNvbnN0IHNvcnQgPSB0aGlzLnNvcnRlZENvbHVtbi5wcm9wZXJ0eSA/IHsgY29sdW1uOiB0aGlzLnNvcnRlZENvbHVtbi5wcm9wZXJ0eSwgdHlwZTogdGhpcy5zb3J0VHlwZSB9IDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMuaGFzU2VydmljZSkge1xuICAgICAgdGhpcy5wYWdlKys7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sb2FkaW5nU2hvd01vcmUgPSB0cnVlO1xuXG4gICAgICB0aGlzLnBvVGFibGVTZXJ2aWNlU3Vic2NyaXB0aW9uID0gdGhpcy5nZXRGaWx0ZXJlZEl0ZW1zKCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zID0gWy4uLnRoaXMuaXRlbXMsIC4uLmRhdGEuaXRlbXNdO1xuICAgICAgICB0aGlzLnNob3dNb3JlRGlzYWJsZWQgPSAhZGF0YS5oYXNOZXh0O1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nU2hvd01vcmUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd01vcmUuZW1pdChzb3J0KTtcbiAgfVxuXG4gIGdldEZpbHRlcmVkSXRlbXMocXVlcnlQYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IFF1ZXJ5UGFyYW1zVHlwZSB9KTogT2JzZXJ2YWJsZTxQb1RhYmxlUmVzcG9uc2VBcGk+IHtcbiAgICBjb25zdCBmaWx0ZXJlZFBhcmFtczogUG9UYWJsZUZpbHRlcmVkSXRlbXNQYXJhbXMgPSB0aGlzLmdldEZpbHRlcmVkUGFyYW1zKHF1ZXJ5UGFyYW1zKTtcblxuICAgIHJldHVybiB0aGlzLnBvVGFibGVTZXJ2aWNlLmdldEZpbHRlcmVkSXRlbXMoZmlsdGVyZWRQYXJhbXMpO1xuICB9XG5cbiAgc2V0VGFibGVSZXNwb25zZVByb3BlcnRpZXMoZGF0YTogUG9UYWJsZVJlc3BvbnNlQXBpKSB7XG4gICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXMgfHwgW107XG4gICAgdGhpcy5zaG93TW9yZURpc2FibGVkID0gIWRhdGEuaGFzTmV4dDtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGluaXRpYWxpemVEYXRhKHBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogUXVlcnlQYXJhbXNUeXBlIH0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5nZXRGaWx0ZXJlZEl0ZW1zKHBhcmFtcykuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICB0aGlzLnNldFRhYmxlUmVzcG9uc2VQcm9wZXJ0aWVzKGRhdGEpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRDb2x1bW5zKGl0ZW06IGFueSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpdGVtKTtcblxuICAgIHJldHVybiBrZXlzXG4gICAgICAuZmlsdGVyKGtleSA9PiB0eXBlb2YgaXRlbVtrZXldICE9PSAnb2JqZWN0JylcbiAgICAgIC5tYXAoa2V5ID0+ICh7IGxhYmVsOiBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoa2V5KSwgcHJvcGVydHk6IGtleSB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0U2hvd0RldGFpbChyb3dJZGVudGlmaWVyOiBhbnkgfCBudW1iZXIsIGlzU2hvd0RldGFpbDogYm9vbGVhbikge1xuICAgIGNvbnN0IGlzUm93SW5kZXggPSB0eXBlb2Ygcm93SWRlbnRpZmllciA9PT0gJ251bWJlcicgJiYgdGhpcy5pdGVtc1tyb3dJZGVudGlmaWVyXTtcblxuICAgIGNvbnN0IHJvdyA9IGlzUm93SW5kZXggPyB0aGlzLml0ZW1zW3Jvd0lkZW50aWZpZXJdIDogcm93SWRlbnRpZmllcjtcblxuICAgIHJvdy4kc2hvd0RldGFpbCA9IGlzU2hvd0RldGFpbDtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGFwc2VBbGxJdGVtcyhpdGVtczogQXJyYXk8eyBba2V5OiBzdHJpbmddOiBhbnkgfT4pIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmIChpdGVtLiRzaG93RGV0YWlsKSB7XG4gICAgICAgIHRoaXMuc2V0U2hvd0RldGFpbChpdGVtLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZW1pdEV4cGFuZEV2ZW50cyhpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ0FmdGVyU2VsZWN0Um93KHJvd3M6IEFycmF5PGFueT4sIHJvdykge1xuICAgIGlmICh0aGlzLnNpbmdsZVNlbGVjdCkge1xuICAgICAgdGhpcy51bnNlbGVjdE90aGVyUm93cyhyb3dzLCByb3cpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaGlkZVNlbGVjdEFsbCkge1xuICAgICAgdGhpcy5zZWxlY3RBbGwgPSB0aGlzLmlzRXZlcnlTZWxlY3RlZChyb3dzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRFeHBhbmRFdmVudHMocm93OiBhbnkpIHtcbiAgICByb3cuJHNob3dEZXRhaWwgPyB0aGlzLmV4cGFuZGVkLmVtaXQocm93KSA6IHRoaXMuY29sbGFwc2VkLmVtaXQocm93KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdEFsbEV2ZW50cyhzZWxlY3RBbGw6IGJvb2xlYW4sIHJvd3M6IGFueSkge1xuICAgIHNlbGVjdEFsbCA/IHRoaXMuYWxsU2VsZWN0ZWQuZW1pdChyb3dzKSA6IHRoaXMuYWxsVW5zZWxlY3RlZC5lbWl0KHJvd3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0RXZlbnRzKHJvdzogYW55KSB7XG4gICAgcm93LiRzZWxlY3RlZCA/IHRoaXMuc2VsZWN0ZWQuZW1pdChyb3cpIDogdGhpcy51bnNlbGVjdGVkLmVtaXQocm93KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uQ29sb3Iocm93LCBjb2x1bW4pIHtcbiAgICBjb25zdCBjb2x1bW5Db2xvciA9IGNvbHVtbi5jb2xvcjtcblxuICAgIHJldHVybiBpc1R5cGVvZihjb2x1bW5Db2xvciwgJ2Z1bmN0aW9uJykgPyBjb2x1bW5Db2xvcihyb3csIGNvbHVtbi5wcm9wZXJ0eSkgOiBjb2x1bW5Db2xvcjtcbiAgfVxuXG4gIC8vIFJldG9ybmEgYSBjb2x1bmEgZGEgbGlzdGEgZGUgY29sdW5hcyBxdWUgw6kgZG8gdGlwbyBkZXRhaWxcbiAgcHJpdmF0ZSBnZXRDb2x1bW5NYXN0ZXJEZXRhaWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wudHlwZSA9PT0gJ2RldGFpbCcpO1xuICB9XG5cbiAgLy8gQ29sdW5hcyBxdWUgc8OjbyBpbnNlcmlkYXMgbm8gPGhlYWQ+IGRhIHRhYmVsYVxuICBwcml2YXRlIGdldE1haW5Db2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLnZhbGlkQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlICE9PSBmYWxzZSk7XG4gIH1cblxuICAvLyBSZXRvcm5hIGFzIGNvbHVuYXMgY29tIHN0YXR1c1xuICBwcml2YXRlIGdldFN1YnRpdGxlQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLnR5cGUgPT09ICdzdWJ0aXRsZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0V2ZXJ5U2VsZWN0ZWQoaXRlbXM6IEFycmF5PGFueT4pOiBib29sZWFuIHtcbiAgICBjb25zdCBzb21lQ2hlY2tlZE9ySW5kZXRlcm1pbmF0ZSA9IGl0ZW0gPT4gaXRlbS4kc2VsZWN0ZWQgfHwgaXRlbS4kc2VsZWN0ZWQgPT09IG51bGw7XG4gICAgY29uc3QgZXZlcnlDaGVja2VkID0gaXRlbSA9PiBpdGVtLiRzZWxlY3RlZDtcblxuICAgIGlmIChpdGVtcy5ldmVyeShldmVyeUNoZWNrZWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbXMuc29tZShzb21lQ2hlY2tlZE9ySW5kZXRlcm1pbmF0ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgb25DaGFuZ2VDb2x1bW5zKCkge1xuICAgIHRoaXMuc2V0TWFpbkNvbHVtbnMoKTtcbiAgICB0aGlzLnNldENvbHVtbk1hc3RlckRldGFpbCgpO1xuICAgIHRoaXMuc2V0U3VidGl0bGVDb2x1bW5zKCk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbHVtbkxpbmsoKSB7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgIGlmIChjb2x1bW5bJ3R5cGUnXSA9PT0gJ2xpbmsnICYmICFjb2x1bW5bJ2xpbmsnXSkge1xuICAgICAgICBjb2x1bW5bJ2xpbmsnXSA9ICdsaW5rJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29sdW1uTWFzdGVyRGV0YWlsKCkge1xuICAgIHRoaXMuY29sdW1uTWFzdGVyRGV0YWlsID0gdGhpcy5nZXRDb2x1bW5NYXN0ZXJEZXRhaWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TWFpbkNvbHVtbnMoKSB7XG4gICAgdGhpcy5tYWluQ29sdW1ucyA9IHRoaXMuZ2V0TWFpbkNvbHVtbnMoKTtcblxuICAgIHRoaXMuaGFzTWFpbkNvbHVtbnMgPSAhIXRoaXMubWFpbkNvbHVtbnMubGVuZ3RoO1xuXG4gICAgdGhpcy5hbGxDb2x1bW5zV2lkdGhQaXhlbHMgPSB0aGlzLnZlcmlmeVdpZHRoQ29sdW1uc1BpeGVscygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdWJ0aXRsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5zdWJ0aXRsZUNvbHVtbnMgPSB0aGlzLmdldFN1YnRpdGxlQ29sdW1ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0QXJyYXkoY29sdW1uOiBQb1RhYmxlQ29sdW1uLCBhc2NlbmRpbmc6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBpdGVtc0xpc3QgPSBbLi4udGhpcy5pdGVtc107XG4gICAgaXRlbXNMaXN0LnNvcnQoKGxlZnRTaWRlLCByaWdodFNpZGUpOiBudW1iZXIgPT5cbiAgICAgIHNvcnRWYWx1ZXMobGVmdFNpZGVbY29sdW1uLnByb3BlcnR5XSwgcmlnaHRTaWRlW2NvbHVtbi5wcm9wZXJ0eV0sIGFzY2VuZGluZylcbiAgICApO1xuICAgIHRoaXMuaXRlbXMgPSBpdGVtc0xpc3Q7XG4gIH1cblxuICBwcml2YXRlIHVuc2VsZWN0T3RoZXJSb3dzKHJvd3M6IEFycmF5PGFueT4sIHJvdykge1xuICAgIHJvd3MuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtICE9PSByb3cpIHtcbiAgICAgICAgaXRlbS4kc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5V2lkdGhDb2x1bW5zUGl4ZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmhhc01haW5Db2x1bW5zID8gdGhpcy5tYWluQ29sdW1ucy5ldmVyeShjb2x1bW4gPT4gY29sdW1uLndpZHRoICYmIGNvbHVtbi53aWR0aC5pbmNsdWRlcygncHgnKSkgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2VydmljZShzZXJ2aWNlOiBzdHJpbmcpIHtcbiAgICBpZiAoc2VydmljZSAmJiBpc1R5cGVvZihzZXJ2aWNlLCAnc3RyaW5nJykpIHtcbiAgICAgIHRoaXMucG9UYWJsZVNlcnZpY2Uuc2V0VXJsKHNlcnZpY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyZWRQYXJhbXMocXVlcnlQYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IFF1ZXJ5UGFyYW1zVHlwZSB9KSB7XG4gICAgY29uc3QgeyBwYWdlLCBwYWdlU2l6ZSwgc29ydFN0b3JlIH0gPSB0aGlzO1xuXG4gICAgY29uc3QgZmlsdGVyZWRQYXJhbXMgPSB7fTtcbiAgICBjb25zdCBvcmRlciA9IHRoaXMuZ2V0T3JkZXJQYXJhbShzb3J0U3RvcmUpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHsgcGFnZSwgcGFnZVNpemUsIG9yZGVyLCAuLi5xdWVyeVBhcmFtcyB9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcGFyYW1zKSB7XG4gICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgJiYgcGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmaWx0ZXJlZFBhcmFtc1trZXldID0gcGFyYW1zW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJlZFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JkZXJQYXJhbShzb3J0OiBQb1RhYmxlQ29sdW1uU29ydCA9IHsgdHlwZTogdW5kZWZpbmVkIH0pIHtcbiAgICBjb25zdCB7IGNvbHVtbiwgdHlwZSB9ID0gc29ydDtcblxuICAgIGlmICghY29sdW1uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFBvVGFibGVDb2x1bW5Tb3J0VHlwZS5EZXNjZW5kaW5nKSB7XG4gICAgICByZXR1cm4gYC0ke2NvbHVtbi5wcm9wZXJ0eX1gO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtjb2x1bW4ucHJvcGVydHl9YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjYWxjdWxhdGVIZWlnaHRUYWJsZUNvbnRhaW5lcihoZWlnaHQpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjYWxjdWxhdGVXaWR0aEhlYWRlcnMoKTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2hlY2tJbmZpbml0ZVNjcm9sbCgpO1xufVxuIl19
@@ -68,6 +68,7 @@ export class PoTableColumnManagerComponent {
68
68
  this.visibleColumns = [];
69
69
  this._maxColumns = PoTableColumnManagerMaxColumnsDefault;
70
70
  this.defaultColumns = [];
71
+ this.minColumns = 1;
71
72
  const language = languageService.getShortLanguage();
72
73
  this.literals = {
73
74
  ...poTableColumnManagerLiteralsDefault[poLocaleDefault],
@@ -111,9 +112,14 @@ export class PoTableColumnManagerComponent {
111
112
  }
112
113
  verifyToEmitChange(event) {
113
114
  const newColumns = [...event];
114
- if (this.allowsChangeVisibleColumns()) {
115
+ if (newColumns.length >= 1 && this.allowsChangeVisibleColumns()) {
115
116
  this.emitChangesToSelectedColumns(newColumns);
116
117
  }
118
+ // Desabilita ultimo checkbox ativo
119
+ if (newColumns.length === 1) {
120
+ const columnsOptions = this.mapTableColumnsToCheckboxOptions(this.columnUpdate);
121
+ this.columnsOptions = this.disabledLastColumn(columnsOptions);
122
+ }
117
123
  }
118
124
  emitChangesToSelectedColumns(newColumns) {
119
125
  this.visibleColumns = [...newColumns];
@@ -233,14 +239,22 @@ export class PoTableColumnManagerComponent {
233
239
  columnsOptions.push({
234
240
  value: column.property,
235
241
  label: this.getColumnTitleLabel(column),
236
- disabled: this.isDisableColumn(column.property)
242
+ disabled: this.isDisableColumn(column.property),
243
+ visible: column.visible
237
244
  });
238
245
  }
239
246
  });
240
247
  return columnsOptions;
241
248
  }
249
+ disabledLastColumn(columns) {
250
+ return columns.map(column => ({
251
+ ...column,
252
+ disabled: column.type !== 'detail' && column.visible ? true : false
253
+ }));
254
+ }
242
255
  onChangeColumns(columns) {
243
256
  const { currentValue = [], previousValue = [] } = columns;
257
+ this.columnUpdate = columns.currentValue;
244
258
  // atualizara o defaultColumns, quando for a primeira vez ou quando o defaultColumns for diferente do currentValue
245
259
  if (!this.lastVisibleColumnsSelected && this.stringify(this.defaultColumns) !== this.stringify(currentValue)) {
246
260
  this.defaultColumns = [...currentValue];
@@ -313,4 +327,4 @@ PoTableColumnManagerComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ typ
313
327
  type: Input,
314
328
  args: ['p-max-columns']
315
329
  }] }); })();
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtY29sdW1uLW1hbmFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLXRhYmxlL3BvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyL3BvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby10YWJsZS9wby10YWJsZS1jb2x1bW4tbWFuYWdlci9wby10YWJsZS1jb2x1bW4tbWFuYWdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUlOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFMUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7O0lDbEJyRix3Q0FBb0g7SUFBbkMseUxBQVcsd0JBQWlCLElBQUksQ0FBQyxJQUFDO0lBQ2pILDhCQUE0QyxhQUFBO0lBQ1EsWUFBNkI7SUFBQSxpQkFBTTtJQUVyRiw4QkFBa0QsZ0JBQUE7SUFHOUMsNktBQVMsV0FBZSxJQUFDO0lBQzFCLGlCQUFTLEVBQUEsRUFBQTtJQUlkLDhCQUEwQywyQkFBQTtJQUd0QyxvUEFBNEIsMkxBR2hCLDRCQUFxQixLQUFLLENBQUMsSUFIWDtJQUs5QixpQkFBb0IsRUFBQTtJQUd0Qiw4QkFBNEMscUJBQUE7SUFNeEMseUxBQVcsZ0JBQVMsSUFBQztJQUV2QixpQkFBWSxFQUFBLEVBQUE7OztJQS9Cb0Isd0NBQW1C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QUFDLGlDQUFpQztZQUVKLG9CQUFvQjtrQkFBdkQsTUFBTTttQkFBQywwQkFBMEI7WUFJRSxvQkFBb0I7a0JBQXZELE1BQU07bUJBQUMsMEJBQTBCO1lBRUwsY0FBYztrQkFBMUMsTUFBTTttQkFBQyxtQkFBbUI7WUFZQyxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgUmVuZGVyZXIyLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGNhcGl0YWxpemVGaXJzdExldHRlciwgY29udmVydFRvSW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0NoZWNrYm94R3JvdXBPcHRpb24gfSBmcm9tICcuLi8uLi9wby1maWVsZC9wby1jaGVja2JveC1ncm91cC9pbnRlcmZhY2VzL3BvLWNoZWNrYm94LWdyb3VwLW9wdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Qb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcG8tcG9wb3Zlci9wby1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcG9Mb2NhbGVEZWZhdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2UuY29uc3RhbnQnO1xuaW1wb3J0IHsgUG9UYWJsZUNvbHVtbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG8tdGFibGUtY29sdW1uLmludGVyZmFjZSc7XG5cbmNvbnN0IFBvVGFibGVDb2x1bW5NYW5hZ2VyTWF4Q29sdW1uc0RlZmF1bHQgPSA5OTk5OTtcblxuZXhwb3J0IGNvbnN0IHBvVGFibGVDb2x1bW5NYW5hZ2VyTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjoge1xuICAgIGNvbHVtbnNNYW5hZ2VyOiAnQ29sdW1ucyBtYW5hZ2VyJyxcbiAgICByZXN0b3JlRGVmYXVsdDogJ1Jlc3RvcmUgZGVmYXVsdCdcbiAgfSxcbiAgZXM6IHtcbiAgICBjb2x1bW5zTWFuYWdlcjogJ0dlcmVudGUgZGUgY29sdW1uYScsXG4gICAgcmVzdG9yZURlZmF1bHQ6ICdSZXN0YXVyYXIgcG9yIGRlZmVjdG8nXG4gIH0sXG4gIHB0OiB7XG4gICAgY29sdW1uc01hbmFnZXI6ICdHZXJlbmNpYWRvciBkZSBjb2x1bmFzJyxcbiAgICByZXN0b3JlRGVmYXVsdDogJ1Jlc3RhdXJhciBwYWRyw6NvJ1xuICB9LFxuICBydToge1xuICAgIGNvbHVtbnNNYW5hZ2VyOiAn0LzQtdC90LXQtNC20LXRgCDQutC+0LvQvtC90L7QuicsXG4gICAgcmVzdG9yZURlZmF1bHQ6ICfRgdCx0YDQvtGBINC90LDRgdGC0YDQvtC10LonXG4gIH1cbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQb1RhYmxlQ29sdW1uTWFuYWdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChQb1BvcG92ZXJDb21wb25lbnQpIHBvcG92ZXI6IFBvUG9wb3ZlckNvbXBvbmVudDtcblxuICBASW5wdXQoJ3AtY29sdW1ucycpIGNvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+ID0gW107XG5cbiAgQElucHV0KCdwLXRhcmdldCcpIHRhcmdldDogRWxlbWVudFJlZjtcblxuICBASW5wdXQoJ3AtY29sdW1ucy1kZWZhdWx0JykgY29sdW5zRGVmYXVsdDogQXJyYXk8UG9UYWJsZUNvbHVtbj47XG5cbiAgQElucHV0KCdwLWxhc3QtdmlzaWJsZS1jb2x1bW5zLXNlbGVjdGVkJykgbGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQ6IEFycmF5PFBvVGFibGVDb2x1bW4+ID0gW107XG5cbiAgQE91dHB1dCgncC12aXNpYmxlLWNvbHVtbnMtY2hhbmdlJykgdmlzaWJsZUNvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFBvVGFibGVDb2x1bW4+PigpO1xuXG4gIC8vIEV2ZW50byBkaXNwYXJhZG8gYW8gZmVjaGFyIG8gcG9wb3ZlciBkbyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzIGFww7NzIGFsdGVyYXIgYXMgY29sdW5hcyB2aXPDrXZlaXMuXG4gIC8vIE8gcG8tdGFibGUgZW52aWEgY29tbyBwYXLDom1ldHJvIHVtIGFycmF5IGRlIHN0cmluZyBjb20gYXMgY29sdW5hcyB2aXPDrXZlaXMgYXR1YWxpemFkYXMuIFBvciBleGVtcGxvOiBbXCJpZENhcmRcIiwgXCJuYW1lXCIsIFwiaGlyZVN0YXR1c1wiLCBcImFnZVwiXS5cbiAgQE91dHB1dCgncC1jaGFuZ2UtdmlzaWJsZS1jb2x1bW5zJykgY2hhbmdlVmlzaWJsZUNvbHVtbnMgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PHN0cmluZz4+KCk7XG5cbiAgQE91dHB1dCgncC1pbml0aWFsLWNvbHVtbnMnKSBpbml0aWFsQ29sdW1ucyA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U3RyaW5nPj4oKTtcblxuICBsaXRlcmFscztcbiAgY29sdW1uc09wdGlvbnM6IEFycmF5PFBvQ2hlY2tib3hHcm91cE9wdGlvbj4gPSBbXTtcbiAgdmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICBwcml2YXRlIF9tYXhDb2x1bW5zOiBudW1iZXIgPSBQb1RhYmxlQ29sdW1uTWFuYWdlck1heENvbHVtbnNEZWZhdWx0O1xuICBwcml2YXRlIGRlZmF1bHRDb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuICBwcml2YXRlIHJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlc3RvcmVEZWZhdWx0RXZlbnQ6IGJvb2xlYW47XG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRWYWx1ZTogQXJyYXk8c3RyaW5nPjtcblxuICBASW5wdXQoJ3AtbWF4LWNvbHVtbnMnKSBzZXQgbWF4Q29sdW1ucyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4Q29sdW1ucyA9IGNvbnZlcnRUb0ludCh2YWx1ZSwgUG9UYWJsZUNvbHVtbk1hbmFnZXJNYXhDb2x1bW5zRGVmYXVsdCk7XG4gIH1cblxuICBnZXQgbWF4Q29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4Q29sdW1ucztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgbGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSkge1xuICAgIGNvbnN0IGxhbmd1YWdlID0gbGFuZ3VhZ2VTZXJ2aWNlLmdldFNob3J0TGFuZ3VhZ2UoKTtcblxuICAgIHRoaXMubGl0ZXJhbHMgPSB7XG4gICAgICAuLi5wb1RhYmxlQ29sdW1uTWFuYWdlckxpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgLi4ucG9UYWJsZUNvbHVtbk1hbmFnZXJMaXRlcmFsc0RlZmF1bHRbbGFuZ3VhZ2VdXG4gICAgfTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCB7IGNvbHVtbnMsIG1heENvbHVtbnMsIHRhcmdldCB9ID0gY2hhbmdlcztcblxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgdGhpcy5vbkNoYW5nZUNvbHVtbnMoY29sdW1ucyk7XG4gICAgfVxuXG4gICAgaWYgKG1heENvbHVtbnMpIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVzKHRoaXMuY29sdW1ucyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIGFxdWkgY2hlZ2FtIG9zIGV2ZW50b3MgZG8gY2hlY2tib3ggZSBkbyBjbG9zZSBkbyBwb3BvdmVyIHF1ZSB0YW1iw6ltIMOpIGRpc3BhcmFkbyBubyByZXNpemVcbiAgY2hlY2tDaGFuZ2VzKGV2ZW50OiBBcnJheTxzdHJpbmc+ID0gW10sIGVtaXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMudmVyaWZ5VG9FbWl0Q2hhbmdlKGV2ZW50KTtcblxuICAgIGlmIChlbWl0KSB7XG4gICAgICAvLyBjb250cm9sYSBlbWlzc8O1ZXMgcGFyYSBvIGRldlxuICAgICAgdGhpcy52ZXJpZnlUb0VtaXRWaXNpYmxlQ29sdW1ucygpO1xuICAgIH1cbiAgfVxuXG4gIHJlc3RvcmUoKSB7XG4gICAgdGhpcy5yZXN0b3JlRGVmYXVsdEV2ZW50ID0gdHJ1ZTtcbiAgICBjb25zdCBkZWZhdWx0Q29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnModGhpcy5kZWZhdWx0Q29sdW1ucyk7XG4gICAgdGhpcy5pbml0aWFsQ29sdW1ucy5lbWl0KHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnModGhpcy5jb2x1bnNEZWZhdWx0KSk7XG4gICAgdGhpcy5jaGVja0NoYW5nZXMoZGVmYXVsdENvbHVtbnMsIHRoaXMucmVzdG9yZURlZmF1bHRFdmVudCk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVRvRW1pdENoYW5nZShldmVudDogQXJyYXk8c3RyaW5nPikge1xuICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbLi4uZXZlbnRdO1xuXG4gICAgaWYgKHRoaXMuYWxsb3dzQ2hhbmdlVmlzaWJsZUNvbHVtbnMoKSkge1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlc1RvU2VsZWN0ZWRDb2x1bW5zKG5ld0NvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdENoYW5nZXNUb1NlbGVjdGVkQ29sdW1ucyhuZXdDb2x1bW5zOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IFsuLi5uZXdDb2x1bW5zXTtcbiAgICBjb25zdCB2aXNpYmxlVGFibGVDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlVGFibGVDb2x1bW5zKHRoaXMudmlzaWJsZUNvbHVtbnMpO1xuXG4gICAgLy8gZW1pdGUgYWx0ZXJhw6fDo28gbmFzIGNvbHVuYXMgc2VsZWNpb25hZGFzLCBwb3LDqW0gbsOjbyBlbWl0ZSBwYXJhIG8gZGV2LlxuICAgIHRoaXMudmlzaWJsZUNvbHVtbnNDaGFuZ2UuZW1pdCh2aXNpYmxlVGFibGVDb2x1bW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsb3dzQ2hhbmdlVmlzaWJsZUNvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmlzaWJsZVRhYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZVRhYmxlQ29sdW1ucyh0aGlzLnZpc2libGVDb2x1bW5zKTtcblxuICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeSh2aXNpYmxlVGFibGVDb2x1bW5zKSAhPT0gdGhpcy5zdHJpbmdpZnkodGhpcy5jb2x1bW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5VG9FbWl0VmlzaWJsZUNvbHVtbnMoKSB7XG4gICAgaWYgKHRoaXMucmVzdG9yZURlZmF1bHRFdmVudCkge1xuICAgICAgLy8gdmVpbyBkbyByZXN0b3JlIGRlZmF1bHRcbiAgICAgIHRoaXMudmVyaWZ5UmVzdG9yZVZhbHVlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb2kgZGlzcGFyYWRvIG5vIGNsb3NlIHBvcG92ZXI7XG4gICAgICB0aGlzLnZlcmlmeU9uQ2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVJlc3RvcmVWYWx1ZXMoKSB7XG4gICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSBbLi4udGhpcy5kZWZhdWx0Q29sdW1uc107XG4gICAgY29uc3QgZGVmYXVsdFZpc2libGVDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlQ29sdW1ucyhkZWZhdWx0Q29sdW1ucyk7XG5cbiAgICBpZiAodGhpcy5hbGxvd3NDaGFuZ2VTZWxlY3RlZENvbHVtbnMoZGVmYXVsdFZpc2libGVDb2x1bW5zKSkge1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlT25SZXN0b3JlKGRlZmF1bHRWaXNpYmxlQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXN0b3JlRGVmYXVsdEV2ZW50ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2VPblJlc3RvcmUoZGVmYXVsdFZpc2libGVDb2x1bW5zOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IFsuLi5kZWZhdWx0VmlzaWJsZUNvbHVtbnNdO1xuICAgIGNvbnN0IHZpc2libGVUYWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVUYWJsZUNvbHVtbnModGhpcy52aXNpYmxlQ29sdW1ucyk7XG5cbiAgICB0aGlzLnZpc2libGVDb2x1bW5zQ2hhbmdlLmVtaXQodmlzaWJsZVRhYmxlQ29sdW1ucyk7XG4gIH1cblxuICBwcml2YXRlIGFsbG93c0NoYW5nZVNlbGVjdGVkQ29sdW1ucyhkZWZhdWx0VmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnModGhpcy5jb2x1bW5zKTtcblxuICAgIHJldHVybiAhdGhpcy5pc0VxdWFsQXJyYXlzKGRlZmF1bHRWaXNpYmxlQ29sdW1ucywgdmlzaWJsZUNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlPbkNsb3NlKCkge1xuICAgIGlmICh0aGlzLmFsbG93c0VtaXNzaW9uKCkpIHtcbiAgICAgIHRoaXMuZW1pdFZpc2libGVDb2x1bW5zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0VmlzaWJsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5sYXN0RW1pdHRlZFZhbHVlID0gWy4uLnRoaXMudmlzaWJsZUNvbHVtbnNdO1xuICAgIHRoaXMuY2hhbmdlVmlzaWJsZUNvbHVtbnMuZW1pdCh0aGlzLnZpc2libGVDb2x1bW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsb3dzRW1pc3Npb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdXBkYXRlZFZpc2libGVDb2x1bW5zID0gdGhpcy52aXNpYmxlQ29sdW1ucyA/IFsuLi50aGlzLnZpc2libGVDb2x1bW5zXSA6IFtdO1xuICAgIGNvbnN0IGxhc3RFbWl0dGVkVmFsdWUgPSB0aGlzLmxhc3RFbWl0dGVkVmFsdWUgPyBbLi4udGhpcy5sYXN0RW1pdHRlZFZhbHVlXSA6IFtdO1xuICAgIGNvbnN0IGxhc3RWaXNpYmxlQ29sdW1uc1NlbGVjdGVkID0gdGhpcy5sYXN0VmlzaWJsZUNvbHVtbnNTZWxlY3RlZCA/IFsuLi50aGlzLmxhc3RWaXNpYmxlQ29sdW1uc1NlbGVjdGVkXSA6IFtdO1xuICAgIGNvbnN0IGxhc3RWaXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMobGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNVcGRhdGUodXBkYXRlZFZpc2libGVDb2x1bW5zLCBsYXN0RW1pdHRlZFZhbHVlKSB8fFxuICAgICAgdGhpcy5pc0ZpcnN0VGltZSh1cGRhdGVkVmlzaWJsZUNvbHVtbnMsIGxhc3RWaXNpYmxlQ29sdW1ucylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpcnN0VGltZSh1cGRhdGVkVmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4sIGxhc3RWaXNpYmxlQ29sdW1uczogQXJyYXk8c3RyaW5nPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5sYXN0RW1pdHRlZFZhbHVlICYmICF0aGlzLmlzRXF1YWxBcnJheXModXBkYXRlZFZpc2libGVDb2x1bW5zLCBsYXN0VmlzaWJsZUNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1VwZGF0ZSh1cGRhdGVkVmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4sIGxhc3RFbWl0dGVkVmFsdWU6IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sYXN0RW1pdHRlZFZhbHVlICYmICF0aGlzLmlzRXF1YWxBcnJheXModXBkYXRlZFZpc2libGVDb2x1bW5zLCBsYXN0RW1pdHRlZFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNFcXVhbEFycmF5cyhmaXJzdDogQXJyYXk8c3RyaW5nPiwgc2Vjb25kOiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb25lID0gZmlyc3QgPyBbLi4uZmlyc3RdIDogW107XG4gICAgY29uc3QgdHdvID0gc2Vjb25kID8gWy4uLnNlY29uZF0gOiBbXTtcbiAgICBjb25zdCBmaXJzdFNvcnQgPSBvbmUuc2xpY2UoKS5zb3J0KCk7XG4gICAgY29uc3Qgc2Vjb25kU29ydCA9IHR3by5zbGljZSgpLnNvcnQoKTtcbiAgICBjb25zdCBmaXJzdFN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGZpcnN0U29ydCk7XG4gICAgY29uc3Qgc2Vjb25kU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2Vjb25kU29ydCk7XG5cbiAgICByZXR1cm4gZmlyc3RTdHJpbmcgPT09IHNlY29uZFN0cmluZztcbiAgfVxuXG4gIC8vIGRlc2FiaWxpdGFyw6EgYXMgY29sdW5hcywgcXVlIG7Do28gZXN0aXZlcmVtIHNlbGVjaW9uYWRhcywgYXDDs3MgZXhlZGVyIG8gbnVtZXJvIG1heGltbyBkZSBjb2x1bmFzLlxuICBwcml2YXRlIGRpc2FibGVDb2x1bW5zT3B0aW9ucyhjb2x1bW5zOiBBcnJheTxQb0NoZWNrYm94R3JvdXBPcHRpb24+ID0gW10pIHtcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAuLi5jb2x1bW4sXG4gICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVDb2x1bW4oY29sdW1uLnZhbHVlKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uVGl0bGVMYWJlbChjb2x1bW46IFBvVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4gY29sdW1uLmxhYmVsIHx8IGNhcGl0YWxpemVGaXJzdExldHRlcihjb2x1bW4ucHJvcGVydHkpO1xuICB9XG5cbiAgLyoqIFJldG9ybmEgdW0gQXJyYXkgZGUgY29sdW1uLnByb3BlcnR5IGRhcyBjb2x1bmFzIHF1ZSBzw6NvIHZpc2l2ZWlzLiAqL1xuICBwcml2YXRlIGdldFZpc2libGVDb2x1bW5zKGNvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+KTogQXJyYXk8c3RyaW5nPiB7XG4gICAgbGV0IHZpc2libGVDb2x1bW5zID0gW107XG5cbiAgICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgIGlmICh0aGlzLmlzVmlzaWJsZUNvbHVtbihjb2x1bW4sIHZpc2libGVDb2x1bW5zKSkge1xuICAgICAgICB2aXNpYmxlQ29sdW1ucyA9IFsuLi52aXNpYmxlQ29sdW1ucywgY29sdW1uLnByb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB2aXNpYmxlQ29sdW1ucztcbiAgfVxuXG4gIHByaXZhdGUgaXNWaXNpYmxlQ29sdW1uKGNvbHVtbjogUG9UYWJsZUNvbHVtbiwgdmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1uLnZpc2libGUgIT09IGZhbHNlICYmIHZpc2libGVDb2x1bW5zLmxlbmd0aCA8IHRoaXMubWF4Q29sdW1ucyAmJiBjb2x1bW4udHlwZSAhPT0gJ2RldGFpbCc7XG4gIH1cblxuICAvKiogUmV0b3JuYSB1bSBBcnJheSBQb1RhYmxlQ29sdW1uIGEgcGFydGlyIGRhcyBjb2x1bmFzIHZpc2l2ZWlzIG5vIGdlcmVuY2lhZG9yIGRlIGNvbHVuYXMuICovXG4gIHByaXZhdGUgZ2V0VmlzaWJsZVRhYmxlQ29sdW1ucyh2aXNpYmxlQ29sdW1uczogQXJyYXk8c3RyaW5nPik6IEFycmF5PFBvVGFibGVDb2x1bW4+IHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zID8gWy4uLnRoaXMuY29sdW1uc10gOiBbXTtcblxuICAgIHJldHVybiBjb2x1bW5zLm1hcChjb2x1bW4gPT4gKHtcbiAgICAgIC4uLmNvbHVtbixcbiAgICAgIHZpc2libGU6IHZpc2libGVDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5wcm9wZXJ0eSkgfHwgY29sdW1uLnR5cGUgPT09ICdkZXRhaWwnXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGlzdGVuZXJzKCkge1xuICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnBvcG92ZXIgJiYgIXRoaXMucG9wb3Zlci5pc0hpZGRlbikge1xuICAgICAgICB0aGlzLnBvcG92ZXIuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEaXNhYmxlQ29sdW1uKHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGggPj0gdGhpcy5tYXhDb2x1bW5zID8gIXRoaXMudmlzaWJsZUNvbHVtbnMuaW5jbHVkZXMocHJvcGVydHkpIDogZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIG1hcFRhYmxlQ29sdW1uc1RvQ2hlY2tib3hPcHRpb25zKGNvbHVtbnM6IEFycmF5PFBvVGFibGVDb2x1bW4+ID0gW10pIHtcbiAgICBjb25zdCB0YWJsZUNvbHVtbnMgPSBbLi4uY29sdW1uc107XG4gICAgY29uc3QgY29sdW1uc09wdGlvbnMgPSBbXTtcblxuICAgIHRhYmxlQ29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgIT09ICdkZXRhaWwnKSB7XG4gICAgICAgIGNvbHVtbnNPcHRpb25zLnB1c2goe1xuICAgICAgICAgIHZhbHVlOiBjb2x1bW4ucHJvcGVydHksXG4gICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0Q29sdW1uVGl0bGVMYWJlbChjb2x1bW4pLFxuICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmlzRGlzYWJsZUNvbHVtbihjb2x1bW4ucHJvcGVydHkpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbHVtbnNPcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZUNvbHVtbnMoY29sdW1uczogU2ltcGxlQ2hhbmdlKSB7XG4gICAgY29uc3QgeyBjdXJyZW50VmFsdWUgPSBbXSwgcHJldmlvdXNWYWx1ZSA9IFtdIH0gPSBjb2x1bW5zO1xuXG4gICAgLy8gYXR1YWxpemFyYSBvIGRlZmF1bHRDb2x1bW5zLCBxdWFuZG8gZm9yIGEgcHJpbWVpcmEgdmV6IG91IHF1YW5kbyBvIGRlZmF1bHRDb2x1bW5zIGZvciBkaWZlcmVudGUgZG8gY3VycmVudFZhbHVlXG4gICAgaWYgKCF0aGlzLmxhc3RWaXNpYmxlQ29sdW1uc1NlbGVjdGVkICYmIHRoaXMuc3RyaW5naWZ5KHRoaXMuZGVmYXVsdENvbHVtbnMpICE9PSB0aGlzLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKSB7XG4gICAgICB0aGlzLmRlZmF1bHRDb2x1bW5zID0gWy4uLmN1cnJlbnRWYWx1ZV07XG4gICAgfVxuXG4gICAgLy8gdmVyaWZpY2Egc2UgbyB2YWxvciBhbnRlcmlvciDDqSBkaWZlcmVudGUgZG8gYXR1YWwgcGFyYSBhdHVhbGl6YXIgYXMgY29sdW1uc09wdGlvbnMgYXBlbmFzIHF1YW5kbyBmb3IgbmVjZXNzYXJpb1xuICAgIGlmICh0aGlzLnN0cmluZ2lmeShwcmV2aW91c1ZhbHVlKSAhPT0gdGhpcy5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZXMoY3VycmVudFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlcyhjdXJyZW50VmFsdWU6IEFycmF5PFBvVGFibGVDb2x1bW4+KSB7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVDb2x1bW5zKGN1cnJlbnRWYWx1ZSk7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IFsuLi52aXNpYmxlQ29sdW1uc107XG5cbiAgICBjb25zdCBjb2x1bW5zT3B0aW9ucyA9IHRoaXMubWFwVGFibGVDb2x1bW5zVG9DaGVja2JveE9wdGlvbnMoY3VycmVudFZhbHVlKTtcbiAgICB0aGlzLmNvbHVtbnNPcHRpb25zID0gdGhpcy5kaXNhYmxlQ29sdW1uc09wdGlvbnMoY29sdW1uc09wdGlvbnMpO1xuXG4gICAgdGhpcy5jaGVja0NoYW5nZXModmlzaWJsZUNvbHVtbnMsIGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLnJlc2l6ZUxpc3RlbmVyKSB7XG4gICAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnkoY29sdW1uczogQXJyYXk8UG9UYWJsZUNvbHVtbj4pIHtcbiAgICAvLyBuw6NvIGZheiBvIHN0cmluZ2lmeSBkYSBwcm9wcmllZGFkZSBpY29uIGUgc2VhcmNoU2VydmljZSwgcG9pcyBwb2RlIGNvbnRlciBvYmpldG8gY29tcGxleG8gZSBkaXNwYXJhciB1bSBlcnJvLlxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShjb2x1bW5zLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGtleSAhPT0gJ2ljb24nICYmIGtleSAhPT0gJ3NlYXJjaFNlcnZpY2UnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPHBvLXBvcG92ZXIgI3BvcG92ZXIgKm5nSWY9XCJ0YXJnZXRcIiBbcC10YXJnZXRdPVwidGFyZ2V0XCIgcC1wb3NpdGlvbj1cImJvdHRvbS1sZWZ0XCIgKHAtY2xvc2UpPVwiY2hlY2tDaGFuZ2VzKFtdLCB0cnVlKVwiPlxuICA8ZGl2IGNsYXNzPVwicG8tdGFibGUtY29sdW1uLW1hbmFnZXItaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLWhlYWRlci10aXRsZVwiPnt7IGxpdGVyYWxzLmNvbHVtbnNNYW5hZ2VyIH19PC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tdGFibGUtY29sdW1uLW1hbmFnZXItaGVhZGVyLWNsb3NlXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLW1hbmFnZXItaGVhZGVyLWNsb3NlLWJ1dHRvbiBwby1jbGlja2FibGUgcG8taWNvbiBwby1pY29uLWNsb3NlXCJcbiAgICAgICAgKGNsaWNrKT1cInBvcG92ZXIuY2xvc2UoKVwiXG4gICAgICA+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1ib2R5XCI+XG4gICAgPHBvLWNoZWNrYm94LWdyb3VwXG4gICAgICBuYW1lPVwidmlzaWJsZUNvbHVtbnNcIlxuICAgICAgWyhuZ01vZGVsKV09XCJ2aXNpYmxlQ29sdW1uc1wiXG4gICAgICBwLWNvbHVtbnM9XCIxXCJcbiAgICAgIFtwLW9wdGlvbnNdPVwiY29sdW1uc09wdGlvbnNcIlxuICAgICAgKHAtY2hhbmdlKT1cImNoZWNrQ2hhbmdlcygkZXZlbnQsIGZhbHNlKVwiXG4gICAgPlxuICAgIDwvcG8tY2hlY2tib3gtZ3JvdXA+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1mb290ZXJcIj5cbiAgICA8cG8tYnV0dG9uXG4gICAgICBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLWZvb3Rlci1yZXN0b3JlXCJcbiAgICAgIHAtc21hbGxcbiAgICAgIHAta2luZD1cInRlcnRpYXJ5XCJcbiAgICAgIFtwLWxhYmVsXT1cImxpdGVyYWxzLnJlc3RvcmVEZWZhdWx0XCJcbiAgICAgIChwLWNsaWNrKT1cInJlc3RvcmUoKVwiXG4gICAgPlxuICAgIDwvcG8tYnV0dG9uPlxuICA8L2Rpdj5cbjwvcG8tcG9wb3Zlcj5cbiJdfQ==
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tdGFibGUtY29sdW1uLW1hbmFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLXRhYmxlL3BvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyL3BvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby10YWJsZS9wby10YWJsZS1jb2x1bW4tbWFuYWdlci9wby10YWJsZS1jb2x1bW4tbWFuYWdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUlOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFMUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7Ozs7O0lDbEJyRix3Q0FBb0g7SUFBbkMseUxBQVcsd0JBQWlCLElBQUksQ0FBQyxJQUFDO0lBQ2pILDhCQUE0QyxhQUFBO0lBQ1EsWUFBNkI7SUFBQSxpQkFBTTtJQUVyRiw4QkFBa0QsZ0JBQUE7SUFHOUMsNktBQVMsV0FBZSxJQUFDO0lBQzFCLGlCQUFTLEVBQUEsRUFBQTtJQUlkLDhCQUEwQywyQkFBQTtJQUd0QyxvUEFBNEIsMkxBR2hCLDRCQUFxQixLQUFLLENBQUMsSUFIWDtJQUs5QixpQkFBb0IsRUFBQTtJQUd0Qiw4QkFBNEMscUJBQUE7SUFNeEMseUxBQVcsZ0JBQVMsSUFBQztJQUV2QixpQkFBWSxFQUFBLEVBQUE7OztJQS9Cb0Isd0NBQW1C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QyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxPQUE2QjtRQUM3QyxnSEFBZ0g7UUFDaEgsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM1QyxJQUFJLEdBQUcsS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLGVBQWUsRUFBRTtnQkFDN0MsT0FBTyxLQUFLLENBQUM7YUFDZDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7MEdBN1NVLDZCQUE2QjtnRkFBN0IsNkJBQTZCO3VCQUM3QixrQkFBa0I7Ozs7O1FDL0MvQiw2RkFpQ2E7O1FBakNTLGlDQUFZOzt1RkQ4Q3JCLDZCQUE2QjtjQUp6QyxTQUFTOzJCQUNFLHlCQUF5Qjs0RkFJSixPQUFPO2tCQUFyQyxTQUFTO21CQUFDLGtCQUFrQjtZQUVULE9BQU87a0JBQTFCLEtBQUs7bUJBQUMsV0FBVztZQUVDLE1BQU07a0JBQXhCLEtBQUs7bUJBQUMsVUFBVTtZQUVXLGFBQWE7a0JBQXhDLEtBQUs7bUJBQUMsbUJBQW1CO1lBRWdCLDBCQUEwQjtrQkFBbkUsS0FBSzttQkFBQyxpQ0FBaUM7WUFFSixvQkFBb0I7a0JBQXZELE1BQU07bUJBQUMsMEJBQTBCO1lBSUUsb0JBQW9CO2tCQUF2RCxNQUFNO21CQUFDLDBCQUEwQjtZQUVMLGNBQWM7a0JBQTFDLE1BQU07bUJBQUMsbUJBQW1CO1lBY0MsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2UsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBjYXBpdGFsaXplRmlyc3RMZXR0ZXIsIGNvbnZlcnRUb0ludCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9DaGVja2JveEdyb3VwT3B0aW9uIH0gZnJvbSAnLi4vLi4vcG8tZmllbGQvcG8tY2hlY2tib3gtZ3JvdXAvaW50ZXJmYWNlcy9wby1jaGVja2JveC1ncm91cC1vcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvLXBvcG92ZXIvcG8tcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcbmltcG9ydCB7IFBvVGFibGVDb2x1bW4gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvLXRhYmxlLWNvbHVtbi5pbnRlcmZhY2UnO1xuXG5jb25zdCBQb1RhYmxlQ29sdW1uTWFuYWdlck1heENvbHVtbnNEZWZhdWx0ID0gOTk5OTk7XG5cbmV4cG9ydCBjb25zdCBwb1RhYmxlQ29sdW1uTWFuYWdlckxpdGVyYWxzRGVmYXVsdCA9IHtcbiAgZW46IHtcbiAgICBjb2x1bW5zTWFuYWdlcjogJ0NvbHVtbnMgbWFuYWdlcicsXG4gICAgcmVzdG9yZURlZmF1bHQ6ICdSZXN0b3JlIGRlZmF1bHQnXG4gIH0sXG4gIGVzOiB7XG4gICAgY29sdW1uc01hbmFnZXI6ICdHZXJlbnRlIGRlIGNvbHVtbmEnLFxuICAgIHJlc3RvcmVEZWZhdWx0OiAnUmVzdGF1cmFyIHBvciBkZWZlY3RvJ1xuICB9LFxuICBwdDoge1xuICAgIGNvbHVtbnNNYW5hZ2VyOiAnR2VyZW5jaWFkb3IgZGUgY29sdW5hcycsXG4gICAgcmVzdG9yZURlZmF1bHQ6ICdSZXN0YXVyYXIgcGFkcsOjbydcbiAgfSxcbiAgcnU6IHtcbiAgICBjb2x1bW5zTWFuYWdlcjogJ9C80LXQvdC10LTQttC10YAg0LrQvtC70L7QvdC+0LonLFxuICAgIHJlc3RvcmVEZWZhdWx0OiAn0YHQsdGA0L7RgSDQvdCw0YHRgtGA0L7QtdC6J1xuICB9XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby10YWJsZS1jb2x1bW4tbWFuYWdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby10YWJsZS1jb2x1bW4tbWFuYWdlci5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUG9UYWJsZUNvbHVtbk1hbmFnZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoUG9Qb3BvdmVyQ29tcG9uZW50KSBwb3BvdmVyOiBQb1BvcG92ZXJDb21wb25lbnQ7XG5cbiAgQElucHV0KCdwLWNvbHVtbnMnKSBjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuXG4gIEBJbnB1dCgncC10YXJnZXQnKSB0YXJnZXQ6IEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KCdwLWNvbHVtbnMtZGVmYXVsdCcpIGNvbHVuc0RlZmF1bHQ6IEFycmF5PFBvVGFibGVDb2x1bW4+O1xuXG4gIEBJbnB1dCgncC1sYXN0LXZpc2libGUtY29sdW1ucy1zZWxlY3RlZCcpIGxhc3RWaXNpYmxlQ29sdW1uc1NlbGVjdGVkOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuXG4gIEBPdXRwdXQoJ3AtdmlzaWJsZS1jb2x1bW5zLWNoYW5nZScpIHZpc2libGVDb2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxQb1RhYmxlQ29sdW1uPj4oKTtcblxuICAvLyBFdmVudG8gZGlzcGFyYWRvIGFvIGZlY2hhciBvIHBvcG92ZXIgZG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcyBhcMOzcyBhbHRlcmFyIGFzIGNvbHVuYXMgdmlzw612ZWlzLlxuICAvLyBPIHBvLXRhYmxlIGVudmlhIGNvbW8gcGFyw6JtZXRybyB1bSBhcnJheSBkZSBzdHJpbmcgY29tIGFzIGNvbHVuYXMgdmlzw612ZWlzIGF0dWFsaXphZGFzLiBQb3IgZXhlbXBsbzogW1wiaWRDYXJkXCIsIFwibmFtZVwiLCBcImhpcmVTdGF0dXNcIiwgXCJhZ2VcIl0uXG4gIEBPdXRwdXQoJ3AtY2hhbmdlLXZpc2libGUtY29sdW1ucycpIGNoYW5nZVZpc2libGVDb2x1bW5zID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxzdHJpbmc+PigpO1xuXG4gIEBPdXRwdXQoJ3AtaW5pdGlhbC1jb2x1bW5zJykgaW5pdGlhbENvbHVtbnMgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFN0cmluZz4+KCk7XG5cbiAgbGl0ZXJhbHM7XG4gIGNvbHVtbnNPcHRpb25zOiBBcnJheTxQb0NoZWNrYm94R3JvdXBPcHRpb24+ID0gW107XG4gIHZpc2libGVDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIGNvbHVtblVwZGF0ZTtcblxuICBwcml2YXRlIF9tYXhDb2x1bW5zOiBudW1iZXIgPSBQb1RhYmxlQ29sdW1uTWFuYWdlck1heENvbHVtbnNEZWZhdWx0O1xuICBwcml2YXRlIGRlZmF1bHRDb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdO1xuICBwcml2YXRlIHJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlc3RvcmVEZWZhdWx0RXZlbnQ6IGJvb2xlYW47XG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRWYWx1ZTogQXJyYXk8c3RyaW5nPjtcbiAgcHJpdmF0ZSBtaW5Db2x1bW5zOiBudW1iZXIgPSAxO1xuXG4gIEBJbnB1dCgncC1tYXgtY29sdW1ucycpIHNldCBtYXhDb2x1bW5zKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhDb2x1bW5zID0gY29udmVydFRvSW50KHZhbHVlLCBQb1RhYmxlQ29sdW1uTWFuYWdlck1heENvbHVtbnNEZWZhdWx0KTtcbiAgfVxuXG4gIGdldCBtYXhDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXhDb2x1bW5zO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlKSB7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuXG4gICAgdGhpcy5saXRlcmFscyA9IHtcbiAgICAgIC4uLnBvVGFibGVDb2x1bW5NYW5hZ2VyTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAuLi5wb1RhYmxlQ29sdW1uTWFuYWdlckxpdGVyYWxzRGVmYXVsdFtsYW5ndWFnZV1cbiAgICB9O1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGNvbnN0IHsgY29sdW1ucywgbWF4Q29sdW1ucywgdGFyZ2V0IH0gPSBjaGFuZ2VzO1xuXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlQ29sdW1ucyhjb2x1bW5zKTtcbiAgICB9XG5cbiAgICBpZiAobWF4Q29sdW1ucykge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZXModGhpcy5jb2x1bW5zKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gYXF1aSBjaGVnYW0gb3MgZXZlbnRvcyBkbyBjaGVja2JveCBlIGRvIGNsb3NlIGRvIHBvcG92ZXIgcXVlIHRhbWLDqW0gw6kgZGlzcGFyYWRvIG5vIHJlc2l6ZVxuICBjaGVja0NoYW5nZXMoZXZlbnQ6IEFycmF5PHN0cmluZz4gPSBbXSwgZW1pdDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy52ZXJpZnlUb0VtaXRDaGFuZ2UoZXZlbnQpO1xuXG4gICAgaWYgKGVtaXQpIHtcbiAgICAgIC8vIGNvbnRyb2xhIGVtaXNzw7VlcyBwYXJhIG8gZGV2XG4gICAgICB0aGlzLnZlcmlmeVRvRW1pdFZpc2libGVDb2x1bW5zKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzdG9yZSgpIHtcbiAgICB0aGlzLnJlc3RvcmVEZWZhdWx0RXZlbnQgPSB0cnVlO1xuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlQ29sdW1ucyh0aGlzLmRlZmF1bHRDb2x1bW5zKTtcbiAgICB0aGlzLmluaXRpYWxDb2x1bW5zLmVtaXQodGhpcy5nZXRWaXNpYmxlQ29sdW1ucyh0aGlzLmNvbHVuc0RlZmF1bHQpKTtcbiAgICB0aGlzLmNoZWNrQ2hhbmdlcyhkZWZhdWx0Q29sdW1ucywgdGhpcy5yZXN0b3JlRGVmYXVsdEV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5VG9FbWl0Q2hhbmdlKGV2ZW50OiBBcnJheTxzdHJpbmc+KSB7XG4gICAgY29uc3QgbmV3Q29sdW1ucyA9IFsuLi5ldmVudF07XG4gICAgaWYgKG5ld0NvbHVtbnMubGVuZ3RoID49IDEgJiYgdGhpcy5hbGxvd3NDaGFuZ2VWaXNpYmxlQ29sdW1ucygpKSB7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2VzVG9TZWxlY3RlZENvbHVtbnMobmV3Q29sdW1ucyk7XG4gICAgfVxuICAgIC8vIERlc2FiaWxpdGEgdWx0aW1vIGNoZWNrYm94IGF0aXZvXG4gICAgaWYgKG5ld0NvbHVtbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjb2x1bW5zT3B0aW9ucyA9IHRoaXMubWFwVGFibGVDb2x1bW5zVG9DaGVja2JveE9wdGlvbnModGhpcy5jb2x1bW5VcGRhdGUpO1xuICAgICAgdGhpcy5jb2x1bW5zT3B0aW9ucyA9IHRoaXMuZGlzYWJsZWRMYXN0Q29sdW1uKGNvbHVtbnNPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2VzVG9TZWxlY3RlZENvbHVtbnMobmV3Q29sdW1uczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSBbLi4ubmV3Q29sdW1uc107XG4gICAgY29uc3QgdmlzaWJsZVRhYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZVRhYmxlQ29sdW1ucyh0aGlzLnZpc2libGVDb2x1bW5zKTtcblxuICAgIC8vIGVtaXRlIGFsdGVyYcOnw6NvIG5hcyBjb2x1bmFzIHNlbGVjaW9uYWRhcywgcG9yw6ltIG7Do28gZW1pdGUgcGFyYSBvIGRldi5cbiAgICB0aGlzLnZpc2libGVDb2x1bW5zQ2hhbmdlLmVtaXQodmlzaWJsZVRhYmxlQ29sdW1ucyk7XG4gIH1cblxuICBwcml2YXRlIGFsbG93c0NoYW5nZVZpc2libGVDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZpc2libGVUYWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVUYWJsZUNvbHVtbnModGhpcy52aXNpYmxlQ29sdW1ucyk7XG5cbiAgICByZXR1cm4gdGhpcy5zdHJpbmdpZnkodmlzaWJsZVRhYmxlQ29sdW1ucykgIT09IHRoaXMuc3RyaW5naWZ5KHRoaXMuY29sdW1ucyk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeVRvRW1pdFZpc2libGVDb2x1bW5zKCkge1xuICAgIGlmICh0aGlzLnJlc3RvcmVEZWZhdWx0RXZlbnQpIHtcbiAgICAgIC8vIHZlaW8gZG8gcmVzdG9yZSBkZWZhdWx0XG4gICAgICB0aGlzLnZlcmlmeVJlc3RvcmVWYWx1ZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9pIGRpc3BhcmFkbyBubyBjbG9zZSBwb3BvdmVyO1xuICAgICAgdGhpcy52ZXJpZnlPbkNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlSZXN0b3JlVmFsdWVzKCkge1xuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gWy4uLnRoaXMuZGVmYXVsdENvbHVtbnNdO1xuICAgIGNvbnN0IGRlZmF1bHRWaXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMoZGVmYXVsdENvbHVtbnMpO1xuXG4gICAgaWYgKHRoaXMuYWxsb3dzQ2hhbmdlU2VsZWN0ZWRDb2x1bW5zKGRlZmF1bHRWaXNpYmxlQ29sdW1ucykpIHtcbiAgICAgIHRoaXMuZW1pdENoYW5nZU9uUmVzdG9yZShkZWZhdWx0VmlzaWJsZUNvbHVtbnMpO1xuICAgIH1cblxuICAgIHRoaXMucmVzdG9yZURlZmF1bHRFdmVudCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q2hhbmdlT25SZXN0b3JlKGRlZmF1bHRWaXNpYmxlQ29sdW1uczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSBbLi4uZGVmYXVsdFZpc2libGVDb2x1bW5zXTtcbiAgICBjb25zdCB2aXNpYmxlVGFibGVDb2x1bW5zID0gdGhpcy5nZXRWaXNpYmxlVGFibGVDb2x1bW5zKHRoaXMudmlzaWJsZUNvbHVtbnMpO1xuXG4gICAgdGhpcy52aXNpYmxlQ29sdW1uc0NoYW5nZS5lbWl0KHZpc2libGVUYWJsZUNvbHVtbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhbGxvd3NDaGFuZ2VTZWxlY3RlZENvbHVtbnMoZGVmYXVsdFZpc2libGVDb2x1bW5zOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG5cbiAgICByZXR1cm4gIXRoaXMuaXNFcXVhbEFycmF5cyhkZWZhdWx0VmlzaWJsZUNvbHVtbnMsIHZpc2libGVDb2x1bW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5T25DbG9zZSgpIHtcbiAgICBpZiAodGhpcy5hbGxvd3NFbWlzc2lvbigpKSB7XG4gICAgICB0aGlzLmVtaXRWaXNpYmxlQ29sdW1ucygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdFZpc2libGVDb2x1bW5zKCkge1xuICAgIHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSA9IFsuLi50aGlzLnZpc2libGVDb2x1bW5zXTtcbiAgICB0aGlzLmNoYW5nZVZpc2libGVDb2x1bW5zLmVtaXQodGhpcy52aXNpYmxlQ29sdW1ucyk7XG4gIH1cblxuICBwcml2YXRlIGFsbG93c0VtaXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVwZGF0ZWRWaXNpYmxlQ29sdW1ucyA9IHRoaXMudmlzaWJsZUNvbHVtbnMgPyBbLi4udGhpcy52aXNpYmxlQ29sdW1uc10gOiBbXTtcbiAgICBjb25zdCBsYXN0RW1pdHRlZFZhbHVlID0gdGhpcy5sYXN0RW1pdHRlZFZhbHVlID8gWy4uLnRoaXMubGFzdEVtaXR0ZWRWYWx1ZV0gOiBbXTtcbiAgICBjb25zdCBsYXN0VmlzaWJsZUNvbHVtbnNTZWxlY3RlZCA9IHRoaXMubGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQgPyBbLi4udGhpcy5sYXN0VmlzaWJsZUNvbHVtbnNTZWxlY3RlZF0gOiBbXTtcbiAgICBjb25zdCBsYXN0VmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldFZpc2libGVDb2x1bW5zKGxhc3RWaXNpYmxlQ29sdW1uc1NlbGVjdGVkKTtcblxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzVXBkYXRlKHVwZGF0ZWRWaXNpYmxlQ29sdW1ucywgbGFzdEVtaXR0ZWRWYWx1ZSkgfHxcbiAgICAgIHRoaXMuaXNGaXJzdFRpbWUodXBkYXRlZFZpc2libGVDb2x1bW5zLCBsYXN0VmlzaWJsZUNvbHVtbnMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGaXJzdFRpbWUodXBkYXRlZFZpc2libGVDb2x1bW5zOiBBcnJheTxzdHJpbmc+LCBsYXN0VmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMubGFzdEVtaXR0ZWRWYWx1ZSAmJiAhdGhpcy5pc0VxdWFsQXJyYXlzKHVwZGF0ZWRWaXNpYmxlQ29sdW1ucywgbGFzdFZpc2libGVDb2x1bW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNVcGRhdGUodXBkYXRlZFZpc2libGVDb2x1bW5zOiBBcnJheTxzdHJpbmc+LCBsYXN0RW1pdHRlZFZhbHVlOiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGFzdEVtaXR0ZWRWYWx1ZSAmJiAhdGhpcy5pc0VxdWFsQXJyYXlzKHVwZGF0ZWRWaXNpYmxlQ29sdW1ucywgbGFzdEVtaXR0ZWRWYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzRXF1YWxBcnJheXMoZmlyc3Q6IEFycmF5PHN0cmluZz4sIHNlY29uZDogQXJyYXk8c3RyaW5nPik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9uZSA9IGZpcnN0ID8gWy4uLmZpcnN0XSA6IFtdO1xuICAgIGNvbnN0IHR3byA9IHNlY29uZCA/IFsuLi5zZWNvbmRdIDogW107XG4gICAgY29uc3QgZmlyc3RTb3J0ID0gb25lLnNsaWNlKCkuc29ydCgpO1xuICAgIGNvbnN0IHNlY29uZFNvcnQgPSB0d28uc2xpY2UoKS5zb3J0KCk7XG4gICAgY29uc3QgZmlyc3RTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShmaXJzdFNvcnQpO1xuICAgIGNvbnN0IHNlY29uZFN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHNlY29uZFNvcnQpO1xuXG4gICAgcmV0dXJuIGZpcnN0U3RyaW5nID09PSBzZWNvbmRTdHJpbmc7XG4gIH1cblxuICAvLyBkZXNhYmlsaXRhcsOhIGFzIGNvbHVuYXMsIHF1ZSBuw6NvIGVzdGl2ZXJlbSBzZWxlY2lvbmFkYXMsIGFww7NzIGV4ZWRlciBvIG51bWVybyBtYXhpbW8gZGUgY29sdW5hcy5cbiAgcHJpdmF0ZSBkaXNhYmxlQ29sdW1uc09wdGlvbnMoY29sdW1uczogQXJyYXk8UG9DaGVja2JveEdyb3VwT3B0aW9uPiA9IFtdKSB7XG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKGNvbHVtbiA9PiAoe1xuICAgICAgLi4uY29sdW1uLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlQ29sdW1uKGNvbHVtbi52YWx1ZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbHVtblRpdGxlTGFiZWwoY29sdW1uOiBQb1RhYmxlQ29sdW1uKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5sYWJlbCB8fCBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoY29sdW1uLnByb3BlcnR5KTtcbiAgfVxuXG4gIC8qKiBSZXRvcm5hIHVtIEFycmF5IGRlIGNvbHVtbi5wcm9wZXJ0eSBkYXMgY29sdW5hcyBxdWUgc8OjbyB2aXNpdmVpcy4gKi9cbiAgcHJpdmF0ZSBnZXRWaXNpYmxlQ29sdW1ucyhjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPik6IEFycmF5PHN0cmluZz4ge1xuICAgIGxldCB2aXNpYmxlQ29sdW1ucyA9IFtdO1xuXG4gICAgY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBpZiAodGhpcy5pc1Zpc2libGVDb2x1bW4oY29sdW1uLCB2aXNpYmxlQ29sdW1ucykpIHtcbiAgICAgICAgdmlzaWJsZUNvbHVtbnMgPSBbLi4udmlzaWJsZUNvbHVtbnMsIGNvbHVtbi5wcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmlzaWJsZUNvbHVtbnM7XG4gIH1cblxuICBwcml2YXRlIGlzVmlzaWJsZUNvbHVtbihjb2x1bW46IFBvVGFibGVDb2x1bW4sIHZpc2libGVDb2x1bW5zOiBBcnJheTxzdHJpbmc+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSAmJiB2aXNpYmxlQ29sdW1ucy5sZW5ndGggPCB0aGlzLm1heENvbHVtbnMgJiYgY29sdW1uLnR5cGUgIT09ICdkZXRhaWwnO1xuICB9XG5cbiAgLyoqIFJldG9ybmEgdW0gQXJyYXkgUG9UYWJsZUNvbHVtbiBhIHBhcnRpciBkYXMgY29sdW5hcyB2aXNpdmVpcyBubyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLiAqL1xuICBwcml2YXRlIGdldFZpc2libGVUYWJsZUNvbHVtbnModmlzaWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4pOiBBcnJheTxQb1RhYmxlQ29sdW1uPiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucyA/IFsuLi50aGlzLmNvbHVtbnNdIDogW107XG5cbiAgICByZXR1cm4gY29sdW1ucy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAuLi5jb2x1bW4sXG4gICAgICB2aXNpYmxlOiB2aXNpYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ucHJvcGVydHkpIHx8IGNvbHVtbi50eXBlID09PSAnZGV0YWlsJ1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUxpc3RlbmVycygpIHtcbiAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wb3BvdmVyICYmICF0aGlzLnBvcG92ZXIuaXNIaWRkZW4pIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZUNvbHVtbihwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoID49IHRoaXMubWF4Q29sdW1ucyA/ICF0aGlzLnZpc2libGVDb2x1bW5zLmluY2x1ZGVzKHByb3BlcnR5KSA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBUYWJsZUNvbHVtbnNUb0NoZWNrYm94T3B0aW9ucyhjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPiA9IFtdKSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW5zID0gWy4uLmNvbHVtbnNdO1xuICAgIGNvbnN0IGNvbHVtbnNPcHRpb25zID0gW107XG5cbiAgICB0YWJsZUNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlICE9PSAnZGV0YWlsJykge1xuICAgICAgICBjb2x1bW5zT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICB2YWx1ZTogY29sdW1uLnByb3BlcnR5LFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmdldENvbHVtblRpdGxlTGFiZWwoY29sdW1uKSxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVDb2x1bW4oY29sdW1uLnByb3BlcnR5KSxcbiAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4udmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb2x1bW5zT3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZGlzYWJsZWRMYXN0Q29sdW1uKGNvbHVtbnM6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gY29sdW1ucy5tYXAoY29sdW1uID0+ICh7XG4gICAgICAuLi5jb2x1bW4sXG4gICAgICBkaXNhYmxlZDogY29sdW1uLnR5cGUgIT09ICdkZXRhaWwnICYmIGNvbHVtbi52aXNpYmxlID8gdHJ1ZSA6IGZhbHNlXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZUNvbHVtbnMoY29sdW1uczogU2ltcGxlQ2hhbmdlKSB7XG4gICAgY29uc3QgeyBjdXJyZW50VmFsdWUgPSBbXSwgcHJldmlvdXNWYWx1ZSA9IFtdIH0gPSBjb2x1bW5zO1xuICAgIHRoaXMuY29sdW1uVXBkYXRlID0gY29sdW1ucy5jdXJyZW50VmFsdWU7XG5cbiAgICAvLyBhdHVhbGl6YXJhIG8gZGVmYXVsdENvbHVtbnMsIHF1YW5kbyBmb3IgYSBwcmltZWlyYSB2ZXogb3UgcXVhbmRvIG8gZGVmYXVsdENvbHVtbnMgZm9yIGRpZmVyZW50ZSBkbyBjdXJyZW50VmFsdWVcbiAgICBpZiAoIXRoaXMubGFzdFZpc2libGVDb2x1bW5zU2VsZWN0ZWQgJiYgdGhpcy5zdHJpbmdpZnkodGhpcy5kZWZhdWx0Q29sdW1ucykgIT09IHRoaXMuc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGVmYXVsdENvbHVtbnMgPSBbLi4uY3VycmVudFZhbHVlXTtcbiAgICB9XG5cbiAgICAvLyB2ZXJpZmljYSBzZSBvIHZhbG9yIGFudGVyaW9yIMOpIGRpZmVyZW50ZSBkbyBhdHVhbCBwYXJhIGF0dWFsaXphciBhcyBjb2x1bW5zT3B0aW9ucyBhcGVuYXMgcXVhbmRvIGZvciBuZWNlc3NhcmlvXG4gICAgaWYgKHRoaXMuc3RyaW5naWZ5KHByZXZpb3VzVmFsdWUpICE9PSB0aGlzLnN0cmluZ2lmeShjdXJyZW50VmFsdWUpKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlcyhjdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVzKGN1cnJlbnRWYWx1ZTogQXJyYXk8UG9UYWJsZUNvbHVtbj4pIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMoY3VycmVudFZhbHVlKTtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gWy4uLnZpc2libGVDb2x1bW5zXTtcblxuICAgIGNvbnN0IGNvbHVtbnNPcHRpb25zID0gdGhpcy5tYXBUYWJsZUNvbHVtbnNUb0NoZWNrYm94T3B0aW9ucyhjdXJyZW50VmFsdWUpO1xuICAgIHRoaXMuY29sdW1uc09wdGlvbnMgPSB0aGlzLmRpc2FibGVDb2x1bW5zT3B0aW9ucyhjb2x1bW5zT3B0aW9ucyk7XG5cbiAgICB0aGlzLmNoZWNrQ2hhbmdlcyh2aXNpYmxlQ29sdW1ucywgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKHRoaXMucmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMucmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeShjb2x1bW5zOiBBcnJheTxQb1RhYmxlQ29sdW1uPikge1xuICAgIC8vIG7Do28gZmF6IG8gc3RyaW5naWZ5IGRhIHByb3ByaWVkYWRlIGljb24gZSBzZWFyY2hTZXJ2aWNlLCBwb2lzIHBvZGUgY29udGVyIG9iamV0byBjb21wbGV4byBlIGRpc3BhcmFyIHVtIGVycm8uXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGNvbHVtbnMsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoa2V5ICE9PSAnaWNvbicgJiYga2V5ICE9PSAnc2VhcmNoU2VydmljZScpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8cG8tcG9wb3ZlciAjcG9wb3ZlciAqbmdJZj1cInRhcmdldFwiIFtwLXRhcmdldF09XCJ0YXJnZXRcIiBwLXBvc2l0aW9uPVwiYm90dG9tLWxlZnRcIiAocC1jbG9zZSk9XCJjaGVja0NoYW5nZXMoW10sIHRydWUpXCI+XG4gIDxkaXYgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicG8tdGFibGUtY29sdW1uLW1hbmFnZXItaGVhZGVyLXRpdGxlXCI+e3sgbGl0ZXJhbHMuY29sdW1uc01hbmFnZXIgfX08L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1oZWFkZXItY2xvc2VcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJwby10YWJsZS1jb2x1bW4tbWFuYWdlci1oZWFkZXItY2xvc2UtYnV0dG9uIHBvLWNsaWNrYWJsZSBwby1pY29uIHBvLWljb24tY2xvc2VcIlxuICAgICAgICAoY2xpY2spPVwicG9wb3Zlci5jbG9zZSgpXCJcbiAgICAgID48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLWJvZHlcIj5cbiAgICA8cG8tY2hlY2tib3gtZ3JvdXBcbiAgICAgIG5hbWU9XCJ2aXNpYmxlQ29sdW1uc1wiXG4gICAgICBbKG5nTW9kZWwpXT1cInZpc2libGVDb2x1bW5zXCJcbiAgICAgIHAtY29sdW1ucz1cIjFcIlxuICAgICAgW3Atb3B0aW9uc109XCJjb2x1bW5zT3B0aW9uc1wiXG4gICAgICAocC1jaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKCRldmVudCwgZmFsc2UpXCJcbiAgICA+XG4gICAgPC9wby1jaGVja2JveC1ncm91cD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBvLXRhYmxlLWNvbHVtbi1tYW5hZ2VyLWZvb3RlclwiPlxuICAgIDxwby1idXR0b25cbiAgICAgIGNsYXNzPVwicG8tdGFibGUtY29sdW1uLW1hbmFnZXItZm9vdGVyLXJlc3RvcmVcIlxuICAgICAgcC1zbWFsbFxuICAgICAgcC1raW5kPVwidGVydGlhcnlcIlxuICAgICAgW3AtbGFiZWxdPVwibGl0ZXJhbHMucmVzdG9yZURlZmF1bHRcIlxuICAgICAgKHAtY2xpY2spPVwicmVzdG9yZSgpXCJcbiAgICA+XG4gICAgPC9wby1idXR0b24+XG4gIDwvZGl2PlxuPC9wby1wb3BvdmVyPlxuIl19