footprintjs 10.4.0 → 10.5.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 (80) hide show
  1. package/README.md +63 -25
  2. package/dist/esm/lib/capture/historyData.d.ts +6 -2
  3. package/dist/esm/lib/capture/historyData.js +18 -1
  4. package/dist/esm/lib/capture/historyNote.d.ts +2 -2
  5. package/dist/esm/lib/capture/historyNote.js +11 -6
  6. package/dist/esm/lib/capture/historyTypes.d.ts +1 -1
  7. package/dist/esm/lib/capture/historyTypes.js +1 -1
  8. package/dist/esm/lib/capture/nativeSourceAddress.d.ts +3 -0
  9. package/dist/esm/lib/capture/nativeSourceAddress.js +15 -0
  10. package/dist/esm/lib/capture/readSources.d.ts +7 -1
  11. package/dist/esm/lib/capture/readSources.js +32 -11
  12. package/dist/esm/lib/capture/sinkSettlement.d.ts +6 -0
  13. package/dist/esm/lib/capture/sinkSettlement.js +10 -0
  14. package/dist/esm/lib/capture/sourceReadCounts.d.ts +18 -0
  15. package/dist/esm/lib/capture/sourceReadCounts.js +27 -0
  16. package/dist/esm/lib/capture/sourceReferenceBudget.d.ts +10 -0
  17. package/dist/esm/lib/capture/sourceReferenceBudget.js +21 -0
  18. package/dist/esm/lib/capture/storedReadSourceCounts.d.ts +3 -0
  19. package/dist/esm/lib/capture/storedReadSourceCounts.js +78 -0
  20. package/dist/esm/lib/capture/storedReadSources.d.ts +4 -0
  21. package/dist/esm/lib/capture/storedReadSources.js +104 -0
  22. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +11 -2
  23. package/dist/esm/lib/engine/handlers/servedSubflowResults.js +13 -2
  24. package/dist/esm/lib/engine/types.d.ts +2 -1
  25. package/dist/esm/lib/engine/types.js +1 -1
  26. package/dist/esm/lib/memory/StageContext.d.ts +1 -0
  27. package/dist/esm/lib/memory/StageContext.js +14 -2
  28. package/dist/esm/lib/memory/frameTypes.d.ts +3 -0
  29. package/dist/esm/lib/memory/frameTypes.js +1 -1
  30. package/dist/esm/lib/memory/logAddress.d.ts +3 -0
  31. package/dist/esm/lib/memory/logAddress.js +7 -0
  32. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +2 -0
  33. package/dist/esm/lib/runner/ExecutionRuntime.js +65 -8
  34. package/dist/esm/lib/runner/FlowChartExecutor.js +4 -2
  35. package/dist/esm/lib/runner/captureHistory.js +16 -10
  36. package/dist/esm/lib/runner/readStoredCapture.d.ts +4 -2
  37. package/dist/esm/lib/runner/readStoredCapture.js +3 -3
  38. package/dist/esm/lib/runner/recordSink.js +2 -10
  39. package/dist/esm/lib/runner/storedCaptureAdmission.js +10 -8
  40. package/dist/esm/lib/scope/ScopeFacade.js +2 -2
  41. package/dist/lib/capture/historyData.js +21 -2
  42. package/dist/lib/capture/historyNote.js +9 -4
  43. package/dist/lib/capture/historyTypes.js +1 -1
  44. package/dist/lib/capture/nativeSourceAddress.js +19 -0
  45. package/dist/lib/capture/readSources.js +35 -12
  46. package/dist/lib/capture/sinkSettlement.js +14 -0
  47. package/dist/lib/capture/sourceReadCounts.js +31 -0
  48. package/dist/lib/capture/sourceReferenceBudget.js +25 -0
  49. package/dist/lib/capture/storedReadSourceCounts.js +82 -0
  50. package/dist/lib/capture/storedReadSources.js +108 -0
  51. package/dist/lib/engine/handlers/SubflowExecutor.js +11 -2
  52. package/dist/lib/engine/handlers/servedSubflowResults.js +13 -2
  53. package/dist/lib/engine/types.js +1 -1
  54. package/dist/lib/memory/StageContext.js +14 -2
  55. package/dist/lib/memory/frameTypes.js +1 -1
  56. package/dist/lib/memory/logAddress.js +11 -0
  57. package/dist/lib/runner/ExecutionRuntime.js +65 -8
  58. package/dist/lib/runner/FlowChartExecutor.js +4 -2
  59. package/dist/lib/runner/captureHistory.js +15 -9
  60. package/dist/lib/runner/readStoredCapture.js +2 -2
  61. package/dist/lib/runner/recordSink.js +6 -14
  62. package/dist/lib/runner/storedCaptureAdmission.js +9 -7
  63. package/dist/lib/scope/ScopeFacade.js +2 -2
  64. package/dist/types/lib/capture/historyData.d.ts +6 -2
  65. package/dist/types/lib/capture/historyNote.d.ts +2 -2
  66. package/dist/types/lib/capture/historyTypes.d.ts +1 -1
  67. package/dist/types/lib/capture/nativeSourceAddress.d.ts +3 -0
  68. package/dist/types/lib/capture/readSources.d.ts +7 -1
  69. package/dist/types/lib/capture/sinkSettlement.d.ts +6 -0
  70. package/dist/types/lib/capture/sourceReadCounts.d.ts +18 -0
  71. package/dist/types/lib/capture/sourceReferenceBudget.d.ts +10 -0
  72. package/dist/types/lib/capture/storedReadSourceCounts.d.ts +3 -0
  73. package/dist/types/lib/capture/storedReadSources.d.ts +4 -0
  74. package/dist/types/lib/engine/types.d.ts +2 -1
  75. package/dist/types/lib/memory/StageContext.d.ts +1 -0
  76. package/dist/types/lib/memory/frameTypes.d.ts +3 -0
  77. package/dist/types/lib/memory/logAddress.d.ts +3 -0
  78. package/dist/types/lib/runner/ExecutionRuntime.d.ts +2 -0
  79. package/dist/types/lib/runner/readStoredCapture.d.ts +4 -2
  80. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { readStoredRecord } from 'foottrace';
2
- import { copyHistoryData, HistoryDataError } from '../capture/historyData.js';
2
+ import { copyHistoryData, historyFailureReason } from '../capture/historyData.js';
3
3
  import { admitStoredCapture } from './storedCaptureAdmission.js';
4
4
  /** Only inert bounded data reaches the generic record reader. The outer iterable remains host-owned. */
5
5
  function* inertEntries(entries, maxBytes) {
@@ -30,7 +30,7 @@ export async function readStoredCapture(entries, options) {
30
30
  return await admitStoredCapture(log, options.runId, maxBytes);
31
31
  }
32
32
  catch (error) {
33
- return unknown(error instanceof HistoryDataError && error.code === 'too-large' ? 'history-too-large' : 'history-refused');
33
+ return unknown(historyFailureReason(error, 'history'));
34
34
  }
35
35
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZFN0b3JlZENhcHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3J1bm5lci9yZWFkU3RvcmVkQ2FwdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBc0JqRSx3R0FBd0c7QUFDeEcsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQTBCLEVBQUUsUUFBZ0I7SUFDakUsSUFBSSxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUM3QixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDakQsU0FBUyxJQUFJLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDckUsTUFBTSxNQUFNLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxPQUEwQixFQUMxQixPQUEwRTtJQUUxRSxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQWMsRUFBdUIsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSTtZQUFFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xILE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQUUsT0FBTyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNuRyxPQUFPLE1BQU0sa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLE9BQU8sQ0FDWixLQUFLLFlBQVksZ0JBQWdCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FDMUcsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUsIFN0b3JlZFJlY29yZExpbWl0cyB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgeyByZWFkU3RvcmVkUmVjb3JkIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHsgY29weUhpc3RvcnlEYXRhLCBIaXN0b3J5RGF0YUVycm9yIH0gZnJvbSAnLi4vY2FwdHVyZS9oaXN0b3J5RGF0YS5qcyc7XG5pbXBvcnQgdHlwZSB7IENhcHR1cmVIaXN0b3J5UmVjZWlwdCB9IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTmF0aXZlQ2FwdHVyZU5vdGUgfSBmcm9tICcuLi9jYXB0dXJlL25hdGl2ZUNvdmVyYWdlLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VTbmFwc2hvdCB9IGZyb20gJy4uL21lbW9yeS9mcmFtZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCB9IGZyb20gJy4vRXhlY3V0aW9uUnVudGltZS5qcyc7XG5pbXBvcnQgeyBhZG1pdFN0b3JlZENhcHR1cmUgfSBmcm9tICcuL3N0b3JlZENhcHR1cmVBZG1pc3Npb24uanMnO1xuXG4vKiogRW5naW5lIGhpc3Rvcnkgd2hvc2Ugc3RvcmFnZSBldmlkZW5jZSBtYXRjaGVkLiBDaGFubmVscyBhbmQgbmF0aXZlIGxpbWl0YXRpb25zIHJldGFpbiB0aGVpciBvcmlnaW5hbCBtZWFuaW5ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmVkQ2FwdHVyZUhpc3Rvcnkge1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBjYXB0dXJlOiBOYXRpdmVDYXB0dXJlTm90ZTtcbiAgcmVhZG9ubHkgZXhlY3V0aW9uVHJlZTogU3RhZ2VTbmFwc2hvdDtcbiAgLyoqXG4gICAqIFNvcnRlZCBsaXRlcmFsIHBhdGhzIG9mIG93biB1bmRlZmluZWQgc3RhZ2VSZWFkcy9zdGFnZVdyaXRlcyBlbnRyaWVzIG9taXR0ZWQgYnkgSlNPTi5cbiAgICogUmVhZCBhbG9uZ3NpZGUgZXhlY3V0aW9uVHJlZTsgdGhpcyBpcyBub3QgcHJvb2YgdGhhdCB0aGUgdW5kZXJseWluZyBzdGF0ZSBrZXkgbmV2ZXIgZXhpc3RlZC5cbiAgICogQXQgbW9zdCA0MDk2IHBhdGhzIG9mIDI1NiBzZWdtZW50cywgd2l0aGluIHRoZSBldmlkZW5jZSBieXRlIGxpbWl0LiBObyBlbnRyaWVzIGFyZSB0cnVuY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBhYnNlbnQ/OiByZWFkb25seSAocmVhZG9ubHkgc3RyaW5nW10pW107XG4gIHJlYWRvbmx5IHJlY29yZGVycz86IHJlYWRvbmx5IFJlY29yZGVyU25hcHNob3RbXTtcbiAgcmVhZG9ubHkgY29tbWl0TG9nOiByZWFkb25seSBDb21taXRCdW5kbGVbXTtcbiAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IHJlY2VpcHQ6IENhcHR1cmVIaXN0b3J5UmVjZWlwdDtcbn1cbmV4cG9ydCB0eXBlIFN0b3JlZENhcHR1cmVSZXN1bHQgPVxuICB8IHsgcmVhZG9ubHkgc3RhdHVzOiAnYWNrbm93bGVkZ2VkJzsgcmVhZG9ubHkgaGlzdG9yeTogU3RvcmVkQ2FwdHVyZUhpc3RvcnkgfVxuICB8IHsgcmVhZG9ubHkgc3RhdHVzOiAndW5rbm93bic7IHJlYWRvbmx5IHJlYXNvbjogc3RyaW5nOyByZWFkb25seSBoaXN0b3J5PzogbmV2ZXIgfTtcblxuLyoqIE9ubHkgaW5lcnQgYm91bmRlZCBkYXRhIHJlYWNoZXMgdGhlIGdlbmVyaWMgcmVjb3JkIHJlYWRlci4gVGhlIG91dGVyIGl0ZXJhYmxlIHJlbWFpbnMgaG9zdC1vd25lZC4gKi9cbmZ1bmN0aW9uKiBpbmVydEVudHJpZXMoZW50cmllczogSXRlcmFibGU8dW5rbm93bj4sIG1heEJ5dGVzOiBudW1iZXIpOiBJdGVyYWJsZTx1bmtub3duPiB7XG4gIGxldCByZW1haW5pbmcgPSBtYXhCeXRlcyAqIDQ7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IGNvcGllZCA9IGNvcHlIaXN0b3J5RGF0YShlbnRyeSwgcmVtYWluaW5nKTtcbiAgICByZW1haW5pbmcgLT0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGNvcGllZCkpLmxlbmd0aDtcbiAgICB5aWVsZCBjb3BpZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkIGF1dGhvcml6ZWQgc3RvcmVkIGVudHJpZXMgdXNpbmcgRm9vdHRyYWNlJ3Mgc2VxdWVuY2UvZ2FwIGNoZWNrcywgdGhlbiB2YWxpZGF0ZSBGb290UHJpbnQncyBvcGFxdWUgbWV0YWRhdGEuXG4gKiBBIHJlY2VpcHQgaXMgYSBob3N0LWFkYXB0ZXIgYXNzZXJ0aW9uLCBub3QgYSBzaWduYXR1cmUuIENhbGxlcnMgc3RpbGwgb3duIHN0b3JhZ2UgYXV0aG9yaXphdGlvbiBhbmQgdHJ1c3QuXG4gKiBOZXZlciBwZXJmb3JtcyBjYXVzYWwgYW5hbHlzaXMgb3IgdXBncmFkZXMgcGFydGlhbCBuYXRpdmUgY2FwdHVyZSB0byBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTdG9yZWRDYXB0dXJlKFxuICBlbnRyaWVzOiBJdGVyYWJsZTx1bmtub3duPixcbiAgb3B0aW9uczogeyBydW5JZDogc3RyaW5nOyBsaW1pdHM/OiBTdG9yZWRSZWNvcmRMaW1pdHM7IG1heEJ5dGVzPzogbnVtYmVyIH0sXG4pOiBQcm9taXNlPFN0b3JlZENhcHR1cmVSZXN1bHQ+IHtcbiAgY29uc3QgdW5rbm93biA9IChyZWFzb246IHN0cmluZyk6IFN0b3JlZENhcHR1cmVSZXN1bHQgPT4gKHsgc3RhdHVzOiAndW5rbm93bicsIHJlYXNvbiB9KTtcbiAgdHJ5IHtcbiAgICBjb25zdCBtYXhCeXRlcyA9IG9wdGlvbnMubWF4Qnl0ZXMgPz8gMTAyNCAqIDEwMjQ7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihtYXhCeXRlcykgfHwgbWF4Qnl0ZXMgPCAxIHx8IG1heEJ5dGVzID4gOCAqIDEwMjQgKiAxMDI0KSByZXR1cm4gdW5rbm93bigncmVhZGVyLWxpbWl0Jyk7XG4gICAgY29uc3Qgc3RvcmVkID0gcmVhZFN0b3JlZFJlY29yZChpbmVydEVudHJpZXMoZW50cmllcywgbWF4Qnl0ZXMpLCBvcHRpb25zLmxpbWl0cyk7XG4gICAgY29uc3QgbG9nID0gc3RvcmVkLnJvb3Qob3B0aW9ucy5ydW5JZCk7XG4gICAgaWYgKCFsb2cpIHJldHVybiB1bmtub3duKCdyb290LW1pc3NpbmcnKTtcbiAgICBpZiAoIWxvZy5jb21wbGV0ZSB8fCBsb2cuZ2Fwcy5sZW5ndGggfHwgc3RvcmVkLnVucmVhZC5sZW5ndGgpIHJldHVybiB1bmtub3duKCdoaXN0b3J5LWluY29tcGxldGUnKTtcbiAgICByZXR1cm4gYXdhaXQgYWRtaXRTdG9yZWRDYXB0dXJlKGxvZywgb3B0aW9ucy5ydW5JZCwgbWF4Qnl0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB1bmtub3duKFxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBIaXN0b3J5RGF0YUVycm9yICYmIGVycm9yLmNvZGUgPT09ICd0b28tbGFyZ2UnID8gJ2hpc3RvcnktdG9vLWxhcmdlJyA6ICdoaXN0b3J5LXJlZnVzZWQnLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZFN0b3JlZENhcHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3J1bm5lci9yZWFkU3RvcmVkQ2FwdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBS2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBd0JqRSx3R0FBd0c7QUFDeEcsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQTBCLEVBQUUsUUFBZ0I7SUFDakUsSUFBSSxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUM3QixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDakQsU0FBUyxJQUFJLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDckUsTUFBTSxNQUFNLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxPQUEwQixFQUMxQixPQUEwRTtJQUUxRSxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQWMsRUFBdUIsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSTtZQUFFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xILE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQUUsT0FBTyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNuRyxPQUFPLE1BQU0sa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBTdG9yZWRSZWNvcmRMaW1pdHMgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgcmVhZFN0b3JlZFJlY29yZCB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB7IGNvcHlIaXN0b3J5RGF0YSwgaGlzdG9yeUZhaWx1cmVSZWFzb24gfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlEYXRhLmpzJztcbmltcG9ydCB0eXBlIHsgQ2FwdHVyZUhpc3RvcnlSZWNlaXB0IH0gZnJvbSAnLi4vY2FwdHVyZS9oaXN0b3J5VHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBFbmdpbmVSZWFkU291cmNlcywgTmF0aXZlQ2FwdHVyZU9ic2VydmF0aW9uIH0gZnJvbSAnLi4vY2FwdHVyZS9yZWFkU291cmNlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlU25hcHNob3QgfSBmcm9tICcuLi9tZW1vcnkvZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuaW1wb3J0IHsgYWRtaXRTdG9yZWRDYXB0dXJlIH0gZnJvbSAnLi9zdG9yZWRDYXB0dXJlQWRtaXNzaW9uLmpzJztcblxuLyoqIEVuZ2luZSBoaXN0b3J5IHdob3NlIHN0b3JhZ2UgZXZpZGVuY2UgbWF0Y2hlZC4gQ2hhbm5lbHMgYW5kIG5hdGl2ZSBsaW1pdGF0aW9ucyByZXRhaW4gdGhlaXIgb3JpZ2luYWwgbWVhbmluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JlZENhcHR1cmVIaXN0b3J5IHtcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY2FwdHVyZTogTmF0aXZlQ2FwdHVyZU9ic2VydmF0aW9uO1xuICAvKiogT3JpZ2luYWwgbWVtb3J5IG9ic2VydmF0aW9uIGNvdmVyZWQgYnkgdGhpcyBoaXN0b3J5IHJlY2VpcHQsIG5ldmVyIHN0b3JhZ2UgYXV0aG9yaXR5IGJ5IGl0c2VsZi4gKi9cbiAgcmVhZG9ubHkgcmVhZFNvdXJjZXM/OiBFbmdpbmVSZWFkU291cmNlcztcbiAgcmVhZG9ubHkgZXhlY3V0aW9uVHJlZTogU3RhZ2VTbmFwc2hvdDtcbiAgLyoqXG4gICAqIFNvcnRlZCBsaXRlcmFsIHBhdGhzIG9mIG93biB1bmRlZmluZWQgc3RhZ2VSZWFkcy9zdGFnZVdyaXRlcyBlbnRyaWVzIG9taXR0ZWQgYnkgSlNPTi5cbiAgICogUmVhZCBhbG9uZ3NpZGUgZXhlY3V0aW9uVHJlZTsgdGhpcyBpcyBub3QgcHJvb2YgdGhhdCB0aGUgdW5kZXJseWluZyBzdGF0ZSBrZXkgbmV2ZXIgZXhpc3RlZC5cbiAgICogQXQgbW9zdCA0MDk2IHBhdGhzIG9mIDI1NiBzZWdtZW50cywgd2l0aGluIHRoZSBldmlkZW5jZSBieXRlIGxpbWl0LiBObyBlbnRyaWVzIGFyZSB0cnVuY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBhYnNlbnQ/OiByZWFkb25seSAocmVhZG9ubHkgc3RyaW5nW10pW107XG4gIHJlYWRvbmx5IHJlY29yZGVycz86IHJlYWRvbmx5IFJlY29yZGVyU25hcHNob3RbXTtcbiAgcmVhZG9ubHkgY29tbWl0TG9nOiByZWFkb25seSBDb21taXRCdW5kbGVbXTtcbiAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IHJlY2VpcHQ6IENhcHR1cmVIaXN0b3J5UmVjZWlwdDtcbn1cbmV4cG9ydCB0eXBlIFN0b3JlZENhcHR1cmVSZXN1bHQgPVxuICB8IHsgcmVhZG9ubHkgc3RhdHVzOiAnYWNrbm93bGVkZ2VkJzsgcmVhZG9ubHkgaGlzdG9yeTogU3RvcmVkQ2FwdHVyZUhpc3RvcnkgfVxuICB8IHsgcmVhZG9ubHkgc3RhdHVzOiAndW5rbm93bic7IHJlYWRvbmx5IHJlYXNvbjogc3RyaW5nOyByZWFkb25seSBoaXN0b3J5PzogbmV2ZXIgfTtcblxuLyoqIE9ubHkgaW5lcnQgYm91bmRlZCBkYXRhIHJlYWNoZXMgdGhlIGdlbmVyaWMgcmVjb3JkIHJlYWRlci4gVGhlIG91dGVyIGl0ZXJhYmxlIHJlbWFpbnMgaG9zdC1vd25lZC4gKi9cbmZ1bmN0aW9uKiBpbmVydEVudHJpZXMoZW50cmllczogSXRlcmFibGU8dW5rbm93bj4sIG1heEJ5dGVzOiBudW1iZXIpOiBJdGVyYWJsZTx1bmtub3duPiB7XG4gIGxldCByZW1haW5pbmcgPSBtYXhCeXRlcyAqIDQ7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IGNvcGllZCA9IGNvcHlIaXN0b3J5RGF0YShlbnRyeSwgcmVtYWluaW5nKTtcbiAgICByZW1haW5pbmcgLT0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGNvcGllZCkpLmxlbmd0aDtcbiAgICB5aWVsZCBjb3BpZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkIGF1dGhvcml6ZWQgc3RvcmVkIGVudHJpZXMgdXNpbmcgRm9vdHRyYWNlJ3Mgc2VxdWVuY2UvZ2FwIGNoZWNrcywgdGhlbiB2YWxpZGF0ZSBGb290UHJpbnQncyBvcGFxdWUgbWV0YWRhdGEuXG4gKiBBIHJlY2VpcHQgaXMgYSBob3N0LWFkYXB0ZXIgYXNzZXJ0aW9uLCBub3QgYSBzaWduYXR1cmUuIENhbGxlcnMgc3RpbGwgb3duIHN0b3JhZ2UgYXV0aG9yaXphdGlvbiBhbmQgdHJ1c3QuXG4gKiBOZXZlciBwZXJmb3JtcyBjYXVzYWwgYW5hbHlzaXMgb3IgdXBncmFkZXMgcGFydGlhbCBuYXRpdmUgY2FwdHVyZSB0byBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTdG9yZWRDYXB0dXJlKFxuICBlbnRyaWVzOiBJdGVyYWJsZTx1bmtub3duPixcbiAgb3B0aW9uczogeyBydW5JZDogc3RyaW5nOyBsaW1pdHM/OiBTdG9yZWRSZWNvcmRMaW1pdHM7IG1heEJ5dGVzPzogbnVtYmVyIH0sXG4pOiBQcm9taXNlPFN0b3JlZENhcHR1cmVSZXN1bHQ+IHtcbiAgY29uc3QgdW5rbm93biA9IChyZWFzb246IHN0cmluZyk6IFN0b3JlZENhcHR1cmVSZXN1bHQgPT4gKHsgc3RhdHVzOiAndW5rbm93bicsIHJlYXNvbiB9KTtcbiAgdHJ5IHtcbiAgICBjb25zdCBtYXhCeXRlcyA9IG9wdGlvbnMubWF4Qnl0ZXMgPz8gMTAyNCAqIDEwMjQ7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihtYXhCeXRlcykgfHwgbWF4Qnl0ZXMgPCAxIHx8IG1heEJ5dGVzID4gOCAqIDEwMjQgKiAxMDI0KSByZXR1cm4gdW5rbm93bigncmVhZGVyLWxpbWl0Jyk7XG4gICAgY29uc3Qgc3RvcmVkID0gcmVhZFN0b3JlZFJlY29yZChpbmVydEVudHJpZXMoZW50cmllcywgbWF4Qnl0ZXMpLCBvcHRpb25zLmxpbWl0cyk7XG4gICAgY29uc3QgbG9nID0gc3RvcmVkLnJvb3Qob3B0aW9ucy5ydW5JZCk7XG4gICAgaWYgKCFsb2cpIHJldHVybiB1bmtub3duKCdyb290LW1pc3NpbmcnKTtcbiAgICBpZiAoIWxvZy5jb21wbGV0ZSB8fCBsb2cuZ2Fwcy5sZW5ndGggfHwgc3RvcmVkLnVucmVhZC5sZW5ndGgpIHJldHVybiB1bmtub3duKCdoaXN0b3J5LWluY29tcGxldGUnKTtcbiAgICByZXR1cm4gYXdhaXQgYWRtaXRTdG9yZWRDYXB0dXJlKGxvZywgb3B0aW9ucy5ydW5JZCwgbWF4Qnl0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB1bmtub3duKGhpc3RvcnlGYWlsdXJlUmVhc29uKGVycm9yLCAnaGlzdG9yeScpKTtcbiAgfVxufVxuIl19
@@ -22,6 +22,7 @@
22
22
  * log's to count (`EventLog · sinkFailures`), never the run's — so nothing here throws to the engine.
23
23
  */
24
24
  import { LOG_PLACEHOLDER } from 'foottrace/write';
25
+ import { settleOnce } from '../capture/sinkSettlement.js';
25
26
  import { isDevMode } from '../devMode.js';
26
27
  import { extractErrorInfo, thrownText } from '../errors/errorInfo.js';
27
28
  import { SCOPE_PLACEHOLDER } from '../memory/redaction.js';
@@ -327,13 +328,4 @@ function tellAdapter(adapter, failure) {
327
328
  // A listener that fails is the adapter's own business: the loss is already counted.
328
329
  }
329
330
  }
330
- /**
331
- * `value`, settled ONCE into `onValue` / `onError` — never through the value's own `then`: a native promise is
332
- * watched through the real `Promise.prototype.then` (an own `then` on it is not trusted, so its rejection is always
333
- * handled), any other thenable adopted into a fresh promise. A plain value is a fulfilment.
334
- */
335
- function settleOnce(value, onValue, onError) {
336
- const adopted = value instanceof Promise ? value : new Promise((resolve) => resolve(value));
337
- return Promise.prototype.then.call(adopted, onValue, onError);
338
- }
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkU2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL3JlY29yZFNpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFJSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUF5QzNEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLEtBQUs7SUFFRjtJQURwQixJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDM0MsWUFBWSxPQUFlLEVBQVcsS0FBYztRQUNsRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEcUIsVUFBSyxHQUFMLEtBQUssQ0FBUztJQUVwRCxDQUFDO0NBQ0Y7QUFVRCxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBZWhFLFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDL0IsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQVEsS0FBaUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQWU7SUFDL0MsSUFBSSxNQUFNLEtBQUssU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzNDLElB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Q0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0NBQ0Y7QUFFRCxnSEFBZ0g7QUFDaEgsU0FBUyxXQUFXLENBQUMsT0FBbUIsRUFBRSxPQUFpRTtJQUN6RyxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBWSxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzVDLElBQUksT0FBTyxRQUFRLEtBQUssVUFBVTtZQUFFLE9BQU87UUFDM0MsVUFBVSxDQUNSLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUMvQixHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQ2YsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUNoQixDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLG9GQUFvRjtJQUN0RixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFVBQVUsQ0FBSSxLQUFjLEVBQUUsT0FBZ0IsRUFBRSxPQUE4QjtJQUNyRixNQUFNLE9BQU8sR0FBcUIsS0FBSyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUcsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQWUsQ0FBQztBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBydW5uZXIvcmVjb3JkU2luay50cyDigJQgdGhlIHJ1bidzIHNpZGUgb2YgdGhlIGNyYXNoLXNhZmUgcmVjb3JkIChkZXNpZ24gwqczLjUsIHBhY2tldCBQNikuXG4gKlxuICogZm9vdHRyYWNlIG93bnMgdGhlIHBvcnQgKGBSZWNvcmRTaW5rYCwgYGZvb3R0cmFjZS93cml0ZWApOiBhIGxvZyBidWlsdCB3aXRoIGEgc2luayBoYW5kcyBpdCBldmVyeSBlbnRyeSBBUyBJVFxuICogTEFORFMg4oCUIGBvcGVuZWRgLCBgY29tbWl0YCwgYG5vdGVgLCBgY2xvc2VkYCDigJQgYW5kIGNvdW50cyB3aGF0IHRoZSBzaW5rIGRpZCBub3QgdGFrZS4gVGhpcyBmaWxlIGlzIHdoYXQgdGhlXG4gKiBFWEVDVVRPUiBhZGRzIGFyb3VuZCBhbiBhcHAncyBhZGFwdGVyLCBvbmUge0BsaW5rIFJ1blJlY29yZH0gcGVyIHJ1bjpcbiAqXG4gKiAgIC0gVEhFIE9ORSBMQVcsIGJlZm9yZSBhbnkgYnl0ZSBsZWF2ZXM6IHRoZSBgb3BlbmVkYCBiYXNlIGlzIHRoZSBydW4ncyBzZXJ2ZWQgZm9ybSBvZiBpdCAodGhlIHJlZGFjdGlvbiBydWxlJ3NcbiAqICAgICBgcmV0YWluU3RhdGVgLCB0aGUgbWlycm9yJ3Mgc2VlZCDigJQgc28gYSBwb2xpY3kga2V5IHNlZWRlZCBieSBgaW5pdGlhbENvbnRleHRgIG9yIGEgY2hlY2twb2ludCBuZXZlciByZWFjaGVzXG4gKiAgICAgdGhlIHNpbmspLCBhbmQgdGhlIGBvcGVuZWRgIC8gYGNsb3NlZGAgbWV0YSBhcmUgYm91bmRhcnkgcmVjb3JkcyAoYHJldGFpbkJvdW5kYXJ5YCkuIEEgY29tbWl0IGlzIHRoZSBsb2cncyBvd25cbiAqICAgICBidW5kbGUsIGFscmVhZHkgc2NydWJiZWQgYXQgY29tbWl0OyBhbiBhdHRlbXB0IG5vdGUgY2FycmllcyB0aGUgc2VydmVkIGBBdHRlbXB0UmVjb3JkYCAobm8gYHJhd2ApLlxuICogICAtIEFDQ09VTlRJTkc6IGV2ZXJ5IGVudHJ5IGhhbmRlZCB0byB0aGUgYWRhcHRlciBpcyBjb3VudGVkLCBldmVyeSBsb3NzIHRvbyAoYGdldFNuYXBzaG90KCkuc2lua2ApLCB3aXRoIGFcbiAqICAgICBkZXYtbW9kZSB3YXJuaW5nIG9uIHRoZSBmaXJzdCBsb3NzIG9mIGEgcnVuLiBUaGUgYWRhcHRlcidzIG93biBgb25GYWlsdXJlYCBoZWFycyBhIGRpc3BhdGNoZWQgZW50cnkncyBsb3NzXG4gKiAgICAgd2l0aCB0aGF0IHNhbWUgc2VydmVkIGVudHJ5IGFuZCBhIHNlcnZlZCBlcnJvciwgaXNvbGF0ZWQuIEEgcmVmdXNhbCBiZWZvcmUgZGlzcGF0Y2ggaXMgY291bnRlZCB3aXRob3V0XG4gKiAgICAgZm9yd2FyZGluZyBGb290dHJhY2UncyB1bnNlcnZlZCBlbnRyeS5cbiAqICAgLSBUSEUgRkFJTFVSRSBNT0RFIChvd25lciBydWxpbmcgUTMpOiBgJ3JlcG9ydCdgIChkZWZhdWx0KSDigJQgdGhlIHJ1biBnb2VzIG9uOyBgJ2ZhaWwnYCDigJQgdGhlIGZpcnN0IGxvc3QgZW50cnlcbiAqICAgICBhYm9ydHMgdGhlIHJ1bidzIHNpZ25hbCB3aXRoIGEge0BsaW5rIFJlY29yZFNpbmtFcnJvcn0sIGFuZCBhIHJ1biB0aGF0IGZpbmlzaGVkIHdpdGggYSBsb3NzIHJlamVjdHMgd2l0aCBpdC5cbiAqICAgLSBGTFVTSDogYCdhdXRvJ2AgKGRlZmF1bHQpIOKAlCBgcnVuKClgIC8gYHJlc3VtZSgpYCBhd2FpdCB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCBhZnRlciB0aGUgY2xvc2luZyBlbnRyeTtcbiAqICAgICBgJ21hbnVhbCdgIOKAlCB0aGUgYXBwIGNhbGxzIGBleGVjdXRvci5mbHVzaFJlY29yZCgpYC5cbiAqXG4gKiBFdmVyeSBhZGFwdGVyIG1ldGhvZCBpcyBjYWxsZWQgc3luY2hyb25vdXNseSBmcm9tIHRoZSBsb2c7IHdoYXRldmVyIHRoZSBhZGFwdGVyIHRocm93cyBvciByZWplY3RzIHdpdGggaXMgdGhlXG4gKiBsb2cncyB0byBjb3VudCAoYEV2ZW50TG9nIMK3IHNpbmtGYWlsdXJlc2ApLCBuZXZlciB0aGUgcnVuJ3Mg4oCUIHNvIG5vdGhpbmcgaGVyZSB0aHJvd3MgdG8gdGhlIGVuZ2luZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1ldGEgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRFbnRyeSwgUmVjb3JkU2luayB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7XG5pbXBvcnQgeyBMT0dfUExBQ0VIT0xERVIgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IENhcHR1cmVIaXN0b3J5T3B0aW9ucywgQ2FwdHVyZUhpc3RvcnlTdGF0dXMgfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlUeXBlcy5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB7IGV4dHJhY3RFcnJvckluZm8sIHRocm93blRleHQgfSBmcm9tICcuLi9lcnJvcnMvZXJyb3JJbmZvLmpzJztcbmltcG9ydCB0eXBlIHsgUmVkYWN0aW9uUnVsZSB9IGZyb20gJy4uL21lbW9yeS9yZWRhY3Rpb24uanMnO1xuaW1wb3J0IHsgU0NPUEVfUExBQ0VIT0xERVIgfSBmcm9tICcuLi9tZW1vcnkvcmVkYWN0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkU2lua1N0YXRzIH0gZnJvbSAnLi9FeGVjdXRpb25SdW50aW1lLmpzJztcblxuLyoqIFdoYXQgYSBsb3N0IGVudHJ5IGRvZXMgdG8gdGhlIHJ1bjogYCdyZXBvcnQnYCBjb3VudHMgaXQgYW5kIGdvZXMgb247IGAnZmFpbCdgIGZhaWxzIHRoZSBydW4uICovXG5leHBvcnQgdHlwZSBSZWNvcmRTaW5rRmFpbHVyZU1vZGUgPSAncmVwb3J0JyB8ICdmYWlsJztcblxuLyoqIFdoZW4gdGhlIGFkYXB0ZXIncyBgZmx1c2goKWAgcnVuczogYWZ0ZXIgZWFjaCBydW4ncyBjbG9zaW5nIGVudHJ5IChgJ2F1dG8nYCksIG9yIHdoZW4gdGhlIGFwcCBhc2tzLiAqL1xuZXhwb3J0IHR5cGUgUmVjb3JkU2lua0ZsdXNoTW9kZSA9ICdhdXRvJyB8ICdtYW51YWwnO1xuXG4vKipcbiAqIFRoZSBleGVjdXRvcidzIGBzaW5rYCBvcHRpb24gaW4gaXRzIGxvbmcgZm9ybS4gVGhlIHNob3J0IGZvcm0gaXMgdGhlIGFkYXB0ZXIgaXRzZWxmLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgc2luazogeyBhZGFwdGVyOiBmaWxlU2luaygnL3Zhci9mb290cHJpbnQvcnVuLmpzb25sJyksIG9uRmFpbHVyZTogJ2ZhaWwnIH0gfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRTaW5rT3B0aW9ucyB7XG4gIC8qKiBXaGVyZSB0aGUgZW50cmllcyBnbyDigJQgYGZpbGVTaW5rKHBhdGgpYCAoYGZvb3RwcmludGpzL3NpbmtzYCksIGBtZW1vcnlTaW5rKClgIChgZm9vdHRyYWNlL3dyaXRlYCksIG9yIHlvdXJzLiAqL1xuICByZWFkb25seSBhZGFwdGVyOiBSZWNvcmRTaW5rO1xuICAvKiogYCdyZXBvcnQnYCAoZGVmYXVsdCk6IGEgbG9zdCBlbnRyeSBpcyBjb3VudGVkIGFuZCB0aGUgcnVuIGdvZXMgb24uIGAnZmFpbCdgOiB0aGUgZmlyc3Qgb25lIGZhaWxzIHRoZSBydW4uICovXG4gIHJlYWRvbmx5IG9uRmFpbHVyZT86IFJlY29yZFNpbmtGYWlsdXJlTW9kZTtcbiAgLyoqIGAnYXV0bydgIChkZWZhdWx0KTogYHJ1bigpYCBhd2FpdHMgdGhlIGFkYXB0ZXIncyBgZmx1c2goKWAgYWZ0ZXIgdGhlIGNsb3NpbmcgZW50cnkuIGAnbWFudWFsJ2A6IGBmbHVzaFJlY29yZCgpYC4gKi9cbiAgcmVhZG9ubHkgZmx1c2g/OiBSZWNvcmRTaW5rRmx1c2hNb2RlO1xuICAvKiogT3B0LWluIGNhcHR1cmUgZXZpZGVuY2UgYW5kIGV4cGxpY2l0IGhvc3QgYWNrbm93bGVkZ2VtZW50OyBvcmRpbmFyeSBmbHVzaCBuZXZlciBpbXBsaWVzIGR1cmFiaWxpdHkuICovXG4gIHJlYWRvbmx5IGNhcHR1cmU/OiBDYXB0dXJlSGlzdG9yeU9wdGlvbnM7XG59XG5cbi8qKiBUaGUgZXhlY3V0b3IncyBgc2lua2Agb3B0aW9uOiBhbiBhZGFwdGVyLCBvciB7QGxpbmsgUmVjb3JkU2lua09wdGlvbnN9LiAqL1xuZXhwb3J0IHR5cGUgUmVjb3JkU2lua09wdGlvbiA9IFJlY29yZFNpbmsgfCBSZWNvcmRTaW5rT3B0aW9ucztcblxuLyoqIFdoYXQgYGV4ZWN1dG9yLmZsdXNoUmVjb3JkKClgIHJlc29sdmVzIHdpdGgg4oCUIHRoZSBgZHJhaW5PYnNlcnZlcnNgIHNoYXBlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRGbHVzaFJlc3VsdCB7XG4gIC8qKiBUaGUgYWRhcHRlcidzIGZsdXNoIGZpbmlzaGVkIChvciB0aGVyZSB3YXMgbm90aGluZyB0byBmbHVzaCkuICovXG4gIHJlYWRvbmx5IGRvbmU6IGJvb2xlYW47XG4gIC8qKiBUaGUgYWRhcHRlcidzIGZsdXNoIHRocmV3IG9yIHJlamVjdGVkIOKAlCBjb3VudGVkIG9uIGBnZXRTbmFwc2hvdCgpLnNpbmtgLiAqL1xuICByZWFkb25seSBmYWlsZWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgZmx1c2ggaGFkIG5vdCBzZXR0bGVkIHdoZW4gYHRpbWVvdXRNc2AgcmFuIG91dC4gKi9cbiAgcmVhZG9ubHkgcGVuZGluZzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIHJ1biB3aXRoIGBzaW5rOiB7IG9uRmFpbHVyZTogJ2ZhaWwnIH1gIGxvc3QgYW4gZW50cnk6IHRoZSByZWNvcmQgdGhlIGFwcCBhc2tlZCB0byBiZSBrZXB0IGlzIG5vdCB3aG9sZS5cbiAqIGBjYXVzZWAgaXMgdGhlIGFkYXB0ZXIncyBvd24gZXJyb3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWNvcmRTaW5rRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG92ZXJyaWRlIHJlYWRvbmx5IG5hbWUgPSAnUmVjb3JkU2lua0Vycm9yJztcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCByZWFkb25seSBjYXVzZTogdW5rbm93bikge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICB9XG59XG5cbi8qKiBUaGUgb3B0aW9uIHJlc29sdmVkIG9uY2UsIGF0IGNvbnN0cnVjdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRSZWNvcmRTaW5rIHtcbiAgcmVhZG9ubHkgYWRhcHRlcjogUmVjb3JkU2luaztcbiAgcmVhZG9ubHkgb25GYWlsdXJlOiBSZWNvcmRTaW5rRmFpbHVyZU1vZGU7XG4gIHJlYWRvbmx5IGZsdXNoOiBSZWNvcmRTaW5rRmx1c2hNb2RlO1xuICByZWFkb25seSBjYXB0dXJlPzogQ2FwdHVyZUhpc3RvcnlPcHRpb25zO1xufVxuXG5jb25zdCBNRVRIT0RTID0gWydvcGVuZWQnLCAnY29tbWl0JywgJ25vdGUnLCAnY2xvc2VkJ10gYXMgY29uc3Q7XG5cbmludGVyZmFjZSBTaW5rRXJyb3JWaWV3IHtcbiAgcmVhZG9ubHkgdGV4dDogc3RyaW5nO1xuICByZWFkb25seSBlcnJvcjogdW5rbm93bjtcbiAgcmVhZG9ubHkgbWFza2VkOiBib29sZWFuO1xuICByZWFkb25seSBydWxlPzogUmVkYWN0aW9uUnVsZTtcbn1cblxuaW50ZXJmYWNlIEludm9jYXRpb25GYWlsdXJlIHtcbiAgcmVhZG9ubHkgZW50cnk6IFJlY29yZEVudHJ5O1xuICByZWFkb25seSBjYXVzZTogdW5rbm93bjtcbiAgcmVhZG9ubHkgdmlldzogU2lua0Vycm9yVmlldztcbn1cblxuZnVuY3Rpb24gaXNBZGFwdGVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkU2luayB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBNRVRIT0RTLmV2ZXJ5KChtKSA9PiB0eXBlb2YgKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVttXSA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgZXhlY3V0b3IncyBgc2lua2Agb3B0aW9uLCBvciByZWZ1c2UgaXQgd2l0aCBhIGBUeXBlRXJyb3JgIG5hbWluZyB3aGF0IGlzIHdyb25nIOKAlCBhIHdpcmluZyBtaXN0YWtlXG4gKiB0aGUgYXBwIG1ha2VzIG9uY2UsIHNvIGl0IGZhaWxzIGF0IGNvbnN0cnVjdGlvbiwgbmV2ZXIgbWlkLXJ1bi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSZWNvcmRTaW5rKG9wdGlvbjogdW5rbm93bik6IFJlc29sdmVkUmVjb3JkU2luayB8IHVuZGVmaW5lZCB7XG4gIGlmIChvcHRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGlzQWRhcHRlcihvcHRpb24pKSByZXR1cm4geyBhZGFwdGVyOiBvcHRpb24sIG9uRmFpbHVyZTogJ3JlcG9ydCcsIGZsdXNoOiAnYXV0bycgfTtcbiAgaWYgKG9wdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiBPYmplY3QuaGFzT3duKG9wdGlvbiwgJ2FkYXB0ZXInKSkge1xuICAgIGNvbnN0IHsgYWRhcHRlciwgb25GYWlsdXJlID0gJ3JlcG9ydCcsIGZsdXNoID0gJ2F1dG8nLCBjYXB0dXJlIH0gPSBvcHRpb24gYXMgUGFydGlhbDxSZWNvcmRTaW5rT3B0aW9ucz47XG4gICAgaWYgKCFpc0FkYXB0ZXIoYWRhcHRlcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Zsb3dDaGFydEV4ZWN1dG9yOiBzaW5rLmFkYXB0ZXIgbXVzdCBiZSBhIFJlY29yZFNpbmsgKG9wZW5lZCwgY29tbWl0LCBub3RlLCBjbG9zZWQpJyk7XG4gICAgfVxuICAgIGlmIChvbkZhaWx1cmUgIT09ICdyZXBvcnQnICYmIG9uRmFpbHVyZSAhPT0gJ2ZhaWwnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmxvd0NoYXJ0RXhlY3V0b3I6IHNpbmsub25GYWlsdXJlIG11c3QgYmUgJ3JlcG9ydCcgb3IgJ2ZhaWwnXCIpO1xuICAgIH1cbiAgICBpZiAoZmx1c2ggIT09ICdhdXRvJyAmJiBmbHVzaCAhPT0gJ21hbnVhbCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGbG93Q2hhcnRFeGVjdXRvcjogc2luay5mbHVzaCBtdXN0IGJlICdhdXRvJyBvciAnbWFudWFsJ1wiKTtcbiAgICB9XG4gICAgaWYgKGNhcHR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFjYXB0dXJlIHx8IHR5cGVvZiBjYXB0dXJlLmFja25vd2xlZGdlICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaW5rLmNhcHR1cmUgcmVxdWlyZXMgYWNrbm93bGVkZ2UnKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgbWF4XSBvZiBbXG4gICAgICAgIFsnbWF4Qnl0ZXMnLCA4ICogMTAyNCAqIDEwMjRdLFxuICAgICAgICBbJ3RpbWVvdXRNcycsIDMwXzAwMF0sXG4gICAgICBdIGFzIGNvbnN0KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2FwdHVyZVtrZXldO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEgfHwgdmFsdWUgPiBtYXgpKVxuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBzaW5rLmNhcHR1cmUuJHtrZXl9IG11c3QgYmUgYSBwb3NpdGl2ZSB3aG9sZSBudW1iZXIgYXQgbW9zdCAke21heH1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZml4ZWRDYXB0dXJlID1cbiAgICAgIGNhcHR1cmUgJiZcbiAgICAgIE9iamVjdC5mcmVlemUoe1xuICAgICAgICBhY2tub3dsZWRnZTogY2FwdHVyZS5hY2tub3dsZWRnZS5iaW5kKGNhcHR1cmUpLFxuICAgICAgICAuLi4oY2FwdHVyZS5tYXhCeXRlcyAhPT0gdW5kZWZpbmVkICYmIHsgbWF4Qnl0ZXM6IGNhcHR1cmUubWF4Qnl0ZXMgfSksXG4gICAgICAgIC4uLihjYXB0dXJlLnRpbWVvdXRNcyAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dE1zOiBjYXB0dXJlLnRpbWVvdXRNcyB9KSxcbiAgICAgIH0pO1xuICAgIHJldHVybiB7IGFkYXB0ZXIsIG9uRmFpbHVyZSwgZmx1c2gsIC4uLihmaXhlZENhcHR1cmUgJiYgeyBjYXB0dXJlOiBmaXhlZENhcHR1cmUgfSkgfTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICdGbG93Q2hhcnRFeGVjdXRvcjogc2luayBtdXN0IGJlIGEgUmVjb3JkU2luayAob3BlbmVkLCBjb21taXQsIG5vdGUsIGNsb3NlZCkgb3IgeyBhZGFwdGVyLCBvbkZhaWx1cmU/LCBmbHVzaD8gfScsXG4gICk7XG59XG5cbi8qKlxuICogT25lIHJ1bidzIHJlY29yZCBzaW5rOiB0aGUgc2luayBldmVyeSBsb2cgb2YgdGhlIHJ1biB3cml0ZXMgdG8gKHJvb3QgYW5kIG1vdW50cyksIGl0cyBhY2NvdW50aW5nIGFuZCBpdHNcbiAqIGZhaWx1cmUgbW9kZS4gQSBzYW1lLWV4ZWN1dG9yIHJlc3VtZSBrZWVwcyBpdCAodGhlIHJvb3QgbG9nIGdvZXMgb24pOyBhIGZyZXNoIHJ1biBtYWtlcyBhIG5ldyBvbmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBSdW5SZWNvcmQge1xuICAvKiogSGFuZCB0aGlzIHRvIGV2ZXJ5IGBFdmVudExvZ2Agb2YgdGhlIHJ1bi4gKi9cbiAgcmVhZG9ubHkgc2luazogUmVjb3JkU2luaztcbiAgcHJpdmF0ZSBlbnRyaWVzID0gMDtcbiAgcHJpdmF0ZSBmYWlsZWQgPSAwO1xuICBwcml2YXRlIGxhc3RFcnJvcj86IHN0cmluZztcbiAgcHJpdmF0ZSB3YXJuZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBydWxlPzogUmVkYWN0aW9uUnVsZTtcbiAgLyoqIEFib3J0ZWQgYXQgdGhlIGZpcnN0IGxvc3MgdW5kZXIgYCdmYWlsJ2Ag4oCUIGNvbXBvc2VkIGludG8gdGhlIGxlZydzIHNpZ25hbDsgZnJlc2ggcGVyIGxlZyAoe0BsaW5rIGJlZ2luTGVnfSkuICovXG4gIHByaXZhdGUgc3RvcHBlcj86IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBmYWlsdXJlPzogUmVjb3JkU2lua0Vycm9yO1xuICBwcml2YXRlIGNhcHR1cmVQZW5kaW5nID0gMDtcbiAgcHJpdmF0ZSBjYXB0dXJlU3RhdHVzPzogQ2FwdHVyZUhpc3RvcnlTdGF0dXM7XG4gIC8qKiBPcGFxdWUgZXJyb3IgaWRlbnRpdGllcyBvbmx5OiBubyByYXcgZW50cnkgb3IgYWRhcHRlciBlcnJvciBpcyBlbnVtZXJhYmxlIG9uIHRoZSB0cmFuc3BvcnQgZXJyb3IuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaW52b2NhdGlvbkZhaWx1cmVzID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBJbnZvY2F0aW9uRmFpbHVyZT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHJlc29sdmVkOiBSZXNvbHZlZFJlY29yZFNpbmspIHtcbiAgICBpZiAocmVzb2x2ZWQub25GYWlsdXJlID09PSAnZmFpbCcpIHRoaXMuc3RvcHBlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBhZGFwdGVyID0gcmVzb2x2ZWQuYWRhcHRlcjtcbiAgICBjb25zdCBoYW5kZWQgPSAoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLmVudHJpZXMgKz0gMTtcbiAgICB9O1xuICAgIHRoaXMuc2luayA9IHtcbiAgICAgIG9wZW5lZDogKGVudHJ5KSA9PiB7XG4gICAgICAgIGhhbmRlZCgpO1xuICAgICAgICBjb25zdCBydWxlID0gdGhpcy5ydWxlO1xuICAgICAgICBjb25zdCBzZXJ2ZWQgPSB7XG4gICAgICAgICAgLi4uZW50cnksXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiBydWxlID8gcnVsZS5yZXRhaW5TdGF0ZShlbnRyeS5pbml0aWFsU3RhdGUsIExPR19QTEFDRUhPTERFUikgOiBlbnRyeS5pbml0aWFsU3RhdGUsXG4gICAgICAgICAgLi4uKGVudHJ5Lm1ldGEgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBtZXRhOiB0aGlzLnNlcnZlKGVudHJ5Lm1ldGEpIH0pLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoeyAuLi5zZXJ2ZWQsIGtpbmQ6ICdvcGVuZWQnIH0sICgpID0+IGFkYXB0ZXIub3BlbmVkKHNlcnZlZCksIHJ1bGUpO1xuICAgICAgfSxcbiAgICAgIGNvbW1pdDogKGVudHJ5KSA9PiB7XG4gICAgICAgIGhhbmRlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoeyAuLi5lbnRyeSwga2luZDogJ2NvbW1pdCcgfSwgKCkgPT4gYWRhcHRlci5jb21taXQoZW50cnkpLCB0aGlzLnJ1bGUpO1xuICAgICAgfSxcbiAgICAgIG5vdGU6IChlbnRyeSkgPT4ge1xuICAgICAgICBoYW5kZWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlKFxuICAgICAgICAgIHsgYWRkcmVzczogZW50cnkuYWRkcmVzcywgYXQ6IGVudHJ5LmF0LCBraW5kOiAnbm90ZScsIG5vdGU6IGVudHJ5LmtpbmQsIGRhdGE6IGVudHJ5LmRhdGEgfSxcbiAgICAgICAgICAoKSA9PiBhZGFwdGVyLm5vdGUoZW50cnkpLFxuICAgICAgICAgIHRoaXMucnVsZSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjbG9zZWQ6IChlbnRyeSkgPT4ge1xuICAgICAgICBoYW5kZWQoKTtcbiAgICAgICAgY29uc3Qgc2VydmVkID0geyAuLi5lbnRyeSwgLi4uKGVudHJ5Lm1ldGEgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBtZXRhOiB0aGlzLnNlcnZlKGVudHJ5Lm1ldGEpIH0pIH07XG4gICAgICAgIHJldHVybiB0aGlzLmludm9rZSh7IC4uLnNlcnZlZCwga2luZDogJ2Nsb3NlZCcgfSwgKCkgPT4gYWRhcHRlci5jbG9zZWQoc2VydmVkKSwgdGhpcy5ydWxlKTtcbiAgICAgIH0sXG4gICAgICBvbkZhaWx1cmU6IChmYWlsdXJlKSA9PiB7XG4gICAgICAgIGNvbnN0IGludm9jYXRpb24gPVxuICAgICAgICAgIGZhaWx1cmUuZXJyb3IgIT09IG51bGwgJiYgKHR5cGVvZiBmYWlsdXJlLmVycm9yID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgZmFpbHVyZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgID8gdGhpcy5pbnZvY2F0aW9uRmFpbHVyZXMuZ2V0KGZhaWx1cmUuZXJyb3IpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gQmVmb3JlIGFkbWlzc2lvbiAoZS5nLiBhIG1ldGEtY29weSByZWZ1c2FsKSwgbm8gZGlzcGF0Y2hlZCBzZXJ2ZWQgZW50cnkgZXhpc3RzLiBDb3VudCB0aGUgbG9zcyBhbmRcbiAgICAgICAgLy8gYXBwbHkgdGhlIGZhaWx1cmUgbW9kZSwgYnV0IG5ldmVyIGhhbmQgdGhlIGFkYXB0ZXIgRm9vdHRyYWNlJ3Mgb3JpZ2luYWwsIHVuc2VydmVkIGVudHJ5LlxuICAgICAgICBpZiAoaW52b2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB0aGlzLmxvc3QoZmFpbHVyZS5lcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhmYWlsdXJlLmVycm9yLCB0aGlzLnJ1bGUpKTtcbiAgICAgICAgZWxzZSB0aGlzLmxvc3QoaW52b2NhdGlvbi5jYXVzZSwgaW52b2NhdGlvbi5lbnRyeSwgaW52b2NhdGlvbi52aWV3KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBDYXB0dXJlIHRoZSBzZXJ2ZWQgZW50cnkgbm93OyBhbiBhc3luY2hyb25vdXMgZmFpbHVyZSBrZWVwcyB0aGlzIGxlZydzIHJ1bGUsIG5vdCBhIGxhdGVyIHJlc3VtZSdzIHJ1bGUuICovXG4gIHByaXZhdGUgaW52b2tlKGVudHJ5OiBSZWNvcmRFbnRyeSwgY2FsbDogKCkgPT4gdW5rbm93biwgcnVsZTogUmVkYWN0aW9uUnVsZSB8IHVuZGVmaW5lZCk6IHVua25vd24ge1xuICAgIGNvbnN0IGZhaWxlZCA9IChjYXVzZTogdW5rbm93bik6IG5ldmVyID0+IHtcbiAgICAgIGNvbnN0IGVudmVsb3BlID0gbmV3IEVycm9yKCdyZWNvcmQgc2luazogYWRhcHRlciBpbnZvY2F0aW9uIGZhaWxlZCcpO1xuICAgICAgdGhpcy5pbnZvY2F0aW9uRmFpbHVyZXMuc2V0KGVudmVsb3BlLCB7IGVudHJ5LCBjYXVzZSwgdmlldzogdGhpcy5lcnJvclZpZXcoY2F1c2UsIHJ1bGUpIH0pO1xuICAgICAgdGhyb3cgZW52ZWxvcGU7XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmV0dXJuZWQgPSBjYWxsKCk7XG4gICAgICAvLyBWb2lkIGFkYXB0ZXJzIGtlZXAgdGhlaXIgc3luY2hyb25vdXMgcGF0aDsgb25seSBhbiBvYmplY3QvZnVuY3Rpb24gY2FuIGJlIGEgdGhlbmFibGUuIHNldHRsZU9uY2VcbiAgICAgIC8vIG9ic2VydmVzIG5hdGl2ZSBwcm9taXNlcyB0aHJvdWdoIFByb21pc2UucHJvdG90eXBlLnRoZW4gYW5kIGd1YXJkcyBob3N0aWxlIHRoZW5hYmxlcyB0b28uXG4gICAgICBpZiAocmV0dXJuZWQgPT09IG51bGwgfHwgKHR5cGVvZiByZXR1cm5lZCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHJldHVybmVkICE9PSAnZnVuY3Rpb24nKSkgcmV0dXJuIHJldHVybmVkO1xuICAgICAgaWYgKCF0aGlzLnJlc29sdmVkLmNhcHR1cmUpIHJldHVybiBzZXR0bGVPbmNlKHJldHVybmVkLCAoKSA9PiB1bmRlZmluZWQsIGZhaWxlZCk7XG4gICAgICB0aGlzLmNhcHR1cmVQZW5kaW5nKys7XG4gICAgICByZXR1cm4gc2V0dGxlT25jZShcbiAgICAgICAgcmV0dXJuZWQsXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmNhcHR1cmVQZW5kaW5nLS07XG4gICAgICAgIH0sXG4gICAgICAgIChjYXVzZSkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FwdHVyZVBlbmRpbmctLTtcbiAgICAgICAgICByZXR1cm4gZmFpbGVkKGNhdXNlKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIHJldHVybiBmYWlsZWQoY2F1c2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBIHNpbmsgZXJyb3IgaXMgdGhlIGRpYWdub3N0aWMgZXJyb3JzLnJlY29yZFNpbmtFcnJvcjsgcmF3IGNhdXNlcyBiZWxvbmcgb25seSB0byB0aGUgY2FsbGVyJ3MgZXhjZXB0aW9uLiAqL1xuICBwcml2YXRlIGVycm9yVmlldyhlcnJvcjogdW5rbm93biwgcnVsZTogUmVkYWN0aW9uUnVsZSB8IHVuZGVmaW5lZCk6IFNpbmtFcnJvclZpZXcge1xuICAgIGNvbnN0IHRleHQgPSB0aHJvd25UZXh0KGVycm9yKTtcbiAgICBjb25zdCByZXRhaW5lZCA9IHJ1bGVcbiAgICAgID8gcnVsZS5yZXRhaW5TdGFnZUVycm9yKGVycm9yLCB0ZXh0LCBydWxlLnJldGFpbkRpYWdub3N0aWMoWydlcnJvcnMnLCAncmVjb3JkU2lua0Vycm9yJ10sIHRleHQpKVxuICAgICAgOiB7IG1lc3NhZ2U6IHRleHQsIHN0cnVjdHVyZWRFcnJvcjogZXh0cmFjdEVycm9ySW5mbyhlcnJvcikgfTtcbiAgICBjb25zdCBzZXJ2ZWQgPSB7IC4uLnJldGFpbmVkLnN0cnVjdHVyZWRFcnJvciB9O1xuICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkoc2VydmVkLCAncmF3Jyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQ6IHJldGFpbmVkLm1lc3NhZ2UsXG4gICAgICBlcnJvcjogc2VydmVkLFxuICAgICAgbWFza2VkOiByZXRhaW5lZC5tZXNzYWdlICE9PSB0ZXh0IHx8IHJldGFpbmVkLnN0cnVjdHVyZWRFcnJvci5yYXcgIT09IGVycm9yLFxuICAgICAgcnVsZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc2FtZS1leGVjdXRvciByZXN1bWUgc3RhcnRzIGEgbmV3IGxlZyBvbiB0aGUgc2FtZSByZWNvcmQ6IHRoZSBjb3VudHMgZ28gb24gKG9uZSBsb2csIG9uZSByZWNvcmQpLCBidXQgdGhlXG4gICAqIGZhaWx1cmUgbW9kZSBpcyB0aGUgTEVHJ3Mg4oCUIGEgbG9zcyBpbiBhbiBlYXJsaWVyIGxlZyAod2hpY2ggYWxyZWFkeSBmYWlsZWQgdGhhdCBsZWcpIGRvZXMgbm90IHN0b3AgdGhpcyBvbmUg4oCUXG4gICAqIGFuZCB0aGUgZGV2LW1vZGUgd2FybmluZyBtYXkgZmlyZSBhZ2Fpbi5cbiAgICovXG4gIGJlZ2luTGVnKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc29sdmVkLm9uRmFpbHVyZSA9PT0gJ2ZhaWwnKSB0aGlzLnN0b3BwZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5mYWlsdXJlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMud2FybmVkID0gZmFsc2U7XG4gICAgdGhpcy5jYXB0dXJlU3RhdHVzID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFRoZSBsZWcncyByZWRhY3Rpb24gcnVsZSDigJQgYSByZXN1bWUgYnVpbGRzIGEgbmV3IG9uZTsgdGhlIG5leHQgYG9wZW5lZGAgLyBgY2xvc2VkYCBpcyBzZXJ2ZWQgdW5kZXIgaXQuICovXG4gIHVzZVJ1bGUocnVsZTogUmVkYWN0aW9uUnVsZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMucnVsZSA9IHJ1bGU7XG4gIH1cblxuICAvKiogQWJvcnRzIGF0IHRoZSBmaXJzdCBsb3NzIHVuZGVyIGBvbkZhaWx1cmU6ICdmYWlsJ2A7IGFic2VudCBvdGhlcndpc2UuICovXG4gIGdldCBzdG9wU2lnbmFsKCk6IEFib3J0U2lnbmFsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zdG9wcGVyPy5zaWduYWw7XG4gIH1cblxuICBnZXQgZmx1c2hNb2RlKCk6IFJlY29yZFNpbmtGbHVzaE1vZGUge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkLmZsdXNoO1xuICB9XG5cbiAgLyoqIFRoZSBsb3NzIHRoYXQgZmFpbHMgdGhlIHJ1biB1bmRlciBgJ2ZhaWwnYDsgYWJzZW50IHdoaWxlIG5vdGhpbmcgd2FzIGxvc3QgKGFuZCBhbHdheXMgdW5kZXIgYCdyZXBvcnQnYCkuICovXG4gIGdldCBmYXRhbCgpOiBSZWNvcmRTaW5rRXJyb3IgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZhaWx1cmU7XG4gIH1cblxuICBzdGF0cygpOiBSZWNvcmRTaW5rU3RhdHMge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiB0aGlzLmVudHJpZXMsXG4gICAgICBmYWlsZWQ6IHRoaXMuZmFpbGVkLFxuICAgICAgLi4uKHRoaXMubGFzdEVycm9yID09PSB1bmRlZmluZWQgPyB7fSA6IHsgbGFzdEVycm9yOiB0aGlzLmxhc3RFcnJvciB9KSxcbiAgICAgIC4uLih0aGlzLmNhcHR1cmVTdGF0dXMgJiYgeyBjYXB0dXJlOiB0aGlzLmNhcHR1cmVTdGF0dXMgfSksXG4gICAgfTtcbiAgfVxuXG4gIGdldCBjYXB0dXJlT3B0aW9ucygpOiBDYXB0dXJlSGlzdG9yeU9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkLmNhcHR1cmU7XG4gIH1cblxuICBnZXQgcGVuZGluZ0NhcHR1cmVEZWxpdmVyaWVzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY2FwdHVyZVBlbmRpbmc7XG4gIH1cblxuICBjYXB0dXJlUmVzdWx0KHJlc3VsdDogQ2FwdHVyZUhpc3RvcnlTdGF0dXMpOiB2b2lkIHtcbiAgICB0aGlzLmNhcHR1cmVTdGF0dXMgPSBPYmplY3QuZnJlZXplKHJlc3VsdCk7XG4gIH1cblxuICAvKiogU2FtZSBzZXJ2ZWQgc2VlZCBhcyBvcGVuZWQ7IGEgaGlzdG9yeSBkaWdlc3QgbmV2ZXIgc2VlcyBhIHNlZWRlZCBwb2xpY3kgc2VjcmV0LiAqL1xuICBjYXB0dXJlSW5pdGlhbFN0YXRlKHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5ydWxlID8gKHRoaXMucnVsZS5yZXRhaW5TdGF0ZShzdGF0ZSwgTE9HX1BMQUNFSE9MREVSKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgOiBzdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBd2FpdCB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCwgYXQgbW9zdCBgdGltZW91dE1zYCB3aGVuIGdpdmVuLiBBIGZsdXNoIHRoYXQgdGhyb3dzIG9yIHJlamVjdHMgaXMgYSBsb3NzXG4gICAqIChjb3VudGVkLCBhbmQgZmF0YWwgdW5kZXIgYCdmYWlsJ2ApOyBvbmUgc3RpbGwgcnVubmluZyBhdCB0aGUgZGVhZGxpbmUgaXMgYHBlbmRpbmdgIGFuZCBrZWVwcyBydW5uaW5nIOKAlCBhbmQsXG4gICAqIHdpdGggYHBlbmRpbmdJc0xvc3NgICh0aGUgcnVuJ3Mgb3duIGZsdXNoKSwgY291bnRlZCBhcyBhIGxvc3MgdG9vLCBzbyBhIGZsdXNoIHRoYXQgbmV2ZXIgc2V0dGxlcyBjYW5ub3QgaG9sZCBhXG4gICAqIHJ1biBvcGVuLCBhbmQgY2Fubm90IHBhc3MgZm9yIG9uZSB0aGF0IGxhbmRlZC4gTm90aGluZyBoZXJlIHRocm93czogYSBob3N0aWxlIGFkYXB0ZXIgKGEgdGhyb3dpbmcgYGZsdXNoYFxuICAgKiBnZXR0ZXIsIGEgcHJvbWlzZSB3aXRoIGl0cyBvd24gYHRoZW5gKSBpcyBhIGxvc3MsIG5ldmVyIHRoZSBydW4ncyBlcnJvci5cbiAgICovXG4gIGFzeW5jIGZsdXNoKHRpbWVvdXRNcz86IG51bWJlciwgcGVuZGluZ0lzTG9zcyA9IGZhbHNlKTogUHJvbWlzZTxSZWNvcmRGbHVzaFJlc3VsdD4ge1xuICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLnJlc29sdmVkLmFkYXB0ZXI7XG4gICAgY29uc3QgcnVsZSA9IHRoaXMucnVsZTtcbiAgICBsZXQgc2V0dGxlZDogUHJvbWlzZTxSZWNvcmRGbHVzaFJlc3VsdD47XG4gICAgbGV0IGdpdmVuVXAgPSBmYWxzZTsgLy8gYSBmbHVzaCBhbHJlYWR5IGNvdW50ZWQgYXMgYSBsb3NzIGF0IHRoZSBkZWFkbGluZSBpcyBub3QgY291bnRlZCBhZ2FpbiB3aGVuIGl0IHJlamVjdHNcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmx1c2g6IHVua25vd24gPSBhZGFwdGVyLmZsdXNoOyAvLyByZWFkIG9uY2U6IGEgZ2V0dGVyIHJ1bnMgb25jZSwgaW5zaWRlIHRoZSBndWFyZFxuICAgICAgaWYgKHR5cGVvZiBmbHVzaCAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogZmFsc2UgfTtcbiAgICAgIHNldHRsZWQgPSBzZXR0bGVPbmNlKFxuICAgICAgICBmbHVzaC5jYWxsKGFkYXB0ZXIpLFxuICAgICAgICAoKTogUmVjb3JkRmx1c2hSZXN1bHQgPT4gKHsgZG9uZTogdHJ1ZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogZmFsc2UgfSksXG4gICAgICAgIChlcnJvcik6IFJlY29yZEZsdXNoUmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAoIWdpdmVuVXApIHRoaXMubG9zdChlcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhlcnJvciwgcnVsZSkpO1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCBmYWlsZWQ6IHRydWUsIHBlbmRpbmc6IGZhbHNlIH07XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvc3QoZXJyb3IsIHVuZGVmaW5lZCwgdGhpcy5lcnJvclZpZXcoZXJyb3IsIHJ1bGUpKTtcbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCBmYWlsZWQ6IHRydWUsIHBlbmRpbmc6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmICh0aW1lb3V0TXMgPT09IHVuZGVmaW5lZCB8fCAhTnVtYmVyLmlzRmluaXRlKHRpbWVvdXRNcykpIHJldHVybiBzZXR0bGVkO1xuICAgIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGVuZGluZyA9IG5ldyBQcm9taXNlPFJlY29yZEZsdXNoUmVzdWx0PigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoeyBkb25lOiBmYWxzZSwgZmFpbGVkOiBmYWxzZSwgcGVuZGluZzogdHJ1ZSB9KSwgTWF0aC5tYXgoMCwgdGltZW91dE1zKSk7XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbc2V0dGxlZCwgcGVuZGluZ10pO1xuICAgICAgaWYgKHJlc3VsdC5wZW5kaW5nICYmIHBlbmRpbmdJc0xvc3MpIHtcbiAgICAgICAgZ2l2ZW5VcCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGByZWNvcmQgc2luazogZmx1c2goKSBkaWQgbm90IHNldHRsZSB3aXRoaW4gJHtNYXRoLm1heCgwLCB0aW1lb3V0TXMpfW1zYCk7XG4gICAgICAgIHRoaXMubG9zdChlcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhlcnJvciwgcnVsZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIG1ldGEgYXMgc2VydmVkOiBhIGJvdW5kYXJ5IHJlY29yZCwgc2NydWJiZWQgYnkga2V5IG5hbWUgYXQgZXZlcnkgZGVwdGggKGFuIGluZXJ0IHJ1bGUgY29waWVzIG5vdGhpbmcpLiAqL1xuICBzZXJ2ZShtZXRhOiBNZXRhKTogTWV0YSB7XG4gICAgcmV0dXJuIHRoaXMucnVsZSA/IHRoaXMucnVsZS5yZXRhaW5Cb3VuZGFyeShtZXRhLCBMT0dfUExBQ0VIT0xERVIpIDogbWV0YTtcbiAgfVxuXG4gIC8qKiBPbmUgbG9zczogY291bnRlZCwgd2FybmVkIG9uY2UgcGVyIHJ1biwgdG9sZCB3aXRoIGEgc2FmZSBkaXNwYXRjaGVkIGVudHJ5IHdoZW4gYXZhaWxhYmxlLCBmYXRhbCB1bmRlciAnZmFpbCcuICovXG4gIHByaXZhdGUgbG9zdChlcnJvcjogdW5rbm93biwgZW50cnk6IFJlY29yZEVudHJ5IHwgdW5kZWZpbmVkLCB2aWV3OiBTaW5rRXJyb3JWaWV3KTogdm9pZCB7XG4gICAgdGhpcy5mYWlsZWQgKz0gMTtcbiAgICBjb25zdCB0ZXh0ID0gdmlldy50ZXh0O1xuICAgIHRoaXMubGFzdEVycm9yID0gdGV4dDtcbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgIXRoaXMud2FybmVkKSB7XG4gICAgICB0aGlzLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludF0gcmVjb3JkIHNpbms6IGFuIGVudHJ5IHdhcyBub3Qgc3RvcmVkICgke3RleHR9KS4gVGhlIHJ1biBnb2VzIG9uOyBgICtcbiAgICAgICAgICAnZ2V0U25hcHNob3QoKS5zaW5rIGNvdW50cyBldmVyeSBsb3NzLicsXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBUaGUgZmFpbHVyZSBtb2RlIGZpcnN0OiBub3RoaW5nIHRoZSBhZGFwdGVyJ3Mgb3duIGxpc3RlbmVyIGRvZXMgY2FuIHNraXAgaXQuXG4gICAgaWYgKHRoaXMuc3RvcHBlciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZmFpbHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZhaWx1cmUgPSBuZXcgUmVjb3JkU2lua0Vycm9yKGByZWNvcmQgc2luazogYW4gZW50cnkgd2FzIG5vdCBzdG9yZWQg4oCUICR7dGV4dH1gLCBlcnJvcik7XG4gICAgICBpZiAodmlldy5tYXNrZWQpIHtcbiAgICAgICAgLy8gVGhlIGNhbGxlciBrZWVwcyB0aGUgcmVhbCBjYXVzZSwgYnV0IG9ic2VydmVycyBvZiB0aGlzIG5ldyB3cmFwcGVyIG11c3QgaW5oZXJpdCBpdHMgcmVtZW1iZXJlZCBtYXNrLlxuICAgICAgICB2aWV3LnJ1bGU/LnJldGFpblN0YWdlRXJyb3IodGhpcy5mYWlsdXJlLCB0aGlzLmZhaWx1cmUubWVzc2FnZSwgU0NPUEVfUExBQ0VIT0xERVIpO1xuICAgICAgICBpZiAodGhpcy5ydWxlICE9PSB2aWV3LnJ1bGUpIHRoaXMucnVsZT8ucmV0YWluU3RhZ2VFcnJvcih0aGlzLmZhaWx1cmUsIHRoaXMuZmFpbHVyZS5tZXNzYWdlLCBTQ09QRV9QTEFDRUhPTERFUik7XG4gICAgICB9XG4gICAgICB0aGlzLnN0b3BwZXIuYWJvcnQodGhpcy5mYWlsdXJlKTtcbiAgICB9XG4gICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHRlbGxBZGFwdGVyKHRoaXMucmVzb2x2ZWQuYWRhcHRlciwgeyBlbnRyeSwgZXJyb3I6IHZpZXcuZXJyb3IgfSk7XG4gIH1cbn1cblxuLyoqIFRoZSBhZGFwdGVyJ3Mgb3duIGBvbkZhaWx1cmVgLCBpc29sYXRlZDogYSB0aHJvd2luZyBnZXR0ZXIsIGEgdGhyb3cgb3IgYSByZWplY3Rpb24gdGhlcmUgY2hhbmdlcyBub3RoaW5nLiAqL1xuZnVuY3Rpb24gdGVsbEFkYXB0ZXIoYWRhcHRlcjogUmVjb3JkU2luaywgZmFpbHVyZTogeyByZWFkb25seSBlbnRyeTogUmVjb3JkRW50cnk7IHJlYWRvbmx5IGVycm9yOiB1bmtub3duIH0pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ZW5lcjogdW5rbm93biA9IGFkYXB0ZXIub25GYWlsdXJlO1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHJldHVybjtcbiAgICBzZXR0bGVPbmNlKFxuICAgICAgbGlzdGVuZXIuY2FsbChhZGFwdGVyLCBmYWlsdXJlKSxcbiAgICAgICgpID0+IHVuZGVmaW5lZCxcbiAgICAgICgpID0+IHVuZGVmaW5lZCxcbiAgICApO1xuICB9IGNhdGNoIHtcbiAgICAvLyBBIGxpc3RlbmVyIHRoYXQgZmFpbHMgaXMgdGhlIGFkYXB0ZXIncyBvd24gYnVzaW5lc3M6IHRoZSBsb3NzIGlzIGFscmVhZHkgY291bnRlZC5cbiAgfVxufVxuXG4vKipcbiAqIGB2YWx1ZWAsIHNldHRsZWQgT05DRSBpbnRvIGBvblZhbHVlYCAvIGBvbkVycm9yYCDigJQgbmV2ZXIgdGhyb3VnaCB0aGUgdmFsdWUncyBvd24gYHRoZW5gOiBhIG5hdGl2ZSBwcm9taXNlIGlzXG4gKiB3YXRjaGVkIHRocm91Z2ggdGhlIHJlYWwgYFByb21pc2UucHJvdG90eXBlLnRoZW5gIChhbiBvd24gYHRoZW5gIG9uIGl0IGlzIG5vdCB0cnVzdGVkLCBzbyBpdHMgcmVqZWN0aW9uIGlzIGFsd2F5c1xuICogaGFuZGxlZCksIGFueSBvdGhlciB0aGVuYWJsZSBhZG9wdGVkIGludG8gYSBmcmVzaCBwcm9taXNlLiBBIHBsYWluIHZhbHVlIGlzIGEgZnVsZmlsbWVudC5cbiAqL1xuZnVuY3Rpb24gc2V0dGxlT25jZTxUPih2YWx1ZTogdW5rbm93biwgb25WYWx1ZTogKCkgPT4gVCwgb25FcnJvcjogKGVycm9yOiB1bmtub3duKSA9PiBUKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFkb3B0ZWQ6IFByb21pc2U8dW5rbm93bj4gPSB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UgPyB2YWx1ZSA6IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiByZXNvbHZlKHZhbHVlKSk7XG4gIHJldHVybiBQcm9taXNlLnByb3RvdHlwZS50aGVuLmNhbGwoYWRvcHRlZCwgb25WYWx1ZSwgb25FcnJvcikgYXMgUHJvbWlzZTxUPjtcbn1cbiJdfQ==
331
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkU2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL3JlY29yZFNpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFJSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBeUMzRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxLQUFLO0lBRUY7SUFEcEIsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQzNDLFlBQVksT0FBZSxFQUFXLEtBQWM7UUFDbEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRHFCLFVBQUssR0FBTCxLQUFLLENBQVM7SUFFcEQsQ0FBQztDQUNGO0FBVUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQVUsQ0FBQztBQWVoRSxTQUFTLFNBQVMsQ0FBQyxLQUFjO0lBQy9CLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFRLEtBQWlDLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUM7QUFDM0YsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxNQUFlO0lBQy9DLElBQUks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QixDQUFDLENBQUM7WUFDbEgsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUYsQ0FBQztDQUNGO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsV0FBVyxDQUFDLE9BQW1CLEVBQUUsT0FBaUU7SUFDekcsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUM1QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVU7WUFBRSxPQUFPO1FBQzNDLFVBQVUsQ0FDUixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFDL0IsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUNmLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FDaEIsQ0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxvRkFBb0Y7SUFDdEYsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJ1bm5lci9yZWNvcmRTaW5rLnRzIOKAlCB0aGUgcnVuJ3Mgc2lkZSBvZiB0aGUgY3Jhc2gtc2FmZSByZWNvcmQgKGRlc2lnbiDCpzMuNSwgcGFja2V0IFA2KS5cbiAqXG4gKiBmb290dHJhY2Ugb3ducyB0aGUgcG9ydCAoYFJlY29yZFNpbmtgLCBgZm9vdHRyYWNlL3dyaXRlYCk6IGEgbG9nIGJ1aWx0IHdpdGggYSBzaW5rIGhhbmRzIGl0IGV2ZXJ5IGVudHJ5IEFTIElUXG4gKiBMQU5EUyDigJQgYG9wZW5lZGAsIGBjb21taXRgLCBgbm90ZWAsIGBjbG9zZWRgIOKAlCBhbmQgY291bnRzIHdoYXQgdGhlIHNpbmsgZGlkIG5vdCB0YWtlLiBUaGlzIGZpbGUgaXMgd2hhdCB0aGVcbiAqIEVYRUNVVE9SIGFkZHMgYXJvdW5kIGFuIGFwcCdzIGFkYXB0ZXIsIG9uZSB7QGxpbmsgUnVuUmVjb3JkfSBwZXIgcnVuOlxuICpcbiAqICAgLSBUSEUgT05FIExBVywgYmVmb3JlIGFueSBieXRlIGxlYXZlczogdGhlIGBvcGVuZWRgIGJhc2UgaXMgdGhlIHJ1bidzIHNlcnZlZCBmb3JtIG9mIGl0ICh0aGUgcmVkYWN0aW9uIHJ1bGUnc1xuICogICAgIGByZXRhaW5TdGF0ZWAsIHRoZSBtaXJyb3IncyBzZWVkIOKAlCBzbyBhIHBvbGljeSBrZXkgc2VlZGVkIGJ5IGBpbml0aWFsQ29udGV4dGAgb3IgYSBjaGVja3BvaW50IG5ldmVyIHJlYWNoZXNcbiAqICAgICB0aGUgc2luayksIGFuZCB0aGUgYG9wZW5lZGAgLyBgY2xvc2VkYCBtZXRhIGFyZSBib3VuZGFyeSByZWNvcmRzIChgcmV0YWluQm91bmRhcnlgKS4gQSBjb21taXQgaXMgdGhlIGxvZydzIG93blxuICogICAgIGJ1bmRsZSwgYWxyZWFkeSBzY3J1YmJlZCBhdCBjb21taXQ7IGFuIGF0dGVtcHQgbm90ZSBjYXJyaWVzIHRoZSBzZXJ2ZWQgYEF0dGVtcHRSZWNvcmRgIChubyBgcmF3YCkuXG4gKiAgIC0gQUNDT1VOVElORzogZXZlcnkgZW50cnkgaGFuZGVkIHRvIHRoZSBhZGFwdGVyIGlzIGNvdW50ZWQsIGV2ZXJ5IGxvc3MgdG9vIChgZ2V0U25hcHNob3QoKS5zaW5rYCksIHdpdGggYVxuICogICAgIGRldi1tb2RlIHdhcm5pbmcgb24gdGhlIGZpcnN0IGxvc3Mgb2YgYSBydW4uIFRoZSBhZGFwdGVyJ3Mgb3duIGBvbkZhaWx1cmVgIGhlYXJzIGEgZGlzcGF0Y2hlZCBlbnRyeSdzIGxvc3NcbiAqICAgICB3aXRoIHRoYXQgc2FtZSBzZXJ2ZWQgZW50cnkgYW5kIGEgc2VydmVkIGVycm9yLCBpc29sYXRlZC4gQSByZWZ1c2FsIGJlZm9yZSBkaXNwYXRjaCBpcyBjb3VudGVkIHdpdGhvdXRcbiAqICAgICBmb3J3YXJkaW5nIEZvb3R0cmFjZSdzIHVuc2VydmVkIGVudHJ5LlxuICogICAtIFRIRSBGQUlMVVJFIE1PREUgKG93bmVyIHJ1bGluZyBRMyk6IGAncmVwb3J0J2AgKGRlZmF1bHQpIOKAlCB0aGUgcnVuIGdvZXMgb247IGAnZmFpbCdgIOKAlCB0aGUgZmlyc3QgbG9zdCBlbnRyeVxuICogICAgIGFib3J0cyB0aGUgcnVuJ3Mgc2lnbmFsIHdpdGggYSB7QGxpbmsgUmVjb3JkU2lua0Vycm9yfSwgYW5kIGEgcnVuIHRoYXQgZmluaXNoZWQgd2l0aCBhIGxvc3MgcmVqZWN0cyB3aXRoIGl0LlxuICogICAtIEZMVVNIOiBgJ2F1dG8nYCAoZGVmYXVsdCkg4oCUIGBydW4oKWAgLyBgcmVzdW1lKClgIGF3YWl0IHRoZSBhZGFwdGVyJ3MgYGZsdXNoKClgIGFmdGVyIHRoZSBjbG9zaW5nIGVudHJ5O1xuICogICAgIGAnbWFudWFsJ2Ag4oCUIHRoZSBhcHAgY2FsbHMgYGV4ZWN1dG9yLmZsdXNoUmVjb3JkKClgLlxuICpcbiAqIEV2ZXJ5IGFkYXB0ZXIgbWV0aG9kIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IGZyb20gdGhlIGxvZzsgd2hhdGV2ZXIgdGhlIGFkYXB0ZXIgdGhyb3dzIG9yIHJlamVjdHMgd2l0aCBpcyB0aGVcbiAqIGxvZydzIHRvIGNvdW50IChgRXZlbnRMb2cgwrcgc2lua0ZhaWx1cmVzYCksIG5ldmVyIHRoZSBydW4ncyDigJQgc28gbm90aGluZyBoZXJlIHRocm93cyB0byB0aGUgZW5naW5lLlxuICovXG5cbmltcG9ydCB0eXBlIHsgTWV0YSB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZEVudHJ5LCBSZWNvcmRTaW5rIH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcbmltcG9ydCB7IExPR19QTEFDRUhPTERFUiB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7XG5cbmltcG9ydCB0eXBlIHsgQ2FwdHVyZUhpc3RvcnlPcHRpb25zLCBDYXB0dXJlSGlzdG9yeVN0YXR1cyB9IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeVR5cGVzLmpzJztcbmltcG9ydCB7IHNldHRsZU9uY2UgfSBmcm9tICcuLi9jYXB0dXJlL3NpbmtTZXR0bGVtZW50LmpzJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgdGhyb3duVGV4dCB9IGZyb20gJy4uL2Vycm9ycy9lcnJvckluZm8uanMnO1xuaW1wb3J0IHR5cGUgeyBSZWRhY3Rpb25SdWxlIH0gZnJvbSAnLi4vbWVtb3J5L3JlZGFjdGlvbi5qcyc7XG5pbXBvcnQgeyBTQ09QRV9QTEFDRUhPTERFUiB9IGZyb20gJy4uL21lbW9yeS9yZWRhY3Rpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRTaW5rU3RhdHMgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuXG4vKiogV2hhdCBhIGxvc3QgZW50cnkgZG9lcyB0byB0aGUgcnVuOiBgJ3JlcG9ydCdgIGNvdW50cyBpdCBhbmQgZ29lcyBvbjsgYCdmYWlsJ2AgZmFpbHMgdGhlIHJ1bi4gKi9cbmV4cG9ydCB0eXBlIFJlY29yZFNpbmtGYWlsdXJlTW9kZSA9ICdyZXBvcnQnIHwgJ2ZhaWwnO1xuXG4vKiogV2hlbiB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCBydW5zOiBhZnRlciBlYWNoIHJ1bidzIGNsb3NpbmcgZW50cnkgKGAnYXV0bydgKSwgb3Igd2hlbiB0aGUgYXBwIGFza3MuICovXG5leHBvcnQgdHlwZSBSZWNvcmRTaW5rRmx1c2hNb2RlID0gJ2F1dG8nIHwgJ21hbnVhbCc7XG5cbi8qKlxuICogVGhlIGV4ZWN1dG9yJ3MgYHNpbmtgIG9wdGlvbiBpbiBpdHMgbG9uZyBmb3JtLiBUaGUgc2hvcnQgZm9ybSBpcyB0aGUgYWRhcHRlciBpdHNlbGYuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyBzaW5rOiB7IGFkYXB0ZXI6IGZpbGVTaW5rKCcvdmFyL2Zvb3RwcmludC9ydW4uanNvbmwnKSwgb25GYWlsdXJlOiAnZmFpbCcgfSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZFNpbmtPcHRpb25zIHtcbiAgLyoqIFdoZXJlIHRoZSBlbnRyaWVzIGdvIOKAlCBgZmlsZVNpbmsocGF0aClgIChgZm9vdHByaW50anMvc2lua3NgKSwgYG1lbW9yeVNpbmsoKWAgKGBmb290dHJhY2Uvd3JpdGVgKSwgb3IgeW91cnMuICovXG4gIHJlYWRvbmx5IGFkYXB0ZXI6IFJlY29yZFNpbms7XG4gIC8qKiBgJ3JlcG9ydCdgIChkZWZhdWx0KTogYSBsb3N0IGVudHJ5IGlzIGNvdW50ZWQgYW5kIHRoZSBydW4gZ29lcyBvbi4gYCdmYWlsJ2A6IHRoZSBmaXJzdCBvbmUgZmFpbHMgdGhlIHJ1bi4gKi9cbiAgcmVhZG9ubHkgb25GYWlsdXJlPzogUmVjb3JkU2lua0ZhaWx1cmVNb2RlO1xuICAvKiogYCdhdXRvJ2AgKGRlZmF1bHQpOiBgcnVuKClgIGF3YWl0cyB0aGUgYWRhcHRlcidzIGBmbHVzaCgpYCBhZnRlciB0aGUgY2xvc2luZyBlbnRyeS4gYCdtYW51YWwnYDogYGZsdXNoUmVjb3JkKClgLiAqL1xuICByZWFkb25seSBmbHVzaD86IFJlY29yZFNpbmtGbHVzaE1vZGU7XG4gIC8qKiBPcHQtaW4gY2FwdHVyZSBldmlkZW5jZSBhbmQgZXhwbGljaXQgaG9zdCBhY2tub3dsZWRnZW1lbnQ7IG9yZGluYXJ5IGZsdXNoIG5ldmVyIGltcGxpZXMgZHVyYWJpbGl0eS4gKi9cbiAgcmVhZG9ubHkgY2FwdHVyZT86IENhcHR1cmVIaXN0b3J5T3B0aW9ucztcbn1cblxuLyoqIFRoZSBleGVjdXRvcidzIGBzaW5rYCBvcHRpb246IGFuIGFkYXB0ZXIsIG9yIHtAbGluayBSZWNvcmRTaW5rT3B0aW9uc30uICovXG5leHBvcnQgdHlwZSBSZWNvcmRTaW5rT3B0aW9uID0gUmVjb3JkU2luayB8IFJlY29yZFNpbmtPcHRpb25zO1xuXG4vKiogV2hhdCBgZXhlY3V0b3IuZmx1c2hSZWNvcmQoKWAgcmVzb2x2ZXMgd2l0aCDigJQgdGhlIGBkcmFpbk9ic2VydmVyc2Agc2hhcGUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZEZsdXNoUmVzdWx0IHtcbiAgLyoqIFRoZSBhZGFwdGVyJ3MgZmx1c2ggZmluaXNoZWQgKG9yIHRoZXJlIHdhcyBub3RoaW5nIHRvIGZsdXNoKS4gKi9cbiAgcmVhZG9ubHkgZG9uZTogYm9vbGVhbjtcbiAgLyoqIFRoZSBhZGFwdGVyJ3MgZmx1c2ggdGhyZXcgb3IgcmVqZWN0ZWQg4oCUIGNvdW50ZWQgb24gYGdldFNuYXBzaG90KCkuc2lua2AuICovXG4gIHJlYWRvbmx5IGZhaWxlZDogYm9vbGVhbjtcbiAgLyoqIFRoZSBmbHVzaCBoYWQgbm90IHNldHRsZWQgd2hlbiBgdGltZW91dE1zYCByYW4gb3V0LiAqL1xuICByZWFkb25seSBwZW5kaW5nOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgcnVuIHdpdGggYHNpbms6IHsgb25GYWlsdXJlOiAnZmFpbCcgfWAgbG9zdCBhbiBlbnRyeTogdGhlIHJlY29yZCB0aGUgYXBwIGFza2VkIHRvIGJlIGtlcHQgaXMgbm90IHdob2xlLlxuICogYGNhdXNlYCBpcyB0aGUgYWRhcHRlcidzIG93biBlcnJvci5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlY29yZFNpbmtFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgb3ZlcnJpZGUgcmVhZG9ubHkgbmFtZSA9ICdSZWNvcmRTaW5rRXJyb3InO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHJlYWRvbmx5IGNhdXNlOiB1bmtub3duKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gIH1cbn1cblxuLyoqIFRoZSBvcHRpb24gcmVzb2x2ZWQgb25jZSwgYXQgY29uc3RydWN0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFJlY29yZFNpbmsge1xuICByZWFkb25seSBhZGFwdGVyOiBSZWNvcmRTaW5rO1xuICByZWFkb25seSBvbkZhaWx1cmU6IFJlY29yZFNpbmtGYWlsdXJlTW9kZTtcbiAgcmVhZG9ubHkgZmx1c2g6IFJlY29yZFNpbmtGbHVzaE1vZGU7XG4gIHJlYWRvbmx5IGNhcHR1cmU/OiBDYXB0dXJlSGlzdG9yeU9wdGlvbnM7XG59XG5cbmNvbnN0IE1FVEhPRFMgPSBbJ29wZW5lZCcsICdjb21taXQnLCAnbm90ZScsICdjbG9zZWQnXSBhcyBjb25zdDtcblxuaW50ZXJmYWNlIFNpbmtFcnJvclZpZXcge1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVycm9yOiB1bmtub3duO1xuICByZWFkb25seSBtYXNrZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJ1bGU/OiBSZWRhY3Rpb25SdWxlO1xufVxuXG5pbnRlcmZhY2UgSW52b2NhdGlvbkZhaWx1cmUge1xuICByZWFkb25seSBlbnRyeTogUmVjb3JkRW50cnk7XG4gIHJlYWRvbmx5IGNhdXNlOiB1bmtub3duO1xuICByZWFkb25seSB2aWV3OiBTaW5rRXJyb3JWaWV3O1xufVxuXG5mdW5jdGlvbiBpc0FkYXB0ZXIodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmRTaW5rIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIE1FVEhPRFMuZXZlcnkoKG0pID0+IHR5cGVvZiAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW21dID09PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBleGVjdXRvcidzIGBzaW5rYCBvcHRpb24sIG9yIHJlZnVzZSBpdCB3aXRoIGEgYFR5cGVFcnJvcmAgbmFtaW5nIHdoYXQgaXMgd3Jvbmcg4oCUIGEgd2lyaW5nIG1pc3Rha2VcbiAqIHRoZSBhcHAgbWFrZXMgb25jZSwgc28gaXQgZmFpbHMgYXQgY29uc3RydWN0aW9uLCBuZXZlciBtaWQtcnVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJlY29yZFNpbmsob3B0aW9uOiB1bmtub3duKTogUmVzb2x2ZWRSZWNvcmRTaW5rIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9wdGlvbiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoaXNBZGFwdGVyKG9wdGlvbikpIHJldHVybiB7IGFkYXB0ZXI6IG9wdGlvbiwgb25GYWlsdXJlOiAncmVwb3J0JywgZmx1c2g6ICdhdXRvJyB9O1xuICBpZiAob3B0aW9uICE9PSBudWxsICYmIHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnICYmIE9iamVjdC5oYXNPd24ob3B0aW9uLCAnYWRhcHRlcicpKSB7XG4gICAgY29uc3QgeyBhZGFwdGVyLCBvbkZhaWx1cmUgPSAncmVwb3J0JywgZmx1c2ggPSAnYXV0bycsIGNhcHR1cmUgfSA9IG9wdGlvbiBhcyBQYXJ0aWFsPFJlY29yZFNpbmtPcHRpb25zPjtcbiAgICBpZiAoIWlzQWRhcHRlcihhZGFwdGVyKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmxvd0NoYXJ0RXhlY3V0b3I6IHNpbmsuYWRhcHRlciBtdXN0IGJlIGEgUmVjb3JkU2luayAob3BlbmVkLCBjb21taXQsIG5vdGUsIGNsb3NlZCknKTtcbiAgICB9XG4gICAgaWYgKG9uRmFpbHVyZSAhPT0gJ3JlcG9ydCcgJiYgb25GYWlsdXJlICE9PSAnZmFpbCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGbG93Q2hhcnRFeGVjdXRvcjogc2luay5vbkZhaWx1cmUgbXVzdCBiZSAncmVwb3J0JyBvciAnZmFpbCdcIik7XG4gICAgfVxuICAgIGlmIChmbHVzaCAhPT0gJ2F1dG8nICYmIGZsdXNoICE9PSAnbWFudWFsJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZsb3dDaGFydEV4ZWN1dG9yOiBzaW5rLmZsdXNoIG11c3QgYmUgJ2F1dG8nIG9yICdtYW51YWwnXCIpO1xuICAgIH1cbiAgICBpZiAoY2FwdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWNhcHR1cmUgfHwgdHlwZW9mIGNhcHR1cmUuYWNrbm93bGVkZ2UgIT09ICdmdW5jdGlvbicpXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpbmsuY2FwdHVyZSByZXF1aXJlcyBhY2tub3dsZWRnZScpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCBtYXhdIG9mIFtcbiAgICAgICAgWydtYXhCeXRlcycsIDggKiAxMDI0ICogMTAyNF0sXG4gICAgICAgIFsndGltZW91dE1zJywgMzBfMDAwXSxcbiAgICAgIF0gYXMgY29uc3QpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjYXB0dXJlW2tleV07XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICghTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpIHx8IHZhbHVlIDwgMSB8fCB2YWx1ZSA+IG1heCkpXG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYHNpbmsuY2FwdHVyZS4ke2tleX0gbXVzdCBiZSBhIHBvc2l0aXZlIHdob2xlIG51bWJlciBhdCBtb3N0ICR7bWF4fWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBmaXhlZENhcHR1cmUgPVxuICAgICAgY2FwdHVyZSAmJlxuICAgICAgT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIGFja25vd2xlZGdlOiBjYXB0dXJlLmFja25vd2xlZGdlLmJpbmQoY2FwdHVyZSksXG4gICAgICAgIC4uLihjYXB0dXJlLm1heEJ5dGVzICE9PSB1bmRlZmluZWQgJiYgeyBtYXhCeXRlczogY2FwdHVyZS5tYXhCeXRlcyB9KSxcbiAgICAgICAgLi4uKGNhcHR1cmUudGltZW91dE1zICE9PSB1bmRlZmluZWQgJiYgeyB0aW1lb3V0TXM6IGNhcHR1cmUudGltZW91dE1zIH0pLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHsgYWRhcHRlciwgb25GYWlsdXJlLCBmbHVzaCwgLi4uKGZpeGVkQ2FwdHVyZSAmJiB7IGNhcHR1cmU6IGZpeGVkQ2FwdHVyZSB9KSB9O1xuICB9XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ0Zsb3dDaGFydEV4ZWN1dG9yOiBzaW5rIG11c3QgYmUgYSBSZWNvcmRTaW5rIChvcGVuZWQsIGNvbW1pdCwgbm90ZSwgY2xvc2VkKSBvciB7IGFkYXB0ZXIsIG9uRmFpbHVyZT8sIGZsdXNoPyB9JyxcbiAgKTtcbn1cblxuLyoqXG4gKiBPbmUgcnVuJ3MgcmVjb3JkIHNpbms6IHRoZSBzaW5rIGV2ZXJ5IGxvZyBvZiB0aGUgcnVuIHdyaXRlcyB0byAocm9vdCBhbmQgbW91bnRzKSwgaXRzIGFjY291bnRpbmcgYW5kIGl0c1xuICogZmFpbHVyZSBtb2RlLiBBIHNhbWUtZXhlY3V0b3IgcmVzdW1lIGtlZXBzIGl0ICh0aGUgcm9vdCBsb2cgZ29lcyBvbik7IGEgZnJlc2ggcnVuIG1ha2VzIGEgbmV3IG9uZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1blJlY29yZCB7XG4gIC8qKiBIYW5kIHRoaXMgdG8gZXZlcnkgYEV2ZW50TG9nYCBvZiB0aGUgcnVuLiAqL1xuICByZWFkb25seSBzaW5rOiBSZWNvcmRTaW5rO1xuICBwcml2YXRlIGVudHJpZXMgPSAwO1xuICBwcml2YXRlIGZhaWxlZCA9IDA7XG4gIHByaXZhdGUgbGFzdEVycm9yPzogc3RyaW5nO1xuICBwcml2YXRlIHdhcm5lZCA9IGZhbHNlO1xuICBwcml2YXRlIHJ1bGU/OiBSZWRhY3Rpb25SdWxlO1xuICAvKiogQWJvcnRlZCBhdCB0aGUgZmlyc3QgbG9zcyB1bmRlciBgJ2ZhaWwnYCDigJQgY29tcG9zZWQgaW50byB0aGUgbGVnJ3Mgc2lnbmFsOyBmcmVzaCBwZXIgbGVnICh7QGxpbmsgYmVnaW5MZWd9KS4gKi9cbiAgcHJpdmF0ZSBzdG9wcGVyPzogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIGZhaWx1cmU/OiBSZWNvcmRTaW5rRXJyb3I7XG4gIHByaXZhdGUgY2FwdHVyZVBlbmRpbmcgPSAwO1xuICBwcml2YXRlIGNhcHR1cmVTdGF0dXM/OiBDYXB0dXJlSGlzdG9yeVN0YXR1cztcbiAgLyoqIE9wYXF1ZSBlcnJvciBpZGVudGl0aWVzIG9ubHk6IG5vIHJhdyBlbnRyeSBvciBhZGFwdGVyIGVycm9yIGlzIGVudW1lcmFibGUgb24gdGhlIHRyYW5zcG9ydCBlcnJvci4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbnZvY2F0aW9uRmFpbHVyZXMgPSBuZXcgV2Vha01hcDxvYmplY3QsIEludm9jYXRpb25GYWlsdXJlPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZWQ6IFJlc29sdmVkUmVjb3JkU2luaykge1xuICAgIGlmIChyZXNvbHZlZC5vbkZhaWx1cmUgPT09ICdmYWlsJykgdGhpcy5zdG9wcGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IGFkYXB0ZXIgPSByZXNvbHZlZC5hZGFwdGVyO1xuICAgIGNvbnN0IGhhbmRlZCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMuZW50cmllcyArPSAxO1xuICAgIH07XG4gICAgdGhpcy5zaW5rID0ge1xuICAgICAgb3BlbmVkOiAoZW50cnkpID0+IHtcbiAgICAgICAgaGFuZGVkKCk7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnJ1bGU7XG4gICAgICAgIGNvbnN0IHNlcnZlZCA9IHtcbiAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICBpbml0aWFsU3RhdGU6IHJ1bGUgPyBydWxlLnJldGFpblN0YXRlKGVudHJ5LmluaXRpYWxTdGF0ZSwgTE9HX1BMQUNFSE9MREVSKSA6IGVudHJ5LmluaXRpYWxTdGF0ZSxcbiAgICAgICAgICAuLi4oZW50cnkubWV0YSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IG1ldGE6IHRoaXMuc2VydmUoZW50cnkubWV0YSkgfSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLmludm9rZSh7IC4uLnNlcnZlZCwga2luZDogJ29wZW5lZCcgfSwgKCkgPT4gYWRhcHRlci5vcGVuZWQoc2VydmVkKSwgcnVsZSk7XG4gICAgICB9LFxuICAgICAgY29tbWl0OiAoZW50cnkpID0+IHtcbiAgICAgICAgaGFuZGVkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmludm9rZSh7IC4uLmVudHJ5LCBraW5kOiAnY29tbWl0JyB9LCAoKSA9PiBhZGFwdGVyLmNvbW1pdChlbnRyeSksIHRoaXMucnVsZSk7XG4gICAgICB9LFxuICAgICAgbm90ZTogKGVudHJ5KSA9PiB7XG4gICAgICAgIGhhbmRlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnZva2UoXG4gICAgICAgICAgeyBhZGRyZXNzOiBlbnRyeS5hZGRyZXNzLCBhdDogZW50cnkuYXQsIGtpbmQ6ICdub3RlJywgbm90ZTogZW50cnkua2luZCwgZGF0YTogZW50cnkuZGF0YSB9LFxuICAgICAgICAgICgpID0+IGFkYXB0ZXIubm90ZShlbnRyeSksXG4gICAgICAgICAgdGhpcy5ydWxlLFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGNsb3NlZDogKGVudHJ5KSA9PiB7XG4gICAgICAgIGhhbmRlZCgpO1xuICAgICAgICBjb25zdCBzZXJ2ZWQgPSB7IC4uLmVudHJ5LCAuLi4oZW50cnkubWV0YSA9PT0gdW5kZWZpbmVkID8ge30gOiB7IG1ldGE6IHRoaXMuc2VydmUoZW50cnkubWV0YSkgfSkgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlKHsgLi4uc2VydmVkLCBraW5kOiAnY2xvc2VkJyB9LCAoKSA9PiBhZGFwdGVyLmNsb3NlZChzZXJ2ZWQpLCB0aGlzLnJ1bGUpO1xuICAgICAgfSxcbiAgICAgIG9uRmFpbHVyZTogKGZhaWx1cmUpID0+IHtcbiAgICAgICAgY29uc3QgaW52b2NhdGlvbiA9XG4gICAgICAgICAgZmFpbHVyZS5lcnJvciAhPT0gbnVsbCAmJiAodHlwZW9mIGZhaWx1cmUuZXJyb3IgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBmYWlsdXJlLmVycm9yID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgPyB0aGlzLmludm9jYXRpb25GYWlsdXJlcy5nZXQoZmFpbHVyZS5lcnJvcilcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAvLyBCZWZvcmUgYWRtaXNzaW9uIChlLmcuIGEgbWV0YS1jb3B5IHJlZnVzYWwpLCBubyBkaXNwYXRjaGVkIHNlcnZlZCBlbnRyeSBleGlzdHMuIENvdW50IHRoZSBsb3NzIGFuZFxuICAgICAgICAvLyBhcHBseSB0aGUgZmFpbHVyZSBtb2RlLCBidXQgbmV2ZXIgaGFuZCB0aGUgYWRhcHRlciBGb290dHJhY2UncyBvcmlnaW5hbCwgdW5zZXJ2ZWQgZW50cnkuXG4gICAgICAgIGlmIChpbnZvY2F0aW9uID09PSB1bmRlZmluZWQpIHRoaXMubG9zdChmYWlsdXJlLmVycm9yLCB1bmRlZmluZWQsIHRoaXMuZXJyb3JWaWV3KGZhaWx1cmUuZXJyb3IsIHRoaXMucnVsZSkpO1xuICAgICAgICBlbHNlIHRoaXMubG9zdChpbnZvY2F0aW9uLmNhdXNlLCBpbnZvY2F0aW9uLmVudHJ5LCBpbnZvY2F0aW9uLnZpZXcpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIENhcHR1cmUgdGhlIHNlcnZlZCBlbnRyeSBub3c7IGFuIGFzeW5jaHJvbm91cyBmYWlsdXJlIGtlZXBzIHRoaXMgbGVnJ3MgcnVsZSwgbm90IGEgbGF0ZXIgcmVzdW1lJ3MgcnVsZS4gKi9cbiAgcHJpdmF0ZSBpbnZva2UoZW50cnk6IFJlY29yZEVudHJ5LCBjYWxsOiAoKSA9PiB1bmtub3duLCBydWxlOiBSZWRhY3Rpb25SdWxlIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gICAgY29uc3QgZmFpbGVkID0gKGNhdXNlOiB1bmtub3duKTogbmV2ZXIgPT4ge1xuICAgICAgY29uc3QgZW52ZWxvcGUgPSBuZXcgRXJyb3IoJ3JlY29yZCBzaW5rOiBhZGFwdGVyIGludm9jYXRpb24gZmFpbGVkJyk7XG4gICAgICB0aGlzLmludm9jYXRpb25GYWlsdXJlcy5zZXQoZW52ZWxvcGUsIHsgZW50cnksIGNhdXNlLCB2aWV3OiB0aGlzLmVycm9yVmlldyhjYXVzZSwgcnVsZSkgfSk7XG4gICAgICB0aHJvdyBlbnZlbG9wZTtcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXR1cm5lZCA9IGNhbGwoKTtcbiAgICAgIC8vIFZvaWQgYWRhcHRlcnMga2VlcCB0aGVpciBzeW5jaHJvbm91cyBwYXRoOyBvbmx5IGFuIG9iamVjdC9mdW5jdGlvbiBjYW4gYmUgYSB0aGVuYWJsZS4gc2V0dGxlT25jZVxuICAgICAgLy8gb2JzZXJ2ZXMgbmF0aXZlIHByb21pc2VzIHRocm91Z2ggUHJvbWlzZS5wcm90b3R5cGUudGhlbiBhbmQgZ3VhcmRzIGhvc3RpbGUgdGhlbmFibGVzIHRvby5cbiAgICAgIGlmIChyZXR1cm5lZCA9PT0gbnVsbCB8fCAodHlwZW9mIHJldHVybmVkICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcmV0dXJuZWQgIT09ICdmdW5jdGlvbicpKSByZXR1cm4gcmV0dXJuZWQ7XG4gICAgICBpZiAoIXRoaXMucmVzb2x2ZWQuY2FwdHVyZSkgcmV0dXJuIHNldHRsZU9uY2UocmV0dXJuZWQsICgpID0+IHVuZGVmaW5lZCwgZmFpbGVkKTtcbiAgICAgIHRoaXMuY2FwdHVyZVBlbmRpbmcrKztcbiAgICAgIHJldHVybiBzZXR0bGVPbmNlKFxuICAgICAgICByZXR1cm5lZCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FwdHVyZVBlbmRpbmctLTtcbiAgICAgICAgfSxcbiAgICAgICAgKGNhdXNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYXB0dXJlUGVuZGluZy0tO1xuICAgICAgICAgIHJldHVybiBmYWlsZWQoY2F1c2UpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChjYXVzZSkge1xuICAgICAgcmV0dXJuIGZhaWxlZChjYXVzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEEgc2luayBlcnJvciBpcyB0aGUgZGlhZ25vc3RpYyBlcnJvcnMucmVjb3JkU2lua0Vycm9yOyByYXcgY2F1c2VzIGJlbG9uZyBvbmx5IHRvIHRoZSBjYWxsZXIncyBleGNlcHRpb24uICovXG4gIHByaXZhdGUgZXJyb3JWaWV3KGVycm9yOiB1bmtub3duLCBydWxlOiBSZWRhY3Rpb25SdWxlIHwgdW5kZWZpbmVkKTogU2lua0Vycm9yVmlldyB7XG4gICAgY29uc3QgdGV4dCA9IHRocm93blRleHQoZXJyb3IpO1xuICAgIGNvbnN0IHJldGFpbmVkID0gcnVsZVxuICAgICAgPyBydWxlLnJldGFpblN0YWdlRXJyb3IoZXJyb3IsIHRleHQsIHJ1bGUucmV0YWluRGlhZ25vc3RpYyhbJ2Vycm9ycycsICdyZWNvcmRTaW5rRXJyb3InXSwgdGV4dCkpXG4gICAgICA6IHsgbWVzc2FnZTogdGV4dCwgc3RydWN0dXJlZEVycm9yOiBleHRyYWN0RXJyb3JJbmZvKGVycm9yKSB9O1xuICAgIGNvbnN0IHNlcnZlZCA9IHsgLi4ucmV0YWluZWQuc3RydWN0dXJlZEVycm9yIH07XG4gICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShzZXJ2ZWQsICdyYXcnKTtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogcmV0YWluZWQubWVzc2FnZSxcbiAgICAgIGVycm9yOiBzZXJ2ZWQsXG4gICAgICBtYXNrZWQ6IHJldGFpbmVkLm1lc3NhZ2UgIT09IHRleHQgfHwgcmV0YWluZWQuc3RydWN0dXJlZEVycm9yLnJhdyAhPT0gZXJyb3IsXG4gICAgICBydWxlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQSBzYW1lLWV4ZWN1dG9yIHJlc3VtZSBzdGFydHMgYSBuZXcgbGVnIG9uIHRoZSBzYW1lIHJlY29yZDogdGhlIGNvdW50cyBnbyBvbiAob25lIGxvZywgb25lIHJlY29yZCksIGJ1dCB0aGVcbiAgICogZmFpbHVyZSBtb2RlIGlzIHRoZSBMRUcncyDigJQgYSBsb3NzIGluIGFuIGVhcmxpZXIgbGVnICh3aGljaCBhbHJlYWR5IGZhaWxlZCB0aGF0IGxlZykgZG9lcyBub3Qgc3RvcCB0aGlzIG9uZSDigJRcbiAgICogYW5kIHRoZSBkZXYtbW9kZSB3YXJuaW5nIG1heSBmaXJlIGFnYWluLlxuICAgKi9cbiAgYmVnaW5MZWcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzb2x2ZWQub25GYWlsdXJlID09PSAnZmFpbCcpIHRoaXMuc3RvcHBlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLmZhaWx1cmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy53YXJuZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhcHR1cmVTdGF0dXMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVGhlIGxlZydzIHJlZGFjdGlvbiBydWxlIOKAlCBhIHJlc3VtZSBidWlsZHMgYSBuZXcgb25lOyB0aGUgbmV4dCBgb3BlbmVkYCAvIGBjbG9zZWRgIGlzIHNlcnZlZCB1bmRlciBpdC4gKi9cbiAgdXNlUnVsZShydWxlOiBSZWRhY3Rpb25SdWxlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5ydWxlID0gcnVsZTtcbiAgfVxuXG4gIC8qKiBBYm9ydHMgYXQgdGhlIGZpcnN0IGxvc3MgdW5kZXIgYG9uRmFpbHVyZTogJ2ZhaWwnYDsgYWJzZW50IG90aGVyd2lzZS4gKi9cbiAgZ2V0IHN0b3BTaWduYWwoKTogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0b3BwZXI/LnNpZ25hbDtcbiAgfVxuXG4gIGdldCBmbHVzaE1vZGUoKTogUmVjb3JkU2lua0ZsdXNoTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWQuZmx1c2g7XG4gIH1cblxuICAvKiogVGhlIGxvc3MgdGhhdCBmYWlscyB0aGUgcnVuIHVuZGVyIGAnZmFpbCdgOyBhYnNlbnQgd2hpbGUgbm90aGluZyB3YXMgbG9zdCAoYW5kIGFsd2F5cyB1bmRlciBgJ3JlcG9ydCdgKS4gKi9cbiAgZ2V0IGZhdGFsKCk6IFJlY29yZFNpbmtFcnJvciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRzKCk6IFJlY29yZFNpbmtTdGF0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJpZXM6IHRoaXMuZW50cmllcyxcbiAgICAgIGZhaWxlZDogdGhpcy5mYWlsZWQsXG4gICAgICAuLi4odGhpcy5sYXN0RXJyb3IgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBsYXN0RXJyb3I6IHRoaXMubGFzdEVycm9yIH0pLFxuICAgICAgLi4uKHRoaXMuY2FwdHVyZVN0YXR1cyAmJiB7IGNhcHR1cmU6IHRoaXMuY2FwdHVyZVN0YXR1cyB9KSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGNhcHR1cmVPcHRpb25zKCk6IENhcHR1cmVIaXN0b3J5T3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWQuY2FwdHVyZTtcbiAgfVxuXG4gIGdldCBwZW5kaW5nQ2FwdHVyZURlbGl2ZXJpZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jYXB0dXJlUGVuZGluZztcbiAgfVxuXG4gIGNhcHR1cmVSZXN1bHQocmVzdWx0OiBDYXB0dXJlSGlzdG9yeVN0YXR1cyk6IHZvaWQge1xuICAgIHRoaXMuY2FwdHVyZVN0YXR1cyA9IE9iamVjdC5mcmVlemUocmVzdWx0KTtcbiAgfVxuXG4gIC8qKiBTYW1lIHNlcnZlZCBzZWVkIGFzIG9wZW5lZDsgYSBoaXN0b3J5IGRpZ2VzdCBuZXZlciBzZWVzIGEgc2VlZGVkIHBvbGljeSBzZWNyZXQuICovXG4gIGNhcHR1cmVJbml0aWFsU3RhdGUoc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLnJ1bGUgPyAodGhpcy5ydWxlLnJldGFpblN0YXRlKHN0YXRlLCBMT0dfUExBQ0VIT0xERVIpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA6IHN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEF3YWl0IHRoZSBhZGFwdGVyJ3MgYGZsdXNoKClgLCBhdCBtb3N0IGB0aW1lb3V0TXNgIHdoZW4gZ2l2ZW4uIEEgZmx1c2ggdGhhdCB0aHJvd3Mgb3IgcmVqZWN0cyBpcyBhIGxvc3NcbiAgICogKGNvdW50ZWQsIGFuZCBmYXRhbCB1bmRlciBgJ2ZhaWwnYCk7IG9uZSBzdGlsbCBydW5uaW5nIGF0IHRoZSBkZWFkbGluZSBpcyBgcGVuZGluZ2AgYW5kIGtlZXBzIHJ1bm5pbmcg4oCUIGFuZCxcbiAgICogd2l0aCBgcGVuZGluZ0lzTG9zc2AgKHRoZSBydW4ncyBvd24gZmx1c2gpLCBjb3VudGVkIGFzIGEgbG9zcyB0b28sIHNvIGEgZmx1c2ggdGhhdCBuZXZlciBzZXR0bGVzIGNhbm5vdCBob2xkIGFcbiAgICogcnVuIG9wZW4sIGFuZCBjYW5ub3QgcGFzcyBmb3Igb25lIHRoYXQgbGFuZGVkLiBOb3RoaW5nIGhlcmUgdGhyb3dzOiBhIGhvc3RpbGUgYWRhcHRlciAoYSB0aHJvd2luZyBgZmx1c2hgXG4gICAqIGdldHRlciwgYSBwcm9taXNlIHdpdGggaXRzIG93biBgdGhlbmApIGlzIGEgbG9zcywgbmV2ZXIgdGhlIHJ1bidzIGVycm9yLlxuICAgKi9cbiAgYXN5bmMgZmx1c2godGltZW91dE1zPzogbnVtYmVyLCBwZW5kaW5nSXNMb3NzID0gZmFsc2UpOiBQcm9taXNlPFJlY29yZEZsdXNoUmVzdWx0PiB7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMucmVzb2x2ZWQuYWRhcHRlcjtcbiAgICBjb25zdCBydWxlID0gdGhpcy5ydWxlO1xuICAgIGxldCBzZXR0bGVkOiBQcm9taXNlPFJlY29yZEZsdXNoUmVzdWx0PjtcbiAgICBsZXQgZ2l2ZW5VcCA9IGZhbHNlOyAvLyBhIGZsdXNoIGFscmVhZHkgY291bnRlZCBhcyBhIGxvc3MgYXQgdGhlIGRlYWRsaW5lIGlzIG5vdCBjb3VudGVkIGFnYWluIHdoZW4gaXQgcmVqZWN0c1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmbHVzaDogdW5rbm93biA9IGFkYXB0ZXIuZmx1c2g7IC8vIHJlYWQgb25jZTogYSBnZXR0ZXIgcnVucyBvbmNlLCBpbnNpZGUgdGhlIGd1YXJkXG4gICAgICBpZiAodHlwZW9mIGZsdXNoICE9PSAnZnVuY3Rpb24nKSByZXR1cm4geyBkb25lOiB0cnVlLCBmYWlsZWQ6IGZhbHNlLCBwZW5kaW5nOiBmYWxzZSB9O1xuICAgICAgc2V0dGxlZCA9IHNldHRsZU9uY2UoXG4gICAgICAgIGZsdXNoLmNhbGwoYWRhcHRlciksXG4gICAgICAgICgpOiBSZWNvcmRGbHVzaFJlc3VsdCA9PiAoeyBkb25lOiB0cnVlLCBmYWlsZWQ6IGZhbHNlLCBwZW5kaW5nOiBmYWxzZSB9KSxcbiAgICAgICAgKGVycm9yKTogUmVjb3JkRmx1c2hSZXN1bHQgPT4ge1xuICAgICAgICAgIGlmICghZ2l2ZW5VcCkgdGhpcy5sb3N0KGVycm9yLCB1bmRlZmluZWQsIHRoaXMuZXJyb3JWaWV3KGVycm9yLCBydWxlKSk7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIGZhaWxlZDogdHJ1ZSwgcGVuZGluZzogZmFsc2UgfTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMubG9zdChlcnJvciwgdW5kZWZpbmVkLCB0aGlzLmVycm9yVmlldyhlcnJvciwgcnVsZSkpO1xuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIGZhaWxlZDogdHJ1ZSwgcGVuZGluZzogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKHRpbWVvdXRNcyA9PT0gdW5kZWZpbmVkIHx8ICFOdW1iZXIuaXNGaW5pdGUodGltZW91dE1zKSkgcmV0dXJuIHNldHRsZWQ7XG4gICAgbGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwZW5kaW5nID0gbmV3IFByb21pc2U8UmVjb3JkRmx1c2hSZXN1bHQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCBmYWlsZWQ6IGZhbHNlLCBwZW5kaW5nOiB0cnVlIH0pLCBNYXRoLm1heCgwLCB0aW1lb3V0TXMpKTtcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtzZXR0bGVkLCBwZW5kaW5nXSk7XG4gICAgICBpZiAocmVzdWx0LnBlbmRpbmcgJiYgcGVuZGluZ0lzTG9zcykge1xuICAgICAgICBnaXZlblVwID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYHJlY29yZCBzaW5rOiBmbHVzaCgpIGRpZCBub3Qgc2V0dGxlIHdpdGhpbiAke01hdGgubWF4KDAsIHRpbWVvdXRNcyl9bXNgKTtcbiAgICAgICAgdGhpcy5sb3N0KGVycm9yLCB1bmRlZmluZWQsIHRoaXMuZXJyb3JWaWV3KGVycm9yLCBydWxlKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaGUgbWV0YSBhcyBzZXJ2ZWQ6IGEgYm91bmRhcnkgcmVjb3JkLCBzY3J1YmJlZCBieSBrZXkgbmFtZSBhdCBldmVyeSBkZXB0aCAoYW4gaW5lcnQgcnVsZSBjb3BpZXMgbm90aGluZykuICovXG4gIHNlcnZlKG1ldGE6IE1ldGEpOiBNZXRhIHtcbiAgICByZXR1cm4gdGhpcy5ydWxlID8gdGhpcy5ydWxlLnJldGFpbkJvdW5kYXJ5KG1ldGEsIExPR19QTEFDRUhPTERFUikgOiBtZXRhO1xuICB9XG5cbiAgLyoqIE9uZSBsb3NzOiBjb3VudGVkLCB3YXJuZWQgb25jZSBwZXIgcnVuLCB0b2xkIHdpdGggYSBzYWZlIGRpc3BhdGNoZWQgZW50cnkgd2hlbiBhdmFpbGFibGUsIGZhdGFsIHVuZGVyICdmYWlsJy4gKi9cbiAgcHJpdmF0ZSBsb3N0KGVycm9yOiB1bmtub3duLCBlbnRyeTogUmVjb3JkRW50cnkgfCB1bmRlZmluZWQsIHZpZXc6IFNpbmtFcnJvclZpZXcpOiB2b2lkIHtcbiAgICB0aGlzLmZhaWxlZCArPSAxO1xuICAgIGNvbnN0IHRleHQgPSB2aWV3LnRleHQ7XG4gICAgdGhpcy5sYXN0RXJyb3IgPSB0ZXh0O1xuICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhdGhpcy53YXJuZWQpIHtcbiAgICAgIHRoaXMud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbZm9vdHByaW50XSByZWNvcmQgc2luazogYW4gZW50cnkgd2FzIG5vdCBzdG9yZWQgKCR7dGV4dH0pLiBUaGUgcnVuIGdvZXMgb247IGAgK1xuICAgICAgICAgICdnZXRTbmFwc2hvdCgpLnNpbmsgY291bnRzIGV2ZXJ5IGxvc3MuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIFRoZSBmYWlsdXJlIG1vZGUgZmlyc3Q6IG5vdGhpbmcgdGhlIGFkYXB0ZXIncyBvd24gbGlzdGVuZXIgZG9lcyBjYW4gc2tpcCBpdC5cbiAgICBpZiAodGhpcy5zdG9wcGVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5mYWlsdXJlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZmFpbHVyZSA9IG5ldyBSZWNvcmRTaW5rRXJyb3IoYHJlY29yZCBzaW5rOiBhbiBlbnRyeSB3YXMgbm90IHN0b3JlZCDigJQgJHt0ZXh0fWAsIGVycm9yKTtcbiAgICAgIGlmICh2aWV3Lm1hc2tlZCkge1xuICAgICAgICAvLyBUaGUgY2FsbGVyIGtlZXBzIHRoZSByZWFsIGNhdXNlLCBidXQgb2JzZXJ2ZXJzIG9mIHRoaXMgbmV3IHdyYXBwZXIgbXVzdCBpbmhlcml0IGl0cyByZW1lbWJlcmVkIG1hc2suXG4gICAgICAgIHZpZXcucnVsZT8ucmV0YWluU3RhZ2VFcnJvcih0aGlzLmZhaWx1cmUsIHRoaXMuZmFpbHVyZS5tZXNzYWdlLCBTQ09QRV9QTEFDRUhPTERFUik7XG4gICAgICAgIGlmICh0aGlzLnJ1bGUgIT09IHZpZXcucnVsZSkgdGhpcy5ydWxlPy5yZXRhaW5TdGFnZUVycm9yKHRoaXMuZmFpbHVyZSwgdGhpcy5mYWlsdXJlLm1lc3NhZ2UsIFNDT1BFX1BMQUNFSE9MREVSKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RvcHBlci5hYm9ydCh0aGlzLmZhaWx1cmUpO1xuICAgIH1cbiAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCkgdGVsbEFkYXB0ZXIodGhpcy5yZXNvbHZlZC5hZGFwdGVyLCB7IGVudHJ5LCBlcnJvcjogdmlldy5lcnJvciB9KTtcbiAgfVxufVxuXG4vKiogVGhlIGFkYXB0ZXIncyBvd24gYG9uRmFpbHVyZWAsIGlzb2xhdGVkOiBhIHRocm93aW5nIGdldHRlciwgYSB0aHJvdyBvciBhIHJlamVjdGlvbiB0aGVyZSBjaGFuZ2VzIG5vdGhpbmcuICovXG5mdW5jdGlvbiB0ZWxsQWRhcHRlcihhZGFwdGVyOiBSZWNvcmRTaW5rLCBmYWlsdXJlOiB7IHJlYWRvbmx5IGVudHJ5OiBSZWNvcmRFbnRyeTsgcmVhZG9ubHkgZXJyb3I6IHVua25vd24gfSk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGxpc3RlbmVyOiB1bmtub3duID0gYWRhcHRlci5vbkZhaWx1cmU7XG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuO1xuICAgIHNldHRsZU9uY2UoXG4gICAgICBsaXN0ZW5lci5jYWxsKGFkYXB0ZXIsIGZhaWx1cmUpLFxuICAgICAgKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgKCkgPT4gdW5kZWZpbmVkLFxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEEgbGlzdGVuZXIgdGhhdCBmYWlscyBpcyB0aGUgYWRhcHRlcidzIG93biBidXNpbmVzczogdGhlIGxvc3MgaXMgYWxyZWFkeSBjb3VudGVkLlxuICB9XG59XG4iXX0=
@@ -1,9 +1,10 @@
1
1
  import { validateAbsentEntries } from '../capture/absentEntries.js';
2
- import { copyHistoryData, historyDigest } from '../capture/historyData.js';
2
+ import { copyHistoryData, historyDigest, historyEvidence } from '../capture/historyData.js';
3
3
  import { historyNote } from '../capture/historyNote.js';
4
4
  import { copyHistoryReceipt, copyHistoryTarget } from '../capture/historyTarget.js';
5
5
  import { CAPTURE_HISTORY_NOTE, CAPTURE_RECEIPT_NOTE } from '../capture/historyTypes.js';
6
6
  import { ownData } from '../capture/noteShape.js';
7
+ import { storedReadSources } from '../capture/storedReadSources.js';
7
8
  /** One exact pair only; nothing here interprets commits, causal links or business values. */
8
9
  function capturePair(log, runId, maxBytes) {
9
10
  const evidence = log.notes.filter((n) => n.kind === CAPTURE_HISTORY_NOTE);
@@ -64,12 +65,7 @@ export async function admitStoredCapture(log, runId, maxBytes) {
64
65
  if (typeof pair === 'string')
65
66
  return unknown(pair);
66
67
  const { payload, target, receipt, basis } = pair;
67
- const body = {
68
- capture: payload.capture,
69
- executionTree: payload.executionTree,
70
- ...(payload.recorders !== undefined && { recorders: payload.recorders }),
71
- ...(payload.absent !== undefined && { absent: payload.absent }),
72
- };
68
+ const body = historyEvidence(payload);
73
69
  if ((await historyDigest({ evidence: body, record: basis })) !== target.digest)
74
70
  return unknown('evidence-mismatch');
75
71
  if (!validateAbsentEntries(payload))
@@ -77,6 +73,11 @@ export async function admitStoredCapture(log, runId, maxBytes) {
77
73
  const capture = historyNote(payload.capture, target);
78
74
  if (!capture || capture.limitations.includes('resumed-segment'))
79
75
  return unknown('capture-refused');
76
+ const readSources = capture.version === 2
77
+ ? storedReadSources(payload.readSources, capture, basis.commitLog, basis.initialState, payload.executionTree)
78
+ : undefined;
79
+ if (capture.version === 2 ? !readSources : Object.hasOwn(payload, 'readSources'))
80
+ return unknown('source-evidence-refused');
80
81
  const refusal = captureEnding(log, capture, target) ?? captureEvidence(payload, capture);
81
82
  if (refusal)
82
83
  return unknown(refusal);
@@ -85,6 +86,7 @@ export async function admitStoredCapture(log, runId, maxBytes) {
85
86
  history: Object.freeze({
86
87
  runId,
87
88
  capture,
89
+ ...(readSources && { readSources }),
88
90
  executionTree: payload.executionTree,
89
91
  ...(payload.absent !== undefined ? { absent: payload.absent } : {}),
90
92
  ...(payload.recorders !== undefined ? { recorders: payload.recorders } : {}),
@@ -94,4 +96,4 @@ export async function admitStoredCapture(log, runId, maxBytes) {
94
96
  }),
95
97
  });
96
98
  }
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkQ2FwdHVyZUFkbWlzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL3N0b3JlZENhcHR1cmVBZG1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFcEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFeEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBWWxELDZGQUE2RjtBQUM3RixTQUFTLFdBQVcsQ0FBQyxHQUFjLEVBQUUsS0FBYSxFQUFFLFFBQWdCO0lBQ2xFLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDLENBQUM7SUFDMUUsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLENBQUMsQ0FBQztJQUMxRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07UUFBRSxPQUFPLGlCQUFpQixDQUFDO0lBQy9DLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxtQkFBbUIsQ0FBQztJQUMvRSxNQUFNLE9BQU8sR0FBRyxl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QUNyQixLQUFLO1lBQ0wsT0FBTztZQUNQLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBOEI7WUFDckQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBd0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBK0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEcsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMvRCxPQUFPO1NBQ1IsQ0FBQztLQUNILENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgU3RvcmVkTG9nIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHsgdmFsaWRhdGVBYnNlbnRFbnRyaWVzIH0gZnJvbSAnLi4vY2FwdHVyZS9hYnNlbnRFbnRyaWVzLmpzJztcbmltcG9ydCB7IGNvcHlIaXN0b3J5RGF0YSwgaGlzdG9yeURpZ2VzdCB9IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeURhdGEuanMnO1xuaW1wb3J0IHsgaGlzdG9yeU5vdGUgfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlOb3RlLmpzJztcbmltcG9ydCB7IGNvcHlIaXN0b3J5UmVjZWlwdCwgY29weUhpc3RvcnlUYXJnZXQgfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlUYXJnZXQuanMnO1xuaW1wb3J0IHR5cGUgeyBDYXB0dXJlSGlzdG9yeVJlY2VpcHQsIENhcHR1cmVIaXN0b3J5VGFyZ2V0IH0gZnJvbSAnLi4vY2FwdHVyZS9oaXN0b3J5VHlwZXMuanMnO1xuaW1wb3J0IHsgQ0FQVFVSRV9ISVNUT1JZX05PVEUsIENBUFRVUkVfUkVDRUlQVF9OT1RFIH0gZnJvbSAnLi4vY2FwdHVyZS9oaXN0b3J5VHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBOYXRpdmVDYXB0dXJlTm90ZSB9IGZyb20gJy4uL2NhcHR1cmUvbmF0aXZlQ292ZXJhZ2UuanMnO1xuaW1wb3J0IHsgb3duRGF0YSB9IGZyb20gJy4uL2NhcHR1cmUvbm90ZVNoYXBlLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VTbmFwc2hvdCB9IGZyb20gJy4uL21lbW9yeS9mcmFtZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCB9IGZyb20gJy4vRXhlY3V0aW9uUnVudGltZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0b3JlZENhcHR1cmVSZXN1bHQgfSBmcm9tICcuL3JlYWRTdG9yZWRDYXB0dXJlLmpzJztcblxudHlwZSBQYWlyID0ge1xuICBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgdGFyZ2V0OiBDYXB0dXJlSGlzdG9yeVRhcmdldDtcbiAgcmVjZWlwdDogQ2FwdHVyZUhpc3RvcnlSZWNlaXB0O1xuICBiYXNpczogeyBjb21taXRMb2c6IHJlYWRvbmx5IENvbW1pdEJ1bmRsZVtdOyBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xufTtcblxuLyoqIE9uZSBleGFjdCBwYWlyIG9ubHk7IG5vdGhpbmcgaGVyZSBpbnRlcnByZXRzIGNvbW1pdHMsIGNhdXNhbCBsaW5rcyBvciBidXNpbmVzcyB2YWx1ZXMuICovXG5mdW5jdGlvbiBjYXB0dXJlUGFpcihsb2c6IFN0b3JlZExvZywgcnVuSWQ6IHN0cmluZywgbWF4Qnl0ZXM6IG51bWJlcik6IFBhaXIgfCBzdHJpbmcge1xuICBjb25zdCBldmlkZW5jZSA9IGxvZy5ub3Rlcy5maWx0ZXIoKG4pID0+IG4ua2luZCA9PT0gQ0FQVFVSRV9ISVNUT1JZX05PVEUpO1xuICBjb25zdCByZWNlaXB0cyA9IGxvZy5ub3Rlcy5maWx0ZXIoKG4pID0+IG4ua2luZCA9PT0gQ0FQVFVSRV9SRUNFSVBUX05PVEUpO1xuICBpZiAoIXJlY2VpcHRzLmxlbmd0aCkgcmV0dXJuICdyZWNlaXB0LW1pc3NpbmcnO1xuICBpZiAoZXZpZGVuY2UubGVuZ3RoICE9PSAxIHx8IHJlY2VpcHRzLmxlbmd0aCAhPT0gMSkgcmV0dXJuICdoaXN0b3J5LWFtYmlndW91cyc7XG4gIGNvbnN0IHBheWxvYWQgPSBjb3B5SGlzdG9yeURhdGEoZXZpZGVuY2VbMF0hLmRhdGEsIG1heEJ5dGVzKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgdGFyZ2V0ID0gY29weUhpc3RvcnlUYXJnZXQocGF5bG9hZC50YXJnZXQpO1xuICBpZiAoXG4gICAgIXRhcmdldCB8fFxuICAgIHRhcmdldC5ydW5JZCAhPT0gcnVuSWQgfHxcbiAgICB0YXJnZXQubG9nQWRkcmVzcy5sb2dSdW5JZCAhPT0gcnVuSWQgfHxcbiAgICB0YXJnZXQuY29tbWl0cy5mcm9tICE9PSAwIHx8XG4gICAgdGFyZ2V0LmNvbW1pdHMudG8gIT09IGxvZy5jb21taXRMb2cubGVuZ3RoXG4gIClcbiAgICByZXR1cm4gJ3Njb3BlLW1pc21hdGNoJztcbiAgY29uc3QgcmVjZWlwdCA9IGNvcHlIaXN0b3J5UmVjZWlwdChyZWNlaXB0c1swXSEuZGF0YSwgdGFyZ2V0KTtcbiAgaWYgKCFyZWNlaXB0KSByZXR1cm4gJ3JlY2VpcHQtcmVmdXNlZCc7XG4gIGNvbnN0IGJhc2lzID0gY29weUhpc3RvcnlEYXRhKFxuICAgIHsgY29tbWl0TG9nOiBsb2cuY29tbWl0TG9nLCAuLi4obG9nLmluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHsgaW5pdGlhbFN0YXRlOiBsb2cuaW5pdGlhbFN0YXRlIH0pIH0sXG4gICAgbWF4Qnl0ZXMsXG4gICkgYXMgUGFpclsnYmFzaXMnXTtcbiAgcmV0dXJuIHsgcGF5bG9hZCwgdGFyZ2V0LCByZWNlaXB0LCBiYXNpcyB9O1xufVxuXG5mdW5jdGlvbiBjYXB0dXJlRW5kaW5nKGxvZzogU3RvcmVkTG9nLCBjYXB0dXJlOiBOYXRpdmVDYXB0dXJlTm90ZSwgdGFyZ2V0OiBDYXB0dXJlSGlzdG9yeVRhcmdldCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGV4cGVjdGVkID1cbiAgICBjYXB0dXJlLmJvdW5kYXJ5LnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgPyAnb2snIDogY2FwdHVyZS5ib3VuZGFyeS5zdGF0dXMgPT09ICdwYXVzZWQnID8gJ3BhdXNlZCcgOiAnZmFpbGVkJztcbiAgaWYgKGV4cGVjdGVkICE9PSBsb2cub3V0Y29tZSkgcmV0dXJuICdib3VuZGFyeS1taXNtYXRjaCc7XG4gIGxldCBjbG9zZSA9IC0xO1xuICBsZXQgY2xvc2VzID0gMDtcbiAgbG9nLmVudHJpZXMuZm9yRWFjaCgoZSwgaW5kZXgpID0+IHtcbiAgICBpZiAoZS5raW5kID09PSAnY2xvc2VkJykge1xuICAgICAgY2xvc2UgPSBpbmRleDtcbiAgICAgIGNsb3NlcysrO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IG9ic2VydmF0aW9uID0gbG9nLmVudHJpZXMuZmluZEluZGV4KChlKSA9PiBlLmtpbmQgPT09ICdub3RlJyAmJiBlLm5vdGUgPT09IENBUFRVUkVfSElTVE9SWV9OT1RFKTtcbiAgY29uc3QgYWNrbm93bGVkZ2VtZW50ID0gbG9nLmVudHJpZXMuZmluZEluZGV4KChlKSA9PiBlLmtpbmQgPT09ICdub3RlJyAmJiBlLm5vdGUgPT09IENBUFRVUkVfUkVDRUlQVF9OT1RFKTtcbiAgaWYgKGNsb3NlIDwgMCB8fCBvYnNlcnZhdGlvbiA8PSBjbG9zZSB8fCBhY2tub3dsZWRnZW1lbnQgPD0gb2JzZXJ2YXRpb24pIHJldHVybiAnc2VxdWVuY2UtbWlzbWF0Y2gnO1xuICBpZiAoXG4gICAgY2xvc2VzICE9PSAxIHx8XG4gICAgb3duRGF0YShsb2cubWV0YS5jbG9zZWQsICdydW5JZCcpICE9PSB0YXJnZXQucnVuSWQgfHxcbiAgICBvd25EYXRhKGxvZy5tZXRhLm9wZW5lZCwgJ3J1bklkJykgIT09IHRhcmdldC5ydW5JZFxuICApXG4gICAgcmV0dXJuICdib3VuZGFyeS1taXNtYXRjaCc7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNhcHR1cmVFdmlkZW5jZShwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgY2FwdHVyZTogTmF0aXZlQ2FwdHVyZU5vdGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXBheWxvYWQuZXhlY3V0aW9uVHJlZSB8fCB0eXBlb2YgcGF5bG9hZC5leGVjdXRpb25UcmVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHBheWxvYWQuZXhlY3V0aW9uVHJlZSkpXG4gICAgcmV0dXJuICdldmlkZW5jZS1taXNzaW5nJztcbiAgaWYgKFxuICAgIGNhcHR1cmUuY2hhbm5lbHMuY29udHJvbCA9PT0gJ2NhcHR1cmVkJyAmJlxuICAgICghQXJyYXkuaXNBcnJheShwYXlsb2FkLnJlY29yZGVycykgfHxcbiAgICAgICFwYXlsb2FkLnJlY29yZGVycy5zb21lKChyKSA9PiByPy5jYXB0dXJlPy5ydW5JZCA9PT0gY2FwdHVyZS5ydW5JZCAmJiByLmNhcHR1cmUuY29udHJvbCA9PT0gJ2NhcHR1cmVkJykpXG4gIClcbiAgICByZXR1cm4gJ3JlY29yZGVyLWV2aWRlbmNlLW1pc3NpbmcnO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogQGludGVybmFsIEVuZ2luZS1tZXRhZGF0YSBhZG1pc3Npb24gYWZ0ZXIgRm9vdHRyYWNlJ3MgZ2VuZXJpYyByZWNvcmQgdmFsaWRhdGlvbi4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZG1pdFN0b3JlZENhcHR1cmUoXG4gIGxvZzogU3RvcmVkTG9nLFxuICBydW5JZDogc3RyaW5nLFxuICBtYXhCeXRlczogbnVtYmVyLFxuKTogUHJvbWlzZTxTdG9yZWRDYXB0dXJlUmVzdWx0PiB7XG4gIGNvbnN0IHVua25vd24gPSAocmVhc29uOiBzdHJpbmcpOiBTdG9yZWRDYXB0dXJlUmVzdWx0ID0+ICh7IHN0YXR1czogJ3Vua25vd24nLCByZWFzb24gfSk7XG4gIGNvbnN0IHBhaXIgPSBjYXB0dXJlUGFpcihsb2csIHJ1bklkLCBtYXhCeXRlcyk7XG4gIGlmICh0eXBlb2YgcGFpciA9PT0gJ3N0cmluZycpIHJldHVybiB1bmtub3duKHBhaXIpO1xuICBjb25zdCB7IHBheWxvYWQsIHRhcmdldCwgcmVjZWlwdCwgYmFzaXMgfSA9IHBhaXI7XG4gIGNvbnN0IGJvZHkgPSB7XG4gICAgY2FwdHVyZTogcGF5bG9hZC5jYXB0dXJlLFxuICAgIGV4ZWN1dGlvblRyZWU6IHBheWxvYWQuZXhlY3V0aW9uVHJlZSxcbiAgICAuLi4ocGF5bG9hZC5yZWNvcmRlcnMgIT09IHVuZGVmaW5lZCAmJiB7IHJlY29yZGVyczogcGF5bG9hZC5yZWNvcmRlcnMgfSksXG4gICAgLi4uKHBheWxvYWQuYWJzZW50ICE9PSB1bmRlZmluZWQgJiYgeyBhYnNlbnQ6IHBheWxvYWQuYWJzZW50IH0pLFxuICB9O1xuICBpZiAoKGF3YWl0IGhpc3RvcnlEaWdlc3QoeyBldmlkZW5jZTogYm9keSwgcmVjb3JkOiBiYXNpcyB9KSkgIT09IHRhcmdldC5kaWdlc3QpIHJldHVybiB1bmtub3duKCdldmlkZW5jZS1taXNtYXRjaCcpO1xuICBpZiAoIXZhbGlkYXRlQWJzZW50RW50cmllcyhwYXlsb2FkKSkgcmV0dXJuIHVua25vd24oJ2Fic2VudC1ldmlkZW5jZS1yZWZ1c2VkJyk7XG4gIGNvbnN0IGNhcHR1cmUgPSBoaXN0b3J5Tm90ZShwYXlsb2FkLmNhcHR1cmUsIHRhcmdldCk7XG4gIGlmICghY2FwdHVyZSB8fCBjYXB0dXJlLmxpbWl0YXRpb25zLmluY2x1ZGVzKCdyZXN1bWVkLXNlZ21lbnQnKSkgcmV0dXJuIHVua25vd24oJ2NhcHR1cmUtcmVmdXNlZCcpO1xuICBjb25zdCByZWZ1c2FsID0gY2FwdHVyZUVuZGluZyhsb2csIGNhcHR1cmUsIHRhcmdldCkgPz8gY2FwdHVyZUV2aWRlbmNlKHBheWxvYWQsIGNhcHR1cmUpO1xuICBpZiAocmVmdXNhbCkgcmV0dXJuIHVua25vd24ocmVmdXNhbCk7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBzdGF0dXM6ICdhY2tub3dsZWRnZWQnLFxuICAgIGhpc3Rvcnk6IE9iamVjdC5mcmVlemUoe1xuICAgICAgcnVuSWQsXG4gICAgICBjYXB0dXJlLFxuICAgICAgZXhlY3V0aW9uVHJlZTogcGF5bG9hZC5leGVjdXRpb25UcmVlIGFzIFN0YWdlU25hcHNob3QsXG4gICAgICAuLi4ocGF5bG9hZC5hYnNlbnQgIT09IHVuZGVmaW5lZCA/IHsgYWJzZW50OiBwYXlsb2FkLmFic2VudCBhcyByZWFkb25seSAocmVhZG9ubHkgc3RyaW5nW10pW10gfSA6IHt9KSxcbiAgICAgIC4uLihwYXlsb2FkLnJlY29yZGVycyAhPT0gdW5kZWZpbmVkID8geyByZWNvcmRlcnM6IHBheWxvYWQucmVjb3JkZXJzIGFzIFJlY29yZGVyU25hcHNob3RbXSB9IDoge30pLFxuICAgICAgY29tbWl0TG9nOiBiYXNpcy5jb21taXRMb2csXG4gICAgICAuLi4oYmFzaXMuaW5pdGlhbFN0YXRlICYmIHsgaW5pdGlhbFN0YXRlOiBiYXNpcy5pbml0aWFsU3RhdGUgfSksXG4gICAgICByZWNlaXB0LFxuICAgIH0pLFxuICB9KTtcbn1cbiJdfQ==
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkQ2FwdHVyZUFkbWlzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL3N0b3JlZENhcHR1cmVBZG1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXBGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQVlwRSw2RkFBNkY7QUFDN0YsU0FBUyxXQUFXLENBQUMsR0FBYyxFQUFFLEtBQWEsRUFBRSxRQUFnQjtJQUNsRSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzFFLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUFDLENBQUM7SUFDMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQUUsT0FBTyxpQkFBaUIsQ0FBQztJQUMvQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFN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QUMsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pGLElBQUksT0FBTztRQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNuQixNQUFNLEVBQUUsY0FBYztRQUN0QixPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNyQixLQUFLO1lBQ0wsT0FBTztZQUNQLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNuQyxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQThCO1lBQ3JELEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQXdDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JHLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQStCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xHLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0QsT0FBTztTQUNSLENBQUM7S0FDSCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUsIFN0b3JlZExvZyB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB7IHZhbGlkYXRlQWJzZW50RW50cmllcyB9IGZyb20gJy4uL2NhcHR1cmUvYWJzZW50RW50cmllcy5qcyc7XG5pbXBvcnQgeyBjb3B5SGlzdG9yeURhdGEsIGhpc3RvcnlEaWdlc3QsIGhpc3RvcnlFdmlkZW5jZSB9IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeURhdGEuanMnO1xuaW1wb3J0IHsgaGlzdG9yeU5vdGUgfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlOb3RlLmpzJztcbmltcG9ydCB7IGNvcHlIaXN0b3J5UmVjZWlwdCwgY29weUhpc3RvcnlUYXJnZXQgfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlUYXJnZXQuanMnO1xuaW1wb3J0IHR5cGUgeyBDYXB0dXJlSGlzdG9yeVJlY2VpcHQsIENhcHR1cmVIaXN0b3J5VGFyZ2V0IH0gZnJvbSAnLi4vY2FwdHVyZS9oaXN0b3J5VHlwZXMuanMnO1xuaW1wb3J0IHsgQ0FQVFVSRV9ISVNUT1JZX05PVEUsIENBUFRVUkVfUkVDRUlQVF9OT1RFIH0gZnJvbSAnLi4vY2FwdHVyZS9oaXN0b3J5VHlwZXMuanMnO1xuaW1wb3J0IHsgb3duRGF0YSB9IGZyb20gJy4uL2NhcHR1cmUvbm90ZVNoYXBlLmpzJztcbmltcG9ydCB0eXBlIHsgTmF0aXZlQ2FwdHVyZU9ic2VydmF0aW9uIH0gZnJvbSAnLi4vY2FwdHVyZS9yZWFkU291cmNlcy5qcyc7XG5pbXBvcnQgeyBzdG9yZWRSZWFkU291cmNlcyB9IGZyb20gJy4uL2NhcHR1cmUvc3RvcmVkUmVhZFNvdXJjZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZVNuYXBzaG90IH0gZnJvbSAnLi4vbWVtb3J5L2ZyYW1lVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90IH0gZnJvbSAnLi9FeGVjdXRpb25SdW50aW1lLmpzJztcbmltcG9ydCB0eXBlIHsgU3RvcmVkQ2FwdHVyZVJlc3VsdCB9IGZyb20gJy4vcmVhZFN0b3JlZENhcHR1cmUuanMnO1xuXG50eXBlIFBhaXIgPSB7XG4gIHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB0YXJnZXQ6IENhcHR1cmVIaXN0b3J5VGFyZ2V0O1xuICByZWNlaXB0OiBDYXB0dXJlSGlzdG9yeVJlY2VpcHQ7XG4gIGJhc2lzOiB7IGNvbW1pdExvZzogcmVhZG9ubHkgQ29tbWl0QnVuZGxlW107IGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG59O1xuXG4vKiogT25lIGV4YWN0IHBhaXIgb25seTsgbm90aGluZyBoZXJlIGludGVycHJldHMgY29tbWl0cywgY2F1c2FsIGxpbmtzIG9yIGJ1c2luZXNzIHZhbHVlcy4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVQYWlyKGxvZzogU3RvcmVkTG9nLCBydW5JZDogc3RyaW5nLCBtYXhCeXRlczogbnVtYmVyKTogUGFpciB8IHN0cmluZyB7XG4gIGNvbnN0IGV2aWRlbmNlID0gbG9nLm5vdGVzLmZpbHRlcigobikgPT4gbi5raW5kID09PSBDQVBUVVJFX0hJU1RPUllfTk9URSk7XG4gIGNvbnN0IHJlY2VpcHRzID0gbG9nLm5vdGVzLmZpbHRlcigobikgPT4gbi5raW5kID09PSBDQVBUVVJFX1JFQ0VJUFRfTk9URSk7XG4gIGlmICghcmVjZWlwdHMubGVuZ3RoKSByZXR1cm4gJ3JlY2VpcHQtbWlzc2luZyc7XG4gIGlmIChldmlkZW5jZS5sZW5ndGggIT09IDEgfHwgcmVjZWlwdHMubGVuZ3RoICE9PSAxKSByZXR1cm4gJ2hpc3RvcnktYW1iaWd1b3VzJztcbiAgY29uc3QgcGF5bG9hZCA9IGNvcHlIaXN0b3J5RGF0YShldmlkZW5jZVswXSEuZGF0YSwgbWF4Qnl0ZXMpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCB0YXJnZXQgPSBjb3B5SGlzdG9yeVRhcmdldChwYXlsb2FkLnRhcmdldCk7XG4gIGlmIChcbiAgICAhdGFyZ2V0IHx8XG4gICAgdGFyZ2V0LnJ1bklkICE9PSBydW5JZCB8fFxuICAgIHRhcmdldC5sb2dBZGRyZXNzLmxvZ1J1bklkICE9PSBydW5JZCB8fFxuICAgIHRhcmdldC5jb21taXRzLmZyb20gIT09IDAgfHxcbiAgICB0YXJnZXQuY29tbWl0cy50byAhPT0gbG9nLmNvbW1pdExvZy5sZW5ndGhcbiAgKVxuICAgIHJldHVybiAnc2NvcGUtbWlzbWF0Y2gnO1xuICBjb25zdCByZWNlaXB0ID0gY29weUhpc3RvcnlSZWNlaXB0KHJlY2VpcHRzWzBdIS5kYXRhLCB0YXJnZXQpO1xuICBpZiAoIXJlY2VpcHQpIHJldHVybiAncmVjZWlwdC1yZWZ1c2VkJztcbiAgY29uc3QgYmFzaXMgPSBjb3B5SGlzdG9yeURhdGEoXG4gICAgeyBjb21taXRMb2c6IGxvZy5jb21taXRMb2csIC4uLihsb2cuaW5pdGlhbFN0YXRlICE9PSB1bmRlZmluZWQgJiYgeyBpbml0aWFsU3RhdGU6IGxvZy5pbml0aWFsU3RhdGUgfSkgfSxcbiAgICBtYXhCeXRlcyxcbiAgKSBhcyBQYWlyWydiYXNpcyddO1xuICByZXR1cm4geyBwYXlsb2FkLCB0YXJnZXQsIHJlY2VpcHQsIGJhc2lzIH07XG59XG5cbmZ1bmN0aW9uIGNhcHR1cmVFbmRpbmcoXG4gIGxvZzogU3RvcmVkTG9nLFxuICBjYXB0dXJlOiBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb24sXG4gIHRhcmdldDogQ2FwdHVyZUhpc3RvcnlUYXJnZXQsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBleHBlY3RlZCA9XG4gICAgY2FwdHVyZS5ib3VuZGFyeS5zdGF0dXMgPT09ICdjb21wbGV0ZWQnID8gJ29rJyA6IGNhcHR1cmUuYm91bmRhcnkuc3RhdHVzID09PSAncGF1c2VkJyA/ICdwYXVzZWQnIDogJ2ZhaWxlZCc7XG4gIGlmIChleHBlY3RlZCAhPT0gbG9nLm91dGNvbWUpIHJldHVybiAnYm91bmRhcnktbWlzbWF0Y2gnO1xuICBsZXQgY2xvc2UgPSAtMTtcbiAgbGV0IGNsb3NlcyA9IDA7XG4gIGxvZy5lbnRyaWVzLmZvckVhY2goKGUsIGluZGV4KSA9PiB7XG4gICAgaWYgKGUua2luZCA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIGNsb3NlID0gaW5kZXg7XG4gICAgICBjbG9zZXMrKztcbiAgICB9XG4gIH0pO1xuICBjb25zdCBvYnNlcnZhdGlvbiA9IGxvZy5lbnRyaWVzLmZpbmRJbmRleCgoZSkgPT4gZS5raW5kID09PSAnbm90ZScgJiYgZS5ub3RlID09PSBDQVBUVVJFX0hJU1RPUllfTk9URSk7XG4gIGNvbnN0IGFja25vd2xlZGdlbWVudCA9IGxvZy5lbnRyaWVzLmZpbmRJbmRleCgoZSkgPT4gZS5raW5kID09PSAnbm90ZScgJiYgZS5ub3RlID09PSBDQVBUVVJFX1JFQ0VJUFRfTk9URSk7XG4gIGlmIChjbG9zZSA8IDAgfHwgb2JzZXJ2YXRpb24gPD0gY2xvc2UgfHwgYWNrbm93bGVkZ2VtZW50IDw9IG9ic2VydmF0aW9uKSByZXR1cm4gJ3NlcXVlbmNlLW1pc21hdGNoJztcbiAgaWYgKFxuICAgIGNsb3NlcyAhPT0gMSB8fFxuICAgIG93bkRhdGEobG9nLm1ldGEuY2xvc2VkLCAncnVuSWQnKSAhPT0gdGFyZ2V0LnJ1bklkIHx8XG4gICAgb3duRGF0YShsb2cubWV0YS5vcGVuZWQsICdydW5JZCcpICE9PSB0YXJnZXQucnVuSWRcbiAgKVxuICAgIHJldHVybiAnYm91bmRhcnktbWlzbWF0Y2gnO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjYXB0dXJlRXZpZGVuY2UocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGNhcHR1cmU6IE5hdGl2ZUNhcHR1cmVPYnNlcnZhdGlvbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghcGF5bG9hZC5leGVjdXRpb25UcmVlIHx8IHR5cGVvZiBwYXlsb2FkLmV4ZWN1dGlvblRyZWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGF5bG9hZC5leGVjdXRpb25UcmVlKSlcbiAgICByZXR1cm4gJ2V2aWRlbmNlLW1pc3NpbmcnO1xuICBpZiAoXG4gICAgY2FwdHVyZS5jaGFubmVscy5jb250cm9sID09PSAnY2FwdHVyZWQnICYmXG4gICAgKCFBcnJheS5pc0FycmF5KHBheWxvYWQucmVjb3JkZXJzKSB8fFxuICAgICAgIXBheWxvYWQucmVjb3JkZXJzLnNvbWUoKHIpID0+IHI/LmNhcHR1cmU/LnJ1bklkID09PSBjYXB0dXJlLnJ1bklkICYmIHIuY2FwdHVyZS5jb250cm9sID09PSAnY2FwdHVyZWQnKSlcbiAgKVxuICAgIHJldHVybiAncmVjb3JkZXItZXZpZGVuY2UtbWlzc2luZyc7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBAaW50ZXJuYWwgRW5naW5lLW1ldGFkYXRhIGFkbWlzc2lvbiBhZnRlciBGb290dHJhY2UncyBnZW5lcmljIHJlY29yZCB2YWxpZGF0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkbWl0U3RvcmVkQ2FwdHVyZShcbiAgbG9nOiBTdG9yZWRMb2csXG4gIHJ1bklkOiBzdHJpbmcsXG4gIG1heEJ5dGVzOiBudW1iZXIsXG4pOiBQcm9taXNlPFN0b3JlZENhcHR1cmVSZXN1bHQ+IHtcbiAgY29uc3QgdW5rbm93biA9IChyZWFzb246IHN0cmluZyk6IFN0b3JlZENhcHR1cmVSZXN1bHQgPT4gKHsgc3RhdHVzOiAndW5rbm93bicsIHJlYXNvbiB9KTtcbiAgY29uc3QgcGFpciA9IGNhcHR1cmVQYWlyKGxvZywgcnVuSWQsIG1heEJ5dGVzKTtcbiAgaWYgKHR5cGVvZiBwYWlyID09PSAnc3RyaW5nJykgcmV0dXJuIHVua25vd24ocGFpcik7XG4gIGNvbnN0IHsgcGF5bG9hZCwgdGFyZ2V0LCByZWNlaXB0LCBiYXNpcyB9ID0gcGFpcjtcbiAgY29uc3QgYm9keSA9IGhpc3RvcnlFdmlkZW5jZShwYXlsb2FkKTtcbiAgaWYgKChhd2FpdCBoaXN0b3J5RGlnZXN0KHsgZXZpZGVuY2U6IGJvZHksIHJlY29yZDogYmFzaXMgfSkpICE9PSB0YXJnZXQuZGlnZXN0KSByZXR1cm4gdW5rbm93bignZXZpZGVuY2UtbWlzbWF0Y2gnKTtcbiAgaWYgKCF2YWxpZGF0ZUFic2VudEVudHJpZXMocGF5bG9hZCkpIHJldHVybiB1bmtub3duKCdhYnNlbnQtZXZpZGVuY2UtcmVmdXNlZCcpO1xuICBjb25zdCBjYXB0dXJlID0gaGlzdG9yeU5vdGUocGF5bG9hZC5jYXB0dXJlLCB0YXJnZXQpO1xuICBpZiAoIWNhcHR1cmUgfHwgY2FwdHVyZS5saW1pdGF0aW9ucy5pbmNsdWRlcygncmVzdW1lZC1zZWdtZW50JykpIHJldHVybiB1bmtub3duKCdjYXB0dXJlLXJlZnVzZWQnKTtcbiAgY29uc3QgcmVhZFNvdXJjZXMgPVxuICAgIGNhcHR1cmUudmVyc2lvbiA9PT0gMlxuICAgICAgPyBzdG9yZWRSZWFkU291cmNlcyhwYXlsb2FkLnJlYWRTb3VyY2VzLCBjYXB0dXJlLCBiYXNpcy5jb21taXRMb2csIGJhc2lzLmluaXRpYWxTdGF0ZSwgcGF5bG9hZC5leGVjdXRpb25UcmVlKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChjYXB0dXJlLnZlcnNpb24gPT09IDIgPyAhcmVhZFNvdXJjZXMgOiBPYmplY3QuaGFzT3duKHBheWxvYWQsICdyZWFkU291cmNlcycpKVxuICAgIHJldHVybiB1bmtub3duKCdzb3VyY2UtZXZpZGVuY2UtcmVmdXNlZCcpO1xuICBjb25zdCByZWZ1c2FsID0gY2FwdHVyZUVuZGluZyhsb2csIGNhcHR1cmUsIHRhcmdldCkgPz8gY2FwdHVyZUV2aWRlbmNlKHBheWxvYWQsIGNhcHR1cmUpO1xuICBpZiAocmVmdXNhbCkgcmV0dXJuIHVua25vd24ocmVmdXNhbCk7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBzdGF0dXM6ICdhY2tub3dsZWRnZWQnLFxuICAgIGhpc3Rvcnk6IE9iamVjdC5mcmVlemUoe1xuICAgICAgcnVuSWQsXG4gICAgICBjYXB0dXJlLFxuICAgICAgLi4uKHJlYWRTb3VyY2VzICYmIHsgcmVhZFNvdXJjZXMgfSksXG4gICAgICBleGVjdXRpb25UcmVlOiBwYXlsb2FkLmV4ZWN1dGlvblRyZWUgYXMgU3RhZ2VTbmFwc2hvdCxcbiAgICAgIC4uLihwYXlsb2FkLmFic2VudCAhPT0gdW5kZWZpbmVkID8geyBhYnNlbnQ6IHBheWxvYWQuYWJzZW50IGFzIHJlYWRvbmx5IChyZWFkb25seSBzdHJpbmdbXSlbXSB9IDoge30pLFxuICAgICAgLi4uKHBheWxvYWQucmVjb3JkZXJzICE9PSB1bmRlZmluZWQgPyB7IHJlY29yZGVyczogcGF5bG9hZC5yZWNvcmRlcnMgYXMgUmVjb3JkZXJTbmFwc2hvdFtdIH0gOiB7fSksXG4gICAgICBjb21taXRMb2c6IGJhc2lzLmNvbW1pdExvZyxcbiAgICAgIC4uLihiYXNpcy5pbml0aWFsU3RhdGUgJiYgeyBpbml0aWFsU3RhdGU6IGJhc2lzLmluaXRpYWxTdGF0ZSB9KSxcbiAgICAgIHJlY2VpcHQsXG4gICAgfSksXG4gIH0pO1xufVxuIl19