@workflow/core 5.0.0-beta.44 → 5.0.0-beta.47

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 (78) hide show
  1. package/dist/attribute-changes.d.ts +3 -5
  2. package/dist/attribute-changes.d.ts.map +1 -1
  3. package/dist/attribute-changes.js +2 -2
  4. package/dist/capabilities.d.ts +6 -5
  5. package/dist/capabilities.d.ts.map +1 -1
  6. package/dist/capabilities.js +14 -12
  7. package/dist/events-consumer.d.ts +30 -7
  8. package/dist/events-consumer.d.ts.map +1 -1
  9. package/dist/events-consumer.js +67 -11
  10. package/dist/flushable-stream.js +2 -2
  11. package/dist/global.d.ts +3 -1
  12. package/dist/global.d.ts.map +1 -1
  13. package/dist/global.js +8 -5
  14. package/dist/private.d.ts +20 -14
  15. package/dist/private.d.ts.map +1 -1
  16. package/dist/private.js +67 -29
  17. package/dist/replay-payload-cache.d.ts +13 -17
  18. package/dist/replay-payload-cache.d.ts.map +1 -1
  19. package/dist/replay-payload-cache.js +55 -57
  20. package/dist/runtime/constants.d.ts +3 -3
  21. package/dist/runtime/constants.d.ts.map +1 -1
  22. package/dist/runtime/constants.js +4 -4
  23. package/dist/runtime/helpers.d.ts +15 -34
  24. package/dist/runtime/helpers.d.ts.map +1 -1
  25. package/dist/runtime/helpers.js +18 -43
  26. package/dist/runtime/quickjs-entrypoint.d.ts.map +1 -1
  27. package/dist/runtime/quickjs-entrypoint.js +8 -1
  28. package/dist/runtime/quickjs-runtime.js +7 -1
  29. package/dist/runtime/resume-hook.d.ts +20 -12
  30. package/dist/runtime/resume-hook.d.ts.map +1 -1
  31. package/dist/runtime/resume-hook.js +195 -249
  32. package/dist/runtime/resume-latency.d.ts +13 -6
  33. package/dist/runtime/resume-latency.d.ts.map +1 -1
  34. package/dist/runtime/resume-latency.js +4 -2
  35. package/dist/runtime/run.d.ts +1 -1
  36. package/dist/runtime/run.d.ts.map +1 -1
  37. package/dist/runtime/run.js +3 -2
  38. package/dist/runtime/start.js +12 -10
  39. package/dist/runtime/step-latency.d.ts +31 -14
  40. package/dist/runtime/step-latency.d.ts.map +1 -1
  41. package/dist/runtime/step-latency.js +19 -13
  42. package/dist/runtime/suspension-handler.d.ts +9 -7
  43. package/dist/runtime/suspension-handler.d.ts.map +1 -1
  44. package/dist/runtime/suspension-handler.js +41 -41
  45. package/dist/runtime/vm-mode.d.ts +1 -1
  46. package/dist/runtime/vm-mode.d.ts.map +1 -1
  47. package/dist/runtime/vm-mode.js +1 -1
  48. package/dist/runtime.d.ts.map +1 -1
  49. package/dist/runtime.js +278 -125
  50. package/dist/serialization/hardened.d.ts +5 -4
  51. package/dist/serialization/hardened.d.ts.map +1 -1
  52. package/dist/serialization/hardened.js +7 -1
  53. package/dist/serialization-format.js +2 -2
  54. package/dist/serialization.d.ts +8 -9
  55. package/dist/serialization.d.ts.map +1 -1
  56. package/dist/serialization.js +32 -25
  57. package/dist/step.d.ts.map +1 -1
  58. package/dist/step.js +3 -11
  59. package/dist/telemetry/semantic-conventions.d.ts +51 -8
  60. package/dist/telemetry/semantic-conventions.d.ts.map +1 -1
  61. package/dist/telemetry/semantic-conventions.js +38 -5
  62. package/dist/telemetry.d.ts +12 -0
  63. package/dist/telemetry.d.ts.map +1 -1
  64. package/dist/telemetry.js +62 -2
  65. package/dist/version.d.ts +1 -1
  66. package/dist/version.js +2 -2
  67. package/dist/vm/script-cache.d.ts +9 -11
  68. package/dist/vm/script-cache.d.ts.map +1 -1
  69. package/dist/vm/script-cache.js +25 -40
  70. package/dist/workflow/attribute-dispatcher.d.ts.map +1 -1
  71. package/dist/workflow/attribute-dispatcher.js +3 -6
  72. package/dist/workflow/hook.d.ts.map +1 -1
  73. package/dist/workflow/hook.js +6 -15
  74. package/dist/workflow.d.ts +16 -0
  75. package/dist/workflow.d.ts.map +1 -1
  76. package/dist/workflow.js +73 -29
  77. package/docs/foundations/errors-and-retries.mdx +1 -1
  78. package/package.json +6 -6
@@ -22,10 +22,11 @@ import type { HookResumeTiming } from '@workflow/world';
22
22
  * T7 immediately before stepFn.apply()
23
23
  * ```
24
24
  *
25
- * The producer's direct `hook_received` POST races the queue publish on the
26
- * parallel fast path, so it deliberately has no phase of its own: the two
27
- * overlap, and representing both as additive phases would double-count. It
28
- * remains visible as a contextual span (`hook.resume`).
25
+ * The producer's `hook_received` write is awaited inside `producer_prep`
26
+ * (the wake is only published after it commits). Older producers may report
27
+ * `lazy`, where the consumer materializes the event from `hookInput`, or
28
+ * `parallel`, where the write raced the publish. The write has no phase of
29
+ * its own; it remains visible as a contextual span (`hook.resume`).
29
30
  *
30
31
  * T0/T1 are stamped on the producer's machine and T2..T7 on the consumer's, so
31
32
  * the measurement is subject to cross-machine clock skew. Rather than clamp
@@ -35,8 +36,14 @@ import type { HookResumeTiming } from '@workflow/world';
35
36
  */
36
37
  /** What caused the resumption being measured. Only hooks are measured today. */
37
38
  export type ResumeTrigger = 'hook';
38
- /** Which `resumeHook()` dispatch path produced this resume. */
39
- export type ResumeStrategy = 'parallel' | 'sequential';
39
+ /**
40
+ * Which `resumeHook()` dispatch path produced this resume.
41
+ *
42
+ * Current producers always send `sequential` (durable write, then wake).
43
+ * Older producers may send `lazy` (the consumer materializes the event from
44
+ * `hookInput`) or `parallel` (the write raced the publish).
45
+ */
46
+ export type ResumeStrategy = 'lazy' | 'parallel' | 'sequential';
40
47
  /**
41
48
  * How the consuming invocation initialized its replay state:
42
49
  *
@@ -1 +1 @@
1
- {"version":3,"file":"resume-latency.d.ts","sourceRoot":"","sources":["../../src/runtime/resume-latency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,+DAA+D;AAC/D,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;AAE9E,gFAAgF;AAChF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE1D;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,qCAAqC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8DAA8D;IAC9D,yBAAyB,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,aAAa,EAAE,mBAAmB,CAAC;IACnC;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,aAAa,EAAE,mBAAmB,GACjC,iBAAiB,GAAG,SAAS,CAgC/B;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GACtC,gBAAgB,GAAG,SAAS,CAkB9B;AA6CD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACxC,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,kEAAkE;IAClE,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,4DAA4D;IAC5D,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,SAAS,CAoD9C"}
1
+ {"version":3,"file":"resume-latency.d.ts","sourceRoot":"","sources":["../../src/runtime/resume-latency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,aAAa,GAAG,YAAY,CAAC;AAE9E,gFAAgF;AAChF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE1D;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,qCAAqC;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8DAA8D;IAC9D,yBAAyB,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,aAAa,EAAE,mBAAmB,CAAC;IACnC;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,aAAa,EAAE,mBAAmB,GACjC,iBAAiB,GAAG,SAAS,CAkC/B;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,GACtC,gBAAgB,GAAG,SAAS,CAkB9B;AA6CD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACxC,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,kEAAkE;IAClE,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,4DAA4D;IAC5D,mBAAmB,EAAE,MAAM,CAAC;CAC7B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,SAAS,CAoD9C"}
@@ -13,7 +13,9 @@ export function resumeTrackingFromMessage(timing, stepExecution) {
13
13
  }
14
14
  return {
15
15
  trigger: 'hook',
16
- ...(timing.strategy === 'parallel' || timing.strategy === 'sequential'
16
+ ...(timing.strategy === 'lazy' ||
17
+ timing.strategy === 'parallel' ||
18
+ timing.strategy === 'sequential'
17
19
  ? { strategy: timing.strategy }
18
20
  : {}),
19
21
  resumeRequestedAtMs: timing.resumeRequestedAtMs,
@@ -150,4 +152,4 @@ export function computeResumeTtrAttributes(params) {
150
152
  ...Attribute.ResumeStepExecution(tracking.stepExecution),
151
153
  };
152
154
  }
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdW1lLWxhdGVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9yZXN1bWUtbGF0ZW5jeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssU0FBUyxNQUFNLHNDQUFzQyxDQUFDO0FBNEdsRTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxNQUFvQyxFQUNwQyxhQUFrQztJQUVsQyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzlCLElBQ0UsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztRQUM1QyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQ2xELENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssVUFBVSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssWUFBWTtZQUNwRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUMvQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLG1CQUFtQjtRQUMvQyx5QkFBeUIsRUFBRSxNQUFNLENBQUMseUJBQXlCO1FBQzNELHVFQUF1RTtRQUN2RSx1RUFBdUU7UUFDdkUsOERBQThEO1FBQzlELG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLENBQUMsR0FBRztRQUM3RCxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixLQUFLLFNBQVM7WUFDeEMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFO1lBQ2pELENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxHQUFHLENBQUMs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cG9ydCB0eXBlIHsgSG9va1Jlc3VtZVRpbWluZyB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgKiBhcyBBdHRyaWJ1dGUgZnJvbSAnLi4vdGVsZW1ldHJ5L3NlbWFudGljLWNvbnZlbnRpb25zLmpzJztcblxuLyoqXG4gKiBIb29rLXRyaWdnZXJlZCB0aW1lLXRvLXJlc3VtZSAoVFRSKTogd2FsbC1jbG9jayBmcm9tIGVudHJ5IGludG9cbiAqIGByZXN1bWVIb29rKClgIChUMCkgdG8gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIG5leHQgZHVyYWJsZSBzdGVwIChUNyksIHBsdXMgYVxuICogZGVjb21wb3NpdGlvbiBpbnRvIG5vbi1vdmVybGFwcGluZyBwaGFzZXMgdGhhdCBzdW0gZXhhY3RseSB0byBpdC5cbiAqXG4gKiBgYGB0ZXh0XG4gKiBUMCByZXN1bWVIb29rKCkgZW50ZXJlZFxuICogICAgICBwcm9kdWNlcl9wcmVwICAgOiBob29rIGxvb2t1cCwgc2VyaWFsaXphdGlvbiwgZW5jcnlwdGlvblxuICogVDEgcXVldWUgcHVibGlzaCByZXF1ZXN0ZWRcbiAqICAgICAgcXVldWVfZGVsaXZlcnkgIDogbmV0d29yayArIFZRUyBkZWxpdmVyeSAoaW5jbC4gYW55IGFmZmluaXR5IHJlLXJvdXRlKVxuICogVDIgZmluYWwgY29uc3VtZXIncyBxdWV1ZSBoYW5kbGVyIGVudGVyZWRcbiAqICAgICAgcmVzdW1lX3NldHVwICAgIDogYWZmaW5pdHkgY2hlY2ssIGhvb2tfcmVjZWl2ZWQgcmUtZW5zdXJlLCByZXBsYXkgcHJlbG9hZFxuICogVDMgcmVwbGF5IGJlZ2luc1xuICogICAgICByZXBsYXkgICAgICAgICAgOiBWTS9zZXNzaW9uIGNyZWF0aW9uIGFuZCB3b3JrZmxvdyByZXBsYXlcbiAqIFQ0IG5leHQgZHVyYWJsZSBzdGVwIGVuY291bnRlcmVkXG4gKiAgICAgIHN0ZXBfZGlzcGF0Y2ggICA6IHN1c3BlbnNpb24gaGFuZGxpbmcsIGlubGluZSBiYXRjaCBvciBxdWV1ZSBkaXNwYXRjaFxuICogVDUgc3RlcF9zdGFydGVkIHJlcXVlc3QgYmVnaW5zXG4gKiAgICAgIHN0ZXBfY2xhaW0gICAgICA6IHRoZSBjbGFpbSByb3VuZCB0cmlwXG4gKiBUNiBzdGVwX3N0YXJ0ZWQgcmVzcG9uc2UgcmV0dXJuZWRcbiAqICAgICAgc3RlcF9wcmVwYXJlICAgIDoga2V5IHJlc29sdXRpb24sIGFyZ3VtZW50IGh5ZHJhdGlvbiwgY29udGV4dCBzZXR1cFxuICogVDcgaW1tZWRpYXRlbHkgYmVmb3JlIHN0ZXBGbi5hcHBseSgpXG4gKiBgYGBcbiAqXG4gKiBUaGUgcHJvZHVjZXIncyBkaXJlY3QgYGhvb2tfcmVjZWl2ZWRgIFBPU1QgcmFjZXMgdGhlIHF1ZXVlIHB1Ymxpc2ggb24gdGhlXG4gKiBwYXJhbGxlbCBmYXN0IHBhdGgsIHNvIGl0IGRlbGliZXJhdGVseSBoYXMgbm8gcGhhc2Ugb2YgaXRzIG93bjogdGhlIHR3b1xuICogb3ZlcmxhcCwgYW5kIHJlcHJlc2VudGluZyBib3RoIGFzIGFkZGl0aXZlIHBoYXNlcyB3b3VsZCBkb3VibGUtY291bnQuIEl0XG4gKiByZW1haW5zIHZpc2libGUgYXMgYSBjb250ZXh0dWFsIHNwYW4gKGBob29rLnJlc3VtZWApLlxuICpcbiAqIFQwL1QxIGFyZSBzdGFtcGVkIG9uIHRoZSBwcm9kdWNlcidzIG1hY2hpbmUgYW5kIFQyLi5UNyBvbiB0aGUgY29uc3VtZXIncywgc29cbiAqIHRoZSBtZWFzdXJlbWVudCBpcyBzdWJqZWN0IHRvIGNyb3NzLW1hY2hpbmUgY2xvY2sgc2tldy4gUmF0aGVyIHRoYW4gY2xhbXBcbiAqICh3aGljaCB3b3VsZCBicmVhayB0aGUgc3VtLWVxdWFscy10b3RhbCBwcm9wZXJ0eSB0aGlzIGRlY29tcG9zaXRpb24gZXhpc3RzXG4gKiBmb3IpLCBhIG5vbi1tb25vdG9uaWMgYm91bmRhcnkgc2V0IGRyb3BzIHRoZSB3aG9sZSBzYW1wbGU7IHNlZVxuICoge0BsaW5rIGNvbXB1dGVSZXN1bWVUdHJBdHRyaWJ1dGVzfS5cbiAqL1xuXG4vKiogV2hhdCBjYXVzZWQgdGhlIHJlc3VtcHRpb24gYmVpbmcgbWVhc3VyZWQuIE9ubHkgaG9va3MgYXJlIG1lYXN1cmVkIHRvZGF5LiAqL1xuZXhwb3J0IHR5cGUgUmVzdW1lVHJpZ2dlciA9ICdob29rJztcblxuLyoqIFdoaWNoIGByZXN1bWVIb29rKClgIGRpc3BhdGNoIHBhdGggcHJvZHVjZWQgdGhpcyByZXN1bWUuICovXG5leHBvcnQgdHlwZSBSZXN1bWVTdHJhdGVneSA9ICdwYXJhbGxlbCcgfCAnc2VxdWVudGlhbCc7XG5cbi8qKlxuICogSG93IHRoZSBjb25zdW1pbmcgaW52b2NhdGlvbiBpbml0aWFsaXplZCBpdHMgcmVwbGF5IHN0YXRlOlxuICpcbiAqIC0gYGhvb2tfcHJlbG9hZGA6IHRoZSBob2lzdGVkIGBob29rX3JlY2VpdmVkYCB3cml0ZSByZXR1cm5lZCBhIHVzYWJsZVxuICogICByZXBsYXkgcHJlbG9hZCwgc28gbmVpdGhlciBgcnVuX3N0YXJ0ZWRgIG5vciB0aGUgaW5pdGlhbCBgZXZlbnRzLmxpc3RgIHJhbi5cbiAqIC0gYHJ1bl9zdGFydGVkYDogdGhlIGdlbmVyaWMgYHJ1bl9zdGFydGVkYCBzZXR1cCByYW4gKGluY2x1ZGluZyB0aGUgZmFzdFxuICogICBwYXRoJ3MgZmFsbGJhY2ssIHdoZXJlIHRoZSBob2lzdGVkIHdyaXRlIHN1Y2NlZWRlZCBidXQgcmV0dXJuZWQgbm8gdXNhYmxlXG4gKiAgIHByZWxvYWQpLlxuICogLSBgZXZlbnRfbG9hZGA6IG5laXRoZXIgc2V0dXAgcmFuIGJlY2F1c2UgdGhlIHJ1biBhcnJpdmVkIGFscmVhZHkgbG9hZGVkLFxuICogICBzbyBzZXR1cCB3YXMgYSBwbGFpbiBldmVudCBsb2FkLiBObyBjdXJyZW50IHBhdGggcHJvZHVjZXMgaXQgKHRoZSBvbmVcbiAqICAgcHJlbG9hZGVkLXJ1biBwYXRoLCB0aGUgYmFja2dyb3VuZC1zdGVwIGZhbGwtdGhyb3VnaCwgY29uc3VtZXMgdGhlXG4gKiAgIHRyYWNraW5nIG9uIGl0cyBvd24gc3RlcCBmaXJzdCk7IGl0IGlzIHRoZSBob25lc3QgZGVmYXVsdCByYXRoZXIgdGhhbiBhXG4gKiAgIGxpdmUgdmFsdWUsIGFuZCBrZWVwcyB0aGUgZGltZW5zaW9uIHRvdGFsIGlmIHN1Y2ggYSBwYXRoIGlzIGFkZGVkLlxuICovXG5leHBvcnQgdHlwZSBSZXN1bWVTZXR1cFNvdXJjZSA9ICdob29rX3ByZWxvYWQnIHwgJ3J1bl9zdGFydGVkJyB8ICdldmVudF9sb2FkJztcblxuLyoqIFdoZXRoZXIgdGhlIG1lYXN1cmVkIHN0ZXAgcmFuIGluIHRoZSByZXN1bWluZyBpbnZvY2F0aW9uIG9yIGEgcXVldWVkIG9uZS4gKi9cbmV4cG9ydCB0eXBlIFJlc3VtZVN0ZXBFeGVjdXRpb24gPSAnaW5saW5lJyB8ICdkaXNwYXRjaGVkJztcblxuLyoqXG4gKiBUaGUgcmVzdW1lIGJvdW5kYXJpZXMgb2JzZXJ2ZWQgc28gZmFyLCB0aHJlYWRlZCBmcm9tIHRoZSBxdWV1ZSBoYW5kbGVyIGludG9cbiAqIGBleGVjdXRlU3RlcGAuIFByb2R1Y2VyIGZpZWxkcyBhcnJpdmUgb24gdGhlIHF1ZXVlIG1lc3NhZ2VcbiAqICh7QGxpbmsgSG9va1Jlc3VtZVRpbWluZ30pOyBjb25zdW1lciBmaWVsZHMgYXJlIHN0YW1wZWQgYnkgdGhlIGludm9jYXRpb25cbiAqIHRoYXQgcmVwbGF5cyB0aGUgcmVzdW1lLlxuICpcbiAqIFRoZSBydW50aW1lIGhvbGRzIGF0IG1vc3Qgb25lIG9mIHRoZXNlIHBlciBpbnZvY2F0aW9uIGFuZCBDT05TVU1FUyBpdCB3aGVuXG4gKiBpdCBoYW5kcyBpdCB0byB0aGUgZXhlY3V0aW9uIHRoYXQgd2lsbCBhdHRlbXB0IHRoZSBuZXh0IGR1cmFibGUgc3RlcCwgc28gYVxuICogbGF0ZXIgc3RlcCBpbiB0aGUgc2FtZSBpbnZvY2F0aW9uIChvciBhIHJldHJ5IG9mIHRoZSBzYW1lIHN0ZXApIG5ldmVyXG4gKiByZS1yZXBvcnRzIHRoZSBzYW1lIHJlc3VtcHRpb24uIFdpdGhpbiBvbmUgaW5saW5lIGJhdGNoIHRoZSBvYmplY3QgaXNcbiAqIHNoYXJlZCBieSBldmVyeSBzdGVwIGFuZCB0aGUge0BsaW5rIFJlc3VtZVR0clRyYWNraW5nLnJlcG9ydGVkfSBsYXRjaCBwaWNrc1xuICogdGhlIHNpbmdsZSByZXBvcnRlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN1bWVUdHJUcmFja2luZyB7XG4gIHRyaWdnZXI6IFJlc3VtZVRyaWdnZXI7XG4gIC8qKiBBYnNlbnQgb25seSBpZiBhbiBvbGRlciBwcm9kdWNlciBvbWl0dGVkIGl0IGZyb20gdGhlIHF1ZXVlIG1lc3NhZ2UuICovXG4gIHN0cmF0ZWd5PzogUmVzdW1lU3RyYXRlZ3k7XG4gIC8qKiBUMDogZW50cnkgaW50byBgcmVzdW1lSG9vaygpYC4gKi9cbiAgcmVzdW1lUmVxdWVzdGVkQXRNczogbnVtYmVyO1xuICAvKiogVDE6IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgcXVldWUgcHVibGlzaCB3YXMgcmVxdWVzdGVkLiAqL1xuICBxdWV1ZVB1Ymxpc2hSZXF1ZXN0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUMjogZW50cnkgaW50byB0aGUgRklOQUwgY29uc3VtZXIncyBxdWV1ZSBoYW5kbGVyLiBBIGRlbGl2ZXJ5IHRoYXRcbiAgICogcmUtcm91dGVzIGZvciBkZXBsb3ltZW50IGFmZmluaXR5IG5ldmVyIHN0YW1wcyB0aGlzLCBzbyB0aGUgcmUtcm91dGVkIGhvcFxuICAgKiBzdGF5cyBpbnNpZGUgYHF1ZXVlX2RlbGl2ZXJ5YCB3aGVyZSBpdCBiZWxvbmdzLlxuICAgKi9cbiAgY29uc3VtZXJTdGFydGVkQXRNczogbnVtYmVyO1xuICAvKiogVDM6IHRoaXMgaW52b2NhdGlvbidzIGZpcnN0IHJlcGxheSBwYXNzLiAqL1xuICByZXBsYXlTdGFydGVkQXRNcz86IG51bWJlcjtcbiAgLyoqIFQ0OiByZXBsYXkgZmlyc3QgZW5jb3VudGVyZWQgYSBkdXJhYmxlIHN0ZXAgYWZ0ZXIgdGhlIHJlc3VtZS4gKi9cbiAgbmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXM/OiBudW1iZXI7XG4gIHNldHVwU291cmNlPzogUmVzdW1lU2V0dXBTb3VyY2U7XG4gIHN0ZXBFeGVjdXRpb246IFJlc3VtZVN0ZXBFeGVjdXRpb247XG4gIC8qKlxuICAgKiBPbmUtc2hvdCBsYXRjaCwgc2V0IGJ5IHRoZSBzdGVwIGV4ZWN1dG9yIG9uY2UgdGhpcyByZXN1bXB0aW9uIGhhcyBiZWVuXG4gICAqIHJlcG9ydGVkLiBFdmVyeSBzdGVwIG9mIGFuIGlubGluZSBiYXRjaCBpcyBoYW5kZWQgdGhlIFNBTUUgdHJhY2tpbmdcbiAgICogb2JqZWN0LCBzbyB0aGUgZmlyc3Qgb25lIHRvIHJlYWNoIHVzZXIgY29kZSB0YWtlcyB0aGUgbWVhc3VyZW1lbnQgYW5kIHRoZVxuICAgKiByZXN0IHNlZSB0aGlzIGFuZCBza2lwOiBvbmUgcmVzdW1wdGlvbiwgb25lIHNhbXBsZSwgd2l0aG91dCBwaW5uaW5nIHRoZVxuICAgKiBzYW1wbGUgdG8gYSBzdGVwIHRoYXQgbWF5IGxvc2UgaXRzIGNyZWF0ZS1jbGFpbSBhbmQgbmV2ZXIgcnVuLlxuICAgKlxuICAgKiBEZWxpYmVyYXRlbHkgbm90IHBhcnQgb2Yge0BsaW5rIEhvb2tSZXN1bWVUaW1pbmd9OiBpdCBpcyBpbnZvY2F0aW9uLWxvY2FsXG4gICAqIHN0YXRlLCBhbmQgYSBxdWV1ZSBtZXNzYWdlIGNhcnJpZXMgdGhlIGJvdW5kYXJpZXMsIG5vdCB0aGUgY2xhaW0uXG4gICAqL1xuICByZXBvcnRlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVidWlsZCB0cmFja2luZyBmcm9tIGEgcXVldWUgbWVzc2FnZSdzIHRpbWluZyBvYmplY3QuIFJldHVybnMgdW5kZWZpbmVkIGZvclxuICogYSBtZXNzYWdlIHRoYXQgY2FycmllcyBub25lIChhbiBvbGRlciBwcm9kdWNlciwgb3IgYW55IG5vbi1ob29rIGRlbGl2ZXJ5KTtcbiAqIHRoZSBjYWxsZXIgdGhlbiByZXBvcnRzIG5vIFRUUi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc3VtZVRyYWNraW5nRnJvbU1lc3NhZ2UoXG4gIHRpbWluZzogSG9va1Jlc3VtZVRpbWluZyB8IHVuZGVmaW5lZCxcbiAgc3RlcEV4ZWN1dGlvbjogUmVzdW1lU3RlcEV4ZWN1dGlvblxuKTogUmVzdW1lVHRyVHJhY2tpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXRpbWluZykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgICFOdW1iZXIuaXNGaW5pdGUodGltaW5nLnJlc3VtZVJlcXVlc3RlZEF0TXMpIHx8XG4gICAgIU51bWJlci5pc0Zpbml0ZSh0aW1pbmcucXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNcylcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHRyaWdnZXI6ICdob29rJyxcbiAgICAuLi4odGltaW5nLnN0cmF0ZWd5ID09PSAncGFyYWxsZWwnIHx8IHRpbWluZy5zdHJhdGVneSA9PT0gJ3NlcXVlbnRpYWwnXG4gICAgICA/IHsgc3RyYXRlZ3k6IHRpbWluZy5zdHJhdGVneSB9XG4gICAgICA6IHt9KSxcbiAgICByZXN1bWVSZXF1ZXN0ZWRBdE1zOiB0aW1pbmcucmVzdW1lUmVxdWVzdGVkQXRNcyxcbiAgICBxdWV1ZVB1Ymxpc2hSZXF1ZXN0ZWRBdE1zOiB0aW1pbmcucXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNcyxcbiAgICAvLyBBIGRpc3BhdGNoZWQgc3RlcCByZWFkcyB0aGUgcmVzdW1pbmcgaW52b2NhdGlvbidzIGJvdW5kYXJpZXMgb2ZmIHRoZVxuICAgIC8vIG1lc3NhZ2U7IGFuIGlubGluZSBvbmUgaGFzIHRoZW0gc3RhbXBlZCBsb2NhbGx5IGJ5IHRoZSBjYWxsZXIsIHdoaWNoXG4gICAgLy8gb3ZlcndyaXRlcyB0aGlzIHBsYWNlaG9sZGVyIGltbWVkaWF0ZWx5IGFmdGVyIGNvbnN0cnVjdGlvbi5cbiAgICBjb25zdW1lclN0YXJ0ZWRBdE1zOiB0aW1pbmcuY29uc3VtZXJTdGFydGVkQXRNcyA/PyBOdW1iZXIuTmFOLFxuICAgIC4uLih0aW1pbmcucmVwbGF5U3RhcnRlZEF0TXMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IHJlcGxheVN0YXJ0ZWRBdE1zOiB0aW1pbmcucmVwbGF5U3RhcnRlZEF0TXMgfVxuICAgICAgOiB7fSksXG4gICAgLi4uKHRpbWluZy5uZXh0U3RlcEVuY291bnRlcmVkQXRNcyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgbmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXM6IHRpbWluZy5uZXh0U3RlcEVuY291bnRlcmVkQXRNcyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4odGltaW5nLnNldHVwU291cmNlID09PSAnaG9va19wcmVsb2FkJyB8fFxuICAgIHRpbWluZy5zZXR1cFNvdXJjZSA9PT0gJ3J1bl9zdGFydGVkJyB8fFxuICAgIHRpbWluZy5zZXR1cFNvdXJjZSA9PT0gJ2V2ZW50X2xvYWQnXG4gICAgICA/IHsgc2V0dXBTb3VyY2U6IHRpbWluZy5zZXR1cFNvdXJjZSB9XG4gICAgICA6IHt9KSxcbiAgICBzdGVwRXhlY3V0aW9uLFxuICB9O1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSB0cmFja2luZyBiYWNrIG9udG8gYSBxdWV1ZSBtZXNzYWdlLCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlXG4gKiByZXN1bWluZyBpbnZvY2F0aW9uIGRpc3BhdGNoZXMgdGhlIG5leHQgZHVyYWJsZSBzdGVwIHRvIGFub3RoZXIgaW52b2NhdGlvblxuICogaW5zdGVhZCBvZiBydW5uaW5nIGl0IGlubGluZS4gUmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgdHJhY2tpbmcgaXMgbm90XG4gKiBjb21wbGV0ZSBlbm91Z2ggdG8gYmUgd29ydGggZm9yd2FyZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc3VtZVRpbWluZ0Zvck1lc3NhZ2UoXG4gIHRyYWNraW5nOiBSZXN1bWVUdHJUcmFja2luZyB8IHVuZGVmaW5lZFxuKTogSG9va1Jlc3VtZVRpbWluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdHJhY2tpbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHRyYWNraW5nLmNvbnN1bWVyU3RhcnRlZEF0TXMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIHJlc3VtZVJlcXVlc3RlZEF0TXM6IHRyYWNraW5nLnJlc3VtZVJlcXVlc3RlZEF0TXMsXG4gICAgcXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNczogdHJhY2tpbmcucXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNcyxcbiAgICAuLi4odHJhY2tpbmcuc3RyYXRlZ3kgIT09IHVuZGVmaW5lZCA/IHsgc3RyYXRlZ3k6IHRyYWNraW5nLnN0cmF0ZWd5IH0gOiB7fSksXG4gICAgY29uc3VtZXJTdGFydGVkQXRNczogdHJhY2tpbmcuY29uc3VtZXJTdGFydGVkQXRNcyxcbiAgICAuLi4odHJhY2tpbmcucmVwbGF5U3RhcnRlZEF0TXMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IHJlcGxheVN0YXJ0ZWRBdE1zOiB0cmFja2luZy5yZXBsYXlTdGFydGVkQXRNcyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4odHJhY2tpbmcubmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXMgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IG5leHRTdGVwRW5jb3VudGVyZWRBdE1zOiB0cmFja2luZy5uZXh0U3RlcEVuY291bnRlcmVkQXRNcyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4odHJhY2tpbmcuc2V0dXBTb3VyY2UgIT09IHVuZGVmaW5lZFxuICAgICAgPyB7IHNldHVwU291cmNlOiB0cmFja2luZy5zZXR1cFNvdXJjZSB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuLyoqIEV2ZXJ5IGJvdW5kYXJ5IHRoZSBlbWlzc2lvbiBnYXRlIHJlcXVpcmVzLCBwbHVzIHRoZSBvcHRpb25hbCBjbGFpbSBlbmQuICovXG5pbnRlcmZhY2UgUmVzdW1lQm91bmRhcmllcyB7XG4gIC8qKiBUMCAqLyByZXN1bWVSZXF1ZXN0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKiBUMSAqLyBxdWV1ZVB1Ymxpc2hSZXF1ZXN0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKiBUMiAqLyBjb25zdW1lclN0YXJ0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKiBUMyAqLyByZXBsYXlTdGFydGVkQXRNczogbnVtYmVyO1xuICAvKiogVDQgKi8gbmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXM6IG51bWJlcjtcbiAgLyoqIFQ1ICovIHN0ZXBDbGFpbVN0YXJ0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKiBUNjogYWJzZW50IG9uIHRoZSBvcHRpbWlzdGljLXN0YXJ0IHBhdGg7IHNlZSBiZWxvdy4gKi9cbiAgc3RlcENsYWltQ29tcGxldGVkQXRNczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAvKiogVDcgKi8gc3RlcENvZGVTdGFydGVkQXRNczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgZXZlcnkgcmVxdWlyZWQgYm91bmRhcnkgaXMgYSBmaW5pdGUgZXBvY2gtbXMgdmFsdWUgYW5kIHRoYXRcbiAqIHRoZSB3aG9sZSBzZXF1ZW5jZSBpcyBub24tZGVjcmVhc2luZy4gUmV0dXJucyB1bmRlZmluZWQgb3RoZXJ3aXNlLCB3aGljaFxuICogc3VwcHJlc3NlcyB0aGUgbWV0cmljIGVudGlyZWx5IHJhdGhlciB0aGFuIHJlcG9ydGluZyBhIHBoYXNlIHRoYXQgbmV2ZXJcbiAqIGhhcHBlbmVkIG9yIGEgbmVnYXRpdmUgZHVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm91bmRhcmllcyhcbiAgYjogUmVzdW1lQm91bmRhcmllc1xuKTogcmVhZG9ubHkgbnVtYmVyW10gfCB1bmRlZmluZWQge1xuICBjb25zdCBvcmRlcmVkID0gW1xuICAgIGIucmVzdW1lUmVxdWVzdGVkQXRNcyxcbiAgICBiLnF1ZXVlUHVibGlzaFJlcXVlc3RlZEF0TXMsXG4gICAgYi5jb25zdW1lclN0YXJ0ZWRBdE1zLFxuICAgIGIucmVwbGF5U3RhcnRlZEF0TXMsXG4gICAgYi5uZXh0U3RlcEVuY291bnRlcmVkQXRNcyxcbiAgICBiLnN0ZXBDbGFpbVN0YXJ0ZWRBdE1zLFxuICAgIC4uLihiLnN0ZXBDbGFpbUNvbXBsZXRlZEF0TXMgIT09IHVuZGVmaW5lZFxuICAgICAgPyBbYi5zdGVwQ2xhaW1Db21wbGV0ZWRBdE1zXVxuICAgICAgOiBbXSksXG4gICAgYi5zdGVwQ29kZVN0YXJ0ZWRBdE1zLFxuICBdO1xuICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9yZGVyZWQpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBmb3IgKGxldCBpID0gMTsgaSA8IG9yZGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob3JkZXJlZFtpXSA8IG9yZGVyZWRbaSAtIDFdKSByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBvcmRlcmVkO1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIFRUUiBzcGFuIGF0dHJpYnV0ZXMgZm9yIGEgc3RlcCB0aGF0IGlzIHRoZSBmaXJzdCBkdXJhYmxlIHN0ZXBcbiAqIGZvbGxvd2luZyBhIGhvb2sgcmVzdW1lLiBSZXR1cm5zIHVuZGVmaW5lZCAoZW1pdHRpbmcgbm90aGluZyBhdCBhbGwpIHdoZW5cbiAqIGFueSBvZiB0aGVzZSBob2xkOlxuICpcbiAqIC0gdGhlIGludm9jYXRpb24gY2FycmllcyBubyByZXN1bWUgdHJhY2tpbmcgKG5vdCBhIGhvb2sgcmVzdW1lLCBvciBhbiBvbGRlclxuICogICBxdWV1ZSBtZXNzYWdlIHdpdGggbm8gdGltaW5nKTtcbiAqIC0gdGhpcyBpcyBhIHJldHJ5IChgYXR0ZW1wdCAhPT0gMWApLCB3aGljaCBtZWFzdXJlcyBhIHJlLWV4ZWN1dGlvbiByYXRoZXJcbiAqICAgdGhhbiB0aGUgcmVzdW1wdGlvbjtcbiAqIC0gYSByZXF1aXJlZCBib3VuZGFyeSBpcyBtaXNzaW5nLCBub24tZmluaXRlLCBvciBvdXQgb2Ygb3JkZXIuXG4gKlxuICogYHN0ZXBfY2xhaW1fbXNgIGlzIHRoZSBvbmUgcGhhc2UgdGhhdCBtYXkgYmUgaW5kaXZpZHVhbGx5IG9taXR0ZWQuIFVuZGVyXG4gKiBvcHRpbWlzdGljIGlubGluZSBzdGFydCB0aGUgYHN0ZXBfc3RhcnRlZGAgY2xhaW0gaXMgZGVsaWJlcmF0ZWx5IE5PVCBhd2FpdGVkXG4gKiBiZWZvcmUgdGhlIGJvZHkgcnVucywgc28gaXRzIGNvbXBsZXRpb24gaW5zdGFudCBkb2VzIG5vdCBleGlzdCB5ZXQgYXQgVDc7XG4gKiByYXRoZXIgdGhhbiBpbnZlbnQgb25lLCB0aGUgY2xhaW0gcGhhc2UgaXMgZHJvcHBlZCBhbmQgYHN0ZXBfcHJlcGFyZV9tc2BcbiAqIHNwYW5zIFQ14oaSVDcuIFRoZSBzdW0tZXF1YWxzLXRvdGFsIHByb3BlcnR5IGhvbGRzIGVpdGhlciB3YXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlUmVzdW1lVHRyQXR0cmlidXRlcyhwYXJhbXM6IHtcbiAgdHJhY2tpbmc6IFJlc3VtZVR0clRyYWNraW5nIHwgdW5kZWZpbmVkO1xuICAvKiogVGhlIGF0dGVtcHQgbnVtYmVyIG9mIHRoZSBleGVjdXRpb24gYWJvdXQgdG8gcnVuLiAqL1xuICBhdHRlbXB0OiBudW1iZXI7XG4gIC8qKiBUNTogYERhdGUubm93KClgIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgYHN0ZXBfc3RhcnRlZGAgcmVxdWVzdC4gKi9cbiAgc3RlcENsYWltU3RhcnRlZEF0TXM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqIFQ2OiBgRGF0ZS5ub3coKWAgb25jZSB0aGUgYHN0ZXBfc3RhcnRlZGAgcmVzcG9uc2UgcmV0dXJuZWQuICovXG4gIHN0ZXBDbGFpbUNvbXBsZXRlZEF0TXM6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqIFQ3OiBgRGF0ZS5ub3coKWAgaW1tZWRpYXRlbHkgYmVmb3JlIGBzdGVwRm4uYXBwbHkoKWAuICovXG4gIHN0ZXBDb2RlU3RhcnRlZEF0TXM6IG51bWJlcjtcbn0pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyB0cmFja2luZyB9ID0gcGFyYW1zO1xuICBpZiAoIXRyYWNraW5nIHx8IHBhcmFtcy5hdHRlbXB0ICE9PSAxKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgdHJhY2tpbmcucmVwbGF5U3RhcnRlZEF0TXMgPT09IHVuZGVmaW5lZCB8fFxuICAgIHRyYWNraW5nLm5leHRTdGVwRW5jb3VudGVyZWRBdE1zID09PSB1bmRlZmluZWQgfHxcbiAgICBwYXJhbXMuc3RlcENsYWltU3RhcnRlZEF0TXMgPT09IHVuZGVmaW5lZFxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgYm91bmRhcmllczogUmVzdW1lQm91bmRhcmllcyA9IHtcbiAgICByZXN1bWVSZXF1ZXN0ZWRBdE1zOiB0cmFja2luZy5yZXN1bWVSZXF1ZXN0ZWRBdE1zLFxuICAgIHF1ZXVlUHVibGlzaFJlcXVlc3RlZEF0TXM6IHRyYWNraW5nLnF1ZXVlUHVibGlzaFJlcXVlc3RlZEF0TXMsXG4gICAgY29uc3VtZXJTdGFydGVkQXRNczogdHJhY2tpbmcuY29uc3VtZXJTdGFydGVkQXRNcyxcbiAgICByZXBsYXlTdGFydGVkQXRNczogdHJhY2tpbmcucmVwbGF5U3RhcnRlZEF0TXMsXG4gICAgbmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXM6IHRyYWNraW5nLm5leHRTdGVwRW5jb3VudGVyZWRBdE1zLFxuICAgIHN0ZXBDbGFpbVN0YXJ0ZWRBdE1zOiBwYXJhbXMuc3RlcENsYWltU3RhcnRlZEF0TXMsXG4gICAgc3RlcENsYWltQ29tcGxldGVkQXRNczogcGFyYW1zLnN0ZXBDbGFpbUNvbXBsZXRlZEF0TXMsXG4gICAgc3RlcENvZGVTdGFydGVkQXRNczogcGFyYW1zLnN0ZXBDb2RlU3RhcnRlZEF0TXMsXG4gIH07XG4gIGlmICghdmFsaWRhdGVCb3VuZGFyaWVzKGJvdW5kYXJpZXMpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHtcbiAgICByZXN1bWVSZXF1ZXN0ZWRBdE1zOiB0MCxcbiAgICBxdWV1ZVB1Ymxpc2hSZXF1ZXN0ZWRBdE1zOiB0MSxcbiAgICBjb25zdW1lclN0YXJ0ZWRBdE1zOiB0MixcbiAgICByZXBsYXlTdGFydGVkQXRNczogdDMsXG4gICAgbmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXM6IHQ0LFxuICAgIHN0ZXBDbGFpbVN0YXJ0ZWRBdE1zOiB0NSxcbiAgICBzdGVwQ2xhaW1Db21wbGV0ZWRBdE1zOiB0NixcbiAgICBzdGVwQ29kZVN0YXJ0ZWRBdE1zOiB0NyxcbiAgfSA9IGJvdW5kYXJpZXM7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lVG90YWxNcyh0NyAtIHQwKSxcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lUHJvZHVjZXJQcmVwTXModDEgLSB0MCksXG4gICAgLi4uQXR0cmlidXRlLlJlc3VtZVF1ZXVlRGVsaXZlcnlNcyh0MiAtIHQxKSxcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lU2V0dXBNcyh0MyAtIHQyKSxcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lUmVwbGF5TXModDQgLSB0MyksXG4gICAgLi4uQXR0cmlidXRlLlJlc3VtZVN0ZXBEaXNwYXRjaE1zKHQ1IC0gdDQpLFxuICAgIC4uLih0NiAhPT0gdW5kZWZpbmVkID8gQXR0cmlidXRlLlJlc3VtZVN0ZXBDbGFpbU1zKHQ2IC0gdDUpIDoge30pLFxuICAgIC4uLkF0dHJpYnV0ZS5SZXN1bWVTdGVwUHJlcGFyZU1zKHQ3IC0gKHQ2ID8/IHQ1KSksXG4gICAgLi4uQXR0cmlidXRlLlJlc3VtZVRyaWdnZXIodHJhY2tpbmcudHJpZ2dlciksXG4gICAgLi4uKHRyYWNraW5nLnN0cmF0ZWd5ICE9PSB1bmRlZmluZWRcbiAgICAgID8gQXR0cmlidXRlLlJlc3VtZVN0cmF0ZWd5KHRyYWNraW5nLnN0cmF0ZWd5KVxuICAgICAgOiB7fSksXG4gICAgLi4uKHRyYWNraW5nLnNldHVwU291cmNlICE9PSB1bmRlZmluZWRcbiAgICAgID8gQXR0cmlidXRlLlJlc3VtZVNldHVwU291cmNlKHRyYWNraW5nLnNldHVwU291cmNlKVxuICAgICAgOiB7fSksXG4gICAgLi4uQXR0cmlidXRlLlJlc3VtZVN0ZXBFeGVjdXRpb24odHJhY2tpbmcuc3RlcEV4ZWN1dGlvbiksXG4gIH07XG59XG4iXX0=
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdW1lLWxhdGVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9yZXN1bWUtbGF0ZW5jeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssU0FBUyxNQUFNLHNDQUFzQyxDQUFDO0FBbUhsRTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxNQUFvQyxFQUNwQyxhQUFrQztJQUVsQyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzlCLElBQ0UsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztRQUM1QyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQ2xELENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTztRQUNMLE9BQU8sRUFBRSxNQUFNO1FBQ2YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssTUFBTTtZQUM5QixNQUFNLENBQUMsUUFBUSxLQUFLLFVBQVU7WUFDOUIsTUFBTSxDQUFDLFFBQVEsS0FBSyxZQUFZO1lBQzlCLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQy9CLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxtQkFBbUIsRUFBRSxNQUFNLENBQUMsbUJBQW1CO1FBQy9DLHlCQUF5QixFQUFFLE1BQU0sQ0FBQyx5QkFBeUI7UUFDM0QsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSw4REFBOEQ7UUFDOUQsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixJQUFJLE1BQU0sQ0FBQyxHQUFHO1FBQzdELEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEtBQUssU0FBUztZQUN4QyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUU7WUFDakQsQ0FB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QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBIb29rUmVzdW1lVGltaW5nIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCAqIGFzIEF0dHJpYnV0ZSBmcm9tICcuLi90ZWxlbWV0cnkvc2VtYW50aWMtY29udmVudGlvbnMuanMnO1xuXG4vKipcbiAqIEhvb2stdHJpZ2dlcmVkIHRpbWUtdG8tcmVzdW1lIChUVFIpOiB3YWxsLWNsb2NrIGZyb20gZW50cnkgaW50b1xuICogYHJlc3VtZUhvb2soKWAgKFQwKSB0byB0aGUgZmlyc3QgbGluZSBvZiB0aGUgbmV4dCBkdXJhYmxlIHN0ZXAgKFQ3KSwgcGx1cyBhXG4gKiBkZWNvbXBvc2l0aW9uIGludG8gbm9uLW92ZXJsYXBwaW5nIHBoYXNlcyB0aGF0IHN1bSBleGFjdGx5IHRvIGl0LlxuICpcbiAqIGBgYHRleHRcbiAqIFQwIHJlc3VtZUhvb2soKSBlbnRlcmVkXG4gKiAgICAgIHByb2R1Y2VyX3ByZXAgICA6IGhvb2sgbG9va3VwLCBzZXJpYWxpemF0aW9uLCBlbmNyeXB0aW9uXG4gKiBUMSBxdWV1ZSBwdWJsaXNoIHJlcXVlc3RlZFxuICogICAgICBxdWV1ZV9kZWxpdmVyeSAgOiBuZXR3b3JrICsgVlFTIGRlbGl2ZXJ5IChpbmNsLiBhbnkgYWZmaW5pdHkgcmUtcm91dGUpXG4gKiBUMiBmaW5hbCBjb25zdW1lcidzIHF1ZXVlIGhhbmRsZXIgZW50ZXJlZFxuICogICAgICByZXN1bWVfc2V0dXAgICAgOiBhZmZpbml0eSBjaGVjaywgaG9va19yZWNlaXZlZCByZS1lbnN1cmUsIHJlcGxheSBwcmVsb2FkXG4gKiBUMyByZXBsYXkgYmVnaW5zXG4gKiAgICAgIHJlcGxheSAgICAgICAgICA6IFZNL3Nlc3Npb24gY3JlYXRpb24gYW5kIHdvcmtmbG93IHJlcGxheVxuICogVDQgbmV4dCBkdXJhYmxlIHN0ZXAgZW5jb3VudGVyZWRcbiAqICAgICAgc3RlcF9kaXNwYXRjaCAgIDogc3VzcGVuc2lvbiBoYW5kbGluZywgaW5saW5lIGJhdGNoIG9yIHF1ZXVlIGRpc3BhdGNoXG4gKiBUNSBzdGVwX3N0YXJ0ZWQgcmVxdWVzdCBiZWdpbnNcbiAqICAgICAgc3RlcF9jbGFpbSAgICAgIDogdGhlIGNsYWltIHJvdW5kIHRyaXBcbiAqIFQ2IHN0ZXBfc3RhcnRlZCByZXNwb25zZSByZXR1cm5lZFxuICogICAgICBzdGVwX3ByZXBhcmUgICAgOiBrZXkgcmVzb2x1dGlvbiwgYXJndW1lbnQgaHlkcmF0aW9uLCBjb250ZXh0IHNldHVwXG4gKiBUNyBpbW1lZGlhdGVseSBiZWZvcmUgc3RlcEZuLmFwcGx5KClcbiAqIGBgYFxuICpcbiAqIFRoZSBwcm9kdWNlcidzIGBob29rX3JlY2VpdmVkYCB3cml0ZSBpcyBhd2FpdGVkIGluc2lkZSBgcHJvZHVjZXJfcHJlcGBcbiAqICh0aGUgd2FrZSBpcyBvbmx5IHB1Ymxpc2hlZCBhZnRlciBpdCBjb21taXRzKS4gT2xkZXIgcHJvZHVjZXJzIG1heSByZXBvcnRcbiAqIGBsYXp5YCwgd2hlcmUgdGhlIGNvbnN1bWVyIG1hdGVyaWFsaXplcyB0aGUgZXZlbnQgZnJvbSBgaG9va0lucHV0YCwgb3JcbiAqIGBwYXJhbGxlbGAsIHdoZXJlIHRoZSB3cml0ZSByYWNlZCB0aGUgcHVibGlzaC4gVGhlIHdyaXRlIGhhcyBubyBwaGFzZSBvZlxuICogaXRzIG93bjsgaXQgcmVtYWlucyB2aXNpYmxlIGFzIGEgY29udGV4dHVhbCBzcGFuIChgaG9vay5yZXN1bWVgKS5cbiAqXG4gKiBUMC9UMSBhcmUgc3RhbXBlZCBvbiB0aGUgcHJvZHVjZXIncyBtYWNoaW5lIGFuZCBUMi4uVDcgb24gdGhlIGNvbnN1bWVyJ3MsIHNvXG4gKiB0aGUgbWVhc3VyZW1lbnQgaXMgc3ViamVjdCB0byBjcm9zcy1tYWNoaW5lIGNsb2NrIHNrZXcuIFJhdGhlciB0aGFuIGNsYW1wXG4gKiAod2hpY2ggd291bGQgYnJlYWsgdGhlIHN1bS1lcXVhbHMtdG90YWwgcHJvcGVydHkgdGhpcyBkZWNvbXBvc2l0aW9uIGV4aXN0c1xuICogZm9yKSwgYSBub24tbW9ub3RvbmljIGJvdW5kYXJ5IHNldCBkcm9wcyB0aGUgd2hvbGUgc2FtcGxlOyBzZWVcbiAqIHtAbGluayBjb21wdXRlUmVzdW1lVHRyQXR0cmlidXRlc30uXG4gKi9cblxuLyoqIFdoYXQgY2F1c2VkIHRoZSByZXN1bXB0aW9uIGJlaW5nIG1lYXN1cmVkLiBPbmx5IGhvb2tzIGFyZSBtZWFzdXJlZCB0b2RheS4gKi9cbmV4cG9ydCB0eXBlIFJlc3VtZVRyaWdnZXIgPSAnaG9vayc7XG5cbi8qKlxuICogV2hpY2ggYHJlc3VtZUhvb2soKWAgZGlzcGF0Y2ggcGF0aCBwcm9kdWNlZCB0aGlzIHJlc3VtZS5cbiAqXG4gKiBDdXJyZW50IHByb2R1Y2VycyBhbHdheXMgc2VuZCBgc2VxdWVudGlhbGAgKGR1cmFibGUgd3JpdGUsIHRoZW4gd2FrZSkuXG4gKiBPbGRlciBwcm9kdWNlcnMgbWF5IHNlbmQgYGxhenlgICh0aGUgY29uc3VtZXIgbWF0ZXJpYWxpemVzIHRoZSBldmVudCBmcm9tXG4gKiBgaG9va0lucHV0YCkgb3IgYHBhcmFsbGVsYCAodGhlIHdyaXRlIHJhY2VkIHRoZSBwdWJsaXNoKS5cbiAqL1xuZXhwb3J0IHR5cGUgUmVzdW1lU3RyYXRlZ3kgPSAnbGF6eScgfCAncGFyYWxsZWwnIHwgJ3NlcXVlbnRpYWwnO1xuXG4vKipcbiAqIEhvdyB0aGUgY29uc3VtaW5nIGludm9jYXRpb24gaW5pdGlhbGl6ZWQgaXRzIHJlcGxheSBzdGF0ZTpcbiAqXG4gKiAtIGBob29rX3ByZWxvYWRgOiB0aGUgaG9pc3RlZCBgaG9va19yZWNlaXZlZGAgd3JpdGUgcmV0dXJuZWQgYSB1c2FibGVcbiAqICAgcmVwbGF5IHByZWxvYWQsIHNvIG5laXRoZXIgYHJ1bl9zdGFydGVkYCBub3IgdGhlIGluaXRpYWwgYGV2ZW50cy5saXN0YCByYW4uXG4gKiAtIGBydW5fc3RhcnRlZGA6IHRoZSBnZW5lcmljIGBydW5fc3RhcnRlZGAgc2V0dXAgcmFuIChpbmNsdWRpbmcgdGhlIGZhc3RcbiAqICAgcGF0aCdzIGZhbGxiYWNrLCB3aGVyZSB0aGUgaG9pc3RlZCB3cml0ZSBzdWNjZWVkZWQgYnV0IHJldHVybmVkIG5vIHVzYWJsZVxuICogICBwcmVsb2FkKS5cbiAqIC0gYGV2ZW50X2xvYWRgOiBuZWl0aGVyIHNldHVwIHJhbiBiZWNhdXNlIHRoZSBydW4gYXJyaXZlZCBhbHJlYWR5IGxvYWRlZCxcbiAqICAgc28gc2V0dXAgd2FzIGEgcGxhaW4gZXZlbnQgbG9hZC4gTm8gY3VycmVudCBwYXRoIHByb2R1Y2VzIGl0ICh0aGUgb25lXG4gKiAgIHByZWxvYWRlZC1ydW4gcGF0aCwgdGhlIGJhY2tncm91bmQtc3RlcCBmYWxsLXRocm91Z2gsIGNvbnN1bWVzIHRoZVxuICogICB0cmFja2luZyBvbiBpdHMgb3duIHN0ZXAgZmlyc3QpOyBpdCBpcyB0aGUgaG9uZXN0IGRlZmF1bHQgcmF0aGVyIHRoYW4gYVxuICogICBsaXZlIHZhbHVlLCBhbmQga2VlcHMgdGhlIGRpbWVuc2lvbiB0b3RhbCBpZiBzdWNoIGEgcGF0aCBpcyBhZGRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVzdW1lU2V0dXBTb3VyY2UgPSAnaG9va19wcmVsb2FkJyB8ICdydW5fc3RhcnRlZCcgfCAnZXZlbnRfbG9hZCc7XG5cbi8qKiBXaGV0aGVyIHRoZSBtZWFzdXJlZCBzdGVwIHJhbiBpbiB0aGUgcmVzdW1pbmcgaW52b2NhdGlvbiBvciBhIHF1ZXVlZCBvbmUuICovXG5leHBvcnQgdHlwZSBSZXN1bWVTdGVwRXhlY3V0aW9uID0gJ2lubGluZScgfCAnZGlzcGF0Y2hlZCc7XG5cbi8qKlxuICogVGhlIHJlc3VtZSBib3VuZGFyaWVzIG9ic2VydmVkIHNvIGZhciwgdGhyZWFkZWQgZnJvbSB0aGUgcXVldWUgaGFuZGxlciBpbnRvXG4gKiBgZXhlY3V0ZVN0ZXBgLiBQcm9kdWNlciBmaWVsZHMgYXJyaXZlIG9uIHRoZSBxdWV1ZSBtZXNzYWdlXG4gKiAoe0BsaW5rIEhvb2tSZXN1bWVUaW1pbmd9KTsgY29uc3VtZXIgZmllbGRzIGFyZSBzdGFtcGVkIGJ5IHRoZSBpbnZvY2F0aW9uXG4gKiB0aGF0IHJlcGxheXMgdGhlIHJlc3VtZS5cbiAqXG4gKiBUaGUgcnVudGltZSBob2xkcyBhdCBtb3N0IG9uZSBvZiB0aGVzZSBwZXIgaW52b2NhdGlvbiBhbmQgQ09OU1VNRVMgaXQgd2hlblxuICogaXQgaGFuZHMgaXQgdG8gdGhlIGV4ZWN1dGlvbiB0aGF0IHdpbGwgYXR0ZW1wdCB0aGUgbmV4dCBkdXJhYmxlIHN0ZXAsIHNvIGFcbiAqIGxhdGVyIHN0ZXAgaW4gdGhlIHNhbWUgaW52b2NhdGlvbiAob3IgYSByZXRyeSBvZiB0aGUgc2FtZSBzdGVwKSBuZXZlclxuICogcmUtcmVwb3J0cyB0aGUgc2FtZSByZXN1bXB0aW9uLiBXaXRoaW4gb25lIGlubGluZSBiYXRjaCB0aGUgb2JqZWN0IGlzXG4gKiBzaGFyZWQgYnkgZXZlcnkgc3RlcCBhbmQgdGhlIHtAbGluayBSZXN1bWVUdHJUcmFja2luZy5yZXBvcnRlZH0gbGF0Y2ggcGlja3NcbiAqIHRoZSBzaW5nbGUgcmVwb3J0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdW1lVHRyVHJhY2tpbmcge1xuICB0cmlnZ2VyOiBSZXN1bWVUcmlnZ2VyO1xuICAvKiogQWJzZW50IG9ubHkgaWYgYW4gb2xkZXIgcHJvZHVjZXIgb21pdHRlZCBpdCBmcm9tIHRoZSBxdWV1ZSBtZXNzYWdlLiAqL1xuICBzdHJhdGVneT86IFJlc3VtZVN0cmF0ZWd5O1xuICAvKiogVDA6IGVudHJ5IGludG8gYHJlc3VtZUhvb2soKWAuICovXG4gIHJlc3VtZVJlcXVlc3RlZEF0TXM6IG51bWJlcjtcbiAgLyoqIFQxOiBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIHF1ZXVlIHB1Ymxpc2ggd2FzIHJlcXVlc3RlZC4gKi9cbiAgcXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNczogbnVtYmVyO1xuICAvKipcbiAgICogVDI6IGVudHJ5IGludG8gdGhlIEZJTkFMIGNvbnN1bWVyJ3MgcXVldWUgaGFuZGxlci4gQSBkZWxpdmVyeSB0aGF0XG4gICAqIHJlLXJvdXRlcyBmb3IgZGVwbG95bWVudCBhZmZpbml0eSBuZXZlciBzdGFtcHMgdGhpcywgc28gdGhlIHJlLXJvdXRlZCBob3BcbiAgICogc3RheXMgaW5zaWRlIGBxdWV1ZV9kZWxpdmVyeWAgd2hlcmUgaXQgYmVsb25ncy5cbiAgICovXG4gIGNvbnN1bWVyU3RhcnRlZEF0TXM6IG51bWJlcjtcbiAgLyoqIFQzOiB0aGlzIGludm9jYXRpb24ncyBmaXJzdCByZXBsYXkgcGFzcy4gKi9cbiAgcmVwbGF5U3RhcnRlZEF0TXM/OiBudW1iZXI7XG4gIC8qKiBUNDogcmVwbGF5IGZpcnN0IGVuY291bnRlcmVkIGEgZHVyYWJsZSBzdGVwIGFmdGVyIHRoZSByZXN1bWUuICovXG4gIG5leHRTdGVwRW5jb3VudGVyZWRBdE1zPzogbnVtYmVyO1xuICBzZXR1cFNvdXJjZT86IFJlc3VtZVNldHVwU291cmNlO1xuICBzdGVwRXhlY3V0aW9uOiBSZXN1bWVTdGVwRXhlY3V0aW9uO1xuICAvKipcbiAgICogT25lLXNob3QgbGF0Y2gsIHNldCBieSB0aGUgc3RlcCBleGVjdXRvciBvbmNlIHRoaXMgcmVzdW1wdGlvbiBoYXMgYmVlblxuICAgKiByZXBvcnRlZC4gRXZlcnkgc3RlcCBvZiBhbiBpbmxpbmUgYmF0Y2ggaXMgaGFuZGVkIHRoZSBTQU1FIHRyYWNraW5nXG4gICAqIG9iamVjdCwgc28gdGhlIGZpcnN0IG9uZSB0byByZWFjaCB1c2VyIGNvZGUgdGFrZXMgdGhlIG1lYXN1cmVtZW50IGFuZCB0aGVcbiAgICogcmVzdCBzZWUgdGhpcyBhbmQgc2tpcDogb25lIHJlc3VtcHRpb24sIG9uZSBzYW1wbGUsIHdpdGhvdXQgcGlubmluZyB0aGVcbiAgICogc2FtcGxlIHRvIGEgc3RlcCB0aGF0IG1heSBsb3NlIGl0cyBjcmVhdGUtY2xhaW0gYW5kIG5ldmVyIHJ1bi5cbiAgICpcbiAgICogRGVsaWJlcmF0ZWx5IG5vdCBwYXJ0IG9mIHtAbGluayBIb29rUmVzdW1lVGltaW5nfTogaXQgaXMgaW52b2NhdGlvbi1sb2NhbFxuICAgKiBzdGF0ZSwgYW5kIGEgcXVldWUgbWVzc2FnZSBjYXJyaWVzIHRoZSBib3VuZGFyaWVzLCBub3QgdGhlIGNsYWltLlxuICAgKi9cbiAgcmVwb3J0ZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlYnVpbGQgdHJhY2tpbmcgZnJvbSBhIHF1ZXVlIG1lc3NhZ2UncyB0aW1pbmcgb2JqZWN0LiBSZXR1cm5zIHVuZGVmaW5lZCBmb3JcbiAqIGEgbWVzc2FnZSB0aGF0IGNhcnJpZXMgbm9uZSAoYW4gb2xkZXIgcHJvZHVjZXIsIG9yIGFueSBub24taG9vayBkZWxpdmVyeSk7XG4gKiB0aGUgY2FsbGVyIHRoZW4gcmVwb3J0cyBubyBUVFIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXN1bWVUcmFja2luZ0Zyb21NZXNzYWdlKFxuICB0aW1pbmc6IEhvb2tSZXN1bWVUaW1pbmcgfCB1bmRlZmluZWQsXG4gIHN0ZXBFeGVjdXRpb246IFJlc3VtZVN0ZXBFeGVjdXRpb25cbik6IFJlc3VtZVR0clRyYWNraW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0aW1pbmcpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICAhTnVtYmVyLmlzRmluaXRlKHRpbWluZy5yZXN1bWVSZXF1ZXN0ZWRBdE1zKSB8fFxuICAgICFOdW1iZXIuaXNGaW5pdGUodGltaW5nLnF1ZXVlUHVibGlzaFJlcXVlc3RlZEF0TXMpXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0cmlnZ2VyOiAnaG9vaycsXG4gICAgLi4uKHRpbWluZy5zdHJhdGVneSA9PT0gJ2xhenknIHx8XG4gICAgdGltaW5nLnN0cmF0ZWd5ID09PSAncGFyYWxsZWwnIHx8XG4gICAgdGltaW5nLnN0cmF0ZWd5ID09PSAnc2VxdWVudGlhbCdcbiAgICAgID8geyBzdHJhdGVneTogdGltaW5nLnN0cmF0ZWd5IH1cbiAgICAgIDoge30pLFxuICAgIHJlc3VtZVJlcXVlc3RlZEF0TXM6IHRpbWluZy5yZXN1bWVSZXF1ZXN0ZWRBdE1zLFxuICAgIHF1ZXVlUHVibGlzaFJlcXVlc3RlZEF0TXM6IHRpbWluZy5xdWV1ZVB1Ymxpc2hSZXF1ZXN0ZWRBdE1zLFxuICAgIC8vIEEgZGlzcGF0Y2hlZCBzdGVwIHJlYWRzIHRoZSByZXN1bWluZyBpbnZvY2F0aW9uJ3MgYm91bmRhcmllcyBvZmYgdGhlXG4gICAgLy8gbWVzc2FnZTsgYW4gaW5saW5lIG9uZSBoYXMgdGhlbSBzdGFtcGVkIGxvY2FsbHkgYnkgdGhlIGNhbGxlciwgd2hpY2hcbiAgICAvLyBvdmVyd3JpdGVzIHRoaXMgcGxhY2Vob2xkZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgY29uc3RydWN0aW9uLlxuICAgIGNvbnN1bWVyU3RhcnRlZEF0TXM6IHRpbWluZy5jb25zdW1lclN0YXJ0ZWRBdE1zID8/IE51bWJlci5OYU4sXG4gICAgLi4uKHRpbWluZy5yZXBsYXlTdGFydGVkQXRNcyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgcmVwbGF5U3RhcnRlZEF0TXM6IHRpbWluZy5yZXBsYXlTdGFydGVkQXRNcyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4odGltaW5nLm5leHRTdGVwRW5jb3VudGVyZWRBdE1zICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBuZXh0U3RlcEVuY291bnRlcmVkQXRNczogdGltaW5nLm5leHRTdGVwRW5jb3VudGVyZWRBdE1zIH1cbiAgICAgIDoge30pLFxuICAgIC4uLih0aW1pbmcuc2V0dXBTb3VyY2UgPT09ICdob29rX3ByZWxvYWQnIHx8XG4gICAgdGltaW5nLnNldHVwU291cmNlID09PSAncnVuX3N0YXJ0ZWQnIHx8XG4gICAgdGltaW5nLnNldHVwU291cmNlID09PSAnZXZlbnRfbG9hZCdcbiAgICAgID8geyBzZXR1cFNvdXJjZTogdGltaW5nLnNldHVwU291cmNlIH1cbiAgICAgIDoge30pLFxuICAgIHN0ZXBFeGVjdXRpb24sXG4gIH07XG59XG5cbi8qKlxuICogU2VyaWFsaXplIHRyYWNraW5nIGJhY2sgb250byBhIHF1ZXVlIG1lc3NhZ2UsIGZvciB0aGUgY2FzZSB3aGVyZSB0aGVcbiAqIHJlc3VtaW5nIGludm9jYXRpb24gZGlzcGF0Y2hlcyB0aGUgbmV4dCBkdXJhYmxlIHN0ZXAgdG8gYW5vdGhlciBpbnZvY2F0aW9uXG4gKiBpbnN0ZWFkIG9mIHJ1bm5pbmcgaXQgaW5saW5lLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSB0cmFja2luZyBpcyBub3RcbiAqIGNvbXBsZXRlIGVub3VnaCB0byBiZSB3b3J0aCBmb3J3YXJkaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzdW1lVGltaW5nRm9yTWVzc2FnZShcbiAgdHJhY2tpbmc6IFJlc3VtZVR0clRyYWNraW5nIHwgdW5kZWZpbmVkXG4pOiBIb29rUmVzdW1lVGltaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0cmFja2luZykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodHJhY2tpbmcuY29uc3VtZXJTdGFydGVkQXRNcykpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgcmVzdW1lUmVxdWVzdGVkQXRNczogdHJhY2tpbmcucmVzdW1lUmVxdWVzdGVkQXRNcyxcbiAgICBxdWV1ZVB1Ymxpc2hSZXF1ZXN0ZWRBdE1zOiB0cmFja2luZy5xdWV1ZVB1Ymxpc2hSZXF1ZXN0ZWRBdE1zLFxuICAgIC4uLih0cmFja2luZy5zdHJhdGVneSAhPT0gdW5kZWZpbmVkID8geyBzdHJhdGVneTogdHJhY2tpbmcuc3RyYXRlZ3kgfSA6IHt9KSxcbiAgICBjb25zdW1lclN0YXJ0ZWRBdE1zOiB0cmFja2luZy5jb25zdW1lclN0YXJ0ZWRBdE1zLFxuICAgIC4uLih0cmFja2luZy5yZXBsYXlTdGFydGVkQXRNcyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgcmVwbGF5U3RhcnRlZEF0TXM6IHRyYWNraW5nLnJlcGxheVN0YXJ0ZWRBdE1zIH1cbiAgICAgIDoge30pLFxuICAgIC4uLih0cmFja2luZy5uZXh0U3RlcEVuY291bnRlcmVkQXRNcyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgbmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXM6IHRyYWNraW5nLm5leHRTdGVwRW5jb3VudGVyZWRBdE1zIH1cbiAgICAgIDoge30pLFxuICAgIC4uLih0cmFja2luZy5zZXR1cFNvdXJjZSAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHsgc2V0dXBTb3VyY2U6IHRyYWNraW5nLnNldHVwU291cmNlIH1cbiAgICAgIDoge30pLFxuICB9O1xufVxuXG4vKiogRXZlcnkgYm91bmRhcnkgdGhlIGVtaXNzaW9uIGdhdGUgcmVxdWlyZXMsIHBsdXMgdGhlIG9wdGlvbmFsIGNsYWltIGVuZC4gKi9cbmludGVyZmFjZSBSZXN1bWVCb3VuZGFyaWVzIHtcbiAgLyoqIFQwICovIHJlc3VtZVJlcXVlc3RlZEF0TXM6IG51bWJlcjtcbiAgLyoqIFQxICovIHF1ZXVlUHVibGlzaFJlcXVlc3RlZEF0TXM6IG51bWJlcjtcbiAgLyoqIFQyICovIGNvbnN1bWVyU3RhcnRlZEF0TXM6IG51bWJlcjtcbiAgLyoqIFQzICovIHJlcGxheVN0YXJ0ZWRBdE1zOiBudW1iZXI7XG4gIC8qKiBUNCAqLyBuZXh0U3RlcEVuY291bnRlcmVkQXRNczogbnVtYmVyO1xuICAvKiogVDUgKi8gc3RlcENsYWltU3RhcnRlZEF0TXM6IG51bWJlcjtcbiAgLyoqIFQ2OiBhYnNlbnQgb24gdGhlIG9wdGltaXN0aWMtc3RhcnQgcGF0aDsgc2VlIGJlbG93LiAqL1xuICBzdGVwQ2xhaW1Db21wbGV0ZWRBdE1zOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKiBUNyAqLyBzdGVwQ29kZVN0YXJ0ZWRBdE1zOiBudW1iZXI7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhhdCBldmVyeSByZXF1aXJlZCBib3VuZGFyeSBpcyBhIGZpbml0ZSBlcG9jaC1tcyB2YWx1ZSBhbmQgdGhhdFxuICogdGhlIHdob2xlIHNlcXVlbmNlIGlzIG5vbi1kZWNyZWFzaW5nLiBSZXR1cm5zIHVuZGVmaW5lZCBvdGhlcndpc2UsIHdoaWNoXG4gKiBzdXBwcmVzc2VzIHRoZSBtZXRyaWMgZW50aXJlbHkgcmF0aGVyIHRoYW4gcmVwb3J0aW5nIGEgcGhhc2UgdGhhdCBuZXZlclxuICogaGFwcGVuZWQgb3IgYSBuZWdhdGl2ZSBkdXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCb3VuZGFyaWVzKFxuICBiOiBSZXN1bWVCb3VuZGFyaWVzXG4pOiByZWFkb25seSBudW1iZXJbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG9yZGVyZWQgPSBbXG4gICAgYi5yZXN1bWVSZXF1ZXN0ZWRBdE1zLFxuICAgIGIucXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNcyxcbiAgICBiLmNvbnN1bWVyU3RhcnRlZEF0TXMsXG4gICAgYi5yZXBsYXlTdGFydGVkQXRNcyxcbiAgICBiLm5leHRTdGVwRW5jb3VudGVyZWRBdE1zLFxuICAgIGIuc3RlcENsYWltU3RhcnRlZEF0TXMsXG4gICAgLi4uKGIuc3RlcENsYWltQ29tcGxldGVkQXRNcyAhPT0gdW5kZWZpbmVkXG4gICAgICA/IFtiLnN0ZXBDbGFpbUNvbXBsZXRlZEF0TXNdXG4gICAgICA6IFtdKSxcbiAgICBiLnN0ZXBDb2RlU3RhcnRlZEF0TXMsXG4gIF07XG4gIGZvciAoY29uc3QgdmFsdWUgb2Ygb3JkZXJlZCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgb3JkZXJlZC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvcmRlcmVkW2ldIDwgb3JkZXJlZFtpIC0gMV0pIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIG9yZGVyZWQ7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgVFRSIHNwYW4gYXR0cmlidXRlcyBmb3IgYSBzdGVwIHRoYXQgaXMgdGhlIGZpcnN0IGR1cmFibGUgc3RlcFxuICogZm9sbG93aW5nIGEgaG9vayByZXN1bWUuIFJldHVybnMgdW5kZWZpbmVkIChlbWl0dGluZyBub3RoaW5nIGF0IGFsbCkgd2hlblxuICogYW55IG9mIHRoZXNlIGhvbGQ6XG4gKlxuICogLSB0aGUgaW52b2NhdGlvbiBjYXJyaWVzIG5vIHJlc3VtZSB0cmFja2luZyAobm90IGEgaG9vayByZXN1bWUsIG9yIGFuIG9sZGVyXG4gKiAgIHF1ZXVlIG1lc3NhZ2Ugd2l0aCBubyB0aW1pbmcpO1xuICogLSB0aGlzIGlzIGEgcmV0cnkgKGBhdHRlbXB0ICE9PSAxYCksIHdoaWNoIG1lYXN1cmVzIGEgcmUtZXhlY3V0aW9uIHJhdGhlclxuICogICB0aGFuIHRoZSByZXN1bXB0aW9uO1xuICogLSBhIHJlcXVpcmVkIGJvdW5kYXJ5IGlzIG1pc3NpbmcsIG5vbi1maW5pdGUsIG9yIG91dCBvZiBvcmRlci5cbiAqXG4gKiBgc3RlcF9jbGFpbV9tc2AgaXMgdGhlIG9uZSBwaGFzZSB0aGF0IG1heSBiZSBpbmRpdmlkdWFsbHkgb21pdHRlZC4gVW5kZXJcbiAqIG9wdGltaXN0aWMgaW5saW5lIHN0YXJ0IHRoZSBgc3RlcF9zdGFydGVkYCBjbGFpbSBpcyBkZWxpYmVyYXRlbHkgTk9UIGF3YWl0ZWRcbiAqIGJlZm9yZSB0aGUgYm9keSBydW5zLCBzbyBpdHMgY29tcGxldGlvbiBpbnN0YW50IGRvZXMgbm90IGV4aXN0IHlldCBhdCBUNztcbiAqIHJhdGhlciB0aGFuIGludmVudCBvbmUsIHRoZSBjbGFpbSBwaGFzZSBpcyBkcm9wcGVkIGFuZCBgc3RlcF9wcmVwYXJlX21zYFxuICogc3BhbnMgVDXihpJUNy4gVGhlIHN1bS1lcXVhbHMtdG90YWwgcHJvcGVydHkgaG9sZHMgZWl0aGVyIHdheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVSZXN1bWVUdHJBdHRyaWJ1dGVzKHBhcmFtczoge1xuICB0cmFja2luZzogUmVzdW1lVHRyVHJhY2tpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKiBUaGUgYXR0ZW1wdCBudW1iZXIgb2YgdGhlIGV4ZWN1dGlvbiBhYm91dCB0byBydW4uICovXG4gIGF0dGVtcHQ6IG51bWJlcjtcbiAgLyoqIFQ1OiBgRGF0ZS5ub3coKWAgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBgc3RlcF9zdGFydGVkYCByZXF1ZXN0LiAqL1xuICBzdGVwQ2xhaW1TdGFydGVkQXRNczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAvKiogVDY6IGBEYXRlLm5vdygpYCBvbmNlIHRoZSBgc3RlcF9zdGFydGVkYCByZXNwb25zZSByZXR1cm5lZC4gKi9cbiAgc3RlcENsYWltQ29tcGxldGVkQXRNczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAvKiogVDc6IGBEYXRlLm5vdygpYCBpbW1lZGlhdGVseSBiZWZvcmUgYHN0ZXBGbi5hcHBseSgpYC4gKi9cbiAgc3RlcENvZGVTdGFydGVkQXRNczogbnVtYmVyO1xufSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHRyYWNraW5nIH0gPSBwYXJhbXM7XG4gIGlmICghdHJhY2tpbmcgfHwgcGFyYW1zLmF0dGVtcHQgIT09IDEpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICB0cmFja2luZy5yZXBsYXlTdGFydGVkQXRNcyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHJhY2tpbmcubmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXMgPT09IHVuZGVmaW5lZCB8fFxuICAgIHBhcmFtcy5zdGVwQ2xhaW1TdGFydGVkQXRNcyA9PT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBib3VuZGFyaWVzOiBSZXN1bWVCb3VuZGFyaWVzID0ge1xuICAgIHJlc3VtZVJlcXVlc3RlZEF0TXM6IHRyYWNraW5nLnJlc3VtZVJlcXVlc3RlZEF0TXMsXG4gICAgcXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNczogdHJhY2tpbmcucXVldWVQdWJsaXNoUmVxdWVzdGVkQXRNcyxcbiAgICBjb25zdW1lclN0YXJ0ZWRBdE1zOiB0cmFja2luZy5jb25zdW1lclN0YXJ0ZWRBdE1zLFxuICAgIHJlcGxheVN0YXJ0ZWRBdE1zOiB0cmFja2luZy5yZXBsYXlTdGFydGVkQXRNcyxcbiAgICBuZXh0U3RlcEVuY291bnRlcmVkQXRNczogdHJhY2tpbmcubmV4dFN0ZXBFbmNvdW50ZXJlZEF0TXMsXG4gICAgc3RlcENsYWltU3RhcnRlZEF0TXM6IHBhcmFtcy5zdGVwQ2xhaW1TdGFydGVkQXRNcyxcbiAgICBzdGVwQ2xhaW1Db21wbGV0ZWRBdE1zOiBwYXJhbXMuc3RlcENsYWltQ29tcGxldGVkQXRNcyxcbiAgICBzdGVwQ29kZVN0YXJ0ZWRBdE1zOiBwYXJhbXMuc3RlcENvZGVTdGFydGVkQXRNcyxcbiAgfTtcbiAgaWYgKCF2YWxpZGF0ZUJvdW5kYXJpZXMoYm91bmRhcmllcykpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3Qge1xuICAgIHJlc3VtZVJlcXVlc3RlZEF0TXM6IHQwLFxuICAgIHF1ZXVlUHVibGlzaFJlcXVlc3RlZEF0TXM6IHQxLFxuICAgIGNvbnN1bWVyU3RhcnRlZEF0TXM6IHQyLFxuICAgIHJlcGxheVN0YXJ0ZWRBdE1zOiB0MyxcbiAgICBuZXh0U3RlcEVuY291bnRlcmVkQXRNczogdDQsXG4gICAgc3RlcENsYWltU3RhcnRlZEF0TXM6IHQ1LFxuICAgIHN0ZXBDbGFpbUNvbXBsZXRlZEF0TXM6IHQ2LFxuICAgIHN0ZXBDb2RlU3RhcnRlZEF0TXM6IHQ3LFxuICB9ID0gYm91bmRhcmllcztcblxuICByZXR1cm4ge1xuICAgIC4uLkF0dHJpYnV0ZS5SZXN1bWVUb3RhbE1zKHQ3IC0gdDApLFxuICAgIC4uLkF0dHJpYnV0ZS5SZXN1bWVQcm9kdWNlclByZXBNcyh0MSAtIHQwKSxcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lUXVldWVEZWxpdmVyeU1zKHQyIC0gdDEpLFxuICAgIC4uLkF0dHJpYnV0ZS5SZXN1bWVTZXR1cE1zKHQzIC0gdDIpLFxuICAgIC4uLkF0dHJpYnV0ZS5SZXN1bWVSZXBsYXlNcyh0NCAtIHQzKSxcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lU3RlcERpc3BhdGNoTXModDUgLSB0NCksXG4gICAgLi4uKHQ2ICE9PSB1bmRlZmluZWQgPyBBdHRyaWJ1dGUuUmVzdW1lU3RlcENsYWltTXModDYgLSB0NSkgOiB7fSksXG4gICAgLi4uQXR0cmlidXRlLlJlc3VtZVN0ZXBQcmVwYXJlTXModDcgLSAodDYgPz8gdDUpKSxcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lVHJpZ2dlcih0cmFja2luZy50cmlnZ2VyKSxcbiAgICAuLi4odHJhY2tpbmcuc3RyYXRlZ3kgIT09IHVuZGVmaW5lZFxuICAgICAgPyBBdHRyaWJ1dGUuUmVzdW1lU3RyYXRlZ3kodHJhY2tpbmcuc3RyYXRlZ3kpXG4gICAgICA6IHt9KSxcbiAgICAuLi4odHJhY2tpbmcuc2V0dXBTb3VyY2UgIT09IHVuZGVmaW5lZFxuICAgICAgPyBBdHRyaWJ1dGUuUmVzdW1lU2V0dXBTb3VyY2UodHJhY2tpbmcuc2V0dXBTb3VyY2UpXG4gICAgICA6IHt9KSxcbiAgICAuLi5BdHRyaWJ1dGUuUmVzdW1lU3RlcEV4ZWN1dGlvbih0cmFja2luZy5zdGVwRXhlY3V0aW9uKSxcbiAgfTtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from '@workflow/serde';
2
- import { type WorkflowRunStatus } from '@workflow/world';
2
+ import type { WorkflowRunStatus } from '@workflow/world';
3
3
  import { type CancelRunOptions, type StopSleepOptions, type StopSleepResult } from './runs.js';
4
4
  /** @internal */
5
5
  export declare function getReturnValuePollIntervalMs(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAIL,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EAErB,MAAM,WAAW,CAAC;AAQnB,gBAAgB;AAChB,wBAAgB,4BAA4B,IAAI,MAAM,CAMrD;AAiBD,gBAAgB;AAChB,wBAAgB,2BAA2B,IAAI,MAAM,CAMpD;AAqBD,gBAAgB;AAChB,wBAAgB,0BAA0B,IAAI,MAAM,CAMnD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CAItD;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IAChE;;;;;;;OAOG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,GAAG,CAAC,OAAO;;IACtB,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;;;;IAIlD,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE;QAClC,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B;IAID;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;gBA4BF,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAiC9D;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAKlE;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAa7B;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAOvC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAGlC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAKlC;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAKzC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAK3C;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,sBAAsB,CAErC;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,CAAC,GAAG,GAAG,EACjB,OAAO,GAAE,6BAAkC,GAC1C,sBAAsB,CAAC,CAAC,CAAC;CA2K7B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAE3D"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EAAe,iBAAiB,EAAS,MAAM,iBAAiB,CAAC;AAc7E,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EAErB,MAAM,WAAW,CAAC;AAQnB,gBAAgB;AAChB,wBAAgB,4BAA4B,IAAI,MAAM,CAMrD;AAiBD,gBAAgB;AAChB,wBAAgB,2BAA2B,IAAI,MAAM,CAMpD;AAqBD,gBAAgB;AAChB,wBAAgB,0BAA0B,IAAI,MAAM,CAMnD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CAItD;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG;IAChE;;;;;;;OAOG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,GAAG,CAAC,OAAO;;IACtB,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;;;;IAIlD,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE;QAClC,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B;IAID;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;gBA4BF,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE;IAiC9D;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAKlE;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAa7B;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAOvC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAGlC;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAKlC;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7B;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAKzC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAK3C;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,sBAAsB,CAErC;IAED;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,CAAC,GAAG,GAAG,EACjB,OAAO,GAAE,6BAAkC,GAC1C,sBAAsB,CAAC,CAAC,CAAC;CA2K7B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAE3D"}
@@ -1,6 +1,7 @@
1
1
  import { WorkflowRunCancelledError, WorkflowRunFailedError, WorkflowRunNotCompletedError, WorkflowRunNotFoundError, } from '@workflow/errors';
2
2
  import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from '@workflow/serde';
3
- import { envNumber, SPEC_VERSION_CURRENT, } from '@workflow/world';
3
+ import { envNumber } from '@workflow/world/env-config';
4
+ import { SPEC_VERSION_CURRENT } from '@workflow/world/spec-version';
4
5
  import { deriveRunPayloadKeys, } from '../serialization/encryption.js';
5
6
  import { getExternalRevivers, hydrateRunError, hydrateWorkflowReturnValue, } from '../serialization.js';
6
7
  import { getWorkflowRunStreamId } from '../util.js';
@@ -409,4 +410,4 @@ export class Run {
409
410
  export function getRun(runId) {
410
411
  return new Run(runId);
411
412
  }
412
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1Qix3QkFBd0IsR0FDekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsU0FBUyxFQUNULG9CQUFvQixHQUlyQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZiwwQkFBMEIsR0FDM0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFJTCxTQUFTLEdBQ1YsTUFBTSxXQUFXLENBQUM7QUFFbkIsTUFBTSw2QkFBNkIsR0FBRyxLQUFLLENBQUM7QUFDNUMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLEdBQUcsQ0FBb0I7SUFDL0QsV0FBVztJQUNYLFFBQVE7Q0FDVCxDQUFDLENBQUM7QUFFSCxnQkFBZ0I7QUFDaEIsTUFBTSxVQUFVLDRCQUE0QjtJQUMxQyxPQUFPLFNBQVMsQ0FDZCx3Q0FBd0MsRUFDeEMsNkJBQTZCLEVBQzdCLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQzFCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLENBQUM7QUFFNUMsZ0JBQWdCO0FBQ2hCLE1BQU0sVUFBVSwyQkFBMkI7SUFDekMsT0FB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QUNELElBQ0Usd0JBQXdCLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztvQkFDbEMsZUFBZSxHQUFHLHFCQUFxQixFQUN2QyxDQUFDO29CQUNELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBRSxDQUFDO29CQUNqRCxlQUFlLEVBQUUsQ0FBQztvQkFDbEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUMzRCxTQUFTO2dCQUNYLENBQUM7Z0JBQ0QsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQVUsS0FBYTtJQUMzQyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBXb3JrZmxvd1J1bkNhbmNlbGxlZEVycm9yLFxuICBXb3JrZmxvd1J1bkZhaWxlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5pbXBvcnQge1xuICBlbnZOdW1iZXIsXG4gIFNQRUNfVkVSU0lPTl9DVVJSRU5ULFxuICB0eXBlIFdvcmtmbG93UnVuLFxuICB0eXBlIFdvcmtmbG93UnVuU3RhdHVzLFxuICB0eXBlIFdvcmxkLFxufSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHtcbiAgZGVyaXZlUnVuUGF5bG9hZEtleXMsXG4gIHR5cGUgUGF5bG9hZEtleSxcbn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7XG4gIGdldEV4dGVybmFsUmV2aXZlcnMsXG4gIGh5ZHJhdGVSdW5FcnJvcixcbiAgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUsXG59IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHsgZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZCB9IGZyb20gJy4uL3V0aWwuanMnO1xuaW1wb3J0IHsgZ2V0V29ybGRMYXp5IH0gZnJvbSAnLi9nZXQtd29ybGQtbGF6eS5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENhbmNlbFJ1bk9wdGlvbnMsXG4gIHR5cGUgU3RvcFNsZWVwT3B0aW9ucyxcbiAgdHlwZSBTdG9wU2xlZXBSZXN1bHQsXG4gIHdha2VVcFJ1bixcbn0gZnJvbSAnLi9ydW5zLmpzJztcblxuY29uc3QgUkVUVVJOX1ZBTFVFX1BPTExfSU5URVJWQUxfTVMgPSAxXzAwMDtcbmNvbnN0IFBBWUxPQURfVEVSTUlOQUxfUlVOX1NUQVRVU0VTID0gbmV3IFNldDxXb3JrZmxvd1J1blN0YXR1cz4oW1xuICAnY29tcGxldGVkJyxcbiAgJ2ZhaWxlZCcsXG5dKTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJldHVyblZhbHVlUG9sbEludGVydmFsTXMoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVudk51bWJlcihcbiAgICAnV09SS0ZMT1dfUkVUVVJOX1ZBTFVFX1BPTExfSU5URVJWQUxfTVMnLFxuICAgIFJFVFVSTl9WQUxVRV9QT0xMX0lOVEVSVkFMX01TLFxuICAgIHsgaW50ZWdlcjogdHJ1ZSwgbWluOiAxIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBIb3cgbG9uZyBhIHNpbmdsZSBgcnVucy53YWl0Rm9yVGVybWluYWxTdGF0dXNgIGNhbGwgbWF5IGJsb2NrIHdoaWxlIHdhaXRpbmdcbiAqIGZvciBhIHJ1biB0byBmaW5pc2guIFRoZSB3YWl0IGlzIHJlLWlzc3VlZCB1bnRpbCB0aGUgcnVuIGlzIHRlcm1pbmFsLCBzb1xuICogdGhpcyBpcyBhIHBlci1jYWxsIGJ1ZGdldCByYXRoZXIgdGhhbiBhIGxpbWl0IG9uIHRvdGFsIHdhaXQgdGltZTogaXRzIG9ubHlcbiAqIGpvYiBpcyB0byBib3VuZCBvbmUgcmVxdWVzdCBzbyBhIHN0YWxsZWQgY29ubmVjdGlvbiBjYW5ub3QgaG9sZCB0aGUgYXdhaXRpbmdcbiAqIHNpZGUgZm9yZXZlci5cbiAqXG4gKiA1MHMgaXMgdGhlIGxhcmdlc3QgYnVkZ2V0IGB3b3JsZC12ZXJjZWxgIGNhbiBhY3R1YWxseSByZXF1ZXN0OiBpdCBjbGFtcHMgdG9cbiAqIGBSRVFVRVNUX1RJTUVPVVRfTVNgICg2MHMpIG1pbnVzIDEwcyBvZiBoZWFkcm9vbSwgc28gdGhlIGJ1ZGdldCBpcyBhbHdheXNcbiAqIG9ic2VydmVkIGFzIGEgKnJlc3BvbnNlKiAoYSBub24tdGVybWluYWwgc25hcHNob3QpIHJhdGhlciB0aGFuIGFzIGFcbiAqIGNsaWVudC1zaWRlIHRpbWVvdXQuIEFza2luZyBmb3IgbW9yZSBpcyBzaWxlbnRseSByZWR1Y2VkIHRvIHRoYXQsIHNvIHJhaXNpbmdcbiAqIHRoaXMgd2l0aG91dCBhbHNvIHJhaXNpbmcgYFdPUktGTE9XX1JFUVVFU1RfVElNRU9VVF9NU2AgaGFzIG5vIGVmZmVjdC5cbiAqL1xuY29uc3QgUkVUVVJOX1ZBTFVFX1dBSVRfVElNRU9VVF9NUyA9IDUwXzAwMDtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJldHVyblZhbHVlV2FpdFRpbWVvdXRNcygpOiBudW1iZXIge1xuICByZXR1cm4gZW52TnVtYmVyKFxuICAgICdXT1JLRkxPV19SRVRVUk5fVkFMVUVfV0FJVF9NUycsXG4gICAgUkVUVVJOX1ZBTFVFX1dBSVRfVElNRU9VVF9NUyxcbiAgICB7IGludGVnZXI6IHRydWUsIG1pbjogMSB9XG4gICk7XG59XG5cbi8qKlxuICogSG93IG1hbnkgY29uc2VjdXRpdmUgbG9uZy1wb2xsIGNhbGxzIGBhd2FpdCBydW4ucmV0dXJuVmFsdWVgIHdpbGwgbWFrZVxuICogYmVmb3JlIGZhbGxpbmcgYmFjayB0byBpbnRlcnZhbCBwb2xsaW5nIGZvciB0aGUgcmVzdCBvZiB0aGUgd2FpdC5cbiAqXG4gKiBBIGNhcCBpcyB3b3J0aCBoYXZpbmcgYmVjYXVzZSBhIHdhaXQgdGhhdCBrZWVwcyByZXR1cm5pbmcgbm9uLXRlcm1pbmFsIGlzXG4gKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIG9uZSB0aGF0IGlzIG5vdCB3b3JraW5nLCBhbmQgaW50ZXJ2YWwgcG9sbGluZyBpcyB0aGVcbiAqIGJlaGF2aW9yIHdlIGtub3cgaXMgY29ycmVjdC4gSXQgZG9lcyAqKm5vdCoqIGVuZCB0aGUgYXdhaXQ6IGEgcnVuIGxlZ2l0aW1hdGVseVxuICogbGFzdHMgaG91cnMgb3IgZGF5cywgc28gZXhoYXVzdGluZyB0aGUgY2FwIHN3aXRjaGVzIHN0cmF0ZWd5IGFuZCBrZWVwc1xuICogd2FpdGluZyByYXRoZXIgdGhhbiB0aHJvd2luZy5cbiAqXG4gKiBOb3RlIHRoZSBjb25zZXF1ZW5jZSwgc2luY2UgaXQgY3V0cyBhZ2FpbnN0IHRoZSByZWFzb24gdGhlIGxvbmcgcG9sbCBleGlzdHM6XG4gKiBhIHJ1biBzdGlsbCBnb2luZyBhZnRlciBgTUFYIHggYnVkZ2V0YCAofjggbWludXRlcyBhdCB0aGUgZGVmYXVsdHMpIHNwZW5kc1xuICogdGhlIHJlbWFpbmRlciBvZiBpdHMgbGlmZSBwb2xsaW5nIG9uY2UgcGVyXG4gKiBgV09SS0ZMT1dfUkVUVVJOX1ZBTFVFX1BPTExfSU5URVJWQUxfTVNgLCB3aGljaCBpcyBtb3JlIHJlcXVlc3RzIHRoYW5cbiAqIGNvbnRpbnVpbmcgdG8gbG9uZyBwb2xsIHdvdWxkIGhhdmUgY29zdC4gUnVucyB0aGF0IG91dGxpdmUgdGhlIGNhcCBhcmVcbiAqIGV4YWN0bHkgdGhlIG9uZXMgdGhlIHJlcXVlc3QgcmVkdWN0aW9uIGhlbHBlZCBtb3N0LlxuICovXG5jb25zdCBSRVRVUk5fVkFMVUVfTUFYX0xPTkdfUE9MTFMgPSAxMDtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJldHVyblZhbHVlTWF4TG9uZ1BvbGxzKCk6IG51bWJlciB7XG4gIHJldHVybiBlbnZOdW1iZXIoXG4gICAgJ1dPUktGTE9XX1JFVFVSTl9WQUxVRV9NQVhfTE9OR19QT0xMUycsXG4gICAgUkVUVVJOX1ZBTFVFX01BWF9MT05HX1BPTExTLFxuICAgIHsgaW50ZWdlcjogdHJ1ZSwgbWluOiAxIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGBhd2FpdCBydW4ucmV0dXJuVmFsdWVgIG1heSB1c2UgdGhlIFdvcmxkJ3MgbG9uZyBwb2xsXG4gKiAoYHJ1bnMud2FpdEZvclRlcm1pbmFsU3RhdHVzYCkgaW5zdGVhZCBvZiBpbnRlcnZhbC1wb2xsaW5nIGBydW5zLmdldGAuXG4gKlxuICogRGVmYXVsdCAqKk9OKiogd2hlcmV2ZXIgdGhlIFdvcmxkIGltcGxlbWVudHMgdGhlIG1ldGhvZDsgYSBXb3JsZCB0aGF0IGRvZXNcbiAqIG5vdCBpcyBhbHJlYWR5IG9uIHRoZSBpbnRlcnZhbCBwYXRoIHdpdGggbm90aGluZyB0byBzd2l0Y2ggb2ZmLiBSZWFkc1xuICogYHByb2Nlc3MuZW52LldPUktGTE9XX1JFVFVSTl9WQUxVRV9MT05HX1BPTExgIGxhemlseTsgYW4gZXhwbGljaXQgYCcwJ2AgL1xuICogYCdmYWxzZSdgIGlzIHRoZSBraWxsIHN3aXRjaCwgcmVzdG9yaW5nIHRoZSBmaXhlZC1pbnRlcnZhbCBwb2xsIGV4YWN0bHkgYXNcbiAqIGl0IGJlaGF2ZWQgYmVmb3JlIHRoZSBmYXN0IHBhdGggZXhpc3RlZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmV0dXJuVmFsdWVMb25nUG9sbEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52LldPUktGTE9XX1JFVFVSTl9WQUxVRV9MT05HX1BPTEw7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuICEocmF3ID09PSAnMCcgfHwgcmF3LnRvTG93ZXJDYXNlKCkgPT09ICdmYWxzZScpO1xufVxuXG4vKipcbiAqIEEgYFJlYWRhYmxlU3RyZWFtYCBleHRlbmRlZCB3aXRoIHdvcmtmbG93LXNwZWNpZmljIGhlbHBlcnMuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtmbG93UmVhZGFibGVTdHJlYW08UiA9IGFueT4gPSBSZWFkYWJsZVN0cmVhbTxSPiAmIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRhaWwgaW5kZXggKGluZGV4IG9mIHRoZSBsYXN0IGtub3duIGNodW5rLCAwLWJhc2VkKSBvZiB0aGVcbiAgICogdW5kZXJseWluZyB3b3JrZmxvdyBzdHJlYW0uIFVzZWZ1bCBmb3IgcmVzb2x2aW5nIGEgbmVnYXRpdmUgYHN0YXJ0SW5kZXhgXG4gICAqIGludG8gYW4gYWJzb2x1dGUgcG9zaXRpb24sIGZvciBleGFtcGxlLCB3aGVuIGJ1aWxkaW5nIHJlY29ubmVjdGlvblxuICAgKiBlbmRwb2ludHMgdGhhdCBuZWVkIHRvIGluZm9ybSB0aGUgY2xpZW50IHdoZXJlIHRoZSBzdHJlYW0gc3RhcnRzLlxuICAgKlxuICAgKiBSZXR1cm5zIGAtMWAgd2hlbiBubyBjaHVua3MgaGF2ZSBiZWVuIHdyaXR0ZW4geWV0LlxuICAgKi9cbiAgZ2V0VGFpbEluZGV4KCk6IFByb21pc2U8bnVtYmVyPjtcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSB3b3JrZmxvdydzIHJlYWRhYmxlIHN0cmVhbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBuYW1lc3BhY2UgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBtdWx0aXBsZSBzdHJlYW1zIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgc2FtZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggbnVtYmVyIG9mIHRoZSBzdGFydGluZyBjaHVuayB0byBiZWdpbiByZWFkaW5nIHRoZSBzdHJlYW0gZnJvbS5cbiAgICogTmVnYXRpdmUgdmFsdWVzIHN0YXJ0IGZyb20gdGhlIGVuZCAoZS5nLiAtMyByZWFkcyB0aGUgbGFzdCAzIGNodW5rcykuXG4gICAqL1xuICBzdGFydEluZGV4PzogbnVtYmVyO1xuICAvKipcbiAgICogQW55IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIHRvIGNvbXBsZXRlIGJlZm9yZSBwYXVzaW5nIG9yIHRlcm1pbmF0aW5nIHRoZVxuICAgKiBleGVjdXRpb24gZW52aXJvbm1lbnRcbiAgICogKGkuZS4gdXNpbmcgW2B3YWl0VW50aWwoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9FeHRlbmRhYmxlRXZlbnQvd2FpdFVudGlsKSBvciBzaW1pbGFyKS5cbiAgICovXG4gIG9wcz86IFByb21pc2U8YW55PltdO1xuICAvKipcbiAgICogVGhlIGdsb2JhbCBvYmplY3QgdG8gdXNlIGZvciBoeWRyYXRpbmcgdHlwZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB7QGxpbmsgW2BnbG9iYWxUaGlzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvZ2xvYmFsVGhpcyl9LlxuICAgKi9cbiAgZ2xvYmFsPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgY2xhc3MgZm9yIGEgd29ya2Zsb3cgcnVuLlxuICovXG5leHBvcnQgY2xhc3MgUnVuPFRSZXN1bHQ+IHtcbiAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlOiBSdW48dW5rbm93bj4pIHtcbiAgICByZXR1cm4geyBydW5JZDogaW5zdGFuY2UucnVuSWQsIHJlc2lsaWVudFN0YXJ0OiBpbnN0YW5jZS4jcmVzaWxpZW50U3RhcnQgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHtcbiAgICBydW5JZDogc3RyaW5nO1xuICAgIHJlc2lsaWVudFN0YXJ0PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHJldHVybiBuZXcgUnVuKGRhdGEucnVuSWQsIHsgcmVzaWxpZW50U3RhcnQ6IGRhdGEucmVzaWxpZW50U3RhcnQgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBydW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ybGQgb2JqZWN0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICN3b3JsZFByb21pc2U6IFByb21pc2U8V29ybGQ+IHwgdW5kZWZpbmVkO1xuICBnZXQgI2xhenlXb3JsZFByb21pc2UoKSB7XG4gICAgaWYgKCF0aGlzLiN3b3JsZFByb21pc2UpIHRoaXMuI3dvcmxkUHJvbWlzZSA9IGdldFdvcmxkTGF6eSgpO1xuICAgIHJldHVybiB0aGlzLiN3b3JsZFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGVkIGVuY3J5cHRpb24ga2V5IHJlc29sdXRpb24uIFJlc29sdmVkIG9uY2Ugb24gZmlyc3QgdXNlIGFuZFxuICAgKiByZXVzZWQgZm9yIHJldHVyblZhbHVlLCBnZXRSZWFkYWJsZSgpLCBldGMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2VuY3J5cHRpb25LZXlQcm9taXNlOiBQcm9taXNlPFBheWxvYWRLZXkgfCB1bmRlZmluZWQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgcnVuX2NyZWF0ZWQgZmFpbGVkIGFuZCB0aGUgcnVuIG1heSBub3QgZXhpc3QgeWV0ICh0aGVcbiAgICogcmVzaWxpZW50IHN0YXJ0IHBhdGggd2lsbCBjcmVhdGUgaXQgdmlhIHJ1bl9zdGFydGVkKS4gcG9sbFJldHVyblZhbHVlXG4gICAqIHJldHJpZXMgb24gV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIG9ubHkgd2hlbiB0aGlzIGZsYWcgaXMgc2V0IHNvXG4gICAqIHRoYXQgbm9ybWFsIHJ1bnMgZmFpbCBmYXN0IG9uIDQwNC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjcmVzaWxpZW50U3RhcnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihydW5JZDogc3RyaW5nLCBvcHRzPzogeyByZXNpbGllbnRTdGFydD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMucnVuSWQgPSBydW5JZDtcbiAgICB0aGlzLiNyZXNpbGllbnRTdGFydCA9IG9wdHM/LnJlc2lsaWVudFN0YXJ0ID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuZCBjYWNoZXMgdGhlIGVuY3J5cHRpb24ga2V5IGZvciB0aGlzIHJ1bi5cbiAgICogVGhlIGtleSBpcyB0aGUgc2FtZSBmb3IgdGhlIGxpZmV0aW1lIG9mIGEgcnVuLCBzbyBpdCBvbmx5IG5lZWRzXG4gICAqIHRvIGJlIHJlc29sdmVkIG9uY2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2dldEVuY3J5cHRpb25LZXkocnVuPzogV29ya2Zsb3dSdW4pOiBQcm9taXNlPFBheWxvYWRLZXkgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuI2VuY3J5cHRpb25LZXlQcm9taXNlKSB7XG4gICAgICB0aGlzLiNlbmNyeXB0aW9uS2V5UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcbiAgICAgICAgY29uc3QgcnVuRGF0YSA9IHJ1biA/PyAoYXdhaXQgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkpO1xuICAgICAgICBjb25zdCByYXdLZXkgPSBhd2FpdCB3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuPy4ocnVuRGF0YSk7XG4gICAgICAgIHJldHVybiByYXdLZXkgPyBhd2FpdCBkZXJpdmVSdW5QYXlsb2FkS2V5cyhyYXdLZXkpIDogdW5kZWZpbmVkO1xuICAgICAgfSkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI2VuY3J5cHRpb25LZXlQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmVyIGZldGNoaW5nIHRoZSBydW4gYW5kIGl0cyBlbmNyeXB0aW9uIGtleSB1bnRpbCBzZXJpYWxpemVkIHN0cmVhbSBkYXRhXG4gICAqIGlzIGFjdHVhbGx5IHJlYWQuIEFuIGVtcHR5IG9yIG1ldGFkYXRhLW9ubHkgc3RyZWFtIG11c3Qgbm90IHN0YXJ0IGFuXG4gICAqIHVub2JzZXJ2ZWQgcnVuIGxvb2t1cC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjZ2V0RW5jcnlwdGlvbktleUxhemlseSgpOiAoKSA9PiBQcm9taXNlPFBheWxvYWRLZXkgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gKCkgPT4gdGhpcy4jZ2V0RW5jcnlwdGlvbktleSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVycnVwdHMgcGVuZGluZyBgc2xlZXAoKWAgY2FsbHMsIHJlc3VtaW5nIHRoZSB3b3JrZmxvdyBlYXJseS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyB0byB0YXJnZXQgc3BlY2lmaWMgc2xlZXAgY2FsbHMgYnkgY29ycmVsYXRpb24gSUQuXG4gICAqICAgSWYgbm90IHByb3ZpZGVkLCBhbGwgcGVuZGluZyBzbGVlcCBjYWxscyB3aWxsIGJlIGludGVycnVwdGVkLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBTdG9wU2xlZXBSZXN1bHR9IG9iamVjdCBjb250YWluaW5nIHRoZSBudW1iZXIgb2Ygc2xlZXAgY2FsbHMgdGhhdCB3ZXJlIGludGVycnVwdGVkLlxuICAgKi9cbiAgYXN5bmMgd2FrZVVwKG9wdGlvbnM/OiBTdG9wU2xlZXBPcHRpb25zKTogUHJvbWlzZTxTdG9wU2xlZXBSZXN1bHQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB3YWtlVXBSdW4oYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZSwgdGhpcy5ydW5JZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNhbmNlbGxhdGlvbiBzZXR0aW5ncy4gYGNhbmNlbFJlYXNvbmAgcmVjb3JkcyBhXG4gICAqICAgZnJlZS10ZXh0IHJlYXNvbiAobWF4IDUxMiBjaGFycykgb24gdGhlIHJ1bl9jYW5jZWxsZWQgZXZlbnQsIHN1cmZhY2VkIGluXG4gICAqICAgdGhlIHJ1biBkZXRhaWwgdmlldy5cbiAgICovXG4gIGFzeW5jIGNhbmNlbChvcHRpb25zPzogQ2FuY2VsUnVuT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUodGhpcy5ydW5JZCwge1xuICAgICAgZXZlbnRUeXBlOiAncnVuX2NhbmNlbGxlZCcsXG4gICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICAuLi4ob3B0aW9ucz8uY2FuY2VsUmVhc29uICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB7IGV2ZW50RGF0YTogeyBjYW5jZWxSZWFzb246IG9wdGlvbnMuY2FuY2VsUmVhc29uIH0gfVxuICAgICAgICA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB3b3JrZmxvdyBydW4gZXhpc3RzLlxuICAgKi9cbiAgZ2V0IGV4aXN0cygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVuc1xuICAgICAgICAuZ2V0KHRoaXMucnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdub25lJyB9KVxuICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKFdvcmtmbG93UnVuTm90Rm91bmRFcnJvci5pcyhlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBnZXQgc3RhdHVzKCk6IFByb21pc2U8V29ya2Zsb3dSdW5TdGF0dXM+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVuc1xuICAgICAgICAuZ2V0KHRoaXMucnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdub25lJyB9KVxuICAgICAgICAudGhlbigocnVuKSA9PiBydW4uc3RhdHVzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKiBQb2xscyB0aGUgd29ya2Zsb3cgcmV0dXJuIHZhbHVlIHVudGlsIHRoZSB3b3JrZmxvdyBydW4gY29tcGxldGVzLlxuICAgKi9cbiAgZ2V0IHJldHVyblZhbHVlKCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI3BvbGxSZXR1cm5WYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIGdldCB3b3JrZmxvd05hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkudGhlbigocnVuKSA9PiBydW4ud29ya2Zsb3dOYW1lKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSB3b3JrZmxvdyBydW4gd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBnZXQgY3JlYXRlZEF0KCk6IFByb21pc2U8RGF0ZT4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5jcmVhdGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biBzdGFydGVkIGV4ZWN1dGlvbi5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIHdvcmtmbG93IGhhcyBub3Qgc3RhcnRlZCB5ZXQuXG4gICAqL1xuICBnZXQgc3RhcnRlZEF0KCk6IFByb21pc2U8RGF0ZSB8IHVuZGVmaW5lZD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5zdGFydGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biBjb21wbGV0ZWQuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSB3b3JrZmxvdyBoYXMgbm90IGNvbXBsZXRlZCB5ZXQuXG4gICAqL1xuICBnZXQgY29tcGxldGVkQXQoKTogUHJvbWlzZTxEYXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLmNvbXBsZXRlZEF0KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlYWRhYmxlIHN0cmVhbSBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZ2V0IHJlYWRhYmxlKCk6IFdvcmtmbG93UmVhZGFibGVTdHJlYW0ge1xuICAgIHJldHVybiB0aGlzLmdldFJlYWRhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB3b3JrZmxvdyBydW4ncyBkZWZhdWx0IHJlYWRhYmxlIHN0cmVhbSwgd2hpY2ggcmVhZHMgY2h1bmtzXG4gICAqIHdyaXR0ZW4gdG8gdGhlIGNvcnJlc3BvbmRpbmcgd3JpdGFibGUgc3RyZWFtIHtAbGluayBnZXRXcml0YWJsZX0uXG4gICAqXG4gICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaGFzIGFuIGFkZGl0aW9uYWwge0BsaW5rIFdvcmtmbG93UmVhZGFibGVTdHJlYW0uZ2V0VGFpbEluZGV4IHwgZ2V0VGFpbEluZGV4KCl9XG4gICAqIGhlbHBlciB0aGF0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGtub3duIGNodW5rLiBUaGlzIGlzIHVzZWZ1bCB3aGVuXG4gICAqIGJ1aWxkaW5nIHJlY29ubmVjdGlvbiBlbmRwb2ludHMgdGhhdCBuZWVkIHRvIGluZm9ybSBjbGllbnRzIHdoZXJlIHRoZVxuICAgKiBzdHJlYW0gc3RhcnRzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgcmVhZGFibGUgc3RyZWFtLlxuICAgKiBAcmV0dXJucyBBIGBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtYCBmb3IgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGdldFJlYWRhYmxlPFIgPSBhbnk+KFxuICAgIG9wdGlvbnM6IFdvcmtmbG93UmVhZGFibGVTdHJlYW1PcHRpb25zID0ge31cbiAgKTogV29ya2Zsb3dSZWFkYWJsZVN0cmVhbTxSPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICBjb25zdCB7IG9wcyA9IFtdLCBnbG9iYWwgPSBnbG9iYWxUaGlzLCBzdGFydEluZGV4LCBuYW1lc3BhY2UgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbmFtZSA9IGdldFdvcmtmbG93UnVuU3RyZWFtSWQodGhpcy5ydW5JZCwgbmFtZXNwYWNlKTtcbiAgICAvLyBUaGUgcmVzb2x2ZXIgc3RhcnRzIG9ubHkgd2hlbiB0aGUgZGVzZXJpYWxpemUgc3RyZWFtIHNlZXMgaXRzIGZpcnN0XG4gICAgLy8gY2h1bmssIHNvIGNyZWF0aW5nIG9yIHByb2JpbmcgYW4gZW1wdHkgc3RyZWFtIGNhbm5vdCByZWplY3QgaW4gdGhlXG4gICAgLy8gYmFja2dyb3VuZC5cbiAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gdGhpcy4jZ2V0RW5jcnlwdGlvbktleUxhemlseSgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IGdldEV4dGVybmFsUmV2aXZlcnMoZ2xvYmFsLCBvcHMsIHRoaXMucnVuSWQsIGVuY3J5cHRpb25LZXkpXG4gICAgICAuUmVhZGFibGVTdHJlYW0hKHtcbiAgICAgIG5hbWUsXG4gICAgICBzdGFydEluZGV4LFxuICAgIH0pIGFzIFJlYWRhYmxlU3RyZWFtPFI+O1xuXG4gICAgY29uc3Qgd29ybGRQcm9taXNlID0gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcbiAgICBjb25zdCBydW5JZCA9IHRoaXMucnVuSWQ7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3RyZWFtLCB7XG4gICAgICBnZXRUYWlsSW5kZXg6IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgICAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHdvcmxkUHJvbWlzZTtcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IHdvcmxkLnN0cmVhbXMuZ2V0SW5mbyhydW5JZCwgbmFtZSk7XG4gICAgICAgIHJldHVybiBpbmZvLnRhaWxJbmRleDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGFzeW5jICNyZXNvbHZlVGVybWluYWxSZXR1cm5WYWx1ZShydW46IFdvcmtmbG93UnVuKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gYXdhaXQgdGhpcy4jZ2V0RW5jcnlwdGlvbktleShydW4pO1xuICAgICAgcmV0dXJuIGF3YWl0IGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlKFxuICAgICAgICBydW4ub3V0cHV0LFxuICAgICAgICB0aGlzLnJ1bklkLFxuICAgICAgICBlbmNyeXB0aW9uS2V5XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChydW4uc3RhdHVzID09PSAnY2FuY2VsbGVkJykge1xuICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3IodGhpcy5ydW5JZCk7XG4gICAgfVxuXG4gICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICAvLyBIeWRyYXRlIHRoZSBzZXJpYWxpemVkIHJ1biBlcnJvciBzbyB0aGUgb3JpZ2luYWwgdGhyb3duIHZhbHVlXG4gICAgICAvLyAod2l0aCBpdHMgdHlwZSBpZGVudGl0eSwgY2F1c2UgY2hhaW4sIGV0Yy4pIGlzIHNldCBhcyB0aGVcbiAgICAgIC8vIGBjYXVzZWAgb24gV29ya2Zsb3dSdW5GYWlsZWRFcnJvci5cbiAgICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBhd2FpdCB0aGlzLiNnZXRFbmNyeXB0aW9uS2V5KHJ1bik7XG4gICAgICBsZXQgaHlkcmF0ZWRFcnJvcjogdW5rbm93bjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGh5ZHJhdGVkRXJyb3IgPSBhd2FpdCBoeWRyYXRlUnVuRXJyb3IoXG4gICAgICAgICAgcnVuLmVycm9yLFxuICAgICAgICAgIHRoaXMucnVuSWQsXG4gICAgICAgICAgZW5jcnlwdGlvbktleVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElmIGh5ZHJhdGlvbiBmYWlscywgc3VyZmFjZSBhIGdlbmVyaWMgZmFsbGJhY2sgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gbGVhdmluZyB0aGUgdXNlciB3aXRoIGEgcmF3IFVpbnQ4QXJyYXkuIFRoZSBydW4ncyBlcnJvckNvZGVcbiAgICAgICAgLy8gaXMgc3RpbGwgcHJlc2VydmVkIG9uIHRoZSB0aHJvd24gV29ya2Zsb3dSdW5GYWlsZWRFcnJvci5cbiAgICAgICAgaHlkcmF0ZWRFcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGh5ZHJhdGUgd29ya2Zsb3cgcnVuIGVycm9yJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW5GYWlsZWRFcnJvcih0aGlzLnJ1bklkLCBoeWRyYXRlZEVycm9yLCB7XG4gICAgICAgIGVycm9yQ29kZTogcnVuLmVycm9yQ29kZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRlcm1pbmFsIHN0YXR1c2VzIGFyZSBpbW11dGFibGUsIGJ1dCBpZiBhbiBpbmNvbnNpc3RlbnQgd29ybGQgcmV0dXJuc1xuICAgIC8vIGEgbm9uLXRlcm1pbmFsIGZ1bGwgcmVjb3JkLCByZXN1bWUgcG9sbGluZyBzYWZlbHkuXG4gICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3IodGhpcy5ydW5JZCwgcnVuLnN0YXR1cyk7XG4gIH1cblxuICAvKipcbiAgICogUG9sbHMgdGhlIHdvcmtmbG93IHJldHVybiB2YWx1ZSB1bnRpbCB0aGUgd29ya2Zsb3cgcnVuIGNvbXBsZXRlcy5cbiAgICogQGludGVybmFsXG4gICAqIEByZXR1cm5zIFRoZSB3b3JrZmxvdyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBhc3luYyAjcG9sbFJldHVyblZhbHVlKCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcblxuICAgIC8vIFdoZW4gcmVzaWxpZW50U3RhcnQgaXMgdHJ1ZSwgcnVuX2NyZWF0ZWQgZmFpbGVkIGFuZCB0aGUgcnVuIG1heVxuICAgIC8vIG5vdCBleGlzdCB5ZXQuIFJldHJ5IG9uIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvciB1cCB0byAzIHRpbWVzXG4gICAgLy8gKDFzICsgM3MgKyA2cyA9IDEwcyB0b3RhbCkgdG8gZ2l2ZSB0aGUgcXVldWUgdGltZSB0byBkZWxpdmVyXG4gICAgLy8gYW5kIHRoZSBydW50aW1lIHRvIGNyZWF0ZSB0aGUgcnVuIHZpYSBydW5fc3RhcnRlZC5cbiAgICAvLyBXaGVuIHJlc2lsaWVudFN0YXJ0IGlzIGZhbHNlLCA0MDQgaXMgYSByZWFsIGVycm9yOiBmYWlsIGZhc3QuXG4gICAgbGV0IG5vdEZvdW5kUmV0cmllcyA9IDA7XG4gICAgY29uc3QgTk9UX0ZPVU5EX01BWF9SRVRSSUVTID0gdGhpcy4jcmVzaWxpZW50U3RhcnQgPyAzIDogMDtcbiAgICBjb25zdCBOT1RfRk9VTkRfREVMQVlTID0gWzFfMDAwLCAzXzAwMCwgNl8wMDBdO1xuXG4gICAgLy8gUHJlZmVyIHRoZSBXb3JsZCdzIGxvbmcgcG9sbDogb25lIHJlYWQgdGhhdCB0aGUgYmFja2VuZCBob2xkcyBvcGVuXG4gICAgLy8gdW50aWwgdGhlIHJ1biBmaW5pc2hlcywgaW5zdGVhZCBvZiBhc2tpbmcgYWdhaW4gZXZlcnkgc2Vjb25kIGFuZFxuICAgIC8vIHBheWluZyB1cCB0byBhIGZ1bGwgaW50ZXJ2YWwgb2YgcXVhbnRpemF0aW9uIG9uIGEgcnVuIHRoYXQgYWxyZWFkeVxuICAgIC8vIGVuZGVkLiBXb3JsZHMgdGhhdCBjYW5ub3Qgd2FpdCBkbyBub3QgaW1wbGVtZW50IGl0IChzZWVcbiAgICAvLyBgU3RvcmFnZVsncnVucyddLndhaXRGb3JUZXJtaW5hbFN0YXR1c2ApIGFuZCB0aGlzIHN0YXlzIHRoZSBleGFjdFxuICAgIC8vIGZpeGVkLWludGVydmFsIHBvbGwgaXQgaGFzIGFsd2F5cyBiZWVuLCBhcyBkb2VzIGFuIG9wZXJhdG9yIHdob1xuICAgIC8vIHRocm93cyB0aGUgYFdPUktGTE9XX1JFVFVSTl9WQUxVRV9MT05HX1BPTEw9MGAga2lsbCBzd2l0Y2guXG4gICAgY29uc3Qgd2FpdEZvclRlcm1pbmFsU3RhdHVzID0gaXNSZXR1cm5WYWx1ZUxvbmdQb2xsRW5hYmxlZCgpXG4gICAgICA/IHdvcmxkLnJ1bnMud2FpdEZvclRlcm1pbmFsU3RhdHVzPy5iaW5kKHdvcmxkLnJ1bnMpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIExvbmcgcG9sbHMgc3BlbnQgc28gZmFyLiBPbmNlIHRoZSBjYXAgaXMgcmVhY2hlZCB0aGUgbG9vcCBrZWVwcyB3YWl0aW5nXG4gICAgLy8gYnV0IG9uIHRoZSBpbnRlcnZhbCBwYXRoLCB3aGljaCBpcyB0aGUgc3RyYXRlZ3kgd2Uga25vdyBpcyBjb3JyZWN0OyBzZWVcbiAgICAvLyBgUkVUVVJOX1ZBTFVFX01BWF9MT05HX1BPTExTYC4gTmV2ZXIgYSByZWFzb24gdG8gc3RvcCBhd2FpdGluZy5cbiAgICBsZXQgbG9uZ1BvbGxzID0gMDtcbiAgICBjb25zdCBtYXhMb25nUG9sbHMgPSBnZXRSZXR1cm5WYWx1ZU1heExvbmdQb2xscygpO1xuXG4gICAgLy8gTk9URTogd2hlbiB0aGlzIHBvbGwgcnVucyBpbnNpZGUgYSBzdGVwIChlLmcuIHRoZSBzdGVwIHRoYXQgYSBwYXJlbnRcbiAgICAvLyB3b3JrZmxvdyB1c2VzIHRvIGF3YWl0IGEgY2hpbGQgd29ya2Zsb3cncyBgcmV0dXJuVmFsdWVgKSwgaXQgYmxvY2tzXG4gICAgLy8gYSBxdWV1ZSB3b3JrZXIgc2xvdCBmb3IgYXMgbG9uZyBhcyB0aGUgY2hpbGQgcnVuIHRha2VzIHRvIGZpbmlzaC5cbiAgICAvLyBXb3JrZXItYmFzZWQgd29ybGRzIGxpa2UgYHdvcmxkLXBvc3RncmVzYCBtdXN0IGJlIHNpemVkIHRvIGNvdmVyIHRoZVxuICAgIC8vIHBlYWsgbnVtYmVyIG9mIHN1Y2ggcG9sbHMgaW4gZmxpZ2h0OyBzZWUgdGhlIGBxdWV1ZUNvbmN1cnJlbmN5YFxuICAgIC8vIGRlZmF1bHQgb24gdGhlIFBvc3RncmVzIHdvcmxkIGFuZCB0aGUgbm90ZXMgaW4gdGhlIGVhZ2VyLXByb2Nlc3NpbmdcbiAgICAvLyBjaGFuZ2Vsb2cgZm9yIGRldGFpbHMuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZXJhdGlvblN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBNZXRhZGF0YSBvbmx5LCBlaXRoZXIgd2F5OiB0aGUgc3RhdHVzIGlzIGFsbCB0aGlzIGl0ZXJhdGlvbiBuZWVkcyxcbiAgICAgICAgLy8gYW5kIHBheWxvYWQgcmVmcyBhcmUgcmVzb2x2ZWQgb25jZSBiZWxvdywgYWZ0ZXIgYSB0ZXJtaW5hbCBzdGF0dXMgaXNcbiAgICAgICAgLy8gb2JzZXJ2ZWQuXG4gICAgICAgIGNvbnN0IHVzZUxvbmdQb2xsID0gd2FpdEZvclRlcm1pbmFsU3RhdHVzICYmIGxvbmdQb2xscyA8IG1heExvbmdQb2xscztcbiAgICAgICAgaWYgKHVzZUxvbmdQb2xsKSBsb25nUG9sbHMrKztcbiAgICAgICAgY29uc3QgcnVuTWV0YWRhdGEgPSB1c2VMb25nUG9sbFxuICAgICAgICAgID8gYXdhaXQgd2FpdEZvclRlcm1pbmFsU3RhdHVzKHRoaXMucnVuSWQsIHtcbiAgICAgICAgICAgICAgdGltZW91dE1zOiBnZXRSZXR1cm5WYWx1ZVdhaXRUaW1lb3V0TXMoKSxcbiAgICAgICAgICAgICAgcmVzb2x2ZURhdGE6ICdub25lJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBhd2FpdCB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkLCB7XG4gICAgICAgICAgICAgIHJlc29sdmVEYXRhOiAnbm9uZScsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAocnVuTWV0YWRhdGEuc3RhdHVzID09PSAnY2FuY2VsbGVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bkNhbmNlbGxlZEVycm9yKHRoaXMucnVuSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFBBWUxPQURfVEVSTUlOQUxfUlVOX1NUQVRVU0VTLmhhcyhydW5NZXRhZGF0YS5zdGF0dXMpKSB7XG4gICAgICAgICAgLy8gVGhlIHBvbGxpbmcgcmVhZCBhYm92ZSBkZWxpYmVyYXRlbHkgc2tpcHMgaW5wdXQvb3V0cHV0L2Vycm9yIHJlZnMuXG4gICAgICAgICAgLy8gUmVzb2x2ZSBwYXlsb2FkcyBvbmx5IG9uY2UgdGhlIHJ1biByZWFjaGVzIGEgdGVybWluYWwgc3RhdGUuXG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCwge1xuICAgICAgICAgICAgcmVzb2x2ZURhdGE6ICdhbGwnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLiNyZXNvbHZlVGVybWluYWxSZXR1cm5WYWx1ZShydW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUnVuIG5vdCBjb21wbGV0ZWQgeWV0OiBzbGVlcCBhbmQgcG9sbCBhZ2Fpbi5cbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3IodGhpcy5ydW5JZCwgcnVuTWV0YWRhdGEuc3RhdHVzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yLmlzKGVycm9yKSkge1xuICAgICAgICAgIC8vIFNwYWNlIGNvbnNlY3V0aXZlIG5vbi10ZXJtaW5hbCBvYnNlcnZhdGlvbnMgYXQgbGVhc3Qgb25lIHBvbGxcbiAgICAgICAgICAvLyBpbnRlcnZhbCBhcGFydC4gT24gdGhlIHBsYWluLXBvbGwgcGF0aCB0aGF0IGlzIHRoZSBmYW1pbGlhciBmaXhlZFxuICAgICAgICAgIC8vIHNsZWVwOyBvbiB0aGUgbG9uZy1wb2xsIHBhdGggdGhlIHdhaXQgaGFzIHVzdWFsbHkgYWxyZWFkeVxuICAgICAgICAgIC8vIG91dGxhc3RlZCB0aGUgaW50ZXJ2YWwgYW5kIHRoaXMgaXMgYSBuby1vcCwgYnV0IGl0IGFsc28gbWVhbnMgYVxuICAgICAgICAgIC8vIFdvcmxkIHdob3NlIHdhaXQgcmV0dXJucyBlYXJseSAoYSBiYWNrZW5kIHdpdGggbm8gbG9uZyBwb2xsLCBhXG4gICAgICAgICAgLy8gY2xhbXBlZCBidWRnZXQpIGRlZ3JhZGVzIHRvIGludGVydmFsIHBvbGxpbmcgaW5zdGVhZCBvZiBzcGlubmluZy5cbiAgICAgICAgICBjb25zdCByZW1haW5pbmdJbnRlcnZhbE1zID1cbiAgICAgICAgICAgIGdldFJldHVyblZhbHVlUG9sbEludGVydmFsTXMoKSAtIChEYXRlLm5vdygpIC0gaXRlcmF0aW9uU3RhcnRlZEF0KTtcbiAgICAgICAgICBpZiAocmVtYWluaW5nSW50ZXJ2YWxNcyA+IDApIHtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHJlbWFpbmluZ0ludGVydmFsTXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yLmlzKGVycm9yKSAmJlxuICAgICAgICAgIG5vdEZvdW5kUmV0cmllcyA8IE5PVF9GT1VORF9NQVhfUkVUUklFU1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBkZWxheSA9IE5PVF9GT1VORF9ERUxBWVNbbm90Rm91bmRSZXRyaWVzXSE7XG4gICAgICAgICAgbm90Rm91bmRSZXRyaWVzKys7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBgUnVuYCBvYmplY3QgZm9yIGEgZ2l2ZW4gcnVuIElELlxuICpcbiAqIEBwYXJhbSBydW5JZCAtIFRoZSB3b3JrZmxvdyBydW4gSUQgb2J0YWluZWQgZnJvbSB7QGxpbmsgc3RhcnR9LlxuICogQHJldHVybnMgQSBgUnVuYCBvYmplY3QuXG4gKiBAdGhyb3dzIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvciBpZiB0aGUgcnVuIElEIGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bjxUUmVzdWx0PihydW5JZDogc3RyaW5nKTogUnVuPFRSZXN1bHQ+IHtcbiAgcmV0dXJuIG5ldyBSdW4ocnVuSWQpO1xufVxuIl19
413
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3J1bnRpbWUvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1Qix3QkFBd0IsR0FDekIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUNMLG9CQUFvQixHQUVyQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLDBCQUEwQixHQUMzQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUlMLFNBQVMsR0FDVixNQUFNLFdBQVcsQ0FBQztBQUVuQixNQUFNLDZCQUE2QixHQUFHLEtBQUssQ0FBQztBQUM1QyxNQUFNLDZCQUE2QixHQUFHLElBQUksR0FBRyxDQUFvQjtJQUMvRCxXQUFXO0lBQ1gsUUFBUTtDQUNULENBQUMsQ0FBQztBQUVILGdCQUFnQjtBQUNoQixNQUFNLFVBQVUsNEJBQTRCO0lBQzFDLE9BQU8sU0FBUyxDQUNkLHdDQUF3QyxFQUN4Qyw2QkFBNkIsRUFDN0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FDMUIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLDRCQUE0QixHQUFHLE1BQU0sQ0FBQztBQUU1QyxnQkFBZ0I7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Q0osQ0FBQztvQkFDRCxTQUFTO2dCQUNYLENBQUM7Z0JBQ0QsSUFDRSx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO29CQUNsQyxlQUFlLEdBQUcscUJBQXFCLEVBQ3ZDLENBQUM7b0JBQ0QsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsZUFBZSxDQUFFLENBQUM7b0JBQ2pELGVBQWUsRUFBRSxDQUFDO29CQUNsQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQzNELFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxNQUFNLEtBQUssQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBVSxLQUFhO0lBQzNDLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFdvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3IsXG4gIFdvcmtmbG93UnVuRmFpbGVkRXJyb3IsXG4gIFdvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3IsXG4gIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvcixcbn0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dSdW4sIFdvcmtmbG93UnVuU3RhdHVzLCBXb3JsZCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBlbnZOdW1iZXIgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQvZW52LWNvbmZpZyc7XG5pbXBvcnQgeyBTUEVDX1ZFUlNJT05fQ1VSUkVOVCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZC9zcGVjLXZlcnNpb24nO1xuaW1wb3J0IHtcbiAgZGVyaXZlUnVuUGF5bG9hZEtleXMsXG4gIHR5cGUgUGF5bG9hZEtleSxcbn0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7XG4gIGdldEV4dGVybmFsUmV2aXZlcnMsXG4gIGh5ZHJhdGVSdW5FcnJvcixcbiAgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUsXG59IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHsgZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZCB9IGZyb20gJy4uL3V0aWwuanMnO1xuaW1wb3J0IHsgZ2V0V29ybGRMYXp5IH0gZnJvbSAnLi9nZXQtd29ybGQtbGF6eS5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENhbmNlbFJ1bk9wdGlvbnMsXG4gIHR5cGUgU3RvcFNsZWVwT3B0aW9ucyxcbiAgdHlwZSBTdG9wU2xlZXBSZXN1bHQsXG4gIHdha2VVcFJ1bixcbn0gZnJvbSAnLi9ydW5zLmpzJztcblxuY29uc3QgUkVUVVJOX1ZBTFVFX1BPTExfSU5URVJWQUxfTVMgPSAxXzAwMDtcbmNvbnN0IFBBWUxPQURfVEVSTUlOQUxfUlVOX1NUQVRVU0VTID0gbmV3IFNldDxXb3JrZmxvd1J1blN0YXR1cz4oW1xuICAnY29tcGxldGVkJyxcbiAgJ2ZhaWxlZCcsXG5dKTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJldHVyblZhbHVlUG9sbEludGVydmFsTXMoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGVudk51bWJlcihcbiAgICAnV09SS0ZMT1dfUkVUVVJOX1ZBTFVFX1BPTExfSU5URVJWQUxfTVMnLFxuICAgIFJFVFVSTl9WQUxVRV9QT0xMX0lOVEVSVkFMX01TLFxuICAgIHsgaW50ZWdlcjogdHJ1ZSwgbWluOiAxIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBIb3cgbG9uZyBhIHNpbmdsZSBgcnVucy53YWl0Rm9yVGVybWluYWxTdGF0dXNgIGNhbGwgbWF5IGJsb2NrIHdoaWxlIHdhaXRpbmdcbiAqIGZvciBhIHJ1biB0byBmaW5pc2guIFRoZSB3YWl0IGlzIHJlLWlzc3VlZCB1bnRpbCB0aGUgcnVuIGlzIHRlcm1pbmFsLCBzb1xuICogdGhpcyBpcyBhIHBlci1jYWxsIGJ1ZGdldCByYXRoZXIgdGhhbiBhIGxpbWl0IG9uIHRvdGFsIHdhaXQgdGltZTogaXRzIG9ubHlcbiAqIGpvYiBpcyB0byBib3VuZCBvbmUgcmVxdWVzdCBzbyBhIHN0YWxsZWQgY29ubmVjdGlvbiBjYW5ub3QgaG9sZCB0aGUgYXdhaXRpbmdcbiAqIHNpZGUgZm9yZXZlci5cbiAqXG4gKiA1MHMgaXMgdGhlIGxhcmdlc3QgYnVkZ2V0IGB3b3JsZC12ZXJjZWxgIGNhbiBhY3R1YWxseSByZXF1ZXN0OiBpdCBjbGFtcHMgdG9cbiAqIGBSRVFVRVNUX1RJTUVPVVRfTVNgICg2MHMpIG1pbnVzIDEwcyBvZiBoZWFkcm9vbSwgc28gdGhlIGJ1ZGdldCBpcyBhbHdheXNcbiAqIG9ic2VydmVkIGFzIGEgKnJlc3BvbnNlKiAoYSBub24tdGVybWluYWwgc25hcHNob3QpIHJhdGhlciB0aGFuIGFzIGFcbiAqIGNsaWVudC1zaWRlIHRpbWVvdXQuIEFza2luZyBmb3IgbW9yZSBpcyBzaWxlbnRseSByZWR1Y2VkIHRvIHRoYXQsIHNvIHJhaXNpbmdcbiAqIHRoaXMgd2l0aG91dCBhbHNvIHJhaXNpbmcgYFdPUktGTE9XX1JFUVVFU1RfVElNRU9VVF9NU2AgaGFzIG5vIGVmZmVjdC5cbiAqL1xuY29uc3QgUkVUVVJOX1ZBTFVFX1dBSVRfVElNRU9VVF9NUyA9IDUwXzAwMDtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJldHVyblZhbHVlV2FpdFRpbWVvdXRNcygpOiBudW1iZXIge1xuICByZXR1cm4gZW52TnVtYmVyKFxuICAgICdXT1JLRkxPV19SRVRVUk5fVkFMVUVfV0FJVF9NUycsXG4gICAgUkVUVVJOX1ZBTFVFX1dBSVRfVElNRU9VVF9NUyxcbiAgICB7IGludGVnZXI6IHRydWUsIG1pbjogMSB9XG4gICk7XG59XG5cbi8qKlxuICogSG93IG1hbnkgY29uc2VjdXRpdmUgbG9uZy1wb2xsIGNhbGxzIGBhd2FpdCBydW4ucmV0dXJuVmFsdWVgIHdpbGwgbWFrZVxuICogYmVmb3JlIGZhbGxpbmcgYmFjayB0byBpbnRlcnZhbCBwb2xsaW5nIGZvciB0aGUgcmVzdCBvZiB0aGUgd2FpdC5cbiAqXG4gKiBBIGNhcCBpcyB3b3J0aCBoYXZpbmcgYmVjYXVzZSBhIHdhaXQgdGhhdCBrZWVwcyByZXR1cm5pbmcgbm9uLXRlcm1pbmFsIGlzXG4gKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIG9uZSB0aGF0IGlzIG5vdCB3b3JraW5nLCBhbmQgaW50ZXJ2YWwgcG9sbGluZyBpcyB0aGVcbiAqIGJlaGF2aW9yIHdlIGtub3cgaXMgY29ycmVjdC4gSXQgZG9lcyAqKm5vdCoqIGVuZCB0aGUgYXdhaXQ6IGEgcnVuIGxlZ2l0aW1hdGVseVxuICogbGFzdHMgaG91cnMgb3IgZGF5cywgc28gZXhoYXVzdGluZyB0aGUgY2FwIHN3aXRjaGVzIHN0cmF0ZWd5IGFuZCBrZWVwc1xuICogd2FpdGluZyByYXRoZXIgdGhhbiB0aHJvd2luZy5cbiAqXG4gKiBOb3RlIHRoZSBjb25zZXF1ZW5jZSwgc2luY2UgaXQgY3V0cyBhZ2FpbnN0IHRoZSByZWFzb24gdGhlIGxvbmcgcG9sbCBleGlzdHM6XG4gKiBhIHJ1biBzdGlsbCBnb2luZyBhZnRlciBgTUFYIHggYnVkZ2V0YCAofjggbWludXRlcyBhdCB0aGUgZGVmYXVsdHMpIHNwZW5kc1xuICogdGhlIHJlbWFpbmRlciBvZiBpdHMgbGlmZSBwb2xsaW5nIG9uY2UgcGVyXG4gKiBgV09SS0ZMT1dfUkVUVVJOX1ZBTFVFX1BPTExfSU5URVJWQUxfTVNgLCB3aGljaCBpcyBtb3JlIHJlcXVlc3RzIHRoYW5cbiAqIGNvbnRpbnVpbmcgdG8gbG9uZyBwb2xsIHdvdWxkIGhhdmUgY29zdC4gUnVucyB0aGF0IG91dGxpdmUgdGhlIGNhcCBhcmVcbiAqIGV4YWN0bHkgdGhlIG9uZXMgdGhlIHJlcXVlc3QgcmVkdWN0aW9uIGhlbHBlZCBtb3N0LlxuICovXG5jb25zdCBSRVRVUk5fVkFMVUVfTUFYX0xPTkdfUE9MTFMgPSAxMDtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJldHVyblZhbHVlTWF4TG9uZ1BvbGxzKCk6IG51bWJlciB7XG4gIHJldHVybiBlbnZOdW1iZXIoXG4gICAgJ1dPUktGTE9XX1JFVFVSTl9WQUxVRV9NQVhfTE9OR19QT0xMUycsXG4gICAgUkVUVVJOX1ZBTFVFX01BWF9MT05HX1BPTExTLFxuICAgIHsgaW50ZWdlcjogdHJ1ZSwgbWluOiAxIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGBhd2FpdCBydW4ucmV0dXJuVmFsdWVgIG1heSB1c2UgdGhlIFdvcmxkJ3MgbG9uZyBwb2xsXG4gKiAoYHJ1bnMud2FpdEZvclRlcm1pbmFsU3RhdHVzYCkgaW5zdGVhZCBvZiBpbnRlcnZhbC1wb2xsaW5nIGBydW5zLmdldGAuXG4gKlxuICogRGVmYXVsdCAqKk9OKiogd2hlcmV2ZXIgdGhlIFdvcmxkIGltcGxlbWVudHMgdGhlIG1ldGhvZDsgYSBXb3JsZCB0aGF0IGRvZXNcbiAqIG5vdCBpcyBhbHJlYWR5IG9uIHRoZSBpbnRlcnZhbCBwYXRoIHdpdGggbm90aGluZyB0byBzd2l0Y2ggb2ZmLiBSZWFkc1xuICogYHByb2Nlc3MuZW52LldPUktGTE9XX1JFVFVSTl9WQUxVRV9MT05HX1BPTExgIGxhemlseTsgYW4gZXhwbGljaXQgYCcwJ2AgL1xuICogYCdmYWxzZSdgIGlzIHRoZSBraWxsIHN3aXRjaCwgcmVzdG9yaW5nIHRoZSBmaXhlZC1pbnRlcnZhbCBwb2xsIGV4YWN0bHkgYXNcbiAqIGl0IGJlaGF2ZWQgYmVmb3JlIHRoZSBmYXN0IHBhdGggZXhpc3RlZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmV0dXJuVmFsdWVMb25nUG9sbEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52LldPUktGTE9XX1JFVFVSTl9WQUxVRV9MT05HX1BPTEw7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuICEocmF3ID09PSAnMCcgfHwgcmF3LnRvTG93ZXJDYXNlKCkgPT09ICdmYWxzZScpO1xufVxuXG4vKipcbiAqIEEgYFJlYWRhYmxlU3RyZWFtYCBleHRlbmRlZCB3aXRoIHdvcmtmbG93LXNwZWNpZmljIGhlbHBlcnMuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtmbG93UmVhZGFibGVTdHJlYW08UiA9IGFueT4gPSBSZWFkYWJsZVN0cmVhbTxSPiAmIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRhaWwgaW5kZXggKGluZGV4IG9mIHRoZSBsYXN0IGtub3duIGNodW5rLCAwLWJhc2VkKSBvZiB0aGVcbiAgICogdW5kZXJseWluZyB3b3JrZmxvdyBzdHJlYW0uIFVzZWZ1bCBmb3IgcmVzb2x2aW5nIGEgbmVnYXRpdmUgYHN0YXJ0SW5kZXhgXG4gICAqIGludG8gYW4gYWJzb2x1dGUgcG9zaXRpb24sIGZvciBleGFtcGxlLCB3aGVuIGJ1aWxkaW5nIHJlY29ubmVjdGlvblxuICAgKiBlbmRwb2ludHMgdGhhdCBuZWVkIHRvIGluZm9ybSB0aGUgY2xpZW50IHdoZXJlIHRoZSBzdHJlYW0gc3RhcnRzLlxuICAgKlxuICAgKiBSZXR1cm5zIGAtMWAgd2hlbiBubyBjaHVua3MgaGF2ZSBiZWVuIHdyaXR0ZW4geWV0LlxuICAgKi9cbiAgZ2V0VGFpbEluZGV4KCk6IFByb21pc2U8bnVtYmVyPjtcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSB3b3JrZmxvdydzIHJlYWRhYmxlIHN0cmVhbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBuYW1lc3BhY2UgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBtdWx0aXBsZSBzdHJlYW1zIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgc2FtZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggbnVtYmVyIG9mIHRoZSBzdGFydGluZyBjaHVuayB0byBiZWdpbiByZWFkaW5nIHRoZSBzdHJlYW0gZnJvbS5cbiAgICogTmVnYXRpdmUgdmFsdWVzIHN0YXJ0IGZyb20gdGhlIGVuZCAoZS5nLiAtMyByZWFkcyB0aGUgbGFzdCAzIGNodW5rcykuXG4gICAqL1xuICBzdGFydEluZGV4PzogbnVtYmVyO1xuICAvKipcbiAgICogQW55IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIHRvIGNvbXBsZXRlIGJlZm9yZSBwYXVzaW5nIG9yIHRlcm1pbmF0aW5nIHRoZVxuICAgKiBleGVjdXRpb24gZW52aXJvbm1lbnRcbiAgICogKGkuZS4gdXNpbmcgW2B3YWl0VW50aWwoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9FeHRlbmRhYmxlRXZlbnQvd2FpdFVudGlsKSBvciBzaW1pbGFyKS5cbiAgICovXG4gIG9wcz86IFByb21pc2U8YW55PltdO1xuICAvKipcbiAgICogVGhlIGdsb2JhbCBvYmplY3QgdG8gdXNlIGZvciBoeWRyYXRpbmcgdHlwZXMgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB7QGxpbmsgW2BnbG9iYWxUaGlzYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvZ2xvYmFsVGhpcyl9LlxuICAgKi9cbiAgZ2xvYmFsPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgY2xhc3MgZm9yIGEgd29ya2Zsb3cgcnVuLlxuICovXG5leHBvcnQgY2xhc3MgUnVuPFRSZXN1bHQ+IHtcbiAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlOiBSdW48dW5rbm93bj4pIHtcbiAgICByZXR1cm4geyBydW5JZDogaW5zdGFuY2UucnVuSWQsIHJlc2lsaWVudFN0YXJ0OiBpbnN0YW5jZS4jcmVzaWxpZW50U3RhcnQgfTtcbiAgfVxuXG4gIHN0YXRpYyBbV09SS0ZMT1dfREVTRVJJQUxJWkVdKGRhdGE6IHtcbiAgICBydW5JZDogc3RyaW5nO1xuICAgIHJlc2lsaWVudFN0YXJ0PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHJldHVybiBuZXcgUnVuKGRhdGEucnVuSWQsIHsgcmVzaWxpZW50U3RhcnQ6IGRhdGEucmVzaWxpZW50U3RhcnQgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBydW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ybGQgb2JqZWN0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICN3b3JsZFByb21pc2U6IFByb21pc2U8V29ybGQ+IHwgdW5kZWZpbmVkO1xuICBnZXQgI2xhenlXb3JsZFByb21pc2UoKSB7XG4gICAgaWYgKCF0aGlzLiN3b3JsZFByb21pc2UpIHRoaXMuI3dvcmxkUHJvbWlzZSA9IGdldFdvcmxkTGF6eSgpO1xuICAgIHJldHVybiB0aGlzLiN3b3JsZFByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGVkIGVuY3J5cHRpb24ga2V5IHJlc29sdXRpb24uIFJlc29sdmVkIG9uY2Ugb24gZmlyc3QgdXNlIGFuZFxuICAgKiByZXVzZWQgZm9yIHJldHVyblZhbHVlLCBnZXRSZWFkYWJsZSgpLCBldGMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2VuY3J5cHRpb25LZXlQcm9taXNlOiBQcm9taXNlPFBheWxvYWRLZXkgfCB1bmRlZmluZWQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgcnVuX2NyZWF0ZWQgZmFpbGVkIGFuZCB0aGUgcnVuIG1heSBub3QgZXhpc3QgeWV0ICh0aGVcbiAgICogcmVzaWxpZW50IHN0YXJ0IHBhdGggd2lsbCBjcmVhdGUgaXQgdmlhIHJ1bl9zdGFydGVkKS4gcG9sbFJldHVyblZhbHVlXG4gICAqIHJldHJpZXMgb24gV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIG9ubHkgd2hlbiB0aGlzIGZsYWcgaXMgc2V0IHNvXG4gICAqIHRoYXQgbm9ybWFsIHJ1bnMgZmFpbCBmYXN0IG9uIDQwNC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjcmVzaWxpZW50U3RhcnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihydW5JZDogc3RyaW5nLCBvcHRzPzogeyByZXNpbGllbnRTdGFydD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMucnVuSWQgPSBydW5JZDtcbiAgICB0aGlzLiNyZXNpbGllbnRTdGFydCA9IG9wdHM/LnJlc2lsaWVudFN0YXJ0ID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuZCBjYWNoZXMgdGhlIGVuY3J5cHRpb24ga2V5IGZvciB0aGlzIHJ1bi5cbiAgICogVGhlIGtleSBpcyB0aGUgc2FtZSBmb3IgdGhlIGxpZmV0aW1lIG9mIGEgcnVuLCBzbyBpdCBvbmx5IG5lZWRzXG4gICAqIHRvIGJlIHJlc29sdmVkIG9uY2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2dldEVuY3J5cHRpb25LZXkocnVuPzogV29ya2Zsb3dSdW4pOiBQcm9taXNlPFBheWxvYWRLZXkgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuI2VuY3J5cHRpb25LZXlQcm9taXNlKSB7XG4gICAgICB0aGlzLiNlbmNyeXB0aW9uS2V5UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcbiAgICAgICAgY29uc3QgcnVuRGF0YSA9IHJ1biA/PyAoYXdhaXQgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkpO1xuICAgICAgICBjb25zdCByYXdLZXkgPSBhd2FpdCB3b3JsZC5nZXRFbmNyeXB0aW9uS2V5Rm9yUnVuPy4ocnVuRGF0YSk7XG4gICAgICAgIHJldHVybiByYXdLZXkgPyBhd2FpdCBkZXJpdmVSdW5QYXlsb2FkS2V5cyhyYXdLZXkpIDogdW5kZWZpbmVkO1xuICAgICAgfSkoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI2VuY3J5cHRpb25LZXlQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmVyIGZldGNoaW5nIHRoZSBydW4gYW5kIGl0cyBlbmNyeXB0aW9uIGtleSB1bnRpbCBzZXJpYWxpemVkIHN0cmVhbSBkYXRhXG4gICAqIGlzIGFjdHVhbGx5IHJlYWQuIEFuIGVtcHR5IG9yIG1ldGFkYXRhLW9ubHkgc3RyZWFtIG11c3Qgbm90IHN0YXJ0IGFuXG4gICAqIHVub2JzZXJ2ZWQgcnVuIGxvb2t1cC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjZ2V0RW5jcnlwdGlvbktleUxhemlseSgpOiAoKSA9PiBQcm9taXNlPFBheWxvYWRLZXkgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gKCkgPT4gdGhpcy4jZ2V0RW5jcnlwdGlvbktleSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVycnVwdHMgcGVuZGluZyBgc2xlZXAoKWAgY2FsbHMsIHJlc3VtaW5nIHRoZSB3b3JrZmxvdyBlYXJseS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBzZXR0aW5ncyB0byB0YXJnZXQgc3BlY2lmaWMgc2xlZXAgY2FsbHMgYnkgY29ycmVsYXRpb24gSUQuXG4gICAqICAgSWYgbm90IHByb3ZpZGVkLCBhbGwgcGVuZGluZyBzbGVlcCBjYWxscyB3aWxsIGJlIGludGVycnVwdGVkLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBTdG9wU2xlZXBSZXN1bHR9IG9iamVjdCBjb250YWluaW5nIHRoZSBudW1iZXIgb2Ygc2xlZXAgY2FsbHMgdGhhdCB3ZXJlIGludGVycnVwdGVkLlxuICAgKi9cbiAgYXN5bmMgd2FrZVVwKG9wdGlvbnM/OiBTdG9wU2xlZXBPcHRpb25zKTogUHJvbWlzZTxTdG9wU2xlZXBSZXN1bHQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB3YWtlVXBSdW4oYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZSwgdGhpcy5ydW5JZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNhbmNlbGxhdGlvbiBzZXR0aW5ncy4gYGNhbmNlbFJlYXNvbmAgcmVjb3JkcyBhXG4gICAqICAgZnJlZS10ZXh0IHJlYXNvbiAobWF4IDUxMiBjaGFycykgb24gdGhlIHJ1bl9jYW5jZWxsZWQgZXZlbnQsIHN1cmZhY2VkIGluXG4gICAqICAgdGhlIHJ1biBkZXRhaWwgdmlldy5cbiAgICovXG4gIGFzeW5jIGNhbmNlbChvcHRpb25zPzogQ2FuY2VsUnVuT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgY29uc3Qgd29ybGQgPSBhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlO1xuICAgIGF3YWl0IHdvcmxkLmV2ZW50cy5jcmVhdGUodGhpcy5ydW5JZCwge1xuICAgICAgZXZlbnRUeXBlOiAncnVuX2NhbmNlbGxlZCcsXG4gICAgICBzcGVjVmVyc2lvbjogU1BFQ19WRVJTSU9OX0NVUlJFTlQsXG4gICAgICAuLi4ob3B0aW9ucz8uY2FuY2VsUmVhc29uICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB7IGV2ZW50RGF0YTogeyBjYW5jZWxSZWFzb246IG9wdGlvbnMuY2FuY2VsUmVhc29uIH0gfVxuICAgICAgICA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB3b3JrZmxvdyBydW4gZXhpc3RzLlxuICAgKi9cbiAgZ2V0IGV4aXN0cygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVuc1xuICAgICAgICAuZ2V0KHRoaXMucnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdub25lJyB9KVxuICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKFdvcmtmbG93UnVuTm90Rm91bmRFcnJvci5pcyhlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBnZXQgc3RhdHVzKCk6IFByb21pc2U8V29ya2Zsb3dSdW5TdGF0dXM+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVuc1xuICAgICAgICAuZ2V0KHRoaXMucnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdub25lJyB9KVxuICAgICAgICAudGhlbigocnVuKSA9PiBydW4uc3RhdHVzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKiBQb2xscyB0aGUgd29ya2Zsb3cgcmV0dXJuIHZhbHVlIHVudGlsIHRoZSB3b3JrZmxvdyBydW4gY29tcGxldGVzLlxuICAgKi9cbiAgZ2V0IHJldHVyblZhbHVlKCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI3BvbGxSZXR1cm5WYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIGdldCB3b3JrZmxvd05hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkudGhlbigocnVuKSA9PiBydW4ud29ya2Zsb3dOYW1lKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSB3b3JrZmxvdyBydW4gd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBnZXQgY3JlYXRlZEF0KCk6IFByb21pc2U8RGF0ZT4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5jcmVhdGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biBzdGFydGVkIGV4ZWN1dGlvbi5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIHdvcmtmbG93IGhhcyBub3Qgc3RhcnRlZCB5ZXQuXG4gICAqL1xuICBnZXQgc3RhcnRlZEF0KCk6IFByb21pc2U8RGF0ZSB8IHVuZGVmaW5lZD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5zdGFydGVkQXQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biBjb21wbGV0ZWQuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSB3b3JrZmxvdyBoYXMgbm90IGNvbXBsZXRlZCB5ZXQuXG4gICAqL1xuICBnZXQgY29tcGxldGVkQXQoKTogUHJvbWlzZTxEYXRlIHwgdW5kZWZpbmVkPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLmNvbXBsZXRlZEF0KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlYWRhYmxlIHN0cmVhbSBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgZ2V0IHJlYWRhYmxlKCk6IFdvcmtmbG93UmVhZGFibGVTdHJlYW0ge1xuICAgIHJldHVybiB0aGlzLmdldFJlYWRhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB3b3JrZmxvdyBydW4ncyBkZWZhdWx0IHJlYWRhYmxlIHN0cmVhbSwgd2hpY2ggcmVhZHMgY2h1bmtzXG4gICAqIHdyaXR0ZW4gdG8gdGhlIGNvcnJlc3BvbmRpbmcgd3JpdGFibGUgc3RyZWFtIHtAbGluayBnZXRXcml0YWJsZX0uXG4gICAqXG4gICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaGFzIGFuIGFkZGl0aW9uYWwge0BsaW5rIFdvcmtmbG93UmVhZGFibGVTdHJlYW0uZ2V0VGFpbEluZGV4IHwgZ2V0VGFpbEluZGV4KCl9XG4gICAqIGhlbHBlciB0aGF0IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGtub3duIGNodW5rLiBUaGlzIGlzIHVzZWZ1bCB3aGVuXG4gICAqIGJ1aWxkaW5nIHJlY29ubmVjdGlvbiBlbmRwb2ludHMgdGhhdCBuZWVkIHRvIGluZm9ybSBjbGllbnRzIHdoZXJlIHRoZVxuICAgKiBzdHJlYW0gc3RhcnRzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgcmVhZGFibGUgc3RyZWFtLlxuICAgKiBAcmV0dXJucyBBIGBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtYCBmb3IgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGdldFJlYWRhYmxlPFIgPSBhbnk+KFxuICAgIG9wdGlvbnM6IFdvcmtmbG93UmVhZGFibGVTdHJlYW1PcHRpb25zID0ge31cbiAgKTogV29ya2Zsb3dSZWFkYWJsZVN0cmVhbTxSPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICBjb25zdCB7IG9wcyA9IFtdLCBnbG9iYWwgPSBnbG9iYWxUaGlzLCBzdGFydEluZGV4LCBuYW1lc3BhY2UgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbmFtZSA9IGdldFdvcmtmbG93UnVuU3RyZWFtSWQodGhpcy5ydW5JZCwgbmFtZXNwYWNlKTtcbiAgICAvLyBUaGUgcmVzb2x2ZXIgc3RhcnRzIG9ubHkgd2hlbiB0aGUgZGVzZXJpYWxpemUgc3RyZWFtIHNlZXMgaXRzIGZpcnN0XG4gICAgLy8gY2h1bmssIHNvIGNyZWF0aW5nIG9yIHByb2JpbmcgYW4gZW1wdHkgc3RyZWFtIGNhbm5vdCByZWplY3QgaW4gdGhlXG4gICAgLy8gYmFja2dyb3VuZC5cbiAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gdGhpcy4jZ2V0RW5jcnlwdGlvbktleUxhemlseSgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IGdldEV4dGVybmFsUmV2aXZlcnMoZ2xvYmFsLCBvcHMsIHRoaXMucnVuSWQsIGVuY3J5cHRpb25LZXkpXG4gICAgICAuUmVhZGFibGVTdHJlYW0hKHtcbiAgICAgIG5hbWUsXG4gICAgICBzdGFydEluZGV4LFxuICAgIH0pIGFzIFJlYWRhYmxlU3RyZWFtPFI+O1xuXG4gICAgY29uc3Qgd29ybGRQcm9taXNlID0gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcbiAgICBjb25zdCBydW5JZCA9IHRoaXMucnVuSWQ7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3RyZWFtLCB7XG4gICAgICBnZXRUYWlsSW5kZXg6IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgICAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHdvcmxkUHJvbWlzZTtcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IHdvcmxkLnN0cmVhbXMuZ2V0SW5mbyhydW5JZCwgbmFtZSk7XG4gICAgICAgIHJldHVybiBpbmZvLnRhaWxJbmRleDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGFzeW5jICNyZXNvbHZlVGVybWluYWxSZXR1cm5WYWx1ZShydW46IFdvcmtmbG93UnVuKTogUHJvbWlzZTxUUmVzdWx0PiB7XG4gICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gYXdhaXQgdGhpcy4jZ2V0RW5jcnlwdGlvbktleShydW4pO1xuICAgICAgcmV0dXJuIGF3YWl0IGh5ZHJhdGVXb3JrZmxvd1JldHVyblZhbHVlKFxuICAgICAgICBydW4ub3V0cHV0LFxuICAgICAgICB0aGlzLnJ1bklkLFxuICAgICAgICBlbmNyeXB0aW9uS2V5XG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChydW4uc3RhdHVzID09PSAnY2FuY2VsbGVkJykge1xuICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3IodGhpcy5ydW5JZCk7XG4gICAgfVxuXG4gICAgaWYgKHJ1bi5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICAvLyBIeWRyYXRlIHRoZSBzZXJpYWxpemVkIHJ1biBlcnJvciBzbyB0aGUgb3JpZ2luYWwgdGhyb3duIHZhbHVlXG4gICAgICAvLyAod2l0aCBpdHMgdHlwZSBpZGVudGl0eSwgY2F1c2UgY2hhaW4sIGV0Yy4pIGlzIHNldCBhcyB0aGVcbiAgICAgIC8vIGBjYXVzZWAgb24gV29ya2Zsb3dSdW5GYWlsZWRFcnJvci5cbiAgICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBhd2FpdCB0aGlzLiNnZXRFbmNyeXB0aW9uS2V5KHJ1bik7XG4gICAgICBsZXQgaHlkcmF0ZWRFcnJvcjogdW5rbm93bjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGh5ZHJhdGVkRXJyb3IgPSBhd2FpdCBoeWRyYXRlUnVuRXJyb3IoXG4gICAgICAgICAgcnVuLmVycm9yLFxuICAgICAgICAgIHRoaXMucnVuSWQsXG4gICAgICAgICAgZW5jcnlwdGlvbktleVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElmIGh5ZHJhdGlvbiBmYWlscywgc3VyZmFjZSBhIGdlbmVyaWMgZmFsbGJhY2sgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gbGVhdmluZyB0aGUgdXNlciB3aXRoIGEgcmF3IFVpbnQ4QXJyYXkuIFRoZSBydW4ncyBlcnJvckNvZGVcbiAgICAgICAgLy8gaXMgc3RpbGwgcHJlc2VydmVkIG9uIHRoZSB0aHJvd24gV29ya2Zsb3dSdW5GYWlsZWRFcnJvci5cbiAgICAgICAgaHlkcmF0ZWRFcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGh5ZHJhdGUgd29ya2Zsb3cgcnVuIGVycm9yJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW5GYWlsZWRFcnJvcih0aGlzLnJ1bklkLCBoeWRyYXRlZEVycm9yLCB7XG4gICAgICAgIGVycm9yQ29kZTogcnVuLmVycm9yQ29kZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRlcm1pbmFsIHN0YXR1c2VzIGFyZSBpbW11dGFibGUsIGJ1dCBpZiBhbiBpbmNvbnNpc3RlbnQgd29ybGQgcmV0dXJuc1xuICAgIC8vIGEgbm9uLXRlcm1pbmFsIGZ1bGwgcmVjb3JkLCByZXN1bWUgcG9sbGluZyBzYWZlbHkuXG4gICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3IodGhpcy5ydW5JZCwgcnVuLnN0YXR1cyk7XG4gIH1cblxuICAvKipcbiAgICogUG9sbHMgdGhlIHdvcmtmbG93IHJldHVybiB2YWx1ZSB1bnRpbCB0aGUgd29ya2Zsb3cgcnVuIGNvbXBsZXRlcy5cbiAgICogQGludGVybmFsXG4gICAqIEByZXR1cm5zIFRoZSB3b3JrZmxvdyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBhc3luYyAjcG9sbFJldHVyblZhbHVlKCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcblxuICAgIC8vIFdoZW4gcmVzaWxpZW50U3RhcnQgaXMgdHJ1ZSwgcnVuX2NyZWF0ZWQgZmFpbGVkIGFuZCB0aGUgcnVuIG1heVxuICAgIC8vIG5vdCBleGlzdCB5ZXQuIFJldHJ5IG9uIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvciB1cCB0byAzIHRpbWVzXG4gICAgLy8gKDFzICsgM3MgKyA2cyA9IDEwcyB0b3RhbCkgdG8gZ2l2ZSB0aGUgcXVldWUgdGltZSB0byBkZWxpdmVyXG4gICAgLy8gYW5kIHRoZSBydW50aW1lIHRvIGNyZWF0ZSB0aGUgcnVuIHZpYSBydW5fc3RhcnRlZC5cbiAgICAvLyBXaGVuIHJlc2lsaWVudFN0YXJ0IGlzIGZhbHNlLCA0MDQgaXMgYSByZWFsIGVycm9yOiBmYWlsIGZhc3QuXG4gICAgbGV0IG5vdEZvdW5kUmV0cmllcyA9IDA7XG4gICAgY29uc3QgTk9UX0ZPVU5EX01BWF9SRVRSSUVTID0gdGhpcy4jcmVzaWxpZW50U3RhcnQgPyAzIDogMDtcbiAgICBjb25zdCBOT1RfRk9VTkRfREVMQVlTID0gWzFfMDAwLCAzXzAwMCwgNl8wMDBdO1xuXG4gICAgLy8gUHJlZmVyIHRoZSBXb3JsZCdzIGxvbmcgcG9sbDogb25lIHJlYWQgdGhhdCB0aGUgYmFja2VuZCBob2xkcyBvcGVuXG4gICAgLy8gdW50aWwgdGhlIHJ1biBmaW5pc2hlcywgaW5zdGVhZCBvZiBhc2tpbmcgYWdhaW4gZXZlcnkgc2Vjb25kIGFuZFxuICAgIC8vIHBheWluZyB1cCB0byBhIGZ1bGwgaW50ZXJ2YWwgb2YgcXVhbnRpemF0aW9uIG9uIGEgcnVuIHRoYXQgYWxyZWFkeVxuICAgIC8vIGVuZGVkLiBXb3JsZHMgdGhhdCBjYW5ub3Qgd2FpdCBkbyBub3QgaW1wbGVtZW50IGl0IChzZWVcbiAgICAvLyBgU3RvcmFnZVsncnVucyddLndhaXRGb3JUZXJtaW5hbFN0YXR1c2ApIGFuZCB0aGlzIHN0YXlzIHRoZSBleGFjdFxuICAgIC8vIGZpeGVkLWludGVydmFsIHBvbGwgaXQgaGFzIGFsd2F5cyBiZWVuLCBhcyBkb2VzIGFuIG9wZXJhdG9yIHdob1xuICAgIC8vIHRocm93cyB0aGUgYFdPUktGTE9XX1JFVFVSTl9WQUxVRV9MT05HX1BPTEw9MGAga2lsbCBzd2l0Y2guXG4gICAgY29uc3Qgd2FpdEZvclRlcm1pbmFsU3RhdHVzID0gaXNSZXR1cm5WYWx1ZUxvbmdQb2xsRW5hYmxlZCgpXG4gICAgICA/IHdvcmxkLnJ1bnMud2FpdEZvclRlcm1pbmFsU3RhdHVzPy5iaW5kKHdvcmxkLnJ1bnMpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIExvbmcgcG9sbHMgc3BlbnQgc28gZmFyLiBPbmNlIHRoZSBjYXAgaXMgcmVhY2hlZCB0aGUgbG9vcCBrZWVwcyB3YWl0aW5nXG4gICAgLy8gYnV0IG9uIHRoZSBpbnRlcnZhbCBwYXRoLCB3aGljaCBpcyB0aGUgc3RyYXRlZ3kgd2Uga25vdyBpcyBjb3JyZWN0OyBzZWVcbiAgICAvLyBgUkVUVVJOX1ZBTFVFX01BWF9MT05HX1BPTExTYC4gTmV2ZXIgYSByZWFzb24gdG8gc3RvcCBhd2FpdGluZy5cbiAgICBsZXQgbG9uZ1BvbGxzID0gMDtcbiAgICBjb25zdCBtYXhMb25nUG9sbHMgPSBnZXRSZXR1cm5WYWx1ZU1heExvbmdQb2xscygpO1xuXG4gICAgLy8gTk9URTogd2hlbiB0aGlzIHBvbGwgcnVucyBpbnNpZGUgYSBzdGVwIChlLmcuIHRoZSBzdGVwIHRoYXQgYSBwYXJlbnRcbiAgICAvLyB3b3JrZmxvdyB1c2VzIHRvIGF3YWl0IGEgY2hpbGQgd29ya2Zsb3cncyBgcmV0dXJuVmFsdWVgKSwgaXQgYmxvY2tzXG4gICAgLy8gYSBxdWV1ZSB3b3JrZXIgc2xvdCBmb3IgYXMgbG9uZyBhcyB0aGUgY2hpbGQgcnVuIHRha2VzIHRvIGZpbmlzaC5cbiAgICAvLyBXb3JrZXItYmFzZWQgd29ybGRzIGxpa2UgYHdvcmxkLXBvc3RncmVzYCBtdXN0IGJlIHNpemVkIHRvIGNvdmVyIHRoZVxuICAgIC8vIHBlYWsgbnVtYmVyIG9mIHN1Y2ggcG9sbHMgaW4gZmxpZ2h0OyBzZWUgdGhlIGBxdWV1ZUNvbmN1cnJlbmN5YFxuICAgIC8vIGRlZmF1bHQgb24gdGhlIFBvc3RncmVzIHdvcmxkIGFuZCB0aGUgbm90ZXMgaW4gdGhlIGVhZ2VyLXByb2Nlc3NpbmdcbiAgICAvLyBjaGFuZ2Vsb2cgZm9yIGRldGFpbHMuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZXJhdGlvblN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBNZXRhZGF0YSBvbmx5LCBlaXRoZXIgd2F5OiB0aGUgc3RhdHVzIGlzIGFsbCB0aGlzIGl0ZXJhdGlvbiBuZWVkcyxcbiAgICAgICAgLy8gYW5kIHBheWxvYWQgcmVmcyBhcmUgcmVzb2x2ZWQgb25jZSBiZWxvdywgYWZ0ZXIgYSB0ZXJtaW5hbCBzdGF0dXMgaXNcbiAgICAgICAgLy8gb2JzZXJ2ZWQuXG4gICAgICAgIGNvbnN0IHVzZUxvbmdQb2xsID0gd2FpdEZvclRlcm1pbmFsU3RhdHVzICYmIGxvbmdQb2xscyA8IG1heExvbmdQb2xscztcbiAgICAgICAgaWYgKHVzZUxvbmdQb2xsKSBsb25nUG9sbHMrKztcbiAgICAgICAgY29uc3QgcnVuTWV0YWRhdGEgPSB1c2VMb25nUG9sbFxuICAgICAgICAgID8gYXdhaXQgd2FpdEZvclRlcm1pbmFsU3RhdHVzKHRoaXMucnVuSWQsIHtcbiAgICAgICAgICAgICAgdGltZW91dE1zOiBnZXRSZXR1cm5WYWx1ZVdhaXRUaW1lb3V0TXMoKSxcbiAgICAgICAgICAgICAgcmVzb2x2ZURhdGE6ICdub25lJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBhd2FpdCB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkLCB7XG4gICAgICAgICAgICAgIHJlc29sdmVEYXRhOiAnbm9uZScsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAocnVuTWV0YWRhdGEuc3RhdHVzID09PSAnY2FuY2VsbGVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBXb3JrZmxvd1J1bkNhbmNlbGxlZEVycm9yKHRoaXMucnVuSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFBBWUxPQURfVEVSTUlOQUxfUlVOX1NUQVRVU0VTLmhhcyhydW5NZXRhZGF0YS5zdGF0dXMpKSB7XG4gICAgICAgICAgLy8gVGhlIHBvbGxpbmcgcmVhZCBhYm92ZSBkZWxpYmVyYXRlbHkgc2tpcHMgaW5wdXQvb3V0cHV0L2Vycm9yIHJlZnMuXG4gICAgICAgICAgLy8gUmVzb2x2ZSBwYXlsb2FkcyBvbmx5IG9uY2UgdGhlIHJ1biByZWFjaGVzIGEgdGVybWluYWwgc3RhdGUuXG4gICAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCwge1xuICAgICAgICAgICAgcmVzb2x2ZURhdGE6ICdhbGwnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLiNyZXNvbHZlVGVybWluYWxSZXR1cm5WYWx1ZShydW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUnVuIG5vdCBjb21wbGV0ZWQgeWV0OiBzbGVlcCBhbmQgcG9sbCBhZ2Fpbi5cbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3IodGhpcy5ydW5JZCwgcnVuTWV0YWRhdGEuc3RhdHVzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yLmlzKGVycm9yKSkge1xuICAgICAgICAgIC8vIFNwYWNlIGNvbnNlY3V0aXZlIG5vbi10ZXJtaW5hbCBvYnNlcnZhdGlvbnMgYXQgbGVhc3Qgb25lIHBvbGxcbiAgICAgICAgICAvLyBpbnRlcnZhbCBhcGFydC4gT24gdGhlIHBsYWluLXBvbGwgcGF0aCB0aGF0IGlzIHRoZSBmYW1pbGlhciBmaXhlZFxuICAgICAgICAgIC8vIHNsZWVwOyBvbiB0aGUgbG9uZy1wb2xsIHBhdGggdGhlIHdhaXQgaGFzIHVzdWFsbHkgYWxyZWFkeVxuICAgICAgICAgIC8vIG91dGxhc3RlZCB0aGUgaW50ZXJ2YWwgYW5kIHRoaXMgaXMgYSBuby1vcCwgYnV0IGl0IGFsc28gbWVhbnMgYVxuICAgICAgICAgIC8vIFdvcmxkIHdob3NlIHdhaXQgcmV0dXJucyBlYXJseSAoYSBiYWNrZW5kIHdpdGggbm8gbG9uZyBwb2xsLCBhXG4gICAgICAgICAgLy8gY2xhbXBlZCBidWRnZXQpIGRlZ3JhZGVzIHRvIGludGVydmFsIHBvbGxpbmcgaW5zdGVhZCBvZiBzcGlubmluZy5cbiAgICAgICAgICBjb25zdCByZW1haW5pbmdJbnRlcnZhbE1zID1cbiAgICAgICAgICAgIGdldFJldHVyblZhbHVlUG9sbEludGVydmFsTXMoKSAtIChEYXRlLm5vdygpIC0gaXRlcmF0aW9uU3RhcnRlZEF0KTtcbiAgICAgICAgICBpZiAocmVtYWluaW5nSW50ZXJ2YWxNcyA+IDApIHtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHJlbWFpbmluZ0ludGVydmFsTXMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yLmlzKGVycm9yKSAmJlxuICAgICAgICAgIG5vdEZvdW5kUmV0cmllcyA8IE5PVF9GT1VORF9NQVhfUkVUUklFU1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBkZWxheSA9IE5PVF9GT1VORF9ERUxBWVNbbm90Rm91bmRSZXRyaWVzXSE7XG4gICAgICAgICAgbm90Rm91bmRSZXRyaWVzKys7XG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgZGVsYXkpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBgUnVuYCBvYmplY3QgZm9yIGEgZ2l2ZW4gcnVuIElELlxuICpcbiAqIEBwYXJhbSBydW5JZCAtIFRoZSB3b3JrZmxvdyBydW4gSUQgb2J0YWluZWQgZnJvbSB7QGxpbmsgc3RhcnR9LlxuICogQHJldHVybnMgQSBgUnVuYCBvYmplY3QuXG4gKiBAdGhyb3dzIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvciBpZiB0aGUgcnVuIElEIGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bjxUUmVzdWx0PihydW5JZDogc3RyaW5nKTogUnVuPFRSZXN1bHQ+IHtcbiAgcmV0dXJuIG5ldyBSdW4ocnVuSWQpO1xufVxuIl19