footprintjs 9.46.0 → 9.46.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CLAUDE.md +6 -6
  2. package/dist/esm/lib/decide/evaluator.js +2 -2
  3. package/dist/esm/lib/decide/evidence.js +2 -2
  4. package/dist/esm/lib/engine/handlers/servedPause.js +2 -2
  5. package/dist/esm/lib/memory/RecordFrame.d.ts +41 -6
  6. package/dist/esm/lib/memory/RecordFrame.js +36 -5
  7. package/dist/esm/lib/memory/SharedMemory.d.ts +1 -1
  8. package/dist/esm/lib/memory/SharedMemory.js +2 -2
  9. package/dist/esm/lib/memory/StageContext.d.ts +21 -14
  10. package/dist/esm/lib/memory/StageContext.js +36 -74
  11. package/dist/esm/lib/memory/borrowedMutation.d.ts +1 -1
  12. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  13. package/dist/esm/lib/memory/honesty.d.ts +4 -3
  14. package/dist/esm/lib/memory/honesty.js +5 -4
  15. package/dist/esm/lib/memory/index.d.ts +4 -2
  16. package/dist/esm/lib/memory/index.js +6 -4
  17. package/dist/esm/lib/memory/placeholders.d.ts +23 -28
  18. package/dist/esm/lib/memory/placeholders.js +24 -29
  19. package/dist/esm/lib/memory/recordCommit.d.ts +5 -3
  20. package/dist/esm/lib/memory/recordCommit.js +7 -5
  21. package/dist/esm/lib/memory/redaction.d.ts +78 -40
  22. package/dist/esm/lib/memory/redaction.js +130 -64
  23. package/dist/esm/lib/memory/runAddress.d.ts +20 -0
  24. package/dist/esm/lib/memory/runAddress.js +25 -0
  25. package/dist/esm/lib/memory/scrub.d.ts +51 -0
  26. package/dist/esm/lib/memory/scrub.js +72 -0
  27. package/dist/esm/lib/memory/utils.d.ts +3 -3
  28. package/dist/esm/lib/memory/utils.js +4 -4
  29. package/dist/lib/decide/evaluator.js +3 -3
  30. package/dist/lib/decide/evidence.js +3 -3
  31. package/dist/lib/engine/handlers/servedPause.js +3 -3
  32. package/dist/lib/memory/RecordFrame.js +36 -5
  33. package/dist/lib/memory/SharedMemory.js +2 -2
  34. package/dist/lib/memory/StageContext.js +42 -80
  35. package/dist/lib/memory/borrowedMutation.js +2 -2
  36. package/dist/lib/memory/honesty.js +5 -4
  37. package/dist/lib/memory/index.js +6 -4
  38. package/dist/lib/memory/placeholders.js +25 -30
  39. package/dist/lib/memory/recordCommit.js +9 -7
  40. package/dist/lib/memory/redaction.js +144 -75
  41. package/dist/lib/memory/runAddress.js +29 -0
  42. package/dist/lib/memory/scrub.js +77 -0
  43. package/dist/lib/memory/utils.js +4 -4
  44. package/dist/types/lib/memory/RecordFrame.d.ts +41 -6
  45. package/dist/types/lib/memory/SharedMemory.d.ts +1 -1
  46. package/dist/types/lib/memory/StageContext.d.ts +21 -14
  47. package/dist/types/lib/memory/borrowedMutation.d.ts +1 -1
  48. package/dist/types/lib/memory/honesty.d.ts +4 -3
  49. package/dist/types/lib/memory/index.d.ts +4 -2
  50. package/dist/types/lib/memory/placeholders.d.ts +23 -28
  51. package/dist/types/lib/memory/recordCommit.d.ts +5 -3
  52. package/dist/types/lib/memory/redaction.d.ts +78 -40
  53. package/dist/types/lib/memory/runAddress.d.ts +20 -0
  54. package/dist/types/lib/memory/scrub.d.ts +51 -0
  55. package/dist/types/lib/memory/utils.d.ts +3 -3
  56. package/package.json +1 -1
@@ -4,10 +4,11 @@
4
4
  *
5
5
  * What a stage's frame needs to READ and WRITE the record, and nothing about the stage inside a run:
6
6
  * where it writes (its address), what it read first (the first-touch base), what it staged (the lazy
7
- * transaction buffer), which keys it read (the readKeys list), and where a commit lands (live state,
8
- * the redacted mirror, the log — through `recordCommit`). The engine's frame (`StageContext`, L4)
9
- * composes one and keeps the rest: retention, diagnostics, the dev-mode warnings, the commit observer
10
- * and the redaction verdict.
7
+ * transaction buffer) and which of it the log must not show (the scrub of each write), which keys it
8
+ * read (the readKeys list), and where a commit lands (live state, the redacted mirror, the log —
9
+ * through `recordCommit`). The engine's frame (`StageContext`, L4) composes one and keeps the rest:
10
+ * retention, diagnostics, the dev-mode warnings, the commit observer and the redaction DECISION —
11
+ * which value is secret (`redaction.ts · decideWrite`); the frame writes the bytes it is handed (C4).
11
12
  *
12
13
  * THE LAW:
13
14
  * 1. ADDRESS. The frame reads and writes at its address, a path prefix the engine computed and hands
@@ -29,6 +30,12 @@
29
30
  * the names, and hands both to `recordCommit`. `release` drops the buffer and the base; a frame
30
31
  * touched again re-anchors on the state as it stands then. The readKeys list survives a release,
31
32
  * and goes with `discard` (a failed attempt never happened).
33
+ * 7. WRITE. `write(path, value, verb, scrub?)` is the one way to stage: `set`, `merge` or `delete`
34
+ * at an absolute path (the address already joined — `at`), with the bytes of a redaction
35
+ * verdict. `whole` → the log and the mirror carry `LOG_PLACEHOLDER` at the path; `fields` → at
36
+ * each field inside the value (a literal key and, when dotted, the nested path) — wherever it
37
+ * holds a value at commit (`scrub.ts`). No scrub → the value as it is. The frame never decides
38
+ * a scrub, and nothing outside it reaches its buffer.
32
39
  */
33
40
  Object.defineProperty(exports, "__esModule", { value: true });
34
41
  exports.RecordFrame = void 0;
@@ -154,6 +161,8 @@ class RecordFrame {
154
161
  * The buffer's base is the FIRST-TOUCH view, NOT the live state at write time: under parallel forks
155
162
  * a sibling may have committed between this frame's first read and this write, and the net-change
156
163
  * diff base must stay anchored at first touch to match the eager engine — see {@link firstTouch}.
164
+ *
165
+ * Private since C4: every write goes through {@link write}, so the scrub travels with the op.
157
166
  */
158
167
  getTransactionBuffer() {
159
168
  if (!this.buffer) {
@@ -166,6 +175,28 @@ class RecordFrame {
166
175
  }
167
176
  return this.buffer;
168
177
  }
178
+ /**
179
+ * Stage one write (law 7): `verb` at `path` — an absolute path, the address already joined
180
+ * ({@link at}) — and the bytes of its redaction verdict. The first write builds the buffer (law 4).
181
+ *
182
+ * The scrub registers paths, never values: `whole` marks the op's own path, `fields` each field
183
+ * inside the value (a literal key and, when dotted, the nested path); `recordCommit` puts the
184
+ * log's placeholder wherever one of them holds a value at commit, for the mirror and the log only
185
+ * (`scrub.ts`). Live state takes the value as it is. A path marked by a write that the net-change
186
+ * filter drops goes with it.
187
+ */
188
+ write(path, value, verb, scrub) {
189
+ const buffer = this.getTransactionBuffer();
190
+ const whole = scrub?.whole === true;
191
+ if (verb === 'merge')
192
+ buffer.merge(path, value, whole);
193
+ else if (verb === 'delete')
194
+ buffer.delete(path, whole);
195
+ else
196
+ buffer.set(path, value, whole);
197
+ if (scrub?.fields !== undefined)
198
+ buffer.markRedactedFields(path, scrub.fields);
199
+ }
169
200
  /** Has the frame staged a write since its last release — does its buffer exist? */
170
201
  get hasStaged() {
171
202
  return this.buffer !== undefined;
@@ -266,4 +297,4 @@ class RecordFrame {
266
297
  }
267
298
  }
268
299
  exports.RecordFrame = RecordFrame;
269
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkRnJhbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS9SZWNvcmRGcmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRzs7O0FBR0gsNkNBQXlDO0FBQ3pDLHVEQUFtRTtBQUVuRSxpRUFBMkQ7QUFhM0QsTUFBYSxXQUFXO0lBQ3RCLHFFQUFxRTtJQUM1RCxLQUFLLENBQWU7SUFDN0IsbUVBQW1FO0lBQzFELEdBQUcsQ0FBWTtJQUN4QixtR0FBbUc7SUFDM0YsT0FBTyxDQUFnQjtJQUMvQixnREFBZ0Q7SUFDeEMsUUFBUSxDQUFvQjtJQUNwQyxnRUFBZ0U7SUFDeEQsUUFBUSxDQUFrQjtJQUNsQzs7OztPQUlHO0lBQ0ssSUFBSSxDQUEyQjtJQUN2Qyx3RkFBd0Y7SUFDaEYsTUFBTSxDQUFxQjtJQUNuQzs7OztPQUlHO0lBQ0ssUUFBUSxDQUFlO0lBRS9CLFlBQVksS0FBbUIsRUFBRSxHQUFjLEVBQUUsVUFBNkIsRUFBRTtRQUM5RSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRCxrR0FBa0c7SUFDbEcsV0FBVyxDQUFDLFFBQXdCO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpREFBaUQ7SUFDakQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCw0R0FBNEc7SUFDNUcsU0FBUyxDQUFDLE1BQWdDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxpR0FBaUc7SUFDakcsRUFBRSxDQUFDLElBQXVCLEVBQUUsR0FBVztRQUNyQyw0RkFBNEY7UUFDNUYsMEZBQTBGO1FBQzFGLCtEQUErRDtRQUMvRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlCLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxDQUFTLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDMUIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BZ0NHO0lBQ0ssVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQix3RkFBd0Y7WUFDeEYsMEZBQTBGO1lBQzFGLE1BQU0sZ0JBQWdCLEdBQ3BCLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbkcsMkZBQTJGO1lBQzNGLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksd0NBQWlCLENBQ2pDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFDakIsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQzNCLGdCQUFnQixFQUNoQixJQUFJLENBQUMsUUFBUSxDQUNkLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxtRkFBbUY7SUFDbkYsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSCxJQUFJLENBQUMsSUFBYyxFQUFFLEdBQVk7UUFDL0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBYSxDQUFDLENBQUM7UUFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsc0JBQVMsRUFBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUYsSUFBSSxPQUFPLFlBQVksS0FBSyxXQUFXO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDM0Qsc0VBQXNFO1FBQ3RFLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCw2R0FBNkc7SUFDN0csUUFBUSxDQUFDLElBQXVCLEVBQUUsR0FBVztRQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQ3RELENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEYsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsR0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxtSEFBbUg7SUFDbkgsVUFBVSxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCw2R0FBNkc7SUFDN0csU0FBUyxDQUFDLElBQXlCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksQ0FBQyxJQUF5QjtRQUM1QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLHNCQUFTLEVBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxtR0FBbUc7SUFDbkcsTUFBTSxDQUFDLElBQXlCO1FBQzlCLE9BQU8sSUFBQSxzQkFBUyxFQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLE9BQTBCO1FBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDdEMsSUFBQSw4QkFBWSxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQTFQRCxrQ0EwUEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlY29yZEZyYW1lIOKAlCB0aGUgcmVjb3JkIGhhbGYgb2Ygb25lIHN0YWdlJ3MgZnJhbWUgKEMzLCBMMykuXG4gKlxuICogV2hhdCBhIHN0YWdlJ3MgZnJhbWUgbmVlZHMgdG8gUkVBRCBhbmQgV1JJVEUgdGhlIHJlY29yZCwgYW5kIG5vdGhpbmcgYWJvdXQgdGhlIHN0YWdlIGluc2lkZSBhIHJ1bjpcbiAqIHdoZXJlIGl0IHdyaXRlcyAoaXRzIGFkZHJlc3MpLCB3aGF0IGl0IHJlYWQgZmlyc3QgKHRoZSBmaXJzdC10b3VjaCBiYXNlKSwgd2hhdCBpdCBzdGFnZWQgKHRoZSBsYXp5XG4gKiB0cmFuc2FjdGlvbiBidWZmZXIpLCB3aGljaCBrZXlzIGl0IHJlYWQgKHRoZSByZWFkS2V5cyBsaXN0KSwgYW5kIHdoZXJlIGEgY29tbWl0IGxhbmRzIChsaXZlIHN0YXRlLFxuICogdGhlIHJlZGFjdGVkIG1pcnJvciwgdGhlIGxvZyDigJQgdGhyb3VnaCBgcmVjb3JkQ29tbWl0YCkuIFRoZSBlbmdpbmUncyBmcmFtZSAoYFN0YWdlQ29udGV4dGAsIEw0KVxuICogY29tcG9zZXMgb25lIGFuZCBrZWVwcyB0aGUgcmVzdDogcmV0ZW50aW9uLCBkaWFnbm9zdGljcywgdGhlIGRldi1tb2RlIHdhcm5pbmdzLCB0aGUgY29tbWl0IG9ic2VydmVyXG4gKiBhbmQgdGhlIHJlZGFjdGlvbiB2ZXJkaWN0LlxuICpcbiAqIFRIRSBMQVc6XG4gKiAgIDEuIEFERFJFU1MuIFRoZSBmcmFtZSByZWFkcyBhbmQgd3JpdGVzIGF0IGl0cyBhZGRyZXNzLCBhIHBhdGggcHJlZml4IHRoZSBlbmdpbmUgY29tcHV0ZWQgYW5kIGhhbmRzXG4gKiAgICAgIG92ZXIgYXMgZGF0YSAoQzI6IGBbJ3J1bnMnLCA8aWQ+XWAgb3IgYFtdYCwgdGhlIHJvb3QpLiBJdCBtb3ZlcyBvbmx5IGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGU6XG4gKiAgICAgIHRoZSBidWZmZXIga2VlcHMgdGhlIGFkZHJlc3MgaXQgd2FzIGJ1aWx0IGF0ICh0aGUgZW5naW5lIHJlZnVzZXMgYSBsYXRlciBtb3ZlKS5cbiAqICAgMi4gRklSU1QgVE9VQ0guIFRoZSBjb21taXR0ZWQgZ2VuZXJhdGlvbiB0aGUgZnJhbWUgZmlyc3QgdG91Y2hlZCDigJQgaXRzIGZpcnN0IHJlYWQgT1IgZmlyc3Qgd3JpdGUg4oCUXG4gKiAgICAgIGlzIGhlbGQgYnkgcmVmZXJlbmNlLCBuZXZlciBjbG9uZWQ6IHRoZSByZWFkIHZpZXcgYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSBhbmQgdGhlIGJ1ZmZlcidzXG4gKiAgICAgIG5ldC1jaGFuZ2UgZGlmZiBiYXNlIGFmdGVyIGl0LlxuICogICAzLiBUV08gVElFUlMuIEEgcmVhZCBpcyBzZXJ2ZWQgZnJvbSB0aGUgc3RhZ2UncyBvd24gdmlldyAodGhlIGJ1ZmZlcidzIHdvcmtpbmcgY29weSBvbmNlIHRoZSBzdGFnZVxuICogICAgICB3cm90ZSwgZWxzZSB0aGUgZmlyc3QtdG91Y2ggYmFzZSk7IGEga2V5IGFic2VudCB0aGVyZSBpcyBzZXJ2ZWQgZnJvbSBMSVZFIHN0YXRlIChhdCB0aGVcbiAqICAgICAgYWRkcmVzcywgdGhlbiB0aGUgcm9vdCkuIEFmdGVyIHRoZSBmaXJzdCB3cml0ZSB0aGUgYnVmZmVyJ3MgZGlmZiBiYXNlIGlzIGZpcnN0IGdpdmVuIGEgcHJpdmF0ZVxuICogICAgICBjb3B5IGF0IHRoYXQgcGF0aCAoYFRyYW5zYWN0aW9uQnVmZmVyIMK3IGRldGFjaEJhc2VgKS5cbiAqICAgNC4gTEFaWSBCVUZGRVIuIFRoZSBidWZmZXIgaXMgYnVpbHQgYXQgdGhlIGZpcnN0IHdyaXRlIOKAlCBvbiB0aGUgZmlyc3QtdG91Y2ggYmFzZSwgYXQgdGhlIGFkZHJlc3MsXG4gKiAgICAgIHVuZGVyIHRoZSBlbmNvZGluZy4gQSBmcmFtZSB0aGF0IG5ldmVyIHdyaXRlcyBidWlsZHMgbm9uZSwgYW5kIGl0cyBjb21taXQgaXMgdGhlIGVtcHR5IGJ1bmRsZS5cbiAqICAgNS4gUkVBRCBLRVlTLiBVbmRlciBgd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4J2AgZXZlcnkgbm90ZWQgcmVhZCBwdXRzIGl0cyB1c2VyLWxldmVsIGtleVxuICogICAgICAoZG90dGVkIGZvciBhIG5lc3RlZCBwYXRoKSBvbiB0aGUgZnJhbWUncyBsaXN0LCBvbmNlLCBpbiBvcmRlcjsgZWFjaCBzdGFnZWQgcm93IGNhcnJpZXMgYSBjb3B5XG4gKiAgICAgIG9mIHRoZSBsaXN0IGFzIGl0IHN0YW5kcyB3aGVuIHRoZSByb3cgaXMgc3RhZ2VkLlxuICogICA2LiBDT01NSVQsIFJFTEVBU0UsIERJU0NBUkQuIGBjb21taXRgIHRha2VzIHRoZSBidWZmZXIncyBwYXlsb2FkIChub25lID0gdGhlIGVtcHR5IGNvbW1pdCksIHRoZW5cbiAqICAgICAgdGhlIG5hbWVzLCBhbmQgaGFuZHMgYm90aCB0byBgcmVjb3JkQ29tbWl0YC4gYHJlbGVhc2VgIGRyb3BzIHRoZSBidWZmZXIgYW5kIHRoZSBiYXNlOyBhIGZyYW1lXG4gKiAgICAgIHRvdWNoZWQgYWdhaW4gcmUtYW5jaG9ycyBvbiB0aGUgc3RhdGUgYXMgaXQgc3RhbmRzIHRoZW4uIFRoZSByZWFkS2V5cyBsaXN0IHN1cnZpdmVzIGEgcmVsZWFzZSxcbiAqICAgICAgYW5kIGdvZXMgd2l0aCBgZGlzY2FyZGAgKGEgZmFpbGVkIGF0dGVtcHQgbmV2ZXIgaGFwcGVuZWQpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRXZlbnRMb2cgfSBmcm9tICcuL0V2ZW50TG9nLmpzJztcbmltcG9ydCB7IG5hdGl2ZUdldCB9IGZyb20gJy4vcGF0aE9wcy5qcyc7XG5pbXBvcnQgeyB0eXBlIENvbW1pdFN0YW1wLCByZWNvcmRDb21taXQgfSBmcm9tICcuL3JlY29yZENvbW1pdC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4vU2hhcmVkTWVtb3J5LmpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdFZhbHVlc01vZGUsIFdyaXRlUHJvdmVuYW5jZU1vZGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBUaGUgdHdvIGRpYWxzIHRoYXQgc2hhcGUgYSBmcmFtZSdzIGJ5dGVzOiB0aGUgbG9nJ3MgdmFsdWUgZW5jb2RpbmcgYW5kIHRoZSBwZXItcm93IHJlYWQgcHJlZml4LlxuICogSGVsZCBieSByZWZlcmVuY2UgYW5kIHN3YXBwZWQgd2hvbGUgKGB1c2VFbmNvZGluZ2ApLCBuZXZlciBlZGl0ZWQg4oCUIHRoZSBlbmdpbmUgaGFuZHMgdGhlIHJ1bidzXG4gKiBmcm96ZW4gcG9saWN5IGl0c2VsZi4gQWJzZW50OiBgJ2Z1bGwnYCB2YWx1ZXMgYW5kIG5vIHJlYWQgcHJlZml4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZEVuY29kaW5nIHtcbiAgcmVhZG9ubHkgY29tbWl0VmFsdWVzOiBDb21taXRWYWx1ZXNNb2RlO1xuICByZWFkb25seSB3cml0ZVByb3ZlbmFuY2U6IFdyaXRlUHJvdmVuYW5jZU1vZGU7XG59XG5cbmV4cG9ydCBjbGFzcyBSZWNvcmRGcmFtZSB7XG4gIC8qKiBMaXZlIGNvbW1pdHRlZCBzdGF0ZSDigJQgdGhlIGhlYXAgZXZlcnkgZnJhbWUgb2YgdGhlIHJ1biBzaGFyZXMuICovXG4gIHJlYWRvbmx5IHN0YXRlOiBTaGFyZWRNZW1vcnk7XG4gIC8qKiBUaGUgbG9nIHRoZSBmcmFtZSdzIGNvbW1pdHMgbGFuZCBvbiwgd2hlbiB0aGUgcnVuIGtlZXBzIG9uZS4gKi9cbiAgcmVhZG9ubHkgbG9nPzogRXZlbnRMb2c7XG4gIC8qKiBUaGUgcmVkYWN0ZWQgbWlycm9yIHRoZSBmcmFtZSdzIGNvbW1pdHMgbGFuZCBvbiwgd2hlbiB0aGUgcnVuIGtlZXBzIG9uZSAoe0BsaW5rIHVzZU1pcnJvcn0pLiAqL1xuICBwcml2YXRlIF9taXJyb3I/OiBTaGFyZWRNZW1vcnk7XG4gIC8qKiBXaGVyZSB0aGUgZnJhbWUgcmVhZHMgYW5kIHdyaXRlcyAobGF3IDEpLiAqL1xuICBwcml2YXRlIF9hZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFRoZSB0d28gZGlhbHMgKGxhdyA0LCA1KTsgYWJzZW50IOKGkiB0aGUgcmVjb3JkJ3MgZGVmYXVsdHMuICovXG4gIHByaXZhdGUgZW5jb2Rpbmc/OiBSZWNvcmRFbmNvZGluZztcbiAgLyoqXG4gICAqIFRoZSBjb21taXR0ZWQgZ2VuZXJhdGlvbiBhdCB0aGUgZnJhbWUncyBGSVJTVCB0b3VjaCAobGF3IDIpIOKAlCBoZWxkIGJ5IFJFRkVSRU5DRSwgbmV2ZXIgY2xvbmVkLlxuICAgKiBTZWUge0BsaW5rIGZpcnN0VG91Y2h9IGZvciB0aGUgYWxnb3JpdGhtIGFuZCB0aGUgaW1tdXRhYmlsaXR5IGludmFyaWFudCB0aGF0IG1ha2VzIGEgYmFyZVxuICAgKiByZWZlcmVuY2Ugc2FmZS5cbiAgICovXG4gIHByaXZhdGUgYmFzZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogVGhlIHN0YWdlJ3Mgc3RhZ2VkIHdyaXRlcyDigJQgYnVpbHQgYXQgaXRzIGZpcnN0IHdyaXRlIChsYXcgNCksIHJlbGVhc2VkIGF0IGNvbW1pdC4gKi9cbiAgcHJpdmF0ZSBidWZmZXI/OiBUcmFuc2FjdGlvbkJ1ZmZlcjtcbiAgLyoqXG4gICAqIEtleXMgdHJhY2tlZC1yZWFkIHNvIGZhciwgaW4gb3JkZXIgKGxhdyA1KSDigJQgdGhlIHNvdXJjZSBvZiBlYWNoIHN0YWdlZCByb3cncyBgcmVhZEtleXNgLiBPbmx5XG4gICAqIGFsbG9jYXRlZCB1bmRlciBgJ3JlYWRzLXByZWZpeCdgOyBpbnNlcnRpb24tb3JkZXJlZCAoYSBTZXQpIGFuZCBtb25vdG9uaWMsIHdoaWNoIGlzIHdoYXQgbWFrZXNcbiAgICogXCJsYXN0IHdyaXRlJ3MgcHJlZml4ID09IHVuaW9uXCIgaG9sZCBpbiBkZWx0YSBtb2RlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkS2V5cz86IFNldDxzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKHN0YXRlOiBTaGFyZWRNZW1vcnksIGxvZz86IEV2ZW50TG9nLCBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSA9IFtdKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMubG9nID0gbG9nO1xuICAgIHRoaXMuX2FkZHJlc3MgPSBhZGRyZXNzO1xuICB9XG5cbiAgLyoqIFdoZXJlIHRoZSBmcmFtZSByZWFkcyBhbmQgd3JpdGVzIChsYXcgMSkuICovXG4gIGdldCBhZGRyZXNzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkcmVzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGFuZCB3cml0ZSBhdCBgYWRkcmVzc2AgZnJvbSBub3cgb24g4oCUIGJlZm9yZSB0aGUgZnJhbWUncyBmaXJzdCB3cml0ZSAobGF3IDEpOiB0aGUgYnVmZmVyIGtlZXBzXG4gICAqIHRoZSBhZGRyZXNzIGl0IHdhcyBidWlsdCBhdC4gVGhlIGVuZ2luZSdzIG9uZSBjYWxsZXIsIGBTdGFnZUNvbnRleHQgwrcgdXNlQWRkcmVzc09mYCwgcmVmdXNlcyBhIG1vdmVcbiAgICogb25jZSB0aGUgZnJhbWUgaGFzIHN0YWdlZC5cbiAgICovXG4gIHVzZUFkZHJlc3MoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLl9hZGRyZXNzID0gYWRkcmVzcztcbiAgfVxuXG4gIC8qKiBUaGUgdHdvIGRpYWxzIHRoZSBmcmFtZSBlbmNvZGVzIHVuZGVyIGZyb20gaXRzIG5leHQgYnVmZmVyIGFuZCBpdHMgbmV4dCByZWFkIG9uIChsYXcgNCwgNSkuICovXG4gIHVzZUVuY29kaW5nKGVuY29kaW5nOiBSZWNvcmRFbmNvZGluZyk6IHZvaWQge1xuICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgfVxuXG4gIC8qKiBUaGUgcmVkYWN0ZWQgbWlycm9yLCBpZiB0aGUgcnVuIGtlZXBzIG9uZS4gKi9cbiAgZ2V0IG1pcnJvcigpOiBTaGFyZWRNZW1vcnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9taXJyb3I7XG4gIH1cblxuICAvKiogTGFuZCBldmVyeSBjb21taXQgZnJvbSBub3cgb24gb24gYG1pcnJvcmAgdG9vLCB3aXRoIHRoZSBzY3J1YmJlZCByb3dzIHRoZSBsb2cgdGFrZXMgKGByZWNvcmRDb21taXRgKS4gKi9cbiAgdXNlTWlycm9yKG1pcnJvcjogU2hhcmVkTWVtb3J5IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fbWlycm9yID0gbWlycm9yO1xuICB9XG5cbiAgLyoqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBrZXlgIHVuZGVyIGBwYXRoYDogdGhlIGZyYW1lJ3MgYWRkcmVzcywgdGhlbiB0aGUgcGF0aCwgdGhlbiB0aGUga2V5LiAqL1xuICBhdChwYXRoOiByZWFkb25seSBzdHJpbmdbXSwga2V5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gRXZlcnkgcmVhZCBhbmQgd3JpdGUgYnVpbGRzIG9uZS4gVGhlIHJvb3QncyBpcyB0aGUgcGF0aCBhbmQgdGhlIGtleTsgdW5kZXIgYW4gYWRkcmVzcywgYW5cbiAgICAvLyBpbmRleCBsb29wIOKAlCB0aGUgZG91YmxlIHNwcmVhZCBgWy4uLmFkZHJlc3MsIC4uLnBhdGgsIGtleV1gIGNvc3RzIGEgdGhpcmQgbW9yZSBwZXIgY2FsbFxuICAgIC8vIChhcyBgdXRpbHMgwrcgcGF0aFVuZGVyYCBmb3VuZCBmb3IgdGhlIGFkZHJlc3MgYW5kIHRoZSBwYXRoKS5cbiAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5fYWRkcmVzcztcbiAgICBpZiAoYWRkcmVzcy5sZW5ndGggPT09IDApIHJldHVybiBbLi4ucGF0aCwga2V5XTtcbiAgICBjb25zdCBvdXQgPSBuZXcgQXJyYXk8c3RyaW5nPihhZGRyZXNzLmxlbmd0aCArIHBhdGgubGVuZ3RoICsgMSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRyZXNzLmxlbmd0aDsgaSsrKSBvdXRbaV0gPSBhZGRyZXNzW2ldO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykgb3V0W2FkZHJlc3MubGVuZ3RoICsgaV0gPSBwYXRoW2ldO1xuICAgIG91dFtvdXQubGVuZ3RoIC0gMV0gPSBrZXk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiDilIDilIAgVGhlIGZpcnN0LXRvdWNoIGJhc2UgKCMxMykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAqXG4gICAqIFdIQVQ6IHJldHVybnMgdGhlIGNvbW1pdHRlZCBzaGFyZWQgc3RhdGUgYXMgaXQgd2FzIGF0IHRoaXMgZnJhbWUncyBGSVJTVCB0b3VjaCAoZmlyc3QgcmVhZCBvclxuICAgKiBmaXJzdCB3cml0ZSksIGNhcHR1cmluZyB0aGUgcmVmZXJlbmNlIG9uIGZpcnN0IGNhbGwuIFNlcnZlcyB0d28gY29uc3VtZXJzOiByZWFkcyBiZWZvcmUgdGhlIGZpcnN0XG4gICAqIHdyaXRlICh7QGxpbmsgcmVhZH0pIGFuZCB0aGUgdHJhbnNhY3Rpb24gYnVmZmVyJ3MgZGlmZiBiYXNlICh7QGxpbmsgZ2V0VHJhbnNhY3Rpb25CdWZmZXJ9KS5cbiAgICpcbiAgICogV0hZIEEgQkFSRSBSRUZFUkVOQ0UgSVMgU0FGRSDigJQgdGhlIGludmFyaWFudCB0aGlzIHJlc3RzIG9uOiBjb21taXR0ZWQgc3RhdGUgaXNcbiAgICogaW1tdXRhYmxlLWFmdGVyLXN3YXAuIEV2ZXJ5IHdyaXRlIHRvIGBTaGFyZWRNZW1vcnlgIGJ1aWxkcyB0aGUgTkVYVCBnZW5lcmF0aW9uIGFuZCBzd2FwcyBpdCBpblxuICAgKiAoY29weS1vbi13cml0ZSwgOS4yOS4wOiBgYXBwbHlQYXRjaGAgdmlhIGBuZXh0R2VuZXJhdGlvbmAsIGFuZCBgc2V0VmFsdWVgL2B1cGRhdGVWYWx1ZWAgdG9vKSDigJQgaXRcbiAgICogY29waWVzIHRoZSByb290IGFuZCB0aGUgY29udGFpbmVycyBvbiBlYWNoIHdyaXR0ZW4gcGF0aCwgc2hhcmVzIHRoZSByZXN0LCBhbmQgbmV2ZXIgZWRpdHMgYVxuICAgKiBjb250YWluZXIgb2YgdGhlIGdlbmVyYXRpb24gYSBzdGFnZSBjYXB0dXJlZCBoZXJlLiBIb2xkaW5nIHRoZSByZWZlcmVuY2UgdGhlcmVmb3JlIGdpdmVzIHRoaXNcbiAgICogc3RhZ2UgYSBzdGFibGUgc25hcHNob3QgYXQgemVybyBjb3N0IOKAlCBubyBjbG9uZSwgd2hpY2ggaXMgdGhlIGVudGlyZSBwb2ludCBvZiAjMTMuIFRoZSB0cmFuc2FjdGlvblxuICAgKiBidWZmZXIncyBuZXQtY2hhbmdlIGRpZmYgYmFzZSByZXN0cyBvbiB0aGUgc2FtZSBndWFyYW50ZWU6IGl0IElTIHRoaXMgdmlldy5cbiAgICpcbiAgICogV0hZIEZJUlNUIFRPVUNILCBub3QgZmlyc3Qgd3JpdGU6IHRoZSBwcmUtIzEzIGVhZ2VyIGVuZ2luZSBjbG9uZWQgdGhlIHN0YXRlIGludG8gdGhlIGJ1ZmZlciBhdFxuICAgKiB0aGUgc3RhZ2UncyBmaXJzdCBBQ0NFU1MsIGFuY2hvcmluZyBib3RoIGl0cyBzbmFwc2hvdCByZWFkcyBhbmQgaXRzIGNvbW1pdCBiYXNlbGluZSAodGhlXG4gICAqIG5ldC1jaGFuZ2UgZGlmZiBiYXNlKSB0aGVyZS4gIzEzJ3MgZmlyc3QgY3V0IGFuY2hvcmVkIHRoZSBsYXp5IGJ1ZmZlciBhdCBmaXJzdCBXUklURSDigJQgb2JzZXJ2YWJseVxuICAgKiBkaWZmZXJlbnQgd2hlbiBzb21ldGhpbmcgZWxzZSBjb21taXRzIGluIHRoZSBnYXAgYmV0d2VlbiB0aGlzIHN0YWdlJ3MgZmlyc3QgcmVhZCBhbmQgaXRzIGZpcnN0XG4gICAqIHdyaXRlLiBUaGF0IGdhcCBpcyBSRUFDSEFCTEU6IGZvcmsgc2libGluZ3MgYXJlIG5hbWVzcGFjZS1pc29sYXRlZCBmb3IgcnVuLXNjb3BlZCBrZXlzIChlYWNoIGNoaWxkXG4gICAqIHdyaXRlcyB1bmRlciBgcnVucy88Y2hpbGRJZD4vYCksIGJ1dCBST09ULWxldmVsIGtleXMgYXJlIHNoYXJlZCDigJQgd3JpdHRlbiB2aWEgYHNldEdsb2JhbGAgZnJvbVxuICAgKiBjb25zdW1lciBzY29wZSBjb2RlIGFuZCwgY3JpdGljYWxseSwgYnkgYFN1YmZsb3dJbnB1dE1hcHBlcmAncyBvdXRwdXQgbWFwcGluZ1xuICAgKiAoYHBhcmVudENvbnRleHQuc2V0R2xvYmFsYCksIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBydW5zIHdoZW4gYSBzdWJmbG93IGlzIGEgZm9yayBicmFuY2guIEFcbiAgICogc2libGluZydzIHJvb3Qta2V5IGNvbW1pdCBsYW5kaW5nIGluIHRoZSBnYXAgd291bGQgc2hpZnQgdGhpcyBzdGFnZSdzIGRpZmYgYmFzZSwgbWFraW5nIGl0c1xuICAgKiBDb21taXRCdW5kbGUgcmVjb3JkIGEgcGhhbnRvbSBjaGFuZ2UgKG9yIHN3YWxsb3cgYSByZWFsIG9uZSkgcmVsYXRpdmUgdG8gdGhlIGVhZ2VyIGVuZ2luZS5cbiAgICogQW5jaG9yaW5nIHRoZSB2aWV3IGF0IGZpcnN0IHRvdWNoIHJlc3RvcmVzIHRoZSBFWEFDVCBlYWdlciBzZW1hbnRpY3Mg4oCUIHNlcXVlbnRpYWwgQU5EIHBhcmFsbGVsIOKAlFxuICAgKiBhdCB6ZXJvIGNsb25lIGNvc3QuXG4gICAqXG4gICAqIFJlYWQgdmlzaWJpbGl0eSBpcyB0d28tdGllciwgbWF0Y2hpbmcgZWFnZXIgYnl0ZS1mb3ItYnl0ZToga2V5cyBwcmVzZW50IGluIHRoZSB2aWV3IGF0IGZpcnN0XG4gICAqIHRvdWNoIHJlYWQgcmVwZWF0YWJseSBmcm9tIGl0OyBrZXlzIEFCU0VOVCBmcm9tIGl0IGZhbGwgYmFjayB0byBMSVZFIHN0YXRlICh0aGUgZWFnZXIgZW5naW5lJ3NcbiAgICogZXhhY3QgZmFsbGJhY2sg4oCUIGEgbWlkLWZsaWdodCBzaWJsaW5nIHJvb3Qta2V5IHdyaXRlIHdhcyBhbHdheXMgdmlzaWJsZSB0byByZWFkcywgYW5kIHN0YXlzXG4gICAqIHZpc2libGU7IG9ubHkgdGhlIERJRkYgQkFTRSBpcyBwaW5uZWQpLlxuICAgKi9cbiAgcHJpdmF0ZSBmaXJzdFRvdWNoKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBpZiAoIXRoaXMuYmFzZSkge1xuICAgICAgdGhpcy5iYXNlID0gdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiBidWZmZXIsIGNyZWF0ZWQgbGF6aWx5IG9uIHRoZSBmcmFtZSdzIEZJUlNUIFdSSVRFICgjMTMpLlxuICAgKlxuICAgKiBSZWFkcyBORVZFUiBjb25zdHJ1Y3QgaXQ6IHJlYWQteW91ci13cml0ZXMgb25seSBtYXR0ZXJzIG9uY2UgYSBzdGFnZWQgd3JpdGUgZXhpc3RzLCBzbyBiZWZvcmUgdGhhdFxuICAgKiB7QGxpbmsgcmVhZH0gc2VydmVzIGZyb20gdGhlIGZpcnN0LXRvdWNoIGJhc2UgYW5kIHtAbGluayBjb21taXR9IHJlY29yZHMgYW4gZW1wdHkgYnVuZGxlIOKAlCBhbGwgd2l0aFxuICAgKiBaRVJPIGBzdHJ1Y3R1cmVkQ2xvbmVgcyBvZiB0aGUgc2hhcmVkIHN0YXRlLlxuICAgKlxuICAgKiBUaGUgYnVmZmVyJ3MgYmFzZSBpcyB0aGUgRklSU1QtVE9VQ0ggdmlldywgTk9UIHRoZSBsaXZlIHN0YXRlIGF0IHdyaXRlIHRpbWU6IHVuZGVyIHBhcmFsbGVsIGZvcmtzXG4gICAqIGEgc2libGluZyBtYXkgaGF2ZSBjb21taXR0ZWQgYmV0d2VlbiB0aGlzIGZyYW1lJ3MgZmlyc3QgcmVhZCBhbmQgdGhpcyB3cml0ZSwgYW5kIHRoZSBuZXQtY2hhbmdlXG4gICAqIGRpZmYgYmFzZSBtdXN0IHN0YXkgYW5jaG9yZWQgYXQgZmlyc3QgdG91Y2ggdG8gbWF0Y2ggdGhlIGVhZ2VyIGVuZ2luZSDigJQgc2VlIHtAbGluayBmaXJzdFRvdWNofS5cbiAgICovXG4gIGdldFRyYW5zYWN0aW9uQnVmZmVyKCk6IFRyYW5zYWN0aW9uQnVmZmVyIHtcbiAgICBpZiAoIXRoaXMuYnVmZmVyKSB7XG4gICAgICAvLyBQZXItd3JpdGUgcHJvdmVuYW5jZSAoI1AxKTogaGFuZCB0aGUgYnVmZmVyIGEgbGl2ZSB2aWV3IG9mIHRoaXMgZnJhbWUncyByZWFkIHByZWZpeCDigJRcbiAgICAgIC8vIGV2YWx1YXRlZCBBVCBFQUNIIFdSSVRFLCBzbyBlYWNoIHN0YWdlZCBvcCBjYXB0dXJlcyBleGFjdGx5IHRoZSByZWFkcyB0aGF0IHByZWNlZGVkIGl0LlxuICAgICAgY29uc3QgcmVhZEtleXNQcm92aWRlciA9XG4gICAgICAgIHRoaXMuZW5jb2Rpbmc/LndyaXRlUHJvdmVuYW5jZSA9PT0gJ3JlYWRzLXByZWZpeCcgPyAoKSA9PiBbLi4uKHRoaXMucmVhZEtleXMgPz8gW10pXSA6IHVuZGVmaW5lZDtcbiAgICAgIC8vIFRoZSBmcmFtZSdzIGFkZHJlc3MgKDkuMzAuMDogdGhlIGFkbWl0dGVkIHJlY29yZCByZWFkcyB0aGUgY29udGFpbmVycyB0aGVyZSBhcyB3aGVyZSB0aGVcbiAgICAgIC8vIHN0YWdlIHdyaXRlcywgbmV2ZXIgYXMgYSB2YWx1ZSBpdCByZWFkKS5cbiAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFRyYW5zYWN0aW9uQnVmZmVyKFxuICAgICAgICB0aGlzLmZpcnN0VG91Y2goKSxcbiAgICAgICAgdGhpcy5lbmNvZGluZz8uY29tbWl0VmFsdWVzLFxuICAgICAgICByZWFkS2V5c1Byb3ZpZGVyLFxuICAgICAgICB0aGlzLl9hZGRyZXNzLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyO1xuICB9XG5cbiAgLyoqIEhhcyB0aGUgZnJhbWUgc3RhZ2VkIGEgd3JpdGUgc2luY2UgaXRzIGxhc3QgcmVsZWFzZSDigJQgZG9lcyBpdHMgYnVmZmVyIGV4aXN0PyAqL1xuICBnZXQgaGFzU3RhZ2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlciAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmcmFtZSdzIHJlYWQsIG1pcnJvcmluZyB0aGUgZWFnZXIgZW5naW5lJ3MgcmVhZCBvcmRlciBieXRlLWZvci1ieXRlIChsYXcgMyk6XG4gICAqXG4gICAqICAgIDEuIHN0YWdlZCB3cml0ZXMgKyBmaXJzdC10b3VjaCBzbmFwc2hvdCDigJQgYGJ1ZmZlci5nZXRgIG92ZXIgaXRzIHdvcmtpbmdDb3B5IHdoZW4gdGhlIGJ1ZmZlclxuICAgKiAgICAgICBleGlzdHMsIGVsc2UgYG5hdGl2ZUdldGAgb3ZlciB0aGUgemVyby1jbG9uZSBmaXJzdC10b3VjaCBiYXNlICh0aGUgYnVmZmVyJ3MgYmFzZSBJUyB0aGF0XG4gICAqICAgICAgIHZpZXcsIHNvIHRoZSB0d28gdGllcnMgYWdyZWUgb24gY29udGVudCk7XG4gICAqICAgIDIuIExJVkUgc3RhdGUgdmlhIGBTaGFyZWRNZW1vcnkgwrcgZ2V0VmFsdWVgIGZvciBrZXlzIGFic2VudCBmcm9tIHRoZSBzbmFwc2hvdCDigJQgaW5jbHVkaW5nIGl0c1xuICAgKiAgICAgICBhZGRyZXNz4oaScm9vdCBmYWxsYmFjay4gVGhlIGVhZ2VyIGVuZ2luZSBoYWQgdGhpcyBleGFjdCBsaXZlIGZhbGxiYWNrIGZvciBzbmFwc2hvdC1taXNzaW5nXG4gICAqICAgICAgIGtleXM7IGJ5dGUtaWRlbnRpdHkgb3ZlciBwdXJpdHkuIEFmdGVyIHRoZSBmcmFtZSdzIGZpcnN0IHdyaXRlIHN1Y2ggYSB2YWx1ZSBjYW4gYmUgdGhlIHZlcnlcbiAgICogICAgICAgY29udGFpbmVyIHRoZSBidWZmZXIncyBkaWZmIGJhc2UgaG9sZHMgYXQgdGhlIHBhdGggKHRoZSBzdGFnZSBkZWxldGVkIG9yIHVuc2V0IGl0LCBvclxuICAgKiAgICAgICByZXBsYWNlZCBhIGNvbnRhaW5lciBhYm92ZSBpdCksIHNvIHRoZSBiYXNlIGlzIGRldGFjaGVkIHRoZXJlIGZpcnN0XG4gICAqICAgICAgIChgVHJhbnNhY3Rpb25CdWZmZXIgwrcgZGV0YWNoQmFzZWApOiBhbiBpbi1wbGFjZSBlZGl0IG9mIHRoZSB2YWx1ZSAob3V0IG9mIGNvbnRyYWN0KSB3cml0dGVuXG4gICAqICAgICAgIGJhY2sgaXMgcmVjb3JkZWQsIGFzIG9uIDkuMjguMCwgd2hvc2UgYmFzZSB3YXMgYSBjbG9uZSB0YWtlbiBhdCB0aGUgZmlyc3Qgd3JpdGUuXG4gICAqXG4gICAqIFJlYWRzIG5ldmVyIGNvbnN0cnVjdCB0aGUgYnVmZmVyICgjMTMpOiBhIGZyYW1lIHRoYXQgbmV2ZXIgd3JpdGVzIHBlcmZvcm1zIHplcm8gY2xvbmVzIG9mIHRoZVxuICAgKiBzaGFyZWQgc3RhdGUuXG4gICAqL1xuICByZWFkKHBhdGg6IHN0cmluZ1tdLCBrZXk/OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBjb25zdCBhdCA9IHRoaXMuYXQocGF0aCwga2V5IGFzIHN0cmluZyk7XG4gICAgY29uc3QgZnJvbVNuYXBzaG90ID0gdGhpcy5idWZmZXIgPyB0aGlzLmJ1ZmZlci5nZXQoYXQpIDogbmF0aXZlR2V0KHRoaXMuZmlyc3RUb3VjaCgpLCBhdCk7XG4gICAgaWYgKHR5cGVvZiBmcm9tU25hcHNob3QgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZnJvbVNuYXBzaG90O1xuICAgIGNvbnN0IGxpdmUgPSB0aGlzLnN0YXRlLmdldFZhbHVlKHRoaXMuX2FkZHJlc3MsIHBhdGgsIGtleSk7XG4gICAgLy8gVGllciAyIGFmdGVyIHRoZSBmaXJzdCB3cml0ZToga2VlcCB0aGUgZGlmZiBiYXNlIGV4YWN0IChzZWUgYWJvdmUpLlxuICAgIGlmICh0aGlzLmJ1ZmZlciAmJiBsaXZlICE9PSBudWxsICYmIHR5cGVvZiBsaXZlID09PSAnb2JqZWN0JykgdGhpcy5idWZmZXIuZGV0YWNoQmFzZShhdCk7XG4gICAgcmV0dXJuIGxpdmU7XG4gIH1cblxuICAvKiogUHV0IGEgdHJhY2tlZCByZWFkJ3MgdXNlci1sZXZlbCBrZXkgb24gdGhlIHJlYWRLZXlzIGxpc3QgKGxhdyA1KSDigJQgYSBuby1vcCB1bmxlc3MgdGhlIGZyYW1lIGtlZXBzIG9uZS4gKi9cbiAgbm90ZVJlYWQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10sIGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZW5jb2Rpbmc/LndyaXRlUHJvdmVuYW5jZSA9PT0gJ3JlYWRzLXByZWZpeCcpIHtcbiAgICAgICh0aGlzLnJlYWRLZXlzID8/PSBuZXcgU2V0KCkpLmFkZChwYXRoLmxlbmd0aCA+IDAgPyBbLi4ucGF0aCwga2V5XS5qb2luKCcuJykgOiBrZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXZlIGNvbW1pdHRlZCBzdGF0ZSBhdCBga2V5YDogYXQgdGhlIGZyYW1lJ3MgYWRkcmVzcywgZWxzZSBhdCB0aGUgcm9vdCDigJQgbmV2ZXIgdGhlIHN0YWdlJ3Mgb3duXG4gICAqIHZpZXcuIFR5cGVkIGFzIGBTaGFyZWRNZW1vcnkgwrcgZ2V0VmFsdWVgIHR5cGVzIGl0LCB3aGljaCBgU3RhZ2VDb250ZXh0IMK3IGdldFJvb3RgIGhhbmRzIG9uLlxuICAgKi9cbiAgcmVhZExpdmUoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5nZXRWYWx1ZSh0aGlzLl9hZGRyZXNzLCBbXSwga2V5KTtcbiAgfVxuXG4gIC8qKiBMaXZlIGNvbW1pdHRlZCBzdGF0ZSBhdCBga2V5YCBhdCB0aGUgcm9vdCDigJQgdHlwZWQgYXMgYFNoYXJlZE1lbW9yeSDCtyBnZXRWYWx1ZWAgKGBTdGFnZUNvbnRleHQgwrcgZ2V0R2xvYmFsYCkuICovXG4gIHJlYWRHbG9iYWwoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5nZXRWYWx1ZShbXSwgW10sIGtleSk7XG4gIH1cblxuICAvKiogRGlkIGEgc3RhZ2VkIG9wIHRvdWNoIGBwYXRoYCDigJQgb24gaXQsIGFib3ZlIGl0IG9yIGJlbG93IGl0PyAoQSByZXBvcnQncyBxdWVzdGlvbjsgbmV2ZXIgdGhlIGhvdCBwYXRoLikgKi9cbiAgd2FzU3RhZ2VkKHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5idWZmZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmJ1ZmZlci53YXNTdGFnZWQocGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHZhbHVlIGF0IGBwYXRoYCBpbiB3aGF0IHRoZSBzdGFnZSBoYXMgc2VlbiDigJQgaXRzIHdvcmtpbmcgY29weSBvbmNlIGl0IHdyb3RlLCBlbHNlIGl0c1xuICAgKiBmaXJzdC10b3VjaCBiYXNlIOKAlCBXSVRIT1VUIHRha2luZyBhIHByaXZhdGUgY29weTogZm9yIGEgcmVwb3J0IHRoYXQgb25seSBjb21wYXJlcy5cbiAgICovXG4gIHBlZWsocGF0aDogKHN0cmluZyB8IG51bWJlcilbXSk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlciA/IHRoaXMuYnVmZmVyLnBlZWsocGF0aCkgOiBuYXRpdmVHZXQodGhpcy5maXJzdFRvdWNoKCksIHBhdGgpO1xuICB9XG5cbiAgLyoqIFRoZSB2YWx1ZSBhdCBgcGF0aGAgaW4gdGhlIGZpcnN0LXRvdWNoIGJhc2Ug4oCUIGNvbW1pdHRlZCBzdGF0ZSBhcyB0aGUgZnJhbWUgZmlyc3QgdG91Y2hlZCBpdC4gKi9cbiAgYmFzZUF0KHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10pOiB1bmtub3duIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0KHRoaXMuZmlyc3RUb3VjaCgpLCBwYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgd2hhdCB0aGUgZnJhbWUgc3RhZ2VkIChsYXcgNik6IHRoZSBidWZmZXIncyBwYXlsb2FkIGZpcnN0IOKAlCBub25lLCB0aGUgZW1wdHkgY29tbWl0LCB3aGVuXG4gICAqIGl0IHN0YWdlZCBub3RoaW5nICgjMTM6IHplcm8gY2xvbmVzKSDigJQgdGhlbiB0aGUgbmFtZXMgKGBzdGFtcE9mKClgKSwgcmVhZCBvbmNlIHRoZSBwYXlsb2FkIGlzXG4gICAqIGJ1aWx0LCBhbmQgYm90aCB0byBgcmVjb3JkQ29tbWl0YC4gVXNlciBjb2RlIGNhbiBydW4gd2hpbGUgdGhlIHBheWxvYWQgaXMgYnVpbHQgKGEgZ2V0dGVyIG9uIGFcbiAgICogc3RhZ2VkIHZhbHVlLCB3aGljaCB0aGUgbmV0LWNoYW5nZSBjb21wYXJlIGFuZCB0aGUgY2xvbmUgaW52b2tlKTsgd2hhdCBpdCBhZGRzIHRvIHRoZSBuYW1lcyDigJRcbiAgICogYW4gdW50cmFja2VkIHJlYWQsIHNheSDigJQgaXMgb24gdGhlIGJ1bmRsZS5cbiAgICovXG4gIGNvbW1pdChzdGFtcE9mOiAoKSA9PiBDb21taXRTdGFtcCk6IHZvaWQge1xuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmJ1ZmZlcj8uY29tbWl0KCk7XG4gICAgcmVjb3JkQ29tbWl0KHBheWxvYWQsIHN0YW1wT2YoKSwgeyBzdGF0ZTogdGhpcy5zdGF0ZSwgbWlycm9yOiB0aGlzLl9taXJyb3IsIGxvZzogdGhpcy5sb2cgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW5kIHRoZSBmcmFtZSdzIGhvbGQgb24gc3RhdGUgKCMxM2IsIGxhdyA2KTogZHJvcCB0aGUgYnVmZmVyIChpdHMgd29ya2luZyBjb3B5IGFuZCB3aGF0ZXZlciBwcml2YXRlXG4gICAqIGNvcGllcyBpdHMgcmVhZHMgdG9vaykgYW5kIHRoZSBmaXJzdC10b3VjaCBiYXNlIChhIHJlZmVyZW5jZSB0aGF0IHBpbnMgb25lIGNvbW1pdHRlZC1zdGF0ZVxuICAgKiBHRU5FUkFUSU9OKS4gQm90aCByZS1jcmVhdGUgbGF6aWx5OiBhIGxhdGVyIHJlYWQgcmUtYW5jaG9ycyBvbiB0aGUgQ1VSUkVOVCBjb21taXR0ZWQgc3RhdGUsIGFuZCBhXG4gICAqIGxhdGVyIHdyaXRlIGJ1aWxkcyBhIGZyZXNoIGJ1ZmZlciBvbiBpdCDigJQgc28gYSBzZWNvbmQgY29tbWl0IGRpZmZzIGFnYWluc3QgdGhlIHN0YXRlIGFmdGVyIHRoZVxuICAgKiBmaXJzdC4gV2l0aG91dCB0aGUgcmVsZWFzZSwgdGhlIGV4ZWN1dGlvbiB0cmVlIOKAlCB3aGljaCByZXRhaW5zIGV2ZXJ5IGZyYW1lIGZvciB0aGUgbGlmZXRpbWUgb2ZcbiAgICogdGhlIHJ1biDigJQgcmV0YWlucyBvbmUgc3RhdGUgZ2VuZXJhdGlvbiBwZXIgZXhlY3V0ZWQgc3RhZ2UgKG1lYXN1cmVkIE8oTsKyKSBiZWZvcmUgY29weS1vbi13cml0ZTtcbiAgICogYSA1MDAtaXRlcmF0aW9uIGFnZW50IE9PTWVkIGEgZGVmYXVsdCBOb2RlIGhlYXAsIGJhY2tsb2cgIzE4KS5cbiAgICovXG4gIHJlbGVhc2UoKTogdm9pZCB7XG4gICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5iYXNlID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93IGF3YXkgZXZlcnl0aGluZyB0aGUgZnJhbWUgc3RhZ2VkIGFuZCByZWFkIChsYXcgNik6IHRoZSBidWZmZXIsIHRoZSBmaXJzdC10b3VjaCBiYXNlICh0aGUgbmV4dFxuICAgKiBhdHRlbXB0IHJlLWFuY2hvcnMgb24gY29tbWl0dGVkIHN0YXRlIGFzIGl0IHN0YW5kcyBOT1cpIGFuZCB0aGUgcmVhZEtleXMgbGlzdCDigJQgYSBkaXNjYXJkZWRcbiAgICogYXR0ZW1wdCdzIHJlYWRzIG11c3QgbmV2ZXIgcmVhY2ggdGhlIG5leHQgYXR0ZW1wdCdzIGBUcmFjZUVudHJ5LnJlYWRLZXlzYCwgb3IgYSBiYWNrd2FyZCBzbGljZVxuICAgKiB3b3VsZCBmb2xsb3cgYW4gZWRnZSB0aGF0IG5vIGNvbW1pdHRlZCB3cml0ZSBldmVyIGhhZC4gTm90aGluZyBpcyByZWNvcmRlZC5cbiAgICovXG4gIGRpc2NhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gICAgdGhpcy5yZWFkS2V5cyA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb3JkRnJhbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS9SZWNvcmRGcmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQ0c7OztBQUlILDZDQUF5QztBQUN6Qyx1REFBbUU7QUFFbkUsaUVBQTJEO0FBOEIzRCxNQUFhLFdBQVc7SUFDdEIscUVBQXFFO0lBQzVELEtBQUssQ0FBZTtJQUM3QixtRUFBbUU7SUFDMUQsR0FBRyxDQUFZO0lBQ3hCLG1HQUFtRztJQUMzRixPQUFPLENBQWdCO0lBQy9CLGdEQUFnRDtJQUN4QyxRQUFRLENBQW9CO0lBQ3BDLGdFQUFnRTtJQUN4RCxRQUFRLENBQWtCO0lBQ2xDOzs7O09BSUc7SUFDSyxJQUFJLENBQTJCO0lBQ3ZDLHdGQUF3RjtJQUNoRixNQUFNLENBQXFCO0lBQ25DOzs7O09BSUc7SUFDSyxRQUFRLENBQWU7SUFFL0IsWUFBWSxLQUFtQixFQUFFLEdBQWMsRUFBRSxVQUE2QixFQUFFO1FBQzlFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsT0FBMEI7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELGtHQUFrRztJQUNsRyxXQUFXLENBQUMsUUFBd0I7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVELGlEQUFpRDtJQUNqRCxJQUFJLE1BQU07UUFDUixPQUFP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QUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsT0FBMEI7UUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN0QyxJQUFBLDhCQUFZLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILE9BQU87UUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBL1FELGtDQStRQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVjb3JkRnJhbWUg4oCUIHRoZSByZWNvcmQgaGFsZiBvZiBvbmUgc3RhZ2UncyBmcmFtZSAoQzMsIEwzKS5cbiAqXG4gKiBXaGF0IGEgc3RhZ2UncyBmcmFtZSBuZWVkcyB0byBSRUFEIGFuZCBXUklURSB0aGUgcmVjb3JkLCBhbmQgbm90aGluZyBhYm91dCB0aGUgc3RhZ2UgaW5zaWRlIGEgcnVuOlxuICogd2hlcmUgaXQgd3JpdGVzIChpdHMgYWRkcmVzcyksIHdoYXQgaXQgcmVhZCBmaXJzdCAodGhlIGZpcnN0LXRvdWNoIGJhc2UpLCB3aGF0IGl0IHN0YWdlZCAodGhlIGxhenlcbiAqIHRyYW5zYWN0aW9uIGJ1ZmZlcikgYW5kIHdoaWNoIG9mIGl0IHRoZSBsb2cgbXVzdCBub3Qgc2hvdyAodGhlIHNjcnViIG9mIGVhY2ggd3JpdGUpLCB3aGljaCBrZXlzIGl0XG4gKiByZWFkICh0aGUgcmVhZEtleXMgbGlzdCksIGFuZCB3aGVyZSBhIGNvbW1pdCBsYW5kcyAobGl2ZSBzdGF0ZSwgdGhlIHJlZGFjdGVkIG1pcnJvciwgdGhlIGxvZyDigJRcbiAqIHRocm91Z2ggYHJlY29yZENvbW1pdGApLiBUaGUgZW5naW5lJ3MgZnJhbWUgKGBTdGFnZUNvbnRleHRgLCBMNCkgY29tcG9zZXMgb25lIGFuZCBrZWVwcyB0aGUgcmVzdDpcbiAqIHJldGVudGlvbiwgZGlhZ25vc3RpY3MsIHRoZSBkZXYtbW9kZSB3YXJuaW5ncywgdGhlIGNvbW1pdCBvYnNlcnZlciBhbmQgdGhlIHJlZGFjdGlvbiBERUNJU0lPTiDigJRcbiAqIHdoaWNoIHZhbHVlIGlzIHNlY3JldCAoYHJlZGFjdGlvbi50cyDCtyBkZWNpZGVXcml0ZWApOyB0aGUgZnJhbWUgd3JpdGVzIHRoZSBieXRlcyBpdCBpcyBoYW5kZWQgKEM0KS5cbiAqXG4gKiBUSEUgTEFXOlxuICogICAxLiBBRERSRVNTLiBUaGUgZnJhbWUgcmVhZHMgYW5kIHdyaXRlcyBhdCBpdHMgYWRkcmVzcywgYSBwYXRoIHByZWZpeCB0aGUgZW5naW5lIGNvbXB1dGVkIGFuZCBoYW5kc1xuICogICAgICBvdmVyIGFzIGRhdGEgKEMyOiBgWydydW5zJywgPGlkPl1gIG9yIGBbXWAsIHRoZSByb290KS4gSXQgbW92ZXMgb25seSBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlOlxuICogICAgICB0aGUgYnVmZmVyIGtlZXBzIHRoZSBhZGRyZXNzIGl0IHdhcyBidWlsdCBhdCAodGhlIGVuZ2luZSByZWZ1c2VzIGEgbGF0ZXIgbW92ZSkuXG4gKiAgIDIuIEZJUlNUIFRPVUNILiBUaGUgY29tbWl0dGVkIGdlbmVyYXRpb24gdGhlIGZyYW1lIGZpcnN0IHRvdWNoZWQg4oCUIGl0cyBmaXJzdCByZWFkIE9SIGZpcnN0IHdyaXRlIOKAlFxuICogICAgICBpcyBoZWxkIGJ5IHJlZmVyZW5jZSwgbmV2ZXIgY2xvbmVkOiB0aGUgcmVhZCB2aWV3IGJlZm9yZSB0aGUgZmlyc3Qgd3JpdGUgYW5kIHRoZSBidWZmZXInc1xuICogICAgICBuZXQtY2hhbmdlIGRpZmYgYmFzZSBhZnRlciBpdC5cbiAqICAgMy4gVFdPIFRJRVJTLiBBIHJlYWQgaXMgc2VydmVkIGZyb20gdGhlIHN0YWdlJ3Mgb3duIHZpZXcgKHRoZSBidWZmZXIncyB3b3JraW5nIGNvcHkgb25jZSB0aGUgc3RhZ2VcbiAqICAgICAgd3JvdGUsIGVsc2UgdGhlIGZpcnN0LXRvdWNoIGJhc2UpOyBhIGtleSBhYnNlbnQgdGhlcmUgaXMgc2VydmVkIGZyb20gTElWRSBzdGF0ZSAoYXQgdGhlXG4gKiAgICAgIGFkZHJlc3MsIHRoZW4gdGhlIHJvb3QpLiBBZnRlciB0aGUgZmlyc3Qgd3JpdGUgdGhlIGJ1ZmZlcidzIGRpZmYgYmFzZSBpcyBmaXJzdCBnaXZlbiBhIHByaXZhdGVcbiAqICAgICAgY29weSBhdCB0aGF0IHBhdGggKGBUcmFuc2FjdGlvbkJ1ZmZlciDCtyBkZXRhY2hCYXNlYCkuXG4gKiAgIDQuIExBWlkgQlVGRkVSLiBUaGUgYnVmZmVyIGlzIGJ1aWx0IGF0IHRoZSBmaXJzdCB3cml0ZSDigJQgb24gdGhlIGZpcnN0LXRvdWNoIGJhc2UsIGF0IHRoZSBhZGRyZXNzLFxuICogICAgICB1bmRlciB0aGUgZW5jb2RpbmcuIEEgZnJhbWUgdGhhdCBuZXZlciB3cml0ZXMgYnVpbGRzIG5vbmUsIGFuZCBpdHMgY29tbWl0IGlzIHRoZSBlbXB0eSBidW5kbGUuXG4gKiAgIDUuIFJFQUQgS0VZUy4gVW5kZXIgYHdyaXRlUHJvdmVuYW5jZTogJ3JlYWRzLXByZWZpeCdgIGV2ZXJ5IG5vdGVkIHJlYWQgcHV0cyBpdHMgdXNlci1sZXZlbCBrZXlcbiAqICAgICAgKGRvdHRlZCBmb3IgYSBuZXN0ZWQgcGF0aCkgb24gdGhlIGZyYW1lJ3MgbGlzdCwgb25jZSwgaW4gb3JkZXI7IGVhY2ggc3RhZ2VkIHJvdyBjYXJyaWVzIGEgY29weVxuICogICAgICBvZiB0aGUgbGlzdCBhcyBpdCBzdGFuZHMgd2hlbiB0aGUgcm93IGlzIHN0YWdlZC5cbiAqICAgNi4gQ09NTUlULCBSRUxFQVNFLCBESVNDQVJELiBgY29tbWl0YCB0YWtlcyB0aGUgYnVmZmVyJ3MgcGF5bG9hZCAobm9uZSA9IHRoZSBlbXB0eSBjb21taXQpLCB0aGVuXG4gKiAgICAgIHRoZSBuYW1lcywgYW5kIGhhbmRzIGJvdGggdG8gYHJlY29yZENvbW1pdGAuIGByZWxlYXNlYCBkcm9wcyB0aGUgYnVmZmVyIGFuZCB0aGUgYmFzZTsgYSBmcmFtZVxuICogICAgICB0b3VjaGVkIGFnYWluIHJlLWFuY2hvcnMgb24gdGhlIHN0YXRlIGFzIGl0IHN0YW5kcyB0aGVuLiBUaGUgcmVhZEtleXMgbGlzdCBzdXJ2aXZlcyBhIHJlbGVhc2UsXG4gKiAgICAgIGFuZCBnb2VzIHdpdGggYGRpc2NhcmRgIChhIGZhaWxlZCBhdHRlbXB0IG5ldmVyIGhhcHBlbmVkKS5cbiAqICAgNy4gV1JJVEUuIGB3cml0ZShwYXRoLCB2YWx1ZSwgdmVyYiwgc2NydWI/KWAgaXMgdGhlIG9uZSB3YXkgdG8gc3RhZ2U6IGBzZXRgLCBgbWVyZ2VgIG9yIGBkZWxldGVgXG4gKiAgICAgIGF0IGFuIGFic29sdXRlIHBhdGggKHRoZSBhZGRyZXNzIGFscmVhZHkgam9pbmVkIOKAlCBgYXRgKSwgd2l0aCB0aGUgYnl0ZXMgb2YgYSByZWRhY3Rpb25cbiAqICAgICAgdmVyZGljdC4gYHdob2xlYCDihpIgdGhlIGxvZyBhbmQgdGhlIG1pcnJvciBjYXJyeSBgTE9HX1BMQUNFSE9MREVSYCBhdCB0aGUgcGF0aDsgYGZpZWxkc2Ag4oaSIGF0XG4gKiAgICAgIGVhY2ggZmllbGQgaW5zaWRlIHRoZSB2YWx1ZSAoYSBsaXRlcmFsIGtleSBhbmQsIHdoZW4gZG90dGVkLCB0aGUgbmVzdGVkIHBhdGgpIOKAlCB3aGVyZXZlciBpdFxuICogICAgICBob2xkcyBhIHZhbHVlIGF0IGNvbW1pdCAoYHNjcnViLnRzYCkuIE5vIHNjcnViIOKGkiB0aGUgdmFsdWUgYXMgaXQgaXMuIFRoZSBmcmFtZSBuZXZlciBkZWNpZGVzXG4gKiAgICAgIGEgc2NydWIsIGFuZCBub3RoaW5nIG91dHNpZGUgaXQgcmVhY2hlcyBpdHMgYnVmZmVyLlxuICovXG5cbmltcG9ydCB0eXBlIHsgT3BWZXJiIH0gZnJvbSAnLi9kZWx0YUVuY29kaW5nLmpzJztcbmltcG9ydCB0eXBlIHsgRXZlbnRMb2cgfSBmcm9tICcuL0V2ZW50TG9nLmpzJztcbmltcG9ydCB7IG5hdGl2ZUdldCB9IGZyb20gJy4vcGF0aE9wcy5qcyc7XG5pbXBvcnQgeyB0eXBlIENvbW1pdFN0YW1wLCByZWNvcmRDb21taXQgfSBmcm9tICcuL3JlY29yZENvbW1pdC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4vU2hhcmVkTWVtb3J5LmpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdFZhbHVlc01vZGUsIFdyaXRlUHJvdmVuYW5jZU1vZGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBUaGUgdHdvIGRpYWxzIHRoYXQgc2hhcGUgYSBmcmFtZSdzIGJ5dGVzOiB0aGUgbG9nJ3MgdmFsdWUgZW5jb2RpbmcgYW5kIHRoZSBwZXItcm93IHJlYWQgcHJlZml4LlxuICogSGVsZCBieSByZWZlcmVuY2UgYW5kIHN3YXBwZWQgd2hvbGUgKGB1c2VFbmNvZGluZ2ApLCBuZXZlciBlZGl0ZWQg4oCUIHRoZSBlbmdpbmUgaGFuZHMgdGhlIHJ1bidzXG4gKiBmcm96ZW4gcG9saWN5IGl0c2VsZi4gQWJzZW50OiBgJ2Z1bGwnYCB2YWx1ZXMgYW5kIG5vIHJlYWQgcHJlZml4LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZEVuY29kaW5nIHtcbiAgcmVhZG9ubHkgY29tbWl0VmFsdWVzOiBDb21taXRWYWx1ZXNNb2RlO1xuICByZWFkb25seSB3cml0ZVByb3ZlbmFuY2U6IFdyaXRlUHJvdmVuYW5jZU1vZGU7XG59XG5cbi8qKlxuICogV2hhdCBhIHN0YWdlIGNhbiBzdGFnZSAobGF3IDcpIOKAlCB0aGUgdHJhbnNhY3Rpb24gYnVmZmVyJ3Mgb3AgdmVyYnMgKGBkZWx0YUVuY29kaW5nLnRzIMK3IE9wVmVyYmApLCBvbmVcbiAqIHVuaW9uLiBgYXBwZW5kYCBpcyBub3Qgb25lOiBpdCBpcyBob3cgdGhlIGxvZyBlbmNvZGVzIGEgZ3Jvd24gYXJyYXkgKGAnZGVsdGEnYCkuXG4gKi9cbmV4cG9ydCB0eXBlIFdyaXRlVmVyYiA9IE9wVmVyYjtcblxuLyoqXG4gKiBUaGUgYnl0ZXMgb2YgYSByZWRhY3Rpb24gdmVyZGljdCBmb3Igb25lIHdyaXRlIChsYXcgNyk6IHdoaWNoIG9mIGl0IHRoZSBjb21taXQgbG9nIGFuZCB0aGUgcmVkYWN0ZWRcbiAqIG1pcnJvciBtdXN0IG5vdCBzaG93LiBUaGUgZW5naW5lIGRlY2lkZXMgaXQgKGByZWRhY3Rpb24udHMgwrcgZGVjaWRlV3JpdGVgKTsgdGhlIGZyYW1lIG9ubHkgd3JpdGVzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlU2NydWIge1xuICAvKiogVGhlIHdob2xlIHZhbHVlOiBgTE9HX1BMQUNFSE9MREVSYCBhdCB0aGUgd3JpdGUncyBwYXRoLiAqL1xuICByZWFkb25seSB3aG9sZT86IGJvb2xlYW47XG4gIC8qKiBEb3QtcGF0aHMgSU5TSURFIHRoZSB2YWx1ZSwgcmVsYXRpdmUgdG8gaXQ6IGBMT0dfUExBQ0VIT0xERVJgIGF0IGVhY2ggb25lIHRoYXQgaG9sZHMgYSB2YWx1ZS4gKi9cbiAgcmVhZG9ubHkgZmllbGRzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBSZWNvcmRGcmFtZSB7XG4gIC8qKiBMaXZlIGNvbW1pdHRlZCBzdGF0ZSDigJQgdGhlIGhlYXAgZXZlcnkgZnJhbWUgb2YgdGhlIHJ1biBzaGFyZXMuICovXG4gIHJlYWRvbmx5IHN0YXRlOiBTaGFyZWRNZW1vcnk7XG4gIC8qKiBUaGUgbG9nIHRoZSBmcmFtZSdzIGNvbW1pdHMgbGFuZCBvbiwgd2hlbiB0aGUgcnVuIGtlZXBzIG9uZS4gKi9cbiAgcmVhZG9ubHkgbG9nPzogRXZlbnRMb2c7XG4gIC8qKiBUaGUgcmVkYWN0ZWQgbWlycm9yIHRoZSBmcmFtZSdzIGNvbW1pdHMgbGFuZCBvbiwgd2hlbiB0aGUgcnVuIGtlZXBzIG9uZSAoe0BsaW5rIHVzZU1pcnJvcn0pLiAqL1xuICBwcml2YXRlIF9taXJyb3I/OiBTaGFyZWRNZW1vcnk7XG4gIC8qKiBXaGVyZSB0aGUgZnJhbWUgcmVhZHMgYW5kIHdyaXRlcyAobGF3IDEpLiAqL1xuICBwcml2YXRlIF9hZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFRoZSB0d28gZGlhbHMgKGxhdyA0LCA1KTsgYWJzZW50IOKGkiB0aGUgcmVjb3JkJ3MgZGVmYXVsdHMuICovXG4gIHByaXZhdGUgZW5jb2Rpbmc/OiBSZWNvcmRFbmNvZGluZztcbiAgLyoqXG4gICAqIFRoZSBjb21taXR0ZWQgZ2VuZXJhdGlvbiBhdCB0aGUgZnJhbWUncyBGSVJTVCB0b3VjaCAobGF3IDIpIOKAlCBoZWxkIGJ5IFJFRkVSRU5DRSwgbmV2ZXIgY2xvbmVkLlxuICAgKiBTZWUge0BsaW5rIGZpcnN0VG91Y2h9IGZvciB0aGUgYWxnb3JpdGhtIGFuZCB0aGUgaW1tdXRhYmlsaXR5IGludmFyaWFudCB0aGF0IG1ha2VzIGEgYmFyZVxuICAgKiByZWZlcmVuY2Ugc2FmZS5cbiAgICovXG4gIHByaXZhdGUgYmFzZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogVGhlIHN0YWdlJ3Mgc3RhZ2VkIHdyaXRlcyDigJQgYnVpbHQgYXQgaXRzIGZpcnN0IHdyaXRlIChsYXcgNCksIHJlbGVhc2VkIGF0IGNvbW1pdC4gKi9cbiAgcHJpdmF0ZSBidWZmZXI/OiBUcmFuc2FjdGlvbkJ1ZmZlcjtcbiAgLyoqXG4gICAqIEtleXMgdHJhY2tlZC1yZWFkIHNvIGZhciwgaW4gb3JkZXIgKGxhdyA1KSDigJQgdGhlIHNvdXJjZSBvZiBlYWNoIHN0YWdlZCByb3cncyBgcmVhZEtleXNgLiBPbmx5XG4gICAqIGFsbG9jYXRlZCB1bmRlciBgJ3JlYWRzLXByZWZpeCdgOyBpbnNlcnRpb24tb3JkZXJlZCAoYSBTZXQpIGFuZCBtb25vdG9uaWMsIHdoaWNoIGlzIHdoYXQgbWFrZXNcbiAgICogXCJsYXN0IHdyaXRlJ3MgcHJlZml4ID09IHVuaW9uXCIgaG9sZCBpbiBkZWx0YSBtb2RlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkS2V5cz86IFNldDxzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKHN0YXRlOiBTaGFyZWRNZW1vcnksIGxvZz86IEV2ZW50TG9nLCBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSA9IFtdKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMubG9nID0gbG9nO1xuICAgIHRoaXMuX2FkZHJlc3MgPSBhZGRyZXNzO1xuICB9XG5cbiAgLyoqIFdoZXJlIHRoZSBmcmFtZSByZWFkcyBhbmQgd3JpdGVzIChsYXcgMSkuICovXG4gIGdldCBhZGRyZXNzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkcmVzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIGFuZCB3cml0ZSBhdCBgYWRkcmVzc2AgZnJvbSBub3cgb24g4oCUIGJlZm9yZSB0aGUgZnJhbWUncyBmaXJzdCB3cml0ZSAobGF3IDEpOiB0aGUgYnVmZmVyIGtlZXBzXG4gICAqIHRoZSBhZGRyZXNzIGl0IHdhcyBidWlsdCBhdC4gVGhlIGVuZ2luZSdzIG9uZSBjYWxsZXIsIGBTdGFnZUNvbnRleHQgwrcgdXNlQWRkcmVzc09mYCwgcmVmdXNlcyBhIG1vdmVcbiAgICogb25jZSB0aGUgZnJhbWUgaGFzIHN0YWdlZC5cbiAgICovXG4gIHVzZUFkZHJlc3MoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLl9hZGRyZXNzID0gYWRkcmVzcztcbiAgfVxuXG4gIC8qKiBUaGUgdHdvIGRpYWxzIHRoZSBmcmFtZSBlbmNvZGVzIHVuZGVyIGZyb20gaXRzIG5leHQgYnVmZmVyIGFuZCBpdHMgbmV4dCByZWFkIG9uIChsYXcgNCwgNSkuICovXG4gIHVzZUVuY29kaW5nKGVuY29kaW5nOiBSZWNvcmRFbmNvZGluZyk6IHZvaWQge1xuICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZztcbiAgfVxuXG4gIC8qKiBUaGUgcmVkYWN0ZWQgbWlycm9yLCBpZiB0aGUgcnVuIGtlZXBzIG9uZS4gKi9cbiAgZ2V0IG1pcnJvcigpOiBTaGFyZWRNZW1vcnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9taXJyb3I7XG4gIH1cblxuICAvKiogTGFuZCBldmVyeSBjb21taXQgZnJvbSBub3cgb24gb24gYG1pcnJvcmAgdG9vLCB3aXRoIHRoZSBzY3J1YmJlZCByb3dzIHRoZSBsb2cgdGFrZXMgKGByZWNvcmRDb21taXRgKS4gKi9cbiAgdXNlTWlycm9yKG1pcnJvcjogU2hhcmVkTWVtb3J5IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5fbWlycm9yID0gbWlycm9yO1xuICB9XG5cbiAgLyoqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBrZXlgIHVuZGVyIGBwYXRoYDogdGhlIGZyYW1lJ3MgYWRkcmVzcywgdGhlbiB0aGUgcGF0aCwgdGhlbiB0aGUga2V5LiAqL1xuICBhdChwYXRoOiByZWFkb25seSBzdHJpbmdbXSwga2V5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gRXZlcnkgcmVhZCBhbmQgd3JpdGUgYnVpbGRzIG9uZS4gVGhlIHJvb3QncyBpcyB0aGUgcGF0aCBhbmQgdGhlIGtleTsgdW5kZXIgYW4gYWRkcmVzcywgYW5cbiAgICAvLyBpbmRleCBsb29wIOKAlCB0aGUgZG91YmxlIHNwcmVhZCBgWy4uLmFkZHJlc3MsIC4uLnBhdGgsIGtleV1gIGNvc3RzIGEgdGhpcmQgbW9yZSBwZXIgY2FsbFxuICAgIC8vIChhcyBgdXRpbHMgwrcgcGF0aFVuZGVyYCBmb3VuZCBmb3IgdGhlIGFkZHJlc3MgYW5kIHRoZSBwYXRoKS5cbiAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5fYWRkcmVzcztcbiAgICBpZiAoYWRkcmVzcy5sZW5ndGggPT09IDApIHJldHVybiBbLi4ucGF0aCwga2V5XTtcbiAgICBjb25zdCBvdXQgPSBuZXcgQXJyYXk8c3RyaW5nPihhZGRyZXNzLmxlbmd0aCArIHBhdGgubGVuZ3RoICsgMSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRyZXNzLmxlbmd0aDsgaSsrKSBvdXRbaV0gPSBhZGRyZXNzW2ldO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykgb3V0W2FkZHJlc3MubGVuZ3RoICsgaV0gPSBwYXRoW2ldO1xuICAgIG91dFtvdXQubGVuZ3RoIC0gMV0gPSBrZXk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiDilIDilIAgVGhlIGZpcnN0LXRvdWNoIGJhc2UgKCMxMykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAqXG4gICAqIFdIQVQ6IHJldHVybnMgdGhlIGNvbW1pdHRlZCBzaGFyZWQgc3RhdGUgYXMgaXQgd2FzIGF0IHRoaXMgZnJhbWUncyBGSVJTVCB0b3VjaCAoZmlyc3QgcmVhZCBvclxuICAgKiBmaXJzdCB3cml0ZSksIGNhcHR1cmluZyB0aGUgcmVmZXJlbmNlIG9uIGZpcnN0IGNhbGwuIFNlcnZlcyB0d28gY29uc3VtZXJzOiByZWFkcyBiZWZvcmUgdGhlIGZpcnN0XG4gICAqIHdyaXRlICh7QGxpbmsgcmVhZH0pIGFuZCB0aGUgdHJhbnNhY3Rpb24gYnVmZmVyJ3MgZGlmZiBiYXNlICh7QGxpbmsgZ2V0VHJhbnNhY3Rpb25CdWZmZXJ9KS5cbiAgICpcbiAgICogV0hZIEEgQkFSRSBSRUZFUkVOQ0UgSVMgU0FGRSDigJQgdGhlIGludmFyaWFudCB0aGlzIHJlc3RzIG9uOiBjb21taXR0ZWQgc3RhdGUgaXNcbiAgICogaW1tdXRhYmxlLWFmdGVyLXN3YXAuIEV2ZXJ5IHdyaXRlIHRvIGBTaGFyZWRNZW1vcnlgIGJ1aWxkcyB0aGUgTkVYVCBnZW5lcmF0aW9uIGFuZCBzd2FwcyBpdCBpblxuICAgKiAoY29weS1vbi13cml0ZSwgOS4yOS4wOiBgYXBwbHlQYXRjaGAgdmlhIGBuZXh0R2VuZXJhdGlvbmAsIGFuZCBgc2V0VmFsdWVgL2B1cGRhdGVWYWx1ZWAgdG9vKSDigJQgaXRcbiAgICogY29waWVzIHRoZSByb290IGFuZCB0aGUgY29udGFpbmVycyBvbiBlYWNoIHdyaXR0ZW4gcGF0aCwgc2hhcmVzIHRoZSByZXN0LCBhbmQgbmV2ZXIgZWRpdHMgYVxuICAgKiBjb250YWluZXIgb2YgdGhlIGdlbmVyYXRpb24gYSBzdGFnZSBjYXB0dXJlZCBoZXJlLiBIb2xkaW5nIHRoZSByZWZlcmVuY2UgdGhlcmVmb3JlIGdpdmVzIHRoaXNcbiAgICogc3RhZ2UgYSBzdGFibGUgc25hcHNob3QgYXQgemVybyBjb3N0IOKAlCBubyBjbG9uZSwgd2hpY2ggaXMgdGhlIGVudGlyZSBwb2ludCBvZiAjMTMuIFRoZSB0cmFuc2FjdGlvblxuICAgKiBidWZmZXIncyBuZXQtY2hhbmdlIGRpZmYgYmFzZSByZXN0cyBvbiB0aGUgc2FtZSBndWFyYW50ZWU6IGl0IElTIHRoaXMgdmlldy5cbiAgICpcbiAgICogV0hZIEZJUlNUIFRPVUNILCBub3QgZmlyc3Qgd3JpdGU6IHRoZSBwcmUtIzEzIGVhZ2VyIGVuZ2luZSBjbG9uZWQgdGhlIHN0YXRlIGludG8gdGhlIGJ1ZmZlciBhdFxuICAgKiB0aGUgc3RhZ2UncyBmaXJzdCBBQ0NFU1MsIGFuY2hvcmluZyBib3RoIGl0cyBzbmFwc2hvdCByZWFkcyBhbmQgaXRzIGNvbW1pdCBiYXNlbGluZSAodGhlXG4gICAqIG5ldC1jaGFuZ2UgZGlmZiBiYXNlKSB0aGVyZS4gIzEzJ3MgZmlyc3QgY3V0IGFuY2hvcmVkIHRoZSBsYXp5IGJ1ZmZlciBhdCBmaXJzdCBXUklURSDigJQgb2JzZXJ2YWJseVxuICAgKiBkaWZmZXJlbnQgd2hlbiBzb21ldGhpbmcgZWxzZSBjb21taXRzIGluIHRoZSBnYXAgYmV0d2VlbiB0aGlzIHN0YWdlJ3MgZmlyc3QgcmVhZCBhbmQgaXRzIGZpcnN0XG4gICAqIHdyaXRlLiBUaGF0IGdhcCBpcyBSRUFDSEFCTEU6IGZvcmsgc2libGluZ3MgYXJlIG5hbWVzcGFjZS1pc29sYXRlZCBmb3IgcnVuLXNjb3BlZCBrZXlzIChlYWNoIGNoaWxkXG4gICAqIHdyaXRlcyB1bmRlciBgcnVucy88Y2hpbGRJZD4vYCksIGJ1dCBST09ULWxldmVsIGtleXMgYXJlIHNoYXJlZCDigJQgd3JpdHRlbiB2aWEgYHNldEdsb2JhbGAgZnJvbVxuICAgKiBjb25zdW1lciBzY29wZSBjb2RlIGFuZCwgY3JpdGljYWxseSwgYnkgYFN1YmZsb3dJbnB1dE1hcHBlcmAncyBvdXRwdXQgbWFwcGluZ1xuICAgKiAoYHBhcmVudENvbnRleHQuc2V0R2xvYmFsYCksIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBydW5zIHdoZW4gYSBzdWJmbG93IGlzIGEgZm9yayBicmFuY2guIEFcbiAgICogc2libGluZydzIHJvb3Qta2V5IGNvbW1pdCBsYW5kaW5nIGluIHRoZSBnYXAgd291bGQgc2hpZnQgdGhpcyBzdGFnZSdzIGRpZmYgYmFzZSwgbWFraW5nIGl0c1xuICAgKiBDb21taXRCdW5kbGUgcmVjb3JkIGEgcGhhbnRvbSBjaGFuZ2UgKG9yIHN3YWxsb3cgYSByZWFsIG9uZSkgcmVsYXRpdmUgdG8gdGhlIGVhZ2VyIGVuZ2luZS5cbiAgICogQW5jaG9yaW5nIHRoZSB2aWV3IGF0IGZpcnN0IHRvdWNoIHJlc3RvcmVzIHRoZSBFWEFDVCBlYWdlciBzZW1hbnRpY3Mg4oCUIHNlcXVlbnRpYWwgQU5EIHBhcmFsbGVsIOKAlFxuICAgKiBhdCB6ZXJvIGNsb25lIGNvc3QuXG4gICAqXG4gICAqIFJlYWQgdmlzaWJpbGl0eSBpcyB0d28tdGllciwgbWF0Y2hpbmcgZWFnZXIgYnl0ZS1mb3ItYnl0ZToga2V5cyBwcmVzZW50IGluIHRoZSB2aWV3IGF0IGZpcnN0XG4gICAqIHRvdWNoIHJlYWQgcmVwZWF0YWJseSBmcm9tIGl0OyBrZXlzIEFCU0VOVCBmcm9tIGl0IGZhbGwgYmFjayB0byBMSVZFIHN0YXRlICh0aGUgZWFnZXIgZW5naW5lJ3NcbiAgICogZXhhY3QgZmFsbGJhY2sg4oCUIGEgbWlkLWZsaWdodCBzaWJsaW5nIHJvb3Qta2V5IHdyaXRlIHdhcyBhbHdheXMgdmlzaWJsZSB0byByZWFkcywgYW5kIHN0YXlzXG4gICAqIHZpc2libGU7IG9ubHkgdGhlIERJRkYgQkFTRSBpcyBwaW5uZWQpLlxuICAgKi9cbiAgcHJpdmF0ZSBmaXJzdFRvdWNoKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBpZiAoIXRoaXMuYmFzZSkge1xuICAgICAgdGhpcy5iYXNlID0gdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2FjdGlvbiBidWZmZXIsIGNyZWF0ZWQgbGF6aWx5IG9uIHRoZSBmcmFtZSdzIEZJUlNUIFdSSVRFICgjMTMpLlxuICAgKlxuICAgKiBSZWFkcyBORVZFUiBjb25zdHJ1Y3QgaXQ6IHJlYWQteW91ci13cml0ZXMgb25seSBtYXR0ZXJzIG9uY2UgYSBzdGFnZWQgd3JpdGUgZXhpc3RzLCBzbyBiZWZvcmUgdGhhdFxuICAgKiB7QGxpbmsgcmVhZH0gc2VydmVzIGZyb20gdGhlIGZpcnN0LXRvdWNoIGJhc2UgYW5kIHtAbGluayBjb21taXR9IHJlY29yZHMgYW4gZW1wdHkgYnVuZGxlIOKAlCBhbGwgd2l0aFxuICAgKiBaRVJPIGBzdHJ1Y3R1cmVkQ2xvbmVgcyBvZiB0aGUgc2hhcmVkIHN0YXRlLlxuICAgKlxuICAgKiBUaGUgYnVmZmVyJ3MgYmFzZSBpcyB0aGUgRklSU1QtVE9VQ0ggdmlldywgTk9UIHRoZSBsaXZlIHN0YXRlIGF0IHdyaXRlIHRpbWU6IHVuZGVyIHBhcmFsbGVsIGZvcmtzXG4gICAqIGEgc2libGluZyBtYXkgaGF2ZSBjb21taXR0ZWQgYmV0d2VlbiB0aGlzIGZyYW1lJ3MgZmlyc3QgcmVhZCBhbmQgdGhpcyB3cml0ZSwgYW5kIHRoZSBuZXQtY2hhbmdlXG4gICAqIGRpZmYgYmFzZSBtdXN0IHN0YXkgYW5jaG9yZWQgYXQgZmlyc3QgdG91Y2ggdG8gbWF0Y2ggdGhlIGVhZ2VyIGVuZ2luZSDigJQgc2VlIHtAbGluayBmaXJzdFRvdWNofS5cbiAgICpcbiAgICogUHJpdmF0ZSBzaW5jZSBDNDogZXZlcnkgd3JpdGUgZ29lcyB0aHJvdWdoIHtAbGluayB3cml0ZX0sIHNvIHRoZSBzY3J1YiB0cmF2ZWxzIHdpdGggdGhlIG9wLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUcmFuc2FjdGlvbkJ1ZmZlcigpOiBUcmFuc2FjdGlvbkJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLmJ1ZmZlcikge1xuICAgICAgLy8gUGVyLXdyaXRlIHByb3ZlbmFuY2UgKCNQMSk6IGhhbmQgdGhlIGJ1ZmZlciBhIGxpdmUgdmlldyBvZiB0aGlzIGZyYW1lJ3MgcmVhZCBwcmVmaXgg4oCUXG4gICAgICAvLyBldmFsdWF0ZWQgQVQgRUFDSCBXUklURSwgc28gZWFjaCBzdGFnZWQgb3AgY2FwdHVyZXMgZXhhY3RseSB0aGUgcmVhZHMgdGhhdCBwcmVjZWRlZCBpdC5cbiAgICAgIGNvbnN0IHJlYWRLZXlzUHJvdmlkZXIgPVxuICAgICAgICB0aGlzLmVuY29kaW5nPy53cml0ZVByb3ZlbmFuY2UgPT09ICdyZWFkcy1wcmVmaXgnID8gKCkgPT4gWy4uLih0aGlzLnJlYWRLZXlzID8/IFtdKV0gOiB1bmRlZmluZWQ7XG4gICAgICAvLyBUaGUgZnJhbWUncyBhZGRyZXNzICg5LjMwLjA6IHRoZSBhZG1pdHRlZCByZWNvcmQgcmVhZHMgdGhlIGNvbnRhaW5lcnMgdGhlcmUgYXMgd2hlcmUgdGhlXG4gICAgICAvLyBzdGFnZSB3cml0ZXMsIG5ldmVyIGFzIGEgdmFsdWUgaXQgcmVhZCkuXG4gICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBUcmFuc2FjdGlvbkJ1ZmZlcihcbiAgICAgICAgdGhpcy5maXJzdFRvdWNoKCksXG4gICAgICAgIHRoaXMuZW5jb2Rpbmc/LmNvbW1pdFZhbHVlcyxcbiAgICAgICAgcmVhZEtleXNQcm92aWRlcixcbiAgICAgICAgdGhpcy5fYWRkcmVzcyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJ1ZmZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFnZSBvbmUgd3JpdGUgKGxhdyA3KTogYHZlcmJgIGF0IGBwYXRoYCDigJQgYW4gYWJzb2x1dGUgcGF0aCwgdGhlIGFkZHJlc3MgYWxyZWFkeSBqb2luZWRcbiAgICogKHtAbGluayBhdH0pIOKAlCBhbmQgdGhlIGJ5dGVzIG9mIGl0cyByZWRhY3Rpb24gdmVyZGljdC4gVGhlIGZpcnN0IHdyaXRlIGJ1aWxkcyB0aGUgYnVmZmVyIChsYXcgNCkuXG4gICAqXG4gICAqIFRoZSBzY3J1YiByZWdpc3RlcnMgcGF0aHMsIG5ldmVyIHZhbHVlczogYHdob2xlYCBtYXJrcyB0aGUgb3AncyBvd24gcGF0aCwgYGZpZWxkc2AgZWFjaCBmaWVsZFxuICAgKiBpbnNpZGUgdGhlIHZhbHVlIChhIGxpdGVyYWwga2V5IGFuZCwgd2hlbiBkb3R0ZWQsIHRoZSBuZXN0ZWQgcGF0aCk7IGByZWNvcmRDb21taXRgIHB1dHMgdGhlXG4gICAqIGxvZydzIHBsYWNlaG9sZGVyIHdoZXJldmVyIG9uZSBvZiB0aGVtIGhvbGRzIGEgdmFsdWUgYXQgY29tbWl0LCBmb3IgdGhlIG1pcnJvciBhbmQgdGhlIGxvZyBvbmx5XG4gICAqIChgc2NydWIudHNgKS4gTGl2ZSBzdGF0ZSB0YWtlcyB0aGUgdmFsdWUgYXMgaXQgaXMuIEEgcGF0aCBtYXJrZWQgYnkgYSB3cml0ZSB0aGF0IHRoZSBuZXQtY2hhbmdlXG4gICAqIGZpbHRlciBkcm9wcyBnb2VzIHdpdGggaXQuXG4gICAqL1xuICB3cml0ZShwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLCB2YWx1ZTogdW5rbm93biwgdmVyYjogV3JpdGVWZXJiLCBzY3J1Yj86IFdyaXRlU2NydWIpOiB2b2lkIHtcbiAgICBjb25zdCBidWZmZXIgPSB0aGlzLmdldFRyYW5zYWN0aW9uQnVmZmVyKCk7XG4gICAgY29uc3Qgd2hvbGUgPSBzY3J1Yj8ud2hvbGUgPT09IHRydWU7XG4gICAgaWYgKHZlcmIgPT09ICdtZXJnZScpIGJ1ZmZlci5tZXJnZShwYXRoLCB2YWx1ZSwgd2hvbGUpO1xuICAgIGVsc2UgaWYgKHZlcmIgPT09ICdkZWxldGUnKSBidWZmZXIuZGVsZXRlKHBhdGgsIHdob2xlKTtcbiAgICBlbHNlIGJ1ZmZlci5zZXQocGF0aCwgdmFsdWUsIHdob2xlKTtcbiAgICBpZiAoc2NydWI/LmZpZWxkcyAhPT0gdW5kZWZpbmVkKSBidWZmZXIubWFya1JlZGFjdGVkRmllbGRzKHBhdGgsIHNjcnViLmZpZWxkcyk7XG4gIH1cblxuICAvKiogSGFzIHRoZSBmcmFtZSBzdGFnZWQgYSB3cml0ZSBzaW5jZSBpdHMgbGFzdCByZWxlYXNlIOKAlCBkb2VzIGl0cyBidWZmZXIgZXhpc3Q/ICovXG4gIGdldCBoYXNTdGFnZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZyYW1lJ3MgcmVhZCwgbWlycm9yaW5nIHRoZSBlYWdlciBlbmdpbmUncyByZWFkIG9yZGVyIGJ5dGUtZm9yLWJ5dGUgKGxhdyAzKTpcbiAgICpcbiAgICogICAgMS4gc3RhZ2VkIHdyaXRlcyArIGZpcnN0LXRvdWNoIHNuYXBzaG90IOKAlCBgYnVmZmVyLmdldGAgb3ZlciBpdHMgd29ya2luZ0NvcHkgd2hlbiB0aGUgYnVmZmVyXG4gICAqICAgICAgIGV4aXN0cywgZWxzZSBgbmF0aXZlR2V0YCBvdmVyIHRoZSB6ZXJvLWNsb25lIGZpcnN0LXRvdWNoIGJhc2UgKHRoZSBidWZmZXIncyBiYXNlIElTIHRoYXRcbiAgICogICAgICAgdmlldywgc28gdGhlIHR3byB0aWVycyBhZ3JlZSBvbiBjb250ZW50KTtcbiAgICogICAgMi4gTElWRSBzdGF0ZSB2aWEgYFNoYXJlZE1lbW9yeSDCtyBnZXRWYWx1ZWAgZm9yIGtleXMgYWJzZW50IGZyb20gdGhlIHNuYXBzaG90IOKAlCBpbmNsdWRpbmcgaXRzXG4gICAqICAgICAgIGFkZHJlc3PihpJyb290IGZhbGxiYWNrLiBUaGUgZWFnZXIgZW5naW5lIGhhZCB0aGlzIGV4YWN0IGxpdmUgZmFsbGJhY2sgZm9yIHNuYXBzaG90LW1pc3NpbmdcbiAgICogICAgICAga2V5czsgYnl0ZS1pZGVudGl0eSBvdmVyIHB1cml0eS4gQWZ0ZXIgdGhlIGZyYW1lJ3MgZmlyc3Qgd3JpdGUgc3VjaCBhIHZhbHVlIGNhbiBiZSB0aGUgdmVyeVxuICAgKiAgICAgICBjb250YWluZXIgdGhlIGJ1ZmZlcidzIGRpZmYgYmFzZSBob2xkcyBhdCB0aGUgcGF0aCAodGhlIHN0YWdlIGRlbGV0ZWQgb3IgdW5zZXQgaXQsIG9yXG4gICAqICAgICAgIHJlcGxhY2VkIGEgY29udGFpbmVyIGFib3ZlIGl0KSwgc28gdGhlIGJhc2UgaXMgZGV0YWNoZWQgdGhlcmUgZmlyc3RcbiAgICogICAgICAgKGBUcmFuc2FjdGlvbkJ1ZmZlciDCtyBkZXRhY2hCYXNlYCk6IGFuIGluLXBsYWNlIGVkaXQgb2YgdGhlIHZhbHVlIChvdXQgb2YgY29udHJhY3QpIHdyaXR0ZW5cbiAgICogICAgICAgYmFjayBpcyByZWNvcmRlZCwgYXMgb24gOS4yOC4wLCB3aG9zZSBiYXNlIHdhcyBhIGNsb25lIHRha2VuIGF0IHRoZSBmaXJzdCB3cml0ZS5cbiAgICpcbiAgICogUmVhZHMgbmV2ZXIgY29uc3RydWN0IHRoZSBidWZmZXIgKCMxMyk6IGEgZnJhbWUgdGhhdCBuZXZlciB3cml0ZXMgcGVyZm9ybXMgemVybyBjbG9uZXMgb2YgdGhlXG4gICAqIHNoYXJlZCBzdGF0ZS5cbiAgICovXG4gIHJlYWQocGF0aDogc3RyaW5nW10sIGtleT86IHN0cmluZyk6IHVua25vd24ge1xuICAgIGNvbnN0IGF0ID0gdGhpcy5hdChwYXRoLCBrZXkgYXMgc3RyaW5nKTtcbiAgICBjb25zdCBmcm9tU25hcHNob3QgPSB0aGlzLmJ1ZmZlciA/IHRoaXMuYnVmZmVyLmdldChhdCkgOiBuYXRpdmVHZXQodGhpcy5maXJzdFRvdWNoKCksIGF0KTtcbiAgICBpZiAodHlwZW9mIGZyb21TbmFwc2hvdCAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmcm9tU25hcHNob3Q7XG4gICAgY29uc3QgbGl2ZSA9IHRoaXMuc3RhdGUuZ2V0VmFsdWUodGhpcy5fYWRkcmVzcywgcGF0aCwga2V5KTtcbiAgICAvLyBUaWVyIDIgYWZ0ZXIgdGhlIGZpcnN0IHdyaXRlOiBrZWVwIHRoZSBkaWZmIGJhc2UgZXhhY3QgKHNlZSBhYm92ZSkuXG4gICAgaWYgKHRoaXMuYnVmZmVyICYmIGxpdmUgIT09IG51bGwgJiYgdHlwZW9mIGxpdmUgPT09ICdvYmplY3QnKSB0aGlzLmJ1ZmZlci5kZXRhY2hCYXNlKGF0KTtcbiAgICByZXR1cm4gbGl2ZTtcbiAgfVxuXG4gIC8qKiBQdXQgYSB0cmFja2VkIHJlYWQncyB1c2VyLWxldmVsIGtleSBvbiB0aGUgcmVhZEtleXMgbGlzdCAobGF3IDUpIOKAlCBhIG5vLW9wIHVubGVzcyB0aGUgZnJhbWUga2VlcHMgb25lLiAqL1xuICBub3RlUmVhZChwYXRoOiByZWFkb25seSBzdHJpbmdbXSwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbmNvZGluZz8ud3JpdGVQcm92ZW5hbmNlID09PSAncmVhZHMtcHJlZml4Jykge1xuICAgICAgKHRoaXMucmVhZEtleXMgPz89IG5ldyBTZXQoKSkuYWRkKHBhdGgubGVuZ3RoID4gMCA/IFsuLi5wYXRoLCBrZXldLmpvaW4oJy4nKSA6IGtleSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpdmUgY29tbWl0dGVkIHN0YXRlIGF0IGBrZXlgOiBhdCB0aGUgZnJhbWUncyBhZGRyZXNzLCBlbHNlIGF0IHRoZSByb290IOKAlCBuZXZlciB0aGUgc3RhZ2UncyBvd25cbiAgICogdmlldy4gVHlwZWQgYXMgYFNoYXJlZE1lbW9yeSDCtyBnZXRWYWx1ZWAgdHlwZXMgaXQsIHdoaWNoIGBTdGFnZUNvbnRleHQgwrcgZ2V0Um9vdGAgaGFuZHMgb24uXG4gICAqL1xuICByZWFkTGl2ZShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmdldFZhbHVlKHRoaXMuX2FkZHJlc3MsIFtdLCBrZXkpO1xuICB9XG5cbiAgLyoqIExpdmUgY29tbWl0dGVkIHN0YXRlIGF0IGBrZXlgIGF0IHRoZSByb290IOKAlCB0eXBlZCBhcyBgU2hhcmVkTWVtb3J5IMK3IGdldFZhbHVlYCAoYFN0YWdlQ29udGV4dCDCtyBnZXRHbG9iYWxgKS4gKi9cbiAgcmVhZEdsb2JhbChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmdldFZhbHVlKFtdLCBbXSwga2V5KTtcbiAgfVxuXG4gIC8qKiBEaWQgYSBzdGFnZWQgb3AgdG91Y2ggYHBhdGhgIOKAlCBvbiBpdCwgYWJvdmUgaXQgb3IgYmVsb3cgaXQ/IChBIHJlcG9ydCdzIHF1ZXN0aW9uOyBuZXZlciB0aGUgaG90IHBhdGguKSAqL1xuICB3YXNTdGFnZWQocGF0aDogKHN0cmluZyB8IG51bWJlcilbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuYnVmZmVyLndhc1N0YWdlZChwYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgYXQgYHBhdGhgIGluIHdoYXQgdGhlIHN0YWdlIGhhcyBzZWVuIOKAlCBpdHMgd29ya2luZyBjb3B5IG9uY2UgaXQgd3JvdGUsIGVsc2UgaXRzXG4gICAqIGZpcnN0LXRvdWNoIGJhc2Ug4oCUIFdJVEhPVVQgdGFraW5nIGEgcHJpdmF0ZSBjb3B5OiBmb3IgYSByZXBvcnQgdGhhdCBvbmx5IGNvbXBhcmVzLlxuICAgKi9cbiAgcGVlayhwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyID8gdGhpcy5idWZmZXIucGVlayhwYXRoKSA6IG5hdGl2ZUdldCh0aGlzLmZpcnN0VG91Y2goKSwgcGF0aCk7XG4gIH1cblxuICAvKiogVGhlIHZhbHVlIGF0IGBwYXRoYCBpbiB0aGUgZmlyc3QtdG91Y2ggYmFzZSDigJQgY29tbWl0dGVkIHN0YXRlIGFzIHRoZSBmcmFtZSBmaXJzdCB0b3VjaGVkIGl0LiAqL1xuICBiYXNlQXQocGF0aDogKHN0cmluZyB8IG51bWJlcilbXSk6IHVua25vd24ge1xuICAgIHJldHVybiBuYXRpdmVHZXQodGhpcy5maXJzdFRvdWNoKCksIHBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCB3aGF0IHRoZSBmcmFtZSBzdGFnZWQgKGxhdyA2KTogdGhlIGJ1ZmZlcidzIHBheWxvYWQgZmlyc3Qg4oCUIG5vbmUsIHRoZSBlbXB0eSBjb21taXQsIHdoZW5cbiAgICogaXQgc3RhZ2VkIG5vdGhpbmcgKCMxMzogemVybyBjbG9uZXMpIOKAlCB0aGVuIHRoZSBuYW1lcyAoYHN0YW1wT2YoKWApLCByZWFkIG9uY2UgdGhlIHBheWxvYWQgaXNcbiAgICogYnVpbHQsIGFuZCBib3RoIHRvIGByZWNvcmRDb21taXRgLiBVc2VyIGNvZGUgY2FuIHJ1biB3aGlsZSB0aGUgcGF5bG9hZCBpcyBidWlsdCAoYSBnZXR0ZXIgb24gYVxuICAgKiBzdGFnZWQgdmFsdWUsIHdoaWNoIHRoZSBuZXQtY2hhbmdlIGNvbXBhcmUgYW5kIHRoZSBjbG9uZSBpbnZva2UpOyB3aGF0IGl0IGFkZHMgdG8gdGhlIG5hbWVzIOKAlFxuICAgKiBhbiB1bnRyYWNrZWQgcmVhZCwgc2F5IOKAlCBpcyBvbiB0aGUgYnVuZGxlLlxuICAgKi9cbiAgY29tbWl0KHN0YW1wT2Y6ICgpID0+IENvbW1pdFN0YW1wKTogdm9pZCB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuYnVmZmVyPy5jb21taXQoKTtcbiAgICByZWNvcmRDb21taXQocGF5bG9hZCwgc3RhbXBPZigpLCB7IHN0YXRlOiB0aGlzLnN0YXRlLCBtaXJyb3I6IHRoaXMuX21pcnJvciwgbG9nOiB0aGlzLmxvZyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmQgdGhlIGZyYW1lJ3MgaG9sZCBvbiBzdGF0ZSAoIzEzYiwgbGF3IDYpOiBkcm9wIHRoZSBidWZmZXIgKGl0cyB3b3JraW5nIGNvcHkgYW5kIHdoYXRldmVyIHByaXZhdGVcbiAgICogY29waWVzIGl0cyByZWFkcyB0b29rKSBhbmQgdGhlIGZpcnN0LXRvdWNoIGJhc2UgKGEgcmVmZXJlbmNlIHRoYXQgcGlucyBvbmUgY29tbWl0dGVkLXN0YXRlXG4gICAqIEdFTkVSQVRJT04pLiBCb3RoIHJlLWNyZWF0ZSBsYXppbHk6IGEgbGF0ZXIgcmVhZCByZS1hbmNob3JzIG9uIHRoZSBDVVJSRU5UIGNvbW1pdHRlZCBzdGF0ZSwgYW5kIGFcbiAgICogbGF0ZXIgd3JpdGUgYnVpbGRzIGEgZnJlc2ggYnVmZmVyIG9uIGl0IOKAlCBzbyBhIHNlY29uZCBjb21taXQgZGlmZnMgYWdhaW5zdCB0aGUgc3RhdGUgYWZ0ZXIgdGhlXG4gICAqIGZpcnN0LiBXaXRob3V0IHRoZSByZWxlYXNlLCB0aGUgZXhlY3V0aW9uIHRyZWUg4oCUIHdoaWNoIHJldGFpbnMgZXZlcnkgZnJhbWUgZm9yIHRoZSBsaWZldGltZSBvZlxuICAgKiB0aGUgcnVuIOKAlCByZXRhaW5zIG9uZSBzdGF0ZSBnZW5lcmF0aW9uIHBlciBleGVjdXRlZCBzdGFnZSAobWVhc3VyZWQgTyhOwrIpIGJlZm9yZSBjb3B5LW9uLXdyaXRlO1xuICAgKiBhIDUwMC1pdGVyYXRpb24gYWdlbnQgT09NZWQgYSBkZWZhdWx0IE5vZGUgaGVhcCwgYmFja2xvZyAjMTgpLlxuICAgKi9cbiAgcmVsZWFzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJhc2UgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3cgYXdheSBldmVyeXRoaW5nIHRoZSBmcmFtZSBzdGFnZWQgYW5kIHJlYWQgKGxhdyA2KTogdGhlIGJ1ZmZlciwgdGhlIGZpcnN0LXRvdWNoIGJhc2UgKHRoZSBuZXh0XG4gICAqIGF0dGVtcHQgcmUtYW5jaG9ycyBvbiBjb21taXR0ZWQgc3RhdGUgYXMgaXQgc3RhbmRzIE5PVykgYW5kIHRoZSByZWFkS2V5cyBsaXN0IOKAlCBhIGRpc2NhcmRlZFxuICAgKiBhdHRlbXB0J3MgcmVhZHMgbXVzdCBuZXZlciByZWFjaCB0aGUgbmV4dCBhdHRlbXB0J3MgYFRyYWNlRW50cnkucmVhZEtleXNgLCBvciBhIGJhY2t3YXJkIHNsaWNlXG4gICAqIHdvdWxkIGZvbGxvdyBhbiBlZGdlIHRoYXQgbm8gY29tbWl0dGVkIHdyaXRlIGV2ZXIgaGFkLiBOb3RoaW5nIGlzIHJlY29yZGVkLlxuICAgKi9cbiAgZGlzY2FyZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbGVhc2UoKTtcbiAgICB0aGlzLnJlYWRLZXlzID0gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Like a runtime heap with namespace isolation:
6
6
  * - A value is written at an ADDRESS — a path prefix the caller computed
7
- * (C2: the engine's frame decides it, `StageContext.ts · runAddress`) — and read
7
+ * (C2: the engine's frame decides it, `runAddress.ts · runAddress`) — and read
8
8
  * there first, then at the root
9
9
  * - Default values seed the root, and the container at an address when a
10
10
  * write creates it
@@ -83,4 +83,4 @@ class SharedMemory {
83
83
  }
84
84
  }
85
85
  exports.SharedMemory = SharedMemory;
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhcmVkTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvU2hhcmVkTWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRzs7O0FBRUgsNkNBQXVFO0FBRXZFLHlDQUFxSDtBQUVySCxNQUFhLFlBQVk7SUFDZixPQUFPLEdBQTJCLEVBQUUsQ0FBQztJQUNyQyxjQUFjLENBQVc7SUFFakMsWUFBWSxhQUF1QixFQUFFLGNBQXdCO1FBQzNELElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUEsNkJBQWdCLEVBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsd0VBQXdFO1FBQ3hFLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLG1FQUFtRTtRQUNuRSw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdFLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEYsQ0FBQztJQUVELDJHQUEyRztJQUMzRyxXQUFXLENBQUMsT0FBMEIsRUFBRSxJQUFjLEVBQUUsR0FBVyxFQUFFLEtBQWM7UUFDakYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELElBQUEsNEJBQWlCLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCw0R0FBNEc7SUFDNUcsUUFBUSxDQUFDLE9BQTBCLEVBQUUsSUFBYyxFQUFFLEdBQVcsRUFBRSxLQUFjO1FBQzlFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRCxJQUFBLHlCQUFjLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxXQUFXLENBQUMsT0FBMEIsRUFBRSxJQUFjLEVBQUUsR0FBVztRQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUEsd0JBQVcsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBQSwrQkFBb0IsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEUsSUFBQSxxQkFBUSxFQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLE9BQTJCLEVBQUUsSUFBZSxFQUFFLEdBQVk7UUFDakUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFBLCtCQUFvQixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUEseUJBQWMsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQy9FLE9BQU8sT0FBTyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUEseUJBQWMsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsc0dBQXNHO0lBQ3RHLFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELGtHQUFrRztJQUNsRyxVQUFVLENBQUMsU0FBc0IsRUFBRSxPQUFvQixFQUFFLEtBQW1CO1FBQzFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBQSx5QkFBYyxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBQ0Y7QUFsRUQsb0NBa0VDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFyZWRNZW1vcnkg4oCUIFRoZSBzaGFyZWQgc3RhdGUgY29udGFpbmVyIGZvciBhbGwgZmxvd2NoYXJ0IGV4ZWN1dGlvblxuICpcbiAqIExpa2UgYSBydW50aW1lIGhlYXAgd2l0aCBuYW1lc3BhY2UgaXNvbGF0aW9uOlxuICogLSBBIHZhbHVlIGlzIHdyaXR0ZW4gYXQgYW4gQUREUkVTUyDigJQgYSBwYXRoIHByZWZpeCB0aGUgY2FsbGVyIGNvbXB1dGVkXG4gKiAgIChDMjogdGhlIGVuZ2luZSdzIGZyYW1lIGRlY2lkZXMgaXQsIGBTdGFnZUNvbnRleHQudHMgwrcgcnVuQWRkcmVzc2ApIOKAlCBhbmQgcmVhZFxuICogICB0aGVyZSBmaXJzdCwgdGhlbiBhdCB0aGUgcm9vdFxuICogLSBEZWZhdWx0IHZhbHVlcyBzZWVkIHRoZSByb290LCBhbmQgdGhlIGNvbnRhaW5lciBhdCBhbiBhZGRyZXNzIHdoZW4gYVxuICogICB3cml0ZSBjcmVhdGVzIGl0XG4gKiAtIEFjY2VwdHMgY29tbWl0IGJ1bmRsZXMgZnJvbSBUcmFuc2FjdGlvbkJ1ZmZlclxuICpcbiAqIENPUFktT04tV1JJVEUgKDkuMjkuMCDigJQgZG9jcy9kZXNpZ24vMjAyNi0xMC1jb3B5LW9uLXdyaXRlLWNvbW1pdC5tZCk6XG4gKiBgY29udGV4dGAgaXMgYSBHRU5FUkFUSU9OLCBhbmQgYSBnZW5lcmF0aW9uIGlzIG5ldmVyIGVkaXRlZC4gRXZlcnkgd3JpdGUg4oCUXG4gKiBgYXBwbHlQYXRjaGAgKGEgc3RhZ2UgY29tbWl0KSwgYHNldFZhbHVlYCwgYHVwZGF0ZVZhbHVlYCDigJQgYnVpbGRzIHRoZSBuZXh0XG4gKiBnZW5lcmF0aW9uIGJ5IGNvcHlpbmcgdGhlIHJvb3QgYW5kIHRoZSBjb250YWluZXJzIG9uIGVhY2ggd3JpdHRlbiBwYXRoLFxuICogc2hhcmVzIGV2ZXJ5IG90aGVyIHN1YnRyZWUgd2l0aCB0aGUgZ2VuZXJhdGlvbiBiZWZvcmUgaXQsIGFuZCBzd2Fwcy4gU28gYVxuICogZ2VuZXJhdGlvbiBhIHN0YWdlIGNhcHR1cmVkIChpdHMgZmlyc3QtdG91Y2ggdmlldywgaXRzIHRyYW5zYWN0aW9uXG4gKiBidWZmZXIncyBkaWZmIGJhc2UpIHN0YXlzIGV4YWN0bHkgd2hhdCBpdCB3YXMsIGFuZCBhIHdyaXRlIGNvc3RzIE8od2hhdCBpdFxuICogd3JvdGUpLCBub3QgTyhzdGF0ZSkuXG4gKi9cblxuaW1wb3J0IHsgbWVyZ2VDb250ZXh0V2lucywgb3duZWRSb290T2YsIG93blNwaW5lIH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5UGF0Y2gsIFRyYWNlRW50cnkgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGdldE5lc3RlZFZhbHVlLCBnZXRSdW5BbmRHbG9iYWxQYXRocywgbmV4dEdlbmVyYXRpb24sIHNldE5lc3RlZFZhbHVlLCB1cGRhdGVOZXN0ZWRWYWx1ZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgU2hhcmVkTWVtb3J5IHtcbiAgcHJpdmF0ZSBjb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZXM/OiB1bmtub3duO1xuXG4gIGNvbnN0cnVjdG9yKGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLCBpbml0aWFsQ29udGV4dD86IHVua25vd24pIHtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWVzID0gZGVmYXVsdFZhbHVlcztcbiAgICBjb25zdCBzZWVkID0gbWVyZ2VDb250ZXh0V2lucyhpbml0aWFsQ29udGV4dCB8fCB7fSwgZGVmYXVsdFZhbHVlcyB8fCB7fSk7XG4gICAgLy8gRGV0YWNoZWQgT05DRSwgaGVyZTogYG1lcmdlQ29udGV4dFdpbnNgIGNvcGllcyBvbmx5IHRoZSB0b3AgbGV2ZWwsIHNvXG4gICAgLy8gdGhlIHNlZWQncyBuZXN0ZWQgdmFsdWVzIGFyZSB0aGUgY2FsbGVyJ3Mgb3duIG9iamVjdHMuIEJlZm9yZSA5LjI5LjBcbiAgICAvLyB0aGUgZmlyc3QgY29tbWl0J3Mgd2hvbGUtc3RhdGUgY2xvbmUgZGV0YWNoZWQgdGhlbSAoYW5kIHVudGlsIHRoZW4gYVxuICAgIC8vIGNhbGxlciBtdXRhdGluZyBpdHMgYGluaXRpYWxDb250ZXh0YCBjaGFuZ2VkIGxpdmUgc3RhdGUgd2l0aCBubyByb3cpO1xuICAgIC8vIG5vdGhpbmcgcmUtY2xvbmVzIHRoZSBzdGF0ZSBhbnkgbW9yZSwgc28gdGhlIHNlZWQgaXMgZGV0YWNoZWQgYXRcbiAgICAvLyBjb25zdHJ1Y3Rpb24g4oCUIG9uZSBjbG9uZSBwZXIgcnVudGltZSwgbm90IG9uZSBwZXIgY29tbWl0LlxuICAgIHRoaXMuY29udGV4dCA9IE9iamVjdC5rZXlzKHNlZWQpLmxlbmd0aCA+IDAgPyBzdHJ1Y3R1cmVkQ2xvbmUoc2VlZCkgOiBzZWVkO1xuICB9XG5cbiAgLyoqIEdldHMgYSBjbG9uZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZXMuICovXG4gIGdldERlZmF1bHRWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZXMgPyBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5fZGVmYXVsdFZhbHVlcykgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVXBkYXRlcyBhIHZhbHVlIGF0IGBhZGRyZXNzYCArIGBwYXRoYCB1c2luZyBtZXJnZSBzZW1hbnRpY3MsIGFzIGEgbmV3IGdlbmVyYXRpb24gKHBhdGggY29weSArIHN3YXApLiAqL1xuICB1cGRhdGVWYWx1ZShhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSwgcGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLm93bmVkUGF0aFRvKGFkZHJlc3MsIHBhdGgsIGtleSk7XG4gICAgdXBkYXRlTmVzdGVkVmFsdWUobmV4dCwgYWRkcmVzcywgcGF0aCwga2V5LCB2YWx1ZSwgdGhpcy5nZXREZWZhdWx0VmFsdWVzKCkpO1xuICAgIHRoaXMuY29udGV4dCA9IG5leHQ7XG4gIH1cblxuICAvKiogU2V0cyBhIHZhbHVlIGF0IGBhZGRyZXNzYCArIGBwYXRoYCB1c2luZyBvdmVyd3JpdGUgc2VtYW50aWNzLCBhcyBhIG5ldyBnZW5lcmF0aW9uIChwYXRoIGNvcHkgKyBzd2FwKS4gKi9cbiAgc2V0VmFsdWUoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sIHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5vd25lZFBhdGhUbyhhZGRyZXNzLCBwYXRoLCBrZXkpO1xuICAgIHNldE5lc3RlZFZhbHVlKG5leHQsIGFkZHJlc3MsIHBhdGgsIGtleSwgdmFsdWUsIHRoaXMuZ2V0RGVmYXVsdFZhbHVlcygpKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY29weSBvZiB0aGUgY3VycmVudCBnZW5lcmF0aW9uJ3Mgcm9vdCB3aG9zZSBjb250YWluZXJzIG9uIHRoZSB3YXkgdG9cbiAgICogYGtleWAgYXJlIG93bmVkIOKAlCB0aGUgaW4tcGxhY2UgaGVscGVycyBhYm92ZSB0aGVuIGVkaXQgb25seSBjb3BpZXMuXG4gICAqL1xuICBwcml2YXRlIG93bmVkUGF0aFRvKGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdLCBwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBvd25lZCA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKTtcbiAgICBjb25zdCByb290ID0gb3duZWRSb290T2YodGhpcy5jb250ZXh0LCBvd25lZCk7XG4gICAgY29uc3QgeyBydW5QYXRoLCBnbG9iYWxQYXRoIH0gPSBnZXRSdW5BbmRHbG9iYWxQYXRocyhhZGRyZXNzLCBwYXRoKTtcbiAgICBvd25TcGluZShyb290LCBbLi4uKHJ1blBhdGggfHwgZ2xvYmFsUGF0aCksIGtleV0sIG93bmVkKTtcbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhIHZhbHVlIGZyb20gdGhlIHN0b3JlLlxuICAgKiBMb29rcyB1cCBhdCBgYWRkcmVzc2AgZmlyc3QsIGZhbGxzIGJhY2sgdG8gdGhlIHJvb3QuXG4gICAqL1xuICBnZXRWYWx1ZShhZGRyZXNzPzogcmVhZG9ubHkgc3RyaW5nW10sIHBhdGg/OiBzdHJpbmdbXSwga2V5Pzogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCB7IGdsb2JhbFBhdGgsIHJ1blBhdGggfSA9IGdldFJ1bkFuZEdsb2JhbFBhdGhzKGFkZHJlc3MsIHBhdGgpO1xuICAgIGNvbnN0IHZhbHVlID0gcnVuUGF0aCA/IGdldE5lc3RlZFZhbHVlKHRoaXMuY29udGV4dCwgcnVuUGF0aCwga2V5KSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyA/IHZhbHVlIDogZ2V0TmVzdGVkVmFsdWUodGhpcy5jb250ZXh0LCBnbG9iYWxQYXRoLCBrZXkpO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGVudGlyZSBzdGF0ZSBhcyBhIEpTT04gb2JqZWN0IOKAlCB0aGUgY3VycmVudCBnZW5lcmF0aW9uLCBieSByZWZlcmVuY2UuIE5ldmVyIG11dGF0ZSBpdC4gKi9cbiAgZ2V0U3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICAvKiogQXBwbGllcyBhIGNvbW1pdCBidW5kbGUgZnJvbSBUcmFuc2FjdGlvbkJ1ZmZlcjogYnVpbGRzIHRoZSBuZXh0IGdlbmVyYXRpb24gYW5kIHN3YXBzIGl0IGluLiAqL1xuICBhcHBseVBhdGNoKG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2gsIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLCB0cmFjZTogVHJhY2VFbnRyeVtdKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0ID0gbmV4dEdlbmVyYXRpb24odGhpcy5jb250ZXh0LCB1cGRhdGVzLCBvdmVyd3JpdGUsIHRyYWNlKTtcbiAgfVxufVxuIl19
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhcmVkTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvU2hhcmVkTWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRzs7O0FBRUgsNkNBQXVFO0FBRXZFLHlDQUFxSDtBQUVySCxNQUFhLFlBQVk7SUFDZixPQUFPLEdBQTJCLEVBQUUsQ0FBQztJQUNyQyxjQUFjLENBQVc7SUFFakMsWUFBWSxhQUF1QixFQUFFLGNBQXdCO1FBQzNELElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUEsNkJBQWdCLEVBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsd0VBQXdFO1FBQ3hFLHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLG1FQUFtRTtRQUNuRSw0REFBNEQ7UUFDNUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdFLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEYsQ0FBQztJQUVELDJHQUEyRztJQUMzRyxXQUFXLENBQUMsT0FBMEIsRUFBRSxJQUFjLEVBQUUsR0FBVyxFQUFFLEtBQWM7UUFDakYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELElBQUEsNEJBQWlCLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCw0R0FBNEc7SUFDNUcsUUFBUSxDQUFDLE9BQTBCLEVBQUUsSUFBYyxFQUFFLEdBQVcsRUFBRSxLQUFjO1FBQzlFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRCxJQUFBLHlCQUFjLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxXQUFXLENBQUMsT0FBMEIsRUFBRSxJQUFjLEVBQUUsR0FBVztRQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUEsd0JBQVcsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBQSwrQkFBb0IsRUFBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEUsSUFBQSxxQkFBUSxFQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLE9BQTJCLEVBQUUsSUFBZSxFQUFFLEdBQVk7UUFDakUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFBLCtCQUFvQixFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUEseUJBQWMsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQy9FLE9BQU8sT0FBTyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUEseUJBQWMsRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsc0dBQXNHO0lBQ3RHLFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELGtHQUFrRztJQUNsRyxVQUFVLENBQUMsU0FBc0IsRUFBRSxPQUFvQixFQUFFLEtBQW1CO1FBQzFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBQSx5QkFBYyxFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBQ0Y7QUFsRUQsb0NBa0VDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFyZWRNZW1vcnkg4oCUIFRoZSBzaGFyZWQgc3RhdGUgY29udGFpbmVyIGZvciBhbGwgZmxvd2NoYXJ0IGV4ZWN1dGlvblxuICpcbiAqIExpa2UgYSBydW50aW1lIGhlYXAgd2l0aCBuYW1lc3BhY2UgaXNvbGF0aW9uOlxuICogLSBBIHZhbHVlIGlzIHdyaXR0ZW4gYXQgYW4gQUREUkVTUyDigJQgYSBwYXRoIHByZWZpeCB0aGUgY2FsbGVyIGNvbXB1dGVkXG4gKiAgIChDMjogdGhlIGVuZ2luZSdzIGZyYW1lIGRlY2lkZXMgaXQsIGBydW5BZGRyZXNzLnRzIMK3IHJ1bkFkZHJlc3NgKSDigJQgYW5kIHJlYWRcbiAqICAgdGhlcmUgZmlyc3QsIHRoZW4gYXQgdGhlIHJvb3RcbiAqIC0gRGVmYXVsdCB2YWx1ZXMgc2VlZCB0aGUgcm9vdCwgYW5kIHRoZSBjb250YWluZXIgYXQgYW4gYWRkcmVzcyB3aGVuIGFcbiAqICAgd3JpdGUgY3JlYXRlcyBpdFxuICogLSBBY2NlcHRzIGNvbW1pdCBidW5kbGVzIGZyb20gVHJhbnNhY3Rpb25CdWZmZXJcbiAqXG4gKiBDT1BZLU9OLVdSSVRFICg5LjI5LjAg4oCUIGRvY3MvZGVzaWduLzIwMjYtMTAtY29weS1vbi13cml0ZS1jb21taXQubWQpOlxuICogYGNvbnRleHRgIGlzIGEgR0VORVJBVElPTiwgYW5kIGEgZ2VuZXJhdGlvbiBpcyBuZXZlciBlZGl0ZWQuIEV2ZXJ5IHdyaXRlIOKAlFxuICogYGFwcGx5UGF0Y2hgIChhIHN0YWdlIGNvbW1pdCksIGBzZXRWYWx1ZWAsIGB1cGRhdGVWYWx1ZWAg4oCUIGJ1aWxkcyB0aGUgbmV4dFxuICogZ2VuZXJhdGlvbiBieSBjb3B5aW5nIHRoZSByb290IGFuZCB0aGUgY29udGFpbmVycyBvbiBlYWNoIHdyaXR0ZW4gcGF0aCxcbiAqIHNoYXJlcyBldmVyeSBvdGhlciBzdWJ0cmVlIHdpdGggdGhlIGdlbmVyYXRpb24gYmVmb3JlIGl0LCBhbmQgc3dhcHMuIFNvIGFcbiAqIGdlbmVyYXRpb24gYSBzdGFnZSBjYXB0dXJlZCAoaXRzIGZpcnN0LXRvdWNoIHZpZXcsIGl0cyB0cmFuc2FjdGlvblxuICogYnVmZmVyJ3MgZGlmZiBiYXNlKSBzdGF5cyBleGFjdGx5IHdoYXQgaXQgd2FzLCBhbmQgYSB3cml0ZSBjb3N0cyBPKHdoYXQgaXRcbiAqIHdyb3RlKSwgbm90IE8oc3RhdGUpLlxuICovXG5cbmltcG9ydCB7IG1lcmdlQ29udGV4dFdpbnMsIG93bmVkUm9vdE9mLCBvd25TcGluZSB9IGZyb20gJy4vcGF0aE9wcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeVBhdGNoLCBUcmFjZUVudHJ5IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBnZXROZXN0ZWRWYWx1ZSwgZ2V0UnVuQW5kR2xvYmFsUGF0aHMsIG5leHRHZW5lcmF0aW9uLCBzZXROZXN0ZWRWYWx1ZSwgdXBkYXRlTmVzdGVkVmFsdWUgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IGNsYXNzIFNoYXJlZE1lbW9yeSB7XG4gIHByaXZhdGUgY29udGV4dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWVzPzogdW5rbm93bjtcblxuICBjb25zdHJ1Y3RvcihkZWZhdWx0VmFsdWVzPzogdW5rbm93biwgaW5pdGlhbENvbnRleHQ/OiB1bmtub3duKSB7XG4gICAgdGhpcy5fZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRWYWx1ZXM7XG4gICAgY29uc3Qgc2VlZCA9IG1lcmdlQ29udGV4dFdpbnMoaW5pdGlhbENvbnRleHQgfHwge30sIGRlZmF1bHRWYWx1ZXMgfHwge30pO1xuICAgIC8vIERldGFjaGVkIE9OQ0UsIGhlcmU6IGBtZXJnZUNvbnRleHRXaW5zYCBjb3BpZXMgb25seSB0aGUgdG9wIGxldmVsLCBzb1xuICAgIC8vIHRoZSBzZWVkJ3MgbmVzdGVkIHZhbHVlcyBhcmUgdGhlIGNhbGxlcidzIG93biBvYmplY3RzLiBCZWZvcmUgOS4yOS4wXG4gICAgLy8gdGhlIGZpcnN0IGNvbW1pdCdzIHdob2xlLXN0YXRlIGNsb25lIGRldGFjaGVkIHRoZW0gKGFuZCB1bnRpbCB0aGVuIGFcbiAgICAvLyBjYWxsZXIgbXV0YXRpbmcgaXRzIGBpbml0aWFsQ29udGV4dGAgY2hhbmdlZCBsaXZlIHN0YXRlIHdpdGggbm8gcm93KTtcbiAgICAvLyBub3RoaW5nIHJlLWNsb25lcyB0aGUgc3RhdGUgYW55IG1vcmUsIHNvIHRoZSBzZWVkIGlzIGRldGFjaGVkIGF0XG4gICAgLy8gY29uc3RydWN0aW9uIOKAlCBvbmUgY2xvbmUgcGVyIHJ1bnRpbWUsIG5vdCBvbmUgcGVyIGNvbW1pdC5cbiAgICB0aGlzLmNvbnRleHQgPSBPYmplY3Qua2V5cyhzZWVkKS5sZW5ndGggPiAwID8gc3RydWN0dXJlZENsb25lKHNlZWQpIDogc2VlZDtcbiAgfVxuXG4gIC8qKiBHZXRzIGEgY2xvbmUgb2YgdGhlIGRlZmF1bHQgdmFsdWVzLiAqL1xuICBnZXREZWZhdWx0VmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWVzID8gc3RydWN0dXJlZENsb25lKHRoaXMuX2RlZmF1bHRWYWx1ZXMpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFVwZGF0ZXMgYSB2YWx1ZSBhdCBgYWRkcmVzc2AgKyBgcGF0aGAgdXNpbmcgbWVyZ2Ugc2VtYW50aWNzLCBhcyBhIG5ldyBnZW5lcmF0aW9uIChwYXRoIGNvcHkgKyBzd2FwKS4gKi9cbiAgdXBkYXRlVmFsdWUoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sIHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5vd25lZFBhdGhUbyhhZGRyZXNzLCBwYXRoLCBrZXkpO1xuICAgIHVwZGF0ZU5lc3RlZFZhbHVlKG5leHQsIGFkZHJlc3MsIHBhdGgsIGtleSwgdmFsdWUsIHRoaXMuZ2V0RGVmYXVsdFZhbHVlcygpKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXh0O1xuICB9XG5cbiAgLyoqIFNldHMgYSB2YWx1ZSBhdCBgYWRkcmVzc2AgKyBgcGF0aGAgdXNpbmcgb3ZlcndyaXRlIHNlbWFudGljcywgYXMgYSBuZXcgZ2VuZXJhdGlvbiAocGF0aCBjb3B5ICsgc3dhcCkuICovXG4gIHNldFZhbHVlKGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdLCBwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMub3duZWRQYXRoVG8oYWRkcmVzcywgcGF0aCwga2V5KTtcbiAgICBzZXROZXN0ZWRWYWx1ZShuZXh0LCBhZGRyZXNzLCBwYXRoLCBrZXksIHZhbHVlLCB0aGlzLmdldERlZmF1bHRWYWx1ZXMoKSk7XG4gICAgdGhpcy5jb250ZXh0ID0gbmV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGNvcHkgb2YgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbidzIHJvb3Qgd2hvc2UgY29udGFpbmVycyBvbiB0aGUgd2F5IHRvXG4gICAqIGBrZXlgIGFyZSBvd25lZCDigJQgdGhlIGluLXBsYWNlIGhlbHBlcnMgYWJvdmUgdGhlbiBlZGl0IG9ubHkgY29waWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBvd25lZFBhdGhUbyhhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSwgcGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3Qgb3duZWQgPSBuZXcgV2Vha1NldDxvYmplY3Q+KCk7XG4gICAgY29uc3Qgcm9vdCA9IG93bmVkUm9vdE9mKHRoaXMuY29udGV4dCwgb3duZWQpO1xuICAgIGNvbnN0IHsgcnVuUGF0aCwgZ2xvYmFsUGF0aCB9ID0gZ2V0UnVuQW5kR2xvYmFsUGF0aHMoYWRkcmVzcywgcGF0aCk7XG4gICAgb3duU3BpbmUocm9vdCwgWy4uLihydW5QYXRoIHx8IGdsb2JhbFBhdGgpLCBrZXldLCBvd25lZCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgYSB2YWx1ZSBmcm9tIHRoZSBzdG9yZS5cbiAgICogTG9va3MgdXAgYXQgYGFkZHJlc3NgIGZpcnN0LCBmYWxscyBiYWNrIHRvIHRoZSByb290LlxuICAgKi9cbiAgZ2V0VmFsdWUoYWRkcmVzcz86IHJlYWRvbmx5IHN0cmluZ1tdLCBwYXRoPzogc3RyaW5nW10sIGtleT86IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgeyBnbG9iYWxQYXRoLCBydW5QYXRoIH0gPSBnZXRSdW5BbmRHbG9iYWxQYXRocyhhZGRyZXNzLCBwYXRoKTtcbiAgICBjb25zdCB2YWx1ZSA9IHJ1blBhdGggPyBnZXROZXN0ZWRWYWx1ZSh0aGlzLmNvbnRleHQsIHJ1blBhdGgsIGtleSkgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgPyB2YWx1ZSA6IGdldE5lc3RlZFZhbHVlKHRoaXMuY29udGV4dCwgZ2xvYmFsUGF0aCwga2V5KTtcbiAgfVxuXG4gIC8qKiBHZXRzIHRoZSBlbnRpcmUgc3RhdGUgYXMgYSBKU09OIG9iamVjdCDigJQgdGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiwgYnkgcmVmZXJlbmNlLiBOZXZlciBtdXRhdGUgaXQuICovXG4gIGdldFN0YXRlKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xuICB9XG5cbiAgLyoqIEFwcGxpZXMgYSBjb21taXQgYnVuZGxlIGZyb20gVHJhbnNhY3Rpb25CdWZmZXI6IGJ1aWxkcyB0aGUgbmV4dCBnZW5lcmF0aW9uIGFuZCBzd2FwcyBpdCBpbi4gKi9cbiAgYXBwbHlQYXRjaChvdmVyd3JpdGU6IE1lbW9yeVBhdGNoLCB1cGRhdGVzOiBNZW1vcnlQYXRjaCwgdHJhY2U6IFRyYWNlRW50cnlbXSk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dCA9IG5leHRHZW5lcmF0aW9uKHRoaXMuY29udGV4dCwgdXBkYXRlcywgb3ZlcndyaXRlLCB0cmFjZSk7XG4gIH1cbn1cbiJdfQ==