footprintjs 10.2.1 → 10.4.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 (131) hide show
  1. package/dist/esm/index.d.ts +3 -0
  2. package/dist/esm/index.js +1 -1
  3. package/dist/esm/lib/capture/absentEntries.d.ts +7 -0
  4. package/dist/esm/lib/capture/absentEntries.js +81 -0
  5. package/dist/esm/lib/capture/checkpointCapture.d.ts +11 -0
  6. package/dist/esm/lib/capture/checkpointCapture.js +104 -0
  7. package/dist/esm/lib/capture/historyData.d.ts +9 -0
  8. package/dist/esm/lib/capture/historyData.js +79 -0
  9. package/dist/esm/lib/capture/historyNote.d.ts +4 -0
  10. package/dist/esm/lib/capture/historyNote.js +52 -0
  11. package/dist/esm/lib/capture/historyTarget.d.ts +5 -0
  12. package/dist/esm/lib/capture/historyTarget.js +35 -0
  13. package/dist/esm/lib/capture/historyTypes.d.ts +39 -0
  14. package/dist/esm/lib/capture/historyTypes.js +4 -0
  15. package/dist/esm/lib/capture/nativeCoverage.d.ts +69 -0
  16. package/dist/esm/lib/capture/nativeCoverage.js +140 -0
  17. package/dist/esm/lib/capture/noteShape.d.ts +10 -0
  18. package/dist/esm/lib/capture/noteShape.js +93 -0
  19. package/dist/esm/lib/capture/readSources.d.ts +43 -0
  20. package/dist/esm/lib/capture/readSources.js +78 -0
  21. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +5 -2
  22. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  23. package/dist/esm/lib/engine/types.d.ts +3 -0
  24. package/dist/esm/lib/engine/types.js +1 -1
  25. package/dist/esm/lib/memory/StageContext.d.ts +13 -0
  26. package/dist/esm/lib/memory/StageContext.js +110 -14
  27. package/dist/esm/lib/memory/attention.d.ts +2 -0
  28. package/dist/esm/lib/memory/attention.js +12 -5
  29. package/dist/esm/lib/memory/runPolicy.d.ts +5 -1
  30. package/dist/esm/lib/memory/runPolicy.js +2 -1
  31. package/dist/esm/lib/pause/record.js +8 -2
  32. package/dist/esm/lib/pause/types.d.ts +2 -0
  33. package/dist/esm/lib/pause/types.js +1 -1
  34. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +12 -1
  35. package/dist/esm/lib/recorder/ControlDepRecorder.js +23 -1
  36. package/dist/esm/lib/recorder/snapshot.d.ts +1 -1
  37. package/dist/esm/lib/recorder/snapshot.js +7 -2
  38. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +24 -1
  39. package/dist/esm/lib/runner/ExecutionRuntime.js +45 -4
  40. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +5 -0
  41. package/dist/esm/lib/runner/FlowChartExecutor.js +74 -7
  42. package/dist/esm/lib/runner/attach.js +6 -2
  43. package/dist/esm/lib/runner/captureHistory.d.ts +8 -0
  44. package/dist/esm/lib/runner/captureHistory.js +106 -0
  45. package/dist/esm/lib/runner/checkpoint.d.ts +2 -0
  46. package/dist/esm/lib/runner/checkpoint.js +3 -1
  47. package/dist/esm/lib/runner/index.d.ts +1 -0
  48. package/dist/esm/lib/runner/index.js +1 -1
  49. package/dist/esm/lib/runner/options.d.ts +3 -0
  50. package/dist/esm/lib/runner/options.js +46 -3
  51. package/dist/esm/lib/runner/readStoredCapture.d.ts +39 -0
  52. package/dist/esm/lib/runner/readStoredCapture.js +36 -0
  53. package/dist/esm/lib/runner/recordSink.d.ts +11 -0
  54. package/dist/esm/lib/runner/recordSink.js +47 -4
  55. package/dist/esm/lib/runner/snapshot.d.ts +3 -1
  56. package/dist/esm/lib/runner/snapshot.js +35 -4
  57. package/dist/esm/lib/runner/storedCaptureAdmission.d.ts +4 -0
  58. package/dist/esm/lib/runner/storedCaptureAdmission.js +97 -0
  59. package/dist/esm/lib/scope/ScopeFacade.js +4 -2
  60. package/dist/esm/lib/scope/runtime.d.ts +2 -0
  61. package/dist/esm/lib/scope/runtime.js +9 -1
  62. package/dist/esm/lib/sinks/fileSink.d.ts +2 -1
  63. package/dist/esm/lib/sinks/fileSink.js +8 -2
  64. package/dist/esm/trace.d.ts +2 -0
  65. package/dist/esm/trace.js +2 -1
  66. package/dist/index.js +1 -1
  67. package/dist/lib/capture/absentEntries.js +86 -0
  68. package/dist/lib/capture/checkpointCapture.js +110 -0
  69. package/dist/lib/capture/historyData.js +85 -0
  70. package/dist/lib/capture/historyNote.js +56 -0
  71. package/dist/lib/capture/historyTarget.js +40 -0
  72. package/dist/lib/capture/historyTypes.js +7 -0
  73. package/dist/lib/capture/nativeCoverage.js +146 -0
  74. package/dist/lib/capture/noteShape.js +103 -0
  75. package/dist/lib/capture/readSources.js +83 -0
  76. package/dist/lib/engine/handlers/SubflowExecutor.js +5 -2
  77. package/dist/lib/engine/types.js +1 -1
  78. package/dist/lib/memory/StageContext.js +110 -14
  79. package/dist/lib/memory/attention.js +12 -5
  80. package/dist/lib/memory/runPolicy.js +2 -1
  81. package/dist/lib/pause/record.js +8 -2
  82. package/dist/lib/pause/types.js +1 -1
  83. package/dist/lib/recorder/ControlDepRecorder.js +23 -1
  84. package/dist/lib/recorder/snapshot.js +7 -2
  85. package/dist/lib/runner/ExecutionRuntime.js +44 -3
  86. package/dist/lib/runner/FlowChartExecutor.js +77 -10
  87. package/dist/lib/runner/attach.js +5 -1
  88. package/dist/lib/runner/captureHistory.js +110 -0
  89. package/dist/lib/runner/checkpoint.js +3 -1
  90. package/dist/lib/runner/index.js +1 -1
  91. package/dist/lib/runner/options.js +46 -3
  92. package/dist/lib/runner/readStoredCapture.js +40 -0
  93. package/dist/lib/runner/recordSink.js +47 -4
  94. package/dist/lib/runner/snapshot.js +35 -4
  95. package/dist/lib/runner/storedCaptureAdmission.js +101 -0
  96. package/dist/lib/scope/ScopeFacade.js +3 -1
  97. package/dist/lib/scope/runtime.js +12 -2
  98. package/dist/lib/sinks/fileSink.js +8 -2
  99. package/dist/trace.js +4 -2
  100. package/dist/types/index.d.ts +3 -0
  101. package/dist/types/lib/capture/absentEntries.d.ts +7 -0
  102. package/dist/types/lib/capture/checkpointCapture.d.ts +11 -0
  103. package/dist/types/lib/capture/historyData.d.ts +9 -0
  104. package/dist/types/lib/capture/historyNote.d.ts +4 -0
  105. package/dist/types/lib/capture/historyTarget.d.ts +5 -0
  106. package/dist/types/lib/capture/historyTypes.d.ts +39 -0
  107. package/dist/types/lib/capture/nativeCoverage.d.ts +69 -0
  108. package/dist/types/lib/capture/noteShape.d.ts +10 -0
  109. package/dist/types/lib/capture/readSources.d.ts +43 -0
  110. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  111. package/dist/types/lib/engine/types.d.ts +3 -0
  112. package/dist/types/lib/memory/StageContext.d.ts +13 -0
  113. package/dist/types/lib/memory/attention.d.ts +2 -0
  114. package/dist/types/lib/memory/runPolicy.d.ts +5 -1
  115. package/dist/types/lib/pause/types.d.ts +2 -0
  116. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +12 -1
  117. package/dist/types/lib/recorder/snapshot.d.ts +1 -1
  118. package/dist/types/lib/runner/ExecutionRuntime.d.ts +24 -1
  119. package/dist/types/lib/runner/FlowChartExecutor.d.ts +5 -0
  120. package/dist/types/lib/runner/captureHistory.d.ts +8 -0
  121. package/dist/types/lib/runner/checkpoint.d.ts +2 -0
  122. package/dist/types/lib/runner/index.d.ts +1 -0
  123. package/dist/types/lib/runner/options.d.ts +3 -0
  124. package/dist/types/lib/runner/readStoredCapture.d.ts +39 -0
  125. package/dist/types/lib/runner/recordSink.d.ts +11 -0
  126. package/dist/types/lib/runner/snapshot.d.ts +3 -1
  127. package/dist/types/lib/runner/storedCaptureAdmission.d.ts +4 -0
  128. package/dist/types/lib/scope/runtime.d.ts +2 -0
  129. package/dist/types/lib/sinks/fileSink.d.ts +2 -1
  130. package/dist/types/trace.d.ts +2 -0
  131. package/package.json +2 -2
@@ -41,11 +41,15 @@ function attemptReference(record, owner) {
41
41
  }
42
42
  /** One execution's ownership, pending summary, marks and omission accounting stay in this helper. */
43
43
  class StageAttention {
44
+ onOmitted;
44
45
  marks;
45
46
  omitted = false;
46
47
  retryPossible = false;
47
48
  summary;
48
49
  terminal;
50
+ constructor(onOmitted) {
51
+ this.onOmitted = onOmitted;
52
+ }
49
53
  /** A new execution starts fresh; an attempt discard never calls this. No collection is reconstructed. */
50
54
  begin() {
51
55
  this.marks = undefined;
@@ -134,34 +138,37 @@ class StageAttention {
134
138
  }
135
139
  /** Keep only bounded exact references; one slot is reserved to disclose omissions. */
136
140
  append(attention) {
141
+ if (attention.kind === 'not-collected')
142
+ this.onOmitted?.();
137
143
  const key = attention.kind + ':' + attention.reason;
138
144
  const previous = this.marks?.get(key);
139
145
  const references = [...(previous?.evidence ?? [])];
140
146
  for (const reference of attention.evidence) {
141
147
  if (!validReference(reference)) {
142
- this.omitted = true;
148
+ this.missing();
143
149
  continue;
144
150
  }
145
151
  if (references.includes(reference))
146
152
  continue;
147
153
  if (references.length >= MAX_REFERENCES) {
148
- this.omitted = true;
154
+ this.missing();
149
155
  continue;
150
156
  }
151
157
  references.push(reference);
152
158
  }
153
159
  if (attention.kind !== 'not-collected' && references.length === 0) {
154
- this.omitted = true;
160
+ this.missing();
155
161
  return;
156
162
  }
157
163
  if (!previous && (this.marks?.size ?? 0) >= MAX_MARKS - 1) {
158
- this.omitted = true;
164
+ this.missing();
159
165
  return;
160
166
  }
161
167
  (this.marks ??= new Map()).set(key, { kind: attention.kind, reason: attention.reason, evidence: references });
162
168
  }
163
169
  missing() {
164
170
  this.omitted = true;
171
+ this.onOmitted?.();
165
172
  }
166
173
  /** Copy already collected bounded marks, never an attempt array, diagnostic bag or execution tree. */
167
174
  snapshot() {
@@ -172,4 +179,4 @@ class StageAttention {
172
179
  }
173
180
  }
174
181
  exports.StageAttention = StageAttention;
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW50aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYXR0ZW50aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHlDQUEyRDtBQUkzRCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDckIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzFCLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQzNFLE1BQU0saUJBQWlCLEdBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNqRCxJQUFJLEVBQUUsZUFBZTtJQUNyQixNQUFNLEVBQUUsd0JBQXdCO0lBQ2hDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUM1QixDQUFDLENBQUM7QUFFSCxTQUFTLGNBQWMsQ0FBQyxTQUFrQjtJQUN4QyxPQUFPLENBQ0wsT0FBTyxTQUFTLEtBQUssUUFBUTtRQUM3QixTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDcEIsU0FBUyxDQUFDLE1BQU0sSUFBSSxvQkFBb0I7UUFDeEMsdUdBQXVHO1FBQ3ZHLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVELDRHQUE0RztBQUM1RyxTQUFTLGdCQUFnQixDQUFDLE1BQXFCLEVBQUUsS0FBYTtJQUM1RCxJQUNFLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRO1FBQ2pDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQztRQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9B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SUFDaEgsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQsc0dBQXNHO0lBQ3RHLFFBQVE7UUFDTixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDakUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ2xGLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQztZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNwSCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBMUlELHdDQTBJQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBFbmdpbmUtb3duZWQgYXR0ZW50aW9uIGlzIGNvbGxlY3RlZCB3aXRoIHJldGFpbmVkIGZhY3RzOyBzbmFwc2hvdHMgb25seSBjb3B5IHRoaXMgYm91bmRlZCBwcm9qZWN0aW9uLiAqL1xuaW1wb3J0IHR5cGUgeyBBdHRlbnRpb24gfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgYnVpbGRBdHRlbXB0SWQsIHBhcnNlQXR0ZW1wdElkIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBBdHRlbXB0UmVjb3JkLCBBdHRlbXB0U3VtbWFyeSB9IGZyb20gJy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuXG5jb25zdCBNQVhfTUFSS1MgPSAzMjtcbmNvbnN0IE1BWF9SRUZFUkVOQ0VTID0gMTY7XG5jb25zdCBNQVhfUkVGRVJFTkNFX0xFTkdUSCA9IDUxMjtcbmNvbnN0IFNUT1BQRURfUkVBU09OUyA9IG5ldyBTZXQoWydleGhhdXN0ZWQnLCAnZGVjbGluZWQnLCAnbm8tdGltZS1sZWZ0J10pO1xuY29uc3QgTUlTU0lOR19BVFRFTlRJT046IEF0dGVudGlvbiA9IE9iamVjdC5mcmVlemUoe1xuICBraW5kOiAnbm90LWNvbGxlY3RlZCcsXG4gIHJlYXNvbjogJ0VWSURFTkNFX05PVF9DT0xMRUNURUQnLFxuICBldmlkZW5jZTogT2JqZWN0LmZyZWV6ZShbXSksXG59KTtcblxuZnVuY3Rpb24gdmFsaWRSZWZlcmVuY2UocmVmZXJlbmNlOiB1bmtub3duKTogcmVmZXJlbmNlIGlzIHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHJlZmVyZW5jZSA9PT0gJ3N0cmluZycgJiZcbiAgICByZWZlcmVuY2UubGVuZ3RoID4gMCAmJlxuICAgIHJlZmVyZW5jZS5sZW5ndGggPD0gTUFYX1JFRkVSRU5DRV9MRU5HVEggJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCAtLSBNYXRjaCB0aGUgc2hhcmVkIEZvb3R0cmFjZSBldmlkZW5jZS1yZWZlcmVuY2UgYm91bmRhcnkuXG4gICAgIS9bXFx1MDAwMC1cXHUwMDFmXFx1MDA3Zi1cXHUwMDlmXS8udGVzdChyZWZlcmVuY2UpXG4gICk7XG59XG5cbi8qKiBSZXVzZSB0aGUgb25lIGF0dGVtcHQgZ3JhbW1hciwgaW5jbHVkaW5nIG5lc3RlZCBjYWxsIGFkZHJlc3NlczsgbmV2ZXIgc2hvcnRlbiBhbiB1bmFkZHJlc3NhYmxlIHByb29mLiAqL1xuZnVuY3Rpb24gYXR0ZW1wdFJlZmVyZW5jZShyZWNvcmQ6IEF0dGVtcHRSZWNvcmQsIG93bmVyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoXG4gICAgdHlwZW9mIHJlY29yZC5zZXJpZXMgIT09ICdzdHJpbmcnIHx8XG4gICAgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHJlY29yZC5hdHRlbXB0KSB8fFxuICAgIHJlY29yZC5hdHRlbXB0IDwgMSB8fFxuICAgIHJlY29yZC5zZXJpZXMubGVuZ3RoICsgU3RyaW5nKHJlY29yZC5hdHRlbXB0KS5sZW5ndGggKyAxID4gTUFYX1JFRkVSRU5DRV9MRU5HVEhcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gcmVjb3JkLnNlcmllcyArICdAJyArIHJlY29yZC5hdHRlbXB0O1xuICAgIGNvbnN0IHBhcnRzID0gcGFyc2VBdHRlbXB0SWQoY2FuZGlkYXRlKTtcbiAgICBpZiAoXG4gICAgICAhcGFydHMgfHxcbiAgICAgIHBhcnRzLnJ1bnRpbWVTdGFnZUlkICE9PSBvd25lciB8fFxuICAgICAgKHJlY29yZC5raW5kID09PSAnc3RhZ2UnID8gcGFydHMuY2FsbCAhPT0gdW5kZWZpbmVkIDogcGFydHMuY2FsbCA9PT0gdW5kZWZpbmVkKVxuICAgIClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgY2Fub25pY2FsID0gYnVpbGRBdHRlbXB0SWQocGFydHMucnVudGltZVN0YWdlSWQsIHBhcnRzLmF0dGVtcHQsIHBhcnRzLmNhbGwpO1xuICAgIHJldHVybiBjYW5vbmljYWwgPT09IGNhbmRpZGF0ZSAmJiB2YWxpZFJlZmVyZW5jZShjYW5vbmljYWwpID8gY2Fub25pY2FsIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbnR5cGUgVGVybWluYWxQcm9vZiA9IFBpY2s8QXR0ZW1wdFJlY29yZCwgJ25leHQnIHwgJ3JlYXNvbicgfCAnZWZmZWN0Jz4gJiB7IHJlYWRvbmx5IGV2aWRlbmNlOiBzdHJpbmcgfTtcblxuLyoqIE9uZSBleGVjdXRpb24ncyBvd25lcnNoaXAsIHBlbmRpbmcgc3VtbWFyeSwgbWFya3MgYW5kIG9taXNzaW9uIGFjY291bnRpbmcgc3RheSBpbiB0aGlzIGhlbHBlci4gKi9cbmV4cG9ydCBjbGFzcyBTdGFnZUF0dGVudGlvbiB7XG4gIHByaXZhdGUgbWFya3M/OiBNYXA8c3RyaW5nLCBBdHRlbnRpb24+O1xuICBwcml2YXRlIG9taXR0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXRyeVBvc3NpYmxlID0gZmFsc2U7XG4gIHByaXZhdGUgc3VtbWFyeT86IEF0dGVtcHRTdW1tYXJ5O1xuICBwcml2YXRlIHRlcm1pbmFsPzogVGVybWluYWxQcm9vZjtcblxuICAvKiogQSBuZXcgZXhlY3V0aW9uIHN0YXJ0cyBmcmVzaDsgYW4gYXR0ZW1wdCBkaXNjYXJkIG5ldmVyIGNhbGxzIHRoaXMuIE5vIGNvbGxlY3Rpb24gaXMgcmVjb25zdHJ1Y3RlZC4gKi9cbiAgYmVnaW4oKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9taXR0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJldHJ5UG9zc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnN1bW1hcnkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50ZXJtaW5hbCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgb25seSBhZnRlciB0aGUgZnJhbWUgcmV0YWluZWQgdGhpcyBhdHRlbXB0LiBSYXcgZXJyb3IsIHRhcmdldCBhbmQgZGVjaXNpb24gcGF5bG9hZHMgYXJlIG5ldmVyIHJlYWQuICovXG4gIHJlY29yZEF0dGVtcHQocmVjb3JkOiBBdHRlbXB0UmVjb3JkLCBvd25lcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gYXR0ZW1wdFJlZmVyZW5jZShyZWNvcmQsIG93bmVyKTtcbiAgICBpZiAocmVjb3JkLmtpbmQgPT09ICdzdGFnZScgJiYgcmVjb3JkLnNlcmllcyA9PT0gb3duZXIpIHtcbiAgICAgIGlmIChyZWNvcmQucmV0cnlMb29wID09PSB1bmRlZmluZWQgJiYgKHJlY29yZC5vZiA/PyAxKSA+IDEpIHRoaXMucmV0cnlQb3NzaWJsZSA9IHRydWU7XG4gICAgICBpZiAocmVmZXJlbmNlICYmIHJlY29yZC5uZXh0ICE9PSAncmV0cnknKSB7XG4gICAgICAgIHRoaXMudGVybWluYWwgPSB7IG5leHQ6IHJlY29yZC5uZXh0LCByZWFzb246IHJlY29yZC5yZWFzb24sIGVmZmVjdDogcmVjb3JkLmVmZmVjdCwgZXZpZGVuY2U6IHJlZmVyZW5jZSB9O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBUaGUgcnVubmVyIGNhbGxzIHJlY29yZFN1bW1hcnkgYmVmb3JlIGl0cyBmaW5hbCBhdHRlbXB0LiBGaW5pc2ggdGhhdCBwZW5kaW5nIHByb2plY3Rpb24gbm93IHRvby5cbiAgICB0aGlzLnByb2plY3RTdW1tYXJ5KCk7XG4gICAgY29uc3QgYWRkID0gKGtpbmQ6IEF0dGVudGlvblsna2luZCddLCByZWFzb246IEF0dGVudGlvblsncmVhc29uJ10pID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2UpIHRoaXMuYXBwZW5kKHsga2luZCwgcmVhc29uLCBldmlkZW5jZTogW3JlZmVyZW5jZV0gfSk7XG4gICAgICBlbHNlIHRoaXMubWlzc2luZygpO1xuICAgIH07XG4gICAgaWYgKHJlY29yZC5lZmZlY3QgPT09ICd1bmtub3duJykgYWRkKCd1bmtub3duLWVmZmVjdCcsICdVTktOT1dOX0VGRkVDVF9SRUNPUkRFRCcpO1xuICAgIGlmIChyZWNvcmQub3V0Y29tZSA9PT0gJ3RpbWVvdXQnKSBhZGQoJ3RpbWVvdXQnLCAnVElNRU9VVF9SRUNPUkRFRCcpO1xuICAgIC8vIEFuIFNESydzIHN1Z2dlc3RlZCBuZXh0L3JlYXNvbiBpcyBub3QgaXRzIGFjdHVhbCBwb2xpY3k7IG9ubHkgYSBsYXRlciBvcmRpbmFsIHByb3ZlcyBpdHMgcmV0cnkuXG4gICAgY29uc3Qgb2JzZXJ2ZWQgPSByZWNvcmQua2luZCA9PT0gJ29ic2VydmVkJztcbiAgICBpZiAoKCFvYnNlcnZlZCAmJiByZWNvcmQubmV4dCA9PT0gJ3JldHJ5JykgfHwgcmVjb3JkLmF0dGVtcHQgPiAxKSBhZGQoJ3JldHJpZWQnLCAnUkVUUllfUkVDT1JERUQnKTtcbiAgICBpZiAoXG4gICAgICAhb2JzZXJ2ZWQgJiZcbiAgICAgIHJlY29yZC5uZXh0ID09PSAnc3RvcCcgJiZcbiAgICAgIFNUT1BQRURfUkVBU09OUy5oYXMocmVjb3JkLnJlYXNvbikgJiZcbiAgICAgIChyZWNvcmQub2YgPz8gMSkgPiAxICYmXG4gICAgICByZWNvcmQucmV0cnlMb29wID09PSB1bmRlZmluZWRcbiAgICApXG4gICAgICBhZGQoJ2dhdmUtdXAnLCAnUkVUUllfU1RPUF9SRUNPUkRFRCcpO1xuICB9XG5cbiAgcmVjb3JkU3VtbWFyeShzdW1tYXJ5OiBBdHRlbXB0U3VtbWFyeSk6IHZvaWQge1xuICAgIHRoaXMuc3VtbWFyeSA9IHN1bW1hcnk7XG4gICAgdGhpcy5wcm9qZWN0U3VtbWFyeSgpO1xuICB9XG5cbiAgLyoqIEEgc3VtbWFyeS1vbmx5IGN1dCB3YWl0IGhhcyBubyBwaGFudG9tIGZpbmFsIGF0dGVtcHQ7IHVzZSBpdHMgYWN0dWFsIHJldGFpbmVkIHN1bW1hcnkuICovXG4gIHByaXZhdGUgcHJvamVjdFN1bW1hcnkoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdCA9IHRoaXMuc3VtbWFyeT8ubGFzdDtcbiAgICBpZiAoIWxhc3QpIHJldHVybjtcbiAgICBjb25zdCB0ZXJtaW5hbCA9IHRoaXMudGVybWluYWw7XG4gICAgY29uc3QgbWF0Y2hpbmcgPSB0ZXJtaW5hbD8ubmV4dCA9PT0gbGFzdC5uZXh0ICYmIHRlcm1pbmFsLnJlYXNvbiA9PT0gbGFzdC5yZWFzb247XG4gICAgY29uc3QgYWRkID0gKGtpbmQ6IEF0dGVudGlvblsna2luZCddLCByZWFzb246IEF0dGVudGlvblsncmVhc29uJ10sIHByb29mPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBwcm9vZiA/PyAnYXR0ZW1wdFN1bW1hcnknO1xuICAgICAgY29uc3Qga2V5ID0ga2luZCArICc6JyArIHJlYXNvbjtcbiAgICAgIGNvbnN0IG1hcmtzID0gdGhpcy5tYXJrcztcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gbWFya3M/LmdldChrZXkpO1xuICAgICAgaWYgKHByb29mICYmIG1hcmtzICYmIHByZXZpb3VzPy5ldmlkZW5jZS5pbmNsdWRlcygnYXR0ZW1wdFN1bW1hcnknKSkge1xuICAgICAgICBtYXJrcy5zZXQoa2V5LCB7IC4uLnByZXZpb3VzLCBldmlkZW5jZTogcHJldmlvdXMuZXZpZGVuY2UuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSAnYXR0ZW1wdFN1bW1hcnknKSB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwZW5kKHsga2luZCwgcmVhc29uLCBldmlkZW5jZTogW3JlZmVyZW5jZV0gfSk7XG4gICAgfTtcbiAgICBpZiAobGFzdC5lZmZlY3QgPT09ICd1bmtub3duJylcbiAgICAgIGFkZChcbiAgICAgICAgJ3Vua25vd24tZWZmZWN0JyxcbiAgICAgICAgJ1VOS05PV05fRUZGRUNUX1JFQ09SREVEJyxcbiAgICAgICAgbWF0Y2hpbmcgJiYgdGVybWluYWwuZWZmZWN0ID09PSAndW5rbm93bicgPyB0ZXJtaW5hbC5ldmlkZW5jZSA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgaWYgKHRoaXMucmV0cnlQb3NzaWJsZSAmJiBsYXN0Lm5leHQgPT09ICdzdG9wJyAmJiBTVE9QUEVEX1JFQVNPTlMuaGFzKGxhc3QucmVhc29uKSlcbiAgICAgIGFkZCgnZ2F2ZS11cCcsICdSRVRSWV9TVE9QX1JFQ09SREVEJywgbWF0Y2hpbmcgPyB0ZXJtaW5hbC5ldmlkZW5jZSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKiogT25seSB0aGUgZXhwbGljaXQgcmV0YWluZWQgc3RhZ2UtZXJyb3IgcGF0aCBjYWxscyB0aGlzOyBhIGRpYWdub3N0aWMgdmFsdWUgbmV2ZXIgY2xhc3NpZmllcyBpdHNlbGYuICovXG4gIHN0YWdlRmFpbGVkKGVycm9yczogdW5rbm93bik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID1cbiAgICAgICAgZXJyb3JzICYmIHR5cGVvZiBlcnJvcnMgPT09ICdvYmplY3QnXG4gICAgICAgICAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVycm9ycywgJ3N0YWdlRXhlY3V0aW9uRXJyb3InKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgT2JqZWN0Lmhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKSkge1xuICAgICAgICB0aGlzLmFwcGVuZCh7IGtpbmQ6ICdlcnJvcicsIHJlYXNvbjogJ0VSUk9SX1JFQ09SREVEJywgZXZpZGVuY2U6IFsnZXJyb3JzOnN0YWdlRXhlY3V0aW9uRXJyb3InXSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLyogQSBtYWxmb3JtZWQgZXZpZGVuY2UgYmFnIGlzIHVuYXZhaWxhYmxlLCBuZXZlciBhbm90aGVyIHN0YWdlIGZhaWx1cmUuICovXG4gICAgfVxuICAgIHRoaXMubWlzc2luZygpO1xuICB9XG5cbiAgYXR0ZW1wdERyb3BwZWQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBlbmQoeyBraW5kOiAnbm90LWNvbGxlY3RlZCcsIHJlYXNvbjogJ0VWSURFTkNFX05PVF9DT0xMRUNURUQnLCBldmlkZW5jZTogWydhdHRlbXB0c0Ryb3BwZWQnXSB9KTtcbiAgfVxuXG4gIC8qKiBLZWVwIG9ubHkgYm91bmRlZCBleGFjdCByZWZlcmVuY2VzOyBvbmUgc2xvdCBpcyByZXNlcnZlZCB0byBkaXNjbG9zZSBvbWlzc2lvbnMuICovXG4gIGFwcGVuZChhdHRlbnRpb246IEF0dGVudGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGF0dGVudGlvbi5raW5kICsgJzonICsgYXR0ZW50aW9uLnJlYXNvbjtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubWFya3M/LmdldChrZXkpO1xuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBbLi4uKHByZXZpb3VzPy5ldmlkZW5jZSA/PyBbXSldO1xuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIGF0dGVudGlvbi5ldmlkZW5jZSkge1xuICAgICAgaWYgKCF2YWxpZFJlZmVyZW5jZShyZWZlcmVuY2UpKSB7XG4gICAgICAgIHRoaXMub21pdHRlZCA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJlZmVyZW5jZXMuaW5jbHVkZXMocmVmZXJlbmNlKSkgY29udGludWU7XG4gICAgICBpZiAocmVmZXJlbmNlcy5sZW5ndGggPj0gTUFYX1JFRkVSRU5DRVMpIHtcbiAgICAgICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgICB9XG4gICAgaWYgKGF0dGVudGlvbi5raW5kICE9PSAnbm90LWNvbGxlY3RlZCcgJiYgcmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMub21pdHRlZCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghcHJldmlvdXMgJiYgKHRoaXMubWFya3M/LnNpemUgPz8gMCkgPj0gTUFYX01BUktTIC0gMSkge1xuICAgICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMubWFya3MgPz89IG5ldyBNYXAoKSkuc2V0KGtleSwgeyBraW5kOiBhdHRlbnRpb24ua2luZCwgcmVhc29uOiBhdHRlbnRpb24ucmVhc29uLCBldmlkZW5jZTogcmVmZXJlbmNlcyB9KTtcbiAgfVxuXG4gIG1pc3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5vbWl0dGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBDb3B5IGFscmVhZHkgY29sbGVjdGVkIGJvdW5kZWQgbWFya3MsIG5ldmVyIGFuIGF0dGVtcHQgYXJyYXksIGRpYWdub3N0aWMgYmFnIG9yIGV4ZWN1dGlvbiB0cmVlLiAqL1xuICBzbmFwc2hvdCgpOiByZWFkb25seSBBdHRlbnRpb25bXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLih0aGlzLm1hcmtzPy52YWx1ZXMoKSA/PyBbXSldLm1hcCgoYXR0ZW50aW9uKSA9PlxuICAgICAgT2JqZWN0LmZyZWV6ZSh7IC4uLmF0dGVudGlvbiwgZXZpZGVuY2U6IE9iamVjdC5mcmVlemUoWy4uLmF0dGVudGlvbi5ldmlkZW5jZV0pIH0pLFxuICAgICk7XG4gICAgaWYgKHRoaXMub21pdHRlZCAmJiAhcmVzdWx0LnNvbWUoKGF0dGVudGlvbikgPT4gYXR0ZW50aW9uLmtpbmQgPT09ICdub3QtY29sbGVjdGVkJykpIHJlc3VsdC5wdXNoKE1JU1NJTkdfQVRURU5USU9OKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXN1bHQpO1xuICB9XG59XG4iXX0=
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW50aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYXR0ZW50aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHlDQUEyRDtBQUkzRCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDckIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzFCLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQzNFLE1BQU0saUJBQWlCLEdBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNqRCxJQUFJLEVBQUUsZUFBZTtJQUNyQixNQUFNLEVBQUUsd0JBQXdCO0lBQ2hDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztDQUM1QixDQUFDLENBQUM7QUFFSCxTQUFTLGNBQWMsQ0FBQyxTQUFrQjtJQUN4QyxPQUFPLENBQ0wsT0FBTyxTQUFTLEtBQUssUUFBUTtRQUM3QixTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDcEIsU0FBUyxDQUFDLE1BQU0sSUFBSSxvQkFBb0I7UUFDeEMsdUdBQXVHO1FBQ3ZHLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVELDRHQUE0RztBQUM1RyxTQUFTLGdCQUFnQixDQUFDLE1BQXFCLEVBQUUsS0FBYTtJQUM1RCxJQUNFLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRO1FBQ2pDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQztRQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9B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LEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELHNHQUFzRztJQUN0RyxRQUFRO1FBQ04sTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ2pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNsRixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDcEgsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQTlJRCx3Q0E4SUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogRW5naW5lLW93bmVkIGF0dGVudGlvbiBpcyBjb2xsZWN0ZWQgd2l0aCByZXRhaW5lZCBmYWN0czsgc25hcHNob3RzIG9ubHkgY29weSB0aGlzIGJvdW5kZWQgcHJvamVjdGlvbi4gKi9cbmltcG9ydCB0eXBlIHsgQXR0ZW50aW9uIH0gZnJvbSAnZm9vdHRyYWNlJztcbmltcG9ydCB7IGJ1aWxkQXR0ZW1wdElkLCBwYXJzZUF0dGVtcHRJZCB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgQXR0ZW1wdFJlY29yZCwgQXR0ZW1wdFN1bW1hcnkgfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcblxuY29uc3QgTUFYX01BUktTID0gMzI7XG5jb25zdCBNQVhfUkVGRVJFTkNFUyA9IDE2O1xuY29uc3QgTUFYX1JFRkVSRU5DRV9MRU5HVEggPSA1MTI7XG5jb25zdCBTVE9QUEVEX1JFQVNPTlMgPSBuZXcgU2V0KFsnZXhoYXVzdGVkJywgJ2RlY2xpbmVkJywgJ25vLXRpbWUtbGVmdCddKTtcbmNvbnN0IE1JU1NJTkdfQVRURU5USU9OOiBBdHRlbnRpb24gPSBPYmplY3QuZnJlZXplKHtcbiAga2luZDogJ25vdC1jb2xsZWN0ZWQnLFxuICByZWFzb246ICdFVklERU5DRV9OT1RfQ09MTEVDVEVEJyxcbiAgZXZpZGVuY2U6IE9iamVjdC5mcmVlemUoW10pLFxufSk7XG5cbmZ1bmN0aW9uIHZhbGlkUmVmZXJlbmNlKHJlZmVyZW5jZTogdW5rbm93bik6IHJlZmVyZW5jZSBpcyBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiByZWZlcmVuY2UgPT09ICdzdHJpbmcnICYmXG4gICAgcmVmZXJlbmNlLmxlbmd0aCA+IDAgJiZcbiAgICByZWZlcmVuY2UubGVuZ3RoIDw9IE1BWF9SRUZFUkVOQ0VfTEVOR1RIICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXggLS0gTWF0Y2ggdGhlIHNoYXJlZCBGb290dHJhY2UgZXZpZGVuY2UtcmVmZXJlbmNlIGJvdW5kYXJ5LlxuICAgICEvW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2YtXFx1MDA5Zl0vLnRlc3QocmVmZXJlbmNlKVxuICApO1xufVxuXG4vKiogUmV1c2UgdGhlIG9uZSBhdHRlbXB0IGdyYW1tYXIsIGluY2x1ZGluZyBuZXN0ZWQgY2FsbCBhZGRyZXNzZXM7IG5ldmVyIHNob3J0ZW4gYW4gdW5hZGRyZXNzYWJsZSBwcm9vZi4gKi9cbmZ1bmN0aW9uIGF0dGVtcHRSZWZlcmVuY2UocmVjb3JkOiBBdHRlbXB0UmVjb3JkLCBvd25lcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKFxuICAgIHR5cGVvZiByZWNvcmQuc2VyaWVzICE9PSAnc3RyaW5nJyB8fFxuICAgICFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZWNvcmQuYXR0ZW1wdCkgfHxcbiAgICByZWNvcmQuYXR0ZW1wdCA8IDEgfHxcbiAgICByZWNvcmQuc2VyaWVzLmxlbmd0aCArIFN0cmluZyhyZWNvcmQuYXR0ZW1wdCkubGVuZ3RoICsgMSA+IE1BWF9SRUZFUkVOQ0VfTEVOR1RIXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHJlY29yZC5zZXJpZXMgKyAnQCcgKyByZWNvcmQuYXR0ZW1wdDtcbiAgICBjb25zdCBwYXJ0cyA9IHBhcnNlQXR0ZW1wdElkKGNhbmRpZGF0ZSk7XG4gICAgaWYgKFxuICAgICAgIXBhcnRzIHx8XG4gICAgICBwYXJ0cy5ydW50aW1lU3RhZ2VJZCAhPT0gb3duZXIgfHxcbiAgICAgIChyZWNvcmQua2luZCA9PT0gJ3N0YWdlJyA/IHBhcnRzLmNhbGwgIT09IHVuZGVmaW5lZCA6IHBhcnRzLmNhbGwgPT09IHVuZGVmaW5lZClcbiAgICApXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNhbm9uaWNhbCA9IGJ1aWxkQXR0ZW1wdElkKHBhcnRzLnJ1bnRpbWVTdGFnZUlkLCBwYXJ0cy5hdHRlbXB0LCBwYXJ0cy5jYWxsKTtcbiAgICByZXR1cm4gY2Fub25pY2FsID09PSBjYW5kaWRhdGUgJiYgdmFsaWRSZWZlcmVuY2UoY2Fub25pY2FsKSA/IGNhbm9uaWNhbCA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG50eXBlIFRlcm1pbmFsUHJvb2YgPSBQaWNrPEF0dGVtcHRSZWNvcmQsICduZXh0JyB8ICdyZWFzb24nIHwgJ2VmZmVjdCc+ICYgeyByZWFkb25seSBldmlkZW5jZTogc3RyaW5nIH07XG5cbi8qKiBPbmUgZXhlY3V0aW9uJ3Mgb3duZXJzaGlwLCBwZW5kaW5nIHN1bW1hcnksIG1hcmtzIGFuZCBvbWlzc2lvbiBhY2NvdW50aW5nIHN0YXkgaW4gdGhpcyBoZWxwZXIuICovXG5leHBvcnQgY2xhc3MgU3RhZ2VBdHRlbnRpb24ge1xuICBwcml2YXRlIG1hcmtzPzogTWFwPHN0cmluZywgQXR0ZW50aW9uPjtcbiAgcHJpdmF0ZSBvbWl0dGVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmV0cnlQb3NzaWJsZSA9IGZhbHNlO1xuICBwcml2YXRlIHN1bW1hcnk/OiBBdHRlbXB0U3VtbWFyeTtcbiAgcHJpdmF0ZSB0ZXJtaW5hbD86IFRlcm1pbmFsUHJvb2Y7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvbk9taXR0ZWQ/OiAoKSA9PiB2b2lkKSB7fVxuXG4gIC8qKiBBIG5ldyBleGVjdXRpb24gc3RhcnRzIGZyZXNoOyBhbiBhdHRlbXB0IGRpc2NhcmQgbmV2ZXIgY2FsbHMgdGhpcy4gTm8gY29sbGVjdGlvbiBpcyByZWNvbnN0cnVjdGVkLiAqL1xuICBiZWdpbigpOiB2b2lkIHtcbiAgICB0aGlzLm1hcmtzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMub21pdHRlZCA9IGZhbHNlO1xuICAgIHRoaXMucmV0cnlQb3NzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuc3VtbWFyeSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRlcm1pbmFsID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIENhbGxlZCBvbmx5IGFmdGVyIHRoZSBmcmFtZSByZXRhaW5lZCB0aGlzIGF0dGVtcHQuIFJhdyBlcnJvciwgdGFyZ2V0IGFuZCBkZWNpc2lvbiBwYXlsb2FkcyBhcmUgbmV2ZXIgcmVhZC4gKi9cbiAgcmVjb3JkQXR0ZW1wdChyZWNvcmQ6IEF0dGVtcHRSZWNvcmQsIG93bmVyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCByZWZlcmVuY2UgPSBhdHRlbXB0UmVmZXJlbmNlKHJlY29yZCwgb3duZXIpO1xuICAgIGlmIChyZWNvcmQua2luZCA9PT0gJ3N0YWdlJyAmJiByZWNvcmQuc2VyaWVzID09PSBvd25lcikge1xuICAgICAgaWYgKHJlY29yZC5yZXRyeUxvb3AgPT09IHVuZGVmaW5lZCAmJiAocmVjb3JkLm9mID8/IDEpID4gMSkgdGhpcy5yZXRyeVBvc3NpYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChyZWZlcmVuY2UgJiYgcmVjb3JkLm5leHQgIT09ICdyZXRyeScpIHtcbiAgICAgICAgdGhpcy50ZXJtaW5hbCA9IHsgbmV4dDogcmVjb3JkLm5leHQsIHJlYXNvbjogcmVjb3JkLnJlYXNvbiwgZWZmZWN0OiByZWNvcmQuZWZmZWN0LCBldmlkZW5jZTogcmVmZXJlbmNlIH07XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFRoZSBydW5uZXIgY2FsbHMgcmVjb3JkU3VtbWFyeSBiZWZvcmUgaXRzIGZpbmFsIGF0dGVtcHQuIEZpbmlzaCB0aGF0IHBlbmRpbmcgcHJvamVjdGlvbiBub3cgdG9vLlxuICAgIHRoaXMucHJvamVjdFN1bW1hcnkoKTtcbiAgICBjb25zdCBhZGQgPSAoa2luZDogQXR0ZW50aW9uWydraW5kJ10sIHJlYXNvbjogQXR0ZW50aW9uWydyZWFzb24nXSkgPT4ge1xuICAgICAgaWYgKHJlZmVyZW5jZSkgdGhpcy5hcHBlbmQoeyBraW5kLCByZWFzb24sIGV2aWRlbmNlOiBbcmVmZXJlbmNlXSB9KTtcbiAgICAgIGVsc2UgdGhpcy5taXNzaW5nKCk7XG4gICAgfTtcbiAgICBpZiAocmVjb3JkLmVmZmVjdCA9PT0gJ3Vua25vd24nKSBhZGQoJ3Vua25vd24tZWZmZWN0JywgJ1VOS05PV05fRUZGRUNUX1JFQ09SREVEJyk7XG4gICAgaWYgKHJlY29yZC5vdXRjb21lID09PSAndGltZW91dCcpIGFkZCgndGltZW91dCcsICdUSU1FT1VUX1JFQ09SREVEJyk7XG4gICAgLy8gQW4gU0RLJ3Mgc3VnZ2VzdGVkIG5leHQvcmVhc29uIGlzIG5vdCBpdHMgYWN0dWFsIHBvbGljeTsgb25seSBhIGxhdGVyIG9yZGluYWwgcHJvdmVzIGl0cyByZXRyeS5cbiAgICBjb25zdCBvYnNlcnZlZCA9IHJlY29yZC5raW5kID09PSAnb2JzZXJ2ZWQnO1xuICAgIGlmICgoIW9ic2VydmVkICYmIHJlY29yZC5uZXh0ID09PSAncmV0cnknKSB8fCByZWNvcmQuYXR0ZW1wdCA+IDEpIGFkZCgncmV0cmllZCcsICdSRVRSWV9SRUNPUkRFRCcpO1xuICAgIGlmIChcbiAgICAgICFvYnNlcnZlZCAmJlxuICAgICAgcmVjb3JkLm5leHQgPT09ICdzdG9wJyAmJlxuICAgICAgU1RPUFBFRF9SRUFTT05TLmhhcyhyZWNvcmQucmVhc29uKSAmJlxuICAgICAgKHJlY29yZC5vZiA/PyAxKSA+IDEgJiZcbiAgICAgIHJlY29yZC5yZXRyeUxvb3AgPT09IHVuZGVmaW5lZFxuICAgIClcbiAgICAgIGFkZCgnZ2F2ZS11cCcsICdSRVRSWV9TVE9QX1JFQ09SREVEJyk7XG4gIH1cblxuICByZWNvcmRTdW1tYXJ5KHN1bW1hcnk6IEF0dGVtcHRTdW1tYXJ5KTogdm9pZCB7XG4gICAgdGhpcy5zdW1tYXJ5ID0gc3VtbWFyeTtcbiAgICB0aGlzLnByb2plY3RTdW1tYXJ5KCk7XG4gIH1cblxuICAvKiogQSBzdW1tYXJ5LW9ubHkgY3V0IHdhaXQgaGFzIG5vIHBoYW50b20gZmluYWwgYXR0ZW1wdDsgdXNlIGl0cyBhY3R1YWwgcmV0YWluZWQgc3VtbWFyeS4gKi9cbiAgcHJpdmF0ZSBwcm9qZWN0U3VtbWFyeSgpOiB2b2lkIHtcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5zdW1tYXJ5Py5sYXN0O1xuICAgIGlmICghbGFzdCkgcmV0dXJuO1xuICAgIGNvbnN0IHRlcm1pbmFsID0gdGhpcy50ZXJtaW5hbDtcbiAgICBjb25zdCBtYXRjaGluZyA9IHRlcm1pbmFsPy5uZXh0ID09PSBsYXN0Lm5leHQgJiYgdGVybWluYWwucmVhc29uID09PSBsYXN0LnJlYXNvbjtcbiAgICBjb25zdCBhZGQgPSAoa2luZDogQXR0ZW50aW9uWydraW5kJ10sIHJlYXNvbjogQXR0ZW50aW9uWydyZWFzb24nXSwgcHJvb2Y/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHByb29mID8/ICdhdHRlbXB0U3VtbWFyeSc7XG4gICAgICBjb25zdCBrZXkgPSBraW5kICsgJzonICsgcmVhc29uO1xuICAgICAgY29uc3QgbWFya3MgPSB0aGlzLm1hcmtzO1xuICAgICAgY29uc3QgcHJldmlvdXMgPSBtYXJrcz8uZ2V0KGtleSk7XG4gICAgICBpZiAocHJvb2YgJiYgbWFya3MgJiYgcHJldmlvdXM/LmV2aWRlbmNlLmluY2x1ZGVzKCdhdHRlbXB0U3VtbWFyeScpKSB7XG4gICAgICAgIG1hcmtzLnNldChrZXksIHsgLi4ucHJldmlvdXMsIGV2aWRlbmNlOiBwcmV2aW91cy5ldmlkZW5jZS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09ICdhdHRlbXB0U3VtbWFyeScpIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5hcHBlbmQoeyBraW5kLCByZWFzb24sIGV2aWRlbmNlOiBbcmVmZXJlbmNlXSB9KTtcbiAgICB9O1xuICAgIGlmIChsYXN0LmVmZmVjdCA9PT0gJ3Vua25vd24nKVxuICAgICAgYWRkKFxuICAgICAgICAndW5rbm93bi1lZmZlY3QnLFxuICAgICAgICAnVU5LTk9XTl9FRkZFQ1RfUkVDT1JERUQnLFxuICAgICAgICBtYXRjaGluZyAmJiB0ZXJtaW5hbC5lZmZlY3QgPT09ICd1bmtub3duJyA/IHRlcm1pbmFsLmV2aWRlbmNlIDogdW5kZWZpbmVkLFxuICAgICAgKTtcbiAgICBpZiAodGhpcy5yZXRyeVBvc3NpYmxlICYmIGxhc3QubmV4dCA9PT0gJ3N0b3AnICYmIFNUT1BQRURfUkVBU09OUy5oYXMobGFzdC5yZWFzb24pKVxuICAgICAgYWRkKCdnYXZlLXVwJywgJ1JFVFJZX1NUT1BfUkVDT1JERUQnLCBtYXRjaGluZyA/IHRlcm1pbmFsLmV2aWRlbmNlIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKiBPbmx5IHRoZSBleHBsaWNpdCByZXRhaW5lZCBzdGFnZS1lcnJvciBwYXRoIGNhbGxzIHRoaXM7IGEgZGlhZ25vc3RpYyB2YWx1ZSBuZXZlciBjbGFzc2lmaWVzIGl0c2VsZi4gKi9cbiAgc3RhZ2VGYWlsZWQoZXJyb3JzOiB1bmtub3duKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPVxuICAgICAgICBlcnJvcnMgJiYgdHlwZW9mIGVycm9ycyA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXJyb3JzLCAnc3RhZ2VFeGVjdXRpb25FcnJvcicpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZGVzY3JpcHRvciAmJiBPYmplY3QuaGFzT3duKGRlc2NyaXB0b3IsICd2YWx1ZScpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKHsga2luZDogJ2Vycm9yJywgcmVhc29uOiAnRVJST1JfUkVDT1JERUQnLCBldmlkZW5jZTogWydlcnJvcnM6c3RhZ2VFeGVjdXRpb25FcnJvciddIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBBIG1hbGZvcm1lZCBldmlkZW5jZSBiYWcgaXMgdW5hdmFpbGFibGUsIG5ldmVyIGFub3RoZXIgc3RhZ2UgZmFpbHVyZS4gKi9cbiAgICB9XG4gICAgdGhpcy5taXNzaW5nKCk7XG4gIH1cblxuICBhdHRlbXB0RHJvcHBlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFwcGVuZCh7IGtpbmQ6ICdub3QtY29sbGVjdGVkJywgcmVhc29uOiAnRVZJREVOQ0VfTk9UX0NPTExFQ1RFRCcsIGV2aWRlbmNlOiBbJ2F0dGVtcHRzRHJvcHBlZCddIH0pO1xuICB9XG5cbiAgLyoqIEtlZXAgb25seSBib3VuZGVkIGV4YWN0IHJlZmVyZW5jZXM7IG9uZSBzbG90IGlzIHJlc2VydmVkIHRvIGRpc2Nsb3NlIG9taXNzaW9ucy4gKi9cbiAgYXBwZW5kKGF0dGVudGlvbjogQXR0ZW50aW9uKTogdm9pZCB7XG4gICAgaWYgKGF0dGVudGlvbi5raW5kID09PSAnbm90LWNvbGxlY3RlZCcpIHRoaXMub25PbWl0dGVkPy4oKTtcbiAgICBjb25zdCBrZXkgPSBhdHRlbnRpb24ua2luZCArICc6JyArIGF0dGVudGlvbi5yZWFzb247XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLm1hcmtzPy5nZXQoa2V5KTtcbiAgICBjb25zdCByZWZlcmVuY2VzID0gWy4uLihwcmV2aW91cz8uZXZpZGVuY2UgPz8gW10pXTtcbiAgICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiBhdHRlbnRpb24uZXZpZGVuY2UpIHtcbiAgICAgIGlmICghdmFsaWRSZWZlcmVuY2UocmVmZXJlbmNlKSkge1xuICAgICAgICB0aGlzLm1pc3NpbmcoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocmVmZXJlbmNlcy5pbmNsdWRlcyhyZWZlcmVuY2UpKSBjb250aW51ZTtcbiAgICAgIGlmIChyZWZlcmVuY2VzLmxlbmd0aCA+PSBNQVhfUkVGRVJFTkNFUykge1xuICAgICAgICB0aGlzLm1pc3NpbmcoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgICB9XG4gICAgaWYgKGF0dGVudGlvbi5raW5kICE9PSAnbm90LWNvbGxlY3RlZCcgJiYgcmVmZXJlbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMubWlzc2luZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXByZXZpb3VzICYmICh0aGlzLm1hcmtzPy5zaXplID8/IDApID49IE1BWF9NQVJLUyAtIDEpIHtcbiAgICAgIHRoaXMubWlzc2luZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAodGhpcy5tYXJrcyA/Pz0gbmV3IE1hcCgpKS5zZXQoa2V5LCB7IGtpbmQ6IGF0dGVudGlvbi5raW5kLCByZWFzb246IGF0dGVudGlvbi5yZWFzb24sIGV2aWRlbmNlOiByZWZlcmVuY2VzIH0pO1xuICB9XG5cbiAgbWlzc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLm9taXR0ZWQgPSB0cnVlO1xuICAgIHRoaXMub25PbWl0dGVkPy4oKTtcbiAgfVxuXG4gIC8qKiBDb3B5IGFscmVhZHkgY29sbGVjdGVkIGJvdW5kZWQgbWFya3MsIG5ldmVyIGFuIGF0dGVtcHQgYXJyYXksIGRpYWdub3N0aWMgYmFnIG9yIGV4ZWN1dGlvbiB0cmVlLiAqL1xuICBzbmFwc2hvdCgpOiByZWFkb25seSBBdHRlbnRpb25bXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gWy4uLih0aGlzLm1hcmtzPy52YWx1ZXMoKSA/PyBbXSldLm1hcCgoYXR0ZW50aW9uKSA9PlxuICAgICAgT2JqZWN0LmZyZWV6ZSh7IC4uLmF0dGVudGlvbiwgZXZpZGVuY2U6IE9iamVjdC5mcmVlemUoWy4uLmF0dGVudGlvbi5ldmlkZW5jZV0pIH0pLFxuICAgICk7XG4gICAgaWYgKHRoaXMub21pdHRlZCAmJiAhcmVzdWx0LnNvbWUoKGF0dGVudGlvbikgPT4gYXR0ZW50aW9uLmtpbmQgPT09ICdub3QtY29sbGVjdGVkJykpIHJlc3VsdC5wdXNoKE1JU1NJTkdfQVRURU5USU9OKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXN1bHQpO1xuICB9XG59XG4iXX0=
@@ -34,6 +34,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
34
34
  exports.derivePolicy = exports.withRedaction = exports.pickDials = exports.runPolicy = exports.DEFAULT_RUN_POLICY = exports.DIAL_DEFAULTS = void 0;
35
35
  /** Each dial's default — the value a run gets when the option is absent. The dial list IS these keys. */
36
36
  exports.DIAL_DEFAULTS = Object.freeze({
37
+ readSources: false,
37
38
  readTracking: 'full',
38
39
  writeTracking: 'full',
39
40
  commitValues: 'full',
@@ -73,4 +74,4 @@ function derivePolicy(policy, patch) {
73
74
  return Object.freeze({ ...policy, ...patch });
74
75
  }
75
76
  exports.derivePolicy = derivePolicy;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcnVuUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHOzs7QUFrSEgseUdBQXlHO0FBQzVGLFFBQUEsYUFBYSxHQUFpQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZFLFlBQVksRUFBRSxNQUFNO0lBQ3BCLGFBQWEsRUFBRSxNQUFNO0lBQ3JCLFlBQVksRUFBRSxNQUFNO0lBQ3BCLGVBQWUsRUFBRSxLQUFLO0NBQ3ZCLENBQUMsQ0FBQztBQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQWEsQ0FBMEIsQ0FBQztBQUV2RSwyR0FBMkc7QUFDOUYsUUFBQSxrQkFBa0IsR0FBYyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxxQkFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBRWhHLG1GQUFtRjtBQUNuRixTQUFnQixTQUFTLENBQUMsUUFBa0IsRUFBRSxFQUFFLFNBQXlCLEVBQUUsTUFBTSxHQUFHLEtBQUs7SUFDdkYsTUFBTSxRQUFRLEdBQTRCLEVBQUUsR0FBRyxxQkFBYSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzVGLElBQUksU0FBUztRQUFFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQXlCLENBQUM7QUFDekQsQ0FBQztBQUpELDhCQUlDO0FBRUQscUZBQXFGO0FBQ3JGLFNBQWdCLFNBQVMsQ0FBQyxNQUFnQjtJQUN4QyxNQUFNLEtBQUssR0FBNEIsRUFBRSxDQUFDO0lBQzFDLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVTtRQUFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFGLE9BQU8sS0FBaUIsQ0FBQztBQUMzQixDQUFDO0FBSkQsOEJBSUM7QUFFRCw2RkFBNkY7QUFDN0YsU0FBZ0IsYUFBYSxDQUFDLE1BQWlCLEVBQUUsU0FBd0I7SUFDdkUsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRkQsc0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE1BQWlCLEVBQUUsS0FBeUI7SUFDdkUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFGRCxvQ0FFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVuUG9saWN5IOKAlCB3aGF0IGEgcnVuIHJldGFpbnMsIGVuY29kZXMgYW5kIHNjcnVicywgYXMgT05FIGltbXV0YWJsZSBvYmplY3QgKEY1KS5cbiAqXG4gKiBXSFkuIEEgcnVuIGNhcnJpZXMgc2l4IHNldHRpbmdzIHRoYXQgZXZlcnkgc3RhZ2UgZnJhbWUgbXVzdCBhZ3JlZSBvbjogdGhlIGZvdXJcbiAqIG9ic2VydmFiaWxpdHkgZGlhbHMgKGByZWFkVHJhY2tpbmdgLCBgd3JpdGVUcmFja2luZ2AsIGBjb21taXRWYWx1ZXNgLCBgd3JpdGVQcm92ZW5hbmNlYCksXG4gKiB0aGUgcmVkYWN0aW9uIHJ1bGUsIGFuZCB3aGV0aGVyIGEgcmVkYWN0ZWQgbWlycm9yIGlzIGtlcHQuIFVudGlsIDkuMzQuMCBlYWNoIG9uZSB3YXNcbiAqIGNvcGllZCBmaWVsZCBieSBmaWVsZCBkb3duIHRocmVlIHNlcGFyYXRlIHBhdGhzIOKAlCBgRXhlY3V0aW9uUnVudGltZS51c2UqYCBvbiB0aGUgcm9vdCxcbiAqIGBTdGFnZUNvbnRleHQuY3JlYXRlTmV4dGAvYGNyZWF0ZUNoaWxkYCAoc2l4IGFzc2lnbm1lbnRzIGVhY2gpLCBhbmQgYSBkdWNrLXR5cGVkIHB1c2ggcGVyXG4gKiBkaWFsIGluIGBTdWJmbG93RXhlY3V0b3JgIOKAlCBzbyBhIG5ldyBkaWFsIG1lYW50IHNpeCBlZGl0cywgYW5kIGEgbWlzc2VkIG9uZSByYW4gYSBzdWJmbG93XG4gKiBvbiB0aGUgZGVmYXVsdCBzaWxlbnRseS4gTm93IHRoZSBleGVjdXRvciBidWlsZHMgT05FIHBvbGljeSBwZXIgcnVuIChhbmQgcGVyIHJlc3VtZSksIHRoZVxuICogcnVudGltZSBpbnN0YWxscyBpdCBvbiBpdHMgcm9vdCBmcmFtZSwgYW5kIGV2ZXJ5IGZyYW1lIGhvbGRzIGl0IEJZIFJFRkVSRU5DRTogYSBjaGlsZCwgYVxuICogY29udGludWF0aW9uIGFuZCBhIHN1YmZsb3cncyByb290IChpdHMgc2VlZCBmcmFtZSBpbmNsdWRlZCkgYWxsIHBvaW50IGF0IHRoZSBzYW1lIG9iamVjdC5cbiAqIFRoZSBib3Jyb3dlZCBpZGVhIGlzIEdvJ3MgYGNvbnRleHQuQ29udGV4dGAgLyBPcGVuVGVsZW1ldHJ5J3MgYENvbnRleHRgOiBhbiBpbW11dGFibGUgdmFsdWVcbiAqIGhhbmRlZCBkb3duLCBuZXZlciBjb3BpZWQgYXBhcnQuXG4gKlxuICogQURESU5HIEEgRElBTCBpcyB0d28gZmlsZXM6IGEgZmllbGQgKyBpdHMgZGVmYXVsdCBoZXJlICh7QGxpbmsgUnVuRGlhbHN9LFxuICoge0BsaW5rIERJQUxfREVGQVVMVFN9KSwgYW5kIHRoZSBmcmFtZSBjb2RlIHRoYXQgcmVhZHMgYHBvbGljeS48ZGlhbD5gIChgU3RhZ2VDb250ZXh0YCkuIFRoZVxuICogZXhlY3V0b3IncyBvcHRpb25zIGluaGVyaXQge0BsaW5rIFJ1bkRpYWxzfSwgcGlja3MgdGhlbSB3aXRoIHtAbGluayBwaWNrRGlhbHN9LCBhbmQgZXZlcnlcbiAqIHByb3BhZ2F0aW9uIHBhdGggY2FycmllcyB0aGUgd2hvbGUgb2JqZWN0IOKAlCBub25lIG9mIHRoZW0gbmFtZXMgYSBkaWFsLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBwb2xpY3kgPSBydW5Qb2xpY3koeyBjb21taXRWYWx1ZXM6ICdkZWx0YScgfSwgcnVsZSwgdHJ1ZSk7XG4gKiBwb2xpY3kucmVhZFRyYWNraW5nOyAvLyAnZnVsbCcg4oCUIGFuIGFic2VudCBkaWFsIGlzIGl0cyBkZWZhdWx0XG4gKiBPYmplY3QuaXNGcm96ZW4ocG9saWN5KTsgLy8gdHJ1ZSDigJQgYSBmcmFtZSBjYW4gbmV2ZXIgZWRpdCB3aGF0IGl0cyBzaWJsaW5ncyBzaGFyZVxuICogYGBgXG4gKlxuICogVGhlIFJVTEUgaW5zaWRlIGlzIHNoYXJlZCB0b28sIGFuZCBpcyBpdHNlbGYgc3RhdGVmdWwgYnkgZGVzaWduIChwZXItY2FsbCBgc2V0VmFsdWUoaywgdixcbiAqIHRydWUpYCBtYXJrcyBhIGtleSBvbiBpdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJ1bik7IHRoZSBwb2xpY3kgZnJlZXplcyB3aGljaCBydWxlLCBub3QgdGhlXG4gKiBydWxlJ3MgbWFya3MuIFRoZSBtaXJyb3IgU1RPUkUgaXMgbm90IHBvbGljeSDigJQgZWFjaCBydW50aW1lIChhIHN1YmZsb3cgaGFzIGl0cyBvd24pIGtlZXBzXG4gKiBpdHMgb3duIHN0b3JlIHdoZW4gYG1pcnJvcmAgaXMgc2V0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tbWl0VmFsdWVzTW9kZSB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgdHlwZSB7IFdyaXRlUHJvdmVuYW5jZU1vZGUgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IFJlYWRUcmFja2luZ01vZGUsIFdyaXRlVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9mcmFtZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVkYWN0aW9uUnVsZSB9IGZyb20gJy4vcmVkYWN0aW9uLmpzJztcblxuLyoqXG4gKiBUaGUgZm91ciBvYnNlcnZhYmlsaXR5IGRpYWxzIGFzIGFuIGV4ZWN1dG9yIHRha2VzIHRoZW0g4oCUIGV2ZXJ5IGZpZWxkIG9wdGlvbmFsLCBhbiBhYnNlbnRcbiAqIG9uZSBpcyBpdHMgZGVmYXVsdC4gYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9uc2AgZXh0ZW5kcyB0aGlzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5EaWFscyB7XG4gIC8qKlxuICAgKiBQb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpLiBEZWZhdWx0IGAnZnVsbCdgIOKAlCBldmVyeVxuICAgKiB0cmFja2VkIHJlYWQgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvIHRoZSBzdGFnZSdzIHJlYWQgdmlld1xuICAgKiAodGhlIGhpc3RvcmljYWwgYmVoYXZpb3I7IHdoYXQgbGVucy9hZ2VudGZvb3RwcmludCBzbmFwc2hvdHMgc2hvdykuXG4gICAqIGAnc3VtbWFyeSdgIHJlY29yZHMgYSBjaGVhcCB0eXBlL3NpemUvcHJldmlldyBtYXJrZXIgcGVyIHJlYWQ7IGAnb2ZmJ2BcbiAgICogcmVjb3JkcyBub3RoaW5nIOKAlCB6ZXJvIHBlci1yZWFkIGNsb25lIGNvc3QgKHJlYWRzIG9mIGxhcmdlIHZhbHVlcyBiZWNvbWVcbiAgICogfmZyZWUpLiBOYXJyYXRpdmUgYW5kIGBTY29wZVJlY29yZGVyLm9uUmVhZGAgYXJlIGlkZW50aWNhbCBpbiBldmVyeSBtb2RlLlxuICAgKiBDYXZlYXQ6IHVuZGVyIGAnb2ZmJ2AgYSBzdGFnZSdzIHNuYXBzaG90IGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gb25lXG4gICAqIHRoYXQgcmVhZCBub3RoaW5nIOKAlCBhdWRpdGluZyBjb25zdW1lcnMgdGhhdCBuZWVkIFwiZGlkIGl0IHJlYWQ/XCIgd2l0aG91dFxuICAgKiB0aGUgdmFsdWUgY29zdCBzaG91bGQgcHJlZmVyIGAnc3VtbWFyeSdgLlxuICAgKiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gICAqL1xuICByZWFkVHJhY2tpbmc/OiBSZWFkVHJhY2tpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBQb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlIHNpYmxpbmcgb2ZcbiAgICoge0BsaW5rIHJlYWRUcmFja2luZ307IHRoZSB0d28gZGlhbHMgYXJlIGluZGVwZW5kZW50LiBEZWZhdWx0IGAnZnVsbCdgIOKAlFxuICAgKiBldmVyeSB0cmFja2VkIHdyaXRlIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50byB0aGUgc3RhZ2UncyB3cml0ZVxuICAgKiB2aWV3ICh0aGUgaGlzdG9yaWNhbCBiZWhhdmlvcikuIGAnc3VtbWFyeSdgIHJlY29yZHMgYSBjaGVhcFxuICAgKiBgV3JpdGVTdW1tYXJ5TWFya2VyYCAodHlwZS9zaXplL3ByZXZpZXcpIHBlciB3cml0ZTsgYCdvZmYnYCByZWNvcmRzXG4gICAqIG5vdGhpbmcg4oCUIGBzdGFnZVdyaXRlc2AgaXMgYWJzZW50IGZyb20gdGhlIHNuYXBzaG90LlxuICAgKlxuICAgKiBPYnNlcnZhYmxlIGNvbnNlcXVlbmNlcyDigJQgd2hhdCB0aGUgcG9saWN5IERPRVMgZ292ZXJuOlxuICAgKiAtIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAobWFya2VycyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50IHVuZGVyXG4gICAqICAgYCdvZmYnYCkuXG4gICAqIC0gVGhlIGNvbW1pdCBvYnNlcnZlciBwYXlsb2FkOiBgU2NvcGVSZWNvcmRlci5vbkNvbW1pdChtdXRhdGlvbnMpYFxuICAgKiAgIHJlY2VpdmVzIHRoZSByZXRhaW5lZCBgX3N0YWdlV3JpdGVzYCBlbnRyaWVzLCBzbyBpdCBjYXJyaWVzIHRoZSBzYW1lXG4gICAqICAgbWFya2VycyB1bmRlciBgJ3N1bW1hcnknYCBhbmQgYW4gZW1wdHkgbXV0YXRpb25zIGJhZyB1bmRlciBgJ29mZidgIOKAlFxuICAgKiAgIGRlZmVycmVkL29ic2VydmVyIGNvbnN1bWVycyBzZWUgZXhhY3RseSB3aGF0IHJldGVudGlvbiBzdG9yZWQuXG4gICAqXG4gICAqIFdoYXQgaXQgZG9lcyBOT1QgZ292ZXJuOlxuICAgKiAtIFRoZSB3cml0ZXMgdGhlbXNlbHZlczogc2hhcmVkIHN0YXRlLCB0aGUgdHJhbnNhY3Rpb24gYnVmZmVyLCBhbmQgdGhlXG4gICAqICAgQ09NTUlUIExPRyBhcmUgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUgKGNvbW1pdExvZyB2YWx1ZXMga2VlcCB0aGVpclxuICAgKiAgIGZ1bGwgcGF5bG9hZHMg4oCUIHRoZSBsb3NzbGVzcyBsaW5lYXItY29zdCBmaXggZm9yIHRob3NlIGlzIHRoZVxuICAgKiAgIHtAbGluayBjb21taXRWYWx1ZXN9IGRpYWwsICMxM2MtQikuXG4gICAqIC0gUGVyLW9wIGBTY29wZVJlY29yZGVyLm9uV3JpdGVgIGV2ZW50cyDigJQgdGhleSBmaXJlIHdpdGggbGl2ZSB2YWx1ZXNcbiAgICogICByZWdhcmRsZXNzIChkZWxpdmVyeSB0aWVyLCBSRkMtMDAxJ3MgY29uY2VybiksIHNvIG5hcnJhdGl2ZSBvdXRwdXQgaXNcbiAgICogICBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS5cbiAgICogLSBSZWRhY3Rpb246IGEgcG9saWN5L3Blci1jYWxsLXJlZGFjdGVkIHdyaXRlIHN0b3JlcyBgJ1tSRURBQ1RFRF0nYFxuICAgKiAgIHVuZGVyIGAnZnVsbCdgIEFORCBgJ3N1bW1hcnknYCAocmVkYWN0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGVcbiAgICogICBkaWFsOyBhIG1hcmtlciB3b3VsZCBsZWFrIHNpemUvcHJldmlldyksIGFuZCBub3RoaW5nIHVuZGVyIGAnb2ZmJ2AuXG4gICAqXG4gICAqIENhdmVhdDogdW5kZXIgYCdvZmYnYCBhIHN0YWdlJ3MgU05BUFNIT1QgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBvbmVcbiAgICogdGhhdCB3cm90ZSBub3RoaW5nIOKAlCBidXQgdW5saWtlIGByZWFkVHJhY2tpbmc6ICdvZmYnYCwgdGhlIGNvbW1pdCBsb2dcbiAgICogc3RpbGwgcmVjb3JkcyBldmVyeSBuZXQgY2hhbmdlLCBzbyBcImRpZCBpdCB3cml0ZT9cIiBzdGF5cyBhbnN3ZXJhYmxlLlxuICAgKiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICAgKi9cbiAgd3JpdGVUcmFja2luZz86IFdyaXRlVHJhY2tpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBFbmNvZGluZyBwb2xpY3kgZm9yIENPTU1JVCBMT0cgdmFsdWVzICgjMTNjLUIpIOKAlCB0aGUgdGhpcmQgZGlhbCBvZiB0aGVcbiAgICogZmFtaWx5LCBhbmQgdW5saWtlIGl0cyBzaWJsaW5ncyBpdCBpcyAqKmxvc3NsZXNzIGluIGJvdGggbW9kZXMqKiAoaXRcbiAgICogY2hhbmdlcyB0aGUgbG9nJ3MgZW5jb2RpbmcsIG5ldmVyIGl0cyBpbmZvcm1hdGlvbikuXG4gICAqXG4gICAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSBzdXJ2aXZpbmcgYHNldGAgcGF0aCBzdG9yZXMgdGhlIGZ1bGwgZmluYWxcbiAgICogICB2YWx1ZTsgYnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3IuXG4gICAqIC0gYCdkZWx0YSdgIOKAlCBhcnJheSBuZXQtY2hhbmdlcyB0aGF0IGFyZSBcImJhc2UgcGx1cyBhIHRhaWxcIiBjb21taXQgYXMgYW5cbiAgICogICBgYXBwZW5kYCB0cmFjZSB2ZXJiIHN0b3JpbmcgT05MWSB0aGUgdGFpbCAodGhlIGdyb3dpbmctaGlzdG9yeSBjb21taXRcbiAgICogICBsb2cgYmVjb21lcyBsaW5lYXIgaW5zdGVhZCBvZiBPKE7CsikgcmV0YWluZWQpOyBgZGVsZXRlVmFsdWUoKWAgY29tbWl0c1xuICAgKiAgIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiIChyZXBsYXkgcmVtb3ZlcyB0aGUga2V5IGluc3RlYWQgb2YgbGVhdmluZ1xuICAgKiAgIGBrZXk6IHVuZGVmaW5lZGApOyBidW5kbGVzIGNhcnJ5IGV4YWN0bHkgT05FIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmdcbiAgICogICBwYXRoLiBSZXBsYXkgKHRoZSBvbmUgdmVyYiBsYXcg4oCUIGxpdmUgc3RhdGUsIGBtYXRlcmlhbGlzZSgpYCwgdGhlXG4gICAqICAgcmVkYWN0ZWQgbWlycm9yLCBgc3RhdGVBdGApIHJlY29uc3RydWN0cyBldmVyeSBzdGVwJ3MgZnVsbCBzdGF0ZVxuICAgKiAgIGV4YWN0bHkuXG4gICAqXG4gICAqIENvbnN1bWVycyB0aGF0IHJlYWQgYGJ1bmRsZS5vdmVyd3JpdGVba2V5XWAgYXMgXCJ0aGUgZnVsbCB2YWx1ZSB3cml0dGVuXCJcbiAgICogbXVzdCBzd2l0Y2ggdG8gYGNvbW1pdFZhbHVlQXQoY29tbWl0TG9nLCBpZHgsIGtleSlgIGZyb21cbiAgICogYGZvb3R0cmFjZWAg4oCUIHVuZGVyIGAnZGVsdGEnYCB0aGF0IHZhbHVlIGlzIHZlcmItcXVhbGlmaWVkIChhblxuICAgKiBgYXBwZW5kYCBidW5kbGUgaG9sZHMgb25seSB0aGUgdGFpbCkuIFBhdGgtdGllciBjb25zdW1lcnNcbiAgICogKGBmaW5kTGFzdFdyaXRlcmAsIGBjYXVzYWxDaGFpbmAsIG5hcnJhdGl2ZSwgbGVucyBoaWdobGlnaHRzKSBhcmVcbiAgICogdW5hZmZlY3RlZC4gVGhlIGFjdGl2ZSBtb2RlIGlzIHN1cmZhY2VkIGFzXG4gICAqIGBnZXRTbmFwc2hvdCgpLmNvbW1pdFZhbHVlc2AuXG4gICAqXG4gICAqIEhvbmVzdCBjb3N0IG5vdGU6IGFwcGVuZCBkZXRlY3Rpb24gaXMgbmV3IHdhbGwgd29yayDigJQgYW4gTyh8YmFzZSBhcnJheXwpXG4gICAqIHN0cnVjdHVyYWwgcHJlZml4IGNvbXBhcmUgcGVyIGFycmF5LXNldCBwYXRoIHBlciBjb21taXQuIE9uIGEgaGl0IHRoZVxuICAgKiBjb21taXQgZ2V0cyBjaGVhcGVyIGluIGJvdGggd2FsbCBhbmQgaGVhcDsgb24gYSBtaXNzIChwcmVmaXggZGl2ZXJnZXMpXG4gICAqIGl0IHBheXMgY29tcGFyZSArIGZ1bGwgY2xvbmUuIGAnZnVsbCdgIHBheXMgemVyby5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRDb21taXRWYWx1ZXMobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICAgKi9cbiAgY29tbWl0VmFsdWVzPzogQ29tbWl0VmFsdWVzTW9kZTtcblxuICAvKipcbiAgICogUGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAoI1AxKSDigJQgdGhlIGZvdXJ0aCBkaWFsIG9mIHRoZSBmYW1pbHkuIERlZmF1bHRcbiAgICogYCdvZmYnYDogemVybyBjb3N0LCBieXRlLWlkZW50aWNhbCBjb21taXQgbG9ncy4gYCdyZWFkcy1wcmVmaXgnYDogZXZlcnlcbiAgICogY29tbWl0dGVkIGBUcmFjZUVudHJ5YCBjYXJyaWVzIGByZWFkS2V5c2Ag4oCUIHRoZSBrZXlzIHRyYWNrZWQtcmVhZCBCRUZPUkVcbiAgICogdGhhdCB3cml0ZSDigJQgZW5hYmxpbmcgcGVyLXdyaXRlIGNhdXNhbCBhdHRyaWJ1dGlvbiAoYGNhdXNhbENoYWluYCdzXG4gICAqIGBlZGdlQXR0cmlidXRpb246ICdwZXItd3JpdGUnYCBhbmQgdmFyaWFibGUgc2xpY2VzKS4gQ29zdDogb25lIHNtYWxsXG4gICAqIGFycmF5IGNvcHkgcGVyIHdyaXRlLiBTbmFwc2hvdCBkaXNjcmltaW5hbnQ6XG4gICAqIGBnZXRTbmFwc2hvdCgpLndyaXRlUHJvdmVuYW5jZWAuXG4gICAqL1xuICB3cml0ZVByb3ZlbmFuY2U/OiBXcml0ZVByb3ZlbmFuY2VNb2RlO1xufVxuXG4vKiogVGhlIHJ1bidzIHBvbGljeTogZXZlcnkgZGlhbCByZXNvbHZlZCwgcGx1cyB0aGUgcmVkYWN0aW9uIHJ1bGUgYW5kIHRoZSBtaXJyb3IgZmxhZy4gRnJvemVuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5Qb2xpY3kgZXh0ZW5kcyBSZWFkb25seTxSZXF1aXJlZDxSdW5EaWFscz4+IHtcbiAgLyoqIFRoZSBydW4ncyByZWRhY3Rpb24gcnVsZSDigJQgdGhlIE9ORSBvd25lciBvZiB0aGUgdmVyZGljdCAoYHJlZGFjdGlvbi50c2ApLiBBYnNlbnQgb24gYmFyZSBmcmFtZXMuICovXG4gIHJlYWRvbmx5IHJlZGFjdGlvbj86IFJlZGFjdGlvblJ1bGU7XG4gIC8qKiBLZWVwIGEgcmVkYWN0ZWQgbWlycm9yIG9mIHRoZSBoZWFwIChhIHJ1biB3aXRoIGEgcmVkYWN0aW9uIHBvbGljeSkuIEVhY2ggcnVudGltZSBvd25zIGl0cyBvd24gc3RvcmUuICovXG4gIHJlYWRvbmx5IG1pcnJvcjogYm9vbGVhbjtcbn1cblxuLyoqIEVhY2ggZGlhbCdzIGRlZmF1bHQg4oCUIHRoZSB2YWx1ZSBhIHJ1biBnZXRzIHdoZW4gdGhlIG9wdGlvbiBpcyBhYnNlbnQuIFRoZSBkaWFsIGxpc3QgSVMgdGhlc2Uga2V5cy4gKi9cbmV4cG9ydCBjb25zdCBESUFMX0RFRkFVTFRTOiBSZWFkb25seTxSZXF1aXJlZDxSdW5EaWFscz4+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHJlYWRUcmFja2luZzogJ2Z1bGwnLFxuICB3cml0ZVRyYWNraW5nOiAnZnVsbCcsXG4gIGNvbW1pdFZhbHVlczogJ2Z1bGwnLFxuICB3cml0ZVByb3ZlbmFuY2U6ICdvZmYnLFxufSk7XG5cbmNvbnN0IERJQUxfTkFNRVMgPSBPYmplY3Qua2V5cyhESUFMX0RFRkFVTFRTKSBhcyBBcnJheTxrZXlvZiBSdW5EaWFscz47XG5cbi8qKiBFdmVyeSBkZWZhdWx0LCBubyBydWxlLCBubyBtaXJyb3Ig4oCUIHdoYXQgYSBiYXJlIGZyYW1lIChhIHVuaXQgdGVzdCdzIGBuZXcgU3RhZ2VDb250ZXh0YCkgcnVucyB1bmRlci4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JVTl9QT0xJQ1k6IFJ1blBvbGljeSA9IE9iamVjdC5mcmVlemUoeyAuLi5ESUFMX0RFRkFVTFRTLCBtaXJyb3I6IGZhbHNlIH0pO1xuXG4vKiogQnVpbGQgYSBydW4ncyBwb2xpY3k6IGFic2VudCBkaWFscyB0YWtlIHRoZWlyIGRlZmF1bHQ7IHRoZSByZXN1bHQgaXMgZnJvemVuLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blBvbGljeShkaWFsczogUnVuRGlhbHMgPSB7fSwgcmVkYWN0aW9uPzogUmVkYWN0aW9uUnVsZSwgbWlycm9yID0gZmFsc2UpOiBSdW5Qb2xpY3kge1xuICBjb25zdCByZXNvbHZlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLkRJQUxfREVGQVVMVFMsIC4uLnBpY2tEaWFscyhkaWFscyksIG1pcnJvciB9O1xuICBpZiAocmVkYWN0aW9uKSByZXNvbHZlZC5yZWRhY3Rpb24gPSByZWRhY3Rpb247XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHJlc29sdmVkKSBhcyB1bmtub3duIGFzIFJ1blBvbGljeTtcbn1cblxuLyoqIFRoZSBkaWFscyBzZXQgb24gYHNvdXJjZWAgKGFuIG9wdGlvbnMgb2JqZWN0LCBzYXkpIOKAlCBhbmQgbm90aGluZyBlbHNlIGZyb20gaXQuICovXG5leHBvcnQgZnVuY3Rpb24gcGlja0RpYWxzKHNvdXJjZTogUnVuRGlhbHMpOiBSdW5EaWFscyB7XG4gIGNvbnN0IGRpYWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgRElBTF9OQU1FUykgaWYgKHNvdXJjZVtuYW1lXSAhPT0gdW5kZWZpbmVkKSBkaWFsc1tuYW1lXSA9IHNvdXJjZVtuYW1lXTtcbiAgcmV0dXJuIGRpYWxzIGFzIFJ1bkRpYWxzO1xufVxuXG4vKiogVGhlIHNhbWUgcG9saWN5IHVuZGVyIGFub3RoZXIgcnVsZSDigJQgYSBORVcgZnJvemVuIG9iamVjdDsgdGhlIG9sZCBvbmUgaXMgbmV2ZXIgZWRpdGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZWRhY3Rpb24ocG9saWN5OiBSdW5Qb2xpY3ksIHJlZGFjdGlvbjogUmVkYWN0aW9uUnVsZSk6IFJ1blBvbGljeSB7XG4gIHJldHVybiBkZXJpdmVQb2xpY3kocG9saWN5LCB7IHJlZGFjdGlvbiB9KTtcbn1cblxuLyoqXG4gKiBUaGUgc2FtZSBwb2xpY3kgd2l0aCBzb21lIHNldHRpbmdzIGNoYW5nZWQg4oCUIGEgTkVXIGZyb3plbiBvYmplY3Q7IHRoZSBvbGQgb25lIGlzIG5ldmVyXG4gKiBlZGl0ZWQuIEEgZnJhbWUgb3IgcnVudGltZSBjaGFuZ2VzIGEgc2V0dGluZyBieSBzd2FwcGluZyBpbiBhIGRlcml2ZWQgcG9saWN5IChgdXNlUG9saWN5YCksIHNvXG4gKiBubyBtdXRhYmxlIGRpYWwgZmllbGQgZXhpc3RzIGFueXdoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlUG9saWN5KHBvbGljeTogUnVuUG9saWN5LCBwYXRjaDogUGFydGlhbDxSdW5Qb2xpY3k+KTogUnVuUG9saWN5IHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi5wb2xpY3ksIC4uLnBhdGNoIH0pO1xufVxuIl19
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcnVuUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHOzs7QUFvSEgseUdBQXlHO0FBQzVGLFFBQUEsYUFBYSxHQUFpQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZFLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFlBQVksRUFBRSxNQUFNO0lBQ3BCLGFBQWEsRUFBRSxNQUFNO0lBQ3JCLFlBQVksRUFBRSxNQUFNO0lBQ3BCLGVBQWUsRUFBRSxLQUFLO0NBQ3ZCLENBQUMsQ0FBQztBQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQWEsQ0FBMEIsQ0FBQztBQUV2RSwyR0FBMkc7QUFDOUYsUUFBQSxrQkFBa0IsR0FBYyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxxQkFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBRWhHLG1GQUFtRjtBQUNuRixTQUFnQixTQUFTLENBQUMsUUFBa0IsRUFBRSxFQUFFLFNBQXlCLEVBQUUsTUFBTSxHQUFHLEtBQUs7SUFDdkYsTUFBTSxRQUFRLEdBQTRCLEVBQUUsR0FBRyxxQkFBYSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzVGLElBQUksU0FBUztRQUFFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQXlCLENBQUM7QUFDekQsQ0FBQztBQUpELDhCQUlDO0FBRUQscUZBQXFGO0FBQ3JGLFNBQWdCLFNBQVMsQ0FBQyxNQUFnQjtJQUN4QyxNQUFNLEtBQUssR0FBNEIsRUFBRSxDQUFDO0lBQzFDLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVTtRQUFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFGLE9BQU8sS0FBaUIsQ0FBQztBQUMzQixDQUFDO0FBSkQsOEJBSUM7QUFFRCw2RkFBNkY7QUFDN0YsU0FBZ0IsYUFBYSxDQUFDLE1BQWlCLEVBQUUsU0FBd0I7SUFDdkUsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRkQsc0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE1BQWlCLEVBQUUsS0FBeUI7SUFDdkUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFGRCxvQ0FFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVuUG9saWN5IOKAlCB3aGF0IGEgcnVuIHJldGFpbnMsIGVuY29kZXMgYW5kIHNjcnVicywgYXMgT05FIGltbXV0YWJsZSBvYmplY3QgKEY1KS5cbiAqXG4gKiBXSFkuIEEgcnVuIGNhcnJpZXMgc2l4IHNldHRpbmdzIHRoYXQgZXZlcnkgc3RhZ2UgZnJhbWUgbXVzdCBhZ3JlZSBvbjogdGhlIGZvdXJcbiAqIG9ic2VydmFiaWxpdHkgZGlhbHMgKGByZWFkVHJhY2tpbmdgLCBgd3JpdGVUcmFja2luZ2AsIGBjb21taXRWYWx1ZXNgLCBgd3JpdGVQcm92ZW5hbmNlYCksXG4gKiB0aGUgcmVkYWN0aW9uIHJ1bGUsIGFuZCB3aGV0aGVyIGEgcmVkYWN0ZWQgbWlycm9yIGlzIGtlcHQuIFVudGlsIDkuMzQuMCBlYWNoIG9uZSB3YXNcbiAqIGNvcGllZCBmaWVsZCBieSBmaWVsZCBkb3duIHRocmVlIHNlcGFyYXRlIHBhdGhzIOKAlCBgRXhlY3V0aW9uUnVudGltZS51c2UqYCBvbiB0aGUgcm9vdCxcbiAqIGBTdGFnZUNvbnRleHQuY3JlYXRlTmV4dGAvYGNyZWF0ZUNoaWxkYCAoc2l4IGFzc2lnbm1lbnRzIGVhY2gpLCBhbmQgYSBkdWNrLXR5cGVkIHB1c2ggcGVyXG4gKiBkaWFsIGluIGBTdWJmbG93RXhlY3V0b3JgIOKAlCBzbyBhIG5ldyBkaWFsIG1lYW50IHNpeCBlZGl0cywgYW5kIGEgbWlzc2VkIG9uZSByYW4gYSBzdWJmbG93XG4gKiBvbiB0aGUgZGVmYXVsdCBzaWxlbnRseS4gTm93IHRoZSBleGVjdXRvciBidWlsZHMgT05FIHBvbGljeSBwZXIgcnVuIChhbmQgcGVyIHJlc3VtZSksIHRoZVxuICogcnVudGltZSBpbnN0YWxscyBpdCBvbiBpdHMgcm9vdCBmcmFtZSwgYW5kIGV2ZXJ5IGZyYW1lIGhvbGRzIGl0IEJZIFJFRkVSRU5DRTogYSBjaGlsZCwgYVxuICogY29udGludWF0aW9uIGFuZCBhIHN1YmZsb3cncyByb290IChpdHMgc2VlZCBmcmFtZSBpbmNsdWRlZCkgYWxsIHBvaW50IGF0IHRoZSBzYW1lIG9iamVjdC5cbiAqIFRoZSBib3Jyb3dlZCBpZGVhIGlzIEdvJ3MgYGNvbnRleHQuQ29udGV4dGAgLyBPcGVuVGVsZW1ldHJ5J3MgYENvbnRleHRgOiBhbiBpbW11dGFibGUgdmFsdWVcbiAqIGhhbmRlZCBkb3duLCBuZXZlciBjb3BpZWQgYXBhcnQuXG4gKlxuICogQURESU5HIEEgRElBTCBpcyB0d28gZmlsZXM6IGEgZmllbGQgKyBpdHMgZGVmYXVsdCBoZXJlICh7QGxpbmsgUnVuRGlhbHN9LFxuICoge0BsaW5rIERJQUxfREVGQVVMVFN9KSwgYW5kIHRoZSBmcmFtZSBjb2RlIHRoYXQgcmVhZHMgYHBvbGljeS48ZGlhbD5gIChgU3RhZ2VDb250ZXh0YCkuIFRoZVxuICogZXhlY3V0b3IncyBvcHRpb25zIGluaGVyaXQge0BsaW5rIFJ1bkRpYWxzfSwgcGlja3MgdGhlbSB3aXRoIHtAbGluayBwaWNrRGlhbHN9LCBhbmQgZXZlcnlcbiAqIHByb3BhZ2F0aW9uIHBhdGggY2FycmllcyB0aGUgd2hvbGUgb2JqZWN0IOKAlCBub25lIG9mIHRoZW0gbmFtZXMgYSBkaWFsLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBwb2xpY3kgPSBydW5Qb2xpY3koeyBjb21taXRWYWx1ZXM6ICdkZWx0YScgfSwgcnVsZSwgdHJ1ZSk7XG4gKiBwb2xpY3kucmVhZFRyYWNraW5nOyAvLyAnZnVsbCcg4oCUIGFuIGFic2VudCBkaWFsIGlzIGl0cyBkZWZhdWx0XG4gKiBPYmplY3QuaXNGcm96ZW4ocG9saWN5KTsgLy8gdHJ1ZSDigJQgYSBmcmFtZSBjYW4gbmV2ZXIgZWRpdCB3aGF0IGl0cyBzaWJsaW5ncyBzaGFyZVxuICogYGBgXG4gKlxuICogVGhlIFJVTEUgaW5zaWRlIGlzIHNoYXJlZCB0b28sIGFuZCBpcyBpdHNlbGYgc3RhdGVmdWwgYnkgZGVzaWduIChwZXItY2FsbCBgc2V0VmFsdWUoaywgdixcbiAqIHRydWUpYCBtYXJrcyBhIGtleSBvbiBpdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJ1bik7IHRoZSBwb2xpY3kgZnJlZXplcyB3aGljaCBydWxlLCBub3QgdGhlXG4gKiBydWxlJ3MgbWFya3MuIFRoZSBtaXJyb3IgU1RPUkUgaXMgbm90IHBvbGljeSDigJQgZWFjaCBydW50aW1lIChhIHN1YmZsb3cgaGFzIGl0cyBvd24pIGtlZXBzXG4gKiBpdHMgb3duIHN0b3JlIHdoZW4gYG1pcnJvcmAgaXMgc2V0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tbWl0VmFsdWVzTW9kZSB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgdHlwZSB7IFJlYWRTb3VyY2VMaW1pdHMsIFdyaXRlUHJvdmVuYW5jZU1vZGUgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IFJlYWRUcmFja2luZ01vZGUsIFdyaXRlVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9mcmFtZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVkYWN0aW9uUnVsZSB9IGZyb20gJy4vcmVkYWN0aW9uLmpzJztcblxuLyoqXG4gKiBUaGUgZm91ciBvYnNlcnZhYmlsaXR5IGRpYWxzIGFzIGFuIGV4ZWN1dG9yIHRha2VzIHRoZW0g4oCUIGV2ZXJ5IGZpZWxkIG9wdGlvbmFsLCBhbiBhYnNlbnRcbiAqIG9uZSBpcyBpdHMgZGVmYXVsdC4gYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9uc2AgZXh0ZW5kcyB0aGlzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5EaWFscyB7XG4gIC8qKiBOYXRpdmUsIGJvdW5kZWQgc2NhbGFyIHJlYWQtc291cmNlIG9jY3VycmVuY2VzICgjMTEzKS4gRGVmYXVsdCBmYWxzZTsgbWVtb3J5LW9ubHkgaW4gcGFja2V0IDMuICovXG4gIHJlYWRTb3VyY2VzPzogYm9vbGVhbiB8IHsgcmVhZG9ubHkgbGltaXRzOiBQYXJ0aWFsPFJlYWRTb3VyY2VMaW1pdHM+IH07XG4gIC8qKlxuICAgKiBQb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpLiBEZWZhdWx0IGAnZnVsbCdgIOKAlCBldmVyeVxuICAgKiB0cmFja2VkIHJlYWQgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvIHRoZSBzdGFnZSdzIHJlYWQgdmlld1xuICAgKiAodGhlIGhpc3RvcmljYWwgYmVoYXZpb3I7IHdoYXQgbGVucy9hZ2VudGZvb3RwcmludCBzbmFwc2hvdHMgc2hvdykuXG4gICAqIGAnc3VtbWFyeSdgIHJlY29yZHMgYSBjaGVhcCB0eXBlL3NpemUvcHJldmlldyBtYXJrZXIgcGVyIHJlYWQ7IGAnb2ZmJ2BcbiAgICogcmVjb3JkcyBub3RoaW5nIOKAlCB6ZXJvIHBlci1yZWFkIGNsb25lIGNvc3QgKHJlYWRzIG9mIGxhcmdlIHZhbHVlcyBiZWNvbWVcbiAgICogfmZyZWUpLiBOYXJyYXRpdmUgYW5kIGBTY29wZVJlY29yZGVyLm9uUmVhZGAgYXJlIGlkZW50aWNhbCBpbiBldmVyeSBtb2RlLlxuICAgKiBDYXZlYXQ6IHVuZGVyIGAnb2ZmJ2AgYSBzdGFnZSdzIHNuYXBzaG90IGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gb25lXG4gICAqIHRoYXQgcmVhZCBub3RoaW5nIOKAlCBhdWRpdGluZyBjb25zdW1lcnMgdGhhdCBuZWVkIFwiZGlkIGl0IHJlYWQ/XCIgd2l0aG91dFxuICAgKiB0aGUgdmFsdWUgY29zdCBzaG91bGQgcHJlZmVyIGAnc3VtbWFyeSdgLlxuICAgKiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gICAqL1xuICByZWFkVHJhY2tpbmc/OiBSZWFkVHJhY2tpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBQb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlIHNpYmxpbmcgb2ZcbiAgICoge0BsaW5rIHJlYWRUcmFja2luZ307IHRoZSB0d28gZGlhbHMgYXJlIGluZGVwZW5kZW50LiBEZWZhdWx0IGAnZnVsbCdgIOKAlFxuICAgKiBldmVyeSB0cmFja2VkIHdyaXRlIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50byB0aGUgc3RhZ2UncyB3cml0ZVxuICAgKiB2aWV3ICh0aGUgaGlzdG9yaWNhbCBiZWhhdmlvcikuIGAnc3VtbWFyeSdgIHJlY29yZHMgYSBjaGVhcFxuICAgKiBgV3JpdGVTdW1tYXJ5TWFya2VyYCAodHlwZS9zaXplL3ByZXZpZXcpIHBlciB3cml0ZTsgYCdvZmYnYCByZWNvcmRzXG4gICAqIG5vdGhpbmcg4oCUIGBzdGFnZVdyaXRlc2AgaXMgYWJzZW50IGZyb20gdGhlIHNuYXBzaG90LlxuICAgKlxuICAgKiBPYnNlcnZhYmxlIGNvbnNlcXVlbmNlcyDigJQgd2hhdCB0aGUgcG9saWN5IERPRVMgZ292ZXJuOlxuICAgKiAtIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAobWFya2VycyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50IHVuZGVyXG4gICAqICAgYCdvZmYnYCkuXG4gICAqIC0gVGhlIGNvbW1pdCBvYnNlcnZlciBwYXlsb2FkOiBgU2NvcGVSZWNvcmRlci5vbkNvbW1pdChtdXRhdGlvbnMpYFxuICAgKiAgIHJlY2VpdmVzIHRoZSByZXRhaW5lZCBgX3N0YWdlV3JpdGVzYCBlbnRyaWVzLCBzbyBpdCBjYXJyaWVzIHRoZSBzYW1lXG4gICAqICAgbWFya2VycyB1bmRlciBgJ3N1bW1hcnknYCBhbmQgYW4gZW1wdHkgbXV0YXRpb25zIGJhZyB1bmRlciBgJ29mZidgIOKAlFxuICAgKiAgIGRlZmVycmVkL29ic2VydmVyIGNvbnN1bWVycyBzZWUgZXhhY3RseSB3aGF0IHJldGVudGlvbiBzdG9yZWQuXG4gICAqXG4gICAqIFdoYXQgaXQgZG9lcyBOT1QgZ292ZXJuOlxuICAgKiAtIFRoZSB3cml0ZXMgdGhlbXNlbHZlczogc2hhcmVkIHN0YXRlLCB0aGUgdHJhbnNhY3Rpb24gYnVmZmVyLCBhbmQgdGhlXG4gICAqICAgQ09NTUlUIExPRyBhcmUgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUgKGNvbW1pdExvZyB2YWx1ZXMga2VlcCB0aGVpclxuICAgKiAgIGZ1bGwgcGF5bG9hZHMg4oCUIHRoZSBsb3NzbGVzcyBsaW5lYXItY29zdCBmaXggZm9yIHRob3NlIGlzIHRoZVxuICAgKiAgIHtAbGluayBjb21taXRWYWx1ZXN9IGRpYWwsICMxM2MtQikuXG4gICAqIC0gUGVyLW9wIGBTY29wZVJlY29yZGVyLm9uV3JpdGVgIGV2ZW50cyDigJQgdGhleSBmaXJlIHdpdGggbGl2ZSB2YWx1ZXNcbiAgICogICByZWdhcmRsZXNzIChkZWxpdmVyeSB0aWVyLCBSRkMtMDAxJ3MgY29uY2VybiksIHNvIG5hcnJhdGl2ZSBvdXRwdXQgaXNcbiAgICogICBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS5cbiAgICogLSBSZWRhY3Rpb246IGEgcG9saWN5L3Blci1jYWxsLXJlZGFjdGVkIHdyaXRlIHN0b3JlcyBgJ1tSRURBQ1RFRF0nYFxuICAgKiAgIHVuZGVyIGAnZnVsbCdgIEFORCBgJ3N1bW1hcnknYCAocmVkYWN0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGVcbiAgICogICBkaWFsOyBhIG1hcmtlciB3b3VsZCBsZWFrIHNpemUvcHJldmlldyksIGFuZCBub3RoaW5nIHVuZGVyIGAnb2ZmJ2AuXG4gICAqXG4gICAqIENhdmVhdDogdW5kZXIgYCdvZmYnYCBhIHN0YWdlJ3MgU05BUFNIT1QgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBvbmVcbiAgICogdGhhdCB3cm90ZSBub3RoaW5nIOKAlCBidXQgdW5saWtlIGByZWFkVHJhY2tpbmc6ICdvZmYnYCwgdGhlIGNvbW1pdCBsb2dcbiAgICogc3RpbGwgcmVjb3JkcyBldmVyeSBuZXQgY2hhbmdlLCBzbyBcImRpZCBpdCB3cml0ZT9cIiBzdGF5cyBhbnN3ZXJhYmxlLlxuICAgKiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICAgKi9cbiAgd3JpdGVUcmFja2luZz86IFdyaXRlVHJhY2tpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBFbmNvZGluZyBwb2xpY3kgZm9yIENPTU1JVCBMT0cgdmFsdWVzICgjMTNjLUIpIOKAlCB0aGUgdGhpcmQgZGlhbCBvZiB0aGVcbiAgICogZmFtaWx5LCBhbmQgdW5saWtlIGl0cyBzaWJsaW5ncyBpdCBpcyAqKmxvc3NsZXNzIGluIGJvdGggbW9kZXMqKiAoaXRcbiAgICogY2hhbmdlcyB0aGUgbG9nJ3MgZW5jb2RpbmcsIG5ldmVyIGl0cyBpbmZvcm1hdGlvbikuXG4gICAqXG4gICAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSBzdXJ2aXZpbmcgYHNldGAgcGF0aCBzdG9yZXMgdGhlIGZ1bGwgZmluYWxcbiAgICogICB2YWx1ZTsgYnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3IuXG4gICAqIC0gYCdkZWx0YSdgIOKAlCBhcnJheSBuZXQtY2hhbmdlcyB0aGF0IGFyZSBcImJhc2UgcGx1cyBhIHRhaWxcIiBjb21taXQgYXMgYW5cbiAgICogICBgYXBwZW5kYCB0cmFjZSB2ZXJiIHN0b3JpbmcgT05MWSB0aGUgdGFpbCAodGhlIGdyb3dpbmctaGlzdG9yeSBjb21taXRcbiAgICogICBsb2cgYmVjb21lcyBsaW5lYXIgaW5zdGVhZCBvZiBPKE7CsikgcmV0YWluZWQpOyBgZGVsZXRlVmFsdWUoKWAgY29tbWl0c1xuICAgKiAgIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiIChyZXBsYXkgcmVtb3ZlcyB0aGUga2V5IGluc3RlYWQgb2YgbGVhdmluZ1xuICAgKiAgIGBrZXk6IHVuZGVmaW5lZGApOyBidW5kbGVzIGNhcnJ5IGV4YWN0bHkgT05FIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmdcbiAgICogICBwYXRoLiBSZXBsYXkgKHRoZSBvbmUgdmVyYiBsYXcg4oCUIGxpdmUgc3RhdGUsIGBtYXRlcmlhbGlzZSgpYCwgdGhlXG4gICAqICAgcmVkYWN0ZWQgbWlycm9yLCBgc3RhdGVBdGApIHJlY29uc3RydWN0cyBldmVyeSBzdGVwJ3MgZnVsbCBzdGF0ZVxuICAgKiAgIGV4YWN0bHkuXG4gICAqXG4gICAqIENvbnN1bWVycyB0aGF0IHJlYWQgYGJ1bmRsZS5vdmVyd3JpdGVba2V5XWAgYXMgXCJ0aGUgZnVsbCB2YWx1ZSB3cml0dGVuXCJcbiAgICogbXVzdCBzd2l0Y2ggdG8gYGNvbW1pdFZhbHVlQXQoY29tbWl0TG9nLCBpZHgsIGtleSlgIGZyb21cbiAgICogYGZvb3R0cmFjZWAg4oCUIHVuZGVyIGAnZGVsdGEnYCB0aGF0IHZhbHVlIGlzIHZlcmItcXVhbGlmaWVkIChhblxuICAgKiBgYXBwZW5kYCBidW5kbGUgaG9sZHMgb25seSB0aGUgdGFpbCkuIFBhdGgtdGllciBjb25zdW1lcnNcbiAgICogKGBmaW5kTGFzdFdyaXRlcmAsIGBjYXVzYWxDaGFpbmAsIG5hcnJhdGl2ZSwgbGVucyBoaWdobGlnaHRzKSBhcmVcbiAgICogdW5hZmZlY3RlZC4gVGhlIGFjdGl2ZSBtb2RlIGlzIHN1cmZhY2VkIGFzXG4gICAqIGBnZXRTbmFwc2hvdCgpLmNvbW1pdFZhbHVlc2AuXG4gICAqXG4gICAqIEhvbmVzdCBjb3N0IG5vdGU6IGFwcGVuZCBkZXRlY3Rpb24gaXMgbmV3IHdhbGwgd29yayDigJQgYW4gTyh8YmFzZSBhcnJheXwpXG4gICAqIHN0cnVjdHVyYWwgcHJlZml4IGNvbXBhcmUgcGVyIGFycmF5LXNldCBwYXRoIHBlciBjb21taXQuIE9uIGEgaGl0IHRoZVxuICAgKiBjb21taXQgZ2V0cyBjaGVhcGVyIGluIGJvdGggd2FsbCBhbmQgaGVhcDsgb24gYSBtaXNzIChwcmVmaXggZGl2ZXJnZXMpXG4gICAqIGl0IHBheXMgY29tcGFyZSArIGZ1bGwgY2xvbmUuIGAnZnVsbCdgIHBheXMgemVyby5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRDb21taXRWYWx1ZXMobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICAgKi9cbiAgY29tbWl0VmFsdWVzPzogQ29tbWl0VmFsdWVzTW9kZTtcblxuICAvKipcbiAgICogUGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAoI1AxKSDigJQgdGhlIGZvdXJ0aCBkaWFsIG9mIHRoZSBmYW1pbHkuIERlZmF1bHRcbiAgICogYCdvZmYnYDogemVybyBjb3N0LCBieXRlLWlkZW50aWNhbCBjb21taXQgbG9ncy4gYCdyZWFkcy1wcmVmaXgnYDogZXZlcnlcbiAgICogY29tbWl0dGVkIGBUcmFjZUVudHJ5YCBjYXJyaWVzIGByZWFkS2V5c2Ag4oCUIHRoZSBrZXlzIHRyYWNrZWQtcmVhZCBCRUZPUkVcbiAgICogdGhhdCB3cml0ZSDigJQgZW5hYmxpbmcgcGVyLXdyaXRlIGNhdXNhbCBhdHRyaWJ1dGlvbiAoYGNhdXNhbENoYWluYCdzXG4gICAqIGBlZGdlQXR0cmlidXRpb246ICdwZXItd3JpdGUnYCBhbmQgdmFyaWFibGUgc2xpY2VzKS4gQ29zdDogb25lIHNtYWxsXG4gICAqIGFycmF5IGNvcHkgcGVyIHdyaXRlLiBTbmFwc2hvdCBkaXNjcmltaW5hbnQ6XG4gICAqIGBnZXRTbmFwc2hvdCgpLndyaXRlUHJvdmVuYW5jZWAuXG4gICAqL1xuICB3cml0ZVByb3ZlbmFuY2U/OiBXcml0ZVByb3ZlbmFuY2VNb2RlO1xufVxuXG4vKiogVGhlIHJ1bidzIHBvbGljeTogZXZlcnkgZGlhbCByZXNvbHZlZCwgcGx1cyB0aGUgcmVkYWN0aW9uIHJ1bGUgYW5kIHRoZSBtaXJyb3IgZmxhZy4gRnJvemVuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5Qb2xpY3kgZXh0ZW5kcyBSZWFkb25seTxSZXF1aXJlZDxSdW5EaWFscz4+IHtcbiAgLyoqIFRoZSBydW4ncyByZWRhY3Rpb24gcnVsZSDigJQgdGhlIE9ORSBvd25lciBvZiB0aGUgdmVyZGljdCAoYHJlZGFjdGlvbi50c2ApLiBBYnNlbnQgb24gYmFyZSBmcmFtZXMuICovXG4gIHJlYWRvbmx5IHJlZGFjdGlvbj86IFJlZGFjdGlvblJ1bGU7XG4gIC8qKiBLZWVwIGEgcmVkYWN0ZWQgbWlycm9yIG9mIHRoZSBoZWFwIChhIHJ1biB3aXRoIGEgcmVkYWN0aW9uIHBvbGljeSkuIEVhY2ggcnVudGltZSBvd25zIGl0cyBvd24gc3RvcmUuICovXG4gIHJlYWRvbmx5IG1pcnJvcjogYm9vbGVhbjtcbn1cblxuLyoqIEVhY2ggZGlhbCdzIGRlZmF1bHQg4oCUIHRoZSB2YWx1ZSBhIHJ1biBnZXRzIHdoZW4gdGhlIG9wdGlvbiBpcyBhYnNlbnQuIFRoZSBkaWFsIGxpc3QgSVMgdGhlc2Uga2V5cy4gKi9cbmV4cG9ydCBjb25zdCBESUFMX0RFRkFVTFRTOiBSZWFkb25seTxSZXF1aXJlZDxSdW5EaWFscz4+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHJlYWRTb3VyY2VzOiBmYWxzZSxcbiAgcmVhZFRyYWNraW5nOiAnZnVsbCcsXG4gIHdyaXRlVHJhY2tpbmc6ICdmdWxsJyxcbiAgY29tbWl0VmFsdWVzOiAnZnVsbCcsXG4gIHdyaXRlUHJvdmVuYW5jZTogJ29mZicsXG59KTtcblxuY29uc3QgRElBTF9OQU1FUyA9IE9iamVjdC5rZXlzKERJQUxfREVGQVVMVFMpIGFzIEFycmF5PGtleW9mIFJ1bkRpYWxzPjtcblxuLyoqIEV2ZXJ5IGRlZmF1bHQsIG5vIHJ1bGUsIG5vIG1pcnJvciDigJQgd2hhdCBhIGJhcmUgZnJhbWUgKGEgdW5pdCB0ZXN0J3MgYG5ldyBTdGFnZUNvbnRleHRgKSBydW5zIHVuZGVyLiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUlVOX1BPTElDWTogUnVuUG9saWN5ID0gT2JqZWN0LmZyZWV6ZSh7IC4uLkRJQUxfREVGQVVMVFMsIG1pcnJvcjogZmFsc2UgfSk7XG5cbi8qKiBCdWlsZCBhIHJ1bidzIHBvbGljeTogYWJzZW50IGRpYWxzIHRha2UgdGhlaXIgZGVmYXVsdDsgdGhlIHJlc3VsdCBpcyBmcm96ZW4uICovXG5leHBvcnQgZnVuY3Rpb24gcnVuUG9saWN5KGRpYWxzOiBSdW5EaWFscyA9IHt9LCByZWRhY3Rpb24/OiBSZWRhY3Rpb25SdWxlLCBtaXJyb3IgPSBmYWxzZSk6IFJ1blBvbGljeSB7XG4gIGNvbnN0IHJlc29sdmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4uRElBTF9ERUZBVUxUUywgLi4ucGlja0RpYWxzKGRpYWxzKSwgbWlycm9yIH07XG4gIGlmIChyZWRhY3Rpb24pIHJlc29sdmVkLnJlZGFjdGlvbiA9IHJlZGFjdGlvbjtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUocmVzb2x2ZWQpIGFzIHVua25vd24gYXMgUnVuUG9saWN5O1xufVxuXG4vKiogVGhlIGRpYWxzIHNldCBvbiBgc291cmNlYCAoYW4gb3B0aW9ucyBvYmplY3QsIHNheSkg4oCUIGFuZCBub3RoaW5nIGVsc2UgZnJvbSBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrRGlhbHMoc291cmNlOiBSdW5EaWFscyk6IFJ1bkRpYWxzIHtcbiAgY29uc3QgZGlhbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgbmFtZSBvZiBESUFMX05BTUVTKSBpZiAoc291cmNlW25hbWVdICE9PSB1bmRlZmluZWQpIGRpYWxzW25hbWVdID0gc291cmNlW25hbWVdO1xuICByZXR1cm4gZGlhbHMgYXMgUnVuRGlhbHM7XG59XG5cbi8qKiBUaGUgc2FtZSBwb2xpY3kgdW5kZXIgYW5vdGhlciBydWxlIOKAlCBhIE5FVyBmcm96ZW4gb2JqZWN0OyB0aGUgb2xkIG9uZSBpcyBuZXZlciBlZGl0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJlZGFjdGlvbihwb2xpY3k6IFJ1blBvbGljeSwgcmVkYWN0aW9uOiBSZWRhY3Rpb25SdWxlKTogUnVuUG9saWN5IHtcbiAgcmV0dXJuIGRlcml2ZVBvbGljeShwb2xpY3ksIHsgcmVkYWN0aW9uIH0pO1xufVxuXG4vKipcbiAqIFRoZSBzYW1lIHBvbGljeSB3aXRoIHNvbWUgc2V0dGluZ3MgY2hhbmdlZCDigJQgYSBORVcgZnJvemVuIG9iamVjdDsgdGhlIG9sZCBvbmUgaXMgbmV2ZXJcbiAqIGVkaXRlZC4gQSBmcmFtZSBvciBydW50aW1lIGNoYW5nZXMgYSBzZXR0aW5nIGJ5IHN3YXBwaW5nIGluIGEgZGVyaXZlZCBwb2xpY3kgKGB1c2VQb2xpY3lgKSwgc29cbiAqIG5vIG11dGFibGUgZGlhbCBmaWVsZCBleGlzdHMgYW55d2hlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVQb2xpY3kocG9saWN5OiBSdW5Qb2xpY3ksIHBhdGNoOiBQYXJ0aWFsPFJ1blBvbGljeT4pOiBSdW5Qb2xpY3kge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLnBvbGljeSwgLi4ucGF0Y2ggfSk7XG59XG4iXX0=
@@ -34,6 +34,7 @@
34
34
  */
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.decodePendingPauses = exports.decodeCheckpoint = exports.decodePauseRecord = exports.upcastCheckpoint = exports.CHECKPOINT_VERSION = void 0;
37
+ const checkpointCapture_js_1 = require("../capture/checkpointCapture.js");
37
38
  const idempotencyKey_js_1 = require("../ids/idempotencyKey.js");
38
39
  const types_js_1 = require("./types.js");
39
40
  /** The checkpoint format this release writes (`FlowchartCheckpoint.checkpointVersion`). */
@@ -127,7 +128,12 @@ exports.decodePauseRecord = decodePauseRecord;
127
128
  function decodeCheckpoint(stored) {
128
129
  if (!isPlainRecord(stored))
129
130
  refuse('the checkpoint must be an object');
130
- const checkpoint = upcastCheckpoint(stored);
131
+ const capture = (0, checkpointCapture_js_1.readCheckpointCapture)(stored);
132
+ const checkpoint = upcastCheckpoint((0, checkpointCapture_js_1.withoutCheckpointCapture)(stored));
133
+ if (capture)
134
+ checkpoint.capture = capture;
135
+ else
136
+ delete checkpoint.capture;
131
137
  if (!isPlainRecord(checkpoint.sharedState))
132
138
  refuse('sharedState must be a plain object');
133
139
  decodePauseRecord(checkpoint);
@@ -182,4 +188,4 @@ exports.decodePendingPauses = decodePendingPauses;
182
188
  function isCount(value) {
183
189
  return typeof value === 'number' && Number.isInteger(value) && value >= 0;
184
190
  }
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9wYXVzZS9yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRzs7O0FBRUgsZ0VBQWlFO0FBRWpFLHlDQUErQztBQUUvQywyRkFBMkY7QUFDOUUsUUFBQSxrQkFBa0IsR0FBRyxDQUFVLENBQUM7QUFFN0MscUdBQXFHO0FBQ3JHLE1BQU0saUJBQWlCLEdBQXVCLENBQUMsQ0FBQyxFQUFFLDBCQUFrQixDQUFDLENBQUM7QUFldEUsbUVBQW1FO0FBQ25FLFNBQVMsTUFBTSxDQUFDLElBQVk7SUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLE1BQStCO0lBQzlELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUN6QyxJQUFJLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNsRSxNQUFNLENBQ0oscUJBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUM7WUFDOUYsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1EQUFtRCxDQUN4RixDQUFDO0lBQ0osQ0FBQztJQUNELHVFQUF1RTtJQUN2RSxNQUFNLEVBQ0osaUJBQWlCLEVBQUUs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TUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRyxNQUFNLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDL0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsT0FBZ0I7SUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQUUsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDdEUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBWSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekYsQ0FBQztBQUhELGtEQUdDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDNUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcGF1c2UvcmVjb3JkLnRzIOKAlCB0aGUgY2hlY2twb2ludCBDT0RFQyAoRjgsIDkuMzkuMCk6IG9uZSB2ZXJzaW9uLCBvbmVcbiAqIHVwY2FzdGVyLCBvbmUgdmFsaWRhdG9yLCBvbmUgbWVzc2FnZSBzZXQuXG4gKlxuICogQSBjaGVja3BvaW50IGlzIHN0b3JlZCBkYXRhIOKAlCBSZWRpcywgUG9zdGdyZXMsIGEgZmlsZSDigJQgYW5kIGNvbWVzIGJhY2sgdG9cbiAqIGByZXN1bWUoKWAgZnJvbSB3aGljaGV2ZXIgcmVsZWFzZSB3cm90ZSBpdC4gVW50aWwgOS4zOC4wIGl0IHdhcyBjaGVja2VkIGluXG4gKiBUV08gcGxhY2VzIHdpdGggdHdvIG1lc3NhZ2Ugc2V0czogYEZsb3dDaGFydEV4ZWN1dG9yIMK3IHJlc3VtZWAgY2hlY2tlZCB0aGVcbiAqIHBhdXNlZCByZWNvcmQncyBmaWVsZHMsIGBSZXN1bWVFbnRyeWAgY2hlY2tlZCBlYWNoIHdhaXRpbmcgc2libGluZydzXG4gKiAoYHBlbmRpbmdQYXVzZXNbbl1gKSDigJQgdGhlIFNBTUUgcmVjb3JkIHNoYXBlLCBjaGVja2VkIHR3aWNlLCBkaWZmZXJlbnRseVxuICogKHRoZSB0b3AtbGV2ZWwgYHBhdXNlZEJ5YCBhbmQgYHN1YmZsb3dTdGF0ZXNgIHdlcmUgbmV2ZXIgY2hlY2tlZCBhdCBhbGwpLlxuICogQm90aCBub3cgY2FsbCB7QGxpbmsgZGVjb2RlQ2hlY2twb2ludH07IGV2ZXJ5IHJlY29yZCBpcyBjaGVja2VkIGJ5XG4gKiB7QGxpbmsgZGVjb2RlUGF1c2VSZWNvcmR9LlxuICpcbiAqIFZFUlNJT05JTkcuIEEgY2hlY2twb2ludCB3cml0dGVuIGJ5IHRoaXMgcmVsZWFzZSBjYXJyaWVzXG4gKiBgY2hlY2twb2ludFZlcnNpb246IDJgLiBFdmVyeSBvbGRlciBvbmUgaXMgcmVhZCBieSB0aGUgT05FIHVwY2FzdGVyLFxuICoge0BsaW5rIHVwY2FzdENoZWNrcG9pbnR9LCBhbmQgZXZlcnkgc3RlcCBzbyBmYXIgb25seSBEUk9QUyBmaWVsZHMg4oCUIHdoYXQgYVxuICogbGF0ZXIgZm9ybWF0IGFkZGVkIGlzIG9wdGlvbmFsIGFuZCByZWFkIGFzIGFic2VudDpcbiAqXG4gKiAgIC0gdmVyc2lvbiAwIChubyBgY2hlY2twb2ludFZlcnNpb25gLCBiZWZvcmUgOS4zOS4wKSDihpIgMTogZHJvcFxuICogICAgIGBjb250aW51YXRpb25TdGFnZUlkYCwgYSByZWNvcmQgbm8gcmVzdW1lIGhhcyByZWFkIHNpbmNlIDkuMjguMCAod2hhdFxuICogICAgIHJ1bnMgYWZ0ZXIgYSByZXN1bWUgY29tZXMgZnJvbSB0aGUgY2hhcnQpO1xuICogICAtIHZlcnNpb24gMSAoOS4zOS4w4oCTOS40My54KSDihpIgMiAodGhlIExFQU4gY2hlY2twb2ludCk6IGRyb3BcbiAqICAgICBgZXhlY3V0aW9uVHJlZWAgYW5kIGBzdWJmbG93UmVzdWx0c2Ag4oCUIHRoZSBydW4ncyBzZXJ2ZWQgcmVjb3JkICh0aGVcbiAqICAgICB3aG9sZSBleGVjdXRpb24gdHJlZSwgdGhlIGZpbmlzaGVkIHN1YmZsb3dzJyByZXN1bHRzKSwgd2hpY2ggbm8gcmVzdW1lXG4gKiAgICAgZXZlciByZWFkIGFuZCB3aGljaCBncmV3IHdpdGggZXZlcnkgZmluaXNoZWQgaXRlcmF0aW9uXG4gKiAgICAgKGBydW5uZXIvY2hlY2twb2ludC50c2ApLlxuICpcbiAqIEEgZHJvcHBlZCBmaWVsZCBuZXZlciBzdXJ2aXZlcywgd2hhdGV2ZXIgdmVyc2lvbiBjbGFpbXMgdG8gY2FycnkgaXQuIEFcbiAqIHZlcnNpb24gdGhpcyByZWxlYXNlIGRvZXMgbm90IGtub3cgaXMgcmVmdXNlZCwgbmV2ZXIgZ3Vlc3NlZCBhdC5cbiAqXG4gKiBCb3Jyb3dlZDogTGFuZ0dyYXBoJ3MgY2hlY2twb2ludCBgdmAgZmllbGQ7IGlvLXRzJ3MgZGVjb2RlLWF0LXRoZS1ib3VuZGFyeVxuICogKG9uZSBkZWNvZGVyIHR1cm5zIGB1bmtub3duYCBpbnRvIHRoZSB0eXBlLCBvciByZWZ1c2VzIHdpdGggYSBwYXRoKS5cbiAqL1xuXG5pbXBvcnQgeyBpZGVtcG90ZW5jeUtleVByb2JsZW0gfSBmcm9tICcuLi9pZHMvaWRlbXBvdGVuY3lLZXkuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQZW5kaW5nUGF1c2UgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGlzUGF1c2VkRXhlY3V0aW9uIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBUaGUgY2hlY2twb2ludCBmb3JtYXQgdGhpcyByZWxlYXNlIHdyaXRlcyAoYEZsb3djaGFydENoZWNrcG9pbnQuY2hlY2twb2ludFZlcnNpb25gKS4gKi9cbmV4cG9ydCBjb25zdCBDSEVDS1BPSU5UX1ZFUlNJT04gPSAyIGFzIGNvbnN0O1xuXG4vKiogVGhlIGZvcm1hdHMgdGhpcyByZWxlYXNlIHJlYWRzOiB0aGUgY3VycmVudCBvbmUgYW5kIGV2ZXJ5IG9uZSBpdCB1cGNhc3RzIChhYnNlbnQgPSB2ZXJzaW9uIDApLiAqL1xuY29uc3QgUkVBREFCTEVfVkVSU0lPTlM6IHJlYWRvbmx5IHVua25vd25bXSA9IFsxLCBDSEVDS1BPSU5UX1ZFUlNJT05dO1xuXG4vKipcbiAqIEZpZWxkcyBvbmx5IGFuIE9MREVSIGNoZWNrcG9pbnQgY2FuIGNhcnJ5LCBlYWNoIGRyb3BwZWQgYnkgdGhlIGZvcm1hdCBuYW1lZFxuICogYmVzaWRlIGl0LiBUaGUgdXBjYXN0ZXIgcmVtb3ZlcyB0aGVtIGFuZCB0aGUgY3VycmVudCBzaGFwZSBuZXZlciBoYXMgdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lDaGVja3BvaW50RmllbGRzIHtcbiAgLyoqIFZlcnNpb24gMCBvbmx5OiB0aGUgaW52b2tlcidzIGAubmV4dGAgaWQg4oCUIGEgcmVjb3JkIHNpbmNlIDkuMjguMCwgbmV2ZXIgcmVhZC4gRHJvcHBlZCBieSB2ZXJzaW9uIDEuICovXG4gIHJlYWRvbmx5IGNvbnRpbnVhdGlvblN0YWdlSWQ/OiBzdHJpbmc7XG4gIC8qKiBWZXJzaW9ucyAw4oCTMTogdGhlIHJ1bidzIGV4ZWN1dGlvbiB0cmVlIGF0IHRoZSBwYXVzZSDigJQgbmV2ZXIgcmVhZCBieSBhIHJlc3VtZS4gRHJvcHBlZCBieSB2ZXJzaW9uIDIuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRyZWU/OiB1bmtub3duO1xuICAvKiogVmVyc2lvbnMgMOKAkzE6IHRoZSBzdWJmbG93cyBmaW5pc2hlZCBiZWZvcmUgdGhlIHBhdXNlIOKAlCBuZXZlciByZWFkIGJ5IGEgcmVzdW1lLiBEcm9wcGVkIGJ5IHZlcnNpb24gMi4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1Jlc3VsdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIFRoZSBvbmUgbWVzc2FnZSBzaGFwZTogYEludmFsaWQgY2hlY2twb2ludDogPHdoZXJlPiA8d2hhdD4uYCAqL1xuZnVuY3Rpb24gcmVmdXNlKHdoYXQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoZWNrcG9pbnQ6ICR7d2hhdH0uYCk7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5SZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBCcmluZyBhIHN0b3JlZCBjaGVja3BvaW50IG9mIEFOWSByZWxlYXNlIHRvIHRoZSBjdXJyZW50IHNoYXBlIOKAlCB0aGUgb25lXG4gKiB1cGNhc3Rlci4gVmVyc2lvbnMgMCAobm8gYGNoZWNrcG9pbnRWZXJzaW9uYCkgYW5kIDE6IGRyb3AgdGhlIGZpZWxkcyB0aGVpclxuICogc3VjY2Vzc29ycyBkcm9wcGVkICh7QGxpbmsgTGVnYWN5Q2hlY2twb2ludEZpZWxkc30pLCBzdGFtcCB0aGUgY3VycmVudFxuICogdmVyc2lvbiBhcyB0aGUgZmlyc3Qga2V5LiBUaGUgY3VycmVudCB2ZXJzaW9uOiBhcyBpcywgbWludXMgYW55IGRyb3BwZWRcbiAqIGZpZWxkIGl0IGNsYWltcyB0byBjYXJyeS4gQW55dGhpbmcgZWxzZTogcmVmdXNlZC4gUmV0dXJucyBhIG5ldyBvYmplY3Q7IHRoZVxuICogY2FsbGVyJ3MgaXMgbmV2ZXIgZWRpdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBjYXN0Q2hlY2twb2ludChzdG9yZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCB2ZXJzaW9uID0gc3RvcmVkLmNoZWNrcG9pbnRWZXJzaW9uO1xuICBpZiAodmVyc2lvbiAhPT0gdW5kZWZpbmVkICYmICFSRUFEQUJMRV9WRVJTSU9OUy5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgIHJlZnVzZShcbiAgICAgIGBjaGVja3BvaW50VmVyc2lvbiAke0pTT04uc3RyaW5naWZ5KHZlcnNpb24pID8/IFN0cmluZyh2ZXJzaW9uKX0gaXMgbm90IG9uZSB0aGlzIHJlbGVhc2UgcmVhZHMgYCArXG4gICAgICAgIGAoJHtSRUFEQUJMRV9WRVJTSU9OUy5qb2luKCcgb3IgJyl9LCBvciBub25lIGZvciBhIGNoZWNrcG9pbnQgd3JpdHRlbiBiZWZvcmUgOS4zOS4wKWAsXG4gICAgKTtcbiAgfVxuICAvLyBBIGRyb3BwZWQgZmllbGQgbmV2ZXIgc3Vydml2ZXMsIHdoYXRldmVyIHZlcnNpb24gY2xhaW1zIHRvIGNhcnJ5IGl0LlxuICBjb25zdCB7XG4gICAgY2hlY2twb2ludFZlcnNpb246IF92ZXJzaW9uLFxuICAgIGNvbnRpbnVhdGlvblN0YWdlSWQ6IF9pbnZva2VyTmV4dCxcbiAgICBleGVjdXRpb25UcmVlOiBfdHJlZSxcbiAgICBzdWJmbG93UmVzdWx0czogX2ZpbmlzaGVkU3ViZmxvd3MsXG4gICAgLi4uY3VycmVudFxuICB9ID0gc3RvcmVkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgTGVnYWN5Q2hlY2twb2ludEZpZWxkcztcbiAgcmV0dXJuIHsgY2hlY2twb2ludFZlcnNpb246IENIRUNLUE9JTlRfVkVSU0lPTiwgLi4uY3VycmVudCB9O1xufVxuXG4vKipcbiAqIENoZWNrIE9ORSBwYXVzZSByZWNvcmQg4oCUIHRoZSBwYXVzZWQgc3RhZ2UncyBvd24gZmllbGRzIG9uIHRoZSBjaGVja3BvaW50LFxuICogb3IgYSB3YWl0aW5nIHNpYmxpbmcncyBgcGVuZGluZ1BhdXNlc1tuXWAg4oCUIGFuZCByZXR1cm4gaXQgYXMgYVxuICoge0BsaW5rIFBlbmRpbmdQYXVzZX0uIGBhdGAgbmFtZXMgd2hlcmUgdGhlIHJlY29yZCBzaXRzIChgJydgIGZvciB0aGVcbiAqIGNoZWNrcG9pbnQgaXRzZWxmLCBgJ3BlbmRpbmdQYXVzZXNbMF0nYCBmb3IgYSBzaWJsaW5nKSwgc28gYm90aCBzaXRlcyBzcGVha1xuICogdGhlIHNhbWUgc2VudGVuY2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUGF1c2VSZWNvcmQocmF3OiB1bmtub3duLCBhdCA9ICcnKTogUGVuZGluZ1BhdXNlIHtcbiAgY29uc3QgZmllbGQgPSAobmFtZTogc3RyaW5nKSA9PiAoYXQgPyBgJHthdH0uJHtuYW1lfWAgOiBuYW1lKTtcbiAgaWYgKCFpc1BsYWluUmVjb3JkKHJhdykpIHJlZnVzZShgJHthdCB8fCAndGhlIGNoZWNrcG9pbnQnfSBtdXN0IGJlIGFuIG9iamVjdGApO1xuICBpZiAodHlwZW9mIHJhdy5wYXVzZWRTdGFnZUlkICE9PSAnc3RyaW5nJyB8fCByYXcucGF1c2VkU3RhZ2VJZCA9PT0gJycpIHtcbiAgICByZWZ1c2UoYCR7ZmllbGQoJ3BhdXNlZFN0YWdlSWQnKX0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdgKTtcbiAgfVxuICBjb25zdCBzdWJmbG93UGF0aCA9IHJhdy5zdWJmbG93UGF0aDtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHN1YmZsb3dQYXRoKSB8fCAhc3ViZmxvd1BhdGguZXZlcnkoKHMpID0+IHR5cGVvZiBzID09PSAnc3RyaW5nJykpIHtcbiAgICByZWZ1c2UoYCR7ZmllbGQoJ3N1YmZsb3dQYXRoJyl9IG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc2ApO1xuICB9XG4gIGNvbnN0IHN0YXRlcyA9IHJhdy5zdWJmbG93U3RhdGVzO1xuICBpZiAoc3RhdGVzICE9PSB1bmRlZmluZWQgJiYgIWlzUGxhaW5SZWNvcmQoc3RhdGVzKSkgcmVmdXNlKGAke2ZpZWxkKCdzdWJmbG93U3RhdGVzJyl9IG11c3QgYmUgYW4gb2JqZWN0YCk7XG4gIC8vIEVhY2ggY2FwdHVyZSBzZWVkcyBhIHN1YmZsb3cncyBydW50aW1lIOKAlCBhIHBsYWluIG9iamVjdCwgbGlrZSBgc2hhcmVkU3RhdGVgLlxuICBmb3IgKGNvbnN0IFtzdWJmbG93SWQsIGNhcHR1cmVdIG9mIE9iamVjdC5lbnRyaWVzKHN0YXRlcyA/PyB7fSkpIHtcbiAgICBpZiAoIWlzUGxhaW5SZWNvcmQoY2FwdHVyZSkpIHJlZnVzZShgJHtmaWVsZCgnc3ViZmxvd1N0YXRlcycpfVske0pTT04uc3RyaW5naWZ5KHN1YmZsb3dJZCl9XSBtdXN0IGJlIGFuIG9iamVjdGApO1xuICB9XG4gIGlmIChyYXcucGF1c2VkQnkgIT09IHVuZGVmaW5lZCAmJiByYXcucGF1c2VkQnkgIT09ICdpbnRlcnJ1cHQnKSB7XG4gICAgcmVmdXNlKGAke2ZpZWxkKCdwYXVzZWRCeScpfSBtdXN0IGJlICdpbnRlcnJ1cHQnIHdoZW4gcHJlc2VudGApO1xuICB9XG4gIC8vIEEga2V5IHRoZSByZXN1bWUgd2lsbCBTRU5EIChQMyk6IGhlbGQgdG8gdGhlIG9uZSBrZXkgcnVsZSwgcmVmdXNlZCDigJQgbmV2ZXIgZHJvcHBlZCAoZHJvcHBpbmcgd291bGQgbGV0IHRoZVxuICAvLyByZXN1bWUgcmVjb21wdXRlIGEgZGlmZmVyZW50IGtleSkuXG4gIGlmIChyYXcuaWRlbXBvdGVuY3lLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHByb2JsZW0gPSBpZGVtcG90ZW5jeUtleVByb2JsZW0ocmF3LmlkZW1wb3RlbmN5S2V5KTtcbiAgICBpZiAocHJvYmxlbSAhPT0gdW5kZWZpbmVkKSByZWZ1c2UoYCR7ZmllbGQoJ2lkZW1wb3RlbmN5S2V5Jyl9ICR7cHJvYmxlbX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHBhdXNlZFN0YWdlSWQ6IHJhdy5wYXVzZWRTdGFnZUlkIGFzIHN0cmluZyxcbiAgICBzdWJmbG93UGF0aDogc3ViZmxvd1BhdGggYXMgc3RyaW5nW10sXG4gICAgc3ViZmxvd1N0YXRlczogKHN0YXRlcyBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQpID8/IHt9LFxuICAgIC4uLihyYXcucGF1c2VEYXRhICE9PSB1bmRlZmluZWQgJiYgeyBwYXVzZURhdGE6IHJhdy5wYXVzZURhdGEgfSksXG4gICAgLi4uKHJhdy5wYXVzZWRCeSA9PT0gJ2ludGVycnVwdCcgJiYgeyBwYXVzZWRCeTogJ2ludGVycnVwdCcgYXMgY29uc3QgfSksXG4gICAgLy8gQSByZWNvcmQsIG5ldmVyIGEgcGxhbiBpbnB1dDoga2VwdCBvbmx5IHdoZW4gd2VsbC1mb3JtZWQgKGFuIG9sZGVyIG9yXG4gICAgLy8gaGFuZC1lZGl0ZWQgZW50cnkgc2ltcGx5IHJlc3VtZXMgd2l0aG91dCBhIGxpbmspLlxuICAgIC4uLihpc1BhdXNlZEV4ZWN1dGlvbihyYXcucGF1c2VkRXhlY3V0aW9uKSAmJiB7XG4gICAgICBwYXVzZWRFeGVjdXRpb246IHsgcnVuSWQ6IHJhdy5wYXVzZWRFeGVjdXRpb24ucnVuSWQsIHJ1bnRpbWVTdGFnZUlkOiByYXcucGF1c2VkRXhlY3V0aW9uLnJ1bnRpbWVTdGFnZUlkIH0sXG4gICAgfSksXG4gICAgLi4uKHJhdy5pZGVtcG90ZW5jeUtleSAhPT0gdW5kZWZpbmVkICYmIHsgaWRlbXBvdGVuY3lLZXk6IHJhdy5pZGVtcG90ZW5jeUtleSBhcyBzdHJpbmcgfSksXG4gIH07XG59XG5cbi8qKlxuICogVEhFIGNoZWNrcG9pbnQgZGVjb2RlcjogdXBjYXN0LCB0aGVuIGNoZWNrIOKAlCB0aGUgY2hlY2twb2ludCBpcyBhbiBvYmplY3QsXG4gKiBpdHMgYHNoYXJlZFN0YXRlYCBhIHBsYWluIG9iamVjdCwgaXRzIG93biBwYXVzZSByZWNvcmQgd2VsbC1mb3JtZWQsIGFuZFxuICogZXZlcnkgYHBlbmRpbmdQYXVzZXNgIGVudHJ5IHdlbGwtZm9ybWVkIChlYWNoIHJldHVybmVkIGRlY29kZWQpLiBUaHJvd3NcbiAqIGBJbnZhbGlkIGNoZWNrcG9pbnQ6IOKApmAgbmFtaW5nIHRoZSBmaXJzdCBmaWVsZCB0aGF0IGlzIG5vdDsgbmV2ZXIgZWRpdHNcbiAqIHRoZSBjYWxsZXIncyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVDaGVja3BvaW50KHN0b3JlZDogdW5rbm93bik6IEZsb3djaGFydENoZWNrcG9pbnQge1xuICBpZiAoIWlzUGxhaW5SZWNvcmQoc3RvcmVkKSkgcmVmdXNlKCd0aGUgY2hlY2twb2ludCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICBjb25zdCBjaGVja3BvaW50ID0gdXBjYXN0Q2hlY2twb2ludChzdG9yZWQpO1xuICBpZiAoIWlzUGxhaW5SZWNvcmQoY2hlY2twb2ludC5zaGFyZWRTdGF0ZSkpIHJlZnVzZSgnc2hhcmVkU3RhdGUgbXVzdCBiZSBhIHBsYWluIG9iamVjdCcpO1xuICBkZWNvZGVQYXVzZVJlY29yZChjaGVja3BvaW50KTtcbiAgLy8gQSByZWNvcmQsIG5ldmVyIGEgcGxhbiBpbnB1dCDigJQgdGhlIFNBTUUgcnVsZSBhcyBhIHNpYmxpbmcnczogYSBtYWxmb3JtZWRcbiAgLy8gbGluayBpcyBkcm9wcGVkICh0aGUgcmVzdW1lIHJ1bnMgd2l0aG91dCBpdCksIG5ldmVyIHRydXN0ZWQuXG4gIGlmIChjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbiAhPT0gdW5kZWZpbmVkICYmICFpc1BhdXNlZEV4ZWN1dGlvbihjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbikpIHtcbiAgICBkZWxldGUgY2hlY2twb2ludC5wYXVzZWRFeGVjdXRpb247XG4gIH1cbiAgLy8gVGhlIGNvdW50ZXJzIHNlZWQgdGhlIHJlc3VtZWQgcnVuJ3MgaWRzIGFuZCBsb29wIGJ1ZGdldDogYWJzZW50IGlzIGFuIG9sZFxuICAvLyBjaGVja3BvaW50ICh0aGUgY291bnRlciByZXN0YXJ0cyksIHByZXNlbnQgbXVzdCBiZSB3ZWxsLWZvcm1lZC5cbiAgaWYgKGNoZWNrcG9pbnQuZXhlY3V0aW9uQ291bnQgIT09IHVuZGVmaW5lZCAmJiAhaXNDb3VudChjaGVja3BvaW50LmV4ZWN1dGlvbkNvdW50KSkge1xuICAgIHJlZnVzZSgnZXhlY3V0aW9uQ291bnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gIH1cbiAgY29uc3QgdmlzaXRzID0gY2hlY2twb2ludC52aXNpdENvdW50cztcbiAgaWYgKHZpc2l0cyAhPT0gdW5kZWZpbmVkICYmICghaXNQbGFpblJlY29yZCh2aXNpdHMpIHx8ICFPYmplY3QudmFsdWVzKHZpc2l0cykuZXZlcnkoaXNDb3VudCkpKSB7XG4gICAgcmVmdXNlKCd2aXNpdENvdW50cyBtdXN0IG1hcCBzdGFnZSBpZHMgdG8gbm9uLW5lZ2F0aXZlIGludGVnZXJzJyk7XG4gIH1cbiAgaWYgKGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlcyAhPT0gdW5kZWZpbmVkKSBjaGVja3BvaW50LnBlbmRpbmdQYXVzZXMgPSBkZWNvZGVQZW5kaW5nUGF1c2VzKGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlcyk7XG4gIC8vIFRoZSByZWRhY3Rpb24gYSBwYXVzZSBjYXJyaWVzIChuYW1lcyBvbmx5KSBzZWVkcyB0aGUgcmVzdW1lZCBydW4ncyBydWxlIOKAlCBhIG1hbGZvcm1lZCBvbmVcbiAgLy8gaXMgcmVmdXNlZCwgbmV2ZXIgZHJvcHBlZDogZHJvcHBpbmcgaXQgd291bGQgc2VydmUgaW4gcGxhaW4gd2hhdCB0aGUgcnVuIGhhZCBtYXNrZWQuXG4gIGlmIChjaGVja3BvaW50LnJlZGFjdGlvbk1hcmtzICE9PSB1bmRlZmluZWQpIGRlY29kZVJlZGFjdGlvbk1hcmtzKGNoZWNrcG9pbnQucmVkYWN0aW9uTWFya3MpO1xuICByZXR1cm4gY2hlY2twb2ludCBhcyB1bmtub3duIGFzIEZsb3djaGFydENoZWNrcG9pbnQ7XG59XG5cbi8qKiBgcmVkYWN0aW9uTWFya3NgOiBga2V5c2AgYW4gYXJyYXkgb2Ygc3RyaW5nczsgYGZpZWxkc2AsIHdoZW4gcHJlc2VudCwga2V5cyDihpIgYXJyYXlzIG9mIHN0cmluZ3MuICovXG5mdW5jdGlvbiBkZWNvZGVSZWRhY3Rpb25NYXJrcyhtYXJrczogdW5rbm93bik6IHZvaWQge1xuICBpZiAoIWlzUGxhaW5SZWNvcmQobWFya3MpKSByZWZ1c2UoJ3JlZGFjdGlvbk1hcmtzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIGlmICghaXNTdHJpbmdzKG1hcmtzLmtleXMpKSByZWZ1c2UoJ3JlZGFjdGlvbk1hcmtzLmtleXMgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJyk7XG4gIGNvbnN0IGZpZWxkcyA9IG1hcmtzLmZpZWxkcztcbiAgaWYgKGZpZWxkcyAhPT0gdW5kZWZpbmVkICYmICghaXNQbGFpblJlY29yZChmaWVsZHMpIHx8ICFPYmplY3QudmFsdWVzKGZpZWxkcykuZXZlcnkoaXNTdHJpbmdzKSkpIHtcbiAgICByZWZ1c2UoJ3JlZGFjdGlvbk1hcmtzLmZpZWxkcyBtdXN0IG1hcCBrZXlzIHRvIGFycmF5cyBvZiBzdHJpbmdzJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdHJpbmdzKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKTtcbn1cblxuLyoqXG4gKiBgcGVuZGluZ1BhdXNlc2AgKHN0b3JlZCwgdW50cnVzdGVkKSBhcyBkZWNvZGVkIHJlY29yZHMg4oCUIHRoZSBvbmUgY2hlY2tcbiAqIGBkZWNvZGVDaGVja3BvaW50YCBydW5zLCBhbmQgdGhlIG9uZSBgUmVzdW1lRW50cnkucGxhbmAgcnVucyBvbiB3aGF0IGl0IGlzXG4gKiBoYW5kZWQgZGlyZWN0bHksIHNvIG5laXRoZXIgZG9vciB0YWtlcyBhbiB1bmNoZWNrZWQgc2libGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBlbmRpbmdQYXVzZXMocGVuZGluZzogdW5rbm93bik6IFBlbmRpbmdQYXVzZVtdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBlbmRpbmcpKSByZWZ1c2UoJ3BlbmRpbmdQYXVzZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICByZXR1cm4gcGVuZGluZy5tYXAoKHJhdzogdW5rbm93biwgbikgPT4gZGVjb2RlUGF1c2VSZWNvcmQocmF3LCBgcGVuZGluZ1BhdXNlc1ske259XWApKTtcbn1cblxuZnVuY3Rpb24gaXNDb3VudCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+PSAwO1xufVxuIl19
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9wYXVzZS9yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRzs7O0FBRUgsMEVBQWtHO0FBQ2xHLGdFQUFpRTtBQUVqRSx5Q0FBK0M7QUFFL0MsMkZBQTJGO0FBQzlFLFFBQUEsa0JBQWtCLEdBQUcsQ0FBVSxDQUFDO0FBRTdDLHFHQUFxRztBQUNyRyxNQUFNLGlCQUFpQixHQUF1QixDQUFDLENBQUMsRUFBRSwwQkFBa0IsQ0FBQyxDQUFDO0FBZXRFLG1FQUFtRTtBQUNuRSxTQUFTLE1BQU0sQ0FBQyxJQUFZO0lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUErQjtJQUM5RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDekMsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEUsTUFBTSxDQUNKLHFCQUFxQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUNBQWlDO1lBQzlGLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtREFBbUQsQ0FDeEYsQ0FBQztJQUNKLENBQUM7SUFDRCx1RUFBdUU7SUFDdkUsTUFBTSxFQUNK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SSxDQUFDO1FBQUUsTUFBTSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7SUFDdEYsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM1QixJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRyxNQUFNLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDL0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsT0FBZ0I7SUFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQUUsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDdEUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBWSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekYsQ0FBQztBQUhELGtEQUdDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDNUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcGF1c2UvcmVjb3JkLnRzIOKAlCB0aGUgY2hlY2twb2ludCBDT0RFQyAoRjgsIDkuMzkuMCk6IG9uZSB2ZXJzaW9uLCBvbmVcbiAqIHVwY2FzdGVyLCBvbmUgdmFsaWRhdG9yLCBvbmUgbWVzc2FnZSBzZXQuXG4gKlxuICogQSBjaGVja3BvaW50IGlzIHN0b3JlZCBkYXRhIOKAlCBSZWRpcywgUG9zdGdyZXMsIGEgZmlsZSDigJQgYW5kIGNvbWVzIGJhY2sgdG9cbiAqIGByZXN1bWUoKWAgZnJvbSB3aGljaGV2ZXIgcmVsZWFzZSB3cm90ZSBpdC4gVW50aWwgOS4zOC4wIGl0IHdhcyBjaGVja2VkIGluXG4gKiBUV08gcGxhY2VzIHdpdGggdHdvIG1lc3NhZ2Ugc2V0czogYEZsb3dDaGFydEV4ZWN1dG9yIMK3IHJlc3VtZWAgY2hlY2tlZCB0aGVcbiAqIHBhdXNlZCByZWNvcmQncyBmaWVsZHMsIGBSZXN1bWVFbnRyeWAgY2hlY2tlZCBlYWNoIHdhaXRpbmcgc2libGluZydzXG4gKiAoYHBlbmRpbmdQYXVzZXNbbl1gKSDigJQgdGhlIFNBTUUgcmVjb3JkIHNoYXBlLCBjaGVja2VkIHR3aWNlLCBkaWZmZXJlbnRseVxuICogKHRoZSB0b3AtbGV2ZWwgYHBhdXNlZEJ5YCBhbmQgYHN1YmZsb3dTdGF0ZXNgIHdlcmUgbmV2ZXIgY2hlY2tlZCBhdCBhbGwpLlxuICogQm90aCBub3cgY2FsbCB7QGxpbmsgZGVjb2RlQ2hlY2twb2ludH07IGV2ZXJ5IHJlY29yZCBpcyBjaGVja2VkIGJ5XG4gKiB7QGxpbmsgZGVjb2RlUGF1c2VSZWNvcmR9LlxuICpcbiAqIFZFUlNJT05JTkcuIEEgY2hlY2twb2ludCB3cml0dGVuIGJ5IHRoaXMgcmVsZWFzZSBjYXJyaWVzXG4gKiBgY2hlY2twb2ludFZlcnNpb246IDJgLiBFdmVyeSBvbGRlciBvbmUgaXMgcmVhZCBieSB0aGUgT05FIHVwY2FzdGVyLFxuICoge0BsaW5rIHVwY2FzdENoZWNrcG9pbnR9LCBhbmQgZXZlcnkgc3RlcCBzbyBmYXIgb25seSBEUk9QUyBmaWVsZHMg4oCUIHdoYXQgYVxuICogbGF0ZXIgZm9ybWF0IGFkZGVkIGlzIG9wdGlvbmFsIGFuZCByZWFkIGFzIGFic2VudDpcbiAqXG4gKiAgIC0gdmVyc2lvbiAwIChubyBgY2hlY2twb2ludFZlcnNpb25gLCBiZWZvcmUgOS4zOS4wKSDihpIgMTogZHJvcFxuICogICAgIGBjb250aW51YXRpb25TdGFnZUlkYCwgYSByZWNvcmQgbm8gcmVzdW1lIGhhcyByZWFkIHNpbmNlIDkuMjguMCAod2hhdFxuICogICAgIHJ1bnMgYWZ0ZXIgYSByZXN1bWUgY29tZXMgZnJvbSB0aGUgY2hhcnQpO1xuICogICAtIHZlcnNpb24gMSAoOS4zOS4w4oCTOS40My54KSDihpIgMiAodGhlIExFQU4gY2hlY2twb2ludCk6IGRyb3BcbiAqICAgICBgZXhlY3V0aW9uVHJlZWAgYW5kIGBzdWJmbG93UmVzdWx0c2Ag4oCUIHRoZSBydW4ncyBzZXJ2ZWQgcmVjb3JkICh0aGVcbiAqICAgICB3aG9sZSBleGVjdXRpb24gdHJlZSwgdGhlIGZpbmlzaGVkIHN1YmZsb3dzJyByZXN1bHRzKSwgd2hpY2ggbm8gcmVzdW1lXG4gKiAgICAgZXZlciByZWFkIGFuZCB3aGljaCBncmV3IHdpdGggZXZlcnkgZmluaXNoZWQgaXRlcmF0aW9uXG4gKiAgICAgKGBydW5uZXIvY2hlY2twb2ludC50c2ApLlxuICpcbiAqIEEgZHJvcHBlZCBmaWVsZCBuZXZlciBzdXJ2aXZlcywgd2hhdGV2ZXIgdmVyc2lvbiBjbGFpbXMgdG8gY2FycnkgaXQuIEFcbiAqIHZlcnNpb24gdGhpcyByZWxlYXNlIGRvZXMgbm90IGtub3cgaXMgcmVmdXNlZCwgbmV2ZXIgZ3Vlc3NlZCBhdC5cbiAqXG4gKiBCb3Jyb3dlZDogTGFuZ0dyYXBoJ3MgY2hlY2twb2ludCBgdmAgZmllbGQ7IGlvLXRzJ3MgZGVjb2RlLWF0LXRoZS1ib3VuZGFyeVxuICogKG9uZSBkZWNvZGVyIHR1cm5zIGB1bmtub3duYCBpbnRvIHRoZSB0eXBlLCBvciByZWZ1c2VzIHdpdGggYSBwYXRoKS5cbiAqL1xuXG5pbXBvcnQgeyByZWFkQ2hlY2twb2ludENhcHR1cmUsIHdpdGhvdXRDaGVja3BvaW50Q2FwdHVyZSB9IGZyb20gJy4uL2NhcHR1cmUvY2hlY2twb2ludENhcHR1cmUuanMnO1xuaW1wb3J0IHsgaWRlbXBvdGVuY3lLZXlQcm9ibGVtIH0gZnJvbSAnLi4vaWRzL2lkZW1wb3RlbmN5S2V5LmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGVuZGluZ1BhdXNlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBpc1BhdXNlZEV4ZWN1dGlvbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiogVGhlIGNoZWNrcG9pbnQgZm9ybWF0IHRoaXMgcmVsZWFzZSB3cml0ZXMgKGBGbG93Y2hhcnRDaGVja3BvaW50LmNoZWNrcG9pbnRWZXJzaW9uYCkuICovXG5leHBvcnQgY29uc3QgQ0hFQ0tQT0lOVF9WRVJTSU9OID0gMiBhcyBjb25zdDtcblxuLyoqIFRoZSBmb3JtYXRzIHRoaXMgcmVsZWFzZSByZWFkczogdGhlIGN1cnJlbnQgb25lIGFuZCBldmVyeSBvbmUgaXQgdXBjYXN0cyAoYWJzZW50ID0gdmVyc2lvbiAwKS4gKi9cbmNvbnN0IFJFQURBQkxFX1ZFUlNJT05TOiByZWFkb25seSB1bmtub3duW10gPSBbMSwgQ0hFQ0tQT0lOVF9WRVJTSU9OXTtcblxuLyoqXG4gKiBGaWVsZHMgb25seSBhbiBPTERFUiBjaGVja3BvaW50IGNhbiBjYXJyeSwgZWFjaCBkcm9wcGVkIGJ5IHRoZSBmb3JtYXQgbmFtZWRcbiAqIGJlc2lkZSBpdC4gVGhlIHVwY2FzdGVyIHJlbW92ZXMgdGhlbSBhbmQgdGhlIGN1cnJlbnQgc2hhcGUgbmV2ZXIgaGFzIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5Q2hlY2twb2ludEZpZWxkcyB7XG4gIC8qKiBWZXJzaW9uIDAgb25seTogdGhlIGludm9rZXIncyBgLm5leHRgIGlkIOKAlCBhIHJlY29yZCBzaW5jZSA5LjI4LjAsIG5ldmVyIHJlYWQuIERyb3BwZWQgYnkgdmVyc2lvbiAxLiAqL1xuICByZWFkb25seSBjb250aW51YXRpb25TdGFnZUlkPzogc3RyaW5nO1xuICAvKiogVmVyc2lvbnMgMOKAkzE6IHRoZSBydW4ncyBleGVjdXRpb24gdHJlZSBhdCB0aGUgcGF1c2Ug4oCUIG5ldmVyIHJlYWQgYnkgYSByZXN1bWUuIERyb3BwZWQgYnkgdmVyc2lvbiAyLiAqL1xuICByZWFkb25seSBleGVjdXRpb25UcmVlPzogdW5rbm93bjtcbiAgLyoqIFZlcnNpb25zIDDigJMxOiB0aGUgc3ViZmxvd3MgZmluaXNoZWQgYmVmb3JlIHRoZSBwYXVzZSDigJQgbmV2ZXIgcmVhZCBieSBhIHJlc3VtZS4gRHJvcHBlZCBieSB2ZXJzaW9uIDIuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKiBUaGUgb25lIG1lc3NhZ2Ugc2hhcGU6IGBJbnZhbGlkIGNoZWNrcG9pbnQ6IDx3aGVyZT4gPHdoYXQ+LmAgKi9cbmZ1bmN0aW9uIHJlZnVzZSh3aGF0OiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGVja3BvaW50OiAke3doYXR9LmApO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluUmVjb3JkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQnJpbmcgYSBzdG9yZWQgY2hlY2twb2ludCBvZiBBTlkgcmVsZWFzZSB0byB0aGUgY3VycmVudCBzaGFwZSDigJQgdGhlIG9uZVxuICogdXBjYXN0ZXIuIFZlcnNpb25zIDAgKG5vIGBjaGVja3BvaW50VmVyc2lvbmApIGFuZCAxOiBkcm9wIHRoZSBmaWVsZHMgdGhlaXJcbiAqIHN1Y2Nlc3NvcnMgZHJvcHBlZCAoe0BsaW5rIExlZ2FjeUNoZWNrcG9pbnRGaWVsZHN9KSwgc3RhbXAgdGhlIGN1cnJlbnRcbiAqIHZlcnNpb24gYXMgdGhlIGZpcnN0IGtleS4gVGhlIGN1cnJlbnQgdmVyc2lvbjogYXMgaXMsIG1pbnVzIGFueSBkcm9wcGVkXG4gKiBmaWVsZCBpdCBjbGFpbXMgdG8gY2FycnkuIEFueXRoaW5nIGVsc2U6IHJlZnVzZWQuIFJldHVybnMgYSBuZXcgb2JqZWN0OyB0aGVcbiAqIGNhbGxlcidzIGlzIG5ldmVyIGVkaXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwY2FzdENoZWNrcG9pbnQoc3RvcmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgdmVyc2lvbiA9IHN0b3JlZC5jaGVja3BvaW50VmVyc2lvbjtcbiAgaWYgKHZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiAhUkVBREFCTEVfVkVSU0lPTlMuaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICByZWZ1c2UoXG4gICAgICBgY2hlY2twb2ludFZlcnNpb24gJHtKU09OLnN0cmluZ2lmeSh2ZXJzaW9uKSA/PyBTdHJpbmcodmVyc2lvbil9IGlzIG5vdCBvbmUgdGhpcyByZWxlYXNlIHJlYWRzIGAgK1xuICAgICAgICBgKCR7UkVBREFCTEVfVkVSU0lPTlMuam9pbignIG9yICcpfSwgb3Igbm9uZSBmb3IgYSBjaGVja3BvaW50IHdyaXR0ZW4gYmVmb3JlIDkuMzkuMClgLFxuICAgICk7XG4gIH1cbiAgLy8gQSBkcm9wcGVkIGZpZWxkIG5ldmVyIHN1cnZpdmVzLCB3aGF0ZXZlciB2ZXJzaW9uIGNsYWltcyB0byBjYXJyeSBpdC5cbiAgY29uc3Qge1xuICAgIGNoZWNrcG9pbnRWZXJzaW9uOiBfdmVyc2lvbixcbiAgICBjb250aW51YXRpb25TdGFnZUlkOiBfaW52b2tlck5leHQsXG4gICAgZXhlY3V0aW9uVHJlZTogX3RyZWUsXG4gICAgc3ViZmxvd1Jlc3VsdHM6IF9maW5pc2hlZFN1YmZsb3dzLFxuICAgIC4uLmN1cnJlbnRcbiAgfSA9IHN0b3JlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIExlZ2FjeUNoZWNrcG9pbnRGaWVsZHM7XG4gIHJldHVybiB7IGNoZWNrcG9pbnRWZXJzaW9uOiBDSEVDS1BPSU5UX1ZFUlNJT04sIC4uLmN1cnJlbnQgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBPTkUgcGF1c2UgcmVjb3JkIOKAlCB0aGUgcGF1c2VkIHN0YWdlJ3Mgb3duIGZpZWxkcyBvbiB0aGUgY2hlY2twb2ludCxcbiAqIG9yIGEgd2FpdGluZyBzaWJsaW5nJ3MgYHBlbmRpbmdQYXVzZXNbbl1gIOKAlCBhbmQgcmV0dXJuIGl0IGFzIGFcbiAqIHtAbGluayBQZW5kaW5nUGF1c2V9LiBgYXRgIG5hbWVzIHdoZXJlIHRoZSByZWNvcmQgc2l0cyAoYCcnYCBmb3IgdGhlXG4gKiBjaGVja3BvaW50IGl0c2VsZiwgYCdwZW5kaW5nUGF1c2VzWzBdJ2AgZm9yIGEgc2libGluZyksIHNvIGJvdGggc2l0ZXMgc3BlYWtcbiAqIHRoZSBzYW1lIHNlbnRlbmNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBhdXNlUmVjb3JkKHJhdzogdW5rbm93biwgYXQgPSAnJyk6IFBlbmRpbmdQYXVzZSB7XG4gIGNvbnN0IGZpZWxkID0gKG5hbWU6IHN0cmluZykgPT4gKGF0ID8gYCR7YXR9LiR7bmFtZX1gIDogbmFtZSk7XG4gIGlmICghaXNQbGFpblJlY29yZChyYXcpKSByZWZ1c2UoYCR7YXQgfHwgJ3RoZSBjaGVja3BvaW50J30gbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgaWYgKHR5cGVvZiByYXcucGF1c2VkU3RhZ2VJZCAhPT0gJ3N0cmluZycgfHwgcmF3LnBhdXNlZFN0YWdlSWQgPT09ICcnKSB7XG4gICAgcmVmdXNlKGAke2ZpZWxkKCdwYXVzZWRTdGFnZUlkJyl9IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCk7XG4gIH1cbiAgY29uc3Qgc3ViZmxvd1BhdGggPSByYXcuc3ViZmxvd1BhdGg7XG4gIGlmICghQXJyYXkuaXNBcnJheShzdWJmbG93UGF0aCkgfHwgIXN1YmZsb3dQYXRoLmV2ZXJ5KChzKSA9PiB0eXBlb2YgcyA9PT0gJ3N0cmluZycpKSB7XG4gICAgcmVmdXNlKGAke2ZpZWxkKCdzdWJmbG93UGF0aCcpfSBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtcbiAgfVxuICBjb25zdCBzdGF0ZXMgPSByYXcuc3ViZmxvd1N0YXRlcztcbiAgaWYgKHN0YXRlcyAhPT0gdW5kZWZpbmVkICYmICFpc1BsYWluUmVjb3JkKHN0YXRlcykpIHJlZnVzZShgJHtmaWVsZCgnc3ViZmxvd1N0YXRlcycpfSBtdXN0IGJlIGFuIG9iamVjdGApO1xuICAvLyBFYWNoIGNhcHR1cmUgc2VlZHMgYSBzdWJmbG93J3MgcnVudGltZSDigJQgYSBwbGFpbiBvYmplY3QsIGxpa2UgYHNoYXJlZFN0YXRlYC5cbiAgZm9yIChjb25zdCBbc3ViZmxvd0lkLCBjYXB0dXJlXSBvZiBPYmplY3QuZW50cmllcyhzdGF0ZXMgPz8ge30pKSB7XG4gICAgaWYgKCFpc1BsYWluUmVjb3JkKGNhcHR1cmUpKSByZWZ1c2UoYCR7ZmllbGQoJ3N1YmZsb3dTdGF0ZXMnKX1bJHtKU09OLnN0cmluZ2lmeShzdWJmbG93SWQpfV0gbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgfVxuICBpZiAocmF3LnBhdXNlZEJ5ICE9PSB1bmRlZmluZWQgJiYgcmF3LnBhdXNlZEJ5ICE9PSAnaW50ZXJydXB0Jykge1xuICAgIHJlZnVzZShgJHtmaWVsZCgncGF1c2VkQnknKX0gbXVzdCBiZSAnaW50ZXJydXB0JyB3aGVuIHByZXNlbnRgKTtcbiAgfVxuICAvLyBBIGtleSB0aGUgcmVzdW1lIHdpbGwgU0VORCAoUDMpOiBoZWxkIHRvIHRoZSBvbmUga2V5IHJ1bGUsIHJlZnVzZWQg4oCUIG5ldmVyIGRyb3BwZWQgKGRyb3BwaW5nIHdvdWxkIGxldCB0aGVcbiAgLy8gcmVzdW1lIHJlY29tcHV0ZSBhIGRpZmZlcmVudCBrZXkpLlxuICBpZiAocmF3LmlkZW1wb3RlbmN5S2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBwcm9ibGVtID0gaWRlbXBvdGVuY3lLZXlQcm9ibGVtKHJhdy5pZGVtcG90ZW5jeUtleSk7XG4gICAgaWYgKHByb2JsZW0gIT09IHVuZGVmaW5lZCkgcmVmdXNlKGAke2ZpZWxkKCdpZGVtcG90ZW5jeUtleScpfSAke3Byb2JsZW19YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXVzZWRTdGFnZUlkOiByYXcucGF1c2VkU3RhZ2VJZCBhcyBzdHJpbmcsXG4gICAgc3ViZmxvd1BhdGg6IHN1YmZsb3dQYXRoIGFzIHN0cmluZ1tdLFxuICAgIHN1YmZsb3dTdGF0ZXM6IChzdGF0ZXMgYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkKSA/PyB7fSxcbiAgICAuLi4ocmF3LnBhdXNlRGF0YSAhPT0gdW5kZWZpbmVkICYmIHsgcGF1c2VEYXRhOiByYXcucGF1c2VEYXRhIH0pLFxuICAgIC4uLihyYXcucGF1c2VkQnkgPT09ICdpbnRlcnJ1cHQnICYmIHsgcGF1c2VkQnk6ICdpbnRlcnJ1cHQnIGFzIGNvbnN0IH0pLFxuICAgIC8vIEEgcmVjb3JkLCBuZXZlciBhIHBsYW4gaW5wdXQ6IGtlcHQgb25seSB3aGVuIHdlbGwtZm9ybWVkIChhbiBvbGRlciBvclxuICAgIC8vIGhhbmQtZWRpdGVkIGVudHJ5IHNpbXBseSByZXN1bWVzIHdpdGhvdXQgYSBsaW5rKS5cbiAgICAuLi4oaXNQYXVzZWRFeGVjdXRpb24ocmF3LnBhdXNlZEV4ZWN1dGlvbikgJiYge1xuICAgICAgcGF1c2VkRXhlY3V0aW9uOiB7IHJ1bklkOiByYXcucGF1c2VkRXhlY3V0aW9uLnJ1bklkLCBydW50aW1lU3RhZ2VJZDogcmF3LnBhdXNlZEV4ZWN1dGlvbi5ydW50aW1lU3RhZ2VJZCB9LFxuICAgIH0pLFxuICAgIC4uLihyYXcuaWRlbXBvdGVuY3lLZXkgIT09IHVuZGVmaW5lZCAmJiB7IGlkZW1wb3RlbmN5S2V5OiByYXcuaWRlbXBvdGVuY3lLZXkgYXMgc3RyaW5nIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIFRIRSBjaGVja3BvaW50IGRlY29kZXI6IHVwY2FzdCwgdGhlbiBjaGVjayDigJQgdGhlIGNoZWNrcG9pbnQgaXMgYW4gb2JqZWN0LFxuICogaXRzIGBzaGFyZWRTdGF0ZWAgYSBwbGFpbiBvYmplY3QsIGl0cyBvd24gcGF1c2UgcmVjb3JkIHdlbGwtZm9ybWVkLCBhbmRcbiAqIGV2ZXJ5IGBwZW5kaW5nUGF1c2VzYCBlbnRyeSB3ZWxsLWZvcm1lZCAoZWFjaCByZXR1cm5lZCBkZWNvZGVkKS4gVGhyb3dzXG4gKiBgSW52YWxpZCBjaGVja3BvaW50OiDigKZgIG5hbWluZyB0aGUgZmlyc3QgZmllbGQgdGhhdCBpcyBub3Q7IG5ldmVyIGVkaXRzXG4gKiB0aGUgY2FsbGVyJ3Mgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlQ2hlY2twb2ludChzdG9yZWQ6IHVua25vd24pOiBGbG93Y2hhcnRDaGVja3BvaW50IHtcbiAgaWYgKCFpc1BsYWluUmVjb3JkKHN0b3JlZCkpIHJlZnVzZSgndGhlIGNoZWNrcG9pbnQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgY29uc3QgY2FwdHVyZSA9IHJlYWRDaGVja3BvaW50Q2FwdHVyZShzdG9yZWQpO1xuICBjb25zdCBjaGVja3BvaW50ID0gdXBjYXN0Q2hlY2twb2ludCh3aXRob3V0Q2hlY2twb2ludENhcHR1cmUoc3RvcmVkKSk7XG4gIGlmIChjYXB0dXJlKSBjaGVja3BvaW50LmNhcHR1cmUgPSBjYXB0dXJlO1xuICBlbHNlIGRlbGV0ZSBjaGVja3BvaW50LmNhcHR1cmU7XG4gIGlmICghaXNQbGFpblJlY29yZChjaGVja3BvaW50LnNoYXJlZFN0YXRlKSkgcmVmdXNlKCdzaGFyZWRTdGF0ZSBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0Jyk7XG4gIGRlY29kZVBhdXNlUmVjb3JkKGNoZWNrcG9pbnQpO1xuICAvLyBBIHJlY29yZCwgbmV2ZXIgYSBwbGFuIGlucHV0IOKAlCB0aGUgU0FNRSBydWxlIGFzIGEgc2libGluZydzOiBhIG1hbGZvcm1lZFxuICAvLyBsaW5rIGlzIGRyb3BwZWQgKHRoZSByZXN1bWUgcnVucyB3aXRob3V0IGl0KSwgbmV2ZXIgdHJ1c3RlZC5cbiAgaWYgKGNoZWNrcG9pbnQucGF1c2VkRXhlY3V0aW9uICE9PSB1bmRlZmluZWQgJiYgIWlzUGF1c2VkRXhlY3V0aW9uKGNoZWNrcG9pbnQucGF1c2VkRXhlY3V0aW9uKSkge1xuICAgIGRlbGV0ZSBjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbjtcbiAgfVxuICAvLyBUaGUgY291bnRlcnMgc2VlZCB0aGUgcmVzdW1lZCBydW4ncyBpZHMgYW5kIGxvb3AgYnVkZ2V0OiBhYnNlbnQgaXMgYW4gb2xkXG4gIC8vIGNoZWNrcG9pbnQgKHRoZSBjb3VudGVyIHJlc3RhcnRzKSwgcHJlc2VudCBtdXN0IGJlIHdlbGwtZm9ybWVkLlxuICBpZiAoY2hlY2twb2ludC5leGVjdXRpb25Db3VudCAhPT0gdW5kZWZpbmVkICYmICFpc0NvdW50KGNoZWNrcG9pbnQuZXhlY3V0aW9uQ291bnQpKSB7XG4gICAgcmVmdXNlKCdleGVjdXRpb25Db3VudCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXInKTtcbiAgfVxuICBjb25zdCB2aXNpdHMgPSBjaGVja3BvaW50LnZpc2l0Q291bnRzO1xuICBpZiAodmlzaXRzICE9PSB1bmRlZmluZWQgJiYgKCFpc1BsYWluUmVjb3JkKHZpc2l0cykgfHwgIU9iamVjdC52YWx1ZXModmlzaXRzKS5ldmVyeShpc0NvdW50KSkpIHtcbiAgICByZWZ1c2UoJ3Zpc2l0Q291bnRzIG11c3QgbWFwIHN0YWdlIGlkcyB0byBub24tbmVnYXRpdmUgaW50ZWdlcnMnKTtcbiAgfVxuICBpZiAoY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzICE9PSB1bmRlZmluZWQpIGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlcyA9IGRlY29kZVBlbmRpbmdQYXVzZXMoY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzKTtcbiAgLy8gVGhlIHJlZGFjdGlvbiBhIHBhdXNlIGNhcnJpZXMgKG5hbWVzIG9ubHkpIHNlZWRzIHRoZSByZXN1bWVkIHJ1bidzIHJ1bGUg4oCUIGEgbWFsZm9ybWVkIG9uZVxuICAvLyBpcyByZWZ1c2VkLCBuZXZlciBkcm9wcGVkOiBkcm9wcGluZyBpdCB3b3VsZCBzZXJ2ZSBpbiBwbGFpbiB3aGF0IHRoZSBydW4gaGFkIG1hc2tlZC5cbiAgaWYgKGNoZWNrcG9pbnQucmVkYWN0aW9uTWFya3MgIT09IHVuZGVmaW5lZCkgZGVjb2RlUmVkYWN0aW9uTWFya3MoY2hlY2twb2ludC5yZWRhY3Rpb25NYXJrcyk7XG4gIHJldHVybiBjaGVja3BvaW50IGFzIHVua25vd24gYXMgRmxvd2NoYXJ0Q2hlY2twb2ludDtcbn1cblxuLyoqIGByZWRhY3Rpb25NYXJrc2A6IGBrZXlzYCBhbiBhcnJheSBvZiBzdHJpbmdzOyBgZmllbGRzYCwgd2hlbiBwcmVzZW50LCBrZXlzIOKGkiBhcnJheXMgb2Ygc3RyaW5ncy4gKi9cbmZ1bmN0aW9uIGRlY29kZVJlZGFjdGlvbk1hcmtzKG1hcmtzOiB1bmtub3duKTogdm9pZCB7XG4gIGlmICghaXNQbGFpblJlY29yZChtYXJrcykpIHJlZnVzZSgncmVkYWN0aW9uTWFya3MgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgaWYgKCFpc1N0cmluZ3MobWFya3Mua2V5cykpIHJlZnVzZSgncmVkYWN0aW9uTWFya3Mua2V5cyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgY29uc3QgZmllbGRzID0gbWFya3MuZmllbGRzO1xuICBpZiAoZmllbGRzICE9PSB1bmRlZmluZWQgJiYgKCFpc1BsYWluUmVjb3JkKGZpZWxkcykgfHwgIU9iamVjdC52YWx1ZXMoZmllbGRzKS5ldmVyeShpc1N0cmluZ3MpKSkge1xuICAgIHJlZnVzZSgncmVkYWN0aW9uTWFya3MuZmllbGRzIG11c3QgbWFwIGtleXMgdG8gYXJyYXlzIG9mIHN0cmluZ3MnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0cmluZ3ModmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpO1xufVxuXG4vKipcbiAqIGBwZW5kaW5nUGF1c2VzYCAoc3RvcmVkLCB1bnRydXN0ZWQpIGFzIGRlY29kZWQgcmVjb3JkcyDigJQgdGhlIG9uZSBjaGVja1xuICogYGRlY29kZUNoZWNrcG9pbnRgIHJ1bnMsIGFuZCB0aGUgb25lIGBSZXN1bWVFbnRyeS5wbGFuYCBydW5zIG9uIHdoYXQgaXQgaXNcbiAqIGhhbmRlZCBkaXJlY3RseSwgc28gbmVpdGhlciBkb29yIHRha2VzIGFuIHVuY2hlY2tlZCBzaWJsaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUGVuZGluZ1BhdXNlcyhwZW5kaW5nOiB1bmtub3duKTogUGVuZGluZ1BhdXNlW10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocGVuZGluZykpIHJlZnVzZSgncGVuZGluZ1BhdXNlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIHJldHVybiBwZW5kaW5nLm1hcCgocmF3OiB1bmtub3duLCBuKSA9PiBkZWNvZGVQYXVzZVJlY29yZChyYXcsIGBwZW5kaW5nUGF1c2VzWyR7bn1dYCkpO1xufVxuXG5mdW5jdGlvbiBpc0NvdW50KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IDA7XG59XG4iXX0=
@@ -267,4 +267,4 @@ function isPauseSignal(error) {
267
267
  }
268
268
  }
269
269
  exports.isPauseSignal = isPauseSignal;
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7OztBQTRCSCw4RUFBOEU7QUFDOUUsU0FBZ0IsaUJBQWlCLENBQUMsS0FBYztJQUM5QyxNQUFNLENBQUMsR0FBRyxLQUF5RSxDQUFDO0lBQ3BGLE9BQU8sQ0FDTCxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDLGNBQWMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLGNBQWMsS0FBSyxFQUFFLENBQ2xILENBQUM7QUFDSixDQUFDO0FBTEQsOENBS0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSxLQUFLO0lBQ3BDLHVEQUF1RDtJQUM5QyxTQUFTLENBQVU7SUFDNUIsNENBQTRDO0lBQ25DLE9BQU8sQ0FBUztJQUN6Qjs7Ozs7OztPQU9HO0lBQ00sUUFBUSxDQUFlO0lBQ2hDLHlFQUF5RTtJQUNqRSxZQUFZLENBQVc7SUFFL0I7Ozs7Ozs7OztPQVNHO0lBQ0ssZUFBZSxDQUFVO0lBRWpDOzs7Ozs7Ozs7OztPQVdHO0lBQ0ssY0FBYyxHQUE0QyxFQUFFLENBQUM7SUFFckU7Ozs7Ozs7T0FPRztJQUNLLGNBQWMsR0FBMEIsRUFBRSxDQUFDO0lBRW5EOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBOEM7SUFFdEUsNEdBQTRHO0lBQ3BHLGVBQWUsQ0FBVTtJQUVqQyxZQUFZLElBQWEsRUFBRSxPQUFlLEVBQUUsUUFBc0I7UUFDaEUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxRQUFRO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsdUZBQXVGO1FBQ3ZGLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELGtGQUFrRjtJQUNsRixJQUFJLGVBQWU7UUFDakIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25HLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGNBQWMsQ0FBQyxjQUFzQixFQUFFLEtBQWM7UUFDbkQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU87UUFDbkUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3BGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsR0FBdUI7UUFDekMsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBQzFGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlCQUFpQixDQUFDLEtBQWE7UUFDN0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDNUcsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDMUMsSUFBSSxPQUFPLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMzRSxPQUFPLENBQUMsZUFBZSxHQUFHLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzlGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxTQUFpQjtRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsS0FBbUI7UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDdkIsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLFdBQVcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUNuQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDekMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwRSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkQsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlO2dCQUN2QixPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUMsY0FBYyxLQUFLLFFBQVEsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7WUFDaEgsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUNwRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQXlDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWM7UUFDWix5RUFBeUU7UUFDekUsT0FBcUI7WUFDbkIsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQzNCLFdBQVcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNuQyxhQUFhLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDekMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsRSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakQsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztZQUMvRSxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3BGLENBQUM7SUFDSixDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsY0FBc0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7SUFDbkUsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILG1CQUFtQixDQUFDLFNBQWlCLEVBQUUsS0FBOEI7UUFDbkUsaUVBQWlFO1FBQ2pFLG1FQUFtRTtRQUNuRSw0REFBNEQ7UUFDNUQsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7Q0FDRjtBQXBORCxrQ0FvTkM7QUF3UkQsK0RBQStEO0FBRS9ELGdFQUFnRTtBQUNoRSxTQUFnQixhQUFhLENBQUMsS0FBYztJQUMxQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFLLEtBQXFCLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztBQUM5RixDQUFDO0FBRkQsc0NBRUM7QUFFRCx3R0FBd0c7QUFDeEcsU0FBZ0IsYUFBYSxDQUFDLEtBQWM7SUFDMUMseUVBQXlFO0lBQ3pFLHVFQUF1RTtJQUN2RSwyREFBMkQ7SUFDM0QsSUFBSSxDQUFDO1FBQ0gsT0FBTyxDQUNMLEtBQUssWUFBWSxXQUFXO1lBQzVCLENBQUMsS0FBSyxZQUFZLEtBQUs7Z0JBQ3JCLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYTtnQkFDNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7Z0JBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FDMUQsQ0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBZkQsc0NBZUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhdXNlL1Jlc3VtZSDigJQgc2VyaWFsaXphYmxlIGNoZWNrcG9pbnQgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93cy5cbiAqXG4gKiBBIHN0YWdlIHNpZ25hbHMgcGF1c2UgYnkgY2FsbGluZyBgc2NvcGUuJHBhdXNlKGRhdGEpYCB3aGljaCB0aHJvd3MgYSBQYXVzZVNpZ25hbC5cbiAqIFRoZSBzaWduYWwgYnViYmxlcyB1cCB0aHJvdWdoIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyIOKGkiBGbG93Q2hhcnRFeGVjdXRvcixcbiAqIGVhY2ggbGV2ZWwgYWRkaW5nIGl0cyBzdWJmbG93IElEIHRvIHRoZSBwYXRoLlxuICpcbiAqIFRoZSBjaGVja3BvaW50IGNhcHR1cmVzIHdoYXQgYSByZXN1bWUgcmVhZHMsIGFuZCB0aGUgcGF1c2UncyBvd24gcmVjb3JkIOKAlFxuICogbmV2ZXIgdGhlIHJ1bidzIGhpc3RvcnkgKHRoYXQgaXMgYGdldFNuYXBzaG90KClgJ3MpOlxuICogICAtIHBhdXNlZFN0YWdlSWQgKyBzdWJmbG93UGF0aCAoKyBwYXVzZWRCeSk6IHRoZSBjdXJzb3JcbiAqICAgLSBzaGFyZWRTdGF0ZSArIHN1YmZsb3dTdGF0ZXM6IHRoZSBzdGF0ZSBhdCB0aGUgcGF1c2Ug4oCUIHRoZSByb290J3MsIGFuZFxuICogICAgIGVhY2ggc3ViZmxvdydzIG9uIHRoZSBwYXVzZSBwYXRoXG4gKiAgIC0gZXhlY3V0aW9uQ291bnQgKyB2aXNpdENvdW50czogdGhlIGNvdW50ZXJzIHRoZSByZXN1bWVkIHJ1biBjb250aW51ZXNcbiAqICAgLSBwZW5kaW5nUGF1c2VzLCByZWRhY3Rpb25NYXJrczogd2FpdGluZyBzaWJsaW5ncywgcmVkYWN0aW9uIG5hbWVzXG4gKiAgIC0gcGF1c2VEYXRhLCBwYXVzZWRFeGVjdXRpb24sIGludm9rZXJTdGFnZUlkLCBwYXVzZWRBdDogdGhlIHJlY29yZFxuICpcbiAqIFJlc3VtZSByZWJ1aWxkcyB0aGUgZmxvd2NoYXJ0LCByZXN0b3JlcyBzY29wZSwgbmF2aWdhdGVzIHRvIHRoZSBwYXVzZWQgc3RhZ2UsXG4gKiBpbmplY3RzIHJlc3VtZUlucHV0LCBhbmQgY29udGludWVzIHRyYXZlcnNhbC5cbiAqXG4gKiBTdXBwb3J0ZWQgdG9wb2xvZ2llczogbGluZWFyLCBzdWJmbG93IChhdCBhbnkgZGVwdGgg4oCUIG1vdW50ZWQgbGluZWFybHksIGFzIGFcbiAqIGRlY2lkZXIgb3Igc2VsZWN0b3IgYnJhbmNoLCBvciBhcyBhIGZvcmsgY2hpbGQpLCBsb29wLCBuZXN0ZWQgc3ViZmxvdyBpblxuICogbG9vcCwgYW5kIHNldmVyYWwgcGFyYWxsZWwgc2libGluZ3MgcGF1c2luZyBpbiBvbmUgZmFuLW91dCAoZWFjaCBhc2tzIGluXG4gKiB0dXJuIOKAlCBgRmxvd2NoYXJ0Q2hlY2twb2ludC5wZW5kaW5nUGF1c2VzYCkuXG4gKlxuICogTk9UIHJlc3VtYWJsZSB5ZXQ6IGEgcGF1c2UgaW5zaWRlIGEgTEFaWSBzdWJmbG93IChgYWRkTGF6eVN1YkZsb3dDaGFydCpgKSBvclxuICogaW5zaWRlIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGJyYW5jaC4gVGhlaXIgZ3JhcGhzIGFyZSByZXNvbHZlZCBhdCBydW4gdGltZVxuICogYW5kIGFyZSBub3QgaW4gdGhlIGNoYXJ0IGEgcmVzdW1lIHdhbGtzLCBzbyBgcmVzdW1lKClgIHJlZnVzZXMgdGhlXG4gKiBjaGVja3BvaW50IChcIm5vdCBmb3VuZFwiKSBpbnN0ZWFkIG9mIGd1ZXNzaW5nLiBQaW5uZWQgaW5cbiAqIHRlc3QvbGliL3BhdXNlL3Jlc3VtZS1rbm93bi1saW1pdGF0aW9ucy50ZXN0LnRzLlxuICovXG5cbi8vIOKUgOKUgCBQYXVzZVNpZ25hbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUaGUgcGF1c2VkIEVYRUNVVElPTiAoOS4zNy4wKTogdGhlIHJ1biB0aGF0IHBhdXNlZCBhbmQgdGhlIHBhdXNlZCBzdGFnZSdzXG4gKiBydW50aW1lU3RhZ2VJZCBpbiBpdC4gUmVjb3JkZWQgb24gdGhlIGNoZWNrcG9pbnQgKGFuZCBvbiBlYWNoIHF1ZXVlZFxuICogc2libGluZydzIHBlbmRpbmcgcmVjb3JkKSBzbyBhIHJlc3VtZSBjYW4gTElOSyB0byBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzZWRFeGVjdXRpb24ge1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZWRhY3Rpb24gYSBwYXVzZSBjYXJyaWVzIHRvIHRoZSByZXN1bWVkIHJ1biDigJQgTkFNRVMgb25seSwgbmV2ZXIgYSB2YWx1ZVxuICogKHRoZSBjaGVja3BvaW50IHN0YXlzIHJlYWwpOiB0aGUga2V5cyBtYXJrZWQgc2VjcmV0IGZvciB0aGUgcmVzdCBvZiB0aGUgcnVuXG4gKiAoYSBwZXItY2FsbCBgc2V0VmFsdWUoa2V5LCB2YWx1ZSwgdHJ1ZSlgLCBhIGtleSB0aGUgcG9saWN5IHJlZGFjdGVkIHdob2xlLCBhXG4gKiBzdWJmbG93IG1hcHBlcidzIHRhaW50KSBhbmQgdGhlIGZpZWxkcyBhIG1hcHBlciBoYW5kZWQgdG8gYSBuZXcga2V5LiBSZXN1bWVcbiAqIHNlZWRzIHRoZSByZXN1bWVkIHJ1bidzIHJ1bGUgd2l0aCB0aGVtLCBzbyBhIGNvcHkgbWFkZSBiZWZvcmUgdGhlIHBhdXNlIGlzXG4gKiBzdGlsbCBtYXNrZWQgYWZ0ZXIgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkYWN0aW9uTWFya3Mge1xuICByZWFkb25seSBrZXlzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIEtleSDihpIgdGhlIGZpZWxkIHBhdGhzIGEgbWFwcGVyIGhhbmRlZCBpdC4gQWJzZW50IHdoZW4gbm9uZS4gKi9cbiAgcmVhZG9ubHkgZmllbGRzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+Pjtcbn1cblxuLyoqIFRydWUgZm9yIGEgd2VsbC1mb3JtZWQge0BsaW5rIFBhdXNlZEV4ZWN1dGlvbn0gKHR3byBub24tZW1wdHkgc3RyaW5ncykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZWRFeGVjdXRpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQYXVzZWRFeGVjdXRpb24ge1xuICBjb25zdCB2ID0gdmFsdWUgYXMgeyBydW5JZD86IHVua25vd247IHJ1bnRpbWVTdGFnZUlkPzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygdj8ucnVuSWQgPT09ICdzdHJpbmcnICYmIHYucnVuSWQgIT09ICcnICYmIHR5cGVvZiB2LnJ1bnRpbWVTdGFnZUlkID09PSAnc3RyaW5nJyAmJiB2LnJ1bnRpbWVTdGFnZUlkICE9PSAnJ1xuICApO1xufVxuXG4vKipcbiAqIFRocm93biBieSBgc2NvcGUuJHBhdXNlKClgIHRvIHNpZ25hbCB0aGF0IGV4ZWN1dGlvbiBzaG91bGQgc3RvcFxuICogYW5kIGNyZWF0ZSBhIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50LlxuICpcbiAqIEJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3IgKHdoaWNoIHByZXBlbmRzIHN1YmZsb3cgSUQgdG8gcGF0aClcbiAqIGFuZCBpcyBjYXVnaHQgYnkgRmxvd2NoYXJ0VHJhdmVyc2VyL0Zsb3dDaGFydEV4ZWN1dG9yLlxuICovXG5leHBvcnQgY2xhc3MgUGF1c2VTaWduYWwgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE6IHVua25vd247XG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgJHBhdXNlKCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEhPVyB0aGUgcGF1c2Ugd2FzIHJhaXNlZCDigJQgYCdpbnRlcnJ1cHQnYCB3aGVuIGEgc3RhZ2UgYm9keSBjYWxsZWRcbiAgICogYGludGVycnVwdChzY29wZSwgcGF5bG9hZClgLCBhYnNlbnQgZm9yIHRoZSBgYWRkUGF1c2FibGVGdW5jdGlvbmBcbiAgICogZXhlY3V0ZS9yZXN1bWUgcGF0aC4gU2V0IGF0IHRoZSBzdGFnZSBib3VuZGFyeSAoYFN0YWdlUnVubmVyYCksIGNhcnJpZWRcbiAgICogb250byB0aGUgY2hlY2twb2ludCwgYW5kIHJlYWQgYnkgYHJlc3VtZSgpYCB0byBwaWNrIHRoZSByZS1lbnRyeTogYW5cbiAgICogaW50ZXJydXB0ZWQgc3RhZ2UgcmUtcnVucyBpdHMgT1dOIGZ1bmN0aW9uIGZyb20gdGhlIHRvcCAoc3RhZ2VzIGFyZVxuICAgKiBhdG9taWMpLCBhIHBhdXNhYmxlIHN0YWdlIHJ1bnMgaXRzIGByZXN1bWVGbmAuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnO1xuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEJ1aWx0IGR1cmluZyBidWJibGUtdXAuICovXG4gIHByaXZhdGUgX3N1YmZsb3dQYXRoOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW52b2tlciBjb250ZXh0IOKAlCBlbnJpY2hlZCBkdXJpbmcgYnViYmxlLXVwIHdoZW4gYSBQYXVzZVNpZ25hbCBwYXNzZXNcbiAgICogdGhyb3VnaCBhIGRlY2lkZXIsIHNlbGVjdG9yLCBvciBmb3JrIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZSBpbnZva2VyIGlzIHRoZSBzdGFnZSB0aGF0IGNhbGxlZCBleGVjdXRlTm9kZSgpIG9uIHRoZSBwYXVzZWQgY2hpbGQuXG4gICAqIENhcHR1cmVkIGR1cmluZyB0cmF2ZXJzYWwgKG5vdCByZWNvbnN0cnVjdGVkIGZyb20gdGhlIHRyZWUpLiAoVGhlXG4gICAqIGludm9rZXIncyBgLm5leHRgIGlkIHJvZGUgYmVzaWRlIGl0IHVudGlsIDkuMzkuMCBhc1xuICAgKiBgY29udGludWF0aW9uU3RhZ2VJZGA7IHdoYXQgcnVucyBhZnRlciBhIHJlc3VtZSBjb21lcyBmcm9tIHRoZSBjaGFydFxuICAgKiBzaW5jZSA5LjI4LjAsIHNvIGl0IGlzIG5vIGxvbmdlciBjYXJyaWVkLilcbiAgICovXG4gIHByaXZhdGUgX2ludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIHBvcHVsYXRlZCBkdXJpbmcgYnViYmxlLXVwIGJ5XG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJpZ2h0IGJlZm9yZSByZS10aHJvdy4gRWFjaCBlbnRyeSBpcyBvbmVcbiAgICogc3ViZmxvdydzIHByZS1wYXVzZSBzaGFyZWQgc3RhdGUsIGtleWVkIGJ5IHRoZSBwYXRoLXByZWZpeGVkXG4gICAqIHN1YmZsb3cgaWQgKG1hdGNoZXMgYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcywgdGhlIG5lc3RlZCBgU2hhcmVkTWVtb3J5YCBpcyBnYXJiYWdlLWNvbGxlY3RlZFxuICAgKiBiZWZvcmUgdGhlIGNoZWNrcG9pbnQgaXMgYnVpbHQuIE9uIHJlc3VtZSwgdGhlIGlubmVyIHJ1bnRpbWUgaXNcbiAgICogcmUtY3JlYXRlZCBlbXB0eSBhbmQgcmVzdW1lIGhhbmRsZXJzIHJlYWRpbmcgcHJlLXBhdXNlIHNjb3BlXG4gICAqIChlLmcuLCBhbiBBZ2VudCdzIGBzY29wZS5oaXN0b3J5YCwgYHNjb3BlLnBhdXNlZFRvb2xDYWxsSWRgKVxuICAgKiBjcmFzaCB3aXRoIFwiWCBpcyBub3QgaXRlcmFibGVcIiAvIHVuZGVmaW5lZC5cbiAgICovXG4gIHByaXZhdGUgX3N1YmZsb3dTdGF0ZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHt9O1xuXG4gIC8qKlxuICAgKiBQYXVzZXMgdGhhdCBQQVJBTExFTCBTSUJMSU5HUyByYWlzZWQgaW4gdGhlIHNhbWUgZmFuLW91dCBhcyB0aGlzIG9uZSxcbiAgICogd2FpdGluZyB0aGVpciB0dXJuICg5LjI4LjApLiBSZWNvcmRlZCBieSBgQ2hpbGRyZW5FeGVjdXRvcmAgd2hlbiBtb3JlXG4gICAqIHRoYW4gb25lIGNoaWxkIG9mIGEgZm9yayAob3IgbW9yZSB0aGFuIG9uZSBzZWxlY3RlZCBicmFuY2gpIHBhdXNlczogdGhlXG4gICAqIGZpcnN0IHBhdXNlIGlzIHRoZSBvbmUgdGhhdCBpcyBhc2tlZCwgdGhlIG90aGVycyByaWRlIGhlcmUgaW5zdGVhZCBvZlxuICAgKiBiZWluZyBkcm9wcGVkLiBFYWNoIHBhdGggaXMgcmVsYXRpdmUgdG8gd2hlcmUgdGhlIHNpZ25hbCBjdXJyZW50bHkgaXNcbiAgICogYW5kIGdyb3dzIHdpdGggaXQg4oCUIGBwcmVwZW5kU3ViZmxvd2AgcHJlcGVuZHMgdG8gZXZlcnkgZW50cnkgdG9vLlxuICAgKi9cbiAgcHJpdmF0ZSBfcGVuZGluZ1BhdXNlczogTXV0YWJsZVBlbmRpbmdQYXVzZVtdID0gW107XG5cbiAgLyoqXG4gICAqIFdISUNIIGV4ZWN1dGlvbiBwYXVzZWQg4oCUIGl0cyBydW50aW1lU3RhZ2VJZCBzdGFtcGVkIG9uY2UgYXQgdGhlIHN0YWdlXG4gICAqIGJvdW5kYXJ5IChgU3RhZ2VSdW5uZXJgKSwgaXRzIHJ1biBhZGRlZCB3aGVuIHRoZSBjaGVja3BvaW50IGlzIGJ1aWx0XG4gICAqIChgY29tcGxldGVFeGVjdXRpb25gKSwgb3IgYm90aCBjYXJyaWVkIG92ZXIgZm9yIGEgcXVldWVkIHNpYmxpbmcuXG4gICAqL1xuICBwcml2YXRlIF9wYXVzZWRFeGVjdXRpb24/OiB7IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH07XG5cbiAgLyoqIFRoZSBwYXVzZWQgZXhlY3V0aW9uJ3MgaWRlbXBvdGVuY3kga2V5IChQMykg4oCUIGEgdG91Y2hpbmcgc3RhZ2Uncywgc3RhbXBlZCBvbmNlIGF0IHRoZSBzdGFnZSBib3VuZGFyeS4gKi9cbiAgcHJpdmF0ZSBfaWRlbXBvdGVuY3lLZXk/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogdW5rbm93biwgc3RhZ2VJZDogc3RyaW5nLCBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnKSB7XG4gICAgc3VwZXIoJ0V4ZWN1dGlvbiBwYXVzZWQnKTtcbiAgICB0aGlzLm5hbWUgPSAnUGF1c2VTaWduYWwnO1xuICAgIHRoaXMucGF1c2VEYXRhID0gZGF0YTtcbiAgICB0aGlzLnN0YWdlSWQgPSBzdGFnZUlkO1xuICAgIGlmIChwYXVzZWRCeSkgdGhpcy5wYXVzZWRCeSA9IHBhdXNlZEJ5O1xuICAgIHRoaXMuX3N1YmZsb3dQYXRoID0gW107XG4gICAgLy8gUGF1c2VTaWduYWwgaXMgY29udHJvbCBmbG93LCBub3QgYSByZWFsIGVycm9yIOKAlCBzdGFjayB0cmFjZSBoYXMgbm8gZGlhZ25vc3RpYyB2YWx1ZS5cbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cblxuICBnZXQgc3ViZmxvd1BhdGgoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9zdWJmbG93UGF0aDtcbiAgfVxuXG4gIC8qKiBUaGUgcGF1c2VkIGV4ZWN1dGlvbiAoaXRzIHJ1biBhbmQgYFtwYXRoL11zdGFnZUlkI05gKSwgb25jZSBib3RoIGFyZSBrbm93bi4gKi9cbiAgZ2V0IHBhdXNlZEV4ZWN1dGlvbigpOiBQYXVzZWRFeGVjdXRpb24gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGUgPSB0aGlzLl9wYXVzZWRFeGVjdXRpb247XG4gICAgcmV0dXJuIGU/LnJ1bklkICE9PSB1bmRlZmluZWQgPyB7IHJ1bklkOiBlLnJ1bklkLCBydW50aW1lU3RhZ2VJZDogZS5ydW50aW1lU3RhZ2VJZCB9IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCB3aGljaCBFWEVDVVRJT04gcGF1c2VkLiBGaXJzdCBzdGFtcCB3aW5zOiB0aGUgc2lnbmFsIGJ1YmJsZXNcbiAgICogdGhyb3VnaCBvdXRlciBib3VuZGFyaWVzIHRoYXQgbXVzdCBub3Qgb3ZlcndyaXRlIGl0LiBUaGUgc3RhZ2UgYm91bmRhcnlcbiAgICoga25vd3Mgb25seSB0aGUgcnVudGltZVN0YWdlSWQ7IGEgcXVldWVkIHNpYmxpbmcgcmFpc2VkIGFnYWluIG9uIHJlc3VtZVxuICAgKiBjYXJyaWVzIGJvdGggKGl0IHBhdXNlZCBpbiBhbiBFQVJMSUVSIHJ1bikuXG4gICAqL1xuICBzdGFtcEV4ZWN1dGlvbihydW50aW1lU3RhZ2VJZDogc3RyaW5nLCBydW5JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wYXVzZWRFeGVjdXRpb24gIT09IHVuZGVmaW5lZCB8fCAhcnVudGltZVN0YWdlSWQpIHJldHVybjtcbiAgICB0aGlzLl9wYXVzZWRFeGVjdXRpb24gPSB7IHJ1bnRpbWVTdGFnZUlkLCAuLi4ocnVuSWQgIT09IHVuZGVmaW5lZCAmJiB7IHJ1bklkIH0pIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlkZW1wb3RlbmN5IGtleSB0aGUgcGF1c2VkIGV4ZWN1dGlvbiByYW4gdW5kZXIgKFAzKSDigJQgYSB0b3VjaGluZyBzdGFnZSdzLiBJdCByaWRlcyB0aGUgY2hlY2twb2ludCBzbyB0aGVcbiAgICogcmVzdW1lIHJlLXJ1bnMgdGhlIHN0YWdlIChvciBpdHMgYHJlc3VtZUZuYCkgdW5kZXIgdGhlIFNBTUUga2V5OiB0aGUgaW5wdXQgaXRzIHJ1bGUgcmVhZCBkb2VzIG5vdCBjcm9zcyBhXG4gICAqIHJlc3VtZS4gRmlyc3Qgc3RhbXAgd2lucy5cbiAgICovXG4gIGdldCBpZGVtcG90ZW5jeUtleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pZGVtcG90ZW5jeUtleTtcbiAgfVxuXG4gIHN0YW1wSWRlbXBvdGVuY3lLZXkoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faWRlbXBvdGVuY3lLZXkgPT09IHVuZGVmaW5lZCAmJiBrZXkgIT09IHVuZGVmaW5lZCkgdGhpcy5faWRlbXBvdGVuY3lLZXkgPSBrZXk7XG4gIH1cblxuICAvKipcbiAgICogTmFtZSB0aGUgcnVuIGZvciBldmVyeSBwYXVzZSBvbiB0aGlzIHNpZ25hbCB0aGF0IHBhdXNlZCBpbiBpdCDigJQgdGhpcyBvbmVcbiAgICogYW5kIGl0cyBxdWV1ZWQgc2libGluZ3MgdGhhdCBkbyBub3QgYWxyZWFkeSBjYXJyeSBhIHJ1biAoYSBzaWJsaW5nIHJhaXNlZFxuICAgKiBhZ2FpbiBvbiByZXN1bWUga2VlcHMgdGhlIHJ1biBpdCBwYXVzZWQgaW4pLiBDYWxsZWQgb25jZSwgd2hlbiB0aGVcbiAgICogY2hlY2twb2ludCBpcyBidWlsdC5cbiAgICovXG4gIGNvbXBsZXRlRXhlY3V0aW9uKHJ1bklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGF1c2VkRXhlY3V0aW9uICYmIHRoaXMuX3BhdXNlZEV4ZWN1dGlvbi5ydW5JZCA9PT0gdW5kZWZpbmVkKSB0aGlzLl9wYXVzZWRFeGVjdXRpb24ucnVuSWQgPSBydW5JZDtcbiAgICBmb3IgKGNvbnN0IHBlbmRpbmcgb2YgdGhpcy5fcGVuZGluZ1BhdXNlcykge1xuICAgICAgaWYgKHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uICYmIHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uLnJ1bklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGVuZGluZy5wYXVzZWRFeGVjdXRpb24gPSB7IHJ1bnRpbWVTdGFnZUlkOiBwZW5kaW5nLnBhdXNlZEV4ZWN1dGlvbi5ydW50aW1lU3RhZ2VJZCwgcnVuSWQgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlcGVuZCBhIHN1YmZsb3cgSUQgdG8gdGhlIHBhdGggKGNhbGxlZCBkdXJpbmcgYnViYmxlLXVwKS4gVGhlIHBlbmRpbmdcbiAgICogc2libGluZyBwYXVzZXMgcmlkZSB0aGUgc2FtZSBib3VuZGFyeSwgc28gdGhlaXIgcGF0aHMgZ3JvdyB3aXRoIGl0LlxuICAgKi9cbiAgcHJlcGVuZFN1YmZsb3coc3ViZmxvd0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJmbG93UGF0aC51bnNoaWZ0KHN1YmZsb3dJZCk7XG4gICAgZm9yIChjb25zdCBwZW5kaW5nIG9mIHRoaXMuX3BlbmRpbmdQYXVzZXMpIHBlbmRpbmcuc3ViZmxvd1BhdGgudW5zaGlmdChzdWJmbG93SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXVlIGEgcGFyYWxsZWwgc2libGluZydzIHBhdXNlIGJlaGluZCB0aGlzIG9uZSAoaXRzIHBhdGggcmVsYXRpdmUgdG9cbiAgICogdGhpcyBzaWduYWwncyBjdXJyZW50IGxldmVsKS4gQ29waWVkIGluOiB0aGUgZW50cnkgaXMgb3duZWQgYnkgdGhlXG4gICAqIHNpZ25hbCBmcm9tIGhlcmUgb24uXG4gICAqL1xuICBhZGRQZW5kaW5nUGF1c2UocGF1c2U6IFBlbmRpbmdQYXVzZSk6IHZvaWQge1xuICAgIHRoaXMuX3BlbmRpbmdQYXVzZXMucHVzaCh7XG4gICAgICBwYXVzZWRTdGFnZUlkOiBwYXVzZS5wYXVzZWRTdGFnZUlkLFxuICAgICAgc3ViZmxvd1BhdGg6IFsuLi5wYXVzZS5zdWJmbG93UGF0aF0sXG4gICAgICBzdWJmbG93U3RhdGVzOiB7IC4uLnBhdXNlLnN1YmZsb3dTdGF0ZXMgfSxcbiAgICAgIC4uLihwYXVzZS5wYXVzZURhdGEgIT09IHVuZGVmaW5lZCAmJiB7IHBhdXNlRGF0YTogcGF1c2UucGF1c2VEYXRhIH0pLFxuICAgICAgLi4uKHBhdXNlLnBhdXNlZEJ5ICYmIHsgcGF1c2VkQnk6IHBhdXNlLnBhdXNlZEJ5IH0pLFxuICAgICAgLi4uKHBhdXNlLnBhdXNlZEV4ZWN1dGlvbiAmJlxuICAgICAgICB0eXBlb2YgcGF1c2UucGF1c2VkRXhlY3V0aW9uLnJ1bnRpbWVTdGFnZUlkID09PSAnc3RyaW5nJyAmJiB7IHBhdXNlZEV4ZWN1dGlvbjogeyAuLi5wYXVzZS5wYXVzZWRFeGVjdXRpb24gfSB9KSxcbiAgICAgIC4uLihwYXVzZS5pZGVtcG90ZW5jeUtleSAhPT0gdW5kZWZpbmVkICYmIHsgaWRlbXBvdGVuY3lLZXk6IHBhdXNlLmlkZW1wb3RlbmN5S2V5IH0pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcmFsbGVsIHNpYmxpbmdzJyBwYXVzZXMgd2FpdGluZyBiZWhpbmQgdGhpcyBvbmUsIGluIHRoZSBvcmRlciB0aGV5IHdpbGxcbiAgICogYmUgYXNrZWQuIEluIGZsaWdodCwgYSBzaWJsaW5nIHRoYXQgcGF1c2VkIGluIFRISVMgcnVuIGNhcnJpZXMgb25seSBpdHNcbiAgICogcnVudGltZVN0YWdlSWQ7IGBjb21wbGV0ZUV4ZWN1dGlvbmAgKGF0IGNoZWNrcG9pbnQgYnVpbGQpIGFkZHMgdGhlIHJ1bi5cbiAgICovXG4gIGdldCBwZW5kaW5nUGF1c2VzKCk6IHJlYWRvbmx5IFBlbmRpbmdQYXVzZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ1BhdXNlcyBhcyByZWFkb25seSBQZW5kaW5nUGF1c2VbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHBhdXNlIGFzIGEge0BsaW5rIFBlbmRpbmdQYXVzZX0g4oCUIHdoYXQgYENoaWxkcmVuRXhlY3V0b3JgIHF1ZXVlc1xuICAgKiBiZWhpbmQgYSBzaWJsaW5nJ3MgcGF1c2Ugd2hlbiBib3RoIHBhdXNlZCBpbiBvbmUgZmFuLW91dC5cbiAgICovXG4gIHRvUGVuZGluZ1BhdXNlKCk6IFBlbmRpbmdQYXVzZSB7XG4gICAgLy8gSW4gZmxpZ2h0IChzZWUgYHBlbmRpbmdQYXVzZXNgKTogdGhlIHJ1biBpcyBhZGRlZCBhdCBjaGVja3BvaW50IGJ1aWxkLlxuICAgIHJldHVybiA8UGVuZGluZ1BhdXNlPntcbiAgICAgIHBhdXNlZFN0YWdlSWQ6IHRoaXMuc3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dQYXRoOiBbLi4udGhpcy5fc3ViZmxvd1BhdGhdLFxuICAgICAgc3ViZmxvd1N0YXRlczogeyAuLi50aGlzLl9zdWJmbG93U3RhdGVzIH0sXG4gICAgICAuLi4odGhpcy5wYXVzZURhdGEgIT09IHVuZGVmaW5lZCAmJiB7IHBhdXNlRGF0YTogdGhpcy5wYXVzZURhdGEgfSksXG4gICAgICAuLi4odGhpcy5wYXVzZWRCeSAmJiB7IHBhdXNlZEJ5OiB0aGlzLnBhdXNlZEJ5IH0pLFxuICAgICAgLi4uKHRoaXMuX3BhdXNlZEV4ZWN1dGlvbiAmJiB7IHBhdXNlZEV4ZWN1dGlvbjogeyAuLi50aGlzLl9wYXVzZWRFeGVjdXRpb24gfSB9KSxcbiAgICAgIC4uLih0aGlzLl9pZGVtcG90ZW5jeUtleSAhPT0gdW5kZWZpbmVkICYmIHsgaWRlbXBvdGVuY3lLZXk6IHRoaXMuX2lkZW1wb3RlbmN5S2V5IH0pLFxuICAgIH07XG4gIH1cblxuICAvKiogVGhlIHN0YWdlIHRoYXQgaW52b2tlZCB0aGUgcGF1c2VkIGNoaWxkIChkZWNpZGVyLCBzZWxlY3RvciwgZm9yaykuICovXG4gIGdldCBpbnZva2VyU3RhZ2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbnZva2VyU3RhZ2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFtcCB0aGUgaW52b2tlciBjb250ZXh0IGR1cmluZyBidWJibGUtdXAuXG4gICAqIENhbGxlZCBieSBkZWNpZGVyL3NlbGVjdG9yL2ZvcmsgaGFuZGxlcnMgd2hlbiBjYXRjaGluZyBhIGNoaWxkJ3MgUGF1c2VTaWduYWwuXG4gICAqIEZpcnN0IGludm9rZXIgd2lucyAoaW5uZXJtb3N0KSDigJQgc3Vic2VxdWVudCBjYWxscyBhcmUgbm8tb3BzLlxuICAgKi9cbiAgc2V0SW52b2tlcihpbnZva2VyU3RhZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbnZva2VyU3RhZ2VJZCkgdGhpcy5faW52b2tlclN0YWdlSWQgPSBpbnZva2VyU3RhZ2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlIGEgc3ViZmxvdydzIGlzb2xhdGVkIFNoYXJlZE1lbW9yeSBhdCB0aGUgbW9tZW50IGl0c1xuICAgKiB0cmF2ZXJzYWwgdGhyZXcuIENhbGxlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCBvbmNlIHBlciBzdWJmbG93XG4gICAqIGJvdW5kYXJ5IG9uIHRoZSBidWJibGUtdXAgcGF0aC4gRWFjaCBjYXB0dXJlIGlzIGtleWVkIGJ5IHRoZVxuICAgKiBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKHRoZSBzYW1lIGlkIHVzZWQgaW4gYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIElubmVybW9zdC1maXJzdDogYSBkZWVwIGBTZXF1ZW5jZShBZ2VudCguLi4pKWAgcGF1c2UgY2FwdHVyZXMgdGhlXG4gICAqIGFnZW50J3Mgc3ViZmxvdyBmaXJzdCwgdGhlbiBpdHMgcGFyZW50J3MsIGFsbCB0aGUgd2F5IHRvIHRoZSByb290XG4gICAqIG1vdW50LiBUaGUgZnVsbCBuZXN0IHN1cnZpdmVzIGludG8gYGNoZWNrcG9pbnQuc3ViZmxvd1N0YXRlc2AuXG4gICAqL1xuICBjYXB0dXJlU3ViZmxvd1Njb3BlKHN1YmZsb3dJZDogc3RyaW5nLCBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICAvLyBEZWZlbnNpdmUgc2hhbGxvdyBjbG9uZSBzbyBsYXRlciBtdXRhdGlvbnMgb24gdGhlIHNvdXJjZSBkb24ndFxuICAgIC8vIGJsZWVkIGludG8gdGhlIGNhcHR1cmVkIHNuYXBzaG90LiBEZWVwIGNsb25pbmcgaXMgdGhlIGNvbnN1bWVyJ3NcbiAgICAvLyByZXNwb25zaWJpbGl0eSAodGhlIHJlc3VtZSB0YXJnZXQgbWF5IG5vdCBldmVuIGJlIG9uIHRoaXNcbiAgICAvLyBwcm9jZXNzKTsgU2hhcmVkTWVtb3J5IHZhbHVlcyBhcmUgY29udmVudGlvbmFsbHkgSlNPTi1mcmllbmRseS5cbiAgICB0aGlzLl9zdWJmbG93U3RhdGVzW3N1YmZsb3dJZF0gPSB7IC4uLnN0YXRlIH07XG4gIH1cblxuICAvKiogQ2FwdHVyZWQgc3ViZmxvdyBzY29wZXMgKHJlYWQtb25seSB2aWV3KS4gKi9cbiAgZ2V0IHN1YmZsb3dTdGF0ZXMoKTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmZsb3dTdGF0ZXM7XG4gIH1cbn1cblxuLy8g4pSA4pSAIFBlbmRpbmdQYXVzZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBIHBhdXNlIGEgUEFSQUxMRUwgU0lCTElORyBvZiB0aGUgcGF1c2VkIHN0YWdlIHJhaXNlZCBpbiB0aGUgc2FtZSBmYW4tb3V0IOKAlFxuICogdHdvIGNoaWxkcmVuIG9mIG9uZSBmb3JrIChvciB0d28gc2VsZWN0ZWQgYnJhbmNoZXMgb2Ygb25lIHNlbGVjdG9yKSB0aGF0XG4gKiBib3RoIHBhdXNlZCAoOS4yOC4wKS4gT25seSBvbmUgcGF1c2UgaXMgYXNrZWQgYXQgYSB0aW1lOiB0aGUgY2hlY2twb2ludCdzXG4gKiBvd24gKGBwYXVzZWRTdGFnZUlkYCksIHRoZW4gZWFjaCBvZiB0aGVzZSBpbiB0dXJuLCB3aXRoIHRoZSBmYW4tb3V0J3Mgam9pblxuICogcnVubmluZyBvbmx5IG9uY2UgZXZlcnkgY2hpbGQgaXMgZG9uZS5cbiAqXG4gKiBFdmVyeXRoaW5nIG5lZWRlZCB0byByYWlzZSB0aGUgc2libGluZydzIHBhdXNlIGFnYWluIGxhdGVyIFdJVEhPVVQgcmUtcnVubmluZ1xuICogdGhlIHNpYmxpbmc6IGl0cyBzdGFnZSwgaXRzIHBhdGgsIGl0cyBjYXB0dXJlZCBzdWJmbG93IHN0YXRlLCBpdHMgcXVlc3Rpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEEgZm9yayB3aG9zZSB0d28gY2hpbGRyZW4gYm90aCBhc2s6IHRoZSBmaXJzdCBjaGVja3BvaW50IGFza3MgYzEgYW5kXG4gKiAvLyBjYXJyaWVzIGMyJ3MgcGF1c2U7IHJlc3VtaW5nIGl0IGZpbmlzaGVzIGMxLCB0aGVuIHBhdXNlcyB3aXRoIGMyJ3NcbiAqIC8vIHF1ZXN0aW9uOyByZXN1bWluZyBUSEFUIGZpbmlzaGVzIGMyIGFuZCBydW5zIHRoZSBqb2luLlxuICogY29uc3QgY3AgPSBleGVjdXRvci5nZXRDaGVja3BvaW50KCkhO1xuICogY3AucGF1c2VkU3RhZ2VJZDsgICAgICAgICAgICAgICAgICAvLyAnYzEvYXNrJ1xuICogY3AucGVuZGluZ1BhdXNlcz8uWzBdLnBhdXNlZFN0YWdlSWQ7IC8vICdjMi9hc2snXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nUGF1c2Uge1xuICAvKiogVGhlIHNpYmxpbmcncyBwYXVzZWQgc3RhZ2UgKHBhdGgtcHJlZml4ZWQgaWQsIGFzIGBwYXVzZWRTdGFnZUlkYCkuICovXG4gIHJlYWRvbmx5IHBhdXNlZFN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgc2libGluZydzIHBhdXNlZCBzdGFnZSAoYXMgYHN1YmZsb3dQYXRoYCkuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBzaWJsaW5nJ3Mgb3duIHN1YmZsb3cgY2FwdHVyZXMg4oCUIHRoZSBzdWJmbG93cyBvbiBJVFMgcGF0aCBiZWxvdyB0aGVcbiAgICogZmFuLW91dC4gVGhlIHN1YmZsb3dzIGFib3ZlIHRoZSBmYW4tb3V0IGFyZSBzaGFyZWQgd2l0aCB0aGUgY2hlY2twb2ludCdzXG4gICAqIG93biBwYXVzZSBhbmQgYXJlIGNhcHR1cmVkIGFnYWluIHdoZW4gdGhpcyBwYXVzZSBpcyByYWlzZWQuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIC8qKiBUaGUgc2libGluZydzIHF1ZXN0aW9uIChhcyBgcGF1c2VEYXRhYCkuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YT86IHVua25vd247XG4gIC8qKiBIb3cgdGhlIHNpYmxpbmcgcGF1c2VkIChhcyBgcGF1c2VkQnlgKS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQnk/OiAnaW50ZXJydXB0JztcbiAgLyoqIFdoaWNoIGV4ZWN1dGlvbiB0aGUgc2libGluZyBwYXVzZWQgaW4gKGFzIGBwYXVzZWRFeGVjdXRpb25gLCA5LjM3LjApIOKAlCBrZXB0IHNvIGl0cyBvd24gcmVzdW1lIGxpbmtzIHRvIGl0LiAqL1xuICByZWFkb25seSBwYXVzZWRFeGVjdXRpb24/OiBQYXVzZWRFeGVjdXRpb247XG4gIC8qKiBUaGUgaWRlbXBvdGVuY3kga2V5IHRoZSBzaWJsaW5nJ3MgZXhlY3V0aW9uIHJhbiB1bmRlciAoYXMgYGlkZW1wb3RlbmN5S2V5YCwgMTAuMSkuICovXG4gIHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xufVxuXG4vKiogQSBwZW5kaW5nIHBhdXNlIHdob3NlIHBhdGggc3RpbGwgZ3Jvd3MgYXMgaXRzIHNpZ25hbCBidWJibGVzIHVwIChpbnRlcm5hbCkuICovXG4vKipcbiAqIFRoZSBzaWduYWwncyBvd24gY29weSBvZiBhIHBlbmRpbmcgcGF1c2UuIEl0cyBgcGF1c2VkRXhlY3V0aW9uYCBtYXkgc3RpbGxcbiAqIGxhY2sgdGhlIHJ1biAoYSBzaWJsaW5nIHRoYXQgcGF1c2VkIGluIFRISVMgcnVuKSB1bnRpbCBgY29tcGxldGVFeGVjdXRpb25gLlxuICovXG50eXBlIE11dGFibGVQZW5kaW5nUGF1c2UgPSBPbWl0PFBlbmRpbmdQYXVzZSwgJ3N1YmZsb3dQYXRoJyB8ICdwYXVzZWRFeGVjdXRpb24nPiAmIHtcbiAgc3ViZmxvd1BhdGg6IHN0cmluZ1tdO1xuICBwYXVzZWRFeGVjdXRpb24/OiB7IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH07XG59O1xuXG4vLyDilIDilIAgUGF1c2VSZXN1bHQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUmV0dXJuZWQgYnkgYSBwYXVzYWJsZSBzdGFnZSdzIGV4ZWN1dGUvcmVzdW1lIGZ1bmN0aW9uIHRvIHNpZ25hbCBwYXVzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gKiAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgcmV0dXJuIHsgcGF1c2U6IHRydWUsIGRhdGE6IHsgcXVlc3Rpb246ICdBcHByb3ZlIG9yZGVyIDEyMz8nIH0gfTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNlUmVzdWx0IHtcbiAgcmVhZG9ubHkgcGF1c2U6IHRydWU7XG4gIC8qKiBEYXRhIHRvIGluY2x1ZGUgaW4gdGhlIGNoZWNrcG9pbnQg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBkYXRhPzogdW5rbm93bjtcbn1cblxuLy8g4pSA4pSAIEZsb3djaGFydENoZWNrcG9pbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogU2VyaWFsaXphYmxlIGNoZWNrcG9pbnQg4oCUIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlc3VtZSBhIHBhdXNlZCBmbG93Y2hhcnQsXG4gKiBhbmQgbm90aGluZyBhIHJlc3VtZSBuZXZlciByZWFkcy5cbiAqXG4gKiBMRUFOIChmb3JtYXQgMik6IGl0cyBzaXplIGlzIHRoZSBTVEFURSdzLCBuZXZlciB0aGUgcnVuJ3MgbGVuZ3RoLiBUaGUgY3Vyc29yXG4gKiBpcyBgcGF1c2VkU3RhZ2VJZGAgKyBgc3ViZmxvd1BhdGhgOyB0aGUgc3RhdGUgaXMgYHNoYXJlZFN0YXRlYCBwbHVzIHRoZVxuICogY2FwdHVyZXMgb2YgdGhlIHN1YmZsb3dzIG9uIHRoYXQgcGF0aCAoYHN1YmZsb3dTdGF0ZXNgKS4gVGhlIHJ1bidzIGhpc3Rvcnkg4oCUXG4gKiB0aGUgZXhlY3V0aW9uIHRyZWUsIHRoZSBmaW5pc2hlZCBzdWJmbG93cycgcmVzdWx0cywgdGhlIGNvbW1pdCBsb2cg4oCUIGlzIG5vdFxuICogaGVyZTogcmVhZCBpdCBmcm9tIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYCBiZWZvcmUgYHJlc3VtZSgpYCAoZm9ybWF0IDFcbiAqIGNhcnJpZWQgYGV4ZWN1dGlvblRyZWVgIGFuZCBgc3ViZmxvd1Jlc3VsdHNgOyBubyByZXN1bWUgcmVhZCB0aGVtKS5cbiAqXG4gKiBKU09OLXNhZmU6IG5vIGZ1bmN0aW9ucywgbm8gY2xhc3MgaW5zdGFuY2VzLCBubyBTREsgY2xpZW50cy5cbiAqIFN0b3JlIGFueXdoZXJlOiBSZWRpcywgUG9zdGdyZXMsIGxvY2FsU3RvcmFnZSwgYSBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjaGVja3BvaW50ID0gZXhlY3V0b3IuZ2V0Q2hlY2twb2ludCgpOyAvLyBhZnRlciBwYXVzZVxuICogYXdhaXQgcmVkaXMuc2V0KGBzZXNzaW9uOiR7aWR9YCwgSlNPTi5zdHJpbmdpZnkoY2hlY2twb2ludCkpO1xuICpcbiAqIC8vIFJlc3VtZSAoaG91cnMgbGF0ZXIsIHBvc3NpYmx5IGRpZmZlcmVudCBzZXJ2ZXIpXG4gKiBjb25zdCBjaGVja3BvaW50ID0gSlNPTi5wYXJzZShhd2FpdCByZWRpcy5nZXQoYHNlc3Npb246JHtpZH1gKSk7XG4gKiBjb25zdCBleGVjdXRvciA9IG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCk7XG4gKiBhd2FpdCBleGVjdXRvci5yZXN1bWUoY2hlY2twb2ludCwgeyBhcHByb3ZlZDogdHJ1ZSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3djaGFydENoZWNrcG9pbnQge1xuICAvKipcbiAgICogVGhlIGNoZWNrcG9pbnQgRk9STUFUOiBgMmAsIHRoZSBsZWFuIGNoZWNrcG9pbnQgKGAxYCBmcm9tIDkuMzkuMDsgYWJzZW50XG4gICAqIGJlZm9yZSkuIGByZXN1bWUoKWAgcmVhZHMgZXZlcnkgb2xkZXIgb25lIHRocm91Z2ggdGhlIG9uZSB1cGNhc3RlclxuICAgKiAoYHBhdXNlL3JlY29yZC50cyDCtyB1cGNhc3RDaGVja3BvaW50YCksIHdoaWNoIGRyb3BzIHdoYXQgbGF0ZXIgZm9ybWF0c1xuICAgKiBkcm9wcGVkIOKAlCBmb3JtYXQgMSdzIGBleGVjdXRpb25UcmVlYCBhbmQgYHN1YmZsb3dSZXN1bHRzYCwgdGhlIGxlZ2FjeVxuICAgKiBgY29udGludWF0aW9uU3RhZ2VJZGAg4oCUIG5vbmUgb2Ygd2hpY2ggYSByZXN1bWUgZXZlciByZWFkLiBBIHZlcnNpb24gdGhpc1xuICAgKiByZWxlYXNlIGRvZXMgbm90IGtub3cgaXMgcmVmdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrcG9pbnRWZXJzaW9uPzogMjtcblxuICAvKiogU2NvcGUgc3RhdGUgYXQgdGhlIHBhdXNlIHBvaW50IOKAlCBhbGwgc2hhcmVkIG1lbW9yeSBrZXkvdmFsdWVzLiAqL1xuICByZWFkb25seSBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIElEIG9mIHRoZSBzdGFnZSB0aGF0IHBhdXNlZC4gVXNlZCBieSByZXN1bWUoKSB0byBmaW5kIHRoZSBub2RlIGluIHRoZSBncmFwaC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkU3RhZ2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF1c2VkIEVYRUNVVElPTiAoOS4zNy4wKTogdGhlIHJ1biB0aGF0IHBhdXNlZCBhbmQgdGhlIHBhdXNlZCBzdGFnZSdzXG4gICAqIHJ1bnRpbWVTdGFnZUlkIGluIGl0ICh0aGUgaWQgaXRzIGBvblBhdXNlYCBldmVudCBhbmQgaXRzIGNvbW1pdCBjYXJyeSkuXG4gICAqIFJlYWQgYnkgYHJlc3VtZSgpYCBpbnRvIHRoZSBgb25SZXN1bWVgIGV2ZW50J3MgYHRyYXZlcnNhbENvbnRleHQucmVzdW1lZEZyb21gXG4gICAqIGxpbmsg4oCUIG5ldmVyIHVzZWQgdG8gcGxhbiB0aGUgcmUtZW50cnkuIEFic2VudCBvbiBhbiBvbGRlciBjaGVja3BvaW50LFxuICAgKiB3aGljaCB0aGVuIHJlc3VtZXMgd2l0aG91dCBhIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRFeGVjdXRpb24/OiBQYXVzZWRFeGVjdXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVtcG90ZW5jeSBrZXkgdGhlIHBhdXNlZCBleGVjdXRpb24gcmFuIHVuZGVyICgxMC4xKSDigJQgcHJlc2VudCBvbmx5IHdoZW4gdGhlIHBhdXNlZCBzdGFnZSBgdG91Y2hlc2AgYW5cbiAgICogb3V0c2lkZSBzeXN0ZW0gd2l0aCBhIGtleSBydWxlLiBgcmVzdW1lKClgIHJlLXJ1bnMgdGhlIHN0YWdlIChvciBydW5zIGl0cyBgcmVzdW1lRm5gKSB1bmRlciBUSElTIGtleSwgbmV2ZXIgYVxuICAgKiByZWNvbXB1dGVkIG9uZTogdGhlIGlucHV0IHRoZSBydWxlIHJlYWQgZG9lcyBub3QgY3Jvc3MgYSByZXN1bWUsIGFuZCBhIGRpZmZlcmVudCBrZXkgb24gdGhlIHJlLXJ1biB3b3VsZCBtYWtlXG4gICAqIHRoZSBvdXRzaWRlIHN5c3RlbSBhcHBseSB0aGUgZWZmZWN0IHR3aWNlLiBBIHJlYWwgdmFsdWUsIGxpa2UgYHNoYXJlZFN0YXRlYCDigJQgbm8gcmVkYWN0aW9uIHBvbGljeSB0b3VjaGVzIHRoZVxuICAgKiBjaGVja3BvaW50LiBBIG1hbGZvcm1lZCBvbmUgaXMgcmVmdXNlZCBhdCBgcmVzdW1lKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgaWRlbXBvdGVuY3lLZXk/OiBzdHJpbmc7XG5cbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlIChlLmcuLCBbJ3NmLXBheW1lbnQnLCAnc2YtdmFsaWRhdGlvbiddKS5cbiAgICogIEVtcHR5IGFycmF5IHdoZW4gcGF1c2VkIGF0IHRoZSB0b3AgbGV2ZWwuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogRGF0YSBmcm9tICRwYXVzZSgpIOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VEYXRhPzogdW5rbm93bjtcblxuICAvKipcbiAgICogSE9XIHRoZSBwYXVzZSB3YXMgcmFpc2VkLiBgJ2ludGVycnVwdCdgIG1lYW5zIGEgc3RhZ2UgYm9keSBjYWxsZWRcbiAgICogYGludGVycnVwdChzY29wZSwgeyByZWFzb24sIGV4cGVjdHM/IH0pYCBhbmQgYHBhdXNlRGF0YWAgSVMgdGhhdCBwYXlsb2FkO1xuICAgKiBhYnNlbnQgbWVhbnMgdGhlIGBhZGRQYXVzYWJsZUZ1bmN0aW9uYCBleGVjdXRlL3Jlc3VtZSBwYXRoIChldmVyeVxuICAgKiBjaGVja3BvaW50IHdyaXR0ZW4gYmVmb3JlIDkuMTQuMCBvbWl0cyBpdCwgd2hpY2ggaXMgZXhhY3RseSByaWdodCkuXG4gICAqXG4gICAqIGByZXN1bWUoKWAgcmVhZHMgdGhpcyB0byBwaWNrIHRoZSByZS1lbnRyeSwgYW5kIHRoZSB0d28gZGlmZmVyIGJ5IGxhdzpcbiAgICogYW4gaW50ZXJydXB0ZWQgc3RhZ2UgUkUtUlVOUyBJVFMgT1dOIEZVTkNUSU9OIEZST00gVEhFIFRPUCAoc3RhZ2VzIGFyZVxuICAgKiBhdG9taWMg4oCUIHRoZSBhbnN3ZXIgY29tZXMgYmFjayBvdXQgb2YgdGhlIGBpbnRlcnJ1cHQoKWAgY2FsbCksIHdoaWxlIGFcbiAgICogcGF1c2FibGUgc3RhZ2UgcnVucyBpdHMgc2VwYXJhdGUgYHJlc3VtZUZuYC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdXNlZEJ5PzogJ2ludGVycnVwdCc7XG5cbiAgLyoqXG4gICAqIFN1YmZsb3cgc2NvcGUgY2FwdHVyZSDigJQgb25lIGVudHJ5IHBlciBzdWJmbG93IGJvdW5kYXJ5IG9uIHRoZSBwYXRoXG4gICAqIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEtleWVkIGJ5IHBhdGgtcHJlZml4ZWQgc3ViZmxvdyBpZCAobWF0Y2hlc1xuICAgKiBgc3ViZmxvd1BhdGhgIGVudHJpZXMpLiBFYWNoIHZhbHVlIGlzIHRoZSBzdWJmbG93J3MgcHJlLXBhdXNlXG4gICAqIHNoYXJlZCBzdGF0ZS5cbiAgICpcbiAgICogQWx3YXlzIHByZXNlbnQgKGVtcHR5IGB7fWAgZm9yIHJvb3QtbGV2ZWwgcGF1c2VzIHdoZXJlIG5vIHN1YmZsb3dzXG4gICAqIHdlcmUgZW50ZXJlZCkuIE9uIHJlc3VtZSwgYFN1YmZsb3dFeGVjdXRvcmAgc2VlZHMgZWFjaCBuZXN0ZWQgcnVudGltZVxuICAgKiBvbiB0aGUgcGF0aCBmcm9tIHRoaXMgbWFwIOKAlCBPTkNFLCBvbiBpdHMgZmlyc3QgZW50cnksIGluIHBsYWNlIG9mIHRoZVxuICAgKiBpbnB1dE1hcHBlcidzIHZhbHVlcyAodGhlIG1hcHBlciBzdGlsbCBydW5zLCBmb3IgdGhlIHN0YWdlcycgcmVhZC1vbmx5XG4gICAqIGFyZ3MpIOKAlCBzbyByZXN1bWUgaGFuZGxlcnMgc2VlIHByZS1wYXVzZSBzY29wZSBhY3Jvc3Mgc2FtZS1leGVjdXRvciBBTkRcbiAgICogY3Jvc3MtZXhlY3V0b3IgcmVzdGFydHMuIE9ubHkgdGhlIHN1YmZsb3dzIE9OIGBzdWJmbG93UGF0aGAgcmVhZCBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHN1YmZsb3dTdGF0ZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcblxuICAvKipcbiAgICogVGhlIHNoYXJlZCBleGVjdXRpb24gY291bnRlciBhdCB0aGUgbW9tZW50IG9mIHBhdXNlIOKAlCB0aGUgbnVtYmVyIG9mIHN0YWdlc1xuICAgKiBleGVjdXRlZCBzbyBmYXIgdGhpcyBydW4uIFJlc3VtZSBzZWVkcyBpdCBzbyBwb3N0LXJlc3VtZSBgcnVudGltZVN0YWdlSWRgc1xuICAgKiAoYHN0YWdlSWQjZXhlY3V0aW9uSW5kZXhgKSBrZWVwIGNsaW1iaW5nIGFuZCBuZXZlciBjb2xsaWRlIHdpdGggcHJlLXBhdXNlXG4gICAqIG9uZXMsIHdoaWNoIGlzIHdoYXQgdGhlIHdob2xlIGV2ZW50LWNvcnJlbGF0aW9uIG1vZGVsIHJlc3RzIG9uLlxuICAgKlxuICAgKiBPcHRpb25hbCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eTogYSBjaGVja3BvaW50IHBlcnNpc3RlZCBiZWZvcmUgdGhpc1xuICAgKiBmaWVsZCBleGlzdGVkIChvbGRlciBSZWRpcy9Qb3N0Z3JlcyByb3dzKSBzdGlsbCB2YWxpZGF0ZXMgYW5kIHJlc3VtZXMgd2l0aFxuICAgKiB0aGUgcHJldmlvdXMgKGNvdW50ZXItcmVzdGFydGluZykgYmVoYXZpb3IuXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Db3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogUGVyLWBzdGFnZUlkYCBsb29wIHZpc2l0IGNvdW50cyBhdCB0aGUgbW9tZW50IG9mIHBhdXNlLiBSZXN1bWUgc2VlZHMgdGhlbVxuICAgKiBzbyBgVHJhdmVyc2FsQ29udGV4dC5sb29wSXRlcmF0aW9uYCBzdGF5cyBjb250aW51b3VzIGFjcm9zcyB0aGUgcGF1c2UgKGFcbiAgICogbWlkLWxvb3AgcmVzdW1lIGtlZXBzIGNvdW50aW5nIHVwLCBub3QgcmVzdGFydGluZyBhdCAwKSBhbmQgdGhlXG4gICAqIENvbnRpbnVhdGlvblJlc29sdmVyIGl0ZXJhdGlvbiBidWRnZXQgaXMgbm90IHNpbGVudGx5IHJlZmlsbGVkLlxuICAgKlxuICAgKiBPcHRpb25hbCBmb3IgdGhlIHNhbWUgYmFja3dhcmQtY29tcGF0aWJpbGl0eSByZWFzb24gYXMgYGV4ZWN1dGlvbkNvdW50YC5cbiAgICovXG4gIHJlYWRvbmx5IHZpc2l0Q291bnRzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgbnVtYmVyPj47XG5cbiAgLyoqIFN0YWdlIHRoYXQgaW52b2tlZCB0aGUgcGF1c2VkIGNoaWxkIChkZWNpZGVyLCBzZWxlY3RvciwgZm9yaykuIEFic2VudCBmb3IgbGluZWFyIHBhdXNlcy4gKi9cbiAgcmVhZG9ubHkgaW52b2tlclN0YWdlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdXNlcyByYWlzZWQgYnkgUEFSQUxMRUwgU0lCTElOR1Mgb2YgdGhlIHBhdXNlZCBzdGFnZSBpbiB0aGUgc2FtZVxuICAgKiBmYW4tb3V0LCB3YWl0aW5nIHRoZWlyIHR1cm4gKDkuMjguMCkg4oCUIHNlZSB7QGxpbmsgUGVuZGluZ1BhdXNlfS4gQWJzZW50XG4gICAqIHdoZW4gb25seSBvbmUgY2hpbGQgcGF1c2VkIChldmVyeSBjaGVja3BvaW50IGJlZm9yZSA5LjI4LjAgb21pdHMgaXQsIGFuZFxuICAgKiByZXN1bWVzIGV4YWN0bHkgYXMgYmVmb3JlKS4gUmVzdW1pbmcgdGhpcyBjaGVja3BvaW50IGZpbmlzaGVzIHRoZSBwYXVzZWRcbiAgICogc3RhZ2UncyBjaGlsZCwgdGhlbiBwYXVzZXMgYWdhaW4gd2l0aCB0aGUgZmlyc3Qgb2YgdGhlc2U7IHRoZSBmYW4tb3V0J3NcbiAgICogam9pbiBydW5zIG9uY2UgZXZlcnkgY2hpbGQgaXMgZG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHBlbmRpbmdQYXVzZXM/OiByZWFkb25seSBQZW5kaW5nUGF1c2VbXTtcblxuICAvKipcbiAgICogVGhlIHJlZGFjdGlvbiBtYXJrcyBvZiB0aGUgcGF1c2VkIHJ1biDigJQgTkFNRVMgb25seSAoc2VlXG4gICAqIHtAbGluayBSZWRhY3Rpb25NYXJrc30pLiBBYnNlbnQgd2hlbiB0aGUgcnVuIG1hcmtlZCBub3RoaW5nIChubyBwb2xpY3lcbiAgICogYW5kIG5vIHBlci1jYWxsIG1hcmssIG9yIGFuIG9sZGVyIGNoZWNrcG9pbnQpOiB0aGUgcmVzdW1lZCBydW4gdGhlbiBzdGFydHNcbiAgICogZnJvbSBpdHMgcG9saWN5IGFsb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkYWN0aW9uTWFya3M/OiBSZWRhY3Rpb25NYXJrcztcblxuICAvKiogVGltZXN0YW1wIG9mIHdoZW4gdGhlIHBhdXNlIG9jY3VycmVkLiAqL1xuICByZWFkb25seSBwYXVzZWRBdDogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgUGF1c2FibGVIYW5kbGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEhhbmRsZXIgZm9yIGEgcGF1c2FibGUgc3RhZ2Ug4oCUIGhhcyB0d28gcGhhc2VzOiBleGVjdXRlIGFuZCByZXN1bWUuXG4gKlxuICogYGV4ZWN1dGVgIHJ1bnMgdGhlIGZpcnN0IHRpbWUuIFJldHVybiBhbnkgbm9uLXZvaWQgdmFsdWUgdG8gcGF1c2UgKHRoYXQgdmFsdWVcbiAqIGJlY29tZXMgdGhlIGNoZWNrcG9pbnQncyBgcGF1c2VEYXRhYCk7IHJldHVybiB2b2lkL3VuZGVmaW5lZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAqIGByZXN1bWVgIHJ1bnMgd2hlbiB0aGUgZmxvd2NoYXJ0IGlzIHJlc3VtZWQuIEl0IHJlY2VpdmVzIHRoZSByZXN1bWUgaW5wdXQuXG4gKlxuICogQm90aCBwaGFzZXMgcmVjZWl2ZSB0aGUgc2FtZSBzY29wZS4gQWZ0ZXIgZXhlY3V0ZSBwYXVzZXMsIHRoZSBzY29wZSBzdGF0ZVxuICogaXMgcHJlc2VydmVkIGluIHRoZSBjaGVja3BvaW50LiBPbiByZXN1bWUsIHRoZSBzY29wZSBpcyByZXN0b3JlZCBiZWZvcmVcbiAqIGNhbGxpbmcgcmVzdW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAuYWRkUGF1c2FibGVGdW5jdGlvbignQXBwcm92ZU9yZGVyJywge1xuICogICBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAqICAgICBzY29wZS5vcmRlcklkID0gJzEyMyc7XG4gKiAgICAgc2NvcGUuYW1vdW50ID0gMjk5O1xuICogICAgIHJldHVybiB7IHF1ZXN0aW9uOiBgQXBwcm92ZSAkJHtzY29wZS5hbW91bnR9IHJlZnVuZD9gIH07XG4gKiAgIH0sXG4gKiAgIHJlc3VtZTogYXN5bmMgKHNjb3BlLCBpbnB1dCkgPT4ge1xuICogICAgIHNjb3BlLmFwcHJvdmVkID0gaW5wdXQuYXBwcm92ZWQ7XG4gKiAgICAgc2NvcGUuYXBwcm92ZXIgPSBpbnB1dC5hcHByb3ZlcjtcbiAqICAgfSxcbiAqIH0sICdhcHByb3ZlLW9yZGVyJywgJ01hbmFnZXIgYXBwcm92YWwgZ2F0ZScpXG4gKlxuICogLy8gTGF0ZXIg4oCUIHJlc3VtZSB3aXRoIGh1bWFuJ3MgYW5zd2VyXG4gKiBhd2FpdCBleGVjdXRvci5yZXN1bWUoY2hlY2twb2ludCwgeyBhcHByb3ZlZDogdHJ1ZSwgYXBwcm92ZXI6ICdKYW5lJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNhYmxlSGFuZGxlcjxUU2NvcGUgPSBhbnksIFRJbnB1dCA9IHVua25vd24sIFRQYXVzZURhdGEgPSB1bmtub3duPiB7XG4gIC8qKlxuICAgKiBGaXJzdC1ydW4gcGhhc2UuIFJldHVybiBkYXRhIHRvIHBhdXNlLCBvciB2b2lkL3VuZGVmaW5lZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAgICpcbiAgICogQW55IG5vbi12b2lkIHJldHVybiB2YWx1ZSBiZWNvbWVzIHRoZSBgcGF1c2VEYXRhYCBpbiB0aGUgY2hlY2twb2ludC5cbiAgICogVGhlIGNvbnN1bWVyIGRlZmluZXMgdGhlIGBUUGF1c2VEYXRhYCB0eXBlIOKAlCB0aGUgRkUgdXNlcyBpdCB0byByZW5kZXJcbiAgICogdGhlIHJpZ2h0IFVJIChmb3JtIGZpZWxkcywgYXBwcm92YWwgYnV0dG9ucywgZXRjLikuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVFBhdXNlRGF0YSA9IHsgcXVlc3Rpb246IHN0cmluZzsgcmlza0xldmVsOiBzdHJpbmcgfVxuICAgKiBjb25zdCBoYW5kbGVyOiBQYXVzYWJsZUhhbmRsZXI8TXlTdGF0ZSwgeyBhcHByb3ZlZDogYm9vbGVhbiB9LCB7IHF1ZXN0aW9uOiBzdHJpbmc7IHJpc2tMZXZlbDogc3RyaW5nIH0+ID0ge1xuICAgKiAgIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICAgKiAgICAgcmV0dXJuIHsgcXVlc3Rpb246IGBBcHByb3ZlIG9yZGVyICR7c2NvcGUub3JkZXJJZH0/YCwgcmlza0xldmVsOiAnaGlnaCcgfTtcbiAgICogICB9LFxuICAgKiAgIHJlc3VtZTogYXN5bmMgKHNjb3BlLCBpbnB1dCkgPT4ge1xuICAgKiAgICAgc2NvcGUuYXBwcm92ZWQgPSBpbnB1dC5hcHByb3ZlZDtcbiAgICogICB9LFxuICAgKiB9O1xuICAgKiBgYGBcbiAgICovXG4gIGV4ZWN1dGU6IChzY29wZTogVFNjb3BlKSA9PiBQcm9taXNlPFRQYXVzZURhdGEgfCB2b2lkPiB8IFRQYXVzZURhdGEgfCB2b2lkO1xuICAvKipcbiAgICogUmVzdW1lIHBoYXNlLiBDYWxsZWQgd2l0aCB0aGUgcmVzdW1lIGlucHV0IHdoZW4gZXhlY3V0aW9uIGNvbnRpbnVlcy5cbiAgICpcbiAgICogVGhlIHNjb3BlIGlzIHJlc3RvcmVkIGZyb20gdGhlIGNoZWNrcG9pbnQncyBgc2hhcmVkU3RhdGVgLiBXcml0ZXMgZHVyaW5nXG4gICAqIGByZXN1bWVgIGFyZSBjb21taXR0ZWQgYW5kIHZpc2libGUgdG8gc3Vic2VxdWVudCBzdGFnZXMuXG4gICAqL1xuICByZXN1bWU6IChzY29wZTogVFNjb3BlLCBpbnB1dDogVElucHV0KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cblxuLy8g4pSA4pSAIFR5cGUgZ3VhcmQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgUGF1c2VSZXN1bHQgKHN0YWdlIHdhbnRzIHRvIHBhdXNlKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlUmVzdWx0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUGF1c2VSZXN1bHQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAodmFsdWUgYXMgUGF1c2VSZXN1bHQpLnBhdXNlID09PSB0cnVlO1xufVxuXG4vKiogQ2hlY2sgaWYgYW4gZXJyb3IgaXMgYSBQYXVzZVNpZ25hbC4gVXNlcyBpbnN0YW5jZW9mICsgbmFtZSBicmFuZCBmYWxsYmFjayBmb3IgY3Jvc3MtcmVhbG0gc2FmZXR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF1c2VTaWduYWwoZXJyb3I6IHVua25vd24pOiBlcnJvciBpcyBQYXVzZVNpZ25hbCB7XG4gIC8vIFRvdGFsOiBhIFByb3h5IHdob3NlIGBnZXRQcm90b3R5cGVPZmAgdHJhcCB0aHJvd3MgKG9yIGEgcmV2b2tlZCBQcm94eSlcbiAgLy8gaXMgbm90IGEgc2lnbmFsIOKAlCB0aGUgZW5naW5lJ3MgY2F0Y2ggYmxvY2tzIGFzayB0aGlzIGZpcnN0LCBhbmQgbXVzdFxuICAvLyBub3QgdHJhZGUgdGhlIHN0YWdlJ3MgdGhyb3duIHZhbHVlIGZvciB0aGUgdHJhcCdzIGVycm9yLlxuICB0cnkge1xuICAgIHJldHVybiAoXG4gICAgICBlcnJvciBpbnN0YW5jZW9mIFBhdXNlU2lnbmFsIHx8XG4gICAgICAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgICBlcnJvci5uYW1lID09PSAnUGF1c2VTaWduYWwnICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlcnJvciwgJ3BhdXNlRGF0YScpICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlcnJvciwgJ3N0YWdlSWQnKSlcbiAgICApO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7OztBQTRCSCw4RUFBOEU7QUFDOUUsU0FBZ0IsaUJBQWlCLENBQUMsS0FBYztJQUM5QyxNQUFNLENBQUMsR0FBRyxLQUF5RSxDQUFDO0lBQ3BGLE9BQU8sQ0FDTCxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDLGNBQWMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLGNBQWMsS0FBSyxFQUFFLENBQ2xILENBQUM7QUFDSixDQUFDO0FBTEQsOENBS0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSxLQUFLO0lBQ3BDLHVEQUF1RDtJQUM5QyxTQUFTLENBQVU7SUFDNUIsNENBQTRDO0lBQ25DLE9BQU8sQ0FBUztJQUN6Qjs7Ozs7OztPQU9HO0lBQ00sUUFBUSxDQUFlO0lBQ2hDLHlFQUF5RTtJQUNqRSxZQUFZLENBQVc7SUFFL0I7Ozs7Ozs7OztPQVNHO0lBQ0ssZUFBZSxDQUFVO0lBRWpDOzs7Ozs7Ozs7OztPQVdHO0lBQ0ssY0FBYyxHQUE0QyxFQUFFLENBQUM7SUFFckU7Ozs7Ozs7T0FPRztJQUNLLGNBQWMsR0FBMEIsRUFBRSxDQUFDO0lBRW5EOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBOEM7SUFFdEUsNEdBQTRHO0lBQ3BHLGVBQWUsQ0FBVTtJQUVqQyxZQUFZLElBQWEsRUFBRSxPQUFlLEVBQUUsUUFBc0I7UUFDaEUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFB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Q0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBZkQsc0NBZUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhdXNlL1Jlc3VtZSDigJQgc2VyaWFsaXphYmxlIGNoZWNrcG9pbnQgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93cy5cbiAqXG4gKiBBIHN0YWdlIHNpZ25hbHMgcGF1c2UgYnkgY2FsbGluZyBgc2NvcGUuJHBhdXNlKGRhdGEpYCB3aGljaCB0aHJvd3MgYSBQYXVzZVNpZ25hbC5cbiAqIFRoZSBzaWduYWwgYnViYmxlcyB1cCB0aHJvdWdoIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyIOKGkiBGbG93Q2hhcnRFeGVjdXRvcixcbiAqIGVhY2ggbGV2ZWwgYWRkaW5nIGl0cyBzdWJmbG93IElEIHRvIHRoZSBwYXRoLlxuICpcbiAqIFRoZSBjaGVja3BvaW50IGNhcHR1cmVzIHdoYXQgYSByZXN1bWUgcmVhZHMsIGFuZCB0aGUgcGF1c2UncyBvd24gcmVjb3JkIOKAlFxuICogbmV2ZXIgdGhlIHJ1bidzIGhpc3RvcnkgKHRoYXQgaXMgYGdldFNuYXBzaG90KClgJ3MpOlxuICogICAtIHBhdXNlZFN0YWdlSWQgKyBzdWJmbG93UGF0aCAoKyBwYXVzZWRCeSk6IHRoZSBjdXJzb3JcbiAqICAgLSBzaGFyZWRTdGF0ZSArIHN1YmZsb3dTdGF0ZXM6IHRoZSBzdGF0ZSBhdCB0aGUgcGF1c2Ug4oCUIHRoZSByb290J3MsIGFuZFxuICogICAgIGVhY2ggc3ViZmxvdydzIG9uIHRoZSBwYXVzZSBwYXRoXG4gKiAgIC0gZXhlY3V0aW9uQ291bnQgKyB2aXNpdENvdW50czogdGhlIGNvdW50ZXJzIHRoZSByZXN1bWVkIHJ1biBjb250aW51ZXNcbiAqICAgLSBwZW5kaW5nUGF1c2VzLCByZWRhY3Rpb25NYXJrczogd2FpdGluZyBzaWJsaW5ncywgcmVkYWN0aW9uIG5hbWVzXG4gKiAgIC0gcGF1c2VEYXRhLCBwYXVzZWRFeGVjdXRpb24sIGludm9rZXJTdGFnZUlkLCBwYXVzZWRBdDogdGhlIHJlY29yZFxuICpcbiAqIFJlc3VtZSByZWJ1aWxkcyB0aGUgZmxvd2NoYXJ0LCByZXN0b3JlcyBzY29wZSwgbmF2aWdhdGVzIHRvIHRoZSBwYXVzZWQgc3RhZ2UsXG4gKiBpbmplY3RzIHJlc3VtZUlucHV0LCBhbmQgY29udGludWVzIHRyYXZlcnNhbC5cbiAqXG4gKiBTdXBwb3J0ZWQgdG9wb2xvZ2llczogbGluZWFyLCBzdWJmbG93IChhdCBhbnkgZGVwdGgg4oCUIG1vdW50ZWQgbGluZWFybHksIGFzIGFcbiAqIGRlY2lkZXIgb3Igc2VsZWN0b3IgYnJhbmNoLCBvciBhcyBhIGZvcmsgY2hpbGQpLCBsb29wLCBuZXN0ZWQgc3ViZmxvdyBpblxuICogbG9vcCwgYW5kIHNldmVyYWwgcGFyYWxsZWwgc2libGluZ3MgcGF1c2luZyBpbiBvbmUgZmFuLW91dCAoZWFjaCBhc2tzIGluXG4gKiB0dXJuIOKAlCBgRmxvd2NoYXJ0Q2hlY2twb2ludC5wZW5kaW5nUGF1c2VzYCkuXG4gKlxuICogTk9UIHJlc3VtYWJsZSB5ZXQ6IGEgcGF1c2UgaW5zaWRlIGEgTEFaWSBzdWJmbG93IChgYWRkTGF6eVN1YkZsb3dDaGFydCpgKSBvclxuICogaW5zaWRlIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGJyYW5jaC4gVGhlaXIgZ3JhcGhzIGFyZSByZXNvbHZlZCBhdCBydW4gdGltZVxuICogYW5kIGFyZSBub3QgaW4gdGhlIGNoYXJ0IGEgcmVzdW1lIHdhbGtzLCBzbyBgcmVzdW1lKClgIHJlZnVzZXMgdGhlXG4gKiBjaGVja3BvaW50IChcIm5vdCBmb3VuZFwiKSBpbnN0ZWFkIG9mIGd1ZXNzaW5nLiBQaW5uZWQgaW5cbiAqIHRlc3QvbGliL3BhdXNlL3Jlc3VtZS1rbm93bi1saW1pdGF0aW9ucy50ZXN0LnRzLlxuICovXG5cbi8vIOKUgOKUgCBQYXVzZVNpZ25hbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUaGUgcGF1c2VkIEVYRUNVVElPTiAoOS4zNy4wKTogdGhlIHJ1biB0aGF0IHBhdXNlZCBhbmQgdGhlIHBhdXNlZCBzdGFnZSdzXG4gKiBydW50aW1lU3RhZ2VJZCBpbiBpdC4gUmVjb3JkZWQgb24gdGhlIGNoZWNrcG9pbnQgKGFuZCBvbiBlYWNoIHF1ZXVlZFxuICogc2libGluZydzIHBlbmRpbmcgcmVjb3JkKSBzbyBhIHJlc3VtZSBjYW4gTElOSyB0byBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzZWRFeGVjdXRpb24ge1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZWRhY3Rpb24gYSBwYXVzZSBjYXJyaWVzIHRvIHRoZSByZXN1bWVkIHJ1biDigJQgTkFNRVMgb25seSwgbmV2ZXIgYSB2YWx1ZVxuICogKHRoZSBjaGVja3BvaW50IHN0YXlzIHJlYWwpOiB0aGUga2V5cyBtYXJrZWQgc2VjcmV0IGZvciB0aGUgcmVzdCBvZiB0aGUgcnVuXG4gKiAoYSBwZXItY2FsbCBgc2V0VmFsdWUoa2V5LCB2YWx1ZSwgdHJ1ZSlgLCBhIGtleSB0aGUgcG9saWN5IHJlZGFjdGVkIHdob2xlLCBhXG4gKiBzdWJmbG93IG1hcHBlcidzIHRhaW50KSBhbmQgdGhlIGZpZWxkcyBhIG1hcHBlciBoYW5kZWQgdG8gYSBuZXcga2V5LiBSZXN1bWVcbiAqIHNlZWRzIHRoZSByZXN1bWVkIHJ1bidzIHJ1bGUgd2l0aCB0aGVtLCBzbyBhIGNvcHkgbWFkZSBiZWZvcmUgdGhlIHBhdXNlIGlzXG4gKiBzdGlsbCBtYXNrZWQgYWZ0ZXIgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkYWN0aW9uTWFya3Mge1xuICByZWFkb25seSBrZXlzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIEtleSDihpIgdGhlIGZpZWxkIHBhdGhzIGEgbWFwcGVyIGhhbmRlZCBpdC4gQWJzZW50IHdoZW4gbm9uZS4gKi9cbiAgcmVhZG9ubHkgZmllbGRzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+Pjtcbn1cblxuLyoqIFRydWUgZm9yIGEgd2VsbC1mb3JtZWQge0BsaW5rIFBhdXNlZEV4ZWN1dGlvbn0gKHR3byBub24tZW1wdHkgc3RyaW5ncykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZWRFeGVjdXRpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQYXVzZWRFeGVjdXRpb24ge1xuICBjb25zdCB2ID0gdmFsdWUgYXMgeyBydW5JZD86IHVua25vd247IHJ1bnRpbWVTdGFnZUlkPzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygdj8ucnVuSWQgPT09ICdzdHJpbmcnICYmIHYucnVuSWQgIT09ICcnICYmIHR5cGVvZiB2LnJ1bnRpbWVTdGFnZUlkID09PSAnc3RyaW5nJyAmJiB2LnJ1bnRpbWVTdGFnZUlkICE9PSAnJ1xuICApO1xufVxuXG4vKipcbiAqIFRocm93biBieSBgc2NvcGUuJHBhdXNlKClgIHRvIHNpZ25hbCB0aGF0IGV4ZWN1dGlvbiBzaG91bGQgc3RvcFxuICogYW5kIGNyZWF0ZSBhIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50LlxuICpcbiAqIEJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3IgKHdoaWNoIHByZXBlbmRzIHN1YmZsb3cgSUQgdG8gcGF0aClcbiAqIGFuZCBpcyBjYXVnaHQgYnkgRmxvd2NoYXJ0VHJhdmVyc2VyL0Zsb3dDaGFydEV4ZWN1dG9yLlxuICovXG5leHBvcnQgY2xhc3MgUGF1c2VTaWduYWwgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE6IHVua25vd247XG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgJHBhdXNlKCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEhPVyB0aGUgcGF1c2Ugd2FzIHJhaXNlZCDigJQgYCdpbnRlcnJ1cHQnYCB3aGVuIGEgc3RhZ2UgYm9keSBjYWxsZWRcbiAgICogYGludGVycnVwdChzY29wZSwgcGF5bG9hZClgLCBhYnNlbnQgZm9yIHRoZSBgYWRkUGF1c2FibGVGdW5jdGlvbmBcbiAgICogZXhlY3V0ZS9yZXN1bWUgcGF0aC4gU2V0IGF0IHRoZSBzdGFnZSBib3VuZGFyeSAoYFN0YWdlUnVubmVyYCksIGNhcnJpZWRcbiAgICogb250byB0aGUgY2hlY2twb2ludCwgYW5kIHJlYWQgYnkgYHJlc3VtZSgpYCB0byBwaWNrIHRoZSByZS1lbnRyeTogYW5cbiAgICogaW50ZXJydXB0ZWQgc3RhZ2UgcmUtcnVucyBpdHMgT1dOIGZ1bmN0aW9uIGZyb20gdGhlIHRvcCAoc3RhZ2VzIGFyZVxuICAgKiBhdG9taWMpLCBhIHBhdXNhYmxlIHN0YWdlIHJ1bnMgaXRzIGByZXN1bWVGbmAuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnO1xuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEJ1aWx0IGR1cmluZyBidWJibGUtdXAuICovXG4gIHByaXZhdGUgX3N1YmZsb3dQYXRoOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW52b2tlciBjb250ZXh0IOKAlCBlbnJpY2hlZCBkdXJpbmcgYnViYmxlLXVwIHdoZW4gYSBQYXVzZVNpZ25hbCBwYXNzZXNcbiAgICogdGhyb3VnaCBhIGRlY2lkZXIsIHNlbGVjdG9yLCBvciBmb3JrIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZSBpbnZva2VyIGlzIHRoZSBzdGFnZSB0aGF0IGNhbGxlZCBleGVjdXRlTm9kZSgpIG9uIHRoZSBwYXVzZWQgY2hpbGQuXG4gICAqIENhcHR1cmVkIGR1cmluZyB0cmF2ZXJzYWwgKG5vdCByZWNvbnN0cnVjdGVkIGZyb20gdGhlIHRyZWUpLiAoVGhlXG4gICAqIGludm9rZXIncyBgLm5leHRgIGlkIHJvZGUgYmVzaWRlIGl0IHVudGlsIDkuMzkuMCBhc1xuICAgKiBgY29udGludWF0aW9uU3RhZ2VJZGA7IHdoYXQgcnVucyBhZnRlciBhIHJlc3VtZSBjb21lcyBmcm9tIHRoZSBjaGFydFxuICAgKiBzaW5jZSA5LjI4LjAsIHNvIGl0IGlzIG5vIGxvbmdlciBjYXJyaWVkLilcbiAgICovXG4gIHByaXZhdGUgX2ludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIHBvcHVsYXRlZCBkdXJpbmcgYnViYmxlLXVwIGJ5XG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJpZ2h0IGJlZm9yZSByZS10aHJvdy4gRWFjaCBlbnRyeSBpcyBvbmVcbiAgICogc3ViZmxvdydzIHByZS1wYXVzZSBzaGFyZWQgc3RhdGUsIGtleWVkIGJ5IHRoZSBwYXRoLXByZWZpeGVkXG4gICAqIHN1YmZsb3cgaWQgKG1hdGNoZXMgYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcywgdGhlIG5lc3RlZCBgU2hhcmVkTWVtb3J5YCBpcyBnYXJiYWdlLWNvbGxlY3RlZFxuICAgKiBiZWZvcmUgdGhlIGNoZWNrcG9pbnQgaXMgYnVpbHQuIE9uIHJlc3VtZSwgdGhlIGlubmVyIHJ1bnRpbWUgaXNcbiAgICogcmUtY3JlYXRlZCBlbXB0eSBhbmQgcmVzdW1lIGhhbmRsZXJzIHJlYWRpbmcgcHJlLXBhdXNlIHNjb3BlXG4gICAqIChlLmcuLCBhbiBBZ2VudCdzIGBzY29wZS5oaXN0b3J5YCwgYHNjb3BlLnBhdXNlZFRvb2xDYWxsSWRgKVxuICAgKiBjcmFzaCB3aXRoIFwiWCBpcyBub3QgaXRlcmFibGVcIiAvIHVuZGVmaW5lZC5cbiAgICovXG4gIHByaXZhdGUgX3N1YmZsb3dTdGF0ZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHt9O1xuXG4gIC8qKlxuICAgKiBQYXVzZXMgdGhhdCBQQVJBTExFTCBTSUJMSU5HUyByYWlzZWQgaW4gdGhlIHNhbWUgZmFuLW91dCBhcyB0aGlzIG9uZSxcbiAgICogd2FpdGluZyB0aGVpciB0dXJuICg5LjI4LjApLiBSZWNvcmRlZCBieSBgQ2hpbGRyZW5FeGVjdXRvcmAgd2hlbiBtb3JlXG4gICAqIHRoYW4gb25lIGNoaWxkIG9mIGEgZm9yayAob3IgbW9yZSB0aGFuIG9uZSBzZWxlY3RlZCBicmFuY2gpIHBhdXNlczogdGhlXG4gICAqIGZpcnN0IHBhdXNlIGlzIHRoZSBvbmUgdGhhdCBpcyBhc2tlZCwgdGhlIG90aGVycyByaWRlIGhlcmUgaW5zdGVhZCBvZlxuICAgKiBiZWluZyBkcm9wcGVkLiBFYWNoIHBhdGggaXMgcmVsYXRpdmUgdG8gd2hlcmUgdGhlIHNpZ25hbCBjdXJyZW50bHkgaXNcbiAgICogYW5kIGdyb3dzIHdpdGggaXQg4oCUIGBwcmVwZW5kU3ViZmxvd2AgcHJlcGVuZHMgdG8gZXZlcnkgZW50cnkgdG9vLlxuICAgKi9cbiAgcHJpdmF0ZSBfcGVuZGluZ1BhdXNlczogTXV0YWJsZVBlbmRpbmdQYXVzZVtdID0gW107XG5cbiAgLyoqXG4gICAqIFdISUNIIGV4ZWN1dGlvbiBwYXVzZWQg4oCUIGl0cyBydW50aW1lU3RhZ2VJZCBzdGFtcGVkIG9uY2UgYXQgdGhlIHN0YWdlXG4gICAqIGJvdW5kYXJ5IChgU3RhZ2VSdW5uZXJgKSwgaXRzIHJ1biBhZGRlZCB3aGVuIHRoZSBjaGVja3BvaW50IGlzIGJ1aWx0XG4gICAqIChgY29tcGxldGVFeGVjdXRpb25gKSwgb3IgYm90aCBjYXJyaWVkIG92ZXIgZm9yIGEgcXVldWVkIHNpYmxpbmcuXG4gICAqL1xuICBwcml2YXRlIF9wYXVzZWRFeGVjdXRpb24/OiB7IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH07XG5cbiAgLyoqIFRoZSBwYXVzZWQgZXhlY3V0aW9uJ3MgaWRlbXBvdGVuY3kga2V5IChQMykg4oCUIGEgdG91Y2hpbmcgc3RhZ2Uncywgc3RhbXBlZCBvbmNlIGF0IHRoZSBzdGFnZSBib3VuZGFyeS4gKi9cbiAgcHJpdmF0ZSBfaWRlbXBvdGVuY3lLZXk/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogdW5rbm93biwgc3RhZ2VJZDogc3RyaW5nLCBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnKSB7XG4gICAgc3VwZXIoJ0V4ZWN1dGlvbiBwYXVzZWQnKTtcbiAgICB0aGlzLm5hbWUgPSAnUGF1c2VTaWduYWwnO1xuICAgIHRoaXMucGF1c2VEYXRhID0gZGF0YTtcbiAgICB0aGlzLnN0YWdlSWQgPSBzdGFnZUlkO1xuICAgIGlmIChwYXVzZWRCeSkgdGhpcy5wYXVzZWRCeSA9IHBhdXNlZEJ5O1xuICAgIHRoaXMuX3N1YmZsb3dQYXRoID0gW107XG4gICAgLy8gUGF1c2VTaWduYWwgaXMgY29udHJvbCBmbG93LCBub3QgYSByZWFsIGVycm9yIOKAlCBzdGFjayB0cmFjZSBoYXMgbm8gZGlhZ25vc3RpYyB2YWx1ZS5cbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cblxuICBnZXQgc3ViZmxvd1BhdGgoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9zdWJmbG93UGF0aDtcbiAgfVxuXG4gIC8qKiBUaGUgcGF1c2VkIGV4ZWN1dGlvbiAoaXRzIHJ1biBhbmQgYFtwYXRoL11zdGFnZUlkI05gKSwgb25jZSBib3RoIGFyZSBrbm93bi4gKi9cbiAgZ2V0IHBhdXNlZEV4ZWN1dGlvbigpOiBQYXVzZWRFeGVjdXRpb24gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGUgPSB0aGlzLl9wYXVzZWRFeGVjdXRpb247XG4gICAgcmV0dXJuIGU/LnJ1bklkICE9PSB1bmRlZmluZWQgPyB7IHJ1bklkOiBlLnJ1bklkLCBydW50aW1lU3RhZ2VJZDogZS5ydW50aW1lU3RhZ2VJZCB9IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCB3aGljaCBFWEVDVVRJT04gcGF1c2VkLiBGaXJzdCBzdGFtcCB3aW5zOiB0aGUgc2lnbmFsIGJ1YmJsZXNcbiAgICogdGhyb3VnaCBvdXRlciBib3VuZGFyaWVzIHRoYXQgbXVzdCBub3Qgb3ZlcndyaXRlIGl0LiBUaGUgc3RhZ2UgYm91bmRhcnlcbiAgICoga25vd3Mgb25seSB0aGUgcnVudGltZVN0YWdlSWQ7IGEgcXVldWVkIHNpYmxpbmcgcmFpc2VkIGFnYWluIG9uIHJlc3VtZVxuICAgKiBjYXJyaWVzIGJvdGggKGl0IHBhdXNlZCBpbiBhbiBFQVJMSUVSIHJ1bikuXG4gICAqL1xuICBzdGFtcEV4ZWN1dGlvbihydW50aW1lU3RhZ2VJZDogc3RyaW5nLCBydW5JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wYXVzZWRFeGVjdXRpb24gIT09IHVuZGVmaW5lZCB8fCAhcnVudGltZVN0YWdlSWQpIHJldHVybjtcbiAgICB0aGlzLl9wYXVzZWRFeGVjdXRpb24gPSB7IHJ1bnRpbWVTdGFnZUlkLCAuLi4ocnVuSWQgIT09IHVuZGVmaW5lZCAmJiB7IHJ1bklkIH0pIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlkZW1wb3RlbmN5IGtleSB0aGUgcGF1c2VkIGV4ZWN1dGlvbiByYW4gdW5kZXIgKFAzKSDigJQgYSB0b3VjaGluZyBzdGFnZSdzLiBJdCByaWRlcyB0aGUgY2hlY2twb2ludCBzbyB0aGVcbiAgICogcmVzdW1lIHJlLXJ1bnMgdGhlIHN0YWdlIChvciBpdHMgYHJlc3VtZUZuYCkgdW5kZXIgdGhlIFNBTUUga2V5OiB0aGUgaW5wdXQgaXRzIHJ1bGUgcmVhZCBkb2VzIG5vdCBjcm9zcyBhXG4gICAqIHJlc3VtZS4gRmlyc3Qgc3RhbXAgd2lucy5cbiAgICovXG4gIGdldCBpZGVtcG90ZW5jeUtleSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pZGVtcG90ZW5jeUtleTtcbiAgfVxuXG4gIHN0YW1wSWRlbXBvdGVuY3lLZXkoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faWRlbXBvdGVuY3lLZXkgPT09IHVuZGVmaW5lZCAmJiBrZXkgIT09IHVuZGVmaW5lZCkgdGhpcy5faWRlbXBvdGVuY3lLZXkgPSBrZXk7XG4gIH1cblxuICAvKipcbiAgICogTmFtZSB0aGUgcnVuIGZvciBldmVyeSBwYXVzZSBvbiB0aGlzIHNpZ25hbCB0aGF0IHBhdXNlZCBpbiBpdCDigJQgdGhpcyBvbmVcbiAgICogYW5kIGl0cyBxdWV1ZWQgc2libGluZ3MgdGhhdCBkbyBub3QgYWxyZWFkeSBjYXJyeSBhIHJ1biAoYSBzaWJsaW5nIHJhaXNlZFxuICAgKiBhZ2FpbiBvbiByZXN1bWUga2VlcHMgdGhlIHJ1biBpdCBwYXVzZWQgaW4pLiBDYWxsZWQgb25jZSwgd2hlbiB0aGVcbiAgICogY2hlY2twb2ludCBpcyBidWlsdC5cbiAgICovXG4gIGNvbXBsZXRlRXhlY3V0aW9uKHJ1bklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGF1c2VkRXhlY3V0aW9uICYmIHRoaXMuX3BhdXNlZEV4ZWN1dGlvbi5ydW5JZCA9PT0gdW5kZWZpbmVkKSB0aGlzLl9wYXVzZWRFeGVjdXRpb24ucnVuSWQgPSBydW5JZDtcbiAgICBmb3IgKGNvbnN0IHBlbmRpbmcgb2YgdGhpcy5fcGVuZGluZ1BhdXNlcykge1xuICAgICAgaWYgKHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uICYmIHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uLnJ1bklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGVuZGluZy5wYXVzZWRFeGVjdXRpb24gPSB7IHJ1bnRpbWVTdGFnZUlkOiBwZW5kaW5nLnBhdXNlZEV4ZWN1dGlvbi5ydW50aW1lU3RhZ2VJZCwgcnVuSWQgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlcGVuZCBhIHN1YmZsb3cgSUQgdG8gdGhlIHBhdGggKGNhbGxlZCBkdXJpbmcgYnViYmxlLXVwKS4gVGhlIHBlbmRpbmdcbiAgICogc2libGluZyBwYXVzZXMgcmlkZSB0aGUgc2FtZSBib3VuZGFyeSwgc28gdGhlaXIgcGF0aHMgZ3JvdyB3aXRoIGl0LlxuICAgKi9cbiAgcHJlcGVuZFN1YmZsb3coc3ViZmxvd0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJmbG93UGF0aC51bnNoaWZ0KHN1YmZsb3dJZCk7XG4gICAgZm9yIChjb25zdCBwZW5kaW5nIG9mIHRoaXMuX3BlbmRpbmdQYXVzZXMpIHBlbmRpbmcuc3ViZmxvd1BhdGgudW5zaGlmdChzdWJmbG93SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXVlIGEgcGFyYWxsZWwgc2libGluZydzIHBhdXNlIGJlaGluZCB0aGlzIG9uZSAoaXRzIHBhdGggcmVsYXRpdmUgdG9cbiAgICogdGhpcyBzaWduYWwncyBjdXJyZW50IGxldmVsKS4gQ29waWVkIGluOiB0aGUgZW50cnkgaXMgb3duZWQgYnkgdGhlXG4gICAqIHNpZ25hbCBmcm9tIGhlcmUgb24uXG4gICAqL1xuICBhZGRQZW5kaW5nUGF1c2UocGF1c2U6IFBlbmRpbmdQYXVzZSk6IHZvaWQge1xuICAgIHRoaXMuX3BlbmRpbmdQYXVzZXMucHVzaCh7XG4gICAgICBwYXVzZWRTdGFnZUlkOiBwYXVzZS5wYXVzZWRTdGFnZUlkLFxuICAgICAgc3ViZmxvd1BhdGg6IFsuLi5wYXVzZS5zdWJmbG93UGF0aF0sXG4gICAgICBzdWJmbG93U3RhdGVzOiB7IC4uLnBhdXNlLnN1YmZsb3dTdGF0ZXMgfSxcbiAgICAgIC4uLihwYXVzZS5wYXVzZURhdGEgIT09IHVuZGVmaW5lZCAmJiB7IHBhdXNlRGF0YTogcGF1c2UucGF1c2VEYXRhIH0pLFxuICAgICAgLi4uKHBhdXNlLnBhdXNlZEJ5ICYmIHsgcGF1c2VkQnk6IHBhdXNlLnBhdXNlZEJ5IH0pLFxuICAgICAgLi4uKHBhdXNlLnBhdXNlZEV4ZWN1dGlvbiAmJlxuICAgICAgICB0eXBlb2YgcGF1c2UucGF1c2VkRXhlY3V0aW9uLnJ1bnRpbWVTdGFnZUlkID09PSAnc3RyaW5nJyAmJiB7IHBhdXNlZEV4ZWN1dGlvbjogeyAuLi5wYXVzZS5wYXVzZWRFeGVjdXRpb24gfSB9KSxcbiAgICAgIC4uLihwYXVzZS5pZGVtcG90ZW5jeUtleSAhPT0gdW5kZWZpbmVkICYmIHsgaWRlbXBvdGVuY3lLZXk6IHBhdXNlLmlkZW1wb3RlbmN5S2V5IH0pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcmFsbGVsIHNpYmxpbmdzJyBwYXVzZXMgd2FpdGluZyBiZWhpbmQgdGhpcyBvbmUsIGluIHRoZSBvcmRlciB0aGV5IHdpbGxcbiAgICogYmUgYXNrZWQuIEluIGZsaWdodCwgYSBzaWJsaW5nIHRoYXQgcGF1c2VkIGluIFRISVMgcnVuIGNhcnJpZXMgb25seSBpdHNcbiAgICogcnVudGltZVN0YWdlSWQ7IGBjb21wbGV0ZUV4ZWN1dGlvbmAgKGF0IGNoZWNrcG9pbnQgYnVpbGQpIGFkZHMgdGhlIHJ1bi5cbiAgICovXG4gIGdldCBwZW5kaW5nUGF1c2VzKCk6IHJlYWRvbmx5IFBlbmRpbmdQYXVzZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ1BhdXNlcyBhcyByZWFkb25seSBQZW5kaW5nUGF1c2VbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHBhdXNlIGFzIGEge0BsaW5rIFBlbmRpbmdQYXVzZX0g4oCUIHdoYXQgYENoaWxkcmVuRXhlY3V0b3JgIHF1ZXVlc1xuICAgKiBiZWhpbmQgYSBzaWJsaW5nJ3MgcGF1c2Ugd2hlbiBib3RoIHBhdXNlZCBpbiBvbmUgZmFuLW91dC5cbiAgICovXG4gIHRvUGVuZGluZ1BhdXNlKCk6IFBlbmRpbmdQYXVzZSB7XG4gICAgLy8gSW4gZmxpZ2h0IChzZWUgYHBlbmRpbmdQYXVzZXNgKTogdGhlIHJ1biBpcyBhZGRlZCBhdCBjaGVja3BvaW50IGJ1aWxkLlxuICAgIHJldHVybiA8UGVuZGluZ1BhdXNlPntcbiAgICAgIHBhdXNlZFN0YWdlSWQ6IHRoaXMuc3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dQYXRoOiBbLi4udGhpcy5fc3ViZmxvd1BhdGhdLFxuICAgICAgc3ViZmxvd1N0YXRlczogeyAuLi50aGlzLl9zdWJmbG93U3RhdGVzIH0sXG4gICAgICAuLi4odGhpcy5wYXVzZURhdGEgIT09IHVuZGVmaW5lZCAmJiB7IHBhdXNlRGF0YTogdGhpcy5wYXVzZURhdGEgfSksXG4gICAgICAuLi4odGhpcy5wYXVzZWRCeSAmJiB7IHBhdXNlZEJ5OiB0aGlzLnBhdXNlZEJ5IH0pLFxuICAgICAgLi4uKHRoaXMuX3BhdXNlZEV4ZWN1dGlvbiAmJiB7IHBhdXNlZEV4ZWN1dGlvbjogeyAuLi50aGlzLl9wYXVzZWRFeGVjdXRpb24gfSB9KSxcbiAgICAgIC4uLih0aGlzLl9pZGVtcG90ZW5jeUtleSAhPT0gdW5kZWZpbmVkICYmIHsgaWRlbXBvdGVuY3lLZXk6IHRoaXMuX2lkZW1wb3RlbmN5S2V5IH0pLFxuICAgIH07XG4gIH1cblxuICAvKiogVGhlIHN0YWdlIHRoYXQgaW52b2tlZCB0aGUgcGF1c2VkIGNoaWxkIChkZWNpZGVyLCBzZWxlY3RvciwgZm9yaykuICovXG4gIGdldCBpbnZva2VyU3RhZ2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbnZva2VyU3RhZ2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFtcCB0aGUgaW52b2tlciBjb250ZXh0IGR1cmluZyBidWJibGUtdXAuXG4gICAqIENhbGxlZCBieSBkZWNpZGVyL3NlbGVjdG9yL2ZvcmsgaGFuZGxlcnMgd2hlbiBjYXRjaGluZyBhIGNoaWxkJ3MgUGF1c2VTaWduYWwuXG4gICAqIEZpcnN0IGludm9rZXIgd2lucyAoaW5uZXJtb3N0KSDigJQgc3Vic2VxdWVudCBjYWxscyBhcmUgbm8tb3BzLlxuICAgKi9cbiAgc2V0SW52b2tlcihpbnZva2VyU3RhZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbnZva2VyU3RhZ2VJZCkgdGhpcy5faW52b2tlclN0YWdlSWQgPSBpbnZva2VyU3RhZ2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlIGEgc3ViZmxvdydzIGlzb2xhdGVkIFNoYXJlZE1lbW9yeSBhdCB0aGUgbW9tZW50IGl0c1xuICAgKiB0cmF2ZXJzYWwgdGhyZXcuIENhbGxlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCBvbmNlIHBlciBzdWJmbG93XG4gICAqIGJvdW5kYXJ5IG9uIHRoZSBidWJibGUtdXAgcGF0aC4gRWFjaCBjYXB0dXJlIGlzIGtleWVkIGJ5IHRoZVxuICAgKiBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKHRoZSBzYW1lIGlkIHVzZWQgaW4gYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIElubmVybW9zdC1maXJzdDogYSBkZWVwIGBTZXF1ZW5jZShBZ2VudCguLi4pKWAgcGF1c2UgY2FwdHVyZXMgdGhlXG4gICAqIGFnZW50J3Mgc3ViZmxvdyBmaXJzdCwgdGhlbiBpdHMgcGFyZW50J3MsIGFsbCB0aGUgd2F5IHRvIHRoZSByb290XG4gICAqIG1vdW50LiBUaGUgZnVsbCBuZXN0IHN1cnZpdmVzIGludG8gYGNoZWNrcG9pbnQuc3ViZmxvd1N0YXRlc2AuXG4gICAqL1xuICBjYXB0dXJlU3ViZmxvd1Njb3BlKHN1YmZsb3dJZDogc3RyaW5nLCBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICAvLyBEZWZlbnNpdmUgc2hhbGxvdyBjbG9uZSBzbyBsYXRlciBtdXRhdGlvbnMgb24gdGhlIHNvdXJjZSBkb24ndFxuICAgIC8vIGJsZWVkIGludG8gdGhlIGNhcHR1cmVkIHNuYXBzaG90LiBEZWVwIGNsb25pbmcgaXMgdGhlIGNvbnN1bWVyJ3NcbiAgICAvLyByZXNwb25zaWJpbGl0eSAodGhlIHJlc3VtZSB0YXJnZXQgbWF5IG5vdCBldmVuIGJlIG9uIHRoaXNcbiAgICAvLyBwcm9jZXNzKTsgU2hhcmVkTWVtb3J5IHZhbHVlcyBhcmUgY29udmVudGlvbmFsbHkgSlNPTi1mcmllbmRseS5cbiAgICB0aGlzLl9zdWJmbG93U3RhdGVzW3N1YmZsb3dJZF0gPSB7IC4uLnN0YXRlIH07XG4gIH1cblxuICAvKiogQ2FwdHVyZWQgc3ViZmxvdyBzY29wZXMgKHJlYWQtb25seSB2aWV3KS4gKi9cbiAgZ2V0IHN1YmZsb3dTdGF0ZXMoKTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmZsb3dTdGF0ZXM7XG4gIH1cbn1cblxuLy8g4pSA4pSAIFBlbmRpbmdQYXVzZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBIHBhdXNlIGEgUEFSQUxMRUwgU0lCTElORyBvZiB0aGUgcGF1c2VkIHN0YWdlIHJhaXNlZCBpbiB0aGUgc2FtZSBmYW4tb3V0IOKAlFxuICogdHdvIGNoaWxkcmVuIG9mIG9uZSBmb3JrIChvciB0d28gc2VsZWN0ZWQgYnJhbmNoZXMgb2Ygb25lIHNlbGVjdG9yKSB0aGF0XG4gKiBib3RoIHBhdXNlZCAoOS4yOC4wKS4gT25seSBvbmUgcGF1c2UgaXMgYXNrZWQgYXQgYSB0aW1lOiB0aGUgY2hlY2twb2ludCdzXG4gKiBvd24gKGBwYXVzZWRTdGFnZUlkYCksIHRoZW4gZWFjaCBvZiB0aGVzZSBpbiB0dXJuLCB3aXRoIHRoZSBmYW4tb3V0J3Mgam9pblxuICogcnVubmluZyBvbmx5IG9uY2UgZXZlcnkgY2hpbGQgaXMgZG9uZS5cbiAqXG4gKiBFdmVyeXRoaW5nIG5lZWRlZCB0byByYWlzZSB0aGUgc2libGluZydzIHBhdXNlIGFnYWluIGxhdGVyIFdJVEhPVVQgcmUtcnVubmluZ1xuICogdGhlIHNpYmxpbmc6IGl0cyBzdGFnZSwgaXRzIHBhdGgsIGl0cyBjYXB0dXJlZCBzdWJmbG93IHN0YXRlLCBpdHMgcXVlc3Rpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEEgZm9yayB3aG9zZSB0d28gY2hpbGRyZW4gYm90aCBhc2s6IHRoZSBmaXJzdCBjaGVja3BvaW50IGFza3MgYzEgYW5kXG4gKiAvLyBjYXJyaWVzIGMyJ3MgcGF1c2U7IHJlc3VtaW5nIGl0IGZpbmlzaGVzIGMxLCB0aGVuIHBhdXNlcyB3aXRoIGMyJ3NcbiAqIC8vIHF1ZXN0aW9uOyByZXN1bWluZyBUSEFUIGZpbmlzaGVzIGMyIGFuZCBydW5zIHRoZSBqb2luLlxuICogY29uc3QgY3AgPSBleGVjdXRvci5nZXRDaGVja3BvaW50KCkhO1xuICogY3AucGF1c2VkU3RhZ2VJZDsgICAgICAgICAgICAgICAgICAvLyAnYzEvYXNrJ1xuICogY3AucGVuZGluZ1BhdXNlcz8uWzBdLnBhdXNlZFN0YWdlSWQ7IC8vICdjMi9hc2snXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nUGF1c2Uge1xuICAvKiogVGhlIHNpYmxpbmcncyBwYXVzZWQgc3RhZ2UgKHBhdGgtcHJlZml4ZWQgaWQsIGFzIGBwYXVzZWRTdGFnZUlkYCkuICovXG4gIHJlYWRvbmx5IHBhdXNlZFN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgc2libGluZydzIHBhdXNlZCBzdGFnZSAoYXMgYHN1YmZsb3dQYXRoYCkuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBzaWJsaW5nJ3Mgb3duIHN1YmZsb3cgY2FwdHVyZXMg4oCUIHRoZSBzdWJmbG93cyBvbiBJVFMgcGF0aCBiZWxvdyB0aGVcbiAgICogZmFuLW91dC4gVGhlIHN1YmZsb3dzIGFib3ZlIHRoZSBmYW4tb3V0IGFyZSBzaGFyZWQgd2l0aCB0aGUgY2hlY2twb2ludCdzXG4gICAqIG93biBwYXVzZSBhbmQgYXJlIGNhcHR1cmVkIGFnYWluIHdoZW4gdGhpcyBwYXVzZSBpcyByYWlzZWQuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIC8qKiBUaGUgc2libGluZydzIHF1ZXN0aW9uIChhcyBgcGF1c2VEYXRhYCkuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YT86IHVua25vd247XG4gIC8qKiBIb3cgdGhlIHNpYmxpbmcgcGF1c2VkIChhcyBgcGF1c2VkQnlgKS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQnk/OiAnaW50ZXJydXB0JztcbiAgLyoqIFdoaWNoIGV4ZWN1dGlvbiB0aGUgc2libGluZyBwYXVzZWQgaW4gKGFzIGBwYXVzZWRFeGVjdXRpb25gLCA5LjM3LjApIOKAlCBrZXB0IHNvIGl0cyBvd24gcmVzdW1lIGxpbmtzIHRvIGl0LiAqL1xuICByZWFkb25seSBwYXVzZWRFeGVjdXRpb24/OiBQYXVzZWRFeGVjdXRpb247XG4gIC8qKiBUaGUgaWRlbXBvdGVuY3kga2V5IHRoZSBzaWJsaW5nJ3MgZXhlY3V0aW9uIHJhbiB1bmRlciAoYXMgYGlkZW1wb3RlbmN5S2V5YCwgMTAuMSkuICovXG4gIHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xufVxuXG4vKiogQSBwZW5kaW5nIHBhdXNlIHdob3NlIHBhdGggc3RpbGwgZ3Jvd3MgYXMgaXRzIHNpZ25hbCBidWJibGVzIHVwIChpbnRlcm5hbCkuICovXG4vKipcbiAqIFRoZSBzaWduYWwncyBvd24gY29weSBvZiBhIHBlbmRpbmcgcGF1c2UuIEl0cyBgcGF1c2VkRXhlY3V0aW9uYCBtYXkgc3RpbGxcbiAqIGxhY2sgdGhlIHJ1biAoYSBzaWJsaW5nIHRoYXQgcGF1c2VkIGluIFRISVMgcnVuKSB1bnRpbCBgY29tcGxldGVFeGVjdXRpb25gLlxuICovXG50eXBlIE11dGFibGVQZW5kaW5nUGF1c2UgPSBPbWl0PFBlbmRpbmdQYXVzZSwgJ3N1YmZsb3dQYXRoJyB8ICdwYXVzZWRFeGVjdXRpb24nPiAmIHtcbiAgc3ViZmxvd1BhdGg6IHN0cmluZ1tdO1xuICBwYXVzZWRFeGVjdXRpb24/OiB7IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH07XG59O1xuXG4vLyDilIDilIAgUGF1c2VSZXN1bHQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUmV0dXJuZWQgYnkgYSBwYXVzYWJsZSBzdGFnZSdzIGV4ZWN1dGUvcmVzdW1lIGZ1bmN0aW9uIHRvIHNpZ25hbCBwYXVzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gKiAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgcmV0dXJuIHsgcGF1c2U6IHRydWUsIGRhdGE6IHsgcXVlc3Rpb246ICdBcHByb3ZlIG9yZGVyIDEyMz8nIH0gfTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNlUmVzdWx0IHtcbiAgcmVhZG9ubHkgcGF1c2U6IHRydWU7XG4gIC8qKiBEYXRhIHRvIGluY2x1ZGUgaW4gdGhlIGNoZWNrcG9pbnQg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBkYXRhPzogdW5rbm93bjtcbn1cblxuLy8g4pSA4pSAIEZsb3djaGFydENoZWNrcG9pbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogU2VyaWFsaXphYmxlIGNoZWNrcG9pbnQg4oCUIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlc3VtZSBhIHBhdXNlZCBmbG93Y2hhcnQsXG4gKiBhbmQgbm90aGluZyBhIHJlc3VtZSBuZXZlciByZWFkcy5cbiAqXG4gKiBMRUFOIChmb3JtYXQgMik6IGl0cyBzaXplIGlzIHRoZSBTVEFURSdzLCBuZXZlciB0aGUgcnVuJ3MgbGVuZ3RoLiBUaGUgY3Vyc29yXG4gKiBpcyBgcGF1c2VkU3RhZ2VJZGAgKyBgc3ViZmxvd1BhdGhgOyB0aGUgc3RhdGUgaXMgYHNoYXJlZFN0YXRlYCBwbHVzIHRoZVxuICogY2FwdHVyZXMgb2YgdGhlIHN1YmZsb3dzIG9uIHRoYXQgcGF0aCAoYHN1YmZsb3dTdGF0ZXNgKS4gVGhlIHJ1bidzIGhpc3Rvcnkg4oCUXG4gKiB0aGUgZXhlY3V0aW9uIHRyZWUsIHRoZSBmaW5pc2hlZCBzdWJmbG93cycgcmVzdWx0cywgdGhlIGNvbW1pdCBsb2cg4oCUIGlzIG5vdFxuICogaGVyZTogcmVhZCBpdCBmcm9tIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYCBiZWZvcmUgYHJlc3VtZSgpYCAoZm9ybWF0IDFcbiAqIGNhcnJpZWQgYGV4ZWN1dGlvblRyZWVgIGFuZCBgc3ViZmxvd1Jlc3VsdHNgOyBubyByZXN1bWUgcmVhZCB0aGVtKS5cbiAqXG4gKiBKU09OLXNhZmU6IG5vIGZ1bmN0aW9ucywgbm8gY2xhc3MgaW5zdGFuY2VzLCBubyBTREsgY2xpZW50cy5cbiAqIFN0b3JlIGFueXdoZXJlOiBSZWRpcywgUG9zdGdyZXMsIGxvY2FsU3RvcmFnZSwgYSBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjaGVja3BvaW50ID0gZXhlY3V0b3IuZ2V0Q2hlY2twb2ludCgpOyAvLyBhZnRlciBwYXVzZVxuICogYXdhaXQgcmVkaXMuc2V0KGBzZXNzaW9uOiR7aWR9YCwgSlNPTi5zdHJpbmdpZnkoY2hlY2twb2ludCkpO1xuICpcbiAqIC8vIFJlc3VtZSAoaG91cnMgbGF0ZXIsIHBvc3NpYmx5IGRpZmZlcmVudCBzZXJ2ZXIpXG4gKiBjb25zdCBjaGVja3BvaW50ID0gSlNPTi5wYXJzZShhd2FpdCByZWRpcy5nZXQoYHNlc3Npb246JHtpZH1gKSk7XG4gKiBjb25zdCBleGVjdXRvciA9IG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCk7XG4gKiBhd2FpdCBleGVjdXRvci5yZXN1bWUoY2hlY2twb2ludCwgeyBhcHByb3ZlZDogdHJ1ZSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3djaGFydENoZWNrcG9pbnQge1xuICAvKiogUGF1c2VkIHJvb3QtbGVnIG9ic2VydmF0aW9uIG9ubHkuIE5vIGhpc3RvcnkvcmVjb3JkZXIgZGF0YSBvciBzdG9yYWdlIGFja25vd2xlZGdlbWVudCBpcyBpbmNsdWRlZC4gKi9cbiAgcmVhZG9ubHkgY2FwdHVyZT86IGltcG9ydCgnLi4vY2FwdHVyZS9yZWFkU291cmNlcy5qcycpLk5hdGl2ZUNhcHR1cmVPYnNlcnZhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBjaGVja3BvaW50IEZPUk1BVDogYDJgLCB0aGUgbGVhbiBjaGVja3BvaW50IChgMWAgZnJvbSA5LjM5LjA7IGFic2VudFxuICAgKiBiZWZvcmUpLiBgcmVzdW1lKClgIHJlYWRzIGV2ZXJ5IG9sZGVyIG9uZSB0aHJvdWdoIHRoZSBvbmUgdXBjYXN0ZXJcbiAgICogKGBwYXVzZS9yZWNvcmQudHMgwrcgdXBjYXN0Q2hlY2twb2ludGApLCB3aGljaCBkcm9wcyB3aGF0IGxhdGVyIGZvcm1hdHNcbiAgICogZHJvcHBlZCDigJQgZm9ybWF0IDEncyBgZXhlY3V0aW9uVHJlZWAgYW5kIGBzdWJmbG93UmVzdWx0c2AsIHRoZSBsZWdhY3lcbiAgICogYGNvbnRpbnVhdGlvblN0YWdlSWRgIOKAlCBub25lIG9mIHdoaWNoIGEgcmVzdW1lIGV2ZXIgcmVhZC4gQSB2ZXJzaW9uIHRoaXNcbiAgICogcmVsZWFzZSBkb2VzIG5vdCBrbm93IGlzIHJlZnVzZWQuXG4gICAqL1xuICByZWFkb25seSBjaGVja3BvaW50VmVyc2lvbj86IDI7XG5cbiAgLyoqIFNjb3BlIHN0YXRlIGF0IHRoZSBwYXVzZSBwb2ludCDigJQgYWxsIHNoYXJlZCBtZW1vcnkga2V5L3ZhbHVlcy4gKi9cbiAgcmVhZG9ubHkgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBwYXVzZWQuIFVzZWQgYnkgcmVzdW1lKCkgdG8gZmluZCB0aGUgbm9kZSBpbiB0aGUgZ3JhcGguICovXG4gIHJlYWRvbmx5IHBhdXNlZFN0YWdlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdXNlZCBFWEVDVVRJT04gKDkuMzcuMCk6IHRoZSBydW4gdGhhdCBwYXVzZWQgYW5kIHRoZSBwYXVzZWQgc3RhZ2Unc1xuICAgKiBydW50aW1lU3RhZ2VJZCBpbiBpdCAodGhlIGlkIGl0cyBgb25QYXVzZWAgZXZlbnQgYW5kIGl0cyBjb21taXQgY2FycnkpLlxuICAgKiBSZWFkIGJ5IGByZXN1bWUoKWAgaW50byB0aGUgYG9uUmVzdW1lYCBldmVudCdzIGB0cmF2ZXJzYWxDb250ZXh0LnJlc3VtZWRGcm9tYFxuICAgKiBsaW5rIOKAlCBuZXZlciB1c2VkIHRvIHBsYW4gdGhlIHJlLWVudHJ5LiBBYnNlbnQgb24gYW4gb2xkZXIgY2hlY2twb2ludCxcbiAgICogd2hpY2ggdGhlbiByZXN1bWVzIHdpdGhvdXQgYSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF1c2VkRXhlY3V0aW9uPzogUGF1c2VkRXhlY3V0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgaWRlbXBvdGVuY3kga2V5IHRoZSBwYXVzZWQgZXhlY3V0aW9uIHJhbiB1bmRlciAoMTAuMSkg4oCUIHByZXNlbnQgb25seSB3aGVuIHRoZSBwYXVzZWQgc3RhZ2UgYHRvdWNoZXNgIGFuXG4gICAqIG91dHNpZGUgc3lzdGVtIHdpdGggYSBrZXkgcnVsZS4gYHJlc3VtZSgpYCByZS1ydW5zIHRoZSBzdGFnZSAob3IgcnVucyBpdHMgYHJlc3VtZUZuYCkgdW5kZXIgVEhJUyBrZXksIG5ldmVyIGFcbiAgICogcmVjb21wdXRlZCBvbmU6IHRoZSBpbnB1dCB0aGUgcnVsZSByZWFkIGRvZXMgbm90IGNyb3NzIGEgcmVzdW1lLCBhbmQgYSBkaWZmZXJlbnQga2V5IG9uIHRoZSByZS1ydW4gd291bGQgbWFrZVxuICAgKiB0aGUgb3V0c2lkZSBzeXN0ZW0gYXBwbHkgdGhlIGVmZmVjdCB0d2ljZS4gQSByZWFsIHZhbHVlLCBsaWtlIGBzaGFyZWRTdGF0ZWAg4oCUIG5vIHJlZGFjdGlvbiBwb2xpY3kgdG91Y2hlcyB0aGVcbiAgICogY2hlY2twb2ludC4gQSBtYWxmb3JtZWQgb25lIGlzIHJlZnVzZWQgYXQgYHJlc3VtZSgpYC5cbiAgICovXG4gIHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xuXG4gIC8qKiBQYXRoIHRocm91Z2ggc3ViZmxvd3MgdG8gdGhlIHBhdXNlZCBzdGFnZSAoZS5nLiwgWydzZi1wYXltZW50JywgJ3NmLXZhbGlkYXRpb24nXSkuXG4gICAqICBFbXB0eSBhcnJheSB3aGVuIHBhdXNlZCBhdCB0aGUgdG9wIGxldmVsLiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqIERhdGEgZnJvbSAkcGF1c2UoKSDigJQgcXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YT86IHVua25vd247XG5cbiAgLyoqXG4gICAqIEhPVyB0aGUgcGF1c2Ugd2FzIHJhaXNlZC4gYCdpbnRlcnJ1cHQnYCBtZWFucyBhIHN0YWdlIGJvZHkgY2FsbGVkXG4gICAqIGBpbnRlcnJ1cHQoc2NvcGUsIHsgcmVhc29uLCBleHBlY3RzPyB9KWAgYW5kIGBwYXVzZURhdGFgIElTIHRoYXQgcGF5bG9hZDtcbiAgICogYWJzZW50IG1lYW5zIHRoZSBgYWRkUGF1c2FibGVGdW5jdGlvbmAgZXhlY3V0ZS9yZXN1bWUgcGF0aCAoZXZlcnlcbiAgICogY2hlY2twb2ludCB3cml0dGVuIGJlZm9yZSA5LjE0LjAgb21pdHMgaXQsIHdoaWNoIGlzIGV4YWN0bHkgcmlnaHQpLlxuICAgKlxuICAgKiBgcmVzdW1lKClgIHJlYWRzIHRoaXMgdG8gcGljayB0aGUgcmUtZW50cnksIGFuZCB0aGUgdHdvIGRpZmZlciBieSBsYXc6XG4gICAqIGFuIGludGVycnVwdGVkIHN0YWdlIFJFLVJVTlMgSVRTIE9XTiBGVU5DVElPTiBGUk9NIFRIRSBUT1AgKHN0YWdlcyBhcmVcbiAgICogYXRvbWljIOKAlCB0aGUgYW5zd2VyIGNvbWVzIGJhY2sgb3V0IG9mIHRoZSBgaW50ZXJydXB0KClgIGNhbGwpLCB3aGlsZSBhXG4gICAqIHBhdXNhYmxlIHN0YWdlIHJ1bnMgaXRzIHNlcGFyYXRlIGByZXN1bWVGbmAuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIG9uZSBlbnRyeSBwZXIgc3ViZmxvdyBib3VuZGFyeSBvbiB0aGUgcGF0aFxuICAgKiB0byB0aGUgcGF1c2VkIHN0YWdlLiBLZXllZCBieSBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKG1hdGNoZXNcbiAgICogYHN1YmZsb3dQYXRoYCBlbnRyaWVzKS4gRWFjaCB2YWx1ZSBpcyB0aGUgc3ViZmxvdydzIHByZS1wYXVzZVxuICAgKiBzaGFyZWQgc3RhdGUuXG4gICAqXG4gICAqIEFsd2F5cyBwcmVzZW50IChlbXB0eSBge31gIGZvciByb290LWxldmVsIHBhdXNlcyB3aGVyZSBubyBzdWJmbG93c1xuICAgKiB3ZXJlIGVudGVyZWQpLiBPbiByZXN1bWUsIGBTdWJmbG93RXhlY3V0b3JgIHNlZWRzIGVhY2ggbmVzdGVkIHJ1bnRpbWVcbiAgICogb24gdGhlIHBhdGggZnJvbSB0aGlzIG1hcCDigJQgT05DRSwgb24gaXRzIGZpcnN0IGVudHJ5LCBpbiBwbGFjZSBvZiB0aGVcbiAgICogaW5wdXRNYXBwZXIncyB2YWx1ZXMgKHRoZSBtYXBwZXIgc3RpbGwgcnVucywgZm9yIHRoZSBzdGFnZXMnIHJlYWQtb25seVxuICAgKiBhcmdzKSDigJQgc28gcmVzdW1lIGhhbmRsZXJzIHNlZSBwcmUtcGF1c2Ugc2NvcGUgYWNyb3NzIHNhbWUtZXhlY3V0b3IgQU5EXG4gICAqIGNyb3NzLWV4ZWN1dG9yIHJlc3RhcnRzLiBPbmx5IHRoZSBzdWJmbG93cyBPTiBgc3ViZmxvd1BhdGhgIHJlYWQgaXQuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbiAgLyoqXG4gICAqIFRoZSBzaGFyZWQgZXhlY3V0aW9uIGNvdW50ZXIgYXQgdGhlIG1vbWVudCBvZiBwYXVzZSDigJQgdGhlIG51bWJlciBvZiBzdGFnZXNcbiAgICogZXhlY3V0ZWQgc28gZmFyIHRoaXMgcnVuLiBSZXN1bWUgc2VlZHMgaXQgc28gcG9zdC1yZXN1bWUgYHJ1bnRpbWVTdGFnZUlkYHNcbiAgICogKGBzdGFnZUlkI2V4ZWN1dGlvbkluZGV4YCkga2VlcCBjbGltYmluZyBhbmQgbmV2ZXIgY29sbGlkZSB3aXRoIHByZS1wYXVzZVxuICAgKiBvbmVzLCB3aGljaCBpcyB3aGF0IHRoZSB3aG9sZSBldmVudC1jb3JyZWxhdGlvbiBtb2RlbCByZXN0cyBvbi5cbiAgICpcbiAgICogT3B0aW9uYWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGEgY2hlY2twb2ludCBwZXJzaXN0ZWQgYmVmb3JlIHRoaXNcbiAgICogZmllbGQgZXhpc3RlZCAob2xkZXIgUmVkaXMvUG9zdGdyZXMgcm93cykgc3RpbGwgdmFsaWRhdGVzIGFuZCByZXN1bWVzIHdpdGhcbiAgICogdGhlIHByZXZpb3VzIChjb3VudGVyLXJlc3RhcnRpbmcpIGJlaGF2aW9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBlci1gc3RhZ2VJZGAgbG9vcCB2aXNpdCBjb3VudHMgYXQgdGhlIG1vbWVudCBvZiBwYXVzZS4gUmVzdW1lIHNlZWRzIHRoZW1cbiAgICogc28gYFRyYXZlcnNhbENvbnRleHQubG9vcEl0ZXJhdGlvbmAgc3RheXMgY29udGludW91cyBhY3Jvc3MgdGhlIHBhdXNlIChhXG4gICAqIG1pZC1sb29wIHJlc3VtZSBrZWVwcyBjb3VudGluZyB1cCwgbm90IHJlc3RhcnRpbmcgYXQgMCkgYW5kIHRoZVxuICAgKiBDb250aW51YXRpb25SZXNvbHZlciBpdGVyYXRpb24gYnVkZ2V0IGlzIG5vdCBzaWxlbnRseSByZWZpbGxlZC5cbiAgICpcbiAgICogT3B0aW9uYWwgZm9yIHRoZSBzYW1lIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkgcmVhc29uIGFzIGBleGVjdXRpb25Db3VudGAuXG4gICAqL1xuICByZWFkb25seSB2aXNpdENvdW50cz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIG51bWJlcj4+O1xuXG4gIC8qKiBTdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiBBYnNlbnQgZm9yIGxpbmVhciBwYXVzZXMuICovXG4gIHJlYWRvbmx5IGludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXVzZXMgcmFpc2VkIGJ5IFBBUkFMTEVMIFNJQkxJTkdTIG9mIHRoZSBwYXVzZWQgc3RhZ2UgaW4gdGhlIHNhbWVcbiAgICogZmFuLW91dCwgd2FpdGluZyB0aGVpciB0dXJuICg5LjI4LjApIOKAlCBzZWUge0BsaW5rIFBlbmRpbmdQYXVzZX0uIEFic2VudFxuICAgKiB3aGVuIG9ubHkgb25lIGNoaWxkIHBhdXNlZCAoZXZlcnkgY2hlY2twb2ludCBiZWZvcmUgOS4yOC4wIG9taXRzIGl0LCBhbmRcbiAgICogcmVzdW1lcyBleGFjdGx5IGFzIGJlZm9yZSkuIFJlc3VtaW5nIHRoaXMgY2hlY2twb2ludCBmaW5pc2hlcyB0aGUgcGF1c2VkXG4gICAqIHN0YWdlJ3MgY2hpbGQsIHRoZW4gcGF1c2VzIGFnYWluIHdpdGggdGhlIGZpcnN0IG9mIHRoZXNlOyB0aGUgZmFuLW91dCdzXG4gICAqIGpvaW4gcnVucyBvbmNlIGV2ZXJ5IGNoaWxkIGlzIGRvbmUuXG4gICAqL1xuICByZWFkb25seSBwZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUGVuZGluZ1BhdXNlW107XG5cbiAgLyoqXG4gICAqIFRoZSByZWRhY3Rpb24gbWFya3Mgb2YgdGhlIHBhdXNlZCBydW4g4oCUIE5BTUVTIG9ubHkgKHNlZVxuICAgKiB7QGxpbmsgUmVkYWN0aW9uTWFya3N9KS4gQWJzZW50IHdoZW4gdGhlIHJ1biBtYXJrZWQgbm90aGluZyAobm8gcG9saWN5XG4gICAqIGFuZCBubyBwZXItY2FsbCBtYXJrLCBvciBhbiBvbGRlciBjaGVja3BvaW50KTogdGhlIHJlc3VtZWQgcnVuIHRoZW4gc3RhcnRzXG4gICAqIGZyb20gaXRzIHBvbGljeSBhbG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlZGFjdGlvbk1hcmtzPzogUmVkYWN0aW9uTWFya3M7XG5cbiAgLyoqIFRpbWVzdGFtcCBvZiB3aGVuIHRoZSBwYXVzZSBvY2N1cnJlZC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQXQ6IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFBhdXNhYmxlSGFuZGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBhIHBhdXNhYmxlIHN0YWdlIOKAlCBoYXMgdHdvIHBoYXNlczogZXhlY3V0ZSBhbmQgcmVzdW1lLlxuICpcbiAqIGBleGVjdXRlYCBydW5zIHRoZSBmaXJzdCB0aW1lLiBSZXR1cm4gYW55IG5vbi12b2lkIHZhbHVlIHRvIHBhdXNlICh0aGF0IHZhbHVlXG4gKiBiZWNvbWVzIHRoZSBjaGVja3BvaW50J3MgYHBhdXNlRGF0YWApOyByZXR1cm4gdm9pZC91bmRlZmluZWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gKiBgcmVzdW1lYCBydW5zIHdoZW4gdGhlIGZsb3djaGFydCBpcyByZXN1bWVkLiBJdCByZWNlaXZlcyB0aGUgcmVzdW1lIGlucHV0LlxuICpcbiAqIEJvdGggcGhhc2VzIHJlY2VpdmUgdGhlIHNhbWUgc2NvcGUuIEFmdGVyIGV4ZWN1dGUgcGF1c2VzLCB0aGUgc2NvcGUgc3RhdGVcbiAqIGlzIHByZXNlcnZlZCBpbiB0aGUgY2hlY2twb2ludC4gT24gcmVzdW1lLCB0aGUgc2NvcGUgaXMgcmVzdG9yZWQgYmVmb3JlXG4gKiBjYWxsaW5nIHJlc3VtZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLmFkZFBhdXNhYmxlRnVuY3Rpb24oJ0FwcHJvdmVPcmRlcicsIHtcbiAqICAgZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gKiAgICAgc2NvcGUub3JkZXJJZCA9ICcxMjMnO1xuICogICAgIHNjb3BlLmFtb3VudCA9IDI5OTtcbiAqICAgICByZXR1cm4geyBxdWVzdGlvbjogYEFwcHJvdmUgJCR7c2NvcGUuYW1vdW50fSByZWZ1bmQ/YCB9O1xuICogICB9LFxuICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICogICAgIHNjb3BlLmFwcHJvdmVyID0gaW5wdXQuYXBwcm92ZXI7XG4gKiAgIH0sXG4gKiB9LCAnYXBwcm92ZS1vcmRlcicsICdNYW5hZ2VyIGFwcHJvdmFsIGdhdGUnKVxuICpcbiAqIC8vIExhdGVyIOKAlCByZXN1bWUgd2l0aCBodW1hbidzIGFuc3dlclxuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUsIGFwcHJvdmVyOiAnSmFuZScgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzYWJsZUhhbmRsZXI8VFNjb3BlID0gYW55LCBUSW5wdXQgPSB1bmtub3duLCBUUGF1c2VEYXRhID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogRmlyc3QtcnVuIHBoYXNlLiBSZXR1cm4gZGF0YSB0byBwYXVzZSwgb3Igdm9pZC91bmRlZmluZWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gICAqXG4gICAqIEFueSBub24tdm9pZCByZXR1cm4gdmFsdWUgYmVjb21lcyB0aGUgYHBhdXNlRGF0YWAgaW4gdGhlIGNoZWNrcG9pbnQuXG4gICAqIFRoZSBjb25zdW1lciBkZWZpbmVzIHRoZSBgVFBhdXNlRGF0YWAgdHlwZSDigJQgdGhlIEZFIHVzZXMgaXQgdG8gcmVuZGVyXG4gICAqIHRoZSByaWdodCBVSSAoZm9ybSBmaWVsZHMsIGFwcHJvdmFsIGJ1dHRvbnMsIGV0Yy4pLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFRQYXVzZURhdGEgPSB7IHF1ZXN0aW9uOiBzdHJpbmc7IHJpc2tMZXZlbDogc3RyaW5nIH1cbiAgICogY29uc3QgaGFuZGxlcjogUGF1c2FibGVIYW5kbGVyPE15U3RhdGUsIHsgYXBwcm92ZWQ6IGJvb2xlYW4gfSwgeyBxdWVzdGlvbjogc3RyaW5nOyByaXNrTGV2ZWw6IHN0cmluZyB9PiA9IHtcbiAgICogICBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAgICogICAgIHJldHVybiB7IHF1ZXN0aW9uOiBgQXBwcm92ZSBvcmRlciAke3Njb3BlLm9yZGVySWR9P2AsIHJpc2tMZXZlbDogJ2hpZ2gnIH07XG4gICAqICAgfSxcbiAgICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAgICogICAgIHNjb3BlLmFwcHJvdmVkID0gaW5wdXQuYXBwcm92ZWQ7XG4gICAqICAgfSxcbiAgICogfTtcbiAgICogYGBgXG4gICAqL1xuICBleGVjdXRlOiAoc2NvcGU6IFRTY29wZSkgPT4gUHJvbWlzZTxUUGF1c2VEYXRhIHwgdm9pZD4gfCBUUGF1c2VEYXRhIHwgdm9pZDtcbiAgLyoqXG4gICAqIFJlc3VtZSBwaGFzZS4gQ2FsbGVkIHdpdGggdGhlIHJlc3VtZSBpbnB1dCB3aGVuIGV4ZWN1dGlvbiBjb250aW51ZXMuXG4gICAqXG4gICAqIFRoZSBzY29wZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYC4gV3JpdGVzIGR1cmluZ1xuICAgKiBgcmVzdW1lYCBhcmUgY29tbWl0dGVkIGFuZCB2aXNpYmxlIHRvIHN1YnNlcXVlbnQgc3RhZ2VzLlxuICAgKi9cbiAgcmVzdW1lOiAoc2NvcGU6IFRTY29wZSwgaW5wdXQ6IFRJbnB1dCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbi8vIOKUgOKUgCBUeXBlIGd1YXJkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhIFBhdXNlUmVzdWx0IChzdGFnZSB3YW50cyB0byBwYXVzZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVJlc3VsdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBhdXNlUmVzdWx0IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgKHZhbHVlIGFzIFBhdXNlUmVzdWx0KS5wYXVzZSA9PT0gdHJ1ZTtcbn1cblxuLyoqIENoZWNrIGlmIGFuIGVycm9yIGlzIGEgUGF1c2VTaWduYWwuIFVzZXMgaW5zdGFuY2VvZiArIG5hbWUgYnJhbmQgZmFsbGJhY2sgZm9yIGNyb3NzLXJlYWxtIHNhZmV0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlU2lnbmFsKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgUGF1c2VTaWduYWwge1xuICAvLyBUb3RhbDogYSBQcm94eSB3aG9zZSBgZ2V0UHJvdG90eXBlT2ZgIHRyYXAgdGhyb3dzIChvciBhIHJldm9rZWQgUHJveHkpXG4gIC8vIGlzIG5vdCBhIHNpZ25hbCDigJQgdGhlIGVuZ2luZSdzIGNhdGNoIGJsb2NrcyBhc2sgdGhpcyBmaXJzdCwgYW5kIG11c3RcbiAgLy8gbm90IHRyYWRlIHRoZSBzdGFnZSdzIHRocm93biB2YWx1ZSBmb3IgdGhlIHRyYXAncyBlcnJvci5cbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBQYXVzZVNpZ25hbCB8fFxuICAgICAgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICAgZXJyb3IubmFtZSA9PT0gJ1BhdXNlU2lnbmFsJyAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsICdwYXVzZURhdGEnKSAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsICdzdGFnZUlkJykpXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=