@workflow/web-shared 5.0.0-beta.42 → 5.0.0-beta.44

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 (116) hide show
  1. package/README.md +4 -4
  2. package/dist/components/event-list-view.d.ts +12 -0
  3. package/dist/components/event-list-view.d.ts.map +1 -1
  4. package/dist/components/event-list-view.js +41 -20
  5. package/dist/components/sidebar/attribute-panel.d.ts +6 -2
  6. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  7. package/dist/components/sidebar/attribute-panel.js +10 -8
  8. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  9. package/dist/components/sidebar/copyable-data-block.js +2 -2
  10. package/dist/components/sidebar/entity-detail-panel.d.ts +6 -2
  11. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  12. package/dist/components/sidebar/entity-detail-panel.js +13 -5
  13. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  14. package/dist/components/sidebar/events-list.js +12 -5
  15. package/dist/components/sidebar/resolve-hook-modal.js +1 -1
  16. package/dist/components/sidebar/sidebar-data-context.d.ts +2 -0
  17. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
  18. package/dist/components/sidebar/sidebar-data-context.js +1 -1
  19. package/dist/components/stream-viewer.js +2 -2
  20. package/dist/components/trace-viewer/components/detail-panel-width.d.ts +4 -4
  21. package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -1
  22. package/dist/components/trace-viewer/components/detail-panel-width.js +5 -5
  23. package/dist/components/trace-viewer/components/detail-panel.d.ts +1 -1
  24. package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -1
  25. package/dist/components/trace-viewer/components/detail-panel.js +3 -3
  26. package/dist/components/trace-viewer/components/draggable-border.d.ts +1 -1
  27. package/dist/components/trace-viewer/components/draggable-border.js +2 -2
  28. package/dist/components/trace-viewer/components/middle-truncate/measurement-batch.d.ts +9 -0
  29. package/dist/components/trace-viewer/components/middle-truncate/measurement-batch.d.ts.map +1 -0
  30. package/dist/components/trace-viewer/components/middle-truncate/measurement-batch.js +29 -0
  31. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -1
  32. package/dist/components/trace-viewer/components/middle-truncate/middle-truncate.js +16 -8
  33. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -1
  34. package/dist/components/trace-viewer/components/middle-truncate/use-middle-truncate.js +83 -19
  35. package/dist/components/trace-viewer/components/minimap.js +4 -4
  36. package/dist/components/trace-viewer/components/span-markers.d.ts +8 -9
  37. package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -1
  38. package/dist/components/trace-viewer/components/span-markers.js +13 -10
  39. package/dist/components/trace-viewer/components/timeline.d.ts +1 -1
  40. package/dist/components/trace-viewer/components/timeline.js +4 -4
  41. package/dist/components/trace-viewer/components/use-row-window.d.ts +1 -1
  42. package/dist/components/trace-viewer/components/use-row-window.js +2 -2
  43. package/dist/components/trace-viewer/trace-viewer.js +3 -3
  44. package/dist/components/trace-viewer/utils.d.ts +3 -1
  45. package/dist/components/trace-viewer/utils.d.ts.map +1 -1
  46. package/dist/components/trace-viewer/utils.js +6 -5
  47. package/dist/components/ui/data-inspector.d.ts +7 -1
  48. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  49. package/dist/components/ui/data-inspector.js +10 -5
  50. package/dist/components/ui/decrypt-button.d.ts +5 -1
  51. package/dist/components/ui/decrypt-button.d.ts.map +1 -1
  52. package/dist/components/ui/decrypt-button.js +4 -4
  53. package/dist/components/ui/duplicate-event-tooltip.d.ts +15 -5
  54. package/dist/components/ui/duplicate-event-tooltip.d.ts.map +1 -1
  55. package/dist/components/ui/duplicate-event-tooltip.js +18 -9
  56. package/dist/components/ui/error-stack-block.js +4 -4
  57. package/dist/components/ui/timestamp-tooltip.d.ts +5 -3
  58. package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
  59. package/dist/components/ui/timestamp-tooltip.js +9 -9
  60. package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
  61. package/dist/components/workflow-traces/event-colors.js +11 -1
  62. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  63. package/dist/components/workflow-traces/trace-span-construction.js +5 -4
  64. package/dist/index.d.ts +1 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +2 -1
  67. package/dist/lib/duplicate-events.d.ts +1 -1
  68. package/dist/lib/duplicate-events.js +2 -2
  69. package/dist/lib/hydration.d.ts.map +1 -1
  70. package/dist/lib/hydration.js +8 -13
  71. package/dist/lib/sealed-events.d.ts +28 -0
  72. package/dist/lib/sealed-events.d.ts.map +1 -0
  73. package/dist/lib/sealed-events.js +30 -0
  74. package/dist/lib/trace-builder.d.ts.map +1 -1
  75. package/dist/lib/trace-builder.js +8 -5
  76. package/dist/lib/utils.d.ts +1 -1
  77. package/dist/lib/utils.js +2 -2
  78. package/dist/lib/zstd-browser-decoder.js +2 -2
  79. package/package.json +5 -5
  80. package/src/components/event-list-view.tsx +57 -22
  81. package/src/components/sidebar/attribute-panel.tsx +15 -7
  82. package/src/components/sidebar/copyable-data-block.tsx +8 -1
  83. package/src/components/sidebar/entity-detail-panel.tsx +18 -2
  84. package/src/components/sidebar/events-list.tsx +16 -6
  85. package/src/components/sidebar/resolve-hook-modal.tsx +2 -2
  86. package/src/components/sidebar/sidebar-data-context.tsx +2 -0
  87. package/src/components/stream-viewer.tsx +1 -1
  88. package/src/components/trace-viewer/components/detail-panel-width.ts +4 -4
  89. package/src/components/trace-viewer/components/detail-panel.tsx +3 -1
  90. package/src/components/trace-viewer/components/draggable-border.tsx +1 -1
  91. package/src/components/trace-viewer/components/middle-truncate/measurement-batch.ts +47 -0
  92. package/src/components/trace-viewer/components/middle-truncate/middle-truncate.tsx +15 -7
  93. package/src/components/trace-viewer/components/middle-truncate/use-middle-truncate.ts +132 -38
  94. package/src/components/trace-viewer/components/minimap.tsx +3 -3
  95. package/src/components/trace-viewer/components/span-markers.tsx +18 -13
  96. package/src/components/trace-viewer/components/timeline.tsx +4 -4
  97. package/src/components/trace-viewer/components/use-row-window.ts +1 -1
  98. package/src/components/trace-viewer/trace-viewer.tsx +2 -2
  99. package/src/components/trace-viewer/utils.test.ts +5 -3
  100. package/src/components/trace-viewer/utils.ts +12 -8
  101. package/src/components/ui/data-inspector.tsx +19 -3
  102. package/src/components/ui/decrypt-button.tsx +9 -2
  103. package/src/components/ui/duplicate-event-tooltip.tsx +32 -10
  104. package/src/components/ui/error-stack-block.tsx +3 -3
  105. package/src/components/ui/timestamp-tooltip.tsx +16 -6
  106. package/src/components/workflow-traces/event-colors.ts +11 -0
  107. package/src/components/workflow-traces/trace-span-construction.test.ts +27 -1
  108. package/src/components/workflow-traces/trace-span-construction.ts +5 -3
  109. package/src/index.ts +4 -0
  110. package/src/lib/duplicate-events.ts +1 -1
  111. package/src/lib/hydration.ts +7 -12
  112. package/src/lib/sealed-events.ts +32 -0
  113. package/src/lib/trace-builder.test.ts +29 -1
  114. package/src/lib/trace-builder.ts +10 -5
  115. package/src/lib/utils.ts +1 -1
  116. package/src/lib/zstd-browser-decoder.ts +1 -1
@@ -11,7 +11,7 @@ export declare const AttributeBlock: ({ attribute, value, isLoading, inline, con
11
11
  inline?: boolean;
12
12
  context?: DisplayContext;
13
13
  }) => import("react/jsx-runtime").JSX.Element | null;
14
- export declare const AttributePanel: ({ data, moduleSpecifier, moduleSourceUrl, isLoading, error, expiredAt, onStreamClick, onRunClick, onDecrypt, isDecrypting, resource, }: {
14
+ export declare const AttributePanel: ({ data, moduleSpecifier, moduleSourceUrl, isLoading, error, expiredAt, onStreamClick, onRunClick, onDecrypt, isDecrypting, isDecryptDisabled, decryptDisabledReason, resource, }: {
15
15
  data: Record<string, unknown>;
16
16
  moduleSpecifier?: string;
17
17
  moduleSourceUrl?: string;
@@ -26,7 +26,11 @@ export declare const AttributePanel: ({ data, moduleSpecifier, moduleSourceUrl,
26
26
  onDecrypt?: () => void;
27
27
  /** Whether decryption is currently in progress */
28
28
  isDecrypting?: boolean;
29
- /** Resource type of the selected span — used to show targeted loading skeletons. */
29
+ /** Whether decryption is unavailable */
30
+ isDecryptDisabled?: boolean;
31
+ /** Explains why decryption is unavailable */
32
+ decryptDisabledReason?: string;
33
+ /** Resource type of the selected span, used to show targeted loading skeletons. */
30
34
  resource?: string;
31
35
  }) => import("react/jsx-runtime").JSX.Element;
32
36
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"attribute-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/attribute-panel.tsx"],"names":[],"mappings":"AAkYA,eAAO,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,MAOrD,CAAC;AA4BF,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAqTD,eAAO,MAAM,cAAc,GAAI,mDAM5B;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,mDA+EA,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,wIAY5B;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,4CAuKA,CAAC"}
1
+ {"version":3,"file":"attribute-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/attribute-panel.tsx"],"names":[],"mappings":"AAkYA,eAAO,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,MAOrD,CAAC;AA4BF,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAqTD,eAAO,MAAM,cAAc,GAAI,mDAM5B;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,mDA+EA,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,kLAc5B;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,4CAyKA,CAAC"}
@@ -78,7 +78,7 @@ function EncryptedFieldBlock() {
78
78
  return _jsx(EncryptedDataBlock, {});
79
79
  }
80
80
  /**
81
- * Inline display for an expired field flat label indicating data is no longer available.
81
+ * Inline display for an expired field: flat label indicating data is no longer available.
82
82
  */
83
83
  function ExpiredFieldBlock() {
84
84
  return (_jsx("div", { className: "flex items-center gap-1.5 rounded-md border px-3 py-2 text-label-12", style: {
@@ -147,7 +147,7 @@ const attributeOrder = [
147
147
  ];
148
148
  /**
149
149
  * Rank of an attribute in {@link attributeOrder}. Keys absent from that list
150
- * sort after every listed one rather than before them `indexOf` reports a
150
+ * sort after every listed one rather than before them: `indexOf` reports a
151
151
  * miss as `-1`, which is truthy, so a `|| 0` fallback never fires.
152
152
  */
153
153
  const attributeOrderIndex = (attribute) => {
@@ -268,7 +268,7 @@ const attributeToDisplayFn = {
268
268
  receivedCount: (value) => String(value),
269
269
  lastReceivedAt: localMillisecondTimeOrNull,
270
270
  disposedAt: localMillisecondTimeOrNull,
271
- // Internal resume plumbing not surfaced in the UI
271
+ // Internal resume plumbing, not surfaced in the UI
272
272
  resumeContext: (_value) => null,
273
273
  resumeId: (_value) => null,
274
274
  resumeCapabilities: (_value) => null,
@@ -286,7 +286,7 @@ const attributeToDisplayFn = {
286
286
  projectId: (_value) => null,
287
287
  environment: (_value) => null,
288
288
  executionContext: (_value) => null,
289
- // Attributes string-string metadata attached to the run.
289
+ // Attributes: string-string metadata attached to the run.
290
290
  // Rendered as key-value rows in its own collapsible section;
291
291
  // if empty/missing, hidden by the hasDisplayContent gate.
292
292
  attributes: (value) => {
@@ -294,7 +294,7 @@ const attributeToDisplayFn = {
294
294
  return null;
295
295
  return _jsx(RunAttributesCard, { attributes: value });
296
296
  },
297
- // Dates wrapped with TimestampTooltip showing UTC/local + relative time
297
+ // Dates: wrapped with TimestampTooltip showing UTC/local + relative time
298
298
  occurredAt: timestampWithTooltipOrNull,
299
299
  createdAt: timestampWithTooltipOrNull,
300
300
  startedAt: timestampWithTooltipOrNull,
@@ -392,7 +392,7 @@ const attributeToDisplayFn = {
392
392
  },
393
393
  // Internal encryption plumbing: the run's X25519 public key, used by
394
394
  // cross-run writers to seal payloads to this run. Not actionable for users
395
- // and not secret hidden rather than rendered as 44 opaque base64 chars.
395
+ // and not secret, so hidden rather than rendered as 44 opaque base64 chars.
396
396
  encryptionPublicKey: (_value) => null,
397
397
  };
398
398
  const resolvableAttributes = [
@@ -466,7 +466,7 @@ export const AttributeBlock = ({ attribute, value, isLoading, inline = false, co
466
466
  }
467
467
  return (_jsxs("div", { className: "relative", children: [typeof isLoading === 'boolean' && isLoading && (_jsx("div", { className: "absolute top-9 right-4", children: _jsx("div", { className: "animate-spin rounded-full h-4 w-4 border-b-2", style: { borderColor: 'var(--ds-gray-900)' } }) })), _jsxs("div", { className: "my-2 flex flex-col gap-0", children: [_jsx("span", { className: "text-label-14 text-gray-1000 font-medium first-letter:uppercase", children: attribute }), _jsx("span", { className: "text-label-12", style: { color: 'var(--ds-gray-1000)' }, children: displayValue })] }, attribute)] }));
468
468
  };
469
- export const AttributePanel = ({ data, moduleSpecifier, moduleSourceUrl, isLoading, error, expiredAt, onStreamClick, onRunClick, onDecrypt, isDecrypting = false, resource, }) => {
469
+ export const AttributePanel = ({ data, moduleSpecifier, moduleSourceUrl, isLoading, error, expiredAt, onStreamClick, onRunClick, onDecrypt, isDecrypting = false, isDecryptDisabled = false, decryptDisabledReason, resource, }) => {
470
470
  // Extract workflowCoreVersion from executionContext for display
471
471
  const displayData = useMemo(() => {
472
472
  const result = { ...data };
@@ -543,6 +543,8 @@ export const AttributePanel = ({ data, moduleSpecifier, moduleSourceUrl, isLoadi
543
543
  ? {
544
544
  onDecrypt,
545
545
  isDecrypting,
546
+ isDecryptDisabled,
547
+ decryptDisabledReason,
546
548
  hasEncryptedData: outerDecryptCtx?.hasEncryptedData,
547
549
  }
548
550
  : outerDecryptCtx;
@@ -557,4 +559,4 @@ export const AttributePanel = ({ data, moduleSpecifier, moduleSourceUrl, isLoadi
557
559
  resource === 'sleep' &&
558
560
  !displayData.resumeAt && (_jsxs("div", { className: "flex items-center justify-between gap-3 py-0.5", children: [_jsx("span", { className: "text-label-13 text-gray-900", children: "Resume" }), _jsx(Skeleton, { className: "h-4 w-[55%]" })] }))] }) })] })), error ? (_jsx(ErrorCard, { title: "Failed to load resource details", details: error.message, className: "my-4" })) : hasExpired ? (_jsx(ExpiredDataMessage, {})) : resolvedAttributes.length > 0 ? (resolvedAttributes.map((attribute) => (_jsx(AttributeBlock, { isLoading: isLoading, attribute: attribute, value: displayData[attribute], context: displayContext }, attribute)))) : null] }) }) }) }));
559
561
  };
560
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2lkZWJhci9hdHRyaWJ1dGUtcGFuZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixrQkFBa0IsR0FDbkIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixrQkFBa0IsR0FDbkIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixlQUFlLEdBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFD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TmFtZSwgcGFyc2VXb3JrZmxvd05hbWUgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBTdGVwLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IE1vZGVsTWVzc2FnZSB9IGZyb20gJ2FpJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB0eXBlIHsgS2V5Ym9hcmRFdmVudCwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0VuY3J5cHRlZE1hcmtlciwgaXNFeHBpcmVkTWFya2VyIH0gZnJvbSAnLi4vLi4vbGliL2h5ZHJhdGlvbic7XG5pbXBvcnQgeyBleHRyYWN0Q29udmVyc2F0aW9uLCBpc0RvU3RyZWFtU3RlcCB9IGZyb20gJy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQge1xuICBDb2xsYXBzaWJsZSxcbiAgQ29sbGFwc2libGVDb250ZW50LFxuICBDb2xsYXBzaWJsZVJvb3QsXG4gIENvbGxhcHNpYmxlVHJpZ2dlcixcbn0gZnJvbSAnLi4vdWkvY29sbGFwc2libGUnO1xuaW1wb3J0IHsgQ29udGV4dENhcmRQcm92aWRlciB9IGZyb20gJy4uL3VpL2NvbnRleHQtY2FyZCc7XG5pbXBvcnQge1xuICBEZWNyeXB0Q2xpY2tDb250ZXh0LFxuICBSdW5DbGlja0NvbnRleHQsXG4gIFN0cmVhbUNsaWNrQ29udGV4dCxcbn0gZnJvbSAnLi4vdWkvZGF0YS1pbnNwZWN0b3InO1xuaW1wb3J0IHsgRXJyb3JDYXJkIH0gZnJvbSAnLi4vdWkvZXJyb3ItY2FyZCc7XG5pbXBvcnQgeyBFcnJvclN0YWNrQmxvY2ssIGlzU3RydWN0dXJlZEVycm9yIH0gZnJvbSAnLi4vdWkvZXJyb3Itc3RhY2stYmxvY2snO1xuaW1wb3J0IHsgU2tlbGV0b24gfSBmcm9tICcuLi91aS9za2VsZXRvbic7XG5pbXBvcnQgeyBUaW1lc3RhbXBUb29sdGlwIH0gZnJvbSAnLi4vdWkvdGltZXN0YW1wLXRvb2x0aXAnO1xuaW1wb3J0IHtcbiAgRGV0YWlsTW9ub0tleVZhbHVlUm93LFxuICBSdW5BdHRyaWJ1dGVzQ2FyZCxcbiAgUnVuTWV0YWRhdGFDYXJkLFxufSBmcm9tICcuL2F0dHJpYnV0ZXMtYmxvY2snO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uVmlldyB9IGZyb20gJy4vY29udmVyc2F0aW9uLXZpZXcnO1xuaW1wb3J0IHsgQ29weWFibGVEYXRhQmxvY2ssIEVuY3J5cHRlZERhdGFCbG9jayB9IGZyb20gJy4vY29weWFibGUtZGF0YS1ibG9jayc7XG5cbi8qKlxuICogVGFiIGJ1dHRvbiBmb3IgY29udmVyc2F0aW9uL0pTT04gdG9nZ2xlXG4gKi9cbmZ1bmN0aW9uIFRhYkJ1dHRvbih7XG4gIGFjdGl2ZSxcbiAgb25DbGljayxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgYXJpYS1zZWxlY3RlZD17YWN0aXZlfVxuICAgICAgdGFiSW5kZXg9e2FjdGl2ZSA/IDAgOiAtMX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBjbGFzc05hbWU9XCJweC0zIHB5LTEuNSB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyAtbWItcHhcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgLy8gRXhwbGljaXQgc3R5bGVzIHRvIHByZXZlbnQgYXBwLWxldmVsIGJ1dHRvbiBvdmVycmlkZXMgd2hlbiB3ZWItc2hhcmVkXG4gICAgICAgIC8vIGlzIGVtYmVkZGVkIGluIGEgc2VsZi1ob3N0ZWQgYXBwLlxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGJvcmRlclRvcDogJ25vbmUnLFxuICAgICAgICBib3JkZXJMZWZ0OiAnbm9uZScsXG4gICAgICAgIGJvcmRlclJpZ2h0OiAnbm9uZScsXG4gICAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAke2FjdGl2ZSA/ICd2YXIoLS1kcy1ibHVlLTYwMCknIDogJ3RyYW5zcGFyZW50J31gLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICBjb2xvcjogYWN0aXZlID8gJ3ZhcigtLWRzLWdyYXktMTAwMCknIDogJ3ZhcigtLWRzLWdyYXktNjAwKScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuLyoqXG4gKiBTaGFyZWQgdGFiYmVkIGNvbnRhaW5lciB3aXRoIGFjY2Vzc2libGUgQVJJQSByb2xlcyBhbmQga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAqIFVzZWQgYnkgQ29udmVyc2F0aW9uV2l0aFRhYnMgZm9yIHRoZSBjb252ZXJzYXRpb24vSlNPTiB0b2dnbGUuXG4gKi9cbmZ1bmN0aW9uIFRhYmJlZENvbnRhaW5lcjxUIGV4dGVuZHMgc3RyaW5nPih7XG4gIHRhYnMsXG4gIGFjdGl2ZVRhYixcbiAgb25UYWJDaGFuZ2UsXG4gIGFyaWFMYWJlbCxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIHRhYnM6IHsgaWQ6IFQ7IGxhYmVsOiBzdHJpbmcgfVtdO1xuICBhY3RpdmVUYWI6IFQ7XG4gIG9uVGFiQ2hhbmdlOiAodGFiOiBUKSA9PiB2b2lkO1xuICBhcmlhTGFiZWw6IHN0cmluZztcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn0pIHtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdBcnJvd1JpZ2h0JyAmJiBldmVudC5rZXkgIT09ICdBcnJvd0xlZnQnKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGFicy5maW5kSW5kZXgoKHQpID0+IHQuaWQgPT09IGFjdGl2ZVRhYik7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPVxuICAgICAgICBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0J1xuICAgICAgICAgID8gKGN1cnJlbnRJbmRleCArIDEpICUgdGFicy5sZW5ndGhcbiAgICAgICAgICA6IChjdXJyZW50SW5kZXggLSAxICsgdGFicy5sZW5ndGgpICUgdGFicy5sZW5ndGg7XG4gICAgICBvblRhYkNoYW5nZSh0YWJzW25leHRJbmRleF0uaWQpO1xuICAgIH0sXG4gICAgW3RhYnMsIGFjdGl2ZVRhYiwgb25UYWJDaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlclwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGdhcC0xIGJvcmRlci1iXCJcbiAgICAgICAgcm9sZT1cInRhYmxpc3RcIlxuICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGFicy5tYXAoKHRhYikgPT4gKFxuICAgICAgICAgIDxUYWJCdXR0b25cbiAgICAgICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICAgICAgYWN0aXZlPXthY3RpdmVUYWIgPT09IHRhYi5pZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uVGFiQ2hhbmdlKHRhYi5pZCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RhYi5sYWJlbH1cbiAgICAgICAgICA8L1RhYkJ1dHRvbj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiByb2xlPVwidGFicGFuZWxcIj57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmNvbnN0IGNvbnZlcnNhdGlvblRhYnMgPSBbXG4gIHsgaWQ6ICdjb252ZXJzYXRpb24nIGFzIGNvbnN0LCBsYWJlbDogJ0NvbnZlcnNhdGlvbicgfSxcbiAgeyBpZDogJ2pzb24nIGFzIGNvbnN0LCBsYWJlbDogJ1JhdyBKU09OJyB9LFxuXTtcblxuLyoqXG4gKiBUYWJiZWQgdmlldyBmb3IgY29udmVyc2F0aW9uIGFuZCByYXcgSlNPTlxuICovXG5mdW5jdGlvbiBDb252ZXJzYXRpb25XaXRoVGFicyh7XG4gIGNvbnZlcnNhdGlvbixcbiAgYXJncyxcbiAgZGVmYXVsdE9wZW4sXG4gIG9uT3BlbkNoYW5nZSxcbn06IHtcbiAgY29udmVyc2F0aW9uOiBNb2RlbE1lc3NhZ2VbXTtcbiAgYXJnczogdW5rbm93bltdO1xuICBkZWZhdWx0T3Blbj86IGJvb2xlYW47XG4gIG9uT3BlbkNoYW5nZT86IChvcGVuOiBib29sZWFuKSA9PiB2b2lkO1xufSkge1xuICBjb25zdCBbYWN0aXZlVGFiLCBzZXRBY3RpdmVUYWJdID0gdXNlU3RhdGU8J2NvbnZlcnNhdGlvbicgfCAnanNvbic+KFxuICAgICdjb252ZXJzYXRpb24nXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29sbGFwc2libGVcbiAgICAgIGxhYmVsPVwiSW5wdXRcIlxuICAgICAgZGVmYXVsdE9wZW49e2RlZmF1bHRPcGVufVxuICAgICAgb25PcGVuQ2hhbmdlPXtvbk9wZW5DaGFuZ2V9XG4gICAgPlxuICAgICAgPFRhYmJlZENvbnRhaW5lclxuICAgICAgICB0YWJzPXtjb252ZXJzYXRpb25UYWJzfVxuICAgICAgICBhY3RpdmVUYWI9e2FjdGl2ZVRhYn1cbiAgICAgICAgb25UYWJDaGFuZ2U9e3NldEFjdGl2ZVRhYn1cbiAgICAgICAgYXJpYUxhYmVsPVwiQ29udmVyc2F0aW9uIHZpZXdcIlxuICAgICAgPlxuICAgICAgICB7YWN0aXZlVGFiID09PSAnY29udmVyc2F0aW9uJyA/IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uVmlldyBtZXNzYWdlcz17Y29udmVyc2F0aW9ufSAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0zXCI+XG4gICAgICAgICAgICB7QXJyYXkuaXNBcnJheShhcmdzKVxuICAgICAgICAgICAgICA/IGFyZ3MubWFwKCh2LCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmlyc3Q6bXQtMFwiIGtleT17aX0+XG4gICAgICAgICAgICAgICAgICAgIHtKc29uQmxvY2sodil9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICA6IEpzb25CbG9jayhhcmdzKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvVGFiYmVkQ29udGFpbmVyPlxuICAgIDwvQ29sbGFwc2libGU+XG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVyIGEgdmFsdWUgd2l0aCB0aGUgc2hhcmVkIERhdGFJbnNwZWN0b3IgKE9iamVjdEluc3BlY3RvciB3aXRoXG4gKiBjdXN0b20gdGhlbWluZywgbm9kZVJlbmRlcmVyIGZvciBTdHJlYW1SZWYvQ2xhc3NJbnN0YW5jZVJlZiwgZXRjLilcbiAqL1xuZnVuY3Rpb24gRW5jcnlwdGVkRmllbGRCbG9jaygpIHtcbiAgcmV0dXJuIDxFbmNyeXB0ZWREYXRhQmxvY2sgLz47XG59XG5cbi8qKlxuICogSW5saW5lIGRpc3BsYXkgZm9yIGFuIGV4cGlyZWQgZmllbGQg4oCUIGZsYXQgbGFiZWwgaW5kaWNhdGluZyBkYXRhIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuXG4gKi9cbmZ1bmN0aW9uIEV4cGlyZWRGaWVsZEJsb2NrKCkge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgcm91bmRlZC1tZCBib3JkZXIgcHgtMyBweS0yIHRleHQtbGFiZWwtMTJcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTEwMCknLFxuICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+RGF0YSBleHBpcmVkPC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBKc29uQmxvY2sodmFsdWU6IHVua25vd24pIHtcbiAgcmV0dXJuIDxDb3B5YWJsZURhdGFCbG9jayBkYXRhPXt2YWx1ZX0gLz47XG59XG5cbmNvbnN0IGhhc0Rpc3BsYXlDb250ZW50ID0gKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiA9PiB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IDA7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDA7XG4gIHJldHVybiB0cnVlO1xufTtcblxudHlwZSBBdHRyaWJ1dGVLZXkgPVxuICB8IGtleW9mIFN0ZXBcbiAgfCBrZXlvZiBXb3JrZmxvd1J1blxuICB8IGtleW9mIEhvb2tcbiAgfCBrZXlvZiBFdmVudFxuICB8ICdvY2N1cnJlZEF0J1xuICB8ICdtb2R1bGVTcGVjaWZpZXInXG4gIHwgJ2V2ZW50RGF0YSdcbiAgfCAncmVzdW1lQXQnXG4gIHwgJ2V4cGlyZWRBdCdcbiAgfCAnd29ya2Zsb3dDb3JlVmVyc2lvbidcbiAgfCAncmVjZWl2ZWRDb3VudCdcbiAgfCAnbGFzdFJlY2VpdmVkQXQnXG4gIHwgJ2Rpc3Bvc2VkQXQnXG4gIHwgJ2lzU3lzdGVtJ1xuICB8ICdlcnJvckNvZGUnXG4gIC8vIEFuYWx5dGljcy1vbmx5IHByb3ZlbmFuY2UgKEFuYWx5dGljc0V2ZW50IC8gQW5hbHl0aWNzU3RlcCksIG5vdCBvbiBFdmVudC5cbiAgfCAnY29tcHV0ZUluc3RhbmNlSWQnXG4gIC8vIEFuYWx5dGljcy1vbmx5LCBhbmQgZXZlbnQtZ3JhaW5lZDogb25seSBBbmFseXRpY3NFdmVudCBjYXJyaWVzIGl0LiBUaGUga2V5XG4gIC8vIGlzIGB2ZXJjZWxJZGAgYmVjYXVzZSB0aGF0IGlzIHRoZSBuYW1lIHRoZSBiYWNrZW5kIHN0b3JlcyB0aGUgU0RLJ3NcbiAgLy8gYHJlcXVlc3RJZGAgdW5kZXI7IEFuYWx5dGljc0V2ZW50J3Mgc2libGluZyBgcmVxdWVzdElkYCBjb2x1bW4gaXMgbmV2ZXJcbiAgLy8gd3JpdHRlbiwgc28gcmVhZGluZyB0aGF0IG9uZSB3b3VsZCBhbHdheXMgYmUgZW1wdHkuXG4gIHwgJ3ZlcmNlbElkJztcblxuY29uc3QgYXR0cmlidXRlT3JkZXI6IEF0dHJpYnV0ZUtleVtdID0gW1xuICAnd29ya2Zsb3dOYW1lJyxcbiAgJ21vZHVsZVNwZWNpZmllcicsXG4gICdzdGVwTmFtZScsXG4gICdzdGF0dXMnLFxuICAnc3RlcElkJyxcbiAgJ2hvb2tJZCcsXG4gICdldmVudElkJyxcbiAgJ3J1bklkJyxcbiAgJ2F0dGVtcHQnLFxuICAndG9rZW4nLFxuICAndG9rZW5SZXRlbnRpb25VbnRpbCcsXG4gICdpc1dlYmhvb2snLFxuICAnaXNTeXN0ZW0nLFxuICAncmVjZWl2ZWRDb3VudCcsXG4gICdsYXN0UmVjZWl2ZWRBdCcsXG4gICdkaXNwb3NlZEF0JyxcbiAgJ2NvcnJlbGF0aW9uSWQnLFxuICAnZXZlbnRUeXBlJyxcbiAgJ2RlcGxveW1lbnRJZCcsXG4gICd2ZXJjZWxJZCcsXG4gICdjb21wdXRlSW5zdGFuY2VJZCcsXG4gICdzcGVjVmVyc2lvbicsXG4gICd3b3JrZmxvd0NvcmVWZXJzaW9uJyxcbiAgJ293bmVySWQnLFxuICAncHJvamVjdElkJyxcbiAgJ2Vudmlyb25tZW50JyxcbiAgJ2V4ZWN1dGlvbkNvbnRleHQnLFxuICAnb2NjdXJyZWRBdCcsXG4gICdjcmVhdGVkQXQnLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3VwZGF0ZWRBdCcsXG4gICdjb21wbGV0ZWRBdCcsXG4gICdleHBpcmVkQXQnLFxuICAncmV0cnlBZnRlcicsXG4gICdlcnJvckNvZGUnLFxuICAnZXJyb3InLFxuICAnbWV0YWRhdGEnLFxuICAnZXZlbnREYXRhJyxcbiAgJ2lucHV0JyxcbiAgJ291dHB1dCcsXG4gICdhdHRyaWJ1dGVzJyxcbiAgJ3Jlc3VtZUF0Jyxcbl07XG5cbi8qKlxuICogUmFuayBvZiBhbiBhdHRyaWJ1dGUgaW4ge0BsaW5rIGF0dHJpYnV0ZU9yZGVyfS4gS2V5cyBhYnNlbnQgZnJvbSB0aGF0IGxpc3RcbiAqIHNvcnQgYWZ0ZXIgZXZlcnkgbGlzdGVkIG9uZSByYXRoZXIgdGhhbiBiZWZvcmUgdGhlbSDigJQgYGluZGV4T2ZgIHJlcG9ydHMgYVxuICogbWlzcyBhcyBgLTFgLCB3aGljaCBpcyB0cnV0aHksIHNvIGEgYHx8IDBgIGZhbGxiYWNrIG5ldmVyIGZpcmVzLlxuICovXG5jb25zdCBhdHRyaWJ1dGVPcmRlckluZGV4ID0gKGF0dHJpYnV0ZTogc3RyaW5nKTogbnVtYmVyID0+IHtcbiAgY29uc3QgaW5kZXggPSBhdHRyaWJ1dGVPcmRlci5pbmRleE9mKGF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGVLZXkpO1xuICByZXR1cm4gaW5kZXggPT09IC0xID8gYXR0cmlidXRlT3JkZXIubGVuZ3RoIDogaW5kZXg7XG59O1xuXG5jb25zdCBzb3J0QnlBdHRyaWJ1dGVPcmRlciA9IChhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciA9PlxuICBhdHRyaWJ1dGVPcmRlckluZGV4KGEpIC0gYXR0cmlidXRlT3JkZXJJbmRleChiKTtcblxuLyoqXG4gKiBEaXNwbGF5IG5hbWVzIGZvciBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIHJlbmRlciBkaWZmZXJlbnRseSBmcm9tIHRoZWlyIGtleS5cbiAqL1xuY29uc3QgYXR0cmlidXRlRGlzcGxheU5hbWVzOiBQYXJ0aWFsPFJlY29yZDxBdHRyaWJ1dGVLZXksIHN0cmluZz4+ID0ge1xuICBtb2R1bGVTcGVjaWZpZXI6ICdNb2R1bGUnLFxuICB3b3JrZmxvd05hbWU6ICdXb3JrZmxvdyBOYW1lJyxcbiAgc3RlcE5hbWU6ICdTdGVwIE5hbWUnLFxuICBzdGVwSWQ6ICdTdGVwIElEJyxcbiAgaG9va0lkOiAnSG9vayBJRCcsXG4gIGF0dGVtcHQ6ICdBdHRlbXB0cycsXG4gIGV2ZW50SWQ6ICdFdmVudCBJRCcsXG4gIHJ1bklkOiAnUnVuIElEJyxcbiAgdG9rZW46ICdUb2tlbicsXG4gIHRva2VuUmV0ZW50aW9uVW50aWw6ICdNaW5pbXVtIFJldGVudGlvbiBVbnRpbCcsXG4gIGV2ZW50VHlwZTogJ0V2ZW50IFR5cGUnLFxuICBlcnJvckNvZGU6ICdFcnJvciBDb2RlJyxcbiAgY29ycmVsYXRpb25JZDogJ0NvcnJlbGF0aW9uIElEJyxcbiAgZGVwbG95bWVudElkOiAnRGVwbG95bWVudCBJRCcsXG4gIHZlcmNlbElkOiAnUmVxdWVzdCBJRCcsXG4gIGNvbXB1dGVJbnN0YW5jZUlkOiAnQ29tcHV0ZSBJbnN0YW5jZSBJRCcsXG4gIHNwZWNWZXJzaW9uOiAnU3BlYyBWZXJzaW9uJyxcbiAgd29ya2Zsb3dDb3JlVmVyc2lvbjogJ0B3b3JrZmxvdy9jb3JlIHZlcnNpb24nLFxuICBvY2N1cnJlZEF0OiAnT2NjdXJyZWQnLFxuICBjcmVhdGVkQXQ6ICdDcmVhdGVkJyxcbiAgc3RhcnRlZEF0OiAnU3RhcnRlZCcsXG4gIHVwZGF0ZWRBdDogJ1VwZGF0ZWQnLFxuICBjb21wbGV0ZWRBdDogJ0NvbXBsZXRlZCcsXG4gIGV4cGlyZWRBdDogJ0V4cGlyZWQnLFxuICByZXRyeUFmdGVyOiAnUmV0cnkgQWZ0ZXInLFxuICByZXN1bWVBdDogJ1Jlc3VtZScsXG4gIGxhc3RSZWNlaXZlZEF0OiAnTGFzdCBSZWNlaXZlZCcsXG4gIGRpc3Bvc2VkQXQ6ICdEaXNwb3NlZCcsXG4gIHJlY2VpdmVkQ291bnQ6ICdUaW1lcyBSZXNvbHZlZCcsXG59O1xuXG4vKipcbiAqIEdldCB0aGUgZGlzcGxheSBuYW1lIGZvciBhbiBhdHRyaWJ1dGUga2V5LlxuICovXG5jb25zdCBnZXRBdHRyaWJ1dGVEaXNwbGF5TmFtZSA9IChhdHRyaWJ1dGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBhdHRyaWJ1dGVEaXNwbGF5TmFtZXNbYXR0cmlidXRlIGFzIEF0dHJpYnV0ZUtleV0gPz8gYXR0cmlidXRlO1xufTtcblxuY29uc3QgZ2V0TW9kdWxlU3BlY2lmaWVyRnJvbU5hbWUgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICBjb25zdCByYXcgPSBTdHJpbmcodmFsdWUpO1xuICBjb25zdCBwYXJzZWRTdGVwID0gcGFyc2VTdGVwTmFtZShyYXcpO1xuICBpZiAocGFyc2VkU3RlcCkge1xuICAgIHJldHVybiBwYXJzZWRTdGVwLm1vZHVsZVNwZWNpZmllcjtcbiAgfVxuICBjb25zdCBwYXJzZWRXb3JrZmxvdyA9IHBhcnNlV29ya2Zsb3dOYW1lKHJhdyk7XG4gIGlmIChwYXJzZWRXb3JrZmxvdykge1xuICAgIHJldHVybiBwYXJzZWRXb3JrZmxvdy5tb2R1bGVTcGVjaWZpZXI7XG4gIH1cbiAgcmV0dXJuIHJhdztcbn07XG5cbmNvbnN0IHBhcnNlRGF0ZVZhbHVlID0gKHZhbHVlOiB1bmtub3duKTogRGF0ZSB8IG51bGwgPT4ge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHZhbHVlLmdldFRpbWUoKSkgPyBudWxsIDogdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGF0ZSA9XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IG5ldyBEYXRlKHZhbHVlKSA6IG5ldyBEYXRlKFN0cmluZyh2YWx1ZSkpO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSA/IG51bGwgOiBkYXRlO1xufTtcblxuY29uc3QgZm9ybWF0TG9jYWxNaWxsaXNlY29uZFRpbWUgPSAoZGF0ZTogRGF0ZSk6IHN0cmluZyA9PlxuICBmb3JtYXQoZGF0ZSwgJ01NTSBkZCBISDptbTpzcy5TUyBPTycpLnRvVXBwZXJDYXNlKCk7XG5cbmV4cG9ydCBjb25zdCBsb2NhbE1pbGxpc2Vjb25kVGltZSA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGRhdGUgPSBwYXJzZURhdGVWYWx1ZSh2YWx1ZSk7XG4gIGlmICghZGF0ZSkge1xuICAgIHJldHVybiAnLSc7XG4gIH1cblxuICByZXR1cm4gZm9ybWF0TG9jYWxNaWxsaXNlY29uZFRpbWUoZGF0ZSk7XG59O1xuXG5jb25zdCBsb2NhbE1pbGxpc2Vjb25kVGltZU9yTnVsbCA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCBkYXRlID0gcGFyc2VEYXRlVmFsdWUodmFsdWUpO1xuICBpZiAoIWRhdGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZm9ybWF0TG9jYWxNaWxsaXNlY29uZFRpbWUoZGF0ZSk7XG59O1xuXG5jb25zdCB0aW1lc3RhbXBXaXRoVG9vbHRpcE9yTnVsbCA9ICh2YWx1ZTogdW5rbm93bik6IFJlYWN0Tm9kZSB8IG51bGwgPT4ge1xuICBjb25zdCBkYXRlID0gcGFyc2VEYXRlVmFsdWUodmFsdWUpO1xuICBpZiAoIWRhdGUpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxUaW1lc3RhbXBUb29sdGlwIGRhdGU9e2RhdGV9PlxuICAgICAgPHNwYW4+e2Zvcm1hdExvY2FsTWlsbGlzZWNvbmRUaW1lKGRhdGUpfTwvc3Bhbj5cbiAgICA8L1RpbWVzdGFtcFRvb2x0aXA+XG4gICk7XG59O1xuXG4vKipcbiAqIFJlbmRlcnMgYW4gb3BhcXVlIHByb3ZlbmFuY2UgaWQuIFRoZSBhbmFseXRpY3MgcmVhZCBjb250cmFjdCB0eXBlcyB0aGVzZSBhc1xuICogbnVsbGFibGUsIGFuZCBvbmx5IGEgYG51bGxgIHJldHVybiBpcyBmaWx0ZXJlZCBvdXQgb2YgdGhlIHBhbmVsLCBzbyBhIGJhcmVcbiAqIGBTdHJpbmcoKWAgd291bGQgc3VyZmFjZSB0aGUgbGl0ZXJhbCB0ZXh0IFwibnVsbFwiIGFzIHRoZSB2YWx1ZS5cbiAqL1xuY29uc3Qgb3BhcXVlSWRPck51bGwgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCBudWxsID0+XG4gIGhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiBudWxsO1xuXG5pbnRlcmZhY2UgRGlzcGxheUNvbnRleHQge1xuICBzdGVwTmFtZT86IHN0cmluZztcbiAgc2VjdGlvbk9wZW4/OiBib29sZWFuO1xuICBvblNlY3Rpb25PcGVuQ2hhbmdlPzogKG9wZW46IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbmNvbnN0IGF0dHJpYnV0ZVRvRGlzcGxheUZuOiBSZWNvcmQ8XG4gIEF0dHJpYnV0ZUtleSxcbiAgKHZhbHVlOiB1bmtub3duLCBjb250ZXh0PzogRGlzcGxheUNvbnRleHQpID0+IG51bGwgfCBzdHJpbmcgfCBSZWFjdE5vZGVcbj4gPSB7XG4gIC8vIE5hbWVzIHRoYXQgbmVlZCBwcmV0dHktcHJpbnRpbmdcbiAgd29ya2Zsb3dOYW1lOiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICBtb2R1bGVTcGVjaWZpZXI6ICh2YWx1ZTogdW5rbm93bikgPT4gZ2V0TW9kdWxlU3BlY2lmaWVyRnJvbU5hbWUodmFsdWUpLFxuICBzdGVwTmFtZTogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgLy8gSURzXG4gIHJ1bklkOiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICBzdGVwSWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgaG9va0lkOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIGV2ZW50SWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgLy8gUnVuL3N0ZXAgZGV0YWlsc1xuICBzdGF0dXM6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIGF0dGVtcHQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgLy8gSG9vayBkZXRhaWxzXG4gIHRva2VuOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIHRva2VuUmV0ZW50aW9uVW50aWw6IHRpbWVzdGFtcFdpdGhUb29sdGlwT3JOdWxsLFxuICBpc1dlYmhvb2s6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgaXNTeXN0ZW06ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgcmVjZWl2ZWRDb3VudDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICBsYXN0UmVjZWl2ZWRBdDogbG9jYWxNaWxsaXNlY29uZFRpbWVPck51bGwsXG4gIGRpc3Bvc2VkQXQ6IGxvY2FsTWlsbGlzZWNvbmRUaW1lT3JOdWxsLFxuICAvLyBJbnRlcm5hbCByZXN1bWUgcGx1bWJpbmcg4oCUIG5vdCBzdXJmYWNlZCBpbiB0aGUgVUlcbiAgcmVzdW1lQ29udGV4dDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgcmVzdW1lSWQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIHJlc3VtZUNhcGFiaWxpdGllczogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgLy8gRXZlbnQgZGV0YWlsc1xuICBldmVudFR5cGU6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgY29ycmVsYXRpb25JZDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICAvLyBQcm9qZWN0IGRldGFpbHNcbiAgZGVwbG95bWVudElkOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIHZlcmNlbElkOiBvcGFxdWVJZE9yTnVsbCxcbiAgY29tcHV0ZUluc3RhbmNlSWQ6IG9wYXF1ZUlkT3JOdWxsLFxuICBzcGVjVmVyc2lvbjogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICB3b3JrZmxvd0NvcmVWZXJzaW9uOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIC8vIFRlbmFuY3kgKHdlIGRvbid0IHNob3cgdGhlc2UpXG4gIG93bmVySWQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIHByb2plY3RJZDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgZW52aXJvbm1lbnQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIGV4ZWN1dGlvbkNvbnRleHQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIC8vIEF0dHJpYnV0ZXMg4oCUIHN0cmluZy1zdHJpbmcgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIHJ1bi5cbiAgLy8gUmVuZGVyZWQgYXMga2V5LXZhbHVlIHJvd3MgaW4gaXRzIG93biBjb2xsYXBzaWJsZSBzZWN0aW9uO1xuICAvLyBpZiBlbXB0eS9taXNzaW5nLCBoaWRkZW4gYnkgdGhlIGhhc0Rpc3BsYXlDb250ZW50IGdhdGUuXG4gIGF0dHJpYnV0ZXM6ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFJ1bkF0dHJpYnV0ZXNDYXJkIGF0dHJpYnV0ZXM9e3ZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz59IC8+O1xuICB9LFxuICAvLyBEYXRlcyDigJQgd3JhcHBlZCB3aXRoIFRpbWVzdGFtcFRvb2x0aXAgc2hvd2luZyBVVEMvbG9jYWwgKyByZWxhdGl2ZSB0aW1lXG4gIG9jY3VycmVkQXQ6IHRpbWVzdGFtcFdpdGhUb29sdGlwT3JOdWxsLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcFdpdGhUb29sdGlwT3JOdWxsLFxuICBzdGFydGVkQXQ6IHRpbWVzdGFtcFdpdGhUb29sdGlwT3JOdWxsLFxuICB1cGRhdGVkQXQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIGNvbXBsZXRlZEF0OiB0aW1lc3RhbXBXaXRoVG9vbHRpcE9yTnVsbCxcbiAgZXhwaXJlZEF0OiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICByZXRyeUFmdGVyOiB0aW1lc3RhbXBXaXRoVG9vbHRpcE9yTnVsbCxcbiAgcmVzdW1lQXQ6IHRpbWVzdGFtcFdpdGhUb29sdGlwT3JOdWxsLFxuICAvLyBSZXNvbHZlZCBhdHRyaWJ1dGVzLCB3b24ndCBhY3R1YWxseSB1c2UgdGhpcyBmdW5jdGlvblxuICBtZXRhZGF0YTogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKCFoYXNEaXNwbGF5Q29udGVudCh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xsYXBzaWJsZSBsYWJlbD1cIk1ldGFkYXRhXCI+XG4gICAgICAgICAgPEVuY3J5cHRlZERhdGFCbG9jayAvPlxuICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzRXhwaXJlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xsYXBzaWJsZSBsYWJlbD1cIk1ldGFkYXRhXCI+XG4gICAgICAgICAgPEV4cGlyZWRGaWVsZEJsb2NrIC8+XG4gICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gPFJ1bk1ldGFkYXRhQ2FyZCBtZXRhZGF0YT17dmFsdWV9IC8+O1xuICB9LFxuICBpbnB1dDogKHZhbHVlOiB1bmtub3duLCBjb250ZXh0PzogRGlzcGxheUNvbnRleHQpID0+IHtcbiAgICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q29sbGFwc2libGVcbiAgICAgICAgICBsYWJlbD1cIklucHV0XCJcbiAgICAgICAgICBkZWZhdWx0T3Blbj17Y29udGV4dD8uc2VjdGlvbk9wZW59XG4gICAgICAgICAgb25PcGVuQ2hhbmdlPXtjb250ZXh0Py5vblNlY3Rpb25PcGVuQ2hhbmdlfVxuICAgICAgICA+XG4gICAgICAgICAgPEVuY3J5cHRlZEZpZWxkQmxvY2sgLz5cbiAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0V4cGlyZWRNYXJrZXIodmFsdWUpKSByZXR1cm4gPEV4cGlyZWRGaWVsZEJsb2NrIC8+O1xuICAgIC8vIENoZWNrIGlmIGlucHV0IGhhcyBhcmdzICsgY2xvc3VyZSB2YXJzIHN0cnVjdHVyZVxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICdhcmdzJyBpbiB2YWx1ZSkge1xuICAgICAgY29uc3QgeyBhcmdzLCBjbG9zdXJlVmFycywgdGhpc1ZhbCB9ID0gdmFsdWUgYXMge1xuICAgICAgICBhcmdzOiB1bmtub3duW107XG4gICAgICAgIGNsb3N1cmVWYXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIHRoaXNWYWw/OiB1bmtub3duO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhc0Nsb3N1cmVWYXJzID0gaGFzRGlzcGxheUNvbnRlbnQoY2xvc3VyZVZhcnMpO1xuICAgICAgY29uc3QgaGFzVGhpc1ZhbCA9IGhhc0Rpc3BsYXlDb250ZW50KHRoaXNWYWwpO1xuICAgICAgY29uc3QgaGFzQXJncyA9IGhhc0Rpc3BsYXlDb250ZW50KGFyZ3MpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgZG9TdHJlYW1TdGVwIC0gc2hvdyBjb252ZXJzYXRpb24gdmlldyB3aXRoIHRhYnNcbiAgICAgIGlmIChjb250ZXh0Py5zdGVwTmFtZSAmJiBpc0RvU3RyZWFtU3RlcChjb250ZXh0LnN0ZXBOYW1lKSkge1xuICAgICAgICBjb25zdCBjb252ZXJzYXRpb24gPSBleHRyYWN0Q29udmVyc2F0aW9uKGFyZ3MpO1xuICAgICAgICBpZiAoY29udmVyc2F0aW9uICYmIGNvbnZlcnNhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxDb252ZXJzYXRpb25XaXRoVGFic1xuICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbj17Y29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICAgIGFyZ3M9e2FyZ3N9XG4gICAgICAgICAgICAgICAgZGVmYXVsdE9wZW49e2NvbnRleHQ/LnNlY3Rpb25PcGVufVxuICAgICAgICAgICAgICAgIG9uT3BlbkNoYW5nZT17Y29udGV4dD8ub25TZWN0aW9uT3BlbkNoYW5nZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2hhc0Nsb3N1cmVWYXJzICYmIChcbiAgICAgICAgICAgICAgICA8Q29sbGFwc2libGUgbGFiZWw9XCJDbG9zdXJlIFZhcmlhYmxlc1wiPlxuICAgICAgICAgICAgICAgICAge0pzb25CbG9jayhjbG9zdXJlVmFycyl9XG4gICAgICAgICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2hhc1RoaXNWYWwgJiYgKFxuICAgICAgICAgICAgICAgIDxDb2xsYXBzaWJsZSBsYWJlbD1cIlRoaXMgVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIHtKc29uQmxvY2sodGhpc1ZhbCl9XG4gICAgICAgICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRG9uJ3QgcmVuZGVyIGFuIGVtcHR5IFwiSW5wdXQgKDAgYXJndW1lbnRzKVwiIGNhcmQgd2hlbiBubyBpbnB1dCBleGlzdHMuXG4gICAgICBpZiAoIWhhc0FyZ3MgJiYgIWhhc0Nsb3N1cmVWYXJzICYmICFoYXNUaGlzVmFsKSB7XG4gICAgICAgIHJldHVybiA8Q29sbGFwc2libGUgbGFiZWw9XCJJbnB1dCAobm8gZGF0YSlcIiBkaXNhYmxlZCAvPjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8Q29sbGFwc2libGVcbiAgICAgICAgICAgIGxhYmVsPVwiSW5wdXRcIlxuICAgICAgICAgICAgZGVmYXVsdE9wZW49e2NvbnRleHQ/LnNlY3Rpb25PcGVufVxuICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXtjb250ZXh0Py5vblNlY3Rpb25PcGVuQ2hhbmdlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtBcnJheS5pc0FycmF5KGFyZ3MpXG4gICAgICAgICAgICAgID8gYXJncy5tYXAoKHYsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmaXJzdDptdC0wXCIga2V5PXtpfT5cbiAgICAgICAgICAgICAgICAgICAge0pzb25CbG9jayh2KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogSnNvbkJsb2NrKGFyZ3MpfVxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgICAge2hhc0Nsb3N1cmVWYXJzICYmIChcbiAgICAgICAgICAgIDxDb2xsYXBzaWJsZSBsYWJlbD1cIkNsb3N1cmUgVmFyaWFibGVzXCI+XG4gICAgICAgICAgICAgIHtKc29uQmxvY2soY2xvc3VyZVZhcnMpfVxuICAgICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtoYXNUaGlzVmFsICYmIChcbiAgICAgICAgICAgIDxDb2xsYXBzaWJsZSBsYWJlbD1cIkNvbnRleHRcIj57SnNvbkJsb2NrKHRoaXNWYWwpfTwvQ29sbGFwc2libGU+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrOiB0cmVhdCBhcyBwbGFpbiBhcnJheSBvciBvYmplY3RcbiAgICBpZiAoIWhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIDxDb2xsYXBzaWJsZSBsYWJlbD1cIklucHV0IChubyBkYXRhKVwiIGRpc2FibGVkIC8+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPENvbGxhcHNpYmxlXG4gICAgICAgIGxhYmVsPVwiSW5wdXRcIlxuICAgICAgICBkZWZhdWx0T3Blbj17Y29udGV4dD8uc2VjdGlvbk9wZW59XG4gICAgICAgIG9uT3BlbkNoYW5nZT17Y29udGV4dD8ub25TZWN0aW9uT3BlbkNoYW5nZX1cbiAgICAgID5cbiAgICAgICAge0FycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoKHYsIGkpID0+IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZpcnN0Om10LTBcIiBrZXk9e2l9PlxuICAgICAgICAgICAgICAgIHtKc29uQmxvY2sodil9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSlcbiAgICAgICAgICA6IEpzb25CbG9jayh2YWx1ZSl9XG4gICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICk7XG4gIH0sXG4gIG91dHB1dDogKHZhbHVlOiB1bmtub3duLCBjb250ZXh0PzogRGlzcGxheUNvbnRleHQpID0+IHtcbiAgICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q29sbGFwc2libGVcbiAgICAgICAgICBsYWJlbD1cIk91dHB1dFwiXG4gICAgICAgICAgZGVmYXVsdE9wZW49e2NvbnRleHQ/LnNlY3Rpb25PcGVufVxuICAgICAgICAgIG9uT3BlbkNoYW5nZT17Y29udGV4dD8ub25TZWN0aW9uT3BlbkNoYW5nZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxFbmNyeXB0ZWRGaWVsZEJsb2NrIC8+XG4gICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGlzRXhwaXJlZE1hcmtlcih2YWx1ZSkpIHJldHVybiA8RXhwaXJlZEZpZWxkQmxvY2sgLz47XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb2xsYXBzaWJsZVxuICAgICAgICBsYWJlbD1cIk91dHB1dFwiXG4gICAgICAgIGRlZmF1bHRPcGVuPXtjb250ZXh0Py5zZWN0aW9uT3Blbn1cbiAgICAgICAgb25PcGVuQ2hhbmdlPXtjb250ZXh0Py5vblNlY3Rpb25PcGVuQ2hhbmdlfVxuICAgICAgPlxuICAgICAgICB7SnNvbkJsb2NrKHZhbHVlKX1cbiAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgKTtcbiAgfSxcbiAgZXJyb3I6ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xsYXBzaWJsZSBsYWJlbD1cIkVycm9yXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgPEVuY3J5cHRlZEZpZWxkQmxvY2sgLz5cbiAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0V4cGlyZWRNYXJrZXIodmFsdWUpKSByZXR1cm4gPEV4cGlyZWRGaWVsZEJsb2NrIC8+O1xuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIFN0cnVjdHVyZWQgd29ya2Zsb3cgZXJyb3JzIG1heSBiZSBwZXJzaXN0ZWQgYXMgZWl0aGVyIGB7IG1lc3NhZ2UgfWAgb3JcbiAgICAvLyBgeyBtZXNzYWdlLCBzdGFjayB9YC4gUmVuZGVyIGJvdGggd2l0aCB0aGUgZGVkaWNhdGVkIGVycm9yIGJsb2NrLlxuICAgIGlmIChpc1N0cnVjdHVyZWRFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xsYXBzaWJsZSBsYWJlbD1cIkVycm9yXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgPEVycm9yU3RhY2tCbG9jayB2YWx1ZT17dmFsdWV9IC8+XG4gICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8Q29sbGFwc2libGUgbGFiZWw9XCJFcnJvclwiIGRlZmF1bHRPcGVuPlxuICAgICAgICB7SnNvbkJsb2NrKHZhbHVlKX1cbiAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgKTtcbiAgfSxcbiAgZXZlbnREYXRhOiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Q29sbGFwc2libGUgbGFiZWw9XCJFdmVudCBEYXRhXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgPEVuY3J5cHRlZEZpZWxkQmxvY2sgLz5cbiAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0V4cGlyZWRNYXJrZXIodmFsdWUpKSByZXR1cm4gPEV4cGlyZWRGaWVsZEJsb2NrIC8+O1xuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gKFxuICAgICAgPENvbGxhcHNpYmxlIGxhYmVsPVwiRXZlbnQgRGF0YVwiIGRlZmF1bHRPcGVuPlxuICAgICAgICB7SnNvbkJsb2NrKHZhbHVlKX1cbiAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgKTtcbiAgfSxcbiAgZXJyb3JDb2RlOiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCB2YWx1ZS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9LFxuICAvLyBJbnRlcm5hbCBlbmNyeXB0aW9uIHBsdW1iaW5nOiB0aGUgcnVuJ3MgWDI1NTE5IHB1YmxpYyBrZXksIHVzZWQgYnlcbiAgLy8gY3Jvc3MtcnVuIHdyaXRlcnMgdG8gc2VhbCBwYXlsb2FkcyB0byB0aGlzIHJ1bi4gTm90IGFjdGlvbmFibGUgZm9yIHVzZXJzXG4gIC8vIGFuZCBub3Qgc2VjcmV0IOKAlCBoaWRkZW4gcmF0aGVyIHRoYW4gcmVuZGVyZWQgYXMgNDQgb3BhcXVlIGJhc2U2NCBjaGFycy5cbiAgZW5jcnlwdGlvblB1YmxpY0tleTogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbn07XG5cbmNvbnN0IHJlc29sdmFibGVBdHRyaWJ1dGVzID0gW1xuICAnaW5wdXQnLFxuICAnb3V0cHV0JyxcbiAgJ2Vycm9yJyxcbiAgJ21ldGFkYXRhJyxcbiAgJ2F0dHJpYnV0ZXMnLFxuICAnZXZlbnREYXRhJyxcbl07XG5cbi8vIEF0dHJpYnV0ZXMgd2hvc2UgZGlzcGxheUZuIHJlbmRlcnMgaXRzIG93biBzZWN0aW9uIGhlYWRlciB2aWEgQ29sbGFwc2libGUsXG4vLyBzbyB0aGUgb3V0ZXIgQXR0cmlidXRlQmxvY2sgc2hvdWxkIG5vdCBkdXBsaWNhdGUgdGhlIGxhYmVsLlxuY29uc3Qgc2VsZkhlYWRlcmVkQXR0cmlidXRlcyA9IG5ldyBTZXQoW1xuICAnaW5wdXQnLFxuICAnb3V0cHV0JyxcbiAgJ2Vycm9yJyxcbiAgJ21ldGFkYXRhJyxcbiAgJ2F0dHJpYnV0ZXMnLFxuICAnZXZlbnREYXRhJyxcbl0pO1xuXG5jb25zdCBFeHBpcmVkRGF0YU1lc3NhZ2UgPSAoKSA9PiAoXG4gIDxkaXZcbiAgICBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHJvdW5kZWQtbWQgYm9yZGVyIHAtNCBteS0yXCJcbiAgICBzdHlsZT17e1xuICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyxcbiAgICB9fVxuICA+XG4gICAgPHNwYW4+VGhlIGRhdGEgZm9yIHRoaXMgcnVuIGhhcyBleHBpcmVkIGFuZCBpcyBubyBsb25nZXIgYXZhaWxhYmxlLjwvc3Bhbj5cbiAgPC9kaXY+XG4pO1xuXG5jb25zdCBjb3B5YWJsZUJhc2ljQXR0cmlidXRlcyA9IG5ldyBTZXQ8QXR0cmlidXRlS2V5PihbXG4gICdzdGVwSWQnLFxuICAnaG9va0lkJyxcbiAgJ2V2ZW50SWQnLFxuICAnZGVwbG95bWVudElkJyxcbiAgJ3ZlcmNlbElkJyxcbiAgJ2NvbXB1dGVJbnN0YW5jZUlkJyxcbiAgJ21vZHVsZVNwZWNpZmllcicsXG4gICd0b2tlbicsXG5dKTtcblxuY29uc3QgbG9hZGluZ1NlY3Rpb25MYWJlbHM6IFBhcnRpYWw8UmVjb3JkPEF0dHJpYnV0ZUtleSwgc3RyaW5nPj4gPSB7XG4gIGlucHV0OiAnSW5wdXQnLFxuICBvdXRwdXQ6ICdPdXRwdXQnLFxuICBldmVudERhdGE6ICdFdmVudCBEYXRhJyxcbn07XG5cbmV4cG9ydCBjb25zdCBBdHRyaWJ1dGVCbG9jayA9ICh7XG4gIGF0dHJpYnV0ZSxcbiAgdmFsdWUsXG4gIGlzTG9hZGluZyxcbiAgaW5saW5lID0gZmFsc2UsXG4gIGNvbnRleHQsXG59OiB7XG4gIGF0dHJpYnV0ZTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgaW5saW5lPzogYm9vbGVhbjtcbiAgY29udGV4dD86IERpc3BsYXlDb250ZXh0O1xufSkgPT4ge1xuICBjb25zdCBkZWNyeXB0Q3R4ID0gdXNlQ29udGV4dChEZWNyeXB0Q2xpY2tDb250ZXh0KTtcbiAgY29uc3Qgc2VjdGlvbk9wZW5SZWYgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVTZWN0aW9uT3BlbkNoYW5nZSA9IHVzZUNhbGxiYWNrKChvcGVuOiBib29sZWFuKSA9PiB7XG4gICAgc2VjdGlvbk9wZW5SZWYuY3VycmVudCA9IG9wZW47XG4gIH0sIFtdKTtcbiAgY29uc3QgbGFiZWwgPSBsb2FkaW5nU2VjdGlvbkxhYmVsc1thdHRyaWJ1dGUgYXMgQXR0cmlidXRlS2V5XTtcbiAgaWYgKGlzTG9hZGluZyAmJiBsYWJlbCAmJiAhaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSB7XG4gICAgaWYgKGRlY3J5cHRDdHg/Lmhhc0VuY3J5cHRlZERhdGEpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xsYXBzaWJsZVxuICAgICAgICAgIGxhYmVsPXtsYWJlbH1cbiAgICAgICAgICBkZWZhdWx0T3Blbj17YXR0cmlidXRlID09PSAnZXZlbnREYXRhJyB8fCBzZWN0aW9uT3BlblJlZi5jdXJyZW50fVxuICAgICAgICAgIG9uT3BlbkNoYW5nZT17aGFuZGxlU2VjdGlvbk9wZW5DaGFuZ2V9XG4gICAgICAgID5cbiAgICAgICAgICA8RW5jcnlwdGVkRmllbGRCbG9jayAvPlxuICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIDxDb2xsYXBzaWJsZSBsYWJlbD17bGFiZWx9IC8+O1xuICB9XG5cbiAgY29uc3QgZGlzcGxheUZuID1cbiAgICBhdHRyaWJ1dGVUb0Rpc3BsYXlGblthdHRyaWJ1dGUgYXMga2V5b2YgdHlwZW9mIGF0dHJpYnV0ZVRvRGlzcGxheUZuXTtcbiAgaWYgKCFkaXNwbGF5Rm4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBkaXNwbGF5VmFsdWUgPSBkaXNwbGF5Rm4odmFsdWUsIHtcbiAgICAuLi5jb250ZXh0LFxuICAgIHNlY3Rpb25PcGVuOiBzZWN0aW9uT3BlblJlZi5jdXJyZW50LFxuICAgIG9uU2VjdGlvbk9wZW5DaGFuZ2U6IGhhbmRsZVNlY3Rpb25PcGVuQ2hhbmdlLFxuICB9KTtcbiAgaWYgKCFkaXNwbGF5VmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChpbmxpbmUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1bMTFweF0gZm9udC1tZWRpdW1cIlxuICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fVxuICAgICAgICA+XG4gICAgICAgICAge2F0dHJpYnV0ZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LVsxMXB4XVwiIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX0+XG4gICAgICAgICAge2Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChzZWxmSGVhZGVyZWRBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGUpKSB7XG4gICAgcmV0dXJuIDw+e2Rpc3BsYXlWYWx1ZX08Lz47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgIHt0eXBlb2YgaXNMb2FkaW5nID09PSAnYm9vbGVhbicgJiYgaXNMb2FkaW5nICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtOSByaWdodC00XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYW5pbWF0ZS1zcGluIHJvdW5kZWQtZnVsbCBoLTQgdy00IGJvcmRlci1iLTJcIlxuICAgICAgICAgICAgc3R5bGU9e3sgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPGRpdiBrZXk9e2F0dHJpYnV0ZX0gY2xhc3NOYW1lPVwibXktMiBmbGV4IGZsZXgtY29sIGdhcC0wXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTQgdGV4dC1ncmF5LTEwMDAgZm9udC1tZWRpdW0gZmlyc3QtbGV0dGVyOnVwcGVyY2FzZVwiPlxuICAgICAgICAgIHthdHRyaWJ1dGV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyXCJcbiAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknIH19XG4gICAgICAgID5cbiAgICAgICAgICB7ZGlzcGxheVZhbHVlfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBBdHRyaWJ1dGVQYW5lbCA9ICh7XG4gIGRhdGEsXG4gIG1vZHVsZVNwZWNpZmllcixcbiAgbW9kdWxlU291cmNlVXJsLFxuICBpc0xvYWRpbmcsXG4gIGVycm9yLFxuICBleHBpcmVkQXQsXG4gIG9uU3RyZWFtQ2xpY2ssXG4gIG9uUnVuQ2xpY2ssXG4gIG9uRGVjcnlwdCxcbiAgaXNEZWNyeXB0aW5nID0gZmFsc2UsXG4gIHJlc291cmNlLFxufToge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbW9kdWxlU3BlY2lmaWVyPzogc3RyaW5nO1xuICBtb2R1bGVTb3VyY2VVcmw/OiBzdHJpbmc7XG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIGVycm9yPzogRXJyb3I7XG4gIGV4cGlyZWRBdD86IHN0cmluZyB8IERhdGU7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhbiBlbmNyeXB0ZWQgbWFya2VyIGlzIGNsaWNrZWQgKHRyaWdnZXJzIGRlY3J5cHRpb24pICovXG4gIG9uRGVjcnlwdD86ICgpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIGRlY3J5cHRpb24gaXMgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4gIGlzRGVjcnlwdGluZz86IGJvb2xlYW47XG4gIC8qKiBSZXNvdXJjZSB0eXBlIG9mIHRoZSBzZWxlY3RlZCBzcGFuIOKAlCB1c2VkIHRvIHNob3cgdGFyZ2V0ZWQgbG9hZGluZyBza2VsZXRvbnMuICovXG4gIHJlc291cmNlPzogc3RyaW5nO1xufSkgPT4ge1xuICAvLyBFeHRyYWN0IHdvcmtmbG93Q29yZVZlcnNpb24gZnJvbSBleGVjdXRpb25Db250ZXh0IGZvciBkaXNwbGF5XG4gIGNvbnN0IGRpc3BsYXlEYXRhID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0geyAuLi5kYXRhIH07XG4gICAgY29uc3QgZXhlY0N0eCA9IGRhdGEuZXhlY3V0aW9uQ29udGV4dCBhc1xuICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGV4ZWNDdHg/LndvcmtmbG93Q29yZVZlcnNpb24pIHtcbiAgICAgIHJlc3VsdC53b3JrZmxvd0NvcmVWZXJzaW9uID0gZXhlY0N0eC53b3JrZmxvd0NvcmVWZXJzaW9uO1xuICAgIH1cbiAgICBpZiAobW9kdWxlU3BlY2lmaWVyKSB7XG4gICAgICByZXN1bHQubW9kdWxlU3BlY2lmaWVyID0gbW9kdWxlU3BlY2lmaWVyO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEuc3RlcE5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXN1bHQubW9kdWxlU3BlY2lmaWVyID0gZGF0YS5zdGVwTmFtZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhLndvcmtmbG93TmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlc3VsdC5tb2R1bGVTcGVjaWZpZXIgPSBkYXRhLndvcmtmbG93TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgW2RhdGEsIG1vZHVsZVNwZWNpZmllcl0pO1xuICBjb25zdCBoYXNFeHBpcmVkID0gZXhwaXJlZEF0ICE9IG51bGwgJiYgbmV3IERhdGUoZXhwaXJlZEF0KSA8IG5ldyBEYXRlKCk7XG4gIGNvbnN0IGJhc2ljQXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKGRpc3BsYXlEYXRhKVxuICAgIC5maWx0ZXIoKGtleSkgPT4gIXJlc29sdmFibGVBdHRyaWJ1dGVzLmluY2x1ZGVzKGtleSkpXG4gICAgLnNvcnQoc29ydEJ5QXR0cmlidXRlT3JkZXIpO1xuICBjb25zdCByZXNvbHZlZEF0dHJpYnV0ZXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBwcmVzZW50ID0gT2JqZWN0LmtleXMoZGlzcGxheURhdGEpXG4gICAgICAuZmlsdGVyKChrZXkpID0+IHJlc29sdmFibGVBdHRyaWJ1dGVzLmluY2x1ZGVzKGtleSkpXG4gICAgICAuc29ydChzb3J0QnlBdHRyaWJ1dGVPcmRlcik7XG5cbiAgICBpZiAoIWlzTG9hZGluZykgcmV0dXJuIHByZXNlbnQ7XG5cbiAgICBpZiAocmVzb3VyY2UgPT09ICdzbGVlcCcpIHJldHVybiBwcmVzZW50O1xuXG4gICAgY29uc3QgbG9hZGluZ1BsYWNlaG9sZGVycyA9IFsnaW5wdXQnLCAnb3V0cHV0J107XG4gICAgZm9yIChjb25zdCBrZXkgb2YgbG9hZGluZ1BsYWNlaG9sZGVycykge1xuICAgICAgaWYgKCFwcmVzZW50LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgcHJlc2VudC5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVzZW50LnNvcnQoc29ydEJ5QXR0cmlidXRlT3JkZXIpO1xuICB9LCBbZGlzcGxheURhdGEsIGlzTG9hZGluZywgcmVzb3VyY2VdKTtcblxuICAvLyBGaWx0ZXIgb3V0IGF0dHJpYnV0ZXMgdGhhdCByZXR1cm4gbnVsbFxuICBjb25zdCB2aXNpYmxlQmFzaWNBdHRyaWJ1dGVzID0gYmFzaWNBdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlKSA9PiB7XG4gICAgY29uc3QgZGlzcGxheUZuID1cbiAgICAgIGF0dHJpYnV0ZVRvRGlzcGxheUZuW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgYXR0cmlidXRlVG9EaXNwbGF5Rm5dO1xuICAgIGlmICghZGlzcGxheUZuKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZGlzcGxheVZhbHVlID0gZGlzcGxheUZuKFxuICAgICAgZGlzcGxheURhdGFbYXR0cmlidXRlIGFzIGtleW9mIHR5cGVvZiBkaXNwbGF5RGF0YV1cbiAgICApO1xuICAgIHJldHVybiBkaXNwbGF5VmFsdWUgIT09IG51bGw7XG4gIH0pO1xuXG4gIC8vIEtlZXAgYG1vZHVsZVNwZWNpZmllcmAgaW1tZWRpYXRlbHkgYWZ0ZXIgYHdvcmtmbG93TmFtZWAgb3IgYHN0ZXBOYW1lYC5cbiAgY29uc3Qgb3JkZXJlZEJhc2ljQXR0cmlidXRlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbLi4udmlzaWJsZUJhc2ljQXR0cmlidXRlc107XG4gICAgY29uc3QgbW9kdWxlU3BlY2lmaWVySW5kZXggPSBhdHRyaWJ1dGVzLmluZGV4T2YoJ21vZHVsZVNwZWNpZmllcicpO1xuICAgIGlmIChtb2R1bGVTcGVjaWZpZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMuc3BsaWNlKG1vZHVsZVNwZWNpZmllckluZGV4LCAxKTtcbiAgICBjb25zdCB3b3JrZmxvd05hbWVJbmRleCA9IGF0dHJpYnV0ZXMuaW5kZXhPZignd29ya2Zsb3dOYW1lJyk7XG4gICAgaWYgKHdvcmtmbG93TmFtZUluZGV4ICE9PSAtMSkge1xuICAgICAgYXR0cmlidXRlcy5zcGxpY2Uod29ya2Zsb3dOYW1lSW5kZXggKyAxLCAwLCAnbW9kdWxlU3BlY2lmaWVyJyk7XG4gICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBjb25zdCBzdGVwTmFtZUluZGV4ID0gYXR0cmlidXRlcy5pbmRleE9mKCdzdGVwTmFtZScpO1xuICAgIGlmIChzdGVwTmFtZUluZGV4ICE9PSAtMSkge1xuICAgICAgYXR0cmlidXRlcy5zcGxpY2Uoc3RlcE5hbWVJbmRleCArIDEsIDAsICdtb2R1bGVTcGVjaWZpZXInKTtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMudW5zaGlmdCgnbW9kdWxlU3BlY2lmaWVyJyk7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gIH0sIFt2aXNpYmxlQmFzaWNBdHRyaWJ1dGVzXSk7XG5cbiAgLy8gTWVtb2l6ZSBjb250ZXh0IG9iamVjdCB0byBhdm9pZCBvYmplY3QgcmVjb25zdHJ1Y3Rpb24gb24gcmVuZGVyXG4gIGNvbnN0IGRpc3BsYXlDb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgc3RlcE5hbWU6IGRpc3BsYXlEYXRhLnN0ZXBOYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB9KSxcbiAgICBbZGlzcGxheURhdGEuc3RlcE5hbWVdXG4gICk7XG4gIGNvbnN0IG91dGVyRGVjcnlwdEN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG4gIGNvbnN0IGRlY3J5cHRWYWx1ZSA9IG9uRGVjcnlwdFxuICAgID8ge1xuICAgICAgICBvbkRlY3J5cHQsXG4gICAgICAgIGlzRGVjcnlwdGluZyxcbiAgICAgICAgaGFzRW5jcnlwdGVkRGF0YTogb3V0ZXJEZWNyeXB0Q3R4Py5oYXNFbmNyeXB0ZWREYXRhLFxuICAgICAgfVxuICAgIDogb3V0ZXJEZWNyeXB0Q3R4O1xuXG4gIHJldHVybiAoXG4gICAgPENvbnRleHRDYXJkUHJvdmlkZXI+XG4gICAgICA8UnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblJ1bkNsaWNrfT5cbiAgICAgICAgPFN0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25TdHJlYW1DbGlja30+XG4gICAgICAgICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2RlY3J5cHRWYWx1ZX0+XG4gICAgICAgICAgICB7dmlzaWJsZUJhc2ljQXR0cmlidXRlcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPENvbGxhcHNpYmxlUm9vdCBkZWZhdWx0T3Blbj5cbiAgICAgICAgICAgICAgICA8Q29sbGFwc2libGVUcmlnZ2VyPk1ldGFkYXRhPC9Db2xsYXBzaWJsZVRyaWdnZXI+XG4gICAgICAgICAgICAgICAgPENvbGxhcHNpYmxlQ29udGVudCBjbGFzc05hbWU9XCJtdC0wIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICB7b3JkZXJlZEJhc2ljQXR0cmlidXRlcy5tYXAoKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGF0dHJpYnV0ZVRvRGlzcGxheUZuW1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIGFzIGtleW9mIHR5cGVvZiBhdHRyaWJ1dGVUb0Rpc3BsYXlGblxuICAgICAgICAgICAgICAgICAgICAgIF0/LihkaXNwbGF5RGF0YVthdHRyaWJ1dGUgYXMga2V5b2YgdHlwZW9mIGRpc3BsYXlEYXRhXSk7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNDb3B5YWJsZUJhc2ljQXR0cmlidXRlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlhYmxlQmFzaWNBdHRyaWJ1dGVzLmhhcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIGFzIEF0dHJpYnV0ZUtleVxuICAgICAgICAgICAgICAgICAgICAgICAgKSAmJiB0eXBlb2YgZGlzcGxheVZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IGdldEF0dHJpYnV0ZURpc3BsYXlOYW1lKGF0dHJpYnV0ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPERldGFpbE1vbm9LZXlWYWx1ZVJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2F0dHJpYnV0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZGlzcGxheVZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5VGV4dD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb3B5YWJsZUJhc2ljQXR0cmlidXRlID8gZGlzcGxheVZhbHVlIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlID09PSAnbW9kdWxlU3BlY2lmaWVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtb2R1bGVTb3VyY2VVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIHtpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZSA9PT0gJ3NsZWVwJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICFkaXNwbGF5RGF0YS5yZXN1bWVBdCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMyBweS0wLjVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sYWJlbC0xMyB0ZXh0LWdyYXktOTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtNCB3LVs1NSVdXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L0NvbGxhcHNpYmxlQ29udGVudD5cbiAgICAgICAgICAgICAgPC9Db2xsYXBzaWJsZVJvb3Q+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yID8gKFxuICAgICAgICAgICAgICA8RXJyb3JDYXJkXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJGYWlsZWQgdG8gbG9hZCByZXNvdXJjZSBkZXRhaWxzXCJcbiAgICAgICAgICAgICAgICBkZXRhaWxzPXtlcnJvci5tZXNzYWdlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm15LTRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IGhhc0V4cGlyZWQgPyAoXG4gICAgICAgICAgICAgIDxFeHBpcmVkRGF0YU1lc3NhZ2UgLz5cbiAgICAgICAgICAgICkgOiByZXNvbHZlZEF0dHJpYnV0ZXMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgICAgcmVzb2x2ZWRBdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlKSA9PiAoXG4gICAgICAgICAgICAgICAgPEF0dHJpYnV0ZUJsb2NrXG4gICAgICAgICAgICAgICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGtleT17YXR0cmlidXRlfVxuICAgICAgICAgICAgICAgICAgYXR0cmlidXRlPXthdHRyaWJ1dGV9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17ZGlzcGxheURhdGFbYXR0cmlidXRlIGFzIGtleW9mIHR5cGVvZiBkaXNwbGF5RGF0YV19XG4gICAgICAgICAgICAgICAgICBjb250ZXh0PXtkaXNwbGF5Q29udGV4dH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9EZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L1N0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgIDwvUnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvQ29udGV4dENhcmRQcm92aWRlcj5cbiAgKTtcbn07XG4iXX0=
562
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2lkZWJhci9hdHRyaWJ1dGUtcGFuZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixrQkFBa0IsR0FDbkIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixrQkFBa0IsR0FDbkIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGlCQUFpQixFQUNqQixlQUFlLEdBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFD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QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB0eXBlIHsgRXZlbnQsIEhvb2ssIFN0ZXAsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB0eXBlIHsgTW9kZWxNZXNzYWdlIH0gZnJvbSAnYWknO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHR5cGUgeyBLZXlib2FyZEV2ZW50LCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzRW5jcnlwdGVkTWFya2VyLCBpc0V4cGlyZWRNYXJrZXIgfSBmcm9tICcuLi8uLi9saWIvaHlkcmF0aW9uJztcbmltcG9ydCB7IGV4dHJhY3RDb252ZXJzYXRpb24sIGlzRG9TdHJlYW1TdGVwIH0gZnJvbSAnLi4vLi4vbGliL3V0aWxzJztcbmltcG9ydCB7XG4gIENvbGxhcHNpYmxlLFxuICBDb2xsYXBzaWJsZUNvbnRlbnQsXG4gIENvbGxhcHNpYmxlUm9vdCxcbiAgQ29sbGFwc2libGVUcmlnZ2VyLFxufSBmcm9tICcuLi91aS9jb2xsYXBzaWJsZSc7XG5pbXBvcnQgeyBDb250ZXh0Q2FyZFByb3ZpZGVyIH0gZnJvbSAnLi4vdWkvY29udGV4dC1jYXJkJztcbmltcG9ydCB7XG4gIERlY3J5cHRDbGlja0NvbnRleHQsXG4gIFJ1bkNsaWNrQ29udGV4dCxcbiAgU3RyZWFtQ2xpY2tDb250ZXh0LFxufSBmcm9tICcuLi91aS9kYXRhLWluc3BlY3Rvcic7XG5pbXBvcnQgeyBFcnJvckNhcmQgfSBmcm9tICcuLi91aS9lcnJvci1jYXJkJztcbmltcG9ydCB7IEVycm9yU3RhY2tCbG9jaywgaXNTdHJ1Y3R1cmVkRXJyb3IgfSBmcm9tICcuLi91aS9lcnJvci1zdGFjay1ibG9jayc7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJy4uL3VpL3NrZWxldG9uJztcbmltcG9ydCB7IFRpbWVzdGFtcFRvb2x0aXAgfSBmcm9tICcuLi91aS90aW1lc3RhbXAtdG9vbHRpcCc7XG5pbXBvcnQge1xuICBEZXRhaWxNb25vS2V5VmFsdWVSb3csXG4gIFJ1bkF0dHJpYnV0ZXNDYXJkLFxuICBSdW5NZXRhZGF0YUNhcmQsXG59IGZyb20gJy4vYXR0cmlidXRlcy1ibG9jayc7XG5pbXBvcnQgeyBDb252ZXJzYXRpb25WaWV3IH0gZnJvbSAnLi9jb252ZXJzYXRpb24tdmlldyc7XG5pbXBvcnQgeyBDb3B5YWJsZURhdGFCbG9jaywgRW5jcnlwdGVkRGF0YUJsb2NrIH0gZnJvbSAnLi9jb3B5YWJsZS1kYXRhLWJsb2NrJztcblxuLyoqXG4gKiBUYWIgYnV0dG9uIGZvciBjb252ZXJzYXRpb24vSlNPTiB0b2dnbGVcbiAqL1xuZnVuY3Rpb24gVGFiQnV0dG9uKHtcbiAgYWN0aXZlLFxuICBvbkNsaWNrLFxuICBjaGlsZHJlbixcbn06IHtcbiAgYWN0aXZlOiBib29sZWFuO1xuICBvbkNsaWNrOiAoKSA9PiB2b2lkO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSkge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgcm9sZT1cInRhYlwiXG4gICAgICBhcmlhLXNlbGVjdGVkPXthY3RpdmV9XG4gICAgICB0YWJJbmRleD17YWN0aXZlID8gMCA6IC0xfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIGNsYXNzTmFtZT1cInB4LTMgcHktMS41IHRleHQtWzExcHhdIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tY29sb3JzIC1tYi1weFwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICAvLyBFeHBsaWNpdCBzdHlsZXMgdG8gcHJldmVudCBhcHAtbGV2ZWwgYnV0dG9uIG92ZXJyaWRlcyB3aGVuIHdlYi1zaGFyZWRcbiAgICAgICAgLy8gaXMgZW1iZWRkZWQgaW4gYSBzZWxmLWhvc3RlZCBhcHAuXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgYm9yZGVyVG9wOiAnbm9uZScsXG4gICAgICAgIGJvcmRlckxlZnQ6ICdub25lJyxcbiAgICAgICAgYm9yZGVyUmlnaHQ6ICdub25lJyxcbiAgICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7YWN0aXZlID8gJ3ZhcigtLWRzLWJsdWUtNjAwKScgOiAndHJhbnNwYXJlbnQnfWAsXG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgb3V0bGluZTogJ25vbmUnLFxuICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgIGNvbG9yOiBhY3RpdmUgPyAndmFyKC0tZHMtZ3JheS0xMDAwKScgOiAndmFyKC0tZHMtZ3JheS02MDApJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG4vKipcbiAqIFNoYXJlZCB0YWJiZWQgY29udGFpbmVyIHdpdGggYWNjZXNzaWJsZSBBUklBIHJvbGVzIGFuZCBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICogVXNlZCBieSBDb252ZXJzYXRpb25XaXRoVGFicyBmb3IgdGhlIGNvbnZlcnNhdGlvbi9KU09OIHRvZ2dsZS5cbiAqL1xuZnVuY3Rpb24gVGFiYmVkQ29udGFpbmVyPFQgZXh0ZW5kcyBzdHJpbmc+KHtcbiAgdGFicyxcbiAgYWN0aXZlVGFiLFxuICBvblRhYkNoYW5nZSxcbiAgYXJpYUxhYmVsLFxuICBjaGlsZHJlbixcbn06IHtcbiAgdGFiczogeyBpZDogVDsgbGFiZWw6IHN0cmluZyB9W107XG4gIGFjdGl2ZVRhYjogVDtcbiAgb25UYWJDaGFuZ2U6ICh0YWI6IFQpID0+IHZvaWQ7XG4gIGFyaWFMYWJlbDogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSkge1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0Fycm93UmlnaHQnICYmIGV2ZW50LmtleSAhPT0gJ0Fycm93TGVmdCcpIHJldHVybjtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0YWJzLmZpbmRJbmRleCgodCkgPT4gdC5pZCA9PT0gYWN0aXZlVGFiKTtcbiAgICAgIGNvbnN0IG5leHRJbmRleCA9XG4gICAgICAgIGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnXG4gICAgICAgICAgPyAoY3VycmVudEluZGV4ICsgMSkgJSB0YWJzLmxlbmd0aFxuICAgICAgICAgIDogKGN1cnJlbnRJbmRleCAtIDEgKyB0YWJzLmxlbmd0aCkgJSB0YWJzLmxlbmd0aDtcbiAgICAgIG9uVGFiQ2hhbmdlKHRhYnNbbmV4dEluZGV4XS5pZCk7XG4gICAgfSxcbiAgICBbdGFicywgYWN0aXZlVGFiLCBvblRhYkNoYW5nZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtbWQgYm9yZGVyXCJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS0zMDApJyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggZ2FwLTEgYm9yZGVyLWJcIlxuICAgICAgICByb2xlPVwidGFibGlzdFwiXG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS0zMDApJyxcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHt0YWJzLm1hcCgodGFiKSA9PiAoXG4gICAgICAgICAgPFRhYkJ1dHRvblxuICAgICAgICAgICAga2V5PXt0YWIuaWR9XG4gICAgICAgICAgICBhY3RpdmU9e2FjdGl2ZVRhYiA9PT0gdGFiLmlkfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25UYWJDaGFuZ2UodGFiLmlkKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGFiLmxhYmVsfVxuICAgICAgICAgIDwvVGFiQnV0dG9uPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiPntjaGlsZHJlbn08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3QgY29udmVyc2F0aW9uVGFicyA9IFtcbiAgeyBpZDogJ2NvbnZlcnNhdGlvbicgYXMgY29uc3QsIGxhYmVsOiAnQ29udmVyc2F0aW9uJyB9LFxuICB7IGlkOiAnanNvbicgYXMgY29uc3QsIGxhYmVsOiAnUmF3IEpTT04nIH0sXG5dO1xuXG4vKipcbiAqIFRhYmJlZCB2aWV3IGZvciBjb252ZXJzYXRpb24gYW5kIHJhdyBKU09OXG4gKi9cbmZ1bmN0aW9uIENvbnZlcnNhdGlvbldpdGhUYWJzKHtcbiAgY29udmVyc2F0aW9uLFxuICBhcmdzLFxuICBkZWZhdWx0T3BlbixcbiAgb25PcGVuQ2hhbmdlLFxufToge1xuICBjb252ZXJzYXRpb246IE1vZGVsTWVzc2FnZVtdO1xuICBhcmdzOiB1bmtub3duW107XG4gIGRlZmF1bHRPcGVuPzogYm9vbGVhbjtcbiAgb25PcGVuQ2hhbmdlPzogKG9wZW46IGJvb2xlYW4pID0+IHZvaWQ7XG59KSB7XG4gIGNvbnN0IFthY3RpdmVUYWIsIHNldEFjdGl2ZVRhYl0gPSB1c2VTdGF0ZTwnY29udmVyc2F0aW9uJyB8ICdqc29uJz4oXG4gICAgJ2NvbnZlcnNhdGlvbidcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxDb2xsYXBzaWJsZVxuICAgICAgbGFiZWw9XCJJbnB1dFwiXG4gICAgICBkZWZhdWx0T3Blbj17ZGVmYXVsdE9wZW59XG4gICAgICBvbk9wZW5DaGFuZ2U9e29uT3BlbkNoYW5nZX1cbiAgICA+XG4gICAgICA8VGFiYmVkQ29udGFpbmVyXG4gICAgICAgIHRhYnM9e2NvbnZlcnNhdGlvblRhYnN9XG4gICAgICAgIGFjdGl2ZVRhYj17YWN0aXZlVGFifVxuICAgICAgICBvblRhYkNoYW5nZT17c2V0QWN0aXZlVGFifVxuICAgICAgICBhcmlhTGFiZWw9XCJDb252ZXJzYXRpb24gdmlld1wiXG4gICAgICA+XG4gICAgICAgIHthY3RpdmVUYWIgPT09ICdjb252ZXJzYXRpb24nID8gKFxuICAgICAgICAgIDxDb252ZXJzYXRpb25WaWV3IG1lc3NhZ2VzPXtjb252ZXJzYXRpb259IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTNcIj5cbiAgICAgICAgICAgIHtBcnJheS5pc0FycmF5KGFyZ3MpXG4gICAgICAgICAgICAgID8gYXJncy5tYXAoKHYsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmaXJzdDptdC0wXCIga2V5PXtpfT5cbiAgICAgICAgICAgICAgICAgICAge0pzb25CbG9jayh2KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogSnNvbkJsb2NrKGFyZ3MpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9UYWJiZWRDb250YWluZXI+XG4gICAgPC9Db2xsYXBzaWJsZT5cbiAgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYSB2YWx1ZSB3aXRoIHRoZSBzaGFyZWQgRGF0YUluc3BlY3RvciAoT2JqZWN0SW5zcGVjdG9yIHdpdGhcbiAqIGN1c3RvbSB0aGVtaW5nLCBub2RlUmVuZGVyZXIgZm9yIFN0cmVhbVJlZi9DbGFzc0luc3RhbmNlUmVmLCBldGMuKVxuICovXG5mdW5jdGlvbiBFbmNyeXB0ZWRGaWVsZEJsb2NrKCkge1xuICByZXR1cm4gPEVuY3J5cHRlZERhdGFCbG9jayAvPjtcbn1cblxuLyoqXG4gKiBJbmxpbmUgZGlzcGxheSBmb3IgYW4gZXhwaXJlZCBmaWVsZDogZmxhdCBsYWJlbCBpbmRpY2F0aW5nIGRhdGEgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS5cbiAqL1xuZnVuY3Rpb24gRXhwaXJlZEZpZWxkQmxvY2soKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSByb3VuZGVkLW1kIGJvcmRlciBweC0zIHB5LTIgdGV4dC1sYWJlbC0xMlwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj5EYXRhIGV4cGlyZWQ8L3NwYW4+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEpzb25CbG9jayh2YWx1ZTogdW5rbm93bikge1xuICByZXR1cm4gPENvcHlhYmxlRGF0YUJsb2NrIGRhdGE9e3ZhbHVlfSAvPjtcbn1cblxuY29uc3QgaGFzRGlzcGxheUNvbnRlbnQgPSAodmFsdWU6IHVua25vd24pOiBib29sZWFuID0+IHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID4gMDtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG50eXBlIEF0dHJpYnV0ZUtleSA9XG4gIHwga2V5b2YgU3RlcFxuICB8IGtleW9mIFdvcmtmbG93UnVuXG4gIHwga2V5b2YgSG9va1xuICB8IGtleW9mIEV2ZW50XG4gIHwgJ29jY3VycmVkQXQnXG4gIHwgJ21vZHVsZVNwZWNpZmllcidcbiAgfCAnZXZlbnREYXRhJ1xuICB8ICdyZXN1bWVBdCdcbiAgfCAnZXhwaXJlZEF0J1xuICB8ICd3b3JrZmxvd0NvcmVWZXJzaW9uJ1xuICB8ICdyZWNlaXZlZENvdW50J1xuICB8ICdsYXN0UmVjZWl2ZWRBdCdcbiAgfCAnZGlzcG9zZWRBdCdcbiAgfCAnaXNTeXN0ZW0nXG4gIHwgJ2Vycm9yQ29kZSdcbiAgLy8gQW5hbHl0aWNzLW9ubHkgcHJvdmVuYW5jZSAoQW5hbHl0aWNzRXZlbnQgLyBBbmFseXRpY3NTdGVwKSwgbm90IG9uIEV2ZW50LlxuICB8ICdjb21wdXRlSW5zdGFuY2VJZCdcbiAgLy8gQW5hbHl0aWNzLW9ubHksIGFuZCBldmVudC1ncmFpbmVkOiBvbmx5IEFuYWx5dGljc0V2ZW50IGNhcnJpZXMgaXQuIFRoZSBrZXlcbiAgLy8gaXMgYHZlcmNlbElkYCBiZWNhdXNlIHRoYXQgaXMgdGhlIG5hbWUgdGhlIGJhY2tlbmQgc3RvcmVzIHRoZSBTREsnc1xuICAvLyBgcmVxdWVzdElkYCB1bmRlcjsgQW5hbHl0aWNzRXZlbnQncyBzaWJsaW5nIGByZXF1ZXN0SWRgIGNvbHVtbiBpcyBuZXZlclxuICAvLyB3cml0dGVuLCBzbyByZWFkaW5nIHRoYXQgb25lIHdvdWxkIGFsd2F5cyBiZSBlbXB0eS5cbiAgfCAndmVyY2VsSWQnO1xuXG5jb25zdCBhdHRyaWJ1dGVPcmRlcjogQXR0cmlidXRlS2V5W10gPSBbXG4gICd3b3JrZmxvd05hbWUnLFxuICAnbW9kdWxlU3BlY2lmaWVyJyxcbiAgJ3N0ZXBOYW1lJyxcbiAgJ3N0YXR1cycsXG4gICdzdGVwSWQnLFxuICAnaG9va0lkJyxcbiAgJ2V2ZW50SWQnLFxuICAncnVuSWQnLFxuICAnYXR0ZW1wdCcsXG4gICd0b2tlbicsXG4gICd0b2tlblJldGVudGlvblVudGlsJyxcbiAgJ2lzV2ViaG9vaycsXG4gICdpc1N5c3RlbScsXG4gICdyZWNlaXZlZENvdW50JyxcbiAgJ2xhc3RSZWNlaXZlZEF0JyxcbiAgJ2Rpc3Bvc2VkQXQnLFxuICAnY29ycmVsYXRpb25JZCcsXG4gICdldmVudFR5cGUnLFxuICAnZGVwbG95bWVudElkJyxcbiAgJ3ZlcmNlbElkJyxcbiAgJ2NvbXB1dGVJbnN0YW5jZUlkJyxcbiAgJ3NwZWNWZXJzaW9uJyxcbiAgJ3dvcmtmbG93Q29yZVZlcnNpb24nLFxuICAnb3duZXJJZCcsXG4gICdwcm9qZWN0SWQnLFxuICAnZW52aXJvbm1lbnQnLFxuICAnZXhlY3V0aW9uQ29udGV4dCcsXG4gICdvY2N1cnJlZEF0JyxcbiAgJ2NyZWF0ZWRBdCcsXG4gICdzdGFydGVkQXQnLFxuICAndXBkYXRlZEF0JyxcbiAgJ2NvbXBsZXRlZEF0JyxcbiAgJ2V4cGlyZWRBdCcsXG4gICdyZXRyeUFmdGVyJyxcbiAgJ2Vycm9yQ29kZScsXG4gICdlcnJvcicsXG4gICdtZXRhZGF0YScsXG4gICdldmVudERhdGEnLFxuICAnaW5wdXQnLFxuICAnb3V0cHV0JyxcbiAgJ2F0dHJpYnV0ZXMnLFxuICAncmVzdW1lQXQnLFxuXTtcblxuLyoqXG4gKiBSYW5rIG9mIGFuIGF0dHJpYnV0ZSBpbiB7QGxpbmsgYXR0cmlidXRlT3JkZXJ9LiBLZXlzIGFic2VudCBmcm9tIHRoYXQgbGlzdFxuICogc29ydCBhZnRlciBldmVyeSBsaXN0ZWQgb25lIHJhdGhlciB0aGFuIGJlZm9yZSB0aGVtOiBgaW5kZXhPZmAgcmVwb3J0cyBhXG4gKiBtaXNzIGFzIGAtMWAsIHdoaWNoIGlzIHRydXRoeSwgc28gYSBgfHwgMGAgZmFsbGJhY2sgbmV2ZXIgZmlyZXMuXG4gKi9cbmNvbnN0IGF0dHJpYnV0ZU9yZGVySW5kZXggPSAoYXR0cmlidXRlOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICBjb25zdCBpbmRleCA9IGF0dHJpYnV0ZU9yZGVyLmluZGV4T2YoYXR0cmlidXRlIGFzIEF0dHJpYnV0ZUtleSk7XG4gIHJldHVybiBpbmRleCA9PT0gLTEgPyBhdHRyaWJ1dGVPcmRlci5sZW5ndGggOiBpbmRleDtcbn07XG5cbmNvbnN0IHNvcnRCeUF0dHJpYnV0ZU9yZGVyID0gKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyID0+XG4gIGF0dHJpYnV0ZU9yZGVySW5kZXgoYSkgLSBhdHRyaWJ1dGVPcmRlckluZGV4KGIpO1xuXG4vKipcbiAqIERpc3BsYXkgbmFtZXMgZm9yIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgcmVuZGVyIGRpZmZlcmVudGx5IGZyb20gdGhlaXIga2V5LlxuICovXG5jb25zdCBhdHRyaWJ1dGVEaXNwbGF5TmFtZXM6IFBhcnRpYWw8UmVjb3JkPEF0dHJpYnV0ZUtleSwgc3RyaW5nPj4gPSB7XG4gIG1vZHVsZVNwZWNpZmllcjogJ01vZHVsZScsXG4gIHdvcmtmbG93TmFtZTogJ1dvcmtmbG93IE5hbWUnLFxuICBzdGVwTmFtZTogJ1N0ZXAgTmFtZScsXG4gIHN0ZXBJZDogJ1N0ZXAgSUQnLFxuICBob29rSWQ6ICdIb29rIElEJyxcbiAgYXR0ZW1wdDogJ0F0dGVtcHRzJyxcbiAgZXZlbnRJZDogJ0V2ZW50IElEJyxcbiAgcnVuSWQ6ICdSdW4gSUQnLFxuICB0b2tlbjogJ1Rva2VuJyxcbiAgdG9rZW5SZXRlbnRpb25VbnRpbDogJ01pbmltdW0gUmV0ZW50aW9uIFVudGlsJyxcbiAgZXZlbnRUeXBlOiAnRXZlbnQgVHlwZScsXG4gIGVycm9yQ29kZTogJ0Vycm9yIENvZGUnLFxuICBjb3JyZWxhdGlvbklkOiAnQ29ycmVsYXRpb24gSUQnLFxuICBkZXBsb3ltZW50SWQ6ICdEZXBsb3ltZW50IElEJyxcbiAgdmVyY2VsSWQ6ICdSZXF1ZXN0IElEJyxcbiAgY29tcHV0ZUluc3RhbmNlSWQ6ICdDb21wdXRlIEluc3RhbmNlIElEJyxcbiAgc3BlY1ZlcnNpb246ICdTcGVjIFZlcnNpb24nLFxuICB3b3JrZmxvd0NvcmVWZXJzaW9uOiAnQHdvcmtmbG93L2NvcmUgdmVyc2lvbicsXG4gIG9jY3VycmVkQXQ6ICdPY2N1cnJlZCcsXG4gIGNyZWF0ZWRBdDogJ0NyZWF0ZWQnLFxuICBzdGFydGVkQXQ6ICdTdGFydGVkJyxcbiAgdXBkYXRlZEF0OiAnVXBkYXRlZCcsXG4gIGNvbXBsZXRlZEF0OiAnQ29tcGxldGVkJyxcbiAgZXhwaXJlZEF0OiAnRXhwaXJlZCcsXG4gIHJldHJ5QWZ0ZXI6ICdSZXRyeSBBZnRlcicsXG4gIHJlc3VtZUF0OiAnUmVzdW1lJyxcbiAgbGFzdFJlY2VpdmVkQXQ6ICdMYXN0IFJlY2VpdmVkJyxcbiAgZGlzcG9zZWRBdDogJ0Rpc3Bvc2VkJyxcbiAgcmVjZWl2ZWRDb3VudDogJ1RpbWVzIFJlc29sdmVkJyxcbn07XG5cbi8qKlxuICogR2V0IHRoZSBkaXNwbGF5IG5hbWUgZm9yIGFuIGF0dHJpYnV0ZSBrZXkuXG4gKi9cbmNvbnN0IGdldEF0dHJpYnV0ZURpc3BsYXlOYW1lID0gKGF0dHJpYnV0ZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGF0dHJpYnV0ZURpc3BsYXlOYW1lc1thdHRyaWJ1dGUgYXMgQXR0cmlidXRlS2V5XSA/PyBhdHRyaWJ1dGU7XG59O1xuXG5jb25zdCBnZXRNb2R1bGVTcGVjaWZpZXJGcm9tTmFtZSA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHJhdyA9IFN0cmluZyh2YWx1ZSk7XG4gIGNvbnN0IHBhcnNlZFN0ZXAgPSBwYXJzZVN0ZXBOYW1lKHJhdyk7XG4gIGlmIChwYXJzZWRTdGVwKSB7XG4gICAgcmV0dXJuIHBhcnNlZFN0ZXAubW9kdWxlU3BlY2lmaWVyO1xuICB9XG4gIGNvbnN0IHBhcnNlZFdvcmtmbG93ID0gcGFyc2VXb3JrZmxvd05hbWUocmF3KTtcbiAgaWYgKHBhcnNlZFdvcmtmbG93KSB7XG4gICAgcmV0dXJuIHBhcnNlZFdvcmtmbG93Lm1vZHVsZVNwZWNpZmllcjtcbiAgfVxuICByZXR1cm4gcmF3O1xufTtcblxuY29uc3QgcGFyc2VEYXRlVmFsdWUgPSAodmFsdWU6IHVua25vd24pOiBEYXRlIHwgbnVsbCA9PiB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBOdW1iZXIuaXNOYU4odmFsdWUuZ2V0VGltZSgpKSA/IG51bGwgOiB2YWx1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkYXRlID1cbiAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gbmV3IERhdGUodmFsdWUpIDogbmV3IERhdGUoU3RyaW5nKHZhbHVlKSk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gbnVsbCA6IGRhdGU7XG59O1xuXG5jb25zdCBmb3JtYXRMb2NhbE1pbGxpc2Vjb25kVGltZSA9IChkYXRlOiBEYXRlKTogc3RyaW5nID0+XG4gIGZvcm1hdChkYXRlLCAnTU1NIGRkIEhIOm1tOnNzLlNTIE9PJykudG9VcHBlckNhc2UoKTtcblxuZXhwb3J0IGNvbnN0IGxvY2FsTWlsbGlzZWNvbmRUaW1lID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZVZhbHVlKHZhbHVlKTtcbiAgaWYgKCFkYXRlKSB7XG4gICAgcmV0dXJuICctJztcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRMb2NhbE1pbGxpc2Vjb25kVGltZShkYXRlKTtcbn07XG5cbmNvbnN0IGxvY2FsTWlsbGlzZWNvbmRUaW1lT3JOdWxsID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGRhdGUgPSBwYXJzZURhdGVWYWx1ZSh2YWx1ZSk7XG4gIGlmICghZGF0ZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBmb3JtYXRMb2NhbE1pbGxpc2Vjb25kVGltZShkYXRlKTtcbn07XG5cbmNvbnN0IHRpbWVzdGFtcFdpdGhUb29sdGlwT3JOdWxsID0gKHZhbHVlOiB1bmtub3duKTogUmVhY3ROb2RlIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGRhdGUgPSBwYXJzZURhdGVWYWx1ZSh2YWx1ZSk7XG4gIGlmICghZGF0ZSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiAoXG4gICAgPFRpbWVzdGFtcFRvb2x0aXAgZGF0ZT17ZGF0ZX0+XG4gICAgICA8c3Bhbj57Zm9ybWF0TG9jYWxNaWxsaXNlY29uZFRpbWUoZGF0ZSl9PC9zcGFuPlxuICAgIDwvVGltZXN0YW1wVG9vbHRpcD5cbiAgKTtcbn07XG5cbi8qKlxuICogUmVuZGVycyBhbiBvcGFxdWUgcHJvdmVuYW5jZSBpZC4gVGhlIGFuYWx5dGljcyByZWFkIGNvbnRyYWN0IHR5cGVzIHRoZXNlIGFzXG4gKiBudWxsYWJsZSwgYW5kIG9ubHkgYSBgbnVsbGAgcmV0dXJuIGlzIGZpbHRlcmVkIG91dCBvZiB0aGUgcGFuZWwsIHNvIGEgYmFyZVxuICogYFN0cmluZygpYCB3b3VsZCBzdXJmYWNlIHRoZSBsaXRlcmFsIHRleHQgXCJudWxsXCIgYXMgdGhlIHZhbHVlLlxuICovXG5jb25zdCBvcGFxdWVJZE9yTnVsbCA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IG51bGwgPT5cbiAgaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6IG51bGw7XG5cbmludGVyZmFjZSBEaXNwbGF5Q29udGV4dCB7XG4gIHN0ZXBOYW1lPzogc3RyaW5nO1xuICBzZWN0aW9uT3Blbj86IGJvb2xlYW47XG4gIG9uU2VjdGlvbk9wZW5DaGFuZ2U/OiAob3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbn1cblxuY29uc3QgYXR0cmlidXRlVG9EaXNwbGF5Rm46IFJlY29yZDxcbiAgQXR0cmlidXRlS2V5LFxuICAodmFsdWU6IHVua25vd24sIGNvbnRleHQ/OiBEaXNwbGF5Q29udGV4dCkgPT4gbnVsbCB8IHN0cmluZyB8IFJlYWN0Tm9kZVxuPiA9IHtcbiAgLy8gTmFtZXMgdGhhdCBuZWVkIHByZXR0eS1wcmludGluZ1xuICB3b3JrZmxvd05hbWU6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIG1vZHVsZVNwZWNpZmllcjogKHZhbHVlOiB1bmtub3duKSA9PiBnZXRNb2R1bGVTcGVjaWZpZXJGcm9tTmFtZSh2YWx1ZSksXG4gIHN0ZXBOYW1lOiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICAvLyBJRHNcbiAgcnVuSWQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIHN0ZXBJZDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICBob29rSWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgZXZlbnRJZDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICAvLyBSdW4vc3RlcCBkZXRhaWxzXG4gIHN0YXR1czogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgYXR0ZW1wdDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICAvLyBIb29rIGRldGFpbHNcbiAgdG9rZW46ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgdG9rZW5SZXRlbnRpb25VbnRpbDogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIGlzV2ViaG9vazogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICBpc1N5c3RlbTogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICByZWNlaXZlZENvdW50OiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIGxhc3RSZWNlaXZlZEF0OiBsb2NhbE1pbGxpc2Vjb25kVGltZU9yTnVsbCxcbiAgZGlzcG9zZWRBdDogbG9jYWxNaWxsaXNlY29uZFRpbWVPck51bGwsXG4gIC8vIEludGVybmFsIHJlc3VtZSBwbHVtYmluZywgbm90IHN1cmZhY2VkIGluIHRoZSBVSVxuICByZXN1bWVDb250ZXh0OiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICByZXN1bWVJZDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgcmVzdW1lQ2FwYWJpbGl0aWVzOiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICAvLyBFdmVudCBkZXRhaWxzXG4gIGV2ZW50VHlwZTogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICBjb3JyZWxhdGlvbklkOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIC8vIFByb2plY3QgZGV0YWlsc1xuICBkZXBsb3ltZW50SWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgdmVyY2VsSWQ6IG9wYXF1ZUlkT3JOdWxsLFxuICBjb21wdXRlSW5zdGFuY2VJZDogb3BhcXVlSWRPck51bGwsXG4gIHNwZWNWZXJzaW9uOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIHdvcmtmbG93Q29yZVZlcnNpb246ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgLy8gVGVuYW5jeSAod2UgZG9uJ3Qgc2hvdyB0aGVzZSlcbiAgb3duZXJJZDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgcHJvamVjdElkOiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICBlbnZpcm9ubWVudDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgZXhlY3V0aW9uQ29udGV4dDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgLy8gQXR0cmlidXRlczogc3RyaW5nLXN0cmluZyBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgcnVuLlxuICAvLyBSZW5kZXJlZCBhcyBrZXktdmFsdWUgcm93cyBpbiBpdHMgb3duIGNvbGxhcHNpYmxlIHNlY3Rpb247XG4gIC8vIGlmIGVtcHR5L21pc3NpbmcsIGhpZGRlbiBieSB0aGUgaGFzRGlzcGxheUNvbnRlbnQgZ2F0ZS5cbiAgYXR0cmlidXRlczogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKCFoYXNEaXNwbGF5Q29udGVudCh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8UnVuQXR0cmlidXRlc0NhcmQgYXR0cmlidXRlcz17dmFsdWUgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gLz47XG4gIH0sXG4gIC8vIERhdGVzOiB3cmFwcGVkIHdpdGggVGltZXN0YW1wVG9vbHRpcCBzaG93aW5nIFVUQy9sb2NhbCArIHJlbGF0aXZlIHRpbWVcbiAgb2NjdXJyZWRBdDogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIHN0YXJ0ZWRBdDogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIHVwZGF0ZWRBdDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgY29tcGxldGVkQXQ6IHRpbWVzdGFtcFdpdGhUb29sdGlwT3JOdWxsLFxuICBleHBpcmVkQXQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIHJldHJ5QWZ0ZXI6IHRpbWVzdGFtcFdpdGhUb29sdGlwT3JOdWxsLFxuICByZXN1bWVBdDogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIC8vIFJlc29sdmVkIGF0dHJpYnV0ZXMsIHdvbid0IGFjdHVhbGx5IHVzZSB0aGlzIGZ1bmN0aW9uXG4gIG1ldGFkYXRhOiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAoIWhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbGxhcHNpYmxlIGxhYmVsPVwiTWV0YWRhdGFcIj5cbiAgICAgICAgICA8RW5jcnlwdGVkRGF0YUJsb2NrIC8+XG4gICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaXNFeHBpcmVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbGxhcHNpYmxlIGxhYmVsPVwiTWV0YWRhdGFcIj5cbiAgICAgICAgICA8RXhwaXJlZEZpZWxkQmxvY2sgLz5cbiAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8UnVuTWV0YWRhdGFDYXJkIG1ldGFkYXRhPXt2YWx1ZX0gLz47XG4gIH0sXG4gIGlucHV0OiAodmFsdWU6IHVua25vd24sIGNvbnRleHQ/OiBEaXNwbGF5Q29udGV4dCkgPT4ge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xsYXBzaWJsZVxuICAgICAgICAgIGxhYmVsPVwiSW5wdXRcIlxuICAgICAgICAgIGRlZmF1bHRPcGVuPXtjb250ZXh0Py5zZWN0aW9uT3Blbn1cbiAgICAgICAgICBvbk9wZW5DaGFuZ2U9e2NvbnRleHQ/Lm9uU2VjdGlvbk9wZW5DaGFuZ2V9XG4gICAgICAgID5cbiAgICAgICAgICA8RW5jcnlwdGVkRmllbGRCbG9jayAvPlxuICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzRXhwaXJlZE1hcmtlcih2YWx1ZSkpIHJldHVybiA8RXhwaXJlZEZpZWxkQmxvY2sgLz47XG4gICAgLy8gQ2hlY2sgaWYgaW5wdXQgaGFzIGFyZ3MgKyBjbG9zdXJlIHZhcnMgc3RydWN0dXJlXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2FyZ3MnIGluIHZhbHVlKSB7XG4gICAgICBjb25zdCB7IGFyZ3MsIGNsb3N1cmVWYXJzLCB0aGlzVmFsIH0gPSB2YWx1ZSBhcyB7XG4gICAgICAgIGFyZ3M6IHVua25vd25bXTtcbiAgICAgICAgY2xvc3VyZVZhcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgdGhpc1ZhbD86IHVua25vd247XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFzQ2xvc3VyZVZhcnMgPSBoYXNEaXNwbGF5Q29udGVudChjbG9zdXJlVmFycyk7XG4gICAgICBjb25zdCBoYXNUaGlzVmFsID0gaGFzRGlzcGxheUNvbnRlbnQodGhpc1ZhbCk7XG4gICAgICBjb25zdCBoYXNBcmdzID0gaGFzRGlzcGxheUNvbnRlbnQoYXJncyk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBkb1N0cmVhbVN0ZXAgLSBzaG93IGNvbnZlcnNhdGlvbiB2aWV3IHdpdGggdGFic1xuICAgICAgaWYgKGNvbnRleHQ/LnN0ZXBOYW1lICYmIGlzRG9TdHJlYW1TdGVwKGNvbnRleHQuc3RlcE5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGV4dHJhY3RDb252ZXJzYXRpb24oYXJncyk7XG4gICAgICAgIGlmIChjb252ZXJzYXRpb24gJiYgY29udmVyc2F0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPENvbnZlcnNhdGlvbldpdGhUYWJzXG4gICAgICAgICAgICAgICAgY29udmVyc2F0aW9uPXtjb252ZXJzYXRpb259XG4gICAgICAgICAgICAgICAgYXJncz17YXJnc31cbiAgICAgICAgICAgICAgICBkZWZhdWx0T3Blbj17Y29udGV4dD8uc2VjdGlvbk9wZW59XG4gICAgICAgICAgICAgICAgb25PcGVuQ2hhbmdlPXtjb250ZXh0Py5vblNlY3Rpb25PcGVuQ2hhbmdlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7aGFzQ2xvc3VyZVZhcnMgJiYgKFxuICAgICAgICAgICAgICAgIDxDb2xsYXBzaWJsZSBsYWJlbD1cIkNsb3N1cmUgVmFyaWFibGVzXCI+XG4gICAgICAgICAgICAgICAgICB7SnNvbkJsb2NrKGNsb3N1cmVWYXJzKX1cbiAgICAgICAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7aGFzVGhpc1ZhbCAmJiAoXG4gICAgICAgICAgICAgICAgPENvbGxhcHNpYmxlIGxhYmVsPVwiVGhpcyBWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAge0pzb25CbG9jayh0aGlzVmFsKX1cbiAgICAgICAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBEb24ndCByZW5kZXIgYW4gZW1wdHkgXCJJbnB1dCAoMCBhcmd1bWVudHMpXCIgY2FyZCB3aGVuIG5vIGlucHV0IGV4aXN0cy5cbiAgICAgIGlmICghaGFzQXJncyAmJiAhaGFzQ2xvc3VyZVZhcnMgJiYgIWhhc1RoaXNWYWwpIHtcbiAgICAgICAgcmV0dXJuIDxDb2xsYXBzaWJsZSBsYWJlbD1cIklucHV0IChubyBkYXRhKVwiIGRpc2FibGVkIC8+O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxDb2xsYXBzaWJsZVxuICAgICAgICAgICAgbGFiZWw9XCJJbnB1dFwiXG4gICAgICAgICAgICBkZWZhdWx0T3Blbj17Y29udGV4dD8uc2VjdGlvbk9wZW59XG4gICAgICAgICAgICBvbk9wZW5DaGFuZ2U9e2NvbnRleHQ/Lm9uU2VjdGlvbk9wZW5DaGFuZ2V9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge0FycmF5LmlzQXJyYXkoYXJncylcbiAgICAgICAgICAgICAgPyBhcmdzLm1hcCgodiwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZpcnN0Om10LTBcIiBrZXk9e2l9PlxuICAgICAgICAgICAgICAgICAgICB7SnNvbkJsb2NrKHYpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgOiBKc29uQmxvY2soYXJncyl9XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgICB7aGFzQ2xvc3VyZVZhcnMgJiYgKFxuICAgICAgICAgICAgPENvbGxhcHNpYmxlIGxhYmVsPVwiQ2xvc3VyZSBWYXJpYWJsZXNcIj5cbiAgICAgICAgICAgICAge0pzb25CbG9jayhjbG9zdXJlVmFycyl9XG4gICAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hhc1RoaXNWYWwgJiYgKFxuICAgICAgICAgICAgPENvbGxhcHNpYmxlIGxhYmVsPVwiQ29udGV4dFwiPntKc29uQmxvY2sodGhpc1ZhbCl9PC9Db2xsYXBzaWJsZT5cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IHRyZWF0IGFzIHBsYWluIGFycmF5IG9yIG9iamVjdFxuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gPENvbGxhcHNpYmxlIGxhYmVsPVwiSW5wdXQgKG5vIGRhdGEpXCIgZGlzYWJsZWQgLz47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8Q29sbGFwc2libGVcbiAgICAgICAgbGFiZWw9XCJJbnB1dFwiXG4gICAgICAgIGRlZmF1bHRPcGVuPXtjb250ZXh0Py5zZWN0aW9uT3Blbn1cbiAgICAgICAgb25PcGVuQ2hhbmdlPXtjb250ZXh0Py5vblNlY3Rpb25PcGVuQ2hhbmdlfVxuICAgICAgPlxuICAgICAgICB7QXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLm1hcCgodiwgaSkgPT4gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTIgZmlyc3Q6bXQtMFwiIGtleT17aX0+XG4gICAgICAgICAgICAgICAge0pzb25CbG9jayh2KX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKVxuICAgICAgICAgIDogSnNvbkJsb2NrKHZhbHVlKX1cbiAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgKTtcbiAgfSxcbiAgb3V0cHV0OiAodmFsdWU6IHVua25vd24sIGNvbnRleHQ/OiBEaXNwbGF5Q29udGV4dCkgPT4ge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xsYXBzaWJsZVxuICAgICAgICAgIGxhYmVsPVwiT3V0cHV0XCJcbiAgICAgICAgICBkZWZhdWx0T3Blbj17Y29udGV4dD8uc2VjdGlvbk9wZW59XG4gICAgICAgICAgb25PcGVuQ2hhbmdlPXtjb250ZXh0Py5vblNlY3Rpb25PcGVuQ2hhbmdlfVxuICAgICAgICA+XG4gICAgICAgICAgPEVuY3J5cHRlZEZpZWxkQmxvY2sgLz5cbiAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoaXNFeHBpcmVkTWFya2VyKHZhbHVlKSkgcmV0dXJuIDxFeHBpcmVkRmllbGRCbG9jayAvPjtcbiAgICByZXR1cm4gKFxuICAgICAgPENvbGxhcHNpYmxlXG4gICAgICAgIGxhYmVsPVwiT3V0cHV0XCJcbiAgICAgICAgZGVmYXVsdE9wZW49e2NvbnRleHQ/LnNlY3Rpb25PcGVufVxuICAgICAgICBvbk9wZW5DaGFuZ2U9e2NvbnRleHQ/Lm9uU2VjdGlvbk9wZW5DaGFuZ2V9XG4gICAgICA+XG4gICAgICAgIHtKc29uQmxvY2sodmFsdWUpfVxuICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICApO1xuICB9LFxuICBlcnJvcjogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbGxhcHNpYmxlIGxhYmVsPVwiRXJyb3JcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICA8RW5jcnlwdGVkRmllbGRCbG9jayAvPlxuICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzRXhwaXJlZE1hcmtlcih2YWx1ZSkpIHJldHVybiA8RXhwaXJlZEZpZWxkQmxvY2sgLz47XG4gICAgaWYgKCFoYXNEaXNwbGF5Q29udGVudCh2YWx1ZSkpIHJldHVybiBudWxsO1xuXG4gICAgLy8gU3RydWN0dXJlZCB3b3JrZmxvdyBlcnJvcnMgbWF5IGJlIHBlcnNpc3RlZCBhcyBlaXRoZXIgYHsgbWVzc2FnZSB9YCBvclxuICAgIC8vIGB7IG1lc3NhZ2UsIHN0YWNrIH1gLiBSZW5kZXIgYm90aCB3aXRoIHRoZSBkZWRpY2F0ZWQgZXJyb3IgYmxvY2suXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbGxhcHNpYmxlIGxhYmVsPVwiRXJyb3JcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXt2YWx1ZX0gLz5cbiAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxDb2xsYXBzaWJsZSBsYWJlbD1cIkVycm9yXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgIHtKc29uQmxvY2sodmFsdWUpfVxuICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICApO1xuICB9LFxuICBldmVudERhdGE6ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxDb2xsYXBzaWJsZSBsYWJlbD1cIkV2ZW50IERhdGFcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICA8RW5jcnlwdGVkRmllbGRCbG9jayAvPlxuICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzRXhwaXJlZE1hcmtlcih2YWx1ZSkpIHJldHVybiA8RXhwaXJlZEZpZWxkQmxvY2sgLz47XG4gICAgaWYgKCFoYXNEaXNwbGF5Q29udGVudCh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiAoXG4gICAgICA8Q29sbGFwc2libGUgbGFiZWw9XCJFdmVudCBEYXRhXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgIHtKc29uQmxvY2sodmFsdWUpfVxuICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICApO1xuICB9LFxuICBlcnJvckNvZGU6ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH0sXG4gIC8vIEludGVybmFsIGVuY3J5cHRpb24gcGx1bWJpbmc6IHRoZSBydW4ncyBYMjU1MTkgcHVibGljIGtleSwgdXNlZCBieVxuICAvLyBjcm9zcy1ydW4gd3JpdGVycyB0byBzZWFsIHBheWxvYWRzIHRvIHRoaXMgcnVuLiBOb3QgYWN0aW9uYWJsZSBmb3IgdXNlcnNcbiAgLy8gYW5kIG5vdCBzZWNyZXQsIHNvIGhpZGRlbiByYXRoZXIgdGhhbiByZW5kZXJlZCBhcyA0NCBvcGFxdWUgYmFzZTY0IGNoYXJzLlxuICBlbmNyeXB0aW9uUHVibGljS2V5OiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxufTtcblxuY29uc3QgcmVzb2x2YWJsZUF0dHJpYnV0ZXMgPSBbXG4gICdpbnB1dCcsXG4gICdvdXRwdXQnLFxuICAnZXJyb3InLFxuICAnbWV0YWRhdGEnLFxuICAnYXR0cmlidXRlcycsXG4gICdldmVudERhdGEnLFxuXTtcblxuLy8gQXR0cmlidXRlcyB3aG9zZSBkaXNwbGF5Rm4gcmVuZGVycyBpdHMgb3duIHNlY3Rpb24gaGVhZGVyIHZpYSBDb2xsYXBzaWJsZSxcbi8vIHNvIHRoZSBvdXRlciBBdHRyaWJ1dGVCbG9jayBzaG91bGQgbm90IGR1cGxpY2F0ZSB0aGUgbGFiZWwuXG5jb25zdCBzZWxmSGVhZGVyZWRBdHRyaWJ1dGVzID0gbmV3IFNldChbXG4gICdpbnB1dCcsXG4gICdvdXRwdXQnLFxuICAnZXJyb3InLFxuICAnbWV0YWRhdGEnLFxuICAnYXR0cmlidXRlcycsXG4gICdldmVudERhdGEnLFxuXSk7XG5cbmNvbnN0IEV4cGlyZWREYXRhTWVzc2FnZSA9ICgpID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTIgcm91bmRlZC1tZCBib3JkZXIgcC00IG15LTJcIlxuICAgIHN0eWxlPXt7XG4gICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTEwMCknLFxuICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICAgIH19XG4gID5cbiAgICA8c3Bhbj5UaGUgZGF0YSBmb3IgdGhpcyBydW4gaGFzIGV4cGlyZWQgYW5kIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuPC9zcGFuPlxuICA8L2Rpdj5cbik7XG5cbmNvbnN0IGNvcHlhYmxlQmFzaWNBdHRyaWJ1dGVzID0gbmV3IFNldDxBdHRyaWJ1dGVLZXk+KFtcbiAgJ3N0ZXBJZCcsXG4gICdob29rSWQnLFxuICAnZXZlbnRJZCcsXG4gICdkZXBsb3ltZW50SWQnLFxuICAndmVyY2VsSWQnLFxuICAnY29tcHV0ZUluc3RhbmNlSWQnLFxuICAnbW9kdWxlU3BlY2lmaWVyJyxcbiAgJ3Rva2VuJyxcbl0pO1xuXG5jb25zdCBsb2FkaW5nU2VjdGlvbkxhYmVsczogUGFydGlhbDxSZWNvcmQ8QXR0cmlidXRlS2V5LCBzdHJpbmc+PiA9IHtcbiAgaW5wdXQ6ICdJbnB1dCcsXG4gIG91dHB1dDogJ091dHB1dCcsXG4gIGV2ZW50RGF0YTogJ0V2ZW50IERhdGEnLFxufTtcblxuZXhwb3J0IGNvbnN0IEF0dHJpYnV0ZUJsb2NrID0gKHtcbiAgYXR0cmlidXRlLFxuICB2YWx1ZSxcbiAgaXNMb2FkaW5nLFxuICBpbmxpbmUgPSBmYWxzZSxcbiAgY29udGV4dCxcbn06IHtcbiAgYXR0cmlidXRlOiBzdHJpbmc7XG4gIHZhbHVlOiB1bmtub3duO1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICBpbmxpbmU/OiBib29sZWFuO1xuICBjb250ZXh0PzogRGlzcGxheUNvbnRleHQ7XG59KSA9PiB7XG4gIGNvbnN0IGRlY3J5cHRDdHggPSB1c2VDb250ZXh0KERlY3J5cHRDbGlja0NvbnRleHQpO1xuICBjb25zdCBzZWN0aW9uT3BlblJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZVNlY3Rpb25PcGVuQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG9wZW46IGJvb2xlYW4pID0+IHtcbiAgICBzZWN0aW9uT3BlblJlZi5jdXJyZW50ID0gb3BlbjtcbiAgfSwgW10pO1xuICBjb25zdCBsYWJlbCA9IGxvYWRpbmdTZWN0aW9uTGFiZWxzW2F0dHJpYnV0ZSBhcyBBdHRyaWJ1dGVLZXldO1xuICBpZiAoaXNMb2FkaW5nICYmIGxhYmVsICYmICFoYXNEaXNwbGF5Q29udGVudCh2YWx1ZSkpIHtcbiAgICBpZiAoZGVjcnlwdEN0eD8uaGFzRW5jcnlwdGVkRGF0YSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPENvbGxhcHNpYmxlXG4gICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgIGRlZmF1bHRPcGVuPXthdHRyaWJ1dGUgPT09ICdldmVudERhdGEnIHx8IHNlY3Rpb25PcGVuUmVmLmN1cnJlbnR9XG4gICAgICAgICAgb25PcGVuQ2hhbmdlPXtoYW5kbGVTZWN0aW9uT3BlbkNoYW5nZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxFbmNyeXB0ZWRGaWVsZEJsb2NrIC8+XG4gICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gPENvbGxhcHNpYmxlIGxhYmVsPXtsYWJlbH0gLz47XG4gIH1cblxuICBjb25zdCBkaXNwbGF5Rm4gPVxuICAgIGF0dHJpYnV0ZVRvRGlzcGxheUZuW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgYXR0cmlidXRlVG9EaXNwbGF5Rm5dO1xuICBpZiAoIWRpc3BsYXlGbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlGbih2YWx1ZSwge1xuICAgIC4uLmNvbnRleHQsXG4gICAgc2VjdGlvbk9wZW46IHNlY3Rpb25PcGVuUmVmLmN1cnJlbnQsXG4gICAgb25TZWN0aW9uT3BlbkNoYW5nZTogaGFuZGxlU2VjdGlvbk9wZW5DaGFuZ2UsXG4gIH0pO1xuICBpZiAoIWRpc3BsYXlWYWx1ZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGlubGluZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjVcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsxMXB4XSBmb250LW1lZGl1bVwiXG4gICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19XG4gICAgICAgID5cbiAgICAgICAgICB7YXR0cmlidXRlfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtWzExcHhdXCIgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTEwMDApJyB9fT5cbiAgICAgICAgICB7ZGlzcGxheVZhbHVlfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgaWYgKHNlbGZIZWFkZXJlZEF0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZSkpIHtcbiAgICByZXR1cm4gPD57ZGlzcGxheVZhbHVlfTwvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAge3R5cGVvZiBpc0xvYWRpbmcgPT09ICdib29sZWFuJyAmJiBpc0xvYWRpbmcgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC05IHJpZ2h0LTRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhbmltYXRlLXNwaW4gcm91bmRlZC1mdWxsIGgtNCB3LTQgYm9yZGVyLWItMlwiXG4gICAgICAgICAgICBzdHlsZT17eyBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktOTAwKScgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8ZGl2IGtleT17YXR0cmlidXRlfSBjbGFzc05hbWU9XCJteS0yIGZsZXggZmxleC1jb2wgZ2FwLTBcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sYWJlbC0xNCB0ZXh0LWdyYXktMTAwMCBmb250LW1lZGl1bSBmaXJzdC1sZXR0ZXI6dXBwZXJjYXNlXCI+XG4gICAgICAgICAge2F0dHJpYnV0ZX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTJcIlxuICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHtkaXNwbGF5VmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IEF0dHJpYnV0ZVBhbmVsID0gKHtcbiAgZGF0YSxcbiAgbW9kdWxlU3BlY2lmaWVyLFxuICBtb2R1bGVTb3VyY2VVcmwsXG4gIGlzTG9hZGluZyxcbiAgZXJyb3IsXG4gIGV4cGlyZWRBdCxcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgb25EZWNyeXB0LFxuICBpc0RlY3J5cHRpbmcgPSBmYWxzZSxcbiAgaXNEZWNyeXB0RGlzYWJsZWQgPSBmYWxzZSxcbiAgZGVjcnlwdERpc2FibGVkUmVhc29uLFxuICByZXNvdXJjZSxcbn06IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1vZHVsZVNwZWNpZmllcj86IHN0cmluZztcbiAgbW9kdWxlU291cmNlVXJsPzogc3RyaW5nO1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICBlcnJvcj86IEVycm9yO1xuICBleHBpcmVkQXQ/OiBzdHJpbmcgfCBEYXRlO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhIHN0cmVhbSByZWZlcmVuY2UgaXMgY2xpY2tlZCAqL1xuICBvblN0cmVhbUNsaWNrPzogKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgcnVuIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uUnVuQ2xpY2s/OiAocnVuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYW4gZW5jcnlwdGVkIG1hcmtlciBpcyBjbGlja2VkICh0cmlnZ2VycyBkZWNyeXB0aW9uKSAqL1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciBkZWNyeXB0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBkZWNyeXB0aW9uIGlzIHVuYXZhaWxhYmxlICovXG4gIGlzRGVjcnlwdERpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEV4cGxhaW5zIHdoeSBkZWNyeXB0aW9uIGlzIHVuYXZhaWxhYmxlICovXG4gIGRlY3J5cHREaXNhYmxlZFJlYXNvbj86IHN0cmluZztcbiAgLyoqIFJlc291cmNlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIHNwYW4sIHVzZWQgdG8gc2hvdyB0YXJnZXRlZCBsb2FkaW5nIHNrZWxldG9ucy4gKi9cbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG59KSA9PiB7XG4gIC8vIEV4dHJhY3Qgd29ya2Zsb3dDb3JlVmVyc2lvbiBmcm9tIGV4ZWN1dGlvbkNvbnRleHQgZm9yIGRpc3BsYXlcbiAgY29uc3QgZGlzcGxheURhdGEgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7IC4uLmRhdGEgfTtcbiAgICBjb25zdCBleGVjQ3R4ID0gZGF0YS5leGVjdXRpb25Db250ZXh0IGFzXG4gICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZXhlY0N0eD8ud29ya2Zsb3dDb3JlVmVyc2lvbikge1xuICAgICAgcmVzdWx0LndvcmtmbG93Q29yZVZlcnNpb24gPSBleGVjQ3R4LndvcmtmbG93Q29yZVZlcnNpb247XG4gICAgfVxuICAgIGlmIChtb2R1bGVTcGVjaWZpZXIpIHtcbiAgICAgIHJlc3VsdC5tb2R1bGVTcGVjaWZpZXIgPSBtb2R1bGVTcGVjaWZpZXI7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YS5zdGVwTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlc3VsdC5tb2R1bGVTcGVjaWZpZXIgPSBkYXRhLnN0ZXBOYW1lO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEud29ya2Zsb3dOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzdWx0Lm1vZHVsZVNwZWNpZmllciA9IGRhdGEud29ya2Zsb3dOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBbZGF0YSwgbW9kdWxlU3BlY2lmaWVyXSk7XG4gIGNvbnN0IGhhc0V4cGlyZWQgPSBleHBpcmVkQXQgIT0gbnVsbCAmJiBuZXcgRGF0ZShleHBpcmVkQXQpIDwgbmV3IERhdGUoKTtcbiAgY29uc3QgYmFzaWNBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMoZGlzcGxheURhdGEpXG4gICAgLmZpbHRlcigoa2V5KSA9PiAhcmVzb2x2YWJsZUF0dHJpYnV0ZXMuaW5jbHVkZXMoa2V5KSlcbiAgICAuc29ydChzb3J0QnlBdHRyaWJ1dGVPcmRlcik7XG4gIGNvbnN0IHJlc29sdmVkQXR0cmlidXRlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHByZXNlbnQgPSBPYmplY3Qua2V5cyhkaXNwbGF5RGF0YSlcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4gcmVzb2x2YWJsZUF0dHJpYnV0ZXMuaW5jbHVkZXMoa2V5KSlcbiAgICAgIC5zb3J0KHNvcnRCeUF0dHJpYnV0ZU9yZGVyKTtcblxuICAgIGlmICghaXNMb2FkaW5nKSByZXR1cm4gcHJlc2VudDtcblxuICAgIGlmIChyZXNvdXJjZSA9PT0gJ3NsZWVwJykgcmV0dXJuIHByZXNlbnQ7XG5cbiAgICBjb25zdCBsb2FkaW5nUGxhY2Vob2xkZXJzID0gWydpbnB1dCcsICdvdXRwdXQnXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBsb2FkaW5nUGxhY2Vob2xkZXJzKSB7XG4gICAgICBpZiAoIXByZXNlbnQuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBwcmVzZW50LnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZXNlbnQuc29ydChzb3J0QnlBdHRyaWJ1dGVPcmRlcik7XG4gIH0sIFtkaXNwbGF5RGF0YSwgaXNMb2FkaW5nLCByZXNvdXJjZV0pO1xuXG4gIC8vIEZpbHRlciBvdXQgYXR0cmlidXRlcyB0aGF0IHJldHVybiBudWxsXG4gIGNvbnN0IHZpc2libGVCYXNpY0F0dHJpYnV0ZXMgPSBiYXNpY0F0dHJpYnV0ZXMuZmlsdGVyKChhdHRyaWJ1dGUpID0+IHtcbiAgICBjb25zdCBkaXNwbGF5Rm4gPVxuICAgICAgYXR0cmlidXRlVG9EaXNwbGF5Rm5bYXR0cmlidXRlIGFzIGtleW9mIHR5cGVvZiBhdHRyaWJ1dGVUb0Rpc3BsYXlGbl07XG4gICAgaWYgKCFkaXNwbGF5Rm4pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSBkaXNwbGF5Rm4oXG4gICAgICBkaXNwbGF5RGF0YVthdHRyaWJ1dGUgYXMga2V5b2YgdHlwZW9mIGRpc3BsYXlEYXRhXVxuICAgICk7XG4gICAgcmV0dXJuIGRpc3BsYXlWYWx1ZSAhPT0gbnVsbDtcbiAgfSk7XG5cbiAgLy8gS2VlcCBgbW9kdWxlU3BlY2lmaWVyYCBpbW1lZGlhdGVseSBhZnRlciBgd29ya2Zsb3dOYW1lYCBvciBgc3RlcE5hbWVgLlxuICBjb25zdCBvcmRlcmVkQmFzaWNBdHRyaWJ1dGVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IFsuLi52aXNpYmxlQmFzaWNBdHRyaWJ1dGVzXTtcbiAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXJJbmRleCA9IGF0dHJpYnV0ZXMuaW5kZXhPZignbW9kdWxlU3BlY2lmaWVyJyk7XG4gICAgaWYgKG1vZHVsZVNwZWNpZmllckluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgYXR0cmlidXRlcy5zcGxpY2UobW9kdWxlU3BlY2lmaWVySW5kZXgsIDEpO1xuICAgIGNvbnN0IHdvcmtmbG93TmFtZUluZGV4ID0gYXR0cmlidXRlcy5pbmRleE9mKCd3b3JrZmxvd05hbWUnKTtcbiAgICBpZiAod29ya2Zsb3dOYW1lSW5kZXggIT09IC0xKSB7XG4gICAgICBhdHRyaWJ1dGVzLnNwbGljZSh3b3JrZmxvd05hbWVJbmRleCArIDEsIDAsICdtb2R1bGVTcGVjaWZpZXInKTtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIGNvbnN0IHN0ZXBOYW1lSW5kZXggPSBhdHRyaWJ1dGVzLmluZGV4T2YoJ3N0ZXBOYW1lJyk7XG4gICAgaWYgKHN0ZXBOYW1lSW5kZXggIT09IC0xKSB7XG4gICAgICBhdHRyaWJ1dGVzLnNwbGljZShzdGVwTmFtZUluZGV4ICsgMSwgMCwgJ21vZHVsZVNwZWNpZmllcicpO1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgYXR0cmlidXRlcy51bnNoaWZ0KCdtb2R1bGVTcGVjaWZpZXInKTtcbiAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgfSwgW3Zpc2libGVCYXNpY0F0dHJpYnV0ZXNdKTtcblxuICAvLyBNZW1vaXplIGNvbnRleHQgb2JqZWN0IHRvIGF2b2lkIG9iamVjdCByZWNvbnN0cnVjdGlvbiBvbiByZW5kZXJcbiAgY29uc3QgZGlzcGxheUNvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBzdGVwTmFtZTogZGlzcGxheURhdGEuc3RlcE5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIH0pLFxuICAgIFtkaXNwbGF5RGF0YS5zdGVwTmFtZV1cbiAgKTtcbiAgY29uc3Qgb3V0ZXJEZWNyeXB0Q3R4ID0gdXNlQ29udGV4dChEZWNyeXB0Q2xpY2tDb250ZXh0KTtcbiAgY29uc3QgZGVjcnlwdFZhbHVlID0gb25EZWNyeXB0XG4gICAgPyB7XG4gICAgICAgIG9uRGVjcnlwdCxcbiAgICAgICAgaXNEZWNyeXB0aW5nLFxuICAgICAgICBpc0RlY3J5cHREaXNhYmxlZCxcbiAgICAgICAgZGVjcnlwdERpc2FibGVkUmVhc29uLFxuICAgICAgICBoYXNFbmNyeXB0ZWREYXRhOiBvdXRlckRlY3J5cHRDdHg/Lmhhc0VuY3J5cHRlZERhdGEsXG4gICAgICB9XG4gICAgOiBvdXRlckRlY3J5cHRDdHg7XG5cbiAgcmV0dXJuIChcbiAgICA8Q29udGV4dENhcmRQcm92aWRlcj5cbiAgICAgIDxSdW5DbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e29uUnVuQ2xpY2t9PlxuICAgICAgICA8U3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblN0cmVhbUNsaWNrfT5cbiAgICAgICAgICA8RGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17ZGVjcnlwdFZhbHVlfT5cbiAgICAgICAgICAgIHt2aXNpYmxlQmFzaWNBdHRyaWJ1dGVzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8Q29sbGFwc2libGVSb290IGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgICAgIDxDb2xsYXBzaWJsZVRyaWdnZXI+TWV0YWRhdGE8L0NvbGxhcHNpYmxlVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8Q29sbGFwc2libGVDb250ZW50IGNsYXNzTmFtZT1cIm10LTAgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIHtvcmRlcmVkQmFzaWNBdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gYXR0cmlidXRlVG9EaXNwbGF5Rm5bXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgYXMga2V5b2YgdHlwZW9mIGF0dHJpYnV0ZVRvRGlzcGxheUZuXG4gICAgICAgICAgICAgICAgICAgICAgXT8uKGRpc3BsYXlEYXRhW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgZGlzcGxheURhdGFdKTtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0NvcHlhYmxlQmFzaWNBdHRyaWJ1dGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgY29weWFibGVCYXNpY0F0dHJpYnV0ZXMuaGFzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgYXMgQXR0cmlidXRlS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICApICYmIHR5cGVvZiBkaXNwbGF5VmFsdWUgPT09ICdzdHJpbmcnO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gZ2V0QXR0cmlidXRlRGlzcGxheU5hbWUoYXR0cmlidXRlKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8RGV0YWlsTW9ub0tleVZhbHVlUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YXR0cmlidXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtkaXNwbGF5VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlUZXh0PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvcHlhYmxlQmFzaWNBdHRyaWJ1dGUgPyBkaXNwbGF5VmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgPT09ICdtb2R1bGVTcGVjaWZpZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1vZHVsZVNvdXJjZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAge2lzTG9hZGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlID09PSAnc2xlZXAnICYmXG4gICAgICAgICAgICAgICAgICAgICAgIWRpc3BsYXlEYXRhLnJlc3VtZUF0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0zIHB5LTAuNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEzIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC00IHctWzU1JV1cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICAgICAgICA8L0NvbGxhcHNpYmxlUm9vdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7ZXJyb3IgPyAoXG4gICAgICAgICAgICAgIDxFcnJvckNhcmRcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkZhaWxlZCB0byBsb2FkIHJlc291cmNlIGRldGFpbHNcIlxuICAgICAgICAgICAgICAgIGRldGFpbHM9e2Vycm9yLm1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXktNFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogaGFzRXhwaXJlZCA/IChcbiAgICAgICAgICAgICAgPEV4cGlyZWREYXRhTWVzc2FnZSAvPlxuICAgICAgICAgICAgKSA6IHJlc29sdmVkQXR0cmlidXRlcy5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICByZXNvbHZlZEF0dHJpYnV0ZXMubWFwKChhdHRyaWJ1dGUpID0+IChcbiAgICAgICAgICAgICAgICA8QXR0cmlidXRlQmxvY2tcbiAgICAgICAgICAgICAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAga2V5PXthdHRyaWJ1dGV9XG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU9e2F0dHJpYnV0ZX1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtkaXNwbGF5RGF0YVthdHRyaWJ1dGUgYXMga2V5b2YgdHlwZW9mIGRpc3BsYXlEYXRhXX1cbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ9e2Rpc3BsYXlDb250ZXh0fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L0RlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvU3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgPC9SdW5DbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9Db250ZXh0Q2FyZFByb3ZpZGVyPlxuICApO1xufTtcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"copyable-data-block.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/copyable-data-block.tsx"],"names":[],"mappings":"AAcA,wBAAgB,kBAAkB,4CA8BjC;AAED,eAAO,MAAM,qBAAqB,GAAI,OAAO,OAAO,KAAG,MActD,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,2CAW5D"}
1
+ {"version":3,"file":"copyable-data-block.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/copyable-data-block.tsx"],"names":[],"mappings":"AAcA,wBAAgB,kBAAkB,4CAqCjC;AAED,eAAO,MAAM,qBAAqB,GAAI,OAAO,OAAO,KAAG,MActD,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,2CAW5D"}
@@ -12,7 +12,7 @@ const encryptedPlaceholderPreview = `{
12
12
  }`;
13
13
  export function EncryptedDataBlock() {
14
14
  const ctx = useContext(DecryptClickContext);
15
- return (_jsxs("div", { className: "relative min-h-20 overflow-hidden rounded-md border border-gray-alpha-400 bg-background-100", children: [_jsx("pre", { "aria-hidden": "true", className: "pointer-events-none m-0 select-none p-3 font-mono text-label-12 text-gray-900 blur-[4px]", children: encryptedPlaceholderPreview }), _jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: ctx ? (_jsxs(Button, { onClick: ctx.onDecrypt, disabled: ctx.isDecrypting, size: "xs", children: [ctx.isDecrypting ? (_jsx(Spinner, { size: 10 })) : (_jsx(Lock, { className: "h-3 w-3" })), _jsx("span", { children: "Decrypt" })] })) : (_jsxs("span", { className: "inline-flex items-center gap-1 rounded border border-gray-alpha-400 bg-gray-100 px-1.5 py-0.5 text-button-12 font-medium text-gray-700", children: [_jsx(Lock, { className: "h-3 w-3" }), "Encrypted"] })) })] }));
15
+ return (_jsxs("div", { className: "relative min-h-20 overflow-hidden rounded-md border border-gray-alpha-400 bg-background-100", children: [_jsx("pre", { "aria-hidden": "true", className: "pointer-events-none m-0 select-none p-3 font-mono text-label-12 text-gray-900 blur-[4px]", children: encryptedPlaceholderPreview }), _jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: ctx ? (_jsxs(Button, { onClick: ctx.onDecrypt, disabled: ctx.isDecrypting || ctx.isDecryptDisabled, title: ctx.isDecryptDisabled ? ctx.decryptDisabledReason : undefined, size: "xs", children: [ctx.isDecrypting ? (_jsx(Spinner, { size: 10 })) : (_jsx(Lock, { className: "h-3 w-3" })), _jsx("span", { children: "Decrypt" })] })) : (_jsxs("span", { className: "inline-flex items-center gap-1 rounded border border-gray-alpha-400 bg-gray-100 px-1.5 py-0.5 text-button-12 font-medium text-gray-700", children: [_jsx(Lock, { className: "h-3 w-3" }), "Encrypted"] })) })] }));
16
16
  }
17
17
  export const serializeForClipboard = (value) => {
18
18
  if (typeof value === 'string')
@@ -32,4 +32,4 @@ export const serializeForClipboard = (value) => {
32
32
  export function CopyableDataBlock({ data }) {
33
33
  return (_jsxs("div", { className: "relative overflow-x-auto rounded-md border border-gray-alpha-400 p-3", children: [_jsx(CopyButton, { copyText: serializeForClipboard(data), ariaLabel: "Copy data", className: "absolute right-2 top-2 z-10 flex h-6 w-6 items-center justify-center rounded-md border border-gray-alpha-400 !bg-background-100 p-0 text-gray-900 transition-transform transition-colors duration-100 hover:bg-gray-200 active:scale-95 active:bg-gray-300" }), _jsx(DataInspector, { data: data })] }));
34
34
  }
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weWFibGUtZGF0YS1ibG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvY29weWFibGUtZGF0YS1ibG9jay50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4QyxNQUFNLDJCQUEyQixHQUFHOzs7RUFHbEMsQ0FBQztBQUVILE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFNUMsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFDLDZGQUE2RixhQUMxRyw2QkFDYyxNQUFNLEVBQ2xCLFNBQVMsRUFBQywwRkFBMEYsWUFFbkcsMkJBQTJCLEdBQ3hCLEVBQ04sY0FBSyxTQUFTLEVBQUMsbURBQW1ELFlBQy9ELEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FDTCxNQUFDLE1BQU0sSUFBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsSUFBSSxhQUNsRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUNsQixLQUFDLE9BQU8sSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLENBQ3RCLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxJQUFJLElBQUMsU0FBUyxFQUFDLFNBQVMsR0FBRyxDQUM3QixFQUNELHFDQUFvQixJQUNiLENBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FDRixnQkFBTSxTQUFTLEVBQUMsd0lBQXdJLGFBQ3RKLEtBQUMsSUFBSSxJQUFDLFNBQVMsRUFBQyxTQUFTLEdBQUcsaUJBRXZCLENBQ1IsR0FDRyxJQUNGLENBQ1AsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQWMsRUFBVSxFQUFFO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVDLElBQ0UsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixPQUFPLEtBQUssS0FBSyxTQUFTO1FBQzFCLEtBQUssS0FBSyxJQUFJLEVBQ2QsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxFQUFFLElBQUksRUFBcUI7SUFDM0QsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFDLHNFQUFzRSxhQUNuRixLQUFDLFVBQVUsSUFDVCxRQUFRLEVBQUUscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQ3JDLFNBQVMsRUFBQyxXQUFXLEVBQ3JCLFNBQVMsRUFBQyw0UEFBNFAsR0FDdFEsRUFDRixLQUFDLGFBQWEsSUFBQyxJQUFJLEVBQUUsSUFBSSxHQUFJLElBQ3pCLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IExvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENvcHlCdXR0b24gfSBmcm9tICcuLi90cmFjZS12aWV3ZXIvY29tcG9uZW50cy9jb3B5LWJ1dHRvbic7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi91aS9idXR0b24nO1xuaW1wb3J0IHsgRGF0YUluc3BlY3RvciwgRGVjcnlwdENsaWNrQ29udGV4dCB9IGZyb20gJy4uL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuLi91aS9zcGlubmVyJztcblxuY29uc3QgZW5jcnlwdGVkUGxhY2Vob2xkZXJQcmV2aWV3ID0gYHtcbiAgXCJpbnB1dFwiOiBcIltlbmNyeXB0ZWRdXCIsXG4gIFwicmVzdWx0XCI6IFwiW2VuY3J5cHRlZF1cIlxufWA7XG5cbmV4cG9ydCBmdW5jdGlvbiBFbmNyeXB0ZWREYXRhQmxvY2soKSB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIG1pbi1oLTIwIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItZ3JheS1hbHBoYS00MDAgYmctYmFja2dyb3VuZC0xMDBcIj5cbiAgICAgIDxwcmVcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgY2xhc3NOYW1lPVwicG9pbnRlci1ldmVudHMtbm9uZSBtLTAgc2VsZWN0LW5vbmUgcC0zIGZvbnQtbW9ubyB0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDAgYmx1ci1bNHB4XVwiXG4gICAgICA+XG4gICAgICAgIHtlbmNyeXB0ZWRQbGFjZWhvbGRlclByZXZpZXd9XG4gICAgICA8L3ByZT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICB7Y3R4ID8gKFxuICAgICAgICAgIDxCdXR0b24gb25DbGljaz17Y3R4Lm9uRGVjcnlwdH0gZGlzYWJsZWQ9e2N0eC5pc0RlY3J5cHRpbmd9IHNpemU9XCJ4c1wiPlxuICAgICAgICAgICAge2N0eC5pc0RlY3J5cHRpbmcgPyAoXG4gICAgICAgICAgICAgIDxTcGlubmVyIHNpemU9ezEwfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExvY2sgY2xhc3NOYW1lPVwiaC0zIHctM1wiIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPHNwYW4+RGVjcnlwdDwvc3Bhbj5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWdyYXktMTAwIHB4LTEuNSBweS0wLjUgdGV4dC1idXR0b24tMTIgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgPExvY2sgY2xhc3NOYW1lPVwiaC0zIHctM1wiIC8+XG4gICAgICAgICAgICBFbmNyeXB0ZWRcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZUZvckNsaXBib2FyZCA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWU7XG4gIGlmIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHxcbiAgICB2YWx1ZSA9PT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ29weWFibGVEYXRhQmxvY2soeyBkYXRhIH06IHsgZGF0YTogdW5rbm93biB9KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBvdmVyZmxvdy14LWF1dG8gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIHAtM1wiPlxuICAgICAgPENvcHlCdXR0b25cbiAgICAgICAgY29weVRleHQ9e3NlcmlhbGl6ZUZvckNsaXBib2FyZChkYXRhKX1cbiAgICAgICAgYXJpYUxhYmVsPVwiQ29weSBkYXRhXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMiB0b3AtMiB6LTEwIGZsZXggaC02IHctNiBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwICFiZy1iYWNrZ3JvdW5kLTEwMCBwLTAgdGV4dC1ncmF5LTkwMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xMDAgaG92ZXI6YmctZ3JheS0yMDAgYWN0aXZlOnNjYWxlLTk1IGFjdGl2ZTpiZy1ncmF5LTMwMFwiXG4gICAgICAvPlxuICAgICAgPERhdGFJbnNwZWN0b3IgZGF0YT17ZGF0YX0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weWFibGUtZGF0YS1ibG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvY29weWFibGUtZGF0YS1ibG9jay50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4QyxNQUFNLDJCQUEyQixHQUFHOzs7RUFHbEMsQ0FBQztBQUVILE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFNUMsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFDLDZGQUE2RixhQUMxRyw2QkFDYyxNQUFNLEVBQ2xCLFNBQVMsRUFBQywwRkFBMEYsWUFFbkcsMkJBQTJCLEdBQ3hCLEVBQ04sY0FBSyxTQUFTLEVBQUMsbURBQW1ELFlBQy9ELEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FDTCxNQUFDLE1BQU0sSUFDTCxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFDdEIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLGlCQUFpQixFQUNuRCxLQUFLLEVBQ0gsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFFL0QsSUFBSSxFQUFDLElBQUksYUFFUixHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUNsQixLQUFDLE9BQU8sSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLENBQ3RCLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxJQUFJLElBQUMsU0FBUyxFQUFDLFNBQVMsR0FBRyxDQUM3QixFQUNELHFDQUFvQixJQUNiLENBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FDRixnQkFBTSxTQUFTLEVBQUMsd0lBQXdJLGFBQ3RKLEtBQUMsSUFBSSxJQUFDLFNBQVMsRUFBQyxTQUFTLEdBQUcsaUJBRXZCLENBQ1IsR0FDRyxJQUNGLENBQ1AsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQWMsRUFBVSxFQUFFO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVDLElBQ0UsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixPQUFPLEtBQUssS0FBSyxTQUFTO1FBQzFCLEtBQUssS0FBSyxJQUFJLEVBQ2QsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxFQUFFLElBQUksRUFBcUI7SUFDM0QsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFDLHNFQUFzRSxhQUNuRixLQUFDLFVBQVUsSUFDVCxRQUFRLEVBQUUscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQ3JDLFNBQVMsRUFBQyxXQUFXLEVBQ3JCLFNBQVMsRUFBQyw0UEFBNFAsR0FDdFEsRUFDRixLQUFDLGFBQWEsSUFBQyxJQUFJLEVBQUUsSUFBSSxHQUFJLElBQ3pCLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IExvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENvcHlCdXR0b24gfSBmcm9tICcuLi90cmFjZS12aWV3ZXIvY29tcG9uZW50cy9jb3B5LWJ1dHRvbic7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi91aS9idXR0b24nO1xuaW1wb3J0IHsgRGF0YUluc3BlY3RvciwgRGVjcnlwdENsaWNrQ29udGV4dCB9IGZyb20gJy4uL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuLi91aS9zcGlubmVyJztcblxuY29uc3QgZW5jcnlwdGVkUGxhY2Vob2xkZXJQcmV2aWV3ID0gYHtcbiAgXCJpbnB1dFwiOiBcIltlbmNyeXB0ZWRdXCIsXG4gIFwicmVzdWx0XCI6IFwiW2VuY3J5cHRlZF1cIlxufWA7XG5cbmV4cG9ydCBmdW5jdGlvbiBFbmNyeXB0ZWREYXRhQmxvY2soKSB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIG1pbi1oLTIwIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItZ3JheS1hbHBoYS00MDAgYmctYmFja2dyb3VuZC0xMDBcIj5cbiAgICAgIDxwcmVcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgY2xhc3NOYW1lPVwicG9pbnRlci1ldmVudHMtbm9uZSBtLTAgc2VsZWN0LW5vbmUgcC0zIGZvbnQtbW9ubyB0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDAgYmx1ci1bNHB4XVwiXG4gICAgICA+XG4gICAgICAgIHtlbmNyeXB0ZWRQbGFjZWhvbGRlclByZXZpZXd9XG4gICAgICA8L3ByZT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICB7Y3R4ID8gKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9e2N0eC5vbkRlY3J5cHR9XG4gICAgICAgICAgICBkaXNhYmxlZD17Y3R4LmlzRGVjcnlwdGluZyB8fCBjdHguaXNEZWNyeXB0RGlzYWJsZWR9XG4gICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgIGN0eC5pc0RlY3J5cHREaXNhYmxlZCA/IGN0eC5kZWNyeXB0RGlzYWJsZWRSZWFzb24gOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge2N0eC5pc0RlY3J5cHRpbmcgPyAoXG4gICAgICAgICAgICAgIDxTcGlubmVyIHNpemU9ezEwfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExvY2sgY2xhc3NOYW1lPVwiaC0zIHctM1wiIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPHNwYW4+RGVjcnlwdDwvc3Bhbj5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWdyYXktMTAwIHB4LTEuNSBweS0wLjUgdGV4dC1idXR0b24tMTIgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgPExvY2sgY2xhc3NOYW1lPVwiaC0zIHctM1wiIC8+XG4gICAgICAgICAgICBFbmNyeXB0ZWRcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZUZvckNsaXBib2FyZCA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWU7XG4gIGlmIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHxcbiAgICB2YWx1ZSA9PT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgMik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ29weWFibGVEYXRhQmxvY2soeyBkYXRhIH06IHsgZGF0YTogdW5rbm93biB9KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBvdmVyZmxvdy14LWF1dG8gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIHAtM1wiPlxuICAgICAgPENvcHlCdXR0b25cbiAgICAgICAgY29weVRleHQ9e3NlcmlhbGl6ZUZvckNsaXBib2FyZChkYXRhKX1cbiAgICAgICAgYXJpYUxhYmVsPVwiQ29weSBkYXRhXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMiB0b3AtMiB6LTEwIGZsZXggaC02IHctNiBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwICFiZy1iYWNrZ3JvdW5kLTEwMCBwLTAgdGV4dC1ncmF5LTkwMCB0cmFuc2l0aW9uLXRyYW5zZm9ybSB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0xMDAgaG92ZXI6YmctZ3JheS0yMDAgYWN0aXZlOnNjYWxlLTk1IGFjdGl2ZTpiZy1ncmF5LTMwMFwiXG4gICAgICAvPlxuICAgICAgPERhdGFJbnNwZWN0b3IgZGF0YT17ZGF0YX0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
@@ -29,10 +29,10 @@ export interface SelectedSpanInfo {
29
29
  /**
30
30
  * Panel component for workflow traces that displays entity details.
31
31
  *
32
- * This component is rendered OUTSIDE the trace viewer context it
32
+ * This component is rendered OUTSIDE the trace viewer context: it
33
33
  * receives all data via props rather than reading from context.
34
34
  */
35
- export declare function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting, selectedSpan, showSeparateEventOccurrenceTimestamps, getModuleSourceUrl, }: {
35
+ export declare function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting, isDecryptDisabled, decryptDisabledReason, selectedSpan, showSeparateEventOccurrenceTimestamps, getModuleSourceUrl, }: {
36
36
  run: WorkflowRun;
37
37
  /** Callback when a stream reference is clicked */
38
38
  onStreamClick?: (streamId: string) => void;
@@ -53,6 +53,10 @@ export declare function EntityDetailPanel({ run, onStreamClick, onRunClick, fetc
53
53
  onDecrypt?: () => void;
54
54
  /** Whether the encryption key is currently being fetched */
55
55
  isDecrypting?: boolean;
56
+ /** Whether decryption is unavailable */
57
+ isDecryptDisabled?: boolean;
58
+ /** Explains why decryption is unavailable */
59
+ decryptDisabledReason?: string;
56
60
  /** Info about the currently selected span from the trace viewer */
57
61
  selectedSpan: SelectedSpanInfo | null;
58
62
  /** Show occurredAt separately instead of folding it into the Created timestamp. */
@@ -1 +1 @@
1
- {"version":3,"file":"entity-detail-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/entity-detail-panel.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,IAAI,EAET,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,4BAA4B,CAAC;AAOpC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;IACpB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACzC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACb,SAAS,EACT,YAAoB,EACpB,YAAY,EACZ,qCAA6C,EAC7C,kBAAkB,GACnB,EAAE;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,EAAE,eAAe,CAAC;IACjC,gDAAgD;IAChD,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,sEAAsE;IACtE,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5D,iDAAiD;IACjD,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAK,MAAM,GAAG,SAAS,CAAC;CAC1B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA0T3B"}
1
+ {"version":3,"file":"entity-detail-panel.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/entity-detail-panel.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,IAAI,EAET,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EACL,KAAK,eAAe,EAErB,MAAM,4BAA4B,CAAC;AAOpC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kFAAkF;IAClF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;IACpB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACzC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACb,SAAS,EACT,YAAoB,EACpB,iBAAyB,EACzB,qBAAqB,EACrB,YAAY,EACZ,qCAA6C,EAC7C,kBAAkB,GACnB,EAAE;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,eAAe,EAAE,eAAe,CAAC;IACjC,gDAAgD;IAChD,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,sEAAsE;IACtE,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5D,iDAAiD;IACjD,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,sFAAsF;IACtF,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mEAAmE;IACnE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAK,MAAM,GAAG,SAAS,CAAC;CAC1B,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAoU3B"}