@sumaris-net/ngx-components 18.23.0-beta.4 → 18.23.1

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 (40) hide show
  1. package/doc/changelog.md +29 -2
  2. package/esm2022/public_api.mjs +1 -4
  3. package/esm2022/src/app/core/services/platform.service.mjs +104 -6
  4. package/esm2022/src/app/core/table/column/actions-column.component.mjs +1 -1
  5. package/esm2022/src/app/core/table/table.pipes.mjs +7 -6
  6. package/esm2022/src/app/core/table/testing/table.testing.module.mjs +4 -25
  7. package/esm2022/src/app/core/table/testing/table2.testing.mjs +15 -63
  8. package/esm2022/src/app/shared/capacitor/plugins.mjs +2 -1
  9. package/esm2022/src/app/shared/constants.mjs +2 -2
  10. package/esm2022/src/app/shared/dates.mjs +52 -20
  11. package/esm2022/src/app/shared/file/csv.utils.mjs +2 -2
  12. package/esm2022/src/app/shared/functions.mjs +1 -1
  13. package/esm2022/src/app/shared/graph/colors.utils.mjs +30 -5
  14. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +3 -3
  15. package/esm2022/src/app/shared/material/chips/material.chips.mjs +3 -3
  16. package/esm2022/src/app/shared/regexps.mjs +18 -11
  17. package/esm2022/src/app/shared/validator/validators.mjs +2 -2
  18. package/esm2022/src/app/social/feed/feed.component.mjs +3 -3
  19. package/fesm2022/sumaris-net.ngx-components.mjs +227 -542
  20. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  21. package/package.json +16 -14
  22. package/public_api.d.ts +0 -3
  23. package/src/app/core/services/platform.service.d.ts +10 -1
  24. package/src/app/core/table/column/actions-column.component.d.ts +1 -1
  25. package/src/app/core/table/table.pipes.d.ts +1 -2
  26. package/src/app/core/table/testing/table.testing.module.d.ts +1 -3
  27. package/src/app/core/table/testing/table2.testing.d.ts +3 -7
  28. package/src/app/shared/capacitor/plugins.d.ts +1 -0
  29. package/src/app/shared/dates.d.ts +28 -4
  30. package/src/app/shared/functions.d.ts +1 -1
  31. package/src/app/shared/graph/colors.utils.d.ts +17 -0
  32. package/src/assets/manifest.json +1 -1
  33. package/src/theme/_ngx-components.scss +12 -0
  34. package/src/theme/_ngx-components.table.scss +2 -48
  35. package/esm2022/src/app/shared/directives/cell-selection/cell-identifier.directive.mjs +0 -41
  36. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.directive.mjs +0 -201
  37. package/esm2022/src/app/shared/directives/cell-selection/cell-selection.service.mjs +0 -186
  38. package/src/app/shared/directives/cell-selection/cell-identifier.directive.d.ts +0 -15
  39. package/src/app/shared/directives/cell-selection/cell-selection.directive.d.ts +0 -28
  40. package/src/app/shared/directives/cell-selection/cell-selection.service.d.ts +0 -64
@@ -3,7 +3,8 @@ export class CapacitorPlugins {
3
3
  static Camera = 'Camera';
4
4
  static StatusBar = 'StatusBar';
5
5
  static Keyboard = 'Keyboard';
6
+ static EdgeToEdge = 'EdgeToEdge';
6
7
  //static readonly BarcodeScanner = 'BarcodeScanner';
7
8
  static isAvailable = Capacitor.isPluginAvailable;
8
9
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2NhcGFjaXRvci9wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUk1QyxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLE1BQU0sQ0FBVSxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ2xDLE1BQU0sQ0FBVSxTQUFTLEdBQUcsV0FBVyxDQUFDO0lBQ3hDLE1BQU0sQ0FBVSxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ3RDLG9EQUFvRDtJQUVwRCxNQUFNLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhcGFjaXRvciB9IGZyb20gJ0BjYXBhY2l0b3IvY29yZSc7XG5cbmV4cG9ydCB0eXBlIENhcGFjaXRvclBsdWdpblR5cGUgPSAnQ2FtZXJhJyB8ICdTdGF0dXNCYXInIHwgJ0tleWJvYXJkJyB8ICdCYXJjb2RlU2Nhbm5lcic7XG5cbmV4cG9ydCBjbGFzcyBDYXBhY2l0b3JQbHVnaW5zIHtcbiAgc3RhdGljIHJlYWRvbmx5IENhbWVyYSA9ICdDYW1lcmEnO1xuICBzdGF0aWMgcmVhZG9ubHkgU3RhdHVzQmFyID0gJ1N0YXR1c0Jhcic7XG4gIHN0YXRpYyByZWFkb25seSBLZXlib2FyZCA9ICdLZXlib2FyZCc7XG4gIC8vc3RhdGljIHJlYWRvbmx5IEJhcmNvZGVTY2FubmVyID0gJ0JhcmNvZGVTY2FubmVyJztcblxuICBzdGF0aWMgaXNBdmFpbGFibGUgPSBDYXBhY2l0b3IuaXNQbHVnaW5BdmFpbGFibGU7XG59XG4iXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2NhcGFjaXRvci9wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUk1QyxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLE1BQU0sQ0FBVSxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ2xDLE1BQU0sQ0FBVSxTQUFTLEdBQUcsV0FBVyxDQUFDO0lBQ3hDLE1BQU0sQ0FBVSxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ3RDLE1BQU0sQ0FBVSxVQUFVLEdBQUcsWUFBWSxDQUFDO0lBQzFDLG9EQUFvRDtJQUVwRCxNQUFNLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhcGFjaXRvciB9IGZyb20gJ0BjYXBhY2l0b3IvY29yZSc7XG5cbmV4cG9ydCB0eXBlIENhcGFjaXRvclBsdWdpblR5cGUgPSAnQ2FtZXJhJyB8ICdTdGF0dXNCYXInIHwgJ0tleWJvYXJkJyB8ICdCYXJjb2RlU2Nhbm5lcic7XG5cbmV4cG9ydCBjbGFzcyBDYXBhY2l0b3JQbHVnaW5zIHtcbiAgc3RhdGljIHJlYWRvbmx5IENhbWVyYSA9ICdDYW1lcmEnO1xuICBzdGF0aWMgcmVhZG9ubHkgU3RhdHVzQmFyID0gJ1N0YXR1c0Jhcic7XG4gIHN0YXRpYyByZWFkb25seSBLZXlib2FyZCA9ICdLZXlib2FyZCc7XG4gIHN0YXRpYyByZWFkb25seSBFZGdlVG9FZGdlID0gJ0VkZ2VUb0VkZ2UnO1xuICAvL3N0YXRpYyByZWFkb25seSBCYXJjb2RlU2Nhbm5lciA9ICdCYXJjb2RlU2Nhbm5lcic7XG5cbiAgc3RhdGljIGlzQXZhaWxhYmxlID0gQ2FwYWNpdG9yLmlzUGx1Z2luQXZhaWxhYmxlO1xufVxuIl19
@@ -1,6 +1,6 @@
1
1
  export const DATE_ISO_PATTERN = 'YYYY-MM-DDTHH:mm:ss.SSSZ';
2
2
  export const DATE_PATTERN = 'YYYY-MM-DD';
3
- export const DATE_MATCH_REGEXP = new RegExp(/^\d+[-]\d+[-]\d+$/g);
3
+ export const DATE_MATCH_REGEXP = /^\d+[-]\d+-\d+$/;
4
4
  export const DEFAULT_PLACEHOLDER_CHAR = '\u005F'; // underscore
5
5
  export const PUBKEY_REGEXP = /^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44}$/;
6
6
  export const SPACE_PLACEHOLDER_CHAR = '\u2000';
@@ -13,4 +13,4 @@ export const KEYBOARD_HIDE_DELAY_MS = 250; // 1s
13
13
  // Separator to join properties (see `joinPropertiesPath()` or `referentialToString()` )
14
14
  export const DEFAULT_JOIN_PROPERTIES_SEPARATOR = ' - ';
15
15
  export const DEFAULT_JOIN_ARRAY_VALUES_SEPARATOR = ', ';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLDBCQUEwQixDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNsRSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUMsQ0FBQyxhQUFhO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx1RUFBdUUsQ0FBQztBQUNyRyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxRQUFRLENBQUM7QUFDL0MsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsU0FBUyxDQUFDO0FBRTlELGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxRQUFRLENBQUMsQ0FBQyw0QkFBNEI7QUFDNUUsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBQUcsU0FBUyxDQUFDLENBQUMsNEJBQTRCO0FBRTNGLE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFHLE1BQU0sQ0FBQztBQUUxRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLO0FBRWhELHdGQUF3RjtBQUN4RixNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBVyxLQUFLLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQVcsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IERBVEVfSVNPX1BBVFRFUk4gPSAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaJztcbmV4cG9ydCBjb25zdCBEQVRFX1BBVFRFUk4gPSAnWVlZWS1NTS1ERCc7XG5leHBvcnQgY29uc3QgREFURV9NQVRDSF9SRUdFWFAgPSBuZXcgUmVnRXhwKC9eXFxkK1stXVxcZCtbLV1cXGQrJC9nKTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVIgPSAnXFx1MDA1Ric7IC8vIHVuZGVyc2NvcmVcbmV4cG9ydCBjb25zdCBQVUJLRVlfUkVHRVhQID0gL15bMTIzNDU2Nzg5QUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamttbm9wcXJzdHV2d3h5el17NDMsNDR9JC87XG5leHBvcnQgY29uc3QgU1BBQ0VfUExBQ0VIT0xERVJfQ0hBUiA9ICdcXHUyMDAwJztcbmV4cG9ydCBjb25zdCBTUEFDRV9QTEFDRUhPTERFUl9DSEFSX1JFR0VYUF9HTE9CQUwgPSAvXFx1MjAwMC9nO1xuXG4vLyBTZWUgaHR0cHM6Ly91bmljb2RlLXNlYXJjaC5uZXQvdW5pY29kZS1uYW1lc2VhcmNoLnBsP3Rlcm09WkVST1xuZXhwb3J0IGNvbnN0IEVNUFRZX1BMQUNFSE9MREVSX0NIQVIgPSAnXFx1RkVGRic7IC8vIFpFUk8gV0lEVEggTk8tQlJFQUsgU1BBQ0VcbmV4cG9ydCBjb25zdCBFTVBUWV9QTEFDRUhPTERFUl9DSEFSX1JFR0VYUF9HTE9CQUwgPSAvXFx1RkVGRi9nOyAvLyBaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFXG5cbmV4cG9ydCBjb25zdCBQTFVTX1BMQUNFSE9MREVSX0NIQVJfUkVHRVhQX0dMT0JBTCA9IC9bK10vZztcblxuZXhwb3J0IGNvbnN0IEtFWUJPQVJEX0hJREVfREVMQVlfTVMgPSAyNTA7IC8vIDFzXG5cbi8vIFNlcGFyYXRvciB0byBqb2luIHByb3BlcnRpZXMgKHNlZSBgam9pblByb3BlcnRpZXNQYXRoKClgIG9yIGByZWZlcmVudGlhbFRvU3RyaW5nKClgIClcbmV4cG9ydCBjb25zdCBERUZBVUxUX0pPSU5fUFJPUEVSVElFU19TRVBBUkFUT1I6IHN0cmluZyA9ICcgLSAnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSk9JTl9BUlJBWV9WQUxVRVNfU0VQQVJBVE9SOiBzdHJpbmcgPSAnLCAnO1xuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLDBCQUEwQixDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDekMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDLENBQUMsYUFBYTtBQUMvRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsdUVBQXVFLENBQUM7QUFDckcsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLFNBQVMsQ0FBQztBQUU5RCxpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDLENBQUMsNEJBQTRCO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLG9DQUFvQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLDRCQUE0QjtBQUUzRixNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxNQUFNLENBQUM7QUFFMUQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSztBQUVoRCx3RkFBd0Y7QUFDeEYsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQVcsS0FBSyxDQUFDO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLG1DQUFtQyxHQUFXLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBEQVRFX0lTT19QQVRURVJOID0gJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTWic7XG5leHBvcnQgY29uc3QgREFURV9QQVRURVJOID0gJ1lZWVktTU0tREQnO1xuZXhwb3J0IGNvbnN0IERBVEVfTUFUQ0hfUkVHRVhQID0gL15cXGQrWy1dXFxkKy1cXGQrJC87XG5leHBvcnQgY29uc3QgREVGQVVMVF9QTEFDRUhPTERFUl9DSEFSID0gJ1xcdTAwNUYnOyAvLyB1bmRlcnNjb3JlXG5leHBvcnQgY29uc3QgUFVCS0VZX1JFR0VYUCA9IC9eWzEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXpdezQzLDQ0fSQvO1xuZXhwb3J0IGNvbnN0IFNQQUNFX1BMQUNFSE9MREVSX0NIQVIgPSAnXFx1MjAwMCc7XG5leHBvcnQgY29uc3QgU1BBQ0VfUExBQ0VIT0xERVJfQ0hBUl9SRUdFWFBfR0xPQkFMID0gL1xcdTIwMDAvZztcblxuLy8gU2VlIGh0dHBzOi8vdW5pY29kZS1zZWFyY2gubmV0L3VuaWNvZGUtbmFtZXNlYXJjaC5wbD90ZXJtPVpFUk9cbmV4cG9ydCBjb25zdCBFTVBUWV9QTEFDRUhPTERFUl9DSEFSID0gJ1xcdUZFRkYnOyAvLyBaRVJPIFdJRFRIIE5PLUJSRUFLIFNQQUNFXG5leHBvcnQgY29uc3QgRU1QVFlfUExBQ0VIT0xERVJfQ0hBUl9SRUdFWFBfR0xPQkFMID0gL1xcdUZFRkYvZzsgLy8gWkVSTyBXSURUSCBOTy1CUkVBSyBTUEFDRVxuXG5leHBvcnQgY29uc3QgUExVU19QTEFDRUhPTERFUl9DSEFSX1JFR0VYUF9HTE9CQUwgPSAvWytdL2c7XG5cbmV4cG9ydCBjb25zdCBLRVlCT0FSRF9ISURFX0RFTEFZX01TID0gMjUwOyAvLyAxc1xuXG4vLyBTZXBhcmF0b3IgdG8gam9pbiBwcm9wZXJ0aWVzIChzZWUgYGpvaW5Qcm9wZXJ0aWVzUGF0aCgpYCBvciBgcmVmZXJlbnRpYWxUb1N0cmluZygpYCApXG5leHBvcnQgY29uc3QgREVGQVVMVF9KT0lOX1BST1BFUlRJRVNfU0VQQVJBVE9SOiBzdHJpbmcgPSAnIC0gJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0pPSU5fQVJSQVlfVkFMVUVTX1NFUEFSQVRPUjogc3RyaW5nID0gJywgJztcbiJdfQ==
@@ -10,6 +10,8 @@ export class DateUtils {
10
10
  static moment = _moment;
11
11
  static toDateISOString = toDateISOString;
12
12
  static fromDateISOString = fromDateISOString;
13
+ static fromUnixTimestamp = fromUnixTimestamp;
14
+ static fromUnixMsTimestamp = fromUnixMsTimestamp;
13
15
  static toDuration = toDuration;
14
16
  static min(date1, date2) {
15
17
  const d1 = fromDateISOString(date1);
@@ -118,6 +120,12 @@ export class DateUtils {
118
120
  return (days > 0 ? days.toString() + (dayUnit + ' ') : '') + hours + ':' + minutes + (seconds ? ':' + seconds : '');
119
121
  }
120
122
  }
123
+ /**
124
+ * Converts the given value to an ISO date string representation.
125
+ *
126
+ * @param {any} value - The value to be transformed into an ISO date string. This can be a date, a string, or other compatible formats.
127
+ * @return {string | undefined} Returns the ISO date string if the conversion is successful; otherwise, returns undefined.
128
+ */
121
129
  export function toDateISOString(value) {
122
130
  if (!value)
123
131
  return undefined;
@@ -131,31 +139,55 @@ export function toDateISOString(value) {
131
139
  return undefined;
132
140
  return DateUtils.isNoTime(date) ? date.toISOString(true /* important ! */).substring(0, 10) : date.toISOString();
133
141
  }
134
- export function fromDateISOString(value) {
142
+ /**
143
+ * Converts a given value to a Moment object if possible.
144
+ * If the given value is already a Moment object, it will simply return it.
145
+ * The method handles strings in ISO date formats, UNIX timestamps, and performs validation based on provided options.
146
+ *
147
+ * @param {any} value - The value to be converted to a Moment object. This can be a string representing a date, a UNIX timestamp, or a Moment object.
148
+ * @param {Object} [opts] - Optional parameters for controlling the method's behavior.
149
+ * @param {boolean} [opts.undefinedIfInvalid=true] - Determines if the method should return undefined for invalid dates. If set to false, an invalid Moment object will be returned instead.
150
+ * @param {boolean} [opts.strict=false] - Controls whether strict validation is performed. Strict mode enforces stricter date parsing rules.
151
+ * @param {boolean} [opts.requiredTime=false] - Allow to parse a date without any time
152
+ * @return {Moment | undefined} A Moment object if the value is successfully converted, or undefined if the conversion is not possible and undefinedIfInvalid is true.
153
+ */
154
+ export function fromDateISOString(value, opts = { undefinedIfInvalid: true, strict: false, requiredTime: false }) {
135
155
  // Already a moment object: use it
136
156
  if (!value || isMoment(value))
137
157
  return value;
138
- if (typeof value === 'string' && !!value.match(DATE_MATCH_REGEXP)) {
158
+ let date;
159
+ // Try without time
160
+ if (typeof value === 'string' && DATE_MATCH_REGEXP.test(value) && !opts?.requiredTime) {
139
161
  // Parse the input value, as a date only
140
- const dateOnly = DateUtils.moment(value, DATE_PATTERN, true);
141
- return DateUtils.markNoTime(dateOnly);
142
- }
143
- // Parse the input value, as a ISO date time
144
- const date = DateUtils.moment(value, DATE_ISO_PATTERN);
145
- if (date.isValid())
146
- return date;
147
- // Not valid: trying to convert from unix timestamp
148
- if (typeof value === 'string') {
149
- console.warn('Wrong date format - Trying to convert from local time: ' + value);
150
- if (value.length === 10) {
151
- return DateUtils.moment(value, DATE_UNIX_TIMESTAMP);
152
- }
153
- else if (value.length === 13) {
154
- return DateUtils.moment(value, DATE_UNIX_MS_TIMESTAMP);
162
+ date = DateUtils.moment(value, DATE_PATTERN, true);
163
+ // Mark as no time, if valid
164
+ if (date.isValid())
165
+ return DateUtils.markNoTime(date); // OK
166
+ }
167
+ else {
168
+ // Parse the input value, as a ISO date time
169
+ date = DateUtils.moment(value, DATE_ISO_PATTERN);
170
+ if (date.isValid())
171
+ return date; // OK
172
+ // Not valid: trying to convert from unix timestamp (if not strict mode)
173
+ if (typeof value === 'string' && !opts?.strict) {
174
+ // Log debug
175
+ console.debug('Wrong date format - Trying to convert from local time: ' + value);
176
+ if (value.length === 10) {
177
+ date = fromUnixTimestamp(value);
178
+ }
179
+ else if (value.length === 13) {
180
+ date = fromUnixMsTimestamp(value);
181
+ }
182
+ if (date.isValid())
183
+ return date; // OK
155
184
  }
156
185
  }
157
- console.warn('Unable to parse date: ' + value);
158
- return undefined;
186
+ // Return invalid date, if allowed
187
+ if (opts?.undefinedIfInvalid === false)
188
+ return date; // Return invalid
189
+ console.warn('Unable to parse date: ' + value, opts);
190
+ return undefined; // Return undefined, if invalid not allowed
159
191
  }
160
192
  export function fromUnixTimestamp(timeInSec) {
161
193
  return DateUtils.moment(timeInSec, DATE_UNIX_TIMESTAMP);
@@ -177,4 +209,4 @@ export function toDuration(value, unit) {
177
209
  }
178
210
  return duration;
179
211
  }
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9kYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssY0FBYyxNQUFNLFFBQVEsQ0FBQztBQUN6QyxPQUFPLEVBQWtELFFBQVEsRUFBOEQsTUFBTSxlQUFlLENBQUM7QUFDckosT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBUzNDLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBVyxjQUFjLENBQUMsQ0FBQztBQUV6RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQztBQUVwRCxNQUFNLE9BQU8sU0FBUztJQUNwQixNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUV4QixNQUFNLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7SUFDN0MsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFFL0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFhLEVBQUUsS0FBYTtRQUNyQyxNQUFNLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxNQUFNLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxF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QVc7SUFDWCxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUM3QixRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBtb21lbnRJbXBvcnRlZCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRHVyYXRpb24sIER1cmF0aW9uSW5wdXRBcmcxLCBEdXJhdGlvbklucHV0QXJnMiwgaXNNb21lbnQsIE1vbWVudCwgTW9tZW50Rm9ybWF0U3BlY2lmaWNhdGlvbiwgTW9tZW50SW5wdXQsIHVuaXRPZlRpbWUgfSBmcm9tICdtb21lbnQvbW9tZW50JztcbmltcG9ydCB7IERBVEVfSVNPX1BBVFRFUk4sIERBVEVfTUFUQ0hfUkVHRVhQLCBEQVRFX1BBVFRFUk4gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB1bndyYXBFU01vZHVsZSB9IGZyb20gJy4vbW9kdWxlcyc7XG5cbi8vIC8vIFdvcmthcm91bmQgZm9yIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZy1wYWNrYWdyL25nLXBhY2thZ3IvaXNzdWVzLzIyMTVcbnR5cGUgTW9tZW50Rm4gPSB7XG4gIChpbnA/OiBNb21lbnRJbnB1dCwgc3RyaWN0PzogYm9vbGVhbik6IE1vbWVudDtcbiAgKGlucD86IE1vbWVudElucHV0LCBmb3JtYXQ/OiBNb21lbnRGb3JtYXRTcGVjaWZpY2F0aW9uLCBzdHJpY3Q/OiBib29sZWFuKTogTW9tZW50O1xuICAoaW5wPzogTW9tZW50SW5wdXQsIGZvcm1hdD86IE1vbWVudEZvcm1hdFNwZWNpZmljYXRpb24sIGxhbmd1YWdlPzogc3RyaW5nLCBzdHJpY3Q/OiBib29sZWFuKTogTW9tZW50O1xuICBkdXJhdGlvbjogKGlucD86IER1cmF0aW9uSW5wdXRBcmcxLCB1bml0PzogRHVyYXRpb25JbnB1dEFyZzIpID0+IER1cmF0aW9uO1xufTtcbmNvbnN0IF9tb21lbnQgPSB1bndyYXBFU01vZHVsZTxNb21lbnRGbj4obW9tZW50SW1wb3J0ZWQpO1xuXG5leHBvcnQgY29uc3QgREFURV9VTklYX1RJTUVTVEFNUCA9ICdYJztcbmV4cG9ydCBjb25zdCBEQVRFX1VOSVhfTVNfVElNRVNUQU1QID0gJ3gnO1xuZXhwb3J0IGNvbnN0IE1PTUVOVF9OT19USU1FX1BST1BFUlRZID0gJ19oYXNOb1RpbWUnO1xuXG5leHBvcnQgY2xhc3MgRGF0ZVV0aWxzIHtcbiAgc3RhdGljIG1vbWVudCA9IF9tb21lbnQ7XG5cbiAgc3RhdGljIHRvRGF0ZUlTT1N0cmluZyA9IHRvRGF0ZUlTT1N0cmluZztcbiAgc3RhdGljIGZyb21EYXRlSVNPU3RyaW5nID0gZnJvbURhdGVJU09TdHJpbmc7XG4gIHN0YXRpYyB0b0R1cmF0aW9uID0gdG9EdXJhdGlvbjtcblxuICBzdGF0aWMgbWluKGRhdGUxOiBNb21lbnQsIGRhdGUyOiBNb21lbnQpOiBNb21lbnQge1xuICAgIGNvbnN0IGQxID0gZnJvbURhdGVJU09TdHJpbmcoZGF0ZTEpO1xuICAgIGNvbnN0IGQyID0gZnJvbURhdGVJU09TdHJpbmcoZGF0ZTIpO1xuICAgIHJldHVybiBkMSAmJiAoIWQyIHx8IGQxLmlzU2FtZU9yQmVmb3JlKGQyKSkgPyBkMSA6IGQyO1xuICB9XG5cbiAgc3RhdGljIG1heChkYXRlMTogTW9tZW50IHwgc3RyaW5nLCBkYXRlMjogTW9tZW50IHwgc3RyaW5nKTogTW9tZW50IHtcbiAgICBjb25zdCBkMSA9IGZyb21EYXRlSVNPU3RyaW5nKGRhdGUxKTtcbiAgICBjb25zdCBkMiA9IGZyb21EYXRlSVNPU3RyaW5nKGRhdGUyKTtcbiAgICByZXR1cm4gZDEgJiYgKCFkMiB8fCBkMS5pc1NhbWVPckFmdGVyKGQyKSkgPyBkMSA6IGQyO1xuICB9XG5cbiAgc3RhdGljIGVxdWFscyhkYXRlMTogTW9tZW50IHwgc3RyaW5nLCBkYXRlMjogTW9tZW50IHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIERhdGVVdGlscy5pc1NhbWUoZGF0ZTEsIGRhdGUyKTtcbiAgfVxuXG4gIHN0YXRpYyBpc1NhbWUoZGF0ZTE6IE1vbWVudCB8IHN0cmluZywgZGF0ZTI6IE1vbWVudCB8IHN0cmluZywgZ3JhbnVsYXJpdHk/OiB1bml0T2ZUaW1lLlN0YXJ0T2YpOiBib29sZWFuIHtcbiAgICBjb25zdCBkMSA9IGZyb21EYXRlSVNPU3RyaW5nKGRhdGUxKTtcbiAgICBjb25zdCBkMiA9IGZyb21EYXRlSVNPU3RyaW5nKGRhdGUyKTtcbiAgICByZXR1cm4gKCFkMSAmJiAhZDIpIHx8IChkMSAmJiBkMS5pc1NhbWUoZDIsIGdyYW51bGFyaXR5KSk7XG4gIH1cblxuICBzdGF0aWMgY29tcGFyZShkYXRlMTogTW9tZW50IHwgc3RyaW5nLCBkYXRlMjogTW9tZW50IHwgc3RyaW5nLCBncmFudWxhcml0eT86IHVuaXRPZlRpbWUuU3RhcnRPZik6IG51bWJlciB7XG4gICAgY29uc3QgZDEgPSBmcm9tRGF0ZUlTT1N0cmluZyhkYXRlMSk7XG4gICAgY29uc3QgZDIgPSBmcm9tRGF0ZUlTT1N0cmluZyhkYXRlMik7XG4gICAgaWYgKCghZDEgJiYgIWQyKSB8fCBkMT8uaXNTYW1lKGQyLCBncmFudWxhcml0eSkpIHJldHVybiAwOyAvLyBFcXVhbHNcbiAgICBpZiAoZDE/LmlzQWZ0ZXIoZDIsIGdyYW51bGFyaXR5KSkgcmV0dXJuIDE7IC8vIEFmdGVyXG4gICAgcmV0dXJuIC0xOyAvLyBCZWZvcmVcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGVzIGluIHRoZSBzcGVjaWZpZWQgdW5pdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7TW9tZW50IHwgc3RyaW5nfSBkYXRlMSAtIFRoZSBmaXJzdCBkYXRlIHRvIGNvbXBhcmUuXG4gICAqIEBwYXJhbSB7TW9tZW50IHwgc3RyaW5nfSBkYXRlMiAtIFRoZSBzZWNvbmQgZGF0ZSB0byBjb21wYXJlLlxuICAgKiBAcGFyYW0ge3VuaXRPZlRpbWUuQmFzZX0gW2R1cmF0aW9uVW5pdD0nc2Vjb25kcyddIC0gVGhlIHVuaXQgb2YgdGltZSB0byBleHByZXNzIHRoZSBkaWZmZXJlbmNlIGluIChkZWZhdWx0IGlzICdzZWNvbmRzJykuXG4gICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGFic29sdXRlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGRhdGVzIGV4cHJlc3NlZCBpbiB0aGUgc3BlY2lmaWVkIHVuaXRzLlxuICAgKi9cbiAgc3RhdGljIGRpZmZBYnMoZGF0ZTE6IE1vbWVudCB8IHN0cmluZywgZGF0ZTI6IE1vbWVudCB8IHN0cmluZywgZHVyYXRpb25Vbml0OiB1bml0T2ZUaW1lLkJhc2UgPSAnc2Vjb25kcycpOiBudW1iZXIge1xuICAgIGNvbnN0IGQxID0gZnJvbURhdGVJU09TdHJpbmcoZGF0ZTEpO1xuICAgIGNvbnN0IGQyID0gZnJvbURhdGVJU09TdHJpbmcoZGF0ZTIpO1xuICAgIGlmICghZDEgfHwgIWQyKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgMiBmaXJzdCByZXF1aXJlZCBhcmd1bWVudHMnKTsgLy8gQ2Fubm90IGNvbXB1dGVcbiAgICByZXR1cm4gRGF0ZVV0aWxzLm1vbWVudC5kdXJhdGlvbihkMS5kaWZmKGQyKSkuYWJzKCkuYXMoZHVyYXRpb25Vbml0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjb3B5IG9mIGEgZGF0ZSwgd2l0aG91dCB0aW1lIGZpZWxkcyAoYWx3YXlzIHJldHVybiBhIG5ldyBNb21lbnQgb2JqZWN0LCBvciB1bmRlZmluZWQpLlxuICAgKiBTYW1lIGltcGxlbWVudGF0aW9uIGFzIHRoZSBKYXZhIGNsYXNzIERhdGVzLnJlc2V0VGltZSgpIChzZWUgYW55IFNVTUFSaVMgbGlrZSBQb2QpXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiBAcGFyYW0gdGltZXpvbmUgYSB0aW1lem9uZSAoc2VlIGh0dHBzOi8vbW9tZW50anMuY29tL3RpbWV6b25lLylcbiAgICogQHBhcmFtIGtlZXBMb2NhbFRpbWUgaWYgdHJ1ZSwgb25seSB0aGUgdGltZXpvbmUgKGFuZCBvZmZzZXQpIGlzIHVwZGF0ZWQsIGtlZXBpbmcgdGhlIGxvY2FsIHRpbWUgc2FtZS4gQ29uc2VxdWVudGx5LCBpdCB3aWxsIG5vdyBwb2ludCB0byBhIGRpZmZlcmVudCBwb2ludCBpbiB0aW1lIGlmIHRoZSBvZmZzZXQgaGFzIGNoYW5nZWQuXG4gICAqL1xuICBzdGF0aWMgcmVzZXRUaW1lKHZhbHVlOiBNb21lbnQgfCBzdHJpbmcsIHRpbWV6b25lPzogc3RyaW5nLCBrZWVwTG9jYWxUaW1lPzogYm9vbGVhbik6IE1vbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBkYXRlID0gZnJvbURhdGVJU09TdHJpbmcodmFsdWUpO1xuICAgIC8vIE5vIHRpbWV6b25lXG4gICAgaWYgKCF0aW1lem9uZSkge1xuICAgICAgcmV0dXJuIGRhdGUuY2xvbmUoKS5zdGFydE9mKCdkYXknKTtcbiAgICB9XG4gICAgLy8gVXNlIHRpbWV6b25lXG4gICAgcmV0dXJuIGRhdGVcbiAgICAgIC5jbG9uZSgpIC8vIGNsb25lIHRoZSBvcmlnaW5hbCBkYXRlXG4gICAgICAudHoodGltZXpvbmUsIGtlZXBMb2NhbFRpbWUpXG4gICAgICAuc3RhcnRPZignZGF5Jyk7XG4gIH1cblxuICBzdGF0aWMgbWFya05vVGltZSh2YWx1ZTogTW9tZW50KTogTW9tZW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHZhbHVlW01PTUVOVF9OT19USU1FX1BST1BFUlRZXSA9IHRydWU7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIG1hcmtUaW1lKHZhbHVlOiBNb21lbnQpOiBNb21lbnQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgZGVsZXRlIHZhbHVlW01PTUVOVF9OT19USU1FX1BST1BFUlRZXTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgaXNOb1RpbWUodmFsdWU6IE1vbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZT8uW01PTUVOVF9OT19USU1FX1BST1BFUlRZXSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0IGlmIGEgZGF0ZSBpcyBvbiB0aGUgZ2l2ZW4gZGF5IG9mIHdlZWtcbiAgICpcbiAgICogQHBhcmFtIGRhdGVcbiAgICogQHBhcmFtIHdlZWtkYXlcbiAgICogQHBhcmFtIHRpbWV6b25lXG4gICAqL1xuICBzdGF0aWMgaXNBdERheShkYXRlOiBzdHJpbmcgfCBNb21lbnQsIHdlZWtkYXk6IG51bWJlciwgdGltZXpvbmU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgbW9tZW50RGF0ZSA9IGRhdGUgJiYgZnJvbURhdGVJU09TdHJpbmcoZGF0ZSk7XG4gICAgaWYgKCFtb21lbnREYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRpbWV6b25lKSBtb21lbnREYXRlID0gbW9tZW50RGF0ZS5jbG9uZSgpLnR6KHRpbWV6b25lKS5zdGFydE9mKCdkYXknKTtcbiAgICByZXR1cm4gbW9tZW50RGF0ZS5kYXkoKSA9PT0gd2Vla2RheTtcbiAgfVxuXG4gIHN0YXRpYyBkdXJhdGlvblRvU3RyaW5nKFxuICAgIHZhbHVlOiBudW1iZXIsXG4gICAgZGF5VW5pdDogc3RyaW5nLFxuICAgIG9wdHM/OiB1bml0T2ZUaW1lLkR1cmF0aW9uQ29uc3RydWN0b3IgfCB7IHVuaXQ/OiB1bml0T2ZUaW1lLkR1cmF0aW9uQ29uc3RydWN0b3I7IHNlY29uZHM/OiBib29sZWFuIH0gfCBhbnlcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgY29uc3QgdW5pdDogdW5pdE9mVGltZS5EdXJhdGlvbkNvbnN0cnVjdG9yID0gb3B0cz8udW5pdCB8fCBvcHRzIHx8ICdob3Vycyc7XG5cbiAgICAvLyB0cnkgd2l0aCBtb21lbnRcbiAgICBjb25zdCBkdXJhdGlvbiA9IHRvRHVyYXRpb24odmFsdWUsIHVuaXQpO1xuXG4gICAgY29uc3QgZGF5cyA9IGR1cmF0aW9uLmRheXMoKTtcbiAgICBjb25zdCBob3VycyA9IGR1cmF0aW9uLmhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBkdXJhdGlvbi5taW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IHNlY29uZHMgPSBvcHRzPy5zZWNvbmRzID8gZHVyYXRpb24uc2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSA6IG51bGw7XG5cbiAgICByZXR1cm4gKGRheXMgPiAwID8gZGF5cy50b1N0cmluZygpICsgKGRheVVuaXQgKyAnICcpIDogJycpICsgaG91cnMgKyAnOicgKyBtaW51dGVzICsgKHNlY29uZHMgPyAnOicgKyBzZWNvbmRzIDogJycpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0RhdGVJU09TdHJpbmcodmFsdWU6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgLy8gQWxyZWFkeSBhIHZhbGlkIElTTyBkYXRlIHRpbWUgc3RyaW5nICh3aXRob3V0IHRpbWV6b25lKTogdXNlIGl0XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmluZGV4T2YoJysnKSA9PT0gLTEgJiYgdmFsdWUubGFzdEluZGV4T2YoJ1onKSA9PT0gdmFsdWUubGVuZ3RoIC0gMSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICAvLyBNYWtlIHN1cmUgdG8gaGF2ZSBhIE1vbWVudCBvYmplY3RcbiAgY29uc3QgZGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHZhbHVlKTtcbiAgaWYgKCFkYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gRGF0ZVV0aWxzLmlzTm9UaW1lKGRhdGUpID8gZGF0ZS50b0lTT1N0cmluZyh0cnVlIC8qIGltcG9ydGFudCAhICovKS5zdWJzdHJpbmcoMCwgMTApIDogZGF0ZS50b0lTT1N0cmluZygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbURhdGVJU09TdHJpbmcodmFsdWU6IGFueSk6IE1vbWVudCB8IHVuZGVmaW5lZCB7XG4gIC8vIEFscmVhZHkgYSBtb21lbnQgb2JqZWN0OiB1c2UgaXRcbiAgaWYgKCF2YWx1ZSB8fCBpc01vbWVudCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhIXZhbHVlLm1hdGNoKERBVEVfTUFUQ0hfUkVHRVhQKSkge1xuICAgIC8vIFBhcnNlIHRoZSBpbnB1dCB2YWx1ZSwgYXMgYSBkYXRlIG9ubHlcbiAgICBjb25zdCBkYXRlT25seTogTW9tZW50ID0gRGF0ZVV0aWxzLm1vbWVudCh2YWx1ZSwgREFURV9QQVRURVJOLCB0cnVlKTtcbiAgICByZXR1cm4gRGF0ZVV0aWxzLm1hcmtOb1RpbWUoZGF0ZU9ubHkpO1xuICB9XG5cbiAgLy8gUGFyc2UgdGhlIGlucHV0IHZhbHVlLCBhcyBhIElTTyBkYXRlIHRpbWVcbiAgY29uc3QgZGF0ZTogTW9tZW50ID0gRGF0ZVV0aWxzLm1vbWVudCh2YWx1ZSwgREFURV9JU09fUEFUVEVSTik7XG4gIGlmIChkYXRlLmlzVmFsaWQoKSkgcmV0dXJuIGRhdGU7XG5cbiAgLy8gTm90IHZhbGlkOiB0cnlpbmcgdG8gY29udmVydCBmcm9tIHVuaXggdGltZXN0YW1wXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc29sZS53YXJuKCdXcm9uZyBkYXRlIGZvcm1hdCAtIFRyeWluZyB0byBjb252ZXJ0IGZyb20gbG9jYWwgdGltZTogJyArIHZhbHVlKTtcbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxMCkge1xuICAgICAgcmV0dXJuIERhdGVVdGlscy5tb21lbnQodmFsdWUsIERBVEVfVU5JWF9USU1FU1RBTVApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID09PSAxMykge1xuICAgICAgcmV0dXJuIERhdGVVdGlscy5tb21lbnQodmFsdWUsIERBVEVfVU5JWF9NU19USU1FU1RBTVApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnNvbGUud2FybignVW5hYmxlIHRvIHBhcnNlIGRhdGU6ICcgKyB2YWx1ZSk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVW5peFRpbWVzdGFtcCh0aW1lSW5TZWM6IG51bWJlcikge1xuICByZXR1cm4gRGF0ZVV0aWxzLm1vbWVudCh0aW1lSW5TZWMsIERBVEVfVU5JWF9USU1FU1RBTVApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Vbml4TXNUaW1lc3RhbXAodGltZUluTXM6IG51bWJlcikge1xuICByZXR1cm4gRGF0ZVV0aWxzLm1vbWVudCh0aW1lSW5NcywgREFURV9VTklYX01TX1RJTUVTVEFNUCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0R1cmF0aW9uKHZhbHVlOiBudW1iZXIsIHVuaXQ/OiB1bml0T2ZUaW1lLkR1cmF0aW9uQ29uc3RydWN0b3IpOiBEdXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZHVyYXRpb24gPSBEYXRlVXRpbHMubW9tZW50LmR1cmF0aW9uKHZhbHVlLCB1bml0KTtcblxuICAvLyBmaXggOTkwKyBtc1xuICBpZiAoZHVyYXRpb24ubWlsbGlzZWNvbmRzKCkgPj0gOTkwKSB7XG4gICAgZHVyYXRpb24uYWRkKDEwMDAgLSBkdXJhdGlvbi5taWxsaXNlY29uZHMoKSwgJ21zJyk7XG4gIH1cbiAgLy8gZml4IDU5IHNcbiAgaWYgKGR1cmF0aW9uLnNlY29uZHMoKSA+PSA1OSkge1xuICAgIGR1cmF0aW9uLmFkZCg2MCAtIGR1cmF0aW9uLnNlY29uZHMoKSwgJ3MnKTtcbiAgfVxuXG4gIHJldHVybiBkdXJhdGlvbjtcbn1cbiJdfQ==
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9kYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssY0FBYyxNQUFNLFFBQVEsQ0FBQztBQUN6QyxPQUFPLEVBQWtELFFBQVEsRUFBOEQsTUFBTSxlQUFlLENBQUM7QUFDckosT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBUzNDLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBVyxjQUFjLENBQUMsQ0FBQztBQUV6RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLFlBQVksQ0FBQztBQUVwRCxNQUFNLE9BQU8sU0FBUztJQUNwQixNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUV4QixNQUFNLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7SUFDN0MsTUFBTSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0lBQzdDLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztJQUNqRCxNQUFNLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUUvQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQWEsRUFBRSxLQUFhO1FBQ3JDLE1BQU0sRUFBRSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sRUFBRSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxF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LFNBQXNCO0lBQ3RELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBQ0QsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFFBQXFCO0lBQ3ZELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhLEVBQUUsSUFBcUM7SUFDN0UsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUU3QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFeEQsY0FBYztJQUNkLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsV0FBVztJQUNYLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzdCLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG1vbWVudEltcG9ydGVkIGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgRHVyYXRpb25JbnB1dEFyZzEsIER1cmF0aW9uSW5wdXRBcmcyLCBpc01vbWVudCwgTW9tZW50LCBNb21lbnRGb3JtYXRTcGVjaWZpY2F0aW9uLCBNb21lbnRJbnB1dCwgdW5pdE9mVGltZSB9IGZyb20gJ21vbWVudC9tb21lbnQnO1xuaW1wb3J0IHsgREFURV9JU09fUEFUVEVSTiwgREFURV9NQVRDSF9SRUdFWFAsIERBVEVfUEFUVEVSTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IHVud3JhcEVTTW9kdWxlIH0gZnJvbSAnLi9tb2R1bGVzJztcblxuLy8gLy8gV29ya2Fyb3VuZCBmb3IgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL25nLXBhY2thZ3IvbmctcGFja2Fnci9pc3N1ZXMvMjIxNVxudHlwZSBNb21lbnRGbiA9IHtcbiAgKGlucD86IE1vbWVudElucHV0LCBzdHJpY3Q/OiBib29sZWFuKTogTW9tZW50O1xuICAoaW5wPzogTW9tZW50SW5wdXQsIGZvcm1hdD86IE1vbWVudEZvcm1hdFNwZWNpZmljYXRpb24sIHN0cmljdD86IGJvb2xlYW4pOiBNb21lbnQ7XG4gIChpbnA/OiBNb21lbnRJbnB1dCwgZm9ybWF0PzogTW9tZW50Rm9ybWF0U3BlY2lmaWNhdGlvbiwgbGFuZ3VhZ2U/OiBzdHJpbmcsIHN0cmljdD86IGJvb2xlYW4pOiBNb21lbnQ7XG4gIGR1cmF0aW9uOiAoaW5wPzogRHVyYXRpb25JbnB1dEFyZzEsIHVuaXQ/OiBEdXJhdGlvbklucHV0QXJnMikgPT4gRHVyYXRpb247XG59O1xuY29uc3QgX21vbWVudCA9IHVud3JhcEVTTW9kdWxlPE1vbWVudEZuPihtb21lbnRJbXBvcnRlZCk7XG5cbmV4cG9ydCBjb25zdCBEQVRFX1VOSVhfVElNRVNUQU1QID0gJ1gnO1xuZXhwb3J0IGNvbnN0IERBVEVfVU5JWF9NU19USU1FU1RBTVAgPSAneCc7XG5leHBvcnQgY29uc3QgTU9NRU5UX05PX1RJTUVfUFJPUEVSVFkgPSAnX2hhc05vVGltZSc7XG5cbmV4cG9ydCBjbGFzcyBEYXRlVXRpbHMge1xuICBzdGF0aWMgbW9tZW50ID0gX21vbWVudDtcblxuICBzdGF0aWMgdG9EYXRlSVNPU3RyaW5nID0gdG9EYXRlSVNPU3RyaW5nO1xuICBzdGF0aWMgZnJvbURhdGVJU09TdHJpbmcgPSBmcm9tRGF0ZUlTT1N0cmluZztcbiAgc3RhdGljIGZyb21Vbml4VGltZXN0YW1wID0gZnJvbVVuaXhUaW1lc3RhbXA7XG4gIHN0YXRpYyBmcm9tVW5peE1zVGltZXN0YW1wID0gZnJvbVVuaXhNc1RpbWVzdGFtcDtcbiAgc3RhdGljIHRvRHVyYXRpb24gPSB0b0R1cmF0aW9uO1xuXG4gIHN0YXRpYyBtaW4oZGF0ZTE6IE1vbWVudCwgZGF0ZTI6IE1vbWVudCk6IE1vbWVudCB7XG4gICAgY29uc3QgZDEgPSBmcm9tRGF0ZUlTT1N0cmluZyhkYXRlMSk7XG4gICAgY29uc3QgZDIgPSBmcm9tRGF0ZUlTT1N0cmluZyhkYXRlMik7XG4gICAgcmV0dXJuIGQxICYmICghZDIgfHwgZDEuaXNTYW1lT3JCZWZvcmUoZDIpKSA/IGQxIDogZDI7XG4gIH1cblxuICBzdGF0aWMgbWF4KGRhdGUxOiBNb21lbnQgfCBzdHJpbmcsIGRhdGUyOiBNb21lbnQgfCBzdHJpbmcpOiBNb21lbnQge1xuICAgIGNvbnN0IGQxID0gZnJvbURhdGVJU09TdHJpbmcoZGF0ZTEpO1xuICAgIGNvbnN0IGQyID0gZnJvbURhdGVJU09TdHJpbmcoZGF0ZTIpO1xuICAgIHJldHVybiBkMSAmJiAoIWQyIHx8IGQxLmlzU2FtZU9yQWZ0ZXIoZDIpKSA/IGQxIDogZDI7XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzKGRhdGUxOiBNb21lbnQgfCBzdHJpbmcsIGRhdGUyOiBNb21lbnQgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRGF0ZVV0aWxzLmlzU2FtZShkYXRlMSwgZGF0ZTIpO1xuICB9XG5cbiAgc3RhdGljIGlzU2FtZShkYXRlMTogTW9tZW50IHwgc3RyaW5nLCBkYXRlMjogTW9tZW50IHwgc3RyaW5nLCBncmFudWxhcml0eT86IHVuaXRPZlRpbWUuU3RhcnRPZik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGQxID0gZnJvbURhdGVJU09TdHJpbmcoZGF0ZTEpO1xuICAgIGNvbnN0IGQyID0gZnJvbURhdGVJU09TdHJpbmcoZGF0ZTIpO1xuICAgIHJldHVybiAoIWQxICYmICFkMikgfHwgKGQxICYmIGQxLmlzU2FtZShkMiwgZ3JhbnVsYXJpdHkpKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wYXJlKGRhdGUxOiBNb21lbnQgfCBzdHJpbmcsIGRhdGUyOiBNb21lbnQgfCBzdHJpbmcsIGdyYW51bGFyaXR5PzogdW5pdE9mVGltZS5TdGFydE9mKTogbnVtYmVyIHtcbiAgICBjb25zdCBkMSA9IGZyb21EYXRlSVNPU3RyaW5nKGRhdGUxKTtcbiAgICBjb25zdCBkMiA9IGZyb21EYXRlSVNPU3RyaW5nKGRhdGUyKTtcbiAgICBpZiAoKCFkMSAmJiAhZDIpIHx8IGQxPy5pc1NhbWUoZDIsIGdyYW51bGFyaXR5KSkgcmV0dXJuIDA7IC8vIEVxdWFsc1xuICAgIGlmIChkMT8uaXNBZnRlcihkMiwgZ3JhbnVsYXJpdHkpKSByZXR1cm4gMTsgLy8gQWZ0ZXJcbiAgICByZXR1cm4gLTE7IC8vIEJlZm9yZVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGFic29sdXRlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZGF0ZXMgaW4gdGhlIHNwZWNpZmllZCB1bml0cy5cbiAgICpcbiAgICogQHBhcmFtIHtNb21lbnQgfCBzdHJpbmd9IGRhdGUxIC0gVGhlIGZpcnN0IGRhdGUgdG8gY29tcGFyZS5cbiAgICogQHBhcmFtIHtNb21lbnQgfCBzdHJpbmd9IGRhdGUyIC0gVGhlIHNlY29uZCBkYXRlIHRvIGNvbXBhcmUuXG4gICAqIEBwYXJhbSB7dW5pdE9mVGltZS5CYXNlfSBbZHVyYXRpb25Vbml0PSdzZWNvbmRzJ10gLSBUaGUgdW5pdCBvZiB0aW1lIHRvIGV4cHJlc3MgdGhlIGRpZmZlcmVuY2UgaW4gKGRlZmF1bHQgaXMgJ3NlY29uZHMnKS5cbiAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gZGF0ZXMgZXhwcmVzc2VkIGluIHRoZSBzcGVjaWZpZWQgdW5pdHMuXG4gICAqL1xuICBzdGF0aWMgZGlmZkFicyhkYXRlMTogTW9tZW50IHwgc3RyaW5nLCBkYXRlMjogTW9tZW50IHwgc3RyaW5nLCBkdXJhdGlvblVuaXQ6IHVuaXRPZlRpbWUuQmFzZSA9ICdzZWNvbmRzJyk6IG51bWJlciB7XG4gICAgY29uc3QgZDEgPSBmcm9tRGF0ZUlTT1N0cmluZyhkYXRlMSk7XG4gICAgY29uc3QgZDIgPSBmcm9tRGF0ZUlTT1N0cmluZyhkYXRlMik7XG4gICAgaWYgKCFkMSB8fCAhZDIpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyAyIGZpcnN0IHJlcXVpcmVkIGFyZ3VtZW50cycpOyAvLyBDYW5ub3QgY29tcHV0ZVxuICAgIHJldHVybiBEYXRlVXRpbHMubW9tZW50LmR1cmF0aW9uKGQxLmRpZmYoZDIpKS5hYnMoKS5hcyhkdXJhdGlvblVuaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNvcHkgb2YgYSBkYXRlLCB3aXRob3V0IHRpbWUgZmllbGRzIChhbHdheXMgcmV0dXJuIGEgbmV3IE1vbWVudCBvYmplY3QsIG9yIHVuZGVmaW5lZCkuXG4gICAqIFNhbWUgaW1wbGVtZW50YXRpb24gYXMgdGhlIEphdmEgY2xhc3MgRGF0ZXMucmVzZXRUaW1lKCkgKHNlZSBhbnkgU1VNQVJpUyBsaWtlIFBvZClcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqIEBwYXJhbSB0aW1lem9uZSBhIHRpbWV6b25lIChzZWUgaHR0cHM6Ly9tb21lbnRqcy5jb20vdGltZXpvbmUvKVxuICAgKiBAcGFyYW0ga2VlcExvY2FsVGltZSBpZiB0cnVlLCBvbmx5IHRoZSB0aW1lem9uZSAoYW5kIG9mZnNldCkgaXMgdXBkYXRlZCwga2VlcGluZyB0aGUgbG9jYWwgdGltZSBzYW1lLiBDb25zZXF1ZW50bHksIGl0IHdpbGwgbm93IHBvaW50IHRvIGEgZGlmZmVyZW50IHBvaW50IGluIHRpbWUgaWYgdGhlIG9mZnNldCBoYXMgY2hhbmdlZC5cbiAgICovXG4gIHN0YXRpYyByZXNldFRpbWUodmFsdWU6IE1vbWVudCB8IHN0cmluZywgdGltZXpvbmU/OiBzdHJpbmcsIGtlZXBMb2NhbFRpbWU/OiBib29sZWFuKTogTW9tZW50IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyh2YWx1ZSk7XG4gICAgLy8gTm8gdGltZXpvbmVcbiAgICBpZiAoIXRpbWV6b25lKSB7XG4gICAgICByZXR1cm4gZGF0ZS5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpO1xuICAgIH1cbiAgICAvLyBVc2UgdGltZXpvbmVcbiAgICByZXR1cm4gZGF0ZVxuICAgICAgLmNsb25lKCkgLy8gY2xvbmUgdGhlIG9yaWdpbmFsIGRhdGVcbiAgICAgIC50eih0aW1lem9uZSwga2VlcExvY2FsVGltZSlcbiAgICAgIC5zdGFydE9mKCdkYXknKTtcbiAgfVxuXG4gIHN0YXRpYyBtYXJrTm9UaW1lKHZhbHVlOiBNb21lbnQgfCB1bmRlZmluZWQpOiBNb21lbnQgfCB1bmRlZmluZWQge1xuICAgIGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdmFsdWVbTU9NRU5UX05PX1RJTUVfUFJPUEVSVFldID0gdHJ1ZTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzdGF0aWMgbWFya1RpbWUodmFsdWU6IE1vbWVudCk6IE1vbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBkZWxldGUgdmFsdWVbTU9NRU5UX05PX1RJTUVfUFJPUEVSVFldO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHN0YXRpYyBpc05vVGltZSh2YWx1ZTogTW9tZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlPy5bTU9NRU5UX05PX1RJTUVfUFJPUEVSVFldID09PSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlc3QgaWYgYSBkYXRlIGlzIG9uIHRoZSBnaXZlbiBkYXkgb2Ygd2Vla1xuICAgKlxuICAgKiBAcGFyYW0gZGF0ZVxuICAgKiBAcGFyYW0gd2Vla2RheVxuICAgKiBAcGFyYW0gdGltZXpvbmVcbiAgICovXG4gIHN0YXRpYyBpc0F0RGF5KGRhdGU6IHN0cmluZyB8IE1vbWVudCwgd2Vla2RheTogbnVtYmVyLCB0aW1lem9uZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCBtb21lbnREYXRlID0gZGF0ZSAmJiBmcm9tRGF0ZUlTT1N0cmluZyhkYXRlKTtcbiAgICBpZiAoIW1vbWVudERhdGUpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGltZXpvbmUpIG1vbWVudERhdGUgPSBtb21lbnREYXRlLmNsb25lKCkudHoodGltZXpvbmUpLnN0YXJ0T2YoJ2RheScpO1xuICAgIHJldHVybiBtb21lbnREYXRlLmRheSgpID09PSB3ZWVrZGF5O1xuICB9XG5cbiAgc3RhdGljIGR1cmF0aW9uVG9TdHJpbmcoXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBkYXlVbml0OiBzdHJpbmcsXG4gICAgb3B0cz86IHVuaXRPZlRpbWUuRHVyYXRpb25Db25zdHJ1Y3RvciB8IHsgdW5pdD86IHVuaXRPZlRpbWUuRHVyYXRpb25Db25zdHJ1Y3Rvcjsgc2Vjb25kcz86IGJvb2xlYW4gfSB8IGFueVxuICApOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcbiAgICBjb25zdCB1bml0OiB1bml0T2ZUaW1lLkR1cmF0aW9uQ29uc3RydWN0b3IgPSBvcHRzPy51bml0IHx8IG9wdHMgfHwgJ2hvdXJzJztcblxuICAgIC8vIHRyeSB3aXRoIG1vbWVudFxuICAgIGNvbnN0IGR1cmF0aW9uID0gdG9EdXJhdGlvbih2YWx1ZSwgdW5pdCk7XG5cbiAgICBjb25zdCBkYXlzID0gZHVyYXRpb24uZGF5cygpO1xuICAgIGNvbnN0IGhvdXJzID0gZHVyYXRpb24uaG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDMsICcwJyk7XG4gICAgY29uc3QgbWludXRlcyA9IGR1cmF0aW9uLm1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgY29uc3Qgc2Vjb25kcyA9IG9wdHM/LnNlY29uZHMgPyBkdXJhdGlvbi5zZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpIDogbnVsbDtcblxuICAgIHJldHVybiAoZGF5cyA+IDAgPyBkYXlzLnRvU3RyaW5nKCkgKyAoZGF5VW5pdCArICcgJykgOiAnJykgKyBob3VycyArICc6JyArIG1pbnV0ZXMgKyAoc2Vjb25kcyA/ICc6JyArIHNlY29uZHMgOiAnJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gdmFsdWUgdG8gYW4gSVNPIGRhdGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSB0cmFuc2Zvcm1lZCBpbnRvIGFuIElTTyBkYXRlIHN0cmluZy4gVGhpcyBjYW4gYmUgYSBkYXRlLCBhIHN0cmluZywgb3Igb3RoZXIgY29tcGF0aWJsZSBmb3JtYXRzLlxuICogQHJldHVybiB7c3RyaW5nIHwgdW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBJU08gZGF0ZSBzdHJpbmcgaWYgdGhlIGNvbnZlcnNpb24gaXMgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlLCByZXR1cm5zIHVuZGVmaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRGF0ZUlTT1N0cmluZyh2YWx1ZTogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyBBbHJlYWR5IGEgdmFsaWQgSVNPIGRhdGUgdGltZSBzdHJpbmcgKHdpdGhvdXQgdGltZXpvbmUpOiB1c2UgaXRcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuaW5kZXhPZignKycpID09PSAtMSAmJiB2YWx1ZS5sYXN0SW5kZXhPZignWicpID09PSB2YWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIC8vIE1ha2Ugc3VyZSB0byBoYXZlIGEgTW9tZW50IG9iamVjdFxuICBjb25zdCBkYXRlID0gZnJvbURhdGVJU09TdHJpbmcodmFsdWUpO1xuICBpZiAoIWRhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBEYXRlVXRpbHMuaXNOb1RpbWUoZGF0ZSkgPyBkYXRlLnRvSVNPU3RyaW5nKHRydWUgLyogaW1wb3J0YW50ICEgKi8pLnN1YnN0cmluZygwLCAxMCkgOiBkYXRlLnRvSVNPU3RyaW5nKCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBnaXZlbiB2YWx1ZSB0byBhIE1vbWVudCBvYmplY3QgaWYgcG9zc2libGUuXG4gKiBJZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYWxyZWFkeSBhIE1vbWVudCBvYmplY3QsIGl0IHdpbGwgc2ltcGx5IHJldHVybiBpdC5cbiAqIFRoZSBtZXRob2QgaGFuZGxlcyBzdHJpbmdzIGluIElTTyBkYXRlIGZvcm1hdHMsIFVOSVggdGltZXN0YW1wcywgYW5kIHBlcmZvcm1zIHZhbGlkYXRpb24gYmFzZWQgb24gcHJvdmlkZWQgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgY29udmVydGVkIHRvIGEgTW9tZW50IG9iamVjdC4gVGhpcyBjYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZGF0ZSwgYSBVTklYIHRpbWVzdGFtcCwgb3IgYSBNb21lbnQgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNvbnRyb2xsaW5nIHRoZSBtZXRob2QncyBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMudW5kZWZpbmVkSWZJbnZhbGlkPXRydWVdIC0gRGV0ZXJtaW5lcyBpZiB0aGUgbWV0aG9kIHNob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBpbnZhbGlkIGRhdGVzLiBJZiBzZXQgdG8gZmFsc2UsIGFuIGludmFsaWQgTW9tZW50IG9iamVjdCB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN0cmljdD1mYWxzZV0gLSBDb250cm9scyB3aGV0aGVyIHN0cmljdCB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZC4gU3RyaWN0IG1vZGUgZW5mb3JjZXMgc3RyaWN0ZXIgZGF0ZSBwYXJzaW5nIHJ1bGVzLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5yZXF1aXJlZFRpbWU9ZmFsc2VdIC0gQWxsb3cgdG8gcGFyc2UgYSBkYXRlIHdpdGhvdXQgYW55IHRpbWVcbiAqIEByZXR1cm4ge01vbWVudCB8IHVuZGVmaW5lZH0gQSBNb21lbnQgb2JqZWN0IGlmIHRoZSB2YWx1ZSBpcyBzdWNjZXNzZnVsbHkgY29udmVydGVkLCBvciB1bmRlZmluZWQgaWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHBvc3NpYmxlIGFuZCB1bmRlZmluZWRJZkludmFsaWQgaXMgdHJ1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21EYXRlSVNPU3RyaW5nKFxuICB2YWx1ZTogYW55LFxuICBvcHRzOiB7IHVuZGVmaW5lZElmSW52YWxpZD86IGJvb2xlYW47IHN0cmljdD86IGJvb2xlYW47IHJlcXVpcmVkVGltZT86IGJvb2xlYW4gfSA9IHsgdW5kZWZpbmVkSWZJbnZhbGlkOiB0cnVlLCBzdHJpY3Q6IGZhbHNlLCByZXF1aXJlZFRpbWU6IGZhbHNlIH1cbik6IE1vbWVudCB8IHVuZGVmaW5lZCB7XG4gIC8vIEFscmVhZHkgYSBtb21lbnQgb2JqZWN0OiB1c2UgaXRcbiAgaWYgKCF2YWx1ZSB8fCBpc01vbWVudCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcblxuICBsZXQgZGF0ZTogTW9tZW50O1xuXG4gIC8vIFRyeSB3aXRob3V0IHRpbWVcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgREFURV9NQVRDSF9SRUdFWFAudGVzdCh2YWx1ZSkgJiYgIW9wdHM/LnJlcXVpcmVkVGltZSkge1xuICAgIC8vIFBhcnNlIHRoZSBpbnB1dCB2YWx1ZSwgYXMgYSBkYXRlIG9ubHlcbiAgICBkYXRlID0gRGF0ZVV0aWxzLm1vbWVudCh2YWx1ZSwgREFURV9QQVRURVJOLCB0cnVlKTtcblxuICAgIC8vIE1hcmsgYXMgbm8gdGltZSwgaWYgdmFsaWRcbiAgICBpZiAoZGF0ZS5pc1ZhbGlkKCkpIHJldHVybiBEYXRlVXRpbHMubWFya05vVGltZShkYXRlKTsgLy8gT0tcbiAgfSBlbHNlIHtcbiAgICAvLyBQYXJzZSB0aGUgaW5wdXQgdmFsdWUsIGFzIGEgSVNPIGRhdGUgdGltZVxuICAgIGRhdGUgPSBEYXRlVXRpbHMubW9tZW50KHZhbHVlLCBEQVRFX0lTT19QQVRURVJOKTtcblxuICAgIGlmIChkYXRlLmlzVmFsaWQoKSkgcmV0dXJuIGRhdGU7IC8vIE9LXG5cbiAgICAvLyBOb3QgdmFsaWQ6IHRyeWluZyB0byBjb252ZXJ0IGZyb20gdW5peCB0aW1lc3RhbXAgKGlmIG5vdCBzdHJpY3QgbW9kZSlcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhb3B0cz8uc3RyaWN0KSB7XG4gICAgICAvLyBMb2cgZGVidWdcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1dyb25nIGRhdGUgZm9ybWF0IC0gVHJ5aW5nIHRvIGNvbnZlcnQgZnJvbSBsb2NhbCB0aW1lOiAnICsgdmFsdWUpO1xuXG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxMCkge1xuICAgICAgICBkYXRlID0gZnJvbVVuaXhUaW1lc3RhbXAodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPT09IDEzKSB7XG4gICAgICAgIGRhdGUgPSBmcm9tVW5peE1zVGltZXN0YW1wKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGUuaXNWYWxpZCgpKSByZXR1cm4gZGF0ZTsgLy8gT0tcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm4gaW52YWxpZCBkYXRlLCBpZiBhbGxvd2VkXG4gIGlmIChvcHRzPy51bmRlZmluZWRJZkludmFsaWQgPT09IGZhbHNlKSByZXR1cm4gZGF0ZTsgLy8gUmV0dXJuIGludmFsaWRcblxuICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBwYXJzZSBkYXRlOiAnICsgdmFsdWUsIG9wdHMpO1xuICByZXR1cm4gdW5kZWZpbmVkOyAvLyBSZXR1cm4gdW5kZWZpbmVkLCBpZiBpbnZhbGlkIG5vdCBhbGxvd2VkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVW5peFRpbWVzdGFtcCh0aW1lSW5TZWM6IE1vbWVudElucHV0KSB7XG4gIHJldHVybiBEYXRlVXRpbHMubW9tZW50KHRpbWVJblNlYywgREFURV9VTklYX1RJTUVTVEFNUCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZnJvbVVuaXhNc1RpbWVzdGFtcCh0aW1lSW5NczogTW9tZW50SW5wdXQpIHtcbiAgcmV0dXJuIERhdGVVdGlscy5tb21lbnQodGltZUluTXMsIERBVEVfVU5JWF9NU19USU1FU1RBTVApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9EdXJhdGlvbih2YWx1ZTogbnVtYmVyLCB1bml0PzogdW5pdE9mVGltZS5EdXJhdGlvbkNvbnN0cnVjdG9yKTogRHVyYXRpb24gfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGR1cmF0aW9uID0gRGF0ZVV0aWxzLm1vbWVudC5kdXJhdGlvbih2YWx1ZSwgdW5pdCk7XG5cbiAgLy8gZml4IDk5MCsgbXNcbiAgaWYgKGR1cmF0aW9uLm1pbGxpc2Vjb25kcygpID49IDk5MCkge1xuICAgIGR1cmF0aW9uLmFkZCgxMDAwIC0gZHVyYXRpb24ubWlsbGlzZWNvbmRzKCksICdtcycpO1xuICB9XG4gIC8vIGZpeCA1OSBzXG4gIGlmIChkdXJhdGlvbi5zZWNvbmRzKCkgPj0gNTkpIHtcbiAgICBkdXJhdGlvbi5hZGQoNjAgLSBkdXJhdGlvbi5zZWNvbmRzKCksICdzJyk7XG4gIH1cblxuICByZXR1cm4gZHVyYXRpb247XG59XG4iXX0=
@@ -12,7 +12,7 @@ export class CsvUtils {
12
12
  return; // Skip if empty
13
13
  // Create text content
14
14
  const separator = opts?.separator || ',';
15
- const protectCellRegexp = new RegExp('/("|' + separator + '|\n)/g');
15
+ const protectCellRegexp = new RegExp('/("|' + separator + '|\n)/');
16
16
  const includedProperties = opts?.includedProperties || Object.keys(rows[0]);
17
17
  const filteredProperties = isNotEmptyArray(opts?.excludedProperties)
18
18
  ? includedProperties.filter((k) => !opts?.excludedProperties.includes(k))
@@ -94,4 +94,4 @@ export class CsvUtils {
94
94
  return defaultEncoding;
95
95
  }
96
96
  }
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZmlsZS9jc3YudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFhLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBS25GLFVBQVU7QUFDVixNQUFNLE9BQU8sUUFBUTtJQUNuQixNQUFNLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7SUFFbEMsTUFBTSxDQUFDLFlBQVksQ0FDakIsSUFBYyxFQUNkLElBU0M7UUFFRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsZ0JBQWdCO1FBRW5ELHNCQUFzQjtRQUN0QixNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDcEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEVBQUUsa0JBQWtCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUM7WUFDbEUs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QUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCO1lBQ3JFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFNBQTRCLEVBQUUsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQjtRQUN0RyxNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksU0FBUyxJQUFJLFNBQVMsS0FBSyxHQUFHO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDckQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFNBQTJCLEVBQUUsZUFBZSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0I7UUFDbEcsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLENBQUM7UUFDaEMsTUFBTSxRQUFRLEdBQUcsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLFFBQVEsSUFBSSxRQUFRLEtBQUssR0FBRztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBQ2xELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBGaWxlRXZlbnQsIEZpbGVSZXNwb25zZSB9IGZyb20gJy4uL3VwbG9hZC1maWxlL3VwbG9hZC1maWxlLm1vZGVsJztcbmltcG9ydCB7IEZpbGVzVXRpbHMgfSBmcm9tICcuL2ZpbGUudXRpbHMnO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlCeVBhdGgsIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgRGlzcGxheUZuIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vL0BkeW5hbWljXG5leHBvcnQgY2xhc3MgQ3N2VXRpbHMge1xuICBzdGF0aWMgREVGQVVMVF9TRVBBUkFUT1IgPSAnLCc7XG4gIHN0YXRpYyBERUZBVUxUX0VOQ09ESU5HID0gJ1VURi04JztcblxuICBzdGF0aWMgZXhwb3J0VG9GaWxlKFxuICAgIHJvd3M6IG9iamVjdFtdLFxuICAgIG9wdHM/OiB7XG4gICAgICBmaWxlbmFtZT86IHN0cmluZztcbiAgICAgIGhlYWRlcnM/OiBzdHJpbmdbXTtcbiAgICAgIGluY2x1ZGVkUHJvcGVydGllcz86IHN0cmluZ1tdO1xuICAgICAgZXhjbHVkZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gICAgICBmb3JtYXR0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBEaXNwbGF5Rm4gfTtcbiAgICAgIHNlcGFyYXRvcj86IHN0cmluZztcbiAgICAgIGVuY29kaW5nPzogc3RyaW5nO1xuICAgICAgdHlwZT86IHN0cmluZztcbiAgICB9XG4gICkge1xuICAgIGlmICghcm93cyB8fCAhcm93cy5sZW5ndGgpIHJldHVybjsgLy8gU2tpcCBpZiBlbXB0eVxuXG4gICAgLy8gQ3JlYXRlIHRleHQgY29udGVudFxuICAgIGNvbnN0IHNlcGFyYXRvciA9IG9wdHM/LnNlcGFyYXRvciB8fCAnLCc7XG4gICAgY29uc3QgcHJvdGVjdENlbGxSZWdleHAgPSBuZXcgUmVnRXhwKCcvKFwifCcgKyBzZXBhcmF0b3IgKyAnfFxcbikvZycpO1xuICAgIGNvbnN0IGluY2x1ZGVkUHJvcGVydGllcyA9IG9wdHM/LmluY2x1ZGVkUHJvcGVydGllcyB8fCBPYmplY3Qua2V5cyhyb3dzWzBdKTtcbiAgICBjb25zdCBmaWx0ZXJlZFByb3BlcnRpZXMgPSBpc05vdEVtcHR5QXJyYXkob3B0cz8uZXhjbHVkZWRQcm9wZXJ0aWVzKVxuICAgICAgPyBpbmNsdWRlZFByb3BlcnRpZXMuZmlsdGVyKChrKSA9PiAhb3B0cz8uZXhjbHVkZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGspKVxuICAgICAgOiBpbmNsdWRlZFByb3BlcnRpZXM7XG4gICAgY29uc3QgaGVhZGVycyA9IG9wdHM/LmhlYWRlcnMgfHwgaW5jbHVkZWRQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IHRleHRDb250ZW50ID1cbiAgICAgIC8vIEhlYWRlciByb3dcbiAgICAgIGhlYWRlcnMuam9pbihzZXBhcmF0b3IpICtcbiAgICAgICdcXG4nICtcbiAgICAgIC8vIERhdGEgcm93c1xuICAgICAgcm93c1xuICAgICAgICAubWFwKChyb3cpID0+XG4gICAgICAgICAgZmlsdGVyZWRQcm9wZXJ0aWVzXG4gICAgICAgICAgICAubWFwKChrKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0UHJvcGVydHlCeVBhdGgocm93LCBrKTtcbiAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IGlzTmlsKHZhbHVlKSA/ICcnIDogdmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG9wdHM/LmZvcm1hdHRlcnM/LltrXTtcbiAgICAgICAgICAgICAgbGV0IGNlbGxTdHI6IHN0cmluZyA9IGZvcm1hdHRlciA/IGZvcm1hdHRlcihjZWxsKSA6IGNlbGwgaW5zdGFuY2VvZiBEYXRlID8gY2VsbC50b0xvY2FsZVN0cmluZygpIDogY2VsbC50b1N0cmluZygpLnJlcGxhY2UoL1wiL2csICdcIlwiJyk7XG4gICAgICAgICAgICAgIGlmIChwcm90ZWN0Q2VsbFJlZ2V4cC50ZXN0KGNlbGxTdHIpKSB7XG4gICAgICAgICAgICAgICAgY2VsbFN0ciA9IGBcIiR7Y2VsbFN0cn1cImA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGNlbGxTdHI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oc2VwYXJhdG9yKVxuICAgICAgICApXG4gICAgICAgIC5qb2luKCdcXG4nKTtcblxuICAgIC8vIFdyaXRlIHRvIGZpbGVcbiAgICBGaWxlc1V0aWxzLndyaXRlVGV4dFRvRmlsZSh0ZXh0Q29udGVudCwge1xuICAgICAgdHlwZTogJ3RleHQvY3N2JyxcbiAgICAgIGZpbGVuYW1lOiAnZXhwb3J0LmNzdicsXG4gICAgICAuLi5vcHRzLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlRmlsZShmaWxlOiBGaWxlLCBvcHRzPzogeyBzZXBhcmF0b3I/OiBzdHJpbmc7IGVuY29kaW5nPzogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPEZpbGVFdmVudDxzdHJpbmdbXVtdPj4ge1xuICAgIHJldHVybiBGaWxlc1V0aWxzLnJlYWRBc1RleHQoZmlsZSwgb3B0cz8uZW5jb2RpbmcpLnBpcGUoXG4gICAgICBtYXAoKGUpID0+IHtcbiAgICAgICAgaWYgKGUudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcykge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZCA9IE1hdGgucm91bmQoZS5sb2FkZWQgKiAwLjgpO1xuICAgICAgICAgIHJldHVybiB7IC4uLmUsIGxvYWRlZCB9O1xuICAgICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBGaWxlUmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCBib2R5ID0gZS5ib2R5O1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBDc3ZVdGlscy5wYXJzZUNTVihib2R5LCBvcHRzKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEZpbGVSZXNwb25zZTxzdHJpbmdbXVtdPih7IGJvZHk6IGRhdGEgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZmlsdGVyKGlzTm90TmlsKVxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VDU1YoYm9keTogc3RyaW5nLCBvcHRzPzogeyBzZXBhcmF0b3I/OiBzdHJpbmc7IHNraXBFbXB0eUxpbmU/OiBib29sZWFuIH0pOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCBzZXBhcmF0b3IgPSBvcHRzPy5zZXBhcmF0b3IgfHwgJywnO1xuICAgIGNvbnN0IHNraXBFbXB0eUxpbmUgPSAhb3B0cyB8fCBvcHRzLnNraXBFbXB0eUxpbmUgIT09IGZhbHNlO1xuXG4gICAgLy8gUHJvdGVjdCBzcGVjaWFsIGNoYXJhY3RlcnMgKHF1b3RlIGFuZCAvbilcbiAgICBib2R5ID0gYm9keVxuICAgICAgLnJlcGxhY2UoJ1wiXCInLCAnPHF1b3RlPicpIC8vIFByb3RlY3QgZG91YmxlIHF1b3RlXG4gICAgICAucmVwbGFjZSgvKFwiW15cXG5cIl0rKVxcblxccj8vZ20sICdcIiQxPGJyPicpIC8vIFByb3RlY3QgXFxuIGluc2lkZSBhIHF1b3RlZCBleHByZXNzaW9uXG4gICAgICAucmVwbGFjZSgvXFxuXFxyL2dtLCAnXFxuJyk7IC8vIFdpbmRvd3MgQ1JcblxuICAgIGNvbnN0IGhlYWRlckFuZFJvd3MgPSBib2R5LnNwbGl0KCdcXG4nLCAyKTtcbiAgICBjb25zdCBoZWFkZXJzID0gaGVhZGVyQW5kUm93c1swXS5zcGxpdChzZXBhcmF0b3IpO1xuXG4gICAgcmV0dXJuIGJvZHlcbiAgICAgIC5zcGxpdCgnXFxuJykgLy8gc3BsaXQgaW50byByb3dzXG4gICAgICAuZmlsdGVyKChsaW5lKSA9PiAhc2tpcEVtcHR5TGluZSB8fCBsaW5lLnRyaW0oKS5sZW5ndGggPiAwKSAvLyBTa2lwIGVtcHR5IGxpbmVcbiAgICAgIC5tYXAoKGxpbmUpID0+IHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSBsaW5lXG4gICAgICAgICAgLnNwbGl0KHNlcGFyYXRvciwgaGVhZGVycy5sZW5ndGgpIC8vIHNwbGl0IGludG8gY2VsbHNcbiAgICAgICAgICAubWFwKChjZWxsKSA9PiBjZWxsLnJlcGxhY2UoL15cIihbXlwiXSopXCIkLywgJyQxJykpIC8vIENsZWFuIHRyYWlsaW5nIHF1b3Rlc1xuICAgICAgICAgIC5tYXAoKGNlbGwpID0+IGNlbGwucmVwbGFjZSgnPHF1b3RlPicsICdcIicpKSAvLyByZXN0b3JlIHByb3RlY3RlZCBxdW90ZVxuICAgICAgICAgIC5tYXAoKGNlbGwpID0+IGNlbGwucmVwbGFjZSgnPGJyPicsICdcXG4nKSk7IC8vIHJlc3RvcmUgcHJvdGVjdGVkIGJyXG4gICAgICAgIHJldHVybiBjZWxscztcbiAgICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldExvY2FsaXplZFNlcGFyYXRvcih0cmFuc2xhdGU/OiBUcmFuc2xhdGVTZXJ2aWNlLCBkZWZhdWx0U2VwYXJhdG9yID0gQ3N2VXRpbHMuREVGQVVMVF9TRVBBUkFUT1IpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleSA9ICdGSUxFLkNTVi5TRVBBUkFUT1InO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRyYW5zbGF0ZT8uaW5zdGFudChrZXkpO1xuICAgIGlmIChzZXBhcmF0b3IgJiYgc2VwYXJhdG9yICE9PSBrZXkpIHJldHVybiBzZXBhcmF0b3I7XG4gICAgcmV0dXJuIGRlZmF1bHRTZXBhcmF0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0TG9jYWxpemVkRW5jb2RpbmcodHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBkZWZhdWx0RW5jb2RpbmcgPSBDc3ZVdGlscy5ERUZBVUxUX0VOQ09ESU5HKTogc3RyaW5nIHtcbiAgICBjb25zdCBrZXkgPSAnRklMRS5DU1YuRU5DT0RJTkcnO1xuICAgIGNvbnN0IGVuY29kaW5nID0gdHJhbnNsYXRlPy5pbnN0YW50KGtleSk7XG4gICAgaWYgKGVuY29kaW5nICYmIGVuY29kaW5nICE9PSBrZXkpIHJldHVybiBlbmNvZGluZztcbiAgICByZXR1cm4gZGVmYXVsdEVuY29kaW5nO1xuICB9XG59XG4iXX0=
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvZmlsZS9jc3YudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFhLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBS25GLFVBQVU7QUFDVixNQUFNLE9BQU8sUUFBUTtJQUNuQixNQUFNLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7SUFFbEMsTUFBTSxDQUFDLFlBQVksQ0FDakIsSUFBYyxFQUNkLElBU0M7UUFFRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLENBQUMsZ0JBQWdCO1FBRW5ELHNCQUFzQjtRQUN0QixNQUFNLFNBQVMsR0FBRyxJQUFJLEVBQUUsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDbkUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEVBQUUsa0JBQWtCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUM7WUFDbEUs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QUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCO1lBQ3JFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFNBQTRCLEVBQUUsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQjtRQUN0RyxNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxTQUFTLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksU0FBUyxJQUFJLFNBQVMsS0FBSyxHQUFHO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDckQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFNBQTJCLEVBQUUsZUFBZSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0I7UUFDbEcsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLENBQUM7UUFDaEMsTUFBTSxRQUFRLEdBQUcsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLFFBQVEsSUFBSSxRQUFRLEtBQUssR0FBRztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBQ2xELE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBGaWxlRXZlbnQsIEZpbGVSZXNwb25zZSB9IGZyb20gJy4uL3VwbG9hZC1maWxlL3VwbG9hZC1maWxlLm1vZGVsJztcbmltcG9ydCB7IEZpbGVzVXRpbHMgfSBmcm9tICcuL2ZpbGUudXRpbHMnO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlCeVBhdGgsIGlzTmlsLCBpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgRGlzcGxheUZuIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vL0BkeW5hbWljXG5leHBvcnQgY2xhc3MgQ3N2VXRpbHMge1xuICBzdGF0aWMgREVGQVVMVF9TRVBBUkFUT1IgPSAnLCc7XG4gIHN0YXRpYyBERUZBVUxUX0VOQ09ESU5HID0gJ1VURi04JztcblxuICBzdGF0aWMgZXhwb3J0VG9GaWxlKFxuICAgIHJvd3M6IG9iamVjdFtdLFxuICAgIG9wdHM/OiB7XG4gICAgICBmaWxlbmFtZT86IHN0cmluZztcbiAgICAgIGhlYWRlcnM/OiBzdHJpbmdbXTtcbiAgICAgIGluY2x1ZGVkUHJvcGVydGllcz86IHN0cmluZ1tdO1xuICAgICAgZXhjbHVkZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG4gICAgICBmb3JtYXR0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBEaXNwbGF5Rm4gfTtcbiAgICAgIHNlcGFyYXRvcj86IHN0cmluZztcbiAgICAgIGVuY29kaW5nPzogc3RyaW5nO1xuICAgICAgdHlwZT86IHN0cmluZztcbiAgICB9XG4gICkge1xuICAgIGlmICghcm93cyB8fCAhcm93cy5sZW5ndGgpIHJldHVybjsgLy8gU2tpcCBpZiBlbXB0eVxuXG4gICAgLy8gQ3JlYXRlIHRleHQgY29udGVudFxuICAgIGNvbnN0IHNlcGFyYXRvciA9IG9wdHM/LnNlcGFyYXRvciB8fCAnLCc7XG4gICAgY29uc3QgcHJvdGVjdENlbGxSZWdleHAgPSBuZXcgUmVnRXhwKCcvKFwifCcgKyBzZXBhcmF0b3IgKyAnfFxcbikvJyk7XG4gICAgY29uc3QgaW5jbHVkZWRQcm9wZXJ0aWVzID0gb3B0cz8uaW5jbHVkZWRQcm9wZXJ0aWVzIHx8IE9iamVjdC5rZXlzKHJvd3NbMF0pO1xuICAgIGNvbnN0IGZpbHRlcmVkUHJvcGVydGllcyA9IGlzTm90RW1wdHlBcnJheShvcHRzPy5leGNsdWRlZFByb3BlcnRpZXMpXG4gICAgICA/IGluY2x1ZGVkUHJvcGVydGllcy5maWx0ZXIoKGspID0+ICFvcHRzPy5leGNsdWRlZFByb3BlcnRpZXMuaW5jbHVkZXMoaykpXG4gICAgICA6IGluY2x1ZGVkUHJvcGVydGllcztcbiAgICBjb25zdCBoZWFkZXJzID0gb3B0cz8uaGVhZGVycyB8fCBpbmNsdWRlZFByb3BlcnRpZXM7XG4gICAgY29uc3QgdGV4dENvbnRlbnQgPVxuICAgICAgLy8gSGVhZGVyIHJvd1xuICAgICAgaGVhZGVycy5qb2luKHNlcGFyYXRvcikgK1xuICAgICAgJ1xcbicgK1xuICAgICAgLy8gRGF0YSByb3dzXG4gICAgICByb3dzXG4gICAgICAgIC5tYXAoKHJvdykgPT5cbiAgICAgICAgICBmaWx0ZXJlZFByb3BlcnRpZXNcbiAgICAgICAgICAgIC5tYXAoKGspID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRQcm9wZXJ0eUJ5UGF0aChyb3csIGspO1xuICAgICAgICAgICAgICBjb25zdCBjZWxsID0gaXNOaWwodmFsdWUpID8gJycgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gb3B0cz8uZm9ybWF0dGVycz8uW2tdO1xuICAgICAgICAgICAgICBsZXQgY2VsbFN0cjogc3RyaW5nID0gZm9ybWF0dGVyID8gZm9ybWF0dGVyKGNlbGwpIDogY2VsbCBpbnN0YW5jZW9mIERhdGUgPyBjZWxsLnRvTG9jYWxlU3RyaW5nKCkgOiBjZWxsLnRvU3RyaW5nKCkucmVwbGFjZSgvXCIvZywgJ1wiXCInKTtcbiAgICAgICAgICAgICAgaWYgKHByb3RlY3RDZWxsUmVnZXhwLnRlc3QoY2VsbFN0cikpIHtcbiAgICAgICAgICAgICAgICBjZWxsU3RyID0gYFwiJHtjZWxsU3RyfVwiYDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gY2VsbFN0cjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihzZXBhcmF0b3IpXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gICAgLy8gV3JpdGUgdG8gZmlsZVxuICAgIEZpbGVzVXRpbHMud3JpdGVUZXh0VG9GaWxlKHRleHRDb250ZW50LCB7XG4gICAgICB0eXBlOiAndGV4dC9jc3YnLFxuICAgICAgZmlsZW5hbWU6ICdleHBvcnQuY3N2JyxcbiAgICAgIC4uLm9wdHMsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VGaWxlKGZpbGU6IEZpbGUsIG9wdHM/OiB7IHNlcGFyYXRvcj86IHN0cmluZzsgZW5jb2Rpbmc/OiBzdHJpbmcgfSk6IE9ic2VydmFibGU8RmlsZUV2ZW50PHN0cmluZ1tdW10+PiB7XG4gICAgcmV0dXJuIEZpbGVzVXRpbHMucmVhZEFzVGV4dChmaWxlLCBvcHRzPy5lbmNvZGluZykucGlwZShcbiAgICAgIG1hcCgoZSkgPT4ge1xuICAgICAgICBpZiAoZS50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgY29uc3QgbG9hZGVkID0gTWF0aC5yb3VuZChlLmxvYWRlZCAqIDAuOCk7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uZSwgbG9hZGVkIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIEZpbGVSZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSBlLmJvZHk7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IENzdlV0aWxzLnBhcnNlQ1NWKGJvZHksIG9wdHMpO1xuICAgICAgICAgIHJldHVybiBuZXcgRmlsZVJlc3BvbnNlPHN0cmluZ1tdW10+KHsgYm9keTogZGF0YSB9KTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBmaWx0ZXIoaXNOb3ROaWwpXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZUNTVihib2R5OiBzdHJpbmcsIG9wdHM/OiB7IHNlcGFyYXRvcj86IHN0cmluZzsgc2tpcEVtcHR5TGluZT86IGJvb2xlYW4gfSk6IHN0cmluZ1tdW10ge1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IG9wdHM/LnNlcGFyYXRvciB8fCAnLCc7XG4gICAgY29uc3Qgc2tpcEVtcHR5TGluZSA9ICFvcHRzIHx8IG9wdHMuc2tpcEVtcHR5TGluZSAhPT0gZmFsc2U7XG5cbiAgICAvLyBQcm90ZWN0IHNwZWNpYWwgY2hhcmFjdGVycyAocXVvdGUgYW5kIC9uKVxuICAgIGJvZHkgPSBib2R5XG4gICAgICAucmVwbGFjZSgnXCJcIicsICc8cXVvdGU+JykgLy8gUHJvdGVjdCBkb3VibGUgcXVvdGVcbiAgICAgIC5yZXBsYWNlKC8oXCJbXlxcblwiXSspXFxuXFxyPy9nbSwgJ1wiJDE8YnI+JykgLy8gUHJvdGVjdCBcXG4gaW5zaWRlIGEgcXVvdGVkIGV4cHJlc3Npb25cbiAgICAgIC5yZXBsYWNlKC9cXG5cXHIvZ20sICdcXG4nKTsgLy8gV2luZG93cyBDUlxuXG4gICAgY29uc3QgaGVhZGVyQW5kUm93cyA9IGJvZHkuc3BsaXQoJ1xcbicsIDIpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBoZWFkZXJBbmRSb3dzWzBdLnNwbGl0KHNlcGFyYXRvcik7XG5cbiAgICByZXR1cm4gYm9keVxuICAgICAgLnNwbGl0KCdcXG4nKSAvLyBzcGxpdCBpbnRvIHJvd3NcbiAgICAgIC5maWx0ZXIoKGxpbmUpID0+ICFza2lwRW1wdHlMaW5lIHx8IGxpbmUudHJpbSgpLmxlbmd0aCA+IDApIC8vIFNraXAgZW1wdHkgbGluZVxuICAgICAgLm1hcCgobGluZSkgPT4ge1xuICAgICAgICBjb25zdCBjZWxscyA9IGxpbmVcbiAgICAgICAgICAuc3BsaXQoc2VwYXJhdG9yLCBoZWFkZXJzLmxlbmd0aCkgLy8gc3BsaXQgaW50byBjZWxsc1xuICAgICAgICAgIC5tYXAoKGNlbGwpID0+IGNlbGwucmVwbGFjZSgvXlwiKFteXCJdKilcIiQvLCAnJDEnKSkgLy8gQ2xlYW4gdHJhaWxpbmcgcXVvdGVzXG4gICAgICAgICAgLm1hcCgoY2VsbCkgPT4gY2VsbC5yZXBsYWNlKCc8cXVvdGU+JywgJ1wiJykpIC8vIHJlc3RvcmUgcHJvdGVjdGVkIHF1b3RlXG4gICAgICAgICAgLm1hcCgoY2VsbCkgPT4gY2VsbC5yZXBsYWNlKCc8YnI+JywgJ1xcbicpKTsgLy8gcmVzdG9yZSBwcm90ZWN0ZWQgYnJcbiAgICAgICAgcmV0dXJuIGNlbGxzO1xuICAgICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0TG9jYWxpemVkU2VwYXJhdG9yKHRyYW5zbGF0ZT86IFRyYW5zbGF0ZVNlcnZpY2UsIGRlZmF1bHRTZXBhcmF0b3IgPSBDc3ZVdGlscy5ERUZBVUxUX1NFUEFSQVRPUik6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5ID0gJ0ZJTEUuQ1NWLlNFUEFSQVRPUic7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdHJhbnNsYXRlPy5pbnN0YW50KGtleSk7XG4gICAgaWYgKHNlcGFyYXRvciAmJiBzZXBhcmF0b3IgIT09IGtleSkgcmV0dXJuIHNlcGFyYXRvcjtcbiAgICByZXR1cm4gZGVmYXVsdFNlcGFyYXRvcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMb2NhbGl6ZWRFbmNvZGluZyh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGRlZmF1bHRFbmNvZGluZyA9IENzdlV0aWxzLkRFRkFVTFRfRU5DT0RJTkcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleSA9ICdGSUxFLkNTVi5FTkNPRElORyc7XG4gICAgY29uc3QgZW5jb2RpbmcgPSB0cmFuc2xhdGU/Lmluc3RhbnQoa2V5KTtcbiAgICBpZiAoZW5jb2RpbmcgJiYgZW5jb2RpbmcgIT09IGtleSkgcmV0dXJuIGVuY29kaW5nO1xuICAgIHJldHVybiBkZWZhdWx0RW5jb2Rpbmc7XG4gIH1cbn1cbiJdfQ==