@workflow/web-shared 5.0.0-beta.21 → 5.0.0-beta.23

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 (39) hide show
  1. package/dist/components/index.d.ts +1 -0
  2. package/dist/components/index.d.ts.map +1 -1
  3. package/dist/components/index.js +2 -1
  4. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.d.ts +5 -0
  5. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
  6. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.js +55 -0
  7. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.module.css +20 -0
  8. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
  9. package/dist/components/new-trace-viewer/trace-viewer.js +4 -4
  10. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  11. package/dist/components/sidebar/attribute-panel.js +4 -1
  12. package/dist/components/sidebar/copyable-data-block.d.ts +1 -0
  13. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  14. package/dist/components/sidebar/copyable-data-block.js +2 -2
  15. package/dist/components/ui/data-inspector.d.ts +6 -6
  16. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  17. package/dist/components/ui/data-inspector.js +234 -91
  18. package/dist/components/ui/data-inspector.styles.d.ts +29 -0
  19. package/dist/components/ui/data-inspector.styles.d.ts.map +1 -0
  20. package/dist/components/ui/data-inspector.styles.js +95 -0
  21. package/dist/components/ui/kbd.d.ts +9 -5
  22. package/dist/components/ui/kbd.d.ts.map +1 -1
  23. package/dist/components/ui/kbd.js +22 -3
  24. package/dist/lib/hydration.js +3 -3
  25. package/package.json +3 -4
  26. package/src/components/index.ts +1 -0
  27. package/src/components/new-trace-viewer/components/trace-shortcut-helper.module.css +20 -0
  28. package/src/components/new-trace-viewer/components/trace-shortcut-helper.tsx +116 -0
  29. package/src/components/new-trace-viewer/trace-viewer.tsx +9 -4
  30. package/src/components/sidebar/attribute-panel.tsx +4 -0
  31. package/src/components/sidebar/copyable-data-block.tsx +1 -1
  32. package/src/components/ui/data-inspector.styles.ts +96 -0
  33. package/src/components/ui/data-inspector.tsx +492 -186
  34. package/src/components/ui/kbd.tsx +33 -11
  35. package/src/lib/hydration.ts +2 -2
  36. package/dist/components/ui/inspector-theme.d.ts +0 -95
  37. package/dist/components/ui/inspector-theme.d.ts.map +0 -1
  38. package/dist/components/ui/inspector-theme.js +0 -82
  39. package/src/components/ui/inspector-theme.ts +0 -110
@@ -126,6 +126,7 @@ const attributeOrder = [
126
126
  'projectId',
127
127
  'environment',
128
128
  'executionContext',
129
+ 'occurredAt',
129
130
  'createdAt',
130
131
  'startedAt',
131
132
  'updatedAt',
@@ -164,6 +165,7 @@ const attributeDisplayNames = {
164
165
  deploymentId: 'Deployment ID',
165
166
  specVersion: 'Spec Version',
166
167
  workflowCoreVersion: '@workflow/core version',
168
+ occurredAt: 'Occurred',
167
169
  createdAt: 'Created',
168
170
  startedAt: 'Started',
169
171
  updatedAt: 'Updated',
@@ -268,6 +270,7 @@ const attributeToDisplayFn = {
268
270
  return _jsx(RunAttributesCard, { attributes: value });
269
271
  },
270
272
  // Dates — wrapped with TimestampTooltip showing UTC/local + relative time
273
+ occurredAt: timestampWithTooltipOrNull,
271
274
  createdAt: timestampWithTooltipOrNull,
272
275
  startedAt: timestampWithTooltipOrNull,
273
276
  updatedAt: (_value) => null,
@@ -511,4 +514,4 @@ export const AttributePanel = ({ data, moduleSpecifier, isLoading, error, expire
511
514
  return (_jsxs("div", { className: "flex items-center justify-between py-2", children: [_jsx("span", { className: "text-label-14 text-gray-900", children: getAttributeDisplayName(attribute) }), isCopyableBasicAttribute ? (_jsxs("div", { className: "flex min-w-0 max-w-[70%] items-center justify-end gap-1 text-[13px] font-mono text-gray-1000", title: displayValue, children: [_jsx(MiddleTruncate, { value: displayValue, className: "text-right", style: { gridTemplateColumns: 'minmax(0, 1fr)' } }), _jsx(CopyButton, { copyText: displayValue, ariaLabel: `Copy ${getAttributeDisplayName(attribute)}`, className: "shrink-0 -mr-1" })] })) : (_jsx("span", { className: "text-right text-label-13 font-mono", children: displayValue }))] }, attribute));
512
515
  }), isLoading && resource === 'sleep' && !displayData.resumeAt && (_jsx("div", { className: "py-1", children: _jsxs("div", { className: "flex min-h-[32px] items-center justify-between gap-4 rounded-sm px-2.5 py-1", children: [_jsx("span", { className: "text-[14px] first-letter:uppercase", style: { color: 'var(--ds-gray-700)' }, children: "resumeAt" }), _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 ? (_jsx(_Fragment, { children: resolvedAttributes.map((attribute) => (_jsx(AttributeBlock, { isLoading: isLoading, attribute: attribute, value: displayData[attribute], context: displayContext }, attribute))) })) : null] }) }) }) }));
513
516
  };
514
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2lkZWJhci9hdHRyaWJ1dGUtcGFuZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNoRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixrQkFBa0IsR0FDbkIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFB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QyxDQUNmLEtBQUMsa0JBQWtCLEtBQUcsQ0FDdkIsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbEMsNEJBQ0csa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUNyQyxLQUFDLGNBQWMsSUFDYixTQUFTLEVBQUUsU0FBUyxFQUVwQixTQUFTLEVBQUUsU0FBUyxFQUNwQixLQUFLLEVBQUUsV0FBVyxDQUFDLFNBQXFDLENBQUMsRUFDekQsT0FBTyxFQUFFLGNBQWMsSUFIbEIsU0FBUyxDQUlkLENBQ0gsQ0FBQyxHQUNELENBQ0osQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUNxQixHQUNILEdBQ0wsR0FDUCxDQUN2QixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB0eXBlIHsgRXZlbnQsIEhvb2ssIFN0ZXAsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB0eXBlIHsgTW9kZWxNZXNzYWdlIH0gZnJvbSAnYWknO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHR5cGUgeyBLZXlib2FyZEV2ZW50LCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0VuY3J5cHRlZE1hcmtlciwgaXNFeHBpcmVkTWFya2VyIH0gZnJvbSAnLi4vLi4vbGliL2h5ZHJhdGlvbic7XG5pbXBvcnQgeyBleHRyYWN0Q29udmVyc2F0aW9uLCBpc0RvU3RyZWFtU3RlcCB9IGZyb20gJy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgeyBDb3B5QnV0dG9uIH0gZnJvbSAnLi4vbmV3LXRyYWNlLXZpZXdlci9jb21wb25lbnRzL2NvcHktYnV0dG9uJztcbmltcG9ydCB7IE1pZGRsZVRydW5jYXRlIH0gZnJvbSAnLi4vbmV3LXRyYWNlLXZpZXdlci9jb21wb25lbnRzL21pZGRsZS10cnVuY2F0ZS9taWRkbGUtdHJ1bmNhdGUnO1xuaW1wb3J0IHsgQ29udGV4dENhcmRQcm92aWRlciB9IGZyb20gJy4uL3VpL2NvbnRleHQtY2FyZCc7XG5pbXBvcnQge1xuICBEZWNyeXB0Q2xpY2tDb250ZXh0LFxuICBSdW5DbGlja0NvbnRleHQsXG4gIFN0cmVhbUNsaWNrQ29udGV4dCxcbn0gZnJvbSAnLi4vdWkvZGF0YS1pbnNwZWN0b3InO1xuaW1wb3J0IHsgRXJyb3JDYXJkIH0gZnJvbSAnLi4vdWkvZXJyb3ItY2FyZCc7XG5pbXBvcnQgeyBFcnJvclN0YWNrQmxvY2ssIGlzU3RydWN0dXJlZEVycm9yIH0gZnJvbSAnLi4vdWkvZXJyb3Itc3RhY2stYmxvY2snO1xuaW1wb3J0IHsgU2tlbGV0b24gfSBmcm9tICcuLi91aS9za2VsZXRvbic7XG5pbXBvcnQgeyBUaW1lc3RhbXBUb29sdGlwIH0gZnJvbSAnLi4vdWkvdGltZXN0YW1wLXRvb2x0aXAnO1xuaW1wb3J0IHsgUnVuQXR0cmlidXRlc0NhcmQgfSBmcm9tICcuL2F0dHJpYnV0ZXMtYmxvY2snO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uVmlldyB9IGZyb20gJy4vY29udmVyc2F0aW9uLXZpZXcnO1xuaW1wb3J0IHsgQ29weWFibGVEYXRhQmxvY2ssIEVuY3J5cHRlZERhdGFCbG9jayB9IGZyb20gJy4vY29weWFibGUtZGF0YS1ibG9jayc7XG5pbXBvcnQgeyBEZXRhaWxDYXJkIH0gZnJvbSAnLi9kZXRhaWwtY2FyZCc7XG5cbi8qKlxuICogVGFiIGJ1dHRvbiBmb3IgY29udmVyc2F0aW9uL0pTT04gdG9nZ2xlXG4gKi9cbmZ1bmN0aW9uIFRhYkJ1dHRvbih7XG4gIGFjdGl2ZSxcbiAgb25DbGljayxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgYXJpYS1zZWxlY3RlZD17YWN0aXZlfVxuICAgICAgdGFiSW5kZXg9e2FjdGl2ZSA/IDAgOiAtMX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBjbGFzc05hbWU9XCJweC0zIHB5LTEuNSB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyAtbWItcHhcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgLy8gRXhwbGljaXQgc3R5bGVzIHRvIHByZXZlbnQgYXBwLWxldmVsIGJ1dHRvbiBvdmVycmlkZXMgd2hlbiB3ZWItc2hhcmVkXG4gICAgICAgIC8vIGlzIGVtYmVkZGVkIGluIGEgc2VsZi1ob3N0ZWQgYXBwLlxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGJvcmRlclRvcDogJ25vbmUnLFxuICAgICAgICBib3JkZXJMZWZ0OiAnbm9uZScsXG4gICAgICAgIGJvcmRlclJpZ2h0OiAnbm9uZScsXG4gICAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAke2FjdGl2ZSA/ICd2YXIoLS1kcy1ibHVlLTYwMCknIDogJ3RyYW5zcGFyZW50J31gLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICBjb2xvcjogYWN0aXZlID8gJ3ZhcigtLWRzLWdyYXktMTAwMCknIDogJ3ZhcigtLWRzLWdyYXktNjAwKScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuLyoqXG4gKiBTaGFyZWQgdGFiYmVkIGNvbnRhaW5lciB3aXRoIGFjY2Vzc2libGUgQVJJQSByb2xlcyBhbmQga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAqIFVzZWQgYnkgQ29udmVyc2F0aW9uV2l0aFRhYnMgZm9yIHRoZSBjb252ZXJzYXRpb24vSlNPTiB0b2dnbGUuXG4gKi9cbmZ1bmN0aW9uIFRhYmJlZENvbnRhaW5lcjxUIGV4dGVuZHMgc3RyaW5nPih7XG4gIHRhYnMsXG4gIGFjdGl2ZVRhYixcbiAgb25UYWJDaGFuZ2UsXG4gIGFyaWFMYWJlbCxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIHRhYnM6IHsgaWQ6IFQ7IGxhYmVsOiBzdHJpbmcgfVtdO1xuICBhY3RpdmVUYWI6IFQ7XG4gIG9uVGFiQ2hhbmdlOiAodGFiOiBUKSA9PiB2b2lkO1xuICBhcmlhTGFiZWw6IHN0cmluZztcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn0pIHtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdBcnJvd1JpZ2h0JyAmJiBldmVudC5rZXkgIT09ICdBcnJvd0xlZnQnKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGFicy5maW5kSW5kZXgoKHQpID0+IHQuaWQgPT09IGFjdGl2ZVRhYik7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPVxuICAgICAgICBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0J1xuICAgICAgICAgID8gKGN1cnJlbnRJbmRleCArIDEpICUgdGFicy5sZW5ndGhcbiAgICAgICAgICA6IChjdXJyZW50SW5kZXggLSAxICsgdGFicy5sZW5ndGgpICUgdGFicy5sZW5ndGg7XG4gICAgICBvblRhYkNoYW5nZSh0YWJzW25leHRJbmRleF0uaWQpO1xuICAgIH0sXG4gICAgW3RhYnMsIGFjdGl2ZVRhYiwgb25UYWJDaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlclwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGdhcC0xIGJvcmRlci1iXCJcbiAgICAgICAgcm9sZT1cInRhYmxpc3RcIlxuICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGFicy5tYXAoKHRhYikgPT4gKFxuICAgICAgICAgIDxUYWJCdXR0b25cbiAgICAgICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICAgICAgYWN0aXZlPXthY3RpdmVUYWIgPT09IHRhYi5pZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uVGFiQ2hhbmdlKHRhYi5pZCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RhYi5sYWJlbH1cbiAgICAgICAgICA8L1RhYkJ1dHRvbj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiByb2xlPVwidGFicGFuZWxcIj57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmNvbnN0IGNvbnZlcnNhdGlvblRhYnMgPSBbXG4gIHsgaWQ6ICdjb252ZXJzYXRpb24nIGFzIGNvbnN0LCBsYWJlbDogJ0NvbnZlcnNhdGlvbicgfSxcbiAgeyBpZDogJ2pzb24nIGFzIGNvbnN0LCBsYWJlbDogJ1JhdyBKU09OJyB9LFxuXTtcblxuLyoqXG4gKiBUYWJiZWQgdmlldyBmb3IgY29udmVyc2F0aW9uIGFuZCByYXcgSlNPTlxuICovXG5mdW5jdGlvbiBDb252ZXJzYXRpb25XaXRoVGFicyh7XG4gIGNvbnZlcnNhdGlvbixcbiAgYXJncyxcbn06IHtcbiAgY29udmVyc2F0aW9uOiBNb2RlbE1lc3NhZ2VbXTtcbiAgYXJnczogdW5rbm93bltdO1xufSkge1xuICBjb25zdCBbYWN0aXZlVGFiLCBzZXRBY3RpdmVUYWJdID0gdXNlU3RhdGU8J2NvbnZlcnNhdGlvbicgfCAnanNvbic+KFxuICAgICdjb252ZXJzYXRpb24nXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiSW5wdXRcIj5cbiAgICAgIDxUYWJiZWRDb250YWluZXJcbiAgICAgICAgdGFicz17Y29udmVyc2F0aW9uVGFic31cbiAgICAgICAgYWN0aXZlVGFiPXthY3RpdmVUYWJ9XG4gICAgICAgIG9uVGFiQ2hhbmdlPXtzZXRBY3RpdmVUYWJ9XG4gICAgICAgIGFyaWFMYWJlbD1cIkNvbnZlcnNhdGlvbiB2aWV3XCJcbiAgICAgID5cbiAgICAgICAge2FjdGl2ZVRhYiA9PT0gJ2NvbnZlcnNhdGlvbicgPyAoXG4gICAgICAgICAgPENvbnZlcnNhdGlvblZpZXcgbWVzc2FnZXM9e2NvbnZlcnNhdGlvbn0gLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtM1wiPlxuICAgICAgICAgICAge0FycmF5LmlzQXJyYXkoYXJncylcbiAgICAgICAgICAgICAgPyBhcmdzLm1hcCgodiwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZpcnN0Om10LTBcIiBrZXk9e2l9PlxuICAgICAgICAgICAgICAgICAgICB7SnNvbkJsb2NrKHYpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgOiBKc29uQmxvY2soYXJncyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L1RhYmJlZENvbnRhaW5lcj5cbiAgICA8L0RldGFpbENhcmQ+XG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVyIGEgdmFsdWUgd2l0aCB0aGUgc2hhcmVkIERhdGFJbnNwZWN0b3IgKE9iamVjdEluc3BlY3RvciB3aXRoXG4gKiBjdXN0b20gdGhlbWluZywgbm9kZVJlbmRlcmVyIGZvciBTdHJlYW1SZWYvQ2xhc3NJbnN0YW5jZVJlZiwgZXRjLilcbiAqL1xuZnVuY3Rpb24gRW5jcnlwdGVkRmllbGRCbG9jaygpIHtcbiAgcmV0dXJuIDxFbmNyeXB0ZWREYXRhQmxvY2sgLz47XG59XG5cbi8qKlxuICogSW5saW5lIGRpc3BsYXkgZm9yIGFuIGV4cGlyZWQgZmllbGQg4oCUIGZsYXQgbGFiZWwgaW5kaWNhdGluZyBkYXRhIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuXG4gKi9cbmZ1bmN0aW9uIEV4cGlyZWRGaWVsZEJsb2NrKCkge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgcm91bmRlZC1tZCBib3JkZXIgcHgtMyBweS0yIHRleHQteHNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTEwMCknLFxuICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+RGF0YSBleHBpcmVkPC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBKc29uQmxvY2sodmFsdWU6IHVua25vd24pIHtcbiAgcmV0dXJuIDxDb3B5YWJsZURhdGFCbG9jayBkYXRhPXt2YWx1ZX0gLz47XG59XG5cbmNvbnN0IGhhc0Rpc3BsYXlDb250ZW50ID0gKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiA9PiB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IDA7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDA7XG4gIHJldHVybiB0cnVlO1xufTtcblxudHlwZSBBdHRyaWJ1dGVLZXkgPVxuICB8IGtleW9mIFN0ZXBcbiAgfCBrZXlvZiBXb3JrZmxvd1J1blxuICB8IGtleW9mIEhvb2tcbiAgfCBrZXlvZiBFdmVudFxuICB8ICdtb2R1bGVTcGVjaWZpZXInXG4gIHwgJ2V2ZW50RGF0YSdcbiAgfCAncmVzdW1lQXQnXG4gIHwgJ2V4cGlyZWRBdCdcbiAgfCAnd29ya2Zsb3dDb3JlVmVyc2lvbidcbiAgfCAncmVjZWl2ZWRDb3VudCdcbiAgfCAnbGFzdFJlY2VpdmVkQXQnXG4gIHwgJ2Rpc3Bvc2VkQXQnXG4gIHwgJ2lzU3lzdGVtJ1xuICB8ICdlcnJvckNvZGUnO1xuXG5jb25zdCBhdHRyaWJ1dGVPcmRlcjogQXR0cmlidXRlS2V5W10gPSBbXG4gICd3b3JrZmxvd05hbWUnLFxuICAnbW9kdWxlU3BlY2lmaWVyJyxcbiAgJ3N0ZXBOYW1lJyxcbiAgJ3N0YXR1cycsXG4gICdzdGVwSWQnLFxuICAnaG9va0lkJyxcbiAgJ2V2ZW50SWQnLFxuICAncnVuSWQnLFxuICAnYXR0ZW1wdCcsXG4gICd0b2tlbicsXG4gICdyZWNlaXZlZENvdW50JyxcbiAgJ2xhc3RSZWNlaXZlZEF0JyxcbiAgJ2Rpc3Bvc2VkQXQnLFxuICAnY29ycmVsYXRpb25JZCcsXG4gICdldmVudFR5cGUnLFxuICAnZGVwbG95bWVudElkJyxcbiAgJ3NwZWNWZXJzaW9uJyxcbiAgJ3dvcmtmbG93Q29yZVZlcnNpb24nLFxuICAnb3duZXJJZCcsXG4gICdwcm9qZWN0SWQnLFxuICAnZW52aXJvbm1lbnQnLFxuICAnZXhlY3V0aW9uQ29udGV4dCcsXG4gICdjcmVhdGVkQXQnLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3VwZGF0ZWRBdCcsXG4gICdjb21wbGV0ZWRBdCcsXG4gICdleHBpcmVkQXQnLFxuICAncmV0cnlBZnRlcicsXG4gICdlcnJvcicsXG4gICdtZXRhZGF0YScsXG4gICdldmVudERhdGEnLFxuICAnaW5wdXQnLFxuICAnb3V0cHV0JyxcbiAgJ2F0dHJpYnV0ZXMnLFxuICAncmVzdW1lQXQnLFxuXTtcblxuY29uc3Qgc29ydEJ5QXR0cmlidXRlT3JkZXIgPSAoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICBjb25zdCBhSW5kZXggPSBhdHRyaWJ1dGVPcmRlci5pbmRleE9mKGEgYXMgQXR0cmlidXRlS2V5KSB8fCAwO1xuICBjb25zdCBiSW5kZXggPSBhdHRyaWJ1dGVPcmRlci5pbmRleE9mKGIgYXMgQXR0cmlidXRlS2V5KSB8fCAwO1xuICByZXR1cm4gYUluZGV4IC0gYkluZGV4O1xufTtcblxuLyoqXG4gKiBEaXNwbGF5IG5hbWVzIGZvciBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIHJlbmRlciBkaWZmZXJlbnRseSBmcm9tIHRoZWlyIGtleS5cbiAqL1xuY29uc3QgYXR0cmlidXRlRGlzcGxheU5hbWVzOiBQYXJ0aWFsPFJlY29yZDxBdHRyaWJ1dGVLZXksIHN0cmluZz4+ID0ge1xuICBtb2R1bGVTcGVjaWZpZXI6ICdNb2R1bGUnLFxuICB3b3JrZmxvd05hbWU6ICdXb3JrZmxvdyBOYW1lJyxcbiAgc3RlcE5hbWU6ICdTdGVwIE5hbWUnLFxuICBzdGVwSWQ6ICdTdGVwIElEJyxcbiAgaG9va0lkOiAnSG9vayBJRCcsXG4gIGF0dGVtcHQ6ICdBdHRlbXB0cycsXG4gIGV2ZW50SWQ6ICdFdmVudCBJRCcsXG4gIHJ1bklkOiAnUnVuIElEJyxcbiAgdG9rZW46ICdUb2tlbicsXG4gIGV2ZW50VHlwZTogJ0V2ZW50IFR5cGUnLFxuICBlcnJvckNvZGU6ICdFcnJvciBDb2RlJyxcbiAgY29ycmVsYXRpb25JZDogJ0NvcnJlbGF0aW9uIElEJyxcbiAgZGVwbG95bWVudElkOiAnRGVwbG95bWVudCBJRCcsXG4gIHNwZWNWZXJzaW9uOiAnU3BlYyBWZXJzaW9uJyxcbiAgd29ya2Zsb3dDb3JlVmVyc2lvbjogJ0B3b3JrZmxvdy9jb3JlIHZlcnNpb24nLFxuICBjcmVhdGVkQXQ6ICdDcmVhdGVkJyxcbiAgc3RhcnRlZEF0OiAnU3RhcnRlZCcsXG4gIHVwZGF0ZWRBdDogJ1VwZGF0ZWQnLFxuICBjb21wbGV0ZWRBdDogJ0NvbXBsZXRlZCcsXG4gIGV4cGlyZWRBdDogJ0V4cGlyZWQnLFxuICByZXRyeUFmdGVyOiAnUmV0cnkgQWZ0ZXInLFxuICByZXN1bWVBdDogJ1Jlc3VtZScsXG4gIGxhc3RSZWNlaXZlZEF0OiAnTGFzdCBSZWNlaXZlZCcsXG4gIGRpc3Bvc2VkQXQ6ICdEaXNwb3NlZCcsXG4gIHJlY2VpdmVkQ291bnQ6ICdUaW1lcyBSZXNvbHZlZCcsXG59O1xuXG4vKipcbiAqIEdldCB0aGUgZGlzcGxheSBuYW1lIGZvciBhbiBhdHRyaWJ1dGUga2V5LlxuICovXG5jb25zdCBnZXRBdHRyaWJ1dGVEaXNwbGF5TmFtZSA9IChhdHRyaWJ1dGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBhdHRyaWJ1dGVEaXNwbGF5TmFtZXNbYXR0cmlidXRlIGFzIEF0dHJpYnV0ZUtleV0gPz8gYXR0cmlidXRlO1xufTtcblxuY29uc3QgZ2V0TW9kdWxlU3BlY2lmaWVyRnJvbU5hbWUgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICBjb25zdCByYXcgPSBTdHJpbmcodmFsdWUpO1xuICBjb25zdCBwYXJzZWRTdGVwID0gcGFyc2VTdGVwTmFtZShyYXcpO1xuICBpZiAocGFyc2VkU3RlcCkge1xuICAgIHJldHVybiBwYXJzZWRTdGVwLm1vZHVsZVNwZWNpZmllcjtcbiAgfVxuICBjb25zdCBwYXJzZWRXb3JrZmxvdyA9IHBhcnNlV29ya2Zsb3dOYW1lKHJhdyk7XG4gIGlmIChwYXJzZWRXb3JrZmxvdykge1xuICAgIHJldHVybiBwYXJzZWRXb3JrZmxvdy5tb2R1bGVTcGVjaWZpZXI7XG4gIH1cbiAgcmV0dXJuIHJhdztcbn07XG5cbmNvbnN0IHBhcnNlRGF0ZVZhbHVlID0gKHZhbHVlOiB1bmtub3duKTogRGF0ZSB8IG51bGwgPT4ge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHZhbHVlLmdldFRpbWUoKSkgPyBudWxsIDogdmFsdWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGF0ZSA9XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IG5ldyBEYXRlKHZhbHVlKSA6IG5ldyBEYXRlKFN0cmluZyh2YWx1ZSkpO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSA/IG51bGwgOiBkYXRlO1xufTtcblxuY29uc3QgZm9ybWF0TG9jYWxNaWxsaXNlY29uZFRpbWUgPSAoZGF0ZTogRGF0ZSk6IHN0cmluZyA9PlxuICBmb3JtYXQoZGF0ZSwgJ01NTSBkZCBISDptbTpzcy5TUyBPTycpLnRvVXBwZXJDYXNlKCk7XG5cbmV4cG9ydCBjb25zdCBsb2NhbE1pbGxpc2Vjb25kVGltZSA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGRhdGUgPSBwYXJzZURhdGVWYWx1ZSh2YWx1ZSk7XG4gIGlmICghZGF0ZSkge1xuICAgIHJldHVybiAnLSc7XG4gIH1cblxuICByZXR1cm4gZm9ybWF0TG9jYWxNaWxsaXNlY29uZFRpbWUoZGF0ZSk7XG59O1xuXG5jb25zdCBsb2NhbE1pbGxpc2Vjb25kVGltZU9yTnVsbCA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCBkYXRlID0gcGFyc2VEYXRlVmFsdWUodmFsdWUpO1xuICBpZiAoIWRhdGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gZm9ybWF0TG9jYWxNaWxsaXNlY29uZFRpbWUoZGF0ZSk7XG59O1xuXG5jb25zdCB0aW1lc3RhbXBXaXRoVG9vbHRpcE9yTnVsbCA9ICh2YWx1ZTogdW5rbm93bik6IFJlYWN0Tm9kZSB8IG51bGwgPT4ge1xuICBjb25zdCBkYXRlID0gcGFyc2VEYXRlVmFsdWUodmFsdWUpO1xuICBpZiAoIWRhdGUpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxUaW1lc3RhbXBUb29sdGlwIGRhdGU9e2RhdGV9PlxuICAgICAgPHNwYW4+e2Zvcm1hdExvY2FsTWlsbGlzZWNvbmRUaW1lKGRhdGUpfTwvc3Bhbj5cbiAgICA8L1RpbWVzdGFtcFRvb2x0aXA+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgRGlzcGxheUNvbnRleHQge1xuICBzdGVwTmFtZT86IHN0cmluZztcbn1cblxuY29uc3QgYXR0cmlidXRlVG9EaXNwbGF5Rm46IFJlY29yZDxcbiAgQXR0cmlidXRlS2V5LFxuICAodmFsdWU6IHVua25vd24sIGNvbnRleHQ/OiBEaXNwbGF5Q29udGV4dCkgPT4gbnVsbCB8IHN0cmluZyB8IFJlYWN0Tm9kZVxuPiA9IHtcbiAgLy8gTmFtZXMgdGhhdCBuZWVkIHByZXR0eS1wcmludGluZ1xuICB3b3JrZmxvd05hbWU6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIG1vZHVsZVNwZWNpZmllcjogKHZhbHVlOiB1bmtub3duKSA9PiBnZXRNb2R1bGVTcGVjaWZpZXJGcm9tTmFtZSh2YWx1ZSksXG4gIHN0ZXBOYW1lOiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICAvLyBJRHNcbiAgcnVuSWQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIHN0ZXBJZDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICBob29rSWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgZXZlbnRJZDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICAvLyBSdW4vc3RlcCBkZXRhaWxzXG4gIHN0YXR1czogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgYXR0ZW1wdDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICAvLyBIb29rIGRldGFpbHNcbiAgdG9rZW46ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgaXNXZWJob29rOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIGlzU3lzdGVtOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIHJlY2VpdmVkQ291bnQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgbGFzdFJlY2VpdmVkQXQ6IGxvY2FsTWlsbGlzZWNvbmRUaW1lT3JOdWxsLFxuICBkaXNwb3NlZEF0OiBsb2NhbE1pbGxpc2Vjb25kVGltZU9yTnVsbCxcbiAgLy8gRXZlbnQgZGV0YWlsc1xuICBldmVudFR5cGU6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgY29ycmVsYXRpb25JZDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICAvLyBQcm9qZWN0IGRldGFpbHNcbiAgZGVwbG95bWVudElkOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIHNwZWNWZXJzaW9uOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIHdvcmtmbG93Q29yZVZlcnNpb246ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgLy8gVGVuYW5jeSAod2UgZG9uJ3Qgc2hvdyB0aGVzZSlcbiAgb3duZXJJZDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgcHJvamVjdElkOiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICBlbnZpcm9ubWVudDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgZXhlY3V0aW9uQ29udGV4dDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgLy8gQXR0cmlidXRlcyDigJQgc3RyaW5nLXN0cmluZyBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgcnVuLlxuICAvLyBSZW5kZXJlZCBhcyBrZXktdmFsdWUgcm93cyBpbiBpdHMgb3duIGNvbGxhcHNpYmxlIERldGFpbENhcmQ7XG4gIC8vIGlmIGVtcHR5L21pc3NpbmcsIGhpZGRlbiBieSB0aGUgaGFzRGlzcGxheUNvbnRlbnQgZ2F0ZS5cbiAgYXR0cmlidXRlczogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKCFoYXNEaXNwbGF5Q29udGVudCh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiA8UnVuQXR0cmlidXRlc0NhcmQgYXR0cmlidXRlcz17dmFsdWUgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gLz47XG4gIH0sXG4gIC8vIERhdGVzIOKAlCB3cmFwcGVkIHdpdGggVGltZXN0YW1wVG9vbHRpcCBzaG93aW5nIFVUQy9sb2NhbCArIHJlbGF0aXZlIHRpbWVcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXBXaXRoVG9vbHRpcE9yTnVsbCxcbiAgc3RhcnRlZEF0OiB0aW1lc3RhbXBXaXRoVG9vbHRpcE9yTnVsbCxcbiAgdXBkYXRlZEF0OiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICBjb21wbGV0ZWRBdDogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIGV4cGlyZWRBdDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgcmV0cnlBZnRlcjogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIHJlc3VtZUF0OiB0aW1lc3RhbXBXaXRoVG9vbHRpcE9yTnVsbCxcbiAgLy8gUmVzb2x2ZWQgYXR0cmlidXRlcywgd29uJ3QgYWN0dWFsbHkgdXNlIHRoaXMgZnVuY3Rpb25cbiAgbWV0YWRhdGE6ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWUpKSByZXR1cm4gPEVuY3J5cHRlZERhdGFCbG9jayAvPjtcbiAgICBpZiAoaXNFeHBpcmVkTWFya2VyKHZhbHVlKSkgcmV0dXJuIDxFeHBpcmVkRmllbGRCbG9jayAvPjtcbiAgICByZXR1cm4gSnNvbkJsb2NrKHZhbHVlKTtcbiAgfSxcbiAgaW5wdXQ6ICh2YWx1ZTogdW5rbm93biwgY29udGV4dD86IERpc3BsYXlDb250ZXh0KSA9PiB7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIklucHV0XCI+XG4gICAgICAgICAgPEVuY3J5cHRlZEZpZWxkQmxvY2sgLz5cbiAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzRXhwaXJlZE1hcmtlcih2YWx1ZSkpIHJldHVybiA8RXhwaXJlZEZpZWxkQmxvY2sgLz47XG4gICAgLy8gQ2hlY2sgaWYgaW5wdXQgaGFzIGFyZ3MgKyBjbG9zdXJlIHZhcnMgc3RydWN0dXJlXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2FyZ3MnIGluIHZhbHVlKSB7XG4gICAgICBjb25zdCB7IGFyZ3MsIGNsb3N1cmVWYXJzLCB0aGlzVmFsIH0gPSB2YWx1ZSBhcyB7XG4gICAgICAgIGFyZ3M6IHVua25vd25bXTtcbiAgICAgICAgY2xvc3VyZVZhcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgdGhpc1ZhbD86IHVua25vd247XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFzQ2xvc3VyZVZhcnMgPSBoYXNEaXNwbGF5Q29udGVudChjbG9zdXJlVmFycyk7XG4gICAgICBjb25zdCBoYXNUaGlzVmFsID0gaGFzRGlzcGxheUNvbnRlbnQodGhpc1ZhbCk7XG4gICAgICBjb25zdCBoYXNBcmdzID0gaGFzRGlzcGxheUNvbnRlbnQoYXJncyk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBkb1N0cmVhbVN0ZXAgLSBzaG93IGNvbnZlcnNhdGlvbiB2aWV3IHdpdGggdGFic1xuICAgICAgaWYgKGNvbnRleHQ/LnN0ZXBOYW1lICYmIGlzRG9TdHJlYW1TdGVwKGNvbnRleHQuc3RlcE5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGV4dHJhY3RDb252ZXJzYXRpb24oYXJncyk7XG4gICAgICAgIGlmIChjb252ZXJzYXRpb24gJiYgY29udmVyc2F0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPENvbnZlcnNhdGlvbldpdGhUYWJzIGNvbnZlcnNhdGlvbj17Y29udmVyc2F0aW9ufSBhcmdzPXthcmdzfSAvPlxuICAgICAgICAgICAgICB7aGFzQ2xvc3VyZVZhcnMgJiYgKFxuICAgICAgICAgICAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJDbG9zdXJlIFZhcmlhYmxlc1wiPlxuICAgICAgICAgICAgICAgICAge0pzb25CbG9jayhjbG9zdXJlVmFycyl9XG4gICAgICAgICAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7aGFzVGhpc1ZhbCAmJiAoXG4gICAgICAgICAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIlRoaXMgVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIHtKc29uQmxvY2sodGhpc1ZhbCl9XG4gICAgICAgICAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBEb24ndCByZW5kZXIgYW4gZW1wdHkgXCJJbnB1dCAoMCBhcmd1bWVudHMpXCIgY2FyZCB3aGVuIG5vIGlucHV0IGV4aXN0cy5cbiAgICAgIGlmICghaGFzQXJncyAmJiAhaGFzQ2xvc3VyZVZhcnMgJiYgIWhhc1RoaXNWYWwpIHtcbiAgICAgICAgcmV0dXJuIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJJbnB1dCAobm8gZGF0YSlcIiBkaXNhYmxlZCAvPjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiSW5wdXRcIj5cbiAgICAgICAgICAgIHtBcnJheS5pc0FycmF5KGFyZ3MpXG4gICAgICAgICAgICAgID8gYXJncy5tYXAoKHYsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmaXJzdDptdC0wXCIga2V5PXtpfT5cbiAgICAgICAgICAgICAgICAgICAge0pzb25CbG9jayh2KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogSnNvbkJsb2NrKGFyZ3MpfVxuICAgICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICAgICB7aGFzQ2xvc3VyZVZhcnMgJiYgKFxuICAgICAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkNsb3N1cmUgVmFyaWFibGVzXCI+XG4gICAgICAgICAgICAgIHtKc29uQmxvY2soY2xvc3VyZVZhcnMpfVxuICAgICAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hhc1RoaXNWYWwgJiYgKFxuICAgICAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkNvbnRleHRcIj57SnNvbkJsb2NrKHRoaXNWYWwpfTwvRGV0YWlsQ2FyZD5cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IHRyZWF0IGFzIHBsYWluIGFycmF5IG9yIG9iamVjdFxuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gPERldGFpbENhcmQgc3VtbWFyeT1cIklucHV0IChubyBkYXRhKVwiIGRpc2FibGVkIC8+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIklucHV0XCI+XG4gICAgICAgIHtBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKCh2LCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmaXJzdDptdC0wXCIga2V5PXtpfT5cbiAgICAgICAgICAgICAgICB7SnNvbkJsb2NrKHYpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkpXG4gICAgICAgICAgOiBKc29uQmxvY2sodmFsdWUpfVxuICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICk7XG4gIH0sXG4gIG91dHB1dDogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIk91dHB1dFwiPlxuICAgICAgICAgIDxFbmNyeXB0ZWRGaWVsZEJsb2NrIC8+XG4gICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoaXNFeHBpcmVkTWFya2VyKHZhbHVlKSkgcmV0dXJuIDxFeHBpcmVkRmllbGRCbG9jayAvPjtcbiAgICByZXR1cm4gPERldGFpbENhcmQgc3VtbWFyeT1cIk91dHB1dFwiPntKc29uQmxvY2sodmFsdWUpfTwvRGV0YWlsQ2FyZD47XG4gIH0sXG4gIGVycm9yOiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiRXJyb3JcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICA8RW5jcnlwdGVkRmllbGRCbG9jayAvPlxuICAgICAgICA8L0RldGFpbENhcmQ+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaXNFeHBpcmVkTWFya2VyKHZhbHVlKSkgcmV0dXJuIDxFeHBpcmVkRmllbGRCbG9jayAvPjtcbiAgICBpZiAoIWhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBTdHJ1Y3R1cmVkIHdvcmtmbG93IGVycm9ycyBtYXkgYmUgcGVyc2lzdGVkIGFzIGVpdGhlciBgeyBtZXNzYWdlIH1gIG9yXG4gICAgLy8gYHsgbWVzc2FnZSwgc3RhY2sgfWAuIFJlbmRlciBib3RoIHdpdGggdGhlIGRlZGljYXRlZCBlcnJvciBibG9jay5cbiAgICBpZiAoaXNTdHJ1Y3R1cmVkRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiRXJyb3JcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXt2YWx1ZX0gLz5cbiAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkVycm9yXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgIHtKc29uQmxvY2sodmFsdWUpfVxuICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICk7XG4gIH0sXG4gIGV2ZW50RGF0YTogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkV2ZW50IERhdGFcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICA8RW5jcnlwdGVkRmllbGRCbG9jayAvPlxuICAgICAgICA8L0RldGFpbENhcmQ+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaXNFeHBpcmVkTWFya2VyKHZhbHVlKSkgcmV0dXJuIDxFeHBpcmVkRmllbGRCbG9jayAvPjtcbiAgICBpZiAoIWhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJFdmVudCBEYXRhXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgIHtKc29uQmxvY2sodmFsdWUpfVxuICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICk7XG4gIH0sXG4gIGVycm9yQ29kZTogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfSxcbn07XG5cbmNvbnN0IHJlc29sdmFibGVBdHRyaWJ1dGVzID0gW1xuICAnaW5wdXQnLFxuICAnb3V0cHV0JyxcbiAgJ2Vycm9yJyxcbiAgJ21ldGFkYXRhJyxcbiAgJ2F0dHJpYnV0ZXMnLFxuICAnZXZlbnREYXRhJyxcbl07XG5cbi8vIEF0dHJpYnV0ZXMgd2hvc2UgZGlzcGxheUZuIHJlbmRlcnMgaXRzIG93biBzZWN0aW9uIGhlYWRlciB2aWEgRGV0YWlsQ2FyZCxcbi8vIHNvIHRoZSBvdXRlciBBdHRyaWJ1dGVCbG9jayBzaG91bGQgbm90IGR1cGxpY2F0ZSB0aGUgbGFiZWwuXG5jb25zdCBzZWxmSGVhZGVyZWRBdHRyaWJ1dGVzID0gbmV3IFNldChbXG4gICdpbnB1dCcsXG4gICdvdXRwdXQnLFxuICAnZXJyb3InLFxuICAnYXR0cmlidXRlcycsXG4gICdldmVudERhdGEnLFxuXSk7XG5cbmNvbnN0IEV4cGlyZWREYXRhTWVzc2FnZSA9ICgpID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT1cInRleHQtY29weS0xMiByb3VuZGVkLW1kIGJvcmRlciBwLTQgbXktMlwiXG4gICAgc3R5bGU9e3tcbiAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS0zMDApJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScsXG4gICAgfX1cbiAgPlxuICAgIDxzcGFuPlRoZSBkYXRhIGZvciB0aGlzIHJ1biBoYXMgZXhwaXJlZCBhbmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS48L3NwYW4+XG4gIDwvZGl2PlxuKTtcblxuY29uc3QgY29weWFibGVCYXNpY0F0dHJpYnV0ZXMgPSBuZXcgU2V0PEF0dHJpYnV0ZUtleT4oW1xuICAnc3RlcElkJyxcbiAgJ2hvb2tJZCcsXG4gICdldmVudElkJyxcbiAgJ2RlcGxveW1lbnRJZCcsXG4gICdtb2R1bGVTcGVjaWZpZXInLFxuXSk7XG5cbmV4cG9ydCBjb25zdCBBdHRyaWJ1dGVCbG9jayA9ICh7XG4gIGF0dHJpYnV0ZSxcbiAgdmFsdWUsXG4gIGlzTG9hZGluZyxcbiAgaW5saW5lID0gZmFsc2UsXG4gIGNvbnRleHQsXG59OiB7XG4gIGF0dHJpYnV0ZTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgaW5saW5lPzogYm9vbGVhbjtcbiAgY29udGV4dD86IERpc3BsYXlDb250ZXh0O1xufSkgPT4ge1xuICBjb25zdCBkZWNyeXB0Q3R4ID0gdXNlQ29udGV4dChEZWNyeXB0Q2xpY2tDb250ZXh0KTtcbiAgY29uc3QgaXNFeHBhbmRhYmxlTG9hZGluZ1RhcmdldCA9XG4gICAgYXR0cmlidXRlID09PSAnaW5wdXQnIHx8XG4gICAgYXR0cmlidXRlID09PSAnb3V0cHV0JyB8fFxuICAgIGF0dHJpYnV0ZSA9PT0gJ2V2ZW50RGF0YSc7XG4gIGlmIChpc0xvYWRpbmcgJiYgaXNFeHBhbmRhYmxlTG9hZGluZ1RhcmdldCAmJiAhaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSB7XG4gICAgY29uc3QgbGFiZWwgPVxuICAgICAgYXR0cmlidXRlID09PSAnZXZlbnREYXRhJ1xuICAgICAgICA/ICdFdmVudCBEYXRhJ1xuICAgICAgICA6IGF0dHJpYnV0ZSA9PT0gJ291dHB1dCdcbiAgICAgICAgICA/ICdPdXRwdXQnXG4gICAgICAgICAgOiAnSW5wdXQnO1xuICAgIGlmIChkZWNyeXB0Q3R4Py5oYXNFbmNyeXB0ZWREYXRhKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PXtsYWJlbH0gZGVmYXVsdE9wZW49e2F0dHJpYnV0ZSA9PT0gJ2V2ZW50RGF0YSd9PlxuICAgICAgICAgIDxFbmNyeXB0ZWRGaWVsZEJsb2NrIC8+XG4gICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8RGV0YWlsQ2FyZCBzdW1tYXJ5PXtsYWJlbH0gLz47XG4gIH1cblxuICBjb25zdCBkaXNwbGF5Rm4gPVxuICAgIGF0dHJpYnV0ZVRvRGlzcGxheUZuW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgYXR0cmlidXRlVG9EaXNwbGF5Rm5dO1xuICBpZiAoIWRpc3BsYXlGbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlGbih2YWx1ZSwgY29udGV4dCk7XG4gIGlmICghZGlzcGxheVZhbHVlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaW5saW5lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtWzExcHhdIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHthdHRyaWJ1dGV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1bMTFweF1cIiBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknIH19PlxuICAgICAgICAgIHtkaXNwbGF5VmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoc2VsZkhlYWRlcmVkQXR0cmlidXRlcy5oYXMoYXR0cmlidXRlKSkge1xuICAgIHJldHVybiA8PntkaXNwbGF5VmFsdWV9PC8+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICB7dHlwZW9mIGlzTG9hZGluZyA9PT0gJ2Jvb2xlYW4nICYmIGlzTG9hZGluZyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTkgcmlnaHQtNFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgaC00IHctNCBib3JkZXItYi0yXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxkaXYga2V5PXthdHRyaWJ1dGV9IGNsYXNzTmFtZT1cIm15LTIgZmxleCBmbGV4LWNvbCBnYXAtMFwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTE0IHRleHQtZ3JheS0xMDAwIGZvbnQtbWVkaXVtIGZpcnN0LWxldHRlcjp1cHBlcmNhc2VcIj5cbiAgICAgICAgICB7YXR0cmlidXRlfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHNcIiBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknIH19PlxuICAgICAgICAgIHtkaXNwbGF5VmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IEF0dHJpYnV0ZVBhbmVsID0gKHtcbiAgZGF0YSxcbiAgbW9kdWxlU3BlY2lmaWVyLFxuICBpc0xvYWRpbmcsXG4gIGVycm9yLFxuICBleHBpcmVkQXQsXG4gIG9uU3RyZWFtQ2xpY2ssXG4gIG9uUnVuQ2xpY2ssXG4gIG9uRGVjcnlwdCxcbiAgaXNEZWNyeXB0aW5nID0gZmFsc2UsXG4gIHJlc291cmNlLFxufToge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbW9kdWxlU3BlY2lmaWVyPzogc3RyaW5nO1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICBlcnJvcj86IEVycm9yO1xuICBleHBpcmVkQXQ/OiBzdHJpbmcgfCBEYXRlO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhIHN0cmVhbSByZWZlcmVuY2UgaXMgY2xpY2tlZCAqL1xuICBvblN0cmVhbUNsaWNrPzogKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgcnVuIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uUnVuQ2xpY2s/OiAocnVuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYW4gZW5jcnlwdGVkIG1hcmtlciBpcyBjbGlja2VkICh0cmlnZ2VycyBkZWNyeXB0aW9uKSAqL1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciBkZWNyeXB0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICAvKiogUmVzb3VyY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc3BhbiDigJQgdXNlZCB0byBzaG93IHRhcmdldGVkIGxvYWRpbmcgc2tlbGV0b25zLiAqL1xuICByZXNvdXJjZT86IHN0cmluZztcbn0pID0+IHtcbiAgLy8gRXh0cmFjdCB3b3JrZmxvd0NvcmVWZXJzaW9uIGZyb20gZXhlY3V0aW9uQ29udGV4dCBmb3IgZGlzcGxheVxuICBjb25zdCBkaXNwbGF5RGF0YSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4uZGF0YSB9O1xuICAgIGNvbnN0IGV4ZWNDdHggPSBkYXRhLmV4ZWN1dGlvbkNvbnRleHQgYXNcbiAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGlmIChleGVjQ3R4Py53b3JrZmxvd0NvcmVWZXJzaW9uKSB7XG4gICAgICByZXN1bHQud29ya2Zsb3dDb3JlVmVyc2lvbiA9IGV4ZWNDdHgud29ya2Zsb3dDb3JlVmVyc2lvbjtcbiAgICB9XG4gICAgaWYgKG1vZHVsZVNwZWNpZmllcikge1xuICAgICAgcmVzdWx0Lm1vZHVsZVNwZWNpZmllciA9IG1vZHVsZVNwZWNpZmllcjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhLnN0ZXBOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzdWx0Lm1vZHVsZVNwZWNpZmllciA9IGRhdGEuc3RlcE5hbWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YS53b3JrZmxvd05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXN1bHQubW9kdWxlU3BlY2lmaWVyID0gZGF0YS53b3JrZmxvd05hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtkYXRhLCBtb2R1bGVTcGVjaWZpZXJdKTtcbiAgY29uc3QgaGFzRXhwaXJlZCA9IGV4cGlyZWRBdCAhPSBudWxsICYmIG5ldyBEYXRlKGV4cGlyZWRBdCkgPCBuZXcgRGF0ZSgpO1xuICBjb25zdCBiYXNpY0F0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhkaXNwbGF5RGF0YSlcbiAgICAuZmlsdGVyKChrZXkpID0+ICFyZXNvbHZhYmxlQXR0cmlidXRlcy5pbmNsdWRlcyhrZXkpKVxuICAgIC5zb3J0KHNvcnRCeUF0dHJpYnV0ZU9yZGVyKTtcbiAgY29uc3QgcmVzb2x2ZWRBdHRyaWJ1dGVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcHJlc2VudCA9IE9iamVjdC5rZXlzKGRpc3BsYXlEYXRhKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiByZXNvbHZhYmxlQXR0cmlidXRlcy5pbmNsdWRlcyhrZXkpKVxuICAgICAgLnNvcnQoc29ydEJ5QXR0cmlidXRlT3JkZXIpO1xuXG4gICAgaWYgKCFpc0xvYWRpbmcpIHJldHVybiBwcmVzZW50O1xuXG4gICAgaWYgKHJlc291cmNlID09PSAnc2xlZXAnKSByZXR1cm4gcHJlc2VudDtcblxuICAgIC8vIER1cmluZyBsb2FkaW5nLCBlbnN1cmUgc2VjdGlvbnMgYXBwZWFyIHNvIHRoZWlyIHNrZWxldG9ucyByZW5kZXJcbiAgICAvLyBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbiAoYWJvdmUgdGhlIGV2ZW50cyBzZWN0aW9uKS5cbiAgICBjb25zdCBsb2FkaW5nRGVmYXVsdHMgPSBbJ2lucHV0JywgJ291dHB1dCddO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGxvYWRpbmdEZWZhdWx0cykge1xuICAgICAgaWYgKCFwcmVzZW50LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgcHJlc2VudC5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVzZW50LnNvcnQoc29ydEJ5QXR0cmlidXRlT3JkZXIpO1xuICB9LCBbZGlzcGxheURhdGEsIGlzTG9hZGluZywgcmVzb3VyY2VdKTtcblxuICAvLyBGaWx0ZXIgb3V0IGF0dHJpYnV0ZXMgdGhhdCByZXR1cm4gbnVsbFxuICBjb25zdCB2aXNpYmxlQmFzaWNBdHRyaWJ1dGVzID0gYmFzaWNBdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlKSA9PiB7XG4gICAgY29uc3QgZGlzcGxheUZuID1cbiAgICAgIGF0dHJpYnV0ZVRvRGlzcGxheUZuW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgYXR0cmlidXRlVG9EaXNwbGF5Rm5dO1xuICAgIGlmICghZGlzcGxheUZuKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZGlzcGxheVZhbHVlID0gZGlzcGxheUZuKFxuICAgICAgZGlzcGxheURhdGFbYXR0cmlidXRlIGFzIGtleW9mIHR5cGVvZiBkaXNwbGF5RGF0YV1cbiAgICApO1xuICAgIHJldHVybiBkaXNwbGF5VmFsdWUgIT09IG51bGw7XG4gIH0pO1xuXG4gIC8vIEtlZXAgYG1vZHVsZVNwZWNpZmllcmAgaW1tZWRpYXRlbHkgYWZ0ZXIgYHdvcmtmbG93TmFtZWAgb3IgYHN0ZXBOYW1lYC5cbiAgY29uc3Qgb3JkZXJlZEJhc2ljQXR0cmlidXRlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbLi4udmlzaWJsZUJhc2ljQXR0cmlidXRlc107XG4gICAgY29uc3QgbW9kdWxlU3BlY2lmaWVySW5kZXggPSBhdHRyaWJ1dGVzLmluZGV4T2YoJ21vZHVsZVNwZWNpZmllcicpO1xuICAgIGlmIChtb2R1bGVTcGVjaWZpZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMuc3BsaWNlKG1vZHVsZVNwZWNpZmllckluZGV4LCAxKTtcbiAgICBjb25zdCB3b3JrZmxvd05hbWVJbmRleCA9IGF0dHJpYnV0ZXMuaW5kZXhPZignd29ya2Zsb3dOYW1lJyk7XG4gICAgaWYgKHdvcmtmbG93TmFtZUluZGV4ICE9PSAtMSkge1xuICAgICAgYXR0cmlidXRlcy5zcGxpY2Uod29ya2Zsb3dOYW1lSW5kZXggKyAxLCAwLCAnbW9kdWxlU3BlY2lmaWVyJyk7XG4gICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBjb25zdCBzdGVwTmFtZUluZGV4ID0gYXR0cmlidXRlcy5pbmRleE9mKCdzdGVwTmFtZScpO1xuICAgIGlmIChzdGVwTmFtZUluZGV4ICE9PSAtMSkge1xuICAgICAgYXR0cmlidXRlcy5zcGxpY2Uoc3RlcE5hbWVJbmRleCArIDEsIDAsICdtb2R1bGVTcGVjaWZpZXInKTtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMudW5zaGlmdCgnbW9kdWxlU3BlY2lmaWVyJyk7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gIH0sIFt2aXNpYmxlQmFzaWNBdHRyaWJ1dGVzXSk7XG5cbiAgLy8gTWVtb2l6ZSBjb250ZXh0IG9iamVjdCB0byBhdm9pZCBvYmplY3QgcmVjb25zdHJ1Y3Rpb24gb24gcmVuZGVyXG4gIGNvbnN0IGRpc3BsYXlDb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgc3RlcE5hbWU6IGRpc3BsYXlEYXRhLnN0ZXBOYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB9KSxcbiAgICBbZGlzcGxheURhdGEuc3RlcE5hbWVdXG4gICk7XG4gIGNvbnN0IG91dGVyRGVjcnlwdEN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG4gIGNvbnN0IGRlY3J5cHRWYWx1ZSA9IG9uRGVjcnlwdFxuICAgID8ge1xuICAgICAgICBvbkRlY3J5cHQsXG4gICAgICAgIGlzRGVjcnlwdGluZyxcbiAgICAgICAgaGFzRW5jcnlwdGVkRGF0YTogb3V0ZXJEZWNyeXB0Q3R4Py5oYXNFbmNyeXB0ZWREYXRhLFxuICAgICAgfVxuICAgIDogb3V0ZXJEZWNyeXB0Q3R4O1xuXG4gIHJldHVybiAoXG4gICAgPENvbnRleHRDYXJkUHJvdmlkZXI+XG4gICAgICA8UnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblJ1bkNsaWNrfT5cbiAgICAgICAgPFN0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25TdHJlYW1DbGlja30+XG4gICAgICAgICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2RlY3J5cHRWYWx1ZX0+XG4gICAgICAgICAgICB7dmlzaWJsZUJhc2ljQXR0cmlidXRlcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlbiBkaXZpZGUteSBkaXZpZGUtZ3JheS1hbHBoYS00MDAgbWItM1wiPlxuICAgICAgICAgICAgICAgIHtvcmRlcmVkQmFzaWNBdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSBhdHRyaWJ1dGVUb0Rpc3BsYXlGbltcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIGFzIGtleW9mIHR5cGVvZiBhdHRyaWJ1dGVUb0Rpc3BsYXlGblxuICAgICAgICAgICAgICAgICAgXT8uKGRpc3BsYXlEYXRhW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgZGlzcGxheURhdGFdKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29weWFibGVCYXNpY0F0dHJpYnV0ZSA9XG4gICAgICAgICAgICAgICAgICAgIGNvcHlhYmxlQmFzaWNBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGUgYXMgQXR0cmlidXRlS2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZGlzcGxheVZhbHVlID09PSAnc3RyaW5nJztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2F0dHJpYnV0ZX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTQgdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldEF0dHJpYnV0ZURpc3BsYXlOYW1lKGF0dHJpYnV0ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHtpc0NvcHlhYmxlQmFzaWNBdHRyaWJ1dGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggbWluLXctMCBtYXgtdy1bNzAlXSBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgdGV4dC1bMTNweF0gZm9udC1tb25vIHRleHQtZ3JheS0xMDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e2Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE1pZGRsZVRydW5jYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBncmlkVGVtcGxhdGVDb2x1bW5zOiAnbWlubWF4KDAsIDFmciknIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDb3B5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weVRleHQ9e2Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9e2BDb3B5ICR7Z2V0QXR0cmlidXRlRGlzcGxheU5hbWUoYXR0cmlidXRlKX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNocmluay0wIC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0IHRleHQtbGFiZWwtMTMgZm9udC1tb25vXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtkaXNwbGF5VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIHtpc0xvYWRpbmcgJiYgcmVzb3VyY2UgPT09ICdzbGVlcCcgJiYgIWRpc3BsYXlEYXRhLnJlc3VtZUF0ICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHktMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWluLWgtWzMycHhdIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgcm91bmRlZC1zbSBweC0yLjUgcHktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsxNHB4XSBmaXJzdC1sZXR0ZXI6dXBwZXJjYXNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZUF0XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTQgdy1bNTUlXVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yID8gKFxuICAgICAgICAgICAgICA8RXJyb3JDYXJkXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJGYWlsZWQgdG8gbG9hZCByZXNvdXJjZSBkZXRhaWxzXCJcbiAgICAgICAgICAgICAgICBkZXRhaWxzPXtlcnJvci5tZXNzYWdlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm15LTRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IGhhc0V4cGlyZWQgPyAoXG4gICAgICAgICAgICAgIDxFeHBpcmVkRGF0YU1lc3NhZ2UgLz5cbiAgICAgICAgICAgICkgOiByZXNvbHZlZEF0dHJpYnV0ZXMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7cmVzb2x2ZWRBdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQmxvY2tcbiAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIGtleT17YXR0cmlidXRlfVxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU9e2F0dHJpYnV0ZX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3BsYXlEYXRhW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgZGlzcGxheURhdGFdfVxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0PXtkaXNwbGF5Q29udGV4dH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9EZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L1N0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgIDwvUnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvQ29udGV4dENhcmRQcm92aWRlcj5cbiAgKTtcbn07XG4iXX0=
517
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXBhbmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2lkZWJhci9hdHRyaWJ1dGUtcGFuZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNoRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixrQkFBa0IsR0FDbkIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFB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RUFBQyxNQUFNLEdBQ2hCLENBQ0gsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUNmLEtBQUMsa0JBQWtCLEtBQUcsQ0FDdkIsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbEMsNEJBQ0csa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUNyQyxLQUFDLGNBQWMsSUFDYixTQUFTLEVBQUUsU0FBUyxFQUVwQixTQUFTLEVBQUUsU0FBUyxFQUNwQixLQUFLLEVBQUUsV0FBVyxDQUFDLFNBQXFDLENBQUMsRUFDekQsT0FBTyxFQUFFLGNBQWMsSUFIbEIsU0FBUyxDQUlkLENBQ0gsQ0FBQyxHQUNELENBQ0osQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUNxQixHQUNILEdBQ0wsR0FDUCxDQUN2QixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBwYXJzZVN0ZXBOYW1lLCBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscy9wYXJzZS1uYW1lJztcbmltcG9ydCB0eXBlIHsgRXZlbnQsIEhvb2ssIFN0ZXAsIFdvcmtmbG93UnVuIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB0eXBlIHsgTW9kZWxNZXNzYWdlIH0gZnJvbSAnYWknO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHR5cGUgeyBLZXlib2FyZEV2ZW50LCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0VuY3J5cHRlZE1hcmtlciwgaXNFeHBpcmVkTWFya2VyIH0gZnJvbSAnLi4vLi4vbGliL2h5ZHJhdGlvbic7XG5pbXBvcnQgeyBleHRyYWN0Q29udmVyc2F0aW9uLCBpc0RvU3RyZWFtU3RlcCB9IGZyb20gJy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgeyBDb3B5QnV0dG9uIH0gZnJvbSAnLi4vbmV3LXRyYWNlLXZpZXdlci9jb21wb25lbnRzL2NvcHktYnV0dG9uJztcbmltcG9ydCB7IE1pZGRsZVRydW5jYXRlIH0gZnJvbSAnLi4vbmV3LXRyYWNlLXZpZXdlci9jb21wb25lbnRzL21pZGRsZS10cnVuY2F0ZS9taWRkbGUtdHJ1bmNhdGUnO1xuaW1wb3J0IHsgQ29udGV4dENhcmRQcm92aWRlciB9IGZyb20gJy4uL3VpL2NvbnRleHQtY2FyZCc7XG5pbXBvcnQge1xuICBEZWNyeXB0Q2xpY2tDb250ZXh0LFxuICBSdW5DbGlja0NvbnRleHQsXG4gIFN0cmVhbUNsaWNrQ29udGV4dCxcbn0gZnJvbSAnLi4vdWkvZGF0YS1pbnNwZWN0b3InO1xuaW1wb3J0IHsgRXJyb3JDYXJkIH0gZnJvbSAnLi4vdWkvZXJyb3ItY2FyZCc7XG5pbXBvcnQgeyBFcnJvclN0YWNrQmxvY2ssIGlzU3RydWN0dXJlZEVycm9yIH0gZnJvbSAnLi4vdWkvZXJyb3Itc3RhY2stYmxvY2snO1xuaW1wb3J0IHsgU2tlbGV0b24gfSBmcm9tICcuLi91aS9za2VsZXRvbic7XG5pbXBvcnQgeyBUaW1lc3RhbXBUb29sdGlwIH0gZnJvbSAnLi4vdWkvdGltZXN0YW1wLXRvb2x0aXAnO1xuaW1wb3J0IHsgUnVuQXR0cmlidXRlc0NhcmQgfSBmcm9tICcuL2F0dHJpYnV0ZXMtYmxvY2snO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uVmlldyB9IGZyb20gJy4vY29udmVyc2F0aW9uLXZpZXcnO1xuaW1wb3J0IHsgQ29weWFibGVEYXRhQmxvY2ssIEVuY3J5cHRlZERhdGFCbG9jayB9IGZyb20gJy4vY29weWFibGUtZGF0YS1ibG9jayc7XG5pbXBvcnQgeyBEZXRhaWxDYXJkIH0gZnJvbSAnLi9kZXRhaWwtY2FyZCc7XG5cbi8qKlxuICogVGFiIGJ1dHRvbiBmb3IgY29udmVyc2F0aW9uL0pTT04gdG9nZ2xlXG4gKi9cbmZ1bmN0aW9uIFRhYkJ1dHRvbih7XG4gIGFjdGl2ZSxcbiAgb25DbGljayxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgb25DbGljazogKCkgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgYXJpYS1zZWxlY3RlZD17YWN0aXZlfVxuICAgICAgdGFiSW5kZXg9e2FjdGl2ZSA/IDAgOiAtMX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBjbGFzc05hbWU9XCJweC0zIHB5LTEuNSB0ZXh0LVsxMXB4XSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyAtbWItcHhcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgLy8gRXhwbGljaXQgc3R5bGVzIHRvIHByZXZlbnQgYXBwLWxldmVsIGJ1dHRvbiBvdmVycmlkZXMgd2hlbiB3ZWItc2hhcmVkXG4gICAgICAgIC8vIGlzIGVtYmVkZGVkIGluIGEgc2VsZi1ob3N0ZWQgYXBwLlxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGJvcmRlclRvcDogJ25vbmUnLFxuICAgICAgICBib3JkZXJMZWZ0OiAnbm9uZScsXG4gICAgICAgIGJvcmRlclJpZ2h0OiAnbm9uZScsXG4gICAgICAgIGJvcmRlckJvdHRvbTogYDJweCBzb2xpZCAke2FjdGl2ZSA/ICd2YXIoLS1kcy1ibHVlLTYwMCknIDogJ3RyYW5zcGFyZW50J31gLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICBjb2xvcjogYWN0aXZlID8gJ3ZhcigtLWRzLWdyYXktMTAwMCknIDogJ3ZhcigtLWRzLWdyYXktNjAwKScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuLyoqXG4gKiBTaGFyZWQgdGFiYmVkIGNvbnRhaW5lciB3aXRoIGFjY2Vzc2libGUgQVJJQSByb2xlcyBhbmQga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAqIFVzZWQgYnkgQ29udmVyc2F0aW9uV2l0aFRhYnMgZm9yIHRoZSBjb252ZXJzYXRpb24vSlNPTiB0b2dnbGUuXG4gKi9cbmZ1bmN0aW9uIFRhYmJlZENvbnRhaW5lcjxUIGV4dGVuZHMgc3RyaW5nPih7XG4gIHRhYnMsXG4gIGFjdGl2ZVRhYixcbiAgb25UYWJDaGFuZ2UsXG4gIGFyaWFMYWJlbCxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIHRhYnM6IHsgaWQ6IFQ7IGxhYmVsOiBzdHJpbmcgfVtdO1xuICBhY3RpdmVUYWI6IFQ7XG4gIG9uVGFiQ2hhbmdlOiAodGFiOiBUKSA9PiB2b2lkO1xuICBhcmlhTGFiZWw6IHN0cmluZztcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn0pIHtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09ICdBcnJvd1JpZ2h0JyAmJiBldmVudC5rZXkgIT09ICdBcnJvd0xlZnQnKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGFicy5maW5kSW5kZXgoKHQpID0+IHQuaWQgPT09IGFjdGl2ZVRhYik7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPVxuICAgICAgICBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0J1xuICAgICAgICAgID8gKGN1cnJlbnRJbmRleCArIDEpICUgdGFicy5sZW5ndGhcbiAgICAgICAgICA6IChjdXJyZW50SW5kZXggLSAxICsgdGFicy5sZW5ndGgpICUgdGFicy5sZW5ndGg7XG4gICAgICBvblRhYkNoYW5nZSh0YWJzW25leHRJbmRleF0uaWQpO1xuICAgIH0sXG4gICAgW3RhYnMsIGFjdGl2ZVRhYiwgb25UYWJDaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLW1kIGJvcmRlclwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGdhcC0xIGJvcmRlci1iXCJcbiAgICAgICAgcm9sZT1cInRhYmxpc3RcIlxuICAgICAgICBhcmlhLWxhYmVsPXthcmlhTGFiZWx9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7dGFicy5tYXAoKHRhYikgPT4gKFxuICAgICAgICAgIDxUYWJCdXR0b25cbiAgICAgICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICAgICAgYWN0aXZlPXthY3RpdmVUYWIgPT09IHRhYi5pZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uVGFiQ2hhbmdlKHRhYi5pZCl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RhYi5sYWJlbH1cbiAgICAgICAgICA8L1RhYkJ1dHRvbj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiByb2xlPVwidGFicGFuZWxcIj57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmNvbnN0IGNvbnZlcnNhdGlvblRhYnMgPSBbXG4gIHsgaWQ6ICdjb252ZXJzYXRpb24nIGFzIGNvbnN0LCBsYWJlbDogJ0NvbnZlcnNhdGlvbicgfSxcbiAgeyBpZDogJ2pzb24nIGFzIGNvbnN0LCBsYWJlbDogJ1JhdyBKU09OJyB9LFxuXTtcblxuLyoqXG4gKiBUYWJiZWQgdmlldyBmb3IgY29udmVyc2F0aW9uIGFuZCByYXcgSlNPTlxuICovXG5mdW5jdGlvbiBDb252ZXJzYXRpb25XaXRoVGFicyh7XG4gIGNvbnZlcnNhdGlvbixcbiAgYXJncyxcbn06IHtcbiAgY29udmVyc2F0aW9uOiBNb2RlbE1lc3NhZ2VbXTtcbiAgYXJnczogdW5rbm93bltdO1xufSkge1xuICBjb25zdCBbYWN0aXZlVGFiLCBzZXRBY3RpdmVUYWJdID0gdXNlU3RhdGU8J2NvbnZlcnNhdGlvbicgfCAnanNvbic+KFxuICAgICdjb252ZXJzYXRpb24nXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiSW5wdXRcIj5cbiAgICAgIDxUYWJiZWRDb250YWluZXJcbiAgICAgICAgdGFicz17Y29udmVyc2F0aW9uVGFic31cbiAgICAgICAgYWN0aXZlVGFiPXthY3RpdmVUYWJ9XG4gICAgICAgIG9uVGFiQ2hhbmdlPXtzZXRBY3RpdmVUYWJ9XG4gICAgICAgIGFyaWFMYWJlbD1cIkNvbnZlcnNhdGlvbiB2aWV3XCJcbiAgICAgID5cbiAgICAgICAge2FjdGl2ZVRhYiA9PT0gJ2NvbnZlcnNhdGlvbicgPyAoXG4gICAgICAgICAgPENvbnZlcnNhdGlvblZpZXcgbWVzc2FnZXM9e2NvbnZlcnNhdGlvbn0gLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtM1wiPlxuICAgICAgICAgICAge0FycmF5LmlzQXJyYXkoYXJncylcbiAgICAgICAgICAgICAgPyBhcmdzLm1hcCgodiwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZpcnN0Om10LTBcIiBrZXk9e2l9PlxuICAgICAgICAgICAgICAgICAgICB7SnNvbkJsb2NrKHYpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgOiBKc29uQmxvY2soYXJncyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L1RhYmJlZENvbnRhaW5lcj5cbiAgICA8L0RldGFpbENhcmQ+XG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVyIGEgdmFsdWUgd2l0aCB0aGUgc2hhcmVkIERhdGFJbnNwZWN0b3IgKE9iamVjdEluc3BlY3RvciB3aXRoXG4gKiBjdXN0b20gdGhlbWluZywgbm9kZVJlbmRlcmVyIGZvciBTdHJlYW1SZWYvQ2xhc3NJbnN0YW5jZVJlZiwgZXRjLilcbiAqL1xuZnVuY3Rpb24gRW5jcnlwdGVkRmllbGRCbG9jaygpIHtcbiAgcmV0dXJuIDxFbmNyeXB0ZWREYXRhQmxvY2sgLz47XG59XG5cbi8qKlxuICogSW5saW5lIGRpc3BsYXkgZm9yIGFuIGV4cGlyZWQgZmllbGQg4oCUIGZsYXQgbGFiZWwgaW5kaWNhdGluZyBkYXRhIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuXG4gKi9cbmZ1bmN0aW9uIEV4cGlyZWRGaWVsZEJsb2NrKCkge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgcm91bmRlZC1tZCBib3JkZXIgcHgtMyBweS0yIHRleHQteHNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTEwMCknLFxuICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+RGF0YSBleHBpcmVkPC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBKc29uQmxvY2sodmFsdWU6IHVua25vd24pIHtcbiAgcmV0dXJuIDxDb3B5YWJsZURhdGFCbG9jayBkYXRhPXt2YWx1ZX0gLz47XG59XG5cbmNvbnN0IGhhc0Rpc3BsYXlDb250ZW50ID0gKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiA9PiB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IDA7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDA7XG4gIHJldHVybiB0cnVlO1xufTtcblxudHlwZSBBdHRyaWJ1dGVLZXkgPVxuICB8IGtleW9mIFN0ZXBcbiAgfCBrZXlvZiBXb3JrZmxvd1J1blxuICB8IGtleW9mIEhvb2tcbiAgfCBrZXlvZiBFdmVudFxuICB8ICdvY2N1cnJlZEF0J1xuICB8ICdtb2R1bGVTcGVjaWZpZXInXG4gIHwgJ2V2ZW50RGF0YSdcbiAgfCAncmVzdW1lQXQnXG4gIHwgJ2V4cGlyZWRBdCdcbiAgfCAnd29ya2Zsb3dDb3JlVmVyc2lvbidcbiAgfCAncmVjZWl2ZWRDb3VudCdcbiAgfCAnbGFzdFJlY2VpdmVkQXQnXG4gIHwgJ2Rpc3Bvc2VkQXQnXG4gIHwgJ2lzU3lzdGVtJ1xuICB8ICdlcnJvckNvZGUnO1xuXG5jb25zdCBhdHRyaWJ1dGVPcmRlcjogQXR0cmlidXRlS2V5W10gPSBbXG4gICd3b3JrZmxvd05hbWUnLFxuICAnbW9kdWxlU3BlY2lmaWVyJyxcbiAgJ3N0ZXBOYW1lJyxcbiAgJ3N0YXR1cycsXG4gICdzdGVwSWQnLFxuICAnaG9va0lkJyxcbiAgJ2V2ZW50SWQnLFxuICAncnVuSWQnLFxuICAnYXR0ZW1wdCcsXG4gICd0b2tlbicsXG4gICdyZWNlaXZlZENvdW50JyxcbiAgJ2xhc3RSZWNlaXZlZEF0JyxcbiAgJ2Rpc3Bvc2VkQXQnLFxuICAnY29ycmVsYXRpb25JZCcsXG4gICdldmVudFR5cGUnLFxuICAnZGVwbG95bWVudElkJyxcbiAgJ3NwZWNWZXJzaW9uJyxcbiAgJ3dvcmtmbG93Q29yZVZlcnNpb24nLFxuICAnb3duZXJJZCcsXG4gICdwcm9qZWN0SWQnLFxuICAnZW52aXJvbm1lbnQnLFxuICAnZXhlY3V0aW9uQ29udGV4dCcsXG4gICdvY2N1cnJlZEF0JyxcbiAgJ2NyZWF0ZWRBdCcsXG4gICdzdGFydGVkQXQnLFxuICAndXBkYXRlZEF0JyxcbiAgJ2NvbXBsZXRlZEF0JyxcbiAgJ2V4cGlyZWRBdCcsXG4gICdyZXRyeUFmdGVyJyxcbiAgJ2Vycm9yJyxcbiAgJ21ldGFkYXRhJyxcbiAgJ2V2ZW50RGF0YScsXG4gICdpbnB1dCcsXG4gICdvdXRwdXQnLFxuICAnYXR0cmlidXRlcycsXG4gICdyZXN1bWVBdCcsXG5dO1xuXG5jb25zdCBzb3J0QnlBdHRyaWJ1dGVPcmRlciA9IChhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciA9PiB7XG4gIGNvbnN0IGFJbmRleCA9IGF0dHJpYnV0ZU9yZGVyLmluZGV4T2YoYSBhcyBBdHRyaWJ1dGVLZXkpIHx8IDA7XG4gIGNvbnN0IGJJbmRleCA9IGF0dHJpYnV0ZU9yZGVyLmluZGV4T2YoYiBhcyBBdHRyaWJ1dGVLZXkpIHx8IDA7XG4gIHJldHVybiBhSW5kZXggLSBiSW5kZXg7XG59O1xuXG4vKipcbiAqIERpc3BsYXkgbmFtZXMgZm9yIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgcmVuZGVyIGRpZmZlcmVudGx5IGZyb20gdGhlaXIga2V5LlxuICovXG5jb25zdCBhdHRyaWJ1dGVEaXNwbGF5TmFtZXM6IFBhcnRpYWw8UmVjb3JkPEF0dHJpYnV0ZUtleSwgc3RyaW5nPj4gPSB7XG4gIG1vZHVsZVNwZWNpZmllcjogJ01vZHVsZScsXG4gIHdvcmtmbG93TmFtZTogJ1dvcmtmbG93IE5hbWUnLFxuICBzdGVwTmFtZTogJ1N0ZXAgTmFtZScsXG4gIHN0ZXBJZDogJ1N0ZXAgSUQnLFxuICBob29rSWQ6ICdIb29rIElEJyxcbiAgYXR0ZW1wdDogJ0F0dGVtcHRzJyxcbiAgZXZlbnRJZDogJ0V2ZW50IElEJyxcbiAgcnVuSWQ6ICdSdW4gSUQnLFxuICB0b2tlbjogJ1Rva2VuJyxcbiAgZXZlbnRUeXBlOiAnRXZlbnQgVHlwZScsXG4gIGVycm9yQ29kZTogJ0Vycm9yIENvZGUnLFxuICBjb3JyZWxhdGlvbklkOiAnQ29ycmVsYXRpb24gSUQnLFxuICBkZXBsb3ltZW50SWQ6ICdEZXBsb3ltZW50IElEJyxcbiAgc3BlY1ZlcnNpb246ICdTcGVjIFZlcnNpb24nLFxuICB3b3JrZmxvd0NvcmVWZXJzaW9uOiAnQHdvcmtmbG93L2NvcmUgdmVyc2lvbicsXG4gIG9jY3VycmVkQXQ6ICdPY2N1cnJlZCcsXG4gIGNyZWF0ZWRBdDogJ0NyZWF0ZWQnLFxuICBzdGFydGVkQXQ6ICdTdGFydGVkJyxcbiAgdXBkYXRlZEF0OiAnVXBkYXRlZCcsXG4gIGNvbXBsZXRlZEF0OiAnQ29tcGxldGVkJyxcbiAgZXhwaXJlZEF0OiAnRXhwaXJlZCcsXG4gIHJldHJ5QWZ0ZXI6ICdSZXRyeSBBZnRlcicsXG4gIHJlc3VtZUF0OiAnUmVzdW1lJyxcbiAgbGFzdFJlY2VpdmVkQXQ6ICdMYXN0IFJlY2VpdmVkJyxcbiAgZGlzcG9zZWRBdDogJ0Rpc3Bvc2VkJyxcbiAgcmVjZWl2ZWRDb3VudDogJ1RpbWVzIFJlc29sdmVkJyxcbn07XG5cbi8qKlxuICogR2V0IHRoZSBkaXNwbGF5IG5hbWUgZm9yIGFuIGF0dHJpYnV0ZSBrZXkuXG4gKi9cbmNvbnN0IGdldEF0dHJpYnV0ZURpc3BsYXlOYW1lID0gKGF0dHJpYnV0ZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGF0dHJpYnV0ZURpc3BsYXlOYW1lc1thdHRyaWJ1dGUgYXMgQXR0cmlidXRlS2V5XSA/PyBhdHRyaWJ1dGU7XG59O1xuXG5jb25zdCBnZXRNb2R1bGVTcGVjaWZpZXJGcm9tTmFtZSA9ICh2YWx1ZTogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHJhdyA9IFN0cmluZyh2YWx1ZSk7XG4gIGNvbnN0IHBhcnNlZFN0ZXAgPSBwYXJzZVN0ZXBOYW1lKHJhdyk7XG4gIGlmIChwYXJzZWRTdGVwKSB7XG4gICAgcmV0dXJuIHBhcnNlZFN0ZXAubW9kdWxlU3BlY2lmaWVyO1xuICB9XG4gIGNvbnN0IHBhcnNlZFdvcmtmbG93ID0gcGFyc2VXb3JrZmxvd05hbWUocmF3KTtcbiAgaWYgKHBhcnNlZFdvcmtmbG93KSB7XG4gICAgcmV0dXJuIHBhcnNlZFdvcmtmbG93Lm1vZHVsZVNwZWNpZmllcjtcbiAgfVxuICByZXR1cm4gcmF3O1xufTtcblxuY29uc3QgcGFyc2VEYXRlVmFsdWUgPSAodmFsdWU6IHVua25vd24pOiBEYXRlIHwgbnVsbCA9PiB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBOdW1iZXIuaXNOYU4odmFsdWUuZ2V0VGltZSgpKSA/IG51bGwgOiB2YWx1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBkYXRlID1cbiAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gbmV3IERhdGUodmFsdWUpIDogbmV3IERhdGUoU3RyaW5nKHZhbHVlKSk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gbnVsbCA6IGRhdGU7XG59O1xuXG5jb25zdCBmb3JtYXRMb2NhbE1pbGxpc2Vjb25kVGltZSA9IChkYXRlOiBEYXRlKTogc3RyaW5nID0+XG4gIGZvcm1hdChkYXRlLCAnTU1NIGRkIEhIOm1tOnNzLlNTIE9PJykudG9VcHBlckNhc2UoKTtcblxuZXhwb3J0IGNvbnN0IGxvY2FsTWlsbGlzZWNvbmRUaW1lID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZGF0ZSA9IHBhcnNlRGF0ZVZhbHVlKHZhbHVlKTtcbiAgaWYgKCFkYXRlKSB7XG4gICAgcmV0dXJuICctJztcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRMb2NhbE1pbGxpc2Vjb25kVGltZShkYXRlKTtcbn07XG5cbmNvbnN0IGxvY2FsTWlsbGlzZWNvbmRUaW1lT3JOdWxsID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGRhdGUgPSBwYXJzZURhdGVWYWx1ZSh2YWx1ZSk7XG4gIGlmICghZGF0ZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBmb3JtYXRMb2NhbE1pbGxpc2Vjb25kVGltZShkYXRlKTtcbn07XG5cbmNvbnN0IHRpbWVzdGFtcFdpdGhUb29sdGlwT3JOdWxsID0gKHZhbHVlOiB1bmtub3duKTogUmVhY3ROb2RlIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGRhdGUgPSBwYXJzZURhdGVWYWx1ZSh2YWx1ZSk7XG4gIGlmICghZGF0ZSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiAoXG4gICAgPFRpbWVzdGFtcFRvb2x0aXAgZGF0ZT17ZGF0ZX0+XG4gICAgICA8c3Bhbj57Zm9ybWF0TG9jYWxNaWxsaXNlY29uZFRpbWUoZGF0ZSl9PC9zcGFuPlxuICAgIDwvVGltZXN0YW1wVG9vbHRpcD5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBEaXNwbGF5Q29udGV4dCB7XG4gIHN0ZXBOYW1lPzogc3RyaW5nO1xufVxuXG5jb25zdCBhdHRyaWJ1dGVUb0Rpc3BsYXlGbjogUmVjb3JkPFxuICBBdHRyaWJ1dGVLZXksXG4gICh2YWx1ZTogdW5rbm93biwgY29udGV4dD86IERpc3BsYXlDb250ZXh0KSA9PiBudWxsIHwgc3RyaW5nIHwgUmVhY3ROb2RlXG4+ID0ge1xuICAvLyBOYW1lcyB0aGF0IG5lZWQgcHJldHR5LXByaW50aW5nXG4gIHdvcmtmbG93TmFtZTogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgbW9kdWxlU3BlY2lmaWVyOiAodmFsdWU6IHVua25vd24pID0+IGdldE1vZHVsZVNwZWNpZmllckZyb21OYW1lKHZhbHVlKSxcbiAgc3RlcE5hbWU6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIC8vIElEc1xuICBydW5JZDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgc3RlcElkOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIGhvb2tJZDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICBldmVudElkOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIC8vIFJ1bi9zdGVwIGRldGFpbHNcbiAgc3RhdHVzOiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICBhdHRlbXB0OiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIC8vIEhvb2sgZGV0YWlsc1xuICB0b2tlbjogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICBpc1dlYmhvb2s6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgaXNTeXN0ZW06ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgcmVjZWl2ZWRDb3VudDogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICBsYXN0UmVjZWl2ZWRBdDogbG9jYWxNaWxsaXNlY29uZFRpbWVPck51bGwsXG4gIGRpc3Bvc2VkQXQ6IGxvY2FsTWlsbGlzZWNvbmRUaW1lT3JOdWxsLFxuICAvLyBFdmVudCBkZXRhaWxzXG4gIGV2ZW50VHlwZTogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICBjb3JyZWxhdGlvbklkOiAodmFsdWU6IHVua25vd24pID0+IFN0cmluZyh2YWx1ZSksXG4gIC8vIFByb2plY3QgZGV0YWlsc1xuICBkZXBsb3ltZW50SWQ6ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgc3BlY1ZlcnNpb246ICh2YWx1ZTogdW5rbm93bikgPT4gU3RyaW5nKHZhbHVlKSxcbiAgd29ya2Zsb3dDb3JlVmVyc2lvbjogKHZhbHVlOiB1bmtub3duKSA9PiBTdHJpbmcodmFsdWUpLFxuICAvLyBUZW5hbmN5ICh3ZSBkb24ndCBzaG93IHRoZXNlKVxuICBvd25lcklkOiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICBwcm9qZWN0SWQ6IChfdmFsdWU6IHVua25vd24pID0+IG51bGwsXG4gIGVudmlyb25tZW50OiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICBleGVjdXRpb25Db250ZXh0OiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICAvLyBBdHRyaWJ1dGVzIOKAlCBzdHJpbmctc3RyaW5nIG1ldGFkYXRhIGF0dGFjaGVkIHRvIHRoZSBydW4uXG4gIC8vIFJlbmRlcmVkIGFzIGtleS12YWx1ZSByb3dzIGluIGl0cyBvd24gY29sbGFwc2libGUgRGV0YWlsQ2FyZDtcbiAgLy8gaWYgZW1wdHkvbWlzc2luZywgaGlkZGVuIGJ5IHRoZSBoYXNEaXNwbGF5Q29udGVudCBnYXRlLlxuICBhdHRyaWJ1dGVzOiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAoIWhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIDxSdW5BdHRyaWJ1dGVzQ2FyZCBhdHRyaWJ1dGVzPXt2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAvPjtcbiAgfSxcbiAgLy8gRGF0ZXMg4oCUIHdyYXBwZWQgd2l0aCBUaW1lc3RhbXBUb29sdGlwIHNob3dpbmcgVVRDL2xvY2FsICsgcmVsYXRpdmUgdGltZVxuICBvY2N1cnJlZEF0OiB0aW1lc3RhbXBXaXRoVG9vbHRpcE9yTnVsbCxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXBXaXRoVG9vbHRpcE9yTnVsbCxcbiAgc3RhcnRlZEF0OiB0aW1lc3RhbXBXaXRoVG9vbHRpcE9yTnVsbCxcbiAgdXBkYXRlZEF0OiAoX3ZhbHVlOiB1bmtub3duKSA9PiBudWxsLFxuICBjb21wbGV0ZWRBdDogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIGV4cGlyZWRBdDogKF92YWx1ZTogdW5rbm93bikgPT4gbnVsbCxcbiAgcmV0cnlBZnRlcjogdGltZXN0YW1wV2l0aFRvb2x0aXBPck51bGwsXG4gIHJlc3VtZUF0OiB0aW1lc3RhbXBXaXRoVG9vbHRpcE9yTnVsbCxcbiAgLy8gUmVzb2x2ZWQgYXR0cmlidXRlcywgd29uJ3QgYWN0dWFsbHkgdXNlIHRoaXMgZnVuY3Rpb25cbiAgbWV0YWRhdGE6ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWUpKSByZXR1cm4gPEVuY3J5cHRlZERhdGFCbG9jayAvPjtcbiAgICBpZiAoaXNFeHBpcmVkTWFya2VyKHZhbHVlKSkgcmV0dXJuIDxFeHBpcmVkRmllbGRCbG9jayAvPjtcbiAgICByZXR1cm4gSnNvbkJsb2NrKHZhbHVlKTtcbiAgfSxcbiAgaW5wdXQ6ICh2YWx1ZTogdW5rbm93biwgY29udGV4dD86IERpc3BsYXlDb250ZXh0KSA9PiB7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIklucHV0XCI+XG4gICAgICAgICAgPEVuY3J5cHRlZEZpZWxkQmxvY2sgLz5cbiAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzRXhwaXJlZE1hcmtlcih2YWx1ZSkpIHJldHVybiA8RXhwaXJlZEZpZWxkQmxvY2sgLz47XG4gICAgLy8gQ2hlY2sgaWYgaW5wdXQgaGFzIGFyZ3MgKyBjbG9zdXJlIHZhcnMgc3RydWN0dXJlXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2FyZ3MnIGluIHZhbHVlKSB7XG4gICAgICBjb25zdCB7IGFyZ3MsIGNsb3N1cmVWYXJzLCB0aGlzVmFsIH0gPSB2YWx1ZSBhcyB7XG4gICAgICAgIGFyZ3M6IHVua25vd25bXTtcbiAgICAgICAgY2xvc3VyZVZhcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgdGhpc1ZhbD86IHVua25vd247XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFzQ2xvc3VyZVZhcnMgPSBoYXNEaXNwbGF5Q29udGVudChjbG9zdXJlVmFycyk7XG4gICAgICBjb25zdCBoYXNUaGlzVmFsID0gaGFzRGlzcGxheUNvbnRlbnQodGhpc1ZhbCk7XG4gICAgICBjb25zdCBoYXNBcmdzID0gaGFzRGlzcGxheUNvbnRlbnQoYXJncyk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBkb1N0cmVhbVN0ZXAgLSBzaG93IGNvbnZlcnNhdGlvbiB2aWV3IHdpdGggdGFic1xuICAgICAgaWYgKGNvbnRleHQ/LnN0ZXBOYW1lICYmIGlzRG9TdHJlYW1TdGVwKGNvbnRleHQuc3RlcE5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGV4dHJhY3RDb252ZXJzYXRpb24oYXJncyk7XG4gICAgICAgIGlmIChjb252ZXJzYXRpb24gJiYgY29udmVyc2F0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPENvbnZlcnNhdGlvbldpdGhUYWJzIGNvbnZlcnNhdGlvbj17Y29udmVyc2F0aW9ufSBhcmdzPXthcmdzfSAvPlxuICAgICAgICAgICAgICB7aGFzQ2xvc3VyZVZhcnMgJiYgKFxuICAgICAgICAgICAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJDbG9zdXJlIFZhcmlhYmxlc1wiPlxuICAgICAgICAgICAgICAgICAge0pzb25CbG9jayhjbG9zdXJlVmFycyl9XG4gICAgICAgICAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7aGFzVGhpc1ZhbCAmJiAoXG4gICAgICAgICAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIlRoaXMgVmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIHtKc29uQmxvY2sodGhpc1ZhbCl9XG4gICAgICAgICAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBEb24ndCByZW5kZXIgYW4gZW1wdHkgXCJJbnB1dCAoMCBhcmd1bWVudHMpXCIgY2FyZCB3aGVuIG5vIGlucHV0IGV4aXN0cy5cbiAgICAgIGlmICghaGFzQXJncyAmJiAhaGFzQ2xvc3VyZVZhcnMgJiYgIWhhc1RoaXNWYWwpIHtcbiAgICAgICAgcmV0dXJuIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJJbnB1dCAobm8gZGF0YSlcIiBkaXNhYmxlZCAvPjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiSW5wdXRcIj5cbiAgICAgICAgICAgIHtBcnJheS5pc0FycmF5KGFyZ3MpXG4gICAgICAgICAgICAgID8gYXJncy5tYXAoKHYsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmaXJzdDptdC0wXCIga2V5PXtpfT5cbiAgICAgICAgICAgICAgICAgICAge0pzb25CbG9jayh2KX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgIDogSnNvbkJsb2NrKGFyZ3MpfVxuICAgICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICAgICB7aGFzQ2xvc3VyZVZhcnMgJiYgKFxuICAgICAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkNsb3N1cmUgVmFyaWFibGVzXCI+XG4gICAgICAgICAgICAgIHtKc29uQmxvY2soY2xvc3VyZVZhcnMpfVxuICAgICAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hhc1RoaXNWYWwgJiYgKFxuICAgICAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkNvbnRleHRcIj57SnNvbkJsb2NrKHRoaXNWYWwpfTwvRGV0YWlsQ2FyZD5cbiAgICAgICAgICApfVxuICAgICAgICA8Lz5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IHRyZWF0IGFzIHBsYWluIGFycmF5IG9yIG9iamVjdFxuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gPERldGFpbENhcmQgc3VtbWFyeT1cIklucHV0IChubyBkYXRhKVwiIGRpc2FibGVkIC8+O1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIklucHV0XCI+XG4gICAgICAgIHtBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKCh2LCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmaXJzdDptdC0wXCIga2V5PXtpfT5cbiAgICAgICAgICAgICAgICB7SnNvbkJsb2NrKHYpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkpXG4gICAgICAgICAgOiBKc29uQmxvY2sodmFsdWUpfVxuICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICk7XG4gIH0sXG4gIG91dHB1dDogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIk91dHB1dFwiPlxuICAgICAgICAgIDxFbmNyeXB0ZWRGaWVsZEJsb2NrIC8+XG4gICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoaXNFeHBpcmVkTWFya2VyKHZhbHVlKSkgcmV0dXJuIDxFeHBpcmVkRmllbGRCbG9jayAvPjtcbiAgICByZXR1cm4gPERldGFpbENhcmQgc3VtbWFyeT1cIk91dHB1dFwiPntKc29uQmxvY2sodmFsdWUpfTwvRGV0YWlsQ2FyZD47XG4gIH0sXG4gIGVycm9yOiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiRXJyb3JcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICA8RW5jcnlwdGVkRmllbGRCbG9jayAvPlxuICAgICAgICA8L0RldGFpbENhcmQ+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaXNFeHBpcmVkTWFya2VyKHZhbHVlKSkgcmV0dXJuIDxFeHBpcmVkRmllbGRCbG9jayAvPjtcbiAgICBpZiAoIWhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBTdHJ1Y3R1cmVkIHdvcmtmbG93IGVycm9ycyBtYXkgYmUgcGVyc2lzdGVkIGFzIGVpdGhlciBgeyBtZXNzYWdlIH1gIG9yXG4gICAgLy8gYHsgbWVzc2FnZSwgc3RhY2sgfWAuIFJlbmRlciBib3RoIHdpdGggdGhlIGRlZGljYXRlZCBlcnJvciBibG9jay5cbiAgICBpZiAoaXNTdHJ1Y3R1cmVkRXJyb3IodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PVwiRXJyb3JcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXt2YWx1ZX0gLz5cbiAgICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkVycm9yXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgIHtKc29uQmxvY2sodmFsdWUpfVxuICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICk7XG4gIH0sXG4gIGV2ZW50RGF0YTogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkV2ZW50IERhdGFcIiBkZWZhdWx0T3Blbj5cbiAgICAgICAgICA8RW5jcnlwdGVkRmllbGRCbG9jayAvPlxuICAgICAgICA8L0RldGFpbENhcmQ+XG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaXNFeHBpcmVkTWFya2VyKHZhbHVlKSkgcmV0dXJuIDxFeHBpcmVkRmllbGRCbG9jayAvPjtcbiAgICBpZiAoIWhhc0Rpc3BsYXlDb250ZW50KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJFdmVudCBEYXRhXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgIHtKc29uQmxvY2sodmFsdWUpfVxuICAgICAgPC9EZXRhaWxDYXJkPlxuICAgICk7XG4gIH0sXG4gIGVycm9yQ29kZTogKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfSxcbn07XG5cbmNvbnN0IHJlc29sdmFibGVBdHRyaWJ1dGVzID0gW1xuICAnaW5wdXQnLFxuICAnb3V0cHV0JyxcbiAgJ2Vycm9yJyxcbiAgJ21ldGFkYXRhJyxcbiAgJ2F0dHJpYnV0ZXMnLFxuICAnZXZlbnREYXRhJyxcbl07XG5cbi8vIEF0dHJpYnV0ZXMgd2hvc2UgZGlzcGxheUZuIHJlbmRlcnMgaXRzIG93biBzZWN0aW9uIGhlYWRlciB2aWEgRGV0YWlsQ2FyZCxcbi8vIHNvIHRoZSBvdXRlciBBdHRyaWJ1dGVCbG9jayBzaG91bGQgbm90IGR1cGxpY2F0ZSB0aGUgbGFiZWwuXG5jb25zdCBzZWxmSGVhZGVyZWRBdHRyaWJ1dGVzID0gbmV3IFNldChbXG4gICdpbnB1dCcsXG4gICdvdXRwdXQnLFxuICAnZXJyb3InLFxuICAnYXR0cmlidXRlcycsXG4gICdldmVudERhdGEnLFxuXSk7XG5cbmNvbnN0IEV4cGlyZWREYXRhTWVzc2FnZSA9ICgpID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT1cInRleHQtY29weS0xMiByb3VuZGVkLW1kIGJvcmRlciBwLTQgbXktMlwiXG4gICAgc3R5bGU9e3tcbiAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS0zMDApJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScsXG4gICAgfX1cbiAgPlxuICAgIDxzcGFuPlRoZSBkYXRhIGZvciB0aGlzIHJ1biBoYXMgZXhwaXJlZCBhbmQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS48L3NwYW4+XG4gIDwvZGl2PlxuKTtcblxuY29uc3QgY29weWFibGVCYXNpY0F0dHJpYnV0ZXMgPSBuZXcgU2V0PEF0dHJpYnV0ZUtleT4oW1xuICAnc3RlcElkJyxcbiAgJ2hvb2tJZCcsXG4gICdldmVudElkJyxcbiAgJ2RlcGxveW1lbnRJZCcsXG4gICdtb2R1bGVTcGVjaWZpZXInLFxuXSk7XG5cbmV4cG9ydCBjb25zdCBBdHRyaWJ1dGVCbG9jayA9ICh7XG4gIGF0dHJpYnV0ZSxcbiAgdmFsdWUsXG4gIGlzTG9hZGluZyxcbiAgaW5saW5lID0gZmFsc2UsXG4gIGNvbnRleHQsXG59OiB7XG4gIGF0dHJpYnV0ZTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgaW5saW5lPzogYm9vbGVhbjtcbiAgY29udGV4dD86IERpc3BsYXlDb250ZXh0O1xufSkgPT4ge1xuICBjb25zdCBkZWNyeXB0Q3R4ID0gdXNlQ29udGV4dChEZWNyeXB0Q2xpY2tDb250ZXh0KTtcbiAgY29uc3QgaXNFeHBhbmRhYmxlTG9hZGluZ1RhcmdldCA9XG4gICAgYXR0cmlidXRlID09PSAnaW5wdXQnIHx8XG4gICAgYXR0cmlidXRlID09PSAnb3V0cHV0JyB8fFxuICAgIGF0dHJpYnV0ZSA9PT0gJ2V2ZW50RGF0YSc7XG4gIGlmIChpc0xvYWRpbmcgJiYgaXNFeHBhbmRhYmxlTG9hZGluZ1RhcmdldCAmJiAhaGFzRGlzcGxheUNvbnRlbnQodmFsdWUpKSB7XG4gICAgY29uc3QgbGFiZWwgPVxuICAgICAgYXR0cmlidXRlID09PSAnZXZlbnREYXRhJ1xuICAgICAgICA/ICdFdmVudCBEYXRhJ1xuICAgICAgICA6IGF0dHJpYnV0ZSA9PT0gJ291dHB1dCdcbiAgICAgICAgICA/ICdPdXRwdXQnXG4gICAgICAgICAgOiAnSW5wdXQnO1xuICAgIGlmIChkZWNyeXB0Q3R4Py5oYXNFbmNyeXB0ZWREYXRhKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8RGV0YWlsQ2FyZCBzdW1tYXJ5PXtsYWJlbH0gZGVmYXVsdE9wZW49e2F0dHJpYnV0ZSA9PT0gJ2V2ZW50RGF0YSd9PlxuICAgICAgICAgIDxFbmNyeXB0ZWRGaWVsZEJsb2NrIC8+XG4gICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiA8RGV0YWlsQ2FyZCBzdW1tYXJ5PXtsYWJlbH0gLz47XG4gIH1cblxuICBjb25zdCBkaXNwbGF5Rm4gPVxuICAgIGF0dHJpYnV0ZVRvRGlzcGxheUZuW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgYXR0cmlidXRlVG9EaXNwbGF5Rm5dO1xuICBpZiAoIWRpc3BsYXlGbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlGbih2YWx1ZSwgY29udGV4dCk7XG4gIGlmICghZGlzcGxheVZhbHVlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaW5saW5lKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtWzExcHhdIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHthdHRyaWJ1dGV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1bMTFweF1cIiBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknIH19PlxuICAgICAgICAgIHtkaXNwbGF5VmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoc2VsZkhlYWRlcmVkQXR0cmlidXRlcy5oYXMoYXR0cmlidXRlKSkge1xuICAgIHJldHVybiA8PntkaXNwbGF5VmFsdWV9PC8+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICB7dHlwZW9mIGlzTG9hZGluZyA9PT0gJ2Jvb2xlYW4nICYmIGlzTG9hZGluZyAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTkgcmlnaHQtNFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFuaW1hdGUtc3BpbiByb3VuZGVkLWZ1bGwgaC00IHctNCBib3JkZXItYi0yXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxkaXYga2V5PXthdHRyaWJ1dGV9IGNsYXNzTmFtZT1cIm15LTIgZmxleCBmbGV4LWNvbCBnYXAtMFwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTE0IHRleHQtZ3JheS0xMDAwIGZvbnQtbWVkaXVtIGZpcnN0LWxldHRlcjp1cHBlcmNhc2VcIj5cbiAgICAgICAgICB7YXR0cmlidXRlfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHNcIiBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwMCknIH19PlxuICAgICAgICAgIHtkaXNwbGF5VmFsdWV9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IEF0dHJpYnV0ZVBhbmVsID0gKHtcbiAgZGF0YSxcbiAgbW9kdWxlU3BlY2lmaWVyLFxuICBpc0xvYWRpbmcsXG4gIGVycm9yLFxuICBleHBpcmVkQXQsXG4gIG9uU3RyZWFtQ2xpY2ssXG4gIG9uUnVuQ2xpY2ssXG4gIG9uRGVjcnlwdCxcbiAgaXNEZWNyeXB0aW5nID0gZmFsc2UsXG4gIHJlc291cmNlLFxufToge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbW9kdWxlU3BlY2lmaWVyPzogc3RyaW5nO1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICBlcnJvcj86IEVycm9yO1xuICBleHBpcmVkQXQ/OiBzdHJpbmcgfCBEYXRlO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhIHN0cmVhbSByZWZlcmVuY2UgaXMgY2xpY2tlZCAqL1xuICBvblN0cmVhbUNsaWNrPzogKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgcnVuIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uUnVuQ2xpY2s/OiAocnVuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYW4gZW5jcnlwdGVkIG1hcmtlciBpcyBjbGlja2VkICh0cmlnZ2VycyBkZWNyeXB0aW9uKSAqL1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciBkZWNyeXB0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICAvKiogUmVzb3VyY2UgdHlwZSBvZiB0aGUgc2VsZWN0ZWQgc3BhbiDigJQgdXNlZCB0byBzaG93IHRhcmdldGVkIGxvYWRpbmcgc2tlbGV0b25zLiAqL1xuICByZXNvdXJjZT86IHN0cmluZztcbn0pID0+IHtcbiAgLy8gRXh0cmFjdCB3b3JrZmxvd0NvcmVWZXJzaW9uIGZyb20gZXhlY3V0aW9uQ29udGV4dCBmb3IgZGlzcGxheVxuICBjb25zdCBkaXNwbGF5RGF0YSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4uZGF0YSB9O1xuICAgIGNvbnN0IGV4ZWNDdHggPSBkYXRhLmV4ZWN1dGlvbkNvbnRleHQgYXNcbiAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGlmIChleGVjQ3R4Py53b3JrZmxvd0NvcmVWZXJzaW9uKSB7XG4gICAgICByZXN1bHQud29ya2Zsb3dDb3JlVmVyc2lvbiA9IGV4ZWNDdHgud29ya2Zsb3dDb3JlVmVyc2lvbjtcbiAgICB9XG4gICAgaWYgKG1vZHVsZVNwZWNpZmllcikge1xuICAgICAgcmVzdWx0Lm1vZHVsZVNwZWNpZmllciA9IG1vZHVsZVNwZWNpZmllcjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhLnN0ZXBOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzdWx0Lm1vZHVsZVNwZWNpZmllciA9IGRhdGEuc3RlcE5hbWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YS53b3JrZmxvd05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXN1bHQubW9kdWxlU3BlY2lmaWVyID0gZGF0YS53b3JrZmxvd05hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIFtkYXRhLCBtb2R1bGVTcGVjaWZpZXJdKTtcbiAgY29uc3QgaGFzRXhwaXJlZCA9IGV4cGlyZWRBdCAhPSBudWxsICYmIG5ldyBEYXRlKGV4cGlyZWRBdCkgPCBuZXcgRGF0ZSgpO1xuICBjb25zdCBiYXNpY0F0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhkaXNwbGF5RGF0YSlcbiAgICAuZmlsdGVyKChrZXkpID0+ICFyZXNvbHZhYmxlQXR0cmlidXRlcy5pbmNsdWRlcyhrZXkpKVxuICAgIC5zb3J0KHNvcnRCeUF0dHJpYnV0ZU9yZGVyKTtcbiAgY29uc3QgcmVzb2x2ZWRBdHRyaWJ1dGVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcHJlc2VudCA9IE9iamVjdC5rZXlzKGRpc3BsYXlEYXRhKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiByZXNvbHZhYmxlQXR0cmlidXRlcy5pbmNsdWRlcyhrZXkpKVxuICAgICAgLnNvcnQoc29ydEJ5QXR0cmlidXRlT3JkZXIpO1xuXG4gICAgaWYgKCFpc0xvYWRpbmcpIHJldHVybiBwcmVzZW50O1xuXG4gICAgaWYgKHJlc291cmNlID09PSAnc2xlZXAnKSByZXR1cm4gcHJlc2VudDtcblxuICAgIC8vIER1cmluZyBsb2FkaW5nLCBlbnN1cmUgc2VjdGlvbnMgYXBwZWFyIHNvIHRoZWlyIHNrZWxldG9ucyByZW5kZXJcbiAgICAvLyBpbiB0aGUgY29ycmVjdCBwb3NpdGlvbiAoYWJvdmUgdGhlIGV2ZW50cyBzZWN0aW9uKS5cbiAgICBjb25zdCBsb2FkaW5nRGVmYXVsdHMgPSBbJ2lucHV0JywgJ291dHB1dCddO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGxvYWRpbmdEZWZhdWx0cykge1xuICAgICAgaWYgKCFwcmVzZW50LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgcHJlc2VudC5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVzZW50LnNvcnQoc29ydEJ5QXR0cmlidXRlT3JkZXIpO1xuICB9LCBbZGlzcGxheURhdGEsIGlzTG9hZGluZywgcmVzb3VyY2VdKTtcblxuICAvLyBGaWx0ZXIgb3V0IGF0dHJpYnV0ZXMgdGhhdCByZXR1cm4gbnVsbFxuICBjb25zdCB2aXNpYmxlQmFzaWNBdHRyaWJ1dGVzID0gYmFzaWNBdHRyaWJ1dGVzLmZpbHRlcigoYXR0cmlidXRlKSA9PiB7XG4gICAgY29uc3QgZGlzcGxheUZuID1cbiAgICAgIGF0dHJpYnV0ZVRvRGlzcGxheUZuW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgYXR0cmlidXRlVG9EaXNwbGF5Rm5dO1xuICAgIGlmICghZGlzcGxheUZuKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZGlzcGxheVZhbHVlID0gZGlzcGxheUZuKFxuICAgICAgZGlzcGxheURhdGFbYXR0cmlidXRlIGFzIGtleW9mIHR5cGVvZiBkaXNwbGF5RGF0YV1cbiAgICApO1xuICAgIHJldHVybiBkaXNwbGF5VmFsdWUgIT09IG51bGw7XG4gIH0pO1xuXG4gIC8vIEtlZXAgYG1vZHVsZVNwZWNpZmllcmAgaW1tZWRpYXRlbHkgYWZ0ZXIgYHdvcmtmbG93TmFtZWAgb3IgYHN0ZXBOYW1lYC5cbiAgY29uc3Qgb3JkZXJlZEJhc2ljQXR0cmlidXRlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbLi4udmlzaWJsZUJhc2ljQXR0cmlidXRlc107XG4gICAgY29uc3QgbW9kdWxlU3BlY2lmaWVySW5kZXggPSBhdHRyaWJ1dGVzLmluZGV4T2YoJ21vZHVsZVNwZWNpZmllcicpO1xuICAgIGlmIChtb2R1bGVTcGVjaWZpZXJJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMuc3BsaWNlKG1vZHVsZVNwZWNpZmllckluZGV4LCAxKTtcbiAgICBjb25zdCB3b3JrZmxvd05hbWVJbmRleCA9IGF0dHJpYnV0ZXMuaW5kZXhPZignd29ya2Zsb3dOYW1lJyk7XG4gICAgaWYgKHdvcmtmbG93TmFtZUluZGV4ICE9PSAtMSkge1xuICAgICAgYXR0cmlidXRlcy5zcGxpY2Uod29ya2Zsb3dOYW1lSW5kZXggKyAxLCAwLCAnbW9kdWxlU3BlY2lmaWVyJyk7XG4gICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBjb25zdCBzdGVwTmFtZUluZGV4ID0gYXR0cmlidXRlcy5pbmRleE9mKCdzdGVwTmFtZScpO1xuICAgIGlmIChzdGVwTmFtZUluZGV4ICE9PSAtMSkge1xuICAgICAgYXR0cmlidXRlcy5zcGxpY2Uoc3RlcE5hbWVJbmRleCArIDEsIDAsICdtb2R1bGVTcGVjaWZpZXInKTtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMudW5zaGlmdCgnbW9kdWxlU3BlY2lmaWVyJyk7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gIH0sIFt2aXNpYmxlQmFzaWNBdHRyaWJ1dGVzXSk7XG5cbiAgLy8gTWVtb2l6ZSBjb250ZXh0IG9iamVjdCB0byBhdm9pZCBvYmplY3QgcmVjb25zdHJ1Y3Rpb24gb24gcmVuZGVyXG4gIGNvbnN0IGRpc3BsYXlDb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgc3RlcE5hbWU6IGRpc3BsYXlEYXRhLnN0ZXBOYW1lIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICB9KSxcbiAgICBbZGlzcGxheURhdGEuc3RlcE5hbWVdXG4gICk7XG4gIGNvbnN0IG91dGVyRGVjcnlwdEN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG4gIGNvbnN0IGRlY3J5cHRWYWx1ZSA9IG9uRGVjcnlwdFxuICAgID8ge1xuICAgICAgICBvbkRlY3J5cHQsXG4gICAgICAgIGlzRGVjcnlwdGluZyxcbiAgICAgICAgaGFzRW5jcnlwdGVkRGF0YTogb3V0ZXJEZWNyeXB0Q3R4Py5oYXNFbmNyeXB0ZWREYXRhLFxuICAgICAgfVxuICAgIDogb3V0ZXJEZWNyeXB0Q3R4O1xuXG4gIHJldHVybiAoXG4gICAgPENvbnRleHRDYXJkUHJvdmlkZXI+XG4gICAgICA8UnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblJ1bkNsaWNrfT5cbiAgICAgICAgPFN0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25TdHJlYW1DbGlja30+XG4gICAgICAgICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2RlY3J5cHRWYWx1ZX0+XG4gICAgICAgICAgICB7dmlzaWJsZUJhc2ljQXR0cmlidXRlcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIG92ZXJmbG93LWhpZGRlbiBkaXZpZGUteSBkaXZpZGUtZ3JheS1hbHBoYS00MDAgbWItM1wiPlxuICAgICAgICAgICAgICAgIHtvcmRlcmVkQmFzaWNBdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSBhdHRyaWJ1dGVUb0Rpc3BsYXlGbltcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIGFzIGtleW9mIHR5cGVvZiBhdHRyaWJ1dGVUb0Rpc3BsYXlGblxuICAgICAgICAgICAgICAgICAgXT8uKGRpc3BsYXlEYXRhW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgZGlzcGxheURhdGFdKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29weWFibGVCYXNpY0F0dHJpYnV0ZSA9XG4gICAgICAgICAgICAgICAgICAgIGNvcHlhYmxlQmFzaWNBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGUgYXMgQXR0cmlidXRlS2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZGlzcGxheVZhbHVlID09PSAnc3RyaW5nJztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2F0dHJpYnV0ZX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTQgdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2dldEF0dHJpYnV0ZURpc3BsYXlOYW1lKGF0dHJpYnV0ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHtpc0NvcHlhYmxlQmFzaWNBdHRyaWJ1dGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggbWluLXctMCBtYXgtdy1bNzAlXSBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgdGV4dC1bMTNweF0gZm9udC1tb25vIHRleHQtZ3JheS0xMDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e2Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE1pZGRsZVRydW5jYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBncmlkVGVtcGxhdGVDb2x1bW5zOiAnbWlubWF4KDAsIDFmciknIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDb3B5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weVRleHQ9e2Rpc3BsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9e2BDb3B5ICR7Z2V0QXR0cmlidXRlRGlzcGxheU5hbWUoYXR0cmlidXRlKX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNocmluay0wIC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXJpZ2h0IHRleHQtbGFiZWwtMTMgZm9udC1tb25vXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtkaXNwbGF5VmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIHtpc0xvYWRpbmcgJiYgcmVzb3VyY2UgPT09ICdzbGVlcCcgJiYgIWRpc3BsYXlEYXRhLnJlc3VtZUF0ICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHktMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWluLWgtWzMycHhdIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgcm91bmRlZC1zbSBweC0yLjUgcHktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsxNHB4XSBmaXJzdC1sZXR0ZXI6dXBwZXJjYXNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZUF0XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTQgdy1bNTUlXVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Vycm9yID8gKFxuICAgICAgICAgICAgICA8RXJyb3JDYXJkXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJGYWlsZWQgdG8gbG9hZCByZXNvdXJjZSBkZXRhaWxzXCJcbiAgICAgICAgICAgICAgICBkZXRhaWxzPXtlcnJvci5tZXNzYWdlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm15LTRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IGhhc0V4cGlyZWQgPyAoXG4gICAgICAgICAgICAgIDxFeHBpcmVkRGF0YU1lc3NhZ2UgLz5cbiAgICAgICAgICAgICkgOiByZXNvbHZlZEF0dHJpYnV0ZXMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICB7cmVzb2x2ZWRBdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8QXR0cmlidXRlQmxvY2tcbiAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIGtleT17YXR0cmlidXRlfVxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGU9e2F0dHJpYnV0ZX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2Rpc3BsYXlEYXRhW2F0dHJpYnV0ZSBhcyBrZXlvZiB0eXBlb2YgZGlzcGxheURhdGFdfVxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0PXtkaXNwbGF5Q29udGV4dH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9EZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L1N0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgIDwvUnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvQ29udGV4dENhcmRQcm92aWRlcj5cbiAgKTtcbn07XG4iXX0=
@@ -1,4 +1,5 @@
1
1
  export declare function EncryptedDataBlock(): import("react/jsx-runtime").JSX.Element;
2
+ export declare const serializeForClipboard: (value: unknown) => string;
2
3
  export declare function CopyableDataBlock({ data }: {
3
4
  data: unknown;
4
5
  }): import("react/jsx-runtime").JSX.Element;
@@ -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;AAkBD,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,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"}
@@ -14,7 +14,7 @@ export function EncryptedDataBlock() {
14
14
  const ctx = useContext(DecryptClickContext);
15
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"] })) })] }));
16
16
  }
17
- const serializeForClipboard = (value) => {
17
+ export const serializeForClipboard = (value) => {
18
18
  if (typeof value === 'string')
19
19
  return value;
20
20
  if (typeof value === 'number' ||
@@ -32,4 +32,4 @@ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weWFibGUtZGF0YS1ibG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvY29weWFibGUtZGF0YS1ibG9jay50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4QyxNQUFNLDJCQUEyQixHQUFHOzs7RUFHbEMsQ0FBQztBQUVILE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFNUMsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFDLDZGQUE2RixhQUMxRyw2QkFDYyxNQUFNLEVBQ2xCLFNBQVMsRUFBQywwRkFBMEYsWUFFbkcsMkJBQTJCLEdBQ3hCLEVBQ04sY0FBSyxTQUFTLEVBQUMsbURBQW1ELFlBQy9ELEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FDTCxNQUFDLE1BQU0sSUFBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsSUFBSSxhQUNsRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUNsQixLQUFDLE9BQU8sSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLENBQ3RCLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxJQUFJLElBQUMsU0FBUyxFQUFDLFNBQVMsR0FBRyxDQUM3QixFQUNELHFDQUFvQixJQUNiLENBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FDRixnQkFBTSxTQUFTLEVBQUMsd0lBQXdJLGFBQ3RKLEtBQUMsSUFBSSxJQUFDLFNBQVMsRUFBQyxTQUFTLEdBQUcsaUJBRXZCLENBQ1IsR0FDRyxJQUNGLENBQ1AsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBYyxFQUFVLEVBQUU7SUFDdkQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUMsSUFDRSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLE9BQU8sS0FBSyxLQUFLLFNBQVM7UUFDMUIsS0FBSyxLQUFLLElBQUksRUFDZCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxFQUFxQjtJQUMzRCxPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMsc0VBQXNFLGFBQ25GLEtBQUMsVUFBVSxJQUNULFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFDckMsU0FBUyxFQUFDLFdBQVcsRUFDckIsU0FBUyxFQUFDLDRQQUE0UCxHQUN0USxFQUNGLEtBQUMsYUFBYSxJQUFDLElBQUksRUFBRSxJQUFJLEdBQUksSUFDekIsQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgTG9jayB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ29weUJ1dHRvbiB9IGZyb20gJy4uL25ldy10cmFjZS12aWV3ZXIvY29tcG9uZW50cy9jb3B5LWJ1dHRvbic7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi91aS9idXR0b24nO1xuaW1wb3J0IHsgRGF0YUluc3BlY3RvciwgRGVjcnlwdENsaWNrQ29udGV4dCB9IGZyb20gJy4uL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuLi91aS9zcGlubmVyJztcblxuY29uc3QgZW5jcnlwdGVkUGxhY2Vob2xkZXJQcmV2aWV3ID0gYHtcbiAgXCJpbnB1dFwiOiBcIltlbmNyeXB0ZWRdXCIsXG4gIFwicmVzdWx0XCI6IFwiW2VuY3J5cHRlZF1cIlxufWA7XG5cbmV4cG9ydCBmdW5jdGlvbiBFbmNyeXB0ZWREYXRhQmxvY2soKSB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIG1pbi1oLTIwIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItZ3JheS1hbHBoYS00MDAgYmctYmFja2dyb3VuZC0xMDBcIj5cbiAgICAgIDxwcmVcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgY2xhc3NOYW1lPVwicG9pbnRlci1ldmVudHMtbm9uZSBtLTAgc2VsZWN0LW5vbmUgcC0zIGZvbnQtbW9ubyB0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDAgYmx1ci1bNHB4XVwiXG4gICAgICA+XG4gICAgICAgIHtlbmNyeXB0ZWRQbGFjZWhvbGRlclByZXZpZXd9XG4gICAgICA8L3ByZT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICB7Y3R4ID8gKFxuICAgICAgICAgIDxCdXR0b24gb25DbGljaz17Y3R4Lm9uRGVjcnlwdH0gZGlzYWJsZWQ9e2N0eC5pc0RlY3J5cHRpbmd9IHNpemU9XCJ4c1wiPlxuICAgICAgICAgICAge2N0eC5pc0RlY3J5cHRpbmcgPyAoXG4gICAgICAgICAgICAgIDxTcGlubmVyIHNpemU9ezEwfSAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPExvY2sgY2xhc3NOYW1lPVwiaC0zIHctM1wiIC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPHNwYW4+RGVjcnlwdDwvc3Bhbj5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWdyYXktMTAwIHB4LTEuNSBweS0wLjUgdGV4dC1idXR0b24tMTIgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgPExvY2sgY2xhc3NOYW1lPVwiaC0zIHctM1wiIC8+XG4gICAgICAgICAgICBFbmNyeXB0ZWRcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuY29uc3Qgc2VyaWFsaXplRm9yQ2xpcGJvYXJkID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZTtcbiAgaWYgKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fFxuICAgIHZhbHVlID09PSBudWxsXG4gICkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDb3B5YWJsZURhdGFCbG9jayh7IGRhdGEgfTogeyBkYXRhOiB1bmtub3duIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIG92ZXJmbG93LXgtYXV0byByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItZ3JheS1hbHBoYS00MDAgcC0zXCI+XG4gICAgICA8Q29weUJ1dHRvblxuICAgICAgICBjb3B5VGV4dD17c2VyaWFsaXplRm9yQ2xpcGJvYXJkKGRhdGEpfVxuICAgICAgICBhcmlhTGFiZWw9XCJDb3B5IGRhdGFcIlxuICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIHRvcC0yIHotMTAgZmxleCBoLTYgdy02IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItZ3JheS1hbHBoYS00MDAgIWJnLWJhY2tncm91bmQtMTAwIHAtMCB0ZXh0LWdyYXktOTAwIHRyYW5zaXRpb24tdHJhbnNmb3JtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTEwMCBob3ZlcjpiZy1ncmF5LTIwMCBhY3RpdmU6c2NhbGUtOTUgYWN0aXZlOmJnLWdyYXktMzAwXCJcbiAgICAgIC8+XG4gICAgICA8RGF0YUluc3BlY3RvciBkYXRhPXtkYXRhfSAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weWFibGUtZGF0YS1ibG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvY29weWFibGUtZGF0YS1ibG9jay50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNuQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4QyxNQUFNLDJCQUEyQixHQUFHOzs7RUFHbEMsQ0FBQztBQUVILE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFNUMsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFDLDZGQUE2RixhQUMxRyw2QkFDYyxNQUFNLEVBQ2xCLFNBQVMsRUFBQywwRkFBMEYsWUFFbkcsMkJBQTJCLEdBQ3hCLEVBQ04sY0FBSyxTQUFTLEVBQUMsbURBQW1ELFlBQy9ELEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FDTCxNQUFDLE1BQU0sSUFBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsSUFBSSxhQUNsRSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUNsQixLQUFDLE9BQU8sSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLENBQ3RCLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxJQUFJLElBQUMsU0FBUyxFQUFDLFNBQVMsR0FBRyxDQUM3QixFQUNELHFDQUFvQixJQUNiLENBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FDRixnQkFBTSxTQUFTLEVBQUMsd0lBQXdJLGFBQ3RKLEtBQUMsSUFBSSxJQUFDLFNBQVMsRUFBQyxTQUFTLEdBQUcsaUJBRXZCLENBQ1IsR0FDRyxJQUNGLENBQ1AsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQWMsRUFBVSxFQUFFO0lBQzlELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVDLElBQ0UsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixPQUFPLEtBQUssS0FBSyxTQUFTO1FBQzFCLEtBQUssS0FBSyxJQUFJLEVBQ2QsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxFQUFFLElBQUksRUFBcUI7SUFDM0QsT0FBTyxDQUNMLGVBQUssU0FBUyxFQUFDLHNFQUFzRSxhQUNuRixLQUFDLFVBQVUsSUFDVCxRQUFRLEVBQUUscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQ3JDLFNBQVMsRUFBQyxXQUFXLEVBQ3JCLFNBQVMsRUFBQyw0UEFBNFAsR0FDdFEsRUFDRixLQUFDLGFBQWEsSUFBQyxJQUFJLEVBQUUsSUFBSSxHQUFJLElBQ3pCLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IExvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENvcHlCdXR0b24gfSBmcm9tICcuLi9uZXctdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvY29weS1idXR0b24nO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vdWkvYnV0dG9uJztcbmltcG9ydCB7IERhdGFJbnNwZWN0b3IsIERlY3J5cHRDbGlja0NvbnRleHQgfSBmcm9tICcuLi91aS9kYXRhLWluc3BlY3Rvcic7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnLi4vdWkvc3Bpbm5lcic7XG5cbmNvbnN0IGVuY3J5cHRlZFBsYWNlaG9sZGVyUHJldmlldyA9IGB7XG4gIFwiaW5wdXRcIjogXCJbZW5jcnlwdGVkXVwiLFxuICBcInJlc3VsdFwiOiBcIltlbmNyeXB0ZWRdXCJcbn1gO1xuXG5leHBvcnQgZnVuY3Rpb24gRW5jcnlwdGVkRGF0YUJsb2NrKCkge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KERlY3J5cHRDbGlja0NvbnRleHQpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBtaW4taC0yMCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWJhY2tncm91bmQtMTAwXCI+XG4gICAgICA8cHJlXG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgbS0wIHNlbGVjdC1ub25lIHAtMyBmb250LW1vbm8gdGV4dC1sYWJlbC0xMiB0ZXh0LWdyYXktOTAwIGJsdXItWzRweF1cIlxuICAgICAgPlxuICAgICAgICB7ZW5jcnlwdGVkUGxhY2Vob2xkZXJQcmV2aWV3fVxuICAgICAgPC9wcmU+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAge2N0eCA/IChcbiAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e2N0eC5vbkRlY3J5cHR9IGRpc2FibGVkPXtjdHguaXNEZWNyeXB0aW5nfSBzaXplPVwieHNcIj5cbiAgICAgICAgICAgIHtjdHguaXNEZWNyeXB0aW5nID8gKFxuICAgICAgICAgICAgICA8U3Bpbm5lciBzaXplPXsxMH0gLz5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxMb2NrIGNsYXNzTmFtZT1cImgtMyB3LTNcIiAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxzcGFuPkRlY3J5cHQ8L3NwYW4+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCBiZy1ncmF5LTEwMCBweC0xLjUgcHktMC41IHRleHQtYnV0dG9uLTEyIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgIDxMb2NrIGNsYXNzTmFtZT1cImgtMyB3LTNcIiAvPlxuICAgICAgICAgICAgRW5jcnlwdGVkXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVGb3JDbGlwYm9hcmQgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHZhbHVlO1xuICBpZiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgdmFsdWUgPT09IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENvcHlhYmxlRGF0YUJsb2NrKHsgZGF0YSB9OiB7IGRhdGE6IHVua25vd24gfSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgb3ZlcmZsb3cteC1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCBwLTNcIj5cbiAgICAgIDxDb3B5QnV0dG9uXG4gICAgICAgIGNvcHlUZXh0PXtzZXJpYWxpemVGb3JDbGlwYm9hcmQoZGF0YSl9XG4gICAgICAgIGFyaWFMYWJlbD1cIkNvcHkgZGF0YVwiXG4gICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgdG9wLTIgei0xMCBmbGV4IGgtNiB3LTYgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCAhYmctYmFja2dyb3VuZC0xMDAgcC0wIHRleHQtZ3JheS05MDAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMTAwIGhvdmVyOmJnLWdyYXktMjAwIGFjdGl2ZTpzY2FsZS05NSBhY3RpdmU6YmctZ3JheS0zMDBcIlxuICAgICAgLz5cbiAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e2RhdGF9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
@@ -24,11 +24,11 @@ export declare const DecryptClickContext: import("react").Context<DecryptClickCo
24
24
  export declare const RunClickContext: import("react").Context<((runId: string) => void) | undefined>;
25
25
  /**
26
26
  * Recursively walk data and replace RunRef/StreamRef/typed array objects with
27
- * non-expandable versions so ObjectInspector doesn't show their internals.
27
+ * non-expandable versions so the renderer doesn't show their internals.
28
28
  * Only recurses into plain objects and arrays to avoid stripping class
29
- * instances (Date, Error, URL, Headers, etc.) that have their own rendering in
30
- * NodeRenderer. Map and Set containers are preserved while their contents are
31
- * prepared for display.
29
+ * instances (Date, Error, URL, Headers, etc.) that have their own rendering.
30
+ * Map and Set containers are preserved while their contents are prepared for
31
+ * display.
32
32
  *
33
33
  * Exported for testing the typed-array detection path used by hydrated
34
34
  * AI agent stream chunks (e.g. `{ delta: new Uint8Array(...) }`).
@@ -37,7 +37,7 @@ export declare function collapseRefs(data: unknown): unknown;
37
37
  export interface DataInspectorProps {
38
38
  /** The data to inspect */
39
39
  data: unknown;
40
- /** Initial expand depth (default: 2) */
40
+ /** Levels strictly below this number auto-expand (default: 2) */
41
41
  expandLevel?: number;
42
42
  /** Optional name for the root node */
43
43
  name?: string;
@@ -50,6 +50,6 @@ export interface DataInspectorProps {
50
50
  /** Whether decryption is currently in progress */
51
51
  isDecrypting?: boolean;
52
52
  }
53
- export declare function DataInspector({ data, expandLevel, name, onStreamClick, onRunClick, onDecrypt, isDecrypting, }: DataInspectorProps): import("react/jsx-runtime").JSX.Element;
53
+ export declare function DataInspector({ data, expandLevel, name, onStreamClick, onRunClick, onDecrypt, isDecrypting, }: DataInspectorProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
54
54
  export {};
55
55
  //# sourceMappingURL=data-inspector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-inspector.d.ts","sourceRoot":"","sources":["../../../src/components/ui/data-inspector.tsx"],"names":[],"mappings":"AA4BA,OAAO,EACL,KAAK,wBAAwB,EAG9B,MAAM,0BAA0B,CAAC;AAmBlC,QAAA,MAAM,kBAAkB,+BAA+B,CAAC;AAYxD,UAAU,YAAY;IACpB,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC;AAmCD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAIpE;AAoBD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,sCACjB,MAAM,KAAK,IAAI,cACjB,CAAC;AAEb;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,mBAAmB,+DAEpB,CAAC;AAEb,eAAO,MAAM,eAAe,mCACjB,MAAM,KAAK,IAAI,cACd,CAAC;AA2Yb;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CA2BnD;AAED,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,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;CACxB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,WAAe,EACf,IAAI,EACJ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAoB,GACrB,EAAE,kBAAkB,2CAsDpB"}
1
+ {"version":3,"file":"data-inspector.d.ts","sourceRoot":"","sources":["../../../src/components/ui/data-inspector.tsx"],"names":[],"mappings":"AA4BA,OAAO,EACL,KAAK,wBAAwB,EAG9B,MAAM,0BAA0B,CAAC;AAalC,QAAA,MAAM,kBAAkB,+BAA+B,CAAC;AAYxD,UAAU,YAAY;IACpB,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC;AA0CD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAIpE;AAwBD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,sCACjB,MAAM,KAAK,IAAI,cACjB,CAAC;AAEb;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,mBAAmB,+DAEpB,CAAC;AAEb,eAAO,MAAM,eAAe,mCACjB,MAAM,KAAK,IAAI,cACd,CAAC;AAgsBb;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CA2BnD;AAMD,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,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;CACxB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,WAAe,EACf,IAAI,EACJ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAoB,GACrB,EAAE,kBAAkB,8FAsCpB"}